summaryrefslogtreecommitdiff
path: root/.github/auto_request_review.yml
AgeCommit message (Expand)Author
2022-09-13Tweak the glob for auto_request_reviewTakashi Kokubun
2022-09-13Configure auto_request_review for YJIT teamTakashi Kokubun
Diffstat
-rw-r--r--.dir-locals.el39
-rw-r--r--.document36
-rw-r--r--.editorconfig26
-rw-r--r--.gdbinit638
-rw-r--r--.git-blame-ignore-revs41
-rw-r--r--.gitattributes4
-rw-r--r--.github/SECURITY.md9
-rw-r--r--.github/actions/capiext/action.yml86
-rw-r--r--.github/actions/compilers/action.yml133
-rwxr-xr-x.github/actions/compilers/entrypoint.sh90
-rw-r--r--.github/actions/launchable/setup/action.yml313
-rw-r--r--.github/actions/setup/directories/action.yml194
-rw-r--r--.github/actions/setup/macos/action.yml29
-rw-r--r--.github/actions/setup/ubuntu/action.yml53
-rw-r--r--.github/actions/slack/action.yml51
-rw-r--r--.github/auto_request_review.yml20
-rw-r--r--.github/dependabot.yml22
-rw-r--r--.github/labeler.yml6
-rw-r--r--.github/workflows/annocheck.yml110
-rw-r--r--.github/workflows/auto_request_review.yml20
-rw-r--r--.github/workflows/auto_review_pr.yml33
-rw-r--r--.github/workflows/baseruby.yml74
-rw-r--r--.github/workflows/bundled_gems.yml190
-rw-r--r--.github/workflows/check_dependencies.yml59
-rw-r--r--.github/workflows/check_misc.yml127
-rw-r--r--.github/workflows/codeql-analysis.yml121
-rw-r--r--.github/workflows/compilers.yml335
-rw-r--r--.github/workflows/cygwin.yml71
-rw-r--r--.github/workflows/default_gems_list.yml99
-rw-r--r--.github/workflows/dependabot_automerge.yml32
-rw-r--r--.github/workflows/labeler.yml12
-rw-r--r--.github/workflows/macos.yml202
-rw-r--r--.github/workflows/mingw.yml243
-rw-r--r--.github/workflows/modgc.yml176
-rw-r--r--.github/workflows/parse_y.yml100
-rw-r--r--.github/workflows/post_push.yml85
-rw-r--r--.github/workflows/pr-playground.yml127
-rw-r--r--.github/workflows/publish.yml107
-rw-r--r--.github/workflows/release.yml18
-rw-r--r--.github/workflows/rust-warnings.yml60
-rw-r--r--.github/workflows/scorecards.yml78
-rw-r--r--.github/workflows/spec_guards.yml67
-rw-r--r--.github/workflows/sync_default_gems.yml77
-rw-r--r--.github/workflows/ubuntu.yml269
-rw-r--r--.github/workflows/wasm.yml179
-rw-r--r--.github/workflows/windows.yml201
-rw-r--r--.github/workflows/wsl.yml70
-rw-r--r--.github/workflows/yjit-macos.yml198
-rw-r--r--.github/workflows/yjit-ubuntu.yml240
-rw-r--r--.github/workflows/zjit-macos.yml214
-rw-r--r--.github/workflows/zjit-ubuntu.yml267
-rw-r--r--.gitignore135
-rw-r--r--.indent.pro17
-rw-r--r--.mailmap431
-rw-r--r--.rdoc_options39
-rw-r--r--.rspec_parallel2
-rw-r--r--.travis.yml101
-rw-r--r--BSDL6
-rw-r--r--CONTRIBUTING.md5
-rw-r--r--COPYING78
-rw-r--r--COPYING.ja68
-rw-r--r--Cargo.lock193
-rw-r--r--Cargo.toml60
-rw-r--r--ChangeLog1052
-rw-r--r--LEGAL1370
-rw-r--r--Makefile.in563
-rw-r--r--NEWS39
-rw-r--r--NEWS.md87
-rw-r--r--README.ja.md85
-rw-r--r--README.md175
-rw-r--r--acinclude.m446
-rw-r--r--aclocal.m415
-rw-r--r--addr2line.c3345
-rw-r--r--addr2line.h9
-rw-r--r--appveyor.yml37
-rw-r--r--array.c8353
-rw-r--r--array.rb287
-rw-r--r--ast.c1165
-rw-r--r--ast.rb332
-rwxr-xr-xautogen.sh22
-rwxr-xr-x[-rw-r--r--]basictest/runner.rb5
-rwxr-xr-x[-rw-r--r--]basictest/test.rb60
-rw-r--r--benchmark/README.md75
-rw-r--r--benchmark/app_answer.rb (renamed from benchmark/bm_app_answer.rb)0
-rw-r--r--benchmark/app_aobench.rb297
-rw-r--r--benchmark/app_erb.yml23
-rw-r--r--benchmark/app_factorial.rb (renamed from benchmark/bm_app_factorial.rb)0
-rw-r--r--benchmark/app_fib.rb10
-rw-r--r--benchmark/app_lc_fizzbuzz.rb (renamed from benchmark/bm_app_lc_fizzbuzz.rb)0
-rw-r--r--benchmark/app_mandelbrot.rb (renamed from benchmark/bm_app_mandelbrot.rb)0
-rw-r--r--benchmark/app_pentomino.rb130
-rw-r--r--benchmark/app_raise.rb (renamed from benchmark/bm_app_raise.rb)0
-rw-r--r--benchmark/app_strconcat.rb (renamed from benchmark/bm_app_strconcat.rb)0
-rw-r--r--benchmark/app_tak.rb (renamed from benchmark/bm_app_tak.rb)0
-rw-r--r--benchmark/app_tarai.rb (renamed from benchmark/bm_app_tarai.rb)0
-rw-r--r--benchmark/app_uri.rb (renamed from benchmark/bm_app_uri.rb)0
-rw-r--r--benchmark/array_flatten.yml19
-rw-r--r--benchmark/array_intersection.yml14
-rw-r--r--benchmark/array_large_literal.yml19
-rw-r--r--benchmark/array_max_float.yml30
-rw-r--r--benchmark/array_max_int.yml31
-rw-r--r--benchmark/array_max_str.yml30
-rw-r--r--benchmark/array_min.yml31
-rw-r--r--benchmark/array_sample.yml4
-rw-r--r--benchmark/array_sample_100k_10.rb2
-rw-r--r--benchmark/array_sample_100k_11.rb2
-rw-r--r--benchmark/array_sample_100k__100.rb2
-rw-r--r--benchmark/array_sample_100k__1k.rb2
-rw-r--r--benchmark/array_sample_100k__6k.rb2
-rw-r--r--benchmark/array_sample_100k___10k.rb2
-rw-r--r--benchmark/array_sample_100k___50k.rb2
-rw-r--r--benchmark/array_shift.rb (renamed from benchmark/bm_array_shift.rb)0
-rw-r--r--benchmark/array_small_and.rb17
-rw-r--r--benchmark/array_small_diff.rb17
-rw-r--r--benchmark/array_small_or.rb17
-rw-r--r--benchmark/array_sort_block.rb2
-rw-r--r--benchmark/array_sort_float.rb2
-rw-r--r--benchmark/array_sort_int.yml15
-rw-r--r--benchmark/array_values_at_int.rb2
-rw-r--r--benchmark/array_values_at_range.rb2
-rw-r--r--benchmark/attr_accessor.yml29
-rw-r--r--benchmark/bighash.rb1
-rw-r--r--benchmark/bm_app_aobench.rb291
-rw-r--r--benchmark/bm_app_erb.rb26
-rw-r--r--benchmark/bm_app_fib.rb10
-rw-r--r--benchmark/bm_app_pentomino.rb259
-rw-r--r--benchmark/bm_loop_generator.rb14
-rw-r--r--benchmark/bm_require.rb7
-rw-r--r--benchmark/bm_require_thread.rb15
-rw-r--r--benchmark/bm_so_ackermann.rb19
-rw-r--r--benchmark/bm_so_array.rb23
-rw-r--r--benchmark/bm_so_concatenate.rb18
-rw-r--r--benchmark/bm_so_count_words.rb19
-rw-r--r--benchmark/bm_so_exception.rb61
-rw-r--r--benchmark/bm_so_fasta.rb81
-rw-r--r--benchmark/bm_so_k_nucleotide.rb48
-rw-r--r--benchmark/bm_so_matrix.rb48
-rw-r--r--benchmark/bm_so_meteor_contest.rb564
-rw-r--r--benchmark/bm_so_nbody.rb148
-rw-r--r--benchmark/bm_so_nested_loop.rb24
-rw-r--r--benchmark/bm_so_object.rb56
-rw-r--r--benchmark/bm_so_pidigits.rb92
-rw-r--r--benchmark/bm_so_reverse_complement.rb30
-rw-r--r--benchmark/bm_vm1_attr_ivar.rb14
-rw-r--r--benchmark/bm_vm1_attr_ivar_set.rb14
-rw-r--r--benchmark/bm_vm1_block.rb10
-rw-r--r--benchmark/bm_vm1_const.rb8
-rw-r--r--benchmark/bm_vm1_ensure.rb11
-rw-r--r--benchmark/bm_vm1_float_simple.rb7
-rw-r--r--benchmark/bm_vm1_gc_short_lived.rb10
-rw-r--r--benchmark/bm_vm1_gc_short_with_complex_long.rb27
-rw-r--r--benchmark/bm_vm1_gc_short_with_long.rb13
-rw-r--r--benchmark/bm_vm1_gc_short_with_symbol.rb15
-rw-r--r--benchmark/bm_vm1_gc_wb_ary.rb12
-rw-r--r--benchmark/bm_vm1_gc_wb_ary_promoted.rb14
-rw-r--r--benchmark/bm_vm1_gc_wb_obj.rb15
-rw-r--r--benchmark/bm_vm1_gc_wb_obj_promoted.rb17
-rw-r--r--benchmark/bm_vm1_ivar.rb8
-rw-r--r--benchmark/bm_vm1_ivar_set.rb6
-rw-r--r--benchmark/bm_vm1_length.rb9
-rw-r--r--benchmark/bm_vm1_lvar_init.rb18
-rw-r--r--benchmark/bm_vm1_lvar_set.rb5
-rw-r--r--benchmark/bm_vm1_neq.rb8
-rw-r--r--benchmark/bm_vm1_not.rb7
-rw-r--r--benchmark/bm_vm1_rescue.rb7
-rw-r--r--benchmark/bm_vm1_simplereturn.rb9
-rw-r--r--benchmark/bm_vm1_swap.rb8
-rw-r--r--benchmark/bm_vm1_yield.rb10
-rw-r--r--benchmark/bm_vm2_array.rb5
-rw-r--r--benchmark/bm_vm2_bigarray.rb106
-rw-r--r--benchmark/bm_vm2_bighash.rb5
-rw-r--r--benchmark/bm_vm2_case.rb14
-rw-r--r--benchmark/bm_vm2_case_lit.rb19
-rw-r--r--benchmark/bm_vm2_defined_method.rb9
-rw-r--r--benchmark/bm_vm2_dstr.rb6
-rw-r--r--benchmark/bm_vm2_eval.rb6
-rw-r--r--benchmark/bm_vm2_method.rb9
-rw-r--r--benchmark/bm_vm2_method_missing.rb12
-rw-r--r--benchmark/bm_vm2_method_with_block.rb9
-rw-r--r--benchmark/bm_vm2_mutex.rb9
-rw-r--r--benchmark/bm_vm2_newlambda.rb5
-rw-r--r--benchmark/bm_vm2_poly_method.rb20
-rw-r--r--benchmark/bm_vm2_poly_method_ov.rb20
-rw-r--r--benchmark/bm_vm2_proc.rb14
-rw-r--r--benchmark/bm_vm2_raise1.rb18
-rw-r--r--benchmark/bm_vm2_raise2.rb18
-rw-r--r--benchmark/bm_vm2_regexp.rb6
-rw-r--r--benchmark/bm_vm2_send.rb12
-rw-r--r--benchmark/bm_vm2_string_literal.rb5
-rw-r--r--benchmark/bm_vm2_struct_big_aref_hi.rb7
-rw-r--r--benchmark/bm_vm2_struct_big_aref_lo.rb7
-rw-r--r--benchmark/bm_vm2_struct_big_aset.rb7
-rw-r--r--benchmark/bm_vm2_struct_big_href_hi.rb7
-rw-r--r--benchmark/bm_vm2_struct_big_href_lo.rb7
-rw-r--r--benchmark/bm_vm2_struct_big_hset.rb7
-rw-r--r--benchmark/bm_vm2_struct_small_aref.rb7
-rw-r--r--benchmark/bm_vm2_struct_small_aset.rb7
-rw-r--r--benchmark/bm_vm2_struct_small_href.rb7
-rw-r--r--benchmark/bm_vm2_struct_small_hset.rb7
-rw-r--r--benchmark/bm_vm2_super.rb20
-rw-r--r--benchmark/bm_vm2_unif1.rb8
-rw-r--r--benchmark/bm_vm2_zsuper.rb20
-rw-r--r--benchmark/bm_vm_thread_alive_check1.rb6
-rw-r--r--benchmark/bm_vm_thread_mutex1.rb21
-rw-r--r--benchmark/bm_vm_thread_mutex2.rb21
-rw-r--r--benchmark/bm_vm_thread_mutex3.rb20
-rw-r--r--benchmark/bm_vm_thread_pass.rb15
-rw-r--r--benchmark/bm_vm_thread_pass_flood.rb8
-rw-r--r--benchmark/bm_vm_thread_queue.rb18
-rw-r--r--benchmark/buffer_each.yml27
-rw-r--r--benchmark/buffer_get.yml25
-rw-r--r--benchmark/cgi_escape_html.yml31
-rw-r--r--benchmark/class_superclass.yml23
-rw-r--r--benchmark/complex_float_add.yml7
-rw-r--r--benchmark/complex_float_div.yml7
-rw-r--r--benchmark/complex_float_mul.yml7
-rw-r--r--benchmark/complex_float_new.yml7
-rw-r--r--benchmark/complex_float_power.yml7
-rw-r--r--benchmark/complex_float_sub.yml7
-rw-r--r--benchmark/constant_invalidation.rb22
-rw-r--r--benchmark/dir_empty_p.rb5
-rw-r--r--benchmark/driver.rb400
-rw-r--r--benchmark/enum_lazy_flat_map.yml16
-rw-r--r--benchmark/enum_lazy_grep_v_100.rb4
-rw-r--r--benchmark/enum_lazy_grep_v_20.rb4
-rw-r--r--benchmark/enum_lazy_grep_v_50.rb4
-rw-r--r--benchmark/enum_lazy_uniq_100.rb4
-rw-r--r--benchmark/enum_lazy_uniq_20.rb4
-rw-r--r--benchmark/enum_lazy_uniq_50.rb4
-rw-r--r--benchmark/enum_lazy_zip.yml22
-rw-r--r--benchmark/enum_minmax.yml25
-rw-r--r--benchmark/enum_sort.yml15
-rw-r--r--benchmark/enum_sort_by.yml53
-rw-r--r--benchmark/enum_tally.yml4
-rw-r--r--benchmark/erb_escape_html.yml31
-rw-r--r--benchmark/erb_render.yml24
-rw-r--r--benchmark/fiber_chain.yml36
-rw-r--r--benchmark/fiber_locals.yml8
-rw-r--r--benchmark/file_chmod.rb9
-rw-r--r--benchmark/file_join.yml7
-rw-r--r--benchmark/file_rename.rb11
-rw-r--r--benchmark/float_methods.yml14
-rw-r--r--benchmark/float_neg_posi.yml8
-rw-r--r--benchmark/float_to_s.yml7
-rw-r--r--benchmark/gc/aobench.rb2
-rw-r--r--benchmark/gc/binary_trees.rb2
-rw-r--r--benchmark/gc/gcbench.rb3
-rw-r--r--benchmark/gc/pentomino.rb2
-rw-r--r--benchmark/hash_aref_array.rb5
-rw-r--r--benchmark/hash_aref_dsym.rb (renamed from benchmark/bm_hash_aref_dsym.rb)0
-rw-r--r--benchmark/hash_aref_dsym_long.rb (renamed from benchmark/bm_hash_aref_dsym_long.rb)0
-rw-r--r--benchmark/hash_aref_fix.rb (renamed from benchmark/bm_hash_aref_fix.rb)0
-rw-r--r--benchmark/hash_aref_flo.rb (renamed from benchmark/bm_hash_aref_flo.rb)0
-rw-r--r--benchmark/hash_aref_miss.rb (renamed from benchmark/bm_hash_aref_miss.rb)0
-rw-r--r--benchmark/hash_aref_str.rb (renamed from benchmark/bm_hash_aref_str.rb)0
-rw-r--r--benchmark/hash_aref_str_lit.yml20
-rw-r--r--benchmark/hash_aref_sym.rb (renamed from benchmark/bm_hash_aref_sym.rb)0
-rw-r--r--benchmark/hash_aref_sym_long.rb (renamed from benchmark/bm_hash_aref_sym_long.rb)0
-rw-r--r--benchmark/hash_defaults.yml6
-rw-r--r--benchmark/hash_dup.yml8
-rw-r--r--benchmark/hash_first.yml11
-rw-r--r--benchmark/hash_flatten.rb (renamed from benchmark/bm_hash_flatten.rb)0
-rw-r--r--benchmark/hash_ident_flo.rb (renamed from benchmark/bm_hash_ident_flo.rb)0
-rw-r--r--benchmark/hash_ident_num.rb (renamed from benchmark/bm_hash_ident_num.rb)0
-rw-r--r--benchmark/hash_ident_obj.rb (renamed from benchmark/bm_hash_ident_obj.rb)0
-rw-r--r--benchmark/hash_ident_str.rb (renamed from benchmark/bm_hash_ident_str.rb)0
-rw-r--r--benchmark/hash_ident_sym.rb (renamed from benchmark/bm_hash_ident_sym.rb)0
-rw-r--r--benchmark/hash_key.yml5
-rw-r--r--benchmark/hash_keys.rb (renamed from benchmark/bm_hash_keys.rb)0
-rw-r--r--benchmark/hash_literal_small2.rb3
-rw-r--r--benchmark/hash_literal_small4.rb3
-rw-r--r--benchmark/hash_literal_small8.rb3
-rw-r--r--benchmark/hash_long.rb4
-rw-r--r--benchmark/hash_new.yml16
-rw-r--r--benchmark/hash_shift.rb (renamed from benchmark/bm_hash_shift.rb)0
-rw-r--r--benchmark/hash_shift_u16.rb (renamed from benchmark/bm_hash_shift_u16.rb)0
-rw-r--r--benchmark/hash_shift_u24.rb (renamed from benchmark/bm_hash_shift_u24.rb)0
-rw-r--r--benchmark/hash_shift_u32.rb (renamed from benchmark/bm_hash_shift_u32.rb)0
-rw-r--r--benchmark/hash_small2.rb1
-rw-r--r--benchmark/hash_small4.rb1
-rw-r--r--benchmark/hash_small8.rb1
-rw-r--r--benchmark/hash_to_proc.rb (renamed from benchmark/bm_hash_to_proc.rb)0
-rw-r--r--benchmark/hash_values.rb (renamed from benchmark/bm_hash_values.rb)0
-rw-r--r--benchmark/int_quo.rb1
-rw-r--r--benchmark/io_close.yml13
-rw-r--r--benchmark/io_close_contended.yml21
-rw-r--r--benchmark/io_copy_stream_write.rb24
-rw-r--r--benchmark/io_copy_stream_write_socket.rb35
-rw-r--r--benchmark/io_file_create.rb (renamed from benchmark/bm_io_file_create.rb)0
-rw-r--r--benchmark/io_file_read.rb (renamed from benchmark/bm_io_file_read.rb)0
-rw-r--r--benchmark/io_file_write.rb (renamed from benchmark/bm_io_file_write.rb)0
-rw-r--r--benchmark/io_nonblock_noex.rb (renamed from benchmark/bm_io_nonblock_noex.rb)0
-rw-r--r--benchmark/io_nonblock_noex2.rb (renamed from benchmark/bm_io_nonblock_noex2.rb)0
-rw-r--r--benchmark/io_pipe_rw.rb13
-rw-r--r--benchmark/io_select.rb (renamed from benchmark/bm_io_select.rb)0
-rw-r--r--benchmark/io_select2.rb (renamed from benchmark/bm_io_select2.rb)0
-rw-r--r--benchmark/io_select3.rb (renamed from benchmark/bm_io_select3.rb)0
-rw-r--r--benchmark/io_write.rb22
-rw-r--r--benchmark/irb_color.yml13
-rw-r--r--benchmark/irb_exec.yml10
-rw-r--r--benchmark/iseq_load_from_binary.yml25
-rw-r--r--benchmark/ivar_extend.yml23
-rw-r--r--benchmark/kernel_clone.yml6
-rw-r--r--benchmark/kernel_float.yml5
-rw-r--r--benchmark/kernel_tap.yml6
-rw-r--r--benchmark/kernel_then.yml6
-rw-r--r--benchmark/keyword_arguments.yml13
-rw-r--r--benchmark/lib/benchmark_driver/output/driver.rb36
-rw-r--r--benchmark/lib/benchmark_driver/runner/cstime.rb22
-rw-r--r--benchmark/lib/benchmark_driver/runner/cutime.rb22
-rw-r--r--benchmark/lib/benchmark_driver/runner/peak.rb151
-rw-r--r--benchmark/lib/benchmark_driver/runner/ractor.rb122
-rw-r--r--benchmark/lib/benchmark_driver/runner/size.rb25
-rw-r--r--benchmark/lib/benchmark_driver/runner/stime.rb22
-rw-r--r--benchmark/lib/benchmark_driver/runner/total.rb137
-rw-r--r--benchmark/lib/benchmark_driver/runner/utime.rb22
-rw-r--r--benchmark/lib/load.rb18
-rw-r--r--benchmark/loop_each.yml4
-rw-r--r--benchmark/loop_for.rb (renamed from benchmark/bm_loop_for.rb)0
-rw-r--r--benchmark/loop_generator.rb14
-rw-r--r--benchmark/loop_times.rb (renamed from benchmark/bm_loop_times.rb)0
-rw-r--r--benchmark/loop_times_megamorphic.yml7
-rw-r--r--benchmark/loop_whileloop.rb (renamed from benchmark/bm_loop_whileloop.rb)0
-rw-r--r--benchmark/loop_whileloop2.rb (renamed from benchmark/bm_loop_whileloop2.rb)0
-rw-r--r--benchmark/make_fasta_output.rb19
-rw-r--r--benchmark/marshal_dump_flo.rb (renamed from benchmark/bm_marshal_dump_flo.rb)0
-rw-r--r--benchmark/marshal_dump_load_geniv.rb (renamed from benchmark/bm_marshal_dump_load_geniv.rb)0
-rw-r--r--benchmark/marshal_dump_load_integer.yml22
-rw-r--r--benchmark/marshal_dump_load_time.rb (renamed from benchmark/bm_marshal_dump_load_time.rb)0
-rw-r--r--benchmark/masgn.yml53
-rw-r--r--benchmark/match_gt4.rb1
-rw-r--r--benchmark/match_small.rb1
-rw-r--r--benchmark/method_bind_call.yml16
-rw-r--r--benchmark/module_eqq.yml32
-rw-r--r--benchmark/nil_p.yml9
-rw-r--r--benchmark/nilclass.yml16
-rw-r--r--benchmark/num_zero_p.yml8
-rw-r--r--benchmark/numeric_methods.yml29
-rw-r--r--benchmark/object_allocate.yml49
-rw-r--r--benchmark/object_class.yml40
-rw-r--r--benchmark/object_id.yml4
-rw-r--r--benchmark/objspace_dump_all.yml13
-rw-r--r--benchmark/other-lang/fact.py2
-rw-r--r--benchmark/pm_array.yml19
-rw-r--r--benchmark/prepare_require.rb25
-rw-r--r--benchmark/prepare_require_thread.rb2
-rw-r--r--benchmark/prepare_so_count_words.rb15
-rw-r--r--benchmark/prepare_so_k_nucleotide.rb2
-rw-r--r--benchmark/prepare_so_reverse_complement.rb2
-rw-r--r--benchmark/ractor_const.yml4
-rw-r--r--benchmark/ractor_float_to_s.yml8
-rw-r--r--benchmark/ractor_string_fstring.yml18
-rw-r--r--benchmark/range_bsearch_bignum.yml10
-rw-r--r--benchmark/range_bsearch_endpointless.yml21
-rw-r--r--benchmark/range_bsearch_fixnum.yml10
-rw-r--r--benchmark/range_count.yml11
-rw-r--r--benchmark/range_last.yml4
-rw-r--r--benchmark/range_min.yml2
-rw-r--r--benchmark/range_overlap.yml19
-rw-r--r--benchmark/range_reverse_each.yml16
-rw-r--r--benchmark/realpath.yml33
-rw-r--r--benchmark/regexp_dup.yml6
-rw-r--r--benchmark/regexp_new.yml7
-rw-r--r--benchmark/report.rb79
-rw-r--r--benchmark/require.yml32
-rw-r--r--benchmark/require_thread.yml40
-rw-r--r--benchmark/run.rb127
-rw-r--r--benchmark/runc.rb27
-rw-r--r--benchmark/scan.yaml16
-rw-r--r--benchmark/search.yaml16
-rw-r--r--benchmark/securerandom.rb (renamed from benchmark/bm_securerandom.rb)0
-rw-r--r--benchmark/set.yml261
-rw-r--r--benchmark/so_ackermann.rb19
-rw-r--r--benchmark/so_array.rb23
-rw-r--r--benchmark/so_binary_trees.rb (renamed from benchmark/bm_so_binary_trees.rb)0
-rw-r--r--benchmark/so_concatenate.rb18
-rw-r--r--benchmark/so_count_words.yml66
-rw-r--r--benchmark/so_exception.rb61
-rw-r--r--benchmark/so_fannkuch.rb (renamed from benchmark/bm_so_fannkuch.rb)0
-rw-r--r--benchmark/so_fasta.rb81
-rw-r--r--benchmark/so_k_nucleotide.yml155
-rw-r--r--benchmark/so_lists.rb (renamed from benchmark/bm_so_lists.rb)0
-rw-r--r--benchmark/so_mandelbrot.rb (renamed from benchmark/bm_so_mandelbrot.rb)0
-rw-r--r--benchmark/so_matrix.rb48
-rw-r--r--benchmark/so_meteor_contest.rb563
-rw-r--r--benchmark/so_nbody.rb148
-rw-r--r--benchmark/so_nested_loop.rb24
-rw-r--r--benchmark/so_nsieve.rb (renamed from benchmark/bm_so_nsieve.rb)0
-rw-r--r--benchmark/so_nsieve_bits.rb (renamed from benchmark/bm_so_nsieve_bits.rb)0
-rw-r--r--benchmark/so_object.rb56
-rw-r--r--benchmark/so_partial_sums.rb (renamed from benchmark/bm_so_partial_sums.rb)0
-rw-r--r--benchmark/so_pidigits.rb92
-rw-r--r--benchmark/so_random.rb (renamed from benchmark/bm_so_random.rb)0
-rw-r--r--benchmark/so_reverse_complement.yml137
-rw-r--r--benchmark/so_sieve.rb (renamed from benchmark/bm_so_sieve.rb)0
-rw-r--r--benchmark/so_spectralnorm.rb (renamed from benchmark/bm_so_spectralnorm.rb)0
-rw-r--r--benchmark/string_capitalize.yml10
-rw-r--r--benchmark/string_casecmp.yml28
-rw-r--r--benchmark/string_casecmp_p.yml26
-rw-r--r--benchmark/string_concat.yml51
-rw-r--r--benchmark/string_downcase.yml18
-rw-r--r--benchmark/string_dup.yml7
-rw-r--r--benchmark/string_fstring.yml16
-rw-r--r--benchmark/string_gsub.yml43
-rw-r--r--benchmark/string_index.rb3
-rw-r--r--benchmark/string_rpartition.yml18
-rw-r--r--benchmark/string_scan_re.rb2
-rw-r--r--benchmark/string_scan_str.rb2
-rw-r--r--benchmark/string_slice.yml11
-rw-r--r--benchmark/string_split.yml22
-rw-r--r--benchmark/string_swapcase.yml18
-rw-r--r--benchmark/string_upcase.yml18
-rw-r--r--benchmark/struct_accessor.yml37
-rw-r--r--benchmark/time_at.yml7
-rw-r--r--benchmark/time_new.yml4
-rw-r--r--benchmark/time_now.yml4
-rw-r--r--benchmark/time_parse.yml10
-rw-r--r--benchmark/time_strftime.yml7
-rw-r--r--benchmark/time_strptime.yml13
-rw-r--r--benchmark/time_subsec.rb2
-rw-r--r--benchmark/time_xmlschema.yml27
-rw-r--r--benchmark/vm_array.yml4
-rw-r--r--benchmark/vm_attr_ivar.yml14
-rw-r--r--benchmark/vm_attr_ivar_set.yml14
-rw-r--r--benchmark/vm_backtrace.rb (renamed from benchmark/bm_vm3_backtrace.rb)0
-rw-r--r--benchmark/vm_bigarray.yml105
-rw-r--r--benchmark/vm_bighash.yml4
-rw-r--r--benchmark/vm_block.yml9
-rw-r--r--benchmark/vm_block_handler.yml27
-rw-r--r--benchmark/vm_blockparam.yml7
-rw-r--r--benchmark/vm_blockparam_call.yml8
-rw-r--r--benchmark/vm_blockparam_pass.yml12
-rw-r--r--benchmark/vm_blockparam_yield.yml8
-rw-r--r--benchmark/vm_call_bmethod.yml37
-rw-r--r--benchmark/vm_call_kw_and_kw_splat.yml25
-rw-r--r--benchmark/vm_call_method_missing.yml62
-rw-r--r--benchmark/vm_call_send_iseq.yml77
-rw-r--r--benchmark/vm_call_symproc.yml83
-rw-r--r--benchmark/vm_case.yml13
-rw-r--r--benchmark/vm_case_classes.yml9
-rw-r--r--benchmark/vm_case_lit.yml23
-rw-r--r--benchmark/vm_clearmethodcache.rb (renamed from benchmark/bm_vm3_clearmethodcache.rb)0
-rw-r--r--benchmark/vm_const.yml13
-rw-r--r--benchmark/vm_cvar.yml20
-rw-r--r--benchmark/vm_defined_method.yml8
-rw-r--r--benchmark/vm_dstr.yml6
-rw-r--r--benchmark/vm_dstr_ary.rb6
-rw-r--r--benchmark/vm_dstr_bool.rb7
-rw-r--r--benchmark/vm_dstr_class_module.rb10
-rw-r--r--benchmark/vm_dstr_digit.rb7
-rw-r--r--benchmark/vm_dstr_int.rb5
-rw-r--r--benchmark/vm_dstr_nil.rb6
-rw-r--r--benchmark/vm_dstr_obj.rb6
-rw-r--r--benchmark/vm_dstr_obj_def.rb8
-rw-r--r--benchmark/vm_dstr_str.rb6
-rw-r--r--benchmark/vm_dstr_sym.rb6
-rw-r--r--benchmark/vm_ensure.yml14
-rw-r--r--benchmark/vm_eval.yml4
-rw-r--r--benchmark/vm_fiber_allocate.yml8
-rw-r--r--benchmark/vm_fiber_count.yml10
-rw-r--r--benchmark/vm_fiber_reuse.yml14
-rw-r--r--benchmark/vm_fiber_reuse_gc.yml12
-rw-r--r--benchmark/vm_fiber_switch.yml9
-rw-r--r--benchmark/vm_float_simple.yml8
-rw-r--r--benchmark/vm_freezeobj.yml6
-rw-r--r--benchmark/vm_freezestring.yml10
-rw-r--r--benchmark/vm_gc.rb (renamed from benchmark/bm_vm3_gc.rb)0
-rw-r--r--benchmark/vm_gc_old_full.rb4
-rw-r--r--benchmark/vm_gc_old_immediate.rb4
-rw-r--r--benchmark/vm_gc_old_lazy.rb4
-rw-r--r--benchmark/vm_gc_short_lived.yml9
-rw-r--r--benchmark/vm_gc_short_with_complex_long.yml25
-rw-r--r--benchmark/vm_gc_short_with_long.yml13
-rw-r--r--benchmark/vm_gc_short_with_symbol.yml13
-rw-r--r--benchmark/vm_gc_wb_ary.yml12
-rw-r--r--benchmark/vm_gc_wb_ary_promoted.yml15
-rw-r--r--benchmark/vm_gc_wb_obj.yml15
-rw-r--r--benchmark/vm_gc_wb_obj_promoted.yml17
-rw-r--r--benchmark/vm_iclass_super.yml20
-rw-r--r--benchmark/vm_ivar.yml6
-rw-r--r--benchmark/vm_ivar_embedded_obj_init.yml14
-rw-r--r--benchmark/vm_ivar_extended_obj_init.yml16
-rw-r--r--benchmark/vm_ivar_generic_get.yml17
-rw-r--r--benchmark/vm_ivar_generic_set.yml14
-rw-r--r--benchmark/vm_ivar_get.yml100
-rw-r--r--benchmark/vm_ivar_get_unintialized.yml12
-rw-r--r--benchmark/vm_ivar_ic_miss.yml20
-rw-r--r--benchmark/vm_ivar_lazy_set.yml12
-rw-r--r--benchmark/vm_ivar_memoize.yml85
-rw-r--r--benchmark/vm_ivar_of_class.yml12
-rw-r--r--benchmark/vm_ivar_of_class_set.yml11
-rw-r--r--benchmark/vm_ivar_set.yml5
-rw-r--r--benchmark/vm_ivar_set_on_instance.yml94
-rw-r--r--benchmark/vm_ivar_set_subclass.yml20
-rw-r--r--benchmark/vm_length.yml8
-rw-r--r--benchmark/vm_lvar_cond_set.yml8
-rw-r--r--benchmark/vm_lvar_init.yml21
-rw-r--r--benchmark/vm_lvar_set.yml4
-rw-r--r--benchmark/vm_method.yml8
-rw-r--r--benchmark/vm_method_missing.yml11
-rw-r--r--benchmark/vm_method_splat_calls.yml13
-rw-r--r--benchmark/vm_method_splat_calls2.yml27
-rw-r--r--benchmark/vm_method_with_block.yml8
-rw-r--r--benchmark/vm_module_ann_const_set.yml4
-rw-r--r--benchmark/vm_module_const_set.yml8
-rw-r--r--benchmark/vm_mutex.yml8
-rw-r--r--benchmark/vm_neq.yml7
-rw-r--r--benchmark/vm_newlambda.yml4
-rw-r--r--benchmark/vm_not.yml6
-rw-r--r--benchmark/vm_poly_method.yml24
-rw-r--r--benchmark/vm_poly_method_ov.yml24
-rw-r--r--benchmark/vm_poly_same_method.yml25
-rw-r--r--benchmark/vm_poly_singleton.yml18
-rw-r--r--benchmark/vm_proc.yml12
-rw-r--r--benchmark/vm_raise1.yml16
-rw-r--r--benchmark/vm_raise2.yml16
-rw-r--r--benchmark/vm_regexp.yml8
-rw-r--r--benchmark/vm_rescue.yml6
-rw-r--r--benchmark/vm_send.yml14
-rw-r--r--benchmark/vm_send_cfunc.yml14
-rw-r--r--benchmark/vm_simplereturn.yml7
-rw-r--r--benchmark/vm_string_literal.yml4
-rw-r--r--benchmark/vm_struct_big_aref_hi.yml7
-rw-r--r--benchmark/vm_struct_big_aref_lo.yml7
-rw-r--r--benchmark/vm_struct_big_aset.yml11
-rw-r--r--benchmark/vm_struct_big_href_hi.yml7
-rw-r--r--benchmark/vm_struct_big_href_lo.yml7
-rw-r--r--benchmark/vm_struct_big_hset.yml11
-rw-r--r--benchmark/vm_struct_small_aref.yml7
-rw-r--r--benchmark/vm_struct_small_aset.yml11
-rw-r--r--benchmark/vm_struct_small_href.yml7
-rw-r--r--benchmark/vm_struct_small_hset.yml7
-rw-r--r--benchmark/vm_super.yml17
-rw-r--r--benchmark/vm_super_splat_calls.yml25
-rw-r--r--benchmark/vm_swap.yml7
-rw-r--r--benchmark/vm_symbol_block_pass.rb (renamed from benchmark/bm_vm_symbol_block_pass.rb)0
-rw-r--r--benchmark/vm_thread_alive_check.yml8
-rw-r--r--benchmark/vm_thread_close.rb (renamed from benchmark/bm_vm_thread_close.rb)0
-rw-r--r--benchmark/vm_thread_condvar1.rb28
-rw-r--r--benchmark/vm_thread_condvar2.rb35
-rw-r--r--benchmark/vm_thread_create_join.rb (renamed from benchmark/bm_vm_thread_create_join.rb)0
-rw-r--r--benchmark/vm_thread_mutex1.rb21
-rw-r--r--benchmark/vm_thread_mutex2.rb21
-rw-r--r--benchmark/vm_thread_mutex3.rb20
-rw-r--r--benchmark/vm_thread_pass.rb15
-rw-r--r--benchmark/vm_thread_pass_flood.rb10
-rw-r--r--benchmark/vm_thread_pipe.rb (renamed from benchmark/bm_vm_thread_pipe.rb)0
-rw-r--r--benchmark/vm_thread_queue.rb18
-rw-r--r--benchmark/vm_thread_sized_queue.rb20
-rw-r--r--benchmark/vm_thread_sized_queue2.rb23
-rw-r--r--benchmark/vm_thread_sized_queue3.rb22
-rw-r--r--benchmark/vm_thread_sized_queue4.rb26
-rw-r--r--benchmark/vm_thread_sleep.yml4
-rw-r--r--benchmark/vm_unif1.yml7
-rw-r--r--benchmark/vm_yield.yml13
-rw-r--r--benchmark/vm_zsuper.yml18
-rw-r--r--benchmark/vm_zsuper_splat_calls.yml28
-rw-r--r--benchmark/wc.input.base25
-rw-r--r--bignum.c2838
-rwxr-xr-xbin/erb171
-rwxr-xr-xbin/gem21
-rwxr-xr-xbin/irb11
-rwxr-xr-xbin/rdoc44
-rwxr-xr-xbin/ri12
-rw-r--r--bootstraptest/pending.rb24
-rwxr-xr-xbootstraptest/runner.rb920
-rw-r--r--bootstraptest/test_attr.rb16
-rw-r--r--bootstraptest/test_autoload.rb30
-rw-r--r--bootstraptest/test_constant_cache.rb187
-rw-r--r--bootstraptest/test_env.rb12
-rw-r--r--bootstraptest/test_eval.rb83
-rw-r--r--bootstraptest/test_exception.rb4
-rw-r--r--bootstraptest/test_fiber.rb44
-rw-r--r--bootstraptest/test_finalizer.rb8
-rw-r--r--bootstraptest/test_flow.rb20
-rw-r--r--bootstraptest/test_fork.rb31
-rw-r--r--bootstraptest/test_insns.rb492
-rw-r--r--bootstraptest/test_io.rb11
-rw-r--r--bootstraptest/test_jump.rb32
-rw-r--r--bootstraptest/test_literal.rb46
-rw-r--r--bootstraptest/test_literal_suffix.rb12
-rw-r--r--bootstraptest/test_load.rb12
-rw-r--r--bootstraptest/test_method.rb292
-rw-r--r--bootstraptest/test_objectspace.rb11
-rw-r--r--bootstraptest/test_proc.rb17
-rw-r--r--bootstraptest/test_ractor.rb2556
-rw-r--r--bootstraptest/test_syntax.rb58
-rw-r--r--bootstraptest/test_thread.rb95
-rw-r--r--bootstraptest/test_yjit.rb5462
-rw-r--r--bootstraptest/test_yjit_30k_ifelse.rb241023
-rw-r--r--bootstraptest/test_yjit_30k_methods.rb121018
-rw-r--r--bootstraptest/test_yjit_rust_port.rb422
-rw-r--r--box.c1220
-rw-r--r--builtin.c87
-rw-r--r--builtin.h125
-rw-r--r--ccan/build_assert/build_assert.h12
-rw-r--r--ccan/check_type/check_type.h28
-rw-r--r--ccan/container_of/container_of.h52
-rw-r--r--ccan/list/list.h614
-rw-r--r--ccan/str/str.h9
-rw-r--r--class.c3182
-rw-r--r--common.mk3062
-rw-r--r--compar.c249
-rw-r--r--compile.c18250
-rw-r--r--complex.c2892
-rw-r--r--concurrent_set.c513
-rw-r--r--configure.ac4861
-rw-r--r--configure.in4483
-rw-r--r--constant.h19
-rw-r--r--cont.c3857
-rw-r--r--coroutine/amd64/Context.S88
-rw-r--r--coroutine/amd64/Context.h85
-rw-r--r--coroutine/arm32/Context.S32
-rw-r--r--coroutine/arm32/Context.h59
-rw-r--r--coroutine/arm64/Context.S160
-rw-r--r--coroutine/arm64/Context.asm81
-rw-r--r--coroutine/arm64/Context.h118
-rw-r--r--coroutine/asyncify/Context.c10
-rw-r--r--coroutine/asyncify/Context.h93
-rw-r--r--coroutine/emscripten/Context.c8
-rw-r--r--coroutine/emscripten/Context.h77
-rw-r--r--coroutine/loongarch64/Context.S72
-rw-r--r--coroutine/loongarch64/Context.h46
-rw-r--r--coroutine/ppc/Context.S89
-rw-r--r--coroutine/ppc/Context.h58
-rw-r--r--coroutine/ppc64/Context.S88
-rw-r--r--coroutine/ppc64/Context.h57
-rw-r--r--coroutine/ppc64le/Context.S84
-rw-r--r--coroutine/ppc64le/Context.h57
-rw-r--r--coroutine/pthread/Context.c272
-rw-r--r--coroutine/pthread/Context.h63
-rw-r--r--coroutine/riscv64/Context.S86
-rw-r--r--coroutine/riscv64/Context.h46
-rw-r--r--coroutine/ucontext/Context.c23
-rw-r--r--coroutine/ucontext/Context.h79
-rw-r--r--coroutine/universal/Context.S16
-rw-r--r--coroutine/universal/Context.h21
-rw-r--r--coroutine/win32/Context.S47
-rw-r--r--coroutine/win32/Context.asm55
-rw-r--r--coroutine/win32/Context.h66
-rw-r--r--coroutine/win64/Context.S77
-rw-r--r--coroutine/win64/Context.asm79
-rw-r--r--coroutine/win64/Context.h76
-rw-r--r--coroutine/x86/Context.S41
-rw-r--r--coroutine/x86/Context.h61
-rw-r--r--coverage/README4
-rw-r--r--cygwin/GNUmakefile.in80
-rw-r--r--darray.h296
-rw-r--r--debug.c656
-rw-r--r--debug_counter.c150
-rw-r--r--debug_counter.h425
-rw-r--r--defs/gmake.mk605
-rw-r--r--defs/id.def89
-rw-r--r--defs/jit.mk96
-rw-r--r--defs/keywords8
-rw-r--r--defs/known_errors.def305
-rw-r--r--defs/lex.c.src8
-rw-r--r--defs/opt_insn_unif.def2
-rw-r--r--defs/separated_version.mk38
-rw-r--r--defs/tags.mk18
-rw-r--r--depend20573
-rw-r--r--dir.c3924
-rw-r--r--dir.rb506
-rw-r--r--dln.c1530
-rw-r--r--dln.h28
-rw-r--r--dln_find.c300
-rw-r--r--dmydln.c24
-rw-r--r--dmyenc.c16
-rw-r--r--dmyext.c14
-rw-r--r--doc/.document15
-rw-r--r--doc/ChangeLog-0.60_to_1.13955
-rw-r--r--doc/ChangeLog-1.8.024350
-rw-r--r--doc/ChangeLog-1.9.392772
-rw-r--r--doc/ChangeLog-2.0.024015
-rw-r--r--doc/ChangeLog-2.1.018060
-rw-r--r--doc/ChangeLog-2.2.012157
-rw-r--r--doc/ChangeLog-2.3.012187
-rw-r--r--doc/ChangeLog-YARV6917
-rw-r--r--doc/ChangeLog/ChangeLog-0.06_to_0.52 (renamed from doc/ChangeLog-0.06_to_0.52)0
-rw-r--r--doc/ChangeLog/ChangeLog-0.50_to_0.60 (renamed from doc/ChangeLog-0.50_to_0.60)0
-rw-r--r--doc/ChangeLog/ChangeLog-0.60_to_1.13955
-rw-r--r--doc/ChangeLog/ChangeLog-1.8.024350
-rw-r--r--doc/ChangeLog/ChangeLog-1.9.392772
-rw-r--r--doc/ChangeLog/ChangeLog-2.0.024015
-rw-r--r--doc/ChangeLog/ChangeLog-2.1.018060
-rw-r--r--doc/ChangeLog/ChangeLog-2.2.012157
-rw-r--r--doc/ChangeLog/ChangeLog-2.3.012188
-rw-r--r--doc/ChangeLog/ChangeLog-2.4.09492
-rw-r--r--doc/ChangeLog/ChangeLog-YARV6917
-rw-r--r--doc/NEWS-1.8.7669
-rw-r--r--doc/NEWS-1.9.2509
-rw-r--r--doc/NEWS-2.0.0531
-rw-r--r--doc/NEWS-2.1.0376
-rw-r--r--doc/NEWS-2.2.0361
-rw-r--r--doc/NEWS-2.3.0404
-rw-r--r--doc/NEWS/NEWS-1.8.7669
-rw-r--r--doc/NEWS/NEWS-1.9.1 (renamed from doc/NEWS-1.9.1)0
-rw-r--r--doc/NEWS/NEWS-1.9.2509
-rw-r--r--doc/NEWS/NEWS-1.9.3 (renamed from doc/NEWS-1.9.3)0
-rw-r--r--doc/NEWS/NEWS-2.0.0529
-rw-r--r--doc/NEWS/NEWS-2.1.0376
-rw-r--r--doc/NEWS/NEWS-2.2.0359
-rw-r--r--doc/NEWS/NEWS-2.3.0384
-rw-r--r--doc/NEWS/NEWS-2.4.0399
-rw-r--r--doc/NEWS/NEWS-2.5.0565
-rw-r--r--doc/NEWS/NEWS-2.6.0662
-rw-r--r--doc/NEWS/NEWS-2.7.0845
-rw-r--r--doc/NEWS/NEWS-3.0.0.md829
-rw-r--r--doc/NEWS/NEWS-3.1.0.md660
-rw-r--r--doc/NEWS/NEWS-3.2.0.md820
-rw-r--r--doc/NEWS/NEWS-3.3.0.md529
-rw-r--r--doc/NEWS/NEWS-3.4.0.md962
-rw-r--r--doc/NEWS/NEWS-4.0.0.md802
-rw-r--r--doc/_regexp.rdoc1284
-rw-r--r--doc/_timezones.rdoc163
-rw-r--r--doc/contributing.rdoc462
-rw-r--r--doc/contributing/bug_triaging.rdoc79
-rw-r--r--doc/contributing/building_ruby.md355
-rw-r--r--doc/contributing/concurrency_guide.md154
-rw-r--r--doc/contributing/contributing.md35
-rw-r--r--doc/contributing/documentation_guide.md623
-rw-r--r--doc/contributing/dtrace_probes.rdoc184
-rw-r--r--doc/contributing/glossary.md48
-rw-r--r--doc/contributing/making_changes_to_ruby.md28
-rw-r--r--doc/contributing/making_changes_to_stdlibs.md49
-rw-r--r--doc/contributing/memory_view.md167
-rw-r--r--doc/contributing/reporting_issues.md102
-rw-r--r--doc/contributing/testing_ruby.md155
-rw-r--r--doc/contributing/vm_stack_and_frames.md163
-rw-r--r--doc/contributors.rdoc778
-rw-r--r--doc/csv/arguments/io.rdoc5
-rw-r--r--doc/csv/options/common/col_sep.rdoc57
-rw-r--r--doc/csv/options/common/quote_char.rdoc42
-rw-r--r--doc/csv/options/common/row_sep.rdoc91
-rw-r--r--doc/csv/options/generating/force_quotes.rdoc17
-rw-r--r--doc/csv/options/generating/quote_empty.rdoc12
-rw-r--r--doc/csv/options/generating/write_converters.rdoc25
-rw-r--r--doc/csv/options/generating/write_empty_value.rdoc15
-rw-r--r--doc/csv/options/generating/write_headers.rdoc29
-rw-r--r--doc/csv/options/generating/write_nil_value.rdoc14
-rw-r--r--doc/csv/options/parsing/converters.rdoc46
-rw-r--r--doc/csv/options/parsing/empty_value.rdoc13
-rw-r--r--doc/csv/options/parsing/field_size_limit.rdoc39
-rw-r--r--doc/csv/options/parsing/header_converters.rdoc43
-rw-r--r--doc/csv/options/parsing/headers.rdoc63
-rw-r--r--doc/csv/options/parsing/liberal_parsing.rdoc38
-rw-r--r--doc/csv/options/parsing/nil_value.rdoc12
-rw-r--r--doc/csv/options/parsing/return_headers.rdoc22
-rw-r--r--doc/csv/options/parsing/skip_blanks.rdoc31
-rw-r--r--doc/csv/options/parsing/skip_lines.rdoc37
-rw-r--r--doc/csv/options/parsing/strip.rdoc15
-rw-r--r--doc/csv/options/parsing/unconverted_fields.rdoc27
-rw-r--r--doc/csv/recipes/filtering.rdoc158
-rw-r--r--doc/csv/recipes/generating.rdoc246
-rw-r--r--doc/csv/recipes/parsing.rdoc545
-rw-r--r--doc/csv/recipes/recipes.rdoc6
-rw-r--r--doc/distribution/distribution.md48
-rw-r--r--doc/distribution/windows.md304
-rw-r--r--doc/dtrace_probes.rdoc178
-rw-r--r--doc/etc.rd.ja75
-rw-r--r--doc/examples/files.rdoc26
-rw-r--r--doc/extension.ja.rdoc553
-rw-r--r--doc/extension.rdoc995
-rw-r--r--doc/float.rb128
-rw-r--r--doc/forwardable.rd.ja2
-rw-r--r--doc/globals.rdoc70
-rw-r--r--doc/index.md65
-rw-r--r--doc/irb/irb-tools.rd.ja184
-rw-r--r--doc/irb/irb.rd.ja412
-rw-r--r--doc/jit/yjit.md544
-rw-r--r--doc/jit/zjit.md397
-rw-r--r--doc/keywords.rdoc158
-rw-r--r--doc/language/box.md361
-rw-r--r--doc/language/bsearch.rdoc120
-rw-r--r--doc/language/calendars.rdoc62
-rw-r--r--doc/language/case_mapping.rdoc106
-rw-r--r--doc/language/character_selectors.rdoc100
-rw-r--r--doc/language/dig_methods.rdoc82
-rw-r--r--doc/language/encodings.rdoc482
-rw-r--r--doc/language/exceptions.md521
-rw-r--r--doc/language/fiber.md290
-rw-r--r--doc/language/format_specifications.rdoc354
-rw-r--r--doc/language/globals.md610
-rw-r--r--doc/language/hash_inclusion.rdoc31
-rw-r--r--doc/language/implicit_conversion.rdoc221
-rw-r--r--doc/language/marshal.rdoc318
-rw-r--r--doc/language/option_dump.md265
-rw-r--r--doc/language/options.md688
-rw-r--r--doc/language/packed_data.rdoc722
-rw-r--r--doc/language/ractor.md797
-rw-r--r--doc/language/regexp/methods.rdoc41
-rw-r--r--doc/language/regexp/unicode_properties.rdoc718
-rw-r--r--doc/language/signals.rdoc106
-rw-r--r--doc/language/strftime_formatting.rdoc525
-rw-r--r--doc/maintainers.md718
-rw-r--r--doc/maintainers.rdoc320
-rw-r--r--doc/marshal.rdoc313
-rw-r--r--doc/matchdata/begin.rdoc30
-rw-r--r--doc/matchdata/bytebegin.rdoc30
-rw-r--r--doc/matchdata/byteend.rdoc30
-rw-r--r--doc/matchdata/end.rdoc30
-rw-r--r--doc/matchdata/offset.rdoc31
-rw-r--r--doc/math/math.rdoc117
-rw-r--r--doc/net-http/examples.rdoc31
-rw-r--r--doc/net-http/included_getters.rdoc3
-rw-r--r--doc/optparse/.document1
-rw-r--r--doc/optparse/argument_converters.rdoc380
-rw-r--r--doc/optparse/creates_option.rdoc7
-rw-r--r--doc/optparse/option_params.rdoc520
-rw-r--r--doc/optparse/ruby/argument_abbreviation.rb9
-rw-r--r--doc/optparse/ruby/argument_keywords.rb6
-rw-r--r--doc/optparse/ruby/argument_strings.rb6
-rw-r--r--doc/optparse/ruby/argv.rb2
-rw-r--r--doc/optparse/ruby/array.rb6
-rw-r--r--doc/optparse/ruby/basic.rb17
-rw-r--r--doc/optparse/ruby/block.rb9
-rw-r--r--doc/optparse/ruby/collected_options.rb8
-rw-r--r--doc/optparse/ruby/custom_converter.rb9
-rw-r--r--doc/optparse/ruby/date.rb6
-rw-r--r--doc/optparse/ruby/datetime.rb6
-rw-r--r--doc/optparse/ruby/decimal_integer.rb7
-rw-r--r--doc/optparse/ruby/decimal_numeric.rb7
-rw-r--r--doc/optparse/ruby/default_values.rb8
-rw-r--r--doc/optparse/ruby/descriptions.rb15
-rw-r--r--doc/optparse/ruby/explicit_array_values.rb9
-rw-r--r--doc/optparse/ruby/explicit_hash_values.rb9
-rw-r--r--doc/optparse/ruby/false_class.rb6
-rw-r--r--doc/optparse/ruby/float.rb6
-rw-r--r--doc/optparse/ruby/help.rb18
-rw-r--r--doc/optparse/ruby/help_banner.rb7
-rw-r--r--doc/optparse/ruby/help_format.rb25
-rw-r--r--doc/optparse/ruby/help_program_name.rb7
-rw-r--r--doc/optparse/ruby/integer.rb6
-rw-r--r--doc/optparse/ruby/long_names.rb9
-rw-r--r--doc/optparse/ruby/long_optional.rb6
-rw-r--r--doc/optparse/ruby/long_required.rb6
-rw-r--r--doc/optparse/ruby/long_simple.rb9
-rw-r--r--doc/optparse/ruby/long_with_negation.rb6
-rw-r--r--doc/optparse/ruby/match_converter.rb9
-rw-r--r--doc/optparse/ruby/matched_values.rb12
-rw-r--r--doc/optparse/ruby/method.rb11
-rw-r--r--doc/optparse/ruby/missing_options.rb12
-rw-r--r--doc/optparse/ruby/mixed_names.rb12
-rw-r--r--doc/optparse/ruby/name_abbrev.rb9
-rw-r--r--doc/optparse/ruby/no_abbreviation.rb10
-rw-r--r--doc/optparse/ruby/numeric.rb6
-rw-r--r--doc/optparse/ruby/object.rb6
-rw-r--r--doc/optparse/ruby/octal_integer.rb7
-rw-r--r--doc/optparse/ruby/optional_argument.rb9
-rw-r--r--doc/optparse/ruby/parse.rb13
-rw-r--r--doc/optparse/ruby/parse_bang.rb13
-rw-r--r--doc/optparse/ruby/proc.rb13
-rw-r--r--doc/optparse/ruby/regexp.rb6
-rw-r--r--doc/optparse/ruby/required_argument.rb9
-rw-r--r--doc/optparse/ruby/shellwords.rb6
-rw-r--r--doc/optparse/ruby/short_names.rb9
-rw-r--r--doc/optparse/ruby/short_optional.rb6
-rw-r--r--doc/optparse/ruby/short_range.rb6
-rw-r--r--doc/optparse/ruby/short_required.rb6
-rw-r--r--doc/optparse/ruby/short_simple.rb9
-rw-r--r--doc/optparse/ruby/string.rb6
-rw-r--r--doc/optparse/ruby/terminator.rb6
-rw-r--r--doc/optparse/ruby/time.rb6
-rw-r--r--doc/optparse/ruby/true_class.rb6
-rw-r--r--doc/optparse/ruby/uri.rb6
-rw-r--r--doc/optparse/tutorial.rdoc858
-rw-r--r--doc/pty/README.expect.ja32
-rw-r--r--doc/pty/README.ja50
-rw-r--r--doc/regexp.rdoc700
-rw-r--r--doc/security.rdoc152
-rw-r--r--doc/security/command_injection.rdoc15
-rw-r--r--doc/security/security.rdoc127
-rw-r--r--doc/shell.rd.ja335
-rw-r--r--doc/standard_library.md225
-rw-r--r--doc/standard_library.rdoc115
-rw-r--r--doc/string.rb421
-rw-r--r--doc/string/aref.rdoc96
-rw-r--r--doc/string/aset.rdoc179
-rw-r--r--doc/string/b.rdoc16
-rw-r--r--doc/string/bytes.rdoc7
-rw-r--r--doc/string/bytesize.rdoc12
-rw-r--r--doc/string/byteslice.rdoc54
-rw-r--r--doc/string/bytesplice.rdoc66
-rw-r--r--doc/string/capitalize.rdoc26
-rw-r--r--doc/string/center.rdoc19
-rw-r--r--doc/string/chars.rdoc7
-rw-r--r--doc/string/chomp.rdoc31
-rw-r--r--doc/string/chop.rdoc17
-rw-r--r--doc/string/chr.rdoc7
-rw-r--r--doc/string/codepoints.rdoc8
-rw-r--r--doc/string/concat.rdoc11
-rw-r--r--doc/string/count.rdoc74
-rw-r--r--doc/string/delete.rdoc75
-rw-r--r--doc/string/delete_prefix.rdoc9
-rw-r--r--doc/string/delete_suffix.rdoc10
-rw-r--r--doc/string/downcase.rdoc20
-rw-r--r--doc/string/dump.rdoc89
-rw-r--r--doc/string/each_byte.rdoc15
-rw-r--r--doc/string/each_char.rdoc17
-rw-r--r--doc/string/each_codepoint.rdoc18
-rw-r--r--doc/string/each_grapheme_cluster.rdoc19
-rw-r--r--doc/string/each_line.rdoc66
-rw-r--r--doc/string/encode.rdoc50
-rw-r--r--doc/string/end_with_p.rdoc9
-rw-r--r--doc/string/eql_p.rdoc18
-rw-r--r--doc/string/force_encoding.rdoc21
-rw-r--r--doc/string/getbyte.rdoc23
-rw-r--r--doc/string/grapheme_clusters.rdoc19
-rw-r--r--doc/string/hash.rdoc19
-rw-r--r--doc/string/index.rdoc38
-rw-r--r--doc/string/insert.rdoc15
-rw-r--r--doc/string/inspect.rdoc38
-rw-r--r--doc/string/intern.rdoc8
-rw-r--r--doc/string/length.rdoc11
-rw-r--r--doc/string/ljust.rdoc13
-rw-r--r--doc/string/new.rdoc51
-rw-r--r--doc/string/ord.rdoc7
-rw-r--r--doc/string/partition.rdoc43
-rw-r--r--doc/string/rindex.rdoc51
-rw-r--r--doc/string/rjust.rdoc17
-rw-r--r--doc/string/rpartition.rdoc47
-rw-r--r--doc/string/scan.rdoc35
-rw-r--r--doc/string/scrub.rdoc22
-rw-r--r--doc/string/split.rdoc101
-rw-r--r--doc/string/squeeze.rdoc33
-rw-r--r--doc/string/start_with_p.rdoc16
-rw-r--r--doc/string/sub.rdoc33
-rw-r--r--doc/string/succ.rdoc52
-rw-r--r--doc/string/sum.rdoc12
-rw-r--r--doc/string/swapcase.rdoc31
-rw-r--r--doc/string/unicode_normalize.rdoc28
-rw-r--r--doc/string/upcase.rdoc27
-rw-r--r--doc/string/upto.rdoc38
-rw-r--r--doc/string/valid_encoding_p.rdoc8
-rw-r--r--doc/stringio/each_byte.rdoc34
-rw-r--r--doc/stringio/each_char.rdoc34
-rw-r--r--doc/stringio/each_codepoint.rdoc36
-rw-r--r--doc/stringio/each_line.md189
-rw-r--r--doc/stringio/getbyte.rdoc31
-rw-r--r--doc/stringio/getc.rdoc34
-rw-r--r--doc/stringio/gets.rdoc99
-rw-r--r--doc/stringio/pread.rdoc65
-rw-r--r--doc/stringio/putc.rdoc82
-rw-r--r--doc/stringio/read.rdoc83
-rw-r--r--doc/stringio/size.rdoc5
-rw-r--r--doc/stringio/stringio.md700
-rw-r--r--doc/strscan/helper_methods.md124
-rw-r--r--doc/strscan/link_refs.txt17
-rw-r--r--doc/strscan/methods/get_byte.md30
-rw-r--r--doc/strscan/methods/get_charpos.md19
-rw-r--r--doc/strscan/methods/get_pos.md14
-rw-r--r--doc/strscan/methods/getch.md43
-rw-r--r--doc/strscan/methods/scan.md51
-rw-r--r--doc/strscan/methods/scan_until.md52
-rw-r--r--doc/strscan/methods/set_pos.md27
-rw-r--r--doc/strscan/methods/skip.md43
-rw-r--r--doc/strscan/methods/skip_until.md49
-rw-r--r--doc/strscan/methods/terminate.md30
-rw-r--r--doc/strscan/strscan.md544
-rw-r--r--doc/symbol/casecmp.rdoc27
-rw-r--r--doc/symbol/casecmp_p.rdoc26
-rw-r--r--doc/syntax.rdoc13
-rw-r--r--doc/syntax/assignment.rdoc45
-rw-r--r--doc/syntax/calling_methods.rdoc204
-rw-r--r--doc/syntax/comments.rdoc253
-rw-r--r--doc/syntax/control_expressions.rdoc178
-rw-r--r--doc/syntax/exceptions.rdoc19
-rw-r--r--doc/syntax/keywords.rdoc162
-rw-r--r--doc/syntax/layout.rdoc118
-rw-r--r--doc/syntax/literals.rdoc455
-rw-r--r--doc/syntax/methods.rdoc270
-rw-r--r--doc/syntax/miscellaneous.rdoc32
-rw-r--r--doc/syntax/modules_and_classes.rdoc70
-rw-r--r--doc/syntax/operators.rdoc75
-rw-r--r--doc/syntax/pattern_matching.rdoc528
-rw-r--r--doc/syntax/precedence.rdoc6
-rw-r--r--doc/syntax/refinements.rdoc73
-rw-r--r--doc/yarvarch.en (renamed from template/yarvarch.en)0
-rw-r--r--doc/yarvarch.ja (renamed from template/yarvarch.ja)0
-rw-r--r--enc/Makefile.in18
-rw-r--r--enc/ascii.c18
-rw-r--r--enc/big5.c15
-rw-r--r--enc/cesu_8.c469
-rw-r--r--enc/cp949.c7
-rw-r--r--enc/depend10454
-rw-r--r--enc/ebcdic.h2
-rw-r--r--enc/emacs_mule.c7
-rw-r--r--enc/encdb.c4
-rw-r--r--enc/encinit.c.erb4
-rw-r--r--enc/euc_jp.c11
-rw-r--r--enc/euc_kr.c34
-rw-r--r--enc/euc_tw.c5
-rw-r--r--enc/gb18030.c6
-rw-r--r--enc/gb2312.c4
-rw-r--r--enc/gbk.c5
-rw-r--r--enc/iso_8859.h1
-rw-r--r--enc/iso_8859_1.c61
-rw-r--r--enc/iso_8859_10.c64
-rw-r--r--enc/iso_8859_11.c7
-rw-r--r--enc/iso_8859_13.c76
-rw-r--r--enc/iso_8859_14.c73
-rw-r--r--enc/iso_8859_15.c70
-rw-r--r--enc/iso_8859_16.c72
-rw-r--r--enc/iso_8859_2.c59
-rw-r--r--enc/iso_8859_3.c73
-rw-r--r--enc/iso_8859_4.c62
-rw-r--r--enc/iso_8859_5.c39
-rw-r--r--enc/iso_8859_6.c7
-rw-r--r--enc/iso_8859_7.c71
-rw-r--r--enc/iso_8859_8.c7
-rw-r--r--enc/iso_8859_9.c85
-rw-r--r--enc/jis/props.h227
-rw-r--r--enc/jis/props.h.blt57
-rw-r--r--enc/jis/props.kwd6
-rw-r--r--enc/jis/props.src6
-rw-r--r--enc/koi8_r.c6
-rw-r--r--enc/koi8_u.c5
-rwxr-xr-xenc/make_encmake.rb23
-rw-r--r--enc/mktable.c42
-rw-r--r--enc/prelude.rb4
-rw-r--r--enc/shift_jis.c534
-rw-r--r--enc/shift_jis.h546
-rw-r--r--enc/trans/GB/GB12345%UCS.src61
-rw-r--r--enc/trans/GB/GB2312%UCS.src75
-rw-r--r--enc/trans/GB/UCS%GB12345.src61
-rw-r--r--enc/trans/GB/UCS%GB2312.src75
-rw-r--r--enc/trans/JIS/JISX0201-KANA%UCS.src51
-rw-r--r--enc/trans/JIS/JISX0208@1990%UCS.src54
-rw-r--r--enc/trans/JIS/JISX0212%UCS.src64
-rw-r--r--enc/trans/JIS/UCS%JISX0201-KANA.src52
-rw-r--r--enc/trans/JIS/UCS%JISX0208@1990.src53
-rw-r--r--enc/trans/JIS/UCS%JISX0212.src63
-rw-r--r--enc/trans/big5-uao-tbl.rb2
-rw-r--r--enc/trans/cesu_8.trans85
-rw-r--r--enc/trans/cp850-tbl.rb2
-rw-r--r--enc/trans/cp852-tbl.rb2
-rw-r--r--enc/trans/cp855-tbl.rb2
-rw-r--r--enc/trans/escape.trans3
-rw-r--r--enc/trans/gbk-tbl.rb2
-rw-r--r--enc/trans/ibm437-tbl.rb2
-rw-r--r--enc/trans/ibm720-tbl.rb122
-rw-r--r--enc/trans/ibm775-tbl.rb2
-rw-r--r--enc/trans/ibm852-tbl.rb2
-rw-r--r--enc/trans/ibm855-tbl.rb2
-rw-r--r--enc/trans/ibm857-tbl.rb2
-rw-r--r--enc/trans/ibm860-tbl.rb2
-rw-r--r--enc/trans/ibm861-tbl.rb2
-rw-r--r--enc/trans/ibm862-tbl.rb2
-rw-r--r--enc/trans/ibm863-tbl.rb2
-rw-r--r--enc/trans/ibm864-tbl.rb126
-rw-r--r--enc/trans/ibm865-tbl.rb2
-rw-r--r--enc/trans/ibm866-tbl.rb2
-rw-r--r--enc/trans/ibm869-tbl.rb2
-rw-r--r--enc/trans/iso2022.trans148
-rw-r--r--enc/trans/koi8-r-tbl.rb2
-rw-r--r--enc/trans/koi8-u-tbl.rb2
-rw-r--r--enc/trans/maccroatian-tbl.rb2
-rw-r--r--enc/trans/maccyrillic-tbl.rb2
-rw-r--r--enc/trans/macgreek-tbl.rb2
-rw-r--r--enc/trans/maciceland-tbl.rb2
-rw-r--r--enc/trans/macroman-tbl.rb2
-rw-r--r--enc/trans/macromania-tbl.rb2
-rw-r--r--enc/trans/macturkish-tbl.rb2
-rw-r--r--enc/trans/macukraine-tbl.rb2
-rw-r--r--enc/trans/newline.trans30
-rw-r--r--enc/trans/single_byte.trans13
-rw-r--r--enc/trans/transdb.c2
-rw-r--r--enc/trans/windows-1250-tbl.rb2
-rw-r--r--enc/trans/windows-1251-tbl.rb2
-rw-r--r--enc/trans/windows-1252-tbl.rb2
-rw-r--r--enc/trans/windows-1253-tbl.rb2
-rw-r--r--enc/trans/windows-1254-tbl.rb2
-rw-r--r--enc/trans/windows-1255-tbl.rb3
-rw-r--r--enc/trans/windows-1256-tbl.rb2
-rw-r--r--enc/trans/windows-1257-tbl.rb2
-rw-r--r--enc/trans/windows-874-tbl.rb2
-rw-r--r--enc/unicode.c313
-rw-r--r--enc/unicode/17.0.0/casefold.h8013
-rw-r--r--enc/unicode/17.0.0/name2ctype.h49725
-rwxr-xr-xenc/unicode/case-folding.rb196
-rw-r--r--enc/unicode/casefold.h6248
-rw-r--r--enc/unicode/name2ctype.h34027
-rw-r--r--enc/unicode/name2ctype.h.blt32679
-rw-r--r--enc/unicode/name2ctype.kwd26550
-rw-r--r--enc/unicode/name2ctype.src26550
-rw-r--r--enc/us_ascii.c12
-rw-r--r--enc/utf_16_32.h2
-rw-r--r--enc/utf_16be.c8
-rw-r--r--enc/utf_16le.c8
-rw-r--r--enc/utf_32be.c27
-rw-r--r--enc/utf_32le.c26
-rw-r--r--enc/utf_8.c19
-rw-r--r--enc/windows_1250.c65
-rw-r--r--enc/windows_1251.c55
-rw-r--r--enc/windows_1252.c61
-rw-r--r--enc/windows_1253.c303
-rw-r--r--enc/windows_1254.c308
-rw-r--r--enc/windows_1257.c310
-rw-r--r--enc/windows_31j.c13
-rw-r--r--enc/x_emoji.h4
-rw-r--r--encindex.h13
-rw-r--r--encoding.c1528
-rw-r--r--enum.c4059
-rw-r--r--enumerator.c3921
-rw-r--r--error.c3385
-rw-r--r--eval.c2128
-rw-r--r--eval_error.c642
-rw-r--r--eval_intern.h233
-rw-r--r--eval_jump.c75
-rw-r--r--ext/-test-/RUBY_ALIGNOF/c.c15
-rw-r--r--ext/-test-/RUBY_ALIGNOF/cpp.cpp9
-rw-r--r--ext/-test-/RUBY_ALIGNOF/depend163
-rw-r--r--ext/-test-/RUBY_ALIGNOF/extconf.rb6
-rw-r--r--ext/-test-/abi/abi.c11
-rw-r--r--ext/-test-/abi/depend3
-rw-r--r--ext/-test-/abi/extconf.rb4
-rw-r--r--ext/-test-/arith_seq/beg_len_step/beg_len_step.c19
-rw-r--r--ext/-test-/arith_seq/beg_len_step/depend162
-rw-r--r--ext/-test-/arith_seq/beg_len_step/extconf.rb2
-rw-r--r--ext/-test-/arith_seq/extract/depend162
-rw-r--r--ext/-test-/arith_seq/extract/extconf.rb2
-rw-r--r--ext/-test-/arith_seq/extract/extract.c27
-rw-r--r--ext/-test-/array/concat/depend163
-rw-r--r--ext/-test-/array/concat/extconf.rb2
-rw-r--r--ext/-test-/array/concat/to_ary_concat.c38
-rw-r--r--ext/-test-/array/resize/depend162
-rw-r--r--ext/-test-/array/resize/resize.c6
-rw-r--r--ext/-test-/auto_ext.rb11
-rw-r--r--ext/-test-/bignum/big2str.c14
-rw-r--r--ext/-test-/bignum/bigzero.c2
-rw-r--r--ext/-test-/bignum/depend1113
-rw-r--r--ext/-test-/bignum/div.c10
-rw-r--r--ext/-test-/bignum/extconf.rb9
-rw-r--r--ext/-test-/bignum/intpack.c42
-rw-r--r--ext/-test-/bignum/mul.c30
-rw-r--r--ext/-test-/bignum/str2big.c18
-rw-r--r--ext/-test-/box/yay1/extconf.rb1
-rw-r--r--ext/-test-/box/yay1/yay1.c28
-rw-r--r--ext/-test-/box/yay1/yay1.def3
-rw-r--r--ext/-test-/box/yay1/yay1.h4
-rw-r--r--ext/-test-/box/yay2/extconf.rb1
-rw-r--r--ext/-test-/box/yay2/yay2.c28
-rw-r--r--ext/-test-/box/yay2/yay2.def3
-rw-r--r--ext/-test-/box/yay2/yay2.h4
-rw-r--r--ext/-test-/bug-14834/bug-14834.c39
-rw-r--r--ext/-test-/bug-14834/depend163
-rw-r--r--ext/-test-/bug-14834/extconf.rb2
-rw-r--r--ext/-test-/bug-3571/bug.c2
-rw-r--r--ext/-test-/bug-3571/depend163
-rw-r--r--ext/-test-/bug-5832/depend163
-rw-r--r--ext/-test-/bug_reporter/depend163
-rw-r--r--ext/-test-/class/depend323
-rw-r--r--ext/-test-/class/extconf.rb9
-rw-r--r--ext/-test-/class/init.c1
-rw-r--r--ext/-test-/cxxanyargs/cxxanyargs.cpp935
-rw-r--r--ext/-test-/cxxanyargs/depend13
-rw-r--r--ext/-test-/cxxanyargs/extconf.rb46
-rw-r--r--ext/-test-/cxxanyargs/failure.cpp13
-rw-r--r--ext/-test-/cxxanyargs/failurem1.cpp13
-rw-r--r--ext/-test-/debug/depend455
-rw-r--r--ext/-test-/debug/extconf.rb8
-rw-r--r--ext/-test-/debug/inspector.c14
-rw-r--r--ext/-test-/debug/profile_frames.c48
-rw-r--r--ext/-test-/dln/empty/depend163
-rw-r--r--ext/-test-/dln/empty/empty.c2
-rw-r--r--ext/-test-/econv/append.c17
-rw-r--r--ext/-test-/econv/depend336
-rw-r--r--ext/-test-/econv/extconf.rb3
-rw-r--r--ext/-test-/econv/init.c11
-rw-r--r--ext/-test-/ensure_and_callcc/depend163
-rw-r--r--ext/-test-/ensure_and_callcc/ensure_and_callcc.c58
-rw-r--r--ext/-test-/ensure_and_callcc/extconf.rb5
-rw-r--r--ext/-test-/enumerator_kw/depend163
-rw-r--r--ext/-test-/enumerator_kw/enumerator_kw.c22
-rw-r--r--ext/-test-/enumerator_kw/extconf.rb1
-rw-r--r--ext/-test-/eval/depend162
-rw-r--r--ext/-test-/eval/eval.c13
-rw-r--r--ext/-test-/eval/extconf.rb2
-rw-r--r--ext/-test-/exception/depend620
-rw-r--r--ext/-test-/exception/enc_raise.c2
-rw-r--r--ext/-test-/exception/ensured.c14
-rw-r--r--ext/-test-/exception/extconf.rb8
-rw-r--r--ext/-test-/fatal/depend486
-rw-r--r--ext/-test-/fatal/extconf.rb3
-rw-r--r--ext/-test-/fatal/init.c10
-rw-r--r--ext/-test-/fatal/invalid.c22
-rw-r--r--ext/-test-/fatal/rb_fatal.c4
-rw-r--r--ext/-test-/file/depend648
-rw-r--r--ext/-test-/file/extconf.rb10
-rw-r--r--ext/-test-/file/fs.c47
-rw-r--r--ext/-test-/file/newline_conv.c73
-rw-r--r--ext/-test-/float/depend329
-rw-r--r--ext/-test-/float/extconf.rb9
-rw-r--r--ext/-test-/funcall/depend163
-rw-r--r--ext/-test-/funcall/funcall.c72
-rw-r--r--ext/-test-/funcall/passing_block.c30
-rw-r--r--ext/-test-/gvl/call_without_gvl/call_without_gvl.c50
-rw-r--r--ext/-test-/gvl/call_without_gvl/depend163
-rw-r--r--ext/-test-/hash/depend324
-rw-r--r--ext/-test-/hash/extconf.rb9
-rw-r--r--ext/-test-/integer/core_ext.c36
-rw-r--r--ext/-test-/integer/depend493
-rw-r--r--ext/-test-/integer/extconf.rb3
-rw-r--r--ext/-test-/integer/init.c11
-rw-r--r--ext/-test-/integer/my_integer.c20
-rw-r--r--ext/-test-/iseq_load/depend163
-rw-r--r--ext/-test-/iter/break.c4
-rw-r--r--ext/-test-/iter/depend485
-rw-r--r--ext/-test-/iter/extconf.rb9
-rw-r--r--ext/-test-/iter/yield.c2
-rw-r--r--ext/-test-/load/dot.dot/depend163
-rw-r--r--ext/-test-/load/dot.dot/dot.dot.c2
-rw-r--r--ext/-test-/load/protect/depend163
-rw-r--r--ext/-test-/load/protect/extconf.rb1
-rw-r--r--ext/-test-/load/protect/protect.c19
-rw-r--r--ext/-test-/load/resolve_symbol_resolver/depend163
-rw-r--r--ext/-test-/load/resolve_symbol_resolver/extconf.rb1
-rw-r--r--ext/-test-/load/resolve_symbol_resolver/resolve_symbol_resolver.c56
-rw-r--r--ext/-test-/load/resolve_symbol_target/depend164
-rw-r--r--ext/-test-/load/resolve_symbol_target/extconf.rb1
-rw-r--r--ext/-test-/load/resolve_symbol_target/resolve_symbol_target.c15
-rw-r--r--ext/-test-/load/resolve_symbol_target/resolve_symbol_target.h4
-rw-r--r--ext/-test-/load/stringify_symbols/depend164
-rw-r--r--ext/-test-/load/stringify_symbols/extconf.rb1
-rw-r--r--ext/-test-/load/stringify_symbols/stringify_symbols.c29
-rw-r--r--ext/-test-/load/stringify_target/depend164
-rw-r--r--ext/-test-/load/stringify_target/extconf.rb1
-rw-r--r--ext/-test-/load/stringify_target/stringify_target.c15
-rw-r--r--ext/-test-/load/stringify_target/stringify_target.h4
-rw-r--r--ext/-test-/marshal/compat/depend163
-rw-r--r--ext/-test-/marshal/internal_ivar/depend163
-rw-r--r--ext/-test-/marshal/internal_ivar/internal_ivar.c29
-rw-r--r--ext/-test-/marshal/usr/depend163
-rw-r--r--ext/-test-/memory_status/depend162
-rw-r--r--ext/-test-/memory_status/extconf.rb12
-rw-r--r--ext/-test-/memory_status/memory_status.c80
-rw-r--r--ext/-test-/memory_view/depend164
-rw-r--r--ext/-test-/memory_view/extconf.rb5
-rw-r--r--ext/-test-/memory_view/memory_view.c450
-rw-r--r--ext/-test-/method/depend324
-rw-r--r--ext/-test-/method/extconf.rb8
-rw-r--r--ext/-test-/notimplement/bug.c4
-rw-r--r--ext/-test-/notimplement/depend163
-rw-r--r--ext/-test-/num2int/depend163
-rw-r--r--ext/-test-/num2int/num2int.c26
-rw-r--r--ext/-test-/path_to_class/depend163
-rw-r--r--ext/-test-/popen_deadlock/depend164
-rw-r--r--ext/-test-/popen_deadlock/extconf.rb1
-rw-r--r--ext/-test-/postponed_job/depend165
-rw-r--r--ext/-test-/postponed_job/postponed_job.c180
-rw-r--r--ext/-test-/printf/depend178
-rw-r--r--ext/-test-/printf/printf.c72
-rw-r--r--ext/-test-/proc/depend485
-rw-r--r--ext/-test-/proc/extconf.rb9
-rw-r--r--ext/-test-/proc/super.c2
-rw-r--r--ext/-test-/public_header_warnings/extconf.rb28
-rw-r--r--ext/-test-/random/bad_version.c135
-rw-r--r--ext/-test-/random/depend485
-rw-r--r--ext/-test-/random/extconf.rb3
-rw-r--r--ext/-test-/random/init.c11
-rw-r--r--ext/-test-/random/loop.c120
-rw-r--r--ext/-test-/rational/depend170
-rw-r--r--ext/-test-/rational/rat.c23
-rw-r--r--ext/-test-/rb_call_super_kw/depend163
-rw-r--r--ext/-test-/rb_call_super_kw/extconf.rb1
-rw-r--r--ext/-test-/rb_call_super_kw/rb_call_super_kw.c15
-rw-r--r--ext/-test-/recursion/depend163
-rw-r--r--ext/-test-/regexp/depend325
-rw-r--r--ext/-test-/regexp/extconf.rb3
-rw-r--r--ext/-test-/regexp/init.c11
-rw-r--r--ext/-test-/regexp/parse_depth_limit.c23
-rw-r--r--ext/-test-/sanitizers/depend162
-rw-r--r--ext/-test-/sanitizers/extconf.rb2
-rw-r--r--ext/-test-/sanitizers/sanitizers.c36
-rw-r--r--ext/-test-/scan_args/depend163
-rw-r--r--ext/-test-/scan_args/extconf.rb1
-rw-r--r--ext/-test-/scan_args/scan_args.c305
-rw-r--r--ext/-test-/scheduler/extconf.rb2
-rw-r--r--ext/-test-/scheduler/scheduler.c92
-rw-r--r--ext/-test-/st/foreach/depend163
-rw-r--r--ext/-test-/st/foreach/foreach.c110
-rw-r--r--ext/-test-/st/numhash/depend163
-rw-r--r--ext/-test-/st/numhash/numhash.c21
-rw-r--r--ext/-test-/st/update/depend163
-rw-r--r--ext/-test-/st/update/update.c12
-rw-r--r--ext/-test-/stack/depend179
-rw-r--r--ext/-test-/stack/extconf.rb3
-rw-r--r--ext/-test-/stack/stack.c35
-rw-r--r--ext/-test-/string/capacity.c13
-rw-r--r--ext/-test-/string/coderange.c20
-rw-r--r--ext/-test-/string/cstr.c73
-rw-r--r--ext/-test-/string/depend2927
-rw-r--r--ext/-test-/string/ellipsize.c2
-rw-r--r--ext/-test-/string/enc_associate.c2
-rw-r--r--ext/-test-/string/enc_dummy.c15
-rw-r--r--ext/-test-/string/enc_str_buf_cat.c16
-rw-r--r--ext/-test-/string/extconf.rb9
-rw-r--r--ext/-test-/string/fstring.c31
-rw-r--r--ext/-test-/string/init.c2
-rw-r--r--ext/-test-/string/modify.c2
-rw-r--r--ext/-test-/string/new.c21
-rw-r--r--ext/-test-/string/nofree.c2
-rw-r--r--ext/-test-/string/normalize.c4
-rw-r--r--ext/-test-/string/qsort.c16
-rw-r--r--ext/-test-/string/rb_interned_str.c14
-rw-r--r--ext/-test-/string/rb_str_dup.c35
-rw-r--r--ext/-test-/string/set_len.c20
-rw-r--r--ext/-test-/struct/data.c13
-rw-r--r--ext/-test-/struct/depend807
-rw-r--r--ext/-test-/struct/duplicate.c24
-rw-r--r--ext/-test-/struct/extconf.rb9
-rw-r--r--ext/-test-/struct/len.c13
-rw-r--r--ext/-test-/struct/member.c2
-rw-r--r--ext/-test-/symbol/depend324
-rw-r--r--ext/-test-/symbol/extconf.rb8
-rw-r--r--ext/-test-/symbol/init.c16
-rw-r--r--ext/-test-/symbol/type.c6
-rw-r--r--ext/-test-/thread/id/depend163
-rw-r--r--ext/-test-/thread/id/extconf.rb3
-rw-r--r--ext/-test-/thread/id/id.c15
-rw-r--r--ext/-test-/thread/instrumentation/depend165
-rw-r--r--ext/-test-/thread/instrumentation/extconf.rb2
-rw-r--r--ext/-test-/thread/instrumentation/instrumentation.c218
-rw-r--r--ext/-test-/thread/lock_native_thread/depend163
-rw-r--r--ext/-test-/thread/lock_native_thread/extconf.rb2
-rw-r--r--ext/-test-/thread/lock_native_thread/lock_native_thread.c50
-rw-r--r--ext/-test-/time/depend490
-rw-r--r--ext/-test-/time/extconf.rb9
-rw-r--r--ext/-test-/time/init.c2
-rw-r--r--ext/-test-/time/new.c2
-rw-r--r--ext/-test-/tracepoint/depend302
-rw-r--r--ext/-test-/tracepoint/gc_hook.c55
-rw-r--r--ext/-test-/tracepoint/tracepoint.c64
-rw-r--r--ext/-test-/typeddata/depend163
-rw-r--r--ext/-test-/typeddata/typeddata.c26
-rw-r--r--ext/-test-/vm/at_exit.c44
-rw-r--r--ext/-test-/vm/depend163
-rw-r--r--ext/-test-/vm/extconf.rb1
-rw-r--r--ext/-test-/wait/depend175
-rw-r--r--ext/-test-/wait/extconf.rb2
-rw-r--r--ext/-test-/wait/wait.c39
-rw-r--r--ext/-test-/wait_for_single_fd/depend14
-rw-r--r--ext/-test-/wait_for_single_fd/extconf.rb2
-rw-r--r--ext/-test-/wait_for_single_fd/wait_for_single_fd.c30
-rw-r--r--ext/-test-/win32/console/attribute.c45
-rw-r--r--ext/-test-/win32/console/extconf.rb8
-rw-r--r--ext/-test-/win32/dln/depend4
-rw-r--r--ext/-test-/win32/dln/extconf.rb7
-rw-r--r--ext/-test-/win32/fd_setsize/fd_setsize.c10
-rw-r--r--ext/.document50
-rw-r--r--ext/Setup9
-rw-r--r--ext/Setup.atheos8
-rw-r--r--ext/Setup.nacl46
-rw-r--r--ext/Setup.nt8
-rw-r--r--ext/bigdecimal/bigdecimal.c6303
-rw-r--r--ext/bigdecimal/bigdecimal.gemspec31
-rw-r--r--ext/bigdecimal/bigdecimal.h336
-rw-r--r--ext/bigdecimal/depend13
-rw-r--r--ext/bigdecimal/extconf.rb11
-rw-r--r--ext/bigdecimal/lib/bigdecimal/jacobian.rb88
-rw-r--r--ext/bigdecimal/lib/bigdecimal/ludcmp.rb89
-rw-r--r--ext/bigdecimal/lib/bigdecimal/math.rb232
-rw-r--r--ext/bigdecimal/lib/bigdecimal/newton.rb80
-rw-r--r--ext/bigdecimal/lib/bigdecimal/util.rb128
-rw-r--r--ext/bigdecimal/sample/linear.rb73
-rw-r--r--ext/bigdecimal/sample/nlsolve.rb40
-rw-r--r--ext/bigdecimal/sample/pi.rb21
-rw-r--r--ext/cgi/escape/depend175
-rw-r--r--ext/cgi/escape/escape.c496
-rw-r--r--ext/cgi/escape/extconf.rb6
-rw-r--r--ext/continuation/depend162
-rw-r--r--ext/coverage/coverage.c558
-rw-r--r--ext/coverage/depend198
-rw-r--r--ext/coverage/lib/coverage.rb19
-rw-r--r--ext/date/date.gemspec36
-rw-r--r--ext/date/date_core.c3793
-rw-r--r--ext/date/date_parse.c592
-rw-r--r--ext/date/date_strftime.c11
-rw-r--r--ext/date/date_strptime.c193
-rw-r--r--ext/date/date_tmx.h2
-rw-r--r--ext/date/depend645
-rw-r--r--ext/date/extconf.rb11
-rw-r--r--ext/date/lib/date.rb29
-rw-r--r--ext/date/prereq.mk19
-rw-r--r--ext/date/update-abbr52
-rw-r--r--ext/date/zonetab.h1564
-rw-r--r--ext/date/zonetab.list330
-rw-r--r--ext/dbm/dbm.c1161
-rw-r--r--ext/dbm/extconf.rb290
-rw-r--r--ext/digest/.document3
-rw-r--r--ext/digest/bubblebabble/bubblebabble.c12
-rw-r--r--ext/digest/bubblebabble/depend155
-rw-r--r--ext/digest/bubblebabble/extconf.rb2
-rw-r--r--ext/digest/defs.h22
-rw-r--r--ext/digest/depend153
-rw-r--r--ext/digest/digest.c159
-rw-r--r--ext/digest/digest.gemspec44
-rw-r--r--ext/digest/digest.h59
-rw-r--r--ext/digest/digest_conf.rb33
-rw-r--r--ext/digest/extconf.rb2
-rw-r--r--ext/digest/lib/digest.rb20
-rw-r--r--ext/digest/lib/digest/loader.rb3
-rw-r--r--ext/digest/lib/digest/version.rb6
-rw-r--r--ext/digest/md5/depend325
-rw-r--r--ext/digest/md5/extconf.rb2
-rw-r--r--ext/digest/md5/md5.c2
-rw-r--r--ext/digest/md5/md5cc.h19
-rw-r--r--ext/digest/md5/md5init.c37
-rw-r--r--ext/digest/md5/md5ossl.h15
-rw-r--r--ext/digest/rmd160/depend336
-rw-r--r--ext/digest/rmd160/extconf.rb6
-rw-r--r--ext/digest/rmd160/rmd160init.c36
-rw-r--r--ext/digest/rmd160/rmd160ossl.h20
-rw-r--r--ext/digest/sha1/depend335
-rw-r--r--ext/digest/sha1/extconf.rb4
-rw-r--r--ext/digest/sha1/sha1.c8
-rw-r--r--ext/digest/sha1/sha1cc.h12
-rw-r--r--ext/digest/sha1/sha1init.c38
-rw-r--r--ext/digest/sha1/sha1ossl.h22
-rw-r--r--ext/digest/sha2/depend336
-rw-r--r--ext/digest/sha2/extconf.rb4
-rw-r--r--ext/digest/sha2/lib/sha2.rb46
-rw-r--r--ext/digest/sha2/lib/sha2/loader.rb3
-rw-r--r--ext/digest/sha2/sha2.c16
-rw-r--r--ext/digest/sha2/sha2cc.h51
-rw-r--r--ext/digest/sha2/sha2init.c59
-rw-r--r--ext/digest/sha2/sha2ossl.h27
-rw-r--r--ext/digest/test.sh30
-rw-r--r--ext/erb/escape/escape.c114
-rw-r--r--ext/erb/escape/extconf.rb9
-rw-r--r--ext/etc/.document2
-rw-r--r--ext/etc/depend183
-rw-r--r--ext/etc/etc.c391
-rw-r--r--ext/etc/etc.gemspec44
-rw-r--r--ext/etc/extconf.rb65
-rw-r--r--ext/etc/mkconstants.rb30
-rwxr-xr-xext/extmk.rb504
-rw-r--r--ext/fcntl/depend163
-rw-r--r--ext/fcntl/extconf.rb2
-rw-r--r--ext/fcntl/fcntl.c163
-rw-r--r--ext/fcntl/fcntl.gemspec32
-rw-r--r--ext/fiber/extconf.rb4
-rw-r--r--ext/fiber/fiber.c8
-rw-r--r--ext/fiddle/closure.c344
-rw-r--r--ext/fiddle/closure.h8
-rw-r--r--ext/fiddle/conversions.c141
-rw-r--r--ext/fiddle/conversions.h44
-rw-r--r--ext/fiddle/depend57
-rw-r--r--ext/fiddle/extconf.rb182
-rw-r--r--ext/fiddle/extlibs2
-rw-r--r--ext/fiddle/fiddle.c454
-rw-r--r--ext/fiddle/fiddle.h138
-rw-r--r--ext/fiddle/function.c315
-rw-r--r--ext/fiddle/function.h8
-rw-r--r--ext/fiddle/handle.c479
-rw-r--r--ext/fiddle/lib/fiddle.rb56
-rw-r--r--ext/fiddle/lib/fiddle/closure.rb49
-rw-r--r--ext/fiddle/lib/fiddle/cparser.rb194
-rw-r--r--ext/fiddle/lib/fiddle/function.rb18
-rw-r--r--ext/fiddle/lib/fiddle/import.rb315
-rw-r--r--ext/fiddle/lib/fiddle/pack.rb129
-rw-r--r--ext/fiddle/lib/fiddle/struct.rb244
-rw-r--r--ext/fiddle/lib/fiddle/types.rb72
-rw-r--r--ext/fiddle/lib/fiddle/value.rb113
-rw-r--r--ext/fiddle/pointer.c721
-rwxr-xr-xext/fiddle/win32/fficonfig.h29
-rw-r--r--ext/fiddle/win32/libffi-3.2.1-mswin.patch191
-rwxr-xr-xext/fiddle/win32/libffi-config.rb48
-rwxr-xr-xext/fiddle/win32/libffi.mk.tmpl96
-rw-r--r--ext/gdbm/README1
-rw-r--r--ext/gdbm/extconf.rb19
-rw-r--r--ext/gdbm/gdbm.c1309
-rw-r--r--ext/io/console/.document2
-rw-r--r--ext/io/console/console.c1507
-rw-r--r--ext/io/console/depend188
-rw-r--r--ext/io/console/extconf.rb42
-rw-r--r--ext/io/console/io-console.gemspec52
-rw-r--r--ext/io/console/lib/console/size.rb2
-rw-r--r--ext/io/console/win32_vk.inc362
-rw-r--r--ext/io/console/win32_vk.list2
-rw-r--r--ext/io/nonblock/depend180
-rw-r--r--ext/io/nonblock/extconf.rb7
-rw-r--r--ext/io/nonblock/io-nonblock.gemspec25
-rw-r--r--ext/io/nonblock/nonblock.c138
-rw-r--r--ext/io/wait/depend180
-rw-r--r--ext/io/wait/extconf.rb17
-rw-r--r--ext/io/wait/io-wait.gemspec39
-rw-r--r--ext/io/wait/wait.c237
-rw-r--r--ext/json/depend2
-rw-r--r--ext/json/extconf.rb3
-rw-r--r--ext/json/fbuffer/fbuffer.h281
-rw-r--r--ext/json/generator/depend173
-rw-r--r--ext/json/generator/extconf.rb17
-rw-r--r--ext/json/generator/generator.c2466
-rw-r--r--ext/json/generator/generator.h166
-rw-r--r--ext/json/json.gemspec65
-rw-r--r--ext/json/json.h101
-rw-r--r--ext/json/lib/json.rb663
-rw-r--r--ext/json/lib/json/add/bigdecimal.rb53
-rw-r--r--ext/json/lib/json/add/complex.rb40
-rw-r--r--ext/json/lib/json/add/core.rb3
-rw-r--r--ext/json/lib/json/add/date.rb35
-rw-r--r--ext/json/lib/json/add/date_time.rb36
-rw-r--r--ext/json/lib/json/add/exception.rb33
-rw-r--r--ext/json/lib/json/add/ostruct.rb42
-rw-r--r--ext/json/lib/json/add/range.rb42
-rw-r--r--ext/json/lib/json/add/rational.rb39
-rw-r--r--ext/json/lib/json/add/regexp.rb39
-rw-r--r--ext/json/lib/json/add/set.rb48
-rw-r--r--ext/json/lib/json/add/string.rb35
-rw-r--r--ext/json/lib/json/add/struct.rb37
-rw-r--r--ext/json/lib/json/add/symbol.rb42
-rw-r--r--ext/json/lib/json/add/time.rb45
-rw-r--r--ext/json/lib/json/common.rb1319
-rw-r--r--ext/json/lib/json/ext.rb47
-rw-r--r--ext/json/lib/json/ext/generator/state.rb103
-rw-r--r--ext/json/lib/json/generic_object.rb10
-rw-r--r--ext/json/lib/json/version.rb10
-rw-r--r--ext/json/parser/depend172
-rw-r--r--ext/json/parser/extconf.rb14
-rw-r--r--ext/json/parser/parser.c3450
-rw-r--r--ext/json/parser/parser.h92
-rw-r--r--ext/json/parser/parser.rl963
-rw-r--r--ext/json/parser/prereq.mk10
-rw-r--r--ext/json/simd/conf.rb24
-rw-r--r--ext/json/simd/simd.h218
-rw-r--r--ext/json/vendor/fpconv.c480
-rw-r--r--ext/json/vendor/jeaiii-ltoa.h267
-rw-r--r--ext/json/vendor/ryu.h819
-rw-r--r--ext/mathn/complex/complex.c7
-rw-r--r--ext/mathn/complex/extconf.rb4
-rw-r--r--ext/mathn/rational/extconf.rb4
-rw-r--r--ext/mathn/rational/rational.c7
-rw-r--r--ext/monitor/depend162
-rw-r--r--ext/monitor/extconf.rb2
-rw-r--r--ext/monitor/lib/monitor.rb289
-rw-r--r--ext/monitor/monitor.c301
-rw-r--r--ext/nkf/depend22
-rw-r--r--ext/nkf/extconf.rb3
-rw-r--r--ext/nkf/lib/kconv.rb283
-rw-r--r--ext/nkf/nkf-utf8/config.h51
-rw-r--r--ext/nkf/nkf-utf8/nkf.c7192
-rw-r--r--ext/nkf/nkf-utf8/nkf.h189
-rw-r--r--ext/nkf/nkf-utf8/utf8tbl.c14628
-rw-r--r--ext/nkf/nkf-utf8/utf8tbl.h72
-rw-r--r--ext/nkf/nkf.c507
-rw-r--r--ext/objspace/depend587
-rw-r--r--ext/objspace/extconf.rb2
-rw-r--r--ext/objspace/lib/objspace.rb135
-rw-r--r--ext/objspace/lib/objspace/trace.rb45
-rw-r--r--ext/objspace/object_tracing.c293
-rw-r--r--ext/objspace/objspace.c747
-rw-r--r--ext/objspace/objspace_dump.c974
-rw-r--r--ext/openssl/History.md965
-rw-r--r--ext/openssl/depend5728
-rw-r--r--ext/openssl/deprecation.rb22
-rw-r--r--ext/openssl/extconf.rb267
-rw-r--r--ext/openssl/lib/openssl.rb38
-rw-r--r--ext/openssl/lib/openssl/bn.rb7
-rw-r--r--ext/openssl/lib/openssl/buffering.rb166
-rw-r--r--ext/openssl/lib/openssl/cipher.rb42
-rw-r--r--ext/openssl/lib/openssl/config.rb473
-rw-r--r--ext/openssl/lib/openssl/digest.rb46
-rw-r--r--ext/openssl/lib/openssl/hmac.rb78
-rw-r--r--ext/openssl/lib/openssl/marshal.rb30
-rw-r--r--ext/openssl/lib/openssl/pkcs5.rb22
-rw-r--r--ext/openssl/lib/openssl/pkey.rb524
-rw-r--r--ext/openssl/lib/openssl/ssl.rb403
-rw-r--r--ext/openssl/lib/openssl/version.rb6
-rw-r--r--ext/openssl/lib/openssl/x509.rb230
-rw-r--r--ext/openssl/openssl.gemspec28
-rw-r--r--ext/openssl/openssl_missing.c354
-rw-r--r--ext/openssl/openssl_missing.h186
-rw-r--r--ext/openssl/ossl.c1051
-rw-r--r--ext/openssl/ossl.h233
-rw-r--r--ext/openssl/ossl_asn1.c1552
-rw-r--r--ext/openssl/ossl_asn1.h48
-rw-r--r--ext/openssl/ossl_bio.c75
-rw-r--r--ext/openssl/ossl_bio.h7
-rw-r--r--ext/openssl/ossl_bn.c1213
-rw-r--r--ext/openssl/ossl_bn.h10
-rw-r--r--ext/openssl/ossl_cipher.c862
-rw-r--r--ext/openssl/ossl_cipher.h16
-rw-r--r--ext/openssl/ossl_config.c458
-rw-r--r--ext/openssl/ossl_config.h14
-rw-r--r--ext/openssl/ossl_digest.c310
-rw-r--r--ext/openssl/ossl_digest.h15
-rw-r--r--ext/openssl/ossl_engine.c326
-rw-r--r--ext/openssl/ossl_engine.h5
-rw-r--r--ext/openssl/ossl_hmac.c315
-rw-r--r--ext/openssl/ossl_hmac.h5
-rw-r--r--ext/openssl/ossl_kdf.c300
-rw-r--r--ext/openssl/ossl_kdf.h6
-rw-r--r--ext/openssl/ossl_ns_spki.c132
-rw-r--r--ext/openssl/ossl_ns_spki.h6
-rw-r--r--ext/openssl/ossl_ocsp.c1278
-rw-r--r--ext/openssl/ossl_ocsp.h9
-rw-r--r--ext/openssl/ossl_pkcs12.c188
-rw-r--r--ext/openssl/ossl_pkcs12.h5
-rw-r--r--ext/openssl/ossl_pkcs5.c188
-rw-r--r--ext/openssl/ossl_pkcs5.h6
-rw-r--r--ext/openssl/ossl_pkcs7.c545
-rw-r--r--ext/openssl/ossl_pkcs7.h8
-rw-r--r--ext/openssl/ossl_pkey.c1759
-rw-r--r--ext/openssl/ossl_pkey.h234
-rw-r--r--ext/openssl/ossl_pkey_dh.c665
-rw-r--r--ext/openssl/ossl_pkey_dsa.c687
-rw-r--r--ext/openssl/ossl_pkey_ec.c1798
-rw-r--r--ext/openssl/ossl_pkey_rsa.c914
-rw-r--r--ext/openssl/ossl_provider.c204
-rw-r--r--ext/openssl/ossl_provider.h5
-rw-r--r--ext/openssl/ossl_rand.c105
-rw-r--r--ext/openssl/ossl_rand.h5
-rw-r--r--ext/openssl/ossl_ssl.c2676
-rw-r--r--ext/openssl/ossl_ssl.h20
-rw-r--r--ext/openssl/ossl_ssl_session.c375
-rw-r--r--ext/openssl/ossl_ts.c1551
-rw-r--r--ext/openssl/ossl_ts.h16
-rw-r--r--ext/openssl/ossl_version.h15
-rw-r--r--ext/openssl/ossl_x509.c159
-rw-r--r--ext/openssl/ossl_x509.h47
-rw-r--r--ext/openssl/ossl_x509attr.c206
-rw-r--r--ext/openssl/ossl_x509cert.c496
-rw-r--r--ext/openssl/ossl_x509crl.c277
-rw-r--r--ext/openssl/ossl_x509ext.c255
-rw-r--r--ext/openssl/ossl_x509name.c325
-rw-r--r--ext/openssl/ossl_x509req.c225
-rw-r--r--ext/openssl/ossl_x509revoked.c131
-rw-r--r--ext/openssl/ossl_x509store.c707
-rw-r--r--ext/openssl/ruby_missing.h27
-rw-r--r--ext/pathname/depend3
-rw-r--r--ext/pathname/extconf.rb4
-rw-r--r--ext/pathname/lib/pathname.rb591
-rw-r--r--ext/pathname/pathname.c1463
-rw-r--r--ext/psych/.gitignore12
-rw-r--r--ext/psych/depend909
-rw-r--r--ext/psych/extconf.rb75
-rw-r--r--ext/psych/lib/psych.rb477
-rw-r--r--ext/psych/lib/psych/class_loader.rb21
-rw-r--r--ext/psych/lib/psych/coder.rb2
-rw-r--r--ext/psych/lib/psych/core_ext.rb38
-rw-r--r--ext/psych/lib/psych/deprecated.rb86
-rw-r--r--ext/psych/lib/psych/exception.rb20
-rw-r--r--ext/psych/lib/psych/handler.rb11
-rw-r--r--ext/psych/lib/psych/handlers/document_stream.rb4
-rw-r--r--ext/psych/lib/psych/handlers/recorder.rb4
-rw-r--r--ext/psych/lib/psych/json/ruby_events.rb2
-rw-r--r--ext/psych/lib/psych/json/stream.rb6
-rw-r--r--ext/psych/lib/psych/json/tree_builder.rb4
-rw-r--r--ext/psych/lib/psych/json/yaml_events.rb2
-rw-r--r--ext/psych/lib/psych/nodes.rb16
-rw-r--r--ext/psych/lib/psych/nodes/alias.rb4
-rw-r--r--ext/psych/lib/psych/nodes/document.rb4
-rw-r--r--ext/psych/lib/psych/nodes/mapping.rb4
-rw-r--r--ext/psych/lib/psych/nodes/node.rb32
-rw-r--r--ext/psych/lib/psych/nodes/scalar.rb6
-rw-r--r--ext/psych/lib/psych/nodes/sequence.rb4
-rw-r--r--ext/psych/lib/psych/nodes/stream.rb4
-rw-r--r--ext/psych/lib/psych/omap.rb2
-rw-r--r--ext/psych/lib/psych/parser.rb15
-rw-r--r--ext/psych/lib/psych/scalar_scanner.rb92
-rw-r--r--ext/psych/lib/psych/set.rb2
-rw-r--r--ext/psych/lib/psych/stream.rb2
-rw-r--r--ext/psych/lib/psych/streaming.rb2
-rw-r--r--ext/psych/lib/psych/syntax_error.rb4
-rw-r--r--ext/psych/lib/psych/tree_builder.rb56
-rw-r--r--ext/psych/lib/psych/versions.rb10
-rw-r--r--ext/psych/lib/psych/visitors.rb14
-rw-r--r--ext/psych/lib/psych/visitors/depth_first.rb2
-rw-r--r--ext/psych/lib/psych/visitors/emitter.rb2
-rw-r--r--ext/psych/lib/psych/visitors/json_tree.rb4
-rw-r--r--ext/psych/lib/psych/visitors/to_ruby.rb143
-rw-r--r--ext/psych/lib/psych/visitors/visitor.rb22
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb290
-rw-r--r--ext/psych/lib/psych/y.rb2
-rw-r--r--ext/psych/lib/psych_jars.rb6
-rw-r--r--ext/psych/psych.c10
-rw-r--r--ext/psych/psych.gemspec95
-rw-r--r--ext/psych/psych.h3
-rw-r--r--ext/psych/psych_emitter.c299
-rw-r--r--ext/psych/psych_parser.c625
-rw-r--r--ext/psych/psych_to_ruby.c9
-rw-r--r--ext/psych/psych_yaml_tree.c13
-rw-r--r--ext/psych/yaml/LICENSE19
-rw-r--r--ext/psych/yaml/api.c1415
-rw-r--r--ext/psych/yaml/config.h10
-rw-r--r--ext/psych/yaml/dumper.c394
-rw-r--r--ext/psych/yaml/emitter.c2329
-rw-r--r--ext/psych/yaml/loader.c459
-rw-r--r--ext/psych/yaml/parser.c1370
-rw-r--r--ext/psych/yaml/reader.c469
-rw-r--r--ext/psych/yaml/scanner.c3576
-rw-r--r--ext/psych/yaml/writer.c141
-rw-r--r--ext/psych/yaml/yaml.h1971
-rw-r--r--ext/psych/yaml/yaml_private.h664
-rw-r--r--ext/pty/depend173
-rw-r--r--ext/pty/extconf.rb20
-rw-r--r--ext/pty/lib/expect.rb27
-rw-r--r--ext/pty/pty.c506
-rw-r--r--ext/racc/cparse/README11
-rw-r--r--ext/racc/cparse/cparse.c857
-rw-r--r--ext/racc/cparse/extconf.rb6
-rw-r--r--ext/rbconfig/sizeof/depend323
-rw-r--r--ext/rbconfig/sizeof/extconf.rb62
-rw-r--r--ext/readline/README10
-rw-r--r--ext/readline/README.ja386
-rw-r--r--ext/readline/depend17
-rw-r--r--ext/readline/extconf.rb111
-rw-r--r--ext/readline/readline.c1993
-rw-r--r--ext/ripper/README1
-rw-r--r--ext/ripper/depend784
-rw-r--r--ext/ripper/eventids2.c353
-rw-r--r--ext/ripper/eventids2.h8
-rw-r--r--ext/ripper/extconf.rb12
-rw-r--r--ext/ripper/lib/ripper.rb10
-rw-r--r--ext/ripper/lib/ripper/core.rb4
-rw-r--r--ext/ripper/lib/ripper/filter.rb12
-rw-r--r--ext/ripper/lib/ripper/lexer.rb236
-rw-r--r--ext/ripper/lib/ripper/sexp.rb53
-rw-r--r--ext/ripper/ripper_init.c.tmpl680
-rw-r--r--ext/ripper/ripper_init.h6
-rw-r--r--ext/ripper/tools/dsl.rb181
-rw-r--r--[-rwxr-xr-x]ext/ripper/tools/generate-param-macros.rb2
-rw-r--r--[-rwxr-xr-x]ext/ripper/tools/generate.rb60
-rw-r--r--[-rwxr-xr-x]ext/ripper/tools/preproc.rb126
-rw-r--r--[-rwxr-xr-x]ext/ripper/tools/strip.rb9
-rw-r--r--ext/rubyvm/depend2
-rw-r--r--ext/rubyvm/extconf.rb1
-rw-r--r--ext/rubyvm/lib/forwardable/impl.rb16
-rw-r--r--ext/sdbm/_sdbm.c952
-rw-r--r--ext/sdbm/depend19
-rw-r--r--ext/sdbm/extconf.rb5
-rw-r--r--ext/sdbm/init.c1068
-rw-r--r--ext/sdbm/sdbm.h86
-rw-r--r--ext/socket/addrinfo.h36
-rw-r--r--ext/socket/ancdata.c306
-rw-r--r--ext/socket/basicsocket.c177
-rw-r--r--ext/socket/constants.c7
-rw-r--r--ext/socket/depend2993
-rw-r--r--ext/socket/extconf.rb61
-rw-r--r--ext/socket/getaddrinfo.c900
-rw-r--r--ext/socket/getnameinfo.c243
-rw-r--r--ext/socket/ifaddr.c79
-rw-r--r--ext/socket/init.c602
-rw-r--r--ext/socket/ipsocket.c1499
-rw-r--r--ext/socket/lib/socket.rb663
-rw-r--r--ext/socket/mkconstants.rb83
-rw-r--r--ext/socket/option.c126
-rw-r--r--ext/socket/raddrinfo.c1299
-rw-r--r--ext/socket/rubysocket.h187
-rw-r--r--ext/socket/socket.c771
-rw-r--r--ext/socket/sockssocket.c21
-rw-r--r--ext/socket/tcpserver.c26
-rw-r--r--ext/socket/tcpsocket.c74
-rw-r--r--ext/socket/udpsocket.c113
-rw-r--r--ext/socket/unixserver.c33
-rw-r--r--ext/socket/unixsocket.c232
-rw-r--r--ext/stringio/.document1
-rw-r--r--ext/stringio/README18
-rw-r--r--ext/stringio/README.md10
-rw-r--r--ext/stringio/depend181
-rw-r--r--ext/stringio/extconf.rb8
-rw-r--r--ext/stringio/stringio.c1164
-rw-r--r--ext/stringio/stringio.gemspec46
-rw-r--r--ext/strscan/depend164
-rw-r--r--ext/strscan/extconf.rb13
-rw-r--r--ext/strscan/lib/strscan/strscan.rb25
-rw-r--r--ext/strscan/strscan.c1998
-rw-r--r--ext/strscan/strscan.gemspec49
-rw-r--r--ext/syslog/depend12
-rw-r--r--ext/syslog/extconf.rb11
-rw-r--r--ext/syslog/lib/syslog/logger.rb209
-rw-r--r--ext/syslog/syslog.c590
-rw-r--r--ext/syslog/syslog.txt124
-rw-r--r--ext/thread/extconf.rb4
-rw-r--r--ext/thread/thread.c6
-rw-r--r--ext/tk/ChangeLog.tkextlib949
-rw-r--r--ext/tk/MANUAL_tcltklib.eng467
-rw-r--r--ext/tk/MANUAL_tcltklib.ja578
-rw-r--r--ext/tk/README.1st19
-rw-r--r--ext/tk/README.ActiveTcl62
-rw-r--r--ext/tk/README.fork34
-rw-r--r--ext/tk/README.macosx-aqua67
-rw-r--r--ext/tk/README.tcltklib152
-rw-r--r--ext/tk/config_list.in41
-rw-r--r--ext/tk/depend2
-rw-r--r--ext/tk/extconf.rb2097
-rw-r--r--ext/tk/lib/README30
-rw-r--r--ext/tk/lib/multi-tk.rb3743
-rw-r--r--ext/tk/lib/remote-tk.rb527
-rw-r--r--ext/tk/lib/tcltk.rb368
-rw-r--r--ext/tk/lib/tk.rb5758
-rw-r--r--ext/tk/lib/tk/after.rb7
-rw-r--r--ext/tk/lib/tk/autoload.rb763
-rw-r--r--ext/tk/lib/tk/bgerror.rb30
-rw-r--r--ext/tk/lib/tk/bindtag.rb139
-rw-r--r--ext/tk/lib/tk/busy.rb119
-rw-r--r--ext/tk/lib/tk/button.rb32
-rw-r--r--ext/tk/lib/tk/canvas.rb847
-rw-r--r--ext/tk/lib/tk/canvastag.rb460
-rw-r--r--ext/tk/lib/tk/checkbutton.rb33
-rw-r--r--ext/tk/lib/tk/clipboard.rb76
-rw-r--r--ext/tk/lib/tk/clock.rb72
-rw-r--r--ext/tk/lib/tk/composite.rb485
-rw-r--r--ext/tk/lib/tk/console.rb53
-rw-r--r--ext/tk/lib/tk/dialog.rb327
-rw-r--r--ext/tk/lib/tk/encodedstr.rb188
-rw-r--r--ext/tk/lib/tk/entry.rb121
-rw-r--r--ext/tk/lib/tk/event.rb563
-rw-r--r--ext/tk/lib/tk/font.rb2352
-rw-r--r--ext/tk/lib/tk/fontchooser.rb181
-rw-r--r--ext/tk/lib/tk/frame.rb133
-rw-r--r--ext/tk/lib/tk/grid.rb280
-rw-r--r--ext/tk/lib/tk/image.rb396
-rw-r--r--ext/tk/lib/tk/itemconfig.rb1222
-rw-r--r--ext/tk/lib/tk/itemfont.rb328
-rw-r--r--ext/tk/lib/tk/kinput.rb72
-rw-r--r--ext/tk/lib/tk/label.rb23
-rw-r--r--ext/tk/lib/tk/labelframe.rb32
-rw-r--r--ext/tk/lib/tk/listbox.rb285
-rw-r--r--ext/tk/lib/tk/macpkg.rb81
-rw-r--r--ext/tk/lib/tk/menu.rb719
-rw-r--r--ext/tk/lib/tk/menubar.rb138
-rw-r--r--ext/tk/lib/tk/menuspec.rb457
-rw-r--r--ext/tk/lib/tk/message.rb25
-rw-r--r--ext/tk/lib/tk/mngfocus.rb34
-rw-r--r--ext/tk/lib/tk/msgcat.rb300
-rw-r--r--ext/tk/lib/tk/namespace.rb547
-rw-r--r--ext/tk/lib/tk/optiondb.rb372
-rw-r--r--ext/tk/lib/tk/optionobj.rb213
-rw-r--r--ext/tk/lib/tk/pack.rb108
-rw-r--r--ext/tk/lib/tk/package.rb144
-rw-r--r--ext/tk/lib/tk/palette.rb56
-rw-r--r--ext/tk/lib/tk/panedwindow.rb261
-rw-r--r--ext/tk/lib/tk/place.rb129
-rw-r--r--ext/tk/lib/tk/radiobutton.rb74
-rw-r--r--ext/tk/lib/tk/root.rb96
-rw-r--r--ext/tk/lib/tk/scale.rb113
-rw-r--r--ext/tk/lib/tk/scrollable.rb83
-rw-r--r--ext/tk/lib/tk/scrollbar.rb184
-rw-r--r--ext/tk/lib/tk/scrollbox.rb40
-rw-r--r--ext/tk/lib/tk/selection.rb87
-rw-r--r--ext/tk/lib/tk/spinbox.rb145
-rw-r--r--ext/tk/lib/tk/tagfont.rb44
-rw-r--r--ext/tk/lib/tk/text.rb1605
-rw-r--r--ext/tk/lib/tk/textimage.rb89
-rw-r--r--ext/tk/lib/tk/textmark.rb205
-rw-r--r--ext/tk/lib/tk/texttag.rb322
-rw-r--r--ext/tk/lib/tk/textwindow.rb155
-rw-r--r--ext/tk/lib/tk/timer.rb666
-rw-r--r--ext/tk/lib/tk/tk_mac.rb159
-rw-r--r--ext/tk/lib/tk/toplevel.rb265
-rw-r--r--ext/tk/lib/tk/ttk_selector.rb99
-rw-r--r--ext/tk/lib/tk/txtwin_abst.rb40
-rw-r--r--ext/tk/lib/tk/validation.rb398
-rw-r--r--ext/tk/lib/tk/variable.rb1797
-rw-r--r--ext/tk/lib/tk/virtevent.rb140
-rw-r--r--ext/tk/lib/tk/winfo.rb393
-rw-r--r--ext/tk/lib/tk/winpkg.rb157
-rw-r--r--ext/tk/lib/tk/wm.rb553
-rw-r--r--ext/tk/lib/tk/xim.rb123
-rw-r--r--ext/tk/lib/tkafter.rb5
-rw-r--r--ext/tk/lib/tkbgerror.rb5
-rw-r--r--ext/tk/lib/tkcanvas.rb5
-rw-r--r--ext/tk/lib/tkclass.rb48
-rw-r--r--ext/tk/lib/tkconsole.rb5
-rw-r--r--ext/tk/lib/tkdialog.rb5
-rw-r--r--ext/tk/lib/tkentry.rb5
-rw-r--r--ext/tk/lib/tkextlib/ICONS.rb14
-rw-r--r--ext/tk/lib/tkextlib/ICONS/icons.rb130
-rw-r--r--ext/tk/lib/tkextlib/ICONS/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/SUPPORT_STATUS193
-rw-r--r--ext/tk/lib/tkextlib/blt.rb190
-rw-r--r--ext/tk/lib/tkextlib/blt/barchart.rb80
-rw-r--r--ext/tk/lib/tkextlib/blt/bitmap.rb113
-rw-r--r--ext/tk/lib/tkextlib/blt/busy.rb84
-rw-r--r--ext/tk/lib/tkextlib/blt/component.rb2219
-rw-r--r--ext/tk/lib/tkextlib/blt/container.rb29
-rw-r--r--ext/tk/lib/tkextlib/blt/cutbuffer.rb24
-rw-r--r--ext/tk/lib/tkextlib/blt/dragdrop.rb270
-rw-r--r--ext/tk/lib/tkextlib/blt/eps.rb33
-rw-r--r--ext/tk/lib/tkextlib/blt/graph.rb68
-rw-r--r--ext/tk/lib/tkextlib/blt/htext.rb113
-rw-r--r--ext/tk/lib/tkextlib/blt/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/blt/spline.rb24
-rw-r--r--ext/tk/lib/tkextlib/blt/stripchart.rb75
-rw-r--r--ext/tk/lib/tkextlib/blt/table.rb413
-rw-r--r--ext/tk/lib/tkextlib/blt/tabnotebook.rb111
-rw-r--r--ext/tk/lib/tkextlib/blt/tabset.rb505
-rw-r--r--ext/tk/lib/tkextlib/blt/ted.rb69
-rw-r--r--ext/tk/lib/tkextlib/blt/tile.rb26
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/button.rb17
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/checkbutton.rb18
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/frame.rb17
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/label.rb17
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/radiobutton.rb18
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/scrollbar.rb17
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/toplevel.rb17
-rw-r--r--ext/tk/lib/tkextlib/blt/tree.rb1059
-rw-r--r--ext/tk/lib/tkextlib/blt/treeview.rb1288
-rw-r--r--ext/tk/lib/tkextlib/blt/unix_dnd.rb142
-rw-r--r--ext/tk/lib/tkextlib/blt/vector.rb257
-rw-r--r--ext/tk/lib/tkextlib/blt/watch.rb176
-rw-r--r--ext/tk/lib/tkextlib/blt/win_printer.rb62
-rw-r--r--ext/tk/lib/tkextlib/blt/winop.rb108
-rw-r--r--ext/tk/lib/tkextlib/bwidget.rb154
-rw-r--r--ext/tk/lib/tkextlib/bwidget/arrowbutton.rb22
-rw-r--r--ext/tk/lib/tkextlib/bwidget/bitmap.rb22
-rw-r--r--ext/tk/lib/tkextlib/bwidget/button.rb32
-rw-r--r--ext/tk/lib/tkextlib/bwidget/buttonbox.rb91
-rw-r--r--ext/tk/lib/tkextlib/bwidget/combobox.rb63
-rw-r--r--ext/tk/lib/tkextlib/bwidget/dialog.rb195
-rw-r--r--ext/tk/lib/tkextlib/bwidget/dragsite.rb32
-rw-r--r--ext/tk/lib/tkextlib/bwidget/dropsite.rb40
-rw-r--r--ext/tk/lib/tkextlib/bwidget/dynamichelp.rb64
-rw-r--r--ext/tk/lib/tkextlib/bwidget/entry.rb44
-rw-r--r--ext/tk/lib/tkextlib/bwidget/label.rb42
-rw-r--r--ext/tk/lib/tkextlib/bwidget/labelentry.rb81
-rw-r--r--ext/tk/lib/tkextlib/bwidget/labelframe.rb53
-rw-r--r--ext/tk/lib/tkextlib/bwidget/listbox.rb362
-rw-r--r--ext/tk/lib/tkextlib/bwidget/mainframe.rb133
-rw-r--r--ext/tk/lib/tkextlib/bwidget/messagedlg.rb193
-rw-r--r--ext/tk/lib/tkextlib/bwidget/notebook.rb167
-rw-r--r--ext/tk/lib/tkextlib/bwidget/pagesmanager.rb74
-rw-r--r--ext/tk/lib/tkextlib/bwidget/panedwindow.rb43
-rw-r--r--ext/tk/lib/tkextlib/bwidget/panelframe.rb68
-rw-r--r--ext/tk/lib/tkextlib/bwidget/passwddlg.rb45
-rw-r--r--ext/tk/lib/tkextlib/bwidget/progressbar.rb21
-rw-r--r--ext/tk/lib/tkextlib/bwidget/progressdlg.rb59
-rw-r--r--ext/tk/lib/tkextlib/bwidget/scrollableframe.rb41
-rw-r--r--ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb49
-rw-r--r--ext/tk/lib/tkextlib/bwidget/scrollview.rb26
-rw-r--r--ext/tk/lib/tkextlib/bwidget/selectcolor.rb74
-rw-r--r--ext/tk/lib/tkextlib/bwidget/selectfont.rb92
-rw-r--r--ext/tk/lib/tkextlib/bwidget/separator.rb21
-rw-r--r--ext/tk/lib/tkextlib/bwidget/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/bwidget/spinbox.rb99
-rw-r--r--ext/tk/lib/tkextlib/bwidget/statusbar.rb63
-rw-r--r--ext/tk/lib/tkextlib/bwidget/titleframe.rb34
-rw-r--r--ext/tk/lib/tkextlib/bwidget/tree.rb501
-rw-r--r--ext/tk/lib/tkextlib/bwidget/widget.rb130
-rw-r--r--ext/tk/lib/tkextlib/itcl.rb14
-rw-r--r--ext/tk/lib/tkextlib/itcl/incr_tcl.rb179
-rw-r--r--ext/tk/lib/tkextlib/itcl/setup.rb14
-rw-r--r--ext/tk/lib/tkextlib/itk.rb14
-rw-r--r--ext/tk/lib/tkextlib/itk/incr_tk.rb447
-rw-r--r--ext/tk/lib/tkextlib/itk/setup.rb14
-rw-r--r--ext/tk/lib/tkextlib/iwidgets.rb95
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/buttonbox.rb122
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/calendar.rb126
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/canvasprintbox.rb54
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/canvasprintdialog.rb39
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/checkbox.rb131
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/combobox.rb105
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/dateentry.rb21
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/datefield.rb59
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/dialog.rb21
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/dialogshell.rb122
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/disjointlistbox.rb51
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/entryfield.rb186
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/extbutton.rb41
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/extfileselectionbox.rb47
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/extfileselectiondialog.rb34
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/feedback.rb36
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/fileselectionbox.rb47
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/fileselectiondialog.rb34
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/finddialog.rb43
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/hierarchy.rb366
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb51
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/labeledframe.rb40
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb46
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/mainwindow.rb68
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/menubar.rb213
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/messagebox.rb94
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/messagedialog.rb21
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/notebook.rb176
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/optionmenu.rb93
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/panedwindow.rb135
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/promptdialog.rb132
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/pushbutton.rb36
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/radiobox.rb122
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scopedobject.rb25
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb354
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledframe.rb60
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledhtml.rb59
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb208
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb569
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledwidget.rb21
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/selectionbox.rb103
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb93
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/shell.rb39
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spindate.rb49
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spinint.rb31
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spinner.rb170
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spintime.rb49
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb182
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/tabset.rb146
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/timeentry.rb26
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/timefield.rb59
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/toolbar.rb113
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/watch.rb57
-rwxr-xr-xext/tk/lib/tkextlib/pkg_checker.rb185
-rw-r--r--ext/tk/lib/tkextlib/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/tcllib.rb106
-rw-r--r--ext/tk/lib/tkextlib/tcllib/README135
-rw-r--r--ext/tk/lib/tkextlib/tcllib/autoscroll.rb159
-rw-r--r--ext/tk/lib/tkextlib/tcllib/calendar.rb56
-rw-r--r--ext/tk/lib/tkextlib/tcllib/canvas_sqmap.rb37
-rw-r--r--ext/tk/lib/tkextlib/tcllib/canvas_zoom.rb22
-rw-r--r--ext/tk/lib/tkextlib/tcllib/chatwidget.rb152
-rw-r--r--ext/tk/lib/tkextlib/tcllib/crosshair.rb118
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ctext.rb161
-rw-r--r--ext/tk/lib/tkextlib/tcllib/cursor.rb98
-rw-r--r--ext/tk/lib/tkextlib/tcllib/dateentry.rb63
-rw-r--r--ext/tk/lib/tkextlib/tcllib/datefield.rb58
-rw-r--r--ext/tk/lib/tkextlib/tcllib/diagrams.rb225
-rw-r--r--ext/tk/lib/tkextlib/tcllib/dialog.rb85
-rw-r--r--ext/tk/lib/tkextlib/tcllib/getstring.rb135
-rw-r--r--ext/tk/lib/tkextlib/tcllib/history.rb74
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ico.rb147
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ip_entry.rb76
-rw-r--r--ext/tk/lib/tkextlib/tcllib/khim.rb69
-rw-r--r--ext/tk/lib/tkextlib/tcllib/menuentry.rb48
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ntext.rb147
-rw-r--r--ext/tk/lib/tkextlib/tcllib/panelframe.rb79
-rw-r--r--ext/tk/lib/tkextlib/tcllib/plotchart.rb1405
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ruler.rb66
-rw-r--r--ext/tk/lib/tkextlib/tcllib/screenruler.rb69
-rw-r--r--ext/tk/lib/tkextlib/tcllib/scrolledwindow.rb58
-rw-r--r--ext/tk/lib/tkextlib/tcllib/scrollwin.rb62
-rw-r--r--ext/tk/lib/tkextlib/tcllib/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/tcllib/statusbar.rb80
-rw-r--r--ext/tk/lib/tkextlib/tcllib/style.rb62
-rw-r--r--ext/tk/lib/tkextlib/tcllib/superframe.rb52
-rw-r--r--ext/tk/lib/tkextlib/tcllib/swaplist.rb151
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tablelist.rb29
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tablelist_core.rb1073
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tablelist_tile.rb44
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tkpiechart.rb315
-rw-r--r--ext/tk/lib/tkextlib/tcllib/toolbar.rb176
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tooltip.rb105
-rw-r--r--ext/tk/lib/tkextlib/tcllib/validator.rb66
-rw-r--r--ext/tk/lib/tkextlib/tcllib/widget.rb83
-rw-r--r--ext/tk/lib/tkextlib/tclx.rb14
-rw-r--r--ext/tk/lib/tkextlib/tclx/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/tclx/tclx.rb75
-rw-r--r--ext/tk/lib/tkextlib/tile.rb450
-rw-r--r--ext/tk/lib/tkextlib/tile/dialog.rb103
-rw-r--r--ext/tk/lib/tkextlib/tile/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/tile/sizegrip.rb33
-rw-r--r--ext/tk/lib/tkextlib/tile/style.rb337
-rw-r--r--ext/tk/lib/tkextlib/tile/tbutton.rb35
-rw-r--r--ext/tk/lib/tkextlib/tile/tcheckbutton.rb39
-rw-r--r--ext/tk/lib/tkextlib/tile/tcombobox.rb56
-rw-r--r--ext/tk/lib/tkextlib/tile/tentry.rb50
-rw-r--r--ext/tk/lib/tkextlib/tile/tframe.rb35
-rw-r--r--ext/tk/lib/tkextlib/tile/tlabel.rb35
-rw-r--r--ext/tk/lib/tkextlib/tile/tlabelframe.rb39
-rw-r--r--ext/tk/lib/tkextlib/tile/tmenubutton.rb39
-rw-r--r--ext/tk/lib/tkextlib/tile/tnotebook.rb148
-rw-r--r--ext/tk/lib/tkextlib/tile/tpaned.rb246
-rw-r--r--ext/tk/lib/tkextlib/tile/tprogressbar.rb58
-rw-r--r--ext/tk/lib/tkextlib/tile/tradiobutton.rb39
-rw-r--r--ext/tk/lib/tkextlib/tile/treeview.rb1337
-rw-r--r--ext/tk/lib/tkextlib/tile/tscale.rb57
-rw-r--r--ext/tk/lib/tkextlib/tile/tscrollbar.rb64
-rw-r--r--ext/tk/lib/tkextlib/tile/tseparator.rb35
-rw-r--r--ext/tk/lib/tkextlib/tile/tspinbox.rb108
-rw-r--r--ext/tk/lib/tkextlib/tile/tsquare.rb31
-rw-r--r--ext/tk/lib/tkextlib/tkDND.rb19
-rw-r--r--ext/tk/lib/tkextlib/tkDND/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/tkDND/shape.rb126
-rw-r--r--ext/tk/lib/tkextlib/tkDND/tkdnd.rb183
-rw-r--r--ext/tk/lib/tkextlib/tkHTML.rb14
-rw-r--r--ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb454
-rw-r--r--ext/tk/lib/tkextlib/tkHTML/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/tkimg.rb37
-rw-r--r--ext/tk/lib/tkextlib/tkimg/README26
-rw-r--r--ext/tk/lib/tkextlib/tkimg/bmp.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/dted.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/gif.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/ico.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/jpeg.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/pcx.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/pixmap.rb45
-rw-r--r--ext/tk/lib/tkextlib/tkimg/png.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/ppm.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/ps.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/raw.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/tkimg/sgi.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/sun.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/tga.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/tiff.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/window.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/xbm.rb34
-rw-r--r--ext/tk/lib/tkextlib/tkimg/xpm.rb34
-rw-r--r--ext/tk/lib/tkextlib/tktable.rb15
-rw-r--r--ext/tk/lib/tkextlib/tktable/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/tktable/tktable.rb967
-rw-r--r--ext/tk/lib/tkextlib/tktrans.rb15
-rw-r--r--ext/tk/lib/tkextlib/tktrans/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/tktrans/tktrans.rb65
-rw-r--r--ext/tk/lib/tkextlib/treectrl.rb14
-rw-r--r--ext/tk/lib/tkextlib/treectrl/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/treectrl/tktreectrl.rb2523
-rw-r--r--ext/tk/lib/tkextlib/trofs.rb14
-rw-r--r--ext/tk/lib/tkextlib/trofs/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/trofs/trofs.rb52
-rw-r--r--ext/tk/lib/tkextlib/version.rb7
-rw-r--r--ext/tk/lib/tkextlib/vu.rb49
-rw-r--r--ext/tk/lib/tkextlib/vu/bargraph.rb62
-rw-r--r--ext/tk/lib/tkextlib/vu/charts.rb54
-rw-r--r--ext/tk/lib/tkextlib/vu/dial.rb103
-rw-r--r--ext/tk/lib/tkextlib/vu/pie.rb287
-rw-r--r--ext/tk/lib/tkextlib/vu/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/vu/spinbox.rb23
-rw-r--r--ext/tk/lib/tkextlib/winico.rb15
-rw-r--r--ext/tk/lib/tkextlib/winico/setup.rb9
-rw-r--r--ext/tk/lib/tkextlib/winico/winico.rb225
-rw-r--r--ext/tk/lib/tkfont.rb5
-rw-r--r--ext/tk/lib/tkmacpkg.rb5
-rw-r--r--ext/tk/lib/tkmenubar.rb5
-rw-r--r--ext/tk/lib/tkmngfocus.rb5
-rw-r--r--ext/tk/lib/tkpalette.rb5
-rw-r--r--ext/tk/lib/tkscrollbox.rb5
-rw-r--r--ext/tk/lib/tktext.rb5
-rw-r--r--ext/tk/lib/tkvirtevent.rb5
-rw-r--r--ext/tk/lib/tkwinpkg.rb5
-rw-r--r--ext/tk/old-README.tcltklib.ja159
-rw-r--r--ext/tk/old-extconf.rb441
-rw-r--r--ext/tk/sample/24hr_clock.rb287
-rw-r--r--ext/tk/sample/binding_sample.rb88
-rw-r--r--ext/tk/sample/bindtag_sample.rb128
-rw-r--r--ext/tk/sample/binstr_usage.rb46
-rw-r--r--ext/tk/sample/btn_with_frame.rb21
-rw-r--r--ext/tk/sample/cd_timer.rb82
-rw-r--r--ext/tk/sample/cmd_res_test.rb18
-rw-r--r--ext/tk/sample/cmd_resource5
-rw-r--r--ext/tk/sample/demos-en/ChangeLog64
-rw-r--r--ext/tk/sample/demos-en/ChangeLog.prev9
-rw-r--r--ext/tk/sample/demos-en/README138
-rw-r--r--ext/tk/sample/demos-en/README.1st18
-rw-r--r--ext/tk/sample/demos-en/README.tkencoding29
-rw-r--r--ext/tk/sample/demos-en/anilabel.rb175
-rw-r--r--ext/tk/sample/demos-en/aniwave.rb119
-rw-r--r--ext/tk/sample/demos-en/arrow.rb250
-rw-r--r--ext/tk/sample/demos-en/bind.rb128
-rw-r--r--ext/tk/sample/demos-en/bitmap.rb76
-rw-r--r--ext/tk/sample/demos-en/browse163
-rw-r--r--ext/tk/sample/demos-en/browse282
-rw-r--r--ext/tk/sample/demos-en/button.rb85
-rw-r--r--ext/tk/sample/demos-en/check.rb73
-rw-r--r--ext/tk/sample/demos-en/check2.rb110
-rw-r--r--ext/tk/sample/demos-en/clrpick.rb88
-rw-r--r--ext/tk/sample/demos-en/colors.rb159
-rw-r--r--ext/tk/sample/demos-en/combo.rb97
-rw-r--r--ext/tk/sample/demos-en/cscroll.rb137
-rw-r--r--ext/tk/sample/demos-en/ctext.rb208
-rw-r--r--ext/tk/sample/demos-en/dialog1.rb39
-rw-r--r--ext/tk/sample/demos-en/dialog2.rb42
-rw-r--r--ext/tk/sample/demos-en/doc.org/README7
-rw-r--r--ext/tk/sample/demos-en/doc.org/README.JP14
-rw-r--r--ext/tk/sample/demos-en/doc.org/README.tk8046
-rw-r--r--ext/tk/sample/demos-en/doc.org/license.terms39
-rw-r--r--ext/tk/sample/demos-en/doc.org/license.terms.tk8039
-rw-r--r--ext/tk/sample/demos-en/entry1.rb59
-rw-r--r--ext/tk/sample/demos-en/entry2.rb94
-rw-r--r--ext/tk/sample/demos-en/entry3.rb221
-rw-r--r--ext/tk/sample/demos-en/filebox.rb103
-rw-r--r--ext/tk/sample/demos-en/floor.rb1724
-rw-r--r--ext/tk/sample/demos-en/floor2.rb1723
-rw-r--r--ext/tk/sample/demos-en/form.rb65
-rw-r--r--ext/tk/sample/demos-en/goldberg.rb2007
-rw-r--r--ext/tk/sample/demos-en/hello14
-rw-r--r--ext/tk/sample/demos-en/hscale.rb76
-rw-r--r--ext/tk/sample/demos-en/icon.rb106
-rw-r--r--ext/tk/sample/demos-en/image1.rb66
-rw-r--r--ext/tk/sample/demos-en/image2.rb108
-rw-r--r--ext/tk/sample/demos-en/image3.rb126
-rw-r--r--ext/tk/sample/demos-en/items.rb382
-rw-r--r--ext/tk/sample/demos-en/ixset333
-rw-r--r--ext/tk/sample/demos-en/ixset2367
-rw-r--r--ext/tk/sample/demos-en/knightstour.rb272
-rw-r--r--ext/tk/sample/demos-en/label.rb73
-rw-r--r--ext/tk/sample/demos-en/labelframe.rb96
-rw-r--r--ext/tk/sample/demos-en/mclist.rb118
-rw-r--r--ext/tk/sample/demos-en/menu.rb197
-rw-r--r--ext/tk/sample/demos-en/menu84.rb216
-rw-r--r--ext/tk/sample/demos-en/menubu.rb238
-rw-r--r--ext/tk/sample/demos-en/msgbox.rb91
-rw-r--r--ext/tk/sample/demos-en/msgbox2.rb92
-rw-r--r--ext/tk/sample/demos-en/paned1.rb48
-rw-r--r--ext/tk/sample/demos-en/paned2.rb95
-rw-r--r--ext/tk/sample/demos-en/pendulum.rb241
-rw-r--r--ext/tk/sample/demos-en/plot.rb125
-rw-r--r--ext/tk/sample/demos-en/puzzle.rb135
-rw-r--r--ext/tk/sample/demos-en/radio.rb87
-rw-r--r--ext/tk/sample/demos-en/radio2.rb110
-rw-r--r--ext/tk/sample/demos-en/radio3.rb118
-rw-r--r--ext/tk/sample/demos-en/rmt268
-rw-r--r--ext/tk/sample/demos-en/rolodex320
-rw-r--r--ext/tk/sample/demos-en/ruler.rb206
-rw-r--r--ext/tk/sample/demos-en/sayings.rb107
-rw-r--r--ext/tk/sample/demos-en/search.rb188
-rw-r--r--ext/tk/sample/demos-en/spin.rb66
-rw-r--r--ext/tk/sample/demos-en/square81
-rw-r--r--ext/tk/sample/demos-en/states.rb81
-rw-r--r--ext/tk/sample/demos-en/style.rb232
-rw-r--r--ext/tk/sample/demos-en/tcolor526
-rw-r--r--ext/tk/sample/demos-en/text.rb129
-rw-r--r--ext/tk/sample/demos-en/textpeer.rb77
-rw-r--r--ext/tk/sample/demos-en/timer136
-rw-r--r--ext/tk/sample/demos-en/tkencoding.rb43
-rw-r--r--ext/tk/sample/demos-en/toolbar.rb131
-rw-r--r--ext/tk/sample/demos-en/tree.rb120
-rw-r--r--ext/tk/sample/demos-en/ttkbut.rb140
-rw-r--r--ext/tk/sample/demos-en/ttkmenu.rb86
-rw-r--r--ext/tk/sample/demos-en/ttknote.rb90
-rw-r--r--ext/tk/sample/demos-en/ttkpane.rb214
-rw-r--r--ext/tk/sample/demos-en/ttkprogress.rb67
-rw-r--r--ext/tk/sample/demos-en/twind.rb292
-rw-r--r--ext/tk/sample/demos-en/twind2.rb385
-rw-r--r--ext/tk/sample/demos-en/unicodeout.rb115
-rw-r--r--ext/tk/sample/demos-en/vscale.rb80
-rw-r--r--ext/tk/sample/demos-en/widget1087
-rw-r--r--ext/tk/sample/demos-jp/README54
-rw-r--r--ext/tk/sample/demos-jp/README.1st20
-rw-r--r--ext/tk/sample/demos-jp/anilabel.rb178
-rw-r--r--ext/tk/sample/demos-jp/aniwave.rb121
-rw-r--r--ext/tk/sample/demos-jp/arrow.rb248
-rw-r--r--ext/tk/sample/demos-jp/bind.rb126
-rw-r--r--ext/tk/sample/demos-jp/bitmap.rb75
-rw-r--r--ext/tk/sample/demos-jp/browse163
-rw-r--r--ext/tk/sample/demos-jp/browse282
-rw-r--r--ext/tk/sample/demos-jp/button.rb84
-rw-r--r--ext/tk/sample/demos-jp/check.rb71
-rw-r--r--ext/tk/sample/demos-jp/check2.rb111
-rw-r--r--ext/tk/sample/demos-jp/clrpick.rb85
-rw-r--r--ext/tk/sample/demos-jp/colors.rb156
-rw-r--r--ext/tk/sample/demos-jp/combo.rb99
-rw-r--r--ext/tk/sample/demos-jp/cscroll.rb135
-rw-r--r--ext/tk/sample/demos-jp/ctext.rb205
-rw-r--r--ext/tk/sample/demos-jp/dialog1.rb40
-rw-r--r--ext/tk/sample/demos-jp/dialog2.rb44
-rw-r--r--ext/tk/sample/demos-jp/doc.org/README7
-rw-r--r--ext/tk/sample/demos-jp/doc.org/README.JP14
-rw-r--r--ext/tk/sample/demos-jp/doc.org/README.tk8046
-rw-r--r--ext/tk/sample/demos-jp/doc.org/license.terms39
-rw-r--r--ext/tk/sample/demos-jp/doc.org/license.terms.tk8039
-rw-r--r--ext/tk/sample/demos-jp/entry1.rb61
-rw-r--r--ext/tk/sample/demos-jp/entry2.rb92
-rw-r--r--ext/tk/sample/demos-jp/entry3.rb226
-rw-r--r--ext/tk/sample/demos-jp/filebox.rb103
-rw-r--r--ext/tk/sample/demos-jp/floor.rb1722
-rw-r--r--ext/tk/sample/demos-jp/floor2.rb1720
-rw-r--r--ext/tk/sample/demos-jp/form.rb67
-rw-r--r--ext/tk/sample/demos-jp/goldberg.rb2012
-rw-r--r--ext/tk/sample/demos-jp/hello10
-rw-r--r--ext/tk/sample/demos-jp/hscale.rb79
-rw-r--r--ext/tk/sample/demos-jp/icon.rb104
-rw-r--r--ext/tk/sample/demos-jp/image1.rb65
-rw-r--r--ext/tk/sample/demos-jp/image2.rb107
-rw-r--r--ext/tk/sample/demos-jp/image3.rb128
-rw-r--r--ext/tk/sample/demos-jp/items.rb380
-rw-r--r--ext/tk/sample/demos-jp/ixset333
-rw-r--r--ext/tk/sample/demos-jp/ixset2369
-rw-r--r--ext/tk/sample/demos-jp/knightstour.rb274
-rw-r--r--ext/tk/sample/demos-jp/label.rb70
-rw-r--r--ext/tk/sample/demos-jp/labelframe.rb103
-rw-r--r--ext/tk/sample/demos-jp/mclist.rb122
-rw-r--r--ext/tk/sample/demos-jp/menu.rb202
-rw-r--r--ext/tk/sample/demos-jp/menu84.rb214
-rw-r--r--ext/tk/sample/demos-jp/menu8x.rb234
-rw-r--r--ext/tk/sample/demos-jp/menubu.rb239
-rw-r--r--ext/tk/sample/demos-jp/msgbox.rb90
-rw-r--r--ext/tk/sample/demos-jp/msgbox2.rb91
-rw-r--r--ext/tk/sample/demos-jp/paned1.rb53
-rw-r--r--ext/tk/sample/demos-jp/paned2.rb101
-rw-r--r--ext/tk/sample/demos-jp/pendulum.rb243
-rw-r--r--ext/tk/sample/demos-jp/plot.rb127
-rw-r--r--ext/tk/sample/demos-jp/puzzle.rb132
-rw-r--r--ext/tk/sample/demos-jp/radio.rb85
-rw-r--r--ext/tk/sample/demos-jp/radio2.rb113
-rw-r--r--ext/tk/sample/demos-jp/radio3.rb120
-rw-r--r--ext/tk/sample/demos-jp/rmt268
-rw-r--r--ext/tk/sample/demos-jp/rolodex320
-rw-r--r--ext/tk/sample/demos-jp/rolodex-j300
-rw-r--r--ext/tk/sample/demos-jp/ruler.rb204
-rw-r--r--ext/tk/sample/demos-jp/sayings.rb104
-rw-r--r--ext/tk/sample/demos-jp/search.rb185
-rw-r--r--ext/tk/sample/demos-jp/spin.rb72
-rw-r--r--ext/tk/sample/demos-jp/square81
-rw-r--r--ext/tk/sample/demos-jp/states.rb75
-rw-r--r--ext/tk/sample/demos-jp/style.rb271
-rw-r--r--ext/tk/sample/demos-jp/tcolor534
-rw-r--r--ext/tk/sample/demos-jp/text.rb121
-rw-r--r--ext/tk/sample/demos-jp/textpeer.rb83
-rw-r--r--ext/tk/sample/demos-jp/timer136
-rw-r--r--ext/tk/sample/demos-jp/toolbar.rb137
-rw-r--r--ext/tk/sample/demos-jp/tree.rb121
-rw-r--r--ext/tk/sample/demos-jp/ttkbut.rb146
-rw-r--r--ext/tk/sample/demos-jp/ttkmenu.rb92
-rw-r--r--ext/tk/sample/demos-jp/ttknote.rb98
-rw-r--r--ext/tk/sample/demos-jp/ttkpane.rb217
-rw-r--r--ext/tk/sample/demos-jp/ttkprogress.rb72
-rw-r--r--ext/tk/sample/demos-jp/twind.rb293
-rw-r--r--ext/tk/sample/demos-jp/twind2.rb385
-rw-r--r--ext/tk/sample/demos-jp/unicodeout.rb120
-rw-r--r--ext/tk/sample/demos-jp/vscale.rb81
-rw-r--r--ext/tk/sample/demos-jp/widget1122
-rw-r--r--ext/tk/sample/editable_listbox.rb149
-rw-r--r--ext/tk/sample/encstr_usage.rb31
-rw-r--r--ext/tk/sample/figmemo_sample.rb457
-rw-r--r--ext/tk/sample/images/earth.gifbin51712 -> 0 bytes
-rw-r--r--ext/tk/sample/images/earthris.gifbin6343 -> 0 bytes
-rw-r--r--ext/tk/sample/images/face.xbm173
-rw-r--r--ext/tk/sample/images/flagdown.xbm27
-rw-r--r--ext/tk/sample/images/flagup.xbm27
-rw-r--r--ext/tk/sample/images/gray25.xbm6
-rw-r--r--ext/tk/sample/images/grey.256
-rw-r--r--ext/tk/sample/images/grey.56
-rw-r--r--ext/tk/sample/images/letters.xbm27
-rw-r--r--ext/tk/sample/images/noletter.xbm27
-rw-r--r--ext/tk/sample/images/pattern.xbm6
-rw-r--r--ext/tk/sample/images/tcllogo.gifbin2341 -> 0 bytes
-rw-r--r--ext/tk/sample/images/teapot.ppm31
-rw-r--r--ext/tk/sample/irbtk.rb31
-rw-r--r--ext/tk/sample/irbtkw.rbw156
-rw-r--r--ext/tk/sample/iso2022-kr.txt2
-rw-r--r--ext/tk/sample/menubar1.rb52
-rw-r--r--ext/tk/sample/menubar2.rb57
-rw-r--r--ext/tk/sample/menubar3.rb73
-rw-r--r--ext/tk/sample/msgs_rb/README3
-rw-r--r--ext/tk/sample/msgs_rb/cs.msg84
-rw-r--r--ext/tk/sample/msgs_rb/de.msg88
-rw-r--r--ext/tk/sample/msgs_rb/el.msg98
-rw-r--r--ext/tk/sample/msgs_rb/en.msg83
-rw-r--r--ext/tk/sample/msgs_rb/en_gb.msg7
-rw-r--r--ext/tk/sample/msgs_rb/eo.msg87
-rw-r--r--ext/tk/sample/msgs_rb/es.msg84
-rw-r--r--ext/tk/sample/msgs_rb/fr.msg84
-rw-r--r--ext/tk/sample/msgs_rb/it.msg84
-rw-r--r--ext/tk/sample/msgs_rb/ja.msg13
-rw-r--r--ext/tk/sample/msgs_rb/nl.msg123
-rw-r--r--ext/tk/sample/msgs_rb/pl.msg87
-rw-r--r--ext/tk/sample/msgs_rb/ru.msg87
-rw-r--r--ext/tk/sample/msgs_rb2/README5
-rw-r--r--ext/tk/sample/msgs_rb2/de.msg88
-rw-r--r--ext/tk/sample/msgs_rb2/ja.msg85
-rw-r--r--ext/tk/sample/msgs_tk/README4
-rw-r--r--ext/tk/sample/msgs_tk/cs.msg84
-rw-r--r--ext/tk/sample/msgs_tk/de.msg88
-rw-r--r--ext/tk/sample/msgs_tk/el.msg103
-rw-r--r--ext/tk/sample/msgs_tk/en.msg83
-rw-r--r--ext/tk/sample/msgs_tk/en_gb.msg7
-rw-r--r--ext/tk/sample/msgs_tk/eo.msg87
-rw-r--r--ext/tk/sample/msgs_tk/es.msg84
-rw-r--r--ext/tk/sample/msgs_tk/fr.msg84
-rw-r--r--ext/tk/sample/msgs_tk/it.msg84
-rw-r--r--ext/tk/sample/msgs_tk/ja.msg13
-rw-r--r--ext/tk/sample/msgs_tk/license.terms39
-rw-r--r--ext/tk/sample/msgs_tk/nl.msg123
-rw-r--r--ext/tk/sample/msgs_tk/pl.msg87
-rw-r--r--ext/tk/sample/msgs_tk/ru.msg87
-rw-r--r--ext/tk/sample/multi-ip_sample.rb104
-rw-r--r--ext/tk/sample/multi-ip_sample2.rb30
-rw-r--r--ext/tk/sample/optobj_sample.rb68
-rw-r--r--ext/tk/sample/propagate.rb31
-rw-r--r--ext/tk/sample/remote-ip_sample.rb34
-rw-r--r--ext/tk/sample/remote-ip_sample2.rb57
-rw-r--r--ext/tk/sample/resource.en13
-rw-r--r--ext/tk/sample/resource.ja13
-rwxr-xr-xext/tk/sample/safe-tk.rb132
-rw-r--r--ext/tk/sample/scrollframe.rb250
-rw-r--r--ext/tk/sample/tcltklib/batsu.gifbin538 -> 0 bytes
-rw-r--r--ext/tk/sample/tcltklib/lines0.tcl42
-rw-r--r--ext/tk/sample/tcltklib/lines1.rb51
-rw-r--r--ext/tk/sample/tcltklib/lines2.rb55
-rw-r--r--ext/tk/sample/tcltklib/lines3.rb55
-rw-r--r--ext/tk/sample/tcltklib/lines4.rb55
-rw-r--r--ext/tk/sample/tcltklib/maru.gifbin481 -> 0 bytes
-rw-r--r--ext/tk/sample/tcltklib/safeTk.rb23
-rw-r--r--ext/tk/sample/tcltklib/sample0.rb40
-rw-r--r--ext/tk/sample/tcltklib/sample1.rb635
-rw-r--r--ext/tk/sample/tcltklib/sample2.rb452
-rw-r--r--ext/tk/sample/tkalignbox.rb236
-rw-r--r--ext/tk/sample/tkballoonhelp.rb221
-rw-r--r--ext/tk/sample/tkbiff.rb156
-rw-r--r--ext/tk/sample/tkbrowse.rb80
-rw-r--r--ext/tk/sample/tkcombobox.rb498
-rw-r--r--ext/tk/sample/tkdialog.rb62
-rw-r--r--ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt61
-rw-r--r--ext/tk/sample/tkextlib/ICONS/tkIcons195
-rw-r--r--ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde658
-rw-r--r--ext/tk/sample/tkextlib/ICONS/tkIcons.kde195
-rw-r--r--ext/tk/sample/tkextlib/ICONS/viewIcons.rb330
-rw-r--r--ext/tk/sample/tkextlib/blt/barchart5.rb102
-rw-r--r--ext/tk/sample/tkextlib/blt/calendar.rb118
-rw-r--r--ext/tk/sample/tkextlib/blt/graph6.rb2223
-rw-r--r--ext/tk/sample/tkextlib/blt/graph7.rb41
-rw-r--r--ext/tk/sample/tkextlib/blt/graph7a.rb64
-rw-r--r--ext/tk/sample/tkextlib/blt/graph7b.rb42
-rw-r--r--ext/tk/sample/tkextlib/blt/graph7c.rb46
-rw-r--r--ext/tk/sample/tkextlib/blt/images/buckskin.gifbin7561 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/blt/images/chalk.gifbin4378 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/blt/images/qv100.t.gifbin2694 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/blt/images/rain.gifbin3785 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/blt/images/sample.gifbin186103 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/blt/pareto.rb91
-rw-r--r--ext/tk/sample/tkextlib/blt/plot1.rb10
-rw-r--r--ext/tk/sample/tkextlib/blt/plot1b.rb11
-rw-r--r--ext/tk/sample/tkextlib/blt/readme.txt2
-rw-r--r--ext/tk/sample/tkextlib/blt/scripts/stipples.rb157
-rw-r--r--ext/tk/sample/tkextlib/blt/winop1.rb41
-rw-r--r--ext/tk/sample/tkextlib/blt/winop2.rb29
-rw-r--r--ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt53
-rw-r--r--ext/tk/sample/tkextlib/bwidget/basic.rb199
-rw-r--r--ext/tk/sample/tkextlib/bwidget/bwidget.xbm46
-rw-r--r--ext/tk/sample/tkextlib/bwidget/demo.rb244
-rw-r--r--ext/tk/sample/tkextlib/bwidget/dnd.rb47
-rw-r--r--ext/tk/sample/tkextlib/bwidget/manager.rb151
-rw-r--r--ext/tk/sample/tkextlib/bwidget/select.rb83
-rw-r--r--ext/tk/sample/tkextlib/bwidget/tmpldlg.rb222
-rw-r--r--ext/tk/sample/tkextlib/bwidget/tree.rb290
-rw-r--r--ext/tk/sample/tkextlib/bwidget/x1.xbm2258
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt42
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/clear.gifbin279 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/close.gifbin249 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/copy.gifbin269 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/cut.gifbin179 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/exit.gifbin396 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/find.gifbin386 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/help.gifbin591 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/mag.gifbin183 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/new.gifbin212 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/open.gifbin258 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/paste.gifbin376 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/poly.gifbin141 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/print.gifbin263 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gifbin174 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/save.gifbin270 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/select.gifbin124 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb23
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb11
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb9
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb9
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb13
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb33
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb8
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb9
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb21
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb15
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb17
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.rb40
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb45
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb41
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb21
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb9
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb30
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb11
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb9
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb29
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb16
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb26
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb15
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb15
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb65
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb125
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb45
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb20
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb20
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb45
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb31
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb31
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb15
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb23
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb23
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb18
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb10
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb19
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb16
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb23
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb12
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb20
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb13
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/shell.rb18
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb8
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb11
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb34
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb8
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb27
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb31
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb35
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb8
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb9
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb153
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/watch.rb19
-rw-r--r--ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt46
-rw-r--r--ext/tk/sample/tkextlib/tcllib/datefield.rb30
-rw-r--r--ext/tk/sample/tkextlib/tcllib/plotdemos1.rb159
-rw-r--r--ext/tk/sample/tkextlib/tcllib/plotdemos2.rb72
-rw-r--r--ext/tk/sample/tkextlib/tcllib/plotdemos3.rb84
-rw-r--r--ext/tk/sample/tkextlib/tcllib/xyplot.rb18
-rw-r--r--ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt30
-rw-r--r--ext/tk/sample/tkextlib/tile/demo.rb984
-rw-r--r--ext/tk/sample/tkextlib/tile/iconlib.tcl110
-rw-r--r--ext/tk/sample/tkextlib/tile/readme.txt2
-rw-r--r--ext/tk/sample/tkextlib/tile/repeater.tcl117
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl149
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gifbin315 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gifbin312 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown.gifbin313 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gifbin329 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gifbin327 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft.gifbin323 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gifbin330 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gifbin327 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright.gifbin324 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gifbin309 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gifbin313 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup.gifbin314 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/button-h.gifbin696 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.gifbin770 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.xcfbin1942 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/button-p.gifbin769 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hc.gifbin254 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hu.gifbin234 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nc.gifbin249 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nu.gifbin229 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hc.gifbin1098 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hu.gifbin626 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nc.gifbin389 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nu.gifbin401 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gifbin343 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gifbin316 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gifbin333 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gifbin308 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/slider-p.gifbin182 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/slider.gifbin182 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider-p.gifbin183 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider.gifbin283 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl6
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl194
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gifbin273 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gifbin258 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gifbin292 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gifbin272 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gifbin274 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gifbin258 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gifbin286 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gifbin271 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-d.gifbin1266 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-h.gifbin896 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-n.gifbin881 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-p.gifbin625 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-s.gifbin859 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-c.gifbin434 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-u.gifbin423 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gifbin401 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gifbin395 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gifbin592 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gifbin1116 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gifbin61 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gifbin1057 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gifbin1095 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gifbin695 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gifbin686 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gifbin383 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gifbin878 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gifbin907 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gifbin238 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gifbin927 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gifbin405 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gifbin399 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gifbin587 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl15
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc.rb227
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl163
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-h.gifbin522 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-n.gifbin554 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-p.gifbin548 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gifbin281 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gifbin273 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gifbin303 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gifbin294 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gifbin652 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gifbin644 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gifbin632 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gifbin621 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl15
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl16
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik.tcl125
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gifbin362 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gifbin250 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gifbin378 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gifbin267 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gifbin379 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gifbin266 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gifbin363 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gifbin251 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-h.gifbin439 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-n.gifbin443 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-p.gifbin302 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gifbin169 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gifbin170 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gifbin235 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gifbin226 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gifbin169 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gifbin269 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gifbin342 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gifbin178 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gifbin179 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gifbin236 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gifbin178 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gifbin178 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gifbin366 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gifbin336 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tile/toolbutton.tcl152
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt12
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/README12
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/hv.rb314
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image1bin8995 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image10bin3095 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image11bin1425 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image12bin2468 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image13bin4073 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image14bin53 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image2bin42 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image3bin3473 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image4bin1988 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image5bin973 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image6bin2184 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image7bin2022 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image8bin1186 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image9bin139 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/index.html115
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image1bin1966 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image10bin255 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image11bin590 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image12bin254 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image13bin493 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image14bin195 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image15bin68 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image16bin157 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image17bin81 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image18bin545 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image19bin53 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image2bin49 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image20bin533 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image21bin564 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image22bin81 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image23bin539 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image24bin151 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image25bin453 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image26bin520 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image27bin565 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image28bin416 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image29bin121 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image3bin10835 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image30bin663 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image31bin78 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image32bin556 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image33bin598 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image34bin496 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image35bin724 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image36bin404 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image37bin124 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image38bin8330 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image39bin369 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image4bin268 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image5bin492 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image6bin246 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image7bin551 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image8bin497 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image9bin492 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/index.html433
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image1bin113 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image10bin5088 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image11bin4485 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image12bin3579 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image13bin5119 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image14bin3603 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image2bin74 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image3bin681 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image4bin3056 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image5bin2297 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image6bin79 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image7bin1613 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image8bin864 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image9bin2379 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/index.html2787
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image1bin42 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image2bin14343 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image3bin17750 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image4bin61 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image5bin201 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image6bin214 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image7bin149 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image8bin203 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image9bin1504 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/index.html768
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/ss.rb437
-rw-r--r--ext/tk/sample/tkextlib/tkimg/demo.rb1479
-rw-r--r--ext/tk/sample/tkextlib/tkimg/license_terms_of_Img_extension41
-rw-r--r--ext/tk/sample/tkextlib/tkimg/readme.txt3
-rw-r--r--ext/tk/sample/tkextlib/tktable/Orig_LICENSE.txt52
-rw-r--r--ext/tk/sample/tkextlib/tktable/basic.rb61
-rw-r--r--ext/tk/sample/tkextlib/tktable/buttons.rb77
-rw-r--r--ext/tk/sample/tkextlib/tktable/command.rb90
-rw-r--r--ext/tk/sample/tkextlib/tktable/debug.rb102
-rw-r--r--ext/tk/sample/tkextlib/tktable/dynarows.rb100
-rw-r--r--ext/tk/sample/tkextlib/tktable/maxsize.rb68
-rw-r--r--ext/tk/sample/tkextlib/tktable/spreadsheet.rb138
-rw-r--r--ext/tk/sample/tkextlib/tktable/tcllogo.gifbin2341 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/tktable/valid.rb89
-rw-r--r--ext/tk/sample/tkextlib/treectrl/bitmaps.rb77
-rw-r--r--ext/tk/sample/tkextlib/treectrl/demo.rb1306
-rw-r--r--ext/tk/sample/tkextlib/treectrl/explorer.rb431
-rw-r--r--ext/tk/sample/tkextlib/treectrl/help.rb405
-rw-r--r--ext/tk/sample/tkextlib/treectrl/imovie.rb131
-rw-r--r--ext/tk/sample/tkextlib/treectrl/layout.rb160
-rw-r--r--ext/tk/sample/tkextlib/treectrl/mailwasher.rb270
-rw-r--r--ext/tk/sample/tkextlib/treectrl/outlook-folders.rb125
-rw-r--r--ext/tk/sample/tkextlib/treectrl/outlook-newgroup.rb449
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/big-dll.gifbin437 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/big-exe.gifbin368 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/big-file.gifbin466 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/big-folder.gifbin459 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/big-txt.gifbin392 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/checked.gifbin78 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/file.gifbin279 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/folder-closed.gifbin111 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/folder-open.gifbin120 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/help-book-closed.gifbin115 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/help-book-open.gifbin128 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/help-page.gifbin132 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-01.gifbin5406 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-02.gifbin5912 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-03.gifbin4696 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-04.gifbin5783 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-05.gifbin3238 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-06.gifbin3509 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-07.gifbin2091 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-check-off.gifbin70 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-check-on.gifbin76 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-print.gifbin124 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-radio-off.gifbin68 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-radio-on.gifbin71 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-search.gifbin114 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-security.gifbin108 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/mac-collapse.gifbin275 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/mac-expand.gifbin277 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-arrow.gifbin73 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-clip.gifbin73 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-deleted.gifbin138 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-draft.gifbin134 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-folder.gifbin133 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-group.gifbin144 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-inbox.gifbin133 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-local.gifbin146 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-main.gifbin174 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-outbox.gifbin136 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-read-2.gifbin343 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-read.gifbin304 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-sent.gifbin132 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-server.gifbin163 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-unread.gifbin303 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-watch.gifbin98 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/sky.gifbin6454 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/small-dll.gifbin311 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/small-exe.gifbin115 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/small-file.gifbin338 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/small-folder.gifbin307 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/small-txt.gifbin302 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/unchecked.gifbin72 -> 0 bytes
-rw-r--r--ext/tk/sample/tkextlib/treectrl/random.rb509
-rw-r--r--ext/tk/sample/tkextlib/treectrl/readme.txt2
-rw-r--r--ext/tk/sample/tkextlib/treectrl/www-options.rb304
-rw-r--r--ext/tk/sample/tkextlib/vu/Orig_LICENSE.txt51
-rw-r--r--ext/tk/sample/tkextlib/vu/README.txt50
-rw-r--r--ext/tk/sample/tkextlib/vu/canvItems.rb91
-rw-r--r--ext/tk/sample/tkextlib/vu/canvSticker.rb83
-rw-r--r--ext/tk/sample/tkextlib/vu/canvSticker2.rb102
-rw-r--r--ext/tk/sample/tkextlib/vu/dial_demo.rb114
-rw-r--r--ext/tk/sample/tkextlib/vu/m128_000.xbm174
-rw-r--r--ext/tk/sample/tkextlib/vu/oscilloscope.rb69
-rw-r--r--ext/tk/sample/tkextlib/vu/pie.rb57
-rw-r--r--ext/tk/sample/tkextlib/vu/vu_demo.rb68
-rw-r--r--ext/tk/sample/tkfrom.rb133
-rw-r--r--ext/tk/sample/tkhello.rb11
-rw-r--r--ext/tk/sample/tkline.rb48
-rw-r--r--ext/tk/sample/tkmenubutton.rb136
-rw-r--r--ext/tk/sample/tkmsgcat-load_rb.rb103
-rw-r--r--ext/tk/sample/tkmsgcat-load_rb2.rb103
-rw-r--r--ext/tk/sample/tkmsgcat-load_tk.rb119
-rw-r--r--ext/tk/sample/tkmulticolumnlist.rb744
-rw-r--r--ext/tk/sample/tkmultilistbox.rb655
-rw-r--r--ext/tk/sample/tkmultilistframe.rb941
-rwxr-xr-xext/tk/sample/tkoptdb-safeTk.rb74
-rw-r--r--ext/tk/sample/tkoptdb.rb107
-rw-r--r--ext/tk/sample/tkrttimer.rb78
-rw-r--r--ext/tk/sample/tksleep_sample.rb30
-rw-r--r--ext/tk/sample/tktextframe.rb282
-rw-r--r--ext/tk/sample/tktextio.rb1061
-rw-r--r--ext/tk/sample/tktimer.rb51
-rw-r--r--ext/tk/sample/tktimer2.rb48
-rw-r--r--ext/tk/sample/tktimer3.rb60
-rw-r--r--ext/tk/sample/tktree.rb104
-rw-r--r--ext/tk/sample/tktree.tcl305
-rw-r--r--ext/tk/sample/ttk_wrapper.rb155
-rw-r--r--ext/tk/stubs.c592
-rw-r--r--ext/tk/stubs.h33
-rw-r--r--ext/tk/tcltklib.c11087
-rw-r--r--ext/tk/tkutil/depend1
-rw-r--r--ext/tk/tkutil/extconf.rb14
-rw-r--r--ext/tk/tkutil/tkutil.c1895
-rw-r--r--ext/win32/depend2
-rw-r--r--ext/win32/extconf.rb2
-rw-r--r--ext/win32/lib/Win32API.rb38
-rw-r--r--ext/win32/lib/win32/importer.rb9
-rw-r--r--ext/win32/lib/win32/registry.rb369
-rw-r--r--ext/win32/lib/win32/resolv.rb359
-rw-r--r--ext/win32/lib/win32/sspi.rb331
-rw-r--r--ext/win32/resolv/depend17
-rw-r--r--ext/win32/resolv/extconf.rb7
-rw-r--r--ext/win32/resolv/resolv.c260
-rw-r--r--ext/win32/win32-registry.gemspec29
-rw-r--r--ext/win32ole/depend12
-rw-r--r--ext/win32ole/extconf.rb45
-rw-r--r--ext/win32ole/lib/win32ole/property.rb17
-rw-r--r--ext/win32ole/sample/excel1.rb37
-rw-r--r--ext/win32ole/sample/excel2.rb31
-rw-r--r--ext/win32ole/sample/excel3.rb21
-rw-r--r--ext/win32ole/sample/ie.rb12
-rw-r--r--ext/win32ole/sample/ieconst.rb33
-rw-r--r--ext/win32ole/sample/ienavi.rb41
-rw-r--r--ext/win32ole/sample/ienavi2.rb41
-rw-r--r--ext/win32ole/sample/oledirs.rb24
-rw-r--r--ext/win32ole/sample/olegen.rb348
-rw-r--r--ext/win32ole/sample/xml.rb7307
-rw-r--r--ext/win32ole/win32ole.c4063
-rw-r--r--ext/win32ole/win32ole.h155
-rw-r--r--ext/win32ole/win32ole_error.c83
-rw-r--r--ext/win32ole/win32ole_error.h8
-rw-r--r--ext/win32ole/win32ole_event.c1278
-rw-r--r--ext/win32ole/win32ole_event.h6
-rw-r--r--ext/win32ole/win32ole_method.c950
-rw-r--r--ext/win32ole/win32ole_method.h16
-rw-r--r--ext/win32ole/win32ole_param.c438
-rw-r--r--ext/win32ole/win32ole_param.h8
-rw-r--r--ext/win32ole/win32ole_record.c604
-rw-r--r--ext/win32ole/win32ole_record.h10
-rw-r--r--ext/win32ole/win32ole_type.c915
-rw-r--r--ext/win32ole/win32ole_type.h8
-rw-r--r--ext/win32ole/win32ole_typelib.c844
-rw-r--r--ext/win32ole/win32ole_typelib.h11
-rw-r--r--ext/win32ole/win32ole_variable.c380
-rw-r--r--ext/win32ole/win32ole_variable.h8
-rw-r--r--ext/win32ole/win32ole_variant.c732
-rw-r--r--ext/win32ole/win32ole_variant.h9
-rw-r--r--ext/win32ole/win32ole_variant_m.c149
-rw-r--r--ext/win32ole/win32ole_variant_m.h7
-rw-r--r--ext/zlib/.gitignore1
-rw-r--r--ext/zlib/depend182
-rw-r--r--ext/zlib/extconf.rb96
-rw-r--r--ext/zlib/zlib.c1346
-rw-r--r--ext/zlib/zlib.gemspec31
-rw-r--r--file.c6287
-rw-r--r--gc.c11672
-rw-r--r--gc.h114
-rw-r--r--gc.rb599
-rw-r--r--gc/README.md37
-rw-r--r--gc/default/default.c9602
-rw-r--r--gc/default/extconf.rb5
-rw-r--r--gc/extconf_base.rb14
-rw-r--r--gc/gc.h265
-rw-r--r--gc/gc_impl.h126
-rw-r--r--gc/mmtk/.gitignore1
-rw-r--r--gc/mmtk/Cargo.lock1108
-rw-r--r--gc/mmtk/Cargo.toml42
-rw-r--r--gc/mmtk/cbindgen.toml36
-rw-r--r--gc/mmtk/depend18
-rw-r--r--gc/mmtk/extconf.rb24
-rw-r--r--gc/mmtk/mmtk.c1554
-rw-r--r--gc/mmtk/mmtk.h172
-rw-r--r--gc/mmtk/src/abi.rs336
-rw-r--r--gc/mmtk/src/active_plan.rs56
-rw-r--r--gc/mmtk/src/api.rs486
-rw-r--r--gc/mmtk/src/binding.rs129
-rw-r--r--gc/mmtk/src/collection.rs109
-rw-r--r--gc/mmtk/src/heap/mod.rs4
-rw-r--r--gc/mmtk/src/heap/ruby_heap_trigger.rs105
-rw-r--r--gc/mmtk/src/lib.rs161
-rw-r--r--gc/mmtk/src/object_model.rs124
-rw-r--r--gc/mmtk/src/pinning_registry.rs187
-rw-r--r--gc/mmtk/src/reference_glue.rs26
-rw-r--r--gc/mmtk/src/scanning.rs291
-rw-r--r--gc/mmtk/src/utils.rs161
-rw-r--r--gc/mmtk/src/weak_proc.rs318
-rw-r--r--gem_prelude.rb34
-rw-r--r--gems/bundled_gems54
-rw-r--r--gems/lib/core_assertions.rb1
-rw-r--r--gems/lib/envutil.rb1
-rw-r--r--gems/lib/rake/extensiontask.rb14
-rw-r--r--golf_prelude.rb9
-rw-r--r--goruby.c46
-rw-r--r--hash.c7375
-rw-r--r--hash.rb40
-rw-r--r--hrtime.h237
-rw-r--r--ia64.s42
-rw-r--r--id_table.c1556
-rw-r--r--id_table.h26
-rw-r--r--imemo.c650
-rw-r--r--include/ruby.h31
-rw-r--r--include/ruby/assert.h316
-rw-r--r--include/ruby/atomic.h1145
-rw-r--r--include/ruby/backward.h29
-rw-r--r--include/ruby/backward/2/assume.h56
-rw-r--r--include/ruby/backward/2/attributes.h161
-rw-r--r--include/ruby/backward/2/bool.h36
-rw-r--r--include/ruby/backward/2/gcc_version_since.h37
-rw-r--r--include/ruby/backward/2/inttypes.h131
-rw-r--r--include/ruby/backward/2/limits.h99
-rw-r--r--include/ruby/backward/2/long_long.h73
-rw-r--r--include/ruby/backward/2/r_cast.h32
-rw-r--r--include/ruby/backward/2/rmodule.h36
-rw-r--r--include/ruby/backward/2/stdalign.h30
-rw-r--r--include/ruby/backward/2/stdarg.h69
-rw-r--r--include/ruby/backward/classext.h18
-rw-r--r--include/ruby/backward/cxxanyargs.hpp671
-rw-r--r--include/ruby/backward/rubyio.h6
-rw-r--r--include/ruby/backward/rubysig.h47
-rw-r--r--include/ruby/backward/st.h6
-rw-r--r--include/ruby/backward/util.h6
-rw-r--r--include/ruby/debug.h796
-rw-r--r--include/ruby/defines.h293
-rw-r--r--include/ruby/encoding.h444
-rw-r--r--include/ruby/fiber/scheduler.h505
-rw-r--r--include/ruby/intern.h1039
-rw-r--r--include/ruby/internal/abi.h58
-rw-r--r--include/ruby/internal/anyargs.h398
-rw-r--r--include/ruby/internal/arithmetic.h39
-rw-r--r--include/ruby/internal/arithmetic/char.h81
-rw-r--r--include/ruby/internal/arithmetic/double.h72
-rw-r--r--include/ruby/internal/arithmetic/fixnum.h60
-rw-r--r--include/ruby/internal/arithmetic/gid_t.h41
-rw-r--r--include/ruby/internal/arithmetic/int.h264
-rw-r--r--include/ruby/internal/arithmetic/intptr_t.h86
-rw-r--r--include/ruby/internal/arithmetic/long.h356
-rw-r--r--include/ruby/internal/arithmetic/long_long.h135
-rw-r--r--include/ruby/internal/arithmetic/mode_t.h41
-rw-r--r--include/ruby/internal/arithmetic/off_t.h62
-rw-r--r--include/ruby/internal/arithmetic/pid_t.h41
-rw-r--r--include/ruby/internal/arithmetic/short.h113
-rw-r--r--include/ruby/internal/arithmetic/size_t.h66
-rw-r--r--include/ruby/internal/arithmetic/st_data_t.h75
-rw-r--r--include/ruby/internal/arithmetic/uid_t.h41
-rw-r--r--include/ruby/internal/assume.h87
-rw-r--r--include/ruby/internal/attr/alloc_size.h32
-rw-r--r--include/ruby/internal/attr/artificial.h46
-rw-r--r--include/ruby/internal/attr/cold.h37
-rw-r--r--include/ruby/internal/attr/const.h46
-rw-r--r--include/ruby/internal/attr/constexpr.h84
-rw-r--r--include/ruby/internal/attr/deprecated.h82
-rw-r--r--include/ruby/internal/attr/diagnose_if.h42
-rw-r--r--include/ruby/internal/attr/enum_extensibility.h32
-rw-r--r--include/ruby/internal/attr/error.h32
-rw-r--r--include/ruby/internal/attr/flag_enum.h33
-rw-r--r--include/ruby/internal/attr/forceinline.h40
-rw-r--r--include/ruby/internal/attr/format.h38
-rw-r--r--include/ruby/internal/attr/maybe_unused.h38
-rw-r--r--include/ruby/internal/attr/noalias.h69
-rw-r--r--include/ruby/internal/attr/nodiscard.h45
-rw-r--r--include/ruby/internal/attr/noexcept.h91
-rw-r--r--include/ruby/internal/attr/noinline.h35
-rw-r--r--include/ruby/internal/attr/nonnull.h34
-rw-r--r--include/ruby/internal/attr/nonstring.h40
-rw-r--r--include/ruby/internal/attr/noreturn.h48
-rw-r--r--include/ruby/internal/attr/packed_struct.h43
-rw-r--r--include/ruby/internal/attr/pure.h43
-rw-r--r--include/ruby/internal/attr/restrict.h44
-rw-r--r--include/ruby/internal/attr/returns_nonnull.h37
-rw-r--r--include/ruby/internal/attr/warning.h32
-rw-r--r--include/ruby/internal/attr/weakref.h32
-rw-r--r--include/ruby/internal/cast.h50
-rw-r--r--include/ruby/internal/compiler_is.h45
-rw-r--r--include/ruby/internal/compiler_is/apple.h40
-rw-r--r--include/ruby/internal/compiler_is/clang.h37
-rw-r--r--include/ruby/internal/compiler_is/gcc.h45
-rw-r--r--include/ruby/internal/compiler_is/intel.h40
-rw-r--r--include/ruby/internal/compiler_is/msvc.h45
-rw-r--r--include/ruby/internal/compiler_is/sunpro.h54
-rw-r--r--include/ruby/internal/compiler_since.h61
-rw-r--r--include/ruby/internal/config.h151
-rw-r--r--include/ruby/internal/constant_p.h38
-rw-r--r--include/ruby/internal/core.h35
-rw-r--r--include/ruby/internal/core/rarray.h405
-rw-r--r--include/ruby/internal/core/rbasic.h172
-rw-r--r--include/ruby/internal/core/rbignum.h80
-rw-r--r--include/ruby/internal/core/rclass.h93
-rw-r--r--include/ruby/internal/core/rdata.h363
-rw-r--r--include/ruby/internal/core/rfile.h51
-rw-r--r--include/ruby/internal/core/rhash.h131
-rw-r--r--include/ruby/internal/core/rmatch.h144
-rw-r--r--include/ruby/internal/core/robject.h142
-rw-r--r--include/ruby/internal/core/rregexp.h168
-rw-r--r--include/ruby/internal/core/rstring.h453
-rw-r--r--include/ruby/internal/core/rstruct.h109
-rw-r--r--include/ruby/internal/core/rtypeddata.h761
-rw-r--r--include/ruby/internal/ctype.h545
-rw-r--r--include/ruby/internal/dllexport.h80
-rw-r--r--include/ruby/internal/dosish.h89
-rw-r--r--include/ruby/internal/encoding/coderange.h202
-rw-r--r--include/ruby/internal/encoding/ctype.h258
-rw-r--r--include/ruby/internal/encoding/encoding.h1044
-rw-r--r--include/ruby/internal/encoding/pathname.h184
-rw-r--r--include/ruby/internal/encoding/re.h46
-rw-r--r--include/ruby/internal/encoding/sprintf.h78
-rw-r--r--include/ruby/internal/encoding/string.h346
-rw-r--r--include/ruby/internal/encoding/symbol.h100
-rw-r--r--include/ruby/internal/encoding/transcode.h562
-rw-r--r--include/ruby/internal/error.h599
-rw-r--r--include/ruby/internal/eval.h405
-rw-r--r--include/ruby/internal/event.h159
-rw-r--r--include/ruby/internal/fl_type.h757
-rw-r--r--include/ruby/internal/gc.h826
-rw-r--r--include/ruby/internal/glob.h113
-rw-r--r--include/ruby/internal/globals.h211
-rw-r--r--include/ruby/internal/has/attribute.h163
-rw-r--r--include/ruby/internal/has/builtin.h121
-rw-r--r--include/ruby/internal/has/c_attribute.h50
-rw-r--r--include/ruby/internal/has/cpp_attribute.h86
-rw-r--r--include/ruby/internal/has/declspec_attribute.h47
-rw-r--r--include/ruby/internal/has/extension.h33
-rw-r--r--include/ruby/internal/has/feature.h31
-rw-r--r--include/ruby/internal/has/warning.h31
-rw-r--r--include/ruby/internal/intern/array.h663
-rw-r--r--include/ruby/internal/intern/bignum.h846
-rw-r--r--include/ruby/internal/intern/class.h394
-rw-r--r--include/ruby/internal/intern/compar.h62
-rw-r--r--include/ruby/internal/intern/complex.h249
-rw-r--r--include/ruby/internal/intern/cont.h285
-rw-r--r--include/ruby/internal/intern/dir.h42
-rw-r--r--include/ruby/internal/intern/enum.h73
-rw-r--r--include/ruby/internal/intern/enumerator.h263
-rw-r--r--include/ruby/internal/intern/error.h291
-rw-r--r--include/ruby/internal/intern/eval.h222
-rw-r--r--include/ruby/internal/intern/file.h216
-rw-r--r--include/ruby/internal/intern/hash.h306
-rw-r--r--include/ruby/internal/intern/io.h661
-rw-r--r--include/ruby/internal/intern/load.h255
-rw-r--r--include/ruby/internal/intern/marshal.h112
-rw-r--r--include/ruby/internal/intern/numeric.h208
-rw-r--r--include/ruby/internal/intern/object.h501
-rw-r--r--include/ruby/internal/intern/parse.h194
-rw-r--r--include/ruby/internal/intern/proc.h357
-rw-r--r--include/ruby/internal/intern/process.h282
-rw-r--r--include/ruby/internal/intern/random.h116
-rw-r--r--include/ruby/internal/intern/range.h89
-rw-r--r--include/ruby/internal/intern/rational.h172
-rw-r--r--include/ruby/internal/intern/re.h244
-rw-r--r--include/ruby/internal/intern/ruby.h77
-rw-r--r--include/ruby/internal/intern/select.h88
-rw-r--r--include/ruby/internal/intern/select/largesize.h214
-rw-r--r--include/ruby/internal/intern/select/posix.h144
-rw-r--r--include/ruby/internal/intern/select/win32.h259
-rw-r--r--include/ruby/internal/intern/set.h111
-rw-r--r--include/ruby/internal/intern/signal.h146
-rw-r--r--include/ruby/internal/intern/sprintf.h159
-rw-r--r--include/ruby/internal/intern/string.h1758
-rw-r--r--include/ruby/internal/intern/struct.h225
-rw-r--r--include/ruby/internal/intern/thread.h492
-rw-r--r--include/ruby/internal/intern/time.h161
-rw-r--r--include/ruby/internal/intern/variable.h628
-rw-r--r--include/ruby/internal/intern/vm.h433
-rw-r--r--include/ruby/internal/interpreter.h304
-rw-r--r--include/ruby/internal/iterator.h472
-rw-r--r--include/ruby/internal/memory.h767
-rw-r--r--include/ruby/internal/method.h205
-rw-r--r--include/ruby/internal/module.h177
-rw-r--r--include/ruby/internal/newobj.h112
-rw-r--r--include/ruby/internal/scan_args.h534
-rw-r--r--include/ruby/internal/special_consts.h362
-rw-r--r--include/ruby/internal/static_assert.h78
-rw-r--r--include/ruby/internal/stdalign.h135
-rw-r--r--include/ruby/internal/stdbool.h39
-rw-r--r--include/ruby/internal/stdckdint.h68
-rw-r--r--include/ruby/internal/symbol.h343
-rw-r--r--include/ruby/internal/value.h133
-rw-r--r--include/ruby/internal/value_type.h450
-rw-r--r--include/ruby/internal/variable.h337
-rw-r--r--include/ruby/internal/warning_push.h124
-rw-r--r--include/ruby/internal/xmalloc.h288
-rw-r--r--include/ruby/io.h1135
-rw-r--r--include/ruby/io/buffer.h110
-rw-r--r--include/ruby/memory_view.h325
-rw-r--r--include/ruby/missing.h241
-rw-r--r--include/ruby/onigmo.h953
-rw-r--r--include/ruby/oniguruma.h849
-rw-r--r--include/ruby/ractor.h278
-rw-r--r--include/ruby/random.h361
-rw-r--r--include/ruby/re.h224
-rw-r--r--include/ruby/regex.h21
-rw-r--r--include/ruby/ruby.h2548
-rw-r--r--include/ruby/st.h186
-rw-r--r--include/ruby/subst.h9
-rw-r--r--include/ruby/thread.h354
-rw-r--r--include/ruby/thread_native.h192
-rw-r--r--include/ruby/util.h275
-rw-r--r--include/ruby/version.h159
-rw-r--r--include/ruby/vm.h67
-rw-r--r--include/ruby/win32.h282
-rw-r--r--inits.c61
-rw-r--r--insns.def2427
-rw-r--r--internal.h1457
-rw-r--r--internal/array.h154
-rw-r--r--internal/basic_operators.h66
-rw-r--r--internal/bignum.h256
-rw-r--r--internal/bits.h647
-rw-r--r--internal/box.h83
-rw-r--r--internal/class.h806
-rw-r--r--internal/cmdlineopt.h64
-rw-r--r--internal/compar.h29
-rw-r--r--internal/compile.h34
-rw-r--r--internal/compilers.h107
-rw-r--r--internal/complex.h29
-rw-r--r--internal/concurrent_set.h21
-rw-r--r--internal/cont.h34
-rw-r--r--internal/dir.h16
-rw-r--r--internal/enc.h19
-rw-r--r--internal/encoding.h39
-rw-r--r--internal/enum.h18
-rw-r--r--internal/enumerator.h21
-rw-r--r--internal/error.h252
-rw-r--r--internal/eval.h43
-rw-r--r--internal/file.h38
-rw-r--r--internal/fixnum.h185
-rw-r--r--internal/gc.h361
-rw-r--r--internal/hash.h194
-rw-r--r--internal/imemo.h312
-rw-r--r--internal/inits.h51
-rw-r--r--internal/io.h163
-rw-r--r--internal/load.h20
-rw-r--r--internal/loadpath.h16
-rw-r--r--internal/math.h23
-rw-r--r--internal/missing.h19
-rw-r--r--internal/numeric.h323
-rw-r--r--internal/object.h63
-rw-r--r--internal/parse.h131
-rw-r--r--internal/proc.h30
-rw-r--r--internal/process.h124
-rw-r--r--internal/ractor.h10
-rw-r--r--internal/random.h17
-rw-r--r--internal/range.h40
-rw-r--r--internal/rational.h71
-rw-r--r--internal/re.h33
-rw-r--r--internal/ruby_parser.h102
-rw-r--r--internal/sanitizers.h346
-rw-r--r--internal/serial.h23
-rw-r--r--internal/set_table.h70
-rw-r--r--internal/signal.h25
-rw-r--r--internal/st.h11
-rw-r--r--internal/static_assert.h16
-rw-r--r--internal/string.h225
-rw-r--r--internal/struct.h140
-rw-r--r--internal/symbol.h46
-rw-r--r--internal/thread.h112
-rw-r--r--internal/time.h34
-rw-r--r--internal/transcode.h23
-rw-r--r--internal/util.h27
-rw-r--r--internal/variable.h74
-rw-r--r--internal/vm.h136
-rw-r--r--internal/warnings.h16
-rw-r--r--io.c12814
-rw-r--r--io.rb136
-rw-r--r--io_buffer.c3981
-rw-r--r--iseq.c4260
-rw-r--r--iseq.h357
-rw-r--r--jit.c799
-rw-r--r--jit/Cargo.toml6
-rw-r--r--jit/src/lib.rs38
-rw-r--r--jit_hook.rb12
-rw-r--r--jit_undef.rb4
-rw-r--r--kernel.rb294
-rw-r--r--lex.c.blt122
-rw-r--r--lib/English.gemspec27
-rw-r--r--lib/English.rb148
-rw-r--r--lib/abbrev.rb132
-rw-r--r--lib/base64.rb107
-rw-r--r--lib/benchmark.rb562
-rw-r--r--lib/bundled_gems.rb271
-rw-r--r--lib/bundler.rb681
-rw-r--r--lib/bundler/.document1
-rw-r--r--lib/bundler/build_metadata.rb43
-rw-r--r--lib/bundler/bundler.gemspec45
-rw-r--r--lib/bundler/capistrano.rb4
-rw-r--r--lib/bundler/checksum.rb270
-rw-r--r--lib/bundler/ci_detector.rb75
-rw-r--r--lib/bundler/cli.rb821
-rw-r--r--lib/bundler/cli/add.rb59
-rw-r--r--lib/bundler/cli/binstubs.rb57
-rw-r--r--lib/bundler/cli/cache.rb32
-rw-r--r--lib/bundler/cli/check.rb40
-rw-r--r--lib/bundler/cli/clean.rb25
-rw-r--r--lib/bundler/cli/common.rb155
-rw-r--r--lib/bundler/cli/config.rb203
-rw-r--r--lib/bundler/cli/console.rb47
-rw-r--r--lib/bundler/cli/doctor.rb33
-rw-r--r--lib/bundler/cli/doctor/diagnose.rb167
-rw-r--r--lib/bundler/cli/doctor/ssl.rb249
-rw-r--r--lib/bundler/cli/exec.rb114
-rw-r--r--lib/bundler/cli/fund.rb36
-rw-r--r--lib/bundler/cli/gem.rb485
-rw-r--r--lib/bundler/cli/info.rb83
-rw-r--r--lib/bundler/cli/init.rb51
-rw-r--r--lib/bundler/cli/install.rb124
-rw-r--r--lib/bundler/cli/issue.rb41
-rw-r--r--lib/bundler/cli/list.rb97
-rw-r--r--lib/bundler/cli/lock.rb94
-rw-r--r--lib/bundler/cli/open.rb29
-rw-r--r--lib/bundler/cli/outdated.rb297
-rw-r--r--lib/bundler/cli/platform.rb48
-rw-r--r--lib/bundler/cli/plugin.rb39
-rw-r--r--lib/bundler/cli/pristine.rb64
-rw-r--r--lib/bundler/cli/remove.rb17
-rw-r--r--lib/bundler/cli/show.rb71
-rw-r--r--lib/bundler/cli/update.rb123
-rw-r--r--lib/bundler/compact_index_client.rb92
-rw-r--r--lib/bundler/compact_index_client/cache.rb96
-rw-r--r--lib/bundler/compact_index_client/cache_file.rb148
-rw-r--r--lib/bundler/compact_index_client/parser.rb84
-rw-r--r--lib/bundler/compact_index_client/updater.rb105
-rw-r--r--lib/bundler/constants.rb14
-rw-r--r--lib/bundler/current_ruby.rb94
-rw-r--r--lib/bundler/definition.rb1249
-rw-r--r--lib/bundler/dependency.rb151
-rw-r--r--lib/bundler/deployment.rb6
-rw-r--r--lib/bundler/deprecate.rb44
-rw-r--r--lib/bundler/digest.rb71
-rw-r--r--lib/bundler/dsl.rb638
-rw-r--r--lib/bundler/endpoint_specification.rb174
-rw-r--r--lib/bundler/env.rb148
-rw-r--r--lib/bundler/environment_preserver.rb69
-rw-r--r--lib/bundler/errors.rb280
-rw-r--r--lib/bundler/feature_flag.rb20
-rw-r--r--lib/bundler/fetcher.rb361
-rw-r--r--lib/bundler/fetcher/base.rb52
-rw-r--r--lib/bundler/fetcher/compact_index.rb120
-rw-r--r--lib/bundler/fetcher/dependency.rb79
-rw-r--r--lib/bundler/fetcher/downloader.rb117
-rw-r--r--lib/bundler/fetcher/gem_remote_fetcher.rb22
-rw-r--r--lib/bundler/fetcher/index.rb25
-rw-r--r--lib/bundler/force_platform.rb16
-rw-r--r--lib/bundler/friendly_errors.rb127
-rw-r--r--lib/bundler/gem_helper.rb237
-rw-r--r--lib/bundler/gem_tasks.rb7
-rw-r--r--lib/bundler/gem_version_promoter.rb147
-rw-r--r--lib/bundler/index.rb203
-rw-r--r--lib/bundler/injector.rb285
-rw-r--r--lib/bundler/inline.rb106
-rw-r--r--lib/bundler/installer.rb238
-rw-r--r--lib/bundler/installer/gem_installer.rb74
-rw-r--r--lib/bundler/installer/parallel_installer.rb203
-rw-r--r--lib/bundler/installer/standalone.rb113
-rw-r--r--lib/bundler/lazy_specification.rb270
-rw-r--r--lib/bundler/lockfile_generator.rb104
-rw-r--r--lib/bundler/lockfile_parser.rb306
-rw-r--r--lib/bundler/man/.document1
-rw-r--r--lib/bundler/man/bundle-add.176
-rw-r--r--lib/bundler/man/bundle-add.1.ronn87
-rw-r--r--lib/bundler/man/bundle-binstubs.130
-rw-r--r--lib/bundler/man/bundle-binstubs.1.ronn42
-rw-r--r--lib/bundler/man/bundle-cache.156
-rw-r--r--lib/bundler/man/bundle-cache.1.ronn95
-rw-r--r--lib/bundler/man/bundle-check.121
-rw-r--r--lib/bundler/man/bundle-check.1.ronn26
-rw-r--r--lib/bundler/man/bundle-clean.117
-rw-r--r--lib/bundler/man/bundle-clean.1.ronn18
-rw-r--r--lib/bundler/man/bundle-config.1356
-rw-r--r--lib/bundler/man/bundle-config.1.ronn406
-rw-r--r--lib/bundler/man/bundle-console.133
-rw-r--r--lib/bundler/man/bundle-console.1.ronn39
-rw-r--r--lib/bundler/man/bundle-doctor.169
-rw-r--r--lib/bundler/man/bundle-doctor.1.ronn77
-rw-r--r--lib/bundler/man/bundle-env.19
-rw-r--r--lib/bundler/man/bundle-env.1.ronn10
-rw-r--r--lib/bundler/man/bundle-exec.1104
-rw-r--r--lib/bundler/man/bundle-exec.1.ronn150
-rw-r--r--lib/bundler/man/bundle-fund.122
-rw-r--r--lib/bundler/man/bundle-fund.1.ronn25
-rw-r--r--lib/bundler/man/bundle-gem.1107
-rw-r--r--lib/bundler/man/bundle-gem.1.ronn150
-rw-r--r--lib/bundler/man/bundle-help.19
-rw-r--r--lib/bundler/man/bundle-help.1.ronn12
-rw-r--r--lib/bundler/man/bundle-info.117
-rw-r--r--lib/bundler/man/bundle-info.1.ronn21
-rw-r--r--lib/bundler/man/bundle-init.120
-rw-r--r--lib/bundler/man/bundle-init.1.ronn32
-rw-r--r--lib/bundler/man/bundle-install.1175
-rw-r--r--lib/bundler/man/bundle-install.1.ronn306
-rw-r--r--lib/bundler/man/bundle-issue.145
-rw-r--r--lib/bundler/man/bundle-issue.1.ronn37
-rw-r--r--lib/bundler/man/bundle-licenses.19
-rw-r--r--lib/bundler/man/bundle-licenses.1.ronn10
-rw-r--r--lib/bundler/man/bundle-list.140
-rw-r--r--lib/bundler/man/bundle-list.1.ronn41
-rw-r--r--lib/bundler/man/bundle-lock.175
-rw-r--r--lib/bundler/man/bundle-lock.1.ronn115
-rw-r--r--lib/bundler/man/bundle-open.132
-rw-r--r--lib/bundler/man/bundle-open.1.ronn28
-rw-r--r--lib/bundler/man/bundle-outdated.1103
-rw-r--r--lib/bundler/man/bundle-outdated.1.ronn110
-rw-r--r--lib/bundler/man/bundle-platform.149
-rw-r--r--lib/bundler/man/bundle-platform.1.ronn49
-rw-r--r--lib/bundler/man/bundle-plugin.176
-rw-r--r--lib/bundler/man/bundle-plugin.1.ronn84
-rw-r--r--lib/bundler/man/bundle-pristine.123
-rw-r--r--lib/bundler/man/bundle-pristine.1.ronn34
-rw-r--r--lib/bundler/man/bundle-remove.115
-rw-r--r--lib/bundler/man/bundle-remove.1.ronn16
-rw-r--r--lib/bundler/man/bundle-show.116
-rw-r--r--lib/bundler/man/bundle-show.1.ronn21
-rw-r--r--lib/bundler/man/bundle-update.1281
-rw-r--r--lib/bundler/man/bundle-update.1.ronn359
-rw-r--r--lib/bundler/man/bundle-version.122
-rw-r--r--lib/bundler/man/bundle-version.1.ronn24
-rw-r--r--lib/bundler/man/bundle.193
-rw-r--r--lib/bundler/man/bundle.1.ronn107
-rw-r--r--lib/bundler/man/gemfile.5503
-rw-r--r--lib/bundler/man/gemfile.5.ronn586
-rw-r--r--lib/bundler/man/index.txt31
-rw-r--r--lib/bundler/match_metadata.rb30
-rw-r--r--lib/bundler/match_platform.rb42
-rw-r--r--lib/bundler/match_remote_metadata.rb29
-rw-r--r--lib/bundler/materialization.rb59
-rw-r--r--lib/bundler/mirror.rb221
-rw-r--r--lib/bundler/plugin.rb378
-rw-r--r--lib/bundler/plugin/api.rb81
-rw-r--r--lib/bundler/plugin/api/source.rb322
-rw-r--r--lib/bundler/plugin/dsl.rb53
-rw-r--r--lib/bundler/plugin/events.rb85
-rw-r--r--lib/bundler/plugin/index.rb197
-rw-r--r--lib/bundler/plugin/installer.rb122
-rw-r--r--lib/bundler/plugin/installer/git.rb34
-rw-r--r--lib/bundler/plugin/installer/path.rb26
-rw-r--r--lib/bundler/plugin/installer/rubygems.rb19
-rw-r--r--lib/bundler/plugin/source_list.rb31
-rw-r--r--lib/bundler/process_lock.rb20
-rw-r--r--lib/bundler/remote_specification.rb126
-rw-r--r--lib/bundler/resolver.rb524
-rw-r--r--lib/bundler/resolver/base.rb118
-rw-r--r--lib/bundler/resolver/candidate.rb85
-rw-r--r--lib/bundler/resolver/incompatibility.rb15
-rw-r--r--lib/bundler/resolver/package.rb95
-rw-r--r--lib/bundler/resolver/root.rb25
-rw-r--r--lib/bundler/resolver/spec_group.rb74
-rw-r--r--lib/bundler/resolver/strategy.rb40
-rw-r--r--lib/bundler/retry.rb66
-rw-r--r--lib/bundler/ruby_dsl.rb67
-rw-r--r--lib/bundler/ruby_version.rb135
-rw-r--r--lib/bundler/rubygems_ext.rb481
-rw-r--r--lib/bundler/rubygems_gem_installer.rb176
-rw-r--r--lib/bundler/rubygems_integration.rb456
-rw-r--r--lib/bundler/runtime.rb331
-rw-r--r--lib/bundler/safe_marshal.rb31
-rw-r--r--lib/bundler/self_manager.rb196
-rw-r--r--lib/bundler/settings.rb579
-rw-r--r--lib/bundler/settings/validator.rb79
-rw-r--r--lib/bundler/setup.rb39
-rw-r--r--lib/bundler/shared_helpers.rb393
-rw-r--r--lib/bundler/source.rb118
-rw-r--r--lib/bundler/source/gemspec.rb19
-rw-r--r--lib/bundler/source/git.rb451
-rw-r--r--lib/bundler/source/git/git_proxy.rb464
-rw-r--r--lib/bundler/source/metadata.rb63
-rw-r--r--lib/bundler/source/path.rb255
-rw-r--r--lib/bundler/source/path/installer.rb53
-rw-r--r--lib/bundler/source/rubygems.rb516
-rw-r--r--lib/bundler/source/rubygems/remote.rb76
-rw-r--r--lib/bundler/source/rubygems_aggregate.rb68
-rw-r--r--lib/bundler/source_list.rb228
-rw-r--r--lib/bundler/source_map.rb68
-rw-r--r--lib/bundler/spec_set.rb390
-rw-r--r--lib/bundler/stub_specification.rb146
-rw-r--r--lib/bundler/templates/.document1
-rw-r--r--lib/bundler/templates/Executable16
-rw-r--r--lib/bundler/templates/Executable.standalone14
-rw-r--r--lib/bundler/templates/Gemfile5
-rw-r--r--lib/bundler/templates/newgem/CHANGELOG.md.tt5
-rw-r--r--lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt10
-rw-r--r--lib/bundler/templates/newgem/Cargo.toml.tt7
-rw-r--r--lib/bundler/templates/newgem/Gemfile.tt24
-rw-r--r--lib/bundler/templates/newgem/LICENSE.txt.tt21
-rw-r--r--lib/bundler/templates/newgem/README.md.tt49
-rw-r--r--lib/bundler/templates/newgem/Rakefile.tt72
-rw-r--r--lib/bundler/templates/newgem/bin/console.tt11
-rw-r--r--lib/bundler/templates/newgem/bin/setup.tt8
-rw-r--r--lib/bundler/templates/newgem/circleci/config.yml.tt37
-rw-r--r--lib/bundler/templates/newgem/exe/newgem.tt3
-rw-r--r--lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt15
-rw-r--r--lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt10
-rw-r--r--lib/bundler/templates/newgem/ext/newgem/extconf-go.rb.tt11
-rw-r--r--lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt6
-rw-r--r--lib/bundler/templates/newgem/ext/newgem/go.mod.tt5
-rw-r--r--lib/bundler/templates/newgem/ext/newgem/newgem-go.c.tt2
-rw-r--r--lib/bundler/templates/newgem/ext/newgem/newgem.c.tt9
-rw-r--r--lib/bundler/templates/newgem/ext/newgem/newgem.go.tt31
-rw-r--r--lib/bundler/templates/newgem/ext/newgem/newgem.h.tt6
-rw-r--r--lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt12
-rw-r--r--lib/bundler/templates/newgem/github/workflows/main.yml.tt45
-rw-r--r--lib/bundler/templates/newgem/gitignore.tt23
-rw-r--r--lib/bundler/templates/newgem/gitlab-ci.yml.tt27
-rw-r--r--lib/bundler/templates/newgem/lib/newgem.rb.tt15
-rw-r--r--lib/bundler/templates/newgem/lib/newgem/version.rb.tt9
-rw-r--r--lib/bundler/templates/newgem/newgem.gemspec.tt56
-rw-r--r--lib/bundler/templates/newgem/rspec.tt3
-rw-r--r--lib/bundler/templates/newgem/rubocop.yml.tt8
-rw-r--r--lib/bundler/templates/newgem/sig/newgem.rbs.tt8
-rw-r--r--lib/bundler/templates/newgem/spec/newgem_spec.rb.tt11
-rw-r--r--lib/bundler/templates/newgem/spec/spec_helper.rb.tt15
-rw-r--r--lib/bundler/templates/newgem/standard.yml.tt3
-rw-r--r--lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt6
-rw-r--r--lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt13
-rw-r--r--lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt15
-rw-r--r--lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt6
-rw-r--r--lib/bundler/ui.rb9
-rw-r--r--lib/bundler/ui/rg_proxy.rb19
-rw-r--r--lib/bundler/ui/shell.rb191
-rw-r--r--lib/bundler/ui/silent.rb96
-rw-r--r--lib/bundler/uri_credentials_filter.rb43
-rw-r--r--lib/bundler/uri_normalizer.rb23
-rw-r--r--lib/bundler/vendor/.document1
-rw-r--r--lib/bundler/vendor/connection_pool/lib/connection_pool.rb233
-rw-r--r--lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb237
-rw-r--r--lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb3
-rw-r--r--lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb56
-rw-r--r--lib/bundler/vendor/fileutils/lib/fileutils.rb2701
-rw-r--r--lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb1153
-rw-r--r--lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb41
-rw-r--r--lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb65
-rw-r--r--lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb80
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub.rb31
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb20
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb169
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb182
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb150
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb43
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb121
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb45
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb19
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb61
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb42
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb105
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb3
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb129
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb423
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb236
-rw-r--r--lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb178
-rw-r--r--lib/bundler/vendor/securerandom/lib/securerandom.rb102
-rw-r--r--lib/bundler/vendor/thor/lib/thor.rb674
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions.rb340
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions/create_file.rb105
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions/create_link.rb61
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions/directory.rb108
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb143
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb407
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb130
-rw-r--r--lib/bundler/vendor/thor/lib/thor/base.rb825
-rw-r--r--lib/bundler/vendor/thor/lib/thor/command.rb151
-rw-r--r--lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb107
-rw-r--r--lib/bundler/vendor/thor/lib/thor/error.rb106
-rw-r--r--lib/bundler/vendor/thor/lib/thor/group.rb292
-rw-r--r--lib/bundler/vendor/thor/lib/thor/invocation.rb178
-rw-r--r--lib/bundler/vendor/thor/lib/thor/line_editor.rb17
-rw-r--r--lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb37
-rw-r--r--lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb88
-rw-r--r--lib/bundler/vendor/thor/lib/thor/nested_context.rb29
-rw-r--r--lib/bundler/vendor/thor/lib/thor/parser.rb4
-rw-r--r--lib/bundler/vendor/thor/lib/thor/parser/argument.rb86
-rw-r--r--lib/bundler/vendor/thor/lib/thor/parser/arguments.rb195
-rw-r--r--lib/bundler/vendor/thor/lib/thor/parser/option.rb178
-rw-r--r--lib/bundler/vendor/thor/lib/thor/parser/options.rb294
-rw-r--r--lib/bundler/vendor/thor/lib/thor/rake_compat.rb72
-rw-r--r--lib/bundler/vendor/thor/lib/thor/runner.rb335
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell.rb81
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell/basic.rb384
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell/color.rb112
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb29
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell/html.rb81
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb118
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell/terminal.rb42
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb38
-rw-r--r--lib/bundler/vendor/thor/lib/thor/util.rb285
-rw-r--r--lib/bundler/vendor/thor/lib/thor/version.rb3
-rw-r--r--lib/bundler/vendor/tsort/lib/tsort.rb455
-rw-r--r--lib/bundler/vendor/uri/lib/uri.rb104
-rw-r--r--lib/bundler/vendor/uri/lib/uri/common.rb922
-rw-r--r--lib/bundler/vendor/uri/lib/uri/file.rb100
-rw-r--r--lib/bundler/vendor/uri/lib/uri/ftp.rb267
-rw-r--r--lib/bundler/vendor/uri/lib/uri/generic.rb1592
-rw-r--r--lib/bundler/vendor/uri/lib/uri/http.rb137
-rw-r--r--lib/bundler/vendor/uri/lib/uri/https.rb23
-rw-r--r--lib/bundler/vendor/uri/lib/uri/ldap.rb261
-rw-r--r--lib/bundler/vendor/uri/lib/uri/ldaps.rb22
-rw-r--r--lib/bundler/vendor/uri/lib/uri/mailto.rb293
-rw-r--r--lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb547
-rw-r--r--lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb206
-rw-r--r--lib/bundler/vendor/uri/lib/uri/version.rb6
-rw-r--r--lib/bundler/vendor/uri/lib/uri/ws.rb83
-rw-r--r--lib/bundler/vendor/uri/lib/uri/wss.rb23
-rw-r--r--lib/bundler/vendored_fileutils.rb4
-rw-r--r--lib/bundler/vendored_net_http.rb23
-rw-r--r--lib/bundler/vendored_persistent.rb11
-rw-r--r--lib/bundler/vendored_pub_grub.rb4
-rw-r--r--lib/bundler/vendored_securerandom.rb12
-rw-r--r--lib/bundler/vendored_thor.rb8
-rw-r--r--lib/bundler/vendored_timeout.rb12
-rw-r--r--lib/bundler/vendored_tsort.rb4
-rw-r--r--lib/bundler/vendored_uri.rb21
-rw-r--r--lib/bundler/version.rb21
-rw-r--r--lib/bundler/vlad.rb4
-rw-r--r--lib/bundler/worker.rb117
-rw-r--r--lib/bundler/yaml_serializer.rb98
-rw-r--r--lib/cgi.rb301
-rw-r--r--lib/cgi/cookie.rb188
-rw-r--r--lib/cgi/core.rb881
-rw-r--r--lib/cgi/escape.rb232
-rw-r--r--lib/cgi/html.rb1035
-rw-r--r--lib/cgi/session.rb534
-rw-r--r--lib/cgi/session/pstore.rb101
-rw-r--r--lib/cgi/util.rb205
-rw-r--r--lib/cmath.rb435
-rw-r--r--lib/csv.rb2369
-rw-r--r--lib/debug.rb1111
-rw-r--r--lib/delegate.gemspec29
-rw-r--r--lib/delegate.rb177
-rw-r--r--lib/did_you_mean.rb131
-rw-r--r--lib/did_you_mean/core_ext/name_error.rb57
-rw-r--r--lib/did_you_mean/did_you_mean.gemspec25
-rw-r--r--lib/did_you_mean/experimental.rb2
-rw-r--r--lib/did_you_mean/formatter.rb44
-rw-r--r--lib/did_you_mean/formatters/plain_formatter.rb4
-rw-r--r--lib/did_you_mean/formatters/verbose_formatter.rb10
-rw-r--r--lib/did_you_mean/jaro_winkler.rb84
-rw-r--r--lib/did_you_mean/levenshtein.rb57
-rw-r--r--lib/did_you_mean/spell_checker.rb46
-rw-r--r--lib/did_you_mean/spell_checkers/key_error_checker.rb28
-rw-r--r--lib/did_you_mean/spell_checkers/method_name_checker.rb79
-rw-r--r--lib/did_you_mean/spell_checkers/name_error_checkers.rb20
-rw-r--r--lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb49
-rw-r--r--lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb85
-rw-r--r--lib/did_you_mean/spell_checkers/null_checker.rb6
-rw-r--r--lib/did_you_mean/spell_checkers/pattern_key_name_checker.rb28
-rw-r--r--lib/did_you_mean/spell_checkers/require_path_checker.rb39
-rw-r--r--lib/did_you_mean/tree_spell_checker.rb109
-rw-r--r--lib/did_you_mean/verbose.rb2
-rw-r--r--lib/did_you_mean/version.rb3
-rw-r--r--lib/drb.rb3
-rw-r--r--lib/drb/acl.rb233
-rw-r--r--lib/drb/drb.rb1864
-rw-r--r--lib/drb/eq.rb15
-rw-r--r--lib/drb/extserv.rb44
-rw-r--r--lib/drb/extservm.rb94
-rw-r--r--lib/drb/gw.rb161
-rw-r--r--lib/drb/invokemethod.rb35
-rw-r--r--lib/drb/observer.rb26
-rw-r--r--lib/drb/ssl.rb346
-rw-r--r--lib/drb/timeridconv.rb102
-rw-r--r--lib/drb/unix.rb118
-rw-r--r--lib/e2mmap.rb173
-rw-r--r--lib/erb.rb1907
-rw-r--r--lib/erb/compiler.rb487
-rw-r--r--lib/erb/def_method.rb47
-rw-r--r--lib/erb/erb.gemspec37
-rw-r--r--lib/erb/util.rb77
-rw-r--r--lib/erb/version.rb5
-rw-r--r--lib/error_highlight.rb2
-rw-r--r--lib/error_highlight/base.rb938
-rw-r--r--lib/error_highlight/core_ext.rb76
-rw-r--r--lib/error_highlight/error_highlight.gemspec27
-rw-r--r--lib/error_highlight/formatter.rb74
-rw-r--r--lib/error_highlight/version.rb3
-rw-r--r--lib/fileutils.gemspec31
-rw-r--r--lib/fileutils.rb2293
-rw-r--r--lib/find.gemspec29
-rw-r--r--lib/find.rb20
-rw-r--r--lib/forwardable.rb152
-rw-r--r--lib/forwardable/forwardable.gemspec26
-rw-r--r--lib/getoptlong.rb613
-rw-r--r--lib/ipaddr.gemspec36
-rw-r--r--lib/ipaddr.rb336
-rw-r--r--lib/irb.rb703
-rw-r--r--lib/irb/cmd/chws.rb34
-rw-r--r--lib/irb/cmd/fork.rb39
-rw-r--r--lib/irb/cmd/help.rb42
-rw-r--r--lib/irb/cmd/load.rb67
-rw-r--r--lib/irb/cmd/nop.rb39
-rw-r--r--lib/irb/cmd/pushws.rb41
-rw-r--r--lib/irb/cmd/subirb.rb43
-rw-r--r--lib/irb/completion.rb228
-rw-r--r--lib/irb/context.rb420
-rw-r--r--lib/irb/ext/change-ws.rb46
-rw-r--r--lib/irb/ext/history.rb119
-rw-r--r--lib/irb/ext/loader.rb129
-rw-r--r--lib/irb/ext/math-mode.rb48
-rw-r--r--lib/irb/ext/multi-irb.rb266
-rw-r--r--lib/irb/ext/save-history.rb104
-rw-r--r--lib/irb/ext/tracer.rb72
-rw-r--r--lib/irb/ext/use-loader.rb74
-rw-r--r--lib/irb/ext/workspaces.rb67
-rw-r--r--lib/irb/extend-command.rb309
-rw-r--r--lib/irb/frame.rb81
-rw-r--r--lib/irb/help.rb37
-rw-r--r--lib/irb/init.rb305
-rw-r--r--lib/irb/input-method.rb192
-rw-r--r--lib/irb/inspector.rb132
-rw-r--r--lib/irb/lc/.document4
-rw-r--r--lib/irb/lc/error.rb32
-rw-r--r--lib/irb/lc/help-message50
-rw-r--r--lib/irb/lc/ja/encoding_aliases.rb11
-rw-r--r--lib/irb/lc/ja/error.rb31
-rw-r--r--lib/irb/lc/ja/help-message53
-rw-r--r--lib/irb/locale.rb182
-rw-r--r--lib/irb/magic-file.rb38
-rw-r--r--lib/irb/notifier.rb232
-rw-r--r--lib/irb/output-method.rb92
-rw-r--r--lib/irb/ruby-lex.rb1171
-rw-r--r--lib/irb/ruby-token.rb267
-rw-r--r--lib/irb/slex.rb282
-rw-r--r--lib/irb/src_encoding.rb5
-rw-r--r--lib/irb/version.rb16
-rw-r--r--lib/irb/workspace.rb115
-rw-r--r--lib/irb/ws-for-case-2.rb15
-rw-r--r--lib/irb/xmp.rb170
-rw-r--r--lib/logger.rb812
-rw-r--r--lib/mathn.rb192
-rw-r--r--lib/matrix.rb2172
-rw-r--r--lib/matrix/eigenvalue_decomposition.rb883
-rw-r--r--lib/matrix/lup_decomposition.rb219
-rw-r--r--lib/mkmf.rb860
-rw-r--r--lib/monitor.rb303
-rw-r--r--lib/mutex_m.rb112
-rw-r--r--lib/net/ftp.rb1321
-rw-r--r--lib/net/http.rb2489
-rw-r--r--lib/net/http/backward.rb26
-rw-r--r--lib/net/http/exceptions.rb55
-rw-r--r--lib/net/http/generic_request.rb168
-rw-r--r--lib/net/http/header.rb865
-rw-r--r--lib/net/http/net-http.gemspec39
-rw-r--r--lib/net/http/proxy_delta.rb2
-rw-r--r--lib/net/http/request.rb79
-rw-r--r--lib/net/http/requests.rb373
-rw-r--r--lib/net/http/response.rb390
-rw-r--r--lib/net/http/responses.rb1386
-rw-r--r--lib/net/http/status.rb84
-rw-r--r--lib/net/https.rb4
-rw-r--r--lib/net/imap.rb3647
-rw-r--r--lib/net/net-protocol.gemspec33
-rw-r--r--lib/net/pop.rb1022
-rw-r--r--lib/net/protocol.rb225
-rw-r--r--lib/net/smtp.rb1074
-rw-r--r--lib/observer.rb204
-rw-r--r--lib/open-uri.gemspec32
-rw-r--r--lib/open-uri.rb176
-rw-r--r--lib/open3.rb1433
-rw-r--r--lib/open3/open3.gemspec33
-rw-r--r--lib/open3/version.rb4
-rw-r--r--lib/optparse.rb955
-rw-r--r--lib/optparse/ac.rb25
-rw-r--r--lib/optparse/date.rb2
-rw-r--r--lib/optparse/kwargs.rb27
-rw-r--r--lib/optparse/optparse.gemspec34
-rw-r--r--lib/optparse/shellwords.rb2
-rw-r--r--lib/optparse/time.rb2
-rw-r--r--lib/optparse/uri.rb2
-rw-r--r--lib/optparse/version.rb9
-rw-r--r--lib/ostruct.rb324
-rw-r--r--lib/pathname.rb74
-rw-r--r--lib/pp.gemspec35
-rw-r--r--lib/pp.rb340
-rw-r--r--lib/prettyprint.gemspec29
-rw-r--r--lib/prettyprint.rb13
-rw-r--r--lib/prime.rb466
-rw-r--r--lib/prism.rb111
-rw-r--r--lib/prism/desugar_compiler.rb392
-rw-r--r--lib/prism/ffi.rb578
-rw-r--r--lib/prism/lex_compat.rb865
-rw-r--r--lib/prism/lex_ripper.rb64
-rw-r--r--lib/prism/node_ext.rb511
-rw-r--r--lib/prism/pack.rb230
-rw-r--r--lib/prism/parse_result.rb907
-rw-r--r--lib/prism/parse_result/comments.rb188
-rw-r--r--lib/prism/parse_result/errors.rb66
-rw-r--r--lib/prism/parse_result/newlines.rb155
-rw-r--r--lib/prism/pattern.rb269
-rw-r--r--lib/prism/polyfill/append_as_bytes.rb15
-rw-r--r--lib/prism/polyfill/byteindex.rb13
-rw-r--r--lib/prism/polyfill/scan_byte.rb14
-rw-r--r--lib/prism/polyfill/unpack1.rb14
-rw-r--r--lib/prism/polyfill/warn.rb36
-rw-r--r--lib/prism/prism.gemspec173
-rw-r--r--lib/prism/relocation.rb505
-rw-r--r--lib/prism/string_query.rb31
-rw-r--r--lib/prism/translation.rb18
-rw-r--r--lib/prism/translation/parser.rb376
-rw-r--r--lib/prism/translation/parser/builder.rb62
-rw-r--r--lib/prism/translation/parser/compiler.rb2234
-rw-r--r--lib/prism/translation/parser/lexer.rb820
-rw-r--r--lib/prism/translation/parser_current.rb26
-rw-r--r--lib/prism/translation/parser_versions.rb36
-rw-r--r--lib/prism/translation/ripper.rb3511
-rw-r--r--lib/prism/translation/ripper/filter.rb53
-rw-r--r--lib/prism/translation/ripper/lexer.rb128
-rw-r--r--lib/prism/translation/ripper/sexp.rb126
-rw-r--r--lib/prism/translation/ripper/shim.rb5
-rw-r--r--lib/prism/translation/ruby_parser.rb1964
-rw-r--r--lib/profile.rb11
-rw-r--r--lib/profiler.rb149
-rw-r--r--lib/pstore.rb485
-rw-r--r--lib/racc/parser.rb623
-rw-r--r--lib/racc/rdoc/grammar.en.rdoc219
-rw-r--r--lib/random/formatter.rb372
-rw-r--r--lib/rbconfig/.document1
-rw-r--r--lib/rbconfig/datadir.rb14
-rw-r--r--lib/rdoc.rb188
-rw-r--r--lib/rdoc/alias.rb112
-rw-r--r--lib/rdoc/anon_class.rb11
-rw-r--r--lib/rdoc/any_method.rb317
-rw-r--r--lib/rdoc/attr.rb176
-rw-r--r--lib/rdoc/class_module.rb800
-rw-r--r--lib/rdoc/code_object.rb430
-rw-r--r--lib/rdoc/code_objects.rb6
-rw-r--r--lib/rdoc/comment.rb230
-rw-r--r--lib/rdoc/constant.rb187
-rw-r--r--lib/rdoc/context.rb1212
-rw-r--r--lib/rdoc/context/section.rb239
-rw-r--r--lib/rdoc/cross_reference.rb184
-rw-r--r--lib/rdoc/encoding.rb100
-rw-r--r--lib/rdoc/erb_partial.rb19
-rw-r--r--lib/rdoc/erbio.rb38
-rw-r--r--lib/rdoc/extend.rb10
-rw-r--r--lib/rdoc/generator.rb52
-rw-r--r--lib/rdoc/generator/darkfish.rb761
-rw-r--r--lib/rdoc/generator/json_index.rb298
-rw-r--r--lib/rdoc/generator/markup.rb170
-rw-r--r--lib/rdoc/generator/pot.rb98
-rw-r--r--lib/rdoc/generator/pot/message_extractor.rb68
-rw-r--r--lib/rdoc/generator/pot/po.rb84
-rw-r--r--lib/rdoc/generator/pot/po_entry.rb141
-rw-r--r--lib/rdoc/generator/ri.rb31
-rw-r--r--lib/rdoc/generator/template/darkfish/_footer.rhtml5
-rw-r--r--lib/rdoc/generator/template/darkfish/_head.rhtml19
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml19
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml9
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml15
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml9
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml15
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml15
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml12
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml11
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml12
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml11
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml14
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml11
-rw-r--r--lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml18
-rw-r--r--lib/rdoc/generator/template/darkfish/class.rhtml174
-rw-r--r--lib/rdoc/generator/template/darkfish/css/fonts.css167
-rw-r--r--lib/rdoc/generator/template/darkfish/css/rdoc.css590
-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttfbin94668 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttfbin94196 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttfbin96184 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttfbin95316 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttfbin71200 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttfbin71692 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/add.pngbin733 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/arrow_up.pngbin372 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/brick.pngbin452 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/brick_link.pngbin764 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/bug.pngbin774 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/bullet_black.pngbin211 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.pngbin207 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.pngbin209 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/date.pngbin626 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/delete.pngbin715 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/find.pngbin659 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/loadingAnimation.gifbin5886 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/macFFBgHack.pngbin207 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/package.pngbin853 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/page_green.pngbin621 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/page_white_text.pngbin342 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/page_white_width.pngbin309 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/plugin.pngbin591 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/ruby.pngbin592 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/tag_blue.pngbin1880 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/tag_green.pngbin613 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/transparent.pngbin97 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/wrench.pngbin610 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/wrench_orange.pngbin584 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/images/zoom.pngbin692 -> 0 bytes
-rw-r--r--lib/rdoc/generator/template/darkfish/index.rhtml23
-rw-r--r--lib/rdoc/generator/template/darkfish/js/darkfish.js161
-rw-r--r--lib/rdoc/generator/template/darkfish/js/jquery.js4
-rw-r--r--lib/rdoc/generator/template/darkfish/js/search.js109
-rw-r--r--lib/rdoc/generator/template/darkfish/page.rhtml18
-rw-r--r--lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml18
-rw-r--r--lib/rdoc/generator/template/darkfish/servlet_root.rhtml63
-rw-r--r--lib/rdoc/generator/template/darkfish/table_of_contents.rhtml58
-rw-r--r--lib/rdoc/generator/template/json_index/.document1
-rw-r--r--lib/rdoc/generator/template/json_index/js/navigation.js142
-rw-r--r--lib/rdoc/generator/template/json_index/js/searcher.js228
-rw-r--r--lib/rdoc/ghost_method.rb7
-rw-r--r--lib/rdoc/i18n.rb10
-rw-r--r--lib/rdoc/i18n/locale.rb102
-rw-r--r--lib/rdoc/i18n/text.rb126
-rw-r--r--lib/rdoc/include.rb10
-rw-r--r--lib/rdoc/known_classes.rb73
-rw-r--r--lib/rdoc/markdown.rb16134
-rw-r--r--lib/rdoc/markdown/entities.rb2132
-rw-r--r--lib/rdoc/markdown/literals_1_9.rb421
-rw-r--r--lib/rdoc/markup.rb870
-rw-r--r--lib/rdoc/markup/attr_changer.rb23
-rw-r--r--lib/rdoc/markup/attr_span.rb30
-rw-r--r--lib/rdoc/markup/attribute_manager.rb344
-rw-r--r--lib/rdoc/markup/attributes.rb71
-rw-r--r--lib/rdoc/markup/blank_line.rb28
-rw-r--r--lib/rdoc/markup/block_quote.rb15
-rw-r--r--lib/rdoc/markup/document.rb165
-rw-r--r--lib/rdoc/markup/formatter.rb265
-rw-r--r--lib/rdoc/markup/formatter_test_case.rb768
-rw-r--r--lib/rdoc/markup/hard_break.rb32
-rw-r--r--lib/rdoc/markup/heading.rb79
-rw-r--r--lib/rdoc/markup/include.rb43
-rw-r--r--lib/rdoc/markup/indented_paragraph.rb48
-rw-r--r--lib/rdoc/markup/inline.rb2
-rw-r--r--lib/rdoc/markup/list.rb102
-rw-r--r--lib/rdoc/markup/list_item.rb100
-rw-r--r--lib/rdoc/markup/paragraph.rb29
-rw-r--r--lib/rdoc/markup/parser.rb559
-rw-r--r--lib/rdoc/markup/pre_process.rb294
-rw-r--r--lib/rdoc/markup/raw.rb70
-rw-r--r--lib/rdoc/markup/rule.rb21
-rw-r--r--lib/rdoc/markup/special.rb41
-rw-r--r--lib/rdoc/markup/text_formatter_test_case.rb115
-rw-r--r--lib/rdoc/markup/to_ansi.rb94
-rw-r--r--lib/rdoc/markup/to_bs.rb79
-rw-r--r--lib/rdoc/markup/to_html.rb399
-rw-r--r--lib/rdoc/markup/to_html_crossref.rb161
-rw-r--r--lib/rdoc/markup/to_html_snippet.rb285
-rw-r--r--lib/rdoc/markup/to_joined_paragraph.rb72
-rw-r--r--lib/rdoc/markup/to_label.rb75
-rw-r--r--lib/rdoc/markup/to_markdown.rb192
-rw-r--r--lib/rdoc/markup/to_rdoc.rb334
-rw-r--r--lib/rdoc/markup/to_table_of_contents.rb88
-rw-r--r--lib/rdoc/markup/to_test.rb70
-rw-r--r--lib/rdoc/markup/to_tt_only.rb121
-rw-r--r--lib/rdoc/markup/verbatim.rb84
-rw-r--r--lib/rdoc/meta_method.rb7
-rw-r--r--lib/rdoc/method_attr.rb419
-rw-r--r--lib/rdoc/mixin.rb121
-rw-r--r--lib/rdoc/normal_class.rb93
-rw-r--r--lib/rdoc/normal_module.rb74
-rw-r--r--lib/rdoc/options.rb1252
-rw-r--r--lib/rdoc/parser.rb311
-rw-r--r--lib/rdoc/parser/c.rb1230
-rw-r--r--lib/rdoc/parser/changelog.rb199
-rw-r--r--lib/rdoc/parser/markdown.rb24
-rw-r--r--lib/rdoc/parser/rd.rb23
-rw-r--r--lib/rdoc/parser/ruby.rb2161
-rw-r--r--lib/rdoc/parser/ruby_tools.rb168
-rw-r--r--lib/rdoc/parser/simple.rb62
-rw-r--r--lib/rdoc/parser/text.rb12
-rw-r--r--lib/rdoc/rd.rb100
-rw-r--r--lib/rdoc/rd/block_parser.rb1056
-rw-r--r--lib/rdoc/rd/inline.rb72
-rw-r--r--lib/rdoc/rd/inline_parser.rb1208
-rw-r--r--lib/rdoc/rdoc.gemspec7
-rw-r--r--lib/rdoc/rdoc.rb575
-rw-r--r--lib/rdoc/require.rb52
-rw-r--r--lib/rdoc/ri.rb21
-rw-r--r--lib/rdoc/ri/driver.rb1498
-rw-r--r--lib/rdoc/ri/formatter.rb6
-rw-r--r--lib/rdoc/ri/paths.rb188
-rw-r--r--lib/rdoc/ri/store.rb7
-rw-r--r--lib/rdoc/ri/task.rb72
-rw-r--r--lib/rdoc/ruby_lex.rb1378
-rw-r--r--lib/rdoc/ruby_token.rb461
-rw-r--r--lib/rdoc/rubygems_hook.rb254
-rw-r--r--lib/rdoc/servlet.rb442
-rw-r--r--lib/rdoc/single_class.rb26
-rw-r--r--lib/rdoc/stats.rb462
-rw-r--r--lib/rdoc/stats/normal.rb60
-rw-r--r--lib/rdoc/stats/quiet.rb60
-rw-r--r--lib/rdoc/stats/verbose.rb46
-rw-r--r--lib/rdoc/store.rb980
-rw-r--r--lib/rdoc/task.rb331
-rw-r--r--lib/rdoc/test_case.rb218
-rw-r--r--lib/rdoc/text.rb324
-rw-r--r--lib/rdoc/token_stream.rb96
-rw-r--r--lib/rdoc/tom_doc.rb258
-rw-r--r--lib/rdoc/top_level.rb283
-rw-r--r--lib/resolv-replace.rb76
-rw-r--r--lib/resolv.gemspec29
-rw-r--r--lib/resolv.rb994
-rw-r--r--lib/rexml/attlistdecl.rb63
-rw-r--r--lib/rexml/attribute.rb192
-rw-r--r--lib/rexml/cdata.rb68
-rw-r--r--lib/rexml/child.rb97
-rw-r--r--lib/rexml/comment.rb80
-rw-r--r--lib/rexml/doctype.rb270
-rw-r--r--lib/rexml/document.rb291
-rw-r--r--lib/rexml/dtd/attlistdecl.rb11
-rw-r--r--lib/rexml/dtd/dtd.rb47
-rw-r--r--lib/rexml/dtd/elementdecl.rb18
-rw-r--r--lib/rexml/dtd/entitydecl.rb57
-rw-r--r--lib/rexml/dtd/notationdecl.rb40
-rw-r--r--lib/rexml/element.rb1241
-rw-r--r--lib/rexml/encoding.rb51
-rw-r--r--lib/rexml/entity.rb174
-rw-r--r--lib/rexml/formatters/default.rb112
-rw-r--r--lib/rexml/formatters/pretty.rb142
-rw-r--r--lib/rexml/formatters/transitive.rb58
-rw-r--r--lib/rexml/functions.rb395
-rw-r--r--lib/rexml/instruction.rb71
-rw-r--r--lib/rexml/light/node.rb196
-rw-r--r--lib/rexml/namespace.rb48
-rw-r--r--lib/rexml/node.rb76
-rw-r--r--lib/rexml/output.rb30
-rw-r--r--lib/rexml/parent.rb166
-rw-r--r--lib/rexml/parseexception.rb52
-rw-r--r--lib/rexml/parsers/baseparser.rb533
-rw-r--r--lib/rexml/parsers/lightparser.rb59
-rw-r--r--lib/rexml/parsers/pullparser.rb197
-rw-r--r--lib/rexml/parsers/sax2parser.rb273
-rw-r--r--lib/rexml/parsers/streamparser.rb53
-rw-r--r--lib/rexml/parsers/treeparser.rb101
-rw-r--r--lib/rexml/parsers/ultralightparser.rb57
-rw-r--r--lib/rexml/parsers/xpathparser.rb657
-rw-r--r--lib/rexml/quickpath.rb266
-rw-r--r--lib/rexml/rexml.rb32
-rw-r--r--lib/rexml/sax2listener.rb98
-rw-r--r--lib/rexml/security.rb28
-rw-r--r--lib/rexml/source.rb297
-rw-r--r--lib/rexml/streamlistener.rb93
-rw-r--r--lib/rexml/syncenumerator.rb33
-rw-r--r--lib/rexml/text.rb426
-rw-r--r--lib/rexml/undefinednamespaceexception.rb9
-rw-r--r--lib/rexml/validation/relaxng.rb539
-rw-r--r--lib/rexml/validation/validation.rb144
-rw-r--r--lib/rexml/validation/validationexception.rb10
-rw-r--r--lib/rexml/xmldecl.rb116
-rw-r--r--lib/rexml/xmltokens.rb85
-rw-r--r--lib/rexml/xpath.rb81
-rw-r--r--lib/rexml/xpath_parser.rb704
-rw-r--r--lib/rinda/rinda.rb328
-rw-r--r--lib/rinda/ring.rb481
-rw-r--r--lib/rinda/tuplespace.rb642
-rw-r--r--lib/rss.rb92
-rw-r--r--lib/rss/0.9.rb462
-rw-r--r--lib/rss/1.0.rb485
-rw-r--r--lib/rss/2.0.rb143
-rw-r--r--lib/rss/atom.rb840
-rw-r--r--lib/rss/content.rb34
-rw-r--r--lib/rss/content/1.0.rb10
-rw-r--r--lib/rss/content/2.0.rb12
-rw-r--r--lib/rss/converter.rb171
-rw-r--r--lib/rss/dublincore.rb164
-rw-r--r--lib/rss/dublincore/1.0.rb13
-rw-r--r--lib/rss/dublincore/2.0.rb13
-rw-r--r--lib/rss/dublincore/atom.rb17
-rw-r--r--lib/rss/image.rb198
-rw-r--r--lib/rss/itunes.rb413
-rw-r--r--lib/rss/maker.rb79
-rw-r--r--lib/rss/maker/0.9.rb509
-rw-r--r--lib/rss/maker/1.0.rb436
-rw-r--r--lib/rss/maker/2.0.rb224
-rw-r--r--lib/rss/maker/atom.rb173
-rw-r--r--lib/rss/maker/base.rb945
-rw-r--r--lib/rss/maker/content.rb22
-rw-r--r--lib/rss/maker/dublincore.rb122
-rw-r--r--lib/rss/maker/entry.rb164
-rw-r--r--lib/rss/maker/feed.rb427
-rw-r--r--lib/rss/maker/image.rb112
-rw-r--r--lib/rss/maker/itunes.rb243
-rw-r--r--lib/rss/maker/slash.rb34
-rw-r--r--lib/rss/maker/syndication.rb19
-rw-r--r--lib/rss/maker/taxonomy.rb119
-rw-r--r--lib/rss/maker/trackback.rb62
-rw-r--r--lib/rss/parser.rb571
-rw-r--r--lib/rss/rexmlparser.rb50
-rw-r--r--lib/rss/rss.rb1353
-rw-r--r--lib/rss/slash.rb52
-rw-r--r--lib/rss/syndication.rb69
-rw-r--r--lib/rss/taxonomy.rb148
-rw-r--r--lib/rss/trackback.rb291
-rw-r--r--lib/rss/utils.rb200
-rw-r--r--lib/rss/xml-stylesheet.rb106
-rw-r--r--lib/rss/xml.rb72
-rw-r--r--lib/rss/xmlparser.rb95
-rw-r--r--lib/rss/xmlscanner.rb122
-rw-r--r--lib/ruby2_keywords.gemspec23
-rw-r--r--lib/rubygems.rb950
-rw-r--r--lib/rubygems/LICENSE.txt54
-rw-r--r--lib/rubygems/available_set.rb26
-rw-r--r--lib/rubygems/basic_specification.rb201
-rw-r--r--lib/rubygems/bundler_version_finder.rb112
-rw-r--r--lib/rubygems/ci_detector.rb75
-rw-r--r--lib/rubygems/command.rb225
-rw-r--r--lib/rubygems/command_manager.rb109
-rw-r--r--lib/rubygems/commands/build_command.rb91
-rw-r--r--lib/rubygems/commands/cert_command.rb216
-rw-r--r--lib/rubygems/commands/check_command.rb59
-rw-r--r--lib/rubygems/commands/cleanup_command.rb106
-rw-r--r--lib/rubygems/commands/contents_command.rb95
-rw-r--r--lib/rubygems/commands/dependency_command.rb124
-rw-r--r--lib/rubygems/commands/environment_command.rb60
-rw-r--r--lib/rubygems/commands/exec_command.rb256
-rw-r--r--lib/rubygems/commands/fetch_command.rb71
-rw-r--r--lib/rubygems/commands/generate_index_command.rb116
-rw-r--r--lib/rubygems/commands/help_command.rb50
-rw-r--r--lib/rubygems/commands/info_command.rb38
-rw-r--r--lib/rubygems/commands/install_command.rb209
-rw-r--r--lib/rubygems/commands/list_command.rb21
-rw-r--r--lib/rubygems/commands/lock_command.rb28
-rw-r--r--lib/rubygems/commands/mirror_command.rb10
-rw-r--r--lib/rubygems/commands/open_command.rb56
-rw-r--r--lib/rubygems/commands/outdated_command.rb14
-rw-r--r--lib/rubygems/commands/owner_command.rb80
-rw-r--r--lib/rubygems/commands/pristine_command.rb198
-rw-r--r--lib/rubygems/commands/push_command.rb128
-rw-r--r--lib/rubygems/commands/query_command.rb344
-rw-r--r--lib/rubygems/commands/rdoc_command.rb71
-rw-r--r--lib/rubygems/commands/rebuild_command.rb261
-rw-r--r--lib/rubygems/commands/search_command.rb20
-rw-r--r--lib/rubygems/commands/server_command.rb97
-rw-r--r--lib/rubygems/commands/setup_command.rb571
-rw-r--r--lib/rubygems/commands/signin_command.rb34
-rw-r--r--lib/rubygems/commands/signout_command.rb32
-rw-r--r--lib/rubygems/commands/sources_command.rb230
-rw-r--r--lib/rubygems/commands/specification_command.rb68
-rw-r--r--lib/rubygems/commands/stale_command.rb13
-rw-r--r--lib/rubygems/commands/uninstall_command.rb167
-rw-r--r--lib/rubygems/commands/unpack_command.rb105
-rw-r--r--lib/rubygems/commands/update_command.rb246
-rw-r--r--lib/rubygems/commands/which_command.rb33
-rw-r--r--lib/rubygems/commands/yank_command.rb75
-rw-r--r--lib/rubygems/compatibility.rb60
-rw-r--r--lib/rubygems/config_file.rb392
-rw-r--r--lib/rubygems/core_ext/kernel_gem.rb28
-rw-r--r--[-rwxr-xr-x]lib/rubygems/core_ext/kernel_require.rb192
-rw-r--r--lib/rubygems/core_ext/kernel_warn.rb45
-rw-r--r--lib/rubygems/core_ext/tcpsocket_init.rb54
-rw-r--r--lib/rubygems/defaults.rb244
-rw-r--r--lib/rubygems/dependency.rb138
-rw-r--r--lib/rubygems/dependency_installer.rb359
-rw-r--r--lib/rubygems/dependency_list.rb68
-rw-r--r--lib/rubygems/deprecate.rb220
-rw-r--r--lib/rubygems/doctor.rb64
-rw-r--r--lib/rubygems/errors.rb67
-rw-r--r--lib/rubygems/exceptions.rb106
-rw-r--r--lib/rubygems/ext.rb17
-rw-r--r--lib/rubygems/ext/build_error.rb6
-rw-r--r--lib/rubygems/ext/builder.rb208
-rw-r--r--lib/rubygems/ext/cargo_builder.rb350
-rw-r--r--lib/rubygems/ext/cargo_builder/link_flag_converter.rb27
-rw-r--r--lib/rubygems/ext/cmake_builder.rb109
-rw-r--r--lib/rubygems/ext/configure_builder.rb20
-rw-r--r--lib/rubygems/ext/ext_conf_builder.rb115
-rw-r--r--lib/rubygems/ext/rake_builder.rb42
-rw-r--r--lib/rubygems/gem_runner.rb50
-rw-r--r--lib/rubygems/gemcutter_utilities.rb338
-rw-r--r--lib/rubygems/gemcutter_utilities/webauthn_listener.rb112
-rw-r--r--lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb163
-rw-r--r--lib/rubygems/gemcutter_utilities/webauthn_poller.rb80
-rw-r--r--lib/rubygems/gemspec_helpers.rb19
-rw-r--r--lib/rubygems/indexer.rb434
-rw-r--r--lib/rubygems/install_default_message.rb13
-rw-r--r--lib/rubygems/install_message.rb8
-rw-r--r--lib/rubygems/install_update_options.rb223
-rw-r--r--lib/rubygems/installer.rb692
-rw-r--r--lib/rubygems/installer_test_case.rb194
-rw-r--r--lib/rubygems/installer_uninstaller_utils.rb27
-rw-r--r--lib/rubygems/local_remote_options.rb71
-rw-r--r--lib/rubygems/mock_gem_ui.rb89
-rw-r--r--lib/rubygems/name_tuple.rb49
-rw-r--r--lib/rubygems/openssl.rb7
-rw-r--r--lib/rubygems/package.rb426
-rw-r--r--lib/rubygems/package/digest_io.rb14
-rw-r--r--lib/rubygems/package/file_source.rb16
-rw-r--r--lib/rubygems/package/io_source.rb12
-rw-r--r--lib/rubygems/package/old.rb56
-rw-r--r--lib/rubygems/package/source.rb4
-rw-r--r--lib/rubygems/package/tar_header.rb239
-rw-r--r--lib/rubygems/package/tar_reader.rb63
-rw-r--r--lib/rubygems/package/tar_reader/entry.rb144
-rw-r--r--lib/rubygems/package/tar_test_case.rb147
-rw-r--r--lib/rubygems/package/tar_writer.rb107
-rw-r--r--lib/rubygems/package_task.rb24
-rw-r--r--lib/rubygems/path_support.rb70
-rw-r--r--lib/rubygems/platform.rb364
-rw-r--r--lib/rubygems/psych_additions.rb10
-rw-r--r--lib/rubygems/psych_tree.rb13
-rw-r--r--lib/rubygems/query_utils.rb349
-rw-r--r--lib/rubygems/rdoc.rb339
-rw-r--r--lib/rubygems/remote_fetcher.rb297
-rw-r--r--lib/rubygems/request.rb176
-rw-r--r--lib/rubygems/request/connection_pools.rb62
-rw-r--r--lib/rubygems/request/http_pool.rb24
-rw-r--r--lib/rubygems/request/https_pool.rb7
-rw-r--r--lib/rubygems/request_set.rb200
-rw-r--r--lib/rubygems/request_set/gem_dependency_api.rb427
-rw-r--r--lib/rubygems/request_set/lockfile.rb76
-rw-r--r--lib/rubygems/request_set/lockfile/parser.rb88
-rw-r--r--lib/rubygems/request_set/lockfile/tokenizer.rb60
-rw-r--r--lib/rubygems/requirement.rb161
-rw-r--r--lib/rubygems/resolver.rb203
-rw-r--r--lib/rubygems/resolver/activation_request.rb109
-rw-r--r--lib/rubygems/resolver/api_set.rb81
-rw-r--r--lib/rubygems/resolver/api_set/gem_parser.rb21
-rw-r--r--lib/rubygems/resolver/api_specification.rb57
-rw-r--r--lib/rubygems/resolver/best_set.rb52
-rw-r--r--lib/rubygems/resolver/composed_set.rb26
-rw-r--r--lib/rubygems/resolver/conflict.rb56
-rw-r--r--lib/rubygems/resolver/current_set.rb8
-rw-r--r--lib/rubygems/resolver/dependency_request.rb19
-rw-r--r--lib/rubygems/resolver/git_set.rb19
-rw-r--r--lib/rubygems/resolver/git_specification.rb26
-rw-r--r--lib/rubygems/resolver/index_set.rb34
-rw-r--r--lib/rubygems/resolver/index_specification.rb55
-rw-r--r--lib/rubygems/resolver/installed_specification.rb22
-rw-r--r--lib/rubygems/resolver/installer_set.rb142
-rw-r--r--lib/rubygems/resolver/local_specification.rb14
-rw-r--r--lib/rubygems/resolver/lock_set.rb36
-rw-r--r--lib/rubygems/resolver/lock_specification.rb33
-rw-r--r--lib/rubygems/resolver/molinillo.rb2
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo.rb6
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb278
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb70
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb4
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb100
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb64
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb435
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb44
-rw-r--r--lib/rubygems/resolver/molinillo/lib/molinillo/state.rb52
-rw-r--r--lib/rubygems/resolver/requirement_list.rb6
-rw-r--r--lib/rubygems/resolver/set.rb10
-rw-r--r--lib/rubygems/resolver/source_set.rb47
-rw-r--r--lib/rubygems/resolver/spec_specification.rb27
-rw-r--r--lib/rubygems/resolver/specification.rb37
-rw-r--r--lib/rubygems/resolver/stats.rb3
-rw-r--r--lib/rubygems/resolver/vendor_set.rb16
-rw-r--r--lib/rubygems/resolver/vendor_specification.rb16
-rw-r--r--lib/rubygems/s3_uri_signer.rb226
-rw-r--r--lib/rubygems/safe_marshal.rb74
-rw-r--r--lib/rubygems/safe_marshal/elements.rb146
-rw-r--r--lib/rubygems/safe_marshal/reader.rb325
-rw-r--r--lib/rubygems/safe_marshal/visitors/stream_printer.rb31
-rw-r--r--lib/rubygems/safe_marshal/visitors/to_ruby.rb428
-rw-r--r--lib/rubygems/safe_marshal/visitors/visitor.rb74
-rw-r--r--lib/rubygems/safe_yaml.rb45
-rw-r--r--lib/rubygems/security.rb187
-rw-r--r--lib/rubygems/security/policies.rb102
-rw-r--r--lib/rubygems/security/policy.rb106
-rw-r--r--lib/rubygems/security/signer.rb117
-rw-r--r--lib/rubygems/security/trust_dir.rb48
-rw-r--r--lib/rubygems/security_option.rb43
-rw-r--r--lib/rubygems/server.rb869
-rw-r--r--lib/rubygems/source.rb190
-rw-r--r--lib/rubygems/source/git.rb101
-rw-r--r--lib/rubygems/source/installed.rb18
-rw-r--r--lib/rubygems/source/local.rb75
-rw-r--r--lib/rubygems/source/lock.rb22
-rw-r--r--lib/rubygems/source/specific_file.rb24
-rw-r--r--lib/rubygems/source/vendor.rb12
-rw-r--r--lib/rubygems/source_list.rb66
-rw-r--r--lib/rubygems/source_local.rb6
-rw-r--r--lib/rubygems/source_specific_file.rb5
-rw-r--r--lib/rubygems/spec_fetcher.rb188
-rw-r--r--lib/rubygems/specification.rb2104
-rw-r--r--lib/rubygems/specification_policy.rb522
-rw-r--r--lib/rubygems/specification_record.rb212
-rw-r--r--lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem25
-rw-r--r--lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem32
-rw-r--r--lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem14
-rw-r--r--lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem23
-rw-r--r--lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem28
-rw-r--r--lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem20
-rw-r--r--lib/rubygems/ssl_certs/rubygems.org/GlobalSign.pem21
-rw-r--r--lib/rubygems/stub_specification.rb138
-rw-r--r--lib/rubygems/syck_hack.rb77
-rw-r--r--lib/rubygems/target_rbconfig.rb50
-rw-r--r--lib/rubygems/test_case.rb1485
-rw-r--r--lib/rubygems/test_utilities.rb384
-rw-r--r--lib/rubygems/text.rb71
-rw-r--r--lib/rubygems/uninstaller.rb294
-rw-r--r--lib/rubygems/unknown_command_spell_checker.rb21
-rw-r--r--lib/rubygems/update_suggestion.rb56
-rw-r--r--lib/rubygems/uri.rb126
-rw-r--r--lib/rubygems/uri_formatter.rb14
-rw-r--r--lib/rubygems/user_interaction.rb249
-rw-r--r--lib/rubygems/util.rb137
-rw-r--r--lib/rubygems/util/atomic_file_writer.rb76
-rw-r--r--lib/rubygems/util/licenses.rb1157
-rw-r--r--lib/rubygems/util/list.rb37
-rw-r--r--lib/rubygems/validator.rb78
-rw-r--r--lib/rubygems/vendor/.document1
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo.rb11
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb57
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb88
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph.rb255
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/action.rb36
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb66
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb62
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb63
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb61
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/log.rb126
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb46
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb36
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb164
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/errors.rb149
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb6
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/modules/specification_provider.rb112
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/modules/ui.rb67
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb839
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/resolver.rb46
-rw-r--r--lib/rubygems/vendor/molinillo/lib/molinillo/state.rb58
-rw-r--r--lib/rubygems/vendor/net-http/lib/net/http.rb2608
-rw-r--r--lib/rubygems/vendor/net-http/lib/net/http/exceptions.rb35
-rw-r--r--lib/rubygems/vendor/net-http/lib/net/http/generic_request.rb429
-rw-r--r--lib/rubygems/vendor/net-http/lib/net/http/header.rb985
-rw-r--r--lib/rubygems/vendor/net-http/lib/net/http/proxy_delta.rb17
-rw-r--r--lib/rubygems/vendor/net-http/lib/net/http/request.rb88
-rw-r--r--lib/rubygems/vendor/net-http/lib/net/http/requests.rb444
-rw-r--r--lib/rubygems/vendor/net-http/lib/net/http/response.rb739
-rw-r--r--lib/rubygems/vendor/net-http/lib/net/http/responses.rb1242
-rw-r--r--lib/rubygems/vendor/net-http/lib/net/http/status.rb84
-rw-r--r--lib/rubygems/vendor/net-http/lib/net/https.rb23
-rw-r--r--lib/rubygems/vendor/net-protocol/lib/net/protocol.rb544
-rw-r--r--lib/rubygems/vendor/optparse/lib/optionparser.rb2
-rw-r--r--lib/rubygems/vendor/optparse/lib/optparse.rb2467
-rw-r--r--lib/rubygems/vendor/optparse/lib/optparse/ac.rb70
-rw-r--r--lib/rubygems/vendor/optparse/lib/optparse/date.rb18
-rw-r--r--lib/rubygems/vendor/optparse/lib/optparse/kwargs.rb27
-rw-r--r--lib/rubygems/vendor/optparse/lib/optparse/shellwords.rb7
-rw-r--r--lib/rubygems/vendor/optparse/lib/optparse/time.rb11
-rw-r--r--lib/rubygems/vendor/optparse/lib/optparse/uri.rb7
-rw-r--r--lib/rubygems/vendor/optparse/lib/optparse/version.rb80
-rw-r--r--lib/rubygems/vendor/resolv/lib/resolv.rb3483
-rw-r--r--lib/rubygems/vendor/securerandom/lib/securerandom.rb102
-rw-r--r--lib/rubygems/vendor/timeout/lib/timeout.rb201
-rw-r--r--lib/rubygems/vendor/tsort/lib/tsort.rb455
-rw-r--r--lib/rubygems/vendor/uri/lib/uri.rb104
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/common.rb922
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/file.rb100
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/ftp.rb267
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/generic.rb1592
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/http.rb137
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/https.rb23
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/ldap.rb261
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/ldaps.rb22
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/mailto.rb293
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb547
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb206
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/version.rb6
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/ws.rb83
-rw-r--r--lib/rubygems/vendor/uri/lib/uri/wss.rb23
-rw-r--r--lib/rubygems/vendored_molinillo.rb3
-rw-r--r--lib/rubygems/vendored_net_http.rb5
-rw-r--r--lib/rubygems/vendored_optparse.rb3
-rw-r--r--lib/rubygems/vendored_securerandom.rb3
-rw-r--r--lib/rubygems/vendored_timeout.rb5
-rw-r--r--lib/rubygems/vendored_tsort.rb3
-rw-r--r--lib/rubygems/version.rb206
-rw-r--r--lib/rubygems/version_option.rb38
-rw-r--r--lib/rubygems/win_platform.rb31
-rw-r--r--lib/rubygems/yaml_serializer.rb98
-rw-r--r--lib/scanf.rb776
-rw-r--r--lib/securerandom.gemspec35
-rw-r--r--lib/securerandom.rb270
-rw-r--r--lib/set.rb799
-rw-r--r--lib/set/subclass_compatible.rb347
-rw-r--r--lib/shell.rb459
-rw-r--r--lib/shell/builtin-command.rb147
-rw-r--r--lib/shell/command-processor.rb668
-rw-r--r--lib/shell/error.rb26
-rw-r--r--lib/shell/filter.rb138
-rw-r--r--lib/shell/process-controller.rb311
-rw-r--r--lib/shell/system-command.rb159
-rw-r--r--lib/shell/version.rb16
-rw-r--r--lib/shellwords.gemspec29
-rw-r--r--lib/shellwords.rb79
-rw-r--r--lib/singleton.gemspec30
-rw-r--r--lib/singleton.rb135
-rw-r--r--lib/sync.rb329
-rw-r--r--lib/syntax_suggest.rb3
-rw-r--r--lib/syntax_suggest/api.rb233
-rw-r--r--lib/syntax_suggest/around_block_scan.rb232
-rw-r--r--lib/syntax_suggest/block_expand.rb165
-rw-r--r--lib/syntax_suggest/capture/before_after_keyword_ends.rb85
-rw-r--r--lib/syntax_suggest/capture/falling_indent_lines.rb71
-rw-r--r--lib/syntax_suggest/capture_code_context.rb245
-rw-r--r--lib/syntax_suggest/clean_document.rb306
-rw-r--r--lib/syntax_suggest/cli.rb130
-rw-r--r--lib/syntax_suggest/code_block.rb100
-rw-r--r--lib/syntax_suggest/code_frontier.rb178
-rw-r--r--lib/syntax_suggest/code_line.rb244
-rw-r--r--lib/syntax_suggest/code_search.rb139
-rw-r--r--lib/syntax_suggest/core_ext.rb96
-rw-r--r--lib/syntax_suggest/display_code_with_line_numbers.rb70
-rw-r--r--lib/syntax_suggest/display_invalid_blocks.rb83
-rw-r--r--lib/syntax_suggest/explain_syntax.rb117
-rw-r--r--lib/syntax_suggest/left_right_lex_count.rb168
-rw-r--r--lib/syntax_suggest/lex_all.rb74
-rw-r--r--lib/syntax_suggest/lex_value.rb70
-rw-r--r--lib/syntax_suggest/mini_stringio.rb30
-rw-r--r--lib/syntax_suggest/parse_blocks_from_indent_line.rb60
-rw-r--r--lib/syntax_suggest/pathname_from_message.rb59
-rw-r--r--lib/syntax_suggest/priority_engulf_queue.rb63
-rw-r--r--lib/syntax_suggest/priority_queue.rb105
-rw-r--r--lib/syntax_suggest/ripper_errors.rb39
-rw-r--r--lib/syntax_suggest/scan_history.rb134
-rw-r--r--lib/syntax_suggest/syntax_suggest.gemspec32
-rw-r--r--lib/syntax_suggest/unvisited_lines.rb36
-rw-r--r--lib/syntax_suggest/version.rb5
-rw-r--r--lib/tempfile.gemspec33
-rw-r--r--lib/tempfile.rb503
-rw-r--r--lib/thwait.rb141
-rw-r--r--lib/time.gemspec36
-rw-r--r--lib/time.rb380
-rw-r--r--lib/timeout.gemspec33
-rw-r--r--lib/timeout.rb333
-rw-r--r--lib/tmpdir.gemspec30
-rw-r--r--lib/tmpdir.rb131
-rw-r--r--lib/tracer.rb287
-rw-r--r--lib/tsort.rb452
-rw-r--r--lib/ubygems.rb11
-rw-r--r--lib/un.gemspec31
-rw-r--r--lib/un.rb109
-rw-r--r--lib/unicode_normalize.rb79
-rw-r--r--lib/unicode_normalize/normalize.rb52
-rw-r--r--lib/unicode_normalize/tables.rb10505
-rw-r--r--lib/uri.rb90
-rw-r--r--lib/uri/common.rb689
-rw-r--r--lib/uri/file.rb100
-rw-r--r--lib/uri/ftp.rb70
-rw-r--r--lib/uri/generic.rb603
-rw-r--r--lib/uri/http.rb110
-rw-r--r--lib/uri/https.rb6
-rw-r--r--lib/uri/ldap.rb84
-rw-r--r--lib/uri/ldaps.rb5
-rw-r--r--lib/uri/mailto.rb68
-rw-r--r--lib/uri/rfc2396_parser.rb109
-rw-r--r--lib/uri/rfc3986_parser.rb181
-rw-r--r--lib/uri/uri.gemspec42
-rw-r--r--lib/uri/version.rb6
-rw-r--r--lib/uri/ws.rb83
-rw-r--r--lib/uri/wss.rb23
-rw-r--r--lib/weakref.gemspec32
-rw-r--r--lib/weakref.rb56
-rw-r--r--lib/webrick.rb227
-rw-r--r--lib/webrick/accesslog.rb159
-rw-r--r--lib/webrick/cgi.rb309
-rw-r--r--lib/webrick/compat.rb36
-rw-r--r--lib/webrick/config.rb152
-rw-r--r--lib/webrick/cookie.rb172
-rw-r--r--lib/webrick/htmlutils.rb30
-rw-r--r--lib/webrick/httpauth.rb96
-rw-r--r--lib/webrick/httpauth/authenticator.rb117
-rw-r--r--lib/webrick/httpauth/basicauth.rb108
-rw-r--r--lib/webrick/httpauth/digestauth.rb408
-rw-r--r--lib/webrick/httpauth/htdigest.rb132
-rw-r--r--lib/webrick/httpauth/htgroup.rb94
-rw-r--r--lib/webrick/httpauth/htpasswd.rb125
-rw-r--r--lib/webrick/httpauth/userdb.rb53
-rw-r--r--lib/webrick/httpproxy.rb338
-rw-r--r--lib/webrick/httprequest.rb585
-rw-r--r--lib/webrick/httpresponse.rb467
-rw-r--r--lib/webrick/https.rb87
-rw-r--r--lib/webrick/httpserver.rb280
-rw-r--r--lib/webrick/httpservlet.rb23
-rw-r--r--lib/webrick/httpservlet/abstract.rb154
-rw-r--r--lib/webrick/httpservlet/cgi_runner.rb47
-rw-r--r--lib/webrick/httpservlet/cgihandler.rb121
-rw-r--r--lib/webrick/httpservlet/erbhandler.rb88
-rw-r--r--lib/webrick/httpservlet/filehandler.rb523
-rw-r--r--lib/webrick/httpservlet/prochandler.rb47
-rw-r--r--lib/webrick/httpstatus.rb198
-rw-r--r--lib/webrick/httputils.rb510
-rw-r--r--lib/webrick/httpversion.rb76
-rw-r--r--lib/webrick/log.rb156
-rw-r--r--lib/webrick/server.rb380
-rw-r--r--lib/webrick/ssl.rb197
-rw-r--r--lib/webrick/utils.rb270
-rw-r--r--lib/webrick/version.rb18
-rw-r--r--lib/xmlrpc.rb312
-rw-r--r--lib/xmlrpc/base64.rb63
-rw-r--r--lib/xmlrpc/client.rb629
-rw-r--r--lib/xmlrpc/config.rb44
-rw-r--r--lib/xmlrpc/create.rb287
-rw-r--r--lib/xmlrpc/datetime.rb130
-rw-r--r--lib/xmlrpc/marshal.rb67
-rw-r--r--lib/xmlrpc/parser.rb871
-rw-r--r--lib/xmlrpc/server.rb708
-rw-r--r--lib/xmlrpc/utils.rb172
-rw-r--r--lib/yaml.rb29
-rw-r--r--lib/yaml/dbm.rb31
-rw-r--r--lib/yaml/store.rb40
-rw-r--r--lib/yaml/yaml.gemspec30
-rwxr-xr-xlibexec/bundle29
-rwxr-xr-xlibexec/bundler4
-rwxr-xr-xlibexec/erb184
-rwxr-xr-xlibexec/syntax_suggest7
-rw-r--r--load.c1810
-rw-r--r--loadpath.c1
-rw-r--r--localeinit.c60
-rw-r--r--main.c41
-rw-r--r--man/erb.125
-rw-r--r--man/goruby.14
-rw-r--r--man/irb.1173
-rw-r--r--man/ri.1181
-rw-r--r--man/ruby.1322
-rw-r--r--marshal.c2389
-rw-r--r--marshal.rb40
-rw-r--r--math.c1006
-rw-r--r--memory_view.c870
-rw-r--r--method.h177
-rw-r--r--mini_builtin.c104
-rw-r--r--miniinit.c60
-rw-r--r--misc/.vscode/launch.json13
-rw-r--r--misc/.vscode/settings.json10
-rw-r--r--misc/.vscode/tasks.json14
-rw-r--r--misc/README19
-rw-r--r--misc/call_fuzzer.rb372
-rwxr-xr-xmisc/call_fuzzer.sh13
-rwxr-xr-xmisc/expand_tabs.rb178
-rw-r--r--misc/gdb.py181
-rw-r--r--misc/inf-ruby.el418
-rw-r--r--misc/lldb_cruby.py747
-rw-r--r--misc/lldb_disasm.py250
-rw-r--r--misc/lldb_rb/commands/command_template.py30
-rw-r--r--misc/lldb_rb/commands/heap_page_command.py27
-rw-r--r--misc/lldb_rb/commands/print_flags_command.py31
-rw-r--r--misc/lldb_rb/commands/rb_id2str_command.py49
-rw-r--r--misc/lldb_rb/commands/rclass_ext_command.py14
-rw-r--r--misc/lldb_rb/commands/rp_command.py15
-rw-r--r--misc/lldb_rb/constants.py6
-rw-r--r--misc/lldb_rb/lldb_interface.py18
-rw-r--r--misc/lldb_rb/rb_base_command.py57
-rw-r--r--misc/lldb_rb/rb_heap_structs.py152
-rw-r--r--misc/lldb_rb/utils.py515
-rw-r--r--misc/rb_optparse.bash5
-rw-r--r--[-rwxr-xr-x]misc/rb_optparse.zsh15
-rw-r--r--misc/rdoc-mode.el166
-rw-r--r--misc/ruby-additional.el169
-rw-r--r--misc/ruby-electric.el569
-rw-r--r--misc/ruby-mode.el1584
-rw-r--r--misc/ruby-style.el34
-rw-r--r--misc/rubydb2x.el104
-rw-r--r--misc/rubydb3x.el115
-rw-r--r--misc/test_lldb_cruby.rb40
-rw-r--r--misc/tsan_suppressions.txt109
-rwxr-xr-xmisc/yjit_perf.py116
-rw-r--r--missing/alloca.c2
-rw-r--r--missing/crypt.c546
-rw-r--r--missing/crypt.h247
-rw-r--r--missing/des_tables.c1616
-rw-r--r--missing/dtoa.c3509
-rw-r--r--missing/dup2.c60
-rw-r--r--missing/erf.c15
-rw-r--r--missing/explicit_bzero.c17
-rw-r--r--missing/file.h3
-rw-r--r--missing/fileblocks.c1
-rw-r--r--missing/finite.c9
-rw-r--r--missing/flock.c13
-rw-r--r--missing/isinf.c69
-rw-r--r--missing/isnan.c32
-rw-r--r--missing/langinfo.c2
-rw-r--r--missing/lgamma_r.c2
-rw-r--r--missing/memcmp.c3
-rw-r--r--missing/mt19937.c158
-rw-r--r--missing/nan.c28
-rw-r--r--missing/procstat_vm.c85
-rw-r--r--missing/setproctitle.c74
-rw-r--r--missing/signbit.c19
-rw-r--r--missing/strerror.c2
-rw-r--r--missing/strlcat.c86
-rw-r--r--missing/strlcpy.c77
-rw-r--r--missing/strtol.c27
-rw-r--r--missing/tgamma.c44
-rw-r--r--missing/x86_64-chkstk.S (renamed from missing/x86_64-chkstk.s)0
-rw-r--r--nacl/GNUmakefile.in100
-rw-r--r--nacl/README.nacl51
-rw-r--r--nacl/create_nmf.rb70
-rw-r--r--nacl/dirent.h15
-rw-r--r--nacl/example.html150
-rwxr-xr-xnacl/nacl-config.rb61
-rw-r--r--nacl/package.rb113
-rw-r--r--nacl/pepper_main.c732
-rw-r--r--nacl/resource.h8
-rw-r--r--nacl/select.h7
-rw-r--r--nacl/signal.h6
-rw-r--r--nacl/stat.h10
-rw-r--r--nacl/unistd.h9
-rw-r--r--nacl/utime.h11
-rw-r--r--nilclass.rb63
-rw-r--r--node.c1386
-rw-r--r--node.h590
-rw-r--r--node_dump.c1325
-rw-r--r--numeric.c6542
-rw-r--r--numeric.rb421
-rw-r--r--object.c3806
-rw-r--r--pack.c2911
-rw-r--r--pack.rb40
-rw-r--r--parse.y22977
-rw-r--r--parser_bits.h647
-rw-r--r--parser_node.h32
-rw-r--r--parser_st.c165
-rw-r--r--parser_st.h162
-rw-r--r--parser_value.h106
-rw-r--r--pathname.c117
-rw-r--r--pathname_builtin.rb1172
-rw-r--r--prelude.rb159
-rw-r--r--prism/api_pack.c276
-rw-r--r--prism/config.yml4739
-rw-r--r--prism/defines.h260
-rw-r--r--prism/encoding.c5340
-rw-r--r--prism/encoding.h283
-rw-r--r--prism/extension.c1427
-rw-r--r--prism/extension.h19
-rw-r--r--prism/node.h129
-rw-r--r--prism/options.c338
-rw-r--r--prism/options.h488
-rw-r--r--prism/pack.c509
-rw-r--r--prism/pack.h163
-rw-r--r--prism/parser.h936
-rw-r--r--prism/prettyprint.h34
-rw-r--r--prism/prism.c22679
-rw-r--r--prism/prism.h408
-rw-r--r--prism/regexp.c790
-rw-r--r--prism/regexp.h43
-rw-r--r--prism/srcs.mk150
-rw-r--r--prism/srcs.mk.in48
-rw-r--r--prism/static_literals.c617
-rw-r--r--prism/static_literals.h121
-rw-r--r--prism/templates/ext/prism/api_node.c.erb282
-rw-r--r--prism/templates/include/prism/ast.h.erb238
-rw-r--r--prism/templates/include/prism/diagnostic.h.erb130
-rw-r--r--prism/templates/lib/prism/compiler.rb.erb43
-rw-r--r--prism/templates/lib/prism/dispatcher.rb.erb103
-rw-r--r--prism/templates/lib/prism/dot_visitor.rb.erb189
-rw-r--r--prism/templates/lib/prism/dsl.rb.erb133
-rw-r--r--prism/templates/lib/prism/inspect_visitor.rb.erb131
-rw-r--r--prism/templates/lib/prism/mutation_compiler.rb.erb19
-rw-r--r--prism/templates/lib/prism/node.rb.erb527
-rw-r--r--prism/templates/lib/prism/reflection.rb.erb136
-rw-r--r--prism/templates/lib/prism/serialize.rb.erb602
-rw-r--r--prism/templates/lib/prism/visitor.rb.erb55
-rw-r--r--prism/templates/src/diagnostic.c.erb526
-rw-r--r--prism/templates/src/node.c.erb333
-rw-r--r--prism/templates/src/prettyprint.c.erb166
-rw-r--r--prism/templates/src/serialize.c.erb406
-rw-r--r--prism/templates/src/token_type.c.erb369
-rwxr-xr-xprism/templates/template.rb689
-rw-r--r--prism/util/pm_buffer.c357
-rw-r--r--prism/util/pm_buffer.h236
-rw-r--r--prism/util/pm_char.c318
-rw-r--r--prism/util/pm_char.h204
-rw-r--r--prism/util/pm_constant_pool.c342
-rw-r--r--prism/util/pm_constant_pool.h218
-rw-r--r--prism/util/pm_integer.c670
-rw-r--r--prism/util/pm_integer.h130
-rw-r--r--prism/util/pm_list.c49
-rw-r--r--prism/util/pm_list.h103
-rw-r--r--prism/util/pm_memchr.c35
-rw-r--r--prism/util/pm_memchr.h29
-rw-r--r--prism/util/pm_newline_list.c125
-rw-r--r--prism/util/pm_newline_list.h113
-rw-r--r--prism/util/pm_string.c381
-rw-r--r--prism/util/pm_string.h200
-rw-r--r--prism/util/pm_strncasecmp.c36
-rw-r--r--prism/util/pm_strncasecmp.h32
-rw-r--r--prism/util/pm_strpbrk.c206
-rw-r--r--prism/util/pm_strpbrk.h46
-rw-r--r--prism/version.h29
-rw-r--r--prism_compile.c11558
-rw-r--r--prism_compile.h106
-rw-r--r--prism_init.c9
-rw-r--r--probes.d11
-rw-r--r--probes_helper.h35
-rw-r--r--proc.c3736
-rw-r--r--process.c6395
-rw-r--r--ractor.c2621
-rw-r--r--ractor.rb834
-rw-r--r--ractor_core.h331
-rw-r--r--ractor_sync.c1516
-rw-r--r--random.c1721
-rw-r--r--range.c2816
-rw-r--r--rational.c2636
-rw-r--r--re.c3755
-rw-r--r--regcomp.c2818
-rw-r--r--regenc.c165
-rw-r--r--regenc.h159
-rw-r--r--regerror.c166
-rw-r--r--regexec.c3962
-rw-r--r--regint.h497
-rw-r--r--regparse.c3601
-rw-r--r--regparse.h64
-rw-r--r--regsyntax.c15
-rw-r--r--ruby-runner.c104
-rw-r--r--ruby.c3659
-rw-r--r--ruby.rs4
-rw-r--r--ruby_assert.h64
-rw-r--r--ruby_atomic.h278
-rw-r--r--ruby_parser.c1119
-rw-r--r--rubyparser.h1393
-rw-r--r--rubystub.c61
-rw-r--r--safe.c128
-rw-r--r--sample/README2
-rw-r--r--sample/all-ruby-quine.rb24
-rw-r--r--sample/biorhythm.rb9
-rw-r--r--sample/cbreak.rb8
-rw-r--r--sample/coverage.rb2
-rw-r--r--sample/delegate.rb2
-rw-r--r--sample/dir.rb11
-rw-r--r--sample/drb/README.ja.rdoc59
-rw-r--r--sample/drb/README.rdoc56
-rw-r--r--sample/drb/acl.rb15
-rw-r--r--sample/drb/darray.rb12
-rw-r--r--sample/drb/darrayc.rb47
-rw-r--r--sample/drb/dbiff.rb51
-rw-r--r--sample/drb/dcdbiff.rb43
-rw-r--r--sample/drb/dchatc.rb41
-rw-r--r--sample/drb/dchats.rb70
-rw-r--r--sample/drb/dhasen.rb42
-rw-r--r--sample/drb/dhasenc.rb14
-rw-r--r--sample/drb/dlogc.rb16
-rw-r--r--sample/drb/dlogd.rb39
-rw-r--r--sample/drb/dqin.rb13
-rw-r--r--sample/drb/dqlib.rb14
-rw-r--r--sample/drb/dqout.rb14
-rw-r--r--sample/drb/dqueue.rb12
-rw-r--r--sample/drb/drbc.rb45
-rw-r--r--sample/drb/drbch.rb48
-rw-r--r--sample/drb/drbm.rb60
-rw-r--r--sample/drb/drbmc.rb22
-rw-r--r--sample/drb/drbs-acl.rb51
-rw-r--r--sample/drb/drbs.rb64
-rw-r--r--sample/drb/drbssl_c.rb19
-rw-r--r--sample/drb/drbssl_s.rb31
-rw-r--r--sample/drb/extserv_test.rb80
-rw-r--r--sample/drb/gw_ct.rb29
-rw-r--r--sample/drb/gw_cu.rb28
-rw-r--r--sample/drb/gw_s.rb10
-rw-r--r--sample/drb/holderc.rb22
-rw-r--r--sample/drb/holders.rb63
-rw-r--r--sample/drb/http0.rb77
-rw-r--r--sample/drb/http0serv.rb119
-rw-r--r--sample/drb/name.rb117
-rw-r--r--sample/drb/namec.rb36
-rw-r--r--sample/drb/old_tuplespace.rb214
-rw-r--r--sample/drb/rinda_ts.rb7
-rw-r--r--sample/drb/rindac.rb17
-rw-r--r--sample/drb/rindas.rb18
-rw-r--r--sample/drb/ring_echo.rb30
-rw-r--r--sample/drb/ring_inspect.rb30
-rw-r--r--sample/drb/ring_place.rb25
-rw-r--r--sample/drb/simpletuple.rb91
-rw-r--r--sample/drb/speedc.rb21
-rw-r--r--sample/drb/speeds.rb31
-rw-r--r--sample/dualstack-httpd.rb1
-rw-r--r--sample/export.rb2
-rw-r--r--sample/exyacc.rb2
-rw-r--r--sample/fact.rb4
-rw-r--r--sample/fib.py2
-rw-r--r--sample/freq.rb12
-rw-r--r--sample/from.rb2
-rw-r--r--sample/iseq_loader.rb6
-rw-r--r--sample/list.rb5
-rw-r--r--sample/list3.rb2
-rwxr-xr-xsample/mine.rb8
-rw-r--r--sample/mpart.rb44
-rw-r--r--sample/net-imap.rb167
-rw-r--r--sample/observ.rb3
-rw-r--r--sample/occur.rb2
-rw-r--r--sample/occur2.rb13
-rw-r--r--sample/openssl/c_rehash.rb5
-rw-r--r--sample/openssl/cert2text.rb7
-rw-r--r--sample/openssl/certstore.rb7
-rw-r--r--sample/openssl/cipher.rb4
-rw-r--r--sample/openssl/echo_cli.rb2
-rw-r--r--sample/openssl/echo_svr.rb8
-rw-r--r--sample/openssl/gen_csr.rb14
-rw-r--r--sample/openssl/smime_read.rb11
-rw-r--r--sample/openssl/smime_write.rb15
-rw-r--r--sample/philos.rb3
-rw-r--r--sample/prism/find_calls.rb105
-rw-r--r--sample/prism/find_comments.rb100
-rw-r--r--sample/prism/locate_nodes.rb84
-rw-r--r--sample/prism/make_tags.rb302
-rw-r--r--sample/prism/multiplex_constants.rb138
-rw-r--r--sample/prism/relocate_constants.rb43
-rw-r--r--sample/prism/visit_nodes.rb63
-rw-r--r--sample/pty/expect_sample.rb14
-rw-r--r--sample/pty/script.rb2
-rw-r--r--sample/pty/shl.rb47
-rw-r--r--sample/ripper/ruby2html.rb6
-rwxr-xr-xsample/rss/blend.rb79
-rwxr-xr-xsample/rss/convert.rb69
-rwxr-xr-xsample/rss/list_description.rb91
-rwxr-xr-xsample/rss/re_read.rb64
-rwxr-xr-xsample/rss/rss_recent.rb85
-rw-r--r--[-rwxr-xr-x]sample/test.rb2
-rw-r--r--sample/testunit/adder.rb13
-rw-r--r--sample/testunit/subtracter.rb12
-rw-r--r--sample/testunit/tc_adder.rb18
-rw-r--r--sample/testunit/tc_subtracter.rb18
-rw-r--r--sample/testunit/ts_examples.rb7
-rw-r--r--sample/timeout.rb18
-rw-r--r--sample/trick2013/kinaba/remarks.markdown4
-rw-r--r--sample/trick2013/mame/music-box.mp4bin580724 -> 0 bytes
-rw-r--r--sample/trick2013/mame/remarks.markdown4
-rw-r--r--sample/trick2013/yhara/entry.rb2
-rw-r--r--sample/trick2015/kinaba/entry.rb6
-rw-r--r--sample/trick2015/ksk_1/remarks.markdown2
-rw-r--r--sample/trick2015/ksk_2/remarks.markdown4
-rw-r--r--sample/trick2018/01-kinaba/authors.markdown3
-rw-r--r--sample/trick2018/01-kinaba/entry.rb8
-rw-r--r--sample/trick2018/01-kinaba/remarks.markdown55
-rw-r--r--sample/trick2018/02-mame/authors.markdown3
-rw-r--r--sample/trick2018/02-mame/entry.rb15
-rw-r--r--sample/trick2018/02-mame/remarks.markdown16
-rw-r--r--sample/trick2018/03-tompng/Gemfile2
-rw-r--r--sample/trick2018/03-tompng/Gemfile.lock13
-rw-r--r--sample/trick2018/03-tompng/authors.markdown3
-rw-r--r--sample/trick2018/03-tompng/entry.rb31
-rw-r--r--sample/trick2018/03-tompng/output.txt44
-rw-r--r--sample/trick2018/03-tompng/remarks.markdown19
-rw-r--r--sample/trick2018/03-tompng/trick.pngbin0 -> 5661 bytes
-rw-r--r--sample/trick2018/04-colin/authors.markdown3
-rw-r--r--sample/trick2018/04-colin/entry.rb2
-rw-r--r--sample/trick2018/04-colin/remarks.markdown62
-rw-r--r--sample/trick2018/05-tompng/authors.markdown3
-rw-r--r--sample/trick2018/05-tompng/entry.rb41
-rw-r--r--sample/trick2018/05-tompng/preview_of_output.pngbin0 -> 66800 bytes
-rw-r--r--sample/trick2018/05-tompng/remarks.markdown31
-rw-r--r--sample/trick2018/README.md16
-rw-r--r--sample/trick2022/01-tompng/Gemfile2
-rw-r--r--sample/trick2022/01-tompng/Gemfile.lock13
-rw-r--r--sample/trick2022/01-tompng/authors.markdown3
-rw-r--r--sample/trick2022/01-tompng/entry.rb40
-rw-r--r--sample/trick2022/01-tompng/remarks.markdown51
-rw-r--r--sample/trick2022/02-tompng/authors.markdown3
-rw-r--r--sample/trick2022/02-tompng/entry.rb32
-rw-r--r--sample/trick2022/02-tompng/remarks.markdown32
-rw-r--r--sample/trick2022/03-mame/authors.markdown3
-rw-r--r--sample/trick2022/03-mame/entry.rb27
-rw-r--r--sample/trick2022/03-mame/remarks.markdown96
-rw-r--r--sample/trick2022/03-mame/test.txt13
-rw-r--r--sample/trick2022/README.md14
-rw-r--r--sample/trick2025/01-omoikane/authors.markdown5
-rw-r--r--sample/trick2025/01-omoikane/bf.rb81
-rw-r--r--sample/trick2025/01-omoikane/entry.rb32
-rw-r--r--sample/trick2025/01-omoikane/remarks.markdown71
-rw-r--r--sample/trick2025/01-omoikane/sample_input.txt35
-rw-r--r--sample/trick2025/01-omoikane/spoiler_rot13.txt470
-rw-r--r--sample/trick2025/02-mame/authors.markdown3
-rw-r--r--sample/trick2025/02-mame/entry.rb34
-rw-r--r--sample/trick2025/02-mame/remarks.markdown141
-rw-r--r--sample/trick2025/02-mame/sample.orig.rb8
-rw-r--r--sample/trick2025/02-mame/test.patch16
-rw-r--r--sample/trick2025/03-tompng/authors.markdown3
-rw-r--r--sample/trick2025/03-tompng/entry.rb74
-rw-r--r--sample/trick2025/03-tompng/remarks.markdown146
-rw-r--r--sample/trick2025/04-tompng/authors.markdown3
-rw-r--r--sample/trick2025/04-tompng/entry.rb36
-rw-r--r--sample/trick2025/04-tompng/remarks.markdown43
-rw-r--r--sample/trick2025/05-tompng/authors.markdown3
-rw-r--r--sample/trick2025/05-tompng/entry.rb118
-rw-r--r--sample/trick2025/05-tompng/remarks.markdown106
-rw-r--r--sample/trick2025/README.md16
-rw-r--r--sample/uumerge.rb2
-rw-r--r--sample/webrick/demo-app.rb66
-rw-r--r--sample/webrick/demo-multipart.cgi12
-rw-r--r--sample/webrick/demo-servlet.rb6
-rw-r--r--sample/webrick/demo-urlencoded.cgi12
-rw-r--r--sample/webrick/hello.cgi11
-rw-r--r--sample/webrick/hello.rb8
-rw-r--r--sample/webrick/httpd.rb23
-rw-r--r--sample/webrick/httpproxy.rb25
-rw-r--r--sample/webrick/httpsd.rb33
-rw-r--r--scheduler.c1245
-rw-r--r--set.c2293
-rw-r--r--shape.c1657
-rw-r--r--shape.h484
-rw-r--r--signal.c1139
-rw-r--r--siphash.c113
-rw-r--r--siphash.h2
-rw-r--r--sparc.c6
-rw-r--r--spec/README31
-rw-r--r--spec/README.md160
-rwxr-xr-xspec/bin/bundle6
-rwxr-xr-xspec/bin/parallel_rspec7
-rwxr-xr-xspec/bin/rspec6
-rw-r--r--spec/bundled_gems.mspec14
-rw-r--r--spec/bundled_gems_spec.rb427
-rw-r--r--spec/bundler/bundler/build_metadata_spec.rb50
-rw-r--r--spec/bundler/bundler/bundler_spec.rb344
-rw-r--r--spec/bundler/bundler/ci_detector_spec.rb21
-rw-r--r--spec/bundler/bundler/cli_common_spec.rb22
-rw-r--r--spec/bundler/bundler/cli_spec.rb296
-rw-r--r--spec/bundler/bundler/compact_index_client/parser_spec.rb237
-rw-r--r--spec/bundler/bundler/compact_index_client/updater_spec.rb243
-rw-r--r--spec/bundler/bundler/current_ruby_spec.rb157
-rw-r--r--spec/bundler/bundler/definition_spec.rb307
-rw-r--r--spec/bundler/bundler/dependency_spec.rb49
-rw-r--r--spec/bundler/bundler/digest_spec.rb24
-rw-r--r--spec/bundler/bundler/dsl_spec.rb369
-rw-r--r--spec/bundler/bundler/endpoint_specification_spec.rb83
-rw-r--r--spec/bundler/bundler/env_spec.rb236
-rw-r--r--spec/bundler/bundler/environment_preserver_spec.rb87
-rw-r--r--spec/bundler/bundler/fetcher/base_spec.rb77
-rw-r--r--spec/bundler/bundler/fetcher/compact_index_spec.rb109
-rw-r--r--spec/bundler/bundler/fetcher/dependency_spec.rb284
-rw-r--r--spec/bundler/bundler/fetcher/downloader_spec.rb270
-rw-r--r--spec/bundler/bundler/fetcher/gem_remote_fetcher_spec.rb60
-rw-r--r--spec/bundler/bundler/fetcher/index_spec.rb75
-rw-r--r--spec/bundler/bundler/fetcher_spec.rb260
-rw-r--r--spec/bundler/bundler/friendly_errors_spec.rb231
-rw-r--r--spec/bundler/bundler/gem_helper_spec.rb451
-rw-r--r--spec/bundler/bundler/gem_version_promoter_spec.rb163
-rw-r--r--spec/bundler/bundler/index_spec.rb36
-rw-r--r--spec/bundler/bundler/installer/gem_installer_spec.rb47
-rw-r--r--spec/bundler/bundler/installer/spec_installation_spec.rb68
-rw-r--r--spec/bundler/bundler/lockfile_parser_spec.rb221
-rw-r--r--spec/bundler/bundler/mirror_spec.rb331
-rw-r--r--spec/bundler/bundler/plugin/api/source_spec.rb88
-rw-r--r--spec/bundler/bundler/plugin/api_spec.rb83
-rw-r--r--spec/bundler/bundler/plugin/dsl_spec.rb38
-rw-r--r--spec/bundler/bundler/plugin/events_spec.rb32
-rw-r--r--spec/bundler/bundler/plugin/index_spec.rb196
-rw-r--r--spec/bundler/bundler/plugin/installer_spec.rb137
-rw-r--r--spec/bundler/bundler/plugin/source_list_spec.rb25
-rw-r--r--spec/bundler/bundler/plugin_spec.rb368
-rw-r--r--spec/bundler/bundler/remote_specification_spec.rb187
-rw-r--r--spec/bundler/bundler/resolver/candidate_spec.rb20
-rw-r--r--spec/bundler/bundler/retry_spec.rb81
-rw-r--r--spec/bundler/bundler/ruby_dsl_spec.rb248
-rw-r--r--spec/bundler/bundler/ruby_version_spec.rb494
-rw-r--r--spec/bundler/bundler/rubygems_integration_spec.rb126
-rw-r--r--spec/bundler/bundler/settings/validator_spec.rb111
-rw-r--r--spec/bundler/bundler/settings_spec.rb354
-rw-r--r--spec/bundler/bundler/shared_helpers_spec.rb518
-rw-r--r--spec/bundler/bundler/source/git/git_proxy_spec.rb337
-rw-r--r--spec/bundler/bundler/source/git_spec.rb123
-rw-r--r--spec/bundler/bundler/source/path_spec.rb31
-rw-r--r--spec/bundler/bundler/source/rubygems/remote_spec.rb172
-rw-r--r--spec/bundler/bundler/source/rubygems_spec.rb65
-rw-r--r--spec/bundler/bundler/source_list_spec.rb459
-rw-r--r--spec/bundler/bundler/source_spec.rb174
-rw-r--r--spec/bundler/bundler/spec_set_spec.rb59
-rw-r--r--spec/bundler/bundler/specifications/foo.gemspec13
-rw-r--r--spec/bundler/bundler/stub_specification_spec.rb78
-rw-r--r--spec/bundler/bundler/ui/shell_spec.rb112
-rw-r--r--spec/bundler/bundler/ui_spec.rb41
-rw-r--r--spec/bundler/bundler/uri_credentials_filter_spec.rb137
-rw-r--r--spec/bundler/bundler/uri_normalizer_spec.rb25
-rw-r--r--spec/bundler/bundler/worker_spec.rb69
-rw-r--r--spec/bundler/bundler/yaml_serializer_spec.rb235
-rw-r--r--spec/bundler/cache/cache_path_spec.rb32
-rw-r--r--spec/bundler/cache/gems_spec.rb427
-rw-r--r--spec/bundler/cache/git_spec.rb511
-rw-r--r--spec/bundler/cache/path_spec.rb121
-rw-r--r--spec/bundler/cache/platform_spec.rb49
-rw-r--r--spec/bundler/commands/add_spec.rb440
-rw-r--r--spec/bundler/commands/binstubs_spec.rb333
-rw-r--r--spec/bundler/commands/cache_spec.rb620
-rw-r--r--spec/bundler/commands/check_spec.rb601
-rw-r--r--spec/bundler/commands/clean_spec.rb938
-rw-r--r--spec/bundler/commands/config_spec.rb611
-rw-r--r--spec/bundler/commands/console_spec.rb214
-rw-r--r--spec/bundler/commands/doctor_spec.rb181
-rw-r--r--spec/bundler/commands/exec_spec.rb1272
-rw-r--r--spec/bundler/commands/fund_spec.rb118
-rw-r--r--spec/bundler/commands/help_spec.rb92
-rw-r--r--spec/bundler/commands/info_spec.rb249
-rw-r--r--spec/bundler/commands/init_spec.rb207
-rw-r--r--spec/bundler/commands/install_spec.rb2035
-rw-r--r--spec/bundler/commands/issue_spec.rb16
-rw-r--r--spec/bundler/commands/licenses_spec.rb37
-rw-r--r--spec/bundler/commands/list_spec.rb315
-rw-r--r--spec/bundler/commands/lock_spec.rb2876
-rw-r--r--spec/bundler/commands/newgem_spec.rb2083
-rw-r--r--spec/bundler/commands/open_spec.rb175
-rw-r--r--spec/bundler/commands/outdated_spec.rb1369
-rw-r--r--spec/bundler/commands/platform_spec.rb1270
-rw-r--r--spec/bundler/commands/post_bundle_message_spec.rb183
-rw-r--r--spec/bundler/commands/pristine_spec.rb275
-rw-r--r--spec/bundler/commands/remove_spec.rb736
-rw-r--r--spec/bundler/commands/show_spec.rb217
-rw-r--r--spec/bundler/commands/ssl_spec.rb373
-rw-r--r--spec/bundler/commands/update_spec.rb2093
-rw-r--r--spec/bundler/commands/version_spec.rb65
-rw-r--r--spec/bundler/install/allow_offline_install_spec.rb95
-rw-r--r--spec/bundler/install/binstubs_spec.rb49
-rw-r--r--spec/bundler/install/bundler_spec.rb268
-rw-r--r--spec/bundler/install/deploy_spec.rb493
-rw-r--r--spec/bundler/install/failure_spec.rb51
-rw-r--r--spec/bundler/install/force_spec.rb71
-rw-r--r--spec/bundler/install/gemfile/eval_gemfile_spec.rb122
-rw-r--r--spec/bundler/install/gemfile/force_ruby_platform_spec.rb136
-rw-r--r--spec/bundler/install/gemfile/gemspec_spec.rb737
-rw-r--r--spec/bundler/install/gemfile/git_spec.rb1745
-rw-r--r--spec/bundler/install/gemfile/groups_spec.rb345
-rw-r--r--spec/bundler/install/gemfile/install_if_spec.rb51
-rw-r--r--spec/bundler/install/gemfile/lockfile_spec.rb42
-rw-r--r--spec/bundler/install/gemfile/path_spec.rb1017
-rw-r--r--spec/bundler/install/gemfile/platform_spec.rb638
-rw-r--r--spec/bundler/install/gemfile/ruby_spec.rb157
-rw-r--r--spec/bundler/install/gemfile/sources_spec.rb1198
-rw-r--r--spec/bundler/install/gemfile/specific_platform_spec.rb1938
-rw-r--r--spec/bundler/install/gemfile_spec.rb192
-rw-r--r--spec/bundler/install/gems/compact_index_spec.rb1012
-rw-r--r--spec/bundler/install/gems/dependency_api_fallback_spec.rb19
-rw-r--r--spec/bundler/install/gems/dependency_api_spec.rb656
-rw-r--r--spec/bundler/install/gems/env_spec.rb107
-rw-r--r--spec/bundler/install/gems/flex_spec.rb403
-rw-r--r--spec/bundler/install/gems/fund_spec.rb164
-rw-r--r--spec/bundler/install/gems/gemfile_source_header_spec.rb24
-rw-r--r--spec/bundler/install/gems/mirror_probe_spec.rb68
-rw-r--r--spec/bundler/install/gems/mirror_spec.rb39
-rw-r--r--spec/bundler/install/gems/native_extensions_spec.rb184
-rw-r--r--spec/bundler/install/gems/post_install_spec.rb150
-rw-r--r--spec/bundler/install/gems/resolving_spec.rb784
-rw-r--r--spec/bundler/install/gems/standalone_spec.rb524
-rw-r--r--spec/bundler/install/gems/win32_spec.rb25
-rw-r--r--spec/bundler/install/gemspecs_spec.rb181
-rw-r--r--spec/bundler/install/git_spec.rb293
-rw-r--r--spec/bundler/install/global_cache_spec.rb296
-rw-r--r--spec/bundler/install/path_spec.rb214
-rw-r--r--spec/bundler/install/prereleases_spec.rb54
-rw-r--r--spec/bundler/install/process_lock_spec.rb57
-rw-r--r--spec/bundler/install/security_policy_spec.rb72
-rw-r--r--spec/bundler/install/yanked_spec.rb254
-rw-r--r--spec/bundler/lock/git_spec.rb258
-rw-r--r--spec/bundler/lock/lockfile_spec.rb2415
-rw-r--r--spec/bundler/other/cli_dispatch_spec.rb20
-rw-r--r--spec/bundler/other/cli_man_pages_spec.rb100
-rw-r--r--spec/bundler/other/ext_spec.rb50
-rw-r--r--spec/bundler/other/major_deprecation_spec.rb795
-rw-r--r--spec/bundler/plugins/command_spec.rb78
-rw-r--r--spec/bundler/plugins/hook_spec.rb208
-rw-r--r--spec/bundler/plugins/install_spec.rb429
-rw-r--r--spec/bundler/plugins/list_spec.rb60
-rw-r--r--spec/bundler/plugins/source/example_spec.rb456
-rw-r--r--spec/bundler/plugins/source_spec.rb111
-rw-r--r--spec/bundler/plugins/uninstall_spec.rb74
-rw-r--r--spec/bundler/quality_es_spec.rb61
-rw-r--r--spec/bundler/quality_spec.rb261
-rw-r--r--spec/bundler/realworld/double_check_spec.rb40
-rw-r--r--spec/bundler/realworld/edgecases_spec.rb75
-rw-r--r--spec/bundler/realworld/ffi_spec.rb57
-rw-r--r--spec/bundler/realworld/fixtures/tapioca/Gemfile5
-rw-r--r--spec/bundler/realworld/fixtures/tapioca/Gemfile.lock49
-rw-r--r--spec/bundler/realworld/fixtures/warbler/.gitignore1
-rw-r--r--spec/bundler/realworld/fixtures/warbler/Gemfile7
-rw-r--r--spec/bundler/realworld/fixtures/warbler/Gemfile.lock39
-rw-r--r--spec/bundler/realworld/fixtures/warbler/bin/warbler-example.rb3
-rw-r--r--spec/bundler/realworld/fixtures/warbler/demo/demo.gemspec10
-rw-r--r--spec/bundler/realworld/git_spec.rb11
-rw-r--r--spec/bundler/realworld/parallel_spec.rb66
-rw-r--r--spec/bundler/realworld/slow_perf_spec.rb35
-rw-r--r--spec/bundler/resolver/basic_spec.rb422
-rw-r--r--spec/bundler/resolver/platform_spec.rb423
-rw-r--r--spec/bundler/runtime/env_helpers_spec.rb236
-rw-r--r--spec/bundler/runtime/executable_spec.rb141
-rw-r--r--spec/bundler/runtime/gem_tasks_spec.rb158
-rw-r--r--spec/bundler/runtime/inline_spec.rb705
-rw-r--r--spec/bundler/runtime/load_spec.rb113
-rw-r--r--spec/bundler/runtime/platform_spec.rb468
-rw-r--r--spec/bundler/runtime/require_spec.rb480
-rw-r--r--spec/bundler/runtime/requiring_spec.rb15
-rw-r--r--spec/bundler/runtime/self_management_spec.rb261
-rw-r--r--spec/bundler/runtime/setup_spec.rb1679
-rw-r--r--spec/bundler/spec_helper.rb149
-rw-r--r--spec/bundler/support/activate.rb9
-rw-r--r--spec/bundler/support/artifice/compact_index.rb6
-rw-r--r--spec/bundler/support/artifice/compact_index_api_missing.rb13
-rw-r--r--spec/bundler/support/artifice/compact_index_basic_authentication.rb15
-rw-r--r--spec/bundler/support/artifice/compact_index_checksum_mismatch.rb16
-rw-r--r--spec/bundler/support/artifice/compact_index_concurrent_download.rb33
-rw-r--r--spec/bundler/support/artifice/compact_index_creds_diff_host.rb39
-rw-r--r--spec/bundler/support/artifice/compact_index_etag_match.rb16
-rw-r--r--spec/bundler/support/artifice/compact_index_extra.rb6
-rw-r--r--spec/bundler/support/artifice/compact_index_extra_api.rb6
-rw-r--r--spec/bundler/support/artifice/compact_index_extra_api_missing.rb17
-rw-r--r--spec/bundler/support/artifice/compact_index_extra_missing.rb17
-rw-r--r--spec/bundler/support/artifice/compact_index_forbidden.rb13
-rw-r--r--spec/bundler/support/artifice/compact_index_host_redirect.rb21
-rw-r--r--spec/bundler/support/artifice/compact_index_mirror_down.rb21
-rw-r--r--spec/bundler/support/artifice/compact_index_no_checksums.rb16
-rw-r--r--spec/bundler/support/artifice/compact_index_no_gem.rb13
-rw-r--r--spec/bundler/support/artifice/compact_index_partial_update.rb38
-rw-r--r--spec/bundler/support/artifice/compact_index_partial_update_bad_digest.rb40
-rw-r--r--spec/bundler/support/artifice/compact_index_partial_update_no_digest_not_incremental.rb42
-rw-r--r--spec/bundler/support/artifice/compact_index_precompiled_before.rb25
-rw-r--r--spec/bundler/support/artifice/compact_index_range_ignored.rb40
-rw-r--r--spec/bundler/support/artifice/compact_index_range_not_satisfiable.rb34
-rw-r--r--spec/bundler/support/artifice/compact_index_rate_limited.rb48
-rw-r--r--spec/bundler/support/artifice/compact_index_redirects.rb21
-rw-r--r--spec/bundler/support/artifice/compact_index_strict_basic_authentication.rb20
-rw-r--r--spec/bundler/support/artifice/compact_index_wrong_dependencies.rb17
-rw-r--r--spec/bundler/support/artifice/compact_index_wrong_gem_checksum.rb21
-rw-r--r--spec/bundler/support/artifice/endpoint.rb6
-rw-r--r--spec/bundler/support/artifice/endpoint_500.rb17
-rw-r--r--spec/bundler/support/artifice/endpoint_api_forbidden.rb13
-rw-r--r--spec/bundler/support/artifice/endpoint_basic_authentication.rb15
-rw-r--r--spec/bundler/support/artifice/endpoint_creds_diff_host.rb39
-rw-r--r--spec/bundler/support/artifice/endpoint_extra.rb33
-rw-r--r--spec/bundler/support/artifice/endpoint_extra_api.rb34
-rw-r--r--spec/bundler/support/artifice/endpoint_extra_missing.rb17
-rw-r--r--spec/bundler/support/artifice/endpoint_fallback.rb19
-rw-r--r--spec/bundler/support/artifice/endpoint_host_redirect.rb17
-rw-r--r--spec/bundler/support/artifice/endpoint_marshal_fail.rb6
-rw-r--r--spec/bundler/support/artifice/endpoint_marshal_fail_basic_authentication.rb15
-rw-r--r--spec/bundler/support/artifice/endpoint_mirror_source.rb17
-rw-r--r--spec/bundler/support/artifice/endpoint_redirect.rb17
-rw-r--r--spec/bundler/support/artifice/endpoint_strict_basic_authentication.rb20
-rw-r--r--spec/bundler/support/artifice/endpoint_timeout.rb15
-rw-r--r--spec/bundler/support/artifice/fail.rb27
-rw-r--r--spec/bundler/support/artifice/helpers/artifice.rb30
-rw-r--r--spec/bundler/support/artifice/helpers/compact_index.rb124
-rw-r--r--spec/bundler/support/artifice/helpers/compact_index_extra.rb33
-rw-r--r--spec/bundler/support/artifice/helpers/compact_index_extra_api.rb48
-rw-r--r--spec/bundler/support/artifice/helpers/endpoint.rb113
-rw-r--r--spec/bundler/support/artifice/helpers/endpoint_extra.rb29
-rw-r--r--spec/bundler/support/artifice/helpers/endpoint_fallback.rb15
-rw-r--r--spec/bundler/support/artifice/helpers/endpoint_marshal_fail.rb9
-rw-r--r--spec/bundler/support/artifice/helpers/rack_request.rb100
-rw-r--r--spec/bundler/support/artifice/vcr.rb152
-rw-r--r--spec/bundler/support/artifice/windows.rb45
-rw-r--r--spec/bundler/support/build_metadata.rb53
-rw-r--r--spec/bundler/support/builders.rb749
-rwxr-xr-xspec/bundler/support/bundle6
-rw-r--r--spec/bundler/support/bundle.rb7
-rw-r--r--spec/bundler/support/checksums.rb126
-rw-r--r--spec/bundler/support/command_execution.rb78
-rw-r--r--spec/bundler/support/env.rb13
-rw-r--r--spec/bundler/support/filters.rb38
-rw-r--r--spec/bundler/support/hax.rb74
-rw-r--r--spec/bundler/support/helpers.rb545
-rw-r--r--spec/bundler/support/indexes.rb424
-rw-r--r--spec/bundler/support/matchers.rb227
-rw-r--r--spec/bundler/support/options.rb15
-rw-r--r--spec/bundler/support/path.rb362
-rw-r--r--spec/bundler/support/permissions.rb12
-rw-r--r--spec/bundler/support/platforms.rb75
-rw-r--r--spec/bundler/support/rubygems_ext.rb169
-rw-r--r--spec/bundler/support/rubygems_version_manager.rb124
-rw-r--r--spec/bundler/support/setup.rb9
-rw-r--r--spec/bundler/support/subprocess.rb115
-rw-r--r--spec/bundler/support/switch_rubygems.rb4
-rw-r--r--spec/bundler/support/the_bundle.rb41
-rw-r--r--spec/bundler/support/vendored_net_http.rb23
-rw-r--r--spec/bundler/support/windows_tag_group.rb191
-rw-r--r--spec/bundler/update/force_spec.rb30
-rw-r--r--spec/bundler/update/gemfile_spec.rb47
-rw-r--r--spec/bundler/update/gems/fund_spec.rb50
-rw-r--r--spec/bundler/update/gems/post_install_spec.rb76
-rw-r--r--spec/bundler/update/git_spec.rb341
-rw-r--r--spec/bundler/update/path_spec.rb19
-rw-r--r--spec/default.mspec143
-rw-r--r--spec/lib/formatter_overrides.rb6
-rw-r--r--spec/lib/spec_coverage.rb1
-rw-r--r--spec/mmtk.mspec12
-rw-r--r--spec/mspec/.rspec1
-rw-r--r--spec/mspec/Gemfile4
-rw-r--r--spec/mspec/Gemfile.lock26
-rw-r--r--spec/mspec/LICENSE22
-rw-r--r--spec/mspec/README.md84
-rw-r--r--spec/mspec/Rakefile6
-rwxr-xr-xspec/mspec/bin/mkspec7
-rwxr-xr-xspec/mspec/bin/mkspec.bat1
-rwxr-xr-xspec/mspec/bin/mspec7
-rwxr-xr-xspec/mspec/bin/mspec-ci7
-rwxr-xr-xspec/mspec/bin/mspec-ci.bat1
-rwxr-xr-xspec/mspec/bin/mspec-run7
-rwxr-xr-xspec/mspec/bin/mspec-run.bat1
-rwxr-xr-xspec/mspec/bin/mspec-tag7
-rwxr-xr-xspec/mspec/bin/mspec-tag.bat1
-rwxr-xr-xspec/mspec/bin/mspec.bat1
-rw-r--r--spec/mspec/lib/mspec.rb8
-rw-r--r--spec/mspec/lib/mspec/commands/mkspec.rb143
-rw-r--r--spec/mspec/lib/mspec/commands/mspec-ci.rb76
-rw-r--r--spec/mspec/lib/mspec/commands/mspec-run.rb87
-rw-r--r--spec/mspec/lib/mspec/commands/mspec-tag.rb131
-rw-r--r--spec/mspec/lib/mspec/commands/mspec.rb113
-rw-r--r--spec/mspec/lib/mspec/expectations.rb2
-rw-r--r--spec/mspec/lib/mspec/expectations/expectations.rb39
-rw-r--r--spec/mspec/lib/mspec/expectations/should.rb41
-rw-r--r--spec/mspec/lib/mspec/guards.rb11
-rw-r--r--spec/mspec/lib/mspec/guards/block_device.rb16
-rw-r--r--spec/mspec/lib/mspec/guards/bug.rb29
-rw-r--r--spec/mspec/lib/mspec/guards/conflict.rb23
-rw-r--r--spec/mspec/lib/mspec/guards/endian.rb25
-rw-r--r--spec/mspec/lib/mspec/guards/feature.rb45
-rw-r--r--spec/mspec/lib/mspec/guards/guard.rb141
-rw-r--r--spec/mspec/lib/mspec/guards/platform.rb122
-rw-r--r--spec/mspec/lib/mspec/guards/quarantine.rb11
-rw-r--r--spec/mspec/lib/mspec/guards/superuser.rb25
-rw-r--r--spec/mspec/lib/mspec/guards/support.rb14
-rw-r--r--spec/mspec/lib/mspec/guards/version.rb72
-rw-r--r--spec/mspec/lib/mspec/helpers.rb13
-rw-r--r--spec/mspec/lib/mspec/helpers/argf.rb35
-rw-r--r--spec/mspec/lib/mspec/helpers/argv.rb44
-rw-r--r--spec/mspec/lib/mspec/helpers/datetime.rb48
-rw-r--r--spec/mspec/lib/mspec/helpers/fixture.rb24
-rw-r--r--spec/mspec/lib/mspec/helpers/flunk.rb3
-rw-r--r--spec/mspec/lib/mspec/helpers/fs.rb64
-rw-r--r--spec/mspec/lib/mspec/helpers/io.rb87
-rw-r--r--spec/mspec/lib/mspec/helpers/mock_to_path.rb6
-rw-r--r--spec/mspec/lib/mspec/helpers/numeric.rb98
-rw-r--r--spec/mspec/lib/mspec/helpers/ruby_exe.rb205
-rw-r--r--spec/mspec/lib/mspec/helpers/scratch.rb21
-rw-r--r--spec/mspec/lib/mspec/helpers/tmp.rb62
-rw-r--r--spec/mspec/lib/mspec/helpers/warning.rb21
-rw-r--r--spec/mspec/lib/mspec/matchers.rb37
-rw-r--r--spec/mspec/lib/mspec/matchers/base.rb79
-rw-r--r--spec/mspec/lib/mspec/matchers/be_an_instance_of.rb26
-rw-r--r--spec/mspec/lib/mspec/matchers/be_ancestor_of.rb24
-rw-r--r--spec/mspec/lib/mspec/matchers/be_close.rb29
-rw-r--r--spec/mspec/lib/mspec/matchers/be_computed_by.rb37
-rw-r--r--spec/mspec/lib/mspec/matchers/be_empty.rb20
-rw-r--r--spec/mspec/lib/mspec/matchers/be_false.rb20
-rw-r--r--spec/mspec/lib/mspec/matchers/be_kind_of.rb24
-rw-r--r--spec/mspec/lib/mspec/matchers/be_nan.rb20
-rw-r--r--spec/mspec/lib/mspec/matchers/be_nil.rb20
-rw-r--r--spec/mspec/lib/mspec/matchers/be_true.rb20
-rw-r--r--spec/mspec/lib/mspec/matchers/be_true_or_false.rb20
-rw-r--r--spec/mspec/lib/mspec/matchers/block_caller.rb37
-rw-r--r--spec/mspec/lib/mspec/matchers/complain.rb69
-rw-r--r--spec/mspec/lib/mspec/matchers/eql.rb26
-rw-r--r--spec/mspec/lib/mspec/matchers/equal.rb26
-rw-r--r--spec/mspec/lib/mspec/matchers/equal_element.rb78
-rw-r--r--spec/mspec/lib/mspec/matchers/have_class_variable.rb12
-rw-r--r--spec/mspec/lib/mspec/matchers/have_constant.rb12
-rw-r--r--spec/mspec/lib/mspec/matchers/have_instance_method.rb24
-rw-r--r--spec/mspec/lib/mspec/matchers/have_instance_variable.rb12
-rw-r--r--spec/mspec/lib/mspec/matchers/have_method.rb24
-rw-r--r--spec/mspec/lib/mspec/matchers/have_private_instance_method.rb24
-rw-r--r--spec/mspec/lib/mspec/matchers/have_private_method.rb24
-rw-r--r--spec/mspec/lib/mspec/matchers/have_protected_instance_method.rb24
-rw-r--r--spec/mspec/lib/mspec/matchers/have_public_instance_method.rb24
-rw-r--r--spec/mspec/lib/mspec/matchers/have_singleton_method.rb24
-rw-r--r--spec/mspec/lib/mspec/matchers/include.rb31
-rw-r--r--spec/mspec/lib/mspec/matchers/include_any_of.rb29
-rw-r--r--spec/mspec/lib/mspec/matchers/infinity.rb28
-rw-r--r--spec/mspec/lib/mspec/matchers/match_yaml.rb50
-rw-r--r--spec/mspec/lib/mspec/matchers/method.rb10
-rw-r--r--spec/mspec/lib/mspec/matchers/output.rb67
-rw-r--r--spec/mspec/lib/mspec/matchers/output_to_fd.rb71
-rw-r--r--spec/mspec/lib/mspec/matchers/raise_error.rb93
-rw-r--r--spec/mspec/lib/mspec/matchers/respond_to.rb24
-rw-r--r--spec/mspec/lib/mspec/matchers/signed_zero.rb28
-rw-r--r--spec/mspec/lib/mspec/matchers/skip.rb5
-rw-r--r--spec/mspec/lib/mspec/matchers/variable.rb24
-rw-r--r--spec/mspec/lib/mspec/mocks.rb3
-rw-r--r--spec/mspec/lib/mspec/mocks/mock.rb209
-rw-r--r--spec/mspec/lib/mspec/mocks/object.rb28
-rw-r--r--spec/mspec/lib/mspec/mocks/proxy.rb186
-rw-r--r--spec/mspec/lib/mspec/runner.rb12
-rw-r--r--spec/mspec/lib/mspec/runner/actions.rb6
-rw-r--r--spec/mspec/lib/mspec/runner/actions/constants_leak_checker.rb84
-rw-r--r--spec/mspec/lib/mspec/runner/actions/filter.rb40
-rw-r--r--spec/mspec/lib/mspec/runner/actions/leakchecker.rb377
-rw-r--r--spec/mspec/lib/mspec/runner/actions/profile.rb60
-rw-r--r--spec/mspec/lib/mspec/runner/actions/tag.rb133
-rw-r--r--spec/mspec/lib/mspec/runner/actions/taglist.rb56
-rw-r--r--spec/mspec/lib/mspec/runner/actions/tagpurge.rb56
-rw-r--r--spec/mspec/lib/mspec/runner/actions/tally.rb133
-rw-r--r--spec/mspec/lib/mspec/runner/actions/timeout.rb145
-rw-r--r--spec/mspec/lib/mspec/runner/actions/timer.rb22
-rw-r--r--spec/mspec/lib/mspec/runner/context.rb237
-rw-r--r--spec/mspec/lib/mspec/runner/evaluate.rb54
-rw-r--r--spec/mspec/lib/mspec/runner/example.rb34
-rw-r--r--spec/mspec/lib/mspec/runner/exception.rb54
-rw-r--r--spec/mspec/lib/mspec/runner/filters.rb4
-rw-r--r--spec/mspec/lib/mspec/runner/filters/match.rb18
-rw-r--r--spec/mspec/lib/mspec/runner/filters/profile.rb54
-rw-r--r--spec/mspec/lib/mspec/runner/filters/regexp.rb23
-rw-r--r--spec/mspec/lib/mspec/runner/filters/tag.rb29
-rw-r--r--spec/mspec/lib/mspec/runner/formatters.rb13
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/base.rb150
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/describe.rb23
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/dotted.rb23
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/file.rb24
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/html.rb81
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/junit.rb87
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/launchable.rb88
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/method.rb95
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/multi.rb47
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/profile.rb18
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/specdoc.rb41
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/spinner.rb111
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/stats.rb57
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/summary.rb4
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/unit.rb20
-rw-r--r--spec/mspec/lib/mspec/runner/formatters/yaml.rb38
-rw-r--r--spec/mspec/lib/mspec/runner/mspec.rb423
-rw-r--r--spec/mspec/lib/mspec/runner/object.rb26
-rw-r--r--spec/mspec/lib/mspec/runner/parallel.rb98
-rw-r--r--spec/mspec/lib/mspec/runner/shared.rb14
-rw-r--r--spec/mspec/lib/mspec/runner/tag.rb38
-rw-r--r--spec/mspec/lib/mspec/utils/deprecate.rb6
-rw-r--r--spec/mspec/lib/mspec/utils/format.rb24
-rw-r--r--spec/mspec/lib/mspec/utils/name_map.rb133
-rw-r--r--spec/mspec/lib/mspec/utils/options.rb521
-rw-r--r--spec/mspec/lib/mspec/utils/script.rb305
-rw-r--r--spec/mspec/lib/mspec/utils/version.rb52
-rw-r--r--spec/mspec/lib/mspec/utils/warnings.rb10
-rw-r--r--spec/mspec/lib/mspec/version.rb5
-rw-r--r--spec/mspec/spec/commands/fixtures/four.txt (renamed from lib/rdoc/generator/template/darkfish/.document)0
-rw-r--r--spec/mspec/spec/commands/fixtures/level2/three_spec.rb1
-rw-r--r--spec/mspec/spec/commands/fixtures/one_spec.rb1
-rw-r--r--spec/mspec/spec/commands/fixtures/three.rb1
-rw-r--r--spec/mspec/spec/commands/fixtures/two_spec.rb1
-rw-r--r--spec/mspec/spec/commands/mkspec_spec.rb363
-rw-r--r--spec/mspec/spec/commands/mspec_ci_spec.rb155
-rw-r--r--spec/mspec/spec/commands/mspec_run_spec.rb178
-rw-r--r--spec/mspec/spec/commands/mspec_spec.rb180
-rw-r--r--spec/mspec/spec/commands/mspec_tag_spec.rb414
-rw-r--r--spec/mspec/spec/expectations/expectations_spec.rb29
-rw-r--r--spec/mspec/spec/expectations/should_spec.rb61
-rw-r--r--spec/mspec/spec/fixtures/a_spec.rb15
-rw-r--r--spec/mspec/spec/fixtures/b_spec.rb7
-rw-r--r--spec/mspec/spec/fixtures/chatty_spec.rb8
-rw-r--r--spec/mspec/spec/fixtures/config.mspec8
-rw-r--r--spec/mspec/spec/fixtures/die_spec.rb7
-rwxr-xr-xspec/mspec/spec/fixtures/my_ruby4
-rw-r--r--spec/mspec/spec/fixtures/object_methods_spec.rb8
-rw-r--r--spec/mspec/spec/fixtures/print_interpreter_spec.rb4
-rw-r--r--spec/mspec/spec/fixtures/should.rb75
-rw-r--r--spec/mspec/spec/fixtures/tagging_spec.rb16
-rw-r--r--spec/mspec/spec/guards/block_device_spec.rb46
-rw-r--r--spec/mspec/spec/guards/bug_spec.rb151
-rw-r--r--spec/mspec/spec/guards/conflict_spec.rb53
-rw-r--r--spec/mspec/spec/guards/endian_spec.rb55
-rw-r--r--spec/mspec/spec/guards/feature_spec.rb120
-rw-r--r--spec/mspec/spec/guards/guard_spec.rb421
-rw-r--r--spec/mspec/spec/guards/platform_spec.rb337
-rw-r--r--spec/mspec/spec/guards/quarantine_spec.rb35
-rw-r--r--spec/mspec/spec/guards/superuser_spec.rb35
-rw-r--r--spec/mspec/spec/guards/support_spec.rb54
-rw-r--r--spec/mspec/spec/guards/user_spec.rb20
-rw-r--r--spec/mspec/spec/guards/version_spec.rb112
-rw-r--r--spec/mspec/spec/helpers/argf_spec.rb37
-rw-r--r--spec/mspec/spec/helpers/argv_spec.rb27
-rw-r--r--spec/mspec/spec/helpers/datetime_spec.rb44
-rw-r--r--spec/mspec/spec/helpers/fixture_spec.rb25
-rw-r--r--spec/mspec/spec/helpers/flunk_spec.rb20
-rw-r--r--spec/mspec/spec/helpers/fs_spec.rb195
-rw-r--r--spec/mspec/spec/helpers/io_spec.rb136
-rw-r--r--spec/mspec/spec/helpers/mock_to_path_spec.rb23
-rw-r--r--spec/mspec/spec/helpers/numeric_spec.rb31
-rw-r--r--spec/mspec/spec/helpers/ruby_exe_spec.rb256
-rw-r--r--spec/mspec/spec/helpers/scratch_spec.rb24
-rw-r--r--spec/mspec/spec/helpers/suppress_warning_spec.rb19
-rw-r--r--spec/mspec/spec/helpers/tmp_spec.rb27
-rw-r--r--spec/mspec/spec/integration/interpreter_spec.rb18
-rw-r--r--spec/mspec/spec/integration/object_methods_spec.rb18
-rw-r--r--spec/mspec/spec/integration/run_spec.rb72
-rw-r--r--spec/mspec/spec/integration/tag_spec.rb60
-rw-r--r--spec/mspec/spec/matchers/base_spec.rb228
-rw-r--r--spec/mspec/spec/matchers/be_an_instance_of_spec.rb50
-rw-r--r--spec/mspec/spec/matchers/be_ancestor_of_spec.rb28
-rw-r--r--spec/mspec/spec/matchers/be_close_spec.rb48
-rw-r--r--spec/mspec/spec/matchers/be_computed_by_spec.rb42
-rw-r--r--spec/mspec/spec/matchers/be_empty_spec.rb26
-rw-r--r--spec/mspec/spec/matchers/be_false_spec.rb28
-rw-r--r--spec/mspec/spec/matchers/be_kind_of_spec.rb31
-rw-r--r--spec/mspec/spec/matchers/be_nan_spec.rb28
-rw-r--r--spec/mspec/spec/matchers/be_nil_spec.rb27
-rw-r--r--spec/mspec/spec/matchers/be_true_or_false_spec.rb19
-rw-r--r--spec/mspec/spec/matchers/be_true_spec.rb28
-rw-r--r--spec/mspec/spec/matchers/block_caller_spec.rb13
-rw-r--r--spec/mspec/spec/matchers/complain_spec.rb102
-rw-r--r--spec/mspec/spec/matchers/eql_spec.rb33
-rw-r--r--spec/mspec/spec/matchers/equal_element_spec.rb75
-rw-r--r--spec/mspec/spec/matchers/equal_spec.rb32
-rw-r--r--spec/mspec/spec/matchers/have_class_variable_spec.rb49
-rw-r--r--spec/mspec/spec/matchers/have_constant_spec.rb37
-rw-r--r--spec/mspec/spec/matchers/have_instance_method_spec.rb53
-rw-r--r--spec/mspec/spec/matchers/have_instance_variable_spec.rb50
-rw-r--r--spec/mspec/spec/matchers/have_method_spec.rb55
-rw-r--r--spec/mspec/spec/matchers/have_private_instance_method_spec.rb57
-rw-r--r--spec/mspec/spec/matchers/have_private_method_spec.rb44
-rw-r--r--spec/mspec/spec/matchers/have_protected_instance_method_spec.rb57
-rw-r--r--spec/mspec/spec/matchers/have_public_instance_method_spec.rb53
-rw-r--r--spec/mspec/spec/matchers/have_singleton_method_spec.rb45
-rw-r--r--spec/mspec/spec/matchers/include_any_of_spec.rb42
-rw-r--r--spec/mspec/spec/matchers/include_spec.rb37
-rw-r--r--spec/mspec/spec/matchers/infinity_spec.rb34
-rw-r--r--spec/mspec/spec/matchers/match_yaml_spec.rb39
-rw-r--r--spec/mspec/spec/matchers/output_spec.rb84
-rw-r--r--spec/mspec/spec/matchers/output_to_fd_spec.rb44
-rw-r--r--spec/mspec/spec/matchers/raise_error_spec.rb183
-rw-r--r--spec/mspec/spec/matchers/respond_to_spec.rb33
-rw-r--r--spec/mspec/spec/matchers/signed_zero_spec.rb32
-rw-r--r--spec/mspec/spec/mocks/mock_spec.rb529
-rw-r--r--spec/mspec/spec/mocks/proxy_spec.rb405
-rw-r--r--spec/mspec/spec/runner/actions/filter_spec.rb84
-rw-r--r--spec/mspec/spec/runner/actions/tag_spec.rb313
-rw-r--r--spec/mspec/spec/runner/actions/taglist_spec.rb152
-rw-r--r--spec/mspec/spec/runner/actions/tagpurge_spec.rb154
-rw-r--r--spec/mspec/spec/runner/actions/tally_spec.rb355
-rw-r--r--spec/mspec/spec/runner/actions/timer_spec.rb44
-rw-r--r--spec/mspec/spec/runner/context_spec.rb1028
-rw-r--r--spec/mspec/spec/runner/example_spec.rb117
-rw-r--r--spec/mspec/spec/runner/exception_spec.rb146
-rw-r--r--spec/mspec/spec/runner/filters/a.yaml4
-rw-r--r--spec/mspec/spec/runner/filters/b.yaml11
-rw-r--r--spec/mspec/spec/runner/filters/match_spec.rb34
-rw-r--r--spec/mspec/spec/runner/filters/profile_spec.rb117
-rw-r--r--spec/mspec/spec/runner/filters/regexp_spec.rb31
-rw-r--r--spec/mspec/spec/runner/filters/tag_spec.rb92
-rw-r--r--spec/mspec/spec/runner/formatters/describe_spec.rb67
-rw-r--r--spec/mspec/spec/runner/formatters/dotted_spec.rb284
-rw-r--r--spec/mspec/spec/runner/formatters/file_spec.rb84
-rw-r--r--spec/mspec/spec/runner/formatters/html_spec.rb220
-rw-r--r--spec/mspec/spec/runner/formatters/junit_spec.rb159
-rw-r--r--spec/mspec/spec/runner/formatters/method_spec.rb177
-rw-r--r--spec/mspec/spec/runner/formatters/multi_spec.rb68
-rw-r--r--spec/mspec/spec/runner/formatters/specdoc_spec.rb106
-rw-r--r--spec/mspec/spec/runner/formatters/spinner_spec.rb83
-rw-r--r--spec/mspec/spec/runner/formatters/summary_spec.rb26
-rw-r--r--spec/mspec/spec/runner/formatters/unit_spec.rb73
-rw-r--r--spec/mspec/spec/runner/formatters/yaml_spec.rb134
-rw-r--r--spec/mspec/spec/runner/mspec_spec.rb597
-rw-r--r--spec/mspec/spec/runner/shared_spec.rb90
-rw-r--r--spec/mspec/spec/runner/tag_spec.rb123
-rw-r--r--spec/mspec/spec/runner/tags.txt4
-rw-r--r--spec/mspec/spec/spec_helper.rb70
-rw-r--r--spec/mspec/spec/utils/deprecate_spec.rb17
-rw-r--r--spec/mspec/spec/utils/fixtures/this_file_raises.rb1
-rw-r--r--spec/mspec/spec/utils/fixtures/this_file_raises2.rb1
-rw-r--r--spec/mspec/spec/utils/name_map_spec.rb187
-rw-r--r--spec/mspec/spec/utils/options_spec.rb1302
-rw-r--r--spec/mspec/spec/utils/script_spec.rb470
-rw-r--r--spec/mspec/spec/utils/version_spec.rb45
-rwxr-xr-xspec/mspec/tool/check_require_spec_helper.rb34
-rwxr-xr-xspec/mspec/tool/find.rb10
-rwxr-xr-xspec/mspec/tool/pull-latest-mspec-spec26
-rwxr-xr-xspec/mspec/tool/remove_old_guards.rb138
-rw-r--r--spec/mspec/tool/sync/.gitignore4
-rw-r--r--spec/mspec/tool/sync/sync-rubyspec.rb265
-rwxr-xr-xspec/mspec/tool/tag_from_output.rb65
-rwxr-xr-xspec/mspec/tool/wrap_with_guard.rb28
-rw-r--r--spec/ruby/.gitignore5
-rw-r--r--spec/ruby/.mspec.constants236
-rw-r--r--spec/ruby/.rubocop.yml208
-rw-r--r--spec/ruby/.rubocop_todo.yml122
-rw-r--r--spec/ruby/CONTRIBUTING.md298
-rw-r--r--spec/ruby/LICENSE22
-rw-r--r--spec/ruby/README.md166
-rw-r--r--spec/ruby/TODO8
-rwxr-xr-xspec/ruby/bin/rubocop12
-rw-r--r--spec/ruby/command_line/backtrace_limit_spec.rb93
-rwxr-xr-xspec/ruby/command_line/dash_0_spec.rb13
-rw-r--r--spec/ruby/command_line/dash_a_spec.rb19
-rw-r--r--spec/ruby/command_line/dash_c_spec.rb13
-rw-r--r--spec/ruby/command_line/dash_d_spec.rb22
-rw-r--r--spec/ruby/command_line/dash_e_spec.rb41
-rw-r--r--spec/ruby/command_line/dash_encoding_spec.rb36
-rw-r--r--spec/ruby/command_line/dash_external_encoding_spec.rb15
-rw-r--r--spec/ruby/command_line/dash_internal_encoding_spec.rb15
-rw-r--r--spec/ruby/command_line/dash_l_spec.rb31
-rw-r--r--spec/ruby/command_line/dash_n_spec.rb36
-rw-r--r--spec/ruby/command_line/dash_p_spec.rb19
-rw-r--r--spec/ruby/command_line/dash_r_spec.rb31
-rw-r--r--spec/ruby/command_line/dash_s_spec.rb52
-rw-r--r--spec/ruby/command_line/dash_upper_c_spec.rb6
-rw-r--r--spec/ruby/command_line/dash_upper_e_spec.rb37
-rw-r--r--spec/ruby/command_line/dash_upper_f_spec.rb13
-rw-r--r--spec/ruby/command_line/dash_upper_i_spec.rb51
-rw-r--r--spec/ruby/command_line/dash_upper_k_spec.rb65
-rw-r--r--spec/ruby/command_line/dash_upper_s_spec.rb29
-rw-r--r--spec/ruby/command_line/dash_upper_u_spec.rb52
-rw-r--r--spec/ruby/command_line/dash_upper_w_spec.rb44
-rw-r--r--spec/ruby/command_line/dash_upper_x_spec.rb6
-rw-r--r--spec/ruby/command_line/dash_v_spec.rb15
-rw-r--r--spec/ruby/command_line/dash_w_spec.rb10
-rw-r--r--spec/ruby/command_line/dash_x_spec.rb21
-rw-r--r--spec/ruby/command_line/error_message_spec.rb11
-rw-r--r--spec/ruby/command_line/feature_spec.rb71
-rw-r--r--spec/ruby/command_line/fixtures/backtrace.rb35
-rw-r--r--spec/ruby/command_line/fixtures/bad_syntax.rb1
-rw-r--r--spec/ruby/command_line/fixtures/bin/bad_embedded_ruby.txt3
-rw-r--r--spec/ruby/command_line/fixtures/bin/dash_s_fail1
-rw-r--r--spec/ruby/command_line/fixtures/bin/embedded_ruby.txt3
-rw-r--r--spec/ruby/command_line/fixtures/bin/hybrid_launcher.sh4
-rwxr-xr-xspec/ruby/command_line/fixtures/bin/launcher.rb2
-rw-r--r--spec/ruby/command_line/fixtures/change_directory_script.rb1
-rw-r--r--spec/ruby/command_line/fixtures/conditional_range.txt5
-rw-r--r--spec/ruby/command_line/fixtures/dash_s_script.rb12
-rw-r--r--spec/ruby/command_line/fixtures/debug.rb10
-rw-r--r--spec/ruby/command_line/fixtures/debug_info.rb10
-rw-r--r--spec/ruby/command_line/fixtures/freeze_flag_across_files.rb3
-rw-r--r--spec/ruby/command_line/fixtures/freeze_flag_across_files_diff_enc.rb3
-rw-r--r--spec/ruby/command_line/fixtures/freeze_flag_one_literal.rb2
-rw-r--r--spec/ruby/command_line/fixtures/freeze_flag_required.rb1
-rw-r--r--spec/ruby/command_line/fixtures/freeze_flag_required_diff_enc.rb3
-rw-r--r--spec/ruby/command_line/fixtures/freeze_flag_two_literals.rb1
-rw-r--r--spec/ruby/command_line/fixtures/full_names.txt3
-rw-r--r--spec/ruby/command_line/fixtures/loadpath.rb1
-rw-r--r--spec/ruby/command_line/fixtures/names.txt3
-rw-r--r--spec/ruby/command_line/fixtures/passwd_file.txt3
-rw-r--r--spec/ruby/command_line/fixtures/require.rb1
-rw-r--r--spec/ruby/command_line/fixtures/rubyopt.rb1
-rw-r--r--spec/ruby/command_line/fixtures/string_literal_frozen_comment.rb4
-rw-r--r--spec/ruby/command_line/fixtures/string_literal_mutable_comment.rb4
-rw-r--r--spec/ruby/command_line/fixtures/string_literal_raw.rb3
-rw-r--r--spec/ruby/command_line/fixtures/test_file.rb1
-rw-r--r--spec/ruby/command_line/fixtures/verbose.rb1
-rw-r--r--spec/ruby/command_line/frozen_strings_spec.rb94
-rw-r--r--spec/ruby/command_line/rubylib_spec.rb69
-rw-r--r--spec/ruby/command_line/rubyopt_spec.rb185
-rw-r--r--spec/ruby/command_line/shared/change_directory.rb21
-rw-r--r--spec/ruby/command_line/shared/verbose.rb9
-rw-r--r--spec/ruby/command_line/syntax_error_spec.rb19
-rw-r--r--spec/ruby/core/argf/argf_spec.rb11
-rw-r--r--spec/ruby/core/argf/argv_spec.rb19
-rw-r--r--spec/ruby/core/argf/binmode_spec.rb43
-rw-r--r--spec/ruby/core/argf/close_spec.rb35
-rw-r--r--spec/ruby/core/argf/closed_spec.rb18
-rw-r--r--spec/ruby/core/argf/each_byte_spec.rb6
-rw-r--r--spec/ruby/core/argf/each_char_spec.rb6
-rw-r--r--spec/ruby/core/argf/each_codepoint_spec.rb6
-rw-r--r--spec/ruby/core/argf/each_line_spec.rb6
-rw-r--r--spec/ruby/core/argf/each_spec.rb6
-rw-r--r--spec/ruby/core/argf/eof_spec.rb10
-rw-r--r--spec/ruby/core/argf/file_spec.rb21
-rw-r--r--spec/ruby/core/argf/filename_spec.rb6
-rw-r--r--spec/ruby/core/argf/fileno_spec.rb6
-rw-r--r--spec/ruby/core/argf/fixtures/bin_file.txt2
-rw-r--r--spec/ruby/core/argf/fixtures/file1.txt2
-rw-r--r--spec/ruby/core/argf/fixtures/file2.txt2
-rw-r--r--spec/ruby/core/argf/fixtures/filename.rb3
-rw-r--r--spec/ruby/core/argf/fixtures/lineno.rb5
-rw-r--r--spec/ruby/core/argf/fixtures/rewind.rb5
-rw-r--r--spec/ruby/core/argf/fixtures/stdin.txt2
-rw-r--r--spec/ruby/core/argf/getc_spec.rb20
-rw-r--r--spec/ruby/core/argf/gets_spec.rb49
-rw-r--r--spec/ruby/core/argf/lineno_spec.rb30
-rw-r--r--spec/ruby/core/argf/path_spec.rb6
-rw-r--r--spec/ruby/core/argf/pos_spec.rb38
-rw-r--r--spec/ruby/core/argf/read_nonblock_spec.rb80
-rw-r--r--spec/ruby/core/argf/read_spec.rb85
-rw-r--r--spec/ruby/core/argf/readchar_spec.rb19
-rw-r--r--spec/ruby/core/argf/readline_spec.rb23
-rw-r--r--spec/ruby/core/argf/readlines_spec.rb6
-rw-r--r--spec/ruby/core/argf/readpartial_spec.rb75
-rw-r--r--spec/ruby/core/argf/rewind_spec.rb39
-rw-r--r--spec/ruby/core/argf/seek_spec.rb63
-rw-r--r--spec/ruby/core/argf/set_encoding_spec.rb41
-rw-r--r--spec/ruby/core/argf/shared/each_byte.rb58
-rw-r--r--spec/ruby/core/argf/shared/each_char.rb58
-rw-r--r--spec/ruby/core/argf/shared/each_codepoint.rb58
-rw-r--r--spec/ruby/core/argf/shared/each_line.rb62
-rw-r--r--spec/ruby/core/argf/shared/eof.rb24
-rw-r--r--spec/ruby/core/argf/shared/filename.rb28
-rw-r--r--spec/ruby/core/argf/shared/fileno.rb24
-rw-r--r--spec/ruby/core/argf/shared/getc.rb17
-rw-r--r--spec/ruby/core/argf/shared/gets.rb99
-rw-r--r--spec/ruby/core/argf/shared/pos.rb31
-rw-r--r--spec/ruby/core/argf/shared/read.rb58
-rw-r--r--spec/ruby/core/argf/shared/readlines.rb22
-rw-r--r--spec/ruby/core/argf/skip_spec.rb42
-rw-r--r--spec/ruby/core/argf/tell_spec.rb6
-rw-r--r--spec/ruby/core/argf/to_a_spec.rb6
-rw-r--r--spec/ruby/core/argf/to_i_spec.rb6
-rw-r--r--spec/ruby/core/argf/to_io_spec.rb23
-rw-r--r--spec/ruby/core/argf/to_s_spec.rb14
-rw-r--r--spec/ruby/core/array/all_spec.rb13
-rw-r--r--spec/ruby/core/array/allocate_spec.rb19
-rw-r--r--spec/ruby/core/array/any_spec.rb49
-rw-r--r--spec/ruby/core/array/append_spec.rb40
-rw-r--r--spec/ruby/core/array/array_spec.rb7
-rw-r--r--spec/ruby/core/array/assoc_spec.rb52
-rw-r--r--spec/ruby/core/array/at_spec.rb56
-rw-r--r--spec/ruby/core/array/bsearch_index_spec.rb81
-rw-r--r--spec/ruby/core/array/bsearch_spec.rb84
-rw-r--r--spec/ruby/core/array/clear_spec.rb32
-rw-r--r--spec/ruby/core/array/clone_spec.rb31
-rw-r--r--spec/ruby/core/array/collect_spec.rb11
-rw-r--r--spec/ruby/core/array/combination_spec.rb74
-rw-r--r--spec/ruby/core/array/compact_spec.rb51
-rw-r--r--spec/ruby/core/array/comparison_spec.rb97
-rw-r--r--spec/ruby/core/array/concat_spec.rb74
-rw-r--r--spec/ruby/core/array/constructor_spec.rb24
-rw-r--r--spec/ruby/core/array/count_spec.rb26
-rw-r--r--spec/ruby/core/array/cycle_spec.rb101
-rw-r--r--spec/ruby/core/array/deconstruct_spec.rb9
-rw-r--r--spec/ruby/core/array/delete_at_spec.rb41
-rw-r--r--spec/ruby/core/array/delete_if_spec.rb82
-rw-r--r--spec/ruby/core/array/delete_spec.rb46
-rw-r--r--spec/ruby/core/array/difference_spec.rb22
-rw-r--r--spec/ruby/core/array/dig_spec.rb52
-rw-r--r--spec/ruby/core/array/drop_spec.rb56
-rw-r--r--spec/ruby/core/array/drop_while_spec.rb24
-rw-r--r--spec/ruby/core/array/dup_spec.rb31
-rw-r--r--spec/ruby/core/array/each_index_spec.rb58
-rw-r--r--spec/ruby/core/array/each_spec.rb82
-rw-r--r--spec/ruby/core/array/element_reference_spec.rb50
-rw-r--r--spec/ruby/core/array/element_set_spec.rb537
-rw-r--r--spec/ruby/core/array/empty_spec.rb10
-rw-r--r--spec/ruby/core/array/eql_spec.rb19
-rw-r--r--spec/ruby/core/array/equal_value_spec.rb51
-rw-r--r--spec/ruby/core/array/fetch_spec.rb55
-rw-r--r--spec/ruby/core/array/fetch_values_spec.rb55
-rw-r--r--spec/ruby/core/array/fill_spec.rb374
-rw-r--r--spec/ruby/core/array/filter_spec.rb14
-rw-r--r--spec/ruby/core/array/find_index_spec.rb6
-rw-r--r--spec/ruby/core/array/first_spec.rb93
-rw-r--r--spec/ruby/core/array/fixtures/classes.rb592
-rw-r--r--spec/ruby/core/array/fixtures/encoded_strings.rb69
-rw-r--r--spec/ruby/core/array/flatten_spec.rb266
-rw-r--r--spec/ruby/core/array/frozen_spec.rb16
-rw-r--r--spec/ruby/core/array/hash_spec.rb83
-rw-r--r--spec/ruby/core/array/include_spec.rb33
-rw-r--r--spec/ruby/core/array/index_spec.rb6
-rw-r--r--spec/ruby/core/array/initialize_spec.rb158
-rw-r--r--spec/ruby/core/array/insert_spec.rb78
-rw-r--r--spec/ruby/core/array/inspect_spec.rb7
-rw-r--r--spec/ruby/core/array/intersect_spec.rb64
-rw-r--r--spec/ruby/core/array/intersection_spec.rb19
-rw-r--r--spec/ruby/core/array/join_spec.rb50
-rw-r--r--spec/ruby/core/array/keep_if_spec.rb11
-rw-r--r--spec/ruby/core/array/last_spec.rb87
-rw-r--r--spec/ruby/core/array/length_spec.rb7
-rw-r--r--spec/ruby/core/array/map_spec.rb11
-rw-r--r--spec/ruby/core/array/max_spec.rb116
-rw-r--r--spec/ruby/core/array/min_spec.rb121
-rw-r--r--spec/ruby/core/array/minmax_spec.rb14
-rw-r--r--spec/ruby/core/array/minus_spec.rb7
-rw-r--r--spec/ruby/core/array/multiply_spec.rb94
-rw-r--r--spec/ruby/core/array/new_spec.rb124
-rw-r--r--spec/ruby/core/array/none_spec.rb13
-rw-r--r--spec/ruby/core/array/one_spec.rb13
-rw-r--r--spec/ruby/core/array/pack/a_spec.rb73
-rw-r--r--spec/ruby/core/array/pack/at_spec.rb30
-rw-r--r--spec/ruby/core/array/pack/b_spec.rb113
-rw-r--r--spec/ruby/core/array/pack/buffer_spec.rb60
-rw-r--r--spec/ruby/core/array/pack/c_spec.rb87
-rw-r--r--spec/ruby/core/array/pack/comment_spec.rb25
-rw-r--r--spec/ruby/core/array/pack/d_spec.rb39
-rw-r--r--spec/ruby/core/array/pack/e_spec.rb25
-rw-r--r--spec/ruby/core/array/pack/empty_spec.rb11
-rw-r--r--spec/ruby/core/array/pack/f_spec.rb39
-rw-r--r--spec/ruby/core/array/pack/g_spec.rb25
-rw-r--r--spec/ruby/core/array/pack/h_spec.rb205
-rw-r--r--spec/ruby/core/array/pack/i_spec.rb133
-rw-r--r--spec/ruby/core/array/pack/j_spec.rb217
-rw-r--r--spec/ruby/core/array/pack/l_spec.rb221
-rw-r--r--spec/ruby/core/array/pack/m_spec.rb317
-rw-r--r--spec/ruby/core/array/pack/n_spec.rb25
-rw-r--r--spec/ruby/core/array/pack/p_spec.rb38
-rw-r--r--spec/ruby/core/array/pack/percent_spec.rb7
-rw-r--r--spec/ruby/core/array/pack/q_spec.rb61
-rw-r--r--spec/ruby/core/array/pack/s_spec.rb133
-rw-r--r--spec/ruby/core/array/pack/shared/basic.rb84
-rw-r--r--spec/ruby/core/array/pack/shared/encodings.rb16
-rw-r--r--spec/ruby/core/array/pack/shared/float.rb295
-rw-r--r--spec/ruby/core/array/pack/shared/integer.rb453
-rw-r--r--spec/ruby/core/array/pack/shared/numeric_basic.rb50
-rw-r--r--spec/ruby/core/array/pack/shared/string.rb48
-rw-r--r--spec/ruby/core/array/pack/shared/taint.rb2
-rw-r--r--spec/ruby/core/array/pack/shared/unicode.rb106
-rw-r--r--spec/ruby/core/array/pack/u_spec.rb140
-rw-r--r--spec/ruby/core/array/pack/v_spec.rb25
-rw-r--r--spec/ruby/core/array/pack/w_spec.rb54
-rw-r--r--spec/ruby/core/array/pack/x_spec.rb65
-rw-r--r--spec/ruby/core/array/pack/z_spec.rb44
-rw-r--r--spec/ruby/core/array/partition_spec.rb43
-rw-r--r--spec/ruby/core/array/permutation_spec.rb138
-rw-r--r--spec/ruby/core/array/plus_spec.rb56
-rw-r--r--spec/ruby/core/array/pop_spec.rb124
-rw-r--r--spec/ruby/core/array/prepend_spec.rb7
-rw-r--r--spec/ruby/core/array/product_spec.rb73
-rw-r--r--spec/ruby/core/array/push_spec.rb7
-rw-r--r--spec/ruby/core/array/rassoc_spec.rb52
-rw-r--r--spec/ruby/core/array/reject_spec.rb158
-rw-r--r--spec/ruby/core/array/repeated_combination_spec.rb84
-rw-r--r--spec/ruby/core/array/repeated_permutation_spec.rb94
-rw-r--r--spec/ruby/core/array/replace_spec.rb7
-rw-r--r--spec/ruby/core/array/reverse_each_spec.rb57
-rw-r--r--spec/ruby/core/array/reverse_spec.rb42
-rw-r--r--spec/ruby/core/array/rindex_spec.rb95
-rw-r--r--spec/ruby/core/array/rotate_spec.rb129
-rw-r--r--spec/ruby/core/array/sample_spec.rb155
-rw-r--r--spec/ruby/core/array/select_spec.rb14
-rw-r--r--spec/ruby/core/array/shared/clone.rb20
-rw-r--r--spec/ruby/core/array/shared/collect.rb141
-rw-r--r--spec/ruby/core/array/shared/delete_if.rb13
-rw-r--r--spec/ruby/core/array/shared/difference.rb78
-rw-r--r--spec/ruby/core/array/shared/enumeratorize.rb5
-rw-r--r--spec/ruby/core/array/shared/eql.rb92
-rw-r--r--spec/ruby/core/array/shared/index.rb41
-rw-r--r--spec/ruby/core/array/shared/inspect.rb107
-rw-r--r--spec/ruby/core/array/shared/intersection.rb85
-rw-r--r--spec/ruby/core/array/shared/iterable_and_tolerating_size_increasing.rb25
-rw-r--r--spec/ruby/core/array/shared/join.rb112
-rw-r--r--spec/ruby/core/array/shared/keep_if.rb95
-rw-r--r--spec/ruby/core/array/shared/length.rb11
-rw-r--r--spec/ruby/core/array/shared/push.rb33
-rw-r--r--spec/ruby/core/array/shared/replace.rb60
-rw-r--r--spec/ruby/core/array/shared/select.rb35
-rw-r--r--spec/ruby/core/array/shared/slice.rb857
-rw-r--r--spec/ruby/core/array/shared/union.rb79
-rw-r--r--spec/ruby/core/array/shared/unshift.rb64
-rw-r--r--spec/ruby/core/array/shift_spec.rb120
-rw-r--r--spec/ruby/core/array/shuffle_spec.rb119
-rw-r--r--spec/ruby/core/array/size_spec.rb7
-rw-r--r--spec/ruby/core/array/slice_spec.rb218
-rw-r--r--spec/ruby/core/array/sort_by_spec.rb85
-rw-r--r--spec/ruby/core/array/sort_spec.rb252
-rw-r--r--spec/ruby/core/array/sum_spec.rb90
-rw-r--r--spec/ruby/core/array/take_spec.rb32
-rw-r--r--spec/ruby/core/array/take_while_spec.rb26
-rw-r--r--spec/ruby/core/array/to_a_spec.rb24
-rw-r--r--spec/ruby/core/array/to_ary_spec.rb20
-rw-r--r--spec/ruby/core/array/to_h_spec.rb91
-rw-r--r--spec/ruby/core/array/to_s_spec.rb8
-rw-r--r--spec/ruby/core/array/transpose_spec.rb53
-rw-r--r--spec/ruby/core/array/try_convert_spec.rb50
-rw-r--r--spec/ruby/core/array/union_spec.rb25
-rw-r--r--spec/ruby/core/array/uniq_spec.rb243
-rw-r--r--spec/ruby/core/array/unshift_spec.rb7
-rw-r--r--spec/ruby/core/array/values_at_spec.rb74
-rw-r--r--spec/ruby/core/array/zip_spec.rb71
-rw-r--r--spec/ruby/core/basicobject/__id__spec.rb6
-rw-r--r--spec/ruby/core/basicobject/__send___spec.rb10
-rw-r--r--spec/ruby/core/basicobject/basicobject_spec.rb91
-rw-r--r--spec/ruby/core/basicobject/equal_spec.rb54
-rw-r--r--spec/ruby/core/basicobject/equal_value_spec.rb10
-rw-r--r--spec/ruby/core/basicobject/fixtures/classes.rb255
-rw-r--r--spec/ruby/core/basicobject/fixtures/common.rb9
-rw-r--r--spec/ruby/core/basicobject/fixtures/remove_method_missing.rb9
-rw-r--r--spec/ruby/core/basicobject/fixtures/singleton_method.rb10
-rw-r--r--spec/ruby/core/basicobject/initialize_spec.rb13
-rw-r--r--spec/ruby/core/basicobject/instance_eval_spec.rb329
-rw-r--r--spec/ruby/core/basicobject/instance_exec_spec.rb107
-rw-r--r--spec/ruby/core/basicobject/method_missing_spec.rb40
-rw-r--r--spec/ruby/core/basicobject/not_equal_spec.rb53
-rw-r--r--spec/ruby/core/basicobject/not_spec.rb11
-rw-r--r--spec/ruby/core/basicobject/singleton_method_added_spec.rb147
-rw-r--r--spec/ruby/core/basicobject/singleton_method_removed_spec.rb24
-rw-r--r--spec/ruby/core/basicobject/singleton_method_undefined_spec.rb24
-rw-r--r--spec/ruby/core/binding/clone_spec.rb13
-rw-r--r--spec/ruby/core/binding/dup_spec.rb30
-rw-r--r--spec/ruby/core/binding/eval_spec.rb115
-rw-r--r--spec/ruby/core/binding/fixtures/classes.rb66
-rw-r--r--spec/ruby/core/binding/fixtures/location.rb6
-rw-r--r--spec/ruby/core/binding/local_variable_defined_spec.rb46
-rw-r--r--spec/ruby/core/binding/local_variable_get_spec.rb56
-rw-r--r--spec/ruby/core/binding/local_variable_set_spec.rb71
-rw-r--r--spec/ruby/core/binding/local_variables_spec.rb35
-rw-r--r--spec/ruby/core/binding/receiver_spec.rb11
-rw-r--r--spec/ruby/core/binding/shared/clone.rb56
-rw-r--r--spec/ruby/core/binding/source_location_spec.rb14
-rw-r--r--spec/ruby/core/builtin_constants/builtin_constants_spec.rb151
-rw-r--r--spec/ruby/core/class/allocate_spec.rb41
-rw-r--r--spec/ruby/core/class/attached_object_spec.rb29
-rw-r--r--spec/ruby/core/class/dup_spec.rb69
-rw-r--r--spec/ruby/core/class/fixtures/classes.rb47
-rw-r--r--spec/ruby/core/class/inherited_spec.rb118
-rw-r--r--spec/ruby/core/class/initialize_spec.rb34
-rw-r--r--spec/ruby/core/class/new_spec.rb157
-rw-r--r--spec/ruby/core/class/subclasses_spec.rb85
-rw-r--r--spec/ruby/core/class/superclass_spec.rb27
-rw-r--r--spec/ruby/core/comparable/between_spec.rb25
-rw-r--r--spec/ruby/core/comparable/clamp_spec.rb223
-rw-r--r--spec/ruby/core/comparable/equal_value_spec.rb114
-rw-r--r--spec/ruby/core/comparable/fixtures/classes.rb37
-rw-r--r--spec/ruby/core/comparable/gt_spec.rb43
-rw-r--r--spec/ruby/core/comparable/gte_spec.rb47
-rw-r--r--spec/ruby/core/comparable/lt_spec.rb49
-rw-r--r--spec/ruby/core/comparable/lte_spec.rb46
-rw-r--r--spec/ruby/core/complex/abs2_spec.rb9
-rw-r--r--spec/ruby/core/complex/abs_spec.rb6
-rw-r--r--spec/ruby/core/complex/angle_spec.rb6
-rw-r--r--spec/ruby/core/complex/arg_spec.rb6
-rw-r--r--spec/ruby/core/complex/coerce_spec.rb70
-rw-r--r--spec/ruby/core/complex/comparison_spec.rb25
-rw-r--r--spec/ruby/core/complex/conj_spec.rb6
-rw-r--r--spec/ruby/core/complex/conjugate_spec.rb6
-rw-r--r--spec/ruby/core/complex/constants_spec.rb7
-rw-r--r--spec/ruby/core/complex/denominator_spec.rb13
-rw-r--r--spec/ruby/core/complex/divide_spec.rb6
-rw-r--r--spec/ruby/core/complex/eql_spec.rb31
-rw-r--r--spec/ruby/core/complex/equal_value_spec.rb93
-rw-r--r--spec/ruby/core/complex/exponent_spec.rb61
-rw-r--r--spec/ruby/core/complex/fdiv_spec.rb129
-rw-r--r--spec/ruby/core/complex/finite_spec.rb32
-rw-r--r--spec/ruby/core/complex/hash_spec.rb16
-rw-r--r--spec/ruby/core/complex/imag_spec.rb6
-rw-r--r--spec/ruby/core/complex/imaginary_spec.rb6
-rw-r--r--spec/ruby/core/complex/infinite_spec.rb32
-rw-r--r--spec/ruby/core/complex/inspect_spec.rb37
-rw-r--r--spec/ruby/core/complex/integer_spec.rb11
-rw-r--r--spec/ruby/core/complex/magnitude_spec.rb6
-rw-r--r--spec/ruby/core/complex/marshal_dump_spec.rb11
-rw-r--r--spec/ruby/core/complex/minus_spec.rb45
-rw-r--r--spec/ruby/core/complex/multiply_spec.rb49
-rw-r--r--spec/ruby/core/complex/negative_spec.rb13
-rw-r--r--spec/ruby/core/complex/numerator_spec.rb19
-rw-r--r--spec/ruby/core/complex/phase_spec.rb6
-rw-r--r--spec/ruby/core/complex/plus_spec.rb45
-rw-r--r--spec/ruby/core/complex/polar_spec.rb41
-rw-r--r--spec/ruby/core/complex/positive_spec.rb13
-rw-r--r--spec/ruby/core/complex/quo_spec.rb6
-rw-r--r--spec/ruby/core/complex/rationalize_spec.rb31
-rw-r--r--spec/ruby/core/complex/real_spec.rb28
-rw-r--r--spec/ruby/core/complex/rect_spec.rb10
-rw-r--r--spec/ruby/core/complex/rectangular_spec.rb10
-rw-r--r--spec/ruby/core/complex/shared/abs.rb10
-rw-r--r--spec/ruby/core/complex/shared/arg.rb9
-rw-r--r--spec/ruby/core/complex/shared/conjugate.rb8
-rw-r--r--spec/ruby/core/complex/shared/divide.rb82
-rw-r--r--spec/ruby/core/complex/shared/image.rb8
-rw-r--r--spec/ruby/core/complex/shared/rect.rb94
-rw-r--r--spec/ruby/core/complex/to_c_spec.rb12
-rw-r--r--spec/ruby/core/complex/to_f_spec.rb41
-rw-r--r--spec/ruby/core/complex/to_i_spec.rb41
-rw-r--r--spec/ruby/core/complex/to_r_spec.rb49
-rw-r--r--spec/ruby/core/complex/to_s_spec.rb55
-rw-r--r--spec/ruby/core/complex/uminus_spec.rb11
-rw-r--r--spec/ruby/core/conditionvariable/broadcast_spec.rb39
-rw-r--r--spec/ruby/core/conditionvariable/marshal_dump_spec.rb8
-rw-r--r--spec/ruby/core/conditionvariable/signal_spec.rb76
-rw-r--r--spec/ruby/core/conditionvariable/wait_spec.rb174
-rw-r--r--spec/ruby/core/data/constants_spec.rb11
-rw-r--r--spec/ruby/core/data/deconstruct_keys_spec.rb130
-rw-r--r--spec/ruby/core/data/deconstruct_spec.rb8
-rw-r--r--spec/ruby/core/data/define_spec.rb34
-rw-r--r--spec/ruby/core/data/eql_spec.rb63
-rw-r--r--spec/ruby/core/data/equal_value_spec.rb63
-rw-r--r--spec/ruby/core/data/fixtures/classes.rb34
-rw-r--r--spec/ruby/core/data/hash_spec.rb25
-rw-r--r--spec/ruby/core/data/initialize_spec.rb124
-rw-r--r--spec/ruby/core/data/inspect_spec.rb6
-rw-r--r--spec/ruby/core/data/members_spec.rb21
-rw-r--r--spec/ruby/core/data/shared/inspect.rb62
-rw-r--r--spec/ruby/core/data/to_h_spec.rb63
-rw-r--r--spec/ruby/core/data/to_s_spec.rb6
-rw-r--r--spec/ruby/core/data/with_spec.rb57
-rw-r--r--spec/ruby/core/dir/chdir_spec.rb220
-rw-r--r--spec/ruby/core/dir/children_spec.rb147
-rw-r--r--spec/ruby/core/dir/chroot_spec.rb47
-rw-r--r--spec/ruby/core/dir/close_spec.rb53
-rw-r--r--spec/ruby/core/dir/delete_spec.rb15
-rw-r--r--spec/ruby/core/dir/dir_spec.rb7
-rw-r--r--spec/ruby/core/dir/each_child_spec.rb119
-rw-r--r--spec/ruby/core/dir/each_spec.rb75
-rw-r--r--spec/ruby/core/dir/element_reference_spec.rb33
-rw-r--r--spec/ruby/core/dir/empty_spec.rb31
-rw-r--r--spec/ruby/core/dir/entries_spec.rb70
-rw-r--r--spec/ruby/core/dir/exist_spec.rb21
-rw-r--r--spec/ruby/core/dir/fchdir_spec.rb73
-rw-r--r--spec/ruby/core/dir/fileno_spec.rb37
-rw-r--r--spec/ruby/core/dir/fixtures/common.rb198
-rw-r--r--spec/ruby/core/dir/for_fd_spec.rb79
-rw-r--r--spec/ruby/core/dir/foreach_spec.rb68
-rw-r--r--spec/ruby/core/dir/getwd_spec.rb15
-rw-r--r--spec/ruby/core/dir/glob_spec.rb362
-rw-r--r--spec/ruby/core/dir/home_spec.rb85
-rw-r--r--spec/ruby/core/dir/initialize_spec.rb23
-rw-r--r--spec/ruby/core/dir/inspect_spec.rb24
-rw-r--r--spec/ruby/core/dir/mkdir_spec.rb107
-rw-r--r--spec/ruby/core/dir/open_spec.rb15
-rw-r--r--spec/ruby/core/dir/path_spec.rb15
-rw-r--r--spec/ruby/core/dir/pos_spec.rb40
-rw-r--r--spec/ruby/core/dir/pwd_spec.rb39
-rw-r--r--spec/ruby/core/dir/read_spec.rb76
-rw-r--r--spec/ruby/core/dir/rewind_spec.rb36
-rw-r--r--spec/ruby/core/dir/rmdir_spec.rb15
-rw-r--r--spec/ruby/core/dir/seek_spec.rb19
-rw-r--r--spec/ruby/core/dir/shared/chroot.rb44
-rw-r--r--spec/ruby/core/dir/shared/closed.rb9
-rw-r--r--spec/ruby/core/dir/shared/delete.rb53
-rw-r--r--spec/ruby/core/dir/shared/exist.rb57
-rw-r--r--spec/ruby/core/dir/shared/glob.rb441
-rw-r--r--spec/ruby/core/dir/shared/open.rb73
-rw-r--r--spec/ruby/core/dir/shared/path.rb30
-rw-r--r--spec/ruby/core/dir/shared/pos.rb51
-rw-r--r--spec/ruby/core/dir/shared/pwd.rb45
-rw-r--r--spec/ruby/core/dir/tell_spec.rb18
-rw-r--r--spec/ruby/core/dir/to_path_spec.rb15
-rw-r--r--spec/ruby/core/dir/unlink_spec.rb15
-rw-r--r--spec/ruby/core/encoding/_dump_spec.rb5
-rw-r--r--spec/ruby/core/encoding/_load_spec.rb5
-rw-r--r--spec/ruby/core/encoding/aliases_spec.rb43
-rw-r--r--spec/ruby/core/encoding/ascii_compatible_spec.rb11
-rw-r--r--spec/ruby/core/encoding/compatible_spec.rb758
-rw-r--r--spec/ruby/core/encoding/converter/asciicompat_encoding_spec.rb37
-rw-r--r--spec/ruby/core/encoding/converter/constants_spec.rb131
-rw-r--r--spec/ruby/core/encoding/converter/convert_spec.rb46
-rw-r--r--spec/ruby/core/encoding/converter/convpath_spec.rb24
-rw-r--r--spec/ruby/core/encoding/converter/destination_encoding_spec.rb11
-rw-r--r--spec/ruby/core/encoding/converter/finish_spec.rb36
-rw-r--r--spec/ruby/core/encoding/converter/insert_output_spec.rb5
-rw-r--r--spec/ruby/core/encoding/converter/inspect_spec.rb13
-rw-r--r--spec/ruby/core/encoding/converter/last_error_spec.rb91
-rw-r--r--spec/ruby/core/encoding/converter/new_spec.rb119
-rw-r--r--spec/ruby/core/encoding/converter/primitive_convert_spec.rb216
-rw-r--r--spec/ruby/core/encoding/converter/primitive_errinfo_spec.rb69
-rw-r--r--spec/ruby/core/encoding/converter/putback_spec.rb56
-rw-r--r--spec/ruby/core/encoding/converter/replacement_spec.rb72
-rw-r--r--spec/ruby/core/encoding/converter/search_convpath_spec.rb30
-rw-r--r--spec/ruby/core/encoding/converter/source_encoding_spec.rb11
-rw-r--r--spec/ruby/core/encoding/default_external_spec.rb69
-rw-r--r--spec/ruby/core/encoding/default_internal_spec.rb74
-rw-r--r--spec/ruby/core/encoding/dummy_spec.rb14
-rw-r--r--spec/ruby/core/encoding/find_spec.rb82
-rw-r--r--spec/ruby/core/encoding/fixtures/classes.rb49
-rw-r--r--spec/ruby/core/encoding/inspect_spec.rb33
-rw-r--r--spec/ruby/core/encoding/invalid_byte_sequence_error/destination_encoding_name_spec.rb19
-rw-r--r--spec/ruby/core/encoding/invalid_byte_sequence_error/destination_encoding_spec.rb19
-rw-r--r--spec/ruby/core/encoding/invalid_byte_sequence_error/error_bytes_spec.rb31
-rw-r--r--spec/ruby/core/encoding/invalid_byte_sequence_error/incomplete_input_spec.rb28
-rw-r--r--spec/ruby/core/encoding/invalid_byte_sequence_error/readagain_bytes_spec.rb31
-rw-r--r--spec/ruby/core/encoding/invalid_byte_sequence_error/source_encoding_name_spec.rb29
-rw-r--r--spec/ruby/core/encoding/invalid_byte_sequence_error/source_encoding_spec.rb34
-rw-r--r--spec/ruby/core/encoding/list_spec.rb49
-rw-r--r--spec/ruby/core/encoding/locale_charmap_spec.rb56
-rw-r--r--spec/ruby/core/encoding/name_list_spec.rb23
-rw-r--r--spec/ruby/core/encoding/name_spec.rb6
-rw-r--r--spec/ruby/core/encoding/names_spec.rb35
-rw-r--r--spec/ruby/core/encoding/replicate_spec.rb88
-rw-r--r--spec/ruby/core/encoding/shared/name.rb15
-rw-r--r--spec/ruby/core/encoding/to_s_spec.rb6
-rw-r--r--spec/ruby/core/encoding/undefined_conversion_error/destination_encoding_name_spec.rb16
-rw-r--r--spec/ruby/core/encoding/undefined_conversion_error/destination_encoding_spec.rb16
-rw-r--r--spec/ruby/core/encoding/undefined_conversion_error/error_char_spec.rb28
-rw-r--r--spec/ruby/core/encoding/undefined_conversion_error/source_encoding_name_spec.rb29
-rw-r--r--spec/ruby/core/encoding/undefined_conversion_error/source_encoding_spec.rb30
-rw-r--r--spec/ruby/core/enumerable/all_spec.rb187
-rw-r--r--spec/ruby/core/enumerable/any_spec.rb200
-rw-r--r--spec/ruby/core/enumerable/chain_spec.rb23
-rw-r--r--spec/ruby/core/enumerable/chunk_spec.rb77
-rw-r--r--spec/ruby/core/enumerable/chunk_while_spec.rb42
-rw-r--r--spec/ruby/core/enumerable/collect_concat_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/collect_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/compact_spec.rb9
-rw-r--r--spec/ruby/core/enumerable/count_spec.rb59
-rw-r--r--spec/ruby/core/enumerable/cycle_spec.rb104
-rw-r--r--spec/ruby/core/enumerable/detect_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/drop_spec.rb43
-rw-r--r--spec/ruby/core/enumerable/drop_while_spec.rb50
-rw-r--r--spec/ruby/core/enumerable/each_cons_spec.rb103
-rw-r--r--spec/ruby/core/enumerable/each_entry_spec.rb41
-rw-r--r--spec/ruby/core/enumerable/each_slice_spec.rb105
-rw-r--r--spec/ruby/core/enumerable/each_with_index_spec.rb53
-rw-r--r--spec/ruby/core/enumerable/each_with_object_spec.rb41
-rw-r--r--spec/ruby/core/enumerable/entries_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/filter_map_spec.rb24
-rw-r--r--spec/ruby/core/enumerable/filter_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/find_all_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/find_index_spec.rb89
-rw-r--r--spec/ruby/core/enumerable/find_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/first_spec.rb28
-rw-r--r--spec/ruby/core/enumerable/fixtures/classes.rb350
-rw-r--r--spec/ruby/core/enumerable/flat_map_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/grep_spec.rb87
-rw-r--r--spec/ruby/core/enumerable/grep_v_spec.rb76
-rw-r--r--spec/ruby/core/enumerable/group_by_spec.rb37
-rw-r--r--spec/ruby/core/enumerable/include_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/inject_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/lazy_spec.rb10
-rw-r--r--spec/ruby/core/enumerable/map_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/max_by_spec.rb81
-rw-r--r--spec/ruby/core/enumerable/max_spec.rb119
-rw-r--r--spec/ruby/core/enumerable/member_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/min_by_spec.rb81
-rw-r--r--spec/ruby/core/enumerable/min_spec.rb123
-rw-r--r--spec/ruby/core/enumerable/minmax_by_spec.rb44
-rw-r--r--spec/ruby/core/enumerable/minmax_spec.rb20
-rw-r--r--spec/ruby/core/enumerable/none_spec.rb153
-rw-r--r--spec/ruby/core/enumerable/one_spec.rb154
-rw-r--r--spec/ruby/core/enumerable/partition_spec.rb20
-rw-r--r--spec/ruby/core/enumerable/reduce_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/reject_spec.rb25
-rw-r--r--spec/ruby/core/enumerable/reverse_each_spec.rb26
-rw-r--r--spec/ruby/core/enumerable/select_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/shared/collect.rb107
-rw-r--r--spec/ruby/core/enumerable/shared/collect_concat.rb54
-rw-r--r--spec/ruby/core/enumerable/shared/entries.rb16
-rw-r--r--spec/ruby/core/enumerable/shared/enumerable_enumeratorized.rb33
-rw-r--r--spec/ruby/core/enumerable/shared/enumeratorized.rb42
-rw-r--r--spec/ruby/core/enumerable/shared/find.rb77
-rw-r--r--spec/ruby/core/enumerable/shared/find_all.rb31
-rw-r--r--spec/ruby/core/enumerable/shared/include.rb34
-rw-r--r--spec/ruby/core/enumerable/shared/inject.rb142
-rw-r--r--spec/ruby/core/enumerable/shared/take.rb63
-rw-r--r--spec/ruby/core/enumerable/slice_after_spec.rb61
-rw-r--r--spec/ruby/core/enumerable/slice_before_spec.rb64
-rw-r--r--spec/ruby/core/enumerable/slice_when_spec.rb54
-rw-r--r--spec/ruby/core/enumerable/sort_by_spec.rb43
-rw-r--r--spec/ruby/core/enumerable/sort_spec.rb54
-rw-r--r--spec/ruby/core/enumerable/sum_spec.rb50
-rw-r--r--spec/ruby/core/enumerable/take_spec.rb13
-rw-r--r--spec/ruby/core/enumerable/take_while_spec.rb51
-rw-r--r--spec/ruby/core/enumerable/tally_spec.rb91
-rw-r--r--spec/ruby/core/enumerable/to_a_spec.rb7
-rw-r--r--spec/ruby/core/enumerable/to_h_spec.rb96
-rw-r--r--spec/ruby/core/enumerable/to_set_spec.rb30
-rw-r--r--spec/ruby/core/enumerable/uniq_spec.rb78
-rw-r--r--spec/ruby/core/enumerable/zip_spec.rb46
-rw-r--r--spec/ruby/core/enumerator/arithmetic_sequence/begin_spec.rb16
-rw-r--r--spec/ruby/core/enumerator/arithmetic_sequence/each_spec.rb17
-rw-r--r--spec/ruby/core/enumerator/arithmetic_sequence/end_spec.rb16
-rw-r--r--spec/ruby/core/enumerator/arithmetic_sequence/eq_spec.rb18
-rw-r--r--spec/ruby/core/enumerator/arithmetic_sequence/exclude_end_spec.rb17
-rw-r--r--spec/ruby/core/enumerator/arithmetic_sequence/first_spec.rb9
-rw-r--r--spec/ruby/core/enumerator/arithmetic_sequence/hash_spec.rb20
-rw-r--r--spec/ruby/core/enumerator/arithmetic_sequence/inspect_spec.rb20
-rw-r--r--spec/ruby/core/enumerator/arithmetic_sequence/last_spec.rb9
-rw-r--r--spec/ruby/core/enumerator/arithmetic_sequence/new_spec.rb17
-rw-r--r--spec/ruby/core/enumerator/arithmetic_sequence/size_spec.rb17
-rw-r--r--spec/ruby/core/enumerator/arithmetic_sequence/step_spec.rb11
-rw-r--r--spec/ruby/core/enumerator/chain/each_spec.rb15
-rw-r--r--spec/ruby/core/enumerator/chain/initialize_spec.rb31
-rw-r--r--spec/ruby/core/enumerator/chain/inspect_spec.rb18
-rw-r--r--spec/ruby/core/enumerator/chain/rewind_spec.rb51
-rw-r--r--spec/ruby/core/enumerator/chain/size_spec.rb22
-rw-r--r--spec/ruby/core/enumerator/each_spec.rb89
-rw-r--r--spec/ruby/core/enumerator/each_with_index_spec.rb36
-rw-r--r--spec/ruby/core/enumerator/each_with_object_spec.rb6
-rw-r--r--spec/ruby/core/enumerator/enum_for_spec.rb6
-rw-r--r--spec/ruby/core/enumerator/enumerator_spec.rb7
-rw-r--r--spec/ruby/core/enumerator/feed_spec.rb52
-rw-r--r--spec/ruby/core/enumerator/first_spec.rb7
-rw-r--r--spec/ruby/core/enumerator/fixtures/classes.rb15
-rw-r--r--spec/ruby/core/enumerator/fixtures/common.rb9
-rw-r--r--spec/ruby/core/enumerator/generator/each_spec.rb40
-rw-r--r--spec/ruby/core/enumerator/generator/initialize_spec.rb26
-rw-r--r--spec/ruby/core/enumerator/initialize_spec.rb57
-rw-r--r--spec/ruby/core/enumerator/inspect_spec.rb22
-rw-r--r--spec/ruby/core/enumerator/lazy/chunk_spec.rb67
-rw-r--r--spec/ruby/core/enumerator/lazy/chunk_while_spec.rb14
-rw-r--r--spec/ruby/core/enumerator/lazy/collect_concat_spec.rb8
-rw-r--r--spec/ruby/core/enumerator/lazy/collect_spec.rb8
-rw-r--r--spec/ruby/core/enumerator/lazy/compact_spec.rb14
-rw-r--r--spec/ruby/core/enumerator/lazy/drop_spec.rb58
-rw-r--r--spec/ruby/core/enumerator/lazy/drop_while_spec.rb66
-rw-r--r--spec/ruby/core/enumerator/lazy/eager_spec.rb27
-rw-r--r--spec/ruby/core/enumerator/lazy/enum_for_spec.rb8
-rw-r--r--spec/ruby/core/enumerator/lazy/filter_map_spec.rb14
-rw-r--r--spec/ruby/core/enumerator/lazy/filter_spec.rb6
-rw-r--r--spec/ruby/core/enumerator/lazy/find_all_spec.rb8
-rw-r--r--spec/ruby/core/enumerator/lazy/fixtures/classes.rb54
-rw-r--r--spec/ruby/core/enumerator/lazy/flat_map_spec.rb16
-rw-r--r--spec/ruby/core/enumerator/lazy/force_spec.rb36
-rw-r--r--spec/ruby/core/enumerator/lazy/grep_spec.rb121
-rw-r--r--spec/ruby/core/enumerator/lazy/grep_v_spec.rb123
-rw-r--r--spec/ruby/core/enumerator/lazy/initialize_spec.rb63
-rw-r--r--spec/ruby/core/enumerator/lazy/lazy_spec.rb27
-rw-r--r--spec/ruby/core/enumerator/lazy/map_spec.rb12
-rw-r--r--spec/ruby/core/enumerator/lazy/reject_spec.rb78
-rw-r--r--spec/ruby/core/enumerator/lazy/select_spec.rb47
-rw-r--r--spec/ruby/core/enumerator/lazy/shared/collect.rb62
-rw-r--r--spec/ruby/core/enumerator/lazy/shared/collect_concat.rb78
-rw-r--r--spec/ruby/core/enumerator/lazy/shared/select.rb66
-rw-r--r--spec/ruby/core/enumerator/lazy/shared/to_enum.rb55
-rw-r--r--spec/ruby/core/enumerator/lazy/slice_after_spec.rb14
-rw-r--r--spec/ruby/core/enumerator/lazy/slice_before_spec.rb14
-rw-r--r--spec/ruby/core/enumerator/lazy/slice_when_spec.rb14
-rw-r--r--spec/ruby/core/enumerator/lazy/take_spec.rb66
-rw-r--r--spec/ruby/core/enumerator/lazy/take_while_spec.rb60
-rw-r--r--spec/ruby/core/enumerator/lazy/to_enum_spec.rb8
-rw-r--r--spec/ruby/core/enumerator/lazy/uniq_spec.rb74
-rw-r--r--spec/ruby/core/enumerator/lazy/with_index_spec.rb36
-rw-r--r--spec/ruby/core/enumerator/lazy/zip_spec.rb86
-rw-r--r--spec/ruby/core/enumerator/new_spec.rb76
-rw-r--r--spec/ruby/core/enumerator/next_spec.rb38
-rw-r--r--spec/ruby/core/enumerator/next_values_spec.rb61
-rw-r--r--spec/ruby/core/enumerator/peek_spec.rb36
-rw-r--r--spec/ruby/core/enumerator/peek_values_spec.rb63
-rw-r--r--spec/ruby/core/enumerator/plus_spec.rb33
-rw-r--r--spec/ruby/core/enumerator/produce_spec.rb34
-rw-r--r--spec/ruby/core/enumerator/product/each_spec.rb71
-rw-r--r--spec/ruby/core/enumerator/product/initialize_copy_spec.rb52
-rw-r--r--spec/ruby/core/enumerator/product/initialize_spec.rb31
-rw-r--r--spec/ruby/core/enumerator/product/inspect_spec.rb20
-rw-r--r--spec/ruby/core/enumerator/product/rewind_spec.rb62
-rw-r--r--spec/ruby/core/enumerator/product/size_spec.rb54
-rw-r--r--spec/ruby/core/enumerator/product_spec.rb91
-rw-r--r--spec/ruby/core/enumerator/rewind_spec.rb70
-rw-r--r--spec/ruby/core/enumerator/shared/enum_for.rb57
-rw-r--r--spec/ruby/core/enumerator/shared/with_index.rb33
-rw-r--r--spec/ruby/core/enumerator/shared/with_object.rb42
-rw-r--r--spec/ruby/core/enumerator/size_spec.rb26
-rw-r--r--spec/ruby/core/enumerator/to_enum_spec.rb6
-rw-r--r--spec/ruby/core/enumerator/with_index_spec.rb89
-rw-r--r--spec/ruby/core/enumerator/with_object_spec.rb6
-rw-r--r--spec/ruby/core/enumerator/yielder/append_spec.rb35
-rw-r--r--spec/ruby/core/enumerator/yielder/initialize_spec.rb18
-rw-r--r--spec/ruby/core/enumerator/yielder/to_proc_spec.rb16
-rw-r--r--spec/ruby/core/enumerator/yielder/yield_spec.rb33
-rw-r--r--spec/ruby/core/env/assoc_spec.rb31
-rw-r--r--spec/ruby/core/env/clear_spec.rb20
-rw-r--r--spec/ruby/core/env/clone_spec.rb21
-rw-r--r--spec/ruby/core/env/delete_if_spec.rb54
-rw-r--r--spec/ruby/core/env/delete_spec.rb55
-rw-r--r--spec/ruby/core/env/dup_spec.rb9
-rw-r--r--spec/ruby/core/env/each_key_spec.rb34
-rw-r--r--spec/ruby/core/env/each_pair_spec.rb6
-rw-r--r--spec/ruby/core/env/each_spec.rb6
-rw-r--r--spec/ruby/core/env/each_value_spec.rb34
-rw-r--r--spec/ruby/core/env/element_reference_spec.rb76
-rw-r--r--spec/ruby/core/env/element_set_spec.rb6
-rw-r--r--spec/ruby/core/env/empty_spec.rb23
-rw-r--r--spec/ruby/core/env/except_spec.rb34
-rw-r--r--spec/ruby/core/env/fetch_spec.rb63
-rw-r--r--spec/ruby/core/env/filter_spec.rb13
-rw-r--r--spec/ruby/core/env/fixtures/common.rb9
-rw-r--r--spec/ruby/core/env/has_key_spec.rb6
-rw-r--r--spec/ruby/core/env/has_value_spec.rb6
-rw-r--r--spec/ruby/core/env/include_spec.rb6
-rw-r--r--spec/ruby/core/env/inspect_spec.rb11
-rw-r--r--spec/ruby/core/env/invert_spec.rb16
-rw-r--r--spec/ruby/core/env/keep_if_spec.rb54
-rw-r--r--spec/ruby/core/env/key_spec.rb39
-rw-r--r--spec/ruby/core/env/keys_spec.rb14
-rw-r--r--spec/ruby/core/env/length_spec.rb6
-rw-r--r--spec/ruby/core/env/member_spec.rb6
-rw-r--r--spec/ruby/core/env/merge_spec.rb6
-rw-r--r--spec/ruby/core/env/rassoc_spec.rb42
-rw-r--r--spec/ruby/core/env/rehash_spec.rb7
-rw-r--r--spec/ruby/core/env/reject_spec.rb101
-rw-r--r--spec/ruby/core/env/replace_spec.rb51
-rw-r--r--spec/ruby/core/env/select_spec.rb13
-rw-r--r--spec/ruby/core/env/shared/each.rb65
-rw-r--r--spec/ruby/core/env/shared/include.rb30
-rw-r--r--spec/ruby/core/env/shared/length.rb13
-rw-r--r--spec/ruby/core/env/shared/select.rb61
-rw-r--r--spec/ruby/core/env/shared/store.rb60
-rw-r--r--spec/ruby/core/env/shared/to_hash.rb33
-rw-r--r--spec/ruby/core/env/shared/update.rb104
-rw-r--r--spec/ruby/core/env/shared/value.rb29
-rw-r--r--spec/ruby/core/env/shift_spec.rb47
-rw-r--r--spec/ruby/core/env/size_spec.rb6
-rw-r--r--spec/ruby/core/env/slice_spec.rb37
-rw-r--r--spec/ruby/core/env/spec_helper.rb26
-rw-r--r--spec/ruby/core/env/store_spec.rb6
-rw-r--r--spec/ruby/core/env/to_a_spec.rb21
-rw-r--r--spec/ruby/core/env/to_h_spec.rb70
-rw-r--r--spec/ruby/core/env/to_hash_spec.rb6
-rw-r--r--spec/ruby/core/env/to_s_spec.rb7
-rw-r--r--spec/ruby/core/env/update_spec.rb6
-rw-r--r--spec/ruby/core/env/value_spec.rb6
-rw-r--r--spec/ruby/core/env/values_at_spec.rb38
-rw-r--r--spec/ruby/core/env/values_spec.rb14
-rw-r--r--spec/ruby/core/exception/backtrace_locations_spec.rb39
-rw-r--r--spec/ruby/core/exception/backtrace_spec.rb106
-rw-r--r--spec/ruby/core/exception/case_compare_spec.rb37
-rw-r--r--spec/ruby/core/exception/cause_spec.rb56
-rw-r--r--spec/ruby/core/exception/detailed_message_spec.rb50
-rw-r--r--spec/ruby/core/exception/dup_spec.rb74
-rw-r--r--spec/ruby/core/exception/equal_value_spec.rb68
-rw-r--r--spec/ruby/core/exception/errno_spec.rb69
-rw-r--r--spec/ruby/core/exception/exception_spec.rb69
-rw-r--r--spec/ruby/core/exception/exit_value_spec.rb13
-rw-r--r--spec/ruby/core/exception/fixtures/common.rb102
-rw-r--r--spec/ruby/core/exception/fixtures/syntax_error.rb3
-rw-r--r--spec/ruby/core/exception/fixtures/thread_fiber_ensure.rb22
-rw-r--r--spec/ruby/core/exception/fixtures/thread_fiber_ensure_non_root_fiber.rb25
-rw-r--r--spec/ruby/core/exception/frozen_error_spec.rb54
-rw-r--r--spec/ruby/core/exception/full_message_spec.rb226
-rw-r--r--spec/ruby/core/exception/hierarchy_spec.rb62
-rw-r--r--spec/ruby/core/exception/inspect_spec.rb24
-rw-r--r--spec/ruby/core/exception/interrupt_spec.rb60
-rw-r--r--spec/ruby/core/exception/io_error_spec.rb45
-rw-r--r--spec/ruby/core/exception/key_error_spec.rb19
-rw-r--r--spec/ruby/core/exception/load_error_spec.rb21
-rw-r--r--spec/ruby/core/exception/message_spec.rb27
-rw-r--r--spec/ruby/core/exception/name_error_spec.rb28
-rw-r--r--spec/ruby/core/exception/name_spec.rb43
-rw-r--r--spec/ruby/core/exception/new_spec.rb7
-rw-r--r--spec/ruby/core/exception/no_method_error_spec.rb283
-rw-r--r--spec/ruby/core/exception/reason_spec.rb13
-rw-r--r--spec/ruby/core/exception/receiver_spec.rb58
-rw-r--r--spec/ruby/core/exception/result_spec.rb21
-rw-r--r--spec/ruby/core/exception/set_backtrace_spec.rb23
-rw-r--r--spec/ruby/core/exception/shared/new.rb18
-rw-r--r--spec/ruby/core/exception/shared/set_backtrace.rb64
-rw-r--r--spec/ruby/core/exception/signal_exception_spec.rb123
-rw-r--r--spec/ruby/core/exception/signm_spec.rb9
-rw-r--r--spec/ruby/core/exception/signo_spec.rb9
-rw-r--r--spec/ruby/core/exception/standard_error_spec.rb23
-rw-r--r--spec/ruby/core/exception/status_spec.rb9
-rw-r--r--spec/ruby/core/exception/success_spec.rb15
-rw-r--r--spec/ruby/core/exception/syntax_error_spec.rb25
-rw-r--r--spec/ruby/core/exception/system_call_error_spec.rb163
-rw-r--r--spec/ruby/core/exception/system_exit_spec.rb59
-rw-r--r--spec/ruby/core/exception/to_s_spec.rb37
-rw-r--r--spec/ruby/core/exception/top_level_spec.rb65
-rw-r--r--spec/ruby/core/exception/uncaught_throw_error_spec.rb12
-rw-r--r--spec/ruby/core/false/and_spec.rb11
-rw-r--r--spec/ruby/core/false/case_compare_spec.rb14
-rw-r--r--spec/ruby/core/false/dup_spec.rb7
-rw-r--r--spec/ruby/core/false/falseclass_spec.rb15
-rw-r--r--spec/ruby/core/false/inspect_spec.rb7
-rw-r--r--spec/ruby/core/false/or_spec.rb11
-rw-r--r--spec/ruby/core/false/singleton_method_spec.rb15
-rw-r--r--spec/ruby/core/false/to_s_spec.rb15
-rw-r--r--spec/ruby/core/false/xor_spec.rb11
-rw-r--r--spec/ruby/core/fiber/alive_spec.rb44
-rw-r--r--spec/ruby/core/fiber/blocking_spec.rb73
-rw-r--r--spec/ruby/core/fiber/current_spec.rb50
-rw-r--r--spec/ruby/core/fiber/fixtures/classes.rb22
-rw-r--r--spec/ruby/core/fiber/fixtures/scheduler.rb35
-rw-r--r--spec/ruby/core/fiber/inspect_spec.rb35
-rw-r--r--spec/ruby/core/fiber/kill_spec.rb90
-rw-r--r--spec/ruby/core/fiber/new_spec.rb39
-rw-r--r--spec/ruby/core/fiber/raise_spec.rb139
-rw-r--r--spec/ruby/core/fiber/resume_spec.rb83
-rw-r--r--spec/ruby/core/fiber/scheduler_spec.rb8
-rw-r--r--spec/ruby/core/fiber/set_scheduler_spec.rb8
-rw-r--r--spec/ruby/core/fiber/shared/blocking.rb41
-rw-r--r--spec/ruby/core/fiber/shared/resume.rb58
-rw-r--r--spec/ruby/core/fiber/shared/scheduler.rb51
-rw-r--r--spec/ruby/core/fiber/storage_spec.rb181
-rw-r--r--spec/ruby/core/fiber/transfer_spec.rb84
-rw-r--r--spec/ruby/core/fiber/yield_spec.rb49
-rw-r--r--spec/ruby/core/file/absolute_path_spec.rb94
-rw-r--r--spec/ruby/core/file/atime_spec.rb60
-rw-r--r--spec/ruby/core/file/basename_spec.rb183
-rw-r--r--spec/ruby/core/file/birthtime_spec.rb56
-rw-r--r--spec/ruby/core/file/blockdev_spec.rb6
-rw-r--r--spec/ruby/core/file/chardev_spec.rb6
-rw-r--r--spec/ruby/core/file/chmod_spec.rb185
-rw-r--r--spec/ruby/core/file/chown_spec.rb144
-rw-r--r--spec/ruby/core/file/constants/constants_spec.rb31
-rw-r--r--spec/ruby/core/file/constants_spec.rb141
-rw-r--r--spec/ruby/core/file/ctime_spec.rb54
-rw-r--r--spec/ruby/core/file/delete_spec.rb6
-rw-r--r--spec/ruby/core/file/directory_spec.rb10
-rw-r--r--spec/ruby/core/file/dirname_spec.rb137
-rw-r--r--spec/ruby/core/file/empty_spec.rb7
-rw-r--r--spec/ruby/core/file/executable_real_spec.rb7
-rw-r--r--spec/ruby/core/file/executable_spec.rb7
-rw-r--r--spec/ruby/core/file/exist_spec.rb12
-rw-r--r--spec/ruby/core/file/expand_path_spec.rb265
-rw-r--r--spec/ruby/core/file/extname_spec.rb76
-rw-r--r--spec/ruby/core/file/file_spec.rb16
-rw-r--r--spec/ruby/core/file/fixtures/common.rb22
-rw-r--r--spec/ruby/core/file/fixtures/do_not_remove1
-rw-r--r--spec/ruby/core/file/fixtures/file_types.rb66
-rw-r--r--spec/ruby/core/file/flock_spec.rb74
-rw-r--r--spec/ruby/core/file/fnmatch_spec.rb10
-rw-r--r--spec/ruby/core/file/ftype_spec.rb82
-rw-r--r--spec/ruby/core/file/grpowned_spec.rb10
-rw-r--r--spec/ruby/core/file/identical_spec.rb6
-rw-r--r--spec/ruby/core/file/initialize_spec.rb19
-rw-r--r--spec/ruby/core/file/inspect_spec.rb17
-rw-r--r--spec/ruby/core/file/join_spec.rb148
-rw-r--r--spec/ruby/core/file/lchmod_spec.rb32
-rw-r--r--spec/ruby/core/file/lchown_spec.rb59
-rw-r--r--spec/ruby/core/file/link_spec.rb39
-rw-r--r--spec/ruby/core/file/lstat_spec.rb33
-rw-r--r--spec/ruby/core/file/lutime_spec.rb43
-rw-r--r--spec/ruby/core/file/mkfifo_spec.rb51
-rw-r--r--spec/ruby/core/file/mtime_spec.rb56
-rw-r--r--spec/ruby/core/file/new_spec.rb223
-rw-r--r--spec/ruby/core/file/null_spec.rb15
-rw-r--r--spec/ruby/core/file/open_spec.rb713
-rw-r--r--spec/ruby/core/file/owned_spec.rb35
-rw-r--r--spec/ruby/core/file/path_spec.rb81
-rw-r--r--spec/ruby/core/file/pipe_spec.rb32
-rw-r--r--spec/ruby/core/file/printf_spec.rb18
-rw-r--r--spec/ruby/core/file/read_spec.rb6
-rw-r--r--spec/ruby/core/file/readable_real_spec.rb7
-rw-r--r--spec/ruby/core/file/readable_spec.rb7
-rw-r--r--spec/ruby/core/file/readlink_spec.rb86
-rw-r--r--spec/ruby/core/file/realdirpath_spec.rb104
-rw-r--r--spec/ruby/core/file/realpath_spec.rb98
-rw-r--r--spec/ruby/core/file/rename_spec.rb37
-rw-r--r--spec/ruby/core/file/reopen_spec.rb32
-rw-r--r--spec/ruby/core/file/setgid_spec.rb36
-rw-r--r--spec/ruby/core/file/setuid_spec.rb34
-rw-r--r--spec/ruby/core/file/shared/fnmatch.rb294
-rw-r--r--spec/ruby/core/file/shared/open.rb12
-rw-r--r--spec/ruby/core/file/shared/path.rb82
-rw-r--r--spec/ruby/core/file/shared/read.rb15
-rw-r--r--spec/ruby/core/file/shared/stat.rb32
-rw-r--r--spec/ruby/core/file/shared/unlink.rb61
-rw-r--r--spec/ruby/core/file/shared/update_time.rb105
-rw-r--r--spec/ruby/core/file/size_spec.rb119
-rw-r--r--spec/ruby/core/file/socket_spec.rb10
-rw-r--r--spec/ruby/core/file/split_spec.rb64
-rw-r--r--spec/ruby/core/file/stat/atime_spec.rb18
-rw-r--r--spec/ruby/core/file/stat/birthtime_spec.rb29
-rw-r--r--spec/ruby/core/file/stat/blksize_spec.rb27
-rw-r--r--spec/ruby/core/file/stat/blockdev_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/blocks_spec.rb27
-rw-r--r--spec/ruby/core/file/stat/chardev_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/comparison_spec.rb66
-rw-r--r--spec/ruby/core/file/stat/ctime_spec.rb18
-rw-r--r--spec/ruby/core/file/stat/dev_major_spec.rb23
-rw-r--r--spec/ruby/core/file/stat/dev_minor_spec.rb23
-rw-r--r--spec/ruby/core/file/stat/dev_spec.rb15
-rw-r--r--spec/ruby/core/file/stat/directory_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/executable_real_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/executable_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/file_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/fixtures/classes.rb5
-rw-r--r--spec/ruby/core/file/stat/ftype_spec.rb64
-rw-r--r--spec/ruby/core/file/stat/gid_spec.rb19
-rw-r--r--spec/ruby/core/file/stat/grpowned_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/ino_spec.rb28
-rw-r--r--spec/ruby/core/file/stat/inspect_spec.rb26
-rw-r--r--spec/ruby/core/file/stat/mode_spec.rb19
-rw-r--r--spec/ruby/core/file/stat/mtime_spec.rb18
-rw-r--r--spec/ruby/core/file/stat/new_spec.rb32
-rw-r--r--spec/ruby/core/file/stat/nlink_spec.rb21
-rw-r--r--spec/ruby/core/file/stat/owned_spec.rb33
-rw-r--r--spec/ruby/core/file/stat/pipe_spec.rb32
-rw-r--r--spec/ruby/core/file/stat/rdev_major_spec.rb24
-rw-r--r--spec/ruby/core/file/stat/rdev_minor_spec.rb24
-rw-r--r--spec/ruby/core/file/stat/rdev_spec.rb15
-rw-r--r--spec/ruby/core/file/stat/readable_real_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/readable_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/setgid_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/setuid_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/size_spec.rb21
-rw-r--r--spec/ruby/core/file/stat/socket_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/sticky_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/symlink_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/uid_spec.rb18
-rw-r--r--spec/ruby/core/file/stat/world_readable_spec.rb11
-rw-r--r--spec/ruby/core/file/stat/world_writable_spec.rb11
-rw-r--r--spec/ruby/core/file/stat/writable_real_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/writable_spec.rb7
-rw-r--r--spec/ruby/core/file/stat/zero_spec.rb7
-rw-r--r--spec/ruby/core/file/stat_spec.rb55
-rw-r--r--spec/ruby/core/file/sticky_spec.rb50
-rw-r--r--spec/ruby/core/file/symlink_spec.rb57
-rw-r--r--spec/ruby/core/file/to_path_spec.rb6
-rw-r--r--spec/ruby/core/file/truncate_spec.rb177
-rw-r--r--spec/ruby/core/file/umask_spec.rb57
-rw-r--r--spec/ruby/core/file/unlink_spec.rb6
-rw-r--r--spec/ruby/core/file/utime_spec.rb6
-rw-r--r--spec/ruby/core/file/world_readable_spec.rb12
-rw-r--r--spec/ruby/core/file/world_writable_spec.rb12
-rw-r--r--spec/ruby/core/file/writable_real_spec.rb7
-rw-r--r--spec/ruby/core/file/writable_spec.rb7
-rw-r--r--spec/ruby/core/file/zero_spec.rb7
-rw-r--r--spec/ruby/core/filetest/blockdev_spec.rb6
-rw-r--r--spec/ruby/core/filetest/chardev_spec.rb6
-rw-r--r--spec/ruby/core/filetest/directory_spec.rb10
-rw-r--r--spec/ruby/core/filetest/executable_real_spec.rb7
-rw-r--r--spec/ruby/core/filetest/executable_spec.rb7
-rw-r--r--spec/ruby/core/filetest/exist_spec.rb12
-rw-r--r--spec/ruby/core/filetest/file_spec.rb10
-rw-r--r--spec/ruby/core/filetest/grpowned_spec.rb10
-rw-r--r--spec/ruby/core/filetest/identical_spec.rb6
-rw-r--r--spec/ruby/core/filetest/owned_spec.rb6
-rw-r--r--spec/ruby/core/filetest/pipe_spec.rb6
-rw-r--r--spec/ruby/core/filetest/readable_real_spec.rb7
-rw-r--r--spec/ruby/core/filetest/readable_spec.rb7
-rw-r--r--spec/ruby/core/filetest/setgid_spec.rb6
-rw-r--r--spec/ruby/core/filetest/setuid_spec.rb6
-rw-r--r--spec/ruby/core/filetest/size_spec.rb34
-rw-r--r--spec/ruby/core/filetest/socket_spec.rb10
-rw-r--r--spec/ruby/core/filetest/sticky_spec.rb7
-rw-r--r--spec/ruby/core/filetest/symlink_spec.rb10
-rw-r--r--spec/ruby/core/filetest/world_readable_spec.rb5
-rw-r--r--spec/ruby/core/filetest/world_writable_spec.rb5
-rw-r--r--spec/ruby/core/filetest/writable_real_spec.rb7
-rw-r--r--spec/ruby/core/filetest/writable_spec.rb7
-rw-r--r--spec/ruby/core/filetest/zero_spec.rb7
-rw-r--r--spec/ruby/core/float/abs_spec.rb6
-rw-r--r--spec/ruby/core/float/angle_spec.rb6
-rw-r--r--spec/ruby/core/float/arg_spec.rb6
-rw-r--r--spec/ruby/core/float/case_compare_spec.rb6
-rw-r--r--spec/ruby/core/float/ceil_spec.rb26
-rw-r--r--spec/ruby/core/float/coerce_spec.rb18
-rw-r--r--spec/ruby/core/float/comparison_spec.rb113
-rw-r--r--spec/ruby/core/float/constants_spec.rb55
-rw-r--r--spec/ruby/core/float/denominator_spec.rb29
-rw-r--r--spec/ruby/core/float/divide_spec.rb43
-rw-r--r--spec/ruby/core/float/divmod_spec.rb43
-rw-r--r--spec/ruby/core/float/dup_spec.rb8
-rw-r--r--spec/ruby/core/float/eql_spec.rb16
-rw-r--r--spec/ruby/core/float/equal_value_spec.rb6
-rw-r--r--spec/ruby/core/float/exponent_spec.rb15
-rw-r--r--spec/ruby/core/float/fdiv_spec.rb6
-rw-r--r--spec/ruby/core/float/finite_spec.rb19
-rw-r--r--spec/ruby/core/float/fixtures/classes.rb4
-rw-r--r--spec/ruby/core/float/fixtures/coerce.rb15
-rw-r--r--spec/ruby/core/float/float_spec.rb19
-rw-r--r--spec/ruby/core/float/floor_spec.rb26
-rw-r--r--spec/ruby/core/float/gt_spec.rb38
-rw-r--r--spec/ruby/core/float/gte_spec.rb38
-rw-r--r--spec/ruby/core/float/hash_spec.rb11
-rw-r--r--spec/ruby/core/float/infinite_spec.rb19
-rw-r--r--spec/ruby/core/float/inspect_spec.rb6
-rw-r--r--spec/ruby/core/float/lt_spec.rb38
-rw-r--r--spec/ruby/core/float/lte_spec.rb39
-rw-r--r--spec/ruby/core/float/magnitude_spec.rb6
-rw-r--r--spec/ruby/core/float/minus_spec.rb12
-rw-r--r--spec/ruby/core/float/modulo_spec.rb10
-rw-r--r--spec/ruby/core/float/multiply_spec.rb17
-rw-r--r--spec/ruby/core/float/nan_spec.rb9
-rw-r--r--spec/ruby/core/float/negative_spec.rb33
-rw-r--r--spec/ruby/core/float/next_float_spec.rb49
-rw-r--r--spec/ruby/core/float/numerator_spec.rb39
-rw-r--r--spec/ruby/core/float/phase_spec.rb6
-rw-r--r--spec/ruby/core/float/plus_spec.rb12
-rw-r--r--spec/ruby/core/float/positive_spec.rb33
-rw-r--r--spec/ruby/core/float/prev_float_spec.rb49
-rw-r--r--spec/ruby/core/float/quo_spec.rb6
-rw-r--r--spec/ruby/core/float/rationalize_spec.rb43
-rw-r--r--spec/ruby/core/float/round_spec.rb203
-rw-r--r--spec/ruby/core/float/shared/abs.rb21
-rw-r--r--spec/ruby/core/float/shared/arg.rb36
-rw-r--r--spec/ruby/core/float/shared/arithmetic_exception_in_coerce.rb11
-rw-r--r--spec/ruby/core/float/shared/comparison_exception_in_coerce.rb11
-rw-r--r--spec/ruby/core/float/shared/equal.rb38
-rw-r--r--spec/ruby/core/float/shared/modulo.rb48
-rw-r--r--spec/ruby/core/float/shared/quo.rb59
-rw-r--r--spec/ruby/core/float/shared/to_i.rb14
-rw-r--r--spec/ruby/core/float/shared/to_s.rb308
-rw-r--r--spec/ruby/core/float/to_f_spec.rb9
-rw-r--r--spec/ruby/core/float/to_i_spec.rb6
-rw-r--r--spec/ruby/core/float/to_int_spec.rb6
-rw-r--r--spec/ruby/core/float/to_r_spec.rb5
-rw-r--r--spec/ruby/core/float/to_s_spec.rb6
-rw-r--r--spec/ruby/core/float/truncate_spec.rb14
-rw-r--r--spec/ruby/core/float/uminus_spec.rb28
-rw-r--r--spec/ruby/core/float/uplus_spec.rb9
-rw-r--r--spec/ruby/core/float/zero_spec.rb9
-rw-r--r--spec/ruby/core/gc/auto_compact_spec.rb24
-rw-r--r--spec/ruby/core/gc/config_spec.rb83
-rw-r--r--spec/ruby/core/gc/count_spec.rb17
-rw-r--r--spec/ruby/core/gc/disable_spec.rb18
-rw-r--r--spec/ruby/core/gc/enable_spec.rb13
-rw-r--r--spec/ruby/core/gc/garbage_collect_spec.rb15
-rw-r--r--spec/ruby/core/gc/measure_total_time_spec.rb17
-rw-r--r--spec/ruby/core/gc/profiler/clear_spec.rb5
-rw-r--r--spec/ruby/core/gc/profiler/disable_spec.rb16
-rw-r--r--spec/ruby/core/gc/profiler/enable_spec.rb17
-rw-r--r--spec/ruby/core/gc/profiler/enabled_spec.rb21
-rw-r--r--spec/ruby/core/gc/profiler/report_spec.rb5
-rw-r--r--spec/ruby/core/gc/profiler/result_spec.rb7
-rw-r--r--spec/ruby/core/gc/profiler/total_time_spec.rb7
-rw-r--r--spec/ruby/core/gc/start_spec.rb12
-rw-r--r--spec/ruby/core/gc/stat_spec.rb62
-rw-r--r--spec/ruby/core/gc/stress_spec.rb27
-rw-r--r--spec/ruby/core/gc/total_time_spec.rb13
-rw-r--r--spec/ruby/core/hash/allocate_spec.rb15
-rw-r--r--spec/ruby/core/hash/any_spec.rb30
-rw-r--r--spec/ruby/core/hash/assoc_spec.rb50
-rw-r--r--spec/ruby/core/hash/clear_spec.rb32
-rw-r--r--spec/ruby/core/hash/clone_spec.rb12
-rw-r--r--spec/ruby/core/hash/compact_spec.rb83
-rw-r--r--spec/ruby/core/hash/compare_by_identity_spec.rb147
-rw-r--r--spec/ruby/core/hash/constructor_spec.rb129
-rw-r--r--spec/ruby/core/hash/deconstruct_keys_spec.rb23
-rw-r--r--spec/ruby/core/hash/default_proc_spec.rb80
-rw-r--r--spec/ruby/core/hash/default_spec.rb46
-rw-r--r--spec/ruby/core/hash/delete_if_spec.rb44
-rw-r--r--spec/ruby/core/hash/delete_spec.rb58
-rw-r--r--spec/ruby/core/hash/dig_spec.rb66
-rw-r--r--spec/ruby/core/hash/each_key_spec.rb23
-rw-r--r--spec/ruby/core/hash/each_pair_spec.rb11
-rw-r--r--spec/ruby/core/hash/each_spec.rb11
-rw-r--r--spec/ruby/core/hash/each_value_spec.rb23
-rw-r--r--spec/ruby/core/hash/element_reference_spec.rb134
-rw-r--r--spec/ruby/core/hash/element_set_spec.rb7
-rw-r--r--spec/ruby/core/hash/empty_spec.rb15
-rw-r--r--spec/ruby/core/hash/eql_spec.rb9
-rw-r--r--spec/ruby/core/hash/equal_value_spec.rb18
-rw-r--r--spec/ruby/core/hash/except_spec.rb42
-rw-r--r--spec/ruby/core/hash/fetch_spec.rb44
-rw-r--r--spec/ruby/core/hash/fetch_values_spec.rb35
-rw-r--r--spec/ruby/core/hash/filter_spec.rb10
-rw-r--r--spec/ruby/core/hash/fixtures/classes.rb75
-rw-r--r--spec/ruby/core/hash/fixtures/name.rb30
-rw-r--r--spec/ruby/core/hash/flatten_spec.rb62
-rw-r--r--spec/ruby/core/hash/gt_spec.rb42
-rw-r--r--spec/ruby/core/hash/gte_spec.rb42
-rw-r--r--spec/ruby/core/hash/has_key_spec.rb7
-rw-r--r--spec/ruby/core/hash/has_value_spec.rb7
-rw-r--r--spec/ruby/core/hash/hash_spec.rb51
-rw-r--r--spec/ruby/core/hash/include_spec.rb7
-rw-r--r--spec/ruby/core/hash/initialize_spec.rb61
-rw-r--r--spec/ruby/core/hash/inspect_spec.rb7
-rw-r--r--spec/ruby/core/hash/invert_spec.rb48
-rw-r--r--spec/ruby/core/hash/keep_if_spec.rb37
-rw-r--r--spec/ruby/core/hash/key_spec.rb12
-rw-r--r--spec/ruby/core/hash/keys_spec.rb23
-rw-r--r--spec/ruby/core/hash/length_spec.rb7
-rw-r--r--spec/ruby/core/hash/lt_spec.rb42
-rw-r--r--spec/ruby/core/hash/lte_spec.rb42
-rw-r--r--spec/ruby/core/hash/member_spec.rb7
-rw-r--r--spec/ruby/core/hash/merge_spec.rb123
-rw-r--r--spec/ruby/core/hash/new_spec.rb67
-rw-r--r--spec/ruby/core/hash/rassoc_spec.rb42
-rw-r--r--spec/ruby/core/hash/rehash_spec.rb114
-rw-r--r--spec/ruby/core/hash/reject_spec.rb116
-rw-r--r--spec/ruby/core/hash/replace_spec.rb79
-rw-r--r--spec/ruby/core/hash/ruby2_keywords_hash_spec.rb83
-rw-r--r--spec/ruby/core/hash/select_spec.rb10
-rw-r--r--spec/ruby/core/hash/shared/comparison.rb15
-rw-r--r--spec/ruby/core/hash/shared/each.rb105
-rw-r--r--spec/ruby/core/hash/shared/eql.rb204
-rw-r--r--spec/ruby/core/hash/shared/greater_than.rb23
-rw-r--r--spec/ruby/core/hash/shared/index.rb37
-rw-r--r--spec/ruby/core/hash/shared/iteration.rb19
-rw-r--r--spec/ruby/core/hash/shared/key.rb38
-rw-r--r--spec/ruby/core/hash/shared/length.rb12
-rw-r--r--spec/ruby/core/hash/shared/less_than.rb23
-rw-r--r--spec/ruby/core/hash/shared/select.rb112
-rw-r--r--spec/ruby/core/hash/shared/store.rb115
-rw-r--r--spec/ruby/core/hash/shared/to_s.rb93
-rw-r--r--spec/ruby/core/hash/shared/update.rb76
-rw-r--r--spec/ruby/core/hash/shared/value.rb14
-rw-r--r--spec/ruby/core/hash/shared/values_at.rb9
-rw-r--r--spec/ruby/core/hash/shift_spec.rb78
-rw-r--r--spec/ruby/core/hash/size_spec.rb7
-rw-r--r--spec/ruby/core/hash/slice_spec.rb74
-rw-r--r--spec/ruby/core/hash/sort_spec.rb17
-rw-r--r--spec/ruby/core/hash/store_spec.rb7
-rw-r--r--spec/ruby/core/hash/to_a_spec.rb29
-rw-r--r--spec/ruby/core/hash/to_h_spec.rb106
-rw-r--r--spec/ruby/core/hash/to_hash_spec.rb14
-rw-r--r--spec/ruby/core/hash/to_proc_spec.rb91
-rw-r--r--spec/ruby/core/hash/to_s_spec.rb7
-rw-r--r--spec/ruby/core/hash/transform_keys_spec.rb150
-rw-r--r--spec/ruby/core/hash/transform_values_spec.rb118
-rw-r--r--spec/ruby/core/hash/try_convert_spec.rb50
-rw-r--r--spec/ruby/core/hash/update_spec.rb7
-rw-r--r--spec/ruby/core/hash/value_spec.rb7
-rw-r--r--spec/ruby/core/hash/values_at_spec.rb7
-rw-r--r--spec/ruby/core/hash/values_spec.rb10
-rw-r--r--spec/ruby/core/integer/abs_spec.rb6
-rw-r--r--spec/ruby/core/integer/allbits_spec.rb37
-rw-r--r--spec/ruby/core/integer/anybits_spec.rb36
-rw-r--r--spec/ruby/core/integer/bit_and_spec.rb97
-rw-r--r--spec/ruby/core/integer/bit_length_spec.rb76
-rw-r--r--spec/ruby/core/integer/bit_or_spec.rb89
-rw-r--r--spec/ruby/core/integer/bit_xor_spec.rb93
-rw-r--r--spec/ruby/core/integer/case_compare_spec.rb6
-rw-r--r--spec/ruby/core/integer/ceil_spec.rb24
-rw-r--r--spec/ruby/core/integer/ceildiv_spec.rb20
-rw-r--r--spec/ruby/core/integer/chr_spec.rb257
-rw-r--r--spec/ruby/core/integer/coerce_spec.rb91
-rw-r--r--spec/ruby/core/integer/comparison_spec.rb177
-rw-r--r--spec/ruby/core/integer/complement_spec.rb20
-rw-r--r--spec/ruby/core/integer/constants_spec.rb13
-rw-r--r--spec/ruby/core/integer/denominator_spec.rb20
-rw-r--r--spec/ruby/core/integer/digits_spec.rb41
-rw-r--r--spec/ruby/core/integer/div_spec.rb154
-rw-r--r--spec/ruby/core/integer/divide_spec.rb126
-rw-r--r--spec/ruby/core/integer/divmod_spec.rb117
-rw-r--r--spec/ruby/core/integer/downto_spec.rb69
-rw-r--r--spec/ruby/core/integer/dup_spec.rb13
-rw-r--r--spec/ruby/core/integer/element_reference_spec.rb188
-rw-r--r--spec/ruby/core/integer/equal_value_spec.rb6
-rw-r--r--spec/ruby/core/integer/even_spec.rb40
-rw-r--r--spec/ruby/core/integer/exponent_spec.rb7
-rw-r--r--spec/ruby/core/integer/fdiv_spec.rb100
-rw-r--r--spec/ruby/core/integer/fixtures/classes.rb4
-rw-r--r--spec/ruby/core/integer/floor_spec.rb13
-rw-r--r--spec/ruby/core/integer/gcd_spec.rb69
-rw-r--r--spec/ruby/core/integer/gcdlcm_spec.rb53
-rw-r--r--spec/ruby/core/integer/gt_spec.rb43
-rw-r--r--spec/ruby/core/integer/gte_spec.rb43
-rw-r--r--spec/ruby/core/integer/integer_spec.rb20
-rw-r--r--spec/ruby/core/integer/lcm_spec.rb58
-rw-r--r--spec/ruby/core/integer/left_shift_spec.rb211
-rw-r--r--spec/ruby/core/integer/lt_spec.rb45
-rw-r--r--spec/ruby/core/integer/lte_spec.rb53
-rw-r--r--spec/ruby/core/integer/magnitude_spec.rb6
-rw-r--r--spec/ruby/core/integer/minus_spec.rb60
-rw-r--r--spec/ruby/core/integer/modulo_spec.rb10
-rw-r--r--spec/ruby/core/integer/multiply_spec.rb45
-rw-r--r--spec/ruby/core/integer/next_spec.rb6
-rw-r--r--spec/ruby/core/integer/nobits_spec.rb36
-rw-r--r--spec/ruby/core/integer/numerator_spec.rb18
-rw-r--r--spec/ruby/core/integer/odd_spec.rb38
-rw-r--r--spec/ruby/core/integer/ord_spec.rb17
-rw-r--r--spec/ruby/core/integer/plus_spec.rb75
-rw-r--r--spec/ruby/core/integer/pow_spec.rb51
-rw-r--r--spec/ruby/core/integer/pred_spec.rb11
-rw-r--r--spec/ruby/core/integer/rationalize_spec.rb39
-rw-r--r--spec/ruby/core/integer/remainder_spec.rb51
-rw-r--r--spec/ruby/core/integer/right_shift_spec.rb233
-rw-r--r--spec/ruby/core/integer/round_spec.rb81
-rw-r--r--spec/ruby/core/integer/shared/abs.rb18
-rw-r--r--spec/ruby/core/integer/shared/arithmetic_coerce.rb11
-rw-r--r--spec/ruby/core/integer/shared/comparison_coerce.rb11
-rw-r--r--spec/ruby/core/integer/shared/equal.rb58
-rw-r--r--spec/ruby/core/integer/shared/exponent.rb144
-rw-r--r--spec/ruby/core/integer/shared/integer_ceil_precision.rb43
-rw-r--r--spec/ruby/core/integer/shared/integer_floor_precision.rb43
-rw-r--r--spec/ruby/core/integer/shared/integer_rounding.rb19
-rw-r--r--spec/ruby/core/integer/shared/modulo.rb114
-rw-r--r--spec/ruby/core/integer/shared/next.rb25
-rw-r--r--spec/ruby/core/integer/shared/to_i.rb8
-rw-r--r--spec/ruby/core/integer/size_spec.rb34
-rw-r--r--spec/ruby/core/integer/sqrt_spec.rb31
-rw-r--r--spec/ruby/core/integer/succ_spec.rb6
-rw-r--r--spec/ruby/core/integer/times_spec.rb79
-rw-r--r--spec/ruby/core/integer/to_f_spec.rb23
-rw-r--r--spec/ruby/core/integer/to_i_spec.rb6
-rw-r--r--spec/ruby/core/integer/to_int_spec.rb6
-rw-r--r--spec/ruby/core/integer/to_r_spec.rb26
-rw-r--r--spec/ruby/core/integer/to_s_spec.rb95
-rw-r--r--spec/ruby/core/integer/truncate_spec.rb19
-rw-r--r--spec/ruby/core/integer/try_convert_spec.rb48
-rw-r--r--spec/ruby/core/integer/uminus_spec.rb30
-rw-r--r--spec/ruby/core/integer/upto_spec.rb69
-rw-r--r--spec/ruby/core/integer/zero_spec.rb13
-rw-r--r--spec/ruby/core/io/advise_spec.rb86
-rw-r--r--spec/ruby/core/io/autoclose_spec.rb77
-rw-r--r--spec/ruby/core/io/binmode_spec.rb64
-rw-r--r--spec/ruby/core/io/binread_spec.rb57
-rw-r--r--spec/ruby/core/io/binwrite_spec.rb6
-rw-r--r--spec/ruby/core/io/buffer/empty_spec.rb29
-rw-r--r--spec/ruby/core/io/buffer/external_spec.rb108
-rw-r--r--spec/ruby/core/io/buffer/free_spec.rb104
-rw-r--r--spec/ruby/core/io/buffer/initialize_spec.rb103
-rw-r--r--spec/ruby/core/io/buffer/internal_spec.rb108
-rw-r--r--spec/ruby/core/io/buffer/locked_spec.rb75
-rw-r--r--spec/ruby/core/io/buffer/mapped_spec.rb108
-rw-r--r--spec/ruby/core/io/buffer/null_spec.rb29
-rw-r--r--spec/ruby/core/io/buffer/private_spec.rb111
-rw-r--r--spec/ruby/core/io/buffer/readonly_spec.rb143
-rw-r--r--spec/ruby/core/io/buffer/resize_spec.rb155
-rw-r--r--spec/ruby/core/io/buffer/shared/null_and_empty.rb59
-rw-r--r--spec/ruby/core/io/buffer/shared_spec.rb117
-rw-r--r--spec/ruby/core/io/buffer/transfer_spec.rb118
-rw-r--r--spec/ruby/core/io/buffer/valid_spec.rb110
-rw-r--r--spec/ruby/core/io/close_on_exec_spec.rb76
-rw-r--r--spec/ruby/core/io/close_read_spec.rb61
-rw-r--r--spec/ruby/core/io/close_spec.rb118
-rw-r--r--spec/ruby/core/io/close_write_spec.rb68
-rw-r--r--spec/ruby/core/io/closed_spec.rb20
-rw-r--r--spec/ruby/core/io/constants_spec.rb19
-rw-r--r--spec/ruby/core/io/copy_stream_spec.rb343
-rw-r--r--spec/ruby/core/io/dup_spec.rb106
-rw-r--r--spec/ruby/core/io/each_byte_spec.rb57
-rw-r--r--spec/ruby/core/io/each_char_spec.rb12
-rw-r--r--spec/ruby/core/io/each_codepoint_spec.rb43
-rw-r--r--spec/ruby/core/io/each_line_spec.rb11
-rw-r--r--spec/ruby/core/io/each_spec.rb11
-rw-r--r--spec/ruby/core/io/eof_spec.rb107
-rw-r--r--spec/ruby/core/io/external_encoding_spec.rb223
-rw-r--r--spec/ruby/core/io/fcntl_spec.rb8
-rw-r--r--spec/ruby/core/io/fdatasync_spec.rb5
-rw-r--r--spec/ruby/core/io/fileno_spec.rb12
-rw-r--r--spec/ruby/core/io/fixtures/bom_UTF-16BE.txtbin0 -> 20 bytes
-rw-r--r--spec/ruby/core/io/fixtures/bom_UTF-16LE.txtbin0 -> 20 bytes
-rw-r--r--spec/ruby/core/io/fixtures/bom_UTF-32BE.txtbin0 -> 40 bytes
-rw-r--r--spec/ruby/core/io/fixtures/bom_UTF-32LE.txtbin0 -> 40 bytes
-rw-r--r--spec/ruby/core/io/fixtures/bom_UTF-8.txt1
-rw-r--r--spec/ruby/core/io/fixtures/classes.rb218
-rw-r--r--spec/ruby/core/io/fixtures/copy_in_out.rb2
-rw-r--r--spec/ruby/core/io/fixtures/copy_stream.txt6
-rw-r--r--spec/ruby/core/io/fixtures/empty.txt0
-rw-r--r--spec/ruby/core/io/fixtures/incomplete.txt1
-rw-r--r--spec/ruby/core/io/fixtures/lines.txt9
-rw-r--r--spec/ruby/core/io/fixtures/no_bom_UTF-8.txt1
-rw-r--r--spec/ruby/core/io/fixtures/numbered_lines.txt5
-rw-r--r--spec/ruby/core/io/fixtures/one_byte.txt1
-rw-r--r--spec/ruby/core/io/fixtures/read_binary.txt1
-rw-r--r--spec/ruby/core/io/fixtures/read_euc_jp.txt1
-rw-r--r--spec/ruby/core/io/fixtures/read_text.txt1
-rw-r--r--spec/ruby/core/io/fixtures/reopen_stdout.rb3
-rw-r--r--spec/ruby/core/io/flush_spec.rb37
-rw-r--r--spec/ruby/core/io/for_fd_spec.rb10
-rw-r--r--spec/ruby/core/io/foreach_spec.rb98
-rw-r--r--spec/ruby/core/io/fsync_spec.rb24
-rw-r--r--spec/ruby/core/io/getbyte_spec.rb58
-rw-r--r--spec/ruby/core/io/getc_spec.rb42
-rw-r--r--spec/ruby/core/io/gets_spec.rb360
-rw-r--r--spec/ruby/core/io/initialize_spec.rb60
-rw-r--r--spec/ruby/core/io/inspect_spec.rb23
-rw-r--r--spec/ruby/core/io/internal_encoding_spec.rb145
-rw-r--r--spec/ruby/core/io/io_spec.rb11
-rw-r--r--spec/ruby/core/io/ioctl_spec.rb32
-rw-r--r--spec/ruby/core/io/isatty_spec.rb6
-rw-r--r--spec/ruby/core/io/lineno_spec.rb138
-rw-r--r--spec/ruby/core/io/new_spec.rb18
-rw-r--r--spec/ruby/core/io/nonblock_spec.rb48
-rw-r--r--spec/ruby/core/io/open_spec.rb99
-rw-r--r--spec/ruby/core/io/output_spec.rb27
-rw-r--r--spec/ruby/core/io/path_spec.rb12
-rw-r--r--spec/ruby/core/io/pid_spec.rb35
-rw-r--r--spec/ruby/core/io/pipe_spec.rb225
-rw-r--r--spec/ruby/core/io/popen_spec.rb287
-rw-r--r--spec/ruby/core/io/pos_spec.rb11
-rw-r--r--spec/ruby/core/io/pread_spec.rb140
-rw-r--r--spec/ruby/core/io/print_spec.rb66
-rw-r--r--spec/ruby/core/io/printf_spec.rb32
-rw-r--r--spec/ruby/core/io/putc_spec.rb11
-rw-r--r--spec/ruby/core/io/puts_spec.rb139
-rw-r--r--spec/ruby/core/io/pwrite_spec.rb69
-rw-r--r--spec/ruby/core/io/read_nonblock_spec.rb148
-rw-r--r--spec/ruby/core/io/read_spec.rb757
-rw-r--r--spec/ruby/core/io/readbyte_spec.rb24
-rw-r--r--spec/ruby/core/io/readchar_spec.rb110
-rw-r--r--spec/ruby/core/io/readline_spec.rb84
-rw-r--r--spec/ruby/core/io/readlines_spec.rb259
-rw-r--r--spec/ruby/core/io/readpartial_spec.rb115
-rw-r--r--spec/ruby/core/io/reopen_spec.rb313
-rw-r--r--spec/ruby/core/io/rewind_spec.rb53
-rw-r--r--spec/ruby/core/io/seek_spec.rb79
-rw-r--r--spec/ruby/core/io/select_spec.rb164
-rw-r--r--spec/ruby/core/io/set_encoding_by_bom_spec.rb262
-rw-r--r--spec/ruby/core/io/set_encoding_spec.rb238
-rw-r--r--spec/ruby/core/io/shared/binwrite.rb91
-rw-r--r--spec/ruby/core/io/shared/chars.rb73
-rw-r--r--spec/ruby/core/io/shared/codepoints.rb54
-rw-r--r--spec/ruby/core/io/shared/each.rb251
-rw-r--r--spec/ruby/core/io/shared/gets_ascii.rb19
-rw-r--r--spec/ruby/core/io/shared/new.rb413
-rw-r--r--spec/ruby/core/io/shared/pos.rb78
-rw-r--r--spec/ruby/core/io/shared/readlines.rb259
-rw-r--r--spec/ruby/core/io/shared/tty.rb24
-rw-r--r--spec/ruby/core/io/shared/write.rb154
-rw-r--r--spec/ruby/core/io/stat_spec.rb25
-rw-r--r--spec/ruby/core/io/sync_spec.rb64
-rw-r--r--spec/ruby/core/io/sysopen_spec.rb50
-rw-r--r--spec/ruby/core/io/sysread_spec.rb137
-rw-r--r--spec/ruby/core/io/sysseek_spec.rb49
-rw-r--r--spec/ruby/core/io/syswrite_spec.rb82
-rw-r--r--spec/ruby/core/io/tell_spec.rb7
-rw-r--r--spec/ruby/core/io/to_i_spec.rb12
-rw-r--r--spec/ruby/core/io/to_io_spec.rb21
-rw-r--r--spec/ruby/core/io/try_convert_spec.rb49
-rw-r--r--spec/ruby/core/io/tty_spec.rb6
-rw-r--r--spec/ruby/core/io/ungetbyte_spec.rb54
-rw-r--r--spec/ruby/core/io/ungetc_spec.rb138
-rw-r--r--spec/ruby/core/io/write_nonblock_spec.rb96
-rw-r--r--spec/ruby/core/io/write_spec.rb297
-rw-r--r--spec/ruby/core/kernel/Array_spec.rb97
-rw-r--r--spec/ruby/core/kernel/Complex_spec.rb276
-rw-r--r--spec/ruby/core/kernel/Float_spec.rb413
-rw-r--r--spec/ruby/core/kernel/Hash_spec.rb63
-rw-r--r--spec/ruby/core/kernel/Integer_spec.rb823
-rw-r--r--spec/ruby/core/kernel/Rational_spec.rb236
-rw-r--r--spec/ruby/core/kernel/String_spec.rb106
-rw-r--r--spec/ruby/core/kernel/__callee___spec.rb48
-rw-r--r--spec/ruby/core/kernel/__dir___spec.rb27
-rw-r--r--spec/ruby/core/kernel/__method___spec.rb40
-rw-r--r--spec/ruby/core/kernel/abort_spec.rb15
-rw-r--r--spec/ruby/core/kernel/at_exit_spec.rb19
-rw-r--r--spec/ruby/core/kernel/autoload_spec.rb178
-rw-r--r--spec/ruby/core/kernel/backtick_spec.rb84
-rw-r--r--spec/ruby/core/kernel/binding_spec.rb51
-rw-r--r--spec/ruby/core/kernel/block_given_spec.rb43
-rw-r--r--spec/ruby/core/kernel/caller_locations_spec.rb110
-rw-r--r--spec/ruby/core/kernel/caller_spec.rb109
-rw-r--r--spec/ruby/core/kernel/case_compare_spec.rb135
-rw-r--r--spec/ruby/core/kernel/catch_spec.rb127
-rw-r--r--spec/ruby/core/kernel/chomp_spec.rb65
-rw-r--r--spec/ruby/core/kernel/chop_spec.rb53
-rw-r--r--spec/ruby/core/kernel/class_spec.rb26
-rw-r--r--spec/ruby/core/kernel/clone_spec.rb177
-rw-r--r--spec/ruby/core/kernel/comparison_spec.rb31
-rw-r--r--spec/ruby/core/kernel/define_singleton_method_spec.rb120
-rw-r--r--spec/ruby/core/kernel/display_spec.rb6
-rw-r--r--spec/ruby/core/kernel/dup_spec.rb67
-rw-r--r--spec/ruby/core/kernel/enum_for_spec.rb5
-rw-r--r--spec/ruby/core/kernel/eql_spec.rb10
-rw-r--r--spec/ruby/core/kernel/equal_value_spec.rb15
-rw-r--r--spec/ruby/core/kernel/eval_spec.rb570
-rw-r--r--spec/ruby/core/kernel/exec_spec.rb18
-rw-r--r--spec/ruby/core/kernel/exit_spec.rb27
-rw-r--r--spec/ruby/core/kernel/extend_spec.rb91
-rw-r--r--spec/ruby/core/kernel/fail_spec.rb42
-rw-r--r--spec/ruby/core/kernel/fixtures/Complex.rb5
-rw-r--r--spec/ruby/core/kernel/fixtures/__callee__.rb34
-rw-r--r--spec/ruby/core/kernel/fixtures/__dir__.rb2
-rw-r--r--spec/ruby/core/kernel/fixtures/__method__.rb34
-rw-r--r--spec/ruby/core/kernel/fixtures/autoload_b.rb5
-rw-r--r--spec/ruby/core/kernel/fixtures/autoload_d.rb5
-rw-r--r--spec/ruby/core/kernel/fixtures/autoload_from_included_module.rb9
-rw-r--r--spec/ruby/core/kernel/fixtures/autoload_from_included_module2.rb9
-rw-r--r--spec/ruby/core/kernel/fixtures/autoload_frozen.rb7
-rw-r--r--spec/ruby/core/kernel/fixtures/caller.rb7
-rw-r--r--spec/ruby/core/kernel/fixtures/caller_at_exit.rb7
-rw-r--r--spec/ruby/core/kernel/fixtures/caller_locations.rb7
-rw-r--r--spec/ruby/core/kernel/fixtures/chomp.rb4
-rw-r--r--spec/ruby/core/kernel/fixtures/chomp_f.rb4
-rw-r--r--spec/ruby/core/kernel/fixtures/chop.rb4
-rw-r--r--spec/ruby/core/kernel/fixtures/chop_f.rb4
-rw-r--r--spec/ruby/core/kernel/fixtures/classes.rb558
-rw-r--r--spec/ruby/core/kernel/fixtures/eval_locals.rb6
-rw-r--r--spec/ruby/core/kernel/fixtures/eval_return_with_lambda.rb12
-rw-r--r--spec/ruby/core/kernel/fixtures/eval_return_without_lambda.rb14
-rw-r--r--spec/ruby/core/kernel/fixtures/singleton_methods.rb13
-rw-r--r--spec/ruby/core/kernel/fixtures/test.rb362
-rw-r--r--spec/ruby/core/kernel/fixtures/warn_core_method.rb14
-rw-r--r--spec/ruby/core/kernel/fixtures/warn_require.rb1
-rw-r--r--spec/ruby/core/kernel/fixtures/warn_require_caller.rb2
-rw-r--r--spec/ruby/core/kernel/fork_spec.rb15
-rw-r--r--spec/ruby/core/kernel/format_spec.rb47
-rw-r--r--spec/ruby/core/kernel/freeze_spec.rb91
-rw-r--r--spec/ruby/core/kernel/frozen_spec.rb76
-rw-r--r--spec/ruby/core/kernel/gets_spec.rb17
-rw-r--r--spec/ruby/core/kernel/global_variables_spec.rb26
-rw-r--r--spec/ruby/core/kernel/gsub_spec.rb96
-rw-r--r--spec/ruby/core/kernel/initialize_clone_spec.rb26
-rw-r--r--spec/ruby/core/kernel/initialize_copy_spec.rb36
-rw-r--r--spec/ruby/core/kernel/initialize_dup_spec.rb20
-rw-r--r--spec/ruby/core/kernel/inspect_spec.rb90
-rw-r--r--spec/ruby/core/kernel/instance_of_spec.rb40
-rw-r--r--spec/ruby/core/kernel/instance_variable_defined_spec.rb41
-rw-r--r--spec/ruby/core/kernel/instance_variable_get_spec.rb111
-rw-r--r--spec/ruby/core/kernel/instance_variable_set_spec.rb105
-rw-r--r--spec/ruby/core/kernel/instance_variables_spec.rb40
-rw-r--r--spec/ruby/core/kernel/is_a_spec.rb6
-rw-r--r--spec/ruby/core/kernel/itself_spec.rb9
-rw-r--r--spec/ruby/core/kernel/kind_of_spec.rb6
-rw-r--r--spec/ruby/core/kernel/lambda_spec.rb158
-rw-r--r--spec/ruby/core/kernel/load_spec.rb40
-rw-r--r--spec/ruby/core/kernel/local_variables_spec.rb48
-rw-r--r--spec/ruby/core/kernel/loop_spec.rb79
-rw-r--r--spec/ruby/core/kernel/match_spec.rb7
-rw-r--r--spec/ruby/core/kernel/method_spec.rb80
-rw-r--r--spec/ruby/core/kernel/methods_spec.rb101
-rw-r--r--spec/ruby/core/kernel/nil_spec.rb12
-rw-r--r--spec/ruby/core/kernel/not_match_spec.rb25
-rw-r--r--spec/ruby/core/kernel/object_id_spec.rb6
-rw-r--r--spec/ruby/core/kernel/open_spec.rb194
-rw-r--r--spec/ruby/core/kernel/p_spec.rb85
-rw-r--r--spec/ruby/core/kernel/pp_spec.rb9
-rw-r--r--spec/ruby/core/kernel/print_spec.rb24
-rw-r--r--spec/ruby/core/kernel/printf_spec.rb70
-rw-r--r--spec/ruby/core/kernel/private_methods_spec.rb69
-rw-r--r--spec/ruby/core/kernel/proc_spec.rb48
-rw-r--r--spec/ruby/core/kernel/protected_methods_spec.rb69
-rw-r--r--spec/ruby/core/kernel/public_method_spec.rb32
-rw-r--r--spec/ruby/core/kernel/public_methods_spec.rb76
-rw-r--r--spec/ruby/core/kernel/public_send_spec.rb116
-rw-r--r--spec/ruby/core/kernel/putc_spec.rb39
-rw-r--r--spec/ruby/core/kernel/puts_spec.rb29
-rw-r--r--spec/ruby/core/kernel/raise_spec.rb292
-rw-r--r--spec/ruby/core/kernel/rand_spec.rb197
-rw-r--r--spec/ruby/core/kernel/readline_spec.rb12
-rw-r--r--spec/ruby/core/kernel/readlines_spec.rb12
-rw-r--r--spec/ruby/core/kernel/remove_instance_variable_spec.rb72
-rw-r--r--spec/ruby/core/kernel/require_relative_spec.rb437
-rw-r--r--spec/ruby/core/kernel/require_spec.rb60
-rw-r--r--spec/ruby/core/kernel/respond_to_missing_spec.rb100
-rw-r--r--spec/ruby/core/kernel/respond_to_spec.rb72
-rw-r--r--spec/ruby/core/kernel/select_spec.rb18
-rw-r--r--spec/ruby/core/kernel/send_spec.rb68
-rw-r--r--spec/ruby/core/kernel/set_trace_func_spec.rb12
-rw-r--r--spec/ruby/core/kernel/shared/dup_clone.rb91
-rw-r--r--spec/ruby/core/kernel/shared/kind_of.rb55
-rw-r--r--spec/ruby/core/kernel/shared/lambda.rb11
-rw-r--r--spec/ruby/core/kernel/shared/load.rb215
-rw-r--r--spec/ruby/core/kernel/shared/method.rb56
-rw-r--r--spec/ruby/core/kernel/shared/require.rb848
-rw-r--r--spec/ruby/core/kernel/shared/sprintf.rb987
-rw-r--r--spec/ruby/core/kernel/shared/sprintf_encoding.rb67
-rw-r--r--spec/ruby/core/kernel/shared/then.rb20
-rw-r--r--spec/ruby/core/kernel/singleton_class_spec.rb74
-rw-r--r--spec/ruby/core/kernel/singleton_method_spec.rb85
-rw-r--r--spec/ruby/core/kernel/singleton_methods_spec.rb192
-rw-r--r--spec/ruby/core/kernel/sleep_spec.rb126
-rw-r--r--spec/ruby/core/kernel/spawn_spec.rb25
-rw-r--r--spec/ruby/core/kernel/sprintf_spec.rb64
-rw-r--r--spec/ruby/core/kernel/srand_spec.rb73
-rw-r--r--spec/ruby/core/kernel/sub_spec.rb26
-rw-r--r--spec/ruby/core/kernel/syscall_spec.rb12
-rw-r--r--spec/ruby/core/kernel/system_spec.rb132
-rw-r--r--spec/ruby/core/kernel/taint_spec.rb8
-rw-r--r--spec/ruby/core/kernel/tainted_spec.rb8
-rw-r--r--spec/ruby/core/kernel/tap_spec.rb13
-rw-r--r--spec/ruby/core/kernel/test_spec.rb109
-rw-r--r--spec/ruby/core/kernel/then_spec.rb6
-rw-r--r--spec/ruby/core/kernel/throw_spec.rb80
-rw-r--r--spec/ruby/core/kernel/to_enum_spec.rb5
-rw-r--r--spec/ruby/core/kernel/to_s_spec.rb8
-rw-r--r--spec/ruby/core/kernel/trace_var_spec.rb54
-rw-r--r--spec/ruby/core/kernel/trap_spec.rb9
-rw-r--r--spec/ruby/core/kernel/trust_spec.rb8
-rw-r--r--spec/ruby/core/kernel/untaint_spec.rb8
-rw-r--r--spec/ruby/core/kernel/untrace_var_spec.rb12
-rw-r--r--spec/ruby/core/kernel/untrust_spec.rb8
-rw-r--r--spec/ruby/core/kernel/untrusted_spec.rb8
-rw-r--r--spec/ruby/core/kernel/warn_spec.rb298
-rw-r--r--spec/ruby/core/kernel/yield_self_spec.rb6
-rw-r--r--spec/ruby/core/main/define_method_spec.rb28
-rw-r--r--spec/ruby/core/main/fixtures/classes.rb26
-rw-r--r--spec/ruby/core/main/fixtures/string_refinement.rb7
-rw-r--r--spec/ruby/core/main/fixtures/string_refinement_user.rb11
-rw-r--r--spec/ruby/core/main/fixtures/using.rb1
-rw-r--r--spec/ruby/core/main/fixtures/using_in_main.rb5
-rw-r--r--spec/ruby/core/main/fixtures/using_in_method.rb5
-rw-r--r--spec/ruby/core/main/fixtures/wrapped_include.rb1
-rw-r--r--spec/ruby/core/main/include_spec.rb16
-rw-r--r--spec/ruby/core/main/private_spec.rb42
-rw-r--r--spec/ruby/core/main/public_spec.rb43
-rw-r--r--spec/ruby/core/main/ruby2_keywords_spec.rb9
-rw-r--r--spec/ruby/core/main/to_s_spec.rb7
-rw-r--r--spec/ruby/core/main/using_spec.rb150
-rw-r--r--spec/ruby/core/marshal/dump_spec.rb1070
-rw-r--r--spec/ruby/core/marshal/fixtures/classes.rb4
-rw-r--r--spec/ruby/core/marshal/fixtures/marshal_data.rb567
-rw-r--r--spec/ruby/core/marshal/fixtures/marshal_multibyte_data.rb12
-rw-r--r--spec/ruby/core/marshal/fixtures/random.dumpbin0 -> 2520 bytes
-rw-r--r--spec/ruby/core/marshal/float_spec.rb77
-rw-r--r--spec/ruby/core/marshal/load_spec.rb6
-rw-r--r--spec/ruby/core/marshal/major_version_spec.rb7
-rw-r--r--spec/ruby/core/marshal/minor_version_spec.rb7
-rw-r--r--spec/ruby/core/marshal/restore_spec.rb6
-rw-r--r--spec/ruby/core/marshal/shared/load.rb1270
-rw-r--r--spec/ruby/core/matchdata/allocate_spec.rb8
-rw-r--r--spec/ruby/core/matchdata/begin_spec.rb132
-rw-r--r--spec/ruby/core/matchdata/bytebegin_spec.rb132
-rw-r--r--spec/ruby/core/matchdata/byteend_spec.rb104
-rw-r--r--spec/ruby/core/matchdata/byteoffset_spec.rb93
-rw-r--r--spec/ruby/core/matchdata/captures_spec.rb6
-rw-r--r--spec/ruby/core/matchdata/deconstruct_keys_spec.rb63
-rw-r--r--spec/ruby/core/matchdata/deconstruct_spec.rb6
-rw-r--r--spec/ruby/core/matchdata/dup_spec.rb14
-rw-r--r--spec/ruby/core/matchdata/element_reference_spec.rb124
-rw-r--r--spec/ruby/core/matchdata/end_spec.rb104
-rw-r--r--spec/ruby/core/matchdata/eql_spec.rb6
-rw-r--r--spec/ruby/core/matchdata/equal_value_spec.rb6
-rw-r--r--spec/ruby/core/matchdata/fixtures/classes.rb3
-rw-r--r--spec/ruby/core/matchdata/hash_spec.rb5
-rw-r--r--spec/ruby/core/matchdata/inspect_spec.rb23
-rw-r--r--spec/ruby/core/matchdata/length_spec.rb6
-rw-r--r--spec/ruby/core/matchdata/match_length_spec.rb32
-rw-r--r--spec/ruby/core/matchdata/match_spec.rb32
-rw-r--r--spec/ruby/core/matchdata/named_captures_spec.rb27
-rw-r--r--spec/ruby/core/matchdata/names_spec.rb33
-rw-r--r--spec/ruby/core/matchdata/offset_spec.rb102
-rw-r--r--spec/ruby/core/matchdata/post_match_spec.rb24
-rw-r--r--spec/ruby/core/matchdata/pre_match_spec.rb24
-rw-r--r--spec/ruby/core/matchdata/regexp_spec.rb24
-rw-r--r--spec/ruby/core/matchdata/shared/captures.rb13
-rw-r--r--spec/ruby/core/matchdata/shared/eql.rb26
-rw-r--r--spec/ruby/core/matchdata/shared/length.rb5
-rw-r--r--spec/ruby/core/matchdata/size_spec.rb6
-rw-r--r--spec/ruby/core/matchdata/string_spec.rb26
-rw-r--r--spec/ruby/core/matchdata/to_a_spec.rb13
-rw-r--r--spec/ruby/core/matchdata/to_s_spec.rb13
-rw-r--r--spec/ruby/core/matchdata/values_at_spec.rb76
-rw-r--r--spec/ruby/core/math/acos_spec.rb56
-rw-r--r--spec/ruby/core/math/acosh_spec.rb41
-rw-r--r--spec/ruby/core/math/asin_spec.rb48
-rw-r--r--spec/ruby/core/math/asinh_spec.rb42
-rw-r--r--spec/ruby/core/math/atan2_spec.rb54
-rw-r--r--spec/ruby/core/math/atan_spec.rb40
-rw-r--r--spec/ruby/core/math/atanh_spec.rb14
-rw-r--r--spec/ruby/core/math/cbrt_spec.rb27
-rw-r--r--spec/ruby/core/math/constants_spec.rb22
-rw-r--r--spec/ruby/core/math/cos_spec.rb50
-rw-r--r--spec/ruby/core/math/cosh_spec.rb37
-rw-r--r--spec/ruby/core/math/erf_spec.rb44
-rw-r--r--spec/ruby/core/math/erfc_spec.rb43
-rw-r--r--spec/ruby/core/math/exp_spec.rb37
-rw-r--r--spec/ruby/core/math/expm1_spec.rb37
-rw-r--r--spec/ruby/core/math/fixtures/classes.rb28
-rw-r--r--spec/ruby/core/math/fixtures/common.rb3
-rw-r--r--spec/ruby/core/math/frexp_spec.rb37
-rw-r--r--spec/ruby/core/math/gamma_spec.rb69
-rw-r--r--spec/ruby/core/math/hypot_spec.rb41
-rw-r--r--spec/ruby/core/math/ldexp_spec.rb60
-rw-r--r--spec/ruby/core/math/lgamma_spec.rb51
-rw-r--r--spec/ruby/core/math/log10_spec.rb43
-rw-r--r--spec/ruby/core/math/log1p_spec.rb49
-rw-r--r--spec/ruby/core/math/log2_spec.rb41
-rw-r--r--spec/ruby/core/math/log_spec.rb57
-rw-r--r--spec/ruby/core/math/shared/atanh.rb44
-rw-r--r--spec/ruby/core/math/sin_spec.rb39
-rw-r--r--spec/ruby/core/math/sinh_spec.rb37
-rw-r--r--spec/ruby/core/math/sqrt_spec.rb40
-rw-r--r--spec/ruby/core/math/tan_spec.rb42
-rw-r--r--spec/ruby/core/math/tanh_spec.rb39
-rw-r--r--spec/ruby/core/method/arity_spec.rb222
-rw-r--r--spec/ruby/core/method/call_spec.rb7
-rw-r--r--spec/ruby/core/method/case_compare_spec.rb7
-rw-r--r--spec/ruby/core/method/clone_spec.rb13
-rw-r--r--spec/ruby/core/method/compose_spec.rb99
-rw-r--r--spec/ruby/core/method/curry_spec.rb36
-rw-r--r--spec/ruby/core/method/dup_spec.rb15
-rw-r--r--spec/ruby/core/method/element_reference_spec.rb7
-rw-r--r--spec/ruby/core/method/eql_spec.rb6
-rw-r--r--spec/ruby/core/method/equal_value_spec.rb6
-rw-r--r--spec/ruby/core/method/fixtures/classes.rb246
-rw-r--r--spec/ruby/core/method/hash_spec.rb15
-rw-r--r--spec/ruby/core/method/inspect_spec.rb6
-rw-r--r--spec/ruby/core/method/name_spec.rb22
-rw-r--r--spec/ruby/core/method/original_name_spec.rb22
-rw-r--r--spec/ruby/core/method/owner_spec.rb30
-rw-r--r--spec/ruby/core/method/parameters_spec.rb304
-rw-r--r--spec/ruby/core/method/private_spec.rb9
-rw-r--r--spec/ruby/core/method/protected_spec.rb9
-rw-r--r--spec/ruby/core/method/public_spec.rb9
-rw-r--r--spec/ruby/core/method/receiver_spec.rb22
-rw-r--r--spec/ruby/core/method/shared/call.rb51
-rw-r--r--spec/ruby/core/method/shared/dup.rb32
-rw-r--r--spec/ruby/core/method/shared/eql.rb94
-rw-r--r--spec/ruby/core/method/shared/to_s.rb81
-rw-r--r--spec/ruby/core/method/source_location_spec.rb126
-rw-r--r--spec/ruby/core/method/super_method_spec.rb64
-rw-r--r--spec/ruby/core/method/to_proc_spec.rb104
-rw-r--r--spec/ruby/core/method/to_s_spec.rb6
-rw-r--r--spec/ruby/core/method/unbind_spec.rb46
-rw-r--r--spec/ruby/core/module/alias_method_spec.rb171
-rw-r--r--spec/ruby/core/module/ancestors_spec.rb88
-rw-r--r--spec/ruby/core/module/append_features_spec.rb61
-rw-r--r--spec/ruby/core/module/attr_accessor_spec.rb112
-rw-r--r--spec/ruby/core/module/attr_reader_spec.rb73
-rw-r--r--spec/ruby/core/module/attr_spec.rb159
-rw-r--r--spec/ruby/core/module/attr_writer_spec.rb83
-rw-r--r--spec/ruby/core/module/autoload_spec.rb1026
-rw-r--r--spec/ruby/core/module/case_compare_spec.rb31
-rw-r--r--spec/ruby/core/module/class_eval_spec.rb7
-rw-r--r--spec/ruby/core/module/class_exec_spec.rb7
-rw-r--r--spec/ruby/core/module/class_variable_defined_spec.rb72
-rw-r--r--spec/ruby/core/module/class_variable_get_spec.rb76
-rw-r--r--spec/ruby/core/module/class_variable_set_spec.rb62
-rw-r--r--spec/ruby/core/module/class_variables_spec.rb34
-rw-r--r--spec/ruby/core/module/comparison_spec.rb36
-rw-r--r--spec/ruby/core/module/const_added_spec.rb238
-rw-r--r--spec/ruby/core/module/const_defined_spec.rb169
-rw-r--r--spec/ruby/core/module/const_get_spec.rb273
-rw-r--r--spec/ruby/core/module/const_missing_spec.rb36
-rw-r--r--spec/ruby/core/module/const_set_spec.rb145
-rw-r--r--spec/ruby/core/module/const_source_location_spec.rb281
-rw-r--r--spec/ruby/core/module/constants_spec.rb97
-rw-r--r--spec/ruby/core/module/define_method_spec.rb846
-rw-r--r--spec/ruby/core/module/define_singleton_method_spec.rb15
-rw-r--r--spec/ruby/core/module/deprecate_constant_spec.rb70
-rw-r--r--spec/ruby/core/module/eql_spec.rb7
-rw-r--r--spec/ruby/core/module/equal_spec.rb7
-rw-r--r--spec/ruby/core/module/equal_value_spec.rb7
-rw-r--r--spec/ruby/core/module/extend_object_spec.rb56
-rw-r--r--spec/ruby/core/module/extended_spec.rb44
-rw-r--r--spec/ruby/core/module/fixtures/autoload.rb1
-rw-r--r--spec/ruby/core/module/fixtures/autoload_abc.rb11
-rw-r--r--spec/ruby/core/module/fixtures/autoload_c.rb11
-rw-r--r--spec/ruby/core/module/fixtures/autoload_callback.rb2
-rw-r--r--spec/ruby/core/module/fixtures/autoload_concur.rb9
-rw-r--r--spec/ruby/core/module/fixtures/autoload_const_source_location.rb6
-rw-r--r--spec/ruby/core/module/fixtures/autoload_d.rb11
-rw-r--r--spec/ruby/core/module/fixtures/autoload_during_autoload.rb7
-rw-r--r--spec/ruby/core/module/fixtures/autoload_during_autoload_after_define.rb6
-rw-r--r--spec/ruby/core/module/fixtures/autoload_during_require.rb4
-rw-r--r--spec/ruby/core/module/fixtures/autoload_during_require_current_file.rb5
-rw-r--r--spec/ruby/core/module/fixtures/autoload_e.rb7
-rw-r--r--spec/ruby/core/module/fixtures/autoload_empty.rb1
-rw-r--r--spec/ruby/core/module/fixtures/autoload_ex1.rb16
-rw-r--r--spec/ruby/core/module/fixtures/autoload_exception.rb3
-rw-r--r--spec/ruby/core/module/fixtures/autoload_f.rb7
-rw-r--r--spec/ruby/core/module/fixtures/autoload_g.rb7
-rw-r--r--spec/ruby/core/module/fixtures/autoload_h.rb7
-rw-r--r--spec/ruby/core/module/fixtures/autoload_i.rb5
-rw-r--r--spec/ruby/core/module/fixtures/autoload_j.rb3
-rw-r--r--spec/ruby/core/module/fixtures/autoload_k.rb7
-rw-r--r--spec/ruby/core/module/fixtures/autoload_lm.rb4
-rw-r--r--spec/ruby/core/module/fixtures/autoload_location.rb3
-rw-r--r--spec/ruby/core/module/fixtures/autoload_nested.rb8
-rw-r--r--spec/ruby/core/module/fixtures/autoload_never_set.rb1
-rw-r--r--spec/ruby/core/module/fixtures/autoload_o.rb2
-rw-r--r--spec/ruby/core/module/fixtures/autoload_overridden.rb3
-rw-r--r--spec/ruby/core/module/fixtures/autoload_r.rb4
-rw-r--r--spec/ruby/core/module/fixtures/autoload_raise.rb2
-rw-r--r--spec/ruby/core/module/fixtures/autoload_required_directly.rb7
-rw-r--r--spec/ruby/core/module/fixtures/autoload_required_directly_nested.rb1
-rw-r--r--spec/ruby/core/module/fixtures/autoload_required_directly_no_constant.rb2
-rw-r--r--spec/ruby/core/module/fixtures/autoload_s.rb5
-rw-r--r--spec/ruby/core/module/fixtures/autoload_self_during_require.rb5
-rw-r--r--spec/ruby/core/module/fixtures/autoload_subclass.rb11
-rw-r--r--spec/ruby/core/module/fixtures/autoload_t.rb3
-rw-r--r--spec/ruby/core/module/fixtures/autoload_v.rb7
-rw-r--r--spec/ruby/core/module/fixtures/autoload_w.rb2
-rw-r--r--spec/ruby/core/module/fixtures/autoload_w2.rb1
-rw-r--r--spec/ruby/core/module/fixtures/autoload_x.rb3
-rw-r--r--spec/ruby/core/module/fixtures/autoload_z.rb5
-rw-r--r--spec/ruby/core/module/fixtures/classes.rb653
-rw-r--r--spec/ruby/core/module/fixtures/const_added.rb4
-rw-r--r--spec/ruby/core/module/fixtures/constant_unicode.rb5
-rw-r--r--spec/ruby/core/module/fixtures/constants_autoload.rb6
-rw-r--r--spec/ruby/core/module/fixtures/constants_autoload_a.rb2
-rw-r--r--spec/ruby/core/module/fixtures/constants_autoload_b.rb2
-rw-r--r--spec/ruby/core/module/fixtures/constants_autoload_c.rb3
-rw-r--r--spec/ruby/core/module/fixtures/constants_autoload_d.rb4
-rw-r--r--spec/ruby/core/module/fixtures/module.rb8
-rw-r--r--spec/ruby/core/module/fixtures/multi/foo.rb6
-rw-r--r--spec/ruby/core/module/fixtures/multi/foo/bar_baz.rb11
-rw-r--r--spec/ruby/core/module/fixtures/name.rb13
-rw-r--r--spec/ruby/core/module/fixtures/path1/load_path.rb9
-rw-r--r--spec/ruby/core/module/fixtures/path2/load_path.rb1
-rw-r--r--spec/ruby/core/module/fixtures/refine.rb25
-rw-r--r--spec/ruby/core/module/fixtures/repeated_concurrent_autoload.rb8
-rw-r--r--spec/ruby/core/module/fixtures/set_temporary_name.rb4
-rw-r--r--spec/ruby/core/module/freeze_spec.rb6
-rw-r--r--spec/ruby/core/module/gt_spec.rb36
-rw-r--r--spec/ruby/core/module/gte_spec.rb33
-rw-r--r--spec/ruby/core/module/include_spec.rb628
-rw-r--r--spec/ruby/core/module/included_modules_spec.rb14
-rw-r--r--spec/ruby/core/module/included_spec.rb44
-rw-r--r--spec/ruby/core/module/initialize_copy_spec.rb18
-rw-r--r--spec/ruby/core/module/initialize_spec.rb18
-rw-r--r--spec/ruby/core/module/instance_method_spec.rb106
-rw-r--r--spec/ruby/core/module/instance_methods_spec.rb61
-rw-r--r--spec/ruby/core/module/lt_spec.rb36
-rw-r--r--spec/ruby/core/module/lte_spec.rb33
-rw-r--r--spec/ruby/core/module/method_added_spec.rb146
-rw-r--r--spec/ruby/core/module/method_defined_spec.rb98
-rw-r--r--spec/ruby/core/module/method_removed_spec.rb33
-rw-r--r--spec/ruby/core/module/method_undefined_spec.rb33
-rw-r--r--spec/ruby/core/module/module_eval_spec.rb7
-rw-r--r--spec/ruby/core/module/module_exec_spec.rb7
-rw-r--r--spec/ruby/core/module/module_function_spec.rb358
-rw-r--r--spec/ruby/core/module/name_spec.rb205
-rw-r--r--spec/ruby/core/module/nesting_spec.rb31
-rw-r--r--spec/ruby/core/module/new_spec.rb35
-rw-r--r--spec/ruby/core/module/prepend_features_spec.rb64
-rw-r--r--spec/ruby/core/module/prepend_spec.rb823
-rw-r--r--spec/ruby/core/module/prepended_spec.rb25
-rw-r--r--spec/ruby/core/module/private_class_method_spec.rb91
-rw-r--r--spec/ruby/core/module/private_constant_spec.rb32
-rw-r--r--spec/ruby/core/module/private_instance_methods_spec.rb54
-rw-r--r--spec/ruby/core/module/private_method_defined_spec.rb120
-rw-r--r--spec/ruby/core/module/private_spec.rb95
-rw-r--r--spec/ruby/core/module/protected_instance_methods_spec.rb57
-rw-r--r--spec/ruby/core/module/protected_method_defined_spec.rb120
-rw-r--r--spec/ruby/core/module/protected_spec.rb57
-rw-r--r--spec/ruby/core/module/public_class_method_spec.rb94
-rw-r--r--spec/ruby/core/module/public_constant_spec.rb38
-rw-r--r--spec/ruby/core/module/public_instance_method_spec.rb65
-rw-r--r--spec/ruby/core/module/public_instance_methods_spec.rb61
-rw-r--r--spec/ruby/core/module/public_method_defined_spec.rb72
-rw-r--r--spec/ruby/core/module/public_spec.rb45
-rw-r--r--spec/ruby/core/module/refine_spec.rb714
-rw-r--r--spec/ruby/core/module/refinements_spec.rb43
-rw-r--r--spec/ruby/core/module/remove_class_variable_spec.rb44
-rw-r--r--spec/ruby/core/module/remove_const_spec.rb107
-rw-r--r--spec/ruby/core/module/remove_method_spec.rb131
-rw-r--r--spec/ruby/core/module/ruby2_keywords_spec.rb248
-rw-r--r--spec/ruby/core/module/set_temporary_name_spec.rb147
-rw-r--r--spec/ruby/core/module/shared/attr_added.rb34
-rw-r--r--spec/ruby/core/module/shared/class_eval.rb174
-rw-r--r--spec/ruby/core/module/shared/class_exec.rb29
-rw-r--r--spec/ruby/core/module/shared/equal_value.rb14
-rw-r--r--spec/ruby/core/module/shared/set_visibility.rb184
-rw-r--r--spec/ruby/core/module/singleton_class_spec.rb27
-rw-r--r--spec/ruby/core/module/to_s_spec.rb70
-rw-r--r--spec/ruby/core/module/undef_method_spec.rb181
-rw-r--r--spec/ruby/core/module/undefined_instance_methods_spec.rb24
-rw-r--r--spec/ruby/core/module/used_refinements_spec.rb85
-rw-r--r--spec/ruby/core/module/using_spec.rb377
-rw-r--r--spec/ruby/core/mutex/lock_spec.rb30
-rw-r--r--spec/ruby/core/mutex/locked_spec.rb36
-rw-r--r--spec/ruby/core/mutex/owned_spec.rb53
-rw-r--r--spec/ruby/core/mutex/sleep_spec.rb103
-rw-r--r--spec/ruby/core/mutex/synchronize_spec.rb66
-rw-r--r--spec/ruby/core/mutex/try_lock_spec.rb32
-rw-r--r--spec/ruby/core/mutex/unlock_spec.rb38
-rw-r--r--spec/ruby/core/nil/and_spec.rb11
-rw-r--r--spec/ruby/core/nil/case_compare_spec.rb13
-rw-r--r--spec/ruby/core/nil/dup_spec.rb7
-rw-r--r--spec/ruby/core/nil/inspect_spec.rb7
-rw-r--r--spec/ruby/core/nil/match_spec.rb21
-rw-r--r--spec/ruby/core/nil/nil_spec.rb7
-rw-r--r--spec/ruby/core/nil/nilclass_spec.rb15
-rw-r--r--spec/ruby/core/nil/or_spec.rb11
-rw-r--r--spec/ruby/core/nil/rationalize_spec.rb16
-rw-r--r--spec/ruby/core/nil/singleton_method_spec.rb15
-rw-r--r--spec/ruby/core/nil/to_a_spec.rb7
-rw-r--r--spec/ruby/core/nil/to_c_spec.rb7
-rw-r--r--spec/ruby/core/nil/to_f_spec.rb11
-rw-r--r--spec/ruby/core/nil/to_h_spec.rb8
-rw-r--r--spec/ruby/core/nil/to_i_spec.rb11
-rw-r--r--spec/ruby/core/nil/to_r_spec.rb7
-rw-r--r--spec/ruby/core/nil/to_s_spec.rb15
-rw-r--r--spec/ruby/core/nil/xor_spec.rb11
-rw-r--r--spec/ruby/core/numeric/abs2_spec.rb34
-rw-r--r--spec/ruby/core/numeric/abs_spec.rb6
-rw-r--r--spec/ruby/core/numeric/angle_spec.rb6
-rw-r--r--spec/ruby/core/numeric/arg_spec.rb6
-rw-r--r--spec/ruby/core/numeric/ceil_spec.rb15
-rw-r--r--spec/ruby/core/numeric/clone_spec.rb30
-rw-r--r--spec/ruby/core/numeric/coerce_spec.rb59
-rw-r--r--spec/ruby/core/numeric/comparison_spec.rb48
-rw-r--r--spec/ruby/core/numeric/conj_spec.rb6
-rw-r--r--spec/ruby/core/numeric/conjugate_spec.rb6
-rw-r--r--spec/ruby/core/numeric/denominator_spec.rb24
-rw-r--r--spec/ruby/core/numeric/div_spec.rb22
-rw-r--r--spec/ruby/core/numeric/divmod_spec.rb15
-rw-r--r--spec/ruby/core/numeric/dup_spec.rb16
-rw-r--r--spec/ruby/core/numeric/eql_spec.rb22
-rw-r--r--spec/ruby/core/numeric/fdiv_spec.rb31
-rw-r--r--spec/ruby/core/numeric/finite_spec.rb8
-rw-r--r--spec/ruby/core/numeric/fixtures/classes.rb17
-rw-r--r--spec/ruby/core/numeric/floor_spec.rb14
-rw-r--r--spec/ruby/core/numeric/i_spec.rb15
-rw-r--r--spec/ruby/core/numeric/imag_spec.rb6
-rw-r--r--spec/ruby/core/numeric/imaginary_spec.rb6
-rw-r--r--spec/ruby/core/numeric/infinite_spec.rb8
-rw-r--r--spec/ruby/core/numeric/integer_spec.rb8
-rw-r--r--spec/ruby/core/numeric/magnitude_spec.rb6
-rw-r--r--spec/ruby/core/numeric/modulo_spec.rb24
-rw-r--r--spec/ruby/core/numeric/negative_spec.rb41
-rw-r--r--spec/ruby/core/numeric/nonzero_spec.rb18
-rw-r--r--spec/ruby/core/numeric/numerator_spec.rb33
-rw-r--r--spec/ruby/core/numeric/numeric_spec.rb7
-rw-r--r--spec/ruby/core/numeric/phase_spec.rb6
-rw-r--r--spec/ruby/core/numeric/polar_spec.rb50
-rw-r--r--spec/ruby/core/numeric/positive_spec.rb41
-rw-r--r--spec/ruby/core/numeric/quo_spec.rb63
-rw-r--r--spec/ruby/core/numeric/real_spec.rb37
-rw-r--r--spec/ruby/core/numeric/rect_spec.rb6
-rw-r--r--spec/ruby/core/numeric/rectangular_spec.rb6
-rw-r--r--spec/ruby/core/numeric/remainder_spec.rb70
-rw-r--r--spec/ruby/core/numeric/round_spec.rb14
-rw-r--r--spec/ruby/core/numeric/shared/abs.rb19
-rw-r--r--spec/ruby/core/numeric/shared/arg.rb38
-rw-r--r--spec/ruby/core/numeric/shared/conj.rb20
-rw-r--r--spec/ruby/core/numeric/shared/imag.rb26
-rw-r--r--spec/ruby/core/numeric/shared/rect.rb48
-rw-r--r--spec/ruby/core/numeric/shared/step.rb410
-rw-r--r--spec/ruby/core/numeric/singleton_method_added_spec.rb41
-rw-r--r--spec/ruby/core/numeric/step_spec.rb121
-rw-r--r--spec/ruby/core/numeric/to_c_spec.rb45
-rw-r--r--spec/ruby/core/numeric/to_int_spec.rb10
-rw-r--r--spec/ruby/core/numeric/truncate_spec.rb14
-rw-r--r--spec/ruby/core/numeric/uminus_spec.rb31
-rw-r--r--spec/ruby/core/numeric/uplus_spec.rb9
-rw-r--r--spec/ruby/core/numeric/zero_spec.rb18
-rw-r--r--spec/ruby/core/objectspace/_id2ref_spec.rb65
-rw-r--r--spec/ruby/core/objectspace/count_objects_spec.rb5
-rw-r--r--spec/ruby/core/objectspace/define_finalizer_spec.rb215
-rw-r--r--spec/ruby/core/objectspace/each_object_spec.rb213
-rw-r--r--spec/ruby/core/objectspace/fixtures/classes.rb64
-rw-r--r--spec/ruby/core/objectspace/garbage_collect_spec.rb22
-rw-r--r--spec/ruby/core/objectspace/undefine_finalizer_spec.rb33
-rw-r--r--spec/ruby/core/objectspace/weakkeymap/clear_spec.rb27
-rw-r--r--spec/ruby/core/objectspace/weakkeymap/delete_spec.rb51
-rw-r--r--spec/ruby/core/objectspace/weakkeymap/element_reference_spec.rb107
-rw-r--r--spec/ruby/core/objectspace/weakkeymap/element_set_spec.rb82
-rw-r--r--spec/ruby/core/objectspace/weakkeymap/fixtures/classes.rb5
-rw-r--r--spec/ruby/core/objectspace/weakkeymap/getkey_spec.rb28
-rw-r--r--spec/ruby/core/objectspace/weakkeymap/inspect_spec.rb21
-rw-r--r--spec/ruby/core/objectspace/weakkeymap/key_spec.rb44
-rw-r--r--spec/ruby/core/objectspace/weakmap/delete_spec.rb30
-rw-r--r--spec/ruby/core/objectspace/weakmap/each_key_spec.rb11
-rw-r--r--spec/ruby/core/objectspace/weakmap/each_pair_spec.rb11
-rw-r--r--spec/ruby/core/objectspace/weakmap/each_spec.rb11
-rw-r--r--spec/ruby/core/objectspace/weakmap/each_value_spec.rb11
-rw-r--r--spec/ruby/core/objectspace/weakmap/element_reference_spec.rb24
-rw-r--r--spec/ruby/core/objectspace/weakmap/element_set_spec.rb38
-rw-r--r--spec/ruby/core/objectspace/weakmap/include_spec.rb6
-rw-r--r--spec/ruby/core/objectspace/weakmap/inspect_spec.rb25
-rw-r--r--spec/ruby/core/objectspace/weakmap/key_spec.rb6
-rw-r--r--spec/ruby/core/objectspace/weakmap/keys_spec.rb6
-rw-r--r--spec/ruby/core/objectspace/weakmap/length_spec.rb6
-rw-r--r--spec/ruby/core/objectspace/weakmap/member_spec.rb6
-rw-r--r--spec/ruby/core/objectspace/weakmap/shared/each.rb10
-rw-r--r--spec/ruby/core/objectspace/weakmap/shared/include.rb30
-rw-r--r--spec/ruby/core/objectspace/weakmap/shared/members.rb14
-rw-r--r--spec/ruby/core/objectspace/weakmap/shared/size.rb14
-rw-r--r--spec/ruby/core/objectspace/weakmap/size_spec.rb6
-rw-r--r--spec/ruby/core/objectspace/weakmap/values_spec.rb6
-rw-r--r--spec/ruby/core/objectspace/weakmap_spec.rb12
-rw-r--r--spec/ruby/core/proc/allocate_spec.rb9
-rw-r--r--spec/ruby/core/proc/arity_spec.rb656
-rw-r--r--spec/ruby/core/proc/binding_spec.rb21
-rw-r--r--spec/ruby/core/proc/block_pass_spec.rb21
-rw-r--r--spec/ruby/core/proc/call_spec.rb16
-rw-r--r--spec/ruby/core/proc/case_compare_spec.rb16
-rw-r--r--spec/ruby/core/proc/clone_spec.rb30
-rw-r--r--spec/ruby/core/proc/compose_spec.rb142
-rw-r--r--spec/ruby/core/proc/curry_spec.rb179
-rw-r--r--spec/ruby/core/proc/dup_spec.rb28
-rw-r--r--spec/ruby/core/proc/element_reference_spec.rb27
-rw-r--r--spec/ruby/core/proc/eql_spec.rb6
-rw-r--r--spec/ruby/core/proc/equal_value_spec.rb6
-rw-r--r--spec/ruby/core/proc/fixtures/common.rb72
-rw-r--r--spec/ruby/core/proc/fixtures/proc_aref.rb10
-rw-r--r--spec/ruby/core/proc/fixtures/proc_aref_frozen.rb10
-rw-r--r--spec/ruby/core/proc/fixtures/source_location.rb55
-rw-r--r--spec/ruby/core/proc/hash_spec.rb17
-rw-r--r--spec/ruby/core/proc/inspect_spec.rb6
-rw-r--r--spec/ruby/core/proc/lambda_spec.rb62
-rw-r--r--spec/ruby/core/proc/new_spec.rb178
-rw-r--r--spec/ruby/core/proc/parameters_spec.rb175
-rw-r--r--spec/ruby/core/proc/ruby2_keywords_spec.rb66
-rw-r--r--spec/ruby/core/proc/shared/call.rb99
-rw-r--r--spec/ruby/core/proc/shared/call_arguments.rb29
-rw-r--r--spec/ruby/core/proc/shared/compose.rb22
-rw-r--r--spec/ruby/core/proc/shared/dup.rb39
-rw-r--r--spec/ruby/core/proc/shared/equal.rb83
-rw-r--r--spec/ruby/core/proc/shared/to_s.rb60
-rw-r--r--spec/ruby/core/proc/source_location_spec.rb104
-rw-r--r--spec/ruby/core/proc/to_proc_spec.rb9
-rw-r--r--spec/ruby/core/proc/to_s_spec.rb6
-rw-r--r--spec/ruby/core/proc/yield_spec.rb16
-rw-r--r--spec/ruby/core/process/_fork_spec.rb24
-rw-r--r--spec/ruby/core/process/abort_spec.rb6
-rw-r--r--spec/ruby/core/process/argv0_spec.rb25
-rw-r--r--spec/ruby/core/process/clock_getres_spec.rb33
-rw-r--r--spec/ruby/core/process/clock_gettime_spec.rb152
-rw-r--r--spec/ruby/core/process/constants_spec.rb114
-rw-r--r--spec/ruby/core/process/daemon_spec.rb118
-rw-r--r--spec/ruby/core/process/detach_spec.rb81
-rw-r--r--spec/ruby/core/process/egid_spec.rb58
-rw-r--r--spec/ruby/core/process/euid_spec.rb56
-rw-r--r--spec/ruby/core/process/exec_spec.rb241
-rw-r--r--spec/ruby/core/process/exit_spec.rb10
-rw-r--r--spec/ruby/core/process/fixtures/argv0.rb6
-rw-r--r--spec/ruby/core/process/fixtures/clocks.rb18
-rw-r--r--spec/ruby/core/process/fixtures/common.rb88
-rw-r--r--spec/ruby/core/process/fixtures/daemon.rb111
-rw-r--r--spec/ruby/core/process/fixtures/in.txt1
-rw-r--r--spec/ruby/core/process/fixtures/kill.rb43
-rw-r--r--spec/ruby/core/process/fixtures/map_fd.rb9
-rw-r--r--spec/ruby/core/process/fixtures/setpriority.rb12
-rw-r--r--spec/ruby/core/process/fork_spec.rb6
-rw-r--r--spec/ruby/core/process/getpgid_spec.rb17
-rw-r--r--spec/ruby/core/process/getpgrp_spec.rb7
-rw-r--r--spec/ruby/core/process/getpriority_spec.rb23
-rw-r--r--spec/ruby/core/process/getrlimit_spec.rb100
-rw-r--r--spec/ruby/core/process/gid/change_privilege_spec.rb5
-rw-r--r--spec/ruby/core/process/gid/eid_spec.rb9
-rw-r--r--spec/ruby/core/process/gid/grant_privilege_spec.rb5
-rw-r--r--spec/ruby/core/process/gid/re_exchange_spec.rb5
-rw-r--r--spec/ruby/core/process/gid/re_exchangeable_spec.rb5
-rw-r--r--spec/ruby/core/process/gid/rid_spec.rb5
-rw-r--r--spec/ruby/core/process/gid/sid_available_spec.rb5
-rw-r--r--spec/ruby/core/process/gid/switch_spec.rb5
-rw-r--r--spec/ruby/core/process/gid_spec.rb22
-rw-r--r--spec/ruby/core/process/groups_spec.rb67
-rw-r--r--spec/ruby/core/process/initgroups_spec.rb22
-rw-r--r--spec/ruby/core/process/kill_spec.rb132
-rw-r--r--spec/ruby/core/process/last_status_spec.rb18
-rw-r--r--spec/ruby/core/process/maxgroups_spec.rb19
-rw-r--r--spec/ruby/core/process/pid_spec.rb9
-rw-r--r--spec/ruby/core/process/ppid_spec.rb9
-rw-r--r--spec/ruby/core/process/set_proctitle_spec.rb23
-rw-r--r--spec/ruby/core/process/setpgid_spec.rb29
-rw-r--r--spec/ruby/core/process/setpgrp_spec.rb37
-rw-r--r--spec/ruby/core/process/setpriority_spec.rb60
-rw-r--r--spec/ruby/core/process/setrlimit_spec.rb237
-rw-r--r--spec/ruby/core/process/setsid_spec.rb16
-rw-r--r--spec/ruby/core/process/spawn_spec.rb756
-rw-r--r--spec/ruby/core/process/status/bit_and_spec.rb38
-rw-r--r--spec/ruby/core/process/status/coredump_spec.rb5
-rw-r--r--spec/ruby/core/process/status/equal_value_spec.rb15
-rw-r--r--spec/ruby/core/process/status/exited_spec.rb32
-rw-r--r--spec/ruby/core/process/status/exitstatus_spec.rb25
-rw-r--r--spec/ruby/core/process/status/inspect_spec.rb5
-rw-r--r--spec/ruby/core/process/status/pid_spec.rb15
-rw-r--r--spec/ruby/core/process/status/right_shift_spec.rb37
-rw-r--r--spec/ruby/core/process/status/signaled_spec.rb31
-rw-r--r--spec/ruby/core/process/status/stopped_spec.rb5
-rw-r--r--spec/ruby/core/process/status/stopsig_spec.rb5
-rw-r--r--spec/ruby/core/process/status/success_spec.rb41
-rw-r--r--spec/ruby/core/process/status/termsig_spec.rb43
-rw-r--r--spec/ruby/core/process/status/to_i_spec.rb13
-rw-r--r--spec/ruby/core/process/status/to_int_spec.rb5
-rw-r--r--spec/ruby/core/process/status/to_s_spec.rb5
-rw-r--r--spec/ruby/core/process/status/wait_spec.rb100
-rw-r--r--spec/ruby/core/process/sys/getegid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/geteuid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/getgid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/getuid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/issetugid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/setegid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/seteuid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/setgid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/setregid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/setresgid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/setresuid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/setreuid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/setrgid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/setruid_spec.rb5
-rw-r--r--spec/ruby/core/process/sys/setuid_spec.rb5
-rw-r--r--spec/ruby/core/process/times_spec.rb19
-rw-r--r--spec/ruby/core/process/tms/cstime_spec.rb17
-rw-r--r--spec/ruby/core/process/tms/cutime_spec.rb17
-rw-r--r--spec/ruby/core/process/tms/stime_spec.rb17
-rw-r--r--spec/ruby/core/process/tms/utime_spec.rb17
-rw-r--r--spec/ruby/core/process/uid/change_privilege_spec.rb5
-rw-r--r--spec/ruby/core/process/uid/eid_spec.rb9
-rw-r--r--spec/ruby/core/process/uid/grant_privilege_spec.rb5
-rw-r--r--spec/ruby/core/process/uid/re_exchange_spec.rb5
-rw-r--r--spec/ruby/core/process/uid/re_exchangeable_spec.rb5
-rw-r--r--spec/ruby/core/process/uid/rid_spec.rb5
-rw-r--r--spec/ruby/core/process/uid/sid_available_spec.rb5
-rw-r--r--spec/ruby/core/process/uid/switch_spec.rb5
-rw-r--r--spec/ruby/core/process/uid_spec.rb57
-rw-r--r--spec/ruby/core/process/wait2_spec.rb45
-rw-r--r--spec/ruby/core/process/wait_spec.rb91
-rw-r--r--spec/ruby/core/process/waitall_spec.rb48
-rw-r--r--spec/ruby/core/process/waitpid2_spec.rb5
-rw-r--r--spec/ruby/core/process/waitpid_spec.rb14
-rw-r--r--spec/ruby/core/process/warmup_spec.rb11
-rw-r--r--spec/ruby/core/queue/append_spec.rb6
-rw-r--r--spec/ruby/core/queue/clear_spec.rb6
-rw-r--r--spec/ruby/core/queue/close_spec.rb6
-rw-r--r--spec/ruby/core/queue/closed_spec.rb6
-rw-r--r--spec/ruby/core/queue/deq_spec.rb11
-rw-r--r--spec/ruby/core/queue/empty_spec.rb6
-rw-r--r--spec/ruby/core/queue/enq_spec.rb6
-rw-r--r--spec/ruby/core/queue/freeze_spec.rb6
-rw-r--r--spec/ruby/core/queue/initialize_spec.rb60
-rw-r--r--spec/ruby/core/queue/length_spec.rb6
-rw-r--r--spec/ruby/core/queue/num_waiting_spec.rb6
-rw-r--r--spec/ruby/core/queue/pop_spec.rb11
-rw-r--r--spec/ruby/core/queue/push_spec.rb6
-rw-r--r--spec/ruby/core/queue/shift_spec.rb11
-rw-r--r--spec/ruby/core/queue/size_spec.rb6
-rw-r--r--spec/ruby/core/random/bytes_spec.rb29
-rw-r--r--spec/ruby/core/random/default_spec.rb7
-rw-r--r--spec/ruby/core/random/equal_value_spec.rb37
-rw-r--r--spec/ruby/core/random/fixtures/classes.rb15
-rw-r--r--spec/ruby/core/random/new_seed_spec.rb24
-rw-r--r--spec/ruby/core/random/new_spec.rb38
-rw-r--r--spec/ruby/core/random/rand_spec.rb224
-rw-r--r--spec/ruby/core/random/random_number_spec.rb8
-rw-r--r--spec/ruby/core/random/seed_spec.rb29
-rw-r--r--spec/ruby/core/random/shared/bytes.rb17
-rw-r--r--spec/ruby/core/random/shared/rand.rb9
-rw-r--r--spec/ruby/core/random/srand_spec.rb39
-rw-r--r--spec/ruby/core/random/urandom_spec.rb25
-rw-r--r--spec/ruby/core/range/begin_spec.rb6
-rw-r--r--spec/ruby/core/range/bsearch_spec.rb466
-rw-r--r--spec/ruby/core/range/case_compare_spec.rb19
-rw-r--r--spec/ruby/core/range/clone_spec.rb26
-rw-r--r--spec/ruby/core/range/count_spec.rb12
-rw-r--r--spec/ruby/core/range/cover_spec.rb14
-rw-r--r--spec/ruby/core/range/dup_spec.rb23
-rw-r--r--spec/ruby/core/range/each_spec.rb101
-rw-r--r--spec/ruby/core/range/end_spec.rb6
-rw-r--r--spec/ruby/core/range/eql_spec.rb10
-rw-r--r--spec/ruby/core/range/equal_value_spec.rb18
-rw-r--r--spec/ruby/core/range/exclude_end_spec.rb19
-rw-r--r--spec/ruby/core/range/first_spec.rb53
-rw-r--r--spec/ruby/core/range/fixtures/classes.rb90
-rw-r--r--spec/ruby/core/range/frozen_spec.rb25
-rw-r--r--spec/ruby/core/range/hash_spec.rb24
-rw-r--r--spec/ruby/core/range/include_spec.rb14
-rw-r--r--spec/ruby/core/range/initialize_spec.rb41
-rw-r--r--spec/ruby/core/range/inspect_spec.rb29
-rw-r--r--spec/ruby/core/range/last_spec.rb57
-rw-r--r--spec/ruby/core/range/max_spec.rb115
-rw-r--r--spec/ruby/core/range/member_spec.rb10
-rw-r--r--spec/ruby/core/range/min_spec.rb88
-rw-r--r--spec/ruby/core/range/minmax_spec.rb130
-rw-r--r--spec/ruby/core/range/new_spec.rb77
-rw-r--r--spec/ruby/core/range/overlap_spec.rb89
-rw-r--r--spec/ruby/core/range/percent_spec.rb16
-rw-r--r--spec/ruby/core/range/range_spec.rb7
-rw-r--r--spec/ruby/core/range/reverse_each_spec.rb103
-rw-r--r--spec/ruby/core/range/shared/begin.rb10
-rw-r--r--spec/ruby/core/range/shared/cover.rb193
-rw-r--r--spec/ruby/core/range/shared/cover_and_include.rb86
-rw-r--r--spec/ruby/core/range/shared/end.rb10
-rw-r--r--spec/ruby/core/range/shared/equal_value.rb51
-rw-r--r--spec/ruby/core/range/shared/include.rb91
-rw-r--r--spec/ruby/core/range/size_spec.rb92
-rw-r--r--spec/ruby/core/range/step_spec.rb683
-rw-r--r--spec/ruby/core/range/to_a_spec.rb39
-rw-r--r--spec/ruby/core/range/to_s_spec.rb23
-rw-r--r--spec/ruby/core/range/to_set_spec.rb55
-rw-r--r--spec/ruby/core/rational/abs_spec.rb6
-rw-r--r--spec/ruby/core/rational/ceil_spec.rb45
-rw-r--r--spec/ruby/core/rational/comparison_spec.rb93
-rw-r--r--spec/ruby/core/rational/denominator_spec.rb14
-rw-r--r--spec/ruby/core/rational/div_spec.rb54
-rw-r--r--spec/ruby/core/rational/divide_spec.rb74
-rw-r--r--spec/ruby/core/rational/divmod_spec.rb42
-rw-r--r--spec/ruby/core/rational/equal_value_spec.rb39
-rw-r--r--spec/ruby/core/rational/exponent_spec.rb236
-rw-r--r--spec/ruby/core/rational/fdiv_spec.rb5
-rw-r--r--spec/ruby/core/rational/fixtures/rational.rb14
-rw-r--r--spec/ruby/core/rational/floor_spec.rb45
-rw-r--r--spec/ruby/core/rational/hash_spec.rb9
-rw-r--r--spec/ruby/core/rational/inspect_spec.rb14
-rw-r--r--spec/ruby/core/rational/integer_spec.rb13
-rw-r--r--spec/ruby/core/rational/magnitude_spec.rb6
-rw-r--r--spec/ruby/core/rational/marshal_dump_spec.rb11
-rw-r--r--spec/ruby/core/rational/minus_spec.rb51
-rw-r--r--spec/ruby/core/rational/modulo_spec.rb43
-rw-r--r--spec/ruby/core/rational/multiply_spec.rb65
-rw-r--r--spec/ruby/core/rational/numerator_spec.rb10
-rw-r--r--spec/ruby/core/rational/plus_spec.rb50
-rw-r--r--spec/ruby/core/rational/quo_spec.rb25
-rw-r--r--spec/ruby/core/rational/rational_spec.rb11
-rw-r--r--spec/ruby/core/rational/rationalize_spec.rb36
-rw-r--r--spec/ruby/core/rational/remainder_spec.rb5
-rw-r--r--spec/ruby/core/rational/round_spec.rb106
-rw-r--r--spec/ruby/core/rational/shared/abs.rb11
-rw-r--r--spec/ruby/core/rational/shared/arithmetic_exception_in_coerce.rb11
-rw-r--r--spec/ruby/core/rational/to_f_spec.rb16
-rw-r--r--spec/ruby/core/rational/to_i_spec.rb12
-rw-r--r--spec/ruby/core/rational/to_r_spec.rb26
-rw-r--r--spec/ruby/core/rational/to_s_spec.rb14
-rw-r--r--spec/ruby/core/rational/truncate_spec.rb71
-rw-r--r--spec/ruby/core/rational/zero_spec.rb14
-rw-r--r--spec/ruby/core/refinement/append_features_spec.rb19
-rw-r--r--spec/ruby/core/refinement/extend_object_spec.rb21
-rw-r--r--spec/ruby/core/refinement/fixtures/classes.rb10
-rw-r--r--spec/ruby/core/refinement/import_methods_spec.rb267
-rw-r--r--spec/ruby/core/refinement/include_spec.rb13
-rw-r--r--spec/ruby/core/refinement/prepend_features_spec.rb19
-rw-r--r--spec/ruby/core/refinement/prepend_spec.rb13
-rw-r--r--spec/ruby/core/refinement/refined_class_spec.rb38
-rw-r--r--spec/ruby/core/refinement/shared/target.rb13
-rw-r--r--spec/ruby/core/refinement/target_spec.rb8
-rw-r--r--spec/ruby/core/regexp/case_compare_spec.rb35
-rw-r--r--spec/ruby/core/regexp/casefold_spec.rb8
-rw-r--r--spec/ruby/core/regexp/compile_spec.rb19
-rw-r--r--spec/ruby/core/regexp/encoding_spec.rb62
-rw-r--r--spec/ruby/core/regexp/eql_spec.rb6
-rw-r--r--spec/ruby/core/regexp/equal_value_spec.rb6
-rw-r--r--spec/ruby/core/regexp/escape_spec.rb6
-rw-r--r--spec/ruby/core/regexp/fixed_encoding_spec.rb36
-rw-r--r--spec/ruby/core/regexp/hash_spec.rb20
-rw-r--r--spec/ruby/core/regexp/initialize_spec.rb15
-rw-r--r--spec/ruby/core/regexp/inspect_spec.rb44
-rw-r--r--spec/ruby/core/regexp/last_match_spec.rb56
-rw-r--r--spec/ruby/core/regexp/linear_time_spec.rb33
-rw-r--r--spec/ruby/core/regexp/match_spec.rb146
-rw-r--r--spec/ruby/core/regexp/named_captures_spec.rb35
-rw-r--r--spec/ruby/core/regexp/names_spec.rb29
-rw-r--r--spec/ruby/core/regexp/new_spec.rb19
-rw-r--r--spec/ruby/core/regexp/options_spec.rb54
-rw-r--r--spec/ruby/core/regexp/quote_spec.rb6
-rw-r--r--spec/ruby/core/regexp/shared/equal_value.rb31
-rw-r--r--spec/ruby/core/regexp/shared/new.rb315
-rw-r--r--spec/ruby/core/regexp/shared/quote.rb41
-rw-r--r--spec/ruby/core/regexp/source_spec.rb47
-rw-r--r--spec/ruby/core/regexp/timeout_spec.rb33
-rw-r--r--spec/ruby/core/regexp/to_s_spec.rb62
-rw-r--r--spec/ruby/core/regexp/try_convert_spec.rb27
-rw-r--r--spec/ruby/core/regexp/union_spec.rb182
-rw-r--r--spec/ruby/core/set/add_spec.rb34
-rw-r--r--spec/ruby/core/set/append_spec.rb6
-rw-r--r--spec/ruby/core/set/case_compare_spec.rb11
-rw-r--r--spec/ruby/core/set/case_equality_spec.rb6
-rw-r--r--spec/ruby/core/set/classify_spec.rb26
-rw-r--r--spec/ruby/core/set/clear_spec.rb16
-rw-r--r--spec/ruby/core/set/collect_spec.rb6
-rw-r--r--spec/ruby/core/set/compare_by_identity_spec.rb153
-rw-r--r--spec/ruby/core/set/comparison_spec.rb26
-rw-r--r--spec/ruby/core/set/constructor_spec.rb14
-rw-r--r--spec/ruby/core/set/delete_if_spec.rb37
-rw-r--r--spec/ruby/core/set/delete_spec.rb36
-rw-r--r--spec/ruby/core/set/difference_spec.rb6
-rw-r--r--spec/ruby/core/set/disjoint_spec.rb22
-rw-r--r--spec/ruby/core/set/divide_spec.rb68
-rw-r--r--spec/ruby/core/set/each_spec.rb26
-rw-r--r--spec/ruby/core/set/empty_spec.rb9
-rw-r--r--spec/ruby/core/set/enumerable/to_set_spec.rb12
-rw-r--r--spec/ruby/core/set/eql_spec.rb14
-rw-r--r--spec/ruby/core/set/equal_value_spec.rb34
-rw-r--r--spec/ruby/core/set/exclusion_spec.rb17
-rw-r--r--spec/ruby/core/set/filter_spec.rb6
-rw-r--r--spec/ruby/core/set/fixtures/set_like.rb30
-rw-r--r--spec/ruby/core/set/flatten_merge_spec.rb24
-rw-r--r--spec/ruby/core/set/flatten_spec.rb59
-rw-r--r--spec/ruby/core/set/hash_spec.rb19
-rw-r--r--spec/ruby/core/set/include_spec.rb6
-rw-r--r--spec/ruby/core/set/initialize_clone_spec.rb15
-rw-r--r--spec/ruby/core/set/initialize_spec.rb72
-rw-r--r--spec/ruby/core/set/inspect_spec.rb6
-rw-r--r--spec/ruby/core/set/intersect_spec.rb22
-rw-r--r--spec/ruby/core/set/intersection_spec.rb10
-rw-r--r--spec/ruby/core/set/join_spec.rb30
-rw-r--r--spec/ruby/core/set/keep_if_spec.rb37
-rw-r--r--spec/ruby/core/set/length_spec.rb6
-rw-r--r--spec/ruby/core/set/map_spec.rb6
-rw-r--r--spec/ruby/core/set/member_spec.rb6
-rw-r--r--spec/ruby/core/set/merge_spec.rb37
-rw-r--r--spec/ruby/core/set/minus_spec.rb6
-rw-r--r--spec/ruby/core/set/plus_spec.rb6
-rw-r--r--spec/ruby/core/set/pretty_print_cycle_spec.rb14
-rw-r--r--spec/ruby/core/set/proper_subset_spec.rb45
-rw-r--r--spec/ruby/core/set/proper_superset_spec.rb42
-rw-r--r--spec/ruby/core/set/reject_spec.rb41
-rw-r--r--spec/ruby/core/set/replace_spec.rb24
-rw-r--r--spec/ruby/core/set/select_spec.rb6
-rw-r--r--spec/ruby/core/set/set_spec.rb10
-rw-r--r--spec/ruby/core/set/shared/add.rb14
-rw-r--r--spec/ruby/core/set/shared/collect.rb20
-rw-r--r--spec/ruby/core/set/shared/difference.rb15
-rw-r--r--spec/ruby/core/set/shared/include.rb29
-rw-r--r--spec/ruby/core/set/shared/inspect.rb45
-rw-r--r--spec/ruby/core/set/shared/intersection.rb15
-rw-r--r--spec/ruby/core/set/shared/length.rb6
-rw-r--r--spec/ruby/core/set/shared/select.rb41
-rw-r--r--spec/ruby/core/set/shared/union.rb15
-rw-r--r--spec/ruby/core/set/size_spec.rb6
-rw-r--r--spec/ruby/core/set/sortedset/sortedset_spec.rb13
-rw-r--r--spec/ruby/core/set/subset_spec.rb45
-rw-r--r--spec/ruby/core/set/subtract_spec.rb16
-rw-r--r--spec/ruby/core/set/superset_spec.rb42
-rw-r--r--spec/ruby/core/set/to_a_spec.rb7
-rw-r--r--spec/ruby/core/set/to_s_spec.rb11
-rw-r--r--spec/ruby/core/set/union_spec.rb10
-rw-r--r--spec/ruby/core/signal/fixtures/trap_all.rb15
-rw-r--r--spec/ruby/core/signal/list_spec.rb68
-rw-r--r--spec/ruby/core/signal/signame_spec.rb34
-rw-r--r--spec/ruby/core/signal/trap_spec.rb320
-rw-r--r--spec/ruby/core/sizedqueue/append_spec.rb16
-rw-r--r--spec/ruby/core/sizedqueue/clear_spec.rb6
-rw-r--r--spec/ruby/core/sizedqueue/close_spec.rb6
-rw-r--r--spec/ruby/core/sizedqueue/closed_spec.rb6
-rw-r--r--spec/ruby/core/sizedqueue/deq_spec.rb11
-rw-r--r--spec/ruby/core/sizedqueue/empty_spec.rb6
-rw-r--r--spec/ruby/core/sizedqueue/enq_spec.rb16
-rw-r--r--spec/ruby/core/sizedqueue/freeze_spec.rb6
-rw-r--r--spec/ruby/core/sizedqueue/length_spec.rb6
-rw-r--r--spec/ruby/core/sizedqueue/max_spec.rb10
-rw-r--r--spec/ruby/core/sizedqueue/new_spec.rb6
-rw-r--r--spec/ruby/core/sizedqueue/num_waiting_spec.rb6
-rw-r--r--spec/ruby/core/sizedqueue/pop_spec.rb11
-rw-r--r--spec/ruby/core/sizedqueue/push_spec.rb16
-rw-r--r--spec/ruby/core/sizedqueue/shift_spec.rb11
-rw-r--r--spec/ruby/core/sizedqueue/size_spec.rb6
-rw-r--r--spec/ruby/core/string/allocate_spec.rb19
-rw-r--r--spec/ruby/core/string/append_as_bytes_spec.rb58
-rw-r--r--spec/ruby/core/string/append_spec.rb14
-rw-r--r--spec/ruby/core/string/ascii_only_spec.rb82
-rw-r--r--spec/ruby/core/string/b_spec.rb16
-rw-r--r--spec/ruby/core/string/byteindex_spec.rb298
-rw-r--r--spec/ruby/core/string/byterindex_spec.rb353
-rw-r--r--spec/ruby/core/string/bytes_spec.rb55
-rw-r--r--spec/ruby/core/string/bytesize_spec.rb33
-rw-r--r--spec/ruby/core/string/byteslice_spec.rb33
-rw-r--r--spec/ruby/core/string/bytesplice_spec.rb294
-rw-r--r--spec/ruby/core/string/capitalize_spec.rb207
-rw-r--r--spec/ruby/core/string/case_compare_spec.rb8
-rw-r--r--spec/ruby/core/string/casecmp_spec.rb204
-rw-r--r--spec/ruby/core/string/center_spec.rb117
-rw-r--r--spec/ruby/core/string/chars_spec.rb16
-rw-r--r--spec/ruby/core/string/chilled_string_spec.rb151
-rw-r--r--spec/ruby/core/string/chomp_spec.rb366
-rw-r--r--spec/ruby/core/string/chop_spec.rb119
-rw-r--r--spec/ruby/core/string/chr_spec.rb42
-rw-r--r--spec/ruby/core/string/clear_spec.rb38
-rw-r--r--spec/ruby/core/string/clone_spec.rb61
-rw-r--r--spec/ruby/core/string/codepoints_spec.rb18
-rw-r--r--spec/ruby/core/string/comparison_spec.rb112
-rw-r--r--spec/ruby/core/string/concat_spec.rb27
-rw-r--r--spec/ruby/core/string/count_spec.rb105
-rw-r--r--spec/ruby/core/string/crypt_spec.rb92
-rw-r--r--spec/ruby/core/string/dedup_spec.rb6
-rw-r--r--spec/ruby/core/string/delete_prefix_spec.rb83
-rw-r--r--spec/ruby/core/string/delete_spec.rb117
-rw-r--r--spec/ruby/core/string/delete_suffix_spec.rb83
-rw-r--r--spec/ruby/core/string/downcase_spec.rb195
-rw-r--r--spec/ruby/core/string/dump_spec.rb396
-rw-r--r--spec/ruby/core/string/dup_spec.rb65
-rw-r--r--spec/ruby/core/string/each_byte_spec.rb61
-rw-r--r--spec/ruby/core/string/each_char_spec.rb8
-rw-r--r--spec/ruby/core/string/each_codepoint_spec.rb8
-rw-r--r--spec/ruby/core/string/each_grapheme_cluster_spec.rb16
-rw-r--r--spec/ruby/core/string/each_line_spec.rb9
-rw-r--r--spec/ruby/core/string/element_reference_spec.rb35
-rw-r--r--spec/ruby/core/string/element_set_spec.rb589
-rw-r--r--spec/ruby/core/string/empty_spec.rb12
-rw-r--r--spec/ruby/core/string/encode_spec.rb240
-rw-r--r--spec/ruby/core/string/encoding_spec.rb184
-rw-r--r--spec/ruby/core/string/end_with_spec.rb8
-rw-r--r--spec/ruby/core/string/eql_spec.rb21
-rw-r--r--spec/ruby/core/string/equal_value_spec.rb8
-rw-r--r--spec/ruby/core/string/fixtures/classes.rb60
-rw-r--r--spec/ruby/core/string/fixtures/freeze_magic_comment.rb3
-rw-r--r--spec/ruby/core/string/fixtures/iso-8859-9-encoding.rb9
-rw-r--r--spec/ruby/core/string/fixtures/to_c.rb5
-rw-r--r--spec/ruby/core/string/force_encoding_spec.rb72
-rw-r--r--spec/ruby/core/string/freeze_spec.rb18
-rw-r--r--spec/ruby/core/string/getbyte_spec.rb69
-rw-r--r--spec/ruby/core/string/grapheme_clusters_spec.rb14
-rw-r--r--spec/ruby/core/string/gsub_spec.rb615
-rw-r--r--spec/ruby/core/string/hash_spec.rb9
-rw-r--r--spec/ruby/core/string/hex_spec.rb49
-rw-r--r--spec/ruby/core/string/include_spec.rb49
-rw-r--r--spec/ruby/core/string/index_spec.rb350
-rw-r--r--spec/ruby/core/string/initialize_spec.rb26
-rw-r--r--spec/ruby/core/string/insert_spec.rb81
-rw-r--r--spec/ruby/core/string/inspect_spec.rb520
-rw-r--r--spec/ruby/core/string/intern_spec.rb7
-rw-r--r--spec/ruby/core/string/length_spec.rb7
-rw-r--r--spec/ruby/core/string/lines_spec.rb19
-rw-r--r--spec/ruby/core/string/ljust_spec.rb100
-rw-r--r--spec/ruby/core/string/lstrip_spec.rb74
-rw-r--r--spec/ruby/core/string/match_spec.rb167
-rw-r--r--spec/ruby/core/string/modulo_spec.rb797
-rw-r--r--spec/ruby/core/string/multiply_spec.rb7
-rw-r--r--spec/ruby/core/string/new_spec.rb61
-rw-r--r--spec/ruby/core/string/next_spec.rb11
-rw-r--r--spec/ruby/core/string/oct_spec.rb88
-rw-r--r--spec/ruby/core/string/ord_spec.rb33
-rw-r--r--spec/ruby/core/string/partition_spec.rb63
-rw-r--r--spec/ruby/core/string/plus_spec.rb37
-rw-r--r--spec/ruby/core/string/prepend_spec.rb55
-rw-r--r--spec/ruby/core/string/replace_spec.rb7
-rw-r--r--spec/ruby/core/string/reverse_spec.rb70
-rw-r--r--spec/ruby/core/string/rindex_spec.rb384
-rw-r--r--spec/ruby/core/string/rjust_spec.rb100
-rw-r--r--spec/ruby/core/string/rpartition_spec.rb71
-rw-r--r--spec/ruby/core/string/rstrip_spec.rb80
-rw-r--r--spec/ruby/core/string/scan_spec.rb173
-rw-r--r--spec/ruby/core/string/scrub_spec.rb164
-rw-r--r--spec/ruby/core/string/setbyte_spec.rb112
-rw-r--r--spec/ruby/core/string/shared/byte_index_common.rb63
-rw-r--r--spec/ruby/core/string/shared/chars.rb66
-rw-r--r--spec/ruby/core/string/shared/codepoints.rb62
-rw-r--r--spec/ruby/core/string/shared/concat.rb159
-rw-r--r--spec/ruby/core/string/shared/dedup.rb51
-rw-r--r--spec/ruby/core/string/shared/each_char_without_block.rb26
-rw-r--r--spec/ruby/core/string/shared/each_codepoint_without_block.rb33
-rw-r--r--spec/ruby/core/string/shared/each_line.rb162
-rw-r--r--spec/ruby/core/string/shared/each_line_without_block.rb17
-rw-r--r--spec/ruby/core/string/shared/encode.rb432
-rw-r--r--spec/ruby/core/string/shared/eql.rb38
-rw-r--r--spec/ruby/core/string/shared/equal_value.rb29
-rw-r--r--spec/ruby/core/string/shared/grapheme_clusters.rb16
-rw-r--r--spec/ruby/core/string/shared/length.rb55
-rw-r--r--spec/ruby/core/string/shared/partition.rb33
-rw-r--r--spec/ruby/core/string/shared/replace.rb48
-rw-r--r--spec/ruby/core/string/shared/slice.rb517
-rw-r--r--spec/ruby/core/string/shared/strip.rb14
-rw-r--r--spec/ruby/core/string/shared/succ.rb87
-rw-r--r--spec/ruby/core/string/shared/to_s.rb13
-rw-r--r--spec/ruby/core/string/shared/to_sym.rb72
-rw-r--r--spec/ruby/core/string/size_spec.rb7
-rw-r--r--spec/ruby/core/string/slice_spec.rb390
-rw-r--r--spec/ruby/core/string/split_spec.rb546
-rw-r--r--spec/ruby/core/string/squeeze_spec.rb111
-rw-r--r--spec/ruby/core/string/start_with_spec.rb27
-rw-r--r--spec/ruby/core/string/string_spec.rb7
-rw-r--r--spec/ruby/core/string/strip_spec.rb58
-rw-r--r--spec/ruby/core/string/sub_spec.rb512
-rw-r--r--spec/ruby/core/string/succ_spec.rb11
-rw-r--r--spec/ruby/core/string/sum_spec.rb22
-rw-r--r--spec/ruby/core/string/swapcase_spec.rb193
-rw-r--r--spec/ruby/core/string/to_c_spec.rb53
-rw-r--r--spec/ruby/core/string/to_f_spec.rb142
-rw-r--r--spec/ruby/core/string/to_i_spec.rb349
-rw-r--r--spec/ruby/core/string/to_r_spec.rb62
-rw-r--r--spec/ruby/core/string/to_s_spec.rb7
-rw-r--r--spec/ruby/core/string/to_str_spec.rb7
-rw-r--r--spec/ruby/core/string/to_sym_spec.rb7
-rw-r--r--spec/ruby/core/string/tr_s_spec.rb133
-rw-r--r--spec/ruby/core/string/tr_spec.rb128
-rw-r--r--spec/ruby/core/string/try_convert_spec.rb50
-rw-r--r--spec/ruby/core/string/uminus_spec.rb6
-rw-r--r--spec/ruby/core/string/undump_spec.rb441
-rw-r--r--spec/ruby/core/string/unicode_normalize_spec.rb116
-rw-r--r--spec/ruby/core/string/unicode_normalized_spec.rb75
-rw-r--r--spec/ruby/core/string/unpack/a_spec.rb66
-rw-r--r--spec/ruby/core/string/unpack/at_spec.rb29
-rw-r--r--spec/ruby/core/string/unpack/b_spec.rb221
-rw-r--r--spec/ruby/core/string/unpack/c_spec.rb75
-rw-r--r--spec/ruby/core/string/unpack/comment_spec.rb25
-rw-r--r--spec/ruby/core/string/unpack/d_spec.rb28
-rw-r--r--spec/ruby/core/string/unpack/e_spec.rb14
-rw-r--r--spec/ruby/core/string/unpack/f_spec.rb28
-rw-r--r--spec/ruby/core/string/unpack/g_spec.rb14
-rw-r--r--spec/ruby/core/string/unpack/h_spec.rb159
-rw-r--r--spec/ruby/core/string/unpack/i_spec.rb152
-rw-r--r--spec/ruby/core/string/unpack/j_spec.rb272
-rw-r--r--spec/ruby/core/string/unpack/l_spec.rb265
-rw-r--r--spec/ruby/core/string/unpack/m_spec.rb192
-rw-r--r--spec/ruby/core/string/unpack/n_spec.rb18
-rw-r--r--spec/ruby/core/string/unpack/p_spec.rb44
-rw-r--r--spec/ruby/core/string/unpack/percent_spec.rb7
-rw-r--r--spec/ruby/core/string/unpack/q_spec.rb64
-rw-r--r--spec/ruby/core/string/unpack/s_spec.rb152
-rw-r--r--spec/ruby/core/string/unpack/shared/basic.rb37
-rw-r--r--spec/ruby/core/string/unpack/shared/float.rb319
-rw-r--r--spec/ruby/core/string/unpack/shared/integer.rb411
-rw-r--r--spec/ruby/core/string/unpack/shared/string.rb51
-rw-r--r--spec/ruby/core/string/unpack/shared/taint.rb2
-rw-r--r--spec/ruby/core/string/unpack/shared/unicode.rb72
-rw-r--r--spec/ruby/core/string/unpack/u_spec.rb97
-rw-r--r--spec/ruby/core/string/unpack/v_spec.rb18
-rw-r--r--spec/ruby/core/string/unpack/w_spec.rb47
-rw-r--r--spec/ruby/core/string/unpack/x_spec.rb62
-rw-r--r--spec/ruby/core/string/unpack/z_spec.rb28
-rw-r--r--spec/ruby/core/string/unpack1_spec.rb47
-rw-r--r--spec/ruby/core/string/unpack_spec.rb32
-rw-r--r--spec/ruby/core/string/upcase_spec.rb187
-rw-r--r--spec/ruby/core/string/uplus_spec.rb60
-rw-r--r--spec/ruby/core/string/upto_spec.rb110
-rw-r--r--spec/ruby/core/string/valid_encoding/utf_8_spec.rb214
-rw-r--r--spec/ruby/core/string/valid_encoding_spec.rb133
-rw-r--r--spec/ruby/core/struct/clone_spec.rb7
-rw-r--r--spec/ruby/core/struct/constants_spec.rb13
-rw-r--r--spec/ruby/core/struct/deconstruct_keys_spec.rb130
-rw-r--r--spec/ruby/core/struct/deconstruct_spec.rb10
-rw-r--r--spec/ruby/core/struct/dig_spec.rb52
-rw-r--r--spec/ruby/core/struct/dup_spec.rb23
-rw-r--r--spec/ruby/core/struct/each_pair_spec.rb33
-rw-r--r--spec/ruby/core/struct/each_spec.rb27
-rw-r--r--spec/ruby/core/struct/element_reference_spec.rb52
-rw-r--r--spec/ruby/core/struct/element_set_spec.rb36
-rw-r--r--spec/ruby/core/struct/eql_spec.rb13
-rw-r--r--spec/ruby/core/struct/equal_value_spec.rb7
-rw-r--r--spec/ruby/core/struct/filter_spec.rb10
-rw-r--r--spec/ruby/core/struct/fixtures/classes.rb34
-rw-r--r--spec/ruby/core/struct/hash_spec.rb64
-rw-r--r--spec/ruby/core/struct/initialize_spec.rb51
-rw-r--r--spec/ruby/core/struct/inspect_spec.rb7
-rw-r--r--spec/ruby/core/struct/instance_variable_get_spec.rb16
-rw-r--r--spec/ruby/core/struct/instance_variables_spec.rb16
-rw-r--r--spec/ruby/core/struct/keyword_init_spec.rb45
-rw-r--r--spec/ruby/core/struct/length_spec.rb12
-rw-r--r--spec/ruby/core/struct/members_spec.rb25
-rw-r--r--spec/ruby/core/struct/new_spec.rb263
-rw-r--r--spec/ruby/core/struct/select_spec.rb10
-rw-r--r--spec/ruby/core/struct/shared/accessor.rb7
-rw-r--r--spec/ruby/core/struct/shared/dup.rb9
-rw-r--r--spec/ruby/core/struct/shared/equal_value.rb37
-rw-r--r--spec/ruby/core/struct/shared/inspect.rb40
-rw-r--r--spec/ruby/core/struct/shared/select.rb26
-rw-r--r--spec/ruby/core/struct/size_spec.rb11
-rw-r--r--spec/ruby/core/struct/struct_spec.rb50
-rw-r--r--spec/ruby/core/struct/to_a_spec.rb12
-rw-r--r--spec/ruby/core/struct/to_h_spec.rb68
-rw-r--r--spec/ruby/core/struct/to_s_spec.rb12
-rw-r--r--spec/ruby/core/struct/values_at_spec.rb59
-rw-r--r--spec/ruby/core/struct/values_spec.rb11
-rw-r--r--spec/ruby/core/symbol/all_symbols_spec.rb19
-rw-r--r--spec/ruby/core/symbol/capitalize_spec.rb41
-rw-r--r--spec/ruby/core/symbol/case_compare_spec.rb11
-rw-r--r--spec/ruby/core/symbol/casecmp_spec.rb152
-rw-r--r--spec/ruby/core/symbol/comparison_spec.rb51
-rw-r--r--spec/ruby/core/symbol/downcase_spec.rb25
-rw-r--r--spec/ruby/core/symbol/dup_spec.rb7
-rw-r--r--spec/ruby/core/symbol/element_reference_spec.rb6
-rw-r--r--spec/ruby/core/symbol/empty_spec.rb11
-rw-r--r--spec/ruby/core/symbol/encoding_spec.rb23
-rw-r--r--spec/ruby/core/symbol/end_with_spec.rb8
-rw-r--r--spec/ruby/core/symbol/equal_value_spec.rb14
-rw-r--r--spec/ruby/core/symbol/fixtures/classes.rb3
-rw-r--r--spec/ruby/core/symbol/id2name_spec.rb6
-rw-r--r--spec/ruby/core/symbol/inspect_spec.rb112
-rw-r--r--spec/ruby/core/symbol/intern_spec.rb11
-rw-r--r--spec/ruby/core/symbol/length_spec.rb6
-rw-r--r--spec/ruby/core/symbol/match_spec.rb77
-rw-r--r--spec/ruby/core/symbol/name_spec.rb17
-rw-r--r--spec/ruby/core/symbol/next_spec.rb6
-rw-r--r--spec/ruby/core/symbol/shared/id2name.rb30
-rw-r--r--spec/ruby/core/symbol/shared/length.rb23
-rw-r--r--spec/ruby/core/symbol/shared/slice.rb262
-rw-r--r--spec/ruby/core/symbol/shared/succ.rb18
-rw-r--r--spec/ruby/core/symbol/size_spec.rb6
-rw-r--r--spec/ruby/core/symbol/slice_spec.rb6
-rw-r--r--spec/ruby/core/symbol/start_with_spec.rb8
-rw-r--r--spec/ruby/core/symbol/succ_spec.rb6
-rw-r--r--spec/ruby/core/symbol/swapcase_spec.rb29
-rw-r--r--spec/ruby/core/symbol/symbol_spec.rb19
-rw-r--r--spec/ruby/core/symbol/to_proc_spec.rb78
-rw-r--r--spec/ruby/core/symbol/to_s_spec.rb6
-rw-r--r--spec/ruby/core/symbol/to_sym_spec.rb9
-rw-r--r--spec/ruby/core/symbol/upcase_spec.rb21
-rw-r--r--spec/ruby/core/systemexit/initialize_spec.rb26
-rw-r--r--spec/ruby/core/systemexit/success_spec.rb13
-rw-r--r--spec/ruby/core/thread/abort_on_exception_spec.rb106
-rw-r--r--spec/ruby/core/thread/add_trace_func_spec.rb5
-rw-r--r--spec/ruby/core/thread/alive_spec.rb58
-rw-r--r--spec/ruby/core/thread/allocate_spec.rb9
-rw-r--r--spec/ruby/core/thread/backtrace/limit_spec.rb13
-rw-r--r--spec/ruby/core/thread/backtrace/location/absolute_path_spec.rb93
-rw-r--r--spec/ruby/core/thread/backtrace/location/base_label_spec.rb49
-rw-r--r--spec/ruby/core/thread/backtrace/location/fixtures/absolute_path.rb4
-rw-r--r--spec/ruby/core/thread/backtrace/location/fixtures/absolute_path_main.rb2
-rw-r--r--spec/ruby/core/thread/backtrace/location/fixtures/absolute_path_method_added.rb10
-rw-r--r--spec/ruby/core/thread/backtrace/location/fixtures/classes.rb35
-rw-r--r--spec/ruby/core/thread/backtrace/location/fixtures/locations_in_main.rb5
-rw-r--r--spec/ruby/core/thread/backtrace/location/fixtures/locations_in_required.rb3
-rw-r--r--spec/ruby/core/thread/backtrace/location/fixtures/main.rb5
-rw-r--r--spec/ruby/core/thread/backtrace/location/fixtures/path.rb2
-rw-r--r--spec/ruby/core/thread/backtrace/location/fixtures/subdir/absolute_path_main_chdir.rb11
-rw-r--r--spec/ruby/core/thread/backtrace/location/fixtures/subdir/sibling.rb1
-rw-r--r--spec/ruby/core/thread/backtrace/location/inspect_spec.rb13
-rw-r--r--spec/ruby/core/thread/backtrace/location/label_spec.rb37
-rw-r--r--spec/ruby/core/thread/backtrace/location/lineno_spec.rb23
-rw-r--r--spec/ruby/core/thread/backtrace/location/path_spec.rb124
-rw-r--r--spec/ruby/core/thread/backtrace/location/to_s_spec.rb13
-rw-r--r--spec/ruby/core/thread/backtrace_locations_spec.rb79
-rw-r--r--spec/ruby/core/thread/backtrace_spec.rb69
-rw-r--r--spec/ruby/core/thread/current_spec.rb31
-rw-r--r--spec/ruby/core/thread/each_caller_location_spec.rb47
-rw-r--r--spec/ruby/core/thread/element_reference_spec.rb55
-rw-r--r--spec/ruby/core/thread/element_set_spec.rb74
-rw-r--r--spec/ruby/core/thread/exit_spec.rb15
-rw-r--r--spec/ruby/core/thread/fetch_spec.rb66
-rw-r--r--spec/ruby/core/thread/fixtures/classes.rb322
-rw-r--r--spec/ruby/core/thread/fork_spec.rb9
-rw-r--r--spec/ruby/core/thread/group_spec.rb16
-rw-r--r--spec/ruby/core/thread/handle_interrupt_spec.rb125
-rw-r--r--spec/ruby/core/thread/ignore_deadlock_spec.rb19
-rw-r--r--spec/ruby/core/thread/initialize_spec.rb27
-rw-r--r--spec/ruby/core/thread/inspect_spec.rb6
-rw-r--r--spec/ruby/core/thread/join_spec.rb70
-rw-r--r--spec/ruby/core/thread/key_spec.rb60
-rw-r--r--spec/ruby/core/thread/keys_spec.rb44
-rw-r--r--spec/ruby/core/thread/kill_spec.rb21
-rw-r--r--spec/ruby/core/thread/list_spec.rb55
-rw-r--r--spec/ruby/core/thread/main_spec.rb10
-rw-r--r--spec/ruby/core/thread/name_spec.rb54
-rw-r--r--spec/ruby/core/thread/native_thread_id_spec.rb35
-rw-r--r--spec/ruby/core/thread/new_spec.rb83
-rw-r--r--spec/ruby/core/thread/pass_spec.rb8
-rw-r--r--spec/ruby/core/thread/pending_interrupt_spec.rb32
-rw-r--r--spec/ruby/core/thread/priority_spec.rb72
-rw-r--r--spec/ruby/core/thread/raise_spec.rb235
-rw-r--r--spec/ruby/core/thread/report_on_exception_spec.rb155
-rw-r--r--spec/ruby/core/thread/run_spec.rb8
-rw-r--r--spec/ruby/core/thread/set_trace_func_spec.rb5
-rw-r--r--spec/ruby/core/thread/shared/exit.rb219
-rw-r--r--spec/ruby/core/thread/shared/start.rb41
-rw-r--r--spec/ruby/core/thread/shared/to_s.rb53
-rw-r--r--spec/ruby/core/thread/shared/wakeup.rb62
-rw-r--r--spec/ruby/core/thread/start_spec.rb9
-rw-r--r--spec/ruby/core/thread/status_spec.rb60
-rw-r--r--spec/ruby/core/thread/stop_spec.rb54
-rw-r--r--spec/ruby/core/thread/terminate_spec.rb7
-rw-r--r--spec/ruby/core/thread/thread_variable_get_spec.rb60
-rw-r--r--spec/ruby/core/thread/thread_variable_set_spec.rb62
-rw-r--r--spec/ruby/core/thread/thread_variable_spec.rb60
-rw-r--r--spec/ruby/core/thread/thread_variables_spec.rb39
-rw-r--r--spec/ruby/core/thread/to_s_spec.rb6
-rw-r--r--spec/ruby/core/thread/value_spec.rb31
-rw-r--r--spec/ruby/core/thread/wakeup_spec.rb7
-rw-r--r--spec/ruby/core/threadgroup/add_spec.rb39
-rw-r--r--spec/ruby/core/threadgroup/default_spec.rb11
-rw-r--r--spec/ruby/core/threadgroup/enclose_spec.rb24
-rw-r--r--spec/ruby/core/threadgroup/enclosed_spec.rb14
-rw-r--r--spec/ruby/core/threadgroup/list_spec.rb23
-rw-r--r--spec/ruby/core/time/_dump_spec.rb55
-rw-r--r--spec/ruby/core/time/_load_spec.rb51
-rw-r--r--spec/ruby/core/time/asctime_spec.rb6
-rw-r--r--spec/ruby/core/time/at_spec.rb316
-rw-r--r--spec/ruby/core/time/ceil_spec.rb44
-rw-r--r--spec/ruby/core/time/comparison_spec.rb130
-rw-r--r--spec/ruby/core/time/ctime_spec.rb6
-rw-r--r--spec/ruby/core/time/day_spec.rb6
-rw-r--r--spec/ruby/core/time/deconstruct_keys_spec.rb43
-rw-r--r--spec/ruby/core/time/dst_spec.rb6
-rw-r--r--spec/ruby/core/time/dup_spec.rb46
-rw-r--r--spec/ruby/core/time/eql_spec.rb29
-rw-r--r--spec/ruby/core/time/fixtures/classes.rb105
-rw-r--r--spec/ruby/core/time/floor_spec.rb36
-rw-r--r--spec/ruby/core/time/friday_spec.rb11
-rw-r--r--spec/ruby/core/time/getgm_spec.rb6
-rw-r--r--spec/ruby/core/time/getlocal_spec.rb206
-rw-r--r--spec/ruby/core/time/getutc_spec.rb6
-rw-r--r--spec/ruby/core/time/gm_spec.rb10
-rw-r--r--spec/ruby/core/time/gmt_offset_spec.rb6
-rw-r--r--spec/ruby/core/time/gmt_spec.rb8
-rw-r--r--spec/ruby/core/time/gmtime_spec.rb6
-rw-r--r--spec/ruby/core/time/gmtoff_spec.rb6
-rw-r--r--spec/ruby/core/time/hash_spec.rb11
-rw-r--r--spec/ruby/core/time/hour_spec.rb17
-rw-r--r--spec/ruby/core/time/inspect_spec.rb33
-rw-r--r--spec/ruby/core/time/isdst_spec.rb6
-rw-r--r--spec/ruby/core/time/iso8601_spec.rb6
-rw-r--r--spec/ruby/core/time/local_spec.rb11
-rw-r--r--spec/ruby/core/time/localtime_spec.rb203
-rw-r--r--spec/ruby/core/time/mday_spec.rb6
-rw-r--r--spec/ruby/core/time/min_spec.rb17
-rw-r--r--spec/ruby/core/time/minus_spec.rb121
-rw-r--r--spec/ruby/core/time/mktime_spec.rb11
-rw-r--r--spec/ruby/core/time/mon_spec.rb6
-rw-r--r--spec/ruby/core/time/monday_spec.rb11
-rw-r--r--spec/ruby/core/time/month_spec.rb6
-rw-r--r--spec/ruby/core/time/new_spec.rb753
-rw-r--r--spec/ruby/core/time/now_spec.rb181
-rw-r--r--spec/ruby/core/time/nsec_spec.rb31
-rw-r--r--spec/ruby/core/time/plus_spec.rb118
-rw-r--r--spec/ruby/core/time/round_spec.rb35
-rw-r--r--spec/ruby/core/time/saturday_spec.rb11
-rw-r--r--spec/ruby/core/time/sec_spec.rb7
-rw-r--r--spec/ruby/core/time/shared/asctime.rb6
-rw-r--r--spec/ruby/core/time/shared/day.rb15
-rw-r--r--spec/ruby/core/time/shared/getgm.rb9
-rw-r--r--spec/ruby/core/time/shared/gm.rb70
-rw-r--r--spec/ruby/core/time/shared/gmt_offset.rb59
-rw-r--r--spec/ruby/core/time/shared/gmtime.rb40
-rw-r--r--spec/ruby/core/time/shared/inspect.rb21
-rw-r--r--spec/ruby/core/time/shared/isdst.rb8
-rw-r--r--spec/ruby/core/time/shared/local.rb42
-rw-r--r--spec/ruby/core/time/shared/month.rb15
-rw-r--r--spec/ruby/core/time/shared/now.rb33
-rw-r--r--spec/ruby/core/time/shared/time_params.rb271
-rw-r--r--spec/ruby/core/time/shared/to_i.rb16
-rw-r--r--spec/ruby/core/time/shared/xmlschema.rb31
-rw-r--r--spec/ruby/core/time/strftime_spec.rb91
-rw-r--r--spec/ruby/core/time/subsec_spec.rb27
-rw-r--r--spec/ruby/core/time/sunday_spec.rb11
-rw-r--r--spec/ruby/core/time/thursday_spec.rb11
-rw-r--r--spec/ruby/core/time/time_spec.rb7
-rw-r--r--spec/ruby/core/time/to_a_spec.rb12
-rw-r--r--spec/ruby/core/time/to_f_spec.rb7
-rw-r--r--spec/ruby/core/time/to_i_spec.rb6
-rw-r--r--spec/ruby/core/time/to_r_spec.rb11
-rw-r--r--spec/ruby/core/time/to_s_spec.rb6
-rw-r--r--spec/ruby/core/time/tuesday_spec.rb11
-rw-r--r--spec/ruby/core/time/tv_nsec_spec.rb5
-rw-r--r--spec/ruby/core/time/tv_sec_spec.rb6
-rw-r--r--spec/ruby/core/time/tv_usec_spec.rb5
-rw-r--r--spec/ruby/core/time/usec_spec.rb43
-rw-r--r--spec/ruby/core/time/utc_offset_spec.rb6
-rw-r--r--spec/ruby/core/time/utc_spec.rb66
-rw-r--r--spec/ruby/core/time/wday_spec.rb9
-rw-r--r--spec/ruby/core/time/wednesday_spec.rb11
-rw-r--r--spec/ruby/core/time/xmlschema_spec.rb6
-rw-r--r--spec/ruby/core/time/yday_spec.rb12
-rw-r--r--spec/ruby/core/time/year_spec.rb17
-rw-r--r--spec/ruby/core/time/zone_spec.rb111
-rw-r--r--spec/ruby/core/tracepoint/allow_reentry_spec.rb30
-rw-r--r--spec/ruby/core/tracepoint/binding_spec.rb21
-rw-r--r--spec/ruby/core/tracepoint/callee_id_spec.rb18
-rw-r--r--spec/ruby/core/tracepoint/defined_class_spec.rb27
-rw-r--r--spec/ruby/core/tracepoint/disable_spec.rb76
-rw-r--r--spec/ruby/core/tracepoint/enable_spec.rb543
-rw-r--r--spec/ruby/core/tracepoint/enabled_spec.rb15
-rw-r--r--spec/ruby/core/tracepoint/eval_script_spec.rb23
-rw-r--r--spec/ruby/core/tracepoint/event_spec.rb22
-rw-r--r--spec/ruby/core/tracepoint/fixtures/classes.rb40
-rw-r--r--spec/ruby/core/tracepoint/inspect_spec.rb141
-rw-r--r--spec/ruby/core/tracepoint/lineno_spec.rb20
-rw-r--r--spec/ruby/core/tracepoint/method_id_spec.rb15
-rw-r--r--spec/ruby/core/tracepoint/new_spec.rb72
-rw-r--r--spec/ruby/core/tracepoint/parameters_spec.rb28
-rw-r--r--spec/ruby/core/tracepoint/path_spec.rb41
-rw-r--r--spec/ruby/core/tracepoint/raised_exception_spec.rb38
-rw-r--r--spec/ruby/core/tracepoint/return_value_spec.rb17
-rw-r--r--spec/ruby/core/tracepoint/self_spec.rb26
-rw-r--r--spec/ruby/core/tracepoint/trace_spec.rb10
-rw-r--r--spec/ruby/core/true/and_spec.rb11
-rw-r--r--spec/ruby/core/true/case_compare_spec.rb13
-rw-r--r--spec/ruby/core/true/dup_spec.rb7
-rw-r--r--spec/ruby/core/true/inspect_spec.rb7
-rw-r--r--spec/ruby/core/true/or_spec.rb11
-rw-r--r--spec/ruby/core/true/singleton_method_spec.rb15
-rw-r--r--spec/ruby/core/true/to_s_spec.rb15
-rw-r--r--spec/ruby/core/true/trueclass_spec.rb15
-rw-r--r--spec/ruby/core/true/xor_spec.rb11
-rw-r--r--spec/ruby/core/unboundmethod/arity_spec.rb207
-rw-r--r--spec/ruby/core/unboundmethod/bind_call_spec.rb58
-rw-r--r--spec/ruby/core/unboundmethod/bind_spec.rb69
-rw-r--r--spec/ruby/core/unboundmethod/clone_spec.rb13
-rw-r--r--spec/ruby/core/unboundmethod/dup_spec.rb15
-rw-r--r--spec/ruby/core/unboundmethod/eql_spec.rb5
-rw-r--r--spec/ruby/core/unboundmethod/equal_value_spec.rb138
-rw-r--r--spec/ruby/core/unboundmethod/fixtures/classes.rb107
-rw-r--r--spec/ruby/core/unboundmethod/hash_spec.rb22
-rw-r--r--spec/ruby/core/unboundmethod/inspect_spec.rb7
-rw-r--r--spec/ruby/core/unboundmethod/name_spec.rb15
-rw-r--r--spec/ruby/core/unboundmethod/original_name_spec.rb22
-rw-r--r--spec/ruby/core/unboundmethod/owner_spec.rb31
-rw-r--r--spec/ruby/core/unboundmethod/parameters_spec.rb5
-rw-r--r--spec/ruby/core/unboundmethod/private_spec.rb9
-rw-r--r--spec/ruby/core/unboundmethod/protected_spec.rb9
-rw-r--r--spec/ruby/core/unboundmethod/public_spec.rb9
-rw-r--r--spec/ruby/core/unboundmethod/shared/dup.rb32
-rw-r--r--spec/ruby/core/unboundmethod/shared/to_s.rb33
-rw-r--r--spec/ruby/core/unboundmethod/source_location_spec.rb65
-rw-r--r--spec/ruby/core/unboundmethod/super_method_spec.rb49
-rw-r--r--spec/ruby/core/unboundmethod/to_s_spec.rb7
-rw-r--r--spec/ruby/core/warning/categories_spec.rb12
-rw-r--r--spec/ruby/core/warning/element_reference_spec.rb29
-rw-r--r--spec/ruby/core/warning/element_set_spec.rb41
-rw-r--r--spec/ruby/core/warning/performance_warning_spec.rb28
-rw-r--r--spec/ruby/core/warning/warn_spec.rb187
-rw-r--r--spec/ruby/default.mspec54
-rw-r--r--spec/ruby/fixtures/basicobject/method_missing.rb55
-rw-r--r--spec/ruby/fixtures/class.rb142
-rw-r--r--spec/ruby/fixtures/class_variables.rb58
-rw-r--r--spec/ruby/fixtures/code/a/load_fixture.bundle1
-rw-r--r--spec/ruby/fixtures/code/a/load_fixture.dll1
-rw-r--r--spec/ruby/fixtures/code/a/load_fixture.dylib1
-rw-r--r--spec/ruby/fixtures/code/a/load_fixture.so1
-rw-r--r--spec/ruby/fixtures/code/b/load_fixture.rb1
-rw-r--r--spec/ruby/fixtures/code/c/load_fixture.rb1
-rw-r--r--spec/ruby/fixtures/code/concurrent.rb12
-rw-r--r--spec/ruby/fixtures/code/concurrent2.rb8
-rw-r--r--spec/ruby/fixtures/code/concurrent3.rb2
-rw-r--r--spec/ruby/fixtures/code/concurrent_require_fixture.rb4
-rw-r--r--spec/ruby/fixtures/code/d/load_fixture.rb.rb1
-rw-r--r--spec/ruby/fixtures/code/file_fixture.rb1
-rw-r--r--spec/ruby/fixtures/code/gem/load_fixture.rb1
-rw-r--r--spec/ruby/fixtures/code/line_fixture.rb5
-rw-r--r--spec/ruby/fixtures/code/load_ext_fixture.rb1
-rw-r--r--spec/ruby/fixtures/code/load_fixture1
-rw-r--r--spec/ruby/fixtures/code/load_fixture.bundle1
-rw-r--r--spec/ruby/fixtures/code/load_fixture.dll1
-rw-r--r--spec/ruby/fixtures/code/load_fixture.dylib1
-rw-r--r--spec/ruby/fixtures/code/load_fixture.ext1
-rw-r--r--spec/ruby/fixtures/code/load_fixture.ext.bundle1
-rw-r--r--spec/ruby/fixtures/code/load_fixture.ext.dll1
-rw-r--r--spec/ruby/fixtures/code/load_fixture.ext.dylib1
-rw-r--r--spec/ruby/fixtures/code/load_fixture.ext.rb1
-rw-r--r--spec/ruby/fixtures/code/load_fixture.ext.so1
-rw-r--r--spec/ruby/fixtures/code/load_fixture.rb1
-rw-r--r--spec/ruby/fixtures/code/load_fixture.so1
-rw-r--r--spec/ruby/fixtures/code/load_fixture_and__FILE__.rb1
-rw-r--r--spec/ruby/fixtures/code/load_wrap_fixture.rb12
-rw-r--r--spec/ruby/fixtures/code/load_wrap_method_fixture.rb9
-rw-r--r--spec/ruby/fixtures/code/methods_fixture.rb364
-rw-r--r--spec/ruby/fixtures/code/raise_fixture.rb1
-rw-r--r--spec/ruby/fixtures/code/recursive_load_fixture.rb5
-rw-r--r--spec/ruby/fixtures/code/recursive_require_fixture.rb3
-rw-r--r--spec/ruby/fixtures/code/symlink/symlink1.rb1
-rw-r--r--spec/ruby/fixtures/code/symlink/symlink2/symlink2.rb1
-rw-r--r--spec/ruby/fixtures/code_loading.rb41
-rw-r--r--spec/ruby/fixtures/constants.rb324
-rw-r--r--spec/ruby/fixtures/io.rb12
-rw-r--r--spec/ruby/fixtures/reflection.rb352
-rw-r--r--spec/ruby/language/BEGIN_spec.rb41
-rw-r--r--spec/ruby/language/END_spec.rb33
-rw-r--r--spec/ruby/language/README30
-rw-r--r--spec/ruby/language/alias_spec.rb294
-rw-r--r--spec/ruby/language/and_spec.rb80
-rw-r--r--spec/ruby/language/array_spec.rb162
-rw-r--r--spec/ruby/language/assignments_spec.rb590
-rw-r--r--spec/ruby/language/block_spec.rb1138
-rw-r--r--spec/ruby/language/break_spec.rb402
-rw-r--r--spec/ruby/language/case_spec.rb509
-rw-r--r--spec/ruby/language/class_spec.rb395
-rw-r--r--spec/ruby/language/class_variable_spec.rb114
-rw-r--r--spec/ruby/language/comment_spec.rb13
-rw-r--r--spec/ruby/language/constants_spec.rb809
-rw-r--r--spec/ruby/language/def_spec.rb815
-rw-r--r--spec/ruby/language/defined_spec.rb1312
-rw-r--r--spec/ruby/language/delegation_spec.rb158
-rw-r--r--spec/ruby/language/encoding_spec.rb36
-rw-r--r--spec/ruby/language/ensure_spec.rb346
-rw-r--r--spec/ruby/language/execution_spec.rb93
-rw-r--r--spec/ruby/language/file_spec.rb29
-rw-r--r--spec/ruby/language/fixtures/argv_encoding.rb1
-rw-r--r--spec/ruby/language/fixtures/array.rb32
-rw-r--r--spec/ruby/language/fixtures/begin_file.rb3
-rw-r--r--spec/ruby/language/fixtures/binary_symbol.rb4
-rw-r--r--spec/ruby/language/fixtures/block.rb61
-rw-r--r--spec/ruby/language/fixtures/break.rb291
-rw-r--r--spec/ruby/language/fixtures/break_lambda_toplevel.rb9
-rw-r--r--spec/ruby/language/fixtures/break_lambda_toplevel_block.rb23
-rw-r--r--spec/ruby/language/fixtures/break_lambda_toplevel_method.rb17
-rw-r--r--spec/ruby/language/fixtures/bytes_magic_comment.rb2
-rw-r--r--spec/ruby/language/fixtures/case_magic_comment.rb2
-rw-r--r--spec/ruby/language/fixtures/class_with_class_variable.rb9
-rw-r--r--spec/ruby/language/fixtures/classes.rb31
-rw-r--r--spec/ruby/language/fixtures/coding_us_ascii.rb11
-rw-r--r--spec/ruby/language/fixtures/coding_utf_8.rb11
-rw-r--r--spec/ruby/language/fixtures/constant_visibility.rb114
-rw-r--r--spec/ruby/language/fixtures/constants_sclass.rb54
-rw-r--r--spec/ruby/language/fixtures/def.rb14
-rw-r--r--spec/ruby/language/fixtures/defined.rb312
-rw-r--r--spec/ruby/language/fixtures/delegation.rb11
-rw-r--r--spec/ruby/language/fixtures/dollar_zero.rb6
-rw-r--r--spec/ruby/language/fixtures/emacs_magic_comment.rb2
-rw-r--r--spec/ruby/language/fixtures/ensure.rb121
-rw-r--r--spec/ruby/language/fixtures/file.rb1
-rw-r--r--spec/ruby/language/fixtures/for_scope.rb15
-rw-r--r--spec/ruby/language/fixtures/freeze_magic_comment_across_files.rb5
-rw-r--r--spec/ruby/language/fixtures/freeze_magic_comment_across_files_diff_enc.rb5
-rw-r--r--spec/ruby/language/fixtures/freeze_magic_comment_across_files_no_comment.rb5
-rw-r--r--spec/ruby/language/fixtures/freeze_magic_comment_one_literal.rb4
-rw-r--r--spec/ruby/language/fixtures/freeze_magic_comment_required.rb3
-rw-r--r--spec/ruby/language/fixtures/freeze_magic_comment_required_diff_enc.rb4
-rw-r--r--spec/ruby/language/fixtures/freeze_magic_comment_required_no_comment.rb1
-rw-r--r--spec/ruby/language/fixtures/freeze_magic_comment_two_literals.rb3
-rw-r--r--spec/ruby/language/fixtures/hash_strings_binary.rb7
-rw-r--r--spec/ruby/language/fixtures/hash_strings_usascii.rb7
-rw-r--r--spec/ruby/language/fixtures/hash_strings_utf8.rb7
-rw-r--r--spec/ruby/language/fixtures/magic_comment.rb2
-rw-r--r--spec/ruby/language/fixtures/match_operators.rb9
-rw-r--r--spec/ruby/language/fixtures/metaclass.rb33
-rw-r--r--spec/ruby/language/fixtures/module.rb15
-rw-r--r--spec/ruby/language/fixtures/next.rb134
-rw-r--r--spec/ruby/language/fixtures/no_magic_comment.rb1
-rw-r--r--spec/ruby/language/fixtures/precedence.rb16
-rw-r--r--spec/ruby/language/fixtures/print_magic_comment_result_at_exit.rb3
-rw-r--r--spec/ruby/language/fixtures/private.rb59
-rw-r--r--spec/ruby/language/fixtures/rescue.rb67
-rw-r--r--spec/ruby/language/fixtures/rescue/top_level.rb7
-rw-r--r--spec/ruby/language/fixtures/rescue_captures.rb107
-rw-r--r--spec/ruby/language/fixtures/return.rb135
-rw-r--r--spec/ruby/language/fixtures/second_line_magic_comment.rb3
-rw-r--r--spec/ruby/language/fixtures/second_token_magic_comment.rb2
-rw-r--r--spec/ruby/language/fixtures/send.rb151
-rwxr-xr-xspec/ruby/language/fixtures/shebang_magic_comment.rb3
-rw-r--r--spec/ruby/language/fixtures/squiggly_heredoc.rb71
-rw-r--r--spec/ruby/language/fixtures/super.rb804
-rw-r--r--spec/ruby/language/fixtures/utf16-be-nobom.rbbin0 -> 68 bytes
-rw-r--r--spec/ruby/language/fixtures/utf16-le-nobom.rbbin0 -> 69 bytes
-rw-r--r--spec/ruby/language/fixtures/utf8-bom.rb2
-rw-r--r--spec/ruby/language/fixtures/utf8-nobom.rb2
-rw-r--r--spec/ruby/language/fixtures/variables.rb157
-rw-r--r--spec/ruby/language/fixtures/vim_magic_comment.rb2
-rw-r--r--spec/ruby/language/fixtures/yield.rb41
-rw-r--r--spec/ruby/language/for_spec.rb285
-rw-r--r--spec/ruby/language/hash_spec.rb324
-rw-r--r--spec/ruby/language/heredoc_spec.rb119
-rw-r--r--spec/ruby/language/if_spec.rb424
-rw-r--r--spec/ruby/language/it_parameter_spec.rb66
-rw-r--r--spec/ruby/language/keyword_arguments_spec.rb386
-rw-r--r--spec/ruby/language/lambda_spec.rb587
-rw-r--r--spec/ruby/language/line_spec.rb45
-rw-r--r--spec/ruby/language/loop_spec.rb67
-rw-r--r--spec/ruby/language/magic_comment_spec.rb93
-rw-r--r--spec/ruby/language/match_spec.rb81
-rw-r--r--spec/ruby/language/metaclass_spec.rb143
-rw-r--r--spec/ruby/language/method_spec.rb1649
-rw-r--r--spec/ruby/language/module_spec.rb123
-rw-r--r--spec/ruby/language/next_spec.rb410
-rw-r--r--spec/ruby/language/not_spec.rb51
-rw-r--r--spec/ruby/language/numbered_parameters_spec.rb113
-rw-r--r--spec/ruby/language/numbers_spec.rb105
-rw-r--r--spec/ruby/language/optional_assignments_spec.rb742
-rw-r--r--spec/ruby/language/or_spec.rb90
-rw-r--r--spec/ruby/language/order_spec.rb75
-rw-r--r--spec/ruby/language/pattern_matching_spec.rb1310
-rw-r--r--spec/ruby/language/precedence_spec.rb445
-rw-r--r--spec/ruby/language/predefined/data_spec.rb48
-rw-r--r--spec/ruby/language/predefined/fixtures/data1.rb4
-rw-r--r--spec/ruby/language/predefined/fixtures/data2.rb3
-rw-r--r--spec/ruby/language/predefined/fixtures/data3.rb6
-rw-r--r--spec/ruby/language/predefined/fixtures/data4.rb4
-rw-r--r--spec/ruby/language/predefined/fixtures/data5.rb5
-rw-r--r--spec/ruby/language/predefined/fixtures/data_offset.rb12
-rw-r--r--spec/ruby/language/predefined/fixtures/data_only.rb2
-rw-r--r--spec/ruby/language/predefined/fixtures/empty_data.rb3
-rw-r--r--spec/ruby/language/predefined/fixtures/print_data.rb3
-rw-r--r--spec/ruby/language/predefined/fixtures/toplevel_binding_dynamic.rb4
-rw-r--r--spec/ruby/language/predefined/fixtures/toplevel_binding_dynamic_required.rb2
-rw-r--r--spec/ruby/language/predefined/fixtures/toplevel_binding_id.rb4
-rw-r--r--spec/ruby/language/predefined/fixtures/toplevel_binding_id_required.rb1
-rw-r--r--spec/ruby/language/predefined/fixtures/toplevel_binding_required_before.rb2
-rw-r--r--spec/ruby/language/predefined/fixtures/toplevel_binding_values.rb9
-rw-r--r--spec/ruby/language/predefined/fixtures/toplevel_binding_variables.rb4
-rw-r--r--spec/ruby/language/predefined/fixtures/toplevel_binding_variables_required.rb2
-rw-r--r--spec/ruby/language/predefined/toplevel_binding_spec.rb34
-rw-r--r--spec/ruby/language/predefined_spec.rb1574
-rw-r--r--spec/ruby/language/private_spec.rb67
-rw-r--r--spec/ruby/language/proc_spec.rb249
-rw-r--r--spec/ruby/language/range_spec.rb30
-rw-r--r--spec/ruby/language/redo_spec.rb66
-rw-r--r--spec/ruby/language/regexp/anchors_spec.rb179
-rw-r--r--spec/ruby/language/regexp/back-references_spec.rb149
-rw-r--r--spec/ruby/language/regexp/character_classes_spec.rb647
-rw-r--r--spec/ruby/language/regexp/empty_checks_spec.rb135
-rw-r--r--spec/ruby/language/regexp/encoding_spec.rb152
-rw-r--r--spec/ruby/language/regexp/escapes_spec.rb169
-rw-r--r--spec/ruby/language/regexp/grouping_spec.rb63
-rw-r--r--spec/ruby/language/regexp/interpolation_spec.rb58
-rw-r--r--spec/ruby/language/regexp/modifiers_spec.rb115
-rw-r--r--spec/ruby/language/regexp/repetition_spec.rb138
-rw-r--r--spec/ruby/language/regexp/subexpression_call_spec.rb50
-rw-r--r--spec/ruby/language/regexp_spec.rb167
-rw-r--r--spec/ruby/language/rescue_spec.rb616
-rw-r--r--spec/ruby/language/reserved_keywords.rb149
-rw-r--r--spec/ruby/language/retry_spec.rb55
-rw-r--r--spec/ruby/language/return_spec.rb490
-rw-r--r--spec/ruby/language/safe_navigator_spec.rb147
-rw-r--r--spec/ruby/language/safe_spec.rb11
-rw-r--r--spec/ruby/language/send_spec.rb570
-rw-r--r--spec/ruby/language/shared/__FILE__.rb23
-rw-r--r--spec/ruby/language/shared/__LINE__.rb15
-rw-r--r--spec/ruby/language/singleton_class_spec.rb317
-rw-r--r--spec/ruby/language/source_encoding_spec.rb61
-rw-r--r--spec/ruby/language/string_spec.rb301
-rw-r--r--spec/ruby/language/super_spec.rb464
-rw-r--r--spec/ruby/language/symbol_spec.rb108
-rw-r--r--spec/ruby/language/throw_spec.rb81
-rw-r--r--spec/ruby/language/undef_spec.rb79
-rw-r--r--spec/ruby/language/unless_spec.rb43
-rw-r--r--spec/ruby/language/until_spec.rb234
-rw-r--r--spec/ruby/language/variables_spec.rb930
-rw-r--r--spec/ruby/language/while_spec.rb344
-rw-r--r--spec/ruby/language/yield_spec.rb220
-rw-r--r--spec/ruby/library/English/English_spec.rb173
-rw-r--r--spec/ruby/library/English/alias_spec.rb14
-rw-r--r--spec/ruby/library/abbrev/abbrev_spec.rb31
-rw-r--r--spec/ruby/library/base64/decode64_spec.rb29
-rw-r--r--spec/ruby/library/base64/encode64_spec.rb23
-rw-r--r--spec/ruby/library/base64/strict_decode64_spec.rb41
-rw-r--r--spec/ruby/library/base64/strict_encode64_spec.rb19
-rw-r--r--spec/ruby/library/base64/urlsafe_decode64_spec.rb19
-rw-r--r--spec/ruby/library/base64/urlsafe_encode64_spec.rb20
-rw-r--r--spec/ruby/library/bigdecimal/BigDecimal_spec.rb239
-rw-r--r--spec/ruby/library/bigdecimal/abs_spec.rb50
-rw-r--r--spec/ruby/library/bigdecimal/add_spec.rb185
-rw-r--r--spec/ruby/library/bigdecimal/case_compare_spec.rb7
-rw-r--r--spec/ruby/library/bigdecimal/ceil_spec.rb104
-rw-r--r--spec/ruby/library/bigdecimal/clone_spec.rb6
-rw-r--r--spec/ruby/library/bigdecimal/coerce_spec.rb26
-rw-r--r--spec/ruby/library/bigdecimal/comparison_spec.rb81
-rw-r--r--spec/ruby/library/bigdecimal/constants_spec.rb70
-rw-r--r--spec/ruby/library/bigdecimal/core_spec.rb62
-rw-r--r--spec/ruby/library/bigdecimal/div_spec.rb110
-rw-r--r--spec/ruby/library/bigdecimal/divide_spec.rb17
-rw-r--r--spec/ruby/library/bigdecimal/divmod_spec.rb212
-rw-r--r--spec/ruby/library/bigdecimal/double_fig_spec.rb9
-rw-r--r--spec/ruby/library/bigdecimal/dup_spec.rb6
-rw-r--r--spec/ruby/library/bigdecimal/eql_spec.rb6
-rw-r--r--spec/ruby/library/bigdecimal/equal_value_spec.rb7
-rw-r--r--spec/ruby/library/bigdecimal/exponent_spec.rb27
-rw-r--r--spec/ruby/library/bigdecimal/finite_spec.rb34
-rw-r--r--spec/ruby/library/bigdecimal/fix_spec.rb57
-rw-r--r--spec/ruby/library/bigdecimal/fixtures/classes.rb17
-rw-r--r--spec/ruby/library/bigdecimal/floor_spec.rb100
-rw-r--r--spec/ruby/library/bigdecimal/frac_spec.rb48
-rw-r--r--spec/ruby/library/bigdecimal/gt_spec.rb96
-rw-r--r--spec/ruby/library/bigdecimal/gte_spec.rb100
-rw-r--r--spec/ruby/library/bigdecimal/hash_spec.rb30
-rw-r--r--spec/ruby/library/bigdecimal/infinite_spec.rb32
-rw-r--r--spec/ruby/library/bigdecimal/inspect_spec.rb30
-rw-r--r--spec/ruby/library/bigdecimal/limit_spec.rb55
-rw-r--r--spec/ruby/library/bigdecimal/lt_spec.rb94
-rw-r--r--spec/ruby/library/bigdecimal/lte_spec.rb100
-rw-r--r--spec/ruby/library/bigdecimal/minus_spec.rb66
-rw-r--r--spec/ruby/library/bigdecimal/mode_spec.rb36
-rw-r--r--spec/ruby/library/bigdecimal/modulo_spec.rb12
-rw-r--r--spec/ruby/library/bigdecimal/mult_spec.rb24
-rw-r--r--spec/ruby/library/bigdecimal/multiply_spec.rb41
-rw-r--r--spec/ruby/library/bigdecimal/nan_spec.rb23
-rw-r--r--spec/ruby/library/bigdecimal/nonzero_spec.rb29
-rw-r--r--spec/ruby/library/bigdecimal/plus_spec.rb54
-rw-r--r--spec/ruby/library/bigdecimal/power_spec.rb6
-rw-r--r--spec/ruby/library/bigdecimal/quo_spec.rb12
-rw-r--r--spec/ruby/library/bigdecimal/remainder_spec.rb96
-rw-r--r--spec/ruby/library/bigdecimal/round_spec.rb234
-rw-r--r--spec/ruby/library/bigdecimal/shared/clone.rb13
-rw-r--r--spec/ruby/library/bigdecimal/shared/eql.rb61
-rw-r--r--spec/ruby/library/bigdecimal/shared/modulo.rb131
-rw-r--r--spec/ruby/library/bigdecimal/shared/mult.rb97
-rw-r--r--spec/ruby/library/bigdecimal/shared/power.rb72
-rw-r--r--spec/ruby/library/bigdecimal/shared/quo.rb68
-rw-r--r--spec/ruby/library/bigdecimal/shared/to_int.rb16
-rw-r--r--spec/ruby/library/bigdecimal/sign_spec.rb46
-rw-r--r--spec/ruby/library/bigdecimal/split_spec.rb86
-rw-r--r--spec/ruby/library/bigdecimal/sqrt_spec.rb114
-rw-r--r--spec/ruby/library/bigdecimal/sub_spec.rb62
-rw-r--r--spec/ruby/library/bigdecimal/to_d_spec.rb10
-rw-r--r--spec/ruby/library/bigdecimal/to_f_spec.rb54
-rw-r--r--spec/ruby/library/bigdecimal/to_i_spec.rb7
-rw-r--r--spec/ruby/library/bigdecimal/to_int_spec.rb8
-rw-r--r--spec/ruby/library/bigdecimal/to_r_spec.rb28
-rw-r--r--spec/ruby/library/bigdecimal/to_s_spec.rb100
-rw-r--r--spec/ruby/library/bigdecimal/truncate_spec.rb81
-rw-r--r--spec/ruby/library/bigdecimal/uminus_spec.rb58
-rw-r--r--spec/ruby/library/bigdecimal/uplus_spec.rb17
-rw-r--r--spec/ruby/library/bigdecimal/util_spec.rb40
-rw-r--r--spec/ruby/library/bigdecimal/zero_spec.rb27
-rw-r--r--spec/ruby/library/cgi/cookie/domain_spec.rb26
-rw-r--r--spec/ruby/library/cgi/cookie/expires_spec.rb26
-rw-r--r--spec/ruby/library/cgi/cookie/initialize_spec.rb150
-rw-r--r--spec/ruby/library/cgi/cookie/name_spec.rb26
-rw-r--r--spec/ruby/library/cgi/cookie/parse_spec.rb29
-rw-r--r--spec/ruby/library/cgi/cookie/path_spec.rb26
-rw-r--r--spec/ruby/library/cgi/cookie/secure_spec.rb73
-rw-r--r--spec/ruby/library/cgi/cookie/to_s_spec.rb36
-rw-r--r--spec/ruby/library/cgi/cookie/value_spec.rb79
-rw-r--r--spec/ruby/library/cgi/escapeElement_spec.rb26
-rw-r--r--spec/ruby/library/cgi/escapeHTML_spec.rb21
-rw-r--r--spec/ruby/library/cgi/escapeURIComponent_spec.rb78
-rw-r--r--spec/ruby/library/cgi/escape_spec.rb22
-rw-r--r--spec/ruby/library/cgi/htmlextension/a_spec.rb52
-rw-r--r--spec/ruby/library/cgi/htmlextension/base_spec.rb36
-rw-r--r--spec/ruby/library/cgi/htmlextension/blockquote_spec.rb36
-rw-r--r--spec/ruby/library/cgi/htmlextension/br_spec.rb25
-rw-r--r--spec/ruby/library/cgi/htmlextension/caption_spec.rb36
-rw-r--r--spec/ruby/library/cgi/htmlextension/checkbox_group_spec.rb79
-rw-r--r--spec/ruby/library/cgi/htmlextension/checkbox_spec.rb80
-rw-r--r--spec/ruby/library/cgi/htmlextension/doctype_spec.rb30
-rw-r--r--spec/ruby/library/cgi/htmlextension/file_field_spec.rb75
-rw-r--r--spec/ruby/library/cgi/htmlextension/fixtures/common.rb15
-rw-r--r--spec/ruby/library/cgi/htmlextension/form_spec.rb61
-rw-r--r--spec/ruby/library/cgi/htmlextension/frame_spec.rb17
-rw-r--r--spec/ruby/library/cgi/htmlextension/frameset_spec.rb17
-rw-r--r--spec/ruby/library/cgi/htmlextension/hidden_spec.rb62
-rw-r--r--spec/ruby/library/cgi/htmlextension/html_spec.rb69
-rw-r--r--spec/ruby/library/cgi/htmlextension/image_button_spec.rb72
-rw-r--r--spec/ruby/library/cgi/htmlextension/img_spec.rb86
-rw-r--r--spec/ruby/library/cgi/htmlextension/multipart_form_spec.rb67
-rw-r--r--spec/ruby/library/cgi/htmlextension/password_field_spec.rb87
-rw-r--r--spec/ruby/library/cgi/htmlextension/popup_menu_spec.rb11
-rw-r--r--spec/ruby/library/cgi/htmlextension/radio_button_spec.rb80
-rw-r--r--spec/ruby/library/cgi/htmlextension/radio_group_spec.rb80
-rw-r--r--spec/ruby/library/cgi/htmlextension/reset_spec.rb60
-rw-r--r--spec/ruby/library/cgi/htmlextension/scrolling_list_spec.rb11
-rw-r--r--spec/ruby/library/cgi/htmlextension/shared/popup_menu.rb94
-rw-r--r--spec/ruby/library/cgi/htmlextension/submit_spec.rb60
-rw-r--r--spec/ruby/library/cgi/htmlextension/text_field_spec.rb87
-rw-r--r--spec/ruby/library/cgi/htmlextension/textarea_spec.rb76
-rw-r--r--spec/ruby/library/cgi/http_header_spec.rb11
-rw-r--r--spec/ruby/library/cgi/initialize_spec.rb136
-rw-r--r--spec/ruby/library/cgi/out_spec.rb54
-rw-r--r--spec/ruby/library/cgi/parse_spec.rb27
-rw-r--r--spec/ruby/library/cgi/pretty_spec.rb27
-rw-r--r--spec/ruby/library/cgi/print_spec.rb29
-rw-r--r--spec/ruby/library/cgi/queryextension/accept_charset_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/accept_encoding_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/accept_language_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/accept_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/auth_type_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/cache_control_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/content_length_spec.rb29
-rw-r--r--spec/ruby/library/cgi/queryextension/content_type_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/cookies_spec.rb13
-rw-r--r--spec/ruby/library/cgi/queryextension/element_reference_spec.rb30
-rw-r--r--spec/ruby/library/cgi/queryextension/from_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/gateway_interface_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/has_key_spec.rb10
-rw-r--r--spec/ruby/library/cgi/queryextension/host_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/include_spec.rb10
-rw-r--r--spec/ruby/library/cgi/queryextension/key_spec.rb10
-rw-r--r--spec/ruby/library/cgi/queryextension/keys_spec.rb23
-rw-r--r--spec/ruby/library/cgi/queryextension/multipart_spec.rb43
-rw-r--r--spec/ruby/library/cgi/queryextension/negotiate_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/params_spec.rb40
-rw-r--r--spec/ruby/library/cgi/queryextension/path_info_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/path_translated_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/pragma_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/query_string_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/raw_cookie2_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/raw_cookie_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/referer_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/remote_addr_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/remote_host_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/remote_ident_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/remote_user_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/request_method_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/script_name_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/server_name_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/server_port_spec.rb29
-rw-r--r--spec/ruby/library/cgi/queryextension/server_protocol_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/server_software_spec.rb25
-rw-r--r--spec/ruby/library/cgi/queryextension/shared/has_key.rb19
-rw-r--r--spec/ruby/library/cgi/queryextension/user_agent_spec.rb25
-rw-r--r--spec/ruby/library/cgi/rfc1123_date_spec.rb13
-rw-r--r--spec/ruby/library/cgi/shared/http_header.rb112
-rw-r--r--spec/ruby/library/cgi/unescapeElement_spec.rb26
-rw-r--r--spec/ruby/library/cgi/unescapeHTML_spec.rb48
-rw-r--r--spec/ruby/library/cgi/unescapeURIComponent_spec.rb128
-rw-r--r--spec/ruby/library/cgi/unescape_spec.rb21
-rw-r--r--spec/ruby/library/coverage/fixtures/code_with_begin.rb3
-rw-r--r--spec/ruby/library/coverage/fixtures/eval_code.rb11
-rw-r--r--spec/ruby/library/coverage/fixtures/second_class.rb5
-rw-r--r--spec/ruby/library/coverage/fixtures/some_class.rb16
-rw-r--r--spec/ruby/library/coverage/fixtures/start_coverage.rb3
-rw-r--r--spec/ruby/library/coverage/peek_result_spec.rb64
-rw-r--r--spec/ruby/library/coverage/result_spec.rb343
-rw-r--r--spec/ruby/library/coverage/running_spec.rb20
-rw-r--r--spec/ruby/library/coverage/start_spec.rb87
-rw-r--r--spec/ruby/library/coverage/supported_spec.rb30
-rw-r--r--spec/ruby/library/csv/basicwriter/close_on_terminate_spec.rb6
-rw-r--r--spec/ruby/library/csv/basicwriter/initialize_spec.rb6
-rw-r--r--spec/ruby/library/csv/basicwriter/terminate_spec.rb6
-rw-r--r--spec/ruby/library/csv/cell/data_spec.rb6
-rw-r--r--spec/ruby/library/csv/cell/initialize_spec.rb6
-rw-r--r--spec/ruby/library/csv/fixtures/one_line.csv1
-rw-r--r--spec/ruby/library/csv/foreach_spec.rb6
-rw-r--r--spec/ruby/library/csv/generate_line_spec.rb30
-rw-r--r--spec/ruby/library/csv/generate_row_spec.rb6
-rw-r--r--spec/ruby/library/csv/generate_spec.rb32
-rw-r--r--spec/ruby/library/csv/iobuf/close_spec.rb6
-rw-r--r--spec/ruby/library/csv/iobuf/initialize_spec.rb6
-rw-r--r--spec/ruby/library/csv/iobuf/read_spec.rb6
-rw-r--r--spec/ruby/library/csv/iobuf/terminate_spec.rb6
-rw-r--r--spec/ruby/library/csv/ioreader/close_on_terminate_spec.rb6
-rw-r--r--spec/ruby/library/csv/ioreader/get_row_spec.rb6
-rw-r--r--spec/ruby/library/csv/ioreader/initialize_spec.rb6
-rw-r--r--spec/ruby/library/csv/ioreader/terminate_spec.rb6
-rw-r--r--spec/ruby/library/csv/liberal_parsing_spec.rb19
-rw-r--r--spec/ruby/library/csv/open_spec.rb6
-rw-r--r--spec/ruby/library/csv/parse_spec.rb93
-rw-r--r--spec/ruby/library/csv/read_spec.rb6
-rw-r--r--spec/ruby/library/csv/readlines_spec.rb35
-rw-r--r--spec/ruby/library/csv/streambuf/add_buf_spec.rb6
-rw-r--r--spec/ruby/library/csv/streambuf/buf_size_spec.rb6
-rw-r--r--spec/ruby/library/csv/streambuf/drop_spec.rb6
-rw-r--r--spec/ruby/library/csv/streambuf/element_reference_spec.rb6
-rw-r--r--spec/ruby/library/csv/streambuf/get_spec.rb6
-rw-r--r--spec/ruby/library/csv/streambuf/idx_is_eos_spec.rb6
-rw-r--r--spec/ruby/library/csv/streambuf/initialize_spec.rb6
-rw-r--r--spec/ruby/library/csv/streambuf/is_eos_spec.rb6
-rw-r--r--spec/ruby/library/csv/streambuf/read_spec.rb6
-rw-r--r--spec/ruby/library/csv/streambuf/rel_buf_spec.rb6
-rw-r--r--spec/ruby/library/csv/streambuf/terminate_spec.rb6
-rw-r--r--spec/ruby/library/csv/stringreader/get_row_spec.rb6
-rw-r--r--spec/ruby/library/csv/stringreader/initialize_spec.rb6
-rw-r--r--spec/ruby/library/csv/writer/add_row_spec.rb6
-rw-r--r--spec/ruby/library/csv/writer/append_spec.rb6
-rw-r--r--spec/ruby/library/csv/writer/close_spec.rb6
-rw-r--r--spec/ruby/library/csv/writer/create_spec.rb6
-rw-r--r--spec/ruby/library/csv/writer/generate_spec.rb6
-rw-r--r--spec/ruby/library/csv/writer/initialize_spec.rb6
-rw-r--r--spec/ruby/library/csv/writer/terminate_spec.rb6
-rw-r--r--spec/ruby/library/date/accessor_spec.rb91
-rw-r--r--spec/ruby/library/date/add_month_spec.rb38
-rw-r--r--spec/ruby/library/date/add_spec.rb30
-rw-r--r--spec/ruby/library/date/ajd_spec.rb6
-rw-r--r--spec/ruby/library/date/ajd_to_amjd_spec.rb6
-rw-r--r--spec/ruby/library/date/ajd_to_jd_spec.rb6
-rw-r--r--spec/ruby/library/date/amjd_spec.rb6
-rw-r--r--spec/ruby/library/date/amjd_to_ajd_spec.rb6
-rw-r--r--spec/ruby/library/date/append_spec.rb6
-rw-r--r--spec/ruby/library/date/asctime_spec.rb6
-rw-r--r--spec/ruby/library/date/boat_spec.rb24
-rw-r--r--spec/ruby/library/date/case_compare_spec.rb6
-rw-r--r--spec/ruby/library/date/civil_spec.rb7
-rw-r--r--spec/ruby/library/date/commercial_spec.rb17
-rw-r--r--spec/ruby/library/date/commercial_to_jd_spec.rb6
-rw-r--r--spec/ruby/library/date/comparison_spec.rb6
-rw-r--r--spec/ruby/library/date/constants_spec.rb48
-rw-r--r--spec/ruby/library/date/conversions_spec.rb43
-rw-r--r--spec/ruby/library/date/ctime_spec.rb6
-rw-r--r--spec/ruby/library/date/cwday_spec.rb6
-rw-r--r--spec/ruby/library/date/cweek_spec.rb6
-rw-r--r--spec/ruby/library/date/cwyear_spec.rb6
-rw-r--r--spec/ruby/library/date/day_fraction_spec.rb6
-rw-r--r--spec/ruby/library/date/day_fraction_to_time_spec.rb6
-rw-r--r--spec/ruby/library/date/day_spec.rb9
-rw-r--r--spec/ruby/library/date/deconstruct_keys_spec.rb42
-rw-r--r--spec/ruby/library/date/downto_spec.rb18
-rw-r--r--spec/ruby/library/date/england_spec.rb6
-rw-r--r--spec/ruby/library/date/eql_spec.rb12
-rw-r--r--spec/ruby/library/date/format/bag/method_missing_spec.rb6
-rw-r--r--spec/ruby/library/date/format/bag/to_hash_spec.rb6
-rw-r--r--spec/ruby/library/date/friday_spec.rb12
-rw-r--r--spec/ruby/library/date/gregorian_leap_spec.rb15
-rw-r--r--spec/ruby/library/date/gregorian_spec.rb16
-rw-r--r--spec/ruby/library/date/hash_spec.rb8
-rw-r--r--spec/ruby/library/date/infinity/abs_spec.rb6
-rw-r--r--spec/ruby/library/date/infinity/coerce_spec.rb6
-rw-r--r--spec/ruby/library/date/infinity/comparison_spec.rb6
-rw-r--r--spec/ruby/library/date/infinity/d_spec.rb6
-rw-r--r--spec/ruby/library/date/infinity/finite_spec.rb6
-rw-r--r--spec/ruby/library/date/infinity/infinite_spec.rb6
-rw-r--r--spec/ruby/library/date/infinity/nan_spec.rb6
-rw-r--r--spec/ruby/library/date/infinity/uminus_spec.rb6
-rw-r--r--spec/ruby/library/date/infinity/uplus_spec.rb6
-rw-r--r--spec/ruby/library/date/infinity/zero_spec.rb6
-rw-r--r--spec/ruby/library/date/infinity_spec.rb67
-rw-r--r--spec/ruby/library/date/inspect_spec.rb6
-rw-r--r--spec/ruby/library/date/iso8601_spec.rb56
-rw-r--r--spec/ruby/library/date/italy_spec.rb6
-rw-r--r--spec/ruby/library/date/jd_spec.rb15
-rw-r--r--spec/ruby/library/date/jd_to_ajd_spec.rb6
-rw-r--r--spec/ruby/library/date/jd_to_civil_spec.rb6
-rw-r--r--spec/ruby/library/date/jd_to_commercial_spec.rb6
-rw-r--r--spec/ruby/library/date/jd_to_ld_spec.rb6
-rw-r--r--spec/ruby/library/date/jd_to_mjd_spec.rb6
-rw-r--r--spec/ruby/library/date/jd_to_ordinal_spec.rb6
-rw-r--r--spec/ruby/library/date/jd_to_wday_spec.rb6
-rw-r--r--spec/ruby/library/date/julian_leap_spec.rb15
-rw-r--r--spec/ruby/library/date/julian_spec.rb16
-rw-r--r--spec/ruby/library/date/ld_spec.rb6
-rw-r--r--spec/ruby/library/date/ld_to_jd_spec.rb6
-rw-r--r--spec/ruby/library/date/leap_spec.rb10
-rw-r--r--spec/ruby/library/date/mday_spec.rb6
-rw-r--r--spec/ruby/library/date/minus_month_spec.rb23
-rw-r--r--spec/ruby/library/date/minus_spec.rb30
-rw-r--r--spec/ruby/library/date/mjd_spec.rb6
-rw-r--r--spec/ruby/library/date/mjd_to_jd_spec.rb6
-rw-r--r--spec/ruby/library/date/mon_spec.rb7
-rw-r--r--spec/ruby/library/date/monday_spec.rb8
-rw-r--r--spec/ruby/library/date/month_spec.rb7
-rw-r--r--spec/ruby/library/date/new_spec.rb7
-rw-r--r--spec/ruby/library/date/new_start_spec.rb6
-rw-r--r--spec/ruby/library/date/next_day_spec.rb14
-rw-r--r--spec/ruby/library/date/next_month_spec.rb29
-rw-r--r--spec/ruby/library/date/next_spec.rb6
-rw-r--r--spec/ruby/library/date/next_year_spec.rb12
-rw-r--r--spec/ruby/library/date/ordinal_spec.rb7
-rw-r--r--spec/ruby/library/date/ordinal_to_jd_spec.rb6
-rw-r--r--spec/ruby/library/date/parse_spec.rb159
-rw-r--r--spec/ruby/library/date/plus_spec.rb20
-rw-r--r--spec/ruby/library/date/prev_day_spec.rb14
-rw-r--r--spec/ruby/library/date/prev_month_spec.rb29
-rw-r--r--spec/ruby/library/date/prev_year_spec.rb12
-rw-r--r--spec/ruby/library/date/relationship_spec.rb20
-rw-r--r--spec/ruby/library/date/rfc3339_spec.rb13
-rw-r--r--spec/ruby/library/date/right_shift_spec.rb6
-rw-r--r--spec/ruby/library/date/saturday_spec.rb8
-rw-r--r--spec/ruby/library/date/shared/civil.rb57
-rw-r--r--spec/ruby/library/date/shared/commercial.rb39
-rw-r--r--spec/ruby/library/date/shared/jd.rb14
-rw-r--r--spec/ruby/library/date/shared/month.rb6
-rw-r--r--spec/ruby/library/date/shared/ordinal.rb22
-rw-r--r--spec/ruby/library/date/shared/parse.rb54
-rw-r--r--spec/ruby/library/date/shared/parse_eu.rb37
-rw-r--r--spec/ruby/library/date/shared/parse_us.rb36
-rw-r--r--spec/ruby/library/date/shared/valid_civil.rb36
-rw-r--r--spec/ruby/library/date/shared/valid_commercial.rb34
-rw-r--r--spec/ruby/library/date/shared/valid_jd.rb20
-rw-r--r--spec/ruby/library/date/shared/valid_ordinal.rb26
-rw-r--r--spec/ruby/library/date/start_spec.rb6
-rw-r--r--spec/ruby/library/date/step_spec.rb56
-rw-r--r--spec/ruby/library/date/strftime_spec.rb41
-rw-r--r--spec/ruby/library/date/strptime_spec.rb149
-rw-r--r--spec/ruby/library/date/succ_spec.rb6
-rw-r--r--spec/ruby/library/date/sunday_spec.rb8
-rw-r--r--spec/ruby/library/date/thursday_spec.rb8
-rw-r--r--spec/ruby/library/date/time/to_date_spec.rb42
-rw-r--r--spec/ruby/library/date/time_to_day_fraction_spec.rb6
-rw-r--r--spec/ruby/library/date/to_s_spec.rb6
-rw-r--r--spec/ruby/library/date/today_spec.rb14
-rw-r--r--spec/ruby/library/date/tuesday_spec.rb8
-rw-r--r--spec/ruby/library/date/upto_spec.rb16
-rw-r--r--spec/ruby/library/date/valid_civil_spec.rb9
-rw-r--r--spec/ruby/library/date/valid_commercial_spec.rb8
-rw-r--r--spec/ruby/library/date/valid_date_spec.rb7
-rw-r--r--spec/ruby/library/date/valid_jd_spec.rb9
-rw-r--r--spec/ruby/library/date/valid_ordinal_spec.rb9
-rw-r--r--spec/ruby/library/date/valid_time_spec.rb6
-rw-r--r--spec/ruby/library/date/wday_spec.rb9
-rw-r--r--spec/ruby/library/date/wednesday_spec.rb8
-rw-r--r--spec/ruby/library/date/yday_spec.rb7
-rw-r--r--spec/ruby/library/date/year_spec.rb9
-rw-r--r--spec/ruby/library/date/zone_to_diff_spec.rb6
-rw-r--r--spec/ruby/library/datetime/_strptime_spec.rb6
-rw-r--r--spec/ruby/library/datetime/add_spec.rb9
-rw-r--r--spec/ruby/library/datetime/civil_spec.rb6
-rw-r--r--spec/ruby/library/datetime/commercial_spec.rb6
-rw-r--r--spec/ruby/library/datetime/deconstruct_keys_spec.rb44
-rw-r--r--spec/ruby/library/datetime/hour_spec.rb47
-rw-r--r--spec/ruby/library/datetime/httpdate_spec.rb6
-rw-r--r--spec/ruby/library/datetime/iso8601_spec.rb10
-rw-r--r--spec/ruby/library/datetime/jd_spec.rb6
-rw-r--r--spec/ruby/library/datetime/jisx0301_spec.rb10
-rw-r--r--spec/ruby/library/datetime/min_spec.rb6
-rw-r--r--spec/ruby/library/datetime/minute_spec.rb6
-rw-r--r--spec/ruby/library/datetime/new_offset_spec.rb6
-rw-r--r--spec/ruby/library/datetime/new_spec.rb52
-rw-r--r--spec/ruby/library/datetime/now_spec.rb25
-rw-r--r--spec/ruby/library/datetime/offset_spec.rb6
-rw-r--r--spec/ruby/library/datetime/ordinal_spec.rb6
-rw-r--r--spec/ruby/library/datetime/parse_spec.rb127
-rw-r--r--spec/ruby/library/datetime/rfc2822_spec.rb10
-rw-r--r--spec/ruby/library/datetime/rfc3339_spec.rb10
-rw-r--r--spec/ruby/library/datetime/rfc822_spec.rb6
-rw-r--r--spec/ruby/library/datetime/sec_fraction_spec.rb6
-rw-r--r--spec/ruby/library/datetime/sec_spec.rb6
-rw-r--r--spec/ruby/library/datetime/second_fraction_spec.rb6
-rw-r--r--spec/ruby/library/datetime/second_spec.rb6
-rw-r--r--spec/ruby/library/datetime/shared/min.rb40
-rw-r--r--spec/ruby/library/datetime/shared/sec.rb45
-rw-r--r--spec/ruby/library/datetime/strftime_spec.rb52
-rw-r--r--spec/ruby/library/datetime/strptime_spec.rb6
-rw-r--r--spec/ruby/library/datetime/subtract_spec.rb19
-rw-r--r--spec/ruby/library/datetime/time/to_datetime_spec.rb40
-rw-r--r--spec/ruby/library/datetime/to_date_spec.rb37
-rw-r--r--spec/ruby/library/datetime/to_datetime_spec.rb9
-rw-r--r--spec/ruby/library/datetime/to_s_spec.rb17
-rw-r--r--spec/ruby/library/datetime/to_time_spec.rb48
-rw-r--r--spec/ruby/library/datetime/xmlschema_spec.rb10
-rw-r--r--spec/ruby/library/datetime/yday_spec.rb7
-rw-r--r--spec/ruby/library/datetime/zone_spec.rb6
-rw-r--r--spec/ruby/library/delegate/delegate_class/instance_method_spec.rb52
-rw-r--r--spec/ruby/library/delegate/delegate_class/instance_methods_spec.rb26
-rw-r--r--spec/ruby/library/delegate/delegate_class/private_instance_methods_spec.rb23
-rw-r--r--spec/ruby/library/delegate/delegate_class/protected_instance_methods_spec.rb29
-rw-r--r--spec/ruby/library/delegate/delegate_class/public_instance_methods_spec.rb25
-rw-r--r--spec/ruby/library/delegate/delegate_class/respond_to_missing_spec.rb24
-rw-r--r--spec/ruby/library/delegate/delegator/case_compare_spec.rb11
-rw-r--r--spec/ruby/library/delegate/delegator/compare_spec.rb11
-rw-r--r--spec/ruby/library/delegate/delegator/complement_spec.rb11
-rw-r--r--spec/ruby/library/delegate/delegator/eql_spec.rb35
-rw-r--r--spec/ruby/library/delegate/delegator/equal_spec.rb13
-rw-r--r--spec/ruby/library/delegate/delegator/equal_value_spec.rb24
-rw-r--r--spec/ruby/library/delegate/delegator/frozen_spec.rb39
-rw-r--r--spec/ruby/library/delegate/delegator/hash_spec.rb11
-rw-r--r--spec/ruby/library/delegate/delegator/marshal_spec.rb21
-rw-r--r--spec/ruby/library/delegate/delegator/method_spec.rb69
-rw-r--r--spec/ruby/library/delegate/delegator/methods_spec.rb37
-rw-r--r--spec/ruby/library/delegate/delegator/not_equal_spec.rb24
-rw-r--r--spec/ruby/library/delegate/delegator/not_spec.rb11
-rw-r--r--spec/ruby/library/delegate/delegator/private_methods_spec.rb20
-rw-r--r--spec/ruby/library/delegate/delegator/protected_methods_spec.rb18
-rw-r--r--spec/ruby/library/delegate/delegator/public_methods_spec.rb18
-rw-r--r--spec/ruby/library/delegate/delegator/send_spec.rb26
-rw-r--r--spec/ruby/library/delegate/delegator/taint_spec.rb8
-rw-r--r--spec/ruby/library/delegate/delegator/tap_spec.rb16
-rw-r--r--spec/ruby/library/delegate/delegator/trust_spec.rb8
-rw-r--r--spec/ruby/library/delegate/delegator/untaint_spec.rb8
-rw-r--r--spec/ruby/library/delegate/delegator/untrust_spec.rb8
-rw-r--r--spec/ruby/library/delegate/fixtures/classes.rb60
-rw-r--r--spec/ruby/library/digest/bubblebabble_spec.rb29
-rw-r--r--spec/ruby/library/digest/hexencode_spec.rb31
-rw-r--r--spec/ruby/library/digest/instance/append_spec.rb7
-rw-r--r--spec/ruby/library/digest/instance/new_spec.rb19
-rw-r--r--spec/ruby/library/digest/instance/shared/update.rb8
-rw-r--r--spec/ruby/library/digest/instance/update_spec.rb7
-rw-r--r--spec/ruby/library/digest/md5/append_spec.rb7
-rw-r--r--spec/ruby/library/digest/md5/block_length_spec.rb11
-rw-r--r--spec/ruby/library/digest/md5/digest_bang_spec.rb13
-rw-r--r--spec/ruby/library/digest/md5/digest_length_spec.rb11
-rw-r--r--spec/ruby/library/digest/md5/digest_spec.rb32
-rw-r--r--spec/ruby/library/digest/md5/equal_spec.rb37
-rw-r--r--spec/ruby/library/digest/md5/file_spec.rb43
-rw-r--r--spec/ruby/library/digest/md5/hexdigest_bang_spec.rb14
-rw-r--r--spec/ruby/library/digest/md5/hexdigest_spec.rb32
-rw-r--r--spec/ruby/library/digest/md5/inspect_spec.rb11
-rw-r--r--spec/ruby/library/digest/md5/length_spec.rb7
-rw-r--r--spec/ruby/library/digest/md5/reset_spec.rb14
-rw-r--r--spec/ruby/library/digest/md5/shared/constants.rb17
-rw-r--r--spec/ruby/library/digest/md5/shared/length.rb8
-rw-r--r--spec/ruby/library/digest/md5/shared/update.rb7
-rw-r--r--spec/ruby/library/digest/md5/size_spec.rb7
-rw-r--r--spec/ruby/library/digest/md5/to_s_spec.rb24
-rw-r--r--spec/ruby/library/digest/md5/update_spec.rb7
-rw-r--r--spec/ruby/library/digest/sha1/digest_spec.rb20
-rw-r--r--spec/ruby/library/digest/sha1/file_spec.rb43
-rw-r--r--spec/ruby/library/digest/sha1/shared/constants.rb18
-rw-r--r--spec/ruby/library/digest/sha2/hexdigest_spec.rb32
-rw-r--r--spec/ruby/library/digest/sha256/append_spec.rb7
-rw-r--r--spec/ruby/library/digest/sha256/block_length_spec.rb11
-rw-r--r--spec/ruby/library/digest/sha256/digest_bang_spec.rb13
-rw-r--r--spec/ruby/library/digest/sha256/digest_length_spec.rb11
-rw-r--r--spec/ruby/library/digest/sha256/digest_spec.rb32
-rw-r--r--spec/ruby/library/digest/sha256/equal_spec.rb36
-rw-r--r--spec/ruby/library/digest/sha256/file_spec.rb47
-rw-r--r--spec/ruby/library/digest/sha256/hexdigest_bang_spec.rb14
-rw-r--r--spec/ruby/library/digest/sha256/hexdigest_spec.rb32
-rw-r--r--spec/ruby/library/digest/sha256/inspect_spec.rb11
-rw-r--r--spec/ruby/library/digest/sha256/length_spec.rb7
-rw-r--r--spec/ruby/library/digest/sha256/reset_spec.rb14
-rw-r--r--spec/ruby/library/digest/sha256/shared/constants.rb18
-rw-r--r--spec/ruby/library/digest/sha256/shared/length.rb8
-rw-r--r--spec/ruby/library/digest/sha256/shared/update.rb7
-rw-r--r--spec/ruby/library/digest/sha256/size_spec.rb7
-rw-r--r--spec/ruby/library/digest/sha256/to_s_spec.rb21
-rw-r--r--spec/ruby/library/digest/sha256/update_spec.rb7
-rw-r--r--spec/ruby/library/digest/sha384/append_spec.rb7
-rw-r--r--spec/ruby/library/digest/sha384/block_length_spec.rb11
-rw-r--r--spec/ruby/library/digest/sha384/digest_bang_spec.rb13
-rw-r--r--spec/ruby/library/digest/sha384/digest_length_spec.rb11
-rw-r--r--spec/ruby/library/digest/sha384/digest_spec.rb32
-rw-r--r--spec/ruby/library/digest/sha384/equal_spec.rb36
-rw-r--r--spec/ruby/library/digest/sha384/file_spec.rb43
-rw-r--r--spec/ruby/library/digest/sha384/hexdigest_bang_spec.rb14
-rw-r--r--spec/ruby/library/digest/sha384/hexdigest_spec.rb32
-rw-r--r--spec/ruby/library/digest/sha384/inspect_spec.rb11
-rw-r--r--spec/ruby/library/digest/sha384/length_spec.rb7
-rw-r--r--spec/ruby/library/digest/sha384/reset_spec.rb14
-rw-r--r--spec/ruby/library/digest/sha384/shared/constants.rb19
-rw-r--r--spec/ruby/library/digest/sha384/shared/length.rb8
-rw-r--r--spec/ruby/library/digest/sha384/shared/update.rb7
-rw-r--r--spec/ruby/library/digest/sha384/size_spec.rb7
-rw-r--r--spec/ruby/library/digest/sha384/to_s_spec.rb21
-rw-r--r--spec/ruby/library/digest/sha384/update_spec.rb7
-rw-r--r--spec/ruby/library/digest/sha512/append_spec.rb7
-rw-r--r--spec/ruby/library/digest/sha512/block_length_spec.rb11
-rw-r--r--spec/ruby/library/digest/sha512/digest_bang_spec.rb13
-rw-r--r--spec/ruby/library/digest/sha512/digest_length_spec.rb11
-rw-r--r--spec/ruby/library/digest/sha512/digest_spec.rb32
-rw-r--r--spec/ruby/library/digest/sha512/equal_spec.rb36
-rw-r--r--spec/ruby/library/digest/sha512/file_spec.rb43
-rw-r--r--spec/ruby/library/digest/sha512/hexdigest_bang_spec.rb14
-rw-r--r--spec/ruby/library/digest/sha512/hexdigest_spec.rb32
-rw-r--r--spec/ruby/library/digest/sha512/inspect_spec.rb11
-rw-r--r--spec/ruby/library/digest/sha512/length_spec.rb7
-rw-r--r--spec/ruby/library/digest/sha512/reset_spec.rb14
-rw-r--r--spec/ruby/library/digest/sha512/shared/constants.rb18
-rw-r--r--spec/ruby/library/digest/sha512/shared/length.rb8
-rw-r--r--spec/ruby/library/digest/sha512/shared/update.rb7
-rw-r--r--spec/ruby/library/digest/sha512/size_spec.rb7
-rw-r--r--spec/ruby/library/digest/sha512/to_s_spec.rb21
-rw-r--r--spec/ruby/library/digest/sha512/update_spec.rb7
-rw-r--r--spec/ruby/library/drb/fixtures/test_server.rb8
-rw-r--r--spec/ruby/library/drb/start_service_spec.rb33
-rw-r--r--spec/ruby/library/erb/def_class_spec.rb31
-rw-r--r--spec/ruby/library/erb/def_method_spec.rb26
-rw-r--r--spec/ruby/library/erb/def_module_spec.rb30
-rw-r--r--spec/ruby/library/erb/defmethod/def_erb_method_spec.rb66
-rw-r--r--spec/ruby/library/erb/filename_spec.rb40
-rw-r--r--spec/ruby/library/erb/fixtures/classes.rb5
-rw-r--r--spec/ruby/library/erb/new_spec.rb157
-rw-r--r--spec/ruby/library/erb/result_spec.rb86
-rw-r--r--spec/ruby/library/erb/run_spec.rb96
-rw-r--r--spec/ruby/library/erb/src_spec.rb33
-rw-r--r--spec/ruby/library/erb/util/h_spec.rb7
-rw-r--r--spec/ruby/library/erb/util/html_escape_spec.rb7
-rw-r--r--spec/ruby/library/erb/util/shared/html_escape.rb42
-rw-r--r--spec/ruby/library/erb/util/shared/url_encode.rb42
-rw-r--r--spec/ruby/library/erb/util/u_spec.rb7
-rw-r--r--spec/ruby/library/erb/util/url_encode_spec.rb7
-rw-r--r--spec/ruby/library/etc/confstr_spec.rb14
-rw-r--r--spec/ruby/library/etc/endgrent_spec.rb7
-rw-r--r--spec/ruby/library/etc/endpwent_spec.rb7
-rw-r--r--spec/ruby/library/etc/getgrent_spec.rb7
-rw-r--r--spec/ruby/library/etc/getgrgid_spec.rb69
-rw-r--r--spec/ruby/library/etc/getgrnam_spec.rb30
-rw-r--r--spec/ruby/library/etc/getlogin_spec.rb43
-rw-r--r--spec/ruby/library/etc/getpwent_spec.rb7
-rw-r--r--spec/ruby/library/etc/getpwnam_spec.rb28
-rw-r--r--spec/ruby/library/etc/getpwuid_spec.rb36
-rw-r--r--spec/ruby/library/etc/group_spec.rb27
-rw-r--r--spec/ruby/library/etc/nprocessors_spec.rb9
-rw-r--r--spec/ruby/library/etc/passwd_spec.rb15
-rw-r--r--spec/ruby/library/etc/shared/windows.rb7
-rw-r--r--spec/ruby/library/etc/struct_group_spec.rb35
-rw-r--r--spec/ruby/library/etc/struct_passwd_spec.rb43
-rw-r--r--spec/ruby/library/etc/sysconf_spec.rb22
-rw-r--r--spec/ruby/library/etc/sysconfdir_spec.rb8
-rw-r--r--spec/ruby/library/etc/systmpdir_spec.rb8
-rw-r--r--spec/ruby/library/etc/uname_spec.rb14
-rw-r--r--spec/ruby/library/expect/expect_spec.rb63
-rw-r--r--spec/ruby/library/fiddle/handle/initialize_spec.rb10
-rw-r--r--spec/ruby/library/find/find_spec.rb30
-rw-r--r--spec/ruby/library/find/fixtures/common.rb178
-rw-r--r--spec/ruby/library/find/prune_spec.rb12
-rw-r--r--spec/ruby/library/getoptlong/each_option_spec.rb7
-rw-r--r--spec/ruby/library/getoptlong/each_spec.rb7
-rw-r--r--spec/ruby/library/getoptlong/error_message_spec.rb23
-rw-r--r--spec/ruby/library/getoptlong/get_option_spec.rb7
-rw-r--r--spec/ruby/library/getoptlong/get_spec.rb7
-rw-r--r--spec/ruby/library/getoptlong/initialize_spec.rb28
-rw-r--r--spec/ruby/library/getoptlong/ordering_spec.rb38
-rw-r--r--spec/ruby/library/getoptlong/set_options_spec.rb98
-rw-r--r--spec/ruby/library/getoptlong/shared/each.rb18
-rw-r--r--spec/ruby/library/getoptlong/shared/get.rb62
-rw-r--r--spec/ruby/library/getoptlong/terminate_spec.rb30
-rw-r--r--spec/ruby/library/getoptlong/terminated_spec.rb17
-rw-r--r--spec/ruby/library/io-wait/wait_readable_spec.rb42
-rw-r--r--spec/ruby/library/io-wait/wait_spec.rb162
-rw-r--r--spec/ruby/library/io-wait/wait_writable_spec.rb37
-rw-r--r--spec/ruby/library/ipaddr/hton_spec.rb30
-rw-r--r--spec/ruby/library/ipaddr/ipv4_conversion_spec.rb44
-rw-r--r--spec/ruby/library/ipaddr/new_spec.rb92
-rw-r--r--spec/ruby/library/ipaddr/operator_spec.rb82
-rw-r--r--spec/ruby/library/ipaddr/reverse_spec.rb27
-rw-r--r--spec/ruby/library/ipaddr/to_s_spec.rb20
-rw-r--r--spec/ruby/library/irb/fixtures/irb.rb3
-rw-r--r--spec/ruby/library/irb/irb_spec.rb19
-rw-r--r--spec/ruby/library/logger/device/close_spec.rb22
-rw-r--r--spec/ruby/library/logger/device/new_spec.rb47
-rw-r--r--spec/ruby/library/logger/device/write_spec.rb42
-rw-r--r--spec/ruby/library/logger/fixtures/common.rb9
-rw-r--r--spec/ruby/library/logger/logger/add_spec.rb81
-rw-r--r--spec/ruby/library/logger/logger/close_spec.rb20
-rw-r--r--spec/ruby/library/logger/logger/datetime_format_spec.rb60
-rw-r--r--spec/ruby/library/logger/logger/debug_spec.rb52
-rw-r--r--spec/ruby/library/logger/logger/error_spec.rb53
-rw-r--r--spec/ruby/library/logger/logger/fatal_spec.rb53
-rw-r--r--spec/ruby/library/logger/logger/info_spec.rb53
-rw-r--r--spec/ruby/library/logger/logger/new_spec.rb118
-rw-r--r--spec/ruby/library/logger/logger/unknown_spec.rb36
-rw-r--r--spec/ruby/library/logger/logger/warn_spec.rb53
-rw-r--r--spec/ruby/library/logger/severity_spec.rb13
-rw-r--r--spec/ruby/library/matrix/I_spec.rb6
-rw-r--r--spec/ruby/library/matrix/antisymmetric_spec.rb36
-rw-r--r--spec/ruby/library/matrix/build_spec.rb73
-rw-r--r--spec/ruby/library/matrix/clone_spec.rb25
-rw-r--r--spec/ruby/library/matrix/coerce_spec.rb8
-rw-r--r--spec/ruby/library/matrix/collect_spec.rb6
-rw-r--r--spec/ruby/library/matrix/column_size_spec.rb13
-rw-r--r--spec/ruby/library/matrix/column_spec.rb35
-rw-r--r--spec/ruby/library/matrix/column_vector_spec.rb25
-rw-r--r--spec/ruby/library/matrix/column_vectors_spec.rb26
-rw-r--r--spec/ruby/library/matrix/columns_spec.rb42
-rw-r--r--spec/ruby/library/matrix/conj_spec.rb6
-rw-r--r--spec/ruby/library/matrix/conjugate_spec.rb6
-rw-r--r--spec/ruby/library/matrix/constructor_spec.rb65
-rw-r--r--spec/ruby/library/matrix/det_spec.rb7
-rw-r--r--spec/ruby/library/matrix/determinant_spec.rb7
-rw-r--r--spec/ruby/library/matrix/diagonal_spec.rb72
-rw-r--r--spec/ruby/library/matrix/divide_spec.rb54
-rw-r--r--spec/ruby/library/matrix/each_spec.rb74
-rw-r--r--spec/ruby/library/matrix/each_with_index_spec.rb81
-rw-r--r--spec/ruby/library/matrix/eigenvalue_decomposition/eigenvalue_matrix_spec.rb9
-rw-r--r--spec/ruby/library/matrix/eigenvalue_decomposition/eigenvalues_spec.rb22
-rw-r--r--spec/ruby/library/matrix/eigenvalue_decomposition/eigenvector_matrix_spec.rb20
-rw-r--r--spec/ruby/library/matrix/eigenvalue_decomposition/eigenvectors_spec.rb22
-rw-r--r--spec/ruby/library/matrix/eigenvalue_decomposition/initialize_spec.rb24
-rw-r--r--spec/ruby/library/matrix/eigenvalue_decomposition/to_a_spec.rb18
-rw-r--r--spec/ruby/library/matrix/element_reference_spec.rb23
-rw-r--r--spec/ruby/library/matrix/empty_spec.rb68
-rw-r--r--spec/ruby/library/matrix/eql_spec.rb11
-rw-r--r--spec/ruby/library/matrix/equal_value_spec.rb11
-rw-r--r--spec/ruby/library/matrix/exponent_spec.rb62
-rw-r--r--spec/ruby/library/matrix/find_index_spec.rb146
-rw-r--r--spec/ruby/library/matrix/fixtures/classes.rb7
-rw-r--r--spec/ruby/library/matrix/hash_spec.rb15
-rw-r--r--spec/ruby/library/matrix/hermitian_spec.rb34
-rw-r--r--spec/ruby/library/matrix/identity_spec.rb6
-rw-r--r--spec/ruby/library/matrix/imag_spec.rb6
-rw-r--r--spec/ruby/library/matrix/imaginary_spec.rb6
-rw-r--r--spec/ruby/library/matrix/inspect_spec.rb27
-rw-r--r--spec/ruby/library/matrix/inv_spec.rb7
-rw-r--r--spec/ruby/library/matrix/inverse_from_spec.rb6
-rw-r--r--spec/ruby/library/matrix/inverse_spec.rb7
-rw-r--r--spec/ruby/library/matrix/lower_triangular_spec.rb24
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/determinant_spec.rb21
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/initialize_spec.rb13
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/l_spec.rb18
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/p_spec.rb18
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/solve_spec.rb53
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/to_a_spec.rb33
-rw-r--r--spec/ruby/library/matrix/lup_decomposition/u_spec.rb18
-rw-r--r--spec/ruby/library/matrix/map_spec.rb6
-rw-r--r--spec/ruby/library/matrix/minor_spec.rb85
-rw-r--r--spec/ruby/library/matrix/minus_spec.rb42
-rw-r--r--spec/ruby/library/matrix/multiply_spec.rb69
-rw-r--r--spec/ruby/library/matrix/new_spec.rb8
-rw-r--r--spec/ruby/library/matrix/normal_spec.rb26
-rw-r--r--spec/ruby/library/matrix/orthogonal_spec.rb26
-rw-r--r--spec/ruby/library/matrix/permutation_spec.rb32
-rw-r--r--spec/ruby/library/matrix/plus_spec.rb42
-rw-r--r--spec/ruby/library/matrix/rank_spec.rb19
-rw-r--r--spec/ruby/library/matrix/real_spec.rb43
-rw-r--r--spec/ruby/library/matrix/rect_spec.rb6
-rw-r--r--spec/ruby/library/matrix/rectangular_spec.rb6
-rw-r--r--spec/ruby/library/matrix/regular_spec.rb31
-rw-r--r--spec/ruby/library/matrix/round_spec.rb21
-rw-r--r--spec/ruby/library/matrix/row_size_spec.rb13
-rw-r--r--spec/ruby/library/matrix/row_spec.rb36
-rw-r--r--spec/ruby/library/matrix/row_vector_spec.rb24
-rw-r--r--spec/ruby/library/matrix/row_vectors_spec.rb26
-rw-r--r--spec/ruby/library/matrix/rows_spec.rb41
-rw-r--r--spec/ruby/library/matrix/scalar/Fail_spec.rb6
-rw-r--r--spec/ruby/library/matrix/scalar/Raise_spec.rb6
-rw-r--r--spec/ruby/library/matrix/scalar/divide_spec.rb6
-rw-r--r--spec/ruby/library/matrix/scalar/exponent_spec.rb6
-rw-r--r--spec/ruby/library/matrix/scalar/included_spec.rb6
-rw-r--r--spec/ruby/library/matrix/scalar/initialize_spec.rb6
-rw-r--r--spec/ruby/library/matrix/scalar/minus_spec.rb6
-rw-r--r--spec/ruby/library/matrix/scalar/multiply_spec.rb6
-rw-r--r--spec/ruby/library/matrix/scalar/plus_spec.rb6
-rw-r--r--spec/ruby/library/matrix/scalar_spec.rb67
-rw-r--r--spec/ruby/library/matrix/shared/collect.rb26
-rw-r--r--spec/ruby/library/matrix/shared/conjugate.rb20
-rw-r--r--spec/ruby/library/matrix/shared/determinant.rb38
-rw-r--r--spec/ruby/library/matrix/shared/equal_value.rb33
-rw-r--r--spec/ruby/library/matrix/shared/identity.rb19
-rw-r--r--spec/ruby/library/matrix/shared/imaginary.rb20
-rw-r--r--spec/ruby/library/matrix/shared/inverse.rb38
-rw-r--r--spec/ruby/library/matrix/shared/rectangular.rb18
-rw-r--r--spec/ruby/library/matrix/shared/trace.rb12
-rw-r--r--spec/ruby/library/matrix/shared/transpose.rb19
-rw-r--r--spec/ruby/library/matrix/singular_spec.rb31
-rw-r--r--spec/ruby/library/matrix/spec_helper.rb35
-rw-r--r--spec/ruby/library/matrix/square_spec.rb28
-rw-r--r--spec/ruby/library/matrix/symmetric_spec.rb29
-rw-r--r--spec/ruby/library/matrix/t_spec.rb6
-rw-r--r--spec/ruby/library/matrix/to_a_spec.rb11
-rw-r--r--spec/ruby/library/matrix/to_s_spec.rb6
-rw-r--r--spec/ruby/library/matrix/tr_spec.rb7
-rw-r--r--spec/ruby/library/matrix/trace_spec.rb7
-rw-r--r--spec/ruby/library/matrix/transpose_spec.rb6
-rw-r--r--spec/ruby/library/matrix/unit_spec.rb6
-rw-r--r--spec/ruby/library/matrix/unitary_spec.rb32
-rw-r--r--spec/ruby/library/matrix/upper_triangular_spec.rb24
-rw-r--r--spec/ruby/library/matrix/vector/cross_product_spec.rb14
-rw-r--r--spec/ruby/library/matrix/vector/each2_spec.rb49
-rw-r--r--spec/ruby/library/matrix/vector/eql_spec.rb16
-rw-r--r--spec/ruby/library/matrix/vector/inner_product_spec.rb22
-rw-r--r--spec/ruby/library/matrix/vector/normalize_spec.rb18
-rw-r--r--spec/ruby/library/matrix/zero_spec.rb52
-rw-r--r--spec/ruby/library/mkmf/mkmf_spec.rb7
-rw-r--r--spec/ruby/library/monitor/enter_spec.rb28
-rw-r--r--spec/ruby/library/monitor/exit_spec.rb10
-rw-r--r--spec/ruby/library/monitor/mon_initialize_spec.rb31
-rw-r--r--spec/ruby/library/monitor/new_cond_spec.rb88
-rw-r--r--spec/ruby/library/monitor/synchronize_spec.rb41
-rw-r--r--spec/ruby/library/monitor/try_enter_spec.rb39
-rw-r--r--spec/ruby/library/net-ftp/FTPError_spec.rb8
-rw-r--r--spec/ruby/library/net-ftp/FTPPermError_spec.rb12
-rw-r--r--spec/ruby/library/net-ftp/FTPProtoError_spec.rb12
-rw-r--r--spec/ruby/library/net-ftp/FTPReplyError_spec.rb12
-rw-r--r--spec/ruby/library/net-ftp/FTPTempError_spec.rb12
-rw-r--r--spec/ruby/library/net-ftp/abort_spec.rb62
-rw-r--r--spec/ruby/library/net-ftp/acct_spec.rb58
-rw-r--r--spec/ruby/library/net-ftp/binary_spec.rb24
-rw-r--r--spec/ruby/library/net-ftp/chdir_spec.rb99
-rw-r--r--spec/ruby/library/net-ftp/close_spec.rb30
-rw-r--r--spec/ruby/library/net-ftp/closed_spec.rb21
-rw-r--r--spec/ruby/library/net-ftp/connect_spec.rb43
-rw-r--r--spec/ruby/library/net-ftp/debug_mode_spec.rb23
-rw-r--r--spec/ruby/library/net-ftp/default_passive_spec.rb8
-rw-r--r--spec/ruby/library/net-ftp/delete_spec.rb59
-rw-r--r--spec/ruby/library/net-ftp/dir_spec.rb8
-rw-r--r--spec/ruby/library/net-ftp/fixtures/default_passive.rb3
-rw-r--r--spec/ruby/library/net-ftp/fixtures/passive.rb2
-rw-r--r--spec/ruby/library/net-ftp/fixtures/putbinaryfile3
-rw-r--r--spec/ruby/library/net-ftp/fixtures/puttextfile3
-rw-r--r--spec/ruby/library/net-ftp/fixtures/server.rb277
-rw-r--r--spec/ruby/library/net-ftp/get_spec.rb21
-rw-r--r--spec/ruby/library/net-ftp/getbinaryfile_spec.rb8
-rw-r--r--spec/ruby/library/net-ftp/getdir_spec.rb7
-rw-r--r--spec/ruby/library/net-ftp/gettextfile_spec.rb8
-rw-r--r--spec/ruby/library/net-ftp/help_spec.rb66
-rw-r--r--spec/ruby/library/net-ftp/initialize_spec.rb405
-rw-r--r--spec/ruby/library/net-ftp/last_response_code_spec.rb8
-rw-r--r--spec/ruby/library/net-ftp/last_response_spec.rb25
-rw-r--r--spec/ruby/library/net-ftp/lastresp_spec.rb8
-rw-r--r--spec/ruby/library/net-ftp/list_spec.rb8
-rw-r--r--spec/ruby/library/net-ftp/login_spec.rb195
-rw-r--r--spec/ruby/library/net-ftp/ls_spec.rb8
-rw-r--r--spec/ruby/library/net-ftp/mdtm_spec.rb38
-rw-r--r--spec/ruby/library/net-ftp/mkdir_spec.rb61
-rw-r--r--spec/ruby/library/net-ftp/mtime_spec.rb50
-rw-r--r--spec/ruby/library/net-ftp/nlst_spec.rb92
-rw-r--r--spec/ruby/library/net-ftp/noop_spec.rb38
-rw-r--r--spec/ruby/library/net-ftp/open_spec.rb55
-rw-r--r--spec/ruby/library/net-ftp/passive_spec.rb28
-rw-r--r--spec/ruby/library/net-ftp/put_spec.rb21
-rw-r--r--spec/ruby/library/net-ftp/putbinaryfile_spec.rb8
-rw-r--r--spec/ruby/library/net-ftp/puttextfile_spec.rb8
-rw-r--r--spec/ruby/library/net-ftp/pwd_spec.rb53
-rw-r--r--spec/ruby/library/net-ftp/quit_spec.rb33
-rw-r--r--spec/ruby/library/net-ftp/rename_spec.rb94
-rw-r--r--spec/ruby/library/net-ftp/resume_spec.rb23
-rw-r--r--spec/ruby/library/net-ftp/retrbinary_spec.rb30
-rw-r--r--spec/ruby/library/net-ftp/retrlines_spec.rb34
-rw-r--r--spec/ruby/library/net-ftp/return_code_spec.rb24
-rw-r--r--spec/ruby/library/net-ftp/rmdir_spec.rb58
-rw-r--r--spec/ruby/library/net-ftp/sendcmd_spec.rb54
-rw-r--r--spec/ruby/library/net-ftp/set_socket_spec.rb8
-rw-r--r--spec/ruby/library/net-ftp/shared/getbinaryfile.rb150
-rw-r--r--spec/ruby/library/net-ftp/shared/gettextfile.rb100
-rw-r--r--spec/ruby/library/net-ftp/shared/last_response_code.rb25
-rw-r--r--spec/ruby/library/net-ftp/shared/list.rb104
-rw-r--r--spec/ruby/library/net-ftp/shared/putbinaryfile.rb167
-rw-r--r--spec/ruby/library/net-ftp/shared/puttextfile.rb128
-rw-r--r--spec/ruby/library/net-ftp/shared/pwd.rb3
-rw-r--r--spec/ruby/library/net-ftp/site_spec.rb53
-rw-r--r--spec/ruby/library/net-ftp/size_spec.rb48
-rw-r--r--spec/ruby/library/net-ftp/spec_helper.rb5
-rw-r--r--spec/ruby/library/net-ftp/status_spec.rb67
-rw-r--r--spec/ruby/library/net-ftp/storbinary_spec.rb49
-rw-r--r--spec/ruby/library/net-ftp/storlines_spec.rb44
-rw-r--r--spec/ruby/library/net-ftp/system_spec.rb48
-rw-r--r--spec/ruby/library/net-ftp/voidcmd_spec.rb54
-rw-r--r--spec/ruby/library/net-ftp/welcome_spec.rb25
-rw-r--r--spec/ruby/library/net-http/HTTPBadResponse_spec.rb8
-rw-r--r--spec/ruby/library/net-http/HTTPClientExcepton_spec.rb12
-rw-r--r--spec/ruby/library/net-http/HTTPError_spec.rb12
-rw-r--r--spec/ruby/library/net-http/HTTPFatalError_spec.rb12
-rw-r--r--spec/ruby/library/net-http/HTTPHeaderSyntaxError_spec.rb8
-rw-r--r--spec/ruby/library/net-http/HTTPRetriableError_spec.rb12
-rw-r--r--spec/ruby/library/net-http/HTTPServerException_spec.rb12
-rw-r--r--spec/ruby/library/net-http/http/Proxy_spec.rb35
-rw-r--r--spec/ruby/library/net-http/http/active_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/address_spec.rb9
-rw-r--r--spec/ruby/library/net-http/http/close_on_empty_response_spec.rb10
-rw-r--r--spec/ruby/library/net-http/http/copy_spec.rb21
-rw-r--r--spec/ruby/library/net-http/http/default_port_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/delete_spec.rb21
-rw-r--r--spec/ruby/library/net-http/http/finish_spec.rb29
-rw-r--r--spec/ruby/library/net-http/http/fixtures/http_server.rb123
-rw-r--r--spec/ruby/library/net-http/http/get2_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/get_print_spec.rb30
-rw-r--r--spec/ruby/library/net-http/http/get_response_spec.rb30
-rw-r--r--spec/ruby/library/net-http/http/get_spec.rb94
-rw-r--r--spec/ruby/library/net-http/http/head2_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/head_spec.rb25
-rw-r--r--spec/ruby/library/net-http/http/http_default_port_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/https_default_port_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/initialize_spec.rb46
-rw-r--r--spec/ruby/library/net-http/http/inspect_spec.rb24
-rw-r--r--spec/ruby/library/net-http/http/is_version_1_1_spec.rb7
-rw-r--r--spec/ruby/library/net-http/http/is_version_1_2_spec.rb7
-rw-r--r--spec/ruby/library/net-http/http/lock_spec.rb21
-rw-r--r--spec/ruby/library/net-http/http/mkcol_spec.rb21
-rw-r--r--spec/ruby/library/net-http/http/move_spec.rb25
-rw-r--r--spec/ruby/library/net-http/http/new_spec.rb86
-rw-r--r--spec/ruby/library/net-http/http/newobj_spec.rb48
-rw-r--r--spec/ruby/library/net-http/http/open_timeout_spec.rb24
-rw-r--r--spec/ruby/library/net-http/http/options_spec.rb25
-rw-r--r--spec/ruby/library/net-http/http/port_spec.rb9
-rw-r--r--spec/ruby/library/net-http/http/post2_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/post_form_spec.rb22
-rw-r--r--spec/ruby/library/net-http/http/post_spec.rb76
-rw-r--r--spec/ruby/library/net-http/http/propfind_spec.rb24
-rw-r--r--spec/ruby/library/net-http/http/proppatch_spec.rb24
-rw-r--r--spec/ruby/library/net-http/http/proxy_address_spec.rb31
-rw-r--r--spec/ruby/library/net-http/http/proxy_class_spec.rb9
-rw-r--r--spec/ruby/library/net-http/http/proxy_pass_spec.rb39
-rw-r--r--spec/ruby/library/net-http/http/proxy_port_spec.rb39
-rw-r--r--spec/ruby/library/net-http/http/proxy_user_spec.rb39
-rw-r--r--spec/ruby/library/net-http/http/put2_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/put_spec.rb24
-rw-r--r--spec/ruby/library/net-http/http/read_timeout_spec.rb24
-rw-r--r--spec/ruby/library/net-http/http/request_get_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/request_head_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/request_post_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/request_put_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/request_spec.rb109
-rw-r--r--spec/ruby/library/net-http/http/request_types_spec.rb254
-rw-r--r--spec/ruby/library/net-http/http/send_request_spec.rb61
-rw-r--r--spec/ruby/library/net-http/http/set_debug_output_spec.rb33
-rw-r--r--spec/ruby/library/net-http/http/shared/request_get.rb41
-rw-r--r--spec/ruby/library/net-http/http/shared/request_head.rb41
-rw-r--r--spec/ruby/library/net-http/http/shared/request_post.rb41
-rw-r--r--spec/ruby/library/net-http/http/shared/request_put.rb41
-rw-r--r--spec/ruby/library/net-http/http/shared/started.rb26
-rw-r--r--spec/ruby/library/net-http/http/shared/version_1_1.rb6
-rw-r--r--spec/ruby/library/net-http/http/shared/version_1_2.rb6
-rw-r--r--spec/ruby/library/net-http/http/socket_type_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/start_spec.rb111
-rw-r--r--spec/ruby/library/net-http/http/started_spec.rb8
-rw-r--r--spec/ruby/library/net-http/http/trace_spec.rb24
-rw-r--r--spec/ruby/library/net-http/http/unlock_spec.rb24
-rw-r--r--spec/ruby/library/net-http/http/use_ssl_spec.rb9
-rw-r--r--spec/ruby/library/net-http/http/version_1_1_spec.rb7
-rw-r--r--spec/ruby/library/net-http/http/version_1_2_spec.rb20
-rw-r--r--spec/ruby/library/net-http/httpexceptions/fixtures/classes.rb5
-rw-r--r--spec/ruby/library/net-http/httpexceptions/initialize_spec.rb17
-rw-r--r--spec/ruby/library/net-http/httpexceptions/response_spec.rb10
-rw-r--r--spec/ruby/library/net-http/httpgenericrequest/body_exist_spec.rb21
-rw-r--r--spec/ruby/library/net-http/httpgenericrequest/body_spec.rb30
-rw-r--r--spec/ruby/library/net-http/httpgenericrequest/body_stream_spec.rb32
-rw-r--r--spec/ruby/library/net-http/httpgenericrequest/exec_spec.rb135
-rw-r--r--spec/ruby/library/net-http/httpgenericrequest/inspect_spec.rb25
-rw-r--r--spec/ruby/library/net-http/httpgenericrequest/method_spec.rb15
-rw-r--r--spec/ruby/library/net-http/httpgenericrequest/path_spec.rb12
-rw-r--r--spec/ruby/library/net-http/httpgenericrequest/request_body_permitted_spec.rb12
-rw-r--r--spec/ruby/library/net-http/httpgenericrequest/response_body_permitted_spec.rb12
-rw-r--r--spec/ruby/library/net-http/httpgenericrequest/set_body_internal_spec.rb21
-rw-r--r--spec/ruby/library/net-http/httpheader/add_field_spec.rb31
-rw-r--r--spec/ruby/library/net-http/httpheader/basic_auth_spec.rb14
-rw-r--r--spec/ruby/library/net-http/httpheader/canonical_each_spec.rb8
-rw-r--r--spec/ruby/library/net-http/httpheader/chunked_spec.rb22
-rw-r--r--spec/ruby/library/net-http/httpheader/content_length_spec.rb54
-rw-r--r--spec/ruby/library/net-http/httpheader/content_range_spec.rb32
-rw-r--r--spec/ruby/library/net-http/httpheader/content_type_spec.rb26
-rw-r--r--spec/ruby/library/net-http/httpheader/delete_spec.rb30
-rw-r--r--spec/ruby/library/net-http/httpheader/each_capitalized_name_spec.rb35
-rw-r--r--spec/ruby/library/net-http/httpheader/each_capitalized_spec.rb8
-rw-r--r--spec/ruby/library/net-http/httpheader/each_header_spec.rb8
-rw-r--r--spec/ruby/library/net-http/httpheader/each_key_spec.rb8
-rw-r--r--spec/ruby/library/net-http/httpheader/each_name_spec.rb8
-rw-r--r--spec/ruby/library/net-http/httpheader/each_spec.rb8
-rw-r--r--spec/ruby/library/net-http/httpheader/each_value_spec.rb35
-rw-r--r--spec/ruby/library/net-http/httpheader/element_reference_spec.rb39
-rw-r--r--spec/ruby/library/net-http/httpheader/element_set_spec.rb41
-rw-r--r--spec/ruby/library/net-http/httpheader/fetch_spec.rb68
-rw-r--r--spec/ruby/library/net-http/httpheader/fixtures/classes.rb11
-rw-r--r--spec/ruby/library/net-http/httpheader/form_data_spec.rb8
-rw-r--r--spec/ruby/library/net-http/httpheader/get_fields_spec.rb39
-rw-r--r--spec/ruby/library/net-http/httpheader/initialize_http_header_spec.rb21
-rw-r--r--spec/ruby/library/net-http/httpheader/key_spec.rb21
-rw-r--r--spec/ruby/library/net-http/httpheader/length_spec.rb8
-rw-r--r--spec/ruby/library/net-http/httpheader/main_type_spec.rb24
-rw-r--r--spec/ruby/library/net-http/httpheader/proxy_basic_auth_spec.rb14
-rw-r--r--spec/ruby/library/net-http/httpheader/range_length_spec.rb32
-rw-r--r--spec/ruby/library/net-http/httpheader/range_spec.rb48
-rw-r--r--spec/ruby/library/net-http/httpheader/set_content_type_spec.rb8
-rw-r--r--spec/ruby/library/net-http/httpheader/set_form_data_spec.rb8
-rw-r--r--spec/ruby/library/net-http/httpheader/set_range_spec.rb8
-rw-r--r--spec/ruby/library/net-http/httpheader/shared/each_capitalized.rb31
-rw-r--r--spec/ruby/library/net-http/httpheader/shared/each_header.rb31
-rw-r--r--spec/ruby/library/net-http/httpheader/shared/each_name.rb31
-rw-r--r--spec/ruby/library/net-http/httpheader/shared/set_content_type.rb18
-rw-r--r--spec/ruby/library/net-http/httpheader/shared/set_form_data.rb27
-rw-r--r--spec/ruby/library/net-http/httpheader/shared/set_range.rb89
-rw-r--r--spec/ruby/library/net-http/httpheader/shared/size.rb18
-rw-r--r--spec/ruby/library/net-http/httpheader/size_spec.rb8
-rw-r--r--spec/ruby/library/net-http/httpheader/sub_type_spec.rb32
-rw-r--r--spec/ruby/library/net-http/httpheader/to_hash_spec.rb25
-rw-r--r--spec/ruby/library/net-http/httpheader/type_params_spec.rb24
-rw-r--r--spec/ruby/library/net-http/httprequest/initialize_spec.rb45
-rw-r--r--spec/ruby/library/net-http/httpresponse/body_permitted_spec.rb13
-rw-r--r--spec/ruby/library/net-http/httpresponse/body_spec.rb7
-rw-r--r--spec/ruby/library/net-http/httpresponse/code_spec.rb24
-rw-r--r--spec/ruby/library/net-http/httpresponse/code_type_spec.rb24
-rw-r--r--spec/ruby/library/net-http/httpresponse/entity_spec.rb7
-rw-r--r--spec/ruby/library/net-http/httpresponse/error_spec.rb24
-rw-r--r--spec/ruby/library/net-http/httpresponse/error_type_spec.rb24
-rw-r--r--spec/ruby/library/net-http/httpresponse/exception_type_spec.rb13
-rw-r--r--spec/ruby/library/net-http/httpresponse/header_spec.rb9
-rw-r--r--spec/ruby/library/net-http/httpresponse/http_version_spec.rb12
-rw-r--r--spec/ruby/library/net-http/httpresponse/initialize_spec.rb11
-rw-r--r--spec/ruby/library/net-http/httpresponse/inspect_spec.rb15
-rw-r--r--spec/ruby/library/net-http/httpresponse/message_spec.rb9
-rw-r--r--spec/ruby/library/net-http/httpresponse/msg_spec.rb9
-rw-r--r--spec/ruby/library/net-http/httpresponse/read_body_spec.rb86
-rw-r--r--spec/ruby/library/net-http/httpresponse/read_header_spec.rb9
-rw-r--r--spec/ruby/library/net-http/httpresponse/read_new_spec.rb23
-rw-r--r--spec/ruby/library/net-http/httpresponse/reading_body_spec.rb58
-rw-r--r--spec/ruby/library/net-http/httpresponse/response_spec.rb9
-rw-r--r--spec/ruby/library/net-http/httpresponse/shared/body.rb20
-rw-r--r--spec/ruby/library/net-http/httpresponse/value_spec.rb24
-rw-r--r--spec/ruby/library/objectspace/dump_all_spec.rb112
-rw-r--r--spec/ruby/library/objectspace/dump_spec.rb70
-rw-r--r--spec/ruby/library/objectspace/fixtures/trace.rb6
-rw-r--r--spec/ruby/library/objectspace/memsize_of_all_spec.rb22
-rw-r--r--spec/ruby/library/objectspace/memsize_of_spec.rb34
-rw-r--r--spec/ruby/library/objectspace/reachable_objects_from_spec.rb59
-rw-r--r--spec/ruby/library/objectspace/trace_object_allocations_spec.rb163
-rw-r--r--spec/ruby/library/objectspace/trace_spec.rb13
-rw-r--r--spec/ruby/library/observer/add_observer_spec.rb23
-rw-r--r--spec/ruby/library/observer/count_observers_spec.rb23
-rw-r--r--spec/ruby/library/observer/delete_observer_spec.rb19
-rw-r--r--spec/ruby/library/observer/delete_observers_spec.rb19
-rw-r--r--spec/ruby/library/observer/fixtures/classes.rb17
-rw-r--r--spec/ruby/library/observer/notify_observers_spec.rb31
-rw-r--r--spec/ruby/library/open3/capture2_spec.rb6
-rw-r--r--spec/ruby/library/open3/capture2e_spec.rb6
-rw-r--r--spec/ruby/library/open3/capture3_spec.rb6
-rw-r--r--spec/ruby/library/open3/pipeline_r_spec.rb6
-rw-r--r--spec/ruby/library/open3/pipeline_rw_spec.rb6
-rw-r--r--spec/ruby/library/open3/pipeline_spec.rb6
-rw-r--r--spec/ruby/library/open3/pipeline_start_spec.rb6
-rw-r--r--spec/ruby/library/open3/pipeline_w_spec.rb6
-rw-r--r--spec/ruby/library/open3/popen2_spec.rb6
-rw-r--r--spec/ruby/library/open3/popen2e_spec.rb6
-rw-r--r--spec/ruby/library/open3/popen3_spec.rb41
-rw-r--r--spec/ruby/library/openssl/cipher_spec.rb9
-rw-r--r--spec/ruby/library/openssl/digest/append_spec.rb6
-rw-r--r--spec/ruby/library/openssl/digest/block_length_spec.rb44
-rw-r--r--spec/ruby/library/openssl/digest/digest_length_spec.rb44
-rw-r--r--spec/ruby/library/openssl/digest/digest_spec.rb62
-rw-r--r--spec/ruby/library/openssl/digest/initialize_spec.rb137
-rw-r--r--spec/ruby/library/openssl/digest/name_spec.rb16
-rw-r--r--spec/ruby/library/openssl/digest/reset_spec.rb36
-rw-r--r--spec/ruby/library/openssl/digest/shared/update.rb123
-rw-r--r--spec/ruby/library/openssl/digest/update_spec.rb6
-rw-r--r--spec/ruby/library/openssl/fixed_length_secure_compare_spec.rb42
-rw-r--r--spec/ruby/library/openssl/hmac/digest_spec.rb16
-rw-r--r--spec/ruby/library/openssl/hmac/hexdigest_spec.rb16
-rw-r--r--spec/ruby/library/openssl/kdf/pbkdf2_hmac_spec.rb162
-rw-r--r--spec/ruby/library/openssl/kdf/scrypt_spec.rb210
-rw-r--r--spec/ruby/library/openssl/random/pseudo_bytes_spec.rb8
-rw-r--r--spec/ruby/library/openssl/random/random_bytes_spec.rb6
-rw-r--r--spec/ruby/library/openssl/random/shared/random_bytes.rb29
-rw-r--r--spec/ruby/library/openssl/secure_compare_spec.rb38
-rw-r--r--spec/ruby/library/openssl/shared/constants.rb11
-rw-r--r--spec/ruby/library/openssl/x509/name/parse_spec.rb48
-rw-r--r--spec/ruby/library/openssl/x509/store/verify_spec.rb78
-rw-r--r--spec/ruby/library/openstruct/delete_field_spec.rb19
-rw-r--r--spec/ruby/library/openstruct/element_reference_spec.rb13
-rw-r--r--spec/ruby/library/openstruct/element_set_spec.rb13
-rw-r--r--spec/ruby/library/openstruct/equal_value_spec.rb28
-rw-r--r--spec/ruby/library/openstruct/fixtures/classes.rb4
-rw-r--r--spec/ruby/library/openstruct/frozen_spec.rb40
-rw-r--r--spec/ruby/library/openstruct/initialize_spec.rb8
-rw-r--r--spec/ruby/library/openstruct/inspect_spec.rb8
-rw-r--r--spec/ruby/library/openstruct/marshal_dump_spec.rb9
-rw-r--r--spec/ruby/library/openstruct/marshal_load_spec.rb12
-rw-r--r--spec/ruby/library/openstruct/method_missing_spec.rb24
-rw-r--r--spec/ruby/library/openstruct/new_spec.rb20
-rw-r--r--spec/ruby/library/openstruct/shared/inspect.rb20
-rw-r--r--spec/ruby/library/openstruct/to_h_spec.rb68
-rw-r--r--spec/ruby/library/openstruct/to_s_spec.rb8
-rw-r--r--spec/ruby/library/optionparser/order_spec.rb28
-rw-r--r--spec/ruby/library/optionparser/parse_spec.rb28
-rw-r--r--spec/ruby/library/pathname/absolute_spec.rb22
-rw-r--r--spec/ruby/library/pathname/birthtime_spec.rb16
-rw-r--r--spec/ruby/library/pathname/divide_spec.rb6
-rw-r--r--spec/ruby/library/pathname/empty_spec.rb32
-rw-r--r--spec/ruby/library/pathname/equal_value_spec.rb14
-rw-r--r--spec/ruby/library/pathname/glob_spec.rb92
-rw-r--r--spec/ruby/library/pathname/hash_spec.rb14
-rw-r--r--spec/ruby/library/pathname/inspect_spec.rb10
-rw-r--r--spec/ruby/library/pathname/join_spec.rb40
-rw-r--r--spec/ruby/library/pathname/new_spec.rb23
-rw-r--r--spec/ruby/library/pathname/parent_spec.rb18
-rw-r--r--spec/ruby/library/pathname/pathname_spec.rb19
-rw-r--r--spec/ruby/library/pathname/plus_spec.rb6
-rw-r--r--spec/ruby/library/pathname/realdirpath_spec.rb10
-rw-r--r--spec/ruby/library/pathname/realpath_spec.rb10
-rw-r--r--spec/ruby/library/pathname/relative_path_from_spec.rb55
-rw-r--r--spec/ruby/library/pathname/relative_spec.rb22
-rw-r--r--spec/ruby/library/pathname/root_spec.rb26
-rw-r--r--spec/ruby/library/pathname/shared/plus.rb8
-rw-r--r--spec/ruby/library/pathname/sub_spec.rb15
-rw-r--r--spec/ruby/library/pp/pp_spec.rb30
-rw-r--r--spec/ruby/library/prime/each_spec.rb167
-rw-r--r--spec/ruby/library/prime/instance_spec.rb21
-rw-r--r--spec/ruby/library/prime/int_from_prime_division_spec.rb13
-rw-r--r--spec/ruby/library/prime/integer/each_prime_spec.rb13
-rw-r--r--spec/ruby/library/prime/integer/from_prime_division_spec.rb13
-rw-r--r--spec/ruby/library/prime/integer/prime_division_spec.rb19
-rw-r--r--spec/ruby/library/prime/integer/prime_spec.rb17
-rw-r--r--spec/ruby/library/prime/next_spec.rb7
-rw-r--r--spec/ruby/library/prime/prime_division_spec.rb25
-rw-r--r--spec/ruby/library/prime/prime_spec.rb17
-rw-r--r--spec/ruby/library/prime/shared/next.rb8
-rw-r--r--spec/ruby/library/prime/succ_spec.rb7
-rw-r--r--spec/ruby/library/random/formatter/alphanumeric_spec.rb56
-rw-r--r--spec/ruby/library/rbconfig/rbconfig_spec.rb163
-rw-r--r--spec/ruby/library/rbconfig/sizeof/limits_spec.rb40
-rw-r--r--spec/ruby/library/rbconfig/sizeof/sizeof_spec.rb30
-rw-r--r--spec/ruby/library/rbconfig/unicode_emoji_version_spec.rb17
-rw-r--r--spec/ruby/library/rbconfig/unicode_version_spec.rb17
-rw-r--r--spec/ruby/library/readline/basic_quote_characters_spec.rb18
-rw-r--r--spec/ruby/library/readline/basic_word_break_characters_spec.rb16
-rw-r--r--spec/ruby/library/readline/completer_quote_characters_spec.rb16
-rw-r--r--spec/ruby/library/readline/completer_word_break_characters_spec.rb16
-rw-r--r--spec/ruby/library/readline/completion_append_character_spec.rb16
-rw-r--r--spec/ruby/library/readline/completion_case_fold_spec.rb18
-rw-r--r--spec/ruby/library/readline/completion_proc_spec.rb22
-rw-r--r--spec/ruby/library/readline/constants_spec.rb18
-rw-r--r--spec/ruby/library/readline/emacs_editing_mode_spec.rb11
-rw-r--r--spec/ruby/library/readline/filename_quote_characters_spec.rb18
-rw-r--r--spec/ruby/library/readline/history/append_spec.rb28
-rw-r--r--spec/ruby/library/readline/history/delete_at_spec.rb38
-rw-r--r--spec/ruby/library/readline/history/each_spec.rb23
-rw-r--r--spec/ruby/library/readline/history/element_reference_spec.rb35
-rw-r--r--spec/ruby/library/readline/history/element_set_spec.rb35
-rw-r--r--spec/ruby/library/readline/history/empty_spec.rb13
-rw-r--r--spec/ruby/library/readline/history/history_spec.rb9
-rw-r--r--spec/ruby/library/readline/history/length_spec.rb9
-rw-r--r--spec/ruby/library/readline/history/pop_spec.rb23
-rw-r--r--spec/ruby/library/readline/history/push_spec.rb26
-rw-r--r--spec/ruby/library/readline/history/shared/size.rb14
-rw-r--r--spec/ruby/library/readline/history/shift_spec.rb23
-rw-r--r--spec/ruby/library/readline/history/size_spec.rb9
-rw-r--r--spec/ruby/library/readline/history/to_s_spec.rb9
-rw-r--r--spec/ruby/library/readline/readline_spec.rb26
-rw-r--r--spec/ruby/library/readline/spec_helper.rb11
-rw-r--r--spec/ruby/library/readline/vi_editing_mode_spec.rb11
-rw-r--r--spec/ruby/library/resolv/fixtures/hosts1
-rw-r--r--spec/ruby/library/resolv/get_address_spec.rb19
-rw-r--r--spec/ruby/library/resolv/get_addresses_spec.rb12
-rw-r--r--spec/ruby/library/resolv/get_name_spec.rb18
-rw-r--r--spec/ruby/library/resolv/get_names_spec.rb11
-rw-r--r--spec/ruby/library/ripper/lex_spec.rb23
-rw-r--r--spec/ruby/library/ripper/sexp_spec.rb13
-rw-r--r--spec/ruby/library/rubygems/gem/bin_path_spec.rb35
-rw-r--r--spec/ruby/library/rubygems/gem/load_path_insert_index_spec.rb10
-rw-r--r--spec/ruby/library/securerandom/base64_spec.rb55
-rw-r--r--spec/ruby/library/securerandom/bytes_spec.rb8
-rw-r--r--spec/ruby/library/securerandom/hex_spec.rb54
-rw-r--r--spec/ruby/library/securerandom/random_bytes_spec.rb53
-rw-r--r--spec/ruby/library/securerandom/random_number_spec.rb97
-rw-r--r--spec/ruby/library/shellwords/shellwords_spec.rb33
-rw-r--r--spec/ruby/library/singleton/allocate_spec.rb8
-rw-r--r--spec/ruby/library/singleton/clone_spec.rb8
-rw-r--r--spec/ruby/library/singleton/dump_spec.rb14
-rw-r--r--spec/ruby/library/singleton/dup_spec.rb8
-rw-r--r--spec/ruby/library/singleton/fixtures/classes.rb18
-rw-r--r--spec/ruby/library/singleton/instance_spec.rb30
-rw-r--r--spec/ruby/library/singleton/load_spec.rb21
-rw-r--r--spec/ruby/library/singleton/new_spec.rb8
-rw-r--r--spec/ruby/library/socket/addrinfo/afamily_spec.rb35
-rw-r--r--spec/ruby/library/socket/addrinfo/bind_spec.rb28
-rw-r--r--spec/ruby/library/socket/addrinfo/canonname_spec.rb27
-rw-r--r--spec/ruby/library/socket/addrinfo/connect_from_spec.rb75
-rw-r--r--spec/ruby/library/socket/addrinfo/connect_spec.rb35
-rw-r--r--spec/ruby/library/socket/addrinfo/connect_to_spec.rb75
-rw-r--r--spec/ruby/library/socket/addrinfo/family_addrinfo_spec.rb113
-rw-r--r--spec/ruby/library/socket/addrinfo/foreach_spec.rb9
-rw-r--r--spec/ruby/library/socket/addrinfo/getaddrinfo_spec.rb87
-rw-r--r--spec/ruby/library/socket/addrinfo/getnameinfo_spec.rb40
-rw-r--r--spec/ruby/library/socket/addrinfo/initialize_spec.rb589
-rw-r--r--spec/ruby/library/socket/addrinfo/inspect_sockaddr_spec.rb48
-rw-r--r--spec/ruby/library/socket/addrinfo/inspect_spec.rb63
-rw-r--r--spec/ruby/library/socket/addrinfo/ip_address_spec.rb64
-rw-r--r--spec/ruby/library/socket/addrinfo/ip_port_spec.rb33
-rw-r--r--spec/ruby/library/socket/addrinfo/ip_spec.rb62
-rw-r--r--spec/ruby/library/socket/addrinfo/ip_unpack_spec.rb33
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv4_loopback_spec.rb41
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv4_multicast_spec.rb27
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv4_private_spec.rb45
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv4_spec.rb33
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_linklocal_spec.rb23
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_loopback_spec.rb43
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_mc_global_spec.rb20
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_mc_linklocal_spec.rb19
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_mc_nodelocal_spec.rb18
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_mc_orglocal_spec.rb18
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_mc_sitelocal_spec.rb18
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_multicast_spec.rb46
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_sitelocal_spec.rb23
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_spec.rb33
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_to_ipv4_spec.rb71
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_unique_local_spec.rb18
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_unspecified_spec.rb15
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_v4compat_spec.rb20
-rw-r--r--spec/ruby/library/socket/addrinfo/ipv6_v4mapped_spec.rb20
-rw-r--r--spec/ruby/library/socket/addrinfo/listen_spec.rb34
-rw-r--r--spec/ruby/library/socket/addrinfo/marshal_dump_spec.rb80
-rw-r--r--spec/ruby/library/socket/addrinfo/marshal_load_spec.rb33
-rw-r--r--spec/ruby/library/socket/addrinfo/pfamily_spec.rb41
-rw-r--r--spec/ruby/library/socket/addrinfo/protocol_spec.rb22
-rw-r--r--spec/ruby/library/socket/addrinfo/shared/to_sockaddr.rb47
-rw-r--r--spec/ruby/library/socket/addrinfo/socktype_spec.rb21
-rw-r--r--spec/ruby/library/socket/addrinfo/tcp_spec.rb34
-rw-r--r--spec/ruby/library/socket/addrinfo/to_s_spec.rb6
-rw-r--r--spec/ruby/library/socket/addrinfo/to_sockaddr_spec.rb6
-rw-r--r--spec/ruby/library/socket/addrinfo/udp_spec.rb34
-rw-r--r--spec/ruby/library/socket/addrinfo/unix_path_spec.rb35
-rw-r--r--spec/ruby/library/socket/addrinfo/unix_spec.rb69
-rw-r--r--spec/ruby/library/socket/ancillarydata/cmsg_is_spec.rb33
-rw-r--r--spec/ruby/library/socket/ancillarydata/data_spec.rb9
-rw-r--r--spec/ruby/library/socket/ancillarydata/family_spec.rb9
-rw-r--r--spec/ruby/library/socket/ancillarydata/initialize_spec.rb284
-rw-r--r--spec/ruby/library/socket/ancillarydata/int_spec.rb43
-rw-r--r--spec/ruby/library/socket/ancillarydata/ip_pktinfo_spec.rb145
-rw-r--r--spec/ruby/library/socket/ancillarydata/ipv6_pktinfo_addr_spec.rb11
-rw-r--r--spec/ruby/library/socket/ancillarydata/ipv6_pktinfo_ifindex_spec.rb11
-rw-r--r--spec/ruby/library/socket/ancillarydata/ipv6_pktinfo_spec.rb89
-rw-r--r--spec/ruby/library/socket/ancillarydata/level_spec.rb9
-rw-r--r--spec/ruby/library/socket/ancillarydata/type_spec.rb9
-rw-r--r--spec/ruby/library/socket/ancillarydata/unix_rights_spec.rb61
-rw-r--r--spec/ruby/library/socket/basicsocket/close_read_spec.rb43
-rw-r--r--spec/ruby/library/socket/basicsocket/close_write_spec.rb48
-rw-r--r--spec/ruby/library/socket/basicsocket/connect_address_spec.rb152
-rw-r--r--spec/ruby/library/socket/basicsocket/do_not_reverse_lookup_spec.rb103
-rw-r--r--spec/ruby/library/socket/basicsocket/for_fd_spec.rb38
-rw-r--r--spec/ruby/library/socket/basicsocket/getpeereid_spec.rb36
-rw-r--r--spec/ruby/library/socket/basicsocket/getpeername_spec.rb25
-rw-r--r--spec/ruby/library/socket/basicsocket/getsockname_spec.rb28
-rw-r--r--spec/ruby/library/socket/basicsocket/getsockopt_spec.rb188
-rw-r--r--spec/ruby/library/socket/basicsocket/ioctl_spec.rb42
-rw-r--r--spec/ruby/library/socket/basicsocket/local_address_spec.rb10
-rw-r--r--spec/ruby/library/socket/basicsocket/read_nonblock_spec.rb74
-rw-r--r--spec/ruby/library/socket/basicsocket/read_spec.rb47
-rw-r--r--spec/ruby/library/socket/basicsocket/recv_nonblock_spec.rb172
-rw-r--r--spec/ruby/library/socket/basicsocket/recv_spec.rb250
-rw-r--r--spec/ruby/library/socket/basicsocket/recvmsg_nonblock_spec.rb300
-rw-r--r--spec/ruby/library/socket/basicsocket/recvmsg_spec.rb281
-rw-r--r--spec/ruby/library/socket/basicsocket/remote_address_spec.rb10
-rw-r--r--spec/ruby/library/socket/basicsocket/send_spec.rb220
-rw-r--r--spec/ruby/library/socket/basicsocket/sendmsg_nonblock_spec.rb118
-rw-r--r--spec/ruby/library/socket/basicsocket/sendmsg_spec.rb111
-rw-r--r--spec/ruby/library/socket/basicsocket/setsockopt_spec.rb334
-rw-r--r--spec/ruby/library/socket/basicsocket/shutdown_spec.rb155
-rw-r--r--spec/ruby/library/socket/basicsocket/write_nonblock_spec.rb43
-rw-r--r--spec/ruby/library/socket/constants/constants_spec.rb108
-rw-r--r--spec/ruby/library/socket/fixtures/classes.rb166
-rw-r--r--spec/ruby/library/socket/fixtures/send_io.txt1
-rw-r--r--spec/ruby/library/socket/ipsocket/addr_spec.rb105
-rw-r--r--spec/ruby/library/socket/ipsocket/getaddress_spec.rb28
-rw-r--r--spec/ruby/library/socket/ipsocket/peeraddr_spec.rb117
-rw-r--r--spec/ruby/library/socket/ipsocket/recvfrom_spec.rb205
-rw-r--r--spec/ruby/library/socket/option/bool_spec.rb27
-rw-r--r--spec/ruby/library/socket/option/initialize_spec.rb83
-rw-r--r--spec/ruby/library/socket/option/inspect_spec.rb19
-rw-r--r--spec/ruby/library/socket/option/int_spec.rb43
-rw-r--r--spec/ruby/library/socket/option/linger_spec.rb76
-rw-r--r--spec/ruby/library/socket/option/new_spec.rb35
-rw-r--r--spec/ruby/library/socket/shared/address.rb259
-rw-r--r--spec/ruby/library/socket/shared/pack_sockaddr.rb92
-rw-r--r--spec/ruby/library/socket/shared/partially_closable_sockets.rb13
-rw-r--r--spec/ruby/library/socket/shared/socketpair.rb138
-rw-r--r--spec/ruby/library/socket/socket/accept_loop_spec.rb84
-rw-r--r--spec/ruby/library/socket/socket/accept_nonblock_spec.rb141
-rw-r--r--spec/ruby/library/socket/socket/accept_spec.rb121
-rw-r--r--spec/ruby/library/socket/socket/bind_spec.rb150
-rw-r--r--spec/ruby/library/socket/socket/connect_nonblock_spec.rb147
-rw-r--r--spec/ruby/library/socket/socket/connect_spec.rb78
-rw-r--r--spec/ruby/library/socket/socket/for_fd_spec.rb30
-rw-r--r--spec/ruby/library/socket/socket/getaddrinfo_spec.rb391
-rw-r--r--spec/ruby/library/socket/socket/gethostbyaddr_spec.rb121
-rw-r--r--spec/ruby/library/socket/socket/gethostbyname_spec.rb135
-rw-r--r--spec/ruby/library/socket/socket/gethostname_spec.rb18
-rw-r--r--spec/ruby/library/socket/socket/getifaddrs_spec.rb117
-rw-r--r--spec/ruby/library/socket/socket/getnameinfo_spec.rb165
-rw-r--r--spec/ruby/library/socket/socket/getservbyname_spec.rb32
-rw-r--r--spec/ruby/library/socket/socket/getservbyport_spec.rb23
-rw-r--r--spec/ruby/library/socket/socket/initialize_spec.rb87
-rw-r--r--spec/ruby/library/socket/socket/ip_address_list_spec.rb50
-rw-r--r--spec/ruby/library/socket/socket/ipv6only_bang_spec.rb20
-rw-r--r--spec/ruby/library/socket/socket/listen_spec.rb66
-rw-r--r--spec/ruby/library/socket/socket/local_address_spec.rb43
-rw-r--r--spec/ruby/library/socket/socket/pack_sockaddr_in_spec.rb7
-rw-r--r--spec/ruby/library/socket/socket/pack_sockaddr_un_spec.rb7
-rw-r--r--spec/ruby/library/socket/socket/pair_spec.rb7
-rw-r--r--spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb219
-rw-r--r--spec/ruby/library/socket/socket/recvfrom_spec.rb179
-rw-r--r--spec/ruby/library/socket/socket/remote_address_spec.rb54
-rw-r--r--spec/ruby/library/socket/socket/sockaddr_in_spec.rb7
-rw-r--r--spec/ruby/library/socket/socket/sockaddr_un_spec.rb7
-rw-r--r--spec/ruby/library/socket/socket/socket_spec.rb38
-rw-r--r--spec/ruby/library/socket/socket/socketpair_spec.rb7
-rw-r--r--spec/ruby/library/socket/socket/sysaccept_spec.rb91
-rw-r--r--spec/ruby/library/socket/socket/tcp_server_loop_spec.rb54
-rw-r--r--spec/ruby/library/socket/socket/tcp_server_sockets_spec.rb39
-rw-r--r--spec/ruby/library/socket/socket/tcp_spec.rb70
-rw-r--r--spec/ruby/library/socket/socket/udp_server_loop_on_spec.rb47
-rw-r--r--spec/ruby/library/socket/socket/udp_server_loop_spec.rb59
-rw-r--r--spec/ruby/library/socket/socket/udp_server_recv_spec.rb35
-rw-r--r--spec/ruby/library/socket/socket/udp_server_sockets_spec.rb39
-rw-r--r--spec/ruby/library/socket/socket/unix_server_loop_spec.rb56
-rw-r--r--spec/ruby/library/socket/socket/unix_server_socket_spec.rb46
-rw-r--r--spec/ruby/library/socket/socket/unix_spec.rb43
-rw-r--r--spec/ruby/library/socket/socket/unpack_sockaddr_in_spec.rb44
-rw-r--r--spec/ruby/library/socket/socket/unpack_sockaddr_un_spec.rb24
-rw-r--r--spec/ruby/library/socket/spec_helper.rb12
-rw-r--r--spec/ruby/library/socket/tcpserver/accept_nonblock_spec.rb85
-rw-r--r--spec/ruby/library/socket/tcpserver/accept_spec.rb132
-rw-r--r--spec/ruby/library/socket/tcpserver/gets_spec.rb16
-rw-r--r--spec/ruby/library/socket/tcpserver/initialize_spec.rb101
-rw-r--r--spec/ruby/library/socket/tcpserver/listen_spec.rb22
-rw-r--r--spec/ruby/library/socket/tcpserver/new_spec.rb137
-rw-r--r--spec/ruby/library/socket/tcpserver/sysaccept_spec.rb66
-rw-r--r--spec/ruby/library/socket/tcpsocket/gethostbyname_spec.rb119
-rw-r--r--spec/ruby/library/socket/tcpsocket/initialize_spec.rb100
-rw-r--r--spec/ruby/library/socket/tcpsocket/local_address_spec.rb73
-rw-r--r--spec/ruby/library/socket/tcpsocket/open_spec.rb6
-rw-r--r--spec/ruby/library/socket/tcpsocket/partially_closable_spec.rb21
-rw-r--r--spec/ruby/library/socket/tcpsocket/recv_nonblock_spec.rb48
-rw-r--r--spec/ruby/library/socket/tcpsocket/recv_spec.rb28
-rw-r--r--spec/ruby/library/socket/tcpsocket/remote_address_spec.rb72
-rw-r--r--spec/ruby/library/socket/tcpsocket/setsockopt_spec.rb45
-rw-r--r--spec/ruby/library/socket/tcpsocket/shared/new.rb102
-rw-r--r--spec/ruby/library/socket/udpsocket/bind_spec.rb83
-rw-r--r--spec/ruby/library/socket/udpsocket/connect_spec.rb35
-rw-r--r--spec/ruby/library/socket/udpsocket/initialize_spec.rb53
-rw-r--r--spec/ruby/library/socket/udpsocket/inspect_spec.rb17
-rw-r--r--spec/ruby/library/socket/udpsocket/local_address_spec.rb80
-rw-r--r--spec/ruby/library/socket/udpsocket/new_spec.rb40
-rw-r--r--spec/ruby/library/socket/udpsocket/open_spec.rb13
-rw-r--r--spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb111
-rw-r--r--spec/ruby/library/socket/udpsocket/remote_address_spec.rb79
-rw-r--r--spec/ruby/library/socket/udpsocket/send_spec.rb154
-rw-r--r--spec/ruby/library/socket/udpsocket/write_spec.rb21
-rw-r--r--spec/ruby/library/socket/unixserver/accept_nonblock_spec.rb87
-rw-r--r--spec/ruby/library/socket/unixserver/accept_spec.rb126
-rw-r--r--spec/ruby/library/socket/unixserver/for_fd_spec.rb21
-rw-r--r--spec/ruby/library/socket/unixserver/initialize_spec.rb26
-rw-r--r--spec/ruby/library/socket/unixserver/listen_spec.rb19
-rw-r--r--spec/ruby/library/socket/unixserver/new_spec.rb12
-rw-r--r--spec/ruby/library/socket/unixserver/open_spec.rb24
-rw-r--r--spec/ruby/library/socket/unixserver/shared/new.rb20
-rw-r--r--spec/ruby/library/socket/unixserver/sysaccept_spec.rb50
-rw-r--r--spec/ruby/library/socket/unixsocket/addr_spec.rb33
-rw-r--r--spec/ruby/library/socket/unixsocket/initialize_spec.rb56
-rw-r--r--spec/ruby/library/socket/unixsocket/inspect_spec.rb15
-rw-r--r--spec/ruby/library/socket/unixsocket/local_address_spec.rb92
-rw-r--r--spec/ruby/library/socket/unixsocket/new_spec.rb12
-rw-r--r--spec/ruby/library/socket/unixsocket/open_spec.rb26
-rw-r--r--spec/ruby/library/socket/unixsocket/pair_spec.rb18
-rw-r--r--spec/ruby/library/socket/unixsocket/partially_closable_spec.rb21
-rw-r--r--spec/ruby/library/socket/unixsocket/path_spec.rb24
-rw-r--r--spec/ruby/library/socket/unixsocket/peeraddr_spec.rb26
-rw-r--r--spec/ruby/library/socket/unixsocket/recv_io_spec.rb84
-rw-r--r--spec/ruby/library/socket/unixsocket/recvfrom_spec.rb174
-rw-r--r--spec/ruby/library/socket/unixsocket/remote_address_spec.rb43
-rw-r--r--spec/ruby/library/socket/unixsocket/send_io_spec.rb55
-rw-r--r--spec/ruby/library/socket/unixsocket/shared/new.rb22
-rw-r--r--spec/ruby/library/socket/unixsocket/shared/pair.rb47
-rw-r--r--spec/ruby/library/socket/unixsocket/socketpair_spec.rb18
-rw-r--r--spec/ruby/library/stringio/append_spec.rb74
-rw-r--r--spec/ruby/library/stringio/binmode_spec.rb23
-rw-r--r--spec/ruby/library/stringio/close_read_spec.rb31
-rw-r--r--spec/ruby/library/stringio/close_spec.rb23
-rw-r--r--spec/ruby/library/stringio/close_write_spec.rb31
-rw-r--r--spec/ruby/library/stringio/closed_read_spec.rb12
-rw-r--r--spec/ruby/library/stringio/closed_spec.rb16
-rw-r--r--spec/ruby/library/stringio/closed_write_spec.rb12
-rw-r--r--spec/ruby/library/stringio/each_byte_spec.rb11
-rw-r--r--spec/ruby/library/stringio/each_char_spec.rb11
-rw-r--r--spec/ruby/library/stringio/each_codepoint_spec.rb9
-rw-r--r--spec/ruby/library/stringio/each_line_spec.rb27
-rw-r--r--spec/ruby/library/stringio/each_spec.rb31
-rw-r--r--spec/ruby/library/stringio/eof_spec.rb11
-rw-r--r--spec/ruby/library/stringio/external_encoding_spec.rb25
-rw-r--r--spec/ruby/library/stringio/fcntl_spec.rb8
-rw-r--r--spec/ruby/library/stringio/fileno_spec.rb8
-rw-r--r--spec/ruby/library/stringio/fixtures/classes.rb15
-rw-r--r--spec/ruby/library/stringio/flush_spec.rb9
-rw-r--r--spec/ruby/library/stringio/fsync_spec.rb9
-rw-r--r--spec/ruby/library/stringio/getbyte_spec.rb19
-rw-r--r--spec/ruby/library/stringio/getc_spec.rb19
-rw-r--r--spec/ruby/library/stringio/getch_spec.rb44
-rw-r--r--spec/ruby/library/stringio/getpass_spec.rb11
-rw-r--r--spec/ruby/library/stringio/gets_spec.rb61
-rw-r--r--spec/ruby/library/stringio/initialize_spec.rb328
-rw-r--r--spec/ruby/library/stringio/inspect_spec.rb19
-rw-r--r--spec/ruby/library/stringio/internal_encoding_spec.rb10
-rw-r--r--spec/ruby/library/stringio/isatty_spec.rb7
-rw-r--r--spec/ruby/library/stringio/length_spec.rb7
-rw-r--r--spec/ruby/library/stringio/lineno_spec.rb30
-rw-r--r--spec/ruby/library/stringio/new_spec.rb10
-rw-r--r--spec/ruby/library/stringio/open_spec.rb215
-rw-r--r--spec/ruby/library/stringio/path_spec.rb8
-rw-r--r--spec/ruby/library/stringio/pid_spec.rb8
-rw-r--r--spec/ruby/library/stringio/pos_spec.rb28
-rw-r--r--spec/ruby/library/stringio/print_spec.rb102
-rw-r--r--spec/ruby/library/stringio/printf_spec.rb91
-rw-r--r--spec/ruby/library/stringio/putc_spec.rb103
-rw-r--r--spec/ruby/library/stringio/puts_spec.rb184
-rw-r--r--spec/ruby/library/stringio/read_nonblock_spec.rb53
-rw-r--r--spec/ruby/library/stringio/read_spec.rb62
-rw-r--r--spec/ruby/library/stringio/readbyte_spec.rb20
-rw-r--r--spec/ruby/library/stringio/readchar_spec.rb20
-rw-r--r--spec/ruby/library/stringio/readline_spec.rb58
-rw-r--r--spec/ruby/library/stringio/readlines_spec.rb118
-rw-r--r--spec/ruby/library/stringio/readpartial_spec.rb102
-rw-r--r--spec/ruby/library/stringio/reopen_spec.rb251
-rw-r--r--spec/ruby/library/stringio/rewind_spec.rb24
-rw-r--r--spec/ruby/library/stringio/seek_spec.rb67
-rw-r--r--spec/ruby/library/stringio/set_encoding_by_bom_spec.rb237
-rw-r--r--spec/ruby/library/stringio/set_encoding_spec.rb28
-rw-r--r--spec/ruby/library/stringio/shared/codepoints.rb45
-rw-r--r--spec/ruby/library/stringio/shared/each.rb209
-rw-r--r--spec/ruby/library/stringio/shared/each_byte.rb48
-rw-r--r--spec/ruby/library/stringio/shared/each_char.rb36
-rw-r--r--spec/ruby/library/stringio/shared/eof.rb24
-rw-r--r--spec/ruby/library/stringio/shared/getc.rb43
-rw-r--r--spec/ruby/library/stringio/shared/gets.rb249
-rw-r--r--spec/ruby/library/stringio/shared/isatty.rb5
-rw-r--r--spec/ruby/library/stringio/shared/length.rb5
-rw-r--r--spec/ruby/library/stringio/shared/read.rb145
-rw-r--r--spec/ruby/library/stringio/shared/readchar.rb29
-rw-r--r--spec/ruby/library/stringio/shared/sysread.rb15
-rw-r--r--spec/ruby/library/stringio/shared/tell.rb12
-rw-r--r--spec/ruby/library/stringio/shared/write.rb135
-rw-r--r--spec/ruby/library/stringio/size_spec.rb7
-rw-r--r--spec/ruby/library/stringio/string_spec.rb50
-rw-r--r--spec/ruby/library/stringio/stringio_spec.rb8
-rw-r--r--spec/ruby/library/stringio/sync_spec.rb19
-rw-r--r--spec/ruby/library/stringio/sysread_spec.rb53
-rw-r--r--spec/ruby/library/stringio/syswrite_spec.rb19
-rw-r--r--spec/ruby/library/stringio/tell_spec.rb7
-rw-r--r--spec/ruby/library/stringio/truncate_spec.rb62
-rw-r--r--spec/ruby/library/stringio/tty_spec.rb7
-rw-r--r--spec/ruby/library/stringio/ungetbyte_spec.rb42
-rw-r--r--spec/ruby/library/stringio/ungetc_spec.rb72
-rw-r--r--spec/ruby/library/stringio/write_nonblock_spec.rb25
-rw-r--r--spec/ruby/library/stringio/write_spec.rb19
-rw-r--r--spec/ruby/library/stringscanner/append_spec.rb11
-rw-r--r--spec/ruby/library/stringscanner/beginning_of_line_spec.rb7
-rw-r--r--spec/ruby/library/stringscanner/bol_spec.rb7
-rw-r--r--spec/ruby/library/stringscanner/captures_spec.rb36
-rw-r--r--spec/ruby/library/stringscanner/charpos_spec.rb18
-rw-r--r--spec/ruby/library/stringscanner/check_spec.rb93
-rw-r--r--spec/ruby/library/stringscanner/check_until_spec.rb129
-rw-r--r--spec/ruby/library/stringscanner/concat_spec.rb11
-rw-r--r--spec/ruby/library/stringscanner/dup_spec.rb39
-rw-r--r--spec/ruby/library/stringscanner/element_reference_spec.rb67
-rw-r--r--spec/ruby/library/stringscanner/eos_spec.rb20
-rw-r--r--spec/ruby/library/stringscanner/exist_spec.rb119
-rw-r--r--spec/ruby/library/stringscanner/fixed_anchor_spec.rb17
-rw-r--r--spec/ruby/library/stringscanner/get_byte_spec.rb84
-rw-r--r--spec/ruby/library/stringscanner/getch_spec.rb89
-rw-r--r--spec/ruby/library/stringscanner/initialize_spec.rb32
-rw-r--r--spec/ruby/library/stringscanner/inspect_spec.rb20
-rw-r--r--spec/ruby/library/stringscanner/match_spec.rb51
-rw-r--r--spec/ruby/library/stringscanner/matched_size_spec.rb24
-rw-r--r--spec/ruby/library/stringscanner/matched_spec.rb41
-rw-r--r--spec/ruby/library/stringscanner/must_C_version_spec.rb8
-rw-r--r--spec/ruby/library/stringscanner/named_captures_spec.rb30
-rw-r--r--spec/ruby/library/stringscanner/peek_byte_spec.rb35
-rw-r--r--spec/ruby/library/stringscanner/peek_spec.rb42
-rw-r--r--spec/ruby/library/stringscanner/pointer_spec.rb11
-rw-r--r--spec/ruby/library/stringscanner/pos_spec.rb11
-rw-r--r--spec/ruby/library/stringscanner/post_match_spec.rb28
-rw-r--r--spec/ruby/library/stringscanner/pre_match_spec.rb41
-rw-r--r--spec/ruby/library/stringscanner/reset_spec.rb15
-rw-r--r--spec/ruby/library/stringscanner/rest_size_spec.rb21
-rw-r--r--spec/ruby/library/stringscanner/rest_spec.rb48
-rw-r--r--spec/ruby/library/stringscanner/scan_byte_spec.rb98
-rw-r--r--spec/ruby/library/stringscanner/scan_full_spec.rb44
-rw-r--r--spec/ruby/library/stringscanner/scan_integer_spec.rb157
-rw-r--r--spec/ruby/library/stringscanner/scan_spec.rb101
-rw-r--r--spec/ruby/library/stringscanner/scan_until_spec.rb135
-rw-r--r--spec/ruby/library/stringscanner/search_full_spec.rb133
-rw-r--r--spec/ruby/library/stringscanner/shared/bol.rb25
-rw-r--r--spec/ruby/library/stringscanner/shared/concat.rb30
-rw-r--r--spec/ruby/library/stringscanner/shared/extract_range.rb11
-rw-r--r--spec/ruby/library/stringscanner/shared/extract_range_matched.rb13
-rw-r--r--spec/ruby/library/stringscanner/shared/pos.rb59
-rw-r--r--spec/ruby/library/stringscanner/size_spec.rb17
-rw-r--r--spec/ruby/library/stringscanner/skip_spec.rb32
-rw-r--r--spec/ruby/library/stringscanner/skip_until_spec.rb132
-rw-r--r--spec/ruby/library/stringscanner/string_spec.rb40
-rw-r--r--spec/ruby/library/stringscanner/terminate_spec.rb11
-rw-r--r--spec/ruby/library/stringscanner/unscan_spec.rb28
-rw-r--r--spec/ruby/library/stringscanner/values_at_spec.rb68
-rw-r--r--spec/ruby/library/syslog/alert_spec.rb10
-rw-r--r--spec/ruby/library/syslog/close_spec.rb58
-rw-r--r--spec/ruby/library/syslog/constants_spec.rb41
-rw-r--r--spec/ruby/library/syslog/crit_spec.rb10
-rw-r--r--spec/ruby/library/syslog/debug_spec.rb10
-rw-r--r--spec/ruby/library/syslog/emerg_spec.rb16
-rw-r--r--spec/ruby/library/syslog/err_spec.rb10
-rw-r--r--spec/ruby/library/syslog/facility_spec.rb48
-rw-r--r--spec/ruby/library/syslog/ident_spec.rb35
-rw-r--r--spec/ruby/library/syslog/info_spec.rb10
-rw-r--r--spec/ruby/library/syslog/inspect_spec.rb39
-rw-r--r--spec/ruby/library/syslog/instance_spec.rb13
-rw-r--r--spec/ruby/library/syslog/log_spec.rb56
-rw-r--r--spec/ruby/library/syslog/mask_spec.rb113
-rw-r--r--spec/ruby/library/syslog/notice_spec.rb10
-rw-r--r--spec/ruby/library/syslog/open_spec.rb92
-rw-r--r--spec/ruby/library/syslog/opened_spec.rb39
-rw-r--r--spec/ruby/library/syslog/options_spec.rb48
-rw-r--r--spec/ruby/library/syslog/reopen_spec.rb10
-rw-r--r--spec/ruby/library/syslog/shared/log.rb39
-rw-r--r--spec/ruby/library/syslog/shared/reopen.rb40
-rw-r--r--spec/ruby/library/syslog/warning_spec.rb10
-rw-r--r--spec/ruby/library/tempfile/_close_spec.rb21
-rw-r--r--spec/ruby/library/tempfile/close_spec.rb57
-rw-r--r--spec/ruby/library/tempfile/create_spec.rb176
-rw-r--r--spec/ruby/library/tempfile/delete_spec.rb7
-rw-r--r--spec/ruby/library/tempfile/initialize_spec.rb46
-rw-r--r--spec/ruby/library/tempfile/length_spec.rb7
-rw-r--r--spec/ruby/library/tempfile/open_spec.rb97
-rw-r--r--spec/ruby/library/tempfile/path_spec.rb26
-rw-r--r--spec/ruby/library/tempfile/shared/length.rb21
-rw-r--r--spec/ruby/library/tempfile/shared/unlink.rb12
-rw-r--r--spec/ruby/library/tempfile/size_spec.rb7
-rw-r--r--spec/ruby/library/tempfile/unlink_spec.rb7
-rw-r--r--spec/ruby/library/thread/queue_spec.rb8
-rw-r--r--spec/ruby/library/thread/sizedqueue_spec.rb8
-rw-r--r--spec/ruby/library/time/httpdate_spec.rb21
-rw-r--r--spec/ruby/library/time/iso8601_spec.rb7
-rw-r--r--spec/ruby/library/time/rfc2822_spec.rb7
-rw-r--r--spec/ruby/library/time/rfc822_spec.rb7
-rw-r--r--spec/ruby/library/time/shared/rfc2822.rb65
-rw-r--r--spec/ruby/library/time/shared/xmlschema.rb53
-rw-r--r--spec/ruby/library/time/to_time_spec.rb15
-rw-r--r--spec/ruby/library/time/xmlschema_spec.rb7
-rw-r--r--spec/ruby/library/timeout/error_spec.rb8
-rw-r--r--spec/ruby/library/timeout/timeout_spec.rb50
-rw-r--r--spec/ruby/library/tmpdir/dir/mktmpdir_spec.rb117
-rw-r--r--spec/ruby/library/tmpdir/dir/tmpdir_spec.rb10
-rw-r--r--spec/ruby/library/uri/decode_www_form_component_spec.rb6
-rw-r--r--spec/ruby/library/uri/decode_www_form_spec.rb6
-rw-r--r--spec/ruby/library/uri/encode_www_form_component_spec.rb6
-rw-r--r--spec/ruby/library/uri/encode_www_form_spec.rb6
-rw-r--r--spec/ruby/library/uri/eql_spec.rb10
-rw-r--r--spec/ruby/library/uri/equality_spec.rb46
-rw-r--r--spec/ruby/library/uri/escape/decode_spec.rb6
-rw-r--r--spec/ruby/library/uri/escape/encode_spec.rb6
-rw-r--r--spec/ruby/library/uri/escape/escape_spec.rb6
-rw-r--r--spec/ruby/library/uri/escape/unescape_spec.rb6
-rw-r--r--spec/ruby/library/uri/extract_spec.rb86
-rw-r--r--spec/ruby/library/uri/fixtures/classes.rb11
-rw-r--r--spec/ruby/library/uri/fixtures/normalization.rb54
-rw-r--r--spec/ruby/library/uri/ftp/build_spec.rb6
-rw-r--r--spec/ruby/library/uri/ftp/merge_spec.rb6
-rw-r--r--spec/ruby/library/uri/ftp/new2_spec.rb6
-rw-r--r--spec/ruby/library/uri/ftp/path_spec.rb26
-rw-r--r--spec/ruby/library/uri/ftp/set_typecode_spec.rb6
-rw-r--r--spec/ruby/library/uri/ftp/to_s_spec.rb15
-rw-r--r--spec/ruby/library/uri/ftp/typecode_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/absolute_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/build2_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/build_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/coerce_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/component_ary_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/component_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/default_port_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/eql_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/equal_value_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/fragment_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/hash_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/hierarchical_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/host_spec.rb13
-rw-r--r--spec/ruby/library/uri/generic/inspect_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/merge_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/minus_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/normalize_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/opaque_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/password_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/path_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/plus_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/port_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/query_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/registry_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/relative_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/route_from_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/route_to_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/scheme_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/select_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/set_fragment_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/set_host_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/set_opaque_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/set_password_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/set_path_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/set_port_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/set_query_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/set_registry_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/set_scheme_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/set_user_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/set_userinfo_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/to_s_spec.rb9
-rw-r--r--spec/ruby/library/uri/generic/use_registry_spec.rb6
-rw-r--r--spec/ruby/library/uri/generic/user_spec.rb10
-rw-r--r--spec/ruby/library/uri/generic/userinfo_spec.rb10
-rw-r--r--spec/ruby/library/uri/http/build_spec.rb6
-rw-r--r--spec/ruby/library/uri/http/request_uri_spec.rb16
-rw-r--r--spec/ruby/library/uri/join_spec.rb59
-rw-r--r--spec/ruby/library/uri/ldap/attributes_spec.rb10
-rw-r--r--spec/ruby/library/uri/ldap/build_spec.rb6
-rw-r--r--spec/ruby/library/uri/ldap/dn_spec.rb10
-rw-r--r--spec/ruby/library/uri/ldap/extensions_spec.rb10
-rw-r--r--spec/ruby/library/uri/ldap/filter_spec.rb10
-rw-r--r--spec/ruby/library/uri/ldap/hierarchical_spec.rb6
-rw-r--r--spec/ruby/library/uri/ldap/scope_spec.rb10
-rw-r--r--spec/ruby/library/uri/ldap/set_attributes_spec.rb6
-rw-r--r--spec/ruby/library/uri/ldap/set_dn_spec.rb6
-rw-r--r--spec/ruby/library/uri/ldap/set_extensions_spec.rb6
-rw-r--r--spec/ruby/library/uri/ldap/set_filter_spec.rb6
-rw-r--r--spec/ruby/library/uri/ldap/set_scope_spec.rb6
-rw-r--r--spec/ruby/library/uri/mailto/build_spec.rb92
-rw-r--r--spec/ruby/library/uri/mailto/headers_spec.rb10
-rw-r--r--spec/ruby/library/uri/mailto/set_headers_spec.rb6
-rw-r--r--spec/ruby/library/uri/mailto/set_to_spec.rb6
-rw-r--r--spec/ruby/library/uri/mailto/to_mailtext_spec.rb6
-rw-r--r--spec/ruby/library/uri/mailto/to_rfc822text_spec.rb6
-rw-r--r--spec/ruby/library/uri/mailto/to_s_spec.rb6
-rw-r--r--spec/ruby/library/uri/mailto/to_spec.rb10
-rw-r--r--spec/ruby/library/uri/merge_spec.rb20
-rw-r--r--spec/ruby/library/uri/normalize_spec.rb35
-rw-r--r--spec/ruby/library/uri/parse_spec.rb203
-rw-r--r--spec/ruby/library/uri/parser/escape_spec.rb6
-rw-r--r--spec/ruby/library/uri/parser/extract_spec.rb7
-rw-r--r--spec/ruby/library/uri/parser/inspect_spec.rb6
-rw-r--r--spec/ruby/library/uri/parser/join_spec.rb7
-rw-r--r--spec/ruby/library/uri/parser/make_regexp_spec.rb6
-rw-r--r--spec/ruby/library/uri/parser/parse_spec.rb7
-rw-r--r--spec/ruby/library/uri/parser/split_spec.rb6
-rw-r--r--spec/ruby/library/uri/parser/unescape_spec.rb6
-rw-r--r--spec/ruby/library/uri/plus_spec.rb459
-rw-r--r--spec/ruby/library/uri/regexp_spec.rb18
-rw-r--r--spec/ruby/library/uri/route_from_spec.rb23
-rw-r--r--spec/ruby/library/uri/route_to_spec.rb26
-rw-r--r--spec/ruby/library/uri/select_spec.rb27
-rw-r--r--spec/ruby/library/uri/set_component_spec.rb47
-rw-r--r--spec/ruby/library/uri/shared/eql.rb17
-rw-r--r--spec/ruby/library/uri/shared/extract.rb83
-rw-r--r--spec/ruby/library/uri/shared/join.rb56
-rw-r--r--spec/ruby/library/uri/shared/parse.rb206
-rw-r--r--spec/ruby/library/uri/split_spec.rb6
-rw-r--r--spec/ruby/library/uri/uri_spec.rb29
-rw-r--r--spec/ruby/library/uri/util/make_components_hash_spec.rb6
-rw-r--r--spec/ruby/library/weakref/__getobj___spec.rb17
-rw-r--r--spec/ruby/library/weakref/allocate_spec.rb8
-rw-r--r--spec/ruby/library/weakref/fixtures/classes.rb26
-rw-r--r--spec/ruby/library/weakref/new_spec.rb13
-rw-r--r--spec/ruby/library/weakref/send_spec.rb37
-rw-r--r--spec/ruby/library/weakref/weakref_alive_spec.rb15
-rw-r--r--spec/ruby/library/win32ole/fixtures/classes.rb33
-rw-r--r--spec/ruby/library/win32ole/fixtures/event.xml4
-rw-r--r--spec/ruby/library/win32ole/win32ole/_getproperty_spec.rb15
-rw-r--r--spec/ruby/library/win32ole/win32ole/_invoke_spec.rb22
-rw-r--r--spec/ruby/library/win32ole/win32ole/codepage_spec.rb14
-rw-r--r--spec/ruby/library/win32ole/win32ole/connect_spec.rb16
-rw-r--r--spec/ruby/library/win32ole/win32ole/const_load_spec.rb33
-rw-r--r--spec/ruby/library/win32ole/win32ole/constants_spec.rb43
-rw-r--r--spec/ruby/library/win32ole/win32ole/create_guid_spec.rb10
-rw-r--r--spec/ruby/library/win32ole/win32ole/invoke_spec.rb15
-rw-r--r--spec/ruby/library/win32ole/win32ole/locale_spec.rb30
-rw-r--r--spec/ruby/library/win32ole/win32ole/new_spec.rb26
-rw-r--r--spec/ruby/library/win32ole/win32ole/ole_func_methods_spec.rb22
-rw-r--r--spec/ruby/library/win32ole/win32ole/ole_get_methods_spec.rb17
-rw-r--r--spec/ruby/library/win32ole/win32ole/ole_method_help_spec.rb11
-rw-r--r--spec/ruby/library/win32ole/win32ole/ole_method_spec.rb11
-rw-r--r--spec/ruby/library/win32ole/win32ole/ole_methods_spec.rb22
-rw-r--r--spec/ruby/library/win32ole/win32ole/ole_obj_help_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole/ole_put_methods_spec.rb22
-rw-r--r--spec/ruby/library/win32ole/win32ole/setproperty_spec.rb11
-rw-r--r--spec/ruby/library/win32ole/win32ole/shared/ole_method.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole/shared/setproperty.rb23
-rw-r--r--spec/ruby/library/win32ole/win32ole_event/new_spec.rb34
-rw-r--r--spec/ruby/library/win32ole/win32ole_event/on_event_spec.rb71
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/dispid_spec.rb21
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/event_interface_spec.rb29
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/event_spec.rb23
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/helpcontext_spec.rb27
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/helpfile_spec.rb21
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/helpstring_spec.rb21
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/invkind_spec.rb21
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/invoke_kind_spec.rb21
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/name_spec.rb12
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/new_spec.rb34
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/offset_vtbl_spec.rb22
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/params_spec.rb29
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/return_type_detail_spec.rb22
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/return_type_spec.rb21
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/return_vtype_spec.rb21
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/shared/name.rb20
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/size_opt_params_spec.rb21
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/size_params_spec.rb21
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/to_s_spec.rb12
-rw-r--r--spec/ruby/library/win32ole/win32ole_method/visible_spec.rb21
-rw-r--r--spec/ruby/library/win32ole/win32ole_param/default_spec.rb32
-rw-r--r--spec/ruby/library/win32ole/win32ole_param/input_spec.rb22
-rw-r--r--spec/ruby/library/win32ole/win32ole_param/name_spec.rb12
-rw-r--r--spec/ruby/library/win32ole/win32ole_param/ole_type_detail_spec.rb22
-rw-r--r--spec/ruby/library/win32ole/win32ole_param/ole_type_spec.rb22
-rw-r--r--spec/ruby/library/win32ole/win32ole_param/optional_spec.rb22
-rw-r--r--spec/ruby/library/win32ole/win32ole_param/retval_spec.rb22
-rw-r--r--spec/ruby/library/win32ole/win32ole_param/shared/name.rb21
-rw-r--r--spec/ruby/library/win32ole/win32ole_param/to_s_spec.rb12
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/guid_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/helpcontext_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/helpfile_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/helpstring_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/major_version_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/minor_version_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/name_spec.rb12
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/new_spec.rb41
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/ole_classes_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/ole_methods_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/ole_type_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/progid_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/progids_spec.rb15
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/shared/name.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/src_type_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/to_s_spec.rb12
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/typekind_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/typelibs_spec.rb23
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/variables_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_type/visible_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_variable/name_spec.rb12
-rw-r--r--spec/ruby/library/win32ole/win32ole_variable/ole_type_detail_spec.rb20
-rw-r--r--spec/ruby/library/win32ole/win32ole_variable/ole_type_spec.rb19
-rw-r--r--spec/ruby/library/win32ole/win32ole_variable/shared/name.rb18
-rw-r--r--spec/ruby/library/win32ole/win32ole_variable/to_s_spec.rb12
-rw-r--r--spec/ruby/library/win32ole/win32ole_variable/value_spec.rb20
-rw-r--r--spec/ruby/library/win32ole/win32ole_variable/variable_kind_spec.rb20
-rw-r--r--spec/ruby/library/win32ole/win32ole_variable/varkind_spec.rb20
-rw-r--r--spec/ruby/library/win32ole/win32ole_variable/visible_spec.rb19
-rw-r--r--spec/ruby/library/yaml/dump_spec.rb64
-rw-r--r--spec/ruby/library/yaml/dump_stream_spec.rb9
-rw-r--r--spec/ruby/library/yaml/fixtures/example_class.rb7
-rw-r--r--spec/ruby/library/yaml/fixtures/strings.rb26
-rw-r--r--spec/ruby/library/yaml/fixtures/test_yaml.yml2
-rw-r--r--spec/ruby/library/yaml/load_file_spec.rb18
-rw-r--r--spec/ruby/library/yaml/load_spec.rb10
-rw-r--r--spec/ruby/library/yaml/load_stream_spec.rb9
-rw-r--r--spec/ruby/library/yaml/parse_file_spec.rb10
-rw-r--r--spec/ruby/library/yaml/parse_spec.rb23
-rw-r--r--spec/ruby/library/yaml/shared/each_document.rb19
-rw-r--r--spec/ruby/library/yaml/shared/load.rb142
-rw-r--r--spec/ruby/library/yaml/to_yaml_spec.rb114
-rw-r--r--spec/ruby/library/yaml/unsafe_load_spec.rb9
-rw-r--r--spec/ruby/library/zlib/adler32_spec.rb46
-rw-r--r--spec/ruby/library/zlib/crc32_spec.rb54
-rw-r--r--spec/ruby/library/zlib/crc_table_spec.rb80
-rw-r--r--spec/ruby/library/zlib/deflate/deflate_spec.rb133
-rw-r--r--spec/ruby/library/zlib/deflate/params_spec.rb17
-rw-r--r--spec/ruby/library/zlib/deflate/set_dictionary_spec.rb14
-rw-r--r--spec/ruby/library/zlib/deflate_spec.rb8
-rw-r--r--spec/ruby/library/zlib/gunzip_spec.rb14
-rw-r--r--spec/ruby/library/zlib/gzip_spec.rb15
-rw-r--r--spec/ruby/library/zlib/gzipfile/close_spec.rb21
-rw-r--r--spec/ruby/library/zlib/gzipfile/closed_spec.rb16
-rw-r--r--spec/ruby/library/zlib/gzipfile/comment_spec.rb26
-rw-r--r--spec/ruby/library/zlib/gzipfile/orig_name_spec.rb26
-rw-r--r--spec/ruby/library/zlib/gzipreader/each_byte_spec.rb51
-rw-r--r--spec/ruby/library/zlib/gzipreader/each_char_spec.rb51
-rw-r--r--spec/ruby/library/zlib/gzipreader/each_line_spec.rb6
-rw-r--r--spec/ruby/library/zlib/gzipreader/each_spec.rb6
-rw-r--r--spec/ruby/library/zlib/gzipreader/eof_spec.rb54
-rw-r--r--spec/ruby/library/zlib/gzipreader/getc_spec.rb39
-rw-r--r--spec/ruby/library/zlib/gzipreader/gets_spec.rb22
-rw-r--r--spec/ruby/library/zlib/gzipreader/mtime_spec.rb11
-rw-r--r--spec/ruby/library/zlib/gzipreader/pos_spec.rb24
-rw-r--r--spec/ruby/library/zlib/gzipreader/read_spec.rb66
-rw-r--r--spec/ruby/library/zlib/gzipreader/readpartial_spec.rb17
-rw-r--r--spec/ruby/library/zlib/gzipreader/rewind_spec.rb47
-rw-r--r--spec/ruby/library/zlib/gzipreader/shared/each.rb49
-rw-r--r--spec/ruby/library/zlib/gzipreader/ungetbyte_spec.rb120
-rw-r--r--spec/ruby/library/zlib/gzipreader/ungetc_spec.rb284
-rw-r--r--spec/ruby/library/zlib/gzipwriter/append_spec.rb15
-rw-r--r--spec/ruby/library/zlib/gzipwriter/mtime_spec.rb38
-rw-r--r--spec/ruby/library/zlib/gzipwriter/write_spec.rb36
-rw-r--r--spec/ruby/library/zlib/inflate/append_spec.rb60
-rw-r--r--spec/ruby/library/zlib/inflate/finish_spec.rb29
-rw-r--r--spec/ruby/library/zlib/inflate/inflate_spec.rb159
-rw-r--r--spec/ruby/library/zlib/inflate/set_dictionary_spec.rb20
-rw-r--r--spec/ruby/library/zlib/inflate_spec.rb8
-rw-r--r--spec/ruby/library/zlib/zlib_version_spec.rb8
-rw-r--r--spec/ruby/library/zlib/zstream/adler_spec.rb11
-rw-r--r--spec/ruby/library/zlib/zstream/avail_in_spec.rb9
-rw-r--r--spec/ruby/library/zlib/zstream/avail_out_spec.rb9
-rw-r--r--spec/ruby/library/zlib/zstream/data_type_spec.rb9
-rw-r--r--spec/ruby/library/zlib/zstream/flush_next_out_spec.rb14
-rw-r--r--spec/ruby/optional/capi/README13
-rw-r--r--spec/ruby/optional/capi/array_spec.rb533
-rw-r--r--spec/ruby/optional/capi/basic_object_spec.rb24
-rw-r--r--spec/ruby/optional/capi/bignum_spec.rb226
-rw-r--r--spec/ruby/optional/capi/binding_spec.rb16
-rw-r--r--spec/ruby/optional/capi/boolean_spec.rb33
-rw-r--r--spec/ruby/optional/capi/class_spec.rb504
-rw-r--r--spec/ruby/optional/capi/complex_spec.rb45
-rw-r--r--spec/ruby/optional/capi/constants_spec.rb325
-rw-r--r--spec/ruby/optional/capi/data_spec.rb53
-rw-r--r--spec/ruby/optional/capi/debug_spec.rb74
-rw-r--r--spec/ruby/optional/capi/digest_spec.rb103
-rw-r--r--spec/ruby/optional/capi/encoding_spec.rb748
-rw-r--r--spec/ruby/optional/capi/enumerator_spec.rb66
-rw-r--r--spec/ruby/optional/capi/exception_spec.rb201
-rw-r--r--spec/ruby/optional/capi/ext/.gitignore9
-rw-r--r--spec/ruby/optional/capi/ext/array_spec.c333
-rw-r--r--spec/ruby/optional/capi/ext/basic_object_spec.c19
-rw-r--r--spec/ruby/optional/capi/ext/bignum_spec.c106
-rw-r--r--spec/ruby/optional/capi/ext/binding_spec.c19
-rw-r--r--spec/ruby/optional/capi/ext/boolean_spec.c33
-rw-r--r--spec/ruby/optional/capi/ext/class_id_under_autoload_spec.c13
-rw-r--r--spec/ruby/optional/capi/ext/class_spec.c180
-rw-r--r--spec/ruby/optional/capi/ext/class_under_autoload_spec.c13
-rw-r--r--spec/ruby/optional/capi/ext/complex_spec.c45
-rw-r--r--spec/ruby/optional/capi/ext/constants_spec.c172
-rw-r--r--spec/ruby/optional/capi/ext/data_spec.c93
-rw-r--r--spec/ruby/optional/capi/ext/debug_spec.c93
-rw-r--r--spec/ruby/optional/capi/ext/digest_spec.c168
-rw-r--r--spec/ruby/optional/capi/ext/encoding_spec.c391
-rw-r--r--spec/ruby/optional/capi/ext/enumerator_spec.c32
-rw-r--r--spec/ruby/optional/capi/ext/exception_spec.c84
-rw-r--r--spec/ruby/optional/capi/ext/fiber_spec.c64
-rw-r--r--spec/ruby/optional/capi/ext/file_spec.c29
-rw-r--r--spec/ruby/optional/capi/ext/finalizer_spec.c25
-rw-r--r--spec/ruby/optional/capi/ext/fixnum_spec.c26
-rw-r--r--spec/ruby/optional/capi/ext/float_spec.c47
-rw-r--r--spec/ruby/optional/capi/ext/gc_spec.c149
-rw-r--r--spec/ruby/optional/capi/ext/globals_spec.c161
-rw-r--r--spec/ruby/optional/capi/ext/hash_spec.c180
-rw-r--r--spec/ruby/optional/capi/ext/integer_spec.c40
-rw-r--r--spec/ruby/optional/capi/ext/io_spec.c412
-rw-r--r--spec/ruby/optional/capi/ext/kernel_spec.c452
-rw-r--r--spec/ruby/optional/capi/ext/language_spec.c42
-rw-r--r--spec/ruby/optional/capi/ext/marshal_spec.c24
-rw-r--r--spec/ruby/optional/capi/ext/module_spec.c176
-rw-r--r--spec/ruby/optional/capi/ext/module_under_autoload_spec.c15
-rw-r--r--spec/ruby/optional/capi/ext/mutex_spec.c76
-rw-r--r--spec/ruby/optional/capi/ext/numeric_spec.c130
-rw-r--r--spec/ruby/optional/capi/ext/object_spec.c475
-rw-r--r--spec/ruby/optional/capi/ext/proc_spec.c147
-rw-r--r--spec/ruby/optional/capi/ext/range_spec.c90
-rw-r--r--spec/ruby/optional/capi/ext/rational_spec.c54
-rw-r--r--spec/ruby/optional/capi/ext/rbasic_spec.c104
-rw-r--r--spec/ruby/optional/capi/ext/regexp_spec.c74
-rw-r--r--spec/ruby/optional/capi/ext/rubyspec.h50
-rw-r--r--spec/ruby/optional/capi/ext/set_spec.c65
-rw-r--r--spec/ruby/optional/capi/ext/st_spec.c83
-rw-r--r--spec/ruby/optional/capi/ext/string_spec.c688
-rw-r--r--spec/ruby/optional/capi/ext/struct_spec.c105
-rw-r--r--spec/ruby/optional/capi/ext/symbol_spec.c116
-rw-r--r--spec/ruby/optional/capi/ext/thread_spec.c195
-rw-r--r--spec/ruby/optional/capi/ext/time_spec.c81
-rw-r--r--spec/ruby/optional/capi/ext/tracepoint_spec.c49
-rw-r--r--spec/ruby/optional/capi/ext/typed_data_spec.c203
-rw-r--r--spec/ruby/optional/capi/ext/util_spec.c121
-rw-r--r--spec/ruby/optional/capi/fiber_spec.rb86
-rw-r--r--spec/ruby/optional/capi/file_spec.rb89
-rw-r--r--spec/ruby/optional/capi/finalizer_spec.rb40
-rw-r--r--spec/ruby/optional/capi/fixnum_spec.rb101
-rw-r--r--spec/ruby/optional/capi/fixtures/class.rb104
-rw-r--r--spec/ruby/optional/capi/fixtures/const_get.rb5
-rw-r--r--spec/ruby/optional/capi/fixtures/const_get_at.rb5
-rw-r--r--spec/ruby/optional/capi/fixtures/const_get_from.rb5
-rw-r--r--spec/ruby/optional/capi/fixtures/const_get_object.rb3
-rw-r--r--spec/ruby/optional/capi/fixtures/encoding.rb3
-rw-r--r--spec/ruby/optional/capi/fixtures/foo.rb1
-rw-r--r--spec/ruby/optional/capi/fixtures/kernel.rb19
-rw-r--r--spec/ruby/optional/capi/fixtures/module.rb39
-rw-r--r--spec/ruby/optional/capi/fixtures/module_autoload.rb4
-rw-r--r--spec/ruby/optional/capi/fixtures/object.rb29
-rw-r--r--spec/ruby/optional/capi/fixtures/path_to_class.rb6
-rw-r--r--spec/ruby/optional/capi/fixtures/proc.rb20
-rw-r--r--spec/ruby/optional/capi/fixtures/read.txt1
-rw-r--r--spec/ruby/optional/capi/float_spec.rb43
-rw-r--r--spec/ruby/optional/capi/gc_spec.rb136
-rw-r--r--spec/ruby/optional/capi/globals_spec.rb298
-rw-r--r--spec/ruby/optional/capi/hash_spec.rb343
-rw-r--r--spec/ruby/optional/capi/integer_spec.rb307
-rw-r--r--spec/ruby/optional/capi/io_spec.rb738
-rw-r--r--spec/ruby/optional/capi/kernel_spec.rb923
-rw-r--r--spec/ruby/optional/capi/language_spec.rb37
-rw-r--r--spec/ruby/optional/capi/marshal_spec.rb46
-rw-r--r--spec/ruby/optional/capi/module_spec.rb435
-rw-r--r--spec/ruby/optional/capi/mutex_spec.rb102
-rw-r--r--spec/ruby/optional/capi/numeric_spec.rb495
-rw-r--r--spec/ruby/optional/capi/object_spec.rb1023
-rw-r--r--spec/ruby/optional/capi/proc_spec.rb188
-rw-r--r--spec/ruby/optional/capi/rake_helper.rb22
-rw-r--r--spec/ruby/optional/capi/range_spec.rb231
-rw-r--r--spec/ruby/optional/capi/rational_spec.rb57
-rw-r--r--spec/ruby/optional/capi/rbasic_spec.rb48
-rw-r--r--spec/ruby/optional/capi/regexp_spec.rb128
-rw-r--r--spec/ruby/optional/capi/set_spec.rb96
-rw-r--r--spec/ruby/optional/capi/shared/rbasic.rb27
-rw-r--r--spec/ruby/optional/capi/spec_helper.rb150
-rw-r--r--spec/ruby/optional/capi/st_spec.rb41
-rw-r--r--spec/ruby/optional/capi/string_spec.rb1376
-rw-r--r--spec/ruby/optional/capi/struct_spec.rb316
-rw-r--r--spec/ruby/optional/capi/symbol_spec.rb180
-rw-r--r--spec/ruby/optional/capi/thread_spec.rb195
-rw-r--r--spec/ruby/optional/capi/time_spec.rb301
-rw-r--r--spec/ruby/optional/capi/tracepoint_spec.rb56
-rw-r--r--spec/ruby/optional/capi/typed_data_spec.rb100
-rw-r--r--spec/ruby/optional/capi/util_spec.rb295
-rw-r--r--spec/ruby/optional/thread_safety/fixtures/classes.rb39
-rw-r--r--spec/ruby/optional/thread_safety/hash_spec.rb210
-rw-r--r--spec/ruby/security/cve_2010_1330_spec.rb19
-rw-r--r--spec/ruby/security/cve_2011_4815_spec.rb47
-rw-r--r--spec/ruby/security/cve_2013_4164_spec.rb15
-rw-r--r--spec/ruby/security/cve_2018_16396_spec.rb7
-rw-r--r--spec/ruby/security/cve_2018_6914_spec.rb55
-rw-r--r--spec/ruby/security/cve_2018_8778_spec.rb10
-rw-r--r--spec/ruby/security/cve_2018_8779_spec.rb30
-rw-r--r--spec/ruby/security/cve_2018_8780_spec.rb43
-rw-r--r--spec/ruby/security/cve_2019_8321_spec.rb20
-rw-r--r--spec/ruby/security/cve_2019_8322_spec.rb21
-rw-r--r--spec/ruby/security/cve_2019_8323_spec.rb46
-rw-r--r--spec/ruby/security/cve_2019_8325_spec.rb46
-rw-r--r--spec/ruby/security/cve_2020_10663_spec.rb49
-rw-r--r--spec/ruby/security/cve_2024_49761_spec.rb7
-rw-r--r--spec/ruby/shared/basicobject/method_missing.rb124
-rw-r--r--spec/ruby/shared/basicobject/send.rb128
-rw-r--r--spec/ruby/shared/enumerable/minmax.rb24
-rw-r--r--spec/ruby/shared/file/blockdev.rb9
-rw-r--r--spec/ruby/shared/file/chardev.rb9
-rw-r--r--spec/ruby/shared/file/directory.rb66
-rw-r--r--spec/ruby/shared/file/executable.rb83
-rw-r--r--spec/ruby/shared/file/executable_real.rb81
-rw-r--r--spec/ruby/shared/file/exist.rb19
-rw-r--r--spec/ruby/shared/file/file.rb45
-rw-r--r--spec/ruby/shared/file/grpowned.rb39
-rw-r--r--spec/ruby/shared/file/identical.rb51
-rw-r--r--spec/ruby/shared/file/owned.rb3
-rw-r--r--spec/ruby/shared/file/pipe.rb3
-rw-r--r--spec/ruby/shared/file/readable.rb49
-rw-r--r--spec/ruby/shared/file/readable_real.rb39
-rw-r--r--spec/ruby/shared/file/setgid.rb2
-rw-r--r--spec/ruby/shared/file/setuid.rb2
-rw-r--r--spec/ruby/shared/file/size.rb124
-rw-r--r--spec/ruby/shared/file/socket.rb33
-rw-r--r--spec/ruby/shared/file/sticky.rb29
-rw-r--r--spec/ruby/shared/file/symlink.rb46
-rw-r--r--spec/ruby/shared/file/world_readable.rb49
-rw-r--r--spec/ruby/shared/file/world_writable.rb49
-rw-r--r--spec/ruby/shared/file/writable.rb44
-rw-r--r--spec/ruby/shared/file/writable_real.rb49
-rw-r--r--spec/ruby/shared/file/zero.rb68
-rw-r--r--spec/ruby/shared/hash/key_error.rb23
-rw-r--r--spec/ruby/shared/io/putc.rb57
-rw-r--r--spec/ruby/shared/kernel/at_exit.rb76
-rw-r--r--spec/ruby/shared/kernel/complex.rb133
-rw-r--r--spec/ruby/shared/kernel/equal.rb54
-rw-r--r--spec/ruby/shared/kernel/fixtures/END.rb3
-rw-r--r--spec/ruby/shared/kernel/fixtures/at_exit.rb3
-rw-r--r--spec/ruby/shared/kernel/object_id.rb100
-rw-r--r--spec/ruby/shared/kernel/raise.rb398
-rw-r--r--spec/ruby/shared/process/abort.rb36
-rw-r--r--spec/ruby/shared/process/exit.rb126
-rw-r--r--spec/ruby/shared/process/fork.rb90
-rw-r--r--spec/ruby/shared/queue/clear.rb12
-rw-r--r--spec/ruby/shared/queue/close.rb14
-rw-r--r--spec/ruby/shared/queue/closed.rb12
-rw-r--r--spec/ruby/shared/queue/deque.rb164
-rw-r--r--spec/ruby/shared/queue/empty.rb12
-rw-r--r--spec/ruby/shared/queue/enque.rb18
-rw-r--r--spec/ruby/shared/queue/freeze.rb18
-rw-r--r--spec/ruby/shared/queue/length.rb9
-rw-r--r--spec/ruby/shared/queue/num_waiting.rb16
-rw-r--r--spec/ruby/shared/sizedqueue/enque.rb129
-rw-r--r--spec/ruby/shared/sizedqueue/max.rb47
-rw-r--r--spec/ruby/shared/sizedqueue/new.rb23
-rw-r--r--spec/ruby/shared/sizedqueue/num_waiting.rb12
-rw-r--r--spec/ruby/shared/string/end_with.rb61
-rw-r--r--spec/ruby/shared/string/start_with.rb84
-rw-r--r--spec/ruby/shared/string/times.rb58
-rw-r--r--spec/ruby/shared/time/strftime_for_date.rb273
-rw-r--r--spec/ruby/shared/time/strftime_for_time.rb181
-rw-r--r--spec/ruby/shared/time/yday.rb18
-rw-r--r--spec/ruby/shared/types/rb_num2dbl_fails.rb17
-rw-r--r--spec/ruby/spec_helper.rb38
-rw-r--r--spec/syntax_suggest/fixtures/derailed_require_tree.rb.txt74
-rwxr-xr-xspec/syntax_suggest/fixtures/rexe.rb.txt569
-rw-r--r--spec/syntax_suggest/fixtures/routes.rb.txt121
-rw-r--r--spec/syntax_suggest/fixtures/ruby_buildpack.rb.txt1344
-rw-r--r--spec/syntax_suggest/fixtures/syntax_tree.rb.txt9234
-rw-r--r--spec/syntax_suggest/fixtures/this_project_extra_def.rb.txt64
-rw-r--r--spec/syntax_suggest/fixtures/webmock.rb.txt35
-rw-r--r--spec/syntax_suggest/integration/exe_cli_spec.rb27
-rw-r--r--spec/syntax_suggest/integration/ruby_command_line_spec.rb193
-rw-r--r--spec/syntax_suggest/integration/syntax_suggest_spec.rb243
-rw-r--r--spec/syntax_suggest/spec_helper.rb107
-rw-r--r--spec/syntax_suggest/unit/api_spec.rb114
-rw-r--r--spec/syntax_suggest/unit/around_block_scan_spec.rb165
-rw-r--r--spec/syntax_suggest/unit/block_expand_spec.rb230
-rw-r--r--spec/syntax_suggest/unit/capture/before_after_keyword_ends_spec.rb47
-rw-r--r--spec/syntax_suggest/unit/capture/falling_indent_lines_spec.rb44
-rw-r--r--spec/syntax_suggest/unit/capture_code_context_spec.rb229
-rw-r--r--spec/syntax_suggest/unit/clean_document_spec.rb260
-rw-r--r--spec/syntax_suggest/unit/cli_spec.rb224
-rw-r--r--spec/syntax_suggest/unit/code_block_spec.rb77
-rw-r--r--spec/syntax_suggest/unit/code_frontier_spec.rb135
-rw-r--r--spec/syntax_suggest/unit/code_line_spec.rb165
-rw-r--r--spec/syntax_suggest/unit/code_search_spec.rb505
-rw-r--r--spec/syntax_suggest/unit/core_ext_spec.rb34
-rw-r--r--spec/syntax_suggest/unit/display_invalid_blocks_spec.rb174
-rw-r--r--spec/syntax_suggest/unit/explain_syntax_spec.rb255
-rw-r--r--spec/syntax_suggest/unit/lex_all_spec.rb26
-rw-r--r--spec/syntax_suggest/unit/mini_stringio_spec.rb25
-rw-r--r--spec/syntax_suggest/unit/pathname_from_message_spec.rb65
-rw-r--r--spec/syntax_suggest/unit/priority_queue_spec.rb95
-rw-r--r--spec/syntax_suggest/unit/scan_history_spec.rb114
-rw-r--r--sprintf.c1797
-rw-r--r--st.c3935
-rw-r--r--strftime.c328
-rw-r--r--string.c12804
-rw-r--r--struct.c2034
-rw-r--r--symbol.c1530
-rw-r--r--symbol.h50
-rw-r--r--symbol.rb42
-rw-r--r--template/Doxyfile.tmpl2695
-rw-r--r--template/GNUmakefile.in34
-rw-r--r--template/Makefile.in755
-rw-r--r--template/builtin_binary.rbbin.tmpl35
-rw-r--r--template/call_iseq_optimized.inc.tmpl68
-rw-r--r--template/configure-ext.mk.tmpl48
-rw-r--r--template/depend.tmpl2
-rw-r--r--template/encdb.h.tmpl36
-rw-r--r--template/extinit.c.tmpl17
-rw-r--r--template/exts.mk.tmpl191
-rw-r--r--template/fake.rb.in50
-rw-r--r--template/id.c.tmpl7
-rw-r--r--template/id.h.tmpl53
-rw-r--r--template/insns.inc.tmpl20
-rw-r--r--template/insns_info.inc.tmpl83
-rw-r--r--template/known_errors.inc.tmpl8
-rw-r--r--template/limits.c.tmpl112
-rw-r--r--template/minsns.inc.tmpl14
-rw-r--r--template/opt_sc.inc.tmpl32
-rw-r--r--template/optinsn.inc.tmpl30
-rw-r--r--template/optunifs.inc.tmpl35
-rw-r--r--template/prelude.c.tmpl219
-rwxr-xr-xtemplate/ruby-gdb.in6
-rwxr-xr-xtemplate/ruby-lldb.in6
-rw-r--r--template/ruby-runner.c.in37
-rw-r--r--template/ruby-runner.h.in7
-rw-r--r--template/ruby.pc.in23
-rw-r--r--template/sizes.c.tmpl45
-rw-r--r--template/transdb.h.tmpl32
-rw-r--r--template/unicode_norm_gen.tmpl61
-rwxr-xr-xtemplate/unicode_properties.rdoc.tmpl59
-rw-r--r--template/verconf.h.tmpl6
-rw-r--r--template/vm.inc.tmpl29
-rw-r--r--template/vmtc.inc.tmpl18
-rw-r--r--template/yasmdata.rb.tmpl20
-rw-r--r--test/-ext-/arith_seq/test_arith_seq_beg_len_step.rb52
-rw-r--r--test/-ext-/arith_seq/test_arith_seq_extract.rb40
-rw-r--r--test/-ext-/array/test_resize.rb8
-rw-r--r--test/-ext-/array/test_to_ary_concat.rb20
-rw-r--r--test/-ext-/bignum/test_big2str.rb38
-rw-r--r--test/-ext-/bignum/test_bigzero.rb18
-rw-r--r--test/-ext-/bignum/test_div.rb38
-rw-r--r--test/-ext-/bignum/test_mul.rb260
-rw-r--r--test/-ext-/bignum/test_pack.rb737
-rw-r--r--test/-ext-/bignum/test_str2big.rb52
-rw-r--r--test/-ext-/box/test_load_ext.rb97
-rw-r--r--test/-ext-/bug_reporter/test_bug_reporter.rb16
-rw-r--r--test/-ext-/debug/test_debug.rb83
-rw-r--r--test/-ext-/debug/test_profile_frames.rb138
-rw-r--r--test/-ext-/econv/test_append.rb23
-rw-r--r--test/-ext-/eval/test_eval.rb12
-rw-r--r--test/-ext-/exception/test_data_error.rb2
-rw-r--r--test/-ext-/exception/test_enc_raise.rb2
-rw-r--r--test/-ext-/exception/test_ensured.rb2
-rw-r--r--test/-ext-/exception/test_exception_at_throwing.rb18
-rw-r--r--test/-ext-/float/test_nextafter.rb13
-rw-r--r--test/-ext-/funcall/test_passing_block.rb46
-rw-r--r--test/-ext-/gvl/test_last_thread.rb6
-rw-r--r--test/-ext-/gvl/test_ubf_async_safe.rb20
-rw-r--r--test/-ext-/hash/test_delete.rb2
-rw-r--r--test/-ext-/integer/test_integer.rb26
-rw-r--r--test/-ext-/integer/test_my_integer.rb36
-rw-r--r--test/-ext-/iseq_load/test_iseq_load.rb91
-rw-r--r--test/-ext-/iter/test_yield_block.rb12
-rw-r--r--test/-ext-/load/script.rb2
-rw-r--r--test/-ext-/load/test_protect.rb14
-rw-r--r--test/-ext-/load/test_resolve_symbol.rb27
-rw-r--r--test/-ext-/load/test_stringify_symbols.rb35
-rw-r--r--test/-ext-/marshal/test_internal_ivar.rb14
-rw-r--r--test/-ext-/method/test_arity.rb4
-rw-r--r--test/-ext-/num2int/test_num2int.rb43
-rw-r--r--test/-ext-/popen_deadlock/test_popen_deadlock.rb2
-rw-r--r--test/-ext-/postponed_job/test_postponed_job.rb74
-rw-r--r--test/-ext-/proc/test_bmethod.rb4
-rw-r--r--test/-ext-/rational/test_rat.rb44
-rw-r--r--test/-ext-/required.rb10
-rw-r--r--test/-ext-/scheduler/test_interrupt_with_scheduler.rb54
-rw-r--r--test/-ext-/stack/test_stack_overflow.rb55
-rw-r--r--test/-ext-/string/test_capacity.rb66
-rw-r--r--test/-ext-/string/test_cstr.rb22
-rw-r--r--test/-ext-/string/test_ellipsize.rb2
-rw-r--r--test/-ext-/string/test_enc_associate.rb4
-rw-r--r--test/-ext-/string/test_enc_str_buf_cat.rb9
-rw-r--r--test/-ext-/string/test_external_new.rb17
-rw-r--r--test/-ext-/string/test_fstring.rb51
-rw-r--r--test/-ext-/string/test_interned_str.rb17
-rw-r--r--test/-ext-/string/test_modify_expand.rb10
-rw-r--r--test/-ext-/string/test_normalize.rb8
-rw-r--r--test/-ext-/string/test_rb_str_dup.rb18
-rw-r--r--test/-ext-/string/test_set_len.rb66
-rw-r--r--test/-ext-/string/test_too_many_dummy_encodings.rb15
-rw-r--r--test/-ext-/struct/test_data.rb18
-rw-r--r--test/-ext-/struct/test_duplicate.rb22
-rw-r--r--test/-ext-/struct/test_len.rb10
-rw-r--r--test/-ext-/struct/test_member.rb4
-rw-r--r--test/-ext-/symbol/noninterned_name.rb17
-rw-r--r--test/-ext-/symbol/test_inadvertent_creation.rb52
-rw-r--r--test/-ext-/symbol/test_type.rb22
-rw-r--r--test/-ext-/test_abi.rb55
-rw-r--r--test/-ext-/test_bug-14834.rb12
-rw-r--r--test/-ext-/test_bug-3571.rb4
-rw-r--r--test/-ext-/test_ensure_and_callcc.rb40
-rw-r--r--test/-ext-/test_enumerator_kw.rb11
-rw-r--r--test/-ext-/test_notimplement.rb31
-rw-r--r--test/-ext-/test_printf.rb17
-rw-r--r--test/-ext-/test_random.rb45
-rw-r--r--test/-ext-/test_scan_args.rb259
-rw-r--r--test/-ext-/thread/helper.rb51
-rw-r--r--test/-ext-/thread/test_instrumentation_api.rb291
-rw-r--r--test/-ext-/thread/test_lock_native_thread.rb54
-rw-r--r--test/-ext-/time/test_new.rb6
-rw-r--r--test/-ext-/tracepoint/test_tracepoint.rb37
-rw-r--r--test/-ext-/typeddata/test_typeddata.rb11
-rw-r--r--test/-ext-/vm/test_at_exit.rb19
-rw-r--r--test/-ext-/wait/test_wait.rb36
-rw-r--r--test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb46
-rw-r--r--test/-ext-/win32/test_console_attr.rb29
-rw-r--r--test/-ext-/win32/test_dln.rb14
-rw-r--r--test/.excludes-mmtk/TestArgf.rb1
-rw-r--r--test/.excludes-mmtk/TestEtc.rb1
-rw-r--r--test/.excludes-mmtk/TestGc.rb26
-rw-r--r--test/.excludes-mmtk/TestObjSpace.rb4
-rw-r--r--test/.excludes-mmtk/TestObjectSpace.rb1
-rw-r--r--test/.excludes-mmtk/TestProcess.rb4
-rw-r--r--test/.excludes-mmtk/TestTracepointObj.rb1
-rw-r--r--test/.excludes-zjit/TestResolvDNS.rb1
-rw-r--r--test/.excludes/JSONGenericObjectTest.rb4
-rw-r--r--test/.excludes/TestArray.rb1
-rw-r--r--test/.excludes/TestArraySubclass.rb1
-rw-r--r--test/.excludes/TestException.rb8
-rw-r--r--test/.excludes/TestGem.rb4
-rw-r--r--test/.excludes/TestIO_Console.rb (renamed from test/excludes/TestIO_Console.rb)0
-rw-r--r--test/.excludes/TestISeq.rb (renamed from test/excludes/TestISeq.rb)0
-rw-r--r--test/.excludes/TestPatternMatching.rb1
-rw-r--r--test/.excludes/TestThread.rb18
-rw-r--r--test/.excludes/TestThreadQueue.rb9
-rw-r--r--test/.excludes/URI/TestMailTo.rb1
-rw-r--r--test/base64/test_base64.rb115
-rw-r--r--test/benchmark/test_benchmark.rb162
-rw-r--r--test/bigdecimal/test_bigdecimal.rb1583
-rw-r--r--test/bigdecimal/test_bigdecimal_util.rb51
-rw-r--r--test/bigdecimal/test_bigmath.rb81
-rw-r--r--test/bigdecimal/testbase.rb28
-rw-r--r--test/cgi/test_cgi_cookie.rb118
-rw-r--r--test/cgi/test_cgi_core.rb303
-rw-r--r--test/cgi/test_cgi_escape.rb325
-rw-r--r--test/cgi/test_cgi_header.rb184
-rw-r--r--test/cgi/test_cgi_modruby.rb149
-rw-r--r--test/cgi/test_cgi_multipart.rb386
-rw-r--r--test/cgi/test_cgi_session.rb169
-rw-r--r--test/cgi/test_cgi_tag_helper.rb355
-rw-r--r--test/cgi/test_cgi_util.rb141
-rw-r--r--test/cgi/testdata/file1.html10
-rw-r--r--test/cgi/testdata/large.pngbin156414 -> 0 bytes
-rw-r--r--test/cgi/testdata/small.pngbin82 -> 0 bytes
-rw-r--r--test/coverage/autostart.rb2
-rw-r--r--test/coverage/main.rb1
-rw-r--r--test/coverage/test_coverage.rb1032
-rw-r--r--test/csv/base.rb9
-rw-r--r--test/csv/line_endings.gzbin59 -> 0 bytes
-rwxr-xr-xtest/csv/test_csv_parsing.rb222
-rwxr-xr-xtest/csv/test_csv_writing.rb98
-rwxr-xr-xtest/csv/test_data_converters.rb264
-rwxr-xr-xtest/csv/test_encodings.rb338
-rwxr-xr-xtest/csv/test_features.rb351
-rwxr-xr-xtest/csv/test_headers.rb298
-rwxr-xr-xtest/csv/test_interface.rb369
-rwxr-xr-xtest/csv/test_row.rb359
-rwxr-xr-xtest/csv/test_table.rb438
-rw-r--r--test/csv/ts_all.rb21
-rw-r--r--test/date/test_date.rb64
-rw-r--r--test/date/test_date_arith.rb33
-rw-r--r--test/date/test_date_attr.rb25
-rw-r--r--test/date/test_date_base.rb443
-rw-r--r--test/date/test_date_compat.rb2
-rw-r--r--test/date/test_date_conv.rb77
-rw-r--r--test/date/test_date_marshal.rb23
-rw-r--r--test/date/test_date_new.rb118
-rw-r--r--test/date/test_date_parse.rb220
-rw-r--r--test/date/test_date_ractor.rb27
-rw-r--r--test/date/test_date_strftime.rb39
-rw-r--r--test/date/test_date_strptime.rb30
-rw-r--r--test/date/test_switch_hitter.rb87
-rw-r--r--test/dbm/test_dbm.rb632
-rw-r--r--test/did_you_mean/core_ext/test_name_error_extension.rb55
-rw-r--r--test/did_you_mean/edit_distance/test_jaro_winkler.rb36
-rw-r--r--test/did_you_mean/fixtures/book.rb4
-rw-r--r--test/did_you_mean/fixtures/mini_dir.yml15
-rw-r--r--test/did_you_mean/fixtures/rspec_dir.yml112
-rw-r--r--test/did_you_mean/helper.rb43
-rw-r--r--test/did_you_mean/spell_checking/test_class_name_check.rb81
-rw-r--r--test/did_you_mean/spell_checking/test_key_name_check.rb54
-rw-r--r--test/did_you_mean/spell_checking/test_method_name_check.rb169
-rw-r--r--test/did_you_mean/spell_checking/test_pattern_key_name_check.rb20
-rw-r--r--test/did_you_mean/spell_checking/test_require_path_check.rb32
-rw-r--r--test/did_you_mean/spell_checking/test_uncorrectable_name_check.rb15
-rw-r--r--test/did_you_mean/spell_checking/test_variable_name_check.rb152
-rw-r--r--test/did_you_mean/test_ractor_compatibility.rb117
-rw-r--r--test/did_you_mean/test_spell_checker.rb78
-rw-r--r--test/did_you_mean/test_tree_spell_checker.rb170
-rw-r--r--test/did_you_mean/tree_spell/change_word.rb61
-rw-r--r--test/did_you_mean/tree_spell/human_typo.rb69
-rw-r--r--test/did_you_mean/tree_spell/test_change_word.rb38
-rw-r--r--test/did_you_mean/tree_spell/test_human_typo.rb24
-rw-r--r--test/digest/test_digest.rb25
-rw-r--r--test/digest/test_digest_extend.rb15
-rw-r--r--test/digest/test_ractor.rb101
-rw-r--r--test/drb/drbtest.rb364
-rw-r--r--test/drb/ignore_test_drb.rb14
-rw-r--r--test/drb/test_acl.rb198
-rw-r--r--test/drb/test_drb.rb358
-rw-r--r--test/drb/test_drbssl.rb77
-rw-r--r--test/drb/test_drbunix.rb60
-rw-r--r--test/drb/ut_array.rb17
-rw-r--r--test/drb/ut_array_drbssl.rb41
-rw-r--r--test/drb/ut_array_drbunix.rb17
-rw-r--r--test/drb/ut_drb.rb168
-rw-r--r--test/drb/ut_drb_drbssl.rb42
-rw-r--r--test/drb/ut_drb_drbunix.rb18
-rw-r--r--test/drb/ut_eq.rb37
-rw-r--r--test/drb/ut_eval.rb37
-rw-r--r--test/drb/ut_large.rb44
-rw-r--r--test/drb/ut_port.rb16
-rw-r--r--test/drb/ut_safe1.rb17
-rw-r--r--test/drb/ut_timerholder.rb54
-rw-r--r--test/dtrace/helper.rb130
-rw-r--r--test/dtrace/test_array_create.rb8
-rw-r--r--test/dtrace/test_function_entry.rb9
-rw-r--r--test/dtrace/test_hash_create.rb6
-rw-r--r--test/dtrace/test_method_cache.rb8
-rw-r--r--test/dtrace/test_require.rb6
-rw-r--r--test/dtrace/test_singleton_function.rb9
-rw-r--r--test/dtrace/test_string.rb6
-rw-r--r--test/erb/test_erb.rb239
-rw-r--r--test/erb/test_erb_command.rb12
-rw-r--r--test/erb/test_erb_m17n.rb2
-rw-r--r--test/error_highlight/test_error_highlight.rb1767
-rw-r--r--test/etc/test_etc.rb101
-rw-r--r--test/excludes/TestException.rb9
-rw-r--r--test/excludes/TestThread.rb2
-rw-r--r--test/fiber/autoload.rb3
-rw-r--r--test/fiber/http.rb54
-rw-r--r--test/fiber/scheduler.rb553
-rw-r--r--test/fiber/test_address_resolve.rb278
-rw-r--r--test/fiber/test_backtrace.rb22
-rw-r--r--test/fiber/test_enumerator.rb53
-rw-r--r--test/fiber/test_io.rb278
-rw-r--r--test/fiber/test_io_buffer.rb200
-rw-r--r--test/fiber/test_io_close.rb107
-rw-r--r--test/fiber/test_mutex.rb240
-rw-r--r--test/fiber/test_process.rb76
-rw-r--r--test/fiber/test_queue.rb54
-rw-r--r--test/fiber/test_ractor.rb23
-rw-r--r--test/fiber/test_scheduler.rb386
-rw-r--r--test/fiber/test_sleep.rb71
-rw-r--r--test/fiber/test_storage.rb115
-rw-r--r--test/fiber/test_thread.rb171
-rw-r--r--test/fiber/test_timeout.rb51
-rw-r--r--test/fiddle/helper.rb126
-rw-r--r--test/fiddle/test_c_struct_entry.rb77
-rw-r--r--test/fiddle/test_c_union_entity.rb35
-rw-r--r--test/fiddle/test_closure.rb85
-rw-r--r--test/fiddle/test_cparser.rb211
-rw-r--r--test/fiddle/test_fiddle.rb17
-rw-r--r--test/fiddle/test_func.rb93
-rw-r--r--test/fiddle/test_function.rb102
-rw-r--r--test/fiddle/test_handle.rb186
-rw-r--r--test/fiddle/test_import.rb151
-rw-r--r--test/fiddle/test_pointer.rb238
-rw-r--r--test/fileutils/clobber.rb7
-rw-r--r--test/fileutils/fileasserts.rb2
-rw-r--r--test/fileutils/test_dryrun.rb4
-rw-r--r--test/fileutils/test_fileutils.rb584
-rw-r--r--test/fileutils/test_nowrite.rb4
-rw-r--r--test/fileutils/test_verbose.rb4
-rw-r--r--test/fileutils/visibility_tests.rb7
-rw-r--r--test/gdbm/test_gdbm.rb728
-rw-r--r--test/io/console/test_io_console.rb377
-rw-r--r--test/io/console/test_ractor.rb42
-rw-r--r--test/io/nonblock/test_flush.rb22
-rw-r--r--test/io/wait/test_io_wait.rb96
-rw-r--r--test/io/wait/test_io_wait_uncommon.rb92
-rw-r--r--test/io/wait/test_ractor.rb21
-rw-r--r--test/irb/test_completion.rb22
-rw-r--r--test/irb/test_option.rb12
-rw-r--r--test/irb/test_raise_no_backtrace_exception.rb14
-rw-r--r--test/json/fixtures/fail1.json1
-rw-r--r--test/json/fixtures/fail15.json (renamed from test/json/fixtures/pass15.json)0
-rw-r--r--test/json/fixtures/fail16.json (renamed from test/json/fixtures/pass16.json)0
-rw-r--r--test/json/fixtures/fail17.json (renamed from test/json/fixtures/pass17.json)0
-rw-r--r--test/json/fixtures/fail26.json (renamed from test/json/fixtures/pass26.json)0
-rw-r--r--test/json/fixtures/fail29.json1
-rw-r--r--test/json/fixtures/fail30.json1
-rw-r--r--test/json/fixtures/fail31.json1
-rw-r--r--test/json/fixtures/fail32.json1
-rw-r--r--test/json/fixtures/fail4.json1
-rw-r--r--test/json/fixtures/fail9.json1
-rw-r--r--test/json/fixtures/obsolete_fail1.json1
-rw-r--r--test/json/fixtures/pass1.json2
-rw-r--r--test/json/json_addition_test.rb192
-rwxr-xr-xtest/json/json_coder_test.rb149
-rw-r--r--test/json/json_common_interface_test.rb359
-rw-r--r--test/json/json_encoding_test.rb275
-rw-r--r--test/json/json_ext_parser_test.rb71
-rw-r--r--test/json/json_fixtures_test.rb28
-rwxr-xr-xtest/json/json_generator_test.rb1079
-rw-r--r--test/json/json_generic_object_test.rb91
-rw-r--r--test/json/json_parser_test.rb859
-rw-r--r--test/json/json_ryu_fallback_test.rb169
-rw-r--r--test/json/json_string_matching_test.rb38
-rw-r--r--test/json/ractor_test.rb114
-rw-r--r--test/json/setup_variant.rb12
-rw-r--r--test/json/test_helper.rb53
-rwxr-xr-xtest/json/test_json.rb577
-rw-r--r--test/json/test_json_addition.rb197
-rw-r--r--test/json/test_json_encoding.rb66
-rw-r--r--test/json/test_json_fixtures.rb36
-rw-r--r--test/json/test_json_generate.rb361
-rw-r--r--test/json/test_json_generic_object.rb76
-rw-r--r--test/json/test_json_string_matching.rb40
-rw-r--r--test/json/test_json_unicode.rb73
-rw-r--r--test/lib/!Nothing_to_test.rb5
-rw-r--r--test/lib/envutil.rb267
-rw-r--r--test/lib/find_executable.rb22
-rw-r--r--test/lib/iseq_loader_checker.rb75
-rw-r--r--test/lib/jit_support.rb29
-rw-r--r--test/lib/leakchecker.rb201
-rw-r--r--test/lib/memory_status.rb140
-rw-r--r--test/lib/minitest/README.txt457
-rw-r--r--test/lib/minitest/autorun.rb14
-rw-r--r--test/lib/minitest/benchmark.rb418
-rw-r--r--test/lib/minitest/mock.rb196
-rw-r--r--test/lib/minitest/unit.rb1402
-rw-r--r--test/lib/parser_support.rb20
-rw-r--r--test/lib/profile_test_all.rb91
-rw-r--r--test/lib/test/unit.rb1003
-rw-r--r--test/lib/test/unit/assertions.rb844
-rw-r--r--test/lib/test/unit/parallel.rb191
-rw-r--r--test/lib/test/unit/testcase.rb36
-rw-r--r--test/lib/tracepointchecker.rb119
-rw-r--r--test/lib/with_different_ofs.rb6
-rw-r--r--test/lib/zombie_hunter.rb9
-rw-r--r--test/logger/test_logdevice.rb565
-rw-r--r--test/logger/test_logger.rb295
-rw-r--r--test/logger/test_severity.rb16
-rw-r--r--test/matrix/test_matrix.rb612
-rw-r--r--test/matrix/test_vector.rb220
-rw-r--r--test/minitest/metametameta.rb71
-rw-r--r--test/minitest/test_minitest_benchmark.rb131
-rw-r--r--test/minitest/test_minitest_mock.rb404
-rw-r--r--test/minitest/test_minitest_unit.rb1782
-rw-r--r--test/misc/test_ruby_mode.rb183
-rw-r--r--test/mkmf/base.rb239
-rw-r--r--test/mkmf/test_config.rb62
-rw-r--r--test/mkmf/test_configuration.rb39
-rw-r--r--test/mkmf/test_constant.rb60
-rw-r--r--test/mkmf/test_convertible.rb48
-rw-r--r--test/mkmf/test_egrep_cpp.rb13
-rw-r--r--test/mkmf/test_find_executable.rb81
-rw-r--r--test/mkmf/test_flags.rb92
-rw-r--r--test/mkmf/test_framework.rb70
-rw-r--r--test/mkmf/test_have_func.rb18
-rw-r--r--test/mkmf/test_have_library.rb84
-rw-r--r--test/mkmf/test_have_macro.rb46
-rw-r--r--test/mkmf/test_install.rb28
-rw-r--r--test/mkmf/test_libs.rb153
-rw-r--r--test/mkmf/test_mkmf.rb13
-rw-r--r--test/mkmf/test_pkg_config.rb71
-rw-r--r--test/mkmf/test_signedness.rb38
-rw-r--r--test/mkmf/test_sizeof.rb74
-rw-r--r--test/mmtk/helper.rb32
-rw-r--r--test/mmtk/test_configuration.rb93
-rw-r--r--test/monitor/test_monitor.rb137
-rw-r--r--test/net/fixtures/Makefile15
-rw-r--r--test/net/fixtures/cacert.pem24
-rw-r--r--test/net/fixtures/dhparams.pem29
-rw-r--r--test/net/fixtures/server.crt21
-rw-r--r--test/net/fixtures/server.key27
-rw-r--r--test/net/ftp/test_buffered_socket.rb42
-rw-r--r--test/net/ftp/test_ftp.rb1651
-rw-r--r--test/net/ftp/test_mlsx_entry.rb98
-rw-r--r--test/net/http/test_http.rb543
-rw-r--r--test/net/http/test_http_request.rb73
-rw-r--r--test/net/http/test_httpheader.rb122
-rw-r--r--test/net/http/test_httpresponse.rb361
-rw-r--r--test/net/http/test_https.rb306
-rw-r--r--test/net/http/test_https_proxy.rb51
-rw-r--r--test/net/http/utils.rb373
-rw-r--r--test/net/imap/Makefile15
-rw-r--r--test/net/imap/cacert.pem66
-rw-r--r--test/net/imap/server.crt48
-rw-r--r--test/net/imap/server.key15
-rw-r--r--test/net/imap/test_imap.rb597
-rw-r--r--test/net/imap/test_imap_response_parser.rb294
-rw-r--r--test/net/pop/test_pop.rb137
-rw-r--r--test/net/protocol/test_protocol.rb138
-rw-r--r--test/net/smtp/test_response.rb100
-rw-r--r--test/net/smtp/test_smtp.rb55
-rw-r--r--test/net/smtp/test_ssl_socket.rb92
-rw-r--r--test/nkf/test_kconv.rb82
-rw-r--r--test/nkf/test_nkf.rb23
-rw-r--r--test/objspace/test_objspace.rb886
-rw-r--r--test/objspace/test_ractor.rb83
-rw-r--r--test/open-uri/test_ftp.rb216
-rw-r--r--test/open-uri/test_open-uri.rb675
-rw-r--r--test/open-uri/test_proxy.rb174
-rw-r--r--test/open-uri/test_ssl.rb340
-rw-r--r--test/open-uri/utils.rb738
-rw-r--r--test/openssl/fixtures/pkey/dh-1.pem13
-rw-r--r--test/openssl/fixtures/pkey/dh2048_ffdhe2048.pem8
-rw-r--r--test/openssl/fixtures/pkey/dsa2048.pem15
-rw-r--r--test/openssl/fixtures/pkey/mldsa65-1.pem88
-rw-r--r--test/openssl/fixtures/pkey/mldsa65-2.pem88
-rw-r--r--test/openssl/fixtures/pkey/p256.pem5
-rw-r--r--test/openssl/fixtures/pkey/rsa-1.pem51
-rw-r--r--test/openssl/fixtures/pkey/rsa-2.pem51
-rw-r--r--test/openssl/fixtures/pkey/rsa-3.pem51
-rw-r--r--test/openssl/fixtures/pkey/rsa2048.pem27
-rw-r--r--test/openssl/test_asn1.rb890
-rw-r--r--test/openssl/test_bn.rb405
-rw-r--r--test/openssl/test_buffering.rb29
-rw-r--r--test/openssl/test_cipher.rb589
-rw-r--r--test/openssl/test_config.rb236
-rw-r--r--test/openssl/test_digest.rb173
-rw-r--r--test/openssl/test_engine.rb115
-rw-r--r--test/openssl/test_fips.rb54
-rw-r--r--test/openssl/test_hmac.rb85
-rw-r--r--test/openssl/test_kdf.rb180
-rw-r--r--test/openssl/test_ns_spki.rb21
-rw-r--r--test/openssl/test_ocsp.rb308
-rw-r--r--test/openssl/test_ossl.rb93
-rw-r--r--test/openssl/test_pair.rb512
-rw-r--r--test/openssl/test_partial_record_read.rb35
-rw-r--r--test/openssl/test_pkcs12.rb335
-rw-r--r--test/openssl/test_pkcs5.rb98
-rw-r--r--test/openssl/test_pkcs7.rb461
-rw-r--r--test/openssl/test_pkey.rb324
-rw-r--r--test/openssl/test_pkey_dh.rb253
-rw-r--r--test/openssl/test_pkey_dsa.rb378
-rw-r--r--test/openssl/test_pkey_ec.rb600
-rw-r--r--test/openssl/test_pkey_rsa.rb728
-rw-r--r--test/openssl/test_provider.rb84
-rw-r--r--test/openssl/test_random.rb18
-rw-r--r--test/openssl/test_ssl.rb2300
-rw-r--r--test/openssl/test_ssl_session.rb511
-rw-r--r--test/openssl/test_ts.rb682
-rw-r--r--test/openssl/test_x509attr.rb98
-rw-r--r--test/openssl/test_x509cert.rb436
-rw-r--r--test/openssl/test_x509crl.rb180
-rw-r--r--test/openssl/test_x509ext.rb97
-rw-r--r--test/openssl/test_x509name.rb189
-rw-r--r--test/openssl/test_x509req.rb136
-rw-r--r--test/openssl/test_x509store.rb466
-rw-r--r--test/openssl/ut_eof.rb141
-rw-r--r--test/openssl/utils.rb541
-rw-r--r--test/optparse/test_acceptable.rb25
-rw-r--r--test/optparse/test_autoconf.rb13
-rw-r--r--test/optparse/test_bash_completion.rb9
-rw-r--r--test/optparse/test_cclass.rb18
-rw-r--r--test/optparse/test_did_you_mean.rb48
-rw-r--r--test/optparse/test_getopts.rb20
-rw-r--r--test/optparse/test_kwargs.rb38
-rw-r--r--test/optparse/test_load.rb188
-rw-r--r--test/optparse/test_noarg.rb27
-rw-r--r--test/optparse/test_optarg.rb31
-rw-r--r--test/optparse/test_optparse.rb155
-rw-r--r--test/optparse/test_placearg.rb66
-rw-r--r--test/optparse/test_reqarg.rb33
-rw-r--r--test/optparse/test_summary.rb36
-rw-r--r--test/optparse/test_switch.rb50
-rw-r--r--test/optparse/test_zsh_completion.rb4
-rw-r--r--test/ostruct/test_ostruct.rb185
-rw-r--r--test/pathname/test_pathname.rb372
-rw-r--r--test/pathname/test_ractor.rb30
-rw-r--r--test/prism/api/command_line_test.rb114
-rw-r--r--test/prism/api/dump_test.rb56
-rw-r--r--test/prism/api/freeze_test.rb60
-rw-r--r--test/prism/api/lex_test.rb23
-rw-r--r--test/prism/api/parse_comments_test.rb33
-rw-r--r--test/prism/api/parse_stream_test.rb81
-rw-r--r--test/prism/api/parse_success_test.rb16
-rw-r--r--test/prism/api/parse_test.rb185
-rw-r--r--test/prism/bom_test.rb59
-rw-r--r--test/prism/encoding/encodings_test.rb91
-rw-r--r--test/prism/encoding/regular_expression_encoding_test.rb131
-rw-r--r--test/prism/encoding/string_encoding_test.rb136
-rw-r--r--test/prism/encoding/symbol_encoding_test.rb108
-rw-r--r--test/prism/errors/1_2_3.txt11
-rw-r--r--test/prism/errors/3.3-3.3/circular_parameters.txt12
-rw-r--r--test/prism/errors/3.3-3.4/leading_logical.txt34
-rw-r--r--test/prism/errors/3.3-3.4/private_endless_method.txt3
-rw-r--r--test/prism/errors/3.4/block_args_in_array_assignment.txt3
-rw-r--r--test/prism/errors/3.4/dont_allow_return_inside_sclass_body.txt3
-rw-r--r--test/prism/errors/3.4/it_with_ordinary_parameter.txt3
-rw-r--r--test/prism/errors/3.4/keyword_args_in_array_assignment.txt3
-rw-r--r--test/prism/errors/aliasing_global_variable_with_global_number_variable.txt3
-rw-r--r--test/prism/errors/aliasing_global_variable_with_non_global_variable.txt3
-rw-r--r--test/prism/errors/aliasing_non_global_variable_with_global_variable.txt3
-rw-r--r--test/prism/errors/alnum_delimiters.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_2.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_3.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_4.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_5.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_6.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_7.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_8.txt3
-rw-r--r--test/prism/errors/alnum_delimiters_9.txt3
-rw-r--r--test/prism/errors/amperand_dot_after_endless_range.txt3
-rw-r--r--test/prism/errors/argument_after_ellipsis.txt3
-rw-r--r--test/prism/errors/argument_forwarding_only_effects_its_own_internals.txt3
-rw-r--r--test/prism/errors/argument_forwarding_when_parent_is_not_forwarding.txt3
-rw-r--r--test/prism/errors/arguments_after_block.txt17
-rw-r--r--test/prism/errors/arguments_binding_power_for_and.txt5
-rw-r--r--test/prism/errors/arguments_invalid_comma.txt4
-rw-r--r--test/prism/errors/arguments_splat_after_star_star.txt3
-rw-r--r--test/prism/errors/array_invalid_comma.txt4
-rw-r--r--test/prism/errors/array_with_double_commas.txt3
-rw-r--r--test/prism/errors/assign_to_numbered_parameter.txt11
-rw-r--r--test/prism/errors/bad_arguments.txt6
-rw-r--r--test/prism/errors/begin_at_toplevel.txt3
-rw-r--r--test/prism/errors/binary_range_with_left_unary_range.txt8
-rw-r--r--test/prism/errors/block_arg_and_block.txt3
-rw-r--r--test/prism/errors/block_args_with_endless_def.txt5
-rw-r--r--test/prism/errors/block_beginning_with_brace_and_ending_with_end.txt5
-rw-r--r--test/prism/errors/break_1.txt4
-rw-r--r--test/prism/errors/break_1_2_3.txt8
-rw-r--r--test/prism/errors/call_with_block_and_write.txt4
-rw-r--r--test/prism/errors/call_with_block_operator_write.txt4
-rw-r--r--test/prism/errors/call_with_block_or_write.txt4
-rw-r--r--test/prism/errors/cannot_assign_to_a_reserved_numbered_parameter.txt14
-rw-r--r--test/prism/errors/case_without_clauses.txt4
-rw-r--r--test/prism/errors/case_without_when_clauses_errors_on_else_clause.txt5
-rw-r--r--test/prism/errors/check_value_expression.txt20
-rw-r--r--test/prism/errors/class_definition_in_method_body.txt3
-rw-r--r--test/prism/errors/class_definition_in_method_defs.txt7
-rw-r--r--test/prism/errors/class_name.txt3
-rw-r--r--test/prism/errors/command_call_in.txt5
-rw-r--r--test/prism/errors/command_calls.txt10
-rw-r--r--test/prism/errors/command_calls_10.txt3
-rw-r--r--test/prism/errors/command_calls_11.txt3
-rw-r--r--test/prism/errors/command_calls_12.txt3
-rw-r--r--test/prism/errors/command_calls_13.txt3
-rw-r--r--test/prism/errors/command_calls_14.txt3
-rw-r--r--test/prism/errors/command_calls_15.txt3
-rw-r--r--test/prism/errors/command_calls_16.txt3
-rw-r--r--test/prism/errors/command_calls_17.txt5
-rw-r--r--test/prism/errors/command_calls_18.txt3
-rw-r--r--test/prism/errors/command_calls_19.txt3
-rw-r--r--test/prism/errors/command_calls_2.txt6
-rw-r--r--test/prism/errors/command_calls_20.txt3
-rw-r--r--test/prism/errors/command_calls_21.txt5
-rw-r--r--test/prism/errors/command_calls_22.txt3
-rw-r--r--test/prism/errors/command_calls_23.txt3
-rw-r--r--test/prism/errors/command_calls_24.txt5
-rw-r--r--test/prism/errors/command_calls_25.txt8
-rw-r--r--test/prism/errors/command_calls_26.txt3
-rw-r--r--test/prism/errors/command_calls_27.txt3
-rw-r--r--test/prism/errors/command_calls_28.txt3
-rw-r--r--test/prism/errors/command_calls_29.txt3
-rw-r--r--test/prism/errors/command_calls_3.txt3
-rw-r--r--test/prism/errors/command_calls_30.txt3
-rw-r--r--test/prism/errors/command_calls_31.txt17
-rw-r--r--test/prism/errors/command_calls_32.txt19
-rw-r--r--test/prism/errors/command_calls_33.txt6
-rw-r--r--test/prism/errors/command_calls_34.txt24
-rw-r--r--test/prism/errors/command_calls_35.txt46
-rw-r--r--test/prism/errors/command_calls_4.txt3
-rw-r--r--test/prism/errors/command_calls_5.txt3
-rw-r--r--test/prism/errors/command_calls_6.txt6
-rw-r--r--test/prism/errors/command_calls_7.txt6
-rw-r--r--test/prism/errors/command_calls_8.txt6
-rw-r--r--test/prism/errors/command_calls_9.txt6
-rw-r--r--test/prism/errors/conditional_predicate_closed.txt6
-rw-r--r--test/prism/errors/constant_assignment_in_method.txt3
-rw-r--r--test/prism/errors/constant_path_with_invalid_token_after.txt4
-rw-r--r--test/prism/errors/content_after_unterminated_heredoc.txt4
-rw-r--r--test/prism/errors/cr_without_lf_in_percent_expression.txt3
-rw-r--r--test/prism/errors/def_ivar.txt3
-rw-r--r--test/prism/errors/def_with_empty_expression_receiver.txt3
-rw-r--r--test/prism/errors/def_with_expression_receiver_and_no_identifier.txt4
-rw-r--r--test/prism/errors/def_with_multiple_statements_receiver.txt10
-rw-r--r--test/prism/errors/def_with_optional_splat.txt6
-rw-r--r--test/prism/errors/defined_empty.txt3
-rw-r--r--test/prism/errors/defining_numbered_parameter.txt3
-rw-r--r--test/prism/errors/defining_numbered_parameter_2.txt3
-rw-r--r--test/prism/errors/defs_endless_method.txt12
-rw-r--r--test/prism/errors/destroy_call_operator_write_arguments.txt11
-rw-r--r--test/prism/errors/do_not_allow_characters_other_than_0_9_a_f_and_A_F_in_u_Unicode_character_notation.txt4
-rw-r--r--test/prism/errors/do_not_allow_forward_arguments_in_blocks.txt3
-rw-r--r--test/prism/errors/do_not_allow_forward_arguments_in_lambda_literals.txt3
-rw-r--r--test/prism/errors/do_not_allow_more_than_6_hexadecimal_digits_in_u_Unicode_character_notation.txt3
-rw-r--r--test/prism/errors/do_not_allow_multiple_codepoints_in_a_single_character_literal.txt3
-rw-r--r--test/prism/errors/do_not_allow_trailing_commas_in_lambda_parameters.txt3
-rw-r--r--test/prism/errors/do_not_allow_trailing_commas_in_method_parameters.txt3
-rw-r--r--test/prism/errors/dont_allow_return_inside_class_body.txt3
-rw-r--r--test/prism/errors/dont_allow_return_inside_module_body.txt3
-rw-r--r--test/prism/errors/dont_allow_setting_to_back_and_nth_reference.txt7
-rw-r--r--test/prism/errors/double_arguments_forwarding.txt4
-rw-r--r--test/prism/errors/double_scope_numbered_parameters.txt3
-rw-r--r--test/prism/errors/double_scope_repeated_numbered_parameters.txt3
-rw-r--r--test/prism/errors/double_splat_followed_by_splat_argument.txt3
-rw-r--r--test/prism/errors/double_splat_with_double_commas.txt3
-rw-r--r--test/prism/errors/duplicate_pattern_capture.txt17
-rw-r--r--test/prism/errors/duplicate_pattern_hash_key.txt4
-rw-r--r--test/prism/errors/duplicate_pattern_hash_key_2.txt3
-rw-r--r--test/prism/errors/duplicated_parameter_names.txt3
-rw-r--r--test/prism/errors/duplicated_parameter_names_2.txt3
-rw-r--r--test/prism/errors/duplicated_parameter_names_3.txt3
-rw-r--r--test/prism/errors/duplicated_parameter_names_4.txt3
-rw-r--r--test/prism/errors/duplicated_parameter_names_5.txt3
-rw-r--r--test/prism/errors/dynamic_label_pattern.txt3
-rw-r--r--test/prism/errors/ellipsis_in_no_paren_call.txt3
-rw-r--r--test/prism/errors/endless_method_command_call.txt3
-rw-r--r--test/prism/errors/endless_method_command_call_parameters.txt27
-rw-r--r--test/prism/errors/escape_unicode_curly_whitespace.txt5
-rw-r--r--test/prism/errors/for_loop_delimiter.txt3
-rw-r--r--test/prism/errors/for_loops_index_missing.txt5
-rw-r--r--test/prism/errors/for_loops_only_end.txt6
-rw-r--r--test/prism/errors/forwarding_arg_after_keyword_rest.txt3
-rw-r--r--test/prism/errors/forwarding_arg_and_block.txt3
-rw-r--r--test/prism/errors/heredoc_percent_q_newline_delimiter.txt11
-rw-r--r--test/prism/errors/heredoc_unterminated.txt9
-rw-r--r--test/prism/errors/incomplete_instance_var_string.txt4
-rw-r--r--test/prism/errors/index_call_with_block_and_write.txt5
-rw-r--r--test/prism/errors/index_call_with_block_operator_write.txt5
-rw-r--r--test/prism/errors/index_call_with_block_or_write.txt5
-rw-r--r--test/prism/errors/infix_after_label.txt6
-rw-r--r--test/prism/errors/interpolated_regular_expression_with_unknown_regexp_options.txt3
-rw-r--r--test/prism/errors/invalid_global_variable_write.txt4
-rw-r--r--test/prism/errors/invalid_hex_escape.txt3
-rw-r--r--test/prism/errors/invalid_multi_target.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_10.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_11.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_12.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_13.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_14.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_15.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_16.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_17.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_18.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_19.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_2.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_20.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_3.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_4.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_5.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_6.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_7.txt3
-rw-r--r--test/prism/errors/invalid_multi_target_8.txt4
-rw-r--r--test/prism/errors/invalid_multi_target_9.txt4
-rw-r--r--test/prism/errors/invalid_number_underscores.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_10.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_11.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_12.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_2.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_3.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_4.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_5.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_6.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_7.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_8.txt3
-rw-r--r--test/prism/errors/invalid_number_underscores_9.txt3
-rw-r--r--test/prism/errors/invalid_operator_write_dot.txt3
-rw-r--r--test/prism/errors/invalid_operator_write_fcall.txt3
-rw-r--r--test/prism/errors/invalid_splat.txt4
-rw-r--r--test/prism/errors/keywords_parameters_before_required_parameters.txt4
-rw-r--r--test/prism/errors/label_in_interpolated_string.txt14
-rw-r--r--test/prism/errors/label_in_parentheses.txt3
-rw-r--r--test/prism/errors/loop_conditional_is_closed.txt4
-rw-r--r--test/prism/errors/match_plus.txt7
-rw-r--r--test/prism/errors/match_predicate_after_and_with_dot_method_call.txt3
-rw-r--r--test/prism/errors/match_predicate_after_and_with_opreator.txt3
-rw-r--r--test/prism/errors/match_predicate_after_or_with_dot_method_call.txt3
-rw-r--r--test/prism/errors/match_predicate_after_or_with_opreator.txt3
-rw-r--r--test/prism/errors/match_predicate_after_rescue_with_dot_method_call.txt3
-rw-r--r--test/prism/errors/match_predicate_after_rescue_with_opreator.txt3
-rw-r--r--test/prism/errors/match_required_after_and_with_dot_method_call.txt3
-rw-r--r--test/prism/errors/match_required_after_and_with_opreator.txt3
-rw-r--r--test/prism/errors/match_required_after_or_with_dot_method_call.txt3
-rw-r--r--test/prism/errors/match_required_after_or_with_opreator.txt3
-rw-r--r--test/prism/errors/match_required_after_rescue_with_dot_method_call.txt3
-rw-r--r--test/prism/errors/match_required_after_rescue_with_opreator.txt3
-rw-r--r--test/prism/errors/method_parameters_after_arguments_forwarding.txt4
-rw-r--r--test/prism/errors/method_parameters_after_block.txt4
-rw-r--r--test/prism/errors/method_with_arguments_after_anonymous_block.txt4
-rw-r--r--test/prism/errors/missing_terminator_in_parentheses.txt3
-rw-r--r--test/prism/errors/module_definition_in_method_body.txt3
-rw-r--r--test/prism/errors/module_definition_in_method_body_within_block.txt7
-rw-r--r--test/prism/errors/module_definition_in_method_defs.txt7
-rw-r--r--test/prism/errors/module_name_recoverable.txt4
-rw-r--r--test/prism/errors/multi_target_parens.txt19
-rw-r--r--test/prism/errors/multi_target_star.txt17
-rw-r--r--test/prism/errors/multiple_error_in_parameters_order.txt5
-rw-r--r--test/prism/errors/next_1.txt4
-rw-r--r--test/prism/errors/next_1_2_3.txt8
-rw-r--r--test/prism/errors/non_assoc_equality.txt25
-rw-r--r--test/prism/errors/non_assoc_range.txt5
-rw-r--r--test/prism/errors/numbered_and_write.txt3
-rw-r--r--test/prism/errors/numbered_operator_write.txt3
-rw-r--r--test/prism/errors/numbered_or_write.txt3
-rw-r--r--test/prism/errors/numbered_parameters_in_block_arguments.txt3
-rw-r--r--test/prism/errors/optional_block_parameters_with_unary_operator.txt3
-rw-r--r--test/prism/errors/optional_block_parameters_with_unary_operator_2.txt3
-rw-r--r--test/prism/errors/optional_block_parameters_with_unary_operator_3.txt3
-rw-r--r--test/prism/errors/optional_block_parameters_with_unary_operator_4.txt3
-rw-r--r--test/prism/errors/parameter_name_ending_with_bang_or_question_mark.txt4
-rw-r--r--test/prism/errors/parameters_invalid_comma.txt4
-rw-r--r--test/prism/errors/pattern-capture-in-alt-array.txt4
-rw-r--r--test/prism/errors/pattern-capture-in-alt-hash.txt3
-rw-r--r--test/prism/errors/pattern-capture-in-alt-name.txt3
-rw-r--r--test/prism/errors/pattern-capture-in-alt-top.txt4
-rw-r--r--test/prism/errors/pattern_arithmetic_expressions.txt3
-rw-r--r--test/prism/errors/pattern_match_implicit_rest.txt3
-rw-r--r--test/prism/errors/pattern_string_key.txt8
-rw-r--r--test/prism/errors/pre_execution_context.txt4
-rw-r--r--test/prism/errors/pre_execution_missing_brace.txt3
-rw-r--r--test/prism/errors/range_and_bin_op.txt5
-rw-r--r--test/prism/errors/range_and_bin_op_2.txt5
-rw-r--r--test/prism/errors/range_and_bin_op_3.txt3
-rw-r--r--test/prism/errors/range_and_bin_op_4.txt5
-rw-r--r--test/prism/errors/range_and_bin_op_5.txt6
-rw-r--r--test/prism/errors/range_and_bin_op_6.txt3
-rw-r--r--test/prism/errors/range_and_bin_op_7.txt3
-rw-r--r--test/prism/errors/range_and_bin_op_8.txt4
-rw-r--r--test/prism/errors/range_doubled.txt3
-rw-r--r--test/prism/errors/rational_number_with_exponential_portion.txt4
-rw-r--r--test/prism/errors/regexp_unicode_too_short.txt4
-rw-r--r--test/prism/errors/regular_expression_with_unknown_regexp_options.txt3
-rw-r--r--test/prism/errors/repeated_parameter_name_in_destructured_params.txt3
-rw-r--r--test/prism/errors/rest_keywords_parameters_before_required_parameters.txt4
-rw-r--r--test/prism/errors/return_1.txt3
-rw-r--r--test/prism/errors/return_1_2_3.txt7
-rw-r--r--test/prism/errors/returning_to_optional_parameters_multiple_times.txt4
-rw-r--r--test/prism/errors/semicolon_after_inheritance_operator.txt3
-rw-r--r--test/prism/errors/setter_method_cannot_be_defined_in_an_endless_method_definition.txt6
-rw-r--r--test/prism/errors/shadow_args_in_block.txt3
-rw-r--r--test/prism/errors/shadow_args_in_lambda.txt5
-rw-r--r--test/prism/errors/singleton_class_delimiter.txt3
-rw-r--r--test/prism/errors/singleton_method_for_literals.txt39
-rw-r--r--test/prism/errors/splat_argument_after_keyword_argument.txt3
-rw-r--r--test/prism/errors/statement_at_non_statement.txt9
-rw-r--r--test/prism/errors/statement_operators.txt25
-rw-r--r--test/prism/errors/switching_to_named_arguments_twice.txt5
-rw-r--r--test/prism/errors/switching_to_optional_arguments_twice.txt5
-rw-r--r--test/prism/errors/symbol_in_hash.txt3
-rw-r--r--test/prism/errors/symbol_in_keyword_parameter.txt3
-rw-r--r--test/prism/errors/targeting_numbered_parameter.txt3
-rw-r--r--test/prism/errors/top_level_constant_starting_with_downcased_identifier.txt4
-rw-r--r--test/prism/errors/top_level_constant_with_downcased_identifier.txt4
-rw-r--r--test/prism/errors/trailing_comma_after_block.txt3
-rw-r--r--test/prism/errors/trailing_comma_in_calls.txt3
-rw-r--r--test/prism/errors/unexpected_block.txt3
-rw-r--r--test/prism/errors/unterminated_W_list.txt3
-rw-r--r--test/prism/errors/unterminated_argument_expression.txt5
-rw-r--r--test/prism/errors/unterminated_begin.txt4
-rw-r--r--test/prism/errors/unterminated_begin_upcase.txt4
-rw-r--r--test/prism/errors/unterminated_block.txt4
-rw-r--r--test/prism/errors/unterminated_block_do_end.txt4
-rw-r--r--test/prism/errors/unterminated_class.txt4
-rw-r--r--test/prism/errors/unterminated_def.txt5
-rw-r--r--test/prism/errors/unterminated_embdoc.txt3
-rw-r--r--test/prism/errors/unterminated_embdoc_2.txt3
-rw-r--r--test/prism/errors/unterminated_empty_string.txt3
-rw-r--r--test/prism/errors/unterminated_end_upcase.txt4
-rw-r--r--test/prism/errors/unterminated_for.txt5
-rw-r--r--test/prism/errors/unterminated_global_variable.txt3
-rw-r--r--test/prism/errors/unterminated_global_variable_2.txt3
-rw-r--r--test/prism/errors/unterminated_i_list.txt3
-rw-r--r--test/prism/errors/unterminated_if.txt5
-rw-r--r--test/prism/errors/unterminated_if_else.txt5
-rw-r--r--test/prism/errors/unterminated_interpolated_string.txt3
-rw-r--r--test/prism/errors/unterminated_interpolated_symbol.txt3
-rw-r--r--test/prism/errors/unterminated_lambda_brace.txt4
-rw-r--r--test/prism/errors/unterminated_method_parameters.txt3
-rw-r--r--test/prism/errors/unterminated_module.txt4
-rw-r--r--test/prism/errors/unterminated_parenthesized_expression.txt4
-rw-r--r--test/prism/errors/unterminated_pattern_bracket.txt7
-rw-r--r--test/prism/errors/unterminated_pattern_paren.txt7
-rw-r--r--test/prism/errors/unterminated_regular_expression.txt3
-rw-r--r--test/prism/errors/unterminated_regular_expression_with_heredoc.txt4
-rw-r--r--test/prism/errors/unterminated_s_symbol.txt3
-rw-r--r--test/prism/errors/unterminated_string.txt3
-rw-r--r--test/prism/errors/unterminated_unicode_brackets_should_be_a_syntax_error.txt3
-rw-r--r--test/prism/errors/unterminated_until.txt5
-rw-r--r--test/prism/errors/unterminated_xstring.txt3
-rw-r--r--test/prism/errors/void_value_expression_in_arguments.txt17
-rw-r--r--test/prism/errors/void_value_expression_in_array.txt15
-rw-r--r--test/prism/errors/void_value_expression_in_assignment.txt9
-rw-r--r--test/prism/errors/void_value_expression_in_begin_statement.txt21
-rw-r--r--test/prism/errors/void_value_expression_in_binary_call.txt11
-rw-r--r--test/prism/errors/void_value_expression_in_call.txt11
-rw-r--r--test/prism/errors/void_value_expression_in_constant_path.txt5
-rw-r--r--test/prism/errors/void_value_expression_in_def.txt10
-rw-r--r--test/prism/errors/void_value_expression_in_expression.txt19
-rw-r--r--test/prism/errors/void_value_expression_in_hash.txt9
-rw-r--r--test/prism/errors/void_value_expression_in_modifier.txt13
-rw-r--r--test/prism/errors/void_value_expression_in_statement.txt26
-rw-r--r--test/prism/errors/void_value_expression_in_unary_call.txt5
-rw-r--r--test/prism/errors/while_endless_method.txt5
-rw-r--r--test/prism/errors/writing_numbered_parameter.txt3
-rw-r--r--test/prism/errors/xstring_concat.txt5
-rw-r--r--test/prism/errors_test.rb106
-rw-r--r--test/prism/fixtures/3.3-3.3/block_args_in_array_assignment.txt1
-rw-r--r--test/prism/fixtures/3.3-3.3/it.txt5
-rw-r--r--test/prism/fixtures/3.3-3.3/it_indirect_writes.txt23
-rw-r--r--test/prism/fixtures/3.3-3.3/it_read_and_assignment.txt1
-rw-r--r--test/prism/fixtures/3.3-3.3/it_with_ordinary_parameter.txt1
-rw-r--r--test/prism/fixtures/3.3-3.3/keyword_args_in_array_assignment.txt1
-rw-r--r--test/prism/fixtures/3.3-3.3/return_in_sclass.txt1
-rw-r--r--test/prism/fixtures/3.4/circular_parameters.txt4
-rw-r--r--test/prism/fixtures/3.4/it.txt5
-rw-r--r--test/prism/fixtures/3.4/it_indirect_writes.txt23
-rw-r--r--test/prism/fixtures/3.4/it_read_and_assignment.txt1
-rw-r--r--test/prism/fixtures/4.0/endless_methods_command_call.txt8
-rw-r--r--test/prism/fixtures/4.0/leading_logical.txt21
-rw-r--r--test/prism/fixtures/__END__.txt3
-rw-r--r--test/prism/fixtures/alias.txt23
-rw-r--r--test/prism/fixtures/arithmetic.txt13
-rw-r--r--test/prism/fixtures/arrays.txt122
-rw-r--r--test/prism/fixtures/begin_ensure.txt21
-rw-r--r--test/prism/fixtures/begin_rescue.txt85
-rw-r--r--test/prism/fixtures/blocks.txt54
-rw-r--r--test/prism/fixtures/boolean_operators.txt5
-rw-r--r--test/prism/fixtures/booleans.txt3
-rw-r--r--test/prism/fixtures/break.txt33
-rw-r--r--test/prism/fixtures/case.txt55
-rw-r--r--test/prism/fixtures/case_in_hash_key.txt6
-rw-r--r--test/prism/fixtures/character_literal.txt2
-rw-r--r--test/prism/fixtures/classes.txt35
-rw-r--r--test/prism/fixtures/command_method_call.txt41
-rw-r--r--test/prism/fixtures/command_method_call_2.txt3
-rw-r--r--test/prism/fixtures/command_method_call_3.txt19
-rw-r--r--test/prism/fixtures/comment_single.txt1
-rw-r--r--test/prism/fixtures/comments.txt24
-rw-r--r--test/prism/fixtures/constants.txt184
-rw-r--r--test/prism/fixtures/dash_heredocs.txt63
-rw-r--r--test/prism/fixtures/defined.txt19
-rw-r--r--test/prism/fixtures/dos_endings.txt20
-rw-r--r--test/prism/fixtures/dstring.txt42
-rw-r--r--test/prism/fixtures/dsym_str.txt5
-rw-r--r--test/prism/fixtures/embdoc_no_newline_at_end.txt2
-rw-r--r--test/prism/fixtures/emoji_method_calls.txt1
-rw-r--r--test/prism/fixtures/encoding_binary.txt9
-rw-r--r--test/prism/fixtures/encoding_euc_jp.txt6
-rw-r--r--test/prism/fixtures/endless_method_as_default_arg.txt11
-rw-r--r--test/prism/fixtures/endless_methods.txt7
-rw-r--r--test/prism/fixtures/endless_range_in_conditional.txt3
-rw-r--r--test/prism/fixtures/for.txt19
-rw-r--r--test/prism/fixtures/global_variables.txt93
-rw-r--r--test/prism/fixtures/hashes.txt28
-rw-r--r--test/prism/fixtures/heredoc.txt2
-rw-r--r--test/prism/fixtures/heredoc_percent_q_newline_delimiter.txt22
-rw-r--r--test/prism/fixtures/heredoc_with_carriage_returns.txt2
-rw-r--r--test/prism/fixtures/heredoc_with_comment.txt3
-rw-r--r--test/prism/fixtures/heredoc_with_escaped_newline_at_start.txt7
-rw-r--r--test/prism/fixtures/heredoc_with_trailing_newline.txt2
-rw-r--r--test/prism/fixtures/heredocs_leading_whitespace.txt29
-rw-r--r--test/prism/fixtures/heredocs_nested.txt22
-rw-r--r--test/prism/fixtures/heredocs_with_fake_newlines.txt55
-rw-r--r--test/prism/fixtures/heredocs_with_ignored_newlines.txt14
-rw-r--r--test/prism/fixtures/heredocs_with_ignored_newlines_and_non_empty.txt4
-rw-r--r--test/prism/fixtures/if.txt42
-rw-r--r--test/prism/fixtures/indented_file_end.txt4
-rw-r--r--test/prism/fixtures/integer_operations.txt63
-rw-r--r--test/prism/fixtures/it_assignment.txt1
-rw-r--r--test/prism/fixtures/keyword_method_names.txt20
-rw-r--r--test/prism/fixtures/keywords.txt11
-rw-r--r--test/prism/fixtures/lambda.txt27
-rw-r--r--test/prism/fixtures/method_calls.txt156
-rw-r--r--test/prism/fixtures/methods.txt190
-rw-r--r--test/prism/fixtures/modules.txt18
-rw-r--r--test/prism/fixtures/multi_write.txt4
-rw-r--r--test/prism/fixtures/newline_terminated.txtbin0 -> 212 bytes
-rw-r--r--test/prism/fixtures/next.txt28
-rw-r--r--test/prism/fixtures/nils.txt13
-rw-r--r--test/prism/fixtures/non_alphanumeric_methods.txt105
-rw-r--r--test/prism/fixtures/not.txt37
-rw-r--r--test/prism/fixtures/numbers.txt67
-rw-r--r--test/prism/fixtures/patterns.txt224
-rw-r--r--test/prism/fixtures/procs.txt27
-rw-r--r--test/prism/fixtures/range_begin_open_exclusive.txt1
-rw-r--r--test/prism/fixtures/range_begin_open_inclusive.txt1
-rw-r--r--test/prism/fixtures/range_beginless.txt5
-rw-r--r--test/prism/fixtures/range_end_open_exclusive.txt1
-rw-r--r--test/prism/fixtures/range_end_open_inclusive.txt1
-rw-r--r--test/prism/fixtures/ranges.txt51
-rw-r--r--test/prism/fixtures/regex.txt58
-rw-r--r--test/prism/fixtures/regex_char_width.txt3
-rw-r--r--test/prism/fixtures/regex_escape_encoding.txt3
-rw-r--r--test/prism/fixtures/regex_with_fake_newlines.txt41
-rw-r--r--test/prism/fixtures/repeat_parameters.txt38
-rw-r--r--test/prism/fixtures/rescue.txt39
-rw-r--r--test/prism/fixtures/rescue_modifier.txt7
-rw-r--r--test/prism/fixtures/return.txt27
-rw-r--r--test/prism/fixtures/seattlerb/BEGIN.txt1
-rw-r--r--test/prism/fixtures/seattlerb/README.rdoc113
-rw-r--r--test/prism/fixtures/seattlerb/TestRubyParserShared.txt92
-rw-r--r--test/prism/fixtures/seattlerb/__ENCODING__.txt1
-rw-r--r--test/prism/fixtures/seattlerb/alias_gvar_backref.txt1
-rw-r--r--test/prism/fixtures/seattlerb/alias_resword.txt1
-rw-r--r--test/prism/fixtures/seattlerb/and_multi.txt3
-rw-r--r--test/prism/fixtures/seattlerb/aref_args_assocs.txt1
-rw-r--r--test/prism/fixtures/seattlerb/aref_args_lit_assocs.txt1
-rw-r--r--test/prism/fixtures/seattlerb/args_kw_block.txt1
-rw-r--r--test/prism/fixtures/seattlerb/array_line_breaks.txt4
-rw-r--r--test/prism/fixtures/seattlerb/array_lits_trailing_calls.txt3
-rw-r--r--test/prism/fixtures/seattlerb/assoc__bare.txt1
-rw-r--r--test/prism/fixtures/seattlerb/assoc_label.txt1
-rw-r--r--test/prism/fixtures/seattlerb/attr_asgn_colon_id.txt1
-rw-r--r--test/prism/fixtures/seattlerb/attrasgn_array_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/attrasgn_array_lhs.txt1
-rw-r--r--test/prism/fixtures/seattlerb/attrasgn_primary_dot_constant.txt1
-rw-r--r--test/prism/fixtures/seattlerb/backticks_interpolation_line.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bang_eq.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bdot2.txt3
-rw-r--r--test/prism/fixtures/seattlerb/bdot3.txt3
-rw-r--r--test/prism/fixtures/seattlerb/begin_ensure_no_bodies.txt3
-rw-r--r--test/prism/fixtures/seattlerb/begin_rescue_else_ensure_bodies.txt9
-rw-r--r--test/prism/fixtures/seattlerb/begin_rescue_else_ensure_no_bodies.txt9
-rw-r--r--test/prism/fixtures/seattlerb/begin_rescue_ensure_no_bodies.txt4
-rw-r--r--test/prism/fixtures/seattlerb/block_arg__bare.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_arg_kwsplat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_arg_opt_arg_block.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_arg_opt_splat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_arg_opt_splat_arg_block_omfg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_arg_optional.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_arg_scope.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_arg_scope2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_arg_splat_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_args_kwargs.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_args_no_kwargs.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_args_opt1.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_args_opt2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_args_opt2_2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_args_opt3.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_call_defn_call_block_call.txt4
-rw-r--r--test/prism/fixtures/seattlerb/block_call_dot_op2_brace_block.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_call_dot_op2_cmd_args_do_block.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_call_operation_colon.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_call_operation_dot.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_call_paren_call_block_call.txt2
-rw-r--r--test/prism/fixtures/seattlerb/block_command_operation_colon.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_command_operation_dot.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_decomp_anon_splat_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_decomp_arg_splat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_decomp_arg_splat_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_decomp_splat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_kw.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_kw__required.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_kwarg_lvar.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_kwarg_lvar_multiple.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_opt_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_opt_splat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_opt_splat_arg_block_omfg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_optarg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_paren_splat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_reg_optarg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_return.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_scope.txt1
-rw-r--r--test/prism/fixtures/seattlerb/block_splat_reg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug169.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug179.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug190.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug191.txt3
-rw-r--r--test/prism/fixtures/seattlerb/bug202.txt2
-rw-r--r--test/prism/fixtures/seattlerb/bug236.txt3
-rw-r--r--test/prism/fixtures/seattlerb/bug290.txt3
-rw-r--r--test/prism/fixtures/seattlerb/bug_187.txt3
-rw-r--r--test/prism/fixtures/seattlerb/bug_215.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_249.txt4
-rw-r--r--test/prism/fixtures/seattlerb/bug_and.txt4
-rw-r--r--test/prism/fixtures/seattlerb/bug_args__19.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_args_masgn.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_args_masgn2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_args_masgn_outer_parens__19.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_call_arglist_parens.txt11
-rw-r--r--test/prism/fixtures/seattlerb/bug_case_when_regexp.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_comma.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_cond_pct.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_hash_args.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_hash_args_trailing_comma.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_hash_interp_array.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_masgn_right.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_not_parens.txt1
-rw-r--r--test/prism/fixtures/seattlerb/bug_op_asgn_rescue.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_and.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_arg_assoc.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_arg_assoc_kwsplat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_arg_kwsplat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_args_assoc_quoted.txt5
-rw-r--r--test/prism/fixtures/seattlerb/call_args_assoc_trailing_comma.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_args_command.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_array_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_array_block_call.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_array_lambda_block_call.txt2
-rw-r--r--test/prism/fixtures/seattlerb/call_array_lit_inline_hash.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_assoc.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_assoc_new.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_assoc_new_if_multiline.txt5
-rw-r--r--test/prism/fixtures/seattlerb/call_assoc_trailing_comma.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_bang_command_call.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_bang_squiggle.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_begin_call_block_call.txt3
-rw-r--r--test/prism/fixtures/seattlerb/call_block_arg_named.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_carat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_colon2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_colon_parens.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_div.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_dot_parens.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_env.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_eq3.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_gt.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_kwsplat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_leading_dots.txt3
-rw-r--r--test/prism/fixtures/seattlerb/call_leading_dots_comment.txt4
-rw-r--r--test/prism/fixtures/seattlerb/call_lt.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_lte.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_not.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_pipe.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_rshift.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_self_brackets.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_spaceship.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_stabby_do_end_with_block.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_stabby_with_braces_block.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_star.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_star2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_trailing_comma.txt1
-rw-r--r--test/prism/fixtures/seattlerb/call_trailing_dots.txt3
-rw-r--r--test/prism/fixtures/seattlerb/call_unary_bang.txt1
-rw-r--r--test/prism/fixtures/seattlerb/case_in.txt111
-rw-r--r--test/prism/fixtures/seattlerb/case_in_31.txt4
-rw-r--r--test/prism/fixtures/seattlerb/case_in_37.txt4
-rw-r--r--test/prism/fixtures/seattlerb/case_in_42.txt3
-rw-r--r--test/prism/fixtures/seattlerb/case_in_42_2.txt3
-rw-r--r--test/prism/fixtures/seattlerb/case_in_47.txt4
-rw-r--r--test/prism/fixtures/seattlerb/case_in_67.txt3
-rw-r--r--test/prism/fixtures/seattlerb/case_in_86.txt3
-rw-r--r--test/prism/fixtures/seattlerb/case_in_86_2.txt3
-rw-r--r--test/prism/fixtures/seattlerb/case_in_array_pat_const.txt4
-rw-r--r--test/prism/fixtures/seattlerb/case_in_array_pat_const2.txt4
-rw-r--r--test/prism/fixtures/seattlerb/case_in_array_pat_paren_assign.txt4
-rw-r--r--test/prism/fixtures/seattlerb/case_in_const.txt4
-rw-r--r--test/prism/fixtures/seattlerb/case_in_else.txt7
-rw-r--r--test/prism/fixtures/seattlerb/case_in_find.txt3
-rw-r--r--test/prism/fixtures/seattlerb/case_in_find_array.txt3
-rw-r--r--test/prism/fixtures/seattlerb/case_in_hash_pat.txt5
-rw-r--r--test/prism/fixtures/seattlerb/case_in_hash_pat_assign.txt4
-rw-r--r--test/prism/fixtures/seattlerb/case_in_hash_pat_paren_assign.txt4
-rw-r--r--test/prism/fixtures/seattlerb/case_in_hash_pat_paren_true.txt5
-rw-r--r--test/prism/fixtures/seattlerb/case_in_hash_pat_rest.txt3
-rw-r--r--test/prism/fixtures/seattlerb/case_in_hash_pat_rest_solo.txt3
-rw-r--r--test/prism/fixtures/seattlerb/case_in_if_unless_post_mod.txt6
-rw-r--r--test/prism/fixtures/seattlerb/case_in_multiple.txt6
-rw-r--r--test/prism/fixtures/seattlerb/case_in_or.txt5
-rw-r--r--test/prism/fixtures/seattlerb/class_comments.txt9
-rw-r--r--test/prism/fixtures/seattlerb/cond_unary_minus.txt1
-rw-r--r--test/prism/fixtures/seattlerb/const_2_op_asgn_or2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/const_3_op_asgn_or.txt1
-rw-r--r--test/prism/fixtures/seattlerb/const_op_asgn_and1.txt1
-rw-r--r--test/prism/fixtures/seattlerb/const_op_asgn_and2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/const_op_asgn_or.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defined_eh_parens.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_arg_asplat_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_arg_forward_args.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_args_forward_args.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_comments.txt5
-rw-r--r--test/prism/fixtures/seattlerb/defn_endless_command.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_endless_command_rescue.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_forward_args.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_forward_args__no_parens.txt3
-rw-r--r--test/prism/fixtures/seattlerb/defn_kwarg_env.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_kwarg_kwarg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_kwarg_kwsplat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_kwarg_kwsplat_anon.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_kwarg_lvar.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_kwarg_no_parens.txt2
-rw-r--r--test/prism/fixtures/seattlerb/defn_kwarg_val.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_no_kwargs.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_oneliner.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_oneliner_eq2.txt3
-rw-r--r--test/prism/fixtures/seattlerb/defn_oneliner_noargs.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_oneliner_noargs_parentheses.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_oneliner_rescue.txt13
-rw-r--r--test/prism/fixtures/seattlerb/defn_opt_last_arg.txt2
-rw-r--r--test/prism/fixtures/seattlerb/defn_opt_reg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_opt_splat_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_powarg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_reg_opt_reg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_splat_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defn_unary_not.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defns_reserved.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defs_as_arg_with_do_block_inside.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defs_comments.txt5
-rw-r--r--test/prism/fixtures/seattlerb/defs_endless_command.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defs_endless_command_rescue.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defs_kwarg.txt2
-rw-r--r--test/prism/fixtures/seattlerb/defs_oneliner.txt1
-rw-r--r--test/prism/fixtures/seattlerb/defs_oneliner_eq2.txt3
-rw-r--r--test/prism/fixtures/seattlerb/defs_oneliner_rescue.txt13
-rw-r--r--test/prism/fixtures/seattlerb/difficult0_.txt4
-rw-r--r--test/prism/fixtures/seattlerb/difficult1_line_numbers.txt13
-rw-r--r--test/prism/fixtures/seattlerb/difficult1_line_numbers2.txt8
-rw-r--r--test/prism/fixtures/seattlerb/difficult2_.txt2
-rw-r--r--test/prism/fixtures/seattlerb/difficult3_.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult3_2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult3_3.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult3_4.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult3_5.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult3__10.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult3__11.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult3__12.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult3__6.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult3__7.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult3__8.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult3__9.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult4__leading_dots.txt2
-rw-r--r--test/prism/fixtures/seattlerb/difficult4__leading_dots2.txt2
-rw-r--r--test/prism/fixtures/seattlerb/difficult6_.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult6__7.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult6__8.txt1
-rw-r--r--test/prism/fixtures/seattlerb/difficult7_.txt5
-rw-r--r--test/prism/fixtures/seattlerb/do_bug.txt4
-rw-r--r--test/prism/fixtures/seattlerb/do_lambda.txt1
-rw-r--r--test/prism/fixtures/seattlerb/dot2_nil__26.txt1
-rw-r--r--test/prism/fixtures/seattlerb/dot3_nil__26.txt1
-rw-r--r--test/prism/fixtures/seattlerb/dstr_evstr.txt1
-rw-r--r--test/prism/fixtures/seattlerb/dstr_evstr_empty_end.txt1
-rw-r--r--test/prism/fixtures/seattlerb/dstr_lex_state.txt1
-rw-r--r--test/prism/fixtures/seattlerb/dstr_str.txt1
-rw-r--r--test/prism/fixtures/seattlerb/dsym_esc_to_sym.txt1
-rw-r--r--test/prism/fixtures/seattlerb/dsym_to_sym.txt3
-rw-r--r--test/prism/fixtures/seattlerb/eq_begin_line_numbers.txt6
-rw-r--r--test/prism/fixtures/seattlerb/eq_begin_why_wont_people_use_their_spacebar.txt3
-rw-r--r--test/prism/fixtures/seattlerb/evstr_evstr.txt1
-rw-r--r--test/prism/fixtures/seattlerb/evstr_str.txt1
-rw-r--r--test/prism/fixtures/seattlerb/expr_not_bang.txt1
-rw-r--r--test/prism/fixtures/seattlerb/f_kw.txt1
-rw-r--r--test/prism/fixtures/seattlerb/f_kw__required.txt1
-rw-r--r--test/prism/fixtures/seattlerb/flip2_env_lvar.txt1
-rw-r--r--test/prism/fixtures/seattlerb/float_with_if_modifier.txt1
-rw-r--r--test/prism/fixtures/seattlerb/heredoc__backslash_dos_format.txt5
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_backslash_nl.txt8
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_bad_hex_escape.txt3
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_bad_oct_escape.txt5
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_comma_arg.txt7
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_lineno.txt7
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_nested.txt7
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_squiggly.txt7
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_squiggly_blank_line_plus_interpolation.txt4
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_squiggly_blank_lines.txt7
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_squiggly_empty.txt2
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_squiggly_interp.txt5
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_squiggly_no_indent.txt3
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_squiggly_tabs.txt6
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_squiggly_tabs_extra.txt6
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_squiggly_visually_blank_lines.txt7
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_trailing_slash_continued_call.txt4
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_unicode.txt4
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_with_carriage_return_escapes.txt5
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_with_carriage_return_escapes_windows.txt5
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_with_extra_carriage_horrible_mix.txt4
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_with_extra_carriage_returns.txt5
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_with_extra_carriage_returns_windows.txt5
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_with_interpolation_and_carriage_return_escapes.txt4
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_with_interpolation_and_carriage_return_escapes_windows.txt4
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_with_not_global_interpolation.txt3
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_with_only_carriage_returns.txt6
-rw-r--r--test/prism/fixtures/seattlerb/heredoc_with_only_carriage_returns_windows.txt6
-rw-r--r--test/prism/fixtures/seattlerb/if_elsif.txt1
-rw-r--r--test/prism/fixtures/seattlerb/if_symbol.txt1
-rw-r--r--test/prism/fixtures/seattlerb/in_expr_no_case.txt1
-rw-r--r--test/prism/fixtures/seattlerb/index_0.txt1
-rw-r--r--test/prism/fixtures/seattlerb/index_0_opasgn.txt1
-rw-r--r--test/prism/fixtures/seattlerb/integer_with_if_modifier.txt1
-rw-r--r--test/prism/fixtures/seattlerb/interpolated_symbol_array_line_breaks.txt5
-rw-r--r--test/prism/fixtures/seattlerb/interpolated_word_array_line_breaks.txt5
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_1.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_10_1.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_10_2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_11_1.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_11_2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_2__19.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_3.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_4.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_5.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_6.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_7_1.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_7_2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_8_1.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_8_2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_9_1.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_args_9_2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_kwarg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/iter_kwarg_kwsplat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/label_vs_string.txt2
-rw-r--r--test/prism/fixtures/seattlerb/lambda_do_vs_brace.txt7
-rw-r--r--test/prism/fixtures/seattlerb/lasgn_arg_rescue_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/lasgn_call_bracket_rescue_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/lasgn_call_nobracket_rescue_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/lasgn_command.txt1
-rw-r--r--test/prism/fixtures/seattlerb/lasgn_env.txt1
-rw-r--r--test/prism/fixtures/seattlerb/lasgn_ivar_env.txt1
-rw-r--r--test/prism/fixtures/seattlerb/lasgn_lasgn_command_call.txt1
-rw-r--r--test/prism/fixtures/seattlerb/lasgn_middle_splat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/magic_encoding_comment.txt4
-rw-r--r--test/prism/fixtures/seattlerb/masgn_anon_splat_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_arg_colon_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_arg_ident.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_arg_splat_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_colon2.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_colon3.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_command_call.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_double_paren.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_lhs_splat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_paren.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_splat_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_splat_arg_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_star.txt1
-rw-r--r--test/prism/fixtures/seattlerb/masgn_var_star_var.txt1
-rw-r--r--test/prism/fixtures/seattlerb/messy_op_asgn_lineno.txt1
-rw-r--r--test/prism/fixtures/seattlerb/method_call_assoc_trailing_comma.txt1
-rw-r--r--test/prism/fixtures/seattlerb/method_call_trailing_comma.txt1
-rw-r--r--test/prism/fixtures/seattlerb/mlhs_back_anonsplat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/mlhs_back_splat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/mlhs_front_anonsplat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/mlhs_front_splat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/mlhs_keyword.txt1
-rw-r--r--test/prism/fixtures/seattlerb/mlhs_mid_anonsplat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/mlhs_mid_splat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/mlhs_rescue.txt1
-rw-r--r--test/prism/fixtures/seattlerb/module_comments.txt10
-rw-r--r--test/prism/fixtures/seattlerb/multiline_hash_declaration.txt8
-rw-r--r--test/prism/fixtures/seattlerb/non_interpolated_symbol_array_line_breaks.txt5
-rw-r--r--test/prism/fixtures/seattlerb/non_interpolated_word_array_line_breaks.txt5
-rw-r--r--test/prism/fixtures/seattlerb/op_asgn_command_call.txt1
-rw-r--r--test/prism/fixtures/seattlerb/op_asgn_dot_ident_command_call.txt1
-rw-r--r--test/prism/fixtures/seattlerb/op_asgn_index_command_call.txt1
-rw-r--r--test/prism/fixtures/seattlerb/op_asgn_primary_colon_const_command_call.txt1
-rw-r--r--test/prism/fixtures/seattlerb/op_asgn_primary_colon_identifier1.txt1
-rw-r--r--test/prism/fixtures/seattlerb/op_asgn_primary_colon_identifier_command_call.txt1
-rw-r--r--test/prism/fixtures/seattlerb/op_asgn_val_dot_ident_command_call.txt1
-rw-r--r--test/prism/fixtures/seattlerb/parse_def_special_name.txt1
-rw-r--r--test/prism/fixtures/seattlerb/parse_if_not_canonical.txt2
-rw-r--r--test/prism/fixtures/seattlerb/parse_if_not_noncanonical.txt2
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_block.txt2
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_block_inline_comment.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_block_inline_comment_leading_newlines.txt7
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_block_inline_multiline_comment.txt4
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_call_ivar_arg_no_parens_line_break.txt2
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_call_ivar_line_break_paren.txt2
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_call_no_args.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_defn_complex.txt5
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_defn_no_parens.txt6
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_defn_no_parens_args.txt2
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_dot2.txt5
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_dot2_open.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_dot3.txt5
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_dot3_open.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_dstr_escaped_newline.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_dstr_soft_newline.txt4
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_evstr_after_break.txt2
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_hash_lit.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_heredoc.txt5
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_heredoc_evstr.txt4
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_heredoc_hardnewline.txt7
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_heredoc_regexp_chars.txt5
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_iter_call_no_parens.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_iter_call_parens.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_multiline_str.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_multiline_str_literal_n.txt2
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_newlines.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_op_asgn.txt4
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_postexe.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_preexe.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_rescue.txt8
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_return.txt6
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_str_with_newline_escape.txt1
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_to_ary.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_line_trailing_newlines.txt2
-rw-r--r--test/prism/fixtures/seattlerb/parse_opt_call_args_assocs_comma.txt1
-rw-r--r--test/prism/fixtures/seattlerb/parse_opt_call_args_lit_comma.txt1
-rw-r--r--test/prism/fixtures/seattlerb/parse_pattern_019.txt5
-rw-r--r--test/prism/fixtures/seattlerb/parse_pattern_044.txt5
-rw-r--r--test/prism/fixtures/seattlerb/parse_pattern_051.txt5
-rw-r--r--test/prism/fixtures/seattlerb/parse_pattern_058.txt5
-rw-r--r--test/prism/fixtures/seattlerb/parse_pattern_058_2.txt5
-rw-r--r--test/prism/fixtures/seattlerb/parse_pattern_069.txt5
-rw-r--r--test/prism/fixtures/seattlerb/parse_pattern_076.txt5
-rw-r--r--test/prism/fixtures/seattlerb/parse_until_not_canonical.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_until_not_noncanonical.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_while_not_canonical.txt3
-rw-r--r--test/prism/fixtures/seattlerb/parse_while_not_noncanonical.txt3
-rw-r--r--test/prism/fixtures/seattlerb/pctW_lineno.txt5
-rw-r--r--test/prism/fixtures/seattlerb/pct_Q_backslash_nl.txt2
-rw-r--r--test/prism/fixtures/seattlerb/pct_nl.txt3
-rw-r--r--test/prism/fixtures/seattlerb/pct_w_heredoc_interp_nested.txt4
-rw-r--r--test/prism/fixtures/seattlerb/pipe_semicolon.txt1
-rw-r--r--test/prism/fixtures/seattlerb/pipe_space.txt1
-rw-r--r--test/prism/fixtures/seattlerb/qWords_space.txt1
-rw-r--r--test/prism/fixtures/seattlerb/qsymbols.txt1
-rw-r--r--test/prism/fixtures/seattlerb/qsymbols_empty.txt1
-rw-r--r--test/prism/fixtures/seattlerb/qsymbols_empty_space.txt1
-rw-r--r--test/prism/fixtures/seattlerb/qsymbols_interp.txt1
-rw-r--r--test/prism/fixtures/seattlerb/quoted_symbol_hash_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/quoted_symbol_keys.txt1
-rw-r--r--test/prism/fixtures/seattlerb/qw_escape.txt1
-rw-r--r--test/prism/fixtures/seattlerb/qw_escape_term.txt1
-rw-r--r--test/prism/fixtures/seattlerb/qwords_empty.txt1
-rw-r--r--test/prism/fixtures/seattlerb/read_escape_unicode_curlies.txt1
-rw-r--r--test/prism/fixtures/seattlerb/read_escape_unicode_h4.txt1
-rw-r--r--test/prism/fixtures/seattlerb/regexp.txt9
-rw-r--r--test/prism/fixtures/seattlerb/regexp_esc_C_slash.txt1
-rw-r--r--test/prism/fixtures/seattlerb/regexp_esc_u.txt1
-rw-r--r--test/prism/fixtures/seattlerb/regexp_escape_extended.txt1
-rw-r--r--test/prism/fixtures/seattlerb/regexp_unicode_curlies.txt3
-rw-r--r--test/prism/fixtures/seattlerb/required_kwarg_no_value.txt2
-rw-r--r--test/prism/fixtures/seattlerb/rescue_do_end_ensure_result.txt5
-rw-r--r--test/prism/fixtures/seattlerb/rescue_do_end_no_raise.txt9
-rw-r--r--test/prism/fixtures/seattlerb/rescue_do_end_raised.txt5
-rw-r--r--test/prism/fixtures/seattlerb/rescue_do_end_rescued.txt9
-rw-r--r--test/prism/fixtures/seattlerb/rescue_in_block.txt4
-rw-r--r--test/prism/fixtures/seattlerb/rescue_parens.txt1
-rw-r--r--test/prism/fixtures/seattlerb/return_call_assocs.txt11
-rw-r--r--test/prism/fixtures/seattlerb/rhs_asgn.txt1
-rw-r--r--test/prism/fixtures/seattlerb/ruby21_numbers.txt1
-rw-r--r--test/prism/fixtures/seattlerb/safe_attrasgn.txt1
-rw-r--r--test/prism/fixtures/seattlerb/safe_attrasgn_constant.txt1
-rw-r--r--test/prism/fixtures/seattlerb/safe_call.txt1
-rw-r--r--test/prism/fixtures/seattlerb/safe_call_after_newline.txt2
-rw-r--r--test/prism/fixtures/seattlerb/safe_call_dot_parens.txt1
-rw-r--r--test/prism/fixtures/seattlerb/safe_call_newline.txt2
-rw-r--r--test/prism/fixtures/seattlerb/safe_call_operator.txt1
-rw-r--r--test/prism/fixtures/seattlerb/safe_call_rhs_newline.txt2
-rw-r--r--test/prism/fixtures/seattlerb/safe_calls.txt1
-rw-r--r--test/prism/fixtures/seattlerb/safe_op_asgn.txt1
-rw-r--r--test/prism/fixtures/seattlerb/safe_op_asgn2.txt2
-rw-r--r--test/prism/fixtures/seattlerb/slashy_newlines_within_string.txt7
-rw-r--r--test/prism/fixtures/seattlerb/stabby_arg_no_paren.txt1
-rw-r--r--test/prism/fixtures/seattlerb/stabby_arg_opt_splat_arg_block_omfg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/stabby_block_iter_call.txt4
-rw-r--r--test/prism/fixtures/seattlerb/stabby_block_iter_call_no_target_with_arg.txt4
-rw-r--r--test/prism/fixtures/seattlerb/stabby_block_kw.txt1
-rw-r--r--test/prism/fixtures/seattlerb/stabby_block_kw__required.txt1
-rw-r--r--test/prism/fixtures/seattlerb/stabby_proc_scope.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_backslashes.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_double_double_escaped_newline.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_double_escaped_newline.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_double_newline.txt2
-rw-r--r--test/prism/fixtures/seattlerb/str_evstr.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_evstr_escape.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_heredoc_interp.txt5
-rw-r--r--test/prism/fixtures/seattlerb/str_interp_ternary_or_label.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_lit_concat_bad_encodings.txt2
-rw-r--r--test/prism/fixtures/seattlerb/str_newline_hash_line_number.txt2
-rw-r--r--test/prism/fixtures/seattlerb/str_pct_Q_nested.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_pct_nested_nested.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_pct_q.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_single_double_escaped_newline.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_single_escaped_newline.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_single_newline.txt2
-rw-r--r--test/prism/fixtures/seattlerb/str_str.txt1
-rw-r--r--test/prism/fixtures/seattlerb/str_str_str.txt1
-rw-r--r--test/prism/fixtures/seattlerb/super_arg.txt1
-rw-r--r--test/prism/fixtures/seattlerb/symbol_empty.txt1
-rw-r--r--test/prism/fixtures/seattlerb/symbol_list.txt1
-rw-r--r--test/prism/fixtures/seattlerb/symbols.txt1
-rw-r--r--test/prism/fixtures/seattlerb/symbols_empty.txt1
-rw-r--r--test/prism/fixtures/seattlerb/symbols_empty_space.txt1
-rw-r--r--test/prism/fixtures/seattlerb/symbols_interp.txt1
-rw-r--r--test/prism/fixtures/seattlerb/thingy.txt3
-rw-r--r--test/prism/fixtures/seattlerb/uminus_float.txt1
-rw-r--r--test/prism/fixtures/seattlerb/unary_minus.txt1
-rw-r--r--test/prism/fixtures/seattlerb/unary_plus.txt1
-rw-r--r--test/prism/fixtures/seattlerb/unary_plus_on_literal.txt1
-rw-r--r--test/prism/fixtures/seattlerb/unary_tilde.txt1
-rw-r--r--test/prism/fixtures/seattlerb/utf8_bom.txt3
-rw-r--r--test/prism/fixtures/seattlerb/when_splat.txt1
-rw-r--r--test/prism/fixtures/seattlerb/words_interp.txt1
-rw-r--r--test/prism/fixtures/single_method_call_with_bang.txt1
-rw-r--r--test/prism/fixtures/single_quote_heredocs.txt3
-rw-r--r--test/prism/fixtures/spanning_heredoc.txt63
-rw-r--r--test/prism/fixtures/spanning_heredoc_newlines.txt23
-rw-r--r--test/prism/fixtures/string_concatination_frozen_false.txt5
-rw-r--r--test/prism/fixtures/string_concatination_frozen_true.txt5
-rw-r--r--test/prism/fixtures/strings.txt185
-rw-r--r--test/prism/fixtures/super.txt17
-rw-r--r--test/prism/fixtures/symbols.txt104
-rw-r--r--test/prism/fixtures/ternary_operator.txt15
-rw-r--r--test/prism/fixtures/tilde_heredocs.txt97
-rw-r--r--test/prism/fixtures/unary_method_calls.txt2
-rw-r--r--test/prism/fixtures/undef.txt17
-rw-r--r--test/prism/fixtures/unescaping.txt9
-rw-r--r--test/prism/fixtures/unless.txt14
-rw-r--r--test/prism/fixtures/unparser/LICENSE20
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/alias.txt2
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/assignment.txt53
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/block.txt96
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/case.txt37
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/class.txt35
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/def.txt134
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/defined.txt3
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/defs.txt40
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/dstr.txt37
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/empty.txt0
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/empty_begin.txt1
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/flipflop.txt10
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/for.txt12
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/hookexe.txt7
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/if.txt36
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/kwbegin.txt80
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/lambda.txt13
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/literal.txt91
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/module.txt16
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/opasgn.txt24
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/pattern.txt41
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/pragma.txt4
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/range.txt4
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/rescue.txt3
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/send.txt84
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/since/27.txt4
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/since/30.txt4
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/since/31.txt7
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/since/32.txt11
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/singletons.txt4
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/super.txt21
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/unary.txt9
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/undef.txt2
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/variables.txt10
-rw-r--r--test/prism/fixtures/unparser/corpus/literal/while.txt73
-rw-r--r--test/prism/fixtures/unparser/corpus/semantic/and.txt8
-rw-r--r--test/prism/fixtures/unparser/corpus/semantic/block.txt26
-rw-r--r--test/prism/fixtures/unparser/corpus/semantic/def.txt7
-rw-r--r--test/prism/fixtures/unparser/corpus/semantic/dstr.txt127
-rw-r--r--test/prism/fixtures/unparser/corpus/semantic/kwbegin.txt42
-rw-r--r--test/prism/fixtures/unparser/corpus/semantic/literal.txt14
-rw-r--r--test/prism/fixtures/unparser/corpus/semantic/opasgn.txt1
-rw-r--r--test/prism/fixtures/unparser/corpus/semantic/send.txt6
-rw-r--r--test/prism/fixtures/unparser/corpus/semantic/undef.txt2
-rw-r--r--test/prism/fixtures/unparser/corpus/semantic/while.txt25
-rw-r--r--test/prism/fixtures/until.txt13
-rw-r--r--test/prism/fixtures/variables.txt49
-rw-r--r--test/prism/fixtures/while.txt23
-rw-r--r--test/prism/fixtures/whitequark/LICENSE26
-rw-r--r--test/prism/fixtures/whitequark/__ENCODING__.txt1
-rw-r--r--test/prism/fixtures/whitequark/__ENCODING___legacy_.txt1
-rw-r--r--test/prism/fixtures/whitequark/alias.txt1
-rw-r--r--test/prism/fixtures/whitequark/alias_gvar.txt3
-rw-r--r--test/prism/fixtures/whitequark/ambiuous_quoted_label_in_ternary_operator.txt1
-rw-r--r--test/prism/fixtures/whitequark/and.txt3
-rw-r--r--test/prism/fixtures/whitequark/and_asgn.txt3
-rw-r--r--test/prism/fixtures/whitequark/and_or_masgn.txt3
-rw-r--r--test/prism/fixtures/whitequark/anonymous_blockarg.txt1
-rw-r--r--test/prism/fixtures/whitequark/arg.txt3
-rw-r--r--test/prism/fixtures/whitequark/arg_combinations.txt29
-rw-r--r--test/prism/fixtures/whitequark/arg_duplicate_ignored.txt3
-rw-r--r--test/prism/fixtures/whitequark/arg_label.txt6
-rw-r--r--test/prism/fixtures/whitequark/arg_scope.txt1
-rw-r--r--test/prism/fixtures/whitequark/args.txt63
-rw-r--r--test/prism/fixtures/whitequark/args_args_assocs.txt3
-rw-r--r--test/prism/fixtures/whitequark/args_args_assocs_comma.txt1
-rw-r--r--test/prism/fixtures/whitequark/args_args_comma.txt1
-rw-r--r--test/prism/fixtures/whitequark/args_args_star.txt3
-rw-r--r--test/prism/fixtures/whitequark/args_assocs_comma.txt1
-rw-r--r--test/prism/fixtures/whitequark/args_block_pass.txt1
-rw-r--r--test/prism/fixtures/whitequark/args_cmd.txt1
-rw-r--r--test/prism/fixtures/whitequark/args_star.txt3
-rw-r--r--test/prism/fixtures/whitequark/array_assocs.txt3
-rw-r--r--test/prism/fixtures/whitequark/array_plain.txt1
-rw-r--r--test/prism/fixtures/whitequark/array_splat.txt5
-rw-r--r--test/prism/fixtures/whitequark/array_symbols.txt1
-rw-r--r--test/prism/fixtures/whitequark/array_symbols_empty.txt3
-rw-r--r--test/prism/fixtures/whitequark/array_symbols_interp.txt3
-rw-r--r--test/prism/fixtures/whitequark/array_words.txt1
-rw-r--r--test/prism/fixtures/whitequark/array_words_empty.txt3
-rw-r--r--test/prism/fixtures/whitequark/array_words_interp.txt3
-rw-r--r--test/prism/fixtures/whitequark/asgn_cmd.txt3
-rw-r--r--test/prism/fixtures/whitequark/asgn_mrhs.txt5
-rw-r--r--test/prism/fixtures/whitequark/back_ref.txt1
-rw-r--r--test/prism/fixtures/whitequark/bang.txt1
-rw-r--r--test/prism/fixtures/whitequark/bang_cmd.txt1
-rw-r--r--test/prism/fixtures/whitequark/begin_cmdarg.txt1
-rw-r--r--test/prism/fixtures/whitequark/beginless_erange_after_newline.txt2
-rw-r--r--test/prism/fixtures/whitequark/beginless_irange_after_newline.txt2
-rw-r--r--test/prism/fixtures/whitequark/beginless_range.txt3
-rw-r--r--test/prism/fixtures/whitequark/block_arg_combinations.txt57
-rw-r--r--test/prism/fixtures/whitequark/block_kwarg.txt1
-rw-r--r--test/prism/fixtures/whitequark/block_kwarg_combinations.txt5
-rw-r--r--test/prism/fixtures/whitequark/blockarg.txt1
-rw-r--r--test/prism/fixtures/whitequark/blockargs.txt71
-rw-r--r--test/prism/fixtures/whitequark/bug_435.txt1
-rw-r--r--test/prism/fixtures/whitequark/bug_447.txt3
-rw-r--r--test/prism/fixtures/whitequark/bug_452.txt1
-rw-r--r--test/prism/fixtures/whitequark/bug_466.txt1
-rw-r--r--test/prism/fixtures/whitequark/bug_473.txt1
-rw-r--r--test/prism/fixtures/whitequark/bug_480.txt1
-rw-r--r--test/prism/fixtures/whitequark/bug_481.txt1
-rw-r--r--test/prism/fixtures/whitequark/bug_ascii_8bit_in_literal.txt2
-rw-r--r--test/prism/fixtures/whitequark/bug_cmd_string_lookahead.txt1
-rw-r--r--test/prism/fixtures/whitequark/bug_cmdarg.txt5
-rw-r--r--test/prism/fixtures/whitequark/bug_def_no_paren_eql_begin.txt4
-rw-r--r--test/prism/fixtures/whitequark/bug_do_block_in_call_args.txt1
-rw-r--r--test/prism/fixtures/whitequark/bug_do_block_in_cmdarg.txt1
-rw-r--r--test/prism/fixtures/whitequark/bug_do_block_in_hash_brace.txt9
-rw-r--r--test/prism/fixtures/whitequark/bug_heredoc_do.txt3
-rw-r--r--test/prism/fixtures/whitequark/bug_interp_single.txt3
-rw-r--r--test/prism/fixtures/whitequark/bug_lambda_leakage.txt1
-rw-r--r--test/prism/fixtures/whitequark/bug_regex_verification.txt1
-rw-r--r--test/prism/fixtures/whitequark/bug_rescue_empty_else.txt1
-rw-r--r--test/prism/fixtures/whitequark/bug_while_not_parens_do.txt1
-rw-r--r--test/prism/fixtures/whitequark/case_cond.txt1
-rw-r--r--test/prism/fixtures/whitequark/case_cond_else.txt1
-rw-r--r--test/prism/fixtures/whitequark/case_expr.txt1
-rw-r--r--test/prism/fixtures/whitequark/case_expr_else.txt1
-rw-r--r--test/prism/fixtures/whitequark/casgn_scoped.txt1
-rw-r--r--test/prism/fixtures/whitequark/casgn_toplevel.txt1
-rw-r--r--test/prism/fixtures/whitequark/casgn_unscoped.txt1
-rw-r--r--test/prism/fixtures/whitequark/character.txt1
-rw-r--r--test/prism/fixtures/whitequark/class.txt3
-rw-r--r--test/prism/fixtures/whitequark/class_super.txt1
-rw-r--r--test/prism/fixtures/whitequark/class_super_label.txt1
-rw-r--r--test/prism/fixtures/whitequark/comments_before_leading_dot__27.txt19
-rw-r--r--test/prism/fixtures/whitequark/complex.txt7
-rw-r--r--test/prism/fixtures/whitequark/cond_begin.txt1
-rw-r--r--test/prism/fixtures/whitequark/cond_begin_masgn.txt1
-rw-r--r--test/prism/fixtures/whitequark/cond_eflipflop.txt3
-rw-r--r--test/prism/fixtures/whitequark/cond_eflipflop_with_beginless_range.txt1
-rw-r--r--test/prism/fixtures/whitequark/cond_eflipflop_with_endless_range.txt1
-rw-r--r--test/prism/fixtures/whitequark/cond_iflipflop.txt3
-rw-r--r--test/prism/fixtures/whitequark/cond_iflipflop_with_beginless_range.txt1
-rw-r--r--test/prism/fixtures/whitequark/cond_iflipflop_with_endless_range.txt1
-rw-r--r--test/prism/fixtures/whitequark/cond_match_current_line.txt3
-rw-r--r--test/prism/fixtures/whitequark/const_op_asgn.txt9
-rw-r--r--test/prism/fixtures/whitequark/const_scoped.txt1
-rw-r--r--test/prism/fixtures/whitequark/const_toplevel.txt1
-rw-r--r--test/prism/fixtures/whitequark/const_unscoped.txt1
-rw-r--r--test/prism/fixtures/whitequark/cpath.txt3
-rw-r--r--test/prism/fixtures/whitequark/cvar.txt1
-rw-r--r--test/prism/fixtures/whitequark/cvasgn.txt1
-rw-r--r--test/prism/fixtures/whitequark/dedenting_heredoc.txt75
-rw-r--r--test/prism/fixtures/whitequark/dedenting_interpolating_heredoc_fake_line_continuation.txt4
-rw-r--r--test/prism/fixtures/whitequark/dedenting_non_interpolating_heredoc_line_continuation.txt4
-rw-r--r--test/prism/fixtures/whitequark/def.txt11
-rw-r--r--test/prism/fixtures/whitequark/defined.txt5
-rw-r--r--test/prism/fixtures/whitequark/defs.txt9
-rw-r--r--test/prism/fixtures/whitequark/emit_arg_inside_procarg0_legacy.txt1
-rw-r--r--test/prism/fixtures/whitequark/empty_stmt.txt1
-rw-r--r--test/prism/fixtures/whitequark/endless_comparison_method.txt11
-rw-r--r--test/prism/fixtures/whitequark/endless_method.txt7
-rw-r--r--test/prism/fixtures/whitequark/endless_method_command_syntax.txt15
-rw-r--r--test/prism/fixtures/whitequark/endless_method_forwarded_args_legacy.txt1
-rw-r--r--test/prism/fixtures/whitequark/endless_method_with_rescue_mod.txt3
-rw-r--r--test/prism/fixtures/whitequark/endless_method_without_args.txt7
-rw-r--r--test/prism/fixtures/whitequark/ensure.txt1
-rw-r--r--test/prism/fixtures/whitequark/ensure_empty.txt1
-rw-r--r--test/prism/fixtures/whitequark/false.txt1
-rw-r--r--test/prism/fixtures/whitequark/find_pattern.txt7
-rw-r--r--test/prism/fixtures/whitequark/float.txt3
-rw-r--r--test/prism/fixtures/whitequark/for.txt3
-rw-r--r--test/prism/fixtures/whitequark/for_mlhs.txt1
-rw-r--r--test/prism/fixtures/whitequark/forward_arg.txt1
-rw-r--r--test/prism/fixtures/whitequark/forward_arg_with_open_args.txt27
-rw-r--r--test/prism/fixtures/whitequark/forward_args_legacy.txt5
-rw-r--r--test/prism/fixtures/whitequark/forwarded_argument_with_kwrestarg.txt1
-rw-r--r--test/prism/fixtures/whitequark/forwarded_argument_with_restarg.txt1
-rw-r--r--test/prism/fixtures/whitequark/forwarded_kwrestarg.txt1
-rw-r--r--test/prism/fixtures/whitequark/forwarded_kwrestarg_with_additional_kwarg.txt1
-rw-r--r--test/prism/fixtures/whitequark/forwarded_restarg.txt1
-rw-r--r--test/prism/fixtures/whitequark/gvar.txt1
-rw-r--r--test/prism/fixtures/whitequark/gvasgn.txt1
-rw-r--r--test/prism/fixtures/whitequark/hash_empty.txt1
-rw-r--r--test/prism/fixtures/whitequark/hash_hashrocket.txt3
-rw-r--r--test/prism/fixtures/whitequark/hash_kwsplat.txt1
-rw-r--r--test/prism/fixtures/whitequark/hash_label.txt1
-rw-r--r--test/prism/fixtures/whitequark/hash_label_end.txt5
-rw-r--r--test/prism/fixtures/whitequark/hash_pair_value_omission.txt5
-rw-r--r--test/prism/fixtures/whitequark/heredoc.txt14
-rw-r--r--test/prism/fixtures/whitequark/if.txt3
-rw-r--r--test/prism/fixtures/whitequark/if_else.txt3
-rw-r--r--test/prism/fixtures/whitequark/if_elsif.txt1
-rw-r--r--test/prism/fixtures/whitequark/if_masgn__24.txt1
-rw-r--r--test/prism/fixtures/whitequark/if_mod.txt1
-rw-r--r--test/prism/fixtures/whitequark/if_nl_then.txt2
-rw-r--r--test/prism/fixtures/whitequark/int.txt5
-rw-r--r--test/prism/fixtures/whitequark/int___LINE__.txt1
-rw-r--r--test/prism/fixtures/whitequark/interp_digit_var.txt87
-rw-r--r--test/prism/fixtures/whitequark/ivar.txt1
-rw-r--r--test/prism/fixtures/whitequark/ivasgn.txt1
-rw-r--r--test/prism/fixtures/whitequark/keyword_argument_omission.txt1
-rw-r--r--test/prism/fixtures/whitequark/kwarg.txt1
-rw-r--r--test/prism/fixtures/whitequark/kwarg_combinations.txt7
-rw-r--r--test/prism/fixtures/whitequark/kwarg_no_paren.txt5
-rw-r--r--test/prism/fixtures/whitequark/kwbegin_compstmt.txt1
-rw-r--r--test/prism/fixtures/whitequark/kwnilarg.txt5
-rw-r--r--test/prism/fixtures/whitequark/kwoptarg.txt1
-rw-r--r--test/prism/fixtures/whitequark/kwoptarg_with_kwrestarg_and_forwarded_args.txt1
-rw-r--r--test/prism/fixtures/whitequark/kwrestarg_named.txt1
-rw-r--r--test/prism/fixtures/whitequark/kwrestarg_unnamed.txt1
-rw-r--r--test/prism/fixtures/whitequark/lbrace_arg_after_command_args.txt1
-rw-r--r--test/prism/fixtures/whitequark/lparenarg_after_lvar__since_25.txt3
-rw-r--r--test/prism/fixtures/whitequark/lvar.txt1
-rw-r--r--test/prism/fixtures/whitequark/lvar_injecting_match.txt3
-rw-r--r--test/prism/fixtures/whitequark/lvasgn.txt1
-rw-r--r--test/prism/fixtures/whitequark/marg_combinations.txt19
-rw-r--r--test/prism/fixtures/whitequark/masgn.txt5
-rw-r--r--test/prism/fixtures/whitequark/masgn_attr.txt5
-rw-r--r--test/prism/fixtures/whitequark/masgn_cmd.txt1
-rw-r--r--test/prism/fixtures/whitequark/masgn_const.txt3
-rw-r--r--test/prism/fixtures/whitequark/masgn_nested.txt3
-rw-r--r--test/prism/fixtures/whitequark/masgn_splat.txt19
-rw-r--r--test/prism/fixtures/whitequark/method_definition_in_while_cond.txt7
-rw-r--r--test/prism/fixtures/whitequark/module.txt1
-rw-r--r--test/prism/fixtures/whitequark/multiple_args_with_trailing_comma.txt1
-rw-r--r--test/prism/fixtures/whitequark/multiple_pattern_matches.txt5
-rw-r--r--test/prism/fixtures/whitequark/newline_in_hash_argument.txt14
-rw-r--r--test/prism/fixtures/whitequark/nil.txt1
-rw-r--r--test/prism/fixtures/whitequark/nil_expression.txt3
-rw-r--r--test/prism/fixtures/whitequark/non_lvar_injecting_match.txt1
-rw-r--r--test/prism/fixtures/whitequark/not.txt5
-rw-r--r--test/prism/fixtures/whitequark/not_cmd.txt1
-rw-r--r--test/prism/fixtures/whitequark/not_masgn__24.txt1
-rw-r--r--test/prism/fixtures/whitequark/nth_ref.txt1
-rw-r--r--test/prism/fixtures/whitequark/numbered_args_after_27.txt7
-rw-r--r--test/prism/fixtures/whitequark/numparam_outside_block.txt9
-rw-r--r--test/prism/fixtures/whitequark/numparam_ruby_bug_19025.txt1
-rw-r--r--test/prism/fixtures/whitequark/op_asgn.txt5
-rw-r--r--test/prism/fixtures/whitequark/op_asgn_cmd.txt7
-rw-r--r--test/prism/fixtures/whitequark/op_asgn_index.txt1
-rw-r--r--test/prism/fixtures/whitequark/op_asgn_index_cmd.txt1
-rw-r--r--test/prism/fixtures/whitequark/optarg.txt3
-rw-r--r--test/prism/fixtures/whitequark/or.txt3
-rw-r--r--test/prism/fixtures/whitequark/or_asgn.txt3
-rw-r--r--test/prism/fixtures/whitequark/parser_bug_272.txt1
-rw-r--r--test/prism/fixtures/whitequark/parser_bug_490.txt5
-rw-r--r--test/prism/fixtures/whitequark/parser_bug_507.txt1
-rw-r--r--test/prism/fixtures/whitequark/parser_bug_518.txt2
-rw-r--r--test/prism/fixtures/whitequark/parser_bug_525.txt1
-rw-r--r--test/prism/fixtures/whitequark/parser_bug_604.txt1
-rw-r--r--test/prism/fixtures/whitequark/parser_bug_640.txt4
-rw-r--r--test/prism/fixtures/whitequark/parser_bug_645.txt1
-rw-r--r--test/prism/fixtures/whitequark/parser_bug_830.txt1
-rw-r--r--test/prism/fixtures/whitequark/parser_bug_989.txt3
-rw-r--r--test/prism/fixtures/whitequark/parser_drops_truncated_parts_of_squiggly_heredoc.txt3
-rw-r--r--test/prism/fixtures/whitequark/parser_slash_slash_n_escaping_in_literals.txt62
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching__FILE__LINE_literals.txt4
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_blank_else.txt1
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_const_pattern.txt11
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_constants.txt5
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_else.txt1
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_explicit_array_match.txt19
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_expr_in_paren.txt1
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_hash.txt48
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_if_unless_modifiers.txt3
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_implicit_array_match.txt15
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_keyword_variable.txt1
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_lambda.txt1
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_match_alt.txt1
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_match_as.txt1
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_nil_pattern.txt1
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_no_body.txt1
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_ranges.txt11
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_single_line.txt3
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_single_line_allowed_omission_of_parentheses.txt11
-rw-r--r--test/prism/fixtures/whitequark/pattern_matching_single_match.txt1
-rw-r--r--test/prism/fixtures/whitequark/pin_expr.txt14
-rw-r--r--test/prism/fixtures/whitequark/postexe.txt1
-rw-r--r--test/prism/fixtures/whitequark/preexe.txt1
-rw-r--r--test/prism/fixtures/whitequark/procarg0.txt3
-rw-r--r--test/prism/fixtures/whitequark/procarg0_legacy.txt1
-rw-r--r--test/prism/fixtures/whitequark/range_exclusive.txt1
-rw-r--r--test/prism/fixtures/whitequark/range_inclusive.txt1
-rw-r--r--test/prism/fixtures/whitequark/rational.txt3
-rw-r--r--test/prism/fixtures/whitequark/regex_interp.txt1
-rw-r--r--test/prism/fixtures/whitequark/regex_plain.txt1
-rw-r--r--test/prism/fixtures/whitequark/resbody_list.txt1
-rw-r--r--test/prism/fixtures/whitequark/resbody_list_mrhs.txt1
-rw-r--r--test/prism/fixtures/whitequark/resbody_list_var.txt1
-rw-r--r--test/prism/fixtures/whitequark/resbody_var.txt3
-rw-r--r--test/prism/fixtures/whitequark/rescue.txt1
-rw-r--r--test/prism/fixtures/whitequark/rescue_else.txt1
-rw-r--r--test/prism/fixtures/whitequark/rescue_else_ensure.txt1
-rw-r--r--test/prism/fixtures/whitequark/rescue_ensure.txt1
-rw-r--r--test/prism/fixtures/whitequark/rescue_in_lambda_block.txt1
-rw-r--r--test/prism/fixtures/whitequark/rescue_mod.txt1
-rw-r--r--test/prism/fixtures/whitequark/rescue_mod_asgn.txt1
-rw-r--r--test/prism/fixtures/whitequark/rescue_mod_masgn.txt1
-rw-r--r--test/prism/fixtures/whitequark/rescue_mod_op_assign.txt1
-rw-r--r--test/prism/fixtures/whitequark/rescue_without_begin_end.txt1
-rw-r--r--test/prism/fixtures/whitequark/restarg_named.txt1
-rw-r--r--test/prism/fixtures/whitequark/restarg_unnamed.txt1
-rw-r--r--test/prism/fixtures/whitequark/return.txt7
-rw-r--r--test/prism/fixtures/whitequark/return_block.txt1
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_10279.txt1
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_10653.txt5
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_11107.txt1
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_11380.txt1
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_11873.txt23
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_11873_a.txt39
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_11873_b.txt1
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_11989.txt3
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_11990.txt3
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_12073.txt3
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_12402.txt27
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_12669.txt7
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_12686.txt1
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_13547.txt1
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_14690.txt1
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_15789.txt3
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_18878.txt1
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_19281.txt7
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_19539.txt9
-rw-r--r--test/prism/fixtures/whitequark/ruby_bug_9669.txt8
-rw-r--r--test/prism/fixtures/whitequark/sclass.txt1
-rw-r--r--test/prism/fixtures/whitequark/self.txt1
-rw-r--r--test/prism/fixtures/whitequark/send_attr_asgn.txt7
-rw-r--r--test/prism/fixtures/whitequark/send_attr_asgn_conditional.txt1
-rw-r--r--test/prism/fixtures/whitequark/send_binary_op.txt41
-rw-r--r--test/prism/fixtures/whitequark/send_block_chain_cmd.txt13
-rw-r--r--test/prism/fixtures/whitequark/send_block_conditional.txt1
-rw-r--r--test/prism/fixtures/whitequark/send_call.txt3
-rw-r--r--test/prism/fixtures/whitequark/send_conditional.txt1
-rw-r--r--test/prism/fixtures/whitequark/send_index.txt1
-rw-r--r--test/prism/fixtures/whitequark/send_index_asgn.txt1
-rw-r--r--test/prism/fixtures/whitequark/send_index_asgn_legacy.txt1
-rw-r--r--test/prism/fixtures/whitequark/send_index_cmd.txt1
-rw-r--r--test/prism/fixtures/whitequark/send_index_legacy.txt1
-rw-r--r--test/prism/fixtures/whitequark/send_lambda.txt5
-rw-r--r--test/prism/fixtures/whitequark/send_lambda_args.txt3
-rw-r--r--test/prism/fixtures/whitequark/send_lambda_args_noparen.txt3
-rw-r--r--test/prism/fixtures/whitequark/send_lambda_args_shadow.txt1
-rw-r--r--test/prism/fixtures/whitequark/send_lambda_legacy.txt1
-rw-r--r--test/prism/fixtures/whitequark/send_op_asgn_conditional.txt1
-rw-r--r--test/prism/fixtures/whitequark/send_plain.txt5
-rw-r--r--test/prism/fixtures/whitequark/send_plain_cmd.txt5
-rw-r--r--test/prism/fixtures/whitequark/send_self.txt5
-rw-r--r--test/prism/fixtures/whitequark/send_self_block.txt7
-rw-r--r--test/prism/fixtures/whitequark/send_unary_op.txt5
-rw-r--r--test/prism/fixtures/whitequark/slash_newline_in_heredocs.txt13
-rw-r--r--test/prism/fixtures/whitequark/space_args_arg.txt1
-rw-r--r--test/prism/fixtures/whitequark/space_args_arg_block.txt5
-rw-r--r--test/prism/fixtures/whitequark/space_args_arg_call.txt1
-rw-r--r--test/prism/fixtures/whitequark/space_args_arg_newline.txt2
-rw-r--r--test/prism/fixtures/whitequark/space_args_block.txt1
-rw-r--r--test/prism/fixtures/whitequark/space_args_cmd.txt1
-rw-r--r--test/prism/fixtures/whitequark/string___FILE__.txt1
-rw-r--r--test/prism/fixtures/whitequark/string_concat.txt1
-rw-r--r--test/prism/fixtures/whitequark/string_dvar.txt1
-rw-r--r--test/prism/fixtures/whitequark/string_interp.txt1
-rw-r--r--test/prism/fixtures/whitequark/string_plain.txt3
-rw-r--r--test/prism/fixtures/whitequark/super.txt5
-rw-r--r--test/prism/fixtures/whitequark/super_block.txt3
-rw-r--r--test/prism/fixtures/whitequark/symbol_interp.txt1
-rw-r--r--test/prism/fixtures/whitequark/symbol_plain.txt3
-rw-r--r--test/prism/fixtures/whitequark/ternary.txt1
-rw-r--r--test/prism/fixtures/whitequark/ternary_ambiguous_symbol.txt1
-rw-r--r--test/prism/fixtures/whitequark/trailing_forward_arg.txt1
-rw-r--r--test/prism/fixtures/whitequark/true.txt1
-rw-r--r--test/prism/fixtures/whitequark/unary_num_pow_precedence.txt5
-rw-r--r--test/prism/fixtures/whitequark/undef.txt1
-rw-r--r--test/prism/fixtures/whitequark/unless.txt3
-rw-r--r--test/prism/fixtures/whitequark/unless_else.txt3
-rw-r--r--test/prism/fixtures/whitequark/unless_mod.txt1
-rw-r--r--test/prism/fixtures/whitequark/until.txt3
-rw-r--r--test/prism/fixtures/whitequark/until_mod.txt1
-rw-r--r--test/prism/fixtures/whitequark/until_post.txt1
-rw-r--r--test/prism/fixtures/whitequark/var_and_asgn.txt1
-rw-r--r--test/prism/fixtures/whitequark/var_op_asgn.txt7
-rw-r--r--test/prism/fixtures/whitequark/var_op_asgn_cmd.txt1
-rw-r--r--test/prism/fixtures/whitequark/var_or_asgn.txt1
-rw-r--r--test/prism/fixtures/whitequark/when_multi.txt1
-rw-r--r--test/prism/fixtures/whitequark/when_splat.txt1
-rw-r--r--test/prism/fixtures/whitequark/when_then.txt1
-rw-r--r--test/prism/fixtures/whitequark/while.txt3
-rw-r--r--test/prism/fixtures/whitequark/while_mod.txt1
-rw-r--r--test/prism/fixtures/whitequark/while_post.txt1
-rw-r--r--test/prism/fixtures/whitequark/xstring_interp.txt1
-rw-r--r--test/prism/fixtures/whitequark/xstring_plain.txt1
-rw-r--r--test/prism/fixtures/whitequark/zsuper.txt1
-rw-r--r--test/prism/fixtures/xstring.txt21
-rw-r--r--test/prism/fixtures/xstring_with_backslash.txt1
-rw-r--r--test/prism/fixtures/yield.txt7
-rw-r--r--test/prism/fixtures_test.rb33
-rw-r--r--test/prism/fuzzer_test.rb67
-rw-r--r--test/prism/heredoc_dedent_test.rb134
-rw-r--r--test/prism/lex_test.rb57
-rw-r--r--test/prism/library_symbols_test.rb104
-rw-r--r--test/prism/locals_test.rb239
-rw-r--r--test/prism/magic_comment_test.rb118
-rw-r--r--test/prism/newline_offsets_test.rb22
-rw-r--r--test/prism/newline_test.rb98
-rw-r--r--test/prism/onigmo_test.rb66
-rw-r--r--test/prism/percent_delimiter_string_test.rb82
-rw-r--r--test/prism/ractor_test.rb74
-rw-r--r--test/prism/regexp_test.rb265
-rw-r--r--test/prism/result/attribute_write_test.rb56
-rw-r--r--test/prism/result/breadth_first_search_test.rb18
-rw-r--r--test/prism/result/comments_test.rb138
-rw-r--r--test/prism/result/constant_path_node_test.rb91
-rw-r--r--test/prism/result/equality_test.rb22
-rw-r--r--test/prism/result/heredoc_test.rb19
-rw-r--r--test/prism/result/implicit_array_test.rb59
-rw-r--r--test/prism/result/index_write_test.rb89
-rw-r--r--test/prism/result/integer_base_flags_test.rb33
-rw-r--r--test/prism/result/integer_parse_test.rb41
-rw-r--r--test/prism/result/named_capture_test.rb29
-rw-r--r--test/prism/result/node_id_test.rb27
-rw-r--r--test/prism/result/numeric_value_test.rb32
-rw-r--r--test/prism/result/overlap_test.rb43
-rw-r--r--test/prism/result/regular_expression_options_test.rb25
-rw-r--r--test/prism/result/source_location_test.rb950
-rw-r--r--test/prism/result/static_inspect_test.rb89
-rw-r--r--test/prism/result/static_literals_test.rb92
-rw-r--r--test/prism/result/string_test.rb32
-rw-r--r--test/prism/result/warnings_test.rb432
-rw-r--r--test/prism/ruby/compiler_test.rb31
-rw-r--r--test/prism/ruby/desugar_compiler_test.rb80
-rw-r--r--test/prism/ruby/dispatcher_test.rb55
-rw-r--r--test/prism/ruby/location_test.rb254
-rw-r--r--test/prism/ruby/parameters_signature_test.rb92
-rw-r--r--test/prism/ruby/parser_test.rb308
-rw-r--r--test/prism/ruby/pattern_test.rb132
-rw-r--r--test/prism/ruby/reflection_test.rb22
-rw-r--r--test/prism/ruby/relocation_test.rb192
-rw-r--r--test/prism/ruby/ripper_test.rb140
-rw-r--r--test/prism/ruby/ruby_parser_test.rb142
-rw-r--r--test/prism/ruby/source_test.rb47
-rw-r--r--test/prism/ruby/string_query_test.rb60
-rw-r--r--test/prism/ruby/tunnel_test.rb26
-rw-r--r--test/prism/snippets_test.rb43
-rw-r--r--test/prism/test_helper.rb386
-rw-r--r--test/prism/unescape_test.rb245
-rw-r--r--test/prism/version_test.rb11
-rw-r--r--test/psych/handlers/test_recorder.rb2
-rw-r--r--test/psych/helper.rb53
-rw-r--r--test/psych/json/test_stream.rb2
-rw-r--r--test/psych/nodes/test_enumerable.rb2
-rw-r--r--test/psych/test_alias_and_anchor.rb14
-rw-r--r--test/psych/test_array.rb32
-rw-r--r--test/psych/test_boolean.rb2
-rw-r--r--test/psych/test_class.rb6
-rw-r--r--test/psych/test_coder.rb143
-rw-r--r--test/psych/test_data.rb94
-rw-r--r--test/psych/test_date_time.rb71
-rw-r--r--test/psych/test_deprecated.rb132
-rw-r--r--test/psych/test_document.rb4
-rw-r--r--test/psych/test_emitter.rb16
-rw-r--r--test/psych/test_encoding.rb29
-rw-r--r--test/psych/test_exception.rb97
-rw-r--r--test/psych/test_hash.rb102
-rw-r--r--test/psych/test_json_tree.rb2
-rw-r--r--test/psych/test_marshalable.rb14
-rw-r--r--test/psych/test_merge_keys.rb36
-rw-r--r--test/psych/test_nil.rb6
-rw-r--r--test/psych/test_null.rb2
-rw-r--r--test/psych/test_numeric.rb23
-rw-r--r--test/psych/test_object.rb17
-rw-r--r--test/psych/test_object_references.rb27
-rw-r--r--test/psych/test_omap.rb6
-rw-r--r--test/psych/test_parser.rb111
-rw-r--r--test/psych/test_psych.rb344
-rw-r--r--test/psych/test_psych_set.rb57
-rw-r--r--test/psych/test_ractor.rb50
-rw-r--r--test/psych/test_safe_load.rb144
-rw-r--r--test/psych/test_scalar.rb7
-rw-r--r--test/psych/test_scalar_scanner.rb129
-rw-r--r--test/psych/test_serialize_subclasses.rb24
-rw-r--r--test/psych/test_set.rb56
-rw-r--r--test/psych/test_stream.rb26
-rw-r--r--test/psych/test_string.rb71
-rw-r--r--test/psych/test_stringio.rb14
-rw-r--r--test/psych/test_struct.rb8
-rw-r--r--test/psych/test_symbol.rb2
-rw-r--r--test/psych/test_tainted.rb131
-rw-r--r--test/psych/test_to_yaml_properties.rb64
-rw-r--r--test/psych/test_tree_builder.rb16
-rw-r--r--test/psych/test_yaml.rb983
-rw-r--r--test/psych/test_yaml_special_cases.rb142
-rw-r--r--test/psych/test_yamldbm.rb2
-rw-r--r--test/psych/test_yamlstore.rb65
-rw-r--r--test/psych/visitors/test_depth_first.rb2
-rw-r--r--test/psych/visitors/test_emitter.rb18
-rw-r--r--test/psych/visitors/test_to_ruby.rb15
-rw-r--r--test/psych/visitors/test_yaml_tree.rb71
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Amps and angle encoding.text21
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Auto links.text13
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Backslash escapes.text120
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Blockquotes with code blocks.text11
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Code Blocks.text14
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Code Spans.text6
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Hard-wrapped paragraphs with list-like lines.text8
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Horizontal rules.text67
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Inline HTML (Advanced).text15
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Inline HTML (Simple).text69
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Inline HTML comments.text13
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Links, inline style.text12
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Links, reference style.text71
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Links, shortcut references.text20
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Literal quotes in titles.text7
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Markdown Documentation - Basics.text306
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Markdown Documentation - Syntax.text888
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Nested blockquotes.text5
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Ordered and unordered lists.text131
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Strong and em together.text7
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Tabs.text21
-rw-r--r--test/rdoc/MarkdownTest_1.0.3/Tidyness.text5
-rw-r--r--test/rdoc/README1
-rw-r--r--test/rdoc/binary.datbin1024 -> 0 bytes
-rw-r--r--test/rdoc/hidden.zip.txt1
-rw-r--r--test/rdoc/test.ja.largedoc3
-rw-r--r--test/rdoc/test.ja.rdoc10
-rw-r--r--test/rdoc/test.ja.txt8
-rw-r--r--test/rdoc/test.txt1
-rw-r--r--test/rdoc/test_rdoc_alias.rb14
-rw-r--r--test/rdoc/test_rdoc_any_method.rb461
-rw-r--r--test/rdoc/test_rdoc_attr.rb191
-rw-r--r--test/rdoc/test_rdoc_class_module.rb1493
-rw-r--r--test/rdoc/test_rdoc_code_object.rb451
-rw-r--r--test/rdoc/test_rdoc_comment.rb505
-rw-r--r--test/rdoc/test_rdoc_constant.rb182
-rw-r--r--test/rdoc/test_rdoc_context.rb902
-rw-r--r--test/rdoc/test_rdoc_context_section.rb131
-rw-r--r--test/rdoc/test_rdoc_cross_reference.rb193
-rw-r--r--test/rdoc/test_rdoc_encoding.rb228
-rw-r--r--test/rdoc/test_rdoc_extend.rb95
-rw-r--r--test/rdoc/test_rdoc_generator_darkfish.rb230
-rw-r--r--test/rdoc/test_rdoc_generator_json_index.rb325
-rw-r--r--test/rdoc/test_rdoc_generator_markup.rb60
-rw-r--r--test/rdoc/test_rdoc_generator_pot.rb92
-rw-r--r--test/rdoc/test_rdoc_generator_pot_po.rb52
-rw-r--r--test/rdoc/test_rdoc_generator_pot_po_entry.rb140
-rw-r--r--test/rdoc/test_rdoc_generator_ri.rb79
-rw-r--r--test/rdoc/test_rdoc_i18n_locale.rb74
-rw-r--r--test/rdoc/test_rdoc_i18n_text.rb124
-rw-r--r--test/rdoc/test_rdoc_include.rb109
-rw-r--r--test/rdoc/test_rdoc_markdown.rb981
-rw-r--r--test/rdoc/test_rdoc_markdown_test.rb1885
-rw-r--r--test/rdoc/test_rdoc_markup.rb96
-rw-r--r--test/rdoc/test_rdoc_markup_attribute_manager.rb365
-rw-r--r--test/rdoc/test_rdoc_markup_attributes.rb40
-rw-r--r--test/rdoc/test_rdoc_markup_document.rb208
-rw-r--r--test/rdoc/test_rdoc_markup_formatter.rb176
-rw-r--r--test/rdoc/test_rdoc_markup_hard_break.rb32
-rw-r--r--test/rdoc/test_rdoc_markup_heading.rb30
-rw-r--r--test/rdoc/test_rdoc_markup_include.rb20
-rw-r--r--test/rdoc/test_rdoc_markup_indented_paragraph.rb54
-rw-r--r--test/rdoc/test_rdoc_markup_paragraph.rb33
-rw-r--r--test/rdoc/test_rdoc_markup_parser.rb1681
-rw-r--r--test/rdoc/test_rdoc_markup_pre_process.rb474
-rw-r--r--test/rdoc/test_rdoc_markup_raw.rb23
-rw-r--r--test/rdoc/test_rdoc_markup_to_ansi.rb370
-rw-r--r--test/rdoc/test_rdoc_markup_to_bs.rb367
-rw-r--r--test/rdoc/test_rdoc_markup_to_html.rb663
-rw-r--r--test/rdoc/test_rdoc_markup_to_html_crossref.rb226
-rw-r--r--test/rdoc/test_rdoc_markup_to_html_snippet.rb712
-rw-r--r--test/rdoc/test_rdoc_markup_to_joined_paragraph.rb33
-rw-r--r--test/rdoc/test_rdoc_markup_to_label.rb113
-rw-r--r--test/rdoc/test_rdoc_markup_to_markdown.rb390
-rw-r--r--test/rdoc/test_rdoc_markup_to_rdoc.rb378
-rw-r--r--test/rdoc/test_rdoc_markup_to_table_of_contents.rb127
-rw-r--r--test/rdoc/test_rdoc_markup_to_tt_only.rb247
-rw-r--r--test/rdoc/test_rdoc_markup_verbatim.rb30
-rw-r--r--test/rdoc/test_rdoc_method_attr.rb194
-rw-r--r--test/rdoc/test_rdoc_normal_class.rb48
-rw-r--r--test/rdoc/test_rdoc_normal_module.rb43
-rw-r--r--test/rdoc/test_rdoc_options.rb767
-rw-r--r--test/rdoc/test_rdoc_parser.rb328
-rw-r--r--test/rdoc/test_rdoc_parser_c.rb1897
-rw-r--r--test/rdoc/test_rdoc_parser_changelog.rb316
-rw-r--r--test/rdoc/test_rdoc_parser_markdown.rb62
-rw-r--r--test/rdoc/test_rdoc_parser_rd.rb56
-rw-r--r--test/rdoc/test_rdoc_parser_ruby.rb3323
-rw-r--r--test/rdoc/test_rdoc_parser_simple.rb116
-rw-r--r--test/rdoc/test_rdoc_rd.rb31
-rw-r--r--test/rdoc/test_rdoc_rd_block_parser.rb536
-rw-r--r--test/rdoc/test_rdoc_rd_inline.rb64
-rw-r--r--test/rdoc/test_rdoc_rd_inline_parser.rb178
-rw-r--r--test/rdoc/test_rdoc_rdoc.rb456
-rw-r--r--test/rdoc/test_rdoc_require.rb26
-rw-r--r--test/rdoc/test_rdoc_ri_driver.rb1437
-rw-r--r--test/rdoc/test_rdoc_ri_paths.rb156
-rw-r--r--test/rdoc/test_rdoc_ruby_lex.rb422
-rw-r--r--test/rdoc/test_rdoc_ruby_token.rb20
-rw-r--r--test/rdoc/test_rdoc_rubygems_hook.rb252
-rw-r--r--test/rdoc/test_rdoc_servlet.rb535
-rw-r--r--test/rdoc/test_rdoc_single_class.rb21
-rw-r--r--test/rdoc/test_rdoc_stats.rb723
-rw-r--r--test/rdoc/test_rdoc_store.rb994
-rw-r--r--test/rdoc/test_rdoc_task.rb174
-rw-r--r--test/rdoc/test_rdoc_text.rb558
-rw-r--r--test/rdoc/test_rdoc_token_stream.rb43
-rw-r--r--test/rdoc/test_rdoc_tom_doc.rb521
-rw-r--r--test/rdoc/test_rdoc_top_level.rb288
-rw-r--r--test/rdoc/xref_data.rb77
-rw-r--r--test/rdoc/xref_test_case.rb68
-rw-r--r--test/readline/test_readline.rb534
-rw-r--r--test/readline/test_readline_history.rb293
-rw-r--r--test/resolv/test_addr.rb37
-rw-r--r--test/resolv/test_dns.rb737
-rw-r--r--test/resolv/test_mdns.rb27
-rw-r--r--test/resolv/test_resource.rb80
-rw-r--r--test/resolv/test_svcb_https.rb231
-rw-r--r--test/resolv/test_win32_config.rb26
-rw-r--r--test/rexml/data/LostineRiver.kml.gzbin50154 -> 0 bytes
-rw-r--r--test/rexml/data/ProductionSupport.xml29
-rw-r--r--test/rexml/data/axis.xml25
-rw-r--r--test/rexml/data/bad.xml5
-rw-r--r--test/rexml/data/basic.xml11
-rw-r--r--test/rexml/data/basicupdate.xml47
-rw-r--r--test/rexml/data/broken.rss20
-rw-r--r--test/rexml/data/contents.xml70
-rw-r--r--test/rexml/data/dash.xml12
-rw-r--r--test/rexml/data/defaultNamespace.xml6
-rw-r--r--test/rexml/data/doctype_test.xml34
-rw-r--r--test/rexml/data/documentation.xml542
-rw-r--r--test/rexml/data/euc.xml296
-rw-r--r--test/rexml/data/evaluate.xml28
-rw-r--r--test/rexml/data/fibo.xml29
-rw-r--r--test/rexml/data/foo.xml10
-rw-r--r--test/rexml/data/google.2.xml156
-rw-r--r--test/rexml/data/id.xml21
-rw-r--r--test/rexml/data/iso8859-1.xml4
-rw-r--r--test/rexml/data/jaxen24.xml2
-rw-r--r--test/rexml/data/jaxen3.xml15
-rw-r--r--test/rexml/data/lang.xml11
-rw-r--r--test/rexml/data/lang0.xml18
-rw-r--r--test/rexml/data/message.xml27
-rw-r--r--test/rexml/data/moreover.xml244
-rw-r--r--test/rexml/data/much_ado.xml6850
-rw-r--r--test/rexml/data/namespaces.xml18
-rw-r--r--test/rexml/data/nitf.xml67
-rw-r--r--test/rexml/data/numbers.xml18
-rw-r--r--test/rexml/data/ofbiz-issues-full-177.xml13971
-rw-r--r--test/rexml/data/pi.xml13
-rw-r--r--test/rexml/data/pi2.xml6
-rw-r--r--test/rexml/data/project.xml1
-rw-r--r--test/rexml/data/simple.xml2
-rw-r--r--test/rexml/data/stream_accents.xml4
-rw-r--r--test/rexml/data/t63-1.xmlbin161690 -> 0 bytes
-rw-r--r--test/rexml/data/t63-2.svg2828
-rw-r--r--test/rexml/data/t75.xml31
-rw-r--r--test/rexml/data/test/tests.xml683
-rw-r--r--test/rexml/data/test/tests.xsl369
-rw-r--r--test/rexml/data/testNamespaces.xml22
-rw-r--r--test/rexml/data/testsrc.xml64
-rw-r--r--test/rexml/data/text.xml10
-rw-r--r--test/rexml/data/ticket_61.xml4
-rw-r--r--test/rexml/data/ticket_68.xml590
-rw-r--r--test/rexml/data/tutorial.xml678
-rw-r--r--test/rexml/data/underscore.xml6
-rw-r--r--test/rexml/data/utf16.xmlbin207464 -> 0 bytes
-rw-r--r--test/rexml/data/web.xml42
-rw-r--r--test/rexml/data/web2.xml7
-rw-r--r--test/rexml/data/working.rss202
-rw-r--r--test/rexml/data/xmlfile-bug.xml15
-rw-r--r--test/rexml/data/xp.tst27
-rw-r--r--test/rexml/data/yahoo.xml80
-rw-r--r--test/rexml/listener.rb51
-rw-r--r--test/rexml/parse/test_document_type_declaration.rb50
-rw-r--r--test/rexml/parse/test_notation_declaration.rb100
-rw-r--r--test/rexml/parser/test_sax2.rb203
-rw-r--r--test/rexml/parser/test_tree.rb43
-rw-r--r--test/rexml/parser/test_ultra_light.rb70
-rw-r--r--test/rexml/rexml_test_utils.rb7
-rw-r--r--test/rexml/test_attributes.rb223
-rw-r--r--test/rexml/test_attributes_mixin.rb32
-rw-r--r--test/rexml/test_changing_encoding.rb45
-rw-r--r--test/rexml/test_comment.rb26
-rw-r--r--test/rexml/test_contrib.rb585
-rw-r--r--test/rexml/test_core.rb1468
-rw-r--r--test/rexml/test_doctype.rb107
-rw-r--r--test/rexml/test_document.rb416
-rw-r--r--test/rexml/test_elements.rb119
-rw-r--r--test/rexml/test_encoding.rb108
-rw-r--r--test/rexml/test_entity.rb206
-rw-r--r--test/rexml/test_functions.rb225
-rw-r--r--test/rexml/test_functions_number.rb35
-rw-r--r--test/rexml/test_jaxen.rb130
-rw-r--r--test/rexml/test_light.rb107
-rw-r--r--test/rexml/test_lightparser.rb16
-rw-r--r--test/rexml/test_listener.rb131
-rw-r--r--test/rexml/test_martin_fowler.rb40
-rw-r--r--test/rexml/test_namespace.rb41
-rw-r--r--test/rexml/test_order.rb110
-rw-r--r--test/rexml/test_preceding_sibling.rb41
-rw-r--r--test/rexml/test_pullparser.rb103
-rw-r--r--test/rexml/test_rexml_issuezilla.rb19
-rw-r--r--test/rexml/test_sax.rb287
-rw-r--r--test/rexml/test_stream.rb130
-rw-r--r--test/rexml/test_text.rb22
-rw-r--r--test/rexml/test_ticket_80.rb59
-rw-r--r--test/rexml/test_validation_rng.rb793
-rw-r--r--test/rexml/test_xml_declaration.rb36
-rw-r--r--test/rexml/xpath/test_attribute.rb30
-rw-r--r--test/rexml/xpath/test_axis_preceding_sibling.rb40
-rw-r--r--test/rexml/xpath/test_base.rb1090
-rw-r--r--test/rexml/xpath/test_node.rb43
-rw-r--r--test/rexml/xpath/test_predicate.rb83
-rw-r--r--test/rexml/xpath/test_text.rb75
-rw-r--r--test/rinda/test_rinda.rb811
-rw-r--r--test/rinda/test_tuplebag.rb173
-rw-r--r--test/ripper/assert_parse_files.rb46
-rw-r--r--test/ripper/dummyparser.rb112
-rw-r--r--test/ripper/test_files.rb24
-rw-r--r--test/ripper/test_files_ext.rb8
-rw-r--r--test/ripper/test_files_lib.rb14
-rw-r--r--test/ripper/test_files_sample.rb8
-rw-r--r--test/ripper/test_files_test.rb8
-rw-r--r--test/ripper/test_files_test_1.rb9
-rw-r--r--test/ripper/test_files_test_2.rb9
-rw-r--r--test/ripper/test_filter.rb13
-rw-r--r--test/ripper/test_lexer.rb594
-rw-r--r--test/ripper/test_parser_events.rb574
-rw-r--r--test/ripper/test_ripper.rb160
-rw-r--r--test/ripper/test_scanner_events.rb225
-rw-r--r--test/ripper/test_sexp.rb506
-rw-r--r--test/rss/dot.pngbin111 -> 0 bytes
-rw-r--r--test/rss/rss-assertions.rb2091
-rw-r--r--test/rss/rss-testcase.rb479
-rw-r--r--test/rss/test_1.0.rb308
-rw-r--r--test/rss/test_2.0.rb412
-rw-r--r--test/rss/test_accessor.rb104
-rw-r--r--test/rss/test_atom.rb684
-rw-r--r--test/rss/test_content.rb105
-rw-r--r--test/rss/test_dublincore.rb270
-rw-r--r--test/rss/test_image.rb215
-rw-r--r--test/rss/test_inherit.rb41
-rw-r--r--test/rss/test_itunes.rb348
-rw-r--r--test/rss/test_maker_0.9.rb475
-rw-r--r--test/rss/test_maker_1.0.rb517
-rw-r--r--test/rss/test_maker_2.0.rb758
-rw-r--r--test/rss/test_maker_atom_entry.rb394
-rw-r--r--test/rss/test_maker_atom_feed.rb455
-rw-r--r--test/rss/test_maker_content.rb48
-rw-r--r--test/rss/test_maker_dc.rb150
-rw-r--r--test/rss/test_maker_image.rb63
-rw-r--r--test/rss/test_maker_itunes.rb470
-rw-r--r--test/rss/test_maker_slash.rb38
-rw-r--r--test/rss/test_maker_sy.rb45
-rw-r--r--test/rss/test_maker_taxo.rb82
-rw-r--r--test/rss/test_maker_trackback.rb42
-rw-r--r--test/rss/test_maker_xml-stylesheet.rb84
-rw-r--r--test/rss/test_parser.rb65
-rw-r--r--test/rss/test_parser_1.0.rb529
-rw-r--r--test/rss/test_parser_2.0.rb123
-rw-r--r--test/rss/test_parser_atom_entry.rb164
-rw-r--r--test/rss/test_parser_atom_feed.rb277
-rw-r--r--test/rss/test_setup_maker_0.9.rb247
-rw-r--r--test/rss/test_setup_maker_1.0.rb551
-rw-r--r--test/rss/test_setup_maker_2.0.rb309
-rw-r--r--test/rss/test_setup_maker_atom_entry.rb410
-rw-r--r--test/rss/test_setup_maker_atom_feed.rb446
-rw-r--r--test/rss/test_setup_maker_itunes.rb144
-rw-r--r--test/rss/test_setup_maker_slash.rb39
-rw-r--r--test/rss/test_slash.rb65
-rw-r--r--test/rss/test_syndication.rb126
-rw-r--r--test/rss/test_taxonomy.rb173
-rw-r--r--test/rss/test_to_s.rb677
-rw-r--r--test/rss/test_trackback.rb136
-rw-r--r--test/rss/test_version.rb10
-rw-r--r--test/rss/test_xml-stylesheet.rb109
-rw-r--r--test/ruby/box/a.1_1_0.rb17
-rw-r--r--test/ruby/box/a.1_2_0.rb17
-rw-r--r--test/ruby/box/a.rb15
-rw-r--r--test/ruby/box/autoloading.rb8
-rw-r--r--test/ruby/box/blank.rb2
-rw-r--r--test/ruby/box/blank1.rb2
-rw-r--r--test/ruby/box/blank2.rb2
-rw-r--r--test/ruby/box/box.rb10
-rw-r--r--test/ruby/box/call_proc.rb5
-rw-r--r--test/ruby/box/call_toplevel.rb8
-rw-r--r--test/ruby/box/consts.rb148
-rw-r--r--test/ruby/box/define_toplevel.rb5
-rw-r--r--test/ruby/box/global_vars.rb37
-rw-r--r--test/ruby/box/instance_variables.rb21
-rw-r--r--test/ruby/box/line_splitter.rb9
-rw-r--r--test/ruby/box/load_path.rb26
-rw-r--r--test/ruby/box/open_class_with_include.rb31
-rw-r--r--test/ruby/box/proc_callee.rb14
-rw-r--r--test/ruby/box/proc_caller.rb5
-rw-r--r--test/ruby/box/procs.rb64
-rw-r--r--test/ruby/box/raise.rb3
-rw-r--r--test/ruby/box/returns_proc.rb12
-rw-r--r--test/ruby/box/singleton_methods.rb65
-rw-r--r--test/ruby/box/string_ext.rb13
-rw-r--r--test/ruby/box/string_ext_caller.rb5
-rw-r--r--test/ruby/box/string_ext_calling.rb1
-rw-r--r--test/ruby/box/string_ext_eval_caller.rb12
-rw-r--r--test/ruby/box/top_level.rb33
-rw-r--r--test/ruby/bug-13526.rb22
-rw-r--r--test/ruby/enc/test_case_comprehensive.rb306
-rw-r--r--test/ruby/enc/test_case_mapping.rb209
-rw-r--r--test/ruby/enc/test_case_options.rb81
-rw-r--r--test/ruby/enc/test_casing_options.rb81
-rw-r--r--test/ruby/enc/test_cesu8.rb113
-rw-r--r--test/ruby/enc/test_emoji_breaks.rb155
-rw-r--r--test/ruby/enc/test_grapheme_breaks.rb92
-rw-r--r--test/ruby/enc/test_iso_8859.rb6
-rw-r--r--test/ruby/enc/test_regex_casefold.rb120
-rw-r--r--test/ruby/enc/test_utf16.rb112
-rw-r--r--test/ruby/enc/test_utf32.rb68
-rw-r--r--test/ruby/lbtest.rb5
-rw-r--r--test/ruby/marshaltestlib.rb4
-rw-r--r--test/ruby/sentence.rb4
-rw-r--r--test/ruby/test_alias.rb152
-rw-r--r--test/ruby/test_allocation.rb957
-rw-r--r--test/ruby/test_argf.rb965
-rw-r--r--test/ruby/test_arithmetic_sequence.rb491
-rw-r--r--test/ruby/test_arity.rb43
-rw-r--r--test/ruby/test_array.rb1558
-rw-r--r--test/ruby/test_assignment.rb231
-rw-r--r--test/ruby/test_ast.rb1753
-rw-r--r--test/ruby/test_autoload.rb395
-rw-r--r--test/ruby/test_backtrace.rb186
-rw-r--r--test/ruby/test_basicinstructions.rb38
-rw-r--r--test/ruby/test_beginendblock.rb82
-rw-r--r--test/ruby/test_bignum.rb339
-rw-r--r--test/ruby/test_box.rb874
-rw-r--r--test/ruby/test_call.rb1402
-rw-r--r--test/ruby/test_case.rb23
-rw-r--r--test/ruby/test_class.rb431
-rw-r--r--test/ruby/test_clone.rb88
-rw-r--r--test/ruby/test_comparable.rb50
-rw-r--r--test/ruby/test_compile_prism.rb2755
-rw-r--r--test/ruby/test_complex.rb480
-rw-r--r--test/ruby/test_complex2.rb2
-rw-r--r--test/ruby/test_complexrational.rb30
-rw-r--r--test/ruby/test_const.rb49
-rw-r--r--test/ruby/test_continuation.rb30
-rw-r--r--test/ruby/test_data.rb290
-rw-r--r--test/ruby/test_default_gems.rb29
-rw-r--r--test/ruby/test_defined.rb250
-rw-r--r--test/ruby/test_dir.rb553
-rw-r--r--test/ruby/test_dir_m17n.rb152
-rw-r--r--test/ruby/test_dup.rb110
-rw-r--r--test/ruby/test_econv.rb29
-rw-r--r--test/ruby/test_encoding.rb80
-rw-r--r--test/ruby/test_enum.rb635
-rw-r--r--test/ruby/test_enumerator.rb454
-rw-r--r--test/ruby/test_env.rb1089
-rw-r--r--test/ruby/test_eval.rb218
-rw-r--r--test/ruby/test_exception.rb1000
-rw-r--r--test/ruby/test_extlibs.rb87
-rw-r--r--test/ruby/test_fiber.rb333
-rw-r--r--test/ruby/test_file.rb490
-rw-r--r--test/ruby/test_file_exhaustive.rb804
-rw-r--r--test/ruby/test_fixnum.rb22
-rw-r--r--test/ruby/test_flip.rb33
-rw-r--r--test/ruby/test_float.rb367
-rw-r--r--test/ruby/test_fnmatch.rb37
-rw-r--r--test/ruby/test_frozen.rb46
-rw-r--r--test/ruby/test_frozen_error.rb57
-rw-r--r--test/ruby/test_gc.rb708
-rw-r--r--test/ruby/test_gc_compact.rb488
-rw-r--r--test/ruby/test_hash.rb1378
-rw-r--r--test/ruby/test_ifunless.rb2
-rw-r--r--test/ruby/test_inlinecache.rb110
-rw-r--r--test/ruby/test_insns_leaf.rb46
-rw-r--r--test/ruby/test_integer.rb682
-rw-r--r--test/ruby/test_integer_comb.rb117
-rw-r--r--test/ruby/test_io.rb1452
-rw-r--r--test/ruby/test_io_buffer.rb933
-rw-r--r--test/ruby/test_io_m17n.rb270
-rw-r--r--test/ruby/test_io_timeout.rb58
-rw-r--r--test/ruby/test_iseq.rb831
-rw-r--r--test/ruby/test_iterator.rb56
-rw-r--r--test/ruby/test_key_error.rb42
-rw-r--r--test/ruby/test_keyword.rb4051
-rw-r--r--test/ruby/test_lambda.rb220
-rw-r--r--test/ruby/test_lazy_enumerator.rb175
-rw-r--r--test/ruby/test_literal.rb240
-rw-r--r--test/ruby/test_m17n.rb372
-rw-r--r--test/ruby/test_m17n_comb.rb44
-rw-r--r--test/ruby/test_marshal.rb465
-rw-r--r--test/ruby/test_math.rb122
-rw-r--r--test/ruby/test_memory_view.rb341
-rw-r--r--test/ruby/test_method.rb1029
-rw-r--r--test/ruby/test_method_cache.rb76
-rw-r--r--test/ruby/test_mixed_unicode_escapes.rb8
-rw-r--r--test/ruby/test_module.rb1512
-rw-r--r--test/ruby/test_name_error.rb156
-rw-r--r--test/ruby/test_nomethod_error.rb137
-rw-r--r--test/ruby/test_not.rb2
-rw-r--r--test/ruby/test_notimp.rb85
-rw-r--r--test/ruby/test_numeric.rb231
-rw-r--r--test/ruby/test_object.rb379
-rw-r--r--test/ruby/test_object_id.rb303
-rw-r--r--test/ruby/test_objectspace.rb177
-rw-r--r--test/ruby/test_optimization.rb1049
-rw-r--r--test/ruby/test_pack.rb242
-rw-r--r--test/ruby/test_parse.rb1426
-rw-r--r--test/ruby/test_path.rb8
-rw-r--r--test/ruby/test_pattern_matching.rb1763
-rw-r--r--test/ruby/test_pipe.rb19
-rw-r--r--test/ruby/test_primitive.rb80
-rw-r--r--test/ruby/test_proc.rb999
-rw-r--r--test/ruby/test_process.rb930
-rw-r--r--test/ruby/test_ractor.rb229
-rw-r--r--test/ruby/test_rand.rb423
-rw-r--r--test/ruby/test_random_formatter.rb183
-rw-r--r--test/ruby/test_range.rb1153
-rw-r--r--test/ruby/test_rational.rb432
-rw-r--r--test/ruby/test_refinement.rb1443
-rw-r--r--test/ruby/test_regexp.rb1345
-rw-r--r--test/ruby/test_require.rb529
-rw-r--r--test/ruby/test_require_lib.rb28
-rw-r--r--test/ruby/test_rubyoptions.rb843
-rw-r--r--test/ruby/test_rubyvm.rb59
-rw-r--r--test/ruby/test_set.rb1052
-rw-r--r--test/ruby/test_settracefunc.rb1964
-rw-r--r--test/ruby/test_shapes.rb1212
-rw-r--r--test/ruby/test_signal.rb89
-rw-r--r--test/ruby/test_sleep.rb35
-rw-r--r--test/ruby/test_sprintf.rb145
-rw-r--r--test/ruby/test_stack.rb81
-rw-r--r--test/ruby/test_string.rb2613
-rw-r--r--test/ruby/test_string_memory.rb65
-rw-r--r--test/ruby/test_struct.rb197
-rw-r--r--test/ruby/test_super.rb252
-rw-r--r--test/ruby/test_symbol.rb305
-rw-r--r--test/ruby/test_syntax.rb1771
-rw-r--r--test/ruby/test_system.rb54
-rw-r--r--test/ruby/test_thread.rb810
-rw-r--r--test/ruby/test_thread_cv.rb246
-rw-r--r--test/ruby/test_thread_queue.rb730
-rw-r--r--test/ruby/test_threadgroup.rb1
-rw-r--r--test/ruby/test_time.rb483
-rw-r--r--test/ruby/test_time_tz.rb464
-rw-r--r--test/ruby/test_trace.rb11
-rw-r--r--test/ruby/test_transcode.rb822
-rw-r--r--test/ruby/test_undef.rb18
-rw-r--r--test/ruby/test_unicode_escape.rb19
-rw-r--r--test/ruby/test_variable.rb419
-rw-r--r--test/ruby/test_vm_dump.rb23
-rw-r--r--test/ruby/test_warning.rb32
-rw-r--r--test/ruby/test_weakkeymap.rb159
-rw-r--r--test/ruby/test_weakmap.rb185
-rw-r--r--test/ruby/test_whileuntil.rb20
-rw-r--r--test/ruby/test_yield.rb4
-rw-r--r--test/ruby/test_yjit.rb1985
-rw-r--r--test/ruby/test_yjit_exit_locations.rb96
-rw-r--r--test/ruby/test_zjit.rb4542
-rw-r--r--test/rubygems/alternate_cert.pem29
-rw-r--r--test/rubygems/alternate_cert_32.pem31
-rw-r--r--test/rubygems/alternate_key.pem50
-rw-r--r--test/rubygems/bad_rake.rb3
-rw-r--r--test/rubygems/bogussources.rb9
-rw-r--r--test/rubygems/bundler_test_gem.rb424
-rw-r--r--test/rubygems/ca_cert.pem139
-rw-r--r--test/rubygems/child_cert.pem31
-rw-r--r--test/rubygems/child_cert_32.pem31
-rw-r--r--test/rubygems/child_key.pem50
-rw-r--r--test/rubygems/client.pem148
-rw-r--r--test/rubygems/data/excon-0.7.7.gemspec.rzbin0 -> 388 bytes
-rw-r--r--test/rubygems/data/null-required-ruby-version.gemspec.rzbin0 -> 403 bytes
-rw-r--r--test/rubygems/data/null-required-rubygems-version.gemspec.rzbin0 -> 421 bytes
-rw-r--r--test/rubygems/data/null-type.gemspec.rzbin554 -> 0 bytes
-rw-r--r--test/rubygems/data/pry-0.4.7.gemspec.rzbin0 -> 433 bytes
-rw-r--r--test/rubygems/encrypted_private_key.pem52
-rw-r--r--test/rubygems/expired_cert.pem29
-rw-r--r--test/rubygems/fake_certlib/openssl.rb3
-rw-r--r--test/rubygems/fix_openssl_warnings.rb13
-rw-r--r--test/rubygems/foo/discover.rb2
-rw-r--r--test/rubygems/future_cert.pem29
-rw-r--r--test/rubygems/future_cert_32.pem29
-rw-r--r--test/rubygems/good_rake.rb3
-rw-r--r--test/rubygems/grandchild_cert.pem31
-rw-r--r--test/rubygems/grandchild_cert_32.pem31
-rw-r--r--test/rubygems/grandchild_key.pem50
-rw-r--r--test/rubygems/helper.rb1629
-rw-r--r--test/rubygems/installer_test_case.rb257
-rw-r--r--test/rubygems/invalid_issuer_cert.pem32
-rw-r--r--test/rubygems/invalid_issuer_cert_32.pem32
-rw-r--r--test/rubygems/invalid_key.pem50
-rw-r--r--test/rubygems/invalid_signer_cert.pem31
-rw-r--r--test/rubygems/invalid_signer_cert_32.pem31
-rw-r--r--test/rubygems/invalidchild_cert.pem31
-rw-r--r--test/rubygems/invalidchild_cert_32.pem31
-rw-r--r--test/rubygems/invalidchild_key.pem50
-rw-r--r--test/rubygems/mock_gem_ui.rb86
-rw-r--r--test/rubygems/multifactor_auth_utilities.rb111
-rw-r--r--test/rubygems/package/tar_test_case.rb179
-rw-r--r--test/rubygems/packages/Bluebie-legs-0.6.2.gembin0 -> 14336 bytes
-rw-r--r--test/rubygems/packages/ascii_binder-0.1.10.1.gembin0 -> 244736 bytes
-rw-r--r--test/rubygems/packages/ill-formatted-platform-1.0.0.10.gembin0 -> 10240 bytes
-rw-r--r--test/rubygems/plugin/exception/rubygems_plugin.rb3
-rw-r--r--test/rubygems/plugin/load/rubygems_plugin.rb3
-rw-r--r--test/rubygems/plugin/scripterror/rubygems_plugin.rb4
-rw-r--r--test/rubygems/plugin/standarderror/rubygems_plugin.rb5
-rw-r--r--test/rubygems/private3072_key.pem40
-rw-r--r--test/rubygems/private_ec_key.pem9
-rw-r--r--test/rubygems/private_key.pem50
-rw-r--r--test/rubygems/public3072_cert.pem25
-rw-r--r--test/rubygems/public_cert.pem32
-rw-r--r--test/rubygems/public_cert_32.pem31
-rw-r--r--test/rubygems/public_key.pem14
-rw-r--r--test/rubygems/rubygems/commands/crash_command.rb5
-rw-r--r--test/rubygems/rubygems/commands/ins_command.rb7
-rw-r--r--test/rubygems/rubygems/commands/interrupt_command.rb11
-rw-r--r--test/rubygems/rubygems_plugin.rb21
-rw-r--r--test/rubygems/sff/discover.rb2
-rw-r--r--test/rubygems/simple_gem.rb3
-rw-r--r--test/rubygems/specifications/bar-0.0.2.gemspec2
-rw-r--r--test/rubygems/specifications/foo-0.0.1.gemspecbin269 -> 0 bytes
-rw-r--r--test/rubygems/specifications/rubyforge-0.0.1.gemspec15
-rw-r--r--test/rubygems/ssl_cert.pem95
-rw-r--r--test/rubygems/ssl_key.pem38
-rw-r--r--test/rubygems/test_bundled_ca.rb58
-rw-r--r--test/rubygems/test_config.rb29
-rw-r--r--test/rubygems/test_deprecate.rb111
-rw-r--r--test/rubygems/test_exit.rb17
-rw-r--r--test/rubygems/test_gem.rb1766
-rw-r--r--test/rubygems/test_gem_available_set.rb52
-rw-r--r--test/rubygems/test_gem_bundler_version_finder.rb204
-rw-r--r--test/rubygems/test_gem_ci_detector.rb32
-rw-r--r--test/rubygems/test_gem_command.rb238
-rw-r--r--test/rubygems/test_gem_command_manager.rb284
-rw-r--r--test/rubygems/test_gem_commands_build_command.rb666
-rw-r--r--test/rubygems/test_gem_commands_cert_command.rb464
-rw-r--r--test/rubygems/test_gem_commands_check_command.rb25
-rw-r--r--test/rubygems/test_gem_commands_cleanup_command.rb213
-rw-r--r--test/rubygems/test_gem_commands_contents_command.rb121
-rw-r--r--test/rubygems/test_gem_commands_dependency_command.rb126
-rw-r--r--test/rubygems/test_gem_commands_environment_command.rb117
-rw-r--r--test/rubygems/test_gem_commands_exec_command.rb859
-rw-r--r--test/rubygems/test_gem_commands_fetch_command.rb227
-rw-r--r--test/rubygems/test_gem_commands_generate_index_command.rb51
-rw-r--r--test/rubygems/test_gem_commands_help_command.rb55
-rw-r--r--test/rubygems/test_gem_commands_info_command.rb105
-rw-r--r--test/rubygems/test_gem_commands_install_command.rb1024
-rw-r--r--test/rubygems/test_gem_commands_list_command.rb42
-rw-r--r--test/rubygems/test_gem_commands_lock_command.rb28
-rw-r--r--test/rubygems/test_gem_commands_mirror.rb10
-rw-r--r--test/rubygems/test_gem_commands_open_command.rb74
-rw-r--r--test/rubygems/test_gem_commands_outdated_command.rb35
-rw-r--r--test/rubygems/test_gem_commands_owner_command.rb510
-rw-r--r--test/rubygems/test_gem_commands_pristine_command.rb485
-rw-r--r--test/rubygems/test_gem_commands_push_command.rb495
-rw-r--r--test/rubygems/test_gem_commands_query_command.rb634
-rw-r--r--test/rubygems/test_gem_commands_rebuild_command.rb154
-rw-r--r--test/rubygems/test_gem_commands_search_command.rb10
-rw-r--r--test/rubygems/test_gem_commands_server_command.rb56
-rw-r--r--test/rubygems/test_gem_commands_setup_command.rb485
-rw-r--r--test/rubygems/test_gem_commands_signin_command.rb308
-rw-r--r--test/rubygems/test_gem_commands_signout_command.rb30
-rw-r--r--test/rubygems/test_gem_commands_sources_command.rb752
-rw-r--r--test/rubygems/test_gem_commands_specification_command.rb140
-rw-r--r--test/rubygems/test_gem_commands_stale_command.rb22
-rw-r--r--test/rubygems/test_gem_commands_uninstall_command.rb496
-rw-r--r--test/rubygems/test_gem_commands_unpack_command.rb87
-rw-r--r--test/rubygems/test_gem_commands_update_command.rb612
-rw-r--r--test/rubygems/test_gem_commands_which_command.rb36
-rw-r--r--test/rubygems/test_gem_commands_yank_command.rb271
-rw-r--r--test/rubygems/test_gem_config_file.rb400
-rw-r--r--test/rubygems/test_gem_console_ui.rb19
-rw-r--r--test/rubygems/test_gem_dependency.rb205
-rw-r--r--test/rubygems/test_gem_dependency_installer.rb913
-rw-r--r--test/rubygems/test_gem_dependency_list.rb133
-rw-r--r--test/rubygems/test_gem_dependency_resolution_error.rb24
-rw-r--r--test/rubygems/test_gem_doctor.rb126
-rw-r--r--test/rubygems/test_gem_ext_builder.rb375
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder.rb229
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore1
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec10
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock249
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml10
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs27
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb3
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore1
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock249
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml10
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec10
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs51
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb34
-rw-r--r--test/rubygems/test_gem_ext_cargo_builder_unit.rb60
-rw-r--r--test/rubygems/test_gem_ext_cmake_builder.rb144
-rw-r--r--test/rubygems/test_gem_ext_configure_builder.rb59
-rw-r--r--test/rubygems/test_gem_ext_ext_conf_builder.rb174
-rw-r--r--test/rubygems/test_gem_ext_rake_builder.rb114
-rw-r--r--test/rubygems/test_gem_gem_runner.rb65
-rw-r--r--test/rubygems/test_gem_gemcutter_utilities.rb316
-rw-r--r--test/rubygems/test_gem_impossible_dependencies_error.rb14
-rw-r--r--test/rubygems/test_gem_indexer.rb367
-rw-r--r--test/rubygems/test_gem_install_update_options.rb150
-rw-r--r--test/rubygems/test_gem_installer.rb2169
-rw-r--r--test/rubygems/test_gem_local_remote_options.rb33
-rw-r--r--test/rubygems/test_gem_name_tuple.rb78
-rw-r--r--test/rubygems/test_gem_package.rb946
-rw-r--r--test/rubygems/test_gem_package_old.rb117
-rw-r--r--test/rubygems/test_gem_package_tar_header.rb215
-rw-r--r--test/rubygems/test_gem_package_tar_header_ractor.rb61
-rw-r--r--test/rubygems/test_gem_package_tar_reader.rb84
-rw-r--r--test/rubygems/test_gem_package_tar_reader_entry.rb264
-rw-r--r--test/rubygems/test_gem_package_tar_writer.rb286
-rw-r--r--test/rubygems/test_gem_package_task.rb82
-rw-r--r--test/rubygems/test_gem_path_support.rb108
-rw-r--r--test/rubygems/test_gem_platform.rb802
-rw-r--r--test/rubygems/test_gem_rdoc.rb189
-rw-r--r--test/rubygems/test_gem_remote_fetcher.rb922
-rw-r--r--test/rubygems/test_gem_remote_fetcher_local_server.rb220
-rw-r--r--test/rubygems/test_gem_remote_fetcher_local_ssl_server.rb195
-rw-r--r--test/rubygems/test_gem_remote_fetcher_s3.rb437
-rw-r--r--test/rubygems/test_gem_request.rb409
-rw-r--r--test/rubygems/test_gem_request_connection_pools.rb107
-rw-r--r--test/rubygems/test_gem_request_set.rb331
-rw-r--r--test/rubygems/test_gem_request_set_gem_dependency_api.rb629
-rw-r--r--test/rubygems/test_gem_request_set_lockfile.rb193
-rw-r--r--test/rubygems/test_gem_request_set_lockfile_parser.rb146
-rw-r--r--test/rubygems/test_gem_request_set_lockfile_tokenizer.rb277
-rw-r--r--test/rubygems/test_gem_requirement.rb240
-rw-r--r--test/rubygems/test_gem_resolver.rb406
-rw-r--r--test/rubygems/test_gem_resolver_activation_request.rb55
-rw-r--r--test/rubygems/test_gem_resolver_api_set.rb201
-rw-r--r--test/rubygems/test_gem_resolver_api_specification.rb126
-rw-r--r--test/rubygems/test_gem_resolver_best_set.rb113
-rw-r--r--test/rubygems/test_gem_resolver_composed_set.rb8
-rw-r--r--test/rubygems/test_gem_resolver_conflict.rb40
-rw-r--r--test/rubygems/test_gem_resolver_dependency_request.rb60
-rw-r--r--test/rubygems/test_gem_resolver_git_set.rb50
-rw-r--r--test/rubygems/test_gem_resolver_git_specification.rb49
-rw-r--r--test/rubygems/test_gem_resolver_index_set.rb56
-rw-r--r--test/rubygems/test_gem_resolver_index_specification.rb46
-rw-r--r--test/rubygems/test_gem_resolver_installed_specification.rb17
-rw-r--r--test/rubygems/test_gem_resolver_installer_set.rb160
-rw-r--r--test/rubygems/test_gem_resolver_local_specification.rb20
-rw-r--r--test/rubygems/test_gem_resolver_lock_set.rb36
-rw-r--r--test/rubygems/test_gem_resolver_lock_specification.rb42
-rw-r--r--test/rubygems/test_gem_resolver_requirement_list.rb8
-rw-r--r--test/rubygems/test_gem_resolver_specification.rb26
-rw-r--r--test/rubygems/test_gem_resolver_vendor_set.rb24
-rw-r--r--test/rubygems/test_gem_resolver_vendor_specification.rb27
-rw-r--r--test/rubygems/test_gem_safe_marshal.rb516
-rw-r--r--test/rubygems/test_gem_safe_yaml.rb24
-rw-r--r--test/rubygems/test_gem_security.rb230
-rw-r--r--test/rubygems/test_gem_security_policy.rb294
-rw-r--r--test/rubygems/test_gem_security_signer.rb109
-rw-r--r--test/rubygems/test_gem_security_trust_dir.rb48
-rw-r--r--test/rubygems/test_gem_server.rb409
-rw-r--r--test/rubygems/test_gem_silent_ui.rb91
-rw-r--r--test/rubygems/test_gem_source.rb153
-rw-r--r--test/rubygems/test_gem_source_fetch_problem.rb31
-rw-r--r--test/rubygems/test_gem_source_git.rb167
-rw-r--r--test/rubygems/test_gem_source_installed.rb41
-rw-r--r--test/rubygems/test_gem_source_list.rb144
-rw-r--r--test/rubygems/test_gem_source_local.rb37
-rw-r--r--test/rubygems/test_gem_source_lock.rb72
-rw-r--r--test/rubygems/test_gem_source_specific_file.rb42
-rw-r--r--test/rubygems/test_gem_source_subpath_problem.rb50
-rw-r--r--test/rubygems/test_gem_source_vendor.rb32
-rw-r--r--test/rubygems/test_gem_spec_fetcher.rb195
-rw-r--r--test/rubygems/test_gem_specification.rb3026
-rw-r--r--test/rubygems/test_gem_stream_ui.rb128
-rw-r--r--test/rubygems/test_gem_stub_specification.rb210
-rw-r--r--test/rubygems/test_gem_text.rb30
-rw-r--r--test/rubygems/test_gem_uninstaller.rb503
-rw-r--r--test/rubygems/test_gem_unsatisfiable_dependency_error.rb12
-rw-r--r--test/rubygems/test_gem_update_suggestion.rb209
-rw-r--r--test/rubygems/test_gem_uri.rb41
-rw-r--r--test/rubygems/test_gem_uri_formatter.rb34
-rw-r--r--test/rubygems/test_gem_util.rb78
-rw-r--r--test/rubygems/test_gem_util_atomic_file_writer.rb12
-rw-r--r--test/rubygems/test_gem_validator.rb30
-rw-r--r--test/rubygems/test_gem_version.rb170
-rw-r--r--test/rubygems/test_gem_version_option.rb79
-rw-r--r--test/rubygems/test_kernel.rb126
-rw-r--r--test/rubygems/test_project_sanity.rb50
-rw-r--r--test/rubygems/test_remote_fetch_error.rb20
-rw-r--r--test/rubygems/test_require.rb750
-rw-r--r--test/rubygems/test_rubygems.rb76
-rw-r--r--test/rubygems/test_webauthn_listener.rb143
-rw-r--r--test/rubygems/test_webauthn_listener_response.rb93
-rw-r--r--test/rubygems/test_webauthn_poller.rb134
-rw-r--r--test/rubygems/utilities.rb452
-rw-r--r--test/rubygems/wrong_key_cert.pem31
-rw-r--r--test/rubygems/wrong_key_cert_32.pem31
-rw-r--r--test/runner.rb46
-rw-r--r--test/scanf/data.txt6
-rw-r--r--test/scanf/test_scanf.rb304
-rw-r--r--test/scanf/test_scanfblocks.rb82
-rw-r--r--test/scanf/test_scanfio.rb21
-rw-r--r--test/sdbm/test_sdbm.rb542
-rw-r--r--test/shell/test_command_processor.rb69
-rw-r--r--test/socket/test_addrinfo.rb65
-rw-r--r--test/socket/test_basicsocket.rb103
-rw-r--r--test/socket/test_nonblock.rb16
-rw-r--r--test/socket/test_socket.rb455
-rw-r--r--test/socket/test_sockopt.rb19
-rw-r--r--test/socket/test_tcp.rb346
-rw-r--r--test/socket/test_udp.rb15
-rw-r--r--test/socket/test_unix.rb253
-rw-r--r--test/stringio/test_ractor.rb27
-rw-r--r--test/stringio/test_stringio.rb484
-rw-r--r--test/strscan/test_ractor.rb32
-rw-r--r--test/strscan/test_stringscanner.rb1210
-rw-r--r--test/syslog/test_syslog_logger.rb573
-rw-r--r--test/test_abbrev.rb55
-rw-r--r--test/test_bundled_gems.rb48
-rw-r--r--test/test_cmath.rb76
-rw-r--r--test/test_delegate.rb193
-rw-r--r--test/test_extlibs.rb72
-rw-r--r--test/test_find.rb46
-rw-r--r--test/test_forwardable.rb174
-rw-r--r--test/test_ipaddr.rb402
-rw-r--r--test/test_mathn.rb120
-rw-r--r--test/test_mutex_m.rb27
-rw-r--r--test/test_observer.rb66
-rw-r--r--test/test_open3.rb64
-rw-r--r--test/test_pp.rb187
-rw-r--r--test/test_prime.rb199
-rw-r--r--test/test_pstore.rb145
-rw-r--r--test/test_pty.rb45
-rw-r--r--test/test_rbconfig.rb15
-rw-r--r--test/test_securerandom.rb131
-rw-r--r--test/test_set.rb736
-rw-r--r--test/test_shellwords.rb36
-rw-r--r--test/test_singleton.rb21
-rw-r--r--test/test_syslog.rb190
-rw-r--r--test/test_tempfile.rb206
-rw-r--r--test/test_time.rb95
-rw-r--r--test/test_timeout.rb376
-rw-r--r--test/test_tmpdir.rb148
-rw-r--r--test/test_tracer.rb56
-rw-r--r--test/test_trick.rb275
-rw-r--r--test/test_tsort.rb115
-rw-r--r--test/test_unicode_normalize.rb77
-rw-r--r--test/test_weakref.rb2
-rw-r--r--test/test_win32api.rb24
-rw-r--r--test/testunit/test4test_hideskip.rb10
-rw-r--r--test/testunit/test4test_redefinition.rb14
-rw-r--r--test/testunit/test4test_sorting.rb18
-rw-r--r--test/testunit/test_assertion.rb9
-rw-r--r--test/testunit/test_hideskip.rb17
-rw-r--r--test/testunit/test_parallel.rb192
-rw-r--r--test/testunit/test_redefinition.rb16
-rw-r--r--test/testunit/test_sorting.rb18
-rw-r--r--test/testunit/tests_for_parallel/ptest_forth.rb30
-rw-r--r--test/testunit/tests_for_parallel/runner.rb14
-rw-r--r--test/thread/test_cv.rb222
-rw-r--r--test/thread/test_queue.rb544
-rw-r--r--test/thread/test_sync.rb64
-rw-r--r--test/uri/test_common.rb175
-rw-r--r--test/uri/test_file.rb67
-rw-r--r--test/uri/test_ftp.rb20
-rw-r--r--test/uri/test_generic.rb363
-rw-r--r--test/uri/test_http.rb60
-rw-r--r--test/uri/test_ldap.rb16
-rw-r--r--test/uri/test_mailto.rb145
-rw-r--r--test/uri/test_parser.rb96
-rw-r--r--test/uri/test_ws.rb65
-rw-r--r--test/uri/test_wss.rb65
-rw-r--r--test/webrick/.htaccess1
-rw-r--r--test/webrick/test_cgi.rb156
-rw-r--r--test/webrick/test_cookie.rb132
-rw-r--r--test/webrick/test_do_not_reverse_lookup.rb71
-rw-r--r--test/webrick/test_filehandler.rb324
-rw-r--r--test/webrick/test_htmlutils.rb21
-rw-r--r--test/webrick/test_httpauth.rb204
-rw-r--r--test/webrick/test_httpproxy.rb290
-rw-r--r--test/webrick/test_httprequest.rb417
-rw-r--r--test/webrick/test_httpresponse.rb150
-rw-r--r--test/webrick/test_httpserver.rb418
-rw-r--r--test/webrick/test_httputils.rb101
-rw-r--r--test/webrick/test_httpversion.rb41
-rw-r--r--test/webrick/test_server.rb162
-rw-r--r--test/webrick/test_utils.rb110
-rw-r--r--test/webrick/utils.rb71
-rw-r--r--test/webrick/webrick.cgi36
-rw-r--r--test/webrick/webrick_long_filename.cgi36
-rw-r--r--test/win32/test_registry.rb256
-rw-r--r--test/win32ole/err_in_callback.rb10
-rw-r--r--test/win32ole/orig_data.csv5
-rw-r--r--test/win32ole/test_err_in_callback.rb56
-rw-r--r--test/win32ole/test_folderitem2_invokeverb.rb66
-rw-r--r--test/win32ole/test_nil2vtempty.rb37
-rw-r--r--test/win32ole/test_ole_methods.rb37
-rw-r--r--test/win32ole/test_propertyputref.rb31
-rw-r--r--test/win32ole/test_thread.rb34
-rw-r--r--test/win32ole/test_win32ole.rb568
-rw-r--r--test/win32ole/test_win32ole_event.rb401
-rw-r--r--test/win32ole/test_win32ole_method.rb147
-rw-r--r--test/win32ole/test_win32ole_param.rb107
-rw-r--r--test/win32ole/test_win32ole_record.rb213
-rw-r--r--test/win32ole/test_win32ole_type.rb250
-rw-r--r--test/win32ole/test_win32ole_typelib.rb117
-rw-r--r--test/win32ole/test_win32ole_variable.rb62
-rw-r--r--test/win32ole/test_win32ole_variant.rb722
-rw-r--r--test/win32ole/test_win32ole_variant_m.rb36
-rw-r--r--test/win32ole/test_win32ole_variant_outarg.rb69
-rw-r--r--test/win32ole/test_word.rb68
-rw-r--r--test/xmlrpc/data/blog.xml18
-rw-r--r--test/xmlrpc/data/bug_bool.expected3
-rw-r--r--test/xmlrpc/data/bug_bool.xml8
-rw-r--r--test/xmlrpc/data/bug_cdata.expected3
-rw-r--r--test/xmlrpc/data/bug_cdata.xml8
-rw-r--r--test/xmlrpc/data/bug_covert.expected10
-rw-r--r--test/xmlrpc/data/bug_covert.xml6
-rw-r--r--test/xmlrpc/data/datetime_iso8601.xml8
-rw-r--r--test/xmlrpc/data/fault.xml16
-rw-r--r--test/xmlrpc/data/value.expected7
-rw-r--r--test/xmlrpc/data/value.xml22
-rw-r--r--test/xmlrpc/data/xml1.expected243
-rw-r--r--test/xmlrpc/data/xml1.xml1
-rw-r--r--test/xmlrpc/htpasswd2
-rw-r--r--test/xmlrpc/test_client.rb323
-rw-r--r--test/xmlrpc/test_cookie.rb97
-rw-r--r--test/xmlrpc/test_datetime.rb162
-rw-r--r--test/xmlrpc/test_features.rb51
-rw-r--r--test/xmlrpc/test_marshal.rb111
-rw-r--r--test/xmlrpc/test_parser.rb94
-rw-r--r--test/xmlrpc/test_webrick_server.rb136
-rw-r--r--test/xmlrpc/webrick_testing.rb61
-rw-r--r--test/yaml/test_dbm.rb46
-rw-r--r--test/yaml/test_store.rb184
-rw-r--r--test/zlib/test_zlib.rb464
-rw-r--r--thread.c5081
-rw-r--r--thread_none.c344
-rw-r--r--thread_none.h21
-rw-r--r--thread_pthread.c3856
-rw-r--r--thread_pthread.h179
-rw-r--r--thread_pthread_mn.c1109
-rw-r--r--thread_sync.c1854
-rw-r--r--thread_sync.rb537
-rw-r--r--thread_win32.c793
-rw-r--r--thread_win32.h46
-rw-r--r--time.c4888
-rw-r--r--timev.h38
-rw-r--r--timev.rb460
-rw-r--r--tool/annocheck/Dockerfile4
-rw-r--r--tool/annocheck/Dockerfile-copy6
-rw-r--r--tool/asm_parse.rb2
-rwxr-xr-xtool/auto-style.rb284
-rwxr-xr-xtool/auto_review_pr.rb93
-rwxr-xr-xtool/bisect.sh59
-rw-r--r--tool/bundler/dev_gems.rb20
-rw-r--r--tool/bundler/dev_gems.rb.lock132
-rw-r--r--tool/bundler/rubocop_gems.rb13
-rw-r--r--tool/bundler/rubocop_gems.rb.lock159
-rw-r--r--tool/bundler/standard_gems.rb13
-rw-r--r--tool/bundler/standard_gems.rb.lock179
-rw-r--r--tool/bundler/test_gems.rb18
-rw-r--r--tool/bundler/test_gems.rb.lock106
-rw-r--r--tool/bundler/vendor_gems.rb17
-rw-r--r--tool/bundler/vendor_gems.rb.lock75
-rwxr-xr-xtool/change_maker.rb34
-rwxr-xr-xtool/checksum.rb8
-rw-r--r--tool/colors (renamed from test/colors)0
-rwxr-xr-xtool/commit-email.rb372
-rwxr-xr-xtool/darwin-ar6
-rwxr-xr-xtool/darwin-cc9
-rwxr-xr-xtool/disable_ipv6.sh9
-rw-r--r--tool/downloader.rb417
-rwxr-xr-xtool/enc-case-folding.rb416
-rw-r--r--tool/enc-emoji-citrus-gen.rb8
-rwxr-xr-xtool/enc-unicode.rb374
-rw-r--r--tool/eval.rb5
-rwxr-xr-xtool/expand-config.rb18
-rwxr-xr-xtool/extlibs.rb354
-rw-r--r--tool/fake.rb50
-rwxr-xr-xtool/fetch-bundled_gems.rb54
-rwxr-xr-xtool/file2lastrev.rb104
-rwxr-xr-xtool/format-release245
-rwxr-xr-xtool/gem-unpack.rb18
-rwxr-xr-xtool/gen-github-release.rb66
-rwxr-xr-xtool/gen-mailmap.rb47
-rwxr-xr-xtool/gen_dummy_probes.rb24
-rwxr-xr-xtool/gen_ruby_tapset.rb14
-rw-r--r--tool/generic_erb.rb70
-rwxr-xr-xtool/git-refresh46
-rw-r--r--tool/gperf.sed4
-rwxr-xr-xtool/id2token.rb15
-rwxr-xr-xtool/ifchange66
-rwxr-xr-xtool/insns2vm.rb18
-rw-r--r--tool/install-sh6
-rwxr-xr-xtool/instruction.rb1346
-rwxr-xr-xtool/intern_ids.rb35
-rw-r--r--tool/jisx0208.rb84
-rwxr-xr-xtool/leaked-globals116
-rw-r--r--tool/lib/-test-/integer.rb14
-rw-r--r--tool/lib/_tmpdir.rb100
-rw-r--r--tool/lib/bundle_env.rb4
-rw-r--r--tool/lib/bundled_gem.rb126
-rw-r--r--tool/lib/colorize.rb82
-rw-r--r--tool/lib/core_assertions.rb1033
-rw-r--r--tool/lib/dump.gdb17
-rw-r--r--tool/lib/dump.lldb13
-rw-r--r--tool/lib/envutil.rb497
-rw-r--r--tool/lib/find_executable.rb22
-rw-r--r--tool/lib/gc_checker.rb36
-rw-r--r--tool/lib/gem_env.rb1
-rw-r--r--tool/lib/iseq_loader_checker.rb90
-rw-r--r--tool/lib/jisx0208.rb86
-rw-r--r--tool/lib/launchable.rb91
-rw-r--r--tool/lib/leakchecker.rb321
-rw-r--r--tool/lib/memory_status.rb171
-rw-r--r--tool/lib/output.rb70
-rw-r--r--tool/lib/path.rb101
-rw-r--r--tool/lib/profile_test_all.rb91
-rw-r--r--tool/lib/test/jobserver.rb47
-rw-r--r--tool/lib/test/unit.rb1896
-rw-r--r--tool/lib/test/unit/assertions.rb844
-rw-r--r--tool/lib/test/unit/parallel.rb221
-rw-r--r--tool/lib/test/unit/testcase.rb298
-rw-r--r--tool/lib/tracepointchecker.rb126
-rw-r--r--tool/lib/vcs.rb656
-rw-r--r--tool/lib/vpath.rb92
-rw-r--r--tool/lib/zombie_hunter.rb10
-rwxr-xr-xtool/ln_sr.rb131
-rw-r--r--tool/lrama/LEGAL.md12
-rw-r--r--tool/lrama/MIT21
-rw-r--r--tool/lrama/NEWS.md1032
-rwxr-xr-xtool/lrama/exe/lrama7
-rw-r--r--tool/lrama/lib/lrama.rb22
-rw-r--r--tool/lrama/lib/lrama/bitmap.rb47
-rw-r--r--tool/lrama/lib/lrama/command.rb120
-rw-r--r--tool/lrama/lib/lrama/context.rb497
-rw-r--r--tool/lrama/lib/lrama/counterexamples.rb426
-rw-r--r--tool/lrama/lib/lrama/counterexamples/derivation.rb76
-rw-r--r--tool/lrama/lib/lrama/counterexamples/example.rb154
-rw-r--r--tool/lrama/lib/lrama/counterexamples/node.rb30
-rw-r--r--tool/lrama/lib/lrama/counterexamples/path.rb27
-rw-r--r--tool/lrama/lib/lrama/counterexamples/state_item.rb31
-rw-r--r--tool/lrama/lib/lrama/counterexamples/triple.rb41
-rw-r--r--tool/lrama/lib/lrama/diagram.rb77
-rw-r--r--tool/lrama/lib/lrama/digraph.rb104
-rw-r--r--tool/lrama/lib/lrama/erb.rb29
-rw-r--r--tool/lrama/lib/lrama/grammar.rb603
-rw-r--r--tool/lrama/lib/lrama/grammar/auxiliary.rb14
-rw-r--r--tool/lrama/lib/lrama/grammar/binding.rb79
-rw-r--r--tool/lrama/lib/lrama/grammar/code.rb68
-rw-r--r--tool/lrama/lib/lrama/grammar/code/destructor_code.rb53
-rw-r--r--tool/lrama/lib/lrama/grammar/code/initial_action_code.rb39
-rw-r--r--tool/lrama/lib/lrama/grammar/code/no_reference_code.rb33
-rw-r--r--tool/lrama/lib/lrama/grammar/code/printer_code.rb53
-rw-r--r--tool/lrama/lib/lrama/grammar/code/rule_action.rb109
-rw-r--r--tool/lrama/lib/lrama/grammar/counter.rb27
-rw-r--r--tool/lrama/lib/lrama/grammar/destructor.rb24
-rw-r--r--tool/lrama/lib/lrama/grammar/error_token.rb24
-rw-r--r--tool/lrama/lib/lrama/grammar/inline.rb3
-rw-r--r--tool/lrama/lib/lrama/grammar/inline/resolver.rb80
-rw-r--r--tool/lrama/lib/lrama/grammar/parameterized.rb5
-rw-r--r--tool/lrama/lib/lrama/grammar/parameterized/resolver.rb73
-rw-r--r--tool/lrama/lib/lrama/grammar/parameterized/rhs.rb45
-rw-r--r--tool/lrama/lib/lrama/grammar/parameterized/rule.rb36
-rw-r--r--tool/lrama/lib/lrama/grammar/percent_code.rb25
-rw-r--r--tool/lrama/lib/lrama/grammar/precedence.rb55
-rw-r--r--tool/lrama/lib/lrama/grammar/printer.rb20
-rw-r--r--tool/lrama/lib/lrama/grammar/reference.rb29
-rw-r--r--tool/lrama/lib/lrama/grammar/rule.rb135
-rw-r--r--tool/lrama/lib/lrama/grammar/rule_builder.rb270
-rw-r--r--tool/lrama/lib/lrama/grammar/stdlib.y142
-rw-r--r--tool/lrama/lib/lrama/grammar/symbol.rb149
-rw-r--r--tool/lrama/lib/lrama/grammar/symbols.rb3
-rw-r--r--tool/lrama/lib/lrama/grammar/symbols/resolver.rb362
-rw-r--r--tool/lrama/lib/lrama/grammar/type.rb32
-rw-r--r--tool/lrama/lib/lrama/grammar/union.rb23
-rw-r--r--tool/lrama/lib/lrama/lexer.rb219
-rw-r--r--tool/lrama/lib/lrama/lexer/grammar_file.rb40
-rw-r--r--tool/lrama/lib/lrama/lexer/location.rb132
-rw-r--r--tool/lrama/lib/lrama/lexer/token.rb20
-rw-r--r--tool/lrama/lib/lrama/lexer/token/base.rb73
-rw-r--r--tool/lrama/lib/lrama/lexer/token/char.rb24
-rw-r--r--tool/lrama/lib/lrama/lexer/token/empty.rb14
-rw-r--r--tool/lrama/lib/lrama/lexer/token/ident.rb11
-rw-r--r--tool/lrama/lib/lrama/lexer/token/instantiate_rule.rb30
-rw-r--r--tool/lrama/lib/lrama/lexer/token/int.rb14
-rw-r--r--tool/lrama/lib/lrama/lexer/token/str.rb11
-rw-r--r--tool/lrama/lib/lrama/lexer/token/tag.rb16
-rw-r--r--tool/lrama/lib/lrama/lexer/token/token.rb11
-rw-r--r--tool/lrama/lib/lrama/lexer/token/user_code.rb109
-rw-r--r--tool/lrama/lib/lrama/logger.rb31
-rw-r--r--tool/lrama/lib/lrama/option_parser.rb223
-rw-r--r--tool/lrama/lib/lrama/options.rb46
-rw-r--r--tool/lrama/lib/lrama/output.rb452
-rw-r--r--tool/lrama/lib/lrama/parser.rb2275
-rw-r--r--tool/lrama/lib/lrama/reporter.rb39
-rw-r--r--tool/lrama/lib/lrama/reporter/conflicts.rb44
-rw-r--r--tool/lrama/lib/lrama/reporter/grammar.rb39
-rw-r--r--tool/lrama/lib/lrama/reporter/precedences.rb54
-rw-r--r--tool/lrama/lib/lrama/reporter/profile.rb4
-rw-r--r--tool/lrama/lib/lrama/reporter/profile/call_stack.rb45
-rw-r--r--tool/lrama/lib/lrama/reporter/profile/memory.rb44
-rw-r--r--tool/lrama/lib/lrama/reporter/rules.rb43
-rw-r--r--tool/lrama/lib/lrama/reporter/states.rb387
-rw-r--r--tool/lrama/lib/lrama/reporter/terms.rb44
-rw-r--r--tool/lrama/lib/lrama/state.rb534
-rw-r--r--tool/lrama/lib/lrama/state/action.rb5
-rw-r--r--tool/lrama/lib/lrama/state/action/goto.rb33
-rw-r--r--tool/lrama/lib/lrama/state/action/reduce.rb71
-rw-r--r--tool/lrama/lib/lrama/state/action/shift.rb39
-rw-r--r--tool/lrama/lib/lrama/state/inadequacy_annotation.rb140
-rw-r--r--tool/lrama/lib/lrama/state/item.rb120
-rw-r--r--tool/lrama/lib/lrama/state/reduce_reduce_conflict.rb24
-rw-r--r--tool/lrama/lib/lrama/state/resolved_conflict.rb65
-rw-r--r--tool/lrama/lib/lrama/state/shift_reduce_conflict.rb24
-rw-r--r--tool/lrama/lib/lrama/states.rb867
-rw-r--r--tool/lrama/lib/lrama/tracer.rb51
-rw-r--r--tool/lrama/lib/lrama/tracer/actions.rb22
-rw-r--r--tool/lrama/lib/lrama/tracer/closure.rb30
-rw-r--r--tool/lrama/lib/lrama/tracer/duration.rb38
-rw-r--r--tool/lrama/lib/lrama/tracer/only_explicit_rules.rb24
-rw-r--r--tool/lrama/lib/lrama/tracer/rules.rb23
-rw-r--r--tool/lrama/lib/lrama/tracer/state.rb33
-rw-r--r--tool/lrama/lib/lrama/version.rb6
-rw-r--r--tool/lrama/lib/lrama/warnings.rb33
-rw-r--r--tool/lrama/lib/lrama/warnings/conflicts.rb27
-rw-r--r--tool/lrama/lib/lrama/warnings/implicit_empty.rb29
-rw-r--r--tool/lrama/lib/lrama/warnings/name_conflicts.rb63
-rw-r--r--tool/lrama/lib/lrama/warnings/redefined_rules.rb23
-rw-r--r--tool/lrama/lib/lrama/warnings/required.rb23
-rw-r--r--tool/lrama/lib/lrama/warnings/useless_precedence.rb25
-rw-r--r--tool/lrama/template/bison/_yacc.h79
-rw-r--r--tool/lrama/template/bison/yacc.c2068
-rw-r--r--tool/lrama/template/bison/yacc.h40
-rw-r--r--tool/lrama/template/diagram/diagram.html102
-rw-r--r--tool/m4/_colorize_result_prepare.m434
-rw-r--r--tool/m4/ac_msg_result.m45
-rw-r--r--tool/m4/colorize_result.m49
-rw-r--r--tool/m4/ruby_append_option.m49
-rw-r--r--tool/m4/ruby_append_options.m47
-rw-r--r--tool/m4/ruby_check_builtin_func.m410
-rw-r--r--tool/m4/ruby_check_builtin_overflow.m428
-rw-r--r--tool/m4/ruby_check_builtin_setjmp.m427
-rw-r--r--tool/m4/ruby_check_header.m48
-rw-r--r--tool/m4/ruby_check_printf_prefix.m429
-rw-r--r--tool/m4/ruby_check_setjmp.m417
-rw-r--r--tool/m4/ruby_check_signedness.m45
-rw-r--r--tool/m4/ruby_check_sizeof.m4108
-rw-r--r--tool/m4/ruby_check_sysconf.m413
-rw-r--r--tool/m4/ruby_cppoutfile.m418
-rw-r--r--tool/m4/ruby_decl_attribute.m445
-rw-r--r--tool/m4/ruby_default_arch.m421
-rw-r--r--tool/m4/ruby_define_if.m46
-rw-r--r--tool/m4/ruby_defint.m441
-rw-r--r--tool/m4/ruby_dtrace_available.m420
-rw-r--r--tool/m4/ruby_dtrace_postprocess.m430
-rw-r--r--tool/m4/ruby_func_attribute.m47
-rw-r--r--tool/m4/ruby_mingw32.m424
-rw-r--r--tool/m4/ruby_modular_gc.m441
-rw-r--r--tool/m4/ruby_prepend_option.m45
-rw-r--r--tool/m4/ruby_prog_gnu_ld.m410
-rw-r--r--tool/m4/ruby_prog_makedirs.m49
-rw-r--r--tool/m4/ruby_replace_funcs.m413
-rw-r--r--tool/m4/ruby_replace_type.m468
-rw-r--r--tool/m4/ruby_require_funcs.m413
-rw-r--r--tool/m4/ruby_rm_recursive.m418
-rw-r--r--tool/m4/ruby_setjmp_type.m443
-rw-r--r--tool/m4/ruby_stack_grow_direction.m430
-rw-r--r--tool/m4/ruby_thread.m480
-rw-r--r--tool/m4/ruby_try_cflags.m441
-rw-r--r--tool/m4/ruby_try_cxxflags.m417
-rw-r--r--tool/m4/ruby_try_ldflags.m415
-rw-r--r--tool/m4/ruby_type_attribute.m48
-rw-r--r--tool/m4/ruby_universal_arch.m4122
-rw-r--r--tool/m4/ruby_wasm_tools.m425
-rw-r--r--tool/m4/ruby_werror_flag.m418
-rwxr-xr-xtool/make-snapshot598
-rw-r--r--tool/make_hgraph.rb7
-rwxr-xr-xtool/mdoc2man.rb52
-rwxr-xr-xtool/merger.rb407
-rwxr-xr-xtool/missing-baseruby.bat30
-rw-r--r--tool/mk_builtin_loader.rb429
-rw-r--r--tool/mk_call_iseq_optimized.rb72
-rwxr-xr-xtool/mk_rbbin.rb48
-rwxr-xr-xtool/mkconfig.rb191
-rwxr-xr-xtool/mkrunnable.rb84
-rwxr-xr-xtool/node_name.rb12
-rw-r--r--tool/notes-github-pr.rb138
-rw-r--r--tool/notify-slack-commits.rb87
-rwxr-xr-xtool/outdate-bundled-gems.rb190
-rw-r--r--tool/parse.rb3
-rw-r--r--tool/prereq.status45
-rwxr-xr-xtool/rbinstall.rb1154
-rw-r--r--tool/rbs_skip_tests57
-rw-r--r--tool/rbs_skip_tests_windows111
-rwxr-xr-xtool/rbuninstall.rb52
-rwxr-xr-xtool/rdoc-srcdir30
-rwxr-xr-xtool/redmine-backporter.rb265
-rwxr-xr-xtool/release.sh57
-rwxr-xr-xtool/releng/gen-mail.rb55
-rwxr-xr-xtool/releng/gen-release-note.rb36
-rwxr-xr-xtool/releng/update-www-meta.rb200
-rwxr-xr-xtool/rmdirs3
-rwxr-xr-xtool/ruby-version.rb52
-rw-r--r--tool/ruby_vm/controllers/application_controller.rb25
-rw-r--r--tool/ruby_vm/helpers/c_escape.rb130
-rw-r--r--tool/ruby_vm/helpers/dumper.rb109
-rw-r--r--tool/ruby_vm/helpers/scanner.rb52
-rw-r--r--tool/ruby_vm/loaders/insns_def.rb99
-rw-r--r--tool/ruby_vm/loaders/opt_insn_unif_def.rb33
-rw-r--r--tool/ruby_vm/loaders/opt_operand_def.rb55
-rw-r--r--tool/ruby_vm/loaders/vm_opts_h.rb36
-rw-r--r--tool/ruby_vm/models/attribute.rb58
-rw-r--r--tool/ruby_vm/models/bare_instruction.rb236
-rw-r--r--tool/ruby_vm/models/c_expr.rb44
-rw-r--r--tool/ruby_vm/models/instructions.rb23
-rw-r--r--tool/ruby_vm/models/instructions_unification.rb42
-rw-r--r--tool/ruby_vm/models/operands_unification.rb141
-rw-r--r--tool/ruby_vm/models/trace_instruction.rb70
-rw-r--r--tool/ruby_vm/models/typemap.rb62
-rw-r--r--tool/ruby_vm/models/zjit_instruction.rb56
-rw-r--r--tool/ruby_vm/scripts/converter.rb29
-rw-r--r--tool/ruby_vm/scripts/insns2vm.rb100
-rw-r--r--tool/ruby_vm/views/_attributes.erb35
-rw-r--r--tool/ruby_vm/views/_c_expr.erb17
-rw-r--r--tool/ruby_vm/views/_comptime_insn_stack_increase.erb71
-rw-r--r--tool/ruby_vm/views/_copyright.erb31
-rw-r--r--tool/ruby_vm/views/_insn_entry.erb75
-rw-r--r--tool/ruby_vm/views/_insn_leaf_info.erb18
-rw-r--r--tool/ruby_vm/views/_insn_len_info.erb36
-rw-r--r--tool/ruby_vm/views/_insn_name_info.erb59
-rw-r--r--tool/ruby_vm/views/_insn_operand_info.erb69
-rw-r--r--tool/ruby_vm/views/_insn_type_chars.erb32
-rw-r--r--tool/ruby_vm/views/_leaf_helpers.erb50
-rw-r--r--tool/ruby_vm/views/_notice.erb22
-rw-r--r--tool/ruby_vm/views/_sp_inc_helpers.erb37
-rw-r--r--tool/ruby_vm/views/_trace_instruction.erb21
-rw-r--r--tool/ruby_vm/views/_zjit_helpers.erb31
-rw-r--r--tool/ruby_vm/views/_zjit_instruction.erb12
-rw-r--r--tool/ruby_vm/views/insns.inc.erb41
-rw-r--r--tool/ruby_vm/views/insns_info.inc.erb26
-rw-r--r--tool/ruby_vm/views/lib/ruby_vm/rjit/instruction.rb.erb14
-rw-r--r--tool/ruby_vm/views/optinsn.inc.erb71
-rw-r--r--tool/ruby_vm/views/optunifs.inc.erb18
-rw-r--r--tool/ruby_vm/views/vm.inc.erb34
-rw-r--r--tool/ruby_vm/views/vmtc.inc.erb29
-rw-r--r--tool/run-gcov.rb55
-rw-r--r--tool/run-lcov.rb172
-rwxr-xr-xtool/runruby.rb125
-rw-r--r--tool/search-cgvars.rb55
-rwxr-xr-xtool/strip-rdoc.rb33
-rwxr-xr-xtool/sync_default_gems.rb943
-rwxr-xr-xtool/test-annocheck.sh40
-rw-r--r--tool/test-bundled-gems.rb140
-rw-r--r--tool/test-coverage.rb135
-rw-r--r--tool/test/init.rb26
-rw-r--r--tool/test/runner.rb14
-rw-r--r--tool/test/test_commit_email.rb102
-rw-r--r--tool/test/test_jisx0208.rb2
-rwxr-xr-xtool/test/test_sync_default_gems.rb373
-rw-r--r--tool/test/testunit/metametameta.rb70
-rw-r--r--tool/test/testunit/test4test_hideskip.rb14
-rw-r--r--tool/test/testunit/test4test_load_failure.rb1
-rw-r--r--tool/test/testunit/test4test_redefinition.rb14
-rw-r--r--tool/test/testunit/test4test_sorting.rb18
-rw-r--r--tool/test/testunit/test4test_timeout.rb15
-rw-r--r--tool/test/testunit/test_assertion.rb228
-rw-r--r--tool/test/testunit/test_hideskip.rb20
-rw-r--r--tool/test/testunit/test_launchable.rb70
-rw-r--r--tool/test/testunit/test_load_failure.rb23
-rw-r--r--tool/test/testunit/test_minitest_unit.rb1488
-rw-r--r--tool/test/testunit/test_parallel.rb223
-rw-r--r--tool/test/testunit/test_redefinition.rb11
-rw-r--r--tool/test/testunit/test_sorting.rb75
-rw-r--r--tool/test/testunit/test_timeout.rb10
-rw-r--r--tool/test/testunit/tests_for_parallel/ptest_first.rb (renamed from test/testunit/tests_for_parallel/ptest_first.rb)0
-rw-r--r--tool/test/testunit/tests_for_parallel/ptest_forth.rb30
-rw-r--r--tool/test/testunit/tests_for_parallel/ptest_second.rb (renamed from test/testunit/tests_for_parallel/ptest_second.rb)0
-rw-r--r--tool/test/testunit/tests_for_parallel/ptest_third.rb (renamed from test/testunit/tests_for_parallel/ptest_third.rb)0
-rw-r--r--tool/test/testunit/tests_for_parallel/runner.rb14
-rw-r--r--tool/test/testunit/tests_for_parallel/slow_helper.rb8
-rw-r--r--tool/test/testunit/tests_for_parallel/test4test_hungup.rb15
-rw-r--r--tool/transcode-tblgen.rb58
-rwxr-xr-xtool/travis_retry.sh13
-rwxr-xr-xtool/travis_wait.sh18
-rwxr-xr-xtool/update-NEWS-gemlist.rb52
-rw-r--r--tool/update-NEWS-refs.rb38
-rwxr-xr-xtool/update-bundled_gems.rb41
-rwxr-xr-xtool/update-deps122
-rw-r--r--tool/vcs.rb360
-rw-r--r--tool/vpath.rb87
-rw-r--r--tool/vtlh.rb2
-rwxr-xr-xtool/wasm-clangw9
-rwxr-xr-xtool/ytab.sed59
-rwxr-xr-xtool/zjit_bisect.rb158
-rw-r--r--tool/zjit_iongraph.html551
-rwxr-xr-xtool/zjit_iongraph.rb38
-rw-r--r--trace_point.rb420
-rw-r--r--transcode.c1241
-rw-r--r--transcode_data.h37
-rw-r--r--universal_parser.c211
-rw-r--r--util.c3705
-rw-r--r--variable.c4715
-rw-r--r--variable.h27
-rw-r--r--vcpkg.json11
-rw-r--r--version.c243
-rw-r--r--version.h72
-rw-r--r--vm.c5060
-rw-r--r--vm_args.c1407
-rw-r--r--vm_backtrace.c1656
-rw-r--r--vm_callinfo.h655
-rw-r--r--vm_core.h2465
-rw-r--r--vm_debug.h101
-rw-r--r--vm_dump.c1957
-rw-r--r--vm_eval.c2871
-rw-r--r--vm_exec.c96
-rw-r--r--vm_exec.h114
-rw-r--r--vm_insnhelper.c8090
-rw-r--r--vm_insnhelper.h246
-rw-r--r--vm_method.c3237
-rw-r--r--vm_opts.h36
-rw-r--r--vm_sync.c310
-rw-r--r--vm_sync.h160
-rw-r--r--vm_trace.c2164
-rw-r--r--vsnprintf.c50
-rw-r--r--warning.rb59
-rw-r--r--wasm/GNUmakefile.in32
-rw-r--r--wasm/README.md78
-rw-r--r--wasm/asyncify.h23
-rw-r--r--wasm/fiber.c83
-rw-r--r--wasm/fiber.h43
-rw-r--r--wasm/machine.c62
-rw-r--r--wasm/machine.h25
-rw-r--r--wasm/machine_core.S25
-rw-r--r--wasm/missing.c192
-rw-r--r--wasm/runtime.c54
-rw-r--r--wasm/setjmp.c223
-rw-r--r--wasm/setjmp.h96
-rw-r--r--wasm/setjmp_core.S27
-rw-r--r--wasm/tests/fiber_test.c66
-rw-r--r--wasm/tests/machine_test.c115
-rw-r--r--wasm/tests/setjmp_test.c108
-rwxr-xr-xwasm/wasm-opt36
-rw-r--r--weakmap.c1003
-rw-r--r--win32/Makefile.sub768
-rw-r--r--win32/README.win32141
-rwxr-xr-xwin32/configure.bat264
-rw-r--r--win32/dir.h12
-rw-r--r--win32/file.c756
-rw-r--r--win32/file.h44
-rwxr-xr-xwin32/ifchange.bat158
-rwxr-xr-xwin32/install-buildtools.cmd14
-rwxr-xr-xwin32/install-msys-packages.cmd29
-rwxr-xr-xwin32/lastrev.bat30
-rwxr-xr-xwin32/makedirs.bat2
-rwxr-xr-xwin32/mkexports.rb33
-rwxr-xr-xwin32/resource.rb4
-rwxr-xr-xwin32/rm.bat72
-rwxr-xr-xwin32/rmdirs.bat8
-rwxr-xr-x[-rw-r--r--]win32/rtname.cmd1
-rw-r--r--win32/ruby.manifest8
-rw-r--r--win32/setup.mak277
-rw-r--r--win32/stub.c48
-rwxr-xr-xwin32/vssetup.cmd56
-rw-r--r--win32/win32.c7537
-rw-r--r--win32/winmain.c4
-rw-r--r--yjit.c538
-rw-r--r--yjit.h81
-rw-r--r--yjit.rb550
-rw-r--r--yjit/.gitignore2
-rw-r--r--yjit/Cargo.lock42
-rw-r--r--yjit/Cargo.toml28
-rw-r--r--yjit/bindgen/Cargo.lock392
-rw-r--r--yjit/bindgen/Cargo.toml12
-rw-r--r--yjit/bindgen/src/main.rs415
-rw-r--r--yjit/not_gmake.mk18
-rw-r--r--yjit/src/asm/arm64/README.md16
-rw-r--r--yjit/src/asm/arm64/arg/bitmask_imm.rs255
-rw-r--r--yjit/src/asm/arm64/arg/condition.rs52
-rw-r--r--yjit/src/asm/arm64/arg/inst_offset.rs47
-rw-r--r--yjit/src/asm/arm64/arg/mod.rs18
-rw-r--r--yjit/src/asm/arm64/arg/sf.rs19
-rw-r--r--yjit/src/asm/arm64/arg/shifted_imm.rs81
-rw-r--r--yjit/src/asm/arm64/arg/sys_reg.rs6
-rw-r--r--yjit/src/asm/arm64/arg/truncate.rs66
-rw-r--r--yjit/src/asm/arm64/inst/atomic.rs86
-rw-r--r--yjit/src/asm/arm64/inst/branch.rs100
-rw-r--r--yjit/src/asm/arm64/inst/branch_cond.rs78
-rw-r--r--yjit/src/asm/arm64/inst/breakpoint.rs55
-rw-r--r--yjit/src/asm/arm64/inst/call.rs104
-rw-r--r--yjit/src/asm/arm64/inst/conditional.rs73
-rw-r--r--yjit/src/asm/arm64/inst/data_imm.rs143
-rw-r--r--yjit/src/asm/arm64/inst/data_reg.rs192
-rw-r--r--yjit/src/asm/arm64/inst/halfword_imm.rs179
-rw-r--r--yjit/src/asm/arm64/inst/load_literal.rs89
-rw-r--r--yjit/src/asm/arm64/inst/load_register.rs108
-rw-r--r--yjit/src/asm/arm64/inst/load_store.rs249
-rw-r--r--yjit/src/asm/arm64/inst/load_store_exclusive.rs109
-rw-r--r--yjit/src/asm/arm64/inst/logical_imm.rs154
-rw-r--r--yjit/src/asm/arm64/inst/logical_reg.rs207
-rw-r--r--yjit/src/asm/arm64/inst/madd.rs73
-rw-r--r--yjit/src/asm/arm64/inst/mod.rs54
-rw-r--r--yjit/src/asm/arm64/inst/mov.rs155
-rw-r--r--yjit/src/asm/arm64/inst/nop.rs44
-rw-r--r--yjit/src/asm/arm64/inst/pc_rel.rs107
-rw-r--r--yjit/src/asm/arm64/inst/reg_pair.rs212
-rw-r--r--yjit/src/asm/arm64/inst/sbfm.rs103
-rw-r--r--yjit/src/asm/arm64/inst/shift_imm.rs147
-rw-r--r--yjit/src/asm/arm64/inst/smulh.rs60
-rw-r--r--yjit/src/asm/arm64/inst/sys_reg.rs86
-rw-r--r--yjit/src/asm/arm64/inst/test_bit.rs133
-rw-r--r--yjit/src/asm/arm64/mod.rs1680
-rw-r--r--yjit/src/asm/arm64/opnd.rs195
-rw-r--r--yjit/src/asm/mod.rs847
-rw-r--r--yjit/src/asm/x86_64/mod.rs1456
-rw-r--r--yjit/src/asm/x86_64/tests.rs460
-rw-r--r--yjit/src/backend/arm64/mod.rs1829
-rw-r--r--yjit/src/backend/ir.rs2154
-rw-r--r--yjit/src/backend/mod.rs14
-rw-r--r--yjit/src/backend/tests.rs329
-rw-r--r--yjit/src/backend/x86_64/mod.rs1340
-rw-r--r--yjit/src/codegen.rs11433
-rw-r--r--yjit/src/core.rs4603
-rw-r--r--yjit/src/cruby.rs831
-rw-r--r--yjit/src/cruby_bindings.inc.rs1322
-rw-r--r--yjit/src/disasm.rs400
-rw-r--r--yjit/src/invariants.rs709
-rw-r--r--yjit/src/lib.rs31
-rw-r--r--yjit/src/log.rs179
-rw-r--r--yjit/src/options.rs432
-rw-r--r--yjit/src/stats.rs1064
-rw-r--r--yjit/src/utils.rs287
-rw-r--r--yjit/src/virtualmem.rs488
-rw-r--r--yjit/src/yjit.rs277
-rw-r--r--yjit/yjit.mk60
-rw-r--r--zjit.c325
-rw-r--r--zjit.h47
-rw-r--r--zjit.rb357
-rw-r--r--zjit/.gitignore2
-rw-r--r--zjit/Cargo.lock74
-rw-r--r--zjit/Cargo.toml23
-rw-r--r--zjit/bindgen/Cargo.lock392
-rw-r--r--zjit/bindgen/Cargo.toml12
-rw-r--r--zjit/bindgen/src/main.rs454
-rw-r--r--zjit/build.rs37
-rw-r--r--zjit/src/asm/arm64/README.md16
-rw-r--r--zjit/src/asm/arm64/arg/bitmask_imm.rs255
-rw-r--r--zjit/src/asm/arm64/arg/condition.rs52
-rw-r--r--zjit/src/asm/arm64/arg/inst_offset.rs47
-rw-r--r--zjit/src/asm/arm64/arg/mod.rs18
-rw-r--r--zjit/src/asm/arm64/arg/sf.rs19
-rw-r--r--zjit/src/asm/arm64/arg/shifted_imm.rs80
-rw-r--r--zjit/src/asm/arm64/arg/sys_reg.rs6
-rw-r--r--zjit/src/asm/arm64/arg/truncate.rs66
-rw-r--r--zjit/src/asm/arm64/inst/atomic.rs86
-rw-r--r--zjit/src/asm/arm64/inst/branch.rs100
-rw-r--r--zjit/src/asm/arm64/inst/branch_cond.rs78
-rw-r--r--zjit/src/asm/arm64/inst/breakpoint.rs55
-rw-r--r--zjit/src/asm/arm64/inst/call.rs104
-rw-r--r--zjit/src/asm/arm64/inst/conditional.rs73
-rw-r--r--zjit/src/asm/arm64/inst/data_imm.rs143
-rw-r--r--zjit/src/asm/arm64/inst/data_reg.rs192
-rw-r--r--zjit/src/asm/arm64/inst/halfword_imm.rs179
-rw-r--r--zjit/src/asm/arm64/inst/load_literal.rs91
-rw-r--r--zjit/src/asm/arm64/inst/load_register.rs108
-rw-r--r--zjit/src/asm/arm64/inst/load_store.rs255
-rw-r--r--zjit/src/asm/arm64/inst/load_store_exclusive.rs109
-rw-r--r--zjit/src/asm/arm64/inst/logical_imm.rs154
-rw-r--r--zjit/src/asm/arm64/inst/logical_reg.rs207
-rw-r--r--zjit/src/asm/arm64/inst/madd.rs73
-rw-r--r--zjit/src/asm/arm64/inst/mod.rs54
-rw-r--r--zjit/src/asm/arm64/inst/mov.rs192
-rw-r--r--zjit/src/asm/arm64/inst/nop.rs44
-rw-r--r--zjit/src/asm/arm64/inst/pc_rel.rs107
-rw-r--r--zjit/src/asm/arm64/inst/reg_pair.rs212
-rw-r--r--zjit/src/asm/arm64/inst/sbfm.rs103
-rw-r--r--zjit/src/asm/arm64/inst/shift_imm.rs147
-rw-r--r--zjit/src/asm/arm64/inst/smulh.rs60
-rw-r--r--zjit/src/asm/arm64/inst/sys_reg.rs86
-rw-r--r--zjit/src/asm/arm64/inst/test_bit.rs133
-rw-r--r--zjit/src/asm/arm64/mod.rs1981
-rw-r--r--zjit/src/asm/arm64/opnd.rs270
-rw-r--r--zjit/src/asm/mod.rs453
-rw-r--r--zjit/src/asm/x86_64/mod.rs1446
-rw-r--r--zjit/src/asm/x86_64/tests.rs966
-rw-r--r--zjit/src/backend/arm64/mod.rs2780
-rw-r--r--zjit/src/backend/lir.rs2674
-rw-r--r--zjit/src/backend/mod.rs18
-rw-r--r--zjit/src/backend/tests.rs307
-rw-r--r--zjit/src/backend/x86_64/mod.rs1825
-rw-r--r--zjit/src/bitset.rs126
-rw-r--r--zjit/src/cast.rs64
-rw-r--r--zjit/src/codegen.rs2897
-rw-r--r--zjit/src/cruby.rs1411
-rw-r--r--zjit/src/cruby_bindings.inc.rs2203
-rw-r--r--zjit/src/cruby_methods.rs885
-rw-r--r--zjit/src/disasm.rs52
-rw-r--r--zjit/src/distribution.rs276
-rw-r--r--zjit/src/gc.rs211
-rw-r--r--zjit/src/hir.rs7604
-rw-r--r--zjit/src/hir/opt_tests.rs11123
-rw-r--r--zjit/src/hir/tests.rs4567
-rw-r--r--zjit/src/hir_effect/gen_hir_effect.rb119
-rw-r--r--zjit/src/hir_effect/hir_effect.inc.rs55
-rw-r--r--zjit/src/hir_effect/mod.rs420
-rw-r--r--zjit/src/hir_type/gen_hir_type.rb225
-rw-r--r--zjit/src/hir_type/hir_type.inc.rs253
-rw-r--r--zjit/src/hir_type/mod.rs1063
-rw-r--r--zjit/src/invariants.rs475
-rw-r--r--zjit/src/json.rs700
-rw-r--r--zjit/src/lib.rs34
-rw-r--r--zjit/src/options.rs523
-rw-r--r--zjit/src/payload.rs116
-rw-r--r--zjit/src/profile.rs434
-rw-r--r--zjit/src/state.rs549
-rw-r--r--zjit/src/stats.rs944
-rw-r--r--zjit/src/ttycolors.rs31
-rw-r--r--zjit/src/virtualmem.rs488
-rw-r--r--zjit/zjit.mk140
13418 files changed, 1952253 insertions, 1019719 deletions
diff --git a/.dir-locals.el b/.dir-locals.el
new file mode 100644
index 0000000000..8f4b96445c
--- /dev/null
+++ b/.dir-locals.el
@@ -0,0 +1,39 @@
+;; Copyright (c) 2018 Urabe, Shyouhei. All rights reserved.
+;;
+;; This file is a part of the programming language Ruby. Permission is hereby
+;; granted, to either redistribute and/or modify this file, provided that the
+;; conditions mentioned in the file COPYING are met. Consult the file for
+;; details.
+
+((nil .
+ ((indent-tabs-mode . nil)
+ (require-final-newline . t)
+ (tab-width . 8)
+ (show-trailing-whitespace . t)
+ (whitespace-line-column . 80))) ;; See also [Misc #12277]
+
+ ;; (bat-mode . ((buffer-file-coding-system . utf-8-dos)))
+
+ (ruby-mode . ((ruby-indent-level . 2)))
+
+ (rdoc-mode . ((fill-column . 74)))
+
+ (yaml-mode . ((yaml-indent-offset . 2)))
+
+ (makefile-mode . ((indent-tabs-mode . t)))
+
+ (c-mode . ((c-file-style . "ruby")))
+
+ (c++-mode . ((c-file-style . "ruby")))
+
+ (change-log-mode .
+ ((buffer-file-coding-system . us-ascii)
+ (indent-tabs-mode . t)
+ (change-log-indent-text . 2)
+ (add-log-time-format . (lambda (&optional x y)
+ (let* ((time (or x (current-time)))
+ (system-time-locale "C")
+ (diff (+ (cadr time) 32400))
+ (lo (% diff 65536))
+ (hi (+ (car time) (/ diff 65536))))
+ (format-time-string "%a %b %e %H:%M:%S %Y" (list hi lo) t)))))))
diff --git a/.document b/.document
index fb27ba325d..82ca602bfb 100644
--- a/.document
+++ b/.document
@@ -5,9 +5,36 @@
# Process all the C source files
*.c
+*.y
# prelude
prelude.rb
+rbconfig.rb
+
+array.rb
+ast.rb
+dir.rb
+gc.rb
+hash.rb
+io.rb
+kernel.rb
+marshal.rb
+numeric.rb
+nilclass.rb
+pack.rb
+pathname_builtin.rb
+ractor.rb
+string.rb
+symbol.rb
+timev.rb
+thread_sync.rb
+trace_point.rb
+warning.rb
+yjit.rb
+zjit.rb
+
+# Errno::*
+known_errors.inc
# the lib/ directory (which has its own .document file)
lib
@@ -16,11 +43,14 @@ lib
ext
# rdoc files
-ChangeLog
-
-NEWS
+NEWS.md
README.md
README.ja.md
+COPYING
+COPYING.ja
+
+LEGAL
+
doc
diff --git a/.editorconfig b/.editorconfig
index 67abf4b978..4633a7acae 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -2,15 +2,29 @@ root = true
[*]
end_of_line = lf
+indent_size = 4
+indent_style = space
insert_final_newline = true
-trim_trailing_whitespace = true
tab_width = 8
-indent_style = tab
-indent_size = 4
+trim_trailing_whitespace = true
-[**.bat]
+[*.bat]
end_of_line = crlf
-[**.rb]
-indent_style = space
+[*.gemspec]
+indent_size = 2
+
+[*.rb]
+indent_size = 2
+
+[*.yml]
+indent_size = 2
+
+[{*[Mm]akefile*,*.mak,*.mk,depend}]
+indent_style = tab
+
+[enc/*]
+indent_size = 2
+
+[reg*.[ch]]
indent_size = 2
diff --git a/.gdbinit b/.gdbinit
index bc79f51368..bda544c641 100644
--- a/.gdbinit
+++ b/.gdbinit
@@ -1,21 +1,7 @@
-define hook-run
- set $color_type = 0
- set $color_highlite = 0
- set $color_end = 0
-end
-
define ruby_gdb_init
- if !$color_type
- set $color_type = "\033[31m"
- end
- if !$color_highlite
- set $color_highlite = "\033[36m"
- end
- if !$color_end
- set $color_end = "\033[m"
- end
- if ruby_dummy_gdb_enums.special_consts
- end
+ init-if-undefined $color_type = "\033[31m"
+ init-if-undefined $color_highlite = "\033[36m"
+ init-if-undefined $color_end = "\033[m"
end
# set prompt \033[36m(gdb)\033[m\040
@@ -63,7 +49,15 @@ define rp
else
if ($flags & RUBY_T_MASK) == RUBY_T_OBJECT
printf "%sT_OBJECT%s: ", $color_type, $color_end
- print (struct RObject *)($arg0)
+ print ((struct RObject *)($arg0))->basic
+ if ($flags & ROBJECT_EMBED)
+ print/x *((VALUE*)((struct RObject*)($arg0))->as.ary) @ (RSHAPE_CAPACITY(rb_obj_shape_id($arg0)))
+ else
+ print (((struct RObject *)($arg0))->as.heap)
+ if (((struct RObject*)($arg0))->as.heap.numiv) > 0
+ print/x *(((struct RObject*)($arg0))->as.heap.ivptr) @ (((struct RObject*)($arg0))->as.heap.numiv)
+ end
+ end
else
if ($flags & RUBY_T_MASK) == RUBY_T_CLASS
printf "%sT_CLASS%s%s: ", $color_type, ($flags & RUBY_FL_SINGLETON) ? "*" : "", $color_end
@@ -89,14 +83,13 @@ define rp
set $regsrc = ((struct RRegexp*)($arg0))->src
set $rsflags = ((struct RBasic*)$regsrc)->flags
printf "%sT_REGEXP%s: ", $color_type, $color_end
+ set $len = ((struct RString*)($arg0))->len
set print address off
- output (char *)(($rsflags & RUBY_FL_USER1) ? \
- ((struct RString*)$regsrc)->as.heap.ptr : \
- ((struct RString*)$regsrc)->as.ary)
+ output *(char *)(($rsflags & RUBY_FL_USER1) ? \
+ ((struct RString*)$regsrc)->as.heap.ptr : \
+ ((struct RString*)$regsrc)->as.embed.ary) @ $len
set print address on
- printf " len:%ld ", ($rsflags & RUBY_FL_USER1) ? \
- ((struct RString*)$regsrc)->as.heap.len : \
- (($rsflags & (RUBY_FL_USER2|RUBY_FL_USER3|RUBY_FL_USER4|RUBY_FL_USER5|RUBY_FL_USER6)) >> RUBY_FL_USHIFT+2)
+ printf " len:%ld ", $len
if $flags & RUBY_FL_USER6
printf "(none) "
end
@@ -115,26 +108,26 @@ define rp
printf "%sT_ARRAY%s: len=%ld ", $color_type, $color_end, $len
printf "(embed) "
if ($len == 0)
- printf "{(empty)} "
+ printf "{(empty)} "
else
- output/x *((VALUE*)((struct RArray*)($arg0))->as.ary) @ $len
- printf " "
+ print/x *((VALUE*)((struct RArray*)($arg0))->as.ary) @ $len
+ printf " "
end
else
set $len = ((struct RArray*)($arg0))->as.heap.len
printf "%sT_ARRAY%s: len=%ld ", $color_type, $color_end, $len
if ($flags & RUBY_FL_USER2)
- printf "(shared) shared="
- output/x ((struct RArray*)($arg0))->as.heap.aux.shared
- printf " "
+ printf "(shared) shared="
+ output/x ((struct RArray*)($arg0))->as.heap.aux.shared_root
+ printf " "
else
- printf "(ownership) capa=%ld ", ((struct RArray*)($arg0))->as.heap.aux.capa
+ printf "(ownership) capa=%ld ", ((struct RArray*)($arg0))->as.heap.aux.capa
end
if ($len == 0)
- printf "{(empty)} "
+ printf "{(empty)} "
else
- output/x *((VALUE*)((struct RArray*)($arg0))->as.heap.ptr) @ $len
- printf " "
+ print/x *((VALUE*)((struct RArray*)($arg0))->as.heap.ptr) @ $len
+ printf " "
end
end
print (struct RArray *)($arg0)
@@ -145,34 +138,29 @@ define rp
else
if ($flags & RUBY_T_MASK) == RUBY_T_HASH
printf "%sT_HASH%s: ", $color_type, $color_end,
- if ((struct RHash *)($arg0))->ntbl
- printf "len=%ld ", ((struct RHash *)($arg0))->ntbl->num_entries
+ if (((struct RHash *)($arg0))->basic.flags & RHASH_ST_TABLE_FLAG)
+ set $st = (struct st_table *)((uintptr_t)($arg0) + sizeof(struct RHash))
+ printf "st len=%ld ", $st->num_entries
+ print $st
+ else
+ printf "li len=%ld bound=%ld ", \
+ ((((struct RHash *)($arg0))->basic.flags & RHASH_AR_TABLE_SIZE_MASK) >> RHASH_AR_TABLE_SIZE_SHIFT), \
+ ((((struct RHash *)($arg0))->basic.flags & RHASH_AR_TABLE_BOUND_MASK) >> RHASH_AR_TABLE_BOUND_SHIFT)
+ print (struct ar_table_struct *)((uintptr_t)($arg0) + sizeof(struct RHash))
end
- print (struct RHash *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_STRUCT
- printf "%sT_STRUCT%s: len=%ld ", $color_type, $color_end, \
- (($flags & (RUBY_FL_USER1|RUBY_FL_USER2)) ? \
+ set $len = (($flags & (RUBY_FL_USER1|RUBY_FL_USER2)) ? \
($flags & (RUBY_FL_USER1|RUBY_FL_USER2)) >> (RUBY_FL_USHIFT+1) : \
((struct RStruct *)($arg0))->as.heap.len)
+ printf "%sT_STRUCT%s: len=%ld ", $color_type, $color_end, $len
print (struct RStruct *)($arg0)
- x/xw (($flags & (RUBY_FL_USER1|RUBY_FL_USER2)) ? \
- ((struct RStruct *)($arg0))->as.ary : \
- ((struct RStruct *)($arg0))->as.heap.ptr)
+ output/x *(($flags & (RUBY_FL_USER1|RUBY_FL_USER2)) ? \
+ ((struct RStruct *)($arg0))->as.ary : \
+ ((struct RStruct *)($arg0))->as.heap.ptr) @ $len
else
if ($flags & RUBY_T_MASK) == RUBY_T_BIGNUM
- printf "%sT_BIGNUM%s: sign=%d len=%ld ", $color_type, $color_end, \
- (($flags & RUBY_FL_USER1) != 0), \
- (($flags & RUBY_FL_USER2) ? \
- ($flags & (RUBY_FL_USER5|RUBY_FL_USER4|RUBY_FL_USER3)) >> (RUBY_FL_USHIFT+3) : \
- ((struct RBignum*)($arg0))->as.heap.len)
- if $flags & RUBY_FL_USER2
- printf "(embed) "
- end
- print (struct RBignum *)($arg0)
- x/xw (($flags & RUBY_FL_USER2) ? \
- ((struct RBignum*)($arg0))->as.ary : \
- ((struct RBignum*)($arg0))->as.heap.digits)
+ rp_bignum $arg0
else
if ($flags & RUBY_T_MASK) == RUBY_T_RATIONAL
printf "%sT_RATIONAL%s: ", $color_type, $color_end
@@ -197,12 +185,19 @@ define rp
print (struct RBasic *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_DATA
- if ((struct RTypedData *)($arg0))->typed_flag == 1
- printf "%sT_DATA%s(%s): ", $color_type, $color_end, ((struct RTypedData *)($arg0))->type->wrap_struct_name
- print (struct RTypedData *)($arg0)
+ if ($flags & RUBY_TYPED_FL_IS_TYPED_DATA)
+ set $data = (struct RTypedData *)($arg0)
+ set $type = (const rb_data_type_t *)($data->type & ~1)
+ printf "%sT_DATA%s(%s): ", $color_type, $color_end, $type->wrap_struct_name
+ print *$type
+ if ($data->type & 1)
+ print (void *)&$data->data
+ else
+ print $data
+ end
else
printf "%sT_DATA%s: ", $color_type, $color_end
- print (struct RData *)($arg0)
+ print *(struct RData *)($arg0)
end
else
if ($flags & RUBY_T_MASK) == RUBY_T_MATCH
@@ -247,7 +242,7 @@ define rp
else
if ($flags & RUBY_T_MASK) == RUBY_T_IMEMO
printf "%sT_IMEMO%s(", $color_type, $color_end
- output (enum imemo_type)(($flags>>RUBY_FL_USHIFT)&imemo_mask)
+ output (enum imemo_type)(($flags>>RUBY_FL_USHIFT)&RUBY_IMEMO_MASK)
printf "): "
rp_imemo $arg0
else
@@ -261,6 +256,10 @@ define rp
printf "%sT_ZOMBIE%s: ", $color_type, $color_end
print (struct RData *)($arg0)
else
+ if ($flags & RUBY_T_MASK) == RUBY_T_MOVED
+ printf "%sT_MOVED%s: ", $color_type, $color_end
+ print *(struct RMoved *)$arg0
+ else
printf "%sunknown%s: ", $color_type, $color_end
print (struct RBasic *)($arg0)
end
@@ -296,6 +295,7 @@ define rp
end
end
end
+ end
end
document rp
Print a Ruby's VALUE.
@@ -327,6 +327,9 @@ define rp_id
if $id == idLTLT
printf "(:<<)\n"
else
+ if $id == idGTGT
+ printf "(:>>)\n"
+ else
if $id == idLE
printf "(:<=)\n"
else
@@ -354,6 +357,18 @@ define rp_id
if $id == idASET
printf "(:[]=)\n"
else
+ if $id == idCOLON2
+ printf "(:'::')\n"
+ else
+ if $id == idANDOP
+ printf "(:&&)\n"
+ else
+ if $id == idOROP
+ printf "(:||)\n"
+ else
+ if $id == idANDDOT
+ printf "(:&.)\n"
+ else
if $id <= tLAST_OP_ID
printf "O"
else
@@ -385,12 +400,13 @@ define rp_id
end
end
printf "(%ld): ", $id
- set $str = lookup_id_str($id)
- if $str
- rp_string $str
- else
- echo undef\n
- end
+ print_id $id
+ echo \n
+ end
+ end
+ end
+ end
+ end
end
end
end
@@ -413,16 +429,31 @@ document rp_id
Print an ID.
end
-define rp_string
+define output_string
+ set $flags = ((struct RBasic*)($arg0))->flags
+ set $len = ((struct RString*)($arg0))->len
+ if $len > 0
+ output *(char *)(($flags & RUBY_FL_USER1) ? \
+ ((struct RString*)($arg0))->as.heap.ptr : \
+ ((struct RString*)($arg0))->as.embed.ary) @ $len
+ else
+ output ""
+ end
+end
+
+define print_string
set $flags = ((struct RBasic*)($arg0))->flags
- set print address off
- output (char *)(($flags & RUBY_FL_USER1) ? \
- ((struct RString*)($arg0))->as.heap.ptr : \
- ((struct RString*)($arg0))->as.ary)
- set print address on
- printf " bytesize:%ld ", ($flags & RUBY_FL_USER1) ? \
- ((struct RString*)($arg0))->as.heap.len : \
- (($flags & (RUBY_FL_USER2|RUBY_FL_USER3|RUBY_FL_USER4|RUBY_FL_USER5|RUBY_FL_USER6)) >> RUBY_FL_USHIFT+2)
+ set $len = ((struct RString*)($arg0))->len
+ if $len > 0
+ printf "%s", *(char *)(($flags & RUBY_FL_USER1) ? \
+ ((struct RString*)($arg0))->as.heap.ptr : \
+ ((struct RString*)($arg0))->as.embed.ary) @ $len
+ end
+end
+
+define rp_string
+ output_string $arg0
+ printf " bytesize:%ld ", $len
if !($flags & RUBY_FL_USER1)
printf "(embed) "
else
@@ -453,22 +484,67 @@ document rp_string
Print the content of a String.
end
+define rp_bignum
+ set $flags = ((struct RBignum*)($arg0))->basic.flags
+ set $len = (($flags & RUBY_FL_USER2) ? \
+ ($flags & (RUBY_FL_USER5|RUBY_FL_USER4|RUBY_FL_USER3)) >> (RUBY_FL_USHIFT+3) : \
+ ((struct RBignum*)($arg0))->as.heap.len)
+ printf "%sT_BIGNUM%s: sign=%d len=%ld ", $color_type, $color_end, \
+ (($flags & RUBY_FL_USER1) != 0), $len
+ if $flags & RUBY_FL_USER2
+ printf "(embed) "
+ end
+ print (struct RBignum *)($arg0)
+ set $ptr = (($flags & RUBY_FL_USER2) ? \
+ ((struct RBignum*)($arg0))->as.ary : \
+ ((struct RBignum*)($arg0))->as.heap.digits)
+ set $len = $len-1
+ printf "0x%x", $ptr[$len]
+ while $len > 0
+ set $len = $len-1
+ set $val = $ptr[$len]
+ set $w = sizeof($ptr[0])
+ printf "_"
+ if $w > 8
+ printf "%.32x", $val
+ else
+ if $w > 4
+ printf "%.16x", $val
+ else
+ if $w > 2
+ printf "%.8x", $val
+ else
+ if $w > 1
+ printf "%.4x", $val
+ else
+ printf "%.2x", $val
+ end
+ end
+ end
+ end
+ end
+ printf "\n"
+end
+document rp_bignum
+ Print the content of a Bignum.
+end
+
define rp_class
+ set $class_and_classext = (struct RClass_and_rb_classext_t *)($arg0)
printf "(struct RClass *) %p", (void*)$arg0
- if ((struct RClass *)($arg0))->ptr.origin_ != $arg0
- printf " -> %p", ((struct RClass *)($arg0))->ptr.origin_
+ if $class_and_classext->classext->origin_ != (VALUE)$arg0
+ printf " -> %p", $class_and_classext->classext->origin_
end
printf "\n"
rb_classname $arg0
- print *(struct RClass *)($arg0)
- print *((struct RClass *)($arg0))->ptr
+ print/x *$class_and_classext
end
document rp_class
Print the content of a Class/Module.
end
define rp_imemo
- set $flags = (((struct RBasic *)($arg0))->flags >> RUBY_FL_USHIFT) & imemo_mask
+ set $flags = (enum imemo_type)((((struct RBasic *)($arg0))->flags >> RUBY_FL_USHIFT) & RUBY_IMEMO_MASK)
if $flags == imemo_cref
printf "(rb_cref_t *) %p\n", (void*)$arg0
print *(rb_cref_t *)$arg0
@@ -489,6 +565,14 @@ define rp_imemo
printf "(struct MEMO *) %p\n", (void*)$arg0
print *(struct MEMO *)$arg0
else
+ if $flags == imemo_ment
+ printf "(rb_method_entry_t *) %p\n", (void*)$arg0
+ print *(rb_method_entry_t *)$arg0
+ else
+ if $flags == imemo_iseq
+ printf "(rb_iseq_t *) %p\n", (void*)$arg0
+ print *(rb_iseq_t *)$arg0
+ else
printf "(struct RIMemo *) %p\n", (void*)$arg0
print *(struct RIMemo *)$arg0
end
@@ -496,6 +580,8 @@ define rp_imemo
end
end
end
+ end
+ end
end
document rp_imemo
Print the content of a memo
@@ -590,11 +676,6 @@ define nd_stts
end
-define nd_entry
- printf "%su3.entry%s: ", $color_highlite, $color_end
- p ($arg0).u3.entry
-end
-
define nd_vid
printf "%su1.id%s: ", $color_highlite, $color_end
p ($arg0).u1.id
@@ -610,12 +691,6 @@ define nd_cval
rp ($arg0).u3.value
end
-
-define nd_cnt
- printf "%su3.cnt%s: ", $color_highlite, $color_end
- p ($arg0).u3.cnt
-end
-
define nd_tbl
printf "%su1.tbl%s: ", $color_highlite, $color_end
p ($arg0).u1.tbl
@@ -654,12 +729,6 @@ define nd_lit
rp ($arg0).u1.value
end
-
-define nd_frml
- printf "%su1.node%s: ", $color_highlite, $color_end
- rp ($arg0).u1.node
-end
-
define nd_rest
printf "%su2.argc%s: ", $color_highlite, $color_end
p ($arg0).u2.argc
@@ -686,12 +755,6 @@ define nd_args
rp ($arg0).u3.node
end
-
-define nd_noex
- printf "%su1.id%s: ", $color_highlite, $color_end
- p ($arg0).u1.id
-end
-
define nd_defn
printf "%su3.node%s: ", $color_highlite, $color_end
rp ($arg0).u3.node
@@ -709,17 +772,6 @@ define nd_new
end
-define nd_cfnc
- printf "%su1.cfunc%s: ", $color_highlite, $color_end
- p ($arg0).u1.cfunc
-end
-
-define nd_argc
- printf "%su2.argc%s: ", $color_highlite, $color_end
- p ($arg0).u2.argc
-end
-
-
define nd_cname
printf "%su1.id%s: ", $color_highlite, $color_end
p ($arg0).u1.id
@@ -781,7 +833,7 @@ end
define nd_tree
set $buf = (struct RString *)rb_str_buf_new(0)
- call dump_node((VALUE)($buf), rb_str_new(0, 0), 0, ($arg0))
+ call dump_node((VALUE)($buf), rb_str_tmp_new(0), 0, ($arg0))
printf "%s\n", $buf->as.heap.ptr
end
@@ -798,22 +850,22 @@ define rb_numtable_entry
set $rb_numtable_p = $rb_numtable_tbl->as.packed.bins
while $rb_numtable_p && $rb_numtable_p < $rb_numtable_tbl->as.packed.bins+$rb_numtable_tbl->num_entries
if $rb_numtable_p.k == $rb_numtable_id
- set $rb_numtable_key = $rb_numtable_p.k
- set $rb_numtable_rec = $rb_numtable_p.v
- set $rb_numtable_p = 0
+ set $rb_numtable_key = $rb_numtable_p.k
+ set $rb_numtable_rec = $rb_numtable_p.v
+ set $rb_numtable_p = 0
else
- set $rb_numtable_p = $rb_numtable_p + 1
+ set $rb_numtable_p = $rb_numtable_p + 1
end
end
else
set $rb_numtable_p = $rb_numtable_tbl->as.big.bins[st_numhash($rb_numtable_id) % $rb_numtable_tbl->num_bins]
while $rb_numtable_p
if $rb_numtable_p->key == $rb_numtable_id
- set $rb_numtable_key = $rb_numtable_p->key
- set $rb_numtable_rec = $rb_numtable_p->record
- set $rb_numtable_p = 0
+ set $rb_numtable_key = $rb_numtable_p->key
+ set $rb_numtable_rec = $rb_numtable_p->record
+ set $rb_numtable_p = 0
else
- set $rb_numtable_p = $rb_numtable_p->next
+ set $rb_numtable_p = $rb_numtable_p->next
end
end
end
@@ -851,11 +903,10 @@ document rb_method_entry
end
define rb_classname
- # up to 128bit int
- set $rb_classname_permanent = "0123456789ABCDEF"
- set $rb_classname = classname($arg0, $rb_classname_permanent)
- if $rb_classname != RUBY_Qnil
- rp $rb_classname
+ set $rb_classname = ((struct RClass_and_rb_classext_t*)$arg0)->classext->classpath
+ if $rb_classname != RUBY_Qfalse
+ print_string $rb_classname
+ printf "\n"
else
echo anonymous class/module\n
end
@@ -892,7 +943,7 @@ define iseq
set $operand_size = ((INSN*)($arg0))->operand_size
set $operands = ((INSN*)($arg0))->operands
while $i < $operand_size
- rp $operands[$i++]
+ rp $operands[$i++]
end
end
end
@@ -902,7 +953,7 @@ define iseq
end
define rb_ps
- rb_ps_vm ruby_current_vm
+ rb_ps_vm ruby_current_vm_ptr
end
document rb_ps
Dump all threads and their callstacks
@@ -910,8 +961,8 @@ end
define rb_ps_vm
print $ps_vm = (rb_vm_t*)$arg0
- set $ps_thread_ln = $ps_vm->living_threads.n.next
- set $ps_thread_ln_last = $ps_vm->living_threads.n.prev
+ set $ps_thread_ln = $ps_vm->ractor.main_ractor.threads.set.n.next
+ set $ps_thread_ln_last = $ps_vm->ractor.main_ractor.threads.set.n.prev
while 1
set $ps_thread_th = (rb_thread_t *)$ps_thread_ln
set $ps_thread = (VALUE)($ps_thread_th->self)
@@ -926,16 +977,293 @@ document rb_ps_vm
Dump all threads in a (rb_vm_t*) and their callstacks
end
+define print_lineno
+ set $cfp = $arg0
+ set $iseq = $cfp->iseq
+ set $pos = $cfp->pc - $iseq->body->iseq_encoded
+ if $pos != 0
+ set $pos = $pos - 1
+ end
+
+ set $index = 0
+ set $size = $iseq->body->insns_info.size
+ set $table = $iseq->body->insns_info.body
+ set $positions = $iseq->body->insns_info.positions
+ #printf "size: %d\n", $size
+ if $size == 0
+ else
+ if $size == 1
+ printf "%d", $table[0].line_no
+ else
+ if $positions
+ # get_insn_info_linear_search
+ set $index = 1
+ while $index < $size
+ #printf "table[%d]: position: %d, line: %d, pos: %d\n", $i, $positions[$i], $table[$i].line_no, $pos
+ if $positions[$index] > $pos
+ loop_break
+ end
+ set $index = $index + 1
+ if $positions[$index] == $pos
+ loop_break
+ end
+ end
+ else
+ # get_insn_info_succinct_bitvector
+ set $sd = $iseq->body->insns_info.succ_index_table
+ set $immediate_table_size = sizeof($sd->imm_part) / sizeof(uint64_t) * 9
+ if $pos < $immediate_table_size
+ set $i = $pos / 9
+ set $j = $pos % 9
+ set $index = ((int)($sd->imm_part[$i] >> ($j * 7))) & 0x7f
+ else
+ set $block_index = ($pos - $immediate_table_size) / 512
+ set $block = &$sd->succ_part[$block_index]
+ set $block_bit_index = ($pos - $immediate_table_size) % 512
+ set $small_block_index = $block_bit_index / 64
+ set $small_block_popcount = $small_block_index == 0 ? 0 : (((int)($block->small_block_ranks >> (($small_block_index - 1) * 9))) & 0x1ff)
+ set $x = $block->bits[$small_block_index] << (63 - $block_bit_index % 64)
+ set $x = ($x & 0x5555555555555555) + ($x >> 1 & 0x5555555555555555)
+ set $x = ($x & 0x3333333333333333) + ($x >> 2 & 0x3333333333333333)
+ set $x = ($x & 0x0707070707070707) + ($x >> 4 & 0x0707070707070707)
+ set $x = ($x & 0x001f001f001f001f) + ($x >> 8 & 0x001f001f001f001f)
+ set $x = ($x & 0x0000003f0000003f) + ($x >>16 & 0x0000003f0000003f)
+ set $popcnt = ($x & 0x7f) + ($x >>32 & 0x7f)
+ set $index = $block->rank + $small_block_popcount + $popcnt
+ end
+ end
+ printf "%d", $table[$index-1].line_no
+ end
+ end
+end
+
+define check_method_entry
+ set $imemo = (struct RBasic *)$arg0
+ if $imemo != RUBY_Qfalse
+ set $type = ($imemo->flags >> 12) & 0x07
+ if $type == imemo_ment
+ set $me = (rb_callable_method_entry_t *)$imemo
+ else
+ if $type == imemo_svar
+ set $imemo = ((struct vm_svar *)$imemo)->cref_or_me
+ check_method_entry $imemo
+ end
+ end
+ end
+end
+
+define print_id
+ set $id = $arg0
+ # rb_id_to_serial
+ if $id > tLAST_OP_ID
+ set $serial = (rb_id_serial_t)($id >> RUBY_ID_SCOPE_SHIFT)
+ else
+ set $serial = (rb_id_serial_t)$id
+ end
+ if $serial && $serial <= ruby_global_symbols.last_id
+ set $idx = $serial / ID_ENTRY_UNIT
+ set $ids = (struct RArray *)ruby_global_symbols.ids
+ set $flags = $ids->basic.flags
+ if ($flags & RUBY_FL_USER1)
+ set $idsptr = $ids->as.ary
+ set $idslen = (($flags & (RUBY_FL_USER3|RUBY_FL_USER4)) >> (RUBY_FL_USHIFT+3))
+ else
+ set $idsptr = $ids->as.heap.ptr
+ set $idslen = $ids->as.heap.len
+ end
+ if $idx < $idslen
+ set $t = 0
+ set $ary = (struct RArray *)$idsptr[$idx]
+ if $ary != RUBY_Qnil
+ set $flags = $ary->basic.flags
+ if ($flags & RUBY_FL_USER1)
+ set $aryptr = $ary->as.ary
+ set $arylen = (($flags & (RUBY_FL_USER3|RUBY_FL_USER4)) >> (RUBY_FL_USHIFT+3))
+ else
+ set $aryptr = $ary->as.heap.ptr
+ set $arylen = $ary->as.heap.len
+ end
+ set $result = $aryptr[($serial % ID_ENTRY_UNIT) * ID_ENTRY_SIZE + $t]
+ if $result != RUBY_Qnil
+ print_string $result
+ else
+ echo undef
+ end
+ end
+ end
+ end
+end
+
+define print_pathobj
+ set $flags = ((struct RBasic*)($arg0))->flags
+ if ($flags & RUBY_T_MASK) == RUBY_T_STRING
+ print_string $arg0
+ end
+ if ($flags & RUBY_T_MASK) == RUBY_T_ARRAY
+ if $flags & RUBY_FL_USER1
+ set $str = ((struct RArray*)($arg0))->as.ary[0]
+ else
+ set $str = ((struct RArray*)($arg0))->as.heap.ptr[0]
+ end
+ print_string $str
+ end
+end
+
define rb_ps_thread
set $ps_thread = (struct RTypedData*)$arg0
set $ps_thread_th = (rb_thread_t*)$ps_thread->data
printf "* #<Thread:%p rb_thread_t:%p native_thread:%p>\n", \
- $ps_thread, $ps_thread_th, $ps_thread_th->thread_id
-end
-
-# Details: https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/MachineInstructionsTraceWithGDB
+ $ps_thread, $ps_thread_th, $ps_thread_th->nt
+ set $cfp = $ps_thread_th->ec->cfp
+ set $cfpend = (rb_control_frame_t *)($ps_thread_th->ec->vm_stack + $ps_thread_th->ec->vm_stack_size)-1
+ while $cfp < $cfpend
+ if $cfp->iseq
+ if !((VALUE)$cfp->iseq & RUBY_IMMEDIATE_MASK) && (((imemo_ifunc << RUBY_FL_USHIFT) | RUBY_T_IMEMO)==$cfp->iseq->flags & ((RUBY_IMEMO_MASK << RUBY_FL_USHIFT) | RUBY_T_MASK))
+ printf "%d:ifunc ", $cfpend-$cfp
+ set print symbol-filename on
+ output/a $cfp->iseq.body
+ set print symbol-filename off
+ printf "\n"
+ else
+ if $cfp->pc
+ set $location = $cfp->iseq->body->location
+ printf "%d:", $cfpend-$cfp
+ print_pathobj $location.pathobj
+ printf ":"
+ print_lineno $cfp
+ printf ":in `"
+ print_string $location.label
+ printf "'\n"
+ else
+ printf "%d: ???.rb:???:in `???'\n", $cfpend-$cfp
+ end
+ end
+ else
+ # if VM_FRAME_TYPE($cfp->flag) == VM_FRAME_MAGIC_CFUNC
+ set $ep = $cfp->ep
+ if ($ep[0] & 0xffff0001) == 0x55550001
+ #define VM_ENV_FLAG_LOCAL 0x02
+ #define VM_ENV_PREV_EP(ep) GC_GUARDED_PTR_REF(ep[VM_ENV_DATA_INDEX_SPECVAL])
+ set $me = 0
+ set $env_specval = $ep[-1]
+ set $env_me_cref = $ep[-2]
+ while ($env_specval & 0x02) != 0
+ check_method_entry $env_me_cref
+ if $me != 0
+ loop_break
+ end
+ set $ep = $ep[0]
+ set $env_specval = $ep[-1]
+ set $env_me_cref = $ep[-2]
+ end
+ if $me == 0
+ check_method_entry $env_me_cref
+ end
+ printf "%d:", $cfpend-$cfp
+ set print symbol-filename on
+ output/a $me->def->body.cfunc.func
+ set print symbol-filename off
+ set $mid = $me->def->original_id
+ printf ":in `"
+ print_id $mid
+ printf "'\n"
+ else
+ printf "%d:unknown_frame:???:in `???'\n", $cfpend-$cfp
+ end
+ end
+ set $cfp = $cfp + 1
+ end
+end
+
+define rb_count_objects
+ set $objspace = ruby_current_vm_ptr->objspace
+ set $counts_00 = 0
+ set $counts_01 = 0
+ set $counts_02 = 0
+ set $counts_03 = 0
+ set $counts_04 = 0
+ set $counts_05 = 0
+ set $counts_06 = 0
+ set $counts_07 = 0
+ set $counts_08 = 0
+ set $counts_09 = 0
+ set $counts_0a = 0
+ set $counts_0b = 0
+ set $counts_0c = 0
+ set $counts_0d = 0
+ set $counts_0e = 0
+ set $counts_0f = 0
+ set $counts_10 = 0
+ set $counts_11 = 0
+ set $counts_12 = 0
+ set $counts_13 = 0
+ set $counts_14 = 0
+ set $counts_15 = 0
+ set $counts_16 = 0
+ set $counts_17 = 0
+ set $counts_18 = 0
+ set $counts_19 = 0
+ set $counts_1a = 0
+ set $counts_1b = 0
+ set $counts_1c = 0
+ set $counts_1d = 0
+ set $counts_1e = 0
+ set $counts_1f = 0
+ set $total = 0
+ set $i = 0
+ while $i < $objspace->heap_pages.allocated_pages
+ printf "\rcounting... %d/%d", $i, $objspace->heap_pages.allocated_pages
+ set $page = $objspace->heap_pages.sorted[$i]
+ set $p = $page->start
+ set $pend = $p + $page->total_slots
+ while $p < $pend
+ set $flags = $p->as.basic.flags & 0x1f
+ eval "set $counts_%02x = $counts_%02x + 1", $flags, $flags
+ set $p = $p + 1
+ end
+ set $total = $total + $page->total_slots
+ set $i = $i + 1
+ end
+ printf "\rTOTAL: %d, FREE: %d\n", $total, $counts_00
+ printf "T_OBJECT: %d\n", $counts_01
+ printf "T_CLASS: %d\n", $counts_02
+ printf "T_MODULE: %d\n", $counts_03
+ printf "T_FLOAT: %d\n", $counts_04
+ printf "T_STRING: %d\n", $counts_05
+ printf "T_REGEXP: %d\n", $counts_06
+ printf "T_ARRAY: %d\n", $counts_07
+ printf "T_HASH: %d\n", $counts_08
+ printf "T_STRUCT: %d\n", $counts_09
+ printf "T_BIGNUM: %d\n", $counts_0a
+ printf "T_FILE: %d\n", $counts_0b
+ printf "T_DATA: %d\n", $counts_0c
+ printf "T_MATCH: %d\n", $counts_0d
+ printf "T_COMPLEX: %d\n", $counts_0e
+ printf "T_RATIONAL: %d\n", $counts_0f
+ #printf "UNKNOWN_10: %d\n", $counts_10
+ printf "T_NIL: %d\n", $counts_11
+ printf "T_TRUE: %d\n", $counts_12
+ printf "T_FALSE: %d\n", $counts_13
+ printf "T_SYMBOL: %d\n", $counts_14
+ printf "T_FIXNUM: %d\n", $counts_15
+ printf "T_UNDEF: %d\n", $counts_16
+ #printf "UNKNOWN_17: %d\n", $counts_17
+ #printf "UNKNOWN_18: %d\n", $counts_18
+ #printf "UNKNOWN_19: %d\n", $counts_19
+ printf "T_IMEMO: %d\n", $counts_1a
+ printf "T_NODE: %d\n", $counts_1b
+ printf "T_ICLASS: %d\n", $counts_1c
+ printf "T_ZOMBIE: %d\n", $counts_1d
+ #printf "UNKNOWN_1E: %d\n", $counts_1e
+ printf "T_MASK: %d\n", $counts_1f
+end
+document rb_count_objects
+ Counts all objects grouped by type.
+end
+
+# Details: https://github.com/ruby/ruby/wiki/Machine-Instructions-Trace-with-GDB
define trace_machine_instructions
- set logging on
+ set logging enabled
set height 0
set width 0
display/i $pc
@@ -970,5 +1298,39 @@ define dump_node
set $flags = ((struct RBasic*)($str))->flags
printf "%s", (char *)(($flags & RUBY_FL_USER1) ? \
((struct RString*)$str)->as.heap.ptr : \
- ((struct RString*)$str)->as.ary)
-end
+ ((struct RString*)$str)->as.embed.ary)
+end
+
+define print_flags
+ printf "RUBY_FL_WB_PROTECTED: %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_WB_PROTECTED ? "1" : "0"
+ printf "RUBY_FL_PROMOTED : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_PROMOTED ? "1" : "0"
+ printf "RUBY_FL_FINALIZE : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_FINALIZE ? "1" : "0"
+ printf "RUBY_FL_SHAREABLE : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_SHAREABLE ? "1" : "0"
+ printf "RUBY_FL_EXIVAR : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_EXIVAR ? "1" : "0"
+ printf "RUBY_FL_FREEZE : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_FREEZE ? "1" : "0"
+
+ printf "RUBY_FL_USER0 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER0 ? "1" : "0"
+ printf "RUBY_FL_USER1 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER1 ? "1" : "0"
+ printf "RUBY_FL_USER2 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER2 ? "1" : "0"
+ printf "RUBY_FL_USER3 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER3 ? "1" : "0"
+ printf "RUBY_FL_USER4 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER4 ? "1" : "0"
+ printf "RUBY_FL_USER5 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER5 ? "1" : "0"
+ printf "RUBY_FL_USER6 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER6 ? "1" : "0"
+ printf "RUBY_FL_USER7 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER7 ? "1" : "0"
+ printf "RUBY_FL_USER8 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER8 ? "1" : "0"
+ printf "RUBY_FL_USER9 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER9 ? "1" : "0"
+ printf "RUBY_FL_USER10 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER10 ? "1" : "0"
+ printf "RUBY_FL_USER11 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER11 ? "1" : "0"
+ printf "RUBY_FL_USER12 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER12 ? "1" : "0"
+ printf "RUBY_FL_USER13 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER13 ? "1" : "0"
+ printf "RUBY_FL_USER14 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER14 ? "1" : "0"
+ printf "RUBY_FL_USER15 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER15 ? "1" : "0"
+ printf "RUBY_FL_USER16 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER16 ? "1" : "0"
+ printf "RUBY_FL_USER17 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER17 ? "1" : "0"
+ printf "RUBY_FL_USER18 : %s\n", ((struct RBasic*)($arg0))->flags & RUBY_FL_USER18 ? "1" : "0"
+end
+
+source -s misc/gdb.py
+
+# Moved from beginning, since it fails on older gdbs
+set startup-with-shell off
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
new file mode 100644
index 0000000000..d98646febf
--- /dev/null
+++ b/.git-blame-ignore-revs
@@ -0,0 +1,41 @@
+# This is a file used by GitHub to ignore the following commits on `git blame`.
+#
+# You can also do the same thing in your local repository with:
+# $ git config --local blame.ignoreRevsFile .git-blame-ignore-revs
+
+# Expand tabs
+5b21e94bebed90180d8ff63dad03b8b948361089
+c5e9af9c9d890578182a21e7b71b50334cd5579e
+e63a2115f64433b21cb5dd67c5bf8b30f87ef293
+712ac99e4d0384a941c80a9f48f62943ba7d97c0
+d1474affa8e105bece209cc9d594bb0a989859e1
+2da92388b948821269b18d6b178a680f17e41750
+5062c0c621d887367af8a054e5e5d83d7ec57dd3
+
+# Enable Style/StringLiterals cop for RubyGems/Bundler
+d7ffd3fea402239b16833cc434404a7af82d44f3
+
+# [ruby/digest] Revert tab-expansion in external files
+48b09aae7ec5632209229dcc294dd0d75a93a17f
+8a65cf3b61c60e4cb886f59a73ff6db44364bfa9
+39dc9f9093901d40d2998653948d5da38b18ee2c
+
+# [ruby/io-nonblock] Revert tab expansion
+f28287d34c03f472ffe90ea262bdde9affd4b965
+0d842fecb4f75ab3b1d4097ebdb8e88f51558041
+4ba2c66761d6a293abdfba409241d31063cefd62
+
+# Make benchmark indentation consistent
+fc4acf8cae82e5196186d3278d831f2438479d91
+
+# Make prism_compile.c indentation consistent
+40b2c8e5e7e6e5f83cee9276dc9c1922a69292d6
+d2c5867357ed88eccc28c2b3bd4a46e206e7ff85
+
+# Miss-and-revived commits
+a0f7de814ae5c299d6ce99bed5fb308a05d50ba0
+d4e24021d39e1f80f0055b55d91f8d5f22e15084
+7a56c316418980b8a41fcbdc94067b2bda2ad112
+e90282be7ba1bc8e3119f6e1a2c80356ceb3f80a
+26a9e0b4e31f7b5a9cbd755e0a15823a8fa51bae
+2f53985da9ee593fe524d408256835667938c7d7
diff --git a/.gitattributes b/.gitattributes
index d9785fad00..6ac6e6fcc3 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,5 +1,9 @@
*.gemspec diff=ruby
*.rb diff=ruby
+*.inc.rs linguist-generated=true
+bin svn-properties=svn:ignore=ruby
bin/* diff=ruby
tool/update-deps diff=ruby
tool/make-snapshot diff=ruby
+tool/format-release diff=ruby
+tool/leaked-globals diff=ruby
diff --git a/.github/SECURITY.md b/.github/SECURITY.md
new file mode 100644
index 0000000000..56baa29942
--- /dev/null
+++ b/.github/SECURITY.md
@@ -0,0 +1,9 @@
+# Security Policy
+
+## Supported Versions
+
+See <https://www.ruby-lang.org/en/downloads/branches/>.
+
+## Reporting a Vulnerability
+
+See <https://www.ruby-lang.org/en/security/>.
diff --git a/.github/actions/capiext/action.yml b/.github/actions/capiext/action.yml
new file mode 100644
index 0000000000..49562725f4
--- /dev/null
+++ b/.github/actions/capiext/action.yml
@@ -0,0 +1,86 @@
+name: rubyspec C-API extensions
+
+inputs:
+ builddir:
+ required: false
+ default: '.'
+ make:
+ required: false
+ default: 'make -s'
+
+outputs:
+ key:
+ value: >-
+ ${{
+ !steps.restore.outputs.cache-hit &&
+ github.ref == 'refs/heads/master' &&
+ steps.config.outputs.key
+ }}
+
+runs:
+ using: composite
+
+ steps:
+ - id: config
+ shell: bash
+ run: |
+ eval $(grep -e '^arch *=' -e '^ruby_version *=' -e '^DLEXT *=' Makefile |
+ sed 's/ *= */=/')
+ case "${ruby_version}" in
+ *+*) key=capiexts-${arch}-${ruby_version}-${{ hashFiles('src/spec/ruby/optional/capi/ext/*.[ch]') }};;
+ *) key=;;
+ esac
+ echo version=$ruby_version >> $GITHUB_OUTPUT
+ echo key="$key" >> $GITHUB_OUTPUT
+ echo DLEXT=$DLEXT >> $GITHUB_OUTPUT
+ working-directory: ${{ inputs.builddir }}
+
+ - name: Restore previous CAPI extensions
+ uses: actions/cache/restore@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
+ id: cache
+ with:
+ path: ${{ inputs.builddir }}/spec/ruby/optional/capi/ext/
+ key: ${{ steps.config.outputs.key }}
+ if: ${{ steps.config.outputs.key }}
+
+ - name: Run test-spec with previous CAPI extension binaries
+ id: check
+ shell: bash
+ run: |
+ touch spec/ruby/optional/capi/ext/*.$DLEXT
+ [ ! -f spec/ruby/optional/capi/ext/\*.$DLEXT ]
+ ${{ inputs.make }} SPECOPTS=optional/capi test-spec
+ env:
+ DLEXT: ${{ steps.config.outputs.DLEXT }}
+ working-directory: ${{ inputs.builddir }}
+ if: ${{ steps.cache.outputs.cache-hit }}
+
+ - name: Strip CAPI extensions
+ id: strip
+ shell: bash
+ run: |
+ rm -f spec/ruby/optional/capi/ext/*.c
+ [ "$DLEXT" = bundle ] || # separated to .dSYM directories
+ strip spec/ruby/optional/capi/ext/*.$DLEXT
+ env:
+ DLEXT: ${{ steps.config.outputs.DLEXT }}
+ working-directory: ${{ inputs.builddir }}
+ if: >-
+ ${{true
+ && ! steps.cache.outputs.cache-hit
+ && github.ref_name == 'master'
+ }}
+
+ - name: Save CAPI extensions
+ uses: actions/cache/save@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
+ with:
+ path: ${{ inputs.builddir }}/spec/ruby/optional/capi/ext/
+ key: ${{ steps.config.outputs.key }}
+ if: ${{ steps.strip.outcome == 'success' }}
+
+ - shell: bash
+ run: |
+ echo "::error::Change from ${prev} detected; bump up ABI version"
+ env:
+ prev: ${{ steps.config.outputs.version }}
+ if: ${{ always() && steps.check.outcome == 'failure' }}
diff --git a/.github/actions/compilers/action.yml b/.github/actions/compilers/action.yml
new file mode 100644
index 0000000000..ab5b56a889
--- /dev/null
+++ b/.github/actions/compilers/action.yml
@@ -0,0 +1,133 @@
+name: Compiles ruby in a container
+description: >-
+ Makes ruby using a dedicated container
+
+inputs:
+ tag:
+ required: false
+ default: clang-20
+ description: >-
+ container image tag to use in this run.
+
+ with_gcc:
+ required: false
+ description: >-
+ override compiler path & flags.
+
+ CFLAGS:
+ required: false
+ description: >-
+ C compiler flags to override.
+
+ CXXFLAGS:
+ required: false
+ description: >-
+ C++ compiler flags to override.
+
+ optflags:
+ required: false
+ # -O1 is faster than -O3 in our tests... Majority of time are consumed trying
+ # to optimize binaries. Also GitHub Actions run on relatively modern CPUs
+ # compared to, say, GCC 4 or Clang 3. We don't specify `-march=native`
+ # because compilers tend not understand what the CPU is.
+ default: '-O1'
+ description: >-
+ Compiler flags for optimisations.
+
+ cppflags:
+ required: false
+ description: >-
+ Additional preprocessor flags.
+
+ append_configure:
+ required: false
+ default: >-
+ --without-valgrind
+ --without-jemalloc
+ --without-gmp
+ description: >-
+ flags to append to configure.
+
+ enable_shared:
+ required: false
+ default: true
+ description: >-
+ Whether to build libruby.so.
+
+ check:
+ required: false
+ default: ''
+ description: >-
+ Whether to run `make check`
+
+ test_all:
+ required: false
+ default: ''
+ description: >-
+ Whether to run `make test-all` with options for test-all.
+
+ test_spec:
+ required: false
+ default: ''
+ description: >-
+ Whether to run `make test-spec` with options for mspec.
+
+ static_exts:
+ required: false
+ description: >-
+ whitespace separated list of extensions that need be linked statically.
+
+runs:
+ using: composite
+ steps:
+ - shell: bash
+ run: docker pull --quiet 'ghcr.io/ruby/ruby-ci-image:${{ inputs.tag }}'
+
+ - name: Enable Launchable conditionally
+ id: enable-launchable
+ run: echo "enable-launchable=true" >> $GITHUB_OUTPUT
+ shell: bash
+ if: >-
+ ${{
+ github.repository == 'ruby/ruby' ||
+ (github.repository != 'ruby/ruby' && env.LAUNCHABLE_TOKEN)
+ }}
+
+ - name: compile
+ shell: bash
+ run: >-
+ docker run
+ --rm
+ --user=root
+ --volume '${{ github.workspace }}:/github/workspace:ro'
+ --workdir=/github/workspace
+ --entrypoint=/github/workspace/.github/actions/compilers/entrypoint.sh
+ --env CI
+ --env GITHUB_ACTION
+ --env INPUT_WITH_GCC='${{ inputs.with_gcc || inputs.tag }}'
+ --env INPUT_CFLAGS='${{ inputs.CFLAGS }}'
+ --env INPUT_CXXFLAGS='${{ inputs.CXXFLAGS }}'
+ --env INPUT_OPTFLAGS='${{ inputs.OPTFLAGS }}'
+ --env INPUT_CPPFLAGS='${{ inputs.cppflags }}'
+ --env INPUT_APPEND_CONFIGURE='${{ inputs.append_configure }}'
+ --env INPUT_CHECK='${{ inputs.check }}'
+ --env INPUT_TEST_ALL='${{ inputs.test_all }}'
+ --env INPUT_TEST_SPEC='${{ inputs.test_spec }}'
+ --env INPUT_ENABLE_SHARED='${{ inputs.enable_shared }}'
+ --env INPUT_STATIC_EXTS='${{ inputs.static_exts }}'
+ --env LAUNCHABLE_ORGANIZATION='${{ github.repository_owner }}'
+ --env LAUNCHABLE_WORKSPACE='${{ github.event.repository.name }}'
+ --env LAUNCHABLE_ENABLED='${{ steps.enable-launchable.outputs.enable-launchable || false }}'
+ --env GITHUB_PR_HEAD_SHA='${{ github.event.pull_request.head.sha || github.sha }}'
+ --env GITHUB_PULL_REQUEST_URL='${{ github.event.pull_request.html_url }}'
+ --env GITHUB_REF='${{ github.ref }}'
+ --env GITHUB_ACTIONS
+ --env GITHUB_RUN_ID
+ --env GITHUB_REPOSITORY
+ --env GITHUB_WORKFLOW
+ --env GITHUB_RUN_NUMBER
+ --env GITHUB_EVENT_NAME
+ --env GITHUB_SHA
+ --env GITHUB_HEAD_REF
+ --env GITHUB_SERVER_URL
+ 'ghcr.io/ruby/ruby-ci-image:${{ inputs.tag }}'
diff --git a/.github/actions/compilers/entrypoint.sh b/.github/actions/compilers/entrypoint.sh
new file mode 100755
index 0000000000..b554151091
--- /dev/null
+++ b/.github/actions/compilers/entrypoint.sh
@@ -0,0 +1,90 @@
+#! /bin/bash
+
+# Copyright (c) 2024 Ruby developers. All rights reserved.
+#
+# This file is a part of the programming language Ruby. Permission is hereby
+# granted, to either redistribute and/or modify this file, provided that the
+# conditions mentioned in the file COPYING are met. Consult the file for
+# details.
+
+grouped()
+{
+ echo "::group::${@}"
+ "${@}"
+ echo "::endgroup::"
+}
+
+set -e
+set -u
+set -o pipefail
+
+srcdir="/github/workspace/src"
+builddir="$(mktemp -dt)"
+
+export GITHUB_WORKFLOW='Compilations'
+export CONFIGURE_TTY='never'
+export RUBY_DEBUG='ci rgengc'
+export RUBY_TESTOPTS='-q --color=always --tty=no'
+export RUBY_DEBUG_COUNTER_DISABLE='1'
+export GNUMAKEFLAGS="-j$((1 + $(nproc)))"
+
+case "x${INPUT_ENABLE_SHARED}" in
+x | xno | xfalse )
+ enable_shared='--disable-shared'
+ ;;
+*)
+ enable_shared='--enable-shared'
+ ;;
+esac
+
+pushd ${builddir}
+
+grouped git config --global --add safe.directory ${srcdir}
+
+grouped ${srcdir}/configure \
+ -C \
+ --with-gcc="${INPUT_WITH_GCC}" \
+ --enable-debug-env \
+ --disable-install-doc \
+ --with-ext=-test-/cxxanyargs,+ \
+ --without-git \
+ ${enable_shared} \
+ ${INPUT_APPEND_CONFIGURE} \
+ CFLAGS="${INPUT_CFLAGS}" \
+ CXXFLAGS="${INPUT_CXXFLAGS}" \
+ optflags="${INPUT_OPTFLAGS}" \
+ cppflags="${INPUT_CPPFLAGS}" \
+ debugflags='-ggdb3' # -g0 disables backtraces when SEGV. Do not set that.
+
+popd
+
+if [[ -n "${INPUT_STATIC_EXTS}" ]]; then
+ echo "::group::ext/Setup"
+ set -x
+ mkdir ${builddir}/ext
+ (
+ for ext in ${INPUT_STATIC_EXTS}; do
+ echo "${ext}"
+ done
+ ) >> ${builddir}/ext/Setup
+ set +x
+ echo "::endgroup::"
+fi
+
+if [ -n "$INPUT_TEST_ALL" ]; then
+ tests=" -- $INPUT_TEST_ALL"
+else
+ tests=" -- ruby -ext-"
+fi
+
+pushd ${builddir}
+
+grouped make showflags
+grouped make all
+# grouped make install
+
+# Run only `make test` by default. Run other tests if specified.
+grouped make test
+if [[ -n "$INPUT_CHECK" ]]; then grouped make test-tool; fi
+if [[ -n "$INPUT_CHECK" || -n "$INPUT_TEST_ALL" ]]; then grouped make test-all TESTS="$tests"; fi
+if [[ -n "$INPUT_CHECK" || -n "$INPUT_TEST_SPEC" ]]; then grouped env CHECK_LEAKS=true make test-spec MSPECOPT="$INPUT_TEST_SPEC"; fi
diff --git a/.github/actions/launchable/setup/action.yml b/.github/actions/launchable/setup/action.yml
new file mode 100644
index 0000000000..16af8fc3fd
--- /dev/null
+++ b/.github/actions/launchable/setup/action.yml
@@ -0,0 +1,313 @@
+name: Set up Launchable
+description: >-
+ Install the required dependencies and execute the necessary Launchable commands for test recording
+
+inputs:
+ os:
+ required: true
+ description: The operating system that CI runs on. This value is used in Launchable flavor.
+
+ test-opts:
+ default: none
+ required: false
+ description: >-
+ Test options that determine how tests are run.
+ This value is used in the Launchable flavor.
+
+ launchable-token:
+ required: false
+ description: >-
+ Launchable token is needed if you want to run Launchable on your forked repository.
+ See https://github.com/ruby/ruby/wiki/CI-Servers#launchable-ci for details.
+
+ builddir:
+ required: false
+ default: ${{ github.workspace }}
+ description: >-
+ Directory to create Launchable report file.
+
+ srcdir:
+ required: false
+ default: ${{ github.workspace }}
+ description: >-
+ Directory to (re-)checkout source codes. Launchable retrieves the commit information
+ from the directory.
+
+ test-task:
+ required: false
+ default: ${{ matrix.test_task }}
+ description: >-
+ Specifies a single test task to be executed.
+ This value is used in the Launchable flavor.
+ Either 'test-task' or 'multi-test-tasks' must be configured.
+
+ test-tasks:
+ required: false
+ default: '[]'
+ description: >-
+ Specifies an array of multiple test tasks to be executed.
+ For example: '["test", "test-all"]'.
+ If you want to run a single test task, use the 'test-task' input instead.
+
+ is-yjit:
+ required: false
+ default: 'false'
+ description: >-
+ Whether this workflow is executed on YJIT.
+
+outputs:
+ stdout_report_path:
+ value: ${{ steps.global.outputs.stdout_report_path }}
+ description: >-
+ Report file path for standard output.
+
+ stderr_report_path:
+ value: ${{ steps.global.outputs.stderr_report_path }}
+ description: >-
+ Report file path for standard error.
+
+runs:
+ using: composite
+
+ steps:
+ - name: Enable Launchable conditionally
+ id: enable-launchable
+ run: echo "enable-launchable=true" >> $GITHUB_OUTPUT
+ shell: bash
+ if: >-
+ ${{
+ (github.repository == 'ruby/ruby'
+ || (github.repository != 'ruby/ruby'
+ && env.LAUNCHABLE_TOKEN))
+ && (inputs.test-task == 'check'
+ || inputs.test-task == 'test-all'
+ || inputs.test-task == 'test'
+ || contains(fromJSON(inputs.test-tasks), 'test-all')
+ || contains(fromJSON(inputs.test-tasks), 'test'))
+ }}
+
+ # Launchable CLI requires Python and Java.
+ # https://www.launchableinc.com/docs/resources/cli-reference/
+ - name: Set up Python
+ uses: actions/setup-python@871daa956ca9ea99f3c3e30acb424b7960676734 # v5.0.0
+ with:
+ python-version: "3.x"
+ if: >-
+ ${{ steps.enable-launchable.outputs.enable-launchable
+ && !endsWith(inputs.os, 'ppc64le') && !endsWith(inputs.os, 's390x') }}
+
+ - name: Set up Java
+ uses: actions/setup-java@7a445ee88d4e23b52c33fdc7601e40278616c7f8 # v4.0.0
+ with:
+ distribution: 'temurin'
+ java-version: '17'
+ if: >-
+ ${{ steps.enable-launchable.outputs.enable-launchable
+ && !endsWith(inputs.os, 'ppc64le') && !endsWith(inputs.os, 's390x') }}
+
+ - name: Set up Java ppc64le
+ uses: actions/setup-java@7a445ee88d4e23b52c33fdc7601e40278616c7f8 # v4.0.0
+ with:
+ distribution: 'semeru'
+ architecture: 'ppc64le'
+ java-version: '17'
+ if: >-
+ ${{ steps.enable-launchable.outputs.enable-launchable
+ && endsWith(inputs.os, 'ppc64le') }}
+
+ - name: Set up Java s390x
+ uses: actions/setup-java@7a445ee88d4e23b52c33fdc7601e40278616c7f8 # v4.0.0
+ with:
+ distribution: 'semeru'
+ architecture: 's390x'
+ java-version: '17'
+ if: >-
+ ${{ steps.enable-launchable.outputs.enable-launchable
+ && endsWith(inputs.os, 's390x') }}
+
+ - name: Set global vars
+ id: global
+ shell: bash
+ run: |
+ test_all_enabled="${{ inputs.test-task == 'check' || inputs.test-task == 'test-all' || contains(fromJSON(inputs.test-tasks), 'test-all') }}"
+ btest_enabled="${{ inputs.test-task == 'check' || inputs.test-task == 'test' || contains(fromJSON(inputs.test-tasks), 'test') }}"
+ test_spec_enabled="${{ inputs.test-task == 'check' || inputs.test-task == 'test-spec' || contains(fromJSON(inputs.test-tasks), 'test-spec') }}"
+ echo test_all_enabled="${test_all_enabled}" >> $GITHUB_OUTPUT
+ echo btest_enabled="${btest_enabled}" >> $GITHUB_OUTPUT
+ echo test_spec_enabled="${test_spec_enabled}" >> $GITHUB_OUTPUT
+ echo test_all_report_file='launchable_test_all_report.json' >> $GITHUB_OUTPUT
+ echo btest_report_file='launchable_btest_report.json' >> $GITHUB_OUTPUT
+ echo test_spec_report_dir='launchable_test_spec_report' >> $GITHUB_OUTPUT
+ echo stdout_report_path="launchable_stdout.log" >> $GITHUB_OUTPUT
+ echo stderr_report_path="launchable_stderr.log" >> $GITHUB_OUTPUT
+ if: steps.enable-launchable.outputs.enable-launchable
+
+ - name: Set environment variables for Launchable
+ shell: bash
+ run: |
+ : # GITHUB_PULL_REQUEST_URL are used for commenting test reports in Launchable Github App.
+ : # https://github.com/launchableinc/cli/blob/v1.80.1/launchable/utils/link.py#L42
+ echo "GITHUB_PULL_REQUEST_URL=${{ github.event.pull_request.html_url }}" >> $GITHUB_ENV
+ : # The following envs are necessary in Launchable tokenless authentication.
+ : # https://github.com/launchableinc/cli/blob/v1.80.1/launchable/utils/authentication.py#L20
+ echo "LAUNCHABLE_ORGANIZATION=${{ github.repository_owner }}" >> $GITHUB_ENV
+ echo "LAUNCHABLE_WORKSPACE=${{ github.event.repository.name }}" >> $GITHUB_ENV
+ : # https://github.com/launchableinc/cli/blob/v1.80.1/launchable/utils/authentication.py#L71
+ echo "GITHUB_PR_HEAD_SHA=${{ github.event.pull_request.head.sha || github.sha }}" >> $GITHUB_ENV
+ echo "LAUNCHABLE_TOKEN=${{ inputs.launchable-token }}" >> $GITHUB_ENV
+ : # To prevent a slowdown in CI, disable request retries when the Launchable server is unstable.
+ echo "LAUNCHABLE_SKIP_TIMEOUT_RETRY=1" >> $GITHUB_ENV
+ echo "LAUNCHABLE_COMMIT_TIMEOUT=1" >> $GITHUB_ENV
+ if: steps.enable-launchable.outputs.enable-launchable
+
+ - name: Set up path
+ shell: bash
+ working-directory: ${{ inputs.srcdir }}
+ # Since updated PATH variable will be available in only subsequent actions, we need to add the path beforehand.
+ # https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#adding-a-system-path
+ run: echo "$(python -msite --user-base)/bin" >> $GITHUB_PATH
+ if: >-
+ ${{
+ steps.enable-launchable.outputs.enable-launchable
+ && (startsWith(inputs.os, 'macos')
+ || endsWith(inputs.os, 'ppc64le')
+ || endsWith(inputs.os, 's390x'))
+ }}
+
+ - name: Set up Launchable
+ id: setup-launchable
+ shell: bash
+ working-directory: ${{ inputs.srcdir }}
+ run: |
+ set -x
+ pip install --user launchable
+ : # The build name cannot include a slash, so we replace the string here.
+ github_ref="${{ github.ref }}"
+ github_ref="${github_ref//\//_}"
+ : # With the --name option, we need to configure a unique identifier for this build.
+ : # To avoid setting the same build name as the CI which runs on other branches, we use the branch name here.
+ build_name="${github_ref}_${GITHUB_PR_HEAD_SHA}"
+ test_opts="${{ inputs.test-opts }}"
+ test_opts="${test_opts// /}"
+ test_opts="${test_opts//=/:}"
+ test_all_test_suite='test-all'
+ btest_test_suite='btest'
+ test_spec_test_suite='test-spec'
+ if [ "${{ inputs.is-yjit }}" = "true" ]; then
+ test_all_test_suite="yjit-${test_all_test_suite}"
+ btest_test_suite="yjit-${btest_test_suite}"
+ test_spec_test_suite="yjit-${test_spec_test_suite}"
+ fi
+ # launchable_setup target var -- refers ${target} prefixed variables
+ launchable_setup() {
+ local target=$1 session
+ eval [ "\${${target}_enabled}" = "true" ] || return
+ eval local suite=\${${target}_test_suite}
+ session=$(launchable record session \
+ --build "${build_name}" \
+ --observation \
+ --flavor os="${{ inputs.os }}" \
+ --flavor test_task="${{ inputs.test-task }}" \
+ --flavor test_opts="${test_opts}" \
+ --flavor workflow="${{ github.workflow }}" \
+ --test-suite ${suite} \
+ )
+ echo "${target}_session=${session}" >> $GITHUB_OUTPUT
+ }
+
+ launchable record build --name "${build_name}"
+ if launchable_setup test_all; then
+ echo "TESTS=${TESTS:+$TESTS }--launchable-test-reports=${test_all_report_file}" >> $GITHUB_ENV
+ fi
+ if launchable_setup btest; then
+ echo "BTESTS=${BTESTS:+$BTESTS }--launchable-test-reports=${btest_report_file}" >> $GITHUB_ENV
+ fi
+ if launchable_setup test_spec; then
+ echo "SPECOPTS=${SPECOPTS:$SPECOPTS }--launchable-test-reports=${test_spec_report_dir}" >> $GITHUB_ENV
+ echo test_spec_enabled=true >> $GITHUB_OUTPUT
+ fi
+
+ echo launchable_setup_dir=$(pwd) >> $GITHUB_OUTPUT
+ if: steps.enable-launchable.outputs.enable-launchable
+ env:
+ test_all_enabled: ${{ steps.global.outputs.test_all_enabled }}
+ btest_enabled: ${{ steps.global.outputs.btest_enabled }}
+ test_spec_enabled: ${{ steps.global.outputs.test_spec_enabled }}
+ test_all_report_file: ${{ steps.global.outputs.test_all_report_file }}
+ btest_report_file: ${{ steps.global.outputs.btest_report_file }}
+ test_spec_report_dir: ${{ steps.global.outputs.test_spec_report_dir }}
+
+ - name: make test-spec report directory in build directory
+ shell: bash
+ working-directory: ${{ inputs.builddir }}
+ run: mkdir "${test_spec_report_dir}"
+ if: ${{ steps.setup-launchable.outputs.test_spec_enabled == 'true' }}
+ env:
+ test_spec_report_dir: ${{ steps.global.outputs.test_spec_report_dir }}
+
+ - name: Clean up test results in Launchable
+ uses: gacts/run-and-post-run@674528335da98a7afc80915ff2b4b860a0b3553a # v1.4.0
+ with:
+ shell: bash
+ working-directory: ${{ inputs.builddir }}
+ post: |
+ rm -f "${test_all_report_file}"
+ rm -f "${btest_report_file}"
+ rm -fr "${test_spec_report_dir}"
+ rm -f launchable_stdout.log
+ rm -f launchable_stderr.log
+ if: always() && steps.setup-launchable.outcome == 'success'
+ env:
+ test_all_report_file: ${{ steps.global.outputs.test_all_report_file }}
+ btest_report_file: ${{ steps.global.outputs.btest_report_file }}
+ test_spec_report_dir: ${{ steps.global.outputs.test_spec_report_dir }}
+
+ - name: Record test results in Launchable
+ uses: gacts/run-and-post-run@674528335da98a7afc80915ff2b4b860a0b3553a # v1.4.0
+ with:
+ shell: bash
+ working-directory: ${{ inputs.builddir }}
+ post: |
+ if [[ "${test_all_enabled}" = "true" ]]; then \
+ launchable record attachment \
+ --session "${test_all_session}" \
+ "${stdout_report_path}" \
+ "${stderr_report_path}"; \
+ launchable record tests \
+ --session "${test_all_session}" \
+ raw "${test_all_report_file}" || true; \
+ fi
+
+ if [[ "${btest_enabled}" = "true" ]]; then \
+ launchable record attachment \
+ --session "${btest_session}" \
+ "${stdout_report_path}" \
+ "${stderr_report_path}"; \
+ launchable record tests \
+ --session "${btest_session}" \
+ raw "${btest_report_file}" || true; \
+ fi
+
+ if [[ "${test_spec_enabled}" = "true" ]]; then \
+ launchable record attachment \
+ --session "${test_spec_session}" \
+ "${stdout_report_path}" \
+ "${stderr_report_path}"; \
+ launchable record tests \
+ --session "${test_spec_session}" \
+ raw ${test_spec_report_dir}/* || true; \
+ fi
+ if: ${{ always() && steps.setup-launchable.outcome == 'success' }}
+ env:
+ test_all_report_file: ${{ steps.global.outputs.test_all_report_file }}
+ btest_report_file: ${{ steps.global.outputs.btest_report_file }}
+ test_spec_report_dir: ${{ steps.global.outputs.test_spec_report_dir }}
+ test_all_enabled: ${{ steps.global.outputs.test_all_enabled }}
+ btest_enabled: ${{ steps.global.outputs.btest_enabled }}
+ test_spec_enabled: ${{ steps.global.outputs.test_spec_enabled }}
+ test_all_session: ${{ steps.setup-launchable.outputs.test_all_session }}
+ btest_session: ${{ steps.setup-launchable.outputs.btest_session }}
+ test_spec_session: ${{ steps.setup-launchable.outputs.test_spec_session }}
+ stdout_report_path: ${{ steps.global.outputs.stdout_report_path }}
+ stderr_report_path: ${{ steps.global.outputs.stderr_report_path }}
+ LAUNCHABLE_SETUP_DIR: ${{ steps.setup-launchable.outputs.launchable_setup_dir }}
diff --git a/.github/actions/setup/directories/action.yml b/.github/actions/setup/directories/action.yml
new file mode 100644
index 0000000000..0e8ffd59ef
--- /dev/null
+++ b/.github/actions/setup/directories/action.yml
@@ -0,0 +1,194 @@
+name: Setup directories etc.
+description: >-
+ Set up the source code and build directories (plus some
+ environmental tweaks)
+
+inputs:
+ srcdir:
+ required: false
+ default: ${{ github.workspace }}
+ description: >-
+ Directory to (re-)checkout source codes. This will be created
+ if absent. If there is no `configure` file that is also
+ generated inside.
+
+ builddir:
+ required: false
+ default: ${{ github.workspace }}
+ description: >-
+ Where binaries and other generated contents go. This will be
+ created if absent.
+
+ make-command:
+ required: false
+ type: string
+ default: 'make'
+ description: >-
+ The command of `make`.
+
+ makeup:
+ required: false
+ type: boolean
+ # Note that `default: false` evaluates to a string constant
+ # `'false'`, which is a truthy value :sigh:
+ # https://github.com/actions/runner/issues/2238
+ default: ''
+ description: >-
+ If set to true, additionally runs `make up`.
+
+ checkout:
+ required: false
+ type: boolean
+ default: true
+ description: >-
+ If set to '' (false), skip running actions/checkout. This is useful when
+ you don't want to overwrite a GitHub token that is already set up.
+
+ dummy-files:
+ required: false
+ type: boolean
+ default: ''
+ description: >-
+ If set to true, creates dummy files in build dir.
+
+ fetch-depth:
+ required: false
+ default: '1'
+ description: The depth of commit history fetched from the remote repository
+
+ clean:
+ required: false
+ type: boolean
+ default: ''
+ description: >-
+ If set to true, clean build directory.
+
+outputs: {} # nothing?
+
+runs:
+ using: composite
+
+ steps:
+ # Note that `shell: bash` works on both Windows and Linux, but not
+ # `shell: sh`. This is because GitHub hosted Windows runners have
+ # their bash manually installed.
+ - shell: bash
+ run: |
+ mkdir -p ${{ inputs.srcdir }}
+ mkdir -p ${{ inputs.builddir }}
+
+ # Did you know that actions/checkout works without git(1)? We are
+ # checking that here.
+ - id: which
+ shell: bash
+ run: |
+ echo "git=`command -v git`" >> "$GITHUB_OUTPUT"
+ echo "sudo=`sudo true && command -v sudo`" >> "$GITHUB_OUTPUT"
+ echo "autoreconf=`command -v autoreconf`" >> "$GITHUB_OUTPUT"
+
+ - if: steps.which.outputs.git
+ shell: bash
+ run: |
+ git config --global core.autocrlf false
+ git config --global core.eol lf
+ git config --global advice.detachedHead 0
+ git config --global init.defaultBranch garbage
+
+ - if: inputs.checkout
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ path: ${{ inputs.srcdir }}
+ fetch-depth: ${{ inputs.fetch-depth }}
+
+ - uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2
+ with:
+ path: ${{ inputs.srcdir }}/.downloaded-cache
+ key: ${{ runner.os }}-${{ runner.arch }}-downloaded-cache
+
+ - if: steps.which.outputs.autoreconf
+ shell: bash
+ working-directory: ${{ inputs.srcdir }}
+ run: ./autogen.sh --install
+
+ # This is for MinGW.
+ - if: runner.os == 'Windows'
+ shell: bash
+ run: echo "GNUMAKEFLAGS=-j$((2 * NUMBER_OF_PROCESSORS))" >> $GITHUB_ENV
+
+ - if: runner.os == 'Linux'
+ shell: bash
+ run: echo "GNUMAKEFLAGS=-sj$((1 + $(nproc)))" >> "$GITHUB_ENV"
+
+ # macOS' GNU make is so old that they doesn't understand `GNUMAKEFLAGS`.
+ - if: runner.os == 'macOS'
+ shell: bash
+ run: echo "MAKEFLAGS=-j$((1 + $(sysctl -n hw.activecpu)))" >> "$GITHUB_ENV"
+
+ - if: inputs.makeup
+ shell: bash
+ working-directory: ${{ inputs.srcdir }}
+ run: |
+ touch config.status .rbconfig.time
+ for mk in Makefile GNUmakefile; do
+ sed -f tool/prereq.status template/$mk.in > $mk
+ done
+ make up
+
+ # Cleanup, runs even on failure
+ - if: always() && inputs.makeup
+ shell: bash
+ working-directory: ${{ inputs.srcdir }}
+ run: |
+ rm -f config.status .rbconfig.time \
+ Makefile GNUmakefile uncommon.mk enc.mk noarch-fake.rb
+
+ - if: steps.which.outputs.sudo
+ shell: bash
+ run: |
+ sudo chmod -R go-w /usr/share
+ chmod -v go-w $HOME $HOME/.config || :
+ declare -a dirs # -A is not supported by old bash, e.g. macos
+ SAVE_IFS="$IFS" IFS=:; set $PATH
+ for d do
+ while [ -d "$d" ]; do
+ case "$IFS${dirs[*]}$IFS" in *"$IFS$d$IFS"*) ;; *) dirs+=("$d");; esac
+ d="${d%/*}"
+ done
+ done
+ IFS="$SAVE_IFS"
+ sudo chmod -v go-w "${dirs[@]}" || :
+
+ - if: inputs.dummy-files == 'true'
+ shell: bash
+ id: dummy-files
+ working-directory: ${{ inputs.builddir }}
+ run: |
+ : Create dummy files in build dir
+ set {{a..z},{A..Z},{0..9},foo,bar,test,zzz}.rb
+ for file; do \
+ echo > $file "raise 'do not load $file'"; \
+ done
+ # drop {a..z}.rb if case-insensitive filesystem
+ grep -F A.rb a.rb > /dev/null && set "${@:27}"
+ echo clean="cd ${{ inputs.builddir }} && rm $*" >> $GITHUB_OUTPUT
+
+ - if: inputs.clean == 'true'
+ shell: bash
+ id: clean
+ run: |
+ echo distclean='cd ${{ inputs.builddir }} && ${{ inputs.make-command }} distclean' >> $GITHUB_OUTPUT
+ echo remained-files='find ${{ inputs.builddir }} -ls' >> $GITHUB_OUTPUT
+ [ "${{ inputs.builddir }}" = "${{ inputs.srcdir }}" ] ||
+ echo final='rmdir ${{ inputs.builddir }}' >> $GITHUB_OUTPUT
+
+ - name: clean
+ uses: gacts/run-and-post-run@81b6ce503cde93862cec047c54652e45c5dca991 # v1.4.3
+ with:
+ working-directory:
+ post: |
+ ${{ steps.dummy-files.outputs.clean }}
+ ${{ steps.clean.outputs.distclean }}
+ ${{ steps.clean.outputs.remained-files }}
+ ${{ steps.clean.outputs.final }}
+ # rmdir randomly fails due to launchable files
+ continue-on-error: true
diff --git a/.github/actions/setup/macos/action.yml b/.github/actions/setup/macos/action.yml
new file mode 100644
index 0000000000..d0072ff828
--- /dev/null
+++ b/.github/actions/setup/macos/action.yml
@@ -0,0 +1,29 @@
+name: Setup macOS environment
+description: >-
+ Installs necessary packages via Homebrew.
+
+inputs: {} # nothing?
+
+outputs: {} # nothing?
+
+runs:
+ using: composite
+
+ steps:
+ - name: brew
+ shell: bash
+ run: |
+ brew install --quiet jemalloc gmp libffi openssl@3 zlib autoconf automake libtool
+
+ - name: Set ENV
+ shell: bash
+ run: |
+ dir_config() {
+ local args=() lib var="$1"; shift
+ for lib in "$@"; do
+ args+=("--with-${lib%@*}-dir=$(brew --prefix $lib)")
+ done
+ echo "$var=${args[*]}" >> $GITHUB_ENV
+ }
+ dir_config ruby_configure_args gmp
+ dir_config CONFIGURE_ARGS openssl@3
diff --git a/.github/actions/setup/ubuntu/action.yml b/.github/actions/setup/ubuntu/action.yml
new file mode 100644
index 0000000000..a9e5b41951
--- /dev/null
+++ b/.github/actions/setup/ubuntu/action.yml
@@ -0,0 +1,53 @@
+name: Setup ubuntu environment
+description: >-
+ At the beginning there was no way but to copy & paste `apt-get`
+ everywhere. But now that we have composite actions, it seems better
+ merge them into one.
+
+inputs:
+ arch:
+ required: false
+ default: ''
+ description: >-
+ Architecture. Because we run this on a GitHub-hosted runner
+ acceptable value for this input is very limited.
+
+outputs:
+ arch:
+ value: ${{ steps.uname.outputs.uname }}
+ description: >-
+ Actual architecture. This could be different from the one
+ passed to the `inputs.arch`. For instance giving `i386` to this
+ action yields `i686`.
+
+runs:
+ using: composite
+
+ steps:
+ - name: set SETARCH
+ shell: bash
+ run: echo "SETARCH=${setarch}" >> "$GITHUB_ENV"
+ env:
+ setarch: ${{ inputs.arch && format('setarch {0} --', inputs.arch) }}
+
+ - id: uname
+ name: uname
+ shell: bash
+ run: |
+ echo uname=`${SETARCH} uname -m` >> "$GITHUB_OUTPUT"
+ echo dpkg=`${SETARCH} uname -m | sed s/686/386/` >> "$GITHUB_OUTPUT"
+
+ - name: apt-get
+ shell: bash
+ env:
+ arch: ${{ inputs.arch && format(':{0}', steps.uname.outputs.dpkg) || '' }}
+ run: |
+ set -x
+ ${arch:+sudo dpkg --add-architecture ${arch#:}}
+ sudo apt-get update -qq || :
+ sudo apt-get install --no-install-recommends -qq -y -o=Dpkg::Use-Pty=0 \
+ ${arch:+cross}build-essential${arch/:/-} \
+ libssl-dev${arch} libyaml-dev${arch} libreadline6-dev${arch} \
+ zlib1g-dev${arch} libncurses5-dev${arch} libffi-dev${arch} \
+ autoconf ruby
+ sudo apt-get install -qq -y pkg-config${arch} || :
diff --git a/.github/actions/slack/action.yml b/.github/actions/slack/action.yml
new file mode 100644
index 0000000000..4a398da1d1
--- /dev/null
+++ b/.github/actions/slack/action.yml
@@ -0,0 +1,51 @@
+name: Post a message to slack
+description: >-
+ We have our ruby/action-slack webhook. However its arguments are
+ bit verbose to be listed in every workflow files. Better merge them
+ into one.
+
+inputs:
+ SLACK_WEBHOOK_URL:
+ required: true
+ description: >-
+ The URL to post the payload. This is an input because it tends
+ to be stored in a secrets vault and a composite action cannot
+ look into one.
+
+ label:
+ required: false
+ description: >-
+ Human-readable description of the run, something like "DEBUG=1".
+ This need not be unique among runs.
+
+ event_name:
+ required: false
+ default: 'push'
+ description: >-
+ Target event to trigger notification. Notify only push by default.
+
+ extra_channel_id:
+ required: false
+ description: >-
+ Slack channel ID to notify besides #alerts and #alerts-emoji.
+
+outputs: {} # Nothing?
+
+runs:
+ using: composite
+
+ steps:
+ - uses: ruby/action-slack@54175162371f1f7c8eb94d7c8644ee2479fcd375 # v3.2.2
+ with:
+ payload: |
+ {
+ "ci": "GitHub Actions",
+ "env": "${{ github.workflow }}${{ inputs.label && format(' / {0}', inputs.label) }}",
+ "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}",
+ "commit": "${{ github.sha }}",
+ "branch": "${{ github.ref_name }}"
+ ${{ inputs.extra_channel_id && format(', "extra_channel_id": "{0}"', inputs.extra_channel_id) }}
+ }
+ env:
+ SLACK_WEBHOOK_URL: ${{ inputs.SLACK_WEBHOOK_URL }}
+ if: ${{ github.event_name == inputs.event_name && startsWith(github.repository, 'ruby/') }}
diff --git a/.github/auto_request_review.yml b/.github/auto_request_review.yml
new file mode 100644
index 0000000000..38496d5ceb
--- /dev/null
+++ b/.github/auto_request_review.yml
@@ -0,0 +1,20 @@
+files:
+ 'yjit*': [team:jit]
+ 'yjit/**/*': [team:jit]
+ 'yjit/src/cruby_bindings.inc.rs': []
+ 'bootstraptest/test_yjit*': [team:jit]
+ 'test/ruby/test_yjit*': [team:jit]
+ 'zjit*': [team:jit]
+ 'zjit/**/*': [team:jit]
+ 'zjit/src/cruby_bindings.inc.rs': []
+ 'test/ruby/test_zjit*': [team:jit]
+ 'defs/jit.mk': [team:jit]
+ 'tool/zjit_bisect.rb': [team:jit]
+ 'doc/jit/*': [team:jit]
+ # Skip github workflow files because the team don't necessarily need to review dependabot updates for GitHub Actions. It's noisy in notifications, and they're auto-merged anyway.
+options:
+ ignore_draft: true
+ # This currently doesn't work as intended. We want to skip reviews when only
+ # cruby_bingings.inc.rs is modified, but this skips reviews even when other
+ # files are modified as well. To be enabled after fixing the behavior.
+ #last_files_match_only: true
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000000..2c2982d1d4
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,22 @@
+version: 2
+updates:
+ - package-ecosystem: 'github-actions'
+ directory: '/'
+ schedule:
+ interval: 'daily'
+ - package-ecosystem: 'github-actions'
+ directory: '/.github/actions/slack'
+ schedule:
+ interval: 'daily'
+ - package-ecosystem: 'github-actions'
+ directory: '/.github/actions/setup/directories'
+ schedule:
+ interval: 'daily'
+ - package-ecosystem: 'cargo'
+ directory: '/yjit'
+ schedule:
+ interval: 'daily'
+ - package-ecosystem: 'vcpkg'
+ directory: '/'
+ schedule:
+ interval: 'daily'
diff --git a/.github/labeler.yml b/.github/labeler.yml
new file mode 100644
index 0000000000..e81aed8e98
--- /dev/null
+++ b/.github/labeler.yml
@@ -0,0 +1,6 @@
+Documentation:
+- changed-files:
+ - all-globs-to-all-files: doc/**
+
+Backport:
+- base-branch: 'ruby_3_\d'
diff --git a/.github/workflows/annocheck.yml b/.github/workflows/annocheck.yml
new file mode 100644
index 0000000000..899d601aef
--- /dev/null
+++ b/.github/workflows/annocheck.yml
@@ -0,0 +1,110 @@
+name: Annocheck
+
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ compile:
+ name: test-annocheck
+
+ runs-on: ubuntu-latest
+
+ container:
+ image: ghcr.io/ruby/ruby-ci-image:gcc-11
+ options: --user root
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ env:
+ CONFIGURE_TTY: never
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+ RUBY_DEBUG: ci rgengc
+ RUBY_TESTOPTS: >-
+ -q
+ --color=always
+ --tty=no
+ # FIXME: Drop skipping options
+ # https://bugs.ruby-lang.org/issues/18061
+ # https://sourceware.org/annobin/annobin.html/Test-pie.html
+ TEST_ANNOCHECK_OPTS: '--skip-pie --skip-gaps'
+
+ steps:
+ - run: id
+ working-directory:
+
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: /.github
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ ruby-version: '3.1'
+ bundler: none
+
+ # Minimal flags to pass the check.
+ # -g0 disables backtraces when SEGV. Do not set that.
+ - name: Run configure
+ run: >
+ ../src/configure -C
+ --enable-debug-env
+ --disable-install-doc
+ --with-ext=-test-/cxxanyargs,+
+ --without-valgrind
+ --without-jemalloc
+ --without-gmp
+ --with-gcc="gcc-11 -fcf-protection -Wa,--generate-missing-build-notes=yes"
+ --enable-shared
+ debugflags=-ggdb3
+ optflags=-O2
+ LDFLAGS=-Wl,-z,now
+
+ - run: make showflags
+
+ - run: make
+
+ - run: make test-annocheck
+
+ - uses: ./.github/actions/slack
+ with:
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+defaults:
+ run:
+ working-directory: build
diff --git a/.github/workflows/auto_request_review.yml b/.github/workflows/auto_request_review.yml
new file mode 100644
index 0000000000..207315a084
--- /dev/null
+++ b/.github/workflows/auto_request_review.yml
@@ -0,0 +1,20 @@
+name: Auto Request Review
+on:
+ pull_request_target:
+ types: [opened, ready_for_review, reopened]
+ branches: [master]
+
+permissions:
+ contents: read
+
+jobs:
+ auto-request-review:
+ name: Auto Request Review
+ runs-on: ubuntu-latest
+ if: ${{ github.repository == 'ruby/ruby' && github.base_ref == 'master' }}
+ steps:
+ - name: Request review based on files changes and/or groups the author belongs to
+ uses: necojackarc/auto-request-review@e89da1a8cd7c8c16d9de9c6e763290b6b0e3d424 # v0.13.0
+ with:
+ # scope: public_repo
+ token: ${{ secrets.MATZBOT_AUTO_REQUEST_REVIEW_TOKEN }}
diff --git a/.github/workflows/auto_review_pr.yml b/.github/workflows/auto_review_pr.yml
new file mode 100644
index 0000000000..ad0e63ba12
--- /dev/null
+++ b/.github/workflows/auto_review_pr.yml
@@ -0,0 +1,33 @@
+name: Auto Review PR
+on:
+ pull_request_target:
+ types: [opened, ready_for_review, reopened]
+ branches: [master]
+
+permissions:
+ contents: read
+
+jobs:
+ auto-review-pr:
+ name: Auto Review PR
+ runs-on: ubuntu-latest
+ if: ${{ github.repository == 'ruby/ruby' && github.base_ref == 'master' }}
+
+ permissions:
+ pull-requests: write
+ contents: read
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6.0.1
+
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ ruby-version: '3.4'
+ bundler: none
+
+ - name: Auto Review PR
+ run: ruby tool/auto_review_pr.rb "$GITHUB_PR_NUMBER"
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }}
diff --git a/.github/workflows/baseruby.yml b/.github/workflows/baseruby.yml
new file mode 100644
index 0000000000..d3e734f885
--- /dev/null
+++ b/.github/workflows/baseruby.yml
@@ -0,0 +1,74 @@
+name: BASERUBY Check
+
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ baseruby:
+ name: BASERUBY
+
+ runs-on: ubuntu-22.04
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ strategy:
+ matrix:
+ ruby:
+ - ruby-3.1
+ - ruby-3.2
+ - ruby-3.3
+
+ steps:
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ ruby-version: ${{ matrix.ruby }}
+ bundler: none
+
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ - uses: ./.github/actions/setup/ubuntu
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ makeup: true
+
+ - run: ./configure --disable-install-doc
+
+ - run: make all
+
+ - run: make test
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ${{ matrix.ruby }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
diff --git a/.github/workflows/bundled_gems.yml b/.github/workflows/bundled_gems.yml
new file mode 100644
index 0000000000..59f64e8312
--- /dev/null
+++ b/.github/workflows/bundled_gems.yml
@@ -0,0 +1,190 @@
+name: bundled_gems
+
+env:
+ UPDATE_ENABLED: true
+
+on:
+ push:
+ branches: ['master']
+ paths:
+ - '.github/workflows/bundled_gems.yml'
+ - 'gems/bundled_gems'
+ pull_request:
+ branches: ['master']
+ paths:
+ - '.github/workflows/bundled_gems.yml'
+ - 'gems/bundled_gems'
+ merge_group:
+ schedule:
+ - cron: '45 6 * * *'
+ workflow_dispatch:
+
+permissions: # added using https://github.com/step-security/secure-workflows
+ contents: read
+
+jobs:
+ update:
+ permissions:
+ contents: write # for Git to git push
+
+ if: ${{ github.event_name != 'schedule' || github.repository == 'ruby/ruby' }}
+
+ name: update ${{ github.workflow }}
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ token: ${{ (github.repository == 'ruby/ruby' && !startsWith(github.event_name, 'pull')) && secrets.MATZBOT_AUTO_UPDATE_TOKEN || secrets.GITHUB_TOKEN }}
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ # Skip overwriting MATZBOT_AUTO_UPDATE_TOKEN
+ checkout: '' # false (ref: https://github.com/actions/runner/issues/2238)
+
+ - name: Set ENV
+ run: |
+ echo "TODAY=$(date +%F)" >> $GITHUB_ENV
+
+ - name: Download previous gems list
+ run: |
+ mkdir -p .downloaded-cache
+ for data in bundled_gems.json default_gems.json; do
+ ln -s .downloaded-cache/$data .
+ curl -O -R -z ./$data https://stdgems.org/$data
+ done
+
+ - name: Update bundled gems list
+ id: bundled_gems
+ run: |
+ ruby -i~ tool/update-bundled_gems.rb gems/bundled_gems >> $GITHUB_OUTPUT
+ if: ${{ env.UPDATE_ENABLED == 'true' }}
+
+ - name: Update spec/bundler/support/builders.rb
+ run: |
+ #!ruby
+ rake_version = File.read("gems/bundled_gems")[/^rake\s+(\S+)/, 1]
+ print ARGF.read.sub(/^ *def rake_version\s*\K".*?"/) {rake_version.dump}
+ shell: ruby -i~ {0} spec/bundler/support/builders.rb
+ if: ${{ env.UPDATE_ENABLED == 'true' }}
+
+ - name: Maintain updated gems list in NEWS
+ run: |
+ ruby tool/update-NEWS-gemlist.rb bundled
+ if: ${{ env.UPDATE_ENABLED == 'true' }}
+
+ - name: Check diffs
+ id: diff
+ run: |
+ news= gems=
+ git diff --color --no-ext-diff --ignore-submodules --exit-code -- NEWS.md ||
+ news=true
+ git diff --color --no-ext-diff --ignore-submodules --exit-code -- gems/bundled_gems ||
+ gems=true
+ git add -- NEWS.md gems/bundled_gems
+ git add -- spec/bundler/support/builders.rb
+ echo news=$news >> $GITHUB_OUTPUT
+ echo gems=$gems >> $GITHUB_OUTPUT
+ echo update=${news:-$gems} >> $GITHUB_OUTPUT
+
+ - name: Commit
+ id: commit
+ run: |
+ git pull --ff-only origin ${GITHUB_REF#refs/heads/}
+ message="Update bundled gems list"
+ if [ -z "${gems}" ]; then
+ git commit --message="[DOC] ${message} at ${GITHUB_SHA:0:30}"
+ else
+ git commit --message="${message} as of ${TODAY}"
+ fi
+ env:
+ TODAY: ${{ steps.bundled_gems.outputs.latest_date || env.TODAY }}
+ EMAIL: svn-admin@ruby-lang.org
+ GIT_AUTHOR_NAME: git
+ GIT_COMMITTER_NAME: git
+ gems: ${{ steps.diff.outputs.gems }}
+ if: ${{ steps.diff.outputs.update }}
+
+ - name: Development revision of bundled gems
+ run: |
+ #!ruby
+ file = "gems/bundled_gems"
+
+ SECONDS_IN_DAY = 86400
+ today = Time.new("#{ENV['TODAY']}Z")
+ if !(december = today.month == 12)
+ days = 30
+ elsif (days = 26 - today.day).positive?
+ days += 4
+ else
+ puts "::info:: just after released"
+ exit
+ end
+
+ since = "#{today.year-1}-12-26"
+ ref = ENV['GITHUB_REF']
+ puts "::group::\e[94mfetching \e[1m#{file}\e[22m since \e[1m#{since}\e[22m from \e[1m#{ref}\e[m"
+ system(*%W[git fetch --shallow-since=#{since} --no-tags origin #{ref}], exception: true)
+ puts "::endgroup::"
+
+ puts "\e[94mchecking development version bundled gems older than \e[1m#{days}\e[22m days\e[m"
+ limit = today.to_i - days * SECONDS_IN_DAY
+ old = 0
+ IO.popen(%W"git blame --line-porcelain -- #{file}") do |blame|
+ while head = blame.gets("\n\t") and s = blame.gets
+ next unless (gem = s.split(/\s+|#.*/)).size > 3
+ time = head[/^committer-time \K\d+/].to_i
+ next if (d = limit - time) <= 0
+ d /= SECONDS_IN_DAY
+ line = head[/\A\h+ \d+ \K\d+/].to_i
+ level = if d < days; 'warning'; else old += 1; 'error'; end
+ d += days
+ puts "::#{level} file=#{file},line=#{line},title=Older than #{d} days::#{gem[0]} #{gem[3]}"
+ end
+ end
+ abort "::error title=Too long-standing gems::The release comes soon." if december and old.nonzero?
+ shell: ruby {0}
+ env:
+ file: ${{ steps.logs.outputs.file }}
+ days: ${{ steps.logs.outputs.days }}
+
+ - name: Install libraries
+ uses: ./.github/actions/setup/ubuntu
+ if: ${{ steps.diff.outputs.gems }}
+
+ - name: Build
+ run: |
+ ./autogen.sh
+ ./configure -C --disable-install-doc
+ make
+ if: ${{ steps.diff.outputs.gems }}
+
+ - name: Prepare bundled gems
+ run: |
+ make -s prepare-gems
+ if: ${{ steps.diff.outputs.gems }}
+
+ - name: Test bundled gems
+ run: |
+ make -s test-bundled-gems
+ timeout-minutes: 30
+ env:
+ RUBY_TESTOPTS: '-q --tty=no'
+ TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
+ if: ${{ steps.diff.outputs.gems }}
+
+ - name: Push
+ run: |
+ git push origin ${GITHUB_REF#refs/heads/}
+ if: >-
+ ${{
+ github.repository == 'ruby/ruby' &&
+ !startsWith(github.event_name, 'pull') &&
+ steps.commit.outcome == 'success'
+ }}
+
+ - uses: ./.github/actions/slack
+ with:
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml
new file mode 100644
index 0000000000..c5dec65e48
--- /dev/null
+++ b/.github/workflows/check_dependencies.yml
@@ -0,0 +1,59 @@
+name: Check Dependencies
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ update-deps:
+ name: Dependency checks
+
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ fail-fast: true
+
+ runs-on: ${{ matrix.os }}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ - uses: ./.github/actions/setup/ubuntu
+ if: ${{ contains(matrix.os, 'ubuntu') }}
+
+ - uses: ./.github/actions/setup/macos
+ if: ${{ contains(matrix.os, 'macos') }}
+
+ - uses: ./.github/actions/setup/directories
+
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ ruby-version: '3.1'
+ bundler: none
+
+ - name: Run configure
+ run: ./configure -C --disable-install-doc --disable-rubygems --with-gcc 'optflags=-O0' 'debugflags=-save-temps=obj -g'
+
+ - run: make fix-depends
+
+ - run: git diff --no-ext-diff --ignore-submodules --exit-code
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ${{ matrix.os }} / Dependencies need to update
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
diff --git a/.github/workflows/check_misc.yml b/.github/workflows/check_misc.yml
new file mode 100644
index 0000000000..2a2bd1df53
--- /dev/null
+++ b/.github/workflows/check_misc.yml
@@ -0,0 +1,127 @@
+name: Misc
+on: [push, pull_request, merge_group]
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ checks:
+ name: Miscellaneous checks
+
+ permissions:
+ contents: write # for Git to git push
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ token: ${{ (github.repository == 'ruby/ruby' && !startsWith(github.event_name, 'pull')) && secrets.MATZBOT_AUTO_UPDATE_TOKEN || secrets.GITHUB_TOKEN }}
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ makeup: true
+ # Skip overwriting MATZBOT_AUTO_UPDATE_TOKEN
+ checkout: '' # false (ref: https://github.com/actions/runner/issues/2238)
+
+ - name: Check for code styles
+ run: |
+ set -x
+ ruby tool/auto-style.rb "$GITHUB_OLD_SHA" "$GITHUB_NEW_SHA"
+ env:
+ GITHUB_OLD_SHA: ${{ github.event.pull_request.base.sha }}
+ GITHUB_NEW_SHA: ${{ github.event.pull_request.merge_commit_sha }}
+ # Skip 'push' events because post_push.yml fixes them on push
+ if: ${{ github.repository == 'ruby/ruby' && startsWith(github.event_name, 'pull') }}
+
+ - name: Check for bash specific substitution in configure.ac
+ run: |
+ git grep -n '\${[A-Za-z_0-9]*/' -- configure.ac && exit 1 || :
+
+ - name: Check for header macros
+ run: |
+ fail=
+ for header in ruby/*.h; do
+ git grep -l -F -e $header -e HAVE_`echo $header | tr a-z./ A-Z__` -- . > /dev/null && continue
+ fail=1
+ echo $header
+ done
+ exit $fail
+ working-directory: include
+
+ - id: now
+ run: |
+ date +"mon=%-m"%n"day=%-d" >> $GITHUB_OUTPUT
+ env:
+ TZ: Tokyo/Asia
+
+ - id: deprecation
+ run: |
+ eval $(sed -n 's/^#define RUBY_API_VERSION_\(MAJOR\|MINOR\) /\1=/p' include/ruby/version.h)
+ if git --no-pager grep --color -o 'rb_warn_deprecated_to_remove_at('$MAJOR'\.'$MINOR',.*' -- '*.c' >&2; then
+ false
+ else
+ true
+ fi
+ continue-on-error: ${{ steps.now.outputs.mon < 12 }}
+
+ - name: Check if to generate documents
+ id: rdoc
+ run: |
+ set -- $(sed 's/#.*//;/^rdoc /!d' gems/bundled_gems)
+ { echo version=$2; echo ref=$4; } >> $GITHUB_OUTPUT
+ echo RDOC='ruby -W0 --disable-gems tool/rdoc-srcdir -q' >> $GITHUB_ENV
+
+ - name: Checkout rdoc
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ repository: ruby/rdoc
+ ref: ${{ steps.rdoc.outputs.ref }}
+ path: .bundle/gems/rdoc-${{ steps.rdoc.outputs.version }}
+ if: ${{ steps.rdoc.outputs.ref != '' }}
+
+ - name: Generate rdoc
+ run: |
+ set -x
+ gempath=$(ruby -e 'print Gem.user_dir, "/bin"')
+ PATH=$gempath:$PATH
+ gem install --user bundler
+ bundle config --local path vendor/bundle
+ bundle install --jobs 4
+ bundle exec rake generate
+ working-directory: .bundle/gems/rdoc-${{ steps.rdoc.outputs.version }}
+ if: ${{ steps.rdoc.outputs.ref != '' }}
+
+ - name: Core docs coverage
+ run: |
+ $RDOC -C -x ^ext -x ^lib .
+
+ - name: Generate docs
+ id: docs
+ run: |
+ $RDOC --op html .
+ echo htmlout=ruby-html-${GITHUB_SHA:0:10} >> $GITHUB_OUTPUT
+ # Generate only when document commit/PR
+ if: >-
+ ${{false
+ || contains(github.event.head_commit.message, '[ruby/rdoc]')
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ }}
+
+ - name: Upload docs
+ uses: actions/upload-artifact@v6.0.0
+ with:
+ path: html
+ name: ${{ steps.docs.outputs.htmlout }}
+ if: ${{ steps.docs.outcome == 'success' }}
+
+ - uses: ./.github/actions/slack
+ with:
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
new file mode 100644
index 0000000000..a92c93b476
--- /dev/null
+++ b/.github/workflows/codeql-analysis.yml
@@ -0,0 +1,121 @@
+name: 'CodeQL'
+
+on:
+ push:
+ branches: ['master']
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ schedule:
+ - cron: '0 12 * * *'
+ workflow_dispatch:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions: # added using https://github.com/step-security/secure-workflows
+ contents: read
+
+jobs:
+ analyze:
+ name: Analyze
+ runs-on: ubuntu-latest
+ permissions:
+ actions: read # for github/codeql-action/init to get workflow details
+ contents: read # for actions/checkout to fetch code
+ security-events: write # for github/codeql-action/autobuild to send a status report
+ # CodeQL fails to run pull requests from dependabot due to missing write access to upload results.
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ env:
+ enable_install_doc: no
+
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - language: cpp
+ - language: ruby
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ - name: Install libraries
+ if: ${{ contains(matrix.os, 'macos') }}
+ uses: ./.github/actions/setup/macos
+
+ - name: Install libraries
+ if : ${{ matrix.os == 'ubuntu-latest' }}
+ uses: ./.github/actions/setup/ubuntu
+
+ - uses: ./.github/actions/setup/directories
+
+ - name: Remove an obsolete rubygems vendored file
+ if: ${{ matrix.os == 'ubuntu-latest' }}
+ run: sudo rm /usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb
+
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7
+ with:
+ languages: ${{ matrix.language }}
+ trap-caching: false
+ debug: true
+
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7
+ with:
+ category: '/language:${{ matrix.language }}'
+ upload: False
+ output: sarif-results
+
+ - name: filter-sarif
+ uses: advanced-security/filter-sarif@f3b8118a9349d88f7b1c0c488476411145b6270d # v1.0.1
+ with:
+ patterns: |
+ +**/*.rb
+ -lib/uri/mailto.rb:rb/overly-large-range
+ -lib/uri/rfc3986_parser.rb:rb/overly-large-range
+ -lib/bundler/vendor/uri/lib/uri/mailto.rb:rb/overly-large-range
+ -lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb:rb/overly-large-range
+ -test/ruby/test_io.rb:rb/non-constant-kernel-open
+ -test/open-uri/test_open-uri.rb:rb/non-constant-kernel-open
+ -test/open-uri/test_ssl.rb:rb/non-constant-kernel-open
+ -spec/ruby/core/io/binread_spec.rb:rb/non-constant-kernel-open
+ -spec/ruby/core/io/readlines_spec.rb:rb/non-constant-kernel-open
+ -spec/ruby/core/io/foreach_spec.rb:rb/non-constant-kernel-open
+ -spec/ruby/core/io/write_spec.rb:rb/non-constant-kernel-open
+ -spec/ruby/core/io/read_spec.rb:rb/non-constant-kernel-open
+ -spec/ruby/core/kernel/open_spec.rb:rb/non-constant-kernel-open
+ input: sarif-results/${{ matrix.language }}.sarif
+ output: sarif-results/${{ matrix.language }}.sarif
+ if: ${{ matrix.language == 'ruby' }}
+ continue-on-error: true
+
+ - name: Upload SARIF
+ uses: github/codeql-action/upload-sarif@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7
+ with:
+ sarif_file: sarif-results/${{ matrix.language }}.sarif
+ continue-on-error: true
diff --git a/.github/workflows/compilers.yml b/.github/workflows/compilers.yml
new file mode 100644
index 0000000000..8c0ca54e0b
--- /dev/null
+++ b/.github/workflows/compilers.yml
@@ -0,0 +1,335 @@
+# Some tests depending on this name 'Compilations' via $GITHUB_WORKFLOW. Make sure to update such tests when renaming this workflow.
+name: Compilations
+
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+# Each job is split so that they roughly take 30min to run through.
+jobs:
+ compile-if:
+ name: 'omnibus compilations, trigger'
+ runs-on: ubuntu-latest
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+ steps:
+ - run: true
+ working-directory:
+
+ compile1:
+ name: 'omnibus compilations, #1'
+ runs-on: ubuntu-latest
+ needs: compile-if
+ if: ${{ needs.compile-if.result == 'success' }}
+ timeout-minutes: 60
+ services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } }
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ # Set fetch-depth: 10 so that Launchable can receive commits information.
+ - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
+ - name: 'clang 18 LTO'
+ uses: './.github/actions/compilers'
+ with:
+ tag: clang-18
+ with_gcc: 'clang-18 -flto=auto'
+ optflags: '-O2'
+ enable_shared: false
+ timeout-minutes: 30
+ - { uses: './.github/actions/compilers', name: '-O0', with: { optflags: '-O0 -march=x86-64 -mtune=generic' }, timeout-minutes: 5 }
+ # - { uses: './.github/actions/compilers', name: '-O3', with: { optflags: '-O3 -march=x86-64 -mtune=generic', check: true } }
+
+ compile2:
+ name: 'omnibus compilations, #2'
+ runs-on: ubuntu-latest
+ needs: compile-if
+ if: ${{ needs.compile-if.result == 'success' }}
+ timeout-minutes: 60
+ services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } }
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
+ - name: 'GCC 15 LTO'
+ uses: './.github/actions/compilers'
+ with:
+ tag: gcc-15
+ with_gcc: 'gcc-15 -flto=auto -ffat-lto-objects -Werror=lto-type-mismatch'
+ optflags: '-O2'
+ enable_shared: false
+ timeout-minutes: 10
+ - { uses: './.github/actions/compilers', name: 'ext/Setup', with: { static_exts: 'etc json/* */escape' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GCC 15', with: { tag: 'gcc-15' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GCC 14', with: { tag: 'gcc-14' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GCC 13', with: { tag: 'gcc-13' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GCC 12', with: { tag: 'gcc-12' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GCC 11', with: { tag: 'gcc-11' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GCC 10', with: { tag: 'gcc-10' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GCC 9', with: { tag: 'gcc-9' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GCC 8', with: { tag: 'gcc-8' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GCC 7', with: { tag: 'gcc-7' }, timeout-minutes: 5 }
+
+ compile3:
+ name: 'omnibus compilations, #3'
+ runs-on: ubuntu-latest
+ needs: compile-if
+ if: ${{ needs.compile-if.result == 'success' }}
+ timeout-minutes: 60
+ services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } }
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
+ - { uses: './.github/actions/compilers', name: 'clang 22', with: { tag: 'clang-22' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 21', with: { tag: 'clang-21' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 20', with: { tag: 'clang-20' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 19', with: { tag: 'clang-19' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 18', with: { tag: 'clang-18' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 17', with: { tag: 'clang-17' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 16', with: { tag: 'clang-16' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 15', with: { tag: 'clang-15' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 14', with: { tag: 'clang-14' }, timeout-minutes: 5 }
+
+ compile4:
+ name: 'omnibus compilations, #4'
+ runs-on: ubuntu-latest
+ needs: compile-if
+ if: ${{ needs.compile-if.result == 'success' }}
+ timeout-minutes: 60
+ services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } }
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
+ - { uses: './.github/actions/compilers', name: 'clang 13', with: { tag: 'clang-13' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 12', with: { tag: 'clang-12' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 11', with: { tag: 'clang-11' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 10', with: { tag: 'clang-10' }, timeout-minutes: 5 }
+ # llvm-objcopy<=9 doesn't have --wildcard. It compiles, but leaves Rust symbols in libyjit.o and fail `make test-leaked-globals`.
+ - { uses: './.github/actions/compilers', name: 'clang 9', with: { tag: 'clang-9', append_configure: '--disable-yjit --disable-zjit' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 8', with: { tag: 'clang-8', append_configure: '--disable-yjit --disable-zjit' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 7', with: { tag: 'clang-7', append_configure: '--disable-yjit --disable-zjit' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'clang 6', with: { tag: 'clang-6.0', append_configure: '--disable-yjit --disable-zjit' }, timeout-minutes: 5 }
+
+ compile5:
+ name: 'omnibus compilations, #5'
+ runs-on: ubuntu-latest
+ needs: compile-if
+ if: ${{ needs.compile-if.result == 'success' }}
+ timeout-minutes: 60
+ services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } }
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
+ # -Wno-strict-prototypes is necessary with current clang-15 since
+ # older autoconf generate functions without prototype and -pedantic
+ # now implies strict-prototypes. Disabling the error but leaving the
+ # warning generates a lot of noise from use of ANYARGS in
+ # rb_define_method() and friends.
+ # See: https://github.com/llvm/llvm-project/commit/11da1b53d8cd3507959022cd790d5a7ad4573d94
+ - { uses: './.github/actions/compilers', name: 'C99', with: { CFLAGS: '-std=c99 -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'C11', with: { CFLAGS: '-std=c11 -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'C17', with: { CFLAGS: '-std=c17 -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'C23', with: { CFLAGS: '-std=c2x -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'C++98', with: { CXXFLAGS: '-std=c++98 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'C++11', with: { CXXFLAGS: '-std=c++11 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'C++14', with: { CXXFLAGS: '-std=c++14 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'C++17', with: { CXXFLAGS: '-std=c++17 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 5 }
+
+ compile6:
+ name: 'omnibus compilations, #6'
+ runs-on: ubuntu-latest
+ needs: compile-if
+ if: ${{ needs.compile-if.result == 'success' }}
+ timeout-minutes: 60
+ services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } }
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
+ - { uses: './.github/actions/compilers', name: 'C++20', with: { CXXFLAGS: '-std=c++20 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'C++23', with: { CXXFLAGS: '-std=c++23 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'C++26', with: { CXXFLAGS: '-std=c++26 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'gmp', with: { append_configure: '--with-gmp', test_all: 'ruby/test_bignum.rb', test_spec: "/github/workspace/src/spec/ruby/core/integer" }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'jemalloc', with: { append_configure: '--with-jemalloc' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'valgrind', with: { append_configure: '--with-valgrind' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'coroutine=ucontext', with: { append_configure: '--with-coroutine=ucontext' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'coroutine=pthread', with: { append_configure: '--with-coroutine=pthread' }, timeout-minutes: 5 }
+
+ compile7:
+ name: 'omnibus compilations, #7'
+ runs-on: ubuntu-latest
+ needs: compile-if
+ if: ${{ needs.compile-if.result == 'success' }}
+ timeout-minutes: 60
+ services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } }
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
+ - { uses: './.github/actions/compilers', name: 'disable-jit', with: { append_configure: '--disable-yjit --disable-zjit' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'disable-yjit', with: { append_configure: '--disable-yjit' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'disable-zjit', with: { append_configure: '--disable-zjit' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'disable-dln', with: { append_configure: '--disable-dln' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'enable-mkmf-verbose', with: { append_configure: '--enable-mkmf-verbose' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'disable-rubygems', with: { append_configure: '--disable-rubygems' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'RUBY_DEVEL', with: { append_configure: '--enable-devel' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'OPT_THREADED_CODE=0', with: { cppflags: '-DOPT_THREADED_CODE=0' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'OPT_THREADED_CODE=1', with: { cppflags: '-DOPT_THREADED_CODE=1' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'OPT_THREADED_CODE=2', with: { cppflags: '-DOPT_THREADED_CODE=2' }, timeout-minutes: 5 }
+
+ compile8:
+ name: 'omnibus compilations, #8'
+ runs-on: ubuntu-latest
+ needs: compile-if
+ if: ${{ needs.compile-if.result == 'success' }}
+ timeout-minutes: 60
+ services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } }
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
+ - { uses: './.github/actions/compilers', name: 'NDEBUG', with: { cppflags: '-DNDEBUG' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'RUBY_DEBUG', with: { cppflags: '-DRUBY_DEBUG' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'ARRAY_DEBUG', with: { cppflags: '-DARRAY_DEBUG' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'BIGNUM_DEBUG', with: { cppflags: '-DBIGNUM_DEBUG' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'CCAN_LIST_DEBUG', with: { cppflags: '-DCCAN_LIST_DEBUG' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'CPDEBUG=-1', with: { cppflags: '-DCPDEBUG=-1' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'ENC_DEBUG', with: { cppflags: '-DENC_DEBUG' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GC_DEBUG', with: { cppflags: '-DGC_DEBUG' }, timeout-minutes: 5 }
+
+ compile9:
+ name: 'omnibus compilations, #9'
+ runs-on: ubuntu-latest
+ needs: compile-if
+ if: ${{ needs.compile-if.result == 'success' }}
+ timeout-minutes: 60
+ services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } }
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
+ - { uses: './.github/actions/compilers', name: 'HASH_DEBUG', with: { cppflags: '-DHASH_DEBUG' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'ID_TABLE_DEBUG', with: { cppflags: '-DID_TABLE_DEBUG' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'RGENGC_DEBUG=-1', with: { cppflags: '-DRGENGC_DEBUG=-1' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'SYMBOL_DEBUG', with: { cppflags: '-DSYMBOL_DEBUG' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'RGENGC_CHECK_MODE', with: { cppflags: '-DRGENGC_CHECK_MODE' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'VM_CHECK_MODE', with: { cppflags: '-DVM_CHECK_MODE' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'USE_EMBED_CI=0', with: { cppflags: '-DUSE_EMBED_CI=0' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'USE_FLONUM=0', with: { cppflags: '-DUSE_FLONUM=0', append_configure: '--disable-yjit --disable-zjit' }, timeout-minutes: 5 }
+
+ compileX:
+ name: 'omnibus compilations, #10'
+ runs-on: ubuntu-latest
+ needs: compile-if
+ if: ${{ needs.compile-if.result == 'success' }}
+ timeout-minutes: 60
+ services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } }
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
+ - { uses: './.github/actions/compilers', name: 'USE_LAZY_LOAD', with: { cppflags: '-DUSE_LAZY_LOAD' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'USE_SYMBOL_GC=0', with: { cppflags: '-DUSE_SYMBOL_GC=0' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'USE_THREAD_CACHE=0', with: { cppflags: '-DUSE_THREAD_CACHE=0' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'USE_RUBY_DEBUG_LOG=1', with: { cppflags: '-DUSE_RUBY_DEBUG_LOG=1' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'USE_DEBUG_COUNTER', with: { cppflags: '-DUSE_DEBUG_COUNTER=1' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'SHARABLE_MIDDLE_SUBSTRING', with: { cppflags: '-DSHARABLE_MIDDLE_SUBSTRING=1' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'DEBUG_FIND_TIME_NUMGUESS', with: { cppflags: '-DDEBUG_FIND_TIME_NUMGUESS' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'DEBUG_INTEGER_PACK', with: { cppflags: '-DDEBUG_INTEGER_PACK' }, timeout-minutes: 5 }
+
+ compileB:
+ name: 'omnibus compilations, #11'
+ runs-on: ubuntu-latest
+ needs: compile-if
+ if: ${{ needs.compile-if.result == 'success' }}
+ timeout-minutes: 60
+ services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } }
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
+ - { uses: './.github/actions/compilers', name: 'GC_DEBUG_STRESS_TO_CLASS', with: { cppflags: '-DGC_DEBUG_STRESS_TO_CLASS' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GC_ENABLE_LAZY_SWEEP=0', with: { cppflags: '-DGC_ENABLE_LAZY_SWEEP=0' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GC_PROFILE_DETAIL_MEMORY', with: { cppflags: '-DGC_PROFILE_DETAIL_MEMORY' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'GC_PROFILE_MORE_DETAIL', with: { cppflags: '-DGC_PROFILE_MORE_DETAIL' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'MALLOC_ALLOCATED_SIZE_CHECK', with: { cppflags: '-DMALLOC_ALLOCATED_SIZE_CHECK' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'RGENGC_ESTIMATE_OLDMALLOC', with: { cppflags: '-DRGENGC_ESTIMATE_OLDMALLOC' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'RGENGC_PROFILE', with: { cppflags: '-DRGENGC_PROFILE' }, timeout-minutes: 5 }
+
+ compileC:
+ name: 'omnibus compilations, #12'
+ runs-on: ubuntu-latest
+ needs: compile-if
+ if: ${{ needs.compile-if.result == 'success' }}
+ timeout-minutes: 60
+ services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } }
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true, fetch-depth: 10 } }
+ - { uses: './.github/actions/compilers', name: 'VM_DEBUG_BP_CHECK', with: { cppflags: '-DVM_DEBUG_BP_CHECK' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'VM_DEBUG_VERIFY_METHOD_CACHE', with: { cppflags: '-DVM_DEBUG_VERIFY_METHOD_CACHE' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'YJIT_FORCE_ENABLE', with: { cppflags: '-DYJIT_FORCE_ENABLE' }, timeout-minutes: 5 }
+ - { uses: './.github/actions/compilers', name: 'UNIVERSAL_PARSER', with: { cppflags: '-DUNIVERSAL_PARSER' }, timeout-minutes: 5 }
+
+ compilemax:
+ name: 'omnibus compilations, result'
+ runs-on: ubuntu-latest
+ if: ${{ always() }}
+ needs:
+ - 'compile1'
+ - 'compile2'
+ - 'compile3'
+ - 'compile4'
+ - 'compile5'
+ - 'compile6'
+ - 'compile7'
+ - 'compile8'
+ - 'compile9'
+ - 'compileX'
+ - 'compileB'
+ - 'compileC'
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github }
+ - uses: ./.github/actions/slack
+ with:
+ label: 'omnibus'
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
+ - run: false
+ working-directory:
+ if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
+
+defaults:
+ run:
+ working-directory: build
diff --git a/.github/workflows/cygwin.yml b/.github/workflows/cygwin.yml
new file mode 100644
index 0000000000..ac73991fe8
--- /dev/null
+++ b/.github/workflows/cygwin.yml
@@ -0,0 +1,71 @@
+name: Cygwin
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ make:
+ runs-on: windows-2022
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - run: git config --global core.autocrlf input
+
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ - name: Setup Cygwin
+ uses: cygwin/cygwin-install-action@master
+ with:
+ packages: ruby gcc-core make autoconf libtool libssl-devel libyaml-devel libffi-devel zlib-devel rubygems
+
+ - name: configure
+ run: |
+ ./autogen.sh
+ ./configure --disable-install-doc
+ shell: C:\cygwin\bin\bash.EXE --noprofile --norc -e -o igncr -o pipefail {0}
+
+ - name: Extract bundled gems
+ run: |
+ make ruby -j5
+ make extract-gems
+ shell: C:\cygwin\bin\bash.EXE --noprofile --norc -e -o igncr -o pipefail {0}
+
+ - name: make all
+ timeout-minutes: 30
+ run: make -j4 V=1
+ shell: C:\cygwin\bin\bash.EXE --noprofile --norc -e -o igncr -o pipefail {0}
+
+ - uses: ./.github/actions/slack
+ with:
+ label: Cygwin
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
diff --git a/.github/workflows/default_gems_list.yml b/.github/workflows/default_gems_list.yml
new file mode 100644
index 0000000000..1c7e2195c8
--- /dev/null
+++ b/.github/workflows/default_gems_list.yml
@@ -0,0 +1,99 @@
+name: Update default gems list
+on: [push, pull_request, merge_group]
+
+env:
+ UPDATE_NEWS_ENABLED: true
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ update_default_gems_list:
+ name: Update default gems list
+
+ permissions:
+ contents: write # for Git to git push
+
+ runs-on: ubuntu-latest
+
+ if: ${{ github.repository == 'ruby/ruby' }}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ token: ${{ (github.repository == 'ruby/ruby' && !startsWith(github.event_name, 'pull')) && secrets.MATZBOT_AUTO_UPDATE_TOKEN || secrets.GITHUB_TOKEN }}
+
+ - id: gems
+ run: true
+ if: ${{ github.ref == 'refs/heads/master' }}
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ makeup: true
+ # Skip overwriting MATZBOT_AUTO_UPDATE_TOKEN
+ checkout: '' # false (ref: https://github.com/actions/runner/issues/2238)
+ if: ${{ steps.gems.outcome == 'success' }}
+
+ - name: Download previous gems list
+ run: |
+ data=default_gems.json
+ mkdir -p .downloaded-cache
+ ln -s .downloaded-cache/$data .
+ curl -O -R -z ./$data https://stdgems.org/$data
+ if: ${{ steps.gems.outcome == 'success' }}
+
+ - name: Make default gems list
+ run: |
+ #!ruby
+ require 'rubygems'
+ $:.unshift "lib"
+ rgver = File.foreach("lib/rubygems.rb") do |line|
+ break $1 if /^\s*VERSION\s*=\s*"([^"]+)"/ =~ line
+ end
+ gems = Dir.glob("{ext,lib}/**/*.gemspec").map do |f|
+ spec = Gem::Specification.load(f)
+ "#{spec.name} #{spec.version}"
+ end.sort
+ File.open("gems/default_gems", "w") do |f|
+ f.puts "RubyGems #{rgver}"
+ f.puts gems
+ end
+ shell: ruby --disable=gems {0}
+ if: ${{ steps.gems.outcome == 'success' }}
+
+ - name: Maintain updated gems list in NEWS
+ run: |
+ ruby tool/update-NEWS-gemlist.rb default
+ if: ${{ steps.gems.outcome == 'success' && env.UPDATE_NEWS_ENABLED == 'true' }}
+
+ - name: Check diffs
+ id: diff
+ run: |
+ git diff --color --no-ext-diff --ignore-submodules --exit-code NEWS.md ||
+ echo update=true >> $GITHUB_OUTPUT
+ if: ${{ steps.gems.outcome == 'success' }}
+
+ - name: Commit
+ run: |
+ git pull --ff-only origin ${GITHUB_REF#refs/heads/}
+ git commit --message="Update default gems list at ${GITHUB_SHA:0:30} [ci skip]" NEWS.md
+ git push origin ${GITHUB_REF#refs/heads/}
+ env:
+ EMAIL: svn-admin@ruby-lang.org
+ GIT_AUTHOR_NAME: git
+ GIT_COMMITTER_NAME: git
+ if: >-
+ ${{
+ github.repository == 'ruby/ruby' &&
+ !startsWith(github.event_name, 'pull') &&
+ steps.diff.outputs.update
+ }}
+
+ - uses: ./.github/actions/slack
+ with:
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
diff --git a/.github/workflows/dependabot_automerge.yml b/.github/workflows/dependabot_automerge.yml
new file mode 100644
index 0000000000..a95c7005c4
--- /dev/null
+++ b/.github/workflows/dependabot_automerge.yml
@@ -0,0 +1,32 @@
+# from https://github.com/gofiber/swagger/blob/main/.github/workflows/dependabot_automerge.yml
+name: Dependabot auto-merge
+on:
+ pull_request:
+
+permissions:
+ contents: write
+ pull-requests: write
+
+jobs:
+ automerge:
+ runs-on: ubuntu-latest
+ if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'ruby/ruby'
+ steps:
+ - name: Dependabot metadata
+ uses: dependabot/fetch-metadata@21025c705c08248db411dc16f3619e6b5f9ea21a # v2.5.0
+ id: metadata
+
+ - name: Wait for status checks
+ uses: lewagon/wait-on-check-action@3603e826ee561ea102b58accb5ea55a1a7482343 # v1.4.1
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
+ check-regexp: 'make \(check, .*\)'
+ wait-interval: 30
+
+ - name: Auto-merge for Dependabot PRs
+ if: ${{ steps.metadata.outputs.update-type == 'version-update:semver-minor' || steps.metadata.outputs.update-type == 'version-update:semver-patch' }}
+ run: gh pr merge --auto --rebase "$PR_URL"
+ env:
+ PR_URL: ${{ github.event.pull_request.html_url }}
+ GITHUB_TOKEN: ${{ secrets.MATZBOT_DEPENDABOT_MERGE_TOKEN }}
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
new file mode 100644
index 0000000000..16dbac1afa
--- /dev/null
+++ b/.github/workflows/labeler.yml
@@ -0,0 +1,12 @@
+name: "Pull Request Labeler"
+on:
+- pull_request_target
+
+jobs:
+ labeler:
+ permissions:
+ contents: read
+ pull-requests: write
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/labeler@v6
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
new file mode 100644
index 0000000000..29adcab39a
--- /dev/null
+++ b/.github/workflows/macos.yml
@@ -0,0 +1,202 @@
+name: macOS
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ # Do not use paths-ignore for required status checks
+ # https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ make:
+ strategy:
+ matrix:
+ include:
+ - test_task: check
+ os: macos-14
+ - test_task: check
+ os: macos-14
+ configure_args: '--with-gcc=gcc-14'
+ - test_task: check
+ os: macos-14
+ configure_args: '--with-jemalloc --with-opt-dir=$(brew --prefix jemalloc)'
+ - test_task: check
+ os: macos-14
+ configure_args: '--with-gmp'
+ - test_task: test-all
+ test_opts: --repeat-count=2
+ os: macos-14
+ - test_task: test-bundler-parallel
+ os: macos-14
+ - test_task: test-bundled-gems
+ os: macos-14
+ - test_task: check
+ os: macos-15
+ fail-fast: false
+
+ env:
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+
+ runs-on: ${{ matrix.os }}
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: /.github
+
+ - name: Install libraries
+ uses: ./.github/actions/setup/macos
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+ clean: true
+ dummy-files: ${{ matrix.test_task == 'check' }}
+ # Set fetch-depth: 0 so that Launchable can receive commits information.
+ fetch-depth: 10
+
+ - name: make sure that kern.coredump=1
+ run: |
+ sysctl -n kern.coredump
+ sudo sysctl -w kern.coredump=1
+ sudo chmod -R +rwx /cores/
+
+ - name: Delete unused SDKs
+ # To free up disk space to not run out during the run
+ run: |
+ sudo rm -rf ~/.dotnet
+ sudo rm -rf /Library/Android
+ sudo rm -rf /Library/Developer/CoreSimulator
+ continue-on-error: true
+
+ - name: Run configure
+ run: ../src/configure -C --disable-install-doc ${ruby_configure_args} ${{ matrix.configure_args }}
+
+ - run: make prepare-gems
+ if: ${{ matrix.test_task == 'test-bundled-gems' }}
+
+ - run: make
+
+ - run: make hello
+
+ - name: runirb
+ run: |
+ echo IRB::VERSION | make runirb RUNOPT="-- -f"
+
+ - name: Set test options for skipped tests
+ run: |
+ set -x
+ TESTS="$(echo "${{ matrix.skipped_tests }}" | sed 's| |$$/ -n!/|g;s|^|-n!/|;s|$|$$/|')"
+ echo "TESTS=${TESTS}" >> $GITHUB_ENV
+ if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }}
+
+ - name: Set up Launchable
+ id: launchable
+ uses: ./.github/actions/launchable/setup
+ with:
+ os: ${{ matrix.os }}
+ test-opts: ${{ matrix.test_opts }}
+ launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }}
+ builddir: build
+ srcdir: src
+ continue-on-error: true
+ timeout-minutes: 3
+
+ - name: Set extra test options
+ run: |
+ echo "TESTS=$TESTS ${{ matrix.test_opts }}" >> $GITHUB_ENV
+ echo "RUBY_TEST_TIMEOUT_SCALE=10" >> $GITHUB_ENV # With --repeat-count=2, flaky test by timeout occurs frequently for some reason
+ if: matrix.test_opts
+
+ - name: make ${{ matrix.test_task }}
+ run: |
+ test -n "${LAUNCHABLE_STDOUT}" && exec 1> >(tee "${LAUNCHABLE_STDOUT}")
+ test -n "${LAUNCHABLE_STDERR}" && exec 2> >(tee "${LAUNCHABLE_STDERR}")
+
+ ulimit -c unlimited
+ make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"}
+ timeout-minutes: 90
+ env:
+ RUBY_TESTOPTS: '-q --tty=no'
+ TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
+ PRECHECK_BUNDLED_GEMS: 'no'
+ LAUNCHABLE_STDOUT: ${{ steps.launchable.outputs.stdout_report_path }}
+ LAUNCHABLE_STDERR: ${{ steps.launchable.outputs.stderr_report_path }}
+
+ - name: make skipped tests
+ run: |
+ make -s test-all TESTS="${TESTS//-n!\//-n/}"
+ env:
+ GNUMAKEFLAGS: ''
+ RUBY_TESTOPTS: '-v --tty=no'
+ PRECHECK_BUNDLED_GEMS: 'no'
+ if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }}
+ continue-on-error: ${{ matrix.continue-on-skipped_tests || false }}
+
+ - name: CAPI extensions
+ uses: ./.github/actions/capiext
+ with:
+ builddir: build
+ env:
+ RUBY_TESTOPTS: '-v --tty=no'
+ if: ${{ contains(matrix.extra_checks, 'capi') }}
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ${{ matrix.os }} / ${{ matrix.test_task }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+ - name: Resolve job ID
+ id: job_id
+ uses: actions/github-script@main
+ env:
+ matrix: ${{ toJson(matrix) }}
+ with:
+ script: |
+ const { data: workflow_run } = await github.rest.actions.listJobsForWorkflowRun({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ run_id: context.runId
+ });
+ const matrix = JSON.parse(process.env.matrix);
+ const job_name = `${context.job}${matrix ? ` (${Object.values(matrix).join(", ")})` : ""}`;
+ return workflow_run.jobs.find((job) => job.name === job_name).id;
+
+ result:
+ if: ${{ always() }}
+ name: ${{ github.workflow }} result
+ runs-on: macos-latest
+ needs: [make]
+ steps:
+ - run: exit 1
+ working-directory:
+ if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
+
+defaults:
+ run:
+ working-directory: build
diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml
new file mode 100644
index 0000000000..5c639ad48b
--- /dev/null
+++ b/.github/workflows/mingw.yml
@@ -0,0 +1,243 @@
+name: MinGW
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+# Notes:
+# Actions console encoding causes issues, see test-all & test-spec steps
+#
+jobs:
+ make:
+ runs-on: windows-${{ matrix.os }}
+
+ name: ${{ github.workflow }} (${{ matrix.msystem }})
+
+ env:
+ MSYSTEM: ${{ matrix.msystem }}
+ MSYS2_ARCH: >-
+ ${{
+ contains(matrix.msystem, 'arm64') && 'aarch64' ||
+ contains(matrix.msystem, '64') && 'x86_64' || 'i686'
+ }}
+ MINGW_PACKAGE_PREFIX: >-
+ mingw-w${{
+ endsWith(matrix.msystem, '64') && '64' || '32'
+ }}-${{
+ startsWith(matrix.msystem, 'clang') && 'clang' ||
+ startsWith(matrix.msystem, 'ucrt') && 'ucrt' ||
+ 'mingw'
+ }}-${{
+ contains(matrix.msystem, 'arm64') && 'aarch64' ||
+ endsWith(matrix.msystem, '64') && 'x86_64' || 'i686'
+ }}
+ CFLAGS: '-mtune=generic -O3 -pipe'
+ CXXFLAGS: '-mtune=generic -O3 -pipe'
+ CPPFLAGS: '-D_FORTIFY_SOURCE=2 -D__USE_MINGW_ANSI_STDIO=1 -DFD_SETSIZE=2048'
+ LDFLAGS: '-pipe'
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+
+ strategy:
+ matrix:
+ include:
+ # To mitigate flakiness of MinGW CI, we test only one runtime that newer MSYS2 uses.
+ # Ruby 3.2 is the first Windows Ruby to use OpenSSL 3.x
+ - msystem: 'UCRT64'
+ os: 2022
+ test_task: 'check'
+ test-all-opts: '--name=!/TestObjSpace#test_reachable_objects_during_iteration/'
+ - msystem: 'CLANGARM64'
+ os: 11-arm
+ test_task: 'check'
+ fail-fast: false
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: msys2/setup-msys2@4f806de0a5a7294ffabaff804b38a9b435a73bda # v2.30.0
+ id: msys2
+ with:
+ msystem: ${{ matrix.msystem }}
+ update: true
+ install: >-
+ git
+ make
+ ruby
+ autoconf
+ ${{ env.MINGW_PACKAGE_PREFIX }}-gcc
+ ${{ env.MINGW_PACKAGE_PREFIX }}-ragel
+ ${{ env.MINGW_PACKAGE_PREFIX }}-openssl
+ ${{ env.MINGW_PACKAGE_PREFIX }}-libyaml
+ ${{ env.MINGW_PACKAGE_PREFIX }}-libffi
+
+ - name: Set up env
+ id: setup-env
+ working-directory:
+ run: |
+ $msys2 = ${env:MSYS2_LOCATION}
+ $msystem = ${env:MSYSTEM}.ToLower()
+ echo $msys2\usr\bin $msys2\$msystem\bin |
+ Tee-Object ${env:GITHUB_PATH} -Append -Encoding utf-8
+
+ # Use the fast device for the temporary directory.
+ # %TEMP% is inconsistent with %TMP% and test-all expects they are consistent.
+ # https://github.com/actions/virtual-environments/issues/712#issuecomment-613004302
+ $tmp = ${env:RUNNER_TEMP}
+ echo HOME=$home TMP=$tmp TEMP=$tmp TMPDIR=$tmp |
+ Tee-Object ${env:GITHUB_ENV} -Append -Encoding utf-8
+ shell: pwsh # cmd.exe does not strip spaces before `|`.
+ env:
+ MSYS2_LOCATION: ${{ steps.msys2.outputs.msys2-location }}
+ MSYSTEM: ${{ matrix.msystem }}
+
+ - name: Remove Strawberry Perl pkg-config
+ working-directory:
+ # `pkg-config.bat` included in Strawberry Perl is written in
+ # Perl and doesn't work when another msys2 `perl` precede its
+ # own `perl`.
+ #
+ # ```
+ # Can't find C:\Strawberry\perl\bin\pkg-config.bat on PATH, '.' not in PATH.
+ # ```
+ run: |
+ Get-Command pkg-config.bat | % { ren $_.path ($_.path + "~") }
+ shell: pwsh
+
+ - name: Misc system & package info
+ working-directory:
+ run: |
+ group() { echo ::group::$'\e[94;1m'"$*"$'\e[m'; }
+ endgroup() { echo ::endgroup::; }
+
+ group Path
+ cygpath -wa / . $(type -p cygpath bash sh)
+ endgroup
+
+ I() {
+ group $1
+ run Where type -pa $1 && { [ $# -eq 1 ] || run Version "$@"; } ||
+ failed+=($1)
+ endgroup
+ }
+ run() { local w m=$1; shift; w="$("$@")" && show "$m" && indent "$w"; }
+ indent() { [ -z "$1" ] || echo "$1" | /bin/sed '/^$/!s/^/ /'; }
+ show() { echo $'\e[96m'"$*"$'\e[m'; }
+
+ failed=()
+
+ I gcc.exe --version
+ I ragel.exe --version
+ I make.exe --version
+ I openssl.exe version
+ I libcrypto-3-x64.dll
+ I libssl-3-x64.dll
+
+ group Packages
+ pacman -Qs $MINGW_PACKAGE_PREFIX-* | /bin/sed -n "s,local/$MINGW_PACKAGE_PREFIX-,,p"
+ endgroup
+
+ [ ${#failed[@]} -eq 0 ]
+ shell: sh
+
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: /.github
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+ # Set fetch-depth: 10 so that Launchable can receive commits information.
+ fetch-depth: 10
+
+ - name: configure
+ run: >
+ ../src/configure --disable-install-doc --prefix=/.
+ --build=$CHOST --host=$CHOST --target=$CHOST
+ shell: sh
+ env:
+ CHOST: ${{ env.MSYS2_ARCH }}-w64-mingw32
+
+ - name: make all
+ timeout-minutes: 30
+ run: make -j4
+
+ - name: make install
+ run: make DESTDIR=../install install-nodoc
+
+ - name: Set up Launchable
+ uses: ./.github/actions/launchable/setup
+ with:
+ os: windows-2022
+ launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }}
+ builddir: build
+ srcdir: src
+ test-tasks: '["test", "test-all", "test-spec"]'
+ continue-on-error: true
+ timeout-minutes: 3
+
+ - name: test
+ timeout-minutes: 30
+ run: make test test-tool
+ env:
+ GNUMAKEFLAGS: ''
+ RUBY_TESTOPTS: '-v --tty=no'
+ if: ${{ matrix.test_task == 'check' || matrix.test_task == 'test' }}
+
+ - name: test-all
+ timeout-minutes: 45
+ run: |
+ make ${{ StartsWith(matrix.test_task, 'test/') && matrix.test_task || 'test-all' }}
+ env:
+ RUBY_TESTOPTS: >-
+ --retry --job-status=normal --show-skip --timeout-scale=1.5 -j4
+ ${{ matrix.test-all-opts }}
+ ${{ env.TESTS }}
+ BUNDLER_VERSION:
+ if: ${{ matrix.test_task == 'check' || matrix.test_task == 'test-all' || StartsWith(matrix.test_task, 'test/') }}
+
+ - name: test-spec
+ timeout-minutes: 10
+ run: |
+ make ${{ StartsWith(matrix.test_task, 'spec/') && matrix.test_task || 'test-spec' }}
+ if: ${{ matrix.test_task == 'check' || matrix.test_task == 'test-spec' || StartsWith(matrix.test_task, 'spec/') }}
+
+ - uses: ./src/.github/actions/slack
+ with:
+ label: ${{ matrix.msystem }} / ${{ matrix.test_task }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+defaults:
+ run:
+ working-directory: build
+ shell: cmd
diff --git a/.github/workflows/modgc.yml b/.github/workflows/modgc.yml
new file mode 100644
index 0000000000..1d14934df8
--- /dev/null
+++ b/.github/workflows/modgc.yml
@@ -0,0 +1,176 @@
+name: ModGC
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ # Do not use paths-ignore for required status checks
+ # https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ check:
+ strategy:
+ matrix:
+ gc:
+ - name: default
+ - name: mmtk
+ mmtk_build: release
+ os: [macos-latest, ubuntu-latest]
+ include:
+ - test_task: check
+ fail-fast: false
+
+ env:
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+ RUBY_DEBUG: ci
+
+ runs-on: ${{ matrix.os }}
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: /.github
+
+ - name: Install libraries (macOS)
+ uses: ./.github/actions/setup/macos
+ if: ${{ contains(matrix.os, 'macos') }}
+
+ - name: Install libraries (Ubuntu)
+ uses: ./.github/actions/setup/ubuntu
+ if: ${{ contains(matrix.os, 'ubuntu') }}
+
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ ruby-version: '3.1'
+ bundler: none
+ if: ${{ contains(matrix.os, 'ubuntu') }}
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+ clean: true
+ dummy-files: false
+ # Set fetch-depth: 10 so that Launchable can receive commits information.
+ fetch-depth: 10
+
+ - name: make sure that kern.coredump=1
+ run: |
+ sysctl -n kern.coredump
+ sudo sysctl -w kern.coredump=1
+ sudo chmod -R +rwx /cores/
+ if: ${{ contains(matrix.os, 'macos') }}
+
+ - name: Delete unused SDKs
+ # To free up disk space to not run out during the run
+ run: |
+ sudo rm -rf ~/.dotnet
+ sudo rm -rf /Library/Android
+ sudo rm -rf /Library/Developer/CoreSimulator
+ continue-on-error: true
+ if: ${{ contains(matrix.os, 'macos') }}
+
+ - name: Setup Ruby GC Directory
+ run: |
+ echo "MODULAR_GC_DIR=$HOME/ruby_gc" >> $GITHUB_ENV
+
+ - name: Run configure
+ env:
+ arch: ${{ matrix.arch }}
+ run: >-
+ $SETARCH ../src/configure -C --disable-install-doc --with-modular-gc=${{ env.MODULAR_GC_DIR }}
+ ${arch:+--target=$arch-$OSTYPE --host=$arch-$OSTYPE}
+
+ - uses: actions-rust-lang/setup-rust-toolchain@v1
+ - name: Set MMTk environment variables
+ run: |
+ echo 'EXCLUDES=../src/test/.excludes-mmtk' >> $GITHUB_ENV
+ echo 'MSPECOPT=-B../src/spec/mmtk.mspec' >> $GITHUB_ENV
+ if: ${{ matrix.gc.name == 'mmtk' }}
+
+ - run: $SETARCH make
+
+ - name: Build Modular GC
+ run: |
+ echo "RUBY_GC_LIBRARY=${{ matrix.gc.name }}" >> $GITHUB_ENV
+ make install-modular-gc MODULAR_GC=${{ matrix.gc.name }} MMTK_BUILD=${{ matrix.gc.mmtk_build }}
+ make distclean-modular-gc MODULAR_GC=${{ matrix.gc.name }}
+
+ - run: $SETARCH make hello
+
+ - name: Set test options for skipped tests
+ run: |
+ set -x
+ TESTS="$(echo "${{ matrix.skipped_tests }}" | sed 's| |$$/ -n!/|g;s|^|-n!/|;s|$|$$/|')"
+ echo "TESTS=${TESTS}" >> $GITHUB_ENV
+ if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }}
+
+ - name: Set up Launchable
+ id: launchable
+ uses: ./.github/actions/launchable/setup
+ with:
+ os: ${{ matrix.os || 'ubuntu-22.04' }}
+ test-opts: ${{ matrix.configure }}
+ launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }}
+ builddir: build
+ srcdir: src
+ continue-on-error: true
+ timeout-minutes: 3
+
+ - name: make ${{ matrix.test_task }}
+ run: |
+ test -n "${LAUNCHABLE_STDOUT}" && exec 1> >(tee "${LAUNCHABLE_STDOUT}")
+ test -n "${LAUNCHABLE_STDERR}" && exec 2> >(tee "${LAUNCHABLE_STDERR}")
+
+ $SETARCH make -s ${{ matrix.test_task }} \
+ ${TESTS:+TESTS="$TESTS"} \
+ ${{ !contains(matrix.test_task, 'bundle') && 'RUBYOPT=-w' || '' }}
+ timeout-minutes: ${{ matrix.gc.timeout || 40 }}
+ env:
+ RUBY_TESTOPTS: '-q --tty=no'
+ TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
+ PRECHECK_BUNDLED_GEMS: 'no'
+ LAUNCHABLE_STDOUT: ${{ steps.launchable.outputs.stdout_report_path }}
+ LAUNCHABLE_STDERR: ${{ steps.launchable.outputs.stderr_report_path }}
+
+ - name: make skipped tests
+ run: |
+ $SETARCH make -s test-all TESTS="${TESTS//-n!\//-n/}"
+ env:
+ GNUMAKEFLAGS: ''
+ RUBY_TESTOPTS: '-v --tty=no'
+ if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }}
+ continue-on-error: ${{ matrix.continue-on-skipped_tests || false }}
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ${{ matrix.test_task }} ${{ matrix.configure }}${{ matrix.arch }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+defaults:
+ run:
+ working-directory: build
diff --git a/.github/workflows/parse_y.yml b/.github/workflows/parse_y.yml
new file mode 100644
index 0000000000..87facc8a55
--- /dev/null
+++ b/.github/workflows/parse_y.yml
@@ -0,0 +1,100 @@
+name: parse.y
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ make:
+ strategy:
+ matrix:
+ include:
+ - test_task: check
+ - test_task: test-bundler-parallel
+ - test_task: test-bundled-gems
+ fail-fast: false
+
+ env:
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+ RUBY_DEBUG: ci
+ SETARCH: ${{ matrix.arch && format('setarch {0}', matrix.arch) }}
+
+ runs-on: ubuntu-22.04
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: /.github
+
+ - uses: ./.github/actions/setup/ubuntu
+
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ ruby-version: '3.1'
+ bundler: none
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+ clean: true
+ dummy-files: ${{ matrix.test_task == 'check' }}
+
+ - name: Run configure
+ run: ../src/configure -C --disable-install-doc cppflags=-DRUBY_DEBUG --with-parser=parse.y
+
+ - run: make
+
+ - run: make TESTRUN_SCRIPT='-renvutil -v -e "exit EnvUtil.current_parser == %[parse.y]"' run
+ env:
+ RUNOPT0: -I$(tooldir)/lib
+
+ - name: make ${{ matrix.test_task }}
+ run: make -s ${{ matrix.test_task }} RUN_OPTS="$RUN_OPTS" SPECOPTS="$SPECOPTS"
+ env:
+ RUBY_TESTOPTS: ${{ matrix.testopts }}
+ EXCLUDES: '../src/test/.excludes-parsey'
+ RUN_OPTS: ${{ matrix.run_opts || '--parser=parse.y' }}
+ SPECOPTS: ${{ matrix.specopts || '-T --parser=parse.y' }}
+ TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ${{ matrix.run_opts }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+defaults:
+ run:
+ working-directory: build
diff --git a/.github/workflows/post_push.yml b/.github/workflows/post_push.yml
new file mode 100644
index 0000000000..318444c0a2
--- /dev/null
+++ b/.github/workflows/post_push.yml
@@ -0,0 +1,85 @@
+name: Post-push
+on:
+ push:
+ branches:
+ - master
+ - 'ruby_*_*'
+jobs:
+ hooks:
+ name: Post-push hooks
+ runs-on: ubuntu-latest
+ if: ${{ github.repository == 'ruby/ruby' }}
+ steps:
+ - name: Sync git.ruby-lang.org
+ run: |
+ mkdir -p ~/.ssh
+ (umask 066; printenv RUBY_GIT_SYNC_PRIVATE_KEY > ~/.ssh/id_ed25519)
+ ssh-keyscan -t ed25519 git.ruby-lang.org >> ~/.ssh/known_hosts
+ ssh -i ~/.ssh/id_ed25519 git-sync@git.ruby-lang.org "sudo -u git /home/git/git.ruby-lang.org/bin/update-ruby.sh $GITHUB_REF"
+ env:
+ GITHUB_REF: ${{ github.ref }}
+ RUBY_GIT_SYNC_PRIVATE_KEY: ${{ secrets.RUBY_GIT_SYNC_PRIVATE_KEY }}
+ if: ${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/ruby_') }}
+
+ - name: Fetch changesets on bugs.ruby-lang.org
+ run: |
+ curl "https://bugs.ruby-lang.org/sys/fetch_changesets?key=${REDMINE_SYS_API_KEY}" -s --fail-with-body -w '* status: %{http_code}\n'
+ env:
+ REDMINE_SYS_API_KEY: ${{ secrets.REDMINE_SYS_API_KEY }}
+ if: ${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/ruby_') }}
+
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ fetch-depth: 500 # for notify-slack-commits
+ token: ${{ secrets.MATZBOT_AUTO_UPDATE_TOKEN }}
+
+ - name: Notify commit to Slack
+ run: ruby tool/notify-slack-commits.rb "$GITHUB_OLD_SHA" "$GITHUB_NEW_SHA" refs/heads/master
+ env:
+ GITHUB_OLD_SHA: ${{ github.event.before }}
+ GITHUB_NEW_SHA: ${{ github.event.after }}
+ SLACK_WEBHOOK_URL_ALERTS: ${{ secrets.SLACK_WEBHOOK_URL_ALERTS }}
+ SLACK_WEBHOOK_URL_COMMITS: ${{ secrets.SLACK_WEBHOOK_URL_COMMITS }}
+ SLACK_WEBHOOK_URL_RUBY_JP: ${{ secrets.SLACK_WEBHOOK_URL_RUBY_JP }}
+ if: ${{ github.ref == 'refs/heads/master' }}
+
+ - name: Notify commit to ruby-cvs
+ run: |
+ SENDMAIL="ssh -i ${HOME}/.ssh/id_ed25519 git-sync@git.ruby-lang.org /usr/sbin/sendmail" \
+ ruby tool/commit-email.rb . ruby-cvs@g.ruby-lang.org \
+ "$GITHUB_OLD_SHA" "$GITHUB_NEW_SHA" "$GITHUB_REF" \
+ --viewer-uri "https://github.com/ruby/ruby/commit/" \
+ --error-to cvs-admin@ruby-lang.org
+ env:
+ GITHUB_OLD_SHA: ${{ github.event.before }}
+ GITHUB_NEW_SHA: ${{ github.event.after }}
+ GITHUB_REF: ${{ github.ref }}
+ if: ${{ github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/ruby_') }}
+
+ - name: Auto-correct code styles
+ run: |
+ set -x
+ ruby tool/auto-style.rb "$GITHUB_OLD_SHA" "$GITHUB_NEW_SHA" refs/heads/master
+ env:
+ GITHUB_OLD_SHA: ${{ github.event.before }}
+ GITHUB_NEW_SHA: ${{ github.event.after }}
+ GIT_AUTHOR_NAME: git
+ GIT_COMMITTER_NAME: git
+ EMAIL: svn-admin@ruby-lang.org
+ if: ${{ github.ref == 'refs/heads/master' }}
+
+ - name: Push PR notes to GitHub
+ run: ruby tool/notes-github-pr.rb "$(pwd)/.git" "$GITHUB_OLD_SHA" "$GITHUB_NEW_SHA" refs/heads/master
+ env:
+ GITHUB_OLD_SHA: ${{ github.event.before }}
+ GITHUB_NEW_SHA: ${{ github.event.after }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GIT_AUTHOR_NAME: git
+ GIT_COMMITTER_NAME: git
+ EMAIL: svn-admin@ruby-lang.org
+ if: ${{ github.ref == 'refs/heads/master' }}
+
+ - uses: ./.github/actions/slack
+ with:
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
diff --git a/.github/workflows/pr-playground.yml b/.github/workflows/pr-playground.yml
new file mode 100644
index 0000000000..f3c0556429
--- /dev/null
+++ b/.github/workflows/pr-playground.yml
@@ -0,0 +1,127 @@
+name: Post Playground link to PR
+on:
+ pull_request_target:
+ types: [labeled]
+ workflow_run:
+ workflows: ["WebAssembly"]
+ types: [completed]
+
+jobs:
+ post-summary:
+ name: Post Playground link
+ runs-on: ubuntu-latest
+ permissions:
+ pull-requests: write
+ # Post a comment only if the PR status check is passed and the PR is labeled with `Playground`.
+ # Triggered twice: when the PR is labeled and when PR build is passed.
+ if: >-
+ ${{ false
+ || (true
+ && github.event_name == 'pull_request_target'
+ && contains(github.event.pull_request.labels.*.name, 'Playground'))
+ || (true
+ && github.event_name == 'workflow_run'
+ && github.event.workflow_run.conclusion == 'success'
+ && github.event.workflow_run.event == 'pull_request')
+ }}
+ steps:
+ - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ const fs = require('fs/promises');
+
+ const buildWorkflowPath = '.github/workflows/wasm.yml';
+ const findSuccessfuBuildRun = async (pr) => {
+ const opts = github.rest.actions.listWorkflowRunsForRepo.endpoint.merge({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ status: 'success',
+ branch: pr.head.ref,
+ });
+ const runs = await github.paginate(opts);
+ const buildRun = runs.find(run => run.path == buildWorkflowPath);
+ return buildRun;
+ }
+
+ const postComment = async (body, pr) => {
+ const { data: comments } = await github.rest.issues.listComments({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: pr.number,
+ });
+
+ const commentOpts = { owner: context.repo.owner, repo: context.repo.repo, body: comment };
+
+ const existingComment = comments.find(comment => comment.body.startsWith(magicComment));
+ if (existingComment) {
+ core.info(`Updating existing comment: ${existingComment.html_url}`);
+ await github.rest.issues.updateComment({
+ ...commentOpts, comment_id: existingComment.id
+ });
+ } else {
+ await github.rest.issues.createComment({
+ ...commentOpts, issue_number: pr.number
+ });
+ }
+ }
+
+ const derivePRNumber = async () => {
+ if (context.payload.pull_request) {
+ return context.payload.pull_request.number;
+ }
+ // Workaround for https://github.com/orgs/community/discussions/25220
+
+ const { data: { artifacts } } = await github.rest.actions.listWorkflowRunArtifacts({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ run_id: context.payload.workflow_run.id,
+ });
+ const artifact = artifacts.find(artifact => artifact.name == 'github-pr-info');
+ if (!artifact) {
+ throw new Error('Cannot find github-pr-info.txt artifact');
+ }
+
+ const { data } = await github.rest.actions.downloadArtifact({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ artifact_id: artifact.id,
+ archive_format: 'zip',
+ });
+
+ await fs.writeFile('pr-info.zip', Buffer.from(data));
+ await exec.exec('unzip', ['pr-info.zip']);
+ return await fs.readFile('github-pr-info.txt', 'utf8');
+ }
+
+ const prNumber = await derivePRNumber();
+
+ const { data: pr } = await github.rest.pulls.get({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ pull_number: prNumber,
+ });
+
+ core.info(`Checking if the PR ${prNumber} is labeled with Playground...`);
+ if (!pr.labels.some(label => label.name == 'Playground')) {
+ core.info(`The PR is not labeled with Playground.`);
+ return;
+ }
+
+ core.info(`Checking if the build is successful for ${pr.head.ref} in ${pr.head.repo.owner.login}/${pr.head.repo.name}...`);
+ const buildRun = await findSuccessfuBuildRun(pr);
+ if (!buildRun) {
+ core.info(`No successful build run found for ${buildWorkflowPath} on ${pr.head.ref} yet.`);
+ return;
+ }
+ core.info(`Found a successful build run: ${buildRun.html_url}`);
+
+ const runLink = `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`;
+ const magicComment = `<!-- AUTO-GENERATED-COMMENT-PR-PLAYGROUND -->`;
+ const comment = `${magicComment}
+ **Try on Playground**: https://ruby.github.io/play-ruby?run=${buildRun.id}
+ This is an automated comment by [\`pr-playground.yml\`](${runLink}) workflow.
+ `;
+ core.info(`Comment: ${comment}`);
+ await postComment(comment, pr);
+
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 0000000000..3caeee9a3b
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,107 @@
+name: Publish Ruby packages
+
+on:
+ repository_dispatch:
+ types:
+ - release
+ workflow_dispatch:
+ inputs:
+ version:
+ description: 'Version of the Ruby package to release'
+ required: true
+ default: '3.3.4'
+
+jobs:
+ release:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v6.0.1
+
+ - uses: ruby/setup-ruby@v1
+ with:
+ ruby-version: 3.3.4
+
+ - name: Store Ruby version
+ run: |
+ echo "RUBY_VERSION=${{ github.event.client_payload.version || github.event.inputs.version }}" >> $GITHUB_ENV
+
+ - name: Store ABI version
+ run: echo "ABI_VERSION=$(echo ${{ env.RUBY_VERSION }} | cut -d '.' -f 1-2)" >> $GITHUB_ENV
+
+ - name: Copy draft package `/tmp` to `/pub` directory
+ run: tool/release.sh ${{ env.RUBY_VERSION }}
+ env:
+ AWS_ACCESS_KEY_ID: ${{ secrets.FTP_R_L_O_AWS_ACCESS_KEY_ID }}
+ AWS_SECRET_ACCESS_KEY: ${{ secrets.FTP_R_L_O_AWS_SECRET_ACCESS_KEY }}
+ AWS_DEFAULT_REGION: us-west-2
+
+ - name: Purge URLs of release package
+ run: |
+ curl -X POST \
+ -H "Fastly-Key: ${{ secrets.FASTLY_PURGE_TOKEN }}" \
+ https://api.fastly.com/purge/cache.ruby-lang.org/pub/ruby/${{ env.ABI_VERSION }}/ruby-${{ env.RUBY_VERSION }}.tar.gz
+ curl -X POST \
+ -H "Fastly-Key: ${{ secrets.FASTLY_PURGE_TOKEN }}" \
+ https://api.fastly.com/purge/cache.ruby-lang.org/pub/ruby/${{ env.ABI_VERSION }}/ruby-${{ env.RUBY_VERSION }}.tar.xz
+ curl -X POST \
+ -H "Fastly-Key: ${{ secrets.FASTLY_PURGE_TOKEN }}" \
+ https://api.fastly.com/purge/cache.ruby-lang.org/pub/ruby/${{ env.ABI_VERSION }}/ruby-${{ env.RUBY_VERSION }}.zip
+
+ - name: Create a release on GitHub
+ run: |
+ RELEASE_TAG=$(ruby tool/ruby-version.rb tag "${{ env.RUBY_VERSION }}")
+ echo $RELEASE_TAG
+ PREVIOUS_RELEASE_TAG=$(ruby tool/ruby-version.rb previous-tag "${{ env.RUBY_VERSION }}")
+ echo $PREVIOUS_RELEASE_TAG
+ tool/gen-github-release.rb $PREVIOUS_RELEASE_TAG $RELEASE_TAG --no-dry-run
+ env:
+ GITHUB_TOKEN: ${{ secrets.MATZBOT_AUTO_UPDATE_TOKEN }}
+
+ - name: Update versions index
+ run: |
+ curl -L -X POST \
+ -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ https://api.github.com/repos/ruby/actions/dispatches \
+ -d '{"event_type": "update_index"}'
+
+ - name: Build and push Docker images
+ run: |
+ curl -L -X POST \
+ -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ https://api.github.com/repos/ruby/docker-images/actions/workflows/build.yml/dispatches \
+ -d '{"ref": "master", "inputs": {"ruby_version": "${{ env.RUBY_VERSION }}"}}'
+
+ - name: Build snapcraft packages
+ run: |
+ curl -L -X POST \
+ -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ https://api.github.com/repos/ruby/snap.ruby/dispatches \
+ -d '{"event_type": "build", "client_payload": {"ruby_version": "${{ env.RUBY_VERSION }}"}}'
+
+ - name: Store the latest LTS version of OpenSSL
+ run: |
+ echo "OPENSSL_VERSION=`curl -s https://api.github.com/repos/openssl/openssl/releases | jq -r '.[].tag_name | select(startswith("openssl-3.0"))' | sort -Vr | head -n1 | cut -d'-' -f2`" >> $GITHUB_ENV
+
+ - name: Update ruby-build definition
+ run: |
+ curl -L -X POST \
+ -H "Authorization: Bearer ${{ secrets.RUBY_BUILD_WORKFLOW_TOKEN }}" \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ https://api.github.com/repos/rbenv/ruby-build/dispatches \
+ -d '{"event_type": "update-ruby", "client_payload": {"ruby_version": "${{ env.RUBY_VERSION }}", "openssl_version": "${{ env.OPENSSL_VERSION }}"}}'
+
+ - name: Update all-ruby definition
+ run: |
+ curl -L -X POST \
+ -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ https://api.github.com/repos/ruby/all-ruby/dispatches \
+ -d '{"event_type": "update"}'
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000000..5d4474d978
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,18 @@
+name: Start release workflow
+on:
+ push:
+ tags:
+ - '*'
+
+jobs:
+ notify:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Build release package
+ run: |
+ curl -L -X POST \
+ -H "Authorization: Bearer ${{ secrets.MATZBOT_GITHUB_WORKFLOW_TOKEN }}" \
+ -H "Accept: application/vnd.github+json" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ https://api.github.com/repos/ruby/actions/dispatches \
+ -d '{"event_type": "${{ github.ref }}"}'
diff --git a/.github/workflows/rust-warnings.yml b/.github/workflows/rust-warnings.yml
new file mode 100644
index 0000000000..a2e3208e52
--- /dev/null
+++ b/.github/workflows/rust-warnings.yml
@@ -0,0 +1,60 @@
+# Surface Rust warnings on PRs that touch any Rust code.
+# Not a required check so we never block people over new warnings
+# that might come from a new Rust version being released.
+name: Rust warnings
+on:
+ pull_request:
+ types:
+ - opened
+ - synchronize
+ - reopened
+ paths:
+ - '**.rs'
+ - '!**.inc.rs'
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ rust-warnings:
+ env:
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+
+ runs-on: ubuntu-24.04
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ - name: Install Rust
+ run: rustup default beta
+
+ - name: Rust warnings
+ shell: bash
+ run: |
+ set -eu
+ cargo check --quiet --all-features --message-format=json \
+ | jq -r 'select(.message.level | IN("warning", "error")) | .message.rendered' \
+ | tee messages.txt
+ (exit "${PIPESTATUS[0]}") && ! grep --quiet '[^[:space:]]' messages.txt
+
+ - name: "📜 `rustdoc` warnings"
+ shell: bash
+ run: |
+ set -eu
+ cargo doc --document-private-items --all --no-deps --message-format=json \
+ | jq -r 'select(.message.level | IN("warning", "error")) | .message.rendered' \
+ | tee messages.txt
+ (exit "${PIPESTATUS[0]}") && ! grep --quiet '[^[:space:]]' messages.txt
diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml
new file mode 100644
index 0000000000..c607098997
--- /dev/null
+++ b/.github/workflows/scorecards.yml
@@ -0,0 +1,78 @@
+# This workflow uses actions that are not certified by GitHub. They are provided
+# by a third-party and are governed by separate terms of service, privacy
+# policy, and support documentation.
+
+name: Scorecard supply-chain security
+on:
+ # For Branch-Protection check. Only the default branch is supported. See
+ # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
+ branch_protection_rule:
+ # To guarantee Maintained check is occasionally updated. See
+ # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
+ schedule:
+ - cron: '39 3 * * 5'
+ # push:
+ # branches: [ "master" ]
+
+# Declare default permissions as read only.
+permissions: read-all
+
+jobs:
+ analysis:
+ name: Scorecard analysis
+ runs-on: ubuntu-latest
+ # `publish_results: true` only works when run from the default branch. conditional can be removed if disabled.
+ if: github.event.repository.default_branch == github.ref_name || github.event_name == 'pull_request'
+ permissions:
+ # Needed to upload the results to code-scanning dashboard.
+ security-events: write
+ # Needed to publish results and get a badge (see publish_results below).
+ id-token: write
+ # Uncomment the permissions below if installing in a private repository.
+ # contents: read
+ # actions: read
+
+ steps:
+ - name: "Checkout code"
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ persist-credentials: false
+
+ - name: "Run analysis"
+ uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
+ with:
+ results_file: results.sarif
+ results_format: sarif
+ # (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
+ # - you want to enable the Branch-Protection check on a *public* repository, or
+ # - you are installing Scorecard on a *private* repository
+ # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action?tab=readme-ov-file#authentication-with-fine-grained-pat-optional.
+ # repo_token: ${{ secrets.SCORECARD_TOKEN }}
+
+ # Public repositories:
+ # - Publish results to OpenSSF REST API for easy access by consumers
+ # - Allows the repository to include the Scorecard badge.
+ # - See https://github.com/ossf/scorecard-action#publishing-results.
+ # For private repositories:
+ # - `publish_results` will always be set to `false`, regardless
+ # of the value entered here.
+ publish_results: true
+
+ # (Optional) Uncomment file_mode if you have a .gitattributes with files marked export-ignore
+ # file_mode: git
+
+ # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
+ # format to the repository Actions tab.
+ - name: "Upload artifact"
+ uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
+ with:
+ name: SARIF file
+ path: results.sarif
+ retention-days: 5
+
+ # Upload the results to GitHub's code scanning dashboard (optional).
+ # Commenting out will disable upload of results to your repo's Code Scanning dashboard
+ - name: "Upload to code-scanning"
+ uses: github/codeql-action/upload-sarif@v4
+ with:
+ sarif_file: results.sarif
diff --git a/.github/workflows/spec_guards.yml b/.github/workflows/spec_guards.yml
new file mode 100644
index 0000000000..cf4661555c
--- /dev/null
+++ b/.github/workflows/spec_guards.yml
@@ -0,0 +1,67 @@
+name: Rubyspec Version Guards Check
+
+on:
+ push:
+ paths:
+ - '.github/workflows/spec_guards.yml'
+ - 'spec/**'
+ - '!spec/*.md'
+ pull_request:
+ paths:
+ - '.github/workflows/spec_guards.yml'
+ - 'spec/**'
+ - '!spec/*.md'
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ rubyspec:
+ name: Rubyspec
+
+ runs-on: ubuntu-22.04
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ strategy:
+ matrix:
+ # Specs from ruby/spec should still run on all supported Ruby versions.
+ # This also ensures the needed ruby_version_is guards are there, see spec/README.md.
+ ruby:
+ - ruby-3.2
+ - ruby-3.3
+ - ruby-3.4
+ - ruby-4.0
+ fail-fast: false
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ ruby-version: ${{ matrix.ruby }}
+ bundler: none
+
+ - run: gem install webrick
+
+ - run: ruby ../mspec/bin/mspec
+ working-directory: spec/ruby
+ env:
+ CHECK_LEAKS: true
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ${{ matrix.ruby }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
diff --git a/.github/workflows/sync_default_gems.yml b/.github/workflows/sync_default_gems.yml
new file mode 100644
index 0000000000..9ff97d5a4e
--- /dev/null
+++ b/.github/workflows/sync_default_gems.yml
@@ -0,0 +1,77 @@
+name: Sync default gems
+
+env:
+ DEFAULT_GEM_SYNC_ENABLED: true
+
+on:
+ workflow_dispatch:
+ inputs:
+ gem:
+ required: true
+ description: 'Name of the gem to be synchronized'
+ type: string
+ before:
+ required: true
+ description: 'Gem commit SHA before sync'
+ type: string
+ after:
+ required: true
+ description: 'Gem commit SHA after sync'
+ type: string
+
+jobs:
+ sync_default_gems:
+ name: Sync default gem ${{ github.event.inputs.gem }}
+
+ permissions:
+ contents: write # for Git to git push
+
+ runs-on: ubuntu-latest
+
+ if: ${{ github.repository == 'ruby/ruby' }}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ name: Check out ruby/ruby
+ with:
+ token: ${{ github.repository == 'ruby/ruby' && secrets.MATZBOT_AUTO_UPDATE_TOKEN || secrets.GITHUB_TOKEN }}
+
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ ruby-version: '3.4'
+ bundler: none
+
+ - name: Run tool/sync_default_gems.rb
+ id: sync
+ run: |
+ ruby_before=$(git rev-parse HEAD)
+ set -x
+ ruby tool/sync_default_gems.rb "${gem_name}" "${gem_before}..${gem_after}"
+ if [[ "$(git rev-parse HEAD)" != "$ruby_before" ]]; then
+ echo update=true >> $GITHUB_OUTPUT
+ fi
+ env:
+ gem_name: ${{ github.event.inputs.gem }}
+ gem_before: ${{ github.event.inputs.before }}
+ gem_after: ${{ github.event.inputs.after }}
+ EMAIL: svn-admin@ruby-lang.org
+ GIT_AUTHOR_NAME: git
+ GIT_COMMITTER_NAME: git
+
+ - name: Push
+ run: |
+ git pull --rebase origin ${GITHUB_REF#refs/heads/}
+ git push origin ${GITHUB_REF#refs/heads/}
+ if: ${{ steps.sync.outputs.update && env.DEFAULT_GEM_SYNC_ENABLED == 'true' }}
+ env:
+ EMAIL: svn-admin@ruby-lang.org
+ GIT_AUTHOR_NAME: git
+ GIT_COMMITTER_NAME: git
+
+ - uses: ./.github/actions/slack
+ with:
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ label: "${{ github.event.inputs.gem }} (<https://github.com/${{ github.event.inputs.gem == 'rubygems' && 'rubygems' || 'ruby' }}/${{ github.event.inputs.gem }}/compare/${{ github.event.inputs.before }}...${{ github.event.inputs.after }}|diff>)"
+ event_name: workflow_dispatch
+ extra_channel_id: C05FPKAU743 # alerts-sync
+ if: ${{ failure() }}
diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml
new file mode 100644
index 0000000000..88c19b6fe6
--- /dev/null
+++ b/.github/workflows/ubuntu.yml
@@ -0,0 +1,269 @@
+name: Ubuntu
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ # Do not use paths-ignore for required status checks
+ # https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ make:
+ strategy:
+ matrix:
+ # We enumerate every job in matrix.include to save build time
+ include:
+ - test_task: check
+ configure: 'cppflags=-DVM_CHECK_MODE'
+ - test_task: check
+ arch: i686
+ - test_task: check
+ configure: '--disable-yjit'
+ - test_task: check
+ configure: '--enable-shared --enable-load-relative'
+ - test_task: test-bundler-parallel
+ timeout: 50
+ - test_task: test-bundled-gems
+ - test_task: check
+ os: ubuntu-24.04
+ extra_checks: [capi]
+ # ubuntu-24.04-arm jobs don't start on ruby/ruby as of 2025-10-29
+ #- test_task: check
+ # os: ubuntu-24.04-arm
+ fail-fast: false
+
+ env: &make-env
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+ RUBY_DEBUG: ci
+
+ runs-on: ${{ matrix.os || 'ubuntu-22.04' }}
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps: &make-steps
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: /.github
+
+ - uses: ./.github/actions/setup/ubuntu
+ with:
+ arch: ${{ matrix.arch }}
+
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ ruby-version: '3.1'
+ bundler: none
+ if: >-
+ ${{ !endsWith(matrix.os, 'arm')
+ && !endsWith(matrix.os, 'ppc64le') && !endsWith(matrix.os, 's390x') }}
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+ clean: true
+ dummy-files: ${{ matrix.test_task == 'check' }}
+ # Set fetch-depth: 10 so that Launchable can receive commits information.
+ fetch-depth: 10
+
+ - name: Run configure
+ env:
+ arch: ${{ matrix.arch }}
+ configure: ${{ matrix.configure }}
+ run: >-
+ $SETARCH ../src/configure -C --disable-install-doc ${configure:-cppflags=-DRUBY_DEBUG}
+ ${arch:+--target=$arch-$OSTYPE --host=$arch-$OSTYPE}
+
+ - run: $SETARCH make prepare-gems
+ if: ${{ matrix.test_task == 'test-bundled-gems' }}
+
+ - run: $SETARCH make
+
+ - run: $SETARCH make hello
+
+ - name: runirb
+ run: |
+ echo IRB::VERSION | $SETARCH make runirb RUNOPT="-- -f"
+
+ - name: Set test options for skipped tests
+ run: |
+ set -x
+ TESTS="$(echo "${{ matrix.skipped_tests }}" | sed 's| |$$/ -n!/|g;s|^|-n!/|;s|$|$$/|')"
+ echo "TESTS=${TESTS}" >> $GITHUB_ENV
+ if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }}
+
+ - name: Set up Launchable
+ id: launchable
+ uses: ./.github/actions/launchable/setup
+ with:
+ os: ${{ matrix.os || 'ubuntu-22.04' }}
+ test-opts: ${{ matrix.configure }}
+ launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }}
+ builddir: build
+ srcdir: src
+ continue-on-error: true
+ timeout-minutes: 3
+
+ # Avoid possible test failures with the zlib applying the following patch
+ # on s390x CPU architecture.
+ # https://github.com/madler/zlib/pull/410
+ - name: Disable DFLTCC
+ run: echo "DFLTCC=0" >> $GITHUB_ENV
+ if: ${{ endsWith(matrix.os, 's390x') }}
+
+ - name: make ${{ matrix.test_task }}
+ run: |
+ test -n "${LAUNCHABLE_STDOUT}" && exec 1> >(tee "${LAUNCHABLE_STDOUT}")
+ test -n "${LAUNCHABLE_STDERR}" && exec 2> >(tee "${LAUNCHABLE_STDERR}")
+
+ $SETARCH make -s ${{ matrix.test_task }} \
+ ${TESTS:+TESTS="$TESTS"} \
+ ${{ !contains(matrix.test_task, 'bundle') && 'RUBYOPT=-w' || '' }}
+ timeout-minutes: ${{ matrix.timeout || 40 }}
+ env:
+ RUBY_TESTOPTS: '-q --tty=no'
+ TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
+ PRECHECK_BUNDLED_GEMS: 'no'
+ LAUNCHABLE_STDOUT: ${{ steps.launchable.outputs.stdout_report_path }}
+ LAUNCHABLE_STDERR: ${{ steps.launchable.outputs.stderr_report_path }}
+
+ - name: make skipped tests
+ run: |
+ $SETARCH make -s test-all TESTS="${TESTS//-n!\//-n/}"
+ env:
+ GNUMAKEFLAGS: ''
+ RUBY_TESTOPTS: '-v --tty=no'
+ if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }}
+ continue-on-error: ${{ matrix.continue-on-skipped_tests || false }}
+
+ - name: test-pc
+ run: |
+ DESTDIR=${RUNNER_TEMP-${TMPDIR-/tmp}}/installed
+ $SETARCH make test-pc "DESTDIR=$DESTDIR"
+
+ - name: CAPI extensions
+ uses: ./.github/actions/capiext
+ with:
+ builddir: build
+ make: '$SETARCH make'
+ env:
+ RUBY_TESTOPTS: '-v --tty=no'
+ if: ${{ contains(matrix.extra_checks, 'capi') }}
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ${{ matrix.test_task }} ${{ matrix.configure }}${{ matrix.arch }}${{ matrix.os }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+ make-ibm:
+ strategy:
+ matrix:
+ include:
+ - test_task: check
+ os: ubuntu-24.04-ppc64le
+ - test_task: check
+ os: ubuntu-24.04-s390x
+ fail-fast: false
+
+ env: *make-env
+
+ runs-on: ${{ matrix.os }}
+
+ if: >-
+ ${{github.repository == 'ruby/ruby'
+ && !(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps: *make-steps
+
+ # Separated from `make` job to avoid making it a required status check
+ ruby-bench:
+ strategy:
+ matrix:
+ include:
+ # Using the same setup as ZJIT jobs
+ - bench_opts: '--warmup=1 --bench=1 --excludes=lobsters'
+
+ runs-on: ubuntu-24.04
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ - uses: ./.github/actions/setup/ubuntu
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+
+ - name: Run configure
+ run: ../src/configure -C --disable-install-doc --prefix="$(pwd)/install"
+
+ - run: make install
+
+ - name: Checkout ruby-bench
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ repository: ruby/ruby-bench
+ path: ruby-bench
+
+ # If you want to skip failing benchmark, consider using `--excludes`.
+ # e.g. `bench_opts: '--warmup=1 --bench=1 --excludes=railsbench,lobsters'`
+ - name: Run ruby-bench
+ run: ruby run_benchmarks.rb -e "ruby::../build/install/bin/ruby" ${{ matrix.bench_opts }}
+ working-directory: ruby-bench
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ruby-bench ${{ matrix.bench_opts }} ${{ matrix.ruby_opts }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+ result:
+ if: ${{ always() }}
+ name: ${{ github.workflow }} result
+ runs-on: ubuntu-latest
+ needs: [make]
+ steps:
+ - run: exit 1
+ working-directory:
+ if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
+
+defaults:
+ run:
+ working-directory: build
diff --git a/.github/workflows/wasm.yml b/.github/workflows/wasm.yml
new file mode 100644
index 0000000000..0d2a6f0545
--- /dev/null
+++ b/.github/workflows/wasm.yml
@@ -0,0 +1,179 @@
+name: WebAssembly
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions: # added using https://github.com/step-security/secure-workflows
+ contents: read
+
+jobs:
+ make:
+ strategy:
+ matrix:
+ entry:
+# # wasmtime can't compile non-optimized Asyncified binary due to locals explosion
+# - { name: O0-debuginfo, optflags: '-O0', debugflags: '-g', wasmoptflags: '-O1' }
+# - { name: O1, optflags: '-O1', debugflags: '' , wasmoptflags: '-O1' }
+ - { name: O2, optflags: '-O2', debugflags: '', wasmoptflags: '-O2' }
+# - { name: O3, optflags: '-O3', debugflags: '' , wasmoptflags: '-O3' }
+# # -O4 is equivalent to -O3 in clang, but it's different in wasm-opt
+# - { name: O4, optflags: '-O3', debugflags: '' , wasmoptflags: '-O4' }
+# - { name: Oz, optflags: '-Oz', debugflags: '' , wasmoptflags: '-Oz' }
+ fail-fast: false
+
+ env:
+ RUBY_TESTOPTS: '-q --tty=no'
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+ WASI_SDK_VERSION_MAJOR: 25
+ WASI_SDK_VERSION_MINOR: 0
+ BINARYEN_VERSION: 113
+ WASMTIME_VERSION: v15.0.0
+
+ runs-on: ubuntu-22.04
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: /.github
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+
+ - name: Install libraries
+ run: |
+ set -ex
+ sudo apt-get update -q || :
+ sudo apt-get install --no-install-recommends -q -y ruby make autoconf git wget
+
+ wasi_sdk_deb="wasi-sdk-${WASI_SDK_VERSION_MAJOR}.${WASI_SDK_VERSION_MINOR}-x86_64-linux.deb"
+ wget "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_VERSION_MAJOR}/${wasi_sdk_deb}"
+ sudo dpkg -i "$wasi_sdk_deb"
+ rm -f "$wasi_sdk_deb"
+
+ mkdir build-sdk
+ pushd build-sdk
+
+ wasmtime_url="https://github.com/bytecodealliance/wasmtime/releases/download/${WASMTIME_VERSION}/wasmtime-${WASMTIME_VERSION}-x86_64-linux.tar.xz"
+ wget -O - "$wasmtime_url" | tar xJf -
+ sudo ln -fs "$PWD/wasmtime-${WASMTIME_VERSION}-x86_64-linux/wasmtime" /usr/local/bin/wasmtime
+
+ binaryen_tarball="binaryen-version_${BINARYEN_VERSION}-x86_64-linux.tar.gz"
+ binaryen_url="https://github.com/WebAssembly/binaryen/releases/download/version_${BINARYEN_VERSION}/${binaryen_tarball}"
+ wget -O - "$binaryen_url" | tar xfz -
+ sudo ln -fs "$PWD/binaryen-version_${BINARYEN_VERSION}/bin/wasm-opt" /usr/local/bin/wasm-opt
+ working-directory: src
+
+ - name: Set ENV
+ run: |
+ echo "WASI_SDK_PATH=/opt/wasi-sdk" >> $GITHUB_ENV
+
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ ruby-version: '3.1'
+ bundler: none
+
+ - name: Build baseruby
+ run: |
+ set -ex
+ mkdir ../baseruby
+ pushd ../baseruby
+ ../src/configure --prefix=$PWD/install
+ make
+ make install
+
+ - name: Download config.guess with wasi version
+ run: |
+ rm tool/config.guess tool/config.sub
+ ruby tool/downloader.rb -d tool -e gnu config.guess config.sub
+ working-directory: src
+
+ - name: Run configure
+ run: |
+ ../src/configure \
+ --host wasm32-unknown-wasi \
+ --with-baseruby=$PWD/../baseruby/install/bin/ruby \
+ --with-static-linked-ext \
+ --with-ext=cgi/escape,continuation,coverage,date,digest/bubblebabble,digest,digest/md5,digest/rmd160,digest/sha1,digest/sha2,etc,fcntl,json,json/generator,json/parser,objspace,pathname,rbconfig/sizeof,ripper,stringio,strscan,monitor \
+ LDFLAGS=" \
+ -Xlinker --stack-first \
+ -Xlinker -z -Xlinker stack-size=16777216 \
+ " \
+ optflags="${{ matrix.entry.optflags }}" \
+ debugflags="${{ matrix.entry.debugflags }}" \
+ wasmoptflags="${{ matrix.entry.wasmoptflags }} ${{ matrix.entry.debugflags }}"
+
+ # miniruby may not be built when cross-compling
+ - run: make mini ruby
+
+ - run: make install DESTDIR=$PWD/../install
+ - run: tar cfz ../install.tar.gz -C ../install .
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
+ with:
+ name: ruby-wasm-install
+ path: ${{ github.workspace }}/install.tar.gz
+ - name: Show Playground URL to try the build
+ run: |
+ echo "Try on Playground: https://ruby.github.io/play-ruby?run=$GITHUB_RUN_ID" >> $GITHUB_STEP_SUMMARY
+
+ - name: Run basictest
+ run: wasmtime run ./../build/miniruby --mapdir /::./ -- basictest/test.rb
+ working-directory: src
+
+ - name: Run bootstraptest (no thread)
+ run: |
+ NO_THREAD_TESTS="$(grep -L Thread -R ./bootstraptest | awk -F/ '{ print $NF }' | uniq | sed -n 's/test_\(.*\).rb/\1/p' | paste -s -d, -)"
+ ruby ./bootstraptest/runner.rb --ruby="$(which wasmtime) run $PWD/../build/ruby --mapdir /::./ -- " --verbose "--sets=$NO_THREAD_TESTS"
+ working-directory: src
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ${{ matrix.entry.name }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+ # Workaround for https://github.com/orgs/community/discussions/25220
+ - name: Save Pull Request number
+ if: ${{ github.event_name == 'pull_request' }}
+ run: echo "${{ github.event.pull_request.number }}" >> ${{ github.workspace }}/github-pr-info.txt
+ - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
+ if: ${{ github.event_name == 'pull_request' }}
+ with:
+ name: github-pr-info
+ path: ${{ github.workspace }}/github-pr-info.txt
+
+defaults:
+ run:
+ working-directory: build
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
new file mode 100644
index 0000000000..1d44a5482c
--- /dev/null
+++ b/.github/workflows/windows.yml
@@ -0,0 +1,201 @@
+name: Windows
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ # Do not use paths-ignore for required status checks
+ # https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ make:
+ strategy:
+ matrix:
+ include:
+ - os: 2022
+ vc: 2022
+ test_task: check
+ - os: 2025
+ vc: 2022
+ test_task: check
+ - os: 11-arm
+ test_task: 'btest test-basic test-tool' # check and test-spec are broken yet.
+ target: arm64
+ - os: 2025
+ vc: 2022
+ test_task: test-bundled-gems
+ fail-fast: false
+
+ runs-on: windows-${{ matrix.os }}
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ name: Windows ${{ matrix.os }}/Visual C++ ${{ matrix.vc }} (${{ matrix.test_task }})
+
+ env:
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+ VCPKG_DEFAULT_TRIPLET: ${{ matrix.target || 'x64' }}-windows
+
+ steps:
+ - run: md build
+ working-directory:
+
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ # windows-11-arm has only 3.4.1, 3.4.2, 3.4.3, head
+ ruby-version: ${{ !endsWith(matrix.os, 'arm') && '3.1' || '3.4' }}
+ bundler: none
+ windows-toolchain: none
+
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: /.github
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ make-command: nmake
+ clean: true
+
+ - name: Install tools with scoop
+ run: |
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
+ iwr -useb get.scoop.sh | iex
+ Join-Path (Resolve-Path ~).Path "scoop\shims" >> $Env:GITHUB_PATH
+ scoop install vcpkg uutils-coreutils
+ shell: pwsh
+
+ - name: Restore vcpkg artifact
+ id: restore-vcpkg
+ uses: actions/cache/restore@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2
+ with:
+ path: src\vcpkg_installed
+ key: windows-${{ matrix.os }}-vcpkg-${{ hashFiles('src/vcpkg.json') }}
+
+ - name: Install libraries with vcpkg
+ run: |
+ vcpkg install --vcpkg-root=%USERPROFILE%\scoop\apps\vcpkg\current
+ working-directory: src
+ if: ${{ ! steps.restore-vcpkg.outputs.cache-hit }}
+
+ - name: Save vcpkg artifact
+ uses: actions/cache/save@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2
+ with:
+ path: src\vcpkg_installed
+ key: windows-${{ matrix.os }}-vcpkg-${{ hashFiles('src/vcpkg.json') }}
+ if: ${{ ! steps.restore-vcpkg.outputs.cache-hit && (github.ref_name == 'master' || startsWith(github.ref_name, 'ruby_')) }}
+
+ - name: setup env
+ # Available Ruby versions: https://github.com/actions/runner-images/blob/main/images/windows/Windows2019-Readme.md#ruby
+ # %TEMP% is inconsistent with %TMP% and test-all expects they are consistent.
+ # https://github.com/actions/virtual-environments/issues/712#issuecomment-613004302
+ run: |
+ ::- Set up VC ${{ matrix.vc }}
+ set | sort > old.env
+ call ..\src\win32\vssetup.cmd ^
+ -arch=${{ matrix.target || 'amd64' }} ^
+ ${{ matrix.vcvars && '-vcvars_ver=' || '' }}${{ matrix.vcvars }}
+ nmake -f nul
+ set TMP=%RUNNER_TEMP%
+ set TEMP=%RUNNER_TEMP%
+ set MAKEFLAGS=l
+ set /a TEST_JOBS=(15 * %NUMBER_OF_PROCESSORS% / 10) > nul
+ set RUBY_OPT_DIR=%GITHUB_WORKSPACE:\=/%/src/vcpkg_installed/%VCPKG_DEFAULT_TRIPLET%
+ set | sort > new.env
+ comm -13 old.env new.env >> %GITHUB_ENV%
+ del *.env
+
+ - name: baseruby version
+ run: ruby -v
+
+ - name: compiler version
+ run: cl
+
+ - name: volume info
+ run: Get-Volume
+ shell: pwsh
+
+ # TODO: We should use `../src` instead of `D:/a/ruby/ruby/src`
+ - name: Configure
+ run: >-
+ ../src/win32/configure.bat --disable-install-doc
+ --with-opt-dir=%RUBY_OPT_DIR%
+ --with-gmp
+
+ - run: nmake prepare-vcpkg
+
+ - run: nmake incs
+
+ - run: nmake extract-extlibs
+
+ # On all other platforms, test-spec depending on extract-gems (in common.mk) is enough.
+ # But not for this Visual Studio workflow. So here we extract gems before building.
+ - run: nmake extract-gems
+
+ # windows-11-arm runner cannot run `ruby tool/file2lastrev.rb --revision.h --output=revision.h`
+ - name: make revision.h
+ run: |
+ win32\lastrev.bat | win32\ifchange.bat --timestamp=.revision.time revision.h -
+ type revision.h
+ working-directory: src
+
+ - run: nmake
+
+ - name: Set up Launchable
+ uses: ./.github/actions/launchable/setup
+ with:
+ os: windows-${{ matrix.os }}
+ launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }}
+ builddir: build
+ srcdir: src
+ test-task: ${{ matrix.test_task || 'check' }}
+ continue-on-error: true
+ if: ${{ matrix.test_task != 'test-bundled-gems' }}
+ timeout-minutes: 3
+
+ - run: nmake ${{ matrix.test_task || 'check' }}
+ env:
+ RUBY_TESTOPTS: -j${{ env.TEST_JOBS || 4 }}
+ timeout-minutes: 70
+
+ - uses: ./.github/actions/slack
+ with:
+ label: Windows ${{ matrix.os }} / VC ${{ matrix.vc }} / ${{ matrix.test_task || 'check' }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+ result:
+ if: ${{ always() }}
+ name: ${{ github.workflow }} result
+ runs-on: windows-latest
+ needs: [make]
+ steps:
+ - run: exit 1
+ working-directory:
+ if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
+
+defaults:
+ run:
+ working-directory: build
+ shell: cmd
diff --git a/.github/workflows/wsl.yml b/.github/workflows/wsl.yml
new file mode 100644
index 0000000000..640f18ce42
--- /dev/null
+++ b/.github/workflows/wsl.yml
@@ -0,0 +1,70 @@
+name: Ubuntu on WSL
+
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ # Do not use paths-ignore for required status checks
+ # https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
+ merge_group:
+
+jobs:
+ wsl:
+ runs-on: windows-2025
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - name: Install or update WSL
+ uses: Ubuntu/WSL/.github/actions/wsl-install@main
+ with:
+ distro: Ubuntu-24.04
+
+ - name: Install dependencies
+ uses: Ubuntu/WSL/.github/actions/wsl-bash@main
+ with:
+ distro: Ubuntu-24.04
+ working-dir: /tmp/github/
+ exec: |
+ DEBIAN_FRONTEND=noninteractive sudo apt update
+ DEBIAN_FRONTEND=noninteractive sudo apt install -y ruby build-essential autoconf libssl-dev libyaml-dev zlib1g-dev libgmp-dev libffi-dev
+
+ - name: Check out the repository
+ uses: Ubuntu/WSL/.github/actions/wsl-checkout@main
+ with:
+ distro: Ubuntu-24.04
+ working-dir: /tmp/github/
+ submodules: true
+
+ - name: Build
+ uses: Ubuntu/WSL/.github/actions/wsl-bash@main
+ with:
+ distro: Ubuntu-24.04
+ working-dir: /tmp/github/
+ exec: |
+ ./autogen.sh
+ ./configure --disable-install-doc
+ make ruby -j4
+ make extract-gems
+ make -j4
+
+ - name: Test
+ uses: Ubuntu/WSL/.github/actions/wsl-bash@main
+ with:
+ distro: Ubuntu-24.04
+ working-dir: /tmp/github/
+ exec: |
+ ./ruby -v
+ # make check TESTS="-j4" MSPECOPT="-j"
diff --git a/.github/workflows/yjit-macos.yml b/.github/workflows/yjit-macos.yml
new file mode 100644
index 0000000000..a59b4d6508
--- /dev/null
+++ b/.github/workflows/yjit-macos.yml
@@ -0,0 +1,198 @@
+name: YJIT macOS
+on:
+ push:
+ branches:
+ - master
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ types:
+ - opened
+ - synchronize
+ - reopened
+ # Do not use paths-ignore for required status checks
+ # https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ cargo:
+ name: cargo test
+
+ runs-on: macos-14
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ - run: RUST_BACKTRACE=1 cargo test
+ working-directory: yjit
+
+ # Also compile and test with all features enabled
+ - run: RUST_BACKTRACE=1 cargo test --all-features
+ working-directory: yjit
+
+ # Check that we can build in release mode too
+ - run: cargo build --release
+ working-directory: yjit
+
+ make:
+ strategy:
+ matrix:
+ include:
+ - test_task: 'check'
+ configure: '--enable-yjit'
+ yjit_opts: '--yjit'
+ - test_task: 'check'
+ configure: '--enable-yjit=dev'
+ yjit_opts: '--yjit-call-threshold=1 --yjit-verify-ctx --yjit-code-gc'
+ specopts: '-T --yjit-call-threshold=1 -T --yjit-verify-ctx -T --yjit-code-gc'
+ fail-fast: false
+
+ env:
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+ RUN_OPTS: ${{ matrix.yjit_opts }}
+ SPECOPTS: ${{ matrix.specopts }}
+
+ runs-on: macos-14
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: /.github
+
+ - name: Install libraries
+ uses: ./.github/actions/setup/macos
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+ dummy-files: ${{ matrix.test_task == 'check' }}
+ # Set fetch-depth: 10 so that Launchable can receive commits information.
+ fetch-depth: 10
+
+ - name: Run configure
+ run: ../src/configure -C --disable-install-doc ${{ matrix.configure }}
+
+ - run: make prepare-gems
+ if: ${{ matrix.test_task == 'test-bundled-gems' }}
+
+ - run: make
+
+ - name: Verify that --yjit-dump-disasm works
+ run: |
+ ./miniruby --yjit-call-threshold=1 --yjit-dump-disasm -e0 | \
+ wc -l | \
+ ruby -ne 'raise "Disassembly seems broken in dev build (output has too few lines)" unless $_.to_i > 10'
+ if: ${{ contains(matrix.configure, 'jit=dev') }}
+
+ - name: Set ENV for YJIT
+ run: |
+ echo "RUBY_YJIT_ENABLE=1" >> $GITHUB_ENV
+ echo "RUBY_CRASH_REPORT=$(pwd)/rb_crash_%p.txt" >> $GITHUB_ENV
+
+ - name: Set test options for skipped tests
+ run: |
+ set -x
+ TESTS="$(echo "${{ matrix.skipped_tests }}" | sed 's| |$$/ -n!/|g;s|^|-n!/|;s|$|$$/|')"
+ echo "TESTS=${TESTS}" >> $GITHUB_ENV
+ if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }}
+
+ - name: Set up Launchable
+ id: launchable
+ uses: ./.github/actions/launchable/setup
+ with:
+ os: macos-14
+ test-opts: ${{ matrix.configure }}
+ launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }}
+ builddir: build
+ srcdir: src
+ is-yjit: true
+ continue-on-error: true
+ timeout-minutes: 3
+
+ - name: make ${{ matrix.test_task }}
+ run: |
+ test -n "${LAUNCHABLE_STDOUT}" && exec 1> >(tee "${LAUNCHABLE_STDOUT}")
+ test -n "${LAUNCHABLE_STDERR}" && exec 2> >(tee "${LAUNCHABLE_STDERR}")
+
+ set -x
+ make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"} \
+ RUN_OPTS="$RUN_OPTS" \
+ SPECOPTS="$SPECOPTS"
+ timeout-minutes: 60
+ env:
+ RUBY_TESTOPTS: '-q --tty=no'
+ TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
+ SYNTAX_SUGGEST_TIMEOUT: '5'
+ PRECHECK_BUNDLED_GEMS: 'no'
+ LAUNCHABLE_STDOUT: ${{ steps.launchable.outputs.stdout_report_path }}
+ LAUNCHABLE_STDERR: ${{ steps.launchable.outputs.stderr_report_path }}
+ continue-on-error: ${{ matrix.continue-on-test_task || false }}
+
+ - name: make skipped tests
+ run: |
+ make -s test-all TESTS="${TESTS//-n!\//-n/}"
+ env:
+ GNUMAKEFLAGS: ''
+ RUBY_TESTOPTS: '-v --tty=no'
+ PRECHECK_BUNDLED_GEMS: 'no'
+ if: ${{ matrix.test_task == 'check' && matrix.skipped_tests }}
+ continue-on-error: ${{ matrix.continue-on-skipped_tests || false }}
+
+ - name: Dump crash logs
+ if: ${{ failure() }}
+ continue-on-error: true
+ run: |
+ tail --verbose --lines=+1 rb_crash_*.txt
+ exit 1
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ${{ matrix.test_task }} ${{ matrix.configure }} ${{ matrix.yjit_opts }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+ result:
+ if: ${{ always() }}
+ name: ${{ github.workflow }} result
+ runs-on: macos-14
+ needs: [make]
+ steps:
+ - name: ${{ github.workflow }} jobs have failed
+ run: exit 1
+ working-directory:
+ if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
+
+defaults:
+ run:
+ working-directory: build
diff --git a/.github/workflows/yjit-ubuntu.yml b/.github/workflows/yjit-ubuntu.yml
new file mode 100644
index 0000000000..150f0b3275
--- /dev/null
+++ b/.github/workflows/yjit-ubuntu.yml
@@ -0,0 +1,240 @@
+name: YJIT Ubuntu
+on:
+ push:
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ # Do not use paths-ignore for required status checks
+ # https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ cargo:
+ name: cargo test
+
+ # GitHub Action's image seems to already contain a Rust 1.58.0.
+ runs-on: ubuntu-22.04
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ # For now we can't run cargo test --offline because it complains about the
+ # capstone dependency, even though the dependency is optional
+ #- run: cargo test --offline
+
+ - run: RUST_BACKTRACE=1 cargo test
+ working-directory: yjit
+
+ # Also compile and test with all features enabled
+ - run: RUST_BACKTRACE=1 cargo test --all-features
+ working-directory: yjit
+
+ # Check that we can build in release mode too
+ - run: cargo build --release
+ working-directory: yjit
+
+ lint:
+ name: cargo clippy
+
+ # GitHub Action's image seems to already contain a Rust 1.58.0.
+ runs-on: ubuntu-22.04
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ # Check that we don't have linting errors in release mode, too
+ - run: cargo clippy --all-targets --all-features
+ working-directory: yjit
+
+ make:
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - test_task: 'yjit-bindgen'
+ hint: 'To fix: use patch in logs'
+ # Build with YJIT+ZJIT for output that works in the most number of configurations
+ configure: '--with-gcc=clang-14 --enable-yjit=dev --enable-zjit'
+ libclang_path: '/usr/lib/llvm-14/lib/libclang.so.1'
+
+ - test_task: 'check'
+ # YJIT should be automatically built in release mode on x86-64 Linux with rustc present
+ #configure: "--enable-yjit RUSTC='rustc +1.58.0'"
+ configure: "RUSTC='rustc +1.58.0'"
+ rust_version: '1.58.0'
+
+ - test_task: 'check'
+ configure: '--enable-yjit=dev'
+
+ - test_task: 'check'
+ configure: '--enable-yjit=dev'
+ yjit_opts: '--yjit-call-threshold=1 --yjit-verify-ctx --yjit-code-gc'
+ specopts: '-T --yjit-call-threshold=1 -T --yjit-verify-ctx -T --yjit-code-gc'
+
+ - test_task: 'test-bundled-gems'
+ configure: '--enable-yjit=dev'
+
+ env:
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+ RUN_OPTS: ${{ matrix.yjit_opts }}
+ YJIT_BENCH_OPTS: ${{ matrix.yjit_bench_opts }}
+ SPECOPTS: ${{ matrix.specopts }}
+ RUBY_DEBUG: ci
+ RUST_BACKTRACE: 1
+
+ runs-on: ubuntu-22.04
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: /.github
+
+ - uses: ./.github/actions/setup/ubuntu
+
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ ruby-version: '3.1'
+ bundler: none
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+ dummy-files: ${{ matrix.test_task == 'check' }}
+ # Set fetch-depth: 10 so that Launchable can receive commits information.
+ fetch-depth: 10
+
+ - name: Install Rust
+ if: ${{ matrix.rust_version }}
+ run: rustup install ${{ matrix.rust_version }} --profile minimal
+
+ - name: Remove cargo
+ # Since this tests a `rustc` build for release, remove `cargo` to ensure
+ # that only `rustc` is used.
+ if: ${{ contains(matrix.configure, 'rustc') }}
+ run: sudo rm $(which -a cargo | uniq)
+
+ - name: Run configure
+ run: ../src/configure -C --disable-install-doc --prefix=$(pwd)/install ${{ matrix.configure }}
+
+ - run: make incs
+
+ - run: make prepare-gems
+ if: ${{ matrix.test_task == 'test-bundled-gems' }}
+
+ - run: make
+
+ - name: Verify that --yjit-dump-disasm works
+ run: |
+ ./miniruby --yjit-call-threshold=1 --yjit-dump-disasm -e0 | \
+ wc -l | \
+ ruby -ne 'raise "Disassembly seems broken in dev build (output has too few lines)" unless $_.to_i > 10'
+ if: ${{ contains(matrix.configure, 'jit=dev') }}
+
+ - name: Set ENV for YJIT
+ run: |
+ echo "RUBY_YJIT_ENABLE=1" >> $GITHUB_ENV
+ echo "RUBY_CRASH_REPORT=$(pwd)/rb_crash_%p.txt" >> $GITHUB_ENV
+
+ # Check that the binary was built with YJIT
+ - name: Check YJIT enabled
+ run: ./miniruby --yjit -v | grep "+YJIT"
+
+ - name: Set up Launchable
+ id: launchable
+ uses: ./.github/actions/launchable/setup
+ with:
+ os: ubuntu-22.04
+ test-opts: ${{ matrix.configure }}
+ launchable-token: ${{ secrets.LAUNCHABLE_TOKEN }}
+ builddir: build
+ srcdir: src
+ is-yjit: true
+ continue-on-error: true
+ timeout-minutes: 3
+
+ - name: make ${{ matrix.test_task }}
+ run: |
+ test -n "${LAUNCHABLE_STDOUT}" && exec 1> >(tee "${LAUNCHABLE_STDOUT}")
+ test -n "${LAUNCHABLE_STDERR}" && exec 2> >(tee "${LAUNCHABLE_STDERR}")
+
+ set -x
+ make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"} \
+ RUN_OPTS="$RUN_OPTS" MSPECOPT=--debug SPECOPTS="$SPECOPTS" \
+ YJIT_BENCH_OPTS="$YJIT_BENCH_OPTS" YJIT_BINDGEN_DIFF_OPTS="$YJIT_BINDGEN_DIFF_OPTS"
+ timeout-minutes: 90
+ env:
+ RUBY_TESTOPTS: '-q --tty=no'
+ TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
+ PRECHECK_BUNDLED_GEMS: 'no'
+ SYNTAX_SUGGEST_TIMEOUT: '5'
+ YJIT_BINDGEN_DIFF_OPTS: '--exit-code'
+ LIBCLANG_PATH: ${{ matrix.libclang_path }}
+ LAUNCHABLE_STDOUT: ${{ steps.launchable.outputs.stdout_report_path }}
+ LAUNCHABLE_STDERR: ${{ steps.launchable.outputs.stderr_report_path }}
+ continue-on-error: ${{ matrix.continue-on-test_task || false }}
+
+ - name: Dump crash logs
+ if: ${{ failure() }}
+ continue-on-error: true
+ run: |
+ tail --verbose --lines=+1 rb_crash_*.txt
+ exit 1
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ${{ matrix.test_task }} ${{ matrix.configure }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+ result:
+ if: ${{ always() }}
+ name: ${{ github.workflow }} result
+ runs-on: ubuntu-latest
+ needs: [make]
+ steps:
+ - run: exit 1
+ working-directory:
+ if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
+
+defaults:
+ run:
+ working-directory: build
diff --git a/.github/workflows/zjit-macos.yml b/.github/workflows/zjit-macos.yml
new file mode 100644
index 0000000000..a638907811
--- /dev/null
+++ b/.github/workflows/zjit-macos.yml
@@ -0,0 +1,214 @@
+name: ZJIT macOS
+on:
+ push:
+ branches:
+ - master
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ types:
+ - opened
+ - synchronize
+ - reopened
+ # Do not use paths-ignore for required status checks
+ # https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ make:
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - test_task: 'check'
+ run_opts: '--zjit-call-threshold=1'
+ specopts: '-T --zjit-call-threshold=1'
+ configure: '--enable-zjit=dev'
+
+ - test_task: 'check'
+ run_opts: '--zjit-disable-hir-opt --zjit-call-threshold=1'
+ specopts: '-T --zjit-disable-hir-opt -T --zjit-call-threshold=1'
+ configure: '--enable-zjit=dev'
+
+ - test_task: 'zjit-check' # zjit-test + quick feedback of test_zjit.rb
+ configure: '--enable-yjit=dev --enable-zjit'
+ rust_version: "1.85.0"
+
+ - test_task: 'ruby'
+ hint: 'combo build test'
+ configure: '--enable-yjit --enable-zjit'
+
+ env:
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+ RUN_OPTS: ${{ matrix.run_opts }}
+ SPECOPTS: ${{ matrix.specopts }}
+ TESTOPTS: ${{ matrix.testopts }}
+ ZJIT_RB_BUG: 1
+
+ runs-on: macos-14
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: /.github
+
+ - name: Install libraries
+ uses: ./.github/actions/setup/macos
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+ dummy-files: ${{ matrix.test_task == 'check' }}
+ # Set fetch-depth: 10 so that Launchable can receive commits information.
+ fetch-depth: 10
+
+ - name: Install Rust
+ if: ${{ matrix.rust_version }}
+ run: |
+ rustup install ${{ matrix.rust_version }} --profile minimal
+ rustup default ${{ matrix.rust_version }}
+
+ - uses: taiki-e/install-action@v2
+ with:
+ tool: nextest@0.9
+ if: ${{ matrix.test_task == 'zjit-check' }}
+
+ - name: Run configure
+ run: ../src/configure -C --disable-install-doc ${{ matrix.configure }}
+
+ - run: make
+
+ - name: Verify that --zjit-dump-disasm works
+ run: |
+ ./miniruby --zjit-call-threshold=1 --zjit-dump-disasm -e0 | \
+ wc -l | \
+ ruby -ne 'raise "Disassembly seems broken in dev build (output has too few lines)" unless $_.to_i > 10'
+ if: ${{ contains(matrix.configure, 'jit=dev') }}
+
+ - name: Set ENV for ZJIT
+ run: |
+ echo "RUBY_CRASH_REPORT=$(pwd)/rb_crash_%p.txt" >> $GITHUB_ENV
+
+ - name: make ${{ matrix.test_task }}
+ run: |
+ set -x
+ make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"} \
+ RUN_OPTS="$RUN_OPTS" \
+ SPECOPTS="$SPECOPTS" \
+ TESTOPTS="$TESTOPTS"
+ timeout-minutes: 60
+ env:
+ RUBY_TESTOPTS: '-q --tty=no'
+ EXCLUDES: '../src/test/.excludes-zjit'
+ TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
+ SYNTAX_SUGGEST_TIMEOUT: '5'
+ PRECHECK_BUNDLED_GEMS: 'no'
+ continue-on-error: ${{ matrix.continue-on-test_task || false }}
+
+ - name: Dump crash logs
+ if: ${{ failure() }}
+ continue-on-error: true
+ run: |
+ tail --verbose --lines=+1 rb_crash_*.txt
+ exit 1
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ${{ matrix.test_task }} ${{ matrix.configure }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+ result:
+ if: ${{ always() }}
+ name: ${{ github.workflow }} result
+ runs-on: macos-14
+ needs: [make]
+ steps:
+ - run: exit 1
+ working-directory:
+ if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
+
+ # Separated from `make` job to avoid making it a required status check for now
+ ruby-bench:
+ strategy:
+ matrix:
+ include:
+ # Test --call-threshold=2 with 2 iterations in total
+ - ruby_opts: '--zjit-call-threshold=2'
+ bench_opts: '--warmup=1 --bench=1 --excludes=lobsters'
+ configure: '--enable-zjit=dev_nodebug' # --enable-zjit=dev is too slow
+
+ runs-on: macos-14
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ - uses: ./.github/actions/setup/macos
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+
+ - name: Run configure
+ run: ../src/configure -C --disable-install-doc --prefix="$(pwd)/install" ${{ matrix.configure }}
+
+ - run: make install
+
+ # setup/directories set MAKEFLAGS=-j4 for macOS, which randomly fails sqlite3.gem builds
+ - name: Unset MAKEFLAGS
+ run: echo "MAKEFLAGS=" >> "$GITHUB_ENV"
+
+ - name: Checkout ruby-bench
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ repository: ruby/ruby-bench
+ path: ruby-bench
+
+ # If you want to skip failing benchmark, consider using `--excludes`.
+ # e.g. `bench_opts: '--warmup=1 --bench=1 --excludes=railsbench,lobsters'`
+ - name: Run ruby-bench
+ run: ruby run_benchmarks.rb -e "zjit::../build/install/bin/ruby ${{ matrix.ruby_opts }}" ${{ matrix.bench_opts }}
+ working-directory: ruby-bench
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ruby-bench ${{ matrix.bench_opts }} ${{ matrix.ruby_opts }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+defaults:
+ run:
+ working-directory: build
diff --git a/.github/workflows/zjit-ubuntu.yml b/.github/workflows/zjit-ubuntu.yml
new file mode 100644
index 0000000000..28bfec963e
--- /dev/null
+++ b/.github/workflows/zjit-ubuntu.yml
@@ -0,0 +1,267 @@
+name: ZJIT Ubuntu
+on:
+ push:
+ branches:
+ - master
+ paths-ignore:
+ - 'doc/**'
+ - '**/man/*'
+ - '**.md'
+ - '**.rdoc'
+ - '**/.document'
+ - '.*.yml'
+ pull_request:
+ types:
+ - opened
+ - synchronize
+ - reopened
+ # Do not use paths-ignore for required status checks
+ # https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
+ merge_group:
+
+concurrency:
+ group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
+ cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}
+
+permissions:
+ contents: read
+
+jobs:
+ lint:
+ name: cargo clippy
+
+ runs-on: ubuntu-22.04
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ - run: cargo clippy --all-targets --all-features
+ working-directory: zjit
+
+ make:
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - test_task: 'check'
+ run_opts: '--zjit-call-threshold=1'
+ specopts: '-T --zjit-call-threshold=1'
+ configure: '--enable-zjit=dev'
+
+ - test_task: 'check'
+ run_opts: '--zjit-disable-hir-opt --zjit-call-threshold=1'
+ specopts: '-T --zjit-disable-hir-opt -T --zjit-call-threshold=1'
+ configure: '--enable-zjit=dev'
+
+ # The optimizer benefits from at least 1 iteration of profiling. Also, many
+ # regression tests in bootstraptest/test_yjit.rb assume call-threshold=2.
+ - test_task: 'btest'
+ run_opts: '--zjit-call-threshold=2'
+ configure: '--enable-zjit=dev'
+
+ - test_task: 'zjit-check' # zjit-test + quick feedback of test_zjit.rb
+ configure: '--enable-yjit --enable-zjit=dev'
+ rust_version: '1.85.0'
+
+ - test_task: 'zjit-bindgen'
+ hint: 'To fix: use patch in logs'
+ # Build with YJIT+ZJIT for output that works in the most number of configurations
+ configure: '--enable-zjit=dev --enable-yjit --with-gcc=clang-16'
+ clang_path: '/usr/bin/clang-16'
+ runs-on: 'ubuntu-24.04' # for clang-16
+
+ - test_task: 'test-bundled-gems'
+ configure: '--enable-zjit=dev'
+ run_opts: '--zjit-call-threshold=1'
+
+ env:
+ GITPULLOPTIONS: --no-tags origin ${{ github.ref }}
+ RUN_OPTS: ${{ matrix.run_opts }}
+ YJIT_BENCH_OPTS: ${{ matrix.yjit_bench_opts }}
+ SPECOPTS: ${{ matrix.specopts }}
+ TESTOPTS: ${{ matrix.testopts }}
+ RUBY_DEBUG: ci
+ BUNDLE_JOBS: 8 # for yjit-bench
+ RUST_BACKTRACE: 1
+ ZJIT_RB_BUG: 1
+
+ runs-on: ${{ matrix.runs-on || 'ubuntu-22.04' }}
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ sparse-checkout-cone-mode: false
+ sparse-checkout: /.github
+
+ - uses: ./.github/actions/setup/ubuntu
+
+ - uses: ruby/setup-ruby@b90be12699fdfcbee4440c2bba85f6f460446bb0 # v1.279.0
+ with:
+ ruby-version: '3.1'
+ bundler: none
+
+ - uses: taiki-e/install-action@v2
+ with:
+ tool: nextest@0.9
+ if: ${{ matrix.test_task == 'zjit-check' }}
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+ dummy-files: ${{ matrix.test_task == 'check' }}
+ # Set fetch-depth: 10 so that Launchable can receive commits information.
+ fetch-depth: 10
+
+ - name: Install Rust
+ if: ${{ matrix.rust_version }}
+ run: |
+ rustup install ${{ matrix.rust_version }} --profile minimal
+ rustup default ${{ matrix.rust_version }}
+
+ - name: Install rustfmt
+ if: ${{ matrix.test_task == 'zjit-bindgen' }}
+ run: rustup component add rustfmt
+
+ - name: Run configure
+ run: ../src/configure -C --disable-install-doc --prefix=$(pwd)/install ${{ matrix.configure }}
+
+ - run: make incs
+
+ - run: make prepare-gems
+ if: ${{ matrix.test_task == 'test-bundled-gems' }}
+
+ - run: make
+
+ - name: Verify that --zjit-dump-disasm works
+ run: |
+ ./miniruby --zjit-call-threshold=1 --zjit-dump-disasm -e0 | \
+ wc -l | \
+ ruby -ne 'raise "Disassembly seems broken in dev build (output has too few lines)" unless $_.to_i > 10'
+ if: ${{ contains(matrix.configure, 'jit=dev') }}
+
+ # Check that the binary was built with ZJIT
+ - name: Check ZJIT enabled
+ run: ./miniruby --zjit -v | grep "+ZJIT"
+ if: ${{ matrix.configure != '--disable-zjit' }}
+
+ - name: Set ENV for ZJIT
+ run: |
+ echo "RUBY_CRASH_REPORT=$(pwd)/rb_crash_%p.txt" >> $GITHUB_ENV
+
+ - name: make ${{ matrix.test_task }}
+ run: |
+ set -x
+ make -s ${{ matrix.test_task }} ${TESTS:+TESTS="$TESTS"} \
+ RUN_OPTS="$RUN_OPTS" MSPECOPT=--debug SPECOPTS="$SPECOPTS" \
+ TESTOPTS="$TESTOPTS" \
+ ZJIT_BINDGEN_DIFF_OPTS="$ZJIT_BINDGEN_DIFF_OPTS"
+ timeout-minutes: 90
+ env:
+ RUBY_TESTOPTS: '-q --tty=no'
+ EXCLUDES: '../src/test/.excludes-zjit'
+ TEST_BUNDLED_GEMS_ALLOW_FAILURES: ''
+ PRECHECK_BUNDLED_GEMS: 'no'
+ SYNTAX_SUGGEST_TIMEOUT: '5'
+ ZJIT_BINDGEN_DIFF_OPTS: '--exit-code'
+ CLANG_PATH: ${{ matrix.clang_path }}
+ continue-on-error: ${{ matrix.continue-on-test_task || false }}
+
+ - name: Dump crash logs
+ if: ${{ failure() }}
+ continue-on-error: true
+ run: |
+ tail --verbose --lines=+1 rb_crash_*.txt
+ exit 1
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ${{ matrix.test_task }} ${{ matrix.configure }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+ result:
+ if: ${{ always() }}
+ name: ${{ github.workflow }} result
+ runs-on: ubuntu-22.04
+ needs: [make]
+ steps:
+ - name: ${{ github.workflow }} jobs have failed
+ run: exit 1
+ working-directory:
+ if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
+
+ # Separated from `make` job to avoid making it a required status check for now
+ ruby-bench:
+ strategy:
+ matrix:
+ include:
+ # Test --call-threshold=2 with 2 iterations in total
+ - ruby_opts: '--zjit-call-threshold=2'
+ bench_opts: '--warmup=1 --bench=1 --excludes=lobsters'
+ configure: '--enable-zjit=dev_nodebug' # --enable-zjit=dev is too slow
+
+ runs-on: ubuntu-24.04
+
+ if: >-
+ ${{!(false
+ || contains(github.event.head_commit.message, '[DOC]')
+ || contains(github.event.pull_request.title, '[DOC]')
+ || contains(github.event.pull_request.labels.*.name, 'Documentation')
+ || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]')
+ )}}
+
+ steps:
+ - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+
+ - uses: ./.github/actions/setup/ubuntu
+
+ - uses: ./.github/actions/setup/directories
+ with:
+ srcdir: src
+ builddir: build
+ makeup: true
+
+ - name: Run configure
+ run: ../src/configure -C --disable-install-doc --prefix="$(pwd)/install" ${{ matrix.configure }}
+
+ - run: make install
+
+ - name: Checkout ruby-bench
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
+ with:
+ repository: ruby/ruby-bench
+ path: ruby-bench
+
+ # If you want to skip failing benchmark, consider using `--excludes`.
+ # e.g. `bench_opts: '--warmup=1 --bench=1 --excludes=railsbench,lobsters'`
+ - name: Run ruby-bench
+ run: ruby run_benchmarks.rb -e "zjit::../build/install/bin/ruby ${{ matrix.ruby_opts }}" ${{ matrix.bench_opts }}
+ working-directory: ruby-bench
+
+ - uses: ./.github/actions/slack
+ with:
+ label: ruby-bench ${{ matrix.bench_opts }} ${{ matrix.ruby_opts }}
+ SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
+ if: ${{ failure() }}
+
+defaults:
+ run:
+ working-directory: build
diff --git a/.gitignore b/.gitignore
index 80c12594dd..6cf5fb5f32 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,36 +3,56 @@
*-*-*.lib
*.a
*.bak
+*.bc
+*.bundle
*.dSYM
*.dmyh
*.dylib
*.elc
+*.i
+*.ii
*.inc
*.log
*.o
+*.o.tmp
*.obj
+*.old
*.orig
+*.pch
*.pdb
+*.rbinc
+*.rbbin
*.rej
+*.s
*.sav
+*.sl
+*.so
+*.so.*
*.swp
*.yarb
*~
-.*-*
.*.list
.*.time
.DS_Store
+.bundle
.ccmalloc
.ext
.pc
.ppack
.svn
+.time
+.ruby-version
Makefile
-Makefile.old
cygruby*.def
extconf.h
y.output
y.tab.c
+*.gcda
+*.gcno
+*.gcov
+*.vscode
+!misc/.vscode
+lcov*.info
# /
/*-fake.rb
@@ -42,13 +62,13 @@ y.tab.c
/*.pc
/*.rc
/*_prelude.c
+/.downloaded-cache
+/.top-enc.mk
+/build*/
/COPYING.LIB
-/ChangeLog-*
-/ChangeLog.pre-alpha
-/ChangeLog.pre1_1
+/ChangeLog
/Doxyfile
/GNUmakefile
-/GNUmakefile.old
/README.atheos
/README.fat-patch
/README.v6
@@ -56,6 +76,7 @@ y.tab.c
/archive
/autom4te*.cache
/automake
+/benchmark/benchmark-driver
/beos
/bmlog-*
/breakpoints.gdb
@@ -79,6 +100,9 @@ y.tab.c
/goruby
/id.[ch]
/largefile.h
+/lcov-c-out
+/lcov-rb-out
+/lcov-out
/lex.c
/libruby*.*
/miniprelude.c
@@ -94,28 +118,43 @@ y.tab.c
/ppack
/prelude.c
/preview
+/probes.dmyh
/probes.h
/rbconfig.rb
/rename2.h
/repack
/revision.h
+/revision.tmp
+/ripper.tmp.y
/riscos
/rubicon
/ruby
/ruby-runner
-/ruby-runner.c
+/ruby-runner.h
/ruby-man.rd.gz
+/rubyspec_temp
+/run.gdb
/sizes.c
+/static-ruby
/test.rb
+/test-coverage.dat
/tmp
+/vcpkg_installed
/transdb.h
/uncommon.mk
/verconf.h
/verconf.mk
/web
-/yasmdata.rb
+
+# /bin/
+
+/bin/*.exe
+/bin/*.dll
+/bin/goruby
+/bin/ruby
# /benchmark/
+/benchmark/bm_require.data
/benchmark/bmx_*.rb
/benchmark/fasta.output.*
/benchmark/wc.input
@@ -123,25 +162,38 @@ y.tab.c
/enc/*.def
/enc/*.exp
/enc/*.lib
+/enc/jis/props.h
/enc/unicode/data
+# /coroutine/
+!/coroutine/**/*.s
+!/coroutine/**/*.S
+
# /enc/trans/
/enc/trans/*.c
/enc/trans/*.def
/enc/trans/*.exp
/enc/trans/*.lib
-/enc/trans/.time
+
+# /exe/
+/exe/goruby
+/exe/ruby
# /ext/
/ext/extinit.c
+/ext/configure-ext.mk
+/ext/*/exts.mk
+
+# /ext/-test-/cxxanyargs
+/ext/-test-/cxxanyargs/failure*.failed
# /ext/-test-/win32/dln/
+/ext/-test-/win32/dln/dlntest.dll
/ext/-test-/win32/dln/dlntest.exp
/ext/-test-/win32/dln/dlntest.lib
-# /ext/dl/callback/
-/ext/dl/callback/callback-*.c
-/ext/dl/callback/callback.c
+# /ext/-test-/gems
+/ext/-test-/gems
# /ext/etc/
/ext/etc/constdefs.h
@@ -151,10 +203,14 @@ y.tab.c
# /ext/rbconfig/
/ext/rbconfig/sizeof/sizes.c
+/ext/rbconfig/sizeof/limits.c
# /ext/ripper/
/ext/ripper/eventids1.c
+/ext/ripper/eventids1.h
+/ext/ripper/.eventids2-check
/ext/ripper/eventids2table.c
+/ext/ripper/ripper_init.c
/ext/ripper/ripper.*
/ext/ripper/ids1
/ext/ripper/ids2
@@ -164,15 +220,20 @@ y.tab.c
/ext/socket/constdefs.h
/ext/socket/constdefs.c
-# /ext/tk/
-/ext/tk/config_list
-
# /gems
/gems/*.gem
+/gems/src
+/gems/*-*
+
+# /lib/
+/lib/ruby/[1-9]*.*
+/lib/ruby/vendor_ruby
-# /spec/
-/spec/mspec
-/spec/rubyspec
+# /misc/
+/misc/**/__pycache__
+
+# for `make test-bundler`
+/.rspec_status
# /tool/
/tool/config.guess
@@ -180,4 +241,40 @@ y.tab.c
# /win32/
/win32/*.ico
-/win32/.time
+
+
+# YJIT
+/yjit-bench
+/yjit_exit_locations.dump
+
+# Rust
+/target
+
+# /wasm/
+/wasm/tests/*.wasm
+
+# prism
+/lib/prism/compiler.rb
+/lib/prism/dispatcher.rb
+/lib/prism/dot_visitor.rb
+/lib/prism/dsl.rb
+/lib/prism/inspect_visitor.rb
+/lib/prism/mutation_compiler.rb
+/lib/prism/node.rb
+/lib/prism/reflection.rb
+/lib/prism/serialize.rb
+/lib/prism/visitor.rb
+/prism/api_node.c
+/prism/ast.h
+/prism/diagnostic.c
+/prism/diagnostic.h
+/prism/node.c
+/prism/prettyprint.c
+/prism/serialize.c
+/prism/token_type.c
+/prism/srcs.mk
+
+# tool/update-NEWS-gemlist.rb
+/bundled_gems.json
+/default_gems.json
+/gems/default_gems
diff --git a/.indent.pro b/.indent.pro
index 6a207a0554..1d61cbcad1 100644
--- a/.indent.pro
+++ b/.indent.pro
@@ -2,12 +2,15 @@
-nbbb
-nbc
-br
+-brs
-nbs
-ncdb
--ce
--cli0.5
+-nce
+-cdw
+-cli2
+-cbi2
-ndj
--ei
+-ncs
-nfc1
-i4
-l120
@@ -16,6 +19,14 @@
-psl
-sc
-sob
+-sbi4
+-nut
+-par
-TID
-TVALUE
+-Tst_data_t
+-Tst_index_t
+-Tst_table
+-Trb_data_type_t
+-TFILE
diff --git a/.mailmap b/.mailmap
new file mode 100644
index 0000000000..213a0f4916
--- /dev/null
+++ b/.mailmap
@@ -0,0 +1,431 @@
+git[bot] <svn-admin@ruby-lang.org>
+git[bot] <svn-admin@ruby-lang.org> git <svn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+svn[bot] <svn-admin@ruby-lang.org> svn <svn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# a_matsuda
+Akira Matsuda <ronnie@dio.jp>
+Akira Matsuda <ronnie@dio.jp> <a_matsuda@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# aamine
+Minero Aoki <aamine@loveruby.net>
+Minero Aoki <aamine@loveruby.net> <aamine@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# akira
+akira yamada <akira@ruby-lang.org>
+## akira yamada <akira@ruby-lang.org> <akira@rice.p.arika.org>
+akira yamada <akira@ruby-lang.org> <akira@arika.org>
+akira yamada <akira@ruby-lang.org> <akira@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# akiyoshi
+AKIYOSHI, Masamichi <masamichi.akiyoshi@hp.com>
+AKIYOSHI, Masamichi <masamichi.akiyoshi@hp.com> <akiyoshi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# akr
+Tanaka Akira <akr@fsij.org>
+Tanaka Akira <akr@fsij.org> <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# arai
+Koji Arai <jca02266@nifty.ne.jp>
+Koji Arai <jca02266@nifty.ne.jp> <arai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# arton
+Akio Tajima <artonx@yahoo.co.jp>
+Akio Tajima <artonx@yahoo.co.jp> <arton@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# aycabta
+aycabta <aycabta@gmail.com>
+aycabta <aycabta@gmail.com> <aycabta@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# ayumin
+Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Ayumu AIZAWA <ayumu.aizawa@gmail.com> <ayumin@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# azav
+Alexander Zavorine <alexandre.zavorine@nokia.com>
+Alexander Zavorine <alexandre.zavorine@nokia.com> <azav@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# charliesome
+Charlie Somerville <charliesome@ruby-lang.org>
+Charlie Somerville <charliesome@ruby-lang.org> <charliesome@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# dave
+Dave Thomas <dave@pragprog.com>
+Dave Thomas <dave@pragprog.com> <dave@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# davidflanagan
+David Flanagan <davidflanagan@ruby-lang.org>
+David Flanagan <davidflanagan@ruby-lang.org> <david@think32>
+David Flanagan <davidflanagan@ruby-lang.org> <david@davidflanagan.com>
+David Flanagan <davidflanagan@ruby-lang.org> <davidflanagan@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# dblack
+David A. Black <dblack@rubypal.com>
+David A. Black <dblack@rubypal.com> <dblack@wobblini.net>
+David A. Black <dblack@rubypal.com> <dblack@superlink.net>
+David A. Black <dblack@rubypal.com> <dblack@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# drbrain
+Eric Hodel <drbrain@segment7.net>
+Eric Hodel <drbrain@segment7.net> <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# duerst
+Martin Dürst <duerst@it.aoyama.ac.jp>
+Martin Dürst <duerst@it.aoyama.ac.jp> <duerst@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# eban
+WATANABE Hirofumi <eban@ruby-lang.org>
+WATANABE Hirofumi <eban@ruby-lang.org> <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# emboss
+Martin Bosslet <Martin.Bosslet@gmail.com>
+Martin Bosslet <Martin.Bosslet@gmail.com> <Martin.Bosslet@googlemail.com>
+Martin Bosslet <Martin.Bosslet@gmail.com> <emboss@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# eregon
+Benoit Daloze <eregontp@gmail.com>
+Benoit Daloze <eregontp@gmail.com> <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# evan
+Evan Phoenix <evan@ruby-lang.org>
+Evan Phoenix <evan@ruby-lang.org> <evan@fallingsnow.net>
+Evan Phoenix <evan@ruby-lang.org> <evan@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# glass
+Masaki Matsushita <glass.saga@gmail.com>
+Masaki Matsushita <glass.saga@gmail.com> <glass@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# gogotanaka
+Kazuki Tanaka <gogotanaka@ruby-lang.org>
+Kazuki Tanaka <gogotanaka@ruby-lang.org> <gogotanaka@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# gotoken
+Kentaro Goto <gotoken@gmail.com>
+Kentaro Goto <gotoken@gmail.com> <gotoken@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# gotoyuzo
+GOTOU Yuuzou <gotoyuzo@notwork.org>
+GOTOU Yuuzou <gotoyuzo@notwork.org> <gotoyuzo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# gsinclair
+Gavin Sinclair <gsinclair@soyabean.com.au>
+Gavin Sinclair <gsinclair@soyabean.com.au> <gsinclair@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# H_Konishi
+KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+KONISHI Hiromasa <konishih@fd6.so-net.ne.jp> <H_Konishi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# headius
+Charles Oliver Nutter <headius@headius.com>
+Charles Oliver Nutter <headius@headius.com> <headius@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# hone
+Terence Lee <hone@heroku.com>
+Terence Lee <hone@heroku.com> <hone@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# hsbt
+Hiroshi SHIBATA <hsbt@ruby-lang.org>
+Hiroshi SHIBATA <hsbt@ruby-lang.org> <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# iwamatsu
+Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Nobuhiro Iwamatsu <iwamatsu@nigauri.org> <iwamatsu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# jeg2
+James Edward Gray II <james@graysoftinc.com>
+James Edward Gray II <james@graysoftinc.com> <jeg2@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# jim
+Jim Weirich <jim@tardis.local>
+Jim Weirich <jim@tardis.local> <jim@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# k0kubun
+Takashi Kokubun <takashikkbn@gmail.com>
+Takashi Kokubun <takashikkbn@gmail.com> <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# kanemoto
+Yutaka Kanemoto <kanemoto@ruby-lang.org>
+Yutaka Kanemoto <kanemoto@ruby-lang.org> <kanemoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# katsu
+UENO Katsuhiro <katsu@blue.sky.or.jp>
+UENO Katsuhiro <katsu@blue.sky.or.jp> <katsu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# kazu
+Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+Kazuhiro NISHIYAMA <zn@mbf.nifty.com> <kazu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# keiju
+Keiju Ishitsuka <keiju@ishitsuka.com>
+Keiju Ishitsuka <keiju@ishitsuka.com> <keiju@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# knu
+Akinori MUSHA <knu@iDaemons.org>
+Akinori MUSHA <knu@iDaemons.org> <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# ko1
+Koichi Sasada <ko1@atdot.net>
+Koichi Sasada <ko1@atdot.net> <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# kosaki
+KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+KOSAKI Motohiro <kosaki.motohiro@gmail.com> <kosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# kosako
+K.Kosako <sndgk393@ybb.ne.jp>
+K.Kosako <sndgk393@ybb.ne.jp> <kosako@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# kou
+Sutou Kouhei <kou@clear-code.com>
+Sutou Kouhei <kou@clear-code.com> <kou@cozmixng.org>
+Sutou Kouhei <kou@clear-code.com> <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# kouji
+Kouji Takao <kouji.takao@gmail.com>
+Kouji Takao <kouji.takao@gmail.com> <kouji@takao7.net>
+Kouji Takao <kouji.takao@gmail.com> <kouji@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# ksaito
+Kazuo Saito <ksaito@uranus.dti.ne.jp>
+Kazuo Saito <ksaito@uranus.dti.ne.jp> <ksaito@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# ktsj
+Kazuki Tsujimoto <kazuki@callcc.net>
+Kazuki Tsujimoto <kazuki@callcc.net> <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# luislavena
+Luis Lavena <luislavena@gmail.com>
+Luis Lavena <luislavena@gmail.com> <luislavena@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# mame
+Yusuke Endoh <mame@ruby-lang.org>
+## Yusuke Endoh <mame@ruby-lang.org> <mame@tsg.ne.jp>
+Yusuke Endoh <mame@ruby-lang.org> <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# marcandre
+Marc-Andre Lafortune <github@marc-andre.ca>
+Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+Marc-Andre Lafortune <ruby-core@marc-andre.ca> <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# matz
+Yukihiro "Matz" Matsumoto <matz@ruby.or.jp>
+Yukihiro "Matz" Matsumoto <matz@ruby.or.jp> <matz@ruby-lang.org>
+Yukihiro "Matz" Matsumoto <matz@ruby.or.jp> <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# michal
+Michal Rokos <michal@ruby-lang.org>
+Michal Rokos <michal@ruby-lang.org> <michal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# mneumann
+Michael Neumann <mneumann@ruby-lang.org>
+Michael Neumann <mneumann@ruby-lang.org> <mneumann@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# mrkn
+Kenta Murata <mrkn@mrkn.jp>
+Kenta Murata <mrkn@mrkn.jp> <muraken@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+Kenta Murata <mrkn@mrkn.jp> <3959+mrkn@users.noreply.github.com>
+Kenta Murata <mrkn@mrkn.jp> <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# nagachika
+nagachika <nagachika@ruby-lang.org>
+nagachika <nagachika@ruby-lang.org> <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# nagai
+Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp> <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# nahi
+Hiroshi Nakamura <nahi@ruby-lang.org>
+Hiroshi Nakamura <nahi@ruby-lang.org> <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# nari
+Narihiro Nakamura <authornari@gmail.com>
+Narihiro Nakamura <authornari@gmail.com> <nari@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# naruse
+NARUSE, Yui <naruse@airemix.jp>
+NARUSE, Yui <naruse@airemix.jp> <naruse@ruby-lang.org>
+NARUSE, Yui <naruse@airemix.jp> <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# ngoto
+Naohisa Goto <ngotogenome@gmail.com>
+Naohisa Goto <ngotogenome@gmail.com> <ngoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# nobu
+Nobuyoshi Nakada <nobu@ruby-lang.org>
+Nobuyoshi Nakada <nobu@ruby-lang.org> <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# normal
+Eric Wong <normal@ruby-lang.org>
+Eric Wong <normal@ruby-lang.org> <e@80x24.org>
+Eric Wong <normal@ruby-lang.org> <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# ntalbott
+Nathaniel Talbott <ntalbott@ruby-lang.org>
+Nathaniel Talbott <ntalbott@ruby-lang.org> <ntalbott@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# ocean
+Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
+Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp> <ocean@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# odaira
+Rei Odaira <rodaira@us.ibm.com>
+Rei Odaira <rodaira@us.ibm.com> <Rei.Odaira@gmail.com>
+Rei Odaira <rodaira@us.ibm.com> <odaira@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# okkez
+okkez <okkez000@gmail.com>
+okkez <okkez000@gmail.com> <okkez@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# rhe
+Kazuki Yamaguchi <k@rhe.jp>
+Kazuki Yamaguchi <k@rhe.jp> <rhe@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# ryan
+Ryan Davis <ryand-github@zenspider.com>
+Ryan Davis <ryand-github@zenspider.com> <ryand-ruby@zenspider.com>
+Ryan Davis <ryand-github@zenspider.com> <ryan@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# samuel
+Samuel Williams <samuel.williams@oriontransfer.co.nz>
+Samuel Williams <samuel.williams@oriontransfer.co.nz> <samuel@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# seki
+Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+Masatoshi SEKI <m_seki@mva.biglobe.ne.jp> <seki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# ser
+Sean Russell <ser@germane-software.com>
+Sean Russell <ser@germane-software.com> <ser@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# shigek
+Shigeo Kobayashi <shigek@ruby-lang.org>
+Shigeo Kobayashi <shigek@ruby-lang.org> <shigek@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# shirosaki
+Hiroshi Shirosaki <h.shirosaki@gmail.com>
+Hiroshi Shirosaki <h.shirosaki@gmail.com> <shirosaki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# sho-h
+Sho Hashimoto <sho-h@ruby-lang.org>
+Sho Hashimoto <sho-h@ruby-lang.org> <sho-h@netlab.jp>
+Sho Hashimoto <sho-h@ruby-lang.org> <sho.hsmt@gmail.com>
+Sho Hashimoto <sho-h@ruby-lang.org> <sho-h@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# shugo
+Shugo Maeda <shugo@ruby-lang.org>
+Shugo Maeda <shugo@ruby-lang.org> <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# shyouhei
+åœéƒ¨æ˜Œå¹³ <shyouhei@ruby-lang.org>
+åœéƒ¨æ˜Œå¹³ <shyouhei@ruby-lang.org> <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# siena
+Siena. <siena@faculty.chiba-u.jp>
+Siena. <siena@faculty.chiba-u.jp> <siena@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# sonots
+sonots <sonots@gmail.com>
+sonots <sonots@gmail.com> <sonots@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# sorah
+Sorah Fukumori <her@sorah.jp>
+Sorah Fukumori <her@sorah.jp> <sorah@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# stomar
+Marcus Stollsteimer <sto.mar@web.de>
+Marcus Stollsteimer <sto.mar@web.de> <stomar@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# suke
+Masaki Suketa <masaki.suketa@nifty.ne.jp>
+Masaki Suketa <masaki.suketa@nifty.ne.jp> <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# tadd
+Tadashi Saito <tad.a.digger@gmail.com>
+Tadashi Saito <tad.a.digger@gmail.com> <tadd@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# tadf
+Tadayoshi Funaba <tadf@dotrb.org>
+Tadayoshi Funaba <tadf@dotrb.org> <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# takano32
+TAKANO Mitsuhiro <takano32@gmail.com>
+TAKANO Mitsuhiro <takano32@gmail.com> <takano32@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# tarui
+Masaya Tarui <tarui@ruby-lang.org>
+Masaya Tarui <tarui@ruby-lang.org> <tarui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# technorama
+Technorama Ltd. <oss-ruby@technorama.net>
+Technorama Ltd. <oss-ruby@technorama.net> <technorama@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# tenderlove
+Aaron Patterson <tenderlove@ruby-lang.org>
+Aaron Patterson <tenderlove@ruby-lang.org> <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# tmm1
+Aman Gupta <ruby@tmm1.net>
+Aman Gupta <ruby@tmm1.net> <tmm1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# ts
+Guy Decoux <ts@moulon.inra.fr>
+Guy Decoux <ts@moulon.inra.fr> <ts@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# ttate
+Takaaki Tateishi <ttate@ttsky.net>
+## Takaaki Tateishi <ttate@ttsky.net> <ttate@kt.jaist.ac.jp>
+Takaaki Tateishi <ttate@ttsky.net> <ttate@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# uema2
+Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+Takaaki Uematsu <uema2x@jcom.home.ne.jp> <uema2@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# usa
+U.Nakamura <usa@ruby-lang.org>
+U.Nakamura <usa@ruby-lang.org> <usa@garbagecollect.jp>
+U.Nakamura <usa@ruby-lang.org> <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# wakou
+Wakou Aoyama <wakou@ruby-lang.org>
+Wakou Aoyama <wakou@ruby-lang.org> <wakou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# wanabe
+wanabe <s.wanabe@gmail.com>
+wanabe <s.wanabe@gmail.com> <wanabe@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# watson1978
+Watson <watson1978@gmail.com>
+Watson <watson1978@gmail.com> <watson1978@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# wew
+William Webber <william@williamwebber.com>
+William Webber <william@williamwebber.com> <wew@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# why
+why the lucky stiff <why@ruby-lang.org>
+why the lucky stiff <why@ruby-lang.org> <why@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# xibbar
+Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+Takeyuki FUJIOKA <xibbar@ruby-lang.org> <xibbar@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# yugui
+Yuki Yugui Sonoda <yugui@yugui.jp>
+Yuki Yugui Sonoda <yugui@yugui.jp> <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# yui-knk
+yui-knk <spiketeika@gmail.com>
+yui-knk <spiketeika@gmail.com> <yui-knk@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# yuki
+Yuki Nishijima <yuki24@hey.com>
+Yuki Nishijima <yuki24@hey.com> <mail@yukinishijima.net>
+Yuki Nishijima <yuki24@hey.com> <yuki@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# zsombor
+Dee Zsombor <zsombor@ruby-lang.org>
+Dee Zsombor <zsombor@ruby-lang.org> <zsombor@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
+
+# zzak
+zzak <zzakscott@gmail.com>
+zzak <zzakscott@gmail.com> <zzak@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
diff --git a/.rdoc_options b/.rdoc_options
new file mode 100644
index 0000000000..89265cafd4
--- /dev/null
+++ b/.rdoc_options
@@ -0,0 +1,39 @@
+---
+page_dir: doc
+charset: UTF-8
+encoding: UTF-8
+main_page: index.md
+title: Documentation for Ruby development version
+visibility: :private
+rdoc_include:
+- doc
+
+exclude:
+- \.gemspec\z
+- lib/set/subclass_compatible.rb
+
+autolink_excluded_words:
+- Box
+- Class
+- Method
+- Module
+- Process
+- RDoc
+- Ruby
+- Set
+- ZJIT
+- YJIT
+
+canonical_root: https://docs.ruby-lang.org/en/master
+
+footer_content:
+ Ruby:
+ Documentation: index.html
+ Official Website: https://www.ruby-lang.org/
+ Playground: https://ruby.github.io/play-ruby/
+ Resources:
+ GitHub: https://github.com/ruby/ruby
+ Issue Tracker: https://bugs.ruby-lang.org/projects/ruby-master/issues
+ RubyGems: https://rubygems.org/
+ Community:
+ X: https://x.com/rubylangorg
diff --git a/.rspec_parallel b/.rspec_parallel
new file mode 100644
index 0000000000..aaff198a32
--- /dev/null
+++ b/.rspec_parallel
@@ -0,0 +1,2 @@
+--format progress
+--format ParallelTests::RSpec::RuntimeLogger --out tmp/parallel_runtime_rspec.log
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index f87ffd3483..0000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,101 +0,0 @@
-# Copyright (C) 2011 Urabe, Shyouhei. All rights reserved.
-#
-# This file is a part of the programming language Ruby. Permission is hereby
-# granted, to either redistribute or modify this file, provided that the
-# conditions mentioned in the file COPYING are met. Consult the file for
-# details.
-
-# This is a Travis-CI build configuration file. The list of configurations
-# available is located in
-#
-# http://about.travis-ci.org/docs/user/build-configuration/
-#
-# and as Ruby itself is a project written in C language,
-#
-# http://about.travis-ci.org/docs/user/languages/c/
-#
-# is also a good place to look at.
-
-# Language specification.
-language: c
-sudo: false
-
-# Compilers. Several compilers are provided in Travis, so we try them all.
-# The value set here is visible via $CC environment variable.
-compiler:
- - gcc
-
-os:
- - linux
-
-# Dependencies. Some header files are missing in a Travis' worker VM, so we
-# have to install them. The "1.9.1" here is OK. It is the most adopted
-# version string for Debian/Ubuntu, and no dependencies have been changed so
-# far since the 1.9.1 release.
-before_install:
- - "CONFIG_FLAG="
- - "JOBS='-j 4'"
-
-# Script is where the test runs. Note we just do "make test", not other tests
-# like test-all, test-rubyspec. This is because they take too much time,
-# enough for Travis to shut down the VM as being stalled.
-before_script:
- - "uname -a"
- - "uname -r"
- - "rm -fr .ext autom4te.cache"
- - "echo $TERM"
- - "make -f common.mk BASERUBY=ruby MAKEDIRS='mkdir -p' srcdir=. update-config_files"
- - "autoconf"
- - "mkdir config_1st config_2nd"
- - "./configure -C --disable-install-doc --with-gcc=$CC $CONFIG_FLAG"
- - "cp -pr config.status .ext/include config_1st"
- - "make reconfig"
- - "cp -pr config.status .ext/include config_2nd"
- - "diff -ru config_1st config_2nd"
- - "make after-update BASERUBY=ruby"
- - "make -s $JOBS"
- - "make update-rubyspec"
-script:
- - "make test TESTOPTS=--color=never"
- - "make test-all TESTOPTS='-q -j3 --color=never --job-status=normal'"
- - "make test-rubyspec MSPECOPT=-fm"
-
-# Branch matrix. Not all branches are Travis-ready so we limit branches here.
-branches:
- only:
- - trunk
- - ruby_2_0_0
- - ruby_2_1
- - ruby_2_2
- - ruby_2_3
-
-# We want to be notified when something happens.
-notifications:
- irc:
- channels:
- - "irc.freenode.org#ruby-core"
- - "irc.freenode.org#ruby-ja"
- on_success: change # [always|never|change] # default: always
- on_failure: always # [always|never|change] # default: always
- template:
- - "%{message} by @%{author}: See %{build_url}"
-
- # Update ruby-head installed on Travis CI so other projects can test against it.
- webhooks:
- urls:
- - "https://rubies.travis-ci.org/rebuild/ruby-head"
- on_success: always
- on_failure: never
-
- email:
- - ko1c-failure@atdot.net
- - shibata.hiroshi@gmail.com
-
-# Local Variables:
-# mode: YAML
-# coding: utf-8-unix
-# indent-tabs-mode: nil
-# tab-width: 4
-# fill-column: 79
-# default-justification: full
-# End:
diff --git a/BSDL b/BSDL
index a009caefea..66d93598aa 100644
--- a/BSDL
+++ b/BSDL
@@ -4,10 +4,10 @@ Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
+ notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ffdf2dd4b8..35e79dd3b9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,4 +1 @@
-Please see the [official issue tracker] and wiki [HowToContribute].
-
-[official issue tracker]: https://bugs.ruby-lang.org
-[HowToContribute]: https://bugs.ruby-lang.org/projects/ruby/wiki/HowToContribute
+See ["Contributing to Ruby"](https://docs.ruby-lang.org/en/master/contributing/contributing_md.html), which includes setup and build instructions.
diff --git a/COPYING b/COPYING
index a1f19ff99d..428ce03ed7 100644
--- a/COPYING
+++ b/COPYING
@@ -1,56 +1,58 @@
+{日本語}[rdoc-ref:COPYING.ja]
+
Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
You can redistribute it and/or modify it under either the terms of the
2-clause BSDL (see the file BSDL), or the conditions below:
- 1. You may make and give away verbatim copies of the source form of the
- software without restriction, provided that you duplicate all of the
- original copyright notices and associated disclaimers.
+1. You may make and give away verbatim copies of the source form of the
+ software without restriction, provided that you duplicate all of the
+ original copyright notices and associated disclaimers.
- 2. You may modify your copy of the software in any way, provided that
- you do at least ONE of the following:
+2. You may modify your copy of the software in any way, provided that
+ you do at least ONE of the following:
- a) place your modifications in the Public Domain or otherwise
- make them Freely Available, such as by posting said
- modifications to Usenet or an equivalent medium, or by allowing
- the author to include your modifications in the software.
+ a. place your modifications in the Public Domain or otherwise
+ make them Freely Available, such as by posting said
+ modifications to Usenet or an equivalent medium, or by allowing
+ the author to include your modifications in the software.
- b) use the modified software only within your corporation or
- organization.
+ b. use the modified software only within your corporation or
+ organization.
- c) give non-standard binaries non-standard names, with
- instructions on where to get the original software distribution.
+ c. give non-standard binaries non-standard names, with
+ instructions on where to get the original software distribution.
- d) make other distribution arrangements with the author.
+ d. make other distribution arrangements with the author.
- 3. You may distribute the software in object code or binary form,
- provided that you do at least ONE of the following:
+3. You may distribute the software in object code or binary form,
+ provided that you do at least ONE of the following:
- a) distribute the binaries and library files of the software,
- together with instructions (in the manual page or equivalent)
- on where to get the original distribution.
+ a. distribute the binaries and library files of the software,
+ together with instructions (in the manual page or equivalent)
+ on where to get the original distribution.
- b) accompany the distribution with the machine-readable source of
- the software.
+ b. accompany the distribution with the machine-readable source of
+ the software.
- c) give non-standard binaries non-standard names, with
- instructions on where to get the original software distribution.
+ c. give non-standard binaries non-standard names, with
+ instructions on where to get the original software distribution.
- d) make other distribution arrangements with the author.
+ d. make other distribution arrangements with the author.
- 4. You may modify and include the part of the software into any other
- software (possibly commercial). But some files in the distribution
- are not written by the author, so that they are not under these terms.
+4. You may modify and include the part of the software into any other
+ software (possibly commercial). But some files in the distribution
+ are not written by the author, so that they are not under these terms.
- For the list of those files and their copying conditions, see the
- file LEGAL.
+ For the list of those files and their copying conditions, see the
+ file LEGAL.
- 5. The scripts and library files supplied as input to or produced as
- output from the software do not automatically fall under the
- copyright of the software, but belong to whomever generated them,
- and may be sold commercially, and may be aggregated with this
- software.
+5. The scripts and library files supplied as input to or produced as
+ output from the software do not automatically fall under the
+ copyright of the software, but belong to whomever generated them,
+ and may be sold commercially, and may be aggregated with this
+ software.
- 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
+6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.
diff --git a/COPYING.ja b/COPYING.ja
index e50d01c8d1..5de2dbcc8f 100644
--- a/COPYING.ja
+++ b/COPYING.ja
@@ -1,51 +1,53 @@
+{English}[rdoc-ref:COPYING]
+
本プログラムã¯ãƒ•リーソフトウェアã§ã™ï¼Ž2-clause BSDL
ã¾ãŸã¯ä»¥ä¸‹ã«ç¤ºã™æ¡ä»¶ã§æœ¬ãƒ—ログラムをå†é…布ã§ãã¾ã™
2-clause BSDLã«ã¤ã„ã¦ã¯BSDLファイルをå‚ç…§ã—ã¦ä¸‹ã•ã„.
- 1. 複製ã¯åˆ¶é™ãªã自由ã§ã™ï¼Ž
+1. 複製ã¯åˆ¶é™ãªã自由ã§ã™ï¼Ž
- 2. ä»¥ä¸‹ã®æ¡ä»¶ã®ã„ãšã‚Œã‹ã‚’満ãŸã™æ™‚ã«æœ¬ãƒ—ログラムã®ã‚½ãƒ¼ã‚¹ã‚’
- 自由ã«å¤‰æ›´ã§ãã¾ã™ï¼Ž
+2. ä»¥ä¸‹ã®æ¡ä»¶ã®ã„ãšã‚Œã‹ã‚’満ãŸã™æ™‚ã«æœ¬ãƒ—ログラムã®ã‚½ãƒ¼ã‚¹ã‚’
+ 自由ã«å¤‰æ›´ã§ãã¾ã™ï¼Ž
- (a) ãƒãƒƒãƒˆãƒ‹ãƒ¥ãƒ¼ã‚ºã«ãƒã‚¹ãƒˆã—ãŸã‚Šï¼Œä½œè€…ã«å¤‰æ›´ã‚’é€ä»˜ã™ã‚‹
- ãªã©ã®æ–¹æ³•ã§ï¼Œå¤‰æ›´ã‚’公開ã™ã‚‹ï¼Ž
+ a. ãƒãƒƒãƒˆãƒ‹ãƒ¥ãƒ¼ã‚ºã«ãƒã‚¹ãƒˆã—ãŸã‚Šï¼Œä½œè€…ã«å¤‰æ›´ã‚’é€ä»˜ã™ã‚‹
+ ãªã©ã®æ–¹æ³•ã§ï¼Œå¤‰æ›´ã‚’公開ã™ã‚‹ï¼Ž
- (b) 変更ã—ãŸæœ¬ãƒ—ãƒ­ã‚°ãƒ©ãƒ ã‚’è‡ªåˆ†ã®æ‰€å±žã™ã‚‹çµ„織内部ã ã‘ã§
- 使ã†ï¼Ž
+ b. 変更ã—ãŸæœ¬ãƒ—ãƒ­ã‚°ãƒ©ãƒ ã‚’è‡ªåˆ†ã®æ‰€å±žã™ã‚‹çµ„織内部ã ã‘ã§
+ 使ã†ï¼Ž
- (c) 変更点を明示ã—ãŸã†ãˆï¼Œã‚½ãƒ•トウェアã®åå‰ã‚’変更ã™ã‚‹ï¼Ž
- ãã®ã‚½ãƒ•トウェアをé…布ã™ã‚‹æ™‚ã«ã¯å¤‰æ›´å‰ã®æœ¬ãƒ—ログラ
- ãƒ ã‚‚åŒæ™‚ã«é…布ã™ã‚‹ï¼Žã¾ãŸã¯å¤‰æ›´å‰ã®æœ¬ãƒ—ログラムã®ã‚½ãƒ¼
- スã®å…¥æ‰‹æ³•を明示ã™ã‚‹ï¼Ž
+ c. 変更点を明示ã—ãŸã†ãˆï¼Œã‚½ãƒ•トウェアã®åå‰ã‚’変更ã™ã‚‹ï¼Ž
+ ãã®ã‚½ãƒ•トウェアをé…布ã™ã‚‹æ™‚ã«ã¯å¤‰æ›´å‰ã®æœ¬ãƒ—ログラ
+ ãƒ ã‚‚åŒæ™‚ã«é…布ã™ã‚‹ï¼Žã¾ãŸã¯å¤‰æ›´å‰ã®æœ¬ãƒ—ログラムã®ã‚½ãƒ¼
+ スã®å…¥æ‰‹æ³•を明示ã™ã‚‹ï¼Ž
- (d) ãã®ä»–ã®å¤‰æ›´æ¡ä»¶ã‚’作者ã¨åˆæ„ã™ã‚‹ï¼Ž
+ d. ãã®ä»–ã®å¤‰æ›´æ¡ä»¶ã‚’作者ã¨åˆæ„ã™ã‚‹ï¼Ž
- 3. ä»¥ä¸‹ã®æ¡ä»¶ã®ã„ãšã‚Œã‹ã‚’満ãŸã™æ™‚ã«æœ¬ãƒ—ログラムをコンパイ
- ルã—ãŸã‚ªãƒ–ジェクトコードや実行形å¼ã§ã‚‚é…布ã§ãã¾ã™ï¼Ž
+3. ä»¥ä¸‹ã®æ¡ä»¶ã®ã„ãšã‚Œã‹ã‚’満ãŸã™æ™‚ã«æœ¬ãƒ—ログラムをコンパイ
+ ルã—ãŸã‚ªãƒ–ジェクトコードや実行形å¼ã§ã‚‚é…布ã§ãã¾ã™ï¼Ž
- (a) ãƒã‚¤ãƒŠãƒªã‚’å—ã‘å–ã£ãŸäººãŒã‚½ãƒ¼ã‚¹ã‚’入手ã§ãるよã†ã«ï¼Œ
- ソースã®å…¥æ‰‹æ³•を明示ã™ã‚‹ï¼Ž
+ a. ãƒã‚¤ãƒŠãƒªã‚’å—ã‘å–ã£ãŸäººãŒã‚½ãƒ¼ã‚¹ã‚’入手ã§ãるよã†ã«ï¼Œ
+ ソースã®å…¥æ‰‹æ³•を明示ã™ã‚‹ï¼Ž
- (b) 機械å¯èª­ãªã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’添付ã™ã‚‹ï¼Ž
+ b. 機械å¯èª­ãªã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’添付ã™ã‚‹ï¼Ž
- (c) 変更を行ã£ãŸãƒã‚¤ãƒŠãƒªã¯åå‰ã‚’変更ã—ãŸã†ãˆï¼Œã‚ªãƒªã‚¸ãƒŠ
- ルã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã®å…¥æ‰‹æ³•を明示ã™ã‚‹ï¼Ž
+ c. 変更を行ã£ãŸãƒã‚¤ãƒŠãƒªã¯åå‰ã‚’変更ã—ãŸã†ãˆï¼Œã‚ªãƒªã‚¸ãƒŠ
+ ルã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã®å…¥æ‰‹æ³•を明示ã™ã‚‹ï¼Ž
- (d) ãã®ä»–ã®é…布æ¡ä»¶ã‚’作者ã¨åˆæ„ã™ã‚‹ï¼Ž
+ d. ãã®ä»–ã®é…布æ¡ä»¶ã‚’作者ã¨åˆæ„ã™ã‚‹ï¼Ž
- 4. ä»–ã®ãƒ—ログラムã¸ã®å¼•用ã¯ã„ã‹ãªã‚‹ç›®çš„ã§ã‚れ自由ã§ã™ï¼ŽãŸ
- ã ã—,本プログラムã«å«ã¾ã‚Œã‚‹ä»–ã®ä½œè€…ã«ã‚ˆã‚‹ã‚³ãƒ¼ãƒ‰ã¯ï¼Œã
- れãžã‚Œã®ä½œè€…ã®æ„å‘ã«ã‚ˆã‚‹åˆ¶é™ãŒåŠ ãˆã‚‰ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ï¼Ž
+4. ä»–ã®ãƒ—ログラムã¸ã®å¼•用ã¯ã„ã‹ãªã‚‹ç›®çš„ã§ã‚れ自由ã§ã™ï¼ŽãŸ
+ ã ã—,本プログラムã«å«ã¾ã‚Œã‚‹ä»–ã®ä½œè€…ã«ã‚ˆã‚‹ã‚³ãƒ¼ãƒ‰ã¯ï¼Œã
+ れãžã‚Œã®ä½œè€…ã®æ„å‘ã«ã‚ˆã‚‹åˆ¶é™ãŒåŠ ãˆã‚‰ã‚Œã‚‹å ´åˆãŒã‚りã¾ã™ï¼Ž
- ãれらファイルã®ä¸€è¦§ã¨ãれãžã‚Œã®é…布æ¡ä»¶ãªã©ã«ä»˜ã„ã¦ã¯
- LEGALファイルをå‚ç…§ã—ã¦ãã ã•ã„.
+ ãれらファイルã®ä¸€è¦§ã¨ãれãžã‚Œã®é…布æ¡ä»¶ãªã©ã«ä»˜ã„ã¦ã¯
+ LEGALファイルをå‚ç…§ã—ã¦ãã ã•ã„.
- 5. 本プログラムã¸ã®å…¥åŠ›ã¨ãªã‚‹ã‚¹ã‚¯ãƒªãƒ—トãŠã‚ˆã³ï¼Œæœ¬ãƒ—ログラ
- ムã‹ã‚‰ã®å‡ºåŠ›ã®æ¨©åˆ©ã¯æœ¬ãƒ—ログラムã®ä½œè€…ã§ã¯ãªã,ãれãž
- れã®å…¥å‡ºåŠ›ã‚’ç”Ÿæˆã—ãŸäººã«å±žã—ã¾ã™ï¼Žã¾ãŸï¼Œæœ¬ãƒ—ログラムã«
- 組ã¿è¾¼ã¾ã‚Œã‚‹ãŸã‚ã®æ‹¡å¼µãƒ©ã‚¤ãƒ–ラリã«ã¤ã„ã¦ã‚‚åŒæ§˜ã§ã™ï¼Ž
+5. 本プログラムã¸ã®å…¥åŠ›ã¨ãªã‚‹ã‚¹ã‚¯ãƒªãƒ—トãŠã‚ˆã³ï¼Œæœ¬ãƒ—ログラ
+ ムã‹ã‚‰ã®å‡ºåŠ›ã®æ¨©åˆ©ã¯æœ¬ãƒ—ログラムã®ä½œè€…ã§ã¯ãªã,ãれãž
+ れã®å…¥å‡ºåŠ›ã‚’ç”Ÿæˆã—ãŸäººã«å±žã—ã¾ã™ï¼Žã¾ãŸï¼Œæœ¬ãƒ—ログラムã«
+ 組ã¿è¾¼ã¾ã‚Œã‚‹ãŸã‚ã®æ‹¡å¼µãƒ©ã‚¤ãƒ–ラリã«ã¤ã„ã¦ã‚‚åŒæ§˜ã§ã™ï¼Ž
- 6. 本プログラムã¯ç„¡ä¿è¨¼ã§ã™ï¼Žä½œè€…ã¯æœ¬ãƒ—ログラムをサãƒãƒ¼ãƒˆ
- ã™ã‚‹æ„å¿—ã¯ã‚りã¾ã™ãŒï¼Œãƒ—ログラム自身ã®ãƒã‚°ã‚ã‚‹ã„ã¯æœ¬ãƒ—
- ログラムã®å®Ÿè¡Œãªã©ã‹ã‚‰ç™ºç”Ÿã™ã‚‹ã„ã‹ãªã‚‹æå®³ã«å¯¾ã—ã¦ã‚‚責
- 任をæŒã¡ã¾ã›ã‚“.
+6. 本プログラムã¯ç„¡ä¿è¨¼ã§ã™ï¼Žä½œè€…ã¯æœ¬ãƒ—ログラムをサãƒãƒ¼ãƒˆ
+ ã™ã‚‹æ„å¿—ã¯ã‚りã¾ã™ãŒï¼Œãƒ—ログラム自身ã®ãƒã‚°ã‚ã‚‹ã„ã¯æœ¬ãƒ—
+ ログラムã®å®Ÿè¡Œãªã©ã‹ã‚‰ç™ºç”Ÿã™ã‚‹ã„ã‹ãªã‚‹æå®³ã«å¯¾ã—ã¦ã‚‚責
+ 任をæŒã¡ã¾ã›ã‚“.
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000000..9a4b2ebbba
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,193 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "capstone"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "015ef5d5ca1743e3f94af9509ba6bd2886523cfee46e48d15c2ef5216fd4ac9a"
+dependencies = [
+ "capstone-sys",
+ "libc",
+]
+
+[[package]]
+name = "capstone-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2267cb8d16a1e4197863ec4284ffd1aec26fe7e57c58af46b02590a0235809a0"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "cc"
+version = "1.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "525046617d8376e3db1deffb079e91cef90a89fc3ca5c185bbf8c9ecdd15cd5c"
+dependencies = [
+ "shlex",
+]
+
+[[package]]
+name = "console"
+version = "0.15.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "insta"
+version = "1.43.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "154934ea70c58054b556dd430b99a98c2a7ff5309ac9891597e339b5c28f4371"
+dependencies = [
+ "console",
+ "once_cell",
+ "similar",
+]
+
+[[package]]
+name = "jit"
+version = "0.1.0"
+
+[[package]]
+name = "lazy_static"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
+[[package]]
+name = "libc"
+version = "0.2.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
+
+[[package]]
+name = "once_cell"
+version = "1.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+
+[[package]]
+name = "ruby"
+version = "0.0.0"
+dependencies = [
+ "yjit",
+ "zjit",
+]
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "similar"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32fea41aca09ee824cc9724996433064c89f7777e60762749a4170a14abbfa21"
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "yjit"
+version = "0.1.0"
+dependencies = [
+ "capstone",
+ "jit",
+]
+
+[[package]]
+name = "zjit"
+version = "0.0.1"
+dependencies = [
+ "capstone",
+ "insta",
+ "jit",
+]
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000000..521129d92d
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,60 @@
+# This is the root Cargo [workspace](https://doc.rust-lang.org/cargo/reference/workspaces.html)
+# and the root package for all the rust code that are statically linked into ruby. Rust tooling
+# limitations means all Rust code need to share a single archive library (staticlib) at the
+# integration point with non-rust code. (See rustlang/rust#44322 and #104707 for a taste of
+# the linking challenges.)
+#
+# Do not add required dependencies. This is a policy that helps downstream consumers and give
+# us tight control over what we ship. All of the optional dependencies are used exclusively
+# during development.
+#
+# Release builds avoid Cargo entirely because offline builds can fail even when none of the
+# optional dependencies are built (rust-lang/cargo#10352).
+
+[workspace]
+members = ["zjit", "yjit", "jit"]
+
+[package]
+name = "ruby"
+version = "0.0.0"
+edition = "2024"
+rust-version = "1.85.0"
+publish = false # Don't publish to crates.io
+
+[dependencies]
+yjit = { path = "yjit", optional = true }
+zjit = { path = "zjit", optional = true }
+
+[lib]
+crate-type = ["staticlib"]
+path = "ruby.rs"
+
+[features]
+disasm = ["yjit?/disasm", "zjit?/disasm"]
+runtime_checks = ["yjit?/runtime_checks", "zjit?/runtime_checks"]
+yjit = [ "dep:yjit" ]
+zjit = [ "dep:zjit" ]
+
+[profile.dev]
+opt-level = 0
+debug = true
+debug-assertions = true
+overflow-checks = true
+
+[profile.dev_nodebug]
+inherits = "dev"
+
+[profile.stats]
+inherits = "release"
+
+[profile.release]
+# NOTE: --enable-yjit and zjit builds use `rustc` without going through Cargo. You
+# might want to update the `rustc` invocation if you change this profile.
+opt-level = 3
+# The extra robustness that comes from checking for arithmetic overflow is
+# worth the performance cost for the compiler.
+overflow-checks = true
+# Generate debug info
+debug = true
+# Use ThinLTO. Much smaller output for a small amount of build time increase.
+lto = "thin"
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644
index ec1d5e51ef..0000000000
--- a/ChangeLog
+++ /dev/null
@@ -1,1052 +0,0 @@
-Sat Jan 30 15:18:07 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (rb_check_funcall_with_hook): also should call the
- given hook before returning Qundef when overridden respond_to?
- method returned false. [ruby-core:73556] [Bug #12030]
-
-Fri Jan 29 17:40:07 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/file.c (rb_readlink): drop garbage after the substitute
- name, as rb_w32_read_reparse_point returns the expected buffer
- size but "\??\" prefix is dropped from the result.
-
- * win32/win32.c (w32_readlink): ditto, including NUL-terminator.
-
-Fri Jan 29 17:07:27 2016 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (fileattr_to_unixmode, rb_w32_reparse_symlink_p): volume
- mount point should be treated as directory, not symlink.
- [ruby-core:72483] [Bug #11874]
-
- * win32/win32.c (rb_w32_read_reparse_point): check the reparse point is
- a volume mount point or not.
-
- * win32/file.c (rb_readlink): follow above change (but this pass won't
- be used).
-
-Fri Jan 29 16:17:07 2016 Lucas Buchala <lucasbuchala@gmail.com>
-
- * enum.c (enum_take_while, enum_drop_while): rename block
- parameter to obj, since they are generic objects. [Fix GH-1226]
-
-Fri Jan 29 14:15:26 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/erb.rb (ERB::Compiler#detect_magic_comment): allow
- frozen-string-literal in comment as well as encoding.
-
- * lib/erb.rb (ERB#def_method): insert def line just before the
- first non-comment and non-empty line, not to leave duplicated
- and stale magic comments.
-
-Fri Jan 29 11:13:33 2016 Jeremy Evans <code@jeremyevans.net>
-
- * lib/erb.rb (ERB#set_eoutvar): explicitly make mutable string as
- a buffer to make ERB work with --enable-frozen-string-literal.
- [ruby-core:73561] [Bug #12031]
-
-Fri Jan 29 10:44:56 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * lib/net/http/header.rb: Warn nil variable on HTTP Header.
- It caused to NoMethodError. [fix GH-952][fix GH-641] Patch by @teosz
- * test/net/http/test_httpheader.rb: Added test for nil HTTP Header.
-
-Thu Jan 28 17:31:43 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/socket.c (sock_gethostname): support unlimited size
- hostname.
-
-Wed Jan 27 21:03:45 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * test/-ext-/string/test_capacity.rb: Added missing library.
-
-Wed Jan 27 18:53:40 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/unicode.c: Fixed bit mask in macro OnigCodePointCount
-
-Wed Jan 27 17:54:42 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/unicode.c: Protect code point count by macro, in order to
- be able to use the remaining bits for flags.
- (with Kimihito Matsui)
-
-Wed Jan 27 16:34:35 2016 boshan <boshan@subsplash.com>
-
- * lib/tempfile.rb (Tempfile#initialize): [DOC] the first parameter
- `basename` is optional and defaulted to an empty string since
- [GH-523]. [Fix GH-1225]
-
-Wed Jan 27 16:25:54 2016 Koichi ITO <koic.ito@gmail.com>
-
- * array.c (rb_ary_dig): [DOC] fix the exception class to be raised
- when intermediate object does not have dig method. TypeError
- will be raised now. [Fix GH-1224]
-
-Tue Jan 26 19:36:15 2016 Aggelos Avgerinos <evaggelos.avgerinos@gmail.com>
-
- * array.c (permute0, rpermute0): [DOC] Substitute indexes ->
- indices in documentation for consistency. [Fix GH-1222]
-
-Tue Jan 26 15:21:37 2016 Eric Wong <e@80x24.org>
-
- * compile.c (caller_location): use rb_fstring_cstr for "<compiled>"
- (it is converted to fstring anyways inside rb_iseq_new_with_opt)
- * iseq.c (iseqw_s_compile): ditto
- * iseq.c (rb_iseq_new_main): use rb_fstring_cstr for "<main>"
- * vm.c (Init_VM): ditto, share with with above
- * iseq.c (iseqw_s_compile_file): rb_fstring before rb_io_t->pathv
- share "<main>" with above
- * vm.c (rb_binding_add_dynavars): fstring "<temp>" immediately
-
-Tue Jan 26 15:14:01 2016 Kazuki Yamaguchi <k@rhe.jp>
-
- * compile.c (iseq_peephole_optimize): don't apply tailcall
- optimization to send/invokesuper instructions with blockiseq.
- This is a follow-up to the changes in r51903; blockiseq is now
- the third operand of send/invokesuper instructions.
- [ruby-core:73413] [Bug #12018]
-
-Tue Jan 26 14:26:46 2016 Eric Wong <e@80x24.org>
-
- * signal.c (sig_list): use fstring for hash key
- * test/ruby/test_signal.rb (test_signal_list_dedupe_keys): added
-
-Tue Jan 26 13:08:34 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (rb_f_kill): should immediately deliver reserved
- signals SIGILL and SIGFPE, not only SIGSEGV and SIGBUS.
-
-Tue Jan 26 07:57:28 2016 Joseph Tibbertsma <josephtibbertsma@gmail.com>
-
- * gc.c (RVALUE_PAGE_WB_UNPROTECTED): fix a typo of argument name.
- [Fix GH-1221]
-
-Mon Jan 25 17:26:54 2016 Eric Wong <e@80x24.org>
-
- * ruby_assert.h (RUBY_ASSERT_WHEN): fix reference to macro name
- * vm_core.h: include ruby_assert.h before using
- [ruby-core:73371]
-
-Mon Jan 25 15:55:30 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * symbol.c (sym_check_asciionly): more informative error message
- with the encoding name and the inspected content.
- [ruby-core:73398] [Feature #12016]
-
-Mon Jan 25 09:38:26 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * test/ruby/test_string.rb: added testcase for next!, succ and succ!
- [fix GH-1213] Patch by @K0mAtoru
-
-Mon Jan 25 09:32:25 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * lib/webrick/httpservlet/filehandler.rb: fix documentation for namespace.
- [fix GH-1219][ci skip] Patch by @leafac
-
-Sun Jan 24 19:34:23 2016 Eric Wong <e@80x24.org>
-
- * vm_insnhelper.c (vm_check_if_namespace): tiny size reduction
-
-Sun Jan 24 18:12:36 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * common.mk: Simplifying Unicode data file download logic to make
- it more reliable (including additional fix not in r53633) [Bug #12007]
-
-Sun Jan 24 16:54:11 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/wait/wait.c (io_wait_readwrite): [EXPERIMENTAL] allow to
- wait for multiple modes, readable and writable, at once. the
- arguments may change in the future. [Feature #12013]
-
-Sat Jan 23 22:30:59 2016 K0mA <mctj1218@gmail.com>
-
- * test/ruby/test_array.rb (test_keep_if): Add test for
- Array#keep_if separate from Array#select! [Fix GH-1218]
-
-Sat Jan 23 20:54:26 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * common.mk: revert r53633. It broke rubyci and travis.
- https://travis-ci.org/ruby/ruby/builds/104259623
-
-Sat Jan 23 20:10:29 2016 Shugo Maeda <shugo@ruby-lang.org>
-
- * range.c (range_eqq): revert r51585 because rb_call_super() is
- called in range_include() and thus r51585 doesn't work when the
- receiver Range object consists of non linear objects such as Date
- objects.
- [ruby-core:72908] [Bug #12003]
-
-Sat Jan 23 18:37:37 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * ChangeLog: Fixing wrong time on previous commit, and adding
- previous commit message to svn [ci skip]
-
-Sat Jan 23 18:30:30 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * common.mk: Simplifying Unicode data file download logic to make
- it more reliable [Bug #12007]
-
-Sat Jan 23 16:29:42 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * tool/downloader.rb: Fixed a logical error, improved documentation
-
-Sat Jan 23 11:42:43 2016 Peter Suschlik <ps@neopoly.de>
-
- * README.md: Use SVG Travis badge over PNG for better quality and
- device support. [Fix GH-1214] [Fix GH-1216]
-
-Sat Jan 23 11:29:16 2016 Pascal Betz <pascal.betz@simplificator.com>
-
- * lib/csv.rb: Update documentation of CSV header converter for
- r45498, [GH-575]. [Fix GH-1215]
-
-Fri Jan 22 17:36:46 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (VM_ASSERT): use RUBY_ASSERT instead of rb_bug.
-
- * error.c (rb_assert_failure): assertion with stack dump.
-
- * ruby_assert.h (RUBY_ASSERT): new header for the assertion.
-
-Fri Jan 22 00:25:57 2016 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regparse.c (fetch_name_with_level): allow non word characters
- at the first character. [Feature #11949]
-
- * regparse.c (fetch_name): ditto.
-
-Thu Jan 21 17:34:01 2016 NARUSE, Yui <naruse@ruby-lang.org>
-
- * marshal.c (r_object0): honor Marshal.load post proc
- value for TYPE_LINK. by Hiroshi Nakamura <nahi@ruby-lang.org>
- https://github.com/ruby/ruby/pull/1204 fix GH-1204
-
-Thu Jan 21 16:37:50 2016 NARUSE, Yui <naruse@ruby-lang.org>
-
- * Makefile.in (update-rubyspec): fix r53208 like r53451.
-
-Wed Jan 20 20:58:25 2016 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk, Makefile.in: update-config_files is only for Unix
- platforms.
-
-Wed Jan 20 17:13:39 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/extlibs.rb: add --cache option to change cache directory.
-
-Tue Jan 19 17:03:40 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * common.mk: Added Unicode data file CaseFolding.txt to be additionally
- downloaded (with Kimihito Matsui)
-
-Tue Jan 19 10:09:58 2016 Sho Hashimoto <sho-h@ruby-lang.org>
-
- * lib/shell.rb (Shell.debug_output_exclusive_unlock): remove
- because Mutex#exclusive_unlock was already deleted. [fix GH-1185]
-
-Tue Jan 19 09:38:27 2016 Nick Cox <nick@nickcox.me>
-
- * vm_method.c: fix grammar in respond_to? warning.
- [fix GH-1047]
-
-Mon Jan 18 14:37:07 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_here_document): an escaped newline is not an
- actual newline, and the rest part should not be dedented.
- [ruby-core:72855] [Bug #11989]
-
-Mon Jan 18 12:04:34 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * test/ruby/test_string.rb: Added extra testcase for test_rstrip_bang
- and test_lstrip_bang. [fix GH-1178] Patch by @Matrixbirds
-
-Mon Jan 18 11:47:27 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * string.c: fix a typo. [fix GH-1202][ci skip] Patch by @sunboshan
-
-Sun Jan 17 21:15:30 2016 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in: improve ICC (Intel C Compiler) support.
-
- * configure.in (CXX): The name of icc's c++ compiler is `icpc`.
-
- * configure.in (warnings): Add `-diag-disable=2259` to suppress
- noisy warnings: "non-pointer conversion from "..." to "..." may
- lose significant bits".
-
- * configure.in (optflags): Add `-fp-model precise` like -fno-fast-math.
-
- * lib/mkmf.rb: icc supports -Werror=division-by-zero
- and -Werror=deprecated-declarations, but doesn't support
- -Wdivision-by-zero and -Wdeprecated-declarations.
-
-Sun Jan 17 20:40:10 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * string.c: Any kind of option is now taking the new code path for
- upcase/downcase/capitalize/swapcase. :lithuanian can be used for
- testing if no specific option is desired.
- * test/ruby/enc/test_case_mapping.rb: Adjusted to above.
- (with Kimihito Matsui)
-
-Sun Jan 17 20:10:10 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/unicode.c: Fixed a logical error and some comments.
- * test/ruby/enc/test_case_mapping.rb: Made tests more general.
- (with Kimihito Matsui)
-
-Sun Jan 17 17:41:41 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/unicode.c: Removed artificial expansion for Turkic,
- added hand-coded support for Turkic, fixed logic for swapcase.
- * string.c: Made use of new case mapping code possible from upcase,
- capitalize, and swapcase (with :lithuanian as a guard).
- * test/ruby/enc/test_case_mapping.rb: Adjusted for above.
- (with Kimihito Matsui)
-
-Sun Jan 17 15:30:57 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/option.c (sockopt_bool): relax boolean size to be one
- too not only sizeof(int). Winsock getsockopt() returns a single
- byte as a boolean socket option. [ruby-core:72730] [Bug #11958]
-
-Sun Jan 17 14:43:01 2016 Kuniaki IGARASHI <igaiga@gmail.com>
-
- * test/ruby/test_env.rb: [Fix GH-1201]
- * Extract test code for ENV#keep_if from ENV#select_bang
- * Add a test case for ENV#select_bang,keep_if
-
-Sun Jan 17 14:42:25 2016 Kuniaki IGARASHI <igaiga@gmail.com>
-
- * test/ruby/test_env.rb: [Fix GH-1201]
- * Extract test code for ENV#delete_if from ENV#reject_bang
- * Add a test case for ENV#reject_bang,delete_if
-
-Sun Jan 17 14:40:22 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/option.c (check_size): extract a macro to check
- binary data size, with a consistent message.
-
- * ext/socket/option.c (sockopt_byte): fix error message,
- sizeof(int) differs from sizeof(unsigned char) in general.
-
-Sat Jan 16 21:16:21 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (xstring): reset heredoc indent after dedenting,
- so that following string literal would not be dedented.
- [ruby-core:72857] [Bug #11990]
-
-Sat Jan 16 17:24:24 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/unicode.c: Artificial mapping to test buffer expansion code.
- * string.c: Fixed buffer expansion logic.
- * test/ruby/enc/test_case_mapping.rb: Tests for above.
- (with Kimihito Matsui)
-
-Sat Jan 16 16:47:14 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * ext/openssl/lib/openssl/pkey.rb: Added 2048 bit DH parameter.
- * test/openssl/test_pkey_dh.rb: ditto.
-
-Sat Jan 16 10:51:19 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * enc/unicode.c: fix implicit conversion error with clang. fixup r53548.
- * string.c: ditto.
-
-Sat Jan 16 10:31:00 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * common.mk: test-sample was changed to test-basic.
- [Feature #11982][ruby-core:72823]
- * basictest/runner.rb: ditto. rename from tool/rubytest.rb.
- * basictest/test.rb: ditto. rename from sample/test.rb.
- * defs/gmake.mk: picked from r53540
- * sample/test.rb: backward compatibility for chkbuild.
-
-Sat Jan 16 10:23:23 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * string.c, enc/unicode.c: New code path as a preparation for Unicode-wide
- case mapping. The code path is currently guarded by the :lithuanian
- option to avoid accidental problems in daily use.
- * test/ruby/enc/test_case_mapping.rb: Test for above.
- * string.c: function 'check_case_options': fixed logical errors
- (with Kimihito Matsui)
-
-Fri Jan 15 20:20:20 2016 Naohisa Goto <ngotogenome@gmail.com>
-
- * regint.h (PLATFORM_UNALIGNED_WORD_ACCESS): The value of
- UNALIGNED_WORD_ACCESS should be used to determine whether
- unaligned word access is allowed or not. After this commit,
- ./configure CPPFLAGS="-DUNALIGNED_WORD_ACCESS=0" disables
- unaligned word access even on platforms that support the feature.
-
-Fri Jan 15 16:12:10 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (string1): reset heredoc indent for each string literal
- so that concatenated string would not be dedented.
- [ruby-core:72857] [Bug #11990]
-
-Thu Jan 14 20:01:00 2016 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/generic.rb (URI::Generic#to_s): change encoding to
- UTF-8 as Ruby 2.2/ by Koichi ITO <koic.ito@gmail.com>
- https://github.com/ruby/ruby/pull/1188 fix GH-1188
-
-Thu Jan 14 17:36:16 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_f_global_variables): add matched back references
- only, as well as defined? operator.
-
-Thu Jan 14 16:12:09 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): format exact number more exactly.
-
-Thu Jan 14 15:08:43 2016 Tony Arcieri <bascule@gmail.com>
-
- * Remove 512-bit DH group. It's affected by LogJam Attack.
- https://weakdh.org/
- [fix GH-1196][Bug #11968][ruby-core:72766]
-
-Thu Jan 14 11:44:29 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_f_global_variables): add $1..$9 only if $~ is
- set. fix the condition removed at r14014.
-
-Wed Jan 13 17:21:45 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * .travis.yml: removed commented-out code.
-
-Wed Jan 13 17:14:54 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * .travis.yml: removed osx code. follow up with r53517
-
-Wed Jan 13 16:56:19 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (rb_iseq_mark): mark parent iseq to prevent dynamically
- generated iseq by eval from GC. [ruby-core:72620] [Bug #11928]
-
-Wed Jan 13 03:42:58 2016 Eric Wong <e@80x24.org>
-
- * class.c (Init_class_hierarchy): resolve name for rb_cObject ASAP
- * object.c (rb_mod_const_set): move name resolution to rb_const_set
- * variable.c (rb_const_set): do class resolution here
- [ruby-core:72807] [Bug #11977]
-
-Wed Jan 13 00:37:12 2016 Satoshi Ohmori <sachin21dev@gmail.com>
-
- * man/ruby.1: fix double word typo. [Fix GH-1194]
-
-Tue Jan 12 21:01:09 2016 Benoit Daloze <eregontp@gmail.com>
-
- * common.mk: update URL and name for the Ruby spec suite.
-
-Tue Jan 12 19:52:19 2016 sorah (Shota Fukumori) <her@sorah.jp>
-
- * lib/forwardable.rb: Convert given accessors to String.
-
- r53381 changed to accept only Symbol or String for accessors, but
- there are several rubygems that pass classes (e.g. Array,
- Hash, ...) as accessors. Prior r53381, it was accepted because Class#to_s
- returns its class name. After r53381 given accessors are checked
- with define_method, but it accepts only Symbol or String, otherwise
- raises TypeError.
-
- def_delegator Foo, :some_method
-
- This change is to revert unexpected incompatibility. But this behavior
- may change in the future.
-
-Mon Jan 12 18:41:41 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * string.c: made a variable name more grammatically correct
-
-Mon Jan 12 18:34:34 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * string.c: minor grammar fix [ci skip]
-
-Mon Jan 12 16:09:09 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * test/ruby/enc/test_casing_options.rb: Tests for option
- parsing/checking for upcase/downcase/capitalize/swapcase
- (see r53503; with Kimihito Matsui)
-
-Mon Jan 12 16:03:03 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * string.c: Added option parsing/checking for upcase/downcase/
- capitalize/swapcase (with Kimihito Matsui)
-
-Mon Jan 11 21:28:28 2016 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * include/ruby/oniguruma.h: Added flags needed for upcase/downcase
- Unicode addition (with Kimihito Matsui)
-
-Mon Jan 11 09:50:24 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check if the API version number is consistent with
- the program version number.
-
-Sun Jan 10 20:57:25 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (compile_massign_lhs): when index ends with splat,
- append rhs value to it like POSTARG, since VM_CALL_ARGS_SPLAT
- splats the last argument only. [ruby-core:72777] [Bug #11970]
-
-Sun Jan 10 15:45:10 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/missing.h (explicit_bzero_by_memset_s): remove
- inline implementation by memset_s, which needs a macro before
- including headers and can cause problems in extension libraries
- by the order of the macro and headers.
-
-Sun Jan 10 13:41:36 2016 Eric Wong <e@80x24.org>
-
- * io.c (rb_deferr): remove long obsolete global
-
-Sun Jan 10 09:14:42 2016 Eric Wong <e@80x24.org>
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb (visit_String):
- eliminate chomp
- * lib/net/http.rb (connect): eliminate delete
- * lib/net/http/header.rb (basic_encode): ditto
- * lib/net/imap.rb (authenticate): eliminate gsub
- (self.encode_utf7): shorten delete arg
- * lib/net/smtp.rb (base64_encode): eliminate gsub
- * lib/open-uri.rb (OpenURI.open_http): eliminate delete
- * lib/rss/rss.rb: ditto
- * lib/securerandom.rb (base64): ditto
- (urlsafe_base64): eliminate delete!
- * lib/webrick/httpauth/digestauth.rb (split_param_value):
- eliminate chop
- * lib/webrick/httpproxy.rb (do_CONNECT): eliminate delete
- (setup_upstream_proxy_authentication): ditto
- [ruby-core:72666] [Feature #11938]
-
-Sat Jan 9 23:19:14 2016 Kuniaki IGARASHI <igaiga@gmail.com>
-
- * test/ruby/test_hash.rb (test_try_convert): Add test for
- Hash.try_convert. [Fix GH-1190]
-
-Sat Jan 9 23:15:25 2016 Jon Moss <maclover7@users.noreply.github.com>
-
- * ext/openssl/ossl.c: Add missing variables to documentation
- examples. [Fix GH-1189]
-
-Sat Jan 9 18:25:57 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * symbol.h (is_attrset_id): ASET is an attrset ID. fix
- unexpected safe call instead of an ordinary ASET.
-
-Sat Jan 9 10:44:33 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, win32/setup.mak: extract RUBY_PROGRAM_VERSION from
- RUBY_VERSION in version.h instead of RUBY_API_VERSION numbers in
- include/ruby/version.h, and cut it into version numbers.
-
-Sat Jan 9 07:13:33 2016 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: rename PAGE_* to HEAP_PAGE_* because PAGE_SIZE is used
- in Mac OS X.
-
- * test/ruby/test_gc.rb: catch up this fix.
-
-Sat Jan 9 05:45:40 2016 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: PAGE_BITMAP_PLANES (the number of bitmap) is 4, not 3.
-
-Sat Jan 9 05:42:57 2016 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: rename constant names HEAP_* to PAGE_*.
-
- Keys of GC::INTERNAL_CONSTANTS are also renamed.
-
- * test/ruby/test_gc.rb: catch up this fix.
-
-Fri Jan 8 22:30:06 2016 Akinori MUSHA <knu@iDaemons.org>
-
- * doc/regexp.rdoc: [DOC] Elaborate on the \G anchor. [ci skip]
-
-Fri Jan 8 19:49:27 2016 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: remove heap_page::body. Instead of this field,
- heap_page::start field works well.
-
-Fri Jan 8 19:31:52 2016 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: rename rb_heap_t::page_length to rb_heap_t::total_pages.
-
- `page_length' is not clear (we may understand with length of
- a page).
-
-Fri Jan 8 17:07:14 2016 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: remove heap_page::heap. This field is only used to recognize
- whether a page is in a tomb or not. Instead of this field,
- heap_page::flags::in_tomb (1 bit field) is added.
-
- Also type of heap_page::(total|free|final)_slots are changed from
- int to short. 2B is enough for them.
-
-Fri Jan 8 09:33:59 2016 Shugo Maeda <shugo@ruby-lang.org>
-
- * iseq.c (rb_iseq_compile_with_option): move variable initialization
- code to avoid maybe-uninitialized warnings by gcc 4.8.
-
-Fri Jan 8 00:03:22 2016 Shugo Maeda <shugo@ruby-lang.org>
-
- * enum.c (enum_min, enum_max): do the same optimization as r53454.
-
-Thu Jan 7 22:32:21 2016 Kenta Murata <mrkn@mrkn.jp>
-
- * ruby.h: undef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P
- and HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P on C++.
- [ruby-core:72736] [Bug #11962]
-
-Thu Jan 7 22:02:21 2016 Shugo Maeda <shugo@ruby-lang.org>
-
- * enum.c (enum_minmax): optimize object comparison in
- Enumerable#minmax.
-
-Thu Jan 7 14:49:12 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_pending_interrupt_p): no pending interrupt
- before initialization.
-
- * thread.c (thread_raise_m, rb_thread_kill): uninitialized thread
- cannot interrupt. [ruby-core:72732] [Bug #11959]
-
-Thu Jan 7 11:34:14 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/backward.h (ruby_show_copyright_to_die): for source
- code backward compatibility.
-
- * ruby.c (process_options): return Qtrue to exit the process
- successfully.
-
- * version.c (ruby_show_copyright): no longer exit.
-
-Wed Jan 6 17:22:53 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#order!): add `into` optional
- keyword argument to store the results. [Feature #11191]
-
-Tue Jan 5 21:44:37 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * ChangeLog: fix wrong class name.
-
-Tue Jan 5 21:43:50 2016 Kuniaki IGARASHI <igaiga@gmail.com>
-
- * test/ruby/test_string.rb(test_chr): added test for String#chr
- [fix GH-1179]
-
-Tue Jan 5 21:32:26 2016 Kuniaki IGARASHI <igaiga@gmail.com>
-
- * test/ruby/test_numeric.rb (test_nonzero_p): added test for Numeric#nonzero?
- [fix GH-1187]
-
-Tue Jan 5 11:47:23 2016 Damir Gaynetdinov <damir.gaynetdinov@gmail.com>
-
- * doc/marshal.rdoc: Clarify object references example, that the
- reference is same object. [Fix GH-1156]
-
-Tue Jan 5 05:06:51 2016 Eric Wong <e@80x24.org>
-
- * ext/stringio/stringio.c (strio_binmode): implement to set encoding
- * test/stringio/test_stringio.rb (test_binmode): new test
- [ruby-core:72699] [Bug #11945]
-
-Mon Jan 4 15:44:37 2016 Sho Hashimoto <sho-h@ruby-lang.org>
-
- * variable.c (rb_mod_deprecate_constant): [DOC] added
- documentation for Module#deprecate_constant. [ci skip]
-
-Mon Jan 4 15:36:38 2016 Sho Hashimoto <sho-h@ruby-lang.org>
-
- * thread_sync.c: [DOC] remove SizedQueue#close argument.
- [ci skip]
-
-Mon Jan 4 10:14:24 2016 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * test/coverage/test_coverage.rb: ignored test when enabled to coverage.
- It lead to crash with `make test-all`.
-
-Mon Jan 4 08:10:44 2016 Yuichiro Kaneko <yui-knk@ruby-lang.org>
-
- * insns.def (opt_case_dispatch): Move a comment to the
- appropriate position.
- [ci skip]
-
-Sun Jan 3 23:55:13 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems/security.rb (DIGEST_ALGORITHM, KEY_ALGORITHM):
- should check same name as the used constants.
- [ruby-core:72674] [Bug #11940]
-
-Sun Jan 3 19:22:01 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * aclocal.m4: add fallback file for non-aclocal environments.
- [ruby-core:72683] [Bug #11942]
-
-Sun Jan 3 13:56:49 2016 Yuichiro Kaneko <yui-knk@ruby-lang.org>
-
- * eval_error.c (rb_print_undef): Use `rb_method_visibility_t`
- instead of `int`.
- * eval_intern.h (rb_print_undef): ditto
- * proc.c (mnew_internal): ditto
- * vm_method.c (rb_export_method): ditto
- [Misc #11649] [ruby-core:71311] [fix GH-1078]
-
-Sun Jan 3 12:12:09 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * acinclude.m4: rename aclocal.m4, which should be generated by
- aclocal. [ruby-core:72675] [Bug #11941]
-
-Sat Jan 2 21:07:55 2016 Eric Wong <e@80x24.org>
-
- * thread_sync.c (queue_do_pop): avoid cast with Qfalse
- (rb_szqueue_push): ditto, use queue_sleep wrapper
-
-Sat Jan 2 16:16:14 2016 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/erb.rb: Allow ERB subclass to add token easily.
- [Feature #11936]
-
- * test/erb/test_erb.rb: ditto.
-
-Sat Jan 2 14:44:31 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (regexp): set_yylval_num sets u1, should use nd_tag
- instead of nd_state. [ruby-core:72638] [Bug #11932]
-
-Sat Jan 2 02:27:22 2016 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/ostruct.rb: Fix case of frozen object with initializer.
- Bug revealed by RubySpec [ruby-core:72639]
-
-Fri Jan 1 22:01:52 2016 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: mention CSV's liberal_parsing option.
-
-Fri Jan 1 19:38:23 2016 okkez <okkez000@gmail.com>
-
- * doc/NEWS-2.3.0: fix double words typo.
- [ci skip][fix GH-1183]
-
-Fri Jan 1 15:28:56 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (remove_unreachable_chunk): decrease count of
- call_info in removed instructions. fix up r53402.
-
-Fri Jan 1 12:05:53 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (remove_unreachable_chunk): remove unreferred label
- to optimize away unreachable chunk.
-
-Fri Jan 1 11:42:57 2016 James Edward Gray II <james@graysoftinc.com>
-
- * lib/csv.rb (CSV): Add a liberal_parsing option.
- Patch by Braden Anderson. [#11839]
- * test/csv/test_features.rb: test liberal_parsing
-
-Fri Jan 1 10:27:28 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/mkconfig.rb (RbConfig): prefix SDKROOT to oldincludedir
- not includedir, the latter is outside the ruby installation.
- [ruby-core:72496] [Bug #11881]
-
-Fri Jan 1 08:53:02 2016 Yuki Kurihara <co000ri@gmail.com>
-
- * test/ruby/test_lazy_enumerator.rb (test_take_bad_arg): Add test
- code in case of Enumerator::Lazy#take called with negative number.
- [ruby-dev:49467] [Bug #11933]
-
-Fri Jan 1 05:06:20 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_here_document): update indent for each line in
- indented here document with single-quotes.
- [ruby-core:72479] [Bug #11871]
-
-Fri Jan 1 03:26:44 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/ostruct.rb (freeze): define deferred accessors before
- freezing to get rid of an error when just reading frozen
- OpenStruct.
-
-Thu Dec 31 14:36:45 2015 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/ostruct.rb: Fix new_ostruct_member to correctly avoid
- redefinition [#11901]
-
-Thu Dec 31 02:45:12 2015 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/ruby/test_module.rb (test_classpath): r53376 may change
- the order of m.constants.
- `make TESTS='-v ruby/test_class.rb ruby/test_module.rb' test-all`
- may fail after that.
- http://rubyci.s3.amazonaws.com/tk2-243-31075/ruby-trunk/log/20151230T164202Z.log.html.gz
-
-Thu Dec 31 02:20:00 2015 Benoit Daloze <eregontp@gmail.com>
-
- * common.mk (help): Fix typo.
-
-Wed Dec 30 20:53:09 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * lib/net/http/responses.rb: Added new response class for 451 status code.
- * lib/net/http.rb: documentation for HTTPUnavailableForLegalReasons
-
-Wed Dec 30 20:45:45 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * lib/webrick/httpstatus.rb: Added HTTP 451 Status Code.
- [fix GH-1167] Patch by @MuhammetDilmac
- https://tools.ietf.org/html/draft-tbray-http-legally-restricted-status-00
-
-Wed Dec 30 20:25:52 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * doc/syntax/calling_methods.rdoc: fix old operator for safe navigation
- operator. [ci skip][fix GH-1182] Patch by @dougo
-
-Wed Dec 30 16:43:23 2015 Kuniaki IGARASHI <igaiga@gmail.com>
-
- * test/ruby/test_string.rb (test_ord): Add test for String#ord.
- [Fix GH-1181]
-
-Wed Dec 30 11:28:57 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/forwardable.rb (def_instance_delegator): adjust backtrace of
- method body by tail call optimization. adjusting the delegated
- target is still done by deleting backtrace.
-
- * lib/forwardable.rb (def_single_delegator): ditto.
-
-Wed Dec 30 11:18:42 2015 Elliot Winkler <elliot.winkler@gmail.com>
-
- * lib/forwardable.rb (def_instance_delegator) fix delegating to
- 'args' and 'block', clashing with local variables in generated
- methods. [ruby-core:72579] [Bug #11916]
-
- * lib/forwardable.rb (def_single_delegator): ditto.
-
-Wed Dec 30 09:58:56 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (rb_class_inherited_p): search the corresponding
- ancestor to prepended module from prepending class itself.
- [ruby-core:72493] [Bug #11878]
-
-Wed Dec 30 09:20:00 2015 Yuki Kurihara <co000ri@gmail.com>
-
- * test/stringio/test_io.rb (test_flag): add assertion for error when
- text and binary mode are mixed.
- [ruby-dev:49465] [Feature #11921]
-
-Wed Dec 30 08:43:59 2015 Yuki Kurihara <co000ri@gmail.com>
-
- * test/stringio/test_stringio.rb (test_initialize): add test for
- StringIO#initialize. [ruby-core:72585] [Feature #11920]
-
-Wed Dec 30 05:19:24 2015 Eric Wong <e@80x24.org>
-
- * class.c (struct clone_const_arg): adjust for id_table
- (clone_const): ditto
- (clone_const_i): ditto
- (rb_mod_init_copy): ditto
- (rb_singleton_class_clone_and_attach): ditto
- (rb_include_class_new): ditto
- (include_modules_at): ditto
- * constant.h (rb_free_const_table): ditto
- * gc.c (free_const_entry_i): ditto
- (rb_free_const_table): ditto
- (obj_memsize_of): ditto
- (mark_const_entry_i): ditto
- (mark_const_tbl): ditto
- * internal.h (struct rb_classext_struct): ditto
- * object.c (rb_mod_const_set): resolve class name on assignment
- * variable.c (const_update): replace with const_tbl_update
- (const_tbl_update): new function
- (fc_i): adjust for id_table
- (find_class_path): ditto
- (autoload_const_set): st_update => const_tbl_update
- (rb_const_remove): adjust for id_table
- (sv_i): ditto
- (rb_local_constants_i): ditto
- (rb_local_constants): ditto
- (rb_mod_const_at): ditto
- (rb_mod_const_set): ditto
- (rb_const_lookup): ditto
- [ruby-core:72112] [Feature #11614]
-
-Wed Dec 30 04:10:13 2015 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
-
- * thread_pthread.c (rb_thread_create_timer_thread): destroy attr even
- if pthread_create() failed.
-
-Wed Dec 30 02:55:09 2015 Eric Wong <e@80x24.org>
-
- * thread_pthread.c (setup_communication_pipe): delay setting owner
- (rb_thread_create_timer_thread): until thread creation succeeds
- [ruby-core:72590] [Bug #11922]
-
-Tue Dec 29 19:12:46 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): -W command line option should be able to
- override -w in RUBYOPT environment variable.
-
-Tue Dec 29 17:54:16 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ignored_block): warn if a block is given to `using`,
- which is probably for `Module.new`.
-
-Tue Dec 29 12:48:34 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/ostruct.rb (OpenStruct): make respond_to? working on
- just-allocated objects for workaround of Psych.
- [ruby-core:72501] [Bug #11884]
-
-Tue Dec 29 10:35:00 2015 Kenta Murata <mrkn@mrkn.jp>
-
- * test/mkmf/test_have_func.rb (test_have_func):
- Add assertion to examine the existence of HAVE_RUBY_INIT.
-
- * test/mkmf/test_have_func.rb (test_not_have_func):
- Add assertion to examine the absence of HAVE_RUBY_INIT.
-
-Tue Dec 29 06:50:42 2015 Eric Wong <e@80x24.org>
-
- * thread_sync.c: static classes
-
-Tue Dec 29 05:30:30 2015 Eric Wong <e@80x24.org>
-
- * lib/resolv.rb (Resolv::IPv6.create): avoid modifying frozen
- * test/resolv/test_dns.rb (test_ipv6_create): test for above
- [Bug #11910] [ruby-core:72559]
-
-Mon Dec 28 14:55:57 2015 Kuniaki IGARASHI <igaiga@gmail.com>
-
- * test/ruby/test_string.rb (TestString#test_rstrip_bang): Add test
- for String#rstrip!. [Fix GH-1176]
-
-Mon Dec 28 09:18:53 2015 Kuniaki IGARASHI <igaiga@gmail.com>
-
- * test/ruby/test_string.rb (TestString#test_lstrip_bang): Add test
- for String#lstrip!. [Fix GH-1176]
-
-Sun Dec 27 23:32:26 2015 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_variant2val): refactoring.
-
-Sun Dec 27 21:14:42 2015 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (rb_execarg_parent_start1): need to convert the encoding to
- ospath's one.
-
-Sun Dec 27 20:54:22 2015 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c: use rb_w32_uchdir() instead of plain chdir() on Windows.
- reported by naruse via twitter.
-
- * process.c (rb_execarg_addopt): need to convert the encoding to
- ospath's one.
-
-Sun Dec 27 20:00:31 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * enc/x_emoji.h: fix dead-link.
-
-Sun Dec 27 19:55:55 2015 SHIBATA Hiroshi <hsbt@ruby-lang.org>
-
- * doc/NEWS-2.3.0: fix a typo.
-
-Sun Dec 27 18:08:15 2015 Kuniaki IGARASHI <igaiga@gmail.com>
-
- * string.c (rb_str_lstrip_bang, rb_str_rstrip_bang): [DOC] Fix
- ruby-doc comments for String#rstrip! and lstrip!. It looks like
- dropped bang. [Fix GH-1175]
-
-Sun Dec 27 15:14:20 2015 Eric Wong <e@80x24.org>
-
- * io.c (io_getpartial): remove unused kwarg from template
- * test/ruby/test_io.rb (test_readpartial_bad_args): new
- [Bug #11885]
-
-Sun Dec 27 11:50:53 2015 Kuniaki IGARASHI <igaiga@gmail.com>
-
- * test/ruby/test_string.rb (test_rstrip, test_lstrip): Add tests
- for String#lstrip and rstrip. The test cases are used from
- string.c ruby-doc comments. [Fix GH-1174]
-
-Sun Dec 27 11:47:46 2015 Kuniaki IGARASHI <igaiga@gmail.com>
-
- * test/ruby/test_string.rb (test_insert): Add test for
- String#insert. The test cases are written in string.c
- comments as a reference. [Fix GH-1173]
-
-Sun Dec 27 11:03:33 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (show_bitstack): trace stack_type value if yydebug.
-
-Sun Dec 27 10:03:14 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/depend (enc, trans): fix version dependency, shared object
- files depend on the RUBY_SO_NAME value for runtime link.
-
-Sun Dec 27 09:47:20 2015 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_vstr2wc, ole_variant2val): fix blank
- string conversion.
- [Bug #11880]
- Thanks Akio Tajima for the patch!
-
-Sun Dec 27 09:34:53 2015 craft4coder <yooobuntu@163.com>
-
- * doc/extension.rdoc: [DOC] `nul` should be uppercase.
- change 'nul' => 'NUL'. [Fix GH-1172]
-
-Sat Dec 26 18:29:01 2015 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/xmlrpc/client.rb: Support SSL options in async methods of
- XMLRPC::Client.
- [Bug #11489]
- Reported by Aleksandar Kostadinov. Thanks!!!
-
-Sat Dec 26 11:26:38 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * miniinit.c (Init_enc): add some common aliases of built-in
- encodings. [ruby-core:72481] [Bug #11872]
-
-Fri Dec 25 22:43:26 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: extract RUBY_RELEASE_DAY at generating Makefile.
-
- * version.h (RUBY_RELEASE_DATE): construct from RUBY_RELEASE_YEAR,
- RUBY_RELEASE_MONTH, and RUBY_RELEASE_DAY.
-
-Fri Dec 25 21:33:06 2015 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * version.h (RUBY_VERSION): 2.4.0 development has started.
-
-Fri Dec 25 14:12:12 2015 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * doc/ChangeLog-2.3.0, ext/tk/lib/tkextlib/SUPPORT_STATUS,
- include/ruby/version.h: minor grammar fixes [ci skip]
-
-Fri Dec 25 08:23:22 2015 Tadashi Saito <tadashi_saito@dwango.co.jp>
-
- * compile.c, cont.c, doc, man: fix common misspelling.
- [ruby-core:72466] [Bug #11870]
-
-
-For the changes before 2.3.0, see doc/ChangeLog-2.3.0
-For the changes before 2.2.0, see doc/ChangeLog-2.2.0
-For the changes before 2.1.0, see doc/ChangeLog-2.1.0
-For the changes before 2.0.0, see doc/ChangeLog-2.0.0
-For the changes before 1.9.3, see doc/ChangeLog-1.9.3
-For the changes before 1.8.0, see doc/ChangeLog-1.8.0
-
-Local variables:
-coding: us-ascii
-add-log-time-format: (lambda ()
- (let* ((time (current-time))
- (system-time-locale "C")
- (diff (+ (cadr time) 32400))
- (lo (% diff 65536))
- (hi (+ (car time) (/ diff 65536))))
- (format-time-string "%a %b %e %H:%M:%S %Y" (list hi lo) t)))
-indent-tabs-mode: t
-tab-width: 8
-change-log-indent-text: 2
-end:
-vim: tabstop=8 shiftwidth=2
diff --git a/LEGAL b/LEGAL
index 2607f0082a..2777aa2c14 100644
--- a/LEGAL
+++ b/LEGAL
@@ -1,116 +1,331 @@
-LEGAL NOTICE INFORMATION
-------------------------
+# -*- rdoc -*-
+
+= LEGAL NOTICE INFORMATION
+--------------------------
All the files in this distribution are covered under either the Ruby's
license (see the file COPYING) or public-domain except some files
mentioned below.
-ccan/build_assert/build_assert.h
-ccan/check_type/check_type.h
-ccan/container_of/container_of.h
-ccan/str/str.h
+[addr2line.c]
- These files are licensed under the CC0.
+ A part of this file is from FreeBSD.
- http://creativecommons.org/choose/zero/
+ >>>
+ Copyright (c) 1986, 1988, 1991, 1993::
+ The Regents of the University of California. All rights reserved.
-ccan/list/list.h
+ (c) UNIX System Laboratories, Inc.
- This file is licensed under the MIT License.
+ All or some portions of this file are derived from material licensed
+ to the University of California by American Telephone and Telegraph
+ Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ the permission of UNIX System Laboratories, Inc.
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 4. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
-
-include/ruby/oniguruma.h:
-regcomp.c:
-regenc.[ch]:
-regerror.c:
-regexec.c:
-regint.h:
-regparse.[ch]:
-enc/ascii.c
-enc/big5.c
-enc/cp949.c
-enc/emacs_mule.c
-enc/encdb.c
-enc/euc_jp.c
-enc/euc_kr.c
-enc/euc_tw.c
-enc/gb18030.c
-enc/gb2312.c
-enc/gbk.c
-enc/iso_8859_1.c
-enc/iso_8859_10.c
-enc/iso_8859_11.c
-enc/iso_8859_13.c
-enc/iso_8859_14.c
-enc/iso_8859_15.c
-enc/iso_8859_16.c
-enc/iso_8859_2.c
-enc/iso_8859_3.c
-enc/iso_8859_4.c
-enc/iso_8859_5.c
-enc/iso_8859_6.c
-enc/iso_8859_7.c
-enc/iso_8859_8.c
-enc/iso_8859_9.c
-enc/koi8_r.c
-enc/koi8_u.c
-enc/shift_jis.c
-enc/unicode.c
-enc/us_ascii.c
-enc/utf_16be.c
-enc/utf_16le.c
-enc/utf_32be.c
-enc/utf_32le.c
-enc/utf_8.c
-enc/windows_1251.c
-
-Oniguruma ---- (C) K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
-
-http://www.geocities.jp/kosako3/oniguruma/
-http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/oniguruma/
-http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/oniguruma/
-
- When this software is partly used or it is distributed with Ruby,
- this of Ruby follows the license of Ruby.
-
-configure:
+ @(#)subr_prf.c 8.3 (Berkeley) 1/21/94
+
+
+[ccan/build_assert/build_assert.h]
+[ccan/check_type/check_type.h]
+[ccan/container_of/container_of.h]
+[ccan/str/str.h]
+
+ These files are licensed under the {CC0}[https://creativecommons.org/choose/zero/].
+
+[ccan/list/list.h]
+
+ This file is licensed under the {MIT License}[rdoc-ref:@MIT+License].
+
+[coroutine]
+
+ Unless otherwise specified, these files are licensed under the
+ {MIT License}[rdoc-ref:@MIT+License].
+
+[include/ruby/onigmo.h]
+[include/ruby/oniguruma.h]
+[regcomp.c]
+[regenc.c]
+[regenc.h]
+[regerror.c]
+[regexec.c]
+[regint.h]
+[regparse.c]
+[regparse.h]
+[enc/ascii.c]
+[enc/big5.c]
+[enc/cp949.c]
+[enc/emacs_mule.c]
+[enc/encdb.c]
+[enc/euc_jp.c]
+[enc/euc_kr.c]
+[enc/euc_tw.c]
+[enc/gb18030.c]
+[enc/gb2312.c]
+[enc/gbk.c]
+[enc/iso_8859_1.c]
+[enc/iso_8859_10.c]
+[enc/iso_8859_11.c]
+[enc/iso_8859_13.c]
+[enc/iso_8859_14.c]
+[enc/iso_8859_15.c]
+[enc/iso_8859_16.c]
+[enc/iso_8859_2.c]
+[enc/iso_8859_3.c]
+[enc/iso_8859_4.c]
+[enc/iso_8859_5.c]
+[enc/iso_8859_6.c]
+[enc/iso_8859_7.c]
+[enc/iso_8859_8.c]
+[enc/iso_8859_9.c]
+[enc/koi8_r.c]
+[enc/koi8_u.c]
+[enc/shift_jis.c]
+[enc/unicode.c]
+[enc/us_ascii.c]
+[enc/utf_16be.c]
+[enc/utf_16le.c]
+[enc/utf_32be.c]
+[enc/utf_32le.c]
+[enc/utf_8.c]
+[enc/windows_1251.c]
+[enc/windows_31j.c]
+
+ Onigmo (Oniguruma-mod) LICENSE
+
+ >>>
+ Copyright (c) 2002-2009:: K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ Copyright (c) 2011-2014:: K.Takata <kentkt AT csc DOT jp>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+ Oniguruma LICENSE
+
+ >>>
+ Copyright (c) 2002-2009:: K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+ * https://github.com/k-takata/Onigmo/
+ * https://github.com/kkos/oniguruma
+ * https://svnweb.freebsd.org/ports/head/devel/oniguruma/
+
+ When this software is partly used or it is distributed with Ruby,
+ this of Ruby follows the license of Ruby.
+
+[enc/windows_1250.c]
+[enc/windows_1252.c]
+
+ >>>
+ Copyright (c) 2006-2007:: Byte <byte AT mail DOT kna DOT ru>
+ K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+[enc/cesu_8.c]
+[enc/windows_1253.c]
+[enc/windows_1254.c]
+[enc/windows_1257.c]
+
+ >>>
+ Copyright (c) 2002-2007:: K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+[enc/trans/GB/GB12345%UCS.src]
+[enc/trans/GB/UCS%GB12345.src]
+[enc/trans/GB/GB2312%UCS.src]
+[enc/trans/GB/UCS%GB2312.src]
+
+ These files have this explanatory texts.
+
+ >>>
+ This mapping data was created from files provided by Unicode, Inc.
+ (The Unicode Consortium). The files were used to create a product supporting
+ Unicode, as explicitly permitted in the files' copyright notices.
+ Please note that Unicode, Inc. never made any claims as to fitness of these
+ files for any particular purpose, and has ceased to publish the files many
+ years ago.
+
+[enc/trans/JIS/JISX0201-KANA%UCS.src]
+[enc/trans/JIS/JISX0208\@1990%UCS.src]
+[enc/trans/JIS/JISX0212%UCS.src]
+[enc/trans/JIS/UCS%JISX0201-KANA.src]
+[enc/trans/JIS/UCS%JISX0208@1990.src]
+[enc/trans/JIS/UCS%JISX0212.src]
+
+ These files are copyrighted as the following.
+
+ >>>
+ © 2015 Unicode®, Inc.
+
+ For terms of use, see http://www.unicode.org/terms_of_use.html
+
+[enc/trans/JIS/JISX0213-1%UCS@BMP.src]
+[enc/trans/JIS/JISX0213-1%UCS@SIP.src]
+[enc/trans/JIS/JISX0213-2%UCS@BMP.src]
+[enc/trans/JIS/JISX0213-2%UCS@SIP.src]
+
+ These files are copyrighted as the following.
+
+ >>>
+ Copyright (C) 2001:: earthian@tama.or.jp, All Rights Reserved.
+ Copyright (C) 2001:: I'O, All Rights Reserved.
+ Copyright (C) 2006:: Project X0213, All Rights Reserved.
+ You can use, modify, distribute this table freely.
+
+[enc/trans/JIS/UCS@BMP%JISX0213-1.src]
+[enc/trans/JIS/UCS@BMP%JISX0213-2.src]
+[enc/trans/JIS/UCS@SIP%JISX0213-1.src]
+[enc/trans/JIS/UCS@SIP%JISX0213-2.src]
+
+ These files are copyrighted as the following.
+
+ >>>
+ Copyright (C) 2001:: earthian@tama.or.jp, All Rights Reserved.
+ Copyright (C) 2001:: I'O, All Rights Reserved.
+ You can use, modify, distribute this table freely.
+
+[enc/trans/ucm/glibc-BIG5-2.3.3.ucm]
+[enc/trans/ucm/glibc-BIG5HKSCS-2.3.3.ucm]
+
+ >>>
+ Copyright (C) 2001-2005:: International Business Machines
+ Corporation and others. All Rights Reserved.
+
+[enc/trans/ucm/windows-950-2000.ucm]
+[enc/trans/ucm/windows-950_hkscs-2001.ucm]
+
+ >>>
+ Copyright (C) 2001-2002:: International Business Machines
+ Corporation and others. All Rights Reserved.
+
+
+[configure]
This file is free software.
- Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+ >>>
+ Copyright (C) 1992-1996, 1998-2012:: Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
-tool/config.guess:
-tool/config.sub:
+[tool/config.guess]
+[tool/config.sub]
As long as you distribute these files with the file configure, they
are covered under the Ruby's license.
- Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
- Free Software Foundation, Inc.
+ >>>
+ Copyright 1992-2018:: Free Software Foundation, Inc.
This file is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful, but
@@ -119,54 +334,85 @@ tool/config.sub:
General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ along with this program; if not, see <https://www.gnu.org/licenses/>.
As a special exception to the GNU General Public License, if you
distribute this file as part of a program that contains a
configuration script generated by Autoconf, you may include it under
- the same distribution terms that you use for the rest of that program.
-
-parse.c:
-
- This file is licensed under the GPL, but is incorporated into Ruby and
+ the same distribution terms that you use for the rest of that
+ program. This Exception is an additional permission under section 7
+ of the GNU General Public License, version 3 ("GPLv3").
+
+[tool/lib/test/*]
+[tool/lib/core_assertions.rb]
+
+ Some of methods on these files are based on MiniTest 4. MiniTest 4 is
+ distributed under the MIT License.
+
+ >>>
+ Copyright (c) Ryan Davis, seattle.rb
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ 'Software'), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+[parse.c]
+[parse.h]
+
+ These files are licensed under the GPL, but are incorporated into Ruby and
redistributed under the terms of the Ruby license, as permitted by the
exception to the GPL below.
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
+ >>>
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018:: Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
- /* As a special exception, you may create a larger work that contains
- part or all of the Bison parser skeleton and distribute that work
- under terms of your choice, so long as that work isn't itself a
- parser generator using the skeleton or a modified version thereof
- as a parser skeleton. Alternatively, if you modify or redistribute
- the parser skeleton itself, you may (at your option) remove this
- special exception, which will cause the skeleton and the resulting
- Bison output files to be licensed under the GNU General Public
- License without this special exception.
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison.
- This special exception was added by the Free Software Foundation in
- version 2.2 of Bison. */
+[missing/dtoa.c]
-util.c (partly):
+ This file is under these licenses.
- Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
+ >>>
+ Copyright (c) 1991, 2000, 2001:: by Lucent Technologies.
Permission to use, copy, modify, and distribute this software for any
purpose without fee is hereby granted, provided that this entire notice
@@ -179,71 +425,74 @@ util.c (partly):
REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
-win32/win32.[ch]:
+ >>>
+ Copyright (c) 2004-2008:: David Schultz <das@FreeBSD.ORG>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+[win32/win32.c]
+[include/ruby/win32.h]
You can apply the Artistic License to these files. (or GPL,
alternatively)
- Copyright (c) 1993, Intergraph Corporation
+ >>>
+ Copyright (c) 1993:: Intergraph Corporation
You may distribute under the terms of either the GNU General Public
License or the Artistic License, as specified in the perl README file.
-util.c (partly):
-
- Copyright (c) 2004-2008 David Schultz <das@FreeBSD.ORG>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
-random.c
+[missing/mt19937.c]
This file is under the new-style BSD license.
- A C-program for MT19937, with initialization improved 2002/2/10.
+ >>>
+ A C-program for MT19937, with initialization improved 2002/2/10.::
Coded by Takuji Nishimura and Makoto Matsumoto.
+
This is a faster version by taking Shawn Cokus's optimization,
Matthe Bellew's simplification, Isaku Wada's real version.
Before using, initialize the state by using init_genrand(seed)
or init_by_array(init_key, key_length).
- Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
- All rights reserved.
+ Copyright (C) 1997 - 2002:: Makoto Matsumoto and Takuji Nishimura,
+ All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
- 3. The names of its contributors may not be used to endorse or promote
- products derived from this software without specific prior written
- permission.
+ 3. The names of its contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@@ -262,12 +511,15 @@ random.c
http://www.math.keio.ac.jp/matumoto/emt.html
email: matumoto@math.keio.ac.jp
-vm_dump.c:procstat_vm
+ The Wayback Machine url: http://web.archive.org/web/19990429082237/http://www.math.keio.ac.jp/matumoto/emt.html
+
+[missing/procstat_vm.c]
This file is under the new-style BSD license.
- Copyright (c) 2007 Robert N. M. Watson
- All rights reserved.
+ >>>
+ Copyright (c) 2007:: Robert N. M. Watson
+ All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -292,181 +544,98 @@ vm_dump.c:procstat_vm
$FreeBSD: head/usr.bin/procstat/procstat_vm.c 261780 2014-02-11 21:57:37Z jhb $
-vsnprintf.c:
+[vsnprintf.c]
- This file is under the old-style BSD license. Note that the
- paragraph 3 below is now null and void.
+ This file is under the {old-style BSD license}[rdoc-ref:@Old-style+BSD+license].
- Copyright (c) 1990, 1993
- The Regents of the University of California. All rights reserved.
+ >>>
+ Copyright (c) 1990, 1993::
+ The Regents of the University of California. All rights reserved.
This code is derived from software contributed to Berkeley by
Chris Torek.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- IMPORTANT NOTE:
- --------------
- From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
- paragraph 3 above is now null and void.
-
-st.[ch]:
-missing/alloca.c:
-missing/dup2.c:
-missing/erf.c:
-missing/finite.c:
-missing/hypot.c:
-missing/isinf.c:
-missing/isnan.c:
-missing/lgamma_r.c:
-missing/memcmp.c:
-missing/memmove.c:
-missing/strchr.c:
-missing/strstr.c:
-missing/strtol.c:
-missing/tgamma.c:
-ext/digest/sha1/sha1.[ch]:
+[st.c]
+[strftime.c]
+[include/ruby/st.h]
+[missing/acosh.c]
+[missing/alloca.c]
+[missing/erf.c]
+[missing/hypot.c]
+[missing/lgamma_r.c]
+[missing/memcmp.c]
+[missing/memmove.c]
+[missing/strchr.c]
+[missing/strerror.c]
+[missing/strstr.c]
+[missing/tgamma.c]
+[ext/date/date_strftime.c]
+[ext/digest/sha1/sha1.c]
+[ext/digest/sha1/sha1.h]
These files are all under public domain.
-missing/crypt.c:
+[missing/crypt.c]
- This file is under the old-style BSD license. Note that the
- paragraph 3 below is now null and void.
+ This file is under the {old-style BSD license}[rdoc-ref:@Old-style+BSD+license].
- Copyright (c) 1989, 1993
- The Regents of the University of California. All rights reserved.
+ >>>
+ Copyright (c) 1989, 1993::
+ The Regents of the University of California. All rights reserved.
This code is derived from software contributed to Berkeley by
Tom Truscott.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
-missing/setproctitle.c
+[missing/setproctitle.c]
- This file is under the old-style BSD license. Note that the
- paragraph 3 below is now null and void.
+ This file is under the {old-style BSD license}[rdoc-ref:@Old-style+BSD+license].
- Copyright 2003 Damien Miller
- Copyright (c) 1983, 1995-1997 Eric P. Allman
- Copyright (c) 1988, 1993
- The Regents of the University of California. All rights reserved.
+ >>>
+ Copyright 2003:: Damien Miller
+ Copyright (c) 1983, 1995-1997:: Eric P. Allman
+ Copyright (c) 1988, 1993::
+ The Regents of the University of California. All rights reserved.
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
+[missing/strlcat.c]
+[missing/strlcpy.c]
- THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
+ These files are under an ISC-style license.
-missing/strlcat.c
-missing/strlcpy.c
-
- These files are under the new-style BSD license.
+ >>>
+ Copyright (c) 1998, 2015:: Todd C. Miller <Todd.Miller@courtesan.com>
- Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
+ Permission to use, copy, modify, and distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-missing/langinfo.c
+[missing/langinfo.c]
This file is from http://www.cl.cam.ac.uk/~mgk25/ucs/langinfo.c.
Ruby uses a modified version. The file contains the following
author/copyright notice:
- Markus.Kuhn@cl.cam.ac.uk -- 2002-03-11
- Permission to use, copy, modify, and distribute this software
- for any purpose and without fee is hereby granted. The author
- disclaims all warranties with regard to this software.
+ >>>
+ Markus.Kuhn@cl.cam.ac.uk -- 2002-03-11::
+ Permission to use, copy, modify, and distribute this software
+ for any purpose and without fee is hereby granted. The author
+ disclaims all warranties with regard to this software.
-ext/digest/md5/md5.[ch]:
+[ext/digest/md5/md5.c]
+[ext/digest/md5/md5.h]
These files are under the following license. Ruby uses modified
versions of them.
- Copyright (C) 1999, 2000 Aladdin Enterprises. All rights reserved.
+ >>>
+ Copyright (C) 1999, 2000:: Aladdin Enterprises. All rights reserved.
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -487,23 +656,27 @@ ext/digest/md5/md5.[ch]:
L. Peter Deutsch
ghost@aladdin.com
-ext/digest/rmd160/rmd160.[ch]:
+[ext/digest/rmd160/rmd160.c]
+[ext/digest/rmd160/rmd160.h]
These files have the following copyright information, and by the
author we are allowed to use it under the new-style BSD license.
- AUTHOR: Antoon Bosselaers, ESAT-COSIC
+ >>>
+ AUTHOR:: Antoon Bosselaers, ESAT-COSIC
(Arranged for libc by Todd C. Miller)
- DATE: 1 March 1996
+ DATE:: 1 March 1996
- Copyright (c) Katholieke Universiteit Leuven
+ Copyright (c):: Katholieke Universiteit Leuven
1996, All Rights Reserved
-ext/digest/sha2/sha2.[ch]:
+[ext/digest/sha2/sha2.c]
+[ext/digest/sha2/sha2.h]
These files are under the new-style BSD license.
- Copyright 2000 Aaron D. Gifford. All rights reserved.
+ >>>
+ Copyright 2000:: Aaron D. Gifford. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -529,29 +702,71 @@ ext/digest/sha2/sha2.[ch]:
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
-ext/nkf/nkf-utf8/config.h:
-ext/nkf/nkf-utf8/nkf.c:
-ext/nkf/nkf-utf8/utf8tbl.c:
+[ext/json/vendor/fpconv.c]
+
+ This file is under the {Boost Software License}[rdoc-ref:@Boost+Software+License+1.0].
+
+[ext/json/vendor/jeaiii-ltoa.h]
+
+ >>>
+ Copyright (c) 2024,2025 Enrico Thierbach - https://github.com/radiospiel
+ Copyright (c) 2022 James Edward Anhalt III - https://github.com/jeaiii/itoa
+
+ {MIT License}[rdoc-ref:@MIT+License]
+
+[ext/json/vendor/ryu.h]
+ This file is adapted from the Ryu algorithm by Ulf Adams https://github.com/ulfjack/ryu.
+ It is dual-licensed under {Apache License 2.0}[rdoc-ref:@Apache+License+2.0] OR
+ {Boost Software License 1.0}[rdoc-ref:@Boost+Software+License+1.0].
+
+[ext/psych]
+[test/psych]
+
+ The files under these directories are under the following license.
+
+ >>>
+ Copyright 2009:: Aaron Patterson, et al.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
+ this software and associated documentation files (the 'Software'), to deal in
+ the Software without restriction, including without limitation the rights to
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is furnished to do
+ so, subject to the following conditions:
- These files are under the following license. So to speak, it is
- copyrighted semi-public-domain software.
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
- Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA)
- Everyone is permitted to do anything on this program
- including copying, modifying, improving,
- as long as you don't try to pretend that you wrote it.
- i.e., the above copyright notice has to appear in all copies.
- Binary distribution requires original version messages.
- You don't have to ask before copying, redistribution or publishing.
- THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE.
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+[ext/pty/pty.c]
+
+ >>>
+ C) Copyright 1998:: by Akinori Ito.
-ext/socket/addrinfo.h:
-ext/socket/getaddrinfo.c:
-ext/socket/getnameinfo.c:
+ This software may be redistributed freely for this purpose, in full
+ or in part, provided that this entire copyright notice is included
+ on any copies of this software and applications and derivations thereof.
+
+ This software is provided on an "as is" basis, without warranty of any
+ kind, either expressed or implied, as to any matter including, but not
+ limited to warranty of fitness of purpose, or merchantability, or
+ results obtained from use of this software.
+
+[ext/socket/addrinfo.h]
+[ext/socket/getaddrinfo.c]
+[ext/socket/getnameinfo.c]
These files are under the new-style BSD license.
- Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
+ >>>
+ Copyright (C) 1995, 1996, 1997, 1998, and 1999:: WIDE Project.
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -578,17 +793,508 @@ ext/socket/getnameinfo.c:
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
-ext/win32ole/win32ole.c:
+[ext/win32ole/win32ole.c]
You can apply the Artistic License to this file. (or GPL,
alternatively)
- (c) 1995 Microsoft Corporation. All rights reserved.
+ >>>
+ (c) 1995:: Microsoft Corporation. All rights reserved.
Developed by ActiveWare Internet Corp., http://www.ActiveWare.com
- Other modifications Copyright (c) 1997, 1998 by Gurusamy Sarathy
+ Other modifications Copyright (c) 1997, 1998:: by Gurusamy Sarathy
<gsar@umich.edu> and Jan Dubois <jan.dubois@ibm.net>
You may distribute under the terms of either the GNU General Public
License or the Artistic License, as specified in the README file
of the Perl distribution.
+
+ The Wayback Machine url: http://web.archive.org/web/19970607104352/http://www.activeware.com:80/
+
+[lib/rdoc/generator/template/darkfish/css/fonts.css]
+
+ This file is licensed under the {SIL Open Font License}[http://scripts.sil.org/OFL].
+
+[spec/mspec]
+[spec/ruby]
+
+ The files under these directories are under the following license.
+
+ >>>
+ Copyright (c) 2008:: Engine Yard, Inc. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
+[lib/rubygems.rb]
+[lib/rubygems]
+[test/rubygems]
+
+ RubyGems is under the following license.
+
+ >>>
+ RubyGems is copyrighted free software by Chad Fowler, Rich Kilmer, Jim
+ Weirich and others. You can redistribute it and/or modify it under
+ either the terms of the {MIT license}[rdoc-ref:@MIT+License], or the conditions
+ below:
+
+ 1. You may make and give away verbatim copies of the source form of the
+ software without restriction, provided that you duplicate all of the
+ original copyright notices and associated disclaimers.
+
+ 2. You may modify your copy of the software in any way, provided that
+ you do at least ONE of the following:
+
+ a. place your modifications in the Public Domain or otherwise
+ make them Freely Available, such as by posting said
+ modifications to Usenet or an equivalent medium, or by allowing
+ the author to include your modifications in the software.
+
+ b. use the modified software only within your corporation or
+ organization.
+
+ c. give non-standard executables non-standard names, with
+ instructions on where to get the original software distribution.
+
+ d. make other distribution arrangements with the author.
+
+ 3. You may distribute the software in object code or executable
+ form, provided that you do at least ONE of the following:
+
+ a. distribute the executables and library files of the software,
+ together with instructions (in the manual page or equivalent)
+ on where to get the original distribution.
+
+ b. accompany the distribution with the machine-readable source of
+ the software.
+
+ c. give non-standard executables non-standard names, with
+ instructions on where to get the original software distribution.
+
+ d. make other distribution arrangements with the author.
+
+ 4. You may modify and include the part of the software into any other
+ software (possibly commercial).
+
+ 5. The scripts and library files supplied as input to or produced as
+ output from the software do not automatically fall under the
+ copyright of the software, but belong to whomever generated them,
+ and may be sold commercially, and may be aggregated with this
+ software.
+
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.
+
+[lib/bundler]
+[lib/bundler.rb]
+[spec/bundler]
+
+ Bundler is under the following license.
+
+ >>>
+ Portions copyright (c) 2010:: Andre Arko
+ Portions copyright (c) 2009:: Engine Yard
+
+ {MIT License}[rdoc-ref:@MIT+License]
+
+[lib/bundler/vendor/thor]
+
+ Thor is under the following license.
+
+ >>>
+ Copyright (c) 2008 Yehuda Katz, Eric Hodel, et al.
+
+ {MIT License}[rdoc-ref:@MIT+License]
+
+[lib/rubygems/vendor/molinillo]
+
+ molinillo is under the following license.
+
+ >>>
+ Copyright (c) 2014 Samuel E. Giddins segiddins@segiddins.me
+
+ {MIT License}[rdoc-ref:@MIT+License]
+
+[lib/bundler/vendor/pub_grub]
+
+ pub_grub is under the following license.
+
+ >>>
+ Copyright (c) 2018 John Hawthorn
+
+ {MIT License}[rdoc-ref:@MIT+License]
+
+[lib/bundler/vendor/connection_pool]
+
+ connection_pool is under the following license.
+
+ >>>
+ Copyright (c) 2011 Mike Perham
+
+ {MIT License}[rdoc-ref:@MIT+License]
+
+[lib/bundler/vendor/net-http-persistent]
+
+ net-http-persistent is under the following license.
+
+ >>>
+ Copyright (c) Eric Hodel, Aaron Patterson
+
+ {MIT License}[rdoc-ref:@MIT+License]
+
+[lib/did_you_mean]
+[lib/did_you_mean.rb]
+[test/did_you_mean]
+
+ did_you_mean is under the following license.
+
+ >>>
+ Copyright (c) 2014-2016 Yuki Nishijima
+
+ {MIT License}[rdoc-ref:@MIT+License]
+
+[lib/error_highlight]
+[lib/error_highlight.rb]
+[test/error_highlight]
+
+ error_highlight is under the following license.
+
+ >>>
+ Copyright (c) 2021 Yusuke Endoh
+
+ {MIT License}[rdoc-ref:@MIT+License]
+
+[benchmark/so_ackermann.rb]
+[benchmark/so_array.rb]
+[benchmark/so_binary_trees.rb]
+[benchmark/so_concatenate.rb]
+[benchmark/so_count_words.yml]
+[benchmark/so_exception.rb]
+[benchmark/so_fannkuch.rb]
+[benchmark/so_fasta.rb]
+[benchmark/so_k_nucleotide.yml]
+[benchmark/so_lists.rb]
+[benchmark/so_mandelbrot.rb]
+[benchmark/so_matrix.rb]
+[benchmark/so_meteor_contest.rb]
+[benchmark/so_nbody.rb]
+[benchmark/so_nested_loop.rb]
+[benchmark/so_nsieve.rb]
+[benchmark/so_nsieve_bits.rb]
+[benchmark/so_object.rb]
+[benchmark/so_partial_sums.rb]
+[benchmark/so_pidigits.rb]
+[benchmark/so_random.rb]
+[benchmark/so_reverse_complement.yml]
+[benchmark/so_sieve.rb]
+[benchmark/so_spectralnorm.rb]
+
+ These files are very old copy of then-called "The Great Computer Language
+ Shootout". LEGAL SITUATION OF THESE FILES ARE UNCLEAR because the original
+ site has been lost. Upstream diverged to delete several benchmarks listed
+ above.
+
+== MIT License
+>>>
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+== Old-style BSD license
+>>>
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+ IMPORTANT NOTE::
+
+ From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
+ paragraph 3 above is now null and void.
+
+== Boost Software License 1.0
+
+>>>
+ Boost Software License - Version 1.0 - August 17th, 2003
+
+ Permission is hereby granted, free of charge, to any person or organization
+ obtaining a copy of the software and accompanying documentation covered by
+ this license (the "Software") to use, reproduce, display, distribute,
+ execute, and transmit the Software, and to prepare derivative works of the
+ Software, and to permit third-parties to whom the Software is furnished to
+ do so, all subject to the following:
+
+ The copyright notices in the Software and this entire statement, including
+ the above license grant, this restriction and the following disclaimer,
+ must be included in all copies of the Software, in whole or in part, and
+ all derivative works of the Software, unless such copies or derivative
+ works are solely in the form of machine-executable object code generated by
+ a source language processor.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+ SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+ FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+
+== Apache License 2.0
+
+>>>
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ a. You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ b. You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ c. You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ d. If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ >>>
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644
index 17164cb25b..0000000000
--- a/Makefile.in
+++ /dev/null
@@ -1,563 +0,0 @@
-SHELL = /bin/sh
-NULLCMD = @NULLCMD@
-n=$(NULLCMD)
-ECHO1 = $(V:1=$n)
-RUNCMD = $(SHELL)
-CDPATH = .
-CHDIR = @CHDIR@
-exec = exec
-NULL = /dev/null
-PATH_SEPARATOR = @PATH_SEPARATOR@
-
-#### Start of system configuration section. ####
-
-srcdir = @srcdir@
-top_srcdir = $(srcdir)
-hdrdir = $(srcdir)/include
-PLATFORM_DIR = @PLATFORM_DIR@
-
-CC = @CC@
-CPP = @CPP@
-LD = @LD@
-YACC = bison
-PURIFY =
-AUTOCONF = autoconf
-ACLOCAL = aclocal
-CONFIGURE = @CONFIGURE@
-@SET_MAKE@
-MKFILES = @MAKEFILES@
-BASERUBY = @BASERUBY@
-HAVE_BASERUBY = @HAVE_BASERUBY@
-TEST_RUNNABLE = @TEST_RUNNABLE@
-CROSS_COMPILING = @CROSS_COMPILING@
-DOXYGEN = @DOXYGEN@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-sbindir = @sbindir@
-libdir = @libdir@
-libexecdir = @libexecdir@
-datarootdir = @datarootdir@
-datadir = @datadir@
-arch = @arch@
-sitearch = @sitearch@
-sitedir = @sitedir@
-archlibdir = @archlibdir@
-ruby_version = @ruby_version@
-
-TESTUI = console
-TESTS =
-INSTALLDOC = @INSTALLDOC@
-DOCTARGETS = @RDOCTARGET@ @CAPITARGET@
-
-EXTOUT = @EXTOUT@
-arch_hdrdir = $(EXTOUT)/include/$(arch)
-VPATH = $(arch_hdrdir)/ruby:$(hdrdir)/ruby:$(srcdir):$(srcdir)/missing
-
-empty =
-CC_VERSION = @CC_VERSION@
-OUTFLAG = @OUTFLAG@$(empty)
-COUTFLAG = @COUTFLAG@$(empty)
-ARCH_FLAG = @ARCH_FLAG@
-CFLAGS_NO_ARCH = @CFLAGS@
-CFLAGS = $(CFLAGS_NO_ARCH) $(ARCH_FLAG)
-cflags = @cflags@
-optflags = @optflags@
-debugflags = @debugflags@
-warnflags = @warnflags@ @strict_warnflags@
-cppflags = @cppflags@
-INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir) -I$(srcdir)
-XCFLAGS = @XCFLAGS@
-CPPFLAGS = @CPPFLAGS@ $(INCFLAGS)
-LDFLAGS = @STATIC@ $(CFLAGS) @LDFLAGS@
-EXTLDFLAGS = @EXTLDFLAGS@
-XLDFLAGS = @XLDFLAGS@ $(EXTLDFLAGS)
-EXTLIBS =
-LIBS = @LIBS@ $(EXTLIBS)
-MISSING = @LIBOBJS@ @ALLOCA@
-LDSHARED = @LIBRUBY_LDSHARED@
-DLDFLAGS = @LIBRUBY_DLDFLAGS@ $(XLDFLAGS) $(ARCH_FLAG)
-SOLIBS = @SOLIBS@
-MAINLIBS = @MAINLIBS@
-ARCHMINIOBJS = @MINIOBJS@
-DLNOBJ = @DLNOBJ@
-ENCOBJS = @ENCOBJS@
-EXTOBJS = @EXTOBJS@
-BUILTIN_ENCOBJS = @BUILTIN_ENCOBJS@
-BUILTIN_TRANSSRCS = @BUILTIN_TRANSSRCS@
-BUILTIN_TRANSOBJS = @BUILTIN_TRANSOBJS@
-POSTLINK = @POSTLINK@
-
-RUBY_BASE_NAME=@RUBY_BASE_NAME@
-RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@
-RUBY_INSTALL_NAME=@RUBY_INSTALL_NAME@
-RUBY_SO_NAME=@RUBY_SO_NAME@
-EXEEXT = @EXEEXT@
-LIBEXT = @LIBEXT@
-PROGRAM=$(RUBY_INSTALL_NAME)$(EXEEXT)
-RUBY = $(RUBY_INSTALL_NAME)
-MINIRUBY = @MINIRUBY@\
- $(MINIRUBYOPT)
-# RUNRUBY_COMMAND:: runruby.rb or baseruby. do not append options directly
-RUNRUBY_COMMAND = @RUNRUBY_COMMAND@
-# RUNRUBY:: run ruby with RUN_OPTS which is passed to ruby
-RUNRUBY = @RUNRUBY@ $(RUN_OPTS)
-# RUNRUBY_DEBUGGER:: debugging option for runruby.rb
-RUNRUBY_DEBUGGER = --debugger='gdb -x run.gdb --quiet --args'
-XRUBY = @XRUBY@
-BTESTRUBY = @BTESTRUBY@\
- $(MINIRUBYOPT)
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-XRUBY_LIBDIR = @XRUBY_LIBDIR@
-XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@
-XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@
-BOOTSTRAPRUBY = @BOOTSTRAPRUBY@
-
-#### End of system configuration section. ####
-
-MAJOR= @MAJOR@
-MINOR= @MINOR@
-TEENY= @TEENY@
-RUBY_PROGRAM_VERSION = @RUBY_PROGRAM_VERSION@
-
-LIBRUBY_A = @LIBRUBY_A@
-LIBRUBY_SO = @LIBRUBY_SO@
-LIBRUBY_ALIASES= @LIBRUBY_ALIASES@
-LIBRUBY = @LIBRUBY@
-LIBRUBYARG = @LIBRUBYARG@
-LIBRUBYARG_STATIC = @LIBRUBYARG_STATIC@
-LIBRUBYARG_SHARED = @LIBRUBYARG_SHARED@
-LIBRUBY_RELATIVE = @LIBRUBY_RELATIVE@
-LIBRUBY_A_OBJS = @LIBRUBY_A_OBJS@
-
-DTRACE_REBUILD_OBJS = $(DTRACE_REBUILD:yes=$(DTRACE_DEPENDENT_OBJS))
-
-DTRACE_DEPENDENT_OBJS = array.$(OBJEXT) \
- eval.$(OBJEXT) \
- gc.$(OBJEXT) \
- hash.$(OBJEXT) \
- load.$(OBJEXT) \
- object.$(OBJEXT) \
- parse.$(OBJEXT) \
- string.$(OBJEXT) \
- symbol.$(OBJEXT) \
- vm.$(OBJEXT)
-
-THREAD_MODEL = @THREAD_MODEL@
-
-PREP = @PREP@
-ARCHFILE = @ARCHFILE@
-SETUP =
-EXTSTATIC = @EXTSTATIC@
-ENCSTATIC = @ENCSTATIC@
-SET_LC_MESSAGES = env LC_MESSAGES=C
-
-MAKEDIRS = @MKDIR_P@
-CP = cp
-MV = mv
-RM = rm -f
-RMDIR = @RMDIR@
-RMDIRS = @RMDIRS@
-RMALL = @RMALL@
-NM = @NM@
-AR = @AR@
-ARFLAGS = rcu
-RANLIB = @RANLIB@
-AS = @AS@
-ASFLAGS = @ASFLAGS@ $(INCFLAGS)
-IFCHANGE = $(srcdir)/tool/ifchange
-SET_LC_MESSAGES = env LC_MESSAGES=C
-OBJDUMP = @OBJDUMP@
-OBJCOPY = @OBJCOPY@
-VCS = @VCS@
-VCSUP = @VCSUP@
-DTRACE = @DTRACE@
-DTRACE_EXT = @DTRACE_EXT@
-DTRACE_OBJ = @DTRACE_OBJ@
-DTRACE_REBUILD= @DTRACE_REBUILD@
-DTRACE_GLOMMED_OBJ = $(DTRACE_REBUILD:yes=ruby-glommed.$(OBJEXT))
-
-OBJEXT = @OBJEXT@
-ASMEXT = S
-DLEXT = @DLEXT@
-MANTYPE = @MANTYPE@
-SYMBOL_PREFIX = @SYMBOL_PREFIX@
-
-INSTALLED_LIST= .installed.list
-
-NEWLINE_C = enc/trans/newline.c
-MINIPRELUDE_C = miniprelude.c
-PRELUDE_C = prelude.c
-RBCONFIG = .rbconfig.time
-
-SRC_FILE = $<
-OS_SRC_FILE = $<
-DEST_FILE = $@
-OS_DEST_FILE = $@
-
-MESSAGE_BEGIN = @for line in
-MESSAGE_END = ; do echo "$$line"; done
-ECHO_BEGIN = @sep=''; for word in
-ECHO_END = ; do echo @ECHO_N@ "$$sep'$$word'@ECHO_C@"; sep=' '; done; echo
-
-DESTDIR = @DESTDIR@
-
-configure_args = @configure_args@
-#### End of variables
-
-.SUFFIXES: .inc .h .c .y .i .$(DTRACE_EXT)
-
-all:
-
-# Prevent GNU make v3 from overflowing arg limit on SysV.
-.NOEXPORT:
-
-miniruby$(EXEEXT):
- @-if test -f $@; then $(MV) -f $@ $@.old; $(RM) $@.old; fi
- $(ECHO) linking $@
- $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(MAINLIBS) $(LIBS) $(OUTFLAG)$@
-
-$(PROGRAM):
- @$(RM) $@
- $(ECHO) linking $@
- $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@
- $(Q) $(POSTLINK)
-
-# We must `rm' the library each time this rule is invoked because "updating" a
-# MAB library on Apple/NeXT (see --enable-fat-binary in configure) is not
-# supported.
-$(LIBRUBY_A):
- @$(RM) $@
- $(ECHO) linking static-library $@
- $(Q) $(AR) $(ARFLAGS) $@ $(LIBRUBY_A_OBJS) $(INITOBJS)
- @-$(RANLIB) $@ 2> /dev/null || true
- $(ECHO) verifying static-library $@
- @$(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(LIBRUBY_A) $(MAINLIBS) $(EXTLIBS) $(LIBS) $(OUTFLAG)conftest$(EXEEXT)
- @$(RM) conftest$(EXEEXT) conftest.c
-
-$(LIBRUBY_SO):
- @-$(PRE_LIBRUBY_UPDATE)
- $(ECHO) linking shared-library $@
- $(Q) $(LDSHARED) $(DLDFLAGS) $(OBJS) $(DLDOBJS) $(SOLIBS) $(EXTSOLIBS) $(OUTFLAG)$@
- -$(Q) $(OBJCOPY) -w -L '$(SYMBOL_PREFIX)Init_*' -L '$(SYMBOL_PREFIX)ruby_static_id_*' \
- -L '$(SYMBOL_PREFIX)*_threadptr_*' $@
- $(Q) $(POSTLINK)
- @-$(MINIRUBY) -e 'ARGV.each{|link| File.delete link rescue nil; \
- File.symlink "$(LIBRUBY_SO)", link}' \
- $(LIBRUBY_ALIASES) || true
-
-ruby_pc = @ruby_pc@
-$(ruby_pc):
- @./config.status --file=$@:$(srcdir)/template/ruby.pc.in
-
-ruby-runner.c: template/ruby-runner.c.in
- @./config.status --file=$@:$(srcdir)/template/$(@F).in
-
-ruby-runner$(EXEEXT): ruby-runner.c
- $(Q) $(PURIFY) $(CC) $(CFLAGS) $(CPPFLAGS) -DRUBY_INSTALL_NAME=$(RUBY_INSTALL_NAME) $(LDFLAGS) $(LIBS) $(OUTFLAG)$@ ruby-runner.c
-
-$(RBCONFIG): $(PREP)
-
-rbconfig.rb: $(RBCONFIG)
-
-install-cross: $(arch)-fake.rb $(RBCONFIG) rbconfig.rb $(arch_hdrdir)/ruby/config.h \
- $(LIBRUBY_A) $(LIBRUBY_SO) $(ARCHFILE)
- $(ECHO) installing cross-compiling stuff
- $(Q) $(MAKEDIRS) $(XRUBY_RUBYLIBDIR)/$(arch) $(XRUBY_RUBYHDRDIR)/$(arch)/ruby
- $(Q) sed '/^\$$:\.unshift/q' $(arch)-fake.rb > fake.rb
- $(Q) $(BASERUBY) -p \
- -e '~/^\s*CONFIG\["LDFLAGS"\]/ and' \
- -e '$$_[/(?=\s*"$$)/] = %q[ #{(CONFIG["LIBPATHFLAG"]%File.dirname(__FILE__)).strip}]' \
- rbconfig.rb > fake-rbconfig.rb
- $(INSTALL_SCRIPT) fake.rb $(XRUBY_RUBYLIBDIR)/$(arch)/fake.rb
- $(INSTALL_SCRIPT) fake-rbconfig.rb $(XRUBY_RUBYLIBDIR)/$(arch)/rbconfig.rb
- @$(RM) fake.rb fake-rbconfig.rb
- $(INSTALL_DATA) $(arch_hdrdir)/ruby/config.h $(XRUBY_RUBYHDRDIR)/$(arch)/ruby
- $(INSTALL_DATA) $(top_srcdir)/include/ruby/win32.h $(XRUBY_RUBYHDRDIR)/ruby
- $(INSTALL_DATA) $(LIBRUBY) $(LIBRUBY_A) $(XRUBY_RUBYLIBDIR)/$(arch)
- $(INSTALL_PROGRAM) $(LIBRUBY_SO) $(XRUBY_RUBYLIBDIR)/$(arch)
-
-Makefile: $(srcdir)/Makefile.in $(srcdir)/enc/Makefile.in
-
-$(MKFILES): config.status $(srcdir)/version.h
- @[ -f $@ ] && mv $@ $@.old
- MAKE=$(MAKE) $(SHELL) ./config.status $@
- @cmp $@ $@.old > /dev/null 2>&1 && echo $@ unchanged && exit 0; \
- { \
- echo "all:; -@rm -f conftest.mk"; \
- echo "conftest.mk: .force; @echo AUTO_REMAKE"; \
- echo ".force:"; \
- } > conftest.mk || exit 1; \
- $(MAKE) -f conftest.mk | grep '^AUTO_REMAKE$$' >/dev/null 2>&1 || \
- { echo "$@ updated, restart."; exit 1; }
-
-uncommon.mk: $(srcdir)/common.mk
- sed 's/{\$$([^(){}]*)[^{}]*}//g' $< > $@
-
-.PHONY: reconfig
-reconfig-args = $(srcdir)/$(CONFIGURE) $(configure_args)
-config.status-args = ./config.status --recheck
-reconfig-exec-0 = test -t 1 && { CONFIGURE_TTY=yes; export CONFIGURE_TTY; }; exec 3>&1; exit `exec 4>&1; { "$$@" 3>&- 4>&-; echo $$? 1>&4; } | fgrep -v '(cached)' 1>&3 3>&- 4>&-`
-reconfig-exec-1 = set -x; "$$@"
-
-reconfig config.status: $(srcdir)/$(CONFIGURE) $(srcdir)/enc/Makefile.in \
- $(srcdir)/include/ruby/version.h
- @PWD= MINIRUBY="$(MINIRUBY)"; export MINIRUBY; \
- set $(SHELL) $($@-args); $(reconfig-exec-$(V))
-
-$(srcdir)/$(CONFIGURE): $(srcdir)/configure.in $(srcdir)/aclocal.m4
- $(CHDIR) $(srcdir) && exec $(AUTOCONF) -o $(@F)
-
-$(srcdir)/aclocal.m4:
- $(CHDIR) $(srcdir) && \
- type $(ACLOCAL) >/dev/null 2>&1 && exec $(ACLOCAL); \
- touch $(@F)
-
-incs: id.h
-all-incs: probes.h
-
-# Things which should be considered:
-# * with gperf v.s. without gperf
-# * committers may have various versions of gperf
-# * ./configure v.s. ../ruby/configure
-# * GNU make v.s. HP-UX make # HP-UX make invokes the action if lex.c and keywords has same mtime.
-# * svn checkout generate a file with mtime as current time
-# * ext4 and XFS has a mtime with fractional part
-lex.c: defs/keywords
- @\
- if cmp -s $(srcdir)/defs/lex.c.src $?; then \
- [ $(Q) ] && echo copying $@ || set -x; \
- $(CP) $(srcdir)/lex.c.blt $@; \
- else \
- [ $(Q) ] && echo generating $@ || set -x; \
- gperf -C -P -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ $? \
- | sed 's/(long)&((\(struct stringpool_t\) *\*)0)->\(stringpool_[a-z0-9]*\)/offsetof(\1, \2)/g' \
- > $@.tmp && \
- $(MV) $@.tmp $@ && \
- $(CP) $? $(srcdir)/defs/lex.c.src && \
- $(CP) $@ $(srcdir)/lex.c.blt; \
- fi
-
-NAME2CTYPE_OPTIONS = -7 -c -j1 -i1 -t -C -P -T -H uniname2ctype_hash -Q uniname2ctype_pool -N uniname2ctype_p
-
-enc/unicode/name2ctype.h: enc/unicode/name2ctype.kwd
- $(MAKEDIRS) $(@D)
- @set +e; \
- if cmp -s $(?:.kwd=.src) $?; then \
- set -x; \
- $(CP) $(?:.kwd=.h.blt) $@; \
- else \
- trap '$(RM) $@-1.h $@-2.h' 0 && \
- set -x; \
- sed '/^#ifdef USE_UNICODE_PROPERTIES/,/^#endif/d' $? | gperf $(NAME2CTYPE_OPTIONS) > $@-1.h && \
- sed '/^#ifdef USE_UNICODE_PROPERTIES/d;/^#endif/d' $? | gperf $(NAME2CTYPE_OPTIONS) > $@-2.h && \
- diff -DUSE_UNICODE_PROPERTIES $@-1.h $@-2.h > $@.tmp || :; \
- $(MV) $@.tmp $@ && \
- $(CP) $? $(?:.kwd=.src) && \
- $(CP) $@ $(?:.kwd=.h.blt); \
- fi
-
-JIS_PROPS_OPTIONS = -k1,3 -7 -c -j1 -i1 -t -C -P -t --ignore-case -H onig_jis_property_hash -Q onig_jis_property_pool -N onig_jis_property
-
-enc/jis/props.h: enc/jis/props.kwd
- $(MAKEDIRS) $(@D)
- @set +e; \
- if cmp -s $(?:.kwd=.src) $?; then \
- set -x; \
- $(CP) $(?:.kwd=.h.blt) $@; \
- else \
- set -x; \
- gperf $(JIS_PROPS_OPTIONS) $? | \
- sed 's/(int)(long)&((\([a-zA-Z_0-9 ]*[a-zA-Z_0-9]\) *\*)0)->\([a-zA-Z0-9_]*\),/(char)offsetof(\1, \2),/g' > $@ && \
- $(CP) $? $(?:.kwd=.src) && \
- $(CP) $@ $(?:.kwd=.h.blt); \
- fi
-
-.c.@OBJEXT@:
- @$(ECHO) compiling $<
- $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $<
-
-.s.@OBJEXT@:
- @$(ECHO) assembling $<
- $(Q) $(AS) $(ASFLAGS) -o $@ $<
-
-.c.S:
- @$(ECHO) translating $<
- $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -S $<
-
-.c.i:
- @$(ECHO) preprocessing $<
- $(Q) $(CPP) $(warnflags) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -E $< > $@
-
-.d.h:
- @$(ECHO) translating probes $<
- $(Q) $(DTRACE) -o $@.tmp -h -C $(INCFLAGS) -s $<
- $(Q) sed -e 's/RUBY_/RUBY_DTRACE_/g' -e 's/PROBES_H_TMP/RUBY_PROBES_H/' -e 's/(char \*/(const char */g' -e 's/, char \*/, const char */g' $@.tmp > $@
- $(Q) $(RM) $@.tmp
-
-.dmyh.h:
- @$(ECHO) making dummy $(DEST_FILE)
- $(Q)echo '#include "$(*F).dmyh"' > $@
-
-probes.stamp: $(DTRACE_REBUILD_OBJS)
- $(Q) if test -f $@ -o -f probes.$(OBJEXT); then \
- $(RM) $(DTRACE_REBUILD_OBJS) $@; \
- $(ECHO0) "rebuilding objects which were modified by \"dtrace -G\""; \
- $(MAKE) $(DTRACE_REBUILD_OBJS); \
- fi
- $(Q) touch $@
-
-probes.@OBJEXT@: $(srcdir)/probes.d $(DTRACE_REBUILD:yes=probes.stamp)
- @$(ECHO) processing probes in object files
- $(Q) $(RM) $@
- $(Q) $(DTRACE) -G -C $(INCFLAGS) -s $(srcdir)/probes.d -o $@ $(DTRACE_REBUILD_OBJS)
-
-# DTrace static library hacks described here:
-# http://mail.opensolaris.org/pipermail/dtrace-discuss/2005-August/000207.html
-ruby-glommed.$(OBJEXT):
- @$(ECHO) generating a glommed object with DTrace probes for static library
- $(Q) $(LD) -r -o $@ $(OBJS)
-
-clean-local::
- $(Q)$(RM) ext/extinit.c ext/extinit.$(OBJEXT) ext/ripper/y.output \
- enc/encinit.c enc/encinit.$(OBJEXT)
- -$(Q)$(RM) $(pkgconfig_DATA)
-
-distclean-local::
- $(Q)$(RM) ext/config.cache $(RBCONFIG) Doxyfile
- -$(Q)$(RM) run.gdb
- -$(Q)$(RM) $(INSTALLED_LIST) $(arch_hdrdir)/ruby/config.h verconf.h
- -$(Q)$(RMDIRS) $(arch_hdrdir)/ruby 2> /dev/null || true
-
-clean-ext distclean-ext realclean-ext::
- @cd ext 2>/dev/null || exit 0; set dummy `echo "${EXTS}" | tr , ' '`; shift; \
- test "$$#" = 0 && set .; \
- set dummy `\
- find "$$@" -name Makefile -print | sed 's:^\./::;s:/Makefile$$::' | sort; \
- `; shift; \
- cd ..; \
- for dir do \
- echo $(@:-ext=)ing "$$dir"; \
- (cd "ext/$$dir" && exec $(MAKE) $(MFLAGS) $(@:-ext=)) && \
- case "$@" in \
- *distclean-ext*|*realclean-ext*) \
- $(RMDIRS) "ext/$$dir" 2> /dev/null || true;; \
- esac; \
- done
- -$(Q)$(RM) ext/extinit.$(OBJEXT)
-
-distclean-ext realclean-ext::
- -$(Q)$(RM) ext/extinit.c
- -$(Q)$(RMDIR) ext 2> /dev/null || true
-
-clean-extout:
-
-clean-enc distclean-enc realclean-enc:
- @test -f "$(ENC_MK)" || exit 0; \
- echo $(@:-enc=ing) encodings; \
- exec $(MAKE) -f $(ENC_MK) $(MFLAGS) $(@:-enc=)
-
-ext/extinit.$(OBJEXT): ext/extinit.c $(SETUP)
- $(ECHO) compiling $@
- $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c ext/extinit.c
-
-enc/encinit.$(OBJEXT): enc/encinit.c $(SETUP)
-
-update-src::
- @$(CHDIR) "$(srcdir)" && LC_TIME=C exec $(VCSUP)
-
-update-download:: update-config_files
-
-after-update:: common-srcs
-
-update-mspec:
- @$(CHDIR) $(srcdir); \
- if [ -d spec/mspec ]; then \
- echo updating mspec ...; \
- $(Q1:0=:) set -x; \
- cd spec/mspec && \
- exec git pull; \
- else \
- echo retrieving mspec ...; \
- $(Q1:0=:) set -x; \
- exec git clone $(MSPEC_GIT_URL) spec/mspec; \
- fi
-
-update-rubyspec: update-mspec
- @$(CHDIR) $(srcdir); \
- if [ -d spec/rubyspec ]; then \
- echo updating rubyspec ...; \
- $(Q1:0=:) set -x; \
- cd spec/rubyspec && \
- exec git pull; \
- else \
- echo retrieving rubyspec ...; \
- $(Q1:0=:) set -x; \
- exec git clone $(RUBYSPEC_GIT_URL) spec/rubyspec; \
- fi
-
-test-rubyspec-precheck:
- @if [ ! -d $(srcdir)/spec/rubyspec ]; then echo No rubyspec here. make update-rubyspec first.; exit 1; fi
-
-update-doclie:
- @$(CHDIR) $(srcdir); \
- if [ -d coverage/doclie ]; then \
- echo updating doclie ...; \
- $(Q1:0=:) set -x; \
- cd coverage/doclie && \
- git fetch && \
- exec git checkout $(DOCLIE_GIT_REF); \
- else \
- echo retrieving doclie ...; \
- $(Q1:0=:) set -x; \
- exec git clone --branch $(DOCLIE_GIT_REF) $(DOCLIE_GIT_URL) coverage/doclie; \
- fi
-
-update-simplecov-html:
- @$(CHDIR) $(srcdir); \
- if [ -d coverage/simplecov-html ]; then \
- echo updating simplecov-html ...; \
- $(Q1:0=:) set -x; \
- cd coverage/simplecov-html && \
- git fetch && \
- exec git checkout $(SIMPLECOV_HTML_GIT_REF); \
- else \
- echo retrieving simplecov-html ...; \
- exec git clone --branch $(SIMPLECOV_HTML_GIT_REF) $(SIMPLECOV_HTML_GIT_URL) coverage/simplecov-html; \
- fi
-
-update-simplecov:
- @$(CHDIR) $(srcdir); \
- if [ -d coverage/simplecov ]; then \
- echo updating simplecov ...; \
- $(Q1:0=:) set -x; \
- cd coverage/simplecov && \
- git fetch && \
- exec git checkout $(SIMPLECOV_GIT_REF); \
- else \
- echo retrieving simplecov ...; \
- $(Q1:0=:) set -x; \
- exec git clone --branch $(SIMPLECOV_GIT_REF) $(SIMPLECOV_GIT_URL) coverage/simplecov; \
- fi
-
-update-coverage: update-simplecov update-simplecov-html update-doclie
-
-INSNS = opt_sc.inc optinsn.inc optunifs.inc insns.inc insns_info.inc \
- vmtc.inc vm.inc
-
-$(INSNS): $(srcdir)/insns.def vm_opts.h \
- $(srcdir)/defs/opt_operand.def $(srcdir)/defs/opt_insn_unif.def \
- $(srcdir)/tool/instruction.rb $(srcdir)/tool/insns2vm.rb
- $(ECHO) generating $@
- $(Q) $(BASERUBY) -Ku $(srcdir)/tool/insns2vm.rb $(INSNS2VMOPT) $@
-
-verconf.h: $(RBCONFIG)
-
-loadpath: verconf.h
- @$(CPP) $(XCFLAGS) $(CPPFLAGS) $(srcdir)/loadpath.c | \
- sed -e '1,/^const char ruby_initial_load_paths/d;/;/,$$d' \
- -e '/^ /!d;s/ *"\\0"$$//;s/" *"//g'
diff --git a/NEWS b/NEWS
deleted file mode 100644
index d84c275087..0000000000
--- a/NEWS
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- rdoc -*-
-
-= NEWS for Ruby 2.4.0
-
-This document is a list of user visible feature changes made between
-releases except for bug fixes.
-
-Note that each entry is kept so brief that no reason behind or
-reference information is supplied with. For a full list of changes
-with all sufficient information, see the ChangeLog file or Redmine
-(e.g. <tt>https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER</tt>)
-
-== Changes since the 2.3.0 release
-
-=== Language changes
-
-=== Core classes updates (outstanding ones only)
-
-=== Stdlib updates (outstanding ones only)
-
-* CSV
- * Add a liberal_parsing option. [Feature #11839]
-
-* optparse
- * Add an into option. [Feature #11191]
-
-=== Stdlib compatibility issues (excluding feature bug fixes)
-
-=== Built-in global variables compatibility issues
-
-=== C API updates
-
-* ruby_show_version() will no longer exits the process, if
- RUBY_SHOW_COPYRIGHT_TO_DIE is set to 0. This will be the default in
- the future.
-
-=== Supported platform changes
-
-=== Implementation improvements
diff --git a/NEWS.md b/NEWS.md
new file mode 100644
index 0000000000..2b021e7cdd
--- /dev/null
+++ b/NEWS.md
@@ -0,0 +1,87 @@
+# NEWS for Ruby 4.1.0
+
+This document is a list of user-visible feature changes
+since the **4.0.0** release, except for bug fixes.
+
+Note that each entry is kept to a minimum, see links for details.
+
+## Language changes
+
+## Core classes updates
+
+Note: We're only listing outstanding class updates.
+
+* Method
+
+ * `Method#source_location`, `Proc#source_location`, and
+ `UnboundMethod#source_location` now return extended location
+ information with 5 elements: `[path, start_line, start_column,
+ end_line, end_column]`. The previous 2-element format `[path,
+ line]` can still be obtained by calling `.take(2)` on the result.
+ [[Feature #6012]]
+
+* Set
+
+ * A deprecated behavior, `Set#to_set`, `Range#to_set`, and
+ `Enumerable#to_set` accepting arguments, was removed. [[Feature #21390]]
+
+## Stdlib updates
+
+### The following bundled gems are added.
+
+
+We only list stdlib changes that are notable feature changes.
+
+Other changes are listed in the following sections. We also listed release
+history from the previous bundled version that is Ruby 3.4.0 if it has GitHub
+releases.
+
+### The following bundled gem is promoted from default gems.
+
+* tsort 0.2.0
+
+### The following default gem is added.
+
+### The following default gems are updated.
+
+* RubyGems 4.1.0.dev
+* bundler 4.1.0.dev
+* prism 1.8.0
+* stringio 3.2.1.dev
+* strscan 3.1.7.dev
+
+### The following bundled gems are updated.
+
+* minitest 6.0.1
+* test-unit 3.7.7
+* rss 0.3.2
+* net-imap 0.6.2
+* rbs 3.10.2
+* typeprof 0.31.1
+* debug 1.11.1
+* mutex_m 0.3.0
+* resolv-replace 0.2.0
+* rdoc 7.1.0
+
+### RubyGems and Bundler
+
+Ruby 4.0 bundled RubyGems and Bundler version 4. see the following links for details.
+
+## Supported platforms
+
+## Compatibility issues
+
+## Stdlib compatibility issues
+
+## C API updates
+
+## Implementation improvements
+
+### Ractor
+
+A lot of work has gone into making Ractors more stable, performant, and usable. These improvements bring Ractor implementation closer to leaving experimental status.
+
+## JIT
+
+[Feature #6012]: https://bugs.ruby-lang.org/issues/6012
+[Feature #21390]: https://bugs.ruby-lang.org/issues/21390
diff --git a/README.ja.md b/README.ja.md
index eee54a9171..9bbc3a83a5 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -1,3 +1,11 @@
+[![Actions Status: MinGW](https://github.com/ruby/ruby/workflows/MinGW/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"MinGW")
+[![Actions Status: Ubuntu](https://github.com/ruby/ruby/workflows/Ubuntu/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"Ubuntu")
+[![Actions Status: Windows](https://github.com/ruby/ruby/workflows/Windows/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"Windows")
+[![AppVeyor status](https://ci.appveyor.com/api/projects/status/0sy8rrxut4o0k960/branch/master?svg=true)](https://ci.appveyor.com/project/ruby/ruby/branch/master)
+[![Travis Status](https://app.travis-ci.com/ruby/ruby.svg?branch=master)](https://app.travis-ci.com/ruby/ruby)
+
+[English](rdoc-ref:README.md)
+
# Rubyã¨ã¯
Rubyã¯ã‚·ãƒ³ãƒ—ルã‹ã¤å¼·åŠ›ãªã‚ªãƒ–ジェクト指å‘スクリプト言語ã§ã™ï¼Ž Rubyã¯ç´”粋ãªã‚ªãƒ–ジェクト指å‘言語ã¨ã—ã¦è¨­è¨ˆã•れã¦ã„ã‚‹ã®ã§ï¼Œ
@@ -10,83 +18,79 @@ Rubyã¯ãƒ†ã‚­ã‚¹ãƒˆå‡¦ç†é–¢ä¿‚ã®èƒ½åŠ›ãªã©ã«å„ªã‚Œï¼ŒPerlã¨åŒã˜ãらã„
* ã‚·ãƒ³ãƒ—ãƒ«ãªæ–‡æ³•
* 普通ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆæŒ‡å‘æ©Ÿèƒ½(クラス,メソッドコールãªã©)
-* 特殊ãªã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆæŒ‡å‘æ©Ÿèƒ½(Mixin, 特異メソッドãªã©)
+* 特殊ãªã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆæŒ‡å‘æ©Ÿèƒ½(Mixin,特異メソッドãªã©)
* 演算å­ã‚ªãƒ¼ãƒãƒ¼ãƒ­ãƒ¼ãƒ‰
* ä¾‹å¤–å‡¦ç†æ©Ÿèƒ½
* イテレータã¨ã‚¯ãƒ­ãƒ¼ã‚¸ãƒ£
* ガーベージコレクタ
* ダイナミックローディング (アーキテクãƒãƒ£ã«ã‚ˆã‚‹)
-* ç§»æ¤æ€§ãŒé«˜ã„.多ãã®Unix-like/POSIX互æ›ãƒ—ラットフォーム上ã§å‹•ãã ã‘ã§ãªã,Windows, Mac OS
- X,BeOSãªã©ã®ä¸Šã§ã‚‚å‹•ã cf.
- http://bugs.ruby-lang.org/projects/ruby-trunk/wiki/SupportedPlatformsJa
+* ç§»æ¤æ€§ãŒé«˜ã„.多ãã®Unix-like/POSIX互æ›ãƒ—ラットフォーム上ã§å‹•ãã ã‘ã§ãªã,Windows, macOS,
+ Haikuãªã©ã®ä¸Šã§ã‚‚å‹•ã cf.
+ https://docs.ruby-lang.org/en/master/maintainers_md.html#label-Platform+Maintainers
## 入手法
-### FTPã§
-
-以下ã®å ´æ‰€ã«ãŠã„ã¦ã‚りã¾ã™ï¼Ž
+サードパーティーツールを使ã£ãŸæ–¹æ³•ã‚’å«ã‚€Rubyã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ–¹æ³•ã®ä¸€è¦§ã¯
-ftp://ftp.ruby-lang.org/pub/ruby/
+https://www.ruby-lang.org/ja/downloads/
-### Subversionã§
+ã‚’å‚ç…§ã—ã¦ãã ã•ã„.
-開発先端ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¯æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã§å–å¾—ã§ãã¾ã™ï¼Ž
+### Git
- $ svn co http://svn.ruby-lang.org/repos/ruby/trunk/ ruby
+ミラーをGitHubã«å…¬é–‹ã—ã¦ã„ã¾ã™ï¼Ž 以下ã®ã‚³ãƒžãƒ³ãƒ‰ã§ãƒªãƒã‚¸ãƒˆãƒªã‚’å–å¾—ã§ãã¾ã™ï¼Ž
-ä»–ã«é–‹ç™ºä¸­ã®ãƒ–ランãƒã®ä¸€è¦§ã¯æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã§è¦‹ã‚‰ã‚Œã¾ã™ï¼Ž
+```console
+$ git clone https://github.com/ruby/ruby.git
+```
- $ svn ls http://svn.ruby-lang.org/repos/ruby/branches/
+ä»–ã®ãƒ–ランãƒã®ä¸€è¦§ã¯æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã§è¦‹ã‚‰ã‚Œã¾ã™ï¼Ž
-### Gitã§
+```console
+$ git ls-remote https://github.com/ruby/ruby.git
+```
-Subversionã®ãƒŸãƒ©ãƒ¼ã‚’GitHubã«å…¬é–‹ã—ã¦ã„ã¾ã™ï¼Ž 以下ã®ã‚³ãƒžãƒ³ãƒ‰ã§ãƒªãƒã‚¸ãƒˆãƒªã‚’å–å¾—ã§ãã¾ã™ï¼Ž
-
- $ git clone git://github.com/ruby/ruby.git
+Rubyリãƒã‚¸ãƒˆãƒªã®æœ¬æ¥ã®master㯠https://git.ruby-lang.org/ruby.git ã«ã‚りã¾ã™ï¼Ž
+コミッタã¯ã“ã¡ã‚‰ã‚’使ã„ã¾ã™ï¼Ž
## ホームページ
Rubyã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã®URLã¯
-http://www.ruby-lang.org/
+https://www.ruby-lang.org/
ã§ã™ï¼Ž
## メーリングリスト
-Rubyã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆãŒã‚りã¾ã™ï¼Žå‚åŠ å¸Œæœ›ã®æ–¹ã¯
-
-mailto:ruby-list-request@ruby-lang.org
+Rubyã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆãŒã‚りã¾ã™ï¼Žå‚åŠ å¸Œæœ›ã®æ–¹ã¯ [ruby-list-request@ml.ruby-lang.org] ã¾ã§ä»¶åã«
-ã¾ã§æœ¬æ–‡ã«
-
- subscribe
+ join
ã¨æ›¸ã„ã¦é€ã£ã¦ä¸‹ã•ã„.
-Ruby開発者å‘ã‘メーリングリストもã‚りã¾ã™ï¼Žã“ã¡ã‚‰ã§ã¯rubyã®ãƒã‚°ï¼Œå°†æ¥ã®ä»•様拡張ãªã©å®Ÿè£…上ã®å•題ã«ã¤ã„ã¦è­°è«–ã•れã¦ã„ã¾ã™ï¼Ž å‚åŠ å¸Œæœ›ã®æ–¹ã¯
-
-mailto:ruby-dev-request@ruby-lang.org
-
-ã¾ã§ruby-listã¨åŒæ§˜ã®æ–¹æ³•ã§ãƒ¡ãƒ¼ãƒ«ã—ã¦ãã ã•ã„.
+Ruby開発者å‘ã‘メーリングリストもã‚りã¾ã™ï¼Žã“ã¡ã‚‰ã§ã¯rubyã®ãƒã‚°ï¼Œå°†æ¥ã®ä»•様拡張ãªã©å®Ÿè£…上ã®å•題ã«ã¤ã„ã¦è­°è«–ã•れã¦ã„ã¾ã™ï¼Ž
+å‚åŠ å¸Œæœ›ã®æ–¹ã¯ [ruby-dev-request@ml.ruby-lang.org] ã¾ã§ruby-listã¨åŒæ§˜ã®æ–¹æ³•ã§ãƒ¡ãƒ¼ãƒ«ã—ã¦ãã ã•ã„.
Ruby拡張モジュールã«ã¤ã„ã¦è©±ã—åˆã†ruby-extãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã¨æ•°å­¦é–¢ä¿‚ã®è©±é¡Œã«ã¤ã„ã¦è©±ã—åˆã†ruby-mathメーリングリストã¨
英語ã§rubyã«ã¤ã„ã¦è©±ã—åˆã†ruby-talkメーリングリストもã‚りã¾ã™ï¼Žå‚加方法ã¯ã©ã‚Œã‚‚åŒã˜ã§ã™ï¼Ž
+[ruby-list-request@ml.ruby-lang.org]: mailto:ruby-list-request@ml.ruby-lang.org?subject=join
+[ruby-dev-request@ml.ruby-lang.org]: mailto:ruby-dev-request@ml.ruby-lang.org?subject=join
+
## コンパイル・インストール
ä»¥ä¸‹ã®æ‰‹é †ã§è¡Œã£ã¦ãã ã•ã„.
-1. ã‚‚ã— `configure` ファイルãŒè¦‹ã¤ã‹ã‚‰ãªã„,もã—ã㯠`configure.in` よりå¤ã„よã†ãªã‚‰ï¼Œ `autoconf` を実行ã—ã¦
- æ–°ã—ã `configure` を生æˆã™ã‚‹
+1. (Gitリãƒã‚¸ãƒˆãƒªã‹ã‚‰å–å¾—ã—ãŸã‚½ãƒ¼ã‚¹ã‚’ビルドã™ã‚‹å ´åˆ) `./autogen.sh` を実行ã—ã¦æ–°ã—ã `configure` を生æˆã™ã‚‹
2. `configure` を実行ã—㦠`Makefile` ãªã©ã‚’生æˆã™ã‚‹
環境ã«ã‚ˆã£ã¦ã¯ãƒ‡ãƒ•ォルトã®Cコンパイラ用オプションãŒä»˜ãã¾ã™ï¼Ž `configure` オプション㧠`optflags=..`
`warnflags=..` ç­‰ã§ä¸Šæ›¸ãã§ãã¾ã™ï¼Ž
-3. (å¿…è¦ãªã‚‰ã°)`defines.h` を編集ã™ã‚‹
+3. (å¿…è¦ãªã‚‰ã°)`include/ruby/defines.h` を編集ã™ã‚‹
多分,必è¦ç„¡ã„ã¨æ€ã„ã¾ã™ï¼Ž
@@ -95,7 +99,8 @@ Ruby拡張モジュールã«ã¤ã„ã¦è©±ã—åˆã†ruby-extメーリングリスãƒ
`ext/Setup` ã«è¨˜è¿°ã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯é™çš„ã«ãƒªãƒ³ã‚¯ã•れã¾ã™ï¼Ž
ダイナミックローディングをサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„アーキテクãƒãƒ£ã§ã¯ `Setup` ã®1行目ã®ã€Œ`option nodynamic`ã€ã¨ã„ã†è¡Œã®ã‚³
- メントを外ã™å¿…è¦ãŒã‚りã¾ã™ï¼Žã¾ãŸï¼Œã“ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã§æ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’利用ã™ã‚‹ãŸã‚ã«ã¯ï¼Œã‚らã‹ã˜ã‚é™çš„ã«ãƒªãƒ³ã‚¯ã‚’ã—ã¦ãŠãå¿…è¦ãŒã‚りã¾ã™ï¼Ž
+ メントを外ã™å¿…è¦ãŒã‚りã¾ã™ï¼Ž
+ ã¾ãŸï¼Œã“ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã§æ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’利用ã™ã‚‹ãŸã‚ã«ã¯ï¼Œã‚らã‹ã˜ã‚é™çš„ã«ãƒªãƒ³ã‚¯ã‚’ã—ã¦ãŠãå¿…è¦ãŒã‚りã¾ã™ï¼Ž
5. `make` を実行ã—ã¦ã‚³ãƒ³ãƒ‘イルã™ã‚‹
@@ -151,21 +156,21 @@ UNIXã§ã‚れ㰠`configure` ãŒã»ã¨ã‚“ã©ã®å·®ç•°ã‚’å¸åŽã—ã¦ãれるã¯
## é…布æ¡ä»¶
-`COPYING.ja` ファイルをå‚ç…§ã—ã¦ãã ã•ã„.
+[COPYING.ja](https://docs.ruby-lang.org/en/master/COPYING_ja.html) ファイルをå‚ç…§ã—ã¦ãã ã•ã„.
## フィードãƒãƒƒã‚¯
-Rubyã«é–¢ã™ã‚‹è³ªå•㯠Ruby-Talk(英語)や Ruby-List(日本語) (https://www.ruby-lang.org/ja/community/mailing-lists) や,
-stackoverflow (http://ja.stackoverflow.com/) ãªã©ã®Webã‚µã‚¤ãƒˆã«æŠ•ç¨¿ã—ã¦ãã ã•ã„.
+Rubyã«é–¢ã™ã‚‹è³ªå•㯠[Ruby-Talk](英語)や [Ruby-List](日本語)や,
+[stackoverflow] ãªã©ã®Webã‚µã‚¤ãƒˆã«æŠ•ç¨¿ã—ã¦ãã ã•ã„.
-ãƒã‚°å ±å‘Šã¯ http://bugs.ruby-lang.org ã§å—ã‘付ã‘ã¦ã„ã¾ã™ï¼Ž
+ãƒã‚°å ±å‘Šã¯ https://bugs.ruby-lang.org ã§å—ã‘付ã‘ã¦ã„ã¾ã™ï¼Ž
+[Ruby-Talk]: https://www.ruby-lang.org/en/community/mailing-lists
+[Ruby-List]: https://www.ruby-lang.org/ja/community/mailing-lists
+[stackoverflow]: https://ja.stackoverflow.com/
## 著者
Rubyã®ã‚ªãƒªã‚¸ãƒŠãƒ«ç‰ˆã¯ï¼Œ1995å¹´ã«ã¾ã¤ã‚‚ã¨ã‚†ãã²ã‚æ°ã«ã‚ˆã£ã¦è¨­è¨ˆãƒ»é–‹ç™ºã•れã¾ã—ãŸï¼Ž
<mailto:matz@ruby-lang.org>
-
----
-created at: Thu Aug 3 11:57:36 JST 1995
diff --git a/README.md b/README.md
index c19b54ffcf..02435b419e 100644
--- a/README.md
+++ b/README.md
@@ -1,167 +1,96 @@
-[![Build Status](https://travis-ci.org/ruby/ruby.svg)](https://travis-ci.org/ruby/ruby)
-[![Build status](https://ci.appveyor.com/api/projects/status/0sy8rrxut4o0k960/branch/trunk?svg=true)](https://ci.appveyor.com/project/ruby/ruby/branch/trunk)
+[![Actions Status: MinGW](https://github.com/ruby/ruby/workflows/MinGW/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"MinGW")
+[![Actions Status: Ubuntu](https://github.com/ruby/ruby/workflows/Ubuntu/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"Ubuntu")
+[![Actions Status: Windows](https://github.com/ruby/ruby/workflows/Windows/badge.svg)](https://github.com/ruby/ruby/actions?query=workflow%3A"Windows")
+[![Travis Status](https://app.travis-ci.com/ruby/ruby.svg?branch=master)](https://app.travis-ci.com/ruby/ruby)
-# What's Ruby
+[日本語](rdoc-ref:README.ja.md)
-Ruby is the interpreted scripting language for quick and easy object-oriented
-programming. It has many features to process text files and to do system
-management tasks (as in Perl). It is simple, straight-forward, and
-extensible.
+# What is Ruby?
-## Features of Ruby
+Ruby is an interpreted object-oriented programming language often
+used for web development. It also offers many scripting features
+to process plain text and serialized files, or manage system tasks.
+It is simple, straightforward, and extensible.
-* Simple Syntax
-* **Normal** Object-oriented Features (e.g. class, method calls)
-* **Advanced** Object-oriented Features (e.g. Mix-in, Singleton-method)
-* Operator Overloading
-* Exception Handling
-* Iterators and Closures
-* Garbage Collection
-* Dynamic Loading of Object Files (on some architectures)
-* Highly Portable (works on many Unix-like/POSIX compatible platforms as
- well as Windows, Mac OS X, BeOS, etc.) cf.
- http://bugs.ruby-lang.org/projects/ruby-trunk/wiki/SupportedPlatforms
+## Features of Ruby
+* Simple Syntax
+* **Normal** Object-oriented Features (e.g. class, method calls)
+* **Advanced** Object-oriented Features (e.g. mix-in, singleton-method)
+* Operator Overloading
+* Exception Handling
+* Iterators and Closures
+* Garbage Collection
+* Dynamic Loading of Object Files (on some architectures)
+* Highly Portable (works on many Unix-like/POSIX compatible platforms as
+ well as Windows, macOS, etc.) cf.
+ https://docs.ruby-lang.org/en/master/maintainers_md.html#label-Platform+Maintainers
## How to get Ruby
For a complete list of ways to install Ruby, including using third-party tools
like rvm, see:
-http://www.ruby-lang.org/en/downloads/
-
-The Ruby distribution files can be found on the following FTP site:
-
-ftp://ftp.ruby-lang.org/pub/ruby/
+https://www.ruby-lang.org/en/downloads/
-The trunk of the Ruby source tree can be checked out with the following
-command:
+You can download release packages and the snapshot of the repository. If you want to
+download whole versions of Ruby, please visit https://www.ruby-lang.org/en/downloads/releases/.
- $ svn co http://svn.ruby-lang.org/repos/ruby/trunk/ ruby
+### Download with Git
-Or if you are using git then use the following command:
+The mirror of the Ruby source tree can be checked out with the following command:
- $ git clone git://github.com/ruby/ruby.git
+ $ git clone https://github.com/ruby/ruby.git
-There are some other branches under development. Try the following command
+There are some other branches under development. Try the following command
to see the list of branches:
- $ svn ls http://svn.ruby-lang.org/repos/ruby/branches/
+ $ git ls-remote https://github.com/ruby/ruby.git
-Or if you are using git then use the following command:
+You may also want to use https://git.ruby-lang.org/ruby.git (actual master of Ruby source)
+if you are a committer.
- $ git ls-remote git://github.com/ruby/ruby.git
+## How to build
+
+See [Building Ruby](https://docs.ruby-lang.org/en/master/contributing/building_ruby_md.html)
## Ruby home page
-The URL of the Ruby home page is:
+https://www.ruby-lang.org/
+
+## Documentation
-http://www.ruby-lang.org/
+- [English](https://docs.ruby-lang.org/en/master/index.html)
+- [Japanese](https://docs.ruby-lang.org/ja/master/index.html)
## Mailing list
-There is a mailing list to talk about Ruby. To subscribe this list, please
+There is a mailing list to discuss Ruby. To subscribe to this list, please
send the following phrase:
- subscribe
-
-in the mail body (not subject) to the address
-<mailto:ruby-talk-request@ruby-lang.org>.
-
-## How to compile and install
-
-This is what you need to do to compile and install Ruby:
-
-1. If you want to use Microsoft Visual C++ to compile ruby, read
- win32/README.win32 instead of this document.
-
-2. If `./configure` does not exist or is older than configure.in, run
- `autoconf` to (re)generate configure.
-
-3. Run `./configure`, which will generate `config.h` and `Makefile`.
-
- Some C compiler flags may be added by default depending on your
- environment. Specify `optflags=..` and `warnflags=..` as necessary to
- override them.
-
-4. Edit `defines.h` if you need. Usually this step will not be needed.
-
-5. Remove comment mark(`#`) before the module names from `ext/Setup` (or add
- module names if not present), if you want to link modules statically.
+ join
- If you don't want to compile non static extension modules (probably on
- architectures which do not allow dynamic loading), remove comment mark
- from the line "`#option nodynamic`" in `ext/Setup`.
+in the mail subject (not body) to the address [ruby-talk-request@ml.ruby-lang.org].
- Usually this step will not be needed.
-
-6. Run `make`.
-
-7. Optionally, run '`make check`' to check whether the compiled Ruby
- interpreter works well. If you see the message "`check succeeded`", your
- ruby works as it should (hopefully).
-
-8. Run '`make install`'
-
- This command will create following directories and install files onto
- them.
-
- * `${DESTDIR}${prefix}/bin`
- * `${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}`
- * `${DESTDIR}${prefix}/lib`
- * `${DESTDIR}${prefix}/lib/ruby`
- * `${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}`
- * `${DESTDIR}${prefix}/lib/ruby/site_ruby`
- * `${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}`
- * `${DESTDIR}${prefix}/lib/ruby/vendor_ruby`
- * `${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}`
- * `${DESTDIR}${prefix}/lib/ruby/gems/${MAJOR}.${MINOR}.${TEENY}`
- * `${DESTDIR}${prefix}/share/man/man1`
- * `${DESTDIR}${prefix}/share/ri/${MAJOR}.${MINOR}.${TEENY}/system`
-
-
- If Ruby's API version is '*x.y.z*', the `${MAJOR}` is '*x*', the
- `${MINOR}` is '*y*', and the `${TEENY}` is '*z*'.
-
- **NOTE**: teeny of the API version may be different from one of Ruby's
- program version
-
- You may have to be a super user to install ruby.
-
-
-If you fail to compile ruby, please send the detailed error report with the
-error log and machine/OS type, to help others.
-
-Some extension libraries may not get compiled because of lack of necessary
-external libraries and/or headers, then you will need to run '`make distclean-ext`'
-to remove old configuration after installing them in such case.
+[ruby-talk-request@ml.ruby-lang.org]: mailto:ruby-talk-request@ml.ruby-lang.org?subject=join
## Copying
-See the file `COPYING`.
+See the file [COPYING](rdoc-ref:COPYING).
## Feedback
-Questions about the Ruby language can be asked on the Ruby-Talk mailing list
-(http://www.ruby-lang.org/en/community/mailing-lists) or on websites like
-(http://stackoverflow.com).
-
-Bug reports should be filed at http://bugs.ruby-lang.org. Read [HowToReport] for more information.
-
-[HowToReport]: https://bugs.ruby-lang.org/projects/ruby/wiki/HowToReport
+Questions about the Ruby language can be asked on the [Ruby-Talk](https://www.ruby-lang.org/en/community/mailing-lists) mailing list
+or on websites like https://stackoverflow.com.
-##Contributing
+Bugs should be reported at https://bugs.ruby-lang.org. Read ["Reporting Issues"](https://docs.ruby-lang.org/en/master/contributing/reporting_issues_md.html) for more information.
-See the file `CONTRIBUTING.md`
+## Contributing
+See ["Contributing to Ruby"](https://docs.ruby-lang.org/en/master/contributing/contributing_md.html), which includes setup and build instructions.
## The Author
-Ruby was originally designed and developed by Yukihiro Matsumoto (Matz) in
-1995.
+Ruby was originally designed and developed by Yukihiro Matsumoto (Matz) in 1995.
-<mailto:matz@ruby-lang.org>
+<matz@ruby-lang.org>
diff --git a/acinclude.m4 b/acinclude.m4
deleted file mode 100644
index 99b24e6d93..0000000000
--- a/acinclude.m4
+++ /dev/null
@@ -1,46 +0,0 @@
-# -*- autoconf -*-
-
-AC_DEFUN([_COLORIZE_RESULT_PREPARE], [
- msg_checking= msg_result_yes= msg_result_no= msg_result_other= msg_reset=
- AS_IF([test "x${CONFIGURE_TTY}" = xyes -o -t 1], [
- msg_begin="`tput smso 2>/dev/null`"
- AS_CASE(["$msg_begin"], ['@<:@'*m],
- [msg_begin="`echo "$msg_begin" | sed ['s/[0-9]*m$//']`"
- msg_checking="${msg_begin}33m"
- AS_IF([test ${TEST_COLORS:+set}], [
- msg_result_yes=[`expr ":$TEST_COLORS:" : ".*:pass=\([^:]*\):"`]
- msg_result_no=[`expr ":$TEST_COLORS:" : ".*:fail=\([^:]*\):"`]
- msg_result_other=[`expr ":$TEST_COLORS:" : ".*:skip=\([^:]*\):"`]
- ])
- msg_result_yes="${msg_begin}${msg_result_yes:-32;1}m"
- msg_result_no="${msg_begin}${msg_result_no:-31;1}m"
- msg_result_other="${msg_begin}${msg_result_other:-33;1}m"
- msg_reset="${msg_begin}m"
- ])
- AS_UNSET(msg_begin)
- ])
- AS_REQUIRE_SHELL_FN([colorize_result],
- [AS_FUNCTION_DESCRIBE([colorize_result], [MSG], [Colorize result])],
- [AS_CASE(["$[]1"],
- [yes], [AS_ECHO(["${msg_result_yes}$[]1${msg_reset}]")],
- [no], [AS_ECHO(["${msg_result_no}$[]1${msg_reset}]")],
- [AS_ECHO(["${msg_result_other}$[]1${msg_reset}]")])])
-])
-
-AC_DEFUN([COLORIZE_RESULT], [AC_REQUIRE([_COLORIZE_RESULT_PREPARE])dnl
- AS_LITERAL_IF([$1],
- [m4_case([$1],
- [yes], [AS_ECHO(["${msg_result_yes}$1${msg_reset}"])],
- [no], [AS_ECHO(["${msg_result_no}$1${msg_reset}"])],
- [AS_ECHO(["${msg_result_other}$1${msg_reset}"])])],
- [colorize_result "$1"]) dnl
-])
-
-AC_DEFUN([AC_CHECKING],[dnl
-AC_REQUIRE([_COLORIZE_RESULT_PREPARE])dnl
-AS_MESSAGE([checking ${msg_checking}$1${msg_reset}...])])
-
-AC_DEFUN([AC_MSG_RESULT], [dnl
-{ _AS_ECHO_LOG([result: $1])
-COLORIZE_RESULT([$1]); dnl
-}])
diff --git a/aclocal.m4 b/aclocal.m4
index 56e944be8f..e69de29bb2 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,15 +0,0 @@
-# generated automatically by aclocal 1.15 -*- Autoconf -*-
-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
-
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-m4_include([acinclude.m4])
diff --git a/addr2line.c b/addr2line.c
index c8faf48d62..19a6a425c1 100644
--- a/addr2line.c
+++ b/addr2line.c
@@ -8,14 +8,30 @@
**********************************************************************/
-#include "ruby/config.h"
+#if defined(__clang__) && defined(__has_warning)
+#if __has_warning("-Wgnu-empty-initializer")
+#pragma clang diagnostic ignored "-Wgnu-empty-initializer"
+#endif
+#if __has_warning("-Wgcc-compat")
+#pragma clang diagnostic ignored "-Wgcc-compat"
+#endif
+#endif
+
+#include "ruby/internal/config.h"
+#include "ruby/defines.h"
#include "ruby/missing.h"
#include "addr2line.h"
#include <stdio.h>
#include <errno.h>
-#ifdef USE_ELF
+#ifdef HAVE_LIBPROC_H
+#include <libproc.h>
+#endif
+
+#include "ruby/internal/stdbool.h"
+
+#if defined(USE_ELF) || defined(HAVE_MACH_O_LOADER_H)
#include <fcntl.h>
#include <limits.h>
@@ -28,19 +44,11 @@
#include <sys/stat.h>
#include <unistd.h>
-#ifdef __OpenBSD__
-#include <elf_abi.h>
-#else
-#include <elf.h>
-#endif
-
/* Make alloca work the best possible way. */
#ifdef __GNUC__
-# ifndef atarist
-# ifndef alloca
-# define alloca __builtin_alloca
-# endif
-# endif /* atarist */
+# ifndef alloca
+# define alloca __builtin_alloca
+# endif
#else
# ifdef HAVE_ALLOCA_H
# include <alloca.h>
@@ -48,35 +56,44 @@
# ifdef _AIX
#pragma alloca
# else
-# ifndef alloca /* predefined by HP cc +Olibcalls */
+# ifndef alloca /* predefined by HP cc +Olibcalls */
void *alloca();
# endif
# endif /* AIX */
-# endif /* HAVE_ALLOCA_H */
+# endif /* HAVE_ALLOCA_H */
+# ifndef UNREACHABLE
+# define UNREACHABLE __builtin_unreachable()
+# endif
+# ifndef UNREACHABLE_RETURN
+# define UNREACHABLE_RETURN(_) __builtin_unreachable()
+# endif
#endif /* __GNUC__ */
+#ifndef UNREACHABLE
+# define UNREACHABLE abort()
+#endif
+#ifndef UNREACHABLE_RETURN
+# define UNREACHABLE_RETURN(_) return (abort(), (_))
+#endif
+
#ifdef HAVE_DLADDR
# include <dlfcn.h>
#endif
-#define DW_LNS_copy 0x01
-#define DW_LNS_advance_pc 0x02
-#define DW_LNS_advance_line 0x03
-#define DW_LNS_set_file 0x04
-#define DW_LNS_set_column 0x05
-#define DW_LNS_negate_stmt 0x06
-#define DW_LNS_set_basic_block 0x07
-#define DW_LNS_const_add_pc 0x08
-#define DW_LNS_fixed_advance_pc 0x09
-#define DW_LNS_set_prologue_end 0x0a /* DWARF3 */
-#define DW_LNS_set_epilogue_begin 0x0b /* DWARF3 */
-#define DW_LNS_set_isa 0x0c /* DWARF3 */
+#ifdef HAVE_MACH_O_LOADER_H
+# include <crt_externs.h>
+# include <mach-o/fat.h>
+# include <mach-o/loader.h>
+# include <mach-o/nlist.h>
+# include <mach-o/stab.h>
+#endif
-/* Line number extended opcode name. */
-#define DW_LNE_end_sequence 0x01
-#define DW_LNE_set_address 0x02
-#define DW_LNE_define_file 0x03
-#define DW_LNE_set_discriminator 0x04 /* DWARF4 */
+#ifdef USE_ELF
+# ifdef __OpenBSD__
+# include <elf_abi.h>
+# else
+# include <elf.h>
+# endif
#ifndef ElfW
# if SIZEOF_VOIDP == 8
@@ -92,13 +109,44 @@ void *alloca();
# define ELF_ST_TYPE ELF32_ST_TYPE
# endif
#endif
+#endif
+
+#ifdef SHF_COMPRESSED
+# if defined(ELFCOMPRESS_ZLIB) && defined(HAVE_LIBZ)
+ /* FreeBSD 11.0 lacks ELFCOMPRESS_ZLIB */
+# include <zlib.h>
+# define SUPPORT_COMPRESSED_DEBUG_LINE
+# endif
+#else /* compatibility with glibc < 2.22 */
+# define SHF_COMPRESSED 0
+#endif
+
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
-int kprintf(const char *fmt, ...);
+#define DW_LNS_copy 0x01
+#define DW_LNS_advance_pc 0x02
+#define DW_LNS_advance_line 0x03
+#define DW_LNS_set_file 0x04
+#define DW_LNS_set_column 0x05
+#define DW_LNS_negate_stmt 0x06
+#define DW_LNS_set_basic_block 0x07
+#define DW_LNS_const_add_pc 0x08
+#define DW_LNS_fixed_advance_pc 0x09
+#define DW_LNS_set_prologue_end 0x0a /* DWARF3 */
+#define DW_LNS_set_epilogue_begin 0x0b /* DWARF3 */
+#define DW_LNS_set_isa 0x0c /* DWARF3 */
+
+/* Line number extended opcode name. */
+#define DW_LNE_end_sequence 0x01
+#define DW_LNE_set_address 0x02
+#define DW_LNE_define_file 0x03
+#define DW_LNE_set_discriminator 0x04 /* DWARF4 */
-typedef struct {
+#define kprintf(...) fprintf(errout, "" __VA_ARGS__)
+
+typedef struct line_info {
const char *dirname;
const char *filename;
const char *path; /* object path */
@@ -107,368 +155,1913 @@ typedef struct {
uintptr_t base_addr;
uintptr_t saddr;
const char *sname; /* function name */
+
+ struct line_info *next;
} line_info_t;
-typedef struct obj_info obj_info_t;
-struct obj_info {
+
+struct dwarf_section {
+ char *ptr;
+ size_t size;
+ uint64_t flags;
+};
+
+typedef struct obj_info {
const char *path; /* object path */
- int fd;
- void *mapped;
+ char *mapped;
size_t mapped_size;
+ void *uncompressed;
uintptr_t base_addr;
- obj_info_t *next;
+ uintptr_t vmaddr;
+ struct dwarf_section debug_abbrev;
+ struct dwarf_section debug_info;
+ struct dwarf_section debug_line;
+ struct dwarf_section debug_ranges;
+ struct dwarf_section debug_str_offsets;
+ struct dwarf_section debug_addr;
+ struct dwarf_section debug_rnglists;
+ struct dwarf_section debug_str;
+ struct dwarf_section debug_line_str;
+ struct obj_info *next;
+} obj_info_t;
+
+#define DWARF_SECTION_COUNT 9
+
+static struct dwarf_section *
+obj_dwarf_section_at(obj_info_t *obj, int n)
+{
+ struct dwarf_section *ary[] = {
+ &obj->debug_abbrev,
+ &obj->debug_info,
+ &obj->debug_line,
+ &obj->debug_ranges,
+ &obj->debug_str_offsets,
+ &obj->debug_addr,
+ &obj->debug_rnglists,
+ &obj->debug_str,
+ &obj->debug_line_str
+ };
+ if (n < 0 || DWARF_SECTION_COUNT <= n) {
+ UNREACHABLE_RETURN(0);
+ }
+ return ary[n];
+}
+
+struct debug_section_definition {
+ const char *name;
+ struct dwarf_section *dwarf;
};
/* Avoid consuming stack as this module may be used from signal handler */
-static char binary_filename[PATH_MAX];
+static char binary_filename[PATH_MAX + 1];
static unsigned long
-uleb128(char **p)
+uleb128(const char **p)
{
unsigned long r = 0;
int s = 0;
for (;;) {
- unsigned char b = *(unsigned char *)(*p)++;
- if (b < 0x80) {
- r += (unsigned long)b << s;
- break;
- }
- r += (b & 0x7f) << s;
- s += 7;
+ unsigned char b = (unsigned char)*(*p)++;
+ if (b < 0x80) {
+ r += (unsigned long)b << s;
+ break;
+ }
+ r += (b & 0x7f) << s;
+ s += 7;
}
return r;
}
static long
-sleb128(char **p)
+sleb128(const char **p)
{
long r = 0;
int s = 0;
for (;;) {
- unsigned char b = *(unsigned char *)(*p)++;
- if (b < 0x80) {
- if (b & 0x40) {
- r -= (0x80 - b) << s;
- }
- else {
- r += (b & 0x3f) << s;
- }
- break;
- }
- r += (b & 0x7f) << s;
- s += 7;
+ unsigned char b = (unsigned char)*(*p)++;
+ if (b < 0x80) {
+ if (b & 0x40) {
+ r -= (0x80 - b) << s;
+ }
+ else {
+ r += (b & 0x3f) << s;
+ }
+ break;
+ }
+ r += (b & 0x7f) << s;
+ s += 7;
}
return r;
}
static const char *
-get_nth_dirname(unsigned long dir, char *p)
+get_nth_dirname(unsigned long dir, const char *p, FILE *errout)
{
if (!dir--) {
- return "";
+ return "";
}
while (dir--) {
- while (*p) p++;
- p++;
- if (!*p) {
- kprintf("Unexpected directory number %lu in %s\n",
- dir, binary_filename);
- return "";
- }
+ while (*p) p++;
+ p++;
+ if (!*p) {
+ kprintf("Unexpected directory number %lu in %s\n",
+ dir, binary_filename);
+ return "";
+ }
}
return p;
}
+static const char *parse_ver5_debug_line_header(
+ const char *p, int idx, uint8_t format,
+ obj_info_t *obj, const char **out_path,
+ uint64_t *out_directory_index, FILE *errout);
+
static void
-fill_filename(int file, char *include_directories, char *filenames,
- line_info_t *line)
+fill_filename(int file, uint8_t format, uint16_t version, const char *include_directories,
+ const char *filenames, line_info_t *line, obj_info_t *obj, FILE *errout)
{
int i;
- char *p = filenames;
- char *filename;
+ const char *p = filenames;
+ const char *filename;
unsigned long dir;
- for (i = 1; i <= file; i++) {
- filename = p;
- if (!*p) {
- /* Need to output binary file name? */
- kprintf("Unexpected file number %d in %s\n",
- file, binary_filename);
- return;
- }
- while (*p) p++;
- p++;
- dir = uleb128(&p);
- /* last modified. */
- uleb128(&p);
- /* size of the file. */
- uleb128(&p);
-
- if (i == file) {
- line->filename = filename;
- line->dirname = get_nth_dirname(dir, include_directories);
- }
+ if (version >= 5) {
+ const char *path;
+ uint64_t directory_index = -1;
+ parse_ver5_debug_line_header(filenames, file, format, obj, &path, &directory_index, errout);
+ line->filename = path;
+ parse_ver5_debug_line_header(include_directories, (int)directory_index, format, obj, &path, NULL, errout);
+ line->dirname = path;
+ }
+ else {
+ for (i = 1; i <= file; i++) {
+ filename = p;
+ if (!*p) {
+#ifndef __APPLE__
+ /* Need to output binary file name? */
+ kprintf("Unexpected file number %d in %s at %tx\n",
+ file, binary_filename, filenames - obj->mapped);
+#endif
+ return;
+ }
+ while (*p) p++;
+ p++;
+ dir = uleb128(&p);
+ /* last modified. */
+ uleb128(&p);
+ /* size of the file. */
+ uleb128(&p);
+
+ if (i == file) {
+ line->filename = filename;
+ line->dirname = get_nth_dirname(dir, include_directories, errout);
+ }
+ }
}
}
static void
fill_line(int num_traces, void **traces, uintptr_t addr, int file, int line,
- char *include_directories, char *filenames,
- obj_info_t *obj, line_info_t *lines, int offset)
+ uint8_t format, uint16_t version, const char *include_directories, const char *filenames,
+ obj_info_t *obj, line_info_t *lines, int offset, FILE *errout)
{
int i;
- addr += obj->base_addr;
+ addr += obj->base_addr - obj->vmaddr;
for (i = offset; i < num_traces; i++) {
- uintptr_t a = (uintptr_t)traces[i];
- /* We assume one line code doesn't result >100 bytes of native code.
+ uintptr_t a = (uintptr_t)traces[i];
+ /* We assume one line code doesn't result >100 bytes of native code.
We may want more reliable way eventually... */
- if (addr < a && a < addr + 100) {
- fill_filename(file, include_directories, filenames, &lines[i]);
- lines[i].line = line;
- }
+ if (addr < a && a < addr + 100) {
+ fill_filename(file, format, version, include_directories, filenames, &lines[i], obj, errout);
+ lines[i].line = line;
+ }
}
}
-static void
-parse_debug_line_cu(int num_traces, void **traces, char **debug_line,
- obj_info_t *obj, line_info_t *lines, int offset)
-{
- char *p, *cu_end, *cu_start, *include_directories, *filenames;
- unsigned long unit_length;
- int default_is_stmt, line_base;
- unsigned int header_length, minimum_instruction_length, line_range,
- opcode_base;
- /* unsigned char *standard_opcode_lengths; */
-
- /* The registers. */
- unsigned long addr = 0;
- unsigned int file = 1;
- unsigned int line = 1;
- /* unsigned int column = 0; */
- int is_stmt;
- /* int basic_block = 0; */
- /* int end_sequence = 0; */
- /* int prologue_end = 0; */
- /* int epilogue_begin = 0; */
- /* unsigned int isa = 0; */
-
- p = *debug_line;
+struct LineNumberProgramHeader {
+ uint64_t unit_length;
+ uint16_t version;
+ uint8_t format; /* 4 or 8 */
+ uint64_t header_length;
+ uint8_t minimum_instruction_length;
+ uint8_t maximum_operations_per_instruction;
+ uint8_t default_is_stmt;
+ int8_t line_base;
+ uint8_t line_range;
+ uint8_t opcode_base;
+ /* uint8_t standard_opcode_lengths[opcode_base-1]; */
+ const char *include_directories;
+ const char *filenames;
+ const char *cu_start;
+ const char *cu_end;
+};
- unit_length = *(unsigned int *)p;
- p += sizeof(unsigned int);
- if (unit_length == 0xffffffff) {
- unit_length = *(unsigned long *)p;
- p += sizeof(unsigned long);
+static int
+parse_debug_line_header(obj_info_t *obj, const char **pp, struct LineNumberProgramHeader *header, FILE *errout)
+{
+ const char *p = *pp;
+ header->unit_length = *(uint32_t *)p;
+ p += sizeof(uint32_t);
+
+ header->format = 4;
+ if (header->unit_length == 0xffffffff) {
+ header->unit_length = *(uint64_t *)p;
+ p += sizeof(uint64_t);
+ header->format = 8;
}
- cu_end = p + unit_length;
+ header->cu_end = p + header->unit_length;
- /*dwarf_version = *(unsigned short *)p;*/
- p += 2;
+ header->version = *(uint16_t *)p;
+ p += sizeof(uint16_t);
+ if (header->version > 5) return -1;
- header_length = *(unsigned int *)p;
- p += sizeof(unsigned int);
+ if (header->version >= 5) {
+ /* address_size = *(uint8_t *)p++; */
+ /* segment_selector_size = *(uint8_t *)p++; */
+ p += 2;
+ }
- cu_start = p + header_length;
+ header->header_length = header->format == 4 ? *(uint32_t *)p : *(uint64_t *)p;
+ p += header->format;
+ header->cu_start = p + header->header_length;
- minimum_instruction_length = *(unsigned char *)p;
- p++;
+ header->minimum_instruction_length = *(uint8_t *)p++;
- is_stmt = default_is_stmt = *(unsigned char *)p;
- p++;
+ if (header->version >= 4) {
+ /* maximum_operations_per_instruction = *(uint8_t *)p; */
+ if (*p != 1) return -1; /* For non-VLIW architectures, this field is 1 */
+ p++;
+ }
- line_base = *(signed char *)p;
- p++;
+ header->default_is_stmt = *(uint8_t *)p++;
+ header->line_base = *(int8_t *)p++;
+ header->line_range = *(uint8_t *)p++;
+ header->opcode_base = *(uint8_t *)p++;
+ /* header->standard_opcode_lengths = (uint8_t *)p - 1; */
+ p += header->opcode_base - 1;
+
+ if (header->version >= 5) {
+ header->include_directories = p;
+ p = parse_ver5_debug_line_header(p, -1, header->format, obj, NULL, NULL, errout);
+ header->filenames = p;
+ }
+ else {
+ header->include_directories = p;
- line_range = *(unsigned char *)p;
- p++;
+ /* temporary measure for compress-debug-sections */
+ if (p >= header->cu_end) return -1;
- opcode_base = *(unsigned char *)p;
- p++;
+ /* skip include directories */
+ while (*p) {
+ p = memchr(p, '\0', header->cu_end - p);
+ if (!p) return -1;
+ p++;
+ }
+ p++;
- /* standard_opcode_lengths = (unsigned char *)p - 1; */
- p += opcode_base - 1;
+ header->filenames = p;
+ }
- include_directories = p;
+ *pp = header->cu_start;
- /* skip include directories */
- while (*p) {
- while (*p) p++;
- p++;
- }
- p++;
+ return 0;
+}
- filenames = p;
+static int
+parse_debug_line_cu(int num_traces, void **traces, const char **debug_line,
+ obj_info_t *obj, line_info_t *lines, int offset, FILE *errout)
+{
+ const char *p = (const char *)*debug_line;
+ struct LineNumberProgramHeader header;
- p = cu_start;
+ /* The registers. */
+ unsigned long addr = 0;
+ unsigned int file = 1;
+ unsigned int line = 1;
+ /* unsigned int column = 0; */
+ int is_stmt;
+ /* int basic_block = 0; */
+ /* int end_sequence = 0; */
+ /* int prologue_end = 0; */
+ /* int epilogue_begin = 0; */
+ /* unsigned int isa = 0; */
-#define FILL_LINE() \
- do { \
- fill_line(num_traces, traces, addr, file, line, \
- include_directories, filenames, \
- obj, lines, offset); \
- /*basic_block = prologue_end = epilogue_begin = 0;*/ \
+ if (parse_debug_line_header(obj, &p, &header, errout))
+ return -1;
+ is_stmt = header.default_is_stmt;
+
+#define FILL_LINE() \
+ do { \
+ fill_line(num_traces, traces, addr, file, line, \
+ header.format, \
+ header.version, \
+ header.include_directories, \
+ header.filenames, \
+ obj, lines, offset, errout); \
+ /*basic_block = prologue_end = epilogue_begin = 0;*/ \
} while (0)
- while (p < cu_end) {
- unsigned long a;
- unsigned char op = *p++;
- switch (op) {
- case DW_LNS_copy:
- FILL_LINE();
- break;
- case DW_LNS_advance_pc:
- a = uleb128(&p);
- addr += a;
- break;
- case DW_LNS_advance_line: {
- long a = sleb128(&p);
- line += a;
- break;
- }
- case DW_LNS_set_file:
- file = (unsigned int)uleb128(&p);
- break;
- case DW_LNS_set_column:
- /*column = (unsigned int)*/(void)uleb128(&p);
- break;
- case DW_LNS_negate_stmt:
- is_stmt = !is_stmt;
- break;
- case DW_LNS_set_basic_block:
- /*basic_block = 1; */
- break;
- case DW_LNS_const_add_pc:
- a = ((255 - opcode_base) / line_range) *
- minimum_instruction_length;
- addr += a;
- break;
- case DW_LNS_fixed_advance_pc:
- a = *(unsigned char *)p++;
- addr += a;
- break;
- case DW_LNS_set_prologue_end:
- /* prologue_end = 1; */
- break;
- case DW_LNS_set_epilogue_begin:
- /* epilogue_begin = 1; */
- break;
- case DW_LNS_set_isa:
- /* isa = (unsigned int)*/(void)uleb128(&p);
- break;
- case 0:
- a = *(unsigned char *)p++;
- op = *p++;
- switch (op) {
- case DW_LNE_end_sequence:
- /* end_sequence = 1; */
- FILL_LINE();
- addr = 0;
- file = 1;
- line = 1;
- /* column = 0; */
- is_stmt = default_is_stmt;
- /* end_sequence = 0; */
- /* isa = 0; */
- break;
- case DW_LNE_set_address:
- addr = *(unsigned long *)p;
- p += sizeof(unsigned long);
- break;
- case DW_LNE_define_file:
- kprintf("Unsupported operation in %s\n",
- binary_filename);
- break;
- case DW_LNE_set_discriminator:
- /* TODO:currently ignore */
- uleb128(&p);
- break;
- default:
- kprintf("Unknown extended opcode: %d in %s\n",
- op, binary_filename);
- }
- break;
- default: {
- unsigned long addr_incr;
- unsigned long line_incr;
- a = op - opcode_base;
- addr_incr = (a / line_range) * minimum_instruction_length;
- line_incr = line_base + (a % line_range);
- addr += (unsigned int)addr_incr;
- line += (unsigned int)line_incr;
- FILL_LINE();
- }
- }
- }
- *debug_line = p;
+ while (p < header.cu_end) {
+ unsigned long a;
+ unsigned char op = *p++;
+ switch (op) {
+ case DW_LNS_copy:
+ FILL_LINE();
+ break;
+ case DW_LNS_advance_pc:
+ a = uleb128(&p) * header.minimum_instruction_length;
+ addr += a;
+ break;
+ case DW_LNS_advance_line: {
+ long a = sleb128(&p);
+ line += a;
+ break;
+ }
+ case DW_LNS_set_file:
+ file = (unsigned int)uleb128(&p);
+ break;
+ case DW_LNS_set_column:
+ /*column = (unsigned int)*/(void)uleb128(&p);
+ break;
+ case DW_LNS_negate_stmt:
+ is_stmt = !is_stmt;
+ break;
+ case DW_LNS_set_basic_block:
+ /*basic_block = 1; */
+ break;
+ case DW_LNS_const_add_pc:
+ a = ((255UL - header.opcode_base) / header.line_range) *
+ header.minimum_instruction_length;
+ addr += a;
+ break;
+ case DW_LNS_fixed_advance_pc:
+ a = *(uint16_t *)p;
+ p += sizeof(uint16_t);
+ addr += a;
+ break;
+ case DW_LNS_set_prologue_end:
+ /* prologue_end = 1; */
+ break;
+ case DW_LNS_set_epilogue_begin:
+ /* epilogue_begin = 1; */
+ break;
+ case DW_LNS_set_isa:
+ /* isa = (unsigned int)*/(void)uleb128(&p);
+ break;
+ case 0:
+ a = uleb128(&p);
+ op = *p++;
+ switch (op) {
+ case DW_LNE_end_sequence:
+ /* end_sequence = 1; */
+ FILL_LINE();
+ addr = 0;
+ file = 1;
+ line = 1;
+ /* column = 0; */
+ is_stmt = header.default_is_stmt;
+ /* end_sequence = 0; */
+ /* isa = 0; */
+ break;
+ case DW_LNE_set_address:
+ addr = *(unsigned long *)p;
+ p += sizeof(unsigned long);
+ break;
+ case DW_LNE_define_file:
+ kprintf("Unsupported operation in %s\n",
+ binary_filename);
+ break;
+ case DW_LNE_set_discriminator:
+ /* TODO:currently ignore */
+ uleb128(&p);
+ break;
+ default:
+ kprintf("Unknown extended opcode: %d in %s\n",
+ op, binary_filename);
+ }
+ break;
+ default: {
+ uint8_t adjusted_opcode = op - header.opcode_base;
+ uint8_t operation_advance = adjusted_opcode / header.line_range;
+ /* NOTE: this code doesn't support VLIW */
+ addr += operation_advance * header.minimum_instruction_length;
+ line += header.line_base + (adjusted_opcode % header.line_range);
+ FILL_LINE();
+ }
+ }
+ }
+ *debug_line = (char *)p;
+ return 0;
}
-static void
+static int
parse_debug_line(int num_traces, void **traces,
- char *debug_line, unsigned long size,
- obj_info_t *obj, line_info_t *lines, int offset)
+ const char *debug_line, unsigned long size,
+ obj_info_t *obj, line_info_t *lines, int offset, FILE *errout)
{
- char *debug_line_end = debug_line + size;
+ const char *debug_line_end = debug_line + size;
while (debug_line < debug_line_end) {
- parse_debug_line_cu(num_traces, traces, &debug_line, obj, lines, offset);
+ if (parse_debug_line_cu(num_traces, traces, &debug_line, obj, lines, offset, errout))
+ return -1;
}
if (debug_line != debug_line_end) {
- kprintf("Unexpected size of .debug_line in %s\n",
- binary_filename);
+ kprintf("Unexpected size of .debug_line in %s\n",
+ binary_filename);
}
+ return 0;
}
/* read file and fill lines */
static uintptr_t
fill_lines(int num_traces, void **traces, int check_debuglink,
- obj_info_t **objp, line_info_t *lines, int offset);
+ obj_info_t **objp, line_info_t *lines, int offset, FILE *errout);
static void
-append_obj(obj_info_t **objp) {
+append_obj(obj_info_t **objp)
+{
obj_info_t *newobj = calloc(1, sizeof(obj_info_t));
if (*objp) (*objp)->next = newobj;
*objp = newobj;
}
+#ifdef USE_ELF
+/* Ideally we should check 4 paths to follow gnu_debuglink:
+ *
+ * - /usr/lib/debug/.build-id/ab/cdef1234.debug
+ * - /usr/bin/ruby.debug
+ * - /usr/bin/.debug/ruby.debug
+ * - /usr/lib/debug/usr/bin/ruby.debug.
+ *
+ * but we handle only two cases for now as the two formats are
+ * used by some linux distributions.
+ *
+ * See GDB's info for detail.
+ * https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html
+ */
+
+// check the path pattern of "/usr/lib/debug/usr/bin/ruby.debug"
static void
-follow_debuglink(char *debuglink, int num_traces, void **traces,
- obj_info_t **objp, line_info_t *lines, int offset)
+follow_debuglink(const char *debuglink, int num_traces, void **traces,
+ obj_info_t **objp, line_info_t *lines, int offset, FILE *errout)
{
- /* Ideally we should check 4 paths to follow gnu_debuglink,
- but we handle only one case for now as this format is used
- by some linux distributions. See GDB's info for detail. */
static const char global_debug_dir[] = "/usr/lib/debug";
- char *p, *subdir;
+ const size_t global_debug_dir_len = sizeof(global_debug_dir) - 1;
+ char *p;
obj_info_t *o1 = *objp, *o2;
+ size_t len;
p = strrchr(binary_filename, '/');
if (!p) {
- return;
+ return;
}
p[1] = '\0';
- subdir = (char *)alloca(strlen(binary_filename) + 1);
- strcpy(subdir, binary_filename);
- strcpy(binary_filename, global_debug_dir);
- strlcat(binary_filename, subdir, PATH_MAX);
- strlcat(binary_filename, debuglink, PATH_MAX);
+ len = strlen(binary_filename);
+ if (len >= PATH_MAX - global_debug_dir_len)
+ len = PATH_MAX - global_debug_dir_len - 1;
+ memmove(binary_filename + global_debug_dir_len, binary_filename, len);
+ memcpy(binary_filename, global_debug_dir, global_debug_dir_len);
+ len += global_debug_dir_len;
+ strlcpy(binary_filename + len, debuglink, PATH_MAX - len);
+
+ append_obj(objp);
+ o2 = *objp;
+ o2->base_addr = o1->base_addr;
+ o2->path = o1->path;
+ fill_lines(num_traces, traces, 0, objp, lines, offset, errout);
+}
+
+// check the path pattern of "/usr/lib/debug/.build-id/ab/cdef1234.debug"
+static void
+follow_debuglink_build_id(const char *build_id, size_t build_id_size, int num_traces, void **traces,
+ obj_info_t **objp, line_info_t *lines, int offset, FILE *errout)
+{
+ static const char global_debug_dir[] = "/usr/lib/debug/.build-id/";
+ static const char debug_suffix[] = ".debug";
+ const size_t global_debug_dir_len = sizeof(global_debug_dir) - 1;
+ char *p;
+ obj_info_t *o1 = *objp, *o2;
+ size_t i;
+
+ if (PATH_MAX < global_debug_dir_len + build_id_size * 2 + sizeof(debug_suffix)) return;
+
+ memcpy(binary_filename, global_debug_dir, global_debug_dir_len);
+ p = binary_filename + global_debug_dir_len;
+ for (i = 0; i < build_id_size; i++) {
+ static const char tbl[] = "0123456789abcdef";
+ unsigned char n = build_id[i];
+ *p++ = tbl[n / 16];
+ *p++ = tbl[n % 16];
+ if (i == 0) *p++ = '/';
+ }
+ memcpy(p, debug_suffix, sizeof(debug_suffix));
append_obj(objp);
o2 = *objp;
o2->base_addr = o1->base_addr;
o2->path = o1->path;
- fill_lines(num_traces, traces, 0, objp, lines, offset);
+ fill_lines(num_traces, traces, 0, objp, lines, offset, errout);
+}
+#endif
+
+enum
+{
+ DW_TAG_compile_unit = 0x11,
+ DW_TAG_inlined_subroutine = 0x1d,
+ DW_TAG_subprogram = 0x2e,
+};
+
+/* Attributes encodings */
+enum
+{
+ DW_AT_sibling = 0x01,
+ DW_AT_location = 0x02,
+ DW_AT_name = 0x03,
+ /* Reserved 0x04 */
+ /* Reserved 0x05 */
+ /* Reserved 0x06 */
+ /* Reserved 0x07 */
+ /* Reserved 0x08 */
+ DW_AT_ordering = 0x09,
+ /* Reserved 0x0a */
+ DW_AT_byte_size = 0x0b,
+ /* Reserved 0x0c */
+ DW_AT_bit_size = 0x0d,
+ /* Reserved 0x0e */
+ /* Reserved 0x0f */
+ DW_AT_stmt_list = 0x10,
+ DW_AT_low_pc = 0x11,
+ DW_AT_high_pc = 0x12,
+ DW_AT_language = 0x13,
+ /* Reserved 0x14 */
+ DW_AT_discr = 0x15,
+ DW_AT_discr_value = 0x16,
+ DW_AT_visibility = 0x17,
+ DW_AT_import = 0x18,
+ DW_AT_string_length = 0x19,
+ DW_AT_common_reference = 0x1a,
+ DW_AT_comp_dir = 0x1b,
+ DW_AT_const_value = 0x1c,
+ DW_AT_containing_type = 0x1d,
+ DW_AT_default_value = 0x1e,
+ /* Reserved 0x1f */
+ DW_AT_inline = 0x20,
+ DW_AT_is_optional = 0x21,
+ DW_AT_lower_bound = 0x22,
+ /* Reserved 0x23 */
+ /* Reserved 0x24 */
+ DW_AT_producer = 0x25,
+ /* Reserved 0x26 */
+ DW_AT_prototyped = 0x27,
+ /* Reserved 0x28 */
+ /* Reserved 0x29 */
+ DW_AT_return_addr = 0x2a,
+ /* Reserved 0x2b */
+ DW_AT_start_scope = 0x2c,
+ /* Reserved 0x2d */
+ DW_AT_bit_stride = 0x2e,
+ DW_AT_upper_bound = 0x2f,
+ /* Reserved 0x30 */
+ DW_AT_abstract_origin = 0x31,
+ DW_AT_accessibility = 0x32,
+ DW_AT_address_class = 0x33,
+ DW_AT_artificial = 0x34,
+ DW_AT_base_types = 0x35,
+ DW_AT_calling_convention = 0x36,
+ DW_AT_count = 0x37,
+ DW_AT_data_member_location = 0x38,
+ DW_AT_decl_column = 0x39,
+ DW_AT_decl_file = 0x3a,
+ DW_AT_decl_line = 0x3b,
+ DW_AT_declaration = 0x3c,
+ DW_AT_discr_list = 0x3d,
+ DW_AT_encoding = 0x3e,
+ DW_AT_external = 0x3f,
+ DW_AT_frame_base = 0x40,
+ DW_AT_friend = 0x41,
+ DW_AT_identifier_case = 0x42,
+ /* Reserved 0x43 */
+ DW_AT_namelist_item = 0x44,
+ DW_AT_priority = 0x45,
+ DW_AT_segment = 0x46,
+ DW_AT_specification = 0x47,
+ DW_AT_static_link = 0x48,
+ DW_AT_type = 0x49,
+ DW_AT_use_location = 0x4a,
+ DW_AT_variable_parameter = 0x4b,
+ DW_AT_virtuality = 0x4c,
+ DW_AT_vtable_elem_location = 0x4d,
+ DW_AT_allocated = 0x4e,
+ DW_AT_associated = 0x4f,
+ DW_AT_data_location = 0x50,
+ DW_AT_byte_stride = 0x51,
+ DW_AT_entry_pc = 0x52,
+ DW_AT_use_UTF8 = 0x53,
+ DW_AT_extension = 0x54,
+ DW_AT_ranges = 0x55,
+ DW_AT_trampoline = 0x56,
+ DW_AT_call_column = 0x57,
+ DW_AT_call_file = 0x58,
+ DW_AT_call_line = 0x59,
+ DW_AT_description = 0x5a,
+ DW_AT_binary_scale = 0x5b,
+ DW_AT_decimal_scale = 0x5c,
+ DW_AT_small = 0x5d,
+ DW_AT_decimal_sign = 0x5e,
+ DW_AT_digit_count = 0x5f,
+ DW_AT_picture_string = 0x60,
+ DW_AT_mutable = 0x61,
+ DW_AT_threads_scaled = 0x62,
+ DW_AT_explicit = 0x63,
+ DW_AT_object_pointer = 0x64,
+ DW_AT_endianity = 0x65,
+ DW_AT_elemental = 0x66,
+ DW_AT_pure = 0x67,
+ DW_AT_recursive = 0x68,
+ DW_AT_signature = 0x69,
+ DW_AT_main_subprogram = 0x6a,
+ DW_AT_data_bit_offset = 0x6b,
+ DW_AT_const_expr = 0x6c,
+ DW_AT_enum_class = 0x6d,
+ DW_AT_linkage_name = 0x6e,
+ DW_AT_string_length_bit_size = 0x6f,
+ DW_AT_string_length_byte_size = 0x70,
+ DW_AT_rank = 0x71,
+ DW_AT_str_offsets_base = 0x72,
+ DW_AT_addr_base = 0x73,
+ DW_AT_rnglists_base = 0x74,
+ /* Reserved 0x75 */
+ DW_AT_dwo_name = 0x76,
+ DW_AT_reference = 0x77,
+ DW_AT_rvalue_reference = 0x78,
+ DW_AT_macros = 0x79,
+ DW_AT_call_all_calls = 0x7a,
+ DW_AT_call_all_source_calls = 0x7b,
+ DW_AT_call_all_tail_calls = 0x7c,
+ DW_AT_call_return_pc = 0x7d,
+ DW_AT_call_value = 0x7e,
+ DW_AT_call_origin = 0x7f,
+ DW_AT_call_parameter = 0x80,
+ DW_AT_call_pc = 0x81,
+ DW_AT_call_tail_call = 0x82,
+ DW_AT_call_target = 0x83,
+ DW_AT_call_target_clobbered = 0x84,
+ DW_AT_call_data_location = 0x85,
+ DW_AT_call_data_value = 0x86,
+ DW_AT_noreturn = 0x87,
+ DW_AT_alignment = 0x88,
+ DW_AT_export_symbols = 0x89,
+ DW_AT_deleted = 0x8a,
+ DW_AT_defaulted = 0x8b,
+ DW_AT_loclists_base = 0x8c,
+ DW_AT_lo_user = 0x2000,
+ DW_AT_hi_user = 0x3fff
+};
+
+/* Attribute form encodings */
+enum
+{
+ DW_FORM_addr = 0x01,
+ /* Reserved 0x02 */
+ DW_FORM_block2 = 0x03,
+ DW_FORM_block4 = 0x04,
+ DW_FORM_data2 = 0x05,
+ DW_FORM_data4 = 0x06,
+ DW_FORM_data8 = 0x07,
+ DW_FORM_string = 0x08,
+ DW_FORM_block = 0x09,
+ DW_FORM_block1 = 0x0a,
+ DW_FORM_data1 = 0x0b,
+ DW_FORM_flag = 0x0c,
+ DW_FORM_sdata = 0x0d,
+ DW_FORM_strp = 0x0e,
+ DW_FORM_udata = 0x0f,
+ DW_FORM_ref_addr = 0x10,
+ DW_FORM_ref1 = 0x11,
+ DW_FORM_ref2 = 0x12,
+ DW_FORM_ref4 = 0x13,
+ DW_FORM_ref8 = 0x14,
+ DW_FORM_ref_udata = 0x15,
+ DW_FORM_indirect = 0x16,
+ DW_FORM_sec_offset = 0x17,
+ DW_FORM_exprloc = 0x18,
+ DW_FORM_flag_present = 0x19,
+ DW_FORM_strx = 0x1a,
+ DW_FORM_addrx = 0x1b,
+ DW_FORM_ref_sup4 = 0x1c,
+ DW_FORM_strp_sup = 0x1d,
+ DW_FORM_data16 = 0x1e,
+ DW_FORM_line_strp = 0x1f,
+ DW_FORM_ref_sig8 = 0x20,
+ DW_FORM_implicit_const = 0x21,
+ DW_FORM_loclistx = 0x22,
+ DW_FORM_rnglistx = 0x23,
+ DW_FORM_ref_sup8 = 0x24,
+ DW_FORM_strx1 = 0x25,
+ DW_FORM_strx2 = 0x26,
+ DW_FORM_strx3 = 0x27,
+ DW_FORM_strx4 = 0x28,
+ DW_FORM_addrx1 = 0x29,
+ DW_FORM_addrx2 = 0x2a,
+ DW_FORM_addrx3 = 0x2b,
+ DW_FORM_addrx4 = 0x2c,
+
+ /* GNU extensions for referring to .gnu_debugaltlink dwz-compressed info */
+ DW_FORM_GNU_ref_alt = 0x1f20,
+ DW_FORM_GNU_strp_alt = 0x1f21
+};
+
+/* Range list entry encodings */
+enum {
+ DW_RLE_end_of_list = 0x00,
+ DW_RLE_base_addressx = 0x01,
+ DW_RLE_startx_endx = 0x02,
+ DW_RLE_startx_length = 0x03,
+ DW_RLE_offset_pair = 0x04,
+ DW_RLE_base_address = 0x05,
+ DW_RLE_start_end = 0x06,
+ DW_RLE_start_length = 0x07
+};
+
+enum {
+ VAL_none = 0,
+ VAL_cstr = 1,
+ VAL_data = 2,
+ VAL_uint = 3,
+ VAL_int = 4,
+ VAL_addr = 5
+};
+
+# define ABBREV_TABLE_SIZE 256
+typedef struct {
+ obj_info_t *obj;
+ const char *file;
+ uint8_t current_version;
+ const char *current_cu;
+ uint64_t current_low_pc;
+ uint64_t current_str_offsets_base;
+ uint64_t current_addr_base;
+ uint64_t current_rnglists_base;
+ const char *debug_line_cu_end;
+ uint8_t debug_line_format;
+ uint16_t debug_line_version;
+ const char *debug_line_files;
+ const char *debug_line_directories;
+ const char *p;
+ const char *cu_end;
+ const char *pend;
+ const char *q0;
+ const char *q;
+ int format; // 4 or 8
+ uint8_t address_size;
+ int level;
+ const char *abbrev_table[ABBREV_TABLE_SIZE];
+} DebugInfoReader;
+
+typedef struct {
+ ptrdiff_t pos;
+ int tag;
+ int has_children;
+} DIE;
+
+typedef struct {
+ union {
+ const char *ptr;
+ uint64_t uint64;
+ int64_t int64;
+ uint64_t addr_idx;
+ } as;
+ uint64_t off;
+ uint64_t at;
+ uint64_t form;
+ size_t size;
+ int type;
+} DebugInfoValue;
+
+#if defined(WORDS_BIGENDIAN)
+#define MERGE_2INTS(a,b,sz) (((uint64_t)(a)<<sz)|(b))
+#else
+#define MERGE_2INTS(a,b,sz) (((uint64_t)(b)<<sz)|(a))
+#endif
+
+static uint16_t
+get_uint16(const uint8_t *p)
+{
+ return (uint16_t)MERGE_2INTS(p[0],p[1],8);
+}
+
+static uint32_t
+get_uint32(const uint8_t *p)
+{
+ return (uint32_t)MERGE_2INTS(get_uint16(p),get_uint16(p+2),16);
+}
+
+static uint64_t
+get_uint64(const uint8_t *p)
+{
+ return MERGE_2INTS(get_uint32(p),get_uint32(p+4),32);
+}
+
+static uint8_t
+read_uint8(const char **ptr)
+{
+ const char *p = *ptr;
+ *ptr = (p + 1);
+ return (uint8_t)*p;
+}
+
+static uint16_t
+read_uint16(const char **ptr)
+{
+ const char *p = *ptr;
+ *ptr = (p + 2);
+ return get_uint16((const uint8_t *)p);
+}
+
+static uint32_t
+read_uint24(const char **ptr)
+{
+ const char *p = *ptr;
+ *ptr = (p + 3);
+ return ((uint8_t)*p << 16) | get_uint16((const uint8_t *)p+1);
+}
+
+static uint32_t
+read_uint32(const char **ptr)
+{
+ const char *p = *ptr;
+ *ptr = (p + 4);
+ return get_uint32((const uint8_t *)p);
+}
+
+static uint64_t
+read_uint64(const char **ptr)
+{
+ const unsigned char *p = (const unsigned char *)*ptr;
+ *ptr = (char *)(p + 8);
+ return get_uint64(p);
+}
+
+static uintptr_t
+read_uintptr(const char **ptr)
+{
+ const unsigned char *p = (const unsigned char *)*ptr;
+ *ptr = (char *)(p + SIZEOF_VOIDP);
+#if SIZEOF_VOIDP == 8
+ return get_uint64(p);
+#else
+ return get_uint32(p);
+#endif
+}
+
+static uint64_t
+read_uint(DebugInfoReader *reader)
+{
+ if (reader->format == 4) {
+ return read_uint32(&reader->p);
+ } else { /* 64 bit */
+ return read_uint64(&reader->p);
+ }
+}
+
+static uint64_t
+read_uleb128(DebugInfoReader *reader)
+{
+ return uleb128(&reader->p);
+}
+
+static int64_t
+read_sleb128(DebugInfoReader *reader)
+{
+ return sleb128(&reader->p);
+}
+
+static void
+debug_info_reader_init(DebugInfoReader *reader, obj_info_t *obj)
+{
+ reader->file = obj->mapped;
+ reader->obj = obj;
+ reader->p = obj->debug_info.ptr;
+ reader->pend = obj->debug_info.ptr + obj->debug_info.size;
+ reader->debug_line_cu_end = obj->debug_line.ptr;
+ reader->current_low_pc = 0;
+ reader->current_str_offsets_base = 0;
+ reader->current_addr_base = 0;
+ reader->current_rnglists_base = 0;
+}
+
+static void
+di_skip_die_attributes(const char **p)
+{
+ for (;;) {
+ uint64_t at = uleb128(p);
+ uint64_t form = uleb128(p);
+ if (!at && !form) break;
+ switch (form) {
+ default:
+ break;
+ case DW_FORM_implicit_const:
+ sleb128(p);
+ break;
+ }
+ }
+}
+
+static void
+di_read_debug_abbrev_cu(DebugInfoReader *reader)
+{
+ uint64_t prev = 0;
+ const char *p = reader->q0;
+ for (;;) {
+ uint64_t abbrev_number = uleb128(&p);
+ if (abbrev_number <= prev) break;
+ if (abbrev_number < ABBREV_TABLE_SIZE) {
+ reader->abbrev_table[abbrev_number] = p;
+ }
+ prev = abbrev_number;
+ uleb128(&p); /* tag */
+ p++; /* has_children */
+ di_skip_die_attributes(&p);
+ }
+}
+
+static int
+di_read_debug_line_cu(DebugInfoReader *reader, FILE *errout)
+{
+ const char *p;
+ struct LineNumberProgramHeader header;
+
+ p = (const char *)reader->debug_line_cu_end;
+ if (parse_debug_line_header(reader->obj, &p, &header, errout))
+ return -1;
+
+ reader->debug_line_cu_end = (char *)header.cu_end;
+ reader->debug_line_format = header.format;
+ reader->debug_line_version = header.version;
+ reader->debug_line_directories = (char *)header.include_directories;
+ reader->debug_line_files = (char *)header.filenames;
+
+ return 0;
+}
+
+static void
+set_addr_idx_value(DebugInfoValue *v, uint64_t n)
+{
+ v->as.addr_idx = n;
+ v->type = VAL_addr;
+}
+
+static void
+set_uint_value(DebugInfoValue *v, uint64_t n)
+{
+ v->as.uint64 = n;
+ v->type = VAL_uint;
+}
+
+static void
+set_int_value(DebugInfoValue *v, int64_t n)
+{
+ v->as.int64 = n;
+ v->type = VAL_int;
+}
+
+static void
+set_cstr_value(DebugInfoValue *v, const char *s)
+{
+ v->as.ptr = s;
+ v->off = 0;
+ v->type = VAL_cstr;
+}
+
+static void
+set_cstrp_value(DebugInfoValue *v, const char *s, uint64_t off)
+{
+ v->as.ptr = s;
+ v->off = off;
+ v->type = VAL_cstr;
+}
+
+static void
+set_data_value(DebugInfoValue *v, const char *s)
+{
+ v->as.ptr = s;
+ v->type = VAL_data;
+}
+
+static const char *
+get_cstr_value(DebugInfoValue *v)
+{
+ if (v->as.ptr) {
+ return v->as.ptr + v->off;
+ } else {
+ return NULL;
+ }
+}
+
+static const char *
+resolve_strx(DebugInfoReader *reader, uint64_t idx)
+{
+ const char *p = reader->obj->debug_str_offsets.ptr + reader->current_str_offsets_base;
+ uint64_t off;
+ if (reader->format == 4) {
+ off = ((uint32_t *)p)[idx];
+ }
+ else {
+ off = ((uint64_t *)p)[idx];
+ }
+ return reader->obj->debug_str.ptr + off;
+}
+
+static bool
+debug_info_reader_read_addr_value_member(DebugInfoReader *reader, DebugInfoValue *v, int size)
+{
+ if (size == 4) {
+ set_uint_value(v, read_uint32(&reader->p));
+ } else if (size == 8) {
+ set_uint_value(v, read_uint64(&reader->p));
+ } else {
+ return false;
+ }
+ return true;
+}
+
+#define debug_info_reader_read_addr_value(reader, v, mem) \
+ if (!debug_info_reader_read_addr_value_member((reader), (v), (reader)->mem)) { \
+ kprintf("unknown " #mem ":%d", (reader)->mem); \
+ return false; \
+ }
+
+
+static bool
+debug_info_reader_read_value(DebugInfoReader *reader, uint64_t form, DebugInfoValue *v, FILE *errout)
+{
+ switch (form) {
+ case DW_FORM_addr:
+ debug_info_reader_read_addr_value(reader, v, address_size);
+ break;
+ case DW_FORM_block2:
+ v->size = read_uint16(&reader->p);
+ set_data_value(v, reader->p);
+ reader->p += v->size;
+ break;
+ case DW_FORM_block4:
+ v->size = read_uint32(&reader->p);
+ set_data_value(v, reader->p);
+ reader->p += v->size;
+ break;
+ case DW_FORM_data2:
+ set_uint_value(v, read_uint16(&reader->p));
+ break;
+ case DW_FORM_data4:
+ set_uint_value(v, read_uint32(&reader->p));
+ break;
+ case DW_FORM_data8:
+ set_uint_value(v, read_uint64(&reader->p));
+ break;
+ case DW_FORM_string:
+ v->size = strlen(reader->p);
+ set_cstr_value(v, reader->p);
+ reader->p += v->size + 1;
+ break;
+ case DW_FORM_block:
+ v->size = uleb128(&reader->p);
+ set_data_value(v, reader->p);
+ reader->p += v->size;
+ break;
+ case DW_FORM_block1:
+ v->size = read_uint8(&reader->p);
+ set_data_value(v, reader->p);
+ reader->p += v->size;
+ break;
+ case DW_FORM_data1:
+ set_uint_value(v, read_uint8(&reader->p));
+ break;
+ case DW_FORM_flag:
+ set_uint_value(v, read_uint8(&reader->p));
+ break;
+ case DW_FORM_sdata:
+ set_int_value(v, read_sleb128(reader));
+ break;
+ case DW_FORM_strp:
+ set_cstrp_value(v, reader->obj->debug_str.ptr, read_uint(reader));
+ break;
+ case DW_FORM_udata:
+ set_uint_value(v, read_uleb128(reader));
+ break;
+ case DW_FORM_ref_addr:
+ if (reader->current_version <= 2) {
+ // DWARF Version 2 specifies that references have
+ // the same size as an address on the target system
+ debug_info_reader_read_addr_value(reader, v, address_size);
+ } else {
+ debug_info_reader_read_addr_value(reader, v, format);
+ }
+ break;
+ case DW_FORM_ref1:
+ set_uint_value(v, read_uint8(&reader->p));
+ break;
+ case DW_FORM_ref2:
+ set_uint_value(v, read_uint16(&reader->p));
+ break;
+ case DW_FORM_ref4:
+ set_uint_value(v, read_uint32(&reader->p));
+ break;
+ case DW_FORM_ref8:
+ set_uint_value(v, read_uint64(&reader->p));
+ break;
+ case DW_FORM_ref_udata:
+ set_uint_value(v, uleb128(&reader->p));
+ break;
+ case DW_FORM_indirect:
+ /* TODO: read the referred value */
+ set_uint_value(v, uleb128(&reader->p));
+ break;
+ case DW_FORM_sec_offset:
+ set_uint_value(v, read_uint(reader)); /* offset */
+ /* addrptr: debug_addr */
+ /* lineptr: debug_line */
+ /* loclist: debug_loclists */
+ /* loclistptr: debug_loclists */
+ /* macptr: debug_macro */
+ /* rnglist: debug_rnglists */
+ /* rnglistptr: debug_rnglists */
+ /* stroffsetsptr: debug_str_offsets */
+ break;
+ case DW_FORM_exprloc:
+ v->size = (size_t)read_uleb128(reader);
+ set_data_value(v, reader->p);
+ reader->p += v->size;
+ break;
+ case DW_FORM_flag_present:
+ set_uint_value(v, 1);
+ break;
+ case DW_FORM_strx:
+ set_cstr_value(v, resolve_strx(reader, uleb128(&reader->p)));
+ break;
+ case DW_FORM_addrx:
+ set_addr_idx_value(v, uleb128(&reader->p));
+ break;
+ case DW_FORM_ref_sup4:
+ set_uint_value(v, read_uint32(&reader->p));
+ break;
+ case DW_FORM_strp_sup:
+ set_uint_value(v, read_uint(reader));
+ /* *p = reader->sup_file + reader->sup_str->sh_offset + ret; */
+ break;
+ case DW_FORM_data16:
+ v->size = 16;
+ set_data_value(v, reader->p);
+ reader->p += v->size;
+ break;
+ case DW_FORM_line_strp:
+ set_cstrp_value(v, reader->obj->debug_line_str.ptr, read_uint(reader));
+ break;
+ case DW_FORM_ref_sig8:
+ set_uint_value(v, read_uint64(&reader->p));
+ break;
+ case DW_FORM_implicit_const:
+ set_int_value(v, sleb128(&reader->q));
+ break;
+ case DW_FORM_loclistx:
+ set_uint_value(v, read_uleb128(reader));
+ break;
+ case DW_FORM_rnglistx:
+ set_uint_value(v, read_uleb128(reader));
+ break;
+ case DW_FORM_ref_sup8:
+ set_uint_value(v, read_uint64(&reader->p));
+ break;
+ case DW_FORM_strx1:
+ set_cstr_value(v, resolve_strx(reader, read_uint8(&reader->p)));
+ break;
+ case DW_FORM_strx2:
+ set_cstr_value(v, resolve_strx(reader, read_uint16(&reader->p)));
+ break;
+ case DW_FORM_strx3:
+ set_cstr_value(v, resolve_strx(reader, read_uint24(&reader->p)));
+ break;
+ case DW_FORM_strx4:
+ set_cstr_value(v, resolve_strx(reader, read_uint32(&reader->p)));
+ break;
+ case DW_FORM_addrx1:
+ set_addr_idx_value(v, read_uint8(&reader->p));
+ break;
+ case DW_FORM_addrx2:
+ set_addr_idx_value(v, read_uint16(&reader->p));
+ break;
+ case DW_FORM_addrx3:
+ set_addr_idx_value(v, read_uint24(&reader->p));
+ break;
+ case DW_FORM_addrx4:
+ set_addr_idx_value(v, read_uint32(&reader->p));
+ break;
+ /* we have no support for actually reading the real values of these refs out
+ * of the .gnu_debugaltlink dwz-compressed debuginfo at the moment, but "read"
+ * them anyway so that we advance the reader by the right amount. */
+ case DW_FORM_GNU_ref_alt:
+ case DW_FORM_GNU_strp_alt:
+ read_uint(reader);
+ set_uint_value(v, 0);
+ break;
+ case 0:
+ goto fail;
+ break;
+ }
+ return true;
+
+ fail:
+ kprintf("%d: unsupported form: %#"PRIx64"\n", __LINE__, form);
+ return false;
+}
+
+/* find abbrev in current compilation unit */
+static const char *
+di_find_abbrev(DebugInfoReader *reader, uint64_t abbrev_number, FILE *errout)
+{
+ const char *p;
+ if (abbrev_number < ABBREV_TABLE_SIZE) {
+ return reader->abbrev_table[abbrev_number];
+ }
+ p = reader->abbrev_table[ABBREV_TABLE_SIZE-1];
+ /* skip 255th record */
+ uleb128(&p); /* tag */
+ p++; /* has_children */
+ di_skip_die_attributes(&p);
+ for (uint64_t n = uleb128(&p); abbrev_number != n; n = uleb128(&p)) {
+ if (n == 0) {
+ kprintf("%d: Abbrev Number %"PRId64" not found\n",__LINE__, abbrev_number);
+ return NULL;
+ }
+ uleb128(&p); /* tag */
+ p++; /* has_children */
+ di_skip_die_attributes(&p);
+ }
+ return p;
+}
+
+#if 0
+static void
+hexdump0(const unsigned char *p, size_t n, FILE *errout)
+{
+ size_t i;
+ kprintf(" 0 1 2 3 4 5 6 7 8 9 A B C D E F\n");
+ for (i=0; i < n; i++){
+ switch (i & 15) {
+ case 0:
+ kprintf("%02" PRIdSIZE ": %02X ", i/16, p[i]);
+ break;
+ case 15:
+ kprintf("%02X\n", p[i]);
+ break;
+ default:
+ kprintf("%02X ", p[i]);
+ break;
+ }
+ }
+ if ((i & 15) != 15) {
+ kprintf("\n");
+ }
+}
+#define hexdump(p,n,e) hexdump0((const unsigned char *)p, n, e)
+
+static void
+div_inspect(DebugInfoValue *v, FILE *errout)
+{
+ switch (v->type) {
+ case VAL_uint:
+ kprintf("%d: type:%d size:%" PRIxSIZE " v:%"PRIx64"\n",__LINE__,v->type,v->size,v->as.uint64);
+ break;
+ case VAL_int:
+ kprintf("%d: type:%d size:%" PRIxSIZE " v:%"PRId64"\n",__LINE__,v->type,v->size,(int64_t)v->as.uint64);
+ break;
+ case VAL_cstr:
+ kprintf("%d: type:%d size:%" PRIxSIZE " v:'%s'\n",__LINE__,v->type,v->size,v->as.ptr);
+ break;
+ case VAL_data:
+ kprintf("%d: type:%d size:%" PRIxSIZE " v:\n",__LINE__,v->type,v->size);
+ hexdump(v->as.ptr, 16, errout);
+ break;
+ }
+}
+#endif
+
+static DIE *
+di_read_die(DebugInfoReader *reader, DIE *die, FILE *errout)
+{
+ uint64_t abbrev_number = uleb128(&reader->p);
+ if (abbrev_number == 0) {
+ reader->level--;
+ return NULL;
+ }
+
+ if (!(reader->q = di_find_abbrev(reader, abbrev_number, errout))) return NULL;
+
+ die->pos = reader->p - reader->obj->debug_info.ptr - 1;
+ die->tag = (int)uleb128(&reader->q); /* tag */
+ die->has_children = *reader->q++; /* has_children */
+ if (die->has_children) {
+ reader->level++;
+ }
+ return die;
+}
+
+static DebugInfoValue *
+di_read_record(DebugInfoReader *reader, DebugInfoValue *vp, FILE *errout)
+{
+ uint64_t at = uleb128(&reader->q);
+ uint64_t form = uleb128(&reader->q);
+ if (!at || !form) return NULL;
+ vp->at = at;
+ vp->form = form;
+ if (!debug_info_reader_read_value(reader, form, vp, errout)) return NULL;
+ return vp;
+}
+
+static bool
+di_skip_records(DebugInfoReader *reader, FILE *errout)
+{
+ for (;;) {
+ DebugInfoValue v = {{0}};
+ uint64_t at = uleb128(&reader->q);
+ uint64_t form = uleb128(&reader->q);
+ if (!at || !form) return true;
+ if (!debug_info_reader_read_value(reader, form, &v, errout)) return false;
+ }
+}
+
+typedef struct addr_header {
+ const char *ptr;
+ uint64_t unit_length;
+ uint8_t format;
+ uint8_t address_size;
+ /* uint8_t segment_selector_size; */
+} addr_header_t;
+
+static bool
+addr_header_init(obj_info_t *obj, addr_header_t *header, FILE *errout)
+{
+ const char *p = obj->debug_addr.ptr;
+
+ header->ptr = p;
+
+ if (!p) return true;
+
+ header->unit_length = *(uint32_t *)p;
+ p += sizeof(uint32_t);
+
+ header->format = 4;
+ if (header->unit_length == 0xffffffff) {
+ header->unit_length = *(uint64_t *)p;
+ p += sizeof(uint64_t);
+ header->format = 8;
+ }
+
+ p += 2; /* version */
+ header->address_size = *p++;
+ if (header->address_size != 4 && header->address_size != 8) {
+ kprintf("unknown address_size:%d", header->address_size);
+ return false;
+ }
+ p++; /* segment_selector_size */
+ return true;
+}
+
+static uint64_t
+read_addr(addr_header_t *header, uint64_t addr_base, uint64_t idx) {
+ if (header->address_size == 4) {
+ return ((uint32_t*)(header->ptr + addr_base))[idx];
+ }
+ else {
+ return ((uint64_t*)(header->ptr + addr_base))[idx];
+ }
+}
+
+typedef struct rnglists_header {
+ uint64_t unit_length;
+ uint8_t format;
+ uint8_t address_size;
+ uint32_t offset_entry_count;
+} rnglists_header_t;
+
+static bool
+rnglists_header_init(obj_info_t *obj, rnglists_header_t *header, FILE *errout)
+{
+ const char *p = obj->debug_rnglists.ptr;
+
+ if (!p) return true;
+
+ header->unit_length = *(uint32_t *)p;
+ p += sizeof(uint32_t);
+
+ header->format = 4;
+ if (header->unit_length == 0xffffffff) {
+ header->unit_length = *(uint64_t *)p;
+ p += sizeof(uint64_t);
+ header->format = 8;
+ }
+
+ p += 2; /* version */
+ header->address_size = *p++;
+ if (header->address_size != 4 && header->address_size != 8) {
+ kprintf("unknown address_size:%d", header->address_size);
+ return false;
+ }
+ p++; /* segment_selector_size */
+ header->offset_entry_count = *(uint32_t *)p;
+ return true;
+}
+
+typedef struct {
+ uint64_t low_pc;
+ uint64_t high_pc;
+ uint64_t ranges;
+ bool low_pc_set;
+ bool high_pc_set;
+ bool ranges_set;
+} ranges_t;
+
+static void
+ranges_set(ranges_t *ptr, DebugInfoValue *v, addr_header_t *addr_header, uint64_t addr_base)
+{
+ uint64_t n = 0;
+ if (v->type == VAL_uint) {
+ n = v->as.uint64;
+ }
+ else if (v->type == VAL_addr) {
+ n = read_addr(addr_header, addr_base, v->as.addr_idx);
+ }
+ switch (v->at) {
+ case DW_AT_low_pc:
+ ptr->low_pc = n;
+ ptr->low_pc_set = true;
+ break;
+ case DW_AT_high_pc:
+ if (v->form == DW_FORM_addr) {
+ ptr->high_pc = n;
+ }
+ else {
+ ptr->high_pc = ptr->low_pc + n;
+ }
+ ptr->high_pc_set = true;
+ break;
+ case DW_AT_ranges:
+ ptr->ranges = n;
+ ptr->ranges_set = true;
+ break;
+ }
+}
+
+static uint64_t
+read_dw_form_addr(DebugInfoReader *reader, const char **ptr, FILE *errout)
+{
+ const char *p = *ptr;
+ *ptr = p + reader->address_size;
+ if (reader->address_size == 4) {
+ return read_uint32(&p);
+ } else {
+ return read_uint64(&p);
+ }
+}
+
+static uintptr_t
+ranges_include(DebugInfoReader *reader, ranges_t *ptr, uint64_t addr, rnglists_header_t *rnglists_header, FILE *errout)
+{
+ if (ptr->high_pc_set) {
+ if (ptr->ranges_set || !ptr->low_pc_set) {
+ return UINTPTR_MAX;
+ }
+ if (ptr->low_pc <= addr && addr <= ptr->high_pc) {
+ return (uintptr_t)ptr->low_pc;
+ }
+ }
+ else if (ptr->ranges_set) {
+ /* TODO: support base address selection entry */
+ const char *p;
+ uint64_t base = ptr->low_pc_set ? ptr->low_pc : reader->current_low_pc;
+ bool base_valid = true;
+ if (reader->current_version >= 5) {
+ if (rnglists_header->offset_entry_count == 0) {
+ // DW_FORM_sec_offset
+ p = reader->obj->debug_rnglists.ptr + ptr->ranges + reader->current_rnglists_base;
+ }
+ else {
+ // DW_FORM_rnglistx
+ const char *offset_array = reader->obj->debug_rnglists.ptr + reader->current_rnglists_base;
+ if (rnglists_header->format == 4) {
+ p = offset_array + ((uint32_t *)offset_array)[ptr->ranges];
+ }
+ else {
+ p = offset_array + ((uint64_t *)offset_array)[ptr->ranges];
+ }
+ }
+ for (;;) {
+ uint8_t rle = read_uint8(&p);
+ uintptr_t from = 0, to = 0;
+ if (rle == DW_RLE_end_of_list) break;
+ switch (rle) {
+ case DW_RLE_base_addressx:
+ uleb128(&p);
+ base_valid = false; /* not supported yet */
+ break;
+ case DW_RLE_startx_endx:
+ uleb128(&p);
+ uleb128(&p);
+ break;
+ case DW_RLE_startx_length:
+ uleb128(&p);
+ uleb128(&p);
+ break;
+ case DW_RLE_offset_pair:
+ if (!base_valid) break;
+ from = (uintptr_t)base + uleb128(&p);
+ to = (uintptr_t)base + uleb128(&p);
+ break;
+ case DW_RLE_base_address:
+ base = read_dw_form_addr(reader, &p, errout);
+ base_valid = true;
+ break;
+ case DW_RLE_start_end:
+ from = (uintptr_t)read_dw_form_addr(reader, &p, errout);
+ to = (uintptr_t)read_dw_form_addr(reader, &p, errout);
+ break;
+ case DW_RLE_start_length:
+ from = (uintptr_t)read_dw_form_addr(reader, &p, errout);
+ to = from + uleb128(&p);
+ break;
+ }
+ if (from <= addr && addr < to) {
+ return from;
+ }
+ }
+ return 0;
+ }
+ p = reader->obj->debug_ranges.ptr + ptr->ranges;
+ for (;;) {
+ uintptr_t from = read_uintptr(&p);
+ uintptr_t to = read_uintptr(&p);
+ if (!from && !to) break;
+ if (from == UINTPTR_MAX) {
+ /* base address selection entry */
+ base = to;
+ }
+ else if (base + from <= addr && addr < base + to) {
+ return (uintptr_t)base + from;
+ }
+ }
+ }
+ else if (ptr->low_pc_set) {
+ if (ptr->low_pc == addr) {
+ return (uintptr_t)ptr->low_pc;
+ }
+ }
+ return 0;
+}
+
+#if 0
+static void
+ranges_inspect(DebugInfoReader *reader, ranges_t *ptr, FILE *errout)
+{
+ if (ptr->high_pc_set) {
+ if (ptr->ranges_set || !ptr->low_pc_set) {
+ kprintf("low_pc_set:%d high_pc_set:%d ranges_set:%d\n",ptr->low_pc_set,ptr->high_pc_set,ptr->ranges_set);
+ return;
+ }
+ kprintf("low_pc:%"PRIx64" high_pc:%"PRIx64"\n",ptr->low_pc,ptr->high_pc);
+ }
+ else if (ptr->ranges_set) {
+ char *p = reader->obj->debug_ranges.ptr + ptr->ranges;
+ kprintf("low_pc:%"PRIx64" ranges:%"PRIx64" %lx ",ptr->low_pc,ptr->ranges, p-reader->obj->mapped);
+ for (;;) {
+ uintptr_t from = read_uintptr(&p);
+ uintptr_t to = read_uintptr(&p);
+ if (!from && !to) break;
+ kprintf("%"PRIx64"-%"PRIx64" ",ptr->low_pc+from,ptr->low_pc+to);
+ }
+ kprintf("\n");
+ }
+ else if (ptr->low_pc_set) {
+ kprintf("low_pc:%"PRIx64"\n",ptr->low_pc);
+ }
+ else {
+ kprintf("empty\n");
+ }
+}
+#endif
+
+static int
+di_read_cu(DebugInfoReader *reader, FILE *errout)
+{
+ uint64_t unit_length;
+ uint16_t version;
+ uint64_t debug_abbrev_offset;
+ reader->format = 4;
+ reader->current_cu = reader->p;
+ unit_length = read_uint32(&reader->p);
+ if (unit_length == 0xffffffff) {
+ unit_length = read_uint64(&reader->p);
+ reader->format = 8;
+ }
+ reader->cu_end = reader->p + unit_length;
+ version = read_uint16(&reader->p);
+ reader->current_version = version;
+ if (version > 5) {
+ return -1;
+ }
+ else if (version == 5) {
+ /* unit_type = */ read_uint8(&reader->p);
+ reader->address_size = read_uint8(&reader->p);
+ debug_abbrev_offset = read_uint(reader);
+ }
+ else {
+ debug_abbrev_offset = read_uint(reader);
+ reader->address_size = read_uint8(&reader->p);
+ }
+ if (reader->address_size != 4 && reader->address_size != 8) {
+ kprintf("unknown address_size:%d", reader->address_size);
+ return -1;
+ }
+ reader->q0 = reader->obj->debug_abbrev.ptr + debug_abbrev_offset;
+
+ reader->level = 0;
+ di_read_debug_abbrev_cu(reader);
+ if (di_read_debug_line_cu(reader, errout)) return -1;
+
+ do {
+ DIE die;
+
+ if (!di_read_die(reader, &die, errout)) continue;
+
+ if (die.tag != DW_TAG_compile_unit) {
+ if (!di_skip_records(reader, errout)) return -1;
+ break;
+ }
+
+ reader->current_str_offsets_base = 0;
+ reader->current_addr_base = 0;
+ reader->current_rnglists_base = 0;
+
+ DebugInfoValue low_pc = {{0}};
+ /* enumerate abbrev */
+ for (;;) {
+ DebugInfoValue v = {{0}};
+ if (!di_read_record(reader, &v, errout)) break;
+ switch (v.at) {
+ case DW_AT_low_pc:
+ // clang may output DW_AT_addr_base after DW_AT_low_pc.
+ // We need to resolve the DW_FORM_addr* after DW_AT_addr_base is parsed.
+ low_pc = v;
+ break;
+ case DW_AT_str_offsets_base:
+ reader->current_str_offsets_base = v.as.uint64;
+ break;
+ case DW_AT_addr_base:
+ reader->current_addr_base = v.as.uint64;
+ break;
+ case DW_AT_rnglists_base:
+ reader->current_rnglists_base = v.as.uint64;
+ break;
+ }
+ }
+ // Resolve the DW_FORM_addr of DW_AT_low_pc
+ switch (low_pc.type) {
+ case VAL_uint:
+ reader->current_low_pc = low_pc.as.uint64;
+ break;
+ case VAL_addr:
+ {
+ addr_header_t header = {0};
+ if (!addr_header_init(reader->obj, &header, errout)) return -1;
+ reader->current_low_pc = read_addr(&header, reader->current_addr_base, low_pc.as.addr_idx);
+ }
+ break;
+ }
+ } while (0);
+
+ return 0;
+}
+
+static void
+read_abstract_origin(DebugInfoReader *reader, uint64_t form, uint64_t abstract_origin, line_info_t *line, FILE *errout)
+{
+ const char *p = reader->p;
+ const char *q = reader->q;
+ int level = reader->level;
+ DIE die;
+
+ switch (form) {
+ case DW_FORM_ref1:
+ case DW_FORM_ref2:
+ case DW_FORM_ref4:
+ case DW_FORM_ref8:
+ case DW_FORM_ref_udata:
+ reader->p = reader->current_cu + abstract_origin;
+ break;
+ case DW_FORM_ref_addr:
+ goto finish; /* not supported yet */
+ case DW_FORM_ref_sig8:
+ goto finish; /* not supported yet */
+ case DW_FORM_ref_sup4:
+ case DW_FORM_ref_sup8:
+ goto finish; /* not supported yet */
+ default:
+ goto finish;
+ }
+ if (!di_read_die(reader, &die, errout)) goto finish;
+
+ /* enumerate abbrev */
+ for (;;) {
+ DebugInfoValue v = {{0}};
+ if (!di_read_record(reader, &v, errout)) break;
+ switch (v.at) {
+ case DW_AT_name:
+ line->sname = get_cstr_value(&v);
+ break;
+ }
+ }
+
+ finish:
+ reader->p = p;
+ reader->q = q;
+ reader->level = level;
+}
+
+static bool
+debug_info_read(DebugInfoReader *reader, int num_traces, void **traces,
+ line_info_t *lines, int offset, FILE *errout)
+{
+
+ addr_header_t addr_header = {0};
+ if (!addr_header_init(reader->obj, &addr_header, errout)) return false;
+
+ rnglists_header_t rnglists_header = {0};
+ if (!rnglists_header_init(reader->obj, &rnglists_header, errout)) return false;
+
+ while (reader->p < reader->cu_end) {
+ DIE die;
+ ranges_t ranges = {0};
+ line_info_t line = {0};
+
+ if (!di_read_die(reader, &die, errout)) continue;
+ /* kprintf("%d:%tx: <%d>\n",__LINE__,die.pos,reader->level,die.tag); */
+
+ if (die.tag != DW_TAG_subprogram && die.tag != DW_TAG_inlined_subroutine) {
+ skip_die:
+ if (!di_skip_records(reader, errout)) return false;
+ continue;
+ }
+
+ /* enumerate abbrev */
+ for (;;) {
+ DebugInfoValue v = {{0}};
+ /* ptrdiff_t pos = reader->p - reader->p0; */
+ if (!di_read_record(reader, &v, errout)) break;
+ /* kprintf("\n%d:%tx: AT:%lx FORM:%lx\n",__LINE__,pos,v.at,v.form); */
+ /* div_inspect(&v, errout); */
+ switch (v.at) {
+ case DW_AT_name:
+ line.sname = get_cstr_value(&v);
+ break;
+ case DW_AT_call_file:
+ fill_filename((int)v.as.uint64, reader->debug_line_format, reader->debug_line_version, reader->debug_line_directories, reader->debug_line_files, &line, reader->obj, errout);
+ break;
+ case DW_AT_call_line:
+ line.line = (int)v.as.uint64;
+ break;
+ case DW_AT_low_pc:
+ case DW_AT_high_pc:
+ case DW_AT_ranges:
+ ranges_set(&ranges, &v, &addr_header, reader->current_addr_base);
+ break;
+ case DW_AT_declaration:
+ goto skip_die;
+ case DW_AT_inline:
+ /* 1 or 3 */
+ break; /* goto skip_die; */
+ case DW_AT_abstract_origin:
+ read_abstract_origin(reader, v.form, v.as.uint64, &line, errout);
+ break; /* goto skip_die; */
+ }
+ }
+ /* ranges_inspect(reader, &ranges, errout); */
+ /* kprintf("%d:%tx: %x ",__LINE__,diepos,die.tag); */
+ for (int i=offset; i < num_traces; i++) {
+ uintptr_t addr = (uintptr_t)traces[i];
+ uintptr_t offset = addr - reader->obj->base_addr + reader->obj->vmaddr;
+ uintptr_t saddr = ranges_include(reader, &ranges, offset, &rnglists_header, errout);
+ if (saddr == UINTPTR_MAX) return false;
+ if (saddr) {
+ /* kprintf("%d:%tx: %d %lx->%lx %x %s: %s/%s %d %s %s %s\n",__LINE__,die.pos, i,addr,offset, die.tag,line.sname,line.dirname,line.filename,line.line,reader->obj->path,line.sname,lines[i].sname); */
+ if (lines[i].sname) {
+ line_info_t *lp = malloc(sizeof(line_info_t));
+ memcpy(lp, &lines[i], sizeof(line_info_t));
+ lines[i].next = lp;
+ lp->dirname = line.dirname;
+ lp->filename = line.filename;
+ lp->line = line.line;
+ lp->saddr = 0;
+ }
+ lines[i].path = reader->obj->path;
+ lines[i].base_addr = line.base_addr;
+ lines[i].sname = line.sname;
+ lines[i].saddr = saddr + reader->obj->base_addr - reader->obj->vmaddr;
+ }
+ }
+ }
+ return true;
+}
+
+// This function parses the following attributes of Line Number Program Header in DWARF 5:
+//
+// * directory_entry_format_count
+// * directory_entry_format
+// * directories_count
+// * directories
+//
+// or
+//
+// * file_name_entry_format_count
+// * file_name_entry_format
+// * file_names_count
+// * file_names
+//
+// It records DW_LNCT_path and DW_LNCT_directory_index at the index "idx".
+static const char *
+parse_ver5_debug_line_header(const char *p, int idx, uint8_t format,
+ obj_info_t *obj, const char **out_path,
+ uint64_t *out_directory_index, FILE *errout)
+{
+ int i, j;
+ int entry_format_count = *(uint8_t *)p++;
+ const char *entry_format = p;
+
+ /* skip the part of entry_format */
+ for (i = 0; i < entry_format_count * 2; i++) uleb128(&p);
+
+ int entry_count = (int)uleb128(&p);
+
+ DebugInfoReader reader = {0};
+ debug_info_reader_init(&reader, obj);
+ reader.format = format;
+ reader.p = p;
+ for (j = 0; j < entry_count; j++) {
+ const char *format = entry_format;
+ for (i = 0; i < entry_format_count; i++) {
+ DebugInfoValue v = {{0}};
+ unsigned long dw_lnct = uleb128(&format);
+ unsigned long dw_form = uleb128(&format);
+ if (!debug_info_reader_read_value(&reader, dw_form, &v, errout)) return 0;
+ if (dw_lnct == 1 /* DW_LNCT_path */ && v.type == VAL_cstr && out_path)
+ *out_path = v.as.ptr + v.off;
+ if (dw_lnct == 2 /* DW_LNCT_directory_index */ && v.type == VAL_uint && out_directory_index)
+ *out_directory_index = v.as.uint64;
+ }
+ if (j == idx) return 0;
+ }
+
+ return reader.p;
+}
+
+#ifdef USE_ELF
+static unsigned long
+uncompress_debug_section(ElfW(Shdr) *shdr, char *file, char **ptr)
+{
+ *ptr = NULL;
+#ifdef SUPPORT_COMPRESSED_DEBUG_LINE
+ ElfW(Chdr) *chdr = (ElfW(Chdr) *)(file + shdr->sh_offset);
+ unsigned long destsize = chdr->ch_size;
+ int ret = 0;
+
+ if (chdr->ch_type != ELFCOMPRESS_ZLIB) {
+ /* unsupported compression type */
+ return 0;
+ }
+
+ *ptr = malloc(destsize);
+ if (!*ptr) return 0;
+ ret = uncompress((Bytef *)*ptr, &destsize,
+ (const Bytef*)chdr + sizeof(ElfW(Chdr)),
+ shdr->sh_size - sizeof(ElfW(Chdr)));
+ if (ret != Z_OK) goto fail;
+ return destsize;
+
+fail:
+ free(*ptr);
+ *ptr = NULL;
+#endif
+ return 0;
}
/* read file and fill lines */
static uintptr_t
fill_lines(int num_traces, void **traces, int check_debuglink,
- obj_info_t **objp, line_info_t *lines, int offset)
+ obj_info_t **objp, line_info_t *lines, int offset, FILE *errout)
{
int i, j;
char *shstr;
- char *section_name;
ElfW(Ehdr) *ehdr;
ElfW(Shdr) *shdr, *shstr_shdr;
- ElfW(Shdr) *debug_line_shdr = NULL, *gnu_debuglink_shdr = NULL;
+ ElfW(Shdr) *gnu_debuglink_shdr = NULL;
+ ElfW(Shdr) *note_gnu_build_id = NULL;
int fd;
off_t filesize;
char *file;
@@ -479,43 +2072,41 @@ fill_lines(int num_traces, void **traces, int check_debuglink,
fd = open(binary_filename, O_RDONLY);
if (fd < 0) {
- goto fail;
+ goto fail;
}
filesize = lseek(fd, 0, SEEK_END);
if (filesize < 0) {
- int e = errno;
- close(fd);
- kprintf("lseek: %s\n", strerror(e));
- goto fail;
+ int e = errno;
+ close(fd);
+ kprintf("lseek: %s\n", strerror(e));
+ goto fail;
}
#if SIZEOF_OFF_T > SIZEOF_SIZE_T
if (filesize > (off_t)SIZE_MAX) {
- close(fd);
- kprintf("Too large file %s\n", binary_filename);
- goto fail;
+ close(fd);
+ kprintf("Too large file %s\n", binary_filename);
+ goto fail;
}
#endif
lseek(fd, 0, SEEK_SET);
/* async-signal unsafe */
file = (char *)mmap(NULL, (size_t)filesize, PROT_READ, MAP_SHARED, fd, 0);
if (file == MAP_FAILED) {
- int e = errno;
- close(fd);
- kprintf("mmap: %s\n", strerror(e));
- goto fail;
+ int e = errno;
+ close(fd);
+ kprintf("mmap: %s\n", strerror(e));
+ goto fail;
}
+ close(fd);
ehdr = (ElfW(Ehdr) *)file;
if (memcmp(ehdr->e_ident, "\177ELF", 4) != 0) {
- /*
- * Huh? Maybe filename was overridden by setproctitle() and
- * it match non-elf file.
- */
- close(fd);
- goto fail;
+ /*
+ * Huh? Maybe filename was overridden by setproctitle() and
+ * it match non-elf file.
+ */
+ goto fail;
}
-
- obj->fd = fd;
obj->mapped = file;
obj->mapped_size = (size_t)filesize;
@@ -525,152 +2116,506 @@ fill_lines(int num_traces, void **traces, int check_debuglink,
shstr = file + shstr_shdr->sh_offset;
for (i = 0; i < ehdr->e_shnum; i++) {
- section_name = shstr + shdr[i].sh_name;
- switch (shdr[i].sh_type) {
- case SHT_STRTAB:
- if (!strcmp(section_name, ".strtab")) {
- strtab_shdr = shdr + i;
- }
- else if (!strcmp(section_name, ".dynstr")) {
- dynstr_shdr = shdr + i;
- }
- break;
- case SHT_SYMTAB:
- /* if (!strcmp(section_name, ".symtab")) */
- symtab_shdr = shdr + i;
- break;
- case SHT_DYNSYM:
- /* if (!strcmp(section_name, ".dynsym")) */
- dynsym_shdr = shdr + i;
- break;
- case SHT_PROGBITS:
- if (!strcmp(section_name, ".debug_line")) {
- debug_line_shdr = shdr + i;
- }
- else if (!strcmp(section_name, ".gnu_debuglink")) {
- gnu_debuglink_shdr = shdr + i;
- }
- break;
- }
- }
-
- if (offset == -1) {
- /* main executable */
- offset = 0;
- if (dynsym_shdr && dynstr_shdr) {
- char *strtab = file + dynstr_shdr->sh_offset;
- ElfW(Sym) *symtab = (ElfW(Sym) *)(file + dynsym_shdr->sh_offset);
- int symtab_count = (int)(dynsym_shdr->sh_size / sizeof(ElfW(Sym)));
- for (j = 0; j < symtab_count; j++) {
- ElfW(Sym) *sym = &symtab[j];
- Dl_info info;
- void *h, *s;
- if (ELF_ST_TYPE(sym->st_info) != STT_FUNC || sym->st_size <= 0) continue;
- h = dlopen(NULL, RTLD_NOW|RTLD_LOCAL);
- if (!h) continue;
- s = dlsym(h, strtab + sym->st_name);
- if (!s) continue;
- if (dladdr(s, &info)) {
- dladdr_fbase = (uintptr_t)info.dli_fbase;
- break;
- }
- }
- if (ehdr->e_type == ET_EXEC) {
- obj->base_addr = 0;
- }
- else {
- /* PIE (position-independent executable) */
- obj->base_addr = dladdr_fbase;
- }
- }
- }
-
- if (!symtab_shdr) {
- symtab_shdr = dynsym_shdr;
- strtab_shdr = dynstr_shdr;
- }
-
- if (symtab_shdr && strtab_shdr) {
- char *strtab = file + strtab_shdr->sh_offset;
- ElfW(Sym) *symtab = (ElfW(Sym) *)(file + symtab_shdr->sh_offset);
- int symtab_count = (int)(symtab_shdr->sh_size / sizeof(ElfW(Sym)));
- for (j = 0; j < symtab_count; j++) {
- ElfW(Sym) *sym = &symtab[j];
- uintptr_t saddr = (uintptr_t)sym->st_value + obj->base_addr;
- if (ELF_ST_TYPE(sym->st_info) != STT_FUNC || sym->st_size <= 0) continue;
- for (i = offset; i < num_traces; i++) {
- uintptr_t d = (uintptr_t)traces[i] - saddr;
- if (lines[i].line > 0 || d <= 0 || d > (uintptr_t)sym->st_size)
- continue;
- /* fill symbol name and addr from .symtab */
- lines[i].sname = strtab + sym->st_name;
- lines[i].saddr = saddr;
- lines[i].path = obj->path;
- lines[i].base_addr = obj->base_addr;
- }
- }
- }
-
- if (!debug_line_shdr) {
- /* This file doesn't have .debug_line section,
- let's check .gnu_debuglink section instead. */
- if (gnu_debuglink_shdr && check_debuglink) {
- follow_debuglink(file + gnu_debuglink_shdr->sh_offset,
- num_traces, traces,
- objp, lines, offset);
- }
- goto finish;
- }
-
- parse_debug_line(num_traces, traces,
- file + debug_line_shdr->sh_offset,
- debug_line_shdr->sh_size,
- obj, lines, offset);
+ char *section_name = shstr + shdr[i].sh_name;
+ switch (shdr[i].sh_type) {
+ case SHT_STRTAB:
+ if (!strcmp(section_name, ".strtab")) {
+ strtab_shdr = shdr + i;
+ }
+ else if (!strcmp(section_name, ".dynstr")) {
+ dynstr_shdr = shdr + i;
+ }
+ break;
+ case SHT_SYMTAB:
+ /* if (!strcmp(section_name, ".symtab")) */
+ symtab_shdr = shdr + i;
+ break;
+ case SHT_DYNSYM:
+ /* if (!strcmp(section_name, ".dynsym")) */
+ dynsym_shdr = shdr + i;
+ break;
+ case SHT_NOTE:
+ if (!strcmp(section_name, ".note.gnu.build-id")) {
+ note_gnu_build_id = shdr + i;
+ }
+ break;
+ case SHT_PROGBITS:
+ if (!strcmp(section_name, ".gnu_debuglink")) {
+ gnu_debuglink_shdr = shdr + i;
+ }
+ else {
+ const char *debug_section_names[] = {
+ ".debug_abbrev",
+ ".debug_info",
+ ".debug_line",
+ ".debug_ranges",
+ ".debug_str_offsets",
+ ".debug_addr",
+ ".debug_rnglists",
+ ".debug_str",
+ ".debug_line_str"
+ };
+
+ for (j=0; j < DWARF_SECTION_COUNT; j++) {
+ struct dwarf_section *s = obj_dwarf_section_at(obj, j);
+
+ if (strcmp(section_name, debug_section_names[j]) != 0)
+ continue;
+
+ s->ptr = file + shdr[i].sh_offset;
+ s->size = shdr[i].sh_size;
+ s->flags = shdr[i].sh_flags;
+ if (s->flags & SHF_COMPRESSED) {
+ s->size = uncompress_debug_section(&shdr[i], file, &s->ptr);
+ if (!s->size) goto fail;
+ }
+ break;
+ }
+ }
+ break;
+ }
+ }
+
+ if (offset == 0) {
+ /* main executable */
+ if (dynsym_shdr && dynstr_shdr) {
+ char *strtab = file + dynstr_shdr->sh_offset;
+ ElfW(Sym) *symtab = (ElfW(Sym) *)(file + dynsym_shdr->sh_offset);
+ int symtab_count = (int)(dynsym_shdr->sh_size / sizeof(ElfW(Sym)));
+ void *handle = dlopen(NULL, RTLD_NOW|RTLD_LOCAL);
+ if (handle) {
+ for (j = 0; j < symtab_count; j++) {
+ ElfW(Sym) *sym = &symtab[j];
+ Dl_info info;
+ void *s;
+ if (ELF_ST_TYPE(sym->st_info) != STT_FUNC || sym->st_size == 0) continue;
+ s = dlsym(handle, strtab + sym->st_name);
+ if (s && dladdr(s, &info)) {
+ obj->base_addr = dladdr_fbase;
+ dladdr_fbase = (uintptr_t)info.dli_fbase;
+ break;
+ }
+ }
+ dlclose(handle);
+ }
+ if (ehdr->e_type == ET_EXEC) {
+ obj->base_addr = 0;
+ }
+ else {
+ /* PIE (position-independent executable) */
+ obj->base_addr = dladdr_fbase;
+ }
+ }
+ }
+
+ if (obj->debug_info.ptr && obj->debug_abbrev.ptr) {
+ DebugInfoReader reader;
+ debug_info_reader_init(&reader, obj);
+ i = 0;
+ while (reader.p < reader.pend) {
+ /* kprintf("%d:%tx: CU[%d]\n", __LINE__, reader.p - reader.obj->debug_info.ptr, i++); */
+ if (di_read_cu(&reader, errout)) goto use_symtab;
+ if (!debug_info_read(&reader, num_traces, traces, lines, offset, errout))
+ goto use_symtab;
+ }
+ }
+ else {
+ /* This file doesn't have dwarf, use symtab or dynsym */
+use_symtab:
+ if (!symtab_shdr) {
+ /* This file doesn't have symtab, use dynsym instead */
+ symtab_shdr = dynsym_shdr;
+ strtab_shdr = dynstr_shdr;
+ }
+
+ if (symtab_shdr && strtab_shdr) {
+ char *strtab = file + strtab_shdr->sh_offset;
+ ElfW(Sym) *symtab = (ElfW(Sym) *)(file + symtab_shdr->sh_offset);
+ int symtab_count = (int)(symtab_shdr->sh_size / sizeof(ElfW(Sym)));
+ for (j = 0; j < symtab_count; j++) {
+ ElfW(Sym) *sym = &symtab[j];
+ uintptr_t saddr = (uintptr_t)sym->st_value + obj->base_addr;
+ if (ELF_ST_TYPE(sym->st_info) != STT_FUNC) continue;
+ for (i = offset; i < num_traces; i++) {
+ uintptr_t d = (uintptr_t)traces[i] - saddr;
+ if (lines[i].line > 0 || d > (uintptr_t)sym->st_size)
+ continue;
+ /* fill symbol name and addr from .symtab */
+ if (!lines[i].sname) lines[i].sname = strtab + sym->st_name;
+ lines[i].saddr = saddr;
+ lines[i].path = obj->path;
+ lines[i].base_addr = obj->base_addr;
+ }
+ }
+ }
+ }
+
+ if (!obj->debug_line.ptr) {
+ /* This file doesn't have .debug_line section,
+ let's check .gnu_debuglink section instead. */
+ if (gnu_debuglink_shdr && check_debuglink) {
+ follow_debuglink(file + gnu_debuglink_shdr->sh_offset,
+ num_traces, traces,
+ objp, lines, offset, errout);
+ }
+ if (note_gnu_build_id && check_debuglink) {
+ ElfW(Nhdr) *nhdr = (ElfW(Nhdr)*) (file + note_gnu_build_id->sh_offset);
+ const char *build_id = (char *)(nhdr + 1) + nhdr->n_namesz;
+ follow_debuglink_build_id(build_id, nhdr->n_descsz,
+ num_traces, traces,
+ objp, lines, offset, errout);
+ }
+ goto finish;
+ }
+
+ if (parse_debug_line(num_traces, traces,
+ obj->debug_line.ptr,
+ obj->debug_line.size,
+ obj, lines, offset, errout) == -1)
+ goto fail;
+
finish:
return dladdr_fbase;
fail:
return (uintptr_t)-1;
}
+#else /* Mach-O */
+/* read file and fill lines */
+static uintptr_t
+fill_lines(int num_traces, void **traces, int check_debuglink,
+ obj_info_t **objp, line_info_t *lines, int offset, FILE *errout)
+{
+# ifdef __LP64__
+# define LP(x) x##_64
+# else
+# define LP(x) x
+# endif
+ int fd;
+ off_t filesize;
+ char *file, *p = NULL;
+ obj_info_t *obj = *objp;
+ struct LP(mach_header) *header;
+ uintptr_t dladdr_fbase = 0;
+
+ {
+ char *s = binary_filename;
+ char *base = strrchr(binary_filename, '/')+1;
+ size_t max = PATH_MAX;
+ size_t size = strlen(binary_filename);
+ size_t basesize = size - (base - binary_filename);
+ s += size;
+ max -= size;
+ p = s;
+ size = strlcpy(s, ".dSYM/Contents/Resources/DWARF/", max);
+ if (size == 0) goto fail;
+ s += size;
+ max -= size;
+ if (max <= basesize) goto fail;
+ memcpy(s, base, basesize);
+ s[basesize] = 0;
+
+ fd = open(binary_filename, O_RDONLY);
+ if (fd < 0) {
+ *p = 0; /* binary_filename becomes original file name */
+ fd = open(binary_filename, O_RDONLY);
+ if (fd < 0) {
+ goto fail;
+ }
+ }
+ }
+
+ filesize = lseek(fd, 0, SEEK_END);
+ if (filesize < 0) {
+ int e = errno;
+ close(fd);
+ kprintf("lseek: %s\n", strerror(e));
+ goto fail;
+ }
+#if SIZEOF_OFF_T > SIZEOF_SIZE_T
+ if (filesize > (off_t)SIZE_MAX) {
+ close(fd);
+ kprintf("Too large file %s\n", binary_filename);
+ goto fail;
+ }
+#endif
+ lseek(fd, 0, SEEK_SET);
+ /* async-signal unsafe */
+ file = (char *)mmap(NULL, (size_t)filesize, PROT_READ, MAP_SHARED, fd, 0);
+ if (file == MAP_FAILED) {
+ int e = errno;
+ close(fd);
+ kprintf("mmap: %s\n", strerror(e));
+ goto fail;
+ }
+ close(fd);
+
+ obj->mapped = file;
+ obj->mapped_size = (size_t)filesize;
+
+ header = (struct LP(mach_header) *)file;
+ if (header->magic == LP(MH_MAGIC)) {
+ /* non universal binary */
+ p = file;
+ }
+ else if (header->magic == FAT_CIGAM) {
+ struct LP(mach_header) *mhp = _NSGetMachExecuteHeader();
+ struct fat_header *fat = (struct fat_header *)file;
+ char *q = file + sizeof(*fat);
+ uint32_t nfat_arch = __builtin_bswap32(fat->nfat_arch);
+ /* kprintf("%d: fat:%s %d\n",__LINE__, binary_filename,nfat_arch); */
+ for (uint32_t i = 0; i < nfat_arch; i++) {
+ struct fat_arch *arch = (struct fat_arch *)q;
+ cpu_type_t cputype = __builtin_bswap32(arch->cputype);
+ cpu_subtype_t cpusubtype = __builtin_bswap32(arch->cpusubtype);
+ uint32_t offset = __builtin_bswap32(arch->offset);
+ /* kprintf("%d: fat %d %x/%x %x/%x\n",__LINE__, i, mhp->cputype,mhp->cpusubtype, cputype,cpusubtype); */
+ if (mhp->cputype == cputype &&
+ (cpu_subtype_t)(mhp->cpusubtype & ~CPU_SUBTYPE_MASK) == cpusubtype) {
+ p = file + offset;
+ file = p;
+ header = (struct LP(mach_header) *)p;
+ if (header->magic == LP(MH_MAGIC)) {
+ goto found_mach_header;
+ }
+ break;
+ }
+ q += sizeof(*arch);
+ }
+ kprintf("'%s' is not a Mach-O universal binary file!\n",binary_filename);
+ close(fd);
+ goto fail;
+ }
+ else {
+# ifdef __LP64__
+# define bitsize "64"
+# else
+# define bitsize "32"
+# endif
+ kprintf("'%s' is not a " bitsize
+ "-bit Mach-O file!\n",binary_filename);
+# undef bitsize
+ close(fd);
+ goto fail;
+ }
+found_mach_header:
+ p += sizeof(*header);
+
+ for (uint32_t i = 0; i < (uint32_t)header->ncmds; i++) {
+ struct load_command *lcmd = (struct load_command *)p;
+ switch (lcmd->cmd) {
+ case LP(LC_SEGMENT):
+ {
+ static const char *debug_section_names[] = {
+ "__debug_abbrev",
+ "__debug_info",
+ "__debug_line",
+ "__debug_ranges",
+ "__debug_str_offsets",
+ "__debug_addr",
+ "__debug_rnglists",
+ "__debug_str",
+ "__debug_line_str",
+ };
+ struct LP(segment_command) *scmd = (struct LP(segment_command) *)lcmd;
+ if (strcmp(scmd->segname, "__TEXT") == 0) {
+ obj->vmaddr = scmd->vmaddr;
+ }
+ else if (strcmp(scmd->segname, "__DWARF") == 0) {
+ p += sizeof(struct LP(segment_command));
+ for (uint64_t i = 0; i < scmd->nsects; i++) {
+ struct LP(section) *sect = (struct LP(section) *)p;
+ p += sizeof(struct LP(section));
+ for (int j=0; j < DWARF_SECTION_COUNT; j++) {
+ struct dwarf_section *s = obj_dwarf_section_at(obj, j);
+
+ if (strcmp(sect->sectname, debug_section_names[j]) != 0
+#ifdef __APPLE__
+ /* macOS clang 16 generates DWARF5, which have Mach-O
+ * section names that are limited to 16 characters,
+ * which causes sections with long names to be truncated
+ * and not match above.
+ * See: https://wiki.dwarfstd.org/Best_Practices.md#Mach-2d-O
+ */
+ && strncmp(sect->sectname, debug_section_names[j], 16) != 0
+#endif
+ )
+ continue;
+
+ s->ptr = file + sect->offset;
+ s->size = sect->size;
+ s->flags = sect->flags;
+ if (s->flags & SHF_COMPRESSED) {
+ goto fail;
+ }
+ break;
+ }
+ }
+ }
+ }
+ break;
+
+ case LC_SYMTAB:
+ {
+ struct symtab_command *cmd = (struct symtab_command *)lcmd;
+ struct LP(nlist) *nl = (struct LP(nlist) *)(file + cmd->symoff);
+ char *strtab = file + cmd->stroff, *sname = 0;
+ uint32_t j;
+ uintptr_t saddr = 0;
+ /* kprintf("[%2d]: %x/symtab %p\n", i, cmd->cmd, (void *)p); */
+ for (j = 0; j < cmd->nsyms; j++) {
+ uintptr_t symsize, d;
+ struct LP(nlist) *e = &nl[j];
+ /* kprintf("[%2d][%4d]: %02x/%x/%x: %s %llx\n", i, j, e->n_type,e->n_sect,e->n_desc,strtab+e->n_un.n_strx,e->n_value); */
+ if (e->n_type != N_FUN) continue;
+ if (e->n_sect) {
+ saddr = (uintptr_t)e->n_value + obj->base_addr - obj->vmaddr;
+ sname = strtab + e->n_un.n_strx;
+ /* kprintf("[%2d][%4d]: %02x/%x/%x: %s %llx\n", i, j, e->n_type,e->n_sect,e->n_desc,strtab+e->n_un.n_strx,e->n_value); */
+ continue;
+ }
+ for (int k = offset; k < num_traces; k++) {
+ d = (uintptr_t)traces[k] - saddr;
+ symsize = e->n_value;
+ /* kprintf("%lx %lx %lx\n",saddr,symsize,traces[k]); */
+ if (lines[k].line > 0 || d > (uintptr_t)symsize)
+ continue;
+ /* fill symbol name and addr from .symtab */
+ if (!lines[k].sname) lines[k].sname = sname;
+ lines[k].saddr = saddr;
+ lines[k].path = obj->path;
+ lines[k].base_addr = obj->base_addr;
+ }
+ }
+ }
+ }
+ p += lcmd->cmdsize;
+ }
+
+ if (obj->debug_info.ptr && obj->debug_abbrev.ptr) {
+ DebugInfoReader reader;
+ debug_info_reader_init(&reader, obj);
+ while (reader.p < reader.pend) {
+ if (di_read_cu(&reader, errout)) goto fail;
+ if (!debug_info_read(&reader, num_traces, traces, lines, offset, errout))
+ goto fail;
+ }
+ }
+
+ if (parse_debug_line(num_traces, traces,
+ obj->debug_line.ptr,
+ obj->debug_line.size,
+ obj, lines, offset, errout) == -1)
+ goto fail;
+
+ return dladdr_fbase;
+fail:
+ return (uintptr_t)-1;
+}
+#endif
#define HAVE_MAIN_EXE_PATH
-#if defined(__FreeBSD__)
+#if defined(__FreeBSD__) || defined(__DragonFly__)
# include <sys/sysctl.h>
#endif
-/* ssize_t main_exe_path(void)
+/* ssize_t main_exe_path(FILE *errout)
*
* store the path of the main executable to `binary_filename`,
* and returns strlen(binary_filename).
* it is NUL terminated.
*/
-#if defined(__linux__)
-ssize_t
-main_exe_path(void)
+#if defined(__linux__) || defined(__NetBSD__)
+static ssize_t
+main_exe_path(FILE *errout)
{
-# define PROC_SELF_EXE "/proc/self/exe"
+# if defined(__linux__)
+# define PROC_SELF_EXE "/proc/self/exe"
+# elif defined(__NetBSD__)
+# define PROC_SELF_EXE "/proc/curproc/exe"
+# endif
ssize_t len = readlink(PROC_SELF_EXE, binary_filename, PATH_MAX);
+ if (len < 0) return 0;
binary_filename[len] = 0;
return len;
}
-#elif defined(__FreeBSD__)
-ssize_t
-main_exe_path(void)
+#elif defined(__FreeBSD__) || defined(__DragonFly__)
+static ssize_t
+main_exe_path(FILE *errout)
{
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
size_t len = PATH_MAX;
int err = sysctl(mib, 4, binary_filename, &len, NULL, 0);
if (err) {
- kprintf("Can't get the path of ruby");
- return -1;
+ kprintf("Can't get the path of ruby");
+ return -1;
}
len--; /* sysctl sets strlen+1 */
return len;
}
+#elif defined(HAVE_LIBPROC_H)
+static ssize_t
+main_exe_path(FILE *errout)
+{
+ int len = proc_pidpath(getpid(), binary_filename, PATH_MAX);
+ if (len == 0) return 0;
+ binary_filename[len] = 0;
+ return len;
+}
#else
#undef HAVE_MAIN_EXE_PATH
#endif
+static void
+print_line0(line_info_t *line, void *address, FILE *errout)
+{
+ uintptr_t addr = (uintptr_t)address;
+ uintptr_t d = addr - line->saddr;
+ if (!address) {
+ /* inlined */
+ if (line->dirname && line->dirname[0]) {
+ kprintf("%s(%s) %s/%s:%d\n", line->path, line->sname, line->dirname, line->filename, line->line);
+ }
+ else {
+ kprintf("%s(%s) %s:%d\n", line->path, line->sname, line->filename, line->line);
+ }
+ }
+ else if (!line->path) {
+ kprintf("[0x%"PRIxPTR"]\n", addr);
+ }
+ else if (!line->sname) {
+ kprintf("%s(0x%"PRIxPTR") [0x%"PRIxPTR"]\n", line->path, addr-line->base_addr, addr);
+ }
+ else if (!line->saddr) {
+ kprintf("%s(%s) [0x%"PRIxPTR"]\n", line->path, line->sname, addr);
+ }
+ else if (line->line <= 0) {
+ kprintf("%s(%s+0x%"PRIxPTR") [0x%"PRIxPTR"]\n", line->path, line->sname,
+ d, addr);
+ }
+ else if (!line->filename) {
+ kprintf("%s(%s+0x%"PRIxPTR") [0x%"PRIxPTR"] ???:%d\n", line->path, line->sname,
+ d, addr, line->line);
+ }
+ else if (line->dirname && line->dirname[0]) {
+ kprintf("%s(%s+0x%"PRIxPTR") [0x%"PRIxPTR"] %s/%s:%d\n", line->path, line->sname,
+ d, addr, line->dirname, line->filename, line->line);
+ }
+ else {
+ kprintf("%s(%s+0x%"PRIxPTR") [0x%"PRIxPTR"] %s:%d\n", line->path, line->sname,
+ d, addr, line->filename, line->line);
+ }
+}
+
+static void
+print_line(line_info_t *line, void *address, FILE *errout)
+{
+ print_line0(line, address, errout);
+ if (line->next) {
+ print_line(line->next, NULL, errout);
+ }
+}
+
void
-rb_dump_backtrace_with_lines(int num_traces, void **traces)
+rb_dump_backtrace_with_lines(int num_traces, void **traces, FILE *errout)
{
int i;
/* async-signal unsafe */
@@ -678,531 +2623,99 @@ rb_dump_backtrace_with_lines(int num_traces, void **traces)
obj_info_t *obj = NULL;
/* 2 is NULL + main executable */
void **dladdr_fbases = (void **)calloc(num_traces+2, sizeof(void *));
+
#ifdef HAVE_MAIN_EXE_PATH
char *main_path = NULL; /* used on printing backtrace */
ssize_t len;
- if ((len = main_exe_path()) > 0) {
- main_path = (char *)alloca(len + 1);
- if (main_path) {
- uintptr_t addr;
- memcpy(main_path, binary_filename, len+1);
- append_obj(&obj);
- obj->path = main_path;
- addr = fill_lines(num_traces, traces, 1, &obj, lines, -1);
- if (addr != (uintptr_t)-1) {
- dladdr_fbases[0] = (void *)addr;
- }
- }
+ if ((len = main_exe_path(errout)) > 0) {
+ main_path = (char *)alloca(len + 1);
+ if (main_path) {
+ uintptr_t addr;
+ memcpy(main_path, binary_filename, len+1);
+ append_obj(&obj);
+ obj->path = main_path;
+ addr = fill_lines(num_traces, traces, 1, &obj, lines, 0, errout);
+ if (addr != (uintptr_t)-1) {
+ dladdr_fbases[0] = (void *)addr;
+ }
+ }
}
#endif
/* fill source lines by reading dwarf */
for (i = 0; i < num_traces; i++) {
- Dl_info info;
- if (lines[i].line) continue;
- if (dladdr(traces[i], &info)) {
- const char *path;
- void **p;
-
- /* skip symbols which is in already checked objects */
- /* if the binary is strip-ed, this may effect */
- for (p=dladdr_fbases; *p; p++) {
- if (*p == info.dli_fbase) {
- lines[i].path = info.dli_fname;
- lines[i].sname = info.dli_sname;
- goto next_line;
- }
- }
- *p = info.dli_fbase;
-
- append_obj(&obj);
- obj->base_addr = (uintptr_t)info.dli_fbase;
- path = info.dli_fname;
- obj->path = path;
- lines[i].path = path;
- strcpy(binary_filename, path);
- fill_lines(num_traces, traces, 1, &obj, lines, i);
- }
+ Dl_info info;
+ if (lines[i].line) continue;
+ if (dladdr(traces[i], &info)) {
+ const char *path;
+ void **p;
+
+ /* skip symbols which is in already checked objects */
+ /* if the binary is strip-ed, this may effect */
+ for (p=dladdr_fbases; *p; p++) {
+ if (*p == info.dli_fbase) {
+ if (info.dli_fname) lines[i].path = info.dli_fname;
+ if (info.dli_sname) lines[i].sname = info.dli_sname;
+ goto next_line;
+ }
+ }
+ *p = info.dli_fbase;
+
+ append_obj(&obj);
+ obj->base_addr = (uintptr_t)info.dli_fbase;
+ path = info.dli_fname;
+ obj->path = path;
+ if (path) lines[i].path = path;
+ if (info.dli_sname) {
+ lines[i].sname = info.dli_sname;
+ lines[i].saddr = (uintptr_t)info.dli_saddr;
+ }
+ strlcpy(binary_filename, path, PATH_MAX);
+ if (fill_lines(num_traces, traces, 1, &obj, lines, i, errout) == (uintptr_t)-1)
+ break;
+ }
next_line:
- continue;
+ continue;
}
/* output */
for (i = 0; i < num_traces; i++) {
- line_info_t *line = &lines[i];
- uintptr_t addr = (uintptr_t)traces[i];
- uintptr_t d = addr - line->saddr;
- if (!line->path) {
- kprintf("[0x%lx]\n", addr);
- }
- else if (!line->saddr || !line->sname) {
- kprintf("%s [0x%lx]\n", line->path, addr);
- }
- else if (line->line <= 0) {
- kprintf("%s(%s+0x%lx) [0x%lx]\n", line->path, line->sname,
- d, addr);
- }
- else if (!line->filename) {
- kprintf("%s(%s+0x%lx) [0x%lx] ???:%d\n", line->path, line->sname,
- d, addr, line->line);
- }
- else if (line->dirname && line->dirname[0]) {
- kprintf("%s(%s+0x%lx) [0x%lx] %s/%s:%d\n", line->path, line->sname,
- d, addr, line->dirname, line->filename, line->line);
- }
- else {
- kprintf("%s(%s+0x%lx) [0x%lx] %s:%d\n", line->path, line->sname,
- d, addr, line->filename, line->line);
- }
- /* FreeBSD's backtrace may show _start and so on */
- if (line->sname && strcmp("main", line->sname) == 0)
- break;
+ print_line(&lines[i], traces[i], errout);
+
+ /* FreeBSD's backtrace may show _start and so on */
+ if (lines[i].sname && strcmp("main", lines[i].sname) == 0)
+ break;
}
/* free */
while (obj) {
- obj_info_t *o = obj;
- obj = o->next;
- if (o->fd) {
- munmap(o->mapped, o->mapped_size);
- close(o->fd);
- }
- free(o);
+ obj_info_t *o = obj;
+ for (i=0; i < DWARF_SECTION_COUNT; i++) {
+ struct dwarf_section *s = obj_dwarf_section_at(obj, i);
+ if (s->flags & SHF_COMPRESSED) {
+ free(s->ptr);
+ }
+ }
+ if (obj->mapped_size) {
+ munmap(obj->mapped, obj->mapped_size);
+ }
+ obj = o->next;
+ free(o);
+ }
+ for (i = 0; i < num_traces; i++) {
+ line_info_t *line = lines[i].next;
+ while (line) {
+ line_info_t *l = line;
+ line = line->next;
+ free(l);
+ }
}
free(lines);
free(dladdr_fbases);
}
-/* From FreeBSD's lib/libstand/printf.c */
-/*-
- * Copyright (c) 1986, 1988, 1991, 1993
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)subr_prf.c 8.3 (Berkeley) 1/21/94
- */
-
-#include <stdarg.h>
-#define MAXNBUF (sizeof(intmax_t) * CHAR_BIT + 1)
-extern int rb_toupper(int c);
-#define toupper(c) rb_toupper(c)
-#define hex2ascii(hex) (hex2ascii_data[hex])
-char const hex2ascii_data[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-static inline int imax(int a, int b) { return (a > b ? a : b); }
-static int kvprintf(char const *fmt, void (*func)(int), void *arg, int radix, va_list ap);
-
-static void putce(int c)
-{
- char s[1];
- ssize_t ret;
-
- s[0] = (char)c;
- ret = write(2, s, 1);
- (void)ret;
-}
-
-int
-kprintf(const char *fmt, ...)
-{
- va_list ap;
- int retval;
-
- va_start(ap, fmt);
- retval = kvprintf(fmt, putce, NULL, 10, ap);
- va_end(ap);
- return retval;
-}
+#undef kprintf
-/*
- * Put a NUL-terminated ASCII number (base <= 36) in a buffer in reverse
- * order; return an optional length and a pointer to the last character
- * written in the buffer (i.e., the first character of the string).
- * The buffer pointed to by `nbuf' must have length >= MAXNBUF.
- */
-static char *
-ksprintn(char *nbuf, uintmax_t num, int base, int *lenp, int upper)
-{
- char *p, c;
-
- p = nbuf;
- *p = '\0';
- do {
- c = hex2ascii(num % base);
- *++p = upper ? toupper(c) : c;
- } while (num /= base);
- if (lenp)
- *lenp = (int)(p - nbuf);
- return (p);
-}
-
-/*
- * Scaled down version of printf(3).
- *
- * Two additional formats:
- *
- * The format %b is supported to decode error registers.
- * Its usage is:
- *
- * printf("reg=%b\n", regval, "<base><arg>*");
- *
- * where <base> is the output base expressed as a control character, e.g.
- * \10 gives octal; \20 gives hex. Each arg is a sequence of characters,
- * the first of which gives the bit number to be inspected (origin 1), and
- * the next characters (up to a control character, i.e. a character <= 32),
- * give the name of the register. Thus:
- *
- * kvprintf("reg=%b\n", 3, "\10\2BITTWO\1BITONE\n");
- *
- * would produce output:
- *
- * reg=3<BITTWO,BITONE>
- *
- * XXX: %D -- Hexdump, takes pointer and separator string:
- * ("%6D", ptr, ":") -> XX:XX:XX:XX:XX:XX
- * ("%*D", len, ptr, " " -> XX XX XX XX ...
- */
-static int
-kvprintf(char const *fmt, void (*func)(int), void *arg, int radix, va_list ap)
-{
-#define PCHAR(c) {int cc=(c); if (func) (*func)(cc); else *d++ = cc; retval++; }
- char nbuf[MAXNBUF];
- char *d;
- const char *p, *percent, *q;
- unsigned char *up;
- int ch, n;
- uintmax_t num;
- int base, lflag, qflag, tmp, width, ladjust, sharpflag, neg, sign, dot;
- int cflag, hflag, jflag, tflag, zflag;
- int dwidth, upper;
- char padc;
- int stop = 0, retval = 0;
-
- num = 0;
- if (!func)
- d = (char *) arg;
- else
- d = NULL;
-
- if (fmt == NULL)
- fmt = "(fmt null)\n";
-
- if (radix < 2 || radix > 36)
- radix = 10;
-
- for (;;) {
- padc = ' ';
- width = 0;
- while ((ch = (unsigned char)*fmt++) != '%' || stop) {
- if (ch == '\0')
- return (retval);
- PCHAR(ch);
- }
- percent = fmt - 1;
- qflag = 0; lflag = 0; ladjust = 0; sharpflag = 0; neg = 0;
- sign = 0; dot = 0; dwidth = 0; upper = 0;
- cflag = 0; hflag = 0; jflag = 0; tflag = 0; zflag = 0;
-reswitch: switch (ch = (unsigned char)*fmt++) {
- case '.':
- dot = 1;
- goto reswitch;
- case '#':
- sharpflag = 1;
- goto reswitch;
- case '+':
- sign = 1;
- goto reswitch;
- case '-':
- ladjust = 1;
- goto reswitch;
- case '%':
- PCHAR(ch);
- break;
- case '*':
- if (!dot) {
- width = va_arg(ap, int);
- if (width < 0) {
- ladjust = !ladjust;
- width = -width;
- }
- } else {
- dwidth = va_arg(ap, int);
- }
- goto reswitch;
- case '0':
- if (!dot) {
- padc = '0';
- goto reswitch;
- }
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- for (n = 0;; ++fmt) {
- n = n * 10 + ch - '0';
- ch = *fmt;
- if (ch < '0' || ch > '9')
- break;
- }
- if (dot)
- dwidth = n;
- else
- width = n;
- goto reswitch;
- case 'b':
- num = (unsigned int)va_arg(ap, int);
- p = va_arg(ap, char *);
- for (q = ksprintn(nbuf, num, *p++, NULL, 0); *q;)
- PCHAR(*q--);
-
- if (num == 0)
- break;
-
- for (tmp = 0; *p;) {
- n = *p++;
- if (num & (1 << (n - 1))) {
- PCHAR(tmp ? ',' : '<');
- for (; (n = *p) > ' '; ++p)
- PCHAR(n);
- tmp = 1;
- } else
- for (; *p > ' '; ++p)
- continue;
- }
- if (tmp)
- PCHAR('>');
- break;
- case 'c':
- PCHAR(va_arg(ap, int));
- break;
- case 'D':
- up = va_arg(ap, unsigned char *);
- p = va_arg(ap, char *);
- if (!width)
- width = 16;
- while(width--) {
- PCHAR(hex2ascii(*up >> 4));
- PCHAR(hex2ascii(*up & 0x0f));
- up++;
- if (width)
- for (q=p;*q;q++)
- PCHAR(*q);
- }
- break;
- case 'd':
- case 'i':
- base = 10;
- sign = 1;
- goto handle_sign;
- case 'h':
- if (hflag) {
- hflag = 0;
- cflag = 1;
- } else
- hflag = 1;
- goto reswitch;
- case 'j':
- jflag = 1;
- goto reswitch;
- case 'l':
- if (lflag) {
- lflag = 0;
- qflag = 1;
- } else
- lflag = 1;
- goto reswitch;
- case 'n':
- if (jflag)
- *(va_arg(ap, intmax_t *)) = retval;
- else if (qflag)
- *(va_arg(ap, int64_t *)) = retval;
- else if (lflag)
- *(va_arg(ap, long *)) = retval;
- else if (zflag)
- *(va_arg(ap, size_t *)) = retval;
- else if (hflag)
- *(va_arg(ap, short *)) = retval;
- else if (cflag)
- *(va_arg(ap, char *)) = retval;
- else
- *(va_arg(ap, int *)) = retval;
- break;
- case 'o':
- base = 8;
- goto handle_nosign;
- case 'p':
- base = 16;
- sharpflag = (width == 0);
- sign = 0;
- num = (uintptr_t)va_arg(ap, void *);
- goto number;
- case 'q':
- qflag = 1;
- goto reswitch;
- case 'r':
- base = radix;
- if (sign)
- goto handle_sign;
- goto handle_nosign;
- case 's':
- p = va_arg(ap, char *);
- if (p == NULL)
- p = "(null)";
- if (!dot)
- n = (int)strlen (p);
- else
- for (n = 0; n < dwidth && p[n]; n++)
- continue;
-
- width -= n;
-
- if (!ladjust && width > 0)
- while (width--)
- PCHAR(padc);
- while (n--)
- PCHAR(*p++);
- if (ladjust && width > 0)
- while (width--)
- PCHAR(padc);
- break;
- case 't':
- tflag = 1;
- goto reswitch;
- case 'u':
- base = 10;
- goto handle_nosign;
- case 'X':
- upper = 1;
- case 'x':
- base = 16;
- goto handle_nosign;
- case 'y':
- base = 16;
- sign = 1;
- goto handle_sign;
- case 'z':
- zflag = 1;
- goto reswitch;
-handle_nosign:
- sign = 0;
- if (jflag)
- num = va_arg(ap, uintmax_t);
- else if (qflag)
- num = va_arg(ap, uint64_t);
- else if (tflag)
- num = va_arg(ap, ptrdiff_t);
- else if (lflag)
- num = va_arg(ap, unsigned long);
- else if (zflag)
- num = va_arg(ap, size_t);
- else if (hflag)
- num = (unsigned short)va_arg(ap, int);
- else if (cflag)
- num = (unsigned char)va_arg(ap, int);
- else
- num = va_arg(ap, unsigned int);
- goto number;
-handle_sign:
- if (jflag)
- num = va_arg(ap, intmax_t);
- else if (qflag)
- num = va_arg(ap, int64_t);
- else if (tflag)
- num = va_arg(ap, ptrdiff_t);
- else if (lflag)
- num = va_arg(ap, long);
- else if (zflag)
- num = va_arg(ap, ssize_t);
- else if (hflag)
- num = (short)va_arg(ap, int);
- else if (cflag)
- num = (char)va_arg(ap, int);
- else
- num = va_arg(ap, int);
-number:
- if (sign && (intmax_t)num < 0) {
- neg = 1;
- num = -(intmax_t)num;
- }
- p = ksprintn(nbuf, num, base, &n, upper);
- tmp = 0;
- if (sharpflag && num != 0) {
- if (base == 8)
- tmp++;
- else if (base == 16)
- tmp += 2;
- }
- if (neg)
- tmp++;
-
- if (!ladjust && padc == '0')
- dwidth = width - tmp;
- width -= tmp + imax(dwidth, n);
- dwidth -= n;
- if (!ladjust)
- while (width-- > 0)
- PCHAR(' ');
- if (neg)
- PCHAR('-');
- if (sharpflag && num != 0) {
- if (base == 8) {
- PCHAR('0');
- } else if (base == 16) {
- PCHAR('0');
- PCHAR('x');
- }
- }
- while (dwidth-- > 0)
- PCHAR('0');
-
- while (*p)
- PCHAR(*p--);
-
- if (ladjust)
- while (width-- > 0)
- PCHAR(' ');
-
- break;
- default:
- while (percent < fmt)
- PCHAR(*percent++);
- /*
- * Since we ignore an formatting argument it is no
- * longer safe to obey the remaining formatting
- * arguments as the arguments will no longer match
- * the format specs.
- */
- stop = 1;
- break;
- }
- }
-#undef PCHAR
-}
#else /* defined(USE_ELF) */
#error not supported
#endif
diff --git a/addr2line.h b/addr2line.h
index d99f010934..ff8e476b92 100644
--- a/addr2line.h
+++ b/addr2line.h
@@ -1,3 +1,5 @@
+#ifndef RUBY_ADDR2LINE_H
+#define RUBY_ADDR2LINE_H
/**********************************************************************
addr2line.h -
@@ -8,13 +10,12 @@
**********************************************************************/
-#ifndef RUBY_ADDR2LINE_H
-#define RUBY_ADDR2LINE_H
+#if (defined(USE_ELF) || defined(HAVE_MACH_O_LOADER_H))
-#ifdef USE_ELF
+#include <stdio.h>
void
-rb_dump_backtrace_with_lines(int num_traces, void **traces);
+rb_dump_backtrace_with_lines(int num_traces, void **traces, FILE *errout);
#endif /* USE_ELF */
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index e01f673022..0000000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,37 +0,0 @@
----
-shallow_clone: true
-platform: x64
-install:
- - SET
- - '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64'
- - SET PATH=\usr\local\bin;C:\Ruby22-x64\bin;C:\Ruby21-x64\Devkit\mingw\bin;%PATH%;C:\msys64\usr\bin
- - ruby --version
- - 'cl'
- - SET
- - mkdir \usr\local\bin
- - mkdir \usr\local\include
- - mkdir \usr\local\lib
- - ps: Start-FileDownload 'http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.2.5-windows.zip'
- - 7z x libressl-2.2.5-windows.zip
- - copy libressl-2.2.5-windows\x64\libcrypto-35.lib \usr\local\lib\crypto.lib
- - copy libressl-2.2.5-windows\x64\libssl-35.lib \usr\local\lib\ssl.lib
- - copy libressl-2.2.5-windows\x64\libcrypto-35.dll \usr\local\bin
- - copy libressl-2.2.5-windows\x64\libssl-35.dll \usr\local\bin
- - xcopy /e libressl-2.2.5-windows\include \usr\local\include
- - ps: Start-FileDownload 'http://zlib.net/zlib128.zip'
- - 7z x zlib128.zip
- - cd zlib-1.2.8
- - nmake -f win32/Makefile.msc
- - copy zlib1.dll \usr\local\bin
- - copy zlib.lib \usr\local\lib
- - copy zconf.h \usr\local\include
- - copy zlib.h \usr\local\include
-build_script:
- - cd %APPVEYOR_BUILD_FOLDER%
- - win32\configure.bat --without-ext=+,dbm,gdbm,readline,tk* --with-opt-dir=/usr/local
- - nmake -l up
- - nmake -l
- - nmake install-nodoc
-test_script:
- - nmake -l "OPTS=-v -q" btest
- - nmake -l "OPTS=-v -q" test-basic
diff --git a/array.c b/array.c
index 5f4bfc6297..b471823876 100644
--- a/array.c
+++ b/array.c
@@ -11,66 +11,118 @@
**********************************************************************/
+#include "debug_counter.h"
+#include "id.h"
#include "internal.h"
-#include "ruby/util.h"
-#include "ruby/st.h"
+#include "internal/array.h"
+#include "internal/compar.h"
+#include "internal/enum.h"
+#include "internal/gc.h"
+#include "internal/hash.h"
+#include "internal/numeric.h"
+#include "internal/object.h"
+#include "internal/proc.h"
+#include "internal/rational.h"
+#include "internal/vm.h"
#include "probes.h"
-#include "id.h"
+#include "ruby/encoding.h"
+#include "ruby/st.h"
+#include "ruby/thread.h"
+#include "ruby/util.h"
+#include "ruby/ractor.h"
+#include "vm_core.h"
+#include "builtin.h"
-#ifndef ARRAY_DEBUG
+#if !ARRAY_DEBUG
+# undef NDEBUG
# define NDEBUG
#endif
#include "ruby_assert.h"
VALUE rb_cArray;
+VALUE rb_cArray_empty_frozen;
+
+/* Flags of RArray
+ *
+ * 0: RARRAY_SHARED_FLAG (equal to ELTS_SHARED)
+ * The array is shared. The buffer this array points to is owned by
+ * another array (the shared root).
+ * 1: RARRAY_EMBED_FLAG
+ * The array is embedded (its contents follow the header, rather than
+ * being on a separately allocated buffer).
+ * 3-9: RARRAY_EMBED_LEN
+ * The length of the array when RARRAY_EMBED_FLAG is set.
+ * 12: RARRAY_SHARED_ROOT_FLAG
+ * The array is a shared root that does reference counting. The buffer
+ * this array points to is owned by this array but may be pointed to
+ * by other arrays.
+ * Note: Frozen arrays may be a shared root without this flag being
+ * set. Frozen arrays do not have reference counting because
+ * they cannot be modified. Not updating the reference count
+ * improves copy-on-write performance. Their reference count is
+ * assumed to be infinity.
+ * 14: RARRAY_PTR_IN_USE_FLAG
+ * The buffer of the array is in use. This is only used during
+ * debugging.
+ */
-static ID id_cmp, id_div, id_power;
+/* for OPTIMIZED_CMP: */
+#define id_cmp idCmp
#define ARY_DEFAULT_SIZE 16
#define ARY_MAX_SIZE (LONG_MAX / (int)sizeof(VALUE))
+#define SMALL_ARRAY_LEN 16
-# define ARY_SHARED_P(ary) \
- (assert(!FL_TEST((ary), ELTS_SHARED) || !FL_TEST((ary), RARRAY_EMBED_FLAG)), \
- FL_TEST((ary),ELTS_SHARED)!=0)
-# define ARY_EMBED_P(ary) \
- (assert(!FL_TEST((ary), ELTS_SHARED) || !FL_TEST((ary), RARRAY_EMBED_FLAG)), \
- FL_TEST((ary), RARRAY_EMBED_FLAG)!=0)
+RBIMPL_ATTR_MAYBE_UNUSED()
+static int
+should_be_T_ARRAY(VALUE ary)
+{
+ return RB_TYPE_P(ary, T_ARRAY);
+}
-#define ARY_HEAP_PTR(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.ptr)
-#define ARY_HEAP_LEN(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.len)
-#define ARY_EMBED_PTR(a) (assert(ARY_EMBED_P(a)), RARRAY(a)->as.ary)
+#define ARY_HEAP_PTR(a) (RUBY_ASSERT(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.ptr)
+#define ARY_HEAP_LEN(a) (RUBY_ASSERT(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.len)
+#define ARY_HEAP_CAPA(a) (RUBY_ASSERT(!ARY_EMBED_P(a)), RUBY_ASSERT(!ARY_SHARED_ROOT_P(a)), \
+ RARRAY(a)->as.heap.aux.capa)
+
+#define ARY_EMBED_PTR(a) (RUBY_ASSERT(ARY_EMBED_P(a)), RARRAY(a)->as.ary)
#define ARY_EMBED_LEN(a) \
- (assert(ARY_EMBED_P(a)), \
+ (RUBY_ASSERT(ARY_EMBED_P(a)), \
(long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \
- (RARRAY_EMBED_LEN_MASK >> RARRAY_EMBED_LEN_SHIFT)))
-#define ARY_HEAP_SIZE(a) (assert(!ARY_EMBED_P(a)), assert(ARY_OWNS_HEAP_P(a)), RARRAY(a)->as.heap.aux.capa * sizeof(VALUE))
+ (RARRAY_EMBED_LEN_MASK >> RARRAY_EMBED_LEN_SHIFT)))
+#define ARY_HEAP_SIZE(a) (RUBY_ASSERT(!ARY_EMBED_P(a)), RUBY_ASSERT(ARY_OWNS_HEAP_P(a)), ARY_CAPA(a) * sizeof(VALUE))
+
+#define ARY_OWNS_HEAP_P(a) (RUBY_ASSERT(should_be_T_ARRAY((VALUE)(a))), \
+ !FL_TEST_RAW((a), RARRAY_SHARED_FLAG|RARRAY_EMBED_FLAG))
-#define ARY_OWNS_HEAP_P(a) (!FL_TEST((a), ELTS_SHARED|RARRAY_EMBED_FLAG))
#define FL_SET_EMBED(a) do { \
- assert(!ARY_SHARED_P(a)); \
+ RUBY_ASSERT(!ARY_SHARED_P(a)); \
FL_SET((a), RARRAY_EMBED_FLAG); \
+ ary_verify(a); \
} while (0)
+
#define FL_UNSET_EMBED(ary) FL_UNSET((ary), RARRAY_EMBED_FLAG|RARRAY_EMBED_LEN_MASK)
#define FL_SET_SHARED(ary) do { \
- assert(!ARY_EMBED_P(ary)); \
- FL_SET((ary), ELTS_SHARED); \
+ RUBY_ASSERT(!ARY_EMBED_P(ary)); \
+ FL_SET((ary), RARRAY_SHARED_FLAG); \
} while (0)
-#define FL_UNSET_SHARED(ary) FL_UNSET((ary), ELTS_SHARED)
+#define FL_UNSET_SHARED(ary) FL_UNSET((ary), RARRAY_SHARED_FLAG)
+#define ARY_SET_PTR_FORCE(ary, p) \
+ (RARRAY(ary)->as.heap.ptr = (p))
#define ARY_SET_PTR(ary, p) do { \
- assert(!ARY_EMBED_P(ary)); \
- assert(!OBJ_FROZEN(ary)); \
- RARRAY(ary)->as.heap.ptr = (p); \
+ RUBY_ASSERT(!ARY_EMBED_P(ary)); \
+ RUBY_ASSERT(!OBJ_FROZEN(ary)); \
+ ARY_SET_PTR_FORCE(ary, p); \
} while (0)
#define ARY_SET_EMBED_LEN(ary, n) do { \
long tmp_n = (n); \
- assert(ARY_EMBED_P(ary)); \
- assert(!OBJ_FROZEN(ary)); \
+ RUBY_ASSERT(ARY_EMBED_P(ary)); \
RBASIC(ary)->flags &= ~RARRAY_EMBED_LEN_MASK; \
RBASIC(ary)->flags |= (tmp_n) << RARRAY_EMBED_LEN_SHIFT; \
} while (0)
#define ARY_SET_HEAP_LEN(ary, n) do { \
- assert(!ARY_EMBED_P(ary)); \
+ RUBY_ASSERT(!ARY_EMBED_P(ary)); \
RARRAY(ary)->as.heap.len = (n); \
} while (0)
#define ARY_SET_LEN(ary, n) do { \
@@ -80,15 +132,15 @@ static ID id_cmp, id_div, id_power;
else { \
ARY_SET_HEAP_LEN((ary), (n)); \
} \
- assert(RARRAY_LEN(ary) == (n)); \
+ RUBY_ASSERT(RARRAY_LEN(ary) == (n)); \
} while (0)
#define ARY_INCREASE_PTR(ary, n) do { \
- assert(!ARY_EMBED_P(ary)); \
- assert(!OBJ_FROZEN(ary)); \
+ RUBY_ASSERT(!ARY_EMBED_P(ary)); \
+ RUBY_ASSERT(!OBJ_FROZEN(ary)); \
RARRAY(ary)->as.heap.ptr += (n); \
} while (0)
#define ARY_INCREASE_LEN(ary, n) do { \
- assert(!OBJ_FROZEN(ary)); \
+ RUBY_ASSERT(!OBJ_FROZEN(ary)); \
if (ARY_EMBED_P(ary)) { \
ARY_SET_EMBED_LEN((ary), RARRAY_LEN(ary)+(n)); \
} \
@@ -97,45 +149,154 @@ static ID id_cmp, id_div, id_power;
} \
} while (0)
-#define ARY_CAPA(ary) (ARY_EMBED_P(ary) ? RARRAY_EMBED_LEN_MAX : \
- ARY_SHARED_ROOT_P(ary) ? RARRAY_LEN(ary) : RARRAY(ary)->as.heap.aux.capa)
+#define ARY_CAPA(ary) (ARY_EMBED_P(ary) ? ary_embed_capa(ary) : \
+ ARY_SHARED_ROOT_P(ary) ? RARRAY_LEN(ary) : ARY_HEAP_CAPA(ary))
+#define ARY_SET_CAPA_FORCE(ary, n) \
+ RARRAY(ary)->as.heap.aux.capa = (n);
#define ARY_SET_CAPA(ary, n) do { \
- assert(!ARY_EMBED_P(ary)); \
- assert(!ARY_SHARED_P(ary)); \
- assert(!OBJ_FROZEN(ary)); \
- RARRAY(ary)->as.heap.aux.capa = (n); \
+ RUBY_ASSERT(!ARY_EMBED_P(ary)); \
+ RUBY_ASSERT(!ARY_SHARED_P(ary)); \
+ RUBY_ASSERT(!OBJ_FROZEN(ary)); \
+ ARY_SET_CAPA_FORCE(ary, n); \
} while (0)
-#define ARY_SHARED(ary) (assert(ARY_SHARED_P(ary)), RARRAY(ary)->as.heap.aux.shared)
-#define ARY_SET_SHARED(ary, value) do { \
- const VALUE _ary_ = (ary); \
- const VALUE _value_ = (value); \
- assert(!ARY_EMBED_P(_ary_)); \
- assert(ARY_SHARED_P(_ary_)); \
- assert(ARY_SHARED_ROOT_P(_value_)); \
- RB_OBJ_WRITE(_ary_, &RARRAY(_ary_)->as.heap.aux.shared, _value_); \
-} while (0)
-#define RARRAY_SHARED_ROOT_FLAG FL_USER5
-#define ARY_SHARED_ROOT_P(ary) (FL_TEST((ary), RARRAY_SHARED_ROOT_FLAG))
-#define ARY_SHARED_NUM(ary) \
- (assert(ARY_SHARED_ROOT_P(ary)), RARRAY(ary)->as.heap.aux.capa)
-#define ARY_SHARED_OCCUPIED(ary) (ARY_SHARED_NUM(ary) == 1)
-#define ARY_SET_SHARED_NUM(ary, value) do { \
- assert(ARY_SHARED_ROOT_P(ary)); \
+#define ARY_SHARED_ROOT_OCCUPIED(ary) (!OBJ_FROZEN(ary) && ARY_SHARED_ROOT_REFCNT(ary) == 1)
+#define ARY_SET_SHARED_ROOT_REFCNT(ary, value) do { \
+ RUBY_ASSERT(ARY_SHARED_ROOT_P(ary)); \
+ RUBY_ASSERT(!OBJ_FROZEN(ary)); \
+ RUBY_ASSERT((value) >= 0); \
RARRAY(ary)->as.heap.aux.capa = (value); \
} while (0)
#define FL_SET_SHARED_ROOT(ary) do { \
- assert(!ARY_EMBED_P(ary)); \
+ RUBY_ASSERT(!OBJ_FROZEN(ary)); \
+ RUBY_ASSERT(!ARY_EMBED_P(ary)); \
FL_SET((ary), RARRAY_SHARED_ROOT_FLAG); \
} while (0)
-#define ARY_SET(a, i, v) RARRAY_ASET((assert(!ARY_SHARED_P(a)), (a)), (i), (v))
+static inline void
+ARY_SET(VALUE a, long i, VALUE v)
+{
+ RUBY_ASSERT(!ARY_SHARED_P(a));
+ RUBY_ASSERT(!OBJ_FROZEN(a));
+
+ RARRAY_ASET(a, i, v);
+}
+#undef RARRAY_ASET
+
+static long
+ary_embed_capa(VALUE ary)
+{
+ size_t size = rb_gc_obj_slot_size(ary) - offsetof(struct RArray, as.ary);
+ RUBY_ASSERT(size % sizeof(VALUE) == 0);
+ return size / sizeof(VALUE);
+}
+
+static size_t
+ary_embed_size(long capa)
+{
+ size_t size = offsetof(struct RArray, as.ary) + (sizeof(VALUE) * capa);
+ if (size < sizeof(struct RArray)) size = sizeof(struct RArray);
+ return size;
+}
+
+static bool
+ary_embeddable_p(long capa)
+{
+ return rb_gc_size_allocatable_p(ary_embed_size(capa));
+}
+
+bool
+rb_ary_embeddable_p(VALUE ary)
+{
+ /* An array cannot be turned embeddable when the array is:
+ * - Shared root: other objects may point to the buffer of this array
+ * so we cannot make it embedded.
+ * - Frozen: this array may also be a shared root without the shared root
+ * flag.
+ * - Shared: we don't want to re-embed an array that points to a shared
+ * root (to save memory).
+ */
+ return !(ARY_SHARED_ROOT_P(ary) || OBJ_FROZEN(ary) || ARY_SHARED_P(ary));
+}
+
+size_t
+rb_ary_size_as_embedded(VALUE ary)
+{
+ size_t real_size;
+
+ if (ARY_EMBED_P(ary)) {
+ real_size = ary_embed_size(ARY_EMBED_LEN(ary));
+ }
+ else if (rb_ary_embeddable_p(ary)) {
+ real_size = ary_embed_size(ARY_HEAP_CAPA(ary));
+ }
+ else {
+ real_size = sizeof(struct RArray);
+ }
+ return real_size;
+}
+
+
+#if ARRAY_DEBUG
+#define ary_verify(ary) ary_verify_(ary, __FILE__, __LINE__)
+
+static VALUE
+ary_verify_(VALUE ary, const char *file, int line)
+{
+ RUBY_ASSERT(RB_TYPE_P(ary, T_ARRAY));
+
+ if (ARY_SHARED_P(ary)) {
+ VALUE root = ARY_SHARED_ROOT(ary);
+ const VALUE *ptr = ARY_HEAP_PTR(ary);
+ const VALUE *root_ptr = RARRAY_CONST_PTR(root);
+ long len = ARY_HEAP_LEN(ary), root_len = RARRAY_LEN(root);
+ RUBY_ASSERT(ARY_SHARED_ROOT_P(root) || OBJ_FROZEN(root));
+ RUBY_ASSERT(root_ptr <= ptr && ptr + len <= root_ptr + root_len);
+ ary_verify(root);
+ }
+ else if (ARY_EMBED_P(ary)) {
+ RUBY_ASSERT(!ARY_SHARED_P(ary));
+ RUBY_ASSERT(RARRAY_LEN(ary) <= ary_embed_capa(ary));
+ }
+ else {
+ const VALUE *ptr = RARRAY_CONST_PTR(ary);
+ long i, len = RARRAY_LEN(ary);
+ volatile VALUE v;
+ if (len > 1) len = 1; /* check only HEAD */
+ for (i=0; i<len; i++) {
+ v = ptr[i]; /* access check */
+ }
+ v = v;
+ }
+
+ return ary;
+}
+#else
+#define ary_verify(ary) ((void)0)
+#endif
+
+VALUE *
+rb_ary_ptr_use_start(VALUE ary)
+{
+#if ARRAY_DEBUG
+ FL_SET_RAW(ary, RARRAY_PTR_IN_USE_FLAG);
+#endif
+ return (VALUE *)RARRAY_CONST_PTR(ary);
+}
+
+void
+rb_ary_ptr_use_end(VALUE ary)
+{
+#if ARRAY_DEBUG
+ FL_UNSET_RAW(ary, RARRAY_PTR_IN_USE_FLAG);
+#endif
+}
void
-rb_mem_clear(register VALUE *mem, register long size)
+rb_mem_clear(VALUE *mem, long size)
{
while (size--) {
- *mem++ = Qnil;
+ *mem++ = Qnil;
}
}
@@ -143,7 +304,7 @@ static void
ary_mem_clear(VALUE ary, long beg, long size)
{
RARRAY_PTR_USE(ary, ptr, {
- rb_mem_clear(ptr + beg, size);
+ rb_mem_clear(ptr + beg, size);
});
}
@@ -151,7 +312,7 @@ static inline void
memfill(register VALUE *mem, register long size, register VALUE val)
{
while (size--) {
- *mem++ = val;
+ *mem++ = val;
}
}
@@ -159,36 +320,30 @@ static void
ary_memfill(VALUE ary, long beg, long size, VALUE val)
{
RARRAY_PTR_USE(ary, ptr, {
- memfill(ptr + beg, size, val);
- RB_OBJ_WRITTEN(ary, Qundef, val);
+ memfill(ptr + beg, size, val);
+ RB_OBJ_WRITTEN(ary, Qundef, val);
});
}
static void
ary_memcpy0(VALUE ary, long beg, long argc, const VALUE *argv, VALUE buff_owner_ary)
{
-#if 1
- assert(!ARY_SHARED_P(buff_owner_ary));
+ RUBY_ASSERT(!ARY_SHARED_P(buff_owner_ary));
if (argc > (int)(128/sizeof(VALUE)) /* is magic number (cache line size) */) {
- rb_gc_writebarrier_remember(buff_owner_ary);
- RARRAY_PTR_USE(ary, ptr, {
- MEMCPY(ptr+beg, argv, VALUE, argc);
- });
+ rb_gc_writebarrier_remember(buff_owner_ary);
+ RARRAY_PTR_USE(ary, ptr, {
+ MEMCPY(ptr+beg, argv, VALUE, argc);
+ });
}
else {
- int i;
- RARRAY_PTR_USE(ary, ptr, {
- for (i=0; i<argc; i++) {
- RB_OBJ_WRITE(buff_owner_ary, &ptr[i+beg], argv[i]);
- }
- });
+ int i;
+ RARRAY_PTR_USE(ary, ptr, {
+ for (i=0; i<argc; i++) {
+ RB_OBJ_WRITE(buff_owner_ary, &ptr[i+beg], argv[i]);
+ }
+ });
}
-#else
- /* giveup write barrier (traditional way) */
- RARRAY_PTR(buff_owner_ary);
- MEMCPY(RARRAY_PTR(ary)+beg, argv, VALUE, argc);
-#endif
}
static void
@@ -197,49 +352,105 @@ ary_memcpy(VALUE ary, long beg, long argc, const VALUE *argv)
ary_memcpy0(ary, beg, argc, argv, ary);
}
+static VALUE *
+ary_heap_alloc_buffer(size_t capa)
+{
+ return ALLOC_N(VALUE, capa);
+}
+
+static void
+ary_heap_free_ptr(VALUE ary, const VALUE *ptr, long size)
+{
+ ruby_sized_xfree((void *)ptr, size);
+}
+
+static void
+ary_heap_free(VALUE ary)
+{
+ ary_heap_free_ptr(ary, ARY_HEAP_PTR(ary), ARY_HEAP_SIZE(ary));
+}
+
+static size_t
+ary_heap_realloc(VALUE ary, size_t new_capa)
+{
+ RUBY_ASSERT(!OBJ_FROZEN(ary));
+ SIZED_REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, new_capa, ARY_HEAP_CAPA(ary));
+ ary_verify(ary);
+
+ return new_capa;
+}
+
+void
+rb_ary_make_embedded(VALUE ary)
+{
+ RUBY_ASSERT(rb_ary_embeddable_p(ary));
+ if (!ARY_EMBED_P(ary)) {
+ const VALUE *buf = ARY_HEAP_PTR(ary);
+ long len = ARY_HEAP_LEN(ary);
+
+ FL_SET_EMBED(ary);
+ ARY_SET_EMBED_LEN(ary, len);
+
+ MEMCPY((void *)ARY_EMBED_PTR(ary), (void *)buf, VALUE, len);
+
+ ary_heap_free_ptr(ary, buf, len * sizeof(VALUE));
+ }
+}
+
static void
ary_resize_capa(VALUE ary, long capacity)
{
- assert(RARRAY_LEN(ary) <= capacity);
- assert(!OBJ_FROZEN(ary));
- assert(!ARY_SHARED_P(ary));
- if (capacity > RARRAY_EMBED_LEN_MAX) {
+ RUBY_ASSERT(RARRAY_LEN(ary) <= capacity);
+ RUBY_ASSERT(!OBJ_FROZEN(ary));
+ RUBY_ASSERT(!ARY_SHARED_P(ary));
+
+ if (capacity > ary_embed_capa(ary)) {
+ size_t new_capa = capacity;
if (ARY_EMBED_P(ary)) {
long len = ARY_EMBED_LEN(ary);
- VALUE *ptr = ALLOC_N(VALUE, (capacity));
+ VALUE *ptr = ary_heap_alloc_buffer(capacity);
+
MEMCPY(ptr, ARY_EMBED_PTR(ary), VALUE, len);
FL_UNSET_EMBED(ary);
ARY_SET_PTR(ary, ptr);
ARY_SET_HEAP_LEN(ary, len);
}
else {
- SIZED_REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, capacity, RARRAY(ary)->as.heap.aux.capa);
+ new_capa = ary_heap_realloc(ary, capacity);
}
- ARY_SET_CAPA(ary, (capacity));
+ ARY_SET_CAPA(ary, new_capa);
}
else {
if (!ARY_EMBED_P(ary)) {
- long len = RARRAY_LEN(ary);
- const VALUE *ptr = RARRAY_CONST_PTR(ary);
+ long len = ARY_HEAP_LEN(ary);
+ long old_capa = ARY_HEAP_CAPA(ary);
+ const VALUE *ptr = ARY_HEAP_PTR(ary);
- if (len > capacity) len = capacity;
+ if (len > capacity) len = capacity;
MEMCPY((VALUE *)RARRAY(ary)->as.ary, ptr, VALUE, len);
+ ary_heap_free_ptr(ary, ptr, old_capa);
+
FL_SET_EMBED(ary);
ARY_SET_LEN(ary, len);
- ruby_xfree((VALUE *)ptr);
}
}
+
+ ary_verify(ary);
}
static inline void
ary_shrink_capa(VALUE ary)
{
long capacity = ARY_HEAP_LEN(ary);
- long old_capa = RARRAY(ary)->as.heap.aux.capa;
- assert(!ARY_SHARED_P(ary));
- assert(old_capa >= capacity);
- if (old_capa > capacity)
- REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, capacity);
+ long old_capa = ARY_HEAP_CAPA(ary);
+ RUBY_ASSERT(!ARY_SHARED_P(ary));
+ RUBY_ASSERT(old_capa >= capacity);
+ if (old_capa > capacity) {
+ size_t new_capa = ary_heap_realloc(ary, capacity);
+ ARY_SET_CAPA(ary, new_capa);
+ }
+
+ ary_verify(ary);
}
static void
@@ -248,106 +459,128 @@ ary_double_capa(VALUE ary, long min)
long new_capa = ARY_CAPA(ary) / 2;
if (new_capa < ARY_DEFAULT_SIZE) {
- new_capa = ARY_DEFAULT_SIZE;
+ new_capa = ARY_DEFAULT_SIZE;
}
if (new_capa >= ARY_MAX_SIZE - min) {
- new_capa = (ARY_MAX_SIZE - min) / 2;
+ new_capa = (ARY_MAX_SIZE - min) / 2;
}
new_capa += min;
ary_resize_capa(ary, new_capa);
+
+ ary_verify(ary);
}
static void
-rb_ary_decrement_share(VALUE shared)
+rb_ary_decrement_share(VALUE shared_root)
{
- if (shared) {
- long num = ARY_SHARED_NUM(shared) - 1;
- if (num == 0) {
- rb_ary_free(shared);
- rb_gc_force_recycle(shared);
- }
- else if (num > 0) {
- ARY_SET_SHARED_NUM(shared, num);
- }
+ if (!OBJ_FROZEN(shared_root)) {
+ long num = ARY_SHARED_ROOT_REFCNT(shared_root);
+ ARY_SET_SHARED_ROOT_REFCNT(shared_root, num - 1);
}
}
static void
rb_ary_unshare(VALUE ary)
{
- VALUE shared = RARRAY(ary)->as.heap.aux.shared;
- rb_ary_decrement_share(shared);
+ VALUE shared_root = ARY_SHARED_ROOT(ary);
+ rb_ary_decrement_share(shared_root);
FL_UNSET_SHARED(ary);
}
-static inline void
-rb_ary_unshare_safe(VALUE ary)
+static void
+rb_ary_reset(VALUE ary)
{
- if (ARY_SHARED_P(ary) && !ARY_EMBED_P(ary)) {
- rb_ary_unshare(ary);
+ if (ARY_OWNS_HEAP_P(ary)) {
+ ary_heap_free(ary);
+ }
+ else if (ARY_SHARED_P(ary)) {
+ rb_ary_unshare(ary);
}
+
+ FL_SET_EMBED(ary);
+ ARY_SET_EMBED_LEN(ary, 0);
}
static VALUE
-rb_ary_increment_share(VALUE shared)
+rb_ary_increment_share(VALUE shared_root)
{
- long num = ARY_SHARED_NUM(shared);
- if (num >= 0) {
- ARY_SET_SHARED_NUM(shared, num + 1);
+ if (!OBJ_FROZEN(shared_root)) {
+ long num = ARY_SHARED_ROOT_REFCNT(shared_root);
+ RUBY_ASSERT(num >= 0);
+ ARY_SET_SHARED_ROOT_REFCNT(shared_root, num + 1);
}
- return shared;
+ return shared_root;
}
static void
-rb_ary_set_shared(VALUE ary, VALUE shared)
+rb_ary_set_shared(VALUE ary, VALUE shared_root)
{
- rb_ary_increment_share(shared);
+ RUBY_ASSERT(!ARY_EMBED_P(ary));
+ RUBY_ASSERT(!OBJ_FROZEN(ary));
+ RUBY_ASSERT(ARY_SHARED_ROOT_P(shared_root) || OBJ_FROZEN(shared_root));
+
+ rb_ary_increment_share(shared_root);
FL_SET_SHARED(ary);
- ARY_SET_SHARED(ary, shared);
+ RB_OBJ_WRITE(ary, &RARRAY(ary)->as.heap.aux.shared_root, shared_root);
+
+ RB_DEBUG_COUNTER_INC(obj_ary_shared_create);
}
static inline void
rb_ary_modify_check(VALUE ary)
{
+ RUBY_ASSERT(ruby_thread_has_gvl_p());
+
rb_check_frozen(ary);
+ ary_verify(ary);
}
void
-rb_ary_modify(VALUE ary)
+rb_ary_cancel_sharing(VALUE ary)
{
- rb_ary_modify_check(ary);
if (ARY_SHARED_P(ary)) {
- long shared_len, len = RARRAY_LEN(ary);
- VALUE shared = ARY_SHARED(ary);
- if (len <= RARRAY_EMBED_LEN_MAX) {
- const VALUE *ptr = ARY_HEAP_PTR(ary);
+ long shared_len, len = RARRAY_LEN(ary);
+ VALUE shared_root = ARY_SHARED_ROOT(ary);
+
+ ary_verify(shared_root);
+
+ if (len <= ary_embed_capa(ary)) {
+ const VALUE *ptr = ARY_HEAP_PTR(ary);
FL_UNSET_SHARED(ary);
FL_SET_EMBED(ary);
- MEMCPY((VALUE *)ARY_EMBED_PTR(ary), ptr, VALUE, len);
- rb_ary_decrement_share(shared);
+ MEMCPY((VALUE *)ARY_EMBED_PTR(ary), ptr, VALUE, len);
+ rb_ary_decrement_share(shared_root);
ARY_SET_EMBED_LEN(ary, len);
}
- else if (ARY_SHARED_OCCUPIED(shared) && len > ((shared_len = RARRAY_LEN(shared))>>1)) {
- long shift = RARRAY_CONST_PTR(ary) - RARRAY_CONST_PTR(shared);
- FL_UNSET_SHARED(ary);
- ARY_SET_PTR(ary, RARRAY_CONST_PTR(shared));
- ARY_SET_CAPA(ary, shared_len);
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr, ptr+shift, VALUE, len);
- });
- FL_SET_EMBED(shared);
- rb_ary_decrement_share(shared);
- }
+ else if (ARY_SHARED_ROOT_OCCUPIED(shared_root) && len > ((shared_len = RARRAY_LEN(shared_root))>>1)) {
+ long shift = RARRAY_CONST_PTR(ary) - RARRAY_CONST_PTR(shared_root);
+ FL_UNSET_SHARED(ary);
+ ARY_SET_PTR(ary, RARRAY_CONST_PTR(shared_root));
+ ARY_SET_CAPA(ary, shared_len);
+ RARRAY_PTR_USE(ary, ptr, {
+ MEMMOVE(ptr, ptr+shift, VALUE, len);
+ });
+ FL_SET_EMBED(shared_root);
+ rb_ary_decrement_share(shared_root);
+ }
else {
- VALUE *ptr = ALLOC_N(VALUE, len);
- MEMCPY(ptr, RARRAY_CONST_PTR(ary), VALUE, len);
+ VALUE *ptr = ary_heap_alloc_buffer(len);
+ MEMCPY(ptr, ARY_HEAP_PTR(ary), VALUE, len);
rb_ary_unshare(ary);
- ARY_SET_CAPA(ary, len);
- ARY_SET_PTR(ary, ptr);
+ ARY_SET_CAPA_FORCE(ary, len);
+ ARY_SET_PTR_FORCE(ary, ptr);
}
- rb_gc_writebarrier_remember(ary);
+ rb_gc_writebarrier_remember(ary);
}
+ ary_verify(ary);
+}
+
+void
+rb_ary_modify(VALUE ary)
+{
+ rb_ary_modify_check(ary);
+ rb_ary_cancel_sharing(ary);
}
static VALUE
@@ -358,66 +591,75 @@ ary_ensure_room_for_push(VALUE ary, long add_len)
long capa;
if (old_len > ARY_MAX_SIZE - add_len) {
- rb_raise(rb_eIndexError, "index %ld too big", new_len);
+ rb_raise(rb_eIndexError, "index %ld too big", new_len);
}
if (ARY_SHARED_P(ary)) {
- if (new_len > RARRAY_EMBED_LEN_MAX) {
- VALUE shared = ARY_SHARED(ary);
- if (ARY_SHARED_OCCUPIED(shared)) {
- if (RARRAY_CONST_PTR(ary) - RARRAY_CONST_PTR(shared) + new_len <= RARRAY_LEN(shared)) {
- rb_ary_modify_check(ary);
- return shared;
- }
- else {
- /* if array is shared, then it is likely it participate in push/shift pattern */
- rb_ary_modify(ary);
- capa = ARY_CAPA(ary);
- if (new_len > capa - (capa >> 6)) {
- ary_double_capa(ary, new_len);
- }
- return ary;
- }
- }
- }
+ if (new_len > ary_embed_capa(ary)) {
+ VALUE shared_root = ARY_SHARED_ROOT(ary);
+ if (ARY_SHARED_ROOT_OCCUPIED(shared_root)) {
+ if (ARY_HEAP_PTR(ary) - RARRAY_CONST_PTR(shared_root) + new_len <= RARRAY_LEN(shared_root)) {
+ rb_ary_modify_check(ary);
+
+ ary_verify(ary);
+ ary_verify(shared_root);
+ return shared_root;
+ }
+ else {
+ /* if array is shared, then it is likely it participate in push/shift pattern */
+ rb_ary_modify(ary);
+ capa = ARY_CAPA(ary);
+ if (new_len > capa - (capa >> 6)) {
+ ary_double_capa(ary, new_len);
+ }
+ ary_verify(ary);
+ return ary;
+ }
+ }
+ }
+ ary_verify(ary);
+ rb_ary_modify(ary);
+ }
+ else {
+ rb_ary_modify_check(ary);
}
- rb_ary_modify(ary);
capa = ARY_CAPA(ary);
if (new_len > capa) {
- ary_double_capa(ary, new_len);
+ ary_double_capa(ary, new_len);
}
+ ary_verify(ary);
return ary;
}
/*
* call-seq:
- * ary.freeze -> ary
+ * freeze -> self
*
- * Calls Object#freeze on +ary+ to prevent any further
- * modification. A RuntimeError will be raised if a modification
- * attempt is made.
+ * Freezes +self+ (if not already frozen); returns +self+:
*
+ * a = []
+ * a.frozen? # => false
+ * a.freeze
+ * a.frozen? # => true
+ *
+ * No further changes may be made to +self+;
+ * raises FrozenError if a change is attempted.
+ *
+ * Related: Kernel#frozen?.
*/
VALUE
rb_ary_freeze(VALUE ary)
{
- return rb_obj_freeze(ary);
-}
+ RUBY_ASSERT(RB_TYPE_P(ary, T_ARRAY));
-/*
- * call-seq:
- * ary.frozen? -> true or false
- *
- * Return +true+ if this array is frozen (or temporarily frozen
- * while being sorted). See also Object#frozen?
- */
+ if (OBJ_FROZEN(ary)) return ary;
-static VALUE
-rb_ary_frozen_p(VALUE ary)
-{
- if (OBJ_FROZEN(ary)) return Qtrue;
- return Qfalse;
+ if (!ARY_EMBED_P(ary) && !ARY_SHARED_P(ary) && !ARY_SHARED_ROOT_P(ary)) {
+ ary_shrink_capa(ary);
+ }
+
+ return rb_obj_freeze(ary);
}
/* This can be used to take a snapshot of an array (with
@@ -431,18 +673,22 @@ VALUE
rb_ary_shared_with_p(VALUE ary1, VALUE ary2)
{
if (!ARY_EMBED_P(ary1) && ARY_SHARED_P(ary1) &&
- !ARY_EMBED_P(ary2) && ARY_SHARED_P(ary2) &&
- RARRAY(ary1)->as.heap.aux.shared == RARRAY(ary2)->as.heap.aux.shared &&
- RARRAY(ary1)->as.heap.len == RARRAY(ary2)->as.heap.len) {
- return Qtrue;
+ !ARY_EMBED_P(ary2) && ARY_SHARED_P(ary2) &&
+ ARY_SHARED_ROOT(ary1) == ARY_SHARED_ROOT(ary2) &&
+ ARY_HEAP_LEN(ary1) == ARY_HEAP_LEN(ary2)) {
+ return Qtrue;
}
return Qfalse;
}
static VALUE
-ary_alloc(VALUE klass)
+ary_alloc_embed(VALUE klass, long capa)
{
- NEWOBJ_OF(ary, struct RArray, klass, T_ARRAY | RARRAY_EMBED_FLAG | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0));
+ size_t size = ary_embed_size(capa);
+ RUBY_ASSERT(rb_gc_size_allocatable_p(size));
+ NEWOBJ_OF(ary, struct RArray, klass,
+ T_ARRAY | RARRAY_EMBED_FLAG | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0),
+ size, 0);
/* Created array is:
* FL_SET_EMBED((VALUE)ary);
* ARY_SET_EMBED_LEN((VALUE)ary, 0);
@@ -451,32 +697,51 @@ ary_alloc(VALUE klass)
}
static VALUE
+ary_alloc_heap(VALUE klass)
+{
+ NEWOBJ_OF(ary, struct RArray, klass,
+ T_ARRAY | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0),
+ sizeof(struct RArray), 0);
+
+ ary->as.heap.len = 0;
+ ary->as.heap.aux.capa = 0;
+ ary->as.heap.ptr = NULL;
+
+ return (VALUE)ary;
+}
+
+static VALUE
empty_ary_alloc(VALUE klass)
{
RUBY_DTRACE_CREATE_HOOK(ARRAY, 0);
- return ary_alloc(klass);
+ return ary_alloc_embed(klass, 0);
}
static VALUE
ary_new(VALUE klass, long capa)
{
- VALUE ary,*ptr;
+ RUBY_ASSERT(ruby_thread_has_gvl_p());
+
+ VALUE ary;
if (capa < 0) {
- rb_raise(rb_eArgError, "negative array size (or size too big)");
+ rb_raise(rb_eArgError, "negative array size (or size too big)");
}
if (capa > ARY_MAX_SIZE) {
- rb_raise(rb_eArgError, "array size too big");
+ rb_raise(rb_eArgError, "array size too big");
}
RUBY_DTRACE_CREATE_HOOK(ARRAY, capa);
- ary = ary_alloc(klass);
- if (capa > RARRAY_EMBED_LEN_MAX) {
- ptr = ALLOC_N(VALUE, capa);
- FL_UNSET_EMBED(ary);
- ARY_SET_PTR(ary, ptr);
+ if (ary_embeddable_p(capa)) {
+ ary = ary_alloc_embed(klass, capa);
+ }
+ else {
+ ary = ary_alloc_heap(klass);
ARY_SET_CAPA(ary, capa);
+ RUBY_ASSERT(!ARY_EMBED_P(ary));
+
+ ARY_SET_PTR(ary, ary_heap_alloc_buffer(capa));
ARY_SET_HEAP_LEN(ary, 0);
}
@@ -492,7 +757,7 @@ rb_ary_new_capa(long capa)
VALUE
rb_ary_new(void)
{
- return rb_ary_new2(RARRAY_EMBED_LEN_MAX);
+ return rb_ary_new_capa(0);
}
VALUE
@@ -506,7 +771,7 @@ VALUE
va_start(ar, n);
for (i=0; i<n; i++) {
- ARY_SET(ary, i, va_arg(ar, VALUE));
+ ARY_SET(ary, i, va_arg(ar, VALUE));
}
va_end(ar);
@@ -515,29 +780,108 @@ VALUE
}
VALUE
-rb_ary_new_from_values(long n, const VALUE *elts)
+rb_ary_tmp_new_from_values(VALUE klass, long n, const VALUE *elts)
{
VALUE ary;
- ary = rb_ary_new2(n);
+ ary = ary_new(klass, n);
if (n > 0 && elts) {
- ary_memcpy(ary, 0, n, elts);
- ARY_SET_LEN(ary, n);
+ ary_memcpy(ary, 0, n, elts);
+ ARY_SET_LEN(ary, n);
}
return ary;
}
VALUE
-rb_ary_tmp_new(long capa)
+rb_ary_new_from_values(long n, const VALUE *elts)
{
- return ary_new(0, capa);
+ return rb_ary_tmp_new_from_values(rb_cArray, n, elts);
+}
+
+static VALUE
+ec_ary_alloc_embed(rb_execution_context_t *ec, VALUE klass, long capa)
+{
+ size_t size = ary_embed_size(capa);
+ RUBY_ASSERT(rb_gc_size_allocatable_p(size));
+ NEWOBJ_OF(ary, struct RArray, klass,
+ T_ARRAY | RARRAY_EMBED_FLAG | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0),
+ size, ec);
+ /* Created array is:
+ * FL_SET_EMBED((VALUE)ary);
+ * ARY_SET_EMBED_LEN((VALUE)ary, 0);
+ */
+ return (VALUE)ary;
+}
+
+static VALUE
+ec_ary_alloc_heap(rb_execution_context_t *ec, VALUE klass)
+{
+ NEWOBJ_OF(ary, struct RArray, klass,
+ T_ARRAY | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0),
+ sizeof(struct RArray), ec);
+
+ ary->as.heap.len = 0;
+ ary->as.heap.aux.capa = 0;
+ ary->as.heap.ptr = NULL;
+
+ return (VALUE)ary;
+}
+
+static VALUE
+ec_ary_new(rb_execution_context_t *ec, VALUE klass, long capa)
+{
+ VALUE ary;
+
+ if (capa < 0) {
+ rb_raise(rb_eArgError, "negative array size (or size too big)");
+ }
+ if (capa > ARY_MAX_SIZE) {
+ rb_raise(rb_eArgError, "array size too big");
+ }
+
+ RUBY_DTRACE_CREATE_HOOK(ARRAY, capa);
+
+ if (ary_embeddable_p(capa)) {
+ ary = ec_ary_alloc_embed(ec, klass, capa);
+ }
+ else {
+ ary = ec_ary_alloc_heap(ec, klass);
+ ARY_SET_CAPA(ary, capa);
+ RUBY_ASSERT(!ARY_EMBED_P(ary));
+
+ ARY_SET_PTR(ary, ary_heap_alloc_buffer(capa));
+ ARY_SET_HEAP_LEN(ary, 0);
+ }
+
+ return ary;
}
VALUE
-rb_ary_tmp_new_fill(long capa)
+rb_ec_ary_new_from_values(rb_execution_context_t *ec, long n, const VALUE *elts)
+{
+ VALUE ary;
+
+ ary = ec_ary_new(ec, rb_cArray, n);
+ if (n > 0 && elts) {
+ ary_memcpy(ary, 0, n, elts);
+ ARY_SET_LEN(ary, n);
+ }
+
+ return ary;
+}
+
+VALUE
+rb_ary_hidden_new(long capa)
{
VALUE ary = ary_new(0, capa);
+ return ary;
+}
+
+VALUE
+rb_ary_hidden_new_fill(long capa)
+{
+ VALUE ary = rb_ary_hidden_new(capa);
ary_memfill(ary, 0, capa, Qnil);
ARY_SET_LEN(ary, capa);
return ary;
@@ -547,59 +891,107 @@ void
rb_ary_free(VALUE ary)
{
if (ARY_OWNS_HEAP_P(ary)) {
- ruby_sized_xfree((void *)ARY_HEAP_PTR(ary), ARY_HEAP_SIZE(ary));
+ if (USE_DEBUG_COUNTER &&
+ !ARY_SHARED_ROOT_P(ary) &&
+ ARY_HEAP_CAPA(ary) > RARRAY_LEN(ary)) {
+ RB_DEBUG_COUNTER_INC(obj_ary_extracapa);
+ }
+
+ RB_DEBUG_COUNTER_INC(obj_ary_ptr);
+ ary_heap_free(ary);
+ }
+ else {
+ RB_DEBUG_COUNTER_INC(obj_ary_embed);
+ }
+
+ if (ARY_SHARED_P(ary)) {
+ RB_DEBUG_COUNTER_INC(obj_ary_shared);
}
+ if (ARY_SHARED_ROOT_P(ary) && ARY_SHARED_ROOT_OCCUPIED(ary)) {
+ RB_DEBUG_COUNTER_INC(obj_ary_shared_root_occupied);
+ }
+}
+
+static VALUE fake_ary_flags;
+
+static VALUE
+init_fake_ary_flags(void)
+{
+ struct RArray fake_ary = {0};
+ fake_ary.basic.flags = T_ARRAY;
+ VALUE ary = (VALUE)&fake_ary;
+ rb_ary_freeze(ary);
+ return fake_ary.basic.flags;
}
-RUBY_FUNC_EXPORTED size_t
+VALUE
+rb_setup_fake_ary(struct RArray *fake_ary, const VALUE *list, long len)
+{
+ fake_ary->basic.flags = fake_ary_flags;
+ RBASIC_CLEAR_CLASS((VALUE)fake_ary);
+
+ // bypass frozen checks
+ fake_ary->as.heap.ptr = list;
+ fake_ary->as.heap.len = len;
+ fake_ary->as.heap.aux.capa = len;
+ return (VALUE)fake_ary;
+}
+
+size_t
rb_ary_memsize(VALUE ary)
{
if (ARY_OWNS_HEAP_P(ary)) {
- return RARRAY(ary)->as.heap.aux.capa * sizeof(VALUE);
+ return ARY_CAPA(ary) * sizeof(VALUE);
}
else {
- return 0;
+ return 0;
}
}
-static inline void
-ary_discard(VALUE ary)
-{
- rb_ary_free(ary);
- RBASIC(ary)->flags |= RARRAY_EMBED_FLAG;
- RBASIC(ary)->flags &= ~RARRAY_EMBED_LEN_MASK;
-}
-
static VALUE
ary_make_shared(VALUE ary)
{
- assert(!ARY_EMBED_P(ary));
+ ary_verify(ary);
+
if (ARY_SHARED_P(ary)) {
- return ARY_SHARED(ary);
+ return ARY_SHARED_ROOT(ary);
}
else if (ARY_SHARED_ROOT_P(ary)) {
- return ary;
+ return ary;
}
else if (OBJ_FROZEN(ary)) {
- ary_shrink_capa(ary);
- FL_SET_SHARED_ROOT(ary);
- ARY_SET_SHARED_NUM(ary, 1);
- return ary;
+ return ary;
}
else {
- long capa = ARY_CAPA(ary), len = RARRAY_LEN(ary);
- NEWOBJ_OF(shared, struct RArray, 0, T_ARRAY | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0));
- FL_UNSET_EMBED(shared);
+ long capa = ARY_CAPA(ary);
+ long len = RARRAY_LEN(ary);
- ARY_SET_LEN((VALUE)shared, capa);
- ARY_SET_PTR((VALUE)shared, RARRAY_CONST_PTR(ary));
- ary_mem_clear((VALUE)shared, len, capa - len);
- FL_SET_SHARED_ROOT(shared);
- ARY_SET_SHARED_NUM((VALUE)shared, 1);
- FL_SET_SHARED(ary);
- ARY_SET_SHARED(ary, (VALUE)shared);
- OBJ_FREEZE(shared);
- return (VALUE)shared;
+ /* Shared roots cannot be embedded because the reference count
+ * (refcnt) is stored in as.heap.aux.capa. */
+ VALUE shared = ary_alloc_heap(0);
+ FL_SET_SHARED_ROOT(shared);
+
+ if (ARY_EMBED_P(ary)) {
+ VALUE *ptr = ary_heap_alloc_buffer(capa);
+ ARY_SET_PTR(shared, ptr);
+ ary_memcpy(shared, 0, len, RARRAY_CONST_PTR(ary));
+
+ FL_UNSET_EMBED(ary);
+ ARY_SET_HEAP_LEN(ary, len);
+ ARY_SET_PTR(ary, ptr);
+ }
+ else {
+ ARY_SET_PTR(shared, RARRAY_CONST_PTR(ary));
+ }
+
+ ARY_SET_LEN(shared, capa);
+ ary_mem_clear(shared, len, capa - len);
+ rb_ary_set_shared(ary, shared);
+
+ ary_verify(shared);
+ ary_verify(ary);
+
+ return shared;
}
}
@@ -608,9 +1000,11 @@ ary_make_substitution(VALUE ary)
{
long len = RARRAY_LEN(ary);
- if (len <= RARRAY_EMBED_LEN_MAX) {
- VALUE subst = rb_ary_new2(len);
- ary_memcpy(subst, 0, len, RARRAY_CONST_PTR(ary));
+ if (ary_embeddable_p(len)) {
+ VALUE subst = rb_ary_new_capa(len);
+ RUBY_ASSERT(ARY_EMBED_P(subst));
+
+ ary_memcpy(subst, 0, len, RARRAY_CONST_PTR(ary));
ARY_SET_EMBED_LEN(subst, len);
return subst;
}
@@ -625,35 +1019,47 @@ rb_assoc_new(VALUE car, VALUE cdr)
return rb_ary_new3(2, car, cdr);
}
-static VALUE
-to_ary(VALUE ary)
+VALUE
+rb_to_array_type(VALUE ary)
{
- return rb_convert_type(ary, T_ARRAY, "Array", "to_ary");
+ return rb_convert_type_with_id(ary, T_ARRAY, "Array", idTo_ary);
}
+#define to_ary rb_to_array_type
VALUE
rb_check_array_type(VALUE ary)
{
- return rb_check_convert_type(ary, T_ARRAY, "Array", "to_ary");
+ return rb_check_convert_type_with_id(ary, T_ARRAY, "Array", idTo_ary);
+}
+
+VALUE
+rb_check_to_array(VALUE ary)
+{
+ return rb_check_convert_type_with_id(ary, T_ARRAY, "Array", idTo_a);
+}
+
+VALUE
+rb_to_array(VALUE ary)
+{
+ return rb_convert_type_with_id(ary, T_ARRAY, "Array", idTo_a);
}
/*
* call-seq:
- * Array.try_convert(obj) -> array or nil
+ * Array.try_convert(object) -> object, new_array, or nil
*
- * Tries to convert +obj+ into an array, using +to_ary+ method. Returns the
- * converted array or +nil+ if +obj+ cannot be converted for any reason.
- * This method can be used to check if an argument is an array.
+ * Attempts to return an array, based on the given +object+.
*
- * Array.try_convert([1]) #=> [1]
- * Array.try_convert("1") #=> nil
+ * If +object+ is an array, returns +object+.
*
- * if tmp = Array.try_convert(arg)
- * # the argument is an array
- * elsif tmp = String.try_convert(arg)
- * # the argument is a string
- * end
+ * Otherwise if +object+ responds to <tt>:to_ary</tt>.
+ * calls <tt>object.to_ary</tt>:
+ * if the return value is an array or +nil+, returns that value;
+ * if not, raises TypeError.
*
+ * Otherwise returns +nil+.
+ *
+ * Related: see {Methods for Creating an Array}[rdoc-ref:Array@Methods+for+Creating+an+Array].
*/
static VALUE
@@ -662,60 +1068,79 @@ rb_ary_s_try_convert(VALUE dummy, VALUE ary)
return rb_check_array_type(ary);
}
+/* :nodoc: */
+static VALUE
+rb_ary_s_new(int argc, VALUE *argv, VALUE klass)
+{
+ VALUE ary;
+
+ if (klass == rb_cArray) {
+ long size = 0;
+ if (argc > 0 && FIXNUM_P(argv[0])) {
+ size = FIX2LONG(argv[0]);
+ if (size < 0) size = 0;
+ }
+
+ ary = ary_new(klass, size);
+
+ rb_obj_call_init_kw(ary, argc, argv, RB_PASS_CALLED_KEYWORDS);
+ }
+ else {
+ ary = rb_class_new_instance_pass_kw(argc, argv, klass);
+ }
+
+ return ary;
+}
+
/*
* call-seq:
- * Array.new(size=0, default=nil)
- * Array.new(array)
- * Array.new(size) {|index| block }
+ * Array.new -> new_empty_array
+ * Array.new(array) -> new_array
+ * Array.new(size, default_value = nil) -> new_array
+ * Array.new(size = 0) {|index| ... } -> new_array
*
* Returns a new array.
*
- * In the first form, if no arguments are sent, the new array will be empty.
- * When a +size+ and an optional +default+ are sent, an array is created with
- * +size+ copies of +default+. Take notice that all elements will reference the
- * same object +default+.
+ * With no block and no argument given, returns a new empty array:
*
- * The second form creates a copy of the array passed as a parameter (the
- * array is generated by calling to_ary on the parameter).
+ * Array.new # => []
*
- * first_array = ["Matz", "Guido"]
+ * With no block and array argument given, returns a new array with the same elements:
*
- * second_array = Array.new(first_array) #=> ["Matz", "Guido"]
+ * Array.new([:foo, 'bar', 2]) # => [:foo, "bar", 2]
*
- * first_array.equal? second_array #=> false
+ * With no block and integer argument given, returns a new array containing
+ * that many instances of the given +default_value+:
*
- * In the last form, an array of the given size is created. Each element in
- * this array is created by passing the element's index to the given block
- * and storing the return value.
+ * Array.new(0) # => []
+ * Array.new(3) # => [nil, nil, nil]
+ * Array.new(2, 3) # => [3, 3]
*
- * Array.new(3){ |index| index ** 2 }
- * # => [0, 1, 4]
+ * With a block given, returns an array of the given +size+;
+ * calls the block with each +index+ in the range <tt>(0...size)</tt>;
+ * the element at that +index+ in the returned array is the blocks return value:
*
- * == Common gotchas
+ * Array.new(3) {|index| "Element #{index}" } # => ["Element 0", "Element 1", "Element 2"]
*
- * When sending the second parameter, the same object will be used as the
- * value for all the array elements:
+ * A common pitfall for new Rubyists is providing an expression as +default_value+:
*
- * a = Array.new(2, Hash.new)
- * # => [{}, {}]
+ * array = Array.new(2, {})
+ * array # => [{}, {}]
+ * array[0][:a] = 1
+ * array # => [{a: 1}, {a: 1}], as array[0] and array[1] are same object
*
- * a[0]['cat'] = 'feline'
- * a # => [{"cat"=>"feline"}, {"cat"=>"feline"}]
+ * If you want the elements of the array to be distinct, you should pass a block:
*
- * a[1]['cat'] = 'Felix'
- * a # => [{"cat"=>"Felix"}, {"cat"=>"Felix"}]
+ * array = Array.new(2) { {} }
+ * array # => [{}, {}]
+ * array[0][:a] = 1
+ * array # => [{a: 1}, {}], as array[0] and array[1] are different objects
*
- * Since all the Array elements store the same hash, changes to one of them
- * will affect them all.
- *
- * If multiple copies are what you want, you should use the block
- * version which uses the result of that block each time an element
- * of the array needs to be initialized:
- *
- * a = Array.new(2) { Hash.new }
- * a[0]['cat'] = 'feline'
- * a # => [{"cat"=>"feline"}, {}]
+ * Raises TypeError if the first argument is not either an array
+ * or an {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects]).
+ * Raises ArgumentError if the first argument is a negative integer.
*
+ * Related: see {Methods for Creating an Array}[rdoc-ref:Array@Methods+for+Creating+an+Array].
*/
static VALUE
@@ -726,61 +1151,60 @@ rb_ary_initialize(int argc, VALUE *argv, VALUE ary)
rb_ary_modify(ary);
if (argc == 0) {
- if (ARY_OWNS_HEAP_P(ary) && RARRAY_CONST_PTR(ary) != 0) {
- ruby_sized_xfree((void *)RARRAY_CONST_PTR(ary), ARY_HEAP_SIZE(ary));
- }
- rb_ary_unshare_safe(ary);
- FL_SET_EMBED(ary);
- ARY_SET_EMBED_LEN(ary, 0);
- if (rb_block_given_p()) {
- rb_warning("given block not used");
- }
- return ary;
+ rb_ary_reset(ary);
+ RUBY_ASSERT(ARY_EMBED_P(ary));
+ RUBY_ASSERT(ARY_EMBED_LEN(ary) == 0);
+ if (rb_block_given_p()) {
+ rb_warning("given block not used");
+ }
+ return ary;
}
rb_scan_args(argc, argv, "02", &size, &val);
if (argc == 1 && !FIXNUM_P(size)) {
- val = rb_check_array_type(size);
- if (!NIL_P(val)) {
- rb_ary_replace(ary, val);
- return ary;
- }
+ val = rb_check_array_type(size);
+ if (!NIL_P(val)) {
+ rb_ary_replace(ary, val);
+ return ary;
+ }
}
len = NUM2LONG(size);
/* NUM2LONG() may call size.to_int, ary can be frozen, modified, etc */
if (len < 0) {
- rb_raise(rb_eArgError, "negative array size");
+ rb_raise(rb_eArgError, "negative array size");
}
if (len > ARY_MAX_SIZE) {
- rb_raise(rb_eArgError, "array size too big");
+ rb_raise(rb_eArgError, "array size too big");
}
/* recheck after argument conversion */
rb_ary_modify(ary);
ary_resize_capa(ary, len);
if (rb_block_given_p()) {
- long i;
+ long i;
- if (argc == 2) {
- rb_warn("block supersedes default value argument");
- }
- for (i=0; i<len; i++) {
- rb_ary_store(ary, i, rb_yield(LONG2NUM(i)));
- ARY_SET_LEN(ary, i + 1);
- }
+ if (argc == 2) {
+ rb_warn("block supersedes default value argument");
+ }
+ for (i=0; i<len; i++) {
+ rb_ary_store(ary, i, rb_yield(LONG2NUM(i)));
+ ARY_SET_LEN(ary, i + 1);
+ }
}
else {
- ary_memfill(ary, 0, len, val);
- ARY_SET_LEN(ary, len);
+ ary_memfill(ary, 0, len, val);
+ ARY_SET_LEN(ary, len);
}
return ary;
}
/*
- * Returns a new array populated with the given objects.
+ * Returns a new array, populated with the given objects:
+ *
+ * Array[1, 'a', /^A/] # => [1, "a", /^A/]
+ * Array[] # => []
+ * Array.[](1, 'a', /^A/) # => [1, "a", /^A/]
*
- * Array.[]( 1, 'a', /^A/ ) # => [1, "a", /^A/]
- * Array[ 1, 'a', /^A/ ] # => [1, "a", /^A/]
- * [ 1, 'a', /^A/ ] # => [1, "a", /^A/]
+ * Related: see {Methods for Creating an Array}[rdoc-ref:Array@Methods+for+Creating+an+Array].
*/
static VALUE
@@ -801,26 +1225,26 @@ rb_ary_store(VALUE ary, long idx, VALUE val)
long len = RARRAY_LEN(ary);
if (idx < 0) {
- idx += len;
- if (idx < 0) {
- rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
- idx - len, -len);
- }
+ idx += len;
+ if (idx < 0) {
+ rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
+ idx - len, -len);
+ }
}
else if (idx >= ARY_MAX_SIZE) {
- rb_raise(rb_eIndexError, "index %ld too big", idx);
+ rb_raise(rb_eIndexError, "index %ld too big", idx);
}
rb_ary_modify(ary);
if (idx >= ARY_CAPA(ary)) {
- ary_double_capa(ary, idx);
+ ary_double_capa(ary, idx);
}
if (idx > len) {
- ary_mem_clear(ary, len, idx - len + 1);
+ ary_mem_clear(ary, len, idx - len + 1);
}
if (idx >= len) {
- ARY_SET_LEN(ary, idx + 1);
+ ARY_SET_LEN(ary, idx + 1);
}
ARY_SET(ary, idx, val);
}
@@ -828,35 +1252,98 @@ rb_ary_store(VALUE ary, long idx, VALUE val)
static VALUE
ary_make_partial(VALUE ary, VALUE klass, long offset, long len)
{
- assert(offset >= 0);
- assert(len >= 0);
- assert(offset+len <= RARRAY_LEN(ary));
+ RUBY_ASSERT(offset >= 0);
+ RUBY_ASSERT(len >= 0);
+ RUBY_ASSERT(offset+len <= RARRAY_LEN(ary));
- if (len <= RARRAY_EMBED_LEN_MAX) {
- VALUE result = ary_alloc(klass);
- ary_memcpy(result, 0, len, RARRAY_CONST_PTR(ary) + offset);
+ VALUE result = ary_alloc_heap(klass);
+ size_t embed_capa = ary_embed_capa(result);
+ if ((size_t)len <= embed_capa) {
+ FL_SET_EMBED(result);
+ ary_memcpy(result, 0, len, RARRAY_CONST_PTR(ary) + offset);
ARY_SET_EMBED_LEN(result, len);
- return result;
}
else {
- VALUE shared, result = ary_alloc(klass);
+ VALUE shared = ary_make_shared(ary);
+
+ /* The ary_make_shared call may allocate, which can trigger a GC
+ * compaction. This can cause the array to be embedded because it has
+ * a length of 0. */
FL_UNSET_EMBED(result);
- shared = ary_make_shared(ary);
ARY_SET_PTR(result, RARRAY_CONST_PTR(ary));
ARY_SET_LEN(result, RARRAY_LEN(ary));
rb_ary_set_shared(result, shared);
ARY_INCREASE_PTR(result, offset);
ARY_SET_LEN(result, len);
+
+ ary_verify(shared);
+ }
+
+ ary_verify(result);
+ return result;
+}
+
+static VALUE
+ary_make_partial_step(VALUE ary, VALUE klass, long offset, long len, long step)
+{
+ RUBY_ASSERT(offset >= 0);
+ RUBY_ASSERT(len >= 0);
+ RUBY_ASSERT(offset+len <= RARRAY_LEN(ary));
+ RUBY_ASSERT(step != 0);
+
+ const long orig_len = len;
+
+ if (step > 0 && step >= len) {
+ VALUE result = ary_new(klass, 1);
+ VALUE *ptr = (VALUE *)ARY_EMBED_PTR(result);
+ const VALUE *values = RARRAY_CONST_PTR(ary);
+
+ RB_OBJ_WRITE(result, ptr, values[offset]);
+ ARY_SET_EMBED_LEN(result, 1);
return result;
}
+ else if (step < 0 && step < -len) {
+ step = -len;
+ }
+
+ long ustep = (step < 0) ? -step : step;
+ len = roomof(len, ustep);
+
+ long i;
+ long j = offset + ((step > 0) ? 0 : (orig_len - 1));
+
+ VALUE result = ary_new(klass, len);
+ if (ARY_EMBED_P(result)) {
+ VALUE *ptr = (VALUE *)ARY_EMBED_PTR(result);
+ const VALUE *values = RARRAY_CONST_PTR(ary);
+
+ for (i = 0; i < len; ++i) {
+ RB_OBJ_WRITE(result, ptr+i, values[j]);
+ j += step;
+ }
+ ARY_SET_EMBED_LEN(result, len);
+ }
+ else {
+ const VALUE *values = RARRAY_CONST_PTR(ary);
+
+ RARRAY_PTR_USE(result, ptr, {
+ for (i = 0; i < len; ++i) {
+ RB_OBJ_WRITE(result, ptr+i, values[j]);
+ j += step;
+ }
+ });
+ ARY_SET_LEN(result, len);
+ }
+
+ return result;
}
static VALUE
ary_make_shared_copy(VALUE ary)
{
- return ary_make_partial(ary, rb_obj_class(ary), 0, RARRAY_LEN(ary));
+ return ary_make_partial(ary, rb_cArray, 0, RARRAY_LEN(ary));
}
enum ary_take_pos_flags
@@ -866,50 +1353,59 @@ enum ary_take_pos_flags
};
static VALUE
-ary_take_first_or_last(int argc, const VALUE *argv, VALUE ary, enum ary_take_pos_flags last)
+ary_take_first_or_last_n(VALUE ary, long n, enum ary_take_pos_flags last)
{
- VALUE nv;
- long n;
- long len;
+ long len = RARRAY_LEN(ary);
long offset = 0;
- rb_scan_args(argc, argv, "1", &nv);
- n = NUM2LONG(nv);
- len = RARRAY_LEN(ary);
if (n > len) {
- n = len;
+ n = len;
}
else if (n < 0) {
- rb_raise(rb_eArgError, "negative array size");
+ rb_raise(rb_eArgError, "negative array size");
}
if (last) {
- offset = len - n;
+ offset = len - n;
}
return ary_make_partial(ary, rb_cArray, offset, n);
}
+static VALUE
+ary_take_first_or_last(int argc, const VALUE *argv, VALUE ary, enum ary_take_pos_flags last)
+{
+ argc = rb_check_arity(argc, 0, 1);
+ /* the case optional argument is omitted should be handled in
+ * callers of this function. if another arity case is added,
+ * this arity check needs to rewrite. */
+ RUBY_ASSERT_ALWAYS(argc == 1);
+ return ary_take_first_or_last_n(ary, NUM2LONG(argv[0]), last);
+}
+
/*
* call-seq:
- * ary << obj -> ary
+ * self << object -> self
*
- * Append---Pushes the given object on to the end of this array. This
- * expression returns the array itself, so several appends
- * may be chained together.
+ * Appends +object+ as the last element in +self+; returns +self+:
*
- * [ 1, 2 ] << "c" << "d" << [ 3, 4 ]
- * #=> [ 1, 2, "c", "d", [ 3, 4 ] ]
+ * [:foo, 'bar', 2] << :baz # => [:foo, "bar", 2, :baz]
*
+ * Appends +object+ as a single element, even if it is another array:
+ *
+ * [:foo, 'bar', 2] << [3, 4] # => [:foo, "bar", 2, [3, 4]]
+ *
+ * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
VALUE
rb_ary_push(VALUE ary, VALUE item)
{
- long idx = RARRAY_LEN(ary);
+ long idx = RARRAY_LEN((ary_verify(ary), ary));
VALUE target_ary = ary_ensure_room_for_push(ary, 1);
RARRAY_PTR_USE(ary, ptr, {
- RB_OBJ_WRITE(target_ary, &ptr[idx], item);
+ RB_OBJ_WRITE(target_ary, &ptr[idx], item);
});
ARY_SET_LEN(ary, idx + 1);
+ ary_verify(ary);
return ary;
}
@@ -925,18 +1421,20 @@ rb_ary_cat(VALUE ary, const VALUE *argv, long len)
/*
* call-seq:
- * ary.push(obj, ... ) -> ary
- *
- * Append --- Pushes the given object(s) on to the end of this array. This
- * expression returns the array itself, so several appends
- * may be chained together. See also Array#pop for the opposite
- * effect.
- *
- * a = [ "a", "b", "c" ]
- * a.push("d", "e", "f")
- * #=> ["a", "b", "c", "d", "e", "f"]
- * [1, 2, 3,].push(4).push(5)
- * #=> [1, 2, 3, 4, 5]
+ * push(*objects) -> self
+ * append(*objects) -> self
+ *
+ * Appends each argument in +objects+ to +self+; returns +self+:
+ *
+ * a = [:foo, 'bar', 2] # => [:foo, "bar", 2]
+ * a.push(:baz, :bat) # => [:foo, "bar", 2, :baz, :bat]
+ *
+ * Appends each argument as a single element, even if it is another array:
+ *
+ * a = [:foo, 'bar', 2] # => [:foo, "bar", 2]
+ a.push([:baz, :bat], [:bam, :bad]) # => [:foo, "bar", 2, [:baz, :bat], [:bam, :bad]]
+ *
+ * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
static VALUE
@@ -953,32 +1451,47 @@ rb_ary_pop(VALUE ary)
n = RARRAY_LEN(ary);
if (n == 0) return Qnil;
if (ARY_OWNS_HEAP_P(ary) &&
- n * 3 < ARY_CAPA(ary) &&
- ARY_CAPA(ary) > ARY_DEFAULT_SIZE)
+ n * 3 < ARY_CAPA(ary) &&
+ ARY_CAPA(ary) > ARY_DEFAULT_SIZE)
{
- ary_resize_capa(ary, n * 2);
+ ary_resize_capa(ary, n * 2);
}
- --n;
- ARY_SET_LEN(ary, n);
- return RARRAY_AREF(ary, n);
+
+ VALUE obj = RARRAY_AREF(ary, n - 1);
+
+ ARY_SET_LEN(ary, n - 1);
+ ary_verify(ary);
+ return obj;
}
/*
* call-seq:
- * ary.pop -> obj or nil
- * ary.pop(n) -> new_ary
+ * pop -> object or nil
+ * pop(count) -> new_array
+ *
+ * Removes and returns trailing elements of +self+.
+ *
+ * With no argument given, removes and returns the last element, if available;
+ * otherwise returns +nil+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a.pop # => 2
+ * a # => [:foo, "bar"]
+ * [].pop # => nil
+ *
+ * With non-negative integer argument +count+ given,
+ * returns a new array containing the trailing +count+ elements of +self+, as available:
*
- * Removes the last element from +self+ and returns it, or
- * +nil+ if the array is empty.
+ * a = [:foo, 'bar', 2]
+ * a.pop(2) # => ["bar", 2]
+ * a # => [:foo]
*
- * If a number +n+ is given, returns an array of the last +n+ elements
- * (or less) just like <code>array.slice!(-n, n)</code> does. See also
- * Array#push for the opposite effect.
+ * a = [:foo, 'bar', 2]
+ * a.pop(50) # => [:foo, "bar", 2]
+ * a # => []
*
- * a = [ "a", "b", "c", "d" ]
- * a.pop #=> "d"
- * a.pop(2) #=> ["b", "c"]
- * a #=> ["a"]
+ * Related: Array#push;
+ * see also {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
*/
static VALUE
@@ -987,12 +1500,13 @@ rb_ary_pop_m(int argc, VALUE *argv, VALUE ary)
VALUE result;
if (argc == 0) {
- return rb_ary_pop(ary);
+ return rb_ary_pop(ary);
}
rb_ary_modify_check(ary);
result = ary_take_first_or_last(argc, argv, ary, ARY_TAKE_LAST);
ARY_INCREASE_LEN(ary, -RARRAY_LEN(result));
+ ary_verify(ary);
return result;
}
@@ -1002,52 +1516,54 @@ rb_ary_shift(VALUE ary)
VALUE top;
long len = RARRAY_LEN(ary);
- rb_ary_modify_check(ary);
- if (len == 0) return Qnil;
+ if (len == 0) {
+ rb_ary_modify_check(ary);
+ return Qnil;
+ }
+
top = RARRAY_AREF(ary, 0);
- if (!ARY_SHARED_P(ary)) {
- if (len < ARY_DEFAULT_SIZE) {
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr, ptr+1, VALUE, len-1);
- }); /* WB: no new reference */
- ARY_INCREASE_LEN(ary, -1);
- return top;
- }
- assert(!ARY_EMBED_P(ary)); /* ARY_EMBED_LEN_MAX < ARY_DEFAULT_SIZE */
-
- ARY_SET(ary, 0, Qnil);
- ary_make_shared(ary);
- }
- else if (ARY_SHARED_OCCUPIED(ARY_SHARED(ary))) {
- RARRAY_PTR_USE(ary, ptr, ptr[0] = Qnil);
- }
- ARY_INCREASE_PTR(ary, 1); /* shift ptr */
- ARY_INCREASE_LEN(ary, -1);
+
+ rb_ary_behead(ary, 1);
return top;
}
/*
* call-seq:
- * ary.shift -> obj or nil
- * ary.shift(n) -> new_ary
+ * shift -> object or nil
+ * shift(count) -> new_array or nil
+ *
+ * Removes and returns leading elements from +self+.
+ *
+ * With no argument, removes and returns one element, if available,
+ * or +nil+ otherwise:
*
- * Removes the first element of +self+ and returns it (shifting all
- * other elements down by one). Returns +nil+ if the array
- * is empty.
+ * a = [0, 1, 2, 3]
+ * a.shift # => 0
+ * a # => [1, 2, 3]
+ * [].shift # => nil
*
- * If a number +n+ is given, returns an array of the first +n+ elements
- * (or less) just like <code>array.slice!(0, n)</code> does. With +ary+
- * containing only the remainder elements, not including what was shifted to
- * +new_ary+. See also Array#unshift for the opposite effect.
+ * With non-negative numeric argument +count+ given,
+ * removes and returns the first +count+ elements:
*
- * args = [ "-m", "-q", "filename" ]
- * args.shift #=> "-m"
- * args #=> ["-q", "filename"]
+ * a = [0, 1, 2, 3]
+ * a.shift(2) # => [0, 1]
+ * a # => [2, 3]
+ * a.shift(1.1) # => [2]
+ * a # => [3]
+ * a.shift(0) # => []
+ * a # => [3]
*
- * args = [ "-m", "-q", "filename" ]
- * args.shift(2) #=> ["-m", "-q"]
- * args #=> ["filename"]
+ * If +count+ is large,
+ * removes and returns all elements:
+ *
+ * a = [0, 1, 2, 3]
+ * a.shift(50) # => [0, 1, 2, 3]
+ * a # => []
+ *
+ * If +self+ is empty, returns a new empty array.
+ *
+ * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
*/
static VALUE
@@ -1057,115 +1573,158 @@ rb_ary_shift_m(int argc, VALUE *argv, VALUE ary)
long n;
if (argc == 0) {
- return rb_ary_shift(ary);
+ return rb_ary_shift(ary);
}
rb_ary_modify_check(ary);
result = ary_take_first_or_last(argc, argv, ary, ARY_TAKE_FIRST);
n = RARRAY_LEN(result);
- if (ARY_SHARED_P(ary)) {
- if (ARY_SHARED_OCCUPIED(ARY_SHARED(ary))) {
- setup_occupied_shared:
- ary_mem_clear(ary, 0, n);
- }
- ARY_INCREASE_PTR(ary, n);
+ rb_ary_behead(ary,n);
+
+ return result;
+}
+
+VALUE
+rb_ary_behead(VALUE ary, long n)
+{
+ if (n <= 0) {
+ return ary;
}
- else {
- if (RARRAY_LEN(ary) < ARY_DEFAULT_SIZE) {
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr, ptr+n, VALUE, RARRAY_LEN(ary)-n);
- }); /* WB: no new reference */
- }
- else {
- ary_make_shared(ary);
- goto setup_occupied_shared;
- }
+
+ rb_ary_modify_check(ary);
+
+ if (!ARY_SHARED_P(ary)) {
+ if (ARY_EMBED_P(ary) || RARRAY_LEN(ary) < ARY_DEFAULT_SIZE) {
+ RARRAY_PTR_USE(ary, ptr, {
+ MEMMOVE(ptr, ptr + n, VALUE, RARRAY_LEN(ary) - n);
+ }); /* WB: no new reference */
+ ARY_INCREASE_LEN(ary, -n);
+ ary_verify(ary);
+ return ary;
+ }
+
+ ary_mem_clear(ary, 0, n);
+ ary_make_shared(ary);
}
+ else if (ARY_SHARED_ROOT_OCCUPIED(ARY_SHARED_ROOT(ary))) {
+ ary_mem_clear(ary, 0, n);
+ }
+
+ ARY_INCREASE_PTR(ary, n);
ARY_INCREASE_LEN(ary, -n);
+ ary_verify(ary);
- return result;
+ return ary;
}
static VALUE
-ary_ensure_room_for_unshift(VALUE ary, int argc)
+make_room_for_unshift(VALUE ary, const VALUE *head, VALUE *sharedp, int argc, long capa, long len)
+{
+ if (head - sharedp < argc) {
+ long room = capa - len - argc;
+
+ room -= room >> 4;
+ MEMMOVE((VALUE *)sharedp + argc + room, head, VALUE, len);
+ head = sharedp + argc + room;
+ }
+ ARY_SET_PTR(ary, head - argc);
+ RUBY_ASSERT(ARY_SHARED_ROOT_OCCUPIED(ARY_SHARED_ROOT(ary)));
+
+ ary_verify(ary);
+ return ARY_SHARED_ROOT(ary);
+}
+
+static VALUE
+ary_modify_for_unshift(VALUE ary, int argc)
{
long len = RARRAY_LEN(ary);
long new_len = len + argc;
long capa;
const VALUE *head, *sharedp;
- if (len > ARY_MAX_SIZE - argc) {
- rb_raise(rb_eIndexError, "index %ld too big", new_len);
- }
-
- if (ARY_SHARED_P(ary)) {
- VALUE shared = ARY_SHARED(ary);
- capa = RARRAY_LEN(shared);
- if (ARY_SHARED_OCCUPIED(shared) && capa > new_len) {
- head = RARRAY_CONST_PTR(ary);
- sharedp = RARRAY_CONST_PTR(shared);
- goto makeroom_if_need;
- }
- }
-
rb_ary_modify(ary);
capa = ARY_CAPA(ary);
if (capa - (capa >> 6) <= new_len) {
- ary_double_capa(ary, new_len);
+ ary_double_capa(ary, new_len);
}
/* use shared array for big "queues" */
- if (new_len > ARY_DEFAULT_SIZE * 4) {
- /* make a room for unshifted items */
- capa = ARY_CAPA(ary);
- ary_make_shared(ary);
-
- head = sharedp = RARRAY_CONST_PTR(ary);
- goto makeroom;
- makeroom_if_need:
- if (head - sharedp < argc) {
- long room;
- makeroom:
- room = capa - new_len;
- room -= room >> 4;
- MEMMOVE((VALUE *)sharedp + argc + room, head, VALUE, len);
- head = sharedp + argc + room;
- }
- ARY_SET_PTR(ary, head - argc);
- assert(ARY_SHARED_OCCUPIED(ARY_SHARED(ary)));
- return ARY_SHARED(ary);
+ if (new_len > ARY_DEFAULT_SIZE * 4 && !ARY_EMBED_P(ary)) {
+ ary_verify(ary);
+
+ /* make a room for unshifted items */
+ capa = ARY_CAPA(ary);
+ ary_make_shared(ary);
+
+ head = sharedp = RARRAY_CONST_PTR(ary);
+ return make_room_for_unshift(ary, head, (void *)sharedp, argc, capa, len);
+ }
+ else {
+ /* sliding items */
+ RARRAY_PTR_USE(ary, ptr, {
+ MEMMOVE(ptr + argc, ptr, VALUE, len);
+ });
+
+ ary_verify(ary);
+ return ary;
+ }
+}
+
+static VALUE
+ary_ensure_room_for_unshift(VALUE ary, int argc)
+{
+ long len = RARRAY_LEN(ary);
+ long new_len = len + argc;
+
+ if (len > ARY_MAX_SIZE - argc) {
+ rb_raise(rb_eIndexError, "index %ld too big", new_len);
+ }
+ else if (! ARY_SHARED_P(ary)) {
+ return ary_modify_for_unshift(ary, argc);
}
else {
- /* sliding items */
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr + argc, ptr, VALUE, len);
- });
+ VALUE shared_root = ARY_SHARED_ROOT(ary);
+ long capa = RARRAY_LEN(shared_root);
- return ary;
+ if (! ARY_SHARED_ROOT_OCCUPIED(shared_root)) {
+ return ary_modify_for_unshift(ary, argc);
+ }
+ else if (new_len > capa) {
+ return ary_modify_for_unshift(ary, argc);
+ }
+ else {
+ const VALUE * head = RARRAY_CONST_PTR(ary);
+ void *sharedp = (void *)RARRAY_CONST_PTR(shared_root);
+
+ rb_ary_modify_check(ary);
+ return make_room_for_unshift(ary, head, sharedp, argc, capa, len);
+ }
}
}
/*
* call-seq:
- * ary.unshift(obj, ...) -> ary
+ * unshift(*objects) -> self
+ * prepend(*objects) -> self
+ *
+ * Prepends the given +objects+ to +self+:
*
- * Prepends objects to the front of +self+, moving other elements upwards.
- * See also Array#shift for the opposite effect.
+ * a = [:foo, 'bar', 2]
+ * a.unshift(:bam, :bat) # => [:bam, :bat, :foo, "bar", 2]
*
- * a = [ "b", "c", "d" ]
- * a.unshift("a") #=> ["a", "b", "c", "d"]
- * a.unshift(1, 2) #=> [ 1, 2, "a", "b", "c", "d"]
+ * Related: Array#shift;
+ * see also {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
-static VALUE
+VALUE
rb_ary_unshift_m(int argc, VALUE *argv, VALUE ary)
{
long len = RARRAY_LEN(ary);
VALUE target_ary;
if (argc == 0) {
- rb_ary_modify_check(ary);
- return ary;
+ rb_ary_modify_check(ary);
+ return ary;
}
target_ary = ary_ensure_room_for_unshift(ary, argc);
@@ -1177,7 +1736,7 @@ rb_ary_unshift_m(int argc, VALUE *argv, VALUE ary)
VALUE
rb_ary_unshift(VALUE ary, VALUE item)
{
- return rb_ary_unshift_m(1,&item,ary);
+ return rb_ary_unshift_m(1, &item, ary);
}
/* faster version - use this if you don't need to treat negative offset */
@@ -1187,7 +1746,7 @@ rb_ary_elt(VALUE ary, long offset)
long len = RARRAY_LEN(ary);
if (len == 0) return Qnil;
if (offset < 0 || len <= offset) {
- return Qnil;
+ return Qnil;
}
return RARRAY_AREF(ary, offset);
}
@@ -1195,14 +1754,11 @@ rb_ary_elt(VALUE ary, long offset)
VALUE
rb_ary_entry(VALUE ary, long offset)
{
- if (offset < 0) {
- offset += RARRAY_LEN(ary);
- }
- return rb_ary_elt(ary, offset);
+ return rb_ary_entry_internal(ary, offset);
}
VALUE
-rb_ary_subseq(VALUE ary, long beg, long len)
+rb_ary_subseq_step(VALUE ary, long beg, long len, long step)
{
VALUE klass;
long alen = RARRAY_LEN(ary);
@@ -1211,95 +1767,209 @@ rb_ary_subseq(VALUE ary, long beg, long len)
if (beg < 0 || len < 0) return Qnil;
if (alen < len || alen < beg + len) {
- len = alen - beg;
+ len = alen - beg;
}
- klass = rb_obj_class(ary);
+ klass = rb_cArray;
if (len == 0) return ary_new(klass, 0);
+ if (step == 0)
+ rb_raise(rb_eArgError, "slice step cannot be zero");
+ if (step == 1)
+ return ary_make_partial(ary, klass, beg, len);
+ else
+ return ary_make_partial_step(ary, klass, beg, len, step);
+}
- return ary_make_partial(ary, klass, beg, len);
+VALUE
+rb_ary_subseq(VALUE ary, long beg, long len)
+{
+ return rb_ary_subseq_step(ary, beg, len, 1);
}
+static VALUE rb_ary_aref2(VALUE ary, VALUE b, VALUE e);
+
/*
* call-seq:
- * ary[index] -> obj or nil
- * ary[start, length] -> new_ary or nil
- * ary[range] -> new_ary or nil
- * ary.slice(index) -> obj or nil
- * ary.slice(start, length) -> new_ary or nil
- * ary.slice(range) -> new_ary or nil
- *
- * Element Reference --- Returns the element at +index+, or returns a
- * subarray starting at the +start+ index and continuing for +length+
- * elements, or returns a subarray specified by +range+ of indices.
- *
- * Negative indices count backward from the end of the array (-1 is the last
- * element). For +start+ and +range+ cases the starting index is just before
- * an element. Additionally, an empty array is returned when the starting
- * index for an element range is at the end of the array.
- *
- * Returns +nil+ if the index (or starting index) are out of range.
- *
- * a = [ "a", "b", "c", "d", "e" ]
- * a[2] + a[0] + a[1] #=> "cab"
- * a[6] #=> nil
- * a[1, 2] #=> [ "b", "c" ]
- * a[1..3] #=> [ "b", "c", "d" ]
- * a[4..7] #=> [ "e" ]
- * a[6..10] #=> nil
- * a[-3, 3] #=> [ "c", "d", "e" ]
- * # special cases
- * a[5] #=> nil
- * a[6, 1] #=> nil
- * a[5, 1] #=> []
- * a[5..10] #=> []
+ * self[offset] -> object or nil
+ * self[offset, size] -> object or nil
+ * self[range] -> object or nil
+ * self[aseq] -> object or nil
+ *
+ * Returns elements from +self+; does not modify +self+.
+ *
+ * In brief:
+ *
+ * a = [:foo, 'bar', 2]
+ *
+ * # Single argument offset: returns one element.
+ * a[0] # => :foo # Zero-based index.
+ * a[-1] # => 2 # Negative index counts backwards from end.
+ *
+ * # Arguments offset and size: returns an array.
+ * a[1, 2] # => ["bar", 2]
+ * a[-2, 2] # => ["bar", 2] # Negative offset counts backwards from end.
+ *
+ * # Single argument range: returns an array.
+ * a[0..1] # => [:foo, "bar"]
+ * a[0..-2] # => [:foo, "bar"] # Negative range-begin counts backwards from end.
+ * a[-2..2] # => ["bar", 2] # Negative range-end counts backwards from end.
+ *
+ * When a single integer argument +offset+ is given, returns the element at offset +offset+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[0] # => :foo
+ * a[2] # => 2
+ * a # => [:foo, "bar", 2]
+ *
+ * If +offset+ is negative, counts backwards from the end of +self+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[-1] # => 2
+ * a[-2] # => "bar"
+ *
+ * If +index+ is out of range, returns +nil+.
*
+ * When two Integer arguments +offset+ and +size+ are given,
+ * returns a new array of size +size+ containing successive elements beginning at offset +offset+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[0, 2] # => [:foo, "bar"]
+ * a[1, 2] # => ["bar", 2]
+ *
+ * If <tt>offset + size</tt> is greater than <tt>self.size</tt>,
+ * returns all elements from offset +offset+ to the end:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[0, 4] # => [:foo, "bar", 2]
+ * a[1, 3] # => ["bar", 2]
+ * a[2, 2] # => [2]
+ *
+ * If <tt>offset == self.size</tt> and <tt>size >= 0</tt>,
+ * returns a new empty array.
+ *
+ * If +size+ is negative, returns +nil+.
+ *
+ * When a single Range argument +range+ is given,
+ * treats <tt>range.min</tt> as +offset+ above
+ * and <tt>range.size</tt> as +size+ above:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[0..1] # => [:foo, "bar"]
+ * a[1..2] # => ["bar", 2]
+ *
+ * Special case: If <tt>range.start == a.size</tt>, returns a new empty array.
+ *
+ * If <tt>range.end</tt> is negative, calculates the end index from the end:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[0..-1] # => [:foo, "bar", 2]
+ * a[0..-2] # => [:foo, "bar"]
+ * a[0..-3] # => [:foo]
+ *
+ * If <tt>range.start</tt> is negative, calculates the start index from the end:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[-1..2] # => [2]
+ * a[-2..2] # => ["bar", 2]
+ * a[-3..2] # => [:foo, "bar", 2]
+ *
+ * If <tt>range.start</tt> is larger than the array size, returns +nil+.
+ *
+ * a = [:foo, 'bar', 2]
+ * a[4..1] # => nil
+ * a[4..0] # => nil
+ * a[4..-1] # => nil
+ *
+ * When a single Enumerator::ArithmeticSequence argument +aseq+ is given,
+ * returns an array of elements corresponding to the indexes produced by
+ * the sequence.
+ *
+ * a = ['--', 'data1', '--', 'data2', '--', 'data3']
+ * a[(1..).step(2)] # => ["data1", "data2", "data3"]
+ *
+ * Unlike slicing with range, if the start or the end of the arithmetic sequence
+ * is larger than array size, throws RangeError.
+ *
+ * a = ['--', 'data1', '--', 'data2', '--', 'data3']
+ * a[(1..11).step(2)]
+ * # RangeError (((1..11).step(2)) out of range)
+ * a[(7..).step(2)]
+ * # RangeError (((7..).step(2)) out of range)
+ *
+ * If given a single argument, and its type is not one of the listed, tries to
+ * convert it to Integer, and raises if it is impossible:
+ *
+ * a = [:foo, 'bar', 2]
+ * # Raises TypeError (no implicit conversion of Symbol into Integer):
+ * a[:foo]
+ *
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
VALUE
rb_ary_aref(int argc, const VALUE *argv, VALUE ary)
{
- VALUE arg;
- long beg, len;
-
+ rb_check_arity(argc, 1, 2);
if (argc == 2) {
- beg = NUM2LONG(argv[0]);
- len = NUM2LONG(argv[1]);
- if (beg < 0) {
- beg += RARRAY_LEN(ary);
- }
- return rb_ary_subseq(ary, beg, len);
+ return rb_ary_aref2(ary, argv[0], argv[1]);
}
- if (argc != 1) {
- rb_scan_args(argc, argv, "11", NULL, NULL);
+ return rb_ary_aref1(ary, argv[0]);
+}
+
+static VALUE
+rb_ary_aref2(VALUE ary, VALUE b, VALUE e)
+{
+ long beg = NUM2LONG(b);
+ long len = NUM2LONG(e);
+ if (beg < 0) {
+ beg += RARRAY_LEN(ary);
}
- arg = argv[0];
+ return rb_ary_subseq(ary, beg, len);
+}
+
+VALUE
+rb_ary_aref1(VALUE ary, VALUE arg)
+{
+ long beg, len, step;
+
/* special case - speeding up */
if (FIXNUM_P(arg)) {
- return rb_ary_entry(ary, FIX2LONG(arg));
+ return rb_ary_entry(ary, FIX2LONG(arg));
}
- /* check if idx is Range */
- switch (rb_range_beg_len(arg, &beg, &len, RARRAY_LEN(ary), 0)) {
+ /* check if idx is Range or ArithmeticSequence */
+ switch (rb_arithmetic_sequence_beg_len_step(arg, &beg, &len, &step, RARRAY_LEN(ary), 0)) {
case Qfalse:
- break;
+ break;
case Qnil:
- return Qnil;
+ return Qnil;
default:
- return rb_ary_subseq(ary, beg, len);
+ return rb_ary_subseq_step(ary, beg, len, step);
}
+
return rb_ary_entry(ary, NUM2LONG(arg));
}
/*
* call-seq:
- * ary.at(index) -> obj or nil
+ * at(index) -> object or nil
*
- * Returns the element at +index+. A negative index counts from the end of
- * +self+. Returns +nil+ if the index is out of range. See also
- * Array#[].
+ * Returns the element of +self+ specified by the given +index+
+ * or +nil+ if there is no such element;
+ * +index+ must be an
+ * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects].
*
- * a = [ "a", "b", "c", "d", "e" ]
- * a.at(0) #=> "a"
- * a.at(-1) #=> "e"
+ * For non-negative +index+, returns the element of +self+ at offset +index+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a.at(0) # => :foo
+ * a.at(2) # => 2
+ * a.at(2.0) # => 2
+ *
+ * For negative +index+, counts backwards from the end of +self+:
+ *
+ * a.at(-2) # => "bar"
+ *
+ * Related: Array#[];
+ * see also {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
VALUE
@@ -1308,82 +1978,82 @@ rb_ary_at(VALUE ary, VALUE pos)
return rb_ary_entry(ary, NUM2LONG(pos));
}
-/*
- * call-seq:
- * ary.first -> obj or nil
- * ary.first(n) -> new_ary
- *
- * Returns the first element, or the first +n+ elements, of the array.
- * If the array is empty, the first form returns +nil+, and the
- * second form returns an empty array. See also Array#last for
- * the opposite effect.
- *
- * a = [ "q", "r", "s", "t" ]
- * a.first #=> "q"
- * a.first(2) #=> ["q", "r"]
- */
-
+#if 0
static VALUE
rb_ary_first(int argc, VALUE *argv, VALUE ary)
{
if (argc == 0) {
- if (RARRAY_LEN(ary) == 0) return Qnil;
- return RARRAY_AREF(ary, 0);
+ if (RARRAY_LEN(ary) == 0) return Qnil;
+ return RARRAY_AREF(ary, 0);
}
else {
- return ary_take_first_or_last(argc, argv, ary, ARY_TAKE_FIRST);
+ return ary_take_first_or_last(argc, argv, ary, ARY_TAKE_FIRST);
}
}
+#endif
-/*
- * call-seq:
- * ary.last -> obj or nil
- * ary.last(n) -> new_ary
- *
- * Returns the last element(s) of +self+. If the array is empty,
- * the first form returns +nil+.
- *
- * See also Array#first for the opposite effect.
- *
- * a = [ "w", "x", "y", "z" ]
- * a.last #=> "z"
- * a.last(2) #=> ["y", "z"]
- */
+static VALUE
+ary_first(VALUE self)
+{
+ return (RARRAY_LEN(self) == 0) ? Qnil : RARRAY_AREF(self, 0);
+}
+
+static VALUE
+ary_last(VALUE self)
+{
+ long len = RARRAY_LEN(self);
+ return (len == 0) ? Qnil : RARRAY_AREF(self, len-1);
+}
VALUE
-rb_ary_last(int argc, const VALUE *argv, VALUE ary)
+rb_ary_last(int argc, const VALUE *argv, VALUE ary) // used by parse.y
{
if (argc == 0) {
- long len = RARRAY_LEN(ary);
- if (len == 0) return Qnil;
- return RARRAY_AREF(ary, len-1);
+ return ary_last(ary);
}
else {
- return ary_take_first_or_last(argc, argv, ary, ARY_TAKE_LAST);
+ return ary_take_first_or_last(argc, argv, ary, ARY_TAKE_LAST);
}
}
/*
* call-seq:
- * ary.fetch(index) -> obj
- * ary.fetch(index, default) -> obj
- * ary.fetch(index) { |index| block } -> obj
- *
- * Tries to return the element at position +index+, but throws an IndexError
- * exception if the referenced +index+ lies outside of the array bounds. This
- * error can be prevented by supplying a second argument, which will act as a
- * +default+ value.
- *
- * Alternatively, if a block is given it will only be executed when an
- * invalid +index+ is referenced. Negative values of +index+ count from the
- * end of the array.
- *
- * a = [ 11, 22, 33, 44 ]
- * a.fetch(1) #=> 22
- * a.fetch(-1) #=> 44
- * a.fetch(4, 'cat') #=> "cat"
- * a.fetch(100) { |i| puts "#{i} is out of bounds" }
- * #=> "100 is out of bounds"
+ * fetch(index) -> element
+ * fetch(index, default_value) -> element or default_value
+ * fetch(index) {|index| ... } -> element or block_return_value
+ *
+ * Returns the element of +self+ at offset +index+ if +index+ is in range; +index+ must be an
+ * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects].
+ *
+ * With the single argument +index+ and no block,
+ * returns the element at offset +index+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a.fetch(1) # => "bar"
+ * a.fetch(1.1) # => "bar"
+ *
+ * If +index+ is negative, counts from the end of the array:
+ *
+ * a = [:foo, 'bar', 2]
+ * a.fetch(-1) # => 2
+ * a.fetch(-2) # => "bar"
+ *
+ * With arguments +index+ and +default_value+ (which may be any object) and no block,
+ * returns +default_value+ if +index+ is out-of-range:
+ *
+ * a = [:foo, 'bar', 2]
+ * a.fetch(1, nil) # => "bar"
+ * a.fetch(3, :foo) # => :foo
+ *
+ * With argument +index+ and a block,
+ * returns the element at offset +index+ if index is in range
+ * (and the block is not called); otherwise calls the block with index and returns its return value:
+ *
+ * a = [:foo, 'bar', 2]
+ * a.fetch(1) {|index| raise 'Cannot happen' } # => "bar"
+ * a.fetch(50) {|index| "Value for #{index}" } # => "Value for 50"
+ *
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
static VALUE
@@ -1396,149 +2066,232 @@ rb_ary_fetch(int argc, VALUE *argv, VALUE ary)
rb_scan_args(argc, argv, "11", &pos, &ifnone);
block_given = rb_block_given_p();
if (block_given && argc == 2) {
- rb_warn("block supersedes default value argument");
+ rb_warn("block supersedes default value argument");
}
idx = NUM2LONG(pos);
if (idx < 0) {
- idx += RARRAY_LEN(ary);
+ idx += RARRAY_LEN(ary);
}
if (idx < 0 || RARRAY_LEN(ary) <= idx) {
- if (block_given) return rb_yield(pos);
- if (argc == 1) {
- rb_raise(rb_eIndexError, "index %ld outside of array bounds: %ld...%ld",
- idx - (idx < 0 ? RARRAY_LEN(ary) : 0), -RARRAY_LEN(ary), RARRAY_LEN(ary));
- }
- return ifnone;
+ if (block_given) return rb_yield(pos);
+ if (argc == 1) {
+ rb_raise(rb_eIndexError, "index %ld outside of array bounds: %ld...%ld",
+ idx - (idx < 0 ? RARRAY_LEN(ary) : 0), -RARRAY_LEN(ary), RARRAY_LEN(ary));
+ }
+ return ifnone;
}
return RARRAY_AREF(ary, idx);
}
/*
+ * call-seq:
+ * find(if_none_proc = nil) {|element| ... } -> object or nil
+ * find(if_none_proc = nil) -> enumerator
+ *
+ * Returns the first element for which the block returns a truthy value.
+ *
+ * With a block given, calls the block with successive elements of the array;
+ * returns the first element for which the block returns a truthy value:
+ *
+ * [1, 3, 5].find {|element| element > 2} # => 3
+ *
+ * If no such element is found, calls +if_none_proc+ and returns its return value.
+ *
+ * [1, 3, 5].find(proc {-1}) {|element| element > 12} # => -1
+ *
+ * With no block given, returns an Enumerator.
+ *
+ */
+
+static VALUE
+rb_ary_find(int argc, VALUE *argv, VALUE ary)
+{
+ VALUE if_none;
+ long idx;
+
+ RETURN_ENUMERATOR(ary, argc, argv);
+ if_none = rb_check_arity(argc, 0, 1) ? argv[0] : Qnil;
+
+ for (idx = 0; idx < RARRAY_LEN(ary); idx++) {
+ VALUE elem = RARRAY_AREF(ary, idx);
+ if (RTEST(rb_yield(elem))) {
+ return elem;
+ }
+ }
+
+ if (!NIL_P(if_none)) {
+ return rb_funcallv(if_none, idCall, 0, 0);
+ }
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * rfind(if_none_proc = nil) {|element| ... } -> object or nil
+ * rfind(if_none_proc = nil) -> enumerator
+ *
+ * Returns the last element for which the block returns a truthy value.
+ *
+ * With a block given, calls the block with successive elements of the array in
+ * reverse order; returns the first element for which the block returns a truthy
+ * value:
+ *
+ * [1, 2, 3, 4, 5, 6].rfind {|element| element < 5} # => 4
+ *
+ * If no such element is found, calls +if_none_proc+ and returns its return value.
+ *
+ * [1, 2, 3, 4].rfind(proc {0}) {|element| element < -2} # => 0
+ *
+ * With no block given, returns an Enumerator.
+ *
+ */
+
+static VALUE
+rb_ary_rfind(int argc, VALUE *argv, VALUE ary)
+{
+ VALUE if_none;
+ long len, idx;
+
+ RETURN_ENUMERATOR(ary, argc, argv);
+ if_none = rb_check_arity(argc, 0, 1) ? argv[0] : Qnil;
+
+ idx = RARRAY_LEN(ary);
+ while (idx--) {
+ VALUE elem = RARRAY_AREF(ary, idx);
+ if (RTEST(rb_yield(elem))) {
+ return elem;
+ }
+
+ len = RARRAY_LEN(ary);
+ idx = (idx >= len) ? len : idx;
+ }
+
+ if (!NIL_P(if_none)) {
+ return rb_funcallv(if_none, idCall, 0, 0);
+ }
+ return Qnil;
+}
+
+/*
* call-seq:
- * ary.find_index(obj) -> int or nil
- * ary.find_index { |item| block } -> int or nil
- * ary.find_index -> Enumerator
- * ary.index(obj) -> int or nil
- * ary.index { |item| block } -> int or nil
- * ary.index -> Enumerator
+ * find_index(object) -> integer or nil
+ * find_index {|element| ... } -> integer or nil
+ * find_index -> new_enumerator
+ * index(object) -> integer or nil
+ * index {|element| ... } -> integer or nil
+ * index -> new_enumerator
+ *
+ * Returns the zero-based integer index of a specified element, or +nil+.
+ *
+ * With only argument +object+ given,
+ * returns the index of the first element +element+
+ * for which <tt>object == element</tt>:
*
- * Returns the _index_ of the first object in +ary+ such that the object is
- * <code>==</code> to +obj+.
+ * a = [:foo, 'bar', 2, 'bar']
+ * a.index('bar') # => 1
*
- * If a block is given instead of an argument, returns the _index_ of the
- * first object for which the block returns +true+. Returns +nil+ if no
- * match is found.
+ * Returns +nil+ if no such element found.
*
- * See also Array#rindex.
+ * With only a block given,
+ * calls the block with each successive element;
+ * returns the index of the first element for which the block returns a truthy value:
*
- * An Enumerator is returned if neither a block nor argument is given.
+ * a = [:foo, 'bar', 2, 'bar']
+ * a.index {|element| element == 'bar' } # => 1
*
- * a = [ "a", "b", "c" ]
- * a.index("b") #=> 1
- * a.index("z") #=> nil
- * a.index { |x| x == "b" } #=> 1
+ * Returns +nil+ if the block never returns a truthy value.
+ *
+ * With neither an argument nor a block given, returns a new Enumerator.
+ *
+ * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
*/
static VALUE
rb_ary_index(int argc, VALUE *argv, VALUE ary)
{
- const VALUE *ptr;
VALUE val;
- long i, len;
+ long i;
if (argc == 0) {
- RETURN_ENUMERATOR(ary, 0, 0);
- for (i=0; i<RARRAY_LEN(ary); i++) {
- if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) {
- return LONG2NUM(i);
- }
- }
- return Qnil;
+ RETURN_ENUMERATOR(ary, 0, 0);
+ for (i=0; i<RARRAY_LEN(ary); i++) {
+ if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) {
+ return LONG2NUM(i);
+ }
+ }
+ return Qnil;
}
rb_check_arity(argc, 0, 1);
val = argv[0];
if (rb_block_given_p())
- rb_warn("given block not used");
- len = RARRAY_LEN(ary);
- ptr = RARRAY_CONST_PTR(ary);
- for (i=0; i<len; i++) {
- VALUE e = ptr[i];
- switch (rb_equal_opt(e, val)) {
- case Qundef:
- if (!rb_equal(e, val)) break;
- case Qtrue:
- return LONG2NUM(i);
- case Qfalse:
- continue;
- }
- len = RARRAY_LEN(ary);
- ptr = RARRAY_CONST_PTR(ary);
+ rb_warn("given block not used");
+ for (i=0; i<RARRAY_LEN(ary); i++) {
+ VALUE e = RARRAY_AREF(ary, i);
+ if (rb_equal(e, val)) {
+ return LONG2NUM(i);
+ }
}
return Qnil;
}
/*
* call-seq:
- * ary.rindex(obj) -> int or nil
- * ary.rindex { |item| block } -> int or nil
- * ary.rindex -> Enumerator
+ * rindex(object) -> integer or nil
+ * rindex {|element| ... } -> integer or nil
+ * rindex -> new_enumerator
+ *
+ * Returns the index of the last element for which <tt>object == element</tt>.
+ *
+ * With argument +object+ given, returns the index of the last such element found:
+ *
+ * a = [:foo, 'bar', 2, 'bar']
+ * a.rindex('bar') # => 3
*
- * Returns the _index_ of the last object in +self+ <code>==</code> to +obj+.
+ * Returns +nil+ if no such object found.
*
- * If a block is given instead of an argument, returns the _index_ of the
- * first object for which the block returns +true+, starting from the last
- * object.
+ * With a block given, calls the block with each successive element;
+ * returns the index of the last element for which the block returns a truthy value:
*
- * Returns +nil+ if no match is found.
+ * a = [:foo, 'bar', 2, 'bar']
+ * a.rindex {|element| element == 'bar' } # => 3
*
- * See also Array#index.
+ * Returns +nil+ if the block never returns a truthy value.
*
- * If neither block nor argument is given, an Enumerator is returned instead.
+ * When neither an argument nor a block is given, returns a new Enumerator.
*
- * a = [ "a", "b", "b", "b", "c" ]
- * a.rindex("b") #=> 3
- * a.rindex("z") #=> nil
- * a.rindex { |x| x == "b" } #=> 3
+ * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
*/
static VALUE
rb_ary_rindex(int argc, VALUE *argv, VALUE ary)
{
- const VALUE *ptr;
VALUE val;
long i = RARRAY_LEN(ary), len;
if (argc == 0) {
- RETURN_ENUMERATOR(ary, 0, 0);
- while (i--) {
- if (RTEST(rb_yield(RARRAY_AREF(ary, i))))
- return LONG2NUM(i);
- if (i > (len = RARRAY_LEN(ary))) {
- i = len;
- }
- }
- return Qnil;
+ RETURN_ENUMERATOR(ary, 0, 0);
+ while (i--) {
+ if (RTEST(rb_yield(RARRAY_AREF(ary, i))))
+ return LONG2NUM(i);
+ if (i > (len = RARRAY_LEN(ary))) {
+ i = len;
+ }
+ }
+ return Qnil;
}
rb_check_arity(argc, 0, 1);
val = argv[0];
if (rb_block_given_p())
- rb_warn("given block not used");
- ptr = RARRAY_CONST_PTR(ary);
+ rb_warn("given block not used");
while (i--) {
- VALUE e = ptr[i];
- switch (rb_equal_opt(e, val)) {
- case Qundef:
- if (!rb_equal(e, val)) break;
- case Qtrue:
- return LONG2NUM(i);
- case Qfalse:
- continue;
- }
- if (i > (len = RARRAY_LEN(ary))) {
- i = len;
- }
- ptr = RARRAY_CONST_PTR(ary);
+ VALUE e = RARRAY_AREF(ary, i);
+ if (rb_equal(e, val)) {
+ return LONG2NUM(i);
+ }
+ if (i > RARRAY_LEN(ary)) {
+ break;
+ }
}
return Qnil;
}
@@ -1553,68 +2306,78 @@ rb_ary_to_ary(VALUE obj)
}
static void
-rb_ary_splice(VALUE ary, long beg, long len, VALUE rpl)
+rb_ary_splice(VALUE ary, long beg, long len, const VALUE *rptr, long rlen)
{
- long rlen;
long olen;
+ long rofs;
if (len < 0) rb_raise(rb_eIndexError, "negative length (%ld)", len);
olen = RARRAY_LEN(ary);
if (beg < 0) {
- beg += olen;
- if (beg < 0) {
- rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
- beg - olen, -olen);
- }
+ beg += olen;
+ if (beg < 0) {
+ rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
+ beg - olen, -olen);
+ }
}
if (olen < len || olen < beg + len) {
- len = olen - beg;
+ len = olen - beg;
}
- if (rpl == Qundef) {
- rlen = 0;
- }
- else {
- rpl = rb_ary_to_ary(rpl);
- rlen = RARRAY_LEN(rpl);
- olen = RARRAY_LEN(ary); /* ary may be resized in rpl.to_ary too */
+ {
+ const VALUE *optr = RARRAY_CONST_PTR(ary);
+ rofs = (rptr >= optr && rptr < optr + olen) ? rptr - optr : -1;
}
+
if (beg >= olen) {
- VALUE target_ary;
- if (beg > ARY_MAX_SIZE - rlen) {
- rb_raise(rb_eIndexError, "index %ld too big", beg);
- }
- target_ary = ary_ensure_room_for_push(ary, rlen-len); /* len is 0 or negative */
- len = beg + rlen;
- ary_mem_clear(ary, olen, beg - olen);
- if (rlen > 0) {
- ary_memcpy0(ary, beg, rlen, RARRAY_CONST_PTR(rpl), target_ary);
- }
- ARY_SET_LEN(ary, len);
+ VALUE target_ary;
+ if (beg > ARY_MAX_SIZE - rlen) {
+ rb_raise(rb_eIndexError, "index %ld too big", beg);
+ }
+ target_ary = ary_ensure_room_for_push(ary, rlen-len); /* len is 0 or negative */
+ len = beg + rlen;
+ ary_mem_clear(ary, olen, beg - olen);
+ if (rlen > 0) {
+ if (rofs != -1) rptr = RARRAY_CONST_PTR(ary) + rofs;
+ ary_memcpy0(ary, beg, rlen, rptr, target_ary);
+ }
+ ARY_SET_LEN(ary, len);
}
else {
- long alen;
-
- if (olen - len > ARY_MAX_SIZE - rlen) {
- rb_raise(rb_eIndexError, "index %ld too big", olen + rlen - len);
- }
- rb_ary_modify(ary);
- alen = olen + rlen - len;
- if (alen >= ARY_CAPA(ary)) {
- ary_double_capa(ary, alen);
- }
-
- if (len != rlen) {
- RARRAY_PTR_USE(ary, ptr,
- MEMMOVE(ptr + beg + rlen, ptr + beg + len,
- VALUE, olen - (beg + len)));
- ARY_SET_LEN(ary, alen);
- }
- if (rlen > 0) {
- MEMMOVE(RARRAY_PTR(ary) + beg, RARRAY_CONST_PTR(rpl), VALUE, rlen);
- }
+ long alen;
+
+ if (olen - len > ARY_MAX_SIZE - rlen) {
+ rb_raise(rb_eIndexError, "index %ld too big", olen + rlen - len);
+ }
+ rb_ary_modify(ary);
+ alen = olen + rlen - len;
+ if (alen >= ARY_CAPA(ary)) {
+ ary_double_capa(ary, alen);
+ }
+
+ if (len != rlen) {
+ RARRAY_PTR_USE(ary, ptr,
+ MEMMOVE(ptr + beg + rlen, ptr + beg + len,
+ VALUE, olen - (beg + len)));
+ ARY_SET_LEN(ary, alen);
+ }
+ if (rlen > 0) {
+ if (rofs == -1) {
+ rb_gc_writebarrier_remember(ary);
+ }
+ else {
+ /* In this case, we're copying from a region in this array, so
+ * we don't need to fire the write barrier. */
+ rptr = RARRAY_CONST_PTR(ary) + rofs;
+ }
+
+ /* do not use RARRAY_PTR() because it can causes GC.
+ * ary can contain T_NONE object because it is not cleared.
+ */
+ RARRAY_PTR_USE(ary, ptr,
+ MEMMOVE(ptr + beg, rptr, VALUE, rlen));
+ }
}
- RB_GC_GUARD(rpl);
}
void
@@ -1624,22 +2387,14 @@ rb_ary_set_len(VALUE ary, long len)
rb_ary_modify_check(ary);
if (ARY_SHARED_P(ary)) {
- rb_raise(rb_eRuntimeError, "can't set length of shared ");
+ rb_raise(rb_eRuntimeError, "can't set length of shared ");
}
if (len > (capa = (long)ARY_CAPA(ary))) {
- rb_bug("probable buffer overflow: %ld for %ld", len, capa);
+ rb_bug("probable buffer overflow: %ld for %ld", len, capa);
}
ARY_SET_LEN(ary, len);
}
-/*!
- * expands or shrinks \a ary to \a len elements.
- * expanded region will be filled with Qnil.
- * \param ary an array
- * \param len new size
- * \return \a ary
- * \post the size of \a ary is \a len.
- */
VALUE
rb_ary_resize(VALUE ary, long len)
{
@@ -1649,68 +2404,199 @@ rb_ary_resize(VALUE ary, long len)
olen = RARRAY_LEN(ary);
if (len == olen) return ary;
if (len > ARY_MAX_SIZE) {
- rb_raise(rb_eIndexError, "index %ld too big", len);
+ rb_raise(rb_eIndexError, "index %ld too big", len);
}
if (len > olen) {
- if (len >= ARY_CAPA(ary)) {
- ary_double_capa(ary, len);
- }
- ary_mem_clear(ary, olen, len - olen);
- ARY_SET_LEN(ary, len);
+ if (len > ARY_CAPA(ary)) {
+ ary_double_capa(ary, len);
+ }
+ ary_mem_clear(ary, olen, len - olen);
+ ARY_SET_LEN(ary, len);
}
else if (ARY_EMBED_P(ary)) {
ARY_SET_EMBED_LEN(ary, len);
}
- else if (len <= RARRAY_EMBED_LEN_MAX) {
- VALUE tmp[RARRAY_EMBED_LEN_MAX];
- MEMCPY(tmp, ARY_HEAP_PTR(ary), VALUE, len);
- ary_discard(ary);
- MEMCPY((VALUE *)ARY_EMBED_PTR(ary), tmp, VALUE, len); /* WB: no new reference */
+ else if (len <= ary_embed_capa(ary)) {
+ const VALUE *ptr = ARY_HEAP_PTR(ary);
+ long ptr_capa = ARY_HEAP_SIZE(ary);
+ bool is_malloc_ptr = !ARY_SHARED_P(ary);
+
+ FL_SET_EMBED(ary);
+
+ MEMCPY((VALUE *)ARY_EMBED_PTR(ary), ptr, VALUE, len); /* WB: no new reference */
ARY_SET_EMBED_LEN(ary, len);
+
+ if (is_malloc_ptr) ruby_sized_xfree((void *)ptr, ptr_capa);
}
else {
- if (olen > len + ARY_DEFAULT_SIZE) {
- SIZED_REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, len, RARRAY(ary)->as.heap.aux.capa);
- ARY_SET_CAPA(ary, len);
- }
- ARY_SET_HEAP_LEN(ary, len);
+ if (olen > len + ARY_DEFAULT_SIZE) {
+ size_t new_capa = ary_heap_realloc(ary, len);
+ ARY_SET_CAPA(ary, new_capa);
+ }
+ ARY_SET_HEAP_LEN(ary, len);
}
+ ary_verify(ary);
return ary;
}
+static VALUE
+ary_aset_by_rb_ary_store(VALUE ary, long key, VALUE val)
+{
+ rb_ary_store(ary, key, val);
+ return val;
+}
+
+static VALUE
+ary_aset_by_rb_ary_splice(VALUE ary, long beg, long len, VALUE val)
+{
+ VALUE rpl = rb_ary_to_ary(val);
+ rb_ary_splice(ary, beg, len, RARRAY_CONST_PTR(rpl), RARRAY_LEN(rpl));
+ RB_GC_GUARD(rpl);
+ return val;
+}
+
/*
* call-seq:
- * ary[index] = obj -> obj
- * ary[start, length] = obj or other_ary or nil -> obj or other_ary or nil
- * ary[range] = obj or other_ary or nil -> obj or other_ary or nil
- *
- * Element Assignment --- Sets the element at +index+, or replaces a subarray
- * from the +start+ index for +length+ elements, or replaces a subarray
- * specified by the +range+ of indices.
- *
- * If indices are greater than the current capacity of the array, the array
- * grows automatically. Elements are inserted into the array at +start+ if
- * +length+ is zero.
- *
- * Negative indices will count backward from the end of the array. For
- * +start+ and +range+ cases the starting index is just before an element.
- *
- * An IndexError is raised if a negative index points past the beginning of
- * the array.
- *
- * See also Array#push, and Array#unshift.
- *
- * a = Array.new
- * a[4] = "4"; #=> [nil, nil, nil, nil, "4"]
- * a[0, 3] = [ 'a', 'b', 'c' ] #=> ["a", "b", "c", nil, "4"]
- * a[1..2] = [ 1, 2 ] #=> ["a", 1, 2, nil, "4"]
- * a[0, 2] = "?" #=> ["?", 2, nil, "4"]
- * a[0..2] = "A" #=> ["A", "4"]
- * a[-1] = "Z" #=> ["A", "Z"]
- * a[1..-1] = nil #=> ["A", nil]
- * a[1..-1] = [] #=> ["A"]
- * a[0, 0] = [ 1, 2 ] #=> [1, 2, "A"]
- * a[3, 0] = "B" #=> [1, 2, "A", "B"]
+ * self[index] = object -> object
+ * self[start, length] = object -> object
+ * self[range] = object -> object
+ *
+ * Assigns elements in +self+, based on the given +object+; returns +object+.
+ *
+ * In brief:
+ *
+ * a_orig = [:foo, 'bar', 2]
+ *
+ * # With argument index.
+ * a = a_orig.dup
+ * a[0] = 'foo' # => "foo"
+ * a # => ["foo", "bar", 2]
+ * a = a_orig.dup
+ * a[7] = 'foo' # => "foo"
+ * a # => [:foo, "bar", 2, nil, nil, nil, nil, "foo"]
+ *
+ * # With arguments start and length.
+ * a = a_orig.dup
+ * a[0, 2] = 'foo' # => "foo"
+ * a # => ["foo", 2]
+ * a = a_orig.dup
+ * a[6, 50] = 'foo' # => "foo"
+ * a # => [:foo, "bar", 2, nil, nil, nil, "foo"]
+ *
+ * # With argument range.
+ * a = a_orig.dup
+ * a[0..1] = 'foo' # => "foo"
+ * a # => ["foo", 2]
+ * a = a_orig.dup
+ * a[6..50] = 'foo' # => "foo"
+ * a # => [:foo, "bar", 2, nil, nil, nil, "foo"]
+ *
+ * When Integer argument +index+ is given, assigns +object+ to an element in +self+.
+ *
+ * If +index+ is non-negative, assigns +object+ the element at offset +index+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[0] = 'foo' # => "foo"
+ * a # => ["foo", "bar", 2]
+ *
+ * If +index+ is greater than <tt>self.length</tt>, extends the array:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[7] = 'foo' # => "foo"
+ * a # => [:foo, "bar", 2, nil, nil, nil, nil, "foo"]
+ *
+ * If +index+ is negative, counts backwards from the end of the array:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[-1] = 'two' # => "two"
+ * a # => [:foo, "bar", "two"]
+ *
+ * When Integer arguments +start+ and +length+ are given and +object+ is not an array,
+ * removes <tt>length - 1</tt> elements beginning at offset +start+,
+ * and assigns +object+ at offset +start+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[0, 2] = 'foo' # => "foo"
+ * a # => ["foo", 2]
+ *
+ * If +start+ is negative, counts backwards from the end of the array:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[-2, 2] = 'foo' # => "foo"
+ * a # => [:foo, "foo"]
+ *
+ * If +start+ is non-negative and outside the array (<tt> >= self.size</tt>),
+ * extends the array with +nil+, assigns +object+ at offset +start+,
+ * and ignores +length+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[6, 50] = 'foo' # => "foo"
+ * a # => [:foo, "bar", 2, nil, nil, nil, "foo"]
+ *
+ * If +length+ is zero, shifts elements at and following offset +start+
+ * and assigns +object+ at offset +start+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[1, 0] = 'foo' # => "foo"
+ * a # => [:foo, "foo", "bar", 2]
+ *
+ * If +length+ is too large for the existing array, does not extend the array:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[1, 5] = 'foo' # => "foo"
+ * a # => [:foo, "foo"]
+ *
+ * When Range argument +range+ is given and +object+ is not an array,
+ * removes <tt>length - 1</tt> elements beginning at offset +start+,
+ * and assigns +object+ at offset +start+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[0..1] = 'foo' # => "foo"
+ * a # => ["foo", 2]
+ *
+ * if <tt>range.begin</tt> is negative, counts backwards from the end of the array:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[-2..2] = 'foo' # => "foo"
+ * a # => [:foo, "foo"]
+ *
+ * If the array length is less than <tt>range.begin</tt>,
+ * extends the array with +nil+, assigns +object+ at offset <tt>range.begin</tt>,
+ * and ignores +length+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[6..50] = 'foo' # => "foo"
+ * a # => [:foo, "bar", 2, nil, nil, nil, "foo"]
+ *
+ * If <tt>range.end</tt> is zero, shifts elements at and following offset +start+
+ * and assigns +object+ at offset +start+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[1..0] = 'foo' # => "foo"
+ * a # => [:foo, "foo", "bar", 2]
+ *
+ * If <tt>range.end</tt> is negative, assigns +object+ at offset +start+,
+ * retains <tt>range.end.abs -1</tt> elements past that, and removes those beyond:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[1..-1] = 'foo' # => "foo"
+ * a # => [:foo, "foo"]
+ * a = [:foo, 'bar', 2]
+ * a[1..-2] = 'foo' # => "foo"
+ * a # => [:foo, "foo", 2]
+ * a = [:foo, 'bar', 2]
+ * a[1..-3] = 'foo' # => "foo"
+ * a # => [:foo, "foo", "bar", 2]
+ * a = [:foo, 'bar', 2]
+ *
+ * If <tt>range.end</tt> is too large for the existing array,
+ * replaces array elements, but does not extend the array with +nil+ values:
+ *
+ * a = [:foo, 'bar', 2]
+ * a[1..5] = 'foo' # => "foo"
+ * a # => [:foo, "foo"]
+ *
+ * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
static VALUE
@@ -1718,45 +2604,60 @@ rb_ary_aset(int argc, VALUE *argv, VALUE ary)
{
long offset, beg, len;
+ rb_check_arity(argc, 2, 3);
+ rb_ary_modify_check(ary);
if (argc == 3) {
- rb_ary_modify_check(ary);
- beg = NUM2LONG(argv[0]);
- len = NUM2LONG(argv[1]);
- rb_ary_splice(ary, beg, len, argv[2]);
- return argv[2];
+ beg = NUM2LONG(argv[0]);
+ len = NUM2LONG(argv[1]);
+ return ary_aset_by_rb_ary_splice(ary, beg, len, argv[2]);
}
- rb_check_arity(argc, 2, 2);
- rb_ary_modify_check(ary);
if (FIXNUM_P(argv[0])) {
- offset = FIX2LONG(argv[0]);
- goto fixnum;
+ offset = FIX2LONG(argv[0]);
+ return ary_aset_by_rb_ary_store(ary, offset, argv[1]);
}
if (rb_range_beg_len(argv[0], &beg, &len, RARRAY_LEN(ary), 1)) {
- /* check if idx is Range */
- rb_ary_splice(ary, beg, len, argv[1]);
- return argv[1];
+ /* check if idx is Range */
+ return ary_aset_by_rb_ary_splice(ary, beg, len, argv[1]);
}
offset = NUM2LONG(argv[0]);
-fixnum:
- rb_ary_store(ary, offset, argv[1]);
- return argv[1];
+ return ary_aset_by_rb_ary_store(ary, offset, argv[1]);
}
/*
* call-seq:
- * ary.insert(index, obj...) -> ary
+ * insert(index, *objects) -> self
*
- * Inserts the given values before the element with the given +index+.
+ * Inserts the given +objects+ as elements of +self+;
+ * returns +self+.
+ *
+ * When +index+ is non-negative, inserts +objects+
+ * _before_ the element at offset +index+:
+ *
+ * a = ['a', 'b', 'c'] # => ["a", "b", "c"]
+ * a.insert(1, :x, :y, :z) # => ["a", :x, :y, :z, "b", "c"]
+ *
+ * Extends the array if +index+ is beyond the array (<tt>index >= self.size</tt>):
+ *
+ * a = ['a', 'b', 'c'] # => ["a", "b", "c"]
+ * a.insert(5, :x, :y, :z) # => ["a", "b", "c", nil, nil, :x, :y, :z]
+ *
+ * When +index+ is negative, inserts +objects+
+ * _after_ the element at offset <tt>index + self.size</tt>:
+ *
+ * a = ['a', 'b', 'c'] # => ["a", "b", "c"]
+ * a.insert(-2, :x, :y, :z) # => ["a", "b", :x, :y, :z, "c"]
*
- * Negative indices count backwards from the end of the array, where +-1+ is
- * the last element. If a negative index is used, the given values will be
- * inserted after that element, so using an index of +-1+ will insert the
- * values at the end of the array.
+ * With no +objects+ given, does nothing:
*
- * a = %w{ a b c d }
- * a.insert(2, 99) #=> ["a", "b", 99, "c", "d"]
- * a.insert(-2, 1, 2, 3) #=> ["a", "b", 99, "c", 1, 2, 3, "d"]
+ * a = ['a', 'b', 'c'] # => ["a", "b", "c"]
+ * a.insert(1) # => ["a", "b", "c"]
+ * a.insert(50) # => ["a", "b", "c"]
+ * a.insert(-50) # => ["a", "b", "c"]
+ *
+ * Raises IndexError if +objects+ are given and +index+ is negative and out of range.
+ *
+ * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
static VALUE
@@ -1766,15 +2667,20 @@ rb_ary_insert(int argc, VALUE *argv, VALUE ary)
rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
rb_ary_modify_check(ary);
- if (argc == 1) return ary;
pos = NUM2LONG(argv[0]);
+ if (argc == 1) return ary;
if (pos == -1) {
- pos = RARRAY_LEN(ary);
+ pos = RARRAY_LEN(ary);
}
- if (pos < 0) {
- pos++;
+ else if (pos < 0) {
+ long minpos = -RARRAY_LEN(ary) - 1;
+ if (pos < minpos) {
+ rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
+ pos, minpos);
+ }
+ pos++;
}
- rb_ary_splice(ary, pos, 0, rb_ary_new4(argc - 1, argv + 1));
+ rb_ary_splice(ary, pos, 0, argv + 1, argc - 1);
return ary;
}
@@ -1787,52 +2693,97 @@ ary_enum_length(VALUE ary, VALUE args, VALUE eobj)
return rb_ary_length(ary);
}
+// Primitive to avoid a race condition in Array#each.
+// Return `true` and write `value` and `index` if the element exists.
+static VALUE
+ary_fetch_next(VALUE self, VALUE *index, VALUE *value)
+{
+ long i = NUM2LONG(*index);
+ if (i >= RARRAY_LEN(self)) {
+ return Qfalse;
+ }
+ *value = RARRAY_AREF(self, i);
+ *index = LONG2NUM(i + 1);
+ return Qtrue;
+}
+
/*
* call-seq:
- * ary.each { |item| block } -> ary
- * ary.each -> Enumerator
+ * each {|element| ... } -> self
+ * each -> new_enumerator
+ *
+ * With a block given, iterates over the elements of +self+,
+ * passing each element to the block;
+ * returns +self+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a.each {|element| puts "#{element.class} #{element}" }
*
- * Calls the given block once for each element in +self+, passing that element
- * as a parameter. Returns the array itself.
+ * Output:
*
- * If no block is given, an Enumerator is returned.
+ * Symbol foo
+ * String bar
+ * Integer 2
*
- * a = [ "a", "b", "c" ]
- * a.each {|x| print x, " -- " }
+ * Allows the array to be modified during iteration:
*
- * produces:
+ * a = [:foo, 'bar', 2]
+ * a.each {|element| puts element; a.clear if element.to_s.start_with?('b') }
*
- * a -- b -- c --
+ * Output:
+ *
+ * foo
+ * bar
+ *
+ * With no block given, returns a new Enumerator.
+ *
+ * Related: see {Methods for Iterating}[rdoc-ref:Array@Methods+for+Iterating].
*/
VALUE
rb_ary_each(VALUE ary)
{
long i;
-
+ ary_verify(ary);
RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
for (i=0; i<RARRAY_LEN(ary); i++) {
- rb_yield(RARRAY_AREF(ary, i));
+ rb_yield(RARRAY_AREF(ary, i));
}
return ary;
}
/*
* call-seq:
- * ary.each_index { |index| block } -> ary
- * ary.each_index -> Enumerator
+ * each_index {|index| ... } -> self
+ * each_index -> new_enumerator
+ *
+ * With a block given, iterates over the elements of +self+,
+ * passing each <i>array index</i> to the block;
+ * returns +self+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a.each_index {|index| puts "#{index} #{a[index]}" }
+ *
+ * Output:
*
- * Same as Array#each, but passes the +index+ of the element instead of the
- * element itself.
+ * 0 foo
+ * 1 bar
+ * 2 2
*
- * An Enumerator is returned if no block is given.
+ * Allows the array to be modified during iteration:
*
- * a = [ "a", "b", "c" ]
- * a.each_index {|x| print x, " -- " }
+ * a = [:foo, 'bar', 2]
+ * a.each_index {|index| puts index; a.clear if index > 0 }
+ * a # => []
*
- * produces:
+ * Output:
*
- * 0 -- 1 -- 2 --
+ * 0
+ * 1
+ *
+ * With no block given, returns a new Enumerator.
+ *
+ * Related: see {Methods for Iterating}[rdoc-ref:Array@Methods+for+Iterating].
*/
static VALUE
@@ -1842,24 +2793,33 @@ rb_ary_each_index(VALUE ary)
RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
for (i=0; i<RARRAY_LEN(ary); i++) {
- rb_yield(LONG2NUM(i));
+ rb_yield(LONG2NUM(i));
}
return ary;
}
/*
* call-seq:
- * ary.reverse_each { |item| block } -> ary
- * ary.reverse_each -> Enumerator
+ * reverse_each {|element| ... } -> self
+ * reverse_each -> Enumerator
+ *
+ * When a block given, iterates backwards over the elements of +self+,
+ * passing, in reverse order, each element to the block;
+ * returns +self+:
+ *
+ * a = []
+ * [0, 1, 2].reverse_each {|element| a.push(element) }
+ * a # => [2, 1, 0]
*
- * Same as Array#each, but traverses +self+ in reverse order.
+ * Allows the array to be modified during iteration:
*
- * a = [ "a", "b", "c" ]
- * a.reverse_each {|x| print x, " " }
+ * a = ['a', 'b', 'c']
+ * a.reverse_each {|element| a.clear if element.start_with?('b') }
+ * a # => []
*
- * produces:
+ * When no block given, returns a new Enumerator.
*
- * c b a
+ * Related: see {Methods for Iterating}[rdoc-ref:Array@Methods+for+Iterating].
*/
static VALUE
@@ -1870,24 +2830,27 @@ rb_ary_reverse_each(VALUE ary)
RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
len = RARRAY_LEN(ary);
while (len--) {
- long nlen;
- rb_yield(RARRAY_AREF(ary, len));
- nlen = RARRAY_LEN(ary);
- if (nlen < len) {
- len = nlen;
- }
+ long nlen;
+ rb_yield(RARRAY_AREF(ary, len));
+ nlen = RARRAY_LEN(ary);
+ if (nlen < len) {
+ len = nlen;
+ }
}
return ary;
}
/*
* call-seq:
- * ary.length -> int
+ * length -> integer
+ * size -> integer
+ *
+ * Returns the count of elements in +self+:
*
- * Returns the number of elements in +self+. May be zero.
+ * [0, 1, 2].length # => 3
+ * [].length # => 0
*
- * [ 1, 2, 3, 4, 5 ].length #=> 5
- * [].length #=> 0
+ * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
*/
static VALUE
@@ -1899,19 +2862,18 @@ rb_ary_length(VALUE ary)
/*
* call-seq:
- * ary.empty? -> true or false
+ * empty? -> true or false
*
- * Returns +true+ if +self+ contains no elements.
+ * Returns +true+ if the count of elements in +self+ is zero,
+ * +false+ otherwise.
*
- * [].empty? #=> true
+ * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
*/
static VALUE
rb_ary_empty_p(VALUE ary)
{
- if (RARRAY_LEN(ary) == 0)
- return Qtrue;
- return Qfalse;
+ return RBOOL(RARRAY_LEN(ary) == 0);
}
VALUE
@@ -1921,13 +2883,16 @@ rb_ary_dup(VALUE ary)
VALUE dup = rb_ary_new2(len);
ary_memcpy(dup, 0, len, RARRAY_CONST_PTR(ary));
ARY_SET_LEN(dup, len);
+
+ ary_verify(ary);
+ ary_verify(dup);
return dup;
}
VALUE
rb_ary_resurrect(VALUE ary)
{
- return rb_ary_new4(RARRAY_LEN(ary), RARRAY_CONST_PTR(ary));
+ return ary_make_partial(ary, rb_cArray, 0, RARRAY_LEN(ary));
}
extern VALUE rb_output_fs;
@@ -1944,15 +2909,15 @@ recursive_join(VALUE obj, VALUE argp, int recur)
int *first = (int *)arg[3];
if (recur) {
- rb_raise(rb_eArgError, "recursive array join");
+ rb_raise(rb_eArgError, "recursive array join");
}
else {
- ary_join_1(obj, ary, sep, 0, result, first);
+ ary_join_1(obj, ary, sep, 0, result, first);
}
return Qnil;
}
-static void
+static long
ary_join_0(VALUE ary, VALUE sep, long max, VALUE result)
{
long i;
@@ -1960,11 +2925,40 @@ ary_join_0(VALUE ary, VALUE sep, long max, VALUE result)
if (max > 0) rb_enc_copy(result, RARRAY_AREF(ary, 0));
for (i=0; i<max; i++) {
- val = RARRAY_AREF(ary, i);
- if (i > 0 && !NIL_P(sep))
- rb_str_buf_append(result, sep);
- rb_str_buf_append(result, val);
- if (OBJ_TAINTED(val)) OBJ_TAINT(result);
+ val = RARRAY_AREF(ary, i);
+ if (!RB_TYPE_P(val, T_STRING)) break;
+ if (i > 0 && !NIL_P(sep))
+ rb_str_buf_append(result, sep);
+ rb_str_buf_append(result, val);
+ }
+ return i;
+}
+
+static void
+ary_join_1_str(VALUE dst, VALUE src, int *first)
+{
+ rb_str_buf_append(dst, src);
+ if (*first) {
+ rb_enc_copy(dst, src);
+ *first = FALSE;
+ }
+}
+
+static void
+ary_join_1_ary(VALUE obj, VALUE ary, VALUE sep, VALUE result, VALUE val, int *first)
+{
+ if (val == ary) {
+ rb_raise(rb_eArgError, "recursive array join");
+ }
+ else {
+ VALUE args[4];
+
+ *first = FALSE;
+ args[0] = val;
+ args[1] = sep;
+ args[2] = result;
+ args[3] = (VALUE)first;
+ rb_exec_recursive(recursive_join, obj, (VALUE)args);
}
}
@@ -1974,50 +2968,25 @@ ary_join_1(VALUE obj, VALUE ary, VALUE sep, long i, VALUE result, int *first)
VALUE val, tmp;
for (; i<RARRAY_LEN(ary); i++) {
- if (i > 0 && !NIL_P(sep))
- rb_str_buf_append(result, sep);
-
- val = RARRAY_AREF(ary, i);
- if (RB_TYPE_P(val, T_STRING)) {
- str_join:
- rb_str_buf_append(result, val);
- *first = FALSE;
- }
- else if (RB_TYPE_P(val, T_ARRAY)) {
- obj = val;
- ary_join:
- if (val == ary) {
- rb_raise(rb_eArgError, "recursive array join");
- }
- else {
- VALUE args[4];
-
- args[0] = val;
- args[1] = sep;
- args[2] = result;
- args[3] = (VALUE)first;
- rb_exec_recursive(recursive_join, obj, (VALUE)args);
- }
- }
- else {
- tmp = rb_check_string_type(val);
- if (!NIL_P(tmp)) {
- val = tmp;
- goto str_join;
- }
- tmp = rb_check_convert_type(val, T_ARRAY, "Array", "to_ary");
- if (!NIL_P(tmp)) {
- obj = val;
- val = tmp;
- goto ary_join;
- }
- val = rb_obj_as_string(val);
- if (*first) {
- rb_enc_copy(result, val);
- *first = FALSE;
- }
- goto str_join;
- }
+ if (i > 0 && !NIL_P(sep))
+ rb_str_buf_append(result, sep);
+
+ val = RARRAY_AREF(ary, i);
+ if (RB_TYPE_P(val, T_STRING)) {
+ ary_join_1_str(result, val, first);
+ }
+ else if (RB_TYPE_P(val, T_ARRAY)) {
+ ary_join_1_ary(val, ary, sep, result, val, first);
+ }
+ else if (!NIL_P(tmp = rb_check_string_type(val))) {
+ ary_join_1_str(result, tmp, first);
+ }
+ else if (!NIL_P(tmp = rb_check_array_type(val))) {
+ ary_join_1_ary(val, ary, sep, result, tmp, first);
+ }
+ else {
+ ary_join_1_str(result, rb_obj_as_string(val), first);
+ }
}
}
@@ -2025,36 +2994,41 @@ VALUE
rb_ary_join(VALUE ary, VALUE sep)
{
long len = 1, i;
- int taint = FALSE;
VALUE val, tmp, result;
if (RARRAY_LEN(ary) == 0) return rb_usascii_str_new(0, 0);
- if (OBJ_TAINTED(ary)) taint = TRUE;
if (!NIL_P(sep)) {
- StringValue(sep);
- len += RSTRING_LEN(sep) * (RARRAY_LEN(ary) - 1);
+ StringValue(sep);
+ len += RSTRING_LEN(sep) * (RARRAY_LEN(ary) - 1);
+ }
+ long len_memo = RARRAY_LEN(ary);
+ for (i=0; i < len_memo; i++) {
+ val = RARRAY_AREF(ary, i);
+ if (RB_UNLIKELY(!RB_TYPE_P(val, T_STRING))) {
+ tmp = rb_check_string_type(val);
+ if (NIL_P(tmp) || tmp != val) {
+ int first;
+ long n = RARRAY_LEN(ary);
+ if (i > n) i = n;
+ result = rb_str_buf_new(len + (n-i)*10);
+ rb_enc_associate(result, rb_usascii_encoding());
+ i = ary_join_0(ary, sep, i, result);
+ first = i == 0;
+ ary_join_1(ary, ary, sep, i, result, &first);
+ return result;
+ }
+ len += RSTRING_LEN(tmp);
+ len_memo = RARRAY_LEN(ary);
+ }
+ else {
+ len += RSTRING_LEN(val);
+ }
}
- for (i=0; i<RARRAY_LEN(ary); i++) {
- val = RARRAY_AREF(ary, i);
- tmp = rb_check_string_type(val);
-
- if (NIL_P(tmp) || tmp != val) {
- int first;
- result = rb_str_buf_new(len + (RARRAY_LEN(ary)-i)*10);
- rb_enc_associate(result, rb_usascii_encoding());
- if (taint) OBJ_TAINT(result);
- ary_join_0(ary, sep, i, result);
- first = i == 0;
- ary_join_1(ary, ary, sep, i, result, &first);
- return result;
- }
- len += RSTRING_LEN(tmp);
- }
+ result = rb_str_new(0, len);
+ rb_str_set_len(result, 0);
- result = rb_str_buf_new(len);
- if (taint) OBJ_TAINT(result);
ary_join_0(ary, sep, RARRAY_LEN(ary), result);
return result;
@@ -2062,24 +3036,44 @@ rb_ary_join(VALUE ary, VALUE sep)
/*
* call-seq:
- * ary.join(separator=$,) -> str
+ * join(separator = $,) -> new_string
+ *
+ * Returns the new string formed by joining the converted elements of +self+;
+ * for each element +element+:
+ *
+ * - Converts recursively using <tt>element.join(separator)</tt>
+ * if +element+ is a <tt>kind_of?(Array)</tt>.
+ * - Otherwise, converts using <tt>element.to_s</tt>.
+ *
+ * With no argument given, joins using the output field separator, <tt>$,</tt>:
+ *
+ * a = [:foo, 'bar', 2]
+ * $, # => nil
+ * a.join # => "foobar2"
+ *
+ * With string argument +separator+ given, joins using that separator:
+ *
+ * a = [:foo, 'bar', 2]
+ * a.join("\n") # => "foo\nbar\n2"
*
- * Returns a string created by converting each element of the array to
- * a string, separated by the given +separator+.
- * If the +separator+ is +nil+, it uses current $,.
- * If both the +separator+ and $, are nil, it uses empty string.
+ * Joins recursively for nested arrays:
*
- * [ "a", "b", "c" ].join #=> "abc"
- * [ "a", "b", "c" ].join("-") #=> "a-b-c"
+ * a = [:foo, [:bar, [:baz, :bat]]]
+ * a.join # => "foobarbazbat"
+ *
+ * Related: see {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting].
*/
-
static VALUE
rb_ary_join_m(int argc, VALUE *argv, VALUE ary)
{
VALUE sep;
- rb_scan_args(argc, argv, "01", &sep);
- if (NIL_P(sep)) sep = rb_output_fs;
+ if (rb_check_arity(argc, 0, 1) == 0 || NIL_P(sep = argv[0])) {
+ sep = rb_output_fs;
+ if (!NIL_P(sep)) {
+ rb_category_warn(RB_WARN_CATEGORY_DEPRECATED, "$, is set to non-nil value");
+ }
+ }
return rb_ary_join(ary, sep);
}
@@ -2087,32 +3081,33 @@ rb_ary_join_m(int argc, VALUE *argv, VALUE ary)
static VALUE
inspect_ary(VALUE ary, VALUE dummy, int recur)
{
- int tainted = OBJ_TAINTED(ary);
long i;
VALUE s, str;
if (recur) return rb_usascii_str_new_cstr("[...]");
str = rb_str_buf_new2("[");
for (i=0; i<RARRAY_LEN(ary); i++) {
- s = rb_inspect(RARRAY_AREF(ary, i));
- if (OBJ_TAINTED(s)) tainted = TRUE;
- if (i > 0) rb_str_buf_cat2(str, ", ");
- else rb_enc_copy(str, s);
- rb_str_buf_append(str, s);
+ s = rb_inspect(RARRAY_AREF(ary, i));
+ if (i > 0) rb_str_buf_cat2(str, ", ");
+ else rb_enc_copy(str, s);
+ rb_str_buf_append(str, s);
}
rb_str_buf_cat2(str, "]");
- if (tainted) OBJ_TAINT(str);
return str;
}
/*
* call-seq:
- * ary.inspect -> string
- * ary.to_s -> string
+ * inspect -> new_string
+ * to_s -> new_string
*
- * Creates a string representation of +self+.
+ * Returns the new string formed by calling method <tt>#inspect</tt>
+ * on each array element:
*
- * [ "a", "b", "c" ].to_s #=> "[\"a\", \"b\", \"c\"]"
+ * a = [:foo, 'bar', 2]
+ * a.inspect # => "[:foo, \"bar\", 2]"
+ *
+ * Related: see {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting].
*/
static VALUE
@@ -2130,59 +3125,84 @@ rb_ary_to_s(VALUE ary)
/*
* call-seq:
- * ary.to_a -> ary
+ * to_a -> self or new_array
*
- * Returns +self+.
+ * When +self+ is an instance of \Array, returns +self+.
+ *
+ * Otherwise, returns a new array containing the elements of +self+:
+ *
+ * class MyArray < Array; end
+ * my_a = MyArray.new(['foo', 'bar', 'two'])
+ * a = my_a.to_a
+ * a # => ["foo", "bar", "two"]
+ * a.class # => Array # Not MyArray.
*
- * If called on a subclass of Array, converts the receiver to an Array object.
+ * Related: see {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting].
*/
static VALUE
rb_ary_to_a(VALUE ary)
{
if (rb_obj_class(ary) != rb_cArray) {
- VALUE dup = rb_ary_new2(RARRAY_LEN(ary));
- rb_ary_replace(dup, ary);
- return dup;
+ VALUE dup = rb_ary_new2(RARRAY_LEN(ary));
+ rb_ary_replace(dup, ary);
+ return dup;
}
return ary;
}
/*
* call-seq:
- * ary.to_h -> hash
+ * to_h -> new_hash
+ * to_h {|element| ... } -> new_hash
*
- * Returns the result of interpreting <i>ary</i> as an array of
- * <tt>[key, value]</tt> pairs.
+ * Returns a new hash formed from +self+.
*
- * [[:foo, :bar], [1, 2]].to_h
- * # => {:foo => :bar, 1 => 2}
+ * With no block given, each element of +self+ must be a 2-element sub-array;
+ * forms each sub-array into a key-value pair in the new hash:
+ *
+ * a = [['foo', 'zero'], ['bar', 'one'], ['baz', 'two']]
+ * a.to_h # => {"foo"=>"zero", "bar"=>"one", "baz"=>"two"}
+ * [].to_h # => {}
+ *
+ * With a block given, the block must return a 2-element array;
+ * calls the block with each element of +self+;
+ * forms each returned array into a key-value pair in the returned hash:
+ *
+ * a = ['foo', :bar, 1, [2, 3], {baz: 4}]
+ * a.to_h {|element| [element, element.class] }
+ * # => {"foo"=>String, :bar=>Symbol, 1=>Integer, [2, 3]=>Array, {:baz=>4}=>Hash}
+ *
+ * Related: see {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting].
*/
static VALUE
rb_ary_to_h(VALUE ary)
{
long i;
- VALUE hash = rb_hash_new();
+ VALUE hash = rb_hash_new_with_size(RARRAY_LEN(ary));
+ int block_given = rb_block_given_p();
+
for (i=0; i<RARRAY_LEN(ary); i++) {
- const VALUE elt = rb_ary_elt(ary, i);
- const VALUE key_value_pair = rb_check_array_type(elt);
- if (NIL_P(key_value_pair)) {
- rb_raise(rb_eTypeError, "wrong element type %"PRIsVALUE" at %ld (expected array)",
- rb_obj_class(elt), i);
- }
- if (RARRAY_LEN(key_value_pair) != 2) {
- rb_raise(rb_eArgError, "wrong array length at %ld (expected 2, was %ld)",
- i, RARRAY_LEN(key_value_pair));
- }
- rb_hash_aset(hash, RARRAY_AREF(key_value_pair, 0), RARRAY_AREF(key_value_pair, 1));
+ const VALUE e = rb_ary_elt(ary, i);
+ const VALUE elt = block_given ? rb_yield_force_blockarg(e) : e;
+ const VALUE key_value_pair = rb_check_array_type(elt);
+ if (NIL_P(key_value_pair)) {
+ rb_raise(rb_eTypeError, "wrong element type %"PRIsVALUE" at %ld (expected array)",
+ rb_obj_class(elt), i);
+ }
+ if (RARRAY_LEN(key_value_pair) != 2) {
+ rb_raise(rb_eArgError, "wrong array length at %ld (expected 2, was %ld)",
+ i, RARRAY_LEN(key_value_pair));
+ }
+ rb_hash_aset(hash, RARRAY_AREF(key_value_pair, 0), RARRAY_AREF(key_value_pair, 1));
}
return hash;
}
/*
* call-seq:
- * ary.to_ary -> ary
+ * to_ary -> self
*
* Returns +self+.
*/
@@ -2197,9 +3217,9 @@ static void
ary_reverse(VALUE *p1, VALUE *p2)
{
while (p1 < p2) {
- VALUE tmp = *p1;
- *p1++ = *p2;
- *p2-- = tmp;
+ VALUE tmp = *p1;
+ *p1++ = *p2;
+ *p2-- = tmp;
}
}
@@ -2211,23 +3231,26 @@ rb_ary_reverse(VALUE ary)
rb_ary_modify(ary);
if (len > 1) {
- RARRAY_PTR_USE(ary, p1, {
- p2 = p1 + len - 1; /* points last item */
- ary_reverse(p1, p2);
- }); /* WB: no new reference */
+ RARRAY_PTR_USE(ary, p1, {
+ p2 = p1 + len - 1; /* points last item */
+ ary_reverse(p1, p2);
+ }); /* WB: no new reference */
}
return ary;
}
/*
* call-seq:
- * ary.reverse! -> ary
+ * reverse! -> self
*
- * Reverses +self+ in place.
+ * Reverses the order of the elements of +self+;
+ * returns +self+:
*
- * a = [ "a", "b", "c" ]
- * a.reverse! #=> ["c", "b", "a"]
- * a #=> ["c", "b", "a"]
+ * a = [0, 1, 2]
+ * a.reverse! # => [2, 1, 0]
+ * a # => [2, 1, 0]
+ *
+ * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
static VALUE
@@ -2238,12 +3261,13 @@ rb_ary_reverse_bang(VALUE ary)
/*
* call-seq:
- * ary.reverse -> new_ary
+ * reverse -> new_array
+ *
+ * Returns a new array containing the elements of +self+ in reverse order:
*
- * Returns a new array containing +self+'s elements in reverse order.
+ * [0, 1, 2].reverse # => [2, 1, 0]
*
- * [ "a", "b", "c" ].reverse #=> ["c", "b", "a"]
- * [ 1 ].reverse #=> [1]
+ * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining].
*/
static VALUE
@@ -2253,9 +3277,9 @@ rb_ary_reverse_m(VALUE ary)
VALUE dup = rb_ary_new2(len);
if (len > 0) {
- const VALUE *p1 = RARRAY_CONST_PTR(ary);
- VALUE *p2 = (VALUE *)RARRAY_CONST_PTR(dup) + len - 1;
- do *p2-- = *p1++; while (--len > 0);
+ const VALUE *p1 = RARRAY_CONST_PTR(ary);
+ VALUE *p2 = (VALUE *)RARRAY_CONST_PTR(dup) + len - 1;
+ do *p2-- = *p1++; while (--len > 0);
}
ARY_SET_LEN(dup, RARRAY_LEN(ary));
return dup;
@@ -2267,73 +3291,113 @@ rotate_count(long cnt, long len)
return (cnt < 0) ? (len - (~cnt % len) - 1) : (cnt % len);
}
+static void
+ary_rotate_ptr(VALUE *ptr, long len, long cnt)
+{
+ if (cnt == 1) {
+ VALUE tmp = *ptr;
+ memmove(ptr, ptr + 1, sizeof(VALUE)*(len - 1));
+ *(ptr + len - 1) = tmp;
+ }
+ else if (cnt == len - 1) {
+ VALUE tmp = *(ptr + len - 1);
+ memmove(ptr + 1, ptr, sizeof(VALUE)*(len - 1));
+ *ptr = tmp;
+ }
+ else {
+ --len;
+ if (cnt < len) ary_reverse(ptr + cnt, ptr + len);
+ if (--cnt > 0) ary_reverse(ptr, ptr + cnt);
+ if (len > 0) ary_reverse(ptr, ptr + len);
+ }
+}
+
VALUE
rb_ary_rotate(VALUE ary, long cnt)
{
rb_ary_modify(ary);
if (cnt != 0) {
- VALUE *ptr = RARRAY_PTR(ary);
- long len = RARRAY_LEN(ary);
-
- if (len > 0 && (cnt = rotate_count(cnt, len)) > 0) {
- --len;
- if (cnt < len) ary_reverse(ptr + cnt, ptr + len);
- if (--cnt > 0) ary_reverse(ptr, ptr + cnt);
- if (len > 0) ary_reverse(ptr, ptr + len);
- return ary;
- }
+ long len = RARRAY_LEN(ary);
+ if (len > 1 && (cnt = rotate_count(cnt, len)) > 0) {
+ RARRAY_PTR_USE(ary, ptr, ary_rotate_ptr(ptr, len, cnt));
+ return ary;
+ }
}
-
return Qnil;
}
/*
* call-seq:
- * ary.rotate!(count=1) -> ary
+ * rotate!(count = 1) -> self
*
- * Rotates +self+ in place so that the element at +count+ comes first, and
- * returns +self+.
+ * Rotates +self+ in place by moving elements from one end to the other; returns +self+.
*
- * If +count+ is negative then it rotates in the opposite direction, starting
- * from the end of the array where +-1+ is the last element.
+ * With non-negative numeric +count+,
+ * rotates +count+ elements from the beginning to the end:
*
- * a = [ "a", "b", "c", "d" ]
- * a.rotate! #=> ["b", "c", "d", "a"]
- * a #=> ["b", "c", "d", "a"]
- * a.rotate!(2) #=> ["d", "a", "b", "c"]
- * a.rotate!(-3) #=> ["a", "b", "c", "d"]
+ * [0, 1, 2, 3].rotate!(2) # => [2, 3, 0, 1]
+ [0, 1, 2, 3].rotate!(2.1) # => [2, 3, 0, 1]
+ *
+ * If +count+ is large, uses <tt>count % array.size</tt> as the count:
+ *
+ * [0, 1, 2, 3].rotate!(21) # => [1, 2, 3, 0]
+ *
+ * If +count+ is zero, rotates no elements:
+ *
+ * [0, 1, 2, 3].rotate!(0) # => [0, 1, 2, 3]
+ *
+ * With a negative numeric +count+, rotates in the opposite direction,
+ * from end to beginning:
+ *
+ * [0, 1, 2, 3].rotate!(-1) # => [3, 0, 1, 2]
+ *
+ * If +count+ is small (far from zero), uses <tt>count % array.size</tt> as the count:
+ *
+ * [0, 1, 2, 3].rotate!(-21) # => [3, 0, 1, 2]
+ *
+ * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
static VALUE
rb_ary_rotate_bang(int argc, VALUE *argv, VALUE ary)
{
- long n = 1;
-
- switch (argc) {
- case 1: n = NUM2LONG(argv[0]);
- case 0: break;
- default: rb_scan_args(argc, argv, "01", NULL);
- }
+ long n = (rb_check_arity(argc, 0, 1) ? NUM2LONG(argv[0]) : 1);
rb_ary_rotate(ary, n);
return ary;
}
/*
* call-seq:
- * ary.rotate(count=1) -> new_ary
+ * rotate(count = 1) -> new_array
+ *
+ * Returns a new array formed from +self+ with elements
+ * rotated from one end to the other.
+ *
+ * With non-negative numeric +count+,
+ * rotates elements from the beginning to the end:
+ *
+ * [0, 1, 2, 3].rotate(2) # => [2, 3, 0, 1]
+ * [0, 1, 2, 3].rotate(2.1) # => [2, 3, 0, 1]
*
- * Returns a new array by rotating +self+ so that the element at +count+ is
- * the first element of the new array.
+ * If +count+ is large, uses <tt>count % array.size</tt> as the count:
*
- * If +count+ is negative then it rotates in the opposite direction, starting
- * from the end of +self+ where +-1+ is the last element.
+ * [0, 1, 2, 3].rotate(22) # => [2, 3, 0, 1]
*
- * a = [ "a", "b", "c", "d" ]
- * a.rotate #=> ["b", "c", "d", "a"]
- * a #=> ["a", "b", "c", "d"]
- * a.rotate(2) #=> ["c", "d", "a", "b"]
- * a.rotate(-3) #=> ["b", "c", "d", "a"]
+ * With a +count+ of zero, rotates no elements:
+ *
+ * [0, 1, 2, 3].rotate(0) # => [0, 1, 2, 3]
+ *
+ * With negative numeric +count+, rotates in the opposite direction,
+ * from the end to the beginning:
+ *
+ * [0, 1, 2, 3].rotate(-1) # => [3, 0, 1, 2]
+ *
+ * If +count+ is small (far from zero), uses <tt>count % array.size</tt> as the count:
+ *
+ * [0, 1, 2, 3].rotate(-21) # => [3, 0, 1, 2]
+ *
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
static VALUE
@@ -2341,22 +3405,17 @@ rb_ary_rotate_m(int argc, VALUE *argv, VALUE ary)
{
VALUE rotated;
const VALUE *ptr;
- long len, cnt = 1;
-
- switch (argc) {
- case 1: cnt = NUM2LONG(argv[0]);
- case 0: break;
- default: rb_scan_args(argc, argv, "01", NULL);
- }
+ long len;
+ long cnt = (rb_check_arity(argc, 0, 1) ? NUM2LONG(argv[0]) : 1);
len = RARRAY_LEN(ary);
rotated = rb_ary_new2(len);
if (len > 0) {
- cnt = rotate_count(cnt, len);
- ptr = RARRAY_CONST_PTR(ary);
- len -= cnt;
- ary_memcpy(rotated, 0, len, ptr + cnt);
- ary_memcpy(rotated, len, cnt, ptr);
+ cnt = rotate_count(cnt, len);
+ ptr = RARRAY_CONST_PTR(ary);
+ len -= cnt;
+ ary_memcpy(rotated, 0, len, ptr + cnt);
+ ary_memcpy(rotated, len, cnt, ptr);
}
ARY_SET_LEN(rotated, RARRAY_LEN(ary));
return rotated;
@@ -2364,30 +3423,41 @@ rb_ary_rotate_m(int argc, VALUE *argv, VALUE ary)
struct ary_sort_data {
VALUE ary;
- int opt_methods;
- int opt_inited;
+ VALUE receiver;
};
static VALUE
sort_reentered(VALUE ary)
{
if (RBASIC(ary)->klass) {
- rb_raise(rb_eRuntimeError, "sort reentered");
+ rb_raise(rb_eRuntimeError, "sort reentered");
}
return Qnil;
}
+static void
+sort_returned(struct ary_sort_data *data)
+{
+ if (rb_obj_frozen_p(data->receiver)) {
+ rb_raise(rb_eFrozenError, "array frozen during sort");
+ }
+ sort_reentered(data->ary);
+}
+
static int
sort_1(const void *ap, const void *bp, void *dummy)
{
struct ary_sort_data *data = dummy;
VALUE retval = sort_reentered(data->ary);
VALUE a = *(const VALUE *)ap, b = *(const VALUE *)bp;
+ VALUE args[2];
int n;
- retval = rb_yield_values(2, a, b);
+ args[0] = a;
+ args[1] = b;
+ retval = rb_yield_values2(2, args);
n = rb_cmpint(retval, a, b);
- sort_reentered(data->ary);
+ sort_returned(data);
return n;
}
@@ -2399,68 +3469,61 @@ sort_2(const void *ap, const void *bp, void *dummy)
VALUE a = *(const VALUE *)ap, b = *(const VALUE *)bp;
int n;
- if (FIXNUM_P(a) && FIXNUM_P(b) && CMP_OPTIMIZABLE(data, Fixnum)) {
- if ((long)a > (long)b) return 1;
- if ((long)a < (long)b) return -1;
- return 0;
+ if (FIXNUM_P(a) && FIXNUM_P(b) && CMP_OPTIMIZABLE(INTEGER)) {
+ if ((long)a > (long)b) return 1;
+ if ((long)a < (long)b) return -1;
+ return 0;
}
- if (STRING_P(a) && STRING_P(b) && CMP_OPTIMIZABLE(data, String)) {
- return rb_str_cmp(a, b);
+ if (STRING_P(a) && STRING_P(b) && CMP_OPTIMIZABLE(STRING)) {
+ return rb_str_cmp(a, b);
+ }
+ if (RB_FLOAT_TYPE_P(a) && CMP_OPTIMIZABLE(FLOAT)) {
+ return rb_float_cmp(a, b);
}
retval = rb_funcallv(a, id_cmp, 1, &b);
n = rb_cmpint(retval, a, b);
- sort_reentered(data->ary);
+ sort_returned(data);
return n;
}
/*
* call-seq:
- * ary.sort! -> ary
- * ary.sort! { |a, b| block } -> ary
- *
- * Sorts +self+ in place.
+ * sort! -> self
+ * sort! {|a, b| ... } -> self
*
- * Comparisons for the sort will be done using the <code><=></code> operator
- * or using an optional code block.
+ * Like Array#sort, but returns +self+ with its elements sorted in place.
*
- * The block must implement a comparison between +a+ and +b+ and return
- * an integer less than 0 when +b+ follows +a+, +0+ when +a+ and +b+
- * are equivalent, or an integer greater than 0 when +a+ follows +b+.
- *
- * See also Enumerable#sort_by.
- *
- * a = [ "d", "a", "e", "c", "b" ]
- * a.sort! #=> ["a", "b", "c", "d", "e"]
- * a.sort! { |x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
+ * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
VALUE
rb_ary_sort_bang(VALUE ary)
{
rb_ary_modify(ary);
- assert(!ARY_SHARED_P(ary));
+ RUBY_ASSERT(!ARY_SHARED_P(ary));
if (RARRAY_LEN(ary) > 1) {
- VALUE tmp = ary_make_substitution(ary); /* only ary refers tmp */
- struct ary_sort_data data;
- long len = RARRAY_LEN(ary);
-
- RBASIC_CLEAR_CLASS(tmp);
- data.ary = tmp;
- data.opt_methods = 0;
- data.opt_inited = 0;
- RARRAY_PTR_USE(tmp, ptr, {
- ruby_qsort(ptr, len, sizeof(VALUE),
- rb_block_given_p()?sort_1:sort_2, &data);
- }); /* WB: no new reference */
- rb_ary_modify(ary);
+ VALUE tmp = ary_make_substitution(ary); /* only ary refers tmp */
+ struct ary_sort_data data;
+ long len = RARRAY_LEN(ary);
+ RBASIC_CLEAR_CLASS(tmp);
+ data.ary = tmp;
+ data.receiver = ary;
+ RARRAY_PTR_USE(tmp, ptr, {
+ ruby_qsort(ptr, len, sizeof(VALUE),
+ rb_block_given_p()?sort_1:sort_2, &data);
+ }); /* WB: no new reference */
+ rb_ary_modify(ary);
if (ARY_EMBED_P(tmp)) {
if (ARY_SHARED_P(ary)) { /* ary might be destructively operated in the given block */
rb_ary_unshare(ary);
- FL_SET_EMBED(ary);
+ FL_SET_EMBED(ary);
}
- ary_memcpy(ary, 0, ARY_EMBED_LEN(tmp), ARY_EMBED_PTR(tmp));
+ if (ARY_EMBED_LEN(tmp) > ARY_CAPA(ary)) {
+ ary_resize_capa(ary, ARY_EMBED_LEN(tmp));
+ }
+ ary_memcpy(ary, 0, ARY_EMBED_LEN(tmp), ARY_EMBED_PTR(tmp));
ARY_SET_LEN(ary, ARY_EMBED_LEN(tmp));
}
else {
@@ -2469,7 +3532,7 @@ rb_ary_sort_bang(VALUE ary)
ARY_SET_CAPA(ary, RARRAY_LEN(tmp));
}
else {
- assert(!ARY_SHARED_P(tmp));
+ RUBY_ASSERT(!ARY_SHARED_P(tmp));
if (ARY_EMBED_P(ary)) {
FL_UNSET_EMBED(ary);
}
@@ -2478,44 +3541,56 @@ rb_ary_sort_bang(VALUE ary)
rb_ary_unshare(ary);
}
else {
- ruby_sized_xfree((void *)ARY_HEAP_PTR(ary), ARY_HEAP_SIZE(ary));
+ ary_heap_free(ary);
}
- ARY_SET_PTR(ary, RARRAY_CONST_PTR(tmp));
+ ARY_SET_PTR(ary, ARY_HEAP_PTR(tmp));
ARY_SET_HEAP_LEN(ary, len);
- ARY_SET_CAPA(ary, RARRAY_LEN(tmp));
+ ARY_SET_CAPA(ary, ARY_HEAP_LEN(tmp));
}
/* tmp was lost ownership for the ptr */
- FL_UNSET(tmp, FL_FREEZE);
FL_SET_EMBED(tmp);
ARY_SET_EMBED_LEN(tmp, 0);
- FL_SET(tmp, FL_FREEZE);
- }
+ OBJ_FREEZE(tmp);
+ }
/* tmp will be GC'ed. */
RBASIC_SET_CLASS_RAW(tmp, rb_cArray); /* rb_cArray must be marked */
}
+ ary_verify(ary);
return ary;
}
/*
* call-seq:
- * ary.sort -> new_ary
- * ary.sort { |a, b| block } -> new_ary
+ * sort -> new_array
+ * sort {|a, b| ... } -> new_array
+ *
+ * Returns a new array containing the elements of +self+, sorted.
+ *
+ * With no block given, compares elements using operator <tt>#<=></tt>
+ * (see Object#<=>):
*
- * Returns a new array created by sorting +self+.
+ * [0, 2, 3, 1].sort # => [0, 1, 2, 3]
*
- * Comparisons for the sort will be done using the <code><=></code> operator
- * or using an optional code block.
+ * With a block given, calls the block with each combination of pairs of elements from +self+;
+ * for each pair +a+ and +b+, the block should return a numeric:
*
- * The block must implement a comparison between +a+ and +b+ and return
- * an integer less than 0 when +b+ follows +a+, +0+ when +a+ and +b+
- * are equivalent, or an integer greater than 0 when +a+ follows +b+.
+ * - Negative when +b+ is to follow +a+.
+ * - Zero when +a+ and +b+ are equivalent.
+ * - Positive when +a+ is to follow +b+.
*
+ * Example:
*
- * See also Enumerable#sort_by.
+ * a = [3, 2, 0, 1]
+ * a.sort {|a, b| a <=> b } # => [0, 1, 2, 3]
+ * a.sort {|a, b| b <=> a } # => [3, 2, 1, 0]
*
- * a = [ "d", "a", "e", "c", "b" ]
- * a.sort #=> ["a", "b", "c", "d", "e"]
- * a.sort { |x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
+ * When the block returns zero, the order for +a+ and +b+ is indeterminate,
+ * and may be unstable.
+ *
+ * See an example in Numeric#nonzero? for the idiom to sort more
+ * complex structure.
+ *
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
VALUE
@@ -2530,55 +3605,15 @@ static VALUE rb_ary_bsearch_index(VALUE ary);
/*
* call-seq:
- * ary.bsearch {|x| block } -> elem
- *
- * By using binary search, finds a value from this array which meets
- * the given condition in O(log n) where n is the size of the array.
- *
- * You can use this method in two use cases: a find-minimum mode and
- * a find-any mode. In either case, the elements of the array must be
- * monotone (or sorted) with respect to the block.
- *
- * In find-minimum mode (this is a good choice for typical use case),
- * the block must return true or false, and there must be an index i
- * (0 <= i <= ary.size) so that:
- *
- * - the block returns false for any element whose index is less than
- * i, and
- * - the block returns true for any element whose index is greater
- * than or equal to i.
- *
- * This method returns the i-th element. If i is equal to ary.size,
- * it returns nil.
- *
- * ary = [0, 4, 7, 10, 12]
- * ary.bsearch {|x| x >= 4 } #=> 4
- * ary.bsearch {|x| x >= 6 } #=> 7
- * ary.bsearch {|x| x >= -1 } #=> 0
- * ary.bsearch {|x| x >= 100 } #=> nil
- *
- * In find-any mode (this behaves like libc's bsearch(3)), the block
- * must return a number, and there must be two indices i and j
- * (0 <= i <= j <= ary.size) so that:
- *
- * - the block returns a positive number for ary[k] if 0 <= k < i,
- * - the block returns zero for ary[k] if i <= k < j, and
- * - the block returns a negative number for ary[k] if
- * j <= k < ary.size.
- *
- * Under this condition, this method returns any element whose index
- * is within i...j. If i is equal to j (i.e., there is no element
- * that satisfies the block), this method returns nil.
- *
- * ary = [0, 4, 7, 10, 12]
- * # try to find v such that 4 <= v < 8
- * ary.bsearch {|x| 1 - x / 4 } #=> 4 or 7
- * # try to find v such that 8 <= v < 10
- * ary.bsearch {|x| 4 - x / 2 } #=> nil
- *
- * You must not mix the two modes at a time; the block must always
- * return either true/false, or always return a number. It is
- * undefined which value is actually picked up at each iteration.
+ * bsearch {|element| ... } -> found_element or nil
+ * bsearch -> new_enumerator
+ *
+ * Returns the element from +self+ found by a binary search,
+ * or +nil+ if the search found no suitable element.
+ *
+ * See {Binary Searching}[rdoc-ref:language/bsearch.rdoc].
+ *
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
static VALUE
@@ -2587,22 +3622,22 @@ rb_ary_bsearch(VALUE ary)
VALUE index_result = rb_ary_bsearch_index(ary);
if (FIXNUM_P(index_result)) {
- return rb_ary_entry(ary, FIX2LONG(index_result));
+ return rb_ary_entry(ary, FIX2LONG(index_result));
}
return index_result;
}
/*
* call-seq:
- * ary.bsearch_index {|x| block } -> int or nil
+ * bsearch_index {|element| ... } -> integer or nil
+ * bsearch_index -> new_enumerator
+ *
+ * Returns the integer index of the element from +self+ found by a binary search,
+ * or +nil+ if the search found no suitable element.
*
- * By using binary search, finds an index of a value from this array which
- * meets the given condition in O(log n) where n is the size of the array.
+ * See {Binary Searching}[rdoc-ref:language/bsearch.rdoc].
*
- * It supports two modes, depending on the nature of the block and they are
- * exactly the same as in the case of #bsearch method with the only difference
- * being that this method returns the index of the element instead of the
- * element itself. For more details consult the documentation for #bsearch.
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
static VALUE
@@ -2614,39 +3649,39 @@ rb_ary_bsearch_index(VALUE ary)
RETURN_ENUMERATOR(ary, 0, 0);
while (low < high) {
- mid = low + ((high - low) / 2);
- val = rb_ary_entry(ary, mid);
- v = rb_yield(val);
- if (FIXNUM_P(v)) {
- if (v == INT2FIX(0)) return INT2FIX(mid);
- smaller = (SIGNED_VALUE)v < 0; /* Fixnum preserves its sign-bit */
- }
- else if (v == Qtrue) {
- satisfied = 1;
- smaller = 1;
- }
- else if (v == Qfalse || v == Qnil) {
- smaller = 0;
- }
- else if (rb_obj_is_kind_of(v, rb_cNumeric)) {
- const VALUE zero = INT2FIX(0);
- switch (rb_cmpint(rb_funcallv(v, id_cmp, 1, &zero), v, zero)) {
- case 0: return INT2FIX(mid);
- case 1: smaller = 1; break;
- case -1: smaller = 0;
- }
- }
- else {
- rb_raise(rb_eTypeError, "wrong argument type %"PRIsVALUE
- " (must be numeric, true, false or nil)",
- rb_obj_class(v));
- }
- if (smaller) {
- high = mid;
- }
- else {
- low = mid + 1;
- }
+ mid = low + ((high - low) / 2);
+ val = rb_ary_entry(ary, mid);
+ v = rb_yield(val);
+ if (FIXNUM_P(v)) {
+ if (v == INT2FIX(0)) return INT2FIX(mid);
+ smaller = (SIGNED_VALUE)v < 0; /* Fixnum preserves its sign-bit */
+ }
+ else if (v == Qtrue) {
+ satisfied = 1;
+ smaller = 1;
+ }
+ else if (!RTEST(v)) {
+ smaller = 0;
+ }
+ else if (rb_obj_is_kind_of(v, rb_cNumeric)) {
+ const VALUE zero = INT2FIX(0);
+ switch (rb_cmpint(rb_funcallv(v, id_cmp, 1, &zero), v, zero)) {
+ case 0: return INT2FIX(mid);
+ case 1: smaller = 0; break;
+ case -1: smaller = 1;
+ }
+ }
+ else {
+ rb_raise(rb_eTypeError, "wrong argument type %"PRIsVALUE
+ " (must be numeric, true, false or nil)",
+ rb_obj_class(v));
+ }
+ if (smaller) {
+ high = mid;
+ }
+ else {
+ low = mid + 1;
+ }
}
if (!satisfied) return Qnil;
return INT2FIX(low);
@@ -2661,14 +3696,24 @@ sort_by_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, dummy))
/*
* call-seq:
- * ary.sort_by! { |obj| block } -> ary
- * ary.sort_by! -> Enumerator
+ * sort_by! {|element| ... } -> self
+ * sort_by! -> new_enumerator
+ *
+ * With a block given, sorts the elements of +self+ in place;
+ * returns self.
+ *
+ * Calls the block with each successive element;
+ * sorts elements based on the values returned from the block:
*
- * Sorts +self+ in place using a set of keys generated by mapping the
- * values in +self+ through the given block.
+ * a = ['aaaa', 'bbb', 'cc', 'd']
+ * a.sort_by! {|element| element.size }
+ * a # => ["d", "cc", "bbb", "aaaa"]
*
- * If no block is given, an Enumerator is returned instead.
+ * For duplicate values returned by the block, the ordering is indeterminate, and may be unstable.
*
+ * With no block given, returns a new Enumerator.
+ *
+ * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
static VALUE
@@ -2678,31 +3723,32 @@ rb_ary_sort_by_bang(VALUE ary)
RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
rb_ary_modify(ary);
- sorted = rb_block_call(ary, rb_intern("sort_by"), 0, 0, sort_by_i, 0);
- rb_ary_replace(ary, sorted);
+ if (RARRAY_LEN(ary) > 1) {
+ sorted = rb_block_call(ary, rb_intern("sort_by"), 0, 0, sort_by_i, 0);
+ rb_ary_replace(ary, sorted);
+ }
return ary;
}
/*
* call-seq:
- * ary.collect { |item| block } -> new_ary
- * ary.map { |item| block } -> new_ary
- * ary.collect -> Enumerator
- * ary.map -> Enumerator
- *
- * Invokes the given block once for each element of +self+.
+ * collect {|element| ... } -> new_array
+ * collect -> new_enumerator
+ * map {|element| ... } -> new_array
+ * map -> new_enumerator
*
- * Creates a new array containing the values returned by the block.
+ * With a block given, calls the block with each element of +self+;
+ * returns a new array whose elements are the return values from the block:
*
- * See also Enumerable#collect.
+ * a = [:foo, 'bar', 2]
+ * a1 = a.map {|element| element.class }
+ * a1 # => [Symbol, String, Integer]
*
- * If no block is given, an Enumerator is returned instead.
+ * With no block given, returns a new Enumerator.
*
- * a = [ "a", "b", "c", "d" ]
- * a.collect { |x| x + "!" } #=> ["a!", "b!", "c!", "d!"]
- * a.map.with_index { |x, i| x * i } #=> ["", "b", "cc", "ddd"]
- * a #=> ["a", "b", "c", "d"]
+ * Related: #collect!;
+ * see also {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting].
*/
static VALUE
@@ -2714,7 +3760,7 @@ rb_ary_collect(VALUE ary)
RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
collect = rb_ary_new2(RARRAY_LEN(ary));
for (i = 0; i < RARRAY_LEN(ary); i++) {
- rb_ary_push(collect, rb_yield(RARRAY_AREF(ary, i)));
+ rb_ary_push(collect, rb_yield(RARRAY_AREF(ary, i)));
}
return collect;
}
@@ -2722,23 +3768,22 @@ rb_ary_collect(VALUE ary)
/*
* call-seq:
- * ary.collect! {|item| block } -> ary
- * ary.map! {|item| block } -> ary
- * ary.collect! -> Enumerator
- * ary.map! -> Enumerator
+ * collect! {|element| ... } -> self
+ * collect! -> new_enumerator
+ * map! {|element| ... } -> self
+ * map! -> new_enumerator
*
- * Invokes the given block once for each element of +self+, replacing the
- * element with the value returned by the block.
+ * With a block given, calls the block with each element of +self+
+ * and replaces the element with the block's return value;
+ * returns +self+:
*
- * See also Enumerable#collect.
+ * a = [:foo, 'bar', 2]
+ * a.map! { |element| element.class } # => [Symbol, String, Integer]
*
- * If no block is given, an Enumerator is returned instead.
+ * With no block given, returns a new Enumerator.
*
- * a = [ "a", "b", "c", "d" ]
- * a.map! {|x| x + "!" }
- * a #=> [ "a!", "b!", "c!", "d!" ]
- * a.collect!.with_index {|x, i| x[0...i] }
- * a #=> ["", "b", "c!", "d!"]
+ * Related: #collect;
+ * see also {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting].
*/
static VALUE
@@ -2749,7 +3794,7 @@ rb_ary_collect_bang(VALUE ary)
RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
rb_ary_modify(ary);
for (i = 0; i < RARRAY_LEN(ary); i++) {
- rb_ary_store(ary, i, rb_yield(RARRAY_AREF(ary, i)));
+ rb_ary_store(ary, i, rb_yield(RARRAY_AREF(ary, i)));
}
return ary;
}
@@ -2761,66 +3806,190 @@ rb_get_values_at(VALUE obj, long olen, int argc, const VALUE *argv, VALUE (*func
long beg, len, i, j;
for (i=0; i<argc; i++) {
- if (FIXNUM_P(argv[i])) {
- rb_ary_push(result, (*func)(obj, FIX2LONG(argv[i])));
- continue;
- }
- /* check if idx is Range */
- if (rb_range_beg_len(argv[i], &beg, &len, olen, 1)) {
- long end = olen < beg+len ? olen : beg+len;
- for (j = beg; j < end; j++) {
- rb_ary_push(result, (*func)(obj, j));
- }
- if (beg + len > j)
- rb_ary_resize(result, RARRAY_LEN(result) + (beg + len) - j);
- continue;
- }
- rb_ary_push(result, (*func)(obj, NUM2LONG(argv[i])));
+ if (FIXNUM_P(argv[i])) {
+ rb_ary_push(result, (*func)(obj, FIX2LONG(argv[i])));
+ continue;
+ }
+ /* check if idx is Range */
+ if (rb_range_beg_len(argv[i], &beg, &len, olen, 1)) {
+ long end = olen < beg+len ? olen : beg+len;
+ for (j = beg; j < end; j++) {
+ rb_ary_push(result, (*func)(obj, j));
+ }
+ if (beg + len > j)
+ rb_ary_resize(result, RARRAY_LEN(result) + (beg + len) - j);
+ continue;
+ }
+ rb_ary_push(result, (*func)(obj, NUM2LONG(argv[i])));
}
return result;
}
+static VALUE
+append_values_at_single(VALUE result, VALUE ary, long olen, VALUE idx)
+{
+ long beg, len;
+ if (FIXNUM_P(idx)) {
+ beg = FIX2LONG(idx);
+ }
+ /* check if idx is Range */
+ else if (rb_range_beg_len(idx, &beg, &len, olen, 1)) {
+ if (len > 0) {
+ const VALUE *const src = RARRAY_CONST_PTR(ary);
+ const long end = beg + len;
+ const long prevlen = RARRAY_LEN(result);
+ if (beg < olen) {
+ rb_ary_cat(result, src + beg, end > olen ? olen-beg : len);
+ }
+ if (end > olen) {
+ rb_ary_store(result, prevlen + len - 1, Qnil);
+ }
+ }
+ return result;
+ }
+ else {
+ beg = NUM2LONG(idx);
+ }
+ return rb_ary_push(result, rb_ary_entry(ary, beg));
+}
+
/*
* call-seq:
- * ary.values_at(selector, ...) -> new_ary
+ * values_at(*specifiers) -> new_array
+ *
+ * Returns elements from +self+ in a new array; does not modify +self+.
+ *
+ * The objects included in the returned array are the elements of +self+
+ * selected by the given +specifiers+,
+ * each of which must be a numeric index or a Range.
+ *
+ * In brief:
+ *
+ * a = ['a', 'b', 'c', 'd']
+ *
+ * # Index specifiers.
+ * a.values_at(2, 0, 2, 0) # => ["c", "a", "c", "a"] # May repeat.
+ * a.values_at(-4, -3, -2, -1) # => ["a", "b", "c", "d"] # Counts backwards if negative.
+ * a.values_at(-50, 50) # => [nil, nil] # Outside of self.
+ *
+ * # Range specifiers.
+ * a.values_at(1..3) # => ["b", "c", "d"] # From range.begin to range.end.
+ * a.values_at(1...3) # => ["b", "c"] # End excluded.
+ * a.values_at(3..1) # => [] # No such elements.
+ *
+ * a.values_at(-3..3) # => ["b", "c", "d"] # Negative range.begin counts backwards.
+ * a.values_at(-50..3) # Raises RangeError.
+ *
+ * a.values_at(1..-2) # => ["b", "c"] # Negative range.end counts backwards.
+ * a.values_at(1..-50) # => [] # No such elements.
+ *
+ * # Mixture of specifiers.
+ * a.values_at(2..3, 3, 0..1, 0) # => ["c", "d", "d", "a", "b", "a"]
+ *
+ * With no +specifiers+ given, returns a new empty array:
+ *
+ * a = ['a', 'b', 'c', 'd']
+ * a.values_at # => []
+ *
+ * For each numeric specifier +index+, includes an element:
+ *
+ * - For each non-negative numeric specifier +index+ that is in-range (less than <tt>self.size</tt>),
+ * includes the element at offset +index+:
+ *
+ * a.values_at(0, 2) # => ["a", "c"]
+ * a.values_at(0.1, 2.9) # => ["a", "c"]
+ *
+ * - For each negative numeric +index+ that is in-range (greater than or equal to <tt>- self.size</tt>),
+ * counts backwards from the end of +self+:
+ *
+ * a.values_at(-1, -4) # => ["d", "a"]
+ *
+ * The given indexes may be in any order, and may repeat:
+ *
+ * a.values_at(2, 0, 1, 0, 2) # => ["c", "a", "b", "a", "c"]
+ *
+ * For each +index+ that is out-of-range, includes +nil+:
+ *
+ * a.values_at(4, -5) # => [nil, nil]
+ *
+ * For each Range specifier +range+, includes elements
+ * according to <tt>range.begin</tt> and <tt>range.end</tt>:
+ *
+ * - If both <tt>range.begin</tt> and <tt>range.end</tt>
+ * are non-negative and in-range (less than <tt>self.size</tt>),
+ * includes elements from index <tt>range.begin</tt>
+ * through <tt>range.end - 1</tt> (if <tt>range.exclude_end?</tt>),
+ * or through <tt>range.end</tt> (otherwise):
+ *
+ * a.values_at(1..2) # => ["b", "c"]
+ * a.values_at(1...2) # => ["b"]
+ *
+ * - If <tt>range.begin</tt> is negative and in-range (greater than or equal to <tt>- self.size</tt>),
+ * counts backwards from the end of +self+:
+ *
+ * a.values_at(-2..3) # => ["c", "d"]
+ *
+ * - If <tt>range.begin</tt> is negative and out-of-range, raises an exception:
+ *
+ * a.values_at(-5..3) # Raises RangeError.
+ *
+ * - If <tt>range.end</tt> is positive and out-of-range,
+ * extends the returned array with +nil+ elements:
+ *
+ * a.values_at(1..5) # => ["b", "c", "d", nil, nil]
+ *
+ * - If <tt>range.end</tt> is negative and in-range,
+ * counts backwards from the end of +self+:
+ *
+ * a.values_at(1..-2) # => ["b", "c"]
+ *
+ * - If <tt>range.end</tt> is negative and out-of-range,
+ * returns an empty array:
*
- * Returns an array containing the elements in +self+ corresponding to the
- * given +selector+(s).
+ * a.values_at(1..-5) # => []
*
- * The selectors may be either integer indices or ranges.
+ * The given ranges may be in any order and may repeat:
*
- * See also Array#select.
+ * a.values_at(2..3, 0..1, 2..3) # => ["c", "d", "a", "b", "c", "d"]
*
- * a = %w{ a b c d e f }
- * a.values_at(1, 3, 5) # => ["b", "d", "f"]
- * a.values_at(1, 3, 5, 7) # => ["b", "d", "f", nil]
- * a.values_at(-1, -2, -2, -7) # => ["f", "e", "e", nil]
- * a.values_at(4..6, 3...6) # => ["e", "f", nil, "d", "e", "f"]
+ * The given specifiers may be any mixture of indexes and ranges:
+ *
+ * a.values_at(3, 1..2, 0, 2..3) # => ["d", "b", "c", "a", "c", "d"]
+ *
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
static VALUE
rb_ary_values_at(int argc, VALUE *argv, VALUE ary)
{
- return rb_get_values_at(ary, RARRAY_LEN(ary), argc, argv, rb_ary_entry);
+ long i, olen = RARRAY_LEN(ary);
+ VALUE result = rb_ary_new_capa(argc);
+ for (i = 0; i < argc; ++i) {
+ append_values_at_single(result, ary, olen, argv[i]);
+ }
+ RB_GC_GUARD(ary);
+ return result;
}
/*
* call-seq:
- * ary.select { |item| block } -> new_ary
- * ary.select -> Enumerator
+ * select {|element| ... } -> new_array
+ * select -> new_enumerator
+ * filter {|element| ... } -> new_array
+ * filter -> new_enumerator
*
- * Returns a new array containing all elements of +ary+
- * for which the given +block+ returns a true value.
+ * With a block given, calls the block with each element of +self+;
+ * returns a new array containing those elements of +self+
+ * for which the block returns a truthy value:
*
- * If no block is given, an Enumerator is returned instead.
+ * a = [:foo, 'bar', 2, :bam]
+ * a.select {|element| element.to_s.start_with?('b') }
+ * # => ["bar", :bam]
*
- * [1,2,3,4,5].select { |num| num.even? } #=> [2, 4]
+ * With no block given, returns a new Enumerator.
*
- * a = %w{ a b c d e f }
- * a.select { |v| v =~ /[aeiou]/ } #=> ["a", "e"]
- *
- * See also Enumerable#select.
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
static VALUE
@@ -2832,9 +4001,9 @@ rb_ary_select(VALUE ary)
RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
result = rb_ary_new2(RARRAY_LEN(ary));
for (i = 0; i < RARRAY_LEN(ary); i++) {
- if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) {
- rb_ary_push(result, rb_ary_elt(ary, i));
- }
+ if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) {
+ rb_ary_push(result, rb_ary_elt(ary, i));
+ }
}
return result;
}
@@ -2852,12 +4021,12 @@ select_bang_i(VALUE a)
long i1, i2;
for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); arg->len[0] = ++i1) {
- VALUE v = RARRAY_AREF(ary, i1);
- if (!RTEST(rb_yield(v))) continue;
- if (i1 != i2) {
- rb_ary_store(ary, i2, v);
- }
- arg->len[1] = ++i2;
+ VALUE v = RARRAY_AREF(ary, i1);
+ if (!RTEST(rb_yield(v))) continue;
+ if (i1 != i2) {
+ rb_ary_store(ary, i2, v);
+ }
+ arg->len[1] = ++i2;
}
return (i1 == i2) ? Qnil : ary;
}
@@ -2870,33 +4039,40 @@ select_bang_ensure(VALUE a)
long len = RARRAY_LEN(ary);
long i1 = arg->len[0], i2 = arg->len[1];
- if (i2 < i1) {
- if (i1 < len) {
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr + i2, ptr + i1, VALUE, len - i1);
- });
- }
- ARY_SET_LEN(ary, len - i1 + i2);
+ if (i2 < len && i2 < i1) {
+ long tail = 0;
+ rb_ary_modify(ary);
+ if (i1 < len) {
+ tail = len - i1;
+ RARRAY_PTR_USE(ary, ptr, {
+ MEMMOVE(ptr + i2, ptr + i1, VALUE, tail);
+ });
+ }
+ ARY_SET_LEN(ary, i2 + tail);
}
return ary;
}
/*
* call-seq:
- * ary.select! {|item| block } -> ary or nil
- * ary.select! -> Enumerator
+ * select! {|element| ... } -> self or nil
+ * select! -> new_enumerator
+ * filter! {|element| ... } -> self or nil
+ * filter! -> new_enumerator
*
- * Invokes the given block passing in successive elements from +self+,
- * deleting elements for which the block returns a +false+ value.
+ * With a block given, calls the block with each element of +self+;
+ * removes from +self+ those elements for which the block returns +false+ or +nil+.
*
- * The array may not be changed instantly every time the block is called.
+ * Returns +self+ if any elements were removed:
*
- * If changes were made, it will return +self+, otherwise it returns +nil+.
+ * a = [:foo, 'bar', 2, :bam]
+ * a.select! {|element| element.to_s.start_with?('b') } # => ["bar", :bam]
*
- * See also Array#keep_if
+ * Returns +nil+ if no elements were removed.
*
- * If no block is given, an Enumerator is returned instead.
+ * With no block given, returns a new Enumerator.
*
+ * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
*/
static VALUE
@@ -2914,18 +4090,18 @@ rb_ary_select_bang(VALUE ary)
/*
* call-seq:
- * ary.keep_if { |item| block } -> ary
- * ary.keep_if -> Enumerator
+ * keep_if {|element| ... } -> self
+ * keep_if -> new_enumerator
*
- * Deletes every element of +self+ for which the given block evaluates to
- * +false+.
+ * With a block given, calls the block with each element of +self+;
+ * removes the element from +self+ if the block does not return a truthy value:
*
- * See also Array#select!
+ * a = [:foo, 'bar', 2, :bam]
+ * a.keep_if {|element| element.to_s.start_with?('b') } # => ["bar", :bam]
*
- * If no block is given, an Enumerator is returned instead.
+ * With no block given, returns a new Enumerator.
*
- * a = %w{ a b c d e f }
- * a.keep_if { |v| v =~ /[aeiou]/ } #=> ["a", "e"]
+ * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
*/
static VALUE
@@ -2941,32 +4117,49 @@ ary_resize_smaller(VALUE ary, long len)
{
rb_ary_modify(ary);
if (RARRAY_LEN(ary) > len) {
- ARY_SET_LEN(ary, len);
- if (len * 2 < ARY_CAPA(ary) &&
- ARY_CAPA(ary) > ARY_DEFAULT_SIZE) {
- ary_resize_capa(ary, len * 2);
- }
+ ARY_SET_LEN(ary, len);
+ if (len * 2 < ARY_CAPA(ary) &&
+ ARY_CAPA(ary) > ARY_DEFAULT_SIZE) {
+ ary_resize_capa(ary, len * 2);
+ }
}
}
/*
* call-seq:
- * ary.delete(obj) -> item or nil
- * ary.delete(obj) { block } -> item or result of block
+ * delete(object) -> last_removed_object
+ * delete(object) {|element| ... } -> last_removed_object or block_return
+ *
+ * Removes zero or more elements from +self+.
+ *
+ * With no block given,
+ * removes from +self+ each element +ele+ such that <tt>ele == object</tt>;
+ * returns the last removed element:
+ *
+ * a = [0, 1, 2, 2.0]
+ * a.delete(2) # => 2.0
+ * a # => [0, 1]
+ *
+ * Returns +nil+ if no elements removed:
+ *
+ * a.delete(2) # => nil
+ *
+ * With a block given,
+ * removes from +self+ each element +ele+ such that <tt>ele == object</tt>.
*
- * Deletes all items from +self+ that are equal to +obj+.
+ * If any such elements are found, ignores the block
+ * and returns the last removed element:
*
- * Returns the last deleted item, or +nil+ if no matching item is found.
+ * a = [0, 1, 2, 2.0]
+ * a.delete(2) {|element| fail 'Cannot happen' } # => 2.0
+ * a # => [0, 1]
*
- * If the optional code block is given, the result of the block is returned if
- * the item is not found. (To remove +nil+ elements and get an informative
- * return value, use Array#compact!)
+ * If no such element is found, returns the block's return value:
*
- * a = [ "a", "b", "b", "b", "c" ]
- * a.delete("b") #=> "b"
- * a #=> ["a", "c"]
- * a.delete("z") #=> nil
- * a.delete("z") { "not found" } #=> "not found"
+ * a.delete(2) {|element| "Element #{element} not found." }
+ * # => "Element 2 not found."
+ *
+ * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
*/
VALUE
@@ -2976,26 +4169,27 @@ rb_ary_delete(VALUE ary, VALUE item)
long i1, i2;
for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
- VALUE e = RARRAY_AREF(ary, i1);
+ VALUE e = RARRAY_AREF(ary, i1);
- if (rb_equal(e, item)) {
- v = e;
- continue;
- }
- if (i1 != i2) {
- rb_ary_store(ary, i2, e);
- }
- i2++;
+ if (rb_equal(e, item)) {
+ v = e;
+ continue;
+ }
+ if (i1 != i2) {
+ rb_ary_store(ary, i2, e);
+ }
+ i2++;
}
if (RARRAY_LEN(ary) == i2) {
- if (rb_block_given_p()) {
- return rb_yield(item);
- }
- return Qnil;
+ if (rb_block_given_p()) {
+ return rb_yield(item);
+ }
+ return Qnil;
}
ary_resize_smaller(ary, i2);
+ ary_verify(ary);
return v;
}
@@ -3005,18 +4199,18 @@ rb_ary_delete_same(VALUE ary, VALUE item)
long i1, i2;
for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
- VALUE e = RARRAY_AREF(ary, i1);
+ VALUE e = RARRAY_AREF(ary, i1);
- if (e == item) {
- continue;
- }
- if (i1 != i2) {
- rb_ary_store(ary, i2, e);
- }
- i2++;
+ if (e == item) {
+ continue;
+ }
+ if (i1 != i2) {
+ rb_ary_store(ary, i2, e);
+ }
+ i2++;
}
if (RARRAY_LEN(ary) == i2) {
- return;
+ return;
}
ary_resize_smaller(ary, i2);
@@ -3030,33 +4224,46 @@ rb_ary_delete_at(VALUE ary, long pos)
if (pos >= len) return Qnil;
if (pos < 0) {
- pos += len;
- if (pos < 0) return Qnil;
+ pos += len;
+ if (pos < 0) return Qnil;
}
rb_ary_modify(ary);
del = RARRAY_AREF(ary, pos);
RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr+pos, ptr+pos+1, VALUE, len-pos-1);
+ MEMMOVE(ptr+pos, ptr+pos+1, VALUE, len-pos-1);
});
ARY_INCREASE_LEN(ary, -1);
-
+ ary_verify(ary);
return del;
}
/*
* call-seq:
- * ary.delete_at(index) -> obj or nil
+ * delete_at(index) -> removed_object or nil
+ *
+ * Removes the element of +self+ at the given +index+, which must be an
+ * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects].
+ *
+ * When +index+ is non-negative, deletes the element at offset +index+:
+ *
+ * a = [:foo, 'bar', 2]
+ * a.delete_at(1) # => "bar"
+ * a # => [:foo, 2]
*
- * Deletes the element at the specified +index+, returning that element, or
- * +nil+ if the +index+ is out of range.
+ * When +index+ is negative, counts backward from the end of the array:
*
- * See also Array#slice!
+ * a = [:foo, 'bar', 2]
+ * a.delete_at(-2) # => "bar"
+ * a # => [:foo, 2]
*
- * a = ["ant", "bat", "cat", "dog"]
- * a.delete_at(2) #=> "cat"
- * a #=> ["ant", "bat", "dog"]
- * a.delete_at(99) #=> nil
+ * When +index+ is out of range, returns +nil+.
+ *
+ * a = [:foo, 'bar', 2]
+ * a.delete_at(3) # => nil
+ * a.delete_at(-4) # => nil
+ *
+ * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
*/
static VALUE
@@ -3065,73 +4272,156 @@ rb_ary_delete_at_m(VALUE ary, VALUE pos)
return rb_ary_delete_at(ary, NUM2LONG(pos));
}
+static VALUE
+ary_slice_bang_by_rb_ary_splice(VALUE ary, long pos, long len)
+{
+ const long orig_len = RARRAY_LEN(ary);
+
+ if (len < 0) {
+ return Qnil;
+ }
+ else if (pos < -orig_len) {
+ return Qnil;
+ }
+ else if (pos < 0) {
+ pos += orig_len;
+ }
+ else if (orig_len < pos) {
+ return Qnil;
+ }
+ if (orig_len < pos + len) {
+ len = orig_len - pos;
+ }
+ if (len == 0) {
+ return rb_ary_new2(0);
+ }
+ else {
+ VALUE arg2 = rb_ary_new4(len, RARRAY_CONST_PTR(ary)+pos);
+ rb_ary_splice(ary, pos, len, 0, 0);
+ return arg2;
+ }
+}
+
/*
* call-seq:
- * ary.slice!(index) -> obj or nil
- * ary.slice!(start, length) -> new_ary or nil
- * ary.slice!(range) -> new_ary or nil
- *
- * Deletes the element(s) given by an +index+ (optionally up to +length+
- * elements) or by a +range+.
- *
- * Returns the deleted object (or objects), or +nil+ if the +index+ is out of
- * range.
- *
- * a = [ "a", "b", "c" ]
- * a.slice!(1) #=> "b"
- * a #=> ["a", "c"]
- * a.slice!(-1) #=> "c"
- * a #=> ["a"]
- * a.slice!(100) #=> nil
- * a #=> ["a"]
+ * slice!(index) -> object or nil
+ * slice!(start, length) -> new_array or nil
+ * slice!(range) -> new_array or nil
+ *
+ * Removes and returns elements from +self+.
+ *
+ * With numeric argument +index+ given,
+ * removes and returns the element at offset +index+:
+ *
+ * a = ['a', 'b', 'c', 'd']
+ * a.slice!(2) # => "c"
+ * a # => ["a", "b", "d"]
+ * a.slice!(2.1) # => "d"
+ * a # => ["a", "b"]
+ *
+ * If +index+ is negative, counts backwards from the end of +self+:
+ *
+ * a = ['a', 'b', 'c', 'd']
+ * a.slice!(-2) # => "c"
+ * a # => ["a", "b", "d"]
+ *
+ * If +index+ is out of range, returns +nil+.
+ *
+ * With numeric arguments +start+ and +length+ given,
+ * removes +length+ elements from +self+ beginning at zero-based offset +start+;
+ * returns the removed objects in a new array:
+ *
+ * a = ['a', 'b', 'c', 'd']
+ * a.slice!(1, 2) # => ["b", "c"]
+ * a # => ["a", "d"]
+ * a.slice!(0.1, 1.1) # => ["a"]
+ * a # => ["d"]
+ *
+ * If +start+ is negative, counts backwards from the end of +self+:
+ *
+ * a = ['a', 'b', 'c', 'd']
+ * a.slice!(-2, 1) # => ["c"]
+ * a # => ["a", "b", "d"]
+ *
+ * If +start+ is out-of-range, returns +nil+:
+ *
+ * a = ['a', 'b', 'c', 'd']
+ * a.slice!(5, 1) # => nil
+ * a.slice!(-5, 1) # => nil
+ *
+ * If <tt>start + length</tt> exceeds the array size,
+ * removes and returns all elements from offset +start+ to the end:
+ *
+ * a = ['a', 'b', 'c', 'd']
+ * a.slice!(2, 50) # => ["c", "d"]
+ * a # => ["a", "b"]
+ *
+ * If <tt>start == a.size</tt> and +length+ is non-negative,
+ * returns a new empty array.
+ *
+ * If +length+ is negative, returns +nil+.
+ *
+ * With Range argument +range+ given,
+ * treats <tt>range.min</tt> as +start+ (as above)
+ * and <tt>range.size</tt> as +length+ (as above):
+ *
+ * a = ['a', 'b', 'c', 'd']
+ * a.slice!(1..2) # => ["b", "c"]
+ * a # => ["a", "d"]
+ *
+ * If <tt>range.start == a.size</tt>, returns a new empty array:
+ *
+ * a = ['a', 'b', 'c', 'd']
+ * a.slice!(4..5) # => []
+ *
+ * If <tt>range.start</tt> is larger than the array size, returns +nil+:
+ *
+ * a = ['a', 'b', 'c', 'd']
+ a.slice!(5..6) # => nil
+ *
+ * If <tt>range.start</tt> is negative,
+ * calculates the start index by counting backwards from the end of +self+:
+ *
+ * a = ['a', 'b', 'c', 'd']
+ * a.slice!(-2..2) # => ["c"]
+ *
+ * If <tt>range.end</tt> is negative,
+ * calculates the end index by counting backwards from the end of +self+:
+ *
+ * a = ['a', 'b', 'c', 'd']
+ * a.slice!(0..-2) # => ["a", "b", "c"]
+ *
+ * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
*/
static VALUE
rb_ary_slice_bang(int argc, VALUE *argv, VALUE ary)
{
- VALUE arg1, arg2;
- long pos, len, orig_len;
+ VALUE arg1;
+ long pos, len;
rb_ary_modify_check(ary);
+ rb_check_arity(argc, 1, 2);
+ arg1 = argv[0];
+
if (argc == 2) {
- pos = NUM2LONG(argv[0]);
- len = NUM2LONG(argv[1]);
- delete_pos_len:
- if (len < 0) return Qnil;
- orig_len = RARRAY_LEN(ary);
- if (pos < 0) {
- pos += orig_len;
- if (pos < 0) return Qnil;
- }
- else if (orig_len < pos) return Qnil;
- if (orig_len < pos + len) {
- len = orig_len - pos;
- }
- if (len == 0) return rb_ary_new2(0);
- arg2 = rb_ary_new4(len, RARRAY_CONST_PTR(ary)+pos);
- RBASIC_SET_CLASS(arg2, rb_obj_class(ary));
- rb_ary_splice(ary, pos, len, Qundef);
- return arg2;
- }
-
- if (argc != 1) {
- /* error report */
- rb_scan_args(argc, argv, "11", NULL, NULL);
+ pos = NUM2LONG(argv[0]);
+ len = NUM2LONG(argv[1]);
+ return ary_slice_bang_by_rb_ary_splice(ary, pos, len);
}
- arg1 = argv[0];
if (!FIXNUM_P(arg1)) {
- switch (rb_range_beg_len(arg1, &pos, &len, RARRAY_LEN(ary), 0)) {
- case Qtrue:
- /* valid range */
- goto delete_pos_len;
- case Qnil:
- /* invalid range */
- return Qnil;
- default:
- /* not a range */
- break;
- }
+ switch (rb_range_beg_len(arg1, &pos, &len, RARRAY_LEN(ary), 0)) {
+ case Qtrue:
+ /* valid range */
+ return ary_slice_bang_by_rb_ary_splice(ary, pos, len);
+ case Qnil:
+ /* invalid range */
+ return Qnil;
+ default:
+ /* not a range */
+ break;
+ }
}
return rb_ary_delete_at(ary, NUM2LONG(arg1));
@@ -3143,10 +4433,11 @@ ary_reject(VALUE orig, VALUE result)
long i;
for (i = 0; i < RARRAY_LEN(orig); i++) {
- VALUE v = RARRAY_AREF(orig, i);
- if (!RTEST(rb_yield(v))) {
- rb_ary_push(result, v);
- }
+ VALUE v = RARRAY_AREF(orig, i);
+
+ if (!RTEST(rb_yield(v))) {
+ rb_ary_push(result, v);
+ }
}
return result;
}
@@ -3159,12 +4450,12 @@ reject_bang_i(VALUE a)
long i1, i2;
for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); arg->len[0] = ++i1) {
- VALUE v = RARRAY_AREF(ary, i1);
- if (RTEST(rb_yield(v))) continue;
- if (i1 != i2) {
- rb_ary_store(ary, i2, v);
- }
- arg->len[1] = ++i2;
+ VALUE v = RARRAY_AREF(ary, i1);
+ if (RTEST(rb_yield(v))) continue;
+ if (i1 != i2) {
+ rb_ary_store(ary, i2, v);
+ }
+ arg->len[1] = ++i2;
}
return (i1 == i2) ? Qnil : ary;
}
@@ -3173,7 +4464,6 @@ static VALUE
ary_reject_bang(VALUE ary)
{
struct select_bang_arg args;
-
rb_ary_modify_check(ary);
args.ary = ary;
args.len[0] = args.len[1] = 0;
@@ -3182,37 +4472,47 @@ ary_reject_bang(VALUE ary)
/*
* call-seq:
- * ary.reject! { |item| block } -> ary or nil
- * ary.reject! -> Enumerator
+ * reject! {|element| ... } -> self or nil
+ * reject! -> new_enumerator
+ *
+ * With a block given, calls the block with each element of +self+;
+ * removes each element for which the block returns a truthy value.
+ *
+ * Returns +self+ if any elements removed:
*
- * Deletes every element of +self+ for which the block evaluates to +true+,
- * if no changes were made returns +nil+.
+ * a = [:foo, 'bar', 2, 'bat']
+ * a.reject! {|element| element.to_s.start_with?('b') } # => [:foo, 2]
*
- * The array may not be changed instantly every time the block is called.
+ * Returns +nil+ if no elements removed.
*
- * See also Enumerable#reject and Array#delete_if.
+ * With no block given, returns a new Enumerator.
*
- * If no block is given, an Enumerator is returned instead.
+ * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
*/
static VALUE
rb_ary_reject_bang(VALUE ary)
{
RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ rb_ary_modify(ary);
return ary_reject_bang(ary);
}
/*
* call-seq:
- * ary.reject {|item| block } -> new_ary
- * ary.reject -> Enumerator
+ * reject {|element| ... } -> new_array
+ * reject -> new_enumerator
+ *
+ * With a block given, returns a new array whose elements are all those from +self+
+ * for which the block returns +false+ or +nil+:
*
- * Returns a new array containing the items in +self+ for which the given
- * block is not +true+. The ordering of non-rejected elements is maintained.
+ * a = [:foo, 'bar', 2, 'bat']
+ * a1 = a.reject {|element| element.to_s.start_with?('b') }
+ * a1 # => [:foo, 2]
*
- * See also Array#delete_if
+ * With no block given, returns a new Enumerator.
*
- * If no block is given, an Enumerator is returned instead.
+ * Related: {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
static VALUE
@@ -3228,25 +4528,25 @@ rb_ary_reject(VALUE ary)
/*
* call-seq:
- * ary.delete_if { |item| block } -> ary
- * ary.delete_if -> Enumerator
- *
- * Deletes every element of +self+ for which block evaluates to +true+.
+ * delete_if {|element| ... } -> self
+ * delete_if -> new_numerator
*
- * The array is changed instantly every time the block is called, not after
- * the iteration is over.
+ * With a block given, calls the block with each element of +self+;
+ * removes the element if the block returns a truthy value;
+ * returns +self+:
*
- * See also Array#reject!
+ * a = [:foo, 'bar', 2, 'bat']
+ * a.delete_if {|element| element.to_s.start_with?('b') } # => [:foo, 2]
*
- * If no block is given, an Enumerator is returned instead.
+ * With no block given, returns a new Enumerator.
*
- * scores = [ 97, 42, 75 ]
- * scores.delete_if {|score| score < 80 } #=> [97]
+ * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
*/
static VALUE
rb_ary_delete_if(VALUE ary)
{
+ ary_verify(ary);
RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
ary_reject_bang(ary);
return ary;
@@ -3256,9 +4556,9 @@ static VALUE
take_i(RB_BLOCK_CALL_FUNC_ARGLIST(val, cbarg))
{
VALUE *args = (VALUE *)cbarg;
- if (args[1]-- == 0) rb_iter_break();
if (argc > 1) val = rb_ary_new4(argc, argv);
rb_ary_push(args[0], val);
+ if (--args[1] == 0) rb_iter_break();
return Qnil;
}
@@ -3268,38 +4568,108 @@ take_items(VALUE obj, long n)
VALUE result = rb_check_array_type(obj);
VALUE args[2];
+ if (n == 0) return result;
if (!NIL_P(result)) return rb_ary_subseq(result, 0, n);
result = rb_ary_new2(n);
args[0] = result; args[1] = (VALUE)n;
- if (rb_check_block_call(obj, idEach, 0, 0, take_i, (VALUE)args) == Qundef)
- rb_raise(rb_eTypeError, "wrong argument type %"PRIsVALUE" (must respond to :each)",
- rb_obj_class(obj));
+ if (UNDEF_P(rb_check_block_call(obj, idEach, 0, 0, take_i, (VALUE)args)))
+ rb_raise(rb_eTypeError, "wrong argument type %"PRIsVALUE" (must respond to :each)",
+ rb_obj_class(obj));
return result;
}
/*
* call-seq:
- * ary.zip(arg, ...) -> new_ary
- * ary.zip(arg, ...) { |arr| block } -> nil
- *
- * Converts any arguments to arrays, then merges elements of +self+ with
- * corresponding elements from each argument.
- *
- * This generates a sequence of <code>ary.size</code> _n_-element arrays,
- * where _n_ is one more than the count of arguments.
- *
- * If the size of any argument is less than the size of the initial array,
- * +nil+ values are supplied.
- *
- * If a block is given, it is invoked for each output +array+, otherwise an
- * array of arrays is returned.
- *
- * a = [ 4, 5, 6 ]
- * b = [ 7, 8, 9 ]
- * [1, 2, 3].zip(a, b) #=> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
- * [1, 2].zip(a, b) #=> [[1, 4, 7], [2, 5, 8]]
- * a.zip([1, 2], [8]) #=> [[4, 1, 8], [5, 2, nil], [6, nil, nil]]
+ * zip(*other_arrays) -> new_array
+ * zip(*other_arrays) {|sub_array| ... } -> nil
+ *
+ * With no block given, combines +self+ with the collection of +other_arrays+;
+ * returns a new array of sub-arrays:
+ *
+ * [0, 1].zip(['zero', 'one'], [:zero, :one])
+ * # => [[0, "zero", :zero], [1, "one", :one]]
+ *
+ * Returned:
+ *
+ * - The outer array is of size <tt>self.size</tt>.
+ * - Each sub-array is of size <tt>other_arrays.size + 1</tt>.
+ * - The _nth_ sub-array contains (in order):
+ *
+ * - The _nth_ element of +self+.
+ * - The _nth_ element of each of the other arrays, as available.
+ *
+ * Example:
+ *
+ * a = [0, 1]
+ * zipped = a.zip(['zero', 'one'], [:zero, :one])
+ * # => [[0, "zero", :zero], [1, "one", :one]]
+ * zipped.size # => 2 # Same size as a.
+ * zipped.first.size # => 3 # Size of other arrays plus 1.
+ *
+ * When the other arrays are all the same size as +self+,
+ * the returned sub-arrays are a rearrangement containing exactly elements of all the arrays
+ * (including +self+), with no omissions or additions:
+ *
+ * a = [:a0, :a1, :a2, :a3]
+ * b = [:b0, :b1, :b2, :b3]
+ * c = [:c0, :c1, :c2, :c3]
+ * d = a.zip(b, c)
+ * pp d
+ * # =>
+ * [[:a0, :b0, :c0],
+ * [:a1, :b1, :c1],
+ * [:a2, :b2, :c2],
+ * [:a3, :b3, :c3]]
+ *
+ * When one of the other arrays is smaller than +self+,
+ * pads the corresponding sub-array with +nil+ elements:
+ *
+ * a = [:a0, :a1, :a2, :a3]
+ * b = [:b0, :b1, :b2]
+ * c = [:c0, :c1]
+ * d = a.zip(b, c)
+ * pp d
+ * # =>
+ * [[:a0, :b0, :c0],
+ * [:a1, :b1, :c1],
+ * [:a2, :b2, nil],
+ * [:a3, nil, nil]]
+ *
+ * When one of the other arrays is larger than +self+,
+ * _ignores_ its trailing elements:
+ *
+ * a = [:a0, :a1, :a2, :a3]
+ * b = [:b0, :b1, :b2, :b3, :b4]
+ * c = [:c0, :c1, :c2, :c3, :c4, :c5]
+ * d = a.zip(b, c)
+ * pp d
+ * # =>
+ * [[:a0, :b0, :c0],
+ * [:a1, :b1, :c1],
+ * [:a2, :b2, :c2],
+ * [:a3, :b3, :c3]]
+ *
+ * With a block given, calls the block with each of the other arrays;
+ * returns +nil+:
+ *
+ * d = []
+ * a = [:a0, :a1, :a2, :a3]
+ * b = [:b0, :b1, :b2, :b3]
+ * c = [:c0, :c1, :c2, :c3]
+ * a.zip(b, c) {|sub_array| d.push(sub_array.reverse) } # => nil
+ * pp d
+ * # =>
+ * [[:c0, :b0, :a0],
+ * [:c1, :b1, :a1],
+ * [:c2, :b2, :a2],
+ * [:c3, :b3, :a3]]
+ *
+ * For an *object* in *other_arrays* that is not actually an array,
+ * forms the "other array" as <tt>object.to_ary</tt>, if defined,
+ * or as <tt>object.each.to_a</tt> otherwise.
+ *
+ * Related: see {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting].
*/
static VALUE
@@ -3310,51 +4680,51 @@ rb_ary_zip(int argc, VALUE *argv, VALUE ary)
VALUE result = Qnil;
for (i=0; i<argc; i++) {
- argv[i] = take_items(argv[i], len);
+ argv[i] = take_items(argv[i], len);
}
if (rb_block_given_p()) {
- int arity = rb_block_arity();
-
- if (arity > 1) {
- VALUE work, *tmp;
-
- tmp = ALLOCV_N(VALUE, work, argc+1);
-
- for (i=0; i<RARRAY_LEN(ary); i++) {
- tmp[0] = RARRAY_AREF(ary, i);
- for (j=0; j<argc; j++) {
- tmp[j+1] = rb_ary_elt(argv[j], i);
- }
- rb_yield_values2(argc+1, tmp);
- }
-
- if (work) ALLOCV_END(work);
- }
- else {
- for (i=0; i<RARRAY_LEN(ary); i++) {
- VALUE tmp = rb_ary_new2(argc+1);
-
- rb_ary_push(tmp, RARRAY_AREF(ary, i));
- for (j=0; j<argc; j++) {
- rb_ary_push(tmp, rb_ary_elt(argv[j], i));
- }
- rb_yield(tmp);
- }
- }
+ int arity = rb_block_arity();
+
+ if (arity > 1) {
+ VALUE work, *tmp;
+
+ tmp = ALLOCV_N(VALUE, work, argc+1);
+
+ for (i=0; i<RARRAY_LEN(ary); i++) {
+ tmp[0] = RARRAY_AREF(ary, i);
+ for (j=0; j<argc; j++) {
+ tmp[j+1] = rb_ary_elt(argv[j], i);
+ }
+ rb_yield_values2(argc+1, tmp);
+ }
+
+ if (work) ALLOCV_END(work);
+ }
+ else {
+ for (i=0; i<RARRAY_LEN(ary); i++) {
+ VALUE tmp = rb_ary_new2(argc+1);
+
+ rb_ary_push(tmp, RARRAY_AREF(ary, i));
+ for (j=0; j<argc; j++) {
+ rb_ary_push(tmp, rb_ary_elt(argv[j], i));
+ }
+ rb_yield(tmp);
+ }
+ }
}
else {
- result = rb_ary_new_capa(len);
+ result = rb_ary_new_capa(len);
- for (i=0; i<len; i++) {
- VALUE tmp = rb_ary_new_capa(argc+1);
+ for (i=0; i<len; i++) {
+ VALUE tmp = rb_ary_new_capa(argc+1);
- rb_ary_push(tmp, RARRAY_AREF(ary, i));
- for (j=0; j<argc; j++) {
- rb_ary_push(tmp, rb_ary_elt(argv[j], i));
- }
- rb_ary_push(result, tmp);
- }
+ rb_ary_push(tmp, RARRAY_AREF(ary, i));
+ for (j=0; j<argc; j++) {
+ rb_ary_push(tmp, rb_ary_elt(argv[j], i));
+ }
+ rb_ary_push(result, tmp);
+ }
}
return result;
@@ -3362,15 +4732,17 @@ rb_ary_zip(int argc, VALUE *argv, VALUE ary)
/*
* call-seq:
- * ary.transpose -> new_ary
+ * transpose -> new_array
*
- * Assumes that +self+ is an array of arrays and transposes the rows and
- * columns.
+ * Returns a new array that is +self+
+ * as a {transposed matrix}[https://en.wikipedia.org/wiki/Transpose]:
*
- * a = [[1,2], [3,4], [5,6]]
- * a.transpose #=> [[1, 3, 5], [2, 4, 6]]
+ * a = [[:a0, :a1], [:b0, :b1], [:c0, :c1]]
+ * a.transpose # => [[:a0, :b0, :c0], [:a1, :b1, :c1]]
*
- * If the length of the subarrays don't match, an IndexError is raised.
+ * The elements of +self+ must all be the same size.
+ *
+ * Related: see {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting].
*/
static VALUE
@@ -3382,36 +4754,38 @@ rb_ary_transpose(VALUE ary)
alen = RARRAY_LEN(ary);
if (alen == 0) return rb_ary_dup(ary);
for (i=0; i<alen; i++) {
- tmp = to_ary(rb_ary_elt(ary, i));
- if (elen < 0) { /* first element */
- elen = RARRAY_LEN(tmp);
- result = rb_ary_new2(elen);
- for (j=0; j<elen; j++) {
- rb_ary_store(result, j, rb_ary_new2(alen));
- }
- }
- else if (elen != RARRAY_LEN(tmp)) {
- rb_raise(rb_eIndexError, "element size differs (%ld should be %ld)",
- RARRAY_LEN(tmp), elen);
- }
- for (j=0; j<elen; j++) {
- rb_ary_store(rb_ary_elt(result, j), i, rb_ary_elt(tmp, j));
- }
+ tmp = to_ary(rb_ary_elt(ary, i));
+ if (elen < 0) { /* first element */
+ elen = RARRAY_LEN(tmp);
+ result = rb_ary_new2(elen);
+ for (j=0; j<elen; j++) {
+ rb_ary_store(result, j, rb_ary_new2(alen));
+ }
+ }
+ else if (elen != RARRAY_LEN(tmp)) {
+ rb_raise(rb_eIndexError, "element size differs (%ld should be %ld)",
+ RARRAY_LEN(tmp), elen);
+ }
+ for (j=0; j<elen; j++) {
+ rb_ary_store(rb_ary_elt(result, j), i, rb_ary_elt(tmp, j));
+ }
}
return result;
}
/*
* call-seq:
- * ary.replace(other_ary) -> ary
- * ary.initialize_copy(other_ary) -> ary
+ * initialize_copy(other_array) -> self
+ * replace(other_array) -> self
*
- * Replaces the contents of +self+ with the contents of +other_ary+,
- * truncating or expanding if necessary.
+ * Replaces the elements of +self+ with the elements of +other_array+, which must be an
+ * {array-convertible object}[rdoc-ref:implicit_conversion.rdoc@Array-Convertible+Objects];
+ * returns +self+:
*
- * a = [ "a", "b", "c", "d", "e" ]
- * a.replace([ "x", "y", "z" ]) #=> ["x", "y", "z"]
- * a #=> ["x", "y", "z"]
+ * a = ['a', 'b', 'c'] # => ["a", "b", "c"]
+ * a.replace(['d', 'e']) # => ["d", "e"]
+ *
+ * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
VALUE
@@ -3421,183 +4795,330 @@ rb_ary_replace(VALUE copy, VALUE orig)
orig = to_ary(orig);
if (copy == orig) return copy;
- if (RARRAY_LEN(orig) <= RARRAY_EMBED_LEN_MAX) {
- VALUE shared = 0;
+ rb_ary_reset(copy);
- if (ARY_OWNS_HEAP_P(copy)) {
- RARRAY_PTR_USE(copy, ptr, ruby_sized_xfree(ptr, ARY_HEAP_SIZE(copy)));
- }
- else if (ARY_SHARED_P(copy)) {
- shared = ARY_SHARED(copy);
- FL_UNSET_SHARED(copy);
- }
- FL_SET_EMBED(copy);
- ary_memcpy(copy, 0, RARRAY_LEN(orig), RARRAY_CONST_PTR(orig));
- if (shared) {
- rb_ary_decrement_share(shared);
- }
- ARY_SET_LEN(copy, RARRAY_LEN(orig));
+ /* orig has enough space to embed the contents of orig. */
+ if (RARRAY_LEN(orig) <= ary_embed_capa(copy)) {
+ RUBY_ASSERT(ARY_EMBED_P(copy));
+ ary_memcpy(copy, 0, RARRAY_LEN(orig), RARRAY_CONST_PTR(orig));
+ ARY_SET_EMBED_LEN(copy, RARRAY_LEN(orig));
}
+ /* orig is embedded but copy does not have enough space to embed the
+ * contents of orig. */
+ else if (ARY_EMBED_P(orig)) {
+ long len = ARY_EMBED_LEN(orig);
+ VALUE *ptr = ary_heap_alloc_buffer(len);
+
+ FL_UNSET_EMBED(copy);
+ ARY_SET_PTR(copy, ptr);
+ ARY_SET_LEN(copy, len);
+ ARY_SET_CAPA(copy, len);
+
+ // No allocation and exception expected that could leave `copy` in a
+ // bad state from the edits above.
+ ary_memcpy(copy, 0, len, RARRAY_CONST_PTR(orig));
+ }
+ /* Otherwise, orig is on heap and copy does not have enough space to embed
+ * the contents of orig. */
else {
- VALUE shared = ary_make_shared(orig);
- if (ARY_OWNS_HEAP_P(copy)) {
- RARRAY_PTR_USE(copy, ptr, ruby_sized_xfree(ptr, ARY_HEAP_SIZE(copy)));
- }
- else {
- rb_ary_unshare_safe(copy);
- }
+ VALUE shared_root = ary_make_shared(orig);
FL_UNSET_EMBED(copy);
- ARY_SET_PTR(copy, RARRAY_CONST_PTR(orig));
- ARY_SET_LEN(copy, RARRAY_LEN(orig));
- rb_ary_set_shared(copy, shared);
+ ARY_SET_PTR(copy, ARY_HEAP_PTR(orig));
+ ARY_SET_LEN(copy, ARY_HEAP_LEN(orig));
+ rb_ary_set_shared(copy, shared_root);
+
+ RUBY_ASSERT(RB_OBJ_SHAREABLE_P(copy) ? RB_OBJ_SHAREABLE_P(shared_root) : 1);
}
+ ary_verify(copy);
return copy;
}
/*
* call-seq:
- * ary.clear -> ary
+ * clear -> self
*
- * Removes all elements from +self+.
+ * Removes all elements from +self+; returns +self+:
*
- * a = [ "a", "b", "c", "d", "e" ]
- * a.clear #=> [ ]
+ * a = [:foo, 'bar', 2]
+ * a.clear # => []
+ *
+ * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
*/
VALUE
rb_ary_clear(VALUE ary)
{
rb_ary_modify_check(ary);
- ARY_SET_LEN(ary, 0);
if (ARY_SHARED_P(ary)) {
- if (!ARY_EMBED_P(ary)) {
- rb_ary_unshare(ary);
- FL_SET_EMBED(ary);
- }
+ rb_ary_unshare(ary);
+ FL_SET_EMBED(ary);
+ ARY_SET_EMBED_LEN(ary, 0);
}
- else if (ARY_DEFAULT_SIZE * 2 < ARY_CAPA(ary)) {
- ary_resize_capa(ary, ARY_DEFAULT_SIZE * 2);
+ else {
+ ARY_SET_LEN(ary, 0);
+ if (ARY_DEFAULT_SIZE * 2 < ARY_CAPA(ary)) {
+ ary_resize_capa(ary, ARY_DEFAULT_SIZE * 2);
+ }
}
+ ary_verify(ary);
return ary;
}
/*
* call-seq:
- * ary.fill(obj) -> ary
- * ary.fill(obj, start [, length]) -> ary
- * ary.fill(obj, range ) -> ary
- * ary.fill { |index| block } -> ary
- * ary.fill(start [, length] ) { |index| block } -> ary
- * ary.fill(range) { |index| block } -> ary
+ * fill(object, start = nil, count = nil) -> self
+ * fill(object, range) -> self
+ * fill(start = nil, count = nil) {|element| ... } -> self
+ * fill(range) {|element| ... } -> self
+ *
+ * Replaces selected elements in +self+;
+ * may add elements to +self+;
+ * always returns +self+ (never a new array).
+ *
+ * In brief:
+ *
+ * # Non-negative start.
+ * ['a', 'b', 'c', 'd'].fill('-', 1, 2) # => ["a", "-", "-", "d"]
+ * ['a', 'b', 'c', 'd'].fill(1, 2) {|e| e.to_s } # => ["a", "1", "2", "d"]
+ *
+ * # Extends with specified values if necessary.
+ * ['a', 'b', 'c', 'd'].fill('-', 3, 2) # => ["a", "b", "c", "-", "-"]
+ * ['a', 'b', 'c', 'd'].fill(3, 2) {|e| e.to_s } # => ["a", "b", "c", "3", "4"]
+ *
+ * # Fills with nils if necessary.
+ * ['a', 'b', 'c', 'd'].fill('-', 6, 2) # => ["a", "b", "c", "d", nil, nil, "-", "-"]
+ * ['a', 'b', 'c', 'd'].fill(6, 2) {|e| e.to_s } # => ["a", "b", "c", "d", nil, nil, "6", "7"]
+ *
+ * # For negative start, counts backwards from the end.
+ * ['a', 'b', 'c', 'd'].fill('-', -3, 3) # => ["a", "-", "-", "-"]
+ * ['a', 'b', 'c', 'd'].fill(-3, 3) {|e| e.to_s } # => ["a", "1", "2", "3"]
+ *
+ * # Range.
+ * ['a', 'b', 'c', 'd'].fill('-', 1..2) # => ["a", "-", "-", "d"]
+ * ['a', 'b', 'c', 'd'].fill(1..2) {|e| e.to_s } # => ["a", "1", "2", "d"]
+ *
+ * When arguments +start+ and +count+ are given,
+ * they select the elements of +self+ to be replaced;
+ * each must be an
+ * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects]
+ * (or +nil+):
+ *
+ * - +start+ specifies the zero-based offset of the first element to be replaced;
+ * +nil+ means zero.
+ * - +count+ is the number of consecutive elements to be replaced;
+ * +nil+ means "all the rest."
+ *
+ * With argument +object+ given,
+ * that one object is used for all replacements:
+ *
+ * o = Object.new # => #<Object:0x0000014e7bff7600>
+ * a = ['a', 'b', 'c', 'd'] # => ["a", "b", "c", "d"]
+ * a.fill(o, 1, 2)
+ * # => ["a", #<Object:0x0000014e7bff7600>, #<Object:0x0000014e7bff7600>, "d"]
+ *
+ * With a block given, the block is called once for each element to be replaced;
+ * the value passed to the block is the _index_ of the element to be replaced
+ * (not the element itself);
+ * the block's return value replaces the element:
+ *
+ * a = ['a', 'b', 'c', 'd'] # => ["a", "b", "c", "d"]
+ * a.fill(1, 2) {|element| element.to_s } # => ["a", "1", "2", "d"]
+ *
+ * For arguments +start+ and +count+:
+ *
+ * - If +start+ is non-negative,
+ * replaces +count+ elements beginning at offset +start+:
+ *
+ * ['a', 'b', 'c', 'd'].fill('-', 0, 2) # => ["-", "-", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill('-', 1, 2) # => ["a", "-", "-", "d"]
+ * ['a', 'b', 'c', 'd'].fill('-', 2, 2) # => ["a", "b", "-", "-"]
+ *
+ * ['a', 'b', 'c', 'd'].fill(0, 2) {|e| e.to_s } # => ["0", "1", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill(1, 2) {|e| e.to_s } # => ["a", "1", "2", "d"]
+ * ['a', 'b', 'c', 'd'].fill(2, 2) {|e| e.to_s } # => ["a", "b", "2", "3"]
+ *
+ * Extends +self+ if necessary:
+ *
+ * ['a', 'b', 'c', 'd'].fill('-', 3, 2) # => ["a", "b", "c", "-", "-"]
+ * ['a', 'b', 'c', 'd'].fill('-', 4, 2) # => ["a", "b", "c", "d", "-", "-"]
+ *
+ * ['a', 'b', 'c', 'd'].fill(3, 2) {|e| e.to_s } # => ["a", "b", "c", "3", "4"]
+ * ['a', 'b', 'c', 'd'].fill(4, 2) {|e| e.to_s } # => ["a", "b", "c", "d", "4", "5"]
+ *
+ * Fills with +nil+ if necessary:
+ *
+ * ['a', 'b', 'c', 'd'].fill('-', 5, 2) # => ["a", "b", "c", "d", nil, "-", "-"]
+ * ['a', 'b', 'c', 'd'].fill('-', 6, 2) # => ["a", "b", "c", "d", nil, nil, "-", "-"]
+ *
+ * ['a', 'b', 'c', 'd'].fill(5, 2) {|e| e.to_s } # => ["a", "b", "c", "d", nil, "5", "6"]
+ * ['a', 'b', 'c', 'd'].fill(6, 2) {|e| e.to_s } # => ["a", "b", "c", "d", nil, nil, "6", "7"]
+ *
+ * Does nothing if +count+ is non-positive:
+ *
+ * ['a', 'b', 'c', 'd'].fill('-', 2, 0) # => ["a", "b", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill('-', 2, -100) # => ["a", "b", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill('-', 6, -100) # => ["a", "b", "c", "d"]
+ *
+ * ['a', 'b', 'c', 'd'].fill(2, 0) {|e| fail 'Cannot happen' } # => ["a", "b", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill(2, -100) {|e| fail 'Cannot happen' } # => ["a", "b", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill(6, -100) {|e| fail 'Cannot happen' } # => ["a", "b", "c", "d"]
+ *
+ * - If +start+ is negative, counts backwards from the end of +self+:
+ *
+ * ['a', 'b', 'c', 'd'].fill('-', -4, 3) # => ["-", "-", "-", "d"]
+ * ['a', 'b', 'c', 'd'].fill('-', -3, 3) # => ["a", "-", "-", "-"]
+ *
+ * ['a', 'b', 'c', 'd'].fill(-4, 3) {|e| e.to_s } # => ["0", "1", "2", "d"]
+ * ['a', 'b', 'c', 'd'].fill(-3, 3) {|e| e.to_s } # => ["a", "1", "2", "3"]
+ *
+ * Extends +self+ if necessary:
+ *
+ * ['a', 'b', 'c', 'd'].fill('-', -2, 3) # => ["a", "b", "-", "-", "-"]
+ * ['a', 'b', 'c', 'd'].fill('-', -1, 3) # => ["a", "b", "c", "-", "-", "-"]
+ *
+ * ['a', 'b', 'c', 'd'].fill(-2, 3) {|e| e.to_s } # => ["a", "b", "2", "3", "4"]
+ * ['a', 'b', 'c', 'd'].fill(-1, 3) {|e| e.to_s } # => ["a", "b", "c", "3", "4", "5"]
+ *
+ * Starts at the beginning of +self+ if +start+ is negative and out-of-range:
+ *
+ * ['a', 'b', 'c', 'd'].fill('-', -5, 2) # => ["-", "-", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill('-', -6, 2) # => ["-", "-", "c", "d"]
+ *
+ * ['a', 'b', 'c', 'd'].fill(-5, 2) {|e| e.to_s } # => ["0", "1", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill(-6, 2) {|e| e.to_s } # => ["0", "1", "c", "d"]
+ *
+ * Does nothing if +count+ is non-positive:
+ *
+ * ['a', 'b', 'c', 'd'].fill('-', -2, 0) # => ["a", "b", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill('-', -2, -1) # => ["a", "b", "c", "d"]
+ *
+ * ['a', 'b', 'c', 'd'].fill(-2, 0) {|e| fail 'Cannot happen' } # => ["a", "b", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill(-2, -1) {|e| fail 'Cannot happen' } # => ["a", "b", "c", "d"]
+ *
+ * When argument +range+ is given,
+ * it must be a Range object whose members are numeric;
+ * its +begin+ and +end+ values determine the elements of +self+
+ * to be replaced:
+ *
+ * - If both +begin+ and +end+ are positive, they specify the first and last elements
+ * to be replaced:
+ *
+ * ['a', 'b', 'c', 'd'].fill('-', 1..2) # => ["a", "-", "-", "d"]
+ * ['a', 'b', 'c', 'd'].fill(1..2) {|e| e.to_s } # => ["a", "1", "2", "d"]
+ *
+ * If +end+ is smaller than +begin+, replaces no elements:
+ *
+ * ['a', 'b', 'c', 'd'].fill('-', 2..1) # => ["a", "b", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill(2..1) {|e| e.to_s } # => ["a", "b", "c", "d"]
+ *
+ * - If either is negative (or both are negative), counts backwards from the end of +self+:
+ *
+ * ['a', 'b', 'c', 'd'].fill('-', -3..2) # => ["a", "-", "-", "d"]
+ * ['a', 'b', 'c', 'd'].fill('-', 1..-2) # => ["a", "-", "-", "d"]
+ * ['a', 'b', 'c', 'd'].fill('-', -3..-2) # => ["a", "-", "-", "d"]
+ *
+ * ['a', 'b', 'c', 'd'].fill(-3..2) {|e| e.to_s } # => ["a", "1", "2", "d"]
+ * ['a', 'b', 'c', 'd'].fill(1..-2) {|e| e.to_s } # => ["a", "1", "2", "d"]
+ * ['a', 'b', 'c', 'd'].fill(-3..-2) {|e| e.to_s } # => ["a", "1", "2", "d"]
*
- * The first three forms set the selected elements of +self+ (which
- * may be the entire array) to +obj+.
+ * - If the +end+ value is excluded (see Range#exclude_end?), omits the last replacement:
*
- * A +start+ of +nil+ is equivalent to zero.
+ * ['a', 'b', 'c', 'd'].fill('-', 1...2) # => ["a", "-", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill('-', 1...-2) # => ["a", "-", "c", "d"]
*
- * A +length+ of +nil+ is equivalent to the length of the array.
+ * ['a', 'b', 'c', 'd'].fill(1...2) {|e| e.to_s } # => ["a", "1", "c", "d"]
+ * ['a', 'b', 'c', 'd'].fill(1...-2) {|e| e.to_s } # => ["a", "1", "c", "d"]
*
- * The last three forms fill the array with the value of the given block,
- * which is passed the absolute index of each element to be filled.
+ * - If the range is endless (see {Endless Ranges}[rdoc-ref:Range@Endless+Ranges]),
+ * replaces elements to the end of +self+:
*
- * Negative values of +start+ count from the end of the array, where +-1+ is
- * the last element.
+ * ['a', 'b', 'c', 'd'].fill('-', 1..) # => ["a", "-", "-", "-"]
+ * ['a', 'b', 'c', 'd'].fill(1..) {|e| e.to_s } # => ["a", "1", "2", "3"]
*
- * a = [ "a", "b", "c", "d" ]
- * a.fill("x") #=> ["x", "x", "x", "x"]
- * a.fill("z", 2, 2) #=> ["x", "x", "z", "z"]
- * a.fill("y", 0..1) #=> ["y", "y", "z", "z"]
- * a.fill { |i| i*i } #=> [0, 1, 4, 9]
- * a.fill(-2) { |i| i*i*i } #=> [0, 1, 8, 27]
+ * - If the range is beginless (see {Beginless Ranges}[rdoc-ref:Range@Beginless+Ranges]),
+ * replaces elements from the beginning of +self+:
+ *
+ * ['a', 'b', 'c', 'd'].fill('-', ..2) # => ["-", "-", "-", "d"]
+ * ['a', 'b', 'c', 'd'].fill(..2) {|e| e.to_s } # => ["0", "1", "2", "d"]
+ *
+ * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
static VALUE
rb_ary_fill(int argc, VALUE *argv, VALUE ary)
{
- VALUE item, arg1, arg2;
+ VALUE item = Qundef, arg1, arg2;
long beg = 0, end = 0, len = 0;
- int block_p = FALSE;
if (rb_block_given_p()) {
- block_p = TRUE;
- rb_scan_args(argc, argv, "02", &arg1, &arg2);
- argc += 1; /* hackish */
+ rb_scan_args(argc, argv, "02", &arg1, &arg2);
+ argc += 1; /* hackish */
}
else {
- rb_scan_args(argc, argv, "12", &item, &arg1, &arg2);
+ rb_scan_args(argc, argv, "12", &item, &arg1, &arg2);
}
switch (argc) {
case 1:
- beg = 0;
- len = RARRAY_LEN(ary);
- break;
+ beg = 0;
+ len = RARRAY_LEN(ary);
+ break;
case 2:
- if (rb_range_beg_len(arg1, &beg, &len, RARRAY_LEN(ary), 1)) {
- break;
- }
- /* fall through */
+ if (rb_range_beg_len(arg1, &beg, &len, RARRAY_LEN(ary), 1)) {
+ break;
+ }
+ /* fall through */
case 3:
- beg = NIL_P(arg1) ? 0 : NUM2LONG(arg1);
- if (beg < 0) {
- beg = RARRAY_LEN(ary) + beg;
- if (beg < 0) beg = 0;
- }
- len = NIL_P(arg2) ? RARRAY_LEN(ary) - beg : NUM2LONG(arg2);
- break;
+ beg = NIL_P(arg1) ? 0 : NUM2LONG(arg1);
+ if (beg < 0) {
+ beg = RARRAY_LEN(ary) + beg;
+ if (beg < 0) beg = 0;
+ }
+ len = NIL_P(arg2) ? RARRAY_LEN(ary) - beg : NUM2LONG(arg2);
+ break;
}
rb_ary_modify(ary);
if (len < 0) {
return ary;
}
if (beg >= ARY_MAX_SIZE || len > ARY_MAX_SIZE - beg) {
- rb_raise(rb_eArgError, "argument too big");
+ rb_raise(rb_eArgError, "argument too big");
}
end = beg + len;
if (RARRAY_LEN(ary) < end) {
- if (end >= ARY_CAPA(ary)) {
- ary_resize_capa(ary, end);
- }
- ary_mem_clear(ary, RARRAY_LEN(ary), end - RARRAY_LEN(ary));
- ARY_SET_LEN(ary, end);
+ if (end >= ARY_CAPA(ary)) {
+ ary_resize_capa(ary, end);
+ }
+ ary_mem_clear(ary, RARRAY_LEN(ary), end - RARRAY_LEN(ary));
+ ARY_SET_LEN(ary, end);
}
- if (block_p) {
- VALUE v;
- long i;
+ if (UNDEF_P(item)) {
+ VALUE v;
+ long i;
- for (i=beg; i<end; i++) {
- v = rb_yield(LONG2NUM(i));
- if (i>=RARRAY_LEN(ary)) break;
- ARY_SET(ary, i, v);
- }
+ for (i=beg; i<end; i++) {
+ v = rb_yield(LONG2NUM(i));
+ if (i>=RARRAY_LEN(ary)) break;
+ ARY_SET(ary, i, v);
+ }
}
else {
- ary_memfill(ary, beg, len, item);
+ ary_memfill(ary, beg, len, item);
}
return ary;
}
/*
* call-seq:
- * ary + other_ary -> new_ary
+ * self + other_array -> new_array
*
- * Concatenation --- Returns a new array built by concatenating the
- * two arrays together to produce a third array.
+ * Returns a new array containing all elements of +self+
+ * followed by all elements of +other_array+:
*
- * [ 1, 2, 3 ] + [ 4, 5 ] #=> [ 1, 2, 3, 4, 5 ]
- * a = [ "a", "b", "c" ]
- * c = a + [ "d", "e", "f" ]
- * c #=> [ "a", "b", "c", "d", "e", "f" ]
- * a #=> [ "a", "b", "c" ]
+ * a = [0, 1] + [2, 3]
+ * a # => [0, 1, 2, 3]
*
- * Note that
- * x += y
- * is the same as
- * x = x + y
- * This means that it produces a new array. As a consequence,
- * repeated use of <code>+=</code> on arrays can be quite inefficient.
- *
- * See also Array#concat.
+ * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining].
*/
VALUE
@@ -3618,46 +5139,72 @@ rb_ary_plus(VALUE x, VALUE y)
return z;
}
+static VALUE
+ary_append(VALUE x, VALUE y)
+{
+ long n = RARRAY_LEN(y);
+ if (n > 0) {
+ rb_ary_splice(x, RARRAY_LEN(x), 0, RARRAY_CONST_PTR(y), n);
+ }
+ RB_GC_GUARD(y);
+ return x;
+}
+
/*
* call-seq:
- * ary.concat(other_ary) -> ary
+ * concat(*other_arrays) -> self
*
- * Appends the elements of +other_ary+ to +self+.
+ * Adds to +self+ all elements from each array in +other_arrays+; returns +self+:
*
- * [ "a", "b" ].concat( ["c", "d"] ) #=> [ "a", "b", "c", "d" ]
- * a = [ 1, 2, 3 ]
- * a.concat( [ 4, 5 ] )
- * a #=> [ 1, 2, 3, 4, 5 ]
+ * a = [0, 1]
+ * a.concat(['two', 'three'], [:four, :five], a)
+ * # => [0, 1, "two", "three", :four, :five, 0, 1]
*
- * See also Array#+.
+ * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
-VALUE
-rb_ary_concat(VALUE x, VALUE y)
+static VALUE
+rb_ary_concat_multi(int argc, VALUE *argv, VALUE ary)
{
- rb_ary_modify_check(x);
- y = to_ary(y);
- if (RARRAY_LEN(y) > 0) {
- rb_ary_splice(x, RARRAY_LEN(x), 0, y);
+ rb_ary_modify_check(ary);
+
+ if (argc == 1) {
+ rb_ary_concat(ary, argv[0]);
}
- return x;
+ else if (argc > 1) {
+ int i;
+ VALUE args = rb_ary_hidden_new(argc);
+ for (i = 0; i < argc; i++) {
+ rb_ary_concat(args, argv[i]);
+ }
+ ary_append(ary, args);
+ }
+
+ ary_verify(ary);
+ return ary;
}
+VALUE
+rb_ary_concat(VALUE x, VALUE y)
+{
+ return ary_append(x, to_ary(y));
+}
/*
* call-seq:
- * ary * int -> new_ary
- * ary * str -> new_string
+ * self * n -> new_array
+ * self * string_separator -> new_string
*
- * Repetition --- With a String argument, equivalent to
- * <code>ary.join(str)</code>.
+ * When non-negative integer argument +n+ is given,
+ * returns a new array built by concatenating +n+ copies of +self+:
*
- * Otherwise, returns a new array built by concatenating the +int+ copies of
- * +self+.
+ * a = ['x', 'y']
+ * a * 3 # => ["x", "y", "x", "y", "x", "y"]
*
+ * When string argument +string_separator+ is given,
+ * equivalent to <tt>self.join(string_separator)</tt>:
*
- * [ 1, 2, 3 ] * 3 #=> [ 1, 2, 3, 1, 2, 3, 1, 2, 3 ]
- * [ 1, 2, 3 ] * "," #=> "1,2,3"
+ * [0, [0, 1], {foo: 0}] * ', ' # => "0, 0, 1, {foo: 0}"
*
*/
@@ -3670,61 +5217,55 @@ rb_ary_times(VALUE ary, VALUE times)
tmp = rb_check_string_type(times);
if (!NIL_P(tmp)) {
- return rb_ary_join(ary, tmp);
+ return rb_ary_join(ary, tmp);
}
len = NUM2LONG(times);
if (len == 0) {
- ary2 = ary_new(rb_obj_class(ary), 0);
- goto out;
+ ary2 = ary_new(rb_cArray, 0);
+ goto out;
}
if (len < 0) {
- rb_raise(rb_eArgError, "negative argument");
+ rb_raise(rb_eArgError, "negative argument");
}
if (ARY_MAX_SIZE/len < RARRAY_LEN(ary)) {
- rb_raise(rb_eArgError, "argument too big");
+ rb_raise(rb_eArgError, "argument too big");
}
len *= RARRAY_LEN(ary);
- ary2 = ary_new(rb_obj_class(ary), len);
+ ary2 = ary_new(rb_cArray, len);
ARY_SET_LEN(ary2, len);
ptr = RARRAY_CONST_PTR(ary);
t = RARRAY_LEN(ary);
if (0 < t) {
- ary_memcpy(ary2, 0, t, ptr);
- while (t <= len/2) {
- ary_memcpy(ary2, t, t, RARRAY_CONST_PTR(ary2));
+ ary_memcpy(ary2, 0, t, ptr);
+ while (t <= len/2) {
+ ary_memcpy(ary2, t, t, RARRAY_CONST_PTR(ary2));
t *= 2;
}
if (t < len) {
- ary_memcpy(ary2, t, len-t, RARRAY_CONST_PTR(ary2));
+ ary_memcpy(ary2, t, len-t, RARRAY_CONST_PTR(ary2));
}
}
out:
- OBJ_INFECT(ary2, ary);
-
return ary2;
}
/*
* call-seq:
- * ary.assoc(obj) -> element_ary or nil
+ * assoc(object) -> found_array or nil
*
- * Searches through an array whose elements are also arrays comparing +obj+
- * with the first element of each contained array using <code>obj.==</code>.
+ * Returns the first element +ele+ in +self+ such that +ele+ is an array
+ * and <tt>ele[0] == object</tt>:
*
- * Returns the first contained array that matches (that is, the first
- * associated array), or +nil+ if no match is found.
+ * a = [{foo: 0}, [2, 4], [4, 5, 6], [4, 5]]
+ * a.assoc(4) # => [4, 5, 6]
*
- * See also Array#rassoc
+ * Returns +nil+ if no such element is found.
*
- * s1 = [ "colors", "red", "blue", "green" ]
- * s2 = [ "letters", "a", "b", "c" ]
- * s3 = "foo"
- * a = [ s1, s2, s3 ]
- * a.assoc("letters") #=> [ "letters", "a", "b", "c" ]
- * a.assoc("foo") #=> nil
+ * Related: Array#rassoc;
+ * see also {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
VALUE
@@ -3734,30 +5275,29 @@ rb_ary_assoc(VALUE ary, VALUE key)
VALUE v;
for (i = 0; i < RARRAY_LEN(ary); ++i) {
- v = rb_check_array_type(RARRAY_AREF(ary, i));
- if (!NIL_P(v) && RARRAY_LEN(v) > 0 &&
- rb_equal(RARRAY_AREF(v, 0), key))
- return v;
+ v = rb_check_array_type(RARRAY_AREF(ary, i));
+ if (!NIL_P(v) && RARRAY_LEN(v) > 0 &&
+ rb_equal(RARRAY_AREF(v, 0), key))
+ return v;
}
return Qnil;
}
/*
* call-seq:
- * ary.rassoc(obj) -> element_ary or nil
+ * rassoc(object) -> found_array or nil
*
- * Searches through the array whose elements are also arrays.
+ * Returns the first element +ele+ in +self+ such that +ele+ is an array
+ * and <tt>ele[1] == object</tt>:
*
- * Compares +obj+ with the second element of each contained array using
- * <code>obj.==</code>.
+ * a = [{foo: 0}, [2, 4], [4, 5, 6], [4, 5]]
+ * a.rassoc(4) # => [2, 4]
+ * a.rassoc(5) # => [4, 5, 6]
*
- * Returns the first contained array that matches +obj+.
+ * Returns +nil+ if no such element is found.
*
- * See also Array#assoc.
- *
- * a = [ [ 1, "one"], [2, "two"], [3, "three"], ["ii", "two"] ]
- * a.rassoc("two") #=> [2, "two"]
- * a.rassoc("four") #=> nil
+ * Related: Array#assoc;
+ * see also {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
VALUE
@@ -3767,11 +5307,11 @@ rb_ary_rassoc(VALUE ary, VALUE value)
VALUE v;
for (i = 0; i < RARRAY_LEN(ary); ++i) {
- v = RARRAY_AREF(ary, i);
- if (RB_TYPE_P(v, T_ARRAY) &&
- RARRAY_LEN(v) > 1 &&
- rb_equal(RARRAY_AREF(v, 1), value))
- return v;
+ v = rb_check_array_type(RARRAY_AREF(ary, i));
+ if (RB_TYPE_P(v, T_ARRAY) &&
+ RARRAY_LEN(v) > 1 &&
+ rb_equal(RARRAY_AREF(v, 1), value))
+ return v;
}
return Qnil;
}
@@ -3784,43 +5324,54 @@ recursive_equal(VALUE ary1, VALUE ary2, int recur)
if (recur) return Qtrue; /* Subtle! */
+ /* rb_equal() can evacuate ptrs */
p1 = RARRAY_CONST_PTR(ary1);
p2 = RARRAY_CONST_PTR(ary2);
len1 = RARRAY_LEN(ary1);
for (i = 0; i < len1; i++) {
- if (*p1 != *p2) {
- if (rb_equal(*p1, *p2)) {
- len1 = RARRAY_LEN(ary1);
- if (len1 != RARRAY_LEN(ary2))
- return Qfalse;
- if (len1 < i)
- return Qtrue;
- p1 = RARRAY_CONST_PTR(ary1) + i;
- p2 = RARRAY_CONST_PTR(ary2) + i;
- }
- else {
- return Qfalse;
- }
- }
- p1++;
- p2++;
+ if (*p1 != *p2) {
+ if (rb_equal(*p1, *p2)) {
+ len1 = RARRAY_LEN(ary1);
+ if (len1 != RARRAY_LEN(ary2))
+ return Qfalse;
+ if (len1 < i)
+ return Qtrue;
+ p1 = RARRAY_CONST_PTR(ary1) + i;
+ p2 = RARRAY_CONST_PTR(ary2) + i;
+ }
+ else {
+ return Qfalse;
+ }
+ }
+ p1++;
+ p2++;
}
return Qtrue;
}
/*
* call-seq:
- * ary == other_ary -> bool
+ * self == other_array -> true or false
+ *
+ * Returns whether both:
+ *
+ * - +self+ and +other_array+ are the same size.
+ * - Their corresponding elements are the same;
+ * that is, for each index +i+ in <tt>(0...self.size)</tt>,
+ * <tt>self[i] == other_array[i]</tt>.
+ *
+ * Examples:
*
- * Equality --- Two arrays are equal if they contain the same number of
- * elements and if each element is equal to (according to Object#==) the
- * corresponding element in +other_ary+.
+ * [:foo, 'bar', 2] == [:foo, 'bar', 2] # => true
+ * [:foo, 'bar', 2] == [:foo, 'bar', 2.0] # => true
+ * [:foo, 'bar', 2] == [:foo, 'bar'] # => false # Different sizes.
+ * [:foo, 'bar', 2] == [:foo, 'bar', 3] # => false # Different elements.
*
- * [ "a", "c" ] == [ "a", "c", 7 ] #=> false
- * [ "a", "c", 7 ] == [ "a", "c", 7 ] #=> true
- * [ "a", "c", 7 ] == [ "a", "d", "f" ] #=> false
+ * This method is different from method Array#eql?,
+ * which compares elements using <tt>Object#eql?</tt>.
*
+ * Related: see {Methods for Comparing}[rdoc-ref:Array@Methods+for+Comparing].
*/
static VALUE
@@ -3828,10 +5379,10 @@ rb_ary_equal(VALUE ary1, VALUE ary2)
{
if (ary1 == ary2) return Qtrue;
if (!RB_TYPE_P(ary2, T_ARRAY)) {
- if (!rb_respond_to(ary2, idTo_ary)) {
- return Qfalse;
- }
- return rb_equal(ary2, ary1);
+ if (!rb_respond_to(ary2, idTo_ary)) {
+ return Qfalse;
+ }
+ return rb_equal(ary2, ary1);
}
if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) return Qfalse;
if (RARRAY_CONST_PTR(ary1) == RARRAY_CONST_PTR(ary2)) return Qtrue;
@@ -3845,18 +5396,29 @@ recursive_eql(VALUE ary1, VALUE ary2, int recur)
if (recur) return Qtrue; /* Subtle! */
for (i=0; i<RARRAY_LEN(ary1); i++) {
- if (!rb_eql(rb_ary_elt(ary1, i), rb_ary_elt(ary2, i)))
- return Qfalse;
+ if (!rb_eql(rb_ary_elt(ary1, i), rb_ary_elt(ary2, i)))
+ return Qfalse;
}
return Qtrue;
}
/*
* call-seq:
- * ary.eql?(other) -> true or false
+ * eql?(other_array) -> true or false
+ *
+ * Returns +true+ if +self+ and +other_array+ are the same size,
+ * and if, for each index +i+ in +self+, <tt>self[i].eql?(other_array[i])</tt>:
+ *
+ * a0 = [:foo, 'bar', 2]
+ * a1 = [:foo, 'bar', 2]
+ * a1.eql?(a0) # => true
+ *
+ * Otherwise, returns +false+.
*
- * Returns +true+ if +self+ and +other+ are the same object,
- * or are both arrays with the same content (according to Object#eql?).
+ * This method is different from method Array#==,
+ * which compares using method <tt>Object#==</tt>.
+ *
+ * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
*/
static VALUE
@@ -3869,45 +5431,67 @@ rb_ary_eql(VALUE ary1, VALUE ary2)
return rb_exec_recursive_paired(recursive_eql, ary1, ary2, ary2);
}
+static VALUE
+ary_hash_values(long len, const VALUE *elements, const VALUE ary)
+{
+ long i;
+ st_index_t h;
+ VALUE n;
+
+ h = rb_hash_start(len);
+ h = rb_hash_uint(h, (st_index_t)rb_ary_hash_values);
+ for (i=0; i<len; i++) {
+ n = rb_hash(elements[i]);
+ h = rb_hash_uint(h, NUM2LONG(n));
+ if (ary) {
+ len = RARRAY_LEN(ary);
+ elements = RARRAY_CONST_PTR(ary);
+ }
+ }
+ h = rb_hash_end(h);
+ return ST2FIX(h);
+}
+
+VALUE
+rb_ary_hash_values(long len, const VALUE *elements)
+{
+ return ary_hash_values(len, elements, 0);
+}
+
/*
* call-seq:
- * ary.hash -> fixnum
+ * hash -> integer
*
- * Compute a hash-code for this array.
+ * Returns the integer hash value for +self+.
*
- * Two arrays with the same content will have the same hash code (and will
- * compare using #eql?).
+ * Two arrays with the same content will have the same hash value
+ * (and will compare using eql?):
+ *
+ * ['a', 'b'].hash == ['a', 'b'].hash # => true
+ * ['a', 'b'].hash == ['a', 'c'].hash # => false
+ * ['a', 'b'].hash == ['a'].hash # => false
*
- * See also Object#hash.
*/
static VALUE
rb_ary_hash(VALUE ary)
{
- long i;
- st_index_t h;
- VALUE n;
-
- h = rb_hash_start(RARRAY_LEN(ary));
- h = rb_hash_uint(h, (st_index_t)rb_ary_hash);
- for (i=0; i<RARRAY_LEN(ary); i++) {
- n = rb_hash(RARRAY_AREF(ary, i));
- h = rb_hash_uint(h, NUM2LONG(n));
- }
- h = rb_hash_end(h);
- return LONG2FIX(h);
+ RBIMPL_ASSERT_OR_ASSUME(ary);
+ return ary_hash_values(RARRAY_LEN(ary), RARRAY_CONST_PTR(ary), ary);
}
/*
* call-seq:
- * ary.include?(object) -> true or false
+ * include?(object) -> true or false
*
- * Returns +true+ if the given +object+ is present in +self+ (that is, if any
- * element <code>==</code> +object+), otherwise returns +false+.
+ * Returns whether for some element +element+ in +self+,
+ * <tt>object == element</tt>:
*
- * a = [ "a", "b", "c" ]
- * a.include?("b") #=> true
- * a.include?("z") #=> false
+ * [0, 1, 2].include?(2) # => true
+ * [0, 1, 2].include?(2.0) # => true
+ * [0, 1, 2].include?(2.1) # => false
+ *
+ * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
*/
VALUE
@@ -3917,18 +5501,28 @@ rb_ary_includes(VALUE ary, VALUE item)
VALUE e;
for (i=0; i<RARRAY_LEN(ary); i++) {
- e = RARRAY_AREF(ary, i);
- switch (rb_equal_opt(e, item)) {
- case Qundef:
- if (rb_equal(e, item)) return Qtrue;
- break;
- case Qtrue:
- return Qtrue;
- }
+ e = RARRAY_AREF(ary, i);
+ if (rb_equal(e, item)) {
+ return Qtrue;
+ }
}
return Qfalse;
}
+static VALUE
+rb_ary_includes_by_eql(VALUE ary, VALUE item)
+{
+ long i;
+ VALUE e;
+
+ for (i=0; i<RARRAY_LEN(ary); i++) {
+ e = RARRAY_AREF(ary, i);
+ if (rb_eql(item, e)) {
+ return Qtrue;
+ }
+ }
+ return Qfalse;
+}
static VALUE
recursive_cmp(VALUE ary1, VALUE ary2, int recur)
@@ -3938,46 +5532,54 @@ recursive_cmp(VALUE ary1, VALUE ary2, int recur)
if (recur) return Qundef; /* Subtle! */
len = RARRAY_LEN(ary1);
if (len > RARRAY_LEN(ary2)) {
- len = RARRAY_LEN(ary2);
+ len = RARRAY_LEN(ary2);
}
for (i=0; i<len; i++) {
- VALUE e1 = rb_ary_elt(ary1, i), e2 = rb_ary_elt(ary2, i);
- VALUE v = rb_funcallv(e1, id_cmp, 1, &e2);
- if (v != INT2FIX(0)) {
- return v;
- }
+ VALUE e1 = rb_ary_elt(ary1, i), e2 = rb_ary_elt(ary2, i);
+ VALUE v = rb_funcallv(e1, id_cmp, 1, &e2);
+ if (v != INT2FIX(0)) {
+ return v;
+ }
}
return Qundef;
}
/*
* call-seq:
- * ary <=> other_ary -> -1, 0, +1 or nil
+ * self <=> other_array -> -1, 0, or 1
+ *
+ * Returns -1, 0, or 1 as +self+ is determined
+ * to be less than, equal to, or greater than +other_array+.
*
- * Comparison --- Returns an integer (+-1+, +0+, or <code>+1</code>) if this
- * array is less than, equal to, or greater than +other_ary+.
+ * Iterates over each index +i+ in <tt>(0...self.size)</tt>:
*
- * Each object in each array is compared (using the <=> operator).
+ * - Computes <tt>result[i]</tt> as <tt>self[i] <=> other_array[i]</tt>.
+ * - Immediately returns 1 if <tt>result[i]</tt> is 1:
*
- * Arrays are compared in an "element-wise" manner; the first element of +ary+
- * is compared with the first one of +other_ary+ using the <=> operator, then
- * each of the second elements, etc...
- * As soon as the result of any such comparison is non zero (i.e. the two
- * corresponding elements are not equal), that result is returned for the
- * whole array comparison.
+ * [0, 1, 2] <=> [0, 0, 2] # => 1
*
- * If all the elements are equal, then the result is based on a comparison of
- * the array lengths. Thus, two arrays are "equal" according to Array#<=> if,
- * and only if, they have the same length and the value of each element is
- * equal to the value of the corresponding element in the other array.
+ * - Immediately returns -1 if <tt>result[i]</tt> is -1:
*
- * +nil+ is returned if the +other_ary+ is not an array or if the comparison
- * of two elements returned +nil+.
+ * [0, 1, 2] <=> [0, 2, 2] # => -1
*
- * [ "a", "a", "c" ] <=> [ "a", "b", "c" ] #=> -1
- * [ 1, 2, 3, 4, 5, 6 ] <=> [ 1, 2 ] #=> +1
- * [ 1, 2 ] <=> [ 1, :two ] #=> nil
+ * - Continues if <tt>result[i]</tt> is 0.
*
+ * When every +result+ is 0,
+ * returns <tt>self.size <=> other_array.size</tt>
+ * (see Integer#<=>):
+ *
+ * [0, 1, 2] <=> [0, 1] # => 1
+ * [0, 1, 2] <=> [0, 1, 2] # => 0
+ * [0, 1, 2] <=> [0, 1, 2, 3] # => -1
+ *
+ * Note that when +other_array+ is larger than +self+,
+ * its trailing elements do not affect the result:
+ *
+ * [0, 1, 2] <=> [0, 1, 2, -3] # => -1
+ * [0, 1, 2] <=> [0, 1, 2, 0] # => -1
+ * [0, 1, 2] <=> [0, 1, 2, 3] # => -1
+ *
+ * Related: see {Methods for Comparing}[rdoc-ref:Array@Methods+for+Comparing].
*/
VALUE
@@ -3990,7 +5592,7 @@ rb_ary_cmp(VALUE ary1, VALUE ary2)
if (NIL_P(ary2)) return Qnil;
if (ary1 == ary2) return INT2FIX(0);
v = rb_exec_recursive_paired(recursive_cmp, ary1, ary2, ary2);
- if (v != Qundef) return v;
+ if (!UNDEF_P(v)) return v;
len = RARRAY_LEN(ary1) - RARRAY_LEN(ary2);
if (len == 0) return INT2FIX(0);
if (len > 0) return INT2FIX(1);
@@ -4003,18 +5605,17 @@ ary_add_hash(VALUE hash, VALUE ary)
long i;
for (i=0; i<RARRAY_LEN(ary); i++) {
- VALUE elt = RARRAY_AREF(ary, i);
- if (rb_hash_lookup2(hash, elt, Qundef) == Qundef) {
- rb_hash_aset(hash, elt, elt);
- }
+ VALUE elt = RARRAY_AREF(ary, i);
+ rb_hash_add_new_element(hash, elt, elt);
}
return hash;
}
static inline VALUE
-ary_tmp_hash_new(void)
+ary_tmp_hash_new(VALUE ary)
{
- VALUE hash = rb_hash_new();
+ long size = RARRAY_LEN(ary);
+ VALUE hash = rb_hash_new_with_size(size);
RBASIC_CLEAR_CLASS(hash);
return hash;
@@ -4023,7 +5624,7 @@ ary_tmp_hash_new(void)
static VALUE
ary_make_hash(VALUE ary)
{
- VALUE hash = ary_tmp_hash_new();
+ VALUE hash = ary_tmp_hash_new(ary);
return ary_add_hash(hash, ary);
}
@@ -4033,10 +5634,8 @@ ary_add_hash_by(VALUE hash, VALUE ary)
long i;
for (i = 0; i < RARRAY_LEN(ary); ++i) {
- VALUE v = rb_ary_elt(ary, i), k = rb_yield(v);
- if (rb_hash_lookup2(hash, k, Qundef) == Qundef) {
- rb_hash_aset(hash, k, v);
- }
+ VALUE v = rb_ary_elt(ary, i), k = rb_yield(v);
+ rb_hash_add_new_element(hash, k, v);
}
return hash;
}
@@ -4044,70 +5643,134 @@ ary_add_hash_by(VALUE hash, VALUE ary)
static VALUE
ary_make_hash_by(VALUE ary)
{
- VALUE hash = ary_tmp_hash_new();
+ VALUE hash = ary_tmp_hash_new(ary);
return ary_add_hash_by(hash, ary);
}
-static inline void
-ary_recycle_hash(VALUE hash)
-{
- if (RHASH(hash)->ntbl) {
- st_table *tbl = RHASH(hash)->ntbl;
- RHASH(hash)->ntbl = 0;
- st_free_table(tbl);
- }
- RB_GC_GUARD(hash);
-}
-
/*
* call-seq:
- * ary - other_ary -> new_ary
+ * self - other_array -> new_array
*
- * Array Difference
+ * Returns a new array containing only those elements of +self+
+ * that are not found in +other_array+;
+ * the order from +self+ is preserved:
*
- * Returns a new array that is a copy of the original array, removing any
- * items that also appear in +other_ary+. The order is preserved from the
- * original array.
+ * [0, 1, 1, 2, 1, 1, 3, 1, 1] - [1] # => [0, 2, 3]
+ * [0, 1, 1, 2, 1, 1, 3, 1, 1] - [3, 2, 0, :foo] # => [1, 1, 1, 1, 1, 1]
+ * [0, 1, 2] - [:foo] # => [0, 1, 2]
*
- * It compares elements using their #hash and #eql? methods for efficiency.
+ * Element are compared using method <tt>#eql?</tt>
+ * (as defined in each element of +self+).
*
- * [ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ] #=> [ 3, 3, 5 ]
- *
- * If you need set-like behavior, see the library class Set.
+ * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining].
*/
-static VALUE
+VALUE
rb_ary_diff(VALUE ary1, VALUE ary2)
{
VALUE ary3;
VALUE hash;
long i;
- hash = ary_make_hash(to_ary(ary2));
+ ary2 = to_ary(ary2);
+ if (RARRAY_LEN(ary2) == 0) { return ary_make_shared_copy(ary1); }
ary3 = rb_ary_new();
+ if (RARRAY_LEN(ary1) <= SMALL_ARRAY_LEN || RARRAY_LEN(ary2) <= SMALL_ARRAY_LEN) {
+ for (i=0; i<RARRAY_LEN(ary1); i++) {
+ VALUE elt = rb_ary_elt(ary1, i);
+ if (rb_ary_includes_by_eql(ary2, elt)) continue;
+ rb_ary_push(ary3, elt);
+ }
+ return ary3;
+ }
+
+ hash = ary_make_hash(ary2);
for (i=0; i<RARRAY_LEN(ary1); i++) {
- if (st_lookup(rb_hash_tbl_raw(hash), RARRAY_AREF(ary1, i), 0)) continue;
- rb_ary_push(ary3, rb_ary_elt(ary1, i));
+ if (rb_hash_stlike_lookup(hash, RARRAY_AREF(ary1, i), NULL)) continue;
+ rb_ary_push(ary3, rb_ary_elt(ary1, i));
}
- ary_recycle_hash(hash);
+
return ary3;
}
/*
* call-seq:
- * ary & other_ary -> new_ary
+ * difference(*other_arrays = []) -> new_array
*
- * Set Intersection --- Returns a new array containing elements common to the
- * two arrays, excluding any duplicates. The order is preserved from the
- * original array.
+ * Returns a new array containing only those elements from +self+
+ * that are not found in any of the given +other_arrays+;
+ * items are compared using <tt>eql?</tt>; order from +self+ is preserved:
*
- * It compares elements using their #hash and #eql? methods for efficiency.
+ * [0, 1, 1, 2, 1, 1, 3, 1, 1].difference([1]) # => [0, 2, 3]
+ * [0, 1, 2, 3].difference([3, 0], [1, 3]) # => [2]
+ * [0, 1, 2].difference([4]) # => [0, 1, 2]
+ * [0, 1, 2].difference # => [0, 1, 2]
*
- * [ 1, 1, 3, 5 ] & [ 1, 2, 3 ] #=> [ 1, 3 ]
- * [ 'a', 'b', 'b', 'z' ] & [ 'a', 'b', 'c' ] #=> [ 'a', 'b' ]
+ * Returns a copy of +self+ if no arguments are given.
*
- * See also Array#uniq.
+ * Related: Array#-;
+ * see also {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining].
+ */
+
+static VALUE
+rb_ary_difference_multi(int argc, VALUE *argv, VALUE ary)
+{
+ VALUE ary_diff;
+ long i, length;
+ volatile VALUE t0;
+ bool *is_hash = ALLOCV_N(bool, t0, argc);
+ ary_diff = rb_ary_new();
+ length = RARRAY_LEN(ary);
+
+ for (i = 0; i < argc; i++) {
+ argv[i] = to_ary(argv[i]);
+ is_hash[i] = (length > SMALL_ARRAY_LEN && RARRAY_LEN(argv[i]) > SMALL_ARRAY_LEN);
+ if (is_hash[i]) argv[i] = ary_make_hash(argv[i]);
+ }
+
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ int j;
+ VALUE elt = rb_ary_elt(ary, i);
+ for (j = 0; j < argc; j++) {
+ if (is_hash[j]) {
+ if (rb_hash_stlike_lookup(argv[j], elt, NULL))
+ break;
+ }
+ else {
+ if (rb_ary_includes_by_eql(argv[j], elt)) break;
+ }
+ }
+ if (j == argc) rb_ary_push(ary_diff, elt);
+ }
+
+ ALLOCV_END(t0);
+
+ return ary_diff;
+}
+
+
+/*
+ * call-seq:
+ * self & other_array -> new_array
+ *
+ * Returns a new array containing the _intersection_ of +self+ and +other_array+;
+ * that is, containing those elements found in both +self+ and +other_array+:
+ *
+ * [0, 1, 2, 3] & [1, 2] # => [1, 2]
+ *
+ * Omits duplicates:
+ *
+ * [0, 1, 1, 0] & [0, 1] # => [0, 1]
+ *
+ * Preserves order from +self+:
+ *
+ * [0, 1, 2] & [3, 2, 1, 0] # => [0, 1, 2]
+ *
+ * Identifies common elements using method <tt>#eql?</tt>
+ * (as defined in each element of +self+).
+ *
+ * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining].
*/
@@ -4115,28 +5778,70 @@ static VALUE
rb_ary_and(VALUE ary1, VALUE ary2)
{
VALUE hash, ary3, v;
- st_table *table;
st_data_t vv;
long i;
ary2 = to_ary(ary2);
ary3 = rb_ary_new();
- if (RARRAY_LEN(ary2) == 0) return ary3;
+ if (RARRAY_LEN(ary1) == 0 || RARRAY_LEN(ary2) == 0) return ary3;
+
+ if (RARRAY_LEN(ary1) <= SMALL_ARRAY_LEN && RARRAY_LEN(ary2) <= SMALL_ARRAY_LEN) {
+ for (i=0; i<RARRAY_LEN(ary1); i++) {
+ v = RARRAY_AREF(ary1, i);
+ if (!rb_ary_includes_by_eql(ary2, v)) continue;
+ if (rb_ary_includes_by_eql(ary3, v)) continue;
+ rb_ary_push(ary3, v);
+ }
+ return ary3;
+ }
+
hash = ary_make_hash(ary2);
- table = rb_hash_tbl_raw(hash);
for (i=0; i<RARRAY_LEN(ary1); i++) {
- v = RARRAY_AREF(ary1, i);
- vv = (st_data_t)v;
- if (st_delete(table, &vv, 0)) {
- rb_ary_push(ary3, v);
- }
+ v = RARRAY_AREF(ary1, i);
+ vv = (st_data_t)v;
+ if (rb_hash_stlike_delete(hash, &vv, 0)) {
+ rb_ary_push(ary3, v);
+ }
}
- ary_recycle_hash(hash);
return ary3;
}
+/*
+ * call-seq:
+ * intersection(*other_arrays) -> new_array
+ *
+ * Returns a new array containing each element in +self+ that is +#eql?+
+ * to at least one element in each of the given +other_arrays+;
+ * duplicates are omitted:
+ *
+ * [0, 0, 1, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3]) # => [0, 1]
+ *
+ * Each element must correctly implement method <tt>#hash</tt>.
+ *
+ * Order from +self+ is preserved:
+ *
+ * [0, 1, 2].intersection([2, 1, 0]) # => [0, 1, 2]
+ *
+ * Returns a copy of +self+ if no arguments are given.
+ *
+ * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining].
+ */
+
+static VALUE
+rb_ary_intersection_multi(int argc, VALUE *argv, VALUE ary)
+{
+ VALUE result = rb_ary_dup(ary);
+ int i;
+
+ for (i = 0; i < argc; i++) {
+ result = rb_ary_and(result, argv[i]);
+ }
+
+ return result;
+}
+
static int
ary_hash_orset(st_data_t *key, st_data_t *value, st_data_t arg, int existing)
{
@@ -4145,75 +5850,588 @@ ary_hash_orset(st_data_t *key, st_data_t *value, st_data_t arg, int existing)
return ST_CONTINUE;
}
+static void
+rb_ary_union(VALUE ary_union, VALUE ary)
+{
+ long i;
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ VALUE elt = rb_ary_elt(ary, i);
+ if (rb_ary_includes_by_eql(ary_union, elt)) continue;
+ rb_ary_push(ary_union, elt);
+ }
+}
+
+static void
+rb_ary_union_hash(VALUE hash, VALUE ary2)
+{
+ long i;
+ for (i = 0; i < RARRAY_LEN(ary2); i++) {
+ VALUE elt = RARRAY_AREF(ary2, i);
+ if (!rb_hash_stlike_update(hash, (st_data_t)elt, ary_hash_orset, (st_data_t)elt)) {
+ RB_OBJ_WRITTEN(hash, Qundef, elt);
+ }
+ }
+}
+
/*
* call-seq:
- * ary | other_ary -> new_ary
+ * self | other_array -> new_array
*
- * Set Union --- Returns a new array by joining +ary+ with +other_ary+,
- * excluding any duplicates and preserving the order from the original array.
+ * Returns the union of +self+ and +other_array+;
+ * duplicates are removed; order is preserved;
+ * items are compared using <tt>eql?</tt>:
*
- * It compares elements using their #hash and #eql? methods for efficiency.
+ * [0, 1] | [2, 3] # => [0, 1, 2, 3]
+ * [0, 1, 1] | [2, 2, 3] # => [0, 1, 2, 3]
+ * [0, 1, 2] | [3, 2, 1, 0] # => [0, 1, 2, 3]
*
- * [ "a", "b", "c" ] | [ "c", "d", "a" ] #=> [ "a", "b", "c", "d" ]
- *
- * See also Array#uniq.
+ * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining].
*/
static VALUE
rb_ary_or(VALUE ary1, VALUE ary2)
{
- VALUE hash, ary3;
- long i;
+ VALUE hash;
ary2 = to_ary(ary2);
+ if (RARRAY_LEN(ary1) + RARRAY_LEN(ary2) <= SMALL_ARRAY_LEN) {
+ VALUE ary3 = rb_ary_new();
+ rb_ary_union(ary3, ary1);
+ rb_ary_union(ary3, ary2);
+ return ary3;
+ }
+
hash = ary_make_hash(ary1);
+ rb_ary_union_hash(hash, ary2);
+
+ return rb_hash_values(hash);
+}
- for (i=0; i<RARRAY_LEN(ary2); i++) {
- VALUE elt = RARRAY_AREF(ary2, i);
- if (!st_update(RHASH_TBL_RAW(hash), (st_data_t)elt, ary_hash_orset, (st_data_t)elt)) {
- RB_OBJ_WRITTEN(hash, Qundef, elt);
- }
+/*
+ * call-seq:
+ * union(*other_arrays) -> new_array
+ *
+ * Returns a new array that is the union of the elements of +self+
+ * and all given arrays +other_arrays+;
+ * items are compared using <tt>eql?</tt>:
+ *
+ * [0, 1, 2, 3].union([4, 5], [6, 7]) # => [0, 1, 2, 3, 4, 5, 6, 7]
+ *
+ * Removes duplicates (preserving the first found):
+ *
+ * [0, 1, 1].union([2, 1], [3, 1]) # => [0, 1, 2, 3]
+ *
+ * Preserves order (preserving the position of the first found):
+ *
+ * [3, 2, 1, 0].union([5, 3], [4, 2]) # => [3, 2, 1, 0, 5, 4]
+ *
+ * With no arguments given, returns a copy of +self+.
+ *
+ * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining].
+ */
+
+static VALUE
+rb_ary_union_multi(int argc, VALUE *argv, VALUE ary)
+{
+ int i;
+ long sum;
+ VALUE hash;
+
+ sum = RARRAY_LEN(ary);
+ for (i = 0; i < argc; i++) {
+ argv[i] = to_ary(argv[i]);
+ sum += RARRAY_LEN(argv[i]);
}
- ary3 = rb_hash_values(hash);
- ary_recycle_hash(hash);
- return ary3;
+
+ if (sum <= SMALL_ARRAY_LEN) {
+ VALUE ary_union = rb_ary_new();
+
+ rb_ary_union(ary_union, ary);
+ for (i = 0; i < argc; i++) rb_ary_union(ary_union, argv[i]);
+
+ return ary_union;
+ }
+
+ hash = ary_make_hash(ary);
+ for (i = 0; i < argc; i++) rb_ary_union_hash(hash, argv[i]);
+
+ return rb_hash_values(hash);
}
-static int
-push_value(st_data_t key, st_data_t val, st_data_t ary)
+/*
+ * call-seq:
+ * intersect?(other_array) -> true or false
+ *
+ * Returns whether +other_array+ has at least one element that is +#eql?+ to some element of +self+:
+ *
+ * [1, 2, 3].intersect?([3, 4, 5]) # => true
+ * [1, 2, 3].intersect?([4, 5, 6]) # => false
+ *
+ * Each element must correctly implement method <tt>#hash</tt>.
+ *
+ * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
+ */
+
+static VALUE
+rb_ary_intersect_p(VALUE ary1, VALUE ary2)
{
- rb_ary_push((VALUE)ary, (VALUE)val);
- return ST_CONTINUE;
+ VALUE hash, v, result, shorter, longer;
+ st_data_t vv;
+ long i;
+
+ ary2 = to_ary(ary2);
+ if (RARRAY_LEN(ary1) == 0 || RARRAY_LEN(ary2) == 0) return Qfalse;
+
+ if (RARRAY_LEN(ary1) <= SMALL_ARRAY_LEN && RARRAY_LEN(ary2) <= SMALL_ARRAY_LEN) {
+ for (i=0; i<RARRAY_LEN(ary1); i++) {
+ v = RARRAY_AREF(ary1, i);
+ if (rb_ary_includes_by_eql(ary2, v)) return Qtrue;
+ }
+ return Qfalse;
+ }
+
+ shorter = ary1;
+ longer = ary2;
+ if (RARRAY_LEN(ary1) > RARRAY_LEN(ary2)) {
+ longer = ary1;
+ shorter = ary2;
+ }
+
+ hash = ary_make_hash(shorter);
+ result = Qfalse;
+
+ for (i=0; i<RARRAY_LEN(longer); i++) {
+ v = RARRAY_AREF(longer, i);
+ vv = (st_data_t)v;
+ if (rb_hash_stlike_lookup(hash, vv, 0)) {
+ result = Qtrue;
+ break;
+ }
+ }
+
+ return result;
+}
+
+static VALUE
+ary_max_generic(VALUE ary, long i, VALUE vmax)
+{
+ RUBY_ASSERT(i > 0 && i < RARRAY_LEN(ary));
+
+ VALUE v;
+ for (; i < RARRAY_LEN(ary); ++i) {
+ v = RARRAY_AREF(ary, i);
+
+ if (rb_cmpint(rb_funcallv(vmax, id_cmp, 1, &v), vmax, v) < 0) {
+ vmax = v;
+ }
+ }
+
+ return vmax;
+}
+
+static VALUE
+ary_max_opt_fixnum(VALUE ary, long i, VALUE vmax)
+{
+ const long n = RARRAY_LEN(ary);
+ RUBY_ASSERT(i > 0 && i < n);
+ RUBY_ASSERT(FIXNUM_P(vmax));
+
+ VALUE v;
+ for (; i < n; ++i) {
+ v = RARRAY_AREF(ary, i);
+
+ if (FIXNUM_P(v)) {
+ if ((long)vmax < (long)v) {
+ vmax = v;
+ }
+ }
+ else {
+ return ary_max_generic(ary, i, vmax);
+ }
+ }
+
+ return vmax;
+}
+
+static VALUE
+ary_max_opt_float(VALUE ary, long i, VALUE vmax)
+{
+ const long n = RARRAY_LEN(ary);
+ RUBY_ASSERT(i > 0 && i < n);
+ RUBY_ASSERT(RB_FLOAT_TYPE_P(vmax));
+
+ VALUE v;
+ for (; i < n; ++i) {
+ v = RARRAY_AREF(ary, i);
+
+ if (RB_FLOAT_TYPE_P(v)) {
+ if (rb_float_cmp(vmax, v) < 0) {
+ vmax = v;
+ }
+ }
+ else {
+ return ary_max_generic(ary, i, vmax);
+ }
+ }
+
+ return vmax;
+}
+
+static VALUE
+ary_max_opt_string(VALUE ary, long i, VALUE vmax)
+{
+ const long n = RARRAY_LEN(ary);
+ RUBY_ASSERT(i > 0 && i < n);
+ RUBY_ASSERT(STRING_P(vmax));
+
+ VALUE v;
+ for (; i < n; ++i) {
+ v = RARRAY_AREF(ary, i);
+
+ if (STRING_P(v)) {
+ if (rb_str_cmp(vmax, v) < 0) {
+ vmax = v;
+ }
+ }
+ else {
+ return ary_max_generic(ary, i, vmax);
+ }
+ }
+
+ return vmax;
}
/*
* call-seq:
- * ary.uniq! -> ary or nil
- * ary.uniq! { |item| ... } -> ary or nil
+ * max -> element
+ * max(count) -> new_array
+ * max {|a, b| ... } -> element
+ * max(count) {|a, b| ... } -> new_array
+ *
+ * Returns one of the following:
+ *
+ * - The maximum-valued element from +self+.
+ * - A new array of maximum-valued elements from +self+.
+ *
+ * Does not modify +self+.
*
- * Removes duplicate elements from +self+.
+ * With no block given, each element in +self+ must respond to method <tt>#<=></tt>
+ * with a numeric.
*
- * If a block is given, it will use the return value of the block for
- * comparison.
+ * With no argument and no block, returns the element in +self+
+ * having the maximum value per method <tt>#<=></tt>:
*
- * It compares values using their #hash and #eql? methods for efficiency.
+ * [1, 0, 3, 2].max # => 3
*
- * +self+ is traversed in order, and the first occurrence is kept.
+ * With non-negative numeric argument +count+ and no block,
+ * returns a new array with at most +count+ elements,
+ * in descending order, per method <tt>#<=></tt>:
*
- * Returns +nil+ if no changes are made (that is, no duplicates are found).
+ * [1, 0, 3, 2].max(3) # => [3, 2, 1]
+ * [1, 0, 3, 2].max(3.0) # => [3, 2, 1]
+ * [1, 0, 3, 2].max(9) # => [3, 2, 1, 0]
+ * [1, 0, 3, 2].max(0) # => []
*
- * a = [ "a", "a", "b", "b", "c" ]
- * a.uniq! # => ["a", "b", "c"]
+ * With a block given, the block must return a numeric.
*
- * b = [ "a", "b", "c" ]
- * b.uniq! # => nil
+ * With a block and no argument, calls the block <tt>self.size - 1</tt> times to compare elements;
+ * returns the element having the maximum value per the block:
*
- * c = [["student","sam"], ["student","george"], ["teacher","matz"]]
- * c.uniq! { |s| s.first } # => [["student", "sam"], ["teacher", "matz"]]
+ * ['0', '', '000', '00'].max {|a, b| a.size <=> b.size }
+ * # => "000"
*
+ * With non-negative numeric argument +count+ and a block,
+ * returns a new array with at most +count+ elements,
+ * in descending order, per the block:
+ *
+ * ['0', '', '000', '00'].max(2) {|a, b| a.size <=> b.size }
+ * # => ["000", "00"]
+ *
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
+static VALUE
+rb_ary_max(int argc, VALUE *argv, VALUE ary)
+{
+ VALUE result = Qundef, v;
+ VALUE num;
+ long i;
+
+ if (rb_check_arity(argc, 0, 1) && !NIL_P(num = argv[0]))
+ return rb_nmin_run(ary, num, 0, 1, 1);
+
+ const long n = RARRAY_LEN(ary);
+ if (rb_block_given_p()) {
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ v = RARRAY_AREF(ary, i);
+ if (UNDEF_P(result) || rb_cmpint(rb_yield_values(2, v, result), v, result) > 0) {
+ result = v;
+ }
+ }
+ }
+ else if (n > 0) {
+ result = RARRAY_AREF(ary, 0);
+ if (n > 1) {
+ if (FIXNUM_P(result) && CMP_OPTIMIZABLE(INTEGER)) {
+ return ary_max_opt_fixnum(ary, 1, result);
+ }
+ else if (STRING_P(result) && CMP_OPTIMIZABLE(STRING)) {
+ return ary_max_opt_string(ary, 1, result);
+ }
+ else if (RB_FLOAT_TYPE_P(result) && CMP_OPTIMIZABLE(FLOAT)) {
+ return ary_max_opt_float(ary, 1, result);
+ }
+ else {
+ return ary_max_generic(ary, 1, result);
+ }
+ }
+ }
+ if (UNDEF_P(result)) return Qnil;
+ return result;
+}
static VALUE
+ary_min_generic(VALUE ary, long i, VALUE vmin)
+{
+ RUBY_ASSERT(i > 0 && i < RARRAY_LEN(ary));
+
+ VALUE v;
+ for (; i < RARRAY_LEN(ary); ++i) {
+ v = RARRAY_AREF(ary, i);
+
+ if (rb_cmpint(rb_funcallv(vmin, id_cmp, 1, &v), vmin, v) > 0) {
+ vmin = v;
+ }
+ }
+
+ return vmin;
+}
+
+static VALUE
+ary_min_opt_fixnum(VALUE ary, long i, VALUE vmin)
+{
+ const long n = RARRAY_LEN(ary);
+ RUBY_ASSERT(i > 0 && i < n);
+ RUBY_ASSERT(FIXNUM_P(vmin));
+
+ VALUE a;
+ for (; i < n; ++i) {
+ a = RARRAY_AREF(ary, i);
+
+ if (FIXNUM_P(a)) {
+ if ((long)vmin > (long)a) {
+ vmin = a;
+ }
+ }
+ else {
+ return ary_min_generic(ary, i, vmin);
+ }
+ }
+
+ return vmin;
+}
+
+static VALUE
+ary_min_opt_float(VALUE ary, long i, VALUE vmin)
+{
+ const long n = RARRAY_LEN(ary);
+ RUBY_ASSERT(i > 0 && i < n);
+ RUBY_ASSERT(RB_FLOAT_TYPE_P(vmin));
+
+ VALUE a;
+ for (; i < n; ++i) {
+ a = RARRAY_AREF(ary, i);
+
+ if (RB_FLOAT_TYPE_P(a)) {
+ if (rb_float_cmp(vmin, a) > 0) {
+ vmin = a;
+ }
+ }
+ else {
+ return ary_min_generic(ary, i, vmin);
+ }
+ }
+
+ return vmin;
+}
+
+static VALUE
+ary_min_opt_string(VALUE ary, long i, VALUE vmin)
+{
+ const long n = RARRAY_LEN(ary);
+ RUBY_ASSERT(i > 0 && i < n);
+ RUBY_ASSERT(STRING_P(vmin));
+
+ VALUE a;
+ for (; i < n; ++i) {
+ a = RARRAY_AREF(ary, i);
+
+ if (STRING_P(a)) {
+ if (rb_str_cmp(vmin, a) > 0) {
+ vmin = a;
+ }
+ }
+ else {
+ return ary_min_generic(ary, i, vmin);
+ }
+ }
+
+ return vmin;
+}
+
+/*
+ * call-seq:
+ * min -> element
+ * min(count) -> new_array
+ * min {|a, b| ... } -> element
+ * min(count) {|a, b| ... } -> new_array
+ *
+ * Returns one of the following:
+ *
+ * - The minimum-valued element from +self+.
+ * - A new array of minimum-valued elements from +self+.
+ *
+ * Does not modify +self+.
+ *
+ * With no block given, each element in +self+ must respond to method <tt>#<=></tt>
+ * with a numeric.
+ *
+ * With no argument and no block, returns the element in +self+
+ * having the minimum value per method <tt>#<=></tt>:
+ *
+ * [1, 0, 3, 2].min # => 0
+ *
+ * With non-negative numeric argument +count+ and no block,
+ * returns a new array with at most +count+ elements,
+ * in ascending order, per method <tt>#<=></tt>:
+ *
+ * [1, 0, 3, 2].min(3) # => [0, 1, 2]
+ * [1, 0, 3, 2].min(3.0) # => [0, 1, 2]
+ * [1, 0, 3, 2].min(9) # => [0, 1, 2, 3]
+ * [1, 0, 3, 2].min(0) # => []
+ *
+ * With a block given, the block must return a numeric.
+ *
+ * With a block and no argument, calls the block <tt>self.size - 1</tt> times to compare elements;
+ * returns the element having the minimum value per the block:
+ *
+ * ['0', '', '000', '00'].min {|a, b| a.size <=> b.size }
+ * # => ""
+ *
+ * With non-negative numeric argument +count+ and a block,
+ * returns a new array with at most +count+ elements,
+ * in ascending order, per the block:
+ *
+ * ['0', '', '000', '00'].min(2) {|a, b| a.size <=> b.size }
+ * # => ["", "0"]
+ *
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
+ */
+static VALUE
+rb_ary_min(int argc, VALUE *argv, VALUE ary)
+{
+ VALUE result = Qundef, v;
+ VALUE num;
+ long i;
+
+ if (rb_check_arity(argc, 0, 1) && !NIL_P(num = argv[0]))
+ return rb_nmin_run(ary, num, 0, 0, 1);
+
+ const long n = RARRAY_LEN(ary);
+ if (rb_block_given_p()) {
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ v = RARRAY_AREF(ary, i);
+ if (UNDEF_P(result) || rb_cmpint(rb_yield_values(2, v, result), v, result) < 0) {
+ result = v;
+ }
+ }
+ }
+ else if (n > 0) {
+ result = RARRAY_AREF(ary, 0);
+ if (n > 1) {
+ if (FIXNUM_P(result) && CMP_OPTIMIZABLE(INTEGER)) {
+ return ary_min_opt_fixnum(ary, 1, result);
+ }
+ else if (STRING_P(result) && CMP_OPTIMIZABLE(STRING)) {
+ return ary_min_opt_string(ary, 1, result);
+ }
+ else if (RB_FLOAT_TYPE_P(result) && CMP_OPTIMIZABLE(FLOAT)) {
+ return ary_min_opt_float(ary, 1, result);
+ }
+ else {
+ return ary_min_generic(ary, 1, result);
+ }
+ }
+ }
+ if (UNDEF_P(result)) return Qnil;
+ return result;
+}
+
+/*
+ * call-seq:
+ * minmax -> array
+ * minmax {|a, b| ... } -> array
+ *
+ * Returns a 2-element array containing the minimum-valued and maximum-valued
+ * elements from +self+;
+ * does not modify +self+.
+ *
+ * With no block given, the minimum and maximum values are determined using method <tt>#<=></tt>:
+ *
+ * [1, 0, 3, 2].minmax # => [0, 3]
+ *
+ * With a block given, the block must return a numeric;
+ * the block is called <tt>self.size - 1</tt> times to compare elements;
+ * returns the elements having the minimum and maximum values per the block:
+ *
+ * ['0', '', '000', '00'].minmax {|a, b| a.size <=> b.size }
+ * # => ["", "000"]
+ *
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
+ */
+static VALUE
+rb_ary_minmax(VALUE ary)
+{
+ if (rb_block_given_p()) {
+ return rb_call_super(0, NULL);
+ }
+ return rb_assoc_new(rb_ary_min(0, 0, ary), rb_ary_max(0, 0, ary));
+}
+
+static int
+push_value(st_data_t key, st_data_t val, st_data_t ary)
+{
+ rb_ary_push((VALUE)ary, (VALUE)val);
+ return ST_CONTINUE;
+}
+
+/*
+ * call-seq:
+ * uniq! -> self or nil
+ * uniq! {|element| ... } -> self or nil
+ *
+ * Removes duplicate elements from +self+, the first occurrence always being retained;
+ * returns +self+ if any elements removed, +nil+ otherwise.
+ *
+ * With no block given, identifies and removes elements using method <tt>eql?</tt>
+ * to compare elements:
+ *
+ * a = [0, 0, 1, 1, 2, 2]
+ * a.uniq! # => [0, 1, 2]
+ * a.uniq! # => nil
+ *
+ * With a block given, calls the block for each element;
+ * identifies and omits "duplicate" elements using method <tt>eql?</tt>
+ * to compare <i>block return values</i>;
+ * that is, an element is a duplicate if its block return value
+ * is the same as that of a previous element:
+ *
+ * a = ['a', 'aa', 'aaa', 'b', 'bb', 'bbb']
+ * a.uniq! {|element| element.size } # => ["a", "aa", "aaa"]
+ * a.uniq! {|element| element.size } # => nil
+ *
+ * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
+ */
+static VALUE
rb_ary_uniq_bang(VALUE ary)
{
VALUE hash;
@@ -4223,46 +6441,50 @@ rb_ary_uniq_bang(VALUE ary)
if (RARRAY_LEN(ary) <= 1)
return Qnil;
if (rb_block_given_p())
- hash = ary_make_hash_by(ary);
+ hash = ary_make_hash_by(ary);
else
- hash = ary_make_hash(ary);
+ hash = ary_make_hash(ary);
hash_size = RHASH_SIZE(hash);
if (RARRAY_LEN(ary) == hash_size) {
- return Qnil;
+ return Qnil;
}
rb_ary_modify_check(ary);
ARY_SET_LEN(ary, 0);
- if (ARY_SHARED_P(ary) && !ARY_EMBED_P(ary)) {
- rb_ary_unshare(ary);
- FL_SET_EMBED(ary);
+ if (ARY_SHARED_P(ary)) {
+ rb_ary_unshare(ary);
+ FL_SET_EMBED(ary);
}
ary_resize_capa(ary, hash_size);
- st_foreach(rb_hash_tbl_raw(hash), push_value, ary);
- ary_recycle_hash(hash);
+ rb_hash_foreach(hash, push_value, ary);
return ary;
}
/*
* call-seq:
- * ary.uniq -> new_ary
- * ary.uniq { |item| ... } -> new_ary
- *
- * Returns a new array by removing duplicate values in +self+.
+ * uniq -> new_array
+ * uniq {|element| ... } -> new_array
*
- * If a block is given, it will use the return value of the block for comparison.
+ * Returns a new array containing those elements from +self+ that are not duplicates,
+ * the first occurrence always being retained.
*
- * It compares values using their #hash and #eql? methods for efficiency.
+ * With no block given, identifies and omits duplicate elements using method <tt>eql?</tt>
+ * to compare elements:
*
- * +self+ is traversed in order, and the first occurrence is kept.
+ * a = [0, 0, 1, 1, 2, 2]
+ * a.uniq # => [0, 1, 2]
*
- * a = [ "a", "a", "b", "b", "c" ]
- * a.uniq # => ["a", "b", "c"]
+ * With a block given, calls the block for each element;
+ * identifies and omits "duplicate" elements using method <tt>eql?</tt>
+ * to compare <i>block return values</i>;
+ * that is, an element is a duplicate if its block return value
+ * is the same as that of a previous element:
*
- * b = [["student","sam"], ["student","george"], ["teacher","matz"]]
- * b.uniq { |s| s.first } # => [["student", "sam"], ["teacher", "matz"]]
+ * a = ['a', 'aa', 'aaa', 'b', 'bb', 'bbb']
+ * a.uniq {|element| element.size } # => ["a", "aa", "aaa"]
*
+ * Related: {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
static VALUE
@@ -4270,32 +6492,36 @@ rb_ary_uniq(VALUE ary)
{
VALUE hash, uniq;
- if (RARRAY_LEN(ary) <= 1)
- return rb_ary_dup(ary);
- if (rb_block_given_p()) {
- hash = ary_make_hash_by(ary);
- uniq = rb_hash_values(hash);
+ if (RARRAY_LEN(ary) <= 1) {
+ hash = 0;
+ uniq = rb_ary_dup(ary);
+ }
+ else if (rb_block_given_p()) {
+ hash = ary_make_hash_by(ary);
+ uniq = rb_hash_values(hash);
}
else {
- hash = ary_make_hash(ary);
- uniq = rb_hash_values(hash);
+ hash = ary_make_hash(ary);
+ uniq = rb_hash_values(hash);
}
- RBASIC_SET_CLASS(uniq, rb_obj_class(ary));
- ary_recycle_hash(hash);
return uniq;
}
/*
* call-seq:
- * ary.compact! -> ary or nil
+ * compact! -> self or nil
*
- * Removes +nil+ elements from the array.
+ * Removes all +nil+ elements from +self+;
+ * Returns +self+ if any elements are removed, +nil+ otherwise:
*
- * Returns +nil+ if no changes were made, otherwise returns the array.
+ * a = [nil, 0, nil, false, nil, '', nil, [], nil, {}]
+ * a.compact! # => [0, false, "", [], {}]
+ * a # => [0, false, "", [], {}]
+ * a.compact! # => nil
*
- * [ "a", nil, "b", nil, "c" ].compact! #=> [ "a", "b", "c" ]
- * [ "a", "b", "c" ].compact! #=> nil
+ * Related: Array#compact;
+ * see also {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
*/
static VALUE
@@ -4309,12 +6535,12 @@ rb_ary_compact_bang(VALUE ary)
end = p + RARRAY_LEN(ary);
while (t < end) {
- if (NIL_P(*t)) t++;
- else *p++ = *t++;
+ if (NIL_P(*t)) t++;
+ else *p++ = *t++;
}
n = p - RARRAY_CONST_PTR(ary);
if (RARRAY_LEN(ary) == n) {
- return Qnil;
+ return Qnil;
}
ary_resize_smaller(ary, n);
@@ -4323,12 +6549,16 @@ rb_ary_compact_bang(VALUE ary)
/*
* call-seq:
- * ary.compact -> new_ary
+ * compact -> new_array
*
- * Returns a copy of +self+ with all +nil+ elements removed.
+ * Returns a new array containing only the non-+nil+ elements from +self+;
+ * element order is preserved:
*
- * [ "a", nil, "b", nil, "c", nil ].compact
- * #=> [ "a", "b", "c" ]
+ * a = [nil, 0, nil, false, nil, '', nil, [], nil, {}]
+ * a.compact # => [0, false, "", [], {}]
+ *
+ * Related: Array#compact!;
+ * see also {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting].
*/
static VALUE
@@ -4341,23 +6571,29 @@ rb_ary_compact(VALUE ary)
/*
* call-seq:
- * ary.count -> int
- * ary.count(obj) -> int
- * ary.count { |item| block } -> int
+ * count -> integer
+ * count(object) -> integer
+ * count {|element| ... } -> integer
+ *
+ * Returns a count of specified elements.
+ *
+ * With no argument and no block, returns the count of all elements:
*
- * Returns the number of elements.
+ * [0, :one, 'two', 3, 3.0].count # => 5
*
- * If an argument is given, counts the number of elements which equal +obj+
- * using <code>==</code>.
+ * With argument +object+ given, returns the count of elements <tt>==</tt> to +object+:
*
- * If a block is given, counts the number of elements for which the block
- * returns a true value.
+ * [0, :one, 'two', 3, 3.0].count(3) # => 2
*
- * ary = [1, 2, 4, 2]
- * ary.count #=> 4
- * ary.count(2) #=> 2
- * ary.count { |x| x%2 == 0 } #=> 3
+ * With no argument and a block given, calls the block with each element;
+ * returns the count of elements for which the block returns a truthy value:
*
+ * [0, 1, 2, 3].count {|element| element > 1 } # => 2
+ *
+ * With argument +object+ and a block given, issues a warning, ignores the block,
+ * and returns the count of elements <tt>==</tt> to +object+.
+ *
+ * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
*/
static VALUE
@@ -4365,108 +6601,149 @@ rb_ary_count(int argc, VALUE *argv, VALUE ary)
{
long i, n = 0;
- if (argc == 0) {
- VALUE v;
+ if (rb_check_arity(argc, 0, 1) == 0) {
+ VALUE v;
- if (!rb_block_given_p())
- return LONG2NUM(RARRAY_LEN(ary));
+ if (!rb_block_given_p())
+ return LONG2NUM(RARRAY_LEN(ary));
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- v = RARRAY_AREF(ary, i);
- if (RTEST(rb_yield(v))) n++;
- }
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ v = RARRAY_AREF(ary, i);
+ if (RTEST(rb_yield(v))) n++;
+ }
}
else {
- VALUE obj;
+ VALUE obj = argv[0];
- rb_scan_args(argc, argv, "1", &obj);
- if (rb_block_given_p()) {
- rb_warn("given block not used");
- }
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- if (rb_equal(RARRAY_AREF(ary, i), obj)) n++;
- }
+ if (rb_block_given_p()) {
+ rb_warn("given block not used");
+ }
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ if (rb_equal(RARRAY_AREF(ary, i), obj)) n++;
+ }
}
return LONG2NUM(n);
}
static VALUE
-flatten(VALUE ary, int level, int *modified)
+flatten(VALUE ary, int level)
{
- long i = 0;
- VALUE stack, result, tmp, elt;
- st_table *memo;
- st_data_t id;
+ long i;
+ VALUE stack, result, tmp = 0, elt;
+ VALUE memo = Qfalse;
+
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ elt = RARRAY_AREF(ary, i);
+ tmp = rb_check_array_type(elt);
+ if (!NIL_P(tmp)) {
+ break;
+ }
+ }
+ if (i == RARRAY_LEN(ary)) {
+ return ary;
+ }
- stack = ary_new(0, ARY_DEFAULT_SIZE);
result = ary_new(0, RARRAY_LEN(ary));
- memo = st_init_numtable();
- st_insert(memo, (st_data_t)ary, (st_data_t)Qtrue);
- *modified = 0;
+ ary_memcpy(result, 0, i, RARRAY_CONST_PTR(ary));
+ ARY_SET_LEN(result, i);
+
+ stack = ary_new(0, ARY_DEFAULT_SIZE);
+ rb_ary_push(stack, ary);
+ rb_ary_push(stack, LONG2NUM(i + 1));
+
+ if (level < 0) {
+ memo = rb_obj_hide(rb_ident_hash_new());
+ rb_hash_aset(memo, ary, Qtrue);
+ rb_hash_aset(memo, tmp, Qtrue);
+ }
+
+ ary = tmp;
+ i = 0;
while (1) {
- while (i < RARRAY_LEN(ary)) {
- elt = RARRAY_AREF(ary, i++);
- if (level >= 0 && RARRAY_LEN(stack) / 2 >= level) {
- rb_ary_push(result, elt);
- continue;
- }
- tmp = rb_check_array_type(elt);
- if (RBASIC(result)->klass) {
- rb_raise(rb_eRuntimeError, "flatten reentered");
- }
- if (NIL_P(tmp)) {
- rb_ary_push(result, elt);
- }
- else {
- *modified = 1;
- id = (st_data_t)tmp;
- if (st_lookup(memo, id, 0)) {
- st_free_table(memo);
- rb_raise(rb_eArgError, "tried to flatten recursive array");
- }
- st_insert(memo, id, (st_data_t)Qtrue);
- rb_ary_push(stack, ary);
- rb_ary_push(stack, LONG2NUM(i));
- ary = tmp;
- i = 0;
- }
- }
- if (RARRAY_LEN(stack) == 0) {
- break;
- }
- id = (st_data_t)ary;
- st_delete(memo, &id, 0);
- tmp = rb_ary_pop(stack);
- i = NUM2LONG(tmp);
- ary = rb_ary_pop(stack);
- }
-
- st_free_table(memo);
-
- RBASIC_SET_CLASS(result, rb_class_of(ary));
+ while (i < RARRAY_LEN(ary)) {
+ elt = RARRAY_AREF(ary, i++);
+ if (level >= 0 && RARRAY_LEN(stack) / 2 >= level) {
+ rb_ary_push(result, elt);
+ continue;
+ }
+ tmp = rb_check_array_type(elt);
+ if (RBASIC(result)->klass) {
+ if (RTEST(memo)) {
+ rb_hash_clear(memo);
+ }
+ rb_raise(rb_eRuntimeError, "flatten reentered");
+ }
+ if (NIL_P(tmp)) {
+ rb_ary_push(result, elt);
+ }
+ else {
+ if (memo) {
+ if (rb_hash_aref(memo, tmp) == Qtrue) {
+ rb_hash_clear(memo);
+ rb_raise(rb_eArgError, "tried to flatten recursive array");
+ }
+ rb_hash_aset(memo, tmp, Qtrue);
+ }
+ rb_ary_push(stack, ary);
+ rb_ary_push(stack, LONG2NUM(i));
+ ary = tmp;
+ i = 0;
+ }
+ }
+ if (RARRAY_LEN(stack) == 0) {
+ break;
+ }
+ if (memo) {
+ rb_hash_delete(memo, ary);
+ }
+ tmp = rb_ary_pop(stack);
+ i = NUM2LONG(tmp);
+ ary = rb_ary_pop(stack);
+ }
+
+ if (memo) {
+ rb_hash_clear(memo);
+ }
+
+ RBASIC_SET_CLASS(result, rb_cArray);
return result;
}
/*
* call-seq:
- * ary.flatten! -> ary or nil
- * ary.flatten!(level) -> ary or nil
+ * flatten!(depth = nil) -> self or nil
+ *
+ * Returns +self+ as a recursively flattening of +self+ to +depth+ levels of recursion;
+ * +depth+ must be an
+ * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects],
+ * or +nil+.
+ * At each level of recursion:
+ *
+ * - Each element that is an array is "flattened"
+ * (that is, replaced by its individual array elements).
+ * - Each element that is not an array is unchanged
+ * (even if the element is an object that has instance method +flatten+).
*
- * Flattens +self+ in place.
+ * Returns +nil+ if no elements were flattened.
*
- * Returns +nil+ if no modifications were made (i.e., the array contains no
- * subarrays.)
+ * With non-negative integer argument +depth+, flattens recursively through +depth+ levels:
*
- * The optional +level+ argument determines the level of recursion to flatten.
+ * a = [ 0, [ 1, [2, 3], 4 ], 5, {foo: 0}, Set.new([6, 7]) ]
+ * a # => [0, [1, [2, 3], 4], 5, {:foo=>0}, #<Set: {6, 7}>]
+ * a.dup.flatten!(1) # => [0, 1, [2, 3], 4, 5, {:foo=>0}, #<Set: {6, 7}>]
+ * a.dup.flatten!(1.1) # => [0, 1, [2, 3], 4, 5, {:foo=>0}, #<Set: {6, 7}>]
+ * a.dup.flatten!(2) # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #<Set: {6, 7}>]
+ * a.dup.flatten!(3) # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #<Set: {6, 7}>]
*
- * a = [ 1, 2, [3, [4, 5] ] ]
- * a.flatten! #=> [1, 2, 3, 4, 5]
- * a.flatten! #=> nil
- * a #=> [1, 2, 3, 4, 5]
- * a = [ 1, 2, [3, [4, 5] ] ]
- * a.flatten!(1) #=> [1, 2, 3, [4, 5]]
+ * With +nil+ or negative argument +depth+, flattens all levels:
+ *
+ * a.dup.flatten! # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #<Set: {6, 7}>]
+ * a.dup.flatten!(-1) # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #<Set: {6, 7}>]
+ *
+ * Related: Array#flatten;
+ * see also {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
*/
static VALUE
@@ -4475,17 +6752,16 @@ rb_ary_flatten_bang(int argc, VALUE *argv, VALUE ary)
int mod = 0, level = -1;
VALUE result, lv;
- rb_scan_args(argc, argv, "01", &lv);
+ lv = (rb_check_arity(argc, 0, 1) ? argv[0] : Qnil);
rb_ary_modify_check(ary);
if (!NIL_P(lv)) level = NUM2INT(lv);
if (level == 0) return Qnil;
- result = flatten(ary, level, &mod);
- if (mod == 0) {
- ary_discard(result);
- return Qnil;
+ result = flatten(ary, level);
+ if (result == ary) {
+ return Qnil;
}
- if (!(mod = ARY_EMBED_P(result))) rb_obj_freeze(result);
+ if (!(mod = ARY_EMBED_P(result))) rb_ary_freeze(result);
rb_ary_replace(ary, result);
if (mod) ARY_SET_EMBED_LEN(result, 0);
@@ -4494,246 +6770,221 @@ rb_ary_flatten_bang(int argc, VALUE *argv, VALUE ary)
/*
* call-seq:
- * ary.flatten -> new_ary
- * ary.flatten(level) -> new_ary
+ * flatten(depth = nil) -> new_array
+ *
+ * Returns a new array that is a recursive flattening of +self+
+ * to +depth+ levels of recursion;
+ * +depth+ must be an
+ * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects]
+ * or +nil+.
+ * At each level of recursion:
*
- * Returns a new array that is a one-dimensional flattening of +self+
- * (recursively).
+ * - Each element that is an array is "flattened"
+ * (that is, replaced by its individual array elements).
+ * - Each element that is not an array is unchanged
+ * (even if the element is an object that has instance method +flatten+).
*
- * That is, for every element that is an array, extract its elements into
- * the new array.
+ * With non-negative integer argument +depth+, flattens recursively through +depth+ levels:
*
- * The optional +level+ argument determines the level of recursion to
- * flatten.
+ * a = [ 0, [ 1, [2, 3], 4 ], 5, {foo: 0}, Set.new([6, 7]) ]
+ * a # => [0, [1, [2, 3], 4], 5, {:foo=>0}, #<Set: {6, 7}>]
+ * a.flatten(0) # => [0, [1, [2, 3], 4], 5, {:foo=>0}, #<Set: {6, 7}>]
+ * a.flatten(1 ) # => [0, 1, [2, 3], 4, 5, {:foo=>0}, #<Set: {6, 7}>]
+ * a.flatten(1.1) # => [0, 1, [2, 3], 4, 5, {:foo=>0}, #<Set: {6, 7}>]
+ * a.flatten(2) # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #<Set: {6, 7}>]
+ * a.flatten(3) # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #<Set: {6, 7}>]
*
- * s = [ 1, 2, 3 ] #=> [1, 2, 3]
- * t = [ 4, 5, 6, [7, 8] ] #=> [4, 5, 6, [7, 8]]
- * a = [ s, t, 9, 10 ] #=> [[1, 2, 3], [4, 5, 6, [7, 8]], 9, 10]
- * a.flatten #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- * a = [ 1, 2, [3, [4, 5] ] ]
- * a.flatten(1) #=> [1, 2, 3, [4, 5]]
+ * With +nil+ or negative +depth+, flattens all levels.
+ *
+ * a.flatten # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #<Set: {6, 7}>]
+ * a.flatten(-1) # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #<Set: {6, 7}>]
+ *
+ * Related: Array#flatten!;
+ * see also {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting].
*/
static VALUE
rb_ary_flatten(int argc, VALUE *argv, VALUE ary)
{
- int mod = 0, level = -1;
- VALUE result, lv;
+ int level = -1;
+ VALUE result;
- rb_scan_args(argc, argv, "01", &lv);
- if (!NIL_P(lv)) level = NUM2INT(lv);
- if (level == 0) return ary_make_shared_copy(ary);
+ if (rb_check_arity(argc, 0, 1) && !NIL_P(argv[0])) {
+ level = NUM2INT(argv[0]);
+ if (level == 0) return ary_make_shared_copy(ary);
+ }
- result = flatten(ary, level, &mod);
- OBJ_INFECT(result, ary);
+ result = flatten(ary, level);
+ if (result == ary) {
+ result = ary_make_shared_copy(ary);
+ }
return result;
}
-#define OPTHASH_GIVEN_P(opts) \
- (argc > 0 && !NIL_P((opts) = rb_check_hash_type(argv[argc-1])) && (--argc, 1))
-static ID id_random;
-
#define RAND_UPTO(max) (long)rb_random_ulong_limited((randgen), (max)-1)
-/*
- * call-seq:
- * ary.shuffle! -> ary
- * ary.shuffle!(random: rng) -> ary
- *
- * Shuffles elements in +self+ in place.
- *
- * a = [ 1, 2, 3 ] #=> [1, 2, 3]
- * a.shuffle! #=> [2, 3, 1]
- * a #=> [2, 3, 1]
- *
- * The optional +rng+ argument will be used as the random number generator.
- *
- * a.shuffle!(random: Random.new(1)) #=> [1, 3, 2]
- */
-
static VALUE
-rb_ary_shuffle_bang(int argc, VALUE *argv, VALUE ary)
+rb_ary_shuffle_bang(rb_execution_context_t *ec, VALUE ary, VALUE randgen)
{
- VALUE opts, randgen = rb_cRandom;
long i, len;
- if (OPTHASH_GIVEN_P(opts)) {
- VALUE rnd;
- ID keyword_ids[1];
-
- keyword_ids[0] = id_random;
- rb_get_kwargs(opts, keyword_ids, 0, 1, &rnd);
- if (rnd != Qundef) {
- randgen = rnd;
- }
- }
- rb_check_arity(argc, 0, 0);
rb_ary_modify(ary);
i = len = RARRAY_LEN(ary);
RARRAY_PTR_USE(ary, ptr, {
- while (i) {
- long j = RAND_UPTO(i);
- VALUE tmp;
- if (len != RARRAY_LEN(ary) || ptr != RARRAY_CONST_PTR(ary)) {
- rb_raise(rb_eRuntimeError, "modified during shuffle");
- }
- tmp = ptr[--i];
- ptr[i] = ptr[j];
- ptr[j] = tmp;
- }
+ while (i > 1) {
+ long j = RAND_UPTO(i);
+ VALUE tmp;
+ if (len != RARRAY_LEN(ary) || ptr != RARRAY_CONST_PTR(ary)) {
+ rb_raise(rb_eRuntimeError, "modified during shuffle");
+ }
+ tmp = ptr[--i];
+ ptr[i] = ptr[j];
+ ptr[j] = tmp;
+ }
}); /* WB: no new reference */
return ary;
}
-
-/*
- * call-seq:
- * ary.shuffle -> new_ary
- * ary.shuffle(random: rng) -> new_ary
- *
- * Returns a new array with elements of +self+ shuffled.
- *
- * a = [ 1, 2, 3 ] #=> [1, 2, 3]
- * a.shuffle #=> [2, 3, 1]
- * a #=> [1, 2, 3]
- *
- * The optional +rng+ argument will be used as the random number generator.
- *
- * a.shuffle(random: Random.new(1)) #=> [1, 3, 2]
- */
-
static VALUE
-rb_ary_shuffle(int argc, VALUE *argv, VALUE ary)
+rb_ary_shuffle(rb_execution_context_t *ec, VALUE ary, VALUE randgen)
{
ary = rb_ary_dup(ary);
- rb_ary_shuffle_bang(argc, argv, ary);
+ rb_ary_shuffle_bang(ec, ary, randgen);
return ary;
}
-
-/*
- * call-seq:
- * ary.sample -> obj
- * ary.sample(random: rng) -> obj
- * ary.sample(n) -> new_ary
- * ary.sample(n, random: rng) -> new_ary
- *
- * Choose a random element or +n+ random elements from the array.
- *
- * The elements are chosen by using random and unique indices into the array
- * in order to ensure that an element doesn't repeat itself unless the array
- * already contained duplicate elements.
- *
- * If the array is empty the first form returns +nil+ and the second form
- * returns an empty array.
- *
- * The optional +rng+ argument will be used as the random number generator.
- *
- * a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
- * a.sample #=> 7
- * a.sample(4) #=> [6, 4, 2, 5]
- */
-
+static const rb_data_type_t ary_sample_memo_type = {
+ .wrap_struct_name = "ary_sample_memo",
+ .function = {
+ .dfree = (RUBY_DATA_FUNC)st_free_table,
+ },
+ .flags = RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY
+};
static VALUE
-rb_ary_sample(int argc, VALUE *argv, VALUE ary)
+ary_sample(rb_execution_context_t *ec, VALUE ary, VALUE randgen, VALUE nv, VALUE to_array)
{
- VALUE nv, result;
- VALUE opts, randgen = rb_cRandom;
+ VALUE result;
long n, len, i, j, k, idx[10];
long rnds[numberof(idx)];
+ long memo_threshold;
- if (OPTHASH_GIVEN_P(opts)) {
- VALUE rnd;
- ID keyword_ids[1];
-
- keyword_ids[0] = id_random;
- rb_get_kwargs(opts, keyword_ids, 0, 1, &rnd);
- if (rnd != Qundef) {
- randgen = rnd;
- }
- }
len = RARRAY_LEN(ary);
- if (argc == 0) {
- if (len < 2)
- i = 0;
- else
- i = RAND_UPTO(len);
+ if (!to_array) {
+ if (len < 2)
+ i = 0;
+ else
+ i = RAND_UPTO(len);
- return rb_ary_elt(ary, i);
+ return rb_ary_elt(ary, i);
}
- rb_scan_args(argc, argv, "1", &nv);
n = NUM2LONG(nv);
if (n < 0) rb_raise(rb_eArgError, "negative sample number");
if (n > len) n = len;
if (n <= numberof(idx)) {
- for (i = 0; i < n; ++i) {
- rnds[i] = RAND_UPTO(len - i);
- }
+ for (i = 0; i < n; ++i) {
+ rnds[i] = RAND_UPTO(len - i);
+ }
}
k = len;
len = RARRAY_LEN(ary);
if (len < k && n <= numberof(idx)) {
- for (i = 0; i < n; ++i) {
- if (rnds[i] >= len) return rb_ary_new_capa(0);
- }
+ for (i = 0; i < n; ++i) {
+ if (rnds[i] >= len) return rb_ary_new_capa(0);
+ }
}
if (n > len) n = len;
switch (n) {
case 0:
- return rb_ary_new_capa(0);
+ return rb_ary_new_capa(0);
case 1:
- i = rnds[0];
- return rb_ary_new_from_values(1, &RARRAY_AREF(ary, i));
+ i = rnds[0];
+ return rb_ary_new_from_args(1, RARRAY_AREF(ary, i));
case 2:
- i = rnds[0];
- j = rnds[1];
- if (j >= i) j++;
- return rb_ary_new_from_args(2, RARRAY_AREF(ary, i), RARRAY_AREF(ary, j));
+ i = rnds[0];
+ j = rnds[1];
+ if (j >= i) j++;
+ return rb_ary_new_from_args(2, RARRAY_AREF(ary, i), RARRAY_AREF(ary, j));
case 3:
- i = rnds[0];
- j = rnds[1];
- k = rnds[2];
- {
- long l = j, g = i;
- if (j >= i) l = i, g = ++j;
- if (k >= l && (++k >= g)) ++k;
- }
- return rb_ary_new_from_args(3, RARRAY_AREF(ary, i), RARRAY_AREF(ary, j), RARRAY_AREF(ary, k));
+ i = rnds[0];
+ j = rnds[1];
+ k = rnds[2];
+ {
+ long l = j, g = i;
+ if (j >= i) l = i, g = ++j;
+ if (k >= l && (++k >= g)) ++k;
+ }
+ return rb_ary_new_from_args(3, RARRAY_AREF(ary, i), RARRAY_AREF(ary, j), RARRAY_AREF(ary, k));
}
+ memo_threshold =
+ len < 2560 ? len / 128 :
+ len < 5120 ? len / 64 :
+ len < 10240 ? len / 32 :
+ len / 16;
if (n <= numberof(idx)) {
- long sorted[numberof(idx)];
- sorted[0] = idx[0] = rnds[0];
- for (i=1; i<n; i++) {
- k = rnds[i];
- for (j = 0; j < i; ++j) {
- if (k < sorted[j]) break;
- ++k;
- }
- memmove(&sorted[j+1], &sorted[j], sizeof(sorted[0])*(i-j));
- sorted[j] = idx[i] = k;
- }
- result = rb_ary_new_capa(n);
- RARRAY_PTR_USE(result, ptr_result, {
- for (i=0; i<n; i++) {
- ptr_result[i] = RARRAY_AREF(ary, idx[i]);
- }
- });
+ long sorted[numberof(idx)];
+ sorted[0] = idx[0] = rnds[0];
+ for (i=1; i<n; i++) {
+ k = rnds[i];
+ for (j = 0; j < i; ++j) {
+ if (k < sorted[j]) break;
+ ++k;
+ }
+ memmove(&sorted[j+1], &sorted[j], sizeof(sorted[0])*(i-j));
+ sorted[j] = idx[i] = k;
+ }
+ result = rb_ary_new_capa(n);
+ RARRAY_PTR_USE(result, ptr_result, {
+ for (i=0; i<n; i++) {
+ ptr_result[i] = RARRAY_AREF(ary, idx[i]);
+ }
+ });
+ }
+ else if (n <= memo_threshold / 2) {
+ long max_idx = 0;
+ VALUE vmemo = TypedData_Wrap_Struct(0, &ary_sample_memo_type, 0);
+ st_table *memo = st_init_numtable_with_size(n);
+ RTYPEDDATA_DATA(vmemo) = memo;
+ result = rb_ary_new_capa(n);
+ RARRAY_PTR_USE(result, ptr_result, {
+ for (i=0; i<n; i++) {
+ long r = RAND_UPTO(len-i) + i;
+ ptr_result[i] = r;
+ if (r > max_idx) max_idx = r;
+ }
+ len = RARRAY_LEN(ary);
+ if (len <= max_idx) n = 0;
+ else if (n > len) n = len;
+ RARRAY_PTR_USE(ary, ptr_ary, {
+ for (i=0; i<n; i++) {
+ long j2 = j = ptr_result[i];
+ long i2 = i;
+ st_data_t value;
+ if (st_lookup(memo, (st_data_t)i, &value)) i2 = (long)value;
+ if (st_lookup(memo, (st_data_t)j, &value)) j2 = (long)value;
+ st_insert(memo, (st_data_t)j, (st_data_t)i2);
+ ptr_result[i] = ptr_ary[j2];
+ }
+ });
+ });
+ RTYPEDDATA_DATA(vmemo) = 0;
+ st_free_table(memo);
+ RB_GC_GUARD(vmemo);
}
else {
- result = rb_ary_dup(ary);
- RBASIC_CLEAR_CLASS(result);
- RB_GC_GUARD(ary);
- RARRAY_PTR_USE(result, ptr_result, {
- for (i=0; i<n; i++) {
- j = RAND_UPTO(len-i) + i;
- nv = ptr_result[j];
- ptr_result[j] = ptr_result[i];
- ptr_result[i] = nv;
- }
- });
- RBASIC_SET_CLASS_RAW(result, rb_cArray);
+ result = rb_ary_dup(ary);
+ RBASIC_CLEAR_CLASS(result);
+ RB_GC_GUARD(ary);
+ RARRAY_PTR_USE(result, ptr_result, {
+ for (i=0; i<n; i++) {
+ j = RAND_UPTO(len-i) + i;
+ nv = ptr_result[j];
+ ptr_result[j] = ptr_result[i];
+ ptr_result[i] = nv;
+ }
+ });
+ RBASIC_SET_CLASS_RAW(result, rb_cArray);
}
ARY_SET_LEN(result, n);
@@ -4741,55 +6992,79 @@ rb_ary_sample(int argc, VALUE *argv, VALUE ary)
}
static VALUE
+ary_sized_alloc(rb_execution_context_t *ec, VALUE self)
+{
+ return rb_ary_new2(RARRAY_LEN(self));
+}
+
+static VALUE
+ary_sample0(rb_execution_context_t *ec, VALUE ary)
+{
+ return ary_sample(ec, ary, rb_cRandom, Qfalse, Qfalse);
+}
+
+static VALUE
rb_ary_cycle_size(VALUE self, VALUE args, VALUE eobj)
{
long mul;
VALUE n = Qnil;
if (args && (RARRAY_LEN(args) > 0)) {
- n = RARRAY_AREF(args, 0);
+ n = RARRAY_AREF(args, 0);
}
if (RARRAY_LEN(self) == 0) return INT2FIX(0);
- if (n == Qnil) return DBL2NUM(INFINITY);
+ if (NIL_P(n)) return DBL2NUM(HUGE_VAL);
mul = NUM2LONG(n);
if (mul <= 0) return INT2FIX(0);
n = LONG2FIX(mul);
- return rb_funcallv(rb_ary_length(self), '*', 1, &n);
+ return rb_fix_mul_fix(rb_ary_length(self), n);
}
/*
* call-seq:
- * ary.cycle(n=nil) { |obj| block } -> nil
- * ary.cycle(n=nil) -> Enumerator
+ * cycle(count = nil) {|element| ... } -> nil
+ * cycle(count = nil) -> new_enumerator
+ *
+ * With a block given, may call the block, depending on the value of argument +count+;
+ * +count+ must be an
+ * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects],
+ * or +nil+.
+ *
+ * When +count+ is positive,
+ * calls the block with each element, then does so repeatedly,
+ * until it has done so +count+ times; returns +nil+:
*
- * Calls the given block for each element +n+ times or forever if +nil+ is
- * given.
+ * output = []
+ * [0, 1].cycle(2) {|element| output.push(element) } # => nil
+ * output # => [0, 1, 0, 1]
*
- * Does nothing if a non-positive number is given or the array is empty.
+ * When +count+ is zero or negative, does not call the block:
*
- * Returns +nil+ if the loop has finished without getting interrupted.
+ * [0, 1].cycle(0) {|element| fail 'Cannot happen' } # => nil
+ * [0, 1].cycle(-1) {|element| fail 'Cannot happen' } # => nil
*
- * If no block is given, an Enumerator is returned instead.
+ * When +count+ is +nil+, cycles forever:
*
- * a = ["a", "b", "c"]
- * a.cycle { |x| puts x } # print, a, b, c, a, b, c,.. forever.
- * a.cycle(2) { |x| puts x } # print, a, b, c, a, b, c.
+ * # Prints 0 and 1 forever.
+ * [0, 1].cycle {|element| puts element }
+ * [0, 1].cycle(nil) {|element| puts element }
*
+ * With no block given, returns a new Enumerator.
+ *
+ * Related: see {Methods for Iterating}[rdoc-ref:Array@Methods+for+Iterating].
*/
-
static VALUE
rb_ary_cycle(int argc, VALUE *argv, VALUE ary)
{
long n, i;
- VALUE nv = Qnil;
- rb_scan_args(argc, argv, "01", &nv);
+ rb_check_arity(argc, 0, 1);
RETURN_SIZED_ENUMERATOR(ary, argc, argv, rb_ary_cycle_size);
- if (NIL_P(nv)) {
+ if (argc == 0 || NIL_P(argv[0])) {
n = -1;
}
else {
- n = NUM2LONG(nv);
+ n = NUM2LONG(argv[0]);
if (n <= 0) return Qnil;
}
@@ -4801,11 +7076,6 @@ rb_ary_cycle(int argc, VALUE *argv, VALUE ary)
return Qnil;
}
-#define tmpbuf(n, size) rb_str_tmp_new((n)*(size))
-#define tmpbuf_discard(s) (rb_str_resize((s), 0L), RBASIC_SET_CLASS_RAW(s, rb_cString))
-#define tmpary(n) rb_ary_tmp_new(n)
-#define tmpary_discard(a) (ary_discard(a), RBASIC_SET_CLASS_RAW(a, rb_cArray))
-
/*
* Build a ruby array of the corresponding values and yield it to the
* associated block.
@@ -4815,11 +7085,9 @@ static int
yield_indexed_values(const VALUE values, const long r, const long *const p)
{
const VALUE result = rb_ary_new2(r);
- VALUE *const result_array = RARRAY_PTR(result);
- const VALUE *const values_array = RARRAY_CONST_PTR(values);
long i;
- for (i = 0; i < r; i++) result_array[i] = values_array[p[i]];
+ for (i = 0; i < r; i++) ARY_SET(result, i, RARRAY_AREF(values, p[i]));
ARY_SET_LEN(result, r);
rb_yield(result);
return !RBASIC(values)->klass;
@@ -4843,46 +7111,52 @@ permute0(const long n, const long r, long *const p, char *const used, const VALU
long i = 0, index = 0;
for (;;) {
- const char *const unused = memchr(&used[i], 0, n-i);
- if (!unused) {
- if (!index) break;
- i = p[--index]; /* pop index */
- used[i++] = 0; /* index unused */
- }
- else {
- i = unused - used;
- p[index] = i;
- used[i] = 1; /* mark index used */
- ++index;
- if (index < r-1) { /* if not done yet */
- p[index] = i = 0;
- continue;
- }
- for (i = 0; i < n; ++i) {
- if (used[i]) continue;
- p[index] = i;
- if (!yield_indexed_values(values, r, p)) {
- rb_raise(rb_eRuntimeError, "permute reentered");
- }
- }
- i = p[--index]; /* pop index */
- used[i] = 0; /* index unused */
- p[index] = ++i;
- }
+ const char *const unused = memchr(&used[i], 0, n-i);
+ if (!unused) {
+ if (!index) break;
+ i = p[--index]; /* pop index */
+ used[i++] = 0; /* index unused */
+ }
+ else {
+ i = unused - used;
+ p[index] = i;
+ used[i] = 1; /* mark index used */
+ ++index;
+ if (index < r-1) { /* if not done yet */
+ p[index] = i = 0;
+ continue;
+ }
+ for (i = 0; i < n; ++i) {
+ if (used[i]) continue;
+ p[index] = i;
+ if (!yield_indexed_values(values, r, p)) {
+ rb_raise(rb_eRuntimeError, "permute reentered");
+ }
+ }
+ i = p[--index]; /* pop index */
+ used[i] = 0; /* index unused */
+ p[index] = ++i;
+ }
}
}
/*
* Returns the product of from, from-1, ..., from - how_many + 1.
- * http://en.wikipedia.org/wiki/Pochhammer_symbol
+ * https://en.wikipedia.org/wiki/Pochhammer_symbol
*/
static VALUE
descending_factorial(long from, long how_many)
{
- VALUE cnt = LONG2FIX(how_many >= 0);
- while (how_many-- > 0) {
- VALUE v = LONG2FIX(from--);
- cnt = rb_funcallv(cnt, '*', 1, &v);
+ VALUE cnt;
+ if (how_many > 0) {
+ cnt = LONG2FIX(from);
+ while (--how_many > 0) {
+ long v = --from;
+ cnt = rb_int_mul(cnt, LONG2FIX(v));
+ }
+ }
+ else {
+ cnt = LONG2FIX(how_many == 0);
}
return cnt;
}
@@ -4890,16 +7164,23 @@ descending_factorial(long from, long how_many)
static VALUE
binomial_coefficient(long comb, long size)
{
- VALUE r, v;
+ VALUE r;
+ long i;
if (comb > size-comb) {
- comb = size-comb;
+ comb = size-comb;
}
if (comb < 0) {
- return LONG2FIX(0);
+ return LONG2FIX(0);
+ }
+ else if (comb == 0) {
+ return LONG2FIX(1);
}
- r = descending_factorial(size, comb);
- v = descending_factorial(comb, comb);
- return rb_funcallv(r, id_div, 1, &v);
+ r = LONG2FIX(size);
+ for (i = 1; i < comb; ++i) {
+ r = rb_int_mul(r, LONG2FIX(size - i));
+ r = rb_int_idiv(r, LONG2FIX(i + 1));
+ }
+ return r;
}
static VALUE
@@ -4913,66 +7194,80 @@ rb_ary_permutation_size(VALUE ary, VALUE args, VALUE eobj)
/*
* call-seq:
- * ary.permutation { |p| block } -> ary
- * ary.permutation -> Enumerator
- * ary.permutation(n) { |p| block } -> ary
- * ary.permutation(n) -> Enumerator
+ * permutation(count = self.size) {|permutation| ... } -> self
+ * permutation(count = self.size) -> new_enumerator
+ *
+ * Iterates over permutations of the elements of +self+;
+ * the order of permutations is indeterminate.
+ *
+ * With a block and an in-range positive integer argument +count+ (<tt>0 < count <= self.size</tt>) given,
+ * calls the block with each permutation of +self+ of size +count+;
+ * returns +self+:
*
- * When invoked with a block, yield all permutations of length +n+ of the
- * elements of the array, then return the array itself.
+ * a = [0, 1, 2]
+ * perms = []
+ * a.permutation(1) {|perm| perms.push(perm) }
+ * perms # => [[0], [1], [2]]
*
- * If +n+ is not specified, yield all permutations of all elements.
+ * perms = []
+ * a.permutation(2) {|perm| perms.push(perm) }
+ * perms # => [[0, 1], [0, 2], [1, 0], [1, 2], [2, 0], [2, 1]]
*
- * The implementation makes no guarantees about the order in which the
- * permutations are yielded.
+ * perms = []
+ * a.permutation(3) {|perm| perms.push(perm) }
+ * perms # => [[0, 1, 2], [0, 2, 1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]]
*
- * If no block is given, an Enumerator is returned instead.
+ * When +count+ is zero, calls the block once with a new empty array:
*
- * Examples:
+ * perms = []
+ * a.permutation(0) {|perm| perms.push(perm) }
+ * perms # => [[]]
*
- * a = [1, 2, 3]
- * a.permutation.to_a #=> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
- * a.permutation(1).to_a #=> [[1],[2],[3]]
- * a.permutation(2).to_a #=> [[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]]
- * a.permutation(3).to_a #=> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
- * a.permutation(0).to_a #=> [[]] # one permutation of length 0
- * a.permutation(4).to_a #=> [] # no permutations of length 4
+ * When +count+ is out of range (negative or larger than <tt>self.size</tt>),
+ * does not call the block:
+ *
+ * a.permutation(-1) {|permutation| fail 'Cannot happen' }
+ * a.permutation(4) {|permutation| fail 'Cannot happen' }
+ *
+ * With no block given, returns a new Enumerator.
+ *
+ * Related: {Methods for Iterating}[rdoc-ref:Array@Methods+for+Iterating].
*/
static VALUE
rb_ary_permutation(int argc, VALUE *argv, VALUE ary)
{
- VALUE num;
long r, n, i;
n = RARRAY_LEN(ary); /* Array length */
RETURN_SIZED_ENUMERATOR(ary, argc, argv, rb_ary_permutation_size); /* Return enumerator if no block */
- rb_scan_args(argc, argv, "01", &num);
- r = NIL_P(num) ? n : NUM2LONG(num); /* Permutation size from argument */
+ r = n;
+ if (rb_check_arity(argc, 0, 1) && !NIL_P(argv[0]))
+ r = NUM2LONG(argv[0]); /* Permutation size from argument */
if (r < 0 || n < r) {
- /* no permutations: yield nothing */
+ /* no permutations: yield nothing */
}
else if (r == 0) { /* exactly one permutation: the zero-length array */
- rb_yield(rb_ary_new2(0));
+ rb_yield(rb_ary_new2(0));
}
else if (r == 1) { /* this is a special, easy case */
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
- }
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
+ }
}
else { /* this is the general case */
- volatile VALUE t0;
- long *p = ALLOCV_N(long, t0, r+roomof(n, sizeof(long)));
- char *used = (char*)(p + r);
- VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
- RBASIC_CLEAR_CLASS(ary0);
+ volatile VALUE t0;
+ long *p = ALLOCV_N(long, t0, r+roomof(n, sizeof(long)));
+ char *used = (char*)(p + r);
+ VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
+ RBASIC_CLEAR_CLASS(ary0);
- MEMZERO(used, char, n); /* initialize array */
+ MEMZERO(used, char, n); /* initialize array */
- permute0(n, r, p, used, ary0); /* compute and yield permutations */
- ALLOCV_END(t0);
- RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
+ permute0(n, r, p, used, ary0); /* compute and yield permutations */
+ ALLOCV_END(t0);
+ RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
}
return ary;
}
@@ -4985,16 +7280,16 @@ combinate0(const long len, const long n, long *const stack, const VALUE values)
MEMZERO(stack+1, long, n);
stack[0] = -1;
for (;;) {
- for (lev++; lev < n; lev++) {
- stack[lev+1] = stack[lev]+1;
- }
- if (!yield_indexed_values(values, n, stack+1)) {
- rb_raise(rb_eRuntimeError, "combination reentered");
- }
- do {
- if (lev == 0) return;
- stack[lev--]++;
- } while (stack[lev+1]+n == len+lev+1);
+ for (lev++; lev < n; lev++) {
+ stack[lev+1] = stack[lev]+1;
+ }
+ if (!yield_indexed_values(values, n, stack+1)) {
+ rb_raise(rb_eRuntimeError, "combination reentered");
+ }
+ do {
+ if (lev == 0) return;
+ stack[lev--]++;
+ } while (stack[lev+1]+n == len+lev+1);
}
}
@@ -5009,27 +7304,46 @@ rb_ary_combination_size(VALUE ary, VALUE args, VALUE eobj)
/*
* call-seq:
- * ary.combination(n) { |c| block } -> ary
- * ary.combination(n) -> Enumerator
+ * combination(count) {|element| ... } -> self
+ * combination(count) -> new_enumerator
*
- * When invoked with a block, yields all combinations of length +n+ of elements
- * from the array and then returns the array itself.
+ * When a block and a positive
+ * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects]
+ * argument +count+ (<tt>0 < count <= self.size</tt>)
+ * are given, calls the block with each combination of +self+ of size +count+;
+ * returns +self+:
*
- * The implementation makes no guarantees about the order in which the
- * combinations are yielded.
+ * a = %w[a b c] # => ["a", "b", "c"]
+ * a.combination(2) {|combination| p combination } # => ["a", "b", "c"]
*
- * If no block is given, an Enumerator is returned instead.
+ * Output:
*
- * Examples:
+ * ["a", "b"]
+ * ["a", "c"]
+ * ["b", "c"]
*
- * a = [1, 2, 3, 4]
- * a.combination(1).to_a #=> [[1],[2],[3],[4]]
- * a.combination(2).to_a #=> [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
- * a.combination(3).to_a #=> [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]
- * a.combination(4).to_a #=> [[1,2,3,4]]
- * a.combination(0).to_a #=> [[]] # one combination of length 0
- * a.combination(5).to_a #=> [] # no combinations of length 5
+ * The order of the yielded combinations is not guaranteed.
*
+ * When +count+ is zero, calls the block once with a new empty array:
+ *
+ * a.combination(0) {|combination| p combination }
+ * [].combination(0) {|combination| p combination }
+ *
+ * Output:
+ *
+ * []
+ * []
+ *
+ * When +count+ is negative or larger than +self.size+ and +self+ is non-empty,
+ * does not call the block:
+ *
+ * a.combination(-1) {|combination| fail 'Cannot happen' } # => ["a", "b", "c"]
+ * a.combination(4) {|combination| fail 'Cannot happen' } # => ["a", "b", "c"]
+ *
+ * With no block given, returns a new Enumerator.
+ *
+ * Related: Array#permutation;
+ * see also {Methods for Iterating}[rdoc-ref:Array@Methods+for+Iterating].
*/
static VALUE
@@ -5041,25 +7355,25 @@ rb_ary_combination(VALUE ary, VALUE num)
RETURN_SIZED_ENUMERATOR(ary, 1, &num, rb_ary_combination_size);
len = RARRAY_LEN(ary);
if (n < 0 || len < n) {
- /* yield nothing */
+ /* yield nothing */
}
else if (n == 0) {
- rb_yield(rb_ary_new2(0));
+ rb_yield(rb_ary_new2(0));
}
else if (n == 1) {
- for (i = 0; i < len; i++) {
- rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
- }
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
+ }
}
else {
- VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
- volatile VALUE t0;
- long *stack = ALLOCV_N(long, t0, n+1);
+ VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
+ volatile VALUE t0;
+ long *stack = ALLOCV_N(long, t0, n+1);
- RBASIC_CLEAR_CLASS(ary0);
- combinate0(len, n, stack, ary0);
- ALLOCV_END(t0);
- RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
+ RBASIC_CLEAR_CLASS(ary0);
+ combinate0(len, n, stack, ary0);
+ ALLOCV_END(t0);
+ RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
}
return ary;
}
@@ -5083,19 +7397,19 @@ rpermute0(const long n, const long r, long *const p, const VALUE values)
p[index] = i;
for (;;) {
- if (++index < r-1) {
- p[index] = i = 0;
- continue;
- }
- for (i = 0; i < n; ++i) {
- p[index] = i;
- if (!yield_indexed_values(values, r, p)) {
- rb_raise(rb_eRuntimeError, "repeated permute reentered");
- }
- }
- do {
- if (index <= 0) return;
- } while ((i = ++p[--index]) >= n);
+ if (++index < r-1) {
+ p[index] = i = 0;
+ continue;
+ }
+ for (i = 0; i < n; ++i) {
+ p[index] = i;
+ if (!yield_indexed_values(values, r, p)) {
+ rb_raise(rb_eRuntimeError, "repeated permute reentered");
+ }
+ }
+ do {
+ if (index <= 0) return;
+ } while ((i = ++p[--index]) >= n);
}
}
@@ -5104,39 +7418,54 @@ rb_ary_repeated_permutation_size(VALUE ary, VALUE args, VALUE eobj)
{
long n = RARRAY_LEN(ary);
long k = NUM2LONG(RARRAY_AREF(args, 0));
- VALUE v;
if (k < 0) {
- return LONG2FIX(0);
+ return LONG2FIX(0);
}
-
- v = LONG2NUM(k);
- return rb_funcallv(LONG2NUM(n), id_power, 1, &v);
+ if (n <= 0) {
+ return LONG2FIX(!k);
+ }
+ return rb_int_positive_pow(n, (unsigned long)k);
}
/*
* call-seq:
- * ary.repeated_permutation(n) { |p| block } -> ary
- * ary.repeated_permutation(n) -> Enumerator
+ * repeated_permutation(size) {|permutation| ... } -> self
+ * repeated_permutation(size) -> new_enumerator
*
- * When invoked with a block, yield all repeated permutations of length +n+ of
- * the elements of the array, then return the array itself.
+ * With a block given, calls the block with each repeated permutation of length +size+
+ * of the elements of +self+;
+ * each permutation is an array;
+ * returns +self+. The order of the permutations is indeterminate.
*
- * The implementation makes no guarantees about the order in which the repeated
- * permutations are yielded.
+ * If a positive integer argument +size+ is given,
+ * calls the block with each +size+-tuple repeated permutation of the elements of +self+.
+ * The number of permutations is <tt>self.size**size</tt>.
*
- * If no block is given, an Enumerator is returned instead.
+ * Examples:
*
- * Examples:
+ * - +size+ is 1:
*
- * a = [1, 2]
- * a.repeated_permutation(1).to_a #=> [[1], [2]]
- * a.repeated_permutation(2).to_a #=> [[1,1],[1,2],[2,1],[2,2]]
- * a.repeated_permutation(3).to_a #=> [[1,1,1],[1,1,2],[1,2,1],[1,2,2],
- * # [2,1,1],[2,1,2],[2,2,1],[2,2,2]]
- * a.repeated_permutation(0).to_a #=> [[]] # one permutation of length 0
+ * p = []
+ * [0, 1, 2].repeated_permutation(1) {|permutation| p.push(permutation) }
+ * p # => [[0], [1], [2]]
+ *
+ * - +size+ is 2:
+ *
+ * p = []
+ * [0, 1, 2].repeated_permutation(2) {|permutation| p.push(permutation) }
+ * p # => [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
+ *
+ * If +size+ is zero, calls the block once with an empty array.
+ *
+ * If +size+ is negative, does not call the block:
+ *
+ * [0, 1, 2].repeated_permutation(-1) {|permutation| fail 'Cannot happen' }
+ *
+ * With no block given, returns a new Enumerator.
+ *
+ * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining].
*/
-
static VALUE
rb_ary_repeated_permutation(VALUE ary, VALUE num)
{
@@ -5147,25 +7476,25 @@ rb_ary_repeated_permutation(VALUE ary, VALUE num)
r = NUM2LONG(num); /* Permutation size from argument */
if (r < 0) {
- /* no permutations: yield nothing */
+ /* no permutations: yield nothing */
}
else if (r == 0) { /* exactly one permutation: the zero-length array */
- rb_yield(rb_ary_new2(0));
+ rb_yield(rb_ary_new2(0));
}
else if (r == 1) { /* this is a special, easy case */
- for (i = 0; i < RARRAY_LEN(ary); i++) {
- rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
- }
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
+ }
}
else { /* this is the general case */
- volatile VALUE t0;
- long *p = ALLOCV_N(long, t0, r);
- VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
- RBASIC_CLEAR_CLASS(ary0);
+ volatile VALUE t0;
+ long *p = ALLOCV_N(long, t0, r);
+ VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
+ RBASIC_CLEAR_CLASS(ary0);
- rpermute0(n, r, p, ary0); /* compute and yield repeated permutations */
- ALLOCV_END(t0);
- RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
+ rpermute0(n, r, p, ary0); /* compute and yield repeated permutations */
+ ALLOCV_END(t0);
+ RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
}
return ary;
}
@@ -5177,19 +7506,19 @@ rcombinate0(const long n, const long r, long *const p, const long rest, const VA
p[index] = i;
for (;;) {
- if (++index < r-1) {
- p[index] = i;
- continue;
- }
- for (; i < n; ++i) {
- p[index] = i;
- if (!yield_indexed_values(values, r, p)) {
- rb_raise(rb_eRuntimeError, "repeated combination reentered");
- }
- }
- do {
- if (index <= 0) return;
- } while ((i = ++p[--index]) >= n);
+ if (++index < r-1) {
+ p[index] = i;
+ continue;
+ }
+ for (; i < n; ++i) {
+ p[index] = i;
+ if (!yield_indexed_values(values, r, p)) {
+ rb_raise(rb_eRuntimeError, "repeated combination reentered");
+ }
+ }
+ do {
+ if (index <= 0) return;
+ } while ((i = ++p[--index]) >= n);
}
}
@@ -5199,36 +7528,48 @@ rb_ary_repeated_combination_size(VALUE ary, VALUE args, VALUE eobj)
long n = RARRAY_LEN(ary);
long k = NUM2LONG(RARRAY_AREF(args, 0));
if (k == 0) {
- return LONG2FIX(1);
+ return LONG2FIX(1);
}
return binomial_coefficient(k, n + k - 1);
}
/*
* call-seq:
- * ary.repeated_combination(n) { |c| block } -> ary
- * ary.repeated_combination(n) -> Enumerator
+ * repeated_combination(size) {|combination| ... } -> self
+ * repeated_combination(size) -> new_enumerator
+ *
+ * With a block given, calls the block with each repeated combination of length +size+
+ * of the elements of +self+;
+ * each combination is an array;
+ * returns +self+. The order of the combinations is indeterminate.
+ *
+ * If a positive integer argument +size+ is given,
+ * calls the block with each +size+-tuple repeated combination of the elements of +self+.
+ * The number of combinations is <tt>(size+1)(size+2)/2</tt>.
*
- * When invoked with a block, yields all repeated combinations of length +n+ of
- * elements from the array and then returns the array itself.
+ * Examples:
*
- * The implementation makes no guarantees about the order in which the repeated
- * combinations are yielded.
+ * - +size+ is 1:
*
- * If no block is given, an Enumerator is returned instead.
+ * c = []
+ * [0, 1, 2].repeated_combination(1) {|combination| c.push(combination) }
+ * c # => [[0], [1], [2]]
*
- * Examples:
+ * - +size+ is 2:
*
- * a = [1, 2, 3]
- * a.repeated_combination(1).to_a #=> [[1], [2], [3]]
- * a.repeated_combination(2).to_a #=> [[1,1],[1,2],[1,3],[2,2],[2,3],[3,3]]
- * a.repeated_combination(3).to_a #=> [[1,1,1],[1,1,2],[1,1,3],[1,2,2],[1,2,3],
- * # [1,3,3],[2,2,2],[2,2,3],[2,3,3],[3,3,3]]
- * a.repeated_combination(4).to_a #=> [[1,1,1,1],[1,1,1,2],[1,1,1,3],[1,1,2,2],[1,1,2,3],
- * # [1,1,3,3],[1,2,2,2],[1,2,2,3],[1,2,3,3],[1,3,3,3],
- * # [2,2,2,2],[2,2,2,3],[2,2,3,3],[2,3,3,3],[3,3,3,3]]
- * a.repeated_combination(0).to_a #=> [[]] # one combination of length 0
+ * c = []
+ * [0, 1, 2].repeated_combination(2) {|combination| c.push(combination) }
+ * c # => [[0, 0], [0, 1], [0, 2], [1, 1], [1, 2], [2, 2]]
*
+ * If +size+ is zero, calls the block once with an empty array.
+ *
+ * If +size+ is negative, does not call the block:
+ *
+ * [0, 1, 2].repeated_combination(-1) {|combination| fail 'Cannot happen' }
+ *
+ * With no block given, returns a new Enumerator.
+ *
+ * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining].
*/
static VALUE
@@ -5240,67 +7581,98 @@ rb_ary_repeated_combination(VALUE ary, VALUE num)
RETURN_SIZED_ENUMERATOR(ary, 1, &num, rb_ary_repeated_combination_size); /* Return enumerator if no block */
len = RARRAY_LEN(ary);
if (n < 0) {
- /* yield nothing */
+ /* yield nothing */
}
else if (n == 0) {
- rb_yield(rb_ary_new2(0));
+ rb_yield(rb_ary_new2(0));
}
else if (n == 1) {
- for (i = 0; i < len; i++) {
- rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
- }
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
+ }
}
else if (len == 0) {
- /* yield nothing */
+ /* yield nothing */
}
else {
- volatile VALUE t0;
- long *p = ALLOCV_N(long, t0, n);
- VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
- RBASIC_CLEAR_CLASS(ary0);
+ volatile VALUE t0;
+ long *p = ALLOCV_N(long, t0, n);
+ VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
+ RBASIC_CLEAR_CLASS(ary0);
- rcombinate0(len, n, p, n, ary0); /* compute and yield repeated combinations */
- ALLOCV_END(t0);
- RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
+ rcombinate0(len, n, p, n, ary0); /* compute and yield repeated combinations */
+ ALLOCV_END(t0);
+ RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
}
return ary;
}
/*
* call-seq:
- * ary.product(other_ary, ...) -> new_ary
- * ary.product(other_ary, ...) { |p| block } -> ary
+ * product(*other_arrays) -> new_array
+ * product(*other_arrays) {|combination| ... } -> self
+ *
+ * Computes all combinations of elements from all the arrays,
+ * including both +self+ and +other_arrays+:
+ *
+ * - The number of combinations is the product of the sizes of all the arrays,
+ * including both +self+ and +other_arrays+.
+ * - The order of the returned combinations is indeterminate.
+ *
+ * With no block given, returns the combinations as an array of arrays:
+ *
+ * p = [0, 1].product([2, 3])
+ * # => [[0, 2], [0, 3], [1, 2], [1, 3]]
+ * p.size # => 4
+ * p = [0, 1].product([2, 3], [4, 5])
+ * # => [[0, 2, 4], [0, 2, 5], [0, 3, 4], [0, 3, 5], [1, 2, 4], [1, 2, 5], [1, 3, 4], [1, 3,...
+ * p.size # => 8
+ *
+ * If +self+ or any argument is empty, returns an empty array:
+ *
+ * [].product([2, 3], [4, 5]) # => []
+ * [0, 1].product([2, 3], []) # => []
+ *
+ * If no argument is given, returns an array of 1-element arrays,
+ * each containing an element of +self+:
+ *
+ * a.product # => [[0], [1], [2]]
+ *
+ * With a block given, calls the block with each combination; returns +self+:
+ *
+ * p = []
+ * [0, 1].product([2, 3]) {|combination| p.push(combination) }
+ * p # => [[0, 2], [0, 3], [1, 2], [1, 3]]
*
- * Returns an array of all combinations of elements from all arrays.
+ * If +self+ or any argument is empty, does not call the block:
*
- * The length of the returned array is the product of the length of +self+ and
- * the argument arrays.
+ * [].product([2, 3], [4, 5]) {|combination| fail 'Cannot happen' }
+ * # => []
+ * [0, 1].product([2, 3], []) {|combination| fail 'Cannot happen' }
+ * # => [0, 1]
*
- * If given a block, #product will yield all combinations and return +self+
- * instead.
+ * If no argument is given, calls the block with each element of +self+ as a 1-element array:
*
- * [1,2,3].product([4,5]) #=> [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]
- * [1,2].product([1,2]) #=> [[1,1],[1,2],[2,1],[2,2]]
- * [1,2].product([3,4],[5,6]) #=> [[1,3,5],[1,3,6],[1,4,5],[1,4,6],
- * # [2,3,5],[2,3,6],[2,4,5],[2,4,6]]
- * [1,2].product() #=> [[1],[2]]
- * [1,2].product([]) #=> []
+ * p = []
+ * [0, 1].product {|combination| p.push(combination) }
+ * p # => [[0], [1]]
+ *
+ * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining].
*/
static VALUE
rb_ary_product(int argc, VALUE *argv, VALUE ary)
{
int n = argc+1; /* How many arrays we're operating on */
- volatile VALUE t0 = tmpary(n);
- volatile VALUE t1 = tmpbuf(n, sizeof(int));
+ volatile VALUE t0 = rb_ary_hidden_new(n);
+ volatile VALUE t1 = Qundef;
VALUE *arrays = RARRAY_PTR(t0); /* The arrays we're computing the product of */
- int *counters = (int*)RSTRING_PTR(t1); /* The current position in each one */
+ int *counters = ALLOCV_N(int, t1, n); /* The current position in each one */
VALUE result = Qnil; /* The array we'll be returning, when no block given */
long i,j;
long resultlen = 1;
RBASIC_CLEAR_CLASS(t0);
- RBASIC_CLEAR_CLASS(t1);
/* initialize the arrays of arrays */
ARY_SET_LEN(t0, n);
@@ -5313,82 +7685,85 @@ rb_ary_product(int argc, VALUE *argv, VALUE ary)
/* Otherwise, allocate and fill in an array of results */
if (rb_block_given_p()) {
- /* Make defensive copies of arrays; exit if any is empty */
- for (i = 0; i < n; i++) {
- if (RARRAY_LEN(arrays[i]) == 0) goto done;
- arrays[i] = ary_make_shared_copy(arrays[i]);
- }
+ /* Make defensive copies of arrays; exit if any is empty */
+ for (i = 0; i < n; i++) {
+ if (RARRAY_LEN(arrays[i]) == 0) goto done;
+ arrays[i] = ary_make_shared_copy(arrays[i]);
+ }
}
else {
- /* Compute the length of the result array; return [] if any is empty */
- for (i = 0; i < n; i++) {
- long k = RARRAY_LEN(arrays[i]);
- if (k == 0) {
- result = rb_ary_new2(0);
- goto done;
- }
+ /* Compute the length of the result array; return [] if any is empty */
+ for (i = 0; i < n; i++) {
+ long k = RARRAY_LEN(arrays[i]);
+ if (k == 0) {
+ result = rb_ary_new2(0);
+ goto done;
+ }
if (MUL_OVERFLOW_LONG_P(resultlen, k))
- rb_raise(rb_eRangeError, "too big to product");
- resultlen *= k;
- }
- result = rb_ary_new2(resultlen);
+ rb_raise(rb_eRangeError, "too big to product");
+ resultlen *= k;
+ }
+ result = rb_ary_new2(resultlen);
}
for (;;) {
- int m;
- /* fill in one subarray */
- VALUE subarray = rb_ary_new2(n);
- for (j = 0; j < n; j++) {
- rb_ary_push(subarray, rb_ary_entry(arrays[j], counters[j]));
- }
-
- /* put it on the result array */
- if (NIL_P(result)) {
- FL_SET(t0, FL_USER5);
- rb_yield(subarray);
- if (! FL_TEST(t0, FL_USER5)) {
- rb_raise(rb_eRuntimeError, "product reentered");
- }
- else {
- FL_UNSET(t0, FL_USER5);
- }
- }
- else {
- rb_ary_push(result, subarray);
- }
-
- /*
- * Increment the last counter. If it overflows, reset to 0
- * and increment the one before it.
- */
- m = n-1;
- counters[m]++;
- while (counters[m] == RARRAY_LEN(arrays[m])) {
- counters[m] = 0;
- /* If the first counter overflows, we are done */
- if (--m < 0) goto done;
- counters[m]++;
- }
+ int m;
+ /* fill in one subarray */
+ VALUE subarray = rb_ary_new2(n);
+ for (j = 0; j < n; j++) {
+ rb_ary_push(subarray, rb_ary_entry(arrays[j], counters[j]));
+ }
+
+ /* put it on the result array */
+ if (NIL_P(result)) {
+ FL_SET(t0, RARRAY_SHARED_ROOT_FLAG);
+ rb_yield(subarray);
+ if (!FL_TEST(t0, RARRAY_SHARED_ROOT_FLAG)) {
+ rb_raise(rb_eRuntimeError, "product reentered");
+ }
+ else {
+ FL_UNSET(t0, RARRAY_SHARED_ROOT_FLAG);
+ }
+ }
+ else {
+ rb_ary_push(result, subarray);
+ }
+
+ /*
+ * Increment the last counter. If it overflows, reset to 0
+ * and increment the one before it.
+ */
+ m = n-1;
+ counters[m]++;
+ while (counters[m] == RARRAY_LEN(arrays[m])) {
+ counters[m] = 0;
+ /* If the first counter overflows, we are done */
+ if (--m < 0) goto done;
+ counters[m]++;
+ }
}
+
done:
- tmpary_discard(t0);
- tmpbuf_discard(t1);
+ ALLOCV_END(t1);
return NIL_P(result) ? ary : result;
}
/*
* call-seq:
- * ary.take(n) -> new_ary
- *
- * Returns first +n+ elements from the array.
+ * take(count) -> new_array
*
- * If a negative number is given, raises an ArgumentError.
+ * Returns a new array containing the first +count+ element of +self+
+ * (as available);
+ * +count+ must be a non-negative numeric;
+ * does not modify +self+:
*
- * See also Array#drop
- *
- * a = [1, 2, 3, 4, 5, 0]
- * a.take(3) #=> [1, 2, 3]
+ * a = ['a', 'b', 'c', 'd']
+ * a.take(2) # => ["a", "b"]
+ * a.take(2.1) # => ["a", "b"]
+ * a.take(50) # => ["a", "b", "c", "d"]
+ * a.take(0) # => []
*
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
static VALUE
@@ -5396,26 +7771,30 @@ rb_ary_take(VALUE obj, VALUE n)
{
long len = NUM2LONG(n);
if (len < 0) {
- rb_raise(rb_eArgError, "attempt to take negative size");
+ rb_raise(rb_eArgError, "attempt to take negative size");
}
return rb_ary_subseq(obj, 0, len);
}
/*
* call-seq:
- * ary.take_while { |obj| block } -> new_ary
- * ary.take_while -> Enumerator
+ * take_while {|element| ... } -> new_array
+ * take_while -> new_enumerator
*
- * Passes elements to the block until the block returns +nil+ or +false+, then
- * stops iterating and returns an array of all prior elements.
+ * With a block given, calls the block with each successive element of +self+;
+ * stops iterating if the block returns +false+ or +nil+;
+ * returns a new array containing those elements for which the block returned a truthy value:
*
- * If no block is given, an Enumerator is returned instead.
+ * a = [0, 1, 2, 3, 4, 5]
+ * a.take_while {|element| element < 3 } # => [0, 1, 2]
+ * a.take_while {|element| true } # => [0, 1, 2, 3, 4, 5]
+ * a.take_while {|element| false } # => []
*
- * See also Array#drop_while
+ * With no block given, returns a new Enumerator.
*
- * a = [1, 2, 3, 4, 5, 0]
- * a.take_while { |i| i < 3 } #=> [1, 2]
+ * Does not modify +self+.
*
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
static VALUE
@@ -5425,25 +7804,28 @@ rb_ary_take_while(VALUE ary)
RETURN_ENUMERATOR(ary, 0, 0);
for (i = 0; i < RARRAY_LEN(ary); i++) {
- if (!RTEST(rb_yield(RARRAY_AREF(ary, i)))) break;
+ if (!RTEST(rb_yield(RARRAY_AREF(ary, i)))) break;
}
return rb_ary_take(ary, LONG2FIX(i));
}
/*
* call-seq:
- * ary.drop(n) -> new_ary
- *
- * Drops first +n+ elements from +ary+ and returns the rest of the elements in
- * an array.
+ * drop(count) -> new_array
*
- * If a negative number is given, raises an ArgumentError.
+ * Returns a new array containing all but the first +count+ element of +self+,
+ * where +count+ is a non-negative integer;
+ * does not modify +self+.
*
- * See also Array#take
+ * Examples:
*
- * a = [1, 2, 3, 4, 5, 0]
- * a.drop(3) #=> [4, 5, 0]
+ * a = [0, 1, 2, 3, 4, 5]
+ * a.drop(0) # => [0, 1, 2, 3, 4, 5]
+ * a.drop(1) # => [1, 2, 3, 4, 5]
+ * a.drop(2) # => [2, 3, 4, 5]
+ * a.drop(9) # => []
*
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
static VALUE
@@ -5452,30 +7834,30 @@ rb_ary_drop(VALUE ary, VALUE n)
VALUE result;
long pos = NUM2LONG(n);
if (pos < 0) {
- rb_raise(rb_eArgError, "attempt to drop negative size");
+ rb_raise(rb_eArgError, "attempt to drop negative size");
}
result = rb_ary_subseq(ary, pos, RARRAY_LEN(ary));
- if (result == Qnil) result = rb_ary_new();
+ if (NIL_P(result)) result = rb_ary_new();
return result;
}
/*
* call-seq:
- * ary.drop_while { |obj| block } -> new_ary
- * ary.drop_while -> Enumerator
+ * drop_while {|element| ... } -> new_array
+ * drop_while -> new_enumerator
*
- * Drops elements up to, but not including, the first element for which the
- * block returns +nil+ or +false+ and returns an array containing the
- * remaining elements.
+ * With a block given, calls the block with each successive element of +self+;
+ * stops if the block returns +false+ or +nil+;
+ * returns a new array _omitting_ those elements for which the block returned a truthy value;
+ * does not modify +self+:
*
- * If no block is given, an Enumerator is returned instead.
+ * a = [0, 1, 2, 3, 4, 5]
+ * a.drop_while {|element| element < 3 } # => [3, 4, 5]
*
- * See also Array#take_while
- *
- * a = [1, 2, 3, 4, 5, 0]
- * a.drop_while {|i| i < 3 } #=> [3, 4, 5, 0]
+ * With no block given, returns a new Enumerator.
*
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
*/
static VALUE
@@ -5485,53 +7867,301 @@ rb_ary_drop_while(VALUE ary)
RETURN_ENUMERATOR(ary, 0, 0);
for (i = 0; i < RARRAY_LEN(ary); i++) {
- if (!RTEST(rb_yield(RARRAY_AREF(ary, i)))) break;
+ if (!RTEST(rb_yield(RARRAY_AREF(ary, i)))) break;
}
return rb_ary_drop(ary, LONG2FIX(i));
}
/*
* call-seq:
- * ary.any? [{ |obj| block }] -> true or false
+ * any? -> true or false
+ * any?(object) -> true or false
+ * any? {|element| ... } -> true or false
+ *
+ * Returns whether for any element of +self+, a given criterion is satisfied.
+ *
+ * With no block and no argument, returns whether any element of +self+ is truthy:
+ *
+ * [nil, false, []].any? # => true # Array object is truthy.
+ * [nil, false, {}].any? # => true # Hash object is truthy.
+ * [nil, false, ''].any? # => true # String object is truthy.
+ * [nil, false].any? # => false # Nil and false are not truthy.
*
- * See also Enumerable#any?
+ * With argument +object+ given,
+ * returns whether <tt>object === ele</tt> for any element +ele+ in +self+:
+ *
+ * [nil, false, 0].any?(0) # => true
+ * [nil, false, 1].any?(0) # => false
+ * [nil, false, 'food'].any?(/foo/) # => true
+ * [nil, false, 'food'].any?(/bar/) # => false
+ *
+ * With a block given,
+ * calls the block with each element in +self+;
+ * returns whether the block returns any truthy value:
+ *
+ * [0, 1, 2].any? {|ele| ele < 1 } # => true
+ * [0, 1, 2].any? {|ele| ele < 0 } # => false
+ *
+ * With both a block and argument +object+ given,
+ * ignores the block and uses +object+ as above.
+ *
+ * <b>Special case</b>: returns +false+ if +self+ is empty
+ * (regardless of any given argument or block).
+ *
+ * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
*/
static VALUE
-rb_ary_any_p(VALUE ary)
+rb_ary_any_p(int argc, VALUE *argv, VALUE ary)
{
long i, len = RARRAY_LEN(ary);
- const VALUE *ptr = RARRAY_CONST_PTR(ary);
+ rb_check_arity(argc, 0, 1);
if (!len) return Qfalse;
- if (!rb_block_given_p()) {
- for (i = 0; i < len; ++i) if (RTEST(ptr[i])) return Qtrue;
+ if (argc) {
+ if (rb_block_given_p()) {
+ rb_warn("given block not used");
+ }
+ for (i = 0; i < RARRAY_LEN(ary); ++i) {
+ if (RTEST(rb_funcall(argv[0], idEqq, 1, RARRAY_AREF(ary, i)))) return Qtrue;
+ }
+ }
+ else if (!rb_block_given_p()) {
+ for (i = 0; i < len; ++i) {
+ if (RTEST(RARRAY_AREF(ary, i))) return Qtrue;
+ }
}
else {
- for (i = 0; i < RARRAY_LEN(ary); ++i) {
- if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) return Qtrue;
- }
+ for (i = 0; i < RARRAY_LEN(ary); ++i) {
+ if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) return Qtrue;
+ }
}
return Qfalse;
}
/*
- * call-seq:
- * ary.dig(idx, ...) -> object
+ * call-seq:
+ * all? -> true or false
+ * all?(object) -> true or false
+ * all? {|element| ... } -> true or false
+ *
+ * Returns whether for every element of +self+,
+ * a given criterion is satisfied.
+ *
+ * With no block and no argument,
+ * returns whether every element of +self+ is truthy:
+ *
+ * [[], {}, '', 0, 0.0, Object.new].all? # => true # All truthy objects.
+ * [[], {}, '', 0, 0.0, nil].all? # => false # nil is not truthy.
+ * [[], {}, '', 0, 0.0, false].all? # => false # false is not truthy.
+ *
+ * With argument +object+ given, returns whether <tt>object === ele</tt>
+ * for every element +ele+ in +self+:
+ *
+ * [0, 0, 0].all?(0) # => true
+ * [0, 1, 2].all?(1) # => false
+ * ['food', 'fool', 'foot'].all?(/foo/) # => true
+ * ['food', 'drink'].all?(/foo/) # => false
+ *
+ * With a block given, calls the block with each element in +self+;
+ * returns whether the block returns only truthy values:
+ *
+ * [0, 1, 2].all? { |ele| ele < 3 } # => true
+ * [0, 1, 2].all? { |ele| ele < 2 } # => false
*
- * Extracts the nested value specified by the sequence of <i>idx</i>
- * objects by calling +dig+ at each step, returning +nil+ if any
- * intermediate step is +nil+.
+ * With both a block and argument +object+ given,
+ * ignores the block and uses +object+ as above.
*
- * a = [[1, [2, 3]]]
+ * <b>Special case</b>: returns +true+ if +self+ is empty
+ * (regardless of any given argument or block).
*
- * a.dig(0, 1, 1) #=> 3
- * a.dig(1, 2, 3) #=> nil
- * a.dig(0, 0, 0) #=> TypeError: Fixnum does not have #dig method
- * [42, {foo: :bar}].dig(1, :foo) #=> :bar
+ * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
*/
-VALUE
+static VALUE
+rb_ary_all_p(int argc, VALUE *argv, VALUE ary)
+{
+ long i, len = RARRAY_LEN(ary);
+
+ rb_check_arity(argc, 0, 1);
+ if (!len) return Qtrue;
+ if (argc) {
+ if (rb_block_given_p()) {
+ rb_warn("given block not used");
+ }
+ for (i = 0; i < RARRAY_LEN(ary); ++i) {
+ if (!RTEST(rb_funcall(argv[0], idEqq, 1, RARRAY_AREF(ary, i)))) return Qfalse;
+ }
+ }
+ else if (!rb_block_given_p()) {
+ for (i = 0; i < len; ++i) {
+ if (!RTEST(RARRAY_AREF(ary, i))) return Qfalse;
+ }
+ }
+ else {
+ for (i = 0; i < RARRAY_LEN(ary); ++i) {
+ if (!RTEST(rb_yield(RARRAY_AREF(ary, i)))) return Qfalse;
+ }
+ }
+ return Qtrue;
+}
+
+/*
+ * call-seq:
+ * none? -> true or false
+ * none?(object) -> true or false
+ * none? {|element| ... } -> true or false
+ *
+ * Returns +true+ if no element of +self+ meets a given criterion, +false+ otherwise.
+ *
+ * With no block given and no argument, returns +true+ if +self+ has no truthy elements,
+ * +false+ otherwise:
+ *
+ * [nil, false].none? # => true
+ * [nil, 0, false].none? # => false
+ * [].none? # => true
+ *
+ * With argument +object+ given, returns +false+ if for any element +element+,
+ * <tt>object === element</tt>; +true+ otherwise:
+ *
+ * ['food', 'drink'].none?(/bar/) # => true
+ * ['food', 'drink'].none?(/foo/) # => false
+ * [].none?(/foo/) # => true
+ * [0, 1, 2].none?(3) # => true
+ * [0, 1, 2].none?(1) # => false
+ *
+ * With a block given, calls the block with each element in +self+;
+ * returns +true+ if the block returns no truthy value, +false+ otherwise:
+ *
+ * [0, 1, 2].none? {|element| element > 3 } # => true
+ * [0, 1, 2].none? {|element| element > 1 } # => false
+ *
+ * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
+ */
+
+static VALUE
+rb_ary_none_p(int argc, VALUE *argv, VALUE ary)
+{
+ long i, len = RARRAY_LEN(ary);
+
+ rb_check_arity(argc, 0, 1);
+ if (!len) return Qtrue;
+ if (argc) {
+ if (rb_block_given_p()) {
+ rb_warn("given block not used");
+ }
+ for (i = 0; i < RARRAY_LEN(ary); ++i) {
+ if (RTEST(rb_funcall(argv[0], idEqq, 1, RARRAY_AREF(ary, i)))) return Qfalse;
+ }
+ }
+ else if (!rb_block_given_p()) {
+ for (i = 0; i < len; ++i) {
+ if (RTEST(RARRAY_AREF(ary, i))) return Qfalse;
+ }
+ }
+ else {
+ for (i = 0; i < RARRAY_LEN(ary); ++i) {
+ if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) return Qfalse;
+ }
+ }
+ return Qtrue;
+}
+
+/*
+ * call-seq:
+ * one? -> true or false
+ * one? {|element| ... } -> true or false
+ * one?(object) -> true or false
+ *
+ * Returns +true+ if exactly one element of +self+ meets a given criterion.
+ *
+ * With no block given and no argument, returns +true+ if +self+ has exactly one truthy element,
+ * +false+ otherwise:
+ *
+ * [nil, 0].one? # => true
+ * [0, 0].one? # => false
+ * [nil, nil].one? # => false
+ * [].one? # => false
+ *
+ * With a block given, calls the block with each element in +self+;
+ * returns +true+ if the block a truthy value for exactly one element, +false+ otherwise:
+ *
+ * [0, 1, 2].one? {|element| element > 0 } # => false
+ * [0, 1, 2].one? {|element| element > 1 } # => true
+ * [0, 1, 2].one? {|element| element > 2 } # => false
+ *
+ * With argument +object+ given, returns +true+ if for exactly one element +element+, <tt>object === element</tt>;
+ * +false+ otherwise:
+ *
+ * [0, 1, 2].one?(0) # => true
+ * [0, 0, 1].one?(0) # => false
+ * [1, 1, 2].one?(0) # => false
+ * ['food', 'drink'].one?(/bar/) # => false
+ * ['food', 'drink'].one?(/foo/) # => true
+ * [].one?(/foo/) # => false
+ *
+ * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
+ */
+
+static VALUE
+rb_ary_one_p(int argc, VALUE *argv, VALUE ary)
+{
+ long i, len = RARRAY_LEN(ary);
+ VALUE result = Qfalse;
+
+ rb_check_arity(argc, 0, 1);
+ if (!len) return Qfalse;
+ if (argc) {
+ if (rb_block_given_p()) {
+ rb_warn("given block not used");
+ }
+ for (i = 0; i < RARRAY_LEN(ary); ++i) {
+ if (RTEST(rb_funcall(argv[0], idEqq, 1, RARRAY_AREF(ary, i)))) {
+ if (result) return Qfalse;
+ result = Qtrue;
+ }
+ }
+ }
+ else if (!rb_block_given_p()) {
+ for (i = 0; i < len; ++i) {
+ if (RTEST(RARRAY_AREF(ary, i))) {
+ if (result) return Qfalse;
+ result = Qtrue;
+ }
+ }
+ }
+ else {
+ for (i = 0; i < RARRAY_LEN(ary); ++i) {
+ if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) {
+ if (result) return Qfalse;
+ result = Qtrue;
+ }
+ }
+ }
+ return result;
+}
+
+/*
+ * call-seq:
+ * dig(index, *identifiers) -> object
+ *
+ * Finds and returns the object in nested object
+ * specified by +index+ and +identifiers+;
+ * the nested objects may be instances of various classes.
+ * See {Dig Methods}[rdoc-ref:dig_methods.rdoc].
+ *
+ * Examples:
+ *
+ * a = [:foo, [:bar, :baz, [:bat, :bam]]]
+ * a.dig(1) # => [:bar, :baz, [:bat, :bam]]
+ * a.dig(1, 2) # => [:bat, :bam]
+ * a.dig(1, 2, 0) # => :bat
+ * a.dig(1, 2, 3) # => nil
+ *
+ * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
+ */
+
+static VALUE
rb_ary_dig(int argc, VALUE *argv, VALUE self)
{
rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
@@ -5541,55 +8171,334 @@ rb_ary_dig(int argc, VALUE *argv, VALUE self)
return rb_obj_dig(argc, argv, self, Qnil);
}
+static inline VALUE
+finish_exact_sum(long n, VALUE r, VALUE v, int z)
+{
+ if (n != 0)
+ v = rb_fix_plus(LONG2FIX(n), v);
+ if (!UNDEF_P(r)) {
+ v = rb_rational_plus(r, v);
+ }
+ else if (!n && z) {
+ v = rb_fix_plus(LONG2FIX(0), v);
+ }
+ return v;
+}
+
+/*
+ * call-seq:
+ * sum(init = 0) -> object
+ * sum(init = 0) {|element| ... } -> object
+ *
+ * With no block given, returns the sum of +init+ and all elements of +self+;
+ * for array +array+ and value +init+, equivalent to:
+ *
+ * sum = init
+ * array.each {|element| sum += element }
+ * sum
+ *
+ * For example, <tt>[e0, e1, e2].sum</tt> returns <tt>init + e0 + e1 + e2</tt>.
+ *
+ * Examples:
+ *
+ * [0, 1, 2, 3].sum # => 6
+ * [0, 1, 2, 3].sum(100) # => 106
+ * ['abc', 'def', 'ghi'].sum('jkl') # => "jklabcdefghi"
+ * [[:foo, :bar], ['foo', 'bar']].sum([2, 3])
+ * # => [2, 3, :foo, :bar, "foo", "bar"]
+ *
+ * The +init+ value and elements need not be numeric, but must all be <tt>+</tt>-compatible:
+ *
+ * # Raises TypeError: Array can't be coerced into Integer.
+ * [[:foo, :bar], ['foo', 'bar']].sum(2)
+ *
+ * With a block given, calls the block with each element of +self+;
+ * the block's return value (instead of the element itself) is used as the addend:
+ *
+ * ['zero', 1, :two].sum('Coerced and concatenated: ') {|element| element.to_s }
+ * # => "Coerced and concatenated: zero1two"
+ *
+ * Notes:
+ *
+ * - Array#join and Array#flatten may be faster than Array#sum
+ * for an array of strings or an array of arrays.
+ * - Array#sum method may not respect method redefinition of "+" methods such as Integer#+.
+ *
+ */
+
+static VALUE
+rb_ary_sum(int argc, VALUE *argv, VALUE ary)
+{
+ VALUE e, v, r;
+ long i, n;
+ int block_given;
+
+ v = (rb_check_arity(argc, 0, 1) ? argv[0] : LONG2FIX(0));
+
+ block_given = rb_block_given_p();
+
+ if (RARRAY_LEN(ary) == 0)
+ return v;
+
+ n = 0;
+ r = Qundef;
+
+ if (!FIXNUM_P(v) && !RB_BIGNUM_TYPE_P(v) && !RB_TYPE_P(v, T_RATIONAL)) {
+ i = 0;
+ goto init_is_a_value;
+ }
+
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ e = RARRAY_AREF(ary, i);
+ if (block_given)
+ e = rb_yield(e);
+ if (FIXNUM_P(e)) {
+ n += FIX2LONG(e); /* should not overflow long type */
+ if (!FIXABLE(n)) {
+ v = rb_big_plus(LONG2NUM(n), v);
+ n = 0;
+ }
+ }
+ else if (RB_BIGNUM_TYPE_P(e))
+ v = rb_big_plus(e, v);
+ else if (RB_TYPE_P(e, T_RATIONAL)) {
+ if (UNDEF_P(r))
+ r = e;
+ else
+ r = rb_rational_plus(r, e);
+ }
+ else
+ goto not_exact;
+ }
+ v = finish_exact_sum(n, r, v, argc!=0);
+ return v;
+
+ not_exact:
+ v = finish_exact_sum(n, r, v, i!=0);
+
+ if (RB_FLOAT_TYPE_P(e)) {
+ /*
+ * Kahan-Babuska balancing compensated summation algorithm
+ * See https://link.springer.com/article/10.1007/s00607-005-0139-x
+ */
+ double f, c;
+ double x, t;
+
+ f = NUM2DBL(v);
+ c = 0.0;
+ goto has_float_value;
+ for (; i < RARRAY_LEN(ary); i++) {
+ e = RARRAY_AREF(ary, i);
+ if (block_given)
+ e = rb_yield(e);
+ if (RB_FLOAT_TYPE_P(e))
+ has_float_value:
+ x = RFLOAT_VALUE(e);
+ else if (FIXNUM_P(e))
+ x = FIX2LONG(e);
+ else if (RB_BIGNUM_TYPE_P(e))
+ x = rb_big2dbl(e);
+ else if (RB_TYPE_P(e, T_RATIONAL))
+ x = rb_num2dbl(e);
+ else
+ goto not_float;
+
+ if (isnan(f)) continue;
+ if (isnan(x)) {
+ f = x;
+ continue;
+ }
+ if (isinf(x)) {
+ if (isinf(f) && signbit(x) != signbit(f))
+ f = NAN;
+ else
+ f = x;
+ continue;
+ }
+ if (isinf(f)) continue;
+
+ t = f + x;
+ if (fabs(f) >= fabs(x))
+ c += ((f - t) + x);
+ else
+ c += ((x - t) + f);
+ f = t;
+ }
+ f += c;
+ return DBL2NUM(f);
+
+ not_float:
+ v = DBL2NUM(f);
+ }
+
+ goto has_some_value;
+ init_is_a_value:
+ for (; i < RARRAY_LEN(ary); i++) {
+ e = RARRAY_AREF(ary, i);
+ if (block_given)
+ e = rb_yield(e);
+ has_some_value:
+ v = rb_funcall(v, idPLUS, 1, e);
+ }
+ return v;
+}
+
+/* :nodoc: */
+static VALUE
+rb_ary_deconstruct(VALUE ary)
+{
+ return ary;
+}
+
/*
- * Arrays are ordered, integer-indexed collections of any object.
+ * An \Array object is an ordered, integer-indexed collection of objects,
+ * called _elements_;
+ * the object represents
+ * an {array data structure}[https://en.wikipedia.org/wiki/Array_(data_structure)].
+ *
+ * An element may be any object (even another array);
+ * elements may be any mixture of objects of different types.
*
- * Array indexing starts at 0, as in C or Java. A negative index is assumed
- * to be relative to the end of the array---that is, an index of -1 indicates
- * the last element of the array, -2 is the next to last element in the
- * array, and so on.
+ * Important data structures that use arrays include:
+ *
+ * - {Coordinate vector}[https://en.wikipedia.org/wiki/Coordinate_vector].
+ * - {Matrix}[https://en.wikipedia.org/wiki/Matrix_(mathematics)].
+ * - {Heap}[https://en.wikipedia.org/wiki/Heap_(data_structure)].
+ * - {Hash table}[https://en.wikipedia.org/wiki/Hash_table].
+ * - {Deque (double-ended queue)}[https://en.wikipedia.org/wiki/Double-ended_queue].
+ * - {Queue}[https://en.wikipedia.org/wiki/Queue_(abstract_data_type)].
+ * - {Stack}[https://en.wikipedia.org/wiki/Stack_(abstract_data_type)].
+ *
+ * There are also array-like data structures:
+ *
+ * - {Associative array}[https://en.wikipedia.org/wiki/Associative_array] (see Hash).
+ * - {Directory}[https://en.wikipedia.org/wiki/Directory_(computing)] (see Dir).
+ * - {Environment}[https://en.wikipedia.org/wiki/Environment_variable] (see ENV).
+ * - {Set}[https://en.wikipedia.org/wiki/Set_(abstract_data_type)] (see Set).
+ * - {String}[https://en.wikipedia.org/wiki/String_(computer_science)] (see String).
+ *
+ * == \Array Indexes
+ *
+ * \Array indexing starts at 0, as in C or Java.
+ *
+ * A non-negative index is an offset from the first element:
+ *
+ * - Index 0 indicates the first element.
+ * - Index 1 indicates the second element.
+ * - ...
+ *
+ * A negative index is an offset, backwards, from the end of the array:
+ *
+ * - Index -1 indicates the last element.
+ * - Index -2 indicates the next-to-last element.
+ * - ...
+ *
+ *
+ * === In-Range and Out-of-Range Indexes
+ *
+ * A non-negative index is <i>in range</i> if and only if it is smaller than
+ * the size of the array. For a 3-element array:
+ *
+ * - Indexes 0 through 2 are in range.
+ * - Index 3 is out of range.
+ *
+ * A negative index is <i>in range</i> if and only if its absolute value is
+ * not larger than the size of the array. For a 3-element array:
+ *
+ * - Indexes -1 through -3 are in range.
+ * - Index -4 is out of range.
+ *
+ * === Effective Index
+ *
+ * Although the effective index into an array is always an integer,
+ * some methods (both within class \Array and elsewhere)
+ * accept one or more non-integer arguments that are
+ * {integer-convertible objects}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects].
*
* == Creating Arrays
*
- * A new array can be created by using the literal constructor
- * <code>[]</code>. Arrays can contain different types of objects. For
- * example, the array below contains an Integer, a String and a Float:
+ * You can create an \Array object explicitly with:
+ *
+ * - An {array literal}[rdoc-ref:syntax/literals.rdoc@Array+Literals]:
+ *
+ * [1, 'one', :one, [2, 'two', :two]]
+ *
+ * - A {%w or %W string-array Literal}[rdoc-ref:syntax/literals.rdoc@25w+and+-25W-3A+String-Array+Literals]:
+ *
+ * %w[foo bar baz] # => ["foo", "bar", "baz"]
+ * %w[1 % *] # => ["1", "%", "*"]
*
- * ary = [1, "two", 3.0] #=> [1, "two", 3.0]
+ * - A {%i or %I symbol-array Literal}[rdoc-ref:syntax/literals.rdoc@25i+and+-25I-3A+Symbol-Array+Literals]:
*
- * An array can also be created by explicitly calling Array.new with zero, one
- * (the initial size of the Array) or two arguments (the initial size and a
- * default object).
+ * %i[foo bar baz] # => [:foo, :bar, :baz]
+ * %i[1 % *] # => [:"1", :%, :*]
*
- * ary = Array.new #=> []
- * Array.new(3) #=> [nil, nil, nil]
- * Array.new(3, true) #=> [true, true, true]
+ * - Method Kernel#Array:
*
- * Note that the second argument populates the array with references to the
- * same object. Therefore, it is only recommended in cases when you need to
- * instantiate arrays with natively immutable objects such as Symbols,
- * numbers, true or false.
+ * Array(["a", "b"]) # => ["a", "b"]
+ * Array(1..5) # => [1, 2, 3, 4, 5]
+ * Array(key: :value) # => [[:key, :value]]
+ * Array(nil) # => []
+ * Array(1) # => [1]
+ * Array({:a => "a", :b => "b"}) # => [[:a, "a"], [:b, "b"]]
*
- * To create an array with separate objects a block can be passed instead.
- * This method is safe to use with mutable objects such as hashes, strings or
- * other arrays:
+ * - Method Array.new:
*
- * Array.new(4) { Hash.new } #=> [{}, {}, {}, {}]
+ * Array.new # => []
+ * Array.new(3) # => [nil, nil, nil]
+ * Array.new(4) {Hash.new} # => [{}, {}, {}, {}]
+ * Array.new(3, true) # => [true, true, true]
*
- * This is also a quick way to build up multi-dimensional arrays:
+ * Note that the last example above populates the array
+ * with references to the same object.
+ * This is recommended only in cases where that object is a natively immutable object
+ * such as a symbol, a numeric, +nil+, +true+, or +false+.
*
- * empty_table = Array.new(3) { Array.new(3) }
- * #=> [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]
+ * Another way to create an array with various objects, using a block;
+ * this usage is safe for mutable objects such as hashes, strings or
+ * other arrays:
*
- * An array can also be created by using the Array() method, provided by
- * Kernel, which tries to call #to_ary, then #to_a on its argument.
+ * Array.new(4) {|i| i.to_s } # => ["0", "1", "2", "3"]
*
- * Array({:a => "a", :b => "b"}) #=> [[:a, "a"], [:b, "b"]]
+ * Here is a way to create a multi-dimensional array:
+ *
+ * Array.new(3) {Array.new(3)}
+ * # => [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]
+ *
+ * A number of Ruby methods, both in the core and in the standard library,
+ * provide instance method +to_a+, which converts an object to an array.
+ *
+ * - ARGF#to_a
+ * - Array#to_a
+ * - Enumerable#to_a
+ * - Hash#to_a
+ * - MatchData#to_a
+ * - NilClass#to_a
+ * - OptionParser#to_a
+ * - Range#to_a
+ * - Set#to_a
+ * - Struct#to_a
+ * - Time#to_a
+ * - Benchmark::Tms#to_a
+ * - CSV::Table#to_a
+ * - Enumerator::Lazy#to_a
+ * - Gem::List#to_a
+ * - Gem::NameTuple#to_a
+ * - Gem::Platform#to_a
+ * - Gem::RequestSet::Lockfile::Tokenizer#to_a
+ * - Gem::SourceList#to_a
+ * - OpenSSL::X509::Extension#to_a
+ * - OpenSSL::X509::Name#to_a
+ * - Racc::ISet#to_a
+ * - Rinda::RingFinger#to_a
+ * - Ripper::Lexer::Elem#to_a
+ * - RubyVM::InstructionSequence#to_a
+ * - YAML::DBM#to_a
*
* == Example Usage
*
- * In addition to the methods it mixes in through the Enumerable module, the
- * Array class has proprietary methods for accessing, searching and otherwise
+ * In addition to the methods it mixes in through the Enumerable module,
+ * class \Array has proprietary methods for accessing, searching and otherwise
* manipulating arrays.
*
* Some of the more common ones are illustrated below.
@@ -5637,9 +8546,9 @@ rb_ary_dig(int argc, VALUE *argv, VALUE self)
*
* arr.drop(3) #=> [4, 5, 6]
*
- * == Obtaining Information about an Array
+ * == Obtaining Information about an \Array
*
- * Arrays keep track of their own length at all times. To query an array
+ * An array keeps track of its own length at all times. To query an array
* about the number of elements it contains, use #length, #count or #size.
*
* browsers = ['Chrome', 'Firefox', 'Safari', 'Opera', 'IE']
@@ -5654,7 +8563,7 @@ rb_ary_dig(int argc, VALUE *argv, VALUE self)
*
* browsers.include?('Konqueror') #=> false
*
- * == Adding Items to Arrays
+ * == Adding Items to an \Array
*
* Items can be added to the end of an array by using either #push or #<<
*
@@ -5675,7 +8584,7 @@ rb_ary_dig(int argc, VALUE *argv, VALUE self)
* arr.insert(3, 'orange', 'pear', 'grapefruit')
* #=> [0, 1, 2, "orange", "pear", "grapefruit", "apple", 3, 4, 5, 6]
*
- * == Removing Items from an Array
+ * == Removing Items from an \Array
*
* The method #pop removes the last element in an array and returns it:
*
@@ -5715,17 +8624,17 @@ rb_ary_dig(int argc, VALUE *argv, VALUE self)
* arr = [2, 5, 6, 556, 6, 6, 8, 9, 0, 123, 556]
* arr.uniq #=> [2, 5, 6, 556, 8, 9, 0, 123]
*
- * == Iterating over Arrays
+ * == Iterating over an \Array
*
- * Like all classes that include the Enumerable module, Array has an each
+ * Like all classes that include the Enumerable module, class \Array has an each
* method, which defines what elements should be iterated over and how. In
- * case of Array's #each, all elements in the Array instance are yielded to
+ * case of Array#each, all elements in +self+ are yielded to
* the supplied block in sequence.
*
* Note that this operation leaves the array unchanged.
*
* arr = [1, 2, 3, 4, 5]
- * arr.each { |a| print a -= 10, " " }
+ * arr.each {|a| print a -= 10, " "}
* # prints: -9 -8 -7 -6 -5
* #=> [1, 2, 3, 4, 5]
*
@@ -5734,18 +8643,19 @@ rb_ary_dig(int argc, VALUE *argv, VALUE self)
*
* words = %w[first second third fourth fifth sixth]
* str = ""
- * words.reverse_each { |word| str += "#{word} " }
+ * words.reverse_each {|word| str += "#{word} "}
* p str #=> "sixth fifth fourth third second first "
*
* The #map method can be used to create a new array based on the original
* array, but with the values modified by the supplied block:
*
- * arr.map { |a| 2*a } #=> [2, 4, 6, 8, 10]
+ * arr.map {|a| 2*a} #=> [2, 4, 6, 8, 10]
* arr #=> [1, 2, 3, 4, 5]
- * arr.map! { |a| a**2 } #=> [1, 4, 9, 16, 25]
+ * arr.map! {|a| a**2} #=> [1, 4, 9, 16, 25]
* arr #=> [1, 4, 9, 16, 25]
*
- * == Selecting Items from an Array
+ *
+ * == Selecting Items from an \Array
*
* Elements can be selected from an array according to criteria defined in a
* block. The selection can happen in a destructive or a non-destructive
@@ -5756,9 +8666,9 @@ rb_ary_dig(int argc, VALUE *argv, VALUE self)
* === Non-destructive Selection
*
* arr = [1, 2, 3, 4, 5, 6]
- * arr.select { |a| a > 3 } #=> [4, 5, 6]
- * arr.reject { |a| a < 3 } #=> [3, 4, 5, 6]
- * arr.drop_while { |a| a < 4 } #=> [4, 5, 6]
+ * arr.select {|a| a > 3} #=> [4, 5, 6]
+ * arr.reject {|a| a < 3} #=> [3, 4, 5, 6]
+ * arr.drop_while {|a| a < 4} #=> [4, 5, 6]
* arr #=> [1, 2, 3, 4, 5, 6]
*
* === Destructive Selection
@@ -5769,25 +8679,190 @@ rb_ary_dig(int argc, VALUE *argv, VALUE self)
* Similar to #select vs. #reject, #delete_if and #keep_if have the exact
* opposite result when supplied with the same block:
*
- * arr.delete_if { |a| a < 4 } #=> [4, 5, 6]
+ * arr.delete_if {|a| a < 4} #=> [4, 5, 6]
* arr #=> [4, 5, 6]
*
* arr = [1, 2, 3, 4, 5, 6]
- * arr.keep_if { |a| a < 4 } #=> [1, 2, 3]
+ * arr.keep_if {|a| a < 4} #=> [1, 2, 3]
* arr #=> [1, 2, 3]
*
+ * == What's Here
+ *
+ * First, what's elsewhere. Class \Array:
+ *
+ * - Inherits from {class Object}[rdoc-ref:Object@What-27s+Here].
+ * - Includes {module Enumerable}[rdoc-ref:Enumerable@What-27s+Here],
+ * which provides dozens of additional methods.
+ *
+ * Here, class \Array provides methods that are useful for:
+ *
+ * - {Creating an Array}[rdoc-ref:Array@Methods+for+Creating+an+Array]
+ * - {Querying}[rdoc-ref:Array@Methods+for+Querying]
+ * - {Comparing}[rdoc-ref:Array@Methods+for+Comparing]
+ * - {Fetching}[rdoc-ref:Array@Methods+for+Fetching]
+ * - {Assigning}[rdoc-ref:Array@Methods+for+Assigning]
+ * - {Deleting}[rdoc-ref:Array@Methods+for+Deleting]
+ * - {Combining}[rdoc-ref:Array@Methods+for+Combining]
+ * - {Iterating}[rdoc-ref:Array@Methods+for+Iterating]
+ * - {Converting}[rdoc-ref:Array@Methods+for+Converting]
+ * - {And more....}[rdoc-ref:Array@Other+Methods]
+ *
+ * === Methods for Creating an \Array
+ *
+ * - ::[]: Returns a new array populated with given objects.
+ * - ::new: Returns a new array.
+ * - ::try_convert: Returns a new array created from a given object.
+ *
+ * See also {Creating Arrays}[rdoc-ref:Array@Creating+Arrays].
+ *
+ * === Methods for Querying
+ *
+ * - #all?: Returns whether all elements meet a given criterion.
+ * - #any?: Returns whether any element meets a given criterion.
+ * - #count: Returns the count of elements that meet a given criterion.
+ * - #empty?: Returns whether there are no elements.
+ * - #find_index (aliased as #index): Returns the index of the first element that meets a given criterion.
+ * - #hash: Returns the integer hash code.
+ * - #include?: Returns whether any element <tt>==</tt> a given object.
+ * - #length (aliased as #size): Returns the count of elements.
+ * - #none?: Returns whether no element <tt>==</tt> a given object.
+ * - #one?: Returns whether exactly one element <tt>==</tt> a given object.
+ * - #rindex: Returns the index of the last element that meets a given criterion.
+ *
+ * === Methods for Comparing
+ *
+ * - #<=>: Returns -1, 0, or 1, as +self+ is less than, equal to, or greater than a given object.
+ * - #==: Returns whether each element in +self+ is <tt>==</tt> to the corresponding element in a given object.
+ * - #eql?: Returns whether each element in +self+ is <tt>eql?</tt> to the corresponding element in a given object.
+
+ * === Methods for Fetching
+ *
+ * These methods do not modify +self+.
+ *
+ * - #[] (aliased as #slice): Returns consecutive elements as determined by a given argument.
+ * - #assoc: Returns the first element that is an array whose first element <tt>==</tt> a given object.
+ * - #at: Returns the element at a given offset.
+ * - #bsearch: Returns an element selected via a binary search as determined by a given block.
+ * - #bsearch_index: Returns the index of an element selected via a binary search as determined by a given block.
+ * - #compact: Returns an array containing all non-+nil+ elements.
+ * - #dig: Returns the object in nested objects that is specified by a given index and additional arguments.
+ * - #drop: Returns trailing elements as determined by a given index.
+ * - #drop_while: Returns trailing elements as determined by a given block.
+ * - #fetch: Returns the element at a given offset.
+ * - #fetch_values: Returns elements at given offsets.
+ * - #first: Returns one or more leading elements.
+ * - #last: Returns one or more trailing elements.
+ * - #max: Returns one or more maximum-valued elements, as determined by <tt>#<=></tt> or a given block.
+ * - #min: Returns one or more minimum-valued elements, as determined by <tt>#<=></tt> or a given block.
+ * - #minmax: Returns the minimum-valued and maximum-valued elements, as determined by <tt>#<=></tt> or a given block.
+ * - #rassoc: Returns the first element that is an array whose second element <tt>==</tt> a given object.
+ * - #reject: Returns an array containing elements not rejected by a given block.
+ * - #reverse: Returns all elements in reverse order.
+ * - #rotate: Returns all elements with some rotated from one end to the other.
+ * - #sample: Returns one or more random elements.
+ * - #select (aliased as #filter): Returns an array containing elements selected by a given block.
+ * - #shuffle: Returns elements in a random order.
+ * - #sort: Returns all elements in an order determined by <tt>#<=></tt> or a given block.
+ * - #take: Returns leading elements as determined by a given index.
+ * - #take_while: Returns leading elements as determined by a given block.
+ * - #uniq: Returns an array containing non-duplicate elements.
+ * - #values_at: Returns the elements at given offsets.
+ *
+ * === Methods for Assigning
+ *
+ * These methods add, replace, or reorder elements in +self+.
+ *
+ * - #<<: Appends an element.
+ * - #[]=: Assigns specified elements with a given object.
+ * - #concat: Appends all elements from given arrays.
+ * - #fill: Replaces specified elements with specified objects.
+ * - #flatten!: Replaces each nested array in +self+ with the elements from that array.
+ * - #initialize_copy (aliased as #replace): Replaces the content of +self+ with the content of a given array.
+ * - #insert: Inserts given objects at a given offset; does not replace elements.
+ * - #push (aliased as #append): Appends elements.
+ * - #reverse!: Replaces +self+ with its elements reversed.
+ * - #rotate!: Replaces +self+ with its elements rotated.
+ * - #shuffle!: Replaces +self+ with its elements in random order.
+ * - #sort!: Replaces +self+ with its elements sorted, as determined by <tt>#<=></tt> or a given block.
+ * - #sort_by!: Replaces +self+ with its elements sorted, as determined by a given block.
+ * - #unshift (aliased as #prepend): Prepends leading elements.
+ *
+ * === Methods for Deleting
+ *
+ * Each of these methods removes elements from +self+:
+ *
+ * - #clear: Removes all elements.
+ * - #compact!: Removes all +nil+ elements.
+ * - #delete: Removes elements equal to a given object.
+ * - #delete_at: Removes the element at a given offset.
+ * - #delete_if: Removes elements specified by a given block.
+ * - #keep_if: Removes elements not specified by a given block.
+ * - #pop: Removes and returns the last element.
+ * - #reject!: Removes elements specified by a given block.
+ * - #select! (aliased as #filter!): Removes elements not specified by a given block.
+ * - #shift: Removes and returns the first element.
+ * - #slice!: Removes and returns a sequence of elements.
+ * - #uniq!: Removes duplicates.
+ *
+ * === Methods for Combining
+ *
+ * - #&: Returns an array containing elements found both in +self+ and a given array.
+ * - #+: Returns an array containing all elements of +self+ followed by all elements of a given array.
+ * - #-: Returns an array containing all elements of +self+ that are not found in a given array.
+ * - #|: Returns an array containing all element of +self+ and all elements of a given array, duplicates removed.
+ * - #difference: Returns an array containing all elements of +self+ that are not found in any of the given arrays..
+ * - #intersection: Returns an array containing elements found both in +self+ and in each given array.
+ * - #product: Returns or yields all combinations of elements from +self+ and given arrays.
+ * - #reverse: Returns an array containing all elements of +self+ in reverse order.
+ * - #union: Returns an array containing all elements of +self+ and all elements of given arrays, duplicates removed.
+ *
+ * === Methods for Iterating
+ *
+ * - #combination: Calls a given block with combinations of elements of +self+; a combination does not use the same element more than once.
+ * - #cycle: Calls a given block with each element, then does so again, for a specified number of times, or forever.
+ * - #each: Passes each element to a given block.
+ * - #each_index: Passes each element index to a given block.
+ * - #permutation: Calls a given block with permutations of elements of +self+; a permutation does not use the same element more than once.
+ * - #repeated_combination: Calls a given block with combinations of elements of +self+; a combination may use the same element more than once.
+ * - #repeated_permutation: Calls a given block with permutations of elements of +self+; a permutation may use the same element more than once.
+ * - #reverse_each: Passes each element, in reverse order, to a given block.
+ *
+ * === Methods for Converting
+ *
+ * - #collect (aliased as #map): Returns an array containing the block return-value for each element.
+ * - #collect! (aliased as #map!): Replaces each element with a block return-value.
+ * - #flatten: Returns an array that is a recursive flattening of +self+.
+ * - #inspect (aliased as #to_s): Returns a new String containing the elements.
+ * - #join: Returns a new String containing the elements joined by the field separator.
+ * - #to_a: Returns +self+ or a new array containing all elements.
+ * - #to_ary: Returns +self+.
+ * - #to_h: Returns a new hash formed from the elements.
+ * - #transpose: Transposes +self+, which must be an array of arrays.
+ * - #zip: Returns a new array of arrays containing +self+ and given arrays.
+ *
+ * === Other Methods
+ *
+ * - #*: Returns one of the following:
+ *
+ * - With integer argument +n+, a new array that is the concatenation
+ * of +n+ copies of +self+.
+ * - With string argument +field_separator+, a new string that is equivalent to
+ * <tt>join(field_separator)</tt>.
+ *
+ * - #pack: Packs the elements into a binary sequence.
+ * - #sum: Returns a sum of elements according to either <tt>+</tt> or a given block.
*/
void
Init_Array(void)
{
-#undef rb_intern
-#define rb_intern(str) rb_intern_const(str)
+ fake_ary_flags = init_fake_ary_flags();
rb_cArray = rb_define_class("Array", rb_cObject);
rb_include_module(rb_cArray, rb_mEnumerable);
rb_define_alloc_func(rb_cArray, empty_ary_alloc);
+ rb_define_singleton_method(rb_cArray, "new", rb_ary_s_new, -1);
rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);
rb_define_singleton_method(rb_cArray, "try_convert", rb_ary_s_try_convert, 1);
rb_define_method(rb_cArray, "initialize", rb_ary_initialize, -1);
@@ -5798,7 +8873,6 @@ Init_Array(void)
rb_define_method(rb_cArray, "to_a", rb_ary_to_a, 0);
rb_define_method(rb_cArray, "to_h", rb_ary_to_h, 0);
rb_define_method(rb_cArray, "to_ary", rb_ary_to_ary_m, 0);
- rb_define_method(rb_cArray, "frozen?", rb_ary_frozen_p, 0);
rb_define_method(rb_cArray, "==", rb_ary_equal, 1);
rb_define_method(rb_cArray, "eql?", rb_ary_eql, 1);
@@ -5808,21 +8882,28 @@ Init_Array(void)
rb_define_method(rb_cArray, "[]=", rb_ary_aset, -1);
rb_define_method(rb_cArray, "at", rb_ary_at, 1);
rb_define_method(rb_cArray, "fetch", rb_ary_fetch, -1);
- rb_define_method(rb_cArray, "first", rb_ary_first, -1);
- rb_define_method(rb_cArray, "last", rb_ary_last, -1);
- rb_define_method(rb_cArray, "concat", rb_ary_concat, 1);
+ rb_define_method(rb_cArray, "concat", rb_ary_concat_multi, -1);
+ rb_define_method(rb_cArray, "union", rb_ary_union_multi, -1);
+ rb_define_method(rb_cArray, "difference", rb_ary_difference_multi, -1);
+ rb_define_method(rb_cArray, "intersection", rb_ary_intersection_multi, -1);
+ rb_define_method(rb_cArray, "intersect?", rb_ary_intersect_p, 1);
rb_define_method(rb_cArray, "<<", rb_ary_push, 1);
rb_define_method(rb_cArray, "push", rb_ary_push_m, -1);
+ rb_define_alias(rb_cArray, "append", "push");
rb_define_method(rb_cArray, "pop", rb_ary_pop_m, -1);
rb_define_method(rb_cArray, "shift", rb_ary_shift_m, -1);
rb_define_method(rb_cArray, "unshift", rb_ary_unshift_m, -1);
+ rb_define_alias(rb_cArray, "prepend", "unshift");
rb_define_method(rb_cArray, "insert", rb_ary_insert, -1);
rb_define_method(rb_cArray, "each", rb_ary_each, 0);
rb_define_method(rb_cArray, "each_index", rb_ary_each_index, 0);
rb_define_method(rb_cArray, "reverse_each", rb_ary_reverse_each, 0);
rb_define_method(rb_cArray, "length", rb_ary_length, 0);
- rb_define_alias(rb_cArray, "size", "length");
+ rb_define_method(rb_cArray, "size", rb_ary_length, 0);
rb_define_method(rb_cArray, "empty?", rb_ary_empty_p, 0);
+ rb_define_method(rb_cArray, "find", rb_ary_find, -1);
+ rb_define_method(rb_cArray, "detect", rb_ary_find, -1);
+ rb_define_method(rb_cArray, "rfind", rb_ary_rfind, -1);
rb_define_method(rb_cArray, "find_index", rb_ary_index, -1);
rb_define_method(rb_cArray, "index", rb_ary_index, -1);
rb_define_method(rb_cArray, "rindex", rb_ary_rindex, -1);
@@ -5840,6 +8921,8 @@ Init_Array(void)
rb_define_method(rb_cArray, "map!", rb_ary_collect_bang, 0);
rb_define_method(rb_cArray, "select", rb_ary_select, 0);
rb_define_method(rb_cArray, "select!", rb_ary_select_bang, 0);
+ rb_define_method(rb_cArray, "filter", rb_ary_select, 0);
+ rb_define_method(rb_cArray, "filter!", rb_ary_select_bang, 0);
rb_define_method(rb_cArray, "keep_if", rb_ary_keep_if, 0);
rb_define_method(rb_cArray, "values_at", rb_ary_values_at, -1);
rb_define_method(rb_cArray, "delete", rb_ary_delete, 1);
@@ -5868,6 +8951,10 @@ Init_Array(void)
rb_define_method(rb_cArray, "&", rb_ary_and, 1);
rb_define_method(rb_cArray, "|", rb_ary_or, 1);
+ rb_define_method(rb_cArray, "max", rb_ary_max, -1);
+ rb_define_method(rb_cArray, "min", rb_ary_min, -1);
+ rb_define_method(rb_cArray, "minmax", rb_ary_minmax, 0);
+
rb_define_method(rb_cArray, "uniq", rb_ary_uniq, 0);
rb_define_method(rb_cArray, "uniq!", rb_ary_uniq_bang, 0);
rb_define_method(rb_cArray, "compact", rb_ary_compact, 0);
@@ -5875,9 +8962,6 @@ Init_Array(void)
rb_define_method(rb_cArray, "flatten", rb_ary_flatten, -1);
rb_define_method(rb_cArray, "flatten!", rb_ary_flatten_bang, -1);
rb_define_method(rb_cArray, "count", rb_ary_count, -1);
- rb_define_method(rb_cArray, "shuffle!", rb_ary_shuffle_bang, -1);
- rb_define_method(rb_cArray, "shuffle", rb_ary_shuffle, -1);
- rb_define_method(rb_cArray, "sample", rb_ary_sample, -1);
rb_define_method(rb_cArray, "cycle", rb_ary_cycle, -1);
rb_define_method(rb_cArray, "permutation", rb_ary_permutation, -1);
rb_define_method(rb_cArray, "combination", rb_ary_combination, 1);
@@ -5891,11 +8975,18 @@ Init_Array(void)
rb_define_method(rb_cArray, "drop_while", rb_ary_drop_while, 0);
rb_define_method(rb_cArray, "bsearch", rb_ary_bsearch, 0);
rb_define_method(rb_cArray, "bsearch_index", rb_ary_bsearch_index, 0);
- rb_define_method(rb_cArray, "any?", rb_ary_any_p, 0);
+ rb_define_method(rb_cArray, "any?", rb_ary_any_p, -1);
+ rb_define_method(rb_cArray, "all?", rb_ary_all_p, -1);
+ rb_define_method(rb_cArray, "none?", rb_ary_none_p, -1);
+ rb_define_method(rb_cArray, "one?", rb_ary_one_p, -1);
rb_define_method(rb_cArray, "dig", rb_ary_dig, -1);
+ rb_define_method(rb_cArray, "sum", rb_ary_sum, -1);
+ rb_define_method(rb_cArray, "freeze", rb_ary_freeze, 0);
+
+ rb_define_method(rb_cArray, "deconstruct", rb_ary_deconstruct, 0);
- id_cmp = rb_intern("<=>");
- id_random = rb_intern("random");
- id_div = rb_intern("div");
- id_power = rb_intern("**");
+ rb_cArray_empty_frozen = RB_OBJ_SET_SHAREABLE(rb_ary_freeze(rb_ary_new()));
+ rb_vm_register_global_object(rb_cArray_empty_frozen);
}
+
+#include "array.rbinc"
diff --git a/array.rb b/array.rb
new file mode 100644
index 0000000000..81beff0b1c
--- /dev/null
+++ b/array.rb
@@ -0,0 +1,287 @@
+class Array
+ # call-seq:
+ # shuffle!(random: Random) -> self
+ #
+ # Shuffles all elements in +self+ into a random order,
+ # as selected by the object given by the keyword argument +random+.
+ # Returns +self+:
+ #
+ # a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+ # a.shuffle! # => [5, 3, 8, 7, 6, 1, 9, 4, 2, 0]
+ # a.shuffle! # => [9, 4, 0, 6, 2, 8, 1, 5, 3, 7]
+ #
+ # Duplicate elements are included:
+ #
+ # a = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
+ # a.shuffle! # => [1, 0, 0, 1, 1, 0, 1, 0, 0, 1]
+ # a.shuffle! # => [0, 1, 0, 1, 1, 0, 1, 0, 1, 0]
+ #
+ # The object given with the keyword argument +random+ is used as the random number generator.
+ #
+ # Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning].
+ def shuffle!(random: Random)
+ Primitive.rb_ary_shuffle_bang(random)
+ end
+
+ # call-seq:
+ # shuffle(random: Random) -> new_array
+ #
+ # Returns a new array containing all elements from +self+ in a random order,
+ # as selected by the object given by the keyword argument +random+:
+ #
+ # a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+ # a.shuffle # => [0, 8, 1, 9, 6, 3, 4, 7, 2, 5]
+ # a.shuffle # => [8, 9, 0, 5, 1, 2, 6, 4, 7, 3]
+ #
+ # Duplicate elements are included:
+ #
+ # a = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
+ # a.shuffle # => [1, 0, 1, 1, 0, 0, 1, 0, 0, 1]
+ # a.shuffle # => [1, 1, 0, 0, 0, 1, 1, 0, 0, 1]
+ #
+ # The object given with the keyword argument +random+ is used as the random number generator.
+ #
+ # Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
+ def shuffle(random: Random)
+ Primitive.rb_ary_shuffle(random)
+ end
+
+ # call-seq:
+ # sample(random: Random) -> object
+ # sample(count, random: Random) -> new_ary
+ #
+ # Returns random elements from +self+,
+ # as selected by the object given by the keyword argument +random+.
+ #
+ # With no argument +count+ given, returns one random element from +self+:
+ #
+ # a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+ # a.sample # => 3
+ # a.sample # => 8
+ #
+ # Returns +nil+ if +self+ is empty:
+ #
+ # [].sample # => nil
+ #
+ # With a non-negative numeric argument +count+ given,
+ # returns a new array containing +count+ random elements from +self+:
+ #
+ # a.sample(3) # => [8, 9, 2]
+ # a.sample(6) # => [9, 6, 0, 3, 1, 4]
+ #
+ # The order of the result array is unrelated to the order of +self+.
+ #
+ # Returns a new empty array if +self+ is empty:
+ #
+ # [].sample(4) # => []
+ #
+ # May return duplicates in +self+:
+ #
+ # a = [1, 1, 1, 2, 2, 3]
+ # a.sample(a.size) # => [1, 1, 3, 2, 1, 2]
+ #
+ # Returns no more than <tt>a.size</tt> elements
+ # (because no new duplicates are introduced):
+ #
+ # a.sample(50) # => [6, 4, 1, 8, 5, 9, 0, 2, 3, 7]
+ #
+ # The object given with the keyword argument +random+ is used as the random number generator:
+ #
+ # a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+ # a.sample(random: Random.new(1)) # => 6
+ # a.sample(4, random: Random.new(1)) # => [6, 10, 9, 2]
+ #
+ # Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
+ def sample(n = (ary = false), random: Random)
+ if Primitive.mandatory_only?
+ # Primitive.cexpr! %{ rb_ary_sample(self, rb_cRandom, Qfalse, Qfalse) }
+ Primitive.ary_sample0
+ else
+ # Primitive.cexpr! %{ rb_ary_sample(self, random, n, ary) }
+ Primitive.ary_sample(random, n, ary)
+ end
+ end
+
+ # call-seq:
+ # first -> object or nil
+ # first(count) -> new_array
+ #
+ # Returns elements from +self+, or +nil+; does not modify +self+.
+ #
+ # With no argument given, returns the first element (if available):
+ #
+ # a = [:foo, 'bar', 2]
+ # a.first # => :foo
+ # a # => [:foo, "bar", 2]
+ #
+ # If +self+ is empty, returns +nil+.
+ #
+ # [].first # => nil
+ #
+ # With a non-negative integer argument +count+ given,
+ # returns the first +count+ elements (as available) in a new array:
+ #
+ # a.first(0) # => []
+ # a.first(2) # => [:foo, "bar"]
+ # a.first(50) # => [:foo, "bar", 2]
+ #
+ # Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying].
+ def first n = unspecified = true
+ if Primitive.mandatory_only?
+ Primitive.attr! :leaf
+ Primitive.cexpr! %q{ ary_first(self) }
+ else
+ if unspecified
+ Primitive.cexpr! %q{ ary_first(self) }
+ else
+ Primitive.cexpr! %q{ ary_take_first_or_last_n(self, NUM2LONG(n), ARY_TAKE_FIRST) }
+ end
+ end
+ end
+
+ # call-seq:
+ # last -> last_object or nil
+ # last(count) -> new_array
+ #
+ # Returns elements from +self+, or +nil+; +self+ is not modified.
+ #
+ # With no argument given, returns the last element, or +nil+ if +self+ is empty:
+ #
+ # a = [:foo, 'bar', 2]
+ # a.last # => 2
+ # a # => [:foo, "bar", 2]
+ # [].last # => nil
+ #
+ #
+ # With non-negative integer argument +count+ given,
+ # returns a new array containing the trailing +count+ elements of +self+, as available:
+ #
+ # a = [:foo, 'bar', 2]
+ # a.last(2) # => ["bar", 2]
+ # a.last(50) # => [:foo, "bar", 2]
+ # a.last(0) # => []
+ # [].last(3) # => []
+ #
+ # Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
+ def last n = unspecified = true
+ if Primitive.mandatory_only?
+ Primitive.attr! :leaf
+ Primitive.cexpr! %q{ ary_last(self) }
+ else
+ if unspecified
+ Primitive.cexpr! %q{ ary_last(self) }
+ else
+ Primitive.cexpr! %q{ ary_take_first_or_last_n(self, NUM2LONG(n), ARY_TAKE_LAST) }
+ end
+ end
+ end
+
+ # call-seq:
+ # fetch_values(*indexes) -> new_array
+ # fetch_values(*indexes) { |index| ... } -> new_array
+ #
+ # With no block given, returns a new array containing the elements of +self+
+ # at the offsets specified by +indexes+. Each of the +indexes+ must be an
+ # {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects]:
+ #
+ # a = [:foo, :bar, :baz]
+ # a.fetch_values(2, 0) # => [:baz, :foo]
+ # a.fetch_values(2.1, 0) # => [:baz, :foo]
+ # a.fetch_values # => []
+ #
+ # For a negative index, counts backwards from the end of the array:
+ #
+ # a.fetch_values(-2, -1) # [:bar, :baz]
+ #
+ # When no block is given, raises an exception if any index is out of range.
+ #
+ # With a block given, for each index:
+ #
+ # - If the index is in range, uses an element of +self+ (as above).
+ # - Otherwise, calls the block with the index and uses the block's return value.
+ #
+ # Example:
+ #
+ # a = [:foo, :bar, :baz]
+ # a.fetch_values(1, 0, 42, 777) { |index| index.to_s }
+ # # => [:bar, :foo, "42", "777"]
+ #
+ # Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching].
+ def fetch_values(*indexes, &block)
+ indexes.map! { |i| fetch(i, &block) }
+ indexes
+ end
+
+ with_jit do
+ if Primitive.rb_builtin_basic_definition_p(:each)
+ undef :each
+
+ def each # :nodoc:
+ Primitive.attr! :inline_block, :c_trace
+
+ unless defined?(yield)
+ return Primitive.cexpr! 'SIZED_ENUMERATOR(self, 0, 0, ary_enum_length)'
+ end
+ _i = 0
+ value = nil
+ while Primitive.cexpr!(%q{ ary_fetch_next(self, LOCAL_PTR(_i), LOCAL_PTR(value)) })
+ yield value
+ end
+ self
+ end
+ end
+
+ if Primitive.rb_builtin_basic_definition_p(:map)
+ undef :map
+
+ def map # :nodoc:
+ Primitive.attr! :inline_block, :c_trace
+
+ unless defined?(yield)
+ return Primitive.cexpr! 'SIZED_ENUMERATOR(self, 0, 0, ary_enum_length)'
+ end
+
+ _i = 0
+ value = nil
+ result = Primitive.ary_sized_alloc
+ while Primitive.cexpr!(%q{ ary_fetch_next(self, LOCAL_PTR(_i), LOCAL_PTR(value)) })
+ value = yield(value)
+ Primitive.cexpr!(%q{ rb_ary_push(result, value) })
+ end
+ result
+ end
+
+ if Primitive.rb_builtin_basic_definition_p(:collect)
+ undef :collect
+ alias collect map
+ end
+ end
+
+ if Primitive.rb_builtin_basic_definition_p(:select)
+ undef :select
+
+ def select # :nodoc:
+ Primitive.attr! :inline_block, :c_trace
+
+ unless defined?(yield)
+ return Primitive.cexpr! 'SIZED_ENUMERATOR(self, 0, 0, ary_enum_length)'
+ end
+
+ _i = 0
+ value = nil
+ result = Primitive.ary_sized_alloc
+ while Primitive.cexpr!(%q{ ary_fetch_next(self, LOCAL_PTR(_i), LOCAL_PTR(value)) })
+ if yield value
+ Primitive.cexpr!(%q{ rb_ary_push(result, value) })
+ end
+ end
+ result
+ end
+
+ if Primitive.rb_builtin_basic_definition_p(:filter)
+ undef :filter
+ alias filter select
+ end
+ end
+ end
+end
diff --git a/ast.c b/ast.c
new file mode 100644
index 0000000000..5357aa38a5
--- /dev/null
+++ b/ast.c
@@ -0,0 +1,1165 @@
+/* indent-tabs-mode: nil */
+#include "internal.h"
+#include "internal/ruby_parser.h"
+#include "internal/symbol.h"
+#include "internal/warnings.h"
+#include "iseq.h"
+#include "node.h"
+#include "ruby.h"
+#include "ruby/encoding.h"
+#include "ruby/util.h"
+#include "vm_core.h"
+
+#include "builtin.h"
+
+static VALUE rb_mAST;
+static VALUE rb_cNode;
+static VALUE rb_cLocation;
+
+struct ASTNodeData {
+ VALUE ast_value;
+ const NODE *node;
+};
+
+static void
+node_gc_mark(void *ptr)
+{
+ struct ASTNodeData *data = (struct ASTNodeData *)ptr;
+ rb_gc_mark(data->ast_value);
+}
+
+static size_t
+node_memsize(const void *ptr)
+{
+ struct ASTNodeData *data = (struct ASTNodeData *)ptr;
+ size_t size = sizeof(struct ASTNodeData);
+ if (data->ast_value) {
+ rb_ast_t *ast = rb_ruby_ast_data_get(data->ast_value);
+ size += rb_ast_memsize(ast);
+ }
+
+ return size;
+}
+
+static const rb_data_type_t rb_node_type = {
+ "AST/node",
+ {node_gc_mark, RUBY_TYPED_DEFAULT_FREE, node_memsize,},
+ 0, 0,
+ RUBY_TYPED_FREE_IMMEDIATELY,
+};
+
+struct ASTLocationData {
+ int first_lineno;
+ int first_column;
+ int last_lineno;
+ int last_column;
+};
+
+static void
+location_gc_mark(void *ptr)
+{
+}
+
+static size_t
+location_memsize(const void *ptr)
+{
+ return sizeof(struct ASTLocationData);
+}
+
+static const rb_data_type_t rb_location_type = {
+ "AST/location",
+ {location_gc_mark, RUBY_TYPED_DEFAULT_FREE, location_memsize,},
+ 0, 0,
+ RUBY_TYPED_FREE_IMMEDIATELY,
+};
+
+
+static VALUE rb_ast_node_alloc(VALUE klass);
+
+static void
+setup_node(VALUE obj, VALUE ast_value, const NODE *node)
+{
+ struct ASTNodeData *data;
+
+ TypedData_Get_Struct(obj, struct ASTNodeData, &rb_node_type, data);
+ data->ast_value = ast_value;
+ data->node = node;
+}
+
+static VALUE
+ast_new_internal(VALUE ast_value, const NODE *node)
+{
+ VALUE obj;
+
+ obj = rb_ast_node_alloc(rb_cNode);
+ setup_node(obj, ast_value, node);
+
+ return obj;
+}
+
+static VALUE rb_ast_parse_str(VALUE str, VALUE keep_script_lines, VALUE error_tolerant, VALUE keep_tokens);
+static VALUE rb_ast_parse_file(VALUE path, VALUE keep_script_lines, VALUE error_tolerant, VALUE keep_tokens);
+
+static VALUE
+ast_parse_new(void)
+{
+ return rb_parser_set_context(rb_parser_new(), NULL, 0);
+}
+
+static VALUE
+ast_parse_done(VALUE ast_value)
+{
+ rb_ast_t *ast = rb_ruby_ast_data_get(ast_value);
+
+ if (!ast->body.root) {
+ rb_ast_dispose(ast);
+ rb_exc_raise(GET_EC()->errinfo);
+ }
+
+ return ast_new_internal(ast_value, (NODE *)ast->body.root);
+}
+
+static VALUE
+setup_vparser(VALUE keep_script_lines, VALUE error_tolerant, VALUE keep_tokens)
+{
+ VALUE vparser = ast_parse_new();
+ if (RTEST(keep_script_lines)) rb_parser_set_script_lines(vparser);
+ if (RTEST(error_tolerant)) rb_parser_error_tolerant(vparser);
+ if (RTEST(keep_tokens)) rb_parser_keep_tokens(vparser);
+ return vparser;
+}
+
+static VALUE
+ast_s_parse(rb_execution_context_t *ec, VALUE module, VALUE str, VALUE keep_script_lines, VALUE error_tolerant, VALUE keep_tokens)
+{
+ return rb_ast_parse_str(str, keep_script_lines, error_tolerant, keep_tokens);
+}
+
+static VALUE
+rb_ast_parse_str(VALUE str, VALUE keep_script_lines, VALUE error_tolerant, VALUE keep_tokens)
+{
+ VALUE ast_value = Qnil;
+ StringValue(str);
+ VALUE vparser = setup_vparser(keep_script_lines, error_tolerant, keep_tokens);
+ ast_value = rb_parser_compile_string_path(vparser, Qnil, str, 1);
+ return ast_parse_done(ast_value);
+}
+
+static VALUE
+ast_s_parse_file(rb_execution_context_t *ec, VALUE module, VALUE path, VALUE keep_script_lines, VALUE error_tolerant, VALUE keep_tokens)
+{
+ return rb_ast_parse_file(path, keep_script_lines, error_tolerant, keep_tokens);
+}
+
+static VALUE
+rb_ast_parse_file(VALUE path, VALUE keep_script_lines, VALUE error_tolerant, VALUE keep_tokens)
+{
+ VALUE f;
+ VALUE ast_value = Qnil;
+ rb_encoding *enc = rb_utf8_encoding();
+
+ f = rb_file_open_str(path, "r");
+ rb_funcall(f, rb_intern("set_encoding"), 2, rb_enc_from_encoding(enc), rb_str_new_cstr("-"));
+ VALUE vparser = setup_vparser(keep_script_lines, error_tolerant, keep_tokens);
+ ast_value = rb_parser_compile_file_path(vparser, Qnil, f, 1);
+ rb_io_close(f);
+ return ast_parse_done(ast_value);
+}
+
+static VALUE
+rb_ast_parse_array(VALUE array, VALUE keep_script_lines, VALUE error_tolerant, VALUE keep_tokens)
+{
+ VALUE ast_value = Qnil;
+
+ array = rb_check_array_type(array);
+ VALUE vparser = setup_vparser(keep_script_lines, error_tolerant, keep_tokens);
+ ast_value = rb_parser_compile_array(vparser, Qnil, array, 1);
+ return ast_parse_done(ast_value);
+}
+
+static VALUE node_children(VALUE, const NODE*);
+
+static VALUE
+node_find(VALUE self, const int node_id)
+{
+ VALUE ary;
+ long i;
+ struct ASTNodeData *data;
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+
+ if (nd_node_id(data->node) == node_id) return self;
+
+ ary = node_children(data->ast_value, data->node);
+
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
+ VALUE child = RARRAY_AREF(ary, i);
+
+ if (CLASS_OF(child) == rb_cNode) {
+ VALUE result = node_find(child, node_id);
+ if (RTEST(result)) return result;
+ }
+ }
+
+ return Qnil;
+}
+
+extern VALUE rb_e_script;
+
+static VALUE
+node_id_for_backtrace_location(rb_execution_context_t *ec, VALUE module, VALUE location)
+{
+ int node_id;
+
+ if (!rb_frame_info_p(location)) {
+ rb_raise(rb_eTypeError, "Thread::Backtrace::Location object expected");
+ }
+
+ node_id = rb_get_node_id_from_frame_info(location);
+ if (node_id == -1) {
+ return Qnil;
+ }
+
+ return INT2NUM(node_id);
+}
+
+static VALUE
+ast_s_of(rb_execution_context_t *ec, VALUE module, VALUE body, VALUE keep_script_lines, VALUE error_tolerant, VALUE keep_tokens)
+{
+ VALUE node, lines = Qnil;
+ const rb_iseq_t *iseq;
+ int node_id;
+
+ if (rb_frame_info_p(body)) {
+ iseq = rb_get_iseq_from_frame_info(body);
+ node_id = rb_get_node_id_from_frame_info(body);
+ }
+ else {
+ iseq = NULL;
+
+ if (rb_obj_is_proc(body)) {
+ iseq = vm_proc_iseq(body);
+
+ if (!rb_obj_is_iseq((VALUE)iseq)) return Qnil;
+ }
+ else {
+ iseq = rb_method_iseq(body);
+ }
+ if (iseq) {
+ node_id = ISEQ_BODY(iseq)->location.node_id;
+ }
+ }
+
+ if (!iseq) {
+ return Qnil;
+ }
+
+ if (ISEQ_BODY(iseq)->prism) {
+ rb_raise(rb_eRuntimeError, "cannot get AST for ISEQ compiled by prism");
+ }
+
+ lines = ISEQ_BODY(iseq)->variable.script_lines;
+
+ VALUE path = rb_iseq_path(iseq);
+ int e_option = RSTRING_LEN(path) == 2 && memcmp(RSTRING_PTR(path), "-e", 2) == 0;
+
+ if (NIL_P(lines) && rb_iseq_from_eval_p(iseq) && !e_option) {
+ rb_raise(rb_eArgError, "cannot get AST for method defined in eval");
+ }
+
+ if (!NIL_P(lines)) {
+ node = rb_ast_parse_array(lines, keep_script_lines, error_tolerant, keep_tokens);
+ }
+ else if (e_option) {
+ node = rb_ast_parse_str(rb_e_script, keep_script_lines, error_tolerant, keep_tokens);
+ }
+ else {
+ node = rb_ast_parse_file(path, keep_script_lines, error_tolerant, keep_tokens);
+ }
+
+ return node_find(node, node_id);
+}
+
+static VALUE
+rb_ast_node_alloc(VALUE klass)
+{
+ struct ASTNodeData *data;
+ VALUE obj = TypedData_Make_Struct(klass, struct ASTNodeData, &rb_node_type, data);
+
+ return obj;
+}
+
+static const char*
+node_type_to_str(const NODE *node)
+{
+ return (ruby_node_name(nd_type(node)) + rb_strlen_lit("NODE_"));
+}
+
+static VALUE
+ast_node_type(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTNodeData *data;
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+
+ return rb_sym_intern_ascii_cstr(node_type_to_str(data->node));
+}
+
+static VALUE
+ast_node_node_id(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTNodeData *data;
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+
+ return INT2FIX(nd_node_id(data->node));
+}
+
+#define NEW_CHILD(ast_value, node) (node ? ast_new_internal(ast_value, node) : Qnil)
+
+static VALUE
+rb_ary_new_from_node_args(VALUE ast_value, long n, ...)
+{
+ va_list ar;
+ VALUE ary;
+ long i;
+
+ ary = rb_ary_new2(n);
+
+ va_start(ar, n);
+ for (i=0; i<n; i++) {
+ NODE *node;
+ node = va_arg(ar, NODE *);
+ rb_ary_push(ary, NEW_CHILD(ast_value, node));
+ }
+ va_end(ar);
+ return ary;
+}
+
+static VALUE
+dump_block(VALUE ast_value, const struct RNode_BLOCK *node)
+{
+ VALUE ary = rb_ary_new();
+ do {
+ rb_ary_push(ary, NEW_CHILD(ast_value, node->nd_head));
+ } while (node->nd_next &&
+ nd_type_p(node->nd_next, NODE_BLOCK) &&
+ (node = RNODE_BLOCK(node->nd_next), 1));
+ if (node->nd_next) {
+ rb_ary_push(ary, NEW_CHILD(ast_value, node->nd_next));
+ }
+
+ return ary;
+}
+
+static VALUE
+dump_array(VALUE ast_value, const struct RNode_LIST *node)
+{
+ VALUE ary = rb_ary_new();
+ rb_ary_push(ary, NEW_CHILD(ast_value, node->nd_head));
+
+ while (node->nd_next && nd_type_p(node->nd_next, NODE_LIST)) {
+ node = RNODE_LIST(node->nd_next);
+ rb_ary_push(ary, NEW_CHILD(ast_value, node->nd_head));
+ }
+ rb_ary_push(ary, NEW_CHILD(ast_value, node->nd_next));
+
+ return ary;
+}
+
+static VALUE
+dump_parser_array(VALUE ast_value, rb_parser_ary_t *p_ary)
+{
+ VALUE ary;
+
+ if (p_ary->data_type != PARSER_ARY_DATA_NODE) {
+ rb_bug("unexpected rb_parser_ary_data_type: %d", p_ary->data_type);
+ }
+
+ ary = rb_ary_new();
+
+ for (long i = 0; i < p_ary->len; i++) {
+ rb_ary_push(ary, NEW_CHILD(ast_value, p_ary->data[i]));
+ }
+
+ return ary;
+}
+
+static VALUE
+var_name(ID id)
+{
+ if (!id) return Qnil;
+ if (!rb_id2str(id)) return Qnil;
+ return ID2SYM(id);
+}
+
+static VALUE
+no_name_rest(void)
+{
+ ID rest;
+ CONST_ID(rest, "NODE_SPECIAL_NO_NAME_REST");
+ return ID2SYM(rest);
+}
+
+static VALUE
+rest_arg(VALUE ast_value, const NODE *rest_arg)
+{
+ return NODE_NAMED_REST_P(rest_arg) ? NEW_CHILD(ast_value, rest_arg) : no_name_rest();
+}
+
+static VALUE
+node_children(VALUE ast_value, const NODE *node)
+{
+ char name[sizeof("$") + DECIMAL_SIZE_OF(long)];
+
+ enum node_type type = nd_type(node);
+ switch (type) {
+ case NODE_BLOCK:
+ return dump_block(ast_value, RNODE_BLOCK(node));
+ case NODE_IF:
+ return rb_ary_new_from_node_args(ast_value, 3, RNODE_IF(node)->nd_cond, RNODE_IF(node)->nd_body, RNODE_IF(node)->nd_else);
+ case NODE_UNLESS:
+ return rb_ary_new_from_node_args(ast_value, 3, RNODE_UNLESS(node)->nd_cond, RNODE_UNLESS(node)->nd_body, RNODE_UNLESS(node)->nd_else);
+ case NODE_CASE:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_CASE(node)->nd_head, RNODE_CASE(node)->nd_body);
+ case NODE_CASE2:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_CASE2(node)->nd_head, RNODE_CASE2(node)->nd_body);
+ case NODE_CASE3:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_CASE3(node)->nd_head, RNODE_CASE3(node)->nd_body);
+ case NODE_WHEN:
+ return rb_ary_new_from_node_args(ast_value, 3, RNODE_WHEN(node)->nd_head, RNODE_WHEN(node)->nd_body, RNODE_WHEN(node)->nd_next);
+ case NODE_IN:
+ return rb_ary_new_from_node_args(ast_value, 3, RNODE_IN(node)->nd_head, RNODE_IN(node)->nd_body, RNODE_IN(node)->nd_next);
+ case NODE_WHILE:
+ case NODE_UNTIL:
+ return rb_ary_push(rb_ary_new_from_node_args(ast_value, 2, RNODE_WHILE(node)->nd_cond, RNODE_WHILE(node)->nd_body),
+ RBOOL(RNODE_WHILE(node)->nd_state));
+ case NODE_ITER:
+ case NODE_FOR:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_ITER(node)->nd_iter, RNODE_ITER(node)->nd_body);
+ case NODE_FOR_MASGN:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_FOR_MASGN(node)->nd_var);
+ case NODE_BREAK:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_BREAK(node)->nd_stts);
+ case NODE_NEXT:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_NEXT(node)->nd_stts);
+ case NODE_RETURN:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_RETURN(node)->nd_stts);
+ case NODE_REDO:
+ return rb_ary_new_from_node_args(ast_value, 0);
+ case NODE_RETRY:
+ return rb_ary_new_from_node_args(ast_value, 0);
+ case NODE_BEGIN:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_BEGIN(node)->nd_body);
+ case NODE_RESCUE:
+ return rb_ary_new_from_node_args(ast_value, 3, RNODE_RESCUE(node)->nd_head, RNODE_RESCUE(node)->nd_resq, RNODE_RESCUE(node)->nd_else);
+ case NODE_RESBODY:
+ return rb_ary_new_from_node_args(ast_value, 4, RNODE_RESBODY(node)->nd_args, RNODE_RESBODY(node)->nd_exc_var, RNODE_RESBODY(node)->nd_body, RNODE_RESBODY(node)->nd_next);
+ case NODE_ENSURE:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_ENSURE(node)->nd_head, RNODE_ENSURE(node)->nd_ensr);
+ case NODE_AND:
+ case NODE_OR:
+ {
+ VALUE ary = rb_ary_new();
+
+ while (1) {
+ rb_ary_push(ary, NEW_CHILD(ast_value, RNODE_AND(node)->nd_1st));
+ if (!RNODE_AND(node)->nd_2nd || !nd_type_p(RNODE_AND(node)->nd_2nd, type))
+ break;
+ node = RNODE_AND(node)->nd_2nd;
+ }
+ rb_ary_push(ary, NEW_CHILD(ast_value, RNODE_AND(node)->nd_2nd));
+ return ary;
+ }
+ case NODE_MASGN:
+ if (NODE_NAMED_REST_P(RNODE_MASGN(node)->nd_args)) {
+ return rb_ary_new_from_node_args(ast_value, 3, RNODE_MASGN(node)->nd_value, RNODE_MASGN(node)->nd_head, RNODE_MASGN(node)->nd_args);
+ }
+ else {
+ return rb_ary_new_from_args(3, NEW_CHILD(ast_value, RNODE_MASGN(node)->nd_value),
+ NEW_CHILD(ast_value, RNODE_MASGN(node)->nd_head),
+ no_name_rest());
+ }
+ case NODE_LASGN:
+ if (NODE_REQUIRED_KEYWORD_P(RNODE_LASGN(node)->nd_value)) {
+ return rb_ary_new_from_args(2, var_name(RNODE_LASGN(node)->nd_vid), ID2SYM(rb_intern("NODE_SPECIAL_REQUIRED_KEYWORD")));
+ }
+ return rb_ary_new_from_args(2, var_name(RNODE_LASGN(node)->nd_vid), NEW_CHILD(ast_value, RNODE_LASGN(node)->nd_value));
+ case NODE_DASGN:
+ if (NODE_REQUIRED_KEYWORD_P(RNODE_DASGN(node)->nd_value)) {
+ return rb_ary_new_from_args(2, var_name(RNODE_DASGN(node)->nd_vid), ID2SYM(rb_intern("NODE_SPECIAL_REQUIRED_KEYWORD")));
+ }
+ return rb_ary_new_from_args(2, var_name(RNODE_DASGN(node)->nd_vid), NEW_CHILD(ast_value, RNODE_DASGN(node)->nd_value));
+ case NODE_IASGN:
+ return rb_ary_new_from_args(2, var_name(RNODE_IASGN(node)->nd_vid), NEW_CHILD(ast_value, RNODE_IASGN(node)->nd_value));
+ case NODE_CVASGN:
+ return rb_ary_new_from_args(2, var_name(RNODE_CVASGN(node)->nd_vid), NEW_CHILD(ast_value, RNODE_CVASGN(node)->nd_value));
+ case NODE_GASGN:
+ return rb_ary_new_from_args(2, var_name(RNODE_GASGN(node)->nd_vid), NEW_CHILD(ast_value, RNODE_GASGN(node)->nd_value));
+ case NODE_CDECL:
+ if (RNODE_CDECL(node)->nd_vid) {
+ return rb_ary_new_from_args(2, ID2SYM(RNODE_CDECL(node)->nd_vid), NEW_CHILD(ast_value, RNODE_CDECL(node)->nd_value));
+ }
+ return rb_ary_new_from_args(3, NEW_CHILD(ast_value, RNODE_CDECL(node)->nd_else), ID2SYM(RNODE_COLON2(RNODE_CDECL(node)->nd_else)->nd_mid), NEW_CHILD(ast_value, RNODE_CDECL(node)->nd_value));
+ case NODE_OP_ASGN1:
+ return rb_ary_new_from_args(4, NEW_CHILD(ast_value, RNODE_OP_ASGN1(node)->nd_recv),
+ ID2SYM(RNODE_OP_ASGN1(node)->nd_mid),
+ NEW_CHILD(ast_value, RNODE_OP_ASGN1(node)->nd_index),
+ NEW_CHILD(ast_value, RNODE_OP_ASGN1(node)->nd_rvalue));
+ case NODE_OP_ASGN2:
+ return rb_ary_new_from_args(5, NEW_CHILD(ast_value, RNODE_OP_ASGN2(node)->nd_recv),
+ RBOOL(RNODE_OP_ASGN2(node)->nd_aid),
+ ID2SYM(RNODE_OP_ASGN2(node)->nd_vid),
+ ID2SYM(RNODE_OP_ASGN2(node)->nd_mid),
+ NEW_CHILD(ast_value, RNODE_OP_ASGN2(node)->nd_value));
+ case NODE_OP_ASGN_AND:
+ return rb_ary_new_from_args(3, NEW_CHILD(ast_value, RNODE_OP_ASGN_AND(node)->nd_head), ID2SYM(idANDOP),
+ NEW_CHILD(ast_value, RNODE_OP_ASGN_AND(node)->nd_value));
+ case NODE_OP_ASGN_OR:
+ return rb_ary_new_from_args(3, NEW_CHILD(ast_value, RNODE_OP_ASGN_OR(node)->nd_head), ID2SYM(idOROP),
+ NEW_CHILD(ast_value, RNODE_OP_ASGN_OR(node)->nd_value));
+ case NODE_OP_CDECL:
+ return rb_ary_new_from_args(3, NEW_CHILD(ast_value, RNODE_OP_CDECL(node)->nd_head),
+ ID2SYM(RNODE_OP_CDECL(node)->nd_aid),
+ NEW_CHILD(ast_value, RNODE_OP_CDECL(node)->nd_value));
+ case NODE_CALL:
+ return rb_ary_new_from_args(3, NEW_CHILD(ast_value, RNODE_CALL(node)->nd_recv),
+ ID2SYM(RNODE_CALL(node)->nd_mid),
+ NEW_CHILD(ast_value, RNODE_CALL(node)->nd_args));
+ case NODE_OPCALL:
+ return rb_ary_new_from_args(3, NEW_CHILD(ast_value, RNODE_OPCALL(node)->nd_recv),
+ ID2SYM(RNODE_OPCALL(node)->nd_mid),
+ NEW_CHILD(ast_value, RNODE_OPCALL(node)->nd_args));
+ case NODE_QCALL:
+ return rb_ary_new_from_args(3, NEW_CHILD(ast_value, RNODE_QCALL(node)->nd_recv),
+ ID2SYM(RNODE_QCALL(node)->nd_mid),
+ NEW_CHILD(ast_value, RNODE_QCALL(node)->nd_args));
+ case NODE_FCALL:
+ return rb_ary_new_from_args(2, ID2SYM(RNODE_FCALL(node)->nd_mid),
+ NEW_CHILD(ast_value, RNODE_FCALL(node)->nd_args));
+ case NODE_VCALL:
+ return rb_ary_new_from_args(1, ID2SYM(RNODE_VCALL(node)->nd_mid));
+ case NODE_SUPER:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_SUPER(node)->nd_args);
+ case NODE_ZSUPER:
+ return rb_ary_new_from_node_args(ast_value, 0);
+ case NODE_LIST:
+ return dump_array(ast_value, RNODE_LIST(node));
+ case NODE_ZLIST:
+ return rb_ary_new_from_node_args(ast_value, 0);
+ case NODE_HASH:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_HASH(node)->nd_head);
+ case NODE_YIELD:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_YIELD(node)->nd_head);
+ case NODE_LVAR:
+ return rb_ary_new_from_args(1, var_name(RNODE_LVAR(node)->nd_vid));
+ case NODE_DVAR:
+ return rb_ary_new_from_args(1, var_name(RNODE_DVAR(node)->nd_vid));
+ case NODE_IVAR:
+ return rb_ary_new_from_args(1, ID2SYM(RNODE_IVAR(node)->nd_vid));
+ case NODE_CONST:
+ return rb_ary_new_from_args(1, ID2SYM(RNODE_CONST(node)->nd_vid));
+ case NODE_CVAR:
+ return rb_ary_new_from_args(1, ID2SYM(RNODE_CVAR(node)->nd_vid));
+ case NODE_GVAR:
+ return rb_ary_new_from_args(1, ID2SYM(RNODE_GVAR(node)->nd_vid));
+ case NODE_NTH_REF:
+ snprintf(name, sizeof(name), "$%ld", RNODE_NTH_REF(node)->nd_nth);
+ return rb_ary_new_from_args(1, ID2SYM(rb_intern(name)));
+ case NODE_BACK_REF:
+ name[0] = '$';
+ name[1] = (char)RNODE_BACK_REF(node)->nd_nth;
+ name[2] = '\0';
+ return rb_ary_new_from_args(1, ID2SYM(rb_intern(name)));
+ case NODE_MATCH:
+ return rb_ary_new_from_args(1, rb_node_regx_string_val(node));
+ case NODE_MATCH2:
+ if (RNODE_MATCH2(node)->nd_args) {
+ return rb_ary_new_from_node_args(ast_value, 3, RNODE_MATCH2(node)->nd_recv, RNODE_MATCH2(node)->nd_value, RNODE_MATCH2(node)->nd_args);
+ }
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_MATCH2(node)->nd_recv, RNODE_MATCH2(node)->nd_value);
+ case NODE_MATCH3:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_MATCH3(node)->nd_recv, RNODE_MATCH3(node)->nd_value);
+ case NODE_STR:
+ case NODE_XSTR:
+ return rb_ary_new_from_args(1, rb_node_str_string_val(node));
+ case NODE_INTEGER:
+ return rb_ary_new_from_args(1, rb_node_integer_literal_val(node));
+ case NODE_FLOAT:
+ return rb_ary_new_from_args(1, rb_node_float_literal_val(node));
+ case NODE_RATIONAL:
+ return rb_ary_new_from_args(1, rb_node_rational_literal_val(node));
+ case NODE_IMAGINARY:
+ return rb_ary_new_from_args(1, rb_node_imaginary_literal_val(node));
+ case NODE_REGX:
+ return rb_ary_new_from_args(1, rb_node_regx_string_val(node));
+ case NODE_ONCE:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_ONCE(node)->nd_body);
+ case NODE_DSTR:
+ case NODE_DXSTR:
+ case NODE_DREGX:
+ case NODE_DSYM:
+ {
+ struct RNode_LIST *n = RNODE_DSTR(node)->nd_next;
+ VALUE head = Qnil, next = Qnil;
+ if (n) {
+ head = NEW_CHILD(ast_value, n->nd_head);
+ next = NEW_CHILD(ast_value, n->nd_next);
+ }
+ return rb_ary_new_from_args(3, rb_node_dstr_string_val(node), head, next);
+ }
+ case NODE_SYM:
+ return rb_ary_new_from_args(1, rb_node_sym_string_val(node));
+ case NODE_EVSTR:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_EVSTR(node)->nd_body);
+ case NODE_ARGSCAT:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_ARGSCAT(node)->nd_head, RNODE_ARGSCAT(node)->nd_body);
+ case NODE_ARGSPUSH:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_ARGSPUSH(node)->nd_head, RNODE_ARGSPUSH(node)->nd_body);
+ case NODE_SPLAT:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_SPLAT(node)->nd_head);
+ case NODE_BLOCK_PASS:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_BLOCK_PASS(node)->nd_head, RNODE_BLOCK_PASS(node)->nd_body);
+ case NODE_DEFN:
+ return rb_ary_new_from_args(2, ID2SYM(RNODE_DEFN(node)->nd_mid), NEW_CHILD(ast_value, RNODE_DEFN(node)->nd_defn));
+ case NODE_DEFS:
+ return rb_ary_new_from_args(3, NEW_CHILD(ast_value, RNODE_DEFS(node)->nd_recv), ID2SYM(RNODE_DEFS(node)->nd_mid), NEW_CHILD(ast_value, RNODE_DEFS(node)->nd_defn));
+ case NODE_ALIAS:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_ALIAS(node)->nd_1st, RNODE_ALIAS(node)->nd_2nd);
+ case NODE_VALIAS:
+ return rb_ary_new_from_args(2, ID2SYM(RNODE_VALIAS(node)->nd_alias), ID2SYM(RNODE_VALIAS(node)->nd_orig));
+ case NODE_UNDEF:
+ return rb_ary_new_from_args(1, dump_parser_array(ast_value, RNODE_UNDEF(node)->nd_undefs));
+ case NODE_CLASS:
+ return rb_ary_new_from_node_args(ast_value, 3, RNODE_CLASS(node)->nd_cpath, RNODE_CLASS(node)->nd_super, RNODE_CLASS(node)->nd_body);
+ case NODE_MODULE:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_MODULE(node)->nd_cpath, RNODE_MODULE(node)->nd_body);
+ case NODE_SCLASS:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_SCLASS(node)->nd_recv, RNODE_SCLASS(node)->nd_body);
+ case NODE_COLON2:
+ return rb_ary_new_from_args(2, NEW_CHILD(ast_value, RNODE_COLON2(node)->nd_head), ID2SYM(RNODE_COLON2(node)->nd_mid));
+ case NODE_COLON3:
+ return rb_ary_new_from_args(1, ID2SYM(RNODE_COLON3(node)->nd_mid));
+ case NODE_DOT2:
+ case NODE_DOT3:
+ case NODE_FLIP2:
+ case NODE_FLIP3:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_DOT2(node)->nd_beg, RNODE_DOT2(node)->nd_end);
+ case NODE_SELF:
+ return rb_ary_new_from_node_args(ast_value, 0);
+ case NODE_NIL:
+ return rb_ary_new_from_node_args(ast_value, 0);
+ case NODE_TRUE:
+ return rb_ary_new_from_node_args(ast_value, 0);
+ case NODE_FALSE:
+ return rb_ary_new_from_node_args(ast_value, 0);
+ case NODE_ERRINFO:
+ return rb_ary_new_from_node_args(ast_value, 0);
+ case NODE_DEFINED:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_DEFINED(node)->nd_head);
+ case NODE_POSTEXE:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_POSTEXE(node)->nd_body);
+ case NODE_ATTRASGN:
+ return rb_ary_new_from_args(3, NEW_CHILD(ast_value, RNODE_ATTRASGN(node)->nd_recv), ID2SYM(RNODE_ATTRASGN(node)->nd_mid), NEW_CHILD(ast_value, RNODE_ATTRASGN(node)->nd_args));
+ case NODE_LAMBDA:
+ return rb_ary_new_from_node_args(ast_value, 1, RNODE_LAMBDA(node)->nd_body);
+ case NODE_OPT_ARG:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_OPT_ARG(node)->nd_body, RNODE_OPT_ARG(node)->nd_next);
+ case NODE_KW_ARG:
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_KW_ARG(node)->nd_body, RNODE_KW_ARG(node)->nd_next);
+ case NODE_POSTARG:
+ if (NODE_NAMED_REST_P(RNODE_POSTARG(node)->nd_1st)) {
+ return rb_ary_new_from_node_args(ast_value, 2, RNODE_POSTARG(node)->nd_1st, RNODE_POSTARG(node)->nd_2nd);
+ }
+ return rb_ary_new_from_args(2, no_name_rest(),
+ NEW_CHILD(ast_value, RNODE_POSTARG(node)->nd_2nd));
+ case NODE_ARGS:
+ {
+ struct rb_args_info *ainfo = &RNODE_ARGS(node)->nd_ainfo;
+ return rb_ary_new_from_args(10,
+ INT2NUM(ainfo->pre_args_num),
+ NEW_CHILD(ast_value, ainfo->pre_init),
+ NEW_CHILD(ast_value, (NODE *)ainfo->opt_args),
+ var_name(ainfo->first_post_arg),
+ INT2NUM(ainfo->post_args_num),
+ NEW_CHILD(ast_value, ainfo->post_init),
+ (ainfo->rest_arg == NODE_SPECIAL_EXCESSIVE_COMMA
+ ? ID2SYM(rb_intern("NODE_SPECIAL_EXCESSIVE_COMMA"))
+ : var_name(ainfo->rest_arg)),
+ (ainfo->no_kwarg ? Qfalse : NEW_CHILD(ast_value, (NODE *)ainfo->kw_args)),
+ (ainfo->no_kwarg ? Qfalse : NEW_CHILD(ast_value, ainfo->kw_rest_arg)),
+ var_name(ainfo->block_arg));
+ }
+ case NODE_SCOPE:
+ {
+ rb_ast_id_table_t *tbl = RNODE_SCOPE(node)->nd_tbl;
+ int i, size = tbl ? tbl->size : 0;
+ VALUE locals = rb_ary_new_capa(size);
+ for (i = 0; i < size; i++) {
+ rb_ary_push(locals, var_name(tbl->ids[i]));
+ }
+ return rb_ary_new_from_args(3, locals, NEW_CHILD(ast_value, (NODE *)RNODE_SCOPE(node)->nd_args), NEW_CHILD(ast_value, RNODE_SCOPE(node)->nd_body));
+ }
+ case NODE_ARYPTN:
+ {
+ VALUE rest = rest_arg(ast_value, RNODE_ARYPTN(node)->rest_arg);
+ return rb_ary_new_from_args(4,
+ NEW_CHILD(ast_value, RNODE_ARYPTN(node)->nd_pconst),
+ NEW_CHILD(ast_value, RNODE_ARYPTN(node)->pre_args),
+ rest,
+ NEW_CHILD(ast_value, RNODE_ARYPTN(node)->post_args));
+ }
+ case NODE_FNDPTN:
+ {
+ VALUE pre_rest = rest_arg(ast_value, RNODE_FNDPTN(node)->pre_rest_arg);
+ VALUE post_rest = rest_arg(ast_value, RNODE_FNDPTN(node)->post_rest_arg);
+ return rb_ary_new_from_args(4,
+ NEW_CHILD(ast_value, RNODE_FNDPTN(node)->nd_pconst),
+ pre_rest,
+ NEW_CHILD(ast_value, RNODE_FNDPTN(node)->args),
+ post_rest);
+ }
+ case NODE_HSHPTN:
+ {
+ VALUE kwrest = RNODE_HSHPTN(node)->nd_pkwrestarg == NODE_SPECIAL_NO_REST_KEYWORD ? ID2SYM(rb_intern("NODE_SPECIAL_NO_REST_KEYWORD")) :
+ NEW_CHILD(ast_value, RNODE_HSHPTN(node)->nd_pkwrestarg);
+
+ return rb_ary_new_from_args(3,
+ NEW_CHILD(ast_value, RNODE_HSHPTN(node)->nd_pconst),
+ NEW_CHILD(ast_value, RNODE_HSHPTN(node)->nd_pkwargs),
+ kwrest);
+ }
+ case NODE_LINE:
+ return rb_ary_new_from_args(1, rb_node_line_lineno_val(node));
+ case NODE_FILE:
+ return rb_ary_new_from_args(1, rb_node_file_path_val(node));
+ case NODE_ENCODING:
+ return rb_ary_new_from_args(1, rb_node_encoding_val(node));
+ case NODE_ERROR:
+ return rb_ary_new_from_node_args(ast_value, 0);
+ case NODE_ARGS_AUX:
+ case NODE_LAST:
+ break;
+ }
+
+ rb_bug("node_children: unknown node: %s", ruby_node_name(type));
+}
+
+static VALUE
+ast_node_children(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTNodeData *data;
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+
+ return node_children(data->ast_value, data->node);
+}
+
+static int
+null_loc_p(rb_code_location_t *loc)
+{
+ return (loc->beg_pos.lineno == 0 && loc->beg_pos.column == -1 && loc->end_pos.lineno == 0 && loc->end_pos.column == -1);
+}
+
+static VALUE
+location_new(rb_code_location_t *loc)
+{
+ VALUE obj;
+ struct ASTLocationData *data;
+
+ if (null_loc_p(loc)) return Qnil;
+
+ obj = TypedData_Make_Struct(rb_cLocation, struct ASTLocationData, &rb_location_type, data);
+ data->first_lineno = loc->beg_pos.lineno;
+ data->first_column = loc->beg_pos.column;
+ data->last_lineno = loc->end_pos.lineno;
+ data->last_column = loc->end_pos.column;
+
+ return obj;
+}
+
+static VALUE
+node_locations(VALUE ast_value, const NODE *node)
+{
+ enum node_type type = nd_type(node);
+ switch (type) {
+ case NODE_ALIAS:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_ALIAS(node)->keyword_loc));
+ case NODE_AND:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_AND(node)->operator_loc));
+ case NODE_BLOCK_PASS:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_BLOCK_PASS(node)->operator_loc));
+ case NODE_BREAK:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_BREAK(node)->keyword_loc));
+ case NODE_CASE:
+ return rb_ary_new_from_args(3,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_CASE(node)->case_keyword_loc),
+ location_new(&RNODE_CASE(node)->end_keyword_loc));
+ case NODE_CASE2:
+ return rb_ary_new_from_args(3,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_CASE2(node)->case_keyword_loc),
+ location_new(&RNODE_CASE2(node)->end_keyword_loc));
+ case NODE_CASE3:
+ return rb_ary_new_from_args(3,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_CASE3(node)->case_keyword_loc),
+ location_new(&RNODE_CASE3(node)->end_keyword_loc));
+ case NODE_CLASS:
+ return rb_ary_new_from_args(4,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_CLASS(node)->class_keyword_loc),
+ location_new(&RNODE_CLASS(node)->inheritance_operator_loc),
+ location_new(&RNODE_CLASS(node)->end_keyword_loc));
+ case NODE_COLON2:
+ return rb_ary_new_from_args(3,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_COLON2(node)->delimiter_loc),
+ location_new(&RNODE_COLON2(node)->name_loc));
+ case NODE_COLON3:
+ return rb_ary_new_from_args(3,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_COLON3(node)->delimiter_loc),
+ location_new(&RNODE_COLON3(node)->name_loc));
+ case NODE_DEFINED:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_DEFINED(node)->keyword_loc));
+ case NODE_DOT2:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_DOT2(node)->operator_loc));
+ case NODE_DOT3:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_DOT3(node)->operator_loc));
+ case NODE_EVSTR:
+ return rb_ary_new_from_args(3,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_EVSTR(node)->opening_loc),
+ location_new(&RNODE_EVSTR(node)->closing_loc));
+ case NODE_FLIP2:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_FLIP2(node)->operator_loc));
+ case NODE_FLIP3:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_FLIP3(node)->operator_loc));
+ case NODE_FOR:
+ return rb_ary_new_from_args(5,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_FOR(node)->for_keyword_loc),
+ location_new(&RNODE_FOR(node)->in_keyword_loc),
+ location_new(&RNODE_FOR(node)->do_keyword_loc),
+ location_new(&RNODE_FOR(node)->end_keyword_loc));
+ case NODE_LAMBDA:
+ return rb_ary_new_from_args(4,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_LAMBDA(node)->operator_loc),
+ location_new(&RNODE_LAMBDA(node)->opening_loc),
+ location_new(&RNODE_LAMBDA(node)->closing_loc));
+ case NODE_IF:
+ return rb_ary_new_from_args(4,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_IF(node)->if_keyword_loc),
+ location_new(&RNODE_IF(node)->then_keyword_loc),
+ location_new(&RNODE_IF(node)->end_keyword_loc));
+ case NODE_IN:
+ return rb_ary_new_from_args(4,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_IN(node)->in_keyword_loc),
+ location_new(&RNODE_IN(node)->then_keyword_loc),
+ location_new(&RNODE_IN(node)->operator_loc));
+ case NODE_MODULE:
+ return rb_ary_new_from_args(3,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_MODULE(node)->module_keyword_loc),
+ location_new(&RNODE_MODULE(node)->end_keyword_loc));
+ case NODE_NEXT:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_NEXT(node)->keyword_loc));
+ case NODE_OR:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_OR(node)->operator_loc));
+ case NODE_OP_ASGN1:
+ return rb_ary_new_from_args(5,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_OP_ASGN1(node)->call_operator_loc),
+ location_new(&RNODE_OP_ASGN1(node)->opening_loc),
+ location_new(&RNODE_OP_ASGN1(node)->closing_loc),
+ location_new(&RNODE_OP_ASGN1(node)->binary_operator_loc));
+ case NODE_OP_ASGN2:
+ return rb_ary_new_from_args(4,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_OP_ASGN2(node)->call_operator_loc),
+ location_new(&RNODE_OP_ASGN2(node)->message_loc),
+ location_new(&RNODE_OP_ASGN2(node)->binary_operator_loc));
+ case NODE_POSTEXE:
+ return rb_ary_new_from_args(4,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_POSTEXE(node)->keyword_loc),
+ location_new(&RNODE_POSTEXE(node)->opening_loc),
+ location_new(&RNODE_POSTEXE(node)->closing_loc));
+ case NODE_REDO:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_REDO(node)->keyword_loc));
+ case NODE_REGX:
+ return rb_ary_new_from_args(4,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_REGX(node)->opening_loc),
+ location_new(&RNODE_REGX(node)->content_loc),
+ location_new(&RNODE_REGX(node)->closing_loc));
+ case NODE_RETURN:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_RETURN(node)->keyword_loc));
+
+ case NODE_SCLASS:
+ return rb_ary_new_from_args(4,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_SCLASS(node)->class_keyword_loc),
+ location_new(&RNODE_SCLASS(node)->operator_loc),
+ location_new(&RNODE_SCLASS(node)->end_keyword_loc));
+
+ case NODE_SPLAT:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_SPLAT(node)->operator_loc));
+ case NODE_SUPER:
+ return rb_ary_new_from_args(4,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_SUPER(node)->keyword_loc),
+ location_new(&RNODE_SUPER(node)->lparen_loc),
+ location_new(&RNODE_SUPER(node)->rparen_loc));
+ case NODE_UNDEF:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_UNDEF(node)->keyword_loc));
+ case NODE_UNLESS:
+ return rb_ary_new_from_args(4,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_UNLESS(node)->keyword_loc),
+ location_new(&RNODE_UNLESS(node)->then_keyword_loc),
+ location_new(&RNODE_UNLESS(node)->end_keyword_loc));
+ case NODE_VALIAS:
+ return rb_ary_new_from_args(2,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_VALIAS(node)->keyword_loc));
+ case NODE_WHEN:
+ return rb_ary_new_from_args(3,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_WHEN(node)->keyword_loc),
+ location_new(&RNODE_WHEN(node)->then_keyword_loc));
+ case NODE_WHILE:
+ return rb_ary_new_from_args(3,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_WHILE(node)->keyword_loc),
+ location_new(&RNODE_WHILE(node)->closing_loc));
+ case NODE_UNTIL:
+ return rb_ary_new_from_args(3,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_UNTIL(node)->keyword_loc),
+ location_new(&RNODE_UNTIL(node)->closing_loc));
+ case NODE_YIELD:
+ return rb_ary_new_from_args(4,
+ location_new(nd_code_loc(node)),
+ location_new(&RNODE_YIELD(node)->keyword_loc),
+ location_new(&RNODE_YIELD(node)->lparen_loc),
+ location_new(&RNODE_YIELD(node)->rparen_loc));
+ case NODE_ARGS_AUX:
+ case NODE_LAST:
+ break;
+ default:
+ return rb_ary_new_from_args(1, location_new(nd_code_loc(node)));
+ }
+
+ rb_bug("node_locations: unknown node: %s", ruby_node_name(type));
+}
+
+static VALUE
+ast_node_locations(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTNodeData *data;
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+
+ return node_locations(data->ast_value, data->node);
+}
+
+static VALUE
+ast_node_first_lineno(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTNodeData *data;
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+
+ return INT2NUM(nd_first_lineno(data->node));
+}
+
+static VALUE
+ast_node_first_column(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTNodeData *data;
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+
+ return INT2NUM(nd_first_column(data->node));
+}
+
+static VALUE
+ast_node_last_lineno(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTNodeData *data;
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+
+ return INT2NUM(nd_last_lineno(data->node));
+}
+
+static VALUE
+ast_node_last_column(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTNodeData *data;
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+
+ return INT2NUM(nd_last_column(data->node));
+}
+
+static VALUE
+ast_node_all_tokens(rb_execution_context_t *ec, VALUE self)
+{
+ long i;
+ struct ASTNodeData *data;
+ rb_ast_t *ast;
+ rb_parser_ary_t *parser_tokens;
+ rb_parser_ast_token_t *parser_token;
+ VALUE str, loc, token, all_tokens;
+
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+ ast = rb_ruby_ast_data_get(data->ast_value);
+
+ parser_tokens = ast->node_buffer->tokens;
+ if (parser_tokens == NULL) {
+ return Qnil;
+ }
+
+ all_tokens = rb_ary_new2(parser_tokens->len);
+ for (i = 0; i < parser_tokens->len; i++) {
+ parser_token = parser_tokens->data[i];
+ str = rb_str_new(parser_token->str->ptr, parser_token->str->len);
+ loc = rb_ary_new_from_args(4,
+ INT2FIX(parser_token->loc.beg_pos.lineno),
+ INT2FIX(parser_token->loc.beg_pos.column),
+ INT2FIX(parser_token->loc.end_pos.lineno),
+ INT2FIX(parser_token->loc.end_pos.column)
+ );
+ token = rb_ary_new_from_args(4, INT2FIX(parser_token->id), ID2SYM(rb_intern(parser_token->type_name)), str, loc);
+ rb_ary_push(all_tokens, token);
+ }
+ rb_ary_freeze(all_tokens);
+
+ return all_tokens;
+}
+
+static VALUE
+ast_node_inspect(rb_execution_context_t *ec, VALUE self)
+{
+ VALUE str;
+ VALUE cname;
+ struct ASTNodeData *data;
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+
+ cname = rb_class_path(rb_obj_class(self));
+ str = rb_str_new2("#<");
+
+ rb_str_append(str, cname);
+ rb_str_catf(str, ":%s@%d:%d-%d:%d>",
+ node_type_to_str(data->node),
+ nd_first_lineno(data->node), nd_first_column(data->node),
+ nd_last_lineno(data->node), nd_last_column(data->node));
+
+ return str;
+}
+
+static VALUE
+ast_node_script_lines(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTNodeData *data;
+ rb_ast_t *ast;
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+ ast = rb_ruby_ast_data_get(data->ast_value);
+ rb_parser_ary_t *ret = ast->body.script_lines;
+ return rb_parser_build_script_lines_from(ret);
+}
+
+static VALUE
+ast_location_first_lineno(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTLocationData *data;
+ TypedData_Get_Struct(self, struct ASTLocationData, &rb_location_type, data);
+
+ return INT2NUM(data->first_lineno);
+}
+
+static VALUE
+ast_location_first_column(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTLocationData *data;
+ TypedData_Get_Struct(self, struct ASTLocationData, &rb_location_type, data);
+
+ return INT2NUM(data->first_column);
+}
+
+static VALUE
+ast_location_last_lineno(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTLocationData *data;
+ TypedData_Get_Struct(self, struct ASTLocationData, &rb_location_type, data);
+
+ return INT2NUM(data->last_lineno);
+}
+
+static VALUE
+ast_location_last_column(rb_execution_context_t *ec, VALUE self)
+{
+ struct ASTLocationData *data;
+ TypedData_Get_Struct(self, struct ASTLocationData, &rb_location_type, data);
+
+ return INT2NUM(data->last_column);
+}
+
+static VALUE
+ast_location_inspect(rb_execution_context_t *ec, VALUE self)
+{
+ VALUE str;
+ VALUE cname;
+ struct ASTLocationData *data;
+ TypedData_Get_Struct(self, struct ASTLocationData, &rb_location_type, data);
+
+ cname = rb_class_path(rb_obj_class(self));
+ str = rb_str_new2("#<");
+
+ rb_str_append(str, cname);
+ rb_str_catf(str, ":@%d:%d-%d:%d>",
+ data->first_lineno, data->first_column,
+ data->last_lineno, data->last_column);
+
+ return str;
+}
+
+#include "ast.rbinc"
+
+void
+Init_ast(void)
+{
+ rb_mAST = rb_define_module_under(rb_cRubyVM, "AbstractSyntaxTree");
+ rb_cNode = rb_define_class_under(rb_mAST, "Node", rb_cObject);
+ rb_cLocation = rb_define_class_under(rb_mAST, "Location", rb_cObject);
+ rb_undef_alloc_func(rb_cNode);
+ rb_undef_alloc_func(rb_cLocation);
+}
diff --git a/ast.rb b/ast.rb
new file mode 100644
index 0000000000..6380621780
--- /dev/null
+++ b/ast.rb
@@ -0,0 +1,332 @@
+# for ast.c
+
+# AbstractSyntaxTree provides methods to parse Ruby code into
+# abstract syntax trees. The nodes in the tree
+# are instances of RubyVM::AbstractSyntaxTree::Node.
+#
+# This module is MRI specific as it exposes implementation details
+# of the MRI abstract syntax tree.
+#
+# This module is experimental and its API is not stable, therefore it might
+# change without notice. As examples, the order of children nodes is not
+# guaranteed, the number of children nodes might change, there is no way to
+# access children nodes by name, etc.
+#
+# If you are looking for a stable API or an API working under multiple Ruby
+# implementations, consider using the _prism_ gem, which is the official
+# Ruby API to parse Ruby code.
+#
+module RubyVM::AbstractSyntaxTree
+
+ # call-seq:
+ # RubyVM::AbstractSyntaxTree.parse(string, keep_script_lines: RubyVM.keep_script_lines, error_tolerant: false, keep_tokens: false) -> RubyVM::AbstractSyntaxTree::Node
+ #
+ # Parses the given _string_ into an abstract syntax tree,
+ # returning the root node of that tree.
+ #
+ # RubyVM::AbstractSyntaxTree.parse("x = 1 + 2")
+ # # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-1:9>
+ #
+ # If <tt>keep_script_lines: true</tt> option is provided, the text of the parsed
+ # source is associated with nodes and is available via Node#script_lines.
+ #
+ # If <tt>keep_tokens: true</tt> option is provided, Node#tokens are populated.
+ #
+ # SyntaxError is raised if the given _string_ is invalid syntax. To overwrite this
+ # behavior, <tt>error_tolerant: true</tt> can be provided. In this case, the parser
+ # will produce a tree where expressions with syntax errors would be represented by
+ # Node with <tt>type=:ERROR</tt>.
+ #
+ # root = RubyVM::AbstractSyntaxTree.parse("x = 1; p(x; y=2")
+ # # <internal:ast>:33:in `parse': syntax error, unexpected ';', expecting ')' (SyntaxError)
+ # # x = 1; p(x; y=2
+ # # ^
+ #
+ # root = RubyVM::AbstractSyntaxTree.parse("x = 1; p(x; y=2", error_tolerant: true)
+ # # (SCOPE@1:0-1:15
+ # # tbl: [:x, :y]
+ # # args: nil
+ # # body: (BLOCK@1:0-1:15 (LASGN@1:0-1:5 :x (LIT@1:4-1:5 1)) (ERROR@1:7-1:11) (LASGN@1:12-1:15 :y (LIT@1:14-1:15 2))))
+ # root.children.last.children
+ # # [(LASGN@1:0-1:5 :x (LIT@1:4-1:5 1)),
+ # # (ERROR@1:7-1:11),
+ # # (LASGN@1:12-1:15 :y (LIT@1:14-1:15 2))]
+ #
+ # Note that parsing continues even after the errored expression.
+ #
+ def self.parse string, keep_script_lines: RubyVM.keep_script_lines, error_tolerant: false, keep_tokens: false
+ Primitive.ast_s_parse string, keep_script_lines, error_tolerant, keep_tokens
+ end
+
+ # call-seq:
+ # RubyVM::AbstractSyntaxTree.parse_file(pathname, keep_script_lines: RubyVM.keep_script_lines, error_tolerant: false, keep_tokens: false) -> RubyVM::AbstractSyntaxTree::Node
+ #
+ # Reads the file from _pathname_, then parses it like ::parse,
+ # returning the root node of the abstract syntax tree.
+ #
+ # SyntaxError is raised if _pathname_'s contents are not
+ # valid Ruby syntax.
+ #
+ # RubyVM::AbstractSyntaxTree.parse_file("my-app/app.rb")
+ # # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-31:3>
+ #
+ # See ::parse for explanation of keyword argument meaning and usage.
+ def self.parse_file pathname, keep_script_lines: RubyVM.keep_script_lines, error_tolerant: false, keep_tokens: false
+ Primitive.ast_s_parse_file pathname, keep_script_lines, error_tolerant, keep_tokens
+ end
+
+ # call-seq:
+ # RubyVM::AbstractSyntaxTree.of(proc, keep_script_lines: RubyVM.keep_script_lines, error_tolerant: false, keep_tokens: false) -> RubyVM::AbstractSyntaxTree::Node
+ # RubyVM::AbstractSyntaxTree.of(method, keep_script_lines: RubyVM.keep_script_lines, error_tolerant: false, keep_tokens: false) -> RubyVM::AbstractSyntaxTree::Node
+ #
+ # Returns AST nodes of the given _proc_ or _method_.
+ #
+ # RubyVM::AbstractSyntaxTree.of(proc {1 + 2})
+ # # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:35-1:42>
+ #
+ # def hello
+ # puts "hello, world"
+ # end
+ #
+ # RubyVM::AbstractSyntaxTree.of(method(:hello))
+ # # => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-3:3>
+ #
+ # See ::parse for explanation of keyword argument meaning and usage.
+ def self.of body, keep_script_lines: RubyVM.keep_script_lines, error_tolerant: false, keep_tokens: false
+ Primitive.ast_s_of body, keep_script_lines, error_tolerant, keep_tokens
+ end
+
+ # call-seq:
+ # RubyVM::AbstractSyntaxTree.node_id_for_backtrace_location(backtrace_location) -> integer
+ #
+ # Returns the node id for the given backtrace location.
+ #
+ # begin
+ # raise
+ # rescue => e
+ # loc = e.backtrace_locations.first
+ # RubyVM::AbstractSyntaxTree.node_id_for_backtrace_location(loc)
+ # end # => 0
+ def self.node_id_for_backtrace_location backtrace_location
+ Primitive.node_id_for_backtrace_location backtrace_location
+ end
+
+ # RubyVM::AbstractSyntaxTree::Node instances are created by parse methods in
+ # RubyVM::AbstractSyntaxTree.
+ #
+ # This class is MRI specific.
+ #
+ class Node
+
+ # call-seq:
+ # node.type -> symbol
+ #
+ # Returns the type of this node as a symbol.
+ #
+ # root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2")
+ # root.type # => :SCOPE
+ # lasgn = root.children[2]
+ # lasgn.type # => :LASGN
+ # call = lasgn.children[1]
+ # call.type # => :OPCALL
+ def type
+ Primitive.ast_node_type
+ end
+
+ # call-seq:
+ # node.first_lineno -> integer
+ #
+ # The line number in the source code where this AST's text began.
+ def first_lineno
+ Primitive.ast_node_first_lineno
+ end
+
+ # call-seq:
+ # node.first_column -> integer
+ #
+ # The column number in the source code where this AST's text began.
+ def first_column
+ Primitive.ast_node_first_column
+ end
+
+ # call-seq:
+ # node.last_lineno -> integer
+ #
+ # The line number in the source code where this AST's text ended.
+ def last_lineno
+ Primitive.ast_node_last_lineno
+ end
+
+ # call-seq:
+ # node.last_column -> integer
+ #
+ # The column number in the source code where this AST's text ended.
+ def last_column
+ Primitive.ast_node_last_column
+ end
+
+ # call-seq:
+ # node.tokens -> array
+ #
+ # Returns tokens corresponding to the location of the node.
+ # Returns +nil+ if +keep_tokens+ is not enabled when #parse method is called.
+ #
+ # root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2", keep_tokens: true)
+ # root.tokens # => [[0, :tIDENTIFIER, "x", [1, 0, 1, 1]], [1, :tSP, " ", [1, 1, 1, 2]], ...]
+ # root.tokens.map{_1[2]}.join # => "x = 1 + 2"
+ #
+ # Token is an array of:
+ #
+ # - id
+ # - token type
+ # - source code text
+ # - location [ first_lineno, first_column, last_lineno, last_column ]
+ def tokens
+ return nil unless all_tokens
+
+ all_tokens.each_with_object([]) do |token, a|
+ loc = token.last
+ if ([first_lineno, first_column] <=> [loc[0], loc[1]]) <= 0 &&
+ ([last_lineno, last_column] <=> [loc[2], loc[3]]) >= 0
+ a << token
+ end
+ end
+ end
+
+ # call-seq:
+ # node.all_tokens -> array
+ #
+ # Returns all tokens for the input script regardless the receiver node.
+ # Returns +nil+ if +keep_tokens+ is not enabled when #parse method is called.
+ #
+ # root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2", keep_tokens: true)
+ # root.all_tokens # => [[0, :tIDENTIFIER, "x", [1, 0, 1, 1]], [1, :tSP, " ", [1, 1, 1, 2]], ...]
+ # root.children[-1].all_tokens # => [[0, :tIDENTIFIER, "x", [1, 0, 1, 1]], [1, :tSP, " ", [1, 1, 1, 2]], ...]
+ def all_tokens
+ Primitive.ast_node_all_tokens
+ end
+
+ # call-seq:
+ # node.children -> array
+ #
+ # Returns AST nodes under this one. Each kind of node
+ # has different children, depending on what kind of node it is.
+ #
+ # The returned array may contain other nodes or <code>nil</code>.
+ def children
+ Primitive.ast_node_children
+ end
+
+ # call-seq:
+ # node.inspect -> string
+ #
+ # Returns debugging information about this node as a string.
+ def inspect
+ Primitive.ast_node_inspect
+ end
+
+ # call-seq:
+ # node.node_id -> integer
+ #
+ # Returns an internal node_id number.
+ # Note that this is an API for ruby internal use, debugging,
+ # and research. Do not use this for any other purpose.
+ # The compatibility is not guaranteed.
+ def node_id
+ Primitive.ast_node_node_id
+ end
+
+ # call-seq:
+ # node.script_lines -> array
+ #
+ # Returns the original source code as an array of lines.
+ #
+ # Note that this is an API for ruby internal use, debugging,
+ # and research. Do not use this for any other purpose.
+ # The compatibility is not guaranteed.
+ def script_lines
+ Primitive.ast_node_script_lines
+ end
+
+ # call-seq:
+ # node.source -> string
+ #
+ # Returns the code fragment that corresponds to this AST.
+ #
+ # Note that this is an API for ruby internal use, debugging,
+ # and research. Do not use this for any other purpose.
+ # The compatibility is not guaranteed.
+ #
+ # Also note that this API may return an incomplete code fragment
+ # that does not parse; for example, a here document following
+ # an expression may be dropped.
+ def source
+ lines = script_lines
+ if lines
+ lines = lines[first_lineno - 1 .. last_lineno - 1]
+ lines[-1] = lines[-1].byteslice(0...last_column)
+ lines[0] = lines[0].byteslice(first_column..-1)
+ lines.join
+ else
+ nil
+ end
+ end
+
+ # call-seq:
+ # node.locations -> array
+ #
+ # Returns location objects associated with the AST node.
+ # The returned array contains RubyVM::AbstractSyntaxTree::Location.
+ def locations
+ Primitive.ast_node_locations
+ end
+ end
+
+ # RubyVM::AbstractSyntaxTree::Location instances are created by
+ # RubyVM::AbstractSyntaxTree::Node#locations.
+ #
+ # This class is MRI specific.
+ #
+ class Location
+
+ # call-seq:
+ # location.first_lineno -> integer
+ #
+ # The line number in the source code where this AST's text began.
+ def first_lineno
+ Primitive.ast_location_first_lineno
+ end
+
+ # call-seq:
+ # location.first_column -> integer
+ #
+ # The column number in the source code where this AST's text began.
+ def first_column
+ Primitive.ast_location_first_column
+ end
+
+ # call-seq:
+ # location.last_lineno -> integer
+ #
+ # The line number in the source code where this AST's text ended.
+ def last_lineno
+ Primitive.ast_location_last_lineno
+ end
+
+ # call-seq:
+ # location.last_column -> integer
+ #
+ # The column number in the source code where this AST's text ended.
+ def last_column
+ Primitive.ast_location_last_column
+ end
+
+ # call-seq:
+ # location.inspect -> string
+ #
+ # Returns debugging information about this location as a string.
+ def inspect
+ Primitive.ast_location_inspect
+ end
+ end
+end
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 0000000000..6cbc5dddab
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Clear PWD to force commands to recompute working directory
+PWD=
+
+# Figure out the source directory for this script
+# configure.ac should be in the same place
+case "$0" in
+ */* ) srcdir=`dirname "$0"` ;; # Called with path
+ * ) srcdir="";; # Otherwise
+esac
+
+# If install-only is explicitly requested, disable symlink flags
+case " $* " in
+ *" -i "* | *" --install"* ) symlink_flags="" ;;
+ * ) symlink_flags="--install --symlink" ;;
+esac
+
+exec ${AUTORECONF:-autoreconf} \
+ $symlink_flags \
+ "$@" \
+ $srcdir
diff --git a/basictest/runner.rb b/basictest/runner.rb
index 2997f3af48..0f398e7acc 100644..100755
--- a/basictest/runner.rb
+++ b/basictest/runner.rb
@@ -17,7 +17,10 @@ $stderr.reopen($stdout)
error = ''
srcdir = File.expand_path('..', File.dirname(__FILE__))
-`#{ruby} #{opt} #{srcdir}/basictest/test.rb #{ARGV.join(' ')}`.each_line do |line|
+if env = ENV["RUBYOPT"]
+ ENV["RUBYOPT"] = env + " -W1"
+end
+`#{ruby} #{opt} -W1 #{srcdir}/basictest/test.rb #{ARGV.join(' ')}`.each_line do |line|
if line =~ /^end of test/
print "\ntest succeeded\n"
exit true
diff --git a/basictest/test.rb b/basictest/test.rb
index 734525ce3b..711e4f4ab3 100644..100755
--- a/basictest/test.rb
+++ b/basictest/test.rb
@@ -35,7 +35,7 @@ class Progress
# dircolors-like style
colors = (colors = ENV['TEST_COLORS']) ? Hash[colors.scan(/(\w+)=([^:\n]*)/)] : {}
begin
- File.read(File.join(__dir__, "../test/colors")).scan(/(\w+)=([^:\n]*)/) do |n, c|
+ File.read(File.join(__dir__, "../tool/colors")).scan(/(\w+)=([^:\n]*)/) do |n, c|
colors[n] ||= c
end
rescue
@@ -879,7 +879,7 @@ $x.sort!{|a,b| b-a} # reverse sort
test_ok($x == [7,5,3,2,1])
# split test
-$x = "The Book of Mormon"
+$x = +"The Book of Mormon"
test_ok($x.split(//).reverse!.join == $x.reverse)
test_ok($x.reverse == $x.reverse!)
test_ok("1 byte string".split(//).reverse.join(":") == "g:n:i:r:t:s: :e:t:y:b: :1")
@@ -984,13 +984,6 @@ test_ok($z == 0)
test_check "iterator"
-test_ok(!iterator?)
-
-def ttt
- test_ok(iterator?)
-end
-ttt{}
-
# yield at top level
test_ok(!defined?(yield))
@@ -1432,9 +1425,6 @@ marity_test(:test_ok)
marity_test(:marity_test)
marity_test(:p)
-lambda(&method(:test_ok)).call(true)
-lambda(&block_get{|a,n| test_ok(a,n)}).call(true, 2)
-
class ITER_TEST1
def a
block_given?
@@ -1653,7 +1643,7 @@ test_ok(/^(?:ab+)+/ =~ "ababb" && $& == "ababb")
test_ok(/(\s+\d+){2}/ =~ " 1 2" && $& == " 1 2")
test_ok(/(?:\s+\d+){2}/ =~ " 1 2" && $& == " 1 2")
-$x = <<END;
+$x = +<<END;
ABCD
ABCD
END
@@ -1692,12 +1682,12 @@ test_ok(?a == ?a)
test_ok(?\C-a == "\1")
test_ok(?\M-a == "\341")
test_ok(?\M-\C-a == "\201")
-test_ok("a".upcase![0] == ?A)
-test_ok("A".downcase![0] == ?a)
-test_ok("abc".tr!("a-z", "A-Z") == "ABC")
-test_ok("aabbcccc".tr_s!("a-z", "A-Z") == "ABC")
-test_ok("abcc".squeeze!("a-z") == "abc")
-test_ok("abcd".delete!("bc") == "ad")
+test_ok("a".dup.upcase![0] == ?A)
+test_ok("A".dup.downcase![0] == ?a)
+test_ok("abc".dup.tr!("a-z", "A-Z") == "ABC")
+test_ok("aabbcccc".dup.tr_s!("a-z", "A-Z") == "ABC")
+test_ok("abcc".dup.squeeze!("a-z") == "abc")
+test_ok("abcd".dup.delete!("bc") == "ad")
$x = "abcdef"
$y = [ ?a, ?b, ?c, ?d, ?e, ?f ]
@@ -1710,7 +1700,7 @@ $x.each_byte {|i|
}
test_ok(!$bad)
-s = "a string"
+s = +"a string"
s[0..s.size]="another string"
test_ok(s == "another string")
@@ -1739,7 +1729,7 @@ a = nil
test_ok(defined?(a))
test_ok(a == nil)
-# multiple asignment
+# multiple assignment
a, b = 1, 2
test_ok(a == 1 && b == 2)
@@ -1860,11 +1850,9 @@ $bad=false
eval 'while false; $bad = true; print "foo\n" end'
test_ok(!$bad)
-test_ok(eval('TRUE'))
+test_ok(eval('Object'))
test_ok(eval('true'))
-test_ok(!eval('NIL'))
test_ok(!eval('nil'))
-test_ok(!eval('FALSE'))
test_ok(!eval('false'))
$foo = 'test_ok(true)'
@@ -1972,6 +1960,8 @@ test_ok(p1.call == 5)
test_ok(i7 == nil)
end
+# WASI doesn't support spawning a new process for now.
+unless /wasi/ =~ RUBY_PLATFORM
test_check "system"
test_ok(`echo foobar` == "foobar\n")
test_ok(`./miniruby -e 'print "foobar"'` == 'foobar')
@@ -2022,6 +2012,7 @@ test_ok(done)
File.unlink script_tmp or `/bin/rm -f "#{script_tmp}"`
File.unlink "#{script_tmp}.bak" or `/bin/rm -f "#{script_tmp}.bak"`
+end # not /wasi/ =~ RUBY_PLATFORM
test_check "const"
TEST1 = 1
@@ -2134,7 +2125,7 @@ test.bar = 47
test_ok(test.bar == 47)
test_check "variable"
-test_ok($$.instance_of?(Fixnum))
+test_ok($$.instance_of?(Integer))
# read-only variable
begin
@@ -2149,7 +2140,7 @@ $_ = foobar
test_ok($_ == foobar)
class Gods
- @@rule = "Uranus" # private to Gods
+ @@rule = "Uranus"
def ruler0
@@rule
end
@@ -2172,7 +2163,7 @@ module Olympians
end
class Titans < Gods
- @@rule = "Cronus" # do not affect @@rule in Gods
+ @@rule = "Cronus" # modifies @@rule in Gods
include Olympians
def ruler4
@@rule
@@ -2187,7 +2178,14 @@ test_ok(Titans.ruler2 == "Cronus")
atlas = Titans.new
test_ok(atlas.ruler0 == "Cronus")
test_ok(atlas.ruler3 == "Zeus")
-test_ok(atlas.ruler4 == "Cronus")
+begin
+ atlas.ruler4
+rescue RuntimeError => e
+ test_ok(e.message.include?("class variable @@rule of Olympians is overtaken by Gods"))
+else
+ test_ok(false)
+end
+test_ok(atlas.ruler3 == "Zeus")
test_check "trace"
$x = 1234
@@ -2244,11 +2242,11 @@ test_check "alias"
class Alias0
def foo; "foo" end
end
-class Alias1<Alias0
+class Alias1 < Alias0
alias bar foo
def foo; "foo+" + super end
end
-class Alias2<Alias1
+class Alias2 < Alias1
alias baz foo
undef foo
end
@@ -2260,7 +2258,7 @@ test_ok(x.baz == "foo+foo")
# test_check for cache
test_ok(x.baz == "foo+foo")
-class Alias3<Alias2
+class Alias3 < Alias2
def foo
defined? super
end
diff --git a/benchmark/README.md b/benchmark/README.md
new file mode 100644
index 0000000000..9f9192685e
--- /dev/null
+++ b/benchmark/README.md
@@ -0,0 +1,75 @@
+# ruby/benchmark
+
+This directory has benchmark definitions to be run with
+[benchmark\_driver.gem](https://github.com/benchmark-driver/benchmark-driver).
+
+## Normal usage
+
+Execute `gem install benchmark_driver` and run a command like:
+
+```bash
+# Run a benchmark script with the ruby in the $PATH
+benchmark-driver benchmark/app_fib.rb
+
+# Run benchmark scripts with multiple Ruby executables or options
+benchmark-driver benchmark/*.rb -e /path/to/ruby -e '/path/to/ruby --jit'
+
+# Or compare Ruby versions managed by rbenv
+benchmark-driver benchmark/*.rb --rbenv '2.5.1;2.6.0-preview2 --jit'
+
+# You can collect many metrics in many ways
+benchmark-driver benchmark/*.rb --runner memory --output markdown
+
+# Some are defined with YAML for complex setup or accurate measurement
+benchmark-driver benchmark/*.yml
+```
+
+See also:
+
+```console
+benchmark-driver --help
+Usage: benchmark-driver [options] RUBY|YAML...
+ -r, --runner TYPE Specify runner type: ips, time, memory, once, block (default: ips)
+ -o, --output TYPE Specify output type: compare, simple, markdown, record, all (default: compare)
+ -e, --executables EXECS Ruby executables (e1::path1 arg1; e2::path2 arg2;...)
+ --rbenv VERSIONS Ruby executables in rbenv (x.x.x arg1;y.y.y arg2;...)
+ --repeat-count NUM Try benchmark NUM times and use the fastest result or the worst memory usage
+ --repeat-result TYPE Yield "best", "average" or "worst" result with --repeat-count (default: best)
+ --alternate Alternate executables instead of running the same executable in a row with --repeat-count
+ --bundler Install and use gems specified in Gemfile
+ --filter REGEXP Filter out benchmarks with given regexp
+ --run-duration SECONDS Warmup estimates loop_count to run for this duration (default: 3)
+ --timeout SECONDS Timeout ruby command execution with timeout(1)
+ -v, --verbose Verbose mode. Multiple -v options increase visibility (max: 2)
+```
+
+## make benchmark
+
+Using `make benchmark`, `make update-benchmark-driver` automatically downloads
+the supported version of benchmark\_driver, and it runs benchmarks with the downloaded
+benchmark\_driver.
+
+```bash
+# Run all benchmarks with the ruby in the $PATH and the built ruby
+make benchmark
+
+# Or compare with specific ruby binary
+make benchmark COMPARE_RUBY="/path/to/ruby --jit"
+
+# Run vm benchmarks
+make benchmark ITEM=vm
+
+# Run some limited benchmarks in ITEM-matched files
+make benchmark ITEM=vm OPTS=--filter=block
+
+# You can specify the benchmark by an exact filename instead of using the default argument:
+# ARGS = $$(find $(srcdir)/benchmark -maxdepth 1 -name '*$(ITEM)*.yml' -o -name '*$(ITEM)*.rb')
+make benchmark ARGS=benchmark/erb_render.yml
+
+# You can specify any option via $OPTS
+make benchmark OPTS="--help"
+
+# With `make benchmark`, some special runner plugins are available:
+# -r peak, -r size, -r total, -r utime, -r stime, -r cutime, -r cstime
+make benchmark ITEM=vm_bigarray OPTS="-r peak"
+```
diff --git a/benchmark/bm_app_answer.rb b/benchmark/app_answer.rb
index 3cd8a8fd37..3cd8a8fd37 100644
--- a/benchmark/bm_app_answer.rb
+++ b/benchmark/app_answer.rb
diff --git a/benchmark/app_aobench.rb b/benchmark/app_aobench.rb
new file mode 100644
index 0000000000..c1546e08ab
--- /dev/null
+++ b/benchmark/app_aobench.rb
@@ -0,0 +1,297 @@
+# coding: US-ASCII
+
+# AO render benchmark
+# Original program (C) Syoyo Fujita in Javascript (and other languages)
+# https://code.google.com/p/aobench/
+# Ruby(yarv2llvm) version by Hideki Miura
+#
+
+IMAGE_WIDTH = 256
+IMAGE_HEIGHT = 256
+NSUBSAMPLES = 2
+NAO_SAMPLES = 8
+
+srand(0)
+
+class Vec
+ def initialize(x, y, z)
+ @x = x
+ @y = y
+ @z = z
+ end
+
+ attr_accessor :x, :y, :z
+
+ def vadd(b)
+ Vec.new(@x + b.x, @y + b.y, @z + b.z)
+ end
+
+ def vsub(b)
+ Vec.new(@x - b.x, @y - b.y, @z - b.z)
+ end
+
+ def vcross(b)
+ Vec.new(@y * b.z - @z * b.y,
+ @z * b.x - @x * b.z,
+ @x * b.y - @y * b.x)
+ end
+
+ def vdot(b)
+ @x * b.x + @y * b.y + @z * b.z
+ end
+
+ def vlength
+ Math.sqrt(@x * @x + @y * @y + @z * @z)
+ end
+
+ def vnormalize
+ len = vlength
+ v = Vec.new(@x, @y, @z)
+ if len > 1.0e-17 then
+ v.x = v.x / len
+ v.y = v.y / len
+ v.z = v.z / len
+ end
+ v
+ end
+end
+
+
+class Sphere
+ def initialize(center, radius)
+ @center = center
+ @radius = radius
+ end
+
+ attr_reader :center, :radius
+
+ def intersect(ray, isect)
+ rs = ray.org.vsub(@center)
+ b = rs.vdot(ray.dir)
+ c = rs.vdot(rs) - (@radius * @radius)
+ d = b * b - c
+ if d > 0.0 then
+ t = - b - Math.sqrt(d)
+
+ if t > 0.0 and t < isect.t then
+ isect.t = t
+ isect.hit = true
+ isect.pl = Vec.new(ray.org.x + ray.dir.x * t,
+ ray.org.y + ray.dir.y * t,
+ ray.org.z + ray.dir.z * t)
+ n = isect.pl.vsub(@center)
+ isect.n = n.vnormalize
+ else
+ 0.0
+ end
+ end
+ nil
+ end
+end
+
+class Plane
+ def initialize(p, n)
+ @p = p
+ @n = n
+ end
+
+ def intersect(ray, isect)
+ d = -@p.vdot(@n)
+ v = ray.dir.vdot(@n)
+ v0 = v
+ if v < 0.0 then
+ v0 = -v
+ end
+ if v0 < 1.0e-17 then
+ return
+ end
+
+ t = -(ray.org.vdot(@n) + d) / v
+
+ if t > 0.0 and t < isect.t then
+ isect.hit = true
+ isect.t = t
+ isect.n = @n
+ isect.pl = Vec.new(ray.org.x + t * ray.dir.x,
+ ray.org.y + t * ray.dir.y,
+ ray.org.z + t * ray.dir.z)
+ end
+ nil
+ end
+end
+
+class Ray
+ def initialize(org, dir)
+ @org = org
+ @dir = dir
+ end
+
+ attr_accessor :org, :dir
+end
+
+class Isect
+ def initialize
+ @t = 10000000.0
+ @hit = false
+ @pl = Vec.new(0.0, 0.0, 0.0)
+ @n = Vec.new(0.0, 0.0, 0.0)
+ end
+
+ attr_accessor :t, :hit, :pl, :n
+end
+
+def clamp(f)
+ i = f * 255.5
+ if i > 255.0 then
+ i = 255.0
+ end
+ if i < 0.0 then
+ i = 0.0
+ end
+ i.to_i
+end
+
+def orthoBasis(basis, n)
+ basis[2] = Vec.new(n.x, n.y, n.z)
+ basis[1] = Vec.new(0.0, 0.0, 0.0)
+
+ if n.x < 0.6 and n.x > -0.6 then
+ basis[1].x = 1.0
+ elsif n.y < 0.6 and n.y > -0.6 then
+ basis[1].y = 1.0
+ elsif n.z < 0.6 and n.z > -0.6 then
+ basis[1].z = 1.0
+ else
+ basis[1].x = 1.0
+ end
+
+ basis[0] = basis[1].vcross(basis[2])
+ basis[0] = basis[0].vnormalize
+
+ basis[1] = basis[2].vcross(basis[0])
+ basis[1] = basis[1].vnormalize
+end
+
+class Scene
+ def initialize
+ @spheres = Array.new
+ @spheres[0] = Sphere.new(Vec.new(-2.0, 0.0, -3.5), 0.5)
+ @spheres[1] = Sphere.new(Vec.new(-0.5, 0.0, -3.0), 0.5)
+ @spheres[2] = Sphere.new(Vec.new(1.0, 0.0, -2.2), 0.5)
+ @plane = Plane.new(Vec.new(0.0, -0.5, 0.0), Vec.new(0.0, 1.0, 0.0))
+ end
+
+ def ambient_occlusion(isect)
+ basis = Array.new
+ orthoBasis(basis, isect.n)
+
+ ntheta = NAO_SAMPLES
+ nphi = NAO_SAMPLES
+ eps = 0.0001
+ occlusion = 0.0
+
+ p0 = Vec.new(isect.pl.x + eps * isect.n.x,
+ isect.pl.y + eps * isect.n.y,
+ isect.pl.z + eps * isect.n.z)
+ nphi.times do |j|
+ ntheta.times do |i|
+ r = rand
+ phi = 2.0 * 3.14159265 * rand
+ x = Math.cos(phi) * Math.sqrt(1.0 - r)
+ y = Math.sin(phi) * Math.sqrt(1.0 - r)
+ z = Math.sqrt(r)
+
+ rx = x * basis[0].x + y * basis[1].x + z * basis[2].x
+ ry = x * basis[0].y + y * basis[1].y + z * basis[2].y
+ rz = x * basis[0].z + y * basis[1].z + z * basis[2].z
+
+ raydir = Vec.new(rx, ry, rz)
+ ray = Ray.new(p0, raydir)
+
+ occisect = Isect.new
+ @spheres[0].intersect(ray, occisect)
+ @spheres[1].intersect(ray, occisect)
+ @spheres[2].intersect(ray, occisect)
+ @plane.intersect(ray, occisect)
+ if occisect.hit then
+ occlusion = occlusion + 1.0
+ else
+ 0.0
+ end
+ end
+ end
+
+ occlusion = (ntheta.to_f * nphi.to_f - occlusion) / (ntheta.to_f * nphi.to_f)
+
+ Vec.new(occlusion, occlusion, occlusion)
+ end
+
+ def render(w, h, nsubsamples)
+ cnt = 0
+ nsf = nsubsamples.to_f
+ h.times do |y|
+ w.times do |x|
+ rad = Vec.new(0.0, 0.0, 0.0)
+
+ # Subsampling
+ nsubsamples.times do |v|
+ nsubsamples.times do |u|
+
+ cnt = cnt + 1
+ wf = w.to_f
+ hf = h.to_f
+ xf = x.to_f
+ yf = y.to_f
+ uf = u.to_f
+ vf = v.to_f
+
+ px = (xf + (uf / nsf) - (wf / 2.0)) / (wf / 2.0)
+ py = -(yf + (vf / nsf) - (hf / 2.0)) / (hf / 2.0)
+
+ eye = Vec.new(px, py, -1.0).vnormalize
+
+ ray = Ray.new(Vec.new(0.0, 0.0, 0.0), eye)
+
+ isect = Isect.new
+ @spheres[0].intersect(ray, isect)
+ @spheres[1].intersect(ray, isect)
+ @spheres[2].intersect(ray, isect)
+ @plane.intersect(ray, isect)
+ if isect.hit then
+ col = ambient_occlusion(isect)
+ rad.x = rad.x + col.x
+ rad.y = rad.y + col.y
+ rad.z = rad.z + col.z
+ end
+ end
+ end
+
+ r = rad.x / (nsf * nsf)
+ g = rad.y / (nsf * nsf)
+ b = rad.z / (nsf * nsf)
+ printf("%c", clamp(r))
+ printf("%c", clamp(g))
+ printf("%c", clamp(b))
+ end
+ nil
+ end
+
+ nil
+ end
+end
+
+alias printf_orig printf
+def printf *args
+ # $fp.printf(*args)
+end
+
+# File.open("ao.ppm", "w") do |fp|
+ # $fp = fp
+ printf("P6\n")
+ printf("%d %d\n", IMAGE_WIDTH, IMAGE_HEIGHT)
+ printf("255\n")
+ Scene.new.render(IMAGE_WIDTH, IMAGE_HEIGHT, NSUBSAMPLES)
+# end
+
+undef printf
+alias printf printf_orig
diff --git a/benchmark/app_erb.yml b/benchmark/app_erb.yml
new file mode 100644
index 0000000000..31e29b7644
--- /dev/null
+++ b/benchmark/app_erb.yml
@@ -0,0 +1,23 @@
+#
+# Create many HTML strings with ERB.
+#
+prelude: |
+ require 'erb'
+
+ data = <<erb
+ <html>
+ <head> <%= title %> </head>
+ <body>
+ <h1> <%= title %> </h1>
+ <p>
+ <%= content %>
+ </p>
+ </body>
+ </html>
+ erb
+
+ title = "hello world!"
+ content = "hello world!\n" * 10
+benchmark:
+ app_erb: ERB.new(data).result(binding)
+loop_count: 15000
diff --git a/benchmark/bm_app_factorial.rb b/benchmark/app_factorial.rb
index 45f471dfdb..45f471dfdb 100644
--- a/benchmark/bm_app_factorial.rb
+++ b/benchmark/app_factorial.rb
diff --git a/benchmark/app_fib.rb b/benchmark/app_fib.rb
new file mode 100644
index 0000000000..e61bc8aa32
--- /dev/null
+++ b/benchmark/app_fib.rb
@@ -0,0 +1,10 @@
+def fib(n)
+ if n < 3
+ 1
+ else
+ fib(n-1) + fib(n-2)
+ end
+end
+
+fib(34)
+
diff --git a/benchmark/bm_app_lc_fizzbuzz.rb b/benchmark/app_lc_fizzbuzz.rb
index f09574bbeb..f09574bbeb 100644
--- a/benchmark/bm_app_lc_fizzbuzz.rb
+++ b/benchmark/app_lc_fizzbuzz.rb
diff --git a/benchmark/bm_app_mandelbrot.rb b/benchmark/app_mandelbrot.rb
index 801b75e8e2..801b75e8e2 100644
--- a/benchmark/bm_app_mandelbrot.rb
+++ b/benchmark/app_mandelbrot.rb
diff --git a/benchmark/app_pentomino.rb b/benchmark/app_pentomino.rb
new file mode 100644
index 0000000000..47be7b203f
--- /dev/null
+++ b/benchmark/app_pentomino.rb
@@ -0,0 +1,130 @@
+#!/usr/local/bin/ruby
+# This program is contributed by Shin Nishiyama
+
+
+# modified by K.Sasada
+
+NP = 5
+ROW = 8 + NP
+COL = 8
+
+$p = []
+$b = []
+$no = 0
+
+def piece(n, a, nb)
+ nb.each{|x|
+ a[n] = x
+ if n == NP-1
+ $p << [a.sort]
+ else
+ nbc=nb.dup
+ [-ROW, -1, 1, ROW].each{|d|
+ if x+d > 0 and not a.include?(x+d) and not nbc.include?(x+d)
+ nbc << x+d
+ end
+ }
+ nbc.delete x
+ piece(n+1,a[0..n],nbc)
+ end
+ }
+end
+
+def kikaku(a)
+ a.collect {|x| x - a[0]}
+end
+def ud(a)
+ kikaku(a.collect {|x| ((x+NP)%ROW)-ROW*((x+NP)/ROW) }.sort)
+end
+def rl(a)
+ kikaku(a.collect {|x| ROW*((x+NP)/ROW)+ROW-((x+NP)%ROW)}.sort)
+end
+def xy(a)
+ kikaku(a.collect {|x| ROW*((x+NP)%ROW) + (x+NP)/ROW }.sort)
+end
+
+def mkpieces
+ piece(0,[],[0])
+ $p.each do |a|
+ a0 = a[0]
+ a[1] = ud(a0)
+ a[2] = rl(a0)
+ a[3] = ud(rl(a0))
+ a[4] = xy(a0)
+ a[5] = ud(xy(a0))
+ a[6] = rl(xy(a0))
+ a[7] = ud(rl(xy(a0)))
+ a.sort!
+ a.uniq!
+ end
+ $p.uniq!.sort! {|x,y| x[0] <=> y[0] }
+end
+
+def mkboard
+ (0...ROW*COL).each{|i|
+ if i % ROW >= ROW-NP
+ $b[i] = -2
+ else
+ $b[i] = -1
+ end
+ $b[3*ROW+3]=$b[3*ROW+4]=$b[4*ROW+3]=$b[4*ROW+4]=-2
+ }
+end
+
+def pboard
+ return # skip print
+ print "No. #$no\n"
+ (0...COL).each{|i|
+ print "|"
+ (0...ROW-NP).each{|j|
+ x = $b[i*ROW+j]
+ if x < 0
+ print "..|"
+ else
+ printf "%2d|",x+1
+ end
+ }
+ print "\n"
+ }
+ print "\n"
+end
+
+$pnum=[]
+def setpiece(a,pos)
+ if a.length == $p.length then
+ $no += 1
+ pboard
+ return
+ end
+ while $b[pos] != -1
+ pos += 1
+ end
+ ($pnum - a).each do |i|
+ $p[i].each do |x|
+ f = 0
+ x.each{|s|
+ if $b[pos+s] != -1
+ f=1
+ break
+ end
+ }
+ if f == 0 then
+ x.each{|s|
+ $b[pos+s] = i
+ }
+ a << i
+ setpiece(a.dup, pos)
+ a.pop
+ x.each{|s|
+ $b[pos+s] = -1
+ }
+ end
+ end
+ end
+end
+
+mkpieces
+mkboard
+$p[4] = [$p[4][0]]
+$pnum = (0...$p.length).to_a
+setpiece([],0)
diff --git a/benchmark/bm_app_raise.rb b/benchmark/app_raise.rb
index 5db8f95d50..5db8f95d50 100644
--- a/benchmark/bm_app_raise.rb
+++ b/benchmark/app_raise.rb
diff --git a/benchmark/bm_app_strconcat.rb b/benchmark/app_strconcat.rb
index 7eed7c1aed..7eed7c1aed 100644
--- a/benchmark/bm_app_strconcat.rb
+++ b/benchmark/app_strconcat.rb
diff --git a/benchmark/bm_app_tak.rb b/benchmark/app_tak.rb
index efe5380f4e..efe5380f4e 100644
--- a/benchmark/bm_app_tak.rb
+++ b/benchmark/app_tak.rb
diff --git a/benchmark/bm_app_tarai.rb b/benchmark/app_tarai.rb
index 4c146f5ccf..4c146f5ccf 100644
--- a/benchmark/bm_app_tarai.rb
+++ b/benchmark/app_tarai.rb
diff --git a/benchmark/bm_app_uri.rb b/benchmark/app_uri.rb
index 586edfd5dc..586edfd5dc 100644
--- a/benchmark/bm_app_uri.rb
+++ b/benchmark/app_uri.rb
diff --git a/benchmark/array_flatten.yml b/benchmark/array_flatten.yml
new file mode 100644
index 0000000000..88ef544ba0
--- /dev/null
+++ b/benchmark/array_flatten.yml
@@ -0,0 +1,19 @@
+prelude: |
+ small_flat_ary = 5.times.to_a
+ large_flat_ary = 100.times.to_a
+ small_pairs_ary = [[1, 2]] * 5
+ large_pairs_ary = [[1, 2]] * 100
+ mostly_flat_ary = 100.times.to_a.push([101, 102])
+
+benchmark:
+ small_flat_ary.flatten: small_flat_ary.flatten
+ small_flat_ary.flatten!: small_flat_ary.flatten!
+ large_flat_ary.flatten: large_flat_ary.flatten
+ large_flat_ary.flatten!: large_flat_ary.flatten!
+ small_pairs_ary.flatten: small_pairs_ary.flatten
+ small_pairs_ary.flatten!: small_pairs_ary.dup.flatten!
+ large_pairs_ary.flatten: large_pairs_ary.flatten
+ large_pairs_ary.flatten!: large_pairs_ary.dup.flatten!
+ mostly_flat_ary.flatten: mostly_flat_ary.flatten
+ mostly_flat_ary.flatten!: mostly_flat_ary.dup.flatten!
+loop_count: 10000
diff --git a/benchmark/array_intersection.yml b/benchmark/array_intersection.yml
new file mode 100644
index 0000000000..26705323fd
--- /dev/null
+++ b/benchmark/array_intersection.yml
@@ -0,0 +1,14 @@
+prelude: |
+ small1 = [1, 2, 3]
+ small2 = [1, 2, 3, 4, 5]
+ small3 = [2, 3, 4, 5]
+ small4 = [2]
+ big1 = [1, 2, 3, 4] * 64
+ big2 = [1, 2, 3] * 64
+ big3 = [1, 2] * 64
+
+benchmark:
+ small-&: small1 & small2 & small3 & small4
+ small-intersection: small1.intersection(small2, small3, small4)
+ big-&: big1 & big2 & big3
+ big-intersection: big1.intersection(big2, big3)
diff --git a/benchmark/array_large_literal.yml b/benchmark/array_large_literal.yml
new file mode 100644
index 0000000000..423d68391f
--- /dev/null
+++ b/benchmark/array_large_literal.yml
@@ -0,0 +1,19 @@
+prelude: |
+ def def_array(size)
+ Object.class_eval(<<-END)
+ def array_#{size}
+ x = 1
+ [#{(['x'] * size).join(',')}]
+ end
+ END
+ end
+ def_array(100)
+ def_array(1000)
+ def_array(10000)
+ def_array(100000)
+benchmark:
+ array_100: array_100
+ array_1000: array_1000
+ array_10000: array_10000
+ array_100000: array_100000
+
diff --git a/benchmark/array_max_float.yml b/benchmark/array_max_float.yml
new file mode 100644
index 0000000000..ace1ae2e14
--- /dev/null
+++ b/benchmark/array_max_float.yml
@@ -0,0 +1,30 @@
+prelude: |
+ ary2 = 2.times.map(&:to_f).shuffle
+ ary10 = 10.times.map(&:to_f).shuffle
+ ary100 = 100.times.map(&:to_f).shuffle
+ ary500 = 500.times.map(&:to_f).shuffle
+ ary1000 = 1000.times.map(&:to_f).shuffle
+ ary2000 = 2500.times.map(&:to_f).shuffle
+ ary3000 = 2500.times.map(&:to_f).shuffle
+ ary5000 = 5000.times.map(&:to_f).shuffle
+ ary10000 = 10000.times.map(&:to_f).shuffle
+ ary20000 = 20000.times.map(&:to_f).shuffle
+ ary50000 = 50000.times.map(&:to_f).shuffle
+ ary100000 = 100000.times.map(&:to_f).shuffle
+
+benchmark:
+ ary2.max: ary2.max
+ ary10.max: ary10.max
+ ary100.max: ary100.max
+ ary500.max: ary500.max
+ ary1000.max: ary1000.max
+ ary2000.max: ary2000.max
+ ary3000.max: ary3000.max
+ ary5000.max: ary5000.max
+ ary10000.max: ary10000.max
+ ary20000.max: ary20000.max
+ ary50000.max: ary50000.max
+ ary100000.max: ary100000.max
+
+loop_count: 10000
+
diff --git a/benchmark/array_max_int.yml b/benchmark/array_max_int.yml
new file mode 100644
index 0000000000..acd83684d0
--- /dev/null
+++ b/benchmark/array_max_int.yml
@@ -0,0 +1,31 @@
+prelude: |
+ ary2 = 2.times.to_a.shuffle
+ ary10 = 10.times.to_a.shuffle
+ ary100 = 100.times.to_a.shuffle
+ ary500 = 500.times.to_a.shuffle
+ ary1000 = 1000.times.to_a.shuffle
+ ary2000 = 2500.times.to_a.shuffle
+ ary3000 = 2500.times.to_a.shuffle
+ ary5000 = 5000.times.to_a.shuffle
+ ary10000 = 10000.times.to_a.shuffle
+ ary20000 = 20000.times.to_a.shuffle
+ ary50000 = 50000.times.to_a.shuffle
+ ary100000 = 100000.times.to_a.shuffle
+ ary1000000 = 1000000.times.to_a.shuffle
+
+benchmark:
+ ary2.max: ary2.max
+ ary10.max: ary10.max
+ ary100.max: ary100.max
+ ary500.max: ary500.max
+ ary1000.max: ary1000.max
+ ary2000.max: ary2000.max
+ ary3000.max: ary3000.max
+ ary5000.max: ary5000.max
+ ary10000.max: ary10000.max
+ ary20000.max: ary20000.max
+ ary50000.max: ary50000.max
+ ary100000.max: ary100000.max
+ ary1000000.max: ary1000000.max
+
+loop_count: 10000
diff --git a/benchmark/array_max_str.yml b/benchmark/array_max_str.yml
new file mode 100644
index 0000000000..2aeed010f2
--- /dev/null
+++ b/benchmark/array_max_str.yml
@@ -0,0 +1,30 @@
+prelude: |
+ ary2 = 2.times.map(&:to_s).shuffle
+ ary10 = 10.times.map(&:to_s).shuffle
+ ary100 = 100.times.map(&:to_s).shuffle
+ ary500 = 500.times.map(&:to_s).shuffle
+ ary1000 = 1000.times.map(&:to_s).shuffle
+ ary2000 = 2500.times.map(&:to_s).shuffle
+ ary3000 = 2500.times.map(&:to_s).shuffle
+ ary5000 = 5000.times.map(&:to_s).shuffle
+ ary10000 = 10000.times.map(&:to_s).shuffle
+ ary20000 = 20000.times.map(&:to_s).shuffle
+ ary50000 = 50000.times.map(&:to_s).shuffle
+ ary100000 = 100000.times.map(&:to_s).shuffle
+
+benchmark:
+ ary2.max: ary2.max
+ ary10.max: ary10.max
+ ary100.max: ary100.max
+ ary500.max: ary500.max
+ ary1000.max: ary1000.max
+ ary2000.max: ary2000.max
+ ary3000.max: ary3000.max
+ ary5000.max: ary5000.max
+ ary10000.max: ary10000.max
+ ary20000.max: ary20000.max
+ ary50000.max: ary50000.max
+ ary100000.max: ary100000.max
+
+loop_count: 10000
+
diff --git a/benchmark/array_min.yml b/benchmark/array_min.yml
new file mode 100644
index 0000000000..53e5072b14
--- /dev/null
+++ b/benchmark/array_min.yml
@@ -0,0 +1,31 @@
+prelude: |
+ ary2 = 2.times.to_a.shuffle
+ ary10 = 10.times.to_a.shuffle
+ ary100 = 100.times.to_a.shuffle
+ ary500 = 500.times.to_a.shuffle
+ ary1000 = 1000.times.to_a.shuffle
+ ary2000 = 2500.times.to_a.shuffle
+ ary3000 = 2500.times.to_a.shuffle
+ ary5000 = 5000.times.to_a.shuffle
+ ary10000 = 10000.times.to_a.shuffle
+ ary20000 = 20000.times.to_a.shuffle
+ ary50000 = 50000.times.to_a.shuffle
+ ary100000 = 100000.times.to_a.shuffle
+ ary1000000 = 1000000.times.to_a.shuffle
+
+benchmark:
+ ary2.min: ary2.min
+ ary10.min: ary10.min
+ ary100.min: ary100.min
+ ary500.min: ary500.min
+ ary1000.min: ary1000.min
+ ary2000.min: ary2000.min
+ ary3000.min: ary3000.min
+ ary5000.min: ary5000.min
+ ary10000.min: ary10000.min
+ ary20000.min: ary20000.min
+ ary50000.min: ary50000.min
+ ary100000.min: ary100000.min
+ ary1000000.min: ary1000000.min
+
+loop_count: 10000
diff --git a/benchmark/array_sample.yml b/benchmark/array_sample.yml
new file mode 100644
index 0000000000..1cd2b34794
--- /dev/null
+++ b/benchmark/array_sample.yml
@@ -0,0 +1,4 @@
+prelude: ary = (1..10_000).to_a
+benchmark:
+ - ary.sample
+ - ary.sample(2)
diff --git a/benchmark/array_sample_100k_10.rb b/benchmark/array_sample_100k_10.rb
new file mode 100644
index 0000000000..5f41ecc32b
--- /dev/null
+++ b/benchmark/array_sample_100k_10.rb
@@ -0,0 +1,2 @@
+arr = [*0...100000]
+10_000.times {arr.sample 10}
diff --git a/benchmark/array_sample_100k_11.rb b/benchmark/array_sample_100k_11.rb
new file mode 100644
index 0000000000..18b1715319
--- /dev/null
+++ b/benchmark/array_sample_100k_11.rb
@@ -0,0 +1,2 @@
+arr = [*0...100000]
+10_000.times {arr.sample 11}
diff --git a/benchmark/array_sample_100k__100.rb b/benchmark/array_sample_100k__100.rb
new file mode 100644
index 0000000000..22863afe89
--- /dev/null
+++ b/benchmark/array_sample_100k__100.rb
@@ -0,0 +1,2 @@
+arr = [*0...100000]
+10_000.times {arr.sample 100}
diff --git a/benchmark/array_sample_100k__1k.rb b/benchmark/array_sample_100k__1k.rb
new file mode 100644
index 0000000000..4cd79e6c67
--- /dev/null
+++ b/benchmark/array_sample_100k__1k.rb
@@ -0,0 +1,2 @@
+arr = [*0...100000]
+10_000.times {arr.sample 1000}
diff --git a/benchmark/array_sample_100k__6k.rb b/benchmark/array_sample_100k__6k.rb
new file mode 100644
index 0000000000..b3d264249e
--- /dev/null
+++ b/benchmark/array_sample_100k__6k.rb
@@ -0,0 +1,2 @@
+arr = [*0...100000]
+10_000.times {arr.sample 6000}
diff --git a/benchmark/array_sample_100k___10k.rb b/benchmark/array_sample_100k___10k.rb
new file mode 100644
index 0000000000..5dd55ec058
--- /dev/null
+++ b/benchmark/array_sample_100k___10k.rb
@@ -0,0 +1,2 @@
+arr = [*0...100000]
+10_000.times {arr.sample 10_000}
diff --git a/benchmark/array_sample_100k___50k.rb b/benchmark/array_sample_100k___50k.rb
new file mode 100644
index 0000000000..1506732c3c
--- /dev/null
+++ b/benchmark/array_sample_100k___50k.rb
@@ -0,0 +1,2 @@
+arr = [*0...100000]
+10_000.times {arr.sample 50_000}
diff --git a/benchmark/bm_array_shift.rb b/benchmark/array_shift.rb
index 798bb9e3f4..798bb9e3f4 100644
--- a/benchmark/bm_array_shift.rb
+++ b/benchmark/array_shift.rb
diff --git a/benchmark/array_small_and.rb b/benchmark/array_small_and.rb
new file mode 100644
index 0000000000..e53a6edae6
--- /dev/null
+++ b/benchmark/array_small_and.rb
@@ -0,0 +1,17 @@
+MIN_SIZE = ENV.fetch('SMALL_ARRAY_MIN', 0).to_i
+MAX_SIZE = ENV.fetch('SMALL_ARRAY_MAX', 16).to_i
+ITERATIONS = ENV.fetch('SMALL_ARRAY_ITERATIONS', 100).to_i
+
+ARRAYS = (MIN_SIZE..MAX_SIZE).map do |size1|
+ (MIN_SIZE..MAX_SIZE).map do |size2|
+ [Array.new(size1) { rand(MAX_SIZE) }, Array.new(size2) { rand(MAX_SIZE) }]
+ end
+end
+
+ITERATIONS.times do
+ ARRAYS.each do |group|
+ group.each do |arr1, arr2|
+ arr1 & arr2
+ end
+ end
+end
diff --git a/benchmark/array_small_diff.rb b/benchmark/array_small_diff.rb
new file mode 100644
index 0000000000..9661ee48db
--- /dev/null
+++ b/benchmark/array_small_diff.rb
@@ -0,0 +1,17 @@
+MIN_SIZE = ENV.fetch('SMALL_ARRAY_MIN', 0).to_i
+MAX_SIZE = ENV.fetch('SMALL_ARRAY_MAX', 16).to_i
+ITERATIONS = ENV.fetch('SMALL_ARRAY_ITERATIONS', 100).to_i
+
+ARRAYS = (MIN_SIZE..MAX_SIZE).map do |size1|
+ (MIN_SIZE..MAX_SIZE).map do |size2|
+ [Array.new(size1) { rand(MAX_SIZE) }, Array.new(size2) { rand(MAX_SIZE) }]
+ end
+end
+
+ITERATIONS.times do
+ ARRAYS.each do |group|
+ group.each do |arr1, arr2|
+ arr1 - arr2
+ end
+ end
+end
diff --git a/benchmark/array_small_or.rb b/benchmark/array_small_or.rb
new file mode 100644
index 0000000000..c58b5fd1ff
--- /dev/null
+++ b/benchmark/array_small_or.rb
@@ -0,0 +1,17 @@
+MIN_SIZE = ENV.fetch('SMALL_ARRAY_MIN', 0).to_i
+MAX_SIZE = ENV.fetch('SMALL_ARRAY_MAX', 16).to_i
+ITERATIONS = ENV.fetch('SMALL_ARRAY_ITERATIONS', 100).to_i
+
+ARRAYS = (MIN_SIZE..MAX_SIZE).map do |size1|
+ (MIN_SIZE..MAX_SIZE).map do |size2|
+ [Array.new(size1) { rand(MAX_SIZE) }, Array.new(size2) { rand(MAX_SIZE) }]
+ end
+end
+
+ITERATIONS.times do
+ ARRAYS.each do |group|
+ group.each do |arr1, arr2|
+ arr1 | arr2
+ end
+ end
+end
diff --git a/benchmark/array_sort_block.rb b/benchmark/array_sort_block.rb
new file mode 100644
index 0000000000..3579786056
--- /dev/null
+++ b/benchmark/array_sort_block.rb
@@ -0,0 +1,2 @@
+ary = Array.new(1000) { rand(1000) }
+10000.times { ary.sort { |a, b| a <=> b } }
diff --git a/benchmark/array_sort_float.rb b/benchmark/array_sort_float.rb
new file mode 100644
index 0000000000..9a6e2f8bd2
--- /dev/null
+++ b/benchmark/array_sort_float.rb
@@ -0,0 +1,2 @@
+arr = Array.new(1000) { rand }
+10000.times { arr.sort }
diff --git a/benchmark/array_sort_int.yml b/benchmark/array_sort_int.yml
new file mode 100644
index 0000000000..7b9027ebf7
--- /dev/null
+++ b/benchmark/array_sort_int.yml
@@ -0,0 +1,15 @@
+prelude: |
+ ary2 = 2.times.to_a.shuffle
+ ary10 = 10.times.to_a.shuffle
+ ary100 = 100.times.to_a.shuffle
+ ary1000 = 1000.times.to_a.shuffle
+ ary10000 = 10000.times.to_a.shuffle
+
+benchmark:
+ ary2.sort: ary2.sort
+ ary10.sort: ary10.sort
+ ary100.sort: ary100.sort
+ ary1000.sort: ary1000.sort
+ ary10000.sort: ary10000.sort
+
+loop_count: 10000
diff --git a/benchmark/array_values_at_int.rb b/benchmark/array_values_at_int.rb
new file mode 100644
index 0000000000..6cb394cb9f
--- /dev/null
+++ b/benchmark/array_values_at_int.rb
@@ -0,0 +1,2 @@
+ary = Array.new(10000) {|i| i}
+100000.times { ary.values_at(500) }
diff --git a/benchmark/array_values_at_range.rb b/benchmark/array_values_at_range.rb
new file mode 100644
index 0000000000..5b53806d1c
--- /dev/null
+++ b/benchmark/array_values_at_range.rb
@@ -0,0 +1,2 @@
+ary = Array.new(10000) {|i| i}
+100000.times { ary.values_at(1..2000) }
diff --git a/benchmark/attr_accessor.yml b/benchmark/attr_accessor.yml
new file mode 100644
index 0000000000..82134cdf9b
--- /dev/null
+++ b/benchmark/attr_accessor.yml
@@ -0,0 +1,29 @@
+prelude: |
+ class C
+ attr_accessor :x
+ def initialize
+ @x = nil
+ end
+ class_eval <<-END
+ def ar
+ #{'x;'*256}
+ end
+ def aw
+ #{'self.x = nil;'*256}
+ end
+ def arm
+ m = method(:x)
+ #{'m.call;'*256}
+ end
+ def awm
+ m = method(:x=)
+ #{'m.call(nil);'*256}
+ end
+ END
+ end
+ obj = C.new
+benchmark:
+ attr_reader: "obj.ar"
+ attr_writer: "obj.aw"
+ attr_reader_method: "obj.arm"
+ attr_writer_method: "obj.awm"
diff --git a/benchmark/bighash.rb b/benchmark/bighash.rb
new file mode 100644
index 0000000000..e2ad5a5c94
--- /dev/null
+++ b/benchmark/bighash.rb
@@ -0,0 +1 @@
+h = {}; 5000000.times {|n| h[n] = n }
diff --git a/benchmark/bm_app_aobench.rb b/benchmark/bm_app_aobench.rb
deleted file mode 100644
index 2bd6acfaf8..0000000000
--- a/benchmark/bm_app_aobench.rb
+++ /dev/null
@@ -1,291 +0,0 @@
-# AO render benchmark
-# Original program (C) Syoyo Fujita in Javascript (and other languages)
-# https://code.google.com/p/aobench/
-# Ruby(yarv2llvm) version by Hideki Miura
-#
-
-IMAGE_WIDTH = 256
-IMAGE_HEIGHT = 256
-NSUBSAMPLES = 2
-NAO_SAMPLES = 8
-
-class Vec
- def initialize(x, y, z)
- @x = x
- @y = y
- @z = z
- end
-
- attr_accessor :x, :y, :z
-
- def vadd(b)
- Vec.new(@x + b.x, @y + b.y, @z + b.z)
- end
-
- def vsub(b)
- Vec.new(@x - b.x, @y - b.y, @z - b.z)
- end
-
- def vcross(b)
- Vec.new(@y * b.z - @z * b.y,
- @z * b.x - @x * b.z,
- @x * b.y - @y * b.x)
- end
-
- def vdot(b)
- @x * b.x + @y * b.y + @z * b.z
- end
-
- def vlength
- Math.sqrt(@x * @x + @y * @y + @z * @z)
- end
-
- def vnormalize
- len = vlength
- v = Vec.new(@x, @y, @z)
- if len > 1.0e-17 then
- v.x = v.x / len
- v.y = v.y / len
- v.z = v.z / len
- end
- v
- end
-end
-
-
-class Sphere
- def initialize(center, radius)
- @center = center
- @radius = radius
- end
-
- attr_reader :center, :radius
-
- def intersect(ray, isect)
- rs = ray.org.vsub(@center)
- b = rs.vdot(ray.dir)
- c = rs.vdot(rs) - (@radius * @radius)
- d = b * b - c
- if d > 0.0 then
- t = - b - Math.sqrt(d)
-
- if t > 0.0 and t < isect.t then
- isect.t = t
- isect.hit = true
- isect.pl = Vec.new(ray.org.x + ray.dir.x * t,
- ray.org.y + ray.dir.y * t,
- ray.org.z + ray.dir.z * t)
- n = isect.pl.vsub(@center)
- isect.n = n.vnormalize
- else
- 0.0
- end
- end
- nil
- end
-end
-
-class Plane
- def initialize(p, n)
- @p = p
- @n = n
- end
-
- def intersect(ray, isect)
- d = -@p.vdot(@n)
- v = ray.dir.vdot(@n)
- v0 = v
- if v < 0.0 then
- v0 = -v
- end
- if v0 < 1.0e-17 then
- return
- end
-
- t = -(ray.org.vdot(@n) + d) / v
-
- if t > 0.0 and t < isect.t then
- isect.hit = true
- isect.t = t
- isect.n = @n
- isect.pl = Vec.new(ray.org.x + t * ray.dir.x,
- ray.org.y + t * ray.dir.y,
- ray.org.z + t * ray.dir.z)
- end
- nil
- end
-end
-
-class Ray
- def initialize(org, dir)
- @org = org
- @dir = dir
- end
-
- attr_accessor :org, :dir
-end
-
-class Isect
- def initialize
- @t = 10000000.0
- @hit = false
- @pl = Vec.new(0.0, 0.0, 0.0)
- @n = Vec.new(0.0, 0.0, 0.0)
- end
-
- attr_accessor :t, :hit, :pl, :n
-end
-
-def clamp(f)
- i = f * 255.5
- if i > 255.0 then
- i = 255.0
- end
- if i < 0.0 then
- i = 0.0
- end
- i.to_i
-end
-
-def otherBasis(basis, n)
- basis[2] = Vec.new(n.x, n.y, n.z)
- basis[1] = Vec.new(0.0, 0.0, 0.0)
-
- if n.x < 0.6 and n.x > -0.6 then
- basis[1].x = 1.0
- elsif n.y < 0.6 and n.y > -0.6 then
- basis[1].y = 1.0
- elsif n.z < 0.6 and n.z > -0.6 then
- basis[1].z = 1.0
- else
- basis[1].x = 1.0
- end
-
- basis[0] = basis[1].vcross(basis[2])
- basis[0] = basis[0].vnormalize
-
- basis[1] = basis[2].vcross(basis[0])
- basis[1] = basis[1].vnormalize
-end
-
-class Scene
- def initialize
- @spheres = Array.new
- @spheres[0] = Sphere.new(Vec.new(-2.0, 0.0, -3.5), 0.5)
- @spheres[1] = Sphere.new(Vec.new(-0.5, 0.0, -3.0), 0.5)
- @spheres[2] = Sphere.new(Vec.new(1.0, 0.0, -2.2), 0.5)
- @plane = Plane.new(Vec.new(0.0, -0.5, 0.0), Vec.new(0.0, 1.0, 0.0))
- end
-
- def ambient_occlusion(isect)
- basis = Array.new
- otherBasis(basis, isect.n)
-
- ntheta = NAO_SAMPLES
- nphi = NAO_SAMPLES
- eps = 0.0001
- occlusion = 0.0
-
- p0 = Vec.new(isect.pl.x + eps * isect.n.x,
- isect.pl.y + eps * isect.n.y,
- isect.pl.z + eps * isect.n.z)
- nphi.times do |j|
- ntheta.times do |i|
- r = rand
- phi = 2.0 * 3.14159265 * rand
- x = Math.cos(phi) * Math.sqrt(1.0 - r)
- y = Math.sin(phi) * Math.sqrt(1.0 - r)
- z = Math.sqrt(r)
-
- rx = x * basis[0].x + y * basis[1].x + z * basis[2].x
- ry = x * basis[0].y + y * basis[1].y + z * basis[2].y
- rz = x * basis[0].z + y * basis[1].z + z * basis[2].z
-
- raydir = Vec.new(rx, ry, rz)
- ray = Ray.new(p0, raydir)
-
- occisect = Isect.new
- @spheres[0].intersect(ray, occisect)
- @spheres[1].intersect(ray, occisect)
- @spheres[2].intersect(ray, occisect)
- @plane.intersect(ray, occisect)
- if occisect.hit then
- occlusion = occlusion + 1.0
- else
- 0.0
- end
- end
- end
-
- occlusion = (ntheta.to_f * nphi.to_f - occlusion) / (ntheta.to_f * nphi.to_f)
-
- Vec.new(occlusion, occlusion, occlusion)
- end
-
- def render(w, h, nsubsamples)
- cnt = 0
- nsf = nsubsamples.to_f
- h.times do |y|
- w.times do |x|
- rad = Vec.new(0.0, 0.0, 0.0)
-
- # Subsampling
- nsubsamples.times do |v|
- nsubsamples.times do |u|
-
- cnt = cnt + 1
- wf = w.to_f
- hf = h.to_f
- xf = x.to_f
- yf = y.to_f
- uf = u.to_f
- vf = v.to_f
-
- px = (xf + (uf / nsf) - (wf / 2.0)) / (wf / 2.0)
- py = -(yf + (vf / nsf) - (hf / 2.0)) / (hf / 2.0)
-
- eye = Vec.new(px, py, -1.0).vnormalize
-
- ray = Ray.new(Vec.new(0.0, 0.0, 0.0), eye)
-
- isect = Isect.new
- @spheres[0].intersect(ray, isect)
- @spheres[1].intersect(ray, isect)
- @spheres[2].intersect(ray, isect)
- @plane.intersect(ray, isect)
- if isect.hit then
- col = ambient_occlusion(isect)
- rad.x = rad.x + col.x
- rad.y = rad.y + col.y
- rad.z = rad.z + col.z
- end
- end
- end
-
- r = rad.x / (nsf * nsf)
- g = rad.y / (nsf * nsf)
- b = rad.z / (nsf * nsf)
- printf("%c", clamp(r))
- printf("%c", clamp(g))
- printf("%c", clamp(b))
- end
- nil
- end
-
- nil
- end
-end
-
-alias printf_orig printf
-def printf *args
-end
-
-# File.open("ao.ppm", "w") do |fp|
- printf("P6\n")
- printf("%d %d\n", IMAGE_WIDTH, IMAGE_HEIGHT)
- printf("255\n", IMAGE_WIDTH, IMAGE_HEIGHT)
- Scene.new.render(IMAGE_WIDTH, IMAGE_HEIGHT, NSUBSAMPLES)
-# end
-
-undef printf
-alias printf printf_orig
diff --git a/benchmark/bm_app_erb.rb b/benchmark/bm_app_erb.rb
deleted file mode 100644
index 77c66a7949..0000000000
--- a/benchmark/bm_app_erb.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Create many HTML strings with ERB.
-#
-
-require 'erb'
-
-data = DATA.read
-max = 15_000
-title = "hello world!"
-content = "hello world!\n" * 10
-
-max.times{
- ERB.new(data).result(binding)
-}
-
-__END__
-
-<html>
- <head> <%= title %> </head>
- <body>
- <h1> <%= title %> </h1>
- <p>
- <%= content %>
- </p>
- </body>
-</html>
diff --git a/benchmark/bm_app_fib.rb b/benchmark/bm_app_fib.rb
deleted file mode 100644
index 34a7b2e725..0000000000
--- a/benchmark/bm_app_fib.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-def fib n
- if n < 3
- 1
- else
- fib(n-1) + fib(n-2)
- end
-end
-
-fib(34)
-
diff --git a/benchmark/bm_app_pentomino.rb b/benchmark/bm_app_pentomino.rb
deleted file mode 100644
index 59c63f358e..0000000000
--- a/benchmark/bm_app_pentomino.rb
+++ /dev/null
@@ -1,259 +0,0 @@
-#!/usr/local/bin/ruby
-# This program is contributed by Shin Nishiyama
-
-
-# modified by K.Sasada
-
-NP = 5
-ROW = 8 + NP
-COL = 8
-
-$p = []
-$b = []
-$no = 0
-
-def piece(n, a, nb)
- nb.each{|x|
- a[n] = x
- if n == NP-1
- $p << [a.sort]
- else
- nbc=nb.dup
- [-ROW, -1, 1, ROW].each{|d|
- if x+d > 0 and not a.include?(x+d) and not nbc.include?(x+d)
- nbc << x+d
- end
- }
- nbc.delete x
- piece(n+1,a[0..n],nbc)
- end
- }
-end
-
-def kikaku(a)
- a.collect {|x| x - a[0]}
-end
-def ud(a)
- kikaku(a.collect {|x| ((x+NP)%ROW)-ROW*((x+NP)/ROW) }.sort)
-end
-def rl(a)
- kikaku(a.collect {|x| ROW*((x+NP)/ROW)+ROW-((x+NP)%ROW)}.sort)
-end
-def xy(a)
- kikaku(a.collect {|x| ROW*((x+NP)%ROW) + (x+NP)/ROW }.sort)
-end
-
-def mkpieces
- piece(0,[],[0])
- $p.each do |a|
- a0 = a[0]
- a[1] = ud(a0)
- a[2] = rl(a0)
- a[3] = ud(rl(a0))
- a[4] = xy(a0)
- a[5] = ud(xy(a0))
- a[6] = rl(xy(a0))
- a[7] = ud(rl(xy(a0)))
- a.sort!
- a.uniq!
- end
- $p.uniq!.sort! {|x,y| x[0] <=> y[0] }
-end
-
-def mkboard
- (0...ROW*COL).each{|i|
- if i % ROW >= ROW-NP
- $b[i] = -2
- else
- $b[i] = -1
- end
- $b[3*ROW+3]=$b[3*ROW+4]=$b[4*ROW+3]=$b[4*ROW+4]=-2
- }
-end
-
-def pboard
- return # skip print
- print "No. #$no\n"
- (0...COL).each{|i|
- print "|"
- (0...ROW-NP).each{|j|
- x = $b[i*ROW+j]
- if x < 0
- print "..|"
- else
- printf "%2d|",x+1
- end
- }
- print "\n"
- }
- print "\n"
-end
-
-$pnum=[]
-def setpiece(a,pos)
- if a.length == $p.length then
- $no += 1
- pboard
- return
- end
- while $b[pos] != -1
- pos += 1
- end
- ($pnum - a).each do |i|
- $p[i].each do |x|
- f = 0
- x.each{|s|
- if $b[pos+s] != -1
- f=1
- break
- end
- }
- if f == 0 then
- x.each{|s|
- $b[pos+s] = i
- }
- a << i
- setpiece(a.dup, pos)
- a.pop
- x.each{|s|
- $b[pos+s] = -1
- }
- end
- end
- end
-end
-
-mkpieces
-mkboard
-$p[4] = [$p[4][0]]
-$pnum = (0...$p.length).to_a
-setpiece([],0)
-
-
-__END__
-
-# original
-
-NP = 5
-ROW = 8 + NP
-COL = 8
-
-$p = []
-$b = []
-$no = 0
-
-def piece(n,a,nb)
- for x in nb
- a[n] = x
- if n == NP-1
- $p << [a.sort]
- else
- nbc=nb.dup
- for d in [-ROW, -1, 1, ROW]
- if x+d > 0 and not a.include?(x+d) and not nbc.include?(x+d)
- nbc << x+d
- end
- end
- nbc.delete x
- piece(n+1,a[0..n],nbc)
- end
- end
-end
-
-def kikaku(a)
- a.collect {|x| x - a[0]}
-end
-def ud(a)
- kikaku(a.collect {|x| ((x+NP)%ROW)-ROW*((x+NP)/ROW) }.sort)
-end
-def rl(a)
- kikaku(a.collect {|x| ROW*((x+NP)/ROW)+ROW-((x+NP)%ROW)}.sort)
-end
-def xy(a)
- kikaku(a.collect {|x| ROW*((x+NP)%ROW) + (x+NP)/ROW }.sort)
-end
-
-def mkpieces
- piece(0,[],[0])
- $p.each do |a|
- a0 = a[0]
- a[1] = ud(a0)
- a[2] = rl(a0)
- a[3] = ud(rl(a0))
- a[4] = xy(a0)
- a[5] = ud(xy(a0))
- a[6] = rl(xy(a0))
- a[7] = ud(rl(xy(a0)))
- a.sort!
- a.uniq!
- end
- $p.uniq!.sort! {|x,y| x[0] <=> y[0] }
-end
-
-def mkboard
- for i in 0...ROW*COL
- if i % ROW >= ROW-NP
- $b[i] = -2
- else
- $b[i] = -1
- end
- $b[3*ROW+3]=$b[3*ROW+4]=$b[4*ROW+3]=$b[4*ROW+4]=-2
- end
-end
-
-def pboard
- print "No. #$no\n"
- for i in 0...COL
- print "|"
- for j in 0...ROW-NP
- x = $b[i*ROW+j]
- if x < 0
- print "..|"
- else
- printf "%2d|",x+1
- end
- end
- print "\n"
- end
- print "\n"
-end
-
-$pnum=[]
-def setpiece(a,pos)
- if a.length == $p.length then
- $no += 1
- pboard
- return
- end
- while $b[pos] != -1
- pos += 1
- end
- ($pnum - a).each do |i|
- $p[i].each do |x|
- f = 0
- for s in x do
- if $b[pos+s] != -1
- f=1
- break
- end
- end
- if f == 0 then
- for s in x do
- $b[pos+s] = i
- end
- a << i
- setpiece(a.dup, pos)
- a.pop
- for s in x do
- $b[pos+s] = -1
- end
- end
- end
- end
-end
-
-mkpieces
-mkboard
-$p[4] = [$p[4][0]]
-$pnum = (0...$p.length).to_a
-setpiece([],0)
diff --git a/benchmark/bm_loop_generator.rb b/benchmark/bm_loop_generator.rb
deleted file mode 100644
index d3375c744c..0000000000
--- a/benchmark/bm_loop_generator.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-max = 600000
-
-if defined? Fiber
- gen = (1..max).each
- loop do
- gen.next
- end
-else
- require 'generator'
- gen = Generator.new((0..max))
- while gen.next?
- gen.next
- end
-end
diff --git a/benchmark/bm_require.rb b/benchmark/bm_require.rb
deleted file mode 100644
index b8abc88f41..0000000000
--- a/benchmark/bm_require.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), "bm_require.data")
-
-1.upto(10000) do |i|
- require "c#{i}"
-end
-
-$:.pop
diff --git a/benchmark/bm_require_thread.rb b/benchmark/bm_require_thread.rb
deleted file mode 100644
index e54db6c6e5..0000000000
--- a/benchmark/bm_require_thread.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), "bm_require.data")
-
-i=0
-t = Thread.new do
- while true
- i = i+1 # dummy loop
- end
-end
-
-1.upto(100) do |i|
- require "c#{i}"
-end
-
-$:.pop
-t.kill
diff --git a/benchmark/bm_so_ackermann.rb b/benchmark/bm_so_ackermann.rb
deleted file mode 100644
index 7db5be9050..0000000000
--- a/benchmark/bm_so_ackermann.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: ackermann-ruby.code,v 1.4 2004/11/13 07:40:41 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-
-def ack(m, n)
- if m == 0 then
- n + 1
- elsif n == 0 then
- ack(m - 1, 1)
- else
- ack(m - 1, ack(m, n - 1))
- end
-end
-
-NUM = 9
-ack(3, NUM)
-
-
diff --git a/benchmark/bm_so_array.rb b/benchmark/bm_so_array.rb
deleted file mode 100644
index 2b8fce8f99..0000000000
--- a/benchmark/bm_so_array.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: ary-ruby.code,v 1.4 2004/11/13 07:41:27 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-# with help from Paul Brannan and Mark Hubbart
-
-n = 9000 # Integer(ARGV.shift || 1)
-
-x = Array.new(n)
-y = Array.new(n, 0)
-
-n.times{|bi|
- x[bi] = bi + 1
-}
-
-(0 .. 999).each do |e|
- (n-1).step(0,-1) do |bi|
- y[bi] += x.at(bi)
- end
-end
-# puts "#{y.first} #{y.last}"
-
-
diff --git a/benchmark/bm_so_concatenate.rb b/benchmark/bm_so_concatenate.rb
deleted file mode 100644
index 873214de7c..0000000000
--- a/benchmark/bm_so_concatenate.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: strcat-ruby.code,v 1.4 2004/11/13 07:43:28 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-# based on code from Aristarkh A Zagorodnikov and Dat Nguyen
-
-STUFF = "hello\n"
-i = 0
-while i<10
- i += 1
- hello = ''
- 4_000_000.times do |e|
- hello << STUFF
- end
-end
-# puts hello.length
-
-
diff --git a/benchmark/bm_so_count_words.rb b/benchmark/bm_so_count_words.rb
deleted file mode 100644
index 65f6337a4a..0000000000
--- a/benchmark/bm_so_count_words.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: wc-ruby.code,v 1.4 2004/11/13 07:43:32 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-# with help from Paul Brannan
-
-input = open(File.join(File.dirname($0), 'wc.input'), 'rb')
-
-nl = nw = nc = 0
-while true
- tmp = input.read(4096) or break
- data = tmp << (input.gets || "")
- nc += data.length
- nl += data.count("\n")
- ((data.strip! || data).tr!("\n", " ") || data).squeeze!
- nw += data.count(" ") + 1
-end
-# STDERR.puts "#{nl} #{nw} #{nc}"
-
diff --git a/benchmark/bm_so_exception.rb b/benchmark/bm_so_exception.rb
deleted file mode 100644
index deb003a594..0000000000
--- a/benchmark/bm_so_exception.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: except-ruby.code,v 1.4 2004/11/13 07:41:33 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-
-$HI = 0
-$LO = 0
-NUM = 250000 # Integer(ARGV[0] || 1)
-
-
-class Lo_Exception < Exception
- def initialize(num)
- @value = num
- end
-end
-
-class Hi_Exception < Exception
- def initialize(num)
- @value = num
- end
-end
-
-def some_function(num)
- begin
- hi_function(num)
- rescue
- print "We shouldn't get here, exception is: #{$!.type}\n"
- end
-end
-
-def hi_function(num)
- begin
- lo_function(num)
- rescue Hi_Exception
- $HI = $HI + 1
- end
-end
-
-def lo_function(num)
- begin
- blowup(num)
- rescue Lo_Exception
- $LO = $LO + 1
- end
-end
-
-def blowup(num)
- if num % 2 == 0
- raise Lo_Exception.new(num)
- else
- raise Hi_Exception.new(num)
- end
-end
-
-
-i = 1
-max = NUM+1
-while i < max
- i += 1
- some_function(i+1)
-end
diff --git a/benchmark/bm_so_fasta.rb b/benchmark/bm_so_fasta.rb
deleted file mode 100644
index 3f759ba7ae..0000000000
--- a/benchmark/bm_so_fasta.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-# The Computer Language Shootout
-# http://shootout.alioth.debian.org/
-# Contributed by Sokolov Yura
-
-$last = 42.0
-def gen_random (max,im=139968,ia=3877,ic=29573)
- (max * ($last = ($last * ia + ic) % im)) / im
-end
-
-alu =
- "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG"+
- "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA"+
- "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT"+
- "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA"+
- "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG"+
- "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC"+
- "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
-
-iub = [
- ["a", 0.27],
- ["c", 0.12],
- ["g", 0.12],
- ["t", 0.27],
-
- ["B", 0.02],
- ["D", 0.02],
- ["H", 0.02],
- ["K", 0.02],
- ["M", 0.02],
- ["N", 0.02],
- ["R", 0.02],
- ["S", 0.02],
- ["V", 0.02],
- ["W", 0.02],
- ["Y", 0.02],
-]
-homosapiens = [
- ["a", 0.3029549426680],
- ["c", 0.1979883004921],
- ["g", 0.1975473066391],
- ["t", 0.3015094502008],
-]
-
-def make_repeat_fasta(id, desc, src, n)
- puts ">#{id} #{desc}"
- v = nil
- width = 60
- l = src.length
- s = src * ((n / l) + 1)
- s.slice!(n, l)
- puts(s.scan(/.{1,#{width}}/).join("\n"))
-end
-
-def make_random_fasta(id, desc, table, n)
- puts ">#{id} #{desc}"
- rand, v = nil,nil
- width = 60
- chunk = 1 * width
- prob = 0.0
- table.each{|v| v[1]= (prob += v[1])}
- for i in 1..(n/width)
- puts((1..width).collect{
- rand = gen_random(1.0)
- table.find{|v| v[1]>rand}[0]
- }.join)
- end
- if n%width != 0
- puts((1..(n%width)).collect{
- rand = gen_random(1.0)
- table.find{|v| v[1]>rand}[0]
- }.join)
- end
-end
-
-
-n = (ARGV[0] or 250_000).to_i
-
-make_repeat_fasta('ONE', 'Homo sapiens alu', alu, n*2)
-make_random_fasta('TWO', 'IUB ambiguity codes', iub, n*3)
-make_random_fasta('THREE', 'Homo sapiens frequency', homosapiens, n*5)
-
diff --git a/benchmark/bm_so_k_nucleotide.rb b/benchmark/bm_so_k_nucleotide.rb
deleted file mode 100644
index dadab3e79c..0000000000
--- a/benchmark/bm_so_k_nucleotide.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# The Computer Language Shootout
-# http://shootout.alioth.debian.org
-#
-# contributed by jose fco. gonzalez
-# modified by Sokolov Yura
-
-seq = String.new
-
-def frecuency( seq,length )
- n, table = seq.length - length + 1, Hash.new(0)
- f, i = nil, nil
- (0 ... length).each do |f|
- (f ... n).step(length) do |i|
- table[seq[i,length]] += 1
- end
- end
- [n,table]
-
-end
-
-def sort_by_freq( seq,length )
- n,table = frecuency( seq,length )
- a, b, v = nil, nil, nil
- table.sort{|a,b| b[1] <=> a[1]}.each do |v|
- puts "%s %.3f" % [v[0].upcase,((v[1]*100).to_f/n)]
- end
- puts
-end
-
-def find_seq( seq,s )
- n,table = frecuency( seq,s.length )
- puts "#{table[s].to_s}\t#{s.upcase}"
-end
-
-input = open(File.join(File.dirname($0), 'fasta.output.100000'), 'rb')
-
-line = input.gets while line !~ /^>THREE/
-line = input.gets
-
-while (line !~ /^>/) & line do
- seq << line.chomp
- line = input.gets
-end
-
-[1,2].each {|i| sort_by_freq( seq,i ) }
-
-%w(ggt ggta ggtatt ggtattttaatt ggtattttaatttatagt).each{|s| find_seq( seq,s) }
-
diff --git a/benchmark/bm_so_matrix.rb b/benchmark/bm_so_matrix.rb
deleted file mode 100644
index e2c5c8e559..0000000000
--- a/benchmark/bm_so_matrix.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: matrix-ruby.code,v 1.4 2004/11/13 07:42:14 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-
-n = 60 #Integer(ARGV.shift || 1)
-
-size = 40
-
-def mkmatrix(rows, cols)
- count = 1
- mx = Array.new(rows)
- (0 .. (rows - 1)).each do |bi|
- row = Array.new(cols, 0)
- (0 .. (cols - 1)).each do |j|
- row[j] = count
- count += 1
- end
- mx[bi] = row
- end
- mx
-end
-
-def mmult(rows, cols, m1, m2)
- m3 = Array.new(rows)
- (0 .. (rows - 1)).each do |bi|
- row = Array.new(cols, 0)
- (0 .. (cols - 1)).each do |j|
- val = 0
- (0 .. (cols - 1)).each do |k|
- val += m1.at(bi).at(k) * m2.at(k).at(j)
- end
- row[j] = val
- end
- m3[bi] = row
- end
- m3
-end
-
-m1 = mkmatrix(size, size)
-m2 = mkmatrix(size, size)
-mm = Array.new
-n.times do
- mm = mmult(size, size, m1, m2)
-end
-# puts "#{mm[0][0]} #{mm[2][3]} #{mm[3][2]} #{mm[4][4]}"
-
-
diff --git a/benchmark/bm_so_meteor_contest.rb b/benchmark/bm_so_meteor_contest.rb
deleted file mode 100644
index 17e9c046a8..0000000000
--- a/benchmark/bm_so_meteor_contest.rb
+++ /dev/null
@@ -1,564 +0,0 @@
-#!/usr/bin/env ruby
-#
-# The Computer Language Shootout
-# http://shootout.alioth.debian.org
-# contributed by Kevin Barnes (Ruby novice)
-
-# PROGRAM: the main body is at the bottom.
-# 1) read about the problem here: http://www-128.ibm.com/developerworks/java/library/j-javaopt/
-# 2) see how I represent a board as a bitmask by reading the blank_board comments
-# 3) read as your mental paths take you
-
-def print *args
-end
-
-# class to represent all information about a particular rotation of a particular piece
-class Rotation
- # an array (by location) containing a bit mask for how the piece maps at the given location.
- # if the rotation is invalid at that location the mask will contain false
- attr_reader :start_masks
-
- # maps a direction to a relative location. these differ depending on whether it is an even or
- # odd row being mapped from
- @@rotation_even_adder = { :west => -1, :east => 1, :nw => -7, :ne => -6, :sw => 5, :se => 6 }
- @@rotation_odd_adder = { :west => -1, :east => 1, :nw => -6, :ne => -5, :sw => 6, :se => 7 }
-
- def initialize( directions )
- @even_offsets, @odd_offsets = normalize_offsets( get_values( directions ))
-
- @even_mask = mask_for_offsets( @even_offsets)
- @odd_mask = mask_for_offsets( @odd_offsets)
-
- @start_masks = Array.new(60)
-
- # create the rotational masks by placing the base mask at the location and seeing if
- # 1) it overlaps the boundaries and 2) it produces a prunable board. if either of these
- # is true the piece cannot be placed
- 0.upto(59) do | offset |
- mask = is_even(offset) ? (@even_mask << offset) : (@odd_mask << offset)
- if (blank_board & mask == 0 && !prunable(blank_board | mask, 0, true)) then
- imask = compute_required( mask, offset)
- @start_masks[offset] = [ mask, imask, imask | mask ]
- else
- @start_masks[offset] = false
- end
- end
- end
-
- def compute_required( mask, offset )
- board = blank_board
- 0.upto(offset) { | i | board |= 1 << i }
- board |= mask
- return 0 if (!prunable(board | mask, offset))
- board = flood_fill(board,58)
- count = 0
- imask = 0
- 0.upto(59) do | i |
- if (board[i] == 0) then
- imask |= (1 << i)
- count += 1
- end
- end
- (count > 0 && count < 5) ? imask : 0
- end
-
- def flood_fill( board, location)
- return board if (board[location] == 1)
- board |= 1 << location
- row, col = location.divmod(6)
- board = flood_fill( board, location - 1) if (col > 0)
- board = flood_fill( board, location + 1) if (col < 4)
- if (row % 2 == 0) then
- board = flood_fill( board, location - 7) if (col > 0 && row > 0)
- board = flood_fill( board, location - 6) if (row > 0)
- board = flood_fill( board, location + 6) if (row < 9)
- board = flood_fill( board, location + 5) if (col > 0 && row < 9)
- else
- board = flood_fill( board, location - 5) if (col < 4 && row > 0)
- board = flood_fill( board, location - 6) if (row > 0)
- board = flood_fill( board, location + 6) if (row < 9)
- board = flood_fill( board, location + 7) if (col < 4 && row < 9)
- end
- board
- end
-
- # given a location, produces a list of relative locations covered by the piece at this rotation
- def offsets( location)
- if is_even( location) then
- @even_offsets.collect { | value | value + location }
- else
- @odd_offsets.collect { | value | value + location }
- end
- end
-
- # returns a set of offsets relative to the top-left most piece of the rotation (by even or odd rows)
- # this is hard to explain. imagine we have this partial board:
- # 0 0 0 0 0 x [positions 0-5]
- # 0 0 1 1 0 x [positions 6-11]
- # 0 0 1 0 0 x [positions 12-17]
- # 0 1 0 0 0 x [positions 18-23]
- # 0 1 0 0 0 x [positions 24-29]
- # 0 0 0 0 0 x [positions 30-35]
- # ...
- # The top-left of the piece is at position 8, the
- # board would be passed as a set of positions (values array) containing [8,9,14,19,25] not necessarily in that
- # sorted order. Since that array starts on an odd row, the offsets for an odd row are: [0,1,6,11,17] obtained
- # by subtracting 8 from everything. Now imagine the piece shifted up and to the right so it's on an even row:
- # 0 0 0 1 1 x [positions 0-5]
- # 0 0 1 0 0 x [positions 6-11]
- # 0 0 1 0 0 x [positions 12-17]
- # 0 1 0 0 0 x [positions 18-23]
- # 0 0 0 0 0 x [positions 24-29]
- # 0 0 0 0 0 x [positions 30-35]
- # ...
- # Now the positions are [3,4,8,14,19] which after subtracting the lowest value (3) gives [0,1,5,11,16] thus, the
- # offsets for this particular piece are (in even, odd order) [0,1,5,11,16],[0,1,6,11,17] which is what
- # this function would return
- def normalize_offsets( values)
- min = values.min
- even_min = is_even(min)
- other_min = even_min ? min + 6 : min + 7
- other_values = values.collect do | value |
- if is_even(value) then
- value + 6 - other_min
- else
- value + 7 - other_min
- end
- end
- values.collect! { | value | value - min }
-
- if even_min then
- [values, other_values]
- else
- [other_values, values]
- end
- end
-
- # produce a bitmask representation of an array of offset locations
- def mask_for_offsets( offsets )
- mask = 0
- offsets.each { | value | mask = mask + ( 1 << value ) }
- mask
- end
-
- # finds a "safe" position that a position as described by a list of directions can be placed
- # without falling off any edge of the board. the values returned a location to place the first piece
- # at so it will fit after making the described moves
- def start_adjust( directions )
- south = east = 0;
- directions.each do | direction |
- east += 1 if ( direction == :sw || direction == :nw || direction == :west )
- south += 1 if ( direction == :nw || direction == :ne )
- end
- south * 6 + east
- end
-
- # given a set of directions places the piece (as defined by a set of directions) on the board at
- # a location that will not take it off the edge
- def get_values ( directions )
- start = start_adjust(directions)
- values = [ start ]
- directions.each do | direction |
- if (start % 12 >= 6) then
- start += @@rotation_odd_adder[direction]
- else
- start += @@rotation_even_adder[direction]
- end
- values += [ start ]
- end
-
- # some moves take you back to an existing location, we'll strip duplicates
- values.uniq
- end
-end
-
-# describes a piece and caches information about its rotations to as to be efficient for iteration
-# ATTRIBUTES:
-# rotations -- all the rotations of the piece
-# type -- a numeic "name" of the piece
-# masks -- an array by location of all legal rotational masks (a n inner array) for that location
-# placed -- the mask that this piece was last placed at (not a location, but the actual mask used)
-class Piece
- attr_reader :rotations, :type, :masks
- attr_accessor :placed
-
- # transform hashes that change one direction into another when you either flip or rotate a set of directions
- @@flip_converter = { :west => :west, :east => :east, :nw => :sw, :ne => :se, :sw => :nw, :se => :ne }
- @@rotate_converter = { :west => :nw, :east => :se, :nw => :ne, :ne => :east, :sw => :west, :se => :sw }
-
- def initialize( directions, type )
- @type = type
- @rotations = Array.new();
- @map = {}
-
- generate_rotations( directions )
- directions.collect! { | value | @@flip_converter[value] }
- generate_rotations( directions )
-
- # creates the masks AND a map that returns [location, rotation] for any given mask
- # this is used when a board is found and we want to draw it, otherwise the map is unused
- @masks = Array.new();
- 0.upto(59) do | i |
- even = true
- @masks[i] = @rotations.collect do | rotation |
- mask = rotation.start_masks[i]
- @map[mask[0]] = [ i, rotation ] if (mask)
- mask || nil
- end
- @masks[i].compact!
- end
- end
-
- # rotates a set of directions through all six angles and adds a Rotation to the list for each one
- def generate_rotations( directions )
- 6.times do
- rotations.push( Rotation.new(directions))
- directions.collect! { | value | @@rotate_converter[value] }
- end
- end
-
- # given a board string, adds this piece to the board at whatever location/rotation
- # important: the outbound board string is 5 wide, the normal location notation is six wide (padded)
- def fill_string( board_string)
- location, rotation = @map[@placed]
- rotation.offsets(location).each do | offset |
- row, col = offset.divmod(6)
- board_string[ row*5 + col, 1 ] = @type.to_s
- end
- end
-end
-
-# a blank bit board having this form:
-#
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 0 0 0 0 0 1
-# 1 1 1 1 1 1
-#
-# where left lest significant bit is the top left and the most significant is the lower right
-# the actual board only consists of the 0 places, the 1 places are blockers to keep things from running
-# off the edges or bottom
-def blank_board
- 0b111111100000100000100000100000100000100000100000100000100000100000
-end
-
-def full_board
- 0b111111111111111111111111111111111111111111111111111111111111111111
-end
-
-# determines if a location (bit position) is in an even row
-def is_even( location)
- (location % 12) < 6
-end
-
-# support function that create three utility maps:
-# $converter -- for each row an array that maps a five bit row (via array mapping)
-# to the a a five bit representation of the bits below it
-# $bit_count -- maps a five bit row (via array mapping) to the number of 1s in the row
-# @@new_regions -- maps a five bit row (via array mapping) to an array of "region" arrays
-# a region array has three values the first is a mask of bits in the region,
-# the second is the count of those bits and the third is identical to the first
-# examples:
-# 0b10010 => [ 0b01100, 2, 0b01100 ], [ 0b00001, 1, 0b00001]
-# 0b01010 => [ 0b10000, 1, 0b10000 ], [ 0b00100, 1, 0b00100 ], [ 0b00001, 1, 0b00001]
-# 0b10001 => [ 0b01110, 3, 0b01110 ]
-def create_collector_support
- odd_map = [0b11, 0b110, 0b1100, 0b11000, 0b10000]
- even_map = [0b1, 0b11, 0b110, 0b1100, 0b11000]
-
- all_odds = Array.new(0b100000)
- all_evens = Array.new(0b100000)
- bit_counts = Array.new(0b100000)
- new_regions = Array.new(0b100000)
- 0.upto(0b11111) do | i |
- bit_count = odd = even = 0
- 0.upto(4) do | bit |
- if (i[bit] == 1) then
- bit_count += 1
- odd |= odd_map[bit]
- even |= even_map[bit]
- end
- end
- all_odds[i] = odd
- all_evens[i] = even
- bit_counts[i] = bit_count
- new_regions[i] = create_regions( i)
- end
-
- $converter = []
- 10.times { | row | $converter.push((row % 2 == 0) ? all_evens : all_odds) }
- $bit_counts = bit_counts
- $regions = new_regions.collect { | set | set.collect { | value | [ value, bit_counts[value], value] } }
-end
-
-# determines if a board is punable, meaning that there is no possibility that it
-# can be filled up with pieces. A board is prunable if there is a grouping of unfilled spaces
-# that are not a multiple of five. The following board is an example of a prunable board:
-# 0 0 1 0 0
-# 0 1 0 0 0
-# 1 1 0 0 0
-# 0 1 0 0 0
-# 0 0 0 0 0
-# ...
-#
-# This board is prunable because the top left corner is only 3 bits in area, no piece will ever fit it
-# parameters:
-# board -- an initial bit board (6 bit padded rows, see blank_board for format)
-# location -- starting location, everything above and to the left is already full
-# slotting -- set to true only when testing initial pieces, when filling normally
-# additional assumptions are possible
-#
-# Algorithm:
-# The algorithm starts at the top row (as determined by location) and iterates a row at a time
-# maintainng counts of active open areas (kept in the collector array) each collector contains
-# three values at the start of an iteration:
-# 0: mask of bits that would be adjacent to the collector in this row
-# 1: the number of bits collected so far
-# 2: a scratch space starting as zero, but used during the computation to represent
-# the empty bits in the new row that are adjacent (position 0)
-# The exact procedure is described in-code
-def prunable( board, location, slotting = false)
- collectors = []
- # loop across the rows
- (location / 6).to_i.upto(9) do | row_on |
- # obtain a set of regions representing the bits of the current row.
- regions = $regions[(board >> (row_on * 6)) & 0b11111]
- converter = $converter[row_on]
-
- # track the number of collectors at the start of the cycle so that
- # we don't compute against newly created collectors, only existing collectors
- initial_collector_count = collectors.length
-
- # loop against the regions. For each region of the row
- # we will see if it connects to one or more existing collectors.
- # if it connects to 1 collector, the bits from the region are added to the
- # bits of the collector and the mask is placed in collector[2]
- # If the region overlaps more than one collector then all the collectors
- # it overlaps with are merged into the first one (the others are set to nil in the array)
- # if NO collectors are found then the region is copied as a new collector
- regions.each do | region |
- collector_found = nil
- region_mask = region[2]
- initial_collector_count.times do | collector_num |
- collector = collectors[collector_num]
- if (collector) then
- collector_mask = collector[0]
- if (collector_mask & region_mask != 0) then
- if (collector_found) then
- collector_found[0] |= collector_mask
- collector_found[1] += collector[1]
- collector_found[2] |= collector[2]
- collectors[collector_num] = nil
- else
- collector_found = collector
- collector[1] += region[1]
- collector[2] |= region_mask
- end
- end
- end
- end
- if (collector_found == nil) then
- collectors.push(Array.new(region))
- end
- end
-
- # check the existing collectors, if any collector overlapped no bits in the region its [2] value will
- # be zero. The size of any such reaason is tested if it is not a multiple of five true is returned since
- # the board is prunable. if it is a multiple of five it is removed.
- # Collector that are still active have a new adjacent value [0] set based n the matched bits
- # and have [2] cleared out for the next cycle.
- collectors.length.times do | collector_num |
- collector = collectors[collector_num]
- if (collector) then
- if (collector[2] == 0) then
- return true if (collector[1] % 5 != 0)
- collectors[collector_num] = nil
- else
- # if a collector matches all bits in the row then we can return unprunable early for the
- # following reasons:
- # 1) there can be no more unavailable bits bince we fill from the top left downward
- # 2) all previous regions have been closed or joined so only this region can fail
- # 3) this region must be good since there can never be only 1 region that is nuot
- # a multiple of five
- # this rule only applies when filling normally, so we ignore the rule if we are "slotting"
- # in pieces to see what configurations work for them (the only other time this algorithm is used).
- return false if (collector[2] == 0b11111 && !slotting)
- collector[0] = converter[collector[2]]
- collector[2] = 0
- end
- end
- end
-
- # get rid of all the empty converters for the next round
- collectors.compact!
- end
- return false if (collectors.length <= 1) # 1 collector or less and the region is fine
- collectors.any? { | collector | (collector[1] % 5) != 0 } # more than 1 and we test them all for bad size
-end
-
-# creates a region given a row mask. see prunable for what a "region" is
-def create_regions( value )
- regions = []
- cur_region = 0
- 5.times do | bit |
- if (value[bit] == 0) then
- cur_region |= 1 << bit
- else
- if (cur_region != 0 ) then
- regions.push( cur_region)
- cur_region = 0;
- end
- end
- end
- regions.push(cur_region) if (cur_region != 0)
- regions
-end
-
-# find up to the counted number of solutions (or all solutions) and prints the final result
-def find_all
- find_top( 1)
- find_top( 0)
- print_results
-end
-
-# show the board
-def print_results
- print "#{@boards_found} solutions found\n\n"
- print_full_board( @min_board)
- print "\n"
- print_full_board( @max_board)
- print "\n"
-end
-
-# finds solutions. This special version of the main function is only used for the top level
-# the reason for it is basically to force a particular ordering on how the rotations are tested for
-# the first piece. It is called twice, first looking for placements of the odd rotations and then
-# looking for placements of the even locations.
-#
-# WHY?
-# Since any found solution has an inverse we want to maximize finding solutions that are not already found
-# as an inverse. The inverse will ALWAYS be 3 one of the piece configurations that is exactly 3 rotations away
-# (an odd number). Checking even vs odd then produces a higher probability of finding more pieces earlier
-# in the cycle. We still need to keep checking all the permutations, but our probability of finding one will
-# diminsh over time. Since we are TOLD how many to search for this lets us exit before checking all pieces
-# this bennifit is very great when seeking small numbers of solutions and is 0 when looking for more than the
-# maximum number
-def find_top( rotation_skip)
- board = blank_board
- (@pieces.length-1).times do
- piece = @pieces.shift
- piece.masks[0].each do | mask, imask, cmask |
- if ((rotation_skip += 1) % 2 == 0) then
- piece.placed = mask
- find( 1, 1, board | mask)
- end
- end
- @pieces.push(piece)
- end
- piece = @pieces.shift
- @pieces.push(piece)
-end
-
-# the normail find routine, iterates through the available pieces, checks all rotations at the current location
-# and adds any boards found. depth is achieved via recursion. the overall approach is described
-# here: http://www-128.ibm.com/developerworks/java/library/j-javaopt/
-# parameters:
-# start_location -- where to start looking for place for the next piece at
-# placed -- number of pieces placed
-# board -- current state of the board
-#
-# see in-code comments
-def find( start_location, placed, board)
- # find the next location to place a piece by looking for an empty bit
- while board[start_location] == 1
- start_location += 1
- end
-
- @pieces.length.times do
- piece = @pieces.shift
- piece.masks[start_location].each do | mask, imask, cmask |
- if ( board & cmask == imask) then
- piece.placed = mask
- if (placed == 9) then
- add_board
- else
- find( start_location + 1, placed + 1, board | mask)
- end
- end
- end
- @pieces.push(piece)
- end
-end
-
-# print the board
-def print_full_board( board_string)
- 10.times do | row |
- print " " if (row % 2 == 1)
- 5.times do | col |
- print "#{board_string[row*5 + col,1]} "
- end
- print "\n"
- end
-end
-
-# when a board is found we "draw it" into a string and then flip that string, adding both to
-# the list (hash) of solutions if they are unique.
-def add_board
- board_string = "99999999999999999999999999999999999999999999999999"
- @all_pieces.each { | piece | piece.fill_string( board_string ) }
- save( board_string)
- save( board_string.reverse)
-end
-
-# adds a board string to the list (if new) and updates the current best/worst board
-def save( board_string)
- if (@all_boards[board_string] == nil) then
- @min_board = board_string if (board_string < @min_board)
- @max_board = board_string if (board_string > @max_board)
- @all_boards.store(board_string,true)
- @boards_found += 1
-
- # the exit motif is a time saver. Ideally the function should return, but those tests
- # take noticeable time (performance).
- if (@boards_found == @stop_count) then
- print_results
- exit(0)
- end
- end
-end
-
-
-##
-## MAIN BODY :)
-##
-create_collector_support
-@pieces = [
- Piece.new( [ :nw, :ne, :east, :east ], 2),
- Piece.new( [ :ne, :se, :east, :ne ], 7),
- Piece.new( [ :ne, :east, :ne, :nw ], 1),
- Piece.new( [ :east, :sw, :sw, :se ], 6),
- Piece.new( [ :east, :ne, :se, :ne ], 5),
- Piece.new( [ :east, :east, :east, :se ], 0),
- Piece.new( [ :ne, :nw, :se, :east, :se ], 4),
- Piece.new( [ :se, :se, :se, :west ], 9),
- Piece.new( [ :se, :se, :east, :se ], 8),
- Piece.new( [ :east, :east, :sw, :se ], 3)
- ];
-
-@all_pieces = Array.new( @pieces)
-
-@min_board = "99999999999999999999999999999999999999999999999999"
-@max_board = "00000000000000000000000000000000000000000000000000"
-@stop_count = ARGV[0].to_i || 2089
-@all_boards = {}
-@boards_found = 0
-
-find_all ######## DO IT!!!
-
diff --git a/benchmark/bm_so_nbody.rb b/benchmark/bm_so_nbody.rb
deleted file mode 100644
index d6c5bb9e61..0000000000
--- a/benchmark/bm_so_nbody.rb
+++ /dev/null
@@ -1,148 +0,0 @@
-# The Computer Language Shootout
-# http://shootout.alioth.debian.org
-#
-# Optimized for Ruby by Jesse Millikan
-# From version ported by Michael Neumann from the C gcc version,
-# which was written by Christoph Bauer.
-
-SOLAR_MASS = 4 * Math::PI**2
-DAYS_PER_YEAR = 365.24
-
-def _puts *args
-end
-
-class Planet
- attr_accessor :x, :y, :z, :vx, :vy, :vz, :mass
-
- def initialize(x, y, z, vx, vy, vz, mass)
- @x, @y, @z = x, y, z
- @vx, @vy, @vz = vx * DAYS_PER_YEAR, vy * DAYS_PER_YEAR, vz * DAYS_PER_YEAR
- @mass = mass * SOLAR_MASS
- end
-
- def move_from_i(bodies, nbodies, dt, i)
- while i < nbodies
- b2 = bodies[i]
- dx = @x - b2.x
- dy = @y - b2.y
- dz = @z - b2.z
-
- distance = Math.sqrt(dx * dx + dy * dy + dz * dz)
- mag = dt / (distance * distance * distance)
- b_mass_mag, b2_mass_mag = @mass * mag, b2.mass * mag
-
- @vx -= dx * b2_mass_mag
- @vy -= dy * b2_mass_mag
- @vz -= dz * b2_mass_mag
- b2.vx += dx * b_mass_mag
- b2.vy += dy * b_mass_mag
- b2.vz += dz * b_mass_mag
- i += 1
- end
-
- @x += dt * @vx
- @y += dt * @vy
- @z += dt * @vz
- end
-end
-
-def energy(bodies)
- e = 0.0
- nbodies = bodies.size
-
- for i in 0 ... nbodies
- b = bodies[i]
- e += 0.5 * b.mass * (b.vx * b.vx + b.vy * b.vy + b.vz * b.vz)
- for j in (i + 1) ... nbodies
- b2 = bodies[j]
- dx = b.x - b2.x
- dy = b.y - b2.y
- dz = b.z - b2.z
- distance = Math.sqrt(dx * dx + dy * dy + dz * dz)
- e -= (b.mass * b2.mass) / distance
- end
- end
- e
-end
-
-def offset_momentum(bodies)
- px, py, pz = 0.0, 0.0, 0.0
-
- for b in bodies
- m = b.mass
- px += b.vx * m
- py += b.vy * m
- pz += b.vz * m
- end
-
- b = bodies[0]
- b.vx = - px / SOLAR_MASS
- b.vy = - py / SOLAR_MASS
- b.vz = - pz / SOLAR_MASS
-end
-
-BODIES = [
- # sun
- Planet.new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0),
-
- # jupiter
- Planet.new(
- 4.84143144246472090e+00,
- -1.16032004402742839e+00,
- -1.03622044471123109e-01,
- 1.66007664274403694e-03,
- 7.69901118419740425e-03,
- -6.90460016972063023e-05,
- 9.54791938424326609e-04),
-
- # saturn
- Planet.new(
- 8.34336671824457987e+00,
- 4.12479856412430479e+00,
- -4.03523417114321381e-01,
- -2.76742510726862411e-03,
- 4.99852801234917238e-03,
- 2.30417297573763929e-05,
- 2.85885980666130812e-04),
-
- # uranus
- Planet.new(
- 1.28943695621391310e+01,
- -1.51111514016986312e+01,
- -2.23307578892655734e-01,
- 2.96460137564761618e-03,
- 2.37847173959480950e-03,
- -2.96589568540237556e-05,
- 4.36624404335156298e-05),
-
- # neptune
- Planet.new(
- 1.53796971148509165e+01,
- -2.59193146099879641e+01,
- 1.79258772950371181e-01,
- 2.68067772490389322e-03,
- 1.62824170038242295e-03,
- -9.51592254519715870e-05,
- 5.15138902046611451e-05)
-]
-
-init = 200_000 # ARGV[0]
-n = Integer(init)
-
-offset_momentum(BODIES)
-
-puts "%.9f" % energy(BODIES)
-
-nbodies = BODIES.size
-dt = 0.01
-
-n.times do
- i = 0
- while i < nbodies
- b = BODIES[i]
- b.move_from_i(BODIES, nbodies, dt, i + 1)
- i += 1
- end
-end
-
-puts "%.9f" % energy(BODIES)
diff --git a/benchmark/bm_so_nested_loop.rb b/benchmark/bm_so_nested_loop.rb
deleted file mode 100644
index a0513f8c47..0000000000
--- a/benchmark/bm_so_nested_loop.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: nestedloop-ruby.code,v 1.4 2004/11/13 07:42:22 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-# from Avi Bryant
-
-n = 16 # Integer(ARGV.shift || 1)
-x = 0
-n.times do
- n.times do
- n.times do
- n.times do
- n.times do
- n.times do
- x += 1
- end
- end
- end
- end
- end
-end
-# puts x
-
-
diff --git a/benchmark/bm_so_object.rb b/benchmark/bm_so_object.rb
deleted file mode 100644
index e8607c7199..0000000000
--- a/benchmark/bm_so_object.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/ruby
-# -*- mode: ruby -*-
-# $Id: objinst-ruby.code,v 1.4 2004/11/13 07:42:25 bfulgham Exp $
-# http://www.bagley.org/~doug/shootout/
-# with help from Aristarkh Zagorodnikov
-
-class Toggle
- def initialize(start_state)
- @bool = start_state
- end
-
- def value
- @bool
- end
-
- def activate
- @bool = !@bool
- self
- end
-end
-
-class NthToggle < Toggle
- def initialize(start_state, max_counter)
- super start_state
- @count_max = max_counter
- @counter = 0
- end
-
- def activate
- @counter += 1
- if @counter >= @count_max
- @bool = !@bool
- @counter = 0
- end
- self
- end
-end
-
-n = 1500000 # (ARGV.shift || 1).to_i
-
-toggle = Toggle.new 1
-5.times do
- toggle.activate.value ? 'true' : 'false'
-end
-n.times do
- toggle = Toggle.new 1
-end
-
-ntoggle = NthToggle.new 1, 3
-8.times do
- ntoggle.activate.value ? 'true' : 'false'
-end
-n.times do
- ntoggle = NthToggle.new 1, 3
-end
-
diff --git a/benchmark/bm_so_pidigits.rb b/benchmark/bm_so_pidigits.rb
deleted file mode 100644
index c7d6fbfb4d..0000000000
--- a/benchmark/bm_so_pidigits.rb
+++ /dev/null
@@ -1,92 +0,0 @@
-# The Great Computer Language Shootout
-# http://shootout.alioth.debian.org/
-#
-# contributed by Gabriele Renzi
-
-class PiDigitSpigot
-
- def initialize()
- @z = Transformation.new 1,0,0,1
- @x = Transformation.new 0,0,0,0
- @inverse = Transformation.new 0,0,0,0
- end
-
- def next!
- @y = @z.extract(3)
- if safe? @y
- @z = produce(@y)
- @y
- else
- @z = consume @x.next!()
- next!()
- end
- end
-
- def safe?(digit)
- digit == @z.extract(4)
- end
-
- def produce(i)
- @inverse.qrst(10,-10*i,0,1).compose(@z)
- end
-
- def consume(a)
- @z.compose(a)
- end
-end
-
-
-class Transformation
- attr_reader :q, :r, :s, :t
- def initialize (q, r, s, t)
- @q,@r,@s,@t,@k = q,r,s,t,0
- end
-
- def next!()
- @q = @k = @k + 1
- @r = 4 * @k + 2
- @s = 0
- @t = 2 * @k + 1
- self
- end
-
- def extract(j)
- (@q * j + @r) / (@s * j + @t)
- end
-
- def compose(a)
- self.class.new( @q * a.q,
- @q * a.r + r * a.t,
- @s * a.q + t * a.s,
- @s * a.r + t * a.t
- )
- end
-
- def qrst *args
- initialize *args
- self
- end
-
-
-end
-
-
-WIDTH = 10
-n = 2_500 # Integer(ARGV[0])
-j = 0
-
-digits = PiDigitSpigot.new
-
-while n > 0
- if n >= WIDTH
- WIDTH.times {print digits.next!}
- j += WIDTH
- else
- n.times {print digits.next!}
- (WIDTH-n).times {print " "}
- j += n
- end
- puts "\t:"+j.to_s
- n -= WIDTH
-end
-
diff --git a/benchmark/bm_so_reverse_complement.rb b/benchmark/bm_so_reverse_complement.rb
deleted file mode 100644
index 82ea666994..0000000000
--- a/benchmark/bm_so_reverse_complement.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/ruby
-# The Great Computer Language Shootout
-# http://shootout.alioth.debian.org/
-#
-# Contributed by Peter Bjarke Olsen
-# Modified by Doug King
-
-seq=Array.new
-
-def revcomp(seq)
- seq.reverse!.tr!('wsatugcyrkmbdhvnATUGCYRKMBDHVN','WSTAACGRYMKVHDBNTAACGRYMKVHDBN')
- stringlen=seq.length
- 0.step(stringlen-1,60) {|x| print seq.slice(x,60) , "\n"}
-end
-
-input = open(File.join(File.dirname($0), 'fasta.output.2500000'), 'rb')
-
-while input.gets
- if $_ =~ />/
- if seq.length != 0
- revcomp(seq.join)
- seq=Array.new
- end
- puts $_
- else
- $_.sub(/\n/,'')
- seq.push $_
- end
-end
-revcomp(seq.join)
diff --git a/benchmark/bm_vm1_attr_ivar.rb b/benchmark/bm_vm1_attr_ivar.rb
deleted file mode 100644
index 16906f3605..0000000000
--- a/benchmark/bm_vm1_attr_ivar.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-class C
- attr_reader :a, :b
- def initialize
- @a = nil
- @b = nil
- end
-end
-obj = C.new
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- j = obj.a
- k = obj.b
-end
diff --git a/benchmark/bm_vm1_attr_ivar_set.rb b/benchmark/bm_vm1_attr_ivar_set.rb
deleted file mode 100644
index 7e7a6b48c0..0000000000
--- a/benchmark/bm_vm1_attr_ivar_set.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-class C
- attr_accessor :a, :b
- def initialize
- @a = nil
- @b = nil
- end
-end
-obj = C.new
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- obj.a = 1
- obj.b = 2
-end
diff --git a/benchmark/bm_vm1_block.rb b/benchmark/bm_vm1_block.rb
deleted file mode 100644
index a9f56b15ea..0000000000
--- a/benchmark/bm_vm1_block.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-def m
- yield
-end
-
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- m{
- }
-end
diff --git a/benchmark/bm_vm1_const.rb b/benchmark/bm_vm1_const.rb
deleted file mode 100644
index ac59ebccf1..0000000000
--- a/benchmark/bm_vm1_const.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-Const = 1
-
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- j = Const
- k = Const
-end
diff --git a/benchmark/bm_vm1_ensure.rb b/benchmark/bm_vm1_ensure.rb
deleted file mode 100644
index a1596145f2..0000000000
--- a/benchmark/bm_vm1_ensure.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-i = 0
-while i<30_000_000 # benchmark loop 1
- i += 1
- begin
- begin
- ensure
- end
- ensure
- end
-end
-
diff --git a/benchmark/bm_vm1_float_simple.rb b/benchmark/bm_vm1_float_simple.rb
deleted file mode 100644
index d4581439ff..0000000000
--- a/benchmark/bm_vm1_float_simple.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-i = 0.0; f = 0.0
-while i<30_000_000
- i += 1
- f += 0.1; f -= 0.1
- f += 0.1; f -= 0.1
- f += 0.1; f -= 0.1
-end
diff --git a/benchmark/bm_vm1_gc_short_lived.rb b/benchmark/bm_vm1_gc_short_lived.rb
deleted file mode 100644
index e78bca5668..0000000000
--- a/benchmark/bm_vm1_gc_short_lived.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-i = 0
-while i<30_000_000 # while loop 1
- a = '' # short-lived String
- b = ''
- c = ''
- d = ''
- e = ''
- f = ''
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_short_with_complex_long.rb b/benchmark/bm_vm1_gc_short_with_complex_long.rb
deleted file mode 100644
index b66052dee0..0000000000
--- a/benchmark/bm_vm1_gc_short_with_complex_long.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-def nested_hash h, n
- if n == 0
- ''
- else
- 10.times{
- h[Object.new] = nested_hash(h, n-1)
- }
- end
-end
-
-long_lived = Hash.new
-nested_hash long_lived, 6
-
-GC.start
-GC.start
-
-i = 0
-while i<30_000_000 # while loop 1
- a = '' # short-lived String
- b = ''
- c = ''
- d = ''
- e = ''
- f = ''
- i+=1
-end
-
diff --git a/benchmark/bm_vm1_gc_short_with_long.rb b/benchmark/bm_vm1_gc_short_with_long.rb
deleted file mode 100644
index 298dbc845b..0000000000
--- a/benchmark/bm_vm1_gc_short_with_long.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-long_lived = Array.new(1_000_000){|i| "#{i}"}
-GC.start
-GC.start
-i = 0
-while i<30_000_000 # while loop 1
- a = '' # short-lived String
- b = ''
- c = ''
- d = ''
- e = ''
- f = ''
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_short_with_symbol.rb b/benchmark/bm_vm1_gc_short_with_symbol.rb
deleted file mode 100644
index 6b15c1b7bf..0000000000
--- a/benchmark/bm_vm1_gc_short_with_symbol.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# make many symbols
-50_000.times{|i| sym = "sym#{i}".to_sym}
-GC.start
-GC.start
-
-i = 0
-while i<30_000_000 # while loop 1
- a = '' # short-lived String
- b = ''
- c = ''
- d = ''
- e = ''
- f = ''
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_wb_ary.rb b/benchmark/bm_vm1_gc_wb_ary.rb
deleted file mode 100644
index 881528845b..0000000000
--- a/benchmark/bm_vm1_gc_wb_ary.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-short_lived_ary = []
-
-if RUBY_VERSION >= "2.2.0"
- GC.start(full_mark: false, immediate_mark: true, lazy_sweep: false)
-end
-
-i = 0
-short_lived = ''
-while i<30_000_000 # while loop 1
- short_lived_ary[0] = short_lived # write barrier
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_wb_ary_promoted.rb b/benchmark/bm_vm1_gc_wb_ary_promoted.rb
deleted file mode 100644
index 3c8279c956..0000000000
--- a/benchmark/bm_vm1_gc_wb_ary_promoted.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-long_lived = []
-
-if RUBY_VERSION > "2.2.0"
- 3.times{ GC.start(full_mark: false, immediate_mark: true, lazy_sweep: false) }
-elsif
- GC.start
-end
-
-i = 0
-short_lived = ''
-while i<30_000_000 # while loop 1
- long_lived[0] = short_lived # write barrier
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_wb_obj.rb b/benchmark/bm_vm1_gc_wb_obj.rb
deleted file mode 100644
index a4067af36b..0000000000
--- a/benchmark/bm_vm1_gc_wb_obj.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-class C
- attr_accessor :foo
-end
-short_lived_obj = C.new
-
-if RUBY_VERSION >= "2.2.0"
- GC.start(full_mark: false, immediate_mark: true, lazy_sweep: false)
-end
-
-i = 0
-short_lived = ''
-while i<30_000_000 # while loop 1
- short_lived_obj.foo = short_lived # write barrier
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_wb_obj_promoted.rb b/benchmark/bm_vm1_gc_wb_obj_promoted.rb
deleted file mode 100644
index eee07a0248..0000000000
--- a/benchmark/bm_vm1_gc_wb_obj_promoted.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-class C
- attr_accessor :foo
-end
-long_lived = C.new
-
-if RUBY_VERSION >= "2.2.0"
- 3.times{ GC.start(full_mark: false, immediate_mark: true, lazy_sweep: false) }
-elsif
- GC.start
-end
-
-i = 0
-short_lived = ''
-while i<30_000_000 # while loop 1
- long_lived.foo = short_lived # write barrier
- i+=1
-end
diff --git a/benchmark/bm_vm1_ivar.rb b/benchmark/bm_vm1_ivar.rb
deleted file mode 100644
index 68a73cf92f..0000000000
--- a/benchmark/bm_vm1_ivar.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-@a = 1
-
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- j = @a
- k = @a
-end
diff --git a/benchmark/bm_vm1_ivar_set.rb b/benchmark/bm_vm1_ivar_set.rb
deleted file mode 100644
index bd81b06c34..0000000000
--- a/benchmark/bm_vm1_ivar_set.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- @a = 1
- @b = 2
-end
diff --git a/benchmark/bm_vm1_length.rb b/benchmark/bm_vm1_length.rb
deleted file mode 100644
index 353de3ab0e..0000000000
--- a/benchmark/bm_vm1_length.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-a = 'abc'
-b = [1, 2, 3]
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- a.length
- b.length
-end
-
diff --git a/benchmark/bm_vm1_lvar_init.rb b/benchmark/bm_vm1_lvar_init.rb
deleted file mode 100644
index 36f2068811..0000000000
--- a/benchmark/bm_vm1_lvar_init.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-def m v
- unless v
- # unreachable code
- v1 = v2 = v3 = v4 = v5 = v6 = v7 = v8 = v9 = v10 =
- v11 = v12 = v13 = v14 = v15 = v16 = v17 = v18 = v19 = v20 =
- v21 = v22 = v23 = v24 = v25 = v26 = v27 = v28 = v29 = v30 =
- v31 = v32 = v33 = v34 = v35 = v36 = v37 = v38 = v39 = v40 =
- v41 = v42 = v43 = v44 = v45 = v46 = v47 = v48 = v49 = v50 = 1
- end
-end
-
-i = 0
-
-while i<30_000_000 # while loop 1
- i += 1
- m i
-end
-
diff --git a/benchmark/bm_vm1_lvar_set.rb b/benchmark/bm_vm1_lvar_set.rb
deleted file mode 100644
index 222e864134..0000000000
--- a/benchmark/bm_vm1_lvar_set.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- a = b = c = d = e = f = g = h = j = k = l = m = n = o = p = q = r = 1
-end
diff --git a/benchmark/bm_vm1_neq.rb b/benchmark/bm_vm1_neq.rb
deleted file mode 100644
index bbb4ae07a4..0000000000
--- a/benchmark/bm_vm1_neq.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-i = 0
-obj1 = Object.new
-obj2 = Object.new
-
-while i<30_000_000 # while loop 1
- i += 1
- obj1 != obj2
-end
diff --git a/benchmark/bm_vm1_not.rb b/benchmark/bm_vm1_not.rb
deleted file mode 100644
index b09ecdcc21..0000000000
--- a/benchmark/bm_vm1_not.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-i = 0
-obj = Object.new
-
-while i<30_000_000 # while loop 1
- i += 1
- !obj
-end
diff --git a/benchmark/bm_vm1_rescue.rb b/benchmark/bm_vm1_rescue.rb
deleted file mode 100644
index b0d3e2bdfa..0000000000
--- a/benchmark/bm_vm1_rescue.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- begin
- rescue
- end
-end
diff --git a/benchmark/bm_vm1_simplereturn.rb b/benchmark/bm_vm1_simplereturn.rb
deleted file mode 100644
index 63f9f21675..0000000000
--- a/benchmark/bm_vm1_simplereturn.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-def m
- return 1
-end
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- m
-end
-
diff --git a/benchmark/bm_vm1_swap.rb b/benchmark/bm_vm1_swap.rb
deleted file mode 100644
index 918f8b2112..0000000000
--- a/benchmark/bm_vm1_swap.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-a = 1
-b = 2
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- a, b = b, a
-end
-
diff --git a/benchmark/bm_vm1_yield.rb b/benchmark/bm_vm1_yield.rb
deleted file mode 100644
index 775597cea6..0000000000
--- a/benchmark/bm_vm1_yield.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-def m
- i = 0
- while i<30_000_000 # while loop 1
- i += 1
- yield
- end
-end
-
-m{}
-
diff --git a/benchmark/bm_vm2_array.rb b/benchmark/bm_vm2_array.rb
deleted file mode 100644
index df9037c83c..0000000000
--- a/benchmark/bm_vm2_array.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- a = [1,2,3,4,5,6,7,8,9,10]
-end
diff --git a/benchmark/bm_vm2_bigarray.rb b/benchmark/bm_vm2_bigarray.rb
deleted file mode 100644
index b02509d6a2..0000000000
--- a/benchmark/bm_vm2_bigarray.rb
+++ /dev/null
@@ -1,106 +0,0 @@
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- a = [
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- ]
-end
diff --git a/benchmark/bm_vm2_bighash.rb b/benchmark/bm_vm2_bighash.rb
deleted file mode 100644
index 5e3f437bb8..0000000000
--- a/benchmark/bm_vm2_bighash.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<60_000 # benchmark loop 2
- i += 1
- a = {0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9, 10=>10, 11=>11, 12=>12, 13=>13, 14=>14, 15=>15, 16=>16, 17=>17, 18=>18, 19=>19, 20=>20, 21=>21, 22=>22, 23=>23, 24=>24, 25=>25, 26=>26, 27=>27, 28=>28, 29=>29, 30=>30, 31=>31, 32=>32, 33=>33, 34=>34, 35=>35, 36=>36, 37=>37, 38=>38, 39=>39, 40=>40, 41=>41, 42=>42, 43=>43, 44=>44, 45=>45, 46=>46, 47=>47, 48=>48, 49=>49, 50=>50, 51=>51, 52=>52, 53=>53, 54=>54, 55=>55, 56=>56, 57=>57, 58=>58, 59=>59, 60=>60, 61=>61, 62=>62, 63=>63, 64=>64, 65=>65, 66=>66, 67=>67, 68=>68, 69=>69, 70=>70, 71=>71, 72=>72, 73=>73, 74=>74, 75=>75, 76=>76, 77=>77, 78=>78, 79=>79, 80=>80, 81=>81, 82=>82, 83=>83, 84=>84, 85=>85, 86=>86, 87=>87, 88=>88, 89=>89, 90=>90, 91=>91, 92=>92, 93=>93, 94=>94, 95=>95, 96=>96, 97=>97, 98=>98, 99=>99, 100=>100, 101=>101, 102=>102, 103=>103, 104=>104, 105=>105, 106=>106, 107=>107, 108=>108, 109=>109, 110=>110, 111=>111, 112=>112, 113=>113, 114=>114, 115=>115, 116=>116, 117=>117, 118=>118, 119=>119, 120=>120, 121=>121, 122=>122, 123=>123, 124=>124, 125=>125, 126=>126, 127=>127, 128=>128, 129=>129, 130=>130, 131=>131, 132=>132, 133=>133, 134=>134, 135=>135, 136=>136, 137=>137, 138=>138, 139=>139, 140=>140, 141=>141, 142=>142, 143=>143, 144=>144, 145=>145, 146=>146, 147=>147, 148=>148, 149=>149, 150=>150, 151=>151, 152=>152, 153=>153, 154=>154, 155=>155, 156=>156, 157=>157, 158=>158, 159=>159, 160=>160, 161=>161, 162=>162, 163=>163, 164=>164, 165=>165, 166=>166, 167=>167, 168=>168, 169=>169, 170=>170, 171=>171, 172=>172, 173=>173, 174=>174, 175=>175, 176=>176, 177=>177, 178=>178, 179=>179, 180=>180, 181=>181, 182=>182, 183=>183, 184=>184, 185=>185, 186=>186, 187=>187, 188=>188, 189=>189, 190=>190, 191=>191, 192=>192, 193=>193, 194=>194, 195=>195, 196=>196, 197=>197, 198=>198, 199=>199, 200=>200, 201=>201, 202=>202, 203=>203, 204=>204, 205=>205, 206=>206, 207=>207, 208=>208, 209=>209, 210=>210, 211=>211, 212=>212, 213=>213, 214=>214, 215=>215, 216=>216, 217=>217, 218=>218, 219=>219, 220=>220, 221=>221, 222=>222, 223=>223, 224=>224, 225=>225, 226=>226, 227=>227, 228=>228, 229=>229, 230=>230, 231=>231, 232=>232, 233=>233, 234=>234, 235=>235, 236=>236, 237=>237, 238=>238, 239=>239, 240=>240, 241=>241, 242=>242, 243=>243, 244=>244, 245=>245, 246=>246, 247=>247, 248=>248, 249=>249, 250=>250, 251=>251, 252=>252, 253=>253, 254=>254, 255=>255, 256=>256, 257=>257, 258=>258, 259=>259, 260=>260, 261=>261, 262=>262, 263=>263, 264=>264, 265=>265, 266=>266, 267=>267, 268=>268, 269=>269, 270=>270, 271=>271, 272=>272, 273=>273, 274=>274, 275=>275, 276=>276, 277=>277, 278=>278, 279=>279, 280=>280, 281=>281, 282=>282, 283=>283, 284=>284, 285=>285, 286=>286, 287=>287, 288=>288, 289=>289, 290=>290, 291=>291, 292=>292, 293=>293, 294=>294, 295=>295, 296=>296, 297=>297, 298=>298, 299=>299, 300=>300, 301=>301, 302=>302, 303=>303, 304=>304, 305=>305, 306=>306, 307=>307, 308=>308, 309=>309, 310=>310, 311=>311, 312=>312, 313=>313, 314=>314, 315=>315, 316=>316, 317=>317, 318=>318, 319=>319, 320=>320, 321=>321, 322=>322, 323=>323, 324=>324, 325=>325, 326=>326, 327=>327, 328=>328, 329=>329, 330=>330, 331=>331, 332=>332, 333=>333, 334=>334, 335=>335, 336=>336, 337=>337, 338=>338, 339=>339, 340=>340, 341=>341, 342=>342, 343=>343, 344=>344, 345=>345, 346=>346, 347=>347, 348=>348, 349=>349, 350=>350, 351=>351, 352=>352, 353=>353, 354=>354, 355=>355, 356=>356, 357=>357, 358=>358, 359=>359, 360=>360, 361=>361, 362=>362, 363=>363, 364=>364, 365=>365, 366=>366, 367=>367, 368=>368, 369=>369, 370=>370, 371=>371, 372=>372, 373=>373, 374=>374, 375=>375, 376=>376, 377=>377, 378=>378, 379=>379, 380=>380, 381=>381, 382=>382, 383=>383, 384=>384, 385=>385, 386=>386, 387=>387, 388=>388, 389=>389, 390=>390, 391=>391, 392=>392, 393=>393, 394=>394, 395=>395, 396=>396, 397=>397, 398=>398, 399=>399, 400=>400, 401=>401, 402=>402, 403=>403, 404=>404, 405=>405, 406=>406, 407=>407, 408=>408, 409=>409, 410=>410, 411=>411, 412=>412, 413=>413, 414=>414, 415=>415, 416=>416, 417=>417, 418=>418, 419=>419, 420=>420, 421=>421, 422=>422, 423=>423, 424=>424, 425=>425, 426=>426, 427=>427, 428=>428, 429=>429, 430=>430, 431=>431, 432=>432, 433=>433, 434=>434, 435=>435, 436=>436, 437=>437, 438=>438, 439=>439, 440=>440, 441=>441, 442=>442, 443=>443, 444=>444, 445=>445, 446=>446, 447=>447, 448=>448, 449=>449, 450=>450, 451=>451, 452=>452, 453=>453, 454=>454, 455=>455, 456=>456, 457=>457, 458=>458, 459=>459, 460=>460, 461=>461, 462=>462, 463=>463, 464=>464, 465=>465, 466=>466, 467=>467, 468=>468, 469=>469, 470=>470, 471=>471, 472=>472, 473=>473, 474=>474, 475=>475, 476=>476, 477=>477, 478=>478, 479=>479, 480=>480, 481=>481, 482=>482, 483=>483, 484=>484, 485=>485, 486=>486, 487=>487, 488=>488, 489=>489, 490=>490, 491=>491, 492=>492, 493=>493, 494=>494, 495=>495, 496=>496, 497=>497, 498=>498, 499=>499, 500=>500,}
-end
diff --git a/benchmark/bm_vm2_case.rb b/benchmark/bm_vm2_case.rb
deleted file mode 100644
index adc6e4df0a..0000000000
--- a/benchmark/bm_vm2_case.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-i = 0
-while i<6_000_000 # while loop 2
- case :foo
- when :bar
- raise
- when :baz
- raise
- when :boo
- raise
- when :foo
- i += 1
- end
-end
-
diff --git a/benchmark/bm_vm2_case_lit.rb b/benchmark/bm_vm2_case_lit.rb
deleted file mode 100644
index c62b294e0e..0000000000
--- a/benchmark/bm_vm2_case_lit.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-i = 0
-@ret = [ "foo", true, false, :sym, 6, nil, 0.1, 0xffffffffffffffff ]
-def foo(i)
- @ret[i % @ret.size]
-end
-
-while i<6_000_000 # while loop 2
- case foo(i)
- when "foo" then :foo
- when true then true
- when false then false
- when :sym then :sym
- when 6 then :fix
- when nil then nil
- when 0.1 then :float
- when 0xffffffffffffffff then :big
- end
- i += 1
-end
diff --git a/benchmark/bm_vm2_defined_method.rb b/benchmark/bm_vm2_defined_method.rb
deleted file mode 100644
index 053ed6c912..0000000000
--- a/benchmark/bm_vm2_defined_method.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class Object
- define_method(:m){}
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- m; m; m; m; m; m; m; m;
-end
diff --git a/benchmark/bm_vm2_dstr.rb b/benchmark/bm_vm2_dstr.rb
deleted file mode 100644
index 58c0f7bbc3..0000000000
--- a/benchmark/bm_vm2_dstr.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-i = 0
-x = y = 'z'
-while i<6_000_000 # benchmark loop 2
- i += 1
- str = "foo#{x}bar#{y}baz"
-end
diff --git a/benchmark/bm_vm2_eval.rb b/benchmark/bm_vm2_eval.rb
deleted file mode 100644
index 307cfc28ef..0000000000
--- a/benchmark/bm_vm2_eval.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- eval("1")
-end
-
diff --git a/benchmark/bm_vm2_method.rb b/benchmark/bm_vm2_method.rb
deleted file mode 100644
index a8ccff7138..0000000000
--- a/benchmark/bm_vm2_method.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-def m
- nil
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- m; m; m; m; m; m; m; m;
-end
diff --git a/benchmark/bm_vm2_method_missing.rb b/benchmark/bm_vm2_method_missing.rb
deleted file mode 100644
index 2badc73101..0000000000
--- a/benchmark/bm_vm2_method_missing.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class C
- def method_missing mid
- end
-end
-
-obj = C.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; obj.m;
-end
diff --git a/benchmark/bm_vm2_method_with_block.rb b/benchmark/bm_vm2_method_with_block.rb
deleted file mode 100644
index b4efb4f520..0000000000
--- a/benchmark/bm_vm2_method_with_block.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-def m
- nil
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- m{}; m{}; m{}; m{}; m{}; m{}; m{}; m{};
-end
diff --git a/benchmark/bm_vm2_mutex.rb b/benchmark/bm_vm2_mutex.rb
deleted file mode 100644
index 7362f738c5..0000000000
--- a/benchmark/bm_vm2_mutex.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'thread'
-
-m = Mutex.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- m.synchronize{}
-end
diff --git a/benchmark/bm_vm2_newlambda.rb b/benchmark/bm_vm2_newlambda.rb
deleted file mode 100644
index 6422c9b0d0..0000000000
--- a/benchmark/bm_vm2_newlambda.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- lambda {}
-end
diff --git a/benchmark/bm_vm2_poly_method.rb b/benchmark/bm_vm2_poly_method.rb
deleted file mode 100644
index c82c0e4bce..0000000000
--- a/benchmark/bm_vm2_poly_method.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-class C1
- def m
- 1
- end
-end
-class C2
- def m
- 2
- end
-end
-
-o1 = C1.new
-o2 = C2.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- o = (i % 2 == 0) ? o1 : o2
- o.m; o.m; o.m; o.m; o.m; o.m; o.m; o.m
- i += 1
-end
diff --git a/benchmark/bm_vm2_poly_method_ov.rb b/benchmark/bm_vm2_poly_method_ov.rb
deleted file mode 100644
index aa5fd1dd38..0000000000
--- a/benchmark/bm_vm2_poly_method_ov.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-class C1
- def m
- 1
- end
-end
-class C2
- def m
- 2
- end
-end
-
-o1 = C1.new
-o2 = C2.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- o = (i % 2 == 0) ? o1 : o2
-# o.m; o.m; o.m; o.m; o.m; o.m; o.m; o.m
- i += 1
-end
diff --git a/benchmark/bm_vm2_proc.rb b/benchmark/bm_vm2_proc.rb
deleted file mode 100644
index 65e5217371..0000000000
--- a/benchmark/bm_vm2_proc.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-def m &b
- b
-end
-
-pr = m{
- a = 1
-}
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- pr.call
-end
-
diff --git a/benchmark/bm_vm2_raise1.rb b/benchmark/bm_vm2_raise1.rb
deleted file mode 100644
index aa5387987f..0000000000
--- a/benchmark/bm_vm2_raise1.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-def rec n
- if n > 0
- rec n-1
- else
- raise
- end
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
-
- begin
- rec 1
- rescue
- # ignore
- end
-end
diff --git a/benchmark/bm_vm2_raise2.rb b/benchmark/bm_vm2_raise2.rb
deleted file mode 100644
index 1f61c63157..0000000000
--- a/benchmark/bm_vm2_raise2.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-def rec n
- if n > 0
- rec n-1
- else
- raise
- end
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
-
- begin
- rec 10
- rescue
- # ignore
- end
-end
diff --git a/benchmark/bm_vm2_regexp.rb b/benchmark/bm_vm2_regexp.rb
deleted file mode 100644
index 55f9e957a3..0000000000
--- a/benchmark/bm_vm2_regexp.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-i = 0
-str = 'xxxhogexxx'
-while i<6_000_000 # benchmark loop 2
- /hoge/ =~ str
- i += 1
-end
diff --git a/benchmark/bm_vm2_send.rb b/benchmark/bm_vm2_send.rb
deleted file mode 100644
index 6a3ab6fdab..0000000000
--- a/benchmark/bm_vm2_send.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class C
- def m
- end
-end
-
-o = C.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- o.__send__ :m
-end
diff --git a/benchmark/bm_vm2_string_literal.rb b/benchmark/bm_vm2_string_literal.rb
deleted file mode 100644
index 1d73036849..0000000000
--- a/benchmark/bm_vm2_string_literal.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-end
diff --git a/benchmark/bm_vm2_struct_big_aref_hi.rb b/benchmark/bm_vm2_struct_big_aref_hi.rb
deleted file mode 100644
index 22cb26b0a5..0000000000
--- a/benchmark/bm_vm2_struct_big_aref_hi.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(*('a'..'z').map { |x| x.to_sym })
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x.z # x[25]
-end
diff --git a/benchmark/bm_vm2_struct_big_aref_lo.rb b/benchmark/bm_vm2_struct_big_aref_lo.rb
deleted file mode 100644
index 5e61a7087e..0000000000
--- a/benchmark/bm_vm2_struct_big_aref_lo.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(*('a'..'z').map { |x| x.to_sym })
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x.k # x[10]
-end
diff --git a/benchmark/bm_vm2_struct_big_aset.rb b/benchmark/bm_vm2_struct_big_aset.rb
deleted file mode 100644
index 5a1c3d16f3..0000000000
--- a/benchmark/bm_vm2_struct_big_aset.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(*('a'..'z').map { |x| x.to_sym })
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x.k = i # x[10] = i
-end
diff --git a/benchmark/bm_vm2_struct_big_href_hi.rb b/benchmark/bm_vm2_struct_big_href_hi.rb
deleted file mode 100644
index fff940a80a..0000000000
--- a/benchmark/bm_vm2_struct_big_href_hi.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(*('a'..'z').map { |x| x.to_sym })
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x[:z]
-end
diff --git a/benchmark/bm_vm2_struct_big_href_lo.rb b/benchmark/bm_vm2_struct_big_href_lo.rb
deleted file mode 100644
index 5e4085d59d..0000000000
--- a/benchmark/bm_vm2_struct_big_href_lo.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(*('a'..'z').map { |x| x.to_sym })
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x[:k]
-end
diff --git a/benchmark/bm_vm2_struct_big_hset.rb b/benchmark/bm_vm2_struct_big_hset.rb
deleted file mode 100644
index 9c0cee4141..0000000000
--- a/benchmark/bm_vm2_struct_big_hset.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(*('a'..'z').map { |x| x.to_sym })
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x[:k] = i
-end
diff --git a/benchmark/bm_vm2_struct_small_aref.rb b/benchmark/bm_vm2_struct_small_aref.rb
deleted file mode 100644
index 8eaa555b41..0000000000
--- a/benchmark/bm_vm2_struct_small_aref.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(:a, :b, :c)
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x.a
-end
diff --git a/benchmark/bm_vm2_struct_small_aset.rb b/benchmark/bm_vm2_struct_small_aset.rb
deleted file mode 100644
index ecd0f95669..0000000000
--- a/benchmark/bm_vm2_struct_small_aset.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(:a, :b, :c)
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x.a = i
-end
diff --git a/benchmark/bm_vm2_struct_small_href.rb b/benchmark/bm_vm2_struct_small_href.rb
deleted file mode 100644
index 2c88fee6bf..0000000000
--- a/benchmark/bm_vm2_struct_small_href.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(:a, :b, :c)
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x[:a]
-end
diff --git a/benchmark/bm_vm2_struct_small_hset.rb b/benchmark/bm_vm2_struct_small_hset.rb
deleted file mode 100644
index 33c36d20f1..0000000000
--- a/benchmark/bm_vm2_struct_small_hset.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-s = Struct.new(:a, :b, :c)
-x = s.new
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- x[:a] = 1
-end
diff --git a/benchmark/bm_vm2_super.rb b/benchmark/bm_vm2_super.rb
deleted file mode 100644
index afd8579e7b..0000000000
--- a/benchmark/bm_vm2_super.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-
-class C
- def m
- 1
- end
-end
-
-class CC < C
- def m
- super()
- end
-end
-
-obj = CC.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- obj.m
- i += 1
-end
diff --git a/benchmark/bm_vm2_unif1.rb b/benchmark/bm_vm2_unif1.rb
deleted file mode 100644
index 1774625942..0000000000
--- a/benchmark/bm_vm2_unif1.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-i = 0
-def m a, b
-end
-
-while i<6_000_000 # benchmark loop 2
- i += 1
- m 100, 200
-end
diff --git a/benchmark/bm_vm2_zsuper.rb b/benchmark/bm_vm2_zsuper.rb
deleted file mode 100644
index 2a43e62217..0000000000
--- a/benchmark/bm_vm2_zsuper.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-i = 0
-
-class C
- def m a
- 1
- end
-end
-
-class CC < C
- def m a
- super
- end
-end
-
-obj = CC.new
-
-while i<6_000_000 # benchmark loop 2
- obj.m 10
- i += 1
-end
diff --git a/benchmark/bm_vm_thread_alive_check1.rb b/benchmark/bm_vm_thread_alive_check1.rb
deleted file mode 100644
index c993accdda..0000000000
--- a/benchmark/bm_vm_thread_alive_check1.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-5_000.times{
- t = Thread.new{}
- while t.alive?
- Thread.pass
- end
-}
diff --git a/benchmark/bm_vm_thread_mutex1.rb b/benchmark/bm_vm_thread_mutex1.rb
deleted file mode 100644
index 5c9f85dfb7..0000000000
--- a/benchmark/bm_vm_thread_mutex1.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# one thread, one mutex (no contention)
-
-require 'thread'
-m = Mutex.new
-r = 0
-max = 2000
-lmax = max * max
-(1..1).map{
- Thread.new{
- i = 0
- while i<lmax
- i += 1
- m.synchronize{
- r += 1
- }
- end
- }
-}.each{|e|
- e.join
-}
-raise r.to_s if r != max * max
diff --git a/benchmark/bm_vm_thread_mutex2.rb b/benchmark/bm_vm_thread_mutex2.rb
deleted file mode 100644
index 10de59054f..0000000000
--- a/benchmark/bm_vm_thread_mutex2.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# two threads, one mutex
-
-require 'thread'
-m = Mutex.new
-r = 0
-max = 2000
-lmax = (max * max)/2
-(1..2).map{
- Thread.new{
- i = 0
- while i<lmax
- i += 1
- m.synchronize{
- r += 1
- }
- end
- }
-}.each{|e|
- e.join
-}
-raise r.to_s if r != max * max
diff --git a/benchmark/bm_vm_thread_mutex3.rb b/benchmark/bm_vm_thread_mutex3.rb
deleted file mode 100644
index 7f9a44b39d..0000000000
--- a/benchmark/bm_vm_thread_mutex3.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# 1000 threads, one mutex
-
-require 'thread'
-m = Mutex.new
-r = 0
-max = 2000
-(1..max).map{
- Thread.new{
- i = 0
- while i<max
- i += 1
- m.synchronize{
- r += 1
- }
- end
- }
-}.each{|e|
- e.join
-}
-raise r.to_s if r != max * max
diff --git a/benchmark/bm_vm_thread_pass.rb b/benchmark/bm_vm_thread_pass.rb
deleted file mode 100644
index b5b3c0bc85..0000000000
--- a/benchmark/bm_vm_thread_pass.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# Plenty Thtread.pass
-# A performance may depend on GVL implementation.
-
-tmax = (ARGV.shift || 2).to_i
-lmax = 200_000 / tmax
-
-(1..tmax).map{
- Thread.new{
- lmax.times{
- Thread.pass
- }
- }
-}.each{|t| t.join}
-
-
diff --git a/benchmark/bm_vm_thread_pass_flood.rb b/benchmark/bm_vm_thread_pass_flood.rb
deleted file mode 100644
index 27157d1a6f..0000000000
--- a/benchmark/bm_vm_thread_pass_flood.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-1000.times{
- Thread.new{loop{Thread.pass}}
-}
-
-i = 0
-while i<10000
- i += 1
-end
diff --git a/benchmark/bm_vm_thread_queue.rb b/benchmark/bm_vm_thread_queue.rb
deleted file mode 100644
index 37381ae62b..0000000000
--- a/benchmark/bm_vm_thread_queue.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require 'thread'
-
-n = 1_000_000
-q = Queue.new
-consumer = Thread.new{
- while q.pop
- # consuming
- end
-}
-
-producer = Thread.new{
- n.times{
- q.push true
- }
- q.push nil
-}
-
-consumer.join
diff --git a/benchmark/buffer_each.yml b/benchmark/buffer_each.yml
new file mode 100644
index 0000000000..417941104e
--- /dev/null
+++ b/benchmark/buffer_each.yml
@@ -0,0 +1,27 @@
+prelude: |
+ # frozen_string_literal: true
+ Warning[:experimental] = false
+ string = "The quick brown fox jumped over the lazy dog."
+ array = string.bytes
+ buffer = IO::Buffer.for(string)
+benchmark:
+ string.each_byte: |
+ upcased = String.new
+ string.each_byte do |byte|
+ upcased << (byte ^ 32)
+ end
+ array.each: |
+ upcased = String.new
+ array.each do |byte|
+ upcased << (byte ^ 32)
+ end
+ buffer.each: |
+ upcased = String.new
+ buffer.each(:U8) do |offset, byte|
+ upcased << (byte ^ 32)
+ end
+ buffer.each_byte: |
+ upcased = String.new
+ buffer.each_byte do |byte|
+ upcased << (byte ^ 32)
+ end
diff --git a/benchmark/buffer_get.yml b/benchmark/buffer_get.yml
new file mode 100644
index 0000000000..9e1f99d64e
--- /dev/null
+++ b/benchmark/buffer_get.yml
@@ -0,0 +1,25 @@
+prelude: |
+ # frozen_string_literal: true
+ Warning[:experimental] = false
+ string = "The quick brown fox jumped over the lazy dog."
+ buffer = IO::Buffer.for(string)
+ format = [:U32, :U32, :U32, :U32]
+benchmark:
+ string.unpack1: |
+ [
+ string.unpack1("N"),
+ string.unpack1("N", offset: 4),
+ string.unpack1("N", offset: 8),
+ string.unpack1("N", offset: 12),
+ ]
+ buffer.get_value: |
+ [
+ buffer.get_value(:U32, 0),
+ buffer.get_value(:U32, 4),
+ buffer.get_value(:U32, 8),
+ buffer.get_value(:U32, 12),
+ ]
+ buffer.get_values: |
+ buffer.get_values(format, 0)
+ string.unpack: |
+ string.unpack("NNNN")
diff --git a/benchmark/cgi_escape_html.yml b/benchmark/cgi_escape_html.yml
new file mode 100644
index 0000000000..655be9d7d8
--- /dev/null
+++ b/benchmark/cgi_escape_html.yml
@@ -0,0 +1,31 @@
+prelude: |
+ # frozen_string_literal: true
+ require 'cgi/escape'
+benchmark:
+ - script: CGI.escapeHTML("")
+ loop_count: 20000000
+ - script: CGI.escapeHTML("abcde")
+ loop_count: 20000000
+ - script: CGI.escapeHTML("abcd<")
+ loop_count: 20000000
+ - script: CGI.escapeHTML("'&\"<>")
+ loop_count: 5000000
+ - prelude: long_no_escape = "abcde" * 300
+ script: CGI.escapeHTML(long_no_escape)
+ loop_count: 1000000
+ - prelude: long_all_escape = "'&\"<>" * 10
+ script: CGI.escapeHTML(long_all_escape)
+ loop_count: 1000000
+ - prelude: | # http://example.com/
+ example_html = <<~HTML
+ <body>
+ <div>
+ <h1>Example Domain</h1>
+ <p>This domain is established to be used for illustrative examples in documents. You may use this
+ domain in examples without prior coordination or asking for permission.</p>
+ <p><a href="http://www.iana.org/domains/example">More information...</a></p>
+ </div>
+ </body>
+ HTML
+ script: CGI.escapeHTML(example_html)
+ loop_count: 1000000
diff --git a/benchmark/class_superclass.yml b/benchmark/class_superclass.yml
new file mode 100644
index 0000000000..847ff811f1
--- /dev/null
+++ b/benchmark/class_superclass.yml
@@ -0,0 +1,23 @@
+prelude: |
+ class SimpleClass; end
+ class OneModuleClass
+ 1.times { include Module.new }
+ end
+ class MediumClass
+ 10.times { include Module.new }
+ end
+ class LargeClass
+ 100.times { include Module.new }
+ end
+benchmark:
+ object_class_superclass: |
+ Object.superclass
+ simple_class_superclass: |
+ SimpleClass.superclass
+ one_module_class: |
+ OneModuleClass.superclass
+ medium_class_superclass: |
+ MediumClass.superclass
+ large_class_superclass: |
+ LargeClass.superclass
+loop_count: 20000000
diff --git a/benchmark/complex_float_add.yml b/benchmark/complex_float_add.yml
new file mode 100644
index 0000000000..d0150c5e5b
--- /dev/null
+++ b/benchmark/complex_float_add.yml
@@ -0,0 +1,7 @@
+prelude: |
+ max, min = 1000.0, -1000.0
+ a = Complex(rand(max)+min, rand(max)+min)
+ b = Complex(rand(max)+min, rand(max)+min)
+benchmark:
+ complex_float_add: c = a + b
+loop_count: 1000000
diff --git a/benchmark/complex_float_div.yml b/benchmark/complex_float_div.yml
new file mode 100644
index 0000000000..b9f5e1d51c
--- /dev/null
+++ b/benchmark/complex_float_div.yml
@@ -0,0 +1,7 @@
+prelude: |
+ max, min = 1000.0, -1000.0
+ a = Complex(rand(max)+min, rand(max)+min)
+ b = Complex(rand(max)+min, rand(max)+min)
+benchmark:
+ complex_float_div: c = a / b
+loop_count: 1000000
diff --git a/benchmark/complex_float_mul.yml b/benchmark/complex_float_mul.yml
new file mode 100644
index 0000000000..59b096a6dc
--- /dev/null
+++ b/benchmark/complex_float_mul.yml
@@ -0,0 +1,7 @@
+prelude: |
+ max, min = 1000.0, -1000.0
+ a = Complex(rand(max)+min, rand(max)+min)
+ b = Complex(rand(max)+min, rand(max)+min)
+benchmark:
+ complex_float_mul: c = a * b
+loop_count: 1000000
diff --git a/benchmark/complex_float_new.yml b/benchmark/complex_float_new.yml
new file mode 100644
index 0000000000..6fcde3125b
--- /dev/null
+++ b/benchmark/complex_float_new.yml
@@ -0,0 +1,7 @@
+prelude: |
+ max, min = 1000.0, -1000.0
+ a = Complex(rand(max)+min, rand(max)+min)
+ b = Complex(rand(max)+min, rand(max)+min)
+benchmark:
+ complex_float_new: c = Complex(a, b)
+loop_count: 1000000
diff --git a/benchmark/complex_float_power.yml b/benchmark/complex_float_power.yml
new file mode 100644
index 0000000000..c40a31ab55
--- /dev/null
+++ b/benchmark/complex_float_power.yml
@@ -0,0 +1,7 @@
+prelude: |
+ max, min = 1000.0, -1000.0
+ a = Complex(rand(max)+min, rand(max)+min)
+ b = Complex(rand(max)+min, rand(max)+min)
+benchmark:
+ complex_float_power: c = a ** b
+loop_count: 1000000
diff --git a/benchmark/complex_float_sub.yml b/benchmark/complex_float_sub.yml
new file mode 100644
index 0000000000..3fafe7cdbe
--- /dev/null
+++ b/benchmark/complex_float_sub.yml
@@ -0,0 +1,7 @@
+prelude: |
+ max, min = 1000.0, -1000.0
+ a = Complex(rand(max)+min, rand(max)+min)
+ b = Complex(rand(max)+min, rand(max)+min)
+benchmark:
+ complex_float_sub: c = a - b
+loop_count: 1000000
diff --git a/benchmark/constant_invalidation.rb b/benchmark/constant_invalidation.rb
new file mode 100644
index 0000000000..a95ec6f37e
--- /dev/null
+++ b/benchmark/constant_invalidation.rb
@@ -0,0 +1,22 @@
+$VERBOSE = nil
+
+CONSTANT1 = 1
+CONSTANT2 = 1
+CONSTANT3 = 1
+CONSTANT4 = 1
+CONSTANT5 = 1
+
+def constants
+ [CONSTANT1, CONSTANT2, CONSTANT3, CONSTANT4, CONSTANT5]
+end
+
+500_000.times do
+ constants
+
+ # With previous behavior, this would cause all of the constant caches
+ # associated with the constant lookups listed above to invalidate, meaning
+ # they would all have to be fetched again. With current behavior, it only
+ # invalidates when a name matches, so the following constant set shouldn't
+ # impact the constant lookups listed above.
+ INVALIDATE = true
+end
diff --git a/benchmark/dir_empty_p.rb b/benchmark/dir_empty_p.rb
new file mode 100644
index 0000000000..8329c757cf
--- /dev/null
+++ b/benchmark/dir_empty_p.rb
@@ -0,0 +1,5 @@
+require 'tmpdir'
+max = 100_000
+Dir.mktmpdir('bm_dir_empty_p') do |dir|
+ max.times { Dir.empty?(dir) }
+end
diff --git a/benchmark/driver.rb b/benchmark/driver.rb
deleted file mode 100644
index defe3c30be..0000000000
--- a/benchmark/driver.rb
+++ /dev/null
@@ -1,400 +0,0 @@
-#
-# Ruby Benchmark driver
-#
-
-first = true
-
-begin
- require 'optparse'
-rescue LoadError
- if first
- first = false
- $:.unshift File.join(File.dirname(__FILE__), '../lib')
- retry
- else
- raise
- end
-end
-
-require 'benchmark'
-require 'pp'
-
-class BenchmarkDriver
- def self.benchmark(opt)
- driver = self.new(opt[:execs], opt[:dir], opt)
- begin
- driver.run
- ensure
- driver.show_results
- end
- end
-
- def self.load(input, type, opt)
- attrs = [:executables, :results]
- case type
- when 'yaml'
- require 'yaml'
- h = YAML.load(input)
- when 'json'
- require 'json'
- h = JSON.load(input)
- else
- h = eval(input.read)
- end
- obj = allocate
- obj.instance_variable_set("@execs", h[:executables] || h["executables"])
- obj.instance_variable_set("@results", h[:results] || h["results"])
- obj.instance_variable_set("@opt", opt)
- obj
- end
-
- def output *args
- puts(*args)
- @output and @output.puts(*args)
- end
-
- def message *args
- output(*args) if @verbose
- end
-
- def message_print *args
- if @verbose
- print(*args)
- STDOUT.flush
- @output and @output.print(*args)
- end
- end
-
- def progress_message *args
- unless STDOUT.tty?
- STDERR.print(*args)
- STDERR.flush
- end
- end
-
- def initialize execs, dir, opt = {}
- @execs = execs.map{|e|
- e.strip!
- next if e.empty?
-
- if /(.+)::(.+)/ =~ e
- # ex) ruby-a::/path/to/ruby-a
- label = $1.strip
- path = $2
- version = `#{path} -v`.chomp
- else
- path = e
- version = label = `#{path} -v`.chomp
- end
- [path, label, version]
- }.compact
-
- @dir = dir
- @repeat = opt[:repeat] || 1
- @repeat = 1 if @repeat < 1
- @pattern = opt[:pattern] || nil
- @exclude = opt[:exclude] || nil
- @verbose = opt[:quiet] ? false : (opt[:verbose] || false)
- @output = opt[:output] ? open(opt[:output], 'w') : nil
- @loop_wl1 = @loop_wl2 = nil
- @ruby_arg = opt[:ruby_arg] || nil
- @opt = opt
-
- # [[name, [[r-1-1, r-1-2, ...], [r-2-1, r-2-2, ...]]], ...]
- @results = []
-
- if @verbose
- @start_time = Time.now
- message @start_time
- @execs.each_with_index{|(path, label, version), i|
- message "target #{i}: " + (label == version ? "#{label}" : "#{label} (#{version})") + " at \"#{path}\""
- }
- end
- end
-
- def adjusted_results name, results
- s = nil
- results.each_with_index{|e, i|
- r = e.min
- case name
- when /^vm1_/
- if @loop_wl1
- r -= @loop_wl1[i]
- r = 0 if r < 0
- s = '*'
- end
- when /^vm2_/
- if @loop_wl2
- r -= @loop_wl2[i]
- r = 0 if r < 0
- s = '*'
- end
- end
- yield r
- }
- s
- end
-
- def show_results
- case @opt[:format]
- when :tsv
- strformat = "\t%1$s"
- numformat = "\t%1$*2$.3f"
- minwidth = 0
- name_width = 0
- when :markdown
- markdown = true
- strformat = "|%1$-*2$s"
- numformat = "|%1$*2$.3f"
- when :plain
- strformat = " %1$-*2$s"
- numformat = " %1$*2$.3f"
- end
-
- name_width ||= @results.map {|v,*| v.size}.max
- minwidth ||= 7
- width = @execs.map{|(_, v)| [v.size, minwidth].max}
-
- output
-
- if @verbose
- message '-----------------------------------------------------------'
- message 'raw data:'
- message
- message PP.pp(@results, "", 79)
- message
- message "Elapsed time: #{Time.now - @start_time} (sec)"
- end
-
- if rawdata_output = @opt[:rawdata_output]
- h = {}
- h[:cpuinfo] = File.read('/proc/cpuinfo') if File.exist?('/proc/cpuinfo')
- h[:executables] = @execs
- h[:results] = @results
- if (type = File.extname(rawdata_output)).empty?
- type = rawdata_output
- rawdata_output = @output.path.sub(/\.[^.\/]+\z/, '') << '.' << rawdata_output
- end
- case type
- when 'yaml'
- require 'yaml'
- h = YAML.dump(h)
- when 'json'
- require 'json'
- h = JSON.pretty_generate(h)
- else
- require 'pp'
- h = h.pretty_inspect
- end
- open(rawdata_output, 'w') {|f| f.puts h}
- end
-
- output '-----------------------------------------------------------'
- output 'benchmark results:'
-
- if @verbose and @repeat > 1
- output "minimum results in each #{@repeat} measurements."
- end
-
- output "Execution time (sec)"
- output if markdown
- output ["name".ljust(name_width), @execs.map.with_index{|(_, v), i| sprintf(strformat, v, width[i])}].join("").rstrip
- output ["-"*name_width, width.map{|n|":".rjust(n, "-")}].join("|") if markdown
- @results.each{|v, result|
- rets = []
- s = adjusted_results(v, result){|r|
- rets << sprintf(numformat, r, width[rets.size])
- }
- v += s if s
- output [v.ljust(name_width), rets].join("")
- }
-
- if @execs.size > 1
- output
- output "Speedup ratio: compare with the result of `#{@execs[0][1]}' (greater is better)"
- output if markdown
- output ["name".ljust(name_width), @execs[1..-1].map.with_index{|(_, v), i| sprintf(strformat, v, width[i])}].join("").rstrip
- output ["-"*name_width, width[1..-1].map{|n|":".rjust(n, "-")}].join("|") if markdown
- @results.each{|v, result|
- rets = []
- first_value = nil
- s = adjusted_results(v, result){|r|
- if first_value
- if r == 0
- rets << "Error"
- else
- rets << sprintf(numformat, first_value/r, width[rets.size+1])
- end
- else
- first_value = r
- end
- }
- v += s if s
- output [v.ljust(name_width), rets].join("")
- }
- end
-
- if @opt[:output]
- output
- output "Log file: #{@opt[:output]}"
- end
- end
-
- def files
- flag = {}
- @files = Dir.glob(File.join(@dir, 'bm*.rb')).map{|file|
- next if @pattern && /#{@pattern}/ !~ File.basename(file)
- next if @exclude && /#{@exclude}/ =~ File.basename(file)
- case file
- when /bm_(vm[12])_/, /bm_loop_(whileloop2?).rb/
- flag[$1] = true
- end
- file
- }.compact
-
- if flag['vm1'] && !flag['whileloop']
- @files << File.join(@dir, 'bm_loop_whileloop.rb')
- elsif flag['vm2'] && !flag['whileloop2']
- @files << File.join(@dir, 'bm_loop_whileloop2.rb')
- end
-
- @files.sort!
- progress_message "total: #{@files.size * @repeat} trial(s) (#{@repeat} trial(s) for #{@files.size} benchmark(s))\n"
- @files
- end
-
- def run
- files.each_with_index{|file, i|
- @i = i
- r = measure_file(file)
-
- if /bm_loop_whileloop.rb/ =~ file
- @loop_wl1 = r[1].map{|e| e.min}
- elsif /bm_loop_whileloop2.rb/ =~ file
- @loop_wl2 = r[1].map{|e| e.min}
- end
- }
- end
-
- def measure_file file
- name = File.basename(file, '.rb').sub(/^bm_/, '')
- prepare_file = File.join(File.dirname(file), "prepare_#{name}.rb")
- load prepare_file if FileTest.exist?(prepare_file)
-
- if @verbose
- output
- output '-----------------------------------------------------------'
- output name
- output
- output File.read(file)
- output
- end
-
- result = [name]
- result << @execs.map{|(e, v)|
- (0...@repeat).map{
- message_print "#{v}\t"
- progress_message '.'
-
- m = measure(e, file)
- message "#{m}"
- m
- }
- }
- @results << result
- result
- end
-
- unless defined?(File::NULL)
- if File.exist?('/dev/null')
- File::NULL = '/dev/null'
- end
- end
-
- def measure executable, file
- cmd = "#{executable} #{@ruby_arg} #{file}"
-
- m = Benchmark.measure{
- system(cmd, out: File::NULL)
- }
-
- if $? != 0
- output "\`#{cmd}\' exited with abnormal status (#{$?})"
- 0
- else
- m.real
- end
- end
-end
-
-if __FILE__ == $0
- opt = {
- :execs => [],
- :dir => File.dirname(__FILE__),
- :repeat => 1,
- :output => nil,
- :raw_output => nil,
- :format => :tsv,
- }
- formats = {
- :tsv => ".tsv",
- :markdown => ".md",
- :plain => ".txt",
- }
-
- parser = OptionParser.new{|o|
- o.on('-e', '--executables [EXECS]',
- "Specify benchmark one or more targets (e1::path1; e2::path2; e3::path3;...)"){|e|
- e.split(/;/).each{|path|
- opt[:execs] << path
- }
- }
- o.on('-d', '--directory [DIRECTORY]', "Benchmark suites directory"){|d|
- opt[:dir] = d
- }
- o.on('-p', '--pattern [PATTERN]', "Benchmark name pattern"){|p|
- opt[:pattern] = p
- }
- o.on('-x', '--exclude [PATTERN]', "Benchmark exclude pattern"){|e|
- opt[:exclude] = e
- }
- o.on('-r', '--repeat-count [NUM]', "Repeat count"){|n|
- opt[:repeat] = n.to_i
- }
- o.on('-o', '--output-file [FILE]', "Output file"){|f|
- opt[:output] = f
- }
- o.on('--ruby-arg [ARG]', "Optional argument for ruby"){|a|
- opt[:ruby_arg] = a
- }
- o.on('--rawdata-output [FILE]', 'output rawdata'){|r|
- opt[:rawdata_output] = r
- }
- o.on('--load-rawdata=FILE', 'input rawdata'){|r|
- opt[:rawdata_input] = r
- }
- o.on('-f', "--format=FORMAT", "output format (#{formats.keys.join(",")})", formats.keys){|r|
- opt[:format] = r
- }
- o.on('-v', '--verbose'){|v|
- opt[:verbose] = v
- }
- o.on('-q', '--quiet', "Run without notify information except result table."){|q|
- opt[:quiet] = q
- opt[:verbose] = false
- }
- }
-
- parser.parse!(ARGV)
- opt[:output] ||= "bmlog-#{Time.now.strftime('%Y%m%d-%H%M%S')}.#{$$}#{formats[opt[:format]]}"
-
- if input = opt[:rawdata_input]
- b = open(input) {|f|
- BenchmarkDriver.load(f, File.extname(input)[1..-1], opt)
- }
- b.show_results
- else
- BenchmarkDriver.benchmark(opt)
- end
-end
-
diff --git a/benchmark/enum_lazy_flat_map.yml b/benchmark/enum_lazy_flat_map.yml
new file mode 100644
index 0000000000..0ee390a441
--- /dev/null
+++ b/benchmark/enum_lazy_flat_map.yml
@@ -0,0 +1,16 @@
+prelude: |
+ num = (1..).lazy.take(100)
+ ary2 = [[1,2]].cycle.lazy.take(10)
+ ary10 = [[*1..10]].cycle.lazy.take(10)
+ ary20 = [[*1..20]].cycle.lazy.take(10)
+ ary50 = [[*1..50]].cycle.lazy.take(10)
+ ary100 = [[*1..100]].cycle.lazy.take(10)
+
+benchmark:
+ num3: num.flat_map {|x| x}.take(3).to_a
+ num10: num.flat_map {|x| x}.take(3).to_a
+ ary2: ary2.flat_map {|x| x}.take(3).to_a
+ ary10: ary10.flat_map {|x| x}.take(3).to_a
+ ary20: ary20.flat_map {|x| x}.take(3).to_a
+ ary50: ary50.flat_map {|x| x}.take(3).to_a
+ ary100: ary100.flat_map {|x| x}.take(3).to_a
diff --git a/benchmark/enum_lazy_grep_v_100.rb b/benchmark/enum_lazy_grep_v_100.rb
new file mode 100644
index 0000000000..8832392e65
--- /dev/null
+++ b/benchmark/enum_lazy_grep_v_100.rb
@@ -0,0 +1,4 @@
+grep_data = (1..10).to_a * 1000
+N = 100
+enum = grep_data.lazy.grep_v(->(i){i == 0}).grep_v(->(i){i == 0})
+N.times {enum.each {}}
diff --git a/benchmark/enum_lazy_grep_v_20.rb b/benchmark/enum_lazy_grep_v_20.rb
new file mode 100644
index 0000000000..329509fa8f
--- /dev/null
+++ b/benchmark/enum_lazy_grep_v_20.rb
@@ -0,0 +1,4 @@
+grep_data = (1..10).to_a * 1000
+N = 100
+enum = grep_data.lazy.grep_v(->(i){i > 2}).grep_v(->(i){i > 2})
+N.times {enum.each {}}
diff --git a/benchmark/enum_lazy_grep_v_50.rb b/benchmark/enum_lazy_grep_v_50.rb
new file mode 100644
index 0000000000..02ea4d4e71
--- /dev/null
+++ b/benchmark/enum_lazy_grep_v_50.rb
@@ -0,0 +1,4 @@
+grep_data = (1..10).to_a * 1000
+N = 100
+enum = grep_data.lazy.grep_v(->(i){i > 5}).grep_v(->(i){i > 5})
+N.times {enum.each {}}
diff --git a/benchmark/enum_lazy_uniq_100.rb b/benchmark/enum_lazy_uniq_100.rb
new file mode 100644
index 0000000000..2e6434d9c4
--- /dev/null
+++ b/benchmark/enum_lazy_uniq_100.rb
@@ -0,0 +1,4 @@
+uniq_data = (1..10_000).to_a
+N = 100
+enum = uniq_data.lazy.uniq {|i| i % 10000}.uniq {|i| i % 10000}
+N.times {enum.each {}}
diff --git a/benchmark/enum_lazy_uniq_20.rb b/benchmark/enum_lazy_uniq_20.rb
new file mode 100644
index 0000000000..75e6398fee
--- /dev/null
+++ b/benchmark/enum_lazy_uniq_20.rb
@@ -0,0 +1,4 @@
+uniq_data = (1..10_000).to_a
+N = 100
+enum = uniq_data.lazy.uniq {|i| i % 2000}.uniq {|i| i % 2000}
+N.times {enum.each {}}
diff --git a/benchmark/enum_lazy_uniq_50.rb b/benchmark/enum_lazy_uniq_50.rb
new file mode 100644
index 0000000000..59a39b78ff
--- /dev/null
+++ b/benchmark/enum_lazy_uniq_50.rb
@@ -0,0 +1,4 @@
+uniq_data = (1..10_000).to_a
+N = 100
+enum = uniq_data.lazy.uniq {|i| i % 5000}.uniq {|i| i % 5000}
+N.times {enum.each {}}
diff --git a/benchmark/enum_lazy_zip.yml b/benchmark/enum_lazy_zip.yml
new file mode 100644
index 0000000000..4566ff0261
--- /dev/null
+++ b/benchmark/enum_lazy_zip.yml
@@ -0,0 +1,22 @@
+prelude: |
+ a = (1..3).lazy
+ b = a.map {|x| x}
+
+benchmark:
+ first_ary: a.zip(["a", "b", "c"]).first
+ first_nonary: a.zip("a".."c").first
+ first_noarg: a.zip.first
+
+ take3_ary: a.zip(["a", "b", "c"]).take(3).force
+ take3_nonary: a.zip("a".."c").take(3).force
+ take3_noarg: a.zip.take(3).force
+
+ chain-first_ary: b.zip(["a", "b", "c"]).first
+ chain-first_nonary: b.zip("a".."c").first
+ chain-first_noarg: b.zip.first
+
+ chain-take3_ary: b.zip(["a", "b", "c"]).take(3).force
+ chain-take3_nonary: b.zip("a".."c").take(3).force
+ chain-take3_noarg: b.zip.take(3).force
+
+ block: a.zip("a".."c") {|x, y| [x, y]}
diff --git a/benchmark/enum_minmax.yml b/benchmark/enum_minmax.yml
new file mode 100644
index 0000000000..9d01731abb
--- /dev/null
+++ b/benchmark/enum_minmax.yml
@@ -0,0 +1,25 @@
+prelude: |
+ set2 = 2.times.to_a.shuffle.to_set
+ set10 = 10.times.to_a.shuffle.to_set
+ set100 = 100.times.to_a.shuffle.to_set
+ set1000 = 1000.times.to_a.shuffle.to_set
+ set10000 = 10000.times.to_a.shuffle.to_set
+
+benchmark:
+ set2.min: set2.min
+ set10.min: set10.min
+ set100.min: set100.min
+ set1000.min: set1000.min
+ set10000.min: set10000.min
+ set2.max: set2.max
+ set10.max: set10.max
+ set100.max: set100.max
+ set1000.max: set1000.max
+ set10000.max: set10000.max
+ set2.minmax: set2.minmax
+ set10.minmax: set10.minmax
+ set100.minmax: set100.minmax
+ set1000.minmax: set1000.minmax
+ set10000.minmax: set10000.minmax
+
+loop_count: 10000
diff --git a/benchmark/enum_sort.yml b/benchmark/enum_sort.yml
new file mode 100644
index 0000000000..6f26e748c6
--- /dev/null
+++ b/benchmark/enum_sort.yml
@@ -0,0 +1,15 @@
+prelude: |
+ set2 = 2.times.to_a.shuffle.to_set
+ set10 = 10.times.to_a.shuffle.to_set
+ set100 = 100.times.to_a.shuffle.to_set
+ set1000 = 1000.times.to_a.shuffle.to_set
+ set10000 = 10000.times.to_a.shuffle.to_set
+
+benchmark:
+ set2.sort_by: set2.sort_by { 0 }
+ set10.sort_by: set10.sort_by { 0 }
+ set100.sort_by: set100.sort_by { 0 }
+ set1000.sort_by: set1000.sort_by { 0 }
+ set10000.sort_by: set10000.sort_by { 0 }
+
+loop_count: 10000
diff --git a/benchmark/enum_sort_by.yml b/benchmark/enum_sort_by.yml
new file mode 100644
index 0000000000..d386353888
--- /dev/null
+++ b/benchmark/enum_sort_by.yml
@@ -0,0 +1,53 @@
+prelude: |
+ array_length = 2
+ fixnum_array2 = array_length.times.to_a.map {rand(10000)}
+ float_array2 = array_length.times.to_a.map {rand(10000.0).to_f}
+ string_array2 = array_length.times.to_a.map {"r" * rand(1..10000)}
+ mix_array2 = array_length.times.to_a.map {if rand(1..100) <= 50 then rand(1..10000).to_f else rand(1..10000) end}
+ all_zero_array2 =array_length.times.to_a.map {0}
+
+ array_length = 10
+ fixnum_array10 = array_length.times.to_a.map {rand(10000)}
+ float_array10 = array_length.times.to_a.map {rand(10000.0).to_f}
+ string_array10 = array_length.times.to_a.map {"r" * rand(1..10000)}
+ mix_array10 = array_length.times.to_a.map {if rand(1..100) <= 50 then rand(1..10000).to_f else rand(1..10000) end}
+ all_zero_array10 =array_length.times.to_a.map {0}
+
+ array_length = 1000
+ fixnum_array1000 = array_length.times.to_a.map {rand(10000)}
+ float_array1000 = array_length.times.to_a.map {rand(10000.0).to_f}
+ string_array1000 = array_length.times.to_a.map {"r" * rand(1..10000)}
+ mix_array1000 = array_length.times.to_a.map {if rand(1..100) <= 50 then rand(1..10000).to_f else rand(1..10000) end}
+ all_zero_array1000 =array_length.times.to_a.map {0}
+
+ array_length = 100000
+ fixnum_array100000 = array_length.times.to_a.map {rand(10000)}
+ float_array100000 = array_length.times.to_a.map {rand(10000.0).to_f}
+ string_array100000 = array_length.times.to_a.map {"r" * rand(1..10000)}
+ mix_array100000 = array_length.times.to_a.map {if rand(1..100) <= 50 then rand(1..10000).to_f else rand(1..10000) end}
+ all_zero_array100000 =array_length.times.to_a.map {0}
+
+benchmark:
+ fixnum_array2.sort_by: fixnum_array2.sort_by {|a| a}
+ float_array2.sort_by: float_array2.sort_by {|a| a}
+ string_length2.sort_by: string_array2.sort_by {|a| a.length}
+ mix_array2.sort_by: mix_array2.sort_by {|a| a}
+ all_zero2.sort_by: all_zero_array2.sort_by{|a| a}
+
+ fixnum_array10.sort_by: fixnum_array10.sort_by {|a| a}
+ float_array10.sort_by: float_array10.sort_by {|a| a}
+ string_length10.sort_by: string_array10.sort_by {|a| a.length}
+ mix_array10.sort_by: mix_array10.sort_by {|a| a}
+ all_zero10.sort_by: all_zero_array10.sort_by{|a| a}
+
+ fixnum_array1000.sort_by: fixnum_array1000.sort_by {|a| a}
+ float_array1000.sort_by: float_array1000.sort_by {|a| a}
+ string_length1000.sort_by: string_array1000.sort_by {|a| a.length}
+ mix_array1000.sort_by: mix_array1000.sort_by {|a| a}
+ all_zero1000.sort_by: all_zero_array1000.sort_by{|a| a}
+
+ fixnum_array100000.sort_by: fixnum_array100000.sort_by {|a| a}
+ float_array100000.sort_by: float_array100000.sort_by {|a| a}
+ string_length100000.sort_by: string_array100000.sort_by {|a| a.length}
+ mix_array100000.sort_by: mix_array100000.sort_by {|a| a}
+ all_zero100000.sort_by: all_zero_array100000.sort_by{|a| a}
diff --git a/benchmark/enum_tally.yml b/benchmark/enum_tally.yml
new file mode 100644
index 0000000000..edd2e040a0
--- /dev/null
+++ b/benchmark/enum_tally.yml
@@ -0,0 +1,4 @@
+prelude: |
+ list = ("aaa".."zzz").to_a*10
+benchmark:
+ tally: list.tally
diff --git a/benchmark/erb_escape_html.yml b/benchmark/erb_escape_html.yml
new file mode 100644
index 0000000000..ca28d756e7
--- /dev/null
+++ b/benchmark/erb_escape_html.yml
@@ -0,0 +1,31 @@
+prelude: |
+ # frozen_string_literal: true
+ require 'erb'
+benchmark:
+ - script: ERB::Util.html_escape("")
+ loop_count: 20000000
+ - script: ERB::Util.html_escape("abcde")
+ loop_count: 20000000
+ - script: ERB::Util.html_escape("abcd<")
+ loop_count: 20000000
+ - script: ERB::Util.html_escape("'&\"<>")
+ loop_count: 5000000
+ - prelude: long_no_escape = "abcde" * 300
+ script: ERB::Util.html_escape(long_no_escape)
+ loop_count: 1000000
+ - prelude: long_all_escape = "'&\"<>" * 10
+ script: ERB::Util.html_escape(long_all_escape)
+ loop_count: 1000000
+ - prelude: | # http://example.com/
+ example_html = <<~HTML
+ <body>
+ <div>
+ <h1>Example Domain</h1>
+ <p>This domain is established to be used for illustrative examples in documents. You may use this
+ domain in examples without prior coordination or asking for permission.</p>
+ <p><a href="http://www.iana.org/domains/example">More information...</a></p>
+ </div>
+ </body>
+ HTML
+ script: ERB::Util.html_escape(example_html)
+ loop_count: 1000000
diff --git a/benchmark/erb_render.yml b/benchmark/erb_render.yml
new file mode 100644
index 0000000000..15f6c3880b
--- /dev/null
+++ b/benchmark/erb_render.yml
@@ -0,0 +1,24 @@
+prelude: |
+ require 'erb'
+
+ data = <<erb
+ <html>
+ <head> <%= title %> </head>
+ <body>
+ <h1> <%= title %> </h1>
+ <p>
+ <%= content %>
+ </p>
+ </body>
+ </html>
+ erb
+
+ title = "hello world!"
+ content = "hello world!\n" * 10
+
+ src = "def self.render(title, content); #{ERB.new(data).src}; end"
+ mod = Module.new
+ mod.instance_eval(src, "(ERB)")
+benchmark:
+ erb_render: mod.render(title, content)
+loop_count: 1500000
diff --git a/benchmark/fiber_chain.yml b/benchmark/fiber_chain.yml
new file mode 100644
index 0000000000..a36c759f8e
--- /dev/null
+++ b/benchmark/fiber_chain.yml
@@ -0,0 +1,36 @@
+prelude: |
+ def make_link(previous)
+ Fiber.new do
+ while message = previous.resume
+ Fiber.yield(message)
+ end
+ end
+ end
+
+ def make_chain(length = 1000, &block)
+ chain = Fiber.new(&block)
+
+ (length - 1).times do
+ chain = make_link(chain)
+ end
+
+ return chain
+ end
+
+ message = "Hello World!"
+
+ chain = make_chain do
+ while true
+ Fiber.yield(message)
+ end
+ end
+benchmark:
+ make_chain: |
+ make_chain(100) do
+ while true
+ Fiber.yield(message)
+ end
+ end
+ resume_chain: |
+ chain.resume
+loop_count: 5000
diff --git a/benchmark/fiber_locals.yml b/benchmark/fiber_locals.yml
new file mode 100644
index 0000000000..8588686477
--- /dev/null
+++ b/benchmark/fiber_locals.yml
@@ -0,0 +1,8 @@
+prelude: |
+ th = Thread.current
+ th[:key] = :val
+benchmark:
+ key?: th.key?(:key)
+ []: th[:key]
+ keys: th.keys
+loop_count: 1_000_000
diff --git a/benchmark/file_chmod.rb b/benchmark/file_chmod.rb
new file mode 100644
index 0000000000..1cd4760c9d
--- /dev/null
+++ b/benchmark/file_chmod.rb
@@ -0,0 +1,9 @@
+# chmod file
+require 'tempfile'
+max = 200_000
+tmp = Tempfile.new('chmod')
+path = tmp.path
+max.times do
+ File.chmod(0777, path)
+end
+tmp.close!
diff --git a/benchmark/file_join.yml b/benchmark/file_join.yml
new file mode 100644
index 0000000000..845257cf1e
--- /dev/null
+++ b/benchmark/file_join.yml
@@ -0,0 +1,7 @@
+prelude: |
+ # frozen_string_literal: true
+benchmark:
+ two_strings: File.join(__FILE__, "path")
+ many_strings: File.join(__FILE__, "path", "a", "b", "c", "d")
+ array: File.join([__FILE__, "path", "a", "b", "c", "d"])
+ mixed: File.join(__FILE__, "path", "a", "b", ["c", "d"])
diff --git a/benchmark/file_rename.rb b/benchmark/file_rename.rb
new file mode 100644
index 0000000000..bbb44aebac
--- /dev/null
+++ b/benchmark/file_rename.rb
@@ -0,0 +1,11 @@
+# rename file
+require 'tempfile'
+
+max = 100_000
+tmp = [ Tempfile.new('rename-a'), Tempfile.new('rename-b') ]
+a, b = tmp.map { |x| x.path }
+tmp.each { |t| t.close } # Windows can't rename files without closing them
+max.times do
+ File.rename(a, b)
+ File.rename(b, a)
+end
diff --git a/benchmark/float_methods.yml b/benchmark/float_methods.yml
new file mode 100644
index 0000000000..56ea41effc
--- /dev/null
+++ b/benchmark/float_methods.yml
@@ -0,0 +1,14 @@
+prelude: |
+ flo = 4.2
+benchmark:
+ to_f: |
+ flo.to_f
+ abs: |
+ flo.abs
+ magnitude: |
+ flo.magnitude
+ -@: |
+ -flo
+ zero?: |
+ flo.zero?
+loop_count: 20000000
diff --git a/benchmark/float_neg_posi.yml b/benchmark/float_neg_posi.yml
new file mode 100644
index 0000000000..172db1bf6d
--- /dev/null
+++ b/benchmark/float_neg_posi.yml
@@ -0,0 +1,8 @@
+prelude: |
+ flo = 4.2
+benchmark:
+ negative?: |
+ flo.negative?
+ positive?: |
+ flo.positive?
+loop_count: 20000000
diff --git a/benchmark/float_to_s.yml b/benchmark/float_to_s.yml
new file mode 100644
index 0000000000..0abae5cdb8
--- /dev/null
+++ b/benchmark/float_to_s.yml
@@ -0,0 +1,7 @@
+prelude: |
+ floats = [*0.0.step(1.0, 0.0001)]
+
+benchmark:
+ to_s: floats.each {|f| f.to_s}
+
+loop_count: 1000
diff --git a/benchmark/gc/aobench.rb b/benchmark/gc/aobench.rb
index 2eed7abc83..275f58b924 100644
--- a/benchmark/gc/aobench.rb
+++ b/benchmark/gc/aobench.rb
@@ -1 +1 @@
-require_relative '../bm_app_aobench.rb'
+require_relative '../app_aobench'
diff --git a/benchmark/gc/binary_trees.rb b/benchmark/gc/binary_trees.rb
index af8ea722aa..83347cdd20 100644
--- a/benchmark/gc/binary_trees.rb
+++ b/benchmark/gc/binary_trees.rb
@@ -1 +1 @@
-require_relative '../bm_so_binary_trees.rb'
+require_relative '../so_binary_trees'
diff --git a/benchmark/gc/gcbench.rb b/benchmark/gc/gcbench.rb
index 09a404466a..23d0b91c6c 100644
--- a/benchmark/gc/gcbench.rb
+++ b/benchmark/gc/gcbench.rb
@@ -3,11 +3,12 @@ require 'pp'
require 'optparse'
$list = true
-$gcprof = true
+$gcprof = false
opt = OptionParser.new
opt.on('-q'){$list = false}
opt.on('-d'){$gcprof = false}
+opt.on('-p'){$gcprof = true}
opt.parse!(ARGV)
script = File.join(File.dirname(__FILE__), ARGV.shift)
diff --git a/benchmark/gc/pentomino.rb b/benchmark/gc/pentomino.rb
index 94ba74be89..8ebdff7d1d 100644
--- a/benchmark/gc/pentomino.rb
+++ b/benchmark/gc/pentomino.rb
@@ -1 +1 @@
-require_relative '../bm_app_pentomino.rb'
+require_relative '../app_pentomino'
diff --git a/benchmark/hash_aref_array.rb b/benchmark/hash_aref_array.rb
new file mode 100644
index 0000000000..ac7a683d95
--- /dev/null
+++ b/benchmark/hash_aref_array.rb
@@ -0,0 +1,5 @@
+h = {}
+arrays = (0..99).each_slice(10).to_a
+#STDERR.puts arrays.inspect
+arrays.each { |s| h[s] = s }
+200_000.times { arrays.each { |s| h[s] } }
diff --git a/benchmark/bm_hash_aref_dsym.rb b/benchmark/hash_aref_dsym.rb
index af4f8c36d4..af4f8c36d4 100644
--- a/benchmark/bm_hash_aref_dsym.rb
+++ b/benchmark/hash_aref_dsym.rb
diff --git a/benchmark/bm_hash_aref_dsym_long.rb b/benchmark/hash_aref_dsym_long.rb
index 9d7759379e..9d7759379e 100644
--- a/benchmark/bm_hash_aref_dsym_long.rb
+++ b/benchmark/hash_aref_dsym_long.rb
diff --git a/benchmark/bm_hash_aref_fix.rb b/benchmark/hash_aref_fix.rb
index 1346890582..1346890582 100644
--- a/benchmark/bm_hash_aref_fix.rb
+++ b/benchmark/hash_aref_fix.rb
diff --git a/benchmark/bm_hash_aref_flo.rb b/benchmark/hash_aref_flo.rb
index 2217274c82..2217274c82 100644
--- a/benchmark/bm_hash_aref_flo.rb
+++ b/benchmark/hash_aref_flo.rb
diff --git a/benchmark/bm_hash_aref_miss.rb b/benchmark/hash_aref_miss.rb
index b0913dd4bb..b0913dd4bb 100644
--- a/benchmark/bm_hash_aref_miss.rb
+++ b/benchmark/hash_aref_miss.rb
diff --git a/benchmark/bm_hash_aref_str.rb b/benchmark/hash_aref_str.rb
index 19439b061b..19439b061b 100644
--- a/benchmark/bm_hash_aref_str.rb
+++ b/benchmark/hash_aref_str.rb
diff --git a/benchmark/hash_aref_str_lit.yml b/benchmark/hash_aref_str_lit.yml
new file mode 100644
index 0000000000..ed8142bcf1
--- /dev/null
+++ b/benchmark/hash_aref_str_lit.yml
@@ -0,0 +1,20 @@
+prelude: |
+ # frozen_string_literal: true
+ hash = 10.times.to_h do |i|
+ [i, i]
+ end
+ dyn_sym = "dynamic_symbol".to_sym
+ binary = RubyVM::InstructionSequence.compile("# frozen_string_literal: true\n'iseq_load'").to_binary
+ iseq_literal_string = RubyVM::InstructionSequence.load_from_binary(binary).eval
+
+ hash[:some_symbol] = 1
+ hash[dyn_sym] = 2
+ hash["small"] = 3
+ hash["frozen_string_literal"] = 4
+ hash[iseq_literal_string] = 5
+benchmark:
+ symbol: hash[:some_symbol]
+ dyn_symbol: hash[dyn_sym]
+ small_lit: hash["small"]
+ frozen_lit: hash["frozen_string_literal"]
+ iseq_lit: hash[iseq_literal_string]
diff --git a/benchmark/bm_hash_aref_sym.rb b/benchmark/hash_aref_sym.rb
index f75d163fe6..f75d163fe6 100644
--- a/benchmark/bm_hash_aref_sym.rb
+++ b/benchmark/hash_aref_sym.rb
diff --git a/benchmark/bm_hash_aref_sym_long.rb b/benchmark/hash_aref_sym_long.rb
index 9dab8df7be..9dab8df7be 100644
--- a/benchmark/bm_hash_aref_sym_long.rb
+++ b/benchmark/hash_aref_sym_long.rb
diff --git a/benchmark/hash_defaults.yml b/benchmark/hash_defaults.yml
new file mode 100644
index 0000000000..833f10e1c7
--- /dev/null
+++ b/benchmark/hash_defaults.yml
@@ -0,0 +1,6 @@
+prelude: |
+ h = Hash.new { :foo }
+benchmark:
+ default_aref: h[1]
+ default_method: h.default(1)
+loop_count: 1000000
diff --git a/benchmark/hash_dup.yml b/benchmark/hash_dup.yml
new file mode 100644
index 0000000000..65f521ec94
--- /dev/null
+++ b/benchmark/hash_dup.yml
@@ -0,0 +1,8 @@
+prelude: |
+ small_hash = { a: 1 }
+ larger_hash = 20.times.map { |i| [('a'.ord + i).chr.to_sym, i] }.to_h
+
+benchmark:
+ dup_small: small_hash.dup
+ dup_larger: larger_hash.dup
+loop_count: 10000
diff --git a/benchmark/hash_first.yml b/benchmark/hash_first.yml
new file mode 100644
index 0000000000..c26df1a7ed
--- /dev/null
+++ b/benchmark/hash_first.yml
@@ -0,0 +1,11 @@
+prelude: |
+ hash1 = 1_000_000.times.to_h { [rand, true]}
+ hash2 = hash1.dup
+ hash2.keys[1..100_000].each { hash2.delete _1 }
+ hash2.delete hash2.first[0]
+
+benchmark:
+ hash1: hash1.first
+ hash2: hash2.first
+
+loop_count: 100_000
diff --git a/benchmark/bm_hash_flatten.rb b/benchmark/hash_flatten.rb
index e944aae9f2..e944aae9f2 100644
--- a/benchmark/bm_hash_flatten.rb
+++ b/benchmark/hash_flatten.rb
diff --git a/benchmark/bm_hash_ident_flo.rb b/benchmark/hash_ident_flo.rb
index 0c7edfed3e..0c7edfed3e 100644
--- a/benchmark/bm_hash_ident_flo.rb
+++ b/benchmark/hash_ident_flo.rb
diff --git a/benchmark/bm_hash_ident_num.rb b/benchmark/hash_ident_num.rb
index b226736c6f..b226736c6f 100644
--- a/benchmark/bm_hash_ident_num.rb
+++ b/benchmark/hash_ident_num.rb
diff --git a/benchmark/bm_hash_ident_obj.rb b/benchmark/hash_ident_obj.rb
index 4b3b58edec..4b3b58edec 100644
--- a/benchmark/bm_hash_ident_obj.rb
+++ b/benchmark/hash_ident_obj.rb
diff --git a/benchmark/bm_hash_ident_str.rb b/benchmark/hash_ident_str.rb
index 8582b38e31..8582b38e31 100644
--- a/benchmark/bm_hash_ident_str.rb
+++ b/benchmark/hash_ident_str.rb
diff --git a/benchmark/bm_hash_ident_sym.rb b/benchmark/hash_ident_sym.rb
index 4c81e3d28e..4c81e3d28e 100644
--- a/benchmark/bm_hash_ident_sym.rb
+++ b/benchmark/hash_ident_sym.rb
diff --git a/benchmark/hash_key.yml b/benchmark/hash_key.yml
new file mode 100644
index 0000000000..cab4cf9ca4
--- /dev/null
+++ b/benchmark/hash_key.yml
@@ -0,0 +1,5 @@
+prelude: |
+ obj = Object.new
+ hash = { obj => true }
+benchmark: hash.key?(obj)
+loop_count: 30000000
diff --git a/benchmark/bm_hash_keys.rb b/benchmark/hash_keys.rb
index 6863cd01f9..6863cd01f9 100644
--- a/benchmark/bm_hash_keys.rb
+++ b/benchmark/hash_keys.rb
diff --git a/benchmark/hash_literal_small2.rb b/benchmark/hash_literal_small2.rb
new file mode 100644
index 0000000000..c188529260
--- /dev/null
+++ b/benchmark/hash_literal_small2.rb
@@ -0,0 +1,3 @@
+# frozen_string_literal: true
+
+1_000_000.times.map { { "foo" => "bar", "bar" => "baz" } }
diff --git a/benchmark/hash_literal_small4.rb b/benchmark/hash_literal_small4.rb
new file mode 100644
index 0000000000..739f71b5b0
--- /dev/null
+++ b/benchmark/hash_literal_small4.rb
@@ -0,0 +1,3 @@
+# frozen_string_literal: true
+
+1_000_000.times.map { { "foo" => "bar", "bar" => "baz", "baz" => "lol", "lol" => "lgtm" } }
diff --git a/benchmark/hash_literal_small8.rb b/benchmark/hash_literal_small8.rb
new file mode 100644
index 0000000000..53d80af535
--- /dev/null
+++ b/benchmark/hash_literal_small8.rb
@@ -0,0 +1,3 @@
+# frozen_string_literal: true
+
+1_000_000.times.map { { "foo" => "bar", "bar" => "baz", "baz" => "lol", "lol" => "lgtm", "lgtm" => "nope", "nope" => "ok", "ok" => "again", "again" => "wait" } }
diff --git a/benchmark/hash_long.rb b/benchmark/hash_long.rb
new file mode 100644
index 0000000000..03d9109602
--- /dev/null
+++ b/benchmark/hash_long.rb
@@ -0,0 +1,4 @@
+k1 = "Ping Pong Ping Pong Ping Pong Ping Pong Ping Pong Ping Pong Ping Pong Ping Pong Ping Pong Ping Pong";
+k2 = "Pong Ping Pong Ping Pong Ping Pong Ping Pong Ping Pong Ping Pong Ping Pong Ping Pong Ping Pong Ping";
+h = {k1 => 0, k2 => 0};
+3000000.times{|i| k = i % 2 ? k2 : k1; h [k] = h[k] + 1}
diff --git a/benchmark/hash_new.yml b/benchmark/hash_new.yml
new file mode 100644
index 0000000000..9d8e34187f
--- /dev/null
+++ b/benchmark/hash_new.yml
@@ -0,0 +1,16 @@
+prelude: |
+ has_hash_with_capa = Hash.instance_method(:initialize).parameters.include?([:key, :capacity])
+ strings_1k = 1_000.times.map { |i| -i.to_s.freeze }
+ strings_100k = 100_000.times.map { |i| -i.to_s.freeze }
+benchmark:
+ new: Hash.new
+ new_with_capa_1k: |
+ h = has_hash_with_capa ? Hash.new(capacity: strings_1k.size) : {}
+ strings_1k.each do |x|
+ h[x] = true
+ end
+ new_with_capa_100k: |
+ h = has_hash_with_capa ? Hash.new(capacity: strings_100k.size) : {}
+ strings_100k.each do |x|
+ h[x] = true
+ end
diff --git a/benchmark/bm_hash_shift.rb b/benchmark/hash_shift.rb
index a645671a5b..a645671a5b 100644
--- a/benchmark/bm_hash_shift.rb
+++ b/benchmark/hash_shift.rb
diff --git a/benchmark/bm_hash_shift_u16.rb b/benchmark/hash_shift_u16.rb
index ec800d0342..ec800d0342 100644
--- a/benchmark/bm_hash_shift_u16.rb
+++ b/benchmark/hash_shift_u16.rb
diff --git a/benchmark/bm_hash_shift_u24.rb b/benchmark/hash_shift_u24.rb
index de4e0fa696..de4e0fa696 100644
--- a/benchmark/bm_hash_shift_u24.rb
+++ b/benchmark/hash_shift_u24.rb
diff --git a/benchmark/bm_hash_shift_u32.rb b/benchmark/hash_shift_u32.rb
index 656aa55583..656aa55583 100644
--- a/benchmark/bm_hash_shift_u32.rb
+++ b/benchmark/hash_shift_u32.rb
diff --git a/benchmark/hash_small2.rb b/benchmark/hash_small2.rb
new file mode 100644
index 0000000000..45485d9c71
--- /dev/null
+++ b/benchmark/hash_small2.rb
@@ -0,0 +1 @@
+1000000.times.map{|i| a={}; 2.times{|j| a[j]=j}; a}
diff --git a/benchmark/hash_small4.rb b/benchmark/hash_small4.rb
new file mode 100644
index 0000000000..acd4084334
--- /dev/null
+++ b/benchmark/hash_small4.rb
@@ -0,0 +1 @@
+1000000.times.map{|i| a={}; 4.times{|j| a[j]=j}; a}
diff --git a/benchmark/hash_small8.rb b/benchmark/hash_small8.rb
new file mode 100644
index 0000000000..9cffcc91b6
--- /dev/null
+++ b/benchmark/hash_small8.rb
@@ -0,0 +1 @@
+1000000.times.map{|i| a={}; 8.times{|j| a[j]=j}; a}
diff --git a/benchmark/bm_hash_to_proc.rb b/benchmark/hash_to_proc.rb
index 2b675bf509..2b675bf509 100644
--- a/benchmark/bm_hash_to_proc.rb
+++ b/benchmark/hash_to_proc.rb
diff --git a/benchmark/bm_hash_values.rb b/benchmark/hash_values.rb
index 069441302f..069441302f 100644
--- a/benchmark/bm_hash_values.rb
+++ b/benchmark/hash_values.rb
diff --git a/benchmark/int_quo.rb b/benchmark/int_quo.rb
new file mode 100644
index 0000000000..e22a3f8c30
--- /dev/null
+++ b/benchmark/int_quo.rb
@@ -0,0 +1 @@
+5000000.times { 42.quo(3) }
diff --git a/benchmark/io_close.yml b/benchmark/io_close.yml
new file mode 100644
index 0000000000..a552872884
--- /dev/null
+++ b/benchmark/io_close.yml
@@ -0,0 +1,13 @@
+prelude: |
+ ios = 1000.times.map do
+ 100.times.map{IO.pipe}
+ end
+benchmark:
+ # Close IO
+ io_close: |
+ # Process each batch of ios per iteration of the benchmark.
+ ios.pop.each do |r, w|
+ r.close
+ w.close
+ end
+loop_count: 100
diff --git a/benchmark/io_close_contended.yml b/benchmark/io_close_contended.yml
new file mode 100644
index 0000000000..1d9e4e0d0f
--- /dev/null
+++ b/benchmark/io_close_contended.yml
@@ -0,0 +1,21 @@
+prelude: |
+ ios = 100.times.map do
+ 10.times.map do
+ pipe = IO.pipe.tap do |r, w|
+ Thread.new do
+ r.read
+ rescue IOError
+ # Ignore
+ end
+ end
+ end
+ end
+benchmark:
+ # Close IO
+ io_close_contended: |
+ # Process each batch of ios per iteration of the benchmark.
+ ios.pop.each do |r, w|
+ r.close
+ w.close
+ end
+loop_count: 10
diff --git a/benchmark/io_copy_stream_write.rb b/benchmark/io_copy_stream_write.rb
new file mode 100644
index 0000000000..3fd87250a4
--- /dev/null
+++ b/benchmark/io_copy_stream_write.rb
@@ -0,0 +1,24 @@
+# The goal of this is to use a synthetic (non-IO) reader
+# to trigger the read/write loop of IO.copy_stream,
+# bypassing in-kernel mechanisms like sendfile for zero copy,
+# so we wrap the /dev/zero IO object:
+
+class Zero
+ def initialize
+ @n = 100000
+ @in = File.open('/dev/zero', 'rb')
+ end
+
+ def read(len, buf)
+ return if (@n -= 1) == 0
+ @in.read(len, buf)
+ end
+end
+
+begin
+ src = Zero.new
+ dst = File.open(IO::NULL, 'wb')
+ n = IO.copy_stream(src, dst)
+rescue Errno::ENOENT
+ # not *nix
+end if IO.respond_to?(:copy_stream) && IO.const_defined?(:NULL)
diff --git a/benchmark/io_copy_stream_write_socket.rb b/benchmark/io_copy_stream_write_socket.rb
new file mode 100644
index 0000000000..11f369bd0d
--- /dev/null
+++ b/benchmark/io_copy_stream_write_socket.rb
@@ -0,0 +1,35 @@
+# The goal of this is to use a synthetic (non-IO) reader
+# to trigger the read/write loop of IO.copy_stream,
+# bypassing in-kernel mechanisms like sendfile for zero copy,
+# so we wrap the /dev/zero IO object:
+class Zero
+ def initialize
+ @n = 100000
+ @in = File.open('/dev/zero', 'rb')
+ end
+
+ def read(len, buf)
+ return if (@n -= 1) == 0
+ @in.read(len, buf)
+ end
+end
+
+begin
+ require 'socket'
+ src = Zero.new
+ rd, wr = UNIXSocket.pair
+ pid = fork do
+ wr.close
+ buf = String.new
+ while rd.read(16384, buf)
+ end
+ end
+ rd.close
+ IO.copy_stream(src, wr)
+rescue Errno::ENOENT, NotImplementedError, NameError
+ # not *nix: missing /dev/zero, fork, or UNIXSocket
+rescue LoadError # no socket?
+ensure
+ wr.close if wr
+ Process.waitpid(pid) if pid
+end if IO.respond_to?(:copy_stream)
diff --git a/benchmark/bm_io_file_create.rb b/benchmark/io_file_create.rb
index 2f205c1333..2f205c1333 100644
--- a/benchmark/bm_io_file_create.rb
+++ b/benchmark/io_file_create.rb
diff --git a/benchmark/bm_io_file_read.rb b/benchmark/io_file_read.rb
index b9e796ed30..b9e796ed30 100644
--- a/benchmark/bm_io_file_read.rb
+++ b/benchmark/io_file_read.rb
diff --git a/benchmark/bm_io_file_write.rb b/benchmark/io_file_write.rb
index aa1be0e5fe..aa1be0e5fe 100644
--- a/benchmark/bm_io_file_write.rb
+++ b/benchmark/io_file_write.rb
diff --git a/benchmark/bm_io_nonblock_noex.rb b/benchmark/io_nonblock_noex.rb
index da9357fdc6..da9357fdc6 100644
--- a/benchmark/bm_io_nonblock_noex.rb
+++ b/benchmark/io_nonblock_noex.rb
diff --git a/benchmark/bm_io_nonblock_noex2.rb b/benchmark/io_nonblock_noex2.rb
index 56819d049b..56819d049b 100644
--- a/benchmark/bm_io_nonblock_noex2.rb
+++ b/benchmark/io_nonblock_noex2.rb
diff --git a/benchmark/io_pipe_rw.rb b/benchmark/io_pipe_rw.rb
new file mode 100644
index 0000000000..6862a8ae61
--- /dev/null
+++ b/benchmark/io_pipe_rw.rb
@@ -0,0 +1,13 @@
+# Measure uncontended GVL performance via read/write with 1:1 threading
+# If we switch to M:N threading, this will benchmark something else...
+r, w = IO.pipe
+src = '0'.freeze
+dst = String.new
+i = 0
+while i < 1_000_000
+ i += 1
+ w.write(src)
+ r.read(1, dst)
+end
+w.close
+r.close
diff --git a/benchmark/bm_io_select.rb b/benchmark/io_select.rb
index 19248daeb1..19248daeb1 100644
--- a/benchmark/bm_io_select.rb
+++ b/benchmark/io_select.rb
diff --git a/benchmark/bm_io_select2.rb b/benchmark/io_select2.rb
index 10e37d71b2..10e37d71b2 100644
--- a/benchmark/bm_io_select2.rb
+++ b/benchmark/io_select2.rb
diff --git a/benchmark/bm_io_select3.rb b/benchmark/io_select3.rb
index 7d0ba1f092..7d0ba1f092 100644
--- a/benchmark/bm_io_select3.rb
+++ b/benchmark/io_select3.rb
diff --git a/benchmark/io_write.rb b/benchmark/io_write.rb
new file mode 100644
index 0000000000..cdb409948b
--- /dev/null
+++ b/benchmark/io_write.rb
@@ -0,0 +1,22 @@
+#!/usr/bin/env ruby
+
+require 'benchmark'
+
+i, o = IO.pipe
+o.sync = true
+
+DOT = ".".freeze
+
+chunks = 100_000.times.collect{DOT}
+
+thread = Thread.new do
+ while i.read(1024)
+ end
+end
+
+100.times do
+ o.write(*chunks)
+end
+
+o.close
+thread.join
diff --git a/benchmark/irb_color.yml b/benchmark/irb_color.yml
new file mode 100644
index 0000000000..ebdc8d7e8b
--- /dev/null
+++ b/benchmark/irb_color.yml
@@ -0,0 +1,13 @@
+prelude: |
+ require 'irb/color'
+ code = <<~'CODE'
+ def self.foo # bar
+ :"erb #{ERB.new("<%= self %>", trim_mode: ?-).result}"
+ end
+ CODE
+benchmark:
+ irb_color_complete: |
+ IRB::Color.colorize_code(code, complete: true)
+ irb_color_incomplete: |
+ IRB::Color.colorize_code(code, complete: false)
+loop_count: 2000000
diff --git a/benchmark/irb_exec.yml b/benchmark/irb_exec.yml
new file mode 100644
index 0000000000..28933f8b38
--- /dev/null
+++ b/benchmark/irb_exec.yml
@@ -0,0 +1,10 @@
+prelude: |
+ # frozen_string_literal: true
+ require 'rbconfig'
+ irb_f = [File.join(File.dirname(RbConfig.ruby), 'irb'), '-f']
+benchmark:
+ irb_exec: |
+ IO.popen(irb_f, 'w') do |io|
+ io.write('exit')
+ end
+loop_count: 30
diff --git a/benchmark/iseq_load_from_binary.yml b/benchmark/iseq_load_from_binary.yml
new file mode 100644
index 0000000000..7e9d73bdd4
--- /dev/null
+++ b/benchmark/iseq_load_from_binary.yml
@@ -0,0 +1,25 @@
+prelude: |
+ symbol = RubyVM::InstructionSequence.compile(":foo; :bar; :baz; :egg; :spam").to_binary
+
+ define_method = RubyVM::InstructionSequence.compile(%{
+ def foo; end
+ def bar; end
+ def baz; end
+ def egg; end
+ def spam; end
+ }).to_binary
+
+ all = RubyVM::InstructionSequence.compile(%{
+ module Foo; def foo; :foo; end; end
+ module Bar; def bar; :bar; end; end
+ module Baz; def baz; :baz; end; end
+ class Egg; def egg; :egg; end; end
+ class Spaml; def spam; :spam; end; end
+ }).to_binary
+
+benchmark:
+ symbol: RubyVM::InstructionSequence.load_from_binary(symbol)
+ define_method: RubyVM::InstructionSequence.load_from_binary(define_method)
+ all: RubyVM::InstructionSequence.load_from_binary(all)
+
+loop_count: 100_000
diff --git a/benchmark/ivar_extend.yml b/benchmark/ivar_extend.yml
new file mode 100644
index 0000000000..eb9ee923f5
--- /dev/null
+++ b/benchmark/ivar_extend.yml
@@ -0,0 +1,23 @@
+prelude: |
+ class Embedded
+ def initialize
+ @a = 1
+ @b = 1
+ @c = 1
+ end
+ end
+
+ class Extended
+ def initialize
+ @a = 1
+ @b = 1
+ @c = 1
+ @d = 1
+ @e = 1
+ @f = 1
+ end
+ end
+benchmark:
+ embedded: Embedded.new
+ extended: Extended.new
+loop_count: 20_000_000
diff --git a/benchmark/kernel_clone.yml b/benchmark/kernel_clone.yml
new file mode 100644
index 0000000000..069b23abcd
--- /dev/null
+++ b/benchmark/kernel_clone.yml
@@ -0,0 +1,6 @@
+prelude: "object = Object.new"
+benchmark:
+ clone: "object.clone"
+ clone_true: "object.clone(freeze: true)"
+ clone_false: "object.clone(freeze: false)"
+loop_count: 10000
diff --git a/benchmark/kernel_float.yml b/benchmark/kernel_float.yml
new file mode 100644
index 0000000000..215f6750fc
--- /dev/null
+++ b/benchmark/kernel_float.yml
@@ -0,0 +1,5 @@
+benchmark:
+ float: "Float(42)"
+ float_true: "Float(42, exception: true)"
+ float_false: "Float(42, exception: false)"
+loop_count: 10000
diff --git a/benchmark/kernel_tap.yml b/benchmark/kernel_tap.yml
new file mode 100644
index 0000000000..4dcbb31b4d
--- /dev/null
+++ b/benchmark/kernel_tap.yml
@@ -0,0 +1,6 @@
+prelude: |
+ obj = Object.new
+ x = nil
+benchmark:
+ kernel_tap: obj.tap { |o| x = o }
+loop_count: 20000000
diff --git a/benchmark/kernel_then.yml b/benchmark/kernel_then.yml
new file mode 100644
index 0000000000..85f7341e33
--- /dev/null
+++ b/benchmark/kernel_then.yml
@@ -0,0 +1,6 @@
+benchmark:
+ kernel_then: 1.then { |i| i + 1 }
+ kernel_then_enum: 1.then
+ kernel_yield_self: 1.yield_self { |i| i + 1 }
+ kernel_yield_self_enum: 1.yield_self
+loop_count: 20000000
diff --git a/benchmark/keyword_arguments.yml b/benchmark/keyword_arguments.yml
new file mode 100644
index 0000000000..fce6bce0b8
--- /dev/null
+++ b/benchmark/keyword_arguments.yml
@@ -0,0 +1,13 @@
+prelude: |
+ h = {a: 1}
+ def kw(a: 1) a end
+ def kws(**kw) kw end
+benchmark:
+ kw_to_kw: "kw(a: 1)"
+ kw_splat_to_kw: "kw(**h)"
+ kw_to_kw_splat: "kws(a: 1)"
+ kw_splat_to_kw_splat: "kws(**h)"
+ kw_and_splat_to_kw: "kw(a: 1, **h)"
+ kw_splats_to_kw: "kw(**h, **h)"
+ kw_and_splat_to_kw_splat: "kws(a: 1, **h)"
+ kw_splats_to_kw_splat: "kws(**h, **h)"
diff --git a/benchmark/lib/benchmark_driver/output/driver.rb b/benchmark/lib/benchmark_driver/output/driver.rb
new file mode 100644
index 0000000000..d22236e9fb
--- /dev/null
+++ b/benchmark/lib/benchmark_driver/output/driver.rb
@@ -0,0 +1,36 @@
+require 'benchmark_driver/output/simple'
+
+# This replicates the legacy benchmark/driver.rb behavior.
+class BenchmarkDriver::Output::Driver < BenchmarkDriver::Output::Simple
+ def initialize(*)
+ super
+ @stdout = $stdout
+ @strio = StringIO.new
+ $stdout = IOMultiplexer.new(@stdout, @strio)
+ end
+
+ def with_benchmark(*)
+ super
+ ensure
+ logfile = "bmlog-#{Time.now.strftime('%Y%m%d-%H%M%S')}.#{$$}.log"
+ puts "\nLog file: #{logfile}"
+
+ $stdout = @stdout
+ File.write(logfile, @strio.tap(&:rewind).read)
+ end
+
+ class IOMultiplexer
+ def initialize(io1, io2)
+ @io1 = io1
+ @io2 = io2
+ end
+
+ [:write, :sync, :sync=, :puts, :print, :flush].each do |method|
+ define_method(method) do |*args|
+ @io1.send(method, *args)
+ @io2.send(method, *args)
+ end
+ end
+ end
+ private_constant :IOMultiplexer
+end
diff --git a/benchmark/lib/benchmark_driver/runner/cstime.rb b/benchmark/lib/benchmark_driver/runner/cstime.rb
new file mode 100644
index 0000000000..3c3453e527
--- /dev/null
+++ b/benchmark/lib/benchmark_driver/runner/cstime.rb
@@ -0,0 +1,22 @@
+require 'benchmark_driver/runner/total'
+
+class BenchmarkDriver::Runner::Cstime < BenchmarkDriver::Runner::Total
+ METRIC = BenchmarkDriver::Metric.new(name: 'cstime', unit: 's', larger_better: false)
+
+ # JobParser returns this, `BenchmarkDriver::Runner.runner_for` searches "*::Job"
+ Job = Class.new(BenchmarkDriver::DefaultJob)
+ # Dynamically fetched and used by `BenchmarkDriver::JobParser.parse`
+ JobParser = BenchmarkDriver::DefaultJobParser.for(klass: Job, metrics: [METRIC])
+
+ private
+
+ # Overriding BenchmarkDriver::Runner::Total#metric
+ def metric
+ METRIC
+ end
+
+ # Overriding BenchmarkDriver::Runner::Total#target
+ def target
+ :cstime
+ end
+end
diff --git a/benchmark/lib/benchmark_driver/runner/cutime.rb b/benchmark/lib/benchmark_driver/runner/cutime.rb
new file mode 100644
index 0000000000..e139962ef2
--- /dev/null
+++ b/benchmark/lib/benchmark_driver/runner/cutime.rb
@@ -0,0 +1,22 @@
+require 'benchmark_driver/runner/total'
+
+class BenchmarkDriver::Runner::Cutime < BenchmarkDriver::Runner::Total
+ METRIC = BenchmarkDriver::Metric.new(name: 'cutime', unit: 's', larger_better: false)
+
+ # JobParser returns this, `BenchmarkDriver::Runner.runner_for` searches "*::Job"
+ Job = Class.new(BenchmarkDriver::DefaultJob)
+ # Dynamically fetched and used by `BenchmarkDriver::JobParser.parse`
+ JobParser = BenchmarkDriver::DefaultJobParser.for(klass: Job, metrics: [METRIC])
+
+ private
+
+ # Overriding BenchmarkDriver::Runner::Total#metric
+ def metric
+ METRIC
+ end
+
+ # Overriding BenchmarkDriver::Runner::Total#target
+ def target
+ :cutime
+ end
+end
diff --git a/benchmark/lib/benchmark_driver/runner/peak.rb b/benchmark/lib/benchmark_driver/runner/peak.rb
new file mode 100644
index 0000000000..d04f2e51ff
--- /dev/null
+++ b/benchmark/lib/benchmark_driver/runner/peak.rb
@@ -0,0 +1,151 @@
+require 'benchmark_driver/struct'
+require 'benchmark_driver/metric'
+require 'benchmark_driver/default_job'
+require 'benchmark_driver/default_job_parser'
+require 'tempfile'
+
+class BenchmarkDriver::Runner::Peak
+ METRIC = BenchmarkDriver::Metric.new(
+ name: 'Peak memory usage', unit: 'bytes', larger_better: false, worse_word: 'larger',
+ )
+
+ # JobParser returns this, `BenchmarkDriver::Runner.runner_for` searches "*::Job"
+ Job = Class.new(BenchmarkDriver::DefaultJob)
+ # Dynamically fetched and used by `BenchmarkDriver::JobParser.parse`
+ JobParser = BenchmarkDriver::DefaultJobParser.for(klass: Job, metrics: [METRIC])
+
+ # @param [BenchmarkDriver::Config::RunnerConfig] config
+ # @param [BenchmarkDriver::Output] output
+ # @param [BenchmarkDriver::Context] contexts
+ def initialize(config:, output:, contexts:)
+ @config = config
+ @output = output
+ @contexts = contexts
+ end
+
+ # This method is dynamically called by `BenchmarkDriver::JobRunner.run`
+ # @param [Array<BenchmarkDriver::Runner::Peak::Job>] jobs
+ def run(jobs)
+ if jobs.any? { |job| job.loop_count.nil? }
+ jobs = jobs.map do |job|
+ job.loop_count ? job : Job.new(job.to_h.merge(loop_count: 1))
+ end
+ end
+
+ @output.with_benchmark do
+ jobs.each do |job|
+ @output.with_job(name: job.name) do
+ job.runnable_contexts(@contexts).each do |context|
+ value = BenchmarkDriver::Repeater.with_repeat(config: @config, larger_better: false) do
+ run_benchmark(job, context: context)
+ end
+ @output.with_context(name: context.name, executable: context.executable, gems: context.gems, prelude: context.prelude) do
+ @output.report(values: { metric => value }, loop_count: job.loop_count)
+ end
+ end
+ end
+ end
+ end
+ end
+
+ private
+
+ # @param [BenchmarkDriver::Runner::Ips::Job] job - loop_count is not nil
+ # @param [BenchmarkDriver::Context] context
+ # @return [BenchmarkDriver::Metrics]
+ def run_benchmark(job, context:)
+ benchmark = BenchmarkScript.new(
+ preludes: [context.prelude, job.prelude],
+ script: job.script,
+ teardown: job.teardown,
+ loop_count: job.loop_count,
+ )
+
+ memory_status = File.expand_path('../../../../tool/lib/memory_status', __dir__)
+ Tempfile.open(['benchmark_driver-', '.rb']) do |f|
+ with_script(benchmark.render) do |path|
+ output = IO.popen([*context.executable.command, path, f.path, target, memory_status], &:read)
+ if $?.success?
+ Integer(f.read)
+ else
+ $stdout.print(output)
+ BenchmarkDriver::Result::ERROR
+ end
+ end
+ end
+ end
+
+ # Overridden by BenchmarkDriver::Runner::Size
+ def target
+ 'peak'
+ end
+
+ # Overridden by BenchmarkDriver::Runner::Size
+ def metric
+ METRIC
+ end
+
+ def with_script(script)
+ if @config.verbose >= 2
+ sep = '-' * 30
+ $stdout.puts "\n\n#{sep}[Script begin]#{sep}\n#{script}#{sep}[Script end]#{sep}\n\n"
+ end
+
+ Tempfile.open(['benchmark_driver-', '.rb']) do |f|
+ f.puts script
+ f.close
+ return yield(f.path)
+ end
+ end
+
+ # @param [String] prelude
+ # @param [String] script
+ # @param [String] teardown
+ # @param [Integer] loop_count
+ BenchmarkScript = ::BenchmarkDriver::Struct.new(:preludes, :script, :teardown, :loop_count) do
+ def render
+ prelude = preludes.reject(&:nil?).reject(&:empty?).join("\n")
+ <<-RUBY
+#{prelude}
+#{while_loop(script, loop_count)}
+#{teardown}
+
+result_file, target, memory_status = ARGV
+require_relative memory_status
+
+ms = Memory::Status.new
+case target.to_sym
+when :peak
+ key = ms.respond_to?(:hwm) ? :hwm : :peak
+when :size
+ key = ms.respond_to?(:rss) ? :rss : :size
+else
+ raise('unexpected target: ' + target)
+end
+
+File.write(result_file, ms[key])
+ RUBY
+ end
+
+ private
+
+ def while_loop(content, times)
+ if !times.is_a?(Integer) || times <= 0
+ raise ArgumentError.new("Unexpected times: #{times.inspect}")
+ end
+
+ if times > 1
+ <<-RUBY
+__bmdv_i = 0
+while __bmdv_i < #{times}
+ #{content}
+ __bmdv_i += 1
+end
+ RUBY
+ else
+ content
+ end
+ end
+ end
+ private_constant :BenchmarkScript
+end
diff --git a/benchmark/lib/benchmark_driver/runner/ractor.rb b/benchmark/lib/benchmark_driver/runner/ractor.rb
new file mode 100644
index 0000000000..fd9c2dd4db
--- /dev/null
+++ b/benchmark/lib/benchmark_driver/runner/ractor.rb
@@ -0,0 +1,122 @@
+require 'erb'
+
+# A runner to measure performance *inside* Ractor
+class BenchmarkDriver::Runner::Ractor < BenchmarkDriver::Runner::Ips
+ # JobParser returns this, `BenchmarkDriver::Runner.runner_for` searches "*::Job"
+ Job = Class.new(BenchmarkDriver::DefaultJob) do
+ attr_accessor :ractor
+ end
+
+ # Dynamically fetched and used by `BenchmarkDriver::JobParser.parse`
+ JobParser = BenchmarkDriver::DefaultJobParser.for(klass: Job, metrics: [METRIC]).extend(Module.new{
+ def parse(ractor: 1, **kwargs)
+ super(**kwargs).each do |job|
+ job.ractor = ractor
+ end
+ end
+ })
+
+ private
+
+ unless private_instance_methods.include?(:run_benchmark)
+ raise "#run_benchmark is no longer defined in BenchmarkDriver::Runner::Ips"
+ end
+
+ # @param [BenchmarkDriver::Runner::Ips::Job] job - loop_count is not nil
+ # @param [BenchmarkDriver::Context] context
+ # @return [BenchmarkDriver::Metrics]
+ def run_benchmark(job, context:)
+ benchmark = BenchmarkScript.new(
+ preludes: [context.prelude, job.prelude],
+ script: job.script,
+ teardown: job.teardown,
+ loop_count: job.loop_count,
+ )
+
+ results = job.ractor.times.map do
+ Tempfile.open('benchmark_driver_result')
+ end
+ duration = with_script(benchmark.render(results: results.map(&:path))) do |path|
+ success = execute(*context.executable.command, path, exception: false)
+ if success && ((value = results.map { |f| Float(f.read) }.max) > 0)
+ value
+ else
+ BenchmarkDriver::Result::ERROR
+ end
+ end
+ results.each(&:close)
+
+ value_duration(
+ loop_count: job.loop_count,
+ duration: duration,
+ )
+ end
+
+ # @param [String] prelude
+ # @param [String] script
+ # @param [String] teardown
+ # @param [Integer] loop_count
+ BenchmarkScript = ::BenchmarkDriver::Struct.new(:preludes, :script, :teardown, :loop_count) do
+ # @param [String] result - A file to write result
+ def render(results:)
+ prelude = preludes.reject(&:nil?).reject(&:empty?).join("\n")
+ ERB.new(<<-RUBY).result_with_hash(results: results)
+Warning[:experimental] = false
+# shareable-constant-value: experimental_everything
+#{prelude}
+
+if #{loop_count} == 1
+ __bmdv_loop_before = 0
+ __bmdv_loop_after = 0
+else
+ __bmdv_loop_before = Time.new
+ #{while_loop('', loop_count, id: 0)}
+ __bmdv_loop_after = Time.new
+end
+
+__bmdv_ractors = []
+<% results.size.times do %>
+__bmdv_ractors << Ractor.new(__bmdv_loop_after - __bmdv_loop_before) { |__bmdv_loop_time|
+ __bmdv_time = Time
+ __bmdv_script_before = __bmdv_time.new
+ #{while_loop(script, loop_count, id: 1)}
+ __bmdv_script_after = __bmdv_time.new
+
+ (__bmdv_script_after - __bmdv_script_before) - __bmdv_loop_time
+}
+<% end %>
+
+# Wait for all Ractors before executing code to write results
+__bmdv_ractors.map!(&:value)
+
+<% results.each do |result| %>
+File.write(<%= result.dump %>, __bmdv_ractors.shift)
+<% end %>
+
+#{teardown}
+ RUBY
+ end
+
+ private
+
+ # id is to prevent:
+ # can not isolate a Proc because it accesses outer variables (__bmdv_i)
+ def while_loop(content, times, id:)
+ if !times.is_a?(Integer) || times <= 0
+ raise ArgumentError.new("Unexpected times: #{times.inspect}")
+ elsif times == 1
+ return content
+ end
+
+ # TODO: execute in batch
+ <<-RUBY
+__bmdv_i#{id} = 0
+while __bmdv_i#{id} < #{times}
+ #{content}
+ __bmdv_i#{id} += 1
+end
+ RUBY
+ end
+ end
+ private_constant :BenchmarkScript
+end
diff --git a/benchmark/lib/benchmark_driver/runner/size.rb b/benchmark/lib/benchmark_driver/runner/size.rb
new file mode 100644
index 0000000000..1b31f901c7
--- /dev/null
+++ b/benchmark/lib/benchmark_driver/runner/size.rb
@@ -0,0 +1,25 @@
+require 'benchmark_driver/runner/peak'
+
+# Actually the same as BenchmarkDriver::Runner::Memory
+class BenchmarkDriver::Runner::Size < BenchmarkDriver::Runner::Peak
+ METRIC = BenchmarkDriver::Metric.new(
+ name: 'Max resident set size', unit: 'bytes', larger_better: false, worse_word: 'larger',
+ )
+
+ # JobParser returns this, `BenchmarkDriver::Runner.runner_for` searches "*::Job"
+ Job = Class.new(BenchmarkDriver::DefaultJob)
+ # Dynamically fetched and used by `BenchmarkDriver::JobParser.parse`
+ JobParser = BenchmarkDriver::DefaultJobParser.for(klass: Job, metrics: [METRIC])
+
+ private
+
+ # Overriding BenchmarkDriver::Runner::Peak#metric
+ def metric
+ METRIC
+ end
+
+ # Overriding BenchmarkDriver::Runner::Peak#target
+ def target
+ 'size'
+ end
+end
diff --git a/benchmark/lib/benchmark_driver/runner/stime.rb b/benchmark/lib/benchmark_driver/runner/stime.rb
new file mode 100644
index 0000000000..4577fb0bf8
--- /dev/null
+++ b/benchmark/lib/benchmark_driver/runner/stime.rb
@@ -0,0 +1,22 @@
+require 'benchmark_driver/runner/total'
+
+class BenchmarkDriver::Runner::Stime < BenchmarkDriver::Runner::Total
+ METRIC = BenchmarkDriver::Metric.new(name: 'stime', unit: 's', larger_better: false)
+
+ # JobParser returns this, `BenchmarkDriver::Runner.runner_for` searches "*::Job"
+ Job = Class.new(BenchmarkDriver::DefaultJob)
+ # Dynamically fetched and used by `BenchmarkDriver::JobParser.parse`
+ JobParser = BenchmarkDriver::DefaultJobParser.for(klass: Job, metrics: [METRIC])
+
+ private
+
+ # Overriding BenchmarkDriver::Runner::Total#metric
+ def metric
+ METRIC
+ end
+
+ # Overriding BenchmarkDriver::Runner::Total#target
+ def target
+ :stime
+ end
+end
diff --git a/benchmark/lib/benchmark_driver/runner/total.rb b/benchmark/lib/benchmark_driver/runner/total.rb
new file mode 100644
index 0000000000..64dc14f84e
--- /dev/null
+++ b/benchmark/lib/benchmark_driver/runner/total.rb
@@ -0,0 +1,137 @@
+require 'benchmark_driver/struct'
+require 'benchmark_driver/metric'
+require 'benchmark_driver/default_job'
+require 'benchmark_driver/default_job_parser'
+require 'tempfile'
+
+class BenchmarkDriver::Runner::Total
+ METRIC = BenchmarkDriver::Metric.new(name: 'Total time', unit: 's', larger_better: false)
+
+ # JobParser returns this, `BenchmarkDriver::Runner.runner_for` searches "*::Job"
+ Job = Class.new(BenchmarkDriver::DefaultJob)
+ # Dynamically fetched and used by `BenchmarkDriver::JobParser.parse`
+ JobParser = BenchmarkDriver::DefaultJobParser.for(klass: Job, metrics: [METRIC])
+
+ # @param [BenchmarkDriver::Config::RunnerConfig] config
+ # @param [BenchmarkDriver::Output] output
+ # @param [BenchmarkDriver::Context] contexts
+ def initialize(config:, output:, contexts:)
+ @config = config
+ @output = output
+ @contexts = contexts
+ end
+
+ # This method is dynamically called by `BenchmarkDriver::JobRunner.run`
+ # @param [Array<BenchmarkDriver::Runner::Total::Job>] jobs
+ def run(jobs)
+ if jobs.any? { |job| job.loop_count.nil? }
+ raise 'missing loop_count is not supported in Ruby repository'
+ end
+
+ @output.with_benchmark do
+ jobs.each do |job|
+ @output.with_job(name: job.name) do
+ job.runnable_contexts(@contexts).each do |context|
+ duration = BenchmarkDriver::Repeater.with_repeat(config: @config, larger_better: false) do
+ run_benchmark(job, context: context)
+ end
+ @output.with_context(name: context.name, executable: context.executable, gems: context.gems, prelude: context.prelude) do
+ @output.report(values: { metric => duration }, duration: duration, loop_count: job.loop_count)
+ end
+ end
+ end
+ end
+ end
+ end
+
+ private
+
+ # @param [BenchmarkDriver::Runner::Ips::Job] job - loop_count is not nil
+ # @param [BenchmarkDriver::Context] context
+ # @return [BenchmarkDriver::Metrics]
+ def run_benchmark(job, context:)
+ benchmark = BenchmarkScript.new(
+ preludes: [context.prelude, job.prelude],
+ script: job.script,
+ teardown: job.teardown,
+ loop_count: job.loop_count,
+ )
+
+ Tempfile.open(['benchmark_driver-', '.rb']) do |f|
+ with_script(benchmark.render(result: f.path, target: target)) do |path|
+ IO.popen([*context.executable.command, path], &:read) # TODO: print stdout if verbose=2
+ if $?.success?
+ Float(f.read)
+ else
+ BenchmarkDriver::Result::ERROR
+ end
+ end
+ end
+ end
+
+ # This method is overridden by some subclasses
+ def metric
+ METRIC
+ end
+
+ # This method is overridden by some subclasses
+ def target
+ :total
+ end
+
+ def with_script(script)
+ if @config.verbose >= 2
+ sep = '-' * 30
+ $stdout.puts "\n\n#{sep}[Script begin]#{sep}\n#{script}#{sep}[Script end]#{sep}\n\n"
+ end
+
+ Tempfile.open(['benchmark_driver-', '.rb']) do |f|
+ f.puts script
+ f.close
+ return yield(f.path)
+ end
+ end
+
+ # @param [String] prelude
+ # @param [String] script
+ # @param [String] teardown
+ # @param [Integer] loop_count
+ BenchmarkScript = ::BenchmarkDriver::Struct.new(:preludes, :script, :teardown, :loop_count) do
+ # @param [String] result - A file to write result
+ def render(result:, target:)
+ prelude = preludes.reject(&:nil?).reject(&:empty?).join("\n")
+ <<-RUBY
+#{prelude}
+
+require 'benchmark'
+__bmdv_result = Benchmark.measure {
+ #{while_loop(script, loop_count)}
+}
+
+#{teardown}
+
+File.write(#{result.dump}, __bmdv_result.#{target})
+ RUBY
+ end
+
+ private
+
+ def while_loop(content, times)
+ if !times.is_a?(Integer) || times <= 0
+ raise ArgumentError.new("Unexpected times: #{times.inspect}")
+ elsif times == 1
+ return content
+ end
+
+ # TODO: execute in batch
+ <<-RUBY
+__bmdv_i = 0
+while __bmdv_i < #{times}
+ #{content}
+ __bmdv_i += 1
+end
+ RUBY
+ end
+ end
+ private_constant :BenchmarkScript
+end
diff --git a/benchmark/lib/benchmark_driver/runner/utime.rb b/benchmark/lib/benchmark_driver/runner/utime.rb
new file mode 100644
index 0000000000..b61d83a188
--- /dev/null
+++ b/benchmark/lib/benchmark_driver/runner/utime.rb
@@ -0,0 +1,22 @@
+require 'benchmark_driver/runner/total'
+
+class BenchmarkDriver::Runner::Utime < BenchmarkDriver::Runner::Total
+ METRIC = BenchmarkDriver::Metric.new(name: 'utime', unit: 's', larger_better: false)
+
+ # JobParser returns this, `BenchmarkDriver::Runner.runner_for` searches "*::Job"
+ Job = Class.new(BenchmarkDriver::DefaultJob)
+ # Dynamically fetched and used by `BenchmarkDriver::JobParser.parse`
+ JobParser = BenchmarkDriver::DefaultJobParser.for(klass: Job, metrics: [METRIC])
+
+ private
+
+ # Overriding BenchmarkDriver::Runner::Total#metric
+ def metric
+ METRIC
+ end
+
+ # Overriding BenchmarkDriver::Runner::Total#target
+ def target
+ :utime
+ end
+end
diff --git a/benchmark/lib/load.rb b/benchmark/lib/load.rb
new file mode 100644
index 0000000000..31b770c484
--- /dev/null
+++ b/benchmark/lib/load.rb
@@ -0,0 +1,18 @@
+# How to use this file:
+# 1. write a `$(srcdir)/test.rb` like:
+=begin
+require_relative 'benchmark/lib/load'
+
+Benchmark.driver(repeat_count: 5){|x|
+ x.executable name: 'clean-miniruby', command: %w'../clean-trunk/miniruby'
+ x.executable name: 'modif-miniruby', command: %w'./miniruby'
+
+ x.report %q{
+ h = {a: 1, b: 2, c: 3, d: 4}
+ }
+}
+=end
+#
+# 2. `make run`
+$:.unshift(File.join(__dir__, '../benchmark-driver/lib'))
+require 'benchmark_driver'
diff --git a/benchmark/loop_each.yml b/benchmark/loop_each.yml
new file mode 100644
index 0000000000..1c757185a8
--- /dev/null
+++ b/benchmark/loop_each.yml
@@ -0,0 +1,4 @@
+prelude: |
+ arr = [nil] * 30_000_000
+benchmark:
+ loop_each: arr.each{|e|}
diff --git a/benchmark/bm_loop_for.rb b/benchmark/loop_for.rb
index 0fc4cc1511..0fc4cc1511 100644
--- a/benchmark/bm_loop_for.rb
+++ b/benchmark/loop_for.rb
diff --git a/benchmark/loop_generator.rb b/benchmark/loop_generator.rb
new file mode 100644
index 0000000000..6a3194b670
--- /dev/null
+++ b/benchmark/loop_generator.rb
@@ -0,0 +1,14 @@
+max = 6000000
+
+if defined? Fiber
+ gen = (1..max).each
+ loop do
+ gen.next
+ end
+else
+ require 'generator'
+ gen = Generator.new((0..max))
+ while gen.next?
+ gen.next
+ end
+end
diff --git a/benchmark/bm_loop_times.rb b/benchmark/loop_times.rb
index 521f72ad1a..521f72ad1a 100644
--- a/benchmark/bm_loop_times.rb
+++ b/benchmark/loop_times.rb
diff --git a/benchmark/loop_times_megamorphic.yml b/benchmark/loop_times_megamorphic.yml
new file mode 100644
index 0000000000..f9343ba897
--- /dev/null
+++ b/benchmark/loop_times_megamorphic.yml
@@ -0,0 +1,7 @@
+prelude: |
+ eval(<<~EOS)
+ def loop_times_megamorphic
+ #{"1.times {|i|};" * 1000}
+ end
+ EOS
+benchmark: loop_times_megamorphic
diff --git a/benchmark/bm_loop_whileloop.rb b/benchmark/loop_whileloop.rb
index 0072822c06..0072822c06 100644
--- a/benchmark/bm_loop_whileloop.rb
+++ b/benchmark/loop_whileloop.rb
diff --git a/benchmark/bm_loop_whileloop2.rb b/benchmark/loop_whileloop2.rb
index 47d02dffc4..47d02dffc4 100644
--- a/benchmark/bm_loop_whileloop2.rb
+++ b/benchmark/loop_whileloop2.rb
diff --git a/benchmark/make_fasta_output.rb b/benchmark/make_fasta_output.rb
deleted file mode 100644
index b6d787ae27..0000000000
--- a/benchmark/make_fasta_output.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-# prepare 'fasta.output'
-
-def prepare_fasta_output n
- filebase = File.join(File.dirname($0), 'fasta.output')
- script = File.join(File.dirname($0), 'bm_so_fasta.rb')
- file = "#{filebase}.#{n}"
-
- unless FileTest.exist?(file)
- STDERR.puts "preparing #{file}"
-
- open(file, 'w'){|f|
- ARGV[0] = n
- $stdout = f
- load script
- $stdout = STDOUT
- }
- end
-end
-
diff --git a/benchmark/bm_marshal_dump_flo.rb b/benchmark/marshal_dump_flo.rb
index 9b8d0c6afb..9b8d0c6afb 100644
--- a/benchmark/bm_marshal_dump_flo.rb
+++ b/benchmark/marshal_dump_flo.rb
diff --git a/benchmark/bm_marshal_dump_load_geniv.rb b/benchmark/marshal_dump_load_geniv.rb
index 8252ad90fa..8252ad90fa 100644
--- a/benchmark/bm_marshal_dump_load_geniv.rb
+++ b/benchmark/marshal_dump_load_geniv.rb
diff --git a/benchmark/marshal_dump_load_integer.yml b/benchmark/marshal_dump_load_integer.yml
new file mode 100644
index 0000000000..78ebf823d2
--- /dev/null
+++ b/benchmark/marshal_dump_load_integer.yml
@@ -0,0 +1,22 @@
+prelude: |
+ smallint_array = 1000.times.map { |x| x }
+ bigint32_array = 1000.times.map { |x| x + 2**32 }
+ bigint64_array = 1000.times.map { |x| x + 2**64 }
+
+ smallint_dump = Marshal.dump(smallint_array)
+ bigint32_dump = Marshal.dump(bigint32_array)
+ bigint64_dump = Marshal.dump(bigint64_array)
+benchmark:
+ marshal_dump_integer_small: |
+ Marshal.dump(smallint_array)
+ marshal_dump_integer_over_32_bit: |
+ Marshal.dump(bigint32_array)
+ marshal_dump_integer_over_64_bit: |
+ Marshal.dump(bigint64_array)
+ marshal_load_integer_small: |
+ Marshal.load(smallint_dump)
+ marshal_load_integer_over_32_bit: |
+ Marshal.load(bigint32_dump)
+ marshal_load_integer_over_64_bit: |
+ Marshal.load(bigint64_dump)
+loop_count: 4000
diff --git a/benchmark/bm_marshal_dump_load_time.rb b/benchmark/marshal_dump_load_time.rb
index e29743b791..e29743b791 100644
--- a/benchmark/bm_marshal_dump_load_time.rb
+++ b/benchmark/marshal_dump_load_time.rb
diff --git a/benchmark/masgn.yml b/benchmark/masgn.yml
new file mode 100644
index 0000000000..31cb8ee4a3
--- /dev/null
+++ b/benchmark/masgn.yml
@@ -0,0 +1,53 @@
+prelude: |
+ a = [nil] * 3
+ b = Class.new{attr_writer :a, :b, :c}.new
+ c = d = e = f = g = h = i = nil
+benchmark:
+ array2_2: "c = (a[0], a[1] = 1, 2)"
+ array2_3: "c = (a[0], a[1] = 1, 2, 3)"
+ array3_2: "c = (a[0], a[1], a[2] = 1, 2)"
+ array3_3: "c = (a[0], a[1], a[2] = 1, 2, 3)"
+ attr2_2: "c = (b.a, b.b = 1, 2)"
+ attr2_3: "c = (b.a, b.b = 1, 2, 3)"
+ attr3_2: "c = (b.a, b.b, b.c = 1, 2)"
+ attr3_3: "c = (b.a, b.b, b.c = 1, 2, 3)"
+ lvar2_2: "c = (d, e = 1, 2)"
+ lvar2_3: "c = (d, e = 1, 2, 3)"
+ lvar3_2: "c = (d, e, f = 1, 2)"
+ lvar3_3: "c = (d, e, f = 1, 2, 3)"
+ array2_2p: "(a[0], a[1] = 1, 2; nil)"
+ array2_3p: "(a[0], a[1] = 1, 2, 3; nil)"
+ array3_2p: "(a[0], a[1], a[2] = 1, 2; nil)"
+ array3_3p: "(a[0], a[1], a[2] = 1, 2, 3; nil)"
+ attr2_2p: "(b.a, b.b = 1, 2; nil)"
+ attr2_3p: "(b.a, b.b = 1, 2, 3; nil)"
+ attr3_2p: "(b.a, b.b, b.c = 1, 2; nil)"
+ attr3_3p: "(b.a, b.b, b.c = 1, 2, 3; nil)"
+ lvar2_2p: "(d, e = 1, 2; nil)"
+ lvar2_3p: "(d, e = 1, 2, 3; nil)"
+ lvar3_2p: "(d, e, f = 1, 2; nil)"
+ lvar3_3p: "(d, e, f = 1, 2, 3; nil)"
+ array2_2lv: "c = (a[0], a[1] = g, h)"
+ array2_ilv: "c = (a[0], a[1] = g, h, i)"
+ arrayi_2lv: "c = (a[0], a[1], a[2] = g, h)"
+ arrayi_ilv: "c = (a[0], a[1], a[2] = g, h, i)"
+ attr2_2lv: "c = (b.a, b.b = g, h)"
+ attr2_ilv: "c = (b.a, b.b = g, h, i)"
+ attri_2lv: "c = (b.a, b.b, b.c = g, h)"
+ attri_ilv: "c = (b.a, b.b, b.c = g, h, i)"
+ lvar2_2lv: "c = (d, e = g, h)"
+ lvar2_ilv: "c = (d, e = g, h, i)"
+ lvari_2lv: "c = (d, e, f = g, h)"
+ lvari_ilv: "c = (d, e, f = g, h, i)"
+ array2_2plv: "(a[0], a[1] = g, h; nil)"
+ array2_iplv: "(a[0], a[1] = g, h, i; nil)"
+ arrayi_2plv: "(a[0], a[1], a[2] = g, h; nil)"
+ arrayi_iplv: "(a[0], a[1], a[2] = g, h, i; nil)"
+ attr2_2plv: "(b.a, b.b = g, h; nil)"
+ attr2_iplv: "(b.a, b.b = g, h, i; nil)"
+ attri_2plv: "(b.a, b.b, b.c = g, h; nil)"
+ attri_iplv: "(b.a, b.b, b.c = g, h, i; nil)"
+ lvar2_2plv: "(d, e = g, h; nil)"
+ lvar2_iplv: "(d, e = g, h, i; nil)"
+ lvari_2plv: "(d, e, f = g, h; nil)"
+ lvari_iplv: "(d, e, f = g, h, i; nil)"
diff --git a/benchmark/match_gt4.rb b/benchmark/match_gt4.rb
new file mode 100644
index 0000000000..ffda109912
--- /dev/null
+++ b/benchmark/match_gt4.rb
@@ -0,0 +1 @@
+1000000.times { /(.)(.)(\d+)(\d)/.match("THX1138.") }
diff --git a/benchmark/match_small.rb b/benchmark/match_small.rb
new file mode 100644
index 0000000000..3b743d484a
--- /dev/null
+++ b/benchmark/match_small.rb
@@ -0,0 +1 @@
+1000000.times { 'haystack'.match(/hay/) }
diff --git a/benchmark/method_bind_call.yml b/benchmark/method_bind_call.yml
new file mode 100644
index 0000000000..9e0e046ed4
--- /dev/null
+++ b/benchmark/method_bind_call.yml
@@ -0,0 +1,16 @@
+prelude: |
+ named_module = Kernel
+
+ module FakeName
+ def self.name
+ "NotMyame".freeze
+ end
+ end
+
+ MOD_NAME = Module.instance_method(:name)
+
+benchmark:
+ fastpath: MOD_NAME.bind_call(Kernel)
+ slowpath: MOD_NAME.bind_call(FakeName)
+
+loop_count: 100_000
diff --git a/benchmark/module_eqq.yml b/benchmark/module_eqq.yml
new file mode 100644
index 0000000000..2f9c490d92
--- /dev/null
+++ b/benchmark/module_eqq.yml
@@ -0,0 +1,32 @@
+prelude: |
+ module SomeModule; end
+ class SimpleClass; end
+ class MediumClass
+ 10.times { include Module.new }
+ end
+ class LargeClass
+ 100.times { include Module.new }
+ end
+ class HugeClass
+ 300.times { include Module.new }
+ end
+ SimpleObj = SimpleClass.new
+ MediumObj = MediumClass.new
+ LargeObj = LargeClass.new
+ HugeObj = HugeClass.new
+benchmark:
+ simple_class_eqq_simple_obj: |
+ SimpleClass === SimpleObj
+ medium_class_eqq_simple_obj: |
+ MediumClass === SimpleObj
+ simple_class_eqq_medium_obj: |
+ SimpleClass === MediumObj
+ simple_class_eqq_large_obj: |
+ SimpleClass === LargeObj
+ simple_class_eqq_huge_obj: |
+ SimpleClass === HugeObj
+ simple_class_eqq_module: |
+ SimpleClass === HugeObj
+ module_eqq_module: |
+ SomeModule === HugeObj
+loop_count: 10000000
diff --git a/benchmark/nil_p.yml b/benchmark/nil_p.yml
new file mode 100644
index 0000000000..79ba4f2177
--- /dev/null
+++ b/benchmark/nil_p.yml
@@ -0,0 +1,9 @@
+prelude: |
+ class Niller; def nil?; true; end; end
+ xnil, notnil = nil, Object.new
+ niller = Niller.new
+benchmark:
+ - xnil.nil?
+ - notnil.nil?
+ - niller.nil?
+loop_count: 10000000
diff --git a/benchmark/nilclass.yml b/benchmark/nilclass.yml
new file mode 100644
index 0000000000..66234c4cdf
--- /dev/null
+++ b/benchmark/nilclass.yml
@@ -0,0 +1,16 @@
+prelude: |
+ def a = nil
+benchmark:
+ rationalize:
+ nil.rationalize
+ to_c: |
+ nil.to_c
+ to_i: |
+ nil.to_i
+ to_f: |
+ nil.to_f
+ to_r: |
+ nil.to_r
+ splat: |
+ a(*nil)
+loop_count: 100000
diff --git a/benchmark/num_zero_p.yml b/benchmark/num_zero_p.yml
new file mode 100644
index 0000000000..2195963433
--- /dev/null
+++ b/benchmark/num_zero_p.yml
@@ -0,0 +1,8 @@
+benchmark:
+ - 0.zero?
+ - 1.zero?
+ - 0r.zero?
+ - 1r.zero?
+ - 0i.zero?
+ - 1i.zero?
+loop_count: 50000000
diff --git a/benchmark/numeric_methods.yml b/benchmark/numeric_methods.yml
new file mode 100644
index 0000000000..1384902935
--- /dev/null
+++ b/benchmark/numeric_methods.yml
@@ -0,0 +1,29 @@
+prelude: |
+ int = 42
+ flo = 4.2
+benchmark:
+ real?: |
+ int.real?
+ integer?: |
+ flo.integer?
+ finite?: |
+ int.finite?
+ infinite?: |
+ int.infinite?
+ integer_real: |
+ int.real
+ float_real: |
+ flo.real
+ integr_imag: |
+ int.imag
+ float_imag: |
+ flo.imag
+ integer_conj: |
+ int.conj
+ float_conj: |
+ flo.conj
+ integer_numerator: |
+ int.numerator
+ integer_denominator: |
+ int.denominator
+loop_count: 20000000
diff --git a/benchmark/object_allocate.yml b/benchmark/object_allocate.yml
new file mode 100644
index 0000000000..c6269923f0
--- /dev/null
+++ b/benchmark/object_allocate.yml
@@ -0,0 +1,49 @@
+prelude: |
+ class Eight
+ 8.times { include(Module.new) }
+ end
+ class ThirtyTwo
+ 32.times { include(Module.new) }
+ end
+ class SixtyFour
+ 64.times { include(Module.new) }
+ end
+ class OneTwentyEight
+ 128.times { include(Module.new) }
+ end
+ class OnePositional
+ def initialize a; end
+ end
+ class TwoPositional
+ def initialize a, b; end
+ end
+ class ThreePositional
+ def initialize a, b, c; end
+ end
+ class FourPositional
+ def initialize a, b, c, d; end
+ end
+ class KWArg
+ def initialize a:, b:, c:, d:
+ end
+ end
+ class Mixed
+ def initialize a, b, c:, d:
+ end
+ end
+ # Disable GC to see raw throughput:
+ GC.disable
+benchmark:
+ allocate_8_deep: Eight.new
+ allocate_32_deep: ThirtyTwo.new
+ allocate_64_deep: SixtyFour.new
+ allocate_128_deep: OneTwentyEight.new
+ allocate_1_positional_params: OnePositional.new(1)
+ allocate_2_positional_params: TwoPositional.new(1, 2)
+ allocate_3_positional_params: ThreePositional.new(1, 2, 3)
+ allocate_4_positional_params: FourPositional.new(1, 2, 3, 4)
+ allocate_kwarg_params: "KWArg.new(a: 1, b: 2, c: 3, d: 4)"
+ allocate_mixed_params: "Mixed.new(1, 2, c: 3, d: 4)"
+ allocate_no_params: "Object.new"
+ allocate_allocate: "Object.allocate"
+loop_count: 100000
diff --git a/benchmark/object_class.yml b/benchmark/object_class.yml
new file mode 100644
index 0000000000..1e5409d1e2
--- /dev/null
+++ b/benchmark/object_class.yml
@@ -0,0 +1,40 @@
+prelude: |
+ def get_class(obj)
+ i = 10_000
+ while i > 0
+ i -= 1
+ # 100 times per loop
+ obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class;
+ obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class;
+ obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class;
+ obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class;
+ obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class;
+ obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class;
+ obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class;
+ obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class;
+ obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class;
+ obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class;
+ obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class; obj.class;
+ end
+ end
+
+ class Obj
+ end
+ obj = Obj.new
+
+ singleton = Obj.new
+ def singleton.bar
+ end
+
+ extended = Obj.new
+ 2.times do
+ extended.extend Module.new
+ end
+
+ immediate = 1.4
+benchmark:
+ obj: get_class(obj)
+ extended: get_class(extended)
+ singleton: get_class(singleton)
+ immediate: get_class(immediate)
+loop_count: 1000
diff --git a/benchmark/object_id.yml b/benchmark/object_id.yml
new file mode 100644
index 0000000000..2bd52b923f
--- /dev/null
+++ b/benchmark/object_id.yml
@@ -0,0 +1,4 @@
+benchmark:
+ baseline: "Object.new"
+ object_id: "Object.new.object_id"
+# loop_count: 100000
diff --git a/benchmark/objspace_dump_all.yml b/benchmark/objspace_dump_all.yml
new file mode 100644
index 0000000000..ebab562d2e
--- /dev/null
+++ b/benchmark/objspace_dump_all.yml
@@ -0,0 +1,13 @@
+prelude: |
+ require 'objspace'
+ require 'tempfile'
+ $objs = 1_000.times.map { Object.new }
+ $strings = 1_000.times.map { |i| "string #{i}" }
+ $file = Tempfile.new('heap')
+ $dev_null = File.open(File::NULL, 'w+')
+
+benchmark:
+ dump_all_string: "ObjectSpace.dump_all(output: :string)"
+ dump_all_file: "ObjectSpace.dump_all(output: $file)"
+ dump_all_dev_null: "ObjectSpace.dump_all(output: $dev_null)"
+loop_count: 1
diff --git a/benchmark/other-lang/fact.py b/benchmark/other-lang/fact.py
index 01593965d9..1ce9f76275 100644
--- a/benchmark/other-lang/fact.py
+++ b/benchmark/other-lang/fact.py
@@ -3,7 +3,7 @@
def factL(n):
r = 1
- for x in range(2, n):
+ for x in range(2, n+1):
r *= x
return r
diff --git a/benchmark/pm_array.yml b/benchmark/pm_array.yml
new file mode 100644
index 0000000000..babb65a289
--- /dev/null
+++ b/benchmark/pm_array.yml
@@ -0,0 +1,19 @@
+prelude: |
+ def call(*val)
+ case val
+ in [String => body]
+ [200, {}, [body]]
+ in [Integer => status]
+ [status, {}, [""]]
+ in [Integer, String] => response
+ [response[0], {}, [response[1]]]
+ in [Integer, Hash, String] => response
+ [response[0], response[1], [response[2]]]
+ end
+ end
+
+benchmark:
+ first_match: call("ok")
+ second_match: call(401)
+ third_match: call(200, "ok")
+ fourth_match: call(201, {}, "created")
diff --git a/benchmark/prepare_require.rb b/benchmark/prepare_require.rb
deleted file mode 100644
index c4786f04ad..0000000000
--- a/benchmark/prepare_require.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require "fileutils"
-
-def prepare
- num_files = 10000
-
- basename = File.dirname($0)
- data_dir = File.join(basename, "bm_require.data")
-
- # skip if all of files exists
- if File.exist?(File.join(data_dir, "c#{num_files}.rb"))
- return
- end
-
- FileUtils.mkdir_p(data_dir)
-
- 1.upto(num_files) do |i|
- f = File.open("#{data_dir}/c#{i}.rb", "w")
- f.puts <<-END
- class C#{i}
- end
- END
- end
-end
-
-prepare
diff --git a/benchmark/prepare_require_thread.rb b/benchmark/prepare_require_thread.rb
deleted file mode 100644
index 339ecb8b39..0000000000
--- a/benchmark/prepare_require_thread.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-load File.join(File.dirname(__FILE__), "prepare_require.rb")
-
diff --git a/benchmark/prepare_so_count_words.rb b/benchmark/prepare_so_count_words.rb
deleted file mode 100644
index ee2138cdb2..0000000000
--- a/benchmark/prepare_so_count_words.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# prepare 'wc.input'
-
-def prepare_wc_input
- wcinput = File.join(File.dirname($0), 'wc.input')
- wcbase = File.join(File.dirname($0), 'wc.input.base')
- unless FileTest.exist?(wcinput)
- data = File.read(wcbase)
- 13.times{
- data << data
- }
- open(wcinput, 'w'){|f| f.write data}
- end
-end
-
-prepare_wc_input
diff --git a/benchmark/prepare_so_k_nucleotide.rb b/benchmark/prepare_so_k_nucleotide.rb
deleted file mode 100644
index d83aeb7a7e..0000000000
--- a/benchmark/prepare_so_k_nucleotide.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-require_relative 'make_fasta_output'
-prepare_fasta_output(100_000)
diff --git a/benchmark/prepare_so_reverse_complement.rb b/benchmark/prepare_so_reverse_complement.rb
deleted file mode 100644
index da3ec2df14..0000000000
--- a/benchmark/prepare_so_reverse_complement.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-require_relative 'make_fasta_output'
-prepare_fasta_output(2_500_000)
diff --git a/benchmark/ractor_const.yml b/benchmark/ractor_const.yml
new file mode 100644
index 0000000000..d7ab74bdca
--- /dev/null
+++ b/benchmark/ractor_const.yml
@@ -0,0 +1,4 @@
+type: lib/benchmark_driver/runner/ractor
+benchmark:
+ ractor_const: Object
+ractor: 1
diff --git a/benchmark/ractor_float_to_s.yml b/benchmark/ractor_float_to_s.yml
new file mode 100644
index 0000000000..8f492be668
--- /dev/null
+++ b/benchmark/ractor_float_to_s.yml
@@ -0,0 +1,8 @@
+type: lib/benchmark_driver/runner/ractor
+prelude: |
+ FLOATS = [*0.0.step(1.0, 0.001)]
+benchmark:
+ ractor_float_to_s: |
+ FLOATS.each {|f| f.to_s}
+loop_count: 100
+ractor: 2
diff --git a/benchmark/ractor_string_fstring.yml b/benchmark/ractor_string_fstring.yml
new file mode 100644
index 0000000000..14b92d8fd8
--- /dev/null
+++ b/benchmark/ractor_string_fstring.yml
@@ -0,0 +1,18 @@
+type: lib/benchmark_driver/runner/ractor
+benchmark:
+ ractor_fstring_random: |
+ i = 0
+ str = "same".dup
+ while i < 2000000
+ -(i.to_s.freeze)
+ i += 1
+ end
+ ractor_fstring_same: |
+ i = 0
+ str = "same".dup
+ while i < 2000000
+ -str
+ i += 1
+ end
+loop_count: 1
+ractor: 4
diff --git a/benchmark/range_bsearch_bignum.yml b/benchmark/range_bsearch_bignum.yml
new file mode 100644
index 0000000000..5730c93fcf
--- /dev/null
+++ b/benchmark/range_bsearch_bignum.yml
@@ -0,0 +1,10 @@
+prelude: |
+ first = 2**100
+ last = 2**1000
+ mid = (first + last) / 2
+ r = first..last
+
+benchmark:
+ first: r.bsearch { |x| x >= first }
+ mid: r.bsearch { |x| x >= mid }
+ last: r.bsearch { |x| x >= last }
diff --git a/benchmark/range_bsearch_endpointless.yml b/benchmark/range_bsearch_endpointless.yml
new file mode 100644
index 0000000000..8d7bedb662
--- /dev/null
+++ b/benchmark/range_bsearch_endpointless.yml
@@ -0,0 +1,21 @@
+prelude: |
+ re = (1..)
+ rb = (..0)
+
+benchmark:
+ 'endless 10**0': re.bsearch { |x| x >= 1 }
+ 'endless 10**1': re.bsearch { |x| x >= 10 }
+ 'endless 10**2': re.bsearch { |x| x >= 100 }
+ 'endless 10**3': re.bsearch { |x| x >= 1000 }
+ 'endless 10**4': re.bsearch { |x| x >= 10000 }
+ 'endless 10**5': re.bsearch { |x| x >= 100000 }
+ 'endless 10**10': re.bsearch { |x| x >= 10000000000 }
+ 'endless 10**100': re.bsearch { |x| x >= 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 }
+ 'beginless -10**0': rb.bsearch { |x| x >= -1 }
+ 'beginless -10**1': rb.bsearch { |x| x >= -10 }
+ 'beginless -10**2': rb.bsearch { |x| x >= -100 }
+ 'beginless -10**3': rb.bsearch { |x| x >= -1000 }
+ 'beginless -10**4': rb.bsearch { |x| x >= -10000 }
+ 'beginless -10**5': rb.bsearch { |x| x >= -100000 }
+ 'beginless -10**10': rb.bsearch { |x| x >= -10000000000 }
+ 'beginless -10**100': rb.bsearch { |x| x >= -10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 }
diff --git a/benchmark/range_bsearch_fixnum.yml b/benchmark/range_bsearch_fixnum.yml
new file mode 100644
index 0000000000..59416531b9
--- /dev/null
+++ b/benchmark/range_bsearch_fixnum.yml
@@ -0,0 +1,10 @@
+prelude: |
+ first = 1
+ last = 10000
+ mid = (first + last) / 2
+ r = first..last
+
+benchmark:
+ first: r.bsearch { |x| x >= first }
+ mid: r.bsearch { |x| x >= mid }
+ last: r.bsearch { |x| x >= last }
diff --git a/benchmark/range_count.yml b/benchmark/range_count.yml
new file mode 100644
index 0000000000..58f53a0236
--- /dev/null
+++ b/benchmark/range_count.yml
@@ -0,0 +1,11 @@
+prelude: |
+ r_1 = 1..1
+ r_1k = 1..1000
+ r_1m = 1..1000000
+ r_str = 'a'..'z'
+
+benchmark:
+ 'int 1': r_1.count
+ 'int 1K': r_1k.count
+ 'int 1M': r_1m.count
+ string: r_str.count
diff --git a/benchmark/range_last.yml b/benchmark/range_last.yml
new file mode 100644
index 0000000000..a6674f82ee
--- /dev/null
+++ b/benchmark/range_last.yml
@@ -0,0 +1,4 @@
+benchmark:
+ - (1..1_000_000).last(100)
+ - (1..1_000_000).last(1000)
+ - (1..1_000_000).last(10000)
diff --git a/benchmark/range_min.yml b/benchmark/range_min.yml
new file mode 100644
index 0000000000..9e60dd7308
--- /dev/null
+++ b/benchmark/range_min.yml
@@ -0,0 +1,2 @@
+benchmark:
+ - (1..10).min
diff --git a/benchmark/range_overlap.yml b/benchmark/range_overlap.yml
new file mode 100644
index 0000000000..700a00053c
--- /dev/null
+++ b/benchmark/range_overlap.yml
@@ -0,0 +1,19 @@
+prelude: |
+ class Range
+ unless method_defined?(:overlap?)
+ def overlap?(other)
+ other.begin == self.begin || cover?(other.begin) || other.cover?(self.begin)
+ end
+ end
+ end
+
+benchmark:
+ - (2..3).overlap?(1..1)
+ - (2..3).overlap?(2..4)
+ - (2..3).overlap?(4..5)
+ - (2..3).overlap?(2..1)
+ - (2..3).overlap?(0..1)
+ - (2..3).overlap?(...1)
+ - (2...3).overlap?(..2)
+ - (2...3).overlap?(3...)
+ - (2..3).overlap?('a'..'d')
diff --git a/benchmark/range_reverse_each.yml b/benchmark/range_reverse_each.yml
new file mode 100644
index 0000000000..a32efeccc6
--- /dev/null
+++ b/benchmark/range_reverse_each.yml
@@ -0,0 +1,16 @@
+prelude: |
+ rf_1 = 0..1
+ rf_1k = 0..1000
+ rf_1m = 0..1000000
+ big = 2**1000
+ rb_1 = big..big+1
+ rb_1k = big..big+1000
+ rb_1m = big..big+1000000
+
+benchmark:
+ "Fixnum 1": rf_1.reverse_each { _1 }
+ "Fixnum 1K": rf_1k.reverse_each { _1 }
+ "Fixnum 1M": rf_1m.reverse_each { _1 }
+ "Bignum 1": rb_1.reverse_each { _1 }
+ "Bignum 1K": rb_1k.reverse_each { _1 }
+ "Bignum 1M": rb_1m.reverse_each { _1 }
diff --git a/benchmark/realpath.yml b/benchmark/realpath.yml
new file mode 100644
index 0000000000..6b6a4836b0
--- /dev/null
+++ b/benchmark/realpath.yml
@@ -0,0 +1,33 @@
+prelude: |
+ f = File
+ pwd = Dir.pwd
+ Dir.mkdir('b') unless f.directory?('b')
+ f.write('b/a', '') unless f.file?('b/a')
+
+ relative = 'b/a'
+ absolute = File.join(pwd, relative)
+ dir = 'b'
+ file = 'a'
+
+ relative_dir = 'b/c'
+ absolute_dir = File.join(pwd, relative_dir)
+ file_dir = 'c'
+teardown: |
+ require 'fileutils'
+ FileUtils.rm_rf('b')
+benchmark:
+ relative_nil: "f.realpath(relative, nil)"
+ absolute_nil: "f.realpath(absolute, nil)"
+ relative_relative: "f.realpath(file, dir)"
+ absolute_relative: "f.realpath(absolute, dir)"
+ relative_absolute: "f.realpath(relative, pwd)"
+ relative_nil_dir: "f.realdirpath(relative_dir, nil)"
+ absolute_nil_dir: "f.realdirpath(absolute_dir, nil)"
+ relative_relative_dir: "f.realdirpath(file_dir, dir)"
+ absolute_relative_dir: "f.realdirpath(absolute_dir, dir)"
+ relative_absolute_dir: "f.realdirpath(relative_dir, pwd)"
+ relative_nil_notexist: "f.realpath(relative_dir, nil) rescue nil"
+ absolute_nil_notexist: "f.realpath(absolute_dir, nil) rescue nil"
+ relative_relative_notexist: "f.realpath(file_dir, dir) rescue nil"
+ absolute_relative_notexist: "f.realpath(absolute_dir, dir) rescue nil"
+ relative_absolute_notexist: "f.realpath(relative_dir, pwd) rescue nil"
diff --git a/benchmark/regexp_dup.yml b/benchmark/regexp_dup.yml
new file mode 100644
index 0000000000..52f89991cd
--- /dev/null
+++ b/benchmark/regexp_dup.yml
@@ -0,0 +1,6 @@
+prelude: |
+ str = "a" * 1000
+ re = Regexp.new(str)
+
+benchmark:
+ dup: re.dup
diff --git a/benchmark/regexp_new.yml b/benchmark/regexp_new.yml
new file mode 100644
index 0000000000..bc9ab3ca21
--- /dev/null
+++ b/benchmark/regexp_new.yml
@@ -0,0 +1,7 @@
+prelude: |
+ str = "a" * 1000
+ re = Regexp.new(str)
+
+benchmark:
+ string: Regexp.new(str)
+ regexp: Regexp.new(re)
diff --git a/benchmark/report.rb b/benchmark/report.rb
deleted file mode 100644
index d2dc56b1e1..0000000000
--- a/benchmark/report.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-#
-# YARV benchmark driver
-#
-
-require 'yarvutil'
-require 'benchmark'
-require 'rbconfig'
-
-def exec_command type, file, w
- <<-EOP
- $DRIVER_PATH = '#{File.dirname($0)}'
- $LOAD_PATH.replace $LOAD_PATH | #{$LOAD_PATH.inspect}
- require 'benchmark'
- require 'yarvutil'
-# print '#{type}'
- begin
- puts Benchmark.measure{
- #{w}('#{file}')
- }.utime
- rescue Exception => exec_command_error_variable
- puts "\t" + exec_command_error_variable.message
- end
- EOP
-end
-
-def benchmark cmd
- rubybin = ENV['RUBY'] || RbConfig.ruby
-
- IO.popen(rubybin, 'r+'){|io|
- io.write cmd
- io.close_write
- return io.gets
- }
-end
-
-def ruby_exec file
- prog = exec_command 'ruby', file, 'load'
- benchmark prog
-end
-
-def yarv_exec file
- prog = exec_command 'yarv', file, 'YARVUtil.load_bm'
- benchmark prog
-end
-
-$wr = $wy = nil
-
-def measure bench
- file = File.dirname($0) + "/bm_#{bench}.rb"
- r = ruby_exec(file).to_f
- y = yarv_exec(file).to_f
- puts "#{bench}\t#{r}\t#{y}"
-end
-
-def measure2
- r = ruby_exec.to_f
- y = yarv_exec.to_f
- puts r/y
-end
-
-if $0 == __FILE__
- %w{
- whileloop
- whileloop2
- times
- const
- method
- poly_method
- block
- rescue
- rescue2
- }.each{|bench|
- measure bench
- }
-end
-
-
-
-
diff --git a/benchmark/require.yml b/benchmark/require.yml
new file mode 100644
index 0000000000..09f218cf08
--- /dev/null
+++ b/benchmark/require.yml
@@ -0,0 +1,32 @@
+prelude: |
+ require "fileutils"
+
+ def prepare
+ num_files = 10000
+
+ basename = File.dirname($0)
+ data_dir = File.join(basename, "bm_require.data")
+
+ # skip if all of files exists
+ if File.exist?(File.join(data_dir, "c#{num_files}.rb"))
+ return
+ end
+
+ FileUtils.mkdir_p(data_dir)
+
+ 1.upto(num_files) do |i|
+ File.write("#{data_dir}/c#{i}.rb", "class C#{i}\n""end\n")
+ end
+ end
+
+ prepare
+benchmark:
+ require: |
+ $:.push File.join(File.dirname(__FILE__), "bm_require.data")
+
+ 1.upto(10000) do |i|
+ require "c#{i}"
+ end
+
+ $:.pop
+loop_count: 1
diff --git a/benchmark/require_thread.yml b/benchmark/require_thread.yml
new file mode 100644
index 0000000000..0c63257106
--- /dev/null
+++ b/benchmark/require_thread.yml
@@ -0,0 +1,40 @@
+prelude: |
+ require "fileutils"
+
+ def prepare
+ num_files = 10000
+
+ basename = File.dirname($0)
+ data_dir = File.join(basename, "bm_require.data")
+
+ # skip if all of files exists
+ if File.exist?(File.join(data_dir, "c#{num_files}.rb"))
+ return
+ end
+
+ FileUtils.mkdir_p(data_dir)
+
+ 1.upto(num_files) do |i|
+ File.write("#{data_dir}/c#{i}.rb", "class C#{i}\n""end\n")
+ end
+ end
+
+ prepare
+benchmark:
+ require_thread: |
+ $:.push File.join(File.dirname(__FILE__), "bm_require.data")
+
+ i=0
+ t = Thread.new do
+ while true
+ i = i+1 # dummy loop
+ end
+ end
+
+ 1.upto(100) do |i|
+ require "c#{i}"
+ end
+
+ $:.pop
+ t.kill
+loop_count: 1
diff --git a/benchmark/run.rb b/benchmark/run.rb
deleted file mode 100644
index 0cd2363849..0000000000
--- a/benchmark/run.rb
+++ /dev/null
@@ -1,127 +0,0 @@
-#
-# Ruby benchmark driver
-#
-
-require 'benchmark'
-require 'rbconfig'
-
-$matzrubyonly = false
-$rubyonly = false
-
-$results = []
-
-# prepare 'wc.input'
-def prepare_wc_input
- wcinput = File.join(File.dirname($0), 'wc.input')
- wcbase = File.join(File.dirname($0), 'wc.input.base')
- unless FileTest.exist?(wcinput)
- data = File.read(wcbase)
- 13.times{
- data << data
- }
- open(wcinput, 'w'){|f| f.write data}
- end
-end
-
-prepare_wc_input
-
-def bm file
- prog = File.readlines(file).map{|e| e.rstrip}.join("\n")
- return if prog.empty?
-
- /[a-z]+_(.+)\.rb/ =~ file
- bm_name = $1
- puts '-----------------------------------------------------------' unless $rubyonly || $matzrubyonly
- puts "#{bm_name}: "
-
-
-puts <<EOS unless $matzrubyonly || $rubyonly
-#{prog}
---
-EOS
- begin
- result = [bm_name]
- result << matzruby_exec(file) unless $rubyonly
- result << ruby_exec(file) unless $matzrubyonly
- $results << result
-
- rescue Exception => e
- puts
- puts "** benchmark failure: #{e}"
- puts e.backtrace
- end
-end
-
-def benchmark file, bin
- m = Benchmark.measure{
- `#{bin} #{$opts} #{file}`
- }
- sec = '%.3f' % m.real
- puts " #{sec}"
- sec
-end
-
-def ruby_exec file
- print 'ruby'
- benchmark file, $ruby_program
-end
-
-def matzruby_exec file
- print 'matz'
- rubylib = ENV['RUBYLIB']
- ENV['RUBYLIB'] = ''
- r = benchmark file, $matzruby_program
- ENV['RUBYLIB'] = rubylib
- r
-end
-
-if $0 == __FILE__
- ARGV.each{|arg|
- case arg
- when /\A--ruby=(.+)/
- $ruby_program = $1
- when /\A--matzruby=(.+)/
- $matzruby_program = $1
- when /\A--opts=(.+)/
- $opts = $1
- when /\A(-r|--only-ruby)\z/
- $rubyonly = true
- when /\A(-m|--only-matzruby)\z/
- $matzrubyonly = true
- end
- }
- ARGV.delete_if{|arg|
- /\A-/ =~ arg
- }
-
- puts "MatzRuby:"
- system("#{$matzruby_program} -v")
- puts "Ruby:"
- system("#{$ruby_program} -v")
- puts
-
- if ARGV.empty?
- Dir.glob(File.dirname(__FILE__) + '/bm_*.rb').sort.each{|file|
- bm file
- }
- else
- ARGV.each{|file|
- Dir.glob(File.join(File.dirname(__FILE__), file + '*')){|ef|
- # file = "#{File.dirname(__FILE__)}/#{file}.rb"
- bm ef
- }
- }
- end
-
- puts
- puts "-- benchmark summary ---------------------------"
- $results.each{|res|
- print res.shift, "\t"
- (res||[]).each{|result|
- /([\d\.]+)/ =~ result
- print $1 + "\t" if $1
- }
- puts
- }
-end
-
diff --git a/benchmark/runc.rb b/benchmark/runc.rb
deleted file mode 100644
index 97c5cef045..0000000000
--- a/benchmark/runc.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-#
-#
-
-require 'benchmark'
-require 'rbconfig'
-
-$rubybin = ENV['RUBY'] || RbConfig.ruby
-
-def runfile file
- puts file
- file = File.join(File.dirname($0), 'contrib', file)
- Benchmark.bm{|x|
- x.report('ruby'){
- system("#{$rubybin} #{file}")
- }
- x.report('yarv'){
- system("#{$rubybin} -rite -I.. #{file}")
- }
- }
-end
-
-ARGV.each{|file|
- runfile file
-}
-
-
diff --git a/benchmark/scan.yaml b/benchmark/scan.yaml
new file mode 100644
index 0000000000..62ad1d6862
--- /dev/null
+++ b/benchmark/scan.yaml
@@ -0,0 +1,16 @@
+prelude: |
+ $LOAD_PATH.unshift(File.expand_path("lib"))
+ require "strscan"
+ str = "test string"
+ scanner = StringScanner.new(str)
+ str = "test"
+ reg = /test/
+benchmark:
+ check(reg): |
+ scanner.check(reg)
+ check(str): |
+ scanner.check(str)
+ match?(reg): |
+ scanner.match?(reg)
+ match?(str): |
+ scanner.match?(str)
diff --git a/benchmark/search.yaml b/benchmark/search.yaml
new file mode 100644
index 0000000000..42a50c90e6
--- /dev/null
+++ b/benchmark/search.yaml
@@ -0,0 +1,16 @@
+prelude: |
+ $LOAD_PATH.unshift(File.expand_path("lib"))
+ require "strscan"
+ str = "test string"
+ scanner = StringScanner.new(str)
+ str = "string"
+ reg = /string/
+benchmark:
+ check_until(reg): |
+ scanner.check_until(reg)
+ check_until(str): |
+ scanner.check_until(str)
+ exist?(reg): |
+ scanner.exist?(reg)
+ exist?(str): |
+ scanner.exist?(str)
diff --git a/benchmark/bm_securerandom.rb b/benchmark/securerandom.rb
index a082ea6d5b..a082ea6d5b 100644
--- a/benchmark/bm_securerandom.rb
+++ b/benchmark/securerandom.rb
diff --git a/benchmark/set.yml b/benchmark/set.yml
new file mode 100644
index 0000000000..061509cb1f
--- /dev/null
+++ b/benchmark/set.yml
@@ -0,0 +1,261 @@
+prelude: |
+ # First 1000 digits of pi
+ pi = <<~END.gsub(/\D/, '')
+ 31415926535897932384626433832795028841971693993751058209749445923078164062862089
+ 98628034825342117067982148086513282306647093844609550582231725359408128481117450
+ 28410270193852110555964462294895493038196442881097566593344612847564823378678316
+ 52712019091456485669234603486104543266482133936072602491412737245870066063155881
+ 74881520920962829254091715364367892590360011330530548820466521384146951941511609
+ 43305727036575959195309218611738193261179310511854807446237996274956735188575272
+ 48912279381830119491298336733624406566430860213949463952247371907021798609437027
+ 70539217176293176752384674818467669405132000568127145263560827785771342757789609
+ 17363717872146844090122495343014654958537105079227968925892354201995611212902196
+ 08640344181598136297747713099605187072113499999983729780499510597317328160963185
+ 95024459455346908302642522308253344685035261931188171010003137838752886587533208
+ 38142061717766914730359825349042875546873115956286388235378759375195778185778053
+ 21712268066130019278766111959092164201989380952572010654505906988788448549
+ END
+ array1 = 10.times.flat_map do |i|
+ pi[i...].chars.each_slice(10).map(&:join)
+ end
+ array2 = array1.map(&:reverse)
+ array1.map!(&:to_i)
+ array2.map!(&:to_i)
+ a1 = array1[...10]
+ a2 = array1[...100]
+ a3 = array1
+ oa1 = array2[...10]
+ oa2 = array2[...100]
+ oa3 = array2
+ s0 = Set.new
+ s0 = Set.new
+ s1 = Set.new(a1)
+ s2 = Set.new(a2)
+ s3 = Set.new(a3)
+ o0 = Set.new
+ o1 = Set.new(array2[...10])
+ o2 = Set.new(array2[...100])
+ o3 = Set.new(array2)
+ d0 = s0.dup
+ d1 = s1.dup
+ d2 = s2.dup
+ d3 = s3.dup
+ ss1 = s1 - a1[-1..-1]
+ ss2 = s2 - a2[-1..-1]
+ ss3 = s3 - a3[-1..-1]
+ os1 = o1 - oa1[-1..-1]
+ os2 = o2 - oa2[-1..-1]
+ os3 = o3 - oa3[-1..-1]
+ member = a1.first
+ cbi = s0.dup.compare_by_identity
+ ns = Set[s3, o3, d3]
+ set_subclass = Class.new(Set)
+
+benchmark:
+ new_0: Set.new
+ new_10: Set.new(a1)
+ new_100: Set.new(a2)
+ new_1000: Set.new(a3)
+ aref_0: Set[]
+ aref_10: Set[*a1]
+ aref_100: Set[*a2]
+ aref_1000: Set[*a3]
+ amp_0: s0 & o0
+ amp_10: s1 & o1
+ amp_100: s2 & o2
+ amp_1000: s3 & o3
+ amp_same_0: s0 & d0
+ amp_same_10: s1 & d1
+ amp_same_100: s2 & d2
+ amp_same_1000: s3 & d3
+ minus_0: s0 - o0
+ minus_10: s1 - o1
+ minus_100: s2 - o2
+ minus_1000: s3 - o3
+ minus_same_0: s0 - d0
+ minus_same_10: s1 - d1
+ minus_same_100: s2 - d2
+ minus_same_1000: s3 - d3
+ spaceship_0: s0 <=> o0
+ spaceship_diff_10: s1 <=> o1
+ spaceship_diff_100: s2 <=> o2
+ spaceship_diff_1000: s2 <=> o3
+ spaceship_sub_10: s1 <=> ss1
+ spaceship_sub_100: s2 <=> ss2
+ spaceship_sub_1000: s2 <=> ss3
+ spaceship_sup_10: ss1 <=> s1
+ spaceship_sup_100: ss2 <=> s2
+ spaceship_sup_1000: ss2 <=> s3
+ eq_0: s0 == o0
+ eq_10: s1 == o1
+ eq_100: s2 == o2
+ eq_1000: s3 == o3
+ eq_same_0: s0 == d0
+ eq_same_10: s1 == d1
+ eq_same_100: s2 == d2
+ eq_same_1000: s3 == d3
+ xor_0: s0 ^ o0
+ xor_10: s1 ^ o1
+ xor_100: s2 ^ o2
+ xor_1000: s3 ^ o3
+ xor_same_0: s0 ^ d0
+ xor_same_10: s1 ^ d1
+ xor_same_100: s2 ^ d2
+ xor_same_1000: s3 ^ d3
+ pipe_0: s0 | o0
+ pipe_10: s1 | o1
+ pipe_100: s2 | o2
+ pipe_1000: s3 | o3
+ pipe_same_0: s0 | d0
+ pipe_same_10: s1 | d1
+ pipe_same_100: s2 | d2
+ pipe_same_1000: s3 | d3
+ add: a3.each { s0.add(it) }
+ add_exist: a3.each { s3.add(it) }
+ addq: a3.each { s0.add?(it) }
+ addq_exist: a3.each { s3.add?(it) }
+ classify_0: s0.classify { it }
+ classify_10: s1.classify { it & 2 }
+ classify_100: s2.classify { it & 8 }
+ classify_1000: s3.classify { it & 32 }
+ clear: s0.clear
+ collect_0: s0.collect! { it }
+ collect_10: s1.collect! { it }
+ collect_100: s2.collect! { it }
+ collect_1000: s3.collect! { it }
+ compare_by_identity_0: s0.dup.compare_by_identity
+ compare_by_identity_10: s1.dup.compare_by_identity
+ compare_by_identity_100: s2.dup.compare_by_identity
+ compare_by_identity_1000: s3.dup.compare_by_identity
+ compare_by_identityq_false: s0.compare_by_identity?
+ compare_by_identityq_true: cbi.compare_by_identity?
+ clone_0: s0.clone
+ clone_10: s1.clone
+ clone_100: s2.clone
+ clone_1000: s3.clone
+ delete: a3.each { s3.delete(it) }
+ delete_not_exist: a3.each { o3.delete(it) }
+ deleteq: a3.each { s3.delete?(it) }
+ deleteq_not_exist: a3.each { o3.delete?(it) }
+ delete_if_0: s0.delete_if { it }
+ delete_if_10: s1.delete_if { it & 2 == 0 }
+ delete_if_100: s2.delete_if { it & 2 == 0 }
+ delete_if_1000: s3.delete_if { it & 2 == 0 }
+ disjoint_0: s0.disjoint? o0
+ disjoint_10: s1.disjoint? o1
+ disjoint_100: s2.disjoint? o2
+ disjoint_1000: s3.disjoint? o3
+ disjoint_same_0: s0.disjoint? d0
+ disjoint_same_10: s1.disjoint? d1
+ disjoint_same_100: s2.disjoint? d2
+ disjoint_same_1000: s3.disjoint? d3
+ divide_1arity_0: s0.divide { true }
+ divide_1arity_10: s1.divide { it & 2 }
+ divide_1arity_100: s2.divide { it & 8 }
+ divide_1arity_1000: s3.divide { it & 32 }
+ divide_2arity_0: s0.divide { true }
+ divide_2arity_10: s1.divide { (_1 & 2) == (_2 & 2) }
+ divide_2arity_100: s2.divide { (_1 & 8) == (_2 & 8) }
+ divide_2arity_1000: s3.divide { (_1 & 32) == (_2 & 32) }
+ dup_0: s0.dup
+ dup_10: s1.dup
+ dup_100: s2.dup
+ dup_1000: s3.dup
+ each_0: s0.each { it }
+ each_10: s1.each { it }
+ each_100: s2.each { it }
+ each_1000: s3.each { it }
+ empty_true: s0.empty?
+ empty_false: s3.empty?
+ flatten: ns.flatten
+ flattenb: ns.flatten!
+ include_true_0: s0.include? member
+ include_true_10: s1.include? member
+ include_true_100: s2.include? member
+ include_true_1000: s3.include? member
+ include_false_0: s0.include?(-1)
+ include_false_10: s1.include?(-1)
+ include_false_100: s2.include?(-1)
+ include_false_1000: s3.include?(-1)
+ intersect_0: s0.intersect? o0
+ intersect_10: s1.intersect? o1
+ intersect_100: s2.intersect? o2
+ intersect_1000: s3.intersect? o3
+ intersect_same_0: s0.intersect? d0
+ intersect_same_10: s1.intersect? d1
+ intersect_same_100: s2.intersect? d2
+ intersect_same_1000: s3.intersect? d3
+ join_0: s0.join
+ join_10: s1.join
+ join_100: s2.join
+ join_1000: s3.join
+ join_arg_0: s0.join ""
+ join_arg_10: s1.join ""
+ join_arg_100: s2.join ""
+ join_arg_1000: s3.join ""
+ keep_if_0: s0.keep_if { it }
+ keep_if_10: s1.keep_if { it & 2 == 0 }
+ keep_if_100: s2.keep_if { it & 2 == 0 }
+ keep_if_1000: s3.keep_if { it & 2 == 0 }
+ merge_set: s0.dup.merge(s3, o3)
+ merge_enum: s0.dup.merge(array1, array2)
+ proper_subset_0: s0.proper_subset? s0
+ proper_subset_10: s1.proper_subset? ss1
+ proper_subset_100: s2.proper_subset? ss2
+ proper_subset_1000: s3.proper_subset? ss3
+ proper_subset_false_10: s1.proper_subset? os1
+ proper_subset_false_100: s2.proper_subset? os2
+ proper_subset_false_1000: s3.proper_subset? os3
+ proper_superset_0: s0.proper_superset? s0
+ proper_superset_10: ss1.proper_superset? s1
+ proper_superset_100: ss2.proper_superset? s2
+ proper_superset_1000: ss3.proper_superset? s3
+ proper_superset_false_10: os1.proper_superset? s1
+ proper_superset_false_100: os2.proper_superset? s2
+ proper_superset_false_1000: os3.proper_superset? s3
+ reject_0: s0.reject! { it }
+ reject_10: s1.reject! { it & 2 == 0 }
+ reject_100: s2.reject! { it & 2 == 0 }
+ reject_1000: s3.reject! { it & 2 == 0 }
+ replace_0: s = Set.new; array1.each { s.replace(s0) }
+ replace_10: s = Set.new; array1.each { s.replace(s1) }
+ replace_100: s = Set.new; array1.each { s.replace(s2) }
+ replace_1000: s = Set.new; array1.each { s.replace(s3) }
+ reset_0: s0.reset
+ reset_10: s1.reset
+ reset_100: s2.reset
+ reset_1000: s3.reset
+ select_0: s0.select! { it }
+ select_10: s1.select! { it & 2 == 0 }
+ select_100: s2.select! { it & 2 == 0 }
+ select_1000: s3.select! { it & 2 == 0 }
+ size_0: s0.size
+ size_10: s1.size
+ size_100: s2.size
+ size_1000: s3.size
+ subtract_set: s3.dup.subtract(os3)
+ subtract_enum: s3.dup.subtract(oa3)
+ subtract_same_set: s3.dup.subtract(s3)
+ subtract_same_enum: s3.dup.subtract(a3)
+ subset_0: s0.subset? s0
+ subset_10: s1.subset? ss1
+ subset_100: s2.subset? ss2
+ subset_1000: s3.subset? ss3
+ subset_false_10: s1.subset? os1
+ subset_false_100: s2.subset? os2
+ subset_false_1000: s3.subset? os3
+ superset_0: s0.superset? s0
+ superset_10: ss1.superset? s1
+ superset_100: ss2.superset? s2
+ superset_1000: ss3.superset? s3
+ superset_false_10: os1.superset? s1
+ superset_false_100: os2.superset? s2
+ superset_false_1000: os3.superset? s3
+ to_a_0: s0.to_a
+ to_a_10: s1.to_a
+ to_a_100: s2.to_a
+ to_a_1000: s3.to_a
+ to_set_0: s0.to_set
+ to_set_10: s1.to_set
+ to_set_100: s2.to_set
+ to_set_1000: s3.to_set
diff --git a/benchmark/so_ackermann.rb b/benchmark/so_ackermann.rb
new file mode 100644
index 0000000000..4effa1ecaf
--- /dev/null
+++ b/benchmark/so_ackermann.rb
@@ -0,0 +1,19 @@
+#!/usr/bin/ruby
+# -*- Ruby -*-
+# $Id: ackermann-ruby.code,v 1.4 2004/11/13 07:40:41 bfulgham Exp $
+# http://www.bagley.org/~doug/shootout/
+
+def ack(m, n)
+ if m == 0 then
+ n + 1
+ elsif n == 0 then
+ ack(m - 1, 1)
+ else
+ ack(m - 1, ack(m, n - 1))
+ end
+end
+
+NUM = 9
+ack(3, NUM)
+
+
diff --git a/benchmark/so_array.rb b/benchmark/so_array.rb
new file mode 100644
index 0000000000..767e03db5f
--- /dev/null
+++ b/benchmark/so_array.rb
@@ -0,0 +1,23 @@
+#!/usr/bin/ruby
+# -*- Ruby -*-
+# $Id: ary-ruby.code,v 1.4 2004/11/13 07:41:27 bfulgham Exp $
+# http://www.bagley.org/~doug/shootout/
+# with help from Paul Brannan and Mark Hubbart
+
+n = 9000 # Integer(ARGV.shift || 1)
+
+x = Array.new(n)
+y = Array.new(n, 0)
+
+n.times{|bi|
+ x[bi] = bi + 1
+}
+
+(0 .. 999).each do |e|
+ (n-1).step(0,-1) do |bi|
+ y[bi] += x.at(bi)
+ end
+end
+# puts "#{y.first} #{y.last}"
+
+
diff --git a/benchmark/bm_so_binary_trees.rb b/benchmark/so_binary_trees.rb
index b1693e4109..b1693e4109 100644
--- a/benchmark/bm_so_binary_trees.rb
+++ b/benchmark/so_binary_trees.rb
diff --git a/benchmark/so_concatenate.rb b/benchmark/so_concatenate.rb
new file mode 100644
index 0000000000..4468e20ac8
--- /dev/null
+++ b/benchmark/so_concatenate.rb
@@ -0,0 +1,18 @@
+#!/usr/bin/ruby
+# -*- Ruby -*-
+# $Id: strcat-ruby.code,v 1.4 2004/11/13 07:43:28 bfulgham Exp $
+# http://www.bagley.org/~doug/shootout/
+# based on code from Aristarkh A Zagorodnikov and Dat Nguyen
+
+STUFF = "hello\n"
+i = 0
+while i<10
+ i += 1
+ hello = ''
+ 4_000_000.times do |e|
+ hello << STUFF
+ end
+end
+# puts hello.length
+
+
diff --git a/benchmark/so_count_words.yml b/benchmark/so_count_words.yml
new file mode 100644
index 0000000000..f7322a8541
--- /dev/null
+++ b/benchmark/so_count_words.yml
@@ -0,0 +1,66 @@
+prelude: |
+ #!/usr/bin/ruby
+
+ wc_input_base = <<EOS
+ Subject: Re: Who was Izchak Miller?
+ From: "Jane D. Anonymous" <nobody@yale.edu>
+ Date: 1996/04/28
+ Message-Id: <4lv7bc$oh@news.ycc.yale.edu>
+ References: <317C405E.5DFA@panix.com> <4lk6vl$gde@ns.oar.net>
+ To: 75176.2330@compuserve.com
+ Content-Type: text/plain; charset=us-ascii
+ Organization: Yale University
+ X-Url: news:4lk6vl$gde@ns.oar.net
+ Mime-Version: 1.0
+ Newsgroups: rec.games.roguelike.nethack
+ X-Mailer: Mozilla 1.1N (Macintosh; I; 68K)
+
+ Hello there, Izchak Miller was my father. When I was younger I spent
+ many a night, hunched over the keyboard with a cup of tea, playing
+ nethack with him and my brother. my dad was a philosopher with a strong
+ weakness for fantasy/sci fi. I remember when he started to get involved
+ with the Nethack team- my brother's Dungeons and Dragons monster book
+ found a regular place beside my dad's desk. it's nice to see him living
+ on in the game he loved so much :-).
+ Tamar Miller
+
+ The following is a really long word of 5000 characters:
+
+ wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
+ EOS
+
+ # prepare 'wc.input'
+
+ def prepare_wc_input(wcbase)
+ wcinput = File.join(File.dirname($0), 'wc.input')
+ unless FileTest.exist?(wcinput)
+ data = wcbase.dup
+ 13.times{
+ data << data
+ }
+ File.write(wcinput, data)
+ end
+ at_exit {File.unlink(wcinput) rescue nil}
+ end
+
+ prepare_wc_input(wc_input_base)
+
+benchmark:
+ so_count_words: |
+ # $Id: wc-ruby.code,v 1.4 2004/11/13 07:43:32 bfulgham Exp $
+ # http://www.bagley.org/~doug/shootout/
+ # with help from Paul Brannan
+
+ nl = nw = nc = 0
+ File.open(File.join(File.dirname($0), 'wc.input'), 'rb') do |input|
+ while tmp = input.read(4096)
+ data = tmp << (input.gets || "")
+ nc += data.length
+ nl += data.count("\n")
+ ((data.strip! || data).tr!("\n", " ") || data).squeeze!
+ nw += data.count(" ") + 1
+ end
+ end
+ # STDERR.puts "#{nl} #{nw} #{nc}"
+
+loop_count: 1
diff --git a/benchmark/so_exception.rb b/benchmark/so_exception.rb
new file mode 100644
index 0000000000..eb205b4df1
--- /dev/null
+++ b/benchmark/so_exception.rb
@@ -0,0 +1,61 @@
+#!/usr/bin/ruby
+# -*- Ruby -*-
+# $Id: except-ruby.code,v 1.4 2004/11/13 07:41:33 bfulgham Exp $
+# http://www.bagley.org/~doug/shootout/
+
+$HI = 0
+$LO = 0
+NUM = 250000 # Integer(ARGV[0] || 1)
+
+
+class Lo_Exception < Exception
+ def initialize(num)
+ @value = num
+ end
+end
+
+class Hi_Exception < Exception
+ def initialize(num)
+ @value = num
+ end
+end
+
+def some_function(num)
+ begin
+ hi_function(num)
+ rescue
+ print "We shouldn't get here, exception is: #{$!.type}\n"
+ end
+end
+
+def hi_function(num)
+ begin
+ lo_function(num)
+ rescue Hi_Exception
+ $HI = $HI + 1
+ end
+end
+
+def lo_function(num)
+ begin
+ blowup(num)
+ rescue Lo_Exception
+ $LO = $LO + 1
+ end
+end
+
+def blowup(num)
+ if num % 2 == 0
+ raise Lo_Exception.new(num)
+ else
+ raise Hi_Exception.new(num)
+ end
+end
+
+
+i = 1
+max = NUM+1
+while i < max
+ i += 1
+ some_function(i+1)
+end
diff --git a/benchmark/bm_so_fannkuch.rb b/benchmark/so_fannkuch.rb
index bac5ecd44c..bac5ecd44c 100644
--- a/benchmark/bm_so_fannkuch.rb
+++ b/benchmark/so_fannkuch.rb
diff --git a/benchmark/so_fasta.rb b/benchmark/so_fasta.rb
new file mode 100644
index 0000000000..dcc6b39507
--- /dev/null
+++ b/benchmark/so_fasta.rb
@@ -0,0 +1,81 @@
+# The Computer Language Shootout
+# http://shootout.alioth.debian.org/
+# Contributed by Sokolov Yura
+
+$last = 42.0
+def gen_random(max, im=139968, ia=3877, ic=29573)
+ (max * ($last = ($last * ia + ic) % im)) / im
+end
+
+alu =
+ "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG"+
+ "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA"+
+ "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT"+
+ "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA"+
+ "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG"+
+ "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC"+
+ "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
+
+iub = [
+ ["a", 0.27],
+ ["c", 0.12],
+ ["g", 0.12],
+ ["t", 0.27],
+
+ ["B", 0.02],
+ ["D", 0.02],
+ ["H", 0.02],
+ ["K", 0.02],
+ ["M", 0.02],
+ ["N", 0.02],
+ ["R", 0.02],
+ ["S", 0.02],
+ ["V", 0.02],
+ ["W", 0.02],
+ ["Y", 0.02],
+]
+homosapiens = [
+ ["a", 0.3029549426680],
+ ["c", 0.1979883004921],
+ ["g", 0.1975473066391],
+ ["t", 0.3015094502008],
+]
+
+def make_repeat_fasta(id, desc, src, n)
+ puts ">#{id} #{desc}"
+ v = nil
+ width = 60
+ l = src.length
+ s = src * ((n / l) + 1)
+ s.slice!(n, l)
+ puts(s.scan(/.{1,#{width}}/).join("\n"))
+end
+
+def make_random_fasta(id, desc, table, n)
+ puts ">#{id} #{desc}"
+ rand, v = nil,nil
+ width = 60
+ chunk = 1 * width
+ prob = 0.0
+ table.each{|v| v[1]= (prob += v[1])}
+ for i in 1..(n/width)
+ puts((1..width).collect{
+ rand = gen_random(1.0)
+ table.find{|v| v[1]>rand}[0]
+ }.join)
+ end
+ if n%width != 0
+ puts((1..(n%width)).collect{
+ rand = gen_random(1.0)
+ table.find{|v| v[1]>rand}[0]
+ }.join)
+ end
+end
+
+
+n = (ARGV[0] or 250_000).to_i
+
+make_repeat_fasta('ONE', 'Homo sapiens alu', alu, n*2)
+make_random_fasta('TWO', 'IUB ambiguity codes', iub, n*3)
+make_random_fasta('THREE', 'Homo sapiens frequency', homosapiens, n*5)
+
diff --git a/benchmark/so_k_nucleotide.yml b/benchmark/so_k_nucleotide.yml
new file mode 100644
index 0000000000..d7df086c39
--- /dev/null
+++ b/benchmark/so_k_nucleotide.yml
@@ -0,0 +1,155 @@
+prelude: |
+ bm_so_fasta = <<'EOS'
+ # The Computer Language Shootout
+ # http://shootout.alioth.debian.org/
+ # Contributed by Sokolov Yura
+
+ $last = 42.0
+ def gen_random(max, im=139968, ia=3877, ic=29573)
+ (max * ($last = ($last * ia + ic) % im)) / im
+ end
+
+ alu =
+ "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG"+
+ "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA"+
+ "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT"+
+ "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA"+
+ "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG"+
+ "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC"+
+ "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
+
+ iub = [
+ ["a", 0.27],
+ ["c", 0.12],
+ ["g", 0.12],
+ ["t", 0.27],
+
+ ["B", 0.02],
+ ["D", 0.02],
+ ["H", 0.02],
+ ["K", 0.02],
+ ["M", 0.02],
+ ["N", 0.02],
+ ["R", 0.02],
+ ["S", 0.02],
+ ["V", 0.02],
+ ["W", 0.02],
+ ["Y", 0.02],
+ ]
+ homosapiens = [
+ ["a", 0.3029549426680],
+ ["c", 0.1979883004921],
+ ["g", 0.1975473066391],
+ ["t", 0.3015094502008],
+ ]
+
+ def make_repeat_fasta(id, desc, src, n)
+ puts ">#{id} #{desc}"
+ v = nil
+ width = 60
+ l = src.length
+ s = src * ((n / l) + 1)
+ s.slice!(n, l)
+ puts(s.scan(/.{1,#{width}}/).join("\n"))
+ end
+
+ def make_random_fasta(id, desc, table, n)
+ puts ">#{id} #{desc}"
+ rand, v = nil,nil
+ width = 60
+ chunk = 1 * width
+ prob = 0.0
+ table.each{|v| v[1]= (prob += v[1])}
+ for i in 1..(n/width)
+ puts((1..width).collect{
+ rand = gen_random(1.0)
+ table.find{|v| v[1]>rand}[0]
+ }.join)
+ end
+ if n%width != 0
+ puts((1..(n%width)).collect{
+ rand = gen_random(1.0)
+ table.find{|v| v[1]>rand}[0]
+ }.join)
+ end
+ end
+
+
+ n = (ARGV[0] or 250_000).to_i
+
+ make_repeat_fasta('ONE', 'Homo sapiens alu', alu, n*2)
+ make_random_fasta('TWO', 'IUB ambiguity codes', iub, n*3)
+ make_random_fasta('THREE', 'Homo sapiens frequency', homosapiens, n*5)
+ EOS
+benchmark:
+ - name: so_k_nucleotide
+ prelude: |
+ script = File.join(File.dirname($0), 'bm_so_fasta.rb')
+ File.write(script, bm_so_fasta)
+
+ def prepare_fasta_output n
+ filebase = File.join(File.dirname($0), 'fasta.output')
+ script = File.join(File.dirname($0), 'bm_so_fasta.rb')
+ file = "#{filebase}.#{n}"
+
+ unless FileTest.exist?(file)
+ STDERR.puts "preparing #{file}"
+
+ open(file, 'w'){|f|
+ ARGV[0] = n
+ $stdout = f
+ load script
+ $stdout = STDOUT
+ }
+ end
+ end
+ prepare_fasta_output(100_000)
+ script: |
+ # The Computer Language Shootout
+ # http://shootout.alioth.debian.org
+ #
+ # contributed by jose fco. gonzalez
+ # modified by Sokolov Yura
+
+ seq = String.new
+
+ def frecuency( seq,length )
+ n, table = seq.length - length + 1, Hash.new(0)
+ f, i = nil, nil
+ (0 ... length).each do |f|
+ (f ... n).step(length) do |i|
+ table[seq[i,length]] += 1
+ end
+ end
+ [n,table]
+
+ end
+
+ def sort_by_freq( seq,length )
+ n,table = frecuency( seq,length )
+ a, b, v = nil, nil, nil
+ table.sort{|a,b| b[1] <=> a[1]}.each do |v|
+ puts "%s %.3f" % [v[0].upcase,((v[1]*100).to_f/n)]
+ end
+ puts
+ end
+
+ def find_seq( seq,s )
+ n,table = frecuency( seq,s.length )
+ puts "#{table[s].to_s}\t#{s.upcase}"
+ end
+
+ input = open(File.join(File.dirname($0), 'fasta.output.100000'), 'rb')
+
+ line = input.gets while line !~ /^>THREE/
+ line = input.gets
+
+ while (line !~ /^>/) & line do
+ seq << line.chomp
+ line = input.gets
+ end
+
+ [1,2].each {|i| sort_by_freq( seq,i ) }
+
+ %w(ggt ggta ggtatt ggtattttaatt ggtattttaatttatagt).each{|s| find_seq( seq,s) }
+ loop_count: 1
diff --git a/benchmark/bm_so_lists.rb b/benchmark/so_lists.rb
index e8f4a2a5f7..e8f4a2a5f7 100644
--- a/benchmark/bm_so_lists.rb
+++ b/benchmark/so_lists.rb
diff --git a/benchmark/bm_so_mandelbrot.rb b/benchmark/so_mandelbrot.rb
index 76331c64b8..76331c64b8 100644
--- a/benchmark/bm_so_mandelbrot.rb
+++ b/benchmark/so_mandelbrot.rb
diff --git a/benchmark/so_matrix.rb b/benchmark/so_matrix.rb
new file mode 100644
index 0000000000..2d1e72bda9
--- /dev/null
+++ b/benchmark/so_matrix.rb
@@ -0,0 +1,48 @@
+#!/usr/bin/ruby
+# -*- Ruby -*-
+# $Id: matrix-ruby.code,v 1.4 2004/11/13 07:42:14 bfulgham Exp $
+# http://www.bagley.org/~doug/shootout/
+
+n = 60 #Integer(ARGV.shift || 1)
+
+size = 40
+
+def mkmatrix(rows, cols)
+ count = 1
+ mx = Array.new(rows)
+ (0 .. (rows - 1)).each do |bi|
+ row = Array.new(cols, 0)
+ (0 .. (cols - 1)).each do |j|
+ row[j] = count
+ count += 1
+ end
+ mx[bi] = row
+ end
+ mx
+end
+
+def mmult(rows, cols, m1, m2)
+ m3 = Array.new(rows)
+ (0 .. (rows - 1)).each do |bi|
+ row = Array.new(cols, 0)
+ (0 .. (cols - 1)).each do |j|
+ val = 0
+ (0 .. (cols - 1)).each do |k|
+ val += m1.at(bi).at(k) * m2.at(k).at(j)
+ end
+ row[j] = val
+ end
+ m3[bi] = row
+ end
+ m3
+end
+
+m1 = mkmatrix(size, size)
+m2 = mkmatrix(size, size)
+mm = Array.new
+n.times do
+ mm = mmult(size, size, m1, m2)
+end
+# puts "#{mm[0][0]} #{mm[2][3]} #{mm[3][2]} #{mm[4][4]}"
+
+
diff --git a/benchmark/so_meteor_contest.rb b/benchmark/so_meteor_contest.rb
new file mode 100644
index 0000000000..d8c8e3ab9c
--- /dev/null
+++ b/benchmark/so_meteor_contest.rb
@@ -0,0 +1,563 @@
+#!/usr/bin/env ruby
+#
+# The Computer Language Shootout
+# http://shootout.alioth.debian.org
+# contributed by Kevin Barnes (Ruby novice)
+
+# PROGRAM: the main body is at the bottom.
+# 1) read about the problem here: http://www-128.ibm.com/developerworks/java/library/j-javaopt/
+# 2) see how I represent a board as a bitmask by reading the blank_board comments
+# 3) read as your mental paths take you
+
+def print *args
+end
+
+# class to represent all information about a particular rotation of a particular piece
+class Rotation
+ # an array (by location) containing a bit mask for how the piece maps at the given location.
+ # if the rotation is invalid at that location the mask will contain false
+ attr_reader :start_masks
+
+ # maps a direction to a relative location. these differ depending on whether it is an even or
+ # odd row being mapped from
+ @@rotation_even_adder = { :west => -1, :east => 1, :nw => -7, :ne => -6, :sw => 5, :se => 6 }
+ @@rotation_odd_adder = { :west => -1, :east => 1, :nw => -6, :ne => -5, :sw => 6, :se => 7 }
+
+ def initialize( directions )
+ @even_offsets, @odd_offsets = normalize_offsets( get_values( directions ))
+
+ @even_mask = mask_for_offsets( @even_offsets)
+ @odd_mask = mask_for_offsets( @odd_offsets)
+
+ @start_masks = Array.new(60)
+
+ # create the rotational masks by placing the base mask at the location and seeing if
+ # 1) it overlaps the boundaries and 2) it produces a prunable board. if either of these
+ # is true the piece cannot be placed
+ 0.upto(59) do | offset |
+ mask = is_even(offset) ? (@even_mask << offset) : (@odd_mask << offset)
+ if (blank_board & mask == 0 && !prunable(blank_board | mask, 0, true)) then
+ imask = compute_required( mask, offset)
+ @start_masks[offset] = [ mask, imask, imask | mask ]
+ else
+ @start_masks[offset] = false
+ end
+ end
+ end
+
+ def compute_required( mask, offset )
+ board = blank_board
+ 0.upto(offset) { | i | board |= 1 << i }
+ board |= mask
+ return 0 if (!prunable(board | mask, offset))
+ board = flood_fill(board,58)
+ count = 0
+ imask = 0
+ 0.upto(59) do | i |
+ if (board[i] == 0) then
+ imask |= (1 << i)
+ count += 1
+ end
+ end
+ (count > 0 && count < 5) ? imask : 0
+ end
+
+ def flood_fill( board, location)
+ return board if (board[location] == 1)
+ board |= 1 << location
+ row, col = location.divmod(6)
+ board = flood_fill( board, location - 1) if (col > 0)
+ board = flood_fill( board, location + 1) if (col < 4)
+ if (row % 2 == 0) then
+ board = flood_fill( board, location - 7) if (col > 0 && row > 0)
+ board = flood_fill( board, location - 6) if (row > 0)
+ board = flood_fill( board, location + 6) if (row < 9)
+ board = flood_fill( board, location + 5) if (col > 0 && row < 9)
+ else
+ board = flood_fill( board, location - 5) if (col < 4 && row > 0)
+ board = flood_fill( board, location - 6) if (row > 0)
+ board = flood_fill( board, location + 6) if (row < 9)
+ board = flood_fill( board, location + 7) if (col < 4 && row < 9)
+ end
+ board
+ end
+
+ # given a location, produces a list of relative locations covered by the piece at this rotation
+ def offsets( location)
+ if is_even( location) then
+ @even_offsets.collect { | value | value + location }
+ else
+ @odd_offsets.collect { | value | value + location }
+ end
+ end
+
+ # returns a set of offsets relative to the top-left most piece of the rotation (by even or odd rows)
+ # this is hard to explain. imagine we have this partial board:
+ # 0 0 0 0 0 x [positions 0-5]
+ # 0 0 1 1 0 x [positions 6-11]
+ # 0 0 1 0 0 x [positions 12-17]
+ # 0 1 0 0 0 x [positions 18-23]
+ # 0 1 0 0 0 x [positions 24-29]
+ # 0 0 0 0 0 x [positions 30-35]
+ # ...
+ # The top-left of the piece is at position 8, the
+ # board would be passed as a set of positions (values array) containing [8,9,14,19,25] not necessarily in that
+ # sorted order. Since that array starts on an odd row, the offsets for an odd row are: [0,1,6,11,17] obtained
+ # by subtracting 8 from everything. Now imagine the piece shifted up and to the right so it's on an even row:
+ # 0 0 0 1 1 x [positions 0-5]
+ # 0 0 1 0 0 x [positions 6-11]
+ # 0 0 1 0 0 x [positions 12-17]
+ # 0 1 0 0 0 x [positions 18-23]
+ # 0 0 0 0 0 x [positions 24-29]
+ # 0 0 0 0 0 x [positions 30-35]
+ # ...
+ # Now the positions are [3,4,8,14,19] which after subtracting the lowest value (3) gives [0,1,5,11,16] thus, the
+ # offsets for this particular piece are (in even, odd order) [0,1,5,11,16],[0,1,6,11,17] which is what
+ # this function would return
+ def normalize_offsets( values)
+ min = values.min
+ even_min = is_even(min)
+ other_min = even_min ? min + 6 : min + 7
+ other_values = values.collect do | value |
+ if is_even(value) then
+ value + 6 - other_min
+ else
+ value + 7 - other_min
+ end
+ end
+ values.collect! { | value | value - min }
+
+ if even_min then
+ [values, other_values]
+ else
+ [other_values, values]
+ end
+ end
+
+ # produce a bitmask representation of an array of offset locations
+ def mask_for_offsets( offsets )
+ mask = 0
+ offsets.each { | value | mask = mask + ( 1 << value ) }
+ mask
+ end
+
+ # finds a "safe" position that a position as described by a list of directions can be placed
+ # without falling off any edge of the board. the values returned a location to place the first piece
+ # at so it will fit after making the described moves
+ def start_adjust( directions )
+ south = east = 0;
+ directions.each do | direction |
+ east += 1 if ( direction == :sw || direction == :nw || direction == :west )
+ south += 1 if ( direction == :nw || direction == :ne )
+ end
+ south * 6 + east
+ end
+
+ # given a set of directions places the piece (as defined by a set of directions) on the board at
+ # a location that will not take it off the edge
+ def get_values( directions )
+ start = start_adjust(directions)
+ values = [ start ]
+ directions.each do | direction |
+ if (start % 12 >= 6) then
+ start += @@rotation_odd_adder[direction]
+ else
+ start += @@rotation_even_adder[direction]
+ end
+ values += [ start ]
+ end
+
+ # some moves take you back to an existing location, we'll strip duplicates
+ values.uniq
+ end
+end
+
+# describes a piece and caches information about its rotations to as to be efficient for iteration
+# ATTRIBUTES:
+# rotations -- all the rotations of the piece
+# type -- a numeic "name" of the piece
+# masks -- an array by location of all legal rotational masks (a n inner array) for that location
+# placed -- the mask that this piece was last placed at (not a location, but the actual mask used)
+class Piece
+ attr_reader :rotations, :type, :masks
+ attr_accessor :placed
+
+ # transform hashes that change one direction into another when you either flip or rotate a set of directions
+ @@flip_converter = { :west => :west, :east => :east, :nw => :sw, :ne => :se, :sw => :nw, :se => :ne }
+ @@rotate_converter = { :west => :nw, :east => :se, :nw => :ne, :ne => :east, :sw => :west, :se => :sw }
+
+ def initialize( directions, type )
+ @type = type
+ @rotations = Array.new();
+ @map = {}
+
+ generate_rotations( directions )
+ directions.collect! { | value | @@flip_converter[value] }
+ generate_rotations( directions )
+
+ # creates the masks AND a map that returns [location, rotation] for any given mask
+ # this is used when a board is found and we want to draw it, otherwise the map is unused
+ @masks = Array.new();
+ 0.upto(59) do | i |
+ even = true
+ @masks[i] = @rotations.collect do | rotation |
+ mask = rotation.start_masks[i]
+ @map[mask[0]] = [ i, rotation ] if (mask)
+ mask || nil
+ end
+ @masks[i].compact!
+ end
+ end
+
+ # rotates a set of directions through all six angles and adds a Rotation to the list for each one
+ def generate_rotations( directions )
+ 6.times do
+ rotations.push( Rotation.new(directions))
+ directions.collect! { | value | @@rotate_converter[value] }
+ end
+ end
+
+ # given a board string, adds this piece to the board at whatever location/rotation
+ # important: the outbound board string is 5 wide, the normal location notation is six wide (padded)
+ def fill_string( board_string)
+ location, rotation = @map[@placed]
+ rotation.offsets(location).each do | offset |
+ row, col = offset.divmod(6)
+ board_string[ row*5 + col, 1 ] = @type.to_s
+ end
+ end
+end
+
+# a blank bit board having this form:
+#
+# 0 0 0 0 0 1
+# 0 0 0 0 0 1
+# 0 0 0 0 0 1
+# 0 0 0 0 0 1
+# 0 0 0 0 0 1
+# 0 0 0 0 0 1
+# 0 0 0 0 0 1
+# 0 0 0 0 0 1
+# 0 0 0 0 0 1
+# 0 0 0 0 0 1
+# 1 1 1 1 1 1
+#
+# where left lest significant bit is the top left and the most significant is the lower right
+# the actual board only consists of the 0 places, the 1 places are blockers to keep things from running
+# off the edges or bottom
+def blank_board
+ 0b111111100000100000100000100000100000100000100000100000100000100000
+end
+
+def full_board
+ 0b111111111111111111111111111111111111111111111111111111111111111111
+end
+
+# determines if a location (bit position) is in an even row
+def is_even( location)
+ (location % 12) < 6
+end
+
+# support function that create three utility maps:
+# $converter -- for each row an array that maps a five bit row (via array mapping)
+# to the a five bit representation of the bits below it
+# $bit_count -- maps a five bit row (via array mapping) to the number of 1s in the row
+# @@new_regions -- maps a five bit row (via array mapping) to an array of "region" arrays
+# a region array has three values the first is a mask of bits in the region,
+# the second is the count of those bits and the third is identical to the first
+# examples:
+# 0b10010 => [ 0b01100, 2, 0b01100 ], [ 0b00001, 1, 0b00001]
+# 0b01010 => [ 0b10000, 1, 0b10000 ], [ 0b00100, 1, 0b00100 ], [ 0b00001, 1, 0b00001]
+# 0b10001 => [ 0b01110, 3, 0b01110 ]
+def create_collector_support
+ odd_map = [0b11, 0b110, 0b1100, 0b11000, 0b10000]
+ even_map = [0b1, 0b11, 0b110, 0b1100, 0b11000]
+
+ all_odds = Array.new(0b100000)
+ all_evens = Array.new(0b100000)
+ bit_counts = Array.new(0b100000)
+ new_regions = Array.new(0b100000)
+ 0.upto(0b11111) do | i |
+ bit_count = odd = even = 0
+ 0.upto(4) do | bit |
+ if (i[bit] == 1) then
+ bit_count += 1
+ odd |= odd_map[bit]
+ even |= even_map[bit]
+ end
+ end
+ all_odds[i] = odd
+ all_evens[i] = even
+ bit_counts[i] = bit_count
+ new_regions[i] = create_regions( i)
+ end
+
+ $converter = []
+ 10.times { | row | $converter.push((row % 2 == 0) ? all_evens : all_odds) }
+ $bit_counts = bit_counts
+ $regions = new_regions.collect { | set | set.collect { | value | [ value, bit_counts[value], value] } }
+end
+
+# determines if a board is punable, meaning that there is no possibility that it
+# can be filled up with pieces. A board is prunable if there is a grouping of unfilled spaces
+# that are not a multiple of five. The following board is an example of a prunable board:
+# 0 0 1 0 0
+# 0 1 0 0 0
+# 1 1 0 0 0
+# 0 1 0 0 0
+# 0 0 0 0 0
+# ...
+#
+# This board is prunable because the top left corner is only 3 bits in area, no piece will ever fit it
+# parameters:
+# board -- an initial bit board (6 bit padded rows, see blank_board for format)
+# location -- starting location, everything above and to the left is already full
+# slotting -- set to true only when testing initial pieces, when filling normally
+# additional assumptions are possible
+#
+# Algorithm:
+# The algorithm starts at the top row (as determined by location) and iterates a row at a time
+# maintainng counts of active open areas (kept in the collector array) each collector contains
+# three values at the start of an iteration:
+# 0: mask of bits that would be adjacent to the collector in this row
+# 1: the number of bits collected so far
+# 2: a scratch space starting as zero, but used during the computation to represent
+# the empty bits in the new row that are adjacent (position 0)
+# The exact procedure is described in-code
+def prunable( board, location, slotting = false)
+ collectors = []
+ # loop across the rows
+ (location / 6).to_i.upto(9) do | row_on |
+ # obtain a set of regions representing the bits of the current row.
+ regions = $regions[(board >> (row_on * 6)) & 0b11111]
+ converter = $converter[row_on]
+
+ # track the number of collectors at the start of the cycle so that
+ # we don't compute against newly created collectors, only existing collectors
+ initial_collector_count = collectors.length
+
+ # loop against the regions. For each region of the row
+ # we will see if it connects to one or more existing collectors.
+ # if it connects to 1 collector, the bits from the region are added to the
+ # bits of the collector and the mask is placed in collector[2]
+ # If the region overlaps more than one collector then all the collectors
+ # it overlaps with are merged into the first one (the others are set to nil in the array)
+ # if NO collectors are found then the region is copied as a new collector
+ regions.each do | region |
+ collector_found = nil
+ region_mask = region[2]
+ initial_collector_count.times do | collector_num |
+ collector = collectors[collector_num]
+ if (collector) then
+ collector_mask = collector[0]
+ if (collector_mask & region_mask != 0) then
+ if (collector_found) then
+ collector_found[0] |= collector_mask
+ collector_found[1] += collector[1]
+ collector_found[2] |= collector[2]
+ collectors[collector_num] = nil
+ else
+ collector_found = collector
+ collector[1] += region[1]
+ collector[2] |= region_mask
+ end
+ end
+ end
+ end
+ if (collector_found == nil) then
+ collectors.push(Array.new(region))
+ end
+ end
+
+ # check the existing collectors, if any collector overlapped no bits in the region its [2] value will
+ # be zero. The size of any such reaason is tested if it is not a multiple of five true is returned since
+ # the board is prunable. if it is a multiple of five it is removed.
+ # Collector that are still active have a new adjacent value [0] set based n the matched bits
+ # and have [2] cleared out for the next cycle.
+ collectors.length.times do | collector_num |
+ collector = collectors[collector_num]
+ if (collector) then
+ if (collector[2] == 0) then
+ return true if (collector[1] % 5 != 0)
+ collectors[collector_num] = nil
+ else
+ # if a collector matches all bits in the row then we can return unprunable early for the
+ # following reasons:
+ # 1) there can be no more unavailable bits bince we fill from the top left downward
+ # 2) all previous regions have been closed or joined so only this region can fail
+ # 3) this region must be good since there can never be only 1 region that is nuot
+ # a multiple of five
+ # this rule only applies when filling normally, so we ignore the rule if we are "slotting"
+ # in pieces to see what configurations work for them (the only other time this algorithm is used).
+ return false if (collector[2] == 0b11111 && !slotting)
+ collector[0] = converter[collector[2]]
+ collector[2] = 0
+ end
+ end
+ end
+
+ # get rid of all the empty converters for the next round
+ collectors.compact!
+ end
+ return false if (collectors.length <= 1) # 1 collector or less and the region is fine
+ collectors.any? { | collector | (collector[1] % 5) != 0 } # more than 1 and we test them all for bad size
+end
+
+# creates a region given a row mask. see prunable for what a "region" is
+def create_regions( value )
+ regions = []
+ cur_region = 0
+ 5.times do | bit |
+ if (value[bit] == 0) then
+ cur_region |= 1 << bit
+ else
+ if (cur_region != 0 ) then
+ regions.push( cur_region)
+ cur_region = 0;
+ end
+ end
+ end
+ regions.push(cur_region) if (cur_region != 0)
+ regions
+end
+
+# find up to the counted number of solutions (or all solutions) and prints the final result
+def find_all
+ find_top( 1)
+ find_top( 0)
+ print_results
+end
+
+# show the board
+def print_results
+ print "#{@boards_found} solutions found\n\n"
+ print_full_board( @min_board)
+ print "\n"
+ print_full_board( @max_board)
+ print "\n"
+end
+
+# finds solutions. This special version of the main function is only used for the top level
+# the reason for it is basically to force a particular ordering on how the rotations are tested for
+# the first piece. It is called twice, first looking for placements of the odd rotations and then
+# looking for placements of the even locations.
+#
+# WHY?
+# Since any found solution has an inverse we want to maximize finding solutions that are not already found
+# as an inverse. The inverse will ALWAYS be 3 one of the piece configurations that is exactly 3 rotations away
+# (an odd number). Checking even vs odd then produces a higher probability of finding more pieces earlier
+# in the cycle. We still need to keep checking all the permutations, but our probability of finding one will
+# diminish over time. Since we are TOLD how many to search for this lets us exit before checking all pieces
+# this bennifit is very great when seeking small numbers of solutions and is 0 when looking for more than the
+# maximum number
+def find_top( rotation_skip)
+ board = blank_board
+ (@pieces.length-1).times do
+ piece = @pieces.shift
+ piece.masks[0].each do | mask, imask, cmask |
+ if ((rotation_skip += 1) % 2 == 0) then
+ piece.placed = mask
+ find( 1, 1, board | mask)
+ end
+ end
+ @pieces.push(piece)
+ end
+ piece = @pieces.shift
+ @pieces.push(piece)
+end
+
+# the normail find routine, iterates through the available pieces, checks all rotations at the current location
+# and adds any boards found. depth is achieved via recursion. the overall approach is described
+# here: http://www-128.ibm.com/developerworks/java/library/j-javaopt/
+# parameters:
+# start_location -- where to start looking for place for the next piece at
+# placed -- number of pieces placed
+# board -- current state of the board
+#
+# see in-code comments
+def find( start_location, placed, board)
+ # find the next location to place a piece by looking for an empty bit
+ while board[start_location] == 1
+ start_location += 1
+ end
+
+ @pieces.length.times do
+ piece = @pieces.shift
+ piece.masks[start_location].each do | mask, imask, cmask |
+ if ( board & cmask == imask) then
+ piece.placed = mask
+ if (placed == 9) then
+ add_board
+ else
+ find( start_location + 1, placed + 1, board | mask)
+ end
+ end
+ end
+ @pieces.push(piece)
+ end
+end
+
+# print the board
+def print_full_board( board_string)
+ 10.times do | row |
+ print " " if (row % 2 == 1)
+ 5.times do | col |
+ print "#{board_string[row*5 + col,1]} "
+ end
+ print "\n"
+ end
+end
+
+# when a board is found we "draw it" into a string and then flip that string, adding both to
+# the list (hash) of solutions if they are unique.
+def add_board
+ board_string = "99999999999999999999999999999999999999999999999999"
+ @all_pieces.each { | piece | piece.fill_string( board_string ) }
+ save( board_string)
+ save( board_string.reverse)
+end
+
+# adds a board string to the list (if new) and updates the current best/worst board
+def save( board_string)
+ if (@all_boards[board_string] == nil) then
+ @min_board = board_string if (board_string < @min_board)
+ @max_board = board_string if (board_string > @max_board)
+ @all_boards.store(board_string,true)
+ @boards_found += 1
+
+ # the exit motif is a time saver. Ideally the function should return, but those tests
+ # take noticeable time (performance).
+ if (@boards_found == @stop_count) then
+ print_results
+ exit(0)
+ end
+ end
+end
+
+
+##
+## MAIN BODY :)
+##
+create_collector_support
+@pieces = [
+ Piece.new( [ :nw, :ne, :east, :east ], 2),
+ Piece.new( [ :ne, :se, :east, :ne ], 7),
+ Piece.new( [ :ne, :east, :ne, :nw ], 1),
+ Piece.new( [ :east, :sw, :sw, :se ], 6),
+ Piece.new( [ :east, :ne, :se, :ne ], 5),
+ Piece.new( [ :east, :east, :east, :se ], 0),
+ Piece.new( [ :ne, :nw, :se, :east, :se ], 4),
+ Piece.new( [ :se, :se, :se, :west ], 9),
+ Piece.new( [ :se, :se, :east, :se ], 8),
+ Piece.new( [ :east, :east, :sw, :se ], 3)
+ ];
+
+@all_pieces = Array.new( @pieces)
+
+@min_board = "99999999999999999999999999999999999999999999999999"
+@max_board = "00000000000000000000000000000000000000000000000000"
+@stop_count = ARGV[0].to_i || 2089
+@all_boards = {}
+@boards_found = 0
+
+find_all ######## DO IT!!!
diff --git a/benchmark/so_nbody.rb b/benchmark/so_nbody.rb
new file mode 100644
index 0000000000..9884fc4edc
--- /dev/null
+++ b/benchmark/so_nbody.rb
@@ -0,0 +1,148 @@
+# The Computer Language Shootout
+# http://shootout.alioth.debian.org
+#
+# Optimized for Ruby by Jesse Millikan
+# From version ported by Michael Neumann from the C gcc version,
+# which was written by Christoph Bauer.
+
+SOLAR_MASS = 4 * Math::PI**2
+DAYS_PER_YEAR = 365.24
+
+def _puts *args
+end
+
+class Planet
+ attr_accessor :x, :y, :z, :vx, :vy, :vz, :mass
+
+ def initialize(x, y, z, vx, vy, vz, mass)
+ @x, @y, @z = x, y, z
+ @vx, @vy, @vz = vx * DAYS_PER_YEAR, vy * DAYS_PER_YEAR, vz * DAYS_PER_YEAR
+ @mass = mass * SOLAR_MASS
+ end
+
+ def move_from_i(bodies, nbodies, dt, i)
+ while i < nbodies
+ b2 = bodies[i]
+ dx = @x - b2.x
+ dy = @y - b2.y
+ dz = @z - b2.z
+
+ distance = Math.sqrt(dx * dx + dy * dy + dz * dz)
+ mag = dt / (distance * distance * distance)
+ b_mass_mag, b2_mass_mag = @mass * mag, b2.mass * mag
+
+ @vx -= dx * b2_mass_mag
+ @vy -= dy * b2_mass_mag
+ @vz -= dz * b2_mass_mag
+ b2.vx += dx * b_mass_mag
+ b2.vy += dy * b_mass_mag
+ b2.vz += dz * b_mass_mag
+ i += 1
+ end
+
+ @x += dt * @vx
+ @y += dt * @vy
+ @z += dt * @vz
+ end
+end
+
+def energy(bodies)
+ e = 0.0
+ nbodies = bodies.size
+
+ for i in 0 ... nbodies
+ b = bodies[i]
+ e += 0.5 * b.mass * (b.vx * b.vx + b.vy * b.vy + b.vz * b.vz)
+ for j in (i + 1) ... nbodies
+ b2 = bodies[j]
+ dx = b.x - b2.x
+ dy = b.y - b2.y
+ dz = b.z - b2.z
+ distance = Math.sqrt(dx * dx + dy * dy + dz * dz)
+ e -= (b.mass * b2.mass) / distance
+ end
+ end
+ e
+end
+
+def offset_momentum(bodies)
+ px, py, pz = 0.0, 0.0, 0.0
+
+ for b in bodies
+ m = b.mass
+ px += b.vx * m
+ py += b.vy * m
+ pz += b.vz * m
+ end
+
+ b = bodies[0]
+ b.vx = - px / SOLAR_MASS
+ b.vy = - py / SOLAR_MASS
+ b.vz = - pz / SOLAR_MASS
+end
+
+BODIES = [
+ # sun
+ Planet.new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0),
+
+ # jupiter
+ Planet.new(
+ 4.84143144246472090e+00,
+ -1.16032004402742839e+00,
+ -1.03622044471123109e-01,
+ 1.66007664274403694e-03,
+ 7.69901118419740425e-03,
+ -6.90460016972063023e-05,
+ 9.54791938424326609e-04),
+
+ # saturn
+ Planet.new(
+ 8.34336671824457987e+00,
+ 4.12479856412430479e+00,
+ -4.03523417114321381e-01,
+ -2.76742510726862411e-03,
+ 4.99852801234917238e-03,
+ 2.30417297573763929e-05,
+ 2.85885980666130812e-04),
+
+ # uranus
+ Planet.new(
+ 1.28943695621391310e+01,
+ -1.51111514016986312e+01,
+ -2.23307578892655734e-01,
+ 2.96460137564761618e-03,
+ 2.37847173959480950e-03,
+ -2.96589568540237556e-05,
+ 4.36624404335156298e-05),
+
+ # neptune
+ Planet.new(
+ 1.53796971148509165e+01,
+ -2.59193146099879641e+01,
+ 1.79258772950371181e-01,
+ 2.68067772490389322e-03,
+ 1.62824170038242295e-03,
+ -9.51592254519715870e-05,
+ 5.15138902046611451e-05)
+]
+
+init = 200_000 # ARGV[0]
+n = Integer(init)
+
+offset_momentum(BODIES)
+
+puts "%.9f" % energy(BODIES)
+
+nbodies = BODIES.size
+dt = 0.01
+
+n.times do
+ i = 0
+ while i < nbodies
+ b = BODIES[i]
+ b.move_from_i(BODIES, nbodies, dt, i + 1)
+ i += 1
+ end
+end
+
+puts "%.9f" % energy(BODIES)
diff --git a/benchmark/so_nested_loop.rb b/benchmark/so_nested_loop.rb
new file mode 100644
index 0000000000..766fcf7b84
--- /dev/null
+++ b/benchmark/so_nested_loop.rb
@@ -0,0 +1,24 @@
+#!/usr/bin/ruby
+# -*- Ruby -*-
+# $Id: nestedloop-ruby.code,v 1.4 2004/11/13 07:42:22 bfulgham Exp $
+# http://www.bagley.org/~doug/shootout/
+# from Avi Bryant
+
+n = 16 # Integer(ARGV.shift || 1)
+x = 0
+n.times do
+ n.times do
+ n.times do
+ n.times do
+ n.times do
+ n.times do
+ x += 1
+ end
+ end
+ end
+ end
+ end
+end
+# puts x
+
+
diff --git a/benchmark/bm_so_nsieve.rb b/benchmark/so_nsieve.rb
index a65cc78233..a65cc78233 100644
--- a/benchmark/bm_so_nsieve.rb
+++ b/benchmark/so_nsieve.rb
diff --git a/benchmark/bm_so_nsieve_bits.rb b/benchmark/so_nsieve_bits.rb
index 6f958ee44e..6f958ee44e 100644
--- a/benchmark/bm_so_nsieve_bits.rb
+++ b/benchmark/so_nsieve_bits.rb
diff --git a/benchmark/so_object.rb b/benchmark/so_object.rb
new file mode 100644
index 0000000000..131f44624c
--- /dev/null
+++ b/benchmark/so_object.rb
@@ -0,0 +1,56 @@
+#!/usr/bin/ruby
+# -*- Ruby -*-
+# $Id: objinst-ruby.code,v 1.4 2004/11/13 07:42:25 bfulgham Exp $
+# http://www.bagley.org/~doug/shootout/
+# with help from Aristarkh Zagorodnikov
+
+class Toggle
+ def initialize(start_state)
+ @bool = start_state
+ end
+
+ def value
+ @bool
+ end
+
+ def activate
+ @bool = !@bool
+ self
+ end
+end
+
+class NthToggle < Toggle
+ def initialize(start_state, max_counter)
+ super start_state
+ @count_max = max_counter
+ @counter = 0
+ end
+
+ def activate
+ @counter += 1
+ if @counter >= @count_max
+ @bool = !@bool
+ @counter = 0
+ end
+ self
+ end
+end
+
+n = 1500000 # (ARGV.shift || 1).to_i
+
+toggle = Toggle.new 1
+5.times do
+ toggle.activate.value ? 'true' : 'false'
+end
+n.times do
+ toggle = Toggle.new 1
+end
+
+ntoggle = NthToggle.new 1, 3
+8.times do
+ ntoggle.activate.value ? 'true' : 'false'
+end
+n.times do
+ ntoggle = NthToggle.new 1, 3
+end
+
diff --git a/benchmark/bm_so_partial_sums.rb b/benchmark/so_partial_sums.rb
index 630b45cb8d..630b45cb8d 100644
--- a/benchmark/bm_so_partial_sums.rb
+++ b/benchmark/so_partial_sums.rb
diff --git a/benchmark/so_pidigits.rb b/benchmark/so_pidigits.rb
new file mode 100644
index 0000000000..9a537b2d1c
--- /dev/null
+++ b/benchmark/so_pidigits.rb
@@ -0,0 +1,92 @@
+# The Great Computer Language Shootout
+# http://shootout.alioth.debian.org/
+#
+# contributed by Gabriele Renzi
+
+class PiDigitSpigot
+
+ def initialize()
+ @z = Transformation.new 1,0,0,1
+ @x = Transformation.new 0,0,0,0
+ @inverse = Transformation.new 0,0,0,0
+ end
+
+ def next!
+ @y = @z.extract(3)
+ if safe? @y
+ @z = produce(@y)
+ @y
+ else
+ @z = consume @x.next!()
+ next!()
+ end
+ end
+
+ def safe?(digit)
+ digit == @z.extract(4)
+ end
+
+ def produce(i)
+ @inverse.qrst(10,-10*i,0,1).compose(@z)
+ end
+
+ def consume(a)
+ @z.compose(a)
+ end
+end
+
+
+class Transformation
+ attr_reader :q, :r, :s, :t
+ def initialize(q, r, s, t)
+ @q,@r,@s,@t,@k = q,r,s,t,0
+ end
+
+ def next!()
+ @q = @k = @k + 1
+ @r = 4 * @k + 2
+ @s = 0
+ @t = 2 * @k + 1
+ self
+ end
+
+ def extract(j)
+ (@q * j + @r) / (@s * j + @t)
+ end
+
+ def compose(a)
+ self.class.new( @q * a.q,
+ @q * a.r + r * a.t,
+ @s * a.q + t * a.s,
+ @s * a.r + t * a.t
+ )
+ end
+
+ def qrst *args
+ initialize *args
+ self
+ end
+
+
+end
+
+
+WIDTH = 10
+n = 2_500 # Integer(ARGV[0])
+j = 0
+
+digits = PiDigitSpigot.new
+
+while n > 0
+ if n >= WIDTH
+ WIDTH.times {print digits.next!}
+ j += WIDTH
+ else
+ n.times {print digits.next!}
+ (WIDTH-n).times {print " "}
+ j += n
+ end
+ puts "\t:"+j.to_s
+ n -= WIDTH
+end
+
diff --git a/benchmark/bm_so_random.rb b/benchmark/so_random.rb
index a66b9e8e63..a66b9e8e63 100644
--- a/benchmark/bm_so_random.rb
+++ b/benchmark/so_random.rb
diff --git a/benchmark/so_reverse_complement.yml b/benchmark/so_reverse_complement.yml
new file mode 100644
index 0000000000..de05eedfc4
--- /dev/null
+++ b/benchmark/so_reverse_complement.yml
@@ -0,0 +1,137 @@
+prelude: |
+ bm_so_fasta = <<'EOS'
+ # The Computer Language Shootout
+ # http://shootout.alioth.debian.org/
+ # Contributed by Sokolov Yura
+
+ $last = 42.0
+ def gen_random(max, im=139968, ia=3877, ic=29573)
+ (max * ($last = ($last * ia + ic) % im)) / im
+ end
+
+ alu =
+ "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG"+
+ "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA"+
+ "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT"+
+ "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA"+
+ "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG"+
+ "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC"+
+ "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA"
+
+ iub = [
+ ["a", 0.27],
+ ["c", 0.12],
+ ["g", 0.12],
+ ["t", 0.27],
+
+ ["B", 0.02],
+ ["D", 0.02],
+ ["H", 0.02],
+ ["K", 0.02],
+ ["M", 0.02],
+ ["N", 0.02],
+ ["R", 0.02],
+ ["S", 0.02],
+ ["V", 0.02],
+ ["W", 0.02],
+ ["Y", 0.02],
+ ]
+ homosapiens = [
+ ["a", 0.3029549426680],
+ ["c", 0.1979883004921],
+ ["g", 0.1975473066391],
+ ["t", 0.3015094502008],
+ ]
+
+ def make_repeat_fasta(id, desc, src, n)
+ puts ">#{id} #{desc}"
+ v = nil
+ width = 60
+ l = src.length
+ s = src * ((n / l) + 1)
+ s.slice!(n, l)
+ puts(s.scan(/.{1,#{width}}/).join("\n"))
+ end
+
+ def make_random_fasta(id, desc, table, n)
+ puts ">#{id} #{desc}"
+ rand, v = nil,nil
+ width = 60
+ chunk = 1 * width
+ prob = 0.0
+ table.each{|v| v[1]= (prob += v[1])}
+ for i in 1..(n/width)
+ puts((1..width).collect{
+ rand = gen_random(1.0)
+ table.find{|v| v[1]>rand}[0]
+ }.join)
+ end
+ if n%width != 0
+ puts((1..(n%width)).collect{
+ rand = gen_random(1.0)
+ table.find{|v| v[1]>rand}[0]
+ }.join)
+ end
+ end
+
+
+ n = (ARGV[0] or 250_000).to_i
+
+ make_repeat_fasta('ONE', 'Homo sapiens alu', alu, n*2)
+ make_random_fasta('TWO', 'IUB ambiguity codes', iub, n*3)
+ make_random_fasta('THREE', 'Homo sapiens frequency', homosapiens, n*5)
+ EOS
+benchmark:
+ - name: so_reverse_complement
+ prelude: |
+ script = File.join(File.dirname($0), 'bm_so_fasta.rb')
+ File.write(script, bm_so_fasta)
+
+ def prepare_fasta_output n
+ filebase = File.join(File.dirname($0), 'fasta.output')
+ script = File.join(File.dirname($0), 'bm_so_fasta.rb')
+ file = "#{filebase}.#{n}"
+
+ unless FileTest.exist?(file)
+ STDERR.puts "preparing #{file}"
+
+ open(file, 'w'){|f|
+ ARGV[0] = n
+ $stdout = f
+ load script
+ $stdout = STDOUT
+ }
+ end
+ end
+ prepare_fasta_output(2_500_000)
+ script: |
+ # The Great Computer Language Shootout
+ # http://shootout.alioth.debian.org/
+ #
+ # Contributed by Peter Bjarke Olsen
+ # Modified by Doug King
+
+ seq=Array.new
+
+ def revcomp(seq)
+ seq.reverse!.tr!('wsatugcyrkmbdhvnATUGCYRKMBDHVN','WSTAACGRYMKVHDBNTAACGRYMKVHDBN')
+ stringlen=seq.length
+ 0.step(stringlen-1,60) {|x| print seq.slice(x,60) , "\n"}
+ end
+
+ input = open(File.join(File.dirname($0), 'fasta.output.2500000'), 'rb')
+
+ while input.gets
+ if $_ =~ />/
+ if seq.length != 0
+ revcomp(seq.join)
+ seq=Array.new
+ end
+ puts $_
+ else
+ $_.sub(/\n/,'')
+ seq.push $_
+ end
+ end
+ revcomp(seq.join)
+ loop_count: 1
diff --git a/benchmark/bm_so_sieve.rb b/benchmark/so_sieve.rb
index 43dc302648..43dc302648 100644
--- a/benchmark/bm_so_sieve.rb
+++ b/benchmark/so_sieve.rb
diff --git a/benchmark/bm_so_spectralnorm.rb b/benchmark/so_spectralnorm.rb
index 6b97206689..6b97206689 100644
--- a/benchmark/bm_so_spectralnorm.rb
+++ b/benchmark/so_spectralnorm.rb
diff --git a/benchmark/string_capitalize.yml b/benchmark/string_capitalize.yml
new file mode 100644
index 0000000000..7d23fd3d35
--- /dev/null
+++ b/benchmark/string_capitalize.yml
@@ -0,0 +1,10 @@
+prelude: |
+ str1 = [*"a".."m",*"N".."Z",*"0".."9"].join("")
+ str10 = str1 * 10
+ str100 = str10 * 10
+ str1000 = str100 * 10
+benchmark:
+ capitalize-1: str1.capitalize
+ capitalize-10: str10.capitalize
+ capitalize-100: str100.capitalize
+ capitalize-1000: str1000.capitalize
diff --git a/benchmark/string_casecmp.yml b/benchmark/string_casecmp.yml
new file mode 100644
index 0000000000..88a3555c8a
--- /dev/null
+++ b/benchmark/string_casecmp.yml
@@ -0,0 +1,28 @@
+prelude: |
+ lstr1 = [*"a".."z",*"0".."9"].join("")
+ lstr10 = lstr1 * 10
+ lstr100 = lstr10 * 10
+ lstr1000 = lstr100 * 10
+ lnonascii1 = [*"\u{e0}".."\u{ff}"].join("")
+ lnonascii10 = lnonascii1 * 10
+ lnonascii100 = lnonascii10 * 10
+ lnonascii1000 = lnonascii100 * 10
+ ustr1 = [*"A".."Z",*"0".."9"].join("")
+ ustr10 = ustr1 * 10
+ ustr100 = ustr10 * 10
+ ustr1000 = ustr100 * 10
+ unonascii1 = [*"\u{c0}".."\u{df}"].join("")
+ unonascii10 = unonascii1 * 10
+ unonascii100 = unonascii10 * 10
+ unonascii1000 = unonascii100 * 10
+benchmark:
+ casecmp-1: lstr1.casecmp(ustr1)
+ casecmp-10: lstr10.casecmp(ustr10)
+ casecmp-100: lstr100.casecmp(ustr100)
+ casecmp-1000: lstr1000.casecmp(ustr1000)
+ casecmp-1000vs10: lstr1000.casecmp(ustr10)
+ casecmp-nonascii1: lnonascii1.casecmp(unonascii1)
+ casecmp-nonascii10: lnonascii10.casecmp(unonascii10)
+ casecmp-nonascii100: lnonascii100.casecmp(unonascii100)
+ casecmp-nonascii1000: lnonascii1000.casecmp(unonascii1000)
+ casecmp-nonascii1000vs10: lnonascii1000.casecmp(unonascii10)
diff --git a/benchmark/string_casecmp_p.yml b/benchmark/string_casecmp_p.yml
new file mode 100644
index 0000000000..a790ce7d55
--- /dev/null
+++ b/benchmark/string_casecmp_p.yml
@@ -0,0 +1,26 @@
+prelude: |
+ lstr1 = [*"a".."z",*"0".."9"].join("")
+ lstr10 = lstr1 * 10
+ lstr100 = lstr10 * 10
+ lstr1000 = lstr100 * 10
+ lnonascii1 = [*"\u{e0}".."\u{ff}"].join("")
+ lnonascii10 = lnonascii1 * 10
+ lnonascii100 = lnonascii10 * 10
+ lnonascii1000 = lnonascii100 * 10
+ ustr1 = [*"A".."Z",*"0".."9"].join("")
+ ustr10 = ustr1 * 10
+ ustr100 = ustr10 * 10
+ ustr1000 = ustr100 * 10
+ unonascii1 = [*"\u{c0}".."\u{df}"].join("")
+ unonascii10 = unonascii1 * 10
+ unonascii100 = unonascii10 * 10
+ unonascii1000 = unonascii100 * 10
+benchmark:
+ casecmp_p-1: lstr1.casecmp?(ustr1)
+ casecmp_p-10: lstr10.casecmp?(ustr10)
+ casecmp_p-100: lstr100.casecmp?(ustr100)
+ casecmp_p-1000: lstr1000.casecmp?(ustr1000)
+ casecmp_p-nonascii1: lnonascii1.casecmp?(unonascii1)
+ casecmp_p-nonascii10: lnonascii10.casecmp?(unonascii10)
+ casecmp_p-nonascii100: lnonascii100.casecmp?(unonascii100)
+ casecmp_p-nonascii1000: lnonascii1000.casecmp?(unonascii1000)
diff --git a/benchmark/string_concat.yml b/benchmark/string_concat.yml
new file mode 100644
index 0000000000..f11f95ee9a
--- /dev/null
+++ b/benchmark/string_concat.yml
@@ -0,0 +1,51 @@
+prelude: |
+ CHUNK = "a" * 64
+ UCHUNK = "é" * 32
+ SHORT = "a" * (GC::INTERNAL_CONSTANTS[:BASE_SLOT_SIZE] / 2)
+ LONG = "a" * (GC::INTERNAL_CONSTANTS[:BASE_SLOT_SIZE] * 2)
+ GC.disable # GC causes a lot of variance
+benchmark:
+ binary_concat_7bit: |
+ buffer = String.new(capacity: 4096, encoding: Encoding::BINARY)
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ utf8_concat_7bit: |
+ buffer = String.new(capacity: 4096, encoding: Encoding::UTF_8)
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ buffer << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK << CHUNK
+ utf8_concat_UTF8: |
+ buffer = String.new(capacity: 4096, encoding: Encoding::UTF_8)
+ buffer << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK
+ buffer << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK
+ buffer << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK
+ buffer << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK
+ buffer << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK
+ buffer << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK
+ buffer << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK
+ buffer << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK << UCHUNK
+ interpolation: |
+ buffer = "#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}" \
+ "#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}" \
+ "#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}" \
+ "#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}" \
+ "#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}" \
+ "#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}" \
+ "#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}" \
+ "#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}" \
+ "#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}#{CHUNK}"
+ interpolation_same_heap: |
+ buffer = "#{SHORT}#{SHORT}"
+ interpolation_switching_heaps: |
+ buffer = "#{SHORT}#{LONG}"
diff --git a/benchmark/string_downcase.yml b/benchmark/string_downcase.yml
new file mode 100644
index 0000000000..1fea6afbec
--- /dev/null
+++ b/benchmark/string_downcase.yml
@@ -0,0 +1,18 @@
+prelude: |
+ str1 = [*"A".."Z",*"0".."9"].join("")
+ str10 = str1 * 10
+ str100 = str10 * 10
+ str1000 = str100 * 10
+ nonascii1 = [*"\u{c0}".."\u{df}"].join("")
+ nonascii10 = nonascii1 * 10
+ nonascii100 = nonascii10 * 10
+ nonascii1000 = nonascii100 * 10
+benchmark:
+ downcase-1: str1.upcase
+ downcase-10: str10.upcase
+ downcase-100: str100.upcase
+ downcase-1000: str1000.upcase
+ downcase-nonascii1: nonascii1.downcase
+ downcase-nonascii10: nonascii10.downcase
+ downcase-nonascii100: nonascii100.downcase
+ downcase-nonascii1000: nonascii1000.downcase
diff --git a/benchmark/string_dup.yml b/benchmark/string_dup.yml
new file mode 100644
index 0000000000..90793f9f2a
--- /dev/null
+++ b/benchmark/string_dup.yml
@@ -0,0 +1,7 @@
+prelude: |
+ # frozen_string_literal: true
+benchmark:
+ uplus: |
+ +"A"
+ dup: |
+ "A".dup
diff --git a/benchmark/string_fstring.yml b/benchmark/string_fstring.yml
new file mode 100644
index 0000000000..cafef1f3fe
--- /dev/null
+++ b/benchmark/string_fstring.yml
@@ -0,0 +1,16 @@
+benchmark:
+ fstring_random: |
+ i = 0
+ str = "same".dup
+ while i < 5_000_000
+ -(i.to_s.freeze)
+ i += 1
+ end
+ fstring_same: |
+ i = 0
+ str = "same".dup
+ while i < 10_000_000
+ -str
+ i += 1
+ end
+loop_count: 1
diff --git a/benchmark/string_gsub.yml b/benchmark/string_gsub.yml
new file mode 100644
index 0000000000..0f964337dd
--- /dev/null
+++ b/benchmark/string_gsub.yml
@@ -0,0 +1,43 @@
+prelude: |
+ # frozen_string_literal: true
+ STR = ((("a" * 31) + "<") * 1000).freeze
+ STR_UNICODE = ((("a" * 30) + "\u2028") * 1000).freeze
+ ESCAPED_CHARS_BINARY = {
+ "\u2028".b => '\u2028'.b,
+ "\u2029".b => '\u2029'.b,
+ ">".b => '\u003e'.b.freeze,
+ "<".b => '\u003c'.b.freeze,
+ "&".b => '\u0026'.b.freeze,
+ }
+ BINARY_PATTERN = Regexp.union(ESCAPED_CHARS_BINARY.keys)
+
+ ESCAPED_CHARS = {
+ "\u2028" => '\u2028',
+ "\u2029" => '\u2029',
+ ">" => '\u003e',
+ "<" => '\u003c',
+ "&" => '\u0026',
+ }
+ ESCAPE_PATTERN = Regexp.union(ESCAPED_CHARS.keys)
+
+
+benchmark:
+ escape: |
+ str = STR.dup
+ str.gsub!(ESCAPE_PATTERN, ESCAPED_CHARS)
+ str
+
+ escape_bin: |
+ str = STR.b
+ str.gsub!(BINARY_PATTERN, ESCAPED_CHARS_BINARY)
+ str.force_encoding(Encoding::UTF_8)
+
+ escape_utf8: |
+ str = STR_UNICODE.dup
+ str.gsub!(ESCAPE_PATTERN, ESCAPED_CHARS)
+ str
+
+ escape_utf8_bin: |
+ str = STR_UNICODE.b
+ str.gsub!(BINARY_PATTERN, ESCAPED_CHARS_BINARY)
+ str.force_encoding(Encoding::UTF_8)
diff --git a/benchmark/string_index.rb b/benchmark/string_index.rb
new file mode 100644
index 0000000000..7783111082
--- /dev/null
+++ b/benchmark/string_index.rb
@@ -0,0 +1,3 @@
+str1 = "ã‚" * 1024 + "ã„" # not single byte optimizable
+str2 = "ã„"
+100_000.times { str1.index(str2) }
diff --git a/benchmark/string_rpartition.yml b/benchmark/string_rpartition.yml
new file mode 100644
index 0000000000..37e9d1b071
--- /dev/null
+++ b/benchmark/string_rpartition.yml
@@ -0,0 +1,18 @@
+prelude: |
+ str1 = [*"a".."z",*"0".."9"].join("")
+ str10 = str1 * 10 + ":"
+ str100 = str1 * 100 + ":"
+ str1000 = str1 * 1000 + ":"
+ nonascii1 = [*"\u{e0}".."\u{ff}"].join("")
+ nonascii10 = nonascii1 * 10 + ":"
+ nonascii100 = nonascii1 * 100 + ":"
+ nonascii1000 = nonascii1 * 1000 + ":"
+benchmark:
+ rpartition-1: str1.rpartition(":")
+ rpartition-10: str10.rpartition(":")
+ rpartition-100: str100.rpartition(":")
+ rpartition-1000: str1000.rpartition(":")
+ rpartition-nonascii1: nonascii1.rpartition(":")
+ rpartition-nonascii10: nonascii10.rpartition(":")
+ rpartition-nonascii100: nonascii100.rpartition(":")
+ rpartition-nonascii1000: nonascii1000.rpartition(":")
diff --git a/benchmark/string_scan_re.rb b/benchmark/string_scan_re.rb
new file mode 100644
index 0000000000..b0d60201a9
--- /dev/null
+++ b/benchmark/string_scan_re.rb
@@ -0,0 +1,2 @@
+str = Array.new(1_000, 'abc').join(',')
+1_000.times { str.scan(/abc/) }
diff --git a/benchmark/string_scan_str.rb b/benchmark/string_scan_str.rb
new file mode 100644
index 0000000000..42440bd948
--- /dev/null
+++ b/benchmark/string_scan_str.rb
@@ -0,0 +1,2 @@
+str = Array.new(1_000, 'abc').join(',')
+1_000.times { str.scan('abc') }
diff --git a/benchmark/string_slice.yml b/benchmark/string_slice.yml
new file mode 100644
index 0000000000..fc2393c5d1
--- /dev/null
+++ b/benchmark/string_slice.yml
@@ -0,0 +1,11 @@
+prelude: |
+ long_string = "x"*1000+"-hår"
+benchmark:
+ regexp-short: |
+ "x-hår".slice!(/-(.)(.)(.)/, 3)
+ regexp-long: |
+ long_string.dup.slice!(/-(.)(.)(.)/, 3)
+ string-short: |
+ "x-hår".slice!("r")
+ string-long: |
+ long_string.dup.slice!("r")
diff --git a/benchmark/string_split.yml b/benchmark/string_split.yml
new file mode 100644
index 0000000000..cc2c7d7855
--- /dev/null
+++ b/benchmark/string_split.yml
@@ -0,0 +1,22 @@
+prelude: |
+ str1 = [*0..5].join(" ") + " "
+ str10 = str1 * 10
+ str100 = str10 * 10
+ str1000 = str100 * 10
+benchmark:
+ to_chars-1: str1.split('')
+ to_chars-10: str10.split('')
+ to_chars-100: str100.split('')
+ to_chars-1000: str1000.split('')
+ to_words-1: str1.split(' ')
+ to_words-10: str10.split(' ')
+ to_words-100: str100.split(' ')
+ to_words-1000: str1000.split(' ')
+ re_chars-1: str1.split(//)
+ re_chars-10: str10.split(//)
+ re_chars-100: str100.split(//)
+ re_chars-1000: str1000.split(//)
+ re_space-1: str1.split(/ /)
+ re_space-10: str10.split(/ /)
+ re_space-100: str100.split(/ /)
+ re_space-1000: str1000.split(/ /)
diff --git a/benchmark/string_swapcase.yml b/benchmark/string_swapcase.yml
new file mode 100644
index 0000000000..eeb5928907
--- /dev/null
+++ b/benchmark/string_swapcase.yml
@@ -0,0 +1,18 @@
+prelude: |
+ str1 = [*"A".."M",*"n".."z",*"0".."9"].join("")
+ str10 = str1 * 10
+ str100 = str10 * 10
+ str1000 = str100 * 10
+ nonascii1 = [*"\u{c0}".."\u{cf}",*"\u{f0}".."\u{ff}"].join("")
+ nonascii10 = nonascii1 * 10
+ nonascii100 = nonascii10 * 10
+ nonascii1000 = nonascii100 * 10
+benchmark:
+ swapcase-1: str1.swapcase
+ swapcase-10: str10.swapcase
+ swapcase-100: str100.swapcase
+ swapcase-1000: str1000.swapcase
+ swapcase-nonascii1: nonascii1.swapcase
+ swapcase-nonascii10: nonascii10.swapcase
+ swapcase-nonascii100: nonascii100.swapcase
+ swapcase-nonascii1000: nonascii1000.swapcase
diff --git a/benchmark/string_upcase.yml b/benchmark/string_upcase.yml
new file mode 100644
index 0000000000..dab84bbde2
--- /dev/null
+++ b/benchmark/string_upcase.yml
@@ -0,0 +1,18 @@
+prelude: |
+ str1 = [*"a".."z",*"0".."9"].join("")
+ str10 = str1 * 10
+ str100 = str10 * 10
+ str1000 = str100 * 10
+ nonascii1 = [*"\u{e0}".."\u{ff}"].join("")
+ nonascii10 = nonascii1 * 10
+ nonascii100 = nonascii10 * 10
+ nonascii1000 = nonascii100 * 10
+benchmark:
+ upcase-1: str1.upcase
+ upcase-10: str10.upcase
+ upcase-100: str100.upcase
+ upcase-1000: str1000.upcase
+ upcase-nonascii1: nonascii1.upcase
+ upcase-nonascii10: nonascii10.upcase
+ upcase-nonascii100: nonascii100.upcase
+ upcase-nonascii1000: nonascii1000.upcase
diff --git a/benchmark/struct_accessor.yml b/benchmark/struct_accessor.yml
new file mode 100644
index 0000000000..d95240e2dd
--- /dev/null
+++ b/benchmark/struct_accessor.yml
@@ -0,0 +1,37 @@
+prelude: |
+ C = Struct.new(:x) do
+ def initialize(...)
+ super
+ @ivar = 42
+ end
+
+ attr_accessor :ivar
+
+ class_eval <<-END
+ def r
+ #{'x;'*256}
+ end
+ def w
+ #{'self.x = nil;'*256}
+ end
+ def rm
+ m = method(:x)
+ #{'m.call;'*256}
+ end
+ def wm
+ m = method(:x=)
+ #{'m.call(nil);'*256}
+ end
+ def r_ivar
+ #{'ivar;'*256}
+ end
+ END
+ end
+ C.new(nil) # ensure common shape is known
+ obj = C.new(nil)
+benchmark:
+ member_reader: "obj.r"
+ member_writer: "obj.w"
+ member_reader_method: "obj.rm"
+ member_writer_method: "obj.wm"
+ ivar_reader: "obj.r_ivar"
diff --git a/benchmark/time_at.yml b/benchmark/time_at.yml
new file mode 100644
index 0000000000..3247efbe77
--- /dev/null
+++ b/benchmark/time_at.yml
@@ -0,0 +1,7 @@
+prelude: |
+ # frozen_string_literal: true
+benchmark:
+ - 'Time.at(0)'
+ - 'Time.at(0, 500)'
+ - 'Time.at(0, in: "+09:00")'
+ - 'Time.at(0, 500, in: "+09:00")'
diff --git a/benchmark/time_new.yml b/benchmark/time_new.yml
new file mode 100644
index 0000000000..5947dd3a41
--- /dev/null
+++ b/benchmark/time_new.yml
@@ -0,0 +1,4 @@
+benchmark:
+ - 'Time.new(2021)'
+ - 'Time.new(2021, 8, 22)'
+ - 'Time.new(2021, 8, 22, in: "+09:00")'
diff --git a/benchmark/time_now.yml b/benchmark/time_now.yml
new file mode 100644
index 0000000000..9336877cd4
--- /dev/null
+++ b/benchmark/time_now.yml
@@ -0,0 +1,4 @@
+benchmark:
+ - 'Time.now'
+ - 'Time.now(in: "+09:00")'
+ - 'Time.now.year'
diff --git a/benchmark/time_parse.yml b/benchmark/time_parse.yml
new file mode 100644
index 0000000000..6060b58bc6
--- /dev/null
+++ b/benchmark/time_parse.yml
@@ -0,0 +1,10 @@
+prelude: |
+ require 'time'
+ inspect = "2021-08-23 09:57:02 +0900"
+ iso8601 = "2021-08-23T09:57:02+09:00"
+benchmark:
+ - Time.iso8601(iso8601)
+ - Time.parse(iso8601)
+ - Time.parse(inspect)
+ - Time.new(iso8601) rescue Time.iso8601(iso8601)
+ - Time.new(inspect) rescue Time.parse(inspect)
diff --git a/benchmark/time_strftime.yml b/benchmark/time_strftime.yml
new file mode 100644
index 0000000000..28f62aec87
--- /dev/null
+++ b/benchmark/time_strftime.yml
@@ -0,0 +1,7 @@
+prelude: |
+ # frozen_string_literal: true
+ time = Time.now
+benchmark:
+ - time.strftime("%FT%T") # 19B
+ - time.strftime("%FT%T.%3N") # 23B
+ - time.strftime("%FT%T.%6N") # 26B
diff --git a/benchmark/time_strptime.yml b/benchmark/time_strptime.yml
new file mode 100644
index 0000000000..8d89ebb7a7
--- /dev/null
+++ b/benchmark/time_strptime.yml
@@ -0,0 +1,13 @@
+prelude: |
+ require 'time'
+benchmark:
+ - Time.strptime("28/Aug/2005:06:54:20 +0000", "%d/%b/%Y:%T %z")
+ - Time.strptime("1", "%s")
+ - Time.strptime("0 +0100", "%s %z")
+ - Time.strptime("0 UTC", "%s %z")
+ - Time.strptime("1.5", "%s.%N")
+ - Time.strptime("1.000000000001", "%s.%N")
+ - Time.strptime("20010203 -0200", "%Y%m%d %z")
+ - Time.strptime("20010203 UTC", "%Y%m%d %z")
+ - Time.strptime("2018-365", "%Y-%j")
+ - Time.strptime("2018-091", "%Y-%j")
diff --git a/benchmark/time_subsec.rb b/benchmark/time_subsec.rb
new file mode 100644
index 0000000000..505021c701
--- /dev/null
+++ b/benchmark/time_subsec.rb
@@ -0,0 +1,2 @@
+t = Time.now
+4000000.times { t.subsec }
diff --git a/benchmark/time_xmlschema.yml b/benchmark/time_xmlschema.yml
new file mode 100644
index 0000000000..654e5cfcbc
--- /dev/null
+++ b/benchmark/time_xmlschema.yml
@@ -0,0 +1,27 @@
+prelude: |
+ # frozen_string_literal
+ unless Time.method_defined?(:xmlschema)
+ class Time
+ def xmlschema(fraction_digits=0)
+ fraction_digits = fraction_digits.to_i
+ s = strftime("%FT%T")
+ if fraction_digits > 0
+ s << strftime(".%#{fraction_digits}N")
+ end
+ s << (utc? ? 'Z' : strftime("%:z"))
+ end
+ end
+ end
+ time = Time.now
+ utc_time = Time.now.utc
+ fraction_sec = Time.at(123456789.quo(9999999999)).getlocal("+09:00")
+ future_time = Time.utc(10000)
+benchmark:
+ - time.xmlschema
+ - utc_time.xmlschema
+ - time.xmlschema(6)
+ - utc_time.xmlschema(6)
+ - time.xmlschema(9)
+ - utc_time.xmlschema(9)
+ - fraction_sec.xmlschema(10)
+ - future_time.xmlschema
diff --git a/benchmark/vm_array.yml b/benchmark/vm_array.yml
new file mode 100644
index 0000000000..2a177237ef
--- /dev/null
+++ b/benchmark/vm_array.yml
@@ -0,0 +1,4 @@
+benchmark:
+ vm_array: |
+ a = [1,2,3,4,5,6,7,8,9,10]
+loop_count: 6000000
diff --git a/benchmark/vm_attr_ivar.yml b/benchmark/vm_attr_ivar.yml
new file mode 100644
index 0000000000..75b803478e
--- /dev/null
+++ b/benchmark/vm_attr_ivar.yml
@@ -0,0 +1,14 @@
+prelude: |
+ class C
+ attr_reader :a, :b
+ def initialize
+ @a = nil
+ @b = nil
+ end
+ end
+ obj = C.new
+benchmark:
+ vm_attr_ivar: |
+ j = obj.a
+ k = obj.b
+loop_count: 30000000
diff --git a/benchmark/vm_attr_ivar_set.yml b/benchmark/vm_attr_ivar_set.yml
new file mode 100644
index 0000000000..a0d379b18a
--- /dev/null
+++ b/benchmark/vm_attr_ivar_set.yml
@@ -0,0 +1,14 @@
+prelude: |
+ class C
+ attr_accessor :a, :b
+ def initialize
+ @a = nil
+ @b = nil
+ end
+ end
+ obj = C.new
+benchmark:
+ vm_attr_ivar_set: |
+ obj.a = 1
+ obj.b = 2
+loop_count: 30000000
diff --git a/benchmark/bm_vm3_backtrace.rb b/benchmark/vm_backtrace.rb
index 0fbf73e1ca..0fbf73e1ca 100644
--- a/benchmark/bm_vm3_backtrace.rb
+++ b/benchmark/vm_backtrace.rb
diff --git a/benchmark/vm_bigarray.yml b/benchmark/vm_bigarray.yml
new file mode 100644
index 0000000000..8b2d3f3443
--- /dev/null
+++ b/benchmark/vm_bigarray.yml
@@ -0,0 +1,105 @@
+benchmark:
+ vm_bigarray: |
+ a = [
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ 1,2,3,4,5,6,7,8,9,10,
+ ]
+loop_count: 6000000
diff --git a/benchmark/vm_bighash.yml b/benchmark/vm_bighash.yml
new file mode 100644
index 0000000000..4dacfde793
--- /dev/null
+++ b/benchmark/vm_bighash.yml
@@ -0,0 +1,4 @@
+benchmark:
+ vm_bighash: |
+ a = {0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9, 10=>10, 11=>11, 12=>12, 13=>13, 14=>14, 15=>15, 16=>16, 17=>17, 18=>18, 19=>19, 20=>20, 21=>21, 22=>22, 23=>23, 24=>24, 25=>25, 26=>26, 27=>27, 28=>28, 29=>29, 30=>30, 31=>31, 32=>32, 33=>33, 34=>34, 35=>35, 36=>36, 37=>37, 38=>38, 39=>39, 40=>40, 41=>41, 42=>42, 43=>43, 44=>44, 45=>45, 46=>46, 47=>47, 48=>48, 49=>49, 50=>50, 51=>51, 52=>52, 53=>53, 54=>54, 55=>55, 56=>56, 57=>57, 58=>58, 59=>59, 60=>60, 61=>61, 62=>62, 63=>63, 64=>64, 65=>65, 66=>66, 67=>67, 68=>68, 69=>69, 70=>70, 71=>71, 72=>72, 73=>73, 74=>74, 75=>75, 76=>76, 77=>77, 78=>78, 79=>79, 80=>80, 81=>81, 82=>82, 83=>83, 84=>84, 85=>85, 86=>86, 87=>87, 88=>88, 89=>89, 90=>90, 91=>91, 92=>92, 93=>93, 94=>94, 95=>95, 96=>96, 97=>97, 98=>98, 99=>99, 100=>100, 101=>101, 102=>102, 103=>103, 104=>104, 105=>105, 106=>106, 107=>107, 108=>108, 109=>109, 110=>110, 111=>111, 112=>112, 113=>113, 114=>114, 115=>115, 116=>116, 117=>117, 118=>118, 119=>119, 120=>120, 121=>121, 122=>122, 123=>123, 124=>124, 125=>125, 126=>126, 127=>127, 128=>128, 129=>129, 130=>130, 131=>131, 132=>132, 133=>133, 134=>134, 135=>135, 136=>136, 137=>137, 138=>138, 139=>139, 140=>140, 141=>141, 142=>142, 143=>143, 144=>144, 145=>145, 146=>146, 147=>147, 148=>148, 149=>149, 150=>150, 151=>151, 152=>152, 153=>153, 154=>154, 155=>155, 156=>156, 157=>157, 158=>158, 159=>159, 160=>160, 161=>161, 162=>162, 163=>163, 164=>164, 165=>165, 166=>166, 167=>167, 168=>168, 169=>169, 170=>170, 171=>171, 172=>172, 173=>173, 174=>174, 175=>175, 176=>176, 177=>177, 178=>178, 179=>179, 180=>180, 181=>181, 182=>182, 183=>183, 184=>184, 185=>185, 186=>186, 187=>187, 188=>188, 189=>189, 190=>190, 191=>191, 192=>192, 193=>193, 194=>194, 195=>195, 196=>196, 197=>197, 198=>198, 199=>199, 200=>200, 201=>201, 202=>202, 203=>203, 204=>204, 205=>205, 206=>206, 207=>207, 208=>208, 209=>209, 210=>210, 211=>211, 212=>212, 213=>213, 214=>214, 215=>215, 216=>216, 217=>217, 218=>218, 219=>219, 220=>220, 221=>221, 222=>222, 223=>223, 224=>224, 225=>225, 226=>226, 227=>227, 228=>228, 229=>229, 230=>230, 231=>231, 232=>232, 233=>233, 234=>234, 235=>235, 236=>236, 237=>237, 238=>238, 239=>239, 240=>240, 241=>241, 242=>242, 243=>243, 244=>244, 245=>245, 246=>246, 247=>247, 248=>248, 249=>249, 250=>250, 251=>251, 252=>252, 253=>253, 254=>254, 255=>255, 256=>256, 257=>257, 258=>258, 259=>259, 260=>260, 261=>261, 262=>262, 263=>263, 264=>264, 265=>265, 266=>266, 267=>267, 268=>268, 269=>269, 270=>270, 271=>271, 272=>272, 273=>273, 274=>274, 275=>275, 276=>276, 277=>277, 278=>278, 279=>279, 280=>280, 281=>281, 282=>282, 283=>283, 284=>284, 285=>285, 286=>286, 287=>287, 288=>288, 289=>289, 290=>290, 291=>291, 292=>292, 293=>293, 294=>294, 295=>295, 296=>296, 297=>297, 298=>298, 299=>299, 300=>300, 301=>301, 302=>302, 303=>303, 304=>304, 305=>305, 306=>306, 307=>307, 308=>308, 309=>309, 310=>310, 311=>311, 312=>312, 313=>313, 314=>314, 315=>315, 316=>316, 317=>317, 318=>318, 319=>319, 320=>320, 321=>321, 322=>322, 323=>323, 324=>324, 325=>325, 326=>326, 327=>327, 328=>328, 329=>329, 330=>330, 331=>331, 332=>332, 333=>333, 334=>334, 335=>335, 336=>336, 337=>337, 338=>338, 339=>339, 340=>340, 341=>341, 342=>342, 343=>343, 344=>344, 345=>345, 346=>346, 347=>347, 348=>348, 349=>349, 350=>350, 351=>351, 352=>352, 353=>353, 354=>354, 355=>355, 356=>356, 357=>357, 358=>358, 359=>359, 360=>360, 361=>361, 362=>362, 363=>363, 364=>364, 365=>365, 366=>366, 367=>367, 368=>368, 369=>369, 370=>370, 371=>371, 372=>372, 373=>373, 374=>374, 375=>375, 376=>376, 377=>377, 378=>378, 379=>379, 380=>380, 381=>381, 382=>382, 383=>383, 384=>384, 385=>385, 386=>386, 387=>387, 388=>388, 389=>389, 390=>390, 391=>391, 392=>392, 393=>393, 394=>394, 395=>395, 396=>396, 397=>397, 398=>398, 399=>399, 400=>400, 401=>401, 402=>402, 403=>403, 404=>404, 405=>405, 406=>406, 407=>407, 408=>408, 409=>409, 410=>410, 411=>411, 412=>412, 413=>413, 414=>414, 415=>415, 416=>416, 417=>417, 418=>418, 419=>419, 420=>420, 421=>421, 422=>422, 423=>423, 424=>424, 425=>425, 426=>426, 427=>427, 428=>428, 429=>429, 430=>430, 431=>431, 432=>432, 433=>433, 434=>434, 435=>435, 436=>436, 437=>437, 438=>438, 439=>439, 440=>440, 441=>441, 442=>442, 443=>443, 444=>444, 445=>445, 446=>446, 447=>447, 448=>448, 449=>449, 450=>450, 451=>451, 452=>452, 453=>453, 454=>454, 455=>455, 456=>456, 457=>457, 458=>458, 459=>459, 460=>460, 461=>461, 462=>462, 463=>463, 464=>464, 465=>465, 466=>466, 467=>467, 468=>468, 469=>469, 470=>470, 471=>471, 472=>472, 473=>473, 474=>474, 475=>475, 476=>476, 477=>477, 478=>478, 479=>479, 480=>480, 481=>481, 482=>482, 483=>483, 484=>484, 485=>485, 486=>486, 487=>487, 488=>488, 489=>489, 490=>490, 491=>491, 492=>492, 493=>493, 494=>494, 495=>495, 496=>496, 497=>497, 498=>498, 499=>499, 500=>500,}
+loop_count: 60000
diff --git a/benchmark/vm_block.yml b/benchmark/vm_block.yml
new file mode 100644
index 0000000000..68b3e40bf5
--- /dev/null
+++ b/benchmark/vm_block.yml
@@ -0,0 +1,9 @@
+prelude: |
+ def m
+ yield
+ end
+benchmark:
+ vm_block: |
+ m{
+ }
+loop_count: 30000000
diff --git a/benchmark/vm_block_handler.yml b/benchmark/vm_block_handler.yml
new file mode 100644
index 0000000000..461d7953ad
--- /dev/null
+++ b/benchmark/vm_block_handler.yml
@@ -0,0 +1,27 @@
+# :FIXME: is there a way to benchmark block_handler_type_ifunc?
+
+prelude: |
+ p = proc{_1}
+ o = Object.new
+ def o.each
+ i = 0
+ while i < 3_000_000 do
+ yield i
+ i += 1
+ end
+ end
+
+benchmark:
+ - name: block_handler_type_iseq
+ script: |
+ o.each{_1}
+
+ - name: block_handler_type_symbol
+ script: |
+ o.each(&:itself)
+
+ - name: block_handler_type_proc
+ script: |
+ o.each(&p)
+
+loop_count: 1
diff --git a/benchmark/vm_blockparam.yml b/benchmark/vm_blockparam.yml
new file mode 100644
index 0000000000..5e5a0170a2
--- /dev/null
+++ b/benchmark/vm_blockparam.yml
@@ -0,0 +1,7 @@
+prelude: |
+ def m &b
+ end
+benchmark:
+ vm_blockparam: |
+ m{}
+loop_count: 30000000
diff --git a/benchmark/vm_blockparam_call.yml b/benchmark/vm_blockparam_call.yml
new file mode 100644
index 0000000000..a7d8d366ea
--- /dev/null
+++ b/benchmark/vm_blockparam_call.yml
@@ -0,0 +1,8 @@
+prelude: |
+ def m &b
+ b.call
+ end
+benchmark:
+ vm_blockparam_call: |
+ m{}
+loop_count: 30000000
diff --git a/benchmark/vm_blockparam_pass.yml b/benchmark/vm_blockparam_pass.yml
new file mode 100644
index 0000000000..841f5e7a63
--- /dev/null
+++ b/benchmark/vm_blockparam_pass.yml
@@ -0,0 +1,12 @@
+prelude: |
+ def bp_yield
+ yield
+ end
+
+ def bp_pass &b
+ bp_yield &b
+ end
+benchmark:
+ vm_blockparam_pass: |
+ bp_pass{}
+loop_count: 30000000
diff --git a/benchmark/vm_blockparam_yield.yml b/benchmark/vm_blockparam_yield.yml
new file mode 100644
index 0000000000..8ea9b46ed2
--- /dev/null
+++ b/benchmark/vm_blockparam_yield.yml
@@ -0,0 +1,8 @@
+prelude: |
+ def bp_yield &b
+ yield
+ end
+benchmark:
+ vm_blockparam_yield: |
+ bp_yield{}
+loop_count: 30000000
diff --git a/benchmark/vm_call_bmethod.yml b/benchmark/vm_call_bmethod.yml
new file mode 100644
index 0000000000..40136e5aa4
--- /dev/null
+++ b/benchmark/vm_call_bmethod.yml
@@ -0,0 +1,37 @@
+prelude: |
+ define_method(:a0){}
+ define_method(:a1){|a| a}
+ define_method(:s){|*a| a}
+ define_method(:b){|kw: 1| kw}
+
+ t0 = 0.times.to_a
+ t1 = 1.times.to_a
+ t10 = 10.times.to_a
+ t100 = 100.times.to_a
+ kw = {kw: 2}
+benchmark:
+ bmethod_simple_0: |
+ a0
+ bmethod_simple_1: |
+ a1(1)
+ bmethod_simple_0_splat: |
+ a0(*t0)
+ bmethod_simple_1_splat: |
+ a1(*t1)
+ bmethod_no_splat: |
+ s
+ bmethod_0_splat: |
+ s(*t0)
+ bmethod_1_splat: |
+ s(*t1)
+ bmethod_10_splat: |
+ s(*t10)
+ bmethod_100_splat: |
+ s(*t100)
+ bmethod_kw: |
+ b(kw: 1)
+ bmethod_no_kw: |
+ b
+ bmethod_kw_splat: |
+ b(**kw)
+loop_count: 6000000
diff --git a/benchmark/vm_call_kw_and_kw_splat.yml b/benchmark/vm_call_kw_and_kw_splat.yml
new file mode 100644
index 0000000000..aa6e549e0c
--- /dev/null
+++ b/benchmark/vm_call_kw_and_kw_splat.yml
@@ -0,0 +1,25 @@
+prelude: |
+ h1, h10, h100, h1000 = [1, 10, 100, 1000].map do |n|
+ h = {kw: 1}
+ n.times{|i| h[i.to_s.to_sym] = i}
+ h
+ end
+ eh = {}
+ def kw(kw: nil, **kws) end
+benchmark:
+ 1: |
+ kw(**h1)
+ 1_mutable: |
+ kw(**eh, **h1)
+ 10: |
+ kw(**h10)
+ 10_mutable: |
+ kw(**eh, **h10)
+ 100: |
+ kw(**h100)
+ 100_mutable: |
+ kw(**eh, **h100)
+ 1000: |
+ kw(**h1000)
+ 1000_mutable: |
+ kw(**eh, **h1000)
diff --git a/benchmark/vm_call_method_missing.yml b/benchmark/vm_call_method_missing.yml
new file mode 100644
index 0000000000..f890796f11
--- /dev/null
+++ b/benchmark/vm_call_method_missing.yml
@@ -0,0 +1,62 @@
+prelude: |
+ class A0
+ def method_missing(m); m end
+ end
+ class A1
+ def method_missing(m, a) a; end
+ end
+ class S
+ def method_missing(m, *a) a; end
+ end
+ class B
+ def method_missing(m, kw: 1) kw end
+ end
+ class SB
+ def method_missing(m, *a, kw: 1) kw end
+ end
+
+ t0 = 0.times.to_a
+ t1 = 1.times.to_a
+ t10 = 10.times.to_a
+ t200 = 200.times.to_a
+ kw = {kw: 2}
+
+ a0 = A0.new
+ a1 = A1.new
+ s = S.new
+ b = B.new
+ sb = SB.new
+benchmark:
+ method_missing_simple_0: |
+ a0.()
+ method_missing_simple_1: |
+ a1.x(1)
+ method_missing_simple_0_splat: |
+ a0.(*t0)
+ method_missing_simple_1_splat: |
+ a1.(*t1)
+ method_missing_no_splat: |
+ s.()
+ method_missing_0_splat: |
+ s.(*t0)
+ method_missing_1_splat: |
+ s.(*t1)
+ method_missing_10_splat: |
+ s.(*t10)
+ method_missing_200_splat: |
+ s.(*t200)
+ method_missing_kw: |
+ b.(kw: 1)
+ method_missing_no_kw: |
+ b.()
+ method_missing_kw_splat: |
+ b.(**kw)
+ method_missing_0_splat_kw: |
+ sb.(*t0, **kw)
+ method_missing_1_splat_kw: |
+ sb.(*t1, **kw)
+ method_missing_10_splat_kw: |
+ sb.(*t10, **kw)
+ method_missing_200_splat_kw: |
+ sb.(*t200, **kw)
+loop_count: 1000000
diff --git a/benchmark/vm_call_send_iseq.yml b/benchmark/vm_call_send_iseq.yml
new file mode 100644
index 0000000000..60ff23c475
--- /dev/null
+++ b/benchmark/vm_call_send_iseq.yml
@@ -0,0 +1,77 @@
+prelude: |
+ def a0; end
+ def a1(a) a; end
+ def s(*a) a; end
+ def b(kw: 1) kw end
+ def sb(*a, kw: 1) kw end
+
+ t0 = 0.times.to_a
+ t1 = 1.times.to_a
+ t10 = 10.times.to_a
+ t200 = 200.times.to_a
+
+ a0_t0 = [:a0, *t0]
+ a1_t1 = [:a1, *t1]
+ s_t0 = [:s, *t0]
+ s_t1 = [:s, *t1]
+ s_t10 = [:s, *t10]
+ s_t200 = [:s, *t200]
+ sb_t0 = [:sb, *t0]
+ sb_t1 = [:sb, *t1]
+ sb_t10 = [:sb, *t10]
+ sb_t200 = [:sb, *t200]
+ kw = {kw: 2}
+benchmark:
+ send_simple_0: |
+ send(:a0)
+ send_simple_1: |
+ send(:a1, 1)
+ send_simple_0_splat: |
+ send(:a0, *t0)
+ send_simple_1_splat: |
+ send(:a1, *t1)
+ send_simple_0_splat_comb: |
+ send(*a0_t0)
+ send_simple_1_splat_comb: |
+ send(*a1_t1)
+ send_no_splat: |
+ send(:s)
+ send_0_splat: |
+ send(:s, *t0)
+ send_1_splat: |
+ send(:s, *t1)
+ send_10_splat: |
+ send(:s, *t10)
+ send_200_splat: |
+ send(:s, *t200)
+ send_0_splat_comb: |
+ send(*s_t0)
+ send_1_splat_comb: |
+ send(*s_t1)
+ send_10_splat_comb: |
+ send(*s_t10)
+ send_200_splat_comb: |
+ send(*s_t200)
+ send_kw: |
+ send(:b, kw: 1)
+ send_no_kw: |
+ send(:b)
+ send_kw_splat: |
+ send(:b, **kw)
+ send_0_splat_kw: |
+ send(:sb, *t0, **kw)
+ send_1_splat_kw: |
+ send(:sb, *t1, **kw)
+ send_10_splat_kw: |
+ send(:sb, *t10, **kw)
+ send_200_splat_kw: |
+ send(:sb, *t200, **kw)
+ send_0_splat_comb_kw: |
+ send(*sb_t0, **kw)
+ send_1_splat_comb_kw: |
+ send(*sb_t1, **kw)
+ send_10_splat_comb_kw: |
+ send(*sb_t10, **kw)
+ send_200_splat_comb_kw: |
+ send(*sb_t200, **kw)
+loop_count: 3000000
diff --git a/benchmark/vm_call_symproc.yml b/benchmark/vm_call_symproc.yml
new file mode 100644
index 0000000000..16e0ac579e
--- /dev/null
+++ b/benchmark/vm_call_symproc.yml
@@ -0,0 +1,83 @@
+prelude: |
+ def self.a0; end
+ def self.a1(a) a; end
+ def self.s(*a) a; end
+ def self.b(kw: 1) kw end
+ def self.sb(*a, kw: 1) kw end
+
+ t0 = 0.times.to_a
+ t1 = 1.times.to_a
+ t10 = 10.times.to_a
+ t200 = 200.times.to_a
+
+ a0_t0 = [self, *t0]
+ a1_t1 = [self, *t1]
+ s_t0 = [self, *t0]
+ s_t1 = [self, *t1]
+ s_t10 = [self, *t10]
+ s_t200 = [self, *t200]
+ sb_t0 = [self, *t0]
+ sb_t1 = [self, *t1]
+ sb_t10 = [self, *t10]
+ sb_t200 = [self, *t200]
+ kw = {kw: 2}
+
+ a0 = :a0.to_proc
+ a1 = :a1.to_proc
+ s = :s.to_proc
+ b = :b.to_proc
+ sb = :sb.to_proc
+benchmark:
+ symproc_simple_0: |
+ a0.(self)
+ symproc_simple_1: |
+ a1.(self, 1)
+ symproc_simple_0_splat: |
+ a0.(self, *t0)
+ symproc_simple_1_splat: |
+ a1.(self, *t1)
+ symproc_simple_0_splat_comb: |
+ a0.(*a0_t0)
+ symproc_simple_1_splat_comb: |
+ a1.(*a1_t1)
+ symproc_no_splat: |
+ s.(self)
+ symproc_0_splat: |
+ s.(self, *t0)
+ symproc_1_splat: |
+ s.(self, *t1)
+ symproc_10_splat: |
+ s.(self, *t10)
+ symproc_200_splat: |
+ s.(self, *t200)
+ symproc_0_splat_comb: |
+ s.(*s_t0)
+ symproc_1_splat_comb: |
+ s.(*s_t1)
+ symproc_10_splat_comb: |
+ s.(*s_t10)
+ symproc_200_splat_comb: |
+ s.(*s_t200)
+ symproc_kw: |
+ b.(self, kw: 1)
+ symproc_no_kw: |
+ b.(self)
+ symproc_kw_splat: |
+ b.(self, **kw)
+ symproc_0_splat_kw: |
+ sb.(self, *t0, **kw)
+ symproc_1_splat_kw: |
+ sb.(self, *t1, **kw)
+ symproc_10_splat_kw: |
+ sb.(self, *t10, **kw)
+ symproc_200_splat_kw: |
+ sb.(self, *t200, **kw)
+ symproc_0_splat_comb_kw: |
+ sb.(*sb_t0, **kw)
+ symproc_1_splat_comb_kw: |
+ sb.(*sb_t1, **kw)
+ symproc_10_splat_comb_kw: |
+ sb.(*sb_t10, **kw)
+ symproc_200_splat_comb_kw: |
+ sb.(*sb_t200, **kw)
+loop_count: 1000000
diff --git a/benchmark/vm_case.yml b/benchmark/vm_case.yml
new file mode 100644
index 0000000000..b26a491a15
--- /dev/null
+++ b/benchmark/vm_case.yml
@@ -0,0 +1,13 @@
+benchmark:
+ vm_case: |
+ case :foo
+ when :bar
+ raise
+ when :baz
+ raise
+ when :boo
+ raise
+ when :foo
+ # noop
+ end
+loop_count: 6000000
diff --git a/benchmark/vm_case_classes.yml b/benchmark/vm_case_classes.yml
new file mode 100644
index 0000000000..cacc4f0464
--- /dev/null
+++ b/benchmark/vm_case_classes.yml
@@ -0,0 +1,9 @@
+benchmark:
+ vm_case_classes: |
+ case :foo
+ when Hash
+ raise
+ when Array
+ raise
+ end
+loop_count: 6000000
diff --git a/benchmark/vm_case_lit.yml b/benchmark/vm_case_lit.yml
new file mode 100644
index 0000000000..9f91801544
--- /dev/null
+++ b/benchmark/vm_case_lit.yml
@@ -0,0 +1,23 @@
+# loop_count is not utilized since `i` is involved in the script
+benchmark:
+ vm_case_lit: |
+ i = 0
+ @ret = [ "foo", true, false, :sym, 6, nil, 0.1, 0xffffffffffffffff ]
+ def foo(i)
+ @ret[i % @ret.size]
+ end
+
+ while i<6_000_000
+ case foo(i)
+ when "foo" then :foo
+ when true then true
+ when false then false
+ when :sym then :sym
+ when 6 then :fix
+ when nil then nil
+ when 0.1 then :float
+ when 0xffffffffffffffff then :big
+ end
+ i += 1
+ end
+loop_count: 1
diff --git a/benchmark/bm_vm3_clearmethodcache.rb b/benchmark/vm_clearmethodcache.rb
index 9661323cd2..9661323cd2 100644
--- a/benchmark/bm_vm3_clearmethodcache.rb
+++ b/benchmark/vm_clearmethodcache.rb
diff --git a/benchmark/vm_const.yml b/benchmark/vm_const.yml
new file mode 100644
index 0000000000..8939ca0cd3
--- /dev/null
+++ b/benchmark/vm_const.yml
@@ -0,0 +1,13 @@
+prelude: |
+ Const = 1
+ A = B = C = D = E = F = G = H = I = J = K = L = M = N = O = P = Q = R = S = T = U = V = W = X = Y = Z = 1
+ def foo
+ A; B; C; D; E; F; G; H; I; J; K; L; M; N; O; P; Q; R; S; T; U; V; W; X; Y; Z
+ end
+benchmark:
+ vm_const: |
+ j = Const
+ k = Const
+ vm_const_many: |
+ foo
+loop_count: 30000000
diff --git a/benchmark/vm_cvar.yml b/benchmark/vm_cvar.yml
new file mode 100644
index 0000000000..1d0e161829
--- /dev/null
+++ b/benchmark/vm_cvar.yml
@@ -0,0 +1,20 @@
+prelude: |
+ class A
+ @@foo = 1
+
+ def self.foo
+ @@foo
+ end
+
+ ("A".."Z").each do |module_name|
+ eval <<-EOM
+ module #{module_name}
+ end
+
+ include #{module_name}
+ EOM
+ end
+ end
+benchmark:
+ vm_cvar: A.foo
+loop_count: 600000
diff --git a/benchmark/vm_defined_method.yml b/benchmark/vm_defined_method.yml
new file mode 100644
index 0000000000..347e0cfd33
--- /dev/null
+++ b/benchmark/vm_defined_method.yml
@@ -0,0 +1,8 @@
+prelude: |
+ class Object
+ define_method(:m){}
+ end
+benchmark:
+ vm_defined_method: |
+ m; m; m; m; m; m; m; m;
+loop_count: 6000000
diff --git a/benchmark/vm_dstr.yml b/benchmark/vm_dstr.yml
new file mode 100644
index 0000000000..30c7a3193c
--- /dev/null
+++ b/benchmark/vm_dstr.yml
@@ -0,0 +1,6 @@
+prelude: |
+ x = y = 'z'
+benchmark:
+ vm_dstr: |
+ str = "foo#{x}bar#{y}baz"
+loop_count: 6000000
diff --git a/benchmark/vm_dstr_ary.rb b/benchmark/vm_dstr_ary.rb
new file mode 100644
index 0000000000..1d3aa3b97b
--- /dev/null
+++ b/benchmark/vm_dstr_ary.rb
@@ -0,0 +1,6 @@
+i = 0
+x = y = []
+while i<6_000_000 # benchmark loop 2
+ i += 1
+ str = "foo#{x}bar#{y}baz"
+end
diff --git a/benchmark/vm_dstr_bool.rb b/benchmark/vm_dstr_bool.rb
new file mode 100644
index 0000000000..631ca54755
--- /dev/null
+++ b/benchmark/vm_dstr_bool.rb
@@ -0,0 +1,7 @@
+i = 0
+x = true
+y = false
+while i<6_000_000 # benchmark loop 2
+ i += 1
+ str = "foo#{x}bar#{y}baz"
+end
diff --git a/benchmark/vm_dstr_class_module.rb b/benchmark/vm_dstr_class_module.rb
new file mode 100644
index 0000000000..becf0861c7
--- /dev/null
+++ b/benchmark/vm_dstr_class_module.rb
@@ -0,0 +1,10 @@
+i = 0
+class A; end unless defined?(A)
+module B; end unless defined?(B)
+x = A
+y = B
+while i<6_000_000 # benchmark loop 2
+ i += 1
+ str = "foo#{x}bar#{y}baz"
+end
+
diff --git a/benchmark/vm_dstr_digit.rb b/benchmark/vm_dstr_digit.rb
new file mode 100644
index 0000000000..caaa395192
--- /dev/null
+++ b/benchmark/vm_dstr_digit.rb
@@ -0,0 +1,7 @@
+i = 0
+x = 0
+y = 9
+while i<6_000_000 # benchmark loop 2
+ i += 1
+ str = "foo#{x}bar#{y}baz"
+end
diff --git a/benchmark/vm_dstr_int.rb b/benchmark/vm_dstr_int.rb
new file mode 100644
index 0000000000..ed380d7595
--- /dev/null
+++ b/benchmark/vm_dstr_int.rb
@@ -0,0 +1,5 @@
+i = 0
+while i<6_000_000 # benchmark loop 2
+ i += 1
+ str = "foo#{i}bar#{i}baz"
+end
diff --git a/benchmark/vm_dstr_nil.rb b/benchmark/vm_dstr_nil.rb
new file mode 100644
index 0000000000..ec4f5d6c67
--- /dev/null
+++ b/benchmark/vm_dstr_nil.rb
@@ -0,0 +1,6 @@
+i = 0
+x = y = nil
+while i<6_000_000 # benchmark loop 2
+ i += 1
+ str = "foo#{x}bar#{y}baz"
+end
diff --git a/benchmark/vm_dstr_obj.rb b/benchmark/vm_dstr_obj.rb
new file mode 100644
index 0000000000..fb78637ead
--- /dev/null
+++ b/benchmark/vm_dstr_obj.rb
@@ -0,0 +1,6 @@
+i = 0
+x = y = Object.new
+while i<6_000_000 # benchmark loop 2
+ i += 1
+ str = "foo#{x}bar#{y}baz"
+end
diff --git a/benchmark/vm_dstr_obj_def.rb b/benchmark/vm_dstr_obj_def.rb
new file mode 100644
index 0000000000..99ff7b98fb
--- /dev/null
+++ b/benchmark/vm_dstr_obj_def.rb
@@ -0,0 +1,8 @@
+i = 0
+o = Object.new
+def o.to_s; -""; end
+x = y = o
+while i<6_000_000 # benchmark loop 2
+ i += 1
+ str = "foo#{x}bar#{y}baz"
+end
diff --git a/benchmark/vm_dstr_str.rb b/benchmark/vm_dstr_str.rb
new file mode 100644
index 0000000000..45fc107892
--- /dev/null
+++ b/benchmark/vm_dstr_str.rb
@@ -0,0 +1,6 @@
+i = 0
+x = y = ""
+while i<6_000_000 # benchmark loop 2
+ i += 1
+ str = "foo#{x}bar#{y}baz"
+end
diff --git a/benchmark/vm_dstr_sym.rb b/benchmark/vm_dstr_sym.rb
new file mode 100644
index 0000000000..484b8f8150
--- /dev/null
+++ b/benchmark/vm_dstr_sym.rb
@@ -0,0 +1,6 @@
+i = 0
+x = y = :z
+while i<6_000_000 # benchmark loop 2
+ i += 1
+ str = "foo#{x}bar#{y}baz"
+end
diff --git a/benchmark/vm_ensure.yml b/benchmark/vm_ensure.yml
new file mode 100644
index 0000000000..4ea62f30de
--- /dev/null
+++ b/benchmark/vm_ensure.yml
@@ -0,0 +1,14 @@
+# Not utilizing loop_count since using it for this is too unstable for now
+benchmark:
+ vm_ensure: |
+ i = 0
+ while i<30_000_000
+ i += 1
+ begin
+ begin
+ ensure
+ end
+ ensure
+ end
+ end
+loop_count: 1
diff --git a/benchmark/vm_eval.yml b/benchmark/vm_eval.yml
new file mode 100644
index 0000000000..7ba1a8d1de
--- /dev/null
+++ b/benchmark/vm_eval.yml
@@ -0,0 +1,4 @@
+benchmark:
+ vm_eval: |
+ eval("1")
+loop_count: 6000000
diff --git a/benchmark/vm_fiber_allocate.yml b/benchmark/vm_fiber_allocate.yml
new file mode 100644
index 0000000000..b5a54e1ddf
--- /dev/null
+++ b/benchmark/vm_fiber_allocate.yml
@@ -0,0 +1,8 @@
+prelude: |
+ # Disable GC to see raw throughput:
+ GC.disable
+benchmark:
+ vm_fiber_allocate: |
+ fiber = Fiber.new{Fiber.yield}
+ fiber.resume
+loop_count: 100000
diff --git a/benchmark/vm_fiber_count.yml b/benchmark/vm_fiber_count.yml
new file mode 100644
index 0000000000..b83d3152d4
--- /dev/null
+++ b/benchmark/vm_fiber_count.yml
@@ -0,0 +1,10 @@
+# On Linux, you will need to increase the maximum number of memory maps:
+# sudo sysctl -w vm.max_map_count=200000
+prelude: |
+ fibers = []
+benchmark:
+ vm_fiber_count: |
+ fiber = Fiber.new{Fiber.yield}
+ fibers << fiber
+ fiber.resume
+loop_count: 100000
diff --git a/benchmark/vm_fiber_reuse.yml b/benchmark/vm_fiber_reuse.yml
new file mode 100644
index 0000000000..4ca41085b1
--- /dev/null
+++ b/benchmark/vm_fiber_reuse.yml
@@ -0,0 +1,14 @@
+prelude: |
+ GC.disable
+ fibers = []
+benchmark:
+ vm_fiber_reuse: |
+ 1024.times do
+ fiber = Fiber.new{Fiber.yield}
+ fibers << fiber
+ fiber.resume
+ end
+
+ fibers.clear
+ GC.start
+loop_count: 200
diff --git a/benchmark/vm_fiber_reuse_gc.yml b/benchmark/vm_fiber_reuse_gc.yml
new file mode 100644
index 0000000000..892622f121
--- /dev/null
+++ b/benchmark/vm_fiber_reuse_gc.yml
@@ -0,0 +1,12 @@
+# https://bugs.ruby-lang.org/issues/16009
+prelude: |
+ fibers = []
+benchmark:
+ vm_fiber_reuse_gc: |
+ 2000.times do
+ fiber = Fiber.new{Fiber.yield}
+ fibers << fiber
+ fiber.resume
+ end
+ fibers.clear
+loop_count: 100
diff --git a/benchmark/vm_fiber_switch.yml b/benchmark/vm_fiber_switch.yml
new file mode 100644
index 0000000000..3de36b66eb
--- /dev/null
+++ b/benchmark/vm_fiber_switch.yml
@@ -0,0 +1,9 @@
+prelude: |
+ # based on benchmark for [ruby-core:65518] [Feature #10341] by Knut Franke
+ fib = Fiber.new do
+ loop { Fiber.yield }
+ end
+benchmark:
+ vm_fiber_switch: |
+ fib.resume
+loop_count: 20000000
diff --git a/benchmark/vm_float_simple.yml b/benchmark/vm_float_simple.yml
new file mode 100644
index 0000000000..92f5fd52ab
--- /dev/null
+++ b/benchmark/vm_float_simple.yml
@@ -0,0 +1,8 @@
+prelude: |
+ f = 0.0
+benchmark:
+ vm_float_simple: |
+ f += 0.1; f -= 0.1
+ f += 0.1; f -= 0.1
+ f += 0.1; f -= 0.1
+loop_count: 30000000
diff --git a/benchmark/vm_freezeobj.yml b/benchmark/vm_freezeobj.yml
new file mode 100644
index 0000000000..69a795a354
--- /dev/null
+++ b/benchmark/vm_freezeobj.yml
@@ -0,0 +1,6 @@
+prelude: |
+ objs = 100000.times.map { Object.new }
+benchmark:
+ vm_freeze_obj: |
+ objs.map(&:freeze)
+loop_count: 600
diff --git a/benchmark/vm_freezestring.yml b/benchmark/vm_freezestring.yml
new file mode 100644
index 0000000000..facc9aa043
--- /dev/null
+++ b/benchmark/vm_freezestring.yml
@@ -0,0 +1,10 @@
+prelude: |
+ class String
+ def freeze
+ -self
+ end
+ end
+benchmark:
+ vm_freezestring: |
+ "tXnL1BP5T1WPXMjuFNLQtallEtRcay1t2lHtJSrlVsDgvunlbtfpr/DGdH0NGYE9".freeze
+loop_count: 6000000
diff --git a/benchmark/bm_vm3_gc.rb b/benchmark/vm_gc.rb
index e668026915..e668026915 100644
--- a/benchmark/bm_vm3_gc.rb
+++ b/benchmark/vm_gc.rb
diff --git a/benchmark/vm_gc_old_full.rb b/benchmark/vm_gc_old_full.rb
new file mode 100644
index 0000000000..cfdfc8c5a5
--- /dev/null
+++ b/benchmark/vm_gc_old_full.rb
@@ -0,0 +1,4 @@
+old_object = Array.new(1_000_000){''}
+100.times do
+ GC.start
+end
diff --git a/benchmark/vm_gc_old_immediate.rb b/benchmark/vm_gc_old_immediate.rb
new file mode 100644
index 0000000000..ad22feb655
--- /dev/null
+++ b/benchmark/vm_gc_old_immediate.rb
@@ -0,0 +1,4 @@
+old_object = Array.new(1_000_000){''}
+30_000.times do
+ GC.start(full_mark: false, immediate_sweep: true)
+end
diff --git a/benchmark/vm_gc_old_lazy.rb b/benchmark/vm_gc_old_lazy.rb
new file mode 100644
index 0000000000..b74d44baf1
--- /dev/null
+++ b/benchmark/vm_gc_old_lazy.rb
@@ -0,0 +1,4 @@
+old_object = Array.new(1_000_000){''}
+30_000.times do
+ GC.start(full_mark: false, immediate_sweep: false)
+end
diff --git a/benchmark/vm_gc_short_lived.yml b/benchmark/vm_gc_short_lived.yml
new file mode 100644
index 0000000000..29c803fee3
--- /dev/null
+++ b/benchmark/vm_gc_short_lived.yml
@@ -0,0 +1,9 @@
+benchmark:
+ vm_gc_short_lived: |
+ a = '' # short-lived String
+ b = ''
+ c = ''
+ d = ''
+ e = ''
+ f = ''
+loop_count: 30000000
diff --git a/benchmark/vm_gc_short_with_complex_long.yml b/benchmark/vm_gc_short_with_complex_long.yml
new file mode 100644
index 0000000000..4b6c3ed7b9
--- /dev/null
+++ b/benchmark/vm_gc_short_with_complex_long.yml
@@ -0,0 +1,25 @@
+prelude: |
+ def nested_hash h, n
+ if n == 0
+ ''
+ else
+ 10.times{
+ h[Object.new] = nested_hash(h, n-1)
+ }
+ end
+ end
+
+ long_lived = Hash.new
+ nested_hash long_lived, 6
+
+ GC.start
+ GC.start
+benchmark:
+ vm_gc_short_with_complex_long: |
+ a = '' # short-lived String
+ b = ''
+ c = ''
+ d = ''
+ e = ''
+ f = ''
+loop_count: 30000000
diff --git a/benchmark/vm_gc_short_with_long.yml b/benchmark/vm_gc_short_with_long.yml
new file mode 100644
index 0000000000..03ba0f95a9
--- /dev/null
+++ b/benchmark/vm_gc_short_with_long.yml
@@ -0,0 +1,13 @@
+prelude: |
+ long_lived = Array.new(1_000_000){|i| "#{i}"}
+ GC.start
+ GC.start
+benchmark:
+ vm_gc_short_with_long: |
+ a = '' # short-lived String
+ b = ''
+ c = ''
+ d = ''
+ e = ''
+ f = ''
+loop_count: 30000000
diff --git a/benchmark/vm_gc_short_with_symbol.yml b/benchmark/vm_gc_short_with_symbol.yml
new file mode 100644
index 0000000000..129b8bf4ed
--- /dev/null
+++ b/benchmark/vm_gc_short_with_symbol.yml
@@ -0,0 +1,13 @@
+prelude: |
+ 50_000.times{|i| sym = "sym#{i}".to_sym}
+ GC.start
+ GC.start
+benchmark:
+ vm_gc_short_with_symbol: |
+ a = '' # short-lived String
+ b = ''
+ c = ''
+ d = ''
+ e = ''
+ f = ''
+loop_count: 30000000
diff --git a/benchmark/vm_gc_wb_ary.yml b/benchmark/vm_gc_wb_ary.yml
new file mode 100644
index 0000000000..e3293e72d0
--- /dev/null
+++ b/benchmark/vm_gc_wb_ary.yml
@@ -0,0 +1,12 @@
+prelude: |
+ short_lived_ary = []
+
+ if RUBY_VERSION >= "2.2.0"
+ GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true)
+ end
+
+ short_lived = ''
+benchmark:
+ vm_gc_wb_ary: |
+ short_lived_ary[0] = short_lived # write barrier
+loop_count: 30000000
diff --git a/benchmark/vm_gc_wb_ary_promoted.yml b/benchmark/vm_gc_wb_ary_promoted.yml
new file mode 100644
index 0000000000..003995945b
--- /dev/null
+++ b/benchmark/vm_gc_wb_ary_promoted.yml
@@ -0,0 +1,15 @@
+prelude: |
+ long_lived = []
+
+ if RUBY_VERSION > "2.2.0"
+ 3.times{ GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true) }
+ elsif
+ GC.start
+ end
+
+ short_lived = ''
+
+benchmark:
+ vm_gc_wb_ary_promoted: |
+ long_lived[0] = short_lived # write barrier
+loop_count: 30000000
diff --git a/benchmark/vm_gc_wb_obj.yml b/benchmark/vm_gc_wb_obj.yml
new file mode 100644
index 0000000000..a2a2ce2d18
--- /dev/null
+++ b/benchmark/vm_gc_wb_obj.yml
@@ -0,0 +1,15 @@
+prelude: |
+ class C
+ attr_accessor :foo
+ end
+ short_lived_obj = C.new
+
+ if RUBY_VERSION >= "2.2.0"
+ GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true)
+ end
+
+ short_lived = ''
+benchmark:
+ vm_gc_wb_obj: |
+ short_lived_obj.foo = short_lived # write barrier
+loop_count: 30000000
diff --git a/benchmark/vm_gc_wb_obj_promoted.yml b/benchmark/vm_gc_wb_obj_promoted.yml
new file mode 100644
index 0000000000..00a454ba72
--- /dev/null
+++ b/benchmark/vm_gc_wb_obj_promoted.yml
@@ -0,0 +1,17 @@
+prelude: |
+ class C
+ attr_accessor :foo
+ end
+ long_lived = C.new
+
+ if RUBY_VERSION >= "2.2.0"
+ 3.times{ GC.start(full_mark: false, immediate_mark: true, immediate_sweep: true) }
+ elsif
+ GC.start
+ end
+
+ short_lived = ''
+benchmark:
+ vm_gc_wb_obj_promoted: |
+ long_lived.foo = short_lived # write barrier
+loop_count: 30000000
diff --git a/benchmark/vm_iclass_super.yml b/benchmark/vm_iclass_super.yml
new file mode 100644
index 0000000000..21bb7db247
--- /dev/null
+++ b/benchmark/vm_iclass_super.yml
@@ -0,0 +1,20 @@
+prelude: |
+ class C
+ def m
+ 1
+ end
+
+ ("A".."M").each do |module_name|
+ eval <<-EOM
+ module #{module_name}
+ def m; super; end
+ end
+ prepend #{module_name}
+ EOM
+ end
+ end
+
+ obj = C.new
+benchmark:
+ vm_iclass_super: obj.m
+loop_count: 6000000
diff --git a/benchmark/vm_ivar.yml b/benchmark/vm_ivar.yml
new file mode 100644
index 0000000000..119531d5ef
--- /dev/null
+++ b/benchmark/vm_ivar.yml
@@ -0,0 +1,6 @@
+prelude: "@a = 1\n"
+benchmark:
+ vm_ivar: |
+ j = @a
+ k = @a
+loop_count: 30000000
diff --git a/benchmark/vm_ivar_embedded_obj_init.yml b/benchmark/vm_ivar_embedded_obj_init.yml
new file mode 100644
index 0000000000..74fe20a630
--- /dev/null
+++ b/benchmark/vm_ivar_embedded_obj_init.yml
@@ -0,0 +1,14 @@
+prelude: |
+ class C
+ def set_ivars
+ @a = nil
+ @b = nil
+ @c = nil
+ end
+ end
+
+ c = C.new
+benchmark:
+ vm_ivar_embedded_obj_init: |
+ c.set_ivars
+loop_count: 30000000
diff --git a/benchmark/vm_ivar_extended_obj_init.yml b/benchmark/vm_ivar_extended_obj_init.yml
new file mode 100644
index 0000000000..f054bab282
--- /dev/null
+++ b/benchmark/vm_ivar_extended_obj_init.yml
@@ -0,0 +1,16 @@
+prelude: |
+ class C
+ def set_ivars
+ @a = nil
+ @b = nil
+ @c = nil
+ @d = nil
+ @e = nil
+ end
+ end
+
+ c = C.new
+benchmark:
+ vm_ivar_extended_obj_init: |
+ c.set_ivars
+loop_count: 30000000
diff --git a/benchmark/vm_ivar_generic_get.yml b/benchmark/vm_ivar_generic_get.yml
new file mode 100644
index 0000000000..dae2d37671
--- /dev/null
+++ b/benchmark/vm_ivar_generic_get.yml
@@ -0,0 +1,17 @@
+prelude: |
+ class C < Array
+ attr_reader :a, :b, :c
+ def initialize
+ @a = nil
+ @b = nil
+ @c = nil
+ end
+ end
+
+ c = C.new
+benchmark:
+ vm_ivar_generic_get: |
+ c.a
+ c.b
+ c.c
+loop_count: 30000000
diff --git a/benchmark/vm_ivar_generic_set.yml b/benchmark/vm_ivar_generic_set.yml
new file mode 100644
index 0000000000..102a6577fb
--- /dev/null
+++ b/benchmark/vm_ivar_generic_set.yml
@@ -0,0 +1,14 @@
+prelude: |
+ class C < Array
+ def set_ivars
+ @a = nil
+ @b = nil
+ @c = nil
+ end
+ end
+
+ c = C.new
+benchmark:
+ vm_ivar_generic_set: |
+ c.set_ivars
+loop_count: 30000000
diff --git a/benchmark/vm_ivar_get.yml b/benchmark/vm_ivar_get.yml
new file mode 100644
index 0000000000..1e0dad665f
--- /dev/null
+++ b/benchmark/vm_ivar_get.yml
@@ -0,0 +1,100 @@
+prelude: |
+ class Example
+ def initialize
+ @levar = 1
+ @v0 = 1
+ @v1 = 2
+ @v3 = 3
+ end
+
+ def get_value_loop
+ sum = 0
+
+ i = 0
+ while i < 100_000
+ # 10 times to de-emphasize loop overhead
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ i += 1
+ end
+
+ return sum
+ end
+
+ @levar = 1
+ @v0 = 1
+ @v1 = 2
+ @v3 = 3
+
+ def self.get_value_loop
+ sum = 0
+
+ i = 0
+ while i < 100_000
+ # 10 times to de-emphasize loop overhead
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ i += 1
+ end
+
+ return sum
+ end
+ end
+
+ class GenExample < Time
+ def initialize
+ @levar = 1
+ @v0 = 1
+ @v1 = 2
+ @v3 = 3
+ end
+
+ def get_value_loop
+ sum = 0
+
+ i = 0
+ while i < 100_000
+ # 10 times to de-emphasize loop overhead
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ sum += @levar
+ i += 1
+ end
+
+ return sum
+ end
+ end
+
+ obj = Example.new
+ gen = GenExample.new
+benchmark:
+ vm_ivar_get_on_obj: |
+ obj.get_value_loop
+ vm_ivar_get_on_class: |
+ Example.get_value_loop
+ vm_ivar_get_on_generic: |
+ gen.get_value_loop
+loop_count: 100
diff --git a/benchmark/vm_ivar_get_unintialized.yml b/benchmark/vm_ivar_get_unintialized.yml
new file mode 100644
index 0000000000..a1ccfb06ce
--- /dev/null
+++ b/benchmark/vm_ivar_get_unintialized.yml
@@ -0,0 +1,12 @@
+prelude: |
+ class Example
+ def read
+ @uninitialized
+ end
+ end
+
+ obj = Example.new
+benchmark:
+ vm_ivar_get_uninitialized: |
+ obj.read
+loop_count: 30000000
diff --git a/benchmark/vm_ivar_ic_miss.yml b/benchmark/vm_ivar_ic_miss.yml
new file mode 100644
index 0000000000..944fb1a9e6
--- /dev/null
+++ b/benchmark/vm_ivar_ic_miss.yml
@@ -0,0 +1,20 @@
+prelude: |
+ class Foo
+ def initialize diverge
+ if diverge
+ @a = 1
+ end
+
+ @a0 = @a1 = @a2 = @a3 = @a4 = @a5 = @a6 = @a7 = @a8 = @a9 = @a10 = @a11 = @a12 = @a13 = @a14 = @a15 = @a16 = @a17 = @a18 = @a19 = @a20 = @a21 = @a22 = @a23 = @a24 = @a25 = @a26 = @a27 = @a28 = @a29 = @a30 = @a31 = @a32 = @a33 = @a34 = @a35 = @a36 = @a37 = @a38 = @a39 = @a40 = @a41 = @a42 = @a43 = @a44 = @a45 = @a46 = @a47 = @a48 = @a49 = @a50 = @a51 = @a52 = @a53 = @a54 = @a55 = @a56 = @a57 = @a58 = @a59 = @a60 = @a61 = @a62 = @a63 = @a64 = @a65 = @a66 = @a67 = @a68 = @a69 = @a70 = @a71 = @a72 = @a73 = @a74 = @b = 1
+ end
+
+ def b; @b; end
+ end
+
+ a = Foo.new false
+ b = Foo.new true
+benchmark:
+ vm_ivar_ic_miss: |
+ a.b
+ b.b
+loop_count: 30000000
diff --git a/benchmark/vm_ivar_lazy_set.yml b/benchmark/vm_ivar_lazy_set.yml
new file mode 100644
index 0000000000..7372ffcfbc
--- /dev/null
+++ b/benchmark/vm_ivar_lazy_set.yml
@@ -0,0 +1,12 @@
+prelude: |
+ class Example
+ def lazy_set
+ @uninitialized ||= 123
+ end
+ end
+
+ objs = 10000000.times.map { Example.new }
+benchmark:
+ vm_ivar_lazy_set: |
+ objs.each(&:lazy_set)
+loop_count: 1
diff --git a/benchmark/vm_ivar_memoize.yml b/benchmark/vm_ivar_memoize.yml
new file mode 100644
index 0000000000..90f6b07f05
--- /dev/null
+++ b/benchmark/vm_ivar_memoize.yml
@@ -0,0 +1,85 @@
+prelude: |
+ IVARS = 60
+ class Record
+ def initialize(offset = false)
+ @offset = 1 if offset
+ @first = 0
+ IVARS.times do |i|
+ instance_variable_set("@ivar_#{i}", i)
+ end
+ end
+
+ def first
+ @first
+ end
+
+ def lazy_set
+ @lazy_set ||= 123
+ end
+
+ def undef
+ @undef
+ end
+ end
+
+ Record.new # Need one alloc to right size
+
+ BASE = Record.new
+ LAZY = Record.new
+ LAZY.lazy_set
+
+ class Miss < Record
+ @first = 0
+ IVARS.times do |i|
+ instance_variable_set("@i_#{i}", i)
+ end
+ end
+
+ Miss.new # Need one alloc to right size
+ MISS = Miss.new
+
+ DIVERGENT = Record.new(true)
+
+benchmark:
+ vm_ivar_stable_shape: |
+ BASE.first
+ BASE.first
+ BASE.first
+ BASE.first
+ BASE.first
+ BASE.first
+ vm_ivar_memoize_unstable_shape: |
+ BASE.first
+ LAZY.first
+ BASE.first
+ LAZY.first
+ BASE.first
+ LAZY.first
+ vm_ivar_memoize_unstable_shape_miss: |
+ BASE.first
+ MISS.first
+ BASE.first
+ MISS.first
+ BASE.first
+ MISS.first
+ vm_ivar_unstable_undef: |
+ BASE.undef
+ LAZY.undef
+ BASE.undef
+ LAZY.undef
+ BASE.undef
+ LAZY.undef
+ vm_ivar_divergent_shape: |
+ BASE.first
+ DIVERGENT.first
+ BASE.first
+ DIVERGENT.first
+ BASE.first
+ DIVERGENT.first
+ vm_ivar_divergent_shape_imbalanced: |
+ BASE.first
+ DIVERGENT.first
+ DIVERGENT.first
+ DIVERGENT.first
+ DIVERGENT.first
+ DIVERGENT.first
diff --git a/benchmark/vm_ivar_of_class.yml b/benchmark/vm_ivar_of_class.yml
new file mode 100644
index 0000000000..172e28b2fd
--- /dev/null
+++ b/benchmark/vm_ivar_of_class.yml
@@ -0,0 +1,12 @@
+prelude: |
+ class C
+ @a = 1
+ def self.a
+ _a = @a; _a = @a; _a = @a; _a = @a; _a = @a;
+ _a = @a; _a = @a; _a = @a; _a = @a; _a = @a;
+ end
+ end
+benchmark:
+ vm_ivar_of_class: |
+ a = C.a
+loop_count: 30000000
diff --git a/benchmark/vm_ivar_of_class_set.yml b/benchmark/vm_ivar_of_class_set.yml
new file mode 100644
index 0000000000..2ea5199423
--- /dev/null
+++ b/benchmark/vm_ivar_of_class_set.yml
@@ -0,0 +1,11 @@
+prelude: |
+ class C
+ @a = 1
+ def self.a o
+ @a = o; @a = o; @a = o; @a = o; @a = o; @a = o;
+ end
+ end
+benchmark:
+ vm_ivar_of_class_set: |
+ a = C.a(nil)
+loop_count: 30000000
diff --git a/benchmark/vm_ivar_set.yml b/benchmark/vm_ivar_set.yml
new file mode 100644
index 0000000000..8bbb60043b
--- /dev/null
+++ b/benchmark/vm_ivar_set.yml
@@ -0,0 +1,5 @@
+benchmark:
+ vm_ivar_set: |
+ @a = 1
+ @b = 2
+loop_count: 30000000
diff --git a/benchmark/vm_ivar_set_on_instance.yml b/benchmark/vm_ivar_set_on_instance.yml
new file mode 100644
index 0000000000..6ce53a86ec
--- /dev/null
+++ b/benchmark/vm_ivar_set_on_instance.yml
@@ -0,0 +1,94 @@
+prelude: |
+ class TheClass
+ def initialize
+ @levar = 1
+ @v0 = 1
+ @v1 = 2
+ @v3 = 3
+ end
+
+ def set_value_loop
+ # 100k
+ i = 0
+ while i < 100_000
+ # 10 times to de-emphasize loop overhead
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ i += 1
+ end
+ end
+ end
+
+ class Generic < Time
+ def initialize
+ @levar = 1
+ @v0 = 1
+ @v1 = 2
+ @v3 = 3
+ end
+
+ def set_value_loop
+ # 100k
+ i = 0
+ while i < 100_000
+ # 10 times to de-emphasize loop overhead
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ i += 1
+ end
+ end
+ end
+
+ obj = TheClass.new
+ gen_obj = Generic.new
+
+ class SomeClass
+ @levar = 1
+ @v0 = 1
+ @v1 = 2
+ @v3 = 3
+
+ def self.set_value_loop
+ # 100k
+ i = 0
+ while i < 100_000
+ # 10 times to de-emphasize loop overhead
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ @levar = i
+ i += 1
+ end
+ end
+ end
+
+benchmark:
+ vm_ivar_set_on_instance: |
+ obj.set_value_loop
+ vm_ivar_set_on_generic: |
+ gen_obj.set_value_loop
+ vm_ivar_set_on_class: |
+ SomeClass.set_value_loop
+loop_count: 100
diff --git a/benchmark/vm_ivar_set_subclass.yml b/benchmark/vm_ivar_set_subclass.yml
new file mode 100644
index 0000000000..bc8bf5bf6b
--- /dev/null
+++ b/benchmark/vm_ivar_set_subclass.yml
@@ -0,0 +1,20 @@
+prelude: |
+ class A
+ def set_ivars
+ @a = nil
+ @b = nil
+ @c = nil
+ @d = nil
+ @e = nil
+ end
+ end
+ class B < A; end
+ class C < A; end
+
+ b = B.new
+ c = C.new
+benchmark:
+ vm_ivar_init_subclass: |
+ b.set_ivars
+ c.set_ivars
+loop_count: 3000000
diff --git a/benchmark/vm_length.yml b/benchmark/vm_length.yml
new file mode 100644
index 0000000000..5fd94e7d86
--- /dev/null
+++ b/benchmark/vm_length.yml
@@ -0,0 +1,8 @@
+prelude: |
+ a = 'abc'
+ b = [1, 2, 3]
+benchmark:
+ vm_length: |
+ a.length
+ b.length
+loop_count: 30000000
diff --git a/benchmark/vm_lvar_cond_set.yml b/benchmark/vm_lvar_cond_set.yml
new file mode 100644
index 0000000000..1845f9d12e
--- /dev/null
+++ b/benchmark/vm_lvar_cond_set.yml
@@ -0,0 +1,8 @@
+benchmark:
+ vm_lvar_cond_set: |
+ a ||= 1
+ b ||= 1
+ c ||= 1
+ d ||= 1
+ nil
+loop_count: 30000000
diff --git a/benchmark/vm_lvar_init.yml b/benchmark/vm_lvar_init.yml
new file mode 100644
index 0000000000..70a9b1c0ca
--- /dev/null
+++ b/benchmark/vm_lvar_init.yml
@@ -0,0 +1,21 @@
+# while loop cost is not removed because `i` is used in the script
+benchmark:
+ vm_lvar_init: |
+ def m v
+ unless v
+ # unreachable code
+ v1 = v2 = v3 = v4 = v5 = v6 = v7 = v8 = v9 = v10 =
+ v11 = v12 = v13 = v14 = v15 = v16 = v17 = v18 = v19 = v20 =
+ v21 = v22 = v23 = v24 = v25 = v26 = v27 = v28 = v29 = v30 =
+ v31 = v32 = v33 = v34 = v35 = v36 = v37 = v38 = v39 = v40 =
+ v41 = v42 = v43 = v44 = v45 = v46 = v47 = v48 = v49 = v50 = 1
+ end
+ end
+
+ i = 0
+
+ while i<30_000_000
+ i += 1
+ m i
+ end
+loop_count: 1
diff --git a/benchmark/vm_lvar_set.yml b/benchmark/vm_lvar_set.yml
new file mode 100644
index 0000000000..f29f763d81
--- /dev/null
+++ b/benchmark/vm_lvar_set.yml
@@ -0,0 +1,4 @@
+benchmark:
+ vm_lvar_set: |
+ a = b = c = d = e = f = g = h = j = k = l = m = n = o = p = q = r = 1
+loop_count: 30000000
diff --git a/benchmark/vm_method.yml b/benchmark/vm_method.yml
new file mode 100644
index 0000000000..d45e4ec572
--- /dev/null
+++ b/benchmark/vm_method.yml
@@ -0,0 +1,8 @@
+prelude: |
+ def m
+ nil
+ end
+benchmark:
+ vm_method: |
+ m; m; m; m; m; m; m; m;
+loop_count: 6000000
diff --git a/benchmark/vm_method_missing.yml b/benchmark/vm_method_missing.yml
new file mode 100644
index 0000000000..3da456c0bb
--- /dev/null
+++ b/benchmark/vm_method_missing.yml
@@ -0,0 +1,11 @@
+prelude: |
+ class C
+ def method_missing mid
+ end
+ end
+
+ obj = C.new
+benchmark:
+ vm_method_missing: |
+ obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; obj.m;
+loop_count: 6000000
diff --git a/benchmark/vm_method_splat_calls.yml b/benchmark/vm_method_splat_calls.yml
new file mode 100644
index 0000000000..f2f366e99c
--- /dev/null
+++ b/benchmark/vm_method_splat_calls.yml
@@ -0,0 +1,13 @@
+prelude: |
+ def f(x=0, y: 0) end
+ a = [1]
+ ea = []
+ kw = {y: 1}
+ b = lambda{}
+benchmark:
+ arg_splat: "f(1, *ea)"
+ arg_splat_block: "f(1, *ea, &b)"
+ splat_kw_splat: "f(*a, **kw)"
+ splat_kw_splat_block: "f(*a, **kw, &b)"
+ splat_kw: "f(*a, y: 1)"
+ splat_kw_block: "f(*a, y: 1, &b)"
diff --git a/benchmark/vm_method_splat_calls2.yml b/benchmark/vm_method_splat_calls2.yml
new file mode 100644
index 0000000000..d33dcd7e8b
--- /dev/null
+++ b/benchmark/vm_method_splat_calls2.yml
@@ -0,0 +1,27 @@
+prelude: |
+ def named_arg_splat(*a) end
+ def named_arg_kw_splat(*a, **kw) end
+ def anon_arg_splat(*) end
+ def anon_kw_splat(**) end
+ def anon_arg_kw_splat(*, **) end
+ def anon_fw_to_named(*, **) named_arg_kw_splat(*, **) end
+ def fw_to_named(...) named_arg_kw_splat(...) end
+ def fw_to_anon_to_named(...) anon_fw_to_named(...) end
+ def fw_no_kw(...) named_arg_splat(...) end
+ a = [1]
+ kw = {y: 1}
+benchmark:
+ named_multi_arg_splat: "named_arg_splat(*a, *a)"
+ named_post_splat: "named_arg_splat(*a, a)"
+ anon_arg_splat: "anon_arg_splat(*a)"
+ anon_arg_kw_splat: "anon_arg_kw_splat(*a, **kw)"
+ anon_multi_arg_splat: "anon_arg_splat(*a, *a)"
+ anon_post_splat: "anon_arg_splat(*a, a)"
+ anon_kw_splat: "anon_kw_splat(**kw)"
+ anon_fw_to_named_splat: "anon_fw_to_named(*a, **kw)"
+ anon_fw_to_named_no_splat: "anon_fw_to_named(1, y: 1)"
+ fw_to_named_splat: "fw_to_named(*a, **kw)"
+ fw_to_named_no_splat: "fw_to_named(1, y: 1)"
+ fw_to_anon_to_named_splat: "fw_to_anon_to_named(*a, **kw)"
+ fw_to_anon_to_named_no_splat: "fw_to_anon_to_named(1, y: 1)"
+ fw_no_kw: "fw_no_kw(1, 2)"
diff --git a/benchmark/vm_method_with_block.yml b/benchmark/vm_method_with_block.yml
new file mode 100644
index 0000000000..281a481394
--- /dev/null
+++ b/benchmark/vm_method_with_block.yml
@@ -0,0 +1,8 @@
+prelude: |
+ def m
+ nil
+ end
+benchmark:
+ vm_method_with_block: |
+ m{}; m{}; m{}; m{}; m{}; m{}; m{}; m{};
+loop_count: 6000000
diff --git a/benchmark/vm_module_ann_const_set.yml b/benchmark/vm_module_ann_const_set.yml
new file mode 100644
index 0000000000..243229ba4a
--- /dev/null
+++ b/benchmark/vm_module_ann_const_set.yml
@@ -0,0 +1,4 @@
+benchmark:
+ vm_module_ann_const_set: |
+ Module.new.const_set(:X, Module.new)
+loop_count: 6000000
diff --git a/benchmark/vm_module_const_set.yml b/benchmark/vm_module_const_set.yml
new file mode 100644
index 0000000000..e5a24181a9
--- /dev/null
+++ b/benchmark/vm_module_const_set.yml
@@ -0,0 +1,8 @@
+prelude: |
+ module M
+ end
+ $VERBOSE = nil
+benchmark:
+ vm_module_const_set: |
+ M.const_set(:X, Module.new)
+loop_count: 6000000
diff --git a/benchmark/vm_mutex.yml b/benchmark/vm_mutex.yml
new file mode 100644
index 0000000000..abcf1e28ce
--- /dev/null
+++ b/benchmark/vm_mutex.yml
@@ -0,0 +1,8 @@
+prelude: |
+ require 'thread'
+
+ m = Thread::Mutex.new
+benchmark:
+ vm_mutex: |
+ m.synchronize{}
+loop_count: 6000000
diff --git a/benchmark/vm_neq.yml b/benchmark/vm_neq.yml
new file mode 100644
index 0000000000..fb04d15ae8
--- /dev/null
+++ b/benchmark/vm_neq.yml
@@ -0,0 +1,7 @@
+prelude: |
+ obj1 = Object.new
+ obj2 = Object.new
+benchmark:
+ vm_neq: |
+ obj1 != obj2
+loop_count: 30000000
diff --git a/benchmark/vm_newlambda.yml b/benchmark/vm_newlambda.yml
new file mode 100644
index 0000000000..0b9787d91a
--- /dev/null
+++ b/benchmark/vm_newlambda.yml
@@ -0,0 +1,4 @@
+benchmark:
+ vm_newlambda: |
+ lambda {}
+loop_count: 6000000
diff --git a/benchmark/vm_not.yml b/benchmark/vm_not.yml
new file mode 100644
index 0000000000..c68dde3c50
--- /dev/null
+++ b/benchmark/vm_not.yml
@@ -0,0 +1,6 @@
+prelude: |
+ obj = Object.new
+benchmark:
+ vm_not: |
+ !obj
+loop_count: 30000000
diff --git a/benchmark/vm_poly_method.yml b/benchmark/vm_poly_method.yml
new file mode 100644
index 0000000000..dd2f4e71de
--- /dev/null
+++ b/benchmark/vm_poly_method.yml
@@ -0,0 +1,24 @@
+# loop_count is not utilized since `i` is involved in the script
+benchmark:
+ vm_poly_method: |
+ class C1
+ def m
+ 1
+ end
+ end
+ class C2
+ def m
+ 2
+ end
+ end
+
+ o1 = C1.new
+ o2 = C2.new
+
+ i = 0
+ while i<6_000_000
+ o = (i % 2 == 0) ? o1 : o2
+ o.m; o.m; o.m; o.m; o.m; o.m; o.m; o.m
+ i += 1
+ end
+loop_count: 1
diff --git a/benchmark/vm_poly_method_ov.yml b/benchmark/vm_poly_method_ov.yml
new file mode 100644
index 0000000000..bca1b62729
--- /dev/null
+++ b/benchmark/vm_poly_method_ov.yml
@@ -0,0 +1,24 @@
+# loop_count is not utilized since `i` is involved in the script
+benchmark:
+ vm_poly_method_ov: |
+ class C1
+ def m
+ 1
+ end
+ end
+ class C2
+ def m
+ 2
+ end
+ end
+
+ o1 = C1.new
+ o2 = C2.new
+
+ i = 0
+ while i<6_000_000
+ o = (i % 2 == 0) ? o1 : o2
+ # o.m; o.m; o.m; o.m; o.m; o.m; o.m; o.m
+ i += 1
+ end
+loop_count: 1
diff --git a/benchmark/vm_poly_same_method.yml b/benchmark/vm_poly_same_method.yml
new file mode 100644
index 0000000000..6c5404ac84
--- /dev/null
+++ b/benchmark/vm_poly_same_method.yml
@@ -0,0 +1,25 @@
+prelude: |
+ module AR; end
+ class AR::Base
+ def create_or_update
+ nil
+ end
+ def save
+ create_or_update
+ end
+ end
+ class Foo < AR::Base; end
+ class Bar < AR::Base; end
+ o1 = Foo.new
+ o2 = Bar.new
+benchmark:
+ vm_poly_same_method: |
+ o1.save; o2.save;
+ o1.save; o2.save;
+ o1.save; o2.save;
+ o1.save; o2.save;
+ o1.save; o2.save;
+ o1.save; o2.save;
+ o1.save; o2.save;
+ o1.save; o2.save;
+loop_count: 6000000
diff --git a/benchmark/vm_poly_singleton.yml b/benchmark/vm_poly_singleton.yml
new file mode 100644
index 0000000000..c7923160fb
--- /dev/null
+++ b/benchmark/vm_poly_singleton.yml
@@ -0,0 +1,18 @@
+# loop_count is not utilized since `i` is involved in the script
+benchmark:
+ vm_poly_singleton: |
+ class C1
+ def m; 1; end
+ end
+
+ o1 = C1.new
+ o2 = C1.new
+ o2.singleton_class
+
+ i = 0
+ while i<6_000_000 # benchmark loop 2
+ o = (i % 2 == 0) ? o1 : o2
+ o.m; o.m; o.m; o.m; o.m; o.m; o.m; o.m
+ i += 1
+ end
+loop_count: 1
diff --git a/benchmark/vm_proc.yml b/benchmark/vm_proc.yml
new file mode 100644
index 0000000000..2f8de6c272
--- /dev/null
+++ b/benchmark/vm_proc.yml
@@ -0,0 +1,12 @@
+prelude: |
+ def m &b
+ b
+ end
+
+ pr = m{
+ a = 1
+ }
+benchmark:
+ vm_proc: |
+ pr.call
+loop_count: 6000000
diff --git a/benchmark/vm_raise1.yml b/benchmark/vm_raise1.yml
new file mode 100644
index 0000000000..247d9f70ee
--- /dev/null
+++ b/benchmark/vm_raise1.yml
@@ -0,0 +1,16 @@
+prelude: |
+ def rec n
+ if n > 0
+ rec n-1
+ else
+ raise
+ end
+ end
+benchmark:
+ vm_raise1: |
+ begin
+ rec 1
+ rescue
+ # ignore
+ end
+loop_count: 6000000
diff --git a/benchmark/vm_raise2.yml b/benchmark/vm_raise2.yml
new file mode 100644
index 0000000000..f0fa047b3c
--- /dev/null
+++ b/benchmark/vm_raise2.yml
@@ -0,0 +1,16 @@
+prelude: |
+ def rec n
+ if n > 0
+ rec n-1
+ else
+ raise
+ end
+ end
+benchmark:
+ vm_raise2: |
+ begin
+ rec 10
+ rescue
+ # ignore
+ end
+loop_count: 6000000
diff --git a/benchmark/vm_regexp.yml b/benchmark/vm_regexp.yml
new file mode 100644
index 0000000000..2aa3d94dbd
--- /dev/null
+++ b/benchmark/vm_regexp.yml
@@ -0,0 +1,8 @@
+prelude: |
+ str = 'xxxhogexxx'
+benchmark:
+ vm_regexp: |
+ /hoge/ =~ str
+ vm_regexp_invert: |
+ str =~ /hoge/
+loop_count: 6000000
diff --git a/benchmark/vm_rescue.yml b/benchmark/vm_rescue.yml
new file mode 100644
index 0000000000..b4a0af521f
--- /dev/null
+++ b/benchmark/vm_rescue.yml
@@ -0,0 +1,6 @@
+benchmark:
+ vm_rescue: |
+ begin
+ rescue
+ end
+loop_count: 30000000
diff --git a/benchmark/vm_send.yml b/benchmark/vm_send.yml
new file mode 100644
index 0000000000..f31bc7ac89
--- /dev/null
+++ b/benchmark/vm_send.yml
@@ -0,0 +1,14 @@
+prelude: |
+ class C
+ def m
+ end
+ end
+
+ o = C.new
+ m = :m
+benchmark:
+ vm_send: |
+ o.__send__ :m
+ vm_send_var: |
+ o.__send__ m
+loop_count: 6000000
diff --git a/benchmark/vm_send_cfunc.yml b/benchmark/vm_send_cfunc.yml
new file mode 100644
index 0000000000..6f12b65176
--- /dev/null
+++ b/benchmark/vm_send_cfunc.yml
@@ -0,0 +1,14 @@
+prelude: |
+ ary = []
+ kw = {a: 1}
+ empty_kw = {}
+ kw_ary = [Hash.ruby2_keywords_hash(a: 1)]
+ empty_kw_ary = [Hash.ruby2_keywords_hash({})]
+benchmark:
+ vm_send_cfunc: itself
+ vm_send_cfunc_splat: itself(*ary)
+ vm_send_cfunc_splat_kw_hash: equal?(*kw_ary)
+ vm_send_cfunc_splat_empty_kw_hash: itself(*empty_kw_ary)
+ vm_send_cfunc_splat_kw: equal?(*ary, **kw)
+ vm_send_cfunc_splat_empty_kw: itself(*ary, **empty_kw)
+loop_count: 20000000
diff --git a/benchmark/vm_simplereturn.yml b/benchmark/vm_simplereturn.yml
new file mode 100644
index 0000000000..c9829cff0b
--- /dev/null
+++ b/benchmark/vm_simplereturn.yml
@@ -0,0 +1,7 @@
+prelude: |
+ def m
+ return 1
+ end
+benchmark:
+ vm_simplereturn: m
+loop_count: 30000000
diff --git a/benchmark/vm_string_literal.yml b/benchmark/vm_string_literal.yml
new file mode 100644
index 0000000000..64439c7980
--- /dev/null
+++ b/benchmark/vm_string_literal.yml
@@ -0,0 +1,4 @@
+benchmark:
+ vm_string_literal: |
+ x = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+loop_count: 6000000
diff --git a/benchmark/vm_struct_big_aref_hi.yml b/benchmark/vm_struct_big_aref_hi.yml
new file mode 100644
index 0000000000..4cf78970cb
--- /dev/null
+++ b/benchmark/vm_struct_big_aref_hi.yml
@@ -0,0 +1,7 @@
+prelude: |
+ s = Struct.new(*('a'..'z').map { |x| x.to_sym })
+ x = s.new
+benchmark:
+ vm_struct_big_aref_hi: |
+ x.z # x[25]
+loop_count: 6000000
diff --git a/benchmark/vm_struct_big_aref_lo.yml b/benchmark/vm_struct_big_aref_lo.yml
new file mode 100644
index 0000000000..c91af27fa5
--- /dev/null
+++ b/benchmark/vm_struct_big_aref_lo.yml
@@ -0,0 +1,7 @@
+prelude: |
+ s = Struct.new(*('a'..'z').map { |x| x.to_sym })
+ x = s.new
+benchmark:
+ vm_struct_big_aref_lo: |
+ x.k # x[10]
+loop_count: 6000000
diff --git a/benchmark/vm_struct_big_aset.yml b/benchmark/vm_struct_big_aset.yml
new file mode 100644
index 0000000000..69550d14ea
--- /dev/null
+++ b/benchmark/vm_struct_big_aset.yml
@@ -0,0 +1,11 @@
+# loop_count is not utilized since `i` is involved in the script
+benchmark:
+ vm_struct_big_aset: |
+ s = Struct.new(*('a'..'z').map { |x| x.to_sym })
+ x = s.new
+ i = 0
+ while i<6_000_000
+ i += 1
+ x.k = i # x[10] = i
+ end
+loop_count: 1
diff --git a/benchmark/vm_struct_big_href_hi.yml b/benchmark/vm_struct_big_href_hi.yml
new file mode 100644
index 0000000000..09b764dd13
--- /dev/null
+++ b/benchmark/vm_struct_big_href_hi.yml
@@ -0,0 +1,7 @@
+prelude: |
+ s = Struct.new(*('a'..'z').map { |x| x.to_sym })
+ x = s.new
+benchmark:
+ vm_struct_big_href_hi: |
+ x[:z]
+loop_count: 6000000
diff --git a/benchmark/vm_struct_big_href_lo.yml b/benchmark/vm_struct_big_href_lo.yml
new file mode 100644
index 0000000000..d2f00b220f
--- /dev/null
+++ b/benchmark/vm_struct_big_href_lo.yml
@@ -0,0 +1,7 @@
+prelude: |
+ s = Struct.new(*('a'..'z').map { |x| x.to_sym })
+ x = s.new
+benchmark:
+ vm_struct_big_href_lo: |
+ x[:k]
+loop_count: 6000000
diff --git a/benchmark/vm_struct_big_hset.yml b/benchmark/vm_struct_big_hset.yml
new file mode 100644
index 0000000000..fc45cbee9c
--- /dev/null
+++ b/benchmark/vm_struct_big_hset.yml
@@ -0,0 +1,11 @@
+# loop_count is not utilized since `i` is involved in the script
+benchmark:
+ vm_struct_big_hset: |
+ s = Struct.new(*('a'..'z').map { |x| x.to_sym })
+ x = s.new
+ i = 0
+ while i<6_000_000
+ i += 1
+ x[:k] = i
+ end
+loop_count: 1
diff --git a/benchmark/vm_struct_small_aref.yml b/benchmark/vm_struct_small_aref.yml
new file mode 100644
index 0000000000..5a83251d1e
--- /dev/null
+++ b/benchmark/vm_struct_small_aref.yml
@@ -0,0 +1,7 @@
+prelude: |
+ s = Struct.new(:a, :b, :c)
+ x = s.new
+benchmark:
+ vm_struct_small_aref: |
+ x.a
+loop_count: 6000000
diff --git a/benchmark/vm_struct_small_aset.yml b/benchmark/vm_struct_small_aset.yml
new file mode 100644
index 0000000000..74f435f126
--- /dev/null
+++ b/benchmark/vm_struct_small_aset.yml
@@ -0,0 +1,11 @@
+# loop_count is not utilized since `i` is involved in the script
+benchmark:
+ vm_struct_small_aset: |
+ s = Struct.new(:a, :b, :c)
+ x = s.new
+ i = 0
+ while i<6_000_000
+ i += 1
+ x.a = i
+ end
+loop_count: 1
diff --git a/benchmark/vm_struct_small_href.yml b/benchmark/vm_struct_small_href.yml
new file mode 100644
index 0000000000..6b7d7f39e7
--- /dev/null
+++ b/benchmark/vm_struct_small_href.yml
@@ -0,0 +1,7 @@
+prelude: |
+ s = Struct.new(:a, :b, :c)
+ x = s.new
+benchmark:
+ vm_struct_small_href: |
+ x[:a]
+loop_count: 6000000
diff --git a/benchmark/vm_struct_small_hset.yml b/benchmark/vm_struct_small_hset.yml
new file mode 100644
index 0000000000..5d43b150de
--- /dev/null
+++ b/benchmark/vm_struct_small_hset.yml
@@ -0,0 +1,7 @@
+prelude: |
+ s = Struct.new(:a, :b, :c)
+ x = s.new
+benchmark:
+ vm_struct_small_hset: |
+ x[:a] = 1
+loop_count: 6000000
diff --git a/benchmark/vm_super.yml b/benchmark/vm_super.yml
new file mode 100644
index 0000000000..0d1e965c6e
--- /dev/null
+++ b/benchmark/vm_super.yml
@@ -0,0 +1,17 @@
+prelude: |
+ class C
+ def m
+ 1
+ end
+ end
+
+ class CC < C
+ def m
+ super()
+ end
+ end
+
+ obj = CC.new
+benchmark:
+ vm_super: obj.m
+loop_count: 6000000
diff --git a/benchmark/vm_super_splat_calls.yml b/benchmark/vm_super_splat_calls.yml
new file mode 100644
index 0000000000..795e44e4da
--- /dev/null
+++ b/benchmark/vm_super_splat_calls.yml
@@ -0,0 +1,25 @@
+prelude: |
+ @a = [1].freeze
+ @ea = [].freeze
+ @kw = {y: 1}.freeze
+ @b = lambda{}
+ extend(Module.new{def arg_splat(x=0, y: 0) end})
+ extend(Module.new{def arg_splat_block(x=0, y: 0) end})
+ extend(Module.new{def splat_kw_splat(x=0, y: 0) end})
+ extend(Module.new{def splat_kw_splat_block(x=0, y: 0) end})
+ extend(Module.new{def splat_kw(x=0, y: 0) end})
+ extend(Module.new{def splat_kw_block(x=0, y: 0) end})
+
+ extend(Module.new{def arg_splat; super(1, *@ea) end})
+ extend(Module.new{def arg_splat_block; super(1, *@ea, &@b) end})
+ extend(Module.new{def splat_kw_splat; super(*@a, **@kw) end})
+ extend(Module.new{def splat_kw_splat_block; super(*@a, **@kw, &@b) end})
+ extend(Module.new{def splat_kw; super(*@a, y: 1) end})
+ extend(Module.new{def splat_kw_block; super(*@a, y: 1, &@b) end})
+benchmark:
+ arg_splat: "arg_splat"
+ arg_splat_block: "arg_splat_block"
+ splat_kw_splat: "splat_kw_splat"
+ splat_kw_splat_block: "splat_kw_splat_block"
+ splat_kw: "splat_kw"
+ splat_kw_block: "splat_kw_block"
diff --git a/benchmark/vm_swap.yml b/benchmark/vm_swap.yml
new file mode 100644
index 0000000000..e824a65e0a
--- /dev/null
+++ b/benchmark/vm_swap.yml
@@ -0,0 +1,7 @@
+prelude: |
+ a = 1
+ b = 2
+benchmark:
+ vm_swap: |
+ a, b = b, a
+loop_count: 30000000
diff --git a/benchmark/bm_vm_symbol_block_pass.rb b/benchmark/vm_symbol_block_pass.rb
index 1d433353e1..1d433353e1 100644
--- a/benchmark/bm_vm_symbol_block_pass.rb
+++ b/benchmark/vm_symbol_block_pass.rb
diff --git a/benchmark/vm_thread_alive_check.yml b/benchmark/vm_thread_alive_check.yml
new file mode 100644
index 0000000000..d21737d3e8
--- /dev/null
+++ b/benchmark/vm_thread_alive_check.yml
@@ -0,0 +1,8 @@
+benchmark:
+ vm_thread_alive_check: |
+ t = Thread.new{}
+ while t.alive?
+ Thread.pass
+ end
+loop_count: 50_000
+
diff --git a/benchmark/bm_vm_thread_close.rb b/benchmark/vm_thread_close.rb
index 3e9a265ce8..3e9a265ce8 100644
--- a/benchmark/bm_vm_thread_close.rb
+++ b/benchmark/vm_thread_close.rb
diff --git a/benchmark/vm_thread_condvar1.rb b/benchmark/vm_thread_condvar1.rb
new file mode 100644
index 0000000000..feed27c3ad
--- /dev/null
+++ b/benchmark/vm_thread_condvar1.rb
@@ -0,0 +1,28 @@
+# two threads, two mutex, two condvar ping-pong
+require 'thread'
+m1 = Thread::Mutex.new
+m2 = Thread::Mutex.new
+cv1 = Thread::ConditionVariable.new
+cv2 = Thread::ConditionVariable.new
+max = 100000
+i = 0
+wait = nil
+m2.synchronize do
+ wait = Thread.new do
+ m1.synchronize do
+ m2.synchronize { cv2.signal }
+ while (i += 1) < max
+ cv1.wait(m1)
+ cv2.signal
+ end
+ end
+ end
+ cv2.wait(m2)
+end
+m1.synchronize do
+ while i < max
+ cv1.signal
+ cv2.wait(m1)
+ end
+end
+wait.join
diff --git a/benchmark/vm_thread_condvar2.rb b/benchmark/vm_thread_condvar2.rb
new file mode 100644
index 0000000000..6590c4134b
--- /dev/null
+++ b/benchmark/vm_thread_condvar2.rb
@@ -0,0 +1,35 @@
+# many threads, one mutex, many condvars
+require 'thread'
+m = Thread::Mutex.new
+cv1 = Thread::ConditionVariable.new
+cv2 = Thread::ConditionVariable.new
+max = 1000
+n = 100
+waiting = 0
+scvs = []
+waiters = n.times.map do |i|
+ start_cv = Thread::ConditionVariable.new
+ scvs << start_cv
+ start_mtx = Thread::Mutex.new
+ start_mtx.synchronize do
+ th = Thread.new(start_mtx, start_cv) do |sm, scv|
+ m.synchronize do
+ sm.synchronize { scv.signal }
+ max.times do
+ cv2.signal if (waiting += 1) == n
+ cv1.wait(m)
+ end
+ end
+ end
+ start_cv.wait(start_mtx)
+ th
+ end
+end
+m.synchronize do
+ max.times do
+ cv2.wait(m) until waiting == n
+ waiting = 0
+ cv1.broadcast
+ end
+end
+waiters.each(&:join)
diff --git a/benchmark/bm_vm_thread_create_join.rb b/benchmark/vm_thread_create_join.rb
index 393cd45df9..393cd45df9 100644
--- a/benchmark/bm_vm_thread_create_join.rb
+++ b/benchmark/vm_thread_create_join.rb
diff --git a/benchmark/vm_thread_mutex1.rb b/benchmark/vm_thread_mutex1.rb
new file mode 100644
index 0000000000..66e42c85e1
--- /dev/null
+++ b/benchmark/vm_thread_mutex1.rb
@@ -0,0 +1,21 @@
+# one thread, one mutex (no contention)
+
+require 'thread'
+m = Thread::Mutex.new
+r = 0
+max = 2000
+lmax = max * max
+(1..1).map{
+ Thread.new{
+ i = 0
+ while i<lmax
+ i += 1
+ m.synchronize{
+ r += 1
+ }
+ end
+ }
+}.each{|e|
+ e.join
+}
+raise r.to_s if r != max * max
diff --git a/benchmark/vm_thread_mutex2.rb b/benchmark/vm_thread_mutex2.rb
new file mode 100644
index 0000000000..6e6c804c31
--- /dev/null
+++ b/benchmark/vm_thread_mutex2.rb
@@ -0,0 +1,21 @@
+# two threads, one mutex
+
+require 'thread'
+m = Thread::Mutex.new
+r = 0
+max = 2000
+lmax = (max * max)/2
+(1..2).map{
+ Thread.new{
+ i = 0
+ while i<lmax
+ i += 1
+ m.synchronize{
+ r += 1
+ }
+ end
+ }
+}.each{|e|
+ e.join
+}
+raise r.to_s if r != max * max
diff --git a/benchmark/vm_thread_mutex3.rb b/benchmark/vm_thread_mutex3.rb
new file mode 100644
index 0000000000..c750dc542a
--- /dev/null
+++ b/benchmark/vm_thread_mutex3.rb
@@ -0,0 +1,20 @@
+# 1000 threads, one mutex
+
+require 'thread'
+m = Thread::Mutex.new
+r = 0
+max = 2000
+(1..max).map{
+ Thread.new{
+ i = 0
+ while i<max
+ i += 1
+ m.synchronize{
+ r += 1
+ }
+ end
+ }
+}.each{|e|
+ e.join
+}
+raise r.to_s if r != max * max
diff --git a/benchmark/vm_thread_pass.rb b/benchmark/vm_thread_pass.rb
new file mode 100644
index 0000000000..438bd08d45
--- /dev/null
+++ b/benchmark/vm_thread_pass.rb
@@ -0,0 +1,15 @@
+# Plenty Thread.pass
+# A performance may depend on GVL implementation.
+
+tmax = (ARGV.shift || 8).to_i
+lmax = 400_000 / tmax
+
+(1..tmax).map{
+ Thread.new{
+ lmax.times{
+ Thread.pass
+ }
+ }
+}.each{|t| t.join}
+
+
diff --git a/benchmark/vm_thread_pass_flood.rb b/benchmark/vm_thread_pass_flood.rb
new file mode 100644
index 0000000000..65df8e6154
--- /dev/null
+++ b/benchmark/vm_thread_pass_flood.rb
@@ -0,0 +1,10 @@
+# n.b. this is a good test for GVL when pinned to a single CPU
+
+5_000.times{
+ Thread.new{loop{Thread.pass}}
+}
+
+i = 0
+while i<10_000
+ i += 1
+end
diff --git a/benchmark/bm_vm_thread_pipe.rb b/benchmark/vm_thread_pipe.rb
index 112a621905..112a621905 100644
--- a/benchmark/bm_vm_thread_pipe.rb
+++ b/benchmark/vm_thread_pipe.rb
diff --git a/benchmark/vm_thread_queue.rb b/benchmark/vm_thread_queue.rb
new file mode 100644
index 0000000000..1dd3696a3c
--- /dev/null
+++ b/benchmark/vm_thread_queue.rb
@@ -0,0 +1,18 @@
+require 'thread'
+
+n = 10_000_000
+q = Thread::Queue.new
+consumer = Thread.new{
+ while q.pop
+ # consuming
+ end
+}
+
+producer = Thread.new{
+ n.times{
+ q.push true
+ }
+ q.push nil
+}
+
+consumer.join
diff --git a/benchmark/vm_thread_sized_queue.rb b/benchmark/vm_thread_sized_queue.rb
new file mode 100644
index 0000000000..7b9af5482b
--- /dev/null
+++ b/benchmark/vm_thread_sized_queue.rb
@@ -0,0 +1,20 @@
+require 'thread'
+# on producer, one consumer
+
+n = 1_000_000
+q = Thread::SizedQueue.new(100)
+consumer = Thread.new{
+ while q.pop
+ # consuming
+ end
+}
+
+producer = Thread.new{
+ while n > 0
+ q.push true
+ n -= 1
+ end
+ q.push nil
+}
+
+consumer.join
diff --git a/benchmark/vm_thread_sized_queue2.rb b/benchmark/vm_thread_sized_queue2.rb
new file mode 100644
index 0000000000..de9f55e978
--- /dev/null
+++ b/benchmark/vm_thread_sized_queue2.rb
@@ -0,0 +1,23 @@
+require 'thread'
+# one producer, many consumers
+n = 1_000_000
+m = 10
+q = Thread::SizedQueue.new(100)
+consumers = m.times.map do
+ Thread.new do
+ while q.pop
+ # consuming
+ end
+ end
+end
+
+producer = Thread.new do
+ while n > 0
+ q.push true
+ n -= 1
+ end
+ m.times { q.push nil }
+end
+
+producer.join
+consumers.each(&:join)
diff --git a/benchmark/vm_thread_sized_queue3.rb b/benchmark/vm_thread_sized_queue3.rb
new file mode 100644
index 0000000000..ce5f1796d8
--- /dev/null
+++ b/benchmark/vm_thread_sized_queue3.rb
@@ -0,0 +1,22 @@
+require 'thread'
+# many producers, one consumer
+n = 1_000_000
+m = 10
+q = Thread::SizedQueue.new(100)
+consumer = Thread.new do
+ while q.pop
+ # consuming
+ end
+end
+
+producers = m.times.map do
+ Thread.new do
+ while n > 0
+ q.push true
+ n -= 1
+ end
+ end
+end
+producers.each(&:join)
+q.push nil
+consumer.join
diff --git a/benchmark/vm_thread_sized_queue4.rb b/benchmark/vm_thread_sized_queue4.rb
new file mode 100644
index 0000000000..a9b7d80ec0
--- /dev/null
+++ b/benchmark/vm_thread_sized_queue4.rb
@@ -0,0 +1,26 @@
+require 'thread'
+# many producers, many consumers
+nr = 1_000_000
+n = 10
+m = 10
+q = Thread::SizedQueue.new(100)
+consumers = n.times.map do
+ Thread.new do
+ while q.pop
+ # consuming
+ end
+ end
+end
+
+producers = m.times.map do
+ Thread.new do
+ while nr > 0
+ q.push true
+ nr -= 1
+ end
+ end
+end
+
+producers.each(&:join)
+n.times { q.push nil }
+consumers.each(&:join)
diff --git a/benchmark/vm_thread_sleep.yml b/benchmark/vm_thread_sleep.yml
new file mode 100644
index 0000000000..96901d8466
--- /dev/null
+++ b/benchmark/vm_thread_sleep.yml
@@ -0,0 +1,4 @@
+benchmark:
+ vm_thread_sleep: |
+ Thread.new { sleep }
+loop_count: 10_000
diff --git a/benchmark/vm_unif1.yml b/benchmark/vm_unif1.yml
new file mode 100644
index 0000000000..04187bb0e2
--- /dev/null
+++ b/benchmark/vm_unif1.yml
@@ -0,0 +1,7 @@
+prelude: |
+ def m a, b
+ end
+benchmark:
+ vm_unif1: |
+ m 100, 200
+loop_count: 6000000
diff --git a/benchmark/vm_yield.yml b/benchmark/vm_yield.yml
new file mode 100644
index 0000000000..230be3d84f
--- /dev/null
+++ b/benchmark/vm_yield.yml
@@ -0,0 +1,13 @@
+# while loop cost is not removed due to benchmark_driver.gem's limitation
+benchmark:
+ vm_yield: |
+ def m
+ i = 0
+ while i<30_000_000
+ i += 1
+ yield
+ end
+ end
+
+ m{}
+loop_count: 1
diff --git a/benchmark/vm_zsuper.yml b/benchmark/vm_zsuper.yml
new file mode 100644
index 0000000000..bfb5837578
--- /dev/null
+++ b/benchmark/vm_zsuper.yml
@@ -0,0 +1,18 @@
+prelude: |
+ class C
+ def m a
+ 1
+ end
+ end
+
+ class CC < C
+ def m a
+ super
+ end
+ end
+
+ obj = CC.new
+benchmark:
+ vm_zsuper: |
+ obj.m 10
+loop_count: 6000000
diff --git a/benchmark/vm_zsuper_splat_calls.yml b/benchmark/vm_zsuper_splat_calls.yml
new file mode 100644
index 0000000000..82dc22349d
--- /dev/null
+++ b/benchmark/vm_zsuper_splat_calls.yml
@@ -0,0 +1,28 @@
+prelude: |
+ a = [1].freeze
+ ea = [].freeze
+ kw = {y: 1}.freeze
+ b = lambda{}
+ extend(Module.new{def arg_splat(x=0, y: 0) end})
+ extend(Module.new{def arg_splat_block(x=0, y: 0) end})
+ extend(Module.new{def arg_splat_post(x=0, y: 0) end})
+ extend(Module.new{def splat_kw_splat(x=0, y: 0) end})
+ extend(Module.new{def splat_kw_splat_block(x=0, y: 0) end})
+ extend(Module.new{def splat_kw(x=0, y: 0) end})
+ extend(Module.new{def splat_kw_block(x=0, y: 0) end})
+
+ extend(Module.new{def arg_splat(x, *a) super end})
+ extend(Module.new{def arg_splat_block(x, *a, &b) super end})
+ extend(Module.new{def arg_splat_post(*a, x) super end})
+ extend(Module.new{def splat_kw_splat(*a, **kw) super end})
+ extend(Module.new{def splat_kw_splat_block(*a, **kw, &b) super end})
+ extend(Module.new{def splat_kw(*a, y: 1) super end})
+ extend(Module.new{def splat_kw_block(*a, y: 1, &b) super end})
+benchmark:
+ arg_splat: "arg_splat(1, *ea)"
+ arg_splat_block: "arg_splat_block(1, *ea, &b)"
+ arg_splat_post: "arg_splat_post(1, *ea, &b)"
+ splat_kw_splat: "splat_kw_splat(*a, **kw)"
+ splat_kw_splat_block: "splat_kw_splat_block(*a, **kw, &b)"
+ splat_kw: "splat_kw(*a, y: 1)"
+ splat_kw_block: "splat_kw_block(*a, y: 1, &b)"
diff --git a/benchmark/wc.input.base b/benchmark/wc.input.base
deleted file mode 100644
index 41143fbac0..0000000000
--- a/benchmark/wc.input.base
+++ /dev/null
@@ -1,25 +0,0 @@
-Subject: Re: Who was Izchak Miller?
-From: "Jane D. Anonymous" <nobody@yale.edu>
-Date: 1996/04/28
-Message-Id: <4lv7bc$oh@news.ycc.yale.edu>
-References: <317C405E.5DFA@panix.com> <4lk6vl$gde@ns.oar.net>
-To: 75176.2330@compuserve.com
-Content-Type: text/plain; charset=us-ascii
-Organization: Yale University
-X-Url: news:4lk6vl$gde@ns.oar.net
-Mime-Version: 1.0
-Newsgroups: rec.games.roguelike.nethack
-X-Mailer: Mozilla 1.1N (Macintosh; I; 68K)
-
-Hello there, Izchak Miller was my father. When I was younger I spent
-many a night, hunched over the keyboard with a cup of tea, playing
-nethack with him and my brother. my dad was a philosopher with a strong
-weakness for fantasy/sci fi. I remember when he started to get involved
-with the Nethack team- my brother's Dungeons and Dragons monster book
-found a regular place beside my dad's desk. it's nice to see him living
-on in the game he loved so much :-).
- Tamar Miller
-
-The following is a really long word of 5000 characters:
-
-wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
diff --git a/bignum.c b/bignum.c
index afd264adec..ee2fa1ed30 100644
--- a/bignum.c
+++ b/bignum.c
@@ -9,29 +9,59 @@
**********************************************************************/
-#include "internal.h"
-#include "ruby/thread.h"
-#include "ruby/util.h"
+#include "ruby/internal/config.h"
+
+#include <ctype.h>
+#include <float.h>
+#include <math.h>
#ifdef HAVE_STRINGS_H
-#include <strings.h>
+# include <strings.h>
#endif
-#include <math.h>
-#include <float.h>
-#include <ctype.h>
+
#ifdef HAVE_IEEEFP_H
-#include <ieeefp.h>
+# include <ieeefp.h>
#endif
-#include "ruby_assert.h"
+#if !defined(USE_GMP)
#if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H)
-#define USE_GMP
-#include <gmp.h>
+# define USE_GMP 1
+#else
+# define USE_GMP 0
+#endif
#endif
-#define RB_BIGNUM_TYPE_P(x) RB_TYPE_P((x), T_BIGNUM)
+#include "id.h"
+#include "internal.h"
+#include "internal/bignum.h"
+#include "internal/complex.h"
+#include "internal/gc.h"
+#include "internal/numeric.h"
+#include "internal/object.h"
+#include "internal/sanitizers.h"
+#include "internal/variable.h"
+#include "internal/warnings.h"
+#include "ruby/thread.h"
+#include "ruby/util.h"
+#include "ruby_assert.h"
+
+#if USE_GMP
+RBIMPL_WARNING_PUSH()
+# ifdef _MSC_VER
+RBIMPL_WARNING_IGNORED(4146) /* for mpn_neg() */
+# endif
+# include <gmp.h>
+RBIMPL_WARNING_POP()
+#endif
+
+static const bool debug_integer_pack = (
+#ifdef DEBUG_INTEGER_PACK
+ DEBUG_INTEGER_PACK+0
+#else
+ RUBY_DEBUG
+#endif
+ ) != 0;
-VALUE rb_cBignum;
const char ruby_digitmap[] = "0123456789abcdefghijklmnopqrstuvwxyz";
#ifndef SIZEOF_BDIGIT_DBL
@@ -49,7 +79,6 @@ STATIC_ASSERT(sizeof_bdigit_and_dbl, SIZEOF_BDIGIT*2 <= SIZEOF_BDIGIT_DBL);
STATIC_ASSERT(bdigit_signedness, 0 < (BDIGIT)-1);
STATIC_ASSERT(bdigit_dbl_signedness, 0 < (BDIGIT_DBL)-1);
STATIC_ASSERT(bdigit_dbl_signed_signedness, 0 > (BDIGIT_DBL_SIGNED)-1);
-STATIC_ASSERT(rbignum_embed_len_max, BIGNUM_EMBED_LEN_MAX <= (BIGNUM_EMBED_LEN_MASK >> BIGNUM_EMBED_LEN_SHIFT));
#if SIZEOF_BDIGIT < SIZEOF_LONG
STATIC_ASSERT(sizeof_long_and_sizeof_bdigit, SIZEOF_LONG % SIZEOF_BDIGIT == 0);
@@ -62,8 +91,7 @@ STATIC_ASSERT(sizeof_long_and_sizeof_bdigit, SIZEOF_BDIGIT % SIZEOF_LONG == 0);
#else
# define HOST_BIGENDIAN_P 0
#endif
-#define ALIGNOF(type) ((int)offsetof(struct { char f1; type f2; }, f2))
-/* (!LSHIFTABLE(d, n) ? 0 : (n)) is same as n but suppress a warning, C4293, by Visual Studio. */
+/* (!LSHIFTABLE(d, n) ? 0 : (n)) is the same as n but suppress a warning, C4293, by Visual Studio. */
#define LSHIFTABLE(d, n) ((n) < sizeof(d) * CHAR_BIT)
#define LSHIFTX(d, n) (!LSHIFTABLE(d, n) ? 0 : ((d) << (!LSHIFTABLE(d, n) ? 0 : (n))))
#define CLEAR_LOWBITS(d, numbits) ((d) & LSHIFTX(~((d)*0), (numbits)))
@@ -90,8 +118,8 @@ STATIC_ASSERT(sizeof_long_and_sizeof_bdigit, SIZEOF_BDIGIT % SIZEOF_LONG == 0);
#endif
#define BIGZEROP(x) (BIGNUM_LEN(x) == 0 || \
- (BDIGITS(x)[0] == 0 && \
- (BIGNUM_LEN(x) == 1 || bigzero_p(x))))
+ (BDIGITS(x)[0] == 0 && \
+ (BIGNUM_LEN(x) == 1 || bigzero_p(x))))
#define BIGSIZE(x) (BIGNUM_LEN(x) == 0 ? (size_t)0 : \
BDIGITS(x)[BIGNUM_LEN(x)-1] ? \
(size_t)(BIGNUM_LEN(x)*SIZEOF_BDIGIT - nlz(BDIGITS(x)[BIGNUM_LEN(x)-1])/CHAR_BIT) : \
@@ -110,7 +138,7 @@ STATIC_ASSERT(sizeof_long_and_sizeof_bdigit, SIZEOF_BDIGIT % SIZEOF_LONG == 0);
#define BIGNUM_SET_NEGATIVE_SIGN(b) BIGNUM_SET_SIGN(b, 0)
#define BIGNUM_SET_POSITIVE_SIGN(b) BIGNUM_SET_SIGN(b, 1)
-#define bignew(len,sign) bignew_1(rb_cBignum,(len),(sign))
+#define bignew(len,sign) bignew_1(rb_cInteger,(len),(sign))
#define BDIGITS_ZERO(ptr, n) do { \
BDIGIT *bdigitz_zero_ptr = (ptr); \
@@ -136,21 +164,22 @@ STATIC_ASSERT(sizeof_long_and_sizeof_bdigit, SIZEOF_BDIGIT % SIZEOF_LONG == 0);
#define GMP_DIV_DIGITS 20
#define GMP_BIG2STR_DIGITS 20
#define GMP_STR2BIG_DIGITS 20
+#if USE_GMP
+# define NAIVE_MUL_DIGITS GMP_MUL_DIGITS
+#else
+# define NAIVE_MUL_DIGITS KARATSUBA_MUL_DIGITS
+#endif
typedef void (mulfunc_t)(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, BDIGIT *wds, size_t wn);
static mulfunc_t bary_mul_toom3_start;
static mulfunc_t bary_mul_karatsuba_start;
static BDIGIT bigdivrem_single(BDIGIT *qds, const BDIGIT *xds, size_t xn, BDIGIT y);
-static void bary_divmod(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn);
-static VALUE bigmul0(VALUE x, VALUE y);
-static void bary_mul_toom3(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, BDIGIT *wds, size_t wn);
static VALUE bignew_1(VALUE klass, size_t len, int sign);
static inline VALUE bigtrunc(VALUE x);
static VALUE bigsq(VALUE x);
-static void bigdivmod(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp);
static inline VALUE power_cache_get_power(int base, int power_level, size_t *numdigits_ret);
#if SIZEOF_BDIGIT <= SIZEOF_INT
@@ -325,7 +354,7 @@ maxpow_in_bdigit_dbl(int base, int *exp_ret)
BDIGIT_DBL maxpow;
int exponent;
- assert(2 <= base && base <= 36);
+ RUBY_ASSERT(2 <= base && base <= 36);
{
#if SIZEOF_BDIGIT_DBL == 2
@@ -357,7 +386,7 @@ maxpow_in_bdigit_dbl(int base, int *exp_ret)
static inline BDIGIT_DBL
bary2bdigitdbl(const BDIGIT *ds, size_t n)
{
- assert(n <= 2);
+ RUBY_ASSERT(n <= 2);
if (n == 2)
return ds[0] | BIGUP(ds[1]);
@@ -369,7 +398,7 @@ bary2bdigitdbl(const BDIGIT *ds, size_t n)
static inline void
bdigitdbl2bary(BDIGIT *ds, size_t n, BDIGIT_DBL num)
{
- assert(n == 2);
+ RUBY_ASSERT(n == 2);
ds[0] = BIGLO(num);
ds[1] = (BDIGIT)BIGDN(num);
@@ -378,6 +407,7 @@ bdigitdbl2bary(BDIGIT *ds, size_t n, BDIGIT_DBL num)
static int
bary_cmp(const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
{
+ size_t i;
BARY_TRUNC(xds, xn);
BARY_TRUNC(yds, yn);
@@ -386,11 +416,12 @@ bary_cmp(const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
if (xn > yn)
return 1;
- while (xn-- && xds[xn] == yds[xn])
- ;
- if (xn == (size_t)-1)
+ for (i = 0; i < xn; i++)
+ if (xds[xn - i - 1] != yds[yn - i - 1])
+ break;
+ if (i == xn)
return 0;
- return xds[xn] < yds[xn] ? -1 : 1;
+ return xds[xn - i - 1] < yds[yn - i - 1] ? -1 : 1;
}
static BDIGIT
@@ -398,12 +429,12 @@ bary_small_lshift(BDIGIT *zds, const BDIGIT *xds, size_t n, int shift)
{
size_t i;
BDIGIT_DBL num = 0;
- assert(0 <= shift && shift < BITSPERDIG);
+ RUBY_ASSERT(0 <= shift && shift < BITSPERDIG);
for (i=0; i<n; i++) {
- num = num | (BDIGIT_DBL)*xds++ << shift;
- *zds++ = BIGLO(num);
- num = BIGDN(num);
+ num = num | (BDIGIT_DBL)*xds++ << shift;
+ *zds++ = BIGLO(num);
+ num = BIGDN(num);
}
return BIGLO(num);
}
@@ -411,27 +442,27 @@ bary_small_lshift(BDIGIT *zds, const BDIGIT *xds, size_t n, int shift)
static void
bary_small_rshift(BDIGIT *zds, const BDIGIT *xds, size_t n, int shift, BDIGIT higher_bdigit)
{
+ size_t i;
BDIGIT_DBL num = 0;
- BDIGIT x;
- assert(0 <= shift && shift < BITSPERDIG);
+ RUBY_ASSERT(0 <= shift && shift < BITSPERDIG);
num = BIGUP(higher_bdigit);
- while (n--) {
- num = (num | xds[n]) >> shift;
- x = xds[n];
- zds[n] = BIGLO(num);
- num = BIGUP(x);
+ for (i = 0; i < n; i++) {
+ BDIGIT x = xds[n - i - 1];
+ num = (num | x) >> shift;
+ zds[n - i - 1] = BIGLO(num);
+ num = BIGUP(x);
}
}
static int
-bary_zero_p(BDIGIT *xds, size_t xn)
+bary_zero_p(const BDIGIT *xds, size_t xn)
{
if (xn == 0)
return 1;
do {
- if (xds[--xn]) return 0;
+ if (xds[--xn]) return 0;
} while (xn);
return 1;
}
@@ -439,15 +470,15 @@ bary_zero_p(BDIGIT *xds, size_t xn)
static void
bary_neg(BDIGIT *ds, size_t n)
{
- while (n--)
- ds[n] = BIGLO(~ds[n]);
+ size_t i;
+ for (i = 0; i < n; i++)
+ ds[n - i - 1] = BIGLO(~ds[n - i - 1]);
}
static int
bary_2comp(BDIGIT *ds, size_t n)
{
size_t i;
- i = 0;
for (i = 0; i < n; i++) {
if (ds[i] != 0) {
goto non_zero;
@@ -610,8 +641,12 @@ static int
bytes_2comp(unsigned char *buf, size_t len)
{
size_t i;
- for (i = 0; i < len; i++)
- buf[i] = ~buf[i];
+ for (i = 0; i < len; i++) {
+ signed char c = buf[i];
+ signed int d = ~c;
+ unsigned int e = d & 0xFF;
+ buf[i] = e;
+ }
for (i = 0; i < len; i++) {
buf[i]++;
if (buf[i] != 0)
@@ -661,7 +696,7 @@ bary_pack(int sign, BDIGIT *ds, size_t num_bdigits, void *words, size_t numwords
return ((1 < de - dp || CLEAR_LOWBITS(d, 8) != 0) ? 2 : 1) * sign;
}
#if defined(HAVE_UINT16_T) && 2 <= SIZEOF_BDIGIT
- if (wordsize == 2 && (uintptr_t)words % ALIGNOF(uint16_t) == 0) {
+ if (wordsize == 2 && (uintptr_t)words % RUBY_ALIGNOF(uint16_t) == 0) {
uint16_t u = (uint16_t)(d = dp[0]);
if (need_swap) u = swap16(u);
*((uint16_t *)words) = u;
@@ -669,7 +704,7 @@ bary_pack(int sign, BDIGIT *ds, size_t num_bdigits, void *words, size_t numwords
}
#endif
#if defined(HAVE_UINT32_T) && 4 <= SIZEOF_BDIGIT
- if (wordsize == 4 && (uintptr_t)words % ALIGNOF(uint32_t) == 0) {
+ if (wordsize == 4 && (uintptr_t)words % RUBY_ALIGNOF(uint32_t) == 0) {
uint32_t u = (uint32_t)(d = dp[0]);
if (need_swap) u = swap32(u);
*((uint32_t *)words) = u;
@@ -677,7 +712,7 @@ bary_pack(int sign, BDIGIT *ds, size_t num_bdigits, void *words, size_t numwords
}
#endif
#if defined(HAVE_UINT64_T) && 8 <= SIZEOF_BDIGIT
- if (wordsize == 8 && (uintptr_t)words % ALIGNOF(uint64_t) == 0) {
+ if (wordsize == 8 && (uintptr_t)words % RUBY_ALIGNOF(uint64_t) == 0) {
uint64_t u = (uint64_t)(d = dp[0]);
if (need_swap) u = swap64(u);
*((uint64_t *)words) = u;
@@ -692,7 +727,7 @@ bary_pack(int sign, BDIGIT *ds, size_t num_bdigits, void *words, size_t numwords
return (1 < de - dp || FILL_LOWBITS(d, 8) != -1) ? -2 : -1;
}
#if defined(HAVE_UINT16_T) && 2 <= SIZEOF_BDIGIT
- if (wordsize == 2 && (uintptr_t)words % ALIGNOF(uint16_t) == 0) {
+ if (wordsize == 2 && (uintptr_t)words % RUBY_ALIGNOF(uint16_t) == 0) {
uint16_t u = (uint16_t)(d = -(BDIGIT_DBL_SIGNED)dp[0]);
if (need_swap) u = swap16(u);
*((uint16_t *)words) = u;
@@ -701,7 +736,7 @@ bary_pack(int sign, BDIGIT *ds, size_t num_bdigits, void *words, size_t numwords
}
#endif
#if defined(HAVE_UINT32_T) && 4 <= SIZEOF_BDIGIT
- if (wordsize == 4 && (uintptr_t)words % ALIGNOF(uint32_t) == 0) {
+ if (wordsize == 4 && (uintptr_t)words % RUBY_ALIGNOF(uint32_t) == 0) {
uint32_t u = (uint32_t)(d = -(BDIGIT_DBL_SIGNED)dp[0]);
if (need_swap) u = swap32(u);
*((uint32_t *)words) = u;
@@ -710,7 +745,7 @@ bary_pack(int sign, BDIGIT *ds, size_t num_bdigits, void *words, size_t numwords
}
#endif
#if defined(HAVE_UINT64_T) && 8 <= SIZEOF_BDIGIT
- if (wordsize == 8 && (uintptr_t)words % ALIGNOF(uint64_t) == 0) {
+ if (wordsize == 8 && (uintptr_t)words % RUBY_ALIGNOF(uint64_t) == 0) {
uint64_t u = (uint64_t)(d = -(BDIGIT_DBL_SIGNED)dp[0]);
if (need_swap) u = swap64(u);
*((uint64_t *)words) = u;
@@ -753,7 +788,7 @@ bary_pack(int sign, BDIGIT *ds, size_t num_bdigits, void *words, size_t numwords
}
#endif
if (nails == 0 && SIZEOF_BDIGIT == sizeof(BDIGIT) &&
- wordsize % SIZEOF_BDIGIT == 0 && (uintptr_t)words % ALIGNOF(BDIGIT) == 0) {
+ wordsize % SIZEOF_BDIGIT == 0 && (uintptr_t)words % RUBY_ALIGNOF(BDIGIT) == 0) {
size_t bdigits_per_word = wordsize / SIZEOF_BDIGIT;
size_t src_num_bdigits = de - dp;
size_t dst_num_bdigits = numwords * bdigits_per_word;
@@ -896,8 +931,6 @@ bary_pack(int sign, BDIGIT *ds, size_t num_bdigits, void *words, size_t numwords
}
if ((flags & INTEGER_PACK_2COMP) && (sign < 0 && numwords != 0)) {
- unsigned char *buf;
-
int word_num_partialbits;
size_t word_num_fullbytes;
@@ -957,7 +990,7 @@ integer_unpack_num_bdigits_small(size_t numwords, size_t wordsize, size_t nails,
{
/* nlp_bits stands for number of leading padding bits */
size_t num_bits = (wordsize * CHAR_BIT - nails) * numwords;
- size_t num_bdigits = (num_bits + BITSPERDIG - 1) / BITSPERDIG;
+ size_t num_bdigits = roomof(num_bits, BITSPERDIG);
*nlp_bits_ret = (int)(num_bdigits * BITSPERDIG - num_bits);
return num_bdigits;
}
@@ -967,7 +1000,7 @@ integer_unpack_num_bdigits_generic(size_t numwords, size_t wordsize, size_t nail
{
/* BITSPERDIG = SIZEOF_BDIGIT * CHAR_BIT */
/* num_bits = (wordsize * CHAR_BIT - nails) * numwords */
- /* num_bdigits = (num_bits + BITSPERDIG - 1) / BITSPERDIG */
+ /* num_bdigits = roomof(num_bits, BITSPERDIG) */
/* num_bits = CHAR_BIT * (wordsize * numwords) - nails * numwords = CHAR_BIT * num_bytes1 - nails * numwords */
size_t num_bytes1 = wordsize * numwords;
@@ -1029,14 +1062,13 @@ integer_unpack_num_bdigits(size_t numwords, size_t wordsize, size_t nails, int *
if (numwords <= (SIZE_MAX - (BITSPERDIG-1)) / CHAR_BIT / wordsize) {
num_bdigits = integer_unpack_num_bdigits_small(numwords, wordsize, nails, nlp_bits_ret);
-#ifdef DEBUG_INTEGER_PACK
- {
+ if (debug_integer_pack) {
int nlp_bits1;
size_t num_bdigits1 = integer_unpack_num_bdigits_generic(numwords, wordsize, nails, &nlp_bits1);
- assert(num_bdigits == num_bdigits1);
- assert(*nlp_bits_ret == nlp_bits1);
+ RUBY_ASSERT(num_bdigits == num_bdigits1);
+ RUBY_ASSERT(*nlp_bits_ret == nlp_bits1);
+ (void)num_bdigits1;
}
-#endif
}
else {
num_bdigits = integer_unpack_num_bdigits_generic(numwords, wordsize, nails, nlp_bits_ret);
@@ -1075,6 +1107,13 @@ integer_unpack_single_bdigit(BDIGIT u, size_t size, int flags, BDIGIT *dp)
return sign;
}
+#ifdef HAVE_BUILTIN___BUILTIN_ASSUME_ALIGNED
+#define reinterpret_cast(type, value) (type) \
+ __builtin_assume_aligned((value), sizeof(*(type)NULL));
+#else
+#define reinterpret_cast(type, value) (type)value
+#endif
+
static int
bary_unpack_internal(BDIGIT *bdigits, size_t num_bdigits, const void *words, size_t numwords, size_t wordsize, size_t nails, int flags, int nlp_bits)
{
@@ -1095,23 +1134,24 @@ bary_unpack_internal(BDIGIT *bdigits, size_t num_bdigits, const void *words, siz
return integer_unpack_single_bdigit(*(uint8_t *)buf, sizeof(uint8_t), flags, dp);
}
#if defined(HAVE_UINT16_T) && 2 <= SIZEOF_BDIGIT
- if (wordsize == 2 && (uintptr_t)words % ALIGNOF(uint16_t) == 0) {
- uint16_t u = *(uint16_t *)buf;
+ if (wordsize == 2 && (uintptr_t)words % RUBY_ALIGNOF(uint16_t) == 0) {
+ uint16_t u = *reinterpret_cast(const uint16_t *, buf);
return integer_unpack_single_bdigit(need_swap ? swap16(u) : u, sizeof(uint16_t), flags, dp);
}
#endif
#if defined(HAVE_UINT32_T) && 4 <= SIZEOF_BDIGIT
- if (wordsize == 4 && (uintptr_t)words % ALIGNOF(uint32_t) == 0) {
- uint32_t u = *(uint32_t *)buf;
+ if (wordsize == 4 && (uintptr_t)words % RUBY_ALIGNOF(uint32_t) == 0) {
+ uint32_t u = *reinterpret_cast(const uint32_t *, buf);
return integer_unpack_single_bdigit(need_swap ? swap32(u) : u, sizeof(uint32_t), flags, dp);
}
#endif
#if defined(HAVE_UINT64_T) && 8 <= SIZEOF_BDIGIT
- if (wordsize == 8 && (uintptr_t)words % ALIGNOF(uint64_t) == 0) {
- uint64_t u = *(uint64_t *)buf;
+ if (wordsize == 8 && (uintptr_t)words % RUBY_ALIGNOF(uint64_t) == 0) {
+ uint64_t u = *reinterpret_cast(const uint64_t *, buf);
return integer_unpack_single_bdigit(need_swap ? swap64(u) : u, sizeof(uint64_t), flags, dp);
}
#endif
+#undef reinterpret_cast
}
#if !defined(WORDS_BIGENDIAN)
if (nails == 0 && SIZEOF_BDIGIT == sizeof(BDIGIT) &&
@@ -1236,7 +1276,7 @@ bary_unpack_internal(BDIGIT *bdigits, size_t num_bdigits, const void *words, siz
}
if (dd)
*dp++ = (BDIGIT)dd;
- assert(dp <= de);
+ RUBY_ASSERT(dp <= de);
while (dp < de)
*dp++ = 0;
#undef PUSH_BITS
@@ -1295,7 +1335,7 @@ bary_unpack(BDIGIT *bdigits, size_t num_bdigits, const void *words, size_t numwo
num_bdigits0 = integer_unpack_num_bdigits(numwords, wordsize, nails, &nlp_bits);
- assert(num_bdigits0 <= num_bdigits);
+ RUBY_ASSERT(num_bdigits0 <= num_bdigits);
sign = bary_unpack_internal(bdigits, num_bdigits0, words, numwords, wordsize, nails, flags, nlp_bits);
@@ -1314,16 +1354,16 @@ bary_subb(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yd
size_t i;
size_t sn;
- assert(xn <= zn);
- assert(yn <= zn);
+ RUBY_ASSERT(xn <= zn);
+ RUBY_ASSERT(yn <= zn);
sn = xn < yn ? xn : yn;
num = borrow ? -1 : 0;
for (i = 0; i < sn; i++) {
- num += (BDIGIT_DBL_SIGNED)xds[i] - yds[i];
- zds[i] = BIGLO(num);
- num = BIGDN(num);
+ num += (BDIGIT_DBL_SIGNED)xds[i] - yds[i];
+ zds[i] = BIGLO(num);
+ num = BIGDN(num);
}
if (yn <= xn) {
for (; i < xn; i++) {
@@ -1342,7 +1382,7 @@ bary_subb(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yd
}
if (num == 0) goto num_is_zero;
for (; i < zn; i++) {
- zds[i] = BDIGMAX;
+ zds[i] = BDIGMAX;
}
return 1;
@@ -1350,10 +1390,10 @@ bary_subb(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yd
if (xds == zds && xn == zn)
return 0;
for (; i < xn; i++) {
- zds[i] = xds[i];
+ zds[i] = xds[i];
}
for (; i < zn; i++) {
- zds[i] = 0;
+ zds[i] = 0;
}
return 0;
}
@@ -1376,31 +1416,31 @@ bary_addc(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yd
BDIGIT_DBL num;
size_t i;
- assert(xn <= zn);
- assert(yn <= zn);
+ RUBY_ASSERT(xn <= zn);
+ RUBY_ASSERT(yn <= zn);
if (xn > yn) {
- const BDIGIT *tds;
- tds = xds; xds = yds; yds = tds;
- i = xn; xn = yn; yn = i;
+ const BDIGIT *tds;
+ tds = xds; xds = yds; yds = tds;
+ i = xn; xn = yn; yn = i;
}
num = carry ? 1 : 0;
for (i = 0; i < xn; i++) {
- num += (BDIGIT_DBL)xds[i] + yds[i];
- zds[i] = BIGLO(num);
- num = BIGDN(num);
+ num += (BDIGIT_DBL)xds[i] + yds[i];
+ zds[i] = BIGLO(num);
+ num = BIGDN(num);
}
for (; i < yn; i++) {
if (num == 0) goto num_is_zero;
- num += yds[i];
- zds[i] = BIGLO(num);
- num = BIGDN(num);
+ num += yds[i];
+ zds[i] = BIGLO(num);
+ num = BIGDN(num);
}
for (; i < zn; i++) {
if (num == 0) goto num_is_zero;
- zds[i] = BIGLO(num);
- num = BIGDN(num);
+ zds[i] = BIGLO(num);
+ num = BIGDN(num);
}
return num != 0;
@@ -1408,10 +1448,10 @@ bary_addc(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yd
if (yds == zds && yn == zn)
return 0;
for (; i < yn; i++) {
- zds[i] = yds[i];
+ zds[i] = yds[i];
}
for (; i < zn; i++) {
- zds[i] = 0;
+ zds[i] = 0;
}
return 0;
}
@@ -1427,7 +1467,9 @@ bary_add_one(BDIGIT *ds, size_t n)
{
size_t i;
for (i = 0; i < n; i++) {
- ds[i] = BIGLO(ds[i]+1);
+ BDIGIT_DBL n = ds[i];
+ n += 1;
+ ds[i] = BIGLO(n);
if (ds[i] != 0)
return 0;
}
@@ -1439,7 +1481,7 @@ bary_mul_single(BDIGIT *zds, size_t zn, BDIGIT x, BDIGIT y)
{
BDIGIT_DBL n;
- assert(2 <= zn);
+ RUBY_ASSERT(2 <= zn);
n = (BDIGIT_DBL)x * y;
bdigitdbl2bary(zds, 2, n);
@@ -1453,7 +1495,7 @@ bary_muladd_1xN(BDIGIT *zds, size_t zn, BDIGIT x, const BDIGIT *yds, size_t yn)
BDIGIT_DBL dd;
size_t j;
- assert(zn > yn);
+ RUBY_ASSERT(zn > yn);
if (x == 0)
return 0;
@@ -1488,22 +1530,23 @@ bigdivrem_mulsub(BDIGIT *zds, size_t zn, BDIGIT x, const BDIGIT *yds, size_t yn)
BDIGIT_DBL t2;
BDIGIT_DBL_SIGNED num;
- assert(zn == yn + 1);
+ RUBY_ASSERT(zn == yn + 1);
num = 0;
t2 = 0;
i = 0;
do {
- BDIGIT_DBL ee;
+ BDIGIT_DBL_SIGNED ee;
t2 += (BDIGIT_DBL)yds[i] * x;
ee = num - BIGLO(t2);
- num = (BDIGIT_DBL)zds[i] + ee;
+ num = (BDIGIT_DBL_SIGNED)zds[i] + ee;
if (ee) zds[i] = BIGLO(num);
num = BIGDN(num);
t2 = BIGDN(t2);
} while (++i < yn);
- num += zds[i] - t2; /* borrow from high digit; don't update */
+ num -= (BDIGIT_DBL_SIGNED)t2;
+ num += (BDIGIT_DBL_SIGNED)zds[yn]; /* borrow from high digit; don't update */
return num;
}
@@ -1512,7 +1555,7 @@ bary_mulsub_1xN(BDIGIT *zds, size_t zn, BDIGIT x, const BDIGIT *yds, size_t yn)
{
BDIGIT_DBL_SIGNED num;
- assert(zn == yn + 1);
+ RUBY_ASSERT(zn == yn + 1);
num = bigdivrem_mulsub(zds, zn, x, yds, yn);
zds[yn] = BIGLO(num);
@@ -1526,7 +1569,7 @@ bary_mul_normal(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIG
{
size_t i;
- assert(xn + yn <= zn);
+ RUBY_ASSERT(xn + yn <= zn);
BDIGITS_ZERO(zds, zn);
for (i = 0; i < xn; i++) {
@@ -1547,7 +1590,7 @@ rb_big_mul_normal(VALUE x, VALUE y)
/* efficient squaring (2 times faster than normal multiplication)
* ref: Handbook of Applied Cryptography, Algorithm 14.16
- * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
+ * https://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
*/
static void
bary_sq_fast(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn)
@@ -1557,7 +1600,7 @@ bary_sq_fast(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn)
BDIGIT vl;
int vh;
- assert(xn * 2 <= zn);
+ RUBY_ASSERT(xn * 2 <= zn);
BDIGITS_ZERO(zds, zn);
@@ -1565,30 +1608,30 @@ bary_sq_fast(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn)
return;
for (i = 0; i < xn-1; i++) {
- v = (BDIGIT_DBL)xds[i];
- if (!v)
+ v = (BDIGIT_DBL)xds[i];
+ if (!v)
continue;
- c = (BDIGIT_DBL)zds[i + i] + v * v;
- zds[i + i] = BIGLO(c);
- c = BIGDN(c);
- v *= 2;
+ c = (BDIGIT_DBL)zds[i + i] + v * v;
+ zds[i + i] = BIGLO(c);
+ c = BIGDN(c);
+ v *= 2;
vl = BIGLO(v);
vh = (int)BIGDN(v);
- for (j = i + 1; j < xn; j++) {
- w = (BDIGIT_DBL)xds[j];
- c += (BDIGIT_DBL)zds[i + j] + vl * w;
- zds[i + j] = BIGLO(c);
- c = BIGDN(c);
- if (vh)
+ for (j = i + 1; j < xn; j++) {
+ w = (BDIGIT_DBL)xds[j];
+ c += (BDIGIT_DBL)zds[i + j] + vl * w;
+ zds[i + j] = BIGLO(c);
+ c = BIGDN(c);
+ if (vh)
c += w;
- }
- if (c) {
- c += (BDIGIT_DBL)zds[i + xn];
- zds[i + xn] = BIGLO(c);
- c = BIGDN(c);
+ }
+ if (c) {
+ c += (BDIGIT_DBL)zds[i + xn];
+ zds[i + xn] = BIGLO(c);
+ c = BIGDN(c);
if (c)
zds[i + xn + 1] += (BDIGIT)c;
- }
+ }
}
/* i == xn-1 */
@@ -1613,28 +1656,48 @@ rb_big_sq_fast(VALUE x)
return z;
}
+static inline size_t
+max_size(size_t a, size_t b)
+{
+ return (a > b ? a : b);
+}
+
/* balancing multiplication by slicing larger argument */
static void
-bary_mul_balance_with_mulfunc(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, BDIGIT *wds, size_t wn, mulfunc_t *mulfunc)
+bary_mul_balance_with_mulfunc(BDIGIT *const zds, const size_t zn,
+ const BDIGIT *const xds, const size_t xn,
+ const BDIGIT *const yds, const size_t yn,
+ BDIGIT *wds, size_t wn, mulfunc_t *const mulfunc)
{
VALUE work = 0;
- size_t yn0 = yn;
- size_t r, n;
+ size_t n;
- assert(xn + yn <= zn);
- assert(xn <= yn);
- assert(!KARATSUBA_BALANCED(xn, yn) || !TOOM3_BALANCED(xn, yn));
+ RUBY_ASSERT(xn + yn <= zn);
+ RUBY_ASSERT(xn <= yn);
+ RUBY_ASSERT(!KARATSUBA_BALANCED(xn, yn) || !TOOM3_BALANCED(xn, yn));
BDIGITS_ZERO(zds, xn);
+ if (wn < xn) {
+ /* The condition when a new buffer is needed:
+ * 1. (2(xn+r) > zn-(yn-r)) => (2xn+r > zn-yn), at the last
+ * iteration (or r == 0)
+ * 2. (2(xn+xn) > zn-(yn-r-xn)) => (3xn-r > zn-yn), at the
+ * previous iteration.
+ */
+ const size_t r = yn % xn;
+ if (2*xn + yn + max_size(xn-r, r) > zn) {
+ wn = xn;
+ wds = ALLOCV_N(BDIGIT, work, wn);
+ }
+ }
+
n = 0;
- while (yn > 0) {
- BDIGIT *tds;
- size_t tn;
- r = xn > yn ? yn : xn;
- tn = xn + r;
+ while (yn > n) {
+ const size_t r = (xn > (yn - n) ? (yn - n) : xn);
+ const size_t tn = (xn + r);
if (2 * (xn + r) <= zn - n) {
- tds = zds + n + xn + r;
+ BDIGIT *const tds = zds + n + xn + r;
mulfunc(tds, tn, xds, xn, yds + n, r, wds, wn);
BDIGITS_ZERO(zds + n + xn, r);
bary_add(zds + n, tn,
@@ -1642,21 +1705,25 @@ bary_mul_balance_with_mulfunc(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t
tds, tn);
}
else {
+ BDIGIT *const tds = zds + n;
if (wn < xn) {
+ /* xn is invariant, only once here */
+#if 0
wn = xn;
wds = ALLOCV_N(BDIGIT, work, wn);
+#else
+ rb_bug("wds is not enough: %" PRIdSIZE " for %" PRIdSIZE, wn, xn);
+#endif
}
- tds = zds + n;
MEMCPY(wds, zds + n, BDIGIT, xn);
mulfunc(tds, tn, xds, xn, yds + n, r, wds+xn, wn-xn);
bary_add(zds + n, tn,
zds + n, tn,
wds, xn);
}
- yn -= r;
- n += r;
+ n += r;
}
- BDIGITS_ZERO(zds+xn+yn0, zn - (xn+yn0));
+ BDIGITS_ZERO(zds+xn+yn, zn - (xn+yn));
if (work)
ALLOCV_END(work);
@@ -1689,9 +1756,9 @@ bary_mul_karatsuba(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const B
const BDIGIT *xds0, *xds1, *yds0, *yds1;
BDIGIT *zds0, *zds1, *zds2, *zds3;
- assert(xn + yn <= zn);
- assert(xn <= yn);
- assert(yn < 2 * xn);
+ RUBY_ASSERT(xn + yn <= zn);
+ RUBY_ASSERT(xn <= yn);
+ RUBY_ASSERT(yn < 2 * xn);
sq = xds == yds && xn == yn;
@@ -1706,7 +1773,7 @@ bary_mul_karatsuba(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const B
n = yn / 2;
- assert(n < xn);
+ RUBY_ASSERT(n < xn);
if (wn < n) {
/* This function itself needs only n BDIGITs for work area.
@@ -1827,7 +1894,7 @@ bary_mul_karatsuba(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const B
for (x = 0, i = xn-1; 0 <= i; i--) { x <<= SIZEOF_BDIGIT*CHAR_BIT; x |= xds[i]; }
for (y = 0, i = yn-1; 0 <= i; i--) { y <<= SIZEOF_BDIGIT*CHAR_BIT; y |= yds[i]; }
for (z = 0, i = zn-1; 0 <= i; i--) { z <<= SIZEOF_BDIGIT*CHAR_BIT; z |= zds[i]; }
- assert(z == x * y);
+ RUBY_ASSERT(z == x * y);
}
*/
@@ -1895,11 +1962,11 @@ bary_mul_toom3(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGI
int sq = xds == yds && xn == yn;
- assert(xn <= yn); /* assume y >= x */
- assert(xn + yn <= zn);
+ RUBY_ASSERT(xn <= yn); /* assume y >= x */
+ RUBY_ASSERT(xn + yn <= zn);
n = (yn + 2) / 3;
- assert(2*n < xn);
+ RUBY_ASSERT(2*n < xn);
wnc = 0;
@@ -1973,7 +2040,7 @@ bary_mul_toom3(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGI
}
/*
- * ref. http://en.wikipedia.org/wiki/Toom%E2%80%93Cook_multiplication
+ * ref. https://en.wikipedia.org/wiki/Toom%E2%80%93Cook_multiplication
*
* x(b) = x0 * b^0 + x1 * b^1 + x2 * b^2
* y(b) = y0 * b^0 + y1 * b^1 + y2 * b^2
@@ -2046,21 +2113,21 @@ bary_mul_toom3(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGI
v3n = u3n; v3ds = u3ds; v3p = u3p;
}
else {
- /* v1 <- y0 + y2 */
+ /* v1 <- y0 + y2 */
bary_add(v1ds, v1n, y0ds, y0n, y2ds, y2n);
v1p = 1;
- /* y(-1) : v2 <- v1 - y1 = y0 - y1 + y2 */
+ /* y(-1) : v2 <- v1 - y1 = y0 - y1 + y2 */
v2p = 1;
if (bary_sub(v2ds, v2n, v1ds, v1n, y1ds, y1n)) {
bary_2comp(v2ds, v2n);
v2p = 0;
}
- /* y(1) : v1 <- v1 + y1 = y0 + y1 + y2 */
+ /* y(1) : v1 <- v1 + y1 = y0 + y1 + y2 */
bary_add(v1ds, v1n, v1ds, v1n, y1ds, y1n);
- /* y(-2) : v3 <- 2 * (v2 + y2) - y0 = y0 - 2 * (y1 - 2 * y2) */
+ /* y(-2) : v3 <- 2 * (v2 + y2) - y0 = y0 - 2 * (y1 - 2 * y2) */
v3p = 1;
if (v2p) {
bary_add(v3ds, v3n, v2ds, v2n, y2ds, y2n);
@@ -2086,19 +2153,19 @@ bary_mul_toom3(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGI
/* z(1) : t1 <- u1 * v1 */
bary_mul_toom3_start(t1ds, t1n, u1ds, u1n, v1ds, v1n, wds, wn);
t1p = u1p == v1p;
- assert(t1ds[t1n-1] == 0);
+ RUBY_ASSERT(t1ds[t1n-1] == 0);
t1n--;
/* z(-1) : t2 <- u2 * v2 */
bary_mul_toom3_start(t2ds, t2n, u2ds, u2n, v2ds, v2n, wds, wn);
t2p = u2p == v2p;
- assert(t2ds[t2n-1] == 0);
+ RUBY_ASSERT(t2ds[t2n-1] == 0);
t2n--;
/* z(-2) : t3 <- u3 * v3 */
bary_mul_toom3_start(t3ds, t3n, u3ds, u3n, v3ds, v3n, wds, wn);
t3p = u3p == v3p;
- assert(t3ds[t3n-1] == 0);
+ RUBY_ASSERT(t3ds[t3n-1] == 0);
t3n--;
/* z(inf) : t4 <- x2 * y2 */
@@ -2253,28 +2320,41 @@ rb_big_mul_toom3(VALUE x, VALUE y)
return z;
}
-#ifdef USE_GMP
+#if USE_GMP
+static inline void
+bdigits_to_mpz(mpz_t mp, const BDIGIT *digits, size_t len)
+{
+ const size_t nails = (sizeof(BDIGIT)-SIZEOF_BDIGIT)*CHAR_BIT;
+ mpz_import(mp, len, -1, sizeof(BDIGIT), 0, nails, digits);
+}
+
+static inline void
+bdigits_from_mpz(mpz_t mp, BDIGIT *digits, size_t *len)
+{
+ const size_t nails = (sizeof(BDIGIT)-SIZEOF_BDIGIT)*CHAR_BIT;
+ mpz_export(digits, len, -1, sizeof(BDIGIT), 0, nails, mp);
+}
+
static void
bary_mul_gmp(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
{
- const size_t nails = (sizeof(BDIGIT)-SIZEOF_BDIGIT)*CHAR_BIT;
mpz_t x, y, z;
size_t count;
- assert(xn + yn <= zn);
+ RUBY_ASSERT(xn + yn <= zn);
mpz_init(x);
mpz_init(y);
mpz_init(z);
- mpz_import(x, xn, -1, sizeof(BDIGIT), 0, nails, xds);
+ bdigits_to_mpz(x, xds, xn);
if (xds == yds && xn == yn) {
mpz_mul(z, x, x);
}
else {
- mpz_import(y, yn, -1, sizeof(BDIGIT), 0, nails, yds);
+ bdigits_to_mpz(y, yds, yn);
mpz_mul(z, x, y);
}
- mpz_export(zds, &count, -1, sizeof(BDIGIT), 0, nails, z);
+ bdigits_from_mpz(z, zds, &count);
BDIGITS_ZERO(zds+count, zn-count);
mpz_clear(x);
mpz_clear(y);
@@ -2296,7 +2376,7 @@ rb_big_mul_gmp(VALUE x, VALUE y)
static void
bary_short_mul(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
{
- assert(xn + yn <= zn);
+ RUBY_ASSERT(xn + yn <= zn);
if (xn == 1 && yn == 1) {
bary_mul_single(zds, zn, xds[0], yds[0]);
@@ -2313,9 +2393,9 @@ bary_sparse_p(const BDIGIT *ds, size_t n)
{
long c = 0;
- if ( ds[rb_genrand_ulong_limited(n / 2) + n / 4]) c++;
- if (c <= 1 && ds[rb_genrand_ulong_limited(n / 2) + n / 4]) c++;
- if (c <= 1 && ds[rb_genrand_ulong_limited(n / 2) + n / 4]) c++;
+ if ( ds[2 * n / 5]) c++;
+ if (c <= 1 && ds[ n / 2]) c++;
+ if (c <= 1 && ds[3 * n / 5]) c++;
return (c <= 1) ? 1 : 0;
}
@@ -2332,7 +2412,7 @@ bary_mul_precheck(BDIGIT **zdsp, size_t *znp, const BDIGIT **xdsp, size_t *xnp,
const BDIGIT *yds = *ydsp;
size_t yn = *ynp;
- assert(xn + yn <= zn);
+ RUBY_ASSERT(xn + yn <= zn);
nlsz = 0;
@@ -2378,10 +2458,10 @@ bary_mul_precheck(BDIGIT **zdsp, size_t *znp, const BDIGIT **xdsp, size_t *xnp,
if (xn > yn) {
const BDIGIT *tds;
size_t tn;
- tds = xds; xds = yds; yds = tds;
- tn = xn; xn = yn; yn = tn;
+ tds = xds; xds = yds; yds = tds;
+ tn = xn; xn = yn; yn = tn;
}
- assert(xn <= yn);
+ RUBY_ASSERT(xn <= yn);
if (xn <= 1) {
if (xn == 0) {
@@ -2423,12 +2503,7 @@ bary_mul_karatsuba_branch(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn,
{
/* normal multiplication when x is small */
if (xn < KARATSUBA_MUL_DIGITS) {
- normal:
- if (xds == yds && xn == yn)
- bary_sq_fast(zds, zn, xds, xn);
- else
- bary_short_mul(zds, zn, xds, xn, yds, yn);
- return;
+ goto normal;
}
/* normal multiplication when x or y is a sparse bignum */
@@ -2446,6 +2521,15 @@ bary_mul_karatsuba_branch(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn,
/* multiplication by karatsuba method */
bary_mul_karatsuba(zds, zn, xds, xn, yds, yn, wds, wn);
+ return;
+
+ normal:
+ if (xds == yds && xn == yn) {
+ bary_sq_fast(zds, zn, xds, xn);
+ }
+ else {
+ bary_short_mul(zds, zn, xds, xn, yds, yn);
+ }
}
static void
@@ -2485,13 +2569,8 @@ bary_mul_toom3_start(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const
static void
bary_mul(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
{
-#ifdef USE_GMP
- const size_t naive_threshold = GMP_MUL_DIGITS;
-#else
- const size_t naive_threshold = KARATSUBA_MUL_DIGITS;
-#endif
if (xn <= yn) {
- if (xn < naive_threshold) {
+ if (xn < NAIVE_MUL_DIGITS) {
if (xds == yds && xn == yn)
bary_sq_fast(zds, zn, xds, xn);
else
@@ -2500,13 +2579,13 @@ bary_mul(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds
}
}
else {
- if (yn < naive_threshold) {
+ if (yn < NAIVE_MUL_DIGITS) {
bary_short_mul(zds, zn, yds, yn, xds, xn);
return;
}
}
-#ifdef USE_GMP
+#if USE_GMP
bary_mul_gmp(zds, zn, xds, xn, yds, yn);
#else
bary_mul_toom3_start(zds, zn, xds, xn, yds, yn, NULL, 0);
@@ -2530,30 +2609,31 @@ bigdivrem1(void *ptr)
BDIGIT q;
do {
- if (bds->stop) {
- bds->zn = zn;
- return 0;
+ if (bds->stop) {
+ bds->zn = zn;
+ return 0;
}
- if (zds[zn-1] == yds[yn-1]) q = BDIGMAX;
- else q = (BDIGIT)((BIGUP(zds[zn-1]) + zds[zn-2])/yds[yn-1]);
- if (q) {
+ if (zds[zn-1] == yds[yn-1]) q = BDIGMAX;
+ else q = (BDIGIT)((BIGUP(zds[zn-1]) + zds[zn-2])/yds[yn-1]);
+ if (q) {
num = bigdivrem_mulsub(zds+zn-(yn+1), yn+1,
q,
yds, yn);
- while (num) { /* "add back" required */
- q--;
+ while (num) { /* "add back" required */
+ q--;
num = bary_add(zds+zn-(yn+1), yn,
zds+zn-(yn+1), yn,
yds, yn);
num--;
- }
- }
+ }
+ }
zn--;
- zds[zn] = q;
+ zds[zn] = q;
} while (zn > yn);
return 0;
}
+/* async-signal-safe */
static void
rb_big_stop(void *ptr)
{
@@ -2564,8 +2644,8 @@ rb_big_stop(void *ptr)
static BDIGIT
bigdivrem_single1(BDIGIT *qds, const BDIGIT *xds, size_t xn, BDIGIT x_higher_bdigit, BDIGIT y)
{
- assert(0 < xn);
- assert(x_higher_bdigit < y);
+ RUBY_ASSERT(0 < xn);
+ RUBY_ASSERT(x_higher_bdigit < y);
if (POW2_P(y)) {
BDIGIT r;
r = xds[0] & (y-1);
@@ -2576,10 +2656,9 @@ bigdivrem_single1(BDIGIT *qds, const BDIGIT *xds, size_t xn, BDIGIT x_higher_bdi
size_t i;
BDIGIT_DBL t2;
t2 = x_higher_bdigit;
- i = xn;
- while (i--) {
- t2 = BIGUP(t2) + xds[i];
- qds[i] = (BDIGIT)(t2 / y);
+ for (i = 0; i < xn; i++) {
+ t2 = BIGUP(t2) + xds[xn - i - 1];
+ qds[xn - i - 1] = (BDIGIT)(t2 / y);
t2 %= y;
}
return (BDIGIT)t2;
@@ -2598,9 +2677,9 @@ bigdivrem_restoring(BDIGIT *zds, size_t zn, BDIGIT *yds, size_t yn)
struct big_div_struct bds;
size_t ynzero;
- assert(yn < zn);
- assert(BDIGIT_MSB(yds[yn-1]));
- assert(zds[zn-1] < yds[yn-1]);
+ RUBY_ASSERT(yn < zn);
+ RUBY_ASSERT(BDIGIT_MSB(yds[yn-1]));
+ RUBY_ASSERT(zds[zn-1] < yds[yn-1]);
for (ynzero = 0; !yds[ynzero]; ynzero++);
@@ -2618,16 +2697,16 @@ bigdivrem_restoring(BDIGIT *zds, size_t zn, BDIGIT *yds, size_t yn)
bds.zn = zn - ynzero;
if (bds.zn > 10000 || bds.yn > 10000) {
retry:
- bds.stop = Qfalse;
- rb_thread_call_without_gvl(bigdivrem1, &bds, rb_big_stop, &bds);
+ bds.stop = Qfalse;
+ rb_nogvl(bigdivrem1, &bds, rb_big_stop, &bds, RB_NOGVL_UBF_ASYNC_SAFE | RB_NOGVL_OFFLOAD_SAFE);
- if (bds.stop == Qtrue) {
- /* execute trap handler, but exception was not raised. */
- goto retry;
- }
+ if (bds.stop == Qtrue) {
+ /* execute trap handler, but exception was not raised. */
+ goto retry;
+ }
}
else {
- bigdivrem1(&bds);
+ bigdivrem1(&bds);
}
}
@@ -2639,9 +2718,9 @@ bary_divmod_normal(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT
size_t zn;
VALUE tmpyz = 0;
- assert(yn < xn || (xn == yn && yds[yn - 1] <= xds[xn - 1]));
- assert(qds ? (xn - yn + 1) <= qn : 1);
- assert(rds ? yn <= rn : 1);
+ RUBY_ASSERT(yn < xn || (xn == yn && yds[yn - 1] <= xds[xn - 1]));
+ RUBY_ASSERT(qds ? (xn - yn + 1) <= qn : 1);
+ RUBY_ASSERT(rds ? yn <= rn : 1);
zn = xn + BIGDIVREM_EXTRA_WORDS;
@@ -2726,26 +2805,25 @@ rb_big_divrem_normal(VALUE x, VALUE y)
return rb_assoc_new(q, r);
}
-#ifdef USE_GMP
+#if USE_GMP
static void
bary_divmod_gmp(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
{
- const size_t nails = (sizeof(BDIGIT)-SIZEOF_BDIGIT)*CHAR_BIT;
mpz_t x, y, q, r;
size_t count;
- assert(yn < xn || (xn == yn && yds[yn - 1] <= xds[xn - 1]));
- assert(qds ? (xn - yn + 1) <= qn : 1);
- assert(rds ? yn <= rn : 1);
- assert(qds || rds);
+ RUBY_ASSERT(yn < xn || (xn == yn && yds[yn - 1] <= xds[xn - 1]));
+ RUBY_ASSERT(qds ? (xn - yn + 1) <= qn : 1);
+ RUBY_ASSERT(rds ? yn <= rn : 1);
+ RUBY_ASSERT(qds || rds);
mpz_init(x);
mpz_init(y);
if (qds) mpz_init(q);
if (rds) mpz_init(r);
- mpz_import(x, xn, -1, sizeof(BDIGIT), 0, nails, xds);
- mpz_import(y, yn, -1, sizeof(BDIGIT), 0, nails, yds);
+ bdigits_to_mpz(x, xds, xn);
+ bdigits_to_mpz(y, yds, yn);
if (!rds) {
mpz_fdiv_q(q, x, y);
@@ -2761,13 +2839,13 @@ bary_divmod_gmp(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT *xd
mpz_clear(y);
if (qds) {
- mpz_export(qds, &count, -1, sizeof(BDIGIT), 0, nails, q);
+ bdigits_from_mpz(q, qds, &count);
BDIGITS_ZERO(qds+count, qn-count);
mpz_clear(q);
}
if (rds) {
- mpz_export(rds, &count, -1, sizeof(BDIGIT), 0, nails, r);
+ bdigits_from_mpz(r, rds, &count);
BDIGITS_ZERO(rds+count, rn-count);
mpz_clear(r);
}
@@ -2811,7 +2889,7 @@ rb_big_divrem_gmp(VALUE x, VALUE y)
static void
bary_divmod_branch(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
{
-#ifdef USE_GMP
+#if USE_GMP
if (GMP_DIV_DIGITS < xn) {
bary_divmod_gmp(qds, qn, rds, rn, xds, xn, yds, yn);
return;
@@ -2823,8 +2901,8 @@ bary_divmod_branch(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT
static void
bary_divmod(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
{
- assert(xn <= qn);
- assert(yn <= rn);
+ RUBY_ASSERT(xn <= qn);
+ RUBY_ASSERT(yn <= rn);
BARY_TRUNC(yds, yn);
if (yn == 0)
@@ -2866,29 +2944,8 @@ bary_divmod(BDIGIT *qds, size_t qn, BDIGIT *rds, size_t rn, const BDIGIT *xds, s
}
-#define BIGNUM_DEBUG 0
-#if BIGNUM_DEBUG
-#define ON_DEBUG(x) do { x; } while (0)
-static void
-dump_bignum(VALUE x)
-{
- long i;
- printf("%c0x0", BIGNUM_SIGN(x) ? '+' : '-');
- for (i = BIGNUM_LEN(x); i--; ) {
- printf("_%0*"PRIxBDIGIT, SIZEOF_BDIGIT*2, BDIGITS(x)[i]);
- }
- printf(", len=%"PRIuSIZE, BIGNUM_LEN(x));
- puts("");
-}
-
-static VALUE
-rb_big_dump(VALUE x)
-{
- dump_bignum(x);
- return x;
-}
-#else
-#define ON_DEBUG(x)
+#ifndef BIGNUM_DEBUG
+# define BIGNUM_DEBUG (0+RUBY_DEBUG)
#endif
static int
@@ -2907,7 +2964,7 @@ int
rb_cmpint(VALUE val, VALUE a, VALUE b)
{
if (NIL_P(val)) {
- rb_cmperr(a, b);
+ rb_cmperr(a, b);
}
if (FIXNUM_P(val)) {
long l = FIX2LONG(val);
@@ -2916,9 +2973,9 @@ rb_cmpint(VALUE val, VALUE a, VALUE b)
return 0;
}
if (RB_BIGNUM_TYPE_P(val)) {
- if (BIGZEROP(val)) return 0;
- if (BIGNUM_SIGN(val)) return 1;
- return -1;
+ if (BIGZEROP(val)) return 0;
+ if (BIGNUM_SIGN(val)) return 1;
+ return -1;
}
if (RTEST(rb_funcall(val, '>', 1, INT2FIX(0)))) return 1;
if (RTEST(rb_funcall(val, '<', 1, INT2FIX(0)))) return -1;
@@ -2926,44 +2983,75 @@ rb_cmpint(VALUE val, VALUE a, VALUE b)
}
#define BIGNUM_SET_LEN(b,l) \
- ((RBASIC(b)->flags & BIGNUM_EMBED_FLAG) ? \
+ (BIGNUM_EMBED_P(b) ? \
(void)(RBASIC(b)->flags = \
- (RBASIC(b)->flags & ~BIGNUM_EMBED_LEN_MASK) | \
- ((l) << BIGNUM_EMBED_LEN_SHIFT)) : \
+ (RBASIC(b)->flags & ~BIGNUM_EMBED_LEN_MASK) | \
+ ((l) << BIGNUM_EMBED_LEN_SHIFT)) : \
(void)(RBIGNUM(b)->as.heap.len = (l)))
+static size_t
+big_embed_capa(VALUE big)
+{
+ size_t size = rb_gc_obj_slot_size(big) - offsetof(struct RBignum, as.ary);
+ RUBY_ASSERT(size % sizeof(BDIGIT) == 0);
+ size_t capa = size / sizeof(BDIGIT);
+ RUBY_ASSERT(capa <= BIGNUM_EMBED_LEN_MAX);
+ return capa;
+}
+
+static size_t
+big_embed_size(size_t capa)
+{
+ size_t size = offsetof(struct RBignum, as.ary) + (sizeof(BDIGIT) * capa);
+ if (size < sizeof(struct RBignum)) {
+ size = sizeof(struct RBignum);
+ }
+ return size;
+}
+
+static bool
+big_embeddable_p(size_t capa)
+{
+ if (capa > BIGNUM_EMBED_LEN_MAX) {
+ return false;
+ }
+ return rb_gc_size_allocatable_p(big_embed_size(capa));
+}
+
static void
rb_big_realloc(VALUE big, size_t len)
{
BDIGIT *ds;
- if (RBASIC(big)->flags & BIGNUM_EMBED_FLAG) {
- if (BIGNUM_EMBED_LEN_MAX < len) {
- ds = ALLOC_N(BDIGIT, len);
- MEMCPY(ds, RBIGNUM(big)->as.ary, BDIGIT, BIGNUM_EMBED_LEN_MAX);
- RBIGNUM(big)->as.heap.len = BIGNUM_LEN(big);
- RBIGNUM(big)->as.heap.digits = ds;
- RBASIC(big)->flags &= ~BIGNUM_EMBED_FLAG;
- }
+ size_t embed_capa = big_embed_capa(big);
+
+ if (BIGNUM_EMBED_P(big)) {
+ if (embed_capa < len) {
+ ds = ALLOC_N(BDIGIT, len);
+ MEMCPY(ds, RBIGNUM(big)->as.ary, BDIGIT, embed_capa);
+ RBIGNUM(big)->as.heap.len = BIGNUM_LEN(big);
+ RBIGNUM(big)->as.heap.digits = ds;
+ FL_UNSET_RAW(big, BIGNUM_EMBED_FLAG);
+ }
}
else {
- if (len <= BIGNUM_EMBED_LEN_MAX) {
- ds = RBIGNUM(big)->as.heap.digits;
- RBASIC(big)->flags |= BIGNUM_EMBED_FLAG;
- BIGNUM_SET_LEN(big, len);
- (void)VALGRIND_MAKE_MEM_UNDEFINED((void*)RBIGNUM(big)->as.ary, sizeof(RBIGNUM(big)->as.ary));
- if (ds) {
- MEMCPY(RBIGNUM(big)->as.ary, ds, BDIGIT, len);
- xfree(ds);
- }
- }
- else {
- if (BIGNUM_LEN(big) == 0) {
- RBIGNUM(big)->as.heap.digits = ALLOC_N(BDIGIT, len);
- }
- else {
- REALLOC_N(RBIGNUM(big)->as.heap.digits, BDIGIT, len);
- }
- }
+ if (len <= embed_capa) {
+ ds = RBIGNUM(big)->as.heap.digits;
+ FL_SET_RAW(big, BIGNUM_EMBED_FLAG);
+ BIGNUM_SET_LEN(big, len);
+ (void)VALGRIND_MAKE_MEM_UNDEFINED((void*)RBIGNUM(big)->as.ary, embed_capa * sizeof(BDIGIT));
+ if (ds) {
+ MEMCPY(RBIGNUM(big)->as.ary, ds, BDIGIT, len);
+ xfree(ds);
+ }
+ }
+ else {
+ if (BIGNUM_LEN(big) == 0) {
+ RBIGNUM(big)->as.heap.digits = ALLOC_N(BDIGIT, len);
+ }
+ else if (BIGNUM_LEN(big) < len) {
+ REALLOC_N(RBIGNUM(big)->as.heap.digits, BDIGIT, len);
+ }
+ }
}
}
@@ -2977,25 +3065,37 @@ rb_big_resize(VALUE big, size_t len)
static VALUE
bignew_1(VALUE klass, size_t len, int sign)
{
- NEWOBJ_OF(big, struct RBignum, klass, T_BIGNUM | (RGENGC_WB_PROTECTED_BIGNUM ? FL_WB_PROTECTED : 0));
- BIGNUM_SET_SIGN(big, sign?1:0);
- if (len <= BIGNUM_EMBED_LEN_MAX) {
- RBASIC(big)->flags |= BIGNUM_EMBED_FLAG;
- BIGNUM_SET_LEN(big, len);
- (void)VALGRIND_MAKE_MEM_UNDEFINED((void*)RBIGNUM(big)->as.ary, sizeof(RBIGNUM(big)->as.ary));
+ VALUE bigv;
+
+ if (big_embeddable_p(len)) {
+ size_t size = big_embed_size(len);
+ RUBY_ASSERT(rb_gc_size_allocatable_p(size));
+ NEWOBJ_OF(big, struct RBignum, klass,
+ T_BIGNUM | BIGNUM_EMBED_FLAG | (RGENGC_WB_PROTECTED_BIGNUM ? FL_WB_PROTECTED : 0),
+ size, 0);
+ bigv = (VALUE)big;
+ BIGNUM_SET_SIGN(bigv, sign);
+ BIGNUM_SET_LEN(bigv, len);
+ (void)VALGRIND_MAKE_MEM_UNDEFINED((void*)big->as.ary, len * sizeof(BDIGIT));
}
else {
- RBIGNUM(big)->as.heap.digits = ALLOC_N(BDIGIT, len);
- RBIGNUM(big)->as.heap.len = len;
+ NEWOBJ_OF(big, struct RBignum, klass,
+ T_BIGNUM | (RGENGC_WB_PROTECTED_BIGNUM ? FL_WB_PROTECTED : 0), sizeof(struct RBignum), 0);
+ bigv = (VALUE)big;
+ BIGNUM_SET_SIGN(bigv, sign);
+ big->as.heap.digits = ALLOC_N(BDIGIT, len);
+ big->as.heap.len = len;
}
- OBJ_FREEZE(big);
- return (VALUE)big;
+ OBJ_FREEZE(bigv);
+ return bigv;
}
VALUE
rb_big_new(size_t len, int sign)
{
- return bignew(len, sign != 0);
+ VALUE obj = bignew(len, sign != 0);
+ memset(BIGNUM_DIGITS(obj), 0, len * sizeof(BDIGIT));
+ return obj;
}
VALUE
@@ -3048,7 +3148,7 @@ abs2twocomp(VALUE *xp, long *n_ret)
MEMCPY(BDIGITS(z), ds, BDIGIT, n);
bary_2comp(BDIGITS(z), n);
hibits = BDIGMAX;
- *xp = z;
+ *xp = z;
}
*n_ret = n;
return hibits;
@@ -3072,7 +3172,7 @@ bigtrunc(VALUE x)
if (len == 0) return x;
while (--len && !ds[len]);
if (BIGNUM_LEN(x) > len+1) {
- rb_big_resize(x, len+1);
+ rb_big_resize(x, len+1);
}
return x;
}
@@ -3125,7 +3225,7 @@ static VALUE
bignorm(VALUE x)
{
if (RB_BIGNUM_TYPE_P(x)) {
- x = bigfixize(x);
+ x = bigfixize(x);
}
return x;
}
@@ -3137,7 +3237,7 @@ rb_big_norm(VALUE x)
}
VALUE
-rb_uint2big(VALUE n)
+rb_uint2big(uintptr_t n)
{
long i;
VALUE big = bignew(bdigit_roomof(SIZEOF_VALUE), 1);
@@ -3147,8 +3247,8 @@ rb_uint2big(VALUE n)
digits[0] = n;
#else
for (i = 0; i < bdigit_roomof(SIZEOF_VALUE); i++) {
- digits[i] = BIGLO(n);
- n = BIGDN(n);
+ digits[i] = BIGLO(n);
+ n = BIGDN(n);
}
#endif
@@ -3159,7 +3259,7 @@ rb_uint2big(VALUE n)
}
VALUE
-rb_int2big(SIGNED_VALUE n)
+rb_int2big(intptr_t n)
{
long neg = 0;
VALUE u;
@@ -3167,27 +3267,27 @@ rb_int2big(SIGNED_VALUE n)
if (n < 0) {
u = 1 + (VALUE)(-(n + 1)); /* u = -n avoiding overflow */
- neg = 1;
+ neg = 1;
}
else {
u = n;
}
big = rb_uint2big(u);
if (neg) {
- BIGNUM_SET_SIGN(big, 0);
+ BIGNUM_SET_NEGATIVE_SIGN(big);
}
return big;
}
VALUE
-rb_uint2inum(VALUE n)
+rb_uint2inum(uintptr_t n)
{
if (POSFIXABLE(n)) return LONG2FIX(n);
return rb_uint2big(n);
}
VALUE
-rb_int2inum(SIGNED_VALUE n)
+rb_int2inum(intptr_t n)
{
if (FIXABLE(n)) return LONG2FIX(n);
return rb_int2big(n);
@@ -3333,7 +3433,7 @@ absint_numwords_generic(size_t numbytes, int nlz_bits_in_msbyte, size_t word_num
if (sign == 2) {
#if defined __GNUC__ && (__GNUC__ == 4 && __GNUC_MINOR__ == 4)
- *nlz_bits_ret = 0;
+ *nlz_bits_ret = 0;
#endif
return (size_t)-1;
}
@@ -3366,7 +3466,7 @@ rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret)
size_t numbytes;
int nlz_bits_in_msbyte;
size_t numwords;
- size_t nlz_bits;
+ size_t nlz_bits = 0;
if (word_numbits == 0)
return (size_t)-1;
@@ -3375,14 +3475,13 @@ rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret)
if (numbytes <= SIZE_MAX / CHAR_BIT) {
numwords = absint_numwords_small(numbytes, nlz_bits_in_msbyte, word_numbits, &nlz_bits);
-#ifdef DEBUG_INTEGER_PACK
- {
+ if (debug_integer_pack) {
size_t numwords0, nlz_bits0;
numwords0 = absint_numwords_generic(numbytes, nlz_bits_in_msbyte, word_numbits, &nlz_bits0);
- assert(numwords0 == numwords);
- assert(nlz_bits0 == nlz_bits);
+ RUBY_ASSERT(numwords0 == numwords);
+ RUBY_ASSERT(nlz_bits0 == nlz_bits);
+ (void)numwords0;
}
-#endif
}
else {
numwords = absint_numwords_generic(numbytes, nlz_bits_in_msbyte, word_numbits, &nlz_bits);
@@ -3568,7 +3667,7 @@ rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t
}
/*
- * Import an integer into a buffer.
+ * Import an integer from a buffer.
*
* [words] buffer to import.
* [numwords] the size of given buffer as number of words.
@@ -3652,7 +3751,7 @@ rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t na
}
else if (num_bdigits == numberof(fixbuf)) {
val = bignew((long)num_bdigits+1, 0);
- MEMCPY(BDIGITS(val), fixbuf, BDIGIT, num_bdigits);
+ MEMCPY(BDIGITS(val), fixbuf, BDIGIT, num_bdigits);
BDIGITS(val)[num_bdigits++] = 1;
}
else {
@@ -3664,11 +3763,11 @@ rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t na
BDIGIT_DBL u = fixbuf[0] + BIGUP(fixbuf[1]);
if (u == 0)
return LONG2FIX(0);
- if (0 < sign && POSFIXABLE(u))
- return LONG2FIX(u);
- if (sign < 0 && BDIGIT_MSB(fixbuf[1]) == 0 &&
+ if (0 < sign && POSFIXABLE(u))
+ return LONG2FIX((long)u);
+ if (sign < 0 && BDIGIT_MSB(fixbuf[1]) == 0 &&
NEGFIXABLE(-(BDIGIT_DBL_SIGNED)u))
- return LONG2FIX(-(BDIGIT_DBL_SIGNED)u);
+ return LONG2FIX((long)-(BDIGIT_DBL_SIGNED)u);
val = bignew((long)num_bdigits, 0 <= sign);
MEMCPY(BDIGITS(val), fixbuf, BDIGIT, num_bdigits);
}
@@ -3685,46 +3784,78 @@ rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t na
#define conv_digit(c) (ruby_digit36_to_number_table[(unsigned char)(c)])
-static void
-str2big_scan_digits(const char *s, const char *str, int base, int badcheck, size_t *num_digits_p, size_t *len_p)
+NORETURN(static inline void invalid_radix(int base));
+NORETURN(static inline void invalid_integer(VALUE s));
+
+static inline int
+valid_radix_p(int base)
+{
+ return (1 < base && base <= 36);
+}
+
+static inline void
+invalid_radix(int base)
+{
+ rb_raise(rb_eArgError, "invalid radix %d", base);
+}
+
+static inline void
+invalid_integer(VALUE s)
+{
+ rb_raise(rb_eArgError, "invalid value for Integer(): %+"PRIsVALUE, s);
+}
+
+static int
+str2big_scan_digits(const char *s, const char *str, int base, int badcheck, size_t *num_digits_p, ssize_t *len_p)
{
char nondigit = 0;
size_t num_digits = 0;
const char *digits_start = str;
const char *digits_end = str;
+ ssize_t len = *len_p;
int c;
- if (badcheck && *str == '_') goto bad;
+ if (!len) {
+ *num_digits_p = 0;
+ *len_p = 0;
+ return TRUE;
+ }
+
+ if (badcheck && *str == '_') return FALSE;
while ((c = *str++) != 0) {
- if (c == '_') {
- if (nondigit) {
- if (badcheck) goto bad;
- break;
- }
- nondigit = (char) c;
- continue;
- }
- else if ((c = conv_digit(c)) < 0) {
- break;
- }
- if (c >= base) break;
- nondigit = 0;
- num_digits++;
- digits_end = str;
- }
- if (badcheck) {
- str--;
- if (s+1 < str && str[-1] == '_') goto bad;
- while (*str && ISSPACE(*str)) str++;
- if (*str) {
- bad:
- rb_invalid_str(s, "Integer()");
- }
+ if (c == '_') {
+ if (nondigit) {
+ if (badcheck) return FALSE;
+ break;
+ }
+ nondigit = (char) c;
+ }
+ else if ((c = conv_digit(c)) < 0 || c >= base) {
+ break;
+ }
+ else {
+ nondigit = 0;
+ num_digits++;
+ digits_end = str;
+ }
+ if (len > 0 && !--len) break;
+ }
+ if (badcheck && nondigit) return FALSE;
+ if (badcheck && len) {
+ str--;
+ while (*str && ISSPACE(*str)) {
+ str++;
+ if (len > 0 && !--len) break;
+ }
+ if (len && *str) {
+ return FALSE;
+ }
}
*num_digits_p = num_digits;
*len_p = digits_end - digits_start;
+ return TRUE;
}
static VALUE
@@ -3763,7 +3894,7 @@ str2big_poweroftwo(
if (numbits) {
*dp++ = BIGLO(dd);
}
- assert((size_t)(dp - BDIGITS(z)) == num_bdigits);
+ RUBY_ASSERT((size_t)(dp - BDIGITS(z)) == num_bdigits);
return z;
}
@@ -3806,7 +3937,7 @@ str2big_normal(
}
break;
}
- assert(blen <= num_bdigits);
+ RUBY_ASSERT(blen <= num_bdigits);
}
return z;
@@ -3864,7 +3995,7 @@ str2big_karatsuba(
current_base = 1;
}
}
- assert(i == num_bdigits);
+ RUBY_ASSERT(i == num_bdigits);
for (unit = 2; unit < num_bdigits; unit *= 2) {
for (i = 0; i < num_bdigits; i += unit*2) {
if (2*unit <= num_bdigits - i) {
@@ -3895,7 +4026,7 @@ str2big_karatsuba(
return z;
}
-#ifdef USE_GMP
+#if USE_GMP
static VALUE
str2big_gmp(
int sign,
@@ -3905,7 +4036,6 @@ str2big_gmp(
size_t num_bdigits,
int base)
{
- const size_t nails = (sizeof(BDIGIT)-SIZEOF_BDIGIT)*CHAR_BIT;
char *buf, *p;
const char *q;
VALUE tmps;
@@ -3928,7 +4058,7 @@ str2big_gmp(
zn = num_bdigits;
z = bignew(zn, sign);
zds = BDIGITS(z);
- mpz_export(BDIGITS(z), &count, -1, sizeof(BDIGIT), 0, nails, mz);
+ bdigits_from_mpz(mz, BDIGITS(z), &count);
BDIGITS_ZERO(zds+count, zn-count);
mpz_clear(mz);
@@ -3939,6 +4069,8 @@ str2big_gmp(
}
#endif
+static VALUE rb_cstr_parse_inum(const char *str, ssize_t len, char **endp, int base);
+
/*
* Parse +str+ as Ruby Integer, i.e., underscores, 0d and 0b prefixes.
*
@@ -3958,152 +4090,207 @@ str2big_gmp(
VALUE
rb_cstr_to_inum(const char *str, int base, int badcheck)
{
- const char *s = str;
+ char *end;
+ VALUE ret = rb_cstr_parse_inum(str, -1, (badcheck ? NULL : &end), base);
+ if (NIL_P(ret)) {
+ if (badcheck) rb_invalid_str(str, "Integer()");
+ ret = INT2FIX(0);
+ }
+ return ret;
+}
+
+/*
+ * Parse +str+ as Ruby Integer, i.e., underscores, 0d and 0b prefixes.
+ *
+ * str: pointer to the string to be parsed.
+ * should be NUL-terminated if +len+ is negative.
+ * len: length of +str+ if >= 0. if +len+ is negative, +str+ should
+ * be NUL-terminated.
+ * endp: if non-NULL, the address after parsed part is stored. if
+ * NULL, Qnil is returned when +str+ is not valid as an Integer.
+ * ndigits: if non-NULL, the number of parsed digits is stored.
+ * base: see +rb_cstr_to_inum+
+ * flags: bitwise OR of below flags:
+ * RB_INT_PARSE_SIGN: allow preceding spaces and +/- sign
+ * RB_INT_PARSE_UNDERSCORE: allow an underscore between digits
+ * RB_INT_PARSE_PREFIX: allow preceding prefix
+ */
+
+VALUE
+rb_int_parse_cstr(const char *str, ssize_t len, char **endp, size_t *ndigits,
+ int base, int flags)
+{
+ const char *const s = str;
char sign = 1;
int c;
- VALUE z;
+ VALUE z = Qnil;
- int bits_per_digit;
+ unsigned long val;
+ int ov;
const char *digits_start, *digits_end;
- size_t num_digits;
+ size_t num_digits = 0;
size_t num_bdigits;
- size_t len;
+ const ssize_t len0 = len;
+ const int badcheck = !endp;
+
+#define ADV(n) do {\
+ if (len > 0 && len <= (n)) goto bad; \
+ str += (n); \
+ len -= (n); \
+ } while (0)
+#define ASSERT_LEN() do {\
+ RUBY_ASSERT(len != 0); \
+ if (len0 >= 0) RUBY_ASSERT(s + len0 == str + len); \
+ } while (0)
if (!str) {
- if (badcheck) {
- bad:
- rb_invalid_str(s, "Integer()");
- }
- return INT2FIX(0);
+ goto bad;
}
- while (ISSPACE(*str)) str++;
+ if (len && (flags & RB_INT_PARSE_SIGN)) {
+ while (ISSPACE(*str)) ADV(1);
- if (str[0] == '+') {
- str++;
- }
- else if (str[0] == '-') {
- str++;
- sign = 0;
- }
- if (str[0] == '+' || str[0] == '-') {
- if (badcheck) goto bad;
- return INT2FIX(0);
+ if (str[0] == '+') {
+ ADV(1);
+ }
+ else if (str[0] == '-') {
+ ADV(1);
+ sign = 0;
+ }
+ ASSERT_LEN();
}
if (base <= 0) {
- if (str[0] == '0') {
- switch (str[1]) {
- case 'x': case 'X':
- base = 16;
- str += 2;
- break;
- case 'b': case 'B':
- base = 2;
- str += 2;
- break;
- case 'o': case 'O':
- base = 8;
- str += 2;
- break;
- case 'd': case 'D':
- base = 10;
- str += 2;
- break;
- default:
- base = 8;
- }
- }
- else if (base < -1) {
- base = -base;
- }
- else {
- base = 10;
- }
+ if (str[0] == '0' && len > 1) {
+ switch (str[1]) {
+ case 'x': case 'X':
+ base = 16;
+ ADV(2);
+ break;
+ case 'b': case 'B':
+ base = 2;
+ ADV(2);
+ break;
+ case 'o': case 'O':
+ base = 8;
+ ADV(2);
+ break;
+ case 'd': case 'D':
+ base = 10;
+ ADV(2);
+ break;
+ default:
+ base = 8;
+ }
+ }
+ else if (base < -1) {
+ base = -base;
+ }
+ else {
+ base = 10;
+ }
+ }
+ else if (len == 1 || !(flags & RB_INT_PARSE_PREFIX)) {
+ /* no prefix */
}
else if (base == 2) {
- if (str[0] == '0' && (str[1] == 'b'||str[1] == 'B')) {
- str += 2;
- }
+ if (str[0] == '0' && (str[1] == 'b'||str[1] == 'B')) {
+ ADV(2);
+ }
}
else if (base == 8) {
- if (str[0] == '0' && (str[1] == 'o'||str[1] == 'O')) {
- str += 2;
- }
+ if (str[0] == '0' && (str[1] == 'o'||str[1] == 'O')) {
+ ADV(2);
+ }
}
else if (base == 10) {
- if (str[0] == '0' && (str[1] == 'd'||str[1] == 'D')) {
- str += 2;
- }
+ if (str[0] == '0' && (str[1] == 'd'||str[1] == 'D')) {
+ ADV(2);
+ }
}
else if (base == 16) {
- if (str[0] == '0' && (str[1] == 'x'||str[1] == 'X')) {
- str += 2;
- }
- }
- if (base < 2 || 36 < base) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
- }
- if (*str == '0') { /* squeeze preceding 0s */
- int us = 0;
- while ((c = *++str) == '0' || c == '_') {
- if (c == '_') {
- if (++us >= 2)
- break;
- }
- else {
- us = 0;
- }
- }
- if (!(c = *str) || ISSPACE(c)) --str;
+ if (str[0] == '0' && (str[1] == 'x'||str[1] == 'X')) {
+ ADV(2);
+ }
+ }
+ if (!valid_radix_p(base)) {
+ invalid_radix(base);
+ }
+ if (!len) goto bad;
+ num_digits = str - s;
+ if (*str == '0' && len != 1) { /* squeeze preceding 0s */
+ int us = 0;
+ const char *end = len < 0 ? NULL : str + len;
+ ++num_digits;
+ while ((c = *++str) == '0' ||
+ ((flags & RB_INT_PARSE_UNDERSCORE) && c == '_')) {
+ if (c == '_') {
+ if (++us >= 2)
+ break;
+ }
+ else {
+ ++num_digits;
+ us = 0;
+ }
+ if (str == end) break;
+ }
+ if (!c || ISSPACE(c)) --str;
+ if (end) len = end - str;
}
c = *str;
c = conv_digit(c);
if (c < 0 || c >= base) {
- if (badcheck) goto bad;
- return INT2FIX(0);
- }
-
- bits_per_digit = bit_length(base-1);
- if (bits_per_digit * strlen(str) <= sizeof(long) * CHAR_BIT) {
- char *end;
- unsigned long val = STRTOUL(str, &end, base);
-
- if (str < end && *end == '_') goto bigparse;
- if (badcheck) {
- if (end == str) goto bad; /* no number */
- while (*end && ISSPACE(*end)) end++;
- if (*end) goto bad; /* trailing garbage */
- }
-
- if (POSFIXABLE(val)) {
- if (sign) return LONG2FIX(val);
- else {
- long result = -(long)val;
- return LONG2FIX(result);
- }
- }
- else {
- VALUE big = rb_uint2big(val);
- BIGNUM_SET_SIGN(big, sign);
- return bignorm(big);
- }
+ if (!badcheck && num_digits) z = INT2FIX(0);
+ goto bad;
+ }
+
+ if (ndigits) *ndigits = num_digits;
+ val = ruby_scan_digits(str, len, base, &num_digits, &ov);
+ if (!ov) {
+ const char *end = &str[num_digits];
+ if (num_digits > 0 && *end == '_' && (flags & RB_INT_PARSE_UNDERSCORE))
+ goto bigparse;
+ if (endp) *endp = (char *)end;
+ if (ndigits) *ndigits += num_digits;
+ if (badcheck) {
+ if (num_digits == 0) return Qnil; /* no number */
+ while (len < 0 ? *end : end < str + len) {
+ if (!ISSPACE(*end)) return Qnil; /* trailing garbage */
+ end++;
+ }
+ }
+
+ if (POSFIXABLE(val)) {
+ if (sign) return LONG2FIX(val);
+ else {
+ long result = -(long)val;
+ return LONG2FIX(result);
+ }
+ }
+ else {
+ VALUE big = rb_uint2big(val);
+ BIGNUM_SET_SIGN(big, sign);
+ return bignorm(big);
+ }
}
bigparse:
digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
+ if (!str2big_scan_digits(s, str, base, badcheck, &num_digits, &len))
+ goto bad;
+ if (endp) *endp = (char *)(str + len);
+ if (ndigits) *ndigits += num_digits;
digits_end = digits_start + len;
if (POW2_P(base)) {
z = str2big_poweroftwo(sign, digits_start, digits_end, num_digits,
- bits_per_digit);
+ bit_length(base-1));
}
else {
int digits_per_bdigits_dbl;
maxpow_in_bdigit_dbl(base, &digits_per_bdigits_dbl);
num_bdigits = roomof(num_digits, digits_per_bdigits_dbl)*2;
-#ifdef USE_GMP
+#if USE_GMP
if (GMP_STR2BIG_DIGITS < num_bdigits) {
z = str2big_gmp(sign, digits_start, digits_end, num_digits,
num_bdigits, base);
@@ -4121,63 +4308,74 @@ rb_cstr_to_inum(const char *str, int base, int badcheck)
}
return bignorm(z);
+
+ bad:
+ if (endp) *endp = (char *)str;
+ if (ndigits) *ndigits = num_digits;
+ return z;
+}
+
+static VALUE
+rb_cstr_parse_inum(const char *str, ssize_t len, char **endp, int base)
+{
+ return rb_int_parse_cstr(str, len, endp, NULL, base,
+ RB_INT_PARSE_DEFAULT);
}
VALUE
-rb_str_to_inum(VALUE str, int base, int badcheck)
+rb_str_convert_to_inum(VALUE str, int base, int badcheck, int raise_exception)
{
- char *s;
- long len;
- VALUE v = 0;
VALUE ret;
+ const char *s;
+ long len;
+ char *end;
StringValue(str);
rb_must_asciicompat(str);
- if (badcheck) {
- s = StringValueCStr(str);
- }
- else {
- s = RSTRING_PTR(str);
- }
- if (s) {
- len = RSTRING_LEN(str);
- if (s[len]) { /* no sentinel somehow */
- char *p = ALLOCV(v, len+1);
-
- MEMCPY(p, s, char, len);
- p[len] = '\0';
- s = p;
- }
+ RSTRING_GETMEM(str, s, len);
+ ret = rb_cstr_parse_inum(s, len, (badcheck ? NULL : &end), base);
+ if (NIL_P(ret)) {
+ if (badcheck) {
+ if (!raise_exception) return Qnil;
+ invalid_integer(str);
+ }
+ ret = INT2FIX(0);
}
- ret = rb_cstr_to_inum(s, base, badcheck);
- if (v)
- ALLOCV_END(v);
return ret;
}
VALUE
+rb_str_to_inum(VALUE str, int base, int badcheck)
+{
+ return rb_str_convert_to_inum(str, base, badcheck, TRUE);
+}
+
+VALUE
rb_str2big_poweroftwo(VALUE arg, int base, int badcheck)
{
int positive_p = 1;
const char *s, *str;
const char *digits_start, *digits_end;
size_t num_digits;
- size_t len;
+ ssize_t len;
VALUE z;
- if (base < 2 || 36 < base || !POW2_P(base)) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
+ if (!valid_radix_p(base) || !POW2_P(base)) {
+ invalid_radix(base);
}
rb_must_asciicompat(arg);
s = str = StringValueCStr(arg);
+ len = RSTRING_LEN(arg);
if (*str == '-') {
+ len--;
str++;
positive_p = 0;
}
digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
+ if (!str2big_scan_digits(s, str, base, badcheck, &num_digits, &len))
+ invalid_integer(arg);
digits_end = digits_start + len;
z = str2big_poweroftwo(positive_p, digits_start, digits_end, num_digits,
@@ -4195,25 +4393,28 @@ rb_str2big_normal(VALUE arg, int base, int badcheck)
const char *s, *str;
const char *digits_start, *digits_end;
size_t num_digits;
- size_t len;
+ ssize_t len;
VALUE z;
int digits_per_bdigits_dbl;
size_t num_bdigits;
- if (base < 2 || 36 < base) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
+ if (!valid_radix_p(base)) {
+ invalid_radix(base);
}
rb_must_asciicompat(arg);
- s = str = StringValueCStr(arg);
- if (*str == '-') {
+ s = str = StringValuePtr(arg);
+ len = RSTRING_LEN(arg);
+ if (len > 0 && *str == '-') {
+ len--;
str++;
positive_p = 0;
}
digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
+ if (!str2big_scan_digits(s, str, base, badcheck, &num_digits, &len))
+ invalid_integer(arg);
digits_end = digits_start + len;
maxpow_in_bdigit_dbl(base, &digits_per_bdigits_dbl);
@@ -4234,25 +4435,28 @@ rb_str2big_karatsuba(VALUE arg, int base, int badcheck)
const char *s, *str;
const char *digits_start, *digits_end;
size_t num_digits;
- size_t len;
+ ssize_t len;
VALUE z;
int digits_per_bdigits_dbl;
size_t num_bdigits;
- if (base < 2 || 36 < base) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
+ if (!valid_radix_p(base)) {
+ invalid_radix(base);
}
rb_must_asciicompat(arg);
- s = str = StringValueCStr(arg);
- if (*str == '-') {
+ s = str = StringValuePtr(arg);
+ len = RSTRING_LEN(arg);
+ if (len > 0 && *str == '-') {
+ len--;
str++;
positive_p = 0;
}
digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
+ if (!str2big_scan_digits(s, str, base, badcheck, &num_digits, &len))
+ invalid_integer(arg);
digits_end = digits_start + len;
maxpow_in_bdigit_dbl(base, &digits_per_bdigits_dbl);
@@ -4266,7 +4470,7 @@ rb_str2big_karatsuba(VALUE arg, int base, int badcheck)
return bignorm(z);
}
-#ifdef USE_GMP
+#if USE_GMP
VALUE
rb_str2big_gmp(VALUE arg, int base, int badcheck)
{
@@ -4274,25 +4478,28 @@ rb_str2big_gmp(VALUE arg, int base, int badcheck)
const char *s, *str;
const char *digits_start, *digits_end;
size_t num_digits;
- size_t len;
+ ssize_t len;
VALUE z;
int digits_per_bdigits_dbl;
size_t num_bdigits;
- if (base < 2 || 36 < base) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
+ if (!valid_radix_p(base)) {
+ invalid_radix(base);
}
rb_must_asciicompat(arg);
- s = str = StringValueCStr(arg);
- if (*str == '-') {
+ s = str = StringValuePtr(arg);
+ len = RSTRING_LEN(arg);
+ if (len > 0 && *str == '-') {
+ len--;
str++;
positive_p = 0;
}
digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
+ if (!str2big_scan_digits(s, str, base, badcheck, &num_digits, &len))
+ invalid_integer(arg);
digits_end = digits_start + len;
maxpow_in_bdigit_dbl(base, &digits_per_bdigits_dbl);
@@ -4308,7 +4515,7 @@ rb_str2big_gmp(VALUE arg, int base, int badcheck)
#if HAVE_LONG_LONG
-static VALUE
+VALUE
rb_ull2big(unsigned LONG_LONG n)
{
long i;
@@ -4319,8 +4526,8 @@ rb_ull2big(unsigned LONG_LONG n)
digits[0] = n;
#else
for (i = 0; i < bdigit_roomof(SIZEOF_LONG_LONG); i++) {
- digits[i] = BIGLO(n);
- n = BIGDN(n);
+ digits[i] = BIGLO(n);
+ n = BIGDN(n);
}
#endif
@@ -4330,7 +4537,7 @@ rb_ull2big(unsigned LONG_LONG n)
return big;
}
-static VALUE
+VALUE
rb_ll2big(LONG_LONG n)
{
long neg = 0;
@@ -4339,14 +4546,14 @@ rb_ll2big(LONG_LONG n)
if (n < 0) {
u = 1 + (unsigned LONG_LONG)(-(n + 1)); /* u = -n avoiding overflow */
- neg = 1;
+ neg = 1;
}
else {
u = n;
}
big = rb_ull2big(u);
if (neg) {
- BIGNUM_SET_SIGN(big, 0);
+ BIGNUM_SET_NEGATIVE_SIGN(big);
}
return big;
}
@@ -4354,19 +4561,59 @@ rb_ll2big(LONG_LONG n)
VALUE
rb_ull2inum(unsigned LONG_LONG n)
{
- if (POSFIXABLE(n)) return LONG2FIX(n);
+ if (POSFIXABLE(n)) return LONG2FIX((long)n);
return rb_ull2big(n);
}
VALUE
rb_ll2inum(LONG_LONG n)
{
- if (FIXABLE(n)) return LONG2FIX(n);
+ if (FIXABLE(n)) return LONG2FIX((long)n);
return rb_ll2big(n);
}
#endif /* HAVE_LONG_LONG */
+#ifdef HAVE_INT128_T
+VALUE
+rb_uint128t2big(uint128_t n)
+{
+ long i;
+ VALUE big = bignew(bdigit_roomof(SIZEOF_INT128_T), 1);
+ BDIGIT *digits = BDIGITS(big);
+
+ for (i = 0; i < bdigit_roomof(SIZEOF_INT128_T); i++) {
+ digits[i] = BIGLO(RSHIFT(n ,BITSPERDIG*i));
+ }
+
+ i = bdigit_roomof(SIZEOF_INT128_T);
+ while (i-- && !digits[i]) ;
+ BIGNUM_SET_LEN(big, i+1);
+ return big;
+}
+
+VALUE
+rb_int128t2big(int128_t n)
+{
+ int neg = 0;
+ uint128_t u;
+ VALUE big;
+
+ if (n < 0) {
+ u = 1 + (uint128_t)(-(n + 1)); /* u = -n avoiding overflow */
+ neg = 1;
+ }
+ else {
+ u = n;
+ }
+ big = rb_uint128t2big(u);
+ if (neg) {
+ BIGNUM_SET_NEGATIVE_SIGN(big);
+ }
+ return big;
+}
+#endif
+
VALUE
rb_cstr2inum(const char *str, int base)
{
@@ -4390,11 +4637,14 @@ big_shift3(VALUE x, int lshift_p, size_t shift_numdigits, int shift_numbits)
if (lshift_p) {
if (LONG_MAX < shift_numdigits) {
- rb_raise(rb_eArgError, "too big number");
+ too_big:
+ rb_raise(rb_eRangeError, "shift width too big");
}
s1 = shift_numdigits;
s2 = shift_numbits;
+ if ((size_t)s1 != shift_numdigits) goto too_big;
xn = BIGNUM_LEN(x);
+ if (LONG_MAX/SIZEOF_BDIGIT <= xn+s1) goto too_big;
z = bignew(xn+s1+1, BIGNUM_SIGN(x));
zds = BDIGITS(z);
BDIGITS_ZERO(zds, s1);
@@ -4436,8 +4686,8 @@ big_shift2(VALUE x, int lshift_p, VALUE y)
size_t shift_numdigits;
int shift_numbits;
- assert(POW2_P(CHAR_BIT));
- assert(POW2_P(BITSPERDIG));
+ RUBY_ASSERT(POW2_P(CHAR_BIT));
+ RUBY_ASSERT(POW2_P(BITSPERDIG));
if (BIGZEROP(x))
return INT2FIX(0);
@@ -4485,12 +4735,6 @@ static size_t base36_numdigits_cache[35][MAX_BASE36_POWER_TABLE_ENTRIES];
static void
power_cache_init(void)
{
- int i, j;
- for (i = 0; i < 35; ++i) {
- for (j = 0; j < MAX_BASE36_POWER_TABLE_ENTRIES; ++j) {
- base36_power_cache[i][j] = Qnil;
- }
- }
}
static inline VALUE
@@ -4513,8 +4757,8 @@ power_cache_get_power(int base, int power_level, size_t *numdigits_ret)
if (MAX_BASE36_POWER_TABLE_ENTRIES <= power_level)
rb_bug("too big power number requested: maxpow_in_bdigit_dbl(%d)**(2**%d)", base, power_level);
- if (NIL_P(base36_power_cache[base - 2][power_level])) {
- VALUE power;
+ VALUE power = base36_power_cache[base - 2][power_level];
+ if (!power) {
size_t numdigits;
if (power_level == 0) {
int numdigits0;
@@ -4530,11 +4774,11 @@ power_cache_get_power(int base, int power_level, size_t *numdigits_ret)
rb_obj_hide(power);
base36_power_cache[base - 2][power_level] = power;
base36_numdigits_cache[base - 2][power_level] = numdigits;
- rb_gc_register_mark_object(power);
+ rb_vm_register_global_object(power);
}
if (numdigits_ret)
*numdigits_ret = base36_numdigits_cache[base - 2][power_level];
- return base36_power_cache[base - 2][power_level];
+ return power;
}
struct big2str_struct {
@@ -4566,7 +4810,7 @@ big2str_2bdigits(struct big2str_struct *b2s, BDIGIT *xds, size_t xn, size_t tail
int beginning = !b2s->ptr;
size_t len = 0;
- assert(xn <= 2);
+ RUBY_ASSERT(xn <= 2);
num = bary2bdigitdbl(xds, xn);
if (beginning) {
@@ -4575,19 +4819,21 @@ big2str_2bdigits(struct big2str_struct *b2s, BDIGIT *xds, size_t xn, size_t tail
p = buf;
j = sizeof(buf);
do {
- p[--j] = ruby_digitmap[num % b2s->base];
+ BDIGIT_DBL idx = num % b2s->base;
num /= b2s->base;
+ p[--j] = ruby_digitmap[idx];
} while (num);
len = sizeof(buf) - j;
big2str_alloc(b2s, len + taillen);
- MEMCPY(b2s->ptr, buf + j, char, len);
+ MEMCPY(b2s->ptr, buf + j, char, len);
}
else {
p = b2s->ptr;
j = b2s->hbase2_numdigits;
do {
- p[--j] = ruby_digitmap[num % b2s->base];
+ BDIGIT_DBL idx = num % b2s->base;
num /= b2s->base;
+ p[--j] = ruby_digitmap[idx];
} while (j);
len = b2s->hbase2_numdigits;
}
@@ -4596,7 +4842,7 @@ big2str_2bdigits(struct big2str_struct *b2s, BDIGIT *xds, size_t xn, size_t tail
static void
big2str_karatsuba(struct big2str_struct *b2s, BDIGIT *xds, size_t xn, size_t wn,
- int power_level, size_t taillen)
+ int power_level, size_t taillen)
{
VALUE b;
size_t half_numdigits, lower_numdigits;
@@ -4626,17 +4872,17 @@ big2str_karatsuba(struct big2str_struct *b2s, BDIGIT *xds, size_t xn, size_t wn,
*/
if (xn == 0 || bary_zero_p(xds, xn)) {
- if (b2s->ptr) {
+ if (b2s->ptr) {
/* When x is zero, power_cache_get_power(base, power_level) should be cached already. */
power_cache_get_power(b2s->base, power_level, &len);
- memset(b2s->ptr, '0', len);
+ memset(b2s->ptr, '0', len);
b2s->ptr += len;
- }
+ }
return;
}
if (power_level == 0) {
- big2str_2bdigits(b2s, xds, xn, taillen);
+ big2str_2bdigits(b2s, xds, xn, taillen);
return;
}
@@ -4664,7 +4910,7 @@ big2str_karatsuba(struct big2str_struct *b2s, BDIGIT *xds, size_t xn, size_t wn,
memset(b2s->ptr, '0', len);
b2s->ptr += len;
}
- big2str_2bdigits(b2s, xds, xn, taillen);
+ big2str_2bdigits(b2s, xds, xn, taillen);
}
else {
BDIGIT *qds, *rds;
@@ -4692,7 +4938,7 @@ big2str_karatsuba(struct big2str_struct *b2s, BDIGIT *xds, size_t xn, size_t wn,
/* bigdivrem_restoring will modify y.
* So use temporary buffer. */
tds = xds + qn;
- assert(qn + bn <= xn + wn);
+ RUBY_ASSERT(qn + bn <= xn + wn);
bary_small_lshift(tds, bds, bn, shift);
xds[xn] = bary_small_lshift(xds, xds, xn, shift);
}
@@ -4710,7 +4956,7 @@ big2str_karatsuba(struct big2str_struct *b2s, BDIGIT *xds, size_t xn, size_t wn,
}
BARY_TRUNC(qds, qn);
- assert(qn <= bn);
+ RUBY_ASSERT(qn <= bn);
big2str_karatsuba(b2s, qds, qn, xn+wn - (rn+qn), lower_power_level, lower_numdigits+taillen);
BARY_TRUNC(rds, rn);
big2str_karatsuba(b2s, rds, rn, xn+wn - rn, lower_power_level, taillen);
@@ -4768,14 +5014,14 @@ big2str_generic(VALUE x, int base)
BARY_TRUNC(xds, xn);
if (xn == 0) {
- return rb_usascii_str_new2("0");
+ return rb_usascii_str_new2("0");
}
- if (base < 2 || 36 < base)
- rb_raise(rb_eArgError, "invalid radix %d", base);
+ if (!valid_radix_p(base))
+ invalid_radix(base);
if (xn >= LONG_MAX/BITSPERDIG) {
- rb_raise(rb_eRangeError, "bignum too big to convert into `string'");
+ rb_raise(rb_eRangeError, "bignum too big to convert into 'string'");
}
power_level = 0;
@@ -4785,7 +5031,7 @@ big2str_generic(VALUE x, int base)
power_level++;
power = power_cache_get_power(base, power_level, NULL);
}
- assert(power_level != MAX_BASE36_POWER_TABLE_ENTRIES);
+ RUBY_ASSERT(power_level != MAX_BASE36_POWER_TABLE_ENTRIES);
if ((size_t)BIGNUM_LEN(power) <= xn) {
/*
@@ -4809,7 +5055,7 @@ big2str_generic(VALUE x, int base)
b2s_data.ptr = NULL;
if (power_level == 0) {
- big2str_2bdigits(&b2s_data, xds, xn, 0);
+ big2str_2bdigits(&b2s_data, xds, xn, 0);
}
else {
VALUE tmpw = 0;
@@ -4818,7 +5064,7 @@ big2str_generic(VALUE x, int base)
wn = power_level * BIGDIVREM_EXTRA_WORDS + BIGNUM_LEN(power);
wds = ALLOCV_N(BDIGIT, tmpw, xn + wn);
MEMCPY(wds, xds, BDIGIT, xn);
- big2str_karatsuba(&b2s_data, wds, xn, wn, power_level, 0);
+ big2str_karatsuba(&b2s_data, wds, xn, wn, power_level, 0);
if (tmpw)
ALLOCV_END(tmpw);
}
@@ -4837,11 +5083,10 @@ rb_big2str_generic(VALUE x, int base)
return big2str_generic(x, base);
}
-#ifdef USE_GMP
+#if USE_GMP
static VALUE
big2str_gmp(VALUE x, int base)
{
- const size_t nails = (sizeof(BDIGIT)-SIZEOF_BDIGIT)*CHAR_BIT;
mpz_t mx;
size_t size;
VALUE str;
@@ -4849,7 +5094,7 @@ big2str_gmp(VALUE x, int base)
size_t xn = BIGNUM_LEN(x);
mpz_init(mx);
- mpz_import(mx, xn, -1, sizeof(BDIGIT), 0, nails, xds);
+ bdigits_to_mpz(mx, xds, xn);
size = mpz_sizeinbase(mx, base);
@@ -4885,7 +5130,7 @@ rb_big2str1(VALUE x, int base)
size_t xn;
if (FIXNUM_P(x)) {
- return rb_fix2str(x, base);
+ return rb_fix2str(x, base);
}
bigtrunc(x);
@@ -4894,14 +5139,14 @@ rb_big2str1(VALUE x, int base)
BARY_TRUNC(xds, xn);
if (xn == 0) {
- return rb_usascii_str_new2("0");
+ return rb_usascii_str_new2("0");
}
- if (base < 2 || 36 < base)
- rb_raise(rb_eArgError, "invalid radix %d", base);
+ if (!valid_radix_p(base))
+ invalid_radix(base);
if (xn >= LONG_MAX/BITSPERDIG) {
- rb_raise(rb_eRangeError, "bignum too big to convert into `string'");
+ rb_raise(rb_eRangeError, "bignum too big to convert into 'string'");
}
if (POW2_P(base)) {
@@ -4909,7 +5154,7 @@ rb_big2str1(VALUE x, int base)
return big2str_base_poweroftwo(x, base);
}
-#ifdef USE_GMP
+#if USE_GMP
if (GMP_BIG2STR_DIGITS < xn) {
return big2str_gmp(x, base);
}
@@ -4924,38 +5169,12 @@ rb_big2str(VALUE x, int base)
return rb_big2str1(x, base);
}
-/*
- * call-seq:
- * big.to_s(base=10) -> string
- *
- * Returns a string containing the representation of <i>big</i> radix
- * <i>base</i> (2 through 36).
- *
- * 12345654321.to_s #=> "12345654321"
- * 12345654321.to_s(2) #=> "1011011111110110111011110000110001"
- * 12345654321.to_s(8) #=> "133766736061"
- * 12345654321.to_s(16) #=> "2dfdbbc31"
- * 78546939656932.to_s(36) #=> "rubyrules"
- */
-
-static VALUE
-rb_big_to_s(int argc, VALUE *argv, VALUE x)
-{
- int base;
-
- if (argc == 0) base = 10;
- else {
- VALUE b;
-
- rb_scan_args(argc, argv, "01", &b);
- base = NUM2INT(b);
- }
- return rb_big2str(x, base);
-}
-
static unsigned long
big2ulong(VALUE x, const char *type)
{
+#if SIZEOF_LONG > SIZEOF_BDIGIT
+ size_t i;
+#endif
size_t len = BIGNUM_LEN(x);
unsigned long num;
BDIGIT *ds;
@@ -4963,16 +5182,16 @@ big2ulong(VALUE x, const char *type)
if (len == 0)
return 0;
if (BIGSIZE(x) > sizeof(long)) {
- rb_raise(rb_eRangeError, "bignum too big to convert into `%s'", type);
+ rb_raise(rb_eRangeError, "bignum too big to convert into '%s'", type);
}
ds = BDIGITS(x);
#if SIZEOF_LONG <= SIZEOF_BDIGIT
num = (unsigned long)ds[0];
#else
num = 0;
- while (len--) {
- num <<= BITSPERDIG;
- num += (unsigned long)ds[len]; /* overflow is already checked */
+ for (i = 0; i < len; i++) {
+ num <<= BITSPERDIG;
+ num += (unsigned long)ds[len - i - 1]; /* overflow is already checked */
}
#endif
return num;
@@ -4987,10 +5206,8 @@ rb_big2ulong(VALUE x)
return num;
}
else {
- if (num <= LONG_MAX)
- return -(long)num;
- if (num == 1+(unsigned long)(-(LONG_MIN+1)))
- return LONG_MIN;
+ if (num <= 1+(unsigned long)(-(LONG_MIN+1)))
+ return -(long)(num-1)-1;
}
rb_raise(rb_eRangeError, "bignum out of range of unsigned long");
}
@@ -5005,12 +5222,10 @@ rb_big2long(VALUE x)
return num;
}
else {
- if (num <= LONG_MAX)
- return -(long)num;
- if (num == 1+(unsigned long)(-(LONG_MIN+1)))
- return LONG_MIN;
+ if (num <= 1+(unsigned long)(-(LONG_MIN+1)))
+ return -(long)(num-1)-1;
}
- rb_raise(rb_eRangeError, "bignum too big to convert into `long'");
+ rb_raise(rb_eRangeError, "bignum too big to convert into 'long'");
}
#if HAVE_LONG_LONG
@@ -5018,6 +5233,9 @@ rb_big2long(VALUE x)
static unsigned LONG_LONG
big2ull(VALUE x, const char *type)
{
+#if SIZEOF_LONG_LONG > SIZEOF_BDIGIT
+ size_t i;
+#endif
size_t len = BIGNUM_LEN(x);
unsigned LONG_LONG num;
BDIGIT *ds = BDIGITS(x);
@@ -5025,14 +5243,14 @@ big2ull(VALUE x, const char *type)
if (len == 0)
return 0;
if (BIGSIZE(x) > SIZEOF_LONG_LONG)
- rb_raise(rb_eRangeError, "bignum too big to convert into `%s'", type);
+ rb_raise(rb_eRangeError, "bignum too big to convert into '%s'", type);
#if SIZEOF_LONG_LONG <= SIZEOF_BDIGIT
num = (unsigned LONG_LONG)ds[0];
#else
num = 0;
- while (len--) {
- num = BIGUP(num);
- num += ds[len];
+ for (i = 0; i < len; i++) {
+ num = BIGUP(num);
+ num += ds[len - i - 1];
}
#endif
return num;
@@ -5047,10 +5265,8 @@ rb_big2ull(VALUE x)
return num;
}
else {
- if (num <= LLONG_MAX)
- return -(LONG_LONG)num;
- if (num == 1+(unsigned LONG_LONG)(-(LLONG_MIN+1)))
- return LLONG_MIN;
+ if (num <= 1+(unsigned LONG_LONG)(-(LLONG_MIN+1)))
+ return -(LONG_LONG)(num-1)-1;
}
rb_raise(rb_eRangeError, "bignum out of range of unsigned long long");
}
@@ -5065,12 +5281,10 @@ rb_big2ll(VALUE x)
return num;
}
else {
- if (num <= LLONG_MAX)
- return -(LONG_LONG)num;
- if (num == 1+(unsigned LONG_LONG)(-(LLONG_MIN+1)))
- return LLONG_MIN;
+ if (num <= 1+(unsigned LONG_LONG)(-(LLONG_MIN+1)))
+ return -(LONG_LONG)(num-1)-1;
}
- rb_raise(rb_eRangeError, "bignum too big to convert into `long long'");
+ rb_raise(rb_eRangeError, "bignum too big to convert into 'long long'");
}
#endif /* HAVE_LONG_LONG */
@@ -5085,23 +5299,23 @@ dbl2big(double d)
double u = (d < 0)?-d:d;
if (isinf(d)) {
- rb_raise(rb_eFloatDomainError, d < 0 ? "-Infinity" : "Infinity");
+ rb_raise(rb_eFloatDomainError, d < 0 ? "-Infinity" : "Infinity");
}
if (isnan(d)) {
- rb_raise(rb_eFloatDomainError, "NaN");
+ rb_raise(rb_eFloatDomainError, "NaN");
}
while (1.0 <= u) {
- u /= (double)(BIGRAD);
- i++;
+ u /= (double)(BIGRAD);
+ i++;
}
z = bignew(i, d>=0);
digits = BDIGITS(z);
while (i--) {
- u *= BIGRAD;
- c = (BDIGIT)u;
- u -= c;
- digits[i] = c;
+ u *= BIGRAD;
+ c = (BDIGIT)u;
+ u -= c;
+ digits[i] = c;
}
return z;
@@ -5121,45 +5335,50 @@ big2dbl(VALUE x)
BDIGIT *ds = BDIGITS(x), dl;
if (i) {
- bits = i * BITSPERDIG - nlz(ds[i-1]);
- if (bits > DBL_MANT_DIG+DBL_MAX_EXP) {
- d = HUGE_VAL;
- }
- else {
- if (bits > DBL_MANT_DIG+1)
- lo = (bits -= DBL_MANT_DIG+1) / BITSPERDIG;
- else
- bits = 0;
- while (--i > lo) {
- d = ds[i] + BIGRAD*d;
- }
- dl = ds[i];
- if (bits && (dl & ((BDIGIT)1 << (bits %= BITSPERDIG)))) {
- int carry = (dl & ~(BDIGMAX << bits)) != 0;
- if (!carry) {
- while (i-- > 0) {
- carry = ds[i] != 0;
- if (carry) break;
- }
- }
- if (carry) {
- dl &= BDIGMAX << bits;
- dl = BIGLO(dl + ((BDIGIT)1 << bits));
- if (!dl) d += 1;
- }
- }
- d = dl + BIGRAD*d;
- if (lo) {
- if (lo > INT_MAX / BITSPERDIG)
- d = HUGE_VAL;
- else if (lo < INT_MIN / BITSPERDIG)
- d = 0.0;
- else
- d = ldexp(d, (int)(lo * BITSPERDIG));
- }
- }
- }
- if (!BIGNUM_SIGN(x)) d = -d;
+ bits = i * BITSPERDIG - nlz(ds[i-1]);
+ if (bits > DBL_MANT_DIG+DBL_MAX_EXP) {
+ d = HUGE_VAL;
+ }
+ else {
+ if (bits > DBL_MANT_DIG+1)
+ lo = (bits -= DBL_MANT_DIG+1) / BITSPERDIG;
+ else
+ bits = 0;
+ while (--i > lo) {
+ d = ds[i] + BIGRAD*d;
+ }
+ dl = ds[i];
+ if (bits && (dl & ((BDIGIT)1 << (bits %= BITSPERDIG)))) {
+ int carry = (dl & ~(BDIGMAX << bits)) != 0;
+ if (!carry) {
+ while (i-- > 0) {
+ carry = ds[i] != 0;
+ if (carry) break;
+ }
+ }
+ if (carry) {
+ BDIGIT mask = BDIGMAX;
+ BDIGIT bit = 1;
+ mask <<= bits;
+ bit <<= bits;
+ dl &= mask;
+ dl += bit;
+ dl = BIGLO(dl);
+ if (!dl) d += 1;
+ }
+ }
+ d = dl + BIGRAD*d;
+ if (lo) {
+ if (lo > INT_MAX / BITSPERDIG)
+ d = HUGE_VAL;
+ else if (lo < INT_MIN / BITSPERDIG)
+ d = 0.0;
+ else
+ d = ldexp(d, (int)(lo * BITSPERDIG));
+ }
+ }
+ }
+ if (BIGNUM_NEGATIVE_P(x)) d = -d;
return d;
}
@@ -5169,30 +5388,15 @@ rb_big2dbl(VALUE x)
double d = big2dbl(x);
if (isinf(d)) {
- rb_warning("Bignum out of Float range");
- if (d < 0.0)
- d = -HUGE_VAL;
- else
- d = HUGE_VAL;
+ rb_warning("Integer out of Float range");
+ if (d < 0.0)
+ d = -HUGE_VAL;
+ else
+ d = HUGE_VAL;
}
return d;
}
-/*
- * call-seq:
- * big.to_f -> float
- *
- * Converts <i>big</i> to a <code>Float</code>. If <i>big</i> doesn't
- * fit in a <code>Float</code>, the result is infinity.
- *
- */
-
-static VALUE
-rb_big_to_f(VALUE x)
-{
- return DBL2NUM(rb_big2dbl(x));
-}
-
VALUE
rb_integer_float_cmp(VALUE x, VALUE y)
{
@@ -5243,13 +5447,22 @@ rb_integer_float_cmp(VALUE x, VALUE y)
return INT2FIX(-1);
}
+#if SIZEOF_LONG * CHAR_BIT >= DBL_MANT_DIG /* assume FLT_RADIX == 2 */
+COMPILER_WARNING_PUSH
+#if __has_warning("-Wimplicit-int-float-conversion")
+COMPILER_WARNING_IGNORED(-Wimplicit-int-float-conversion)
+#endif
+static const double LONG_MAX_as_double = LONG_MAX;
+COMPILER_WARNING_POP
+#endif
+
VALUE
rb_integer_float_eq(VALUE x, VALUE y)
{
double yd = RFLOAT_VALUE(y);
double yi, yf;
- if (isnan(yd) || isinf(yd))
+ if (!isfinite(yd))
return Qfalse;
yf = modf(yd, &yi);
if (yf != 0)
@@ -5257,70 +5470,47 @@ rb_integer_float_eq(VALUE x, VALUE y)
if (FIXNUM_P(x)) {
#if SIZEOF_LONG * CHAR_BIT < DBL_MANT_DIG /* assume FLT_RADIX == 2 */
double xd = (double)FIX2LONG(x);
- if (xd != yd)
- return Qfalse;
- return Qtrue;
+ return RBOOL(xd == yd);
#else
long xn, yn;
- if (yi < LONG_MIN || LONG_MAX < yi)
+ if (yi < LONG_MIN || LONG_MAX_as_double <= yi)
return Qfalse;
xn = FIX2LONG(x);
yn = (long)yi;
- if (xn != yn)
- return Qfalse;
- return Qtrue;
+ return RBOOL(xn == yn);
#endif
}
y = rb_dbl2big(yi);
return rb_big_eq(x, y);
}
-/*
- * call-seq:
- * big <=> numeric -> -1, 0, +1 or nil
- *
- * Comparison---Returns -1, 0, or +1 depending on whether +big+ is
- * less than, equal to, or greater than +numeric+. This is the
- * basis for the tests in Comparable.
- *
- * +nil+ is returned if the two values are incomparable.
- *
- */
VALUE
rb_big_cmp(VALUE x, VALUE y)
{
- int cmp;
-
if (FIXNUM_P(y)) {
- x = bignorm(x);
+ x = bigfixize(x);
if (FIXNUM_P(x)) {
- if (FIX2LONG(x) > FIX2LONG(y)) return INT2FIX(1);
- if (FIX2LONG(x) < FIX2LONG(y)) return INT2FIX(-1);
- return INT2FIX(0);
- }
- else {
- if (BIGNUM_NEGATIVE_P(x)) return INT2FIX(-1);
- return INT2FIX(1);
+ /* SIGNED_VALUE and Fixnum have same sign-bits, same
+ * order */
+ SIGNED_VALUE sx = (SIGNED_VALUE)x, sy = (SIGNED_VALUE)y;
+ if (sx < sy) return INT2FIX(-1);
+ return INT2FIX(sx > sy);
}
}
else if (RB_BIGNUM_TYPE_P(y)) {
+ if (BIGNUM_SIGN(x) == BIGNUM_SIGN(y)) {
+ int cmp = bary_cmp(BDIGITS(x), BIGNUM_LEN(x), BDIGITS(y), BIGNUM_LEN(y));
+ return INT2FIX(BIGNUM_SIGN(x) ? cmp : -cmp);
+ }
}
else if (RB_FLOAT_TYPE_P(y)) {
return rb_integer_float_cmp(x, y);
}
else {
- return rb_num_coerce_cmp(x, y, rb_intern("<=>"));
+ return rb_num_coerce_cmp(x, y, idCmp);
}
-
- if (BIGNUM_SIGN(x) > BIGNUM_SIGN(y)) return INT2FIX(1);
- if (BIGNUM_SIGN(x) < BIGNUM_SIGN(y)) return INT2FIX(-1);
-
- cmp = bary_cmp(BDIGITS(x), BIGNUM_LEN(x), BDIGITS(y), BIGNUM_LEN(y));
- if (BIGNUM_SIGN(x))
- return INT2FIX(cmp);
- else
- return INT2FIX(-cmp);
+ return INT2FIX(BIGNUM_SIGN(x) ? 1 : -1);
}
enum big_op_t {
@@ -5336,87 +5526,55 @@ big_op(VALUE x, VALUE y, enum big_op_t op)
VALUE rel;
int n;
- if (FIXNUM_P(y) || RB_BIGNUM_TYPE_P(y)) {
- rel = rb_big_cmp(x, y);
+ if (RB_INTEGER_TYPE_P(y)) {
+ rel = rb_big_cmp(x, y);
}
else if (RB_FLOAT_TYPE_P(y)) {
rel = rb_integer_float_cmp(x, y);
}
else {
- ID id = 0;
- switch (op) {
- case big_op_gt: id = '>'; break;
- case big_op_ge: id = rb_intern(">="); break;
- case big_op_lt: id = '<'; break;
- case big_op_le: id = rb_intern("<="); break;
- }
- return rb_num_coerce_relop(x, y, id);
+ ID id = 0;
+ switch (op) {
+ case big_op_gt: id = '>'; break;
+ case big_op_ge: id = idGE; break;
+ case big_op_lt: id = '<'; break;
+ case big_op_le: id = idLE; break;
+ }
+ return rb_num_coerce_relop(x, y, id);
}
if (NIL_P(rel)) return Qfalse;
n = FIX2INT(rel);
switch (op) {
- case big_op_gt: return n > 0 ? Qtrue : Qfalse;
- case big_op_ge: return n >= 0 ? Qtrue : Qfalse;
- case big_op_lt: return n < 0 ? Qtrue : Qfalse;
- case big_op_le: return n <= 0 ? Qtrue : Qfalse;
+ case big_op_gt: return RBOOL(n > 0);
+ case big_op_ge: return RBOOL(n >= 0);
+ case big_op_lt: return RBOOL(n < 0);
+ case big_op_le: return RBOOL(n <= 0);
}
return Qundef;
}
-/*
- * call-seq:
- * big > real -> true or false
- *
- * Returns <code>true</code> if the value of <code>big</code> is
- * greater than that of <code>real</code>.
- */
-
-static VALUE
-big_gt(VALUE x, VALUE y)
+VALUE
+rb_big_gt(VALUE x, VALUE y)
{
return big_op(x, y, big_op_gt);
}
-/*
- * call-seq:
- * big >= real -> true or false
- *
- * Returns <code>true</code> if the value of <code>big</code> is
- * greater than or equal to that of <code>real</code>.
- */
-
-static VALUE
-big_ge(VALUE x, VALUE y)
+VALUE
+rb_big_ge(VALUE x, VALUE y)
{
return big_op(x, y, big_op_ge);
}
-/*
- * call-seq:
- * big < real -> true or false
- *
- * Returns <code>true</code> if the value of <code>big</code> is
- * less than that of <code>real</code>.
- */
-
-static VALUE
-big_lt(VALUE x, VALUE y)
+VALUE
+rb_big_lt(VALUE x, VALUE y)
{
return big_op(x, y, big_op_lt);
}
-/*
- * call-seq:
- * big <= real -> true or false
- *
- * Returns <code>true</code> if the value of <code>big</code> is
- * less than or equal to that of <code>real</code>.
- */
-
-static VALUE
-big_le(VALUE x, VALUE y)
+VALUE
+rb_big_le(VALUE x, VALUE y)
{
return big_op(x, y, big_op_le);
}
@@ -5426,8 +5584,8 @@ big_le(VALUE x, VALUE y)
* big == obj -> true or false
*
* Returns <code>true</code> only if <i>obj</i> has the same value
- * as <i>big</i>. Contrast this with <code>Bignum#eql?</code>, which
- * requires <i>obj</i> to be a <code>Bignum</code>.
+ * as <i>big</i>. Contrast this with Integer#eql?, which requires
+ * <i>obj</i> to be an Integer.
*
* 68719476736 == 68719476736.0 #=> true
*/
@@ -5436,8 +5594,7 @@ VALUE
rb_big_eq(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
- if (bignorm(x) == y) return Qtrue;
- y = rb_int2big(FIX2LONG(y));
+ return RBOOL(bignorm(x) == y);
}
else if (RB_BIGNUM_TYPE_P(y)) {
}
@@ -5445,66 +5602,34 @@ rb_big_eq(VALUE x, VALUE y)
return rb_integer_float_eq(x, y);
}
else {
- return rb_equal(y, x);
+ return rb_equal(y, x);
}
if (BIGNUM_SIGN(x) != BIGNUM_SIGN(y)) return Qfalse;
if (BIGNUM_LEN(x) != BIGNUM_LEN(y)) return Qfalse;
- if (MEMCMP(BDIGITS(x),BDIGITS(y),BDIGIT,BIGNUM_LEN(y)) != 0) return Qfalse;
- return Qtrue;
+ return RBOOL(MEMCMP(BDIGITS(x),BDIGITS(y),BDIGIT,BIGNUM_LEN(y)) == 0);
}
-/*
- * call-seq:
- * big.eql?(obj) -> true or false
- *
- * Returns <code>true</code> only if <i>obj</i> is a
- * <code>Bignum</code> with the same value as <i>big</i>. Contrast this
- * with <code>Bignum#==</code>, which performs type conversions.
- *
- * 68719476736.eql?(68719476736.0) #=> false
- */
-
VALUE
rb_big_eql(VALUE x, VALUE y)
{
if (!RB_BIGNUM_TYPE_P(y)) return Qfalse;
if (BIGNUM_SIGN(x) != BIGNUM_SIGN(y)) return Qfalse;
if (BIGNUM_LEN(x) != BIGNUM_LEN(y)) return Qfalse;
- if (MEMCMP(BDIGITS(x),BDIGITS(y),BDIGIT,BIGNUM_LEN(y)) != 0) return Qfalse;
- return Qtrue;
+ return RBOOL(MEMCMP(BDIGITS(x),BDIGITS(y),BDIGIT,BIGNUM_LEN(y)) == 0);
}
-/*
- * call-seq:
- * -big -> integer
- *
- * Unary minus (returns an integer whose value is 0-big)
- */
-
VALUE
rb_big_uminus(VALUE x)
{
VALUE z = rb_big_clone(x);
- BIGNUM_SET_SIGN(z, !BIGNUM_SIGN(x));
+ BIGNUM_NEGATE(z);
return bignorm(z);
}
-/*
- * call-seq:
- * ~big -> integer
- *
- * Inverts the bits in big. As Bignums are conceptually infinite
- * length, the result acts as if it had an infinite number of one
- * bits to the left. In hex representations, this is displayed
- * as two periods to the left of the digits.
- *
- * sprintf("%X", ~0x1122334455) #=> "..FEEDDCCBBAA"
- */
-
-static VALUE
-rb_big_neg(VALUE x)
+VALUE
+rb_big_comp(VALUE x)
{
VALUE z = rb_big_clone(x);
BDIGIT *ds = BDIGITS(z);
@@ -5581,13 +5706,13 @@ bigsub_int(VALUE x, long y0)
zds = BDIGITS(z);
#if SIZEOF_BDIGIT >= SIZEOF_LONG
- assert(xn == zn);
+ RUBY_ASSERT(xn == zn);
num = (BDIGIT_DBL_SIGNED)xds[0] - y;
if (xn == 1 && num < 0) {
- BIGNUM_SET_SIGN(z, !BIGNUM_SIGN(x));
- zds[0] = (BDIGIT)-num;
- RB_GC_GUARD(x);
- return bignorm(z);
+ BIGNUM_NEGATE(z);
+ zds[0] = (BDIGIT)-num;
+ RB_GC_GUARD(x);
+ return bignorm(z);
}
zds[0] = BIGLO(num);
num = BIGDN(num);
@@ -5599,10 +5724,10 @@ bigsub_int(VALUE x, long y0)
num = 0;
for (i=0; i < xn; i++) {
if (y == 0) goto y_is_zero_x;
- num += (BDIGIT_DBL_SIGNED)xds[i] - BIGLO(y);
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- y = BIGDN(y);
+ num += (BDIGIT_DBL_SIGNED)xds[i] - BIGLO(y);
+ zds[i] = BIGLO(num);
+ num = BIGDN(num);
+ y = BIGDN(y);
}
for (; i < zn; i++) {
if (y == 0) goto y_is_zero_z;
@@ -5617,9 +5742,9 @@ bigsub_int(VALUE x, long y0)
for (; i < xn; i++) {
y_is_zero_x:
if (num == 0) goto num_is_zero_x;
- num += xds[i];
- zds[i] = BIGLO(num);
- num = BIGDN(num);
+ num += xds[i];
+ zds[i] = BIGLO(num);
+ num = BIGDN(num);
}
#if SIZEOF_BDIGIT < SIZEOF_LONG
for (; i < zn; i++) {
@@ -5633,7 +5758,7 @@ bigsub_int(VALUE x, long y0)
for (; i < xn; i++) {
num_is_zero_x:
- zds[i] = xds[i];
+ zds[i] = xds[i];
}
#if SIZEOF_BDIGIT < SIZEOF_LONG
for (; i < zn; i++) {
@@ -5644,10 +5769,10 @@ bigsub_int(VALUE x, long y0)
goto finish;
finish:
- assert(num == 0 || num == -1);
+ RUBY_ASSERT(num == 0 || num == -1);
if (num < 0) {
get2comp(z);
- BIGNUM_SET_SIGN(z, !BIGNUM_SIGN(x));
+ BIGNUM_NEGATE(z);
}
RB_GC_GUARD(x);
return bignorm(z);
@@ -5690,17 +5815,17 @@ bigadd_int(VALUE x, long y)
num = 0;
for (i=0; i < xn; i++) {
if (y == 0) goto y_is_zero_x;
- num += (BDIGIT_DBL)xds[i] + BIGLO(y);
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- y = BIGDN(y);
+ num += (BDIGIT_DBL)xds[i] + BIGLO(y);
+ zds[i] = BIGLO(num);
+ num = BIGDN(num);
+ y = BIGDN(y);
}
for (; i < zn; i++) {
if (y == 0) goto y_is_zero_z;
- num += BIGLO(y);
- zds[i] = BIGLO(num);
- num = BIGDN(num);
- y = BIGDN(y);
+ num += BIGLO(y);
+ zds[i] = BIGLO(num);
+ num = BIGDN(num);
+ y = BIGDN(y);
}
goto finish;
@@ -5709,25 +5834,25 @@ bigadd_int(VALUE x, long y)
for (;i < xn; i++) {
y_is_zero_x:
if (num == 0) goto num_is_zero_x;
- num += (BDIGIT_DBL)xds[i];
- zds[i] = BIGLO(num);
- num = BIGDN(num);
+ num += (BDIGIT_DBL)xds[i];
+ zds[i] = BIGLO(num);
+ num = BIGDN(num);
}
for (; i < zn; i++) {
y_is_zero_z:
if (num == 0) goto num_is_zero_z;
- zds[i] = BIGLO(num);
- num = BIGDN(num);
+ zds[i] = BIGLO(num);
+ num = BIGDN(num);
}
goto finish;
for (;i < xn; i++) {
num_is_zero_x:
- zds[i] = xds[i];
+ zds[i] = xds[i];
}
for (; i < zn; i++) {
num_is_zero_z:
- zds[i] = 0;
+ zds[i] = 0;
}
goto finish;
@@ -5744,15 +5869,15 @@ bigadd(VALUE x, VALUE y, int sign)
sign = (sign == BIGNUM_SIGN(y));
if (BIGNUM_SIGN(x) != sign) {
- if (sign) return bigsub(y, x);
- return bigsub(x, y);
+ if (sign) return bigsub(y, x);
+ return bigsub(x, y);
}
if (BIGNUM_LEN(x) > BIGNUM_LEN(y)) {
- len = BIGNUM_LEN(x) + 1;
+ len = BIGNUM_LEN(x) + 1;
}
else {
- len = BIGNUM_LEN(y) + 1;
+ len = BIGNUM_LEN(y) + 1;
}
z = bignew(len, sign);
@@ -5763,75 +5888,61 @@ bigadd(VALUE x, VALUE y, int sign)
return z;
}
-/*
- * call-seq:
- * big + other -> Numeric
- *
- * Adds big and other, returning the result.
- */
-
VALUE
rb_big_plus(VALUE x, VALUE y)
{
long n;
if (FIXNUM_P(y)) {
- n = FIX2LONG(y);
- if ((n > 0) != BIGNUM_SIGN(x)) {
- if (n < 0) {
- n = -n;
- }
- return bigsub_int(x, n);
- }
- if (n < 0) {
- n = -n;
- }
- return bigadd_int(x, n);
+ n = FIX2LONG(y);
+ if ((n > 0) != BIGNUM_SIGN(x)) {
+ if (n < 0) {
+ n = -n;
+ }
+ return bigsub_int(x, n);
+ }
+ if (n < 0) {
+ n = -n;
+ }
+ return bigadd_int(x, n);
}
else if (RB_BIGNUM_TYPE_P(y)) {
- return bignorm(bigadd(x, y, 1));
+ return bignorm(bigadd(x, y, 1));
}
else if (RB_FLOAT_TYPE_P(y)) {
- return DBL2NUM(rb_big2dbl(x) + RFLOAT_VALUE(y));
+ return DBL2NUM(rb_big2dbl(x) + RFLOAT_VALUE(y));
}
else {
- return rb_num_coerce_bin(x, y, '+');
+ return rb_num_coerce_bin(x, y, '+');
}
}
-/*
- * call-seq:
- * big - other -> Numeric
- *
- * Subtracts other from big, returning the result.
- */
-
VALUE
rb_big_minus(VALUE x, VALUE y)
{
long n;
if (FIXNUM_P(y)) {
- n = FIX2LONG(y);
- if ((n > 0) != BIGNUM_SIGN(x)) {
- if (n < 0) {
- n = -n;
- }
- return bigadd_int(x, n);
- }
- if (n < 0) {
- n = -n;
- }
- return bigsub_int(x, n);
+ n = FIX2LONG(y);
+ if ((n > 0) != BIGNUM_SIGN(x)) {
+ if (n < 0) {
+ n = -n;
+ }
+ return bigadd_int(x, n);
+ }
+ if (n < 0) {
+ n = -n;
+ }
+ return bigsub_int(x, n);
}
else if (RB_BIGNUM_TYPE_P(y)) {
- return bignorm(bigadd(x, y, 0));
+ return bignorm(bigadd(x, y, 0));
}
else if (RB_FLOAT_TYPE_P(y)) {
- return DBL2NUM(rb_big2dbl(x) - RFLOAT_VALUE(y));
+ return DBL2NUM(rb_big2dbl(x) - RFLOAT_VALUE(y));
}
else {
- return rb_num_coerce_bin(x, y, '-');
+ return rb_num_coerce_bin(x, y, '-');
}
}
@@ -5843,6 +5954,8 @@ bigsq(VALUE x)
BDIGIT *xds, *zds;
xn = BIGNUM_LEN(x);
+ if (MUL_OVERFLOW_LONG_P(2, xn))
+ rb_raise(rb_eArgError, "square overflow");
zn = 2 * xn;
z = bignew(zn, 1);
@@ -5850,17 +5963,10 @@ bigsq(VALUE x)
xds = BDIGITS(x);
zds = BDIGITS(z);
-#ifdef USE_GMP
- if (xn < GMP_MUL_DIGITS)
- bary_sq_fast(zds, zn, xds, xn);
- else
- bary_mul(zds, zn, xds, xn, xds, xn);
-#else
- if (xn < KARATSUBA_MUL_DIGITS)
+ if (xn < NAIVE_MUL_DIGITS)
bary_sq_fast(zds, zn, xds, xn);
else
bary_mul(zds, zn, xds, xn, xds, xn);
-#endif
RB_GC_GUARD(x);
return z;
@@ -5878,6 +5984,8 @@ bigmul0(VALUE x, VALUE y)
xn = BIGNUM_LEN(x);
yn = BIGNUM_LEN(y);
+ if (ADD_OVERFLOW_LONG_P(xn, yn))
+ rb_raise(rb_eArgError, "multiplication overflow");
zn = xn + yn;
z = bignew(zn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
@@ -5893,26 +6001,19 @@ bigmul0(VALUE x, VALUE y)
return z;
}
-/*
- * call-seq:
- * big * other -> Numeric
- *
- * Multiplies big and other, returning the result.
- */
-
VALUE
rb_big_mul(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
- y = rb_int2big(FIX2LONG(y));
+ y = rb_int2big(FIX2LONG(y));
}
else if (RB_BIGNUM_TYPE_P(y)) {
}
else if (RB_FLOAT_TYPE_P(y)) {
- return DBL2NUM(rb_big2dbl(x) * RFLOAT_VALUE(y));
+ return DBL2NUM(rb_big2dbl(x) * RFLOAT_VALUE(y));
}
else {
- return rb_num_coerce_bin(x, y, '*');
+ return rb_num_coerce_bin(x, y, '*');
}
return bignorm(bigmul0(x, y));
@@ -5939,21 +6040,21 @@ bigdivrem(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp)
BARY_TRUNC(xds, xn);
if (xn < yn || (xn == yn && xds[xn - 1] < yds[yn - 1])) {
- if (divp) *divp = rb_int2big(0);
- if (modp) *modp = x;
- return Qnil;
+ if (divp) *divp = rb_int2big(0);
+ if (modp) *modp = x;
+ return Qnil;
}
if (yn == 1) {
- dd = yds[0];
- z = bignew(xn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
- zds = BDIGITS(z);
+ dd = yds[0];
+ z = bignew(xn, BIGNUM_SIGN(x)==BIGNUM_SIGN(y));
+ zds = BDIGITS(z);
dd = bigdivrem_single(zds, xds, xn, dd);
- if (modp) {
- *modp = rb_uint2big((VALUE)dd);
- BIGNUM_SET_SIGN(*modp, BIGNUM_SIGN(x));
- }
- if (divp) *divp = z;
- return Qnil;
+ if (modp) {
+ *modp = rb_uint2big((uintptr_t)dd);
+ BIGNUM_SET_SIGN(*modp, BIGNUM_SIGN(x));
+ }
+ if (divp) *divp = z;
+ return Qnil;
}
if (xn == 2 && yn == 2) {
BDIGIT_DBL x0 = bary2bdigitdbl(xds, 2);
@@ -6018,11 +6119,11 @@ bigdivmod(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp)
bigdivrem(x, y, divp, &mod);
if (BIGNUM_SIGN(x) != BIGNUM_SIGN(y) && !BIGZEROP(mod)) {
- if (divp) *divp = bigadd(*divp, rb_int2big(1), 0);
- if (modp) *modp = bigadd(mod, y, 1);
+ if (divp) *divp = bigadd(*divp, rb_int2big(1), 0);
+ if (modp) *modp = bigadd(mod, y, 1);
}
else if (modp) {
- *modp = mod;
+ *modp = mod;
}
}
@@ -6033,123 +6134,85 @@ rb_big_divide(VALUE x, VALUE y, ID op)
VALUE z;
if (FIXNUM_P(y)) {
- y = rb_int2big(FIX2LONG(y));
+ y = rb_int2big(FIX2LONG(y));
}
else if (RB_BIGNUM_TYPE_P(y)) {
}
else if (RB_FLOAT_TYPE_P(y)) {
- if (op == '/') {
- return DBL2NUM(rb_big2dbl(x) / RFLOAT_VALUE(y));
- }
- else {
- double dy = RFLOAT_VALUE(y);
- if (dy == 0.0) rb_num_zerodiv();
- return rb_dbl2big(rb_big2dbl(x) / dy);
- }
+ if (op == '/') {
+ double dx = rb_big2dbl(x);
+ return rb_flo_div_flo(DBL2NUM(dx), y);
+ }
+ else {
+ VALUE v;
+ double dy = RFLOAT_VALUE(y);
+ if (dy == 0.0) rb_num_zerodiv();
+ v = rb_big_divide(x, y, '/');
+ return rb_dbl2big(RFLOAT_VALUE(v));
+ }
}
else {
- return rb_num_coerce_bin(x, y, op);
+ return rb_num_coerce_bin(x, y, op);
}
bigdivmod(x, y, &z, 0);
return bignorm(z);
}
-/*
- * call-seq:
- * big / other -> Numeric
- *
- * Performs division: the class of the resulting object depends on
- * the class of <code>numeric</code> and on the magnitude of the
- * result.
- */
-
VALUE
rb_big_div(VALUE x, VALUE y)
{
return rb_big_divide(x, y, '/');
}
-/*
- * call-seq:
- * big.div(other) -> integer
- *
- * Performs integer division: returns integer value.
- */
-
VALUE
rb_big_idiv(VALUE x, VALUE y)
{
- return rb_big_divide(x, y, rb_intern("div"));
+ return rb_big_divide(x, y, idDiv);
}
-/*
- * call-seq:
- * big % other -> Numeric
- * big.modulo(other) -> Numeric
- *
- * Returns big modulo other. See Numeric.divmod for more
- * information.
- */
-
VALUE
rb_big_modulo(VALUE x, VALUE y)
{
VALUE z;
if (FIXNUM_P(y)) {
- y = rb_int2big(FIX2LONG(y));
+ y = rb_int2big(FIX2LONG(y));
}
else if (!RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bin(x, y, '%');
+ return rb_num_coerce_bin(x, y, '%');
}
bigdivmod(x, y, 0, &z);
return bignorm(z);
}
-/*
- * call-seq:
- * big.remainder(numeric) -> number
- *
- * Returns the remainder after dividing <i>big</i> by <i>numeric</i>.
- *
- * -1234567890987654321.remainder(13731) #=> -6966
- * -1234567890987654321.remainder(13731.24) #=> -9906.22531493148
- */
-static VALUE
+VALUE
rb_big_remainder(VALUE x, VALUE y)
{
VALUE z;
if (FIXNUM_P(y)) {
- y = rb_int2big(FIX2LONG(y));
+ y = rb_int2big(FIX2LONG(y));
}
else if (!RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bin(x, y, rb_intern("remainder"));
+ return rb_num_coerce_bin(x, y, rb_intern("remainder"));
}
bigdivrem(x, y, 0, &z);
return bignorm(z);
}
-/*
- * call-seq:
- * big.divmod(numeric) -> array
- *
- * See <code>Numeric#divmod</code>.
- *
- */
VALUE
rb_big_divmod(VALUE x, VALUE y)
{
VALUE div, mod;
if (FIXNUM_P(y)) {
- y = rb_int2big(FIX2LONG(y));
+ y = rb_int2big(FIX2LONG(y));
}
else if (!RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bin(x, y, rb_intern("divmod"));
+ return rb_num_coerce_bin(x, y, idDivmod);
}
bigdivmod(x, y, &div, &mod);
@@ -6160,16 +6223,17 @@ static VALUE
big_shift(VALUE x, long n)
{
if (n < 0)
- return big_lshift(x, 1+(unsigned long)(-(n+1)));
+ return big_lshift(x, 1+(unsigned long)(-(n+1)));
else if (n > 0)
- return big_rshift(x, (unsigned long)n);
+ return big_rshift(x, (unsigned long)n);
return x;
}
-static VALUE
+enum {DBL_BIGDIG = ((DBL_MANT_DIG + BITSPERDIG) / BITSPERDIG)};
+
+static double
big_fdiv(VALUE x, VALUE y, long ey)
{
-#define DBL_BIGDIG ((DBL_MANT_DIG + BITSPERDIG) / BITSPERDIG)
VALUE z;
long l, ex;
@@ -6177,21 +6241,23 @@ big_fdiv(VALUE x, VALUE y, long ey)
l = BIGNUM_LEN(x);
ex = l * BITSPERDIG - nlz(BDIGITS(x)[l-1]);
ex -= 2 * DBL_BIGDIG * BITSPERDIG;
+ if (ex > BITSPERDIG) ex -= BITSPERDIG;
+ else if (ex > 0) ex = 0;
if (ex) x = big_shift(x, ex);
bigdivrem(x, y, &z, 0);
l = ex - ey;
#if SIZEOF_LONG > SIZEOF_INT
{
- /* Visual C++ can't be here */
- if (l > INT_MAX) return DBL2NUM(INFINITY);
- if (l < INT_MIN) return DBL2NUM(0.0);
+ /* Visual C++ can't be here */
+ if (l > INT_MAX) return HUGE_VAL;
+ if (l < INT_MIN) return 0.0;
}
#endif
- return DBL2NUM(ldexp(big2dbl(z), (int)l));
+ return ldexp(big2dbl(z), (int)l);
}
-static VALUE
+static double
big_fdiv_int(VALUE x, VALUE y)
{
long l, ey;
@@ -6203,7 +6269,7 @@ big_fdiv_int(VALUE x, VALUE y)
return big_fdiv(x, y, ey);
}
-static VALUE
+static double
big_fdiv_float(VALUE x, VALUE y)
{
int i;
@@ -6211,60 +6277,40 @@ big_fdiv_float(VALUE x, VALUE y)
return big_fdiv(x, y, i - DBL_MANT_DIG);
}
-/*
- * call-seq:
- * big.fdiv(numeric) -> float
- *
- * Returns the floating point result of dividing <i>big</i> by
- * <i>numeric</i>.
- *
- * -1234567890987654321.fdiv(13731) #=> -89910996357705.5
- * -1234567890987654321.fdiv(13731.24) #=> -89909424858035.7
- *
- */
-
-
-VALUE
-rb_big_fdiv(VALUE x, VALUE y)
+double
+rb_big_fdiv_double(VALUE x, VALUE y)
{
double dx, dy;
+ VALUE v;
dx = big2dbl(x);
if (FIXNUM_P(y)) {
- dy = (double)FIX2LONG(y);
- if (isinf(dx))
- return big_fdiv_int(x, rb_int2big(FIX2LONG(y)));
+ dy = (double)FIX2LONG(y);
+ if (isinf(dx))
+ return big_fdiv_int(x, rb_int2big(FIX2LONG(y)));
}
else if (RB_BIGNUM_TYPE_P(y)) {
- dy = rb_big2dbl(y);
- if (isinf(dx) || isinf(dy))
- return big_fdiv_int(x, y);
+ return big_fdiv_int(x, y);
}
else if (RB_FLOAT_TYPE_P(y)) {
- dy = RFLOAT_VALUE(y);
- if (isnan(dy))
- return y;
- if (isinf(dx))
- return big_fdiv_float(x, y);
+ dy = RFLOAT_VALUE(y);
+ if (isnan(dy))
+ return dy;
+ if (isinf(dx))
+ return big_fdiv_float(x, y);
}
else {
- return rb_num_coerce_bin(x, y, rb_intern("fdiv"));
+ return NUM2DBL(rb_num_coerce_bin(x, y, idFdiv));
}
- return DBL2NUM(dx / dy);
+ v = rb_flo_div_flo(DBL2NUM(dx), DBL2NUM(dy));
+ return NUM2DBL(v);
}
-/*
- * call-seq:
- * big ** exponent -> numeric
- *
- * Raises _big_ to the _exponent_ power (which may be an integer, float,
- * or anything that will coerce to a number). The result may be
- * a Fixnum, Bignum, or Float
- *
- * 123456789 ** 2 #=> 15241578750190521
- * 123456789 ** 1.2 #=> 5126464716.09932
- * 123456789 ** -2 #=> 6.5610001194102e-17
- */
+VALUE
+rb_big_fdiv(VALUE x, VALUE y)
+{
+ return DBL2NUM(rb_big_fdiv_double(x, y));
+}
VALUE
rb_big_pow(VALUE x, VALUE y)
@@ -6274,48 +6320,58 @@ rb_big_pow(VALUE x, VALUE y)
again:
if (y == INT2FIX(0)) return INT2FIX(1);
+ if (y == INT2FIX(1)) return x;
if (RB_FLOAT_TYPE_P(y)) {
- d = RFLOAT_VALUE(y);
- if ((!BIGNUM_SIGN(x) && !BIGZEROP(x)) && d != round(d))
- return rb_funcall(rb_complex_raw1(x), rb_intern("**"), 1, y);
+ d = RFLOAT_VALUE(y);
+ if ((BIGNUM_NEGATIVE_P(x) && !BIGZEROP(x))) {
+ return rb_dbl_complex_new_polar_pi(pow(-rb_big2dbl(x), d), d);
+ }
}
else if (RB_BIGNUM_TYPE_P(y)) {
- y = bignorm(y);
- if (FIXNUM_P(y))
- goto again;
- rb_warn("in a**b, b may be too big");
- d = rb_big2dbl(y);
+ y = bignorm(y);
+ if (FIXNUM_P(y))
+ goto again;
+ rb_raise(rb_eArgError, "exponent is too large");
}
else if (FIXNUM_P(y)) {
- yy = FIX2LONG(y);
+ yy = FIX2LONG(y);
- if (yy < 0)
- return rb_funcall(rb_rational_raw1(x), rb_intern("**"), 1, y);
- else {
- VALUE z = 0;
- SIGNED_VALUE mask;
+ if (yy < 0) {
+ x = rb_big_pow(x, LONG2NUM(-yy));
+ if (RB_INTEGER_TYPE_P(x))
+ return rb_rational_raw(INT2FIX(1), x);
+ else
+ return DBL2NUM(1.0 / NUM2DBL(x));
+ }
+ else {
+ VALUE z = 0;
+ SIGNED_VALUE mask;
const size_t xbits = rb_absint_numwords(x, 1, NULL);
- const size_t BIGLEN_LIMIT = 32*1024*1024;
+#if SIZEOF_SIZE_T == 4
+ const size_t BIGLEN_LIMIT = 1ULL << 31; // 2 GB
+#else // SIZEOF_SIZE_T == 8
+ const size_t BIGLEN_LIMIT = 1ULL << 34; // 16 GB
+#endif
- if (xbits == (size_t)-1 ||
+ if (xbits == (size_t)-1 ||
(xbits > BIGLEN_LIMIT) ||
+ MUL_OVERFLOW_LONG_P(yy, xbits) ||
(xbits * yy > BIGLEN_LIMIT)) {
- rb_warn("in a**b, b may be too big");
- d = (double)yy;
- }
- else {
- for (mask = FIXNUM_MAX + 1; mask; mask >>= 1) {
- if (z) z = bigsq(z);
- if (yy & mask) {
- z = z ? bigtrunc(bigmul0(z, x)) : x;
- }
- }
- return bignorm(z);
- }
- }
+ rb_raise(rb_eArgError, "exponent is too large");
+ }
+ else {
+ for (mask = FIXNUM_MAX + 1; mask; mask >>= 1) {
+ if (z) z = bigsq(z);
+ if (yy & mask) {
+ z = z ? bigtrunc(bigmul0(z, x)) : x;
+ }
+ }
+ return bignorm(z);
+ }
+ }
}
else {
- return rb_num_coerce_bin(x, y, rb_intern("**"));
+ return rb_num_coerce_bin(x, y, idPow);
}
return DBL2NUM(pow(rb_big2dbl(x), d));
}
@@ -6330,13 +6386,13 @@ bigand_int(VALUE x, long xn, BDIGIT hibitsx, long y)
BDIGIT hibitsy;
if (y == 0) return INT2FIX(0);
- if (xn == 0) return hibitsx ? LONG2NUM(y) : 0;
+ if (xn == 0) return hibitsx ? LONG2NUM(y) : INT2FIX(0);
hibitsy = 0 <= y ? 0 : BDIGMAX;
xds = BDIGITS(x);
#if SIZEOF_BDIGIT >= SIZEOF_LONG
if (!hibitsy) {
- y &= xds[0];
- return LONG2NUM(y);
+ y &= xds[0];
+ return LONG2NUM(y);
}
#endif
@@ -6365,23 +6421,16 @@ bigand_int(VALUE x, long xn, BDIGIT hibitsx, long y)
}
#endif
for (;i < xn; i++) {
- zds[i] = xds[i] & hibitsy;
+ zds[i] = xds[i] & hibitsy;
}
for (;i < zn; i++) {
- zds[i] = hibitsx & hibitsy;
+ zds[i] = hibitsx & hibitsy;
}
twocomp2abs_bang(z, hibitsx && hibitsy);
RB_GC_GUARD(x);
return bignorm(z);
}
-/*
- * call-seq:
- * big & numeric -> integer
- *
- * Performs bitwise +and+ between _big_ and _numeric_.
- */
-
VALUE
rb_big_and(VALUE x, VALUE y)
{
@@ -6394,13 +6443,13 @@ rb_big_and(VALUE x, VALUE y)
BDIGIT tmph;
long tmpn;
- if (!FIXNUM_P(y) && !RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bit(x, y, '&');
+ if (!RB_INTEGER_TYPE_P(y)) {
+ return rb_num_coerce_bit(x, y, '&');
}
hibitsx = abs2twocomp(&x, &xn);
if (FIXNUM_P(y)) {
- return bigand_int(x, xn, hibitsx, FIX2LONG(y));
+ return bigand_int(x, xn, hibitsx, FIX2LONG(y));
}
hibitsy = abs2twocomp(&y, &yn);
if (xn > yn) {
@@ -6422,10 +6471,10 @@ rb_big_and(VALUE x, VALUE y)
zds = BDIGITS(z);
for (i=0; i<n1; i++) {
- zds[i] = ds1[i] & ds2[i];
+ zds[i] = ds1[i] & ds2[i];
}
for (; i<n2; i++) {
- zds[i] = hibits1 & ds2[i];
+ zds[i] = hibits1 & ds2[i];
}
twocomp2abs_bang(z, hibits1 && hibits2);
RB_GC_GUARD(x);
@@ -6501,13 +6550,6 @@ bigor_int(VALUE x, long xn, BDIGIT hibitsx, long y)
return bignorm(z);
}
-/*
- * call-seq:
- * big | numeric -> integer
- *
- * Performs bitwise +or+ between _big_ and _numeric_.
- */
-
VALUE
rb_big_or(VALUE x, VALUE y)
{
@@ -6520,13 +6562,13 @@ rb_big_or(VALUE x, VALUE y)
BDIGIT tmph;
long tmpn;
- if (!FIXNUM_P(y) && !RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bit(x, y, '|');
+ if (!RB_INTEGER_TYPE_P(y)) {
+ return rb_num_coerce_bit(x, y, '|');
}
hibitsx = abs2twocomp(&x, &xn);
if (FIXNUM_P(y)) {
- return bigor_int(x, xn, hibitsx, FIX2LONG(y));
+ return bigor_int(x, xn, hibitsx, FIX2LONG(y));
}
hibitsy = abs2twocomp(&y, &yn);
if (xn > yn) {
@@ -6548,10 +6590,10 @@ rb_big_or(VALUE x, VALUE y)
zds = BDIGITS(z);
for (i=0; i<n1; i++) {
- zds[i] = ds1[i] | ds2[i];
+ zds[i] = ds1[i] | ds2[i];
}
for (; i<n2; i++) {
- zds[i] = hibits1 | ds2[i];
+ zds[i] = hibits1 | ds2[i];
}
twocomp2abs_bang(z, hibits1 || hibits2);
RB_GC_GUARD(x);
@@ -6601,12 +6643,6 @@ bigxor_int(VALUE x, long xn, BDIGIT hibitsx, long y)
RB_GC_GUARD(x);
return bignorm(z);
}
-/*
- * call-seq:
- * big ^ numeric -> integer
- *
- * Performs bitwise +exclusive or+ between _big_ and _numeric_.
- */
VALUE
rb_big_xor(VALUE x, VALUE y)
@@ -6620,13 +6656,13 @@ rb_big_xor(VALUE x, VALUE y)
BDIGIT tmph;
long tmpn;
- if (!FIXNUM_P(y) && !RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bit(x, y, '^');
+ if (!RB_INTEGER_TYPE_P(y)) {
+ return rb_num_coerce_bit(x, y, '^');
}
hibitsx = abs2twocomp(&x, &xn);
if (FIXNUM_P(y)) {
- return bigxor_int(x, xn, hibitsx, FIX2LONG(y));
+ return bigxor_int(x, xn, hibitsx, FIX2LONG(y));
}
hibitsy = abs2twocomp(&y, &yn);
if (xn > yn) {
@@ -6645,10 +6681,10 @@ rb_big_xor(VALUE x, VALUE y)
zds = BDIGITS(z);
for (i=0; i<n1; i++) {
- zds[i] = ds1[i] ^ ds2[i];
+ zds[i] = ds1[i] ^ ds2[i];
}
for (; i<n2; i++) {
- zds[i] = hibitsx ^ ds2[i];
+ zds[i] = hibitsx ^ ds2[i];
}
twocomp2abs_bang(z, (hibits1 ^ hibits2) != 0);
RB_GC_GUARD(x);
@@ -6656,13 +6692,6 @@ rb_big_xor(VALUE x, VALUE y)
return bignorm(z);
}
-/*
- * call-seq:
- * big << numeric -> integer
- *
- * Shifts big left _numeric_ positions (right if _numeric_ is negative).
- */
-
VALUE
rb_big_lshift(VALUE x, VALUE y)
{
@@ -6671,36 +6700,28 @@ rb_big_lshift(VALUE x, VALUE y)
int shift_numbits;
for (;;) {
- if (FIXNUM_P(y)) {
- long l = FIX2LONG(y);
+ if (FIXNUM_P(y)) {
+ long l = FIX2LONG(y);
unsigned long shift;
- if (0 <= l) {
- lshift_p = 1;
+ if (0 <= l) {
+ lshift_p = 1;
shift = l;
}
else {
- lshift_p = 0;
- shift = 1+(unsigned long)(-(l+1));
- }
+ lshift_p = 0;
+ shift = 1+(unsigned long)(-(l+1));
+ }
shift_numbits = (int)(shift & (BITSPERDIG-1));
shift_numdigits = shift >> bit_length(BITSPERDIG-1);
return bignorm(big_shift3(x, lshift_p, shift_numdigits, shift_numbits));
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
+ }
+ else if (RB_BIGNUM_TYPE_P(y)) {
return bignorm(big_shift2(x, 1, y));
- }
- y = rb_to_int(y);
+ }
+ y = rb_to_int(y);
}
}
-
-/*
- * call-seq:
- * big >> numeric -> integer
- *
- * Shifts big right _numeric_ positions (left if _numeric_ is negative).
- */
-
VALUE
rb_big_rshift(VALUE x, VALUE y)
{
@@ -6709,8 +6730,8 @@ rb_big_rshift(VALUE x, VALUE y)
int shift_numbits;
for (;;) {
- if (FIXNUM_P(y)) {
- long l = FIX2LONG(y);
+ if (FIXNUM_P(y)) {
+ long l = FIX2LONG(y);
unsigned long shift;
if (0 <= l) {
lshift_p = 0;
@@ -6718,39 +6739,20 @@ rb_big_rshift(VALUE x, VALUE y)
}
else {
lshift_p = 1;
- shift = 1+(unsigned long)(-(l+1));
- }
+ shift = 1+(unsigned long)(-(l+1));
+ }
shift_numbits = (int)(shift & (BITSPERDIG-1));
shift_numdigits = shift >> bit_length(BITSPERDIG-1);
return bignorm(big_shift3(x, lshift_p, shift_numdigits, shift_numbits));
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
+ }
+ else if (RB_BIGNUM_TYPE_P(y)) {
return bignorm(big_shift2(x, 0, y));
- }
- y = rb_to_int(y);
+ }
+ y = rb_to_int(y);
}
}
-/*
- * call-seq:
- * big[n] -> 0, 1
- *
- * Bit Reference---Returns the <em>n</em>th bit in the (assumed) binary
- * representation of <i>big</i>, where <i>big</i>[0] is the least
- * significant bit.
- *
- * a = 9**15
- * 50.downto(0) do |n|
- * print a[n]
- * end
- *
- * <em>produces:</em>
- *
- * 000101110110100000111000011110010100111100010111001
- *
- */
-
-static VALUE
+VALUE
rb_big_aref(VALUE x, VALUE y)
{
BDIGIT *xds;
@@ -6760,29 +6762,29 @@ rb_big_aref(VALUE x, VALUE y)
BDIGIT bit;
if (RB_BIGNUM_TYPE_P(y)) {
- if (!BIGNUM_SIGN(y))
- return INT2FIX(0);
- bigtrunc(y);
- if (BIGSIZE(y) > sizeof(size_t)) {
- out_of_range:
- return BIGNUM_SIGN(x) ? INT2FIX(0) : INT2FIX(1);
- }
+ if (BIGNUM_NEGATIVE_P(y))
+ return INT2FIX(0);
+ bigtrunc(y);
+ if (BIGSIZE(y) > sizeof(size_t)) {
+ return BIGNUM_SIGN(x) ? INT2FIX(0) : INT2FIX(1);
+ }
#if SIZEOF_SIZE_T <= SIZEOF_LONG
- shift = big2ulong(y, "long");
+ shift = big2ulong(y, "long");
#else
- shift = big2ull(y, "long long");
+ shift = big2ull(y, "long long");
#endif
}
else {
- l = NUM2LONG(y);
- if (l < 0) return INT2FIX(0);
- shift = (size_t)l;
+ l = NUM2LONG(y);
+ if (l < 0) return INT2FIX(0);
+ shift = (size_t)l;
}
s1 = shift/BITSPERDIG;
s2 = shift%BITSPERDIG;
bit = (BDIGIT)1 << s2;
- if (s1 >= BIGNUM_LEN(x)) goto out_of_range;
+ if (s1 >= BIGNUM_LEN(x))
+ return BIGNUM_SIGN(x) ? INT2FIX(0) : INT2FIX(1);
xds = BDIGITS(x);
if (BIGNUM_POSITIVE_P(x))
@@ -6795,128 +6797,139 @@ rb_big_aref(VALUE x, VALUE y)
return (xds[s1] & bit) ? INT2FIX(1) : INT2FIX(0);
}
-/*
- * call-seq:
- * big.hash -> fixnum
- *
- * Compute a hash based on the value of _big_.
- *
- * See also Object#hash.
- */
+VALUE
+rb_big_aref2(VALUE x, VALUE beg, VALUE len)
+{
+ BDIGIT *xds, *vds;
+ VALUE v;
+ size_t copy_begin, xn, shift;
+ ssize_t begin, length, end;
+ bool negative_add_one;
+
+ beg = rb_to_int(beg);
+ len = rb_to_int(len);
+ length = NUM2SSIZET(len);
+ begin = NUM2SSIZET(beg);
+ end = NUM2SSIZET(rb_int_plus(beg, len));
+ shift = begin < 0 ? -begin : 0;
+ xn = BIGNUM_LEN(x);
+ xds = BDIGITS(x);
-static VALUE
+ if (length < 0) return rb_big_rshift(x, beg);
+ if (length == 0 || end <= 0) return INT2FIX(0);
+ if (begin < 0) begin = 0;
+
+ if ((size_t)(end - 1) / BITSPERDIG >= xn) {
+ /* end > xn * BITSPERDIG */
+ end = xn * BITSPERDIG;
+ }
+
+ if ((size_t)begin / BITSPERDIG < xn) {
+ /* begin < xn * BITSPERDIG */
+ size_t shift_bits, copy_end;
+ copy_begin = begin / BITSPERDIG;
+ shift_bits = begin % BITSPERDIG;
+ copy_end = (end - 1) / BITSPERDIG + 1;
+ v = bignew(copy_end - copy_begin, 1);
+ vds = BDIGITS(v);
+ MEMCPY(vds, xds + copy_begin, BDIGIT, copy_end - copy_begin);
+ negative_add_one = (vds[0] & ((1 << shift_bits) - 1)) == 0;
+ v = bignorm(v);
+ if (shift_bits) v = rb_int_rshift(v, SIZET2NUM(shift_bits));
+ }
+ else {
+ /* Out of range */
+ v = INT2FIX(0);
+ negative_add_one = false;
+ copy_begin = begin = end = 0;
+ }
+
+ if (BIGNUM_NEGATIVE_P(x)) {
+ size_t mask_size = length - shift;
+ VALUE mask = rb_int_minus(rb_int_lshift(INT2FIX(1), SIZET2NUM(mask_size)), INT2FIX(1));
+ v = rb_int_xor(v, mask);
+ for (size_t i = 0; negative_add_one && i < copy_begin; i++) {
+ if (xds[i]) negative_add_one = false;
+ }
+ if (negative_add_one) v = rb_int_plus(v, INT2FIX(1));
+ v = rb_int_and(v, mask);
+ }
+ else {
+ size_t mask_size = (size_t)end - begin;
+ VALUE mask = rb_int_minus(rb_int_lshift(INT2FIX(1), SIZET2NUM(mask_size)), INT2FIX(1));
+ v = rb_int_and(v, mask);
+ }
+ RB_GC_GUARD(x);
+ if (shift) v = rb_int_lshift(v, SSIZET2NUM(shift));
+ return v;
+}
+
+VALUE
rb_big_hash(VALUE x)
{
st_index_t hash;
hash = rb_memhash(BDIGITS(x), sizeof(BDIGIT)*BIGNUM_LEN(x)) ^ BIGNUM_SIGN(x);
- return INT2FIX(hash);
+ return ST2FIX(hash);
}
/*
* call-seq:
- * big.coerce(numeric) -> array
+ * int.coerce(numeric) -> array
*
- * Returns an array with both a +numeric+ and a +big+ represented as Bignum
- * objects.
+ * Returns an array with both a +numeric+ and a +int+ represented as
+ * Integer objects or Float objects.
*
- * This is achieved by converting +numeric+ to a Bignum.
+ * This is achieved by converting +numeric+ to an Integer or a Float.
*
- * A TypeError is raised if the +numeric+ is not a Fixnum or Bignum type.
+ * A TypeError is raised if the +numeric+ is not an Integer or a Float
+ * type.
*
* (0x3FFFFFFFFFFFFFFF+1).coerce(42) #=> [42, 4611686018427387904]
*/
static VALUE
-rb_big_coerce(VALUE x, VALUE y)
+rb_int_coerce(VALUE x, VALUE y)
{
- if (FIXNUM_P(y)) {
- y = rb_int2big(FIX2LONG(y));
+ if (RB_INTEGER_TYPE_P(y)) {
+ return rb_assoc_new(y, x);
}
- else if (!RB_BIGNUM_TYPE_P(y)) {
- rb_raise(rb_eTypeError, "can't coerce %"PRIsVALUE" to Bignum",
- rb_obj_class(y));
+ else {
+ x = rb_Float(x);
+ y = rb_Float(y);
+ return rb_assoc_new(y, x);
}
- return rb_assoc_new(y, x);
}
-/*
- * call-seq:
- * big.abs -> aBignum
- * big.magnitude -> aBignum
- *
- * Returns the absolute value of <i>big</i>.
- *
- * -1234567890987654321.abs #=> 1234567890987654321
- */
-
-static VALUE
+VALUE
rb_big_abs(VALUE x)
{
- if (!BIGNUM_SIGN(x)) {
- x = rb_big_clone(x);
- BIGNUM_SET_SIGN(x, 1);
+ if (BIGNUM_NEGATIVE_P(x)) {
+ x = rb_big_clone(x);
+ BIGNUM_SET_POSITIVE_SIGN(x);
}
return x;
}
-/*
- * call-seq:
- * big.size -> integer
- *
- * Returns the number of bytes in the machine representation of
- * <i>big</i>.
- *
- * (256**10 - 1).size #=> 12
- * (256**20 - 1).size #=> 20
- * (256**40 - 1).size #=> 40
- */
+int
+rb_big_sign(VALUE x)
+{
+ return BIGNUM_SIGN(x);
+}
-static VALUE
+size_t
rb_big_size(VALUE big)
{
- return SIZET2NUM(BIGSIZE(big));
+ return BIGSIZE(big);
}
-/*
- * call-seq:
- * int.bit_length -> integer
- *
- * Returns the number of bits of the value of <i>int</i>.
- *
- * "the number of bits" means that
- * the bit position of the highest bit which is different to the sign bit.
- * (The bit position of the bit 2**n is n+1.)
- * If there is no such bit (zero or minus one), zero is returned.
- *
- * I.e. This method returns ceil(log2(int < 0 ? -int : int+1)).
- *
- * (-2**10000-1).bit_length #=> 10001
- * (-2**10000).bit_length #=> 10000
- * (-2**10000+1).bit_length #=> 10000
- *
- * (-2**1000-1).bit_length #=> 1001
- * (-2**1000).bit_length #=> 1000
- * (-2**1000+1).bit_length #=> 1000
- *
- * (2**1000-1).bit_length #=> 1000
- * (2**1000).bit_length #=> 1001
- * (2**1000+1).bit_length #=> 1001
- *
- * (2**10000-1).bit_length #=> 10000
- * (2**10000).bit_length #=> 10001
- * (2**10000+1).bit_length #=> 10001
- *
- * This method can be used to detect overflow in Array#pack as follows.
- *
- * if n.bit_length < 32
- * [n].pack("l") # no overflow
- * else
- * raise "overflow"
- * end
- */
+VALUE
+rb_big_size_m(VALUE big)
+{
+ return SIZET2NUM(rb_big_size(big));
+}
-static VALUE
+VALUE
rb_big_bit_length(VALUE big)
{
int nlz_bits;
@@ -6957,36 +6970,275 @@ rb_big_bit_length(VALUE big)
INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER);
}
+VALUE
+rb_big_odd_p(VALUE num)
+{
+ return RBOOL(BIGNUM_LEN(num) != 0 && BDIGITS(num)[0] & 1);
+}
+
+VALUE
+rb_big_even_p(VALUE num)
+{
+ if (BIGNUM_LEN(num) != 0 && BDIGITS(num)[0] & 1) {
+ return Qfalse;
+ }
+ return Qtrue;
+}
+
+unsigned long rb_ulong_isqrt(unsigned long);
+#if SIZEOF_BDIGIT*2 > SIZEOF_LONG
+BDIGIT rb_bdigit_dbl_isqrt(BDIGIT_DBL);
+# ifdef ULL_TO_DOUBLE
+# define BDIGIT_DBL_TO_DOUBLE(n) ULL_TO_DOUBLE(n)
+# endif
+#else
+# define rb_bdigit_dbl_isqrt(x) (BDIGIT)rb_ulong_isqrt(x)
+#endif
+#ifndef BDIGIT_DBL_TO_DOUBLE
+# define BDIGIT_DBL_TO_DOUBLE(n) (double)(n)
+#endif
+
+VALUE
+rb_big_isqrt(VALUE n)
+{
+ BDIGIT *nds = BDIGITS(n);
+ size_t len = BIGNUM_LEN(n);
+
+ if (len <= 2) {
+ BDIGIT sq = rb_bdigit_dbl_isqrt(bary2bdigitdbl(nds, len));
+#if SIZEOF_BDIGIT > SIZEOF_LONG
+ return ULL2NUM(sq);
+#else
+ return ULONG2NUM(sq);
+#endif
+ }
+ else {
+ size_t shift = FIX2LONG(rb_big_bit_length(n)) / 4;
+ VALUE n2 = rb_int_rshift(n, SIZET2NUM(2 * shift));
+ VALUE x = FIXNUM_P(n2) ? LONG2FIX(rb_ulong_isqrt(FIX2ULONG(n2))) : rb_big_isqrt(n2);
+ /* x = (x+n/x)/2 */
+ x = rb_int_plus(rb_int_lshift(x, SIZET2NUM(shift - 1)), rb_int_idiv(rb_int_rshift(n, SIZET2NUM(shift + 1)), x));
+ VALUE xx = rb_int_mul(x, x);
+ while (rb_int_gt(xx, n)) {
+ xx = rb_int_minus(xx, rb_int_minus(rb_int_plus(x, x), INT2FIX(1)));
+ x = rb_int_minus(x, INT2FIX(1));
+ }
+ return x;
+ }
+}
+
+#if USE_GMP
+static void
+bary_powm_gmp(BDIGIT *zds, size_t zn, const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn, const BDIGIT *mds, size_t mn)
+{
+ mpz_t z, x, y, m;
+ size_t count;
+ mpz_init(x);
+ mpz_init(y);
+ mpz_init(m);
+ mpz_init(z);
+ bdigits_to_mpz(x, xds, xn);
+ bdigits_to_mpz(y, yds, yn);
+ bdigits_to_mpz(m, mds, mn);
+ mpz_powm(z, x, y, m);
+ bdigits_from_mpz(z, zds, &count);
+ BDIGITS_ZERO(zds+count, zn-count);
+ mpz_clear(x);
+ mpz_clear(y);
+ mpz_clear(m);
+ mpz_clear(z);
+}
+#endif
+
+static VALUE
+int_pow_tmp3(VALUE x, VALUE y, VALUE m, int nega_flg)
+{
+#if USE_GMP
+ VALUE z;
+ size_t xn, yn, mn, zn;
+
+ if (FIXNUM_P(x)) {
+ x = rb_int2big(FIX2LONG(x));
+ }
+ if (FIXNUM_P(y)) {
+ y = rb_int2big(FIX2LONG(y));
+ }
+ RUBY_ASSERT(RB_BIGNUM_TYPE_P(m));
+ xn = BIGNUM_LEN(x);
+ yn = BIGNUM_LEN(y);
+ mn = BIGNUM_LEN(m);
+ zn = mn;
+ z = bignew(zn, 1);
+ bary_powm_gmp(BDIGITS(z), zn, BDIGITS(x), xn, BDIGITS(y), yn, BDIGITS(m), mn);
+ if (nega_flg && BIGNUM_POSITIVE_P(z) && !BIGZEROP(z)) {
+ z = rb_big_minus(z, m);
+ }
+ RB_GC_GUARD(x);
+ RB_GC_GUARD(y);
+ RB_GC_GUARD(m);
+ return rb_big_norm(z);
+#else
+ VALUE tmp = LONG2FIX(1L);
+ long yy;
+
+ for (/*NOP*/; ! FIXNUM_P(y); y = rb_big_rshift(y, LONG2FIX(1L))) {
+ if (RTEST(rb_int_odd_p(y))) {
+ tmp = rb_int_mul(tmp, x);
+ tmp = rb_int_modulo(tmp, m);
+ }
+ x = rb_int_mul(x, x);
+ x = rb_int_modulo(x, m);
+ }
+ for (yy = FIX2LONG(y); yy; yy >>= 1L) {
+ if (yy & 1L) {
+ tmp = rb_int_mul(tmp, x);
+ tmp = rb_int_modulo(tmp, m);
+ }
+ x = rb_int_mul(x, x);
+ x = rb_int_modulo(x, m);
+ }
+
+ if (nega_flg && rb_int_positive_p(tmp) && !rb_int_zero_p(tmp)) {
+ tmp = rb_int_minus(tmp, m);
+ }
+ return tmp;
+#endif
+}
+
/*
- * call-seq:
- * big.odd? -> true or false
- *
- * Returns <code>true</code> if <i>big</i> is an odd number.
+ * Integer#pow
*/
static VALUE
-rb_big_odd_p(VALUE num)
+int_pow_tmp1(VALUE x, VALUE y, long mm, int nega_flg)
{
- if (BIGNUM_LEN(num) != 0 && BDIGITS(num)[0] & 1) {
- return Qtrue;
+ long xx = FIX2LONG(x);
+ long tmp = 1L;
+ long yy;
+
+ for (/*NOP*/; ! FIXNUM_P(y); y = rb_big_rshift(y, LONG2FIX(1L))) {
+ if (RTEST(rb_int_odd_p(y))) {
+ tmp = (tmp * xx) % mm;
+ }
+ xx = (xx * xx) % mm;
}
- return Qfalse;
+ for (yy = FIX2LONG(y); yy; yy >>= 1L) {
+ if (yy & 1L) {
+ tmp = (tmp * xx) % mm;
+ }
+ xx = (xx * xx) % mm;
+ }
+
+ if (nega_flg && tmp) {
+ tmp -= mm;
+ }
+ return LONG2FIX(tmp);
+}
+
+static VALUE
+int_pow_tmp2(VALUE x, VALUE y, long mm, int nega_flg)
+{
+ long tmp = 1L;
+ long yy;
+#ifdef DLONG
+ const DLONG m = mm;
+ long tmp2 = tmp;
+ long xx = FIX2LONG(x);
+# define MUL_MODULO(a, b, c) (long)(((DLONG)(a) * (DLONG)(b)) % (c))
+#else
+ const VALUE m = LONG2FIX(mm);
+ VALUE tmp2 = LONG2FIX(tmp);
+ VALUE xx = x;
+# define MUL_MODULO(a, b, c) rb_int_modulo(rb_fix_mul_fix((a), (b)), (c))
+#endif
+
+ for (/*NOP*/; ! FIXNUM_P(y); y = rb_big_rshift(y, LONG2FIX(1L))) {
+ if (RTEST(rb_int_odd_p(y))) {
+ tmp2 = MUL_MODULO(tmp2, xx, m);
+ }
+ xx = MUL_MODULO(xx, xx, m);
+ }
+ for (yy = FIX2LONG(y); yy; yy >>= 1L) {
+ if (yy & 1L) {
+ tmp2 = MUL_MODULO(tmp2, xx, m);
+ }
+ xx = MUL_MODULO(xx, xx, m);
+ }
+
+#ifdef DLONG
+ tmp = tmp2;
+#else
+ tmp = FIX2LONG(tmp2);
+#endif
+ if (nega_flg && tmp) {
+ tmp -= mm;
+ }
+ return LONG2FIX(tmp);
}
/*
- * call-seq:
- * big.even? -> true or false
+ * Document-method: Integer#pow
+ * call-seq:
+ * integer.pow(numeric) -> numeric
+ * integer.pow(integer, integer) -> integer
+ *
+ * Returns (modular) exponentiation as:
*
- * Returns <code>true</code> if <i>big</i> is an even number.
+ * a.pow(b) #=> same as a**b
+ * a.pow(b, m) #=> same as (a**b) % m, but avoids huge temporary values
*/
-
-static VALUE
-rb_big_even_p(VALUE num)
+VALUE
+rb_int_powm(int const argc, VALUE * const argv, VALUE const num)
{
- if (BIGNUM_LEN(num) != 0 && BDIGITS(num)[0] & 1) {
- return Qfalse;
+ rb_check_arity(argc, 1, 2);
+
+ if (argc == 1) {
+ return rb_int_pow(num, argv[0]);
}
- return Qtrue;
+ else {
+ VALUE const a = num;
+ VALUE const b = argv[0];
+ VALUE m = argv[1];
+ int nega_flg = 0;
+ if ( ! RB_INTEGER_TYPE_P(b)) {
+ rb_raise(rb_eTypeError, "Integer#pow() 2nd argument not allowed unless a 1st argument is integer");
+ }
+ if (rb_int_negative_p(b)) {
+ rb_raise(rb_eRangeError, "Integer#pow() 1st argument cannot be negative when 2nd argument specified");
+ }
+ if (!RB_INTEGER_TYPE_P(m)) {
+ rb_raise(rb_eTypeError, "Integer#pow() 2nd argument not allowed unless all arguments are integers");
+ }
+
+ if (rb_int_zero_p(a) && !rb_int_zero_p(b)) {
+ /* shortcut; 0**x => 0 except for x == 0 */
+ return INT2FIX(0);
+ }
+
+ if (rb_int_negative_p(m)) {
+ m = rb_int_uminus(m);
+ nega_flg = 1;
+ }
+
+ if (FIXNUM_P(m)) {
+ long const half_val = (long)HALF_LONG_MSB;
+ long const mm = FIX2LONG(m);
+ if (!mm) rb_num_zerodiv();
+ if (mm == 1) return INT2FIX(0);
+ if (mm <= half_val) {
+ return int_pow_tmp1(rb_int_modulo(a, m), b, mm, nega_flg);
+ }
+ else {
+ return int_pow_tmp2(rb_int_modulo(a, m), b, mm, nega_flg);
+ }
+ }
+ else {
+ if (rb_bigzero_p(m)) rb_num_zerodiv();
+ if (bignorm(m) == INT2FIX(1)) return INT2FIX(0);
+ return int_pow_tmp3(rb_int_modulo(a, m), b, m, nega_flg);
+ }
+ }
+ UNREACHABLE_RETURN(Qnil);
}
/*
@@ -7010,51 +7262,11 @@ rb_big_even_p(VALUE num)
void
Init_Bignum(void)
{
- rb_cBignum = rb_define_class("Bignum", rb_cInteger);
-
- rb_define_method(rb_cBignum, "to_s", rb_big_to_s, -1);
- rb_define_alias(rb_cBignum, "inspect", "to_s");
- rb_define_method(rb_cBignum, "coerce", rb_big_coerce, 1);
- rb_define_method(rb_cBignum, "-@", rb_big_uminus, 0);
- rb_define_method(rb_cBignum, "+", rb_big_plus, 1);
- rb_define_method(rb_cBignum, "-", rb_big_minus, 1);
- rb_define_method(rb_cBignum, "*", rb_big_mul, 1);
- rb_define_method(rb_cBignum, "/", rb_big_div, 1);
- rb_define_method(rb_cBignum, "%", rb_big_modulo, 1);
- rb_define_method(rb_cBignum, "div", rb_big_idiv, 1);
- rb_define_method(rb_cBignum, "divmod", rb_big_divmod, 1);
- rb_define_method(rb_cBignum, "modulo", rb_big_modulo, 1);
- rb_define_method(rb_cBignum, "remainder", rb_big_remainder, 1);
- rb_define_method(rb_cBignum, "fdiv", rb_big_fdiv, 1);
- rb_define_method(rb_cBignum, "**", rb_big_pow, 1);
- rb_define_method(rb_cBignum, "&", rb_big_and, 1);
- rb_define_method(rb_cBignum, "|", rb_big_or, 1);
- rb_define_method(rb_cBignum, "^", rb_big_xor, 1);
- rb_define_method(rb_cBignum, "~", rb_big_neg, 0);
- rb_define_method(rb_cBignum, "<<", rb_big_lshift, 1);
- rb_define_method(rb_cBignum, ">>", rb_big_rshift, 1);
- rb_define_method(rb_cBignum, "[]", rb_big_aref, 1);
-
- rb_define_method(rb_cBignum, "<=>", rb_big_cmp, 1);
- rb_define_method(rb_cBignum, "==", rb_big_eq, 1);
- rb_define_method(rb_cBignum, ">", big_gt, 1);
- rb_define_method(rb_cBignum, ">=", big_ge, 1);
- rb_define_method(rb_cBignum, "<", big_lt, 1);
- rb_define_method(rb_cBignum, "<=", big_le, 1);
- rb_define_method(rb_cBignum, "===", rb_big_eq, 1);
- rb_define_method(rb_cBignum, "eql?", rb_big_eql, 1);
- rb_define_method(rb_cBignum, "hash", rb_big_hash, 0);
- rb_define_method(rb_cBignum, "to_f", rb_big_to_f, 0);
- rb_define_method(rb_cBignum, "abs", rb_big_abs, 0);
- rb_define_method(rb_cBignum, "magnitude", rb_big_abs, 0);
- rb_define_method(rb_cBignum, "size", rb_big_size, 0);
- rb_define_method(rb_cBignum, "bit_length", rb_big_bit_length, 0);
- rb_define_method(rb_cBignum, "odd?", rb_big_odd_p, 0);
- rb_define_method(rb_cBignum, "even?", rb_big_even_p, 0);
-
-#ifdef USE_GMP
+ rb_define_method(rb_cInteger, "coerce", rb_int_coerce, 1);
+
+#if USE_GMP
/* The version of loaded GMP. */
- rb_define_const(rb_cBignum, "GMP_VERSION", rb_sprintf("GMP %s", gmp_version));
+ rb_define_const(rb_cInteger, "GMP_VERSION", rb_sprintf("GMP %s", gmp_version));
#endif
power_cache_init();
diff --git a/bin/erb b/bin/erb
deleted file mode 100755
index 6a88c3b26a..0000000000
--- a/bin/erb
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/env ruby
-# Tiny eRuby --- ERB2
-# Copyright (c) 1999-2000,2002 Masatoshi SEKI
-# You can redistribute it and/or modify it under the same terms as Ruby.
-
-require 'erb'
-
-class ERB
- module Main
- def ARGV.switch
- return nil if self.empty?
- arg = self.shift
- return nil if arg == '--'
- case arg
- when /\A-(.)(.*)/
- if $1 == '-'
- arg, @maybe_arg = arg.split(/=/, 2)
- return arg
- end
- raise 'unknown switch "-"' if $2[0] == ?- and $1 != 'T'
- if $2.size > 0
- self.unshift "-#{$2}"
- @maybe_arg = $2
- else
- @maybe_arg = nil
- end
- "-#{$1}"
- when /\A(\w+)=/
- arg
- else
- self.unshift arg
- nil
- end
- end
-
- def ARGV.req_arg
- (@maybe_arg || self.shift || raise('missing argument')).tap {
- @maybe_arg = nil
- }
- end
-
- def trim_mode_opt(trim_mode, disable_percent)
- return trim_mode if disable_percent
- case trim_mode
- when 0
- return '%'
- when 1
- return '%>'
- when 2
- return '%<>'
- when '-'
- return '%-'
- end
- end
- module_function :trim_mode_opt
-
- def run(factory=ERB)
- trim_mode = 0
- disable_percent = false
- variables = {}
- begin
- while switch = ARGV.switch
- case switch
- when '-x' # ruby source
- output = true
- when '-n' # line number
- number = true
- when '-v' # verbose
- $VERBOSE = true
- when '--version' # version
- STDERR.puts factory.version
- exit
- when '-d', '--debug' # debug
- $DEBUG = true
- when '-r' # require
- require ARGV.req_arg
- when '-S' # security level
- arg = ARGV.req_arg
- raise "invalid safe_level #{arg.dump}" unless arg =~ /\A[0-1]\z/
- safe_level = arg.to_i
- when '-T' # trim mode
- arg = ARGV.req_arg
- if arg == '-'
- trim_mode = arg
- next
- end
- raise "invalid trim mode #{arg.dump}" unless arg =~ /\A[0-2]\z/
- trim_mode = arg.to_i
- when '-E', '--encoding'
- arg = ARGV.req_arg
- set_encoding(*arg.split(/:/, 2))
- when '-U'
- set_encoding(Encoding::UTF_8, Encoding::UTF_8)
- when '-P'
- disable_percent = true
- when '--help'
- raise "print this help"
- when /\A-/
- raise "unknown switch #{switch.dump}"
- else
- var, val = *switch.split('=', 2)
- (variables ||= {})[var] = val
- end
- end
- rescue # usage
- STDERR.puts $!.to_s
- STDERR.puts File.basename($0) +
- " [switches] [var=value...] [inputfile]"
- STDERR.puts <<EOU
- -x print ruby script
- -n print ruby script with line number
- -v enable verbose mode
- -d set $DEBUG to true
- -r library load a library
- -S safe_level set $SAFE (0..1)
- -E ex[:in] set default external/internal encodings
- -U set default encoding to UTF-8.
- -T trim_mode specify trim_mode (0..2, -)
- -P ignore lines which start with "%"
- var=value set variable
-EOU
- exit 1
- end
-
- $<.set_encoding(Encoding::ASCII_8BIT, nil)
- src = $<.read
- filename = $FILENAME
- exit 2 unless src
- trim = trim_mode_opt(trim_mode, disable_percent)
- erb = factory.new(src.untaint, safe_level, trim)
- erb.filename = filename
- if output
- if number
- erb.src.each_line.with_index do |line, l|
- puts "%3d %s"%[l+1, line]
- end
- else
- puts erb.src
- end
- else
- bind = TOPLEVEL_BINDING.taint
- if variables
- enc = erb.encoding
- for var, val in variables do
- val = val.encode(enc) if val
- bind.local_variable_set(var, val)
- end
- end
- erb.run(bind)
- end
- end
- module_function :run
-
- def set_encoding(extern, intern = nil)
- verbose, $VERBOSE = $VERBOSE, nil
- Encoding.default_external = extern unless extern.nil? || extern == ""
- Encoding.default_internal = intern unless intern.nil? || intern == ""
- [$stdin, $stdout, $stderr].each do |io|
- io.set_encoding(extern, intern)
- end
- ensure
- $VERBOSE = verbose
- end
- module_function :set_encoding
- class << self; private :set_encoding; end
- end
-end
-
-if __FILE__ == $0
- ERB::Main.run
-end
diff --git a/bin/gem b/bin/gem
index a4ec754abb..3ac1d9e623 100755
--- a/bin/gem
+++ b/bin/gem
@@ -1,25 +1,12 @@
#!/usr/bin/env ruby
+# frozen_string_literal: true
+
#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++
-require 'rubygems'
-require 'rubygems/gem_runner'
-require 'rubygems/exceptions'
-
-required_version = Gem::Requirement.new ">= 1.8.7"
-
-unless required_version.satisfied_by? Gem.ruby_version then
- abort "Expected Ruby Version #{required_version}, is #{Gem.ruby_version}"
-end
-
-args = ARGV.clone
-
-begin
- Gem::GemRunner.new.run args
-rescue Gem::SystemExitException => e
- exit e.exit_code
-end
+require "rubygems/gem_runner"
+Gem::GemRunner.new.run ARGV.clone
diff --git a/bin/irb b/bin/irb
deleted file mode 100755
index c64ee85fbd..0000000000
--- a/bin/irb
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env ruby
-#
-# irb.rb - interactive ruby
-# $Release Version: 0.9.6 $
-# $Revision$
-# by Keiju ISHITSUKA(keiju@ruby-lang.org)
-#
-
-require "irb"
-
-IRB.start(__FILE__)
diff --git a/bin/rdoc b/bin/rdoc
deleted file mode 100755
index aaa23292df..0000000000
--- a/bin/rdoc
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env ruby
-#
-# RDoc: Documentation tool for source code
-# (see lib/rdoc/rdoc.rb for more information)
-#
-# Copyright (c) 2003 Dave Thomas
-# Released under the same terms as Ruby
-
-begin
- gem 'rdoc'
-rescue NameError => e # --disable-gems
- raise unless e.name == :gem
-rescue Gem::LoadError
-end
-
-require 'rdoc/rdoc'
-
-begin
- r = RDoc::RDoc.new
- r.document ARGV
-rescue Errno::ENOSPC
- $stderr.puts 'Ran out of space creating documentation'
- $stderr.puts
- $stderr.puts 'Please free up some space and try again'
-rescue SystemExit
- raise
-rescue Exception => e
- if $DEBUG_RDOC then
- $stderr.puts e.message
- $stderr.puts "#{e.backtrace.join "\n\t"}"
- $stderr.puts
- elsif Interrupt === e then
- $stderr.puts
- $stderr.puts 'Interrupted'
- else
- $stderr.puts "uh-oh! RDoc had a problem:"
- $stderr.puts e.message
- $stderr.puts
- $stderr.puts "run with --debug for full backtrace"
- end
-
- exit 1
-end
-
diff --git a/bin/ri b/bin/ri
deleted file mode 100755
index 7fbed0c099..0000000000
--- a/bin/ri
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env ruby
-
-begin
- gem 'rdoc'
-rescue NameError => e # --disable-gems
- raise unless e.name == :gem
-rescue Gem::LoadError
-end
-
-require 'rdoc/ri/driver'
-
-RDoc::RI::Driver.run ARGV
diff --git a/bootstraptest/pending.rb b/bootstraptest/pending.rb
index 744c0adac1..2c4b85a419 100644
--- a/bootstraptest/pending.rb
+++ b/bootstraptest/pending.rb
@@ -1,19 +1,3 @@
-assert_equal 'A', %q{
- class A
- @@a = 'A'
- def a=(x)
- @@a = x
- end
- def a
- @@a
- end
- end
-
- B = A.dup
- B.new.a = 'B'
- A.new.a
-}, '[ruby-core:17019]'
-
assert_equal 'ok', %q{
def m
lambda{
@@ -31,9 +15,7 @@ assert_equal 'ok', %q{
end
}
-assert_normal_exit %q{
- r = Range.allocate
- def r.<=>(o) true end
- r.instance_eval { initialize r, r }
- r.inspect
+# This randomly fails on mswin.
+assert_equal %q{[]}, %q{
+ Thread.new{sleep}.backtrace
}
diff --git a/bootstraptest/runner.rb b/bootstraptest/runner.rb
index 5eb468a338..04de0c93b9 100755
--- a/bootstraptest/runner.rb
+++ b/bootstraptest/runner.rb
@@ -1,4 +1,4 @@
-"exec" "${RUBY-ruby}" "-x" "$0" "$@" || true # -*- mode: ruby; coding: utf-8 -*-
+"exec" "${RUBY-ruby}" "-x" "$0" "$@" || true # -*- Ruby -*-
#!./ruby
# $Id$
@@ -7,6 +7,8 @@
# Never use test/unit in this file.
# Never use Ruby extensions in this file.
+$start_time = Time.now
+
begin
require 'fileutils'
require 'tmpdir'
@@ -14,6 +16,7 @@ rescue LoadError
$:.unshift File.join(File.dirname(__FILE__), '../lib')
retry
end
+require_relative '../tool/lib/test/jobserver'
if !Dir.respond_to?(:mktmpdir)
# copied from lib/tmpdir.rb
@@ -57,23 +60,99 @@ if !Dir.respond_to?(:mktmpdir)
end
end
+# Configuration
+bt = Struct.new(:ruby,
+ :verbose,
+ :color,
+ :tty,
+ :quiet,
+ :wn,
+ :progress,
+ :progress_bs,
+ :passed,
+ :failed,
+ :reset,
+ :columns,
+ :window_width,
+ :width,
+ :indent,
+ :platform,
+ :timeout,
+ :timeout_scale,
+ :launchable_test_reports
+ )
+BT = Class.new(bt) do
+ def indent=(n)
+ super
+ if (self.columns ||= 0) < n
+ $stderr.print(' ' * (n - self.columns))
+ end
+ self.columns = indent
+ end
+
+ def putc(c)
+ unless self.quiet
+ if self.window_width == nil
+ unless w = ENV["COLUMNS"] and (w = w.to_i) > 0
+ w = 80
+ end
+ w -= 1
+ self.window_width = w
+ end
+ if self.window_width and self.columns >= self.window_width
+ $stderr.print "\n", " " * (self.indent ||= 0)
+ self.columns = indent
+ end
+ $stderr.print c
+ $stderr.flush
+ self.columns += 1
+ end
+ end
+
+ def wn=(wn)
+ unless wn == 1
+ wn = Test::JobServer.max_jobs(wn > 0 ? wn : 1024, ENV.delete("MAKEFLAGS")) || wn
+ if wn <= 0
+ require 'etc'
+ wn = [Etc.nprocessors / 2, 1].max
+ end
+ end
+ super wn
+ end
+
+ def apply_timeout_scale(timeout)
+ timeout&.*(timeout_scale)
+ end
+end.new
+
+BT_STATE = Struct.new(:count, :error).new
+
def main
- @ruby = File.expand_path('miniruby')
- @verbose = false
+ BT.ruby = File.expand_path('miniruby')
+ BT.verbose = false
+ $VERBOSE = false
$stress = false
- @color = nil
- @tty = nil
- @quiet = false
+ BT.color = nil
+ BT.tty = nil
+ BT.quiet = false
+ BT.timeout = 180
+ BT.timeout_scale = 1
+ if (ts = (ENV["RUBY_TEST_TIMEOUT_SCALE"] || ENV["RUBY_TEST_SUBPROCESS_TIMEOUT_SCALE"]).to_i) > 1
+ BT.timeout_scale *= ts
+ end
+
+ # BT.wn = 1
dir = nil
quiet = false
tests = nil
ARGV.delete_if {|arg|
case arg
when /\A--ruby=(.*)/
- @ruby = $1
- @ruby.gsub!(/^([^ ]*)/){File.expand_path($1)}
- @ruby.gsub!(/(\s+-I\s*)((?!(?:\.\/)*-(?:\s|\z))\S+)/){$1+File.expand_path($2)}
- @ruby.gsub!(/(\s+-r\s*)(\.\.?\/\S+)/){$1+File.expand_path($2)}
+ ruby = $1
+ ruby.gsub!(/^([^ ]*)/){File.expand_path($1)}
+ ruby.gsub!(/(\s+-I\s*)((?!(?:\.\/)*-(?:\s|\z))\S+)/){$1+File.expand_path($2)}
+ ruby.gsub!(/(\s+-r\s*)(\.\.?\/\S+)/){$1+File.expand_path($2)}
+ BT.ruby = ruby
true
when /\A--sets=(.*)/
tests = Dir.glob("#{File.dirname($0)}/test_{#{$1}}*.rb").sort
@@ -86,18 +165,27 @@ def main
$stress = true
when /\A--color(?:=(?:always|(auto)|(never)|(.*)))?\z/
warn "unknown --color argument: #$3" if $3
- @color = $1 ? nil : !$2
+ BT.color = color = $1 ? nil : !$2
true
when /\A--tty(=(?:yes|(no)|(.*)))?\z/
warn "unknown --tty argument: #$3" if $3
- @tty = !$1 || !$2
+ BT.tty = !$1 || !$2
true
- when /\A(-q|--q(uiet))\z/
+ when /\A(-q|--q(uiet)?)\z/
quiet = true
- @quiet = true
+ BT.quiet = true
+ true
+ when /\A-j(\d+)?/
+ BT.wn = $1.to_i
+ true
+ when /\A--timeout=(\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?)(?::(\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?))?/
+ BT.timeout = $1.to_f
+ BT.timeout_scale = $2.to_f if defined?($2)
+ true
+ when /\A(-v|--v(erbose)?)\z/
+ BT.verbose = true
+ BT.quiet = false
true
- when /\A(-v|--v(erbose))\z/
- @verbose = true
when /\A(-h|--h(elp)?)\z/
puts(<<-End)
Usage: #{File.basename($0, '.*')} --ruby=PATH [--sets=NAME,NAME,...]
@@ -106,6 +194,7 @@ Usage: #{File.basename($0, '.*')} --ruby=PATH [--sets=NAME,NAME,...]
default: /tmp/bootstraptestXXXXX.tmpwd
--color[=WHEN] Colorize the output. WHEN defaults to 'always'
or can be 'never' or 'auto'.
+ --timeout=TIMEOUT Default timeout in seconds.
-s, --stress stress test.
-v, --verbose Output test name before exec.
-q, --quiet Don\'t print header message.
@@ -114,224 +203,514 @@ End
exit true
when /\A-j/
true
+ when /--launchable-test-reports=(.*)/
+ if File.exist?($1)
+ # To protect files from overwritten, do nothing when the file exists.
+ return true
+ end
+
+ begin
+ require_relative '../tool/lib/launchable'
+ rescue LoadError
+ # The following error sometimes happens, so we're going to skip writing Launchable report files in this case.
+ #
+ # ```
+ # /tmp/tmp.bISss9CtXZ/.ext/common/json/ext.rb:15:in 'Kernel#require':
+ # /tmp/tmp.bISss9CtXZ/.ext/x86_64-linux/json/ext/parser.so:
+ # undefined symbol: ruby_abi_version - ruby_abi_version (LoadError)
+ # ```
+ #
+ return true
+ end
+ BT.launchable_test_reports = writer = Launchable::JsonStreamWriter.new($1)
+ writer.write_array('testCases')
+ at_exit {
+ writer.close
+ }
+ true
else
false
end
}
if tests and not ARGV.empty?
- $stderr.puts "--tests and arguments are exclusive"
- exit false
+ abort "--sets and arguments are exclusive"
end
tests ||= ARGV
tests = Dir.glob("#{File.dirname($0)}/test_*.rb").sort if tests.empty?
- pathes = tests.map {|path| File.expand_path(path) }
+ paths = tests.map {|path| File.expand_path(path) }
- @progress = %w[- \\ | /]
- @progress_bs = "\b" * @progress[0].size
- @tty = $stderr.tty? if @tty.nil?
- case @color
+ BT.progress = %w[- \\ | /]
+ BT.progress_bs = "\b" * BT.progress[0].size
+ BT.tty = $stderr.tty? if BT.tty.nil?
+ BT.wn ||= /-j(\d+)?/ =~ (ENV["MAKEFLAGS"] || ENV["MFLAGS"]) ? $1.to_i : 1
+
+ case BT.color
when nil
- @color = @tty && /dumb/ !~ ENV["TERM"]
+ BT.color = BT.tty && /dumb/ !~ ENV["TERM"]
end
- @tty &&= !@verbose
- if @color
+ BT.tty &&= !BT.verbose
+ if BT.color
# dircolors-like style
colors = (colors = ENV['TEST_COLORS']) ? Hash[colors.scan(/(\w+)=([^:\n]*)/)] : {}
begin
- File.read(File.join(__dir__, "../test/colors")).scan(/(\w+)=([^:\n]*)/) do |n, c|
+ File.read(File.join(__dir__, "../tool/colors")).scan(/(\w+)=([^:\n]*)/) do |n, c|
colors[n] ||= c
end
rescue
end
- @passed = "\e[;#{colors["pass"] || "32"}m"
- @failed = "\e[;#{colors["fail"] || "31"}m"
- @reset = "\e[m"
+ BT.passed = "\e[;#{colors["pass"] || "32"}m"
+ BT.failed = "\e[;#{colors["fail"] || "31"}m"
+ BT.reset = "\e[m"
else
- @passed = @failed = @reset = ""
+ BT.passed = BT.failed = BT.reset = ""
end
+ target_version = `#{BT.ruby} -v`.chomp
+ BT.platform = target_version[/\[(.*)\]\z/, 1]
unless quiet
- puts Time.now
+ puts $start_time
if defined?(RUBY_DESCRIPTION)
puts "Driver is #{RUBY_DESCRIPTION}"
elsif defined?(RUBY_PATCHLEVEL)
- puts "Driver is ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}#{RUBY_PLATFORM}) [#{RUBY_PLATFORM}]"
+ puts "Driver is ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}#{RUBY_PATCHLEVEL}) [#{RUBY_PLATFORM}]"
else
puts "Driver is ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
end
- puts "Target is #{`#{@ruby} -v`.chomp}"
+ puts "Target is #{target_version}"
puts
$stdout.flush
end
- in_temporary_working_directory(dir) {
- exec_test pathes
- }
+ in_temporary_working_directory(dir) do
+ exec_test paths
+ end
end
def erase(e = true)
- if e and @columns > 0 and !@verbose
- "\r#{" "*@columns}\r"
+ if e and BT.columns > 0 and BT.tty and !BT.verbose
+ "\e[1K\r"
else
""
end
end
-def exec_test(pathes)
- @count = 0
- @error = 0
- @errbuf = []
- @location = nil
- @columns = 0
- @width = pathes.map {|path| File.basename(path).size}.max + 2
- pathes.each do |path|
- @basename = File.basename(path)
- $stderr.printf("%s%-*s ", erase(@quiet), @width, @basename)
- $stderr.flush
- @columns = @width + 1
- $stderr.puts if @verbose
- count = @count
- error = @error
+def load_test paths
+ paths.each do |path|
load File.expand_path(path)
- if @tty
- if @error == error
- msg = "PASS #{@count-count}"
- @columns += msg.size - 1
- $stderr.print "#{@progress_bs}#{@passed}#{msg}#{@reset}"
- else
- msg = "FAIL #{@error-error}/#{@count-count}"
- $stderr.print "#{@progress_bs}#{@failed}#{msg}#{@reset}"
- @columns = 0
+ end
+end
+
+def concurrent_exec_test
+ aq = Queue.new
+ rq = Queue.new
+
+ ts = BT.wn.times.map do
+ Thread.new do
+ while as = aq.pop
+ as.call
+ rq << as
end
+ ensure
+ rq << nil
end
- $stderr.puts unless @quiet and @tty and @error == error
end
- $stderr.print(erase) if @quiet
- if @error == 0
- if @count == 0
- $stderr.puts "No tests, no problem"
- else
- $stderr.puts "#{@passed}PASS#{@reset} all #{@count} tests"
+
+ Assertion.all.to_a.shuffle.each do |path, assertions|
+ assertions.each do |as|
+ aq << as
end
- exit true
- else
- @errbuf.each do |msg|
- $stderr.puts msg
+ end
+
+ BT.indent = 1
+ aq.close
+ i = 1
+ term_wn = 0
+ begin
+ while BT.wn != term_wn
+ if r = rq.pop
+ BT_STATE.count += 1
+ case
+ when BT.quiet
+ when BT.tty
+ $stderr.print "#{BT.progress_bs}#{BT.progress[(i+=1) % BT.progress.size]}"
+ else
+ BT.putc '.'
+ end
+ else
+ term_wn += 1
+ end
end
- $stderr.puts "#{@failed}FAIL#{@reset} #{@error}/#{@count} tests failed"
- exit false
+ ensure
+ ts.each(&:kill)
+ ts.each(&:join)
end
end
-def show_progress(message = '')
- if @verbose
- $stderr.print "\##{@count} #{@location} "
- elsif @tty
- $stderr.print "#{@progress_bs}#{@progress[@count % @progress.size]}"
- end
- t = Time.now if @verbose
- faildesc, errout = with_stderr {yield}
- t = Time.now - t if @verbose
- if !faildesc
- if @tty
- $stderr.print "#{@progress_bs}#{@progress[@count % @progress.size]}"
- elsif @verbose
- $stderr.printf(". %.3f\n", t)
- else
- $stderr.print '.'
+##
+# Module for writing a test file for uploading test results into Launchable.
+# In bootstraptest, we aggregate the test results based on file level.
+module Launchable
+ @@last_test_name = nil
+ @@failure_log = ''
+ @@duration = 0
+
+ def show_progress(message = '')
+ faildesc, t = super
+
+ if writer = BT.launchable_test_reports
+ if faildesc
+ @@failure_log += faildesc
+ end
+ repo_path = File.expand_path("#{__dir__}/../")
+ relative_path = File.join(__dir__, self.path).delete_prefix("#{repo_path}/")
+ if @@last_test_name != nil && @@last_test_name != relative_path
+ # The test path is a URL-encoded representation.
+ # https://github.com/launchableinc/cli/blob/v1.81.0/launchable/testpath.py#L18
+ test_path = "#{encode_test_path_component("file")}=#{encode_test_path_component(@@last_test_name)}"
+ if @@failure_log.size > 0
+ status = 'TEST_FAILED'
+ else
+ status = 'TEST_PASSED'
+ end
+ writer.write_object(
+ {
+ testPath: test_path,
+ status: status,
+ duration: t,
+ createdAt: Time.now.to_s,
+ stderr: @@failure_log,
+ stdout: nil,
+ data: {
+ lineNumber: self.lineno
+ }
+ }
+ )
+ @@duration = 0
+ @@failure_log = ''
+ end
+ @@last_test_name = relative_path
+ @@duration += t
end
+ end
+
+ private
+ def encode_test_path_component component
+ component.to_s.gsub('%', '%25').gsub('=', '%3D').gsub('#', '%23').gsub('&', '%26')
+ end
+end
+
+def exec_test(paths)
+ # setup
+ load_test paths
+ BT_STATE.count = 0
+ BT_STATE.error = 0
+ BT.columns = 0
+ BT.width = paths.map {|path| File.basename(path).size}.max + 2
+
+ # execute tests
+ if BT.wn > 1
+ concurrent_exec_test
else
- $stderr.print "#{@failed}F"
- $stderr.printf(" %.3f", t) if @verbose
- $stderr.print "#{@reset}"
- $stderr.puts if @verbose
- error faildesc, message
- unless errout.empty?
- $stderr.print "#{@failed}stderr output is not empty#{@reset}\n", adjust_indent(errout)
+ prev_basename = nil
+ Assertion.all.each do |basename, assertions|
+ if !BT.quiet && basename != prev_basename
+ prev_basename = basename
+ $stderr.printf("%s%-*s ", erase(BT.quiet), BT.width, basename)
+ $stderr.flush
+ end
+ BT.columns = BT.width + 1
+ $stderr.puts if BT.verbose
+ count = BT_STATE.count
+ error = BT_STATE.error
+
+ assertions.each do |assertion|
+ BT_STATE.count += 1
+ assertion.call
+ end
+
+ if BT.tty
+ if BT_STATE.error == error
+ msg = "PASS #{BT_STATE.count-count}"
+ BT.columns += msg.size - 1
+ $stderr.print "#{BT.progress_bs}#{BT.passed}#{msg}#{BT.reset}" unless BT.quiet
+ else
+ msg = "FAIL #{BT_STATE.error-error}/#{BT_STATE.count-count}"
+ $stderr.print "#{BT.progress_bs}#{BT.failed}#{msg}#{BT.reset}"
+ BT.columns = 0
+ end
+ end
+ $stderr.puts if !BT.quiet and (BT.tty or BT_STATE.error == error)
end
- if @tty and !@verbose
- $stderr.printf("%-*s%s", @width, @basename, @progress[@count % @progress.size])
+ end
+
+ # show results
+ unless BT.quiet
+ $stderr.puts(erase)
+
+ sec = Time.now - $start_time
+ $stderr.puts "Finished in #{'%.2f' % sec} sec\n\n" if Assertion.count > 0
+ end
+
+ Assertion.errbuf.each do |msg|
+ $stderr.puts msg
+ end
+
+ out = BT.quiet ? $stdout : $stderr
+
+ if BT_STATE.error == 0
+ if Assertion.count == 0
+ out.puts "No tests, no problem" unless BT.quiet
+ else
+ out.puts "#{BT.passed}PASS#{BT.reset} all #{Assertion.count} tests"
end
+ true
+ else
+ $stderr.puts "#{BT.failed}FAIL#{BT.reset} #{BT_STATE.error}/#{BT_STATE.count} tests failed"
+ false
end
-rescue Interrupt
- raise Interrupt
-rescue Exception => err
- $stderr.print 'E'
- $stderr.puts if @verbose
- error err.message, message
end
-# NativeClient is special. The binary is cross-compiled. But runs on the build environment.
-# So RUBY_PLATFORM in this process is not useful to detect it.
-def nacl?
- @ruby and File.basename(@ruby.split(/\s/).first)['sel_ldr']
+def target_platform
+ BT.platform or RUBY_PLATFORM
end
-def assert_check(testsrc, message = '', opt = '')
- show_progress(message) {
- result = get_result_string(testsrc, opt)
- check_coredump
- yield(result)
- }
-end
+class Assertion < Struct.new(:src, :path, :lineno, :proc)
+ prepend Launchable
+ @count = 0
+ @all = Hash.new{|h, k| h[k] = []}
+ @errbuf = []
+
+ class << self
+ attr_reader :count, :errbuf
+
+ def all
+ @all
+ end
-def assert_equal(expected, testsrc, message = '')
- newtest
- assert_check(testsrc, message) {|result|
- if expected == result
- nil
+ def add as
+ @all[as.path] << as
+ as.id = (@count += 1)
+ end
+ end
+
+ attr_accessor :id
+ attr_reader :err, :category
+
+ def initialize(*args)
+ super
+ self.class.add self
+ @category = self.path[/\Atest_(.+)\.rb\z/, 1]
+ end
+
+ def call
+ self.proc.call self
+ end
+
+ def assert_check(message = '', opt = '', **argh)
+ show_progress(message) {
+ result = get_result_string(opt, **argh)
+ yield(result)
+ }
+ end
+
+ def with_stderr
+ out = err = nil
+ r, w = IO.pipe
+ @err = w
+ err_reader = Thread.new{ r.read }
+
+ begin
+ out = yield
+ ensure
+ w.close
+ err = err_reader.value
+ r.close rescue nil
+ end
+
+ return out, err
+ end
+
+ def show_error(msg, additional_message)
+ msg = "#{BT.failed}\##{self.id} #{self.path}:#{self.lineno}#{BT.reset}: #{msg} #{additional_message}"
+ if BT.tty
+ $stderr.puts "#{erase}#{msg}"
else
- desc = "#{result.inspect} (expected #{expected.inspect})"
- pretty(testsrc, desc, result)
+ Assertion.errbuf << msg
end
- }
-end
+ BT_STATE.error += 1
+ end
+
+
+ def show_progress(message = '')
+ if BT.quiet || BT.wn > 1
+ # do nothing
+ elsif BT.verbose
+ $stderr.print "\##{@id} #{self.path}:#{self.lineno} "
+ elsif BT.tty
+ $stderr.print "#{BT.progress_bs}#{BT.progress[BT_STATE.count % BT.progress.size]}"
+ end
+
+ t = Time.now if BT.verbose || BT.launchable_test_reports
+ faildesc, errout = with_stderr {yield}
+ t = Time.now - t if BT.verbose || BT.launchable_test_reports
+
+ if !faildesc
+ # success
+ if BT.quiet || BT.wn > 1
+ # do nothing
+ elsif BT.tty
+ $stderr.print "#{BT.progress_bs}#{BT.progress[BT_STATE.count % BT.progress.size]}"
+ elsif BT.verbose
+ $stderr.printf(". %.3f\n", t)
+ else
+ BT.putc '.'
+ end
+ else
+ $stderr.print "#{BT.failed}F"
+ $stderr.printf(" %.3f", t) if BT.verbose
+ $stderr.print BT.reset
+ $stderr.puts if BT.verbose
+ show_error faildesc, message
+ unless errout.empty?
+ $stderr.print "#{BT.failed}stderr output is not empty#{BT.reset}\n", adjust_indent(errout)
+ end
+
+ if BT.tty and !BT.verbose and BT.wn == 1
+ $stderr.printf("%-*s%s", BT.width, path, BT.progress[BT_STATE.count % BT.progress.size])
+ end
+ end
+
+ [faildesc, t]
+ rescue Interrupt
+ $stderr.puts "\##{@id} #{path}:#{lineno}"
+ raise
+ rescue Exception => err
+ $stderr.print 'E'
+ $stderr.puts if BT.verbose
+ show_error err.message, message
+ ensure
+ begin
+ check_coredump
+ rescue CoreDumpError => err
+ $stderr.print 'E'
+ $stderr.puts if BT.verbose
+ show_error err.message, message
+ cleanup_coredump
+ end
+ end
+
+ class Timeout < StandardError; end
+
+ def get_result_string(opt = '', timeout: BT.timeout, **argh)
+ if BT.ruby
+ timeout = BT.apply_timeout_scale(timeout)
+ filename = make_srcfile(**argh)
+ begin
+ kw = self.err ? {err: self.err} : {}
+ out = IO.popen("#{BT.ruby} -W0 #{opt} #{filename}", **kw)
+ pid = out.pid
+ th = Thread.new {out.read.tap {Process.waitpid(pid); out.close}}
+ if th.join(timeout)
+ th.value
+ else
+ Timeout.new("timed out after #{timeout} seconds")
+ end
+ ensure
+ raise Interrupt if $? and $?.signaled? && $?.termsig == Signal.list["INT"]
-def assert_match(expected_pattern, testsrc, message = '')
- newtest
- assert_check(testsrc, message) {|result|
- if expected_pattern =~ result
- nil
+ begin
+ Process.kill :KILL, pid
+ rescue Errno::ESRCH
+ # OK
+ end
+ end
else
- desc = "#{expected_pattern.inspect} expected to be =~\n#{result.inspect}"
- pretty(testsrc, desc, result)
+ eval(src).to_s
end
- }
+ end
+
+ def make_srcfile(frozen_string_literal: nil)
+ filename = "bootstraptest.#{self.path}_#{self.lineno}_#{self.id}.rb"
+ File.open(filename, 'w') {|f|
+ f.puts "#frozen_string_literal:#{frozen_string_literal}" unless frozen_string_literal.nil?
+ if $stress
+ f.puts "GC.stress = true" if $stress
+ else
+ f.puts ""
+ end
+ f.puts "class BT_Skip < Exception; end; def skip(msg) = raise(BT_Skip, msg.to_s)"
+ f.puts "print(begin; #{self.src}; rescue BT_Skip; $!.message; end)"
+ }
+ filename
+ end
+end
+
+def add_assertion src, pr
+ loc = caller_locations(2, 1).first
+ lineno = loc.lineno
+ path = File.basename(loc.path)
+
+ Assertion.new(src, path, lineno, pr)
+end
+
+def assert_equal(expected, testsrc, message = '', opt = '', **kwargs)
+ add_assertion testsrc, -> as do
+ as.assert_check(message, opt, **kwargs) {|result|
+ if expected == result
+ nil
+ else
+ desc = "#{result.inspect} (expected #{expected.inspect})"
+ pretty(testsrc, desc, result)
+ end
+ }
+ end
+end
+
+def assert_match(expected_pattern, testsrc, message = '', **argh)
+ add_assertion testsrc, -> as do
+ as.assert_check(message, **argh) {|result|
+ if expected_pattern =~ result
+ nil
+ else
+ desc = "#{expected_pattern.inspect} expected to be =~\n#{result.inspect}"
+ pretty(testsrc, desc, result)
+ end
+ }
+ end
end
def assert_not_match(unexpected_pattern, testsrc, message = '')
- newtest
- assert_check(testsrc, message) {|result|
- if unexpected_pattern !~ result
- nil
- else
- desc = "#{unexpected_pattern.inspect} expected to be !~\n#{result.inspect}"
- pretty(testsrc, desc, result)
- end
- }
+ add_assertion testsrc, -> as do
+ as.assert_check(message) {|result|
+ if unexpected_pattern !~ result
+ nil
+ else
+ desc = "#{unexpected_pattern.inspect} expected to be !~\n#{result.inspect}"
+ pretty(testsrc, desc, result)
+ end
+ }
+ end
end
def assert_valid_syntax(testsrc, message = '')
- newtest
- assert_check(testsrc, message, '-c') {|result|
- result if /Syntax OK/ !~ result
- }
+ add_assertion testsrc, -> as do
+ as.assert_check(message, '-c') {|result|
+ result if /Syntax OK/ !~ result
+ }
+ end
end
-def assert_normal_exit(testsrc, *rest)
- newtest
- opt = {}
- opt = rest.pop if Hash === rest.last
- message, ignore_signals = rest
- message ||= ''
- timeout = opt[:timeout]
- show_progress(message) {
- faildesc = nil
- filename = make_srcfile(testsrc)
- old_stderr = $stderr.dup
- timeout_signaled = false
- begin
- $stderr.reopen("assert_normal_exit.log", "w")
- io = IO.popen("#{@ruby} -W0 #{filename}")
+def assert_normal_exit(testsrc, *rest, timeout: BT.timeout, **opt)
+ add_assertion testsrc, -> as do
+ timeout = BT.apply_timeout_scale(timeout)
+ message, ignore_signals = rest
+ message ||= ''
+ as.show_progress(message) {
+ faildesc = nil
+ filename = as.make_srcfile
+ timeout_signaled = false
+ logfile = "assert_normal_exit.#{as.path}.#{as.lineno}.log"
+
+ io = IO.popen("#{BT.ruby} -W0 #{filename}", err: logfile)
pid = io.pid
th = Thread.new {
io.read
@@ -343,68 +722,93 @@ def assert_normal_exit(testsrc, *rest)
timeout_signaled = true
end
status = th.value
- ensure
- $stderr.reopen(old_stderr)
- old_stderr.close
- end
- if status&.signaled?
- signo = status.termsig
- signame = Signal.list.invert[signo]
- unless ignore_signals and ignore_signals.include?(signame)
- sigdesc = "signal #{signo}"
- if signame
- sigdesc = "SIG#{signame} (#{sigdesc})"
- end
- if timeout_signaled
- sigdesc << " (timeout)"
- end
- faildesc = pretty(testsrc, "killed by #{sigdesc}", nil)
- stderr_log = File.read("assert_normal_exit.log")
- if !stderr_log.empty?
- faildesc << "\n" if /\n\z/ !~ faildesc
- stderr_log << "\n" if /\n\z/ !~ stderr_log
- stderr_log.gsub!(/^.*\n/) { '| ' + $& }
- faildesc << stderr_log
+
+ if status && status.signaled?
+ signo = status.termsig
+ signame = Signal.list.invert[signo]
+ unless ignore_signals and ignore_signals.include?(signame)
+ sigdesc = "signal #{signo}"
+ if signame
+ sigdesc = "SIG#{signame} (#{sigdesc})"
+ end
+ if timeout_signaled
+ sigdesc << " (timeout)"
+ end
+ faildesc = pretty(testsrc, "killed by #{sigdesc}", nil)
+ stderr_log = File.read(logfile)
+ if !stderr_log.empty?
+ faildesc << "\n" if /\n\z/ !~ faildesc
+ stderr_log << "\n" if /\n\z/ !~ stderr_log
+ stderr_log.gsub!(/^.*\n/) { '| ' + $& }
+ faildesc << stderr_log
+ end
end
end
- end
- faildesc
- }
+ faildesc
+ }
+ end
end
def assert_finish(timeout_seconds, testsrc, message = '')
- newtest
- show_progress(message) {
- faildesc = nil
- filename = make_srcfile(testsrc)
- io = IO.popen("#{@ruby} -W0 #{filename}")
- pid = io.pid
- waited = false
- tlimit = Time.now + timeout_seconds
- while Time.now < tlimit
- if Process.waitpid pid, Process::WNOHANG
- waited = true
- break
+ add_assertion testsrc, -> as do
+ timeout_seconds = BT.apply_timeout_scale(timeout_seconds)
+
+ as.show_progress(message) {
+ faildesc = nil
+ filename = as.make_srcfile
+ io = IO.popen("#{BT.ruby} -W0 #{filename}", err: as.err)
+ pid = io.pid
+ waited = false
+ tlimit = Time.now + timeout_seconds
+ diff = timeout_seconds
+ while diff > 0
+ if Process.waitpid pid, Process::WNOHANG
+ waited = true
+ break
+ end
+ if io.respond_to?(:read_nonblock)
+ if IO.select([io], nil, nil, diff)
+ begin
+ io.read_nonblock(1024)
+ rescue Errno::EAGAIN, IO::WaitReadable, EOFError
+ break
+ end while true
+ end
+ else
+ sleep 0.1
+ end
+ diff = tlimit - Time.now
end
- sleep 0.1
- end
- if !waited
- Process.kill(:KILL, pid)
- Process.waitpid pid
- faildesc = pretty(testsrc, "not finished in #{timeout_seconds} seconds", nil)
- end
- io.close
- faildesc
- }
+ if !waited
+ Process.kill(:KILL, pid)
+ Process.waitpid pid
+ faildesc = pretty(testsrc, "not finished in #{timeout_seconds} seconds", nil)
+ end
+ io.close
+ faildesc
+ }
+ end
end
def flunk(message = '')
- newtest
- show_progress('') { message }
+ add_assertion '', -> as do
+ as.show_progress('') { message }
+ end
+end
+
+def show_limit(testsrc, opt = '', **argh)
+ return if BT.quiet
+
+ add_assertion testsrc, -> as do
+ result = as.get_result_string(opt, **argh)
+ Assertion.errbuf << result
+ end
end
def pretty(src, desc, result)
- src = src.sub(/\A.*\n/, '')
+ src = src.sub(/\A\s*\n/, '')
+ lines = src.lines
+ src = lines[0..20].join + "(...snip)\n" if lines.size > 20
(/\n/ =~ src ? "\n#{adjust_indent(src)}" : src) + " #=> #{desc}"
end
@@ -418,66 +822,6 @@ def untabify(str)
str.gsub(/^\t+/) {' ' * (8 * $&.size) }
end
-def make_srcfile(src)
- filename = 'bootstraptest.tmp.rb'
- File.open(filename, 'w') {|f|
- f.puts "GC.stress = true" if $stress
- f.puts "print(begin; #{src}; end)"
- }
- filename
-end
-
-def get_result_string(src, opt = '')
- if @ruby
- filename = make_srcfile(src)
- begin
- `#{@ruby} -W0 #{opt} #{filename}`
- ensure
- raise Interrupt if $? and $?.signaled? && $?.termsig == Signal.list["INT"]
- raise CoreDumpError, "core dumped" if $? and $?.coredump?
- end
- else
- eval(src).to_s
- end
-end
-
-def with_stderr
- out = err = nil
- begin
- r, w = IO.pipe
- stderr = $stderr.dup
- $stderr.reopen(w)
- w.close
- reader = Thread.start {r.read}
- begin
- out = yield
- ensure
- $stderr.reopen(stderr)
- err = reader.value
- end
- ensure
- w.close rescue nil
- r.close rescue nil
- end
- return out, err
-end
-
-def newtest
- @location = File.basename(caller(2).first)
- @count += 1
- cleanup_coredump
-end
-
-def error(msg, additional_message)
- msg = "#{@failed}\##{@count} #{@location}#{@reset}: #{msg} #{additional_message}"
- if @tty
- $stderr.puts "#{erase}#{msg}"
- else
- @errbuf.push msg
- end
- @error += 1
-end
-
def in_temporary_working_directory(dir)
if dir
Dir.mkdir dir
@@ -494,18 +838,40 @@ def in_temporary_working_directory(dir)
end
def cleanup_coredump
- FileUtils.rm_f 'core'
+ if File.file?('core')
+ require 'time'
+ Dir.glob('/tmp/bootstraptest-core.*').each do |f|
+ if Time.now - File.mtime(f) > 7 * 24 * 60 * 60 # 7 days
+ warn "Deleting an old core file: #{f}"
+ FileUtils.rm(f)
+ end
+ end
+ core_path = "/tmp/bootstraptest-core.#{Time.now.utc.iso8601}"
+ warn "A core file is found. Saving it at: #{core_path.dump}"
+ FileUtils.mv('core', core_path)
+ cmd = ['gdb', BT.ruby, '-c', core_path, '-ex', 'bt', '-batch']
+ p cmd # debugging why it's not working
+ system(*cmd)
+ end
FileUtils.rm_f Dir.glob('core.*')
- FileUtils.rm_f @ruby+'.stackdump' if @ruby
+ FileUtils.rm_f BT.ruby+'.stackdump' if BT.ruby
end
class CoreDumpError < StandardError; end
def check_coredump
if File.file?('core') or not Dir.glob('core.*').empty? or
- (@ruby and File.exist?(@ruby+'.stackdump'))
+ (BT.ruby and File.exist?(BT.ruby+'.stackdump'))
raise CoreDumpError, "core dumped"
end
end
-main
+def yjit_enabled?
+ ENV.key?('RUBY_YJIT_ENABLE') || ENV.fetch('RUN_OPTS', '').include?('yjit') || BT.ruby.include?('yjit')
+end
+
+def zjit_enabled?
+ ENV.key?('RUBY_ZJIT_ENABLE') || ENV.fetch('RUN_OPTS', '').include?('zjit') || BT.ruby.include?('zjit')
+end
+
+exit main
diff --git a/bootstraptest/test_attr.rb b/bootstraptest/test_attr.rb
index 721a847145..3cb9d3eb39 100644
--- a/bootstraptest/test_attr.rb
+++ b/bootstraptest/test_attr.rb
@@ -34,3 +34,19 @@ assert_equal %{ok}, %{
print "ok"
end
}, '[ruby-core:15120]'
+
+assert_equal %{ok}, %{
+ class Big
+ attr_reader :foo
+ def initialize
+ @foo = "ok"
+ end
+ end
+
+ obj = Big.new
+ 100.times do |i|
+ obj.instance_variable_set(:"@ivar_\#{i}", i)
+ end
+
+ Big.new.foo
+}
diff --git a/bootstraptest/test_autoload.rb b/bootstraptest/test_autoload.rb
index a9f8e6dacd..de66f1f3ee 100644
--- a/bootstraptest/test_autoload.rb
+++ b/bootstraptest/test_autoload.rb
@@ -1,7 +1,7 @@
assert_equal 'ok', %q{
- File.unlink('zzz.rb') if File.file?('zzz.rb')
+ File.unlink('zzz1.rb') if File.file?('zzz1.rb')
instance_eval do
- autoload :ZZZ, './zzz.rb'
+ autoload :ZZZ, './zzz1.rb'
begin
ZZZ
rescue LoadError
@@ -11,9 +11,9 @@ assert_equal 'ok', %q{
}, '[ruby-dev:43816]'
assert_equal 'ok', %q{
- open('zzz.rb', 'w') {|f| f.puts '' }
+ File.write('zzz2.rb', '')
instance_eval do
- autoload :ZZZ, './zzz.rb'
+ autoload :ZZZ, './zzz2.rb'
begin
ZZZ
rescue NameError
@@ -23,29 +23,29 @@ assert_equal 'ok', %q{
}, '[ruby-dev:43816]'
assert_equal 'ok', %q{
- open('zzz.rb', 'w') {|f| f.puts 'class ZZZ; def self.ok;:ok;end;end'}
+ File.write('zzz3.rb', "class ZZZ; def self.ok;:ok;end;end\n")
instance_eval do
- autoload :ZZZ, './zzz.rb'
+ autoload :ZZZ, './zzz3.rb'
ZZZ.ok
end
}, '[ruby-dev:43816]'
assert_equal 'ok', %q{
- open("zzz.rb", "w") {|f| f.puts "class ZZZ; def self.ok;:ok;end;end"}
- autoload :ZZZ, "./zzz.rb"
+ File.write("zzz4.rb", "class ZZZ; def self.ok;:ok;end;end\n")
+ autoload :ZZZ, "./zzz4.rb"
ZZZ.ok
}
assert_equal 'ok', %q{
- open("zzz.rb", "w") {|f| f.puts "class ZZZ; def self.ok;:ok;end;end"}
- autoload :ZZZ, "./zzz.rb"
- require "./zzz.rb"
+ File.write("zzz5.rb", "class ZZZ; def self.ok;:ok;end;end\n")
+ autoload :ZZZ, "./zzz5.rb"
+ require "./zzz5.rb"
ZZZ.ok
}
assert_equal 'okok', %q{
- open("zzz.rb", "w") {|f| f.puts "class ZZZ; def self.ok;:ok;end;end"}
- autoload :ZZZ, "./zzz.rb"
+ File.write("zzz6.rb", "class ZZZ; def self.ok;:ok;end;end\n")
+ autoload :ZZZ, "./zzz6.rb"
t1 = Thread.new {ZZZ.ok}
t2 = Thread.new {ZZZ.ok}
[t1.value, t2.value].join
@@ -60,9 +60,9 @@ assert_finish 5, %q{
}, '[ruby-core:21696]'
assert_equal 'A::C', %q{
- open("zzz.rb", "w") {}
+ File.write("zzz7.rb", "")
class A
- autoload :C, "./zzz"
+ autoload :C, "./zzz7"
class C
end
C
diff --git a/bootstraptest/test_constant_cache.rb b/bootstraptest/test_constant_cache.rb
new file mode 100644
index 0000000000..1fa83256ed
--- /dev/null
+++ b/bootstraptest/test_constant_cache.rb
@@ -0,0 +1,187 @@
+# Constant lookup is cached.
+assert_equal '1', %q{
+ CONST = 1
+
+ def const
+ CONST
+ end
+
+ const
+ const
+}
+
+# Invalidate when a constant is set.
+assert_equal '2', %q{
+ CONST = 1
+
+ def const
+ CONST
+ end
+
+ const
+
+ CONST = 2
+
+ const
+}
+
+# Invalidate when a constant of the same name is set.
+assert_equal '1', %q{
+ CONST = 1
+
+ def const
+ CONST
+ end
+
+ const
+
+ class Container
+ CONST = 2
+ end
+
+ const
+}
+
+# Invalidate when a constant is removed.
+assert_equal 'missing', %q{
+ class Container
+ CONST = 1
+
+ def const
+ CONST
+ end
+
+ def self.const_missing(name)
+ 'missing'
+ end
+
+ new.const
+ remove_const :CONST
+ end
+
+ Container.new.const
+}
+
+# Invalidate when a constant's visibility changes.
+assert_equal 'missing', %q{
+ class Container
+ CONST = 1
+
+ def self.const_missing(name)
+ 'missing'
+ end
+ end
+
+ def const
+ Container::CONST
+ end
+
+ const
+
+ Container.private_constant :CONST
+
+ const
+}
+
+# Invalidate when a constant's visibility changes even if the call to the
+# visibility change method fails.
+assert_equal 'missing', %q{
+ class Container
+ CONST1 = 1
+
+ def self.const_missing(name)
+ 'missing'
+ end
+ end
+
+ def const1
+ Container::CONST1
+ end
+
+ const1
+
+ begin
+ Container.private_constant :CONST1, :CONST2
+ rescue NameError
+ end
+
+ const1
+}
+
+# Invalidate when a module is included.
+assert_equal 'INCLUDE', %q{
+ module Include
+ CONST = :INCLUDE
+ end
+
+ class Parent
+ CONST = :PARENT
+ end
+
+ class Child < Parent
+ def const
+ CONST
+ end
+
+ new.const
+
+ include Include
+ end
+
+ Child.new.const
+}
+
+# Invalidate when const_missing is hit.
+assert_equal '2', %q{
+ module Container
+ Foo = 1
+ Bar = 2
+
+ class << self
+ attr_accessor :count
+
+ def const_missing(name)
+ @count += 1
+ @count == 1 ? Foo : Bar
+ end
+ end
+
+ @count = 0
+ end
+
+ def const
+ Container::Baz
+ end
+
+ const
+ const
+}
+
+# Invalidate when the iseq gets cleaned up.
+assert_equal '2', %q{
+ CONSTANT = 1
+
+ iseq = RubyVM::InstructionSequence.compile(<<~RUBY)
+ CONSTANT
+ RUBY
+
+ iseq.eval
+ iseq = nil
+
+ GC.start
+ CONSTANT = 2
+}
+
+# Invalidate when the iseq gets cleaned up even if it was never in the cache.
+assert_equal '2', %q{
+ CONSTANT = 1
+
+ iseq = RubyVM::InstructionSequence.compile(<<~RUBY)
+ CONSTANT
+ RUBY
+
+ iseq = nil
+
+ GC.start
+ CONSTANT = 2
+}
diff --git a/bootstraptest/test_env.rb b/bootstraptest/test_env.rb
new file mode 100644
index 0000000000..7d1b45b75e
--- /dev/null
+++ b/bootstraptest/test_env.rb
@@ -0,0 +1,12 @@
+assert_equal "true", %q{
+ ENV["ENVTEST"] = "\u{e9 3042 d76c}"
+ env = ENV["ENVTEST"]
+ env.valid_encoding?
+}
+
+# different encoding is used for PATH
+assert_equal "true", %q{
+ ENV["PATH"] = "\u{e9 3042 d76c}"
+ env = ENV["PATH"]
+ env.valid_encoding?
+}
diff --git a/bootstraptest/test_eval.rb b/bootstraptest/test_eval.rb
index bf7478006d..20bd9615f4 100644
--- a/bootstraptest/test_eval.rb
+++ b/bootstraptest/test_eval.rb
@@ -109,13 +109,40 @@ assert_equal %q{foo}, %q{
}
}
assert_equal %q{1}, %q{
- class Fixnum
+ class Integer
Const = 1
end
1.instance_eval %{
Const
}
}
+assert_equal %q{1}, %q{
+ class TrueClass
+ Const = 1
+ end
+ true.instance_eval %{
+ Const
+ }
+}
+assert_equal %q{[:Const]}, %q{
+ mod = Module.new
+ mod.instance_eval %{
+ Const = 1
+ }
+ raise if defined?(Module::Const)
+ mod.singleton_class.constants
+}
+assert_equal %q{can't define singleton}, %q{
+ begin
+ 123.instance_eval %{
+ Const = 1
+ }
+ "bad"
+ rescue TypeError => e
+ raise "bad" if defined?(Integer::Const)
+ e.message
+ end
+}
assert_equal %q{top}, %q{
Const = :top
class C
@@ -190,7 +217,8 @@ assert_equal %q{[10, main]}, %q{
}
%w[break next redo].each do |keyword|
- assert_match %r"Can't escape from eval with #{keyword}\z", %{
+ assert_match %r"Invalid #{keyword}\b", %{
+ $stderr = STDOUT
begin
eval "0 rescue #{keyword}"
rescue SyntaxError => e
@@ -199,8 +227,18 @@ assert_equal %q{[10, main]}, %q{
}, '[ruby-dev:31372]'
end
+assert_normal_exit %{
+ $stderr = STDOUT
+ 5000.times do
+ begin
+ eval "0 rescue break"
+ rescue SyntaxError
+ end
+ end
+}
+
assert_normal_exit %q{
- STDERR.reopen(STDOUT)
+ $stderr = STDOUT
class Foo
def self.add_method
class_eval("def some-bad-name; puts 'hello' unless @some_variable.some_function(''); end")
@@ -249,7 +287,9 @@ assert_equal 'ok', %q{
assert_equal 'ok', %q{
begin
- 12.instance_eval { @@a }
+ class A
+ 12.instance_eval { @@a }
+ end
rescue NameError
:ok
end
@@ -257,7 +297,9 @@ assert_equal 'ok', %q{
assert_equal 'ok', %q{
begin
- 12.instance_exec { @@a }
+ class A
+ 12.instance_exec { @@a }
+ end
rescue NameError
:ok
end
@@ -322,3 +364,34 @@ assert_normal_exit %q{
end
}, 'check escaping the internal value th->base_block'
+assert_equal "false", <<~RUBY, "literal strings are mutable", "--disable-frozen-string-literal"
+ eval("'test'").frozen?
+RUBY
+
+assert_equal "false", <<~RUBY, "literal strings are mutable", "--disable-frozen-string-literal", frozen_string_literal: true
+ eval("'test'").frozen?
+RUBY
+
+assert_equal "true", <<~RUBY, "literal strings are frozen", "--enable-frozen-string-literal"
+ eval("'test'").frozen?
+RUBY
+
+assert_equal "true", <<~RUBY, "literal strings are frozen", "--enable-frozen-string-literal", frozen_string_literal: false
+ eval("'test'").frozen?
+RUBY
+
+assert_equal "false", <<~RUBY, "__FILE__ is mutable", "--disable-frozen-string-literal"
+ eval("__FILE__").frozen?
+RUBY
+
+assert_equal "false", <<~RUBY, "__FILE__ is mutable", "--disable-frozen-string-literal", frozen_string_literal: true
+ eval("__FILE__").frozen?
+RUBY
+
+assert_equal "true", <<~RUBY, "__FILE__ is frozen", "--enable-frozen-string-literal"
+ eval("__FILE__").frozen?
+RUBY
+
+assert_equal "true", <<~RUBY, "__FILE__ is frozen", "--enable-frozen-string-literal", frozen_string_literal: false
+ eval("__FILE__").frozen?
+RUBY
diff --git a/bootstraptest/test_exception.rb b/bootstraptest/test_exception.rb
index 35c8d25e37..decfdc08a3 100644
--- a/bootstraptest/test_exception.rb
+++ b/bootstraptest/test_exception.rb
@@ -370,7 +370,7 @@ assert_equal %q{}, %q{
}
##
-assert_match /undefined method `foo\'/, %q{#`
+assert_match /undefined method 'foo\'/, %q{#`
STDERR.reopen(STDOUT)
class C
def inspect
@@ -402,7 +402,7 @@ assert_equal 'nil', %q{
exc.inspect
}, '[ruby-dev:32608]'
-assert_equal 'exception class/object expected', %q{
+assert_equal 'divided by 0', %q{
class ZeroDivisionError
def self.new(message)
42
diff --git a/bootstraptest/test_fiber.rb b/bootstraptest/test_fiber.rb
new file mode 100644
index 0000000000..ae809a5936
--- /dev/null
+++ b/bootstraptest/test_fiber.rb
@@ -0,0 +1,44 @@
+show_limit %q{
+ fibers = []
+ begin
+ fiber = Fiber.new{Fiber.yield}
+ fiber.resume
+ fibers << fiber
+
+ raise Exception, "skipping" if fibers.count >= 10_000
+ rescue Exception => error
+ puts "Fiber count: #{fibers.count} (#{error})"
+ break
+ end while true
+}
+
+assert_equal %q{ok}, %q{
+ Fiber.new{
+ }.resume
+ :ok
+}
+
+assert_equal %q{ok}, %q{
+ 100.times.collect{Fiber.new{}}
+ :ok
+}
+
+assert_equal %q{ok}, %q{
+ fibers = 1000.times.collect{Fiber.new{Fiber.yield}}
+ fibers.each(&:resume)
+ fibers.each(&:resume)
+ :ok
+}
+
+assert_normal_exit %q{
+ at_exit { Fiber.new{}.resume }
+}
+
+assert_normal_exit %q{
+ Fiber.new(&Object.method(:class_eval)).resume("foo")
+}, '[ruby-dev:34128]'
+
+# [Bug #21400]
+assert_normal_exit %q{
+ Thread.new { Fiber.current.kill }.join
+}
diff --git a/bootstraptest/test_finalizer.rb b/bootstraptest/test_finalizer.rb
index 22a16b1220..ccfa0b55d6 100644
--- a/bootstraptest/test_finalizer.rb
+++ b/bootstraptest/test_finalizer.rb
@@ -6,3 +6,11 @@ ObjectSpace.define_finalizer(b1,proc{b1.inspect})
ObjectSpace.define_finalizer(a2,proc{a1.inspect})
ObjectSpace.define_finalizer(a1,proc{})
}, '[ruby-dev:35778]'
+
+assert_equal 'true', %q{
+ obj = Object.new
+ id = obj.object_id
+
+ ObjectSpace.define_finalizer(obj, proc { |i| print(id == i) })
+ nil
+}
diff --git a/bootstraptest/test_flow.rb b/bootstraptest/test_flow.rb
index 0390062a24..15528a4213 100644
--- a/bootstraptest/test_flow.rb
+++ b/bootstraptest/test_flow.rb
@@ -363,7 +363,7 @@ assert_equal %q{[1, 2, 3, 5, 2, 3, 5, 7, 8]}, %q{$a = []; begin; ; $a << 1
; $a << 8
; rescue Exception; $a << 99; end; $a}
assert_equal %q{[1, 2, 6, 3, 5, 7, 8]}, %q{$a = []; begin; ; $a << 1
- o = "test"; $a << 2
+ o = "test".dup; $a << 2
def o.test(a); $a << 3
return a; $a << 4
ensure; $a << 5
@@ -534,11 +534,11 @@ assert_equal %Q{ENSURE\n}, %q{
['[ruby-core:39125]', %q{
class Bug5234
include Enumerable
- def each
+ def each(&block)
begin
yield :foo
ensure
- proc
+ proc(&block)
end
end
end
@@ -547,11 +547,11 @@ assert_equal %Q{ENSURE\n}, %q{
['[ruby-dev:45656]', %q{
class Bug6460
include Enumerable
- def each
+ def each(&block)
begin
yield :foo
ensure
- 1.times { Proc.new }
+ 1.times { Proc.new(&block) }
end
end
end
@@ -589,3 +589,13 @@ assert_equal "foo", %q{
end
Bug6460.new.m1
}, '[ruby-dev:46372]'
+
+assert_equal "foo", %q{
+ obj = "foo"
+ if obj || any1
+ any2 = any2
+ else
+ raise obj.inspect
+ end
+ obj
+}, '[ruby-core:87830]'
diff --git a/bootstraptest/test_fork.rb b/bootstraptest/test_fork.rb
index 1cd9f7ac6c..860ef285d0 100644
--- a/bootstraptest/test_fork.rb
+++ b/bootstraptest/test_fork.rb
@@ -21,7 +21,9 @@ assert_finish 10, %q{
end
}, '[ruby-core:22158]'
-assert_normal_exit(<<'End', '[ruby-dev:37934]')
+# temporarily stop this test to enable explicit failure when
+# timer thread couldn't be created (r61706 and r61717).
+assert_normal_exit(<<'End', '[ruby-dev:37934]') if false
main = Thread.current
Thread.new { sleep 0.01 until main.stop?; Thread.kill main }
Process.setrlimit(:NPROC, 1) if defined?(Process::RLIMIT_NPROC)
@@ -73,3 +75,30 @@ assert_equal '[1, 2]', %q{
end
}, '[ruby-dev:44005] [Ruby 1.9 - Bug #4950]'
+assert_equal 'ok', %q{
+ def now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
+
+ Thread.new do
+ loop { sleep 0.0001 }
+ end
+
+ 10.times do
+ pid = fork{ exit!(0) }
+ deadline = now + 10
+ while true
+ _, status = Process.waitpid2(pid, Process::WNOHANG)
+ break if status
+ if now > deadline
+ Process.kill(:KILL, pid)
+ raise "failed"
+ end
+ sleep 0.001
+ end
+ unless status.success?
+ raise "child exited with status #{status}"
+ end
+ rescue NotImplementedError
+ end
+ :ok
+}, '[Bug #20670]'
+
diff --git a/bootstraptest/test_insns.rb b/bootstraptest/test_insns.rb
new file mode 100644
index 0000000000..9e2c4a52a7
--- /dev/null
+++ b/bootstraptest/test_insns.rb
@@ -0,0 +1,492 @@
+# C0 coverage of each instructions
+
+# :NOTE: This is for development purpose; never consider this file as
+# ISeq compilation specification.
+
+begin
+ # This library brings some additional coverage.
+ # Not mandatory.
+ require 'rbconfig/sizeof'
+rescue LoadError
+ # OK, just skip
+else
+ if defined? RbConfig::LIMITS
+ $FIXNUM_MAX = RbConfig::LIMITS["FIXNUM_MAX"]
+ $FIXNUM_MIN = RbConfig::LIMITS["FIXNUM_MIN"]
+ end
+end
+
+fsl = { frozen_string_literal: true } # used later
+tests = [
+ # insn , expression to generate such insn
+ [ 'nop', %q{ raise rescue true }, ],
+
+ [ 'setlocal *, 0', %q{ x = true }, ],
+ [ 'setlocal *, 1', %q{ x = nil; -> { x = true }.call }, ],
+ [ 'setlocal', %q{ x = nil; -> { -> { x = true }.() }.() }, ],
+ [ 'getlocal *, 0', %q{ x = true; x }, ],
+ [ 'getlocal *, 1', %q{ x = true; -> { x }.call }, ],
+ [ 'getlocal', %q{ x = true; -> { -> { x }.() }.() }, ],
+
+ [ 'setblockparam', <<-'},', ], # {
+ def m&b
+ b = # here
+ proc { true }
+ end
+ m { false }.call
+ },
+ [ 'getblockparam', <<-'},', ], # {
+ def m&b
+ b # here
+ end
+ m { true }.call
+ },
+ [ 'getblockparamproxy', <<-'},', ], # {
+ def m&b
+ b # here
+ .call
+ end
+ m { true }
+ },
+
+ [ 'setspecial', %q{ true if true..true }, ],
+ [ 'getspecial', %q{ $&.nil? }, ],
+ [ 'getspecial', %q{ $`.nil? }, ],
+ [ 'getspecial', %q{ $'.nil? }, ],
+ [ 'getspecial', %q{ $+.nil? }, ],
+ [ 'getspecial', %q{ $1.nil? }, ],
+ [ 'getspecial', %q{ $128.nil? }, ],
+
+ [ 'getglobal', %q{ String === $0 }, ],
+ [ 'getglobal', %q{ $_.nil? }, ],
+ [ 'setglobal', %q{ $0 = "true" }, ],
+
+ [ 'setinstancevariable', %q{ @x = true }, ],
+ [ 'getinstancevariable', %q{ @x = true; @x }, ],
+
+ [ 'setclassvariable', %q{ class A; @@x = true; end }, ],
+ [ 'getclassvariable', %q{ class A; @@x = true; @@x end }, ],
+
+ [ 'setconstant', %q{ X = true }, ],
+ [ 'setconstant', %q{ Object::X = true }, ],
+ [ 'getconstant', %q{ X = true; X }, ],
+ [ 'getconstant', %q{ X = true; Object::X }, ],
+
+ [ 'getinlinecache / setinlinecache', %q{ def x; X; end; X = true; x; x; x }, ],
+
+ [ 'putnil', %q{ $~ == nil }, ],
+ [ 'putself', %q{ $~ != self }, ],
+ [ 'putobject INT2FIX(0)', %q{ $~ != 0 }, ],
+ [ 'putobject INT2FIX(1)', %q{ $~ != 1 }, ],
+ [ 'putobject', %q{ $~ != -1 }, ],
+ [ 'putobject', %q{ $~ != /x/ }, ],
+ [ 'putobject', %q{ $~ != :x }, ],
+ [ 'putobject', %q{ $~ != (1..2) }, ],
+ [ 'putobject', %q{ $~ != true }, ],
+ [ 'putobject', %q{ /(?<x>x)/ =~ "x"; x == "x" }, ],
+
+ [ 'putspecialobject', %q{ {//=>true}[//] }, ],
+ [ 'putstring', %q{ "true" }, ],
+ [ 'tostring / concatstrings', %q{ "#{true}" }, ],
+ [ 'toregexp', %q{ /#{true}/ =~ "true" && $~ }, ],
+ [ 'intern', %q{ :"#{true}" }, ],
+
+ [ 'newarray', %q{ ["true"][0] }, ],
+ [ 'pushtoarraykwsplat', %q{ [**{x:'true'}][0][:x] }, ],
+ [ 'duparray', %q{ [ true ][0] }, ],
+ [ 'expandarray', %q{ y = [ true, false, nil ]; x, = y; x }, ],
+ [ 'expandarray', %q{ y = [ true, false, nil ]; x, *z = y; x }, ],
+ [ 'expandarray', %q{ y = [ true, false, nil ]; x, *z, w = y; x }, ],
+ [ 'splatarray', %q{ x, = *(y = true), false; x }, ],
+ [ 'concatarray', %q{ ["t", "r", *x = "u", "e"].join }, ],
+ [ 'concatarray', <<-'},', ], # {
+ class X; def to_a; ['u']; end; end
+ ['t', 'r', *X.new, 'e'].join
+ },
+ [ 'concatarray', <<-'},', ], # {
+ r = false
+ t = [true, nil]
+ q, w, e = r, *t # here
+ w
+ },
+
+ [ 'newhash', %q{ x = {}; x[x] = true }, ],
+ [ 'newhash', %q{ x = true; { x => x }[x] }, ],
+ [ 'newhashfromarray', %q{ { a: true }[:a] }, ],
+ [ 'newrange', %q{ x = 1; [*(0..x)][0] == 0 }, ],
+ [ 'newrange', %q{ x = 1; [*(0...x)][0] == 0 }, ],
+
+ [ 'pop', %q{ def x; true; end; x }, ],
+ [ 'dup', %q{ x = y = true; x }, ],
+ [ 'dupn', %q{ Object::X ||= true }, ],
+ [ 'reverse', %q{ q, (w, e), r = 1, [2, 3], 4; e == 3 }, ],
+ [ 'swap', %q{ !!defined?([[]]) }, ],
+ [ 'swap', <<-'},', ], # {
+ x = [[false, true]]
+ for i, j in x # here
+ ;
+ end
+ j
+ },
+
+ [ 'topn', %q{ x, y = [], 0; x[*y], = [true, false]; x[0] }, ],
+ [ 'setn', %q{ x, y = [], 0; x[*y] = true ; x[0] }, ],
+ [ 'adjuststack', %q{ x = [true]; x[0] ||= nil; x[0] }, ],
+
+ [ 'defined', %q{ !defined?(x) }, ],
+ [ 'checkkeyword', %q{ def x x:rand;x end; x x: true }, ],
+ [ 'checktype', %q{ x = true; "#{x}" }, ],
+ [ 'checkmatch', <<-'},', ], # {
+ x = y = true
+ case x
+ when false
+ y = false
+ when true # here
+ y = nil
+ end
+ y == nil
+ },
+ [ 'checkmatch', <<-'},', ], # {
+ x, y = true, [false]
+ case x
+ when *y # here
+ z = false
+ else
+ z = true
+ end
+ z
+ },
+ [ 'checkmatch', <<-'},', ], # {
+ x = false
+ begin
+ raise
+ rescue # here
+ x = true
+ end
+ x
+ },
+
+ [ 'defineclass', %q{ module X; true end }, ],
+ [ 'defineclass', %q{ X = Module.new; module X; true end }, ],
+ [ 'defineclass', %q{ class X; true end }, ],
+ [ 'defineclass', %q{ X = Class.new; class X; true end }, ],
+ [ 'defineclass', %q{ X = Class.new; class Y < X; true end }, ],
+ [ 'defineclass', %q{ X = Class.new; class << X; true end }, ],
+ [ 'defineclass', <<-'},', ], # {
+ X = Class.new
+ Y = Class.new(X)
+ class Y < X
+ true
+ end
+ },
+
+ [ 'opt_send_without_block', %q{ true.to_s }, ],
+ [ 'send', %q{ true.tap {|i| i.to_s } }, ],
+ [ 'leave', %q{ def x; true; end; x }, ],
+ [ 'invokesuper', <<-'},', ], # {
+ class X < String
+ def empty?
+ super # here
+ end
+ end
+ X.new.empty?
+ },
+ [ 'invokeblock', <<-'},', ], # {
+ def x
+ return yield self # here
+ end
+ x do
+ true
+ end
+ },
+
+ [ 'opt_str_freeze', %q{ 'true'.freeze }, ],
+ [ 'opt_nil_p', %q{ nil.nil? }, ],
+ [ 'opt_nil_p', %q{ !Object.nil? }, ],
+ [ 'opt_nil_p', %q{ Class.new{def nil?; true end}.new.nil? }, ],
+ [ 'opt_str_uminus', %q{ -'true' }, ],
+ [ 'opt_str_freeze', <<-'},', ], # {
+ class String
+ def freeze
+ true
+ end
+ end
+ 'true'.freeze
+ },
+
+ [ 'opt_duparray_send', %q{ x = :a; [:a, :b].include?(x) }, ],
+ [ 'opt_duparray_send', <<-'},', ], # {
+ class Array
+ def include?(i)
+ i == 1
+ end
+ end
+ x = 1
+ [:a, :b].include?(x)
+ },
+
+ [ 'opt_newarray_send', %q{ ![ ].hash.nil? }, ],
+
+ [ 'opt_newarray_send', %q{ v=2; [1, Object.new, 2].include?(v) }, ],
+
+ [ 'opt_newarray_send', %q{ [ ].max.nil? }, ],
+ [ 'opt_newarray_send', %q{ [1, x = 2, 3].max == 3 }, ],
+ [ 'opt_newarray_send', <<-'},', ], # {
+ class Array
+ def max
+ true
+ end
+ end
+ [1, x = 2, 3].max
+ },
+ [ 'opt_newarray_send', %q{ [ ].min.nil? }, ],
+ [ 'opt_newarray_send', %q{ [3, x = 2, 1].min == 1 }, ],
+ [ 'opt_newarray_send', <<-'},', ], # {
+ class Array
+ def min
+ true
+ end
+ end
+ [3, x = 2, 1].min
+ },
+ [ 'opt_newarray_send', %q{ v = 1.23; [v, v*2].pack("E*").unpack("E*") == [v, v*2] }, ],
+ [ 'opt_newarray_send', %q{ v = 4.56; b = +"x"; [v, v*2].pack("E*", buffer: b); b[1..].unpack("E*") == [v, v*2] }, ],
+ [ 'opt_newarray_send', <<-'},', ], # {
+ v = 7.89;
+ b = +"x";
+ class Array
+ alias _pack pack
+ def pack(s, buffer: nil, prefix: "y")
+ buffer ||= +"b"
+ buffer << prefix
+ _pack(s, buffer: buffer)
+ end
+ end
+ tests = []
+
+ ret = [v].pack("E*", prefix: "z")
+ tests << (ret[0..1] == "bz")
+ tests << (ret[2..].unpack("E*") == [v])
+
+ ret = [v].pack("E*")
+ tests << (ret[0..1] == "by")
+ tests << (ret[2..].unpack("E*") == [v])
+
+ [v, v*2, v*3].pack("E*", buffer: b)
+ tests << (b[0..1] == "xy")
+ tests << (b[2..].unpack("E*") == [v, v*2, v*3])
+
+ class Array
+ def pack(_fmt, buffer:) = buffer
+ end
+
+ b = nil
+ tests << [v].pack("E*", buffer: b).nil?
+
+ class Array
+ def pack(_fmt, **kw) = kw.empty?
+ end
+
+ tests << [v].pack("E*") == true
+
+ tests.all? or puts tests
+ },
+
+ [ 'throw', %q{ false.tap { break true } }, ],
+ [ 'branchif', %q{ x = nil; x ||= true }, ],
+ [ 'branchif', %q{ x = true; x ||= nil; x }, ],
+ [ 'branchunless', %q{ x = 1; x &&= true }, ],
+ [ 'branchunless', %q{ x = nil; x &&= true; x.nil? }, ],
+ [ 'branchnil', %q{ x = true; x&.to_s }, ],
+ [ 'branchnil', %q{ x = nil; (x&.to_s).nil? }, ],
+ [ 'jump', <<-'},', ], # {
+ y = 1
+ x = if y == 0 then nil elsif y == 1 then true else nil end
+ x
+ },
+ [ 'jump', <<-'},', ], # {
+ # ultra complicated situation: this ||= assignment only generates
+ # 15 instructions, not including the class definition.
+ class X; attr_accessor :x; end
+ x = X.new
+ x&.x ||= true # here
+ },
+
+ [ 'once', %q{ /#{true}/o =~ "true" && $~ }, ],
+ [ 'once', <<-'},', ], # {
+ def once expr
+ return /#{expr}/o # here
+ end
+ x = once(true); x = once(false); x = once(nil);
+ x =~ "true" && $~
+ },
+ [ 'once', <<-'},', ], # {
+ # recursive once
+ def once n
+ return %r/#{
+ if n == 0
+ true
+ else
+ once(n-1) # here
+ end
+ }/ox
+ end
+ x = once(128); x = once(7); x = once(16);
+ x =~ "true" && $~
+ },
+ [ 'once', <<-'},', ], # {
+ # inter-thread lockup situation
+ def once n
+ return Thread.start n do |m|
+ Thread.pass
+ next %r/#{
+ sleep m # here
+ true
+ }/ox
+ end
+ end
+ x = once(1); y = once(0.1); z = y.value
+ z =~ "true" && $~
+ },
+
+ [ 'opt_case_dispatch', %q{ case 0 when 1.1 then false else true end }, ],
+ [ 'opt_case_dispatch', %q{ case 1.0 when 1.1 then false else true end }, ],
+
+ [ 'opt_plus', %q{ 1 + 1 == 2 }, ],
+ if defined? $FIXNUM_MAX then
+ [ 'opt_plus', %Q{ #{ $FIXNUM_MAX } + 1 == #{ $FIXNUM_MAX + 1 } }, ]
+ end,
+ [ 'opt_plus', %q{ 1.0 + 1.0 == 2.0 }, ],
+ [ 'opt_plus', %q{ x = +0.0.next_float; x + x >= x }, ],
+ [ 'opt_plus', %q{ 't' + 'rue' }, ],
+ [ 'opt_plus', %q{ ( ['t'] + ['r', ['u', ['e'], ], ] ).join }, ],
+ [ 'opt_plus', %q{ Time.at(1) + 1 == Time.at(2) }, ],
+ [ 'opt_minus', %q{ 1 - 1 == 0 }, ],
+ if defined? $FIXNUM_MIN then
+ [ 'opt_minus', %Q{ #{ $FIXNUM_MIN } - 1 == #{ $FIXNUM_MIN - 1 } }, ]
+ end,
+ [ 'opt_minus', %q{ 1.0 - 1.0 == 0.0 }, ],
+ [ 'opt_minus', %q{ x = -0.0.prev_float; x - x == 0.0 }, ],
+ [ 'opt_minus', %q{ ( [false, true] - [false] )[0] }, ],
+ [ 'opt_mult', %q{ 1 * 1 == 1 }, ],
+ [ 'opt_mult', %q{ 1.0 * 1.0 == 1.0 }, ],
+ [ 'opt_mult', %q{ x = +0.0.next_float; x * x <= x }, ],
+ [ 'opt_mult', %q{ ( "ruet" * 3 )[7,4] }, ],
+ [ 'opt_div', %q{ 1 / 1 == 1 }, ],
+ [ 'opt_div', %q{ 1.0 / 1.0 == 1.0 }, ],
+ [ 'opt_div', %q{ x = +0.0.next_float; x / x >= x }, ],
+ [ 'opt_div', %q{ x = 1/2r; x / x == 1 }, ],
+ [ 'opt_mod', %q{ 1 % 1 == 0 }, ],
+ [ 'opt_mod', %q{ 1.0 % 1.0 == 0.0 }, ],
+ [ 'opt_mod', %q{ x = +0.0.next_float; x % x == 0.0 }, ],
+ [ 'opt_mod', %q{ '%s' % [ true ] }, ],
+
+ [ 'opt_eq', %q{ 1 == 1 }, ],
+ [ 'opt_eq', <<-'},', ], # {
+ class X; def == other; true; end; end
+ X.new == true
+ },
+ [ 'opt_neq', %q{ 1 != 0 }, ],
+ [ 'opt_neq', <<-'},', ], # {
+ class X; def != other; true; end; end
+ X.new != true
+ },
+
+ [ 'opt_lt', %q{ -1 < 0 }, ],
+ [ 'opt_lt', %q{ -1.0 < 0.0 }, ],
+ [ 'opt_lt', %q{ -0.0.prev_float < 0.0 }, ],
+ [ 'opt_lt', %q{ ?a < ?z }, ],
+ [ 'opt_le', %q{ -1 <= 0 }, ],
+ [ 'opt_le', %q{ -1.0 <= 0.0 }, ],
+ [ 'opt_le', %q{ -0.0.prev_float <= 0.0 }, ],
+ [ 'opt_le', %q{ ?a <= ?z }, ],
+ [ 'opt_gt', %q{ 1 > 0 }, ],
+ [ 'opt_gt', %q{ 1.0 > 0.0 }, ],
+ [ 'opt_gt', %q{ +0.0.next_float > 0.0 }, ],
+ [ 'opt_gt', %q{ ?z > ?a }, ],
+ [ 'opt_ge', %q{ 1 >= 0 }, ],
+ [ 'opt_ge', %q{ 1.0 >= 0.0 }, ],
+ [ 'opt_ge', %q{ +0.0.next_float >= 0.0 }, ],
+ [ 'opt_ge', %q{ ?z >= ?a }, ],
+
+ [ 'opt_ltlt', %q{ +'' << 'true' }, ],
+ [ 'opt_ltlt', %q{ ([] << 'true').join }, ],
+ [ 'opt_ltlt', %q{ (1 << 31) == 2147483648 }, ],
+
+ [ 'opt_aref', %q{ ['true'][0] }, ],
+ [ 'opt_aref', %q{ { 0 => 'true'}[0] }, ],
+ [ 'opt_aref', %q{ 'true'[0] == ?t }, ],
+ [ 'opt_aset', %q{ [][0] = true }, ],
+ [ 'opt_aset', %q{ {}[0] = true }, ],
+ [ 'opt_aset', %q{ x = +'frue'; x[0] = 't'; x }, ],
+ [ 'opt_aset', <<-'},', ], # {
+ # opt_aref / opt_aset mixup situation
+ class X; def x; {}; end; end
+ x = X.new
+ x&.x[true] ||= true # here
+ },
+
+ [ 'opt_length', %q{ 'true' .length == 4 }, ],
+ [ 'opt_length', %q{ :true .length == 4 }, ],
+ [ 'opt_length', %q{ [ 'true' ] .length == 1 }, ],
+ [ 'opt_length', %q{ { 'true' => 1 }.length == 1 }, ],
+ [ 'opt_size', %q{ 'true' .size == 4 }, ],
+ [ 'opt_size', %q{ 1.size >= 4 }, ],
+ [ 'opt_size', %q{ [ 'true' ] .size == 1 }, ],
+ [ 'opt_size', %q{ { 'true' => 1 }.size == 1 }, ],
+ [ 'opt_empty_p', %q{ ''.empty? }, ],
+ [ 'opt_empty_p', %q{ [].empty? }, ],
+ [ 'opt_empty_p', %q{ {}.empty? }, ],
+ [ 'opt_empty_p', %q{ Thread::Queue.new.empty? }, ],
+
+ [ 'opt_succ', %q{ 1.succ == 2 }, ],
+ if defined? $FIXNUM_MAX then
+ [ 'opt_succ',%Q{ #{ $FIXNUM_MAX }.succ == #{ $FIXNUM_MAX + 1 } }, ]
+ end,
+ [ 'opt_succ', %q{ '1'.succ == '2' }, ],
+
+ [ 'opt_not', %q{ ! false }, ],
+ [ 'opt_neq', <<-'},', ], # {
+ class X; def !; true; end; end
+ ! X.new
+ },
+
+ [ 'opt_regexpmatch2', %q{ /true/ =~ 'true' && $~ }, ],
+ [ 'opt_regexpmatch2', <<-'},', ], # {
+ class Regexp; def =~ other; true; end; end
+ /true/ =~ 'true'
+ },
+ [ 'opt_regexpmatch2', %q{ 'true' =~ /true/ && $~ }, ],
+ [ 'opt_regexpmatch2', <<-'},', ], # {
+ class String; def =~ other; true; end; end
+ 'true' =~ /true/
+ },
+]
+
+# normal path
+tests.compact.each do |(insn, expr, *a)|
+ if a.last.is_a?(Hash)
+ a = a.dup
+ kw = a.pop
+ assert_equal 'true', expr, insn, *a, **kw
+ else
+ assert_equal 'true', expr, insn, *a
+ end
+end
+
+# with trace
+tests.compact.each {|(insn, expr, *a)|
+ progn = "set_trace_func(proc{})\n" + expr
+ if a.last.is_a?(Hash)
+ a = a.dup
+ kw = a.pop
+ assert_equal 'true', progn, 'trace_' + insn, *a, **kw
+ else
+ assert_equal 'true', progn, 'trace_' + insn, *a
+ end
+}
+
+assert_normal_exit("#{<<-"begin;"}\n#{<<-'end;'}")
+begin;
+ RubyVM::InstructionSequence.compile("", debug_level: 5)
+end;
diff --git a/bootstraptest/test_io.rb b/bootstraptest/test_io.rb
index 1d2b19368a..4081769a8c 100644
--- a/bootstraptest/test_io.rb
+++ b/bootstraptest/test_io.rb
@@ -1,3 +1,4 @@
+/freebsd/ =~ RUBY_PLATFORM or
assert_finish 5, %q{
r, w = IO.pipe
t1 = Thread.new { r.sysread(1) }
@@ -30,7 +31,8 @@ assert_finish 10, %q{
end
}, '[ruby-dev:32566]'
-assert_finish 1, %q{
+/freebsd/ =~ RUBY_PLATFORM or
+assert_finish 5, %q{
r, w = IO.pipe
Thread.new {
w << "ab"
@@ -52,7 +54,7 @@ assert_equal 'ok', %q{
STDIN.reopen(rw)
STDIN.reopen(save)
rw.close
- File.unlink(tmpname) unless RUBY_PLATFORM['nacl']
+ File.unlink(tmpname)
:ok
}
@@ -69,7 +71,7 @@ assert_equal 'ok', %q{
STDIN.print "a"
STDIN.reopen(save)
rw.close
- File.unlink(tmpname) unless RUBY_PLATFORM['nacl']
+ File.unlink(tmpname)
:ok
}
@@ -83,12 +85,13 @@ assert_normal_exit %q{
ARGF.set_encoding "foo"
}
+/(freebsd|mswin)/ =~ RUBY_PLATFORM or
10.times do
assert_normal_exit %q{
at_exit { p :foo }
megacontent = "abc" * 12345678
- #File.open("megasrc", "w") {|f| f << megacontent }
+ #File.write("megasrc", megacontent)
t0 = Thread.main
Thread.new { sleep 0.001 until t0.stop?; Process.kill(:INT, $$) }
diff --git a/bootstraptest/test_jump.rb b/bootstraptest/test_jump.rb
index 595aaa7c4b..8751343b1f 100644
--- a/bootstraptest/test_jump.rb
+++ b/bootstraptest/test_jump.rb
@@ -146,15 +146,16 @@ assert_equal %q{131}, %q{
end
}
}
-assert_equal %q{ok}, %q{
+assert_match %r{Invalid retry}, %q{
+$stderr = STDOUT
begin
eval %q{
1.times{
retry
}
}
-rescue SyntaxError
- :ok
+rescue SyntaxError => e
+ e.message
end
}
assert_equal %q{3}, %q{
@@ -291,18 +292,23 @@ assert_equal "true", %q{
end
end
end
- s = "foo"
+ s = +"foo"
s.return_eigenclass == class << s; self; end
}, '[ruby-core:21379]'
-assert_equal "true", %q{
- class Object
- def yield_eigenclass
- class << self
- yield self
+assert_match %r{Invalid yield}, %q{
+$stderr = STDOUT
+begin
+ eval %q{
+ class Object
+ def yield_eigenclass
+ class << self
+ yield self
+ end
end
end
- end
- s = "foo"
- s.yield_eigenclass {|c| c == class << s; self; end }
-}, '[ruby-dev:40975]'
+ }
+rescue SyntaxError => e
+ e.message
+end
+}
diff --git a/bootstraptest/test_literal.rb b/bootstraptest/test_literal.rb
index aa65bddae1..39e6527027 100644
--- a/bootstraptest/test_literal.rb
+++ b/bootstraptest/test_literal.rb
@@ -15,17 +15,17 @@ assert_equal 'sym', ':sym'
assert_equal ':sym', ':sym.inspect'
assert_equal 'Symbol', ':sym.class'
assert_equal '1234', '1234'
-assert_equal 'Fixnum', '1234.class'
+assert_equal 'Integer', '1234.class'
assert_equal '1234', '1_2_3_4'
-assert_equal 'Fixnum', '1_2_3_4.class'
+assert_equal 'Integer', '1_2_3_4.class'
assert_equal '18', '0x12'
-assert_equal 'Fixnum', '0x12.class'
+assert_equal 'Integer', '0x12.class'
assert_equal '15', '0o17'
-assert_equal 'Fixnum', '0o17.class'
+assert_equal 'Integer', '0o17.class'
assert_equal '5', '0b101'
-assert_equal 'Fixnum', '0b101.class'
+assert_equal 'Integer', '0b101.class'
assert_equal '123456789012345678901234567890', '123456789012345678901234567890'
-assert_equal 'Bignum', '123456789012345678901234567890.class'
+assert_equal 'Integer', '123456789012345678901234567890.class'
assert_equal '2.0', '2.0'
assert_equal 'Float', '1.3.class'
@@ -65,10 +65,12 @@ assert_equal ':a3c', ':"a#{1+2}c".inspect'
assert_equal 'Symbol', ':"a#{1+2}c".class'
# xstring
-unless nacl?
+# WASI doesn't support spawning a new process for now.
+if /wasi/ !~ target_platform
assert_equal "foo\n", %q(`echo foo`)
assert_equal "foo\n", %q(s = "foo"; `echo #{s}`)
end
+assert_equal "ECHO FOO", %q(def `(s) s.upcase; end; `echo foo`)
# regexp
assert_equal '', '//.source'
@@ -99,7 +101,7 @@ assert_equal '[3]', '[3].inspect'
assert_equal '3', 'a = [3]; a[0]'
assert_equal 'Array', '[1,2].class'
assert_equal '2', '[1,2].size'
-assert_equal '[1, 2]', '[1,2].inspect'
+assert_equal '[1, 2]', '[1,2].inspect'
assert_equal 'Array', '[1,2,3,4,5].class'
assert_equal '5', '[1,2,3,4,5].size'
assert_equal '[1, 2, 3, 4, 5]', '[1,2,3,4,5].inspect'
@@ -115,16 +117,16 @@ assert_equal '1', 'a = [obj = Object.new]; a.size'
assert_equal 'true', 'a = [obj = Object.new]; a[0] == obj'
assert_equal '5', 'a = [1,2,3]; a[1] = 5; a[1]'
assert_equal 'bar', '[*:foo];:bar'
-assert_equal '[1, 2]', 'def nil.to_a; [2]; end; [1, *nil]'
-assert_equal '[1, 2]', 'def nil.to_a; [1, 2]; end; [*nil]'
-assert_equal '[0, 1, {2=>3}]', '[0, *[1], 2=>3]', "[ruby-dev:31592]"
+assert_equal '[]', 'def nil.to_a; [1, 2]; end; [*nil]'
+assert_equal '[1]', 'def nil.to_a; [2]; end; [1, *nil]'
+assert_equal '[0, 1, {2 => 3}]', '[0, *[1], 2=>3]', "[ruby-dev:31592]"
# hash
assert_equal 'Hash', '{}.class'
assert_equal '{}', '{}.inspect'
assert_equal 'Hash', '{1=>2}.class'
-assert_equal '{1=>2}', '{1=>2}.inspect'
+assert_equal '{1 => 2}', '{1=>2}.inspect'
assert_equal '2', 'h = {1 => 2}; h[1]'
assert_equal '0', 'h = {1 => 2}; h.delete(1); h.size'
assert_equal '', 'h = {1 => 2}; h.delete(1); h[1]'
@@ -169,7 +171,7 @@ assert_equal 'a', 'r = ("a".."c"); r.begin'
assert_equal 'c', 'r = ("a".."c"); r.end'
assert_equal 'String', '__FILE__.class'
-assert_equal 'Fixnum', '__LINE__.class'
+assert_equal 'Integer', '__LINE__.class'
###
@@ -225,6 +227,24 @@ assert_equal 'ok', %q{ # long hash literal (optimized)
:ok
}
+assert_equal 'ok', %q{ # Bug #15536
+ eval <<-END
+ {
+ **{
+ a0: nil, a1: nil, a2: nil, a3: nil, a4: nil, a5: nil, a6: nil, a7: nil, a8: nil,
+ },
+ a0: nil, a1: nil, a2: nil, a3: nil, a4: nil, a5: nil, a6: nil, a7: nil, a8: nil,
+ **{
+ c: nil
+ },
+ b0: nil, b1: nil, b2: nil, b3: nil, b4: nil, b5: nil, b6: nil, b7: nil, b8: nil,
+ b9: nil, b10: nil, b11: nil, b12: nil, b13: nil, b14: nil, b15: nil, b16: nil,
+ b17: nil, b18: nil, b19: nil, b20: nil, b21: nil,
+ }
+ END
+ :ok
+}
+
assert_equal 'ok', %q{
[print(:ok), exit] # void literal with side-effect
:dummy
diff --git a/bootstraptest/test_literal_suffix.rb b/bootstraptest/test_literal_suffix.rb
index 4316c9e040..7a4d67d0fa 100644
--- a/bootstraptest/test_literal_suffix.rb
+++ b/bootstraptest/test_literal_suffix.rb
@@ -46,9 +46,9 @@ assert_equal '1', '1rescue nil'
assert_equal '10000000000000000001/10000000000000000000',
'1.0000000000000000001r'
-assert_equal 'syntax error, unexpected tIDENTIFIER, expecting end-of-input',
- %q{begin eval('1ir', nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end}
-assert_equal 'syntax error, unexpected tIDENTIFIER, expecting end-of-input',
- %q{begin eval('1.2ir', nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end}
-assert_equal 'syntax error, unexpected tIDENTIFIER, expecting end-of-input',
- %q{begin eval('1e1r', nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end}
+assert_equal 'unexpected local variable or method, expecting end-of-input',
+ %q{begin eval('1ir', nil, '', 0); rescue SyntaxError => e; e.message[/(?:\^~*|\A:(?:\d+:)? syntax error,) (.*)/, 1]; end}
+assert_equal 'unexpected local variable or method, expecting end-of-input',
+ %q{begin eval('1.2ir', nil, '', 0); rescue SyntaxError => e; e.message[/(?:\^~*|\A:(?:\d+:)? syntax error,) (.*)/, 1]; end}
+assert_equal 'unexpected local variable or method, expecting end-of-input',
+ %q{begin eval('1e1r', nil, '', 0); rescue SyntaxError => e; e.message[/(?:\^~*|\A:(?:\d+:)? syntax error,) (.*)/, 1]; end}
diff --git a/bootstraptest/test_load.rb b/bootstraptest/test_load.rb
index e63c93a8f4..fa8d31c098 100644
--- a/bootstraptest/test_load.rb
+++ b/bootstraptest/test_load.rb
@@ -1,9 +1,9 @@
assert_equal 'ok', %q{
- open("require-lock-test.rb", "w") {|f|
- f.puts "sleep 0.1"
- f.puts "module M"
- f.puts "end"
- }
+ File.write("require-lock-test.rb", <<-END)
+ sleep 0.1
+ module M
+ end
+ END
$:.unshift Dir.pwd
vs = (1..2).map {|i|
Thread.start {
@@ -16,7 +16,7 @@ assert_equal 'ok', %q{
assert_equal 'ok', %q{
%w[a a/foo b].each {|d| Dir.mkdir(d)}
- open("b/foo", "w") {|f| f.puts "$ok = :ok"}
+ File.write("b/foo", "$ok = :ok\n")
$:.replace(%w[a b])
begin
load "foo"
diff --git a/bootstraptest/test_method.rb b/bootstraptest/test_method.rb
index 3462aa9434..78aab73485 100644
--- a/bootstraptest/test_method.rb
+++ b/bootstraptest/test_method.rb
@@ -22,7 +22,7 @@ assert_match /\Awrong number of arguments \(.*\b0\b.* 1\)\z/, %q{
}
# default argument
-assert_equal '1', 'def m(x=1) x end; m()'
+assert_equal '1', 'def m(x=1) x end; m();'
assert_equal '1', 'def m(x=7) x end; m(1)'
assert_equal '1', 'def m(a,x=1) x end; m(7)'
assert_equal '1', 'def m(a,x=7) x end; m(7,1)'
@@ -340,24 +340,6 @@ assert_equal '1', %q( class C; def m() 7 end; private :m end
assert_equal '1', %q( class C; def m() 1 end; private :m end
C.new.send(:m) )
-# with block
-assert_equal '[[:ok1, :foo], [:ok2, :foo, :bar]]',
-%q{
- class C
- def [](a)
- $ary << [yield, a]
- end
- def []=(a, b)
- $ary << [yield, a, b]
- end
- end
-
- $ary = []
- C.new[:foo, &lambda{:ok1}]
- C.new[:foo, &lambda{:ok2}] = :bar
- $ary
-}
-
# with
assert_equal '[:ok1, [:ok2, 11]]', %q{
class C
@@ -404,7 +386,6 @@ $result
# aset and splat
assert_equal '4', %q{class Foo;def []=(a,b,c,d);end;end;Foo.new[1,*a=[2,3]]=4}
-assert_equal '4', %q{class Foo;def []=(a,b,c,d);end;end;def m(&blk)Foo.new[1,*a=[2,3],&blk]=4;end;m{}}
# post test
assert_equal %q{[1, 2, :o1, :o2, [], 3, 4, NilClass, nil, nil]}, %q{
@@ -1107,10 +1088,6 @@ assert_equal 'ok', %q{
'ok'
end
}
-assert_equal 'ok', %q{
- [0][0, &proc{}] += 21
- 'ok'
-}, '[ruby-core:30534]'
# should not cache when splat
assert_equal 'ok', %q{
@@ -1190,3 +1167,270 @@ assert_equal 'DC', %q{
test2 o1, [], block
$result.join
}
+
+assert_equal 'ok', %q{
+ def foo
+ binding
+ ["ok"].first
+ end
+ foo
+ foo
+}, '[Bug #20178]'
+
+assert_equal 'ok', %q{
+ def bar(x); x; end
+ def foo(...); bar(...); end
+ foo('ok')
+}
+
+assert_equal 'ok', %q{
+ def bar(x); x; end
+ def foo(z, ...); bar(...); end
+ foo(1, 'ok')
+}
+
+assert_equal 'ok', %q{
+ def bar(x, y); x; end
+ def foo(...); bar("ok", ...); end
+ foo(1)
+}
+
+assert_equal 'ok', %q{
+ def bar(x); x; end
+ def foo(...); 1.times { return bar(...) }; end
+ foo("ok")
+}
+
+assert_equal 'ok', %q{
+ def bar(x); x; end
+ def foo(...); x = nil; 1.times { x = bar(...) }; x; end
+ foo("ok")
+}
+
+assert_equal 'ok', %q{
+ def bar(x); yield; end
+ def foo(...); bar(...); end
+ foo(1) { "ok" }
+}
+
+assert_equal 'ok', %q{
+ def baz(x); x; end
+ def bar(...); baz(...); end
+ def foo(...); bar(...); end
+ foo("ok")
+}
+
+assert_equal '[1, 2, 3, 4]', %q{
+ def baz(a, b, c, d); [a, b, c, d]; end
+ def bar(...); baz(1, ...); end
+ def foo(...); bar(2, ...); end
+ foo(3, 4)
+}
+
+assert_equal 'ok', %q{
+ class Foo; def self.foo(x); x; end; end
+ class Bar < Foo; def self.foo(...); super; end; end
+ Bar.foo('ok')
+}
+
+assert_equal 'ok', %q{
+ class Foo; def self.foo(x); x; end; end
+ class Bar < Foo; def self.foo(...); super(...); end; end
+ Bar.foo('ok')
+}
+
+assert_equal 'ok', %q{
+ class Foo; def self.foo(x, y); x + y; end; end
+ class Bar < Foo; def self.foo(...); super("o", ...); end; end
+ Bar.foo('k')
+}
+
+assert_equal 'ok', %q{
+ def bar(a); a; end
+ def foo(...); lambda { bar(...) }; end
+ foo("ok").call
+}
+
+assert_equal 'ok', %q{
+ class Foo; def self.foo(x, y); x + y; end; end
+ class Bar < Foo; def self.y(&b); b; end; def self.foo(...); y { super("o", ...) }; end; end
+ Bar.foo('k').call
+}
+
+assert_equal 'ok', %q{
+ def baz(n); n; end
+ def foo(...); bar = baz(...); lambda { lambda { bar } }; end
+ foo("ok").call.call
+}
+
+assert_equal 'ok', %q{
+ class A; def self.foo(...); new(...); end; attr_reader :b; def initialize(a, b:"ng"); @a = a; @b = b; end end
+ A.foo(1).b
+ A.foo(1, b: "ok").b
+}
+
+assert_equal 'ok', %q{
+ class A; def initialize; @a = ["ok"]; end; def first(...); @a.first(...); end; end
+ def call x; x.first; end
+ def call1 x; x.first(1); end
+ call(A.new)
+ call1(A.new).first
+}
+
+assert_equal 'ok', %q{
+ class A; def foo; yield("o"); end; end
+ class B < A; def foo(...); super { |x| yield(x + "k") }; end; end
+ B.new.foo { |x| x }
+}
+
+assert_equal "[1, 2, 3, 4]", %q{
+ def foo(*b) = b
+
+ def forward(...)
+ splat = [1,2,3]
+ foo(*splat, ...)
+ end
+
+ forward(4)
+}
+
+assert_equal "[1, 2, 3, 4]", %q{
+class A
+ def foo(*b) = b
+end
+
+class B < A
+ def foo(...)
+ splat = [1,2,3]
+ super(*splat, ...)
+ end
+end
+
+B.new.foo(4)
+}
+
+assert_equal 'ok', %q{
+ class A; attr_reader :iv; def initialize(...) = @iv = "ok"; end
+ A.new("foo", bar: []).iv
+}
+
+assert_equal 'ok', %q{
+ def foo(a, b) = a + b
+ def bar(...) = foo(...)
+ bar(1, 2)
+ bar(1, 2)
+ begin
+ bar(1, 2, 3)
+ "ng"
+ rescue ArgumentError
+ "ok"
+ end
+}
+
+assert_equal 'ok', %q{
+ class C
+ def foo(...) = :ok
+ def bar(...) = __send__(:foo, ...)
+ end
+
+ C.new.bar
+}
+
+assert_equal 'ok', %q{
+ class C
+ def method_missing(...) = :ok
+ def foo(...) = xyzzy(...)
+ end
+
+ C.new.foo
+}
+
+assert_equal 'ok', %q{
+ class C
+ def initialize(a)
+ end
+ end
+
+ def foo(...)
+ C.new(...)
+ :ok
+ end
+
+ foo(*["bar"])
+ foo("baz")
+}
+
+assert_equal 'ok', %q{
+ class C
+ def foo(b:)
+ b
+ end
+ end
+
+ def foo(...)
+ C.new.send(...)
+ end
+
+ foo(:foo, b: :ok)
+ foo(*["foo"], b: :ok)
+}
+
+assert_equal 'ok', %q{
+ Thing = Struct.new(:value)
+
+ Obj = Thing.new("ok")
+
+ def delegate(...)
+ Obj.value(...)
+ end
+
+ def no_args
+ delegate
+ end
+
+ def splat_args(*args)
+ delegate(*args)
+ end
+
+ no_args
+ splat_args
+}
+
+assert_equal 'ok', %q{
+ class A
+ private
+ def foo = "ng"
+ end
+
+ class B
+ def initialize(o)
+ @o = o
+ end
+
+ def foo(...) = @o.foo(...)
+ def internal_foo = foo
+ end
+
+ b = B.new(A.new)
+
+ begin
+ b.internal_foo
+ rescue NoMethodError
+ "ok"
+ end
+}
+
+assert_equal 'ok', <<~RUBY
+ def test(*, kw: false)
+ "ok"
+ end
+
+ test
+RUBY
+
+assert_equal '[1, 2, 3]', %q{
+ def target(*args) = args
+ def x = [1]
+ def forwarder(...) = target(*x, 2, ...)
+ forwarder(3).inspect
+}, '[Bug #21832] post-splat args before forwarding'
diff --git a/bootstraptest/test_objectspace.rb b/bootstraptest/test_objectspace.rb
index 862a94e376..63a8d99322 100644
--- a/bootstraptest/test_objectspace.rb
+++ b/bootstraptest/test_objectspace.rb
@@ -35,7 +35,7 @@ assert_normal_exit %q{
assert_normal_exit %q{
ObjectSpace.define_finalizer("") do
- Mutex.new.lock
+ Thread::Mutex.new.lock
end
}, '[ruby-dev:44049]'
@@ -44,3 +44,12 @@ assert_normal_exit %q{
Thread.new {}
end
}, '[ruby-core:37858]'
+
+assert_equal 'ok', %q{
+ objects_and_ids = 1000.times.map { o = Object.new; [o, o.object_id] }
+ objects_and_ids.each { |expected, id|
+ actual = ObjectSpace._id2ref(id)
+ raise "expected #{expected.inspect}, got #{actual.inspect}" unless actual.equal?(expected)
+ }
+ 'ok'
+}
diff --git a/bootstraptest/test_proc.rb b/bootstraptest/test_proc.rb
index c23394e8d2..637603243d 100644
--- a/bootstraptest/test_proc.rb
+++ b/bootstraptest/test_proc.rb
@@ -224,19 +224,6 @@ assert_equal %q{[[nil, []], [1, []], [1, [2]], [1, [2, 3]]]}, %q{
Proc.new{|a, *b| [a, b]}.call(1, 2, 3),
]
}
-assert_equal %q{0}, %q{
- pr = proc{
- $SAFE
- }
- $SAFE = 1
- pr.call
-}
-assert_equal %q{[1, 0]}, %q{
- pr = proc{
- $SAFE += 1
- }
- [pr.call, $SAFE]
-}
assert_equal %q{1}, %q{
def m(&b)
b
@@ -380,8 +367,8 @@ assert_equal 'ok', %q{
assert_equal 'ok', %q{
class Foo
- def call_it
- p = Proc.new
+ def call_it(&block)
+ p = Proc.new(&block)
p.call
end
end
diff --git a/bootstraptest/test_ractor.rb b/bootstraptest/test_ractor.rb
new file mode 100644
index 0000000000..e2a3e8dd5b
--- /dev/null
+++ b/bootstraptest/test_ractor.rb
@@ -0,0 +1,2556 @@
+# Ractor.current returns a current ractor
+assert_equal 'Ractor', %q{
+ Ractor.current.class
+}
+
+# Ractor.new returns new Ractor
+assert_equal 'Ractor', %q{
+ Ractor.new{}.class
+}
+
+# Ractor.allocate is not supported
+assert_equal "[:ok, :ok]", %q{
+ rs = []
+ begin
+ Ractor.allocate
+ rescue => e
+ rs << :ok if e.message == 'allocator undefined for Ractor'
+ end
+
+ begin
+ Ractor.new{}.dup
+ rescue
+ rs << :ok if e.message == 'allocator undefined for Ractor'
+ end
+
+ rs
+}
+
+# A Ractor can have a name
+assert_equal 'test-name', %q{
+ r = Ractor.new name: 'test-name' do
+ end
+ r.name
+}
+
+# If Ractor doesn't have a name, Ractor#name returns nil.
+assert_equal 'nil', %q{
+ r = Ractor.new do
+ end
+ r.name.inspect
+}
+
+# Raises exceptions if initialize with an invalid name
+assert_equal 'ok', %q{
+ begin
+ r = Ractor.new(name: [{}]) {}
+ rescue TypeError => e
+ 'ok'
+ end
+}
+
+# Ractor.new must call with a block
+assert_equal "must be called with a block", %q{
+ begin
+ Ractor.new
+ rescue ArgumentError => e
+ e.message
+ end
+}
+
+# Ractor#inspect
+# Return only id and status for main ractor
+assert_equal "#<Ractor:#1 running>", %q{
+ Ractor.current.inspect
+}
+
+# Return id, loc, and status for no-name ractor
+assert_match /^#<Ractor:#([^ ]*?) .+:[0-9]+ terminated>$/, %q{
+ r = Ractor.new { '' }
+ r.join
+ sleep 0.1 until r.inspect =~ /terminated/
+ r.inspect
+}
+
+# Return id, name, loc, and status for named ractor
+assert_match /^#<Ractor:#([^ ]*?) Test Ractor .+:[0-9]+ terminated>$/, %q{
+ r = Ractor.new(name: 'Test Ractor') { '' }
+ r.join
+ sleep 0.1 until r.inspect =~ /terminated/
+ r.inspect
+}
+
+# A return value of a Ractor block will be a message from the Ractor.
+assert_equal 'ok', %q{
+ # join
+ r = Ractor.new do
+ 'ok'
+ end
+ r.value
+}
+
+# Passed arguments to Ractor.new will be a block parameter
+# The values are passed with Ractor-communication pass.
+assert_equal 'ok', %q{
+ # ping-pong with arg
+ r = Ractor.new 'ok' do |msg|
+ msg
+ end
+ r.value
+}
+
+# Pass multiple arguments to Ractor.new
+assert_equal 'ok', %q{
+ # ping-pong with two args
+ r = Ractor.new 'ping', 'pong' do |msg, msg2|
+ [msg, msg2]
+ end
+ 'ok' if r.value == ['ping', 'pong']
+}
+
+# Ractor#send passes an object with copy to a Ractor
+# and Ractor.receive in the Ractor block can receive the passed value.
+assert_equal 'ok', %q{
+ r = Ractor.new do
+ msg = Ractor.receive
+ end
+ r.send 'ok'
+ r.value
+}
+
+# Ractor#receive_if can filter the message
+assert_equal '[1, 2, 3]', %q{
+ ports = 3.times.map{Ractor::Port.new}
+
+ r = Ractor.new ports do |ports|
+ ports[0] << 3
+ ports[1] << 1
+ ports[2] << 2
+ end
+ a = []
+ a << ports[1].receive # 1
+ a << ports[2].receive # 2
+ a << ports[0].receive # 3
+ a
+}
+
+# dtoa race condition
+assert_equal '[:ok, :ok, :ok]', %q{
+ n = 3
+ n.times.map{
+ Ractor.new{
+ 10_000.times{ rand.to_s }
+ :ok
+ }
+ }.map(&:value)
+}
+
+assert_equal "42", %q{
+ a = 42
+ Ractor.shareable_lambda{ a }.call
+}
+
+# Ractor.shareable_proc issue for locals in proc [Bug #18023]
+assert_equal '[:a, :b, :c, :d, :e]', %q{
+ v1, v2, v3, v4, v5 = :a, :b, :c, :d, :e
+ closure = Proc.new { [v1, v2, v3, v4, v5] }
+ Ractor.shareable_proc(&closure).call
+}
+
+# Ractor.shareable_proc makes a copy of given Proc
+assert_equal '[true, true]', %q{
+ pr1 = Proc.new do
+ self
+ end
+ pr2 = Ractor.shareable_proc(&pr1)
+
+ [pr1.call == self, pr2.call == nil]
+}
+
+# Ractor.shareable_proc keeps the original Proc intact
+assert_equal '[SyntaxError, [Object, 43, 43], Binding]', %q{
+ a = 42
+ pr1 = Proc.new do
+ [self.class, eval("a"), binding.local_variable_get(:a)]
+ end
+ a += 1
+ pr2 = Ractor.shareable_proc(&pr1)
+
+ r = []
+ begin
+ pr2.call
+ rescue SyntaxError
+ r << SyntaxError
+ end
+
+ r << pr1.call << pr1.binding.class
+}
+
+# Ractor.make_shareable mutates the original Proc
+# This is the current behavior, it's currently considered safe enough
+# because in most cases it would raise anyway due to not-shared self or not-shared captured variable value
+assert_equal '[[42, 42], Binding, true, SyntaxError, "Can\'t create Binding from isolated Proc"]', %q{
+ a = 42
+ pr1 = nil.instance_exec do
+ Proc.new do
+ [eval("a"), binding.local_variable_get(:a)]
+ end
+ end
+
+ r = [pr1.call, pr1.binding.class]
+
+ pr2 = Ractor.make_shareable(pr1)
+ r << pr1.equal?(pr2)
+
+ begin
+ pr1.call
+ rescue SyntaxError
+ r << SyntaxError
+ end
+
+ begin
+ r << pr1.binding
+ rescue ArgumentError
+ r << $!.message
+ end
+
+ r
+}
+
+# Ractor::IsolationError cases
+assert_equal '3', %q{
+ ok = 0
+
+ begin
+ a = 1
+ Ractor.shareable_proc{a}
+ a = 2
+ rescue Ractor::IsolationError => e
+ ok += 1
+ end
+
+ begin
+ cond = false
+ b = 1
+ b = 2 if cond
+ Ractor.shareable_proc{b}
+ rescue Ractor::IsolationError => e
+ ok += 1
+ end
+
+ begin
+ 1.times{|i|
+ i = 2
+ Ractor.shareable_proc{i}
+ }
+ rescue Ractor::IsolationError => e
+ ok += 1
+ end
+}
+
+###
+###
+# Ractor still has several memory corruption so skip huge number of tests
+if ENV['GITHUB_WORKFLOW'] == 'Compilations'
+ # ignore the follow
+else
+
+# Ractor.select with a Ractor argument
+assert_equal 'ok', %q{
+ # select 1
+ r1 = Ractor.new{'r1'}
+ port, obj = Ractor.select(r1)
+ if port == r1 and obj == 'r1'
+ 'ok'
+ else
+ # failed
+ [port, obj].inspect
+ end
+}
+
+# Ractor.select from two ractors.
+assert_equal '["r1", "r2"]', %q{
+ # select 2
+ p1 = Ractor::Port.new
+ p2 = Ractor::Port.new
+ r1 = Ractor.new(p1){|p1| p1 << 'r1'}
+ r2 = Ractor.new(p2){|p2| p2 << 'r2'}
+ ps = [p1, p2]
+ as = []
+ port, obj = Ractor.select(*ps)
+ ps.delete(port)
+ as << obj
+ port, obj = Ractor.select(*ps)
+ as << obj
+ as.sort #=> ["r1", "r2"]
+}
+
+# Ractor.select from multiple ractors.
+assert_equal 30.times.map { 'ok' }.to_s, %q{
+ def test n
+ rs = (1..n).map do |i|
+ Ractor.new(i) do |i|
+ "r#{i}"
+ end
+ end
+ as = []
+ all_rs = rs.dup
+
+ n.times{
+ r, obj = Ractor.select(*rs)
+ as << [r, obj]
+ rs.delete(r)
+ }
+
+ if as.map{|r, o| r.object_id}.sort == all_rs.map{|r| r.object_id}.sort &&
+ as.map{|r, o| o}.sort == (1..n).map{|i| "r#{i}"}.sort
+ 'ok'
+ else
+ 'ng'
+ end
+ end
+
+ 30.times.map{|i|
+ test i
+ }
+} unless (ENV.key?('TRAVIS') && ENV['TRAVIS_CPU_ARCH'] == 'arm64') # https://bugs.ruby-lang.org/issues/17878
+
+# Exception for empty select
+assert_match /specify at least one Ractor::Port or Ractor/, %q{
+ begin
+ Ractor.select
+ rescue ArgumentError => e
+ e.message
+ end
+}
+
+# Raise Ractor::ClosedError when try to send into a terminated ractor
+assert_equal 'ok', %q{
+ r = Ractor.new do
+ end
+
+ r.join # closed
+ sleep 0.1 until r.inspect =~ /terminated/
+
+ begin
+ r.send(1)
+ rescue Ractor::ClosedError
+ 'ok'
+ else
+ 'ng'
+ end
+}
+
+# Can mix with Thread#interrupt and Ractor#join [Bug #17366]
+assert_equal 'err', %q{
+ Ractor.new do
+ t = Thread.current
+ begin
+ Thread.new{ t.raise "err" }.join
+ rescue => e
+ e.message
+ end
+ end.value
+}
+
+# Killed Ractor's thread yields nil
+assert_equal 'nil', %q{
+ Ractor.new{
+ t = Thread.current
+ Thread.new{ t.kill }.join
+ }.value.inspect #=> nil
+}
+
+# Raise Ractor::ClosedError when try to send into a ractor with closed default port
+assert_equal 'ok', %q{
+ r = Ractor.new {
+ Ractor.current.close
+ Ractor.main << :ok
+ Ractor.receive
+ }
+
+ Ractor.receive # wait for ok
+
+ begin
+ r.send(1)
+ rescue Ractor::ClosedError
+ 'ok'
+ else
+ 'ng'
+ end
+}
+
+# Ractor.main returns main ractor
+assert_equal 'true', %q{
+ Ractor.new{
+ Ractor.main
+ }.value == Ractor.current
+}
+
+# a ractor with closed outgoing port should terminate
+assert_equal 'ok', %q{
+ Ractor.new do
+ Ractor.current.close
+ end
+
+ true until Ractor.count == 1
+ :ok
+}
+
+# an exception in a Ractor main thread will be re-raised at Ractor#receive
+assert_equal '[RuntimeError, "ok", true]', %q{
+ r = Ractor.new do
+ raise 'ok' # exception will be transferred receiver
+ end
+ begin
+ r.join
+ rescue Ractor::RemoteError => e
+ [e.cause.class, #=> RuntimeError
+ e.cause.message, #=> 'ok'
+ e.ractor == r] #=> true
+ end
+}
+
+# an exception in a Ractor will be re-raised at Ractor#value
+assert_equal '[RuntimeError, "ok", true]', %q{
+ r = Ractor.new do
+ raise 'ok' # exception will be transferred receiver
+ end
+ begin
+ r.value
+ rescue Ractor::RemoteError => e
+ [e.cause.class, #=> RuntimeError
+ e.cause.message, #=> 'ok'
+ e.ractor == r] #=> true
+ end
+}
+
+# an exception in a Ractor non-main thread will not be re-raised at Ractor#receive
+assert_equal 'ok', %q{
+ r = Ractor.new do
+ Thread.new do
+ raise 'ng'
+ end
+ sleep 0.1
+ 'ok'
+ end
+ r.value
+}
+
+# SystemExit from a Ractor is re-raised
+# [Bug #21505]
+assert_equal '[SystemExit, "exit", true]', %q{
+ r = Ractor.new { exit }
+ begin
+ r.value
+ rescue Ractor::RemoteError => e
+ [e.cause.class, #=> RuntimeError
+ e.cause.message, #=> 'ok'
+ e.ractor == r] #=> true
+ end
+}
+
+# SystemExit from a Thread inside a Ractor is re-raised
+# [Bug #21505]
+assert_equal '[SystemExit, "exit", true]', %q{
+ r = Ractor.new { Thread.new { exit }.join }
+ begin
+ r.value
+ rescue Ractor::RemoteError => e
+ [e.cause.class, #=> RuntimeError
+ e.cause.message, #=> 'ok'
+ e.ractor == r] #=> true
+ end
+}
+
+# threads in a ractor will killed
+assert_equal '{ok: 3}', %q{
+ Ractor.new Ractor.current do |main|
+ q = Thread::Queue.new
+ Thread.new do
+ q << true
+ loop{}
+ ensure
+ main << :ok
+ end
+
+ Thread.new do
+ q << true
+ while true
+ end
+ ensure
+ main << :ok
+ end
+
+ Thread.new do
+ q << true
+ sleep 1
+ ensure
+ main << :ok
+ end
+
+ # wait for the start of all threads
+ 3.times{q.pop}
+ end
+
+ 3.times.map{Ractor.receive}.tally
+} unless yjit_enabled? # YJIT: `[BUG] Bus Error at 0x000000010b7002d0` in jit_exec()
+
+# unshareable object are copied
+assert_equal 'false', %q{
+ obj = 'str'.dup
+ r = Ractor.new obj do |msg|
+ msg.object_id
+ end
+
+ obj.object_id == r.value
+}
+
+# To copy the object, now Marshal#dump is used
+assert_equal "allocator undefined for Thread", %q{
+ obj = Thread.new{}
+ begin
+ r = Ractor.new obj do |msg|
+ msg
+ end
+ rescue TypeError => e
+ e.message #=> no _dump_data is defined for class Thread
+ else
+ 'ng'
+ end
+}
+
+# send shareable and unshareable objects
+assert_equal "ok", <<~'RUBY', frozen_string_literal: false
+ port = Ractor::Port.new
+ echo_ractor = Ractor.new port do |port|
+ loop do
+ v = Ractor.receive
+ port << v
+ end
+ end
+
+ class C; end
+ module M; end
+ S = Struct.new(:a, :b, :c, :d)
+
+ shareable_objects = [
+ true,
+ false,
+ nil,
+ 1,
+ 1.1, # Float
+ 1+2r, # Rational
+ 3+4i, # Complex
+ 2**128, # Bignum
+ :sym, # Symbol
+ 'xyzzy'.to_sym, # dynamic symbol
+ 'frozen'.freeze, # frozen String
+ /regexp/, # regexp literal
+ /reg{true}exp/.freeze, # frozen dregexp
+ [1, 2].freeze, # frozen Array which only refers to shareable
+ {a: 1}.freeze, # frozen Hash which only refers to shareable
+ [{a: 1}.freeze, 'str'.freeze].freeze, # nested frozen container
+ S.new(1, 2).freeze, # frozen Struct
+ S.new(1, 2, 3, 4).freeze, # frozen Struct
+ (1..2), # Range on Struct
+ (1..), # Range on Struct
+ (..1), # Range on Struct
+ C, # class
+ M, # module
+ Ractor.current, # Ractor
+ ]
+
+ unshareable_objects = [
+ 'mutable str'.dup,
+ [:array],
+ {hash: true},
+ S.new(1, 2),
+ S.new(1, 2, 3, 4),
+ S.new("a", 2).freeze, # frozen, but refers to an unshareable object
+ ]
+
+ results = []
+
+ shareable_objects.map{|o|
+ echo_ractor << o
+ o2 = port.receive
+ results << "#{o} is copied" unless o.object_id == o2.object_id
+ }
+
+ unshareable_objects.map{|o|
+ echo_ractor << o
+ o2 = port.receive
+ results << "#{o.inspect} is not copied" if o.object_id == o2.object_id
+ }
+
+ if results.empty?
+ :ok
+ else
+ results.inspect
+ end
+RUBY
+
+# frozen Objects are shareable
+assert_equal [false, true, false].inspect, <<~'RUBY', frozen_string_literal: false
+ class C
+ def initialize freeze
+ @a = 1
+ @b = :sym
+ @c = 'frozen_str'
+ @c.freeze if freeze
+ @d = true
+ end
+ end
+
+ def check obj1
+ obj2 = Ractor.new obj1 do |obj|
+ obj
+ end.value
+
+ obj1.object_id == obj2.object_id
+ end
+
+ results = []
+ results << check(C.new(true)) # false
+ results << check(C.new(true).freeze) # true
+ results << check(C.new(false).freeze) # false
+RUBY
+
+# move example2: String
+# touching moved object causes an error
+assert_equal 'hello world', <<~'RUBY', frozen_string_literal: false
+ # move
+ r = Ractor.new do
+ obj = Ractor.receive
+ obj << ' world'
+ end
+
+ str = 'hello'
+ r.send str, move: true
+ modified = r.value
+
+ begin
+ str << ' exception' # raise Ractor::MovedError
+ rescue Ractor::MovedError
+ modified #=> 'hello world'
+ else
+ raise 'unreachable'
+ end
+RUBY
+
+# move example2: Array
+assert_equal '[0, 1]', %q{
+ r = Ractor.new do
+ ary = Ractor.receive
+ ary << 1
+ end
+
+ a1 = [0]
+ r.send a1, move: true
+ a2 = r.value
+ begin
+ a1 << 2 # raise Ractor::MovedError
+ rescue Ractor::MovedError
+ a2.inspect
+ end
+}
+
+# unshareable frozen objects should still be frozen in new ractor after move
+assert_equal 'true', %q{
+ r = Ractor.new do
+ obj = receive
+ { frozen: obj.frozen? }
+ end
+ obj = [Object.new].freeze
+ r.send(obj, move: true)
+ r.value[:frozen]
+}
+
+# Access to global-variables are prohibited (read)
+assert_equal 'can not access global variable $gv from non-main Ractor', %q{
+ $gv = 1
+ r = Ractor.new do
+ $gv
+ end
+
+ begin
+ r.join
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+}
+
+# Access to global-variables are prohibited (write)
+assert_equal 'can not access global variable $gv from non-main Ractor', %q{
+ r = Ractor.new do
+ $gv = 1
+ end
+
+ begin
+ r.join
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+}
+
+# $stdin,out,err is Ractor local, but shared fds
+assert_equal 'ok', %q{
+ r = Ractor.new do
+ [$stdin, $stdout, $stderr].map{|io|
+ [io.object_id, io.fileno]
+ }
+ end
+
+ [$stdin, $stdout, $stderr].zip(r.value){|io, (oid, fno)|
+ raise "should not be different object" if io.object_id == oid
+ raise "fd should be same" unless io.fileno == fno
+ }
+ 'ok'
+}
+
+# $stdin,out,err belong to Ractor
+assert_equal 'ok', %q{
+ r = Ractor.new do
+ $stdin.itself
+ $stdout.itself
+ $stderr.itself
+ 'ok'
+ end
+
+ r.value
+}
+
+# $DEBUG, $VERBOSE are Ractor local
+assert_equal 'true', %q{
+ $DEBUG = true
+ $VERBOSE = true
+
+ def ractor_local_globals
+ /a(b)(c)d/ =~ 'abcd' # for $~
+ `echo foo` unless /solaris/ =~ RUBY_PLATFORM
+
+ {
+ # ractor-local (derived from created ractor): debug
+ '$DEBUG' => $DEBUG,
+ '$-d' => $-d,
+
+ # ractor-local (derived from created ractor): verbose
+ '$VERBOSE' => $VERBOSE,
+ '$-w' => $-w,
+ '$-W' => $-W,
+ '$-v' => $-v,
+
+ # process-local (readonly): other commandline parameters
+ '$-p' => $-p,
+ '$-l' => $-l,
+ '$-a' => $-a,
+
+ # process-local (readonly): getpid
+ '$$' => $$,
+
+ # thread local: process result
+ '$?' => $?,
+
+ # scope local: match
+ '$~' => $~.inspect,
+ '$&' => $&,
+ '$`' => $`,
+ '$\'' => $',
+ '$+' => $+,
+ '$1' => $1,
+
+ # scope local: last line
+ '$_' => $_,
+
+ # scope local: last backtrace
+ '$@' => $@,
+ '$!' => $!,
+
+ # ractor local: stdin, out, err
+ '$stdin' => $stdin.inspect,
+ '$stdout' => $stdout.inspect,
+ '$stderr' => $stderr.inspect,
+ }
+ end
+
+ h = Ractor.new do
+ ractor_local_globals
+ end.value
+ ractor_local_globals == h #=> true
+}
+
+# selfs are different objects
+assert_equal 'false', %q{
+ r = Ractor.new do
+ self.object_id
+ end
+ ret = r.value
+ ret == self.object_id
+}
+
+# self is a Ractor instance
+assert_equal 'true', %q{
+ r = Ractor.new do
+ self.object_id
+ end
+ ret = r.value
+ if r.object_id == ret #=> true
+ true
+ else
+ raise [ret, r.object_id].inspect
+ end
+}
+
+# given block Proc will be isolated, so can not access outer variables.
+assert_equal 'ArgumentError', %q{
+ begin
+ a = true
+ r = Ractor.new do
+ a
+ end
+ rescue => e
+ e.class
+ end
+}
+
+# eval with outer locals in a Ractor raises SyntaxError
+# [Bug #21522]
+assert_equal 'SyntaxError', %q{
+ outer = 42
+ r = Ractor.new do
+ eval("outer")
+ end
+ begin
+ r.value
+ rescue Ractor::RemoteError => e
+ e.cause.class
+ end
+}
+
+# eval of an undefined name in a Ractor raises NameError
+assert_equal 'NameError', %q{
+ r = Ractor.new do
+ eval("totally_undefined_name")
+ end
+ begin
+ r.value
+ rescue Ractor::RemoteError => e
+ e.cause.class
+ end
+}
+
+# eval of a local defined inside the Ractor works
+assert_equal '99', %q{
+ Ractor.new { inner = 99; eval("inner").to_s }.value
+}
+
+# ivar in shareable-objects are not allowed to access from non-main Ractor
+assert_equal "can not get unshareable values from instance variables of classes/modules from non-main Ractors (@iv from C)", <<~'RUBY', frozen_string_literal: false
+ class C
+ @iv = 'str'
+ end
+
+ r = Ractor.new do
+ class C
+ p @iv
+ end
+ end
+
+ begin
+ r.value
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+RUBY
+
+# ivar in shareable-objects are not allowed to access from non-main Ractor
+assert_equal 'can not access instance variables of shareable objects from non-main Ractors', %q{
+ shared = Ractor.new{}
+ shared.instance_variable_set(:@iv, 'str')
+
+ r = Ractor.new shared do |shared|
+ p shared.instance_variable_get(:@iv)
+ end
+
+ begin
+ r.value
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+}
+
+# ivar in shareable-objects are not allowed to access from non-main Ractor, by @iv (get)
+assert_equal 'can not access instance variables of shareable objects from non-main Ractors', %q{
+ class Ractor
+ def setup
+ @foo = ''
+ end
+
+ def foo
+ @foo
+ end
+ end
+
+ shared = Ractor.new{}
+ shared.setup
+
+ r = Ractor.new shared do |shared|
+ p shared.foo
+ end
+
+ begin
+ r.value
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+}
+
+# ivar in shareable-objects are not allowed to access from non-main Ractor, by @iv (set)
+assert_equal 'can not access instance variables of shareable objects from non-main Ractors', %q{
+ class Ractor
+ def setup
+ @foo = ''
+ end
+ end
+
+ shared = Ractor.new{}
+
+ r = Ractor.new shared do |shared|
+ p shared.setup
+ end
+
+ begin
+ r.value
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+}
+
+# But a shareable object is frozen, it is allowed to access ivars from non-main Ractor
+assert_equal '11', %q{
+ [Object.new, [], ].map{|obj|
+ obj.instance_variable_set('@a', 1)
+ Ractor.make_shareable obj = obj.freeze
+
+ Ractor.new obj do |obj|
+ obj.instance_variable_get('@a')
+ end.value.to_s
+ }.join
+}
+
+# and instance variables of classes/modules are accessible if they refer shareable objects
+assert_equal '333', %q{
+ class C
+ @int = 1
+ @str = '-1000'.dup
+ @fstr = '100'.freeze
+
+ def self.int = @int
+ def self.str = @str
+ def self.fstr = @fstr
+ end
+
+ module M
+ @int = 2
+ @str = '-2000'.dup
+ @fstr = '200'.freeze
+
+ def self.int = @int
+ def self.str = @str
+ def self.fstr = @fstr
+ end
+
+ a = Ractor.new{ C.int }.value
+ b = Ractor.new do
+ C.str.to_i
+ rescue Ractor::IsolationError
+ 10
+ end.value
+ c = Ractor.new do
+ C.fstr.to_i
+ end.value
+
+ d = Ractor.new{ M.int }.value
+ e = Ractor.new do
+ M.str.to_i
+ rescue Ractor::IsolationError
+ 20
+ end.value
+ f = Ractor.new do
+ M.fstr.to_i
+ end.value
+
+
+ # 1 + 10 + 100 + 2 + 20 + 200
+ a + b + c + d + e + f
+}
+
+assert_equal '["instance-variable", "instance-variable", nil]', %q{
+ class C
+ @iv1 = ""
+ @iv2 = 42
+ def self.iv1 = defined?(@iv1) # "instance-variable"
+ def self.iv2 = defined?(@iv2) # "instance-variable"
+ def self.iv3 = defined?(@iv3) # nil
+ end
+
+ Ractor.new{
+ [C.iv1, C.iv2, C.iv3]
+ }.value
+}
+
+# moved objects have their shape properly set to original object's shape
+assert_equal '1234', %q{
+ class Obj
+ attr_accessor :a, :b, :c, :d
+ def initialize
+ @a = 1
+ @b = 2
+ @c = 3
+ end
+ end
+ r = Ractor.new do
+ obj = receive
+ obj.d = 4
+ [obj.a, obj.b, obj.c, obj.d]
+ end
+ obj = Obj.new
+ r.send(obj, move: true)
+ values = r.value
+ values.join
+}
+
+# cvar in shareable-objects are not allowed to access from non-main Ractor
+assert_equal 'can not access class variables from non-main Ractors (@@cv from C)', %q{
+ class C
+ @@cv = 'str'
+ end
+
+ r = Ractor.new do
+ class C
+ p @@cv
+ end
+ end
+
+ begin
+ r.join
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+}
+
+# also cached cvar in shareable-objects are not allowed to access from non-main Ractor
+assert_equal 'can not access class variables from non-main Ractors (@@cv from C)', %q{
+ class C
+ @@cv = 'str'
+ def self.cv
+ @@cv
+ end
+ end
+
+ C.cv # cache
+
+ r = Ractor.new do
+ C.cv
+ end
+
+ begin
+ r.join
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+}
+
+# Getting non-shareable objects via constants by other Ractors is not allowed
+assert_equal 'can not access non-shareable objects in constant C::CONST by non-main Ractor.', <<~'RUBY', frozen_string_literal: false
+ class C
+ CONST = 'str'
+ end
+ r = Ractor.new do
+ C::CONST
+ end
+ begin
+ r.join
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+ RUBY
+
+# Constant cache should care about non-shareable constants
+assert_equal "can not access non-shareable objects in constant Object::STR by non-main Ractor.", <<~'RUBY', frozen_string_literal: false
+ STR = "hello"
+ def str; STR; end
+ s = str() # fill const cache
+ begin
+ Ractor.new{ str() }.join
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+RUBY
+
+# The correct constant path shall be reported
+assert_equal "can not access non-shareable objects in constant Object::STR by non-main Ractor.", <<~'RUBY', frozen_string_literal: false
+ STR = "hello"
+ module M
+ def self.str; STR; end
+ end
+
+ begin
+ Ractor.new{ M.str }.join
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+RUBY
+
+# Setting non-shareable objects into constants by other Ractors is not allowed
+assert_equal 'can not set constants with non-shareable objects by non-main Ractors', <<~'RUBY', frozen_string_literal: false
+ class C
+ end
+ r = Ractor.new do
+ C::CONST = 'str'
+ end
+ begin
+ r.join
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+RUBY
+
+# define_method is not allowed
+assert_equal "defined with an un-shareable Proc in a different Ractor", %q{
+ str = "foo"
+ define_method(:buggy){|i| str << "#{i}"}
+ begin
+ Ractor.new{buggy(10)}.join
+ rescue => e
+ e.cause.message
+ end
+}
+
+# Immutable Array and Hash are shareable, so it can be shared with constants
+assert_equal '[1000, 3]', %q{
+ A = Array.new(1000).freeze # [nil, ...]
+ H = {a: 1, b: 2, c: 3}.freeze
+
+ Ractor.new{ [A.size, H.size] }.value
+}
+
+# Ractor.count
+assert_equal '[1, 4, 3, 2, 1]', %q{
+ counts = []
+ counts << Ractor.count
+ ractors = (1..3).map { Ractor.new { Ractor.receive } }
+ counts << Ractor.count
+
+ ractors[0].send('End 0').join
+ sleep 0.1 until ractors[0].inspect =~ /terminated/
+ counts << Ractor.count
+
+ ractors[1].send('End 1').join
+ sleep 0.1 until ractors[1].inspect =~ /terminated/
+ counts << Ractor.count
+
+ ractors[2].send('End 2').join
+ sleep 0.1 until ractors[2].inspect =~ /terminated/
+ counts << Ractor.count
+
+ counts.inspect
+}
+
+# ObjectSpace.each_object can not handle unshareable objects with Ractors
+assert_equal '0', %q{
+ Ractor.new{
+ n = 0
+ ObjectSpace.each_object{|o| n += 1 unless Ractor.shareable?(o)}
+ n
+ }.value
+}
+
+# ObjectSpace._id2ref can not handle unshareable objects with Ractors
+assert_equal 'ok', <<~'RUBY', frozen_string_literal: false
+ s = 'hello'
+
+ Ractor.new s.object_id do |id ;s|
+ begin
+ s = ObjectSpace._id2ref(id)
+ rescue => e
+ :ok
+ end
+ end.value
+RUBY
+
+# Inserting into the id2ref table should be Ractor-safe
+assert_equal 'ok', <<~'RUBY'
+ # Force all calls to Kernel#object_id to insert into the id2ref table
+ obj = Object.new
+ ObjectSpace._id2ref(obj.object_id) rescue nil
+
+ 10.times.map do
+ Ractor.new do
+ 10_000.times do
+ a = Object.new
+ a.object_id
+ end
+ end
+ end.map(&:value)
+
+ :ok
+RUBY
+
+# Ractor.make_shareable(obj)
+assert_equal 'true', <<~'RUBY', frozen_string_literal: false
+ class C
+ def initialize
+ @a = 'foo'
+ @b = 'bar'
+ end
+
+ def freeze
+ @c = [:freeze_called]
+ super
+ end
+
+ attr_reader :a, :b, :c
+ end
+ S = Struct.new(:s1, :s2)
+ str = "hello"
+ str.instance_variable_set("@iv", "hello")
+ /a/ =~ 'a'
+ m = $~
+ class N < Numeric
+ def /(other)
+ 1
+ end
+ end
+ ary = []; ary << ary
+
+ a = [[1, ['2', '3']],
+ {Object.new => "hello"},
+ C.new,
+ S.new("x", "y"),
+ ("a".."b"),
+ str,
+ ary, # cycle
+ /regexp/,
+ /#{'r'.upcase}/,
+ m,
+ Complex(N.new,0),
+ Rational(N.new,0),
+ true,
+ false,
+ nil,
+ 1, 1.2, 1+3r, 1+4i, # Numeric
+ ]
+ Ractor.make_shareable(a)
+
+ # check all frozen
+ a.each{|o|
+ raise o.inspect unless o.frozen?
+
+ case o
+ when C
+ raise o.a.inspect unless o.a.frozen?
+ raise o.b.inspect unless o.b.frozen?
+ raise o.c.inspect unless o.c.frozen? && o.c == [:freeze_called]
+ when Rational
+ raise o.numerator.inspect unless o.numerator.frozen?
+ when Complex
+ raise o.real.inspect unless o.real.frozen?
+ when Array
+ if o[0] == 1
+ raise o[1][1].inspect unless o[1][1].frozen?
+ end
+ when Hash
+ o.each{|k, v|
+ raise k.inspect unless k.frozen?
+ raise v.inspect unless v.frozen?
+ }
+ end
+ }
+
+ Ractor.shareable?(a)
+RUBY
+
+# Ractor.make_shareable(obj) doesn't freeze shareable objects
+assert_equal 'true', %q{
+ r = Ractor.new{}
+ Ractor.make_shareable(a = [r])
+ [a.frozen?, a[0].frozen?] == [true, false]
+}
+
+# Ractor.make_shareable(a_proc) requires a shareable receiver
+assert_equal '[:ok, "Proc\'s self is not shareable:"]', %q{
+ pr1 = nil.instance_exec { Proc.new{} }
+ pr2 = Proc.new{}
+
+ [pr1, pr2].map do |pr|
+ begin
+ Ractor.make_shareable(pr)
+ rescue Ractor::Error => e
+ e.message[/^.+?:/]
+ else
+ :ok
+ end
+ end
+}
+
+# Ractor.make_shareable(Method/UnboundMethod)
+assert_equal 'true', %q{
+ # raise because receiver is unshareable
+ begin
+ _m0 = Ractor.make_shareable(self.method(:__id__))
+ rescue => e
+ raise e unless e.message =~ /can not make shareable object/
+ else
+ raise "no error"
+ end
+
+ # Method with shareable receiver
+ M1 = Ractor.make_shareable(Object.method(:__id__))
+
+ # UnboundMethod
+ M2 = Ractor.make_shareable(Object.instance_method(:__id__))
+
+ Ractor.new do
+ Object.__id__ == M1.call && M1.call == M2.bind_call(Object)
+ end.value
+}
+
+# Ractor.shareable?(recursive_objects)
+assert_equal '[false, false]', %q{
+ y = []
+ x = [y, {}].freeze
+ y << x
+ y.freeze
+ [Ractor.shareable?(x), Ractor.shareable?(y)]
+}
+
+# Ractor.make_shareable(recursive_objects)
+assert_equal '[:ok, false, false]', %q{
+ o = Object.new
+ def o.freeze; raise; end
+ y = []
+ x = [y, o].freeze
+ y << x
+ y.freeze
+ [(Ractor.make_shareable(x) rescue :ok), Ractor.shareable?(x), Ractor.shareable?(y)]
+}
+
+# Ractor.make_shareable with Class/Module
+assert_equal '[C, M]', %q{
+ class C; end
+ module M; end
+
+ Ractor.make_shareable(ary = [C, M])
+}
+
+# define_method() can invoke different Ractor's proc if the proc is shareable.
+assert_equal '1', %q{
+ class C
+ a = 1
+ define_method "foo", Ractor.shareable_proc{ a }
+ end
+
+ Ractor.new{ C.new.foo }.value
+}
+
+# Ractor.make_shareable(obj, copy: true) makes copied shareable object.
+assert_equal '[false, false, true, true]', %q{
+ r = []
+ o1 = [1, 2, ["3"]]
+
+ o2 = Ractor.make_shareable(o1, copy: true)
+ r << Ractor.shareable?(o1) # false
+ r << (o1.object_id == o2.object_id) # false
+
+ o3 = Ractor.make_shareable(o1)
+ r << Ractor.shareable?(o1) # true
+ r << (o1.object_id == o3.object_id) # false
+ r
+}
+
+# TracePoint with normal Proc should be Ractor local
+assert_equal '[6, 10]', %q{
+ rs = []
+ TracePoint.new(:line){|tp| rs << tp.lineno if tp.path == __FILE__}.enable do
+ Ractor.new{ # line 5
+ a = 1
+ b = 2
+ }.value
+ c = 3 # line 9
+ end
+ rs
+}
+
+# Ractor deep copies frozen objects (ary)
+assert_equal '[true, false]', %q{
+ Ractor.new([[]].freeze) { |ary|
+ [ary.frozen?, ary.first.frozen? ]
+ }.value
+}
+
+# Ractor deep copies frozen objects (str)
+assert_equal '[true, false]', %q{
+ s = String.new.instance_eval { @x = []; freeze}
+ Ractor.new(s) { |s|
+ [s.frozen?, s.instance_variable_get(:@x).frozen?]
+ }.value
+}
+
+# Can not trap with not isolated Proc on non-main ractor
+assert_equal '[:ok, :ok]', %q{
+ a = []
+ Ractor.new{
+ trap(:INT){p :ok}
+ }.join
+ a << :ok
+
+ begin
+ Ractor.new{
+ s = 'str'
+ trap(:INT){p s}
+ }.join
+ rescue Ractor::RemoteError
+ a << :ok
+ end
+}
+
+# Ractor.select is interruptible
+assert_normal_exit %q{
+ trap(:INT) do
+ exit
+ end
+
+ r = Ractor.new do
+ loop do
+ sleep 1
+ end
+ end
+
+ Thread.new do
+ sleep 0.5
+ Process.kill(:INT, Process.pid)
+ end
+ Ractor.select(r)
+}
+
+# Ractor-local storage
+assert_equal '[nil, "b", "a"]', %q{
+ ans = []
+ Ractor.current[:key] = 'a'
+ r = Ractor.new{
+ Ractor.main << self[:key]
+ self[:key] = 'b'
+ self[:key]
+ }
+ ans << Ractor.receive
+ ans << r.value
+ ans << Ractor.current[:key]
+}
+
+assert_equal '1', %q{
+ N = 1_000
+ Ractor.new{
+ a = []
+ 1_000.times.map{|i|
+ Thread.new(i){|i|
+ Thread.pass if i < N
+ a << Ractor.store_if_absent(:i){ i }
+ a << Ractor.current[:i]
+ }
+ }.each(&:join)
+ a.uniq.size
+ }.value
+}
+
+# Ractor-local storage
+assert_equal '2', %q{
+ Ractor.new {
+ fails = 0
+ begin
+ Ractor.main[:key] # cannot get ractor local storage from non-main ractor
+ rescue => e
+ fails += 1 if e.message =~ /Cannot get ractor local/
+ end
+ begin
+ Ractor.main[:key] = 'val'
+ rescue => e
+ fails += 1 if e.message =~ /Cannot set ractor local/
+ end
+ fails
+ }.value
+}
+
+###
+### Synchronization tests
+###
+
+N = 100_000
+
+# fstring pool
+assert_equal "#{N}#{N}", %Q{
+ N = #{N}
+ 2.times.map{
+ Ractor.new{
+ N.times{|i| -(i.to_s)}
+ }
+ }.map{|r| r.value}.join
+}
+
+assert_equal "ok", %Q{
+ N = #{N}
+ a, b = 2.times.map{
+ Ractor.new{
+ N.times.map{|i| -(i.to_s)}
+ }
+ }.map{|r| r.value}
+ N.times do |i|
+ unless a[i].equal?(b[i])
+ raise [a[i], b[i]].inspect
+ end
+ unless a[i] == i.to_s
+ raise [i, a[i], b[i]].inspect
+ end
+ end
+ :ok
+}
+
+# Generic fields_tbl
+n = N/2
+assert_equal "#{n}#{n}", %Q{
+ 2.times.map{
+ Ractor.new do
+ #{n}.times do
+ obj = +''
+ obj.instance_variable_set("@a", 1)
+ obj.instance_variable_set("@b", 1)
+ obj.instance_variable_set("@c", 1)
+ obj.instance_variable_defined?("@a")
+ end
+ end
+ }.map{|r| r.value}.join
+}
+
+# Now NoMethodError is copyable
+assert_equal "NoMethodError", %q{
+ obj = "".freeze # NameError refers the receiver indirectly
+ begin
+ obj.bar
+ rescue => err
+ end
+
+ r = Ractor.new{ Ractor.receive }
+ r << err
+ r.value.class
+}
+
+assert_equal "ok", %q{
+ GC.disable
+ Ractor.new {}
+ raise "not ok" unless GC.disable
+
+ foo = []
+ 10.times { foo << 1 }
+
+ GC.start
+
+ 'ok'
+}
+
+# Can yield back values while GC is sweeping [Bug #18117]
+assert_equal "ok", %q{
+ port = Ractor::Port.new
+ workers = (0...8).map do
+ Ractor.new port do |port|
+ loop do
+ 10_000.times.map { Object.new }
+ port << Time.now
+ Ractor.receive
+ end
+ end
+ end
+
+ 100.times {
+ workers.each do
+ port.receive
+ end
+ workers.each do |w|
+ w.send(nil)
+ end
+ }
+ "ok"
+} if !yjit_enabled? && ENV['GITHUB_WORKFLOW'] != 'ModGC' # flaky
+
+# check method cache invalidation
+assert_equal "ok", %q{
+ module M
+ def foo
+ @foo
+ end
+ end
+
+ class A
+ include M
+
+ def initialize
+ 100.times { |i| instance_variable_set(:"@var_#{i}", "bad: #{i}") }
+ @foo = 2
+ end
+ end
+
+ class B
+ include M
+
+ def initialize
+ @foo = 1
+ end
+ end
+
+ Ractor.new do
+ b = B.new
+ 100_000.times do
+ raise unless b.foo == 1
+ end
+ end
+
+ a = A.new
+ 100_000.times do
+ raise unless a.foo == 2
+ end
+
+ "ok"
+}
+
+# check method cache invalidation
+assert_equal 'true', %q{
+ class C1; def self.foo = 1; end
+ class C2; def self.foo = 2; end
+ class C3; def self.foo = 3; end
+ class C4; def self.foo = 5; end
+ class C5; def self.foo = 7; end
+ class C6; def self.foo = 11; end
+ class C7; def self.foo = 13; end
+ class C8; def self.foo = 17; end
+
+ LN = 10_000
+ RN = 10
+ CS = [C1, C2, C3, C4, C5, C6, C7, C8]
+ rs = RN.times.map{|i|
+ Ractor.new(CS.shuffle){|cs|
+ LN.times.sum{
+ cs.inject(1){|r, c| r * c.foo} # c.foo invalidates method cache entry
+ }
+ }
+ }
+
+ n = CS.inject(1){|r, c| r * c.foo} * LN
+ rs.map{|r| r.value} == Array.new(RN){n}
+}
+
+# check method cache invalidation
+assert_equal 'true', %q{
+ class Foo
+ def hello = nil
+ end
+
+ r1 = Ractor.new do
+ 1000.times do
+ class Foo
+ def hello = nil
+ end
+ end
+ end
+
+ r2 = Ractor.new do
+ 1000.times do
+ o = Foo.new
+ o.hello
+ end
+ end
+
+ r1.value
+ r2.value
+
+ true
+}
+
+# check experimental warning
+assert_match /\Atest_ractor\.rb:1:\s+warning:\s+Ractor API is experimental/, %q{
+ Warning[:experimental] = $VERBOSE = true
+ STDERR.reopen(STDOUT)
+ eval("Ractor.new{}.value", nil, "test_ractor.rb", 1)
+}, frozen_string_literal: false
+
+# check moved object
+assert_equal 'ok', %q{
+ r = Ractor.new do
+ Ractor.receive
+ GC.start
+ :ok
+ end
+
+ obj = begin
+ raise
+ rescue => e
+ e = Marshal.load(Marshal.dump(e))
+ end
+
+ r.send obj, move: true
+ r.value
+}
+
+## Ractor::Selector
+
+# Selector#empty? returns true
+assert_equal 'true', %q{
+ skip true unless defined? Ractor::Selector
+
+ s = Ractor::Selector.new
+ s.empty?
+}
+
+# Selector#empty? returns false if there is target ractors
+assert_equal 'false', %q{
+ skip false unless defined? Ractor::Selector
+
+ s = Ractor::Selector.new
+ s.add Ractor.new{}
+ s.empty?
+}
+
+# Selector#clear removes all ractors from the waiting list
+assert_equal 'true', %q{
+ skip true unless defined? Ractor::Selector
+
+ s = Ractor::Selector.new
+ s.add Ractor.new{10}
+ s.add Ractor.new{20}
+ s.clear
+ s.empty?
+}
+
+# Selector#wait can wait multiple ractors
+assert_equal '[10, 20, true]', %q{
+ skip [10, 20, true] unless defined? Ractor::Selector
+
+ s = Ractor::Selector.new
+ s.add Ractor.new{10}
+ s.add Ractor.new{20}
+ r, v = s.wait
+ vs = []
+ vs << v
+ r, v = s.wait
+ vs << v
+ [*vs.sort, s.empty?]
+} if defined? Ractor::Selector
+
+# Selector#wait can wait multiple ractors with receiving.
+assert_equal '30', %q{
+ skip 30 unless defined? Ractor::Selector
+
+ RN = 30
+ rs = RN.times.map{
+ Ractor.new{ :v }
+ }
+ s = Ractor::Selector.new(*rs)
+
+ results = []
+ until s.empty?
+ results << s.wait
+
+ # Note that s.wait can raise an exception because other Ractors/Threads
+ # can take from the same ractors in the waiting set.
+ # In this case there is no other takers so `s.wait` doesn't raise an error.
+ end
+
+ results.size
+} if defined? Ractor::Selector
+
+# Selector#wait can support dynamic addition
+assert_equal '600', %q{
+ skip 600 unless defined? Ractor::Selector
+
+ RN = 100
+ s = Ractor::Selector.new
+ port = Ractor::Port.new
+ rs = RN.times.map{
+ Ractor.new{
+ Ractor.main << Ractor.new(port){|port| port << :v3; :v4 }
+ Ractor.main << Ractor.new(port){|port| port << :v5; :v6 }
+ Ractor.yield :v1
+ :v2
+ }
+ }
+
+ rs.each{|r| s.add(r)}
+ h = {v1: 0, v2: 0, v3: 0, v4: 0, v5: 0, v6: 0}
+
+ loop do
+ case s.wait receive: true
+ in :receive, r
+ s.add r
+ in r, v
+ h[v] += 1
+ break if h.all?{|k, v| v == RN}
+ end
+ end
+
+ h.sum{|k, v| v}
+} unless yjit_enabled? # http://ci.rvm.jp/results/trunk-yjit@ruby-sp2-docker/4466770
+
+# Selector should be GCed (free'ed) without trouble
+assert_equal 'ok', %q{
+ skip :ok unless defined? Ractor::Selector
+
+ RN = 30
+ rs = RN.times.map{
+ Ractor.new{ :v }
+ }
+ s = Ractor::Selector.new(*rs)
+ :ok
+}
+
+end # if !ENV['GITHUB_WORKFLOW']
+
+# Chilled strings are not shareable
+assert_equal 'false', %q{
+ Ractor.shareable?("chilled")
+}
+
+# Chilled strings can be made shareable
+assert_equal 'true', %q{
+ shareable = Ractor.make_shareable("chilled")
+ shareable == "chilled" && Ractor.shareable?(shareable)
+}
+
+# require in Ractor
+assert_equal 'true', %q{
+ Module.new do
+ def require feature
+ return Ractor._require(feature) unless Ractor.main?
+ super
+ end
+ Object.prepend self
+ set_temporary_name 'Ractor#require'
+ end
+
+ Ractor.new{
+ begin
+ require 'tempfile'
+ Tempfile.new
+ rescue SystemStackError
+ # prism parser with -O0 build consumes a lot of machine stack
+ Data.define(:fileno).new(1)
+ end
+ }.value.fileno > 0
+}
+
+# require_relative in Ractor
+assert_equal 'true', %q{
+ dummyfile = File.join(__dir__, "dummy#{rand}.rb")
+ return true if File.exist?(dummyfile)
+
+ begin
+ File.write dummyfile, ''
+ rescue Exception
+ # skip on any errors
+ return true
+ end
+
+ begin
+ Ractor.new dummyfile do |f|
+ require_relative File.basename(f)
+ end.value
+ ensure
+ File.unlink dummyfile
+ end
+}
+
+# require_relative in Ractor
+assert_equal 'LoadError', %q{
+ dummyfile = File.join(__dir__, "not_existed_dummy#{rand}.rb")
+ return true if File.exist?(dummyfile)
+
+ Ractor.new dummyfile do |f|
+ begin
+ require_relative File.basename(f)
+ rescue LoadError => e
+ e.class
+ end
+ end.value
+}
+
+# autolaod in Ractor
+assert_equal 'true', %q{
+ autoload :Tempfile, 'tempfile'
+
+ r = Ractor.new do
+ begin
+ Tempfile.new
+ rescue SystemStackError
+ # prism parser with -O0 build consumes a lot of machine stack
+ Data.define(:fileno).new(1)
+ end
+ end
+ r.value.fileno > 0
+}
+
+# failed in autolaod in Ractor
+assert_equal 'LoadError', %q{
+ dummyfile = File.join(__dir__, "not_existed_dummy#{rand}.rb")
+ autoload :Tempfile, dummyfile
+
+ r = Ractor.new do
+ begin
+ Tempfile.new
+ rescue LoadError => e
+ e.class
+ end
+ end
+ r.value
+}
+
+# bind_call in Ractor [Bug #20934]
+assert_equal 'ok', %q{
+ 2.times.map do
+ Ractor.new do
+ 1000.times do
+ Object.instance_method(:itself).bind_call(self)
+ end
+ end
+ end.each(&:join)
+ GC.start
+ :ok.itself
+}
+
+# moved objects being corrupted if embeded (String)
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ obj = "foobarbazfoobarbazfoobarbazfoobarbaz"
+ ractor.send(obj.dup, move: true)
+ roundtripped_obj = ractor.value
+ roundtripped_obj == obj ? :ok : roundtripped_obj
+}
+
+# moved objects being corrupted if embeded (Array)
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ obj = Array.new(10, 42)
+ ractor.send(obj.dup, move: true)
+ roundtripped_obj = ractor.value
+ roundtripped_obj == obj ? :ok : roundtripped_obj
+}
+
+# moved objects being corrupted if embeded (Hash)
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ obj = { foo: 1, bar: 2 }
+ ractor.send(obj.dup, move: true)
+ roundtripped_obj = ractor.value
+ roundtripped_obj == obj ? :ok : roundtripped_obj
+}
+
+# moved objects being corrupted if embeded (MatchData)
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ obj = "foo".match(/o/)
+ ractor.send(obj.dup, move: true)
+ roundtripped_obj = ractor.value
+ roundtripped_obj == obj ? :ok : roundtripped_obj
+}
+
+# moved objects being corrupted if embeded (Struct)
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ obj = Struct.new(:a, :b, :c, :d, :e, :f).new(1, 2, 3, 4, 5, 6)
+ ractor.send(obj.dup, move: true)
+ roundtripped_obj = ractor.value
+ roundtripped_obj == obj ? :ok : roundtripped_obj
+}
+
+# moved objects being corrupted if embeded (Object)
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ class SomeObject
+ attr_reader :a, :b, :c, :d, :e, :f
+ def initialize
+ @a = @b = @c = @d = @e = @f = 1
+ end
+
+ def ==(o)
+ @a == o.a &&
+ @b == o.b &&
+ @c == o.c &&
+ @d == o.d &&
+ @e == o.e &&
+ @f == o.f
+ end
+ end
+
+ SomeObject.new # initial non-embeded
+
+ obj = SomeObject.new
+ ractor.send(obj.dup, move: true)
+ roundtripped_obj = ractor.value
+ roundtripped_obj == obj ? :ok : roundtripped_obj
+}
+
+# moved arrays can't be used
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ obj = [1]
+ ractor.send(obj, move: true)
+ begin
+ [].concat(obj)
+ rescue TypeError
+ :ok
+ else
+ :fail
+ end
+}
+
+# moved strings can't be used
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ obj = "hello"
+ ractor.send(obj, move: true)
+ begin
+ "".replace(obj)
+ rescue TypeError
+ :ok
+ else
+ :fail
+ end
+}
+
+# moved hashes can't be used
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ obj = { a: 1 }
+ ractor.send(obj, move: true)
+ begin
+ {}.merge(obj)
+ rescue TypeError
+ :ok
+ else
+ :fail
+ end
+}
+
+# move objects inside frozen containers
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ obj = Array.new(10, 42)
+ original = obj.dup
+ ractor.send([obj].freeze, move: true)
+ roundtripped_obj = ractor.value[0]
+ roundtripped_obj == original ? :ok : roundtripped_obj
+}
+
+# move object with generic ivar
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ obj = Array.new(10, 42)
+ obj.instance_variable_set(:@array, [1])
+
+ ractor.send(obj, move: true)
+ roundtripped_obj = ractor.value
+ roundtripped_obj.instance_variable_get(:@array) == [1] ? :ok : roundtripped_obj
+}
+
+# move object with many generic ivars
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ obj = Array.new(10, 42)
+ 0.upto(300) do |i|
+ obj.instance_variable_set(:"@array#{i}", [i])
+ end
+
+ ractor.send(obj, move: true)
+ roundtripped_obj = ractor.value
+ roundtripped_obj.instance_variable_get(:@array1) == [1] ? :ok : roundtripped_obj
+}
+
+# move object with complex generic ivars
+assert_equal 'ok', %q{
+ # Make Array too_complex
+ 30.times { |i| [].instance_variable_set(:"@complex#{i}", 1) }
+
+ ractor = Ractor.new { Ractor.receive }
+ obj = Array.new(10, 42)
+ obj.instance_variable_set(:@array1, [1])
+
+ ractor.send(obj, move: true)
+ roundtripped_obj = ractor.value
+ roundtripped_obj.instance_variable_get(:@array1) == [1] ? :ok : roundtripped_obj
+}
+
+# move object with generic ivars and existing id2ref table
+# [Bug #21664]
+assert_equal 'ok', %q{
+ obj = [1]
+ obj.instance_variable_set("@field", :ok)
+ ObjectSpace._id2ref(obj.object_id) # build id2ref table
+
+ ractor = Ractor.new { Ractor.receive }
+ ractor.send(obj, move: true)
+ obj = ractor.value
+ obj.instance_variable_get("@field")
+}
+
+# copy object with complex generic ivars
+assert_equal 'ok', %q{
+ # Make Array too_complex
+ 30.times { |i| [].instance_variable_set(:"@complex#{i}", 1) }
+
+ ractor = Ractor.new { Ractor.receive }
+ obj = Array.new(10, 42)
+ obj.instance_variable_set(:@array1, [1])
+
+ ractor.send(obj)
+ roundtripped_obj = ractor.value
+ roundtripped_obj.instance_variable_get(:@array1) == [1] ? :ok : roundtripped_obj
+}
+
+# copy object with many generic ivars
+assert_equal 'ok', %q{
+ ractor = Ractor.new { Ractor.receive }
+ obj = Array.new(10, 42)
+ 0.upto(300) do |i|
+ obj.instance_variable_set(:"@array#{i}", [i])
+ end
+
+ ractor.send(obj)
+ roundtripped_obj = ractor.value
+ roundtripped_obj.instance_variable_get(:@array1) == [1] ? :ok : roundtripped_obj
+}
+
+# moved composite types move their non-shareable parts properly
+assert_equal 'ok', %q{
+ k, v = String.new("key"), String.new("value")
+ h = { k => v }
+ h.instance_variable_set("@b", String.new("b"))
+ a = [k,v]
+ o_singleton = Object.new
+ def o_singleton.a
+ @a
+ end
+ o_singleton.instance_variable_set("@a", String.new("a"))
+ class MyObject
+ attr_reader :a
+ def initialize(a)
+ @a = a
+ end
+ end
+ struct_class = Struct.new(:a)
+ struct = struct_class.new(String.new('a'))
+ o = MyObject.new(String.new('a'))
+ port = Ractor::Port.new
+
+ r = Ractor.new port do |port|
+ loop do
+ obj = Ractor.receive
+ val = case obj
+ when Hash
+ obj['key'] == 'value' && obj.instance_variable_get("@b") == 'b'
+ when Array
+ obj[0] == 'key'
+ when Struct
+ obj.a == 'a'
+ when Object
+ obj.a == 'a'
+ end
+ port << val
+ end
+ end
+
+ objs = [h, a, o_singleton, o, struct]
+ objs.each_with_index do |obj, i|
+ klass = obj.class
+ parts_moved = {}
+ case obj
+ when Hash
+ parts_moved[klass] = [obj['key'], obj.instance_variable_get("@b")]
+ when Array
+ parts_moved[klass] = obj.dup # the contents
+ when Struct, Object
+ parts_moved[klass] = [obj.a]
+ end
+ r.send(obj, move: true)
+ val = port.receive
+ if val != true
+ raise "bad val in ractor for obj at i:#{i}"
+ end
+ begin
+ p obj
+ rescue
+ else
+ raise "should be moved"
+ end
+ parts_moved.each do |klass, parts|
+ parts.each_with_index do |part, j|
+ case part
+ when Ractor::MovedObject
+ else
+ raise "part for class #{klass} at i:#{j} should be moved"
+ end
+ end
+ end
+ end
+ 'ok'
+}
+
+# fork after creating Ractor
+assert_equal 'ok', %q{
+begin
+ Ractor.new { Ractor.receive }
+ _, status = Process.waitpid2 fork { }
+ status.success? ? "ok" : status
+rescue NotImplementedError
+ :ok
+end
+}
+
+# Ractors should be terminated after fork
+assert_equal 'ok', %q{
+begin
+ r = Ractor.new { Ractor.receive }
+ _, status = Process.waitpid2 fork {
+ begin
+ raise if r.value != nil
+ end
+ }
+ r.send(123)
+ raise unless r.value == 123
+ status.success? ? "ok" : status
+rescue NotImplementedError
+ :ok
+end
+}
+
+# Ractors should be terminated after fork
+assert_equal 'ok', %q{
+begin
+ r = Ractor.new { Ractor.receive }
+ _, status = Process.waitpid2 fork {
+ begin
+ r.send(123)
+ rescue Ractor::ClosedError
+ end
+ }
+ r.send(123)
+ raise unless r.value == 123
+ status.success? ? "ok" : status
+rescue NotImplementedError
+ :ok
+end
+}
+
+# Creating classes inside of Ractors
+# [Bug #18119]
+assert_equal 'ok', %q{
+ port = Ractor::Port.new
+ workers = (0...8).map do
+ Ractor.new port do |port|
+ loop do
+ 100.times.map { Class.new }
+ port << nil
+ end
+ end
+ end
+
+ 100.times { port.receive }
+
+ 'ok'
+}
+
+# Using Symbol#to_proc inside ractors
+# [Bug #21354]
+assert_equal 'ok', %q{
+ :inspect.to_proc
+ Ractor.new do
+ # It should not use this cached proc, it should create a new one. If it used
+ # the cached proc, we would get a ractor_confirm_belonging error here.
+ :inspect.to_proc
+ end.join
+ 'ok'
+}
+
+# take vm lock when deleting generic ivars from the global table
+assert_equal 'ok', %q{
+ Ractor.new do
+ a = [1, 2, 3]
+ a.object_id
+ a.dup # this deletes generic ivar on dupped object
+ 'ok'
+ end.value
+}
+
+## Ractor#monitor
+
+# monitor port returns `:exited` when the monitering Ractor terminated.
+assert_equal 'true', %q{
+ r = Ractor.new do
+ Ractor.main << :ok1
+ :ok2
+ end
+
+ r.monitor port = Ractor::Port.new
+ Ractor.receive # :ok1
+ port.receive == :exited
+}
+
+# monitor port returns `:exited` even if the monitoring Ractor was terminated.
+assert_equal 'true', %q{
+ r = Ractor.new do
+ :ok
+ end
+
+ r.join # wait for r's terminateion
+
+ r.monitor port = Ractor::Port.new
+ port.receive == :exited
+}
+
+# monitor returns false if the monitoring Ractor was terminated.
+assert_equal 'false', %q{
+ r = Ractor.new do
+ :ok
+ end
+
+ r.join # wait for r's terminateion
+
+ r.monitor Ractor::Port.new
+}
+
+# monitor port returns `:aborted` when the monitering Ractor is aborted.
+assert_equal 'true', %q{
+ r = Ractor.new do
+ Ractor.main << :ok1
+ raise 'ok'
+ end
+
+ r.monitor port = Ractor::Port.new
+ Ractor.receive # :ok1
+ port.receive == :aborted
+}
+
+# monitor port returns `:aborted` even if the monitoring Ractor was aborted.
+assert_equal 'true', %q{
+ r = Ractor.new do
+ raise 'ok'
+ end
+
+ begin
+ r.join # wait for r's terminateion
+ rescue Ractor::RemoteError
+ # ignore
+ end
+
+ r.monitor port = Ractor::Port.new
+ port.receive == :aborted
+}
+
+## Ractor#join
+
+# Ractor#join returns self when the Ractor is terminated.
+assert_equal 'true', %q{
+ r = Ractor.new do
+ Ractor.receive
+ end
+
+ r << :ok
+ r.join
+ r.inspect in /terminated/
+} if false # TODO
+
+# Ractor#join raises RemoteError when the remote Ractor aborted with an exception
+assert_equal 'err', %q{
+ r = Ractor.new do
+ raise 'err'
+ end
+
+ begin
+ r.join
+ rescue Ractor::RemoteError => e
+ e.cause.message
+ end
+}
+
+## Ractor#value
+
+# Ractor#value returns the last expression even if it is unshareable
+assert_equal 'true', %q{
+ r = Ractor.new do
+ obj = [1, 2]
+ obj << obj.object_id
+ end
+
+ ret = r.value
+ ret == [1, 2, ret.object_id]
+}
+
+# Only one Ractor can call Ractor#value
+assert_equal '[["Only the successor ractor can take a value", 9], ["ok", 2]]', %q{
+ r = Ractor.new do
+ 'ok'
+ end
+
+ RN = 10
+
+ rs = RN.times.map do
+ Ractor.new r do |r|
+ begin
+ Ractor.main << r.value
+ Ractor.main << r.value # this ractor can get same result
+ rescue Ractor::Error => e
+ Ractor.main << e.message
+ end
+ end
+ end
+
+ (RN+1).times.map{
+ Ractor.receive
+ }.tally.sort
+}
+
+# Cause lots of inline CC misses.
+assert_equal 'ok', <<~'RUBY'
+ class A; def test; 1 + 1; end; end
+ class B; def test; 1 + 1; end; end
+ class C; def test; 1 + 1; end; end
+ class D; def test; 1 + 1; end; end
+ class E; def test; 1 + 1; end; end
+ class F; def test; 1 + 1; end; end
+ class G; def test; 1 + 1; end; end
+
+ objs = [A.new, B.new, C.new, D.new, E.new, F.new, G.new].freeze
+
+ def call_test(obj)
+ obj.test
+ end
+
+ ractors = 7.times.map do
+ Ractor.new(objs) do |objs|
+ objs = objs.shuffle
+ 100_000.times do
+ objs.each do |o|
+ call_test(o)
+ end
+ end
+ end
+ end
+ ractors.each(&:join)
+ :ok
+RUBY
+
+# This test checks that we do not trigger a GC when we have malloc with Ractor
+# locks. We cannot trigger a GC with Ractor locks because GC requires VM lock
+# and Ractor barrier. If another Ractor is waiting on this Ractor lock, then it
+# will deadlock because the other Ractor will never join the barrier.
+#
+# Creating Ractor::Port requires locking the Ractor and inserting into an
+# st_table, which can call malloc.
+assert_equal 'ok', <<~'RUBY'
+ r = Ractor.new do
+ loop do
+ Ractor::Port.new
+ end
+ end
+
+ 10.times do
+ 10_000.times do
+ r.send(nil)
+ end
+ sleep(0.01)
+ end
+ :ok
+RUBY
+
+assert_equal 'ok', <<~'RUBY'
+ begin
+ 100.times do |i|
+ Ractor.new(i) do |j|
+ 1000.times do |i|
+ "#{j}-#{i}"
+ end
+ Ractor.receive
+ end
+ pid = fork { }
+ _, status = Process.waitpid2 pid
+ raise unless status.success?
+ end
+
+ :ok
+ rescue NotImplementedError
+ :ok
+ end
+RUBY
+
+assert_equal 'ok', <<~'RUBY'
+ begin
+ 100.times do |i|
+ Ractor.new(i) do |j|
+ 1000.times do |i|
+ "#{j}-#{i}"
+ end
+ end
+ pid = fork do
+ GC.verify_internal_consistency
+ end
+ _, status = Process.waitpid2 pid
+ raise unless status.success?
+ end
+
+ :ok
+ rescue NotImplementedError
+ :ok
+ end
+RUBY
+
+# When creating bmethods in Ractors, they should only be usable from their
+# defining ractor, even if it is GC'd
+assert_equal 'ok', <<~'RUBY'
+
+begin
+ CLASSES = 1000.times.map { Class.new }.freeze
+
+ # This would be better to run in parallel, but there's a bug with lambda
+ # creation and YJIT causing crashes in dev mode
+ ractors = CLASSES.map do |klass|
+ Ractor.new(klass) do |klass|
+ Ractor.receive
+ klass.define_method(:foo) {}
+ end
+ end
+
+ ractors.each do |ractor|
+ ractor << nil
+ ractor.join
+ end
+
+ ractors.clear
+ GC.start
+
+ any = 1000.times.map do
+ Ractor.new do
+ CLASSES.any? do |klass|
+ begin
+ klass.new.foo
+ true
+ rescue RuntimeError
+ false
+ end
+ end
+ end
+ end.map(&:value).none? && :ok
+rescue ThreadError => e
+ # ignore limited memory machine
+ if /can\'t create Thread/ =~ e.message
+ :ok
+ else
+ raise
+ end
+end
+RUBY
diff --git a/bootstraptest/test_syntax.rb b/bootstraptest/test_syntax.rb
index a111990a1f..fbc9c6f62e 100644
--- a/bootstraptest/test_syntax.rb
+++ b/bootstraptest/test_syntax.rb
@@ -268,8 +268,10 @@ assert_equal %q{}, %q{
defined?(@@a)
}
assert_equal %q{class variable}, %q{
- @@a = 1
- defined?(@@a)
+ class A
+ @@a = 1
+ defined?(@@a)
+ end
}
assert_equal %q{}, %q{
defined?($a)
@@ -526,24 +528,24 @@ assert_equal %q{1}, %q{
i
}
def assert_syntax_error expected, code, message = ''
- assert_equal "#{expected}",
- "begin eval(%q{#{code}}, nil, '', 0)"'; rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end', message
+ assert_match /^#{Regexp.escape(expected)}/,
+ "begin eval(%q{#{code}}, nil, '', 0)"'; rescue SyntaxError => e; e.message[/(?:\^~*|\A:(?:\d+:)?(?! syntax errors? found)(?: syntax error,)?) (.*)/, 1] end', message
end
assert_syntax_error "unterminated string meets end of file", '().."', '[ruby-dev:29732]'
assert_equal %q{[]}, %q{$&;[]}, '[ruby-dev:31068]'
-assert_syntax_error "syntax error, unexpected *, expecting '}'", %q{{*0}}, '[ruby-dev:31072]'
-assert_syntax_error "`@0' is not allowed as an instance variable name", %q{@0..0}, '[ruby-dev:31095]'
-assert_syntax_error "identifier $00 is not valid to get", %q{$00..0}, '[ruby-dev:31100]'
-assert_syntax_error "identifier $00 is not valid to set", %q{0..$00=1}
+assert_syntax_error "unexpected *, expecting '}'", %q{{*0}}, '[ruby-dev:31072]'
+assert_syntax_error "'@0' is not allowed as an instance variable name", %q{@0..0}, '[ruby-dev:31095]'
+assert_syntax_error "'$00' is not allowed as a global variable name", %q{$00..0}, '[ruby-dev:31100]'
+assert_syntax_error "'$00' is not allowed as a global variable name", %q{0..$00=1}
assert_equal %q{0}, %q{[*0];0}, '[ruby-dev:31102]'
-assert_syntax_error "syntax error, unexpected ')'", %q{v0,(*,v1,) = 0}, '[ruby-dev:31104]'
+assert_syntax_error "unexpected ')'", %q{v0,(*,v1,) = 0}, '[ruby-dev:31104]'
assert_equal %q{1}, %q{
class << (ary=[]); def []; 0; end; def []=(x); super(0,x);end;end; ary[]+=1
}, '[ruby-dev:31110]'
assert_syntax_error "Can't set variable $1", %q{0..$1=1}, '[ruby-dev:31118]'
assert_valid_syntax %q{1.times{1+(1&&next)}}, '[ruby-dev:31119]'
assert_valid_syntax %q{x=-1;loop{x+=1&&redo if (x+=1).zero?}}, '[ruby-dev:31119]'
-assert_syntax_error %q{syntax error, unexpected end-of-input}, %q{!}, '[ruby-dev:31243]'
+assert_syntax_error %q{unexpected end-of-input}, %q{!}, '[ruby-dev:31243]'
assert_equal %q{[nil]}, %q{[()]}, '[ruby-dev:31252]'
assert_equal %q{true}, %q{!_=()}, '[ruby-dev:31263]'
assert_equal 'ok', %q{while true; redo; end if 1 == 2; :ok}, '[ruby-dev:31360]'
@@ -626,8 +628,8 @@ assert_equal '2', %q{
}
assert_match /invalid multibyte char/, %q{
- STDERR.reopen(STDOUT)
- eval("\"\xf0".force_encoding("utf-8"))
+ $stderr = STDOUT
+ eval("\"\xf0".dup.force_encoding("utf-8"))
}, '[ruby-dev:32429]'
# method ! and !=
@@ -902,3 +904,35 @@ assert_normal_exit %q{
Class
end
}, '[ruby-core:30293]'
+
+assert_equal "false", <<~RUBY, "literal strings are mutable", "--disable-frozen-string-literal"
+ 'test'.frozen?
+RUBY
+
+assert_equal "true", <<~RUBY, "literal strings are frozen", "--disable-frozen-string-literal", frozen_string_literal: true
+ 'test'.frozen?
+RUBY
+
+assert_equal "true", <<~RUBY, "literal strings are frozen", "--enable-frozen-string-literal"
+ 'test'.frozen?
+RUBY
+
+assert_equal "false", <<~RUBY, "literal strings are mutable", "--enable-frozen-string-literal", frozen_string_literal: false
+ 'test'.frozen?
+RUBY
+
+assert_equal "false", <<~RUBY, "__FILE__ is mutable", "--disable-frozen-string-literal"
+ __FILE__.frozen?
+RUBY
+
+assert_equal "true", <<~RUBY, "__FILE__ is frozen", "--disable-frozen-string-literal", frozen_string_literal: true
+ __FILE__.frozen?
+RUBY
+
+assert_equal "true", <<~RUBY, "__FILE__ is frozen", "--enable-frozen-string-literal"
+ __FILE__.frozen?
+RUBY
+
+assert_equal "false", <<~RUBY, "__FILE__ is mutable", "--enable-frozen-string-literal", frozen_string_literal: false
+ __FILE__.frozen?
+RUBY
diff --git a/bootstraptest/test_thread.rb b/bootstraptest/test_thread.rb
index d64f44be49..7ff5bb4a38 100644
--- a/bootstraptest/test_thread.rb
+++ b/bootstraptest/test_thread.rb
@@ -1,4 +1,14 @@
-# Thread and Fiber
+show_limit %q{
+ threads = []
+ begin
+ threads << Thread.new{sleep}
+
+ raise Exception, "skipping" if threads.count >= 10_000
+ rescue Exception => error
+ puts "Thread count: #{threads.count} (#{error})"
+ break
+ end while true
+} if false # disable to pass CI
assert_equal %q{ok}, %q{
Thread.new{
@@ -25,8 +35,9 @@ rescue ThreadError => e
:ok if /can't create Thread/ =~ e.message
end
}
-assert_equal %q{5000}, %q{
- 5000.times{|e|
+assert_equal %q{ok}, %q{
+begin
+ :ok if 5000 == 5000.times{|e|
(1..2).map{
Thread.new{
}
@@ -34,9 +45,13 @@ assert_equal %q{5000}, %q{
e.join()
}
}
+rescue ThreadError => e
+ /can't create Thread/ =~ e.message ? :ok : e.message
+end
}
-assert_equal %q{5000}, %q{
- 5000.times{|e|
+assert_equal %q{ok}, %q{
+begin
+ :ok if 5000 == 5000.times{|e|
(1..2).map{
Thread.new{
}
@@ -44,6 +59,9 @@ assert_equal %q{5000}, %q{
e.join(1000000000)
}
}
+rescue ThreadError => e
+ /can't create Thread/ =~ e.message ? :ok : e.message
+end
}
assert_equal %q{ok}, %q{
begin
@@ -224,9 +242,22 @@ assert_equal 'true', %{
end
}
+assert_equal 'true', %{
+ Thread.new{}.join
+ begin
+ Process.waitpid2 fork{
+ Thread.new{
+ sleep 0.1
+ }.join
+ }
+ true
+ rescue NotImplementedError
+ true
+ end
+}
+
assert_equal 'ok', %{
- open("zzz.rb", "w") do |f|
- f.puts <<-END
+ File.write("zzz_t1.rb", <<-END)
begin
Thread.new { fork { GC.start } }.join
pid, status = Process.wait2
@@ -235,8 +266,7 @@ assert_equal 'ok', %{
$result = :ok
end
END
- end
- require "./zzz.rb"
+ require "./zzz_t1.rb"
$result
}
@@ -291,10 +321,6 @@ assert_equal 'ok', %q{
}, '[ruby-dev:34492]'
assert_normal_exit %q{
- at_exit { Fiber.new{}.resume }
-}
-
-assert_normal_exit %q{
g = enum_for(:local_variables)
loop { g.next }
}, '[ruby-dev:34128]'
@@ -320,10 +346,6 @@ assert_normal_exit %q{
}, '[ruby-dev:34128]'
assert_normal_exit %q{
- Fiber.new(&Object.method(:class_eval)).resume("foo")
-}, '[ruby-dev:34128]'
-
-assert_normal_exit %q{
Thread.new("foo", &Object.method(:class_eval)).join
}, '[ruby-dev:34128]'
@@ -339,7 +361,7 @@ assert_equal 'ok', %q{
assert_equal 'ok', %q{
begin
- m1, m2 = Mutex.new, Mutex.new
+ m1, m2 = Thread::Mutex.new, Thread::Mutex.new
f1 = f2 = false
Thread.new { m1.lock; f2 = true; sleep 0.001 until f1; m2.lock }
m2.lock; f1 = true; sleep 0.001 until f2; m1.lock
@@ -350,32 +372,32 @@ assert_equal 'ok', %q{
}
assert_equal 'ok', %q{
- m = Mutex.new
+ m = Thread::Mutex.new
Thread.new { m.lock }; sleep 0.1; m.lock
:ok
}
assert_equal 'ok', %q{
- m = Mutex.new
+ m = Thread::Mutex.new
Thread.new { m.lock }; m.lock
:ok
}
assert_equal 'ok', %q{
- m = Mutex.new
+ m = Thread::Mutex.new
Thread.new { m.lock }.join; m.lock
:ok
}
assert_equal 'ok', %q{
- m = Mutex.new
+ m = Thread::Mutex.new
Thread.new { m.lock; sleep 0.2 }
sleep 0.1; m.lock
:ok
}
assert_equal 'ok', %q{
- m = Mutex.new
+ m = Thread::Mutex.new
Thread.new { m.lock; sleep 0.2; m.unlock }
sleep 0.1; m.lock
:ok
@@ -398,10 +420,9 @@ assert_equal 'ok', %q{
}
assert_equal 'ok', %{
- open("zzz.rb", "w") do |f|
- f.puts <<-'end;' # do
+ File.write("zzz_t2.rb", <<-'end;') # do
begin
- m = Mutex.new
+ m = Thread::Mutex.new
parent = Thread.current
th1 = Thread.new { m.lock; sleep }
sleep 0.01 until th1.stop?
@@ -421,16 +442,15 @@ assert_equal 'ok', %{
$result = :ok
end
end;
- end
- require "./zzz.rb"
+ require "./zzz_t2.rb"
$result
}
assert_finish 3, %q{
require 'thread'
- lock = Mutex.new
- cond = ConditionVariable.new
+ lock = Thread::Mutex.new
+ cond = Thread::ConditionVariable.new
t = Thread.new do
lock.synchronize do
cond.wait(lock)
@@ -474,3 +494,18 @@ assert_equal 'foo', %q{
GC.start
f.call.source
}
+
+assert_normal_exit %q{
+ class C
+ def inspect
+ sleep 0.5
+ 'C!!'
+ end
+ end
+ Thread.new{
+ loop{
+ p C.new
+ }
+ }
+ sleep 0.1
+}, timeout: 5
diff --git a/bootstraptest/test_yjit.rb b/bootstraptest/test_yjit.rb
new file mode 100644
index 0000000000..be66395190
--- /dev/null
+++ b/bootstraptest/test_yjit.rb
@@ -0,0 +1,5462 @@
+# To run the tests in this file only, with YJIT enabled:
+# make btest BTESTS=bootstraptest/test_yjit.rb RUN_OPTS="--yjit-call-threshold=1"
+
+# regression test for popping before side exit
+assert_equal "ok", %q{
+ def foo(a, *) = a
+
+ def call(args, &)
+ foo(1) # spill at where the block arg will be
+ foo(*args, &)
+ end
+
+ call([1, 2])
+
+ begin
+ call([])
+ rescue ArgumentError
+ :ok
+ end
+}
+
+# regression test for send processing before side exit
+assert_equal "ok", %q{
+ def foo(a, *) = :foo
+
+ def call(args)
+ send(:foo, *args)
+ end
+
+ call([1, 2])
+
+ begin
+ call([])
+ rescue ArgumentError
+ :ok
+ end
+}
+
+# test discarding extra yield arguments
+assert_equal "22131300500015901015", %q{
+ def splat_kw(ary) = yield *ary, a: 1
+
+ def splat(ary) = yield *ary
+
+ def kw = yield 1, 2, a: 3
+
+ def kw_only = yield a: 0
+
+ def simple = yield 0, 1
+
+ def none = yield
+
+ def calls
+ [
+ splat([1, 1, 2]) { |x, y| x + y },
+ splat([1, 1, 2]) { |y, opt = raise| opt + y},
+ splat_kw([0, 1]) { |a:| a },
+ kw { |a:| a },
+ kw { |one| one },
+ kw { |one, a:| a },
+ kw_only { |a:| a },
+ kw_only { |a: 1| a },
+ simple { 5.itself },
+ simple { |a| a },
+ simple { |opt = raise| opt },
+ simple { |*rest| rest },
+ simple { |opt_kw: 5| opt_kw },
+ none { |a: 9| a },
+ # autosplat ineractions
+ [0, 1, 2].yield_self { |a, b| [a, b] },
+ [0, 1, 2].yield_self { |a, opt = raise| [a, opt] },
+ [1].yield_self { |a, opt = 4| a + opt },
+ ]
+ end
+
+ calls.join
+}
+
+# test autosplat with empty splat
+assert_equal "ok", %q{
+ def m(pos, splat) = yield pos, *splat
+
+ m([:ok], []) {|v0,| v0 }
+}
+
+# regression test for send stack shifting
+assert_normal_exit %q{
+ def foo(a, b)
+ a.singleton_methods(b)
+ end
+
+ def call_foo
+ [1, 1, 1, 1, 1, 1, send(:foo, 1, 1)]
+ end
+
+ call_foo
+}
+
+# regression test for keyword splat with yield
+assert_equal 'nil', %q{
+ def splat_kw(kwargs) = yield(**kwargs)
+
+ splat_kw({}) { _1 }.inspect
+}
+
+# regression test for arity check with splat
+assert_equal '[:ae, :ae]', %q{
+ def req_one(a_, b_ = 1) = raise
+
+ def test(args)
+ req_one *args
+ rescue ArgumentError
+ :ae
+ end
+
+ [test(Array.new 5), test([])]
+}
+
+# regression test for arity check with splat and send
+assert_equal '[:ae, :ae]', %q{
+ def two_reqs(a, b_, _ = 1) = a.gsub(a, a)
+
+ def test(name, args)
+ send(name, *args)
+ rescue ArgumentError
+ :ae
+ end
+
+ [test(:two_reqs, ["g", nil, nil, nil]), test(:two_reqs, ["g"])]
+}
+
+# regression test for GC marking stubs in invalidated code
+assert_normal_exit %q{
+ skip true unless GC.respond_to?(:compact)
+ garbage = Array.new(10_000) { [] } # create garbage to cause iseq movement
+ eval(<<~RUBY)
+ def foo(n, garbage)
+ if n == 2
+ # 1.times.each to create a cfunc frame to preserve the JIT frame
+ # which will return to a stub housed in an invalidated block
+ return 1.times.each do
+ Object.define_method(:foo) {}
+ garbage.clear
+ GC.verify_compaction_references(toward: :empty, expand_heap: true)
+ end
+ end
+
+ foo(n + 1, garbage)
+ end
+ RUBY
+
+ foo(1, garbage)
+}
+
+# regression test for callee block handler overlapping with arguments
+assert_equal '3', %q{
+ def foo(_req, *args) = args.last
+
+ def call_foo = foo(0, 1, 2, 3, &->{})
+
+ call_foo
+}
+
+# call leaf builtin with a block argument
+assert_equal '0', "0.abs(&nil)"
+
+# regression test for invokeblock iseq guard
+assert_equal 'ok', %q{
+ skip :ok unless GC.respond_to?(:compact)
+ def foo = yield
+ 10.times do |i|
+ ret = eval("foo { #{i} }")
+ raise "failed at #{i}" unless ret == i
+ GC.compact
+ end
+ :ok
+}
+
+# regression test for overly generous guard elision
+assert_equal '[0, :sum, 0, :sum]', %q{
+ # In faulty versions, the following happens:
+ # 1. YJIT puts object on the temp stack with type knowledge
+ # (CArray or CString) about RBASIC_CLASS(object).
+ # 2. In iter=0, due to the type knowledge, YJIT generates
+ # a call to sum() without any guard on RBASIC_CLASS(object).
+ # 3. In iter=1, a singleton class is added to the object,
+ # changing RBASIC_CLASS(object), falsifying the type knowledge.
+ # 4. Because the code from (1) has no class guard, it is incorrectly
+ # reused and the wrong method is invoked.
+ # Putting a literal is important for gaining type knowledge.
+ def carray(iter)
+ array = []
+ array.sum(iter.times { def array.sum(_) = :sum })
+ end
+
+ def cstring(iter)
+ string = "".dup
+ string.sum(iter.times { def string.sum(_) = :sum })
+ end
+
+ [carray(0), carray(1), cstring(0), cstring(1)]
+}
+
+# regression test for return type of Integer#/
+# It can return a T_BIGNUM when inputs are T_FIXNUM.
+assert_equal 0x3fffffffffffffff.to_s, %q{
+ def call(fixnum_min)
+ (fixnum_min / -1) - 1
+ end
+
+ call(-(2**62))
+}
+
+# regression test for return type of String#<<
+assert_equal 'Sub', %q{
+ def call(sub) = (sub << sub).itself
+
+ class Sub < String; end
+
+ call(Sub.new('o')).class
+}
+
+# String#dup with generic ivars
+assert_equal '["str", "ivar"]', %q{
+ def str_dup(str) = str.dup
+ str = "str"
+ str.instance_variable_set(:@ivar, "ivar")
+ str = str_dup(str)
+ [str, str.instance_variable_get(:@ivar)]
+}
+
+# test splat filling required and feeding rest
+assert_equal '[0, 1, 2, [3, 4]]', %q{
+ public def lead_rest(a, b, *rest)
+ [self, a, b, rest]
+ end
+
+ def call(args) = 0.lead_rest(*args)
+
+ call([1, 2, 3, 4])
+}
+
+# test missing opts are nil initialized
+assert_equal '[[0, 1, nil, 3], [0, 1, nil, 3], [0, 1, nil, 3, []], [0, 1, nil, 3, []]]', %q{
+ public def lead_opts(a, b=binding.local_variable_get(:c), c=3)
+ [self, a, b, c]
+ end
+
+ public def opts_rest(a=raise, b=binding.local_variable_get(:c), c=3, *rest)
+ [self, a, b, c, rest]
+ end
+
+ def call(args)
+ [
+ 0.lead_opts(1),
+ 0.lead_opts(*args),
+
+ 0.opts_rest(1),
+ 0.opts_rest(*args),
+ ]
+ end
+
+ call([1])
+}
+
+# test filled optionals with unspecified keyword param
+assert_equal 'ok', %q{
+ def opt_rest_opt_kw(_=1, *, k: :ok) = k
+
+ def call = opt_rest_opt_kw(0)
+
+ call
+}
+
+# test splat empty array with rest param
+assert_equal '[0, 1, 2, []]', %q{
+ public def foo(a=1, b=2, *rest)
+ [self, a, b, rest]
+ end
+
+ def call(args) = 0.foo(*args)
+
+ call([])
+}
+
+# Regression test for yielding with autosplat to block with
+# optional parameters. https://github.com/Shopify/yjit/issues/313
+assert_equal '[:a, :b, :a, :b]', %q{
+ def yielder(arg) = yield(arg) + yield(arg)
+
+ yielder([:a, :b]) do |c = :c, d = :d|
+ [c, d]
+ end
+}
+
+# Regression test for GC mishap while doing shape transition
+assert_equal '[:ok]', %q{
+ # [Bug #19601]
+ class RegressionTest
+ def initialize
+ @a = @b = @fourth_ivar_does_shape_transition = nil
+ end
+
+ def extender
+ @first_extended_ivar = [:ok]
+ end
+ end
+
+ GC.stress = true
+
+ # Used to crash due to GC run in rb_ensure_iv_list_size()
+ # not marking the newly allocated [:ok].
+ RegressionTest.new.extender.itself
+}
+
+assert_equal 'true', %q{
+ # regression test for tracking type of locals for too long
+ def local_setting_cmp(five)
+ victim = 5
+ five.define_singleton_method(:respond_to?) do |_, _|
+ victim = nil
+ end
+
+ # +1 makes YJIT track that victim is a number and
+ # defined? calls respond_to? from above indirectly
+ unless (victim + 1) && defined?(five.something)
+ # Would return wrong result if we still think `five` is a number
+ victim.nil?
+ end
+ end
+
+ local_setting_cmp(Object.new)
+ local_setting_cmp(Object.new)
+}
+
+assert_equal '18374962167983112447', %q{
+ # regression test for incorrectly discarding 32 bits of a pointer when it
+ # comes to default values.
+ def large_literal_default(n: 0xff00_fabcafe0_00ff)
+ n
+ end
+
+ def call_graph_root
+ large_literal_default
+ end
+
+ call_graph_root
+ call_graph_root
+}
+
+assert_normal_exit %q{
+ # regression test for a leak caught by an assert on --yjit-call-threshold=2
+ Foo = 1
+
+ eval("def foo = [#{(['Foo,']*256).join}]")
+
+ foo
+ foo
+
+ Object.send(:remove_const, :Foo)
+}
+
+assert_normal_exit %q{
+ # Test to ensure send on overridden c functions
+ # doesn't corrupt the stack
+ class Bar
+ def bar(x)
+ x
+ end
+ end
+
+ class Foo
+ def bar
+ Bar.new
+ end
+ end
+
+ foo = Foo.new
+ # before this change, this line would error
+ # because "s" would still be on the stack
+ # String.to_s is the overridden method here
+ p foo.bar.bar("s".__send__(:to_s))
+}
+
+
+assert_equal '[nil, nil, nil, nil, nil, nil]', %q{
+ [NilClass, TrueClass, FalseClass, Integer, Float, Symbol].each do |klass|
+ klass.class_eval("def foo = @foo")
+ end
+
+ [nil, true, false, 0xFABCAFE, 0.42, :cake].map do |instance|
+ instance.foo
+ instance.foo
+ end
+}
+
+assert_equal '[nil, nil, nil, nil, nil, nil]', %q{
+ # Tests defined? on non-heap objects
+ [NilClass, TrueClass, FalseClass, Integer, Float, Symbol].each do |klass|
+ klass.class_eval("def foo = defined?(@foo)")
+ end
+
+ [nil, true, false, 0xFABCAFE, 0.42, :cake].map do |instance|
+ instance.foo
+ instance.foo
+ end
+}
+
+assert_equal '[nil, "instance-variable", nil, "instance-variable"]', %q{
+ # defined? on object that changes shape between calls
+ class Foo
+ def foo
+ defined?(@foo)
+ end
+
+ def add
+ @foo = 1
+ end
+
+ def remove
+ self.remove_instance_variable(:@foo)
+ end
+ end
+
+ obj = Foo.new
+ [obj.foo, (obj.add; obj.foo), (obj.remove; obj.foo), (obj.add; obj.foo)]
+}
+
+assert_equal '["instance-variable", 5]', %q{
+ # defined? on object too complex for shape information
+ class Foo
+ def initialize
+ 100.times { |i| instance_variable_set("@foo#{i}", i) }
+ end
+
+ def foo
+ [defined?(@foo5), @foo5]
+ end
+ end
+
+ Foo.new.foo
+}
+
+# getinstancevariable with shape too complex
+assert_normal_exit %q{
+ class Foo
+ def initialize
+ @a = 1
+ end
+
+ def getter
+ @foobar
+ end
+ end
+
+ # Initialize ivars in changing order, making the Foo
+ # class have shape too complex
+ 100.times do |x|
+ foo = Foo.new
+ foo.instance_variable_set(:"@a#{x}", 1)
+ foo.instance_variable_set(:"@foobar", 777)
+
+ # The getter method eventually sees shape too complex
+ r = foo.getter
+ if r != 777
+ raise "error"
+ end
+ end
+}
+
+# Check that frozen objects are respected
+assert_equal 'great', %q{
+ class Foo
+ attr_accessor :bar
+ def initialize
+ @bar = 1
+ freeze
+ end
+ end
+
+ foo = Foo.new
+
+ 5.times do
+ begin
+ foo.bar = 2
+ rescue FrozenError
+ end
+ end
+
+ foo.bar == 1 ? "great" : "NG"
+}
+
+# Check that global variable set works
+assert_equal 'string', %q{
+ def foo
+ $foo = "string"
+ end
+
+ foo
+}
+
+# Check that exceptions work when setting global variables
+assert_equal 'rescued', %q{
+ def set_var
+ $var = 100
+ rescue
+ :rescued
+ end
+
+ set_var
+ trace_var(:$var) { raise }
+ set_var
+}
+
+# Check that global variables work
+assert_equal 'string', %q{
+ $foo = "string"
+
+ def foo
+ $foo
+ end
+
+ foo
+}
+
+# Check that exceptions work when getting global variable
+assert_equal 'rescued', %q{
+ Warning[:deprecated] = true
+
+ module Warning
+ def warn(message)
+ raise
+ end
+ end
+
+ def get_var
+ $=
+ rescue
+ :rescued
+ end
+
+ $VERBOSE = true
+ get_var
+ get_var
+}
+
+# Check that global tracepoints work
+assert_equal 'true', %q{
+ def foo
+ 1
+ end
+
+ foo
+ foo
+ foo
+
+ called = false
+
+ tp = TracePoint.new(:return) { |event|
+ if event.method_id == :foo
+ called = true
+ end
+ }
+ tp.enable
+ foo
+ tp.disable
+ called
+}
+
+# Check that local tracepoints work
+assert_equal 'true', %q{
+ def foo
+ 1
+ end
+
+ foo
+ foo
+ foo
+
+ called = false
+
+ tp = TracePoint.new(:return) { |_| called = true }
+ tp.enable(target: method(:foo))
+ foo
+ tp.disable
+ called
+}
+
+# Make sure that optional param methods return the correct value
+assert_equal '1', %q{
+ def m(ary = [])
+ yield(ary)
+ end
+
+ # Warm the JIT with a 0 param call
+ 2.times { m { } }
+ m(1) { |v| v }
+}
+
+# Test for topn
+assert_equal 'array', %q{
+ def threequals(a)
+ case a
+ when Array
+ "array"
+ when Hash
+ "hash"
+ else
+ "unknown"
+ end
+ end
+
+ threequals([])
+ threequals([])
+ threequals([])
+}
+
+# Test for opt_mod
+assert_equal '2', %q{
+ def mod(a, b)
+ a % b
+ end
+
+ mod(7, 5)
+ mod(7, 5)
+}
+
+# Test for opt_mult
+assert_equal '12', %q{
+ def mult(a, b)
+ a * b
+ end
+
+ mult(6, 2)
+ mult(6, 2)
+}
+
+# Test for opt_div
+assert_equal '3', %q{
+ def div(a, b)
+ a / b
+ end
+
+ div(6, 2)
+ div(6, 2)
+}
+
+# BOP redefined methods work when JIT compiled
+assert_equal 'false', %q{
+ def less_than x
+ x < 10
+ end
+
+ class Integer
+ def < x
+ false
+ end
+ end
+
+ less_than 2
+ less_than 2
+ less_than 2
+}
+
+# BOP redefinition works on Integer#<
+assert_equal 'false', %q{
+ def less_than x
+ x < 10
+ end
+
+ less_than 2
+ less_than 2
+
+ class Integer
+ def < x
+ false
+ end
+ end
+
+ less_than 2
+}
+
+# BOP redefinition works on Integer#<=
+assert_equal 'false', %q{
+ def le(x, y) = x <= y
+
+ le(2, 2)
+
+ class Integer
+ def <=(_) = false
+ end
+
+ le(2, 2)
+}
+
+# BOP redefinition works on Integer#>
+assert_equal 'false', %q{
+ def gt(x, y) = x > y
+
+ gt(3, 2)
+
+ class Integer
+ def >(_) = false
+ end
+
+ gt(3, 2)
+}
+
+# BOP redefinition works on Integer#>=
+assert_equal 'false', %q{
+ def ge(x, y) = x >= y
+
+ ge(2, 2)
+
+ class Integer
+ def >=(_) = false
+ end
+
+ ge(2, 2)
+}
+
+# Putobject, less-than operator, fixnums
+assert_equal '2', %q{
+ def check_index(index)
+ if 0x40000000 < index
+ raise "wat? #{index}"
+ end
+ index
+ end
+ check_index 2
+ check_index 2
+}
+
+# foo leaves a temp on the stack before the call
+assert_equal '6', %q{
+ def bar
+ return 5
+ end
+
+ def foo
+ return 1 + bar
+ end
+
+ foo()
+ retval = foo()
+}
+
+# Method with one arguments
+# foo leaves a temp on the stack before the call
+assert_equal '7', %q{
+ def bar(a)
+ return a + 1
+ end
+
+ def foo
+ return 1 + bar(5)
+ end
+
+ foo()
+ retval = foo()
+}
+
+# Method with two arguments
+# foo leaves a temp on the stack before the call
+assert_equal '0', %q{
+ def bar(a, b)
+ return a - b
+ end
+
+ def foo
+ return 1 + bar(1, 2)
+ end
+
+ foo()
+ retval = foo()
+}
+
+# Passing argument types to callees
+assert_equal '8.5', %q{
+ def foo(x, y)
+ x + y
+ end
+
+ def bar
+ foo(7, 1.5)
+ end
+
+ bar
+ bar
+}
+
+# Recursive Ruby-to-Ruby calls
+assert_equal '21', %q{
+ def fib(n)
+ if n < 2
+ return n
+ end
+
+ return fib(n-1) + fib(n-2)
+ end
+
+ r = fib(8)
+}
+
+# Ruby-to-Ruby call and C call
+assert_normal_exit %q{
+ def bar
+ puts('hi!')
+ end
+
+ def foo
+ bar
+ end
+
+ foo()
+ foo()
+}
+
+# Method aliasing
+assert_equal '42', %q{
+ class Foo
+ def method_a
+ 42
+ end
+
+ alias method_b method_a
+
+ def method_a
+ :somethingelse
+ end
+ end
+
+ @obj = Foo.new
+
+ def test
+ @obj.method_b
+ end
+
+ test
+ test
+}
+
+# Method aliasing with method from parent class
+assert_equal '777', %q{
+ class A
+ def method_a
+ 777
+ end
+ end
+
+ class B < A
+ alias method_b method_a
+ end
+
+ @obj = B.new
+
+ def test
+ @obj.method_b
+ end
+
+ test
+ test
+}
+
+# The hash method is a C function and uses the self argument
+assert_equal 'true', %q{
+ def lehashself
+ hash
+ end
+
+ a = lehashself
+ b = lehashself
+ a == b
+}
+
+# Method redefinition (code invalidation) test
+assert_equal '1', %q{
+ def ret1
+ return 1
+ end
+
+ klass = Class.new do
+ def alias_then_hash(klass, method_to_redefine)
+ # Redefine the method to be ret1
+ klass.alias_method(method_to_redefine, :ret1)
+ hash
+ end
+ end
+
+ instance = klass.new
+
+ i = 0
+ while i < 12
+ if i < 11
+ # Redefine the bar method
+ instance.alias_then_hash(klass, :bar)
+ else
+ # Redefine the hash method to be ret1
+ retval = instance.alias_then_hash(klass, :hash)
+ end
+ i += 1
+ end
+
+ retval
+}
+
+# Code invalidation and opt_getinlinecache
+assert_normal_exit %q{
+ class Foo; end
+
+ # Uses the class constant Foo
+ def use_constant(arg)
+ [Foo.new, arg]
+ end
+
+ def propagate_type
+ i = Array.new
+ i.itself # make it remember that i is on-heap
+ use_constant(i)
+ end
+
+ propagate_type
+ propagate_type
+ use_constant(Foo.new)
+ class Jo; end # bump global constant state
+ use_constant(3)
+}
+
+# Method redefinition (code invalidation) and GC
+assert_equal '7', %q{
+ def bar()
+ return 5
+ end
+
+ def foo()
+ bar()
+ end
+
+ foo()
+ foo()
+
+ def bar()
+ return 7
+ end
+
+ 4.times { GC.start }
+
+ foo()
+ foo()
+}
+
+# Method redefinition with two block versions
+assert_equal '7', %q{
+ def bar()
+ return 5
+ end
+
+ def foo(n)
+ return ((n < 5)? 5:false), bar()
+ end
+
+ foo(4)
+ foo(4)
+ foo(10)
+ foo(10)
+
+ def bar()
+ return 7
+ end
+
+ 4.times { GC.start }
+
+ foo(4)
+ foo(4)[1]
+}
+
+# Method redefinition while the method is on the stack
+assert_equal '[777, 1]', %q{
+ def foo
+ redef()
+ 777
+ end
+
+ def redef
+ # Redefine the global foo
+ eval("def foo; 1; end", TOPLEVEL_BINDING)
+
+ # Collect dead code
+ GC.stress = true
+ GC.start
+
+ # But we will return to the original foo,
+ # which remains alive because it's on the stack
+ end
+
+ # Must produce [777, 1]
+ [foo, foo]
+}
+
+# Test for GC safety. Don't invalidate dead iseqs.
+assert_normal_exit %q{
+ Class.new do
+ def foo
+ itself
+ end
+
+ new.foo
+ new.foo
+ new.foo
+ new.foo
+ end
+
+ 4.times { GC.start }
+ def itself
+ self
+ end
+}
+
+# test setinstancevariable on extended objects
+assert_equal '1', %q{
+ class Extended
+ attr_reader :one
+
+ def write_many
+ @a = 1
+ @b = 2
+ @c = 3
+ @d = 4
+ @one = 1
+ end
+ end
+
+ foo = Extended.new
+ foo.write_many
+ foo.write_many
+ foo.write_many
+}
+
+# test setinstancevariable on embedded objects
+assert_equal '1', %q{
+ class Embedded
+ attr_reader :one
+
+ def write_one
+ @one = 1
+ end
+ end
+
+ foo = Embedded.new
+ foo.write_one
+ foo.write_one
+ foo.write_one
+}
+
+# test setinstancevariable after extension
+assert_equal '[10, 11, 12, 13, 1]', %q{
+ class WillExtend
+ attr_reader :one
+
+ def make_extended
+ @foo1 = 10
+ @foo2 = 11
+ @foo3 = 12
+ @foo4 = 13
+ end
+
+ def write_one
+ @one = 1
+ end
+
+ def read_all
+ [@foo1, @foo2, @foo3, @foo4, @one]
+ end
+ end
+
+ foo = WillExtend.new
+ foo.write_one
+ foo.write_one
+ foo.make_extended
+ foo.write_one
+ foo.read_all
+}
+
+# test setinstancevariable on frozen object
+assert_equal 'object was not modified', %q{
+ class WillFreeze
+ def write
+ @ivar = 1
+ end
+ end
+
+ wf = WillFreeze.new
+ wf.write
+ wf.write
+ wf.freeze
+
+ begin
+ wf.write
+ rescue FrozenError
+ "object was not modified"
+ end
+}
+
+# Test getinstancevariable and inline caches
+assert_equal '6', %q{
+ class Foo
+ def initialize
+ @x1 = 1
+ @x2 = 1
+ @x2 = 1
+ @x3 = 1
+ @x4 = 3
+ end
+
+ def bar
+ x = 1
+ @x4 + @x4
+ end
+ end
+
+ f = Foo.new
+ f.bar
+ f.bar
+}
+
+# Test that getinstancevariable codegen checks for extended table size
+assert_equal "nil\n", %q{
+ class A
+ def read
+ @ins1000
+ end
+ end
+
+ ins = A.new
+ other = A.new
+ 10.times { other.instance_variable_set(:"@otr#{_1}", 'value') }
+ 1001.times { ins.instance_variable_set(:"@ins#{_1}", 'value') }
+
+ ins.read
+ ins.read
+ ins.read
+
+ p other.read
+}
+
+# Test that opt_aref checks the class of the receiver
+assert_equal 'special', %q{
+ def foo(array)
+ array[30]
+ end
+
+ foo([])
+ foo([])
+
+ special = []
+ def special.[](idx)
+ 'special'
+ end
+
+ foo(special)
+}
+
+# Test that object references in generated code get marked and moved
+assert_equal "good", %q{
+ skip :good unless GC.respond_to?(:compact)
+ def bar
+ "good"
+ end
+
+ def foo
+ bar
+ end
+
+ foo
+ foo
+
+ begin
+ GC.verify_compaction_references(expand_heap: true, toward: :empty)
+ rescue NotImplementedError
+ # in case compaction isn't supported
+ end
+
+ foo
+}
+
+# Test polymorphic getinstancevariable. T_OBJECT -> T_STRING
+assert_equal 'ok', %q{
+ @hello = @h1 = @h2 = @h3 = @h4 = 'ok'
+ str = +""
+ str.instance_variable_set(:@hello, 'ok')
+
+ public def get
+ @hello
+ end
+
+ get
+ get
+ str.get
+ str.get
+}
+
+# Test polymorphic getinstancevariable, two different classes
+assert_equal 'ok', %q{
+ class Embedded
+ def initialize
+ @ivar = 0
+ end
+
+ def get
+ @ivar
+ end
+ end
+
+ class Extended < Embedded
+ def initialize
+ @v1 = @v2 = @v3 = @v4 = @ivar = 'ok'
+ end
+ end
+
+ embed = Embedded.new
+ extend = Extended.new
+
+ embed.get
+ embed.get
+ extend.get
+ extend.get
+}
+
+# Test megamorphic getinstancevariable
+assert_equal 'ok', %q{
+ parent = Class.new do
+ def initialize
+ @hello = @h1 = @h2 = @h3 = @h4 = 'ok'
+ end
+
+ def get
+ @hello
+ end
+ end
+
+ subclasses = 300.times.map { Class.new(parent) }
+ subclasses.each { _1.new.get }
+ parent.new.get
+}
+
+# Test polymorphic opt_aref. array -> hash
+assert_equal '[42, :key]', %q{
+ def index(obj, idx)
+ obj[idx]
+ end
+
+ index([], 0) # get over compilation threshold
+
+ [
+ index([42], 0),
+ index({0=>:key}, 0),
+ ]
+}
+
+# Test polymorphic opt_aref. hash -> array -> custom class
+assert_equal '[nil, nil, :custom]', %q{
+ def index(obj, idx)
+ obj[idx]
+ end
+
+ custom = Object.new
+ def custom.[](_idx)
+ :custom
+ end
+
+ index({}, 0) # get over compilation threshold
+
+ [
+ index({}, 0),
+ index([], 0),
+ index(custom, 0)
+ ]
+}
+
+# Test polymorphic opt_aref. array -> custom class
+assert_equal '[42, :custom]', %q{
+ def index(obj, idx)
+ obj[idx]
+ end
+
+ custom = Object.new
+ def custom.[](_idx)
+ :custom
+ end
+
+ index([], 0) # get over compilation threshold
+
+ [
+ index([42], 0),
+ index(custom, 0)
+ ]
+}
+
+# Test custom hash method with opt_aref
+assert_equal '[nil, :ok]', %q{
+ def index(obj, idx)
+ obj[idx]
+ end
+
+ custom = Object.new
+ def custom.hash
+ 42
+ end
+
+ h = {custom => :ok}
+
+ [
+ index(h, 0),
+ index(h, custom)
+ ]
+}
+
+# Test default value block for Hash with opt_aref
+assert_equal '[42, :default]', %q{
+ def index(obj, idx)
+ obj[idx]
+ end
+
+ h = Hash.new { :default }
+ h[0] = 42
+
+ [
+ index(h, 0),
+ index(h, 1)
+ ]
+}
+
+# Test default value block for Hash
+assert_equal "false", <<~RUBY, frozen_string_literal: false
+ def index_with_string(h)
+ h["foo"]
+ end
+
+ h = Hash.new { |h, k| k.frozen? }
+
+ index_with_string(h)
+ index_with_string(h)
+RUBY
+
+# A regression test for making sure cfp->sp is proper when
+# hitting stubs. See :stub-sp-flush:
+assert_equal 'ok', %q{
+ class D
+ def foo
+ Object.new
+ end
+ end
+
+ GC.stress = true
+ 10.times do
+ D.new.foo
+ # ^
+ # This hits a stub with sp_offset > 0
+ end
+
+ :ok
+}
+
+# Test polymorphic callsite, cfunc -> iseq
+assert_equal '[Cfunc, Iseq]', %q{
+ public def call_itself
+ itself # the polymorphic callsite
+ end
+
+ class Cfunc; end
+
+ class Iseq
+ def itself
+ self
+ end
+ end
+
+ call_itself # cross threshold
+
+ [Cfunc.call_itself, Iseq.call_itself]
+}
+
+# Test polymorphic callsite, iseq -> cfunc
+assert_equal '[Iseq, Cfunc]', %q{
+ public def call_itself
+ itself # the polymorphic callsite
+ end
+
+ class Cfunc; end
+
+ class Iseq
+ def itself
+ self
+ end
+ end
+
+ call_itself # cross threshold
+
+ [Iseq.call_itself, Cfunc.call_itself]
+}
+
+# attr_reader method
+assert_equal '[100, 299]', %q{
+ class A
+ attr_reader :foo
+
+ def initialize
+ @foo = 100
+ end
+
+ # Make it extended
+ def fill!
+ @bar = @jojo = @as = @sdfsdf = @foo = 299
+ end
+ end
+
+ def bar(ins)
+ ins.foo
+ end
+
+ ins = A.new
+ oth = A.new
+ oth.fill!
+
+ bar(ins)
+ bar(oth)
+
+ [bar(ins), bar(oth)]
+}
+
+# get ivar on object, then on hash
+assert_equal '[42, 100]', %q{
+ class Hash
+ attr_accessor :foo
+ end
+
+ class A
+ attr_reader :foo
+
+ def initialize
+ @foo = 42
+ end
+ end
+
+ def use(val)
+ val.foo
+ end
+
+
+ h = {}
+ h.foo = 100
+ obj = A.new
+
+ use(obj)
+ [use(obj), use(h)]
+}
+
+# get ivar on String
+assert_equal '[nil, nil, 42, 42]', %q{
+ # @foo to exercise the getinstancevariable instruction
+ public def get_foo
+ @foo
+ end
+
+ get_foo
+ get_foo # compile it for the top level object
+
+ class String
+ attr_reader :foo
+ end
+
+ def run
+ str = String.new
+
+ getter = str.foo
+ insn = str.get_foo
+
+ str.instance_variable_set(:@foo, 42)
+
+ [getter, insn, str.foo, str.get_foo]
+ end
+
+ run
+ run
+}
+
+# splatting an empty array on a getter
+assert_equal '42', %q{
+ @foo = 42
+ module Kernel
+ attr_reader :foo
+ end
+
+ def run
+ foo(*[])
+ end
+
+ run
+ run
+}
+
+# splatting an empty array on a specialized method
+assert_equal 'ok', %q{
+ def run
+ "ok".to_s(*[])
+ end
+
+ run
+ run
+}
+
+# splatting an single element array on a specialized method
+assert_equal '[1]', %q{
+ def run
+ [].<<(*[1])
+ end
+
+ run
+ run
+}
+
+# specialized method with wrong args
+assert_equal 'ok', %q{
+ def run(x)
+ "bad".to_s(123) if x
+ rescue
+ :ok
+ end
+
+ run(false)
+ run(true)
+}
+
+# getinstancevariable on Symbol
+assert_equal '[nil, nil]', %q{
+ # @foo to exercise the getinstancevariable instruction
+ public def get_foo
+ @foo
+ end
+
+ dyn_sym = ("a" + "b").to_sym
+ sym = :static
+
+ # compile get_foo
+ dyn_sym.get_foo
+ dyn_sym.get_foo
+
+ [dyn_sym.get_foo, sym.get_foo]
+}
+
+# attr_reader on Symbol
+assert_equal '[nil, nil]', %q{
+ class Symbol
+ attr_reader :foo
+ end
+
+ public def get_foo
+ foo
+ end
+
+ dyn_sym = ("a" + "b").to_sym
+ sym = :static
+
+ # compile get_foo
+ dyn_sym.get_foo
+ dyn_sym.get_foo
+
+ [dyn_sym.get_foo, sym.get_foo]
+}
+
+# passing too few arguments to method with optional parameters
+assert_equal 'raised', %q{
+ def opt(a, b = 0)
+ end
+
+ def use
+ opt
+ end
+
+ use rescue nil
+ begin
+ use
+ :ng
+ rescue ArgumentError
+ :raised
+ end
+}
+
+# passing too many arguments to method with optional parameters
+assert_equal 'raised', %q{
+ def opt(a, b = 0)
+ end
+
+ def use
+ opt(1, 2, 3, 4)
+ end
+
+ use rescue nil
+ begin
+ use
+ :ng
+ rescue ArgumentError
+ :raised
+ end
+}
+
+# test calling Ruby method with a block
+assert_equal '[1, 2, 42]', %q{
+ def thing(a, b)
+ [a, b, yield]
+ end
+
+ def use
+ thing(1,2) { 42 }
+ end
+
+ use
+ use
+}
+
+# test calling C method with a block
+assert_equal '[42, 42]', %q{
+ def use(array, initial)
+ array.reduce(initial) { |a, b| a + b }
+ end
+
+ use([], 0)
+ [use([2, 2], 38), use([14, 14, 14], 0)]
+}
+
+# test calling block param
+assert_equal '[1, 2, 42]', %q{
+ def foo(&block)
+ block.call
+ end
+
+ [foo {1}, foo {2}, foo {42}]
+}
+
+# test calling without block param
+assert_equal '[1, false, 2, false]', %q{
+ def bar
+ block_given? && yield
+ end
+
+ def foo(&block)
+ bar(&block)
+ end
+
+ [foo { 1 }, foo, foo { 2 }, foo]
+}
+
+# test calling block param failing
+assert_equal '42', %q{
+ def foo(&block)
+ block.call
+ end
+
+ foo {} # warmup
+
+ begin
+ foo
+ rescue NoMethodError => e
+ 42 if nil == e.receiver
+ end
+}
+
+# test calling method taking block param
+assert_equal '[Proc, 1, 2, 3, Proc]', %q{
+ def three(a, b, c, &block)
+ [a, b, c, block.class]
+ end
+
+ def zero(&block)
+ block.class
+ end
+
+ def use_three
+ three(1, 2, 3) {}
+ end
+
+ def use_zero
+ zero {}
+ end
+
+ use_three
+ use_zero
+
+ [use_zero] + use_three
+}
+
+# test building empty array
+assert_equal '[]', %q{
+ def build_arr
+ []
+ end
+
+ build_arr
+ build_arr
+}
+
+# test building array of one element
+assert_equal '[5]', %q{
+ def build_arr(val)
+ [val]
+ end
+
+ build_arr(5)
+ build_arr(5)
+}
+
+# test building array of several element
+assert_equal '[5, 5, 5, 5, 5]', %q{
+ def build_arr(val)
+ [val, val, val, val, val]
+ end
+
+ build_arr(5)
+ build_arr(5)
+}
+
+# test building empty hash
+assert_equal '{}', %q{
+ def build_hash
+ {}
+ end
+
+ build_hash
+ build_hash
+}
+
+# test building hash with values
+assert_equal '{foo: :bar}', %q{
+ def build_hash(val)
+ { foo: val }
+ end
+
+ build_hash(:bar)
+ build_hash(:bar)
+}
+
+# test string interpolation with known types
+assert_equal 'foobar', %q{
+ def make_str
+ foo = -"foo"
+ bar = -"bar"
+ "#{foo}#{bar}"
+ end
+
+ make_str
+ make_str
+}
+
+# test string interpolation with unknown types
+assert_equal 'foobar', %q{
+ def make_str(foo, bar)
+ "#{foo}#{bar}"
+ end
+
+ make_str("foo", "bar")
+ make_str("foo", "bar")
+}
+
+# test string interpolation with known non-strings
+assert_equal 'foo123', %q{
+ def make_str
+ foo = -"foo"
+ bar = 123
+ "#{foo}#{bar}"
+ end
+
+ make_str
+ make_str
+}
+
+# test string interpolation with unknown non-strings
+assert_equal 'foo123', %q{
+ def make_str(foo, bar)
+ "#{foo}#{bar}"
+ end
+
+ make_str("foo", 123)
+ make_str("foo", 123)
+}
+
+# test that invalidation of String#to_s doesn't crash
+assert_equal 'meh', %q{
+ def inval_method
+ "".to_s
+ end
+
+ inval_method
+
+ class String
+ def to_s
+ "meh"
+ end
+ end
+
+ inval_method
+}
+
+# test that overriding to_s on a String subclass works consistently
+assert_equal 'meh', %q{
+ class MyString < String
+ def to_s
+ "meh"
+ end
+ end
+
+ def test_to_s(obj)
+ obj.to_s
+ end
+
+ OBJ = MyString.new
+
+ # Should return '' both times
+ test_to_s("")
+ test_to_s("")
+
+ # Can return '' if YJIT optimises String#to_s too aggressively
+ test_to_s(OBJ)
+ test_to_s(OBJ)
+}
+
+# test string interpolation with overridden to_s
+assert_equal 'foo', %q{
+ class String
+ def to_s
+ "bad"
+ end
+ end
+
+ def make_str(foo)
+ "#{foo}"
+ end
+
+ make_str("foo")
+ make_str("foo")
+}
+
+# Test that String unary plus returns the same object ID for an unfrozen string.
+assert_equal 'true', <<~RUBY, frozen_string_literal: false
+ def jittable_method
+ str = "bar"
+
+ old_obj_id = str.object_id
+ uplus_str = +str
+
+ uplus_str.object_id == old_obj_id
+ end
+ jittable_method
+RUBY
+
+# Test that String unary plus returns a different unfrozen string when given a frozen string
+assert_equal 'false', %q{
+ # Logic needs to be inside an ISEQ, such as a method, for YJIT to compile it
+ def jittable_method
+ frozen_str = "foo".freeze
+
+ old_obj_id = frozen_str.object_id
+ uplus_str = +frozen_str
+
+ uplus_str.object_id == old_obj_id || uplus_str.frozen?
+ end
+
+ jittable_method
+}
+
+# String-subclass objects should behave as expected inside string-interpolation via concatstrings
+assert_equal 'monkeys / monkeys, yo!', %q{
+ class MyString < String
+ # This is a terrible idea in production code, but we'd like YJIT to match CRuby
+ def to_s
+ super + ", yo!"
+ end
+ end
+
+ def jittable_method
+ m = MyString.new('monkeys')
+ "#{m} / #{m.to_s}"
+ end
+
+ jittable_method
+}
+
+# String-subclass objects should behave as expected for string equality
+assert_equal 'false', %q{
+ class MyString < String
+ # This is a terrible idea in production code, but we'd like YJIT to match CRuby
+ def ==(b)
+ "#{self}_" == b
+ end
+ end
+
+ def jittable_method
+ ma = MyString.new("a")
+
+ # Check equality with string-subclass receiver
+ ma == "a" || ma != "a_" ||
+ # Check equality with string receiver
+ "a_" == ma || "a" != ma ||
+ # Check equality between string subclasses
+ ma != MyString.new("a_") ||
+ # Make sure "string always equals itself" check isn't used with overridden equality
+ ma == ma
+ end
+ jittable_method
+}
+
+# Test to_s duplicates a string subclass object but not a string
+assert_equal 'false', %q{
+ class MyString < String; end
+
+ def jittable_method
+ a = "a"
+ ma = MyString.new("a")
+
+ a.object_id != a.to_s.object_id ||
+ ma.object_id == ma.to_s.object_id
+ end
+ jittable_method
+}
+
+# Test freeze on string subclass
+assert_equal 'true', %q{
+ class MyString < String; end
+
+ def jittable_method
+ fma = MyString.new("a").freeze
+
+ # Freezing a string subclass should not duplicate it
+ fma.object_id == fma.freeze.object_id
+ end
+ jittable_method
+}
+
+# Test unary minus on string subclass
+assert_equal 'true', %q{
+ class MyString < String; end
+
+ def jittable_method
+ ma = MyString.new("a")
+ fma = MyString.new("a").freeze
+
+ # Unary minus on frozen string subclass should not duplicate it
+ fma.object_id == (-fma).object_id &&
+ # Unary minus on unfrozen string subclass should duplicate it
+ ma.object_id != (-ma).object_id
+ end
+ jittable_method
+}
+
+# Test unary plus on string subclass
+assert_equal 'true', %q{
+ class MyString < String; end
+
+ def jittable_method
+ fma = MyString.new("a").freeze
+
+ # Unary plus on frozen string subclass should not duplicate it
+ fma.object_id != (+fma).object_id
+ end
+ jittable_method
+}
+
+# test getbyte on string class
+assert_equal '[97, :nil, 97, :nil, :raised]', %q{
+ def getbyte(s, i)
+ byte = begin
+ s.getbyte(i)
+ rescue TypeError
+ :raised
+ end
+
+ byte || :nil
+ end
+
+ getbyte("a", 0)
+ getbyte("a", 0)
+
+ [getbyte("a", 0), getbyte("a", 1), getbyte("a", -1), getbyte("a", -2), getbyte("a", "a")]
+}
+
+# Basic test for String#setbyte
+assert_equal 'AoZ', %q{
+ s = +"foo"
+ s.setbyte(0, 65)
+ s.setbyte(-1, 90)
+ s
+}
+
+# String#setbyte IndexError
+assert_equal 'String#setbyte', %q{
+ def ccall = "".setbyte(1, 0)
+ begin
+ ccall
+ rescue => e
+ e.backtrace.first.split("'").last
+ end
+}
+
+# String#setbyte TypeError
+assert_equal 'String#setbyte', %q{
+ def ccall = "".setbyte(nil, 0)
+ begin
+ ccall
+ rescue => e
+ e.backtrace.first.split("'").last
+ end
+}
+
+# String#setbyte FrozenError
+assert_equal 'String#setbyte', %q{
+ def ccall = "a".freeze.setbyte(0, 0)
+ begin
+ ccall
+ rescue => e
+ e.backtrace.first.split("'").last
+ end
+}
+
+# non-leaf String#setbyte
+assert_equal 'String#setbyte', %q{
+ def to_int
+ @caller = caller
+ 0
+ end
+
+ def ccall = "a".dup.setbyte(self, 98)
+ ccall
+
+ @caller.first.split("'").last
+}
+
+# non-leaf String#byteslice
+assert_equal 'TypeError', %q{
+ def ccall = "".byteslice(nil, nil)
+ begin
+ ccall
+ rescue => e
+ e.class
+ end
+}
+
+# Test << operator on string subclass
+assert_equal 'abab', %q{
+ class MyString < String; end
+
+ def jittable_method
+ a = -"a"
+ mb = MyString.new("b")
+
+ buf = String.new
+ mbuf = MyString.new
+
+ buf << a << mb
+ mbuf << a << mb
+
+ buf + mbuf
+ end
+ jittable_method
+}
+
+# test invokebuiltin as used in struct assignment
+assert_equal '123', %q{
+ def foo(obj)
+ obj.foo = 123
+ end
+
+ struct = Struct.new(:foo)
+ obj = struct.new
+ foo(obj)
+ foo(obj)
+}
+
+# test invokebuiltin_delegate as used inside Dir.open
+assert_equal '.', %q{
+ def foo(path)
+ Dir.open(path).path
+ end
+
+ foo(".")
+ foo(".")
+}
+
+# test invokebuiltin_delegate_leave in method called from jit
+assert_normal_exit %q{
+ def foo(obj)
+ obj.clone
+ end
+
+ foo(Object.new)
+ foo(Object.new)
+}
+
+# test invokebuiltin_delegate_leave in method called from cfunc
+assert_normal_exit %q{
+ def foo(obj)
+ [obj].map(&:clone)
+ end
+
+ foo(Object.new)
+ foo(Object.new)
+}
+
+# defining TrueClass#!
+assert_equal '[false, false, :ok]', %q{
+ def foo(obj)
+ !obj
+ end
+
+ x = foo(true)
+ y = foo(true)
+
+ class TrueClass
+ def !
+ :ok
+ end
+ end
+
+ z = foo(true)
+
+ [x, y, z]
+}
+
+# defining FalseClass#!
+assert_equal '[true, true, :ok]', %q{
+ def foo(obj)
+ !obj
+ end
+
+ x = foo(false)
+ y = foo(false)
+
+ class FalseClass
+ def !
+ :ok
+ end
+ end
+
+ z = foo(false)
+
+ [x, y, z]
+}
+
+# defining NilClass#!
+assert_equal '[true, true, :ok]', %q{
+ def foo(obj)
+ !obj
+ end
+
+ x = foo(nil)
+ y = foo(nil)
+
+ class NilClass
+ def !
+ :ok
+ end
+ end
+
+ z = foo(nil)
+
+ [x, y, z]
+}
+
+# polymorphic opt_not
+assert_equal '[true, true, false, false, false, false, false]', %q{
+ def foo(obj)
+ !obj
+ end
+
+ foo(0)
+ [foo(nil), foo(false), foo(true), foo([]), foo(0), foo(4.2), foo(:sym)]
+}
+
+# getlocal with 2 levels
+assert_equal '7', %q{
+ def foo(foo, bar)
+ while foo > 0
+ while bar > 0
+ return foo + bar
+ end
+ end
+ end
+
+ foo(5,2)
+ foo(5,2)
+}
+
+# regression test for argument registers with invalidation
+assert_equal '[0, 1, 2]', %q{
+ def test(n)
+ ret = n
+ binding
+ ret
+ end
+
+ [0, 1, 2].map do |n|
+ test(n)
+ end
+}
+
+# regression test for argument registers
+assert_equal 'true', %q{
+ class Foo
+ def ==(other)
+ other == nil
+ end
+ end
+
+ def test
+ [Foo.new].include?(Foo.new)
+ end
+
+ test
+}
+
+# test pattern matching
+assert_equal '[:ok, :ok]', %q{
+ class C
+ def destructure_keys
+ {}
+ end
+ end
+
+ pattern_match = ->(i) do
+ case i
+ in a: 0
+ :ng
+ else
+ :ok
+ end
+ end
+
+ [{}, C.new].map(&pattern_match)
+}
+
+# Call to object with singleton
+assert_equal '123', %q{
+ obj = Object.new
+ def obj.foo
+ 123
+ end
+
+ def foo(obj)
+ obj.foo()
+ end
+
+ foo(obj)
+ foo(obj)
+}
+
+# Call method on an object that has a non-material
+# singleton class.
+# TODO: assert that it takes no side exits? This
+# test case revealed that we were taking exits unnecessarily.
+assert_normal_exit %q{
+ def foo(obj)
+ obj.itself
+ end
+
+ o = Object.new.singleton_class
+ foo(o)
+ foo(o)
+}
+
+# Call to singleton class
+assert_equal '123', %q{
+ class Foo
+ def self.foo
+ 123
+ end
+ end
+
+ def foo(obj)
+ obj.foo()
+ end
+
+ foo(Foo)
+ foo(Foo)
+}
+
+# Test EP == BP invalidation with moving ISEQs
+assert_equal 'ok', %q{
+ skip :ok unless GC.respond_to?(:compact)
+ def entry
+ ok = proc { :ok } # set #entry as an EP-escaping ISEQ
+ [nil].reverse_each do # avoid exiting the JIT frame on the constant
+ GC.compact # move #entry ISEQ
+ end
+ ok # should be read off of escaped EP
+ end
+
+ entry.call
+}
+
+# invokesuper edge case
+assert_equal '[:A, [:A, :B]]', %q{
+ class B
+ def foo = :B
+ end
+
+ class A < B
+ def foo = [:A, super()]
+ end
+
+ A.new.foo
+ A.new.foo # compile A#foo
+
+ class C < A
+ define_method(:bar, A.instance_method(:foo))
+ end
+
+ C.new.bar
+}
+
+# Same invokesuper bytecode, multiple destinations
+assert_equal '[:Forward, :SecondTerminus]', %q{
+ module Terminus
+ def foo = :Terminus
+ end
+
+ module SecondTerminus
+ def foo = :SecondTerminus
+ end
+
+
+ module Forward
+ def foo = [:Forward, super]
+ end
+
+ class B
+ include SecondTerminus
+ end
+
+ class A < B
+ include Terminus
+ include Forward
+ end
+
+ A.new.foo
+ A.new.foo # compile
+
+ class B
+ include Forward
+ alias bar foo
+ end
+
+ # A.ancestors.take(5) == [A, Forward, Terminus, B, Forward, SecondTerminus]
+
+ A.new.bar
+}
+
+# invokesuper calling into itself
+assert_equal '[:B, [:B, :m]]', %q{
+ module M
+ def foo = :m
+ end
+
+ class B
+ include M
+ def foo = [:B, super]
+ end
+
+ ins = B.new
+ ins.singleton_class # materialize the singleton class
+ ins.foo
+ ins.foo # compile
+
+ ins.singleton_class.define_method(:bar, B.instance_method(:foo))
+ ins.bar
+}
+
+# invokesuper changed ancestor
+assert_equal '[:A, [:M, :B]]', %q{
+ class B
+ def foo
+ :B
+ end
+ end
+
+ class A < B
+ def foo
+ [:A, super]
+ end
+ end
+
+ module M
+ def foo
+ [:M, super]
+ end
+ end
+
+ ins = A.new
+ ins.foo
+ ins.foo
+ A.include(M)
+ ins.foo
+}
+
+# invokesuper changed ancestor via prepend
+assert_equal '[:A, [:M, :B]]', %q{
+ class B
+ def foo
+ :B
+ end
+ end
+
+ class A < B
+ def foo
+ [:A, super]
+ end
+ end
+
+ module M
+ def foo
+ [:M, super]
+ end
+ end
+
+ ins = A.new
+ ins.foo
+ ins.foo
+ B.prepend(M)
+ ins.foo
+}
+
+# invokesuper replaced method
+assert_equal '[:A, :Btwo]', %q{
+ class B
+ def foo
+ :B
+ end
+ end
+
+ class A < B
+ def foo
+ [:A, super]
+ end
+ end
+
+ ins = A.new
+ ins.foo
+ ins.foo
+ class B
+ def foo
+ :Btwo
+ end
+ end
+ ins.foo
+}
+
+# invokesuper with a block
+assert_equal 'true', %q{
+ class A
+ def foo = block_given?
+ end
+
+ class B < A
+ def foo = super()
+ end
+
+ B.new.foo { }
+ B.new.foo { }
+}
+
+# invokesuper in a block
+assert_equal '[0, 2]', %q{
+ class A
+ def foo(x) = x * 2
+ end
+
+ class B < A
+ def foo
+ 2.times.map do |x|
+ super(x)
+ end
+ end
+ end
+
+ B.new.foo
+ B.new.foo
+}
+
+# invokesuper zsuper in a bmethod
+assert_equal 'ok', %q{
+ class Foo
+ define_method(:itself) { super }
+ end
+ begin
+ Foo.new.itself
+ rescue RuntimeError
+ :ok
+ end
+}
+
+# Call to fixnum
+assert_equal '[true, false]', %q{
+ def is_odd(obj)
+ obj.odd?
+ end
+
+ is_odd(1)
+ is_odd(1)
+
+ [is_odd(123), is_odd(456)]
+}
+
+# Call to bignum
+assert_equal '[true, false]', %q{
+ def is_odd(obj)
+ obj.odd?
+ end
+
+ bignum = 99999999999999999999
+ is_odd(bignum)
+ is_odd(bignum)
+
+ [is_odd(bignum), is_odd(bignum+1)]
+}
+
+# Call to fixnum and bignum
+assert_equal '[true, false, true, false]', %q{
+ def is_odd(obj)
+ obj.odd?
+ end
+
+ bignum = 99999999999999999999
+ is_odd(bignum)
+ is_odd(bignum)
+ is_odd(123)
+ is_odd(123)
+
+ [is_odd(123), is_odd(456), is_odd(bignum), is_odd(bignum+1)]
+}
+
+# Flonum and Flonum
+assert_equal '[2.0, 0.0, 1.0, 4.0]', %q{
+ [1.0 + 1.0, 1.0 - 1.0, 1.0 * 1.0, 8.0 / 2.0]
+}
+
+# Flonum and Fixnum
+assert_equal '[2.0, 0.0, 1.0, 4.0]', %q{
+ [1.0 + 1, 1.0 - 1, 1.0 * 1, 8.0 / 2]
+}
+
+# Call to static and dynamic symbol
+assert_equal 'bar', %q{
+ def to_string(obj)
+ obj.to_s
+ end
+
+ to_string(:foo)
+ to_string(:foo)
+ to_string((-"bar").to_sym)
+ to_string((-"bar").to_sym)
+}
+
+# Call to flonum and heap float
+assert_equal '[nil, nil, nil, 1]', %q{
+ def is_inf(obj)
+ obj.infinite?
+ end
+
+ is_inf(0.0)
+ is_inf(0.0)
+ is_inf(1e256)
+ is_inf(1e256)
+
+ [
+ is_inf(0.0),
+ is_inf(1.0),
+ is_inf(1e256),
+ is_inf(1.0/0.0)
+ ]
+}
+
+assert_equal '[1, 2, 3, 4, 5]', %q{
+ def splatarray
+ [*(1..5)]
+ end
+
+ splatarray
+ splatarray
+}
+
+# splatkw
+assert_equal '[1, 2]', %q{
+ def foo(a:) = [a, yield]
+
+ def entry(&block)
+ a = { a: 1 }
+ foo(**a, &block)
+ end
+
+ entry { 2 }
+}
+assert_equal '[1, 2]', %q{
+ def foo(a:) = [a, yield]
+
+ def entry(obj, &block)
+ foo(**obj, &block)
+ end
+
+ entry({ a: 3 }) { 2 }
+ obj = Object.new
+ def obj.to_hash = { a: 1 }
+ entry(obj) { 2 }
+}
+
+assert_equal '[1, 1, 2, 1, 2, 3]', %q{
+ def expandarray
+ arr = [1, 2, 3]
+
+ a, = arr
+ b, c, = arr
+ d, e, f = arr
+
+ [a, b, c, d, e, f]
+ end
+
+ expandarray
+ expandarray
+}
+
+assert_equal '[1, 1]', %q{
+ def expandarray_useless_splat
+ arr = (1..10).to_a
+
+ a, * = arr
+ b, (*) = arr
+
+ [a, b]
+ end
+
+ expandarray_useless_splat
+ expandarray_useless_splat
+}
+
+assert_equal '[:not_heap, nil, nil]', %q{
+ def expandarray_not_heap
+ a, b, c = :not_heap
+ [a, b, c]
+ end
+
+ expandarray_not_heap
+ expandarray_not_heap
+}
+
+assert_equal '[:not_array, nil, nil]', %q{
+ def expandarray_not_array(obj)
+ a, b, c = obj
+ [a, b, c]
+ end
+
+ obj = Object.new
+ def obj.to_ary
+ [:not_array]
+ end
+
+ expandarray_not_array(obj)
+ expandarray_not_array(obj)
+}
+
+assert_equal '[1, 2]', %q{
+ class NilClass
+ private
+ def to_ary
+ [1, 2]
+ end
+ end
+
+ def expandarray_redefined_nilclass
+ a, b = nil
+ [a, b]
+ end
+
+ expandarray_redefined_nilclass
+ expandarray_redefined_nilclass
+}
+
+assert_equal 'not_array', %q{
+ def expandarray_not_array(obj)
+ a, = obj
+ a
+ end
+
+ obj = Object.new
+ def obj.method_missing(m, *args, &block)
+ return [:not_array] if m == :to_ary
+ super
+ end
+
+ expandarray_not_array(obj)
+ expandarray_not_array(obj)
+}
+
+assert_equal '[1, 2, nil]', %q{
+ def expandarray_rhs_too_small
+ a, b, c = [1, 2]
+ [a, b, c]
+ end
+
+ expandarray_rhs_too_small
+ expandarray_rhs_too_small
+}
+
+assert_equal '[nil, 2, nil]', %q{
+ def foo(arr)
+ a, b, c = arr
+ end
+
+ a, b, c1 = foo([0, 1])
+ a, b, c2 = foo([0, 1, 2])
+ a, b, c3 = foo([0, 1])
+ [c1, c2, c3]
+}
+
+assert_equal '[1, [2]]', %q{
+ def expandarray_splat
+ a, *b = [1, 2]
+ [a, b]
+ end
+
+ expandarray_splat
+ expandarray_splat
+}
+
+assert_equal '2', %q{
+ def expandarray_postarg
+ *, a = [1, 2]
+ a
+ end
+
+ expandarray_postarg
+ expandarray_postarg
+}
+
+assert_equal '10', %q{
+ obj = Object.new
+ val = nil
+ obj.define_singleton_method(:to_ary) { val = 10; [] }
+
+ def expandarray_always_call_to_ary(object)
+ * = object
+ end
+
+ expandarray_always_call_to_ary(obj)
+ expandarray_always_call_to_ary(obj)
+
+ val
+}
+
+# regression test of local type change
+assert_equal '1.1', %q{
+def bar(baz, quux)
+ if baz.integer?
+ baz, quux = quux, nil
+ end
+ baz.to_s
+end
+
+bar(123, 1.1)
+bar(123, 1.1)
+}
+
+# test enabling a line TracePoint in a C method call
+assert_equal '[[:line, true]]', %q{
+ events = []
+ events.instance_variable_set(
+ :@tp,
+ TracePoint.new(:line) { |tp| events << [tp.event, tp.lineno] if tp.path == __FILE__ }
+ )
+ def events.to_str
+ @tp.enable; ''
+ end
+
+ # Stay in generated code while enabling tracing
+ def events.compiled(obj)
+ String(obj)
+ @tp.disable; __LINE__
+ end
+
+ line = events.compiled(events)
+ events[0][-1] = (events[0][-1] == line)
+
+ events
+}
+
+# test enabling a c_return TracePoint in a C method call
+assert_equal '[[:c_return, :String, :string_alias, "events_to_str"]]', %q{
+ events = []
+ events.instance_variable_set(:@tp, TracePoint.new(:c_return) { |tp| events << [tp.event, tp.method_id, tp.callee_id, tp.return_value] })
+ def events.to_str
+ @tp.enable; 'events_to_str'
+ end
+
+ # Stay in generated code while enabling tracing
+ alias string_alias String
+ def events.compiled(obj)
+ string_alias(obj)
+ @tp.disable
+ end
+
+ events.compiled(events)
+
+ events
+}
+
+# test enabling a TracePoint that targets a particular line in a C method call
+assert_equal '[true]', %q{
+ events = []
+ events.instance_variable_set(:@tp, TracePoint.new(:line) { |tp| events << tp.lineno })
+ def events.to_str
+ @tp.enable(target: method(:compiled))
+ ''
+ end
+
+ # Stay in generated code while enabling tracing
+ def events.compiled(obj)
+ String(obj)
+ __LINE__
+ end
+
+ line = events.compiled(events)
+ events[0] = (events[0] == line)
+
+ events
+}
+
+# test enabling tracing in the middle of splatarray
+assert_equal '[true]', %q{
+ events = []
+ obj = Object.new
+ obj.instance_variable_set(:@tp, TracePoint.new(:line) { |tp| events << tp.lineno })
+ def obj.to_a
+ @tp.enable(target: method(:compiled))
+ []
+ end
+
+ # Enable tracing in the middle of the splatarray instruction
+ def obj.compiled(obj)
+ * = *obj
+ __LINE__
+ end
+
+ obj.compiled([])
+ line = obj.compiled(obj)
+ events[0] = (events[0] == line)
+
+ events
+}
+
+# test enabling tracing in the middle of opt_aref. Different since the codegen
+# for it ends in a jump.
+assert_equal '[true]', %q{
+ def lookup(hash, tp)
+ hash[42]
+ tp.disable; __LINE__
+ end
+
+ lines = []
+ tp = TracePoint.new(:line) { lines << _1.lineno if _1.path == __FILE__ }
+
+ lookup(:foo, tp)
+ lookup({}, tp)
+
+ enable_tracing_on_missing = Hash.new { tp.enable }
+
+ expected_line = lookup(enable_tracing_on_missing, tp)
+
+ lines[0] = true if lines[0] == expected_line
+
+ lines
+}
+
+# test enabling c_call tracing before compiling
+assert_equal '[[:c_call, :itself]]', %q{
+ def shouldnt_compile
+ itself
+ end
+
+ events = []
+ tp = TracePoint.new(:c_call) { |tp| events << [tp.event, tp.method_id] }
+
+ # assume first call compiles
+ tp.enable { shouldnt_compile }
+
+ events
+}
+
+# test enabling c_return tracing before compiling
+assert_equal '[[:c_return, :itself, main]]', %q{
+ def shouldnt_compile
+ itself
+ end
+
+ events = []
+ tp = TracePoint.new(:c_return) { |tp| events << [tp.event, tp.method_id, tp.return_value] }
+
+ # assume first call compiles
+ tp.enable { shouldnt_compile }
+
+ events
+}
+
+# test c_call invalidation
+assert_equal '[[:c_call, :itself]]', %q{
+ # enable the event once to make sure invalidation
+ # happens the second time we enable it
+ TracePoint.new(:c_call) {}.enable{}
+
+ def compiled
+ itself
+ end
+
+ # assume first call compiles
+ compiled
+
+ events = []
+ tp = TracePoint.new(:c_call) { |tp| events << [tp.event, tp.method_id] }
+ tp.enable { compiled }
+
+ events
+}
+
+# test enabling tracing for a suspended fiber
+assert_equal '[[:return, 42]]', %q{
+ def traced_method
+ Fiber.yield
+ 42
+ end
+
+ events = []
+ tp = TracePoint.new(:return) { events << [_1.event, _1.return_value] }
+ # assume first call compiles
+ fiber = Fiber.new { traced_method }
+ fiber.resume
+ tp.enable(target: method(:traced_method))
+ fiber.resume
+
+ events
+}
+
+# test compiling on non-tracing ractor then running on a tracing one
+assert_equal '[:itself]', %q{
+ def traced_method
+ itself
+ end
+
+ port = Ractor::Port.new
+ tracing_ractor = Ractor.new port do |port|
+ # 1: start tracing
+ events = []
+ tp = TracePoint.new(:c_call) { events << _1.method_id }
+ tp.enable
+ port << nil
+
+ # 3: run compiled method on tracing ractor
+ port << nil
+ traced_method
+
+ events
+ ensure
+ tp&.disable
+ end
+
+ port.receive
+
+ # 2: compile on non tracing ractor
+ traced_method
+
+ port.receive
+ tracing_ractor.value
+}
+
+# Try to hit a lazy branch stub while another ractor enables tracing
+assert_equal '42', %q{
+ def compiled(arg)
+ if arg
+ arg + 1
+ else
+ itself
+ itself
+ end
+ end
+
+ port = Ractor::Port.new
+ ractor = Ractor.new port do |port|
+ compiled(false)
+ port << nil
+ compiled(41)
+ end
+
+ tp = TracePoint.new(:line) { itself }
+ port.receive
+ tp.enable
+
+ ractor.value
+}
+
+# Test equality with changing types
+assert_equal '[true, false, false, false]', %q{
+ def eq(a, b)
+ a == b
+ end
+
+ [
+ eq("foo", "foo"),
+ eq("foo", "bar"),
+ eq(:foo, "bar"),
+ eq("foo", :bar)
+ ]
+}
+
+# Redefined String eq
+assert_equal 'true', %q{
+ class String
+ def ==(other)
+ true
+ end
+ end
+
+ def eq(a, b)
+ a == b
+ end
+
+ eq("foo", "bar")
+ eq("foo", "bar")
+}
+
+# Redefined Integer eq
+assert_equal 'true', %q{
+ class Integer
+ def ==(other)
+ true
+ end
+ end
+
+ def eq(a, b)
+ a == b
+ end
+
+ eq(1, 2)
+ eq(1, 2)
+}
+
+# aset on array with invalid key
+assert_normal_exit %q{
+ def foo(arr)
+ arr[:foo] = 123
+ end
+
+ foo([1]) rescue nil
+ foo([1]) rescue nil
+}
+
+# test ractor exception on when setting ivar
+assert_equal '42', %q{
+ class A
+ def self.foo
+ _foo = 1
+ _bar = 2
+ begin
+ @bar = _foo + _bar
+ rescue Ractor::IsolationError
+ 42
+ end
+ end
+ end
+
+ A.foo
+ A.foo
+
+ Ractor.new { A.foo }.value
+}
+
+assert_equal '["plain", "special", "sub", "plain"]', %q{
+ def foo(arg)
+ arg.to_s
+ end
+
+ class Sub < String
+ end
+
+ special = String.new("special")
+ special.singleton_class
+
+ [
+ foo("plain"),
+ foo(special),
+ foo(Sub.new("sub")),
+ foo("plain")
+ ]
+}
+
+assert_equal '["sub", "sub"]', %q{
+ def foo(arg)
+ arg.to_s
+ end
+
+ class Sub < String
+ def to_s
+ super
+ end
+ end
+
+ sub = Sub.new("sub")
+
+ [foo(sub), foo(sub)]
+}
+
+assert_equal '[1]', %q{
+ def kwargs(value:)
+ value
+ end
+
+ 5.times.map { kwargs(value: 1) }.uniq
+}
+
+assert_equal '[:ok]', %q{
+ def kwargs(value:)
+ value
+ end
+
+ 5.times.map { kwargs() rescue :ok }.uniq
+}
+
+assert_equal '[:ok]', %q{
+ def kwargs(a:, b: nil)
+ value
+ end
+
+ 5.times.map { kwargs(b: 123) rescue :ok }.uniq
+}
+
+assert_equal '[[1, 2]]', %q{
+ def kwargs(left:, right:)
+ [left, right]
+ end
+
+ 5.times.flat_map do
+ [
+ kwargs(left: 1, right: 2),
+ kwargs(right: 2, left: 1)
+ ]
+ end.uniq
+}
+
+assert_equal '[[1, 2]]', %q{
+ def kwargs(lead, kwarg:)
+ [lead, kwarg]
+ end
+
+ 5.times.map { kwargs(1, kwarg: 2) }.uniq
+}
+
+# optional and keyword args
+assert_equal '[[1, 2, 3]]', %q{
+ def opt_and_kwargs(a, b=2, c: nil)
+ [a,b,c]
+ end
+
+ 5.times.map { opt_and_kwargs(1, c: 3) }.uniq
+}
+
+assert_equal '[[1, 2, 3]]', %q{
+ def opt_and_kwargs(a, b=nil, c: nil)
+ [a,b,c]
+ end
+
+ 5.times.map { opt_and_kwargs(1, 2, c: 3) }.uniq
+}
+
+# Bug #18453
+assert_equal '[[1, nil, 2]]', %q{
+ def opt_and_kwargs(a = {}, b: nil, c: nil)
+ [a, b, c]
+ end
+
+ 5.times.map { opt_and_kwargs(1, c: 2) }.uniq
+}
+
+assert_equal '[[{}, nil, 1]]', %q{
+ def opt_and_kwargs(a = {}, b: nil, c: nil)
+ [a, b, c]
+ end
+
+ 5.times.map { opt_and_kwargs(c: 1) }.uniq
+}
+
+# leading and keyword arguments are swapped into the right order
+assert_equal '[[1, 2, 3, 4, 5, 6]]', %q{
+ def kwargs(five, six, a:, b:, c:, d:)
+ [a, b, c, d, five, six]
+ end
+
+ 5.times.flat_map do
+ [
+ kwargs(5, 6, a: 1, b: 2, c: 3, d: 4),
+ kwargs(5, 6, a: 1, b: 2, d: 4, c: 3),
+ kwargs(5, 6, a: 1, c: 3, b: 2, d: 4),
+ kwargs(5, 6, a: 1, c: 3, d: 4, b: 2),
+ kwargs(5, 6, a: 1, d: 4, b: 2, c: 3),
+ kwargs(5, 6, a: 1, d: 4, c: 3, b: 2),
+ kwargs(5, 6, b: 2, a: 1, c: 3, d: 4),
+ kwargs(5, 6, b: 2, a: 1, d: 4, c: 3),
+ kwargs(5, 6, b: 2, c: 3, a: 1, d: 4),
+ kwargs(5, 6, b: 2, c: 3, d: 4, a: 1),
+ kwargs(5, 6, b: 2, d: 4, a: 1, c: 3),
+ kwargs(5, 6, b: 2, d: 4, c: 3, a: 1),
+ kwargs(5, 6, c: 3, a: 1, b: 2, d: 4),
+ kwargs(5, 6, c: 3, a: 1, d: 4, b: 2),
+ kwargs(5, 6, c: 3, b: 2, a: 1, d: 4),
+ kwargs(5, 6, c: 3, b: 2, d: 4, a: 1),
+ kwargs(5, 6, c: 3, d: 4, a: 1, b: 2),
+ kwargs(5, 6, c: 3, d: 4, b: 2, a: 1),
+ kwargs(5, 6, d: 4, a: 1, b: 2, c: 3),
+ kwargs(5, 6, d: 4, a: 1, c: 3, b: 2),
+ kwargs(5, 6, d: 4, b: 2, a: 1, c: 3),
+ kwargs(5, 6, d: 4, b: 2, c: 3, a: 1),
+ kwargs(5, 6, d: 4, c: 3, a: 1, b: 2),
+ kwargs(5, 6, d: 4, c: 3, b: 2, a: 1)
+ ]
+ end.uniq
+}
+
+# implicit hashes get skipped and don't break compilation
+assert_equal '[[:key]]', %q{
+ def implicit(hash)
+ hash.keys
+ end
+
+ 5.times.map { implicit(key: :value) }.uniq
+}
+
+# default values on keywords don't mess up argument order
+assert_equal '[2]', %q{
+ def default_value
+ 1
+ end
+
+ def default_expression(value: default_value)
+ value
+ end
+
+ 5.times.map { default_expression(value: 2) }.uniq
+}
+
+# constant default values on keywords
+assert_equal '[3]', %q{
+ def default_expression(value: 3)
+ value
+ end
+
+ 5.times.map { default_expression }.uniq
+}
+
+# non-constant default values on keywords
+assert_equal '[3]', %q{
+ def default_value
+ 3
+ end
+
+ def default_expression(value: default_value)
+ value
+ end
+
+ 5.times.map { default_expression }.uniq
+}
+
+# reordered optional kwargs
+assert_equal '[[100, 1]]', %q{
+ def foo(capacity: 100, max: nil)
+ [capacity, max]
+ end
+
+ 5.times.map { foo(max: 1) }.uniq
+}
+
+# invalid lead param
+assert_equal 'ok', %q{
+ def bar(baz: 2)
+ baz
+ end
+
+ def foo
+ bar(1, baz: 123)
+ end
+
+ begin
+ foo
+ foo
+ rescue ArgumentError => e
+ print "ok"
+ end
+}
+
+# reordered required kwargs
+assert_equal '[[1, 2, 3, 4]]', %q{
+ def foo(default1: 1, required1:, default2: 3, required2:)
+ [default1, required1, default2, required2]
+ end
+
+ 5.times.map { foo(required1: 2, required2: 4) }.uniq
+}
+
+# reordered default expression kwargs
+assert_equal '[[:one, :two, 3]]', %q{
+ def foo(arg1: (1+0), arg2: (2+0), arg3: (3+0))
+ [arg1, arg2, arg3]
+ end
+
+ 5.times.map { foo(arg2: :two, arg1: :one) }.uniq
+}
+
+# complex kwargs
+assert_equal '[[1, 2, 3, 4]]', %q{
+ def foo(required:, specified: 999, simple_default: 3, complex_default: "4".to_i)
+ [required, specified, simple_default, complex_default]
+ end
+
+ 5.times.map { foo(specified: 2, required: 1) }.uniq
+}
+
+# cfunc kwargs
+assert_equal '{foo: 123}', %q{
+ def foo(bar)
+ bar.store(:value, foo: 123)
+ bar[:value]
+ end
+
+ foo({})
+ foo({})
+}
+
+# cfunc kwargs
+assert_equal '{foo: 123}', %q{
+ def foo(bar)
+ bar.replace(foo: 123)
+ end
+
+ foo({})
+ foo({})
+}
+
+# cfunc kwargs
+assert_equal '{foo: 123, bar: 456}', %q{
+ def foo(bar)
+ bar.replace(foo: 123, bar: 456)
+ end
+
+ foo({})
+ foo({})
+}
+
+# variadic cfunc kwargs
+assert_equal '{foo: 123}', %q{
+ def foo(bar)
+ bar.merge(foo: 123)
+ end
+
+ foo({})
+ foo({})
+}
+
+# optimized cfunc kwargs
+assert_equal 'false', %q{
+ def foo
+ :foo.eql?(foo: :foo)
+ end
+
+ foo
+ foo
+}
+
+# attr_reader on frozen object
+assert_equal 'false', %q{
+ class Foo
+ attr_reader :exception
+
+ def failed?
+ !exception.nil?
+ end
+ end
+
+ foo = Foo.new.freeze
+ foo.failed?
+ foo.failed?
+}
+
+# regression test for doing kwarg shuffle before checking for interrupts
+assert_equal 'ok', %q{
+ def new_media_drop(attributes:, product_drop:, context:, sources:)
+ nil.nomethod rescue nil # force YJIT to bail to side exit
+
+ [attributes, product_drop, context, sources]
+ end
+
+ def load_medias(product_drop: nil, raw_medias:, context:)
+ raw_medias.map do |raw_media|
+ case new_media_drop(context: context, attributes: raw_media, product_drop: product_drop, sources: [])
+ in [Hash, ProductDrop, Context, Array]
+ else
+ raise "bad shuffle"
+ end
+ end
+ end
+
+ class Context; end
+
+ class ProductDrop
+ attr_reader :title
+ def initialize(title)
+ @title = title
+ end
+ end
+
+ # Make a thread so we have thread switching interrupts
+ th = Thread.new do
+ while true; end
+ end
+ 1_000.times do |i|
+ load_medias(product_drop: ProductDrop.new("foo"), raw_medias: [{}, {}], context: Context.new)
+ end
+ th.kill.join
+
+ :ok
+}
+
+# regression test for tracing attr_accessor methods.
+assert_equal "true", %q{
+ c = Class.new do
+ attr_accessor :x
+ alias y x
+ alias y= x=
+ end
+ obj = c.new
+
+ ar_meth = obj.method(:x)
+ aw_meth = obj.method(:x=)
+ aar_meth = obj.method(:y)
+ aaw_meth = obj.method(:y=)
+ events = []
+ trace = TracePoint.new(:c_call, :c_return){|tp|
+ next if tp.path != __FILE__
+ next if tp.method_id == :call
+ case tp.event
+ when :c_call
+ events << [tp.event, tp.method_id, tp.callee_id]
+ when :c_return
+ events << [tp.event, tp.method_id, tp.callee_id, tp.return_value]
+ end
+ }
+ test_proc = proc do
+ obj.x = 1
+ obj.x
+ obj.y = 2
+ obj.y
+ aw_meth.call(1)
+ ar_meth.call
+ aaw_meth.call(2)
+ aar_meth.call
+ end
+ test_proc.call # populate call caches
+ trace.enable(&test_proc)
+ expected = [
+ [:c_call, :x=, :x=],
+ [:c_return, :x=, :x=, 1],
+ [:c_call, :x, :x],
+ [:c_return, :x, :x, 1],
+ [:c_call, :x=, :y=],
+ [:c_return, :x=, :y=, 2],
+ [:c_call, :x, :y],
+ [:c_return, :x, :y, 2],
+ ] * 2
+
+ expected == events
+}
+
+# duphash
+assert_equal '{foo: 123}', %q{
+ def foo
+ {foo: 123}
+ end
+
+ foo
+ foo
+}
+
+# newhash
+assert_equal '{foo: 2}', %q{
+ def foo
+ {foo: 1+1}
+ end
+
+ foo
+ foo
+}
+
+# block invalidation edge case
+assert_equal 'undef', %q{
+ class A
+ def foo(arg)
+ arg.times { A.remove_method(:bar) }
+ self
+ end
+
+ def bar
+ 4
+ end
+
+ def use(arg)
+ # two consecutive sends. When bar is removed, the return address
+ # for calling it is already on foo's control frame
+ foo(arg).bar
+ rescue NoMethodError
+ :undef
+ end
+ end
+
+ A.new.use 0
+ A.new.use 0
+ A.new.use 1
+}
+
+# block invalidation edge case
+assert_equal 'ok', %q{
+ class A
+ Good = :ng
+ def foo(arg)
+ arg.times { A.const_set(:Good, :ok) }
+ self
+ end
+
+ def id(arg)
+ arg
+ end
+
+ def use(arg)
+ # send followed by an opt_getinlinecache.
+ # The return address remains on the control frame
+ # when opt_getinlinecache is invalidated.
+ foo(arg).id(Good)
+ end
+ end
+
+ A.new.use 0
+ A.new.use 0
+ A.new.use 1
+}
+
+assert_equal 'ok', %q{
+ # test hitting a branch stub when out of memory
+ def nimai(jita)
+ if jita
+ :ng
+ else
+ :ok
+ end
+ end
+
+ nimai(true)
+ nimai(true)
+
+ RubyVM::YJIT.simulate_oom! if defined?(RubyVM::YJIT)
+
+ nimai(false)
+}
+
+assert_equal 'new', %q{
+ # test block invalidation while out of memory
+ def foo
+ :old
+ end
+
+ def test
+ foo
+ end
+
+ def bar
+ :bar
+ end
+
+
+ test
+ test
+
+ RubyVM::YJIT.simulate_oom! if defined?(RubyVM::YJIT)
+
+ # Old simulat_omm! leaves one byte of space and this fills it up
+ bar
+ bar
+
+ def foo
+ :new
+ end
+
+ test
+}
+
+# Bug #21257 (infinite jmp)
+assert_equal 'ok', %q{
+ Good = :ok
+
+ def first
+ second
+ end
+
+ def second
+ ::Good
+ end
+
+ # Make `second` side exit on its first instruction
+ trace = TracePoint.new(:line) { }
+ trace.enable(target: method(:second))
+
+ first
+ # Recompile now that the constant cache is populated, so we get a fallthrough from `first` to `second`
+ # (this is need to reproduce with --yjit-call-threshold=1)
+ RubyVM::YJIT.code_gc if defined?(RubyVM::YJIT)
+ first
+
+ # Trigger a constant cache miss in rb_vm_opt_getconstant_path (in `second`) next time it's called
+ module InvalidateConstantCache
+ Good = nil
+ end
+
+ RubyVM::YJIT.simulate_oom! if defined?(RubyVM::YJIT)
+
+ first
+ first
+}
+
+assert_equal 'ok', %q{
+ # Multiple incoming branches into second
+ Good = :ok
+
+ def incoming_one
+ second
+ end
+
+ def incoming_two
+ second
+ end
+
+ def second
+ ::Good
+ end
+
+ # Make `second` side exit on its first instruction
+ trace = TracePoint.new(:line) { }
+ trace.enable(target: method(:second))
+
+ incoming_one
+ # Recompile now that the constant cache is populated, so we get a fallthrough from `incoming_one` to `second`
+ # (this is need to reproduce with --yjit-call-threshold=1)
+ RubyVM::YJIT.code_gc if defined?(RubyVM::YJIT)
+ incoming_one
+ incoming_two
+
+ # Trigger a constant cache miss in rb_vm_opt_getconstant_path (in `second`) next time it's called
+ module InvalidateConstantCache
+ Good = nil
+ end
+
+ incoming_one
+}
+
+assert_equal 'ok', %q{
+ # Try to compile new method while OOM
+ def foo
+ :ok
+ end
+
+ RubyVM::YJIT.simulate_oom! if defined?(RubyVM::YJIT)
+
+ foo
+ foo
+}
+
+# struct aref embedded
+assert_equal '2', %q{
+ def foo(s)
+ s.foo
+ end
+
+ S = Struct.new(:foo)
+ foo(S.new(1))
+ foo(S.new(2))
+}
+
+# struct aref non-embedded
+assert_equal '4', %q{
+ def foo(s)
+ s.d
+ end
+
+ S = Struct.new(:a, :b, :c, :d, :e)
+ foo(S.new(1,2,3,4,5))
+ foo(S.new(1,2,3,4,5))
+}
+
+# struct aset embedded
+assert_equal '123', %q{
+ def foo(s)
+ s.foo = 123
+ end
+
+ s = Struct.new(:foo).new
+ foo(s)
+ s = Struct.new(:foo).new
+ foo(s)
+ s.foo
+}
+
+# struct aset non-embedded
+assert_equal '[1, 2, 3, 4, 5]', %q{
+ def foo(s)
+ s.a = 1
+ s.b = 2
+ s.c = 3
+ s.d = 4
+ s.e = 5
+ end
+
+ S = Struct.new(:a, :b, :c, :d, :e)
+ s = S.new
+ foo(s)
+ s = S.new
+ foo(s)
+ [s.a, s.b, s.c, s.d, s.e]
+}
+
+# struct aref too many args
+assert_equal 'ok', %q{
+ def foo(s)
+ s.foo(:bad)
+ end
+
+ s = Struct.new(:foo).new
+ foo(s) rescue :ok
+ foo(s) rescue :ok
+}
+
+# struct aset too many args
+assert_equal 'ok', %q{
+ def foo(s)
+ s.set_foo(123, :bad)
+ end
+
+ s = Struct.new(:foo) do
+ alias :set_foo :foo=
+ end
+ foo(s) rescue :ok
+ foo(s) rescue :ok
+}
+
+# File.join is a cfunc accepting variable arguments as a Ruby array (argc = -2)
+assert_equal 'foo/bar', %q{
+ def foo
+ File.join("foo", "bar")
+ end
+
+ foo
+ foo
+}
+
+# File.join is a cfunc accepting variable arguments as a Ruby array (argc = -2)
+assert_equal '', %q{
+ def foo
+ File.join()
+ end
+
+ foo
+ foo
+}
+
+# Make sure we're correctly reading RStruct's as.ary union for embedded RStructs
+assert_equal '3,12', %q{
+ pt_struct = Struct.new(:x, :y)
+ p = pt_struct.new(3, 12)
+ def pt_inspect(pt)
+ "#{pt.x},#{pt.y}"
+ end
+
+ # Make sure pt_inspect is JITted
+ 10.times { pt_inspect(p) }
+
+ # Make sure it's returning '3,12' instead of e.g. '3,false'
+ pt_inspect(p)
+}
+
+# checktype
+assert_equal 'false', %q{
+ def function()
+ [1, 2] in [Integer, String]
+ end
+ function()
+}
+
+# opt_send_without_block (VM_METHOD_TYPE_ATTRSET)
+assert_equal 'foo', %q{
+ class Foo
+ attr_writer :foo
+
+ def foo()
+ self.foo = "foo"
+ end
+ end
+ foo = Foo.new
+ foo.foo
+}
+
+# anytostring, intern
+assert_equal 'true', %q{
+ def foo()
+ :"#{true}"
+ end
+ foo()
+}
+
+# toregexp, objtostring
+assert_equal '/true/', %q{
+ def foo()
+ /#{true}/
+ end
+ foo().inspect
+}
+
+# concatstrings, objtostring
+assert_equal '9001', %q{
+ def foo()
+ "#{9001}"
+ end
+ foo()
+}
+
+# opt_send_without_block (VM_METHOD_TYPE_CFUNC)
+assert_equal 'nil', %q{
+ def foo
+ nil.inspect # argc: 0
+ end
+ foo
+}
+assert_equal '4', %q{
+ def foo
+ 2.pow(2) # argc: 1
+ end
+ foo
+}
+assert_equal 'aba', %q{
+ def foo
+ "abc".tr("c", "a") # argc: 2
+ end
+ foo
+}
+assert_equal 'true', %q{
+ def foo
+ respond_to?(:inspect) # argc: -1
+ end
+ foo
+}
+assert_equal '["a", "b"]', %q{
+ def foo
+ "a\nb".lines(chomp: true) # kwargs
+ end
+ foo
+}
+
+# invokebuiltin
+assert_equal '123', %q{
+ def foo(obj)
+ obj.foo = 123
+ end
+
+ struct = Struct.new(:foo)
+ obj = struct.new
+ foo(obj)
+}
+
+# invokebuiltin_delegate
+assert_equal '.', %q{
+ def foo(path)
+ Dir.open(path).path
+ end
+ foo(".")
+}
+
+# opt_invokebuiltin_delegate_leave
+assert_equal '[0]', %q{"\x00".unpack("c")}
+
+# opt_send_without_block (VM_METHOD_TYPE_ISEQ)
+assert_equal '1', %q{
+ def foo = 1
+ def bar = foo
+ bar
+}
+assert_equal '[1, 2, 3]', %q{
+ def foo(a, b) = [1, a, b]
+ def bar = foo(2, 3)
+ bar
+}
+assert_equal '[1, 2, 3, 4, 5, 6]', %q{
+ def foo(a, b, c:, d:, e: 0, f: 6) = [a, b, c, d, e, f]
+ def bar = foo(1, 2, c: 3, d: 4, e: 5)
+ bar
+}
+assert_equal '[1, 2, 3, 4]', %q{
+ def foo(a, b = 2) = [a, b]
+ def bar = foo(1) + foo(3, 4)
+ bar
+}
+
+assert_equal '1', %q{
+ def foo(a) = a
+ def bar = foo(1) { 2 }
+ bar
+}
+assert_equal '[1, 2]', %q{
+ def foo(a, &block) = [a, block.call]
+ def bar = foo(1) { 2 }
+ bar
+}
+
+# opt_send_without_block (VM_METHOD_TYPE_IVAR)
+assert_equal 'foo', %q{
+ class Foo
+ attr_reader :foo
+
+ def initialize
+ @foo = "foo"
+ end
+ end
+ Foo.new.foo
+}
+
+# opt_send_without_block (VM_METHOD_TYPE_OPTIMIZED)
+assert_equal 'foo', %q{
+ Foo = Struct.new(:bar)
+ Foo.new("bar").bar = "foo"
+}
+assert_equal 'foo', %q{
+ Foo = Struct.new(:bar)
+ Foo.new("foo").bar
+}
+
+# getblockparamproxy
+assert_equal 'foo', %q{
+ def foo(&block)
+ block.call
+ end
+ foo { "foo" }
+}
+
+# getblockparam
+assert_equal 'foo', %q{
+ def foo(&block)
+ block
+ end
+ foo { "foo" }.call
+}
+
+assert_equal '[1, 2]', %q{
+ def foo
+ x = [2]
+ [1, *x]
+ end
+
+ foo
+ foo
+}
+
+# respond_to? with changing symbol
+assert_equal 'false', %q{
+ def foo(name)
+ :sym.respond_to?(name)
+ end
+ foo(:to_s)
+ foo(:to_s)
+ foo(:not_exist)
+}
+
+# respond_to? with method being defined
+assert_equal 'true', %q{
+ def foo
+ :sym.respond_to?(:not_yet_defined)
+ end
+ foo
+ foo
+ module Kernel
+ def not_yet_defined = true
+ end
+ foo
+}
+
+# respond_to? with undef method
+assert_equal 'false', %q{
+ module Kernel
+ def to_be_removed = true
+ end
+ def foo
+ :sym.respond_to?(:to_be_removed)
+ end
+ foo
+ foo
+ class Object
+ undef_method :to_be_removed
+ end
+ foo
+}
+
+# respond_to? with respond_to_missing?
+assert_equal 'true', %q{
+ class Foo
+ end
+ def foo(x)
+ x.respond_to?(:bar)
+ end
+ foo(Foo.new)
+ foo(Foo.new)
+ class Foo
+ def respond_to_missing?(*) = true
+ end
+ foo(Foo.new)
+}
+
+# bmethod
+assert_equal '[1, 2, 3]', %q{
+ one = 1
+ define_method(:foo) do
+ one
+ end
+
+ 3.times.map { |i| foo + i }
+}
+
+# return inside bmethod
+assert_equal 'ok', %q{
+ define_method(:foo) do
+ 1.tap { return :ok }
+ end
+
+ foo
+}
+
+# bmethod optional and keywords
+assert_equal '[[1, nil, 2]]', %q{
+ define_method(:opt_and_kwargs) do |a = {}, b: nil, c: nil|
+ [a, b, c]
+ end
+
+ 5.times.map { opt_and_kwargs(1, c: 2) }.uniq
+}
+
+# bmethod with forwarded block
+assert_equal '2', %q{
+ define_method(:foo) do |&block|
+ block.call
+ end
+
+ def bar(&block)
+ foo(&block)
+ end
+
+ bar { 1 }
+ bar { 2 }
+}
+
+# bmethod with forwarded block and arguments
+assert_equal '5', %q{
+ define_method(:foo) do |n, &block|
+ n + block.call
+ end
+
+ def bar(n, &block)
+ foo(n, &block)
+ end
+
+ bar(0) { 1 }
+ bar(3) { 2 }
+}
+
+# bmethod with forwarded unwanted block
+assert_equal '1', %q{
+ one = 1
+ define_method(:foo) do
+ one
+ end
+
+ def bar(&block)
+ foo(&block)
+ end
+
+ bar { }
+ bar { }
+}
+
+# unshareable bmethod call through Method#to_proc#call
+assert_equal '1000', %q{
+ define_method(:bmethod) do
+ self
+ end
+
+ Ractor.new do
+ errors = 0
+ 1000.times do
+ p = method(:bmethod).to_proc
+ begin
+ p.call
+ rescue RuntimeError
+ errors += 1
+ end
+ end
+ errors
+ end.value
+}
+
+# test for return stub lifetime issue
+assert_equal '1', %q{
+ def foo(n)
+ if n == 2
+ return 1.times { Object.define_method(:foo) {} }
+ end
+
+ foo(n + 1)
+ end
+
+ foo(1)
+}
+
+# case-when with redefined ===
+assert_equal 'ok', %q{
+ class Symbol
+ def ===(a)
+ true
+ end
+ end
+
+ def cw(arg)
+ case arg
+ when :b
+ :ok
+ when 4
+ :ng
+ end
+ end
+
+ cw(4)
+}
+
+assert_equal 'threw', %q{
+ def foo(args)
+ wrap(*args)
+ rescue ArgumentError
+ 'threw'
+ end
+
+ def wrap(a)
+ [a]
+ end
+
+ foo([Hash.ruby2_keywords_hash({})])
+}
+
+assert_equal 'threw', %q{
+ # C call
+ def bar(args)
+ Array(*args)
+ rescue ArgumentError
+ 'threw'
+ end
+
+ bar([Hash.ruby2_keywords_hash({})])
+}
+
+# Test instance_of? and is_a?
+assert_equal 'true', %q{
+ 1.instance_of?(Integer) && 1.is_a?(Integer)
+}
+
+# Test instance_of? and is_a? for singleton classes
+assert_equal 'true', %q{
+ a = []
+ def a.test = :test
+ a.instance_of?(Array) && a.is_a?(Array)
+}
+
+# Test instance_of? for singleton_class
+# Yes this does really return false
+assert_equal 'false', %q{
+ a = []
+ def a.test = :test
+ a.instance_of?(a.singleton_class)
+}
+
+# Test is_a? for singleton_class
+assert_equal 'true', %q{
+ a = []
+ def a.test = :test
+ a.is_a?(a.singleton_class)
+}
+
+# Test send with splat to a cfunc
+assert_equal 'true', %q{
+ 1.send(:==, 1, *[])
+}
+
+# Test empty splat with cfunc
+assert_equal '2', %q{
+ def foo
+ Integer.sqrt(4, *[])
+ end
+ # call twice to deal with constant exiting
+ foo
+ foo
+}
+
+# Test non-empty splat with cfunc
+assert_equal 'Hello World', %q{
+ def bar
+ args = ["Hello "]
+ greeting = +"World"
+ greeting.insert(0, *args)
+ greeting
+ end
+ bar
+}
+
+# Regression: this creates a temp stack with > 127 elements
+assert_normal_exit %q{
+ def foo(a)
+ [
+ a, a, a, a, a, a, a, a, a, a,
+ a, a, a, a, a, a, a, a, a, a,
+ a, a, a, a, a, a, a, a, a, a,
+ a, a, a, a, a, a, a, a, a, a,
+ a, a, a, a, a, a, a, a, a, a,
+ a, a, a, a, a, a, a, a, a, a,
+ a, a, a, a, a, a, a, a, a, a,
+ a, a, a, a, a, a, a, a, a, a,
+ a, a, a, a, a, a, a, a, a, a,
+ a, a, a, a, a, a, a, a, a, a,
+ a, a, a, a, a, a, a, a, a, a,
+ a, a, a, a, a, a, a, a, a, a,
+ a, a, a, a, a, a, a, a,
+ ]
+ end
+
+ def entry
+ foo(1)
+ end
+
+ entry
+}
+
+# Test that splat and rest combined
+# properly dupe the array
+assert_equal "[]", %q{
+ def foo(*rest)
+ rest << 1
+ end
+
+ def test(splat)
+ foo(*splat)
+ end
+
+ EMPTY = []
+ custom = Object.new
+ def custom.to_a
+ EMPTY
+ end
+
+ test(custom)
+ test(custom)
+ EMPTY
+}
+
+# Rest with send
+assert_equal '[1, 2, 3]', %q{
+ def bar(x, *rest)
+ rest.insert(0, x)
+ end
+ send(:bar, 1, 2, 3)
+}
+
+# Fix splat block arg bad compilation
+assert_equal "foo", %q{
+ def literal(*args, &block)
+ s = ''.dup
+ literal_append(s, *args, &block)
+ s
+ end
+
+ def literal_append(sql, v)
+ sql << v
+ end
+
+ literal("foo")
+}
+
+# regression test for accidentally having a parameter truncated
+# due to Rust/C signature mismatch. Used to crash with
+# > [BUG] rb_vm_insn_addr2insn: invalid insn address ...
+# or
+# > ... `Err` value: TryFromIntError(())'
+assert_normal_exit %q{
+ n = 16384
+ eval(
+ "def foo(arg); " + "_=arg;" * n + '_=1;' + "Object; end"
+ )
+ foo 1
+}
+
+# Regression test for CantCompile not using starting_ctx
+assert_normal_exit %q{
+ class Integer
+ def ===(other)
+ false
+ end
+ end
+
+ def my_func(x)
+ case x
+ when 1
+ 1
+ when 2
+ 2
+ else
+ 3
+ end
+ end
+
+ my_func(1)
+}
+
+# Regression test for CantCompile not using starting_ctx
+assert_equal "ArgumentError", %q{
+ def literal(*args, &block)
+ s = ''.dup
+ args = [1, 2, 3]
+ literal_append(s, *args, &block)
+ s
+ end
+
+ def literal_append(sql, v)
+ [sql.inspect, v.inspect]
+ end
+
+ begin
+ literal("foo")
+ rescue ArgumentError
+ "ArgumentError"
+ end
+}
+
+# Rest with block
+# Simplified code from railsbench
+assert_equal '[{"/a" => "b", as: :c, via: :post}, [], nil]', %q{
+ def match(path, *rest, &block)
+ [path, rest, block]
+ end
+
+ def map_method(method, args, &block)
+ options = args.last
+ args.pop
+ options[:via] = method
+ match(*args, options, &block)
+ end
+
+ def post(*args, &block)
+ map_method(:post, args, &block)
+ end
+
+ post "/a" => "b", as: :c
+}
+
+# Test rest and kw_args
+assert_equal '[true, true, true, true]', %q{
+ def my_func(*args, base: nil, sort: true)
+ [args, base, sort]
+ end
+
+ def calling_my_func
+ results = []
+ results << (my_func("test") == [["test"], nil, true])
+ results << (my_func("test", base: :base) == [["test"], :base, true])
+ results << (my_func("test", sort: false) == [["test"], nil, false])
+ results << (my_func("test", "other", base: :base) == [["test", "other"], :base, true])
+ results
+ end
+ calling_my_func
+}
+
+# Test Integer#[] with 2 args
+assert_equal '0', %q{
+ 3[0, 0]
+}
+
+# unspecified_bits + checkkeyword
+assert_equal '2', %q{
+ def callee = 1
+
+ # checkkeyword should see unspecified_bits=0 (use bar), not Integer 1 (set bar = foo).
+ def foo(foo, bar: foo) = bar
+
+ def entry(&block)
+ # write 1 at stack[3]. Calling #callee spills stack[3].
+ 1 + (1 + (1 + (1 + callee)))
+ # &block is written to a register instead of stack[3]. When &block is popped and
+ # unspecified_bits is pushed, it must be written to stack[3], not to a register.
+ foo(1, bar: 2, &block)
+ end
+
+ entry # call branch_stub_hit (spill temps)
+ entry # doesn't call branch_stub_hit (not spill temps)
+}
+
+# Test rest and optional_params
+assert_equal '[true, true, true, true]', %q{
+ def my_func(stuff, base=nil, sort=true, *args)
+ [stuff, base, sort, args]
+ end
+
+ def calling_my_func
+ results = []
+ results << (my_func("test") == ["test", nil, true, []])
+ results << (my_func("test", :base) == ["test", :base, true, []])
+ results << (my_func("test", :base, false) == ["test", :base, false, []])
+ results << (my_func("test", :base, false, "other", "other") == ["test", :base, false, ["other", "other"]])
+ results
+ end
+ calling_my_func
+}
+
+# Test rest and optional_params and splat
+assert_equal '[true, true, true, true, true]', %q{
+ def my_func(stuff, base=nil, sort=true, *args)
+ [stuff, base, sort, args]
+ end
+
+ def calling_my_func
+ results = []
+ splat = ["test"]
+ results << (my_func(*splat) == ["test", nil, true, []])
+ splat = [:base]
+ results << (my_func("test", *splat) == ["test", :base, true, []])
+ splat = [:base, false]
+ results << (my_func("test", *splat) == ["test", :base, false, []])
+ splat = [:base, false, "other", "other"]
+ results << (my_func("test", *splat) == ["test", :base, false, ["other", "other"]])
+ splat = ["test", :base, false, "other", "other"]
+ results << (my_func(*splat) == ["test", :base, false, ["other", "other"]])
+ results
+ end
+ calling_my_func
+}
+
+# Regression test: rest and optional and splat
+assert_equal 'true', %q{
+ def my_func(base=nil, *args)
+ [base, args]
+ end
+
+ def calling_my_func
+ array = []
+ my_func(:base, :rest1, *array) == [:base, [:rest1]]
+ end
+
+ calling_my_func
+}
+
+# Fix failed case for large splat
+assert_equal 'true', %q{
+ def d(a, b=:b)
+ end
+
+ def calling_func
+ ary = 1380888.times;
+ d(*ary)
+ end
+ begin
+ calling_func
+ rescue ArgumentError
+ true
+ end
+}
+
+# Regression test: register allocator on expandarray
+assert_equal '[]', %q{
+ func = proc { [] }
+ proc do
+ _x, _y = func.call
+ end.call
+}
+
+# Catch TAG_BREAK in a non-FINISH frame with JIT code
+assert_equal '1', %q{
+ def entry
+ catch_break
+ end
+
+ def catch_break
+ while_true do
+ break
+ end
+ 1
+ end
+
+ def while_true
+ while true
+ yield
+ end
+ end
+
+ entry
+}
+
+assert_equal '6', %q{
+ class Base
+ def number = 1 + yield
+ end
+
+ class Sub < Base
+ def number = super + 2
+ end
+
+ Sub.new.number { 3 }
+}
+
+# Integer multiplication and overflow
+assert_equal '[6, -6, 9671406556917033397649408, -9671406556917033397649408, 21267647932558653966460912964485513216]', %q{
+ def foo(a, b)
+ a * b
+ end
+
+ r1 = foo(2, 3)
+ r2 = foo(2, -3)
+ r3 = foo(2 << 40, 2 << 41)
+ r4 = foo(2 << 40, -2 << 41)
+ r5 = foo(1 << 62, 1 << 62)
+
+ [r1, r2, r3, r4, r5]
+}
+
+# Integer multiplication and overflow (minimized regression test from test-basic)
+assert_equal '8515157028618240000', %q{2128789257154560000 * 4}
+
+# Inlined method calls
+assert_equal 'nil', %q{
+ def putnil = nil
+ def entry = putnil
+ entry.inspect
+}
+assert_equal '1', %q{
+ def putobject_1 = 1
+ def entry = putobject_1
+ entry
+}
+assert_equal 'false', %q{
+ def putobject(_unused_arg1) = false
+ def entry = putobject(nil)
+ entry
+}
+assert_equal 'true', %q{
+ def entry = yield
+ entry { true }
+}
+assert_equal 'sym', %q{
+ def entry = :sym.to_sym
+ entry
+}
+
+assert_normal_exit %q{
+ ivars = 1024.times.map { |i| "@iv_#{i} = #{i}\n" }.join
+ Foo = Class.new
+ Foo.class_eval "def initialize() #{ivars} end"
+ Foo.new
+}
+
+assert_equal '0', %q{
+ def spill
+ 1.to_i # not inlined
+ end
+
+ def inline(_stack1, _stack2, _stack3, _stack4, _stack5)
+ 0 # inlined
+ end
+
+ def entry
+ # RegTemps is 00111110 prior to the #inline call.
+ # Its return value goes to stack_idx=0, which conflicts with stack_idx=5.
+ inline(spill, 2, 3, 4, 5)
+ end
+
+ entry
+}
+
+# Integer succ and overflow
+assert_equal '[2, 4611686018427387904]', %q{
+ [1.succ, 4611686018427387903.succ]
+}
+
+# Integer pred and overflow
+assert_equal '[0, -4611686018427387905]', %q{
+ [1.pred, -4611686018427387904.pred]
+}
+
+# Integer right shift
+assert_equal '[0, 1, -4]', %q{
+ [0 >> 1, 2 >> 1, -7 >> 1]
+}
+
+# Integer XOR
+assert_equal '[0, 0, 4]', %q{
+ [0 ^ 0, 1 ^ 1, 7 ^ 3]
+}
+
+assert_equal '[nil, "yield"]', %q{
+ def defined_yield = defined?(yield)
+ [defined_yield, defined_yield {}]
+}
+
+# splat with ruby2_keywords into rest parameter
+assert_equal '[[{a: 1}], {}]', %q{
+ ruby2_keywords def foo(*args) = args
+
+ def bar(*args, **kw) = [args, kw]
+
+ def pass_bar(*args) = bar(*args)
+
+ def body
+ args = foo(a: 1)
+ pass_bar(*args)
+ end
+
+ body
+}
+
+# concatarray
+assert_equal '[1, 2]', %q{
+ def foo(a, b) = [a, b]
+ arr = [2]
+ foo(*[1], *arr)
+}
+
+# pushtoarray
+assert_equal '[1, 2]', %q{
+ def foo(a, b) = [a, b]
+ arr = [1]
+ foo(*arr, 2)
+}
+
+# pop before fallback
+assert_normal_exit %q{
+ class Foo
+ attr_reader :foo
+
+ def try = foo(0, &nil)
+ end
+
+ Foo.new.try
+}
+
+# a kwrest case
+assert_equal '[1, 2, {complete: false}]', %q{
+ def rest(foo: 1, bar: 2, **kwrest)
+ [foo, bar, kwrest]
+ end
+
+ def callsite = rest(complete: false)
+
+ callsite
+}
+
+# splat+kw_splat+opt+rest
+assert_equal '[1, []]', %q{
+ def opt_rest(a = 0, *rest) = [a, rest]
+
+ def call_site(args) = opt_rest(*args, **nil)
+
+ call_site([1])
+}
+
+# splat and nil kw_splat
+assert_equal 'ok', %q{
+ def identity(x) = x
+
+ def splat_nil_kw_splat(args) = identity(*args, **nil)
+
+ splat_nil_kw_splat([:ok])
+}
+
+# empty splat and kwsplat into leaf builtins
+assert_equal '[1, 1, 1]', %q{
+ empty = []
+ [1.abs(*empty), 1.abs(**nil), 1.bit_length(*empty, **nil)]
+}
+
+# splat into C methods with -1 arity
+assert_equal '[[1, 2, 3], [0, 2, 3], [1, 2, 3], [2, 2, 3], [], [], [{}]]', %q{
+ class Foo < Array
+ def push(args) = super(1, *args)
+ end
+
+ def test_cfunc_vargs_splat(sub_instance, array_class, empty_kw_hash)
+ splat = [2, 3]
+ kw_splat = [empty_kw_hash]
+ [
+ sub_instance.push(splat),
+ array_class[0, *splat, **nil],
+ array_class[1, *splat, &nil],
+ array_class[2, *splat, **nil, &nil],
+ array_class.send(:[], *kw_splat),
+ # kw_splat disables keywords hash handling
+ array_class[*kw_splat],
+ array_class[*kw_splat, **nil],
+ ]
+ end
+
+ test_cfunc_vargs_splat(Foo.new, Array, Hash.ruby2_keywords_hash({}))
+}
+
+# Class#new (arity=-1), splat, and ruby2_keywords
+assert_equal '[0, {1 => 1}]', %q{
+ class KwInit
+ attr_reader :init_args
+ def initialize(x = 0, **kw)
+ @init_args = [x, kw]
+ end
+ end
+
+ def test(klass, args)
+ klass.new(*args).init_args
+ end
+
+ test(KwInit, [Hash.ruby2_keywords_hash({1 => 1})])
+}
+
+# Chilled string setivar trigger warning
+assert_match(/literal string will be frozen in the future/, %q{
+ Warning[:deprecated] = true
+ $VERBOSE = true
+ $warning = "no-warning"
+ module ::Warning
+ def self.warn(message)
+ $warning = message.split("warning: ").last.strip
+ end
+ end
+
+ class String
+ def setivar!
+ @ivar = 42
+ end
+ end
+
+ def setivar!(str)
+ str.setivar!
+ end
+
+ 10.times { setivar!("mutable".dup) }
+ 10.times do
+ setivar!("frozen".freeze)
+ rescue FrozenError
+ end
+
+ setivar!("chilled") # Emit warning
+ $warning
+})
+
+# arity=-2 cfuncs
+assert_equal '["", "1/2", [0, [:ok, 1]]]', %q{
+ def test_cases(file, chain)
+ new_chain = chain.allocate # to call initialize directly
+ new_chain.send(:initialize, [0], ok: 1)
+
+ [
+ file.join,
+ file.join("1", "2"),
+ new_chain.to_a,
+ ]
+ end
+
+ test_cases(File, Enumerator::Chain)
+}
+
+# singleton class should invalidate Type::CString assumption
+assert_equal 'foo', %q{
+ def define_singleton(str, define)
+ if define
+ # Wrap a C method frame to avoid exiting JIT code on defineclass
+ [nil].reverse_each do
+ class << str
+ def +(_)
+ "foo"
+ end
+ end
+ end
+ end
+ "bar"
+ end
+
+ def entry(define)
+ str = ""
+ # When `define` is false, #+ compiles to rb_str_plus() without a class guard.
+ # When the code is reused with `define` is true, the class of `str` is changed
+ # to a singleton class, so the block should be invalidated.
+ str + define_singleton(str, define)
+ end
+
+ entry(false)
+ entry(true)
+}
+
+assert_equal 'ok', %q{
+ def ok
+ :ok
+ end
+
+ def delegator(...)
+ ok(...)
+ end
+
+ def caller
+ send(:delegator)
+ end
+
+ caller
+}
+
+# test inlining of simple iseqs
+assert_equal '[:ok, :ok, :ok]', %q{
+ def identity(x) = x
+ def foo(x, _) = x
+ def bar(_, _, _, _, x) = x
+
+ def tests
+ [
+ identity(:ok),
+ foo(:ok, 2),
+ bar(1, 2, 3, 4, :ok),
+ ]
+ end
+
+ tests
+}
+
+# test inlining of simple iseqs with kwargs
+assert_equal '[:ok, :ok, :ok, :ok, :ok]', %q{
+ def optional_unused(x, opt: :not_ok) = x
+ def optional_used(x, opt: :ok) = opt
+ def required_unused(x, req:) = x
+ def required_used(x, req:) = req
+ def unknown(x) = x
+
+ def tests
+ [
+ optional_unused(:ok),
+ optional_used(:not_ok),
+ required_unused(:ok, req: :not_ok),
+ required_used(:not_ok, req: :ok),
+ begin unknown(:not_ok, unknown_kwarg: :not_ok) rescue ArgumentError; :ok end,
+ ]
+ end
+
+ tests
+}
+
+# test simple iseqs not eligible for inlining
+assert_equal '[:ok, :ok, :ok, :ok, :ok]', %q{
+ def identity(x) = x
+ def arg_splat(x, *args) = x
+ def kwarg_splat(x, **kwargs) = x
+ def block_arg(x, &blk) = x
+ def block_iseq(x) = x
+ def call_forwarding(...) = identity(...)
+
+ def tests
+ [
+ arg_splat(:ok),
+ kwarg_splat(:ok),
+ block_arg(:ok, &proc { :not_ok }),
+ block_iseq(:ok) { :not_ok },
+ call_forwarding(:ok),
+ ]
+ end
+
+ tests
+}
+
+# regression test for splat with &proc{} when the target has rest (Bug #21266)
+assert_equal '[]', %q{
+ def foo(args) = bar(*args, &proc { _1 })
+ def bar(_, _, _, _, *rest) = yield rest
+
+ GC.stress = true
+ foo([1,2,3,4])
+ foo([1,2,3,4])
+}
+
+# regression test for invalidating an empty block
+assert_equal '0', %q{
+ def foo = (* = 1).pred
+
+ foo # compile it
+
+ class Integer
+ def to_ary = [] # invalidate
+ end
+
+ foo # try again
+}
+
+# test integer left shift with constant rhs
+assert_equal [0x80000000000, 'a+', :ok].inspect, %q{
+ def shift(val) = val << 43
+
+ def tests
+ int = shift(1)
+ str = shift("a")
+
+ Integer.define_method(:<<) { |_| :ok }
+ redef = shift(1)
+
+ [int, str, redef]
+ end
+
+ tests
+}
+
+# test integer left shift fusion followed by opt_getconstant_path
+assert_equal '33', %q{
+ def test(a)
+ (a << 5) | (Object; a)
+ end
+
+ test(1)
+}
+
+# test String#stebyte with arguments that need conversion
+assert_equal "abc", %q{
+ str = +"a00"
+ def change_bytes(str, one, two)
+ str.setbyte(one, "b".ord)
+ str.setbyte(2, two)
+ end
+
+ to_int_1 = Object.new
+ to_int_99 = Object.new
+ def to_int_1.to_int = 1
+ def to_int_99.to_int = 99
+
+ change_bytes(str, to_int_1, to_int_99)
+ str
+}
+
+# test --yjit-verify-ctx for arrays with a singleton class
+assert_equal "ok", %q{
+ class Array
+ def foo
+ self.singleton_class.define_method(:first) { :ok }
+ first
+ end
+ end
+
+ def test = [].foo
+
+ test
+}
+
+assert_equal '["raised", "Module", "Object"]', %q{
+ def foo(obj)
+ obj.superclass.name
+ end
+
+ ret = []
+
+ begin
+ foo(Class.allocate)
+ rescue TypeError
+ ret << 'raised'
+ end
+
+ ret += [foo(Class), foo(Class.new)]
+}
+
+# test TrueClass#=== before and after redefining TrueClass#==
+assert_equal '[[true, false, false], [true, true, false], [true, :error, :error]]', %q{
+ def true_eqq(x)
+ true === x
+ rescue NoMethodError
+ :error
+ end
+
+ def test
+ [
+ # first one is always true because rb_equal does object comparison before calling #==
+ true_eqq(true),
+ # these will use TrueClass#==
+ true_eqq(false),
+ true_eqq(:truthy),
+ ]
+ end
+
+ results = [test]
+
+ class TrueClass
+ def ==(x)
+ !x
+ end
+ end
+
+ results << test
+
+ class TrueClass
+ undef_method :==
+ end
+
+ results << test
+}
+
+# test FalseClass#=== before and after redefining FalseClass#==
+assert_equal '[[true, false, false], [true, false, true], [true, :error, :error]]', %q{
+ def case_equal(x, y)
+ x === y
+ rescue NoMethodError
+ :error
+ end
+
+ def test
+ [
+ # first one is always true because rb_equal does object comparison before calling #==
+ case_equal(false, false),
+ # these will use #==
+ case_equal(false, true),
+ case_equal(false, nil),
+ ]
+ end
+
+ results = [test]
+
+ class FalseClass
+ def ==(x)
+ !x
+ end
+ end
+
+ results << test
+
+ class FalseClass
+ undef_method :==
+ end
+
+ results << test
+}
+
+# test NilClass#=== before and after redefining NilClass#==
+assert_equal '[[true, false, false], [true, false, true], [true, :error, :error]]', %q{
+ def case_equal(x, y)
+ x === y
+ rescue NoMethodError
+ :error
+ end
+
+ def test
+ [
+ # first one is always true because rb_equal does object comparison before calling #==
+ case_equal(nil, nil),
+ # these will use #==
+ case_equal(nil, true),
+ case_equal(nil, false),
+ ]
+ end
+
+ results = [test]
+
+ class NilClass
+ def ==(x)
+ !x
+ end
+ end
+
+ results << test
+
+ class NilClass
+ undef_method :==
+ end
+
+ results << test
+}
+
+# test struct accessors fire c_call events
+assert_equal '[[:c_call, :x=], [:c_call, :x]]', %q{
+ c = Struct.new(:x)
+ obj = c.new
+
+ events = []
+ TracePoint.new(:c_call) do
+ events << [_1.event, _1.method_id]
+ end.enable do
+ obj.x = 100
+ obj.x
+ end
+
+ events
+}
+
+# regression test for splatting empty array
+assert_equal '1', %q{
+ def callee(foo) = foo
+
+ def test_body(args) = callee(1, *args)
+
+ test_body([])
+ array = Array.new(100)
+ array.clear
+ test_body(array)
+}
+
+# regression test for splatting empty array to cfunc
+assert_normal_exit %q{
+ def test_body(args) = Array(1, *args)
+
+ test_body([])
+ 0x100.times do
+ array = Array.new(100)
+ array.clear
+ test_body(array)
+ end
+}
+
+# compiling code shouldn't emit warnings as it may call into more Ruby code
+assert_equal 'ok', <<~'RUBY'
+ # [Bug #20522]
+ $VERBOSE = true
+ Warning[:performance] = true
+
+ module StrictWarnings
+ def warn(msg, **)
+ raise msg
+ end
+ end
+ Warning.singleton_class.prepend(StrictWarnings)
+
+ class A
+ def compiled_method(is_private)
+ @some_ivar = is_private
+ end
+ end
+
+ shape_max_variations = 8
+ if defined?(RubyVM::Shape::SHAPE_MAX_VARIATIONS) && RubyVM::Shape::SHAPE_MAX_VARIATIONS != shape_max_variations
+ raise "Expected SHAPE_MAX_VARIATIONS to be #{shape_max_variations}, got: #{RubyVM::Shape::SHAPE_MAX_VARIATIONS}"
+ end
+
+ 100.times do |i|
+ klass = Class.new(A)
+ (shape_max_variations - 1).times do |j|
+ obj = klass.new
+ obj.instance_variable_set("@base_#{i}", 42)
+ obj.instance_variable_set("@ivar_#{j}", 42)
+ end
+ obj = klass.new
+ obj.instance_variable_set("@base_#{i}", 42)
+ begin
+ obj.compiled_method(true)
+ rescue
+ # expected
+ end
+ end
+
+ :ok
+RUBY
+
+assert_equal 'ok', <<~'RUBY'
+ class MyRelation
+ def callee(...)
+ :ok
+ end
+
+ def uncached(...)
+ callee(...)
+ end
+
+ def takes_block(&block)
+ # push blockhandler
+ uncached(&block) # CI1
+ end
+ end
+
+ relation = MyRelation.new
+ relation.takes_block { }
+RUBY
+
+assert_equal 'ok', <<~'RUBY'
+ def _exec_scope(...)
+ instance_exec(...)
+ end
+
+ def ok args, body
+ _exec_scope(*args, &body)
+ end
+
+ ok([], -> { "ok" })
+RUBY
+
+assert_equal 'ok', <<~'RUBY'
+ def _exec_scope(...)
+ instance_exec(...)
+ end
+
+ def ok args, body
+ _exec_scope(*args, &body)
+ end
+
+ ok(["ok"], ->(x) { x })
+RUBY
+
+assert_equal 'ok', <<~'RUBY'
+def baz(a, b)
+ a + b
+end
+
+def bar(...)
+ baz(...)
+end
+
+def foo(a, ...)
+ bar(a, ...)
+end
+
+def test
+ foo("o", "k")
+end
+
+test
+RUBY
+
+# opt_newarray_send pack/buffer
+assert_equal '[true, true]', <<~'RUBY'
+ def pack
+ v = 1.23
+ [v, v*2, v*3].pack("E*").unpack("E*") == [v, v*2, v*3]
+ end
+
+ def with_buffer
+ v = 4.56
+ b = +"x"
+ [v, v*2, v*3].pack("E*", buffer: b)
+ b[1..].unpack("E*") == [v, v*2, v*3]
+ end
+
+ [pack, with_buffer]
+RUBY
+
+# String#[] / String#slice
+assert_equal 'ok', <<~'RUBY'
+ def error(klass)
+ yield
+ rescue klass
+ true
+ end
+
+ def test
+ str = "ã“ã‚“ã«ã¡ã¯"
+ substr = "ã«ã¡"
+ failures = []
+
+ # Use many small statements to keep context for each slice call smaller than MAX_CTX_TEMPS
+
+ str[1] == "ã‚“" && str.slice(4) == "ã¯" || failures << :index
+ str[5].nil? && str.slice(5).nil? || failures << :index_end
+
+ str[1, 2] == "ã‚“ã«" && str.slice(2, 1) == "ã«" || failures << :beg_len
+ str[5, 1] == "" && str.slice(5, 1) == "" || failures << :beg_len_end
+
+ str[1..2] == "ã‚“ã«" && str.slice(2..2) == "ã«" || failures << :range
+
+ str[/ã«./] == "ã«ã¡" && str.slice(/ã«./) == "ã«ã¡" || failures << :regexp
+
+ str[/ã«./, 0] == "ã«ã¡" && str.slice(/ã«./, 0) == "ã«ã¡" || failures << :regexp_cap0
+
+ str[/ã«(.)/, 1] == "ã¡" && str.slice(/ã«(.)/, 1) == "ã¡" || failures << :regexp_cap1
+
+ str[substr] == substr && str.slice(substr) == substr || failures << :substr
+
+ error(TypeError) { str[Object.new] } && error(TypeError) { str.slice(Object.new, 1) } || failures << :type_error
+ error(RangeError) { str[Float::INFINITY] } && error(RangeError) { str.slice(Float::INFINITY) } || failures << :range_error
+
+ return "ok" if failures.empty?
+ {failures: failures}
+ end
+
+ test
+RUBY
+
+# opt_duparray_send :include?
+assert_equal '[true, false]', <<~'RUBY'
+ def test(x)
+ [:a, :b].include?(x)
+ end
+
+ [
+ test(:b),
+ test(:c),
+ ]
+RUBY
+
+# opt_newarray_send :include?
+assert_equal '[true, false]', <<~'RUBY'
+ def test(x)
+ [Object.new, :a, :b].include?(x.to_sym)
+ end
+
+ [
+ test("b"),
+ test("c"),
+ ]
+RUBY
+
+# YARV: swap and opt_reverse
+assert_equal '["x", "Y", "c", "A", "t", "A", "b", "C", "d"]', <<~'RUBY'
+ class Swap
+ def initialize(s)
+ @a, @b, @c, @d = s.split("")
+ end
+
+ def swap
+ a, b = @a, @b
+ b = b.upcase
+ @a, @b = a, b
+ end
+
+ def reverse_odd
+ a, b, c = @a, @b, @c
+ b = b.upcase
+ @a, @b, @c = a, b, c
+ end
+
+ def reverse_even
+ a, b, c, d = @a, @b, @c, @d
+ a = a.upcase
+ c = c.upcase
+ @a, @b, @c, @d = a, b, c, d
+ end
+ end
+
+ Swap.new("xy").swap + Swap.new("cat").reverse_odd + Swap.new("abcd").reverse_even
+RUBY
+
+assert_normal_exit %{
+ class Bug20997
+ def foo(&) = self.class.name(&)
+
+ new.foo
+ end
+}
+
+# This used to trigger a "try to mark T_NONE"
+# due to an uninitialized local in foo.
+assert_normal_exit %{
+ def foo(...)
+ _local_that_should_nil_on_call = GC.start
+ end
+
+ def test_bug21021
+ puts [], [], [], [], [], []
+ foo []
+ end
+
+ GC.stress = true
+ test_bug21021
+}
+
+assert_equal 'nil', %{
+ def foo(...)
+ _a = _b = _c = binding.local_variable_get(:_c)
+
+ _c
+ end
+
+ # [Bug #21021]
+ def test_local_fill_in_forwardable
+ puts [], [], [], [], []
+ foo []
+ end
+
+ test_local_fill_in_forwardable.inspect
+}
+
+# Test defined?(yield) and block_given? in non-method context.
+# It's good that the body of this runs at true top level and isn't wrapped in a block.
+assert_equal 'false', %{
+ RESULT = []
+ RESULT << defined?(yield)
+ RESULT << block_given?
+
+ 1.times do
+ RESULT << defined?(yield)
+ RESULT << block_given?
+ end
+
+ module ModuleContext
+ 1.times do
+ RESULT << defined?(yield)
+ RESULT << block_given?
+ end
+ end
+
+ class << self
+ RESULT << defined?(yield)
+ RESULT << block_given?
+ end
+
+ RESULT.any?
+}
+
+# throw and String#dup with GC stress
+assert_equal 'foo', %{
+ GC.stress = true
+
+ def foo
+ 1.times { return "foo".dup }
+ end
+
+ 10.times.map { foo.dup }.last
+}
+
+# regression test for [Bug #21772]
+# local variable type tracking desync
+assert_normal_exit %q{
+ def some_method = 0
+
+ def test_body(key)
+ some_method
+ key = key.to_s # setting of local relevant
+
+ key == "symbol"
+ end
+
+ def jit_caller = test_body("session_id")
+
+ jit_caller # first iteration, non-escaped environment
+ alias some_method binding # induce environment escape
+ test_body(:symbol)
+}
+
+# regression test for missing check in identity method inlining
+assert_normal_exit %q{
+ # Use dead code (if false) to create a local
+ # without initialization instructions.
+ def foo(a)
+ if false
+ x = nil
+ end
+ x
+ end
+ def test = foo(1)
+ test
+ test
+}
diff --git a/bootstraptest/test_yjit_30k_ifelse.rb b/bootstraptest/test_yjit_30k_ifelse.rb
new file mode 100644
index 0000000000..c3afa95e4d
--- /dev/null
+++ b/bootstraptest/test_yjit_30k_ifelse.rb
@@ -0,0 +1,241023 @@
+# This is a torture test for the JIT.
+# There are 30K tiny methods with if-else statements in a 30-deep call hierarchy.
+assert_equal '100000', %q{
+
+def fun_l0_n0(x)
+ if (x < 1)
+ fun_l1_n310(x)
+ else
+ fun_l1_n485(x)
+ end
+end
+
+def fun_l0_n1(x)
+ if (x < 1)
+ fun_l1_n930(x)
+ else
+ fun_l1_n418(x)
+ end
+end
+
+def fun_l0_n2(x)
+ if (x < 1)
+ fun_l1_n549(x)
+ else
+ fun_l1_n44(x)
+ end
+end
+
+def fun_l0_n3(x)
+ if (x < 1)
+ fun_l1_n394(x)
+ else
+ fun_l1_n447(x)
+ end
+end
+
+def fun_l0_n4(x)
+ if (x < 1)
+ fun_l1_n683(x)
+ else
+ fun_l1_n547(x)
+ end
+end
+
+def fun_l0_n5(x)
+ if (x < 1)
+ fun_l1_n320(x)
+ else
+ fun_l1_n896(x)
+ end
+end
+
+def fun_l0_n6(x)
+ if (x < 1)
+ fun_l1_n649(x)
+ else
+ fun_l1_n243(x)
+ end
+end
+
+def fun_l0_n7(x)
+ if (x < 1)
+ fun_l1_n100(x)
+ else
+ fun_l1_n243(x)
+ end
+end
+
+def fun_l0_n8(x)
+ if (x < 1)
+ fun_l1_n839(x)
+ else
+ fun_l1_n720(x)
+ end
+end
+
+def fun_l0_n9(x)
+ if (x < 1)
+ fun_l1_n177(x)
+ else
+ fun_l1_n555(x)
+ end
+end
+
+def fun_l0_n10(x)
+ if (x < 1)
+ fun_l1_n814(x)
+ else
+ fun_l1_n900(x)
+ end
+end
+
+def fun_l0_n11(x)
+ if (x < 1)
+ fun_l1_n585(x)
+ else
+ fun_l1_n901(x)
+ end
+end
+
+def fun_l0_n12(x)
+ if (x < 1)
+ fun_l1_n952(x)
+ else
+ fun_l1_n270(x)
+ end
+end
+
+def fun_l0_n13(x)
+ if (x < 1)
+ fun_l1_n172(x)
+ else
+ fun_l1_n209(x)
+ end
+end
+
+def fun_l0_n14(x)
+ if (x < 1)
+ fun_l1_n514(x)
+ else
+ fun_l1_n414(x)
+ end
+end
+
+def fun_l0_n15(x)
+ if (x < 1)
+ fun_l1_n190(x)
+ else
+ fun_l1_n100(x)
+ end
+end
+
+def fun_l0_n16(x)
+ if (x < 1)
+ fun_l1_n696(x)
+ else
+ fun_l1_n997(x)
+ end
+end
+
+def fun_l0_n17(x)
+ if (x < 1)
+ fun_l1_n568(x)
+ else
+ fun_l1_n820(x)
+ end
+end
+
+def fun_l0_n18(x)
+ if (x < 1)
+ fun_l1_n837(x)
+ else
+ fun_l1_n588(x)
+ end
+end
+
+def fun_l0_n19(x)
+ if (x < 1)
+ fun_l1_n206(x)
+ else
+ fun_l1_n126(x)
+ end
+end
+
+def fun_l0_n20(x)
+ if (x < 1)
+ fun_l1_n317(x)
+ else
+ fun_l1_n722(x)
+ end
+end
+
+def fun_l0_n21(x)
+ if (x < 1)
+ fun_l1_n614(x)
+ else
+ fun_l1_n372(x)
+ end
+end
+
+def fun_l0_n22(x)
+ if (x < 1)
+ fun_l1_n530(x)
+ else
+ fun_l1_n862(x)
+ end
+end
+
+def fun_l0_n23(x)
+ if (x < 1)
+ fun_l1_n889(x)
+ else
+ fun_l1_n271(x)
+ end
+end
+
+def fun_l0_n24(x)
+ if (x < 1)
+ fun_l1_n996(x)
+ else
+ fun_l1_n717(x)
+ end
+end
+
+def fun_l0_n25(x)
+ if (x < 1)
+ fun_l1_n726(x)
+ else
+ fun_l1_n939(x)
+ end
+end
+
+def fun_l0_n26(x)
+ if (x < 1)
+ fun_l1_n316(x)
+ else
+ fun_l1_n293(x)
+ end
+end
+
+def fun_l0_n27(x)
+ if (x < 1)
+ fun_l1_n90(x)
+ else
+ fun_l1_n596(x)
+ end
+end
+
+def fun_l0_n28(x)
+ if (x < 1)
+ fun_l1_n743(x)
+ else
+ fun_l1_n782(x)
+ end
+end
+
+def fun_l0_n29(x)
+ if (x < 1)
+ fun_l1_n896(x)
+ else
+ fun_l1_n247(x)
+ end
+end
+
+def fun_l0_n30(x)
+ if (x < 1)
+ fun_l1_n2(x)
+ else
+ fun_l1_n377(x)
+ end
+end
+
+def fun_l0_n31(x)
+ if (x < 1)
+ fun_l1_n380(x)
+ else
+ fun_l1_n655(x)
+ end
+end
+
+def fun_l0_n32(x)
+ if (x < 1)
+ fun_l1_n572(x)
+ else
+ fun_l1_n778(x)
+ end
+end
+
+def fun_l0_n33(x)
+ if (x < 1)
+ fun_l1_n485(x)
+ else
+ fun_l1_n282(x)
+ end
+end
+
+def fun_l0_n34(x)
+ if (x < 1)
+ fun_l1_n703(x)
+ else
+ fun_l1_n179(x)
+ end
+end
+
+def fun_l0_n35(x)
+ if (x < 1)
+ fun_l1_n281(x)
+ else
+ fun_l1_n572(x)
+ end
+end
+
+def fun_l0_n36(x)
+ if (x < 1)
+ fun_l1_n48(x)
+ else
+ fun_l1_n286(x)
+ end
+end
+
+def fun_l0_n37(x)
+ if (x < 1)
+ fun_l1_n539(x)
+ else
+ fun_l1_n86(x)
+ end
+end
+
+def fun_l0_n38(x)
+ if (x < 1)
+ fun_l1_n918(x)
+ else
+ fun_l1_n778(x)
+ end
+end
+
+def fun_l0_n39(x)
+ if (x < 1)
+ fun_l1_n832(x)
+ else
+ fun_l1_n94(x)
+ end
+end
+
+def fun_l0_n40(x)
+ if (x < 1)
+ fun_l1_n213(x)
+ else
+ fun_l1_n580(x)
+ end
+end
+
+def fun_l0_n41(x)
+ if (x < 1)
+ fun_l1_n413(x)
+ else
+ fun_l1_n793(x)
+ end
+end
+
+def fun_l0_n42(x)
+ if (x < 1)
+ fun_l1_n451(x)
+ else
+ fun_l1_n779(x)
+ end
+end
+
+def fun_l0_n43(x)
+ if (x < 1)
+ fun_l1_n118(x)
+ else
+ fun_l1_n778(x)
+ end
+end
+
+def fun_l0_n44(x)
+ if (x < 1)
+ fun_l1_n162(x)
+ else
+ fun_l1_n901(x)
+ end
+end
+
+def fun_l0_n45(x)
+ if (x < 1)
+ fun_l1_n157(x)
+ else
+ fun_l1_n280(x)
+ end
+end
+
+def fun_l0_n46(x)
+ if (x < 1)
+ fun_l1_n748(x)
+ else
+ fun_l1_n881(x)
+ end
+end
+
+def fun_l0_n47(x)
+ if (x < 1)
+ fun_l1_n529(x)
+ else
+ fun_l1_n732(x)
+ end
+end
+
+def fun_l0_n48(x)
+ if (x < 1)
+ fun_l1_n417(x)
+ else
+ fun_l1_n483(x)
+ end
+end
+
+def fun_l0_n49(x)
+ if (x < 1)
+ fun_l1_n743(x)
+ else
+ fun_l1_n525(x)
+ end
+end
+
+def fun_l0_n50(x)
+ if (x < 1)
+ fun_l1_n14(x)
+ else
+ fun_l1_n309(x)
+ end
+end
+
+def fun_l0_n51(x)
+ if (x < 1)
+ fun_l1_n436(x)
+ else
+ fun_l1_n304(x)
+ end
+end
+
+def fun_l0_n52(x)
+ if (x < 1)
+ fun_l1_n623(x)
+ else
+ fun_l1_n590(x)
+ end
+end
+
+def fun_l0_n53(x)
+ if (x < 1)
+ fun_l1_n696(x)
+ else
+ fun_l1_n53(x)
+ end
+end
+
+def fun_l0_n54(x)
+ if (x < 1)
+ fun_l1_n807(x)
+ else
+ fun_l1_n523(x)
+ end
+end
+
+def fun_l0_n55(x)
+ if (x < 1)
+ fun_l1_n607(x)
+ else
+ fun_l1_n609(x)
+ end
+end
+
+def fun_l0_n56(x)
+ if (x < 1)
+ fun_l1_n721(x)
+ else
+ fun_l1_n994(x)
+ end
+end
+
+def fun_l0_n57(x)
+ if (x < 1)
+ fun_l1_n472(x)
+ else
+ fun_l1_n818(x)
+ end
+end
+
+def fun_l0_n58(x)
+ if (x < 1)
+ fun_l1_n30(x)
+ else
+ fun_l1_n954(x)
+ end
+end
+
+def fun_l0_n59(x)
+ if (x < 1)
+ fun_l1_n223(x)
+ else
+ fun_l1_n148(x)
+ end
+end
+
+def fun_l0_n60(x)
+ if (x < 1)
+ fun_l1_n761(x)
+ else
+ fun_l1_n40(x)
+ end
+end
+
+def fun_l0_n61(x)
+ if (x < 1)
+ fun_l1_n57(x)
+ else
+ fun_l1_n858(x)
+ end
+end
+
+def fun_l0_n62(x)
+ if (x < 1)
+ fun_l1_n114(x)
+ else
+ fun_l1_n767(x)
+ end
+end
+
+def fun_l0_n63(x)
+ if (x < 1)
+ fun_l1_n287(x)
+ else
+ fun_l1_n752(x)
+ end
+end
+
+def fun_l0_n64(x)
+ if (x < 1)
+ fun_l1_n16(x)
+ else
+ fun_l1_n229(x)
+ end
+end
+
+def fun_l0_n65(x)
+ if (x < 1)
+ fun_l1_n230(x)
+ else
+ fun_l1_n954(x)
+ end
+end
+
+def fun_l0_n66(x)
+ if (x < 1)
+ fun_l1_n98(x)
+ else
+ fun_l1_n320(x)
+ end
+end
+
+def fun_l0_n67(x)
+ if (x < 1)
+ fun_l1_n878(x)
+ else
+ fun_l1_n985(x)
+ end
+end
+
+def fun_l0_n68(x)
+ if (x < 1)
+ fun_l1_n32(x)
+ else
+ fun_l1_n648(x)
+ end
+end
+
+def fun_l0_n69(x)
+ if (x < 1)
+ fun_l1_n453(x)
+ else
+ fun_l1_n466(x)
+ end
+end
+
+def fun_l0_n70(x)
+ if (x < 1)
+ fun_l1_n787(x)
+ else
+ fun_l1_n802(x)
+ end
+end
+
+def fun_l0_n71(x)
+ if (x < 1)
+ fun_l1_n656(x)
+ else
+ fun_l1_n347(x)
+ end
+end
+
+def fun_l0_n72(x)
+ if (x < 1)
+ fun_l1_n358(x)
+ else
+ fun_l1_n336(x)
+ end
+end
+
+def fun_l0_n73(x)
+ if (x < 1)
+ fun_l1_n291(x)
+ else
+ fun_l1_n536(x)
+ end
+end
+
+def fun_l0_n74(x)
+ if (x < 1)
+ fun_l1_n795(x)
+ else
+ fun_l1_n606(x)
+ end
+end
+
+def fun_l0_n75(x)
+ if (x < 1)
+ fun_l1_n21(x)
+ else
+ fun_l1_n720(x)
+ end
+end
+
+def fun_l0_n76(x)
+ if (x < 1)
+ fun_l1_n513(x)
+ else
+ fun_l1_n300(x)
+ end
+end
+
+def fun_l0_n77(x)
+ if (x < 1)
+ fun_l1_n358(x)
+ else
+ fun_l1_n332(x)
+ end
+end
+
+def fun_l0_n78(x)
+ if (x < 1)
+ fun_l1_n712(x)
+ else
+ fun_l1_n906(x)
+ end
+end
+
+def fun_l0_n79(x)
+ if (x < 1)
+ fun_l1_n555(x)
+ else
+ fun_l1_n850(x)
+ end
+end
+
+def fun_l0_n80(x)
+ if (x < 1)
+ fun_l1_n320(x)
+ else
+ fun_l1_n892(x)
+ end
+end
+
+def fun_l0_n81(x)
+ if (x < 1)
+ fun_l1_n191(x)
+ else
+ fun_l1_n187(x)
+ end
+end
+
+def fun_l0_n82(x)
+ if (x < 1)
+ fun_l1_n457(x)
+ else
+ fun_l1_n718(x)
+ end
+end
+
+def fun_l0_n83(x)
+ if (x < 1)
+ fun_l1_n314(x)
+ else
+ fun_l1_n697(x)
+ end
+end
+
+def fun_l0_n84(x)
+ if (x < 1)
+ fun_l1_n459(x)
+ else
+ fun_l1_n500(x)
+ end
+end
+
+def fun_l0_n85(x)
+ if (x < 1)
+ fun_l1_n912(x)
+ else
+ fun_l1_n992(x)
+ end
+end
+
+def fun_l0_n86(x)
+ if (x < 1)
+ fun_l1_n523(x)
+ else
+ fun_l1_n201(x)
+ end
+end
+
+def fun_l0_n87(x)
+ if (x < 1)
+ fun_l1_n30(x)
+ else
+ fun_l1_n829(x)
+ end
+end
+
+def fun_l0_n88(x)
+ if (x < 1)
+ fun_l1_n223(x)
+ else
+ fun_l1_n799(x)
+ end
+end
+
+def fun_l0_n89(x)
+ if (x < 1)
+ fun_l1_n289(x)
+ else
+ fun_l1_n289(x)
+ end
+end
+
+def fun_l0_n90(x)
+ if (x < 1)
+ fun_l1_n961(x)
+ else
+ fun_l1_n694(x)
+ end
+end
+
+def fun_l0_n91(x)
+ if (x < 1)
+ fun_l1_n423(x)
+ else
+ fun_l1_n848(x)
+ end
+end
+
+def fun_l0_n92(x)
+ if (x < 1)
+ fun_l1_n612(x)
+ else
+ fun_l1_n358(x)
+ end
+end
+
+def fun_l0_n93(x)
+ if (x < 1)
+ fun_l1_n148(x)
+ else
+ fun_l1_n312(x)
+ end
+end
+
+def fun_l0_n94(x)
+ if (x < 1)
+ fun_l1_n771(x)
+ else
+ fun_l1_n205(x)
+ end
+end
+
+def fun_l0_n95(x)
+ if (x < 1)
+ fun_l1_n573(x)
+ else
+ fun_l1_n692(x)
+ end
+end
+
+def fun_l0_n96(x)
+ if (x < 1)
+ fun_l1_n66(x)
+ else
+ fun_l1_n936(x)
+ end
+end
+
+def fun_l0_n97(x)
+ if (x < 1)
+ fun_l1_n429(x)
+ else
+ fun_l1_n949(x)
+ end
+end
+
+def fun_l0_n98(x)
+ if (x < 1)
+ fun_l1_n737(x)
+ else
+ fun_l1_n338(x)
+ end
+end
+
+def fun_l0_n99(x)
+ if (x < 1)
+ fun_l1_n335(x)
+ else
+ fun_l1_n739(x)
+ end
+end
+
+def fun_l0_n100(x)
+ if (x < 1)
+ fun_l1_n989(x)
+ else
+ fun_l1_n735(x)
+ end
+end
+
+def fun_l0_n101(x)
+ if (x < 1)
+ fun_l1_n559(x)
+ else
+ fun_l1_n478(x)
+ end
+end
+
+def fun_l0_n102(x)
+ if (x < 1)
+ fun_l1_n261(x)
+ else
+ fun_l1_n162(x)
+ end
+end
+
+def fun_l0_n103(x)
+ if (x < 1)
+ fun_l1_n400(x)
+ else
+ fun_l1_n156(x)
+ end
+end
+
+def fun_l0_n104(x)
+ if (x < 1)
+ fun_l1_n747(x)
+ else
+ fun_l1_n361(x)
+ end
+end
+
+def fun_l0_n105(x)
+ if (x < 1)
+ fun_l1_n717(x)
+ else
+ fun_l1_n522(x)
+ end
+end
+
+def fun_l0_n106(x)
+ if (x < 1)
+ fun_l1_n513(x)
+ else
+ fun_l1_n150(x)
+ end
+end
+
+def fun_l0_n107(x)
+ if (x < 1)
+ fun_l1_n710(x)
+ else
+ fun_l1_n602(x)
+ end
+end
+
+def fun_l0_n108(x)
+ if (x < 1)
+ fun_l1_n866(x)
+ else
+ fun_l1_n111(x)
+ end
+end
+
+def fun_l0_n109(x)
+ if (x < 1)
+ fun_l1_n725(x)
+ else
+ fun_l1_n448(x)
+ end
+end
+
+def fun_l0_n110(x)
+ if (x < 1)
+ fun_l1_n703(x)
+ else
+ fun_l1_n127(x)
+ end
+end
+
+def fun_l0_n111(x)
+ if (x < 1)
+ fun_l1_n420(x)
+ else
+ fun_l1_n666(x)
+ end
+end
+
+def fun_l0_n112(x)
+ if (x < 1)
+ fun_l1_n647(x)
+ else
+ fun_l1_n567(x)
+ end
+end
+
+def fun_l0_n113(x)
+ if (x < 1)
+ fun_l1_n543(x)
+ else
+ fun_l1_n992(x)
+ end
+end
+
+def fun_l0_n114(x)
+ if (x < 1)
+ fun_l1_n12(x)
+ else
+ fun_l1_n470(x)
+ end
+end
+
+def fun_l0_n115(x)
+ if (x < 1)
+ fun_l1_n25(x)
+ else
+ fun_l1_n917(x)
+ end
+end
+
+def fun_l0_n116(x)
+ if (x < 1)
+ fun_l1_n201(x)
+ else
+ fun_l1_n110(x)
+ end
+end
+
+def fun_l0_n117(x)
+ if (x < 1)
+ fun_l1_n222(x)
+ else
+ fun_l1_n747(x)
+ end
+end
+
+def fun_l0_n118(x)
+ if (x < 1)
+ fun_l1_n990(x)
+ else
+ fun_l1_n794(x)
+ end
+end
+
+def fun_l0_n119(x)
+ if (x < 1)
+ fun_l1_n712(x)
+ else
+ fun_l1_n5(x)
+ end
+end
+
+def fun_l0_n120(x)
+ if (x < 1)
+ fun_l1_n28(x)
+ else
+ fun_l1_n89(x)
+ end
+end
+
+def fun_l0_n121(x)
+ if (x < 1)
+ fun_l1_n341(x)
+ else
+ fun_l1_n983(x)
+ end
+end
+
+def fun_l0_n122(x)
+ if (x < 1)
+ fun_l1_n123(x)
+ else
+ fun_l1_n452(x)
+ end
+end
+
+def fun_l0_n123(x)
+ if (x < 1)
+ fun_l1_n514(x)
+ else
+ fun_l1_n949(x)
+ end
+end
+
+def fun_l0_n124(x)
+ if (x < 1)
+ fun_l1_n280(x)
+ else
+ fun_l1_n281(x)
+ end
+end
+
+def fun_l0_n125(x)
+ if (x < 1)
+ fun_l1_n512(x)
+ else
+ fun_l1_n772(x)
+ end
+end
+
+def fun_l0_n126(x)
+ if (x < 1)
+ fun_l1_n911(x)
+ else
+ fun_l1_n693(x)
+ end
+end
+
+def fun_l0_n127(x)
+ if (x < 1)
+ fun_l1_n633(x)
+ else
+ fun_l1_n574(x)
+ end
+end
+
+def fun_l0_n128(x)
+ if (x < 1)
+ fun_l1_n318(x)
+ else
+ fun_l1_n266(x)
+ end
+end
+
+def fun_l0_n129(x)
+ if (x < 1)
+ fun_l1_n677(x)
+ else
+ fun_l1_n10(x)
+ end
+end
+
+def fun_l0_n130(x)
+ if (x < 1)
+ fun_l1_n994(x)
+ else
+ fun_l1_n48(x)
+ end
+end
+
+def fun_l0_n131(x)
+ if (x < 1)
+ fun_l1_n335(x)
+ else
+ fun_l1_n473(x)
+ end
+end
+
+def fun_l0_n132(x)
+ if (x < 1)
+ fun_l1_n641(x)
+ else
+ fun_l1_n48(x)
+ end
+end
+
+def fun_l0_n133(x)
+ if (x < 1)
+ fun_l1_n914(x)
+ else
+ fun_l1_n818(x)
+ end
+end
+
+def fun_l0_n134(x)
+ if (x < 1)
+ fun_l1_n479(x)
+ else
+ fun_l1_n761(x)
+ end
+end
+
+def fun_l0_n135(x)
+ if (x < 1)
+ fun_l1_n186(x)
+ else
+ fun_l1_n692(x)
+ end
+end
+
+def fun_l0_n136(x)
+ if (x < 1)
+ fun_l1_n325(x)
+ else
+ fun_l1_n279(x)
+ end
+end
+
+def fun_l0_n137(x)
+ if (x < 1)
+ fun_l1_n493(x)
+ else
+ fun_l1_n293(x)
+ end
+end
+
+def fun_l0_n138(x)
+ if (x < 1)
+ fun_l1_n788(x)
+ else
+ fun_l1_n364(x)
+ end
+end
+
+def fun_l0_n139(x)
+ if (x < 1)
+ fun_l1_n565(x)
+ else
+ fun_l1_n63(x)
+ end
+end
+
+def fun_l0_n140(x)
+ if (x < 1)
+ fun_l1_n128(x)
+ else
+ fun_l1_n299(x)
+ end
+end
+
+def fun_l0_n141(x)
+ if (x < 1)
+ fun_l1_n782(x)
+ else
+ fun_l1_n195(x)
+ end
+end
+
+def fun_l0_n142(x)
+ if (x < 1)
+ fun_l1_n696(x)
+ else
+ fun_l1_n117(x)
+ end
+end
+
+def fun_l0_n143(x)
+ if (x < 1)
+ fun_l1_n263(x)
+ else
+ fun_l1_n683(x)
+ end
+end
+
+def fun_l0_n144(x)
+ if (x < 1)
+ fun_l1_n633(x)
+ else
+ fun_l1_n92(x)
+ end
+end
+
+def fun_l0_n145(x)
+ if (x < 1)
+ fun_l1_n626(x)
+ else
+ fun_l1_n201(x)
+ end
+end
+
+def fun_l0_n146(x)
+ if (x < 1)
+ fun_l1_n296(x)
+ else
+ fun_l1_n425(x)
+ end
+end
+
+def fun_l0_n147(x)
+ if (x < 1)
+ fun_l1_n395(x)
+ else
+ fun_l1_n750(x)
+ end
+end
+
+def fun_l0_n148(x)
+ if (x < 1)
+ fun_l1_n164(x)
+ else
+ fun_l1_n580(x)
+ end
+end
+
+def fun_l0_n149(x)
+ if (x < 1)
+ fun_l1_n904(x)
+ else
+ fun_l1_n264(x)
+ end
+end
+
+def fun_l0_n150(x)
+ if (x < 1)
+ fun_l1_n383(x)
+ else
+ fun_l1_n558(x)
+ end
+end
+
+def fun_l0_n151(x)
+ if (x < 1)
+ fun_l1_n522(x)
+ else
+ fun_l1_n735(x)
+ end
+end
+
+def fun_l0_n152(x)
+ if (x < 1)
+ fun_l1_n496(x)
+ else
+ fun_l1_n562(x)
+ end
+end
+
+def fun_l0_n153(x)
+ if (x < 1)
+ fun_l1_n374(x)
+ else
+ fun_l1_n561(x)
+ end
+end
+
+def fun_l0_n154(x)
+ if (x < 1)
+ fun_l1_n314(x)
+ else
+ fun_l1_n368(x)
+ end
+end
+
+def fun_l0_n155(x)
+ if (x < 1)
+ fun_l1_n456(x)
+ else
+ fun_l1_n189(x)
+ end
+end
+
+def fun_l0_n156(x)
+ if (x < 1)
+ fun_l1_n46(x)
+ else
+ fun_l1_n620(x)
+ end
+end
+
+def fun_l0_n157(x)
+ if (x < 1)
+ fun_l1_n259(x)
+ else
+ fun_l1_n742(x)
+ end
+end
+
+def fun_l0_n158(x)
+ if (x < 1)
+ fun_l1_n881(x)
+ else
+ fun_l1_n786(x)
+ end
+end
+
+def fun_l0_n159(x)
+ if (x < 1)
+ fun_l1_n607(x)
+ else
+ fun_l1_n177(x)
+ end
+end
+
+def fun_l0_n160(x)
+ if (x < 1)
+ fun_l1_n824(x)
+ else
+ fun_l1_n415(x)
+ end
+end
+
+def fun_l0_n161(x)
+ if (x < 1)
+ fun_l1_n443(x)
+ else
+ fun_l1_n787(x)
+ end
+end
+
+def fun_l0_n162(x)
+ if (x < 1)
+ fun_l1_n124(x)
+ else
+ fun_l1_n529(x)
+ end
+end
+
+def fun_l0_n163(x)
+ if (x < 1)
+ fun_l1_n696(x)
+ else
+ fun_l1_n96(x)
+ end
+end
+
+def fun_l0_n164(x)
+ if (x < 1)
+ fun_l1_n775(x)
+ else
+ fun_l1_n549(x)
+ end
+end
+
+def fun_l0_n165(x)
+ if (x < 1)
+ fun_l1_n860(x)
+ else
+ fun_l1_n212(x)
+ end
+end
+
+def fun_l0_n166(x)
+ if (x < 1)
+ fun_l1_n378(x)
+ else
+ fun_l1_n904(x)
+ end
+end
+
+def fun_l0_n167(x)
+ if (x < 1)
+ fun_l1_n15(x)
+ else
+ fun_l1_n640(x)
+ end
+end
+
+def fun_l0_n168(x)
+ if (x < 1)
+ fun_l1_n771(x)
+ else
+ fun_l1_n861(x)
+ end
+end
+
+def fun_l0_n169(x)
+ if (x < 1)
+ fun_l1_n468(x)
+ else
+ fun_l1_n586(x)
+ end
+end
+
+def fun_l0_n170(x)
+ if (x < 1)
+ fun_l1_n477(x)
+ else
+ fun_l1_n674(x)
+ end
+end
+
+def fun_l0_n171(x)
+ if (x < 1)
+ fun_l1_n509(x)
+ else
+ fun_l1_n64(x)
+ end
+end
+
+def fun_l0_n172(x)
+ if (x < 1)
+ fun_l1_n612(x)
+ else
+ fun_l1_n828(x)
+ end
+end
+
+def fun_l0_n173(x)
+ if (x < 1)
+ fun_l1_n440(x)
+ else
+ fun_l1_n204(x)
+ end
+end
+
+def fun_l0_n174(x)
+ if (x < 1)
+ fun_l1_n259(x)
+ else
+ fun_l1_n947(x)
+ end
+end
+
+def fun_l0_n175(x)
+ if (x < 1)
+ fun_l1_n402(x)
+ else
+ fun_l1_n588(x)
+ end
+end
+
+def fun_l0_n176(x)
+ if (x < 1)
+ fun_l1_n245(x)
+ else
+ fun_l1_n540(x)
+ end
+end
+
+def fun_l0_n177(x)
+ if (x < 1)
+ fun_l1_n869(x)
+ else
+ fun_l1_n249(x)
+ end
+end
+
+def fun_l0_n178(x)
+ if (x < 1)
+ fun_l1_n830(x)
+ else
+ fun_l1_n210(x)
+ end
+end
+
+def fun_l0_n179(x)
+ if (x < 1)
+ fun_l1_n692(x)
+ else
+ fun_l1_n222(x)
+ end
+end
+
+def fun_l0_n180(x)
+ if (x < 1)
+ fun_l1_n220(x)
+ else
+ fun_l1_n281(x)
+ end
+end
+
+def fun_l0_n181(x)
+ if (x < 1)
+ fun_l1_n523(x)
+ else
+ fun_l1_n618(x)
+ end
+end
+
+def fun_l0_n182(x)
+ if (x < 1)
+ fun_l1_n44(x)
+ else
+ fun_l1_n422(x)
+ end
+end
+
+def fun_l0_n183(x)
+ if (x < 1)
+ fun_l1_n944(x)
+ else
+ fun_l1_n230(x)
+ end
+end
+
+def fun_l0_n184(x)
+ if (x < 1)
+ fun_l1_n678(x)
+ else
+ fun_l1_n121(x)
+ end
+end
+
+def fun_l0_n185(x)
+ if (x < 1)
+ fun_l1_n73(x)
+ else
+ fun_l1_n398(x)
+ end
+end
+
+def fun_l0_n186(x)
+ if (x < 1)
+ fun_l1_n121(x)
+ else
+ fun_l1_n689(x)
+ end
+end
+
+def fun_l0_n187(x)
+ if (x < 1)
+ fun_l1_n946(x)
+ else
+ fun_l1_n613(x)
+ end
+end
+
+def fun_l0_n188(x)
+ if (x < 1)
+ fun_l1_n987(x)
+ else
+ fun_l1_n785(x)
+ end
+end
+
+def fun_l0_n189(x)
+ if (x < 1)
+ fun_l1_n181(x)
+ else
+ fun_l1_n644(x)
+ end
+end
+
+def fun_l0_n190(x)
+ if (x < 1)
+ fun_l1_n623(x)
+ else
+ fun_l1_n679(x)
+ end
+end
+
+def fun_l0_n191(x)
+ if (x < 1)
+ fun_l1_n784(x)
+ else
+ fun_l1_n274(x)
+ end
+end
+
+def fun_l0_n192(x)
+ if (x < 1)
+ fun_l1_n71(x)
+ else
+ fun_l1_n773(x)
+ end
+end
+
+def fun_l0_n193(x)
+ if (x < 1)
+ fun_l1_n516(x)
+ else
+ fun_l1_n496(x)
+ end
+end
+
+def fun_l0_n194(x)
+ if (x < 1)
+ fun_l1_n608(x)
+ else
+ fun_l1_n460(x)
+ end
+end
+
+def fun_l0_n195(x)
+ if (x < 1)
+ fun_l1_n25(x)
+ else
+ fun_l1_n437(x)
+ end
+end
+
+def fun_l0_n196(x)
+ if (x < 1)
+ fun_l1_n410(x)
+ else
+ fun_l1_n674(x)
+ end
+end
+
+def fun_l0_n197(x)
+ if (x < 1)
+ fun_l1_n949(x)
+ else
+ fun_l1_n708(x)
+ end
+end
+
+def fun_l0_n198(x)
+ if (x < 1)
+ fun_l1_n714(x)
+ else
+ fun_l1_n119(x)
+ end
+end
+
+def fun_l0_n199(x)
+ if (x < 1)
+ fun_l1_n41(x)
+ else
+ fun_l1_n865(x)
+ end
+end
+
+def fun_l0_n200(x)
+ if (x < 1)
+ fun_l1_n383(x)
+ else
+ fun_l1_n90(x)
+ end
+end
+
+def fun_l0_n201(x)
+ if (x < 1)
+ fun_l1_n581(x)
+ else
+ fun_l1_n273(x)
+ end
+end
+
+def fun_l0_n202(x)
+ if (x < 1)
+ fun_l1_n350(x)
+ else
+ fun_l1_n425(x)
+ end
+end
+
+def fun_l0_n203(x)
+ if (x < 1)
+ fun_l1_n259(x)
+ else
+ fun_l1_n922(x)
+ end
+end
+
+def fun_l0_n204(x)
+ if (x < 1)
+ fun_l1_n448(x)
+ else
+ fun_l1_n741(x)
+ end
+end
+
+def fun_l0_n205(x)
+ if (x < 1)
+ fun_l1_n86(x)
+ else
+ fun_l1_n618(x)
+ end
+end
+
+def fun_l0_n206(x)
+ if (x < 1)
+ fun_l1_n412(x)
+ else
+ fun_l1_n646(x)
+ end
+end
+
+def fun_l0_n207(x)
+ if (x < 1)
+ fun_l1_n196(x)
+ else
+ fun_l1_n496(x)
+ end
+end
+
+def fun_l0_n208(x)
+ if (x < 1)
+ fun_l1_n777(x)
+ else
+ fun_l1_n150(x)
+ end
+end
+
+def fun_l0_n209(x)
+ if (x < 1)
+ fun_l1_n20(x)
+ else
+ fun_l1_n718(x)
+ end
+end
+
+def fun_l0_n210(x)
+ if (x < 1)
+ fun_l1_n934(x)
+ else
+ fun_l1_n416(x)
+ end
+end
+
+def fun_l0_n211(x)
+ if (x < 1)
+ fun_l1_n803(x)
+ else
+ fun_l1_n636(x)
+ end
+end
+
+def fun_l0_n212(x)
+ if (x < 1)
+ fun_l1_n93(x)
+ else
+ fun_l1_n791(x)
+ end
+end
+
+def fun_l0_n213(x)
+ if (x < 1)
+ fun_l1_n76(x)
+ else
+ fun_l1_n172(x)
+ end
+end
+
+def fun_l0_n214(x)
+ if (x < 1)
+ fun_l1_n103(x)
+ else
+ fun_l1_n381(x)
+ end
+end
+
+def fun_l0_n215(x)
+ if (x < 1)
+ fun_l1_n433(x)
+ else
+ fun_l1_n349(x)
+ end
+end
+
+def fun_l0_n216(x)
+ if (x < 1)
+ fun_l1_n154(x)
+ else
+ fun_l1_n740(x)
+ end
+end
+
+def fun_l0_n217(x)
+ if (x < 1)
+ fun_l1_n927(x)
+ else
+ fun_l1_n886(x)
+ end
+end
+
+def fun_l0_n218(x)
+ if (x < 1)
+ fun_l1_n804(x)
+ else
+ fun_l1_n6(x)
+ end
+end
+
+def fun_l0_n219(x)
+ if (x < 1)
+ fun_l1_n921(x)
+ else
+ fun_l1_n121(x)
+ end
+end
+
+def fun_l0_n220(x)
+ if (x < 1)
+ fun_l1_n732(x)
+ else
+ fun_l1_n224(x)
+ end
+end
+
+def fun_l0_n221(x)
+ if (x < 1)
+ fun_l1_n818(x)
+ else
+ fun_l1_n105(x)
+ end
+end
+
+def fun_l0_n222(x)
+ if (x < 1)
+ fun_l1_n162(x)
+ else
+ fun_l1_n700(x)
+ end
+end
+
+def fun_l0_n223(x)
+ if (x < 1)
+ fun_l1_n57(x)
+ else
+ fun_l1_n734(x)
+ end
+end
+
+def fun_l0_n224(x)
+ if (x < 1)
+ fun_l1_n283(x)
+ else
+ fun_l1_n87(x)
+ end
+end
+
+def fun_l0_n225(x)
+ if (x < 1)
+ fun_l1_n623(x)
+ else
+ fun_l1_n363(x)
+ end
+end
+
+def fun_l0_n226(x)
+ if (x < 1)
+ fun_l1_n962(x)
+ else
+ fun_l1_n660(x)
+ end
+end
+
+def fun_l0_n227(x)
+ if (x < 1)
+ fun_l1_n255(x)
+ else
+ fun_l1_n536(x)
+ end
+end
+
+def fun_l0_n228(x)
+ if (x < 1)
+ fun_l1_n377(x)
+ else
+ fun_l1_n249(x)
+ end
+end
+
+def fun_l0_n229(x)
+ if (x < 1)
+ fun_l1_n527(x)
+ else
+ fun_l1_n691(x)
+ end
+end
+
+def fun_l0_n230(x)
+ if (x < 1)
+ fun_l1_n781(x)
+ else
+ fun_l1_n494(x)
+ end
+end
+
+def fun_l0_n231(x)
+ if (x < 1)
+ fun_l1_n889(x)
+ else
+ fun_l1_n967(x)
+ end
+end
+
+def fun_l0_n232(x)
+ if (x < 1)
+ fun_l1_n509(x)
+ else
+ fun_l1_n910(x)
+ end
+end
+
+def fun_l0_n233(x)
+ if (x < 1)
+ fun_l1_n354(x)
+ else
+ fun_l1_n5(x)
+ end
+end
+
+def fun_l0_n234(x)
+ if (x < 1)
+ fun_l1_n423(x)
+ else
+ fun_l1_n788(x)
+ end
+end
+
+def fun_l0_n235(x)
+ if (x < 1)
+ fun_l1_n632(x)
+ else
+ fun_l1_n705(x)
+ end
+end
+
+def fun_l0_n236(x)
+ if (x < 1)
+ fun_l1_n955(x)
+ else
+ fun_l1_n908(x)
+ end
+end
+
+def fun_l0_n237(x)
+ if (x < 1)
+ fun_l1_n329(x)
+ else
+ fun_l1_n2(x)
+ end
+end
+
+def fun_l0_n238(x)
+ if (x < 1)
+ fun_l1_n767(x)
+ else
+ fun_l1_n766(x)
+ end
+end
+
+def fun_l0_n239(x)
+ if (x < 1)
+ fun_l1_n304(x)
+ else
+ fun_l1_n507(x)
+ end
+end
+
+def fun_l0_n240(x)
+ if (x < 1)
+ fun_l1_n845(x)
+ else
+ fun_l1_n777(x)
+ end
+end
+
+def fun_l0_n241(x)
+ if (x < 1)
+ fun_l1_n69(x)
+ else
+ fun_l1_n260(x)
+ end
+end
+
+def fun_l0_n242(x)
+ if (x < 1)
+ fun_l1_n194(x)
+ else
+ fun_l1_n412(x)
+ end
+end
+
+def fun_l0_n243(x)
+ if (x < 1)
+ fun_l1_n974(x)
+ else
+ fun_l1_n922(x)
+ end
+end
+
+def fun_l0_n244(x)
+ if (x < 1)
+ fun_l1_n532(x)
+ else
+ fun_l1_n530(x)
+ end
+end
+
+def fun_l0_n245(x)
+ if (x < 1)
+ fun_l1_n554(x)
+ else
+ fun_l1_n656(x)
+ end
+end
+
+def fun_l0_n246(x)
+ if (x < 1)
+ fun_l1_n253(x)
+ else
+ fun_l1_n235(x)
+ end
+end
+
+def fun_l0_n247(x)
+ if (x < 1)
+ fun_l1_n754(x)
+ else
+ fun_l1_n775(x)
+ end
+end
+
+def fun_l0_n248(x)
+ if (x < 1)
+ fun_l1_n89(x)
+ else
+ fun_l1_n129(x)
+ end
+end
+
+def fun_l0_n249(x)
+ if (x < 1)
+ fun_l1_n284(x)
+ else
+ fun_l1_n642(x)
+ end
+end
+
+def fun_l0_n250(x)
+ if (x < 1)
+ fun_l1_n67(x)
+ else
+ fun_l1_n867(x)
+ end
+end
+
+def fun_l0_n251(x)
+ if (x < 1)
+ fun_l1_n926(x)
+ else
+ fun_l1_n442(x)
+ end
+end
+
+def fun_l0_n252(x)
+ if (x < 1)
+ fun_l1_n196(x)
+ else
+ fun_l1_n583(x)
+ end
+end
+
+def fun_l0_n253(x)
+ if (x < 1)
+ fun_l1_n966(x)
+ else
+ fun_l1_n810(x)
+ end
+end
+
+def fun_l0_n254(x)
+ if (x < 1)
+ fun_l1_n984(x)
+ else
+ fun_l1_n752(x)
+ end
+end
+
+def fun_l0_n255(x)
+ if (x < 1)
+ fun_l1_n941(x)
+ else
+ fun_l1_n744(x)
+ end
+end
+
+def fun_l0_n256(x)
+ if (x < 1)
+ fun_l1_n785(x)
+ else
+ fun_l1_n610(x)
+ end
+end
+
+def fun_l0_n257(x)
+ if (x < 1)
+ fun_l1_n622(x)
+ else
+ fun_l1_n730(x)
+ end
+end
+
+def fun_l0_n258(x)
+ if (x < 1)
+ fun_l1_n453(x)
+ else
+ fun_l1_n641(x)
+ end
+end
+
+def fun_l0_n259(x)
+ if (x < 1)
+ fun_l1_n407(x)
+ else
+ fun_l1_n818(x)
+ end
+end
+
+def fun_l0_n260(x)
+ if (x < 1)
+ fun_l1_n252(x)
+ else
+ fun_l1_n205(x)
+ end
+end
+
+def fun_l0_n261(x)
+ if (x < 1)
+ fun_l1_n940(x)
+ else
+ fun_l1_n678(x)
+ end
+end
+
+def fun_l0_n262(x)
+ if (x < 1)
+ fun_l1_n350(x)
+ else
+ fun_l1_n496(x)
+ end
+end
+
+def fun_l0_n263(x)
+ if (x < 1)
+ fun_l1_n688(x)
+ else
+ fun_l1_n193(x)
+ end
+end
+
+def fun_l0_n264(x)
+ if (x < 1)
+ fun_l1_n366(x)
+ else
+ fun_l1_n790(x)
+ end
+end
+
+def fun_l0_n265(x)
+ if (x < 1)
+ fun_l1_n592(x)
+ else
+ fun_l1_n93(x)
+ end
+end
+
+def fun_l0_n266(x)
+ if (x < 1)
+ fun_l1_n189(x)
+ else
+ fun_l1_n467(x)
+ end
+end
+
+def fun_l0_n267(x)
+ if (x < 1)
+ fun_l1_n813(x)
+ else
+ fun_l1_n7(x)
+ end
+end
+
+def fun_l0_n268(x)
+ if (x < 1)
+ fun_l1_n516(x)
+ else
+ fun_l1_n271(x)
+ end
+end
+
+def fun_l0_n269(x)
+ if (x < 1)
+ fun_l1_n0(x)
+ else
+ fun_l1_n121(x)
+ end
+end
+
+def fun_l0_n270(x)
+ if (x < 1)
+ fun_l1_n634(x)
+ else
+ fun_l1_n726(x)
+ end
+end
+
+def fun_l0_n271(x)
+ if (x < 1)
+ fun_l1_n192(x)
+ else
+ fun_l1_n468(x)
+ end
+end
+
+def fun_l0_n272(x)
+ if (x < 1)
+ fun_l1_n278(x)
+ else
+ fun_l1_n355(x)
+ end
+end
+
+def fun_l0_n273(x)
+ if (x < 1)
+ fun_l1_n354(x)
+ else
+ fun_l1_n87(x)
+ end
+end
+
+def fun_l0_n274(x)
+ if (x < 1)
+ fun_l1_n643(x)
+ else
+ fun_l1_n806(x)
+ end
+end
+
+def fun_l0_n275(x)
+ if (x < 1)
+ fun_l1_n389(x)
+ else
+ fun_l1_n559(x)
+ end
+end
+
+def fun_l0_n276(x)
+ if (x < 1)
+ fun_l1_n283(x)
+ else
+ fun_l1_n539(x)
+ end
+end
+
+def fun_l0_n277(x)
+ if (x < 1)
+ fun_l1_n0(x)
+ else
+ fun_l1_n351(x)
+ end
+end
+
+def fun_l0_n278(x)
+ if (x < 1)
+ fun_l1_n813(x)
+ else
+ fun_l1_n513(x)
+ end
+end
+
+def fun_l0_n279(x)
+ if (x < 1)
+ fun_l1_n501(x)
+ else
+ fun_l1_n967(x)
+ end
+end
+
+def fun_l0_n280(x)
+ if (x < 1)
+ fun_l1_n727(x)
+ else
+ fun_l1_n232(x)
+ end
+end
+
+def fun_l0_n281(x)
+ if (x < 1)
+ fun_l1_n946(x)
+ else
+ fun_l1_n693(x)
+ end
+end
+
+def fun_l0_n282(x)
+ if (x < 1)
+ fun_l1_n260(x)
+ else
+ fun_l1_n525(x)
+ end
+end
+
+def fun_l0_n283(x)
+ if (x < 1)
+ fun_l1_n957(x)
+ else
+ fun_l1_n817(x)
+ end
+end
+
+def fun_l0_n284(x)
+ if (x < 1)
+ fun_l1_n91(x)
+ else
+ fun_l1_n735(x)
+ end
+end
+
+def fun_l0_n285(x)
+ if (x < 1)
+ fun_l1_n71(x)
+ else
+ fun_l1_n24(x)
+ end
+end
+
+def fun_l0_n286(x)
+ if (x < 1)
+ fun_l1_n594(x)
+ else
+ fun_l1_n747(x)
+ end
+end
+
+def fun_l0_n287(x)
+ if (x < 1)
+ fun_l1_n869(x)
+ else
+ fun_l1_n414(x)
+ end
+end
+
+def fun_l0_n288(x)
+ if (x < 1)
+ fun_l1_n182(x)
+ else
+ fun_l1_n835(x)
+ end
+end
+
+def fun_l0_n289(x)
+ if (x < 1)
+ fun_l1_n188(x)
+ else
+ fun_l1_n949(x)
+ end
+end
+
+def fun_l0_n290(x)
+ if (x < 1)
+ fun_l1_n35(x)
+ else
+ fun_l1_n259(x)
+ end
+end
+
+def fun_l0_n291(x)
+ if (x < 1)
+ fun_l1_n593(x)
+ else
+ fun_l1_n810(x)
+ end
+end
+
+def fun_l0_n292(x)
+ if (x < 1)
+ fun_l1_n680(x)
+ else
+ fun_l1_n564(x)
+ end
+end
+
+def fun_l0_n293(x)
+ if (x < 1)
+ fun_l1_n57(x)
+ else
+ fun_l1_n91(x)
+ end
+end
+
+def fun_l0_n294(x)
+ if (x < 1)
+ fun_l1_n945(x)
+ else
+ fun_l1_n807(x)
+ end
+end
+
+def fun_l0_n295(x)
+ if (x < 1)
+ fun_l1_n442(x)
+ else
+ fun_l1_n123(x)
+ end
+end
+
+def fun_l0_n296(x)
+ if (x < 1)
+ fun_l1_n536(x)
+ else
+ fun_l1_n987(x)
+ end
+end
+
+def fun_l0_n297(x)
+ if (x < 1)
+ fun_l1_n519(x)
+ else
+ fun_l1_n657(x)
+ end
+end
+
+def fun_l0_n298(x)
+ if (x < 1)
+ fun_l1_n204(x)
+ else
+ fun_l1_n437(x)
+ end
+end
+
+def fun_l0_n299(x)
+ if (x < 1)
+ fun_l1_n289(x)
+ else
+ fun_l1_n385(x)
+ end
+end
+
+def fun_l0_n300(x)
+ if (x < 1)
+ fun_l1_n629(x)
+ else
+ fun_l1_n803(x)
+ end
+end
+
+def fun_l0_n301(x)
+ if (x < 1)
+ fun_l1_n576(x)
+ else
+ fun_l1_n921(x)
+ end
+end
+
+def fun_l0_n302(x)
+ if (x < 1)
+ fun_l1_n466(x)
+ else
+ fun_l1_n475(x)
+ end
+end
+
+def fun_l0_n303(x)
+ if (x < 1)
+ fun_l1_n658(x)
+ else
+ fun_l1_n333(x)
+ end
+end
+
+def fun_l0_n304(x)
+ if (x < 1)
+ fun_l1_n728(x)
+ else
+ fun_l1_n749(x)
+ end
+end
+
+def fun_l0_n305(x)
+ if (x < 1)
+ fun_l1_n68(x)
+ else
+ fun_l1_n552(x)
+ end
+end
+
+def fun_l0_n306(x)
+ if (x < 1)
+ fun_l1_n633(x)
+ else
+ fun_l1_n958(x)
+ end
+end
+
+def fun_l0_n307(x)
+ if (x < 1)
+ fun_l1_n79(x)
+ else
+ fun_l1_n386(x)
+ end
+end
+
+def fun_l0_n308(x)
+ if (x < 1)
+ fun_l1_n831(x)
+ else
+ fun_l1_n176(x)
+ end
+end
+
+def fun_l0_n309(x)
+ if (x < 1)
+ fun_l1_n770(x)
+ else
+ fun_l1_n334(x)
+ end
+end
+
+def fun_l0_n310(x)
+ if (x < 1)
+ fun_l1_n21(x)
+ else
+ fun_l1_n643(x)
+ end
+end
+
+def fun_l0_n311(x)
+ if (x < 1)
+ fun_l1_n673(x)
+ else
+ fun_l1_n298(x)
+ end
+end
+
+def fun_l0_n312(x)
+ if (x < 1)
+ fun_l1_n753(x)
+ else
+ fun_l1_n817(x)
+ end
+end
+
+def fun_l0_n313(x)
+ if (x < 1)
+ fun_l1_n299(x)
+ else
+ fun_l1_n350(x)
+ end
+end
+
+def fun_l0_n314(x)
+ if (x < 1)
+ fun_l1_n190(x)
+ else
+ fun_l1_n519(x)
+ end
+end
+
+def fun_l0_n315(x)
+ if (x < 1)
+ fun_l1_n934(x)
+ else
+ fun_l1_n416(x)
+ end
+end
+
+def fun_l0_n316(x)
+ if (x < 1)
+ fun_l1_n695(x)
+ else
+ fun_l1_n377(x)
+ end
+end
+
+def fun_l0_n317(x)
+ if (x < 1)
+ fun_l1_n194(x)
+ else
+ fun_l1_n747(x)
+ end
+end
+
+def fun_l0_n318(x)
+ if (x < 1)
+ fun_l1_n145(x)
+ else
+ fun_l1_n761(x)
+ end
+end
+
+def fun_l0_n319(x)
+ if (x < 1)
+ fun_l1_n223(x)
+ else
+ fun_l1_n237(x)
+ end
+end
+
+def fun_l0_n320(x)
+ if (x < 1)
+ fun_l1_n907(x)
+ else
+ fun_l1_n653(x)
+ end
+end
+
+def fun_l0_n321(x)
+ if (x < 1)
+ fun_l1_n216(x)
+ else
+ fun_l1_n67(x)
+ end
+end
+
+def fun_l0_n322(x)
+ if (x < 1)
+ fun_l1_n658(x)
+ else
+ fun_l1_n948(x)
+ end
+end
+
+def fun_l0_n323(x)
+ if (x < 1)
+ fun_l1_n358(x)
+ else
+ fun_l1_n926(x)
+ end
+end
+
+def fun_l0_n324(x)
+ if (x < 1)
+ fun_l1_n533(x)
+ else
+ fun_l1_n252(x)
+ end
+end
+
+def fun_l0_n325(x)
+ if (x < 1)
+ fun_l1_n284(x)
+ else
+ fun_l1_n670(x)
+ end
+end
+
+def fun_l0_n326(x)
+ if (x < 1)
+ fun_l1_n327(x)
+ else
+ fun_l1_n298(x)
+ end
+end
+
+def fun_l0_n327(x)
+ if (x < 1)
+ fun_l1_n837(x)
+ else
+ fun_l1_n890(x)
+ end
+end
+
+def fun_l0_n328(x)
+ if (x < 1)
+ fun_l1_n941(x)
+ else
+ fun_l1_n794(x)
+ end
+end
+
+def fun_l0_n329(x)
+ if (x < 1)
+ fun_l1_n859(x)
+ else
+ fun_l1_n970(x)
+ end
+end
+
+def fun_l0_n330(x)
+ if (x < 1)
+ fun_l1_n282(x)
+ else
+ fun_l1_n569(x)
+ end
+end
+
+def fun_l0_n331(x)
+ if (x < 1)
+ fun_l1_n33(x)
+ else
+ fun_l1_n525(x)
+ end
+end
+
+def fun_l0_n332(x)
+ if (x < 1)
+ fun_l1_n847(x)
+ else
+ fun_l1_n540(x)
+ end
+end
+
+def fun_l0_n333(x)
+ if (x < 1)
+ fun_l1_n485(x)
+ else
+ fun_l1_n756(x)
+ end
+end
+
+def fun_l0_n334(x)
+ if (x < 1)
+ fun_l1_n396(x)
+ else
+ fun_l1_n781(x)
+ end
+end
+
+def fun_l0_n335(x)
+ if (x < 1)
+ fun_l1_n225(x)
+ else
+ fun_l1_n417(x)
+ end
+end
+
+def fun_l0_n336(x)
+ if (x < 1)
+ fun_l1_n906(x)
+ else
+ fun_l1_n301(x)
+ end
+end
+
+def fun_l0_n337(x)
+ if (x < 1)
+ fun_l1_n863(x)
+ else
+ fun_l1_n409(x)
+ end
+end
+
+def fun_l0_n338(x)
+ if (x < 1)
+ fun_l1_n103(x)
+ else
+ fun_l1_n460(x)
+ end
+end
+
+def fun_l0_n339(x)
+ if (x < 1)
+ fun_l1_n787(x)
+ else
+ fun_l1_n434(x)
+ end
+end
+
+def fun_l0_n340(x)
+ if (x < 1)
+ fun_l1_n308(x)
+ else
+ fun_l1_n875(x)
+ end
+end
+
+def fun_l0_n341(x)
+ if (x < 1)
+ fun_l1_n146(x)
+ else
+ fun_l1_n566(x)
+ end
+end
+
+def fun_l0_n342(x)
+ if (x < 1)
+ fun_l1_n837(x)
+ else
+ fun_l1_n770(x)
+ end
+end
+
+def fun_l0_n343(x)
+ if (x < 1)
+ fun_l1_n668(x)
+ else
+ fun_l1_n60(x)
+ end
+end
+
+def fun_l0_n344(x)
+ if (x < 1)
+ fun_l1_n305(x)
+ else
+ fun_l1_n388(x)
+ end
+end
+
+def fun_l0_n345(x)
+ if (x < 1)
+ fun_l1_n796(x)
+ else
+ fun_l1_n920(x)
+ end
+end
+
+def fun_l0_n346(x)
+ if (x < 1)
+ fun_l1_n257(x)
+ else
+ fun_l1_n229(x)
+ end
+end
+
+def fun_l0_n347(x)
+ if (x < 1)
+ fun_l1_n740(x)
+ else
+ fun_l1_n372(x)
+ end
+end
+
+def fun_l0_n348(x)
+ if (x < 1)
+ fun_l1_n698(x)
+ else
+ fun_l1_n63(x)
+ end
+end
+
+def fun_l0_n349(x)
+ if (x < 1)
+ fun_l1_n4(x)
+ else
+ fun_l1_n119(x)
+ end
+end
+
+def fun_l0_n350(x)
+ if (x < 1)
+ fun_l1_n186(x)
+ else
+ fun_l1_n352(x)
+ end
+end
+
+def fun_l0_n351(x)
+ if (x < 1)
+ fun_l1_n619(x)
+ else
+ fun_l1_n583(x)
+ end
+end
+
+def fun_l0_n352(x)
+ if (x < 1)
+ fun_l1_n2(x)
+ else
+ fun_l1_n275(x)
+ end
+end
+
+def fun_l0_n353(x)
+ if (x < 1)
+ fun_l1_n843(x)
+ else
+ fun_l1_n986(x)
+ end
+end
+
+def fun_l0_n354(x)
+ if (x < 1)
+ fun_l1_n865(x)
+ else
+ fun_l1_n64(x)
+ end
+end
+
+def fun_l0_n355(x)
+ if (x < 1)
+ fun_l1_n732(x)
+ else
+ fun_l1_n332(x)
+ end
+end
+
+def fun_l0_n356(x)
+ if (x < 1)
+ fun_l1_n642(x)
+ else
+ fun_l1_n559(x)
+ end
+end
+
+def fun_l0_n357(x)
+ if (x < 1)
+ fun_l1_n385(x)
+ else
+ fun_l1_n532(x)
+ end
+end
+
+def fun_l0_n358(x)
+ if (x < 1)
+ fun_l1_n672(x)
+ else
+ fun_l1_n721(x)
+ end
+end
+
+def fun_l0_n359(x)
+ if (x < 1)
+ fun_l1_n663(x)
+ else
+ fun_l1_n590(x)
+ end
+end
+
+def fun_l0_n360(x)
+ if (x < 1)
+ fun_l1_n240(x)
+ else
+ fun_l1_n743(x)
+ end
+end
+
+def fun_l0_n361(x)
+ if (x < 1)
+ fun_l1_n301(x)
+ else
+ fun_l1_n943(x)
+ end
+end
+
+def fun_l0_n362(x)
+ if (x < 1)
+ fun_l1_n108(x)
+ else
+ fun_l1_n975(x)
+ end
+end
+
+def fun_l0_n363(x)
+ if (x < 1)
+ fun_l1_n554(x)
+ else
+ fun_l1_n135(x)
+ end
+end
+
+def fun_l0_n364(x)
+ if (x < 1)
+ fun_l1_n360(x)
+ else
+ fun_l1_n821(x)
+ end
+end
+
+def fun_l0_n365(x)
+ if (x < 1)
+ fun_l1_n992(x)
+ else
+ fun_l1_n158(x)
+ end
+end
+
+def fun_l0_n366(x)
+ if (x < 1)
+ fun_l1_n439(x)
+ else
+ fun_l1_n506(x)
+ end
+end
+
+def fun_l0_n367(x)
+ if (x < 1)
+ fun_l1_n229(x)
+ else
+ fun_l1_n714(x)
+ end
+end
+
+def fun_l0_n368(x)
+ if (x < 1)
+ fun_l1_n459(x)
+ else
+ fun_l1_n874(x)
+ end
+end
+
+def fun_l0_n369(x)
+ if (x < 1)
+ fun_l1_n799(x)
+ else
+ fun_l1_n406(x)
+ end
+end
+
+def fun_l0_n370(x)
+ if (x < 1)
+ fun_l1_n791(x)
+ else
+ fun_l1_n669(x)
+ end
+end
+
+def fun_l0_n371(x)
+ if (x < 1)
+ fun_l1_n99(x)
+ else
+ fun_l1_n344(x)
+ end
+end
+
+def fun_l0_n372(x)
+ if (x < 1)
+ fun_l1_n585(x)
+ else
+ fun_l1_n388(x)
+ end
+end
+
+def fun_l0_n373(x)
+ if (x < 1)
+ fun_l1_n35(x)
+ else
+ fun_l1_n369(x)
+ end
+end
+
+def fun_l0_n374(x)
+ if (x < 1)
+ fun_l1_n41(x)
+ else
+ fun_l1_n378(x)
+ end
+end
+
+def fun_l0_n375(x)
+ if (x < 1)
+ fun_l1_n372(x)
+ else
+ fun_l1_n406(x)
+ end
+end
+
+def fun_l0_n376(x)
+ if (x < 1)
+ fun_l1_n247(x)
+ else
+ fun_l1_n563(x)
+ end
+end
+
+def fun_l0_n377(x)
+ if (x < 1)
+ fun_l1_n998(x)
+ else
+ fun_l1_n302(x)
+ end
+end
+
+def fun_l0_n378(x)
+ if (x < 1)
+ fun_l1_n955(x)
+ else
+ fun_l1_n333(x)
+ end
+end
+
+def fun_l0_n379(x)
+ if (x < 1)
+ fun_l1_n554(x)
+ else
+ fun_l1_n863(x)
+ end
+end
+
+def fun_l0_n380(x)
+ if (x < 1)
+ fun_l1_n248(x)
+ else
+ fun_l1_n297(x)
+ end
+end
+
+def fun_l0_n381(x)
+ if (x < 1)
+ fun_l1_n85(x)
+ else
+ fun_l1_n726(x)
+ end
+end
+
+def fun_l0_n382(x)
+ if (x < 1)
+ fun_l1_n75(x)
+ else
+ fun_l1_n990(x)
+ end
+end
+
+def fun_l0_n383(x)
+ if (x < 1)
+ fun_l1_n353(x)
+ else
+ fun_l1_n218(x)
+ end
+end
+
+def fun_l0_n384(x)
+ if (x < 1)
+ fun_l1_n103(x)
+ else
+ fun_l1_n192(x)
+ end
+end
+
+def fun_l0_n385(x)
+ if (x < 1)
+ fun_l1_n659(x)
+ else
+ fun_l1_n996(x)
+ end
+end
+
+def fun_l0_n386(x)
+ if (x < 1)
+ fun_l1_n528(x)
+ else
+ fun_l1_n654(x)
+ end
+end
+
+def fun_l0_n387(x)
+ if (x < 1)
+ fun_l1_n857(x)
+ else
+ fun_l1_n638(x)
+ end
+end
+
+def fun_l0_n388(x)
+ if (x < 1)
+ fun_l1_n311(x)
+ else
+ fun_l1_n877(x)
+ end
+end
+
+def fun_l0_n389(x)
+ if (x < 1)
+ fun_l1_n406(x)
+ else
+ fun_l1_n191(x)
+ end
+end
+
+def fun_l0_n390(x)
+ if (x < 1)
+ fun_l1_n464(x)
+ else
+ fun_l1_n684(x)
+ end
+end
+
+def fun_l0_n391(x)
+ if (x < 1)
+ fun_l1_n878(x)
+ else
+ fun_l1_n635(x)
+ end
+end
+
+def fun_l0_n392(x)
+ if (x < 1)
+ fun_l1_n863(x)
+ else
+ fun_l1_n486(x)
+ end
+end
+
+def fun_l0_n393(x)
+ if (x < 1)
+ fun_l1_n587(x)
+ else
+ fun_l1_n387(x)
+ end
+end
+
+def fun_l0_n394(x)
+ if (x < 1)
+ fun_l1_n553(x)
+ else
+ fun_l1_n789(x)
+ end
+end
+
+def fun_l0_n395(x)
+ if (x < 1)
+ fun_l1_n420(x)
+ else
+ fun_l1_n148(x)
+ end
+end
+
+def fun_l0_n396(x)
+ if (x < 1)
+ fun_l1_n802(x)
+ else
+ fun_l1_n845(x)
+ end
+end
+
+def fun_l0_n397(x)
+ if (x < 1)
+ fun_l1_n749(x)
+ else
+ fun_l1_n742(x)
+ end
+end
+
+def fun_l0_n398(x)
+ if (x < 1)
+ fun_l1_n929(x)
+ else
+ fun_l1_n458(x)
+ end
+end
+
+def fun_l0_n399(x)
+ if (x < 1)
+ fun_l1_n908(x)
+ else
+ fun_l1_n188(x)
+ end
+end
+
+def fun_l0_n400(x)
+ if (x < 1)
+ fun_l1_n932(x)
+ else
+ fun_l1_n854(x)
+ end
+end
+
+def fun_l0_n401(x)
+ if (x < 1)
+ fun_l1_n29(x)
+ else
+ fun_l1_n666(x)
+ end
+end
+
+def fun_l0_n402(x)
+ if (x < 1)
+ fun_l1_n877(x)
+ else
+ fun_l1_n518(x)
+ end
+end
+
+def fun_l0_n403(x)
+ if (x < 1)
+ fun_l1_n639(x)
+ else
+ fun_l1_n618(x)
+ end
+end
+
+def fun_l0_n404(x)
+ if (x < 1)
+ fun_l1_n177(x)
+ else
+ fun_l1_n487(x)
+ end
+end
+
+def fun_l0_n405(x)
+ if (x < 1)
+ fun_l1_n536(x)
+ else
+ fun_l1_n860(x)
+ end
+end
+
+def fun_l0_n406(x)
+ if (x < 1)
+ fun_l1_n626(x)
+ else
+ fun_l1_n894(x)
+ end
+end
+
+def fun_l0_n407(x)
+ if (x < 1)
+ fun_l1_n533(x)
+ else
+ fun_l1_n367(x)
+ end
+end
+
+def fun_l0_n408(x)
+ if (x < 1)
+ fun_l1_n146(x)
+ else
+ fun_l1_n546(x)
+ end
+end
+
+def fun_l0_n409(x)
+ if (x < 1)
+ fun_l1_n872(x)
+ else
+ fun_l1_n387(x)
+ end
+end
+
+def fun_l0_n410(x)
+ if (x < 1)
+ fun_l1_n726(x)
+ else
+ fun_l1_n973(x)
+ end
+end
+
+def fun_l0_n411(x)
+ if (x < 1)
+ fun_l1_n168(x)
+ else
+ fun_l1_n783(x)
+ end
+end
+
+def fun_l0_n412(x)
+ if (x < 1)
+ fun_l1_n895(x)
+ else
+ fun_l1_n901(x)
+ end
+end
+
+def fun_l0_n413(x)
+ if (x < 1)
+ fun_l1_n235(x)
+ else
+ fun_l1_n593(x)
+ end
+end
+
+def fun_l0_n414(x)
+ if (x < 1)
+ fun_l1_n328(x)
+ else
+ fun_l1_n693(x)
+ end
+end
+
+def fun_l0_n415(x)
+ if (x < 1)
+ fun_l1_n882(x)
+ else
+ fun_l1_n290(x)
+ end
+end
+
+def fun_l0_n416(x)
+ if (x < 1)
+ fun_l1_n433(x)
+ else
+ fun_l1_n220(x)
+ end
+end
+
+def fun_l0_n417(x)
+ if (x < 1)
+ fun_l1_n966(x)
+ else
+ fun_l1_n74(x)
+ end
+end
+
+def fun_l0_n418(x)
+ if (x < 1)
+ fun_l1_n750(x)
+ else
+ fun_l1_n547(x)
+ end
+end
+
+def fun_l0_n419(x)
+ if (x < 1)
+ fun_l1_n94(x)
+ else
+ fun_l1_n794(x)
+ end
+end
+
+def fun_l0_n420(x)
+ if (x < 1)
+ fun_l1_n68(x)
+ else
+ fun_l1_n970(x)
+ end
+end
+
+def fun_l0_n421(x)
+ if (x < 1)
+ fun_l1_n663(x)
+ else
+ fun_l1_n388(x)
+ end
+end
+
+def fun_l0_n422(x)
+ if (x < 1)
+ fun_l1_n686(x)
+ else
+ fun_l1_n67(x)
+ end
+end
+
+def fun_l0_n423(x)
+ if (x < 1)
+ fun_l1_n210(x)
+ else
+ fun_l1_n64(x)
+ end
+end
+
+def fun_l0_n424(x)
+ if (x < 1)
+ fun_l1_n375(x)
+ else
+ fun_l1_n205(x)
+ end
+end
+
+def fun_l0_n425(x)
+ if (x < 1)
+ fun_l1_n832(x)
+ else
+ fun_l1_n325(x)
+ end
+end
+
+def fun_l0_n426(x)
+ if (x < 1)
+ fun_l1_n819(x)
+ else
+ fun_l1_n601(x)
+ end
+end
+
+def fun_l0_n427(x)
+ if (x < 1)
+ fun_l1_n588(x)
+ else
+ fun_l1_n875(x)
+ end
+end
+
+def fun_l0_n428(x)
+ if (x < 1)
+ fun_l1_n682(x)
+ else
+ fun_l1_n523(x)
+ end
+end
+
+def fun_l0_n429(x)
+ if (x < 1)
+ fun_l1_n972(x)
+ else
+ fun_l1_n891(x)
+ end
+end
+
+def fun_l0_n430(x)
+ if (x < 1)
+ fun_l1_n90(x)
+ else
+ fun_l1_n655(x)
+ end
+end
+
+def fun_l0_n431(x)
+ if (x < 1)
+ fun_l1_n393(x)
+ else
+ fun_l1_n454(x)
+ end
+end
+
+def fun_l0_n432(x)
+ if (x < 1)
+ fun_l1_n435(x)
+ else
+ fun_l1_n860(x)
+ end
+end
+
+def fun_l0_n433(x)
+ if (x < 1)
+ fun_l1_n516(x)
+ else
+ fun_l1_n246(x)
+ end
+end
+
+def fun_l0_n434(x)
+ if (x < 1)
+ fun_l1_n216(x)
+ else
+ fun_l1_n78(x)
+ end
+end
+
+def fun_l0_n435(x)
+ if (x < 1)
+ fun_l1_n357(x)
+ else
+ fun_l1_n61(x)
+ end
+end
+
+def fun_l0_n436(x)
+ if (x < 1)
+ fun_l1_n289(x)
+ else
+ fun_l1_n507(x)
+ end
+end
+
+def fun_l0_n437(x)
+ if (x < 1)
+ fun_l1_n182(x)
+ else
+ fun_l1_n289(x)
+ end
+end
+
+def fun_l0_n438(x)
+ if (x < 1)
+ fun_l1_n69(x)
+ else
+ fun_l1_n549(x)
+ end
+end
+
+def fun_l0_n439(x)
+ if (x < 1)
+ fun_l1_n275(x)
+ else
+ fun_l1_n723(x)
+ end
+end
+
+def fun_l0_n440(x)
+ if (x < 1)
+ fun_l1_n469(x)
+ else
+ fun_l1_n243(x)
+ end
+end
+
+def fun_l0_n441(x)
+ if (x < 1)
+ fun_l1_n595(x)
+ else
+ fun_l1_n624(x)
+ end
+end
+
+def fun_l0_n442(x)
+ if (x < 1)
+ fun_l1_n655(x)
+ else
+ fun_l1_n896(x)
+ end
+end
+
+def fun_l0_n443(x)
+ if (x < 1)
+ fun_l1_n926(x)
+ else
+ fun_l1_n503(x)
+ end
+end
+
+def fun_l0_n444(x)
+ if (x < 1)
+ fun_l1_n875(x)
+ else
+ fun_l1_n110(x)
+ end
+end
+
+def fun_l0_n445(x)
+ if (x < 1)
+ fun_l1_n832(x)
+ else
+ fun_l1_n154(x)
+ end
+end
+
+def fun_l0_n446(x)
+ if (x < 1)
+ fun_l1_n538(x)
+ else
+ fun_l1_n75(x)
+ end
+end
+
+def fun_l0_n447(x)
+ if (x < 1)
+ fun_l1_n183(x)
+ else
+ fun_l1_n718(x)
+ end
+end
+
+def fun_l0_n448(x)
+ if (x < 1)
+ fun_l1_n680(x)
+ else
+ fun_l1_n93(x)
+ end
+end
+
+def fun_l0_n449(x)
+ if (x < 1)
+ fun_l1_n147(x)
+ else
+ fun_l1_n924(x)
+ end
+end
+
+def fun_l0_n450(x)
+ if (x < 1)
+ fun_l1_n702(x)
+ else
+ fun_l1_n830(x)
+ end
+end
+
+def fun_l0_n451(x)
+ if (x < 1)
+ fun_l1_n750(x)
+ else
+ fun_l1_n447(x)
+ end
+end
+
+def fun_l0_n452(x)
+ if (x < 1)
+ fun_l1_n520(x)
+ else
+ fun_l1_n69(x)
+ end
+end
+
+def fun_l0_n453(x)
+ if (x < 1)
+ fun_l1_n132(x)
+ else
+ fun_l1_n877(x)
+ end
+end
+
+def fun_l0_n454(x)
+ if (x < 1)
+ fun_l1_n247(x)
+ else
+ fun_l1_n69(x)
+ end
+end
+
+def fun_l0_n455(x)
+ if (x < 1)
+ fun_l1_n180(x)
+ else
+ fun_l1_n645(x)
+ end
+end
+
+def fun_l0_n456(x)
+ if (x < 1)
+ fun_l1_n658(x)
+ else
+ fun_l1_n487(x)
+ end
+end
+
+def fun_l0_n457(x)
+ if (x < 1)
+ fun_l1_n276(x)
+ else
+ fun_l1_n528(x)
+ end
+end
+
+def fun_l0_n458(x)
+ if (x < 1)
+ fun_l1_n30(x)
+ else
+ fun_l1_n456(x)
+ end
+end
+
+def fun_l0_n459(x)
+ if (x < 1)
+ fun_l1_n986(x)
+ else
+ fun_l1_n552(x)
+ end
+end
+
+def fun_l0_n460(x)
+ if (x < 1)
+ fun_l1_n874(x)
+ else
+ fun_l1_n396(x)
+ end
+end
+
+def fun_l0_n461(x)
+ if (x < 1)
+ fun_l1_n524(x)
+ else
+ fun_l1_n335(x)
+ end
+end
+
+def fun_l0_n462(x)
+ if (x < 1)
+ fun_l1_n471(x)
+ else
+ fun_l1_n578(x)
+ end
+end
+
+def fun_l0_n463(x)
+ if (x < 1)
+ fun_l1_n173(x)
+ else
+ fun_l1_n456(x)
+ end
+end
+
+def fun_l0_n464(x)
+ if (x < 1)
+ fun_l1_n872(x)
+ else
+ fun_l1_n745(x)
+ end
+end
+
+def fun_l0_n465(x)
+ if (x < 1)
+ fun_l1_n387(x)
+ else
+ fun_l1_n776(x)
+ end
+end
+
+def fun_l0_n466(x)
+ if (x < 1)
+ fun_l1_n119(x)
+ else
+ fun_l1_n428(x)
+ end
+end
+
+def fun_l0_n467(x)
+ if (x < 1)
+ fun_l1_n416(x)
+ else
+ fun_l1_n738(x)
+ end
+end
+
+def fun_l0_n468(x)
+ if (x < 1)
+ fun_l1_n762(x)
+ else
+ fun_l1_n694(x)
+ end
+end
+
+def fun_l0_n469(x)
+ if (x < 1)
+ fun_l1_n27(x)
+ else
+ fun_l1_n562(x)
+ end
+end
+
+def fun_l0_n470(x)
+ if (x < 1)
+ fun_l1_n12(x)
+ else
+ fun_l1_n812(x)
+ end
+end
+
+def fun_l0_n471(x)
+ if (x < 1)
+ fun_l1_n865(x)
+ else
+ fun_l1_n94(x)
+ end
+end
+
+def fun_l0_n472(x)
+ if (x < 1)
+ fun_l1_n346(x)
+ else
+ fun_l1_n39(x)
+ end
+end
+
+def fun_l0_n473(x)
+ if (x < 1)
+ fun_l1_n309(x)
+ else
+ fun_l1_n158(x)
+ end
+end
+
+def fun_l0_n474(x)
+ if (x < 1)
+ fun_l1_n828(x)
+ else
+ fun_l1_n229(x)
+ end
+end
+
+def fun_l0_n475(x)
+ if (x < 1)
+ fun_l1_n554(x)
+ else
+ fun_l1_n121(x)
+ end
+end
+
+def fun_l0_n476(x)
+ if (x < 1)
+ fun_l1_n818(x)
+ else
+ fun_l1_n390(x)
+ end
+end
+
+def fun_l0_n477(x)
+ if (x < 1)
+ fun_l1_n88(x)
+ else
+ fun_l1_n73(x)
+ end
+end
+
+def fun_l0_n478(x)
+ if (x < 1)
+ fun_l1_n709(x)
+ else
+ fun_l1_n680(x)
+ end
+end
+
+def fun_l0_n479(x)
+ if (x < 1)
+ fun_l1_n271(x)
+ else
+ fun_l1_n439(x)
+ end
+end
+
+def fun_l0_n480(x)
+ if (x < 1)
+ fun_l1_n493(x)
+ else
+ fun_l1_n562(x)
+ end
+end
+
+def fun_l0_n481(x)
+ if (x < 1)
+ fun_l1_n642(x)
+ else
+ fun_l1_n221(x)
+ end
+end
+
+def fun_l0_n482(x)
+ if (x < 1)
+ fun_l1_n838(x)
+ else
+ fun_l1_n345(x)
+ end
+end
+
+def fun_l0_n483(x)
+ if (x < 1)
+ fun_l1_n411(x)
+ else
+ fun_l1_n266(x)
+ end
+end
+
+def fun_l0_n484(x)
+ if (x < 1)
+ fun_l1_n916(x)
+ else
+ fun_l1_n791(x)
+ end
+end
+
+def fun_l0_n485(x)
+ if (x < 1)
+ fun_l1_n392(x)
+ else
+ fun_l1_n68(x)
+ end
+end
+
+def fun_l0_n486(x)
+ if (x < 1)
+ fun_l1_n834(x)
+ else
+ fun_l1_n783(x)
+ end
+end
+
+def fun_l0_n487(x)
+ if (x < 1)
+ fun_l1_n398(x)
+ else
+ fun_l1_n627(x)
+ end
+end
+
+def fun_l0_n488(x)
+ if (x < 1)
+ fun_l1_n904(x)
+ else
+ fun_l1_n167(x)
+ end
+end
+
+def fun_l0_n489(x)
+ if (x < 1)
+ fun_l1_n54(x)
+ else
+ fun_l1_n28(x)
+ end
+end
+
+def fun_l0_n490(x)
+ if (x < 1)
+ fun_l1_n24(x)
+ else
+ fun_l1_n9(x)
+ end
+end
+
+def fun_l0_n491(x)
+ if (x < 1)
+ fun_l1_n497(x)
+ else
+ fun_l1_n297(x)
+ end
+end
+
+def fun_l0_n492(x)
+ if (x < 1)
+ fun_l1_n951(x)
+ else
+ fun_l1_n534(x)
+ end
+end
+
+def fun_l0_n493(x)
+ if (x < 1)
+ fun_l1_n213(x)
+ else
+ fun_l1_n808(x)
+ end
+end
+
+def fun_l0_n494(x)
+ if (x < 1)
+ fun_l1_n904(x)
+ else
+ fun_l1_n94(x)
+ end
+end
+
+def fun_l0_n495(x)
+ if (x < 1)
+ fun_l1_n799(x)
+ else
+ fun_l1_n817(x)
+ end
+end
+
+def fun_l0_n496(x)
+ if (x < 1)
+ fun_l1_n45(x)
+ else
+ fun_l1_n860(x)
+ end
+end
+
+def fun_l0_n497(x)
+ if (x < 1)
+ fun_l1_n482(x)
+ else
+ fun_l1_n783(x)
+ end
+end
+
+def fun_l0_n498(x)
+ if (x < 1)
+ fun_l1_n78(x)
+ else
+ fun_l1_n785(x)
+ end
+end
+
+def fun_l0_n499(x)
+ if (x < 1)
+ fun_l1_n174(x)
+ else
+ fun_l1_n87(x)
+ end
+end
+
+def fun_l0_n500(x)
+ if (x < 1)
+ fun_l1_n608(x)
+ else
+ fun_l1_n7(x)
+ end
+end
+
+def fun_l0_n501(x)
+ if (x < 1)
+ fun_l1_n157(x)
+ else
+ fun_l1_n718(x)
+ end
+end
+
+def fun_l0_n502(x)
+ if (x < 1)
+ fun_l1_n823(x)
+ else
+ fun_l1_n549(x)
+ end
+end
+
+def fun_l0_n503(x)
+ if (x < 1)
+ fun_l1_n13(x)
+ else
+ fun_l1_n502(x)
+ end
+end
+
+def fun_l0_n504(x)
+ if (x < 1)
+ fun_l1_n119(x)
+ else
+ fun_l1_n191(x)
+ end
+end
+
+def fun_l0_n505(x)
+ if (x < 1)
+ fun_l1_n503(x)
+ else
+ fun_l1_n974(x)
+ end
+end
+
+def fun_l0_n506(x)
+ if (x < 1)
+ fun_l1_n893(x)
+ else
+ fun_l1_n582(x)
+ end
+end
+
+def fun_l0_n507(x)
+ if (x < 1)
+ fun_l1_n403(x)
+ else
+ fun_l1_n228(x)
+ end
+end
+
+def fun_l0_n508(x)
+ if (x < 1)
+ fun_l1_n640(x)
+ else
+ fun_l1_n362(x)
+ end
+end
+
+def fun_l0_n509(x)
+ if (x < 1)
+ fun_l1_n629(x)
+ else
+ fun_l1_n824(x)
+ end
+end
+
+def fun_l0_n510(x)
+ if (x < 1)
+ fun_l1_n84(x)
+ else
+ fun_l1_n330(x)
+ end
+end
+
+def fun_l0_n511(x)
+ if (x < 1)
+ fun_l1_n91(x)
+ else
+ fun_l1_n523(x)
+ end
+end
+
+def fun_l0_n512(x)
+ if (x < 1)
+ fun_l1_n696(x)
+ else
+ fun_l1_n126(x)
+ end
+end
+
+def fun_l0_n513(x)
+ if (x < 1)
+ fun_l1_n905(x)
+ else
+ fun_l1_n496(x)
+ end
+end
+
+def fun_l0_n514(x)
+ if (x < 1)
+ fun_l1_n766(x)
+ else
+ fun_l1_n523(x)
+ end
+end
+
+def fun_l0_n515(x)
+ if (x < 1)
+ fun_l1_n798(x)
+ else
+ fun_l1_n698(x)
+ end
+end
+
+def fun_l0_n516(x)
+ if (x < 1)
+ fun_l1_n124(x)
+ else
+ fun_l1_n356(x)
+ end
+end
+
+def fun_l0_n517(x)
+ if (x < 1)
+ fun_l1_n289(x)
+ else
+ fun_l1_n782(x)
+ end
+end
+
+def fun_l0_n518(x)
+ if (x < 1)
+ fun_l1_n483(x)
+ else
+ fun_l1_n586(x)
+ end
+end
+
+def fun_l0_n519(x)
+ if (x < 1)
+ fun_l1_n878(x)
+ else
+ fun_l1_n37(x)
+ end
+end
+
+def fun_l0_n520(x)
+ if (x < 1)
+ fun_l1_n48(x)
+ else
+ fun_l1_n216(x)
+ end
+end
+
+def fun_l0_n521(x)
+ if (x < 1)
+ fun_l1_n805(x)
+ else
+ fun_l1_n846(x)
+ end
+end
+
+def fun_l0_n522(x)
+ if (x < 1)
+ fun_l1_n422(x)
+ else
+ fun_l1_n190(x)
+ end
+end
+
+def fun_l0_n523(x)
+ if (x < 1)
+ fun_l1_n168(x)
+ else
+ fun_l1_n272(x)
+ end
+end
+
+def fun_l0_n524(x)
+ if (x < 1)
+ fun_l1_n766(x)
+ else
+ fun_l1_n125(x)
+ end
+end
+
+def fun_l0_n525(x)
+ if (x < 1)
+ fun_l1_n56(x)
+ else
+ fun_l1_n224(x)
+ end
+end
+
+def fun_l0_n526(x)
+ if (x < 1)
+ fun_l1_n540(x)
+ else
+ fun_l1_n303(x)
+ end
+end
+
+def fun_l0_n527(x)
+ if (x < 1)
+ fun_l1_n846(x)
+ else
+ fun_l1_n955(x)
+ end
+end
+
+def fun_l0_n528(x)
+ if (x < 1)
+ fun_l1_n571(x)
+ else
+ fun_l1_n640(x)
+ end
+end
+
+def fun_l0_n529(x)
+ if (x < 1)
+ fun_l1_n650(x)
+ else
+ fun_l1_n107(x)
+ end
+end
+
+def fun_l0_n530(x)
+ if (x < 1)
+ fun_l1_n240(x)
+ else
+ fun_l1_n139(x)
+ end
+end
+
+def fun_l0_n531(x)
+ if (x < 1)
+ fun_l1_n975(x)
+ else
+ fun_l1_n970(x)
+ end
+end
+
+def fun_l0_n532(x)
+ if (x < 1)
+ fun_l1_n753(x)
+ else
+ fun_l1_n147(x)
+ end
+end
+
+def fun_l0_n533(x)
+ if (x < 1)
+ fun_l1_n269(x)
+ else
+ fun_l1_n292(x)
+ end
+end
+
+def fun_l0_n534(x)
+ if (x < 1)
+ fun_l1_n791(x)
+ else
+ fun_l1_n69(x)
+ end
+end
+
+def fun_l0_n535(x)
+ if (x < 1)
+ fun_l1_n469(x)
+ else
+ fun_l1_n58(x)
+ end
+end
+
+def fun_l0_n536(x)
+ if (x < 1)
+ fun_l1_n526(x)
+ else
+ fun_l1_n265(x)
+ end
+end
+
+def fun_l0_n537(x)
+ if (x < 1)
+ fun_l1_n681(x)
+ else
+ fun_l1_n646(x)
+ end
+end
+
+def fun_l0_n538(x)
+ if (x < 1)
+ fun_l1_n377(x)
+ else
+ fun_l1_n969(x)
+ end
+end
+
+def fun_l0_n539(x)
+ if (x < 1)
+ fun_l1_n935(x)
+ else
+ fun_l1_n556(x)
+ end
+end
+
+def fun_l0_n540(x)
+ if (x < 1)
+ fun_l1_n498(x)
+ else
+ fun_l1_n439(x)
+ end
+end
+
+def fun_l0_n541(x)
+ if (x < 1)
+ fun_l1_n451(x)
+ else
+ fun_l1_n35(x)
+ end
+end
+
+def fun_l0_n542(x)
+ if (x < 1)
+ fun_l1_n32(x)
+ else
+ fun_l1_n795(x)
+ end
+end
+
+def fun_l0_n543(x)
+ if (x < 1)
+ fun_l1_n732(x)
+ else
+ fun_l1_n530(x)
+ end
+end
+
+def fun_l0_n544(x)
+ if (x < 1)
+ fun_l1_n176(x)
+ else
+ fun_l1_n735(x)
+ end
+end
+
+def fun_l0_n545(x)
+ if (x < 1)
+ fun_l1_n34(x)
+ else
+ fun_l1_n989(x)
+ end
+end
+
+def fun_l0_n546(x)
+ if (x < 1)
+ fun_l1_n534(x)
+ else
+ fun_l1_n705(x)
+ end
+end
+
+def fun_l0_n547(x)
+ if (x < 1)
+ fun_l1_n997(x)
+ else
+ fun_l1_n883(x)
+ end
+end
+
+def fun_l0_n548(x)
+ if (x < 1)
+ fun_l1_n379(x)
+ else
+ fun_l1_n33(x)
+ end
+end
+
+def fun_l0_n549(x)
+ if (x < 1)
+ fun_l1_n454(x)
+ else
+ fun_l1_n516(x)
+ end
+end
+
+def fun_l0_n550(x)
+ if (x < 1)
+ fun_l1_n678(x)
+ else
+ fun_l1_n652(x)
+ end
+end
+
+def fun_l0_n551(x)
+ if (x < 1)
+ fun_l1_n13(x)
+ else
+ fun_l1_n864(x)
+ end
+end
+
+def fun_l0_n552(x)
+ if (x < 1)
+ fun_l1_n178(x)
+ else
+ fun_l1_n996(x)
+ end
+end
+
+def fun_l0_n553(x)
+ if (x < 1)
+ fun_l1_n865(x)
+ else
+ fun_l1_n703(x)
+ end
+end
+
+def fun_l0_n554(x)
+ if (x < 1)
+ fun_l1_n306(x)
+ else
+ fun_l1_n24(x)
+ end
+end
+
+def fun_l0_n555(x)
+ if (x < 1)
+ fun_l1_n110(x)
+ else
+ fun_l1_n123(x)
+ end
+end
+
+def fun_l0_n556(x)
+ if (x < 1)
+ fun_l1_n367(x)
+ else
+ fun_l1_n117(x)
+ end
+end
+
+def fun_l0_n557(x)
+ if (x < 1)
+ fun_l1_n967(x)
+ else
+ fun_l1_n662(x)
+ end
+end
+
+def fun_l0_n558(x)
+ if (x < 1)
+ fun_l1_n68(x)
+ else
+ fun_l1_n47(x)
+ end
+end
+
+def fun_l0_n559(x)
+ if (x < 1)
+ fun_l1_n154(x)
+ else
+ fun_l1_n344(x)
+ end
+end
+
+def fun_l0_n560(x)
+ if (x < 1)
+ fun_l1_n835(x)
+ else
+ fun_l1_n577(x)
+ end
+end
+
+def fun_l0_n561(x)
+ if (x < 1)
+ fun_l1_n393(x)
+ else
+ fun_l1_n419(x)
+ end
+end
+
+def fun_l0_n562(x)
+ if (x < 1)
+ fun_l1_n632(x)
+ else
+ fun_l1_n630(x)
+ end
+end
+
+def fun_l0_n563(x)
+ if (x < 1)
+ fun_l1_n9(x)
+ else
+ fun_l1_n109(x)
+ end
+end
+
+def fun_l0_n564(x)
+ if (x < 1)
+ fun_l1_n65(x)
+ else
+ fun_l1_n123(x)
+ end
+end
+
+def fun_l0_n565(x)
+ if (x < 1)
+ fun_l1_n156(x)
+ else
+ fun_l1_n921(x)
+ end
+end
+
+def fun_l0_n566(x)
+ if (x < 1)
+ fun_l1_n88(x)
+ else
+ fun_l1_n743(x)
+ end
+end
+
+def fun_l0_n567(x)
+ if (x < 1)
+ fun_l1_n92(x)
+ else
+ fun_l1_n27(x)
+ end
+end
+
+def fun_l0_n568(x)
+ if (x < 1)
+ fun_l1_n462(x)
+ else
+ fun_l1_n988(x)
+ end
+end
+
+def fun_l0_n569(x)
+ if (x < 1)
+ fun_l1_n241(x)
+ else
+ fun_l1_n199(x)
+ end
+end
+
+def fun_l0_n570(x)
+ if (x < 1)
+ fun_l1_n429(x)
+ else
+ fun_l1_n530(x)
+ end
+end
+
+def fun_l0_n571(x)
+ if (x < 1)
+ fun_l1_n412(x)
+ else
+ fun_l1_n530(x)
+ end
+end
+
+def fun_l0_n572(x)
+ if (x < 1)
+ fun_l1_n100(x)
+ else
+ fun_l1_n270(x)
+ end
+end
+
+def fun_l0_n573(x)
+ if (x < 1)
+ fun_l1_n326(x)
+ else
+ fun_l1_n191(x)
+ end
+end
+
+def fun_l0_n574(x)
+ if (x < 1)
+ fun_l1_n151(x)
+ else
+ fun_l1_n354(x)
+ end
+end
+
+def fun_l0_n575(x)
+ if (x < 1)
+ fun_l1_n322(x)
+ else
+ fun_l1_n534(x)
+ end
+end
+
+def fun_l0_n576(x)
+ if (x < 1)
+ fun_l1_n995(x)
+ else
+ fun_l1_n658(x)
+ end
+end
+
+def fun_l0_n577(x)
+ if (x < 1)
+ fun_l1_n193(x)
+ else
+ fun_l1_n444(x)
+ end
+end
+
+def fun_l0_n578(x)
+ if (x < 1)
+ fun_l1_n527(x)
+ else
+ fun_l1_n517(x)
+ end
+end
+
+def fun_l0_n579(x)
+ if (x < 1)
+ fun_l1_n885(x)
+ else
+ fun_l1_n218(x)
+ end
+end
+
+def fun_l0_n580(x)
+ if (x < 1)
+ fun_l1_n789(x)
+ else
+ fun_l1_n711(x)
+ end
+end
+
+def fun_l0_n581(x)
+ if (x < 1)
+ fun_l1_n848(x)
+ else
+ fun_l1_n321(x)
+ end
+end
+
+def fun_l0_n582(x)
+ if (x < 1)
+ fun_l1_n389(x)
+ else
+ fun_l1_n360(x)
+ end
+end
+
+def fun_l0_n583(x)
+ if (x < 1)
+ fun_l1_n319(x)
+ else
+ fun_l1_n972(x)
+ end
+end
+
+def fun_l0_n584(x)
+ if (x < 1)
+ fun_l1_n421(x)
+ else
+ fun_l1_n659(x)
+ end
+end
+
+def fun_l0_n585(x)
+ if (x < 1)
+ fun_l1_n462(x)
+ else
+ fun_l1_n302(x)
+ end
+end
+
+def fun_l0_n586(x)
+ if (x < 1)
+ fun_l1_n122(x)
+ else
+ fun_l1_n50(x)
+ end
+end
+
+def fun_l0_n587(x)
+ if (x < 1)
+ fun_l1_n795(x)
+ else
+ fun_l1_n622(x)
+ end
+end
+
+def fun_l0_n588(x)
+ if (x < 1)
+ fun_l1_n719(x)
+ else
+ fun_l1_n390(x)
+ end
+end
+
+def fun_l0_n589(x)
+ if (x < 1)
+ fun_l1_n916(x)
+ else
+ fun_l1_n925(x)
+ end
+end
+
+def fun_l0_n590(x)
+ if (x < 1)
+ fun_l1_n541(x)
+ else
+ fun_l1_n139(x)
+ end
+end
+
+def fun_l0_n591(x)
+ if (x < 1)
+ fun_l1_n610(x)
+ else
+ fun_l1_n509(x)
+ end
+end
+
+def fun_l0_n592(x)
+ if (x < 1)
+ fun_l1_n217(x)
+ else
+ fun_l1_n452(x)
+ end
+end
+
+def fun_l0_n593(x)
+ if (x < 1)
+ fun_l1_n456(x)
+ else
+ fun_l1_n888(x)
+ end
+end
+
+def fun_l0_n594(x)
+ if (x < 1)
+ fun_l1_n987(x)
+ else
+ fun_l1_n462(x)
+ end
+end
+
+def fun_l0_n595(x)
+ if (x < 1)
+ fun_l1_n571(x)
+ else
+ fun_l1_n429(x)
+ end
+end
+
+def fun_l0_n596(x)
+ if (x < 1)
+ fun_l1_n751(x)
+ else
+ fun_l1_n773(x)
+ end
+end
+
+def fun_l0_n597(x)
+ if (x < 1)
+ fun_l1_n181(x)
+ else
+ fun_l1_n340(x)
+ end
+end
+
+def fun_l0_n598(x)
+ if (x < 1)
+ fun_l1_n6(x)
+ else
+ fun_l1_n39(x)
+ end
+end
+
+def fun_l0_n599(x)
+ if (x < 1)
+ fun_l1_n814(x)
+ else
+ fun_l1_n320(x)
+ end
+end
+
+def fun_l0_n600(x)
+ if (x < 1)
+ fun_l1_n931(x)
+ else
+ fun_l1_n535(x)
+ end
+end
+
+def fun_l0_n601(x)
+ if (x < 1)
+ fun_l1_n99(x)
+ else
+ fun_l1_n154(x)
+ end
+end
+
+def fun_l0_n602(x)
+ if (x < 1)
+ fun_l1_n981(x)
+ else
+ fun_l1_n817(x)
+ end
+end
+
+def fun_l0_n603(x)
+ if (x < 1)
+ fun_l1_n975(x)
+ else
+ fun_l1_n364(x)
+ end
+end
+
+def fun_l0_n604(x)
+ if (x < 1)
+ fun_l1_n112(x)
+ else
+ fun_l1_n226(x)
+ end
+end
+
+def fun_l0_n605(x)
+ if (x < 1)
+ fun_l1_n995(x)
+ else
+ fun_l1_n95(x)
+ end
+end
+
+def fun_l0_n606(x)
+ if (x < 1)
+ fun_l1_n930(x)
+ else
+ fun_l1_n77(x)
+ end
+end
+
+def fun_l0_n607(x)
+ if (x < 1)
+ fun_l1_n899(x)
+ else
+ fun_l1_n957(x)
+ end
+end
+
+def fun_l0_n608(x)
+ if (x < 1)
+ fun_l1_n844(x)
+ else
+ fun_l1_n119(x)
+ end
+end
+
+def fun_l0_n609(x)
+ if (x < 1)
+ fun_l1_n861(x)
+ else
+ fun_l1_n74(x)
+ end
+end
+
+def fun_l0_n610(x)
+ if (x < 1)
+ fun_l1_n521(x)
+ else
+ fun_l1_n46(x)
+ end
+end
+
+def fun_l0_n611(x)
+ if (x < 1)
+ fun_l1_n258(x)
+ else
+ fun_l1_n208(x)
+ end
+end
+
+def fun_l0_n612(x)
+ if (x < 1)
+ fun_l1_n620(x)
+ else
+ fun_l1_n427(x)
+ end
+end
+
+def fun_l0_n613(x)
+ if (x < 1)
+ fun_l1_n583(x)
+ else
+ fun_l1_n400(x)
+ end
+end
+
+def fun_l0_n614(x)
+ if (x < 1)
+ fun_l1_n933(x)
+ else
+ fun_l1_n810(x)
+ end
+end
+
+def fun_l0_n615(x)
+ if (x < 1)
+ fun_l1_n154(x)
+ else
+ fun_l1_n879(x)
+ end
+end
+
+def fun_l0_n616(x)
+ if (x < 1)
+ fun_l1_n715(x)
+ else
+ fun_l1_n862(x)
+ end
+end
+
+def fun_l0_n617(x)
+ if (x < 1)
+ fun_l1_n178(x)
+ else
+ fun_l1_n285(x)
+ end
+end
+
+def fun_l0_n618(x)
+ if (x < 1)
+ fun_l1_n458(x)
+ else
+ fun_l1_n217(x)
+ end
+end
+
+def fun_l0_n619(x)
+ if (x < 1)
+ fun_l1_n655(x)
+ else
+ fun_l1_n405(x)
+ end
+end
+
+def fun_l0_n620(x)
+ if (x < 1)
+ fun_l1_n470(x)
+ else
+ fun_l1_n306(x)
+ end
+end
+
+def fun_l0_n621(x)
+ if (x < 1)
+ fun_l1_n755(x)
+ else
+ fun_l1_n425(x)
+ end
+end
+
+def fun_l0_n622(x)
+ if (x < 1)
+ fun_l1_n426(x)
+ else
+ fun_l1_n737(x)
+ end
+end
+
+def fun_l0_n623(x)
+ if (x < 1)
+ fun_l1_n79(x)
+ else
+ fun_l1_n55(x)
+ end
+end
+
+def fun_l0_n624(x)
+ if (x < 1)
+ fun_l1_n437(x)
+ else
+ fun_l1_n79(x)
+ end
+end
+
+def fun_l0_n625(x)
+ if (x < 1)
+ fun_l1_n691(x)
+ else
+ fun_l1_n198(x)
+ end
+end
+
+def fun_l0_n626(x)
+ if (x < 1)
+ fun_l1_n703(x)
+ else
+ fun_l1_n585(x)
+ end
+end
+
+def fun_l0_n627(x)
+ if (x < 1)
+ fun_l1_n966(x)
+ else
+ fun_l1_n425(x)
+ end
+end
+
+def fun_l0_n628(x)
+ if (x < 1)
+ fun_l1_n516(x)
+ else
+ fun_l1_n744(x)
+ end
+end
+
+def fun_l0_n629(x)
+ if (x < 1)
+ fun_l1_n40(x)
+ else
+ fun_l1_n942(x)
+ end
+end
+
+def fun_l0_n630(x)
+ if (x < 1)
+ fun_l1_n528(x)
+ else
+ fun_l1_n440(x)
+ end
+end
+
+def fun_l0_n631(x)
+ if (x < 1)
+ fun_l1_n139(x)
+ else
+ fun_l1_n403(x)
+ end
+end
+
+def fun_l0_n632(x)
+ if (x < 1)
+ fun_l1_n421(x)
+ else
+ fun_l1_n510(x)
+ end
+end
+
+def fun_l0_n633(x)
+ if (x < 1)
+ fun_l1_n718(x)
+ else
+ fun_l1_n388(x)
+ end
+end
+
+def fun_l0_n634(x)
+ if (x < 1)
+ fun_l1_n67(x)
+ else
+ fun_l1_n342(x)
+ end
+end
+
+def fun_l0_n635(x)
+ if (x < 1)
+ fun_l1_n943(x)
+ else
+ fun_l1_n941(x)
+ end
+end
+
+def fun_l0_n636(x)
+ if (x < 1)
+ fun_l1_n170(x)
+ else
+ fun_l1_n527(x)
+ end
+end
+
+def fun_l0_n637(x)
+ if (x < 1)
+ fun_l1_n336(x)
+ else
+ fun_l1_n496(x)
+ end
+end
+
+def fun_l0_n638(x)
+ if (x < 1)
+ fun_l1_n730(x)
+ else
+ fun_l1_n10(x)
+ end
+end
+
+def fun_l0_n639(x)
+ if (x < 1)
+ fun_l1_n939(x)
+ else
+ fun_l1_n940(x)
+ end
+end
+
+def fun_l0_n640(x)
+ if (x < 1)
+ fun_l1_n73(x)
+ else
+ fun_l1_n439(x)
+ end
+end
+
+def fun_l0_n641(x)
+ if (x < 1)
+ fun_l1_n460(x)
+ else
+ fun_l1_n828(x)
+ end
+end
+
+def fun_l0_n642(x)
+ if (x < 1)
+ fun_l1_n90(x)
+ else
+ fun_l1_n113(x)
+ end
+end
+
+def fun_l0_n643(x)
+ if (x < 1)
+ fun_l1_n972(x)
+ else
+ fun_l1_n15(x)
+ end
+end
+
+def fun_l0_n644(x)
+ if (x < 1)
+ fun_l1_n417(x)
+ else
+ fun_l1_n228(x)
+ end
+end
+
+def fun_l0_n645(x)
+ if (x < 1)
+ fun_l1_n876(x)
+ else
+ fun_l1_n152(x)
+ end
+end
+
+def fun_l0_n646(x)
+ if (x < 1)
+ fun_l1_n404(x)
+ else
+ fun_l1_n147(x)
+ end
+end
+
+def fun_l0_n647(x)
+ if (x < 1)
+ fun_l1_n802(x)
+ else
+ fun_l1_n824(x)
+ end
+end
+
+def fun_l0_n648(x)
+ if (x < 1)
+ fun_l1_n771(x)
+ else
+ fun_l1_n421(x)
+ end
+end
+
+def fun_l0_n649(x)
+ if (x < 1)
+ fun_l1_n807(x)
+ else
+ fun_l1_n955(x)
+ end
+end
+
+def fun_l0_n650(x)
+ if (x < 1)
+ fun_l1_n221(x)
+ else
+ fun_l1_n367(x)
+ end
+end
+
+def fun_l0_n651(x)
+ if (x < 1)
+ fun_l1_n955(x)
+ else
+ fun_l1_n401(x)
+ end
+end
+
+def fun_l0_n652(x)
+ if (x < 1)
+ fun_l1_n203(x)
+ else
+ fun_l1_n909(x)
+ end
+end
+
+def fun_l0_n653(x)
+ if (x < 1)
+ fun_l1_n154(x)
+ else
+ fun_l1_n535(x)
+ end
+end
+
+def fun_l0_n654(x)
+ if (x < 1)
+ fun_l1_n420(x)
+ else
+ fun_l1_n393(x)
+ end
+end
+
+def fun_l0_n655(x)
+ if (x < 1)
+ fun_l1_n232(x)
+ else
+ fun_l1_n981(x)
+ end
+end
+
+def fun_l0_n656(x)
+ if (x < 1)
+ fun_l1_n873(x)
+ else
+ fun_l1_n510(x)
+ end
+end
+
+def fun_l0_n657(x)
+ if (x < 1)
+ fun_l1_n919(x)
+ else
+ fun_l1_n706(x)
+ end
+end
+
+def fun_l0_n658(x)
+ if (x < 1)
+ fun_l1_n429(x)
+ else
+ fun_l1_n112(x)
+ end
+end
+
+def fun_l0_n659(x)
+ if (x < 1)
+ fun_l1_n547(x)
+ else
+ fun_l1_n712(x)
+ end
+end
+
+def fun_l0_n660(x)
+ if (x < 1)
+ fun_l1_n498(x)
+ else
+ fun_l1_n695(x)
+ end
+end
+
+def fun_l0_n661(x)
+ if (x < 1)
+ fun_l1_n801(x)
+ else
+ fun_l1_n659(x)
+ end
+end
+
+def fun_l0_n662(x)
+ if (x < 1)
+ fun_l1_n796(x)
+ else
+ fun_l1_n229(x)
+ end
+end
+
+def fun_l0_n663(x)
+ if (x < 1)
+ fun_l1_n11(x)
+ else
+ fun_l1_n620(x)
+ end
+end
+
+def fun_l0_n664(x)
+ if (x < 1)
+ fun_l1_n652(x)
+ else
+ fun_l1_n416(x)
+ end
+end
+
+def fun_l0_n665(x)
+ if (x < 1)
+ fun_l1_n655(x)
+ else
+ fun_l1_n331(x)
+ end
+end
+
+def fun_l0_n666(x)
+ if (x < 1)
+ fun_l1_n846(x)
+ else
+ fun_l1_n1(x)
+ end
+end
+
+def fun_l0_n667(x)
+ if (x < 1)
+ fun_l1_n55(x)
+ else
+ fun_l1_n32(x)
+ end
+end
+
+def fun_l0_n668(x)
+ if (x < 1)
+ fun_l1_n241(x)
+ else
+ fun_l1_n627(x)
+ end
+end
+
+def fun_l0_n669(x)
+ if (x < 1)
+ fun_l1_n234(x)
+ else
+ fun_l1_n996(x)
+ end
+end
+
+def fun_l0_n670(x)
+ if (x < 1)
+ fun_l1_n235(x)
+ else
+ fun_l1_n761(x)
+ end
+end
+
+def fun_l0_n671(x)
+ if (x < 1)
+ fun_l1_n990(x)
+ else
+ fun_l1_n236(x)
+ end
+end
+
+def fun_l0_n672(x)
+ if (x < 1)
+ fun_l1_n970(x)
+ else
+ fun_l1_n595(x)
+ end
+end
+
+def fun_l0_n673(x)
+ if (x < 1)
+ fun_l1_n294(x)
+ else
+ fun_l1_n440(x)
+ end
+end
+
+def fun_l0_n674(x)
+ if (x < 1)
+ fun_l1_n597(x)
+ else
+ fun_l1_n956(x)
+ end
+end
+
+def fun_l0_n675(x)
+ if (x < 1)
+ fun_l1_n942(x)
+ else
+ fun_l1_n352(x)
+ end
+end
+
+def fun_l0_n676(x)
+ if (x < 1)
+ fun_l1_n309(x)
+ else
+ fun_l1_n294(x)
+ end
+end
+
+def fun_l0_n677(x)
+ if (x < 1)
+ fun_l1_n752(x)
+ else
+ fun_l1_n447(x)
+ end
+end
+
+def fun_l0_n678(x)
+ if (x < 1)
+ fun_l1_n890(x)
+ else
+ fun_l1_n497(x)
+ end
+end
+
+def fun_l0_n679(x)
+ if (x < 1)
+ fun_l1_n808(x)
+ else
+ fun_l1_n881(x)
+ end
+end
+
+def fun_l0_n680(x)
+ if (x < 1)
+ fun_l1_n966(x)
+ else
+ fun_l1_n460(x)
+ end
+end
+
+def fun_l0_n681(x)
+ if (x < 1)
+ fun_l1_n104(x)
+ else
+ fun_l1_n262(x)
+ end
+end
+
+def fun_l0_n682(x)
+ if (x < 1)
+ fun_l1_n425(x)
+ else
+ fun_l1_n177(x)
+ end
+end
+
+def fun_l0_n683(x)
+ if (x < 1)
+ fun_l1_n15(x)
+ else
+ fun_l1_n458(x)
+ end
+end
+
+def fun_l0_n684(x)
+ if (x < 1)
+ fun_l1_n760(x)
+ else
+ fun_l1_n997(x)
+ end
+end
+
+def fun_l0_n685(x)
+ if (x < 1)
+ fun_l1_n496(x)
+ else
+ fun_l1_n223(x)
+ end
+end
+
+def fun_l0_n686(x)
+ if (x < 1)
+ fun_l1_n363(x)
+ else
+ fun_l1_n543(x)
+ end
+end
+
+def fun_l0_n687(x)
+ if (x < 1)
+ fun_l1_n758(x)
+ else
+ fun_l1_n473(x)
+ end
+end
+
+def fun_l0_n688(x)
+ if (x < 1)
+ fun_l1_n854(x)
+ else
+ fun_l1_n999(x)
+ end
+end
+
+def fun_l0_n689(x)
+ if (x < 1)
+ fun_l1_n336(x)
+ else
+ fun_l1_n388(x)
+ end
+end
+
+def fun_l0_n690(x)
+ if (x < 1)
+ fun_l1_n930(x)
+ else
+ fun_l1_n478(x)
+ end
+end
+
+def fun_l0_n691(x)
+ if (x < 1)
+ fun_l1_n423(x)
+ else
+ fun_l1_n83(x)
+ end
+end
+
+def fun_l0_n692(x)
+ if (x < 1)
+ fun_l1_n797(x)
+ else
+ fun_l1_n427(x)
+ end
+end
+
+def fun_l0_n693(x)
+ if (x < 1)
+ fun_l1_n907(x)
+ else
+ fun_l1_n1(x)
+ end
+end
+
+def fun_l0_n694(x)
+ if (x < 1)
+ fun_l1_n601(x)
+ else
+ fun_l1_n809(x)
+ end
+end
+
+def fun_l0_n695(x)
+ if (x < 1)
+ fun_l1_n252(x)
+ else
+ fun_l1_n233(x)
+ end
+end
+
+def fun_l0_n696(x)
+ if (x < 1)
+ fun_l1_n36(x)
+ else
+ fun_l1_n796(x)
+ end
+end
+
+def fun_l0_n697(x)
+ if (x < 1)
+ fun_l1_n893(x)
+ else
+ fun_l1_n926(x)
+ end
+end
+
+def fun_l0_n698(x)
+ if (x < 1)
+ fun_l1_n511(x)
+ else
+ fun_l1_n88(x)
+ end
+end
+
+def fun_l0_n699(x)
+ if (x < 1)
+ fun_l1_n573(x)
+ else
+ fun_l1_n718(x)
+ end
+end
+
+def fun_l0_n700(x)
+ if (x < 1)
+ fun_l1_n475(x)
+ else
+ fun_l1_n539(x)
+ end
+end
+
+def fun_l0_n701(x)
+ if (x < 1)
+ fun_l1_n238(x)
+ else
+ fun_l1_n253(x)
+ end
+end
+
+def fun_l0_n702(x)
+ if (x < 1)
+ fun_l1_n731(x)
+ else
+ fun_l1_n225(x)
+ end
+end
+
+def fun_l0_n703(x)
+ if (x < 1)
+ fun_l1_n594(x)
+ else
+ fun_l1_n16(x)
+ end
+end
+
+def fun_l0_n704(x)
+ if (x < 1)
+ fun_l1_n732(x)
+ else
+ fun_l1_n354(x)
+ end
+end
+
+def fun_l0_n705(x)
+ if (x < 1)
+ fun_l1_n812(x)
+ else
+ fun_l1_n218(x)
+ end
+end
+
+def fun_l0_n706(x)
+ if (x < 1)
+ fun_l1_n731(x)
+ else
+ fun_l1_n343(x)
+ end
+end
+
+def fun_l0_n707(x)
+ if (x < 1)
+ fun_l1_n134(x)
+ else
+ fun_l1_n752(x)
+ end
+end
+
+def fun_l0_n708(x)
+ if (x < 1)
+ fun_l1_n899(x)
+ else
+ fun_l1_n854(x)
+ end
+end
+
+def fun_l0_n709(x)
+ if (x < 1)
+ fun_l1_n120(x)
+ else
+ fun_l1_n193(x)
+ end
+end
+
+def fun_l0_n710(x)
+ if (x < 1)
+ fun_l1_n22(x)
+ else
+ fun_l1_n254(x)
+ end
+end
+
+def fun_l0_n711(x)
+ if (x < 1)
+ fun_l1_n527(x)
+ else
+ fun_l1_n921(x)
+ end
+end
+
+def fun_l0_n712(x)
+ if (x < 1)
+ fun_l1_n820(x)
+ else
+ fun_l1_n96(x)
+ end
+end
+
+def fun_l0_n713(x)
+ if (x < 1)
+ fun_l1_n145(x)
+ else
+ fun_l1_n226(x)
+ end
+end
+
+def fun_l0_n714(x)
+ if (x < 1)
+ fun_l1_n643(x)
+ else
+ fun_l1_n407(x)
+ end
+end
+
+def fun_l0_n715(x)
+ if (x < 1)
+ fun_l1_n349(x)
+ else
+ fun_l1_n450(x)
+ end
+end
+
+def fun_l0_n716(x)
+ if (x < 1)
+ fun_l1_n954(x)
+ else
+ fun_l1_n707(x)
+ end
+end
+
+def fun_l0_n717(x)
+ if (x < 1)
+ fun_l1_n723(x)
+ else
+ fun_l1_n762(x)
+ end
+end
+
+def fun_l0_n718(x)
+ if (x < 1)
+ fun_l1_n299(x)
+ else
+ fun_l1_n332(x)
+ end
+end
+
+def fun_l0_n719(x)
+ if (x < 1)
+ fun_l1_n493(x)
+ else
+ fun_l1_n521(x)
+ end
+end
+
+def fun_l0_n720(x)
+ if (x < 1)
+ fun_l1_n39(x)
+ else
+ fun_l1_n17(x)
+ end
+end
+
+def fun_l0_n721(x)
+ if (x < 1)
+ fun_l1_n297(x)
+ else
+ fun_l1_n800(x)
+ end
+end
+
+def fun_l0_n722(x)
+ if (x < 1)
+ fun_l1_n758(x)
+ else
+ fun_l1_n135(x)
+ end
+end
+
+def fun_l0_n723(x)
+ if (x < 1)
+ fun_l1_n471(x)
+ else
+ fun_l1_n351(x)
+ end
+end
+
+def fun_l0_n724(x)
+ if (x < 1)
+ fun_l1_n381(x)
+ else
+ fun_l1_n281(x)
+ end
+end
+
+def fun_l0_n725(x)
+ if (x < 1)
+ fun_l1_n624(x)
+ else
+ fun_l1_n162(x)
+ end
+end
+
+def fun_l0_n726(x)
+ if (x < 1)
+ fun_l1_n143(x)
+ else
+ fun_l1_n417(x)
+ end
+end
+
+def fun_l0_n727(x)
+ if (x < 1)
+ fun_l1_n623(x)
+ else
+ fun_l1_n19(x)
+ end
+end
+
+def fun_l0_n728(x)
+ if (x < 1)
+ fun_l1_n687(x)
+ else
+ fun_l1_n574(x)
+ end
+end
+
+def fun_l0_n729(x)
+ if (x < 1)
+ fun_l1_n225(x)
+ else
+ fun_l1_n871(x)
+ end
+end
+
+def fun_l0_n730(x)
+ if (x < 1)
+ fun_l1_n830(x)
+ else
+ fun_l1_n273(x)
+ end
+end
+
+def fun_l0_n731(x)
+ if (x < 1)
+ fun_l1_n95(x)
+ else
+ fun_l1_n864(x)
+ end
+end
+
+def fun_l0_n732(x)
+ if (x < 1)
+ fun_l1_n902(x)
+ else
+ fun_l1_n522(x)
+ end
+end
+
+def fun_l0_n733(x)
+ if (x < 1)
+ fun_l1_n564(x)
+ else
+ fun_l1_n55(x)
+ end
+end
+
+def fun_l0_n734(x)
+ if (x < 1)
+ fun_l1_n481(x)
+ else
+ fun_l1_n880(x)
+ end
+end
+
+def fun_l0_n735(x)
+ if (x < 1)
+ fun_l1_n87(x)
+ else
+ fun_l1_n693(x)
+ end
+end
+
+def fun_l0_n736(x)
+ if (x < 1)
+ fun_l1_n72(x)
+ else
+ fun_l1_n396(x)
+ end
+end
+
+def fun_l0_n737(x)
+ if (x < 1)
+ fun_l1_n920(x)
+ else
+ fun_l1_n852(x)
+ end
+end
+
+def fun_l0_n738(x)
+ if (x < 1)
+ fun_l1_n342(x)
+ else
+ fun_l1_n959(x)
+ end
+end
+
+def fun_l0_n739(x)
+ if (x < 1)
+ fun_l1_n682(x)
+ else
+ fun_l1_n714(x)
+ end
+end
+
+def fun_l0_n740(x)
+ if (x < 1)
+ fun_l1_n264(x)
+ else
+ fun_l1_n325(x)
+ end
+end
+
+def fun_l0_n741(x)
+ if (x < 1)
+ fun_l1_n621(x)
+ else
+ fun_l1_n339(x)
+ end
+end
+
+def fun_l0_n742(x)
+ if (x < 1)
+ fun_l1_n46(x)
+ else
+ fun_l1_n766(x)
+ end
+end
+
+def fun_l0_n743(x)
+ if (x < 1)
+ fun_l1_n333(x)
+ else
+ fun_l1_n353(x)
+ end
+end
+
+def fun_l0_n744(x)
+ if (x < 1)
+ fun_l1_n930(x)
+ else
+ fun_l1_n964(x)
+ end
+end
+
+def fun_l0_n745(x)
+ if (x < 1)
+ fun_l1_n785(x)
+ else
+ fun_l1_n114(x)
+ end
+end
+
+def fun_l0_n746(x)
+ if (x < 1)
+ fun_l1_n402(x)
+ else
+ fun_l1_n803(x)
+ end
+end
+
+def fun_l0_n747(x)
+ if (x < 1)
+ fun_l1_n878(x)
+ else
+ fun_l1_n870(x)
+ end
+end
+
+def fun_l0_n748(x)
+ if (x < 1)
+ fun_l1_n683(x)
+ else
+ fun_l1_n287(x)
+ end
+end
+
+def fun_l0_n749(x)
+ if (x < 1)
+ fun_l1_n816(x)
+ else
+ fun_l1_n849(x)
+ end
+end
+
+def fun_l0_n750(x)
+ if (x < 1)
+ fun_l1_n523(x)
+ else
+ fun_l1_n555(x)
+ end
+end
+
+def fun_l0_n751(x)
+ if (x < 1)
+ fun_l1_n270(x)
+ else
+ fun_l1_n660(x)
+ end
+end
+
+def fun_l0_n752(x)
+ if (x < 1)
+ fun_l1_n786(x)
+ else
+ fun_l1_n749(x)
+ end
+end
+
+def fun_l0_n753(x)
+ if (x < 1)
+ fun_l1_n567(x)
+ else
+ fun_l1_n325(x)
+ end
+end
+
+def fun_l0_n754(x)
+ if (x < 1)
+ fun_l1_n502(x)
+ else
+ fun_l1_n610(x)
+ end
+end
+
+def fun_l0_n755(x)
+ if (x < 1)
+ fun_l1_n336(x)
+ else
+ fun_l1_n354(x)
+ end
+end
+
+def fun_l0_n756(x)
+ if (x < 1)
+ fun_l1_n435(x)
+ else
+ fun_l1_n484(x)
+ end
+end
+
+def fun_l0_n757(x)
+ if (x < 1)
+ fun_l1_n849(x)
+ else
+ fun_l1_n42(x)
+ end
+end
+
+def fun_l0_n758(x)
+ if (x < 1)
+ fun_l1_n294(x)
+ else
+ fun_l1_n483(x)
+ end
+end
+
+def fun_l0_n759(x)
+ if (x < 1)
+ fun_l1_n14(x)
+ else
+ fun_l1_n9(x)
+ end
+end
+
+def fun_l0_n760(x)
+ if (x < 1)
+ fun_l1_n860(x)
+ else
+ fun_l1_n645(x)
+ end
+end
+
+def fun_l0_n761(x)
+ if (x < 1)
+ fun_l1_n577(x)
+ else
+ fun_l1_n0(x)
+ end
+end
+
+def fun_l0_n762(x)
+ if (x < 1)
+ fun_l1_n28(x)
+ else
+ fun_l1_n834(x)
+ end
+end
+
+def fun_l0_n763(x)
+ if (x < 1)
+ fun_l1_n147(x)
+ else
+ fun_l1_n177(x)
+ end
+end
+
+def fun_l0_n764(x)
+ if (x < 1)
+ fun_l1_n429(x)
+ else
+ fun_l1_n646(x)
+ end
+end
+
+def fun_l0_n765(x)
+ if (x < 1)
+ fun_l1_n474(x)
+ else
+ fun_l1_n22(x)
+ end
+end
+
+def fun_l0_n766(x)
+ if (x < 1)
+ fun_l1_n264(x)
+ else
+ fun_l1_n549(x)
+ end
+end
+
+def fun_l0_n767(x)
+ if (x < 1)
+ fun_l1_n351(x)
+ else
+ fun_l1_n813(x)
+ end
+end
+
+def fun_l0_n768(x)
+ if (x < 1)
+ fun_l1_n798(x)
+ else
+ fun_l1_n684(x)
+ end
+end
+
+def fun_l0_n769(x)
+ if (x < 1)
+ fun_l1_n202(x)
+ else
+ fun_l1_n982(x)
+ end
+end
+
+def fun_l0_n770(x)
+ if (x < 1)
+ fun_l1_n611(x)
+ else
+ fun_l1_n52(x)
+ end
+end
+
+def fun_l0_n771(x)
+ if (x < 1)
+ fun_l1_n754(x)
+ else
+ fun_l1_n7(x)
+ end
+end
+
+def fun_l0_n772(x)
+ if (x < 1)
+ fun_l1_n98(x)
+ else
+ fun_l1_n149(x)
+ end
+end
+
+def fun_l0_n773(x)
+ if (x < 1)
+ fun_l1_n358(x)
+ else
+ fun_l1_n603(x)
+ end
+end
+
+def fun_l0_n774(x)
+ if (x < 1)
+ fun_l1_n604(x)
+ else
+ fun_l1_n318(x)
+ end
+end
+
+def fun_l0_n775(x)
+ if (x < 1)
+ fun_l1_n831(x)
+ else
+ fun_l1_n635(x)
+ end
+end
+
+def fun_l0_n776(x)
+ if (x < 1)
+ fun_l1_n738(x)
+ else
+ fun_l1_n563(x)
+ end
+end
+
+def fun_l0_n777(x)
+ if (x < 1)
+ fun_l1_n570(x)
+ else
+ fun_l1_n671(x)
+ end
+end
+
+def fun_l0_n778(x)
+ if (x < 1)
+ fun_l1_n945(x)
+ else
+ fun_l1_n840(x)
+ end
+end
+
+def fun_l0_n779(x)
+ if (x < 1)
+ fun_l1_n116(x)
+ else
+ fun_l1_n942(x)
+ end
+end
+
+def fun_l0_n780(x)
+ if (x < 1)
+ fun_l1_n835(x)
+ else
+ fun_l1_n244(x)
+ end
+end
+
+def fun_l0_n781(x)
+ if (x < 1)
+ fun_l1_n427(x)
+ else
+ fun_l1_n556(x)
+ end
+end
+
+def fun_l0_n782(x)
+ if (x < 1)
+ fun_l1_n280(x)
+ else
+ fun_l1_n926(x)
+ end
+end
+
+def fun_l0_n783(x)
+ if (x < 1)
+ fun_l1_n674(x)
+ else
+ fun_l1_n560(x)
+ end
+end
+
+def fun_l0_n784(x)
+ if (x < 1)
+ fun_l1_n978(x)
+ else
+ fun_l1_n139(x)
+ end
+end
+
+def fun_l0_n785(x)
+ if (x < 1)
+ fun_l1_n928(x)
+ else
+ fun_l1_n11(x)
+ end
+end
+
+def fun_l0_n786(x)
+ if (x < 1)
+ fun_l1_n829(x)
+ else
+ fun_l1_n239(x)
+ end
+end
+
+def fun_l0_n787(x)
+ if (x < 1)
+ fun_l1_n732(x)
+ else
+ fun_l1_n829(x)
+ end
+end
+
+def fun_l0_n788(x)
+ if (x < 1)
+ fun_l1_n968(x)
+ else
+ fun_l1_n596(x)
+ end
+end
+
+def fun_l0_n789(x)
+ if (x < 1)
+ fun_l1_n214(x)
+ else
+ fun_l1_n158(x)
+ end
+end
+
+def fun_l0_n790(x)
+ if (x < 1)
+ fun_l1_n566(x)
+ else
+ fun_l1_n390(x)
+ end
+end
+
+def fun_l0_n791(x)
+ if (x < 1)
+ fun_l1_n936(x)
+ else
+ fun_l1_n31(x)
+ end
+end
+
+def fun_l0_n792(x)
+ if (x < 1)
+ fun_l1_n291(x)
+ else
+ fun_l1_n835(x)
+ end
+end
+
+def fun_l0_n793(x)
+ if (x < 1)
+ fun_l1_n300(x)
+ else
+ fun_l1_n658(x)
+ end
+end
+
+def fun_l0_n794(x)
+ if (x < 1)
+ fun_l1_n609(x)
+ else
+ fun_l1_n156(x)
+ end
+end
+
+def fun_l0_n795(x)
+ if (x < 1)
+ fun_l1_n419(x)
+ else
+ fun_l1_n534(x)
+ end
+end
+
+def fun_l0_n796(x)
+ if (x < 1)
+ fun_l1_n401(x)
+ else
+ fun_l1_n281(x)
+ end
+end
+
+def fun_l0_n797(x)
+ if (x < 1)
+ fun_l1_n538(x)
+ else
+ fun_l1_n905(x)
+ end
+end
+
+def fun_l0_n798(x)
+ if (x < 1)
+ fun_l1_n427(x)
+ else
+ fun_l1_n978(x)
+ end
+end
+
+def fun_l0_n799(x)
+ if (x < 1)
+ fun_l1_n851(x)
+ else
+ fun_l1_n57(x)
+ end
+end
+
+def fun_l0_n800(x)
+ if (x < 1)
+ fun_l1_n836(x)
+ else
+ fun_l1_n306(x)
+ end
+end
+
+def fun_l0_n801(x)
+ if (x < 1)
+ fun_l1_n414(x)
+ else
+ fun_l1_n679(x)
+ end
+end
+
+def fun_l0_n802(x)
+ if (x < 1)
+ fun_l1_n645(x)
+ else
+ fun_l1_n115(x)
+ end
+end
+
+def fun_l0_n803(x)
+ if (x < 1)
+ fun_l1_n884(x)
+ else
+ fun_l1_n801(x)
+ end
+end
+
+def fun_l0_n804(x)
+ if (x < 1)
+ fun_l1_n713(x)
+ else
+ fun_l1_n974(x)
+ end
+end
+
+def fun_l0_n805(x)
+ if (x < 1)
+ fun_l1_n301(x)
+ else
+ fun_l1_n589(x)
+ end
+end
+
+def fun_l0_n806(x)
+ if (x < 1)
+ fun_l1_n912(x)
+ else
+ fun_l1_n766(x)
+ end
+end
+
+def fun_l0_n807(x)
+ if (x < 1)
+ fun_l1_n656(x)
+ else
+ fun_l1_n765(x)
+ end
+end
+
+def fun_l0_n808(x)
+ if (x < 1)
+ fun_l1_n517(x)
+ else
+ fun_l1_n964(x)
+ end
+end
+
+def fun_l0_n809(x)
+ if (x < 1)
+ fun_l1_n878(x)
+ else
+ fun_l1_n69(x)
+ end
+end
+
+def fun_l0_n810(x)
+ if (x < 1)
+ fun_l1_n527(x)
+ else
+ fun_l1_n841(x)
+ end
+end
+
+def fun_l0_n811(x)
+ if (x < 1)
+ fun_l1_n564(x)
+ else
+ fun_l1_n541(x)
+ end
+end
+
+def fun_l0_n812(x)
+ if (x < 1)
+ fun_l1_n754(x)
+ else
+ fun_l1_n681(x)
+ end
+end
+
+def fun_l0_n813(x)
+ if (x < 1)
+ fun_l1_n21(x)
+ else
+ fun_l1_n561(x)
+ end
+end
+
+def fun_l0_n814(x)
+ if (x < 1)
+ fun_l1_n547(x)
+ else
+ fun_l1_n631(x)
+ end
+end
+
+def fun_l0_n815(x)
+ if (x < 1)
+ fun_l1_n956(x)
+ else
+ fun_l1_n889(x)
+ end
+end
+
+def fun_l0_n816(x)
+ if (x < 1)
+ fun_l1_n817(x)
+ else
+ fun_l1_n957(x)
+ end
+end
+
+def fun_l0_n817(x)
+ if (x < 1)
+ fun_l1_n622(x)
+ else
+ fun_l1_n827(x)
+ end
+end
+
+def fun_l0_n818(x)
+ if (x < 1)
+ fun_l1_n7(x)
+ else
+ fun_l1_n208(x)
+ end
+end
+
+def fun_l0_n819(x)
+ if (x < 1)
+ fun_l1_n411(x)
+ else
+ fun_l1_n742(x)
+ end
+end
+
+def fun_l0_n820(x)
+ if (x < 1)
+ fun_l1_n676(x)
+ else
+ fun_l1_n144(x)
+ end
+end
+
+def fun_l0_n821(x)
+ if (x < 1)
+ fun_l1_n489(x)
+ else
+ fun_l1_n963(x)
+ end
+end
+
+def fun_l0_n822(x)
+ if (x < 1)
+ fun_l1_n645(x)
+ else
+ fun_l1_n953(x)
+ end
+end
+
+def fun_l0_n823(x)
+ if (x < 1)
+ fun_l1_n974(x)
+ else
+ fun_l1_n75(x)
+ end
+end
+
+def fun_l0_n824(x)
+ if (x < 1)
+ fun_l1_n295(x)
+ else
+ fun_l1_n249(x)
+ end
+end
+
+def fun_l0_n825(x)
+ if (x < 1)
+ fun_l1_n141(x)
+ else
+ fun_l1_n633(x)
+ end
+end
+
+def fun_l0_n826(x)
+ if (x < 1)
+ fun_l1_n317(x)
+ else
+ fun_l1_n152(x)
+ end
+end
+
+def fun_l0_n827(x)
+ if (x < 1)
+ fun_l1_n570(x)
+ else
+ fun_l1_n377(x)
+ end
+end
+
+def fun_l0_n828(x)
+ if (x < 1)
+ fun_l1_n392(x)
+ else
+ fun_l1_n477(x)
+ end
+end
+
+def fun_l0_n829(x)
+ if (x < 1)
+ fun_l1_n277(x)
+ else
+ fun_l1_n276(x)
+ end
+end
+
+def fun_l0_n830(x)
+ if (x < 1)
+ fun_l1_n579(x)
+ else
+ fun_l1_n648(x)
+ end
+end
+
+def fun_l0_n831(x)
+ if (x < 1)
+ fun_l1_n8(x)
+ else
+ fun_l1_n25(x)
+ end
+end
+
+def fun_l0_n832(x)
+ if (x < 1)
+ fun_l1_n724(x)
+ else
+ fun_l1_n617(x)
+ end
+end
+
+def fun_l0_n833(x)
+ if (x < 1)
+ fun_l1_n771(x)
+ else
+ fun_l1_n619(x)
+ end
+end
+
+def fun_l0_n834(x)
+ if (x < 1)
+ fun_l1_n23(x)
+ else
+ fun_l1_n127(x)
+ end
+end
+
+def fun_l0_n835(x)
+ if (x < 1)
+ fun_l1_n322(x)
+ else
+ fun_l1_n327(x)
+ end
+end
+
+def fun_l0_n836(x)
+ if (x < 1)
+ fun_l1_n7(x)
+ else
+ fun_l1_n600(x)
+ end
+end
+
+def fun_l0_n837(x)
+ if (x < 1)
+ fun_l1_n796(x)
+ else
+ fun_l1_n782(x)
+ end
+end
+
+def fun_l0_n838(x)
+ if (x < 1)
+ fun_l1_n937(x)
+ else
+ fun_l1_n899(x)
+ end
+end
+
+def fun_l0_n839(x)
+ if (x < 1)
+ fun_l1_n16(x)
+ else
+ fun_l1_n349(x)
+ end
+end
+
+def fun_l0_n840(x)
+ if (x < 1)
+ fun_l1_n622(x)
+ else
+ fun_l1_n960(x)
+ end
+end
+
+def fun_l0_n841(x)
+ if (x < 1)
+ fun_l1_n295(x)
+ else
+ fun_l1_n176(x)
+ end
+end
+
+def fun_l0_n842(x)
+ if (x < 1)
+ fun_l1_n302(x)
+ else
+ fun_l1_n639(x)
+ end
+end
+
+def fun_l0_n843(x)
+ if (x < 1)
+ fun_l1_n342(x)
+ else
+ fun_l1_n373(x)
+ end
+end
+
+def fun_l0_n844(x)
+ if (x < 1)
+ fun_l1_n5(x)
+ else
+ fun_l1_n787(x)
+ end
+end
+
+def fun_l0_n845(x)
+ if (x < 1)
+ fun_l1_n89(x)
+ else
+ fun_l1_n951(x)
+ end
+end
+
+def fun_l0_n846(x)
+ if (x < 1)
+ fun_l1_n954(x)
+ else
+ fun_l1_n982(x)
+ end
+end
+
+def fun_l0_n847(x)
+ if (x < 1)
+ fun_l1_n971(x)
+ else
+ fun_l1_n917(x)
+ end
+end
+
+def fun_l0_n848(x)
+ if (x < 1)
+ fun_l1_n845(x)
+ else
+ fun_l1_n343(x)
+ end
+end
+
+def fun_l0_n849(x)
+ if (x < 1)
+ fun_l1_n684(x)
+ else
+ fun_l1_n683(x)
+ end
+end
+
+def fun_l0_n850(x)
+ if (x < 1)
+ fun_l1_n670(x)
+ else
+ fun_l1_n256(x)
+ end
+end
+
+def fun_l0_n851(x)
+ if (x < 1)
+ fun_l1_n405(x)
+ else
+ fun_l1_n123(x)
+ end
+end
+
+def fun_l0_n852(x)
+ if (x < 1)
+ fun_l1_n809(x)
+ else
+ fun_l1_n691(x)
+ end
+end
+
+def fun_l0_n853(x)
+ if (x < 1)
+ fun_l1_n937(x)
+ else
+ fun_l1_n92(x)
+ end
+end
+
+def fun_l0_n854(x)
+ if (x < 1)
+ fun_l1_n735(x)
+ else
+ fun_l1_n948(x)
+ end
+end
+
+def fun_l0_n855(x)
+ if (x < 1)
+ fun_l1_n684(x)
+ else
+ fun_l1_n566(x)
+ end
+end
+
+def fun_l0_n856(x)
+ if (x < 1)
+ fun_l1_n508(x)
+ else
+ fun_l1_n35(x)
+ end
+end
+
+def fun_l0_n857(x)
+ if (x < 1)
+ fun_l1_n865(x)
+ else
+ fun_l1_n930(x)
+ end
+end
+
+def fun_l0_n858(x)
+ if (x < 1)
+ fun_l1_n937(x)
+ else
+ fun_l1_n241(x)
+ end
+end
+
+def fun_l0_n859(x)
+ if (x < 1)
+ fun_l1_n938(x)
+ else
+ fun_l1_n108(x)
+ end
+end
+
+def fun_l0_n860(x)
+ if (x < 1)
+ fun_l1_n491(x)
+ else
+ fun_l1_n119(x)
+ end
+end
+
+def fun_l0_n861(x)
+ if (x < 1)
+ fun_l1_n991(x)
+ else
+ fun_l1_n198(x)
+ end
+end
+
+def fun_l0_n862(x)
+ if (x < 1)
+ fun_l1_n846(x)
+ else
+ fun_l1_n513(x)
+ end
+end
+
+def fun_l0_n863(x)
+ if (x < 1)
+ fun_l1_n279(x)
+ else
+ fun_l1_n229(x)
+ end
+end
+
+def fun_l0_n864(x)
+ if (x < 1)
+ fun_l1_n52(x)
+ else
+ fun_l1_n765(x)
+ end
+end
+
+def fun_l0_n865(x)
+ if (x < 1)
+ fun_l1_n35(x)
+ else
+ fun_l1_n572(x)
+ end
+end
+
+def fun_l0_n866(x)
+ if (x < 1)
+ fun_l1_n4(x)
+ else
+ fun_l1_n645(x)
+ end
+end
+
+def fun_l0_n867(x)
+ if (x < 1)
+ fun_l1_n112(x)
+ else
+ fun_l1_n758(x)
+ end
+end
+
+def fun_l0_n868(x)
+ if (x < 1)
+ fun_l1_n924(x)
+ else
+ fun_l1_n251(x)
+ end
+end
+
+def fun_l0_n869(x)
+ if (x < 1)
+ fun_l1_n558(x)
+ else
+ fun_l1_n818(x)
+ end
+end
+
+def fun_l0_n870(x)
+ if (x < 1)
+ fun_l1_n804(x)
+ else
+ fun_l1_n746(x)
+ end
+end
+
+def fun_l0_n871(x)
+ if (x < 1)
+ fun_l1_n111(x)
+ else
+ fun_l1_n407(x)
+ end
+end
+
+def fun_l0_n872(x)
+ if (x < 1)
+ fun_l1_n973(x)
+ else
+ fun_l1_n384(x)
+ end
+end
+
+def fun_l0_n873(x)
+ if (x < 1)
+ fun_l1_n102(x)
+ else
+ fun_l1_n199(x)
+ end
+end
+
+def fun_l0_n874(x)
+ if (x < 1)
+ fun_l1_n735(x)
+ else
+ fun_l1_n903(x)
+ end
+end
+
+def fun_l0_n875(x)
+ if (x < 1)
+ fun_l1_n95(x)
+ else
+ fun_l1_n720(x)
+ end
+end
+
+def fun_l0_n876(x)
+ if (x < 1)
+ fun_l1_n864(x)
+ else
+ fun_l1_n970(x)
+ end
+end
+
+def fun_l0_n877(x)
+ if (x < 1)
+ fun_l1_n729(x)
+ else
+ fun_l1_n207(x)
+ end
+end
+
+def fun_l0_n878(x)
+ if (x < 1)
+ fun_l1_n104(x)
+ else
+ fun_l1_n209(x)
+ end
+end
+
+def fun_l0_n879(x)
+ if (x < 1)
+ fun_l1_n566(x)
+ else
+ fun_l1_n918(x)
+ end
+end
+
+def fun_l0_n880(x)
+ if (x < 1)
+ fun_l1_n457(x)
+ else
+ fun_l1_n104(x)
+ end
+end
+
+def fun_l0_n881(x)
+ if (x < 1)
+ fun_l1_n745(x)
+ else
+ fun_l1_n476(x)
+ end
+end
+
+def fun_l0_n882(x)
+ if (x < 1)
+ fun_l1_n346(x)
+ else
+ fun_l1_n642(x)
+ end
+end
+
+def fun_l0_n883(x)
+ if (x < 1)
+ fun_l1_n78(x)
+ else
+ fun_l1_n210(x)
+ end
+end
+
+def fun_l0_n884(x)
+ if (x < 1)
+ fun_l1_n864(x)
+ else
+ fun_l1_n439(x)
+ end
+end
+
+def fun_l0_n885(x)
+ if (x < 1)
+ fun_l1_n0(x)
+ else
+ fun_l1_n414(x)
+ end
+end
+
+def fun_l0_n886(x)
+ if (x < 1)
+ fun_l1_n217(x)
+ else
+ fun_l1_n444(x)
+ end
+end
+
+def fun_l0_n887(x)
+ if (x < 1)
+ fun_l1_n193(x)
+ else
+ fun_l1_n788(x)
+ end
+end
+
+def fun_l0_n888(x)
+ if (x < 1)
+ fun_l1_n30(x)
+ else
+ fun_l1_n793(x)
+ end
+end
+
+def fun_l0_n889(x)
+ if (x < 1)
+ fun_l1_n222(x)
+ else
+ fun_l1_n936(x)
+ end
+end
+
+def fun_l0_n890(x)
+ if (x < 1)
+ fun_l1_n758(x)
+ else
+ fun_l1_n52(x)
+ end
+end
+
+def fun_l0_n891(x)
+ if (x < 1)
+ fun_l1_n796(x)
+ else
+ fun_l1_n424(x)
+ end
+end
+
+def fun_l0_n892(x)
+ if (x < 1)
+ fun_l1_n627(x)
+ else
+ fun_l1_n284(x)
+ end
+end
+
+def fun_l0_n893(x)
+ if (x < 1)
+ fun_l1_n42(x)
+ else
+ fun_l1_n193(x)
+ end
+end
+
+def fun_l0_n894(x)
+ if (x < 1)
+ fun_l1_n90(x)
+ else
+ fun_l1_n158(x)
+ end
+end
+
+def fun_l0_n895(x)
+ if (x < 1)
+ fun_l1_n878(x)
+ else
+ fun_l1_n396(x)
+ end
+end
+
+def fun_l0_n896(x)
+ if (x < 1)
+ fun_l1_n665(x)
+ else
+ fun_l1_n731(x)
+ end
+end
+
+def fun_l0_n897(x)
+ if (x < 1)
+ fun_l1_n618(x)
+ else
+ fun_l1_n152(x)
+ end
+end
+
+def fun_l0_n898(x)
+ if (x < 1)
+ fun_l1_n64(x)
+ else
+ fun_l1_n697(x)
+ end
+end
+
+def fun_l0_n899(x)
+ if (x < 1)
+ fun_l1_n354(x)
+ else
+ fun_l1_n657(x)
+ end
+end
+
+def fun_l0_n900(x)
+ if (x < 1)
+ fun_l1_n79(x)
+ else
+ fun_l1_n794(x)
+ end
+end
+
+def fun_l0_n901(x)
+ if (x < 1)
+ fun_l1_n623(x)
+ else
+ fun_l1_n392(x)
+ end
+end
+
+def fun_l0_n902(x)
+ if (x < 1)
+ fun_l1_n529(x)
+ else
+ fun_l1_n708(x)
+ end
+end
+
+def fun_l0_n903(x)
+ if (x < 1)
+ fun_l1_n900(x)
+ else
+ fun_l1_n830(x)
+ end
+end
+
+def fun_l0_n904(x)
+ if (x < 1)
+ fun_l1_n424(x)
+ else
+ fun_l1_n564(x)
+ end
+end
+
+def fun_l0_n905(x)
+ if (x < 1)
+ fun_l1_n557(x)
+ else
+ fun_l1_n612(x)
+ end
+end
+
+def fun_l0_n906(x)
+ if (x < 1)
+ fun_l1_n725(x)
+ else
+ fun_l1_n166(x)
+ end
+end
+
+def fun_l0_n907(x)
+ if (x < 1)
+ fun_l1_n534(x)
+ else
+ fun_l1_n159(x)
+ end
+end
+
+def fun_l0_n908(x)
+ if (x < 1)
+ fun_l1_n50(x)
+ else
+ fun_l1_n201(x)
+ end
+end
+
+def fun_l0_n909(x)
+ if (x < 1)
+ fun_l1_n568(x)
+ else
+ fun_l1_n276(x)
+ end
+end
+
+def fun_l0_n910(x)
+ if (x < 1)
+ fun_l1_n0(x)
+ else
+ fun_l1_n324(x)
+ end
+end
+
+def fun_l0_n911(x)
+ if (x < 1)
+ fun_l1_n926(x)
+ else
+ fun_l1_n524(x)
+ end
+end
+
+def fun_l0_n912(x)
+ if (x < 1)
+ fun_l1_n498(x)
+ else
+ fun_l1_n650(x)
+ end
+end
+
+def fun_l0_n913(x)
+ if (x < 1)
+ fun_l1_n593(x)
+ else
+ fun_l1_n860(x)
+ end
+end
+
+def fun_l0_n914(x)
+ if (x < 1)
+ fun_l1_n726(x)
+ else
+ fun_l1_n440(x)
+ end
+end
+
+def fun_l0_n915(x)
+ if (x < 1)
+ fun_l1_n422(x)
+ else
+ fun_l1_n627(x)
+ end
+end
+
+def fun_l0_n916(x)
+ if (x < 1)
+ fun_l1_n346(x)
+ else
+ fun_l1_n932(x)
+ end
+end
+
+def fun_l0_n917(x)
+ if (x < 1)
+ fun_l1_n403(x)
+ else
+ fun_l1_n58(x)
+ end
+end
+
+def fun_l0_n918(x)
+ if (x < 1)
+ fun_l1_n989(x)
+ else
+ fun_l1_n579(x)
+ end
+end
+
+def fun_l0_n919(x)
+ if (x < 1)
+ fun_l1_n933(x)
+ else
+ fun_l1_n434(x)
+ end
+end
+
+def fun_l0_n920(x)
+ if (x < 1)
+ fun_l1_n899(x)
+ else
+ fun_l1_n377(x)
+ end
+end
+
+def fun_l0_n921(x)
+ if (x < 1)
+ fun_l1_n17(x)
+ else
+ fun_l1_n637(x)
+ end
+end
+
+def fun_l0_n922(x)
+ if (x < 1)
+ fun_l1_n551(x)
+ else
+ fun_l1_n693(x)
+ end
+end
+
+def fun_l0_n923(x)
+ if (x < 1)
+ fun_l1_n861(x)
+ else
+ fun_l1_n248(x)
+ end
+end
+
+def fun_l0_n924(x)
+ if (x < 1)
+ fun_l1_n171(x)
+ else
+ fun_l1_n75(x)
+ end
+end
+
+def fun_l0_n925(x)
+ if (x < 1)
+ fun_l1_n233(x)
+ else
+ fun_l1_n444(x)
+ end
+end
+
+def fun_l0_n926(x)
+ if (x < 1)
+ fun_l1_n310(x)
+ else
+ fun_l1_n941(x)
+ end
+end
+
+def fun_l0_n927(x)
+ if (x < 1)
+ fun_l1_n363(x)
+ else
+ fun_l1_n567(x)
+ end
+end
+
+def fun_l0_n928(x)
+ if (x < 1)
+ fun_l1_n632(x)
+ else
+ fun_l1_n840(x)
+ end
+end
+
+def fun_l0_n929(x)
+ if (x < 1)
+ fun_l1_n368(x)
+ else
+ fun_l1_n713(x)
+ end
+end
+
+def fun_l0_n930(x)
+ if (x < 1)
+ fun_l1_n37(x)
+ else
+ fun_l1_n355(x)
+ end
+end
+
+def fun_l0_n931(x)
+ if (x < 1)
+ fun_l1_n907(x)
+ else
+ fun_l1_n784(x)
+ end
+end
+
+def fun_l0_n932(x)
+ if (x < 1)
+ fun_l1_n591(x)
+ else
+ fun_l1_n844(x)
+ end
+end
+
+def fun_l0_n933(x)
+ if (x < 1)
+ fun_l1_n996(x)
+ else
+ fun_l1_n943(x)
+ end
+end
+
+def fun_l0_n934(x)
+ if (x < 1)
+ fun_l1_n631(x)
+ else
+ fun_l1_n643(x)
+ end
+end
+
+def fun_l0_n935(x)
+ if (x < 1)
+ fun_l1_n875(x)
+ else
+ fun_l1_n89(x)
+ end
+end
+
+def fun_l0_n936(x)
+ if (x < 1)
+ fun_l1_n842(x)
+ else
+ fun_l1_n595(x)
+ end
+end
+
+def fun_l0_n937(x)
+ if (x < 1)
+ fun_l1_n921(x)
+ else
+ fun_l1_n271(x)
+ end
+end
+
+def fun_l0_n938(x)
+ if (x < 1)
+ fun_l1_n222(x)
+ else
+ fun_l1_n170(x)
+ end
+end
+
+def fun_l0_n939(x)
+ if (x < 1)
+ fun_l1_n567(x)
+ else
+ fun_l1_n463(x)
+ end
+end
+
+def fun_l0_n940(x)
+ if (x < 1)
+ fun_l1_n456(x)
+ else
+ fun_l1_n192(x)
+ end
+end
+
+def fun_l0_n941(x)
+ if (x < 1)
+ fun_l1_n32(x)
+ else
+ fun_l1_n951(x)
+ end
+end
+
+def fun_l0_n942(x)
+ if (x < 1)
+ fun_l1_n14(x)
+ else
+ fun_l1_n135(x)
+ end
+end
+
+def fun_l0_n943(x)
+ if (x < 1)
+ fun_l1_n15(x)
+ else
+ fun_l1_n234(x)
+ end
+end
+
+def fun_l0_n944(x)
+ if (x < 1)
+ fun_l1_n119(x)
+ else
+ fun_l1_n33(x)
+ end
+end
+
+def fun_l0_n945(x)
+ if (x < 1)
+ fun_l1_n859(x)
+ else
+ fun_l1_n497(x)
+ end
+end
+
+def fun_l0_n946(x)
+ if (x < 1)
+ fun_l1_n178(x)
+ else
+ fun_l1_n369(x)
+ end
+end
+
+def fun_l0_n947(x)
+ if (x < 1)
+ fun_l1_n64(x)
+ else
+ fun_l1_n356(x)
+ end
+end
+
+def fun_l0_n948(x)
+ if (x < 1)
+ fun_l1_n279(x)
+ else
+ fun_l1_n244(x)
+ end
+end
+
+def fun_l0_n949(x)
+ if (x < 1)
+ fun_l1_n728(x)
+ else
+ fun_l1_n548(x)
+ end
+end
+
+def fun_l0_n950(x)
+ if (x < 1)
+ fun_l1_n3(x)
+ else
+ fun_l1_n698(x)
+ end
+end
+
+def fun_l0_n951(x)
+ if (x < 1)
+ fun_l1_n665(x)
+ else
+ fun_l1_n198(x)
+ end
+end
+
+def fun_l0_n952(x)
+ if (x < 1)
+ fun_l1_n812(x)
+ else
+ fun_l1_n964(x)
+ end
+end
+
+def fun_l0_n953(x)
+ if (x < 1)
+ fun_l1_n851(x)
+ else
+ fun_l1_n877(x)
+ end
+end
+
+def fun_l0_n954(x)
+ if (x < 1)
+ fun_l1_n415(x)
+ else
+ fun_l1_n379(x)
+ end
+end
+
+def fun_l0_n955(x)
+ if (x < 1)
+ fun_l1_n806(x)
+ else
+ fun_l1_n919(x)
+ end
+end
+
+def fun_l0_n956(x)
+ if (x < 1)
+ fun_l1_n207(x)
+ else
+ fun_l1_n798(x)
+ end
+end
+
+def fun_l0_n957(x)
+ if (x < 1)
+ fun_l1_n269(x)
+ else
+ fun_l1_n416(x)
+ end
+end
+
+def fun_l0_n958(x)
+ if (x < 1)
+ fun_l1_n654(x)
+ else
+ fun_l1_n236(x)
+ end
+end
+
+def fun_l0_n959(x)
+ if (x < 1)
+ fun_l1_n392(x)
+ else
+ fun_l1_n623(x)
+ end
+end
+
+def fun_l0_n960(x)
+ if (x < 1)
+ fun_l1_n889(x)
+ else
+ fun_l1_n279(x)
+ end
+end
+
+def fun_l0_n961(x)
+ if (x < 1)
+ fun_l1_n476(x)
+ else
+ fun_l1_n201(x)
+ end
+end
+
+def fun_l0_n962(x)
+ if (x < 1)
+ fun_l1_n799(x)
+ else
+ fun_l1_n570(x)
+ end
+end
+
+def fun_l0_n963(x)
+ if (x < 1)
+ fun_l1_n802(x)
+ else
+ fun_l1_n114(x)
+ end
+end
+
+def fun_l0_n964(x)
+ if (x < 1)
+ fun_l1_n197(x)
+ else
+ fun_l1_n422(x)
+ end
+end
+
+def fun_l0_n965(x)
+ if (x < 1)
+ fun_l1_n37(x)
+ else
+ fun_l1_n691(x)
+ end
+end
+
+def fun_l0_n966(x)
+ if (x < 1)
+ fun_l1_n775(x)
+ else
+ fun_l1_n854(x)
+ end
+end
+
+def fun_l0_n967(x)
+ if (x < 1)
+ fun_l1_n373(x)
+ else
+ fun_l1_n306(x)
+ end
+end
+
+def fun_l0_n968(x)
+ if (x < 1)
+ fun_l1_n154(x)
+ else
+ fun_l1_n122(x)
+ end
+end
+
+def fun_l0_n969(x)
+ if (x < 1)
+ fun_l1_n497(x)
+ else
+ fun_l1_n456(x)
+ end
+end
+
+def fun_l0_n970(x)
+ if (x < 1)
+ fun_l1_n621(x)
+ else
+ fun_l1_n931(x)
+ end
+end
+
+def fun_l0_n971(x)
+ if (x < 1)
+ fun_l1_n963(x)
+ else
+ fun_l1_n613(x)
+ end
+end
+
+def fun_l0_n972(x)
+ if (x < 1)
+ fun_l1_n613(x)
+ else
+ fun_l1_n508(x)
+ end
+end
+
+def fun_l0_n973(x)
+ if (x < 1)
+ fun_l1_n466(x)
+ else
+ fun_l1_n929(x)
+ end
+end
+
+def fun_l0_n974(x)
+ if (x < 1)
+ fun_l1_n247(x)
+ else
+ fun_l1_n610(x)
+ end
+end
+
+def fun_l0_n975(x)
+ if (x < 1)
+ fun_l1_n674(x)
+ else
+ fun_l1_n609(x)
+ end
+end
+
+def fun_l0_n976(x)
+ if (x < 1)
+ fun_l1_n963(x)
+ else
+ fun_l1_n601(x)
+ end
+end
+
+def fun_l0_n977(x)
+ if (x < 1)
+ fun_l1_n728(x)
+ else
+ fun_l1_n242(x)
+ end
+end
+
+def fun_l0_n978(x)
+ if (x < 1)
+ fun_l1_n515(x)
+ else
+ fun_l1_n113(x)
+ end
+end
+
+def fun_l0_n979(x)
+ if (x < 1)
+ fun_l1_n734(x)
+ else
+ fun_l1_n271(x)
+ end
+end
+
+def fun_l0_n980(x)
+ if (x < 1)
+ fun_l1_n837(x)
+ else
+ fun_l1_n733(x)
+ end
+end
+
+def fun_l0_n981(x)
+ if (x < 1)
+ fun_l1_n326(x)
+ else
+ fun_l1_n213(x)
+ end
+end
+
+def fun_l0_n982(x)
+ if (x < 1)
+ fun_l1_n733(x)
+ else
+ fun_l1_n198(x)
+ end
+end
+
+def fun_l0_n983(x)
+ if (x < 1)
+ fun_l1_n989(x)
+ else
+ fun_l1_n700(x)
+ end
+end
+
+def fun_l0_n984(x)
+ if (x < 1)
+ fun_l1_n266(x)
+ else
+ fun_l1_n348(x)
+ end
+end
+
+def fun_l0_n985(x)
+ if (x < 1)
+ fun_l1_n931(x)
+ else
+ fun_l1_n646(x)
+ end
+end
+
+def fun_l0_n986(x)
+ if (x < 1)
+ fun_l1_n435(x)
+ else
+ fun_l1_n747(x)
+ end
+end
+
+def fun_l0_n987(x)
+ if (x < 1)
+ fun_l1_n474(x)
+ else
+ fun_l1_n638(x)
+ end
+end
+
+def fun_l0_n988(x)
+ if (x < 1)
+ fun_l1_n615(x)
+ else
+ fun_l1_n283(x)
+ end
+end
+
+def fun_l0_n989(x)
+ if (x < 1)
+ fun_l1_n410(x)
+ else
+ fun_l1_n289(x)
+ end
+end
+
+def fun_l0_n990(x)
+ if (x < 1)
+ fun_l1_n633(x)
+ else
+ fun_l1_n77(x)
+ end
+end
+
+def fun_l0_n991(x)
+ if (x < 1)
+ fun_l1_n153(x)
+ else
+ fun_l1_n255(x)
+ end
+end
+
+def fun_l0_n992(x)
+ if (x < 1)
+ fun_l1_n447(x)
+ else
+ fun_l1_n239(x)
+ end
+end
+
+def fun_l0_n993(x)
+ if (x < 1)
+ fun_l1_n837(x)
+ else
+ fun_l1_n582(x)
+ end
+end
+
+def fun_l0_n994(x)
+ if (x < 1)
+ fun_l1_n385(x)
+ else
+ fun_l1_n939(x)
+ end
+end
+
+def fun_l0_n995(x)
+ if (x < 1)
+ fun_l1_n236(x)
+ else
+ fun_l1_n497(x)
+ end
+end
+
+def fun_l0_n996(x)
+ if (x < 1)
+ fun_l1_n63(x)
+ else
+ fun_l1_n721(x)
+ end
+end
+
+def fun_l0_n997(x)
+ if (x < 1)
+ fun_l1_n457(x)
+ else
+ fun_l1_n376(x)
+ end
+end
+
+def fun_l0_n998(x)
+ if (x < 1)
+ fun_l1_n362(x)
+ else
+ fun_l1_n478(x)
+ end
+end
+
+def fun_l0_n999(x)
+ if (x < 1)
+ fun_l1_n554(x)
+ else
+ fun_l1_n422(x)
+ end
+end
+
+def fun_l1_n0(x)
+ if (x < 1)
+ fun_l2_n498(x)
+ else
+ fun_l2_n461(x)
+ end
+end
+
+def fun_l1_n1(x)
+ if (x < 1)
+ fun_l2_n424(x)
+ else
+ fun_l2_n137(x)
+ end
+end
+
+def fun_l1_n2(x)
+ if (x < 1)
+ fun_l2_n325(x)
+ else
+ fun_l2_n95(x)
+ end
+end
+
+def fun_l1_n3(x)
+ if (x < 1)
+ fun_l2_n917(x)
+ else
+ fun_l2_n469(x)
+ end
+end
+
+def fun_l1_n4(x)
+ if (x < 1)
+ fun_l2_n730(x)
+ else
+ fun_l2_n147(x)
+ end
+end
+
+def fun_l1_n5(x)
+ if (x < 1)
+ fun_l2_n796(x)
+ else
+ fun_l2_n907(x)
+ end
+end
+
+def fun_l1_n6(x)
+ if (x < 1)
+ fun_l2_n555(x)
+ else
+ fun_l2_n309(x)
+ end
+end
+
+def fun_l1_n7(x)
+ if (x < 1)
+ fun_l2_n475(x)
+ else
+ fun_l2_n193(x)
+ end
+end
+
+def fun_l1_n8(x)
+ if (x < 1)
+ fun_l2_n317(x)
+ else
+ fun_l2_n284(x)
+ end
+end
+
+def fun_l1_n9(x)
+ if (x < 1)
+ fun_l2_n297(x)
+ else
+ fun_l2_n370(x)
+ end
+end
+
+def fun_l1_n10(x)
+ if (x < 1)
+ fun_l2_n66(x)
+ else
+ fun_l2_n959(x)
+ end
+end
+
+def fun_l1_n11(x)
+ if (x < 1)
+ fun_l2_n833(x)
+ else
+ fun_l2_n250(x)
+ end
+end
+
+def fun_l1_n12(x)
+ if (x < 1)
+ fun_l2_n640(x)
+ else
+ fun_l2_n588(x)
+ end
+end
+
+def fun_l1_n13(x)
+ if (x < 1)
+ fun_l2_n91(x)
+ else
+ fun_l2_n294(x)
+ end
+end
+
+def fun_l1_n14(x)
+ if (x < 1)
+ fun_l2_n166(x)
+ else
+ fun_l2_n943(x)
+ end
+end
+
+def fun_l1_n15(x)
+ if (x < 1)
+ fun_l2_n352(x)
+ else
+ fun_l2_n363(x)
+ end
+end
+
+def fun_l1_n16(x)
+ if (x < 1)
+ fun_l2_n84(x)
+ else
+ fun_l2_n278(x)
+ end
+end
+
+def fun_l1_n17(x)
+ if (x < 1)
+ fun_l2_n308(x)
+ else
+ fun_l2_n341(x)
+ end
+end
+
+def fun_l1_n18(x)
+ if (x < 1)
+ fun_l2_n713(x)
+ else
+ fun_l2_n575(x)
+ end
+end
+
+def fun_l1_n19(x)
+ if (x < 1)
+ fun_l2_n81(x)
+ else
+ fun_l2_n301(x)
+ end
+end
+
+def fun_l1_n20(x)
+ if (x < 1)
+ fun_l2_n516(x)
+ else
+ fun_l2_n164(x)
+ end
+end
+
+def fun_l1_n21(x)
+ if (x < 1)
+ fun_l2_n900(x)
+ else
+ fun_l2_n963(x)
+ end
+end
+
+def fun_l1_n22(x)
+ if (x < 1)
+ fun_l2_n472(x)
+ else
+ fun_l2_n288(x)
+ end
+end
+
+def fun_l1_n23(x)
+ if (x < 1)
+ fun_l2_n587(x)
+ else
+ fun_l2_n515(x)
+ end
+end
+
+def fun_l1_n24(x)
+ if (x < 1)
+ fun_l2_n506(x)
+ else
+ fun_l2_n711(x)
+ end
+end
+
+def fun_l1_n25(x)
+ if (x < 1)
+ fun_l2_n935(x)
+ else
+ fun_l2_n177(x)
+ end
+end
+
+def fun_l1_n26(x)
+ if (x < 1)
+ fun_l2_n485(x)
+ else
+ fun_l2_n368(x)
+ end
+end
+
+def fun_l1_n27(x)
+ if (x < 1)
+ fun_l2_n984(x)
+ else
+ fun_l2_n290(x)
+ end
+end
+
+def fun_l1_n28(x)
+ if (x < 1)
+ fun_l2_n36(x)
+ else
+ fun_l2_n837(x)
+ end
+end
+
+def fun_l1_n29(x)
+ if (x < 1)
+ fun_l2_n752(x)
+ else
+ fun_l2_n311(x)
+ end
+end
+
+def fun_l1_n30(x)
+ if (x < 1)
+ fun_l2_n215(x)
+ else
+ fun_l2_n376(x)
+ end
+end
+
+def fun_l1_n31(x)
+ if (x < 1)
+ fun_l2_n533(x)
+ else
+ fun_l2_n92(x)
+ end
+end
+
+def fun_l1_n32(x)
+ if (x < 1)
+ fun_l2_n386(x)
+ else
+ fun_l2_n283(x)
+ end
+end
+
+def fun_l1_n33(x)
+ if (x < 1)
+ fun_l2_n268(x)
+ else
+ fun_l2_n256(x)
+ end
+end
+
+def fun_l1_n34(x)
+ if (x < 1)
+ fun_l2_n348(x)
+ else
+ fun_l2_n464(x)
+ end
+end
+
+def fun_l1_n35(x)
+ if (x < 1)
+ fun_l2_n25(x)
+ else
+ fun_l2_n33(x)
+ end
+end
+
+def fun_l1_n36(x)
+ if (x < 1)
+ fun_l2_n387(x)
+ else
+ fun_l2_n341(x)
+ end
+end
+
+def fun_l1_n37(x)
+ if (x < 1)
+ fun_l2_n580(x)
+ else
+ fun_l2_n476(x)
+ end
+end
+
+def fun_l1_n38(x)
+ if (x < 1)
+ fun_l2_n33(x)
+ else
+ fun_l2_n33(x)
+ end
+end
+
+def fun_l1_n39(x)
+ if (x < 1)
+ fun_l2_n861(x)
+ else
+ fun_l2_n52(x)
+ end
+end
+
+def fun_l1_n40(x)
+ if (x < 1)
+ fun_l2_n740(x)
+ else
+ fun_l2_n943(x)
+ end
+end
+
+def fun_l1_n41(x)
+ if (x < 1)
+ fun_l2_n956(x)
+ else
+ fun_l2_n159(x)
+ end
+end
+
+def fun_l1_n42(x)
+ if (x < 1)
+ fun_l2_n445(x)
+ else
+ fun_l2_n775(x)
+ end
+end
+
+def fun_l1_n43(x)
+ if (x < 1)
+ fun_l2_n667(x)
+ else
+ fun_l2_n282(x)
+ end
+end
+
+def fun_l1_n44(x)
+ if (x < 1)
+ fun_l2_n185(x)
+ else
+ fun_l2_n210(x)
+ end
+end
+
+def fun_l1_n45(x)
+ if (x < 1)
+ fun_l2_n490(x)
+ else
+ fun_l2_n21(x)
+ end
+end
+
+def fun_l1_n46(x)
+ if (x < 1)
+ fun_l2_n751(x)
+ else
+ fun_l2_n639(x)
+ end
+end
+
+def fun_l1_n47(x)
+ if (x < 1)
+ fun_l2_n431(x)
+ else
+ fun_l2_n917(x)
+ end
+end
+
+def fun_l1_n48(x)
+ if (x < 1)
+ fun_l2_n187(x)
+ else
+ fun_l2_n170(x)
+ end
+end
+
+def fun_l1_n49(x)
+ if (x < 1)
+ fun_l2_n780(x)
+ else
+ fun_l2_n77(x)
+ end
+end
+
+def fun_l1_n50(x)
+ if (x < 1)
+ fun_l2_n546(x)
+ else
+ fun_l2_n759(x)
+ end
+end
+
+def fun_l1_n51(x)
+ if (x < 1)
+ fun_l2_n453(x)
+ else
+ fun_l2_n951(x)
+ end
+end
+
+def fun_l1_n52(x)
+ if (x < 1)
+ fun_l2_n989(x)
+ else
+ fun_l2_n716(x)
+ end
+end
+
+def fun_l1_n53(x)
+ if (x < 1)
+ fun_l2_n652(x)
+ else
+ fun_l2_n36(x)
+ end
+end
+
+def fun_l1_n54(x)
+ if (x < 1)
+ fun_l2_n187(x)
+ else
+ fun_l2_n760(x)
+ end
+end
+
+def fun_l1_n55(x)
+ if (x < 1)
+ fun_l2_n706(x)
+ else
+ fun_l2_n927(x)
+ end
+end
+
+def fun_l1_n56(x)
+ if (x < 1)
+ fun_l2_n666(x)
+ else
+ fun_l2_n295(x)
+ end
+end
+
+def fun_l1_n57(x)
+ if (x < 1)
+ fun_l2_n424(x)
+ else
+ fun_l2_n447(x)
+ end
+end
+
+def fun_l1_n58(x)
+ if (x < 1)
+ fun_l2_n408(x)
+ else
+ fun_l2_n337(x)
+ end
+end
+
+def fun_l1_n59(x)
+ if (x < 1)
+ fun_l2_n567(x)
+ else
+ fun_l2_n765(x)
+ end
+end
+
+def fun_l1_n60(x)
+ if (x < 1)
+ fun_l2_n241(x)
+ else
+ fun_l2_n701(x)
+ end
+end
+
+def fun_l1_n61(x)
+ if (x < 1)
+ fun_l2_n831(x)
+ else
+ fun_l2_n382(x)
+ end
+end
+
+def fun_l1_n62(x)
+ if (x < 1)
+ fun_l2_n634(x)
+ else
+ fun_l2_n908(x)
+ end
+end
+
+def fun_l1_n63(x)
+ if (x < 1)
+ fun_l2_n696(x)
+ else
+ fun_l2_n48(x)
+ end
+end
+
+def fun_l1_n64(x)
+ if (x < 1)
+ fun_l2_n528(x)
+ else
+ fun_l2_n110(x)
+ end
+end
+
+def fun_l1_n65(x)
+ if (x < 1)
+ fun_l2_n767(x)
+ else
+ fun_l2_n973(x)
+ end
+end
+
+def fun_l1_n66(x)
+ if (x < 1)
+ fun_l2_n963(x)
+ else
+ fun_l2_n673(x)
+ end
+end
+
+def fun_l1_n67(x)
+ if (x < 1)
+ fun_l2_n927(x)
+ else
+ fun_l2_n309(x)
+ end
+end
+
+def fun_l1_n68(x)
+ if (x < 1)
+ fun_l2_n851(x)
+ else
+ fun_l2_n160(x)
+ end
+end
+
+def fun_l1_n69(x)
+ if (x < 1)
+ fun_l2_n575(x)
+ else
+ fun_l2_n800(x)
+ end
+end
+
+def fun_l1_n70(x)
+ if (x < 1)
+ fun_l2_n396(x)
+ else
+ fun_l2_n382(x)
+ end
+end
+
+def fun_l1_n71(x)
+ if (x < 1)
+ fun_l2_n508(x)
+ else
+ fun_l2_n763(x)
+ end
+end
+
+def fun_l1_n72(x)
+ if (x < 1)
+ fun_l2_n360(x)
+ else
+ fun_l2_n848(x)
+ end
+end
+
+def fun_l1_n73(x)
+ if (x < 1)
+ fun_l2_n878(x)
+ else
+ fun_l2_n83(x)
+ end
+end
+
+def fun_l1_n74(x)
+ if (x < 1)
+ fun_l2_n573(x)
+ else
+ fun_l2_n284(x)
+ end
+end
+
+def fun_l1_n75(x)
+ if (x < 1)
+ fun_l2_n999(x)
+ else
+ fun_l2_n954(x)
+ end
+end
+
+def fun_l1_n76(x)
+ if (x < 1)
+ fun_l2_n182(x)
+ else
+ fun_l2_n997(x)
+ end
+end
+
+def fun_l1_n77(x)
+ if (x < 1)
+ fun_l2_n802(x)
+ else
+ fun_l2_n409(x)
+ end
+end
+
+def fun_l1_n78(x)
+ if (x < 1)
+ fun_l2_n163(x)
+ else
+ fun_l2_n417(x)
+ end
+end
+
+def fun_l1_n79(x)
+ if (x < 1)
+ fun_l2_n328(x)
+ else
+ fun_l2_n688(x)
+ end
+end
+
+def fun_l1_n80(x)
+ if (x < 1)
+ fun_l2_n699(x)
+ else
+ fun_l2_n356(x)
+ end
+end
+
+def fun_l1_n81(x)
+ if (x < 1)
+ fun_l2_n44(x)
+ else
+ fun_l2_n302(x)
+ end
+end
+
+def fun_l1_n82(x)
+ if (x < 1)
+ fun_l2_n597(x)
+ else
+ fun_l2_n892(x)
+ end
+end
+
+def fun_l1_n83(x)
+ if (x < 1)
+ fun_l2_n494(x)
+ else
+ fun_l2_n547(x)
+ end
+end
+
+def fun_l1_n84(x)
+ if (x < 1)
+ fun_l2_n631(x)
+ else
+ fun_l2_n922(x)
+ end
+end
+
+def fun_l1_n85(x)
+ if (x < 1)
+ fun_l2_n797(x)
+ else
+ fun_l2_n874(x)
+ end
+end
+
+def fun_l1_n86(x)
+ if (x < 1)
+ fun_l2_n209(x)
+ else
+ fun_l2_n365(x)
+ end
+end
+
+def fun_l1_n87(x)
+ if (x < 1)
+ fun_l2_n516(x)
+ else
+ fun_l2_n371(x)
+ end
+end
+
+def fun_l1_n88(x)
+ if (x < 1)
+ fun_l2_n654(x)
+ else
+ fun_l2_n88(x)
+ end
+end
+
+def fun_l1_n89(x)
+ if (x < 1)
+ fun_l2_n70(x)
+ else
+ fun_l2_n521(x)
+ end
+end
+
+def fun_l1_n90(x)
+ if (x < 1)
+ fun_l2_n666(x)
+ else
+ fun_l2_n749(x)
+ end
+end
+
+def fun_l1_n91(x)
+ if (x < 1)
+ fun_l2_n504(x)
+ else
+ fun_l2_n339(x)
+ end
+end
+
+def fun_l1_n92(x)
+ if (x < 1)
+ fun_l2_n734(x)
+ else
+ fun_l2_n277(x)
+ end
+end
+
+def fun_l1_n93(x)
+ if (x < 1)
+ fun_l2_n300(x)
+ else
+ fun_l2_n826(x)
+ end
+end
+
+def fun_l1_n94(x)
+ if (x < 1)
+ fun_l2_n733(x)
+ else
+ fun_l2_n560(x)
+ end
+end
+
+def fun_l1_n95(x)
+ if (x < 1)
+ fun_l2_n834(x)
+ else
+ fun_l2_n644(x)
+ end
+end
+
+def fun_l1_n96(x)
+ if (x < 1)
+ fun_l2_n183(x)
+ else
+ fun_l2_n238(x)
+ end
+end
+
+def fun_l1_n97(x)
+ if (x < 1)
+ fun_l2_n372(x)
+ else
+ fun_l2_n753(x)
+ end
+end
+
+def fun_l1_n98(x)
+ if (x < 1)
+ fun_l2_n208(x)
+ else
+ fun_l2_n543(x)
+ end
+end
+
+def fun_l1_n99(x)
+ if (x < 1)
+ fun_l2_n38(x)
+ else
+ fun_l2_n974(x)
+ end
+end
+
+def fun_l1_n100(x)
+ if (x < 1)
+ fun_l2_n620(x)
+ else
+ fun_l2_n503(x)
+ end
+end
+
+def fun_l1_n101(x)
+ if (x < 1)
+ fun_l2_n248(x)
+ else
+ fun_l2_n189(x)
+ end
+end
+
+def fun_l1_n102(x)
+ if (x < 1)
+ fun_l2_n489(x)
+ else
+ fun_l2_n390(x)
+ end
+end
+
+def fun_l1_n103(x)
+ if (x < 1)
+ fun_l2_n452(x)
+ else
+ fun_l2_n22(x)
+ end
+end
+
+def fun_l1_n104(x)
+ if (x < 1)
+ fun_l2_n542(x)
+ else
+ fun_l2_n135(x)
+ end
+end
+
+def fun_l1_n105(x)
+ if (x < 1)
+ fun_l2_n988(x)
+ else
+ fun_l2_n118(x)
+ end
+end
+
+def fun_l1_n106(x)
+ if (x < 1)
+ fun_l2_n817(x)
+ else
+ fun_l2_n534(x)
+ end
+end
+
+def fun_l1_n107(x)
+ if (x < 1)
+ fun_l2_n812(x)
+ else
+ fun_l2_n206(x)
+ end
+end
+
+def fun_l1_n108(x)
+ if (x < 1)
+ fun_l2_n514(x)
+ else
+ fun_l2_n300(x)
+ end
+end
+
+def fun_l1_n109(x)
+ if (x < 1)
+ fun_l2_n482(x)
+ else
+ fun_l2_n376(x)
+ end
+end
+
+def fun_l1_n110(x)
+ if (x < 1)
+ fun_l2_n571(x)
+ else
+ fun_l2_n758(x)
+ end
+end
+
+def fun_l1_n111(x)
+ if (x < 1)
+ fun_l2_n971(x)
+ else
+ fun_l2_n811(x)
+ end
+end
+
+def fun_l1_n112(x)
+ if (x < 1)
+ fun_l2_n23(x)
+ else
+ fun_l2_n844(x)
+ end
+end
+
+def fun_l1_n113(x)
+ if (x < 1)
+ fun_l2_n865(x)
+ else
+ fun_l2_n149(x)
+ end
+end
+
+def fun_l1_n114(x)
+ if (x < 1)
+ fun_l2_n930(x)
+ else
+ fun_l2_n327(x)
+ end
+end
+
+def fun_l1_n115(x)
+ if (x < 1)
+ fun_l2_n67(x)
+ else
+ fun_l2_n442(x)
+ end
+end
+
+def fun_l1_n116(x)
+ if (x < 1)
+ fun_l2_n278(x)
+ else
+ fun_l2_n653(x)
+ end
+end
+
+def fun_l1_n117(x)
+ if (x < 1)
+ fun_l2_n457(x)
+ else
+ fun_l2_n179(x)
+ end
+end
+
+def fun_l1_n118(x)
+ if (x < 1)
+ fun_l2_n384(x)
+ else
+ fun_l2_n594(x)
+ end
+end
+
+def fun_l1_n119(x)
+ if (x < 1)
+ fun_l2_n361(x)
+ else
+ fun_l2_n770(x)
+ end
+end
+
+def fun_l1_n120(x)
+ if (x < 1)
+ fun_l2_n24(x)
+ else
+ fun_l2_n269(x)
+ end
+end
+
+def fun_l1_n121(x)
+ if (x < 1)
+ fun_l2_n57(x)
+ else
+ fun_l2_n2(x)
+ end
+end
+
+def fun_l1_n122(x)
+ if (x < 1)
+ fun_l2_n421(x)
+ else
+ fun_l2_n339(x)
+ end
+end
+
+def fun_l1_n123(x)
+ if (x < 1)
+ fun_l2_n623(x)
+ else
+ fun_l2_n985(x)
+ end
+end
+
+def fun_l1_n124(x)
+ if (x < 1)
+ fun_l2_n609(x)
+ else
+ fun_l2_n530(x)
+ end
+end
+
+def fun_l1_n125(x)
+ if (x < 1)
+ fun_l2_n565(x)
+ else
+ fun_l2_n155(x)
+ end
+end
+
+def fun_l1_n126(x)
+ if (x < 1)
+ fun_l2_n135(x)
+ else
+ fun_l2_n971(x)
+ end
+end
+
+def fun_l1_n127(x)
+ if (x < 1)
+ fun_l2_n691(x)
+ else
+ fun_l2_n503(x)
+ end
+end
+
+def fun_l1_n128(x)
+ if (x < 1)
+ fun_l2_n555(x)
+ else
+ fun_l2_n67(x)
+ end
+end
+
+def fun_l1_n129(x)
+ if (x < 1)
+ fun_l2_n95(x)
+ else
+ fun_l2_n192(x)
+ end
+end
+
+def fun_l1_n130(x)
+ if (x < 1)
+ fun_l2_n432(x)
+ else
+ fun_l2_n771(x)
+ end
+end
+
+def fun_l1_n131(x)
+ if (x < 1)
+ fun_l2_n993(x)
+ else
+ fun_l2_n539(x)
+ end
+end
+
+def fun_l1_n132(x)
+ if (x < 1)
+ fun_l2_n809(x)
+ else
+ fun_l2_n902(x)
+ end
+end
+
+def fun_l1_n133(x)
+ if (x < 1)
+ fun_l2_n95(x)
+ else
+ fun_l2_n928(x)
+ end
+end
+
+def fun_l1_n134(x)
+ if (x < 1)
+ fun_l2_n781(x)
+ else
+ fun_l2_n832(x)
+ end
+end
+
+def fun_l1_n135(x)
+ if (x < 1)
+ fun_l2_n231(x)
+ else
+ fun_l2_n392(x)
+ end
+end
+
+def fun_l1_n136(x)
+ if (x < 1)
+ fun_l2_n102(x)
+ else
+ fun_l2_n449(x)
+ end
+end
+
+def fun_l1_n137(x)
+ if (x < 1)
+ fun_l2_n196(x)
+ else
+ fun_l2_n909(x)
+ end
+end
+
+def fun_l1_n138(x)
+ if (x < 1)
+ fun_l2_n449(x)
+ else
+ fun_l2_n190(x)
+ end
+end
+
+def fun_l1_n139(x)
+ if (x < 1)
+ fun_l2_n638(x)
+ else
+ fun_l2_n149(x)
+ end
+end
+
+def fun_l1_n140(x)
+ if (x < 1)
+ fun_l2_n523(x)
+ else
+ fun_l2_n297(x)
+ end
+end
+
+def fun_l1_n141(x)
+ if (x < 1)
+ fun_l2_n476(x)
+ else
+ fun_l2_n161(x)
+ end
+end
+
+def fun_l1_n142(x)
+ if (x < 1)
+ fun_l2_n893(x)
+ else
+ fun_l2_n686(x)
+ end
+end
+
+def fun_l1_n143(x)
+ if (x < 1)
+ fun_l2_n958(x)
+ else
+ fun_l2_n899(x)
+ end
+end
+
+def fun_l1_n144(x)
+ if (x < 1)
+ fun_l2_n104(x)
+ else
+ fun_l2_n912(x)
+ end
+end
+
+def fun_l1_n145(x)
+ if (x < 1)
+ fun_l2_n332(x)
+ else
+ fun_l2_n579(x)
+ end
+end
+
+def fun_l1_n146(x)
+ if (x < 1)
+ fun_l2_n40(x)
+ else
+ fun_l2_n468(x)
+ end
+end
+
+def fun_l1_n147(x)
+ if (x < 1)
+ fun_l2_n771(x)
+ else
+ fun_l2_n314(x)
+ end
+end
+
+def fun_l1_n148(x)
+ if (x < 1)
+ fun_l2_n340(x)
+ else
+ fun_l2_n203(x)
+ end
+end
+
+def fun_l1_n149(x)
+ if (x < 1)
+ fun_l2_n952(x)
+ else
+ fun_l2_n265(x)
+ end
+end
+
+def fun_l1_n150(x)
+ if (x < 1)
+ fun_l2_n11(x)
+ else
+ fun_l2_n303(x)
+ end
+end
+
+def fun_l1_n151(x)
+ if (x < 1)
+ fun_l2_n394(x)
+ else
+ fun_l2_n317(x)
+ end
+end
+
+def fun_l1_n152(x)
+ if (x < 1)
+ fun_l2_n140(x)
+ else
+ fun_l2_n906(x)
+ end
+end
+
+def fun_l1_n153(x)
+ if (x < 1)
+ fun_l2_n75(x)
+ else
+ fun_l2_n485(x)
+ end
+end
+
+def fun_l1_n154(x)
+ if (x < 1)
+ fun_l2_n842(x)
+ else
+ fun_l2_n370(x)
+ end
+end
+
+def fun_l1_n155(x)
+ if (x < 1)
+ fun_l2_n346(x)
+ else
+ fun_l2_n833(x)
+ end
+end
+
+def fun_l1_n156(x)
+ if (x < 1)
+ fun_l2_n433(x)
+ else
+ fun_l2_n373(x)
+ end
+end
+
+def fun_l1_n157(x)
+ if (x < 1)
+ fun_l2_n978(x)
+ else
+ fun_l2_n99(x)
+ end
+end
+
+def fun_l1_n158(x)
+ if (x < 1)
+ fun_l2_n540(x)
+ else
+ fun_l2_n987(x)
+ end
+end
+
+def fun_l1_n159(x)
+ if (x < 1)
+ fun_l2_n785(x)
+ else
+ fun_l2_n478(x)
+ end
+end
+
+def fun_l1_n160(x)
+ if (x < 1)
+ fun_l2_n282(x)
+ else
+ fun_l2_n222(x)
+ end
+end
+
+def fun_l1_n161(x)
+ if (x < 1)
+ fun_l2_n29(x)
+ else
+ fun_l2_n946(x)
+ end
+end
+
+def fun_l1_n162(x)
+ if (x < 1)
+ fun_l2_n314(x)
+ else
+ fun_l2_n758(x)
+ end
+end
+
+def fun_l1_n163(x)
+ if (x < 1)
+ fun_l2_n861(x)
+ else
+ fun_l2_n799(x)
+ end
+end
+
+def fun_l1_n164(x)
+ if (x < 1)
+ fun_l2_n403(x)
+ else
+ fun_l2_n413(x)
+ end
+end
+
+def fun_l1_n165(x)
+ if (x < 1)
+ fun_l2_n160(x)
+ else
+ fun_l2_n794(x)
+ end
+end
+
+def fun_l1_n166(x)
+ if (x < 1)
+ fun_l2_n114(x)
+ else
+ fun_l2_n238(x)
+ end
+end
+
+def fun_l1_n167(x)
+ if (x < 1)
+ fun_l2_n806(x)
+ else
+ fun_l2_n233(x)
+ end
+end
+
+def fun_l1_n168(x)
+ if (x < 1)
+ fun_l2_n871(x)
+ else
+ fun_l2_n53(x)
+ end
+end
+
+def fun_l1_n169(x)
+ if (x < 1)
+ fun_l2_n644(x)
+ else
+ fun_l2_n503(x)
+ end
+end
+
+def fun_l1_n170(x)
+ if (x < 1)
+ fun_l2_n172(x)
+ else
+ fun_l2_n289(x)
+ end
+end
+
+def fun_l1_n171(x)
+ if (x < 1)
+ fun_l2_n920(x)
+ else
+ fun_l2_n851(x)
+ end
+end
+
+def fun_l1_n172(x)
+ if (x < 1)
+ fun_l2_n552(x)
+ else
+ fun_l2_n822(x)
+ end
+end
+
+def fun_l1_n173(x)
+ if (x < 1)
+ fun_l2_n747(x)
+ else
+ fun_l2_n265(x)
+ end
+end
+
+def fun_l1_n174(x)
+ if (x < 1)
+ fun_l2_n287(x)
+ else
+ fun_l2_n762(x)
+ end
+end
+
+def fun_l1_n175(x)
+ if (x < 1)
+ fun_l2_n627(x)
+ else
+ fun_l2_n951(x)
+ end
+end
+
+def fun_l1_n176(x)
+ if (x < 1)
+ fun_l2_n459(x)
+ else
+ fun_l2_n962(x)
+ end
+end
+
+def fun_l1_n177(x)
+ if (x < 1)
+ fun_l2_n214(x)
+ else
+ fun_l2_n145(x)
+ end
+end
+
+def fun_l1_n178(x)
+ if (x < 1)
+ fun_l2_n620(x)
+ else
+ fun_l2_n995(x)
+ end
+end
+
+def fun_l1_n179(x)
+ if (x < 1)
+ fun_l2_n136(x)
+ else
+ fun_l2_n283(x)
+ end
+end
+
+def fun_l1_n180(x)
+ if (x < 1)
+ fun_l2_n377(x)
+ else
+ fun_l2_n672(x)
+ end
+end
+
+def fun_l1_n181(x)
+ if (x < 1)
+ fun_l2_n218(x)
+ else
+ fun_l2_n434(x)
+ end
+end
+
+def fun_l1_n182(x)
+ if (x < 1)
+ fun_l2_n522(x)
+ else
+ fun_l2_n525(x)
+ end
+end
+
+def fun_l1_n183(x)
+ if (x < 1)
+ fun_l2_n648(x)
+ else
+ fun_l2_n725(x)
+ end
+end
+
+def fun_l1_n184(x)
+ if (x < 1)
+ fun_l2_n579(x)
+ else
+ fun_l2_n974(x)
+ end
+end
+
+def fun_l1_n185(x)
+ if (x < 1)
+ fun_l2_n10(x)
+ else
+ fun_l2_n514(x)
+ end
+end
+
+def fun_l1_n186(x)
+ if (x < 1)
+ fun_l2_n829(x)
+ else
+ fun_l2_n754(x)
+ end
+end
+
+def fun_l1_n187(x)
+ if (x < 1)
+ fun_l2_n380(x)
+ else
+ fun_l2_n401(x)
+ end
+end
+
+def fun_l1_n188(x)
+ if (x < 1)
+ fun_l2_n839(x)
+ else
+ fun_l2_n453(x)
+ end
+end
+
+def fun_l1_n189(x)
+ if (x < 1)
+ fun_l2_n553(x)
+ else
+ fun_l2_n553(x)
+ end
+end
+
+def fun_l1_n190(x)
+ if (x < 1)
+ fun_l2_n972(x)
+ else
+ fun_l2_n187(x)
+ end
+end
+
+def fun_l1_n191(x)
+ if (x < 1)
+ fun_l2_n275(x)
+ else
+ fun_l2_n11(x)
+ end
+end
+
+def fun_l1_n192(x)
+ if (x < 1)
+ fun_l2_n1(x)
+ else
+ fun_l2_n927(x)
+ end
+end
+
+def fun_l1_n193(x)
+ if (x < 1)
+ fun_l2_n569(x)
+ else
+ fun_l2_n557(x)
+ end
+end
+
+def fun_l1_n194(x)
+ if (x < 1)
+ fun_l2_n380(x)
+ else
+ fun_l2_n187(x)
+ end
+end
+
+def fun_l1_n195(x)
+ if (x < 1)
+ fun_l2_n297(x)
+ else
+ fun_l2_n813(x)
+ end
+end
+
+def fun_l1_n196(x)
+ if (x < 1)
+ fun_l2_n565(x)
+ else
+ fun_l2_n514(x)
+ end
+end
+
+def fun_l1_n197(x)
+ if (x < 1)
+ fun_l2_n473(x)
+ else
+ fun_l2_n64(x)
+ end
+end
+
+def fun_l1_n198(x)
+ if (x < 1)
+ fun_l2_n182(x)
+ else
+ fun_l2_n363(x)
+ end
+end
+
+def fun_l1_n199(x)
+ if (x < 1)
+ fun_l2_n660(x)
+ else
+ fun_l2_n506(x)
+ end
+end
+
+def fun_l1_n200(x)
+ if (x < 1)
+ fun_l2_n834(x)
+ else
+ fun_l2_n348(x)
+ end
+end
+
+def fun_l1_n201(x)
+ if (x < 1)
+ fun_l2_n403(x)
+ else
+ fun_l2_n432(x)
+ end
+end
+
+def fun_l1_n202(x)
+ if (x < 1)
+ fun_l2_n115(x)
+ else
+ fun_l2_n145(x)
+ end
+end
+
+def fun_l1_n203(x)
+ if (x < 1)
+ fun_l2_n637(x)
+ else
+ fun_l2_n4(x)
+ end
+end
+
+def fun_l1_n204(x)
+ if (x < 1)
+ fun_l2_n951(x)
+ else
+ fun_l2_n753(x)
+ end
+end
+
+def fun_l1_n205(x)
+ if (x < 1)
+ fun_l2_n703(x)
+ else
+ fun_l2_n563(x)
+ end
+end
+
+def fun_l1_n206(x)
+ if (x < 1)
+ fun_l2_n614(x)
+ else
+ fun_l2_n563(x)
+ end
+end
+
+def fun_l1_n207(x)
+ if (x < 1)
+ fun_l2_n210(x)
+ else
+ fun_l2_n139(x)
+ end
+end
+
+def fun_l1_n208(x)
+ if (x < 1)
+ fun_l2_n471(x)
+ else
+ fun_l2_n346(x)
+ end
+end
+
+def fun_l1_n209(x)
+ if (x < 1)
+ fun_l2_n922(x)
+ else
+ fun_l2_n54(x)
+ end
+end
+
+def fun_l1_n210(x)
+ if (x < 1)
+ fun_l2_n494(x)
+ else
+ fun_l2_n41(x)
+ end
+end
+
+def fun_l1_n211(x)
+ if (x < 1)
+ fun_l2_n87(x)
+ else
+ fun_l2_n190(x)
+ end
+end
+
+def fun_l1_n212(x)
+ if (x < 1)
+ fun_l2_n458(x)
+ else
+ fun_l2_n885(x)
+ end
+end
+
+def fun_l1_n213(x)
+ if (x < 1)
+ fun_l2_n48(x)
+ else
+ fun_l2_n225(x)
+ end
+end
+
+def fun_l1_n214(x)
+ if (x < 1)
+ fun_l2_n706(x)
+ else
+ fun_l2_n694(x)
+ end
+end
+
+def fun_l1_n215(x)
+ if (x < 1)
+ fun_l2_n116(x)
+ else
+ fun_l2_n233(x)
+ end
+end
+
+def fun_l1_n216(x)
+ if (x < 1)
+ fun_l2_n279(x)
+ else
+ fun_l2_n857(x)
+ end
+end
+
+def fun_l1_n217(x)
+ if (x < 1)
+ fun_l2_n643(x)
+ else
+ fun_l2_n289(x)
+ end
+end
+
+def fun_l1_n218(x)
+ if (x < 1)
+ fun_l2_n535(x)
+ else
+ fun_l2_n833(x)
+ end
+end
+
+def fun_l1_n219(x)
+ if (x < 1)
+ fun_l2_n478(x)
+ else
+ fun_l2_n793(x)
+ end
+end
+
+def fun_l1_n220(x)
+ if (x < 1)
+ fun_l2_n57(x)
+ else
+ fun_l2_n64(x)
+ end
+end
+
+def fun_l1_n221(x)
+ if (x < 1)
+ fun_l2_n36(x)
+ else
+ fun_l2_n74(x)
+ end
+end
+
+def fun_l1_n222(x)
+ if (x < 1)
+ fun_l2_n438(x)
+ else
+ fun_l2_n616(x)
+ end
+end
+
+def fun_l1_n223(x)
+ if (x < 1)
+ fun_l2_n900(x)
+ else
+ fun_l2_n744(x)
+ end
+end
+
+def fun_l1_n224(x)
+ if (x < 1)
+ fun_l2_n780(x)
+ else
+ fun_l2_n213(x)
+ end
+end
+
+def fun_l1_n225(x)
+ if (x < 1)
+ fun_l2_n916(x)
+ else
+ fun_l2_n471(x)
+ end
+end
+
+def fun_l1_n226(x)
+ if (x < 1)
+ fun_l2_n236(x)
+ else
+ fun_l2_n980(x)
+ end
+end
+
+def fun_l1_n227(x)
+ if (x < 1)
+ fun_l2_n28(x)
+ else
+ fun_l2_n291(x)
+ end
+end
+
+def fun_l1_n228(x)
+ if (x < 1)
+ fun_l2_n35(x)
+ else
+ fun_l2_n353(x)
+ end
+end
+
+def fun_l1_n229(x)
+ if (x < 1)
+ fun_l2_n404(x)
+ else
+ fun_l2_n254(x)
+ end
+end
+
+def fun_l1_n230(x)
+ if (x < 1)
+ fun_l2_n641(x)
+ else
+ fun_l2_n464(x)
+ end
+end
+
+def fun_l1_n231(x)
+ if (x < 1)
+ fun_l2_n592(x)
+ else
+ fun_l2_n646(x)
+ end
+end
+
+def fun_l1_n232(x)
+ if (x < 1)
+ fun_l2_n162(x)
+ else
+ fun_l2_n215(x)
+ end
+end
+
+def fun_l1_n233(x)
+ if (x < 1)
+ fun_l2_n219(x)
+ else
+ fun_l2_n772(x)
+ end
+end
+
+def fun_l1_n234(x)
+ if (x < 1)
+ fun_l2_n304(x)
+ else
+ fun_l2_n963(x)
+ end
+end
+
+def fun_l1_n235(x)
+ if (x < 1)
+ fun_l2_n610(x)
+ else
+ fun_l2_n716(x)
+ end
+end
+
+def fun_l1_n236(x)
+ if (x < 1)
+ fun_l2_n151(x)
+ else
+ fun_l2_n498(x)
+ end
+end
+
+def fun_l1_n237(x)
+ if (x < 1)
+ fun_l2_n288(x)
+ else
+ fun_l2_n261(x)
+ end
+end
+
+def fun_l1_n238(x)
+ if (x < 1)
+ fun_l2_n139(x)
+ else
+ fun_l2_n18(x)
+ end
+end
+
+def fun_l1_n239(x)
+ if (x < 1)
+ fun_l2_n559(x)
+ else
+ fun_l2_n148(x)
+ end
+end
+
+def fun_l1_n240(x)
+ if (x < 1)
+ fun_l2_n520(x)
+ else
+ fun_l2_n250(x)
+ end
+end
+
+def fun_l1_n241(x)
+ if (x < 1)
+ fun_l2_n42(x)
+ else
+ fun_l2_n196(x)
+ end
+end
+
+def fun_l1_n242(x)
+ if (x < 1)
+ fun_l2_n16(x)
+ else
+ fun_l2_n540(x)
+ end
+end
+
+def fun_l1_n243(x)
+ if (x < 1)
+ fun_l2_n539(x)
+ else
+ fun_l2_n890(x)
+ end
+end
+
+def fun_l1_n244(x)
+ if (x < 1)
+ fun_l2_n559(x)
+ else
+ fun_l2_n423(x)
+ end
+end
+
+def fun_l1_n245(x)
+ if (x < 1)
+ fun_l2_n110(x)
+ else
+ fun_l2_n711(x)
+ end
+end
+
+def fun_l1_n246(x)
+ if (x < 1)
+ fun_l2_n151(x)
+ else
+ fun_l2_n407(x)
+ end
+end
+
+def fun_l1_n247(x)
+ if (x < 1)
+ fun_l2_n118(x)
+ else
+ fun_l2_n209(x)
+ end
+end
+
+def fun_l1_n248(x)
+ if (x < 1)
+ fun_l2_n764(x)
+ else
+ fun_l2_n932(x)
+ end
+end
+
+def fun_l1_n249(x)
+ if (x < 1)
+ fun_l2_n991(x)
+ else
+ fun_l2_n828(x)
+ end
+end
+
+def fun_l1_n250(x)
+ if (x < 1)
+ fun_l2_n354(x)
+ else
+ fun_l2_n53(x)
+ end
+end
+
+def fun_l1_n251(x)
+ if (x < 1)
+ fun_l2_n63(x)
+ else
+ fun_l2_n292(x)
+ end
+end
+
+def fun_l1_n252(x)
+ if (x < 1)
+ fun_l2_n874(x)
+ else
+ fun_l2_n544(x)
+ end
+end
+
+def fun_l1_n253(x)
+ if (x < 1)
+ fun_l2_n336(x)
+ else
+ fun_l2_n57(x)
+ end
+end
+
+def fun_l1_n254(x)
+ if (x < 1)
+ fun_l2_n302(x)
+ else
+ fun_l2_n90(x)
+ end
+end
+
+def fun_l1_n255(x)
+ if (x < 1)
+ fun_l2_n122(x)
+ else
+ fun_l2_n888(x)
+ end
+end
+
+def fun_l1_n256(x)
+ if (x < 1)
+ fun_l2_n326(x)
+ else
+ fun_l2_n616(x)
+ end
+end
+
+def fun_l1_n257(x)
+ if (x < 1)
+ fun_l2_n77(x)
+ else
+ fun_l2_n622(x)
+ end
+end
+
+def fun_l1_n258(x)
+ if (x < 1)
+ fun_l2_n785(x)
+ else
+ fun_l2_n229(x)
+ end
+end
+
+def fun_l1_n259(x)
+ if (x < 1)
+ fun_l2_n504(x)
+ else
+ fun_l2_n766(x)
+ end
+end
+
+def fun_l1_n260(x)
+ if (x < 1)
+ fun_l2_n857(x)
+ else
+ fun_l2_n823(x)
+ end
+end
+
+def fun_l1_n261(x)
+ if (x < 1)
+ fun_l2_n72(x)
+ else
+ fun_l2_n875(x)
+ end
+end
+
+def fun_l1_n262(x)
+ if (x < 1)
+ fun_l2_n215(x)
+ else
+ fun_l2_n549(x)
+ end
+end
+
+def fun_l1_n263(x)
+ if (x < 1)
+ fun_l2_n232(x)
+ else
+ fun_l2_n96(x)
+ end
+end
+
+def fun_l1_n264(x)
+ if (x < 1)
+ fun_l2_n183(x)
+ else
+ fun_l2_n351(x)
+ end
+end
+
+def fun_l1_n265(x)
+ if (x < 1)
+ fun_l2_n906(x)
+ else
+ fun_l2_n154(x)
+ end
+end
+
+def fun_l1_n266(x)
+ if (x < 1)
+ fun_l2_n234(x)
+ else
+ fun_l2_n547(x)
+ end
+end
+
+def fun_l1_n267(x)
+ if (x < 1)
+ fun_l2_n882(x)
+ else
+ fun_l2_n802(x)
+ end
+end
+
+def fun_l1_n268(x)
+ if (x < 1)
+ fun_l2_n844(x)
+ else
+ fun_l2_n430(x)
+ end
+end
+
+def fun_l1_n269(x)
+ if (x < 1)
+ fun_l2_n781(x)
+ else
+ fun_l2_n738(x)
+ end
+end
+
+def fun_l1_n270(x)
+ if (x < 1)
+ fun_l2_n88(x)
+ else
+ fun_l2_n439(x)
+ end
+end
+
+def fun_l1_n271(x)
+ if (x < 1)
+ fun_l2_n334(x)
+ else
+ fun_l2_n508(x)
+ end
+end
+
+def fun_l1_n272(x)
+ if (x < 1)
+ fun_l2_n871(x)
+ else
+ fun_l2_n562(x)
+ end
+end
+
+def fun_l1_n273(x)
+ if (x < 1)
+ fun_l2_n328(x)
+ else
+ fun_l2_n356(x)
+ end
+end
+
+def fun_l1_n274(x)
+ if (x < 1)
+ fun_l2_n654(x)
+ else
+ fun_l2_n511(x)
+ end
+end
+
+def fun_l1_n275(x)
+ if (x < 1)
+ fun_l2_n309(x)
+ else
+ fun_l2_n840(x)
+ end
+end
+
+def fun_l1_n276(x)
+ if (x < 1)
+ fun_l2_n729(x)
+ else
+ fun_l2_n72(x)
+ end
+end
+
+def fun_l1_n277(x)
+ if (x < 1)
+ fun_l2_n993(x)
+ else
+ fun_l2_n858(x)
+ end
+end
+
+def fun_l1_n278(x)
+ if (x < 1)
+ fun_l2_n664(x)
+ else
+ fun_l2_n50(x)
+ end
+end
+
+def fun_l1_n279(x)
+ if (x < 1)
+ fun_l2_n225(x)
+ else
+ fun_l2_n403(x)
+ end
+end
+
+def fun_l1_n280(x)
+ if (x < 1)
+ fun_l2_n780(x)
+ else
+ fun_l2_n396(x)
+ end
+end
+
+def fun_l1_n281(x)
+ if (x < 1)
+ fun_l2_n114(x)
+ else
+ fun_l2_n114(x)
+ end
+end
+
+def fun_l1_n282(x)
+ if (x < 1)
+ fun_l2_n568(x)
+ else
+ fun_l2_n610(x)
+ end
+end
+
+def fun_l1_n283(x)
+ if (x < 1)
+ fun_l2_n539(x)
+ else
+ fun_l2_n990(x)
+ end
+end
+
+def fun_l1_n284(x)
+ if (x < 1)
+ fun_l2_n773(x)
+ else
+ fun_l2_n622(x)
+ end
+end
+
+def fun_l1_n285(x)
+ if (x < 1)
+ fun_l2_n695(x)
+ else
+ fun_l2_n101(x)
+ end
+end
+
+def fun_l1_n286(x)
+ if (x < 1)
+ fun_l2_n239(x)
+ else
+ fun_l2_n242(x)
+ end
+end
+
+def fun_l1_n287(x)
+ if (x < 1)
+ fun_l2_n191(x)
+ else
+ fun_l2_n839(x)
+ end
+end
+
+def fun_l1_n288(x)
+ if (x < 1)
+ fun_l2_n246(x)
+ else
+ fun_l2_n179(x)
+ end
+end
+
+def fun_l1_n289(x)
+ if (x < 1)
+ fun_l2_n300(x)
+ else
+ fun_l2_n975(x)
+ end
+end
+
+def fun_l1_n290(x)
+ if (x < 1)
+ fun_l2_n436(x)
+ else
+ fun_l2_n14(x)
+ end
+end
+
+def fun_l1_n291(x)
+ if (x < 1)
+ fun_l2_n33(x)
+ else
+ fun_l2_n303(x)
+ end
+end
+
+def fun_l1_n292(x)
+ if (x < 1)
+ fun_l2_n462(x)
+ else
+ fun_l2_n399(x)
+ end
+end
+
+def fun_l1_n293(x)
+ if (x < 1)
+ fun_l2_n782(x)
+ else
+ fun_l2_n521(x)
+ end
+end
+
+def fun_l1_n294(x)
+ if (x < 1)
+ fun_l2_n995(x)
+ else
+ fun_l2_n944(x)
+ end
+end
+
+def fun_l1_n295(x)
+ if (x < 1)
+ fun_l2_n700(x)
+ else
+ fun_l2_n250(x)
+ end
+end
+
+def fun_l1_n296(x)
+ if (x < 1)
+ fun_l2_n866(x)
+ else
+ fun_l2_n566(x)
+ end
+end
+
+def fun_l1_n297(x)
+ if (x < 1)
+ fun_l2_n373(x)
+ else
+ fun_l2_n881(x)
+ end
+end
+
+def fun_l1_n298(x)
+ if (x < 1)
+ fun_l2_n382(x)
+ else
+ fun_l2_n729(x)
+ end
+end
+
+def fun_l1_n299(x)
+ if (x < 1)
+ fun_l2_n878(x)
+ else
+ fun_l2_n192(x)
+ end
+end
+
+def fun_l1_n300(x)
+ if (x < 1)
+ fun_l2_n65(x)
+ else
+ fun_l2_n434(x)
+ end
+end
+
+def fun_l1_n301(x)
+ if (x < 1)
+ fun_l2_n513(x)
+ else
+ fun_l2_n617(x)
+ end
+end
+
+def fun_l1_n302(x)
+ if (x < 1)
+ fun_l2_n972(x)
+ else
+ fun_l2_n482(x)
+ end
+end
+
+def fun_l1_n303(x)
+ if (x < 1)
+ fun_l2_n533(x)
+ else
+ fun_l2_n774(x)
+ end
+end
+
+def fun_l1_n304(x)
+ if (x < 1)
+ fun_l2_n439(x)
+ else
+ fun_l2_n351(x)
+ end
+end
+
+def fun_l1_n305(x)
+ if (x < 1)
+ fun_l2_n181(x)
+ else
+ fun_l2_n74(x)
+ end
+end
+
+def fun_l1_n306(x)
+ if (x < 1)
+ fun_l2_n117(x)
+ else
+ fun_l2_n962(x)
+ end
+end
+
+def fun_l1_n307(x)
+ if (x < 1)
+ fun_l2_n499(x)
+ else
+ fun_l2_n183(x)
+ end
+end
+
+def fun_l1_n308(x)
+ if (x < 1)
+ fun_l2_n358(x)
+ else
+ fun_l2_n226(x)
+ end
+end
+
+def fun_l1_n309(x)
+ if (x < 1)
+ fun_l2_n227(x)
+ else
+ fun_l2_n425(x)
+ end
+end
+
+def fun_l1_n310(x)
+ if (x < 1)
+ fun_l2_n724(x)
+ else
+ fun_l2_n278(x)
+ end
+end
+
+def fun_l1_n311(x)
+ if (x < 1)
+ fun_l2_n784(x)
+ else
+ fun_l2_n888(x)
+ end
+end
+
+def fun_l1_n312(x)
+ if (x < 1)
+ fun_l2_n952(x)
+ else
+ fun_l2_n849(x)
+ end
+end
+
+def fun_l1_n313(x)
+ if (x < 1)
+ fun_l2_n921(x)
+ else
+ fun_l2_n31(x)
+ end
+end
+
+def fun_l1_n314(x)
+ if (x < 1)
+ fun_l2_n469(x)
+ else
+ fun_l2_n856(x)
+ end
+end
+
+def fun_l1_n315(x)
+ if (x < 1)
+ fun_l2_n89(x)
+ else
+ fun_l2_n949(x)
+ end
+end
+
+def fun_l1_n316(x)
+ if (x < 1)
+ fun_l2_n216(x)
+ else
+ fun_l2_n410(x)
+ end
+end
+
+def fun_l1_n317(x)
+ if (x < 1)
+ fun_l2_n591(x)
+ else
+ fun_l2_n203(x)
+ end
+end
+
+def fun_l1_n318(x)
+ if (x < 1)
+ fun_l2_n19(x)
+ else
+ fun_l2_n461(x)
+ end
+end
+
+def fun_l1_n319(x)
+ if (x < 1)
+ fun_l2_n875(x)
+ else
+ fun_l2_n996(x)
+ end
+end
+
+def fun_l1_n320(x)
+ if (x < 1)
+ fun_l2_n696(x)
+ else
+ fun_l2_n987(x)
+ end
+end
+
+def fun_l1_n321(x)
+ if (x < 1)
+ fun_l2_n708(x)
+ else
+ fun_l2_n150(x)
+ end
+end
+
+def fun_l1_n322(x)
+ if (x < 1)
+ fun_l2_n324(x)
+ else
+ fun_l2_n814(x)
+ end
+end
+
+def fun_l1_n323(x)
+ if (x < 1)
+ fun_l2_n427(x)
+ else
+ fun_l2_n472(x)
+ end
+end
+
+def fun_l1_n324(x)
+ if (x < 1)
+ fun_l2_n847(x)
+ else
+ fun_l2_n482(x)
+ end
+end
+
+def fun_l1_n325(x)
+ if (x < 1)
+ fun_l2_n335(x)
+ else
+ fun_l2_n854(x)
+ end
+end
+
+def fun_l1_n326(x)
+ if (x < 1)
+ fun_l2_n635(x)
+ else
+ fun_l2_n276(x)
+ end
+end
+
+def fun_l1_n327(x)
+ if (x < 1)
+ fun_l2_n539(x)
+ else
+ fun_l2_n885(x)
+ end
+end
+
+def fun_l1_n328(x)
+ if (x < 1)
+ fun_l2_n979(x)
+ else
+ fun_l2_n558(x)
+ end
+end
+
+def fun_l1_n329(x)
+ if (x < 1)
+ fun_l2_n35(x)
+ else
+ fun_l2_n696(x)
+ end
+end
+
+def fun_l1_n330(x)
+ if (x < 1)
+ fun_l2_n483(x)
+ else
+ fun_l2_n218(x)
+ end
+end
+
+def fun_l1_n331(x)
+ if (x < 1)
+ fun_l2_n3(x)
+ else
+ fun_l2_n324(x)
+ end
+end
+
+def fun_l1_n332(x)
+ if (x < 1)
+ fun_l2_n396(x)
+ else
+ fun_l2_n718(x)
+ end
+end
+
+def fun_l1_n333(x)
+ if (x < 1)
+ fun_l2_n973(x)
+ else
+ fun_l2_n663(x)
+ end
+end
+
+def fun_l1_n334(x)
+ if (x < 1)
+ fun_l2_n441(x)
+ else
+ fun_l2_n468(x)
+ end
+end
+
+def fun_l1_n335(x)
+ if (x < 1)
+ fun_l2_n511(x)
+ else
+ fun_l2_n455(x)
+ end
+end
+
+def fun_l1_n336(x)
+ if (x < 1)
+ fun_l2_n732(x)
+ else
+ fun_l2_n14(x)
+ end
+end
+
+def fun_l1_n337(x)
+ if (x < 1)
+ fun_l2_n484(x)
+ else
+ fun_l2_n482(x)
+ end
+end
+
+def fun_l1_n338(x)
+ if (x < 1)
+ fun_l2_n604(x)
+ else
+ fun_l2_n683(x)
+ end
+end
+
+def fun_l1_n339(x)
+ if (x < 1)
+ fun_l2_n334(x)
+ else
+ fun_l2_n710(x)
+ end
+end
+
+def fun_l1_n340(x)
+ if (x < 1)
+ fun_l2_n233(x)
+ else
+ fun_l2_n394(x)
+ end
+end
+
+def fun_l1_n341(x)
+ if (x < 1)
+ fun_l2_n948(x)
+ else
+ fun_l2_n473(x)
+ end
+end
+
+def fun_l1_n342(x)
+ if (x < 1)
+ fun_l2_n858(x)
+ else
+ fun_l2_n466(x)
+ end
+end
+
+def fun_l1_n343(x)
+ if (x < 1)
+ fun_l2_n647(x)
+ else
+ fun_l2_n604(x)
+ end
+end
+
+def fun_l1_n344(x)
+ if (x < 1)
+ fun_l2_n872(x)
+ else
+ fun_l2_n965(x)
+ end
+end
+
+def fun_l1_n345(x)
+ if (x < 1)
+ fun_l2_n845(x)
+ else
+ fun_l2_n701(x)
+ end
+end
+
+def fun_l1_n346(x)
+ if (x < 1)
+ fun_l2_n75(x)
+ else
+ fun_l2_n332(x)
+ end
+end
+
+def fun_l1_n347(x)
+ if (x < 1)
+ fun_l2_n873(x)
+ else
+ fun_l2_n575(x)
+ end
+end
+
+def fun_l1_n348(x)
+ if (x < 1)
+ fun_l2_n303(x)
+ else
+ fun_l2_n445(x)
+ end
+end
+
+def fun_l1_n349(x)
+ if (x < 1)
+ fun_l2_n45(x)
+ else
+ fun_l2_n312(x)
+ end
+end
+
+def fun_l1_n350(x)
+ if (x < 1)
+ fun_l2_n751(x)
+ else
+ fun_l2_n316(x)
+ end
+end
+
+def fun_l1_n351(x)
+ if (x < 1)
+ fun_l2_n781(x)
+ else
+ fun_l2_n165(x)
+ end
+end
+
+def fun_l1_n352(x)
+ if (x < 1)
+ fun_l2_n120(x)
+ else
+ fun_l2_n595(x)
+ end
+end
+
+def fun_l1_n353(x)
+ if (x < 1)
+ fun_l2_n221(x)
+ else
+ fun_l2_n827(x)
+ end
+end
+
+def fun_l1_n354(x)
+ if (x < 1)
+ fun_l2_n290(x)
+ else
+ fun_l2_n27(x)
+ end
+end
+
+def fun_l1_n355(x)
+ if (x < 1)
+ fun_l2_n377(x)
+ else
+ fun_l2_n28(x)
+ end
+end
+
+def fun_l1_n356(x)
+ if (x < 1)
+ fun_l2_n474(x)
+ else
+ fun_l2_n811(x)
+ end
+end
+
+def fun_l1_n357(x)
+ if (x < 1)
+ fun_l2_n90(x)
+ else
+ fun_l2_n559(x)
+ end
+end
+
+def fun_l1_n358(x)
+ if (x < 1)
+ fun_l2_n66(x)
+ else
+ fun_l2_n234(x)
+ end
+end
+
+def fun_l1_n359(x)
+ if (x < 1)
+ fun_l2_n526(x)
+ else
+ fun_l2_n674(x)
+ end
+end
+
+def fun_l1_n360(x)
+ if (x < 1)
+ fun_l2_n449(x)
+ else
+ fun_l2_n364(x)
+ end
+end
+
+def fun_l1_n361(x)
+ if (x < 1)
+ fun_l2_n790(x)
+ else
+ fun_l2_n835(x)
+ end
+end
+
+def fun_l1_n362(x)
+ if (x < 1)
+ fun_l2_n335(x)
+ else
+ fun_l2_n22(x)
+ end
+end
+
+def fun_l1_n363(x)
+ if (x < 1)
+ fun_l2_n982(x)
+ else
+ fun_l2_n449(x)
+ end
+end
+
+def fun_l1_n364(x)
+ if (x < 1)
+ fun_l2_n980(x)
+ else
+ fun_l2_n861(x)
+ end
+end
+
+def fun_l1_n365(x)
+ if (x < 1)
+ fun_l2_n673(x)
+ else
+ fun_l2_n267(x)
+ end
+end
+
+def fun_l1_n366(x)
+ if (x < 1)
+ fun_l2_n862(x)
+ else
+ fun_l2_n559(x)
+ end
+end
+
+def fun_l1_n367(x)
+ if (x < 1)
+ fun_l2_n637(x)
+ else
+ fun_l2_n275(x)
+ end
+end
+
+def fun_l1_n368(x)
+ if (x < 1)
+ fun_l2_n370(x)
+ else
+ fun_l2_n763(x)
+ end
+end
+
+def fun_l1_n369(x)
+ if (x < 1)
+ fun_l2_n680(x)
+ else
+ fun_l2_n476(x)
+ end
+end
+
+def fun_l1_n370(x)
+ if (x < 1)
+ fun_l2_n799(x)
+ else
+ fun_l2_n724(x)
+ end
+end
+
+def fun_l1_n371(x)
+ if (x < 1)
+ fun_l2_n331(x)
+ else
+ fun_l2_n927(x)
+ end
+end
+
+def fun_l1_n372(x)
+ if (x < 1)
+ fun_l2_n875(x)
+ else
+ fun_l2_n350(x)
+ end
+end
+
+def fun_l1_n373(x)
+ if (x < 1)
+ fun_l2_n734(x)
+ else
+ fun_l2_n172(x)
+ end
+end
+
+def fun_l1_n374(x)
+ if (x < 1)
+ fun_l2_n657(x)
+ else
+ fun_l2_n765(x)
+ end
+end
+
+def fun_l1_n375(x)
+ if (x < 1)
+ fun_l2_n950(x)
+ else
+ fun_l2_n85(x)
+ end
+end
+
+def fun_l1_n376(x)
+ if (x < 1)
+ fun_l2_n276(x)
+ else
+ fun_l2_n892(x)
+ end
+end
+
+def fun_l1_n377(x)
+ if (x < 1)
+ fun_l2_n430(x)
+ else
+ fun_l2_n173(x)
+ end
+end
+
+def fun_l1_n378(x)
+ if (x < 1)
+ fun_l2_n376(x)
+ else
+ fun_l2_n876(x)
+ end
+end
+
+def fun_l1_n379(x)
+ if (x < 1)
+ fun_l2_n981(x)
+ else
+ fun_l2_n314(x)
+ end
+end
+
+def fun_l1_n380(x)
+ if (x < 1)
+ fun_l2_n680(x)
+ else
+ fun_l2_n600(x)
+ end
+end
+
+def fun_l1_n381(x)
+ if (x < 1)
+ fun_l2_n54(x)
+ else
+ fun_l2_n158(x)
+ end
+end
+
+def fun_l1_n382(x)
+ if (x < 1)
+ fun_l2_n692(x)
+ else
+ fun_l2_n673(x)
+ end
+end
+
+def fun_l1_n383(x)
+ if (x < 1)
+ fun_l2_n393(x)
+ else
+ fun_l2_n723(x)
+ end
+end
+
+def fun_l1_n384(x)
+ if (x < 1)
+ fun_l2_n899(x)
+ else
+ fun_l2_n940(x)
+ end
+end
+
+def fun_l1_n385(x)
+ if (x < 1)
+ fun_l2_n473(x)
+ else
+ fun_l2_n846(x)
+ end
+end
+
+def fun_l1_n386(x)
+ if (x < 1)
+ fun_l2_n291(x)
+ else
+ fun_l2_n864(x)
+ end
+end
+
+def fun_l1_n387(x)
+ if (x < 1)
+ fun_l2_n174(x)
+ else
+ fun_l2_n466(x)
+ end
+end
+
+def fun_l1_n388(x)
+ if (x < 1)
+ fun_l2_n883(x)
+ else
+ fun_l2_n613(x)
+ end
+end
+
+def fun_l1_n389(x)
+ if (x < 1)
+ fun_l2_n808(x)
+ else
+ fun_l2_n169(x)
+ end
+end
+
+def fun_l1_n390(x)
+ if (x < 1)
+ fun_l2_n94(x)
+ else
+ fun_l2_n93(x)
+ end
+end
+
+def fun_l1_n391(x)
+ if (x < 1)
+ fun_l2_n874(x)
+ else
+ fun_l2_n400(x)
+ end
+end
+
+def fun_l1_n392(x)
+ if (x < 1)
+ fun_l2_n473(x)
+ else
+ fun_l2_n239(x)
+ end
+end
+
+def fun_l1_n393(x)
+ if (x < 1)
+ fun_l2_n64(x)
+ else
+ fun_l2_n760(x)
+ end
+end
+
+def fun_l1_n394(x)
+ if (x < 1)
+ fun_l2_n947(x)
+ else
+ fun_l2_n354(x)
+ end
+end
+
+def fun_l1_n395(x)
+ if (x < 1)
+ fun_l2_n833(x)
+ else
+ fun_l2_n563(x)
+ end
+end
+
+def fun_l1_n396(x)
+ if (x < 1)
+ fun_l2_n429(x)
+ else
+ fun_l2_n280(x)
+ end
+end
+
+def fun_l1_n397(x)
+ if (x < 1)
+ fun_l2_n132(x)
+ else
+ fun_l2_n486(x)
+ end
+end
+
+def fun_l1_n398(x)
+ if (x < 1)
+ fun_l2_n28(x)
+ else
+ fun_l2_n135(x)
+ end
+end
+
+def fun_l1_n399(x)
+ if (x < 1)
+ fun_l2_n804(x)
+ else
+ fun_l2_n406(x)
+ end
+end
+
+def fun_l1_n400(x)
+ if (x < 1)
+ fun_l2_n661(x)
+ else
+ fun_l2_n216(x)
+ end
+end
+
+def fun_l1_n401(x)
+ if (x < 1)
+ fun_l2_n681(x)
+ else
+ fun_l2_n849(x)
+ end
+end
+
+def fun_l1_n402(x)
+ if (x < 1)
+ fun_l2_n13(x)
+ else
+ fun_l2_n205(x)
+ end
+end
+
+def fun_l1_n403(x)
+ if (x < 1)
+ fun_l2_n911(x)
+ else
+ fun_l2_n63(x)
+ end
+end
+
+def fun_l1_n404(x)
+ if (x < 1)
+ fun_l2_n518(x)
+ else
+ fun_l2_n845(x)
+ end
+end
+
+def fun_l1_n405(x)
+ if (x < 1)
+ fun_l2_n699(x)
+ else
+ fun_l2_n963(x)
+ end
+end
+
+def fun_l1_n406(x)
+ if (x < 1)
+ fun_l2_n373(x)
+ else
+ fun_l2_n485(x)
+ end
+end
+
+def fun_l1_n407(x)
+ if (x < 1)
+ fun_l2_n402(x)
+ else
+ fun_l2_n582(x)
+ end
+end
+
+def fun_l1_n408(x)
+ if (x < 1)
+ fun_l2_n802(x)
+ else
+ fun_l2_n420(x)
+ end
+end
+
+def fun_l1_n409(x)
+ if (x < 1)
+ fun_l2_n728(x)
+ else
+ fun_l2_n50(x)
+ end
+end
+
+def fun_l1_n410(x)
+ if (x < 1)
+ fun_l2_n189(x)
+ else
+ fun_l2_n588(x)
+ end
+end
+
+def fun_l1_n411(x)
+ if (x < 1)
+ fun_l2_n51(x)
+ else
+ fun_l2_n23(x)
+ end
+end
+
+def fun_l1_n412(x)
+ if (x < 1)
+ fun_l2_n548(x)
+ else
+ fun_l2_n200(x)
+ end
+end
+
+def fun_l1_n413(x)
+ if (x < 1)
+ fun_l2_n763(x)
+ else
+ fun_l2_n581(x)
+ end
+end
+
+def fun_l1_n414(x)
+ if (x < 1)
+ fun_l2_n650(x)
+ else
+ fun_l2_n535(x)
+ end
+end
+
+def fun_l1_n415(x)
+ if (x < 1)
+ fun_l2_n500(x)
+ else
+ fun_l2_n579(x)
+ end
+end
+
+def fun_l1_n416(x)
+ if (x < 1)
+ fun_l2_n573(x)
+ else
+ fun_l2_n154(x)
+ end
+end
+
+def fun_l1_n417(x)
+ if (x < 1)
+ fun_l2_n685(x)
+ else
+ fun_l2_n14(x)
+ end
+end
+
+def fun_l1_n418(x)
+ if (x < 1)
+ fun_l2_n849(x)
+ else
+ fun_l2_n91(x)
+ end
+end
+
+def fun_l1_n419(x)
+ if (x < 1)
+ fun_l2_n629(x)
+ else
+ fun_l2_n698(x)
+ end
+end
+
+def fun_l1_n420(x)
+ if (x < 1)
+ fun_l2_n273(x)
+ else
+ fun_l2_n303(x)
+ end
+end
+
+def fun_l1_n421(x)
+ if (x < 1)
+ fun_l2_n8(x)
+ else
+ fun_l2_n476(x)
+ end
+end
+
+def fun_l1_n422(x)
+ if (x < 1)
+ fun_l2_n294(x)
+ else
+ fun_l2_n338(x)
+ end
+end
+
+def fun_l1_n423(x)
+ if (x < 1)
+ fun_l2_n408(x)
+ else
+ fun_l2_n187(x)
+ end
+end
+
+def fun_l1_n424(x)
+ if (x < 1)
+ fun_l2_n349(x)
+ else
+ fun_l2_n896(x)
+ end
+end
+
+def fun_l1_n425(x)
+ if (x < 1)
+ fun_l2_n950(x)
+ else
+ fun_l2_n186(x)
+ end
+end
+
+def fun_l1_n426(x)
+ if (x < 1)
+ fun_l2_n817(x)
+ else
+ fun_l2_n605(x)
+ end
+end
+
+def fun_l1_n427(x)
+ if (x < 1)
+ fun_l2_n317(x)
+ else
+ fun_l2_n31(x)
+ end
+end
+
+def fun_l1_n428(x)
+ if (x < 1)
+ fun_l2_n804(x)
+ else
+ fun_l2_n547(x)
+ end
+end
+
+def fun_l1_n429(x)
+ if (x < 1)
+ fun_l2_n730(x)
+ else
+ fun_l2_n711(x)
+ end
+end
+
+def fun_l1_n430(x)
+ if (x < 1)
+ fun_l2_n822(x)
+ else
+ fun_l2_n749(x)
+ end
+end
+
+def fun_l1_n431(x)
+ if (x < 1)
+ fun_l2_n412(x)
+ else
+ fun_l2_n366(x)
+ end
+end
+
+def fun_l1_n432(x)
+ if (x < 1)
+ fun_l2_n462(x)
+ else
+ fun_l2_n601(x)
+ end
+end
+
+def fun_l1_n433(x)
+ if (x < 1)
+ fun_l2_n971(x)
+ else
+ fun_l2_n878(x)
+ end
+end
+
+def fun_l1_n434(x)
+ if (x < 1)
+ fun_l2_n551(x)
+ else
+ fun_l2_n172(x)
+ end
+end
+
+def fun_l1_n435(x)
+ if (x < 1)
+ fun_l2_n914(x)
+ else
+ fun_l2_n640(x)
+ end
+end
+
+def fun_l1_n436(x)
+ if (x < 1)
+ fun_l2_n957(x)
+ else
+ fun_l2_n846(x)
+ end
+end
+
+def fun_l1_n437(x)
+ if (x < 1)
+ fun_l2_n622(x)
+ else
+ fun_l2_n995(x)
+ end
+end
+
+def fun_l1_n438(x)
+ if (x < 1)
+ fun_l2_n830(x)
+ else
+ fun_l2_n537(x)
+ end
+end
+
+def fun_l1_n439(x)
+ if (x < 1)
+ fun_l2_n415(x)
+ else
+ fun_l2_n863(x)
+ end
+end
+
+def fun_l1_n440(x)
+ if (x < 1)
+ fun_l2_n637(x)
+ else
+ fun_l2_n354(x)
+ end
+end
+
+def fun_l1_n441(x)
+ if (x < 1)
+ fun_l2_n525(x)
+ else
+ fun_l2_n656(x)
+ end
+end
+
+def fun_l1_n442(x)
+ if (x < 1)
+ fun_l2_n284(x)
+ else
+ fun_l2_n722(x)
+ end
+end
+
+def fun_l1_n443(x)
+ if (x < 1)
+ fun_l2_n485(x)
+ else
+ fun_l2_n794(x)
+ end
+end
+
+def fun_l1_n444(x)
+ if (x < 1)
+ fun_l2_n268(x)
+ else
+ fun_l2_n443(x)
+ end
+end
+
+def fun_l1_n445(x)
+ if (x < 1)
+ fun_l2_n743(x)
+ else
+ fun_l2_n723(x)
+ end
+end
+
+def fun_l1_n446(x)
+ if (x < 1)
+ fun_l2_n651(x)
+ else
+ fun_l2_n544(x)
+ end
+end
+
+def fun_l1_n447(x)
+ if (x < 1)
+ fun_l2_n936(x)
+ else
+ fun_l2_n50(x)
+ end
+end
+
+def fun_l1_n448(x)
+ if (x < 1)
+ fun_l2_n473(x)
+ else
+ fun_l2_n749(x)
+ end
+end
+
+def fun_l1_n449(x)
+ if (x < 1)
+ fun_l2_n218(x)
+ else
+ fun_l2_n266(x)
+ end
+end
+
+def fun_l1_n450(x)
+ if (x < 1)
+ fun_l2_n686(x)
+ else
+ fun_l2_n629(x)
+ end
+end
+
+def fun_l1_n451(x)
+ if (x < 1)
+ fun_l2_n648(x)
+ else
+ fun_l2_n322(x)
+ end
+end
+
+def fun_l1_n452(x)
+ if (x < 1)
+ fun_l2_n380(x)
+ else
+ fun_l2_n720(x)
+ end
+end
+
+def fun_l1_n453(x)
+ if (x < 1)
+ fun_l2_n53(x)
+ else
+ fun_l2_n830(x)
+ end
+end
+
+def fun_l1_n454(x)
+ if (x < 1)
+ fun_l2_n315(x)
+ else
+ fun_l2_n742(x)
+ end
+end
+
+def fun_l1_n455(x)
+ if (x < 1)
+ fun_l2_n902(x)
+ else
+ fun_l2_n111(x)
+ end
+end
+
+def fun_l1_n456(x)
+ if (x < 1)
+ fun_l2_n924(x)
+ else
+ fun_l2_n109(x)
+ end
+end
+
+def fun_l1_n457(x)
+ if (x < 1)
+ fun_l2_n249(x)
+ else
+ fun_l2_n865(x)
+ end
+end
+
+def fun_l1_n458(x)
+ if (x < 1)
+ fun_l2_n650(x)
+ else
+ fun_l2_n960(x)
+ end
+end
+
+def fun_l1_n459(x)
+ if (x < 1)
+ fun_l2_n273(x)
+ else
+ fun_l2_n544(x)
+ end
+end
+
+def fun_l1_n460(x)
+ if (x < 1)
+ fun_l2_n120(x)
+ else
+ fun_l2_n322(x)
+ end
+end
+
+def fun_l1_n461(x)
+ if (x < 1)
+ fun_l2_n366(x)
+ else
+ fun_l2_n534(x)
+ end
+end
+
+def fun_l1_n462(x)
+ if (x < 1)
+ fun_l2_n380(x)
+ else
+ fun_l2_n25(x)
+ end
+end
+
+def fun_l1_n463(x)
+ if (x < 1)
+ fun_l2_n333(x)
+ else
+ fun_l2_n303(x)
+ end
+end
+
+def fun_l1_n464(x)
+ if (x < 1)
+ fun_l2_n16(x)
+ else
+ fun_l2_n239(x)
+ end
+end
+
+def fun_l1_n465(x)
+ if (x < 1)
+ fun_l2_n539(x)
+ else
+ fun_l2_n988(x)
+ end
+end
+
+def fun_l1_n466(x)
+ if (x < 1)
+ fun_l2_n580(x)
+ else
+ fun_l2_n86(x)
+ end
+end
+
+def fun_l1_n467(x)
+ if (x < 1)
+ fun_l2_n406(x)
+ else
+ fun_l2_n706(x)
+ end
+end
+
+def fun_l1_n468(x)
+ if (x < 1)
+ fun_l2_n858(x)
+ else
+ fun_l2_n393(x)
+ end
+end
+
+def fun_l1_n469(x)
+ if (x < 1)
+ fun_l2_n64(x)
+ else
+ fun_l2_n482(x)
+ end
+end
+
+def fun_l1_n470(x)
+ if (x < 1)
+ fun_l2_n654(x)
+ else
+ fun_l2_n833(x)
+ end
+end
+
+def fun_l1_n471(x)
+ if (x < 1)
+ fun_l2_n161(x)
+ else
+ fun_l2_n91(x)
+ end
+end
+
+def fun_l1_n472(x)
+ if (x < 1)
+ fun_l2_n98(x)
+ else
+ fun_l2_n661(x)
+ end
+end
+
+def fun_l1_n473(x)
+ if (x < 1)
+ fun_l2_n574(x)
+ else
+ fun_l2_n133(x)
+ end
+end
+
+def fun_l1_n474(x)
+ if (x < 1)
+ fun_l2_n109(x)
+ else
+ fun_l2_n702(x)
+ end
+end
+
+def fun_l1_n475(x)
+ if (x < 1)
+ fun_l2_n808(x)
+ else
+ fun_l2_n584(x)
+ end
+end
+
+def fun_l1_n476(x)
+ if (x < 1)
+ fun_l2_n495(x)
+ else
+ fun_l2_n708(x)
+ end
+end
+
+def fun_l1_n477(x)
+ if (x < 1)
+ fun_l2_n649(x)
+ else
+ fun_l2_n290(x)
+ end
+end
+
+def fun_l1_n478(x)
+ if (x < 1)
+ fun_l2_n718(x)
+ else
+ fun_l2_n998(x)
+ end
+end
+
+def fun_l1_n479(x)
+ if (x < 1)
+ fun_l2_n557(x)
+ else
+ fun_l2_n359(x)
+ end
+end
+
+def fun_l1_n480(x)
+ if (x < 1)
+ fun_l2_n958(x)
+ else
+ fun_l2_n86(x)
+ end
+end
+
+def fun_l1_n481(x)
+ if (x < 1)
+ fun_l2_n245(x)
+ else
+ fun_l2_n124(x)
+ end
+end
+
+def fun_l1_n482(x)
+ if (x < 1)
+ fun_l2_n510(x)
+ else
+ fun_l2_n170(x)
+ end
+end
+
+def fun_l1_n483(x)
+ if (x < 1)
+ fun_l2_n550(x)
+ else
+ fun_l2_n9(x)
+ end
+end
+
+def fun_l1_n484(x)
+ if (x < 1)
+ fun_l2_n82(x)
+ else
+ fun_l2_n351(x)
+ end
+end
+
+def fun_l1_n485(x)
+ if (x < 1)
+ fun_l2_n760(x)
+ else
+ fun_l2_n560(x)
+ end
+end
+
+def fun_l1_n486(x)
+ if (x < 1)
+ fun_l2_n550(x)
+ else
+ fun_l2_n881(x)
+ end
+end
+
+def fun_l1_n487(x)
+ if (x < 1)
+ fun_l2_n62(x)
+ else
+ fun_l2_n213(x)
+ end
+end
+
+def fun_l1_n488(x)
+ if (x < 1)
+ fun_l2_n336(x)
+ else
+ fun_l2_n855(x)
+ end
+end
+
+def fun_l1_n489(x)
+ if (x < 1)
+ fun_l2_n172(x)
+ else
+ fun_l2_n479(x)
+ end
+end
+
+def fun_l1_n490(x)
+ if (x < 1)
+ fun_l2_n821(x)
+ else
+ fun_l2_n767(x)
+ end
+end
+
+def fun_l1_n491(x)
+ if (x < 1)
+ fun_l2_n388(x)
+ else
+ fun_l2_n307(x)
+ end
+end
+
+def fun_l1_n492(x)
+ if (x < 1)
+ fun_l2_n158(x)
+ else
+ fun_l2_n725(x)
+ end
+end
+
+def fun_l1_n493(x)
+ if (x < 1)
+ fun_l2_n681(x)
+ else
+ fun_l2_n767(x)
+ end
+end
+
+def fun_l1_n494(x)
+ if (x < 1)
+ fun_l2_n799(x)
+ else
+ fun_l2_n458(x)
+ end
+end
+
+def fun_l1_n495(x)
+ if (x < 1)
+ fun_l2_n379(x)
+ else
+ fun_l2_n152(x)
+ end
+end
+
+def fun_l1_n496(x)
+ if (x < 1)
+ fun_l2_n996(x)
+ else
+ fun_l2_n296(x)
+ end
+end
+
+def fun_l1_n497(x)
+ if (x < 1)
+ fun_l2_n752(x)
+ else
+ fun_l2_n481(x)
+ end
+end
+
+def fun_l1_n498(x)
+ if (x < 1)
+ fun_l2_n887(x)
+ else
+ fun_l2_n343(x)
+ end
+end
+
+def fun_l1_n499(x)
+ if (x < 1)
+ fun_l2_n481(x)
+ else
+ fun_l2_n368(x)
+ end
+end
+
+def fun_l1_n500(x)
+ if (x < 1)
+ fun_l2_n738(x)
+ else
+ fun_l2_n349(x)
+ end
+end
+
+def fun_l1_n501(x)
+ if (x < 1)
+ fun_l2_n104(x)
+ else
+ fun_l2_n841(x)
+ end
+end
+
+def fun_l1_n502(x)
+ if (x < 1)
+ fun_l2_n549(x)
+ else
+ fun_l2_n684(x)
+ end
+end
+
+def fun_l1_n503(x)
+ if (x < 1)
+ fun_l2_n726(x)
+ else
+ fun_l2_n41(x)
+ end
+end
+
+def fun_l1_n504(x)
+ if (x < 1)
+ fun_l2_n637(x)
+ else
+ fun_l2_n830(x)
+ end
+end
+
+def fun_l1_n505(x)
+ if (x < 1)
+ fun_l2_n38(x)
+ else
+ fun_l2_n815(x)
+ end
+end
+
+def fun_l1_n506(x)
+ if (x < 1)
+ fun_l2_n284(x)
+ else
+ fun_l2_n599(x)
+ end
+end
+
+def fun_l1_n507(x)
+ if (x < 1)
+ fun_l2_n665(x)
+ else
+ fun_l2_n763(x)
+ end
+end
+
+def fun_l1_n508(x)
+ if (x < 1)
+ fun_l2_n755(x)
+ else
+ fun_l2_n51(x)
+ end
+end
+
+def fun_l1_n509(x)
+ if (x < 1)
+ fun_l2_n860(x)
+ else
+ fun_l2_n273(x)
+ end
+end
+
+def fun_l1_n510(x)
+ if (x < 1)
+ fun_l2_n967(x)
+ else
+ fun_l2_n141(x)
+ end
+end
+
+def fun_l1_n511(x)
+ if (x < 1)
+ fun_l2_n637(x)
+ else
+ fun_l2_n953(x)
+ end
+end
+
+def fun_l1_n512(x)
+ if (x < 1)
+ fun_l2_n784(x)
+ else
+ fun_l2_n941(x)
+ end
+end
+
+def fun_l1_n513(x)
+ if (x < 1)
+ fun_l2_n499(x)
+ else
+ fun_l2_n189(x)
+ end
+end
+
+def fun_l1_n514(x)
+ if (x < 1)
+ fun_l2_n207(x)
+ else
+ fun_l2_n187(x)
+ end
+end
+
+def fun_l1_n515(x)
+ if (x < 1)
+ fun_l2_n174(x)
+ else
+ fun_l2_n316(x)
+ end
+end
+
+def fun_l1_n516(x)
+ if (x < 1)
+ fun_l2_n884(x)
+ else
+ fun_l2_n72(x)
+ end
+end
+
+def fun_l1_n517(x)
+ if (x < 1)
+ fun_l2_n878(x)
+ else
+ fun_l2_n423(x)
+ end
+end
+
+def fun_l1_n518(x)
+ if (x < 1)
+ fun_l2_n452(x)
+ else
+ fun_l2_n733(x)
+ end
+end
+
+def fun_l1_n519(x)
+ if (x < 1)
+ fun_l2_n586(x)
+ else
+ fun_l2_n987(x)
+ end
+end
+
+def fun_l1_n520(x)
+ if (x < 1)
+ fun_l2_n638(x)
+ else
+ fun_l2_n276(x)
+ end
+end
+
+def fun_l1_n521(x)
+ if (x < 1)
+ fun_l2_n186(x)
+ else
+ fun_l2_n498(x)
+ end
+end
+
+def fun_l1_n522(x)
+ if (x < 1)
+ fun_l2_n816(x)
+ else
+ fun_l2_n687(x)
+ end
+end
+
+def fun_l1_n523(x)
+ if (x < 1)
+ fun_l2_n572(x)
+ else
+ fun_l2_n878(x)
+ end
+end
+
+def fun_l1_n524(x)
+ if (x < 1)
+ fun_l2_n528(x)
+ else
+ fun_l2_n188(x)
+ end
+end
+
+def fun_l1_n525(x)
+ if (x < 1)
+ fun_l2_n719(x)
+ else
+ fun_l2_n146(x)
+ end
+end
+
+def fun_l1_n526(x)
+ if (x < 1)
+ fun_l2_n730(x)
+ else
+ fun_l2_n209(x)
+ end
+end
+
+def fun_l1_n527(x)
+ if (x < 1)
+ fun_l2_n998(x)
+ else
+ fun_l2_n544(x)
+ end
+end
+
+def fun_l1_n528(x)
+ if (x < 1)
+ fun_l2_n288(x)
+ else
+ fun_l2_n682(x)
+ end
+end
+
+def fun_l1_n529(x)
+ if (x < 1)
+ fun_l2_n808(x)
+ else
+ fun_l2_n651(x)
+ end
+end
+
+def fun_l1_n530(x)
+ if (x < 1)
+ fun_l2_n674(x)
+ else
+ fun_l2_n643(x)
+ end
+end
+
+def fun_l1_n531(x)
+ if (x < 1)
+ fun_l2_n42(x)
+ else
+ fun_l2_n457(x)
+ end
+end
+
+def fun_l1_n532(x)
+ if (x < 1)
+ fun_l2_n188(x)
+ else
+ fun_l2_n218(x)
+ end
+end
+
+def fun_l1_n533(x)
+ if (x < 1)
+ fun_l2_n529(x)
+ else
+ fun_l2_n541(x)
+ end
+end
+
+def fun_l1_n534(x)
+ if (x < 1)
+ fun_l2_n820(x)
+ else
+ fun_l2_n426(x)
+ end
+end
+
+def fun_l1_n535(x)
+ if (x < 1)
+ fun_l2_n730(x)
+ else
+ fun_l2_n36(x)
+ end
+end
+
+def fun_l1_n536(x)
+ if (x < 1)
+ fun_l2_n187(x)
+ else
+ fun_l2_n96(x)
+ end
+end
+
+def fun_l1_n537(x)
+ if (x < 1)
+ fun_l2_n1(x)
+ else
+ fun_l2_n905(x)
+ end
+end
+
+def fun_l1_n538(x)
+ if (x < 1)
+ fun_l2_n252(x)
+ else
+ fun_l2_n597(x)
+ end
+end
+
+def fun_l1_n539(x)
+ if (x < 1)
+ fun_l2_n959(x)
+ else
+ fun_l2_n26(x)
+ end
+end
+
+def fun_l1_n540(x)
+ if (x < 1)
+ fun_l2_n959(x)
+ else
+ fun_l2_n266(x)
+ end
+end
+
+def fun_l1_n541(x)
+ if (x < 1)
+ fun_l2_n902(x)
+ else
+ fun_l2_n957(x)
+ end
+end
+
+def fun_l1_n542(x)
+ if (x < 1)
+ fun_l2_n244(x)
+ else
+ fun_l2_n407(x)
+ end
+end
+
+def fun_l1_n543(x)
+ if (x < 1)
+ fun_l2_n319(x)
+ else
+ fun_l2_n19(x)
+ end
+end
+
+def fun_l1_n544(x)
+ if (x < 1)
+ fun_l2_n251(x)
+ else
+ fun_l2_n92(x)
+ end
+end
+
+def fun_l1_n545(x)
+ if (x < 1)
+ fun_l2_n482(x)
+ else
+ fun_l2_n177(x)
+ end
+end
+
+def fun_l1_n546(x)
+ if (x < 1)
+ fun_l2_n338(x)
+ else
+ fun_l2_n152(x)
+ end
+end
+
+def fun_l1_n547(x)
+ if (x < 1)
+ fun_l2_n902(x)
+ else
+ fun_l2_n243(x)
+ end
+end
+
+def fun_l1_n548(x)
+ if (x < 1)
+ fun_l2_n943(x)
+ else
+ fun_l2_n930(x)
+ end
+end
+
+def fun_l1_n549(x)
+ if (x < 1)
+ fun_l2_n775(x)
+ else
+ fun_l2_n338(x)
+ end
+end
+
+def fun_l1_n550(x)
+ if (x < 1)
+ fun_l2_n286(x)
+ else
+ fun_l2_n347(x)
+ end
+end
+
+def fun_l1_n551(x)
+ if (x < 1)
+ fun_l2_n611(x)
+ else
+ fun_l2_n108(x)
+ end
+end
+
+def fun_l1_n552(x)
+ if (x < 1)
+ fun_l2_n515(x)
+ else
+ fun_l2_n478(x)
+ end
+end
+
+def fun_l1_n553(x)
+ if (x < 1)
+ fun_l2_n68(x)
+ else
+ fun_l2_n943(x)
+ end
+end
+
+def fun_l1_n554(x)
+ if (x < 1)
+ fun_l2_n16(x)
+ else
+ fun_l2_n280(x)
+ end
+end
+
+def fun_l1_n555(x)
+ if (x < 1)
+ fun_l2_n421(x)
+ else
+ fun_l2_n412(x)
+ end
+end
+
+def fun_l1_n556(x)
+ if (x < 1)
+ fun_l2_n653(x)
+ else
+ fun_l2_n527(x)
+ end
+end
+
+def fun_l1_n557(x)
+ if (x < 1)
+ fun_l2_n181(x)
+ else
+ fun_l2_n179(x)
+ end
+end
+
+def fun_l1_n558(x)
+ if (x < 1)
+ fun_l2_n270(x)
+ else
+ fun_l2_n367(x)
+ end
+end
+
+def fun_l1_n559(x)
+ if (x < 1)
+ fun_l2_n323(x)
+ else
+ fun_l2_n453(x)
+ end
+end
+
+def fun_l1_n560(x)
+ if (x < 1)
+ fun_l2_n699(x)
+ else
+ fun_l2_n904(x)
+ end
+end
+
+def fun_l1_n561(x)
+ if (x < 1)
+ fun_l2_n903(x)
+ else
+ fun_l2_n559(x)
+ end
+end
+
+def fun_l1_n562(x)
+ if (x < 1)
+ fun_l2_n573(x)
+ else
+ fun_l2_n880(x)
+ end
+end
+
+def fun_l1_n563(x)
+ if (x < 1)
+ fun_l2_n674(x)
+ else
+ fun_l2_n420(x)
+ end
+end
+
+def fun_l1_n564(x)
+ if (x < 1)
+ fun_l2_n76(x)
+ else
+ fun_l2_n702(x)
+ end
+end
+
+def fun_l1_n565(x)
+ if (x < 1)
+ fun_l2_n78(x)
+ else
+ fun_l2_n741(x)
+ end
+end
+
+def fun_l1_n566(x)
+ if (x < 1)
+ fun_l2_n542(x)
+ else
+ fun_l2_n762(x)
+ end
+end
+
+def fun_l1_n567(x)
+ if (x < 1)
+ fun_l2_n992(x)
+ else
+ fun_l2_n416(x)
+ end
+end
+
+def fun_l1_n568(x)
+ if (x < 1)
+ fun_l2_n510(x)
+ else
+ fun_l2_n68(x)
+ end
+end
+
+def fun_l1_n569(x)
+ if (x < 1)
+ fun_l2_n36(x)
+ else
+ fun_l2_n152(x)
+ end
+end
+
+def fun_l1_n570(x)
+ if (x < 1)
+ fun_l2_n243(x)
+ else
+ fun_l2_n421(x)
+ end
+end
+
+def fun_l1_n571(x)
+ if (x < 1)
+ fun_l2_n48(x)
+ else
+ fun_l2_n50(x)
+ end
+end
+
+def fun_l1_n572(x)
+ if (x < 1)
+ fun_l2_n647(x)
+ else
+ fun_l2_n614(x)
+ end
+end
+
+def fun_l1_n573(x)
+ if (x < 1)
+ fun_l2_n847(x)
+ else
+ fun_l2_n598(x)
+ end
+end
+
+def fun_l1_n574(x)
+ if (x < 1)
+ fun_l2_n462(x)
+ else
+ fun_l2_n492(x)
+ end
+end
+
+def fun_l1_n575(x)
+ if (x < 1)
+ fun_l2_n805(x)
+ else
+ fun_l2_n23(x)
+ end
+end
+
+def fun_l1_n576(x)
+ if (x < 1)
+ fun_l2_n660(x)
+ else
+ fun_l2_n271(x)
+ end
+end
+
+def fun_l1_n577(x)
+ if (x < 1)
+ fun_l2_n277(x)
+ else
+ fun_l2_n259(x)
+ end
+end
+
+def fun_l1_n578(x)
+ if (x < 1)
+ fun_l2_n645(x)
+ else
+ fun_l2_n638(x)
+ end
+end
+
+def fun_l1_n579(x)
+ if (x < 1)
+ fun_l2_n925(x)
+ else
+ fun_l2_n801(x)
+ end
+end
+
+def fun_l1_n580(x)
+ if (x < 1)
+ fun_l2_n52(x)
+ else
+ fun_l2_n703(x)
+ end
+end
+
+def fun_l1_n581(x)
+ if (x < 1)
+ fun_l2_n126(x)
+ else
+ fun_l2_n511(x)
+ end
+end
+
+def fun_l1_n582(x)
+ if (x < 1)
+ fun_l2_n663(x)
+ else
+ fun_l2_n158(x)
+ end
+end
+
+def fun_l1_n583(x)
+ if (x < 1)
+ fun_l2_n604(x)
+ else
+ fun_l2_n498(x)
+ end
+end
+
+def fun_l1_n584(x)
+ if (x < 1)
+ fun_l2_n889(x)
+ else
+ fun_l2_n197(x)
+ end
+end
+
+def fun_l1_n585(x)
+ if (x < 1)
+ fun_l2_n28(x)
+ else
+ fun_l2_n298(x)
+ end
+end
+
+def fun_l1_n586(x)
+ if (x < 1)
+ fun_l2_n165(x)
+ else
+ fun_l2_n340(x)
+ end
+end
+
+def fun_l1_n587(x)
+ if (x < 1)
+ fun_l2_n89(x)
+ else
+ fun_l2_n947(x)
+ end
+end
+
+def fun_l1_n588(x)
+ if (x < 1)
+ fun_l2_n151(x)
+ else
+ fun_l2_n163(x)
+ end
+end
+
+def fun_l1_n589(x)
+ if (x < 1)
+ fun_l2_n200(x)
+ else
+ fun_l2_n855(x)
+ end
+end
+
+def fun_l1_n590(x)
+ if (x < 1)
+ fun_l2_n749(x)
+ else
+ fun_l2_n232(x)
+ end
+end
+
+def fun_l1_n591(x)
+ if (x < 1)
+ fun_l2_n850(x)
+ else
+ fun_l2_n897(x)
+ end
+end
+
+def fun_l1_n592(x)
+ if (x < 1)
+ fun_l2_n287(x)
+ else
+ fun_l2_n266(x)
+ end
+end
+
+def fun_l1_n593(x)
+ if (x < 1)
+ fun_l2_n547(x)
+ else
+ fun_l2_n937(x)
+ end
+end
+
+def fun_l1_n594(x)
+ if (x < 1)
+ fun_l2_n517(x)
+ else
+ fun_l2_n602(x)
+ end
+end
+
+def fun_l1_n595(x)
+ if (x < 1)
+ fun_l2_n962(x)
+ else
+ fun_l2_n387(x)
+ end
+end
+
+def fun_l1_n596(x)
+ if (x < 1)
+ fun_l2_n959(x)
+ else
+ fun_l2_n885(x)
+ end
+end
+
+def fun_l1_n597(x)
+ if (x < 1)
+ fun_l2_n343(x)
+ else
+ fun_l2_n704(x)
+ end
+end
+
+def fun_l1_n598(x)
+ if (x < 1)
+ fun_l2_n256(x)
+ else
+ fun_l2_n213(x)
+ end
+end
+
+def fun_l1_n599(x)
+ if (x < 1)
+ fun_l2_n653(x)
+ else
+ fun_l2_n630(x)
+ end
+end
+
+def fun_l1_n600(x)
+ if (x < 1)
+ fun_l2_n587(x)
+ else
+ fun_l2_n899(x)
+ end
+end
+
+def fun_l1_n601(x)
+ if (x < 1)
+ fun_l2_n798(x)
+ else
+ fun_l2_n318(x)
+ end
+end
+
+def fun_l1_n602(x)
+ if (x < 1)
+ fun_l2_n286(x)
+ else
+ fun_l2_n586(x)
+ end
+end
+
+def fun_l1_n603(x)
+ if (x < 1)
+ fun_l2_n931(x)
+ else
+ fun_l2_n370(x)
+ end
+end
+
+def fun_l1_n604(x)
+ if (x < 1)
+ fun_l2_n311(x)
+ else
+ fun_l2_n476(x)
+ end
+end
+
+def fun_l1_n605(x)
+ if (x < 1)
+ fun_l2_n998(x)
+ else
+ fun_l2_n953(x)
+ end
+end
+
+def fun_l1_n606(x)
+ if (x < 1)
+ fun_l2_n782(x)
+ else
+ fun_l2_n225(x)
+ end
+end
+
+def fun_l1_n607(x)
+ if (x < 1)
+ fun_l2_n696(x)
+ else
+ fun_l2_n797(x)
+ end
+end
+
+def fun_l1_n608(x)
+ if (x < 1)
+ fun_l2_n344(x)
+ else
+ fun_l2_n247(x)
+ end
+end
+
+def fun_l1_n609(x)
+ if (x < 1)
+ fun_l2_n627(x)
+ else
+ fun_l2_n410(x)
+ end
+end
+
+def fun_l1_n610(x)
+ if (x < 1)
+ fun_l2_n431(x)
+ else
+ fun_l2_n56(x)
+ end
+end
+
+def fun_l1_n611(x)
+ if (x < 1)
+ fun_l2_n307(x)
+ else
+ fun_l2_n857(x)
+ end
+end
+
+def fun_l1_n612(x)
+ if (x < 1)
+ fun_l2_n411(x)
+ else
+ fun_l2_n59(x)
+ end
+end
+
+def fun_l1_n613(x)
+ if (x < 1)
+ fun_l2_n38(x)
+ else
+ fun_l2_n880(x)
+ end
+end
+
+def fun_l1_n614(x)
+ if (x < 1)
+ fun_l2_n945(x)
+ else
+ fun_l2_n723(x)
+ end
+end
+
+def fun_l1_n615(x)
+ if (x < 1)
+ fun_l2_n248(x)
+ else
+ fun_l2_n56(x)
+ end
+end
+
+def fun_l1_n616(x)
+ if (x < 1)
+ fun_l2_n453(x)
+ else
+ fun_l2_n4(x)
+ end
+end
+
+def fun_l1_n617(x)
+ if (x < 1)
+ fun_l2_n599(x)
+ else
+ fun_l2_n966(x)
+ end
+end
+
+def fun_l1_n618(x)
+ if (x < 1)
+ fun_l2_n896(x)
+ else
+ fun_l2_n666(x)
+ end
+end
+
+def fun_l1_n619(x)
+ if (x < 1)
+ fun_l2_n715(x)
+ else
+ fun_l2_n918(x)
+ end
+end
+
+def fun_l1_n620(x)
+ if (x < 1)
+ fun_l2_n663(x)
+ else
+ fun_l2_n144(x)
+ end
+end
+
+def fun_l1_n621(x)
+ if (x < 1)
+ fun_l2_n17(x)
+ else
+ fun_l2_n411(x)
+ end
+end
+
+def fun_l1_n622(x)
+ if (x < 1)
+ fun_l2_n851(x)
+ else
+ fun_l2_n858(x)
+ end
+end
+
+def fun_l1_n623(x)
+ if (x < 1)
+ fun_l2_n552(x)
+ else
+ fun_l2_n503(x)
+ end
+end
+
+def fun_l1_n624(x)
+ if (x < 1)
+ fun_l2_n822(x)
+ else
+ fun_l2_n239(x)
+ end
+end
+
+def fun_l1_n625(x)
+ if (x < 1)
+ fun_l2_n917(x)
+ else
+ fun_l2_n120(x)
+ end
+end
+
+def fun_l1_n626(x)
+ if (x < 1)
+ fun_l2_n640(x)
+ else
+ fun_l2_n603(x)
+ end
+end
+
+def fun_l1_n627(x)
+ if (x < 1)
+ fun_l2_n244(x)
+ else
+ fun_l2_n114(x)
+ end
+end
+
+def fun_l1_n628(x)
+ if (x < 1)
+ fun_l2_n374(x)
+ else
+ fun_l2_n295(x)
+ end
+end
+
+def fun_l1_n629(x)
+ if (x < 1)
+ fun_l2_n761(x)
+ else
+ fun_l2_n920(x)
+ end
+end
+
+def fun_l1_n630(x)
+ if (x < 1)
+ fun_l2_n314(x)
+ else
+ fun_l2_n571(x)
+ end
+end
+
+def fun_l1_n631(x)
+ if (x < 1)
+ fun_l2_n830(x)
+ else
+ fun_l2_n838(x)
+ end
+end
+
+def fun_l1_n632(x)
+ if (x < 1)
+ fun_l2_n523(x)
+ else
+ fun_l2_n453(x)
+ end
+end
+
+def fun_l1_n633(x)
+ if (x < 1)
+ fun_l2_n245(x)
+ else
+ fun_l2_n173(x)
+ end
+end
+
+def fun_l1_n634(x)
+ if (x < 1)
+ fun_l2_n939(x)
+ else
+ fun_l2_n774(x)
+ end
+end
+
+def fun_l1_n635(x)
+ if (x < 1)
+ fun_l2_n17(x)
+ else
+ fun_l2_n166(x)
+ end
+end
+
+def fun_l1_n636(x)
+ if (x < 1)
+ fun_l2_n443(x)
+ else
+ fun_l2_n297(x)
+ end
+end
+
+def fun_l1_n637(x)
+ if (x < 1)
+ fun_l2_n280(x)
+ else
+ fun_l2_n776(x)
+ end
+end
+
+def fun_l1_n638(x)
+ if (x < 1)
+ fun_l2_n761(x)
+ else
+ fun_l2_n866(x)
+ end
+end
+
+def fun_l1_n639(x)
+ if (x < 1)
+ fun_l2_n677(x)
+ else
+ fun_l2_n855(x)
+ end
+end
+
+def fun_l1_n640(x)
+ if (x < 1)
+ fun_l2_n252(x)
+ else
+ fun_l2_n766(x)
+ end
+end
+
+def fun_l1_n641(x)
+ if (x < 1)
+ fun_l2_n3(x)
+ else
+ fun_l2_n115(x)
+ end
+end
+
+def fun_l1_n642(x)
+ if (x < 1)
+ fun_l2_n495(x)
+ else
+ fun_l2_n340(x)
+ end
+end
+
+def fun_l1_n643(x)
+ if (x < 1)
+ fun_l2_n991(x)
+ else
+ fun_l2_n119(x)
+ end
+end
+
+def fun_l1_n644(x)
+ if (x < 1)
+ fun_l2_n379(x)
+ else
+ fun_l2_n519(x)
+ end
+end
+
+def fun_l1_n645(x)
+ if (x < 1)
+ fun_l2_n191(x)
+ else
+ fun_l2_n872(x)
+ end
+end
+
+def fun_l1_n646(x)
+ if (x < 1)
+ fun_l2_n979(x)
+ else
+ fun_l2_n980(x)
+ end
+end
+
+def fun_l1_n647(x)
+ if (x < 1)
+ fun_l2_n918(x)
+ else
+ fun_l2_n455(x)
+ end
+end
+
+def fun_l1_n648(x)
+ if (x < 1)
+ fun_l2_n966(x)
+ else
+ fun_l2_n529(x)
+ end
+end
+
+def fun_l1_n649(x)
+ if (x < 1)
+ fun_l2_n838(x)
+ else
+ fun_l2_n529(x)
+ end
+end
+
+def fun_l1_n650(x)
+ if (x < 1)
+ fun_l2_n542(x)
+ else
+ fun_l2_n42(x)
+ end
+end
+
+def fun_l1_n651(x)
+ if (x < 1)
+ fun_l2_n65(x)
+ else
+ fun_l2_n460(x)
+ end
+end
+
+def fun_l1_n652(x)
+ if (x < 1)
+ fun_l2_n479(x)
+ else
+ fun_l2_n251(x)
+ end
+end
+
+def fun_l1_n653(x)
+ if (x < 1)
+ fun_l2_n243(x)
+ else
+ fun_l2_n77(x)
+ end
+end
+
+def fun_l1_n654(x)
+ if (x < 1)
+ fun_l2_n392(x)
+ else
+ fun_l2_n940(x)
+ end
+end
+
+def fun_l1_n655(x)
+ if (x < 1)
+ fun_l2_n875(x)
+ else
+ fun_l2_n157(x)
+ end
+end
+
+def fun_l1_n656(x)
+ if (x < 1)
+ fun_l2_n279(x)
+ else
+ fun_l2_n237(x)
+ end
+end
+
+def fun_l1_n657(x)
+ if (x < 1)
+ fun_l2_n522(x)
+ else
+ fun_l2_n174(x)
+ end
+end
+
+def fun_l1_n658(x)
+ if (x < 1)
+ fun_l2_n669(x)
+ else
+ fun_l2_n399(x)
+ end
+end
+
+def fun_l1_n659(x)
+ if (x < 1)
+ fun_l2_n251(x)
+ else
+ fun_l2_n56(x)
+ end
+end
+
+def fun_l1_n660(x)
+ if (x < 1)
+ fun_l2_n563(x)
+ else
+ fun_l2_n731(x)
+ end
+end
+
+def fun_l1_n661(x)
+ if (x < 1)
+ fun_l2_n684(x)
+ else
+ fun_l2_n292(x)
+ end
+end
+
+def fun_l1_n662(x)
+ if (x < 1)
+ fun_l2_n952(x)
+ else
+ fun_l2_n1(x)
+ end
+end
+
+def fun_l1_n663(x)
+ if (x < 1)
+ fun_l2_n89(x)
+ else
+ fun_l2_n562(x)
+ end
+end
+
+def fun_l1_n664(x)
+ if (x < 1)
+ fun_l2_n480(x)
+ else
+ fun_l2_n488(x)
+ end
+end
+
+def fun_l1_n665(x)
+ if (x < 1)
+ fun_l2_n398(x)
+ else
+ fun_l2_n493(x)
+ end
+end
+
+def fun_l1_n666(x)
+ if (x < 1)
+ fun_l2_n778(x)
+ else
+ fun_l2_n702(x)
+ end
+end
+
+def fun_l1_n667(x)
+ if (x < 1)
+ fun_l2_n332(x)
+ else
+ fun_l2_n441(x)
+ end
+end
+
+def fun_l1_n668(x)
+ if (x < 1)
+ fun_l2_n866(x)
+ else
+ fun_l2_n442(x)
+ end
+end
+
+def fun_l1_n669(x)
+ if (x < 1)
+ fun_l2_n533(x)
+ else
+ fun_l2_n970(x)
+ end
+end
+
+def fun_l1_n670(x)
+ if (x < 1)
+ fun_l2_n926(x)
+ else
+ fun_l2_n883(x)
+ end
+end
+
+def fun_l1_n671(x)
+ if (x < 1)
+ fun_l2_n204(x)
+ else
+ fun_l2_n769(x)
+ end
+end
+
+def fun_l1_n672(x)
+ if (x < 1)
+ fun_l2_n663(x)
+ else
+ fun_l2_n367(x)
+ end
+end
+
+def fun_l1_n673(x)
+ if (x < 1)
+ fun_l2_n978(x)
+ else
+ fun_l2_n750(x)
+ end
+end
+
+def fun_l1_n674(x)
+ if (x < 1)
+ fun_l2_n296(x)
+ else
+ fun_l2_n608(x)
+ end
+end
+
+def fun_l1_n675(x)
+ if (x < 1)
+ fun_l2_n35(x)
+ else
+ fun_l2_n200(x)
+ end
+end
+
+def fun_l1_n676(x)
+ if (x < 1)
+ fun_l2_n618(x)
+ else
+ fun_l2_n286(x)
+ end
+end
+
+def fun_l1_n677(x)
+ if (x < 1)
+ fun_l2_n98(x)
+ else
+ fun_l2_n264(x)
+ end
+end
+
+def fun_l1_n678(x)
+ if (x < 1)
+ fun_l2_n967(x)
+ else
+ fun_l2_n884(x)
+ end
+end
+
+def fun_l1_n679(x)
+ if (x < 1)
+ fun_l2_n351(x)
+ else
+ fun_l2_n854(x)
+ end
+end
+
+def fun_l1_n680(x)
+ if (x < 1)
+ fun_l2_n397(x)
+ else
+ fun_l2_n56(x)
+ end
+end
+
+def fun_l1_n681(x)
+ if (x < 1)
+ fun_l2_n232(x)
+ else
+ fun_l2_n400(x)
+ end
+end
+
+def fun_l1_n682(x)
+ if (x < 1)
+ fun_l2_n321(x)
+ else
+ fun_l2_n500(x)
+ end
+end
+
+def fun_l1_n683(x)
+ if (x < 1)
+ fun_l2_n315(x)
+ else
+ fun_l2_n509(x)
+ end
+end
+
+def fun_l1_n684(x)
+ if (x < 1)
+ fun_l2_n854(x)
+ else
+ fun_l2_n921(x)
+ end
+end
+
+def fun_l1_n685(x)
+ if (x < 1)
+ fun_l2_n823(x)
+ else
+ fun_l2_n995(x)
+ end
+end
+
+def fun_l1_n686(x)
+ if (x < 1)
+ fun_l2_n42(x)
+ else
+ fun_l2_n92(x)
+ end
+end
+
+def fun_l1_n687(x)
+ if (x < 1)
+ fun_l2_n74(x)
+ else
+ fun_l2_n577(x)
+ end
+end
+
+def fun_l1_n688(x)
+ if (x < 1)
+ fun_l2_n47(x)
+ else
+ fun_l2_n664(x)
+ end
+end
+
+def fun_l1_n689(x)
+ if (x < 1)
+ fun_l2_n709(x)
+ else
+ fun_l2_n92(x)
+ end
+end
+
+def fun_l1_n690(x)
+ if (x < 1)
+ fun_l2_n875(x)
+ else
+ fun_l2_n893(x)
+ end
+end
+
+def fun_l1_n691(x)
+ if (x < 1)
+ fun_l2_n934(x)
+ else
+ fun_l2_n339(x)
+ end
+end
+
+def fun_l1_n692(x)
+ if (x < 1)
+ fun_l2_n194(x)
+ else
+ fun_l2_n915(x)
+ end
+end
+
+def fun_l1_n693(x)
+ if (x < 1)
+ fun_l2_n352(x)
+ else
+ fun_l2_n212(x)
+ end
+end
+
+def fun_l1_n694(x)
+ if (x < 1)
+ fun_l2_n554(x)
+ else
+ fun_l2_n461(x)
+ end
+end
+
+def fun_l1_n695(x)
+ if (x < 1)
+ fun_l2_n372(x)
+ else
+ fun_l2_n652(x)
+ end
+end
+
+def fun_l1_n696(x)
+ if (x < 1)
+ fun_l2_n778(x)
+ else
+ fun_l2_n350(x)
+ end
+end
+
+def fun_l1_n697(x)
+ if (x < 1)
+ fun_l2_n656(x)
+ else
+ fun_l2_n467(x)
+ end
+end
+
+def fun_l1_n698(x)
+ if (x < 1)
+ fun_l2_n799(x)
+ else
+ fun_l2_n983(x)
+ end
+end
+
+def fun_l1_n699(x)
+ if (x < 1)
+ fun_l2_n917(x)
+ else
+ fun_l2_n801(x)
+ end
+end
+
+def fun_l1_n700(x)
+ if (x < 1)
+ fun_l2_n276(x)
+ else
+ fun_l2_n778(x)
+ end
+end
+
+def fun_l1_n701(x)
+ if (x < 1)
+ fun_l2_n562(x)
+ else
+ fun_l2_n558(x)
+ end
+end
+
+def fun_l1_n702(x)
+ if (x < 1)
+ fun_l2_n600(x)
+ else
+ fun_l2_n120(x)
+ end
+end
+
+def fun_l1_n703(x)
+ if (x < 1)
+ fun_l2_n346(x)
+ else
+ fun_l2_n975(x)
+ end
+end
+
+def fun_l1_n704(x)
+ if (x < 1)
+ fun_l2_n139(x)
+ else
+ fun_l2_n241(x)
+ end
+end
+
+def fun_l1_n705(x)
+ if (x < 1)
+ fun_l2_n728(x)
+ else
+ fun_l2_n62(x)
+ end
+end
+
+def fun_l1_n706(x)
+ if (x < 1)
+ fun_l2_n719(x)
+ else
+ fun_l2_n955(x)
+ end
+end
+
+def fun_l1_n707(x)
+ if (x < 1)
+ fun_l2_n752(x)
+ else
+ fun_l2_n122(x)
+ end
+end
+
+def fun_l1_n708(x)
+ if (x < 1)
+ fun_l2_n456(x)
+ else
+ fun_l2_n128(x)
+ end
+end
+
+def fun_l1_n709(x)
+ if (x < 1)
+ fun_l2_n4(x)
+ else
+ fun_l2_n399(x)
+ end
+end
+
+def fun_l1_n710(x)
+ if (x < 1)
+ fun_l2_n20(x)
+ else
+ fun_l2_n746(x)
+ end
+end
+
+def fun_l1_n711(x)
+ if (x < 1)
+ fun_l2_n978(x)
+ else
+ fun_l2_n886(x)
+ end
+end
+
+def fun_l1_n712(x)
+ if (x < 1)
+ fun_l2_n417(x)
+ else
+ fun_l2_n337(x)
+ end
+end
+
+def fun_l1_n713(x)
+ if (x < 1)
+ fun_l2_n394(x)
+ else
+ fun_l2_n713(x)
+ end
+end
+
+def fun_l1_n714(x)
+ if (x < 1)
+ fun_l2_n433(x)
+ else
+ fun_l2_n985(x)
+ end
+end
+
+def fun_l1_n715(x)
+ if (x < 1)
+ fun_l2_n937(x)
+ else
+ fun_l2_n709(x)
+ end
+end
+
+def fun_l1_n716(x)
+ if (x < 1)
+ fun_l2_n963(x)
+ else
+ fun_l2_n842(x)
+ end
+end
+
+def fun_l1_n717(x)
+ if (x < 1)
+ fun_l2_n671(x)
+ else
+ fun_l2_n954(x)
+ end
+end
+
+def fun_l1_n718(x)
+ if (x < 1)
+ fun_l2_n948(x)
+ else
+ fun_l2_n128(x)
+ end
+end
+
+def fun_l1_n719(x)
+ if (x < 1)
+ fun_l2_n682(x)
+ else
+ fun_l2_n973(x)
+ end
+end
+
+def fun_l1_n720(x)
+ if (x < 1)
+ fun_l2_n336(x)
+ else
+ fun_l2_n643(x)
+ end
+end
+
+def fun_l1_n721(x)
+ if (x < 1)
+ fun_l2_n224(x)
+ else
+ fun_l2_n96(x)
+ end
+end
+
+def fun_l1_n722(x)
+ if (x < 1)
+ fun_l2_n907(x)
+ else
+ fun_l2_n776(x)
+ end
+end
+
+def fun_l1_n723(x)
+ if (x < 1)
+ fun_l2_n93(x)
+ else
+ fun_l2_n410(x)
+ end
+end
+
+def fun_l1_n724(x)
+ if (x < 1)
+ fun_l2_n282(x)
+ else
+ fun_l2_n134(x)
+ end
+end
+
+def fun_l1_n725(x)
+ if (x < 1)
+ fun_l2_n938(x)
+ else
+ fun_l2_n603(x)
+ end
+end
+
+def fun_l1_n726(x)
+ if (x < 1)
+ fun_l2_n574(x)
+ else
+ fun_l2_n976(x)
+ end
+end
+
+def fun_l1_n727(x)
+ if (x < 1)
+ fun_l2_n428(x)
+ else
+ fun_l2_n658(x)
+ end
+end
+
+def fun_l1_n728(x)
+ if (x < 1)
+ fun_l2_n828(x)
+ else
+ fun_l2_n226(x)
+ end
+end
+
+def fun_l1_n729(x)
+ if (x < 1)
+ fun_l2_n663(x)
+ else
+ fun_l2_n292(x)
+ end
+end
+
+def fun_l1_n730(x)
+ if (x < 1)
+ fun_l2_n802(x)
+ else
+ fun_l2_n853(x)
+ end
+end
+
+def fun_l1_n731(x)
+ if (x < 1)
+ fun_l2_n142(x)
+ else
+ fun_l2_n339(x)
+ end
+end
+
+def fun_l1_n732(x)
+ if (x < 1)
+ fun_l2_n211(x)
+ else
+ fun_l2_n35(x)
+ end
+end
+
+def fun_l1_n733(x)
+ if (x < 1)
+ fun_l2_n660(x)
+ else
+ fun_l2_n179(x)
+ end
+end
+
+def fun_l1_n734(x)
+ if (x < 1)
+ fun_l2_n174(x)
+ else
+ fun_l2_n224(x)
+ end
+end
+
+def fun_l1_n735(x)
+ if (x < 1)
+ fun_l2_n490(x)
+ else
+ fun_l2_n564(x)
+ end
+end
+
+def fun_l1_n736(x)
+ if (x < 1)
+ fun_l2_n597(x)
+ else
+ fun_l2_n153(x)
+ end
+end
+
+def fun_l1_n737(x)
+ if (x < 1)
+ fun_l2_n633(x)
+ else
+ fun_l2_n358(x)
+ end
+end
+
+def fun_l1_n738(x)
+ if (x < 1)
+ fun_l2_n0(x)
+ else
+ fun_l2_n858(x)
+ end
+end
+
+def fun_l1_n739(x)
+ if (x < 1)
+ fun_l2_n335(x)
+ else
+ fun_l2_n531(x)
+ end
+end
+
+def fun_l1_n740(x)
+ if (x < 1)
+ fun_l2_n736(x)
+ else
+ fun_l2_n653(x)
+ end
+end
+
+def fun_l1_n741(x)
+ if (x < 1)
+ fun_l2_n280(x)
+ else
+ fun_l2_n684(x)
+ end
+end
+
+def fun_l1_n742(x)
+ if (x < 1)
+ fun_l2_n976(x)
+ else
+ fun_l2_n987(x)
+ end
+end
+
+def fun_l1_n743(x)
+ if (x < 1)
+ fun_l2_n519(x)
+ else
+ fun_l2_n633(x)
+ end
+end
+
+def fun_l1_n744(x)
+ if (x < 1)
+ fun_l2_n314(x)
+ else
+ fun_l2_n579(x)
+ end
+end
+
+def fun_l1_n745(x)
+ if (x < 1)
+ fun_l2_n365(x)
+ else
+ fun_l2_n972(x)
+ end
+end
+
+def fun_l1_n746(x)
+ if (x < 1)
+ fun_l2_n902(x)
+ else
+ fun_l2_n715(x)
+ end
+end
+
+def fun_l1_n747(x)
+ if (x < 1)
+ fun_l2_n363(x)
+ else
+ fun_l2_n407(x)
+ end
+end
+
+def fun_l1_n748(x)
+ if (x < 1)
+ fun_l2_n660(x)
+ else
+ fun_l2_n814(x)
+ end
+end
+
+def fun_l1_n749(x)
+ if (x < 1)
+ fun_l2_n415(x)
+ else
+ fun_l2_n162(x)
+ end
+end
+
+def fun_l1_n750(x)
+ if (x < 1)
+ fun_l2_n157(x)
+ else
+ fun_l2_n406(x)
+ end
+end
+
+def fun_l1_n751(x)
+ if (x < 1)
+ fun_l2_n388(x)
+ else
+ fun_l2_n212(x)
+ end
+end
+
+def fun_l1_n752(x)
+ if (x < 1)
+ fun_l2_n733(x)
+ else
+ fun_l2_n283(x)
+ end
+end
+
+def fun_l1_n753(x)
+ if (x < 1)
+ fun_l2_n960(x)
+ else
+ fun_l2_n20(x)
+ end
+end
+
+def fun_l1_n754(x)
+ if (x < 1)
+ fun_l2_n797(x)
+ else
+ fun_l2_n202(x)
+ end
+end
+
+def fun_l1_n755(x)
+ if (x < 1)
+ fun_l2_n113(x)
+ else
+ fun_l2_n953(x)
+ end
+end
+
+def fun_l1_n756(x)
+ if (x < 1)
+ fun_l2_n84(x)
+ else
+ fun_l2_n390(x)
+ end
+end
+
+def fun_l1_n757(x)
+ if (x < 1)
+ fun_l2_n355(x)
+ else
+ fun_l2_n761(x)
+ end
+end
+
+def fun_l1_n758(x)
+ if (x < 1)
+ fun_l2_n823(x)
+ else
+ fun_l2_n37(x)
+ end
+end
+
+def fun_l1_n759(x)
+ if (x < 1)
+ fun_l2_n428(x)
+ else
+ fun_l2_n130(x)
+ end
+end
+
+def fun_l1_n760(x)
+ if (x < 1)
+ fun_l2_n364(x)
+ else
+ fun_l2_n680(x)
+ end
+end
+
+def fun_l1_n761(x)
+ if (x < 1)
+ fun_l2_n718(x)
+ else
+ fun_l2_n885(x)
+ end
+end
+
+def fun_l1_n762(x)
+ if (x < 1)
+ fun_l2_n795(x)
+ else
+ fun_l2_n342(x)
+ end
+end
+
+def fun_l1_n763(x)
+ if (x < 1)
+ fun_l2_n561(x)
+ else
+ fun_l2_n593(x)
+ end
+end
+
+def fun_l1_n764(x)
+ if (x < 1)
+ fun_l2_n714(x)
+ else
+ fun_l2_n168(x)
+ end
+end
+
+def fun_l1_n765(x)
+ if (x < 1)
+ fun_l2_n377(x)
+ else
+ fun_l2_n109(x)
+ end
+end
+
+def fun_l1_n766(x)
+ if (x < 1)
+ fun_l2_n477(x)
+ else
+ fun_l2_n871(x)
+ end
+end
+
+def fun_l1_n767(x)
+ if (x < 1)
+ fun_l2_n596(x)
+ else
+ fun_l2_n81(x)
+ end
+end
+
+def fun_l1_n768(x)
+ if (x < 1)
+ fun_l2_n609(x)
+ else
+ fun_l2_n454(x)
+ end
+end
+
+def fun_l1_n769(x)
+ if (x < 1)
+ fun_l2_n308(x)
+ else
+ fun_l2_n890(x)
+ end
+end
+
+def fun_l1_n770(x)
+ if (x < 1)
+ fun_l2_n761(x)
+ else
+ fun_l2_n342(x)
+ end
+end
+
+def fun_l1_n771(x)
+ if (x < 1)
+ fun_l2_n44(x)
+ else
+ fun_l2_n1(x)
+ end
+end
+
+def fun_l1_n772(x)
+ if (x < 1)
+ fun_l2_n457(x)
+ else
+ fun_l2_n571(x)
+ end
+end
+
+def fun_l1_n773(x)
+ if (x < 1)
+ fun_l2_n88(x)
+ else
+ fun_l2_n622(x)
+ end
+end
+
+def fun_l1_n774(x)
+ if (x < 1)
+ fun_l2_n459(x)
+ else
+ fun_l2_n446(x)
+ end
+end
+
+def fun_l1_n775(x)
+ if (x < 1)
+ fun_l2_n400(x)
+ else
+ fun_l2_n918(x)
+ end
+end
+
+def fun_l1_n776(x)
+ if (x < 1)
+ fun_l2_n752(x)
+ else
+ fun_l2_n696(x)
+ end
+end
+
+def fun_l1_n777(x)
+ if (x < 1)
+ fun_l2_n968(x)
+ else
+ fun_l2_n988(x)
+ end
+end
+
+def fun_l1_n778(x)
+ if (x < 1)
+ fun_l2_n242(x)
+ else
+ fun_l2_n496(x)
+ end
+end
+
+def fun_l1_n779(x)
+ if (x < 1)
+ fun_l2_n106(x)
+ else
+ fun_l2_n637(x)
+ end
+end
+
+def fun_l1_n780(x)
+ if (x < 1)
+ fun_l2_n945(x)
+ else
+ fun_l2_n238(x)
+ end
+end
+
+def fun_l1_n781(x)
+ if (x < 1)
+ fun_l2_n269(x)
+ else
+ fun_l2_n582(x)
+ end
+end
+
+def fun_l1_n782(x)
+ if (x < 1)
+ fun_l2_n523(x)
+ else
+ fun_l2_n201(x)
+ end
+end
+
+def fun_l1_n783(x)
+ if (x < 1)
+ fun_l2_n326(x)
+ else
+ fun_l2_n744(x)
+ end
+end
+
+def fun_l1_n784(x)
+ if (x < 1)
+ fun_l2_n49(x)
+ else
+ fun_l2_n943(x)
+ end
+end
+
+def fun_l1_n785(x)
+ if (x < 1)
+ fun_l2_n975(x)
+ else
+ fun_l2_n560(x)
+ end
+end
+
+def fun_l1_n786(x)
+ if (x < 1)
+ fun_l2_n843(x)
+ else
+ fun_l2_n240(x)
+ end
+end
+
+def fun_l1_n787(x)
+ if (x < 1)
+ fun_l2_n179(x)
+ else
+ fun_l2_n423(x)
+ end
+end
+
+def fun_l1_n788(x)
+ if (x < 1)
+ fun_l2_n536(x)
+ else
+ fun_l2_n112(x)
+ end
+end
+
+def fun_l1_n789(x)
+ if (x < 1)
+ fun_l2_n418(x)
+ else
+ fun_l2_n443(x)
+ end
+end
+
+def fun_l1_n790(x)
+ if (x < 1)
+ fun_l2_n770(x)
+ else
+ fun_l2_n127(x)
+ end
+end
+
+def fun_l1_n791(x)
+ if (x < 1)
+ fun_l2_n425(x)
+ else
+ fun_l2_n364(x)
+ end
+end
+
+def fun_l1_n792(x)
+ if (x < 1)
+ fun_l2_n841(x)
+ else
+ fun_l2_n112(x)
+ end
+end
+
+def fun_l1_n793(x)
+ if (x < 1)
+ fun_l2_n64(x)
+ else
+ fun_l2_n294(x)
+ end
+end
+
+def fun_l1_n794(x)
+ if (x < 1)
+ fun_l2_n837(x)
+ else
+ fun_l2_n325(x)
+ end
+end
+
+def fun_l1_n795(x)
+ if (x < 1)
+ fun_l2_n522(x)
+ else
+ fun_l2_n307(x)
+ end
+end
+
+def fun_l1_n796(x)
+ if (x < 1)
+ fun_l2_n526(x)
+ else
+ fun_l2_n957(x)
+ end
+end
+
+def fun_l1_n797(x)
+ if (x < 1)
+ fun_l2_n71(x)
+ else
+ fun_l2_n871(x)
+ end
+end
+
+def fun_l1_n798(x)
+ if (x < 1)
+ fun_l2_n386(x)
+ else
+ fun_l2_n354(x)
+ end
+end
+
+def fun_l1_n799(x)
+ if (x < 1)
+ fun_l2_n669(x)
+ else
+ fun_l2_n237(x)
+ end
+end
+
+def fun_l1_n800(x)
+ if (x < 1)
+ fun_l2_n455(x)
+ else
+ fun_l2_n549(x)
+ end
+end
+
+def fun_l1_n801(x)
+ if (x < 1)
+ fun_l2_n708(x)
+ else
+ fun_l2_n611(x)
+ end
+end
+
+def fun_l1_n802(x)
+ if (x < 1)
+ fun_l2_n35(x)
+ else
+ fun_l2_n239(x)
+ end
+end
+
+def fun_l1_n803(x)
+ if (x < 1)
+ fun_l2_n890(x)
+ else
+ fun_l2_n27(x)
+ end
+end
+
+def fun_l1_n804(x)
+ if (x < 1)
+ fun_l2_n378(x)
+ else
+ fun_l2_n567(x)
+ end
+end
+
+def fun_l1_n805(x)
+ if (x < 1)
+ fun_l2_n672(x)
+ else
+ fun_l2_n320(x)
+ end
+end
+
+def fun_l1_n806(x)
+ if (x < 1)
+ fun_l2_n207(x)
+ else
+ fun_l2_n691(x)
+ end
+end
+
+def fun_l1_n807(x)
+ if (x < 1)
+ fun_l2_n180(x)
+ else
+ fun_l2_n912(x)
+ end
+end
+
+def fun_l1_n808(x)
+ if (x < 1)
+ fun_l2_n370(x)
+ else
+ fun_l2_n529(x)
+ end
+end
+
+def fun_l1_n809(x)
+ if (x < 1)
+ fun_l2_n436(x)
+ else
+ fun_l2_n465(x)
+ end
+end
+
+def fun_l1_n810(x)
+ if (x < 1)
+ fun_l2_n820(x)
+ else
+ fun_l2_n995(x)
+ end
+end
+
+def fun_l1_n811(x)
+ if (x < 1)
+ fun_l2_n821(x)
+ else
+ fun_l2_n898(x)
+ end
+end
+
+def fun_l1_n812(x)
+ if (x < 1)
+ fun_l2_n376(x)
+ else
+ fun_l2_n999(x)
+ end
+end
+
+def fun_l1_n813(x)
+ if (x < 1)
+ fun_l2_n643(x)
+ else
+ fun_l2_n478(x)
+ end
+end
+
+def fun_l1_n814(x)
+ if (x < 1)
+ fun_l2_n475(x)
+ else
+ fun_l2_n137(x)
+ end
+end
+
+def fun_l1_n815(x)
+ if (x < 1)
+ fun_l2_n117(x)
+ else
+ fun_l2_n685(x)
+ end
+end
+
+def fun_l1_n816(x)
+ if (x < 1)
+ fun_l2_n451(x)
+ else
+ fun_l2_n643(x)
+ end
+end
+
+def fun_l1_n817(x)
+ if (x < 1)
+ fun_l2_n22(x)
+ else
+ fun_l2_n939(x)
+ end
+end
+
+def fun_l1_n818(x)
+ if (x < 1)
+ fun_l2_n586(x)
+ else
+ fun_l2_n206(x)
+ end
+end
+
+def fun_l1_n819(x)
+ if (x < 1)
+ fun_l2_n443(x)
+ else
+ fun_l2_n661(x)
+ end
+end
+
+def fun_l1_n820(x)
+ if (x < 1)
+ fun_l2_n656(x)
+ else
+ fun_l2_n93(x)
+ end
+end
+
+def fun_l1_n821(x)
+ if (x < 1)
+ fun_l2_n794(x)
+ else
+ fun_l2_n354(x)
+ end
+end
+
+def fun_l1_n822(x)
+ if (x < 1)
+ fun_l2_n519(x)
+ else
+ fun_l2_n446(x)
+ end
+end
+
+def fun_l1_n823(x)
+ if (x < 1)
+ fun_l2_n0(x)
+ else
+ fun_l2_n233(x)
+ end
+end
+
+def fun_l1_n824(x)
+ if (x < 1)
+ fun_l2_n376(x)
+ else
+ fun_l2_n186(x)
+ end
+end
+
+def fun_l1_n825(x)
+ if (x < 1)
+ fun_l2_n292(x)
+ else
+ fun_l2_n303(x)
+ end
+end
+
+def fun_l1_n826(x)
+ if (x < 1)
+ fun_l2_n871(x)
+ else
+ fun_l2_n515(x)
+ end
+end
+
+def fun_l1_n827(x)
+ if (x < 1)
+ fun_l2_n227(x)
+ else
+ fun_l2_n232(x)
+ end
+end
+
+def fun_l1_n828(x)
+ if (x < 1)
+ fun_l2_n860(x)
+ else
+ fun_l2_n341(x)
+ end
+end
+
+def fun_l1_n829(x)
+ if (x < 1)
+ fun_l2_n140(x)
+ else
+ fun_l2_n304(x)
+ end
+end
+
+def fun_l1_n830(x)
+ if (x < 1)
+ fun_l2_n796(x)
+ else
+ fun_l2_n943(x)
+ end
+end
+
+def fun_l1_n831(x)
+ if (x < 1)
+ fun_l2_n71(x)
+ else
+ fun_l2_n8(x)
+ end
+end
+
+def fun_l1_n832(x)
+ if (x < 1)
+ fun_l2_n328(x)
+ else
+ fun_l2_n836(x)
+ end
+end
+
+def fun_l1_n833(x)
+ if (x < 1)
+ fun_l2_n322(x)
+ else
+ fun_l2_n653(x)
+ end
+end
+
+def fun_l1_n834(x)
+ if (x < 1)
+ fun_l2_n471(x)
+ else
+ fun_l2_n147(x)
+ end
+end
+
+def fun_l1_n835(x)
+ if (x < 1)
+ fun_l2_n601(x)
+ else
+ fun_l2_n249(x)
+ end
+end
+
+def fun_l1_n836(x)
+ if (x < 1)
+ fun_l2_n105(x)
+ else
+ fun_l2_n63(x)
+ end
+end
+
+def fun_l1_n837(x)
+ if (x < 1)
+ fun_l2_n773(x)
+ else
+ fun_l2_n597(x)
+ end
+end
+
+def fun_l1_n838(x)
+ if (x < 1)
+ fun_l2_n933(x)
+ else
+ fun_l2_n964(x)
+ end
+end
+
+def fun_l1_n839(x)
+ if (x < 1)
+ fun_l2_n123(x)
+ else
+ fun_l2_n533(x)
+ end
+end
+
+def fun_l1_n840(x)
+ if (x < 1)
+ fun_l2_n94(x)
+ else
+ fun_l2_n127(x)
+ end
+end
+
+def fun_l1_n841(x)
+ if (x < 1)
+ fun_l2_n981(x)
+ else
+ fun_l2_n819(x)
+ end
+end
+
+def fun_l1_n842(x)
+ if (x < 1)
+ fun_l2_n743(x)
+ else
+ fun_l2_n747(x)
+ end
+end
+
+def fun_l1_n843(x)
+ if (x < 1)
+ fun_l2_n735(x)
+ else
+ fun_l2_n110(x)
+ end
+end
+
+def fun_l1_n844(x)
+ if (x < 1)
+ fun_l2_n273(x)
+ else
+ fun_l2_n753(x)
+ end
+end
+
+def fun_l1_n845(x)
+ if (x < 1)
+ fun_l2_n316(x)
+ else
+ fun_l2_n391(x)
+ end
+end
+
+def fun_l1_n846(x)
+ if (x < 1)
+ fun_l2_n221(x)
+ else
+ fun_l2_n251(x)
+ end
+end
+
+def fun_l1_n847(x)
+ if (x < 1)
+ fun_l2_n795(x)
+ else
+ fun_l2_n513(x)
+ end
+end
+
+def fun_l1_n848(x)
+ if (x < 1)
+ fun_l2_n986(x)
+ else
+ fun_l2_n472(x)
+ end
+end
+
+def fun_l1_n849(x)
+ if (x < 1)
+ fun_l2_n863(x)
+ else
+ fun_l2_n759(x)
+ end
+end
+
+def fun_l1_n850(x)
+ if (x < 1)
+ fun_l2_n512(x)
+ else
+ fun_l2_n502(x)
+ end
+end
+
+def fun_l1_n851(x)
+ if (x < 1)
+ fun_l2_n561(x)
+ else
+ fun_l2_n697(x)
+ end
+end
+
+def fun_l1_n852(x)
+ if (x < 1)
+ fun_l2_n816(x)
+ else
+ fun_l2_n90(x)
+ end
+end
+
+def fun_l1_n853(x)
+ if (x < 1)
+ fun_l2_n656(x)
+ else
+ fun_l2_n174(x)
+ end
+end
+
+def fun_l1_n854(x)
+ if (x < 1)
+ fun_l2_n439(x)
+ else
+ fun_l2_n90(x)
+ end
+end
+
+def fun_l1_n855(x)
+ if (x < 1)
+ fun_l2_n15(x)
+ else
+ fun_l2_n402(x)
+ end
+end
+
+def fun_l1_n856(x)
+ if (x < 1)
+ fun_l2_n224(x)
+ else
+ fun_l2_n177(x)
+ end
+end
+
+def fun_l1_n857(x)
+ if (x < 1)
+ fun_l2_n675(x)
+ else
+ fun_l2_n113(x)
+ end
+end
+
+def fun_l1_n858(x)
+ if (x < 1)
+ fun_l2_n388(x)
+ else
+ fun_l2_n529(x)
+ end
+end
+
+def fun_l1_n859(x)
+ if (x < 1)
+ fun_l2_n628(x)
+ else
+ fun_l2_n93(x)
+ end
+end
+
+def fun_l1_n860(x)
+ if (x < 1)
+ fun_l2_n67(x)
+ else
+ fun_l2_n90(x)
+ end
+end
+
+def fun_l1_n861(x)
+ if (x < 1)
+ fun_l2_n637(x)
+ else
+ fun_l2_n68(x)
+ end
+end
+
+def fun_l1_n862(x)
+ if (x < 1)
+ fun_l2_n767(x)
+ else
+ fun_l2_n86(x)
+ end
+end
+
+def fun_l1_n863(x)
+ if (x < 1)
+ fun_l2_n50(x)
+ else
+ fun_l2_n777(x)
+ end
+end
+
+def fun_l1_n864(x)
+ if (x < 1)
+ fun_l2_n846(x)
+ else
+ fun_l2_n783(x)
+ end
+end
+
+def fun_l1_n865(x)
+ if (x < 1)
+ fun_l2_n756(x)
+ else
+ fun_l2_n703(x)
+ end
+end
+
+def fun_l1_n866(x)
+ if (x < 1)
+ fun_l2_n972(x)
+ else
+ fun_l2_n249(x)
+ end
+end
+
+def fun_l1_n867(x)
+ if (x < 1)
+ fun_l2_n636(x)
+ else
+ fun_l2_n841(x)
+ end
+end
+
+def fun_l1_n868(x)
+ if (x < 1)
+ fun_l2_n889(x)
+ else
+ fun_l2_n899(x)
+ end
+end
+
+def fun_l1_n869(x)
+ if (x < 1)
+ fun_l2_n55(x)
+ else
+ fun_l2_n45(x)
+ end
+end
+
+def fun_l1_n870(x)
+ if (x < 1)
+ fun_l2_n740(x)
+ else
+ fun_l2_n722(x)
+ end
+end
+
+def fun_l1_n871(x)
+ if (x < 1)
+ fun_l2_n865(x)
+ else
+ fun_l2_n695(x)
+ end
+end
+
+def fun_l1_n872(x)
+ if (x < 1)
+ fun_l2_n54(x)
+ else
+ fun_l2_n581(x)
+ end
+end
+
+def fun_l1_n873(x)
+ if (x < 1)
+ fun_l2_n328(x)
+ else
+ fun_l2_n861(x)
+ end
+end
+
+def fun_l1_n874(x)
+ if (x < 1)
+ fun_l2_n645(x)
+ else
+ fun_l2_n121(x)
+ end
+end
+
+def fun_l1_n875(x)
+ if (x < 1)
+ fun_l2_n71(x)
+ else
+ fun_l2_n329(x)
+ end
+end
+
+def fun_l1_n876(x)
+ if (x < 1)
+ fun_l2_n944(x)
+ else
+ fun_l2_n95(x)
+ end
+end
+
+def fun_l1_n877(x)
+ if (x < 1)
+ fun_l2_n270(x)
+ else
+ fun_l2_n801(x)
+ end
+end
+
+def fun_l1_n878(x)
+ if (x < 1)
+ fun_l2_n115(x)
+ else
+ fun_l2_n414(x)
+ end
+end
+
+def fun_l1_n879(x)
+ if (x < 1)
+ fun_l2_n154(x)
+ else
+ fun_l2_n605(x)
+ end
+end
+
+def fun_l1_n880(x)
+ if (x < 1)
+ fun_l2_n859(x)
+ else
+ fun_l2_n307(x)
+ end
+end
+
+def fun_l1_n881(x)
+ if (x < 1)
+ fun_l2_n443(x)
+ else
+ fun_l2_n267(x)
+ end
+end
+
+def fun_l1_n882(x)
+ if (x < 1)
+ fun_l2_n280(x)
+ else
+ fun_l2_n175(x)
+ end
+end
+
+def fun_l1_n883(x)
+ if (x < 1)
+ fun_l2_n176(x)
+ else
+ fun_l2_n286(x)
+ end
+end
+
+def fun_l1_n884(x)
+ if (x < 1)
+ fun_l2_n422(x)
+ else
+ fun_l2_n469(x)
+ end
+end
+
+def fun_l1_n885(x)
+ if (x < 1)
+ fun_l2_n532(x)
+ else
+ fun_l2_n795(x)
+ end
+end
+
+def fun_l1_n886(x)
+ if (x < 1)
+ fun_l2_n966(x)
+ else
+ fun_l2_n46(x)
+ end
+end
+
+def fun_l1_n887(x)
+ if (x < 1)
+ fun_l2_n446(x)
+ else
+ fun_l2_n944(x)
+ end
+end
+
+def fun_l1_n888(x)
+ if (x < 1)
+ fun_l2_n256(x)
+ else
+ fun_l2_n757(x)
+ end
+end
+
+def fun_l1_n889(x)
+ if (x < 1)
+ fun_l2_n566(x)
+ else
+ fun_l2_n992(x)
+ end
+end
+
+def fun_l1_n890(x)
+ if (x < 1)
+ fun_l2_n55(x)
+ else
+ fun_l2_n121(x)
+ end
+end
+
+def fun_l1_n891(x)
+ if (x < 1)
+ fun_l2_n597(x)
+ else
+ fun_l2_n257(x)
+ end
+end
+
+def fun_l1_n892(x)
+ if (x < 1)
+ fun_l2_n79(x)
+ else
+ fun_l2_n249(x)
+ end
+end
+
+def fun_l1_n893(x)
+ if (x < 1)
+ fun_l2_n436(x)
+ else
+ fun_l2_n738(x)
+ end
+end
+
+def fun_l1_n894(x)
+ if (x < 1)
+ fun_l2_n244(x)
+ else
+ fun_l2_n184(x)
+ end
+end
+
+def fun_l1_n895(x)
+ if (x < 1)
+ fun_l2_n342(x)
+ else
+ fun_l2_n794(x)
+ end
+end
+
+def fun_l1_n896(x)
+ if (x < 1)
+ fun_l2_n588(x)
+ else
+ fun_l2_n235(x)
+ end
+end
+
+def fun_l1_n897(x)
+ if (x < 1)
+ fun_l2_n443(x)
+ else
+ fun_l2_n462(x)
+ end
+end
+
+def fun_l1_n898(x)
+ if (x < 1)
+ fun_l2_n986(x)
+ else
+ fun_l2_n282(x)
+ end
+end
+
+def fun_l1_n899(x)
+ if (x < 1)
+ fun_l2_n61(x)
+ else
+ fun_l2_n516(x)
+ end
+end
+
+def fun_l1_n900(x)
+ if (x < 1)
+ fun_l2_n993(x)
+ else
+ fun_l2_n337(x)
+ end
+end
+
+def fun_l1_n901(x)
+ if (x < 1)
+ fun_l2_n398(x)
+ else
+ fun_l2_n425(x)
+ end
+end
+
+def fun_l1_n902(x)
+ if (x < 1)
+ fun_l2_n177(x)
+ else
+ fun_l2_n741(x)
+ end
+end
+
+def fun_l1_n903(x)
+ if (x < 1)
+ fun_l2_n597(x)
+ else
+ fun_l2_n331(x)
+ end
+end
+
+def fun_l1_n904(x)
+ if (x < 1)
+ fun_l2_n740(x)
+ else
+ fun_l2_n527(x)
+ end
+end
+
+def fun_l1_n905(x)
+ if (x < 1)
+ fun_l2_n138(x)
+ else
+ fun_l2_n248(x)
+ end
+end
+
+def fun_l1_n906(x)
+ if (x < 1)
+ fun_l2_n318(x)
+ else
+ fun_l2_n941(x)
+ end
+end
+
+def fun_l1_n907(x)
+ if (x < 1)
+ fun_l2_n493(x)
+ else
+ fun_l2_n376(x)
+ end
+end
+
+def fun_l1_n908(x)
+ if (x < 1)
+ fun_l2_n899(x)
+ else
+ fun_l2_n745(x)
+ end
+end
+
+def fun_l1_n909(x)
+ if (x < 1)
+ fun_l2_n963(x)
+ else
+ fun_l2_n384(x)
+ end
+end
+
+def fun_l1_n910(x)
+ if (x < 1)
+ fun_l2_n490(x)
+ else
+ fun_l2_n702(x)
+ end
+end
+
+def fun_l1_n911(x)
+ if (x < 1)
+ fun_l2_n712(x)
+ else
+ fun_l2_n810(x)
+ end
+end
+
+def fun_l1_n912(x)
+ if (x < 1)
+ fun_l2_n245(x)
+ else
+ fun_l2_n609(x)
+ end
+end
+
+def fun_l1_n913(x)
+ if (x < 1)
+ fun_l2_n997(x)
+ else
+ fun_l2_n241(x)
+ end
+end
+
+def fun_l1_n914(x)
+ if (x < 1)
+ fun_l2_n428(x)
+ else
+ fun_l2_n697(x)
+ end
+end
+
+def fun_l1_n915(x)
+ if (x < 1)
+ fun_l2_n257(x)
+ else
+ fun_l2_n626(x)
+ end
+end
+
+def fun_l1_n916(x)
+ if (x < 1)
+ fun_l2_n378(x)
+ else
+ fun_l2_n457(x)
+ end
+end
+
+def fun_l1_n917(x)
+ if (x < 1)
+ fun_l2_n378(x)
+ else
+ fun_l2_n958(x)
+ end
+end
+
+def fun_l1_n918(x)
+ if (x < 1)
+ fun_l2_n213(x)
+ else
+ fun_l2_n962(x)
+ end
+end
+
+def fun_l1_n919(x)
+ if (x < 1)
+ fun_l2_n466(x)
+ else
+ fun_l2_n461(x)
+ end
+end
+
+def fun_l1_n920(x)
+ if (x < 1)
+ fun_l2_n835(x)
+ else
+ fun_l2_n460(x)
+ end
+end
+
+def fun_l1_n921(x)
+ if (x < 1)
+ fun_l2_n642(x)
+ else
+ fun_l2_n680(x)
+ end
+end
+
+def fun_l1_n922(x)
+ if (x < 1)
+ fun_l2_n467(x)
+ else
+ fun_l2_n225(x)
+ end
+end
+
+def fun_l1_n923(x)
+ if (x < 1)
+ fun_l2_n752(x)
+ else
+ fun_l2_n462(x)
+ end
+end
+
+def fun_l1_n924(x)
+ if (x < 1)
+ fun_l2_n113(x)
+ else
+ fun_l2_n59(x)
+ end
+end
+
+def fun_l1_n925(x)
+ if (x < 1)
+ fun_l2_n329(x)
+ else
+ fun_l2_n994(x)
+ end
+end
+
+def fun_l1_n926(x)
+ if (x < 1)
+ fun_l2_n815(x)
+ else
+ fun_l2_n249(x)
+ end
+end
+
+def fun_l1_n927(x)
+ if (x < 1)
+ fun_l2_n216(x)
+ else
+ fun_l2_n591(x)
+ end
+end
+
+def fun_l1_n928(x)
+ if (x < 1)
+ fun_l2_n441(x)
+ else
+ fun_l2_n437(x)
+ end
+end
+
+def fun_l1_n929(x)
+ if (x < 1)
+ fun_l2_n433(x)
+ else
+ fun_l2_n185(x)
+ end
+end
+
+def fun_l1_n930(x)
+ if (x < 1)
+ fun_l2_n125(x)
+ else
+ fun_l2_n940(x)
+ end
+end
+
+def fun_l1_n931(x)
+ if (x < 1)
+ fun_l2_n203(x)
+ else
+ fun_l2_n292(x)
+ end
+end
+
+def fun_l1_n932(x)
+ if (x < 1)
+ fun_l2_n986(x)
+ else
+ fun_l2_n234(x)
+ end
+end
+
+def fun_l1_n933(x)
+ if (x < 1)
+ fun_l2_n735(x)
+ else
+ fun_l2_n20(x)
+ end
+end
+
+def fun_l1_n934(x)
+ if (x < 1)
+ fun_l2_n878(x)
+ else
+ fun_l2_n166(x)
+ end
+end
+
+def fun_l1_n935(x)
+ if (x < 1)
+ fun_l2_n123(x)
+ else
+ fun_l2_n52(x)
+ end
+end
+
+def fun_l1_n936(x)
+ if (x < 1)
+ fun_l2_n99(x)
+ else
+ fun_l2_n336(x)
+ end
+end
+
+def fun_l1_n937(x)
+ if (x < 1)
+ fun_l2_n731(x)
+ else
+ fun_l2_n363(x)
+ end
+end
+
+def fun_l1_n938(x)
+ if (x < 1)
+ fun_l2_n988(x)
+ else
+ fun_l2_n978(x)
+ end
+end
+
+def fun_l1_n939(x)
+ if (x < 1)
+ fun_l2_n592(x)
+ else
+ fun_l2_n932(x)
+ end
+end
+
+def fun_l1_n940(x)
+ if (x < 1)
+ fun_l2_n681(x)
+ else
+ fun_l2_n868(x)
+ end
+end
+
+def fun_l1_n941(x)
+ if (x < 1)
+ fun_l2_n863(x)
+ else
+ fun_l2_n457(x)
+ end
+end
+
+def fun_l1_n942(x)
+ if (x < 1)
+ fun_l2_n526(x)
+ else
+ fun_l2_n960(x)
+ end
+end
+
+def fun_l1_n943(x)
+ if (x < 1)
+ fun_l2_n859(x)
+ else
+ fun_l2_n478(x)
+ end
+end
+
+def fun_l1_n944(x)
+ if (x < 1)
+ fun_l2_n947(x)
+ else
+ fun_l2_n889(x)
+ end
+end
+
+def fun_l1_n945(x)
+ if (x < 1)
+ fun_l2_n845(x)
+ else
+ fun_l2_n211(x)
+ end
+end
+
+def fun_l1_n946(x)
+ if (x < 1)
+ fun_l2_n445(x)
+ else
+ fun_l2_n600(x)
+ end
+end
+
+def fun_l1_n947(x)
+ if (x < 1)
+ fun_l2_n932(x)
+ else
+ fun_l2_n534(x)
+ end
+end
+
+def fun_l1_n948(x)
+ if (x < 1)
+ fun_l2_n224(x)
+ else
+ fun_l2_n32(x)
+ end
+end
+
+def fun_l1_n949(x)
+ if (x < 1)
+ fun_l2_n63(x)
+ else
+ fun_l2_n121(x)
+ end
+end
+
+def fun_l1_n950(x)
+ if (x < 1)
+ fun_l2_n55(x)
+ else
+ fun_l2_n90(x)
+ end
+end
+
+def fun_l1_n951(x)
+ if (x < 1)
+ fun_l2_n880(x)
+ else
+ fun_l2_n936(x)
+ end
+end
+
+def fun_l1_n952(x)
+ if (x < 1)
+ fun_l2_n971(x)
+ else
+ fun_l2_n40(x)
+ end
+end
+
+def fun_l1_n953(x)
+ if (x < 1)
+ fun_l2_n880(x)
+ else
+ fun_l2_n200(x)
+ end
+end
+
+def fun_l1_n954(x)
+ if (x < 1)
+ fun_l2_n60(x)
+ else
+ fun_l2_n473(x)
+ end
+end
+
+def fun_l1_n955(x)
+ if (x < 1)
+ fun_l2_n855(x)
+ else
+ fun_l2_n601(x)
+ end
+end
+
+def fun_l1_n956(x)
+ if (x < 1)
+ fun_l2_n282(x)
+ else
+ fun_l2_n542(x)
+ end
+end
+
+def fun_l1_n957(x)
+ if (x < 1)
+ fun_l2_n116(x)
+ else
+ fun_l2_n584(x)
+ end
+end
+
+def fun_l1_n958(x)
+ if (x < 1)
+ fun_l2_n845(x)
+ else
+ fun_l2_n814(x)
+ end
+end
+
+def fun_l1_n959(x)
+ if (x < 1)
+ fun_l2_n443(x)
+ else
+ fun_l2_n239(x)
+ end
+end
+
+def fun_l1_n960(x)
+ if (x < 1)
+ fun_l2_n79(x)
+ else
+ fun_l2_n556(x)
+ end
+end
+
+def fun_l1_n961(x)
+ if (x < 1)
+ fun_l2_n664(x)
+ else
+ fun_l2_n282(x)
+ end
+end
+
+def fun_l1_n962(x)
+ if (x < 1)
+ fun_l2_n273(x)
+ else
+ fun_l2_n393(x)
+ end
+end
+
+def fun_l1_n963(x)
+ if (x < 1)
+ fun_l2_n120(x)
+ else
+ fun_l2_n506(x)
+ end
+end
+
+def fun_l1_n964(x)
+ if (x < 1)
+ fun_l2_n362(x)
+ else
+ fun_l2_n631(x)
+ end
+end
+
+def fun_l1_n965(x)
+ if (x < 1)
+ fun_l2_n219(x)
+ else
+ fun_l2_n260(x)
+ end
+end
+
+def fun_l1_n966(x)
+ if (x < 1)
+ fun_l2_n802(x)
+ else
+ fun_l2_n732(x)
+ end
+end
+
+def fun_l1_n967(x)
+ if (x < 1)
+ fun_l2_n761(x)
+ else
+ fun_l2_n580(x)
+ end
+end
+
+def fun_l1_n968(x)
+ if (x < 1)
+ fun_l2_n529(x)
+ else
+ fun_l2_n783(x)
+ end
+end
+
+def fun_l1_n969(x)
+ if (x < 1)
+ fun_l2_n138(x)
+ else
+ fun_l2_n434(x)
+ end
+end
+
+def fun_l1_n970(x)
+ if (x < 1)
+ fun_l2_n266(x)
+ else
+ fun_l2_n522(x)
+ end
+end
+
+def fun_l1_n971(x)
+ if (x < 1)
+ fun_l2_n352(x)
+ else
+ fun_l2_n51(x)
+ end
+end
+
+def fun_l1_n972(x)
+ if (x < 1)
+ fun_l2_n619(x)
+ else
+ fun_l2_n68(x)
+ end
+end
+
+def fun_l1_n973(x)
+ if (x < 1)
+ fun_l2_n510(x)
+ else
+ fun_l2_n74(x)
+ end
+end
+
+def fun_l1_n974(x)
+ if (x < 1)
+ fun_l2_n442(x)
+ else
+ fun_l2_n258(x)
+ end
+end
+
+def fun_l1_n975(x)
+ if (x < 1)
+ fun_l2_n106(x)
+ else
+ fun_l2_n364(x)
+ end
+end
+
+def fun_l1_n976(x)
+ if (x < 1)
+ fun_l2_n412(x)
+ else
+ fun_l2_n669(x)
+ end
+end
+
+def fun_l1_n977(x)
+ if (x < 1)
+ fun_l2_n394(x)
+ else
+ fun_l2_n435(x)
+ end
+end
+
+def fun_l1_n978(x)
+ if (x < 1)
+ fun_l2_n630(x)
+ else
+ fun_l2_n686(x)
+ end
+end
+
+def fun_l1_n979(x)
+ if (x < 1)
+ fun_l2_n683(x)
+ else
+ fun_l2_n99(x)
+ end
+end
+
+def fun_l1_n980(x)
+ if (x < 1)
+ fun_l2_n352(x)
+ else
+ fun_l2_n394(x)
+ end
+end
+
+def fun_l1_n981(x)
+ if (x < 1)
+ fun_l2_n856(x)
+ else
+ fun_l2_n11(x)
+ end
+end
+
+def fun_l1_n982(x)
+ if (x < 1)
+ fun_l2_n484(x)
+ else
+ fun_l2_n230(x)
+ end
+end
+
+def fun_l1_n983(x)
+ if (x < 1)
+ fun_l2_n609(x)
+ else
+ fun_l2_n882(x)
+ end
+end
+
+def fun_l1_n984(x)
+ if (x < 1)
+ fun_l2_n529(x)
+ else
+ fun_l2_n589(x)
+ end
+end
+
+def fun_l1_n985(x)
+ if (x < 1)
+ fun_l2_n545(x)
+ else
+ fun_l2_n139(x)
+ end
+end
+
+def fun_l1_n986(x)
+ if (x < 1)
+ fun_l2_n679(x)
+ else
+ fun_l2_n938(x)
+ end
+end
+
+def fun_l1_n987(x)
+ if (x < 1)
+ fun_l2_n803(x)
+ else
+ fun_l2_n454(x)
+ end
+end
+
+def fun_l1_n988(x)
+ if (x < 1)
+ fun_l2_n403(x)
+ else
+ fun_l2_n976(x)
+ end
+end
+
+def fun_l1_n989(x)
+ if (x < 1)
+ fun_l2_n364(x)
+ else
+ fun_l2_n96(x)
+ end
+end
+
+def fun_l1_n990(x)
+ if (x < 1)
+ fun_l2_n48(x)
+ else
+ fun_l2_n442(x)
+ end
+end
+
+def fun_l1_n991(x)
+ if (x < 1)
+ fun_l2_n842(x)
+ else
+ fun_l2_n810(x)
+ end
+end
+
+def fun_l1_n992(x)
+ if (x < 1)
+ fun_l2_n237(x)
+ else
+ fun_l2_n145(x)
+ end
+end
+
+def fun_l1_n993(x)
+ if (x < 1)
+ fun_l2_n279(x)
+ else
+ fun_l2_n783(x)
+ end
+end
+
+def fun_l1_n994(x)
+ if (x < 1)
+ fun_l2_n323(x)
+ else
+ fun_l2_n829(x)
+ end
+end
+
+def fun_l1_n995(x)
+ if (x < 1)
+ fun_l2_n904(x)
+ else
+ fun_l2_n738(x)
+ end
+end
+
+def fun_l1_n996(x)
+ if (x < 1)
+ fun_l2_n390(x)
+ else
+ fun_l2_n169(x)
+ end
+end
+
+def fun_l1_n997(x)
+ if (x < 1)
+ fun_l2_n583(x)
+ else
+ fun_l2_n993(x)
+ end
+end
+
+def fun_l1_n998(x)
+ if (x < 1)
+ fun_l2_n752(x)
+ else
+ fun_l2_n240(x)
+ end
+end
+
+def fun_l1_n999(x)
+ if (x < 1)
+ fun_l2_n489(x)
+ else
+ fun_l2_n175(x)
+ end
+end
+
+def fun_l2_n0(x)
+ if (x < 1)
+ fun_l3_n293(x)
+ else
+ fun_l3_n569(x)
+ end
+end
+
+def fun_l2_n1(x)
+ if (x < 1)
+ fun_l3_n310(x)
+ else
+ fun_l3_n785(x)
+ end
+end
+
+def fun_l2_n2(x)
+ if (x < 1)
+ fun_l3_n484(x)
+ else
+ fun_l3_n800(x)
+ end
+end
+
+def fun_l2_n3(x)
+ if (x < 1)
+ fun_l3_n353(x)
+ else
+ fun_l3_n871(x)
+ end
+end
+
+def fun_l2_n4(x)
+ if (x < 1)
+ fun_l3_n100(x)
+ else
+ fun_l3_n796(x)
+ end
+end
+
+def fun_l2_n5(x)
+ if (x < 1)
+ fun_l3_n547(x)
+ else
+ fun_l3_n663(x)
+ end
+end
+
+def fun_l2_n6(x)
+ if (x < 1)
+ fun_l3_n756(x)
+ else
+ fun_l3_n69(x)
+ end
+end
+
+def fun_l2_n7(x)
+ if (x < 1)
+ fun_l3_n393(x)
+ else
+ fun_l3_n333(x)
+ end
+end
+
+def fun_l2_n8(x)
+ if (x < 1)
+ fun_l3_n167(x)
+ else
+ fun_l3_n47(x)
+ end
+end
+
+def fun_l2_n9(x)
+ if (x < 1)
+ fun_l3_n969(x)
+ else
+ fun_l3_n772(x)
+ end
+end
+
+def fun_l2_n10(x)
+ if (x < 1)
+ fun_l3_n667(x)
+ else
+ fun_l3_n62(x)
+ end
+end
+
+def fun_l2_n11(x)
+ if (x < 1)
+ fun_l3_n671(x)
+ else
+ fun_l3_n303(x)
+ end
+end
+
+def fun_l2_n12(x)
+ if (x < 1)
+ fun_l3_n116(x)
+ else
+ fun_l3_n537(x)
+ end
+end
+
+def fun_l2_n13(x)
+ if (x < 1)
+ fun_l3_n363(x)
+ else
+ fun_l3_n426(x)
+ end
+end
+
+def fun_l2_n14(x)
+ if (x < 1)
+ fun_l3_n23(x)
+ else
+ fun_l3_n800(x)
+ end
+end
+
+def fun_l2_n15(x)
+ if (x < 1)
+ fun_l3_n344(x)
+ else
+ fun_l3_n590(x)
+ end
+end
+
+def fun_l2_n16(x)
+ if (x < 1)
+ fun_l3_n759(x)
+ else
+ fun_l3_n531(x)
+ end
+end
+
+def fun_l2_n17(x)
+ if (x < 1)
+ fun_l3_n902(x)
+ else
+ fun_l3_n948(x)
+ end
+end
+
+def fun_l2_n18(x)
+ if (x < 1)
+ fun_l3_n407(x)
+ else
+ fun_l3_n743(x)
+ end
+end
+
+def fun_l2_n19(x)
+ if (x < 1)
+ fun_l3_n360(x)
+ else
+ fun_l3_n953(x)
+ end
+end
+
+def fun_l2_n20(x)
+ if (x < 1)
+ fun_l3_n968(x)
+ else
+ fun_l3_n685(x)
+ end
+end
+
+def fun_l2_n21(x)
+ if (x < 1)
+ fun_l3_n964(x)
+ else
+ fun_l3_n210(x)
+ end
+end
+
+def fun_l2_n22(x)
+ if (x < 1)
+ fun_l3_n346(x)
+ else
+ fun_l3_n902(x)
+ end
+end
+
+def fun_l2_n23(x)
+ if (x < 1)
+ fun_l3_n154(x)
+ else
+ fun_l3_n52(x)
+ end
+end
+
+def fun_l2_n24(x)
+ if (x < 1)
+ fun_l3_n229(x)
+ else
+ fun_l3_n137(x)
+ end
+end
+
+def fun_l2_n25(x)
+ if (x < 1)
+ fun_l3_n390(x)
+ else
+ fun_l3_n445(x)
+ end
+end
+
+def fun_l2_n26(x)
+ if (x < 1)
+ fun_l3_n11(x)
+ else
+ fun_l3_n113(x)
+ end
+end
+
+def fun_l2_n27(x)
+ if (x < 1)
+ fun_l3_n756(x)
+ else
+ fun_l3_n935(x)
+ end
+end
+
+def fun_l2_n28(x)
+ if (x < 1)
+ fun_l3_n567(x)
+ else
+ fun_l3_n984(x)
+ end
+end
+
+def fun_l2_n29(x)
+ if (x < 1)
+ fun_l3_n982(x)
+ else
+ fun_l3_n335(x)
+ end
+end
+
+def fun_l2_n30(x)
+ if (x < 1)
+ fun_l3_n78(x)
+ else
+ fun_l3_n571(x)
+ end
+end
+
+def fun_l2_n31(x)
+ if (x < 1)
+ fun_l3_n93(x)
+ else
+ fun_l3_n455(x)
+ end
+end
+
+def fun_l2_n32(x)
+ if (x < 1)
+ fun_l3_n118(x)
+ else
+ fun_l3_n713(x)
+ end
+end
+
+def fun_l2_n33(x)
+ if (x < 1)
+ fun_l3_n561(x)
+ else
+ fun_l3_n0(x)
+ end
+end
+
+def fun_l2_n34(x)
+ if (x < 1)
+ fun_l3_n153(x)
+ else
+ fun_l3_n77(x)
+ end
+end
+
+def fun_l2_n35(x)
+ if (x < 1)
+ fun_l3_n815(x)
+ else
+ fun_l3_n642(x)
+ end
+end
+
+def fun_l2_n36(x)
+ if (x < 1)
+ fun_l3_n503(x)
+ else
+ fun_l3_n428(x)
+ end
+end
+
+def fun_l2_n37(x)
+ if (x < 1)
+ fun_l3_n780(x)
+ else
+ fun_l3_n301(x)
+ end
+end
+
+def fun_l2_n38(x)
+ if (x < 1)
+ fun_l3_n827(x)
+ else
+ fun_l3_n444(x)
+ end
+end
+
+def fun_l2_n39(x)
+ if (x < 1)
+ fun_l3_n808(x)
+ else
+ fun_l3_n76(x)
+ end
+end
+
+def fun_l2_n40(x)
+ if (x < 1)
+ fun_l3_n216(x)
+ else
+ fun_l3_n943(x)
+ end
+end
+
+def fun_l2_n41(x)
+ if (x < 1)
+ fun_l3_n237(x)
+ else
+ fun_l3_n935(x)
+ end
+end
+
+def fun_l2_n42(x)
+ if (x < 1)
+ fun_l3_n769(x)
+ else
+ fun_l3_n564(x)
+ end
+end
+
+def fun_l2_n43(x)
+ if (x < 1)
+ fun_l3_n108(x)
+ else
+ fun_l3_n180(x)
+ end
+end
+
+def fun_l2_n44(x)
+ if (x < 1)
+ fun_l3_n750(x)
+ else
+ fun_l3_n614(x)
+ end
+end
+
+def fun_l2_n45(x)
+ if (x < 1)
+ fun_l3_n497(x)
+ else
+ fun_l3_n584(x)
+ end
+end
+
+def fun_l2_n46(x)
+ if (x < 1)
+ fun_l3_n364(x)
+ else
+ fun_l3_n218(x)
+ end
+end
+
+def fun_l2_n47(x)
+ if (x < 1)
+ fun_l3_n938(x)
+ else
+ fun_l3_n707(x)
+ end
+end
+
+def fun_l2_n48(x)
+ if (x < 1)
+ fun_l3_n14(x)
+ else
+ fun_l3_n178(x)
+ end
+end
+
+def fun_l2_n49(x)
+ if (x < 1)
+ fun_l3_n923(x)
+ else
+ fun_l3_n493(x)
+ end
+end
+
+def fun_l2_n50(x)
+ if (x < 1)
+ fun_l3_n481(x)
+ else
+ fun_l3_n193(x)
+ end
+end
+
+def fun_l2_n51(x)
+ if (x < 1)
+ fun_l3_n876(x)
+ else
+ fun_l3_n59(x)
+ end
+end
+
+def fun_l2_n52(x)
+ if (x < 1)
+ fun_l3_n930(x)
+ else
+ fun_l3_n813(x)
+ end
+end
+
+def fun_l2_n53(x)
+ if (x < 1)
+ fun_l3_n369(x)
+ else
+ fun_l3_n972(x)
+ end
+end
+
+def fun_l2_n54(x)
+ if (x < 1)
+ fun_l3_n95(x)
+ else
+ fun_l3_n573(x)
+ end
+end
+
+def fun_l2_n55(x)
+ if (x < 1)
+ fun_l3_n148(x)
+ else
+ fun_l3_n369(x)
+ end
+end
+
+def fun_l2_n56(x)
+ if (x < 1)
+ fun_l3_n476(x)
+ else
+ fun_l3_n54(x)
+ end
+end
+
+def fun_l2_n57(x)
+ if (x < 1)
+ fun_l3_n672(x)
+ else
+ fun_l3_n592(x)
+ end
+end
+
+def fun_l2_n58(x)
+ if (x < 1)
+ fun_l3_n648(x)
+ else
+ fun_l3_n169(x)
+ end
+end
+
+def fun_l2_n59(x)
+ if (x < 1)
+ fun_l3_n844(x)
+ else
+ fun_l3_n422(x)
+ end
+end
+
+def fun_l2_n60(x)
+ if (x < 1)
+ fun_l3_n6(x)
+ else
+ fun_l3_n763(x)
+ end
+end
+
+def fun_l2_n61(x)
+ if (x < 1)
+ fun_l3_n35(x)
+ else
+ fun_l3_n316(x)
+ end
+end
+
+def fun_l2_n62(x)
+ if (x < 1)
+ fun_l3_n487(x)
+ else
+ fun_l3_n469(x)
+ end
+end
+
+def fun_l2_n63(x)
+ if (x < 1)
+ fun_l3_n272(x)
+ else
+ fun_l3_n909(x)
+ end
+end
+
+def fun_l2_n64(x)
+ if (x < 1)
+ fun_l3_n266(x)
+ else
+ fun_l3_n347(x)
+ end
+end
+
+def fun_l2_n65(x)
+ if (x < 1)
+ fun_l3_n696(x)
+ else
+ fun_l3_n499(x)
+ end
+end
+
+def fun_l2_n66(x)
+ if (x < 1)
+ fun_l3_n523(x)
+ else
+ fun_l3_n834(x)
+ end
+end
+
+def fun_l2_n67(x)
+ if (x < 1)
+ fun_l3_n966(x)
+ else
+ fun_l3_n454(x)
+ end
+end
+
+def fun_l2_n68(x)
+ if (x < 1)
+ fun_l3_n406(x)
+ else
+ fun_l3_n644(x)
+ end
+end
+
+def fun_l2_n69(x)
+ if (x < 1)
+ fun_l3_n616(x)
+ else
+ fun_l3_n90(x)
+ end
+end
+
+def fun_l2_n70(x)
+ if (x < 1)
+ fun_l3_n158(x)
+ else
+ fun_l3_n910(x)
+ end
+end
+
+def fun_l2_n71(x)
+ if (x < 1)
+ fun_l3_n391(x)
+ else
+ fun_l3_n761(x)
+ end
+end
+
+def fun_l2_n72(x)
+ if (x < 1)
+ fun_l3_n585(x)
+ else
+ fun_l3_n405(x)
+ end
+end
+
+def fun_l2_n73(x)
+ if (x < 1)
+ fun_l3_n227(x)
+ else
+ fun_l3_n583(x)
+ end
+end
+
+def fun_l2_n74(x)
+ if (x < 1)
+ fun_l3_n580(x)
+ else
+ fun_l3_n110(x)
+ end
+end
+
+def fun_l2_n75(x)
+ if (x < 1)
+ fun_l3_n393(x)
+ else
+ fun_l3_n643(x)
+ end
+end
+
+def fun_l2_n76(x)
+ if (x < 1)
+ fun_l3_n935(x)
+ else
+ fun_l3_n593(x)
+ end
+end
+
+def fun_l2_n77(x)
+ if (x < 1)
+ fun_l3_n239(x)
+ else
+ fun_l3_n704(x)
+ end
+end
+
+def fun_l2_n78(x)
+ if (x < 1)
+ fun_l3_n192(x)
+ else
+ fun_l3_n722(x)
+ end
+end
+
+def fun_l2_n79(x)
+ if (x < 1)
+ fun_l3_n119(x)
+ else
+ fun_l3_n426(x)
+ end
+end
+
+def fun_l2_n80(x)
+ if (x < 1)
+ fun_l3_n692(x)
+ else
+ fun_l3_n895(x)
+ end
+end
+
+def fun_l2_n81(x)
+ if (x < 1)
+ fun_l3_n246(x)
+ else
+ fun_l3_n340(x)
+ end
+end
+
+def fun_l2_n82(x)
+ if (x < 1)
+ fun_l3_n368(x)
+ else
+ fun_l3_n255(x)
+ end
+end
+
+def fun_l2_n83(x)
+ if (x < 1)
+ fun_l3_n942(x)
+ else
+ fun_l3_n595(x)
+ end
+end
+
+def fun_l2_n84(x)
+ if (x < 1)
+ fun_l3_n629(x)
+ else
+ fun_l3_n622(x)
+ end
+end
+
+def fun_l2_n85(x)
+ if (x < 1)
+ fun_l3_n415(x)
+ else
+ fun_l3_n615(x)
+ end
+end
+
+def fun_l2_n86(x)
+ if (x < 1)
+ fun_l3_n295(x)
+ else
+ fun_l3_n809(x)
+ end
+end
+
+def fun_l2_n87(x)
+ if (x < 1)
+ fun_l3_n957(x)
+ else
+ fun_l3_n452(x)
+ end
+end
+
+def fun_l2_n88(x)
+ if (x < 1)
+ fun_l3_n490(x)
+ else
+ fun_l3_n184(x)
+ end
+end
+
+def fun_l2_n89(x)
+ if (x < 1)
+ fun_l3_n483(x)
+ else
+ fun_l3_n963(x)
+ end
+end
+
+def fun_l2_n90(x)
+ if (x < 1)
+ fun_l3_n262(x)
+ else
+ fun_l3_n458(x)
+ end
+end
+
+def fun_l2_n91(x)
+ if (x < 1)
+ fun_l3_n277(x)
+ else
+ fun_l3_n30(x)
+ end
+end
+
+def fun_l2_n92(x)
+ if (x < 1)
+ fun_l3_n310(x)
+ else
+ fun_l3_n215(x)
+ end
+end
+
+def fun_l2_n93(x)
+ if (x < 1)
+ fun_l3_n660(x)
+ else
+ fun_l3_n798(x)
+ end
+end
+
+def fun_l2_n94(x)
+ if (x < 1)
+ fun_l3_n761(x)
+ else
+ fun_l3_n10(x)
+ end
+end
+
+def fun_l2_n95(x)
+ if (x < 1)
+ fun_l3_n4(x)
+ else
+ fun_l3_n65(x)
+ end
+end
+
+def fun_l2_n96(x)
+ if (x < 1)
+ fun_l3_n444(x)
+ else
+ fun_l3_n378(x)
+ end
+end
+
+def fun_l2_n97(x)
+ if (x < 1)
+ fun_l3_n119(x)
+ else
+ fun_l3_n96(x)
+ end
+end
+
+def fun_l2_n98(x)
+ if (x < 1)
+ fun_l3_n970(x)
+ else
+ fun_l3_n471(x)
+ end
+end
+
+def fun_l2_n99(x)
+ if (x < 1)
+ fun_l3_n544(x)
+ else
+ fun_l3_n1(x)
+ end
+end
+
+def fun_l2_n100(x)
+ if (x < 1)
+ fun_l3_n253(x)
+ else
+ fun_l3_n332(x)
+ end
+end
+
+def fun_l2_n101(x)
+ if (x < 1)
+ fun_l3_n69(x)
+ else
+ fun_l3_n946(x)
+ end
+end
+
+def fun_l2_n102(x)
+ if (x < 1)
+ fun_l3_n458(x)
+ else
+ fun_l3_n885(x)
+ end
+end
+
+def fun_l2_n103(x)
+ if (x < 1)
+ fun_l3_n732(x)
+ else
+ fun_l3_n601(x)
+ end
+end
+
+def fun_l2_n104(x)
+ if (x < 1)
+ fun_l3_n737(x)
+ else
+ fun_l3_n530(x)
+ end
+end
+
+def fun_l2_n105(x)
+ if (x < 1)
+ fun_l3_n125(x)
+ else
+ fun_l3_n561(x)
+ end
+end
+
+def fun_l2_n106(x)
+ if (x < 1)
+ fun_l3_n717(x)
+ else
+ fun_l3_n660(x)
+ end
+end
+
+def fun_l2_n107(x)
+ if (x < 1)
+ fun_l3_n863(x)
+ else
+ fun_l3_n211(x)
+ end
+end
+
+def fun_l2_n108(x)
+ if (x < 1)
+ fun_l3_n221(x)
+ else
+ fun_l3_n718(x)
+ end
+end
+
+def fun_l2_n109(x)
+ if (x < 1)
+ fun_l3_n100(x)
+ else
+ fun_l3_n673(x)
+ end
+end
+
+def fun_l2_n110(x)
+ if (x < 1)
+ fun_l3_n434(x)
+ else
+ fun_l3_n348(x)
+ end
+end
+
+def fun_l2_n111(x)
+ if (x < 1)
+ fun_l3_n923(x)
+ else
+ fun_l3_n413(x)
+ end
+end
+
+def fun_l2_n112(x)
+ if (x < 1)
+ fun_l3_n253(x)
+ else
+ fun_l3_n461(x)
+ end
+end
+
+def fun_l2_n113(x)
+ if (x < 1)
+ fun_l3_n946(x)
+ else
+ fun_l3_n406(x)
+ end
+end
+
+def fun_l2_n114(x)
+ if (x < 1)
+ fun_l3_n976(x)
+ else
+ fun_l3_n354(x)
+ end
+end
+
+def fun_l2_n115(x)
+ if (x < 1)
+ fun_l3_n205(x)
+ else
+ fun_l3_n798(x)
+ end
+end
+
+def fun_l2_n116(x)
+ if (x < 1)
+ fun_l3_n304(x)
+ else
+ fun_l3_n145(x)
+ end
+end
+
+def fun_l2_n117(x)
+ if (x < 1)
+ fun_l3_n917(x)
+ else
+ fun_l3_n276(x)
+ end
+end
+
+def fun_l2_n118(x)
+ if (x < 1)
+ fun_l3_n880(x)
+ else
+ fun_l3_n532(x)
+ end
+end
+
+def fun_l2_n119(x)
+ if (x < 1)
+ fun_l3_n39(x)
+ else
+ fun_l3_n549(x)
+ end
+end
+
+def fun_l2_n120(x)
+ if (x < 1)
+ fun_l3_n325(x)
+ else
+ fun_l3_n250(x)
+ end
+end
+
+def fun_l2_n121(x)
+ if (x < 1)
+ fun_l3_n953(x)
+ else
+ fun_l3_n259(x)
+ end
+end
+
+def fun_l2_n122(x)
+ if (x < 1)
+ fun_l3_n572(x)
+ else
+ fun_l3_n747(x)
+ end
+end
+
+def fun_l2_n123(x)
+ if (x < 1)
+ fun_l3_n639(x)
+ else
+ fun_l3_n810(x)
+ end
+end
+
+def fun_l2_n124(x)
+ if (x < 1)
+ fun_l3_n954(x)
+ else
+ fun_l3_n814(x)
+ end
+end
+
+def fun_l2_n125(x)
+ if (x < 1)
+ fun_l3_n932(x)
+ else
+ fun_l3_n275(x)
+ end
+end
+
+def fun_l2_n126(x)
+ if (x < 1)
+ fun_l3_n472(x)
+ else
+ fun_l3_n184(x)
+ end
+end
+
+def fun_l2_n127(x)
+ if (x < 1)
+ fun_l3_n725(x)
+ else
+ fun_l3_n497(x)
+ end
+end
+
+def fun_l2_n128(x)
+ if (x < 1)
+ fun_l3_n94(x)
+ else
+ fun_l3_n801(x)
+ end
+end
+
+def fun_l2_n129(x)
+ if (x < 1)
+ fun_l3_n476(x)
+ else
+ fun_l3_n936(x)
+ end
+end
+
+def fun_l2_n130(x)
+ if (x < 1)
+ fun_l3_n706(x)
+ else
+ fun_l3_n738(x)
+ end
+end
+
+def fun_l2_n131(x)
+ if (x < 1)
+ fun_l3_n535(x)
+ else
+ fun_l3_n401(x)
+ end
+end
+
+def fun_l2_n132(x)
+ if (x < 1)
+ fun_l3_n459(x)
+ else
+ fun_l3_n998(x)
+ end
+end
+
+def fun_l2_n133(x)
+ if (x < 1)
+ fun_l3_n158(x)
+ else
+ fun_l3_n288(x)
+ end
+end
+
+def fun_l2_n134(x)
+ if (x < 1)
+ fun_l3_n47(x)
+ else
+ fun_l3_n104(x)
+ end
+end
+
+def fun_l2_n135(x)
+ if (x < 1)
+ fun_l3_n154(x)
+ else
+ fun_l3_n239(x)
+ end
+end
+
+def fun_l2_n136(x)
+ if (x < 1)
+ fun_l3_n634(x)
+ else
+ fun_l3_n718(x)
+ end
+end
+
+def fun_l2_n137(x)
+ if (x < 1)
+ fun_l3_n867(x)
+ else
+ fun_l3_n578(x)
+ end
+end
+
+def fun_l2_n138(x)
+ if (x < 1)
+ fun_l3_n905(x)
+ else
+ fun_l3_n434(x)
+ end
+end
+
+def fun_l2_n139(x)
+ if (x < 1)
+ fun_l3_n596(x)
+ else
+ fun_l3_n516(x)
+ end
+end
+
+def fun_l2_n140(x)
+ if (x < 1)
+ fun_l3_n150(x)
+ else
+ fun_l3_n901(x)
+ end
+end
+
+def fun_l2_n141(x)
+ if (x < 1)
+ fun_l3_n792(x)
+ else
+ fun_l3_n50(x)
+ end
+end
+
+def fun_l2_n142(x)
+ if (x < 1)
+ fun_l3_n539(x)
+ else
+ fun_l3_n206(x)
+ end
+end
+
+def fun_l2_n143(x)
+ if (x < 1)
+ fun_l3_n690(x)
+ else
+ fun_l3_n788(x)
+ end
+end
+
+def fun_l2_n144(x)
+ if (x < 1)
+ fun_l3_n535(x)
+ else
+ fun_l3_n868(x)
+ end
+end
+
+def fun_l2_n145(x)
+ if (x < 1)
+ fun_l3_n869(x)
+ else
+ fun_l3_n865(x)
+ end
+end
+
+def fun_l2_n146(x)
+ if (x < 1)
+ fun_l3_n574(x)
+ else
+ fun_l3_n798(x)
+ end
+end
+
+def fun_l2_n147(x)
+ if (x < 1)
+ fun_l3_n876(x)
+ else
+ fun_l3_n658(x)
+ end
+end
+
+def fun_l2_n148(x)
+ if (x < 1)
+ fun_l3_n582(x)
+ else
+ fun_l3_n694(x)
+ end
+end
+
+def fun_l2_n149(x)
+ if (x < 1)
+ fun_l3_n137(x)
+ else
+ fun_l3_n187(x)
+ end
+end
+
+def fun_l2_n150(x)
+ if (x < 1)
+ fun_l3_n30(x)
+ else
+ fun_l3_n666(x)
+ end
+end
+
+def fun_l2_n151(x)
+ if (x < 1)
+ fun_l3_n264(x)
+ else
+ fun_l3_n236(x)
+ end
+end
+
+def fun_l2_n152(x)
+ if (x < 1)
+ fun_l3_n984(x)
+ else
+ fun_l3_n469(x)
+ end
+end
+
+def fun_l2_n153(x)
+ if (x < 1)
+ fun_l3_n152(x)
+ else
+ fun_l3_n578(x)
+ end
+end
+
+def fun_l2_n154(x)
+ if (x < 1)
+ fun_l3_n452(x)
+ else
+ fun_l3_n807(x)
+ end
+end
+
+def fun_l2_n155(x)
+ if (x < 1)
+ fun_l3_n82(x)
+ else
+ fun_l3_n589(x)
+ end
+end
+
+def fun_l2_n156(x)
+ if (x < 1)
+ fun_l3_n356(x)
+ else
+ fun_l3_n454(x)
+ end
+end
+
+def fun_l2_n157(x)
+ if (x < 1)
+ fun_l3_n814(x)
+ else
+ fun_l3_n376(x)
+ end
+end
+
+def fun_l2_n158(x)
+ if (x < 1)
+ fun_l3_n755(x)
+ else
+ fun_l3_n966(x)
+ end
+end
+
+def fun_l2_n159(x)
+ if (x < 1)
+ fun_l3_n167(x)
+ else
+ fun_l3_n571(x)
+ end
+end
+
+def fun_l2_n160(x)
+ if (x < 1)
+ fun_l3_n919(x)
+ else
+ fun_l3_n771(x)
+ end
+end
+
+def fun_l2_n161(x)
+ if (x < 1)
+ fun_l3_n147(x)
+ else
+ fun_l3_n936(x)
+ end
+end
+
+def fun_l2_n162(x)
+ if (x < 1)
+ fun_l3_n638(x)
+ else
+ fun_l3_n23(x)
+ end
+end
+
+def fun_l2_n163(x)
+ if (x < 1)
+ fun_l3_n349(x)
+ else
+ fun_l3_n46(x)
+ end
+end
+
+def fun_l2_n164(x)
+ if (x < 1)
+ fun_l3_n55(x)
+ else
+ fun_l3_n795(x)
+ end
+end
+
+def fun_l2_n165(x)
+ if (x < 1)
+ fun_l3_n131(x)
+ else
+ fun_l3_n233(x)
+ end
+end
+
+def fun_l2_n166(x)
+ if (x < 1)
+ fun_l3_n324(x)
+ else
+ fun_l3_n215(x)
+ end
+end
+
+def fun_l2_n167(x)
+ if (x < 1)
+ fun_l3_n244(x)
+ else
+ fun_l3_n641(x)
+ end
+end
+
+def fun_l2_n168(x)
+ if (x < 1)
+ fun_l3_n744(x)
+ else
+ fun_l3_n337(x)
+ end
+end
+
+def fun_l2_n169(x)
+ if (x < 1)
+ fun_l3_n760(x)
+ else
+ fun_l3_n82(x)
+ end
+end
+
+def fun_l2_n170(x)
+ if (x < 1)
+ fun_l3_n877(x)
+ else
+ fun_l3_n566(x)
+ end
+end
+
+def fun_l2_n171(x)
+ if (x < 1)
+ fun_l3_n211(x)
+ else
+ fun_l3_n101(x)
+ end
+end
+
+def fun_l2_n172(x)
+ if (x < 1)
+ fun_l3_n143(x)
+ else
+ fun_l3_n537(x)
+ end
+end
+
+def fun_l2_n173(x)
+ if (x < 1)
+ fun_l3_n210(x)
+ else
+ fun_l3_n150(x)
+ end
+end
+
+def fun_l2_n174(x)
+ if (x < 1)
+ fun_l3_n772(x)
+ else
+ fun_l3_n42(x)
+ end
+end
+
+def fun_l2_n175(x)
+ if (x < 1)
+ fun_l3_n482(x)
+ else
+ fun_l3_n606(x)
+ end
+end
+
+def fun_l2_n176(x)
+ if (x < 1)
+ fun_l3_n68(x)
+ else
+ fun_l3_n888(x)
+ end
+end
+
+def fun_l2_n177(x)
+ if (x < 1)
+ fun_l3_n313(x)
+ else
+ fun_l3_n947(x)
+ end
+end
+
+def fun_l2_n178(x)
+ if (x < 1)
+ fun_l3_n116(x)
+ else
+ fun_l3_n812(x)
+ end
+end
+
+def fun_l2_n179(x)
+ if (x < 1)
+ fun_l3_n741(x)
+ else
+ fun_l3_n994(x)
+ end
+end
+
+def fun_l2_n180(x)
+ if (x < 1)
+ fun_l3_n667(x)
+ else
+ fun_l3_n335(x)
+ end
+end
+
+def fun_l2_n181(x)
+ if (x < 1)
+ fun_l3_n994(x)
+ else
+ fun_l3_n502(x)
+ end
+end
+
+def fun_l2_n182(x)
+ if (x < 1)
+ fun_l3_n528(x)
+ else
+ fun_l3_n272(x)
+ end
+end
+
+def fun_l2_n183(x)
+ if (x < 1)
+ fun_l3_n649(x)
+ else
+ fun_l3_n200(x)
+ end
+end
+
+def fun_l2_n184(x)
+ if (x < 1)
+ fun_l3_n105(x)
+ else
+ fun_l3_n897(x)
+ end
+end
+
+def fun_l2_n185(x)
+ if (x < 1)
+ fun_l3_n980(x)
+ else
+ fun_l3_n651(x)
+ end
+end
+
+def fun_l2_n186(x)
+ if (x < 1)
+ fun_l3_n835(x)
+ else
+ fun_l3_n388(x)
+ end
+end
+
+def fun_l2_n187(x)
+ if (x < 1)
+ fun_l3_n769(x)
+ else
+ fun_l3_n162(x)
+ end
+end
+
+def fun_l2_n188(x)
+ if (x < 1)
+ fun_l3_n934(x)
+ else
+ fun_l3_n874(x)
+ end
+end
+
+def fun_l2_n189(x)
+ if (x < 1)
+ fun_l3_n407(x)
+ else
+ fun_l3_n180(x)
+ end
+end
+
+def fun_l2_n190(x)
+ if (x < 1)
+ fun_l3_n594(x)
+ else
+ fun_l3_n929(x)
+ end
+end
+
+def fun_l2_n191(x)
+ if (x < 1)
+ fun_l3_n303(x)
+ else
+ fun_l3_n528(x)
+ end
+end
+
+def fun_l2_n192(x)
+ if (x < 1)
+ fun_l3_n768(x)
+ else
+ fun_l3_n226(x)
+ end
+end
+
+def fun_l2_n193(x)
+ if (x < 1)
+ fun_l3_n618(x)
+ else
+ fun_l3_n821(x)
+ end
+end
+
+def fun_l2_n194(x)
+ if (x < 1)
+ fun_l3_n953(x)
+ else
+ fun_l3_n969(x)
+ end
+end
+
+def fun_l2_n195(x)
+ if (x < 1)
+ fun_l3_n574(x)
+ else
+ fun_l3_n344(x)
+ end
+end
+
+def fun_l2_n196(x)
+ if (x < 1)
+ fun_l3_n943(x)
+ else
+ fun_l3_n304(x)
+ end
+end
+
+def fun_l2_n197(x)
+ if (x < 1)
+ fun_l3_n276(x)
+ else
+ fun_l3_n502(x)
+ end
+end
+
+def fun_l2_n198(x)
+ if (x < 1)
+ fun_l3_n597(x)
+ else
+ fun_l3_n197(x)
+ end
+end
+
+def fun_l2_n199(x)
+ if (x < 1)
+ fun_l3_n517(x)
+ else
+ fun_l3_n34(x)
+ end
+end
+
+def fun_l2_n200(x)
+ if (x < 1)
+ fun_l3_n980(x)
+ else
+ fun_l3_n672(x)
+ end
+end
+
+def fun_l2_n201(x)
+ if (x < 1)
+ fun_l3_n510(x)
+ else
+ fun_l3_n804(x)
+ end
+end
+
+def fun_l2_n202(x)
+ if (x < 1)
+ fun_l3_n735(x)
+ else
+ fun_l3_n367(x)
+ end
+end
+
+def fun_l2_n203(x)
+ if (x < 1)
+ fun_l3_n546(x)
+ else
+ fun_l3_n502(x)
+ end
+end
+
+def fun_l2_n204(x)
+ if (x < 1)
+ fun_l3_n189(x)
+ else
+ fun_l3_n639(x)
+ end
+end
+
+def fun_l2_n205(x)
+ if (x < 1)
+ fun_l3_n396(x)
+ else
+ fun_l3_n862(x)
+ end
+end
+
+def fun_l2_n206(x)
+ if (x < 1)
+ fun_l3_n679(x)
+ else
+ fun_l3_n881(x)
+ end
+end
+
+def fun_l2_n207(x)
+ if (x < 1)
+ fun_l3_n342(x)
+ else
+ fun_l3_n522(x)
+ end
+end
+
+def fun_l2_n208(x)
+ if (x < 1)
+ fun_l3_n173(x)
+ else
+ fun_l3_n323(x)
+ end
+end
+
+def fun_l2_n209(x)
+ if (x < 1)
+ fun_l3_n693(x)
+ else
+ fun_l3_n160(x)
+ end
+end
+
+def fun_l2_n210(x)
+ if (x < 1)
+ fun_l3_n827(x)
+ else
+ fun_l3_n580(x)
+ end
+end
+
+def fun_l2_n211(x)
+ if (x < 1)
+ fun_l3_n213(x)
+ else
+ fun_l3_n100(x)
+ end
+end
+
+def fun_l2_n212(x)
+ if (x < 1)
+ fun_l3_n915(x)
+ else
+ fun_l3_n531(x)
+ end
+end
+
+def fun_l2_n213(x)
+ if (x < 1)
+ fun_l3_n260(x)
+ else
+ fun_l3_n279(x)
+ end
+end
+
+def fun_l2_n214(x)
+ if (x < 1)
+ fun_l3_n468(x)
+ else
+ fun_l3_n257(x)
+ end
+end
+
+def fun_l2_n215(x)
+ if (x < 1)
+ fun_l3_n990(x)
+ else
+ fun_l3_n740(x)
+ end
+end
+
+def fun_l2_n216(x)
+ if (x < 1)
+ fun_l3_n291(x)
+ else
+ fun_l3_n625(x)
+ end
+end
+
+def fun_l2_n217(x)
+ if (x < 1)
+ fun_l3_n493(x)
+ else
+ fun_l3_n726(x)
+ end
+end
+
+def fun_l2_n218(x)
+ if (x < 1)
+ fun_l3_n714(x)
+ else
+ fun_l3_n793(x)
+ end
+end
+
+def fun_l2_n219(x)
+ if (x < 1)
+ fun_l3_n683(x)
+ else
+ fun_l3_n715(x)
+ end
+end
+
+def fun_l2_n220(x)
+ if (x < 1)
+ fun_l3_n249(x)
+ else
+ fun_l3_n266(x)
+ end
+end
+
+def fun_l2_n221(x)
+ if (x < 1)
+ fun_l3_n324(x)
+ else
+ fun_l3_n22(x)
+ end
+end
+
+def fun_l2_n222(x)
+ if (x < 1)
+ fun_l3_n978(x)
+ else
+ fun_l3_n885(x)
+ end
+end
+
+def fun_l2_n223(x)
+ if (x < 1)
+ fun_l3_n821(x)
+ else
+ fun_l3_n412(x)
+ end
+end
+
+def fun_l2_n224(x)
+ if (x < 1)
+ fun_l3_n636(x)
+ else
+ fun_l3_n641(x)
+ end
+end
+
+def fun_l2_n225(x)
+ if (x < 1)
+ fun_l3_n971(x)
+ else
+ fun_l3_n288(x)
+ end
+end
+
+def fun_l2_n226(x)
+ if (x < 1)
+ fun_l3_n429(x)
+ else
+ fun_l3_n323(x)
+ end
+end
+
+def fun_l2_n227(x)
+ if (x < 1)
+ fun_l3_n909(x)
+ else
+ fun_l3_n267(x)
+ end
+end
+
+def fun_l2_n228(x)
+ if (x < 1)
+ fun_l3_n437(x)
+ else
+ fun_l3_n985(x)
+ end
+end
+
+def fun_l2_n229(x)
+ if (x < 1)
+ fun_l3_n131(x)
+ else
+ fun_l3_n298(x)
+ end
+end
+
+def fun_l2_n230(x)
+ if (x < 1)
+ fun_l3_n865(x)
+ else
+ fun_l3_n288(x)
+ end
+end
+
+def fun_l2_n231(x)
+ if (x < 1)
+ fun_l3_n772(x)
+ else
+ fun_l3_n531(x)
+ end
+end
+
+def fun_l2_n232(x)
+ if (x < 1)
+ fun_l3_n30(x)
+ else
+ fun_l3_n422(x)
+ end
+end
+
+def fun_l2_n233(x)
+ if (x < 1)
+ fun_l3_n82(x)
+ else
+ fun_l3_n32(x)
+ end
+end
+
+def fun_l2_n234(x)
+ if (x < 1)
+ fun_l3_n25(x)
+ else
+ fun_l3_n518(x)
+ end
+end
+
+def fun_l2_n235(x)
+ if (x < 1)
+ fun_l3_n313(x)
+ else
+ fun_l3_n179(x)
+ end
+end
+
+def fun_l2_n236(x)
+ if (x < 1)
+ fun_l3_n819(x)
+ else
+ fun_l3_n586(x)
+ end
+end
+
+def fun_l2_n237(x)
+ if (x < 1)
+ fun_l3_n398(x)
+ else
+ fun_l3_n921(x)
+ end
+end
+
+def fun_l2_n238(x)
+ if (x < 1)
+ fun_l3_n667(x)
+ else
+ fun_l3_n795(x)
+ end
+end
+
+def fun_l2_n239(x)
+ if (x < 1)
+ fun_l3_n862(x)
+ else
+ fun_l3_n222(x)
+ end
+end
+
+def fun_l2_n240(x)
+ if (x < 1)
+ fun_l3_n968(x)
+ else
+ fun_l3_n320(x)
+ end
+end
+
+def fun_l2_n241(x)
+ if (x < 1)
+ fun_l3_n559(x)
+ else
+ fun_l3_n50(x)
+ end
+end
+
+def fun_l2_n242(x)
+ if (x < 1)
+ fun_l3_n647(x)
+ else
+ fun_l3_n232(x)
+ end
+end
+
+def fun_l2_n243(x)
+ if (x < 1)
+ fun_l3_n425(x)
+ else
+ fun_l3_n815(x)
+ end
+end
+
+def fun_l2_n244(x)
+ if (x < 1)
+ fun_l3_n752(x)
+ else
+ fun_l3_n690(x)
+ end
+end
+
+def fun_l2_n245(x)
+ if (x < 1)
+ fun_l3_n382(x)
+ else
+ fun_l3_n817(x)
+ end
+end
+
+def fun_l2_n246(x)
+ if (x < 1)
+ fun_l3_n880(x)
+ else
+ fun_l3_n380(x)
+ end
+end
+
+def fun_l2_n247(x)
+ if (x < 1)
+ fun_l3_n444(x)
+ else
+ fun_l3_n75(x)
+ end
+end
+
+def fun_l2_n248(x)
+ if (x < 1)
+ fun_l3_n368(x)
+ else
+ fun_l3_n314(x)
+ end
+end
+
+def fun_l2_n249(x)
+ if (x < 1)
+ fun_l3_n131(x)
+ else
+ fun_l3_n398(x)
+ end
+end
+
+def fun_l2_n250(x)
+ if (x < 1)
+ fun_l3_n376(x)
+ else
+ fun_l3_n449(x)
+ end
+end
+
+def fun_l2_n251(x)
+ if (x < 1)
+ fun_l3_n404(x)
+ else
+ fun_l3_n301(x)
+ end
+end
+
+def fun_l2_n252(x)
+ if (x < 1)
+ fun_l3_n274(x)
+ else
+ fun_l3_n430(x)
+ end
+end
+
+def fun_l2_n253(x)
+ if (x < 1)
+ fun_l3_n734(x)
+ else
+ fun_l3_n255(x)
+ end
+end
+
+def fun_l2_n254(x)
+ if (x < 1)
+ fun_l3_n30(x)
+ else
+ fun_l3_n944(x)
+ end
+end
+
+def fun_l2_n255(x)
+ if (x < 1)
+ fun_l3_n978(x)
+ else
+ fun_l3_n898(x)
+ end
+end
+
+def fun_l2_n256(x)
+ if (x < 1)
+ fun_l3_n175(x)
+ else
+ fun_l3_n477(x)
+ end
+end
+
+def fun_l2_n257(x)
+ if (x < 1)
+ fun_l3_n84(x)
+ else
+ fun_l3_n772(x)
+ end
+end
+
+def fun_l2_n258(x)
+ if (x < 1)
+ fun_l3_n605(x)
+ else
+ fun_l3_n144(x)
+ end
+end
+
+def fun_l2_n259(x)
+ if (x < 1)
+ fun_l3_n51(x)
+ else
+ fun_l3_n542(x)
+ end
+end
+
+def fun_l2_n260(x)
+ if (x < 1)
+ fun_l3_n940(x)
+ else
+ fun_l3_n316(x)
+ end
+end
+
+def fun_l2_n261(x)
+ if (x < 1)
+ fun_l3_n702(x)
+ else
+ fun_l3_n197(x)
+ end
+end
+
+def fun_l2_n262(x)
+ if (x < 1)
+ fun_l3_n164(x)
+ else
+ fun_l3_n21(x)
+ end
+end
+
+def fun_l2_n263(x)
+ if (x < 1)
+ fun_l3_n432(x)
+ else
+ fun_l3_n496(x)
+ end
+end
+
+def fun_l2_n264(x)
+ if (x < 1)
+ fun_l3_n265(x)
+ else
+ fun_l3_n40(x)
+ end
+end
+
+def fun_l2_n265(x)
+ if (x < 1)
+ fun_l3_n951(x)
+ else
+ fun_l3_n723(x)
+ end
+end
+
+def fun_l2_n266(x)
+ if (x < 1)
+ fun_l3_n279(x)
+ else
+ fun_l3_n167(x)
+ end
+end
+
+def fun_l2_n267(x)
+ if (x < 1)
+ fun_l3_n51(x)
+ else
+ fun_l3_n283(x)
+ end
+end
+
+def fun_l2_n268(x)
+ if (x < 1)
+ fun_l3_n389(x)
+ else
+ fun_l3_n264(x)
+ end
+end
+
+def fun_l2_n269(x)
+ if (x < 1)
+ fun_l3_n68(x)
+ else
+ fun_l3_n484(x)
+ end
+end
+
+def fun_l2_n270(x)
+ if (x < 1)
+ fun_l3_n435(x)
+ else
+ fun_l3_n204(x)
+ end
+end
+
+def fun_l2_n271(x)
+ if (x < 1)
+ fun_l3_n717(x)
+ else
+ fun_l3_n763(x)
+ end
+end
+
+def fun_l2_n272(x)
+ if (x < 1)
+ fun_l3_n901(x)
+ else
+ fun_l3_n332(x)
+ end
+end
+
+def fun_l2_n273(x)
+ if (x < 1)
+ fun_l3_n358(x)
+ else
+ fun_l3_n608(x)
+ end
+end
+
+def fun_l2_n274(x)
+ if (x < 1)
+ fun_l3_n885(x)
+ else
+ fun_l3_n490(x)
+ end
+end
+
+def fun_l2_n275(x)
+ if (x < 1)
+ fun_l3_n82(x)
+ else
+ fun_l3_n87(x)
+ end
+end
+
+def fun_l2_n276(x)
+ if (x < 1)
+ fun_l3_n698(x)
+ else
+ fun_l3_n846(x)
+ end
+end
+
+def fun_l2_n277(x)
+ if (x < 1)
+ fun_l3_n690(x)
+ else
+ fun_l3_n457(x)
+ end
+end
+
+def fun_l2_n278(x)
+ if (x < 1)
+ fun_l3_n925(x)
+ else
+ fun_l3_n674(x)
+ end
+end
+
+def fun_l2_n279(x)
+ if (x < 1)
+ fun_l3_n797(x)
+ else
+ fun_l3_n315(x)
+ end
+end
+
+def fun_l2_n280(x)
+ if (x < 1)
+ fun_l3_n73(x)
+ else
+ fun_l3_n2(x)
+ end
+end
+
+def fun_l2_n281(x)
+ if (x < 1)
+ fun_l3_n301(x)
+ else
+ fun_l3_n315(x)
+ end
+end
+
+def fun_l2_n282(x)
+ if (x < 1)
+ fun_l3_n473(x)
+ else
+ fun_l3_n639(x)
+ end
+end
+
+def fun_l2_n283(x)
+ if (x < 1)
+ fun_l3_n812(x)
+ else
+ fun_l3_n241(x)
+ end
+end
+
+def fun_l2_n284(x)
+ if (x < 1)
+ fun_l3_n0(x)
+ else
+ fun_l3_n445(x)
+ end
+end
+
+def fun_l2_n285(x)
+ if (x < 1)
+ fun_l3_n587(x)
+ else
+ fun_l3_n806(x)
+ end
+end
+
+def fun_l2_n286(x)
+ if (x < 1)
+ fun_l3_n169(x)
+ else
+ fun_l3_n546(x)
+ end
+end
+
+def fun_l2_n287(x)
+ if (x < 1)
+ fun_l3_n623(x)
+ else
+ fun_l3_n677(x)
+ end
+end
+
+def fun_l2_n288(x)
+ if (x < 1)
+ fun_l3_n804(x)
+ else
+ fun_l3_n80(x)
+ end
+end
+
+def fun_l2_n289(x)
+ if (x < 1)
+ fun_l3_n812(x)
+ else
+ fun_l3_n197(x)
+ end
+end
+
+def fun_l2_n290(x)
+ if (x < 1)
+ fun_l3_n551(x)
+ else
+ fun_l3_n896(x)
+ end
+end
+
+def fun_l2_n291(x)
+ if (x < 1)
+ fun_l3_n686(x)
+ else
+ fun_l3_n884(x)
+ end
+end
+
+def fun_l2_n292(x)
+ if (x < 1)
+ fun_l3_n427(x)
+ else
+ fun_l3_n251(x)
+ end
+end
+
+def fun_l2_n293(x)
+ if (x < 1)
+ fun_l3_n375(x)
+ else
+ fun_l3_n309(x)
+ end
+end
+
+def fun_l2_n294(x)
+ if (x < 1)
+ fun_l3_n371(x)
+ else
+ fun_l3_n184(x)
+ end
+end
+
+def fun_l2_n295(x)
+ if (x < 1)
+ fun_l3_n332(x)
+ else
+ fun_l3_n250(x)
+ end
+end
+
+def fun_l2_n296(x)
+ if (x < 1)
+ fun_l3_n333(x)
+ else
+ fun_l3_n254(x)
+ end
+end
+
+def fun_l2_n297(x)
+ if (x < 1)
+ fun_l3_n24(x)
+ else
+ fun_l3_n528(x)
+ end
+end
+
+def fun_l2_n298(x)
+ if (x < 1)
+ fun_l3_n96(x)
+ else
+ fun_l3_n653(x)
+ end
+end
+
+def fun_l2_n299(x)
+ if (x < 1)
+ fun_l3_n920(x)
+ else
+ fun_l3_n475(x)
+ end
+end
+
+def fun_l2_n300(x)
+ if (x < 1)
+ fun_l3_n337(x)
+ else
+ fun_l3_n378(x)
+ end
+end
+
+def fun_l2_n301(x)
+ if (x < 1)
+ fun_l3_n778(x)
+ else
+ fun_l3_n216(x)
+ end
+end
+
+def fun_l2_n302(x)
+ if (x < 1)
+ fun_l3_n366(x)
+ else
+ fun_l3_n562(x)
+ end
+end
+
+def fun_l2_n303(x)
+ if (x < 1)
+ fun_l3_n656(x)
+ else
+ fun_l3_n779(x)
+ end
+end
+
+def fun_l2_n304(x)
+ if (x < 1)
+ fun_l3_n526(x)
+ else
+ fun_l3_n783(x)
+ end
+end
+
+def fun_l2_n305(x)
+ if (x < 1)
+ fun_l3_n500(x)
+ else
+ fun_l3_n744(x)
+ end
+end
+
+def fun_l2_n306(x)
+ if (x < 1)
+ fun_l3_n953(x)
+ else
+ fun_l3_n394(x)
+ end
+end
+
+def fun_l2_n307(x)
+ if (x < 1)
+ fun_l3_n385(x)
+ else
+ fun_l3_n937(x)
+ end
+end
+
+def fun_l2_n308(x)
+ if (x < 1)
+ fun_l3_n742(x)
+ else
+ fun_l3_n984(x)
+ end
+end
+
+def fun_l2_n309(x)
+ if (x < 1)
+ fun_l3_n388(x)
+ else
+ fun_l3_n704(x)
+ end
+end
+
+def fun_l2_n310(x)
+ if (x < 1)
+ fun_l3_n252(x)
+ else
+ fun_l3_n585(x)
+ end
+end
+
+def fun_l2_n311(x)
+ if (x < 1)
+ fun_l3_n121(x)
+ else
+ fun_l3_n815(x)
+ end
+end
+
+def fun_l2_n312(x)
+ if (x < 1)
+ fun_l3_n657(x)
+ else
+ fun_l3_n338(x)
+ end
+end
+
+def fun_l2_n313(x)
+ if (x < 1)
+ fun_l3_n115(x)
+ else
+ fun_l3_n748(x)
+ end
+end
+
+def fun_l2_n314(x)
+ if (x < 1)
+ fun_l3_n237(x)
+ else
+ fun_l3_n319(x)
+ end
+end
+
+def fun_l2_n315(x)
+ if (x < 1)
+ fun_l3_n684(x)
+ else
+ fun_l3_n428(x)
+ end
+end
+
+def fun_l2_n316(x)
+ if (x < 1)
+ fun_l3_n416(x)
+ else
+ fun_l3_n499(x)
+ end
+end
+
+def fun_l2_n317(x)
+ if (x < 1)
+ fun_l3_n305(x)
+ else
+ fun_l3_n888(x)
+ end
+end
+
+def fun_l2_n318(x)
+ if (x < 1)
+ fun_l3_n506(x)
+ else
+ fun_l3_n579(x)
+ end
+end
+
+def fun_l2_n319(x)
+ if (x < 1)
+ fun_l3_n324(x)
+ else
+ fun_l3_n459(x)
+ end
+end
+
+def fun_l2_n320(x)
+ if (x < 1)
+ fun_l3_n278(x)
+ else
+ fun_l3_n89(x)
+ end
+end
+
+def fun_l2_n321(x)
+ if (x < 1)
+ fun_l3_n319(x)
+ else
+ fun_l3_n903(x)
+ end
+end
+
+def fun_l2_n322(x)
+ if (x < 1)
+ fun_l3_n96(x)
+ else
+ fun_l3_n334(x)
+ end
+end
+
+def fun_l2_n323(x)
+ if (x < 1)
+ fun_l3_n913(x)
+ else
+ fun_l3_n309(x)
+ end
+end
+
+def fun_l2_n324(x)
+ if (x < 1)
+ fun_l3_n186(x)
+ else
+ fun_l3_n453(x)
+ end
+end
+
+def fun_l2_n325(x)
+ if (x < 1)
+ fun_l3_n223(x)
+ else
+ fun_l3_n761(x)
+ end
+end
+
+def fun_l2_n326(x)
+ if (x < 1)
+ fun_l3_n757(x)
+ else
+ fun_l3_n700(x)
+ end
+end
+
+def fun_l2_n327(x)
+ if (x < 1)
+ fun_l3_n316(x)
+ else
+ fun_l3_n3(x)
+ end
+end
+
+def fun_l2_n328(x)
+ if (x < 1)
+ fun_l3_n680(x)
+ else
+ fun_l3_n275(x)
+ end
+end
+
+def fun_l2_n329(x)
+ if (x < 1)
+ fun_l3_n731(x)
+ else
+ fun_l3_n971(x)
+ end
+end
+
+def fun_l2_n330(x)
+ if (x < 1)
+ fun_l3_n672(x)
+ else
+ fun_l3_n389(x)
+ end
+end
+
+def fun_l2_n331(x)
+ if (x < 1)
+ fun_l3_n947(x)
+ else
+ fun_l3_n778(x)
+ end
+end
+
+def fun_l2_n332(x)
+ if (x < 1)
+ fun_l3_n23(x)
+ else
+ fun_l3_n478(x)
+ end
+end
+
+def fun_l2_n333(x)
+ if (x < 1)
+ fun_l3_n778(x)
+ else
+ fun_l3_n894(x)
+ end
+end
+
+def fun_l2_n334(x)
+ if (x < 1)
+ fun_l3_n198(x)
+ else
+ fun_l3_n830(x)
+ end
+end
+
+def fun_l2_n335(x)
+ if (x < 1)
+ fun_l3_n874(x)
+ else
+ fun_l3_n861(x)
+ end
+end
+
+def fun_l2_n336(x)
+ if (x < 1)
+ fun_l3_n66(x)
+ else
+ fun_l3_n47(x)
+ end
+end
+
+def fun_l2_n337(x)
+ if (x < 1)
+ fun_l3_n65(x)
+ else
+ fun_l3_n849(x)
+ end
+end
+
+def fun_l2_n338(x)
+ if (x < 1)
+ fun_l3_n122(x)
+ else
+ fun_l3_n891(x)
+ end
+end
+
+def fun_l2_n339(x)
+ if (x < 1)
+ fun_l3_n377(x)
+ else
+ fun_l3_n862(x)
+ end
+end
+
+def fun_l2_n340(x)
+ if (x < 1)
+ fun_l3_n278(x)
+ else
+ fun_l3_n495(x)
+ end
+end
+
+def fun_l2_n341(x)
+ if (x < 1)
+ fun_l3_n396(x)
+ else
+ fun_l3_n842(x)
+ end
+end
+
+def fun_l2_n342(x)
+ if (x < 1)
+ fun_l3_n971(x)
+ else
+ fun_l3_n296(x)
+ end
+end
+
+def fun_l2_n343(x)
+ if (x < 1)
+ fun_l3_n137(x)
+ else
+ fun_l3_n815(x)
+ end
+end
+
+def fun_l2_n344(x)
+ if (x < 1)
+ fun_l3_n910(x)
+ else
+ fun_l3_n515(x)
+ end
+end
+
+def fun_l2_n345(x)
+ if (x < 1)
+ fun_l3_n415(x)
+ else
+ fun_l3_n766(x)
+ end
+end
+
+def fun_l2_n346(x)
+ if (x < 1)
+ fun_l3_n816(x)
+ else
+ fun_l3_n169(x)
+ end
+end
+
+def fun_l2_n347(x)
+ if (x < 1)
+ fun_l3_n223(x)
+ else
+ fun_l3_n776(x)
+ end
+end
+
+def fun_l2_n348(x)
+ if (x < 1)
+ fun_l3_n316(x)
+ else
+ fun_l3_n497(x)
+ end
+end
+
+def fun_l2_n349(x)
+ if (x < 1)
+ fun_l3_n116(x)
+ else
+ fun_l3_n536(x)
+ end
+end
+
+def fun_l2_n350(x)
+ if (x < 1)
+ fun_l3_n252(x)
+ else
+ fun_l3_n981(x)
+ end
+end
+
+def fun_l2_n351(x)
+ if (x < 1)
+ fun_l3_n783(x)
+ else
+ fun_l3_n596(x)
+ end
+end
+
+def fun_l2_n352(x)
+ if (x < 1)
+ fun_l3_n72(x)
+ else
+ fun_l3_n978(x)
+ end
+end
+
+def fun_l2_n353(x)
+ if (x < 1)
+ fun_l3_n910(x)
+ else
+ fun_l3_n493(x)
+ end
+end
+
+def fun_l2_n354(x)
+ if (x < 1)
+ fun_l3_n671(x)
+ else
+ fun_l3_n297(x)
+ end
+end
+
+def fun_l2_n355(x)
+ if (x < 1)
+ fun_l3_n820(x)
+ else
+ fun_l3_n456(x)
+ end
+end
+
+def fun_l2_n356(x)
+ if (x < 1)
+ fun_l3_n23(x)
+ else
+ fun_l3_n760(x)
+ end
+end
+
+def fun_l2_n357(x)
+ if (x < 1)
+ fun_l3_n676(x)
+ else
+ fun_l3_n531(x)
+ end
+end
+
+def fun_l2_n358(x)
+ if (x < 1)
+ fun_l3_n849(x)
+ else
+ fun_l3_n592(x)
+ end
+end
+
+def fun_l2_n359(x)
+ if (x < 1)
+ fun_l3_n492(x)
+ else
+ fun_l3_n845(x)
+ end
+end
+
+def fun_l2_n360(x)
+ if (x < 1)
+ fun_l3_n58(x)
+ else
+ fun_l3_n896(x)
+ end
+end
+
+def fun_l2_n361(x)
+ if (x < 1)
+ fun_l3_n427(x)
+ else
+ fun_l3_n434(x)
+ end
+end
+
+def fun_l2_n362(x)
+ if (x < 1)
+ fun_l3_n129(x)
+ else
+ fun_l3_n582(x)
+ end
+end
+
+def fun_l2_n363(x)
+ if (x < 1)
+ fun_l3_n901(x)
+ else
+ fun_l3_n405(x)
+ end
+end
+
+def fun_l2_n364(x)
+ if (x < 1)
+ fun_l3_n577(x)
+ else
+ fun_l3_n550(x)
+ end
+end
+
+def fun_l2_n365(x)
+ if (x < 1)
+ fun_l3_n717(x)
+ else
+ fun_l3_n660(x)
+ end
+end
+
+def fun_l2_n366(x)
+ if (x < 1)
+ fun_l3_n605(x)
+ else
+ fun_l3_n755(x)
+ end
+end
+
+def fun_l2_n367(x)
+ if (x < 1)
+ fun_l3_n875(x)
+ else
+ fun_l3_n784(x)
+ end
+end
+
+def fun_l2_n368(x)
+ if (x < 1)
+ fun_l3_n914(x)
+ else
+ fun_l3_n351(x)
+ end
+end
+
+def fun_l2_n369(x)
+ if (x < 1)
+ fun_l3_n684(x)
+ else
+ fun_l3_n932(x)
+ end
+end
+
+def fun_l2_n370(x)
+ if (x < 1)
+ fun_l3_n796(x)
+ else
+ fun_l3_n920(x)
+ end
+end
+
+def fun_l2_n371(x)
+ if (x < 1)
+ fun_l3_n456(x)
+ else
+ fun_l3_n188(x)
+ end
+end
+
+def fun_l2_n372(x)
+ if (x < 1)
+ fun_l3_n891(x)
+ else
+ fun_l3_n905(x)
+ end
+end
+
+def fun_l2_n373(x)
+ if (x < 1)
+ fun_l3_n906(x)
+ else
+ fun_l3_n993(x)
+ end
+end
+
+def fun_l2_n374(x)
+ if (x < 1)
+ fun_l3_n811(x)
+ else
+ fun_l3_n629(x)
+ end
+end
+
+def fun_l2_n375(x)
+ if (x < 1)
+ fun_l3_n5(x)
+ else
+ fun_l3_n304(x)
+ end
+end
+
+def fun_l2_n376(x)
+ if (x < 1)
+ fun_l3_n240(x)
+ else
+ fun_l3_n859(x)
+ end
+end
+
+def fun_l2_n377(x)
+ if (x < 1)
+ fun_l3_n346(x)
+ else
+ fun_l3_n196(x)
+ end
+end
+
+def fun_l2_n378(x)
+ if (x < 1)
+ fun_l3_n918(x)
+ else
+ fun_l3_n371(x)
+ end
+end
+
+def fun_l2_n379(x)
+ if (x < 1)
+ fun_l3_n112(x)
+ else
+ fun_l3_n269(x)
+ end
+end
+
+def fun_l2_n380(x)
+ if (x < 1)
+ fun_l3_n46(x)
+ else
+ fun_l3_n397(x)
+ end
+end
+
+def fun_l2_n381(x)
+ if (x < 1)
+ fun_l3_n977(x)
+ else
+ fun_l3_n647(x)
+ end
+end
+
+def fun_l2_n382(x)
+ if (x < 1)
+ fun_l3_n788(x)
+ else
+ fun_l3_n418(x)
+ end
+end
+
+def fun_l2_n383(x)
+ if (x < 1)
+ fun_l3_n395(x)
+ else
+ fun_l3_n268(x)
+ end
+end
+
+def fun_l2_n384(x)
+ if (x < 1)
+ fun_l3_n39(x)
+ else
+ fun_l3_n950(x)
+ end
+end
+
+def fun_l2_n385(x)
+ if (x < 1)
+ fun_l3_n301(x)
+ else
+ fun_l3_n241(x)
+ end
+end
+
+def fun_l2_n386(x)
+ if (x < 1)
+ fun_l3_n936(x)
+ else
+ fun_l3_n416(x)
+ end
+end
+
+def fun_l2_n387(x)
+ if (x < 1)
+ fun_l3_n750(x)
+ else
+ fun_l3_n152(x)
+ end
+end
+
+def fun_l2_n388(x)
+ if (x < 1)
+ fun_l3_n210(x)
+ else
+ fun_l3_n824(x)
+ end
+end
+
+def fun_l2_n389(x)
+ if (x < 1)
+ fun_l3_n3(x)
+ else
+ fun_l3_n872(x)
+ end
+end
+
+def fun_l2_n390(x)
+ if (x < 1)
+ fun_l3_n944(x)
+ else
+ fun_l3_n49(x)
+ end
+end
+
+def fun_l2_n391(x)
+ if (x < 1)
+ fun_l3_n645(x)
+ else
+ fun_l3_n604(x)
+ end
+end
+
+def fun_l2_n392(x)
+ if (x < 1)
+ fun_l3_n539(x)
+ else
+ fun_l3_n374(x)
+ end
+end
+
+def fun_l2_n393(x)
+ if (x < 1)
+ fun_l3_n728(x)
+ else
+ fun_l3_n620(x)
+ end
+end
+
+def fun_l2_n394(x)
+ if (x < 1)
+ fun_l3_n538(x)
+ else
+ fun_l3_n233(x)
+ end
+end
+
+def fun_l2_n395(x)
+ if (x < 1)
+ fun_l3_n977(x)
+ else
+ fun_l3_n351(x)
+ end
+end
+
+def fun_l2_n396(x)
+ if (x < 1)
+ fun_l3_n54(x)
+ else
+ fun_l3_n958(x)
+ end
+end
+
+def fun_l2_n397(x)
+ if (x < 1)
+ fun_l3_n237(x)
+ else
+ fun_l3_n54(x)
+ end
+end
+
+def fun_l2_n398(x)
+ if (x < 1)
+ fun_l3_n846(x)
+ else
+ fun_l3_n234(x)
+ end
+end
+
+def fun_l2_n399(x)
+ if (x < 1)
+ fun_l3_n934(x)
+ else
+ fun_l3_n128(x)
+ end
+end
+
+def fun_l2_n400(x)
+ if (x < 1)
+ fun_l3_n15(x)
+ else
+ fun_l3_n288(x)
+ end
+end
+
+def fun_l2_n401(x)
+ if (x < 1)
+ fun_l3_n944(x)
+ else
+ fun_l3_n455(x)
+ end
+end
+
+def fun_l2_n402(x)
+ if (x < 1)
+ fun_l3_n962(x)
+ else
+ fun_l3_n785(x)
+ end
+end
+
+def fun_l2_n403(x)
+ if (x < 1)
+ fun_l3_n408(x)
+ else
+ fun_l3_n689(x)
+ end
+end
+
+def fun_l2_n404(x)
+ if (x < 1)
+ fun_l3_n722(x)
+ else
+ fun_l3_n704(x)
+ end
+end
+
+def fun_l2_n405(x)
+ if (x < 1)
+ fun_l3_n410(x)
+ else
+ fun_l3_n543(x)
+ end
+end
+
+def fun_l2_n406(x)
+ if (x < 1)
+ fun_l3_n953(x)
+ else
+ fun_l3_n351(x)
+ end
+end
+
+def fun_l2_n407(x)
+ if (x < 1)
+ fun_l3_n426(x)
+ else
+ fun_l3_n467(x)
+ end
+end
+
+def fun_l2_n408(x)
+ if (x < 1)
+ fun_l3_n204(x)
+ else
+ fun_l3_n163(x)
+ end
+end
+
+def fun_l2_n409(x)
+ if (x < 1)
+ fun_l3_n418(x)
+ else
+ fun_l3_n896(x)
+ end
+end
+
+def fun_l2_n410(x)
+ if (x < 1)
+ fun_l3_n915(x)
+ else
+ fun_l3_n800(x)
+ end
+end
+
+def fun_l2_n411(x)
+ if (x < 1)
+ fun_l3_n580(x)
+ else
+ fun_l3_n507(x)
+ end
+end
+
+def fun_l2_n412(x)
+ if (x < 1)
+ fun_l3_n672(x)
+ else
+ fun_l3_n938(x)
+ end
+end
+
+def fun_l2_n413(x)
+ if (x < 1)
+ fun_l3_n112(x)
+ else
+ fun_l3_n927(x)
+ end
+end
+
+def fun_l2_n414(x)
+ if (x < 1)
+ fun_l3_n801(x)
+ else
+ fun_l3_n604(x)
+ end
+end
+
+def fun_l2_n415(x)
+ if (x < 1)
+ fun_l3_n773(x)
+ else
+ fun_l3_n951(x)
+ end
+end
+
+def fun_l2_n416(x)
+ if (x < 1)
+ fun_l3_n335(x)
+ else
+ fun_l3_n157(x)
+ end
+end
+
+def fun_l2_n417(x)
+ if (x < 1)
+ fun_l3_n480(x)
+ else
+ fun_l3_n106(x)
+ end
+end
+
+def fun_l2_n418(x)
+ if (x < 1)
+ fun_l3_n523(x)
+ else
+ fun_l3_n969(x)
+ end
+end
+
+def fun_l2_n419(x)
+ if (x < 1)
+ fun_l3_n371(x)
+ else
+ fun_l3_n698(x)
+ end
+end
+
+def fun_l2_n420(x)
+ if (x < 1)
+ fun_l3_n102(x)
+ else
+ fun_l3_n47(x)
+ end
+end
+
+def fun_l2_n421(x)
+ if (x < 1)
+ fun_l3_n64(x)
+ else
+ fun_l3_n574(x)
+ end
+end
+
+def fun_l2_n422(x)
+ if (x < 1)
+ fun_l3_n208(x)
+ else
+ fun_l3_n904(x)
+ end
+end
+
+def fun_l2_n423(x)
+ if (x < 1)
+ fun_l3_n715(x)
+ else
+ fun_l3_n414(x)
+ end
+end
+
+def fun_l2_n424(x)
+ if (x < 1)
+ fun_l3_n455(x)
+ else
+ fun_l3_n219(x)
+ end
+end
+
+def fun_l2_n425(x)
+ if (x < 1)
+ fun_l3_n210(x)
+ else
+ fun_l3_n160(x)
+ end
+end
+
+def fun_l2_n426(x)
+ if (x < 1)
+ fun_l3_n729(x)
+ else
+ fun_l3_n512(x)
+ end
+end
+
+def fun_l2_n427(x)
+ if (x < 1)
+ fun_l3_n159(x)
+ else
+ fun_l3_n482(x)
+ end
+end
+
+def fun_l2_n428(x)
+ if (x < 1)
+ fun_l3_n182(x)
+ else
+ fun_l3_n687(x)
+ end
+end
+
+def fun_l2_n429(x)
+ if (x < 1)
+ fun_l3_n690(x)
+ else
+ fun_l3_n856(x)
+ end
+end
+
+def fun_l2_n430(x)
+ if (x < 1)
+ fun_l3_n494(x)
+ else
+ fun_l3_n365(x)
+ end
+end
+
+def fun_l2_n431(x)
+ if (x < 1)
+ fun_l3_n346(x)
+ else
+ fun_l3_n82(x)
+ end
+end
+
+def fun_l2_n432(x)
+ if (x < 1)
+ fun_l3_n311(x)
+ else
+ fun_l3_n412(x)
+ end
+end
+
+def fun_l2_n433(x)
+ if (x < 1)
+ fun_l3_n824(x)
+ else
+ fun_l3_n494(x)
+ end
+end
+
+def fun_l2_n434(x)
+ if (x < 1)
+ fun_l3_n471(x)
+ else
+ fun_l3_n174(x)
+ end
+end
+
+def fun_l2_n435(x)
+ if (x < 1)
+ fun_l3_n10(x)
+ else
+ fun_l3_n319(x)
+ end
+end
+
+def fun_l2_n436(x)
+ if (x < 1)
+ fun_l3_n223(x)
+ else
+ fun_l3_n518(x)
+ end
+end
+
+def fun_l2_n437(x)
+ if (x < 1)
+ fun_l3_n497(x)
+ else
+ fun_l3_n685(x)
+ end
+end
+
+def fun_l2_n438(x)
+ if (x < 1)
+ fun_l3_n639(x)
+ else
+ fun_l3_n695(x)
+ end
+end
+
+def fun_l2_n439(x)
+ if (x < 1)
+ fun_l3_n898(x)
+ else
+ fun_l3_n114(x)
+ end
+end
+
+def fun_l2_n440(x)
+ if (x < 1)
+ fun_l3_n12(x)
+ else
+ fun_l3_n344(x)
+ end
+end
+
+def fun_l2_n441(x)
+ if (x < 1)
+ fun_l3_n556(x)
+ else
+ fun_l3_n684(x)
+ end
+end
+
+def fun_l2_n442(x)
+ if (x < 1)
+ fun_l3_n403(x)
+ else
+ fun_l3_n528(x)
+ end
+end
+
+def fun_l2_n443(x)
+ if (x < 1)
+ fun_l3_n514(x)
+ else
+ fun_l3_n943(x)
+ end
+end
+
+def fun_l2_n444(x)
+ if (x < 1)
+ fun_l3_n218(x)
+ else
+ fun_l3_n94(x)
+ end
+end
+
+def fun_l2_n445(x)
+ if (x < 1)
+ fun_l3_n0(x)
+ else
+ fun_l3_n731(x)
+ end
+end
+
+def fun_l2_n446(x)
+ if (x < 1)
+ fun_l3_n468(x)
+ else
+ fun_l3_n197(x)
+ end
+end
+
+def fun_l2_n447(x)
+ if (x < 1)
+ fun_l3_n79(x)
+ else
+ fun_l3_n900(x)
+ end
+end
+
+def fun_l2_n448(x)
+ if (x < 1)
+ fun_l3_n706(x)
+ else
+ fun_l3_n250(x)
+ end
+end
+
+def fun_l2_n449(x)
+ if (x < 1)
+ fun_l3_n607(x)
+ else
+ fun_l3_n514(x)
+ end
+end
+
+def fun_l2_n450(x)
+ if (x < 1)
+ fun_l3_n855(x)
+ else
+ fun_l3_n223(x)
+ end
+end
+
+def fun_l2_n451(x)
+ if (x < 1)
+ fun_l3_n824(x)
+ else
+ fun_l3_n426(x)
+ end
+end
+
+def fun_l2_n452(x)
+ if (x < 1)
+ fun_l3_n137(x)
+ else
+ fun_l3_n555(x)
+ end
+end
+
+def fun_l2_n453(x)
+ if (x < 1)
+ fun_l3_n553(x)
+ else
+ fun_l3_n130(x)
+ end
+end
+
+def fun_l2_n454(x)
+ if (x < 1)
+ fun_l3_n350(x)
+ else
+ fun_l3_n545(x)
+ end
+end
+
+def fun_l2_n455(x)
+ if (x < 1)
+ fun_l3_n181(x)
+ else
+ fun_l3_n950(x)
+ end
+end
+
+def fun_l2_n456(x)
+ if (x < 1)
+ fun_l3_n581(x)
+ else
+ fun_l3_n957(x)
+ end
+end
+
+def fun_l2_n457(x)
+ if (x < 1)
+ fun_l3_n688(x)
+ else
+ fun_l3_n560(x)
+ end
+end
+
+def fun_l2_n458(x)
+ if (x < 1)
+ fun_l3_n655(x)
+ else
+ fun_l3_n323(x)
+ end
+end
+
+def fun_l2_n459(x)
+ if (x < 1)
+ fun_l3_n92(x)
+ else
+ fun_l3_n796(x)
+ end
+end
+
+def fun_l2_n460(x)
+ if (x < 1)
+ fun_l3_n68(x)
+ else
+ fun_l3_n152(x)
+ end
+end
+
+def fun_l2_n461(x)
+ if (x < 1)
+ fun_l3_n153(x)
+ else
+ fun_l3_n929(x)
+ end
+end
+
+def fun_l2_n462(x)
+ if (x < 1)
+ fun_l3_n401(x)
+ else
+ fun_l3_n248(x)
+ end
+end
+
+def fun_l2_n463(x)
+ if (x < 1)
+ fun_l3_n4(x)
+ else
+ fun_l3_n906(x)
+ end
+end
+
+def fun_l2_n464(x)
+ if (x < 1)
+ fun_l3_n313(x)
+ else
+ fun_l3_n911(x)
+ end
+end
+
+def fun_l2_n465(x)
+ if (x < 1)
+ fun_l3_n490(x)
+ else
+ fun_l3_n430(x)
+ end
+end
+
+def fun_l2_n466(x)
+ if (x < 1)
+ fun_l3_n537(x)
+ else
+ fun_l3_n470(x)
+ end
+end
+
+def fun_l2_n467(x)
+ if (x < 1)
+ fun_l3_n666(x)
+ else
+ fun_l3_n695(x)
+ end
+end
+
+def fun_l2_n468(x)
+ if (x < 1)
+ fun_l3_n126(x)
+ else
+ fun_l3_n201(x)
+ end
+end
+
+def fun_l2_n469(x)
+ if (x < 1)
+ fun_l3_n111(x)
+ else
+ fun_l3_n741(x)
+ end
+end
+
+def fun_l2_n470(x)
+ if (x < 1)
+ fun_l3_n391(x)
+ else
+ fun_l3_n83(x)
+ end
+end
+
+def fun_l2_n471(x)
+ if (x < 1)
+ fun_l3_n619(x)
+ else
+ fun_l3_n425(x)
+ end
+end
+
+def fun_l2_n472(x)
+ if (x < 1)
+ fun_l3_n637(x)
+ else
+ fun_l3_n865(x)
+ end
+end
+
+def fun_l2_n473(x)
+ if (x < 1)
+ fun_l3_n182(x)
+ else
+ fun_l3_n350(x)
+ end
+end
+
+def fun_l2_n474(x)
+ if (x < 1)
+ fun_l3_n752(x)
+ else
+ fun_l3_n815(x)
+ end
+end
+
+def fun_l2_n475(x)
+ if (x < 1)
+ fun_l3_n184(x)
+ else
+ fun_l3_n683(x)
+ end
+end
+
+def fun_l2_n476(x)
+ if (x < 1)
+ fun_l3_n324(x)
+ else
+ fun_l3_n232(x)
+ end
+end
+
+def fun_l2_n477(x)
+ if (x < 1)
+ fun_l3_n588(x)
+ else
+ fun_l3_n586(x)
+ end
+end
+
+def fun_l2_n478(x)
+ if (x < 1)
+ fun_l3_n320(x)
+ else
+ fun_l3_n599(x)
+ end
+end
+
+def fun_l2_n479(x)
+ if (x < 1)
+ fun_l3_n999(x)
+ else
+ fun_l3_n678(x)
+ end
+end
+
+def fun_l2_n480(x)
+ if (x < 1)
+ fun_l3_n523(x)
+ else
+ fun_l3_n637(x)
+ end
+end
+
+def fun_l2_n481(x)
+ if (x < 1)
+ fun_l3_n291(x)
+ else
+ fun_l3_n347(x)
+ end
+end
+
+def fun_l2_n482(x)
+ if (x < 1)
+ fun_l3_n873(x)
+ else
+ fun_l3_n435(x)
+ end
+end
+
+def fun_l2_n483(x)
+ if (x < 1)
+ fun_l3_n718(x)
+ else
+ fun_l3_n903(x)
+ end
+end
+
+def fun_l2_n484(x)
+ if (x < 1)
+ fun_l3_n188(x)
+ else
+ fun_l3_n751(x)
+ end
+end
+
+def fun_l2_n485(x)
+ if (x < 1)
+ fun_l3_n501(x)
+ else
+ fun_l3_n235(x)
+ end
+end
+
+def fun_l2_n486(x)
+ if (x < 1)
+ fun_l3_n578(x)
+ else
+ fun_l3_n224(x)
+ end
+end
+
+def fun_l2_n487(x)
+ if (x < 1)
+ fun_l3_n757(x)
+ else
+ fun_l3_n145(x)
+ end
+end
+
+def fun_l2_n488(x)
+ if (x < 1)
+ fun_l3_n17(x)
+ else
+ fun_l3_n727(x)
+ end
+end
+
+def fun_l2_n489(x)
+ if (x < 1)
+ fun_l3_n699(x)
+ else
+ fun_l3_n102(x)
+ end
+end
+
+def fun_l2_n490(x)
+ if (x < 1)
+ fun_l3_n518(x)
+ else
+ fun_l3_n15(x)
+ end
+end
+
+def fun_l2_n491(x)
+ if (x < 1)
+ fun_l3_n889(x)
+ else
+ fun_l3_n798(x)
+ end
+end
+
+def fun_l2_n492(x)
+ if (x < 1)
+ fun_l3_n715(x)
+ else
+ fun_l3_n27(x)
+ end
+end
+
+def fun_l2_n493(x)
+ if (x < 1)
+ fun_l3_n237(x)
+ else
+ fun_l3_n130(x)
+ end
+end
+
+def fun_l2_n494(x)
+ if (x < 1)
+ fun_l3_n99(x)
+ else
+ fun_l3_n223(x)
+ end
+end
+
+def fun_l2_n495(x)
+ if (x < 1)
+ fun_l3_n65(x)
+ else
+ fun_l3_n811(x)
+ end
+end
+
+def fun_l2_n496(x)
+ if (x < 1)
+ fun_l3_n457(x)
+ else
+ fun_l3_n527(x)
+ end
+end
+
+def fun_l2_n497(x)
+ if (x < 1)
+ fun_l3_n312(x)
+ else
+ fun_l3_n902(x)
+ end
+end
+
+def fun_l2_n498(x)
+ if (x < 1)
+ fun_l3_n63(x)
+ else
+ fun_l3_n948(x)
+ end
+end
+
+def fun_l2_n499(x)
+ if (x < 1)
+ fun_l3_n652(x)
+ else
+ fun_l3_n752(x)
+ end
+end
+
+def fun_l2_n500(x)
+ if (x < 1)
+ fun_l3_n583(x)
+ else
+ fun_l3_n427(x)
+ end
+end
+
+def fun_l2_n501(x)
+ if (x < 1)
+ fun_l3_n536(x)
+ else
+ fun_l3_n671(x)
+ end
+end
+
+def fun_l2_n502(x)
+ if (x < 1)
+ fun_l3_n122(x)
+ else
+ fun_l3_n170(x)
+ end
+end
+
+def fun_l2_n503(x)
+ if (x < 1)
+ fun_l3_n280(x)
+ else
+ fun_l3_n390(x)
+ end
+end
+
+def fun_l2_n504(x)
+ if (x < 1)
+ fun_l3_n427(x)
+ else
+ fun_l3_n267(x)
+ end
+end
+
+def fun_l2_n505(x)
+ if (x < 1)
+ fun_l3_n241(x)
+ else
+ fun_l3_n345(x)
+ end
+end
+
+def fun_l2_n506(x)
+ if (x < 1)
+ fun_l3_n960(x)
+ else
+ fun_l3_n537(x)
+ end
+end
+
+def fun_l2_n507(x)
+ if (x < 1)
+ fun_l3_n947(x)
+ else
+ fun_l3_n3(x)
+ end
+end
+
+def fun_l2_n508(x)
+ if (x < 1)
+ fun_l3_n974(x)
+ else
+ fun_l3_n597(x)
+ end
+end
+
+def fun_l2_n509(x)
+ if (x < 1)
+ fun_l3_n978(x)
+ else
+ fun_l3_n70(x)
+ end
+end
+
+def fun_l2_n510(x)
+ if (x < 1)
+ fun_l3_n855(x)
+ else
+ fun_l3_n259(x)
+ end
+end
+
+def fun_l2_n511(x)
+ if (x < 1)
+ fun_l3_n987(x)
+ else
+ fun_l3_n182(x)
+ end
+end
+
+def fun_l2_n512(x)
+ if (x < 1)
+ fun_l3_n787(x)
+ else
+ fun_l3_n656(x)
+ end
+end
+
+def fun_l2_n513(x)
+ if (x < 1)
+ fun_l3_n348(x)
+ else
+ fun_l3_n242(x)
+ end
+end
+
+def fun_l2_n514(x)
+ if (x < 1)
+ fun_l3_n530(x)
+ else
+ fun_l3_n718(x)
+ end
+end
+
+def fun_l2_n515(x)
+ if (x < 1)
+ fun_l3_n840(x)
+ else
+ fun_l3_n302(x)
+ end
+end
+
+def fun_l2_n516(x)
+ if (x < 1)
+ fun_l3_n678(x)
+ else
+ fun_l3_n732(x)
+ end
+end
+
+def fun_l2_n517(x)
+ if (x < 1)
+ fun_l3_n160(x)
+ else
+ fun_l3_n344(x)
+ end
+end
+
+def fun_l2_n518(x)
+ if (x < 1)
+ fun_l3_n518(x)
+ else
+ fun_l3_n830(x)
+ end
+end
+
+def fun_l2_n519(x)
+ if (x < 1)
+ fun_l3_n595(x)
+ else
+ fun_l3_n95(x)
+ end
+end
+
+def fun_l2_n520(x)
+ if (x < 1)
+ fun_l3_n939(x)
+ else
+ fun_l3_n954(x)
+ end
+end
+
+def fun_l2_n521(x)
+ if (x < 1)
+ fun_l3_n931(x)
+ else
+ fun_l3_n686(x)
+ end
+end
+
+def fun_l2_n522(x)
+ if (x < 1)
+ fun_l3_n117(x)
+ else
+ fun_l3_n501(x)
+ end
+end
+
+def fun_l2_n523(x)
+ if (x < 1)
+ fun_l3_n727(x)
+ else
+ fun_l3_n712(x)
+ end
+end
+
+def fun_l2_n524(x)
+ if (x < 1)
+ fun_l3_n152(x)
+ else
+ fun_l3_n453(x)
+ end
+end
+
+def fun_l2_n525(x)
+ if (x < 1)
+ fun_l3_n375(x)
+ else
+ fun_l3_n186(x)
+ end
+end
+
+def fun_l2_n526(x)
+ if (x < 1)
+ fun_l3_n835(x)
+ else
+ fun_l3_n465(x)
+ end
+end
+
+def fun_l2_n527(x)
+ if (x < 1)
+ fun_l3_n411(x)
+ else
+ fun_l3_n208(x)
+ end
+end
+
+def fun_l2_n528(x)
+ if (x < 1)
+ fun_l3_n696(x)
+ else
+ fun_l3_n537(x)
+ end
+end
+
+def fun_l2_n529(x)
+ if (x < 1)
+ fun_l3_n606(x)
+ else
+ fun_l3_n682(x)
+ end
+end
+
+def fun_l2_n530(x)
+ if (x < 1)
+ fun_l3_n920(x)
+ else
+ fun_l3_n592(x)
+ end
+end
+
+def fun_l2_n531(x)
+ if (x < 1)
+ fun_l3_n201(x)
+ else
+ fun_l3_n27(x)
+ end
+end
+
+def fun_l2_n532(x)
+ if (x < 1)
+ fun_l3_n643(x)
+ else
+ fun_l3_n642(x)
+ end
+end
+
+def fun_l2_n533(x)
+ if (x < 1)
+ fun_l3_n92(x)
+ else
+ fun_l3_n576(x)
+ end
+end
+
+def fun_l2_n534(x)
+ if (x < 1)
+ fun_l3_n135(x)
+ else
+ fun_l3_n738(x)
+ end
+end
+
+def fun_l2_n535(x)
+ if (x < 1)
+ fun_l3_n706(x)
+ else
+ fun_l3_n810(x)
+ end
+end
+
+def fun_l2_n536(x)
+ if (x < 1)
+ fun_l3_n922(x)
+ else
+ fun_l3_n456(x)
+ end
+end
+
+def fun_l2_n537(x)
+ if (x < 1)
+ fun_l3_n511(x)
+ else
+ fun_l3_n279(x)
+ end
+end
+
+def fun_l2_n538(x)
+ if (x < 1)
+ fun_l3_n541(x)
+ else
+ fun_l3_n826(x)
+ end
+end
+
+def fun_l2_n539(x)
+ if (x < 1)
+ fun_l3_n7(x)
+ else
+ fun_l3_n362(x)
+ end
+end
+
+def fun_l2_n540(x)
+ if (x < 1)
+ fun_l3_n132(x)
+ else
+ fun_l3_n819(x)
+ end
+end
+
+def fun_l2_n541(x)
+ if (x < 1)
+ fun_l3_n600(x)
+ else
+ fun_l3_n155(x)
+ end
+end
+
+def fun_l2_n542(x)
+ if (x < 1)
+ fun_l3_n930(x)
+ else
+ fun_l3_n827(x)
+ end
+end
+
+def fun_l2_n543(x)
+ if (x < 1)
+ fun_l3_n974(x)
+ else
+ fun_l3_n957(x)
+ end
+end
+
+def fun_l2_n544(x)
+ if (x < 1)
+ fun_l3_n912(x)
+ else
+ fun_l3_n503(x)
+ end
+end
+
+def fun_l2_n545(x)
+ if (x < 1)
+ fun_l3_n605(x)
+ else
+ fun_l3_n966(x)
+ end
+end
+
+def fun_l2_n546(x)
+ if (x < 1)
+ fun_l3_n523(x)
+ else
+ fun_l3_n105(x)
+ end
+end
+
+def fun_l2_n547(x)
+ if (x < 1)
+ fun_l3_n352(x)
+ else
+ fun_l3_n762(x)
+ end
+end
+
+def fun_l2_n548(x)
+ if (x < 1)
+ fun_l3_n65(x)
+ else
+ fun_l3_n714(x)
+ end
+end
+
+def fun_l2_n549(x)
+ if (x < 1)
+ fun_l3_n665(x)
+ else
+ fun_l3_n799(x)
+ end
+end
+
+def fun_l2_n550(x)
+ if (x < 1)
+ fun_l3_n624(x)
+ else
+ fun_l3_n131(x)
+ end
+end
+
+def fun_l2_n551(x)
+ if (x < 1)
+ fun_l3_n53(x)
+ else
+ fun_l3_n377(x)
+ end
+end
+
+def fun_l2_n552(x)
+ if (x < 1)
+ fun_l3_n377(x)
+ else
+ fun_l3_n532(x)
+ end
+end
+
+def fun_l2_n553(x)
+ if (x < 1)
+ fun_l3_n302(x)
+ else
+ fun_l3_n593(x)
+ end
+end
+
+def fun_l2_n554(x)
+ if (x < 1)
+ fun_l3_n573(x)
+ else
+ fun_l3_n727(x)
+ end
+end
+
+def fun_l2_n555(x)
+ if (x < 1)
+ fun_l3_n575(x)
+ else
+ fun_l3_n838(x)
+ end
+end
+
+def fun_l2_n556(x)
+ if (x < 1)
+ fun_l3_n92(x)
+ else
+ fun_l3_n137(x)
+ end
+end
+
+def fun_l2_n557(x)
+ if (x < 1)
+ fun_l3_n921(x)
+ else
+ fun_l3_n683(x)
+ end
+end
+
+def fun_l2_n558(x)
+ if (x < 1)
+ fun_l3_n987(x)
+ else
+ fun_l3_n646(x)
+ end
+end
+
+def fun_l2_n559(x)
+ if (x < 1)
+ fun_l3_n574(x)
+ else
+ fun_l3_n493(x)
+ end
+end
+
+def fun_l2_n560(x)
+ if (x < 1)
+ fun_l3_n950(x)
+ else
+ fun_l3_n139(x)
+ end
+end
+
+def fun_l2_n561(x)
+ if (x < 1)
+ fun_l3_n276(x)
+ else
+ fun_l3_n491(x)
+ end
+end
+
+def fun_l2_n562(x)
+ if (x < 1)
+ fun_l3_n226(x)
+ else
+ fun_l3_n840(x)
+ end
+end
+
+def fun_l2_n563(x)
+ if (x < 1)
+ fun_l3_n473(x)
+ else
+ fun_l3_n907(x)
+ end
+end
+
+def fun_l2_n564(x)
+ if (x < 1)
+ fun_l3_n695(x)
+ else
+ fun_l3_n951(x)
+ end
+end
+
+def fun_l2_n565(x)
+ if (x < 1)
+ fun_l3_n415(x)
+ else
+ fun_l3_n12(x)
+ end
+end
+
+def fun_l2_n566(x)
+ if (x < 1)
+ fun_l3_n32(x)
+ else
+ fun_l3_n759(x)
+ end
+end
+
+def fun_l2_n567(x)
+ if (x < 1)
+ fun_l3_n876(x)
+ else
+ fun_l3_n297(x)
+ end
+end
+
+def fun_l2_n568(x)
+ if (x < 1)
+ fun_l3_n520(x)
+ else
+ fun_l3_n713(x)
+ end
+end
+
+def fun_l2_n569(x)
+ if (x < 1)
+ fun_l3_n819(x)
+ else
+ fun_l3_n505(x)
+ end
+end
+
+def fun_l2_n570(x)
+ if (x < 1)
+ fun_l3_n661(x)
+ else
+ fun_l3_n447(x)
+ end
+end
+
+def fun_l2_n571(x)
+ if (x < 1)
+ fun_l3_n538(x)
+ else
+ fun_l3_n532(x)
+ end
+end
+
+def fun_l2_n572(x)
+ if (x < 1)
+ fun_l3_n584(x)
+ else
+ fun_l3_n304(x)
+ end
+end
+
+def fun_l2_n573(x)
+ if (x < 1)
+ fun_l3_n76(x)
+ else
+ fun_l3_n512(x)
+ end
+end
+
+def fun_l2_n574(x)
+ if (x < 1)
+ fun_l3_n22(x)
+ else
+ fun_l3_n328(x)
+ end
+end
+
+def fun_l2_n575(x)
+ if (x < 1)
+ fun_l3_n397(x)
+ else
+ fun_l3_n640(x)
+ end
+end
+
+def fun_l2_n576(x)
+ if (x < 1)
+ fun_l3_n227(x)
+ else
+ fun_l3_n236(x)
+ end
+end
+
+def fun_l2_n577(x)
+ if (x < 1)
+ fun_l3_n743(x)
+ else
+ fun_l3_n974(x)
+ end
+end
+
+def fun_l2_n578(x)
+ if (x < 1)
+ fun_l3_n970(x)
+ else
+ fun_l3_n229(x)
+ end
+end
+
+def fun_l2_n579(x)
+ if (x < 1)
+ fun_l3_n401(x)
+ else
+ fun_l3_n672(x)
+ end
+end
+
+def fun_l2_n580(x)
+ if (x < 1)
+ fun_l3_n837(x)
+ else
+ fun_l3_n804(x)
+ end
+end
+
+def fun_l2_n581(x)
+ if (x < 1)
+ fun_l3_n526(x)
+ else
+ fun_l3_n763(x)
+ end
+end
+
+def fun_l2_n582(x)
+ if (x < 1)
+ fun_l3_n2(x)
+ else
+ fun_l3_n692(x)
+ end
+end
+
+def fun_l2_n583(x)
+ if (x < 1)
+ fun_l3_n561(x)
+ else
+ fun_l3_n394(x)
+ end
+end
+
+def fun_l2_n584(x)
+ if (x < 1)
+ fun_l3_n60(x)
+ else
+ fun_l3_n682(x)
+ end
+end
+
+def fun_l2_n585(x)
+ if (x < 1)
+ fun_l3_n646(x)
+ else
+ fun_l3_n776(x)
+ end
+end
+
+def fun_l2_n586(x)
+ if (x < 1)
+ fun_l3_n466(x)
+ else
+ fun_l3_n91(x)
+ end
+end
+
+def fun_l2_n587(x)
+ if (x < 1)
+ fun_l3_n294(x)
+ else
+ fun_l3_n813(x)
+ end
+end
+
+def fun_l2_n588(x)
+ if (x < 1)
+ fun_l3_n958(x)
+ else
+ fun_l3_n64(x)
+ end
+end
+
+def fun_l2_n589(x)
+ if (x < 1)
+ fun_l3_n703(x)
+ else
+ fun_l3_n937(x)
+ end
+end
+
+def fun_l2_n590(x)
+ if (x < 1)
+ fun_l3_n1(x)
+ else
+ fun_l3_n970(x)
+ end
+end
+
+def fun_l2_n591(x)
+ if (x < 1)
+ fun_l3_n566(x)
+ else
+ fun_l3_n750(x)
+ end
+end
+
+def fun_l2_n592(x)
+ if (x < 1)
+ fun_l3_n905(x)
+ else
+ fun_l3_n840(x)
+ end
+end
+
+def fun_l2_n593(x)
+ if (x < 1)
+ fun_l3_n23(x)
+ else
+ fun_l3_n862(x)
+ end
+end
+
+def fun_l2_n594(x)
+ if (x < 1)
+ fun_l3_n739(x)
+ else
+ fun_l3_n4(x)
+ end
+end
+
+def fun_l2_n595(x)
+ if (x < 1)
+ fun_l3_n818(x)
+ else
+ fun_l3_n117(x)
+ end
+end
+
+def fun_l2_n596(x)
+ if (x < 1)
+ fun_l3_n891(x)
+ else
+ fun_l3_n599(x)
+ end
+end
+
+def fun_l2_n597(x)
+ if (x < 1)
+ fun_l3_n731(x)
+ else
+ fun_l3_n960(x)
+ end
+end
+
+def fun_l2_n598(x)
+ if (x < 1)
+ fun_l3_n323(x)
+ else
+ fun_l3_n811(x)
+ end
+end
+
+def fun_l2_n599(x)
+ if (x < 1)
+ fun_l3_n299(x)
+ else
+ fun_l3_n188(x)
+ end
+end
+
+def fun_l2_n600(x)
+ if (x < 1)
+ fun_l3_n129(x)
+ else
+ fun_l3_n730(x)
+ end
+end
+
+def fun_l2_n601(x)
+ if (x < 1)
+ fun_l3_n412(x)
+ else
+ fun_l3_n353(x)
+ end
+end
+
+def fun_l2_n602(x)
+ if (x < 1)
+ fun_l3_n658(x)
+ else
+ fun_l3_n774(x)
+ end
+end
+
+def fun_l2_n603(x)
+ if (x < 1)
+ fun_l3_n378(x)
+ else
+ fun_l3_n722(x)
+ end
+end
+
+def fun_l2_n604(x)
+ if (x < 1)
+ fun_l3_n482(x)
+ else
+ fun_l3_n949(x)
+ end
+end
+
+def fun_l2_n605(x)
+ if (x < 1)
+ fun_l3_n996(x)
+ else
+ fun_l3_n169(x)
+ end
+end
+
+def fun_l2_n606(x)
+ if (x < 1)
+ fun_l3_n653(x)
+ else
+ fun_l3_n966(x)
+ end
+end
+
+def fun_l2_n607(x)
+ if (x < 1)
+ fun_l3_n179(x)
+ else
+ fun_l3_n113(x)
+ end
+end
+
+def fun_l2_n608(x)
+ if (x < 1)
+ fun_l3_n157(x)
+ else
+ fun_l3_n692(x)
+ end
+end
+
+def fun_l2_n609(x)
+ if (x < 1)
+ fun_l3_n648(x)
+ else
+ fun_l3_n318(x)
+ end
+end
+
+def fun_l2_n610(x)
+ if (x < 1)
+ fun_l3_n979(x)
+ else
+ fun_l3_n642(x)
+ end
+end
+
+def fun_l2_n611(x)
+ if (x < 1)
+ fun_l3_n909(x)
+ else
+ fun_l3_n986(x)
+ end
+end
+
+def fun_l2_n612(x)
+ if (x < 1)
+ fun_l3_n387(x)
+ else
+ fun_l3_n586(x)
+ end
+end
+
+def fun_l2_n613(x)
+ if (x < 1)
+ fun_l3_n99(x)
+ else
+ fun_l3_n690(x)
+ end
+end
+
+def fun_l2_n614(x)
+ if (x < 1)
+ fun_l3_n485(x)
+ else
+ fun_l3_n733(x)
+ end
+end
+
+def fun_l2_n615(x)
+ if (x < 1)
+ fun_l3_n735(x)
+ else
+ fun_l3_n827(x)
+ end
+end
+
+def fun_l2_n616(x)
+ if (x < 1)
+ fun_l3_n496(x)
+ else
+ fun_l3_n912(x)
+ end
+end
+
+def fun_l2_n617(x)
+ if (x < 1)
+ fun_l3_n363(x)
+ else
+ fun_l3_n845(x)
+ end
+end
+
+def fun_l2_n618(x)
+ if (x < 1)
+ fun_l3_n891(x)
+ else
+ fun_l3_n964(x)
+ end
+end
+
+def fun_l2_n619(x)
+ if (x < 1)
+ fun_l3_n266(x)
+ else
+ fun_l3_n189(x)
+ end
+end
+
+def fun_l2_n620(x)
+ if (x < 1)
+ fun_l3_n906(x)
+ else
+ fun_l3_n218(x)
+ end
+end
+
+def fun_l2_n621(x)
+ if (x < 1)
+ fun_l3_n145(x)
+ else
+ fun_l3_n279(x)
+ end
+end
+
+def fun_l2_n622(x)
+ if (x < 1)
+ fun_l3_n797(x)
+ else
+ fun_l3_n328(x)
+ end
+end
+
+def fun_l2_n623(x)
+ if (x < 1)
+ fun_l3_n910(x)
+ else
+ fun_l3_n250(x)
+ end
+end
+
+def fun_l2_n624(x)
+ if (x < 1)
+ fun_l3_n111(x)
+ else
+ fun_l3_n884(x)
+ end
+end
+
+def fun_l2_n625(x)
+ if (x < 1)
+ fun_l3_n852(x)
+ else
+ fun_l3_n985(x)
+ end
+end
+
+def fun_l2_n626(x)
+ if (x < 1)
+ fun_l3_n163(x)
+ else
+ fun_l3_n885(x)
+ end
+end
+
+def fun_l2_n627(x)
+ if (x < 1)
+ fun_l3_n338(x)
+ else
+ fun_l3_n562(x)
+ end
+end
+
+def fun_l2_n628(x)
+ if (x < 1)
+ fun_l3_n300(x)
+ else
+ fun_l3_n245(x)
+ end
+end
+
+def fun_l2_n629(x)
+ if (x < 1)
+ fun_l3_n747(x)
+ else
+ fun_l3_n123(x)
+ end
+end
+
+def fun_l2_n630(x)
+ if (x < 1)
+ fun_l3_n42(x)
+ else
+ fun_l3_n46(x)
+ end
+end
+
+def fun_l2_n631(x)
+ if (x < 1)
+ fun_l3_n256(x)
+ else
+ fun_l3_n960(x)
+ end
+end
+
+def fun_l2_n632(x)
+ if (x < 1)
+ fun_l3_n679(x)
+ else
+ fun_l3_n393(x)
+ end
+end
+
+def fun_l2_n633(x)
+ if (x < 1)
+ fun_l3_n286(x)
+ else
+ fun_l3_n147(x)
+ end
+end
+
+def fun_l2_n634(x)
+ if (x < 1)
+ fun_l3_n62(x)
+ else
+ fun_l3_n994(x)
+ end
+end
+
+def fun_l2_n635(x)
+ if (x < 1)
+ fun_l3_n479(x)
+ else
+ fun_l3_n502(x)
+ end
+end
+
+def fun_l2_n636(x)
+ if (x < 1)
+ fun_l3_n504(x)
+ else
+ fun_l3_n557(x)
+ end
+end
+
+def fun_l2_n637(x)
+ if (x < 1)
+ fun_l3_n716(x)
+ else
+ fun_l3_n763(x)
+ end
+end
+
+def fun_l2_n638(x)
+ if (x < 1)
+ fun_l3_n972(x)
+ else
+ fun_l3_n391(x)
+ end
+end
+
+def fun_l2_n639(x)
+ if (x < 1)
+ fun_l3_n842(x)
+ else
+ fun_l3_n740(x)
+ end
+end
+
+def fun_l2_n640(x)
+ if (x < 1)
+ fun_l3_n854(x)
+ else
+ fun_l3_n52(x)
+ end
+end
+
+def fun_l2_n641(x)
+ if (x < 1)
+ fun_l3_n321(x)
+ else
+ fun_l3_n109(x)
+ end
+end
+
+def fun_l2_n642(x)
+ if (x < 1)
+ fun_l3_n868(x)
+ else
+ fun_l3_n926(x)
+ end
+end
+
+def fun_l2_n643(x)
+ if (x < 1)
+ fun_l3_n864(x)
+ else
+ fun_l3_n98(x)
+ end
+end
+
+def fun_l2_n644(x)
+ if (x < 1)
+ fun_l3_n373(x)
+ else
+ fun_l3_n105(x)
+ end
+end
+
+def fun_l2_n645(x)
+ if (x < 1)
+ fun_l3_n293(x)
+ else
+ fun_l3_n846(x)
+ end
+end
+
+def fun_l2_n646(x)
+ if (x < 1)
+ fun_l3_n24(x)
+ else
+ fun_l3_n83(x)
+ end
+end
+
+def fun_l2_n647(x)
+ if (x < 1)
+ fun_l3_n431(x)
+ else
+ fun_l3_n772(x)
+ end
+end
+
+def fun_l2_n648(x)
+ if (x < 1)
+ fun_l3_n667(x)
+ else
+ fun_l3_n108(x)
+ end
+end
+
+def fun_l2_n649(x)
+ if (x < 1)
+ fun_l3_n93(x)
+ else
+ fun_l3_n394(x)
+ end
+end
+
+def fun_l2_n650(x)
+ if (x < 1)
+ fun_l3_n176(x)
+ else
+ fun_l3_n315(x)
+ end
+end
+
+def fun_l2_n651(x)
+ if (x < 1)
+ fun_l3_n684(x)
+ else
+ fun_l3_n635(x)
+ end
+end
+
+def fun_l2_n652(x)
+ if (x < 1)
+ fun_l3_n554(x)
+ else
+ fun_l3_n88(x)
+ end
+end
+
+def fun_l2_n653(x)
+ if (x < 1)
+ fun_l3_n165(x)
+ else
+ fun_l3_n962(x)
+ end
+end
+
+def fun_l2_n654(x)
+ if (x < 1)
+ fun_l3_n631(x)
+ else
+ fun_l3_n80(x)
+ end
+end
+
+def fun_l2_n655(x)
+ if (x < 1)
+ fun_l3_n529(x)
+ else
+ fun_l3_n711(x)
+ end
+end
+
+def fun_l2_n656(x)
+ if (x < 1)
+ fun_l3_n809(x)
+ else
+ fun_l3_n44(x)
+ end
+end
+
+def fun_l2_n657(x)
+ if (x < 1)
+ fun_l3_n226(x)
+ else
+ fun_l3_n939(x)
+ end
+end
+
+def fun_l2_n658(x)
+ if (x < 1)
+ fun_l3_n355(x)
+ else
+ fun_l3_n750(x)
+ end
+end
+
+def fun_l2_n659(x)
+ if (x < 1)
+ fun_l3_n111(x)
+ else
+ fun_l3_n883(x)
+ end
+end
+
+def fun_l2_n660(x)
+ if (x < 1)
+ fun_l3_n22(x)
+ else
+ fun_l3_n544(x)
+ end
+end
+
+def fun_l2_n661(x)
+ if (x < 1)
+ fun_l3_n334(x)
+ else
+ fun_l3_n58(x)
+ end
+end
+
+def fun_l2_n662(x)
+ if (x < 1)
+ fun_l3_n690(x)
+ else
+ fun_l3_n647(x)
+ end
+end
+
+def fun_l2_n663(x)
+ if (x < 1)
+ fun_l3_n886(x)
+ else
+ fun_l3_n142(x)
+ end
+end
+
+def fun_l2_n664(x)
+ if (x < 1)
+ fun_l3_n713(x)
+ else
+ fun_l3_n710(x)
+ end
+end
+
+def fun_l2_n665(x)
+ if (x < 1)
+ fun_l3_n657(x)
+ else
+ fun_l3_n24(x)
+ end
+end
+
+def fun_l2_n666(x)
+ if (x < 1)
+ fun_l3_n993(x)
+ else
+ fun_l3_n741(x)
+ end
+end
+
+def fun_l2_n667(x)
+ if (x < 1)
+ fun_l3_n265(x)
+ else
+ fun_l3_n143(x)
+ end
+end
+
+def fun_l2_n668(x)
+ if (x < 1)
+ fun_l3_n725(x)
+ else
+ fun_l3_n272(x)
+ end
+end
+
+def fun_l2_n669(x)
+ if (x < 1)
+ fun_l3_n171(x)
+ else
+ fun_l3_n95(x)
+ end
+end
+
+def fun_l2_n670(x)
+ if (x < 1)
+ fun_l3_n409(x)
+ else
+ fun_l3_n774(x)
+ end
+end
+
+def fun_l2_n671(x)
+ if (x < 1)
+ fun_l3_n566(x)
+ else
+ fun_l3_n251(x)
+ end
+end
+
+def fun_l2_n672(x)
+ if (x < 1)
+ fun_l3_n914(x)
+ else
+ fun_l3_n716(x)
+ end
+end
+
+def fun_l2_n673(x)
+ if (x < 1)
+ fun_l3_n889(x)
+ else
+ fun_l3_n339(x)
+ end
+end
+
+def fun_l2_n674(x)
+ if (x < 1)
+ fun_l3_n808(x)
+ else
+ fun_l3_n858(x)
+ end
+end
+
+def fun_l2_n675(x)
+ if (x < 1)
+ fun_l3_n895(x)
+ else
+ fun_l3_n180(x)
+ end
+end
+
+def fun_l2_n676(x)
+ if (x < 1)
+ fun_l3_n674(x)
+ else
+ fun_l3_n183(x)
+ end
+end
+
+def fun_l2_n677(x)
+ if (x < 1)
+ fun_l3_n934(x)
+ else
+ fun_l3_n292(x)
+ end
+end
+
+def fun_l2_n678(x)
+ if (x < 1)
+ fun_l3_n302(x)
+ else
+ fun_l3_n511(x)
+ end
+end
+
+def fun_l2_n679(x)
+ if (x < 1)
+ fun_l3_n847(x)
+ else
+ fun_l3_n70(x)
+ end
+end
+
+def fun_l2_n680(x)
+ if (x < 1)
+ fun_l3_n200(x)
+ else
+ fun_l3_n436(x)
+ end
+end
+
+def fun_l2_n681(x)
+ if (x < 1)
+ fun_l3_n44(x)
+ else
+ fun_l3_n145(x)
+ end
+end
+
+def fun_l2_n682(x)
+ if (x < 1)
+ fun_l3_n929(x)
+ else
+ fun_l3_n605(x)
+ end
+end
+
+def fun_l2_n683(x)
+ if (x < 1)
+ fun_l3_n990(x)
+ else
+ fun_l3_n641(x)
+ end
+end
+
+def fun_l2_n684(x)
+ if (x < 1)
+ fun_l3_n679(x)
+ else
+ fun_l3_n976(x)
+ end
+end
+
+def fun_l2_n685(x)
+ if (x < 1)
+ fun_l3_n405(x)
+ else
+ fun_l3_n658(x)
+ end
+end
+
+def fun_l2_n686(x)
+ if (x < 1)
+ fun_l3_n685(x)
+ else
+ fun_l3_n379(x)
+ end
+end
+
+def fun_l2_n687(x)
+ if (x < 1)
+ fun_l3_n279(x)
+ else
+ fun_l3_n415(x)
+ end
+end
+
+def fun_l2_n688(x)
+ if (x < 1)
+ fun_l3_n234(x)
+ else
+ fun_l3_n634(x)
+ end
+end
+
+def fun_l2_n689(x)
+ if (x < 1)
+ fun_l3_n119(x)
+ else
+ fun_l3_n234(x)
+ end
+end
+
+def fun_l2_n690(x)
+ if (x < 1)
+ fun_l3_n213(x)
+ else
+ fun_l3_n102(x)
+ end
+end
+
+def fun_l2_n691(x)
+ if (x < 1)
+ fun_l3_n744(x)
+ else
+ fun_l3_n31(x)
+ end
+end
+
+def fun_l2_n692(x)
+ if (x < 1)
+ fun_l3_n29(x)
+ else
+ fun_l3_n238(x)
+ end
+end
+
+def fun_l2_n693(x)
+ if (x < 1)
+ fun_l3_n323(x)
+ else
+ fun_l3_n388(x)
+ end
+end
+
+def fun_l2_n694(x)
+ if (x < 1)
+ fun_l3_n70(x)
+ else
+ fun_l3_n356(x)
+ end
+end
+
+def fun_l2_n695(x)
+ if (x < 1)
+ fun_l3_n589(x)
+ else
+ fun_l3_n949(x)
+ end
+end
+
+def fun_l2_n696(x)
+ if (x < 1)
+ fun_l3_n328(x)
+ else
+ fun_l3_n472(x)
+ end
+end
+
+def fun_l2_n697(x)
+ if (x < 1)
+ fun_l3_n705(x)
+ else
+ fun_l3_n709(x)
+ end
+end
+
+def fun_l2_n698(x)
+ if (x < 1)
+ fun_l3_n817(x)
+ else
+ fun_l3_n927(x)
+ end
+end
+
+def fun_l2_n699(x)
+ if (x < 1)
+ fun_l3_n916(x)
+ else
+ fun_l3_n66(x)
+ end
+end
+
+def fun_l2_n700(x)
+ if (x < 1)
+ fun_l3_n461(x)
+ else
+ fun_l3_n648(x)
+ end
+end
+
+def fun_l2_n701(x)
+ if (x < 1)
+ fun_l3_n71(x)
+ else
+ fun_l3_n218(x)
+ end
+end
+
+def fun_l2_n702(x)
+ if (x < 1)
+ fun_l3_n490(x)
+ else
+ fun_l3_n706(x)
+ end
+end
+
+def fun_l2_n703(x)
+ if (x < 1)
+ fun_l3_n480(x)
+ else
+ fun_l3_n665(x)
+ end
+end
+
+def fun_l2_n704(x)
+ if (x < 1)
+ fun_l3_n965(x)
+ else
+ fun_l3_n394(x)
+ end
+end
+
+def fun_l2_n705(x)
+ if (x < 1)
+ fun_l3_n65(x)
+ else
+ fun_l3_n761(x)
+ end
+end
+
+def fun_l2_n706(x)
+ if (x < 1)
+ fun_l3_n690(x)
+ else
+ fun_l3_n50(x)
+ end
+end
+
+def fun_l2_n707(x)
+ if (x < 1)
+ fun_l3_n665(x)
+ else
+ fun_l3_n589(x)
+ end
+end
+
+def fun_l2_n708(x)
+ if (x < 1)
+ fun_l3_n331(x)
+ else
+ fun_l3_n299(x)
+ end
+end
+
+def fun_l2_n709(x)
+ if (x < 1)
+ fun_l3_n656(x)
+ else
+ fun_l3_n966(x)
+ end
+end
+
+def fun_l2_n710(x)
+ if (x < 1)
+ fun_l3_n610(x)
+ else
+ fun_l3_n767(x)
+ end
+end
+
+def fun_l2_n711(x)
+ if (x < 1)
+ fun_l3_n281(x)
+ else
+ fun_l3_n942(x)
+ end
+end
+
+def fun_l2_n712(x)
+ if (x < 1)
+ fun_l3_n474(x)
+ else
+ fun_l3_n373(x)
+ end
+end
+
+def fun_l2_n713(x)
+ if (x < 1)
+ fun_l3_n668(x)
+ else
+ fun_l3_n881(x)
+ end
+end
+
+def fun_l2_n714(x)
+ if (x < 1)
+ fun_l3_n112(x)
+ else
+ fun_l3_n914(x)
+ end
+end
+
+def fun_l2_n715(x)
+ if (x < 1)
+ fun_l3_n276(x)
+ else
+ fun_l3_n946(x)
+ end
+end
+
+def fun_l2_n716(x)
+ if (x < 1)
+ fun_l3_n340(x)
+ else
+ fun_l3_n474(x)
+ end
+end
+
+def fun_l2_n717(x)
+ if (x < 1)
+ fun_l3_n179(x)
+ else
+ fun_l3_n740(x)
+ end
+end
+
+def fun_l2_n718(x)
+ if (x < 1)
+ fun_l3_n830(x)
+ else
+ fun_l3_n139(x)
+ end
+end
+
+def fun_l2_n719(x)
+ if (x < 1)
+ fun_l3_n945(x)
+ else
+ fun_l3_n98(x)
+ end
+end
+
+def fun_l2_n720(x)
+ if (x < 1)
+ fun_l3_n912(x)
+ else
+ fun_l3_n457(x)
+ end
+end
+
+def fun_l2_n721(x)
+ if (x < 1)
+ fun_l3_n4(x)
+ else
+ fun_l3_n798(x)
+ end
+end
+
+def fun_l2_n722(x)
+ if (x < 1)
+ fun_l3_n438(x)
+ else
+ fun_l3_n677(x)
+ end
+end
+
+def fun_l2_n723(x)
+ if (x < 1)
+ fun_l3_n447(x)
+ else
+ fun_l3_n418(x)
+ end
+end
+
+def fun_l2_n724(x)
+ if (x < 1)
+ fun_l3_n936(x)
+ else
+ fun_l3_n572(x)
+ end
+end
+
+def fun_l2_n725(x)
+ if (x < 1)
+ fun_l3_n856(x)
+ else
+ fun_l3_n429(x)
+ end
+end
+
+def fun_l2_n726(x)
+ if (x < 1)
+ fun_l3_n747(x)
+ else
+ fun_l3_n823(x)
+ end
+end
+
+def fun_l2_n727(x)
+ if (x < 1)
+ fun_l3_n908(x)
+ else
+ fun_l3_n446(x)
+ end
+end
+
+def fun_l2_n728(x)
+ if (x < 1)
+ fun_l3_n170(x)
+ else
+ fun_l3_n546(x)
+ end
+end
+
+def fun_l2_n729(x)
+ if (x < 1)
+ fun_l3_n45(x)
+ else
+ fun_l3_n76(x)
+ end
+end
+
+def fun_l2_n730(x)
+ if (x < 1)
+ fun_l3_n688(x)
+ else
+ fun_l3_n826(x)
+ end
+end
+
+def fun_l2_n731(x)
+ if (x < 1)
+ fun_l3_n805(x)
+ else
+ fun_l3_n88(x)
+ end
+end
+
+def fun_l2_n732(x)
+ if (x < 1)
+ fun_l3_n191(x)
+ else
+ fun_l3_n395(x)
+ end
+end
+
+def fun_l2_n733(x)
+ if (x < 1)
+ fun_l3_n161(x)
+ else
+ fun_l3_n600(x)
+ end
+end
+
+def fun_l2_n734(x)
+ if (x < 1)
+ fun_l3_n586(x)
+ else
+ fun_l3_n770(x)
+ end
+end
+
+def fun_l2_n735(x)
+ if (x < 1)
+ fun_l3_n139(x)
+ else
+ fun_l3_n108(x)
+ end
+end
+
+def fun_l2_n736(x)
+ if (x < 1)
+ fun_l3_n719(x)
+ else
+ fun_l3_n210(x)
+ end
+end
+
+def fun_l2_n737(x)
+ if (x < 1)
+ fun_l3_n327(x)
+ else
+ fun_l3_n138(x)
+ end
+end
+
+def fun_l2_n738(x)
+ if (x < 1)
+ fun_l3_n755(x)
+ else
+ fun_l3_n785(x)
+ end
+end
+
+def fun_l2_n739(x)
+ if (x < 1)
+ fun_l3_n499(x)
+ else
+ fun_l3_n998(x)
+ end
+end
+
+def fun_l2_n740(x)
+ if (x < 1)
+ fun_l3_n303(x)
+ else
+ fun_l3_n646(x)
+ end
+end
+
+def fun_l2_n741(x)
+ if (x < 1)
+ fun_l3_n385(x)
+ else
+ fun_l3_n202(x)
+ end
+end
+
+def fun_l2_n742(x)
+ if (x < 1)
+ fun_l3_n290(x)
+ else
+ fun_l3_n617(x)
+ end
+end
+
+def fun_l2_n743(x)
+ if (x < 1)
+ fun_l3_n735(x)
+ else
+ fun_l3_n322(x)
+ end
+end
+
+def fun_l2_n744(x)
+ if (x < 1)
+ fun_l3_n541(x)
+ else
+ fun_l3_n841(x)
+ end
+end
+
+def fun_l2_n745(x)
+ if (x < 1)
+ fun_l3_n124(x)
+ else
+ fun_l3_n927(x)
+ end
+end
+
+def fun_l2_n746(x)
+ if (x < 1)
+ fun_l3_n909(x)
+ else
+ fun_l3_n981(x)
+ end
+end
+
+def fun_l2_n747(x)
+ if (x < 1)
+ fun_l3_n535(x)
+ else
+ fun_l3_n154(x)
+ end
+end
+
+def fun_l2_n748(x)
+ if (x < 1)
+ fun_l3_n804(x)
+ else
+ fun_l3_n837(x)
+ end
+end
+
+def fun_l2_n749(x)
+ if (x < 1)
+ fun_l3_n787(x)
+ else
+ fun_l3_n890(x)
+ end
+end
+
+def fun_l2_n750(x)
+ if (x < 1)
+ fun_l3_n273(x)
+ else
+ fun_l3_n539(x)
+ end
+end
+
+def fun_l2_n751(x)
+ if (x < 1)
+ fun_l3_n397(x)
+ else
+ fun_l3_n630(x)
+ end
+end
+
+def fun_l2_n752(x)
+ if (x < 1)
+ fun_l3_n757(x)
+ else
+ fun_l3_n294(x)
+ end
+end
+
+def fun_l2_n753(x)
+ if (x < 1)
+ fun_l3_n731(x)
+ else
+ fun_l3_n121(x)
+ end
+end
+
+def fun_l2_n754(x)
+ if (x < 1)
+ fun_l3_n391(x)
+ else
+ fun_l3_n640(x)
+ end
+end
+
+def fun_l2_n755(x)
+ if (x < 1)
+ fun_l3_n441(x)
+ else
+ fun_l3_n731(x)
+ end
+end
+
+def fun_l2_n756(x)
+ if (x < 1)
+ fun_l3_n947(x)
+ else
+ fun_l3_n175(x)
+ end
+end
+
+def fun_l2_n757(x)
+ if (x < 1)
+ fun_l3_n294(x)
+ else
+ fun_l3_n732(x)
+ end
+end
+
+def fun_l2_n758(x)
+ if (x < 1)
+ fun_l3_n862(x)
+ else
+ fun_l3_n490(x)
+ end
+end
+
+def fun_l2_n759(x)
+ if (x < 1)
+ fun_l3_n959(x)
+ else
+ fun_l3_n58(x)
+ end
+end
+
+def fun_l2_n760(x)
+ if (x < 1)
+ fun_l3_n245(x)
+ else
+ fun_l3_n201(x)
+ end
+end
+
+def fun_l2_n761(x)
+ if (x < 1)
+ fun_l3_n174(x)
+ else
+ fun_l3_n763(x)
+ end
+end
+
+def fun_l2_n762(x)
+ if (x < 1)
+ fun_l3_n276(x)
+ else
+ fun_l3_n624(x)
+ end
+end
+
+def fun_l2_n763(x)
+ if (x < 1)
+ fun_l3_n130(x)
+ else
+ fun_l3_n452(x)
+ end
+end
+
+def fun_l2_n764(x)
+ if (x < 1)
+ fun_l3_n476(x)
+ else
+ fun_l3_n519(x)
+ end
+end
+
+def fun_l2_n765(x)
+ if (x < 1)
+ fun_l3_n911(x)
+ else
+ fun_l3_n28(x)
+ end
+end
+
+def fun_l2_n766(x)
+ if (x < 1)
+ fun_l3_n290(x)
+ else
+ fun_l3_n528(x)
+ end
+end
+
+def fun_l2_n767(x)
+ if (x < 1)
+ fun_l3_n89(x)
+ else
+ fun_l3_n284(x)
+ end
+end
+
+def fun_l2_n768(x)
+ if (x < 1)
+ fun_l3_n307(x)
+ else
+ fun_l3_n832(x)
+ end
+end
+
+def fun_l2_n769(x)
+ if (x < 1)
+ fun_l3_n204(x)
+ else
+ fun_l3_n358(x)
+ end
+end
+
+def fun_l2_n770(x)
+ if (x < 1)
+ fun_l3_n380(x)
+ else
+ fun_l3_n938(x)
+ end
+end
+
+def fun_l2_n771(x)
+ if (x < 1)
+ fun_l3_n245(x)
+ else
+ fun_l3_n156(x)
+ end
+end
+
+def fun_l2_n772(x)
+ if (x < 1)
+ fun_l3_n77(x)
+ else
+ fun_l3_n842(x)
+ end
+end
+
+def fun_l2_n773(x)
+ if (x < 1)
+ fun_l3_n972(x)
+ else
+ fun_l3_n143(x)
+ end
+end
+
+def fun_l2_n774(x)
+ if (x < 1)
+ fun_l3_n308(x)
+ else
+ fun_l3_n713(x)
+ end
+end
+
+def fun_l2_n775(x)
+ if (x < 1)
+ fun_l3_n714(x)
+ else
+ fun_l3_n329(x)
+ end
+end
+
+def fun_l2_n776(x)
+ if (x < 1)
+ fun_l3_n805(x)
+ else
+ fun_l3_n141(x)
+ end
+end
+
+def fun_l2_n777(x)
+ if (x < 1)
+ fun_l3_n155(x)
+ else
+ fun_l3_n873(x)
+ end
+end
+
+def fun_l2_n778(x)
+ if (x < 1)
+ fun_l3_n551(x)
+ else
+ fun_l3_n293(x)
+ end
+end
+
+def fun_l2_n779(x)
+ if (x < 1)
+ fun_l3_n857(x)
+ else
+ fun_l3_n551(x)
+ end
+end
+
+def fun_l2_n780(x)
+ if (x < 1)
+ fun_l3_n30(x)
+ else
+ fun_l3_n230(x)
+ end
+end
+
+def fun_l2_n781(x)
+ if (x < 1)
+ fun_l3_n958(x)
+ else
+ fun_l3_n463(x)
+ end
+end
+
+def fun_l2_n782(x)
+ if (x < 1)
+ fun_l3_n89(x)
+ else
+ fun_l3_n514(x)
+ end
+end
+
+def fun_l2_n783(x)
+ if (x < 1)
+ fun_l3_n290(x)
+ else
+ fun_l3_n394(x)
+ end
+end
+
+def fun_l2_n784(x)
+ if (x < 1)
+ fun_l3_n582(x)
+ else
+ fun_l3_n927(x)
+ end
+end
+
+def fun_l2_n785(x)
+ if (x < 1)
+ fun_l3_n739(x)
+ else
+ fun_l3_n822(x)
+ end
+end
+
+def fun_l2_n786(x)
+ if (x < 1)
+ fun_l3_n1(x)
+ else
+ fun_l3_n162(x)
+ end
+end
+
+def fun_l2_n787(x)
+ if (x < 1)
+ fun_l3_n88(x)
+ else
+ fun_l3_n800(x)
+ end
+end
+
+def fun_l2_n788(x)
+ if (x < 1)
+ fun_l3_n592(x)
+ else
+ fun_l3_n235(x)
+ end
+end
+
+def fun_l2_n789(x)
+ if (x < 1)
+ fun_l3_n337(x)
+ else
+ fun_l3_n204(x)
+ end
+end
+
+def fun_l2_n790(x)
+ if (x < 1)
+ fun_l3_n481(x)
+ else
+ fun_l3_n361(x)
+ end
+end
+
+def fun_l2_n791(x)
+ if (x < 1)
+ fun_l3_n441(x)
+ else
+ fun_l3_n883(x)
+ end
+end
+
+def fun_l2_n792(x)
+ if (x < 1)
+ fun_l3_n424(x)
+ else
+ fun_l3_n387(x)
+ end
+end
+
+def fun_l2_n793(x)
+ if (x < 1)
+ fun_l3_n961(x)
+ else
+ fun_l3_n710(x)
+ end
+end
+
+def fun_l2_n794(x)
+ if (x < 1)
+ fun_l3_n653(x)
+ else
+ fun_l3_n869(x)
+ end
+end
+
+def fun_l2_n795(x)
+ if (x < 1)
+ fun_l3_n466(x)
+ else
+ fun_l3_n195(x)
+ end
+end
+
+def fun_l2_n796(x)
+ if (x < 1)
+ fun_l3_n30(x)
+ else
+ fun_l3_n137(x)
+ end
+end
+
+def fun_l2_n797(x)
+ if (x < 1)
+ fun_l3_n974(x)
+ else
+ fun_l3_n911(x)
+ end
+end
+
+def fun_l2_n798(x)
+ if (x < 1)
+ fun_l3_n500(x)
+ else
+ fun_l3_n607(x)
+ end
+end
+
+def fun_l2_n799(x)
+ if (x < 1)
+ fun_l3_n964(x)
+ else
+ fun_l3_n425(x)
+ end
+end
+
+def fun_l2_n800(x)
+ if (x < 1)
+ fun_l3_n381(x)
+ else
+ fun_l3_n618(x)
+ end
+end
+
+def fun_l2_n801(x)
+ if (x < 1)
+ fun_l3_n803(x)
+ else
+ fun_l3_n697(x)
+ end
+end
+
+def fun_l2_n802(x)
+ if (x < 1)
+ fun_l3_n372(x)
+ else
+ fun_l3_n331(x)
+ end
+end
+
+def fun_l2_n803(x)
+ if (x < 1)
+ fun_l3_n450(x)
+ else
+ fun_l3_n707(x)
+ end
+end
+
+def fun_l2_n804(x)
+ if (x < 1)
+ fun_l3_n760(x)
+ else
+ fun_l3_n800(x)
+ end
+end
+
+def fun_l2_n805(x)
+ if (x < 1)
+ fun_l3_n695(x)
+ else
+ fun_l3_n426(x)
+ end
+end
+
+def fun_l2_n806(x)
+ if (x < 1)
+ fun_l3_n312(x)
+ else
+ fun_l3_n517(x)
+ end
+end
+
+def fun_l2_n807(x)
+ if (x < 1)
+ fun_l3_n794(x)
+ else
+ fun_l3_n37(x)
+ end
+end
+
+def fun_l2_n808(x)
+ if (x < 1)
+ fun_l3_n591(x)
+ else
+ fun_l3_n933(x)
+ end
+end
+
+def fun_l2_n809(x)
+ if (x < 1)
+ fun_l3_n974(x)
+ else
+ fun_l3_n69(x)
+ end
+end
+
+def fun_l2_n810(x)
+ if (x < 1)
+ fun_l3_n263(x)
+ else
+ fun_l3_n628(x)
+ end
+end
+
+def fun_l2_n811(x)
+ if (x < 1)
+ fun_l3_n647(x)
+ else
+ fun_l3_n133(x)
+ end
+end
+
+def fun_l2_n812(x)
+ if (x < 1)
+ fun_l3_n396(x)
+ else
+ fun_l3_n872(x)
+ end
+end
+
+def fun_l2_n813(x)
+ if (x < 1)
+ fun_l3_n716(x)
+ else
+ fun_l3_n254(x)
+ end
+end
+
+def fun_l2_n814(x)
+ if (x < 1)
+ fun_l3_n181(x)
+ else
+ fun_l3_n786(x)
+ end
+end
+
+def fun_l2_n815(x)
+ if (x < 1)
+ fun_l3_n163(x)
+ else
+ fun_l3_n175(x)
+ end
+end
+
+def fun_l2_n816(x)
+ if (x < 1)
+ fun_l3_n835(x)
+ else
+ fun_l3_n713(x)
+ end
+end
+
+def fun_l2_n817(x)
+ if (x < 1)
+ fun_l3_n54(x)
+ else
+ fun_l3_n280(x)
+ end
+end
+
+def fun_l2_n818(x)
+ if (x < 1)
+ fun_l3_n261(x)
+ else
+ fun_l3_n958(x)
+ end
+end
+
+def fun_l2_n819(x)
+ if (x < 1)
+ fun_l3_n821(x)
+ else
+ fun_l3_n418(x)
+ end
+end
+
+def fun_l2_n820(x)
+ if (x < 1)
+ fun_l3_n541(x)
+ else
+ fun_l3_n547(x)
+ end
+end
+
+def fun_l2_n821(x)
+ if (x < 1)
+ fun_l3_n726(x)
+ else
+ fun_l3_n386(x)
+ end
+end
+
+def fun_l2_n822(x)
+ if (x < 1)
+ fun_l3_n369(x)
+ else
+ fun_l3_n781(x)
+ end
+end
+
+def fun_l2_n823(x)
+ if (x < 1)
+ fun_l3_n392(x)
+ else
+ fun_l3_n357(x)
+ end
+end
+
+def fun_l2_n824(x)
+ if (x < 1)
+ fun_l3_n167(x)
+ else
+ fun_l3_n764(x)
+ end
+end
+
+def fun_l2_n825(x)
+ if (x < 1)
+ fun_l3_n339(x)
+ else
+ fun_l3_n853(x)
+ end
+end
+
+def fun_l2_n826(x)
+ if (x < 1)
+ fun_l3_n613(x)
+ else
+ fun_l3_n767(x)
+ end
+end
+
+def fun_l2_n827(x)
+ if (x < 1)
+ fun_l3_n31(x)
+ else
+ fun_l3_n35(x)
+ end
+end
+
+def fun_l2_n828(x)
+ if (x < 1)
+ fun_l3_n838(x)
+ else
+ fun_l3_n939(x)
+ end
+end
+
+def fun_l2_n829(x)
+ if (x < 1)
+ fun_l3_n344(x)
+ else
+ fun_l3_n568(x)
+ end
+end
+
+def fun_l2_n830(x)
+ if (x < 1)
+ fun_l3_n892(x)
+ else
+ fun_l3_n564(x)
+ end
+end
+
+def fun_l2_n831(x)
+ if (x < 1)
+ fun_l3_n520(x)
+ else
+ fun_l3_n897(x)
+ end
+end
+
+def fun_l2_n832(x)
+ if (x < 1)
+ fun_l3_n986(x)
+ else
+ fun_l3_n523(x)
+ end
+end
+
+def fun_l2_n833(x)
+ if (x < 1)
+ fun_l3_n649(x)
+ else
+ fun_l3_n776(x)
+ end
+end
+
+def fun_l2_n834(x)
+ if (x < 1)
+ fun_l3_n613(x)
+ else
+ fun_l3_n170(x)
+ end
+end
+
+def fun_l2_n835(x)
+ if (x < 1)
+ fun_l3_n657(x)
+ else
+ fun_l3_n790(x)
+ end
+end
+
+def fun_l2_n836(x)
+ if (x < 1)
+ fun_l3_n976(x)
+ else
+ fun_l3_n785(x)
+ end
+end
+
+def fun_l2_n837(x)
+ if (x < 1)
+ fun_l3_n746(x)
+ else
+ fun_l3_n448(x)
+ end
+end
+
+def fun_l2_n838(x)
+ if (x < 1)
+ fun_l3_n911(x)
+ else
+ fun_l3_n978(x)
+ end
+end
+
+def fun_l2_n839(x)
+ if (x < 1)
+ fun_l3_n917(x)
+ else
+ fun_l3_n484(x)
+ end
+end
+
+def fun_l2_n840(x)
+ if (x < 1)
+ fun_l3_n930(x)
+ else
+ fun_l3_n617(x)
+ end
+end
+
+def fun_l2_n841(x)
+ if (x < 1)
+ fun_l3_n753(x)
+ else
+ fun_l3_n587(x)
+ end
+end
+
+def fun_l2_n842(x)
+ if (x < 1)
+ fun_l3_n21(x)
+ else
+ fun_l3_n256(x)
+ end
+end
+
+def fun_l2_n843(x)
+ if (x < 1)
+ fun_l3_n697(x)
+ else
+ fun_l3_n828(x)
+ end
+end
+
+def fun_l2_n844(x)
+ if (x < 1)
+ fun_l3_n59(x)
+ else
+ fun_l3_n855(x)
+ end
+end
+
+def fun_l2_n845(x)
+ if (x < 1)
+ fun_l3_n637(x)
+ else
+ fun_l3_n667(x)
+ end
+end
+
+def fun_l2_n846(x)
+ if (x < 1)
+ fun_l3_n229(x)
+ else
+ fun_l3_n379(x)
+ end
+end
+
+def fun_l2_n847(x)
+ if (x < 1)
+ fun_l3_n908(x)
+ else
+ fun_l3_n53(x)
+ end
+end
+
+def fun_l2_n848(x)
+ if (x < 1)
+ fun_l3_n72(x)
+ else
+ fun_l3_n882(x)
+ end
+end
+
+def fun_l2_n849(x)
+ if (x < 1)
+ fun_l3_n890(x)
+ else
+ fun_l3_n153(x)
+ end
+end
+
+def fun_l2_n850(x)
+ if (x < 1)
+ fun_l3_n301(x)
+ else
+ fun_l3_n404(x)
+ end
+end
+
+def fun_l2_n851(x)
+ if (x < 1)
+ fun_l3_n451(x)
+ else
+ fun_l3_n365(x)
+ end
+end
+
+def fun_l2_n852(x)
+ if (x < 1)
+ fun_l3_n591(x)
+ else
+ fun_l3_n974(x)
+ end
+end
+
+def fun_l2_n853(x)
+ if (x < 1)
+ fun_l3_n534(x)
+ else
+ fun_l3_n649(x)
+ end
+end
+
+def fun_l2_n854(x)
+ if (x < 1)
+ fun_l3_n438(x)
+ else
+ fun_l3_n853(x)
+ end
+end
+
+def fun_l2_n855(x)
+ if (x < 1)
+ fun_l3_n181(x)
+ else
+ fun_l3_n888(x)
+ end
+end
+
+def fun_l2_n856(x)
+ if (x < 1)
+ fun_l3_n856(x)
+ else
+ fun_l3_n139(x)
+ end
+end
+
+def fun_l2_n857(x)
+ if (x < 1)
+ fun_l3_n664(x)
+ else
+ fun_l3_n659(x)
+ end
+end
+
+def fun_l2_n858(x)
+ if (x < 1)
+ fun_l3_n838(x)
+ else
+ fun_l3_n157(x)
+ end
+end
+
+def fun_l2_n859(x)
+ if (x < 1)
+ fun_l3_n542(x)
+ else
+ fun_l3_n512(x)
+ end
+end
+
+def fun_l2_n860(x)
+ if (x < 1)
+ fun_l3_n213(x)
+ else
+ fun_l3_n954(x)
+ end
+end
+
+def fun_l2_n861(x)
+ if (x < 1)
+ fun_l3_n580(x)
+ else
+ fun_l3_n525(x)
+ end
+end
+
+def fun_l2_n862(x)
+ if (x < 1)
+ fun_l3_n649(x)
+ else
+ fun_l3_n376(x)
+ end
+end
+
+def fun_l2_n863(x)
+ if (x < 1)
+ fun_l3_n846(x)
+ else
+ fun_l3_n643(x)
+ end
+end
+
+def fun_l2_n864(x)
+ if (x < 1)
+ fun_l3_n899(x)
+ else
+ fun_l3_n667(x)
+ end
+end
+
+def fun_l2_n865(x)
+ if (x < 1)
+ fun_l3_n326(x)
+ else
+ fun_l3_n664(x)
+ end
+end
+
+def fun_l2_n866(x)
+ if (x < 1)
+ fun_l3_n155(x)
+ else
+ fun_l3_n369(x)
+ end
+end
+
+def fun_l2_n867(x)
+ if (x < 1)
+ fun_l3_n583(x)
+ else
+ fun_l3_n12(x)
+ end
+end
+
+def fun_l2_n868(x)
+ if (x < 1)
+ fun_l3_n637(x)
+ else
+ fun_l3_n711(x)
+ end
+end
+
+def fun_l2_n869(x)
+ if (x < 1)
+ fun_l3_n120(x)
+ else
+ fun_l3_n449(x)
+ end
+end
+
+def fun_l2_n870(x)
+ if (x < 1)
+ fun_l3_n459(x)
+ else
+ fun_l3_n83(x)
+ end
+end
+
+def fun_l2_n871(x)
+ if (x < 1)
+ fun_l3_n298(x)
+ else
+ fun_l3_n6(x)
+ end
+end
+
+def fun_l2_n872(x)
+ if (x < 1)
+ fun_l3_n640(x)
+ else
+ fun_l3_n319(x)
+ end
+end
+
+def fun_l2_n873(x)
+ if (x < 1)
+ fun_l3_n777(x)
+ else
+ fun_l3_n903(x)
+ end
+end
+
+def fun_l2_n874(x)
+ if (x < 1)
+ fun_l3_n16(x)
+ else
+ fun_l3_n50(x)
+ end
+end
+
+def fun_l2_n875(x)
+ if (x < 1)
+ fun_l3_n732(x)
+ else
+ fun_l3_n711(x)
+ end
+end
+
+def fun_l2_n876(x)
+ if (x < 1)
+ fun_l3_n958(x)
+ else
+ fun_l3_n949(x)
+ end
+end
+
+def fun_l2_n877(x)
+ if (x < 1)
+ fun_l3_n992(x)
+ else
+ fun_l3_n592(x)
+ end
+end
+
+def fun_l2_n878(x)
+ if (x < 1)
+ fun_l3_n283(x)
+ else
+ fun_l3_n178(x)
+ end
+end
+
+def fun_l2_n879(x)
+ if (x < 1)
+ fun_l3_n179(x)
+ else
+ fun_l3_n963(x)
+ end
+end
+
+def fun_l2_n880(x)
+ if (x < 1)
+ fun_l3_n345(x)
+ else
+ fun_l3_n585(x)
+ end
+end
+
+def fun_l2_n881(x)
+ if (x < 1)
+ fun_l3_n859(x)
+ else
+ fun_l3_n204(x)
+ end
+end
+
+def fun_l2_n882(x)
+ if (x < 1)
+ fun_l3_n718(x)
+ else
+ fun_l3_n354(x)
+ end
+end
+
+def fun_l2_n883(x)
+ if (x < 1)
+ fun_l3_n58(x)
+ else
+ fun_l3_n34(x)
+ end
+end
+
+def fun_l2_n884(x)
+ if (x < 1)
+ fun_l3_n442(x)
+ else
+ fun_l3_n853(x)
+ end
+end
+
+def fun_l2_n885(x)
+ if (x < 1)
+ fun_l3_n37(x)
+ else
+ fun_l3_n665(x)
+ end
+end
+
+def fun_l2_n886(x)
+ if (x < 1)
+ fun_l3_n468(x)
+ else
+ fun_l3_n283(x)
+ end
+end
+
+def fun_l2_n887(x)
+ if (x < 1)
+ fun_l3_n674(x)
+ else
+ fun_l3_n940(x)
+ end
+end
+
+def fun_l2_n888(x)
+ if (x < 1)
+ fun_l3_n556(x)
+ else
+ fun_l3_n191(x)
+ end
+end
+
+def fun_l2_n889(x)
+ if (x < 1)
+ fun_l3_n451(x)
+ else
+ fun_l3_n33(x)
+ end
+end
+
+def fun_l2_n890(x)
+ if (x < 1)
+ fun_l3_n724(x)
+ else
+ fun_l3_n355(x)
+ end
+end
+
+def fun_l2_n891(x)
+ if (x < 1)
+ fun_l3_n811(x)
+ else
+ fun_l3_n969(x)
+ end
+end
+
+def fun_l2_n892(x)
+ if (x < 1)
+ fun_l3_n122(x)
+ else
+ fun_l3_n956(x)
+ end
+end
+
+def fun_l2_n893(x)
+ if (x < 1)
+ fun_l3_n416(x)
+ else
+ fun_l3_n373(x)
+ end
+end
+
+def fun_l2_n894(x)
+ if (x < 1)
+ fun_l3_n990(x)
+ else
+ fun_l3_n148(x)
+ end
+end
+
+def fun_l2_n895(x)
+ if (x < 1)
+ fun_l3_n52(x)
+ else
+ fun_l3_n605(x)
+ end
+end
+
+def fun_l2_n896(x)
+ if (x < 1)
+ fun_l3_n523(x)
+ else
+ fun_l3_n929(x)
+ end
+end
+
+def fun_l2_n897(x)
+ if (x < 1)
+ fun_l3_n631(x)
+ else
+ fun_l3_n167(x)
+ end
+end
+
+def fun_l2_n898(x)
+ if (x < 1)
+ fun_l3_n366(x)
+ else
+ fun_l3_n666(x)
+ end
+end
+
+def fun_l2_n899(x)
+ if (x < 1)
+ fun_l3_n758(x)
+ else
+ fun_l3_n441(x)
+ end
+end
+
+def fun_l2_n900(x)
+ if (x < 1)
+ fun_l3_n561(x)
+ else
+ fun_l3_n766(x)
+ end
+end
+
+def fun_l2_n901(x)
+ if (x < 1)
+ fun_l3_n323(x)
+ else
+ fun_l3_n348(x)
+ end
+end
+
+def fun_l2_n902(x)
+ if (x < 1)
+ fun_l3_n455(x)
+ else
+ fun_l3_n78(x)
+ end
+end
+
+def fun_l2_n903(x)
+ if (x < 1)
+ fun_l3_n373(x)
+ else
+ fun_l3_n646(x)
+ end
+end
+
+def fun_l2_n904(x)
+ if (x < 1)
+ fun_l3_n595(x)
+ else
+ fun_l3_n742(x)
+ end
+end
+
+def fun_l2_n905(x)
+ if (x < 1)
+ fun_l3_n102(x)
+ else
+ fun_l3_n140(x)
+ end
+end
+
+def fun_l2_n906(x)
+ if (x < 1)
+ fun_l3_n458(x)
+ else
+ fun_l3_n528(x)
+ end
+end
+
+def fun_l2_n907(x)
+ if (x < 1)
+ fun_l3_n970(x)
+ else
+ fun_l3_n841(x)
+ end
+end
+
+def fun_l2_n908(x)
+ if (x < 1)
+ fun_l3_n97(x)
+ else
+ fun_l3_n250(x)
+ end
+end
+
+def fun_l2_n909(x)
+ if (x < 1)
+ fun_l3_n381(x)
+ else
+ fun_l3_n44(x)
+ end
+end
+
+def fun_l2_n910(x)
+ if (x < 1)
+ fun_l3_n812(x)
+ else
+ fun_l3_n225(x)
+ end
+end
+
+def fun_l2_n911(x)
+ if (x < 1)
+ fun_l3_n849(x)
+ else
+ fun_l3_n683(x)
+ end
+end
+
+def fun_l2_n912(x)
+ if (x < 1)
+ fun_l3_n958(x)
+ else
+ fun_l3_n590(x)
+ end
+end
+
+def fun_l2_n913(x)
+ if (x < 1)
+ fun_l3_n858(x)
+ else
+ fun_l3_n140(x)
+ end
+end
+
+def fun_l2_n914(x)
+ if (x < 1)
+ fun_l3_n997(x)
+ else
+ fun_l3_n959(x)
+ end
+end
+
+def fun_l2_n915(x)
+ if (x < 1)
+ fun_l3_n184(x)
+ else
+ fun_l3_n910(x)
+ end
+end
+
+def fun_l2_n916(x)
+ if (x < 1)
+ fun_l3_n369(x)
+ else
+ fun_l3_n180(x)
+ end
+end
+
+def fun_l2_n917(x)
+ if (x < 1)
+ fun_l3_n537(x)
+ else
+ fun_l3_n927(x)
+ end
+end
+
+def fun_l2_n918(x)
+ if (x < 1)
+ fun_l3_n739(x)
+ else
+ fun_l3_n222(x)
+ end
+end
+
+def fun_l2_n919(x)
+ if (x < 1)
+ fun_l3_n640(x)
+ else
+ fun_l3_n406(x)
+ end
+end
+
+def fun_l2_n920(x)
+ if (x < 1)
+ fun_l3_n371(x)
+ else
+ fun_l3_n976(x)
+ end
+end
+
+def fun_l2_n921(x)
+ if (x < 1)
+ fun_l3_n262(x)
+ else
+ fun_l3_n532(x)
+ end
+end
+
+def fun_l2_n922(x)
+ if (x < 1)
+ fun_l3_n772(x)
+ else
+ fun_l3_n368(x)
+ end
+end
+
+def fun_l2_n923(x)
+ if (x < 1)
+ fun_l3_n935(x)
+ else
+ fun_l3_n109(x)
+ end
+end
+
+def fun_l2_n924(x)
+ if (x < 1)
+ fun_l3_n982(x)
+ else
+ fun_l3_n643(x)
+ end
+end
+
+def fun_l2_n925(x)
+ if (x < 1)
+ fun_l3_n849(x)
+ else
+ fun_l3_n266(x)
+ end
+end
+
+def fun_l2_n926(x)
+ if (x < 1)
+ fun_l3_n977(x)
+ else
+ fun_l3_n803(x)
+ end
+end
+
+def fun_l2_n927(x)
+ if (x < 1)
+ fun_l3_n706(x)
+ else
+ fun_l3_n441(x)
+ end
+end
+
+def fun_l2_n928(x)
+ if (x < 1)
+ fun_l3_n781(x)
+ else
+ fun_l3_n374(x)
+ end
+end
+
+def fun_l2_n929(x)
+ if (x < 1)
+ fun_l3_n122(x)
+ else
+ fun_l3_n851(x)
+ end
+end
+
+def fun_l2_n930(x)
+ if (x < 1)
+ fun_l3_n821(x)
+ else
+ fun_l3_n904(x)
+ end
+end
+
+def fun_l2_n931(x)
+ if (x < 1)
+ fun_l3_n379(x)
+ else
+ fun_l3_n211(x)
+ end
+end
+
+def fun_l2_n932(x)
+ if (x < 1)
+ fun_l3_n572(x)
+ else
+ fun_l3_n169(x)
+ end
+end
+
+def fun_l2_n933(x)
+ if (x < 1)
+ fun_l3_n620(x)
+ else
+ fun_l3_n703(x)
+ end
+end
+
+def fun_l2_n934(x)
+ if (x < 1)
+ fun_l3_n238(x)
+ else
+ fun_l3_n220(x)
+ end
+end
+
+def fun_l2_n935(x)
+ if (x < 1)
+ fun_l3_n652(x)
+ else
+ fun_l3_n822(x)
+ end
+end
+
+def fun_l2_n936(x)
+ if (x < 1)
+ fun_l3_n818(x)
+ else
+ fun_l3_n384(x)
+ end
+end
+
+def fun_l2_n937(x)
+ if (x < 1)
+ fun_l3_n560(x)
+ else
+ fun_l3_n875(x)
+ end
+end
+
+def fun_l2_n938(x)
+ if (x < 1)
+ fun_l3_n417(x)
+ else
+ fun_l3_n900(x)
+ end
+end
+
+def fun_l2_n939(x)
+ if (x < 1)
+ fun_l3_n740(x)
+ else
+ fun_l3_n431(x)
+ end
+end
+
+def fun_l2_n940(x)
+ if (x < 1)
+ fun_l3_n1(x)
+ else
+ fun_l3_n147(x)
+ end
+end
+
+def fun_l2_n941(x)
+ if (x < 1)
+ fun_l3_n64(x)
+ else
+ fun_l3_n317(x)
+ end
+end
+
+def fun_l2_n942(x)
+ if (x < 1)
+ fun_l3_n347(x)
+ else
+ fun_l3_n778(x)
+ end
+end
+
+def fun_l2_n943(x)
+ if (x < 1)
+ fun_l3_n819(x)
+ else
+ fun_l3_n446(x)
+ end
+end
+
+def fun_l2_n944(x)
+ if (x < 1)
+ fun_l3_n492(x)
+ else
+ fun_l3_n381(x)
+ end
+end
+
+def fun_l2_n945(x)
+ if (x < 1)
+ fun_l3_n594(x)
+ else
+ fun_l3_n413(x)
+ end
+end
+
+def fun_l2_n946(x)
+ if (x < 1)
+ fun_l3_n580(x)
+ else
+ fun_l3_n838(x)
+ end
+end
+
+def fun_l2_n947(x)
+ if (x < 1)
+ fun_l3_n880(x)
+ else
+ fun_l3_n768(x)
+ end
+end
+
+def fun_l2_n948(x)
+ if (x < 1)
+ fun_l3_n9(x)
+ else
+ fun_l3_n888(x)
+ end
+end
+
+def fun_l2_n949(x)
+ if (x < 1)
+ fun_l3_n365(x)
+ else
+ fun_l3_n322(x)
+ end
+end
+
+def fun_l2_n950(x)
+ if (x < 1)
+ fun_l3_n283(x)
+ else
+ fun_l3_n921(x)
+ end
+end
+
+def fun_l2_n951(x)
+ if (x < 1)
+ fun_l3_n740(x)
+ else
+ fun_l3_n336(x)
+ end
+end
+
+def fun_l2_n952(x)
+ if (x < 1)
+ fun_l3_n827(x)
+ else
+ fun_l3_n683(x)
+ end
+end
+
+def fun_l2_n953(x)
+ if (x < 1)
+ fun_l3_n289(x)
+ else
+ fun_l3_n915(x)
+ end
+end
+
+def fun_l2_n954(x)
+ if (x < 1)
+ fun_l3_n234(x)
+ else
+ fun_l3_n198(x)
+ end
+end
+
+def fun_l2_n955(x)
+ if (x < 1)
+ fun_l3_n364(x)
+ else
+ fun_l3_n152(x)
+ end
+end
+
+def fun_l2_n956(x)
+ if (x < 1)
+ fun_l3_n370(x)
+ else
+ fun_l3_n786(x)
+ end
+end
+
+def fun_l2_n957(x)
+ if (x < 1)
+ fun_l3_n672(x)
+ else
+ fun_l3_n375(x)
+ end
+end
+
+def fun_l2_n958(x)
+ if (x < 1)
+ fun_l3_n423(x)
+ else
+ fun_l3_n448(x)
+ end
+end
+
+def fun_l2_n959(x)
+ if (x < 1)
+ fun_l3_n887(x)
+ else
+ fun_l3_n33(x)
+ end
+end
+
+def fun_l2_n960(x)
+ if (x < 1)
+ fun_l3_n280(x)
+ else
+ fun_l3_n334(x)
+ end
+end
+
+def fun_l2_n961(x)
+ if (x < 1)
+ fun_l3_n535(x)
+ else
+ fun_l3_n524(x)
+ end
+end
+
+def fun_l2_n962(x)
+ if (x < 1)
+ fun_l3_n689(x)
+ else
+ fun_l3_n426(x)
+ end
+end
+
+def fun_l2_n963(x)
+ if (x < 1)
+ fun_l3_n235(x)
+ else
+ fun_l3_n286(x)
+ end
+end
+
+def fun_l2_n964(x)
+ if (x < 1)
+ fun_l3_n116(x)
+ else
+ fun_l3_n308(x)
+ end
+end
+
+def fun_l2_n965(x)
+ if (x < 1)
+ fun_l3_n174(x)
+ else
+ fun_l3_n823(x)
+ end
+end
+
+def fun_l2_n966(x)
+ if (x < 1)
+ fun_l3_n792(x)
+ else
+ fun_l3_n29(x)
+ end
+end
+
+def fun_l2_n967(x)
+ if (x < 1)
+ fun_l3_n755(x)
+ else
+ fun_l3_n689(x)
+ end
+end
+
+def fun_l2_n968(x)
+ if (x < 1)
+ fun_l3_n167(x)
+ else
+ fun_l3_n287(x)
+ end
+end
+
+def fun_l2_n969(x)
+ if (x < 1)
+ fun_l3_n836(x)
+ else
+ fun_l3_n892(x)
+ end
+end
+
+def fun_l2_n970(x)
+ if (x < 1)
+ fun_l3_n201(x)
+ else
+ fun_l3_n677(x)
+ end
+end
+
+def fun_l2_n971(x)
+ if (x < 1)
+ fun_l3_n990(x)
+ else
+ fun_l3_n251(x)
+ end
+end
+
+def fun_l2_n972(x)
+ if (x < 1)
+ fun_l3_n500(x)
+ else
+ fun_l3_n686(x)
+ end
+end
+
+def fun_l2_n973(x)
+ if (x < 1)
+ fun_l3_n969(x)
+ else
+ fun_l3_n819(x)
+ end
+end
+
+def fun_l2_n974(x)
+ if (x < 1)
+ fun_l3_n87(x)
+ else
+ fun_l3_n120(x)
+ end
+end
+
+def fun_l2_n975(x)
+ if (x < 1)
+ fun_l3_n701(x)
+ else
+ fun_l3_n569(x)
+ end
+end
+
+def fun_l2_n976(x)
+ if (x < 1)
+ fun_l3_n128(x)
+ else
+ fun_l3_n310(x)
+ end
+end
+
+def fun_l2_n977(x)
+ if (x < 1)
+ fun_l3_n690(x)
+ else
+ fun_l3_n5(x)
+ end
+end
+
+def fun_l2_n978(x)
+ if (x < 1)
+ fun_l3_n432(x)
+ else
+ fun_l3_n964(x)
+ end
+end
+
+def fun_l2_n979(x)
+ if (x < 1)
+ fun_l3_n198(x)
+ else
+ fun_l3_n161(x)
+ end
+end
+
+def fun_l2_n980(x)
+ if (x < 1)
+ fun_l3_n415(x)
+ else
+ fun_l3_n768(x)
+ end
+end
+
+def fun_l2_n981(x)
+ if (x < 1)
+ fun_l3_n635(x)
+ else
+ fun_l3_n569(x)
+ end
+end
+
+def fun_l2_n982(x)
+ if (x < 1)
+ fun_l3_n326(x)
+ else
+ fun_l3_n338(x)
+ end
+end
+
+def fun_l2_n983(x)
+ if (x < 1)
+ fun_l3_n243(x)
+ else
+ fun_l3_n48(x)
+ end
+end
+
+def fun_l2_n984(x)
+ if (x < 1)
+ fun_l3_n204(x)
+ else
+ fun_l3_n141(x)
+ end
+end
+
+def fun_l2_n985(x)
+ if (x < 1)
+ fun_l3_n805(x)
+ else
+ fun_l3_n577(x)
+ end
+end
+
+def fun_l2_n986(x)
+ if (x < 1)
+ fun_l3_n237(x)
+ else
+ fun_l3_n833(x)
+ end
+end
+
+def fun_l2_n987(x)
+ if (x < 1)
+ fun_l3_n643(x)
+ else
+ fun_l3_n629(x)
+ end
+end
+
+def fun_l2_n988(x)
+ if (x < 1)
+ fun_l3_n911(x)
+ else
+ fun_l3_n712(x)
+ end
+end
+
+def fun_l2_n989(x)
+ if (x < 1)
+ fun_l3_n936(x)
+ else
+ fun_l3_n300(x)
+ end
+end
+
+def fun_l2_n990(x)
+ if (x < 1)
+ fun_l3_n561(x)
+ else
+ fun_l3_n281(x)
+ end
+end
+
+def fun_l2_n991(x)
+ if (x < 1)
+ fun_l3_n226(x)
+ else
+ fun_l3_n203(x)
+ end
+end
+
+def fun_l2_n992(x)
+ if (x < 1)
+ fun_l3_n727(x)
+ else
+ fun_l3_n437(x)
+ end
+end
+
+def fun_l2_n993(x)
+ if (x < 1)
+ fun_l3_n608(x)
+ else
+ fun_l3_n169(x)
+ end
+end
+
+def fun_l2_n994(x)
+ if (x < 1)
+ fun_l3_n30(x)
+ else
+ fun_l3_n980(x)
+ end
+end
+
+def fun_l2_n995(x)
+ if (x < 1)
+ fun_l3_n652(x)
+ else
+ fun_l3_n122(x)
+ end
+end
+
+def fun_l2_n996(x)
+ if (x < 1)
+ fun_l3_n334(x)
+ else
+ fun_l3_n668(x)
+ end
+end
+
+def fun_l2_n997(x)
+ if (x < 1)
+ fun_l3_n241(x)
+ else
+ fun_l3_n515(x)
+ end
+end
+
+def fun_l2_n998(x)
+ if (x < 1)
+ fun_l3_n665(x)
+ else
+ fun_l3_n54(x)
+ end
+end
+
+def fun_l2_n999(x)
+ if (x < 1)
+ fun_l3_n568(x)
+ else
+ fun_l3_n652(x)
+ end
+end
+
+def fun_l3_n0(x)
+ if (x < 1)
+ fun_l4_n169(x)
+ else
+ fun_l4_n923(x)
+ end
+end
+
+def fun_l3_n1(x)
+ if (x < 1)
+ fun_l4_n214(x)
+ else
+ fun_l4_n506(x)
+ end
+end
+
+def fun_l3_n2(x)
+ if (x < 1)
+ fun_l4_n513(x)
+ else
+ fun_l4_n409(x)
+ end
+end
+
+def fun_l3_n3(x)
+ if (x < 1)
+ fun_l4_n133(x)
+ else
+ fun_l4_n293(x)
+ end
+end
+
+def fun_l3_n4(x)
+ if (x < 1)
+ fun_l4_n550(x)
+ else
+ fun_l4_n95(x)
+ end
+end
+
+def fun_l3_n5(x)
+ if (x < 1)
+ fun_l4_n13(x)
+ else
+ fun_l4_n508(x)
+ end
+end
+
+def fun_l3_n6(x)
+ if (x < 1)
+ fun_l4_n607(x)
+ else
+ fun_l4_n140(x)
+ end
+end
+
+def fun_l3_n7(x)
+ if (x < 1)
+ fun_l4_n65(x)
+ else
+ fun_l4_n90(x)
+ end
+end
+
+def fun_l3_n8(x)
+ if (x < 1)
+ fun_l4_n516(x)
+ else
+ fun_l4_n445(x)
+ end
+end
+
+def fun_l3_n9(x)
+ if (x < 1)
+ fun_l4_n713(x)
+ else
+ fun_l4_n487(x)
+ end
+end
+
+def fun_l3_n10(x)
+ if (x < 1)
+ fun_l4_n16(x)
+ else
+ fun_l4_n547(x)
+ end
+end
+
+def fun_l3_n11(x)
+ if (x < 1)
+ fun_l4_n561(x)
+ else
+ fun_l4_n530(x)
+ end
+end
+
+def fun_l3_n12(x)
+ if (x < 1)
+ fun_l4_n866(x)
+ else
+ fun_l4_n187(x)
+ end
+end
+
+def fun_l3_n13(x)
+ if (x < 1)
+ fun_l4_n8(x)
+ else
+ fun_l4_n458(x)
+ end
+end
+
+def fun_l3_n14(x)
+ if (x < 1)
+ fun_l4_n627(x)
+ else
+ fun_l4_n122(x)
+ end
+end
+
+def fun_l3_n15(x)
+ if (x < 1)
+ fun_l4_n988(x)
+ else
+ fun_l4_n4(x)
+ end
+end
+
+def fun_l3_n16(x)
+ if (x < 1)
+ fun_l4_n654(x)
+ else
+ fun_l4_n863(x)
+ end
+end
+
+def fun_l3_n17(x)
+ if (x < 1)
+ fun_l4_n112(x)
+ else
+ fun_l4_n223(x)
+ end
+end
+
+def fun_l3_n18(x)
+ if (x < 1)
+ fun_l4_n808(x)
+ else
+ fun_l4_n161(x)
+ end
+end
+
+def fun_l3_n19(x)
+ if (x < 1)
+ fun_l4_n265(x)
+ else
+ fun_l4_n860(x)
+ end
+end
+
+def fun_l3_n20(x)
+ if (x < 1)
+ fun_l4_n60(x)
+ else
+ fun_l4_n943(x)
+ end
+end
+
+def fun_l3_n21(x)
+ if (x < 1)
+ fun_l4_n707(x)
+ else
+ fun_l4_n990(x)
+ end
+end
+
+def fun_l3_n22(x)
+ if (x < 1)
+ fun_l4_n774(x)
+ else
+ fun_l4_n686(x)
+ end
+end
+
+def fun_l3_n23(x)
+ if (x < 1)
+ fun_l4_n552(x)
+ else
+ fun_l4_n935(x)
+ end
+end
+
+def fun_l3_n24(x)
+ if (x < 1)
+ fun_l4_n752(x)
+ else
+ fun_l4_n279(x)
+ end
+end
+
+def fun_l3_n25(x)
+ if (x < 1)
+ fun_l4_n325(x)
+ else
+ fun_l4_n440(x)
+ end
+end
+
+def fun_l3_n26(x)
+ if (x < 1)
+ fun_l4_n330(x)
+ else
+ fun_l4_n233(x)
+ end
+end
+
+def fun_l3_n27(x)
+ if (x < 1)
+ fun_l4_n112(x)
+ else
+ fun_l4_n399(x)
+ end
+end
+
+def fun_l3_n28(x)
+ if (x < 1)
+ fun_l4_n420(x)
+ else
+ fun_l4_n570(x)
+ end
+end
+
+def fun_l3_n29(x)
+ if (x < 1)
+ fun_l4_n515(x)
+ else
+ fun_l4_n485(x)
+ end
+end
+
+def fun_l3_n30(x)
+ if (x < 1)
+ fun_l4_n694(x)
+ else
+ fun_l4_n279(x)
+ end
+end
+
+def fun_l3_n31(x)
+ if (x < 1)
+ fun_l4_n683(x)
+ else
+ fun_l4_n396(x)
+ end
+end
+
+def fun_l3_n32(x)
+ if (x < 1)
+ fun_l4_n997(x)
+ else
+ fun_l4_n978(x)
+ end
+end
+
+def fun_l3_n33(x)
+ if (x < 1)
+ fun_l4_n260(x)
+ else
+ fun_l4_n895(x)
+ end
+end
+
+def fun_l3_n34(x)
+ if (x < 1)
+ fun_l4_n510(x)
+ else
+ fun_l4_n147(x)
+ end
+end
+
+def fun_l3_n35(x)
+ if (x < 1)
+ fun_l4_n415(x)
+ else
+ fun_l4_n590(x)
+ end
+end
+
+def fun_l3_n36(x)
+ if (x < 1)
+ fun_l4_n164(x)
+ else
+ fun_l4_n990(x)
+ end
+end
+
+def fun_l3_n37(x)
+ if (x < 1)
+ fun_l4_n744(x)
+ else
+ fun_l4_n981(x)
+ end
+end
+
+def fun_l3_n38(x)
+ if (x < 1)
+ fun_l4_n243(x)
+ else
+ fun_l4_n385(x)
+ end
+end
+
+def fun_l3_n39(x)
+ if (x < 1)
+ fun_l4_n874(x)
+ else
+ fun_l4_n941(x)
+ end
+end
+
+def fun_l3_n40(x)
+ if (x < 1)
+ fun_l4_n39(x)
+ else
+ fun_l4_n115(x)
+ end
+end
+
+def fun_l3_n41(x)
+ if (x < 1)
+ fun_l4_n829(x)
+ else
+ fun_l4_n991(x)
+ end
+end
+
+def fun_l3_n42(x)
+ if (x < 1)
+ fun_l4_n234(x)
+ else
+ fun_l4_n359(x)
+ end
+end
+
+def fun_l3_n43(x)
+ if (x < 1)
+ fun_l4_n481(x)
+ else
+ fun_l4_n368(x)
+ end
+end
+
+def fun_l3_n44(x)
+ if (x < 1)
+ fun_l4_n969(x)
+ else
+ fun_l4_n716(x)
+ end
+end
+
+def fun_l3_n45(x)
+ if (x < 1)
+ fun_l4_n858(x)
+ else
+ fun_l4_n446(x)
+ end
+end
+
+def fun_l3_n46(x)
+ if (x < 1)
+ fun_l4_n786(x)
+ else
+ fun_l4_n418(x)
+ end
+end
+
+def fun_l3_n47(x)
+ if (x < 1)
+ fun_l4_n261(x)
+ else
+ fun_l4_n346(x)
+ end
+end
+
+def fun_l3_n48(x)
+ if (x < 1)
+ fun_l4_n422(x)
+ else
+ fun_l4_n710(x)
+ end
+end
+
+def fun_l3_n49(x)
+ if (x < 1)
+ fun_l4_n533(x)
+ else
+ fun_l4_n599(x)
+ end
+end
+
+def fun_l3_n50(x)
+ if (x < 1)
+ fun_l4_n922(x)
+ else
+ fun_l4_n90(x)
+ end
+end
+
+def fun_l3_n51(x)
+ if (x < 1)
+ fun_l4_n718(x)
+ else
+ fun_l4_n854(x)
+ end
+end
+
+def fun_l3_n52(x)
+ if (x < 1)
+ fun_l4_n993(x)
+ else
+ fun_l4_n996(x)
+ end
+end
+
+def fun_l3_n53(x)
+ if (x < 1)
+ fun_l4_n628(x)
+ else
+ fun_l4_n589(x)
+ end
+end
+
+def fun_l3_n54(x)
+ if (x < 1)
+ fun_l4_n735(x)
+ else
+ fun_l4_n258(x)
+ end
+end
+
+def fun_l3_n55(x)
+ if (x < 1)
+ fun_l4_n794(x)
+ else
+ fun_l4_n559(x)
+ end
+end
+
+def fun_l3_n56(x)
+ if (x < 1)
+ fun_l4_n771(x)
+ else
+ fun_l4_n812(x)
+ end
+end
+
+def fun_l3_n57(x)
+ if (x < 1)
+ fun_l4_n106(x)
+ else
+ fun_l4_n144(x)
+ end
+end
+
+def fun_l3_n58(x)
+ if (x < 1)
+ fun_l4_n2(x)
+ else
+ fun_l4_n49(x)
+ end
+end
+
+def fun_l3_n59(x)
+ if (x < 1)
+ fun_l4_n540(x)
+ else
+ fun_l4_n164(x)
+ end
+end
+
+def fun_l3_n60(x)
+ if (x < 1)
+ fun_l4_n638(x)
+ else
+ fun_l4_n984(x)
+ end
+end
+
+def fun_l3_n61(x)
+ if (x < 1)
+ fun_l4_n144(x)
+ else
+ fun_l4_n236(x)
+ end
+end
+
+def fun_l3_n62(x)
+ if (x < 1)
+ fun_l4_n345(x)
+ else
+ fun_l4_n65(x)
+ end
+end
+
+def fun_l3_n63(x)
+ if (x < 1)
+ fun_l4_n112(x)
+ else
+ fun_l4_n216(x)
+ end
+end
+
+def fun_l3_n64(x)
+ if (x < 1)
+ fun_l4_n213(x)
+ else
+ fun_l4_n370(x)
+ end
+end
+
+def fun_l3_n65(x)
+ if (x < 1)
+ fun_l4_n845(x)
+ else
+ fun_l4_n672(x)
+ end
+end
+
+def fun_l3_n66(x)
+ if (x < 1)
+ fun_l4_n951(x)
+ else
+ fun_l4_n415(x)
+ end
+end
+
+def fun_l3_n67(x)
+ if (x < 1)
+ fun_l4_n997(x)
+ else
+ fun_l4_n760(x)
+ end
+end
+
+def fun_l3_n68(x)
+ if (x < 1)
+ fun_l4_n595(x)
+ else
+ fun_l4_n517(x)
+ end
+end
+
+def fun_l3_n69(x)
+ if (x < 1)
+ fun_l4_n776(x)
+ else
+ fun_l4_n550(x)
+ end
+end
+
+def fun_l3_n70(x)
+ if (x < 1)
+ fun_l4_n360(x)
+ else
+ fun_l4_n836(x)
+ end
+end
+
+def fun_l3_n71(x)
+ if (x < 1)
+ fun_l4_n214(x)
+ else
+ fun_l4_n532(x)
+ end
+end
+
+def fun_l3_n72(x)
+ if (x < 1)
+ fun_l4_n138(x)
+ else
+ fun_l4_n881(x)
+ end
+end
+
+def fun_l3_n73(x)
+ if (x < 1)
+ fun_l4_n793(x)
+ else
+ fun_l4_n866(x)
+ end
+end
+
+def fun_l3_n74(x)
+ if (x < 1)
+ fun_l4_n883(x)
+ else
+ fun_l4_n730(x)
+ end
+end
+
+def fun_l3_n75(x)
+ if (x < 1)
+ fun_l4_n525(x)
+ else
+ fun_l4_n188(x)
+ end
+end
+
+def fun_l3_n76(x)
+ if (x < 1)
+ fun_l4_n528(x)
+ else
+ fun_l4_n723(x)
+ end
+end
+
+def fun_l3_n77(x)
+ if (x < 1)
+ fun_l4_n954(x)
+ else
+ fun_l4_n581(x)
+ end
+end
+
+def fun_l3_n78(x)
+ if (x < 1)
+ fun_l4_n614(x)
+ else
+ fun_l4_n941(x)
+ end
+end
+
+def fun_l3_n79(x)
+ if (x < 1)
+ fun_l4_n396(x)
+ else
+ fun_l4_n539(x)
+ end
+end
+
+def fun_l3_n80(x)
+ if (x < 1)
+ fun_l4_n1(x)
+ else
+ fun_l4_n708(x)
+ end
+end
+
+def fun_l3_n81(x)
+ if (x < 1)
+ fun_l4_n626(x)
+ else
+ fun_l4_n418(x)
+ end
+end
+
+def fun_l3_n82(x)
+ if (x < 1)
+ fun_l4_n5(x)
+ else
+ fun_l4_n108(x)
+ end
+end
+
+def fun_l3_n83(x)
+ if (x < 1)
+ fun_l4_n683(x)
+ else
+ fun_l4_n679(x)
+ end
+end
+
+def fun_l3_n84(x)
+ if (x < 1)
+ fun_l4_n613(x)
+ else
+ fun_l4_n596(x)
+ end
+end
+
+def fun_l3_n85(x)
+ if (x < 1)
+ fun_l4_n490(x)
+ else
+ fun_l4_n178(x)
+ end
+end
+
+def fun_l3_n86(x)
+ if (x < 1)
+ fun_l4_n286(x)
+ else
+ fun_l4_n724(x)
+ end
+end
+
+def fun_l3_n87(x)
+ if (x < 1)
+ fun_l4_n989(x)
+ else
+ fun_l4_n711(x)
+ end
+end
+
+def fun_l3_n88(x)
+ if (x < 1)
+ fun_l4_n422(x)
+ else
+ fun_l4_n259(x)
+ end
+end
+
+def fun_l3_n89(x)
+ if (x < 1)
+ fun_l4_n938(x)
+ else
+ fun_l4_n123(x)
+ end
+end
+
+def fun_l3_n90(x)
+ if (x < 1)
+ fun_l4_n589(x)
+ else
+ fun_l4_n231(x)
+ end
+end
+
+def fun_l3_n91(x)
+ if (x < 1)
+ fun_l4_n484(x)
+ else
+ fun_l4_n439(x)
+ end
+end
+
+def fun_l3_n92(x)
+ if (x < 1)
+ fun_l4_n469(x)
+ else
+ fun_l4_n737(x)
+ end
+end
+
+def fun_l3_n93(x)
+ if (x < 1)
+ fun_l4_n93(x)
+ else
+ fun_l4_n907(x)
+ end
+end
+
+def fun_l3_n94(x)
+ if (x < 1)
+ fun_l4_n468(x)
+ else
+ fun_l4_n219(x)
+ end
+end
+
+def fun_l3_n95(x)
+ if (x < 1)
+ fun_l4_n409(x)
+ else
+ fun_l4_n921(x)
+ end
+end
+
+def fun_l3_n96(x)
+ if (x < 1)
+ fun_l4_n952(x)
+ else
+ fun_l4_n167(x)
+ end
+end
+
+def fun_l3_n97(x)
+ if (x < 1)
+ fun_l4_n177(x)
+ else
+ fun_l4_n462(x)
+ end
+end
+
+def fun_l3_n98(x)
+ if (x < 1)
+ fun_l4_n351(x)
+ else
+ fun_l4_n89(x)
+ end
+end
+
+def fun_l3_n99(x)
+ if (x < 1)
+ fun_l4_n869(x)
+ else
+ fun_l4_n502(x)
+ end
+end
+
+def fun_l3_n100(x)
+ if (x < 1)
+ fun_l4_n985(x)
+ else
+ fun_l4_n297(x)
+ end
+end
+
+def fun_l3_n101(x)
+ if (x < 1)
+ fun_l4_n48(x)
+ else
+ fun_l4_n895(x)
+ end
+end
+
+def fun_l3_n102(x)
+ if (x < 1)
+ fun_l4_n92(x)
+ else
+ fun_l4_n36(x)
+ end
+end
+
+def fun_l3_n103(x)
+ if (x < 1)
+ fun_l4_n610(x)
+ else
+ fun_l4_n616(x)
+ end
+end
+
+def fun_l3_n104(x)
+ if (x < 1)
+ fun_l4_n472(x)
+ else
+ fun_l4_n689(x)
+ end
+end
+
+def fun_l3_n105(x)
+ if (x < 1)
+ fun_l4_n75(x)
+ else
+ fun_l4_n161(x)
+ end
+end
+
+def fun_l3_n106(x)
+ if (x < 1)
+ fun_l4_n300(x)
+ else
+ fun_l4_n767(x)
+ end
+end
+
+def fun_l3_n107(x)
+ if (x < 1)
+ fun_l4_n707(x)
+ else
+ fun_l4_n229(x)
+ end
+end
+
+def fun_l3_n108(x)
+ if (x < 1)
+ fun_l4_n761(x)
+ else
+ fun_l4_n97(x)
+ end
+end
+
+def fun_l3_n109(x)
+ if (x < 1)
+ fun_l4_n734(x)
+ else
+ fun_l4_n290(x)
+ end
+end
+
+def fun_l3_n110(x)
+ if (x < 1)
+ fun_l4_n819(x)
+ else
+ fun_l4_n567(x)
+ end
+end
+
+def fun_l3_n111(x)
+ if (x < 1)
+ fun_l4_n904(x)
+ else
+ fun_l4_n322(x)
+ end
+end
+
+def fun_l3_n112(x)
+ if (x < 1)
+ fun_l4_n907(x)
+ else
+ fun_l4_n667(x)
+ end
+end
+
+def fun_l3_n113(x)
+ if (x < 1)
+ fun_l4_n473(x)
+ else
+ fun_l4_n620(x)
+ end
+end
+
+def fun_l3_n114(x)
+ if (x < 1)
+ fun_l4_n278(x)
+ else
+ fun_l4_n998(x)
+ end
+end
+
+def fun_l3_n115(x)
+ if (x < 1)
+ fun_l4_n185(x)
+ else
+ fun_l4_n962(x)
+ end
+end
+
+def fun_l3_n116(x)
+ if (x < 1)
+ fun_l4_n989(x)
+ else
+ fun_l4_n993(x)
+ end
+end
+
+def fun_l3_n117(x)
+ if (x < 1)
+ fun_l4_n140(x)
+ else
+ fun_l4_n456(x)
+ end
+end
+
+def fun_l3_n118(x)
+ if (x < 1)
+ fun_l4_n920(x)
+ else
+ fun_l4_n701(x)
+ end
+end
+
+def fun_l3_n119(x)
+ if (x < 1)
+ fun_l4_n263(x)
+ else
+ fun_l4_n837(x)
+ end
+end
+
+def fun_l3_n120(x)
+ if (x < 1)
+ fun_l4_n54(x)
+ else
+ fun_l4_n964(x)
+ end
+end
+
+def fun_l3_n121(x)
+ if (x < 1)
+ fun_l4_n540(x)
+ else
+ fun_l4_n543(x)
+ end
+end
+
+def fun_l3_n122(x)
+ if (x < 1)
+ fun_l4_n51(x)
+ else
+ fun_l4_n453(x)
+ end
+end
+
+def fun_l3_n123(x)
+ if (x < 1)
+ fun_l4_n726(x)
+ else
+ fun_l4_n785(x)
+ end
+end
+
+def fun_l3_n124(x)
+ if (x < 1)
+ fun_l4_n932(x)
+ else
+ fun_l4_n583(x)
+ end
+end
+
+def fun_l3_n125(x)
+ if (x < 1)
+ fun_l4_n471(x)
+ else
+ fun_l4_n518(x)
+ end
+end
+
+def fun_l3_n126(x)
+ if (x < 1)
+ fun_l4_n351(x)
+ else
+ fun_l4_n825(x)
+ end
+end
+
+def fun_l3_n127(x)
+ if (x < 1)
+ fun_l4_n759(x)
+ else
+ fun_l4_n203(x)
+ end
+end
+
+def fun_l3_n128(x)
+ if (x < 1)
+ fun_l4_n336(x)
+ else
+ fun_l4_n861(x)
+ end
+end
+
+def fun_l3_n129(x)
+ if (x < 1)
+ fun_l4_n573(x)
+ else
+ fun_l4_n568(x)
+ end
+end
+
+def fun_l3_n130(x)
+ if (x < 1)
+ fun_l4_n788(x)
+ else
+ fun_l4_n259(x)
+ end
+end
+
+def fun_l3_n131(x)
+ if (x < 1)
+ fun_l4_n392(x)
+ else
+ fun_l4_n932(x)
+ end
+end
+
+def fun_l3_n132(x)
+ if (x < 1)
+ fun_l4_n919(x)
+ else
+ fun_l4_n650(x)
+ end
+end
+
+def fun_l3_n133(x)
+ if (x < 1)
+ fun_l4_n895(x)
+ else
+ fun_l4_n983(x)
+ end
+end
+
+def fun_l3_n134(x)
+ if (x < 1)
+ fun_l4_n389(x)
+ else
+ fun_l4_n358(x)
+ end
+end
+
+def fun_l3_n135(x)
+ if (x < 1)
+ fun_l4_n732(x)
+ else
+ fun_l4_n747(x)
+ end
+end
+
+def fun_l3_n136(x)
+ if (x < 1)
+ fun_l4_n756(x)
+ else
+ fun_l4_n592(x)
+ end
+end
+
+def fun_l3_n137(x)
+ if (x < 1)
+ fun_l4_n581(x)
+ else
+ fun_l4_n24(x)
+ end
+end
+
+def fun_l3_n138(x)
+ if (x < 1)
+ fun_l4_n932(x)
+ else
+ fun_l4_n599(x)
+ end
+end
+
+def fun_l3_n139(x)
+ if (x < 1)
+ fun_l4_n955(x)
+ else
+ fun_l4_n148(x)
+ end
+end
+
+def fun_l3_n140(x)
+ if (x < 1)
+ fun_l4_n332(x)
+ else
+ fun_l4_n677(x)
+ end
+end
+
+def fun_l3_n141(x)
+ if (x < 1)
+ fun_l4_n152(x)
+ else
+ fun_l4_n696(x)
+ end
+end
+
+def fun_l3_n142(x)
+ if (x < 1)
+ fun_l4_n295(x)
+ else
+ fun_l4_n205(x)
+ end
+end
+
+def fun_l3_n143(x)
+ if (x < 1)
+ fun_l4_n543(x)
+ else
+ fun_l4_n951(x)
+ end
+end
+
+def fun_l3_n144(x)
+ if (x < 1)
+ fun_l4_n656(x)
+ else
+ fun_l4_n494(x)
+ end
+end
+
+def fun_l3_n145(x)
+ if (x < 1)
+ fun_l4_n729(x)
+ else
+ fun_l4_n749(x)
+ end
+end
+
+def fun_l3_n146(x)
+ if (x < 1)
+ fun_l4_n197(x)
+ else
+ fun_l4_n3(x)
+ end
+end
+
+def fun_l3_n147(x)
+ if (x < 1)
+ fun_l4_n519(x)
+ else
+ fun_l4_n36(x)
+ end
+end
+
+def fun_l3_n148(x)
+ if (x < 1)
+ fun_l4_n100(x)
+ else
+ fun_l4_n463(x)
+ end
+end
+
+def fun_l3_n149(x)
+ if (x < 1)
+ fun_l4_n890(x)
+ else
+ fun_l4_n947(x)
+ end
+end
+
+def fun_l3_n150(x)
+ if (x < 1)
+ fun_l4_n512(x)
+ else
+ fun_l4_n982(x)
+ end
+end
+
+def fun_l3_n151(x)
+ if (x < 1)
+ fun_l4_n750(x)
+ else
+ fun_l4_n781(x)
+ end
+end
+
+def fun_l3_n152(x)
+ if (x < 1)
+ fun_l4_n193(x)
+ else
+ fun_l4_n530(x)
+ end
+end
+
+def fun_l3_n153(x)
+ if (x < 1)
+ fun_l4_n189(x)
+ else
+ fun_l4_n209(x)
+ end
+end
+
+def fun_l3_n154(x)
+ if (x < 1)
+ fun_l4_n343(x)
+ else
+ fun_l4_n44(x)
+ end
+end
+
+def fun_l3_n155(x)
+ if (x < 1)
+ fun_l4_n536(x)
+ else
+ fun_l4_n228(x)
+ end
+end
+
+def fun_l3_n156(x)
+ if (x < 1)
+ fun_l4_n475(x)
+ else
+ fun_l4_n790(x)
+ end
+end
+
+def fun_l3_n157(x)
+ if (x < 1)
+ fun_l4_n954(x)
+ else
+ fun_l4_n242(x)
+ end
+end
+
+def fun_l3_n158(x)
+ if (x < 1)
+ fun_l4_n19(x)
+ else
+ fun_l4_n735(x)
+ end
+end
+
+def fun_l3_n159(x)
+ if (x < 1)
+ fun_l4_n900(x)
+ else
+ fun_l4_n456(x)
+ end
+end
+
+def fun_l3_n160(x)
+ if (x < 1)
+ fun_l4_n193(x)
+ else
+ fun_l4_n606(x)
+ end
+end
+
+def fun_l3_n161(x)
+ if (x < 1)
+ fun_l4_n684(x)
+ else
+ fun_l4_n622(x)
+ end
+end
+
+def fun_l3_n162(x)
+ if (x < 1)
+ fun_l4_n260(x)
+ else
+ fun_l4_n582(x)
+ end
+end
+
+def fun_l3_n163(x)
+ if (x < 1)
+ fun_l4_n713(x)
+ else
+ fun_l4_n601(x)
+ end
+end
+
+def fun_l3_n164(x)
+ if (x < 1)
+ fun_l4_n819(x)
+ else
+ fun_l4_n642(x)
+ end
+end
+
+def fun_l3_n165(x)
+ if (x < 1)
+ fun_l4_n45(x)
+ else
+ fun_l4_n777(x)
+ end
+end
+
+def fun_l3_n166(x)
+ if (x < 1)
+ fun_l4_n256(x)
+ else
+ fun_l4_n92(x)
+ end
+end
+
+def fun_l3_n167(x)
+ if (x < 1)
+ fun_l4_n975(x)
+ else
+ fun_l4_n962(x)
+ end
+end
+
+def fun_l3_n168(x)
+ if (x < 1)
+ fun_l4_n579(x)
+ else
+ fun_l4_n208(x)
+ end
+end
+
+def fun_l3_n169(x)
+ if (x < 1)
+ fun_l4_n133(x)
+ else
+ fun_l4_n636(x)
+ end
+end
+
+def fun_l3_n170(x)
+ if (x < 1)
+ fun_l4_n863(x)
+ else
+ fun_l4_n168(x)
+ end
+end
+
+def fun_l3_n171(x)
+ if (x < 1)
+ fun_l4_n396(x)
+ else
+ fun_l4_n654(x)
+ end
+end
+
+def fun_l3_n172(x)
+ if (x < 1)
+ fun_l4_n963(x)
+ else
+ fun_l4_n420(x)
+ end
+end
+
+def fun_l3_n173(x)
+ if (x < 1)
+ fun_l4_n487(x)
+ else
+ fun_l4_n573(x)
+ end
+end
+
+def fun_l3_n174(x)
+ if (x < 1)
+ fun_l4_n847(x)
+ else
+ fun_l4_n476(x)
+ end
+end
+
+def fun_l3_n175(x)
+ if (x < 1)
+ fun_l4_n712(x)
+ else
+ fun_l4_n522(x)
+ end
+end
+
+def fun_l3_n176(x)
+ if (x < 1)
+ fun_l4_n292(x)
+ else
+ fun_l4_n717(x)
+ end
+end
+
+def fun_l3_n177(x)
+ if (x < 1)
+ fun_l4_n945(x)
+ else
+ fun_l4_n146(x)
+ end
+end
+
+def fun_l3_n178(x)
+ if (x < 1)
+ fun_l4_n163(x)
+ else
+ fun_l4_n28(x)
+ end
+end
+
+def fun_l3_n179(x)
+ if (x < 1)
+ fun_l4_n738(x)
+ else
+ fun_l4_n502(x)
+ end
+end
+
+def fun_l3_n180(x)
+ if (x < 1)
+ fun_l4_n8(x)
+ else
+ fun_l4_n56(x)
+ end
+end
+
+def fun_l3_n181(x)
+ if (x < 1)
+ fun_l4_n58(x)
+ else
+ fun_l4_n155(x)
+ end
+end
+
+def fun_l3_n182(x)
+ if (x < 1)
+ fun_l4_n298(x)
+ else
+ fun_l4_n580(x)
+ end
+end
+
+def fun_l3_n183(x)
+ if (x < 1)
+ fun_l4_n860(x)
+ else
+ fun_l4_n176(x)
+ end
+end
+
+def fun_l3_n184(x)
+ if (x < 1)
+ fun_l4_n108(x)
+ else
+ fun_l4_n986(x)
+ end
+end
+
+def fun_l3_n185(x)
+ if (x < 1)
+ fun_l4_n366(x)
+ else
+ fun_l4_n110(x)
+ end
+end
+
+def fun_l3_n186(x)
+ if (x < 1)
+ fun_l4_n177(x)
+ else
+ fun_l4_n158(x)
+ end
+end
+
+def fun_l3_n187(x)
+ if (x < 1)
+ fun_l4_n212(x)
+ else
+ fun_l4_n803(x)
+ end
+end
+
+def fun_l3_n188(x)
+ if (x < 1)
+ fun_l4_n946(x)
+ else
+ fun_l4_n281(x)
+ end
+end
+
+def fun_l3_n189(x)
+ if (x < 1)
+ fun_l4_n610(x)
+ else
+ fun_l4_n691(x)
+ end
+end
+
+def fun_l3_n190(x)
+ if (x < 1)
+ fun_l4_n784(x)
+ else
+ fun_l4_n300(x)
+ end
+end
+
+def fun_l3_n191(x)
+ if (x < 1)
+ fun_l4_n272(x)
+ else
+ fun_l4_n809(x)
+ end
+end
+
+def fun_l3_n192(x)
+ if (x < 1)
+ fun_l4_n812(x)
+ else
+ fun_l4_n633(x)
+ end
+end
+
+def fun_l3_n193(x)
+ if (x < 1)
+ fun_l4_n880(x)
+ else
+ fun_l4_n267(x)
+ end
+end
+
+def fun_l3_n194(x)
+ if (x < 1)
+ fun_l4_n454(x)
+ else
+ fun_l4_n567(x)
+ end
+end
+
+def fun_l3_n195(x)
+ if (x < 1)
+ fun_l4_n919(x)
+ else
+ fun_l4_n184(x)
+ end
+end
+
+def fun_l3_n196(x)
+ if (x < 1)
+ fun_l4_n294(x)
+ else
+ fun_l4_n150(x)
+ end
+end
+
+def fun_l3_n197(x)
+ if (x < 1)
+ fun_l4_n543(x)
+ else
+ fun_l4_n319(x)
+ end
+end
+
+def fun_l3_n198(x)
+ if (x < 1)
+ fun_l4_n91(x)
+ else
+ fun_l4_n378(x)
+ end
+end
+
+def fun_l3_n199(x)
+ if (x < 1)
+ fun_l4_n590(x)
+ else
+ fun_l4_n195(x)
+ end
+end
+
+def fun_l3_n200(x)
+ if (x < 1)
+ fun_l4_n532(x)
+ else
+ fun_l4_n346(x)
+ end
+end
+
+def fun_l3_n201(x)
+ if (x < 1)
+ fun_l4_n340(x)
+ else
+ fun_l4_n129(x)
+ end
+end
+
+def fun_l3_n202(x)
+ if (x < 1)
+ fun_l4_n193(x)
+ else
+ fun_l4_n676(x)
+ end
+end
+
+def fun_l3_n203(x)
+ if (x < 1)
+ fun_l4_n210(x)
+ else
+ fun_l4_n982(x)
+ end
+end
+
+def fun_l3_n204(x)
+ if (x < 1)
+ fun_l4_n247(x)
+ else
+ fun_l4_n550(x)
+ end
+end
+
+def fun_l3_n205(x)
+ if (x < 1)
+ fun_l4_n727(x)
+ else
+ fun_l4_n737(x)
+ end
+end
+
+def fun_l3_n206(x)
+ if (x < 1)
+ fun_l4_n111(x)
+ else
+ fun_l4_n952(x)
+ end
+end
+
+def fun_l3_n207(x)
+ if (x < 1)
+ fun_l4_n996(x)
+ else
+ fun_l4_n865(x)
+ end
+end
+
+def fun_l3_n208(x)
+ if (x < 1)
+ fun_l4_n945(x)
+ else
+ fun_l4_n488(x)
+ end
+end
+
+def fun_l3_n209(x)
+ if (x < 1)
+ fun_l4_n697(x)
+ else
+ fun_l4_n366(x)
+ end
+end
+
+def fun_l3_n210(x)
+ if (x < 1)
+ fun_l4_n180(x)
+ else
+ fun_l4_n995(x)
+ end
+end
+
+def fun_l3_n211(x)
+ if (x < 1)
+ fun_l4_n972(x)
+ else
+ fun_l4_n783(x)
+ end
+end
+
+def fun_l3_n212(x)
+ if (x < 1)
+ fun_l4_n58(x)
+ else
+ fun_l4_n430(x)
+ end
+end
+
+def fun_l3_n213(x)
+ if (x < 1)
+ fun_l4_n904(x)
+ else
+ fun_l4_n703(x)
+ end
+end
+
+def fun_l3_n214(x)
+ if (x < 1)
+ fun_l4_n882(x)
+ else
+ fun_l4_n648(x)
+ end
+end
+
+def fun_l3_n215(x)
+ if (x < 1)
+ fun_l4_n800(x)
+ else
+ fun_l4_n680(x)
+ end
+end
+
+def fun_l3_n216(x)
+ if (x < 1)
+ fun_l4_n205(x)
+ else
+ fun_l4_n185(x)
+ end
+end
+
+def fun_l3_n217(x)
+ if (x < 1)
+ fun_l4_n242(x)
+ else
+ fun_l4_n834(x)
+ end
+end
+
+def fun_l3_n218(x)
+ if (x < 1)
+ fun_l4_n551(x)
+ else
+ fun_l4_n399(x)
+ end
+end
+
+def fun_l3_n219(x)
+ if (x < 1)
+ fun_l4_n820(x)
+ else
+ fun_l4_n403(x)
+ end
+end
+
+def fun_l3_n220(x)
+ if (x < 1)
+ fun_l4_n874(x)
+ else
+ fun_l4_n584(x)
+ end
+end
+
+def fun_l3_n221(x)
+ if (x < 1)
+ fun_l4_n845(x)
+ else
+ fun_l4_n56(x)
+ end
+end
+
+def fun_l3_n222(x)
+ if (x < 1)
+ fun_l4_n947(x)
+ else
+ fun_l4_n299(x)
+ end
+end
+
+def fun_l3_n223(x)
+ if (x < 1)
+ fun_l4_n533(x)
+ else
+ fun_l4_n184(x)
+ end
+end
+
+def fun_l3_n224(x)
+ if (x < 1)
+ fun_l4_n760(x)
+ else
+ fun_l4_n507(x)
+ end
+end
+
+def fun_l3_n225(x)
+ if (x < 1)
+ fun_l4_n47(x)
+ else
+ fun_l4_n712(x)
+ end
+end
+
+def fun_l3_n226(x)
+ if (x < 1)
+ fun_l4_n470(x)
+ else
+ fun_l4_n760(x)
+ end
+end
+
+def fun_l3_n227(x)
+ if (x < 1)
+ fun_l4_n932(x)
+ else
+ fun_l4_n292(x)
+ end
+end
+
+def fun_l3_n228(x)
+ if (x < 1)
+ fun_l4_n44(x)
+ else
+ fun_l4_n855(x)
+ end
+end
+
+def fun_l3_n229(x)
+ if (x < 1)
+ fun_l4_n385(x)
+ else
+ fun_l4_n284(x)
+ end
+end
+
+def fun_l3_n230(x)
+ if (x < 1)
+ fun_l4_n272(x)
+ else
+ fun_l4_n407(x)
+ end
+end
+
+def fun_l3_n231(x)
+ if (x < 1)
+ fun_l4_n820(x)
+ else
+ fun_l4_n375(x)
+ end
+end
+
+def fun_l3_n232(x)
+ if (x < 1)
+ fun_l4_n165(x)
+ else
+ fun_l4_n38(x)
+ end
+end
+
+def fun_l3_n233(x)
+ if (x < 1)
+ fun_l4_n772(x)
+ else
+ fun_l4_n179(x)
+ end
+end
+
+def fun_l3_n234(x)
+ if (x < 1)
+ fun_l4_n980(x)
+ else
+ fun_l4_n678(x)
+ end
+end
+
+def fun_l3_n235(x)
+ if (x < 1)
+ fun_l4_n279(x)
+ else
+ fun_l4_n834(x)
+ end
+end
+
+def fun_l3_n236(x)
+ if (x < 1)
+ fun_l4_n227(x)
+ else
+ fun_l4_n11(x)
+ end
+end
+
+def fun_l3_n237(x)
+ if (x < 1)
+ fun_l4_n724(x)
+ else
+ fun_l4_n659(x)
+ end
+end
+
+def fun_l3_n238(x)
+ if (x < 1)
+ fun_l4_n569(x)
+ else
+ fun_l4_n693(x)
+ end
+end
+
+def fun_l3_n239(x)
+ if (x < 1)
+ fun_l4_n933(x)
+ else
+ fun_l4_n897(x)
+ end
+end
+
+def fun_l3_n240(x)
+ if (x < 1)
+ fun_l4_n215(x)
+ else
+ fun_l4_n784(x)
+ end
+end
+
+def fun_l3_n241(x)
+ if (x < 1)
+ fun_l4_n964(x)
+ else
+ fun_l4_n430(x)
+ end
+end
+
+def fun_l3_n242(x)
+ if (x < 1)
+ fun_l4_n91(x)
+ else
+ fun_l4_n190(x)
+ end
+end
+
+def fun_l3_n243(x)
+ if (x < 1)
+ fun_l4_n375(x)
+ else
+ fun_l4_n638(x)
+ end
+end
+
+def fun_l3_n244(x)
+ if (x < 1)
+ fun_l4_n381(x)
+ else
+ fun_l4_n324(x)
+ end
+end
+
+def fun_l3_n245(x)
+ if (x < 1)
+ fun_l4_n983(x)
+ else
+ fun_l4_n248(x)
+ end
+end
+
+def fun_l3_n246(x)
+ if (x < 1)
+ fun_l4_n336(x)
+ else
+ fun_l4_n647(x)
+ end
+end
+
+def fun_l3_n247(x)
+ if (x < 1)
+ fun_l4_n64(x)
+ else
+ fun_l4_n957(x)
+ end
+end
+
+def fun_l3_n248(x)
+ if (x < 1)
+ fun_l4_n313(x)
+ else
+ fun_l4_n662(x)
+ end
+end
+
+def fun_l3_n249(x)
+ if (x < 1)
+ fun_l4_n528(x)
+ else
+ fun_l4_n448(x)
+ end
+end
+
+def fun_l3_n250(x)
+ if (x < 1)
+ fun_l4_n9(x)
+ else
+ fun_l4_n424(x)
+ end
+end
+
+def fun_l3_n251(x)
+ if (x < 1)
+ fun_l4_n290(x)
+ else
+ fun_l4_n416(x)
+ end
+end
+
+def fun_l3_n252(x)
+ if (x < 1)
+ fun_l4_n159(x)
+ else
+ fun_l4_n780(x)
+ end
+end
+
+def fun_l3_n253(x)
+ if (x < 1)
+ fun_l4_n863(x)
+ else
+ fun_l4_n192(x)
+ end
+end
+
+def fun_l3_n254(x)
+ if (x < 1)
+ fun_l4_n658(x)
+ else
+ fun_l4_n816(x)
+ end
+end
+
+def fun_l3_n255(x)
+ if (x < 1)
+ fun_l4_n686(x)
+ else
+ fun_l4_n586(x)
+ end
+end
+
+def fun_l3_n256(x)
+ if (x < 1)
+ fun_l4_n110(x)
+ else
+ fun_l4_n290(x)
+ end
+end
+
+def fun_l3_n257(x)
+ if (x < 1)
+ fun_l4_n355(x)
+ else
+ fun_l4_n862(x)
+ end
+end
+
+def fun_l3_n258(x)
+ if (x < 1)
+ fun_l4_n63(x)
+ else
+ fun_l4_n205(x)
+ end
+end
+
+def fun_l3_n259(x)
+ if (x < 1)
+ fun_l4_n766(x)
+ else
+ fun_l4_n130(x)
+ end
+end
+
+def fun_l3_n260(x)
+ if (x < 1)
+ fun_l4_n670(x)
+ else
+ fun_l4_n313(x)
+ end
+end
+
+def fun_l3_n261(x)
+ if (x < 1)
+ fun_l4_n738(x)
+ else
+ fun_l4_n796(x)
+ end
+end
+
+def fun_l3_n262(x)
+ if (x < 1)
+ fun_l4_n925(x)
+ else
+ fun_l4_n267(x)
+ end
+end
+
+def fun_l3_n263(x)
+ if (x < 1)
+ fun_l4_n515(x)
+ else
+ fun_l4_n298(x)
+ end
+end
+
+def fun_l3_n264(x)
+ if (x < 1)
+ fun_l4_n883(x)
+ else
+ fun_l4_n809(x)
+ end
+end
+
+def fun_l3_n265(x)
+ if (x < 1)
+ fun_l4_n138(x)
+ else
+ fun_l4_n665(x)
+ end
+end
+
+def fun_l3_n266(x)
+ if (x < 1)
+ fun_l4_n141(x)
+ else
+ fun_l4_n641(x)
+ end
+end
+
+def fun_l3_n267(x)
+ if (x < 1)
+ fun_l4_n936(x)
+ else
+ fun_l4_n233(x)
+ end
+end
+
+def fun_l3_n268(x)
+ if (x < 1)
+ fun_l4_n28(x)
+ else
+ fun_l4_n351(x)
+ end
+end
+
+def fun_l3_n269(x)
+ if (x < 1)
+ fun_l4_n62(x)
+ else
+ fun_l4_n17(x)
+ end
+end
+
+def fun_l3_n270(x)
+ if (x < 1)
+ fun_l4_n489(x)
+ else
+ fun_l4_n408(x)
+ end
+end
+
+def fun_l3_n271(x)
+ if (x < 1)
+ fun_l4_n276(x)
+ else
+ fun_l4_n799(x)
+ end
+end
+
+def fun_l3_n272(x)
+ if (x < 1)
+ fun_l4_n103(x)
+ else
+ fun_l4_n804(x)
+ end
+end
+
+def fun_l3_n273(x)
+ if (x < 1)
+ fun_l4_n850(x)
+ else
+ fun_l4_n388(x)
+ end
+end
+
+def fun_l3_n274(x)
+ if (x < 1)
+ fun_l4_n651(x)
+ else
+ fun_l4_n484(x)
+ end
+end
+
+def fun_l3_n275(x)
+ if (x < 1)
+ fun_l4_n693(x)
+ else
+ fun_l4_n20(x)
+ end
+end
+
+def fun_l3_n276(x)
+ if (x < 1)
+ fun_l4_n897(x)
+ else
+ fun_l4_n328(x)
+ end
+end
+
+def fun_l3_n277(x)
+ if (x < 1)
+ fun_l4_n632(x)
+ else
+ fun_l4_n120(x)
+ end
+end
+
+def fun_l3_n278(x)
+ if (x < 1)
+ fun_l4_n919(x)
+ else
+ fun_l4_n921(x)
+ end
+end
+
+def fun_l3_n279(x)
+ if (x < 1)
+ fun_l4_n461(x)
+ else
+ fun_l4_n219(x)
+ end
+end
+
+def fun_l3_n280(x)
+ if (x < 1)
+ fun_l4_n867(x)
+ else
+ fun_l4_n682(x)
+ end
+end
+
+def fun_l3_n281(x)
+ if (x < 1)
+ fun_l4_n233(x)
+ else
+ fun_l4_n589(x)
+ end
+end
+
+def fun_l3_n282(x)
+ if (x < 1)
+ fun_l4_n516(x)
+ else
+ fun_l4_n970(x)
+ end
+end
+
+def fun_l3_n283(x)
+ if (x < 1)
+ fun_l4_n300(x)
+ else
+ fun_l4_n934(x)
+ end
+end
+
+def fun_l3_n284(x)
+ if (x < 1)
+ fun_l4_n736(x)
+ else
+ fun_l4_n516(x)
+ end
+end
+
+def fun_l3_n285(x)
+ if (x < 1)
+ fun_l4_n401(x)
+ else
+ fun_l4_n539(x)
+ end
+end
+
+def fun_l3_n286(x)
+ if (x < 1)
+ fun_l4_n342(x)
+ else
+ fun_l4_n142(x)
+ end
+end
+
+def fun_l3_n287(x)
+ if (x < 1)
+ fun_l4_n44(x)
+ else
+ fun_l4_n311(x)
+ end
+end
+
+def fun_l3_n288(x)
+ if (x < 1)
+ fun_l4_n698(x)
+ else
+ fun_l4_n407(x)
+ end
+end
+
+def fun_l3_n289(x)
+ if (x < 1)
+ fun_l4_n714(x)
+ else
+ fun_l4_n324(x)
+ end
+end
+
+def fun_l3_n290(x)
+ if (x < 1)
+ fun_l4_n862(x)
+ else
+ fun_l4_n807(x)
+ end
+end
+
+def fun_l3_n291(x)
+ if (x < 1)
+ fun_l4_n446(x)
+ else
+ fun_l4_n378(x)
+ end
+end
+
+def fun_l3_n292(x)
+ if (x < 1)
+ fun_l4_n418(x)
+ else
+ fun_l4_n194(x)
+ end
+end
+
+def fun_l3_n293(x)
+ if (x < 1)
+ fun_l4_n336(x)
+ else
+ fun_l4_n895(x)
+ end
+end
+
+def fun_l3_n294(x)
+ if (x < 1)
+ fun_l4_n928(x)
+ else
+ fun_l4_n154(x)
+ end
+end
+
+def fun_l3_n295(x)
+ if (x < 1)
+ fun_l4_n764(x)
+ else
+ fun_l4_n335(x)
+ end
+end
+
+def fun_l3_n296(x)
+ if (x < 1)
+ fun_l4_n840(x)
+ else
+ fun_l4_n513(x)
+ end
+end
+
+def fun_l3_n297(x)
+ if (x < 1)
+ fun_l4_n520(x)
+ else
+ fun_l4_n838(x)
+ end
+end
+
+def fun_l3_n298(x)
+ if (x < 1)
+ fun_l4_n831(x)
+ else
+ fun_l4_n344(x)
+ end
+end
+
+def fun_l3_n299(x)
+ if (x < 1)
+ fun_l4_n110(x)
+ else
+ fun_l4_n19(x)
+ end
+end
+
+def fun_l3_n300(x)
+ if (x < 1)
+ fun_l4_n272(x)
+ else
+ fun_l4_n952(x)
+ end
+end
+
+def fun_l3_n301(x)
+ if (x < 1)
+ fun_l4_n659(x)
+ else
+ fun_l4_n439(x)
+ end
+end
+
+def fun_l3_n302(x)
+ if (x < 1)
+ fun_l4_n787(x)
+ else
+ fun_l4_n189(x)
+ end
+end
+
+def fun_l3_n303(x)
+ if (x < 1)
+ fun_l4_n549(x)
+ else
+ fun_l4_n594(x)
+ end
+end
+
+def fun_l3_n304(x)
+ if (x < 1)
+ fun_l4_n255(x)
+ else
+ fun_l4_n822(x)
+ end
+end
+
+def fun_l3_n305(x)
+ if (x < 1)
+ fun_l4_n312(x)
+ else
+ fun_l4_n935(x)
+ end
+end
+
+def fun_l3_n306(x)
+ if (x < 1)
+ fun_l4_n831(x)
+ else
+ fun_l4_n299(x)
+ end
+end
+
+def fun_l3_n307(x)
+ if (x < 1)
+ fun_l4_n154(x)
+ else
+ fun_l4_n520(x)
+ end
+end
+
+def fun_l3_n308(x)
+ if (x < 1)
+ fun_l4_n768(x)
+ else
+ fun_l4_n676(x)
+ end
+end
+
+def fun_l3_n309(x)
+ if (x < 1)
+ fun_l4_n816(x)
+ else
+ fun_l4_n447(x)
+ end
+end
+
+def fun_l3_n310(x)
+ if (x < 1)
+ fun_l4_n689(x)
+ else
+ fun_l4_n244(x)
+ end
+end
+
+def fun_l3_n311(x)
+ if (x < 1)
+ fun_l4_n389(x)
+ else
+ fun_l4_n326(x)
+ end
+end
+
+def fun_l3_n312(x)
+ if (x < 1)
+ fun_l4_n125(x)
+ else
+ fun_l4_n502(x)
+ end
+end
+
+def fun_l3_n313(x)
+ if (x < 1)
+ fun_l4_n327(x)
+ else
+ fun_l4_n123(x)
+ end
+end
+
+def fun_l3_n314(x)
+ if (x < 1)
+ fun_l4_n558(x)
+ else
+ fun_l4_n940(x)
+ end
+end
+
+def fun_l3_n315(x)
+ if (x < 1)
+ fun_l4_n652(x)
+ else
+ fun_l4_n10(x)
+ end
+end
+
+def fun_l3_n316(x)
+ if (x < 1)
+ fun_l4_n483(x)
+ else
+ fun_l4_n315(x)
+ end
+end
+
+def fun_l3_n317(x)
+ if (x < 1)
+ fun_l4_n567(x)
+ else
+ fun_l4_n540(x)
+ end
+end
+
+def fun_l3_n318(x)
+ if (x < 1)
+ fun_l4_n449(x)
+ else
+ fun_l4_n760(x)
+ end
+end
+
+def fun_l3_n319(x)
+ if (x < 1)
+ fun_l4_n111(x)
+ else
+ fun_l4_n173(x)
+ end
+end
+
+def fun_l3_n320(x)
+ if (x < 1)
+ fun_l4_n373(x)
+ else
+ fun_l4_n615(x)
+ end
+end
+
+def fun_l3_n321(x)
+ if (x < 1)
+ fun_l4_n570(x)
+ else
+ fun_l4_n27(x)
+ end
+end
+
+def fun_l3_n322(x)
+ if (x < 1)
+ fun_l4_n235(x)
+ else
+ fun_l4_n695(x)
+ end
+end
+
+def fun_l3_n323(x)
+ if (x < 1)
+ fun_l4_n788(x)
+ else
+ fun_l4_n57(x)
+ end
+end
+
+def fun_l3_n324(x)
+ if (x < 1)
+ fun_l4_n7(x)
+ else
+ fun_l4_n75(x)
+ end
+end
+
+def fun_l3_n325(x)
+ if (x < 1)
+ fun_l4_n502(x)
+ else
+ fun_l4_n459(x)
+ end
+end
+
+def fun_l3_n326(x)
+ if (x < 1)
+ fun_l4_n572(x)
+ else
+ fun_l4_n324(x)
+ end
+end
+
+def fun_l3_n327(x)
+ if (x < 1)
+ fun_l4_n860(x)
+ else
+ fun_l4_n250(x)
+ end
+end
+
+def fun_l3_n328(x)
+ if (x < 1)
+ fun_l4_n242(x)
+ else
+ fun_l4_n667(x)
+ end
+end
+
+def fun_l3_n329(x)
+ if (x < 1)
+ fun_l4_n589(x)
+ else
+ fun_l4_n236(x)
+ end
+end
+
+def fun_l3_n330(x)
+ if (x < 1)
+ fun_l4_n100(x)
+ else
+ fun_l4_n476(x)
+ end
+end
+
+def fun_l3_n331(x)
+ if (x < 1)
+ fun_l4_n779(x)
+ else
+ fun_l4_n667(x)
+ end
+end
+
+def fun_l3_n332(x)
+ if (x < 1)
+ fun_l4_n277(x)
+ else
+ fun_l4_n441(x)
+ end
+end
+
+def fun_l3_n333(x)
+ if (x < 1)
+ fun_l4_n379(x)
+ else
+ fun_l4_n331(x)
+ end
+end
+
+def fun_l3_n334(x)
+ if (x < 1)
+ fun_l4_n802(x)
+ else
+ fun_l4_n588(x)
+ end
+end
+
+def fun_l3_n335(x)
+ if (x < 1)
+ fun_l4_n385(x)
+ else
+ fun_l4_n918(x)
+ end
+end
+
+def fun_l3_n336(x)
+ if (x < 1)
+ fun_l4_n532(x)
+ else
+ fun_l4_n254(x)
+ end
+end
+
+def fun_l3_n337(x)
+ if (x < 1)
+ fun_l4_n920(x)
+ else
+ fun_l4_n134(x)
+ end
+end
+
+def fun_l3_n338(x)
+ if (x < 1)
+ fun_l4_n803(x)
+ else
+ fun_l4_n746(x)
+ end
+end
+
+def fun_l3_n339(x)
+ if (x < 1)
+ fun_l4_n924(x)
+ else
+ fun_l4_n878(x)
+ end
+end
+
+def fun_l3_n340(x)
+ if (x < 1)
+ fun_l4_n166(x)
+ else
+ fun_l4_n776(x)
+ end
+end
+
+def fun_l3_n341(x)
+ if (x < 1)
+ fun_l4_n240(x)
+ else
+ fun_l4_n898(x)
+ end
+end
+
+def fun_l3_n342(x)
+ if (x < 1)
+ fun_l4_n810(x)
+ else
+ fun_l4_n423(x)
+ end
+end
+
+def fun_l3_n343(x)
+ if (x < 1)
+ fun_l4_n209(x)
+ else
+ fun_l4_n514(x)
+ end
+end
+
+def fun_l3_n344(x)
+ if (x < 1)
+ fun_l4_n505(x)
+ else
+ fun_l4_n321(x)
+ end
+end
+
+def fun_l3_n345(x)
+ if (x < 1)
+ fun_l4_n88(x)
+ else
+ fun_l4_n39(x)
+ end
+end
+
+def fun_l3_n346(x)
+ if (x < 1)
+ fun_l4_n848(x)
+ else
+ fun_l4_n357(x)
+ end
+end
+
+def fun_l3_n347(x)
+ if (x < 1)
+ fun_l4_n450(x)
+ else
+ fun_l4_n704(x)
+ end
+end
+
+def fun_l3_n348(x)
+ if (x < 1)
+ fun_l4_n881(x)
+ else
+ fun_l4_n916(x)
+ end
+end
+
+def fun_l3_n349(x)
+ if (x < 1)
+ fun_l4_n16(x)
+ else
+ fun_l4_n996(x)
+ end
+end
+
+def fun_l3_n350(x)
+ if (x < 1)
+ fun_l4_n839(x)
+ else
+ fun_l4_n697(x)
+ end
+end
+
+def fun_l3_n351(x)
+ if (x < 1)
+ fun_l4_n177(x)
+ else
+ fun_l4_n859(x)
+ end
+end
+
+def fun_l3_n352(x)
+ if (x < 1)
+ fun_l4_n684(x)
+ else
+ fun_l4_n778(x)
+ end
+end
+
+def fun_l3_n353(x)
+ if (x < 1)
+ fun_l4_n604(x)
+ else
+ fun_l4_n280(x)
+ end
+end
+
+def fun_l3_n354(x)
+ if (x < 1)
+ fun_l4_n366(x)
+ else
+ fun_l4_n576(x)
+ end
+end
+
+def fun_l3_n355(x)
+ if (x < 1)
+ fun_l4_n584(x)
+ else
+ fun_l4_n228(x)
+ end
+end
+
+def fun_l3_n356(x)
+ if (x < 1)
+ fun_l4_n844(x)
+ else
+ fun_l4_n799(x)
+ end
+end
+
+def fun_l3_n357(x)
+ if (x < 1)
+ fun_l4_n489(x)
+ else
+ fun_l4_n905(x)
+ end
+end
+
+def fun_l3_n358(x)
+ if (x < 1)
+ fun_l4_n781(x)
+ else
+ fun_l4_n565(x)
+ end
+end
+
+def fun_l3_n359(x)
+ if (x < 1)
+ fun_l4_n110(x)
+ else
+ fun_l4_n326(x)
+ end
+end
+
+def fun_l3_n360(x)
+ if (x < 1)
+ fun_l4_n915(x)
+ else
+ fun_l4_n489(x)
+ end
+end
+
+def fun_l3_n361(x)
+ if (x < 1)
+ fun_l4_n110(x)
+ else
+ fun_l4_n733(x)
+ end
+end
+
+def fun_l3_n362(x)
+ if (x < 1)
+ fun_l4_n93(x)
+ else
+ fun_l4_n549(x)
+ end
+end
+
+def fun_l3_n363(x)
+ if (x < 1)
+ fun_l4_n270(x)
+ else
+ fun_l4_n883(x)
+ end
+end
+
+def fun_l3_n364(x)
+ if (x < 1)
+ fun_l4_n512(x)
+ else
+ fun_l4_n555(x)
+ end
+end
+
+def fun_l3_n365(x)
+ if (x < 1)
+ fun_l4_n800(x)
+ else
+ fun_l4_n672(x)
+ end
+end
+
+def fun_l3_n366(x)
+ if (x < 1)
+ fun_l4_n535(x)
+ else
+ fun_l4_n320(x)
+ end
+end
+
+def fun_l3_n367(x)
+ if (x < 1)
+ fun_l4_n883(x)
+ else
+ fun_l4_n365(x)
+ end
+end
+
+def fun_l3_n368(x)
+ if (x < 1)
+ fun_l4_n306(x)
+ else
+ fun_l4_n614(x)
+ end
+end
+
+def fun_l3_n369(x)
+ if (x < 1)
+ fun_l4_n914(x)
+ else
+ fun_l4_n20(x)
+ end
+end
+
+def fun_l3_n370(x)
+ if (x < 1)
+ fun_l4_n230(x)
+ else
+ fun_l4_n585(x)
+ end
+end
+
+def fun_l3_n371(x)
+ if (x < 1)
+ fun_l4_n544(x)
+ else
+ fun_l4_n752(x)
+ end
+end
+
+def fun_l3_n372(x)
+ if (x < 1)
+ fun_l4_n984(x)
+ else
+ fun_l4_n738(x)
+ end
+end
+
+def fun_l3_n373(x)
+ if (x < 1)
+ fun_l4_n478(x)
+ else
+ fun_l4_n618(x)
+ end
+end
+
+def fun_l3_n374(x)
+ if (x < 1)
+ fun_l4_n941(x)
+ else
+ fun_l4_n746(x)
+ end
+end
+
+def fun_l3_n375(x)
+ if (x < 1)
+ fun_l4_n121(x)
+ else
+ fun_l4_n798(x)
+ end
+end
+
+def fun_l3_n376(x)
+ if (x < 1)
+ fun_l4_n851(x)
+ else
+ fun_l4_n681(x)
+ end
+end
+
+def fun_l3_n377(x)
+ if (x < 1)
+ fun_l4_n502(x)
+ else
+ fun_l4_n538(x)
+ end
+end
+
+def fun_l3_n378(x)
+ if (x < 1)
+ fun_l4_n432(x)
+ else
+ fun_l4_n226(x)
+ end
+end
+
+def fun_l3_n379(x)
+ if (x < 1)
+ fun_l4_n734(x)
+ else
+ fun_l4_n684(x)
+ end
+end
+
+def fun_l3_n380(x)
+ if (x < 1)
+ fun_l4_n912(x)
+ else
+ fun_l4_n116(x)
+ end
+end
+
+def fun_l3_n381(x)
+ if (x < 1)
+ fun_l4_n291(x)
+ else
+ fun_l4_n464(x)
+ end
+end
+
+def fun_l3_n382(x)
+ if (x < 1)
+ fun_l4_n285(x)
+ else
+ fun_l4_n943(x)
+ end
+end
+
+def fun_l3_n383(x)
+ if (x < 1)
+ fun_l4_n738(x)
+ else
+ fun_l4_n532(x)
+ end
+end
+
+def fun_l3_n384(x)
+ if (x < 1)
+ fun_l4_n503(x)
+ else
+ fun_l4_n724(x)
+ end
+end
+
+def fun_l3_n385(x)
+ if (x < 1)
+ fun_l4_n208(x)
+ else
+ fun_l4_n683(x)
+ end
+end
+
+def fun_l3_n386(x)
+ if (x < 1)
+ fun_l4_n673(x)
+ else
+ fun_l4_n230(x)
+ end
+end
+
+def fun_l3_n387(x)
+ if (x < 1)
+ fun_l4_n921(x)
+ else
+ fun_l4_n800(x)
+ end
+end
+
+def fun_l3_n388(x)
+ if (x < 1)
+ fun_l4_n461(x)
+ else
+ fun_l4_n369(x)
+ end
+end
+
+def fun_l3_n389(x)
+ if (x < 1)
+ fun_l4_n86(x)
+ else
+ fun_l4_n403(x)
+ end
+end
+
+def fun_l3_n390(x)
+ if (x < 1)
+ fun_l4_n883(x)
+ else
+ fun_l4_n92(x)
+ end
+end
+
+def fun_l3_n391(x)
+ if (x < 1)
+ fun_l4_n562(x)
+ else
+ fun_l4_n826(x)
+ end
+end
+
+def fun_l3_n392(x)
+ if (x < 1)
+ fun_l4_n459(x)
+ else
+ fun_l4_n821(x)
+ end
+end
+
+def fun_l3_n393(x)
+ if (x < 1)
+ fun_l4_n774(x)
+ else
+ fun_l4_n376(x)
+ end
+end
+
+def fun_l3_n394(x)
+ if (x < 1)
+ fun_l4_n114(x)
+ else
+ fun_l4_n451(x)
+ end
+end
+
+def fun_l3_n395(x)
+ if (x < 1)
+ fun_l4_n689(x)
+ else
+ fun_l4_n13(x)
+ end
+end
+
+def fun_l3_n396(x)
+ if (x < 1)
+ fun_l4_n929(x)
+ else
+ fun_l4_n777(x)
+ end
+end
+
+def fun_l3_n397(x)
+ if (x < 1)
+ fun_l4_n634(x)
+ else
+ fun_l4_n329(x)
+ end
+end
+
+def fun_l3_n398(x)
+ if (x < 1)
+ fun_l4_n972(x)
+ else
+ fun_l4_n572(x)
+ end
+end
+
+def fun_l3_n399(x)
+ if (x < 1)
+ fun_l4_n231(x)
+ else
+ fun_l4_n14(x)
+ end
+end
+
+def fun_l3_n400(x)
+ if (x < 1)
+ fun_l4_n357(x)
+ else
+ fun_l4_n881(x)
+ end
+end
+
+def fun_l3_n401(x)
+ if (x < 1)
+ fun_l4_n283(x)
+ else
+ fun_l4_n614(x)
+ end
+end
+
+def fun_l3_n402(x)
+ if (x < 1)
+ fun_l4_n634(x)
+ else
+ fun_l4_n653(x)
+ end
+end
+
+def fun_l3_n403(x)
+ if (x < 1)
+ fun_l4_n660(x)
+ else
+ fun_l4_n127(x)
+ end
+end
+
+def fun_l3_n404(x)
+ if (x < 1)
+ fun_l4_n523(x)
+ else
+ fun_l4_n467(x)
+ end
+end
+
+def fun_l3_n405(x)
+ if (x < 1)
+ fun_l4_n593(x)
+ else
+ fun_l4_n78(x)
+ end
+end
+
+def fun_l3_n406(x)
+ if (x < 1)
+ fun_l4_n514(x)
+ else
+ fun_l4_n783(x)
+ end
+end
+
+def fun_l3_n407(x)
+ if (x < 1)
+ fun_l4_n460(x)
+ else
+ fun_l4_n137(x)
+ end
+end
+
+def fun_l3_n408(x)
+ if (x < 1)
+ fun_l4_n3(x)
+ else
+ fun_l4_n224(x)
+ end
+end
+
+def fun_l3_n409(x)
+ if (x < 1)
+ fun_l4_n11(x)
+ else
+ fun_l4_n531(x)
+ end
+end
+
+def fun_l3_n410(x)
+ if (x < 1)
+ fun_l4_n94(x)
+ else
+ fun_l4_n717(x)
+ end
+end
+
+def fun_l3_n411(x)
+ if (x < 1)
+ fun_l4_n729(x)
+ else
+ fun_l4_n526(x)
+ end
+end
+
+def fun_l3_n412(x)
+ if (x < 1)
+ fun_l4_n86(x)
+ else
+ fun_l4_n26(x)
+ end
+end
+
+def fun_l3_n413(x)
+ if (x < 1)
+ fun_l4_n249(x)
+ else
+ fun_l4_n572(x)
+ end
+end
+
+def fun_l3_n414(x)
+ if (x < 1)
+ fun_l4_n578(x)
+ else
+ fun_l4_n512(x)
+ end
+end
+
+def fun_l3_n415(x)
+ if (x < 1)
+ fun_l4_n176(x)
+ else
+ fun_l4_n414(x)
+ end
+end
+
+def fun_l3_n416(x)
+ if (x < 1)
+ fun_l4_n757(x)
+ else
+ fun_l4_n385(x)
+ end
+end
+
+def fun_l3_n417(x)
+ if (x < 1)
+ fun_l4_n249(x)
+ else
+ fun_l4_n180(x)
+ end
+end
+
+def fun_l3_n418(x)
+ if (x < 1)
+ fun_l4_n193(x)
+ else
+ fun_l4_n294(x)
+ end
+end
+
+def fun_l3_n419(x)
+ if (x < 1)
+ fun_l4_n441(x)
+ else
+ fun_l4_n932(x)
+ end
+end
+
+def fun_l3_n420(x)
+ if (x < 1)
+ fun_l4_n492(x)
+ else
+ fun_l4_n239(x)
+ end
+end
+
+def fun_l3_n421(x)
+ if (x < 1)
+ fun_l4_n49(x)
+ else
+ fun_l4_n738(x)
+ end
+end
+
+def fun_l3_n422(x)
+ if (x < 1)
+ fun_l4_n546(x)
+ else
+ fun_l4_n285(x)
+ end
+end
+
+def fun_l3_n423(x)
+ if (x < 1)
+ fun_l4_n687(x)
+ else
+ fun_l4_n973(x)
+ end
+end
+
+def fun_l3_n424(x)
+ if (x < 1)
+ fun_l4_n876(x)
+ else
+ fun_l4_n591(x)
+ end
+end
+
+def fun_l3_n425(x)
+ if (x < 1)
+ fun_l4_n626(x)
+ else
+ fun_l4_n739(x)
+ end
+end
+
+def fun_l3_n426(x)
+ if (x < 1)
+ fun_l4_n439(x)
+ else
+ fun_l4_n709(x)
+ end
+end
+
+def fun_l3_n427(x)
+ if (x < 1)
+ fun_l4_n710(x)
+ else
+ fun_l4_n305(x)
+ end
+end
+
+def fun_l3_n428(x)
+ if (x < 1)
+ fun_l4_n61(x)
+ else
+ fun_l4_n520(x)
+ end
+end
+
+def fun_l3_n429(x)
+ if (x < 1)
+ fun_l4_n172(x)
+ else
+ fun_l4_n12(x)
+ end
+end
+
+def fun_l3_n430(x)
+ if (x < 1)
+ fun_l4_n432(x)
+ else
+ fun_l4_n174(x)
+ end
+end
+
+def fun_l3_n431(x)
+ if (x < 1)
+ fun_l4_n194(x)
+ else
+ fun_l4_n673(x)
+ end
+end
+
+def fun_l3_n432(x)
+ if (x < 1)
+ fun_l4_n952(x)
+ else
+ fun_l4_n798(x)
+ end
+end
+
+def fun_l3_n433(x)
+ if (x < 1)
+ fun_l4_n915(x)
+ else
+ fun_l4_n263(x)
+ end
+end
+
+def fun_l3_n434(x)
+ if (x < 1)
+ fun_l4_n735(x)
+ else
+ fun_l4_n882(x)
+ end
+end
+
+def fun_l3_n435(x)
+ if (x < 1)
+ fun_l4_n499(x)
+ else
+ fun_l4_n947(x)
+ end
+end
+
+def fun_l3_n436(x)
+ if (x < 1)
+ fun_l4_n744(x)
+ else
+ fun_l4_n187(x)
+ end
+end
+
+def fun_l3_n437(x)
+ if (x < 1)
+ fun_l4_n244(x)
+ else
+ fun_l4_n366(x)
+ end
+end
+
+def fun_l3_n438(x)
+ if (x < 1)
+ fun_l4_n228(x)
+ else
+ fun_l4_n866(x)
+ end
+end
+
+def fun_l3_n439(x)
+ if (x < 1)
+ fun_l4_n617(x)
+ else
+ fun_l4_n924(x)
+ end
+end
+
+def fun_l3_n440(x)
+ if (x < 1)
+ fun_l4_n302(x)
+ else
+ fun_l4_n691(x)
+ end
+end
+
+def fun_l3_n441(x)
+ if (x < 1)
+ fun_l4_n559(x)
+ else
+ fun_l4_n758(x)
+ end
+end
+
+def fun_l3_n442(x)
+ if (x < 1)
+ fun_l4_n412(x)
+ else
+ fun_l4_n544(x)
+ end
+end
+
+def fun_l3_n443(x)
+ if (x < 1)
+ fun_l4_n130(x)
+ else
+ fun_l4_n764(x)
+ end
+end
+
+def fun_l3_n444(x)
+ if (x < 1)
+ fun_l4_n135(x)
+ else
+ fun_l4_n65(x)
+ end
+end
+
+def fun_l3_n445(x)
+ if (x < 1)
+ fun_l4_n224(x)
+ else
+ fun_l4_n148(x)
+ end
+end
+
+def fun_l3_n446(x)
+ if (x < 1)
+ fun_l4_n238(x)
+ else
+ fun_l4_n808(x)
+ end
+end
+
+def fun_l3_n447(x)
+ if (x < 1)
+ fun_l4_n832(x)
+ else
+ fun_l4_n460(x)
+ end
+end
+
+def fun_l3_n448(x)
+ if (x < 1)
+ fun_l4_n897(x)
+ else
+ fun_l4_n817(x)
+ end
+end
+
+def fun_l3_n449(x)
+ if (x < 1)
+ fun_l4_n587(x)
+ else
+ fun_l4_n926(x)
+ end
+end
+
+def fun_l3_n450(x)
+ if (x < 1)
+ fun_l4_n575(x)
+ else
+ fun_l4_n274(x)
+ end
+end
+
+def fun_l3_n451(x)
+ if (x < 1)
+ fun_l4_n42(x)
+ else
+ fun_l4_n714(x)
+ end
+end
+
+def fun_l3_n452(x)
+ if (x < 1)
+ fun_l4_n101(x)
+ else
+ fun_l4_n470(x)
+ end
+end
+
+def fun_l3_n453(x)
+ if (x < 1)
+ fun_l4_n906(x)
+ else
+ fun_l4_n724(x)
+ end
+end
+
+def fun_l3_n454(x)
+ if (x < 1)
+ fun_l4_n682(x)
+ else
+ fun_l4_n709(x)
+ end
+end
+
+def fun_l3_n455(x)
+ if (x < 1)
+ fun_l4_n929(x)
+ else
+ fun_l4_n274(x)
+ end
+end
+
+def fun_l3_n456(x)
+ if (x < 1)
+ fun_l4_n10(x)
+ else
+ fun_l4_n101(x)
+ end
+end
+
+def fun_l3_n457(x)
+ if (x < 1)
+ fun_l4_n825(x)
+ else
+ fun_l4_n632(x)
+ end
+end
+
+def fun_l3_n458(x)
+ if (x < 1)
+ fun_l4_n2(x)
+ else
+ fun_l4_n723(x)
+ end
+end
+
+def fun_l3_n459(x)
+ if (x < 1)
+ fun_l4_n998(x)
+ else
+ fun_l4_n546(x)
+ end
+end
+
+def fun_l3_n460(x)
+ if (x < 1)
+ fun_l4_n483(x)
+ else
+ fun_l4_n445(x)
+ end
+end
+
+def fun_l3_n461(x)
+ if (x < 1)
+ fun_l4_n896(x)
+ else
+ fun_l4_n993(x)
+ end
+end
+
+def fun_l3_n462(x)
+ if (x < 1)
+ fun_l4_n710(x)
+ else
+ fun_l4_n529(x)
+ end
+end
+
+def fun_l3_n463(x)
+ if (x < 1)
+ fun_l4_n913(x)
+ else
+ fun_l4_n65(x)
+ end
+end
+
+def fun_l3_n464(x)
+ if (x < 1)
+ fun_l4_n712(x)
+ else
+ fun_l4_n412(x)
+ end
+end
+
+def fun_l3_n465(x)
+ if (x < 1)
+ fun_l4_n296(x)
+ else
+ fun_l4_n37(x)
+ end
+end
+
+def fun_l3_n466(x)
+ if (x < 1)
+ fun_l4_n241(x)
+ else
+ fun_l4_n649(x)
+ end
+end
+
+def fun_l3_n467(x)
+ if (x < 1)
+ fun_l4_n296(x)
+ else
+ fun_l4_n80(x)
+ end
+end
+
+def fun_l3_n468(x)
+ if (x < 1)
+ fun_l4_n270(x)
+ else
+ fun_l4_n192(x)
+ end
+end
+
+def fun_l3_n469(x)
+ if (x < 1)
+ fun_l4_n655(x)
+ else
+ fun_l4_n605(x)
+ end
+end
+
+def fun_l3_n470(x)
+ if (x < 1)
+ fun_l4_n180(x)
+ else
+ fun_l4_n807(x)
+ end
+end
+
+def fun_l3_n471(x)
+ if (x < 1)
+ fun_l4_n915(x)
+ else
+ fun_l4_n902(x)
+ end
+end
+
+def fun_l3_n472(x)
+ if (x < 1)
+ fun_l4_n527(x)
+ else
+ fun_l4_n638(x)
+ end
+end
+
+def fun_l3_n473(x)
+ if (x < 1)
+ fun_l4_n775(x)
+ else
+ fun_l4_n572(x)
+ end
+end
+
+def fun_l3_n474(x)
+ if (x < 1)
+ fun_l4_n856(x)
+ else
+ fun_l4_n182(x)
+ end
+end
+
+def fun_l3_n475(x)
+ if (x < 1)
+ fun_l4_n434(x)
+ else
+ fun_l4_n232(x)
+ end
+end
+
+def fun_l3_n476(x)
+ if (x < 1)
+ fun_l4_n208(x)
+ else
+ fun_l4_n37(x)
+ end
+end
+
+def fun_l3_n477(x)
+ if (x < 1)
+ fun_l4_n146(x)
+ else
+ fun_l4_n764(x)
+ end
+end
+
+def fun_l3_n478(x)
+ if (x < 1)
+ fun_l4_n806(x)
+ else
+ fun_l4_n148(x)
+ end
+end
+
+def fun_l3_n479(x)
+ if (x < 1)
+ fun_l4_n46(x)
+ else
+ fun_l4_n488(x)
+ end
+end
+
+def fun_l3_n480(x)
+ if (x < 1)
+ fun_l4_n637(x)
+ else
+ fun_l4_n48(x)
+ end
+end
+
+def fun_l3_n481(x)
+ if (x < 1)
+ fun_l4_n496(x)
+ else
+ fun_l4_n891(x)
+ end
+end
+
+def fun_l3_n482(x)
+ if (x < 1)
+ fun_l4_n282(x)
+ else
+ fun_l4_n736(x)
+ end
+end
+
+def fun_l3_n483(x)
+ if (x < 1)
+ fun_l4_n377(x)
+ else
+ fun_l4_n603(x)
+ end
+end
+
+def fun_l3_n484(x)
+ if (x < 1)
+ fun_l4_n689(x)
+ else
+ fun_l4_n201(x)
+ end
+end
+
+def fun_l3_n485(x)
+ if (x < 1)
+ fun_l4_n495(x)
+ else
+ fun_l4_n721(x)
+ end
+end
+
+def fun_l3_n486(x)
+ if (x < 1)
+ fun_l4_n128(x)
+ else
+ fun_l4_n400(x)
+ end
+end
+
+def fun_l3_n487(x)
+ if (x < 1)
+ fun_l4_n993(x)
+ else
+ fun_l4_n53(x)
+ end
+end
+
+def fun_l3_n488(x)
+ if (x < 1)
+ fun_l4_n913(x)
+ else
+ fun_l4_n814(x)
+ end
+end
+
+def fun_l3_n489(x)
+ if (x < 1)
+ fun_l4_n816(x)
+ else
+ fun_l4_n196(x)
+ end
+end
+
+def fun_l3_n490(x)
+ if (x < 1)
+ fun_l4_n754(x)
+ else
+ fun_l4_n451(x)
+ end
+end
+
+def fun_l3_n491(x)
+ if (x < 1)
+ fun_l4_n57(x)
+ else
+ fun_l4_n597(x)
+ end
+end
+
+def fun_l3_n492(x)
+ if (x < 1)
+ fun_l4_n539(x)
+ else
+ fun_l4_n893(x)
+ end
+end
+
+def fun_l3_n493(x)
+ if (x < 1)
+ fun_l4_n542(x)
+ else
+ fun_l4_n956(x)
+ end
+end
+
+def fun_l3_n494(x)
+ if (x < 1)
+ fun_l4_n479(x)
+ else
+ fun_l4_n448(x)
+ end
+end
+
+def fun_l3_n495(x)
+ if (x < 1)
+ fun_l4_n263(x)
+ else
+ fun_l4_n912(x)
+ end
+end
+
+def fun_l3_n496(x)
+ if (x < 1)
+ fun_l4_n463(x)
+ else
+ fun_l4_n112(x)
+ end
+end
+
+def fun_l3_n497(x)
+ if (x < 1)
+ fun_l4_n806(x)
+ else
+ fun_l4_n486(x)
+ end
+end
+
+def fun_l3_n498(x)
+ if (x < 1)
+ fun_l4_n155(x)
+ else
+ fun_l4_n298(x)
+ end
+end
+
+def fun_l3_n499(x)
+ if (x < 1)
+ fun_l4_n538(x)
+ else
+ fun_l4_n908(x)
+ end
+end
+
+def fun_l3_n500(x)
+ if (x < 1)
+ fun_l4_n769(x)
+ else
+ fun_l4_n681(x)
+ end
+end
+
+def fun_l3_n501(x)
+ if (x < 1)
+ fun_l4_n544(x)
+ else
+ fun_l4_n749(x)
+ end
+end
+
+def fun_l3_n502(x)
+ if (x < 1)
+ fun_l4_n505(x)
+ else
+ fun_l4_n66(x)
+ end
+end
+
+def fun_l3_n503(x)
+ if (x < 1)
+ fun_l4_n900(x)
+ else
+ fun_l4_n917(x)
+ end
+end
+
+def fun_l3_n504(x)
+ if (x < 1)
+ fun_l4_n982(x)
+ else
+ fun_l4_n707(x)
+ end
+end
+
+def fun_l3_n505(x)
+ if (x < 1)
+ fun_l4_n102(x)
+ else
+ fun_l4_n564(x)
+ end
+end
+
+def fun_l3_n506(x)
+ if (x < 1)
+ fun_l4_n332(x)
+ else
+ fun_l4_n367(x)
+ end
+end
+
+def fun_l3_n507(x)
+ if (x < 1)
+ fun_l4_n969(x)
+ else
+ fun_l4_n354(x)
+ end
+end
+
+def fun_l3_n508(x)
+ if (x < 1)
+ fun_l4_n405(x)
+ else
+ fun_l4_n485(x)
+ end
+end
+
+def fun_l3_n509(x)
+ if (x < 1)
+ fun_l4_n477(x)
+ else
+ fun_l4_n629(x)
+ end
+end
+
+def fun_l3_n510(x)
+ if (x < 1)
+ fun_l4_n753(x)
+ else
+ fun_l4_n78(x)
+ end
+end
+
+def fun_l3_n511(x)
+ if (x < 1)
+ fun_l4_n221(x)
+ else
+ fun_l4_n637(x)
+ end
+end
+
+def fun_l3_n512(x)
+ if (x < 1)
+ fun_l4_n540(x)
+ else
+ fun_l4_n267(x)
+ end
+end
+
+def fun_l3_n513(x)
+ if (x < 1)
+ fun_l4_n750(x)
+ else
+ fun_l4_n626(x)
+ end
+end
+
+def fun_l3_n514(x)
+ if (x < 1)
+ fun_l4_n160(x)
+ else
+ fun_l4_n32(x)
+ end
+end
+
+def fun_l3_n515(x)
+ if (x < 1)
+ fun_l4_n914(x)
+ else
+ fun_l4_n967(x)
+ end
+end
+
+def fun_l3_n516(x)
+ if (x < 1)
+ fun_l4_n380(x)
+ else
+ fun_l4_n83(x)
+ end
+end
+
+def fun_l3_n517(x)
+ if (x < 1)
+ fun_l4_n175(x)
+ else
+ fun_l4_n830(x)
+ end
+end
+
+def fun_l3_n518(x)
+ if (x < 1)
+ fun_l4_n579(x)
+ else
+ fun_l4_n773(x)
+ end
+end
+
+def fun_l3_n519(x)
+ if (x < 1)
+ fun_l4_n707(x)
+ else
+ fun_l4_n690(x)
+ end
+end
+
+def fun_l3_n520(x)
+ if (x < 1)
+ fun_l4_n587(x)
+ else
+ fun_l4_n754(x)
+ end
+end
+
+def fun_l3_n521(x)
+ if (x < 1)
+ fun_l4_n922(x)
+ else
+ fun_l4_n156(x)
+ end
+end
+
+def fun_l3_n522(x)
+ if (x < 1)
+ fun_l4_n299(x)
+ else
+ fun_l4_n937(x)
+ end
+end
+
+def fun_l3_n523(x)
+ if (x < 1)
+ fun_l4_n996(x)
+ else
+ fun_l4_n786(x)
+ end
+end
+
+def fun_l3_n524(x)
+ if (x < 1)
+ fun_l4_n988(x)
+ else
+ fun_l4_n930(x)
+ end
+end
+
+def fun_l3_n525(x)
+ if (x < 1)
+ fun_l4_n475(x)
+ else
+ fun_l4_n43(x)
+ end
+end
+
+def fun_l3_n526(x)
+ if (x < 1)
+ fun_l4_n367(x)
+ else
+ fun_l4_n167(x)
+ end
+end
+
+def fun_l3_n527(x)
+ if (x < 1)
+ fun_l4_n31(x)
+ else
+ fun_l4_n394(x)
+ end
+end
+
+def fun_l3_n528(x)
+ if (x < 1)
+ fun_l4_n92(x)
+ else
+ fun_l4_n304(x)
+ end
+end
+
+def fun_l3_n529(x)
+ if (x < 1)
+ fun_l4_n369(x)
+ else
+ fun_l4_n458(x)
+ end
+end
+
+def fun_l3_n530(x)
+ if (x < 1)
+ fun_l4_n475(x)
+ else
+ fun_l4_n8(x)
+ end
+end
+
+def fun_l3_n531(x)
+ if (x < 1)
+ fun_l4_n678(x)
+ else
+ fun_l4_n970(x)
+ end
+end
+
+def fun_l3_n532(x)
+ if (x < 1)
+ fun_l4_n349(x)
+ else
+ fun_l4_n853(x)
+ end
+end
+
+def fun_l3_n533(x)
+ if (x < 1)
+ fun_l4_n918(x)
+ else
+ fun_l4_n820(x)
+ end
+end
+
+def fun_l3_n534(x)
+ if (x < 1)
+ fun_l4_n369(x)
+ else
+ fun_l4_n445(x)
+ end
+end
+
+def fun_l3_n535(x)
+ if (x < 1)
+ fun_l4_n437(x)
+ else
+ fun_l4_n930(x)
+ end
+end
+
+def fun_l3_n536(x)
+ if (x < 1)
+ fun_l4_n143(x)
+ else
+ fun_l4_n986(x)
+ end
+end
+
+def fun_l3_n537(x)
+ if (x < 1)
+ fun_l4_n603(x)
+ else
+ fun_l4_n818(x)
+ end
+end
+
+def fun_l3_n538(x)
+ if (x < 1)
+ fun_l4_n14(x)
+ else
+ fun_l4_n994(x)
+ end
+end
+
+def fun_l3_n539(x)
+ if (x < 1)
+ fun_l4_n650(x)
+ else
+ fun_l4_n115(x)
+ end
+end
+
+def fun_l3_n540(x)
+ if (x < 1)
+ fun_l4_n74(x)
+ else
+ fun_l4_n559(x)
+ end
+end
+
+def fun_l3_n541(x)
+ if (x < 1)
+ fun_l4_n601(x)
+ else
+ fun_l4_n756(x)
+ end
+end
+
+def fun_l3_n542(x)
+ if (x < 1)
+ fun_l4_n733(x)
+ else
+ fun_l4_n274(x)
+ end
+end
+
+def fun_l3_n543(x)
+ if (x < 1)
+ fun_l4_n819(x)
+ else
+ fun_l4_n97(x)
+ end
+end
+
+def fun_l3_n544(x)
+ if (x < 1)
+ fun_l4_n949(x)
+ else
+ fun_l4_n868(x)
+ end
+end
+
+def fun_l3_n545(x)
+ if (x < 1)
+ fun_l4_n346(x)
+ else
+ fun_l4_n0(x)
+ end
+end
+
+def fun_l3_n546(x)
+ if (x < 1)
+ fun_l4_n820(x)
+ else
+ fun_l4_n188(x)
+ end
+end
+
+def fun_l3_n547(x)
+ if (x < 1)
+ fun_l4_n403(x)
+ else
+ fun_l4_n670(x)
+ end
+end
+
+def fun_l3_n548(x)
+ if (x < 1)
+ fun_l4_n449(x)
+ else
+ fun_l4_n96(x)
+ end
+end
+
+def fun_l3_n549(x)
+ if (x < 1)
+ fun_l4_n585(x)
+ else
+ fun_l4_n388(x)
+ end
+end
+
+def fun_l3_n550(x)
+ if (x < 1)
+ fun_l4_n963(x)
+ else
+ fun_l4_n979(x)
+ end
+end
+
+def fun_l3_n551(x)
+ if (x < 1)
+ fun_l4_n892(x)
+ else
+ fun_l4_n583(x)
+ end
+end
+
+def fun_l3_n552(x)
+ if (x < 1)
+ fun_l4_n846(x)
+ else
+ fun_l4_n508(x)
+ end
+end
+
+def fun_l3_n553(x)
+ if (x < 1)
+ fun_l4_n160(x)
+ else
+ fun_l4_n428(x)
+ end
+end
+
+def fun_l3_n554(x)
+ if (x < 1)
+ fun_l4_n538(x)
+ else
+ fun_l4_n641(x)
+ end
+end
+
+def fun_l3_n555(x)
+ if (x < 1)
+ fun_l4_n523(x)
+ else
+ fun_l4_n697(x)
+ end
+end
+
+def fun_l3_n556(x)
+ if (x < 1)
+ fun_l4_n212(x)
+ else
+ fun_l4_n0(x)
+ end
+end
+
+def fun_l3_n557(x)
+ if (x < 1)
+ fun_l4_n255(x)
+ else
+ fun_l4_n860(x)
+ end
+end
+
+def fun_l3_n558(x)
+ if (x < 1)
+ fun_l4_n807(x)
+ else
+ fun_l4_n865(x)
+ end
+end
+
+def fun_l3_n559(x)
+ if (x < 1)
+ fun_l4_n735(x)
+ else
+ fun_l4_n352(x)
+ end
+end
+
+def fun_l3_n560(x)
+ if (x < 1)
+ fun_l4_n327(x)
+ else
+ fun_l4_n739(x)
+ end
+end
+
+def fun_l3_n561(x)
+ if (x < 1)
+ fun_l4_n637(x)
+ else
+ fun_l4_n628(x)
+ end
+end
+
+def fun_l3_n562(x)
+ if (x < 1)
+ fun_l4_n281(x)
+ else
+ fun_l4_n394(x)
+ end
+end
+
+def fun_l3_n563(x)
+ if (x < 1)
+ fun_l4_n440(x)
+ else
+ fun_l4_n179(x)
+ end
+end
+
+def fun_l3_n564(x)
+ if (x < 1)
+ fun_l4_n893(x)
+ else
+ fun_l4_n396(x)
+ end
+end
+
+def fun_l3_n565(x)
+ if (x < 1)
+ fun_l4_n94(x)
+ else
+ fun_l4_n134(x)
+ end
+end
+
+def fun_l3_n566(x)
+ if (x < 1)
+ fun_l4_n968(x)
+ else
+ fun_l4_n444(x)
+ end
+end
+
+def fun_l3_n567(x)
+ if (x < 1)
+ fun_l4_n85(x)
+ else
+ fun_l4_n281(x)
+ end
+end
+
+def fun_l3_n568(x)
+ if (x < 1)
+ fun_l4_n164(x)
+ else
+ fun_l4_n229(x)
+ end
+end
+
+def fun_l3_n569(x)
+ if (x < 1)
+ fun_l4_n594(x)
+ else
+ fun_l4_n756(x)
+ end
+end
+
+def fun_l3_n570(x)
+ if (x < 1)
+ fun_l4_n77(x)
+ else
+ fun_l4_n370(x)
+ end
+end
+
+def fun_l3_n571(x)
+ if (x < 1)
+ fun_l4_n724(x)
+ else
+ fun_l4_n965(x)
+ end
+end
+
+def fun_l3_n572(x)
+ if (x < 1)
+ fun_l4_n394(x)
+ else
+ fun_l4_n595(x)
+ end
+end
+
+def fun_l3_n573(x)
+ if (x < 1)
+ fun_l4_n54(x)
+ else
+ fun_l4_n41(x)
+ end
+end
+
+def fun_l3_n574(x)
+ if (x < 1)
+ fun_l4_n951(x)
+ else
+ fun_l4_n414(x)
+ end
+end
+
+def fun_l3_n575(x)
+ if (x < 1)
+ fun_l4_n297(x)
+ else
+ fun_l4_n126(x)
+ end
+end
+
+def fun_l3_n576(x)
+ if (x < 1)
+ fun_l4_n538(x)
+ else
+ fun_l4_n276(x)
+ end
+end
+
+def fun_l3_n577(x)
+ if (x < 1)
+ fun_l4_n882(x)
+ else
+ fun_l4_n152(x)
+ end
+end
+
+def fun_l3_n578(x)
+ if (x < 1)
+ fun_l4_n950(x)
+ else
+ fun_l4_n822(x)
+ end
+end
+
+def fun_l3_n579(x)
+ if (x < 1)
+ fun_l4_n484(x)
+ else
+ fun_l4_n99(x)
+ end
+end
+
+def fun_l3_n580(x)
+ if (x < 1)
+ fun_l4_n160(x)
+ else
+ fun_l4_n98(x)
+ end
+end
+
+def fun_l3_n581(x)
+ if (x < 1)
+ fun_l4_n10(x)
+ else
+ fun_l4_n537(x)
+ end
+end
+
+def fun_l3_n582(x)
+ if (x < 1)
+ fun_l4_n419(x)
+ else
+ fun_l4_n285(x)
+ end
+end
+
+def fun_l3_n583(x)
+ if (x < 1)
+ fun_l4_n330(x)
+ else
+ fun_l4_n732(x)
+ end
+end
+
+def fun_l3_n584(x)
+ if (x < 1)
+ fun_l4_n64(x)
+ else
+ fun_l4_n461(x)
+ end
+end
+
+def fun_l3_n585(x)
+ if (x < 1)
+ fun_l4_n326(x)
+ else
+ fun_l4_n134(x)
+ end
+end
+
+def fun_l3_n586(x)
+ if (x < 1)
+ fun_l4_n423(x)
+ else
+ fun_l4_n945(x)
+ end
+end
+
+def fun_l3_n587(x)
+ if (x < 1)
+ fun_l4_n192(x)
+ else
+ fun_l4_n459(x)
+ end
+end
+
+def fun_l3_n588(x)
+ if (x < 1)
+ fun_l4_n292(x)
+ else
+ fun_l4_n697(x)
+ end
+end
+
+def fun_l3_n589(x)
+ if (x < 1)
+ fun_l4_n612(x)
+ else
+ fun_l4_n902(x)
+ end
+end
+
+def fun_l3_n590(x)
+ if (x < 1)
+ fun_l4_n842(x)
+ else
+ fun_l4_n300(x)
+ end
+end
+
+def fun_l3_n591(x)
+ if (x < 1)
+ fun_l4_n265(x)
+ else
+ fun_l4_n906(x)
+ end
+end
+
+def fun_l3_n592(x)
+ if (x < 1)
+ fun_l4_n82(x)
+ else
+ fun_l4_n417(x)
+ end
+end
+
+def fun_l3_n593(x)
+ if (x < 1)
+ fun_l4_n896(x)
+ else
+ fun_l4_n794(x)
+ end
+end
+
+def fun_l3_n594(x)
+ if (x < 1)
+ fun_l4_n760(x)
+ else
+ fun_l4_n83(x)
+ end
+end
+
+def fun_l3_n595(x)
+ if (x < 1)
+ fun_l4_n750(x)
+ else
+ fun_l4_n778(x)
+ end
+end
+
+def fun_l3_n596(x)
+ if (x < 1)
+ fun_l4_n655(x)
+ else
+ fun_l4_n8(x)
+ end
+end
+
+def fun_l3_n597(x)
+ if (x < 1)
+ fun_l4_n810(x)
+ else
+ fun_l4_n824(x)
+ end
+end
+
+def fun_l3_n598(x)
+ if (x < 1)
+ fun_l4_n904(x)
+ else
+ fun_l4_n921(x)
+ end
+end
+
+def fun_l3_n599(x)
+ if (x < 1)
+ fun_l4_n16(x)
+ else
+ fun_l4_n96(x)
+ end
+end
+
+def fun_l3_n600(x)
+ if (x < 1)
+ fun_l4_n879(x)
+ else
+ fun_l4_n757(x)
+ end
+end
+
+def fun_l3_n601(x)
+ if (x < 1)
+ fun_l4_n840(x)
+ else
+ fun_l4_n62(x)
+ end
+end
+
+def fun_l3_n602(x)
+ if (x < 1)
+ fun_l4_n547(x)
+ else
+ fun_l4_n45(x)
+ end
+end
+
+def fun_l3_n603(x)
+ if (x < 1)
+ fun_l4_n978(x)
+ else
+ fun_l4_n646(x)
+ end
+end
+
+def fun_l3_n604(x)
+ if (x < 1)
+ fun_l4_n100(x)
+ else
+ fun_l4_n654(x)
+ end
+end
+
+def fun_l3_n605(x)
+ if (x < 1)
+ fun_l4_n257(x)
+ else
+ fun_l4_n465(x)
+ end
+end
+
+def fun_l3_n606(x)
+ if (x < 1)
+ fun_l4_n427(x)
+ else
+ fun_l4_n489(x)
+ end
+end
+
+def fun_l3_n607(x)
+ if (x < 1)
+ fun_l4_n465(x)
+ else
+ fun_l4_n48(x)
+ end
+end
+
+def fun_l3_n608(x)
+ if (x < 1)
+ fun_l4_n571(x)
+ else
+ fun_l4_n332(x)
+ end
+end
+
+def fun_l3_n609(x)
+ if (x < 1)
+ fun_l4_n813(x)
+ else
+ fun_l4_n462(x)
+ end
+end
+
+def fun_l3_n610(x)
+ if (x < 1)
+ fun_l4_n931(x)
+ else
+ fun_l4_n913(x)
+ end
+end
+
+def fun_l3_n611(x)
+ if (x < 1)
+ fun_l4_n20(x)
+ else
+ fun_l4_n933(x)
+ end
+end
+
+def fun_l3_n612(x)
+ if (x < 1)
+ fun_l4_n913(x)
+ else
+ fun_l4_n787(x)
+ end
+end
+
+def fun_l3_n613(x)
+ if (x < 1)
+ fun_l4_n523(x)
+ else
+ fun_l4_n735(x)
+ end
+end
+
+def fun_l3_n614(x)
+ if (x < 1)
+ fun_l4_n315(x)
+ else
+ fun_l4_n913(x)
+ end
+end
+
+def fun_l3_n615(x)
+ if (x < 1)
+ fun_l4_n308(x)
+ else
+ fun_l4_n865(x)
+ end
+end
+
+def fun_l3_n616(x)
+ if (x < 1)
+ fun_l4_n847(x)
+ else
+ fun_l4_n506(x)
+ end
+end
+
+def fun_l3_n617(x)
+ if (x < 1)
+ fun_l4_n387(x)
+ else
+ fun_l4_n551(x)
+ end
+end
+
+def fun_l3_n618(x)
+ if (x < 1)
+ fun_l4_n276(x)
+ else
+ fun_l4_n991(x)
+ end
+end
+
+def fun_l3_n619(x)
+ if (x < 1)
+ fun_l4_n524(x)
+ else
+ fun_l4_n202(x)
+ end
+end
+
+def fun_l3_n620(x)
+ if (x < 1)
+ fun_l4_n836(x)
+ else
+ fun_l4_n548(x)
+ end
+end
+
+def fun_l3_n621(x)
+ if (x < 1)
+ fun_l4_n76(x)
+ else
+ fun_l4_n5(x)
+ end
+end
+
+def fun_l3_n622(x)
+ if (x < 1)
+ fun_l4_n223(x)
+ else
+ fun_l4_n438(x)
+ end
+end
+
+def fun_l3_n623(x)
+ if (x < 1)
+ fun_l4_n31(x)
+ else
+ fun_l4_n590(x)
+ end
+end
+
+def fun_l3_n624(x)
+ if (x < 1)
+ fun_l4_n609(x)
+ else
+ fun_l4_n513(x)
+ end
+end
+
+def fun_l3_n625(x)
+ if (x < 1)
+ fun_l4_n966(x)
+ else
+ fun_l4_n278(x)
+ end
+end
+
+def fun_l3_n626(x)
+ if (x < 1)
+ fun_l4_n82(x)
+ else
+ fun_l4_n100(x)
+ end
+end
+
+def fun_l3_n627(x)
+ if (x < 1)
+ fun_l4_n312(x)
+ else
+ fun_l4_n746(x)
+ end
+end
+
+def fun_l3_n628(x)
+ if (x < 1)
+ fun_l4_n682(x)
+ else
+ fun_l4_n791(x)
+ end
+end
+
+def fun_l3_n629(x)
+ if (x < 1)
+ fun_l4_n166(x)
+ else
+ fun_l4_n678(x)
+ end
+end
+
+def fun_l3_n630(x)
+ if (x < 1)
+ fun_l4_n507(x)
+ else
+ fun_l4_n778(x)
+ end
+end
+
+def fun_l3_n631(x)
+ if (x < 1)
+ fun_l4_n97(x)
+ else
+ fun_l4_n13(x)
+ end
+end
+
+def fun_l3_n632(x)
+ if (x < 1)
+ fun_l4_n976(x)
+ else
+ fun_l4_n794(x)
+ end
+end
+
+def fun_l3_n633(x)
+ if (x < 1)
+ fun_l4_n994(x)
+ else
+ fun_l4_n743(x)
+ end
+end
+
+def fun_l3_n634(x)
+ if (x < 1)
+ fun_l4_n212(x)
+ else
+ fun_l4_n754(x)
+ end
+end
+
+def fun_l3_n635(x)
+ if (x < 1)
+ fun_l4_n602(x)
+ else
+ fun_l4_n997(x)
+ end
+end
+
+def fun_l3_n636(x)
+ if (x < 1)
+ fun_l4_n282(x)
+ else
+ fun_l4_n133(x)
+ end
+end
+
+def fun_l3_n637(x)
+ if (x < 1)
+ fun_l4_n413(x)
+ else
+ fun_l4_n952(x)
+ end
+end
+
+def fun_l3_n638(x)
+ if (x < 1)
+ fun_l4_n843(x)
+ else
+ fun_l4_n783(x)
+ end
+end
+
+def fun_l3_n639(x)
+ if (x < 1)
+ fun_l4_n946(x)
+ else
+ fun_l4_n833(x)
+ end
+end
+
+def fun_l3_n640(x)
+ if (x < 1)
+ fun_l4_n384(x)
+ else
+ fun_l4_n444(x)
+ end
+end
+
+def fun_l3_n641(x)
+ if (x < 1)
+ fun_l4_n699(x)
+ else
+ fun_l4_n26(x)
+ end
+end
+
+def fun_l3_n642(x)
+ if (x < 1)
+ fun_l4_n96(x)
+ else
+ fun_l4_n623(x)
+ end
+end
+
+def fun_l3_n643(x)
+ if (x < 1)
+ fun_l4_n928(x)
+ else
+ fun_l4_n8(x)
+ end
+end
+
+def fun_l3_n644(x)
+ if (x < 1)
+ fun_l4_n804(x)
+ else
+ fun_l4_n618(x)
+ end
+end
+
+def fun_l3_n645(x)
+ if (x < 1)
+ fun_l4_n513(x)
+ else
+ fun_l4_n214(x)
+ end
+end
+
+def fun_l3_n646(x)
+ if (x < 1)
+ fun_l4_n605(x)
+ else
+ fun_l4_n920(x)
+ end
+end
+
+def fun_l3_n647(x)
+ if (x < 1)
+ fun_l4_n774(x)
+ else
+ fun_l4_n297(x)
+ end
+end
+
+def fun_l3_n648(x)
+ if (x < 1)
+ fun_l4_n871(x)
+ else
+ fun_l4_n75(x)
+ end
+end
+
+def fun_l3_n649(x)
+ if (x < 1)
+ fun_l4_n196(x)
+ else
+ fun_l4_n277(x)
+ end
+end
+
+def fun_l3_n650(x)
+ if (x < 1)
+ fun_l4_n25(x)
+ else
+ fun_l4_n681(x)
+ end
+end
+
+def fun_l3_n651(x)
+ if (x < 1)
+ fun_l4_n603(x)
+ else
+ fun_l4_n46(x)
+ end
+end
+
+def fun_l3_n652(x)
+ if (x < 1)
+ fun_l4_n623(x)
+ else
+ fun_l4_n604(x)
+ end
+end
+
+def fun_l3_n653(x)
+ if (x < 1)
+ fun_l4_n854(x)
+ else
+ fun_l4_n955(x)
+ end
+end
+
+def fun_l3_n654(x)
+ if (x < 1)
+ fun_l4_n667(x)
+ else
+ fun_l4_n988(x)
+ end
+end
+
+def fun_l3_n655(x)
+ if (x < 1)
+ fun_l4_n263(x)
+ else
+ fun_l4_n831(x)
+ end
+end
+
+def fun_l3_n656(x)
+ if (x < 1)
+ fun_l4_n591(x)
+ else
+ fun_l4_n593(x)
+ end
+end
+
+def fun_l3_n657(x)
+ if (x < 1)
+ fun_l4_n308(x)
+ else
+ fun_l4_n547(x)
+ end
+end
+
+def fun_l3_n658(x)
+ if (x < 1)
+ fun_l4_n780(x)
+ else
+ fun_l4_n174(x)
+ end
+end
+
+def fun_l3_n659(x)
+ if (x < 1)
+ fun_l4_n54(x)
+ else
+ fun_l4_n681(x)
+ end
+end
+
+def fun_l3_n660(x)
+ if (x < 1)
+ fun_l4_n279(x)
+ else
+ fun_l4_n282(x)
+ end
+end
+
+def fun_l3_n661(x)
+ if (x < 1)
+ fun_l4_n953(x)
+ else
+ fun_l4_n832(x)
+ end
+end
+
+def fun_l3_n662(x)
+ if (x < 1)
+ fun_l4_n525(x)
+ else
+ fun_l4_n850(x)
+ end
+end
+
+def fun_l3_n663(x)
+ if (x < 1)
+ fun_l4_n606(x)
+ else
+ fun_l4_n167(x)
+ end
+end
+
+def fun_l3_n664(x)
+ if (x < 1)
+ fun_l4_n941(x)
+ else
+ fun_l4_n591(x)
+ end
+end
+
+def fun_l3_n665(x)
+ if (x < 1)
+ fun_l4_n781(x)
+ else
+ fun_l4_n162(x)
+ end
+end
+
+def fun_l3_n666(x)
+ if (x < 1)
+ fun_l4_n848(x)
+ else
+ fun_l4_n133(x)
+ end
+end
+
+def fun_l3_n667(x)
+ if (x < 1)
+ fun_l4_n341(x)
+ else
+ fun_l4_n212(x)
+ end
+end
+
+def fun_l3_n668(x)
+ if (x < 1)
+ fun_l4_n320(x)
+ else
+ fun_l4_n131(x)
+ end
+end
+
+def fun_l3_n669(x)
+ if (x < 1)
+ fun_l4_n18(x)
+ else
+ fun_l4_n385(x)
+ end
+end
+
+def fun_l3_n670(x)
+ if (x < 1)
+ fun_l4_n917(x)
+ else
+ fun_l4_n988(x)
+ end
+end
+
+def fun_l3_n671(x)
+ if (x < 1)
+ fun_l4_n50(x)
+ else
+ fun_l4_n27(x)
+ end
+end
+
+def fun_l3_n672(x)
+ if (x < 1)
+ fun_l4_n277(x)
+ else
+ fun_l4_n238(x)
+ end
+end
+
+def fun_l3_n673(x)
+ if (x < 1)
+ fun_l4_n303(x)
+ else
+ fun_l4_n643(x)
+ end
+end
+
+def fun_l3_n674(x)
+ if (x < 1)
+ fun_l4_n794(x)
+ else
+ fun_l4_n906(x)
+ end
+end
+
+def fun_l3_n675(x)
+ if (x < 1)
+ fun_l4_n688(x)
+ else
+ fun_l4_n312(x)
+ end
+end
+
+def fun_l3_n676(x)
+ if (x < 1)
+ fun_l4_n833(x)
+ else
+ fun_l4_n900(x)
+ end
+end
+
+def fun_l3_n677(x)
+ if (x < 1)
+ fun_l4_n649(x)
+ else
+ fun_l4_n822(x)
+ end
+end
+
+def fun_l3_n678(x)
+ if (x < 1)
+ fun_l4_n958(x)
+ else
+ fun_l4_n939(x)
+ end
+end
+
+def fun_l3_n679(x)
+ if (x < 1)
+ fun_l4_n949(x)
+ else
+ fun_l4_n887(x)
+ end
+end
+
+def fun_l3_n680(x)
+ if (x < 1)
+ fun_l4_n630(x)
+ else
+ fun_l4_n508(x)
+ end
+end
+
+def fun_l3_n681(x)
+ if (x < 1)
+ fun_l4_n553(x)
+ else
+ fun_l4_n940(x)
+ end
+end
+
+def fun_l3_n682(x)
+ if (x < 1)
+ fun_l4_n180(x)
+ else
+ fun_l4_n950(x)
+ end
+end
+
+def fun_l3_n683(x)
+ if (x < 1)
+ fun_l4_n898(x)
+ else
+ fun_l4_n374(x)
+ end
+end
+
+def fun_l3_n684(x)
+ if (x < 1)
+ fun_l4_n802(x)
+ else
+ fun_l4_n527(x)
+ end
+end
+
+def fun_l3_n685(x)
+ if (x < 1)
+ fun_l4_n751(x)
+ else
+ fun_l4_n967(x)
+ end
+end
+
+def fun_l3_n686(x)
+ if (x < 1)
+ fun_l4_n235(x)
+ else
+ fun_l4_n559(x)
+ end
+end
+
+def fun_l3_n687(x)
+ if (x < 1)
+ fun_l4_n694(x)
+ else
+ fun_l4_n819(x)
+ end
+end
+
+def fun_l3_n688(x)
+ if (x < 1)
+ fun_l4_n167(x)
+ else
+ fun_l4_n91(x)
+ end
+end
+
+def fun_l3_n689(x)
+ if (x < 1)
+ fun_l4_n692(x)
+ else
+ fun_l4_n422(x)
+ end
+end
+
+def fun_l3_n690(x)
+ if (x < 1)
+ fun_l4_n344(x)
+ else
+ fun_l4_n738(x)
+ end
+end
+
+def fun_l3_n691(x)
+ if (x < 1)
+ fun_l4_n394(x)
+ else
+ fun_l4_n603(x)
+ end
+end
+
+def fun_l3_n692(x)
+ if (x < 1)
+ fun_l4_n909(x)
+ else
+ fun_l4_n528(x)
+ end
+end
+
+def fun_l3_n693(x)
+ if (x < 1)
+ fun_l4_n180(x)
+ else
+ fun_l4_n22(x)
+ end
+end
+
+def fun_l3_n694(x)
+ if (x < 1)
+ fun_l4_n6(x)
+ else
+ fun_l4_n777(x)
+ end
+end
+
+def fun_l3_n695(x)
+ if (x < 1)
+ fun_l4_n327(x)
+ else
+ fun_l4_n948(x)
+ end
+end
+
+def fun_l3_n696(x)
+ if (x < 1)
+ fun_l4_n748(x)
+ else
+ fun_l4_n706(x)
+ end
+end
+
+def fun_l3_n697(x)
+ if (x < 1)
+ fun_l4_n720(x)
+ else
+ fun_l4_n693(x)
+ end
+end
+
+def fun_l3_n698(x)
+ if (x < 1)
+ fun_l4_n282(x)
+ else
+ fun_l4_n755(x)
+ end
+end
+
+def fun_l3_n699(x)
+ if (x < 1)
+ fun_l4_n975(x)
+ else
+ fun_l4_n415(x)
+ end
+end
+
+def fun_l3_n700(x)
+ if (x < 1)
+ fun_l4_n684(x)
+ else
+ fun_l4_n738(x)
+ end
+end
+
+def fun_l3_n701(x)
+ if (x < 1)
+ fun_l4_n58(x)
+ else
+ fun_l4_n892(x)
+ end
+end
+
+def fun_l3_n702(x)
+ if (x < 1)
+ fun_l4_n366(x)
+ else
+ fun_l4_n189(x)
+ end
+end
+
+def fun_l3_n703(x)
+ if (x < 1)
+ fun_l4_n422(x)
+ else
+ fun_l4_n535(x)
+ end
+end
+
+def fun_l3_n704(x)
+ if (x < 1)
+ fun_l4_n886(x)
+ else
+ fun_l4_n223(x)
+ end
+end
+
+def fun_l3_n705(x)
+ if (x < 1)
+ fun_l4_n57(x)
+ else
+ fun_l4_n62(x)
+ end
+end
+
+def fun_l3_n706(x)
+ if (x < 1)
+ fun_l4_n629(x)
+ else
+ fun_l4_n479(x)
+ end
+end
+
+def fun_l3_n707(x)
+ if (x < 1)
+ fun_l4_n477(x)
+ else
+ fun_l4_n302(x)
+ end
+end
+
+def fun_l3_n708(x)
+ if (x < 1)
+ fun_l4_n790(x)
+ else
+ fun_l4_n262(x)
+ end
+end
+
+def fun_l3_n709(x)
+ if (x < 1)
+ fun_l4_n772(x)
+ else
+ fun_l4_n995(x)
+ end
+end
+
+def fun_l3_n710(x)
+ if (x < 1)
+ fun_l4_n549(x)
+ else
+ fun_l4_n651(x)
+ end
+end
+
+def fun_l3_n711(x)
+ if (x < 1)
+ fun_l4_n77(x)
+ else
+ fun_l4_n555(x)
+ end
+end
+
+def fun_l3_n712(x)
+ if (x < 1)
+ fun_l4_n515(x)
+ else
+ fun_l4_n734(x)
+ end
+end
+
+def fun_l3_n713(x)
+ if (x < 1)
+ fun_l4_n778(x)
+ else
+ fun_l4_n884(x)
+ end
+end
+
+def fun_l3_n714(x)
+ if (x < 1)
+ fun_l4_n235(x)
+ else
+ fun_l4_n637(x)
+ end
+end
+
+def fun_l3_n715(x)
+ if (x < 1)
+ fun_l4_n516(x)
+ else
+ fun_l4_n249(x)
+ end
+end
+
+def fun_l3_n716(x)
+ if (x < 1)
+ fun_l4_n44(x)
+ else
+ fun_l4_n307(x)
+ end
+end
+
+def fun_l3_n717(x)
+ if (x < 1)
+ fun_l4_n482(x)
+ else
+ fun_l4_n4(x)
+ end
+end
+
+def fun_l3_n718(x)
+ if (x < 1)
+ fun_l4_n195(x)
+ else
+ fun_l4_n410(x)
+ end
+end
+
+def fun_l3_n719(x)
+ if (x < 1)
+ fun_l4_n862(x)
+ else
+ fun_l4_n91(x)
+ end
+end
+
+def fun_l3_n720(x)
+ if (x < 1)
+ fun_l4_n591(x)
+ else
+ fun_l4_n391(x)
+ end
+end
+
+def fun_l3_n721(x)
+ if (x < 1)
+ fun_l4_n776(x)
+ else
+ fun_l4_n129(x)
+ end
+end
+
+def fun_l3_n722(x)
+ if (x < 1)
+ fun_l4_n857(x)
+ else
+ fun_l4_n160(x)
+ end
+end
+
+def fun_l3_n723(x)
+ if (x < 1)
+ fun_l4_n772(x)
+ else
+ fun_l4_n567(x)
+ end
+end
+
+def fun_l3_n724(x)
+ if (x < 1)
+ fun_l4_n582(x)
+ else
+ fun_l4_n100(x)
+ end
+end
+
+def fun_l3_n725(x)
+ if (x < 1)
+ fun_l4_n962(x)
+ else
+ fun_l4_n846(x)
+ end
+end
+
+def fun_l3_n726(x)
+ if (x < 1)
+ fun_l4_n892(x)
+ else
+ fun_l4_n334(x)
+ end
+end
+
+def fun_l3_n727(x)
+ if (x < 1)
+ fun_l4_n17(x)
+ else
+ fun_l4_n690(x)
+ end
+end
+
+def fun_l3_n728(x)
+ if (x < 1)
+ fun_l4_n453(x)
+ else
+ fun_l4_n234(x)
+ end
+end
+
+def fun_l3_n729(x)
+ if (x < 1)
+ fun_l4_n562(x)
+ else
+ fun_l4_n139(x)
+ end
+end
+
+def fun_l3_n730(x)
+ if (x < 1)
+ fun_l4_n87(x)
+ else
+ fun_l4_n513(x)
+ end
+end
+
+def fun_l3_n731(x)
+ if (x < 1)
+ fun_l4_n565(x)
+ else
+ fun_l4_n289(x)
+ end
+end
+
+def fun_l3_n732(x)
+ if (x < 1)
+ fun_l4_n821(x)
+ else
+ fun_l4_n290(x)
+ end
+end
+
+def fun_l3_n733(x)
+ if (x < 1)
+ fun_l4_n464(x)
+ else
+ fun_l4_n929(x)
+ end
+end
+
+def fun_l3_n734(x)
+ if (x < 1)
+ fun_l4_n617(x)
+ else
+ fun_l4_n230(x)
+ end
+end
+
+def fun_l3_n735(x)
+ if (x < 1)
+ fun_l4_n942(x)
+ else
+ fun_l4_n770(x)
+ end
+end
+
+def fun_l3_n736(x)
+ if (x < 1)
+ fun_l4_n826(x)
+ else
+ fun_l4_n414(x)
+ end
+end
+
+def fun_l3_n737(x)
+ if (x < 1)
+ fun_l4_n47(x)
+ else
+ fun_l4_n357(x)
+ end
+end
+
+def fun_l3_n738(x)
+ if (x < 1)
+ fun_l4_n582(x)
+ else
+ fun_l4_n652(x)
+ end
+end
+
+def fun_l3_n739(x)
+ if (x < 1)
+ fun_l4_n641(x)
+ else
+ fun_l4_n479(x)
+ end
+end
+
+def fun_l3_n740(x)
+ if (x < 1)
+ fun_l4_n11(x)
+ else
+ fun_l4_n965(x)
+ end
+end
+
+def fun_l3_n741(x)
+ if (x < 1)
+ fun_l4_n402(x)
+ else
+ fun_l4_n512(x)
+ end
+end
+
+def fun_l3_n742(x)
+ if (x < 1)
+ fun_l4_n300(x)
+ else
+ fun_l4_n942(x)
+ end
+end
+
+def fun_l3_n743(x)
+ if (x < 1)
+ fun_l4_n770(x)
+ else
+ fun_l4_n690(x)
+ end
+end
+
+def fun_l3_n744(x)
+ if (x < 1)
+ fun_l4_n575(x)
+ else
+ fun_l4_n158(x)
+ end
+end
+
+def fun_l3_n745(x)
+ if (x < 1)
+ fun_l4_n760(x)
+ else
+ fun_l4_n552(x)
+ end
+end
+
+def fun_l3_n746(x)
+ if (x < 1)
+ fun_l4_n887(x)
+ else
+ fun_l4_n319(x)
+ end
+end
+
+def fun_l3_n747(x)
+ if (x < 1)
+ fun_l4_n967(x)
+ else
+ fun_l4_n561(x)
+ end
+end
+
+def fun_l3_n748(x)
+ if (x < 1)
+ fun_l4_n4(x)
+ else
+ fun_l4_n766(x)
+ end
+end
+
+def fun_l3_n749(x)
+ if (x < 1)
+ fun_l4_n993(x)
+ else
+ fun_l4_n991(x)
+ end
+end
+
+def fun_l3_n750(x)
+ if (x < 1)
+ fun_l4_n890(x)
+ else
+ fun_l4_n663(x)
+ end
+end
+
+def fun_l3_n751(x)
+ if (x < 1)
+ fun_l4_n267(x)
+ else
+ fun_l4_n449(x)
+ end
+end
+
+def fun_l3_n752(x)
+ if (x < 1)
+ fun_l4_n540(x)
+ else
+ fun_l4_n226(x)
+ end
+end
+
+def fun_l3_n753(x)
+ if (x < 1)
+ fun_l4_n893(x)
+ else
+ fun_l4_n116(x)
+ end
+end
+
+def fun_l3_n754(x)
+ if (x < 1)
+ fun_l4_n570(x)
+ else
+ fun_l4_n192(x)
+ end
+end
+
+def fun_l3_n755(x)
+ if (x < 1)
+ fun_l4_n712(x)
+ else
+ fun_l4_n81(x)
+ end
+end
+
+def fun_l3_n756(x)
+ if (x < 1)
+ fun_l4_n833(x)
+ else
+ fun_l4_n24(x)
+ end
+end
+
+def fun_l3_n757(x)
+ if (x < 1)
+ fun_l4_n740(x)
+ else
+ fun_l4_n803(x)
+ end
+end
+
+def fun_l3_n758(x)
+ if (x < 1)
+ fun_l4_n552(x)
+ else
+ fun_l4_n551(x)
+ end
+end
+
+def fun_l3_n759(x)
+ if (x < 1)
+ fun_l4_n570(x)
+ else
+ fun_l4_n677(x)
+ end
+end
+
+def fun_l3_n760(x)
+ if (x < 1)
+ fun_l4_n243(x)
+ else
+ fun_l4_n677(x)
+ end
+end
+
+def fun_l3_n761(x)
+ if (x < 1)
+ fun_l4_n65(x)
+ else
+ fun_l4_n660(x)
+ end
+end
+
+def fun_l3_n762(x)
+ if (x < 1)
+ fun_l4_n989(x)
+ else
+ fun_l4_n761(x)
+ end
+end
+
+def fun_l3_n763(x)
+ if (x < 1)
+ fun_l4_n971(x)
+ else
+ fun_l4_n280(x)
+ end
+end
+
+def fun_l3_n764(x)
+ if (x < 1)
+ fun_l4_n441(x)
+ else
+ fun_l4_n506(x)
+ end
+end
+
+def fun_l3_n765(x)
+ if (x < 1)
+ fun_l4_n577(x)
+ else
+ fun_l4_n586(x)
+ end
+end
+
+def fun_l3_n766(x)
+ if (x < 1)
+ fun_l4_n385(x)
+ else
+ fun_l4_n60(x)
+ end
+end
+
+def fun_l3_n767(x)
+ if (x < 1)
+ fun_l4_n380(x)
+ else
+ fun_l4_n32(x)
+ end
+end
+
+def fun_l3_n768(x)
+ if (x < 1)
+ fun_l4_n797(x)
+ else
+ fun_l4_n437(x)
+ end
+end
+
+def fun_l3_n769(x)
+ if (x < 1)
+ fun_l4_n615(x)
+ else
+ fun_l4_n369(x)
+ end
+end
+
+def fun_l3_n770(x)
+ if (x < 1)
+ fun_l4_n779(x)
+ else
+ fun_l4_n194(x)
+ end
+end
+
+def fun_l3_n771(x)
+ if (x < 1)
+ fun_l4_n287(x)
+ else
+ fun_l4_n819(x)
+ end
+end
+
+def fun_l3_n772(x)
+ if (x < 1)
+ fun_l4_n405(x)
+ else
+ fun_l4_n738(x)
+ end
+end
+
+def fun_l3_n773(x)
+ if (x < 1)
+ fun_l4_n706(x)
+ else
+ fun_l4_n174(x)
+ end
+end
+
+def fun_l3_n774(x)
+ if (x < 1)
+ fun_l4_n690(x)
+ else
+ fun_l4_n841(x)
+ end
+end
+
+def fun_l3_n775(x)
+ if (x < 1)
+ fun_l4_n256(x)
+ else
+ fun_l4_n179(x)
+ end
+end
+
+def fun_l3_n776(x)
+ if (x < 1)
+ fun_l4_n342(x)
+ else
+ fun_l4_n359(x)
+ end
+end
+
+def fun_l3_n777(x)
+ if (x < 1)
+ fun_l4_n371(x)
+ else
+ fun_l4_n680(x)
+ end
+end
+
+def fun_l3_n778(x)
+ if (x < 1)
+ fun_l4_n996(x)
+ else
+ fun_l4_n343(x)
+ end
+end
+
+def fun_l3_n779(x)
+ if (x < 1)
+ fun_l4_n96(x)
+ else
+ fun_l4_n893(x)
+ end
+end
+
+def fun_l3_n780(x)
+ if (x < 1)
+ fun_l4_n706(x)
+ else
+ fun_l4_n140(x)
+ end
+end
+
+def fun_l3_n781(x)
+ if (x < 1)
+ fun_l4_n349(x)
+ else
+ fun_l4_n317(x)
+ end
+end
+
+def fun_l3_n782(x)
+ if (x < 1)
+ fun_l4_n491(x)
+ else
+ fun_l4_n616(x)
+ end
+end
+
+def fun_l3_n783(x)
+ if (x < 1)
+ fun_l4_n227(x)
+ else
+ fun_l4_n356(x)
+ end
+end
+
+def fun_l3_n784(x)
+ if (x < 1)
+ fun_l4_n387(x)
+ else
+ fun_l4_n532(x)
+ end
+end
+
+def fun_l3_n785(x)
+ if (x < 1)
+ fun_l4_n648(x)
+ else
+ fun_l4_n34(x)
+ end
+end
+
+def fun_l3_n786(x)
+ if (x < 1)
+ fun_l4_n562(x)
+ else
+ fun_l4_n476(x)
+ end
+end
+
+def fun_l3_n787(x)
+ if (x < 1)
+ fun_l4_n162(x)
+ else
+ fun_l4_n384(x)
+ end
+end
+
+def fun_l3_n788(x)
+ if (x < 1)
+ fun_l4_n221(x)
+ else
+ fun_l4_n617(x)
+ end
+end
+
+def fun_l3_n789(x)
+ if (x < 1)
+ fun_l4_n670(x)
+ else
+ fun_l4_n350(x)
+ end
+end
+
+def fun_l3_n790(x)
+ if (x < 1)
+ fun_l4_n202(x)
+ else
+ fun_l4_n112(x)
+ end
+end
+
+def fun_l3_n791(x)
+ if (x < 1)
+ fun_l4_n390(x)
+ else
+ fun_l4_n868(x)
+ end
+end
+
+def fun_l3_n792(x)
+ if (x < 1)
+ fun_l4_n746(x)
+ else
+ fun_l4_n833(x)
+ end
+end
+
+def fun_l3_n793(x)
+ if (x < 1)
+ fun_l4_n471(x)
+ else
+ fun_l4_n60(x)
+ end
+end
+
+def fun_l3_n794(x)
+ if (x < 1)
+ fun_l4_n583(x)
+ else
+ fun_l4_n470(x)
+ end
+end
+
+def fun_l3_n795(x)
+ if (x < 1)
+ fun_l4_n567(x)
+ else
+ fun_l4_n218(x)
+ end
+end
+
+def fun_l3_n796(x)
+ if (x < 1)
+ fun_l4_n140(x)
+ else
+ fun_l4_n690(x)
+ end
+end
+
+def fun_l3_n797(x)
+ if (x < 1)
+ fun_l4_n190(x)
+ else
+ fun_l4_n437(x)
+ end
+end
+
+def fun_l3_n798(x)
+ if (x < 1)
+ fun_l4_n684(x)
+ else
+ fun_l4_n843(x)
+ end
+end
+
+def fun_l3_n799(x)
+ if (x < 1)
+ fun_l4_n825(x)
+ else
+ fun_l4_n354(x)
+ end
+end
+
+def fun_l3_n800(x)
+ if (x < 1)
+ fun_l4_n711(x)
+ else
+ fun_l4_n606(x)
+ end
+end
+
+def fun_l3_n801(x)
+ if (x < 1)
+ fun_l4_n756(x)
+ else
+ fun_l4_n464(x)
+ end
+end
+
+def fun_l3_n802(x)
+ if (x < 1)
+ fun_l4_n143(x)
+ else
+ fun_l4_n962(x)
+ end
+end
+
+def fun_l3_n803(x)
+ if (x < 1)
+ fun_l4_n223(x)
+ else
+ fun_l4_n293(x)
+ end
+end
+
+def fun_l3_n804(x)
+ if (x < 1)
+ fun_l4_n832(x)
+ else
+ fun_l4_n632(x)
+ end
+end
+
+def fun_l3_n805(x)
+ if (x < 1)
+ fun_l4_n649(x)
+ else
+ fun_l4_n259(x)
+ end
+end
+
+def fun_l3_n806(x)
+ if (x < 1)
+ fun_l4_n617(x)
+ else
+ fun_l4_n993(x)
+ end
+end
+
+def fun_l3_n807(x)
+ if (x < 1)
+ fun_l4_n257(x)
+ else
+ fun_l4_n712(x)
+ end
+end
+
+def fun_l3_n808(x)
+ if (x < 1)
+ fun_l4_n632(x)
+ else
+ fun_l4_n563(x)
+ end
+end
+
+def fun_l3_n809(x)
+ if (x < 1)
+ fun_l4_n154(x)
+ else
+ fun_l4_n561(x)
+ end
+end
+
+def fun_l3_n810(x)
+ if (x < 1)
+ fun_l4_n411(x)
+ else
+ fun_l4_n42(x)
+ end
+end
+
+def fun_l3_n811(x)
+ if (x < 1)
+ fun_l4_n560(x)
+ else
+ fun_l4_n531(x)
+ end
+end
+
+def fun_l3_n812(x)
+ if (x < 1)
+ fun_l4_n759(x)
+ else
+ fun_l4_n588(x)
+ end
+end
+
+def fun_l3_n813(x)
+ if (x < 1)
+ fun_l4_n311(x)
+ else
+ fun_l4_n813(x)
+ end
+end
+
+def fun_l3_n814(x)
+ if (x < 1)
+ fun_l4_n521(x)
+ else
+ fun_l4_n877(x)
+ end
+end
+
+def fun_l3_n815(x)
+ if (x < 1)
+ fun_l4_n578(x)
+ else
+ fun_l4_n37(x)
+ end
+end
+
+def fun_l3_n816(x)
+ if (x < 1)
+ fun_l4_n337(x)
+ else
+ fun_l4_n562(x)
+ end
+end
+
+def fun_l3_n817(x)
+ if (x < 1)
+ fun_l4_n523(x)
+ else
+ fun_l4_n445(x)
+ end
+end
+
+def fun_l3_n818(x)
+ if (x < 1)
+ fun_l4_n256(x)
+ else
+ fun_l4_n551(x)
+ end
+end
+
+def fun_l3_n819(x)
+ if (x < 1)
+ fun_l4_n718(x)
+ else
+ fun_l4_n463(x)
+ end
+end
+
+def fun_l3_n820(x)
+ if (x < 1)
+ fun_l4_n780(x)
+ else
+ fun_l4_n103(x)
+ end
+end
+
+def fun_l3_n821(x)
+ if (x < 1)
+ fun_l4_n729(x)
+ else
+ fun_l4_n331(x)
+ end
+end
+
+def fun_l3_n822(x)
+ if (x < 1)
+ fun_l4_n84(x)
+ else
+ fun_l4_n176(x)
+ end
+end
+
+def fun_l3_n823(x)
+ if (x < 1)
+ fun_l4_n231(x)
+ else
+ fun_l4_n681(x)
+ end
+end
+
+def fun_l3_n824(x)
+ if (x < 1)
+ fun_l4_n675(x)
+ else
+ fun_l4_n837(x)
+ end
+end
+
+def fun_l3_n825(x)
+ if (x < 1)
+ fun_l4_n140(x)
+ else
+ fun_l4_n932(x)
+ end
+end
+
+def fun_l3_n826(x)
+ if (x < 1)
+ fun_l4_n268(x)
+ else
+ fun_l4_n908(x)
+ end
+end
+
+def fun_l3_n827(x)
+ if (x < 1)
+ fun_l4_n959(x)
+ else
+ fun_l4_n643(x)
+ end
+end
+
+def fun_l3_n828(x)
+ if (x < 1)
+ fun_l4_n290(x)
+ else
+ fun_l4_n718(x)
+ end
+end
+
+def fun_l3_n829(x)
+ if (x < 1)
+ fun_l4_n430(x)
+ else
+ fun_l4_n114(x)
+ end
+end
+
+def fun_l3_n830(x)
+ if (x < 1)
+ fun_l4_n817(x)
+ else
+ fun_l4_n296(x)
+ end
+end
+
+def fun_l3_n831(x)
+ if (x < 1)
+ fun_l4_n586(x)
+ else
+ fun_l4_n345(x)
+ end
+end
+
+def fun_l3_n832(x)
+ if (x < 1)
+ fun_l4_n321(x)
+ else
+ fun_l4_n805(x)
+ end
+end
+
+def fun_l3_n833(x)
+ if (x < 1)
+ fun_l4_n57(x)
+ else
+ fun_l4_n373(x)
+ end
+end
+
+def fun_l3_n834(x)
+ if (x < 1)
+ fun_l4_n344(x)
+ else
+ fun_l4_n654(x)
+ end
+end
+
+def fun_l3_n835(x)
+ if (x < 1)
+ fun_l4_n761(x)
+ else
+ fun_l4_n295(x)
+ end
+end
+
+def fun_l3_n836(x)
+ if (x < 1)
+ fun_l4_n169(x)
+ else
+ fun_l4_n184(x)
+ end
+end
+
+def fun_l3_n837(x)
+ if (x < 1)
+ fun_l4_n482(x)
+ else
+ fun_l4_n127(x)
+ end
+end
+
+def fun_l3_n838(x)
+ if (x < 1)
+ fun_l4_n260(x)
+ else
+ fun_l4_n662(x)
+ end
+end
+
+def fun_l3_n839(x)
+ if (x < 1)
+ fun_l4_n548(x)
+ else
+ fun_l4_n197(x)
+ end
+end
+
+def fun_l3_n840(x)
+ if (x < 1)
+ fun_l4_n96(x)
+ else
+ fun_l4_n17(x)
+ end
+end
+
+def fun_l3_n841(x)
+ if (x < 1)
+ fun_l4_n946(x)
+ else
+ fun_l4_n447(x)
+ end
+end
+
+def fun_l3_n842(x)
+ if (x < 1)
+ fun_l4_n66(x)
+ else
+ fun_l4_n110(x)
+ end
+end
+
+def fun_l3_n843(x)
+ if (x < 1)
+ fun_l4_n574(x)
+ else
+ fun_l4_n887(x)
+ end
+end
+
+def fun_l3_n844(x)
+ if (x < 1)
+ fun_l4_n912(x)
+ else
+ fun_l4_n465(x)
+ end
+end
+
+def fun_l3_n845(x)
+ if (x < 1)
+ fun_l4_n401(x)
+ else
+ fun_l4_n903(x)
+ end
+end
+
+def fun_l3_n846(x)
+ if (x < 1)
+ fun_l4_n929(x)
+ else
+ fun_l4_n238(x)
+ end
+end
+
+def fun_l3_n847(x)
+ if (x < 1)
+ fun_l4_n579(x)
+ else
+ fun_l4_n924(x)
+ end
+end
+
+def fun_l3_n848(x)
+ if (x < 1)
+ fun_l4_n697(x)
+ else
+ fun_l4_n157(x)
+ end
+end
+
+def fun_l3_n849(x)
+ if (x < 1)
+ fun_l4_n608(x)
+ else
+ fun_l4_n426(x)
+ end
+end
+
+def fun_l3_n850(x)
+ if (x < 1)
+ fun_l4_n710(x)
+ else
+ fun_l4_n360(x)
+ end
+end
+
+def fun_l3_n851(x)
+ if (x < 1)
+ fun_l4_n558(x)
+ else
+ fun_l4_n152(x)
+ end
+end
+
+def fun_l3_n852(x)
+ if (x < 1)
+ fun_l4_n276(x)
+ else
+ fun_l4_n895(x)
+ end
+end
+
+def fun_l3_n853(x)
+ if (x < 1)
+ fun_l4_n945(x)
+ else
+ fun_l4_n251(x)
+ end
+end
+
+def fun_l3_n854(x)
+ if (x < 1)
+ fun_l4_n131(x)
+ else
+ fun_l4_n677(x)
+ end
+end
+
+def fun_l3_n855(x)
+ if (x < 1)
+ fun_l4_n493(x)
+ else
+ fun_l4_n631(x)
+ end
+end
+
+def fun_l3_n856(x)
+ if (x < 1)
+ fun_l4_n608(x)
+ else
+ fun_l4_n556(x)
+ end
+end
+
+def fun_l3_n857(x)
+ if (x < 1)
+ fun_l4_n808(x)
+ else
+ fun_l4_n672(x)
+ end
+end
+
+def fun_l3_n858(x)
+ if (x < 1)
+ fun_l4_n407(x)
+ else
+ fun_l4_n648(x)
+ end
+end
+
+def fun_l3_n859(x)
+ if (x < 1)
+ fun_l4_n217(x)
+ else
+ fun_l4_n763(x)
+ end
+end
+
+def fun_l3_n860(x)
+ if (x < 1)
+ fun_l4_n941(x)
+ else
+ fun_l4_n159(x)
+ end
+end
+
+def fun_l3_n861(x)
+ if (x < 1)
+ fun_l4_n364(x)
+ else
+ fun_l4_n241(x)
+ end
+end
+
+def fun_l3_n862(x)
+ if (x < 1)
+ fun_l4_n915(x)
+ else
+ fun_l4_n729(x)
+ end
+end
+
+def fun_l3_n863(x)
+ if (x < 1)
+ fun_l4_n137(x)
+ else
+ fun_l4_n317(x)
+ end
+end
+
+def fun_l3_n864(x)
+ if (x < 1)
+ fun_l4_n818(x)
+ else
+ fun_l4_n782(x)
+ end
+end
+
+def fun_l3_n865(x)
+ if (x < 1)
+ fun_l4_n577(x)
+ else
+ fun_l4_n418(x)
+ end
+end
+
+def fun_l3_n866(x)
+ if (x < 1)
+ fun_l4_n882(x)
+ else
+ fun_l4_n7(x)
+ end
+end
+
+def fun_l3_n867(x)
+ if (x < 1)
+ fun_l4_n238(x)
+ else
+ fun_l4_n944(x)
+ end
+end
+
+def fun_l3_n868(x)
+ if (x < 1)
+ fun_l4_n105(x)
+ else
+ fun_l4_n465(x)
+ end
+end
+
+def fun_l3_n869(x)
+ if (x < 1)
+ fun_l4_n841(x)
+ else
+ fun_l4_n262(x)
+ end
+end
+
+def fun_l3_n870(x)
+ if (x < 1)
+ fun_l4_n32(x)
+ else
+ fun_l4_n992(x)
+ end
+end
+
+def fun_l3_n871(x)
+ if (x < 1)
+ fun_l4_n431(x)
+ else
+ fun_l4_n391(x)
+ end
+end
+
+def fun_l3_n872(x)
+ if (x < 1)
+ fun_l4_n829(x)
+ else
+ fun_l4_n879(x)
+ end
+end
+
+def fun_l3_n873(x)
+ if (x < 1)
+ fun_l4_n617(x)
+ else
+ fun_l4_n657(x)
+ end
+end
+
+def fun_l3_n874(x)
+ if (x < 1)
+ fun_l4_n529(x)
+ else
+ fun_l4_n717(x)
+ end
+end
+
+def fun_l3_n875(x)
+ if (x < 1)
+ fun_l4_n928(x)
+ else
+ fun_l4_n476(x)
+ end
+end
+
+def fun_l3_n876(x)
+ if (x < 1)
+ fun_l4_n388(x)
+ else
+ fun_l4_n949(x)
+ end
+end
+
+def fun_l3_n877(x)
+ if (x < 1)
+ fun_l4_n826(x)
+ else
+ fun_l4_n560(x)
+ end
+end
+
+def fun_l3_n878(x)
+ if (x < 1)
+ fun_l4_n863(x)
+ else
+ fun_l4_n122(x)
+ end
+end
+
+def fun_l3_n879(x)
+ if (x < 1)
+ fun_l4_n964(x)
+ else
+ fun_l4_n793(x)
+ end
+end
+
+def fun_l3_n880(x)
+ if (x < 1)
+ fun_l4_n141(x)
+ else
+ fun_l4_n132(x)
+ end
+end
+
+def fun_l3_n881(x)
+ if (x < 1)
+ fun_l4_n735(x)
+ else
+ fun_l4_n592(x)
+ end
+end
+
+def fun_l3_n882(x)
+ if (x < 1)
+ fun_l4_n585(x)
+ else
+ fun_l4_n341(x)
+ end
+end
+
+def fun_l3_n883(x)
+ if (x < 1)
+ fun_l4_n843(x)
+ else
+ fun_l4_n692(x)
+ end
+end
+
+def fun_l3_n884(x)
+ if (x < 1)
+ fun_l4_n360(x)
+ else
+ fun_l4_n833(x)
+ end
+end
+
+def fun_l3_n885(x)
+ if (x < 1)
+ fun_l4_n31(x)
+ else
+ fun_l4_n62(x)
+ end
+end
+
+def fun_l3_n886(x)
+ if (x < 1)
+ fun_l4_n756(x)
+ else
+ fun_l4_n699(x)
+ end
+end
+
+def fun_l3_n887(x)
+ if (x < 1)
+ fun_l4_n71(x)
+ else
+ fun_l4_n256(x)
+ end
+end
+
+def fun_l3_n888(x)
+ if (x < 1)
+ fun_l4_n406(x)
+ else
+ fun_l4_n493(x)
+ end
+end
+
+def fun_l3_n889(x)
+ if (x < 1)
+ fun_l4_n489(x)
+ else
+ fun_l4_n874(x)
+ end
+end
+
+def fun_l3_n890(x)
+ if (x < 1)
+ fun_l4_n365(x)
+ else
+ fun_l4_n910(x)
+ end
+end
+
+def fun_l3_n891(x)
+ if (x < 1)
+ fun_l4_n262(x)
+ else
+ fun_l4_n665(x)
+ end
+end
+
+def fun_l3_n892(x)
+ if (x < 1)
+ fun_l4_n274(x)
+ else
+ fun_l4_n849(x)
+ end
+end
+
+def fun_l3_n893(x)
+ if (x < 1)
+ fun_l4_n880(x)
+ else
+ fun_l4_n739(x)
+ end
+end
+
+def fun_l3_n894(x)
+ if (x < 1)
+ fun_l4_n504(x)
+ else
+ fun_l4_n128(x)
+ end
+end
+
+def fun_l3_n895(x)
+ if (x < 1)
+ fun_l4_n555(x)
+ else
+ fun_l4_n281(x)
+ end
+end
+
+def fun_l3_n896(x)
+ if (x < 1)
+ fun_l4_n270(x)
+ else
+ fun_l4_n225(x)
+ end
+end
+
+def fun_l3_n897(x)
+ if (x < 1)
+ fun_l4_n38(x)
+ else
+ fun_l4_n26(x)
+ end
+end
+
+def fun_l3_n898(x)
+ if (x < 1)
+ fun_l4_n944(x)
+ else
+ fun_l4_n217(x)
+ end
+end
+
+def fun_l3_n899(x)
+ if (x < 1)
+ fun_l4_n967(x)
+ else
+ fun_l4_n853(x)
+ end
+end
+
+def fun_l3_n900(x)
+ if (x < 1)
+ fun_l4_n686(x)
+ else
+ fun_l4_n760(x)
+ end
+end
+
+def fun_l3_n901(x)
+ if (x < 1)
+ fun_l4_n698(x)
+ else
+ fun_l4_n842(x)
+ end
+end
+
+def fun_l3_n902(x)
+ if (x < 1)
+ fun_l4_n344(x)
+ else
+ fun_l4_n701(x)
+ end
+end
+
+def fun_l3_n903(x)
+ if (x < 1)
+ fun_l4_n756(x)
+ else
+ fun_l4_n321(x)
+ end
+end
+
+def fun_l3_n904(x)
+ if (x < 1)
+ fun_l4_n504(x)
+ else
+ fun_l4_n228(x)
+ end
+end
+
+def fun_l3_n905(x)
+ if (x < 1)
+ fun_l4_n135(x)
+ else
+ fun_l4_n57(x)
+ end
+end
+
+def fun_l3_n906(x)
+ if (x < 1)
+ fun_l4_n279(x)
+ else
+ fun_l4_n912(x)
+ end
+end
+
+def fun_l3_n907(x)
+ if (x < 1)
+ fun_l4_n962(x)
+ else
+ fun_l4_n418(x)
+ end
+end
+
+def fun_l3_n908(x)
+ if (x < 1)
+ fun_l4_n972(x)
+ else
+ fun_l4_n14(x)
+ end
+end
+
+def fun_l3_n909(x)
+ if (x < 1)
+ fun_l4_n231(x)
+ else
+ fun_l4_n763(x)
+ end
+end
+
+def fun_l3_n910(x)
+ if (x < 1)
+ fun_l4_n859(x)
+ else
+ fun_l4_n243(x)
+ end
+end
+
+def fun_l3_n911(x)
+ if (x < 1)
+ fun_l4_n153(x)
+ else
+ fun_l4_n136(x)
+ end
+end
+
+def fun_l3_n912(x)
+ if (x < 1)
+ fun_l4_n325(x)
+ else
+ fun_l4_n113(x)
+ end
+end
+
+def fun_l3_n913(x)
+ if (x < 1)
+ fun_l4_n625(x)
+ else
+ fun_l4_n179(x)
+ end
+end
+
+def fun_l3_n914(x)
+ if (x < 1)
+ fun_l4_n54(x)
+ else
+ fun_l4_n88(x)
+ end
+end
+
+def fun_l3_n915(x)
+ if (x < 1)
+ fun_l4_n332(x)
+ else
+ fun_l4_n3(x)
+ end
+end
+
+def fun_l3_n916(x)
+ if (x < 1)
+ fun_l4_n748(x)
+ else
+ fun_l4_n21(x)
+ end
+end
+
+def fun_l3_n917(x)
+ if (x < 1)
+ fun_l4_n132(x)
+ else
+ fun_l4_n132(x)
+ end
+end
+
+def fun_l3_n918(x)
+ if (x < 1)
+ fun_l4_n295(x)
+ else
+ fun_l4_n429(x)
+ end
+end
+
+def fun_l3_n919(x)
+ if (x < 1)
+ fun_l4_n105(x)
+ else
+ fun_l4_n984(x)
+ end
+end
+
+def fun_l3_n920(x)
+ if (x < 1)
+ fun_l4_n319(x)
+ else
+ fun_l4_n304(x)
+ end
+end
+
+def fun_l3_n921(x)
+ if (x < 1)
+ fun_l4_n756(x)
+ else
+ fun_l4_n639(x)
+ end
+end
+
+def fun_l3_n922(x)
+ if (x < 1)
+ fun_l4_n678(x)
+ else
+ fun_l4_n209(x)
+ end
+end
+
+def fun_l3_n923(x)
+ if (x < 1)
+ fun_l4_n755(x)
+ else
+ fun_l4_n941(x)
+ end
+end
+
+def fun_l3_n924(x)
+ if (x < 1)
+ fun_l4_n311(x)
+ else
+ fun_l4_n272(x)
+ end
+end
+
+def fun_l3_n925(x)
+ if (x < 1)
+ fun_l4_n543(x)
+ else
+ fun_l4_n896(x)
+ end
+end
+
+def fun_l3_n926(x)
+ if (x < 1)
+ fun_l4_n994(x)
+ else
+ fun_l4_n671(x)
+ end
+end
+
+def fun_l3_n927(x)
+ if (x < 1)
+ fun_l4_n125(x)
+ else
+ fun_l4_n852(x)
+ end
+end
+
+def fun_l3_n928(x)
+ if (x < 1)
+ fun_l4_n483(x)
+ else
+ fun_l4_n350(x)
+ end
+end
+
+def fun_l3_n929(x)
+ if (x < 1)
+ fun_l4_n622(x)
+ else
+ fun_l4_n511(x)
+ end
+end
+
+def fun_l3_n930(x)
+ if (x < 1)
+ fun_l4_n134(x)
+ else
+ fun_l4_n288(x)
+ end
+end
+
+def fun_l3_n931(x)
+ if (x < 1)
+ fun_l4_n278(x)
+ else
+ fun_l4_n800(x)
+ end
+end
+
+def fun_l3_n932(x)
+ if (x < 1)
+ fun_l4_n139(x)
+ else
+ fun_l4_n966(x)
+ end
+end
+
+def fun_l3_n933(x)
+ if (x < 1)
+ fun_l4_n275(x)
+ else
+ fun_l4_n506(x)
+ end
+end
+
+def fun_l3_n934(x)
+ if (x < 1)
+ fun_l4_n503(x)
+ else
+ fun_l4_n204(x)
+ end
+end
+
+def fun_l3_n935(x)
+ if (x < 1)
+ fun_l4_n993(x)
+ else
+ fun_l4_n126(x)
+ end
+end
+
+def fun_l3_n936(x)
+ if (x < 1)
+ fun_l4_n704(x)
+ else
+ fun_l4_n462(x)
+ end
+end
+
+def fun_l3_n937(x)
+ if (x < 1)
+ fun_l4_n922(x)
+ else
+ fun_l4_n722(x)
+ end
+end
+
+def fun_l3_n938(x)
+ if (x < 1)
+ fun_l4_n937(x)
+ else
+ fun_l4_n195(x)
+ end
+end
+
+def fun_l3_n939(x)
+ if (x < 1)
+ fun_l4_n661(x)
+ else
+ fun_l4_n265(x)
+ end
+end
+
+def fun_l3_n940(x)
+ if (x < 1)
+ fun_l4_n423(x)
+ else
+ fun_l4_n230(x)
+ end
+end
+
+def fun_l3_n941(x)
+ if (x < 1)
+ fun_l4_n698(x)
+ else
+ fun_l4_n226(x)
+ end
+end
+
+def fun_l3_n942(x)
+ if (x < 1)
+ fun_l4_n501(x)
+ else
+ fun_l4_n816(x)
+ end
+end
+
+def fun_l3_n943(x)
+ if (x < 1)
+ fun_l4_n650(x)
+ else
+ fun_l4_n925(x)
+ end
+end
+
+def fun_l3_n944(x)
+ if (x < 1)
+ fun_l4_n829(x)
+ else
+ fun_l4_n647(x)
+ end
+end
+
+def fun_l3_n945(x)
+ if (x < 1)
+ fun_l4_n401(x)
+ else
+ fun_l4_n791(x)
+ end
+end
+
+def fun_l3_n946(x)
+ if (x < 1)
+ fun_l4_n551(x)
+ else
+ fun_l4_n104(x)
+ end
+end
+
+def fun_l3_n947(x)
+ if (x < 1)
+ fun_l4_n927(x)
+ else
+ fun_l4_n213(x)
+ end
+end
+
+def fun_l3_n948(x)
+ if (x < 1)
+ fun_l4_n912(x)
+ else
+ fun_l4_n609(x)
+ end
+end
+
+def fun_l3_n949(x)
+ if (x < 1)
+ fun_l4_n302(x)
+ else
+ fun_l4_n157(x)
+ end
+end
+
+def fun_l3_n950(x)
+ if (x < 1)
+ fun_l4_n955(x)
+ else
+ fun_l4_n492(x)
+ end
+end
+
+def fun_l3_n951(x)
+ if (x < 1)
+ fun_l4_n486(x)
+ else
+ fun_l4_n412(x)
+ end
+end
+
+def fun_l3_n952(x)
+ if (x < 1)
+ fun_l4_n850(x)
+ else
+ fun_l4_n885(x)
+ end
+end
+
+def fun_l3_n953(x)
+ if (x < 1)
+ fun_l4_n84(x)
+ else
+ fun_l4_n622(x)
+ end
+end
+
+def fun_l3_n954(x)
+ if (x < 1)
+ fun_l4_n235(x)
+ else
+ fun_l4_n67(x)
+ end
+end
+
+def fun_l3_n955(x)
+ if (x < 1)
+ fun_l4_n347(x)
+ else
+ fun_l4_n757(x)
+ end
+end
+
+def fun_l3_n956(x)
+ if (x < 1)
+ fun_l4_n825(x)
+ else
+ fun_l4_n10(x)
+ end
+end
+
+def fun_l3_n957(x)
+ if (x < 1)
+ fun_l4_n393(x)
+ else
+ fun_l4_n482(x)
+ end
+end
+
+def fun_l3_n958(x)
+ if (x < 1)
+ fun_l4_n0(x)
+ else
+ fun_l4_n556(x)
+ end
+end
+
+def fun_l3_n959(x)
+ if (x < 1)
+ fun_l4_n806(x)
+ else
+ fun_l4_n783(x)
+ end
+end
+
+def fun_l3_n960(x)
+ if (x < 1)
+ fun_l4_n964(x)
+ else
+ fun_l4_n843(x)
+ end
+end
+
+def fun_l3_n961(x)
+ if (x < 1)
+ fun_l4_n508(x)
+ else
+ fun_l4_n874(x)
+ end
+end
+
+def fun_l3_n962(x)
+ if (x < 1)
+ fun_l4_n15(x)
+ else
+ fun_l4_n197(x)
+ end
+end
+
+def fun_l3_n963(x)
+ if (x < 1)
+ fun_l4_n989(x)
+ else
+ fun_l4_n380(x)
+ end
+end
+
+def fun_l3_n964(x)
+ if (x < 1)
+ fun_l4_n315(x)
+ else
+ fun_l4_n196(x)
+ end
+end
+
+def fun_l3_n965(x)
+ if (x < 1)
+ fun_l4_n510(x)
+ else
+ fun_l4_n275(x)
+ end
+end
+
+def fun_l3_n966(x)
+ if (x < 1)
+ fun_l4_n725(x)
+ else
+ fun_l4_n94(x)
+ end
+end
+
+def fun_l3_n967(x)
+ if (x < 1)
+ fun_l4_n733(x)
+ else
+ fun_l4_n577(x)
+ end
+end
+
+def fun_l3_n968(x)
+ if (x < 1)
+ fun_l4_n280(x)
+ else
+ fun_l4_n702(x)
+ end
+end
+
+def fun_l3_n969(x)
+ if (x < 1)
+ fun_l4_n41(x)
+ else
+ fun_l4_n343(x)
+ end
+end
+
+def fun_l3_n970(x)
+ if (x < 1)
+ fun_l4_n102(x)
+ else
+ fun_l4_n785(x)
+ end
+end
+
+def fun_l3_n971(x)
+ if (x < 1)
+ fun_l4_n460(x)
+ else
+ fun_l4_n388(x)
+ end
+end
+
+def fun_l3_n972(x)
+ if (x < 1)
+ fun_l4_n31(x)
+ else
+ fun_l4_n421(x)
+ end
+end
+
+def fun_l3_n973(x)
+ if (x < 1)
+ fun_l4_n587(x)
+ else
+ fun_l4_n401(x)
+ end
+end
+
+def fun_l3_n974(x)
+ if (x < 1)
+ fun_l4_n593(x)
+ else
+ fun_l4_n418(x)
+ end
+end
+
+def fun_l3_n975(x)
+ if (x < 1)
+ fun_l4_n12(x)
+ else
+ fun_l4_n929(x)
+ end
+end
+
+def fun_l3_n976(x)
+ if (x < 1)
+ fun_l4_n516(x)
+ else
+ fun_l4_n402(x)
+ end
+end
+
+def fun_l3_n977(x)
+ if (x < 1)
+ fun_l4_n590(x)
+ else
+ fun_l4_n876(x)
+ end
+end
+
+def fun_l3_n978(x)
+ if (x < 1)
+ fun_l4_n505(x)
+ else
+ fun_l4_n94(x)
+ end
+end
+
+def fun_l3_n979(x)
+ if (x < 1)
+ fun_l4_n625(x)
+ else
+ fun_l4_n344(x)
+ end
+end
+
+def fun_l3_n980(x)
+ if (x < 1)
+ fun_l4_n128(x)
+ else
+ fun_l4_n454(x)
+ end
+end
+
+def fun_l3_n981(x)
+ if (x < 1)
+ fun_l4_n937(x)
+ else
+ fun_l4_n277(x)
+ end
+end
+
+def fun_l3_n982(x)
+ if (x < 1)
+ fun_l4_n237(x)
+ else
+ fun_l4_n113(x)
+ end
+end
+
+def fun_l3_n983(x)
+ if (x < 1)
+ fun_l4_n668(x)
+ else
+ fun_l4_n668(x)
+ end
+end
+
+def fun_l3_n984(x)
+ if (x < 1)
+ fun_l4_n783(x)
+ else
+ fun_l4_n771(x)
+ end
+end
+
+def fun_l3_n985(x)
+ if (x < 1)
+ fun_l4_n135(x)
+ else
+ fun_l4_n967(x)
+ end
+end
+
+def fun_l3_n986(x)
+ if (x < 1)
+ fun_l4_n29(x)
+ else
+ fun_l4_n313(x)
+ end
+end
+
+def fun_l3_n987(x)
+ if (x < 1)
+ fun_l4_n765(x)
+ else
+ fun_l4_n885(x)
+ end
+end
+
+def fun_l3_n988(x)
+ if (x < 1)
+ fun_l4_n242(x)
+ else
+ fun_l4_n622(x)
+ end
+end
+
+def fun_l3_n989(x)
+ if (x < 1)
+ fun_l4_n916(x)
+ else
+ fun_l4_n518(x)
+ end
+end
+
+def fun_l3_n990(x)
+ if (x < 1)
+ fun_l4_n523(x)
+ else
+ fun_l4_n468(x)
+ end
+end
+
+def fun_l3_n991(x)
+ if (x < 1)
+ fun_l4_n904(x)
+ else
+ fun_l4_n601(x)
+ end
+end
+
+def fun_l3_n992(x)
+ if (x < 1)
+ fun_l4_n437(x)
+ else
+ fun_l4_n77(x)
+ end
+end
+
+def fun_l3_n993(x)
+ if (x < 1)
+ fun_l4_n957(x)
+ else
+ fun_l4_n619(x)
+ end
+end
+
+def fun_l3_n994(x)
+ if (x < 1)
+ fun_l4_n540(x)
+ else
+ fun_l4_n108(x)
+ end
+end
+
+def fun_l3_n995(x)
+ if (x < 1)
+ fun_l4_n8(x)
+ else
+ fun_l4_n428(x)
+ end
+end
+
+def fun_l3_n996(x)
+ if (x < 1)
+ fun_l4_n53(x)
+ else
+ fun_l4_n278(x)
+ end
+end
+
+def fun_l3_n997(x)
+ if (x < 1)
+ fun_l4_n930(x)
+ else
+ fun_l4_n671(x)
+ end
+end
+
+def fun_l3_n998(x)
+ if (x < 1)
+ fun_l4_n574(x)
+ else
+ fun_l4_n879(x)
+ end
+end
+
+def fun_l3_n999(x)
+ if (x < 1)
+ fun_l4_n316(x)
+ else
+ fun_l4_n93(x)
+ end
+end
+
+def fun_l4_n0(x)
+ if (x < 1)
+ fun_l5_n524(x)
+ else
+ fun_l5_n284(x)
+ end
+end
+
+def fun_l4_n1(x)
+ if (x < 1)
+ fun_l5_n845(x)
+ else
+ fun_l5_n863(x)
+ end
+end
+
+def fun_l4_n2(x)
+ if (x < 1)
+ fun_l5_n258(x)
+ else
+ fun_l5_n860(x)
+ end
+end
+
+def fun_l4_n3(x)
+ if (x < 1)
+ fun_l5_n253(x)
+ else
+ fun_l5_n763(x)
+ end
+end
+
+def fun_l4_n4(x)
+ if (x < 1)
+ fun_l5_n833(x)
+ else
+ fun_l5_n807(x)
+ end
+end
+
+def fun_l4_n5(x)
+ if (x < 1)
+ fun_l5_n890(x)
+ else
+ fun_l5_n669(x)
+ end
+end
+
+def fun_l4_n6(x)
+ if (x < 1)
+ fun_l5_n396(x)
+ else
+ fun_l5_n388(x)
+ end
+end
+
+def fun_l4_n7(x)
+ if (x < 1)
+ fun_l5_n926(x)
+ else
+ fun_l5_n661(x)
+ end
+end
+
+def fun_l4_n8(x)
+ if (x < 1)
+ fun_l5_n990(x)
+ else
+ fun_l5_n765(x)
+ end
+end
+
+def fun_l4_n9(x)
+ if (x < 1)
+ fun_l5_n978(x)
+ else
+ fun_l5_n342(x)
+ end
+end
+
+def fun_l4_n10(x)
+ if (x < 1)
+ fun_l5_n500(x)
+ else
+ fun_l5_n758(x)
+ end
+end
+
+def fun_l4_n11(x)
+ if (x < 1)
+ fun_l5_n10(x)
+ else
+ fun_l5_n796(x)
+ end
+end
+
+def fun_l4_n12(x)
+ if (x < 1)
+ fun_l5_n173(x)
+ else
+ fun_l5_n87(x)
+ end
+end
+
+def fun_l4_n13(x)
+ if (x < 1)
+ fun_l5_n852(x)
+ else
+ fun_l5_n93(x)
+ end
+end
+
+def fun_l4_n14(x)
+ if (x < 1)
+ fun_l5_n526(x)
+ else
+ fun_l5_n144(x)
+ end
+end
+
+def fun_l4_n15(x)
+ if (x < 1)
+ fun_l5_n398(x)
+ else
+ fun_l5_n632(x)
+ end
+end
+
+def fun_l4_n16(x)
+ if (x < 1)
+ fun_l5_n774(x)
+ else
+ fun_l5_n716(x)
+ end
+end
+
+def fun_l4_n17(x)
+ if (x < 1)
+ fun_l5_n412(x)
+ else
+ fun_l5_n95(x)
+ end
+end
+
+def fun_l4_n18(x)
+ if (x < 1)
+ fun_l5_n446(x)
+ else
+ fun_l5_n885(x)
+ end
+end
+
+def fun_l4_n19(x)
+ if (x < 1)
+ fun_l5_n420(x)
+ else
+ fun_l5_n420(x)
+ end
+end
+
+def fun_l4_n20(x)
+ if (x < 1)
+ fun_l5_n274(x)
+ else
+ fun_l5_n813(x)
+ end
+end
+
+def fun_l4_n21(x)
+ if (x < 1)
+ fun_l5_n174(x)
+ else
+ fun_l5_n781(x)
+ end
+end
+
+def fun_l4_n22(x)
+ if (x < 1)
+ fun_l5_n903(x)
+ else
+ fun_l5_n224(x)
+ end
+end
+
+def fun_l4_n23(x)
+ if (x < 1)
+ fun_l5_n317(x)
+ else
+ fun_l5_n900(x)
+ end
+end
+
+def fun_l4_n24(x)
+ if (x < 1)
+ fun_l5_n600(x)
+ else
+ fun_l5_n515(x)
+ end
+end
+
+def fun_l4_n25(x)
+ if (x < 1)
+ fun_l5_n151(x)
+ else
+ fun_l5_n790(x)
+ end
+end
+
+def fun_l4_n26(x)
+ if (x < 1)
+ fun_l5_n256(x)
+ else
+ fun_l5_n449(x)
+ end
+end
+
+def fun_l4_n27(x)
+ if (x < 1)
+ fun_l5_n985(x)
+ else
+ fun_l5_n763(x)
+ end
+end
+
+def fun_l4_n28(x)
+ if (x < 1)
+ fun_l5_n961(x)
+ else
+ fun_l5_n86(x)
+ end
+end
+
+def fun_l4_n29(x)
+ if (x < 1)
+ fun_l5_n359(x)
+ else
+ fun_l5_n894(x)
+ end
+end
+
+def fun_l4_n30(x)
+ if (x < 1)
+ fun_l5_n426(x)
+ else
+ fun_l5_n983(x)
+ end
+end
+
+def fun_l4_n31(x)
+ if (x < 1)
+ fun_l5_n996(x)
+ else
+ fun_l5_n343(x)
+ end
+end
+
+def fun_l4_n32(x)
+ if (x < 1)
+ fun_l5_n300(x)
+ else
+ fun_l5_n719(x)
+ end
+end
+
+def fun_l4_n33(x)
+ if (x < 1)
+ fun_l5_n755(x)
+ else
+ fun_l5_n623(x)
+ end
+end
+
+def fun_l4_n34(x)
+ if (x < 1)
+ fun_l5_n681(x)
+ else
+ fun_l5_n410(x)
+ end
+end
+
+def fun_l4_n35(x)
+ if (x < 1)
+ fun_l5_n356(x)
+ else
+ fun_l5_n351(x)
+ end
+end
+
+def fun_l4_n36(x)
+ if (x < 1)
+ fun_l5_n463(x)
+ else
+ fun_l5_n402(x)
+ end
+end
+
+def fun_l4_n37(x)
+ if (x < 1)
+ fun_l5_n250(x)
+ else
+ fun_l5_n681(x)
+ end
+end
+
+def fun_l4_n38(x)
+ if (x < 1)
+ fun_l5_n573(x)
+ else
+ fun_l5_n622(x)
+ end
+end
+
+def fun_l4_n39(x)
+ if (x < 1)
+ fun_l5_n545(x)
+ else
+ fun_l5_n210(x)
+ end
+end
+
+def fun_l4_n40(x)
+ if (x < 1)
+ fun_l5_n264(x)
+ else
+ fun_l5_n239(x)
+ end
+end
+
+def fun_l4_n41(x)
+ if (x < 1)
+ fun_l5_n635(x)
+ else
+ fun_l5_n224(x)
+ end
+end
+
+def fun_l4_n42(x)
+ if (x < 1)
+ fun_l5_n806(x)
+ else
+ fun_l5_n125(x)
+ end
+end
+
+def fun_l4_n43(x)
+ if (x < 1)
+ fun_l5_n480(x)
+ else
+ fun_l5_n625(x)
+ end
+end
+
+def fun_l4_n44(x)
+ if (x < 1)
+ fun_l5_n644(x)
+ else
+ fun_l5_n465(x)
+ end
+end
+
+def fun_l4_n45(x)
+ if (x < 1)
+ fun_l5_n999(x)
+ else
+ fun_l5_n759(x)
+ end
+end
+
+def fun_l4_n46(x)
+ if (x < 1)
+ fun_l5_n866(x)
+ else
+ fun_l5_n536(x)
+ end
+end
+
+def fun_l4_n47(x)
+ if (x < 1)
+ fun_l5_n328(x)
+ else
+ fun_l5_n533(x)
+ end
+end
+
+def fun_l4_n48(x)
+ if (x < 1)
+ fun_l5_n902(x)
+ else
+ fun_l5_n919(x)
+ end
+end
+
+def fun_l4_n49(x)
+ if (x < 1)
+ fun_l5_n197(x)
+ else
+ fun_l5_n262(x)
+ end
+end
+
+def fun_l4_n50(x)
+ if (x < 1)
+ fun_l5_n172(x)
+ else
+ fun_l5_n731(x)
+ end
+end
+
+def fun_l4_n51(x)
+ if (x < 1)
+ fun_l5_n502(x)
+ else
+ fun_l5_n149(x)
+ end
+end
+
+def fun_l4_n52(x)
+ if (x < 1)
+ fun_l5_n69(x)
+ else
+ fun_l5_n536(x)
+ end
+end
+
+def fun_l4_n53(x)
+ if (x < 1)
+ fun_l5_n932(x)
+ else
+ fun_l5_n482(x)
+ end
+end
+
+def fun_l4_n54(x)
+ if (x < 1)
+ fun_l5_n982(x)
+ else
+ fun_l5_n207(x)
+ end
+end
+
+def fun_l4_n55(x)
+ if (x < 1)
+ fun_l5_n949(x)
+ else
+ fun_l5_n9(x)
+ end
+end
+
+def fun_l4_n56(x)
+ if (x < 1)
+ fun_l5_n672(x)
+ else
+ fun_l5_n924(x)
+ end
+end
+
+def fun_l4_n57(x)
+ if (x < 1)
+ fun_l5_n757(x)
+ else
+ fun_l5_n609(x)
+ end
+end
+
+def fun_l4_n58(x)
+ if (x < 1)
+ fun_l5_n251(x)
+ else
+ fun_l5_n471(x)
+ end
+end
+
+def fun_l4_n59(x)
+ if (x < 1)
+ fun_l5_n878(x)
+ else
+ fun_l5_n626(x)
+ end
+end
+
+def fun_l4_n60(x)
+ if (x < 1)
+ fun_l5_n859(x)
+ else
+ fun_l5_n646(x)
+ end
+end
+
+def fun_l4_n61(x)
+ if (x < 1)
+ fun_l5_n417(x)
+ else
+ fun_l5_n587(x)
+ end
+end
+
+def fun_l4_n62(x)
+ if (x < 1)
+ fun_l5_n164(x)
+ else
+ fun_l5_n861(x)
+ end
+end
+
+def fun_l4_n63(x)
+ if (x < 1)
+ fun_l5_n591(x)
+ else
+ fun_l5_n79(x)
+ end
+end
+
+def fun_l4_n64(x)
+ if (x < 1)
+ fun_l5_n269(x)
+ else
+ fun_l5_n336(x)
+ end
+end
+
+def fun_l4_n65(x)
+ if (x < 1)
+ fun_l5_n420(x)
+ else
+ fun_l5_n557(x)
+ end
+end
+
+def fun_l4_n66(x)
+ if (x < 1)
+ fun_l5_n61(x)
+ else
+ fun_l5_n690(x)
+ end
+end
+
+def fun_l4_n67(x)
+ if (x < 1)
+ fun_l5_n939(x)
+ else
+ fun_l5_n139(x)
+ end
+end
+
+def fun_l4_n68(x)
+ if (x < 1)
+ fun_l5_n430(x)
+ else
+ fun_l5_n625(x)
+ end
+end
+
+def fun_l4_n69(x)
+ if (x < 1)
+ fun_l5_n532(x)
+ else
+ fun_l5_n909(x)
+ end
+end
+
+def fun_l4_n70(x)
+ if (x < 1)
+ fun_l5_n937(x)
+ else
+ fun_l5_n886(x)
+ end
+end
+
+def fun_l4_n71(x)
+ if (x < 1)
+ fun_l5_n554(x)
+ else
+ fun_l5_n898(x)
+ end
+end
+
+def fun_l4_n72(x)
+ if (x < 1)
+ fun_l5_n390(x)
+ else
+ fun_l5_n690(x)
+ end
+end
+
+def fun_l4_n73(x)
+ if (x < 1)
+ fun_l5_n980(x)
+ else
+ fun_l5_n248(x)
+ end
+end
+
+def fun_l4_n74(x)
+ if (x < 1)
+ fun_l5_n438(x)
+ else
+ fun_l5_n247(x)
+ end
+end
+
+def fun_l4_n75(x)
+ if (x < 1)
+ fun_l5_n798(x)
+ else
+ fun_l5_n399(x)
+ end
+end
+
+def fun_l4_n76(x)
+ if (x < 1)
+ fun_l5_n419(x)
+ else
+ fun_l5_n754(x)
+ end
+end
+
+def fun_l4_n77(x)
+ if (x < 1)
+ fun_l5_n875(x)
+ else
+ fun_l5_n18(x)
+ end
+end
+
+def fun_l4_n78(x)
+ if (x < 1)
+ fun_l5_n695(x)
+ else
+ fun_l5_n336(x)
+ end
+end
+
+def fun_l4_n79(x)
+ if (x < 1)
+ fun_l5_n185(x)
+ else
+ fun_l5_n627(x)
+ end
+end
+
+def fun_l4_n80(x)
+ if (x < 1)
+ fun_l5_n359(x)
+ else
+ fun_l5_n465(x)
+ end
+end
+
+def fun_l4_n81(x)
+ if (x < 1)
+ fun_l5_n284(x)
+ else
+ fun_l5_n232(x)
+ end
+end
+
+def fun_l4_n82(x)
+ if (x < 1)
+ fun_l5_n947(x)
+ else
+ fun_l5_n748(x)
+ end
+end
+
+def fun_l4_n83(x)
+ if (x < 1)
+ fun_l5_n254(x)
+ else
+ fun_l5_n836(x)
+ end
+end
+
+def fun_l4_n84(x)
+ if (x < 1)
+ fun_l5_n181(x)
+ else
+ fun_l5_n789(x)
+ end
+end
+
+def fun_l4_n85(x)
+ if (x < 1)
+ fun_l5_n682(x)
+ else
+ fun_l5_n547(x)
+ end
+end
+
+def fun_l4_n86(x)
+ if (x < 1)
+ fun_l5_n35(x)
+ else
+ fun_l5_n157(x)
+ end
+end
+
+def fun_l4_n87(x)
+ if (x < 1)
+ fun_l5_n981(x)
+ else
+ fun_l5_n724(x)
+ end
+end
+
+def fun_l4_n88(x)
+ if (x < 1)
+ fun_l5_n35(x)
+ else
+ fun_l5_n914(x)
+ end
+end
+
+def fun_l4_n89(x)
+ if (x < 1)
+ fun_l5_n844(x)
+ else
+ fun_l5_n668(x)
+ end
+end
+
+def fun_l4_n90(x)
+ if (x < 1)
+ fun_l5_n615(x)
+ else
+ fun_l5_n415(x)
+ end
+end
+
+def fun_l4_n91(x)
+ if (x < 1)
+ fun_l5_n141(x)
+ else
+ fun_l5_n538(x)
+ end
+end
+
+def fun_l4_n92(x)
+ if (x < 1)
+ fun_l5_n563(x)
+ else
+ fun_l5_n60(x)
+ end
+end
+
+def fun_l4_n93(x)
+ if (x < 1)
+ fun_l5_n967(x)
+ else
+ fun_l5_n549(x)
+ end
+end
+
+def fun_l4_n94(x)
+ if (x < 1)
+ fun_l5_n992(x)
+ else
+ fun_l5_n34(x)
+ end
+end
+
+def fun_l4_n95(x)
+ if (x < 1)
+ fun_l5_n187(x)
+ else
+ fun_l5_n980(x)
+ end
+end
+
+def fun_l4_n96(x)
+ if (x < 1)
+ fun_l5_n543(x)
+ else
+ fun_l5_n318(x)
+ end
+end
+
+def fun_l4_n97(x)
+ if (x < 1)
+ fun_l5_n253(x)
+ else
+ fun_l5_n709(x)
+ end
+end
+
+def fun_l4_n98(x)
+ if (x < 1)
+ fun_l5_n233(x)
+ else
+ fun_l5_n963(x)
+ end
+end
+
+def fun_l4_n99(x)
+ if (x < 1)
+ fun_l5_n944(x)
+ else
+ fun_l5_n688(x)
+ end
+end
+
+def fun_l4_n100(x)
+ if (x < 1)
+ fun_l5_n422(x)
+ else
+ fun_l5_n805(x)
+ end
+end
+
+def fun_l4_n101(x)
+ if (x < 1)
+ fun_l5_n125(x)
+ else
+ fun_l5_n729(x)
+ end
+end
+
+def fun_l4_n102(x)
+ if (x < 1)
+ fun_l5_n339(x)
+ else
+ fun_l5_n394(x)
+ end
+end
+
+def fun_l4_n103(x)
+ if (x < 1)
+ fun_l5_n149(x)
+ else
+ fun_l5_n839(x)
+ end
+end
+
+def fun_l4_n104(x)
+ if (x < 1)
+ fun_l5_n750(x)
+ else
+ fun_l5_n514(x)
+ end
+end
+
+def fun_l4_n105(x)
+ if (x < 1)
+ fun_l5_n726(x)
+ else
+ fun_l5_n251(x)
+ end
+end
+
+def fun_l4_n106(x)
+ if (x < 1)
+ fun_l5_n810(x)
+ else
+ fun_l5_n46(x)
+ end
+end
+
+def fun_l4_n107(x)
+ if (x < 1)
+ fun_l5_n702(x)
+ else
+ fun_l5_n224(x)
+ end
+end
+
+def fun_l4_n108(x)
+ if (x < 1)
+ fun_l5_n604(x)
+ else
+ fun_l5_n24(x)
+ end
+end
+
+def fun_l4_n109(x)
+ if (x < 1)
+ fun_l5_n511(x)
+ else
+ fun_l5_n529(x)
+ end
+end
+
+def fun_l4_n110(x)
+ if (x < 1)
+ fun_l5_n193(x)
+ else
+ fun_l5_n210(x)
+ end
+end
+
+def fun_l4_n111(x)
+ if (x < 1)
+ fun_l5_n599(x)
+ else
+ fun_l5_n85(x)
+ end
+end
+
+def fun_l4_n112(x)
+ if (x < 1)
+ fun_l5_n910(x)
+ else
+ fun_l5_n292(x)
+ end
+end
+
+def fun_l4_n113(x)
+ if (x < 1)
+ fun_l5_n851(x)
+ else
+ fun_l5_n269(x)
+ end
+end
+
+def fun_l4_n114(x)
+ if (x < 1)
+ fun_l5_n739(x)
+ else
+ fun_l5_n439(x)
+ end
+end
+
+def fun_l4_n115(x)
+ if (x < 1)
+ fun_l5_n580(x)
+ else
+ fun_l5_n656(x)
+ end
+end
+
+def fun_l4_n116(x)
+ if (x < 1)
+ fun_l5_n992(x)
+ else
+ fun_l5_n703(x)
+ end
+end
+
+def fun_l4_n117(x)
+ if (x < 1)
+ fun_l5_n549(x)
+ else
+ fun_l5_n300(x)
+ end
+end
+
+def fun_l4_n118(x)
+ if (x < 1)
+ fun_l5_n785(x)
+ else
+ fun_l5_n596(x)
+ end
+end
+
+def fun_l4_n119(x)
+ if (x < 1)
+ fun_l5_n236(x)
+ else
+ fun_l5_n84(x)
+ end
+end
+
+def fun_l4_n120(x)
+ if (x < 1)
+ fun_l5_n78(x)
+ else
+ fun_l5_n610(x)
+ end
+end
+
+def fun_l4_n121(x)
+ if (x < 1)
+ fun_l5_n591(x)
+ else
+ fun_l5_n557(x)
+ end
+end
+
+def fun_l4_n122(x)
+ if (x < 1)
+ fun_l5_n927(x)
+ else
+ fun_l5_n40(x)
+ end
+end
+
+def fun_l4_n123(x)
+ if (x < 1)
+ fun_l5_n620(x)
+ else
+ fun_l5_n173(x)
+ end
+end
+
+def fun_l4_n124(x)
+ if (x < 1)
+ fun_l5_n558(x)
+ else
+ fun_l5_n330(x)
+ end
+end
+
+def fun_l4_n125(x)
+ if (x < 1)
+ fun_l5_n535(x)
+ else
+ fun_l5_n636(x)
+ end
+end
+
+def fun_l4_n126(x)
+ if (x < 1)
+ fun_l5_n401(x)
+ else
+ fun_l5_n747(x)
+ end
+end
+
+def fun_l4_n127(x)
+ if (x < 1)
+ fun_l5_n172(x)
+ else
+ fun_l5_n124(x)
+ end
+end
+
+def fun_l4_n128(x)
+ if (x < 1)
+ fun_l5_n449(x)
+ else
+ fun_l5_n619(x)
+ end
+end
+
+def fun_l4_n129(x)
+ if (x < 1)
+ fun_l5_n564(x)
+ else
+ fun_l5_n306(x)
+ end
+end
+
+def fun_l4_n130(x)
+ if (x < 1)
+ fun_l5_n196(x)
+ else
+ fun_l5_n170(x)
+ end
+end
+
+def fun_l4_n131(x)
+ if (x < 1)
+ fun_l5_n383(x)
+ else
+ fun_l5_n87(x)
+ end
+end
+
+def fun_l4_n132(x)
+ if (x < 1)
+ fun_l5_n568(x)
+ else
+ fun_l5_n54(x)
+ end
+end
+
+def fun_l4_n133(x)
+ if (x < 1)
+ fun_l5_n780(x)
+ else
+ fun_l5_n184(x)
+ end
+end
+
+def fun_l4_n134(x)
+ if (x < 1)
+ fun_l5_n880(x)
+ else
+ fun_l5_n38(x)
+ end
+end
+
+def fun_l4_n135(x)
+ if (x < 1)
+ fun_l5_n819(x)
+ else
+ fun_l5_n440(x)
+ end
+end
+
+def fun_l4_n136(x)
+ if (x < 1)
+ fun_l5_n301(x)
+ else
+ fun_l5_n676(x)
+ end
+end
+
+def fun_l4_n137(x)
+ if (x < 1)
+ fun_l5_n69(x)
+ else
+ fun_l5_n333(x)
+ end
+end
+
+def fun_l4_n138(x)
+ if (x < 1)
+ fun_l5_n303(x)
+ else
+ fun_l5_n69(x)
+ end
+end
+
+def fun_l4_n139(x)
+ if (x < 1)
+ fun_l5_n939(x)
+ else
+ fun_l5_n103(x)
+ end
+end
+
+def fun_l4_n140(x)
+ if (x < 1)
+ fun_l5_n517(x)
+ else
+ fun_l5_n24(x)
+ end
+end
+
+def fun_l4_n141(x)
+ if (x < 1)
+ fun_l5_n923(x)
+ else
+ fun_l5_n968(x)
+ end
+end
+
+def fun_l4_n142(x)
+ if (x < 1)
+ fun_l5_n196(x)
+ else
+ fun_l5_n841(x)
+ end
+end
+
+def fun_l4_n143(x)
+ if (x < 1)
+ fun_l5_n726(x)
+ else
+ fun_l5_n715(x)
+ end
+end
+
+def fun_l4_n144(x)
+ if (x < 1)
+ fun_l5_n434(x)
+ else
+ fun_l5_n771(x)
+ end
+end
+
+def fun_l4_n145(x)
+ if (x < 1)
+ fun_l5_n211(x)
+ else
+ fun_l5_n963(x)
+ end
+end
+
+def fun_l4_n146(x)
+ if (x < 1)
+ fun_l5_n534(x)
+ else
+ fun_l5_n5(x)
+ end
+end
+
+def fun_l4_n147(x)
+ if (x < 1)
+ fun_l5_n409(x)
+ else
+ fun_l5_n298(x)
+ end
+end
+
+def fun_l4_n148(x)
+ if (x < 1)
+ fun_l5_n447(x)
+ else
+ fun_l5_n474(x)
+ end
+end
+
+def fun_l4_n149(x)
+ if (x < 1)
+ fun_l5_n181(x)
+ else
+ fun_l5_n87(x)
+ end
+end
+
+def fun_l4_n150(x)
+ if (x < 1)
+ fun_l5_n871(x)
+ else
+ fun_l5_n201(x)
+ end
+end
+
+def fun_l4_n151(x)
+ if (x < 1)
+ fun_l5_n539(x)
+ else
+ fun_l5_n855(x)
+ end
+end
+
+def fun_l4_n152(x)
+ if (x < 1)
+ fun_l5_n387(x)
+ else
+ fun_l5_n730(x)
+ end
+end
+
+def fun_l4_n153(x)
+ if (x < 1)
+ fun_l5_n785(x)
+ else
+ fun_l5_n774(x)
+ end
+end
+
+def fun_l4_n154(x)
+ if (x < 1)
+ fun_l5_n924(x)
+ else
+ fun_l5_n414(x)
+ end
+end
+
+def fun_l4_n155(x)
+ if (x < 1)
+ fun_l5_n110(x)
+ else
+ fun_l5_n669(x)
+ end
+end
+
+def fun_l4_n156(x)
+ if (x < 1)
+ fun_l5_n551(x)
+ else
+ fun_l5_n456(x)
+ end
+end
+
+def fun_l4_n157(x)
+ if (x < 1)
+ fun_l5_n872(x)
+ else
+ fun_l5_n397(x)
+ end
+end
+
+def fun_l4_n158(x)
+ if (x < 1)
+ fun_l5_n208(x)
+ else
+ fun_l5_n464(x)
+ end
+end
+
+def fun_l4_n159(x)
+ if (x < 1)
+ fun_l5_n236(x)
+ else
+ fun_l5_n532(x)
+ end
+end
+
+def fun_l4_n160(x)
+ if (x < 1)
+ fun_l5_n820(x)
+ else
+ fun_l5_n146(x)
+ end
+end
+
+def fun_l4_n161(x)
+ if (x < 1)
+ fun_l5_n154(x)
+ else
+ fun_l5_n388(x)
+ end
+end
+
+def fun_l4_n162(x)
+ if (x < 1)
+ fun_l5_n456(x)
+ else
+ fun_l5_n309(x)
+ end
+end
+
+def fun_l4_n163(x)
+ if (x < 1)
+ fun_l5_n201(x)
+ else
+ fun_l5_n728(x)
+ end
+end
+
+def fun_l4_n164(x)
+ if (x < 1)
+ fun_l5_n806(x)
+ else
+ fun_l5_n156(x)
+ end
+end
+
+def fun_l4_n165(x)
+ if (x < 1)
+ fun_l5_n984(x)
+ else
+ fun_l5_n996(x)
+ end
+end
+
+def fun_l4_n166(x)
+ if (x < 1)
+ fun_l5_n253(x)
+ else
+ fun_l5_n527(x)
+ end
+end
+
+def fun_l4_n167(x)
+ if (x < 1)
+ fun_l5_n513(x)
+ else
+ fun_l5_n145(x)
+ end
+end
+
+def fun_l4_n168(x)
+ if (x < 1)
+ fun_l5_n694(x)
+ else
+ fun_l5_n841(x)
+ end
+end
+
+def fun_l4_n169(x)
+ if (x < 1)
+ fun_l5_n463(x)
+ else
+ fun_l5_n193(x)
+ end
+end
+
+def fun_l4_n170(x)
+ if (x < 1)
+ fun_l5_n638(x)
+ else
+ fun_l5_n252(x)
+ end
+end
+
+def fun_l4_n171(x)
+ if (x < 1)
+ fun_l5_n166(x)
+ else
+ fun_l5_n134(x)
+ end
+end
+
+def fun_l4_n172(x)
+ if (x < 1)
+ fun_l5_n172(x)
+ else
+ fun_l5_n179(x)
+ end
+end
+
+def fun_l4_n173(x)
+ if (x < 1)
+ fun_l5_n218(x)
+ else
+ fun_l5_n124(x)
+ end
+end
+
+def fun_l4_n174(x)
+ if (x < 1)
+ fun_l5_n370(x)
+ else
+ fun_l5_n742(x)
+ end
+end
+
+def fun_l4_n175(x)
+ if (x < 1)
+ fun_l5_n593(x)
+ else
+ fun_l5_n542(x)
+ end
+end
+
+def fun_l4_n176(x)
+ if (x < 1)
+ fun_l5_n438(x)
+ else
+ fun_l5_n606(x)
+ end
+end
+
+def fun_l4_n177(x)
+ if (x < 1)
+ fun_l5_n316(x)
+ else
+ fun_l5_n92(x)
+ end
+end
+
+def fun_l4_n178(x)
+ if (x < 1)
+ fun_l5_n222(x)
+ else
+ fun_l5_n461(x)
+ end
+end
+
+def fun_l4_n179(x)
+ if (x < 1)
+ fun_l5_n244(x)
+ else
+ fun_l5_n536(x)
+ end
+end
+
+def fun_l4_n180(x)
+ if (x < 1)
+ fun_l5_n120(x)
+ else
+ fun_l5_n905(x)
+ end
+end
+
+def fun_l4_n181(x)
+ if (x < 1)
+ fun_l5_n601(x)
+ else
+ fun_l5_n62(x)
+ end
+end
+
+def fun_l4_n182(x)
+ if (x < 1)
+ fun_l5_n701(x)
+ else
+ fun_l5_n25(x)
+ end
+end
+
+def fun_l4_n183(x)
+ if (x < 1)
+ fun_l5_n361(x)
+ else
+ fun_l5_n433(x)
+ end
+end
+
+def fun_l4_n184(x)
+ if (x < 1)
+ fun_l5_n29(x)
+ else
+ fun_l5_n302(x)
+ end
+end
+
+def fun_l4_n185(x)
+ if (x < 1)
+ fun_l5_n697(x)
+ else
+ fun_l5_n849(x)
+ end
+end
+
+def fun_l4_n186(x)
+ if (x < 1)
+ fun_l5_n76(x)
+ else
+ fun_l5_n402(x)
+ end
+end
+
+def fun_l4_n187(x)
+ if (x < 1)
+ fun_l5_n38(x)
+ else
+ fun_l5_n818(x)
+ end
+end
+
+def fun_l4_n188(x)
+ if (x < 1)
+ fun_l5_n730(x)
+ else
+ fun_l5_n456(x)
+ end
+end
+
+def fun_l4_n189(x)
+ if (x < 1)
+ fun_l5_n828(x)
+ else
+ fun_l5_n796(x)
+ end
+end
+
+def fun_l4_n190(x)
+ if (x < 1)
+ fun_l5_n86(x)
+ else
+ fun_l5_n976(x)
+ end
+end
+
+def fun_l4_n191(x)
+ if (x < 1)
+ fun_l5_n267(x)
+ else
+ fun_l5_n497(x)
+ end
+end
+
+def fun_l4_n192(x)
+ if (x < 1)
+ fun_l5_n534(x)
+ else
+ fun_l5_n449(x)
+ end
+end
+
+def fun_l4_n193(x)
+ if (x < 1)
+ fun_l5_n97(x)
+ else
+ fun_l5_n595(x)
+ end
+end
+
+def fun_l4_n194(x)
+ if (x < 1)
+ fun_l5_n821(x)
+ else
+ fun_l5_n823(x)
+ end
+end
+
+def fun_l4_n195(x)
+ if (x < 1)
+ fun_l5_n936(x)
+ else
+ fun_l5_n490(x)
+ end
+end
+
+def fun_l4_n196(x)
+ if (x < 1)
+ fun_l5_n579(x)
+ else
+ fun_l5_n684(x)
+ end
+end
+
+def fun_l4_n197(x)
+ if (x < 1)
+ fun_l5_n742(x)
+ else
+ fun_l5_n874(x)
+ end
+end
+
+def fun_l4_n198(x)
+ if (x < 1)
+ fun_l5_n904(x)
+ else
+ fun_l5_n394(x)
+ end
+end
+
+def fun_l4_n199(x)
+ if (x < 1)
+ fun_l5_n229(x)
+ else
+ fun_l5_n406(x)
+ end
+end
+
+def fun_l4_n200(x)
+ if (x < 1)
+ fun_l5_n332(x)
+ else
+ fun_l5_n803(x)
+ end
+end
+
+def fun_l4_n201(x)
+ if (x < 1)
+ fun_l5_n635(x)
+ else
+ fun_l5_n294(x)
+ end
+end
+
+def fun_l4_n202(x)
+ if (x < 1)
+ fun_l5_n397(x)
+ else
+ fun_l5_n924(x)
+ end
+end
+
+def fun_l4_n203(x)
+ if (x < 1)
+ fun_l5_n199(x)
+ else
+ fun_l5_n751(x)
+ end
+end
+
+def fun_l4_n204(x)
+ if (x < 1)
+ fun_l5_n570(x)
+ else
+ fun_l5_n70(x)
+ end
+end
+
+def fun_l4_n205(x)
+ if (x < 1)
+ fun_l5_n344(x)
+ else
+ fun_l5_n713(x)
+ end
+end
+
+def fun_l4_n206(x)
+ if (x < 1)
+ fun_l5_n568(x)
+ else
+ fun_l5_n40(x)
+ end
+end
+
+def fun_l4_n207(x)
+ if (x < 1)
+ fun_l5_n460(x)
+ else
+ fun_l5_n311(x)
+ end
+end
+
+def fun_l4_n208(x)
+ if (x < 1)
+ fun_l5_n995(x)
+ else
+ fun_l5_n147(x)
+ end
+end
+
+def fun_l4_n209(x)
+ if (x < 1)
+ fun_l5_n295(x)
+ else
+ fun_l5_n752(x)
+ end
+end
+
+def fun_l4_n210(x)
+ if (x < 1)
+ fun_l5_n644(x)
+ else
+ fun_l5_n555(x)
+ end
+end
+
+def fun_l4_n211(x)
+ if (x < 1)
+ fun_l5_n196(x)
+ else
+ fun_l5_n418(x)
+ end
+end
+
+def fun_l4_n212(x)
+ if (x < 1)
+ fun_l5_n761(x)
+ else
+ fun_l5_n66(x)
+ end
+end
+
+def fun_l4_n213(x)
+ if (x < 1)
+ fun_l5_n906(x)
+ else
+ fun_l5_n521(x)
+ end
+end
+
+def fun_l4_n214(x)
+ if (x < 1)
+ fun_l5_n97(x)
+ else
+ fun_l5_n431(x)
+ end
+end
+
+def fun_l4_n215(x)
+ if (x < 1)
+ fun_l5_n450(x)
+ else
+ fun_l5_n58(x)
+ end
+end
+
+def fun_l4_n216(x)
+ if (x < 1)
+ fun_l5_n576(x)
+ else
+ fun_l5_n675(x)
+ end
+end
+
+def fun_l4_n217(x)
+ if (x < 1)
+ fun_l5_n764(x)
+ else
+ fun_l5_n653(x)
+ end
+end
+
+def fun_l4_n218(x)
+ if (x < 1)
+ fun_l5_n591(x)
+ else
+ fun_l5_n398(x)
+ end
+end
+
+def fun_l4_n219(x)
+ if (x < 1)
+ fun_l5_n94(x)
+ else
+ fun_l5_n411(x)
+ end
+end
+
+def fun_l4_n220(x)
+ if (x < 1)
+ fun_l5_n13(x)
+ else
+ fun_l5_n117(x)
+ end
+end
+
+def fun_l4_n221(x)
+ if (x < 1)
+ fun_l5_n872(x)
+ else
+ fun_l5_n799(x)
+ end
+end
+
+def fun_l4_n222(x)
+ if (x < 1)
+ fun_l5_n692(x)
+ else
+ fun_l5_n99(x)
+ end
+end
+
+def fun_l4_n223(x)
+ if (x < 1)
+ fun_l5_n861(x)
+ else
+ fun_l5_n999(x)
+ end
+end
+
+def fun_l4_n224(x)
+ if (x < 1)
+ fun_l5_n547(x)
+ else
+ fun_l5_n955(x)
+ end
+end
+
+def fun_l4_n225(x)
+ if (x < 1)
+ fun_l5_n305(x)
+ else
+ fun_l5_n894(x)
+ end
+end
+
+def fun_l4_n226(x)
+ if (x < 1)
+ fun_l5_n128(x)
+ else
+ fun_l5_n662(x)
+ end
+end
+
+def fun_l4_n227(x)
+ if (x < 1)
+ fun_l5_n858(x)
+ else
+ fun_l5_n323(x)
+ end
+end
+
+def fun_l4_n228(x)
+ if (x < 1)
+ fun_l5_n923(x)
+ else
+ fun_l5_n206(x)
+ end
+end
+
+def fun_l4_n229(x)
+ if (x < 1)
+ fun_l5_n486(x)
+ else
+ fun_l5_n603(x)
+ end
+end
+
+def fun_l4_n230(x)
+ if (x < 1)
+ fun_l5_n116(x)
+ else
+ fun_l5_n887(x)
+ end
+end
+
+def fun_l4_n231(x)
+ if (x < 1)
+ fun_l5_n791(x)
+ else
+ fun_l5_n762(x)
+ end
+end
+
+def fun_l4_n232(x)
+ if (x < 1)
+ fun_l5_n511(x)
+ else
+ fun_l5_n890(x)
+ end
+end
+
+def fun_l4_n233(x)
+ if (x < 1)
+ fun_l5_n600(x)
+ else
+ fun_l5_n777(x)
+ end
+end
+
+def fun_l4_n234(x)
+ if (x < 1)
+ fun_l5_n458(x)
+ else
+ fun_l5_n379(x)
+ end
+end
+
+def fun_l4_n235(x)
+ if (x < 1)
+ fun_l5_n907(x)
+ else
+ fun_l5_n463(x)
+ end
+end
+
+def fun_l4_n236(x)
+ if (x < 1)
+ fun_l5_n177(x)
+ else
+ fun_l5_n732(x)
+ end
+end
+
+def fun_l4_n237(x)
+ if (x < 1)
+ fun_l5_n761(x)
+ else
+ fun_l5_n936(x)
+ end
+end
+
+def fun_l4_n238(x)
+ if (x < 1)
+ fun_l5_n757(x)
+ else
+ fun_l5_n733(x)
+ end
+end
+
+def fun_l4_n239(x)
+ if (x < 1)
+ fun_l5_n844(x)
+ else
+ fun_l5_n527(x)
+ end
+end
+
+def fun_l4_n240(x)
+ if (x < 1)
+ fun_l5_n594(x)
+ else
+ fun_l5_n620(x)
+ end
+end
+
+def fun_l4_n241(x)
+ if (x < 1)
+ fun_l5_n722(x)
+ else
+ fun_l5_n779(x)
+ end
+end
+
+def fun_l4_n242(x)
+ if (x < 1)
+ fun_l5_n663(x)
+ else
+ fun_l5_n237(x)
+ end
+end
+
+def fun_l4_n243(x)
+ if (x < 1)
+ fun_l5_n256(x)
+ else
+ fun_l5_n366(x)
+ end
+end
+
+def fun_l4_n244(x)
+ if (x < 1)
+ fun_l5_n614(x)
+ else
+ fun_l5_n895(x)
+ end
+end
+
+def fun_l4_n245(x)
+ if (x < 1)
+ fun_l5_n459(x)
+ else
+ fun_l5_n193(x)
+ end
+end
+
+def fun_l4_n246(x)
+ if (x < 1)
+ fun_l5_n780(x)
+ else
+ fun_l5_n175(x)
+ end
+end
+
+def fun_l4_n247(x)
+ if (x < 1)
+ fun_l5_n186(x)
+ else
+ fun_l5_n488(x)
+ end
+end
+
+def fun_l4_n248(x)
+ if (x < 1)
+ fun_l5_n156(x)
+ else
+ fun_l5_n807(x)
+ end
+end
+
+def fun_l4_n249(x)
+ if (x < 1)
+ fun_l5_n862(x)
+ else
+ fun_l5_n537(x)
+ end
+end
+
+def fun_l4_n250(x)
+ if (x < 1)
+ fun_l5_n880(x)
+ else
+ fun_l5_n528(x)
+ end
+end
+
+def fun_l4_n251(x)
+ if (x < 1)
+ fun_l5_n163(x)
+ else
+ fun_l5_n94(x)
+ end
+end
+
+def fun_l4_n252(x)
+ if (x < 1)
+ fun_l5_n937(x)
+ else
+ fun_l5_n582(x)
+ end
+end
+
+def fun_l4_n253(x)
+ if (x < 1)
+ fun_l5_n368(x)
+ else
+ fun_l5_n584(x)
+ end
+end
+
+def fun_l4_n254(x)
+ if (x < 1)
+ fun_l5_n566(x)
+ else
+ fun_l5_n449(x)
+ end
+end
+
+def fun_l4_n255(x)
+ if (x < 1)
+ fun_l5_n876(x)
+ else
+ fun_l5_n0(x)
+ end
+end
+
+def fun_l4_n256(x)
+ if (x < 1)
+ fun_l5_n842(x)
+ else
+ fun_l5_n469(x)
+ end
+end
+
+def fun_l4_n257(x)
+ if (x < 1)
+ fun_l5_n85(x)
+ else
+ fun_l5_n961(x)
+ end
+end
+
+def fun_l4_n258(x)
+ if (x < 1)
+ fun_l5_n120(x)
+ else
+ fun_l5_n893(x)
+ end
+end
+
+def fun_l4_n259(x)
+ if (x < 1)
+ fun_l5_n243(x)
+ else
+ fun_l5_n630(x)
+ end
+end
+
+def fun_l4_n260(x)
+ if (x < 1)
+ fun_l5_n710(x)
+ else
+ fun_l5_n715(x)
+ end
+end
+
+def fun_l4_n261(x)
+ if (x < 1)
+ fun_l5_n423(x)
+ else
+ fun_l5_n910(x)
+ end
+end
+
+def fun_l4_n262(x)
+ if (x < 1)
+ fun_l5_n505(x)
+ else
+ fun_l5_n532(x)
+ end
+end
+
+def fun_l4_n263(x)
+ if (x < 1)
+ fun_l5_n775(x)
+ else
+ fun_l5_n236(x)
+ end
+end
+
+def fun_l4_n264(x)
+ if (x < 1)
+ fun_l5_n140(x)
+ else
+ fun_l5_n295(x)
+ end
+end
+
+def fun_l4_n265(x)
+ if (x < 1)
+ fun_l5_n554(x)
+ else
+ fun_l5_n88(x)
+ end
+end
+
+def fun_l4_n266(x)
+ if (x < 1)
+ fun_l5_n831(x)
+ else
+ fun_l5_n307(x)
+ end
+end
+
+def fun_l4_n267(x)
+ if (x < 1)
+ fun_l5_n303(x)
+ else
+ fun_l5_n960(x)
+ end
+end
+
+def fun_l4_n268(x)
+ if (x < 1)
+ fun_l5_n322(x)
+ else
+ fun_l5_n264(x)
+ end
+end
+
+def fun_l4_n269(x)
+ if (x < 1)
+ fun_l5_n823(x)
+ else
+ fun_l5_n374(x)
+ end
+end
+
+def fun_l4_n270(x)
+ if (x < 1)
+ fun_l5_n76(x)
+ else
+ fun_l5_n918(x)
+ end
+end
+
+def fun_l4_n271(x)
+ if (x < 1)
+ fun_l5_n591(x)
+ else
+ fun_l5_n45(x)
+ end
+end
+
+def fun_l4_n272(x)
+ if (x < 1)
+ fun_l5_n686(x)
+ else
+ fun_l5_n836(x)
+ end
+end
+
+def fun_l4_n273(x)
+ if (x < 1)
+ fun_l5_n13(x)
+ else
+ fun_l5_n676(x)
+ end
+end
+
+def fun_l4_n274(x)
+ if (x < 1)
+ fun_l5_n120(x)
+ else
+ fun_l5_n180(x)
+ end
+end
+
+def fun_l4_n275(x)
+ if (x < 1)
+ fun_l5_n901(x)
+ else
+ fun_l5_n101(x)
+ end
+end
+
+def fun_l4_n276(x)
+ if (x < 1)
+ fun_l5_n289(x)
+ else
+ fun_l5_n238(x)
+ end
+end
+
+def fun_l4_n277(x)
+ if (x < 1)
+ fun_l5_n513(x)
+ else
+ fun_l5_n887(x)
+ end
+end
+
+def fun_l4_n278(x)
+ if (x < 1)
+ fun_l5_n799(x)
+ else
+ fun_l5_n763(x)
+ end
+end
+
+def fun_l4_n279(x)
+ if (x < 1)
+ fun_l5_n628(x)
+ else
+ fun_l5_n373(x)
+ end
+end
+
+def fun_l4_n280(x)
+ if (x < 1)
+ fun_l5_n661(x)
+ else
+ fun_l5_n826(x)
+ end
+end
+
+def fun_l4_n281(x)
+ if (x < 1)
+ fun_l5_n35(x)
+ else
+ fun_l5_n409(x)
+ end
+end
+
+def fun_l4_n282(x)
+ if (x < 1)
+ fun_l5_n721(x)
+ else
+ fun_l5_n719(x)
+ end
+end
+
+def fun_l4_n283(x)
+ if (x < 1)
+ fun_l5_n729(x)
+ else
+ fun_l5_n901(x)
+ end
+end
+
+def fun_l4_n284(x)
+ if (x < 1)
+ fun_l5_n17(x)
+ else
+ fun_l5_n482(x)
+ end
+end
+
+def fun_l4_n285(x)
+ if (x < 1)
+ fun_l5_n166(x)
+ else
+ fun_l5_n53(x)
+ end
+end
+
+def fun_l4_n286(x)
+ if (x < 1)
+ fun_l5_n873(x)
+ else
+ fun_l5_n383(x)
+ end
+end
+
+def fun_l4_n287(x)
+ if (x < 1)
+ fun_l5_n269(x)
+ else
+ fun_l5_n49(x)
+ end
+end
+
+def fun_l4_n288(x)
+ if (x < 1)
+ fun_l5_n292(x)
+ else
+ fun_l5_n353(x)
+ end
+end
+
+def fun_l4_n289(x)
+ if (x < 1)
+ fun_l5_n651(x)
+ else
+ fun_l5_n606(x)
+ end
+end
+
+def fun_l4_n290(x)
+ if (x < 1)
+ fun_l5_n287(x)
+ else
+ fun_l5_n444(x)
+ end
+end
+
+def fun_l4_n291(x)
+ if (x < 1)
+ fun_l5_n181(x)
+ else
+ fun_l5_n195(x)
+ end
+end
+
+def fun_l4_n292(x)
+ if (x < 1)
+ fun_l5_n20(x)
+ else
+ fun_l5_n58(x)
+ end
+end
+
+def fun_l4_n293(x)
+ if (x < 1)
+ fun_l5_n185(x)
+ else
+ fun_l5_n759(x)
+ end
+end
+
+def fun_l4_n294(x)
+ if (x < 1)
+ fun_l5_n938(x)
+ else
+ fun_l5_n849(x)
+ end
+end
+
+def fun_l4_n295(x)
+ if (x < 1)
+ fun_l5_n187(x)
+ else
+ fun_l5_n469(x)
+ end
+end
+
+def fun_l4_n296(x)
+ if (x < 1)
+ fun_l5_n516(x)
+ else
+ fun_l5_n314(x)
+ end
+end
+
+def fun_l4_n297(x)
+ if (x < 1)
+ fun_l5_n585(x)
+ else
+ fun_l5_n344(x)
+ end
+end
+
+def fun_l4_n298(x)
+ if (x < 1)
+ fun_l5_n637(x)
+ else
+ fun_l5_n103(x)
+ end
+end
+
+def fun_l4_n299(x)
+ if (x < 1)
+ fun_l5_n185(x)
+ else
+ fun_l5_n593(x)
+ end
+end
+
+def fun_l4_n300(x)
+ if (x < 1)
+ fun_l5_n773(x)
+ else
+ fun_l5_n758(x)
+ end
+end
+
+def fun_l4_n301(x)
+ if (x < 1)
+ fun_l5_n444(x)
+ else
+ fun_l5_n945(x)
+ end
+end
+
+def fun_l4_n302(x)
+ if (x < 1)
+ fun_l5_n728(x)
+ else
+ fun_l5_n484(x)
+ end
+end
+
+def fun_l4_n303(x)
+ if (x < 1)
+ fun_l5_n412(x)
+ else
+ fun_l5_n106(x)
+ end
+end
+
+def fun_l4_n304(x)
+ if (x < 1)
+ fun_l5_n399(x)
+ else
+ fun_l5_n234(x)
+ end
+end
+
+def fun_l4_n305(x)
+ if (x < 1)
+ fun_l5_n886(x)
+ else
+ fun_l5_n406(x)
+ end
+end
+
+def fun_l4_n306(x)
+ if (x < 1)
+ fun_l5_n535(x)
+ else
+ fun_l5_n338(x)
+ end
+end
+
+def fun_l4_n307(x)
+ if (x < 1)
+ fun_l5_n898(x)
+ else
+ fun_l5_n859(x)
+ end
+end
+
+def fun_l4_n308(x)
+ if (x < 1)
+ fun_l5_n25(x)
+ else
+ fun_l5_n476(x)
+ end
+end
+
+def fun_l4_n309(x)
+ if (x < 1)
+ fun_l5_n451(x)
+ else
+ fun_l5_n665(x)
+ end
+end
+
+def fun_l4_n310(x)
+ if (x < 1)
+ fun_l5_n937(x)
+ else
+ fun_l5_n555(x)
+ end
+end
+
+def fun_l4_n311(x)
+ if (x < 1)
+ fun_l5_n982(x)
+ else
+ fun_l5_n89(x)
+ end
+end
+
+def fun_l4_n312(x)
+ if (x < 1)
+ fun_l5_n32(x)
+ else
+ fun_l5_n908(x)
+ end
+end
+
+def fun_l4_n313(x)
+ if (x < 1)
+ fun_l5_n963(x)
+ else
+ fun_l5_n267(x)
+ end
+end
+
+def fun_l4_n314(x)
+ if (x < 1)
+ fun_l5_n3(x)
+ else
+ fun_l5_n60(x)
+ end
+end
+
+def fun_l4_n315(x)
+ if (x < 1)
+ fun_l5_n763(x)
+ else
+ fun_l5_n488(x)
+ end
+end
+
+def fun_l4_n316(x)
+ if (x < 1)
+ fun_l5_n696(x)
+ else
+ fun_l5_n663(x)
+ end
+end
+
+def fun_l4_n317(x)
+ if (x < 1)
+ fun_l5_n851(x)
+ else
+ fun_l5_n487(x)
+ end
+end
+
+def fun_l4_n318(x)
+ if (x < 1)
+ fun_l5_n327(x)
+ else
+ fun_l5_n433(x)
+ end
+end
+
+def fun_l4_n319(x)
+ if (x < 1)
+ fun_l5_n242(x)
+ else
+ fun_l5_n471(x)
+ end
+end
+
+def fun_l4_n320(x)
+ if (x < 1)
+ fun_l5_n786(x)
+ else
+ fun_l5_n622(x)
+ end
+end
+
+def fun_l4_n321(x)
+ if (x < 1)
+ fun_l5_n94(x)
+ else
+ fun_l5_n934(x)
+ end
+end
+
+def fun_l4_n322(x)
+ if (x < 1)
+ fun_l5_n665(x)
+ else
+ fun_l5_n386(x)
+ end
+end
+
+def fun_l4_n323(x)
+ if (x < 1)
+ fun_l5_n96(x)
+ else
+ fun_l5_n466(x)
+ end
+end
+
+def fun_l4_n324(x)
+ if (x < 1)
+ fun_l5_n394(x)
+ else
+ fun_l5_n595(x)
+ end
+end
+
+def fun_l4_n325(x)
+ if (x < 1)
+ fun_l5_n544(x)
+ else
+ fun_l5_n688(x)
+ end
+end
+
+def fun_l4_n326(x)
+ if (x < 1)
+ fun_l5_n295(x)
+ else
+ fun_l5_n206(x)
+ end
+end
+
+def fun_l4_n327(x)
+ if (x < 1)
+ fun_l5_n128(x)
+ else
+ fun_l5_n607(x)
+ end
+end
+
+def fun_l4_n328(x)
+ if (x < 1)
+ fun_l5_n987(x)
+ else
+ fun_l5_n109(x)
+ end
+end
+
+def fun_l4_n329(x)
+ if (x < 1)
+ fun_l5_n842(x)
+ else
+ fun_l5_n217(x)
+ end
+end
+
+def fun_l4_n330(x)
+ if (x < 1)
+ fun_l5_n92(x)
+ else
+ fun_l5_n774(x)
+ end
+end
+
+def fun_l4_n331(x)
+ if (x < 1)
+ fun_l5_n761(x)
+ else
+ fun_l5_n34(x)
+ end
+end
+
+def fun_l4_n332(x)
+ if (x < 1)
+ fun_l5_n867(x)
+ else
+ fun_l5_n645(x)
+ end
+end
+
+def fun_l4_n333(x)
+ if (x < 1)
+ fun_l5_n273(x)
+ else
+ fun_l5_n592(x)
+ end
+end
+
+def fun_l4_n334(x)
+ if (x < 1)
+ fun_l5_n29(x)
+ else
+ fun_l5_n985(x)
+ end
+end
+
+def fun_l4_n335(x)
+ if (x < 1)
+ fun_l5_n430(x)
+ else
+ fun_l5_n346(x)
+ end
+end
+
+def fun_l4_n336(x)
+ if (x < 1)
+ fun_l5_n367(x)
+ else
+ fun_l5_n686(x)
+ end
+end
+
+def fun_l4_n337(x)
+ if (x < 1)
+ fun_l5_n868(x)
+ else
+ fun_l5_n5(x)
+ end
+end
+
+def fun_l4_n338(x)
+ if (x < 1)
+ fun_l5_n998(x)
+ else
+ fun_l5_n64(x)
+ end
+end
+
+def fun_l4_n339(x)
+ if (x < 1)
+ fun_l5_n594(x)
+ else
+ fun_l5_n311(x)
+ end
+end
+
+def fun_l4_n340(x)
+ if (x < 1)
+ fun_l5_n547(x)
+ else
+ fun_l5_n573(x)
+ end
+end
+
+def fun_l4_n341(x)
+ if (x < 1)
+ fun_l5_n590(x)
+ else
+ fun_l5_n923(x)
+ end
+end
+
+def fun_l4_n342(x)
+ if (x < 1)
+ fun_l5_n538(x)
+ else
+ fun_l5_n118(x)
+ end
+end
+
+def fun_l4_n343(x)
+ if (x < 1)
+ fun_l5_n322(x)
+ else
+ fun_l5_n970(x)
+ end
+end
+
+def fun_l4_n344(x)
+ if (x < 1)
+ fun_l5_n809(x)
+ else
+ fun_l5_n958(x)
+ end
+end
+
+def fun_l4_n345(x)
+ if (x < 1)
+ fun_l5_n613(x)
+ else
+ fun_l5_n199(x)
+ end
+end
+
+def fun_l4_n346(x)
+ if (x < 1)
+ fun_l5_n298(x)
+ else
+ fun_l5_n273(x)
+ end
+end
+
+def fun_l4_n347(x)
+ if (x < 1)
+ fun_l5_n560(x)
+ else
+ fun_l5_n803(x)
+ end
+end
+
+def fun_l4_n348(x)
+ if (x < 1)
+ fun_l5_n672(x)
+ else
+ fun_l5_n952(x)
+ end
+end
+
+def fun_l4_n349(x)
+ if (x < 1)
+ fun_l5_n58(x)
+ else
+ fun_l5_n267(x)
+ end
+end
+
+def fun_l4_n350(x)
+ if (x < 1)
+ fun_l5_n933(x)
+ else
+ fun_l5_n773(x)
+ end
+end
+
+def fun_l4_n351(x)
+ if (x < 1)
+ fun_l5_n574(x)
+ else
+ fun_l5_n692(x)
+ end
+end
+
+def fun_l4_n352(x)
+ if (x < 1)
+ fun_l5_n537(x)
+ else
+ fun_l5_n312(x)
+ end
+end
+
+def fun_l4_n353(x)
+ if (x < 1)
+ fun_l5_n696(x)
+ else
+ fun_l5_n739(x)
+ end
+end
+
+def fun_l4_n354(x)
+ if (x < 1)
+ fun_l5_n871(x)
+ else
+ fun_l5_n86(x)
+ end
+end
+
+def fun_l4_n355(x)
+ if (x < 1)
+ fun_l5_n3(x)
+ else
+ fun_l5_n950(x)
+ end
+end
+
+def fun_l4_n356(x)
+ if (x < 1)
+ fun_l5_n560(x)
+ else
+ fun_l5_n45(x)
+ end
+end
+
+def fun_l4_n357(x)
+ if (x < 1)
+ fun_l5_n666(x)
+ else
+ fun_l5_n874(x)
+ end
+end
+
+def fun_l4_n358(x)
+ if (x < 1)
+ fun_l5_n457(x)
+ else
+ fun_l5_n7(x)
+ end
+end
+
+def fun_l4_n359(x)
+ if (x < 1)
+ fun_l5_n674(x)
+ else
+ fun_l5_n985(x)
+ end
+end
+
+def fun_l4_n360(x)
+ if (x < 1)
+ fun_l5_n960(x)
+ else
+ fun_l5_n228(x)
+ end
+end
+
+def fun_l4_n361(x)
+ if (x < 1)
+ fun_l5_n597(x)
+ else
+ fun_l5_n487(x)
+ end
+end
+
+def fun_l4_n362(x)
+ if (x < 1)
+ fun_l5_n145(x)
+ else
+ fun_l5_n278(x)
+ end
+end
+
+def fun_l4_n363(x)
+ if (x < 1)
+ fun_l5_n949(x)
+ else
+ fun_l5_n353(x)
+ end
+end
+
+def fun_l4_n364(x)
+ if (x < 1)
+ fun_l5_n604(x)
+ else
+ fun_l5_n250(x)
+ end
+end
+
+def fun_l4_n365(x)
+ if (x < 1)
+ fun_l5_n347(x)
+ else
+ fun_l5_n964(x)
+ end
+end
+
+def fun_l4_n366(x)
+ if (x < 1)
+ fun_l5_n331(x)
+ else
+ fun_l5_n657(x)
+ end
+end
+
+def fun_l4_n367(x)
+ if (x < 1)
+ fun_l5_n74(x)
+ else
+ fun_l5_n504(x)
+ end
+end
+
+def fun_l4_n368(x)
+ if (x < 1)
+ fun_l5_n9(x)
+ else
+ fun_l5_n993(x)
+ end
+end
+
+def fun_l4_n369(x)
+ if (x < 1)
+ fun_l5_n492(x)
+ else
+ fun_l5_n155(x)
+ end
+end
+
+def fun_l4_n370(x)
+ if (x < 1)
+ fun_l5_n848(x)
+ else
+ fun_l5_n178(x)
+ end
+end
+
+def fun_l4_n371(x)
+ if (x < 1)
+ fun_l5_n395(x)
+ else
+ fun_l5_n837(x)
+ end
+end
+
+def fun_l4_n372(x)
+ if (x < 1)
+ fun_l5_n834(x)
+ else
+ fun_l5_n719(x)
+ end
+end
+
+def fun_l4_n373(x)
+ if (x < 1)
+ fun_l5_n422(x)
+ else
+ fun_l5_n776(x)
+ end
+end
+
+def fun_l4_n374(x)
+ if (x < 1)
+ fun_l5_n293(x)
+ else
+ fun_l5_n385(x)
+ end
+end
+
+def fun_l4_n375(x)
+ if (x < 1)
+ fun_l5_n487(x)
+ else
+ fun_l5_n61(x)
+ end
+end
+
+def fun_l4_n376(x)
+ if (x < 1)
+ fun_l5_n493(x)
+ else
+ fun_l5_n629(x)
+ end
+end
+
+def fun_l4_n377(x)
+ if (x < 1)
+ fun_l5_n429(x)
+ else
+ fun_l5_n157(x)
+ end
+end
+
+def fun_l4_n378(x)
+ if (x < 1)
+ fun_l5_n145(x)
+ else
+ fun_l5_n988(x)
+ end
+end
+
+def fun_l4_n379(x)
+ if (x < 1)
+ fun_l5_n430(x)
+ else
+ fun_l5_n246(x)
+ end
+end
+
+def fun_l4_n380(x)
+ if (x < 1)
+ fun_l5_n320(x)
+ else
+ fun_l5_n284(x)
+ end
+end
+
+def fun_l4_n381(x)
+ if (x < 1)
+ fun_l5_n278(x)
+ else
+ fun_l5_n163(x)
+ end
+end
+
+def fun_l4_n382(x)
+ if (x < 1)
+ fun_l5_n999(x)
+ else
+ fun_l5_n907(x)
+ end
+end
+
+def fun_l4_n383(x)
+ if (x < 1)
+ fun_l5_n979(x)
+ else
+ fun_l5_n370(x)
+ end
+end
+
+def fun_l4_n384(x)
+ if (x < 1)
+ fun_l5_n58(x)
+ else
+ fun_l5_n60(x)
+ end
+end
+
+def fun_l4_n385(x)
+ if (x < 1)
+ fun_l5_n558(x)
+ else
+ fun_l5_n524(x)
+ end
+end
+
+def fun_l4_n386(x)
+ if (x < 1)
+ fun_l5_n438(x)
+ else
+ fun_l5_n799(x)
+ end
+end
+
+def fun_l4_n387(x)
+ if (x < 1)
+ fun_l5_n696(x)
+ else
+ fun_l5_n463(x)
+ end
+end
+
+def fun_l4_n388(x)
+ if (x < 1)
+ fun_l5_n376(x)
+ else
+ fun_l5_n943(x)
+ end
+end
+
+def fun_l4_n389(x)
+ if (x < 1)
+ fun_l5_n21(x)
+ else
+ fun_l5_n663(x)
+ end
+end
+
+def fun_l4_n390(x)
+ if (x < 1)
+ fun_l5_n8(x)
+ else
+ fun_l5_n348(x)
+ end
+end
+
+def fun_l4_n391(x)
+ if (x < 1)
+ fun_l5_n908(x)
+ else
+ fun_l5_n695(x)
+ end
+end
+
+def fun_l4_n392(x)
+ if (x < 1)
+ fun_l5_n97(x)
+ else
+ fun_l5_n466(x)
+ end
+end
+
+def fun_l4_n393(x)
+ if (x < 1)
+ fun_l5_n480(x)
+ else
+ fun_l5_n972(x)
+ end
+end
+
+def fun_l4_n394(x)
+ if (x < 1)
+ fun_l5_n85(x)
+ else
+ fun_l5_n849(x)
+ end
+end
+
+def fun_l4_n395(x)
+ if (x < 1)
+ fun_l5_n897(x)
+ else
+ fun_l5_n13(x)
+ end
+end
+
+def fun_l4_n396(x)
+ if (x < 1)
+ fun_l5_n628(x)
+ else
+ fun_l5_n743(x)
+ end
+end
+
+def fun_l4_n397(x)
+ if (x < 1)
+ fun_l5_n29(x)
+ else
+ fun_l5_n185(x)
+ end
+end
+
+def fun_l4_n398(x)
+ if (x < 1)
+ fun_l5_n464(x)
+ else
+ fun_l5_n742(x)
+ end
+end
+
+def fun_l4_n399(x)
+ if (x < 1)
+ fun_l5_n348(x)
+ else
+ fun_l5_n70(x)
+ end
+end
+
+def fun_l4_n400(x)
+ if (x < 1)
+ fun_l5_n397(x)
+ else
+ fun_l5_n132(x)
+ end
+end
+
+def fun_l4_n401(x)
+ if (x < 1)
+ fun_l5_n433(x)
+ else
+ fun_l5_n77(x)
+ end
+end
+
+def fun_l4_n402(x)
+ if (x < 1)
+ fun_l5_n24(x)
+ else
+ fun_l5_n160(x)
+ end
+end
+
+def fun_l4_n403(x)
+ if (x < 1)
+ fun_l5_n738(x)
+ else
+ fun_l5_n174(x)
+ end
+end
+
+def fun_l4_n404(x)
+ if (x < 1)
+ fun_l5_n585(x)
+ else
+ fun_l5_n670(x)
+ end
+end
+
+def fun_l4_n405(x)
+ if (x < 1)
+ fun_l5_n320(x)
+ else
+ fun_l5_n245(x)
+ end
+end
+
+def fun_l4_n406(x)
+ if (x < 1)
+ fun_l5_n357(x)
+ else
+ fun_l5_n742(x)
+ end
+end
+
+def fun_l4_n407(x)
+ if (x < 1)
+ fun_l5_n16(x)
+ else
+ fun_l5_n227(x)
+ end
+end
+
+def fun_l4_n408(x)
+ if (x < 1)
+ fun_l5_n360(x)
+ else
+ fun_l5_n18(x)
+ end
+end
+
+def fun_l4_n409(x)
+ if (x < 1)
+ fun_l5_n210(x)
+ else
+ fun_l5_n253(x)
+ end
+end
+
+def fun_l4_n410(x)
+ if (x < 1)
+ fun_l5_n915(x)
+ else
+ fun_l5_n605(x)
+ end
+end
+
+def fun_l4_n411(x)
+ if (x < 1)
+ fun_l5_n511(x)
+ else
+ fun_l5_n118(x)
+ end
+end
+
+def fun_l4_n412(x)
+ if (x < 1)
+ fun_l5_n680(x)
+ else
+ fun_l5_n445(x)
+ end
+end
+
+def fun_l4_n413(x)
+ if (x < 1)
+ fun_l5_n722(x)
+ else
+ fun_l5_n440(x)
+ end
+end
+
+def fun_l4_n414(x)
+ if (x < 1)
+ fun_l5_n382(x)
+ else
+ fun_l5_n380(x)
+ end
+end
+
+def fun_l4_n415(x)
+ if (x < 1)
+ fun_l5_n548(x)
+ else
+ fun_l5_n462(x)
+ end
+end
+
+def fun_l4_n416(x)
+ if (x < 1)
+ fun_l5_n12(x)
+ else
+ fun_l5_n952(x)
+ end
+end
+
+def fun_l4_n417(x)
+ if (x < 1)
+ fun_l5_n814(x)
+ else
+ fun_l5_n720(x)
+ end
+end
+
+def fun_l4_n418(x)
+ if (x < 1)
+ fun_l5_n804(x)
+ else
+ fun_l5_n243(x)
+ end
+end
+
+def fun_l4_n419(x)
+ if (x < 1)
+ fun_l5_n654(x)
+ else
+ fun_l5_n950(x)
+ end
+end
+
+def fun_l4_n420(x)
+ if (x < 1)
+ fun_l5_n998(x)
+ else
+ fun_l5_n937(x)
+ end
+end
+
+def fun_l4_n421(x)
+ if (x < 1)
+ fun_l5_n476(x)
+ else
+ fun_l5_n245(x)
+ end
+end
+
+def fun_l4_n422(x)
+ if (x < 1)
+ fun_l5_n778(x)
+ else
+ fun_l5_n950(x)
+ end
+end
+
+def fun_l4_n423(x)
+ if (x < 1)
+ fun_l5_n255(x)
+ else
+ fun_l5_n438(x)
+ end
+end
+
+def fun_l4_n424(x)
+ if (x < 1)
+ fun_l5_n906(x)
+ else
+ fun_l5_n329(x)
+ end
+end
+
+def fun_l4_n425(x)
+ if (x < 1)
+ fun_l5_n644(x)
+ else
+ fun_l5_n512(x)
+ end
+end
+
+def fun_l4_n426(x)
+ if (x < 1)
+ fun_l5_n558(x)
+ else
+ fun_l5_n925(x)
+ end
+end
+
+def fun_l4_n427(x)
+ if (x < 1)
+ fun_l5_n745(x)
+ else
+ fun_l5_n168(x)
+ end
+end
+
+def fun_l4_n428(x)
+ if (x < 1)
+ fun_l5_n682(x)
+ else
+ fun_l5_n298(x)
+ end
+end
+
+def fun_l4_n429(x)
+ if (x < 1)
+ fun_l5_n211(x)
+ else
+ fun_l5_n608(x)
+ end
+end
+
+def fun_l4_n430(x)
+ if (x < 1)
+ fun_l5_n100(x)
+ else
+ fun_l5_n287(x)
+ end
+end
+
+def fun_l4_n431(x)
+ if (x < 1)
+ fun_l5_n513(x)
+ else
+ fun_l5_n764(x)
+ end
+end
+
+def fun_l4_n432(x)
+ if (x < 1)
+ fun_l5_n925(x)
+ else
+ fun_l5_n857(x)
+ end
+end
+
+def fun_l4_n433(x)
+ if (x < 1)
+ fun_l5_n279(x)
+ else
+ fun_l5_n429(x)
+ end
+end
+
+def fun_l4_n434(x)
+ if (x < 1)
+ fun_l5_n376(x)
+ else
+ fun_l5_n811(x)
+ end
+end
+
+def fun_l4_n435(x)
+ if (x < 1)
+ fun_l5_n893(x)
+ else
+ fun_l5_n136(x)
+ end
+end
+
+def fun_l4_n436(x)
+ if (x < 1)
+ fun_l5_n283(x)
+ else
+ fun_l5_n508(x)
+ end
+end
+
+def fun_l4_n437(x)
+ if (x < 1)
+ fun_l5_n478(x)
+ else
+ fun_l5_n589(x)
+ end
+end
+
+def fun_l4_n438(x)
+ if (x < 1)
+ fun_l5_n460(x)
+ else
+ fun_l5_n589(x)
+ end
+end
+
+def fun_l4_n439(x)
+ if (x < 1)
+ fun_l5_n745(x)
+ else
+ fun_l5_n5(x)
+ end
+end
+
+def fun_l4_n440(x)
+ if (x < 1)
+ fun_l5_n601(x)
+ else
+ fun_l5_n322(x)
+ end
+end
+
+def fun_l4_n441(x)
+ if (x < 1)
+ fun_l5_n703(x)
+ else
+ fun_l5_n322(x)
+ end
+end
+
+def fun_l4_n442(x)
+ if (x < 1)
+ fun_l5_n810(x)
+ else
+ fun_l5_n363(x)
+ end
+end
+
+def fun_l4_n443(x)
+ if (x < 1)
+ fun_l5_n62(x)
+ else
+ fun_l5_n995(x)
+ end
+end
+
+def fun_l4_n444(x)
+ if (x < 1)
+ fun_l5_n196(x)
+ else
+ fun_l5_n156(x)
+ end
+end
+
+def fun_l4_n445(x)
+ if (x < 1)
+ fun_l5_n456(x)
+ else
+ fun_l5_n820(x)
+ end
+end
+
+def fun_l4_n446(x)
+ if (x < 1)
+ fun_l5_n592(x)
+ else
+ fun_l5_n214(x)
+ end
+end
+
+def fun_l4_n447(x)
+ if (x < 1)
+ fun_l5_n44(x)
+ else
+ fun_l5_n769(x)
+ end
+end
+
+def fun_l4_n448(x)
+ if (x < 1)
+ fun_l5_n694(x)
+ else
+ fun_l5_n909(x)
+ end
+end
+
+def fun_l4_n449(x)
+ if (x < 1)
+ fun_l5_n297(x)
+ else
+ fun_l5_n134(x)
+ end
+end
+
+def fun_l4_n450(x)
+ if (x < 1)
+ fun_l5_n878(x)
+ else
+ fun_l5_n475(x)
+ end
+end
+
+def fun_l4_n451(x)
+ if (x < 1)
+ fun_l5_n338(x)
+ else
+ fun_l5_n700(x)
+ end
+end
+
+def fun_l4_n452(x)
+ if (x < 1)
+ fun_l5_n813(x)
+ else
+ fun_l5_n41(x)
+ end
+end
+
+def fun_l4_n453(x)
+ if (x < 1)
+ fun_l5_n176(x)
+ else
+ fun_l5_n758(x)
+ end
+end
+
+def fun_l4_n454(x)
+ if (x < 1)
+ fun_l5_n60(x)
+ else
+ fun_l5_n608(x)
+ end
+end
+
+def fun_l4_n455(x)
+ if (x < 1)
+ fun_l5_n550(x)
+ else
+ fun_l5_n607(x)
+ end
+end
+
+def fun_l4_n456(x)
+ if (x < 1)
+ fun_l5_n535(x)
+ else
+ fun_l5_n478(x)
+ end
+end
+
+def fun_l4_n457(x)
+ if (x < 1)
+ fun_l5_n768(x)
+ else
+ fun_l5_n613(x)
+ end
+end
+
+def fun_l4_n458(x)
+ if (x < 1)
+ fun_l5_n686(x)
+ else
+ fun_l5_n208(x)
+ end
+end
+
+def fun_l4_n459(x)
+ if (x < 1)
+ fun_l5_n167(x)
+ else
+ fun_l5_n875(x)
+ end
+end
+
+def fun_l4_n460(x)
+ if (x < 1)
+ fun_l5_n202(x)
+ else
+ fun_l5_n440(x)
+ end
+end
+
+def fun_l4_n461(x)
+ if (x < 1)
+ fun_l5_n64(x)
+ else
+ fun_l5_n845(x)
+ end
+end
+
+def fun_l4_n462(x)
+ if (x < 1)
+ fun_l5_n914(x)
+ else
+ fun_l5_n699(x)
+ end
+end
+
+def fun_l4_n463(x)
+ if (x < 1)
+ fun_l5_n204(x)
+ else
+ fun_l5_n723(x)
+ end
+end
+
+def fun_l4_n464(x)
+ if (x < 1)
+ fun_l5_n549(x)
+ else
+ fun_l5_n375(x)
+ end
+end
+
+def fun_l4_n465(x)
+ if (x < 1)
+ fun_l5_n610(x)
+ else
+ fun_l5_n596(x)
+ end
+end
+
+def fun_l4_n466(x)
+ if (x < 1)
+ fun_l5_n571(x)
+ else
+ fun_l5_n618(x)
+ end
+end
+
+def fun_l4_n467(x)
+ if (x < 1)
+ fun_l5_n428(x)
+ else
+ fun_l5_n315(x)
+ end
+end
+
+def fun_l4_n468(x)
+ if (x < 1)
+ fun_l5_n19(x)
+ else
+ fun_l5_n301(x)
+ end
+end
+
+def fun_l4_n469(x)
+ if (x < 1)
+ fun_l5_n38(x)
+ else
+ fun_l5_n895(x)
+ end
+end
+
+def fun_l4_n470(x)
+ if (x < 1)
+ fun_l5_n815(x)
+ else
+ fun_l5_n303(x)
+ end
+end
+
+def fun_l4_n471(x)
+ if (x < 1)
+ fun_l5_n876(x)
+ else
+ fun_l5_n221(x)
+ end
+end
+
+def fun_l4_n472(x)
+ if (x < 1)
+ fun_l5_n199(x)
+ else
+ fun_l5_n354(x)
+ end
+end
+
+def fun_l4_n473(x)
+ if (x < 1)
+ fun_l5_n56(x)
+ else
+ fun_l5_n197(x)
+ end
+end
+
+def fun_l4_n474(x)
+ if (x < 1)
+ fun_l5_n573(x)
+ else
+ fun_l5_n616(x)
+ end
+end
+
+def fun_l4_n475(x)
+ if (x < 1)
+ fun_l5_n313(x)
+ else
+ fun_l5_n209(x)
+ end
+end
+
+def fun_l4_n476(x)
+ if (x < 1)
+ fun_l5_n229(x)
+ else
+ fun_l5_n51(x)
+ end
+end
+
+def fun_l4_n477(x)
+ if (x < 1)
+ fun_l5_n768(x)
+ else
+ fun_l5_n368(x)
+ end
+end
+
+def fun_l4_n478(x)
+ if (x < 1)
+ fun_l5_n80(x)
+ else
+ fun_l5_n411(x)
+ end
+end
+
+def fun_l4_n479(x)
+ if (x < 1)
+ fun_l5_n221(x)
+ else
+ fun_l5_n266(x)
+ end
+end
+
+def fun_l4_n480(x)
+ if (x < 1)
+ fun_l5_n463(x)
+ else
+ fun_l5_n71(x)
+ end
+end
+
+def fun_l4_n481(x)
+ if (x < 1)
+ fun_l5_n446(x)
+ else
+ fun_l5_n610(x)
+ end
+end
+
+def fun_l4_n482(x)
+ if (x < 1)
+ fun_l5_n402(x)
+ else
+ fun_l5_n449(x)
+ end
+end
+
+def fun_l4_n483(x)
+ if (x < 1)
+ fun_l5_n497(x)
+ else
+ fun_l5_n521(x)
+ end
+end
+
+def fun_l4_n484(x)
+ if (x < 1)
+ fun_l5_n895(x)
+ else
+ fun_l5_n361(x)
+ end
+end
+
+def fun_l4_n485(x)
+ if (x < 1)
+ fun_l5_n254(x)
+ else
+ fun_l5_n366(x)
+ end
+end
+
+def fun_l4_n486(x)
+ if (x < 1)
+ fun_l5_n179(x)
+ else
+ fun_l5_n154(x)
+ end
+end
+
+def fun_l4_n487(x)
+ if (x < 1)
+ fun_l5_n905(x)
+ else
+ fun_l5_n30(x)
+ end
+end
+
+def fun_l4_n488(x)
+ if (x < 1)
+ fun_l5_n989(x)
+ else
+ fun_l5_n640(x)
+ end
+end
+
+def fun_l4_n489(x)
+ if (x < 1)
+ fun_l5_n664(x)
+ else
+ fun_l5_n87(x)
+ end
+end
+
+def fun_l4_n490(x)
+ if (x < 1)
+ fun_l5_n518(x)
+ else
+ fun_l5_n986(x)
+ end
+end
+
+def fun_l4_n491(x)
+ if (x < 1)
+ fun_l5_n443(x)
+ else
+ fun_l5_n532(x)
+ end
+end
+
+def fun_l4_n492(x)
+ if (x < 1)
+ fun_l5_n349(x)
+ else
+ fun_l5_n373(x)
+ end
+end
+
+def fun_l4_n493(x)
+ if (x < 1)
+ fun_l5_n208(x)
+ else
+ fun_l5_n404(x)
+ end
+end
+
+def fun_l4_n494(x)
+ if (x < 1)
+ fun_l5_n12(x)
+ else
+ fun_l5_n608(x)
+ end
+end
+
+def fun_l4_n495(x)
+ if (x < 1)
+ fun_l5_n12(x)
+ else
+ fun_l5_n42(x)
+ end
+end
+
+def fun_l4_n496(x)
+ if (x < 1)
+ fun_l5_n442(x)
+ else
+ fun_l5_n809(x)
+ end
+end
+
+def fun_l4_n497(x)
+ if (x < 1)
+ fun_l5_n266(x)
+ else
+ fun_l5_n259(x)
+ end
+end
+
+def fun_l4_n498(x)
+ if (x < 1)
+ fun_l5_n342(x)
+ else
+ fun_l5_n275(x)
+ end
+end
+
+def fun_l4_n499(x)
+ if (x < 1)
+ fun_l5_n806(x)
+ else
+ fun_l5_n797(x)
+ end
+end
+
+def fun_l4_n500(x)
+ if (x < 1)
+ fun_l5_n646(x)
+ else
+ fun_l5_n426(x)
+ end
+end
+
+def fun_l4_n501(x)
+ if (x < 1)
+ fun_l5_n593(x)
+ else
+ fun_l5_n860(x)
+ end
+end
+
+def fun_l4_n502(x)
+ if (x < 1)
+ fun_l5_n355(x)
+ else
+ fun_l5_n411(x)
+ end
+end
+
+def fun_l4_n503(x)
+ if (x < 1)
+ fun_l5_n602(x)
+ else
+ fun_l5_n26(x)
+ end
+end
+
+def fun_l4_n504(x)
+ if (x < 1)
+ fun_l5_n875(x)
+ else
+ fun_l5_n716(x)
+ end
+end
+
+def fun_l4_n505(x)
+ if (x < 1)
+ fun_l5_n248(x)
+ else
+ fun_l5_n388(x)
+ end
+end
+
+def fun_l4_n506(x)
+ if (x < 1)
+ fun_l5_n273(x)
+ else
+ fun_l5_n11(x)
+ end
+end
+
+def fun_l4_n507(x)
+ if (x < 1)
+ fun_l5_n291(x)
+ else
+ fun_l5_n464(x)
+ end
+end
+
+def fun_l4_n508(x)
+ if (x < 1)
+ fun_l5_n309(x)
+ else
+ fun_l5_n198(x)
+ end
+end
+
+def fun_l4_n509(x)
+ if (x < 1)
+ fun_l5_n85(x)
+ else
+ fun_l5_n375(x)
+ end
+end
+
+def fun_l4_n510(x)
+ if (x < 1)
+ fun_l5_n993(x)
+ else
+ fun_l5_n311(x)
+ end
+end
+
+def fun_l4_n511(x)
+ if (x < 1)
+ fun_l5_n824(x)
+ else
+ fun_l5_n936(x)
+ end
+end
+
+def fun_l4_n512(x)
+ if (x < 1)
+ fun_l5_n897(x)
+ else
+ fun_l5_n995(x)
+ end
+end
+
+def fun_l4_n513(x)
+ if (x < 1)
+ fun_l5_n443(x)
+ else
+ fun_l5_n511(x)
+ end
+end
+
+def fun_l4_n514(x)
+ if (x < 1)
+ fun_l5_n965(x)
+ else
+ fun_l5_n506(x)
+ end
+end
+
+def fun_l4_n515(x)
+ if (x < 1)
+ fun_l5_n480(x)
+ else
+ fun_l5_n464(x)
+ end
+end
+
+def fun_l4_n516(x)
+ if (x < 1)
+ fun_l5_n396(x)
+ else
+ fun_l5_n355(x)
+ end
+end
+
+def fun_l4_n517(x)
+ if (x < 1)
+ fun_l5_n782(x)
+ else
+ fun_l5_n624(x)
+ end
+end
+
+def fun_l4_n518(x)
+ if (x < 1)
+ fun_l5_n460(x)
+ else
+ fun_l5_n920(x)
+ end
+end
+
+def fun_l4_n519(x)
+ if (x < 1)
+ fun_l5_n258(x)
+ else
+ fun_l5_n296(x)
+ end
+end
+
+def fun_l4_n520(x)
+ if (x < 1)
+ fun_l5_n344(x)
+ else
+ fun_l5_n180(x)
+ end
+end
+
+def fun_l4_n521(x)
+ if (x < 1)
+ fun_l5_n489(x)
+ else
+ fun_l5_n818(x)
+ end
+end
+
+def fun_l4_n522(x)
+ if (x < 1)
+ fun_l5_n246(x)
+ else
+ fun_l5_n25(x)
+ end
+end
+
+def fun_l4_n523(x)
+ if (x < 1)
+ fun_l5_n165(x)
+ else
+ fun_l5_n835(x)
+ end
+end
+
+def fun_l4_n524(x)
+ if (x < 1)
+ fun_l5_n836(x)
+ else
+ fun_l5_n838(x)
+ end
+end
+
+def fun_l4_n525(x)
+ if (x < 1)
+ fun_l5_n781(x)
+ else
+ fun_l5_n183(x)
+ end
+end
+
+def fun_l4_n526(x)
+ if (x < 1)
+ fun_l5_n335(x)
+ else
+ fun_l5_n809(x)
+ end
+end
+
+def fun_l4_n527(x)
+ if (x < 1)
+ fun_l5_n748(x)
+ else
+ fun_l5_n674(x)
+ end
+end
+
+def fun_l4_n528(x)
+ if (x < 1)
+ fun_l5_n612(x)
+ else
+ fun_l5_n933(x)
+ end
+end
+
+def fun_l4_n529(x)
+ if (x < 1)
+ fun_l5_n781(x)
+ else
+ fun_l5_n174(x)
+ end
+end
+
+def fun_l4_n530(x)
+ if (x < 1)
+ fun_l5_n299(x)
+ else
+ fun_l5_n677(x)
+ end
+end
+
+def fun_l4_n531(x)
+ if (x < 1)
+ fun_l5_n455(x)
+ else
+ fun_l5_n211(x)
+ end
+end
+
+def fun_l4_n532(x)
+ if (x < 1)
+ fun_l5_n981(x)
+ else
+ fun_l5_n605(x)
+ end
+end
+
+def fun_l4_n533(x)
+ if (x < 1)
+ fun_l5_n299(x)
+ else
+ fun_l5_n30(x)
+ end
+end
+
+def fun_l4_n534(x)
+ if (x < 1)
+ fun_l5_n642(x)
+ else
+ fun_l5_n652(x)
+ end
+end
+
+def fun_l4_n535(x)
+ if (x < 1)
+ fun_l5_n904(x)
+ else
+ fun_l5_n133(x)
+ end
+end
+
+def fun_l4_n536(x)
+ if (x < 1)
+ fun_l5_n253(x)
+ else
+ fun_l5_n330(x)
+ end
+end
+
+def fun_l4_n537(x)
+ if (x < 1)
+ fun_l5_n357(x)
+ else
+ fun_l5_n533(x)
+ end
+end
+
+def fun_l4_n538(x)
+ if (x < 1)
+ fun_l5_n484(x)
+ else
+ fun_l5_n438(x)
+ end
+end
+
+def fun_l4_n539(x)
+ if (x < 1)
+ fun_l5_n200(x)
+ else
+ fun_l5_n235(x)
+ end
+end
+
+def fun_l4_n540(x)
+ if (x < 1)
+ fun_l5_n929(x)
+ else
+ fun_l5_n875(x)
+ end
+end
+
+def fun_l4_n541(x)
+ if (x < 1)
+ fun_l5_n237(x)
+ else
+ fun_l5_n688(x)
+ end
+end
+
+def fun_l4_n542(x)
+ if (x < 1)
+ fun_l5_n723(x)
+ else
+ fun_l5_n308(x)
+ end
+end
+
+def fun_l4_n543(x)
+ if (x < 1)
+ fun_l5_n591(x)
+ else
+ fun_l5_n93(x)
+ end
+end
+
+def fun_l4_n544(x)
+ if (x < 1)
+ fun_l5_n258(x)
+ else
+ fun_l5_n205(x)
+ end
+end
+
+def fun_l4_n545(x)
+ if (x < 1)
+ fun_l5_n910(x)
+ else
+ fun_l5_n529(x)
+ end
+end
+
+def fun_l4_n546(x)
+ if (x < 1)
+ fun_l5_n255(x)
+ else
+ fun_l5_n262(x)
+ end
+end
+
+def fun_l4_n547(x)
+ if (x < 1)
+ fun_l5_n674(x)
+ else
+ fun_l5_n813(x)
+ end
+end
+
+def fun_l4_n548(x)
+ if (x < 1)
+ fun_l5_n9(x)
+ else
+ fun_l5_n709(x)
+ end
+end
+
+def fun_l4_n549(x)
+ if (x < 1)
+ fun_l5_n146(x)
+ else
+ fun_l5_n801(x)
+ end
+end
+
+def fun_l4_n550(x)
+ if (x < 1)
+ fun_l5_n593(x)
+ else
+ fun_l5_n428(x)
+ end
+end
+
+def fun_l4_n551(x)
+ if (x < 1)
+ fun_l5_n953(x)
+ else
+ fun_l5_n238(x)
+ end
+end
+
+def fun_l4_n552(x)
+ if (x < 1)
+ fun_l5_n900(x)
+ else
+ fun_l5_n246(x)
+ end
+end
+
+def fun_l4_n553(x)
+ if (x < 1)
+ fun_l5_n400(x)
+ else
+ fun_l5_n150(x)
+ end
+end
+
+def fun_l4_n554(x)
+ if (x < 1)
+ fun_l5_n697(x)
+ else
+ fun_l5_n681(x)
+ end
+end
+
+def fun_l4_n555(x)
+ if (x < 1)
+ fun_l5_n487(x)
+ else
+ fun_l5_n784(x)
+ end
+end
+
+def fun_l4_n556(x)
+ if (x < 1)
+ fun_l5_n485(x)
+ else
+ fun_l5_n984(x)
+ end
+end
+
+def fun_l4_n557(x)
+ if (x < 1)
+ fun_l5_n774(x)
+ else
+ fun_l5_n864(x)
+ end
+end
+
+def fun_l4_n558(x)
+ if (x < 1)
+ fun_l5_n823(x)
+ else
+ fun_l5_n527(x)
+ end
+end
+
+def fun_l4_n559(x)
+ if (x < 1)
+ fun_l5_n204(x)
+ else
+ fun_l5_n114(x)
+ end
+end
+
+def fun_l4_n560(x)
+ if (x < 1)
+ fun_l5_n835(x)
+ else
+ fun_l5_n930(x)
+ end
+end
+
+def fun_l4_n561(x)
+ if (x < 1)
+ fun_l5_n481(x)
+ else
+ fun_l5_n471(x)
+ end
+end
+
+def fun_l4_n562(x)
+ if (x < 1)
+ fun_l5_n459(x)
+ else
+ fun_l5_n526(x)
+ end
+end
+
+def fun_l4_n563(x)
+ if (x < 1)
+ fun_l5_n148(x)
+ else
+ fun_l5_n473(x)
+ end
+end
+
+def fun_l4_n564(x)
+ if (x < 1)
+ fun_l5_n448(x)
+ else
+ fun_l5_n389(x)
+ end
+end
+
+def fun_l4_n565(x)
+ if (x < 1)
+ fun_l5_n600(x)
+ else
+ fun_l5_n405(x)
+ end
+end
+
+def fun_l4_n566(x)
+ if (x < 1)
+ fun_l5_n67(x)
+ else
+ fun_l5_n145(x)
+ end
+end
+
+def fun_l4_n567(x)
+ if (x < 1)
+ fun_l5_n63(x)
+ else
+ fun_l5_n206(x)
+ end
+end
+
+def fun_l4_n568(x)
+ if (x < 1)
+ fun_l5_n463(x)
+ else
+ fun_l5_n288(x)
+ end
+end
+
+def fun_l4_n569(x)
+ if (x < 1)
+ fun_l5_n143(x)
+ else
+ fun_l5_n879(x)
+ end
+end
+
+def fun_l4_n570(x)
+ if (x < 1)
+ fun_l5_n552(x)
+ else
+ fun_l5_n517(x)
+ end
+end
+
+def fun_l4_n571(x)
+ if (x < 1)
+ fun_l5_n527(x)
+ else
+ fun_l5_n680(x)
+ end
+end
+
+def fun_l4_n572(x)
+ if (x < 1)
+ fun_l5_n853(x)
+ else
+ fun_l5_n97(x)
+ end
+end
+
+def fun_l4_n573(x)
+ if (x < 1)
+ fun_l5_n277(x)
+ else
+ fun_l5_n329(x)
+ end
+end
+
+def fun_l4_n574(x)
+ if (x < 1)
+ fun_l5_n952(x)
+ else
+ fun_l5_n515(x)
+ end
+end
+
+def fun_l4_n575(x)
+ if (x < 1)
+ fun_l5_n64(x)
+ else
+ fun_l5_n576(x)
+ end
+end
+
+def fun_l4_n576(x)
+ if (x < 1)
+ fun_l5_n57(x)
+ else
+ fun_l5_n499(x)
+ end
+end
+
+def fun_l4_n577(x)
+ if (x < 1)
+ fun_l5_n10(x)
+ else
+ fun_l5_n208(x)
+ end
+end
+
+def fun_l4_n578(x)
+ if (x < 1)
+ fun_l5_n361(x)
+ else
+ fun_l5_n447(x)
+ end
+end
+
+def fun_l4_n579(x)
+ if (x < 1)
+ fun_l5_n788(x)
+ else
+ fun_l5_n299(x)
+ end
+end
+
+def fun_l4_n580(x)
+ if (x < 1)
+ fun_l5_n973(x)
+ else
+ fun_l5_n753(x)
+ end
+end
+
+def fun_l4_n581(x)
+ if (x < 1)
+ fun_l5_n862(x)
+ else
+ fun_l5_n110(x)
+ end
+end
+
+def fun_l4_n582(x)
+ if (x < 1)
+ fun_l5_n760(x)
+ else
+ fun_l5_n256(x)
+ end
+end
+
+def fun_l4_n583(x)
+ if (x < 1)
+ fun_l5_n8(x)
+ else
+ fun_l5_n922(x)
+ end
+end
+
+def fun_l4_n584(x)
+ if (x < 1)
+ fun_l5_n100(x)
+ else
+ fun_l5_n230(x)
+ end
+end
+
+def fun_l4_n585(x)
+ if (x < 1)
+ fun_l5_n183(x)
+ else
+ fun_l5_n350(x)
+ end
+end
+
+def fun_l4_n586(x)
+ if (x < 1)
+ fun_l5_n294(x)
+ else
+ fun_l5_n673(x)
+ end
+end
+
+def fun_l4_n587(x)
+ if (x < 1)
+ fun_l5_n51(x)
+ else
+ fun_l5_n718(x)
+ end
+end
+
+def fun_l4_n588(x)
+ if (x < 1)
+ fun_l5_n257(x)
+ else
+ fun_l5_n111(x)
+ end
+end
+
+def fun_l4_n589(x)
+ if (x < 1)
+ fun_l5_n727(x)
+ else
+ fun_l5_n585(x)
+ end
+end
+
+def fun_l4_n590(x)
+ if (x < 1)
+ fun_l5_n205(x)
+ else
+ fun_l5_n308(x)
+ end
+end
+
+def fun_l4_n591(x)
+ if (x < 1)
+ fun_l5_n618(x)
+ else
+ fun_l5_n970(x)
+ end
+end
+
+def fun_l4_n592(x)
+ if (x < 1)
+ fun_l5_n631(x)
+ else
+ fun_l5_n513(x)
+ end
+end
+
+def fun_l4_n593(x)
+ if (x < 1)
+ fun_l5_n270(x)
+ else
+ fun_l5_n737(x)
+ end
+end
+
+def fun_l4_n594(x)
+ if (x < 1)
+ fun_l5_n464(x)
+ else
+ fun_l5_n217(x)
+ end
+end
+
+def fun_l4_n595(x)
+ if (x < 1)
+ fun_l5_n650(x)
+ else
+ fun_l5_n616(x)
+ end
+end
+
+def fun_l4_n596(x)
+ if (x < 1)
+ fun_l5_n542(x)
+ else
+ fun_l5_n613(x)
+ end
+end
+
+def fun_l4_n597(x)
+ if (x < 1)
+ fun_l5_n312(x)
+ else
+ fun_l5_n7(x)
+ end
+end
+
+def fun_l4_n598(x)
+ if (x < 1)
+ fun_l5_n164(x)
+ else
+ fun_l5_n592(x)
+ end
+end
+
+def fun_l4_n599(x)
+ if (x < 1)
+ fun_l5_n326(x)
+ else
+ fun_l5_n894(x)
+ end
+end
+
+def fun_l4_n600(x)
+ if (x < 1)
+ fun_l5_n243(x)
+ else
+ fun_l5_n233(x)
+ end
+end
+
+def fun_l4_n601(x)
+ if (x < 1)
+ fun_l5_n600(x)
+ else
+ fun_l5_n7(x)
+ end
+end
+
+def fun_l4_n602(x)
+ if (x < 1)
+ fun_l5_n334(x)
+ else
+ fun_l5_n282(x)
+ end
+end
+
+def fun_l4_n603(x)
+ if (x < 1)
+ fun_l5_n202(x)
+ else
+ fun_l5_n252(x)
+ end
+end
+
+def fun_l4_n604(x)
+ if (x < 1)
+ fun_l5_n173(x)
+ else
+ fun_l5_n685(x)
+ end
+end
+
+def fun_l4_n605(x)
+ if (x < 1)
+ fun_l5_n953(x)
+ else
+ fun_l5_n416(x)
+ end
+end
+
+def fun_l4_n606(x)
+ if (x < 1)
+ fun_l5_n775(x)
+ else
+ fun_l5_n372(x)
+ end
+end
+
+def fun_l4_n607(x)
+ if (x < 1)
+ fun_l5_n723(x)
+ else
+ fun_l5_n894(x)
+ end
+end
+
+def fun_l4_n608(x)
+ if (x < 1)
+ fun_l5_n690(x)
+ else
+ fun_l5_n26(x)
+ end
+end
+
+def fun_l4_n609(x)
+ if (x < 1)
+ fun_l5_n555(x)
+ else
+ fun_l5_n717(x)
+ end
+end
+
+def fun_l4_n610(x)
+ if (x < 1)
+ fun_l5_n597(x)
+ else
+ fun_l5_n106(x)
+ end
+end
+
+def fun_l4_n611(x)
+ if (x < 1)
+ fun_l5_n405(x)
+ else
+ fun_l5_n588(x)
+ end
+end
+
+def fun_l4_n612(x)
+ if (x < 1)
+ fun_l5_n41(x)
+ else
+ fun_l5_n558(x)
+ end
+end
+
+def fun_l4_n613(x)
+ if (x < 1)
+ fun_l5_n875(x)
+ else
+ fun_l5_n492(x)
+ end
+end
+
+def fun_l4_n614(x)
+ if (x < 1)
+ fun_l5_n605(x)
+ else
+ fun_l5_n461(x)
+ end
+end
+
+def fun_l4_n615(x)
+ if (x < 1)
+ fun_l5_n726(x)
+ else
+ fun_l5_n534(x)
+ end
+end
+
+def fun_l4_n616(x)
+ if (x < 1)
+ fun_l5_n919(x)
+ else
+ fun_l5_n404(x)
+ end
+end
+
+def fun_l4_n617(x)
+ if (x < 1)
+ fun_l5_n383(x)
+ else
+ fun_l5_n324(x)
+ end
+end
+
+def fun_l4_n618(x)
+ if (x < 1)
+ fun_l5_n286(x)
+ else
+ fun_l5_n157(x)
+ end
+end
+
+def fun_l4_n619(x)
+ if (x < 1)
+ fun_l5_n713(x)
+ else
+ fun_l5_n388(x)
+ end
+end
+
+def fun_l4_n620(x)
+ if (x < 1)
+ fun_l5_n773(x)
+ else
+ fun_l5_n790(x)
+ end
+end
+
+def fun_l4_n621(x)
+ if (x < 1)
+ fun_l5_n797(x)
+ else
+ fun_l5_n720(x)
+ end
+end
+
+def fun_l4_n622(x)
+ if (x < 1)
+ fun_l5_n799(x)
+ else
+ fun_l5_n423(x)
+ end
+end
+
+def fun_l4_n623(x)
+ if (x < 1)
+ fun_l5_n390(x)
+ else
+ fun_l5_n941(x)
+ end
+end
+
+def fun_l4_n624(x)
+ if (x < 1)
+ fun_l5_n584(x)
+ else
+ fun_l5_n191(x)
+ end
+end
+
+def fun_l4_n625(x)
+ if (x < 1)
+ fun_l5_n243(x)
+ else
+ fun_l5_n208(x)
+ end
+end
+
+def fun_l4_n626(x)
+ if (x < 1)
+ fun_l5_n136(x)
+ else
+ fun_l5_n791(x)
+ end
+end
+
+def fun_l4_n627(x)
+ if (x < 1)
+ fun_l5_n684(x)
+ else
+ fun_l5_n341(x)
+ end
+end
+
+def fun_l4_n628(x)
+ if (x < 1)
+ fun_l5_n876(x)
+ else
+ fun_l5_n27(x)
+ end
+end
+
+def fun_l4_n629(x)
+ if (x < 1)
+ fun_l5_n18(x)
+ else
+ fun_l5_n867(x)
+ end
+end
+
+def fun_l4_n630(x)
+ if (x < 1)
+ fun_l5_n4(x)
+ else
+ fun_l5_n871(x)
+ end
+end
+
+def fun_l4_n631(x)
+ if (x < 1)
+ fun_l5_n578(x)
+ else
+ fun_l5_n988(x)
+ end
+end
+
+def fun_l4_n632(x)
+ if (x < 1)
+ fun_l5_n388(x)
+ else
+ fun_l5_n258(x)
+ end
+end
+
+def fun_l4_n633(x)
+ if (x < 1)
+ fun_l5_n680(x)
+ else
+ fun_l5_n814(x)
+ end
+end
+
+def fun_l4_n634(x)
+ if (x < 1)
+ fun_l5_n857(x)
+ else
+ fun_l5_n595(x)
+ end
+end
+
+def fun_l4_n635(x)
+ if (x < 1)
+ fun_l5_n547(x)
+ else
+ fun_l5_n725(x)
+ end
+end
+
+def fun_l4_n636(x)
+ if (x < 1)
+ fun_l5_n644(x)
+ else
+ fun_l5_n485(x)
+ end
+end
+
+def fun_l4_n637(x)
+ if (x < 1)
+ fun_l5_n528(x)
+ else
+ fun_l5_n653(x)
+ end
+end
+
+def fun_l4_n638(x)
+ if (x < 1)
+ fun_l5_n924(x)
+ else
+ fun_l5_n956(x)
+ end
+end
+
+def fun_l4_n639(x)
+ if (x < 1)
+ fun_l5_n654(x)
+ else
+ fun_l5_n979(x)
+ end
+end
+
+def fun_l4_n640(x)
+ if (x < 1)
+ fun_l5_n287(x)
+ else
+ fun_l5_n778(x)
+ end
+end
+
+def fun_l4_n641(x)
+ if (x < 1)
+ fun_l5_n197(x)
+ else
+ fun_l5_n682(x)
+ end
+end
+
+def fun_l4_n642(x)
+ if (x < 1)
+ fun_l5_n559(x)
+ else
+ fun_l5_n812(x)
+ end
+end
+
+def fun_l4_n643(x)
+ if (x < 1)
+ fun_l5_n970(x)
+ else
+ fun_l5_n43(x)
+ end
+end
+
+def fun_l4_n644(x)
+ if (x < 1)
+ fun_l5_n222(x)
+ else
+ fun_l5_n741(x)
+ end
+end
+
+def fun_l4_n645(x)
+ if (x < 1)
+ fun_l5_n788(x)
+ else
+ fun_l5_n72(x)
+ end
+end
+
+def fun_l4_n646(x)
+ if (x < 1)
+ fun_l5_n877(x)
+ else
+ fun_l5_n371(x)
+ end
+end
+
+def fun_l4_n647(x)
+ if (x < 1)
+ fun_l5_n710(x)
+ else
+ fun_l5_n783(x)
+ end
+end
+
+def fun_l4_n648(x)
+ if (x < 1)
+ fun_l5_n957(x)
+ else
+ fun_l5_n801(x)
+ end
+end
+
+def fun_l4_n649(x)
+ if (x < 1)
+ fun_l5_n127(x)
+ else
+ fun_l5_n664(x)
+ end
+end
+
+def fun_l4_n650(x)
+ if (x < 1)
+ fun_l5_n176(x)
+ else
+ fun_l5_n511(x)
+ end
+end
+
+def fun_l4_n651(x)
+ if (x < 1)
+ fun_l5_n830(x)
+ else
+ fun_l5_n107(x)
+ end
+end
+
+def fun_l4_n652(x)
+ if (x < 1)
+ fun_l5_n207(x)
+ else
+ fun_l5_n894(x)
+ end
+end
+
+def fun_l4_n653(x)
+ if (x < 1)
+ fun_l5_n611(x)
+ else
+ fun_l5_n443(x)
+ end
+end
+
+def fun_l4_n654(x)
+ if (x < 1)
+ fun_l5_n953(x)
+ else
+ fun_l5_n214(x)
+ end
+end
+
+def fun_l4_n655(x)
+ if (x < 1)
+ fun_l5_n109(x)
+ else
+ fun_l5_n706(x)
+ end
+end
+
+def fun_l4_n656(x)
+ if (x < 1)
+ fun_l5_n312(x)
+ else
+ fun_l5_n914(x)
+ end
+end
+
+def fun_l4_n657(x)
+ if (x < 1)
+ fun_l5_n774(x)
+ else
+ fun_l5_n530(x)
+ end
+end
+
+def fun_l4_n658(x)
+ if (x < 1)
+ fun_l5_n79(x)
+ else
+ fun_l5_n303(x)
+ end
+end
+
+def fun_l4_n659(x)
+ if (x < 1)
+ fun_l5_n718(x)
+ else
+ fun_l5_n196(x)
+ end
+end
+
+def fun_l4_n660(x)
+ if (x < 1)
+ fun_l5_n196(x)
+ else
+ fun_l5_n661(x)
+ end
+end
+
+def fun_l4_n661(x)
+ if (x < 1)
+ fun_l5_n654(x)
+ else
+ fun_l5_n17(x)
+ end
+end
+
+def fun_l4_n662(x)
+ if (x < 1)
+ fun_l5_n413(x)
+ else
+ fun_l5_n214(x)
+ end
+end
+
+def fun_l4_n663(x)
+ if (x < 1)
+ fun_l5_n491(x)
+ else
+ fun_l5_n927(x)
+ end
+end
+
+def fun_l4_n664(x)
+ if (x < 1)
+ fun_l5_n671(x)
+ else
+ fun_l5_n611(x)
+ end
+end
+
+def fun_l4_n665(x)
+ if (x < 1)
+ fun_l5_n153(x)
+ else
+ fun_l5_n127(x)
+ end
+end
+
+def fun_l4_n666(x)
+ if (x < 1)
+ fun_l5_n661(x)
+ else
+ fun_l5_n590(x)
+ end
+end
+
+def fun_l4_n667(x)
+ if (x < 1)
+ fun_l5_n539(x)
+ else
+ fun_l5_n692(x)
+ end
+end
+
+def fun_l4_n668(x)
+ if (x < 1)
+ fun_l5_n390(x)
+ else
+ fun_l5_n423(x)
+ end
+end
+
+def fun_l4_n669(x)
+ if (x < 1)
+ fun_l5_n615(x)
+ else
+ fun_l5_n449(x)
+ end
+end
+
+def fun_l4_n670(x)
+ if (x < 1)
+ fun_l5_n49(x)
+ else
+ fun_l5_n632(x)
+ end
+end
+
+def fun_l4_n671(x)
+ if (x < 1)
+ fun_l5_n891(x)
+ else
+ fun_l5_n915(x)
+ end
+end
+
+def fun_l4_n672(x)
+ if (x < 1)
+ fun_l5_n257(x)
+ else
+ fun_l5_n719(x)
+ end
+end
+
+def fun_l4_n673(x)
+ if (x < 1)
+ fun_l5_n620(x)
+ else
+ fun_l5_n473(x)
+ end
+end
+
+def fun_l4_n674(x)
+ if (x < 1)
+ fun_l5_n422(x)
+ else
+ fun_l5_n776(x)
+ end
+end
+
+def fun_l4_n675(x)
+ if (x < 1)
+ fun_l5_n973(x)
+ else
+ fun_l5_n32(x)
+ end
+end
+
+def fun_l4_n676(x)
+ if (x < 1)
+ fun_l5_n434(x)
+ else
+ fun_l5_n85(x)
+ end
+end
+
+def fun_l4_n677(x)
+ if (x < 1)
+ fun_l5_n430(x)
+ else
+ fun_l5_n702(x)
+ end
+end
+
+def fun_l4_n678(x)
+ if (x < 1)
+ fun_l5_n698(x)
+ else
+ fun_l5_n482(x)
+ end
+end
+
+def fun_l4_n679(x)
+ if (x < 1)
+ fun_l5_n365(x)
+ else
+ fun_l5_n83(x)
+ end
+end
+
+def fun_l4_n680(x)
+ if (x < 1)
+ fun_l5_n397(x)
+ else
+ fun_l5_n356(x)
+ end
+end
+
+def fun_l4_n681(x)
+ if (x < 1)
+ fun_l5_n48(x)
+ else
+ fun_l5_n458(x)
+ end
+end
+
+def fun_l4_n682(x)
+ if (x < 1)
+ fun_l5_n205(x)
+ else
+ fun_l5_n693(x)
+ end
+end
+
+def fun_l4_n683(x)
+ if (x < 1)
+ fun_l5_n971(x)
+ else
+ fun_l5_n656(x)
+ end
+end
+
+def fun_l4_n684(x)
+ if (x < 1)
+ fun_l5_n147(x)
+ else
+ fun_l5_n314(x)
+ end
+end
+
+def fun_l4_n685(x)
+ if (x < 1)
+ fun_l5_n347(x)
+ else
+ fun_l5_n281(x)
+ end
+end
+
+def fun_l4_n686(x)
+ if (x < 1)
+ fun_l5_n259(x)
+ else
+ fun_l5_n395(x)
+ end
+end
+
+def fun_l4_n687(x)
+ if (x < 1)
+ fun_l5_n899(x)
+ else
+ fun_l5_n319(x)
+ end
+end
+
+def fun_l4_n688(x)
+ if (x < 1)
+ fun_l5_n293(x)
+ else
+ fun_l5_n831(x)
+ end
+end
+
+def fun_l4_n689(x)
+ if (x < 1)
+ fun_l5_n88(x)
+ else
+ fun_l5_n938(x)
+ end
+end
+
+def fun_l4_n690(x)
+ if (x < 1)
+ fun_l5_n72(x)
+ else
+ fun_l5_n172(x)
+ end
+end
+
+def fun_l4_n691(x)
+ if (x < 1)
+ fun_l5_n330(x)
+ else
+ fun_l5_n70(x)
+ end
+end
+
+def fun_l4_n692(x)
+ if (x < 1)
+ fun_l5_n901(x)
+ else
+ fun_l5_n984(x)
+ end
+end
+
+def fun_l4_n693(x)
+ if (x < 1)
+ fun_l5_n528(x)
+ else
+ fun_l5_n659(x)
+ end
+end
+
+def fun_l4_n694(x)
+ if (x < 1)
+ fun_l5_n522(x)
+ else
+ fun_l5_n219(x)
+ end
+end
+
+def fun_l4_n695(x)
+ if (x < 1)
+ fun_l5_n568(x)
+ else
+ fun_l5_n997(x)
+ end
+end
+
+def fun_l4_n696(x)
+ if (x < 1)
+ fun_l5_n248(x)
+ else
+ fun_l5_n508(x)
+ end
+end
+
+def fun_l4_n697(x)
+ if (x < 1)
+ fun_l5_n71(x)
+ else
+ fun_l5_n590(x)
+ end
+end
+
+def fun_l4_n698(x)
+ if (x < 1)
+ fun_l5_n398(x)
+ else
+ fun_l5_n125(x)
+ end
+end
+
+def fun_l4_n699(x)
+ if (x < 1)
+ fun_l5_n405(x)
+ else
+ fun_l5_n129(x)
+ end
+end
+
+def fun_l4_n700(x)
+ if (x < 1)
+ fun_l5_n818(x)
+ else
+ fun_l5_n792(x)
+ end
+end
+
+def fun_l4_n701(x)
+ if (x < 1)
+ fun_l5_n530(x)
+ else
+ fun_l5_n849(x)
+ end
+end
+
+def fun_l4_n702(x)
+ if (x < 1)
+ fun_l5_n640(x)
+ else
+ fun_l5_n558(x)
+ end
+end
+
+def fun_l4_n703(x)
+ if (x < 1)
+ fun_l5_n717(x)
+ else
+ fun_l5_n113(x)
+ end
+end
+
+def fun_l4_n704(x)
+ if (x < 1)
+ fun_l5_n139(x)
+ else
+ fun_l5_n743(x)
+ end
+end
+
+def fun_l4_n705(x)
+ if (x < 1)
+ fun_l5_n720(x)
+ else
+ fun_l5_n713(x)
+ end
+end
+
+def fun_l4_n706(x)
+ if (x < 1)
+ fun_l5_n774(x)
+ else
+ fun_l5_n90(x)
+ end
+end
+
+def fun_l4_n707(x)
+ if (x < 1)
+ fun_l5_n579(x)
+ else
+ fun_l5_n692(x)
+ end
+end
+
+def fun_l4_n708(x)
+ if (x < 1)
+ fun_l5_n448(x)
+ else
+ fun_l5_n146(x)
+ end
+end
+
+def fun_l4_n709(x)
+ if (x < 1)
+ fun_l5_n249(x)
+ else
+ fun_l5_n163(x)
+ end
+end
+
+def fun_l4_n710(x)
+ if (x < 1)
+ fun_l5_n694(x)
+ else
+ fun_l5_n532(x)
+ end
+end
+
+def fun_l4_n711(x)
+ if (x < 1)
+ fun_l5_n739(x)
+ else
+ fun_l5_n424(x)
+ end
+end
+
+def fun_l4_n712(x)
+ if (x < 1)
+ fun_l5_n700(x)
+ else
+ fun_l5_n761(x)
+ end
+end
+
+def fun_l4_n713(x)
+ if (x < 1)
+ fun_l5_n403(x)
+ else
+ fun_l5_n941(x)
+ end
+end
+
+def fun_l4_n714(x)
+ if (x < 1)
+ fun_l5_n724(x)
+ else
+ fun_l5_n863(x)
+ end
+end
+
+def fun_l4_n715(x)
+ if (x < 1)
+ fun_l5_n392(x)
+ else
+ fun_l5_n617(x)
+ end
+end
+
+def fun_l4_n716(x)
+ if (x < 1)
+ fun_l5_n76(x)
+ else
+ fun_l5_n896(x)
+ end
+end
+
+def fun_l4_n717(x)
+ if (x < 1)
+ fun_l5_n355(x)
+ else
+ fun_l5_n533(x)
+ end
+end
+
+def fun_l4_n718(x)
+ if (x < 1)
+ fun_l5_n225(x)
+ else
+ fun_l5_n273(x)
+ end
+end
+
+def fun_l4_n719(x)
+ if (x < 1)
+ fun_l5_n828(x)
+ else
+ fun_l5_n163(x)
+ end
+end
+
+def fun_l4_n720(x)
+ if (x < 1)
+ fun_l5_n309(x)
+ else
+ fun_l5_n702(x)
+ end
+end
+
+def fun_l4_n721(x)
+ if (x < 1)
+ fun_l5_n959(x)
+ else
+ fun_l5_n370(x)
+ end
+end
+
+def fun_l4_n722(x)
+ if (x < 1)
+ fun_l5_n640(x)
+ else
+ fun_l5_n96(x)
+ end
+end
+
+def fun_l4_n723(x)
+ if (x < 1)
+ fun_l5_n590(x)
+ else
+ fun_l5_n332(x)
+ end
+end
+
+def fun_l4_n724(x)
+ if (x < 1)
+ fun_l5_n14(x)
+ else
+ fun_l5_n161(x)
+ end
+end
+
+def fun_l4_n725(x)
+ if (x < 1)
+ fun_l5_n871(x)
+ else
+ fun_l5_n643(x)
+ end
+end
+
+def fun_l4_n726(x)
+ if (x < 1)
+ fun_l5_n885(x)
+ else
+ fun_l5_n142(x)
+ end
+end
+
+def fun_l4_n727(x)
+ if (x < 1)
+ fun_l5_n994(x)
+ else
+ fun_l5_n823(x)
+ end
+end
+
+def fun_l4_n728(x)
+ if (x < 1)
+ fun_l5_n825(x)
+ else
+ fun_l5_n315(x)
+ end
+end
+
+def fun_l4_n729(x)
+ if (x < 1)
+ fun_l5_n312(x)
+ else
+ fun_l5_n28(x)
+ end
+end
+
+def fun_l4_n730(x)
+ if (x < 1)
+ fun_l5_n545(x)
+ else
+ fun_l5_n87(x)
+ end
+end
+
+def fun_l4_n731(x)
+ if (x < 1)
+ fun_l5_n604(x)
+ else
+ fun_l5_n999(x)
+ end
+end
+
+def fun_l4_n732(x)
+ if (x < 1)
+ fun_l5_n21(x)
+ else
+ fun_l5_n170(x)
+ end
+end
+
+def fun_l4_n733(x)
+ if (x < 1)
+ fun_l5_n662(x)
+ else
+ fun_l5_n407(x)
+ end
+end
+
+def fun_l4_n734(x)
+ if (x < 1)
+ fun_l5_n808(x)
+ else
+ fun_l5_n653(x)
+ end
+end
+
+def fun_l4_n735(x)
+ if (x < 1)
+ fun_l5_n665(x)
+ else
+ fun_l5_n925(x)
+ end
+end
+
+def fun_l4_n736(x)
+ if (x < 1)
+ fun_l5_n186(x)
+ else
+ fun_l5_n817(x)
+ end
+end
+
+def fun_l4_n737(x)
+ if (x < 1)
+ fun_l5_n360(x)
+ else
+ fun_l5_n527(x)
+ end
+end
+
+def fun_l4_n738(x)
+ if (x < 1)
+ fun_l5_n278(x)
+ else
+ fun_l5_n759(x)
+ end
+end
+
+def fun_l4_n739(x)
+ if (x < 1)
+ fun_l5_n710(x)
+ else
+ fun_l5_n909(x)
+ end
+end
+
+def fun_l4_n740(x)
+ if (x < 1)
+ fun_l5_n770(x)
+ else
+ fun_l5_n382(x)
+ end
+end
+
+def fun_l4_n741(x)
+ if (x < 1)
+ fun_l5_n969(x)
+ else
+ fun_l5_n583(x)
+ end
+end
+
+def fun_l4_n742(x)
+ if (x < 1)
+ fun_l5_n653(x)
+ else
+ fun_l5_n258(x)
+ end
+end
+
+def fun_l4_n743(x)
+ if (x < 1)
+ fun_l5_n966(x)
+ else
+ fun_l5_n705(x)
+ end
+end
+
+def fun_l4_n744(x)
+ if (x < 1)
+ fun_l5_n454(x)
+ else
+ fun_l5_n748(x)
+ end
+end
+
+def fun_l4_n745(x)
+ if (x < 1)
+ fun_l5_n595(x)
+ else
+ fun_l5_n865(x)
+ end
+end
+
+def fun_l4_n746(x)
+ if (x < 1)
+ fun_l5_n593(x)
+ else
+ fun_l5_n615(x)
+ end
+end
+
+def fun_l4_n747(x)
+ if (x < 1)
+ fun_l5_n638(x)
+ else
+ fun_l5_n651(x)
+ end
+end
+
+def fun_l4_n748(x)
+ if (x < 1)
+ fun_l5_n331(x)
+ else
+ fun_l5_n847(x)
+ end
+end
+
+def fun_l4_n749(x)
+ if (x < 1)
+ fun_l5_n59(x)
+ else
+ fun_l5_n805(x)
+ end
+end
+
+def fun_l4_n750(x)
+ if (x < 1)
+ fun_l5_n269(x)
+ else
+ fun_l5_n904(x)
+ end
+end
+
+def fun_l4_n751(x)
+ if (x < 1)
+ fun_l5_n292(x)
+ else
+ fun_l5_n459(x)
+ end
+end
+
+def fun_l4_n752(x)
+ if (x < 1)
+ fun_l5_n581(x)
+ else
+ fun_l5_n353(x)
+ end
+end
+
+def fun_l4_n753(x)
+ if (x < 1)
+ fun_l5_n785(x)
+ else
+ fun_l5_n745(x)
+ end
+end
+
+def fun_l4_n754(x)
+ if (x < 1)
+ fun_l5_n317(x)
+ else
+ fun_l5_n604(x)
+ end
+end
+
+def fun_l4_n755(x)
+ if (x < 1)
+ fun_l5_n208(x)
+ else
+ fun_l5_n318(x)
+ end
+end
+
+def fun_l4_n756(x)
+ if (x < 1)
+ fun_l5_n986(x)
+ else
+ fun_l5_n83(x)
+ end
+end
+
+def fun_l4_n757(x)
+ if (x < 1)
+ fun_l5_n946(x)
+ else
+ fun_l5_n314(x)
+ end
+end
+
+def fun_l4_n758(x)
+ if (x < 1)
+ fun_l5_n571(x)
+ else
+ fun_l5_n919(x)
+ end
+end
+
+def fun_l4_n759(x)
+ if (x < 1)
+ fun_l5_n129(x)
+ else
+ fun_l5_n191(x)
+ end
+end
+
+def fun_l4_n760(x)
+ if (x < 1)
+ fun_l5_n838(x)
+ else
+ fun_l5_n29(x)
+ end
+end
+
+def fun_l4_n761(x)
+ if (x < 1)
+ fun_l5_n250(x)
+ else
+ fun_l5_n892(x)
+ end
+end
+
+def fun_l4_n762(x)
+ if (x < 1)
+ fun_l5_n588(x)
+ else
+ fun_l5_n59(x)
+ end
+end
+
+def fun_l4_n763(x)
+ if (x < 1)
+ fun_l5_n831(x)
+ else
+ fun_l5_n668(x)
+ end
+end
+
+def fun_l4_n764(x)
+ if (x < 1)
+ fun_l5_n337(x)
+ else
+ fun_l5_n514(x)
+ end
+end
+
+def fun_l4_n765(x)
+ if (x < 1)
+ fun_l5_n56(x)
+ else
+ fun_l5_n718(x)
+ end
+end
+
+def fun_l4_n766(x)
+ if (x < 1)
+ fun_l5_n189(x)
+ else
+ fun_l5_n103(x)
+ end
+end
+
+def fun_l4_n767(x)
+ if (x < 1)
+ fun_l5_n395(x)
+ else
+ fun_l5_n313(x)
+ end
+end
+
+def fun_l4_n768(x)
+ if (x < 1)
+ fun_l5_n388(x)
+ else
+ fun_l5_n757(x)
+ end
+end
+
+def fun_l4_n769(x)
+ if (x < 1)
+ fun_l5_n933(x)
+ else
+ fun_l5_n979(x)
+ end
+end
+
+def fun_l4_n770(x)
+ if (x < 1)
+ fun_l5_n765(x)
+ else
+ fun_l5_n472(x)
+ end
+end
+
+def fun_l4_n771(x)
+ if (x < 1)
+ fun_l5_n381(x)
+ else
+ fun_l5_n527(x)
+ end
+end
+
+def fun_l4_n772(x)
+ if (x < 1)
+ fun_l5_n314(x)
+ else
+ fun_l5_n990(x)
+ end
+end
+
+def fun_l4_n773(x)
+ if (x < 1)
+ fun_l5_n457(x)
+ else
+ fun_l5_n413(x)
+ end
+end
+
+def fun_l4_n774(x)
+ if (x < 1)
+ fun_l5_n245(x)
+ else
+ fun_l5_n85(x)
+ end
+end
+
+def fun_l4_n775(x)
+ if (x < 1)
+ fun_l5_n432(x)
+ else
+ fun_l5_n987(x)
+ end
+end
+
+def fun_l4_n776(x)
+ if (x < 1)
+ fun_l5_n588(x)
+ else
+ fun_l5_n352(x)
+ end
+end
+
+def fun_l4_n777(x)
+ if (x < 1)
+ fun_l5_n414(x)
+ else
+ fun_l5_n586(x)
+ end
+end
+
+def fun_l4_n778(x)
+ if (x < 1)
+ fun_l5_n290(x)
+ else
+ fun_l5_n776(x)
+ end
+end
+
+def fun_l4_n779(x)
+ if (x < 1)
+ fun_l5_n324(x)
+ else
+ fun_l5_n918(x)
+ end
+end
+
+def fun_l4_n780(x)
+ if (x < 1)
+ fun_l5_n928(x)
+ else
+ fun_l5_n107(x)
+ end
+end
+
+def fun_l4_n781(x)
+ if (x < 1)
+ fun_l5_n244(x)
+ else
+ fun_l5_n434(x)
+ end
+end
+
+def fun_l4_n782(x)
+ if (x < 1)
+ fun_l5_n828(x)
+ else
+ fun_l5_n141(x)
+ end
+end
+
+def fun_l4_n783(x)
+ if (x < 1)
+ fun_l5_n634(x)
+ else
+ fun_l5_n206(x)
+ end
+end
+
+def fun_l4_n784(x)
+ if (x < 1)
+ fun_l5_n387(x)
+ else
+ fun_l5_n57(x)
+ end
+end
+
+def fun_l4_n785(x)
+ if (x < 1)
+ fun_l5_n731(x)
+ else
+ fun_l5_n670(x)
+ end
+end
+
+def fun_l4_n786(x)
+ if (x < 1)
+ fun_l5_n173(x)
+ else
+ fun_l5_n657(x)
+ end
+end
+
+def fun_l4_n787(x)
+ if (x < 1)
+ fun_l5_n661(x)
+ else
+ fun_l5_n286(x)
+ end
+end
+
+def fun_l4_n788(x)
+ if (x < 1)
+ fun_l5_n364(x)
+ else
+ fun_l5_n520(x)
+ end
+end
+
+def fun_l4_n789(x)
+ if (x < 1)
+ fun_l5_n545(x)
+ else
+ fun_l5_n417(x)
+ end
+end
+
+def fun_l4_n790(x)
+ if (x < 1)
+ fun_l5_n270(x)
+ else
+ fun_l5_n550(x)
+ end
+end
+
+def fun_l4_n791(x)
+ if (x < 1)
+ fun_l5_n873(x)
+ else
+ fun_l5_n321(x)
+ end
+end
+
+def fun_l4_n792(x)
+ if (x < 1)
+ fun_l5_n243(x)
+ else
+ fun_l5_n406(x)
+ end
+end
+
+def fun_l4_n793(x)
+ if (x < 1)
+ fun_l5_n229(x)
+ else
+ fun_l5_n400(x)
+ end
+end
+
+def fun_l4_n794(x)
+ if (x < 1)
+ fun_l5_n670(x)
+ else
+ fun_l5_n535(x)
+ end
+end
+
+def fun_l4_n795(x)
+ if (x < 1)
+ fun_l5_n911(x)
+ else
+ fun_l5_n786(x)
+ end
+end
+
+def fun_l4_n796(x)
+ if (x < 1)
+ fun_l5_n247(x)
+ else
+ fun_l5_n775(x)
+ end
+end
+
+def fun_l4_n797(x)
+ if (x < 1)
+ fun_l5_n944(x)
+ else
+ fun_l5_n14(x)
+ end
+end
+
+def fun_l4_n798(x)
+ if (x < 1)
+ fun_l5_n57(x)
+ else
+ fun_l5_n644(x)
+ end
+end
+
+def fun_l4_n799(x)
+ if (x < 1)
+ fun_l5_n583(x)
+ else
+ fun_l5_n599(x)
+ end
+end
+
+def fun_l4_n800(x)
+ if (x < 1)
+ fun_l5_n685(x)
+ else
+ fun_l5_n366(x)
+ end
+end
+
+def fun_l4_n801(x)
+ if (x < 1)
+ fun_l5_n671(x)
+ else
+ fun_l5_n386(x)
+ end
+end
+
+def fun_l4_n802(x)
+ if (x < 1)
+ fun_l5_n19(x)
+ else
+ fun_l5_n403(x)
+ end
+end
+
+def fun_l4_n803(x)
+ if (x < 1)
+ fun_l5_n952(x)
+ else
+ fun_l5_n237(x)
+ end
+end
+
+def fun_l4_n804(x)
+ if (x < 1)
+ fun_l5_n929(x)
+ else
+ fun_l5_n737(x)
+ end
+end
+
+def fun_l4_n805(x)
+ if (x < 1)
+ fun_l5_n197(x)
+ else
+ fun_l5_n322(x)
+ end
+end
+
+def fun_l4_n806(x)
+ if (x < 1)
+ fun_l5_n966(x)
+ else
+ fun_l5_n531(x)
+ end
+end
+
+def fun_l4_n807(x)
+ if (x < 1)
+ fun_l5_n928(x)
+ else
+ fun_l5_n802(x)
+ end
+end
+
+def fun_l4_n808(x)
+ if (x < 1)
+ fun_l5_n34(x)
+ else
+ fun_l5_n107(x)
+ end
+end
+
+def fun_l4_n809(x)
+ if (x < 1)
+ fun_l5_n615(x)
+ else
+ fun_l5_n628(x)
+ end
+end
+
+def fun_l4_n810(x)
+ if (x < 1)
+ fun_l5_n187(x)
+ else
+ fun_l5_n424(x)
+ end
+end
+
+def fun_l4_n811(x)
+ if (x < 1)
+ fun_l5_n189(x)
+ else
+ fun_l5_n639(x)
+ end
+end
+
+def fun_l4_n812(x)
+ if (x < 1)
+ fun_l5_n177(x)
+ else
+ fun_l5_n580(x)
+ end
+end
+
+def fun_l4_n813(x)
+ if (x < 1)
+ fun_l5_n699(x)
+ else
+ fun_l5_n595(x)
+ end
+end
+
+def fun_l4_n814(x)
+ if (x < 1)
+ fun_l5_n44(x)
+ else
+ fun_l5_n966(x)
+ end
+end
+
+def fun_l4_n815(x)
+ if (x < 1)
+ fun_l5_n883(x)
+ else
+ fun_l5_n580(x)
+ end
+end
+
+def fun_l4_n816(x)
+ if (x < 1)
+ fun_l5_n306(x)
+ else
+ fun_l5_n564(x)
+ end
+end
+
+def fun_l4_n817(x)
+ if (x < 1)
+ fun_l5_n337(x)
+ else
+ fun_l5_n912(x)
+ end
+end
+
+def fun_l4_n818(x)
+ if (x < 1)
+ fun_l5_n36(x)
+ else
+ fun_l5_n164(x)
+ end
+end
+
+def fun_l4_n819(x)
+ if (x < 1)
+ fun_l5_n987(x)
+ else
+ fun_l5_n38(x)
+ end
+end
+
+def fun_l4_n820(x)
+ if (x < 1)
+ fun_l5_n656(x)
+ else
+ fun_l5_n647(x)
+ end
+end
+
+def fun_l4_n821(x)
+ if (x < 1)
+ fun_l5_n364(x)
+ else
+ fun_l5_n838(x)
+ end
+end
+
+def fun_l4_n822(x)
+ if (x < 1)
+ fun_l5_n301(x)
+ else
+ fun_l5_n850(x)
+ end
+end
+
+def fun_l4_n823(x)
+ if (x < 1)
+ fun_l5_n191(x)
+ else
+ fun_l5_n812(x)
+ end
+end
+
+def fun_l4_n824(x)
+ if (x < 1)
+ fun_l5_n148(x)
+ else
+ fun_l5_n332(x)
+ end
+end
+
+def fun_l4_n825(x)
+ if (x < 1)
+ fun_l5_n315(x)
+ else
+ fun_l5_n763(x)
+ end
+end
+
+def fun_l4_n826(x)
+ if (x < 1)
+ fun_l5_n612(x)
+ else
+ fun_l5_n993(x)
+ end
+end
+
+def fun_l4_n827(x)
+ if (x < 1)
+ fun_l5_n229(x)
+ else
+ fun_l5_n388(x)
+ end
+end
+
+def fun_l4_n828(x)
+ if (x < 1)
+ fun_l5_n131(x)
+ else
+ fun_l5_n283(x)
+ end
+end
+
+def fun_l4_n829(x)
+ if (x < 1)
+ fun_l5_n59(x)
+ else
+ fun_l5_n280(x)
+ end
+end
+
+def fun_l4_n830(x)
+ if (x < 1)
+ fun_l5_n993(x)
+ else
+ fun_l5_n160(x)
+ end
+end
+
+def fun_l4_n831(x)
+ if (x < 1)
+ fun_l5_n394(x)
+ else
+ fun_l5_n528(x)
+ end
+end
+
+def fun_l4_n832(x)
+ if (x < 1)
+ fun_l5_n376(x)
+ else
+ fun_l5_n201(x)
+ end
+end
+
+def fun_l4_n833(x)
+ if (x < 1)
+ fun_l5_n890(x)
+ else
+ fun_l5_n867(x)
+ end
+end
+
+def fun_l4_n834(x)
+ if (x < 1)
+ fun_l5_n320(x)
+ else
+ fun_l5_n237(x)
+ end
+end
+
+def fun_l4_n835(x)
+ if (x < 1)
+ fun_l5_n771(x)
+ else
+ fun_l5_n83(x)
+ end
+end
+
+def fun_l4_n836(x)
+ if (x < 1)
+ fun_l5_n751(x)
+ else
+ fun_l5_n2(x)
+ end
+end
+
+def fun_l4_n837(x)
+ if (x < 1)
+ fun_l5_n825(x)
+ else
+ fun_l5_n930(x)
+ end
+end
+
+def fun_l4_n838(x)
+ if (x < 1)
+ fun_l5_n968(x)
+ else
+ fun_l5_n136(x)
+ end
+end
+
+def fun_l4_n839(x)
+ if (x < 1)
+ fun_l5_n529(x)
+ else
+ fun_l5_n626(x)
+ end
+end
+
+def fun_l4_n840(x)
+ if (x < 1)
+ fun_l5_n228(x)
+ else
+ fun_l5_n915(x)
+ end
+end
+
+def fun_l4_n841(x)
+ if (x < 1)
+ fun_l5_n270(x)
+ else
+ fun_l5_n813(x)
+ end
+end
+
+def fun_l4_n842(x)
+ if (x < 1)
+ fun_l5_n392(x)
+ else
+ fun_l5_n60(x)
+ end
+end
+
+def fun_l4_n843(x)
+ if (x < 1)
+ fun_l5_n470(x)
+ else
+ fun_l5_n699(x)
+ end
+end
+
+def fun_l4_n844(x)
+ if (x < 1)
+ fun_l5_n68(x)
+ else
+ fun_l5_n163(x)
+ end
+end
+
+def fun_l4_n845(x)
+ if (x < 1)
+ fun_l5_n469(x)
+ else
+ fun_l5_n472(x)
+ end
+end
+
+def fun_l4_n846(x)
+ if (x < 1)
+ fun_l5_n640(x)
+ else
+ fun_l5_n311(x)
+ end
+end
+
+def fun_l4_n847(x)
+ if (x < 1)
+ fun_l5_n968(x)
+ else
+ fun_l5_n414(x)
+ end
+end
+
+def fun_l4_n848(x)
+ if (x < 1)
+ fun_l5_n111(x)
+ else
+ fun_l5_n340(x)
+ end
+end
+
+def fun_l4_n849(x)
+ if (x < 1)
+ fun_l5_n906(x)
+ else
+ fun_l5_n278(x)
+ end
+end
+
+def fun_l4_n850(x)
+ if (x < 1)
+ fun_l5_n353(x)
+ else
+ fun_l5_n590(x)
+ end
+end
+
+def fun_l4_n851(x)
+ if (x < 1)
+ fun_l5_n218(x)
+ else
+ fun_l5_n341(x)
+ end
+end
+
+def fun_l4_n852(x)
+ if (x < 1)
+ fun_l5_n527(x)
+ else
+ fun_l5_n273(x)
+ end
+end
+
+def fun_l4_n853(x)
+ if (x < 1)
+ fun_l5_n589(x)
+ else
+ fun_l5_n417(x)
+ end
+end
+
+def fun_l4_n854(x)
+ if (x < 1)
+ fun_l5_n411(x)
+ else
+ fun_l5_n848(x)
+ end
+end
+
+def fun_l4_n855(x)
+ if (x < 1)
+ fun_l5_n607(x)
+ else
+ fun_l5_n65(x)
+ end
+end
+
+def fun_l4_n856(x)
+ if (x < 1)
+ fun_l5_n240(x)
+ else
+ fun_l5_n24(x)
+ end
+end
+
+def fun_l4_n857(x)
+ if (x < 1)
+ fun_l5_n165(x)
+ else
+ fun_l5_n362(x)
+ end
+end
+
+def fun_l4_n858(x)
+ if (x < 1)
+ fun_l5_n559(x)
+ else
+ fun_l5_n253(x)
+ end
+end
+
+def fun_l4_n859(x)
+ if (x < 1)
+ fun_l5_n834(x)
+ else
+ fun_l5_n217(x)
+ end
+end
+
+def fun_l4_n860(x)
+ if (x < 1)
+ fun_l5_n891(x)
+ else
+ fun_l5_n369(x)
+ end
+end
+
+def fun_l4_n861(x)
+ if (x < 1)
+ fun_l5_n676(x)
+ else
+ fun_l5_n614(x)
+ end
+end
+
+def fun_l4_n862(x)
+ if (x < 1)
+ fun_l5_n527(x)
+ else
+ fun_l5_n318(x)
+ end
+end
+
+def fun_l4_n863(x)
+ if (x < 1)
+ fun_l5_n991(x)
+ else
+ fun_l5_n997(x)
+ end
+end
+
+def fun_l4_n864(x)
+ if (x < 1)
+ fun_l5_n842(x)
+ else
+ fun_l5_n370(x)
+ end
+end
+
+def fun_l4_n865(x)
+ if (x < 1)
+ fun_l5_n623(x)
+ else
+ fun_l5_n741(x)
+ end
+end
+
+def fun_l4_n866(x)
+ if (x < 1)
+ fun_l5_n58(x)
+ else
+ fun_l5_n953(x)
+ end
+end
+
+def fun_l4_n867(x)
+ if (x < 1)
+ fun_l5_n269(x)
+ else
+ fun_l5_n341(x)
+ end
+end
+
+def fun_l4_n868(x)
+ if (x < 1)
+ fun_l5_n814(x)
+ else
+ fun_l5_n849(x)
+ end
+end
+
+def fun_l4_n869(x)
+ if (x < 1)
+ fun_l5_n163(x)
+ else
+ fun_l5_n246(x)
+ end
+end
+
+def fun_l4_n870(x)
+ if (x < 1)
+ fun_l5_n739(x)
+ else
+ fun_l5_n524(x)
+ end
+end
+
+def fun_l4_n871(x)
+ if (x < 1)
+ fun_l5_n589(x)
+ else
+ fun_l5_n592(x)
+ end
+end
+
+def fun_l4_n872(x)
+ if (x < 1)
+ fun_l5_n922(x)
+ else
+ fun_l5_n401(x)
+ end
+end
+
+def fun_l4_n873(x)
+ if (x < 1)
+ fun_l5_n600(x)
+ else
+ fun_l5_n184(x)
+ end
+end
+
+def fun_l4_n874(x)
+ if (x < 1)
+ fun_l5_n424(x)
+ else
+ fun_l5_n627(x)
+ end
+end
+
+def fun_l4_n875(x)
+ if (x < 1)
+ fun_l5_n48(x)
+ else
+ fun_l5_n127(x)
+ end
+end
+
+def fun_l4_n876(x)
+ if (x < 1)
+ fun_l5_n687(x)
+ else
+ fun_l5_n451(x)
+ end
+end
+
+def fun_l4_n877(x)
+ if (x < 1)
+ fun_l5_n849(x)
+ else
+ fun_l5_n480(x)
+ end
+end
+
+def fun_l4_n878(x)
+ if (x < 1)
+ fun_l5_n801(x)
+ else
+ fun_l5_n60(x)
+ end
+end
+
+def fun_l4_n879(x)
+ if (x < 1)
+ fun_l5_n964(x)
+ else
+ fun_l5_n790(x)
+ end
+end
+
+def fun_l4_n880(x)
+ if (x < 1)
+ fun_l5_n483(x)
+ else
+ fun_l5_n817(x)
+ end
+end
+
+def fun_l4_n881(x)
+ if (x < 1)
+ fun_l5_n91(x)
+ else
+ fun_l5_n776(x)
+ end
+end
+
+def fun_l4_n882(x)
+ if (x < 1)
+ fun_l5_n8(x)
+ else
+ fun_l5_n726(x)
+ end
+end
+
+def fun_l4_n883(x)
+ if (x < 1)
+ fun_l5_n63(x)
+ else
+ fun_l5_n570(x)
+ end
+end
+
+def fun_l4_n884(x)
+ if (x < 1)
+ fun_l5_n691(x)
+ else
+ fun_l5_n117(x)
+ end
+end
+
+def fun_l4_n885(x)
+ if (x < 1)
+ fun_l5_n262(x)
+ else
+ fun_l5_n38(x)
+ end
+end
+
+def fun_l4_n886(x)
+ if (x < 1)
+ fun_l5_n678(x)
+ else
+ fun_l5_n108(x)
+ end
+end
+
+def fun_l4_n887(x)
+ if (x < 1)
+ fun_l5_n775(x)
+ else
+ fun_l5_n751(x)
+ end
+end
+
+def fun_l4_n888(x)
+ if (x < 1)
+ fun_l5_n917(x)
+ else
+ fun_l5_n769(x)
+ end
+end
+
+def fun_l4_n889(x)
+ if (x < 1)
+ fun_l5_n191(x)
+ else
+ fun_l5_n662(x)
+ end
+end
+
+def fun_l4_n890(x)
+ if (x < 1)
+ fun_l5_n34(x)
+ else
+ fun_l5_n806(x)
+ end
+end
+
+def fun_l4_n891(x)
+ if (x < 1)
+ fun_l5_n705(x)
+ else
+ fun_l5_n198(x)
+ end
+end
+
+def fun_l4_n892(x)
+ if (x < 1)
+ fun_l5_n647(x)
+ else
+ fun_l5_n0(x)
+ end
+end
+
+def fun_l4_n893(x)
+ if (x < 1)
+ fun_l5_n336(x)
+ else
+ fun_l5_n795(x)
+ end
+end
+
+def fun_l4_n894(x)
+ if (x < 1)
+ fun_l5_n984(x)
+ else
+ fun_l5_n751(x)
+ end
+end
+
+def fun_l4_n895(x)
+ if (x < 1)
+ fun_l5_n373(x)
+ else
+ fun_l5_n12(x)
+ end
+end
+
+def fun_l4_n896(x)
+ if (x < 1)
+ fun_l5_n672(x)
+ else
+ fun_l5_n17(x)
+ end
+end
+
+def fun_l4_n897(x)
+ if (x < 1)
+ fun_l5_n67(x)
+ else
+ fun_l5_n183(x)
+ end
+end
+
+def fun_l4_n898(x)
+ if (x < 1)
+ fun_l5_n557(x)
+ else
+ fun_l5_n43(x)
+ end
+end
+
+def fun_l4_n899(x)
+ if (x < 1)
+ fun_l5_n210(x)
+ else
+ fun_l5_n904(x)
+ end
+end
+
+def fun_l4_n900(x)
+ if (x < 1)
+ fun_l5_n665(x)
+ else
+ fun_l5_n173(x)
+ end
+end
+
+def fun_l4_n901(x)
+ if (x < 1)
+ fun_l5_n268(x)
+ else
+ fun_l5_n907(x)
+ end
+end
+
+def fun_l4_n902(x)
+ if (x < 1)
+ fun_l5_n19(x)
+ else
+ fun_l5_n145(x)
+ end
+end
+
+def fun_l4_n903(x)
+ if (x < 1)
+ fun_l5_n158(x)
+ else
+ fun_l5_n261(x)
+ end
+end
+
+def fun_l4_n904(x)
+ if (x < 1)
+ fun_l5_n677(x)
+ else
+ fun_l5_n880(x)
+ end
+end
+
+def fun_l4_n905(x)
+ if (x < 1)
+ fun_l5_n262(x)
+ else
+ fun_l5_n790(x)
+ end
+end
+
+def fun_l4_n906(x)
+ if (x < 1)
+ fun_l5_n775(x)
+ else
+ fun_l5_n785(x)
+ end
+end
+
+def fun_l4_n907(x)
+ if (x < 1)
+ fun_l5_n629(x)
+ else
+ fun_l5_n312(x)
+ end
+end
+
+def fun_l4_n908(x)
+ if (x < 1)
+ fun_l5_n84(x)
+ else
+ fun_l5_n605(x)
+ end
+end
+
+def fun_l4_n909(x)
+ if (x < 1)
+ fun_l5_n346(x)
+ else
+ fun_l5_n245(x)
+ end
+end
+
+def fun_l4_n910(x)
+ if (x < 1)
+ fun_l5_n768(x)
+ else
+ fun_l5_n47(x)
+ end
+end
+
+def fun_l4_n911(x)
+ if (x < 1)
+ fun_l5_n48(x)
+ else
+ fun_l5_n406(x)
+ end
+end
+
+def fun_l4_n912(x)
+ if (x < 1)
+ fun_l5_n493(x)
+ else
+ fun_l5_n608(x)
+ end
+end
+
+def fun_l4_n913(x)
+ if (x < 1)
+ fun_l5_n456(x)
+ else
+ fun_l5_n176(x)
+ end
+end
+
+def fun_l4_n914(x)
+ if (x < 1)
+ fun_l5_n201(x)
+ else
+ fun_l5_n233(x)
+ end
+end
+
+def fun_l4_n915(x)
+ if (x < 1)
+ fun_l5_n910(x)
+ else
+ fun_l5_n790(x)
+ end
+end
+
+def fun_l4_n916(x)
+ if (x < 1)
+ fun_l5_n734(x)
+ else
+ fun_l5_n685(x)
+ end
+end
+
+def fun_l4_n917(x)
+ if (x < 1)
+ fun_l5_n132(x)
+ else
+ fun_l5_n112(x)
+ end
+end
+
+def fun_l4_n918(x)
+ if (x < 1)
+ fun_l5_n897(x)
+ else
+ fun_l5_n196(x)
+ end
+end
+
+def fun_l4_n919(x)
+ if (x < 1)
+ fun_l5_n395(x)
+ else
+ fun_l5_n186(x)
+ end
+end
+
+def fun_l4_n920(x)
+ if (x < 1)
+ fun_l5_n19(x)
+ else
+ fun_l5_n810(x)
+ end
+end
+
+def fun_l4_n921(x)
+ if (x < 1)
+ fun_l5_n546(x)
+ else
+ fun_l5_n34(x)
+ end
+end
+
+def fun_l4_n922(x)
+ if (x < 1)
+ fun_l5_n863(x)
+ else
+ fun_l5_n928(x)
+ end
+end
+
+def fun_l4_n923(x)
+ if (x < 1)
+ fun_l5_n485(x)
+ else
+ fun_l5_n182(x)
+ end
+end
+
+def fun_l4_n924(x)
+ if (x < 1)
+ fun_l5_n303(x)
+ else
+ fun_l5_n17(x)
+ end
+end
+
+def fun_l4_n925(x)
+ if (x < 1)
+ fun_l5_n78(x)
+ else
+ fun_l5_n816(x)
+ end
+end
+
+def fun_l4_n926(x)
+ if (x < 1)
+ fun_l5_n797(x)
+ else
+ fun_l5_n761(x)
+ end
+end
+
+def fun_l4_n927(x)
+ if (x < 1)
+ fun_l5_n975(x)
+ else
+ fun_l5_n220(x)
+ end
+end
+
+def fun_l4_n928(x)
+ if (x < 1)
+ fun_l5_n213(x)
+ else
+ fun_l5_n815(x)
+ end
+end
+
+def fun_l4_n929(x)
+ if (x < 1)
+ fun_l5_n280(x)
+ else
+ fun_l5_n551(x)
+ end
+end
+
+def fun_l4_n930(x)
+ if (x < 1)
+ fun_l5_n631(x)
+ else
+ fun_l5_n629(x)
+ end
+end
+
+def fun_l4_n931(x)
+ if (x < 1)
+ fun_l5_n60(x)
+ else
+ fun_l5_n332(x)
+ end
+end
+
+def fun_l4_n932(x)
+ if (x < 1)
+ fun_l5_n336(x)
+ else
+ fun_l5_n733(x)
+ end
+end
+
+def fun_l4_n933(x)
+ if (x < 1)
+ fun_l5_n94(x)
+ else
+ fun_l5_n48(x)
+ end
+end
+
+def fun_l4_n934(x)
+ if (x < 1)
+ fun_l5_n527(x)
+ else
+ fun_l5_n108(x)
+ end
+end
+
+def fun_l4_n935(x)
+ if (x < 1)
+ fun_l5_n994(x)
+ else
+ fun_l5_n95(x)
+ end
+end
+
+def fun_l4_n936(x)
+ if (x < 1)
+ fun_l5_n631(x)
+ else
+ fun_l5_n310(x)
+ end
+end
+
+def fun_l4_n937(x)
+ if (x < 1)
+ fun_l5_n851(x)
+ else
+ fun_l5_n380(x)
+ end
+end
+
+def fun_l4_n938(x)
+ if (x < 1)
+ fun_l5_n256(x)
+ else
+ fun_l5_n231(x)
+ end
+end
+
+def fun_l4_n939(x)
+ if (x < 1)
+ fun_l5_n686(x)
+ else
+ fun_l5_n557(x)
+ end
+end
+
+def fun_l4_n940(x)
+ if (x < 1)
+ fun_l5_n311(x)
+ else
+ fun_l5_n611(x)
+ end
+end
+
+def fun_l4_n941(x)
+ if (x < 1)
+ fun_l5_n770(x)
+ else
+ fun_l5_n306(x)
+ end
+end
+
+def fun_l4_n942(x)
+ if (x < 1)
+ fun_l5_n649(x)
+ else
+ fun_l5_n60(x)
+ end
+end
+
+def fun_l4_n943(x)
+ if (x < 1)
+ fun_l5_n935(x)
+ else
+ fun_l5_n991(x)
+ end
+end
+
+def fun_l4_n944(x)
+ if (x < 1)
+ fun_l5_n851(x)
+ else
+ fun_l5_n131(x)
+ end
+end
+
+def fun_l4_n945(x)
+ if (x < 1)
+ fun_l5_n422(x)
+ else
+ fun_l5_n309(x)
+ end
+end
+
+def fun_l4_n946(x)
+ if (x < 1)
+ fun_l5_n906(x)
+ else
+ fun_l5_n798(x)
+ end
+end
+
+def fun_l4_n947(x)
+ if (x < 1)
+ fun_l5_n817(x)
+ else
+ fun_l5_n122(x)
+ end
+end
+
+def fun_l4_n948(x)
+ if (x < 1)
+ fun_l5_n233(x)
+ else
+ fun_l5_n600(x)
+ end
+end
+
+def fun_l4_n949(x)
+ if (x < 1)
+ fun_l5_n908(x)
+ else
+ fun_l5_n332(x)
+ end
+end
+
+def fun_l4_n950(x)
+ if (x < 1)
+ fun_l5_n71(x)
+ else
+ fun_l5_n893(x)
+ end
+end
+
+def fun_l4_n951(x)
+ if (x < 1)
+ fun_l5_n281(x)
+ else
+ fun_l5_n281(x)
+ end
+end
+
+def fun_l4_n952(x)
+ if (x < 1)
+ fun_l5_n312(x)
+ else
+ fun_l5_n164(x)
+ end
+end
+
+def fun_l4_n953(x)
+ if (x < 1)
+ fun_l5_n292(x)
+ else
+ fun_l5_n993(x)
+ end
+end
+
+def fun_l4_n954(x)
+ if (x < 1)
+ fun_l5_n271(x)
+ else
+ fun_l5_n635(x)
+ end
+end
+
+def fun_l4_n955(x)
+ if (x < 1)
+ fun_l5_n10(x)
+ else
+ fun_l5_n202(x)
+ end
+end
+
+def fun_l4_n956(x)
+ if (x < 1)
+ fun_l5_n574(x)
+ else
+ fun_l5_n29(x)
+ end
+end
+
+def fun_l4_n957(x)
+ if (x < 1)
+ fun_l5_n154(x)
+ else
+ fun_l5_n96(x)
+ end
+end
+
+def fun_l4_n958(x)
+ if (x < 1)
+ fun_l5_n287(x)
+ else
+ fun_l5_n509(x)
+ end
+end
+
+def fun_l4_n959(x)
+ if (x < 1)
+ fun_l5_n400(x)
+ else
+ fun_l5_n195(x)
+ end
+end
+
+def fun_l4_n960(x)
+ if (x < 1)
+ fun_l5_n94(x)
+ else
+ fun_l5_n165(x)
+ end
+end
+
+def fun_l4_n961(x)
+ if (x < 1)
+ fun_l5_n276(x)
+ else
+ fun_l5_n935(x)
+ end
+end
+
+def fun_l4_n962(x)
+ if (x < 1)
+ fun_l5_n504(x)
+ else
+ fun_l5_n480(x)
+ end
+end
+
+def fun_l4_n963(x)
+ if (x < 1)
+ fun_l5_n152(x)
+ else
+ fun_l5_n397(x)
+ end
+end
+
+def fun_l4_n964(x)
+ if (x < 1)
+ fun_l5_n303(x)
+ else
+ fun_l5_n481(x)
+ end
+end
+
+def fun_l4_n965(x)
+ if (x < 1)
+ fun_l5_n882(x)
+ else
+ fun_l5_n116(x)
+ end
+end
+
+def fun_l4_n966(x)
+ if (x < 1)
+ fun_l5_n329(x)
+ else
+ fun_l5_n484(x)
+ end
+end
+
+def fun_l4_n967(x)
+ if (x < 1)
+ fun_l5_n369(x)
+ else
+ fun_l5_n680(x)
+ end
+end
+
+def fun_l4_n968(x)
+ if (x < 1)
+ fun_l5_n30(x)
+ else
+ fun_l5_n653(x)
+ end
+end
+
+def fun_l4_n969(x)
+ if (x < 1)
+ fun_l5_n292(x)
+ else
+ fun_l5_n793(x)
+ end
+end
+
+def fun_l4_n970(x)
+ if (x < 1)
+ fun_l5_n796(x)
+ else
+ fun_l5_n387(x)
+ end
+end
+
+def fun_l4_n971(x)
+ if (x < 1)
+ fun_l5_n735(x)
+ else
+ fun_l5_n985(x)
+ end
+end
+
+def fun_l4_n972(x)
+ if (x < 1)
+ fun_l5_n925(x)
+ else
+ fun_l5_n689(x)
+ end
+end
+
+def fun_l4_n973(x)
+ if (x < 1)
+ fun_l5_n154(x)
+ else
+ fun_l5_n998(x)
+ end
+end
+
+def fun_l4_n974(x)
+ if (x < 1)
+ fun_l5_n708(x)
+ else
+ fun_l5_n253(x)
+ end
+end
+
+def fun_l4_n975(x)
+ if (x < 1)
+ fun_l5_n716(x)
+ else
+ fun_l5_n958(x)
+ end
+end
+
+def fun_l4_n976(x)
+ if (x < 1)
+ fun_l5_n488(x)
+ else
+ fun_l5_n299(x)
+ end
+end
+
+def fun_l4_n977(x)
+ if (x < 1)
+ fun_l5_n872(x)
+ else
+ fun_l5_n276(x)
+ end
+end
+
+def fun_l4_n978(x)
+ if (x < 1)
+ fun_l5_n219(x)
+ else
+ fun_l5_n76(x)
+ end
+end
+
+def fun_l4_n979(x)
+ if (x < 1)
+ fun_l5_n937(x)
+ else
+ fun_l5_n988(x)
+ end
+end
+
+def fun_l4_n980(x)
+ if (x < 1)
+ fun_l5_n681(x)
+ else
+ fun_l5_n264(x)
+ end
+end
+
+def fun_l4_n981(x)
+ if (x < 1)
+ fun_l5_n630(x)
+ else
+ fun_l5_n18(x)
+ end
+end
+
+def fun_l4_n982(x)
+ if (x < 1)
+ fun_l5_n910(x)
+ else
+ fun_l5_n97(x)
+ end
+end
+
+def fun_l4_n983(x)
+ if (x < 1)
+ fun_l5_n551(x)
+ else
+ fun_l5_n429(x)
+ end
+end
+
+def fun_l4_n984(x)
+ if (x < 1)
+ fun_l5_n304(x)
+ else
+ fun_l5_n192(x)
+ end
+end
+
+def fun_l4_n985(x)
+ if (x < 1)
+ fun_l5_n696(x)
+ else
+ fun_l5_n124(x)
+ end
+end
+
+def fun_l4_n986(x)
+ if (x < 1)
+ fun_l5_n603(x)
+ else
+ fun_l5_n967(x)
+ end
+end
+
+def fun_l4_n987(x)
+ if (x < 1)
+ fun_l5_n317(x)
+ else
+ fun_l5_n785(x)
+ end
+end
+
+def fun_l4_n988(x)
+ if (x < 1)
+ fun_l5_n762(x)
+ else
+ fun_l5_n999(x)
+ end
+end
+
+def fun_l4_n989(x)
+ if (x < 1)
+ fun_l5_n61(x)
+ else
+ fun_l5_n474(x)
+ end
+end
+
+def fun_l4_n990(x)
+ if (x < 1)
+ fun_l5_n465(x)
+ else
+ fun_l5_n878(x)
+ end
+end
+
+def fun_l4_n991(x)
+ if (x < 1)
+ fun_l5_n907(x)
+ else
+ fun_l5_n259(x)
+ end
+end
+
+def fun_l4_n992(x)
+ if (x < 1)
+ fun_l5_n594(x)
+ else
+ fun_l5_n378(x)
+ end
+end
+
+def fun_l4_n993(x)
+ if (x < 1)
+ fun_l5_n202(x)
+ else
+ fun_l5_n490(x)
+ end
+end
+
+def fun_l4_n994(x)
+ if (x < 1)
+ fun_l5_n105(x)
+ else
+ fun_l5_n675(x)
+ end
+end
+
+def fun_l4_n995(x)
+ if (x < 1)
+ fun_l5_n99(x)
+ else
+ fun_l5_n21(x)
+ end
+end
+
+def fun_l4_n996(x)
+ if (x < 1)
+ fun_l5_n831(x)
+ else
+ fun_l5_n692(x)
+ end
+end
+
+def fun_l4_n997(x)
+ if (x < 1)
+ fun_l5_n186(x)
+ else
+ fun_l5_n427(x)
+ end
+end
+
+def fun_l4_n998(x)
+ if (x < 1)
+ fun_l5_n597(x)
+ else
+ fun_l5_n978(x)
+ end
+end
+
+def fun_l4_n999(x)
+ if (x < 1)
+ fun_l5_n537(x)
+ else
+ fun_l5_n952(x)
+ end
+end
+
+def fun_l5_n0(x)
+ if (x < 1)
+ fun_l6_n104(x)
+ else
+ fun_l6_n249(x)
+ end
+end
+
+def fun_l5_n1(x)
+ if (x < 1)
+ fun_l6_n260(x)
+ else
+ fun_l6_n782(x)
+ end
+end
+
+def fun_l5_n2(x)
+ if (x < 1)
+ fun_l6_n974(x)
+ else
+ fun_l6_n301(x)
+ end
+end
+
+def fun_l5_n3(x)
+ if (x < 1)
+ fun_l6_n883(x)
+ else
+ fun_l6_n149(x)
+ end
+end
+
+def fun_l5_n4(x)
+ if (x < 1)
+ fun_l6_n134(x)
+ else
+ fun_l6_n111(x)
+ end
+end
+
+def fun_l5_n5(x)
+ if (x < 1)
+ fun_l6_n573(x)
+ else
+ fun_l6_n273(x)
+ end
+end
+
+def fun_l5_n6(x)
+ if (x < 1)
+ fun_l6_n221(x)
+ else
+ fun_l6_n843(x)
+ end
+end
+
+def fun_l5_n7(x)
+ if (x < 1)
+ fun_l6_n572(x)
+ else
+ fun_l6_n435(x)
+ end
+end
+
+def fun_l5_n8(x)
+ if (x < 1)
+ fun_l6_n43(x)
+ else
+ fun_l6_n598(x)
+ end
+end
+
+def fun_l5_n9(x)
+ if (x < 1)
+ fun_l6_n352(x)
+ else
+ fun_l6_n894(x)
+ end
+end
+
+def fun_l5_n10(x)
+ if (x < 1)
+ fun_l6_n161(x)
+ else
+ fun_l6_n654(x)
+ end
+end
+
+def fun_l5_n11(x)
+ if (x < 1)
+ fun_l6_n432(x)
+ else
+ fun_l6_n825(x)
+ end
+end
+
+def fun_l5_n12(x)
+ if (x < 1)
+ fun_l6_n863(x)
+ else
+ fun_l6_n940(x)
+ end
+end
+
+def fun_l5_n13(x)
+ if (x < 1)
+ fun_l6_n478(x)
+ else
+ fun_l6_n193(x)
+ end
+end
+
+def fun_l5_n14(x)
+ if (x < 1)
+ fun_l6_n327(x)
+ else
+ fun_l6_n808(x)
+ end
+end
+
+def fun_l5_n15(x)
+ if (x < 1)
+ fun_l6_n86(x)
+ else
+ fun_l6_n951(x)
+ end
+end
+
+def fun_l5_n16(x)
+ if (x < 1)
+ fun_l6_n492(x)
+ else
+ fun_l6_n704(x)
+ end
+end
+
+def fun_l5_n17(x)
+ if (x < 1)
+ fun_l6_n196(x)
+ else
+ fun_l6_n970(x)
+ end
+end
+
+def fun_l5_n18(x)
+ if (x < 1)
+ fun_l6_n325(x)
+ else
+ fun_l6_n30(x)
+ end
+end
+
+def fun_l5_n19(x)
+ if (x < 1)
+ fun_l6_n559(x)
+ else
+ fun_l6_n269(x)
+ end
+end
+
+def fun_l5_n20(x)
+ if (x < 1)
+ fun_l6_n716(x)
+ else
+ fun_l6_n783(x)
+ end
+end
+
+def fun_l5_n21(x)
+ if (x < 1)
+ fun_l6_n978(x)
+ else
+ fun_l6_n306(x)
+ end
+end
+
+def fun_l5_n22(x)
+ if (x < 1)
+ fun_l6_n220(x)
+ else
+ fun_l6_n823(x)
+ end
+end
+
+def fun_l5_n23(x)
+ if (x < 1)
+ fun_l6_n675(x)
+ else
+ fun_l6_n684(x)
+ end
+end
+
+def fun_l5_n24(x)
+ if (x < 1)
+ fun_l6_n851(x)
+ else
+ fun_l6_n450(x)
+ end
+end
+
+def fun_l5_n25(x)
+ if (x < 1)
+ fun_l6_n745(x)
+ else
+ fun_l6_n370(x)
+ end
+end
+
+def fun_l5_n26(x)
+ if (x < 1)
+ fun_l6_n431(x)
+ else
+ fun_l6_n130(x)
+ end
+end
+
+def fun_l5_n27(x)
+ if (x < 1)
+ fun_l6_n105(x)
+ else
+ fun_l6_n205(x)
+ end
+end
+
+def fun_l5_n28(x)
+ if (x < 1)
+ fun_l6_n718(x)
+ else
+ fun_l6_n742(x)
+ end
+end
+
+def fun_l5_n29(x)
+ if (x < 1)
+ fun_l6_n977(x)
+ else
+ fun_l6_n63(x)
+ end
+end
+
+def fun_l5_n30(x)
+ if (x < 1)
+ fun_l6_n902(x)
+ else
+ fun_l6_n471(x)
+ end
+end
+
+def fun_l5_n31(x)
+ if (x < 1)
+ fun_l6_n76(x)
+ else
+ fun_l6_n960(x)
+ end
+end
+
+def fun_l5_n32(x)
+ if (x < 1)
+ fun_l6_n75(x)
+ else
+ fun_l6_n640(x)
+ end
+end
+
+def fun_l5_n33(x)
+ if (x < 1)
+ fun_l6_n631(x)
+ else
+ fun_l6_n769(x)
+ end
+end
+
+def fun_l5_n34(x)
+ if (x < 1)
+ fun_l6_n201(x)
+ else
+ fun_l6_n771(x)
+ end
+end
+
+def fun_l5_n35(x)
+ if (x < 1)
+ fun_l6_n734(x)
+ else
+ fun_l6_n370(x)
+ end
+end
+
+def fun_l5_n36(x)
+ if (x < 1)
+ fun_l6_n490(x)
+ else
+ fun_l6_n994(x)
+ end
+end
+
+def fun_l5_n37(x)
+ if (x < 1)
+ fun_l6_n566(x)
+ else
+ fun_l6_n392(x)
+ end
+end
+
+def fun_l5_n38(x)
+ if (x < 1)
+ fun_l6_n120(x)
+ else
+ fun_l6_n774(x)
+ end
+end
+
+def fun_l5_n39(x)
+ if (x < 1)
+ fun_l6_n402(x)
+ else
+ fun_l6_n572(x)
+ end
+end
+
+def fun_l5_n40(x)
+ if (x < 1)
+ fun_l6_n911(x)
+ else
+ fun_l6_n968(x)
+ end
+end
+
+def fun_l5_n41(x)
+ if (x < 1)
+ fun_l6_n200(x)
+ else
+ fun_l6_n656(x)
+ end
+end
+
+def fun_l5_n42(x)
+ if (x < 1)
+ fun_l6_n59(x)
+ else
+ fun_l6_n426(x)
+ end
+end
+
+def fun_l5_n43(x)
+ if (x < 1)
+ fun_l6_n650(x)
+ else
+ fun_l6_n932(x)
+ end
+end
+
+def fun_l5_n44(x)
+ if (x < 1)
+ fun_l6_n365(x)
+ else
+ fun_l6_n755(x)
+ end
+end
+
+def fun_l5_n45(x)
+ if (x < 1)
+ fun_l6_n738(x)
+ else
+ fun_l6_n432(x)
+ end
+end
+
+def fun_l5_n46(x)
+ if (x < 1)
+ fun_l6_n82(x)
+ else
+ fun_l6_n484(x)
+ end
+end
+
+def fun_l5_n47(x)
+ if (x < 1)
+ fun_l6_n64(x)
+ else
+ fun_l6_n610(x)
+ end
+end
+
+def fun_l5_n48(x)
+ if (x < 1)
+ fun_l6_n875(x)
+ else
+ fun_l6_n464(x)
+ end
+end
+
+def fun_l5_n49(x)
+ if (x < 1)
+ fun_l6_n798(x)
+ else
+ fun_l6_n57(x)
+ end
+end
+
+def fun_l5_n50(x)
+ if (x < 1)
+ fun_l6_n76(x)
+ else
+ fun_l6_n462(x)
+ end
+end
+
+def fun_l5_n51(x)
+ if (x < 1)
+ fun_l6_n225(x)
+ else
+ fun_l6_n526(x)
+ end
+end
+
+def fun_l5_n52(x)
+ if (x < 1)
+ fun_l6_n388(x)
+ else
+ fun_l6_n167(x)
+ end
+end
+
+def fun_l5_n53(x)
+ if (x < 1)
+ fun_l6_n270(x)
+ else
+ fun_l6_n821(x)
+ end
+end
+
+def fun_l5_n54(x)
+ if (x < 1)
+ fun_l6_n790(x)
+ else
+ fun_l6_n95(x)
+ end
+end
+
+def fun_l5_n55(x)
+ if (x < 1)
+ fun_l6_n38(x)
+ else
+ fun_l6_n32(x)
+ end
+end
+
+def fun_l5_n56(x)
+ if (x < 1)
+ fun_l6_n400(x)
+ else
+ fun_l6_n513(x)
+ end
+end
+
+def fun_l5_n57(x)
+ if (x < 1)
+ fun_l6_n251(x)
+ else
+ fun_l6_n16(x)
+ end
+end
+
+def fun_l5_n58(x)
+ if (x < 1)
+ fun_l6_n303(x)
+ else
+ fun_l6_n858(x)
+ end
+end
+
+def fun_l5_n59(x)
+ if (x < 1)
+ fun_l6_n173(x)
+ else
+ fun_l6_n38(x)
+ end
+end
+
+def fun_l5_n60(x)
+ if (x < 1)
+ fun_l6_n466(x)
+ else
+ fun_l6_n64(x)
+ end
+end
+
+def fun_l5_n61(x)
+ if (x < 1)
+ fun_l6_n687(x)
+ else
+ fun_l6_n208(x)
+ end
+end
+
+def fun_l5_n62(x)
+ if (x < 1)
+ fun_l6_n891(x)
+ else
+ fun_l6_n789(x)
+ end
+end
+
+def fun_l5_n63(x)
+ if (x < 1)
+ fun_l6_n664(x)
+ else
+ fun_l6_n133(x)
+ end
+end
+
+def fun_l5_n64(x)
+ if (x < 1)
+ fun_l6_n121(x)
+ else
+ fun_l6_n989(x)
+ end
+end
+
+def fun_l5_n65(x)
+ if (x < 1)
+ fun_l6_n411(x)
+ else
+ fun_l6_n264(x)
+ end
+end
+
+def fun_l5_n66(x)
+ if (x < 1)
+ fun_l6_n528(x)
+ else
+ fun_l6_n662(x)
+ end
+end
+
+def fun_l5_n67(x)
+ if (x < 1)
+ fun_l6_n824(x)
+ else
+ fun_l6_n410(x)
+ end
+end
+
+def fun_l5_n68(x)
+ if (x < 1)
+ fun_l6_n29(x)
+ else
+ fun_l6_n946(x)
+ end
+end
+
+def fun_l5_n69(x)
+ if (x < 1)
+ fun_l6_n566(x)
+ else
+ fun_l6_n797(x)
+ end
+end
+
+def fun_l5_n70(x)
+ if (x < 1)
+ fun_l6_n816(x)
+ else
+ fun_l6_n112(x)
+ end
+end
+
+def fun_l5_n71(x)
+ if (x < 1)
+ fun_l6_n920(x)
+ else
+ fun_l6_n44(x)
+ end
+end
+
+def fun_l5_n72(x)
+ if (x < 1)
+ fun_l6_n725(x)
+ else
+ fun_l6_n113(x)
+ end
+end
+
+def fun_l5_n73(x)
+ if (x < 1)
+ fun_l6_n406(x)
+ else
+ fun_l6_n555(x)
+ end
+end
+
+def fun_l5_n74(x)
+ if (x < 1)
+ fun_l6_n527(x)
+ else
+ fun_l6_n991(x)
+ end
+end
+
+def fun_l5_n75(x)
+ if (x < 1)
+ fun_l6_n46(x)
+ else
+ fun_l6_n440(x)
+ end
+end
+
+def fun_l5_n76(x)
+ if (x < 1)
+ fun_l6_n242(x)
+ else
+ fun_l6_n488(x)
+ end
+end
+
+def fun_l5_n77(x)
+ if (x < 1)
+ fun_l6_n211(x)
+ else
+ fun_l6_n760(x)
+ end
+end
+
+def fun_l5_n78(x)
+ if (x < 1)
+ fun_l6_n821(x)
+ else
+ fun_l6_n653(x)
+ end
+end
+
+def fun_l5_n79(x)
+ if (x < 1)
+ fun_l6_n559(x)
+ else
+ fun_l6_n425(x)
+ end
+end
+
+def fun_l5_n80(x)
+ if (x < 1)
+ fun_l6_n792(x)
+ else
+ fun_l6_n813(x)
+ end
+end
+
+def fun_l5_n81(x)
+ if (x < 1)
+ fun_l6_n463(x)
+ else
+ fun_l6_n454(x)
+ end
+end
+
+def fun_l5_n82(x)
+ if (x < 1)
+ fun_l6_n731(x)
+ else
+ fun_l6_n718(x)
+ end
+end
+
+def fun_l5_n83(x)
+ if (x < 1)
+ fun_l6_n377(x)
+ else
+ fun_l6_n137(x)
+ end
+end
+
+def fun_l5_n84(x)
+ if (x < 1)
+ fun_l6_n829(x)
+ else
+ fun_l6_n77(x)
+ end
+end
+
+def fun_l5_n85(x)
+ if (x < 1)
+ fun_l6_n714(x)
+ else
+ fun_l6_n682(x)
+ end
+end
+
+def fun_l5_n86(x)
+ if (x < 1)
+ fun_l6_n47(x)
+ else
+ fun_l6_n527(x)
+ end
+end
+
+def fun_l5_n87(x)
+ if (x < 1)
+ fun_l6_n976(x)
+ else
+ fun_l6_n18(x)
+ end
+end
+
+def fun_l5_n88(x)
+ if (x < 1)
+ fun_l6_n710(x)
+ else
+ fun_l6_n998(x)
+ end
+end
+
+def fun_l5_n89(x)
+ if (x < 1)
+ fun_l6_n222(x)
+ else
+ fun_l6_n97(x)
+ end
+end
+
+def fun_l5_n90(x)
+ if (x < 1)
+ fun_l6_n862(x)
+ else
+ fun_l6_n627(x)
+ end
+end
+
+def fun_l5_n91(x)
+ if (x < 1)
+ fun_l6_n642(x)
+ else
+ fun_l6_n720(x)
+ end
+end
+
+def fun_l5_n92(x)
+ if (x < 1)
+ fun_l6_n444(x)
+ else
+ fun_l6_n506(x)
+ end
+end
+
+def fun_l5_n93(x)
+ if (x < 1)
+ fun_l6_n776(x)
+ else
+ fun_l6_n879(x)
+ end
+end
+
+def fun_l5_n94(x)
+ if (x < 1)
+ fun_l6_n629(x)
+ else
+ fun_l6_n322(x)
+ end
+end
+
+def fun_l5_n95(x)
+ if (x < 1)
+ fun_l6_n119(x)
+ else
+ fun_l6_n134(x)
+ end
+end
+
+def fun_l5_n96(x)
+ if (x < 1)
+ fun_l6_n385(x)
+ else
+ fun_l6_n343(x)
+ end
+end
+
+def fun_l5_n97(x)
+ if (x < 1)
+ fun_l6_n110(x)
+ else
+ fun_l6_n323(x)
+ end
+end
+
+def fun_l5_n98(x)
+ if (x < 1)
+ fun_l6_n547(x)
+ else
+ fun_l6_n762(x)
+ end
+end
+
+def fun_l5_n99(x)
+ if (x < 1)
+ fun_l6_n811(x)
+ else
+ fun_l6_n404(x)
+ end
+end
+
+def fun_l5_n100(x)
+ if (x < 1)
+ fun_l6_n893(x)
+ else
+ fun_l6_n120(x)
+ end
+end
+
+def fun_l5_n101(x)
+ if (x < 1)
+ fun_l6_n755(x)
+ else
+ fun_l6_n611(x)
+ end
+end
+
+def fun_l5_n102(x)
+ if (x < 1)
+ fun_l6_n65(x)
+ else
+ fun_l6_n897(x)
+ end
+end
+
+def fun_l5_n103(x)
+ if (x < 1)
+ fun_l6_n629(x)
+ else
+ fun_l6_n214(x)
+ end
+end
+
+def fun_l5_n104(x)
+ if (x < 1)
+ fun_l6_n211(x)
+ else
+ fun_l6_n179(x)
+ end
+end
+
+def fun_l5_n105(x)
+ if (x < 1)
+ fun_l6_n650(x)
+ else
+ fun_l6_n348(x)
+ end
+end
+
+def fun_l5_n106(x)
+ if (x < 1)
+ fun_l6_n966(x)
+ else
+ fun_l6_n654(x)
+ end
+end
+
+def fun_l5_n107(x)
+ if (x < 1)
+ fun_l6_n596(x)
+ else
+ fun_l6_n668(x)
+ end
+end
+
+def fun_l5_n108(x)
+ if (x < 1)
+ fun_l6_n392(x)
+ else
+ fun_l6_n629(x)
+ end
+end
+
+def fun_l5_n109(x)
+ if (x < 1)
+ fun_l6_n96(x)
+ else
+ fun_l6_n578(x)
+ end
+end
+
+def fun_l5_n110(x)
+ if (x < 1)
+ fun_l6_n88(x)
+ else
+ fun_l6_n214(x)
+ end
+end
+
+def fun_l5_n111(x)
+ if (x < 1)
+ fun_l6_n622(x)
+ else
+ fun_l6_n180(x)
+ end
+end
+
+def fun_l5_n112(x)
+ if (x < 1)
+ fun_l6_n100(x)
+ else
+ fun_l6_n373(x)
+ end
+end
+
+def fun_l5_n113(x)
+ if (x < 1)
+ fun_l6_n464(x)
+ else
+ fun_l6_n30(x)
+ end
+end
+
+def fun_l5_n114(x)
+ if (x < 1)
+ fun_l6_n703(x)
+ else
+ fun_l6_n116(x)
+ end
+end
+
+def fun_l5_n115(x)
+ if (x < 1)
+ fun_l6_n63(x)
+ else
+ fun_l6_n260(x)
+ end
+end
+
+def fun_l5_n116(x)
+ if (x < 1)
+ fun_l6_n935(x)
+ else
+ fun_l6_n951(x)
+ end
+end
+
+def fun_l5_n117(x)
+ if (x < 1)
+ fun_l6_n415(x)
+ else
+ fun_l6_n734(x)
+ end
+end
+
+def fun_l5_n118(x)
+ if (x < 1)
+ fun_l6_n873(x)
+ else
+ fun_l6_n163(x)
+ end
+end
+
+def fun_l5_n119(x)
+ if (x < 1)
+ fun_l6_n134(x)
+ else
+ fun_l6_n586(x)
+ end
+end
+
+def fun_l5_n120(x)
+ if (x < 1)
+ fun_l6_n793(x)
+ else
+ fun_l6_n197(x)
+ end
+end
+
+def fun_l5_n121(x)
+ if (x < 1)
+ fun_l6_n585(x)
+ else
+ fun_l6_n793(x)
+ end
+end
+
+def fun_l5_n122(x)
+ if (x < 1)
+ fun_l6_n10(x)
+ else
+ fun_l6_n12(x)
+ end
+end
+
+def fun_l5_n123(x)
+ if (x < 1)
+ fun_l6_n786(x)
+ else
+ fun_l6_n386(x)
+ end
+end
+
+def fun_l5_n124(x)
+ if (x < 1)
+ fun_l6_n891(x)
+ else
+ fun_l6_n903(x)
+ end
+end
+
+def fun_l5_n125(x)
+ if (x < 1)
+ fun_l6_n389(x)
+ else
+ fun_l6_n154(x)
+ end
+end
+
+def fun_l5_n126(x)
+ if (x < 1)
+ fun_l6_n214(x)
+ else
+ fun_l6_n754(x)
+ end
+end
+
+def fun_l5_n127(x)
+ if (x < 1)
+ fun_l6_n646(x)
+ else
+ fun_l6_n661(x)
+ end
+end
+
+def fun_l5_n128(x)
+ if (x < 1)
+ fun_l6_n662(x)
+ else
+ fun_l6_n527(x)
+ end
+end
+
+def fun_l5_n129(x)
+ if (x < 1)
+ fun_l6_n329(x)
+ else
+ fun_l6_n310(x)
+ end
+end
+
+def fun_l5_n130(x)
+ if (x < 1)
+ fun_l6_n352(x)
+ else
+ fun_l6_n820(x)
+ end
+end
+
+def fun_l5_n131(x)
+ if (x < 1)
+ fun_l6_n551(x)
+ else
+ fun_l6_n454(x)
+ end
+end
+
+def fun_l5_n132(x)
+ if (x < 1)
+ fun_l6_n586(x)
+ else
+ fun_l6_n340(x)
+ end
+end
+
+def fun_l5_n133(x)
+ if (x < 1)
+ fun_l6_n111(x)
+ else
+ fun_l6_n188(x)
+ end
+end
+
+def fun_l5_n134(x)
+ if (x < 1)
+ fun_l6_n261(x)
+ else
+ fun_l6_n464(x)
+ end
+end
+
+def fun_l5_n135(x)
+ if (x < 1)
+ fun_l6_n540(x)
+ else
+ fun_l6_n854(x)
+ end
+end
+
+def fun_l5_n136(x)
+ if (x < 1)
+ fun_l6_n120(x)
+ else
+ fun_l6_n230(x)
+ end
+end
+
+def fun_l5_n137(x)
+ if (x < 1)
+ fun_l6_n837(x)
+ else
+ fun_l6_n606(x)
+ end
+end
+
+def fun_l5_n138(x)
+ if (x < 1)
+ fun_l6_n663(x)
+ else
+ fun_l6_n195(x)
+ end
+end
+
+def fun_l5_n139(x)
+ if (x < 1)
+ fun_l6_n572(x)
+ else
+ fun_l6_n768(x)
+ end
+end
+
+def fun_l5_n140(x)
+ if (x < 1)
+ fun_l6_n747(x)
+ else
+ fun_l6_n304(x)
+ end
+end
+
+def fun_l5_n141(x)
+ if (x < 1)
+ fun_l6_n927(x)
+ else
+ fun_l6_n122(x)
+ end
+end
+
+def fun_l5_n142(x)
+ if (x < 1)
+ fun_l6_n311(x)
+ else
+ fun_l6_n920(x)
+ end
+end
+
+def fun_l5_n143(x)
+ if (x < 1)
+ fun_l6_n887(x)
+ else
+ fun_l6_n598(x)
+ end
+end
+
+def fun_l5_n144(x)
+ if (x < 1)
+ fun_l6_n289(x)
+ else
+ fun_l6_n894(x)
+ end
+end
+
+def fun_l5_n145(x)
+ if (x < 1)
+ fun_l6_n333(x)
+ else
+ fun_l6_n385(x)
+ end
+end
+
+def fun_l5_n146(x)
+ if (x < 1)
+ fun_l6_n926(x)
+ else
+ fun_l6_n310(x)
+ end
+end
+
+def fun_l5_n147(x)
+ if (x < 1)
+ fun_l6_n754(x)
+ else
+ fun_l6_n354(x)
+ end
+end
+
+def fun_l5_n148(x)
+ if (x < 1)
+ fun_l6_n800(x)
+ else
+ fun_l6_n634(x)
+ end
+end
+
+def fun_l5_n149(x)
+ if (x < 1)
+ fun_l6_n5(x)
+ else
+ fun_l6_n67(x)
+ end
+end
+
+def fun_l5_n150(x)
+ if (x < 1)
+ fun_l6_n766(x)
+ else
+ fun_l6_n237(x)
+ end
+end
+
+def fun_l5_n151(x)
+ if (x < 1)
+ fun_l6_n277(x)
+ else
+ fun_l6_n692(x)
+ end
+end
+
+def fun_l5_n152(x)
+ if (x < 1)
+ fun_l6_n328(x)
+ else
+ fun_l6_n216(x)
+ end
+end
+
+def fun_l5_n153(x)
+ if (x < 1)
+ fun_l6_n328(x)
+ else
+ fun_l6_n165(x)
+ end
+end
+
+def fun_l5_n154(x)
+ if (x < 1)
+ fun_l6_n884(x)
+ else
+ fun_l6_n811(x)
+ end
+end
+
+def fun_l5_n155(x)
+ if (x < 1)
+ fun_l6_n376(x)
+ else
+ fun_l6_n188(x)
+ end
+end
+
+def fun_l5_n156(x)
+ if (x < 1)
+ fun_l6_n276(x)
+ else
+ fun_l6_n19(x)
+ end
+end
+
+def fun_l5_n157(x)
+ if (x < 1)
+ fun_l6_n443(x)
+ else
+ fun_l6_n815(x)
+ end
+end
+
+def fun_l5_n158(x)
+ if (x < 1)
+ fun_l6_n610(x)
+ else
+ fun_l6_n341(x)
+ end
+end
+
+def fun_l5_n159(x)
+ if (x < 1)
+ fun_l6_n147(x)
+ else
+ fun_l6_n289(x)
+ end
+end
+
+def fun_l5_n160(x)
+ if (x < 1)
+ fun_l6_n258(x)
+ else
+ fun_l6_n683(x)
+ end
+end
+
+def fun_l5_n161(x)
+ if (x < 1)
+ fun_l6_n544(x)
+ else
+ fun_l6_n621(x)
+ end
+end
+
+def fun_l5_n162(x)
+ if (x < 1)
+ fun_l6_n119(x)
+ else
+ fun_l6_n336(x)
+ end
+end
+
+def fun_l5_n163(x)
+ if (x < 1)
+ fun_l6_n297(x)
+ else
+ fun_l6_n915(x)
+ end
+end
+
+def fun_l5_n164(x)
+ if (x < 1)
+ fun_l6_n782(x)
+ else
+ fun_l6_n499(x)
+ end
+end
+
+def fun_l5_n165(x)
+ if (x < 1)
+ fun_l6_n660(x)
+ else
+ fun_l6_n227(x)
+ end
+end
+
+def fun_l5_n166(x)
+ if (x < 1)
+ fun_l6_n820(x)
+ else
+ fun_l6_n822(x)
+ end
+end
+
+def fun_l5_n167(x)
+ if (x < 1)
+ fun_l6_n878(x)
+ else
+ fun_l6_n642(x)
+ end
+end
+
+def fun_l5_n168(x)
+ if (x < 1)
+ fun_l6_n123(x)
+ else
+ fun_l6_n451(x)
+ end
+end
+
+def fun_l5_n169(x)
+ if (x < 1)
+ fun_l6_n741(x)
+ else
+ fun_l6_n35(x)
+ end
+end
+
+def fun_l5_n170(x)
+ if (x < 1)
+ fun_l6_n522(x)
+ else
+ fun_l6_n546(x)
+ end
+end
+
+def fun_l5_n171(x)
+ if (x < 1)
+ fun_l6_n555(x)
+ else
+ fun_l6_n667(x)
+ end
+end
+
+def fun_l5_n172(x)
+ if (x < 1)
+ fun_l6_n760(x)
+ else
+ fun_l6_n292(x)
+ end
+end
+
+def fun_l5_n173(x)
+ if (x < 1)
+ fun_l6_n375(x)
+ else
+ fun_l6_n907(x)
+ end
+end
+
+def fun_l5_n174(x)
+ if (x < 1)
+ fun_l6_n382(x)
+ else
+ fun_l6_n693(x)
+ end
+end
+
+def fun_l5_n175(x)
+ if (x < 1)
+ fun_l6_n728(x)
+ else
+ fun_l6_n378(x)
+ end
+end
+
+def fun_l5_n176(x)
+ if (x < 1)
+ fun_l6_n79(x)
+ else
+ fun_l6_n402(x)
+ end
+end
+
+def fun_l5_n177(x)
+ if (x < 1)
+ fun_l6_n444(x)
+ else
+ fun_l6_n500(x)
+ end
+end
+
+def fun_l5_n178(x)
+ if (x < 1)
+ fun_l6_n535(x)
+ else
+ fun_l6_n754(x)
+ end
+end
+
+def fun_l5_n179(x)
+ if (x < 1)
+ fun_l6_n831(x)
+ else
+ fun_l6_n206(x)
+ end
+end
+
+def fun_l5_n180(x)
+ if (x < 1)
+ fun_l6_n878(x)
+ else
+ fun_l6_n715(x)
+ end
+end
+
+def fun_l5_n181(x)
+ if (x < 1)
+ fun_l6_n433(x)
+ else
+ fun_l6_n955(x)
+ end
+end
+
+def fun_l5_n182(x)
+ if (x < 1)
+ fun_l6_n611(x)
+ else
+ fun_l6_n258(x)
+ end
+end
+
+def fun_l5_n183(x)
+ if (x < 1)
+ fun_l6_n618(x)
+ else
+ fun_l6_n29(x)
+ end
+end
+
+def fun_l5_n184(x)
+ if (x < 1)
+ fun_l6_n838(x)
+ else
+ fun_l6_n918(x)
+ end
+end
+
+def fun_l5_n185(x)
+ if (x < 1)
+ fun_l6_n307(x)
+ else
+ fun_l6_n811(x)
+ end
+end
+
+def fun_l5_n186(x)
+ if (x < 1)
+ fun_l6_n564(x)
+ else
+ fun_l6_n73(x)
+ end
+end
+
+def fun_l5_n187(x)
+ if (x < 1)
+ fun_l6_n871(x)
+ else
+ fun_l6_n669(x)
+ end
+end
+
+def fun_l5_n188(x)
+ if (x < 1)
+ fun_l6_n546(x)
+ else
+ fun_l6_n41(x)
+ end
+end
+
+def fun_l5_n189(x)
+ if (x < 1)
+ fun_l6_n312(x)
+ else
+ fun_l6_n998(x)
+ end
+end
+
+def fun_l5_n190(x)
+ if (x < 1)
+ fun_l6_n519(x)
+ else
+ fun_l6_n275(x)
+ end
+end
+
+def fun_l5_n191(x)
+ if (x < 1)
+ fun_l6_n525(x)
+ else
+ fun_l6_n228(x)
+ end
+end
+
+def fun_l5_n192(x)
+ if (x < 1)
+ fun_l6_n115(x)
+ else
+ fun_l6_n790(x)
+ end
+end
+
+def fun_l5_n193(x)
+ if (x < 1)
+ fun_l6_n976(x)
+ else
+ fun_l6_n219(x)
+ end
+end
+
+def fun_l5_n194(x)
+ if (x < 1)
+ fun_l6_n785(x)
+ else
+ fun_l6_n834(x)
+ end
+end
+
+def fun_l5_n195(x)
+ if (x < 1)
+ fun_l6_n238(x)
+ else
+ fun_l6_n471(x)
+ end
+end
+
+def fun_l5_n196(x)
+ if (x < 1)
+ fun_l6_n275(x)
+ else
+ fun_l6_n218(x)
+ end
+end
+
+def fun_l5_n197(x)
+ if (x < 1)
+ fun_l6_n590(x)
+ else
+ fun_l6_n458(x)
+ end
+end
+
+def fun_l5_n198(x)
+ if (x < 1)
+ fun_l6_n498(x)
+ else
+ fun_l6_n906(x)
+ end
+end
+
+def fun_l5_n199(x)
+ if (x < 1)
+ fun_l6_n547(x)
+ else
+ fun_l6_n885(x)
+ end
+end
+
+def fun_l5_n200(x)
+ if (x < 1)
+ fun_l6_n631(x)
+ else
+ fun_l6_n0(x)
+ end
+end
+
+def fun_l5_n201(x)
+ if (x < 1)
+ fun_l6_n31(x)
+ else
+ fun_l6_n729(x)
+ end
+end
+
+def fun_l5_n202(x)
+ if (x < 1)
+ fun_l6_n303(x)
+ else
+ fun_l6_n847(x)
+ end
+end
+
+def fun_l5_n203(x)
+ if (x < 1)
+ fun_l6_n912(x)
+ else
+ fun_l6_n346(x)
+ end
+end
+
+def fun_l5_n204(x)
+ if (x < 1)
+ fun_l6_n153(x)
+ else
+ fun_l6_n831(x)
+ end
+end
+
+def fun_l5_n205(x)
+ if (x < 1)
+ fun_l6_n424(x)
+ else
+ fun_l6_n836(x)
+ end
+end
+
+def fun_l5_n206(x)
+ if (x < 1)
+ fun_l6_n214(x)
+ else
+ fun_l6_n207(x)
+ end
+end
+
+def fun_l5_n207(x)
+ if (x < 1)
+ fun_l6_n362(x)
+ else
+ fun_l6_n241(x)
+ end
+end
+
+def fun_l5_n208(x)
+ if (x < 1)
+ fun_l6_n796(x)
+ else
+ fun_l6_n763(x)
+ end
+end
+
+def fun_l5_n209(x)
+ if (x < 1)
+ fun_l6_n523(x)
+ else
+ fun_l6_n998(x)
+ end
+end
+
+def fun_l5_n210(x)
+ if (x < 1)
+ fun_l6_n326(x)
+ else
+ fun_l6_n755(x)
+ end
+end
+
+def fun_l5_n211(x)
+ if (x < 1)
+ fun_l6_n345(x)
+ else
+ fun_l6_n747(x)
+ end
+end
+
+def fun_l5_n212(x)
+ if (x < 1)
+ fun_l6_n631(x)
+ else
+ fun_l6_n576(x)
+ end
+end
+
+def fun_l5_n213(x)
+ if (x < 1)
+ fun_l6_n713(x)
+ else
+ fun_l6_n678(x)
+ end
+end
+
+def fun_l5_n214(x)
+ if (x < 1)
+ fun_l6_n470(x)
+ else
+ fun_l6_n877(x)
+ end
+end
+
+def fun_l5_n215(x)
+ if (x < 1)
+ fun_l6_n78(x)
+ else
+ fun_l6_n315(x)
+ end
+end
+
+def fun_l5_n216(x)
+ if (x < 1)
+ fun_l6_n281(x)
+ else
+ fun_l6_n872(x)
+ end
+end
+
+def fun_l5_n217(x)
+ if (x < 1)
+ fun_l6_n200(x)
+ else
+ fun_l6_n323(x)
+ end
+end
+
+def fun_l5_n218(x)
+ if (x < 1)
+ fun_l6_n483(x)
+ else
+ fun_l6_n938(x)
+ end
+end
+
+def fun_l5_n219(x)
+ if (x < 1)
+ fun_l6_n102(x)
+ else
+ fun_l6_n690(x)
+ end
+end
+
+def fun_l5_n220(x)
+ if (x < 1)
+ fun_l6_n740(x)
+ else
+ fun_l6_n684(x)
+ end
+end
+
+def fun_l5_n221(x)
+ if (x < 1)
+ fun_l6_n366(x)
+ else
+ fun_l6_n138(x)
+ end
+end
+
+def fun_l5_n222(x)
+ if (x < 1)
+ fun_l6_n306(x)
+ else
+ fun_l6_n874(x)
+ end
+end
+
+def fun_l5_n223(x)
+ if (x < 1)
+ fun_l6_n828(x)
+ else
+ fun_l6_n839(x)
+ end
+end
+
+def fun_l5_n224(x)
+ if (x < 1)
+ fun_l6_n739(x)
+ else
+ fun_l6_n569(x)
+ end
+end
+
+def fun_l5_n225(x)
+ if (x < 1)
+ fun_l6_n332(x)
+ else
+ fun_l6_n49(x)
+ end
+end
+
+def fun_l5_n226(x)
+ if (x < 1)
+ fun_l6_n783(x)
+ else
+ fun_l6_n20(x)
+ end
+end
+
+def fun_l5_n227(x)
+ if (x < 1)
+ fun_l6_n774(x)
+ else
+ fun_l6_n346(x)
+ end
+end
+
+def fun_l5_n228(x)
+ if (x < 1)
+ fun_l6_n637(x)
+ else
+ fun_l6_n302(x)
+ end
+end
+
+def fun_l5_n229(x)
+ if (x < 1)
+ fun_l6_n10(x)
+ else
+ fun_l6_n697(x)
+ end
+end
+
+def fun_l5_n230(x)
+ if (x < 1)
+ fun_l6_n804(x)
+ else
+ fun_l6_n141(x)
+ end
+end
+
+def fun_l5_n231(x)
+ if (x < 1)
+ fun_l6_n232(x)
+ else
+ fun_l6_n88(x)
+ end
+end
+
+def fun_l5_n232(x)
+ if (x < 1)
+ fun_l6_n248(x)
+ else
+ fun_l6_n862(x)
+ end
+end
+
+def fun_l5_n233(x)
+ if (x < 1)
+ fun_l6_n287(x)
+ else
+ fun_l6_n315(x)
+ end
+end
+
+def fun_l5_n234(x)
+ if (x < 1)
+ fun_l6_n543(x)
+ else
+ fun_l6_n182(x)
+ end
+end
+
+def fun_l5_n235(x)
+ if (x < 1)
+ fun_l6_n162(x)
+ else
+ fun_l6_n710(x)
+ end
+end
+
+def fun_l5_n236(x)
+ if (x < 1)
+ fun_l6_n879(x)
+ else
+ fun_l6_n262(x)
+ end
+end
+
+def fun_l5_n237(x)
+ if (x < 1)
+ fun_l6_n706(x)
+ else
+ fun_l6_n112(x)
+ end
+end
+
+def fun_l5_n238(x)
+ if (x < 1)
+ fun_l6_n578(x)
+ else
+ fun_l6_n792(x)
+ end
+end
+
+def fun_l5_n239(x)
+ if (x < 1)
+ fun_l6_n685(x)
+ else
+ fun_l6_n441(x)
+ end
+end
+
+def fun_l5_n240(x)
+ if (x < 1)
+ fun_l6_n706(x)
+ else
+ fun_l6_n737(x)
+ end
+end
+
+def fun_l5_n241(x)
+ if (x < 1)
+ fun_l6_n360(x)
+ else
+ fun_l6_n751(x)
+ end
+end
+
+def fun_l5_n242(x)
+ if (x < 1)
+ fun_l6_n823(x)
+ else
+ fun_l6_n888(x)
+ end
+end
+
+def fun_l5_n243(x)
+ if (x < 1)
+ fun_l6_n743(x)
+ else
+ fun_l6_n705(x)
+ end
+end
+
+def fun_l5_n244(x)
+ if (x < 1)
+ fun_l6_n340(x)
+ else
+ fun_l6_n541(x)
+ end
+end
+
+def fun_l5_n245(x)
+ if (x < 1)
+ fun_l6_n324(x)
+ else
+ fun_l6_n121(x)
+ end
+end
+
+def fun_l5_n246(x)
+ if (x < 1)
+ fun_l6_n241(x)
+ else
+ fun_l6_n584(x)
+ end
+end
+
+def fun_l5_n247(x)
+ if (x < 1)
+ fun_l6_n468(x)
+ else
+ fun_l6_n673(x)
+ end
+end
+
+def fun_l5_n248(x)
+ if (x < 1)
+ fun_l6_n595(x)
+ else
+ fun_l6_n537(x)
+ end
+end
+
+def fun_l5_n249(x)
+ if (x < 1)
+ fun_l6_n166(x)
+ else
+ fun_l6_n766(x)
+ end
+end
+
+def fun_l5_n250(x)
+ if (x < 1)
+ fun_l6_n322(x)
+ else
+ fun_l6_n904(x)
+ end
+end
+
+def fun_l5_n251(x)
+ if (x < 1)
+ fun_l6_n273(x)
+ else
+ fun_l6_n353(x)
+ end
+end
+
+def fun_l5_n252(x)
+ if (x < 1)
+ fun_l6_n990(x)
+ else
+ fun_l6_n360(x)
+ end
+end
+
+def fun_l5_n253(x)
+ if (x < 1)
+ fun_l6_n552(x)
+ else
+ fun_l6_n649(x)
+ end
+end
+
+def fun_l5_n254(x)
+ if (x < 1)
+ fun_l6_n917(x)
+ else
+ fun_l6_n803(x)
+ end
+end
+
+def fun_l5_n255(x)
+ if (x < 1)
+ fun_l6_n763(x)
+ else
+ fun_l6_n464(x)
+ end
+end
+
+def fun_l5_n256(x)
+ if (x < 1)
+ fun_l6_n577(x)
+ else
+ fun_l6_n70(x)
+ end
+end
+
+def fun_l5_n257(x)
+ if (x < 1)
+ fun_l6_n618(x)
+ else
+ fun_l6_n943(x)
+ end
+end
+
+def fun_l5_n258(x)
+ if (x < 1)
+ fun_l6_n683(x)
+ else
+ fun_l6_n761(x)
+ end
+end
+
+def fun_l5_n259(x)
+ if (x < 1)
+ fun_l6_n284(x)
+ else
+ fun_l6_n223(x)
+ end
+end
+
+def fun_l5_n260(x)
+ if (x < 1)
+ fun_l6_n189(x)
+ else
+ fun_l6_n455(x)
+ end
+end
+
+def fun_l5_n261(x)
+ if (x < 1)
+ fun_l6_n632(x)
+ else
+ fun_l6_n245(x)
+ end
+end
+
+def fun_l5_n262(x)
+ if (x < 1)
+ fun_l6_n940(x)
+ else
+ fun_l6_n38(x)
+ end
+end
+
+def fun_l5_n263(x)
+ if (x < 1)
+ fun_l6_n289(x)
+ else
+ fun_l6_n356(x)
+ end
+end
+
+def fun_l5_n264(x)
+ if (x < 1)
+ fun_l6_n268(x)
+ else
+ fun_l6_n412(x)
+ end
+end
+
+def fun_l5_n265(x)
+ if (x < 1)
+ fun_l6_n370(x)
+ else
+ fun_l6_n858(x)
+ end
+end
+
+def fun_l5_n266(x)
+ if (x < 1)
+ fun_l6_n523(x)
+ else
+ fun_l6_n809(x)
+ end
+end
+
+def fun_l5_n267(x)
+ if (x < 1)
+ fun_l6_n469(x)
+ else
+ fun_l6_n260(x)
+ end
+end
+
+def fun_l5_n268(x)
+ if (x < 1)
+ fun_l6_n442(x)
+ else
+ fun_l6_n738(x)
+ end
+end
+
+def fun_l5_n269(x)
+ if (x < 1)
+ fun_l6_n663(x)
+ else
+ fun_l6_n109(x)
+ end
+end
+
+def fun_l5_n270(x)
+ if (x < 1)
+ fun_l6_n302(x)
+ else
+ fun_l6_n664(x)
+ end
+end
+
+def fun_l5_n271(x)
+ if (x < 1)
+ fun_l6_n201(x)
+ else
+ fun_l6_n251(x)
+ end
+end
+
+def fun_l5_n272(x)
+ if (x < 1)
+ fun_l6_n776(x)
+ else
+ fun_l6_n903(x)
+ end
+end
+
+def fun_l5_n273(x)
+ if (x < 1)
+ fun_l6_n683(x)
+ else
+ fun_l6_n233(x)
+ end
+end
+
+def fun_l5_n274(x)
+ if (x < 1)
+ fun_l6_n530(x)
+ else
+ fun_l6_n487(x)
+ end
+end
+
+def fun_l5_n275(x)
+ if (x < 1)
+ fun_l6_n848(x)
+ else
+ fun_l6_n99(x)
+ end
+end
+
+def fun_l5_n276(x)
+ if (x < 1)
+ fun_l6_n126(x)
+ else
+ fun_l6_n914(x)
+ end
+end
+
+def fun_l5_n277(x)
+ if (x < 1)
+ fun_l6_n304(x)
+ else
+ fun_l6_n198(x)
+ end
+end
+
+def fun_l5_n278(x)
+ if (x < 1)
+ fun_l6_n47(x)
+ else
+ fun_l6_n179(x)
+ end
+end
+
+def fun_l5_n279(x)
+ if (x < 1)
+ fun_l6_n846(x)
+ else
+ fun_l6_n301(x)
+ end
+end
+
+def fun_l5_n280(x)
+ if (x < 1)
+ fun_l6_n576(x)
+ else
+ fun_l6_n561(x)
+ end
+end
+
+def fun_l5_n281(x)
+ if (x < 1)
+ fun_l6_n307(x)
+ else
+ fun_l6_n545(x)
+ end
+end
+
+def fun_l5_n282(x)
+ if (x < 1)
+ fun_l6_n434(x)
+ else
+ fun_l6_n669(x)
+ end
+end
+
+def fun_l5_n283(x)
+ if (x < 1)
+ fun_l6_n606(x)
+ else
+ fun_l6_n147(x)
+ end
+end
+
+def fun_l5_n284(x)
+ if (x < 1)
+ fun_l6_n212(x)
+ else
+ fun_l6_n504(x)
+ end
+end
+
+def fun_l5_n285(x)
+ if (x < 1)
+ fun_l6_n193(x)
+ else
+ fun_l6_n165(x)
+ end
+end
+
+def fun_l5_n286(x)
+ if (x < 1)
+ fun_l6_n569(x)
+ else
+ fun_l6_n100(x)
+ end
+end
+
+def fun_l5_n287(x)
+ if (x < 1)
+ fun_l6_n59(x)
+ else
+ fun_l6_n998(x)
+ end
+end
+
+def fun_l5_n288(x)
+ if (x < 1)
+ fun_l6_n544(x)
+ else
+ fun_l6_n923(x)
+ end
+end
+
+def fun_l5_n289(x)
+ if (x < 1)
+ fun_l6_n317(x)
+ else
+ fun_l6_n255(x)
+ end
+end
+
+def fun_l5_n290(x)
+ if (x < 1)
+ fun_l6_n476(x)
+ else
+ fun_l6_n789(x)
+ end
+end
+
+def fun_l5_n291(x)
+ if (x < 1)
+ fun_l6_n324(x)
+ else
+ fun_l6_n162(x)
+ end
+end
+
+def fun_l5_n292(x)
+ if (x < 1)
+ fun_l6_n704(x)
+ else
+ fun_l6_n454(x)
+ end
+end
+
+def fun_l5_n293(x)
+ if (x < 1)
+ fun_l6_n994(x)
+ else
+ fun_l6_n637(x)
+ end
+end
+
+def fun_l5_n294(x)
+ if (x < 1)
+ fun_l6_n801(x)
+ else
+ fun_l6_n913(x)
+ end
+end
+
+def fun_l5_n295(x)
+ if (x < 1)
+ fun_l6_n579(x)
+ else
+ fun_l6_n795(x)
+ end
+end
+
+def fun_l5_n296(x)
+ if (x < 1)
+ fun_l6_n689(x)
+ else
+ fun_l6_n546(x)
+ end
+end
+
+def fun_l5_n297(x)
+ if (x < 1)
+ fun_l6_n971(x)
+ else
+ fun_l6_n493(x)
+ end
+end
+
+def fun_l5_n298(x)
+ if (x < 1)
+ fun_l6_n67(x)
+ else
+ fun_l6_n372(x)
+ end
+end
+
+def fun_l5_n299(x)
+ if (x < 1)
+ fun_l6_n654(x)
+ else
+ fun_l6_n921(x)
+ end
+end
+
+def fun_l5_n300(x)
+ if (x < 1)
+ fun_l6_n402(x)
+ else
+ fun_l6_n437(x)
+ end
+end
+
+def fun_l5_n301(x)
+ if (x < 1)
+ fun_l6_n448(x)
+ else
+ fun_l6_n177(x)
+ end
+end
+
+def fun_l5_n302(x)
+ if (x < 1)
+ fun_l6_n308(x)
+ else
+ fun_l6_n869(x)
+ end
+end
+
+def fun_l5_n303(x)
+ if (x < 1)
+ fun_l6_n825(x)
+ else
+ fun_l6_n848(x)
+ end
+end
+
+def fun_l5_n304(x)
+ if (x < 1)
+ fun_l6_n735(x)
+ else
+ fun_l6_n653(x)
+ end
+end
+
+def fun_l5_n305(x)
+ if (x < 1)
+ fun_l6_n393(x)
+ else
+ fun_l6_n113(x)
+ end
+end
+
+def fun_l5_n306(x)
+ if (x < 1)
+ fun_l6_n821(x)
+ else
+ fun_l6_n827(x)
+ end
+end
+
+def fun_l5_n307(x)
+ if (x < 1)
+ fun_l6_n734(x)
+ else
+ fun_l6_n498(x)
+ end
+end
+
+def fun_l5_n308(x)
+ if (x < 1)
+ fun_l6_n833(x)
+ else
+ fun_l6_n302(x)
+ end
+end
+
+def fun_l5_n309(x)
+ if (x < 1)
+ fun_l6_n596(x)
+ else
+ fun_l6_n544(x)
+ end
+end
+
+def fun_l5_n310(x)
+ if (x < 1)
+ fun_l6_n61(x)
+ else
+ fun_l6_n823(x)
+ end
+end
+
+def fun_l5_n311(x)
+ if (x < 1)
+ fun_l6_n596(x)
+ else
+ fun_l6_n98(x)
+ end
+end
+
+def fun_l5_n312(x)
+ if (x < 1)
+ fun_l6_n78(x)
+ else
+ fun_l6_n186(x)
+ end
+end
+
+def fun_l5_n313(x)
+ if (x < 1)
+ fun_l6_n286(x)
+ else
+ fun_l6_n230(x)
+ end
+end
+
+def fun_l5_n314(x)
+ if (x < 1)
+ fun_l6_n613(x)
+ else
+ fun_l6_n412(x)
+ end
+end
+
+def fun_l5_n315(x)
+ if (x < 1)
+ fun_l6_n0(x)
+ else
+ fun_l6_n579(x)
+ end
+end
+
+def fun_l5_n316(x)
+ if (x < 1)
+ fun_l6_n991(x)
+ else
+ fun_l6_n379(x)
+ end
+end
+
+def fun_l5_n317(x)
+ if (x < 1)
+ fun_l6_n825(x)
+ else
+ fun_l6_n964(x)
+ end
+end
+
+def fun_l5_n318(x)
+ if (x < 1)
+ fun_l6_n707(x)
+ else
+ fun_l6_n664(x)
+ end
+end
+
+def fun_l5_n319(x)
+ if (x < 1)
+ fun_l6_n326(x)
+ else
+ fun_l6_n26(x)
+ end
+end
+
+def fun_l5_n320(x)
+ if (x < 1)
+ fun_l6_n684(x)
+ else
+ fun_l6_n333(x)
+ end
+end
+
+def fun_l5_n321(x)
+ if (x < 1)
+ fun_l6_n165(x)
+ else
+ fun_l6_n586(x)
+ end
+end
+
+def fun_l5_n322(x)
+ if (x < 1)
+ fun_l6_n28(x)
+ else
+ fun_l6_n53(x)
+ end
+end
+
+def fun_l5_n323(x)
+ if (x < 1)
+ fun_l6_n693(x)
+ else
+ fun_l6_n84(x)
+ end
+end
+
+def fun_l5_n324(x)
+ if (x < 1)
+ fun_l6_n500(x)
+ else
+ fun_l6_n445(x)
+ end
+end
+
+def fun_l5_n325(x)
+ if (x < 1)
+ fun_l6_n189(x)
+ else
+ fun_l6_n756(x)
+ end
+end
+
+def fun_l5_n326(x)
+ if (x < 1)
+ fun_l6_n147(x)
+ else
+ fun_l6_n709(x)
+ end
+end
+
+def fun_l5_n327(x)
+ if (x < 1)
+ fun_l6_n893(x)
+ else
+ fun_l6_n851(x)
+ end
+end
+
+def fun_l5_n328(x)
+ if (x < 1)
+ fun_l6_n685(x)
+ else
+ fun_l6_n399(x)
+ end
+end
+
+def fun_l5_n329(x)
+ if (x < 1)
+ fun_l6_n281(x)
+ else
+ fun_l6_n284(x)
+ end
+end
+
+def fun_l5_n330(x)
+ if (x < 1)
+ fun_l6_n579(x)
+ else
+ fun_l6_n671(x)
+ end
+end
+
+def fun_l5_n331(x)
+ if (x < 1)
+ fun_l6_n176(x)
+ else
+ fun_l6_n829(x)
+ end
+end
+
+def fun_l5_n332(x)
+ if (x < 1)
+ fun_l6_n209(x)
+ else
+ fun_l6_n91(x)
+ end
+end
+
+def fun_l5_n333(x)
+ if (x < 1)
+ fun_l6_n302(x)
+ else
+ fun_l6_n360(x)
+ end
+end
+
+def fun_l5_n334(x)
+ if (x < 1)
+ fun_l6_n701(x)
+ else
+ fun_l6_n438(x)
+ end
+end
+
+def fun_l5_n335(x)
+ if (x < 1)
+ fun_l6_n923(x)
+ else
+ fun_l6_n613(x)
+ end
+end
+
+def fun_l5_n336(x)
+ if (x < 1)
+ fun_l6_n490(x)
+ else
+ fun_l6_n405(x)
+ end
+end
+
+def fun_l5_n337(x)
+ if (x < 1)
+ fun_l6_n187(x)
+ else
+ fun_l6_n953(x)
+ end
+end
+
+def fun_l5_n338(x)
+ if (x < 1)
+ fun_l6_n396(x)
+ else
+ fun_l6_n917(x)
+ end
+end
+
+def fun_l5_n339(x)
+ if (x < 1)
+ fun_l6_n822(x)
+ else
+ fun_l6_n939(x)
+ end
+end
+
+def fun_l5_n340(x)
+ if (x < 1)
+ fun_l6_n665(x)
+ else
+ fun_l6_n890(x)
+ end
+end
+
+def fun_l5_n341(x)
+ if (x < 1)
+ fun_l6_n125(x)
+ else
+ fun_l6_n817(x)
+ end
+end
+
+def fun_l5_n342(x)
+ if (x < 1)
+ fun_l6_n825(x)
+ else
+ fun_l6_n853(x)
+ end
+end
+
+def fun_l5_n343(x)
+ if (x < 1)
+ fun_l6_n724(x)
+ else
+ fun_l6_n633(x)
+ end
+end
+
+def fun_l5_n344(x)
+ if (x < 1)
+ fun_l6_n901(x)
+ else
+ fun_l6_n26(x)
+ end
+end
+
+def fun_l5_n345(x)
+ if (x < 1)
+ fun_l6_n406(x)
+ else
+ fun_l6_n664(x)
+ end
+end
+
+def fun_l5_n346(x)
+ if (x < 1)
+ fun_l6_n720(x)
+ else
+ fun_l6_n856(x)
+ end
+end
+
+def fun_l5_n347(x)
+ if (x < 1)
+ fun_l6_n617(x)
+ else
+ fun_l6_n116(x)
+ end
+end
+
+def fun_l5_n348(x)
+ if (x < 1)
+ fun_l6_n560(x)
+ else
+ fun_l6_n24(x)
+ end
+end
+
+def fun_l5_n349(x)
+ if (x < 1)
+ fun_l6_n758(x)
+ else
+ fun_l6_n297(x)
+ end
+end
+
+def fun_l5_n350(x)
+ if (x < 1)
+ fun_l6_n583(x)
+ else
+ fun_l6_n673(x)
+ end
+end
+
+def fun_l5_n351(x)
+ if (x < 1)
+ fun_l6_n990(x)
+ else
+ fun_l6_n512(x)
+ end
+end
+
+def fun_l5_n352(x)
+ if (x < 1)
+ fun_l6_n250(x)
+ else
+ fun_l6_n819(x)
+ end
+end
+
+def fun_l5_n353(x)
+ if (x < 1)
+ fun_l6_n186(x)
+ else
+ fun_l6_n787(x)
+ end
+end
+
+def fun_l5_n354(x)
+ if (x < 1)
+ fun_l6_n217(x)
+ else
+ fun_l6_n231(x)
+ end
+end
+
+def fun_l5_n355(x)
+ if (x < 1)
+ fun_l6_n827(x)
+ else
+ fun_l6_n439(x)
+ end
+end
+
+def fun_l5_n356(x)
+ if (x < 1)
+ fun_l6_n456(x)
+ else
+ fun_l6_n352(x)
+ end
+end
+
+def fun_l5_n357(x)
+ if (x < 1)
+ fun_l6_n306(x)
+ else
+ fun_l6_n236(x)
+ end
+end
+
+def fun_l5_n358(x)
+ if (x < 1)
+ fun_l6_n515(x)
+ else
+ fun_l6_n100(x)
+ end
+end
+
+def fun_l5_n359(x)
+ if (x < 1)
+ fun_l6_n28(x)
+ else
+ fun_l6_n820(x)
+ end
+end
+
+def fun_l5_n360(x)
+ if (x < 1)
+ fun_l6_n683(x)
+ else
+ fun_l6_n547(x)
+ end
+end
+
+def fun_l5_n361(x)
+ if (x < 1)
+ fun_l6_n573(x)
+ else
+ fun_l6_n699(x)
+ end
+end
+
+def fun_l5_n362(x)
+ if (x < 1)
+ fun_l6_n807(x)
+ else
+ fun_l6_n548(x)
+ end
+end
+
+def fun_l5_n363(x)
+ if (x < 1)
+ fun_l6_n712(x)
+ else
+ fun_l6_n323(x)
+ end
+end
+
+def fun_l5_n364(x)
+ if (x < 1)
+ fun_l6_n457(x)
+ else
+ fun_l6_n447(x)
+ end
+end
+
+def fun_l5_n365(x)
+ if (x < 1)
+ fun_l6_n684(x)
+ else
+ fun_l6_n782(x)
+ end
+end
+
+def fun_l5_n366(x)
+ if (x < 1)
+ fun_l6_n217(x)
+ else
+ fun_l6_n344(x)
+ end
+end
+
+def fun_l5_n367(x)
+ if (x < 1)
+ fun_l6_n670(x)
+ else
+ fun_l6_n311(x)
+ end
+end
+
+def fun_l5_n368(x)
+ if (x < 1)
+ fun_l6_n224(x)
+ else
+ fun_l6_n198(x)
+ end
+end
+
+def fun_l5_n369(x)
+ if (x < 1)
+ fun_l6_n517(x)
+ else
+ fun_l6_n186(x)
+ end
+end
+
+def fun_l5_n370(x)
+ if (x < 1)
+ fun_l6_n511(x)
+ else
+ fun_l6_n27(x)
+ end
+end
+
+def fun_l5_n371(x)
+ if (x < 1)
+ fun_l6_n485(x)
+ else
+ fun_l6_n288(x)
+ end
+end
+
+def fun_l5_n372(x)
+ if (x < 1)
+ fun_l6_n931(x)
+ else
+ fun_l6_n473(x)
+ end
+end
+
+def fun_l5_n373(x)
+ if (x < 1)
+ fun_l6_n381(x)
+ else
+ fun_l6_n650(x)
+ end
+end
+
+def fun_l5_n374(x)
+ if (x < 1)
+ fun_l6_n132(x)
+ else
+ fun_l6_n243(x)
+ end
+end
+
+def fun_l5_n375(x)
+ if (x < 1)
+ fun_l6_n900(x)
+ else
+ fun_l6_n322(x)
+ end
+end
+
+def fun_l5_n376(x)
+ if (x < 1)
+ fun_l6_n787(x)
+ else
+ fun_l6_n588(x)
+ end
+end
+
+def fun_l5_n377(x)
+ if (x < 1)
+ fun_l6_n233(x)
+ else
+ fun_l6_n358(x)
+ end
+end
+
+def fun_l5_n378(x)
+ if (x < 1)
+ fun_l6_n601(x)
+ else
+ fun_l6_n40(x)
+ end
+end
+
+def fun_l5_n379(x)
+ if (x < 1)
+ fun_l6_n682(x)
+ else
+ fun_l6_n63(x)
+ end
+end
+
+def fun_l5_n380(x)
+ if (x < 1)
+ fun_l6_n279(x)
+ else
+ fun_l6_n393(x)
+ end
+end
+
+def fun_l5_n381(x)
+ if (x < 1)
+ fun_l6_n83(x)
+ else
+ fun_l6_n538(x)
+ end
+end
+
+def fun_l5_n382(x)
+ if (x < 1)
+ fun_l6_n956(x)
+ else
+ fun_l6_n194(x)
+ end
+end
+
+def fun_l5_n383(x)
+ if (x < 1)
+ fun_l6_n55(x)
+ else
+ fun_l6_n140(x)
+ end
+end
+
+def fun_l5_n384(x)
+ if (x < 1)
+ fun_l6_n165(x)
+ else
+ fun_l6_n784(x)
+ end
+end
+
+def fun_l5_n385(x)
+ if (x < 1)
+ fun_l6_n582(x)
+ else
+ fun_l6_n97(x)
+ end
+end
+
+def fun_l5_n386(x)
+ if (x < 1)
+ fun_l6_n362(x)
+ else
+ fun_l6_n935(x)
+ end
+end
+
+def fun_l5_n387(x)
+ if (x < 1)
+ fun_l6_n496(x)
+ else
+ fun_l6_n512(x)
+ end
+end
+
+def fun_l5_n388(x)
+ if (x < 1)
+ fun_l6_n793(x)
+ else
+ fun_l6_n746(x)
+ end
+end
+
+def fun_l5_n389(x)
+ if (x < 1)
+ fun_l6_n172(x)
+ else
+ fun_l6_n731(x)
+ end
+end
+
+def fun_l5_n390(x)
+ if (x < 1)
+ fun_l6_n895(x)
+ else
+ fun_l6_n694(x)
+ end
+end
+
+def fun_l5_n391(x)
+ if (x < 1)
+ fun_l6_n336(x)
+ else
+ fun_l6_n551(x)
+ end
+end
+
+def fun_l5_n392(x)
+ if (x < 1)
+ fun_l6_n453(x)
+ else
+ fun_l6_n83(x)
+ end
+end
+
+def fun_l5_n393(x)
+ if (x < 1)
+ fun_l6_n571(x)
+ else
+ fun_l6_n293(x)
+ end
+end
+
+def fun_l5_n394(x)
+ if (x < 1)
+ fun_l6_n872(x)
+ else
+ fun_l6_n519(x)
+ end
+end
+
+def fun_l5_n395(x)
+ if (x < 1)
+ fun_l6_n912(x)
+ else
+ fun_l6_n955(x)
+ end
+end
+
+def fun_l5_n396(x)
+ if (x < 1)
+ fun_l6_n961(x)
+ else
+ fun_l6_n367(x)
+ end
+end
+
+def fun_l5_n397(x)
+ if (x < 1)
+ fun_l6_n255(x)
+ else
+ fun_l6_n639(x)
+ end
+end
+
+def fun_l5_n398(x)
+ if (x < 1)
+ fun_l6_n970(x)
+ else
+ fun_l6_n465(x)
+ end
+end
+
+def fun_l5_n399(x)
+ if (x < 1)
+ fun_l6_n625(x)
+ else
+ fun_l6_n387(x)
+ end
+end
+
+def fun_l5_n400(x)
+ if (x < 1)
+ fun_l6_n537(x)
+ else
+ fun_l6_n336(x)
+ end
+end
+
+def fun_l5_n401(x)
+ if (x < 1)
+ fun_l6_n61(x)
+ else
+ fun_l6_n0(x)
+ end
+end
+
+def fun_l5_n402(x)
+ if (x < 1)
+ fun_l6_n358(x)
+ else
+ fun_l6_n715(x)
+ end
+end
+
+def fun_l5_n403(x)
+ if (x < 1)
+ fun_l6_n864(x)
+ else
+ fun_l6_n729(x)
+ end
+end
+
+def fun_l5_n404(x)
+ if (x < 1)
+ fun_l6_n393(x)
+ else
+ fun_l6_n962(x)
+ end
+end
+
+def fun_l5_n405(x)
+ if (x < 1)
+ fun_l6_n995(x)
+ else
+ fun_l6_n835(x)
+ end
+end
+
+def fun_l5_n406(x)
+ if (x < 1)
+ fun_l6_n605(x)
+ else
+ fun_l6_n732(x)
+ end
+end
+
+def fun_l5_n407(x)
+ if (x < 1)
+ fun_l6_n132(x)
+ else
+ fun_l6_n112(x)
+ end
+end
+
+def fun_l5_n408(x)
+ if (x < 1)
+ fun_l6_n311(x)
+ else
+ fun_l6_n972(x)
+ end
+end
+
+def fun_l5_n409(x)
+ if (x < 1)
+ fun_l6_n460(x)
+ else
+ fun_l6_n750(x)
+ end
+end
+
+def fun_l5_n410(x)
+ if (x < 1)
+ fun_l6_n237(x)
+ else
+ fun_l6_n463(x)
+ end
+end
+
+def fun_l5_n411(x)
+ if (x < 1)
+ fun_l6_n251(x)
+ else
+ fun_l6_n944(x)
+ end
+end
+
+def fun_l5_n412(x)
+ if (x < 1)
+ fun_l6_n123(x)
+ else
+ fun_l6_n369(x)
+ end
+end
+
+def fun_l5_n413(x)
+ if (x < 1)
+ fun_l6_n371(x)
+ else
+ fun_l6_n589(x)
+ end
+end
+
+def fun_l5_n414(x)
+ if (x < 1)
+ fun_l6_n232(x)
+ else
+ fun_l6_n354(x)
+ end
+end
+
+def fun_l5_n415(x)
+ if (x < 1)
+ fun_l6_n580(x)
+ else
+ fun_l6_n330(x)
+ end
+end
+
+def fun_l5_n416(x)
+ if (x < 1)
+ fun_l6_n483(x)
+ else
+ fun_l6_n446(x)
+ end
+end
+
+def fun_l5_n417(x)
+ if (x < 1)
+ fun_l6_n834(x)
+ else
+ fun_l6_n284(x)
+ end
+end
+
+def fun_l5_n418(x)
+ if (x < 1)
+ fun_l6_n864(x)
+ else
+ fun_l6_n825(x)
+ end
+end
+
+def fun_l5_n419(x)
+ if (x < 1)
+ fun_l6_n406(x)
+ else
+ fun_l6_n680(x)
+ end
+end
+
+def fun_l5_n420(x)
+ if (x < 1)
+ fun_l6_n101(x)
+ else
+ fun_l6_n4(x)
+ end
+end
+
+def fun_l5_n421(x)
+ if (x < 1)
+ fun_l6_n628(x)
+ else
+ fun_l6_n303(x)
+ end
+end
+
+def fun_l5_n422(x)
+ if (x < 1)
+ fun_l6_n521(x)
+ else
+ fun_l6_n547(x)
+ end
+end
+
+def fun_l5_n423(x)
+ if (x < 1)
+ fun_l6_n589(x)
+ else
+ fun_l6_n134(x)
+ end
+end
+
+def fun_l5_n424(x)
+ if (x < 1)
+ fun_l6_n161(x)
+ else
+ fun_l6_n347(x)
+ end
+end
+
+def fun_l5_n425(x)
+ if (x < 1)
+ fun_l6_n59(x)
+ else
+ fun_l6_n988(x)
+ end
+end
+
+def fun_l5_n426(x)
+ if (x < 1)
+ fun_l6_n388(x)
+ else
+ fun_l6_n182(x)
+ end
+end
+
+def fun_l5_n427(x)
+ if (x < 1)
+ fun_l6_n500(x)
+ else
+ fun_l6_n536(x)
+ end
+end
+
+def fun_l5_n428(x)
+ if (x < 1)
+ fun_l6_n792(x)
+ else
+ fun_l6_n253(x)
+ end
+end
+
+def fun_l5_n429(x)
+ if (x < 1)
+ fun_l6_n774(x)
+ else
+ fun_l6_n997(x)
+ end
+end
+
+def fun_l5_n430(x)
+ if (x < 1)
+ fun_l6_n876(x)
+ else
+ fun_l6_n798(x)
+ end
+end
+
+def fun_l5_n431(x)
+ if (x < 1)
+ fun_l6_n606(x)
+ else
+ fun_l6_n403(x)
+ end
+end
+
+def fun_l5_n432(x)
+ if (x < 1)
+ fun_l6_n920(x)
+ else
+ fun_l6_n827(x)
+ end
+end
+
+def fun_l5_n433(x)
+ if (x < 1)
+ fun_l6_n887(x)
+ else
+ fun_l6_n149(x)
+ end
+end
+
+def fun_l5_n434(x)
+ if (x < 1)
+ fun_l6_n413(x)
+ else
+ fun_l6_n44(x)
+ end
+end
+
+def fun_l5_n435(x)
+ if (x < 1)
+ fun_l6_n474(x)
+ else
+ fun_l6_n107(x)
+ end
+end
+
+def fun_l5_n436(x)
+ if (x < 1)
+ fun_l6_n807(x)
+ else
+ fun_l6_n636(x)
+ end
+end
+
+def fun_l5_n437(x)
+ if (x < 1)
+ fun_l6_n616(x)
+ else
+ fun_l6_n615(x)
+ end
+end
+
+def fun_l5_n438(x)
+ if (x < 1)
+ fun_l6_n384(x)
+ else
+ fun_l6_n535(x)
+ end
+end
+
+def fun_l5_n439(x)
+ if (x < 1)
+ fun_l6_n326(x)
+ else
+ fun_l6_n929(x)
+ end
+end
+
+def fun_l5_n440(x)
+ if (x < 1)
+ fun_l6_n852(x)
+ else
+ fun_l6_n597(x)
+ end
+end
+
+def fun_l5_n441(x)
+ if (x < 1)
+ fun_l6_n246(x)
+ else
+ fun_l6_n991(x)
+ end
+end
+
+def fun_l5_n442(x)
+ if (x < 1)
+ fun_l6_n258(x)
+ else
+ fun_l6_n140(x)
+ end
+end
+
+def fun_l5_n443(x)
+ if (x < 1)
+ fun_l6_n815(x)
+ else
+ fun_l6_n600(x)
+ end
+end
+
+def fun_l5_n444(x)
+ if (x < 1)
+ fun_l6_n153(x)
+ else
+ fun_l6_n902(x)
+ end
+end
+
+def fun_l5_n445(x)
+ if (x < 1)
+ fun_l6_n289(x)
+ else
+ fun_l6_n240(x)
+ end
+end
+
+def fun_l5_n446(x)
+ if (x < 1)
+ fun_l6_n398(x)
+ else
+ fun_l6_n273(x)
+ end
+end
+
+def fun_l5_n447(x)
+ if (x < 1)
+ fun_l6_n537(x)
+ else
+ fun_l6_n8(x)
+ end
+end
+
+def fun_l5_n448(x)
+ if (x < 1)
+ fun_l6_n801(x)
+ else
+ fun_l6_n389(x)
+ end
+end
+
+def fun_l5_n449(x)
+ if (x < 1)
+ fun_l6_n363(x)
+ else
+ fun_l6_n17(x)
+ end
+end
+
+def fun_l5_n450(x)
+ if (x < 1)
+ fun_l6_n511(x)
+ else
+ fun_l6_n151(x)
+ end
+end
+
+def fun_l5_n451(x)
+ if (x < 1)
+ fun_l6_n640(x)
+ else
+ fun_l6_n785(x)
+ end
+end
+
+def fun_l5_n452(x)
+ if (x < 1)
+ fun_l6_n961(x)
+ else
+ fun_l6_n567(x)
+ end
+end
+
+def fun_l5_n453(x)
+ if (x < 1)
+ fun_l6_n608(x)
+ else
+ fun_l6_n910(x)
+ end
+end
+
+def fun_l5_n454(x)
+ if (x < 1)
+ fun_l6_n898(x)
+ else
+ fun_l6_n231(x)
+ end
+end
+
+def fun_l5_n455(x)
+ if (x < 1)
+ fun_l6_n205(x)
+ else
+ fun_l6_n162(x)
+ end
+end
+
+def fun_l5_n456(x)
+ if (x < 1)
+ fun_l6_n374(x)
+ else
+ fun_l6_n544(x)
+ end
+end
+
+def fun_l5_n457(x)
+ if (x < 1)
+ fun_l6_n514(x)
+ else
+ fun_l6_n522(x)
+ end
+end
+
+def fun_l5_n458(x)
+ if (x < 1)
+ fun_l6_n385(x)
+ else
+ fun_l6_n808(x)
+ end
+end
+
+def fun_l5_n459(x)
+ if (x < 1)
+ fun_l6_n525(x)
+ else
+ fun_l6_n144(x)
+ end
+end
+
+def fun_l5_n460(x)
+ if (x < 1)
+ fun_l6_n781(x)
+ else
+ fun_l6_n180(x)
+ end
+end
+
+def fun_l5_n461(x)
+ if (x < 1)
+ fun_l6_n681(x)
+ else
+ fun_l6_n273(x)
+ end
+end
+
+def fun_l5_n462(x)
+ if (x < 1)
+ fun_l6_n497(x)
+ else
+ fun_l6_n399(x)
+ end
+end
+
+def fun_l5_n463(x)
+ if (x < 1)
+ fun_l6_n261(x)
+ else
+ fun_l6_n311(x)
+ end
+end
+
+def fun_l5_n464(x)
+ if (x < 1)
+ fun_l6_n64(x)
+ else
+ fun_l6_n253(x)
+ end
+end
+
+def fun_l5_n465(x)
+ if (x < 1)
+ fun_l6_n388(x)
+ else
+ fun_l6_n300(x)
+ end
+end
+
+def fun_l5_n466(x)
+ if (x < 1)
+ fun_l6_n822(x)
+ else
+ fun_l6_n277(x)
+ end
+end
+
+def fun_l5_n467(x)
+ if (x < 1)
+ fun_l6_n909(x)
+ else
+ fun_l6_n605(x)
+ end
+end
+
+def fun_l5_n468(x)
+ if (x < 1)
+ fun_l6_n879(x)
+ else
+ fun_l6_n870(x)
+ end
+end
+
+def fun_l5_n469(x)
+ if (x < 1)
+ fun_l6_n351(x)
+ else
+ fun_l6_n917(x)
+ end
+end
+
+def fun_l5_n470(x)
+ if (x < 1)
+ fun_l6_n202(x)
+ else
+ fun_l6_n40(x)
+ end
+end
+
+def fun_l5_n471(x)
+ if (x < 1)
+ fun_l6_n782(x)
+ else
+ fun_l6_n839(x)
+ end
+end
+
+def fun_l5_n472(x)
+ if (x < 1)
+ fun_l6_n370(x)
+ else
+ fun_l6_n868(x)
+ end
+end
+
+def fun_l5_n473(x)
+ if (x < 1)
+ fun_l6_n556(x)
+ else
+ fun_l6_n722(x)
+ end
+end
+
+def fun_l5_n474(x)
+ if (x < 1)
+ fun_l6_n220(x)
+ else
+ fun_l6_n994(x)
+ end
+end
+
+def fun_l5_n475(x)
+ if (x < 1)
+ fun_l6_n266(x)
+ else
+ fun_l6_n872(x)
+ end
+end
+
+def fun_l5_n476(x)
+ if (x < 1)
+ fun_l6_n720(x)
+ else
+ fun_l6_n412(x)
+ end
+end
+
+def fun_l5_n477(x)
+ if (x < 1)
+ fun_l6_n284(x)
+ else
+ fun_l6_n90(x)
+ end
+end
+
+def fun_l5_n478(x)
+ if (x < 1)
+ fun_l6_n716(x)
+ else
+ fun_l6_n125(x)
+ end
+end
+
+def fun_l5_n479(x)
+ if (x < 1)
+ fun_l6_n136(x)
+ else
+ fun_l6_n232(x)
+ end
+end
+
+def fun_l5_n480(x)
+ if (x < 1)
+ fun_l6_n627(x)
+ else
+ fun_l6_n641(x)
+ end
+end
+
+def fun_l5_n481(x)
+ if (x < 1)
+ fun_l6_n411(x)
+ else
+ fun_l6_n943(x)
+ end
+end
+
+def fun_l5_n482(x)
+ if (x < 1)
+ fun_l6_n86(x)
+ else
+ fun_l6_n839(x)
+ end
+end
+
+def fun_l5_n483(x)
+ if (x < 1)
+ fun_l6_n988(x)
+ else
+ fun_l6_n329(x)
+ end
+end
+
+def fun_l5_n484(x)
+ if (x < 1)
+ fun_l6_n595(x)
+ else
+ fun_l6_n499(x)
+ end
+end
+
+def fun_l5_n485(x)
+ if (x < 1)
+ fun_l6_n912(x)
+ else
+ fun_l6_n267(x)
+ end
+end
+
+def fun_l5_n486(x)
+ if (x < 1)
+ fun_l6_n334(x)
+ else
+ fun_l6_n459(x)
+ end
+end
+
+def fun_l5_n487(x)
+ if (x < 1)
+ fun_l6_n771(x)
+ else
+ fun_l6_n458(x)
+ end
+end
+
+def fun_l5_n488(x)
+ if (x < 1)
+ fun_l6_n609(x)
+ else
+ fun_l6_n280(x)
+ end
+end
+
+def fun_l5_n489(x)
+ if (x < 1)
+ fun_l6_n564(x)
+ else
+ fun_l6_n564(x)
+ end
+end
+
+def fun_l5_n490(x)
+ if (x < 1)
+ fun_l6_n271(x)
+ else
+ fun_l6_n904(x)
+ end
+end
+
+def fun_l5_n491(x)
+ if (x < 1)
+ fun_l6_n338(x)
+ else
+ fun_l6_n694(x)
+ end
+end
+
+def fun_l5_n492(x)
+ if (x < 1)
+ fun_l6_n596(x)
+ else
+ fun_l6_n191(x)
+ end
+end
+
+def fun_l5_n493(x)
+ if (x < 1)
+ fun_l6_n369(x)
+ else
+ fun_l6_n513(x)
+ end
+end
+
+def fun_l5_n494(x)
+ if (x < 1)
+ fun_l6_n972(x)
+ else
+ fun_l6_n945(x)
+ end
+end
+
+def fun_l5_n495(x)
+ if (x < 1)
+ fun_l6_n747(x)
+ else
+ fun_l6_n96(x)
+ end
+end
+
+def fun_l5_n496(x)
+ if (x < 1)
+ fun_l6_n220(x)
+ else
+ fun_l6_n665(x)
+ end
+end
+
+def fun_l5_n497(x)
+ if (x < 1)
+ fun_l6_n793(x)
+ else
+ fun_l6_n468(x)
+ end
+end
+
+def fun_l5_n498(x)
+ if (x < 1)
+ fun_l6_n227(x)
+ else
+ fun_l6_n576(x)
+ end
+end
+
+def fun_l5_n499(x)
+ if (x < 1)
+ fun_l6_n356(x)
+ else
+ fun_l6_n614(x)
+ end
+end
+
+def fun_l5_n500(x)
+ if (x < 1)
+ fun_l6_n256(x)
+ else
+ fun_l6_n237(x)
+ end
+end
+
+def fun_l5_n501(x)
+ if (x < 1)
+ fun_l6_n503(x)
+ else
+ fun_l6_n159(x)
+ end
+end
+
+def fun_l5_n502(x)
+ if (x < 1)
+ fun_l6_n523(x)
+ else
+ fun_l6_n547(x)
+ end
+end
+
+def fun_l5_n503(x)
+ if (x < 1)
+ fun_l6_n778(x)
+ else
+ fun_l6_n600(x)
+ end
+end
+
+def fun_l5_n504(x)
+ if (x < 1)
+ fun_l6_n654(x)
+ else
+ fun_l6_n950(x)
+ end
+end
+
+def fun_l5_n505(x)
+ if (x < 1)
+ fun_l6_n105(x)
+ else
+ fun_l6_n881(x)
+ end
+end
+
+def fun_l5_n506(x)
+ if (x < 1)
+ fun_l6_n956(x)
+ else
+ fun_l6_n71(x)
+ end
+end
+
+def fun_l5_n507(x)
+ if (x < 1)
+ fun_l6_n33(x)
+ else
+ fun_l6_n431(x)
+ end
+end
+
+def fun_l5_n508(x)
+ if (x < 1)
+ fun_l6_n587(x)
+ else
+ fun_l6_n1(x)
+ end
+end
+
+def fun_l5_n509(x)
+ if (x < 1)
+ fun_l6_n258(x)
+ else
+ fun_l6_n547(x)
+ end
+end
+
+def fun_l5_n510(x)
+ if (x < 1)
+ fun_l6_n816(x)
+ else
+ fun_l6_n558(x)
+ end
+end
+
+def fun_l5_n511(x)
+ if (x < 1)
+ fun_l6_n61(x)
+ else
+ fun_l6_n10(x)
+ end
+end
+
+def fun_l5_n512(x)
+ if (x < 1)
+ fun_l6_n674(x)
+ else
+ fun_l6_n466(x)
+ end
+end
+
+def fun_l5_n513(x)
+ if (x < 1)
+ fun_l6_n580(x)
+ else
+ fun_l6_n398(x)
+ end
+end
+
+def fun_l5_n514(x)
+ if (x < 1)
+ fun_l6_n495(x)
+ else
+ fun_l6_n407(x)
+ end
+end
+
+def fun_l5_n515(x)
+ if (x < 1)
+ fun_l6_n639(x)
+ else
+ fun_l6_n214(x)
+ end
+end
+
+def fun_l5_n516(x)
+ if (x < 1)
+ fun_l6_n15(x)
+ else
+ fun_l6_n716(x)
+ end
+end
+
+def fun_l5_n517(x)
+ if (x < 1)
+ fun_l6_n645(x)
+ else
+ fun_l6_n645(x)
+ end
+end
+
+def fun_l5_n518(x)
+ if (x < 1)
+ fun_l6_n615(x)
+ else
+ fun_l6_n44(x)
+ end
+end
+
+def fun_l5_n519(x)
+ if (x < 1)
+ fun_l6_n399(x)
+ else
+ fun_l6_n663(x)
+ end
+end
+
+def fun_l5_n520(x)
+ if (x < 1)
+ fun_l6_n85(x)
+ else
+ fun_l6_n870(x)
+ end
+end
+
+def fun_l5_n521(x)
+ if (x < 1)
+ fun_l6_n14(x)
+ else
+ fun_l6_n965(x)
+ end
+end
+
+def fun_l5_n522(x)
+ if (x < 1)
+ fun_l6_n24(x)
+ else
+ fun_l6_n581(x)
+ end
+end
+
+def fun_l5_n523(x)
+ if (x < 1)
+ fun_l6_n501(x)
+ else
+ fun_l6_n913(x)
+ end
+end
+
+def fun_l5_n524(x)
+ if (x < 1)
+ fun_l6_n772(x)
+ else
+ fun_l6_n999(x)
+ end
+end
+
+def fun_l5_n525(x)
+ if (x < 1)
+ fun_l6_n847(x)
+ else
+ fun_l6_n422(x)
+ end
+end
+
+def fun_l5_n526(x)
+ if (x < 1)
+ fun_l6_n377(x)
+ else
+ fun_l6_n986(x)
+ end
+end
+
+def fun_l5_n527(x)
+ if (x < 1)
+ fun_l6_n548(x)
+ else
+ fun_l6_n40(x)
+ end
+end
+
+def fun_l5_n528(x)
+ if (x < 1)
+ fun_l6_n392(x)
+ else
+ fun_l6_n577(x)
+ end
+end
+
+def fun_l5_n529(x)
+ if (x < 1)
+ fun_l6_n101(x)
+ else
+ fun_l6_n26(x)
+ end
+end
+
+def fun_l5_n530(x)
+ if (x < 1)
+ fun_l6_n800(x)
+ else
+ fun_l6_n958(x)
+ end
+end
+
+def fun_l5_n531(x)
+ if (x < 1)
+ fun_l6_n72(x)
+ else
+ fun_l6_n887(x)
+ end
+end
+
+def fun_l5_n532(x)
+ if (x < 1)
+ fun_l6_n467(x)
+ else
+ fun_l6_n740(x)
+ end
+end
+
+def fun_l5_n533(x)
+ if (x < 1)
+ fun_l6_n264(x)
+ else
+ fun_l6_n683(x)
+ end
+end
+
+def fun_l5_n534(x)
+ if (x < 1)
+ fun_l6_n953(x)
+ else
+ fun_l6_n560(x)
+ end
+end
+
+def fun_l5_n535(x)
+ if (x < 1)
+ fun_l6_n854(x)
+ else
+ fun_l6_n59(x)
+ end
+end
+
+def fun_l5_n536(x)
+ if (x < 1)
+ fun_l6_n940(x)
+ else
+ fun_l6_n832(x)
+ end
+end
+
+def fun_l5_n537(x)
+ if (x < 1)
+ fun_l6_n297(x)
+ else
+ fun_l6_n18(x)
+ end
+end
+
+def fun_l5_n538(x)
+ if (x < 1)
+ fun_l6_n188(x)
+ else
+ fun_l6_n537(x)
+ end
+end
+
+def fun_l5_n539(x)
+ if (x < 1)
+ fun_l6_n992(x)
+ else
+ fun_l6_n825(x)
+ end
+end
+
+def fun_l5_n540(x)
+ if (x < 1)
+ fun_l6_n691(x)
+ else
+ fun_l6_n850(x)
+ end
+end
+
+def fun_l5_n541(x)
+ if (x < 1)
+ fun_l6_n858(x)
+ else
+ fun_l6_n948(x)
+ end
+end
+
+def fun_l5_n542(x)
+ if (x < 1)
+ fun_l6_n923(x)
+ else
+ fun_l6_n112(x)
+ end
+end
+
+def fun_l5_n543(x)
+ if (x < 1)
+ fun_l6_n419(x)
+ else
+ fun_l6_n4(x)
+ end
+end
+
+def fun_l5_n544(x)
+ if (x < 1)
+ fun_l6_n766(x)
+ else
+ fun_l6_n147(x)
+ end
+end
+
+def fun_l5_n545(x)
+ if (x < 1)
+ fun_l6_n327(x)
+ else
+ fun_l6_n327(x)
+ end
+end
+
+def fun_l5_n546(x)
+ if (x < 1)
+ fun_l6_n94(x)
+ else
+ fun_l6_n662(x)
+ end
+end
+
+def fun_l5_n547(x)
+ if (x < 1)
+ fun_l6_n764(x)
+ else
+ fun_l6_n521(x)
+ end
+end
+
+def fun_l5_n548(x)
+ if (x < 1)
+ fun_l6_n509(x)
+ else
+ fun_l6_n231(x)
+ end
+end
+
+def fun_l5_n549(x)
+ if (x < 1)
+ fun_l6_n370(x)
+ else
+ fun_l6_n599(x)
+ end
+end
+
+def fun_l5_n550(x)
+ if (x < 1)
+ fun_l6_n710(x)
+ else
+ fun_l6_n104(x)
+ end
+end
+
+def fun_l5_n551(x)
+ if (x < 1)
+ fun_l6_n677(x)
+ else
+ fun_l6_n184(x)
+ end
+end
+
+def fun_l5_n552(x)
+ if (x < 1)
+ fun_l6_n700(x)
+ else
+ fun_l6_n299(x)
+ end
+end
+
+def fun_l5_n553(x)
+ if (x < 1)
+ fun_l6_n688(x)
+ else
+ fun_l6_n934(x)
+ end
+end
+
+def fun_l5_n554(x)
+ if (x < 1)
+ fun_l6_n771(x)
+ else
+ fun_l6_n989(x)
+ end
+end
+
+def fun_l5_n555(x)
+ if (x < 1)
+ fun_l6_n164(x)
+ else
+ fun_l6_n197(x)
+ end
+end
+
+def fun_l5_n556(x)
+ if (x < 1)
+ fun_l6_n901(x)
+ else
+ fun_l6_n235(x)
+ end
+end
+
+def fun_l5_n557(x)
+ if (x < 1)
+ fun_l6_n990(x)
+ else
+ fun_l6_n490(x)
+ end
+end
+
+def fun_l5_n558(x)
+ if (x < 1)
+ fun_l6_n476(x)
+ else
+ fun_l6_n612(x)
+ end
+end
+
+def fun_l5_n559(x)
+ if (x < 1)
+ fun_l6_n761(x)
+ else
+ fun_l6_n3(x)
+ end
+end
+
+def fun_l5_n560(x)
+ if (x < 1)
+ fun_l6_n461(x)
+ else
+ fun_l6_n832(x)
+ end
+end
+
+def fun_l5_n561(x)
+ if (x < 1)
+ fun_l6_n206(x)
+ else
+ fun_l6_n815(x)
+ end
+end
+
+def fun_l5_n562(x)
+ if (x < 1)
+ fun_l6_n180(x)
+ else
+ fun_l6_n640(x)
+ end
+end
+
+def fun_l5_n563(x)
+ if (x < 1)
+ fun_l6_n612(x)
+ else
+ fun_l6_n900(x)
+ end
+end
+
+def fun_l5_n564(x)
+ if (x < 1)
+ fun_l6_n31(x)
+ else
+ fun_l6_n290(x)
+ end
+end
+
+def fun_l5_n565(x)
+ if (x < 1)
+ fun_l6_n322(x)
+ else
+ fun_l6_n136(x)
+ end
+end
+
+def fun_l5_n566(x)
+ if (x < 1)
+ fun_l6_n657(x)
+ else
+ fun_l6_n649(x)
+ end
+end
+
+def fun_l5_n567(x)
+ if (x < 1)
+ fun_l6_n683(x)
+ else
+ fun_l6_n903(x)
+ end
+end
+
+def fun_l5_n568(x)
+ if (x < 1)
+ fun_l6_n391(x)
+ else
+ fun_l6_n117(x)
+ end
+end
+
+def fun_l5_n569(x)
+ if (x < 1)
+ fun_l6_n868(x)
+ else
+ fun_l6_n644(x)
+ end
+end
+
+def fun_l5_n570(x)
+ if (x < 1)
+ fun_l6_n493(x)
+ else
+ fun_l6_n638(x)
+ end
+end
+
+def fun_l5_n571(x)
+ if (x < 1)
+ fun_l6_n207(x)
+ else
+ fun_l6_n650(x)
+ end
+end
+
+def fun_l5_n572(x)
+ if (x < 1)
+ fun_l6_n575(x)
+ else
+ fun_l6_n421(x)
+ end
+end
+
+def fun_l5_n573(x)
+ if (x < 1)
+ fun_l6_n757(x)
+ else
+ fun_l6_n515(x)
+ end
+end
+
+def fun_l5_n574(x)
+ if (x < 1)
+ fun_l6_n619(x)
+ else
+ fun_l6_n39(x)
+ end
+end
+
+def fun_l5_n575(x)
+ if (x < 1)
+ fun_l6_n91(x)
+ else
+ fun_l6_n79(x)
+ end
+end
+
+def fun_l5_n576(x)
+ if (x < 1)
+ fun_l6_n492(x)
+ else
+ fun_l6_n938(x)
+ end
+end
+
+def fun_l5_n577(x)
+ if (x < 1)
+ fun_l6_n181(x)
+ else
+ fun_l6_n98(x)
+ end
+end
+
+def fun_l5_n578(x)
+ if (x < 1)
+ fun_l6_n823(x)
+ else
+ fun_l6_n528(x)
+ end
+end
+
+def fun_l5_n579(x)
+ if (x < 1)
+ fun_l6_n218(x)
+ else
+ fun_l6_n613(x)
+ end
+end
+
+def fun_l5_n580(x)
+ if (x < 1)
+ fun_l6_n81(x)
+ else
+ fun_l6_n318(x)
+ end
+end
+
+def fun_l5_n581(x)
+ if (x < 1)
+ fun_l6_n953(x)
+ else
+ fun_l6_n162(x)
+ end
+end
+
+def fun_l5_n582(x)
+ if (x < 1)
+ fun_l6_n225(x)
+ else
+ fun_l6_n441(x)
+ end
+end
+
+def fun_l5_n583(x)
+ if (x < 1)
+ fun_l6_n862(x)
+ else
+ fun_l6_n939(x)
+ end
+end
+
+def fun_l5_n584(x)
+ if (x < 1)
+ fun_l6_n401(x)
+ else
+ fun_l6_n149(x)
+ end
+end
+
+def fun_l5_n585(x)
+ if (x < 1)
+ fun_l6_n94(x)
+ else
+ fun_l6_n320(x)
+ end
+end
+
+def fun_l5_n586(x)
+ if (x < 1)
+ fun_l6_n609(x)
+ else
+ fun_l6_n524(x)
+ end
+end
+
+def fun_l5_n587(x)
+ if (x < 1)
+ fun_l6_n412(x)
+ else
+ fun_l6_n350(x)
+ end
+end
+
+def fun_l5_n588(x)
+ if (x < 1)
+ fun_l6_n874(x)
+ else
+ fun_l6_n217(x)
+ end
+end
+
+def fun_l5_n589(x)
+ if (x < 1)
+ fun_l6_n989(x)
+ else
+ fun_l6_n62(x)
+ end
+end
+
+def fun_l5_n590(x)
+ if (x < 1)
+ fun_l6_n91(x)
+ else
+ fun_l6_n360(x)
+ end
+end
+
+def fun_l5_n591(x)
+ if (x < 1)
+ fun_l6_n392(x)
+ else
+ fun_l6_n530(x)
+ end
+end
+
+def fun_l5_n592(x)
+ if (x < 1)
+ fun_l6_n635(x)
+ else
+ fun_l6_n268(x)
+ end
+end
+
+def fun_l5_n593(x)
+ if (x < 1)
+ fun_l6_n747(x)
+ else
+ fun_l6_n345(x)
+ end
+end
+
+def fun_l5_n594(x)
+ if (x < 1)
+ fun_l6_n450(x)
+ else
+ fun_l6_n165(x)
+ end
+end
+
+def fun_l5_n595(x)
+ if (x < 1)
+ fun_l6_n960(x)
+ else
+ fun_l6_n256(x)
+ end
+end
+
+def fun_l5_n596(x)
+ if (x < 1)
+ fun_l6_n724(x)
+ else
+ fun_l6_n506(x)
+ end
+end
+
+def fun_l5_n597(x)
+ if (x < 1)
+ fun_l6_n809(x)
+ else
+ fun_l6_n180(x)
+ end
+end
+
+def fun_l5_n598(x)
+ if (x < 1)
+ fun_l6_n799(x)
+ else
+ fun_l6_n59(x)
+ end
+end
+
+def fun_l5_n599(x)
+ if (x < 1)
+ fun_l6_n412(x)
+ else
+ fun_l6_n868(x)
+ end
+end
+
+def fun_l5_n600(x)
+ if (x < 1)
+ fun_l6_n459(x)
+ else
+ fun_l6_n537(x)
+ end
+end
+
+def fun_l5_n601(x)
+ if (x < 1)
+ fun_l6_n321(x)
+ else
+ fun_l6_n39(x)
+ end
+end
+
+def fun_l5_n602(x)
+ if (x < 1)
+ fun_l6_n561(x)
+ else
+ fun_l6_n413(x)
+ end
+end
+
+def fun_l5_n603(x)
+ if (x < 1)
+ fun_l6_n173(x)
+ else
+ fun_l6_n324(x)
+ end
+end
+
+def fun_l5_n604(x)
+ if (x < 1)
+ fun_l6_n583(x)
+ else
+ fun_l6_n763(x)
+ end
+end
+
+def fun_l5_n605(x)
+ if (x < 1)
+ fun_l6_n200(x)
+ else
+ fun_l6_n996(x)
+ end
+end
+
+def fun_l5_n606(x)
+ if (x < 1)
+ fun_l6_n465(x)
+ else
+ fun_l6_n777(x)
+ end
+end
+
+def fun_l5_n607(x)
+ if (x < 1)
+ fun_l6_n744(x)
+ else
+ fun_l6_n917(x)
+ end
+end
+
+def fun_l5_n608(x)
+ if (x < 1)
+ fun_l6_n825(x)
+ else
+ fun_l6_n751(x)
+ end
+end
+
+def fun_l5_n609(x)
+ if (x < 1)
+ fun_l6_n357(x)
+ else
+ fun_l6_n889(x)
+ end
+end
+
+def fun_l5_n610(x)
+ if (x < 1)
+ fun_l6_n534(x)
+ else
+ fun_l6_n628(x)
+ end
+end
+
+def fun_l5_n611(x)
+ if (x < 1)
+ fun_l6_n242(x)
+ else
+ fun_l6_n57(x)
+ end
+end
+
+def fun_l5_n612(x)
+ if (x < 1)
+ fun_l6_n426(x)
+ else
+ fun_l6_n295(x)
+ end
+end
+
+def fun_l5_n613(x)
+ if (x < 1)
+ fun_l6_n218(x)
+ else
+ fun_l6_n194(x)
+ end
+end
+
+def fun_l5_n614(x)
+ if (x < 1)
+ fun_l6_n618(x)
+ else
+ fun_l6_n757(x)
+ end
+end
+
+def fun_l5_n615(x)
+ if (x < 1)
+ fun_l6_n708(x)
+ else
+ fun_l6_n187(x)
+ end
+end
+
+def fun_l5_n616(x)
+ if (x < 1)
+ fun_l6_n824(x)
+ else
+ fun_l6_n384(x)
+ end
+end
+
+def fun_l5_n617(x)
+ if (x < 1)
+ fun_l6_n149(x)
+ else
+ fun_l6_n741(x)
+ end
+end
+
+def fun_l5_n618(x)
+ if (x < 1)
+ fun_l6_n889(x)
+ else
+ fun_l6_n768(x)
+ end
+end
+
+def fun_l5_n619(x)
+ if (x < 1)
+ fun_l6_n144(x)
+ else
+ fun_l6_n746(x)
+ end
+end
+
+def fun_l5_n620(x)
+ if (x < 1)
+ fun_l6_n338(x)
+ else
+ fun_l6_n757(x)
+ end
+end
+
+def fun_l5_n621(x)
+ if (x < 1)
+ fun_l6_n623(x)
+ else
+ fun_l6_n432(x)
+ end
+end
+
+def fun_l5_n622(x)
+ if (x < 1)
+ fun_l6_n139(x)
+ else
+ fun_l6_n162(x)
+ end
+end
+
+def fun_l5_n623(x)
+ if (x < 1)
+ fun_l6_n371(x)
+ else
+ fun_l6_n297(x)
+ end
+end
+
+def fun_l5_n624(x)
+ if (x < 1)
+ fun_l6_n166(x)
+ else
+ fun_l6_n172(x)
+ end
+end
+
+def fun_l5_n625(x)
+ if (x < 1)
+ fun_l6_n506(x)
+ else
+ fun_l6_n7(x)
+ end
+end
+
+def fun_l5_n626(x)
+ if (x < 1)
+ fun_l6_n334(x)
+ else
+ fun_l6_n631(x)
+ end
+end
+
+def fun_l5_n627(x)
+ if (x < 1)
+ fun_l6_n209(x)
+ else
+ fun_l6_n316(x)
+ end
+end
+
+def fun_l5_n628(x)
+ if (x < 1)
+ fun_l6_n461(x)
+ else
+ fun_l6_n34(x)
+ end
+end
+
+def fun_l5_n629(x)
+ if (x < 1)
+ fun_l6_n6(x)
+ else
+ fun_l6_n818(x)
+ end
+end
+
+def fun_l5_n630(x)
+ if (x < 1)
+ fun_l6_n265(x)
+ else
+ fun_l6_n111(x)
+ end
+end
+
+def fun_l5_n631(x)
+ if (x < 1)
+ fun_l6_n493(x)
+ else
+ fun_l6_n64(x)
+ end
+end
+
+def fun_l5_n632(x)
+ if (x < 1)
+ fun_l6_n513(x)
+ else
+ fun_l6_n890(x)
+ end
+end
+
+def fun_l5_n633(x)
+ if (x < 1)
+ fun_l6_n295(x)
+ else
+ fun_l6_n295(x)
+ end
+end
+
+def fun_l5_n634(x)
+ if (x < 1)
+ fun_l6_n158(x)
+ else
+ fun_l6_n971(x)
+ end
+end
+
+def fun_l5_n635(x)
+ if (x < 1)
+ fun_l6_n171(x)
+ else
+ fun_l6_n337(x)
+ end
+end
+
+def fun_l5_n636(x)
+ if (x < 1)
+ fun_l6_n943(x)
+ else
+ fun_l6_n502(x)
+ end
+end
+
+def fun_l5_n637(x)
+ if (x < 1)
+ fun_l6_n339(x)
+ else
+ fun_l6_n638(x)
+ end
+end
+
+def fun_l5_n638(x)
+ if (x < 1)
+ fun_l6_n155(x)
+ else
+ fun_l6_n393(x)
+ end
+end
+
+def fun_l5_n639(x)
+ if (x < 1)
+ fun_l6_n29(x)
+ else
+ fun_l6_n506(x)
+ end
+end
+
+def fun_l5_n640(x)
+ if (x < 1)
+ fun_l6_n677(x)
+ else
+ fun_l6_n606(x)
+ end
+end
+
+def fun_l5_n641(x)
+ if (x < 1)
+ fun_l6_n306(x)
+ else
+ fun_l6_n571(x)
+ end
+end
+
+def fun_l5_n642(x)
+ if (x < 1)
+ fun_l6_n490(x)
+ else
+ fun_l6_n281(x)
+ end
+end
+
+def fun_l5_n643(x)
+ if (x < 1)
+ fun_l6_n392(x)
+ else
+ fun_l6_n686(x)
+ end
+end
+
+def fun_l5_n644(x)
+ if (x < 1)
+ fun_l6_n257(x)
+ else
+ fun_l6_n358(x)
+ end
+end
+
+def fun_l5_n645(x)
+ if (x < 1)
+ fun_l6_n949(x)
+ else
+ fun_l6_n15(x)
+ end
+end
+
+def fun_l5_n646(x)
+ if (x < 1)
+ fun_l6_n866(x)
+ else
+ fun_l6_n657(x)
+ end
+end
+
+def fun_l5_n647(x)
+ if (x < 1)
+ fun_l6_n624(x)
+ else
+ fun_l6_n390(x)
+ end
+end
+
+def fun_l5_n648(x)
+ if (x < 1)
+ fun_l6_n394(x)
+ else
+ fun_l6_n951(x)
+ end
+end
+
+def fun_l5_n649(x)
+ if (x < 1)
+ fun_l6_n99(x)
+ else
+ fun_l6_n160(x)
+ end
+end
+
+def fun_l5_n650(x)
+ if (x < 1)
+ fun_l6_n84(x)
+ else
+ fun_l6_n111(x)
+ end
+end
+
+def fun_l5_n651(x)
+ if (x < 1)
+ fun_l6_n635(x)
+ else
+ fun_l6_n507(x)
+ end
+end
+
+def fun_l5_n652(x)
+ if (x < 1)
+ fun_l6_n674(x)
+ else
+ fun_l6_n501(x)
+ end
+end
+
+def fun_l5_n653(x)
+ if (x < 1)
+ fun_l6_n171(x)
+ else
+ fun_l6_n645(x)
+ end
+end
+
+def fun_l5_n654(x)
+ if (x < 1)
+ fun_l6_n327(x)
+ else
+ fun_l6_n152(x)
+ end
+end
+
+def fun_l5_n655(x)
+ if (x < 1)
+ fun_l6_n210(x)
+ else
+ fun_l6_n441(x)
+ end
+end
+
+def fun_l5_n656(x)
+ if (x < 1)
+ fun_l6_n691(x)
+ else
+ fun_l6_n813(x)
+ end
+end
+
+def fun_l5_n657(x)
+ if (x < 1)
+ fun_l6_n671(x)
+ else
+ fun_l6_n683(x)
+ end
+end
+
+def fun_l5_n658(x)
+ if (x < 1)
+ fun_l6_n939(x)
+ else
+ fun_l6_n580(x)
+ end
+end
+
+def fun_l5_n659(x)
+ if (x < 1)
+ fun_l6_n152(x)
+ else
+ fun_l6_n159(x)
+ end
+end
+
+def fun_l5_n660(x)
+ if (x < 1)
+ fun_l6_n50(x)
+ else
+ fun_l6_n911(x)
+ end
+end
+
+def fun_l5_n661(x)
+ if (x < 1)
+ fun_l6_n700(x)
+ else
+ fun_l6_n972(x)
+ end
+end
+
+def fun_l5_n662(x)
+ if (x < 1)
+ fun_l6_n22(x)
+ else
+ fun_l6_n82(x)
+ end
+end
+
+def fun_l5_n663(x)
+ if (x < 1)
+ fun_l6_n51(x)
+ else
+ fun_l6_n827(x)
+ end
+end
+
+def fun_l5_n664(x)
+ if (x < 1)
+ fun_l6_n997(x)
+ else
+ fun_l6_n289(x)
+ end
+end
+
+def fun_l5_n665(x)
+ if (x < 1)
+ fun_l6_n666(x)
+ else
+ fun_l6_n775(x)
+ end
+end
+
+def fun_l5_n666(x)
+ if (x < 1)
+ fun_l6_n373(x)
+ else
+ fun_l6_n175(x)
+ end
+end
+
+def fun_l5_n667(x)
+ if (x < 1)
+ fun_l6_n551(x)
+ else
+ fun_l6_n772(x)
+ end
+end
+
+def fun_l5_n668(x)
+ if (x < 1)
+ fun_l6_n107(x)
+ else
+ fun_l6_n197(x)
+ end
+end
+
+def fun_l5_n669(x)
+ if (x < 1)
+ fun_l6_n244(x)
+ else
+ fun_l6_n968(x)
+ end
+end
+
+def fun_l5_n670(x)
+ if (x < 1)
+ fun_l6_n798(x)
+ else
+ fun_l6_n30(x)
+ end
+end
+
+def fun_l5_n671(x)
+ if (x < 1)
+ fun_l6_n48(x)
+ else
+ fun_l6_n186(x)
+ end
+end
+
+def fun_l5_n672(x)
+ if (x < 1)
+ fun_l6_n373(x)
+ else
+ fun_l6_n937(x)
+ end
+end
+
+def fun_l5_n673(x)
+ if (x < 1)
+ fun_l6_n759(x)
+ else
+ fun_l6_n92(x)
+ end
+end
+
+def fun_l5_n674(x)
+ if (x < 1)
+ fun_l6_n380(x)
+ else
+ fun_l6_n772(x)
+ end
+end
+
+def fun_l5_n675(x)
+ if (x < 1)
+ fun_l6_n916(x)
+ else
+ fun_l6_n329(x)
+ end
+end
+
+def fun_l5_n676(x)
+ if (x < 1)
+ fun_l6_n110(x)
+ else
+ fun_l6_n951(x)
+ end
+end
+
+def fun_l5_n677(x)
+ if (x < 1)
+ fun_l6_n363(x)
+ else
+ fun_l6_n35(x)
+ end
+end
+
+def fun_l5_n678(x)
+ if (x < 1)
+ fun_l6_n484(x)
+ else
+ fun_l6_n492(x)
+ end
+end
+
+def fun_l5_n679(x)
+ if (x < 1)
+ fun_l6_n801(x)
+ else
+ fun_l6_n279(x)
+ end
+end
+
+def fun_l5_n680(x)
+ if (x < 1)
+ fun_l6_n499(x)
+ else
+ fun_l6_n561(x)
+ end
+end
+
+def fun_l5_n681(x)
+ if (x < 1)
+ fun_l6_n800(x)
+ else
+ fun_l6_n890(x)
+ end
+end
+
+def fun_l5_n682(x)
+ if (x < 1)
+ fun_l6_n191(x)
+ else
+ fun_l6_n686(x)
+ end
+end
+
+def fun_l5_n683(x)
+ if (x < 1)
+ fun_l6_n318(x)
+ else
+ fun_l6_n683(x)
+ end
+end
+
+def fun_l5_n684(x)
+ if (x < 1)
+ fun_l6_n500(x)
+ else
+ fun_l6_n914(x)
+ end
+end
+
+def fun_l5_n685(x)
+ if (x < 1)
+ fun_l6_n24(x)
+ else
+ fun_l6_n945(x)
+ end
+end
+
+def fun_l5_n686(x)
+ if (x < 1)
+ fun_l6_n602(x)
+ else
+ fun_l6_n291(x)
+ end
+end
+
+def fun_l5_n687(x)
+ if (x < 1)
+ fun_l6_n999(x)
+ else
+ fun_l6_n86(x)
+ end
+end
+
+def fun_l5_n688(x)
+ if (x < 1)
+ fun_l6_n106(x)
+ else
+ fun_l6_n754(x)
+ end
+end
+
+def fun_l5_n689(x)
+ if (x < 1)
+ fun_l6_n452(x)
+ else
+ fun_l6_n229(x)
+ end
+end
+
+def fun_l5_n690(x)
+ if (x < 1)
+ fun_l6_n672(x)
+ else
+ fun_l6_n587(x)
+ end
+end
+
+def fun_l5_n691(x)
+ if (x < 1)
+ fun_l6_n532(x)
+ else
+ fun_l6_n56(x)
+ end
+end
+
+def fun_l5_n692(x)
+ if (x < 1)
+ fun_l6_n606(x)
+ else
+ fun_l6_n552(x)
+ end
+end
+
+def fun_l5_n693(x)
+ if (x < 1)
+ fun_l6_n742(x)
+ else
+ fun_l6_n862(x)
+ end
+end
+
+def fun_l5_n694(x)
+ if (x < 1)
+ fun_l6_n964(x)
+ else
+ fun_l6_n475(x)
+ end
+end
+
+def fun_l5_n695(x)
+ if (x < 1)
+ fun_l6_n179(x)
+ else
+ fun_l6_n947(x)
+ end
+end
+
+def fun_l5_n696(x)
+ if (x < 1)
+ fun_l6_n563(x)
+ else
+ fun_l6_n329(x)
+ end
+end
+
+def fun_l5_n697(x)
+ if (x < 1)
+ fun_l6_n786(x)
+ else
+ fun_l6_n502(x)
+ end
+end
+
+def fun_l5_n698(x)
+ if (x < 1)
+ fun_l6_n178(x)
+ else
+ fun_l6_n757(x)
+ end
+end
+
+def fun_l5_n699(x)
+ if (x < 1)
+ fun_l6_n248(x)
+ else
+ fun_l6_n288(x)
+ end
+end
+
+def fun_l5_n700(x)
+ if (x < 1)
+ fun_l6_n262(x)
+ else
+ fun_l6_n650(x)
+ end
+end
+
+def fun_l5_n701(x)
+ if (x < 1)
+ fun_l6_n90(x)
+ else
+ fun_l6_n964(x)
+ end
+end
+
+def fun_l5_n702(x)
+ if (x < 1)
+ fun_l6_n864(x)
+ else
+ fun_l6_n743(x)
+ end
+end
+
+def fun_l5_n703(x)
+ if (x < 1)
+ fun_l6_n816(x)
+ else
+ fun_l6_n364(x)
+ end
+end
+
+def fun_l5_n704(x)
+ if (x < 1)
+ fun_l6_n590(x)
+ else
+ fun_l6_n434(x)
+ end
+end
+
+def fun_l5_n705(x)
+ if (x < 1)
+ fun_l6_n875(x)
+ else
+ fun_l6_n539(x)
+ end
+end
+
+def fun_l5_n706(x)
+ if (x < 1)
+ fun_l6_n964(x)
+ else
+ fun_l6_n564(x)
+ end
+end
+
+def fun_l5_n707(x)
+ if (x < 1)
+ fun_l6_n315(x)
+ else
+ fun_l6_n460(x)
+ end
+end
+
+def fun_l5_n708(x)
+ if (x < 1)
+ fun_l6_n139(x)
+ else
+ fun_l6_n210(x)
+ end
+end
+
+def fun_l5_n709(x)
+ if (x < 1)
+ fun_l6_n593(x)
+ else
+ fun_l6_n933(x)
+ end
+end
+
+def fun_l5_n710(x)
+ if (x < 1)
+ fun_l6_n37(x)
+ else
+ fun_l6_n459(x)
+ end
+end
+
+def fun_l5_n711(x)
+ if (x < 1)
+ fun_l6_n768(x)
+ else
+ fun_l6_n256(x)
+ end
+end
+
+def fun_l5_n712(x)
+ if (x < 1)
+ fun_l6_n506(x)
+ else
+ fun_l6_n936(x)
+ end
+end
+
+def fun_l5_n713(x)
+ if (x < 1)
+ fun_l6_n971(x)
+ else
+ fun_l6_n575(x)
+ end
+end
+
+def fun_l5_n714(x)
+ if (x < 1)
+ fun_l6_n498(x)
+ else
+ fun_l6_n932(x)
+ end
+end
+
+def fun_l5_n715(x)
+ if (x < 1)
+ fun_l6_n362(x)
+ else
+ fun_l6_n949(x)
+ end
+end
+
+def fun_l5_n716(x)
+ if (x < 1)
+ fun_l6_n706(x)
+ else
+ fun_l6_n788(x)
+ end
+end
+
+def fun_l5_n717(x)
+ if (x < 1)
+ fun_l6_n405(x)
+ else
+ fun_l6_n803(x)
+ end
+end
+
+def fun_l5_n718(x)
+ if (x < 1)
+ fun_l6_n166(x)
+ else
+ fun_l6_n917(x)
+ end
+end
+
+def fun_l5_n719(x)
+ if (x < 1)
+ fun_l6_n899(x)
+ else
+ fun_l6_n836(x)
+ end
+end
+
+def fun_l5_n720(x)
+ if (x < 1)
+ fun_l6_n805(x)
+ else
+ fun_l6_n159(x)
+ end
+end
+
+def fun_l5_n721(x)
+ if (x < 1)
+ fun_l6_n960(x)
+ else
+ fun_l6_n113(x)
+ end
+end
+
+def fun_l5_n722(x)
+ if (x < 1)
+ fun_l6_n807(x)
+ else
+ fun_l6_n533(x)
+ end
+end
+
+def fun_l5_n723(x)
+ if (x < 1)
+ fun_l6_n480(x)
+ else
+ fun_l6_n907(x)
+ end
+end
+
+def fun_l5_n724(x)
+ if (x < 1)
+ fun_l6_n951(x)
+ else
+ fun_l6_n793(x)
+ end
+end
+
+def fun_l5_n725(x)
+ if (x < 1)
+ fun_l6_n951(x)
+ else
+ fun_l6_n771(x)
+ end
+end
+
+def fun_l5_n726(x)
+ if (x < 1)
+ fun_l6_n435(x)
+ else
+ fun_l6_n336(x)
+ end
+end
+
+def fun_l5_n727(x)
+ if (x < 1)
+ fun_l6_n222(x)
+ else
+ fun_l6_n393(x)
+ end
+end
+
+def fun_l5_n728(x)
+ if (x < 1)
+ fun_l6_n988(x)
+ else
+ fun_l6_n402(x)
+ end
+end
+
+def fun_l5_n729(x)
+ if (x < 1)
+ fun_l6_n9(x)
+ else
+ fun_l6_n46(x)
+ end
+end
+
+def fun_l5_n730(x)
+ if (x < 1)
+ fun_l6_n722(x)
+ else
+ fun_l6_n112(x)
+ end
+end
+
+def fun_l5_n731(x)
+ if (x < 1)
+ fun_l6_n543(x)
+ else
+ fun_l6_n813(x)
+ end
+end
+
+def fun_l5_n732(x)
+ if (x < 1)
+ fun_l6_n337(x)
+ else
+ fun_l6_n245(x)
+ end
+end
+
+def fun_l5_n733(x)
+ if (x < 1)
+ fun_l6_n84(x)
+ else
+ fun_l6_n335(x)
+ end
+end
+
+def fun_l5_n734(x)
+ if (x < 1)
+ fun_l6_n697(x)
+ else
+ fun_l6_n498(x)
+ end
+end
+
+def fun_l5_n735(x)
+ if (x < 1)
+ fun_l6_n2(x)
+ else
+ fun_l6_n895(x)
+ end
+end
+
+def fun_l5_n736(x)
+ if (x < 1)
+ fun_l6_n619(x)
+ else
+ fun_l6_n163(x)
+ end
+end
+
+def fun_l5_n737(x)
+ if (x < 1)
+ fun_l6_n237(x)
+ else
+ fun_l6_n6(x)
+ end
+end
+
+def fun_l5_n738(x)
+ if (x < 1)
+ fun_l6_n259(x)
+ else
+ fun_l6_n95(x)
+ end
+end
+
+def fun_l5_n739(x)
+ if (x < 1)
+ fun_l6_n98(x)
+ else
+ fun_l6_n331(x)
+ end
+end
+
+def fun_l5_n740(x)
+ if (x < 1)
+ fun_l6_n489(x)
+ else
+ fun_l6_n305(x)
+ end
+end
+
+def fun_l5_n741(x)
+ if (x < 1)
+ fun_l6_n493(x)
+ else
+ fun_l6_n525(x)
+ end
+end
+
+def fun_l5_n742(x)
+ if (x < 1)
+ fun_l6_n269(x)
+ else
+ fun_l6_n742(x)
+ end
+end
+
+def fun_l5_n743(x)
+ if (x < 1)
+ fun_l6_n194(x)
+ else
+ fun_l6_n254(x)
+ end
+end
+
+def fun_l5_n744(x)
+ if (x < 1)
+ fun_l6_n247(x)
+ else
+ fun_l6_n909(x)
+ end
+end
+
+def fun_l5_n745(x)
+ if (x < 1)
+ fun_l6_n388(x)
+ else
+ fun_l6_n657(x)
+ end
+end
+
+def fun_l5_n746(x)
+ if (x < 1)
+ fun_l6_n27(x)
+ else
+ fun_l6_n286(x)
+ end
+end
+
+def fun_l5_n747(x)
+ if (x < 1)
+ fun_l6_n659(x)
+ else
+ fun_l6_n895(x)
+ end
+end
+
+def fun_l5_n748(x)
+ if (x < 1)
+ fun_l6_n538(x)
+ else
+ fun_l6_n667(x)
+ end
+end
+
+def fun_l5_n749(x)
+ if (x < 1)
+ fun_l6_n208(x)
+ else
+ fun_l6_n493(x)
+ end
+end
+
+def fun_l5_n750(x)
+ if (x < 1)
+ fun_l6_n326(x)
+ else
+ fun_l6_n570(x)
+ end
+end
+
+def fun_l5_n751(x)
+ if (x < 1)
+ fun_l6_n437(x)
+ else
+ fun_l6_n716(x)
+ end
+end
+
+def fun_l5_n752(x)
+ if (x < 1)
+ fun_l6_n957(x)
+ else
+ fun_l6_n231(x)
+ end
+end
+
+def fun_l5_n753(x)
+ if (x < 1)
+ fun_l6_n846(x)
+ else
+ fun_l6_n900(x)
+ end
+end
+
+def fun_l5_n754(x)
+ if (x < 1)
+ fun_l6_n81(x)
+ else
+ fun_l6_n464(x)
+ end
+end
+
+def fun_l5_n755(x)
+ if (x < 1)
+ fun_l6_n735(x)
+ else
+ fun_l6_n232(x)
+ end
+end
+
+def fun_l5_n756(x)
+ if (x < 1)
+ fun_l6_n577(x)
+ else
+ fun_l6_n804(x)
+ end
+end
+
+def fun_l5_n757(x)
+ if (x < 1)
+ fun_l6_n363(x)
+ else
+ fun_l6_n155(x)
+ end
+end
+
+def fun_l5_n758(x)
+ if (x < 1)
+ fun_l6_n534(x)
+ else
+ fun_l6_n827(x)
+ end
+end
+
+def fun_l5_n759(x)
+ if (x < 1)
+ fun_l6_n711(x)
+ else
+ fun_l6_n53(x)
+ end
+end
+
+def fun_l5_n760(x)
+ if (x < 1)
+ fun_l6_n80(x)
+ else
+ fun_l6_n734(x)
+ end
+end
+
+def fun_l5_n761(x)
+ if (x < 1)
+ fun_l6_n811(x)
+ else
+ fun_l6_n691(x)
+ end
+end
+
+def fun_l5_n762(x)
+ if (x < 1)
+ fun_l6_n847(x)
+ else
+ fun_l6_n570(x)
+ end
+end
+
+def fun_l5_n763(x)
+ if (x < 1)
+ fun_l6_n30(x)
+ else
+ fun_l6_n283(x)
+ end
+end
+
+def fun_l5_n764(x)
+ if (x < 1)
+ fun_l6_n270(x)
+ else
+ fun_l6_n965(x)
+ end
+end
+
+def fun_l5_n765(x)
+ if (x < 1)
+ fun_l6_n936(x)
+ else
+ fun_l6_n772(x)
+ end
+end
+
+def fun_l5_n766(x)
+ if (x < 1)
+ fun_l6_n181(x)
+ else
+ fun_l6_n682(x)
+ end
+end
+
+def fun_l5_n767(x)
+ if (x < 1)
+ fun_l6_n327(x)
+ else
+ fun_l6_n5(x)
+ end
+end
+
+def fun_l5_n768(x)
+ if (x < 1)
+ fun_l6_n296(x)
+ else
+ fun_l6_n940(x)
+ end
+end
+
+def fun_l5_n769(x)
+ if (x < 1)
+ fun_l6_n543(x)
+ else
+ fun_l6_n871(x)
+ end
+end
+
+def fun_l5_n770(x)
+ if (x < 1)
+ fun_l6_n670(x)
+ else
+ fun_l6_n128(x)
+ end
+end
+
+def fun_l5_n771(x)
+ if (x < 1)
+ fun_l6_n184(x)
+ else
+ fun_l6_n794(x)
+ end
+end
+
+def fun_l5_n772(x)
+ if (x < 1)
+ fun_l6_n571(x)
+ else
+ fun_l6_n337(x)
+ end
+end
+
+def fun_l5_n773(x)
+ if (x < 1)
+ fun_l6_n674(x)
+ else
+ fun_l6_n712(x)
+ end
+end
+
+def fun_l5_n774(x)
+ if (x < 1)
+ fun_l6_n572(x)
+ else
+ fun_l6_n944(x)
+ end
+end
+
+def fun_l5_n775(x)
+ if (x < 1)
+ fun_l6_n122(x)
+ else
+ fun_l6_n897(x)
+ end
+end
+
+def fun_l5_n776(x)
+ if (x < 1)
+ fun_l6_n461(x)
+ else
+ fun_l6_n202(x)
+ end
+end
+
+def fun_l5_n777(x)
+ if (x < 1)
+ fun_l6_n99(x)
+ else
+ fun_l6_n256(x)
+ end
+end
+
+def fun_l5_n778(x)
+ if (x < 1)
+ fun_l6_n547(x)
+ else
+ fun_l6_n138(x)
+ end
+end
+
+def fun_l5_n779(x)
+ if (x < 1)
+ fun_l6_n56(x)
+ else
+ fun_l6_n682(x)
+ end
+end
+
+def fun_l5_n780(x)
+ if (x < 1)
+ fun_l6_n10(x)
+ else
+ fun_l6_n238(x)
+ end
+end
+
+def fun_l5_n781(x)
+ if (x < 1)
+ fun_l6_n577(x)
+ else
+ fun_l6_n590(x)
+ end
+end
+
+def fun_l5_n782(x)
+ if (x < 1)
+ fun_l6_n415(x)
+ else
+ fun_l6_n522(x)
+ end
+end
+
+def fun_l5_n783(x)
+ if (x < 1)
+ fun_l6_n255(x)
+ else
+ fun_l6_n182(x)
+ end
+end
+
+def fun_l5_n784(x)
+ if (x < 1)
+ fun_l6_n755(x)
+ else
+ fun_l6_n644(x)
+ end
+end
+
+def fun_l5_n785(x)
+ if (x < 1)
+ fun_l6_n39(x)
+ else
+ fun_l6_n296(x)
+ end
+end
+
+def fun_l5_n786(x)
+ if (x < 1)
+ fun_l6_n17(x)
+ else
+ fun_l6_n811(x)
+ end
+end
+
+def fun_l5_n787(x)
+ if (x < 1)
+ fun_l6_n814(x)
+ else
+ fun_l6_n989(x)
+ end
+end
+
+def fun_l5_n788(x)
+ if (x < 1)
+ fun_l6_n791(x)
+ else
+ fun_l6_n688(x)
+ end
+end
+
+def fun_l5_n789(x)
+ if (x < 1)
+ fun_l6_n415(x)
+ else
+ fun_l6_n218(x)
+ end
+end
+
+def fun_l5_n790(x)
+ if (x < 1)
+ fun_l6_n227(x)
+ else
+ fun_l6_n391(x)
+ end
+end
+
+def fun_l5_n791(x)
+ if (x < 1)
+ fun_l6_n232(x)
+ else
+ fun_l6_n644(x)
+ end
+end
+
+def fun_l5_n792(x)
+ if (x < 1)
+ fun_l6_n325(x)
+ else
+ fun_l6_n740(x)
+ end
+end
+
+def fun_l5_n793(x)
+ if (x < 1)
+ fun_l6_n926(x)
+ else
+ fun_l6_n133(x)
+ end
+end
+
+def fun_l5_n794(x)
+ if (x < 1)
+ fun_l6_n114(x)
+ else
+ fun_l6_n76(x)
+ end
+end
+
+def fun_l5_n795(x)
+ if (x < 1)
+ fun_l6_n332(x)
+ else
+ fun_l6_n198(x)
+ end
+end
+
+def fun_l5_n796(x)
+ if (x < 1)
+ fun_l6_n584(x)
+ else
+ fun_l6_n298(x)
+ end
+end
+
+def fun_l5_n797(x)
+ if (x < 1)
+ fun_l6_n966(x)
+ else
+ fun_l6_n956(x)
+ end
+end
+
+def fun_l5_n798(x)
+ if (x < 1)
+ fun_l6_n604(x)
+ else
+ fun_l6_n311(x)
+ end
+end
+
+def fun_l5_n799(x)
+ if (x < 1)
+ fun_l6_n444(x)
+ else
+ fun_l6_n934(x)
+ end
+end
+
+def fun_l5_n800(x)
+ if (x < 1)
+ fun_l6_n805(x)
+ else
+ fun_l6_n83(x)
+ end
+end
+
+def fun_l5_n801(x)
+ if (x < 1)
+ fun_l6_n996(x)
+ else
+ fun_l6_n282(x)
+ end
+end
+
+def fun_l5_n802(x)
+ if (x < 1)
+ fun_l6_n759(x)
+ else
+ fun_l6_n681(x)
+ end
+end
+
+def fun_l5_n803(x)
+ if (x < 1)
+ fun_l6_n480(x)
+ else
+ fun_l6_n536(x)
+ end
+end
+
+def fun_l5_n804(x)
+ if (x < 1)
+ fun_l6_n536(x)
+ else
+ fun_l6_n64(x)
+ end
+end
+
+def fun_l5_n805(x)
+ if (x < 1)
+ fun_l6_n992(x)
+ else
+ fun_l6_n116(x)
+ end
+end
+
+def fun_l5_n806(x)
+ if (x < 1)
+ fun_l6_n446(x)
+ else
+ fun_l6_n553(x)
+ end
+end
+
+def fun_l5_n807(x)
+ if (x < 1)
+ fun_l6_n822(x)
+ else
+ fun_l6_n80(x)
+ end
+end
+
+def fun_l5_n808(x)
+ if (x < 1)
+ fun_l6_n912(x)
+ else
+ fun_l6_n525(x)
+ end
+end
+
+def fun_l5_n809(x)
+ if (x < 1)
+ fun_l6_n824(x)
+ else
+ fun_l6_n356(x)
+ end
+end
+
+def fun_l5_n810(x)
+ if (x < 1)
+ fun_l6_n144(x)
+ else
+ fun_l6_n193(x)
+ end
+end
+
+def fun_l5_n811(x)
+ if (x < 1)
+ fun_l6_n27(x)
+ else
+ fun_l6_n810(x)
+ end
+end
+
+def fun_l5_n812(x)
+ if (x < 1)
+ fun_l6_n244(x)
+ else
+ fun_l6_n696(x)
+ end
+end
+
+def fun_l5_n813(x)
+ if (x < 1)
+ fun_l6_n408(x)
+ else
+ fun_l6_n46(x)
+ end
+end
+
+def fun_l5_n814(x)
+ if (x < 1)
+ fun_l6_n496(x)
+ else
+ fun_l6_n149(x)
+ end
+end
+
+def fun_l5_n815(x)
+ if (x < 1)
+ fun_l6_n100(x)
+ else
+ fun_l6_n765(x)
+ end
+end
+
+def fun_l5_n816(x)
+ if (x < 1)
+ fun_l6_n731(x)
+ else
+ fun_l6_n953(x)
+ end
+end
+
+def fun_l5_n817(x)
+ if (x < 1)
+ fun_l6_n997(x)
+ else
+ fun_l6_n849(x)
+ end
+end
+
+def fun_l5_n818(x)
+ if (x < 1)
+ fun_l6_n570(x)
+ else
+ fun_l6_n918(x)
+ end
+end
+
+def fun_l5_n819(x)
+ if (x < 1)
+ fun_l6_n473(x)
+ else
+ fun_l6_n955(x)
+ end
+end
+
+def fun_l5_n820(x)
+ if (x < 1)
+ fun_l6_n691(x)
+ else
+ fun_l6_n271(x)
+ end
+end
+
+def fun_l5_n821(x)
+ if (x < 1)
+ fun_l6_n935(x)
+ else
+ fun_l6_n386(x)
+ end
+end
+
+def fun_l5_n822(x)
+ if (x < 1)
+ fun_l6_n210(x)
+ else
+ fun_l6_n871(x)
+ end
+end
+
+def fun_l5_n823(x)
+ if (x < 1)
+ fun_l6_n907(x)
+ else
+ fun_l6_n596(x)
+ end
+end
+
+def fun_l5_n824(x)
+ if (x < 1)
+ fun_l6_n701(x)
+ else
+ fun_l6_n541(x)
+ end
+end
+
+def fun_l5_n825(x)
+ if (x < 1)
+ fun_l6_n477(x)
+ else
+ fun_l6_n207(x)
+ end
+end
+
+def fun_l5_n826(x)
+ if (x < 1)
+ fun_l6_n95(x)
+ else
+ fun_l6_n26(x)
+ end
+end
+
+def fun_l5_n827(x)
+ if (x < 1)
+ fun_l6_n908(x)
+ else
+ fun_l6_n369(x)
+ end
+end
+
+def fun_l5_n828(x)
+ if (x < 1)
+ fun_l6_n213(x)
+ else
+ fun_l6_n607(x)
+ end
+end
+
+def fun_l5_n829(x)
+ if (x < 1)
+ fun_l6_n763(x)
+ else
+ fun_l6_n753(x)
+ end
+end
+
+def fun_l5_n830(x)
+ if (x < 1)
+ fun_l6_n24(x)
+ else
+ fun_l6_n157(x)
+ end
+end
+
+def fun_l5_n831(x)
+ if (x < 1)
+ fun_l6_n262(x)
+ else
+ fun_l6_n826(x)
+ end
+end
+
+def fun_l5_n832(x)
+ if (x < 1)
+ fun_l6_n743(x)
+ else
+ fun_l6_n37(x)
+ end
+end
+
+def fun_l5_n833(x)
+ if (x < 1)
+ fun_l6_n532(x)
+ else
+ fun_l6_n31(x)
+ end
+end
+
+def fun_l5_n834(x)
+ if (x < 1)
+ fun_l6_n309(x)
+ else
+ fun_l6_n454(x)
+ end
+end
+
+def fun_l5_n835(x)
+ if (x < 1)
+ fun_l6_n917(x)
+ else
+ fun_l6_n721(x)
+ end
+end
+
+def fun_l5_n836(x)
+ if (x < 1)
+ fun_l6_n376(x)
+ else
+ fun_l6_n758(x)
+ end
+end
+
+def fun_l5_n837(x)
+ if (x < 1)
+ fun_l6_n558(x)
+ else
+ fun_l6_n474(x)
+ end
+end
+
+def fun_l5_n838(x)
+ if (x < 1)
+ fun_l6_n436(x)
+ else
+ fun_l6_n675(x)
+ end
+end
+
+def fun_l5_n839(x)
+ if (x < 1)
+ fun_l6_n720(x)
+ else
+ fun_l6_n12(x)
+ end
+end
+
+def fun_l5_n840(x)
+ if (x < 1)
+ fun_l6_n957(x)
+ else
+ fun_l6_n200(x)
+ end
+end
+
+def fun_l5_n841(x)
+ if (x < 1)
+ fun_l6_n180(x)
+ else
+ fun_l6_n644(x)
+ end
+end
+
+def fun_l5_n842(x)
+ if (x < 1)
+ fun_l6_n510(x)
+ else
+ fun_l6_n73(x)
+ end
+end
+
+def fun_l5_n843(x)
+ if (x < 1)
+ fun_l6_n812(x)
+ else
+ fun_l6_n954(x)
+ end
+end
+
+def fun_l5_n844(x)
+ if (x < 1)
+ fun_l6_n566(x)
+ else
+ fun_l6_n866(x)
+ end
+end
+
+def fun_l5_n845(x)
+ if (x < 1)
+ fun_l6_n641(x)
+ else
+ fun_l6_n11(x)
+ end
+end
+
+def fun_l5_n846(x)
+ if (x < 1)
+ fun_l6_n607(x)
+ else
+ fun_l6_n884(x)
+ end
+end
+
+def fun_l5_n847(x)
+ if (x < 1)
+ fun_l6_n479(x)
+ else
+ fun_l6_n564(x)
+ end
+end
+
+def fun_l5_n848(x)
+ if (x < 1)
+ fun_l6_n365(x)
+ else
+ fun_l6_n285(x)
+ end
+end
+
+def fun_l5_n849(x)
+ if (x < 1)
+ fun_l6_n296(x)
+ else
+ fun_l6_n708(x)
+ end
+end
+
+def fun_l5_n850(x)
+ if (x < 1)
+ fun_l6_n429(x)
+ else
+ fun_l6_n758(x)
+ end
+end
+
+def fun_l5_n851(x)
+ if (x < 1)
+ fun_l6_n881(x)
+ else
+ fun_l6_n848(x)
+ end
+end
+
+def fun_l5_n852(x)
+ if (x < 1)
+ fun_l6_n257(x)
+ else
+ fun_l6_n51(x)
+ end
+end
+
+def fun_l5_n853(x)
+ if (x < 1)
+ fun_l6_n441(x)
+ else
+ fun_l6_n445(x)
+ end
+end
+
+def fun_l5_n854(x)
+ if (x < 1)
+ fun_l6_n80(x)
+ else
+ fun_l6_n767(x)
+ end
+end
+
+def fun_l5_n855(x)
+ if (x < 1)
+ fun_l6_n196(x)
+ else
+ fun_l6_n41(x)
+ end
+end
+
+def fun_l5_n856(x)
+ if (x < 1)
+ fun_l6_n548(x)
+ else
+ fun_l6_n860(x)
+ end
+end
+
+def fun_l5_n857(x)
+ if (x < 1)
+ fun_l6_n380(x)
+ else
+ fun_l6_n601(x)
+ end
+end
+
+def fun_l5_n858(x)
+ if (x < 1)
+ fun_l6_n272(x)
+ else
+ fun_l6_n376(x)
+ end
+end
+
+def fun_l5_n859(x)
+ if (x < 1)
+ fun_l6_n179(x)
+ else
+ fun_l6_n978(x)
+ end
+end
+
+def fun_l5_n860(x)
+ if (x < 1)
+ fun_l6_n52(x)
+ else
+ fun_l6_n827(x)
+ end
+end
+
+def fun_l5_n861(x)
+ if (x < 1)
+ fun_l6_n611(x)
+ else
+ fun_l6_n929(x)
+ end
+end
+
+def fun_l5_n862(x)
+ if (x < 1)
+ fun_l6_n179(x)
+ else
+ fun_l6_n171(x)
+ end
+end
+
+def fun_l5_n863(x)
+ if (x < 1)
+ fun_l6_n611(x)
+ else
+ fun_l6_n663(x)
+ end
+end
+
+def fun_l5_n864(x)
+ if (x < 1)
+ fun_l6_n539(x)
+ else
+ fun_l6_n356(x)
+ end
+end
+
+def fun_l5_n865(x)
+ if (x < 1)
+ fun_l6_n401(x)
+ else
+ fun_l6_n302(x)
+ end
+end
+
+def fun_l5_n866(x)
+ if (x < 1)
+ fun_l6_n94(x)
+ else
+ fun_l6_n761(x)
+ end
+end
+
+def fun_l5_n867(x)
+ if (x < 1)
+ fun_l6_n818(x)
+ else
+ fun_l6_n500(x)
+ end
+end
+
+def fun_l5_n868(x)
+ if (x < 1)
+ fun_l6_n956(x)
+ else
+ fun_l6_n661(x)
+ end
+end
+
+def fun_l5_n869(x)
+ if (x < 1)
+ fun_l6_n628(x)
+ else
+ fun_l6_n765(x)
+ end
+end
+
+def fun_l5_n870(x)
+ if (x < 1)
+ fun_l6_n654(x)
+ else
+ fun_l6_n181(x)
+ end
+end
+
+def fun_l5_n871(x)
+ if (x < 1)
+ fun_l6_n70(x)
+ else
+ fun_l6_n157(x)
+ end
+end
+
+def fun_l5_n872(x)
+ if (x < 1)
+ fun_l6_n133(x)
+ else
+ fun_l6_n806(x)
+ end
+end
+
+def fun_l5_n873(x)
+ if (x < 1)
+ fun_l6_n100(x)
+ else
+ fun_l6_n479(x)
+ end
+end
+
+def fun_l5_n874(x)
+ if (x < 1)
+ fun_l6_n401(x)
+ else
+ fun_l6_n567(x)
+ end
+end
+
+def fun_l5_n875(x)
+ if (x < 1)
+ fun_l6_n399(x)
+ else
+ fun_l6_n369(x)
+ end
+end
+
+def fun_l5_n876(x)
+ if (x < 1)
+ fun_l6_n412(x)
+ else
+ fun_l6_n763(x)
+ end
+end
+
+def fun_l5_n877(x)
+ if (x < 1)
+ fun_l6_n498(x)
+ else
+ fun_l6_n192(x)
+ end
+end
+
+def fun_l5_n878(x)
+ if (x < 1)
+ fun_l6_n798(x)
+ else
+ fun_l6_n473(x)
+ end
+end
+
+def fun_l5_n879(x)
+ if (x < 1)
+ fun_l6_n166(x)
+ else
+ fun_l6_n301(x)
+ end
+end
+
+def fun_l5_n880(x)
+ if (x < 1)
+ fun_l6_n616(x)
+ else
+ fun_l6_n28(x)
+ end
+end
+
+def fun_l5_n881(x)
+ if (x < 1)
+ fun_l6_n315(x)
+ else
+ fun_l6_n92(x)
+ end
+end
+
+def fun_l5_n882(x)
+ if (x < 1)
+ fun_l6_n548(x)
+ else
+ fun_l6_n41(x)
+ end
+end
+
+def fun_l5_n883(x)
+ if (x < 1)
+ fun_l6_n279(x)
+ else
+ fun_l6_n72(x)
+ end
+end
+
+def fun_l5_n884(x)
+ if (x < 1)
+ fun_l6_n206(x)
+ else
+ fun_l6_n384(x)
+ end
+end
+
+def fun_l5_n885(x)
+ if (x < 1)
+ fun_l6_n191(x)
+ else
+ fun_l6_n84(x)
+ end
+end
+
+def fun_l5_n886(x)
+ if (x < 1)
+ fun_l6_n960(x)
+ else
+ fun_l6_n495(x)
+ end
+end
+
+def fun_l5_n887(x)
+ if (x < 1)
+ fun_l6_n459(x)
+ else
+ fun_l6_n757(x)
+ end
+end
+
+def fun_l5_n888(x)
+ if (x < 1)
+ fun_l6_n634(x)
+ else
+ fun_l6_n463(x)
+ end
+end
+
+def fun_l5_n889(x)
+ if (x < 1)
+ fun_l6_n611(x)
+ else
+ fun_l6_n469(x)
+ end
+end
+
+def fun_l5_n890(x)
+ if (x < 1)
+ fun_l6_n787(x)
+ else
+ fun_l6_n707(x)
+ end
+end
+
+def fun_l5_n891(x)
+ if (x < 1)
+ fun_l6_n201(x)
+ else
+ fun_l6_n223(x)
+ end
+end
+
+def fun_l5_n892(x)
+ if (x < 1)
+ fun_l6_n214(x)
+ else
+ fun_l6_n303(x)
+ end
+end
+
+def fun_l5_n893(x)
+ if (x < 1)
+ fun_l6_n85(x)
+ else
+ fun_l6_n802(x)
+ end
+end
+
+def fun_l5_n894(x)
+ if (x < 1)
+ fun_l6_n816(x)
+ else
+ fun_l6_n325(x)
+ end
+end
+
+def fun_l5_n895(x)
+ if (x < 1)
+ fun_l6_n491(x)
+ else
+ fun_l6_n907(x)
+ end
+end
+
+def fun_l5_n896(x)
+ if (x < 1)
+ fun_l6_n809(x)
+ else
+ fun_l6_n364(x)
+ end
+end
+
+def fun_l5_n897(x)
+ if (x < 1)
+ fun_l6_n739(x)
+ else
+ fun_l6_n192(x)
+ end
+end
+
+def fun_l5_n898(x)
+ if (x < 1)
+ fun_l6_n461(x)
+ else
+ fun_l6_n594(x)
+ end
+end
+
+def fun_l5_n899(x)
+ if (x < 1)
+ fun_l6_n256(x)
+ else
+ fun_l6_n521(x)
+ end
+end
+
+def fun_l5_n900(x)
+ if (x < 1)
+ fun_l6_n6(x)
+ else
+ fun_l6_n127(x)
+ end
+end
+
+def fun_l5_n901(x)
+ if (x < 1)
+ fun_l6_n655(x)
+ else
+ fun_l6_n426(x)
+ end
+end
+
+def fun_l5_n902(x)
+ if (x < 1)
+ fun_l6_n936(x)
+ else
+ fun_l6_n275(x)
+ end
+end
+
+def fun_l5_n903(x)
+ if (x < 1)
+ fun_l6_n738(x)
+ else
+ fun_l6_n654(x)
+ end
+end
+
+def fun_l5_n904(x)
+ if (x < 1)
+ fun_l6_n583(x)
+ else
+ fun_l6_n600(x)
+ end
+end
+
+def fun_l5_n905(x)
+ if (x < 1)
+ fun_l6_n228(x)
+ else
+ fun_l6_n591(x)
+ end
+end
+
+def fun_l5_n906(x)
+ if (x < 1)
+ fun_l6_n292(x)
+ else
+ fun_l6_n55(x)
+ end
+end
+
+def fun_l5_n907(x)
+ if (x < 1)
+ fun_l6_n457(x)
+ else
+ fun_l6_n513(x)
+ end
+end
+
+def fun_l5_n908(x)
+ if (x < 1)
+ fun_l6_n542(x)
+ else
+ fun_l6_n593(x)
+ end
+end
+
+def fun_l5_n909(x)
+ if (x < 1)
+ fun_l6_n478(x)
+ else
+ fun_l6_n782(x)
+ end
+end
+
+def fun_l5_n910(x)
+ if (x < 1)
+ fun_l6_n780(x)
+ else
+ fun_l6_n275(x)
+ end
+end
+
+def fun_l5_n911(x)
+ if (x < 1)
+ fun_l6_n631(x)
+ else
+ fun_l6_n811(x)
+ end
+end
+
+def fun_l5_n912(x)
+ if (x < 1)
+ fun_l6_n17(x)
+ else
+ fun_l6_n837(x)
+ end
+end
+
+def fun_l5_n913(x)
+ if (x < 1)
+ fun_l6_n607(x)
+ else
+ fun_l6_n159(x)
+ end
+end
+
+def fun_l5_n914(x)
+ if (x < 1)
+ fun_l6_n23(x)
+ else
+ fun_l6_n70(x)
+ end
+end
+
+def fun_l5_n915(x)
+ if (x < 1)
+ fun_l6_n778(x)
+ else
+ fun_l6_n643(x)
+ end
+end
+
+def fun_l5_n916(x)
+ if (x < 1)
+ fun_l6_n707(x)
+ else
+ fun_l6_n121(x)
+ end
+end
+
+def fun_l5_n917(x)
+ if (x < 1)
+ fun_l6_n816(x)
+ else
+ fun_l6_n67(x)
+ end
+end
+
+def fun_l5_n918(x)
+ if (x < 1)
+ fun_l6_n963(x)
+ else
+ fun_l6_n520(x)
+ end
+end
+
+def fun_l5_n919(x)
+ if (x < 1)
+ fun_l6_n251(x)
+ else
+ fun_l6_n111(x)
+ end
+end
+
+def fun_l5_n920(x)
+ if (x < 1)
+ fun_l6_n198(x)
+ else
+ fun_l6_n872(x)
+ end
+end
+
+def fun_l5_n921(x)
+ if (x < 1)
+ fun_l6_n364(x)
+ else
+ fun_l6_n369(x)
+ end
+end
+
+def fun_l5_n922(x)
+ if (x < 1)
+ fun_l6_n7(x)
+ else
+ fun_l6_n314(x)
+ end
+end
+
+def fun_l5_n923(x)
+ if (x < 1)
+ fun_l6_n578(x)
+ else
+ fun_l6_n502(x)
+ end
+end
+
+def fun_l5_n924(x)
+ if (x < 1)
+ fun_l6_n450(x)
+ else
+ fun_l6_n680(x)
+ end
+end
+
+def fun_l5_n925(x)
+ if (x < 1)
+ fun_l6_n469(x)
+ else
+ fun_l6_n973(x)
+ end
+end
+
+def fun_l5_n926(x)
+ if (x < 1)
+ fun_l6_n114(x)
+ else
+ fun_l6_n862(x)
+ end
+end
+
+def fun_l5_n927(x)
+ if (x < 1)
+ fun_l6_n786(x)
+ else
+ fun_l6_n861(x)
+ end
+end
+
+def fun_l5_n928(x)
+ if (x < 1)
+ fun_l6_n40(x)
+ else
+ fun_l6_n665(x)
+ end
+end
+
+def fun_l5_n929(x)
+ if (x < 1)
+ fun_l6_n997(x)
+ else
+ fun_l6_n137(x)
+ end
+end
+
+def fun_l5_n930(x)
+ if (x < 1)
+ fun_l6_n547(x)
+ else
+ fun_l6_n547(x)
+ end
+end
+
+def fun_l5_n931(x)
+ if (x < 1)
+ fun_l6_n310(x)
+ else
+ fun_l6_n986(x)
+ end
+end
+
+def fun_l5_n932(x)
+ if (x < 1)
+ fun_l6_n339(x)
+ else
+ fun_l6_n18(x)
+ end
+end
+
+def fun_l5_n933(x)
+ if (x < 1)
+ fun_l6_n825(x)
+ else
+ fun_l6_n418(x)
+ end
+end
+
+def fun_l5_n934(x)
+ if (x < 1)
+ fun_l6_n509(x)
+ else
+ fun_l6_n589(x)
+ end
+end
+
+def fun_l5_n935(x)
+ if (x < 1)
+ fun_l6_n936(x)
+ else
+ fun_l6_n113(x)
+ end
+end
+
+def fun_l5_n936(x)
+ if (x < 1)
+ fun_l6_n530(x)
+ else
+ fun_l6_n841(x)
+ end
+end
+
+def fun_l5_n937(x)
+ if (x < 1)
+ fun_l6_n431(x)
+ else
+ fun_l6_n531(x)
+ end
+end
+
+def fun_l5_n938(x)
+ if (x < 1)
+ fun_l6_n791(x)
+ else
+ fun_l6_n41(x)
+ end
+end
+
+def fun_l5_n939(x)
+ if (x < 1)
+ fun_l6_n873(x)
+ else
+ fun_l6_n336(x)
+ end
+end
+
+def fun_l5_n940(x)
+ if (x < 1)
+ fun_l6_n925(x)
+ else
+ fun_l6_n746(x)
+ end
+end
+
+def fun_l5_n941(x)
+ if (x < 1)
+ fun_l6_n995(x)
+ else
+ fun_l6_n29(x)
+ end
+end
+
+def fun_l5_n942(x)
+ if (x < 1)
+ fun_l6_n984(x)
+ else
+ fun_l6_n455(x)
+ end
+end
+
+def fun_l5_n943(x)
+ if (x < 1)
+ fun_l6_n660(x)
+ else
+ fun_l6_n934(x)
+ end
+end
+
+def fun_l5_n944(x)
+ if (x < 1)
+ fun_l6_n625(x)
+ else
+ fun_l6_n523(x)
+ end
+end
+
+def fun_l5_n945(x)
+ if (x < 1)
+ fun_l6_n407(x)
+ else
+ fun_l6_n766(x)
+ end
+end
+
+def fun_l5_n946(x)
+ if (x < 1)
+ fun_l6_n80(x)
+ else
+ fun_l6_n75(x)
+ end
+end
+
+def fun_l5_n947(x)
+ if (x < 1)
+ fun_l6_n465(x)
+ else
+ fun_l6_n57(x)
+ end
+end
+
+def fun_l5_n948(x)
+ if (x < 1)
+ fun_l6_n750(x)
+ else
+ fun_l6_n278(x)
+ end
+end
+
+def fun_l5_n949(x)
+ if (x < 1)
+ fun_l6_n917(x)
+ else
+ fun_l6_n472(x)
+ end
+end
+
+def fun_l5_n950(x)
+ if (x < 1)
+ fun_l6_n917(x)
+ else
+ fun_l6_n71(x)
+ end
+end
+
+def fun_l5_n951(x)
+ if (x < 1)
+ fun_l6_n420(x)
+ else
+ fun_l6_n132(x)
+ end
+end
+
+def fun_l5_n952(x)
+ if (x < 1)
+ fun_l6_n112(x)
+ else
+ fun_l6_n396(x)
+ end
+end
+
+def fun_l5_n953(x)
+ if (x < 1)
+ fun_l6_n705(x)
+ else
+ fun_l6_n978(x)
+ end
+end
+
+def fun_l5_n954(x)
+ if (x < 1)
+ fun_l6_n761(x)
+ else
+ fun_l6_n136(x)
+ end
+end
+
+def fun_l5_n955(x)
+ if (x < 1)
+ fun_l6_n518(x)
+ else
+ fun_l6_n687(x)
+ end
+end
+
+def fun_l5_n956(x)
+ if (x < 1)
+ fun_l6_n308(x)
+ else
+ fun_l6_n34(x)
+ end
+end
+
+def fun_l5_n957(x)
+ if (x < 1)
+ fun_l6_n904(x)
+ else
+ fun_l6_n129(x)
+ end
+end
+
+def fun_l5_n958(x)
+ if (x < 1)
+ fun_l6_n271(x)
+ else
+ fun_l6_n444(x)
+ end
+end
+
+def fun_l5_n959(x)
+ if (x < 1)
+ fun_l6_n690(x)
+ else
+ fun_l6_n118(x)
+ end
+end
+
+def fun_l5_n960(x)
+ if (x < 1)
+ fun_l6_n509(x)
+ else
+ fun_l6_n957(x)
+ end
+end
+
+def fun_l5_n961(x)
+ if (x < 1)
+ fun_l6_n889(x)
+ else
+ fun_l6_n26(x)
+ end
+end
+
+def fun_l5_n962(x)
+ if (x < 1)
+ fun_l6_n802(x)
+ else
+ fun_l6_n364(x)
+ end
+end
+
+def fun_l5_n963(x)
+ if (x < 1)
+ fun_l6_n368(x)
+ else
+ fun_l6_n580(x)
+ end
+end
+
+def fun_l5_n964(x)
+ if (x < 1)
+ fun_l6_n879(x)
+ else
+ fun_l6_n925(x)
+ end
+end
+
+def fun_l5_n965(x)
+ if (x < 1)
+ fun_l6_n114(x)
+ else
+ fun_l6_n882(x)
+ end
+end
+
+def fun_l5_n966(x)
+ if (x < 1)
+ fun_l6_n9(x)
+ else
+ fun_l6_n5(x)
+ end
+end
+
+def fun_l5_n967(x)
+ if (x < 1)
+ fun_l6_n536(x)
+ else
+ fun_l6_n251(x)
+ end
+end
+
+def fun_l5_n968(x)
+ if (x < 1)
+ fun_l6_n804(x)
+ else
+ fun_l6_n179(x)
+ end
+end
+
+def fun_l5_n969(x)
+ if (x < 1)
+ fun_l6_n469(x)
+ else
+ fun_l6_n235(x)
+ end
+end
+
+def fun_l5_n970(x)
+ if (x < 1)
+ fun_l6_n328(x)
+ else
+ fun_l6_n763(x)
+ end
+end
+
+def fun_l5_n971(x)
+ if (x < 1)
+ fun_l6_n342(x)
+ else
+ fun_l6_n126(x)
+ end
+end
+
+def fun_l5_n972(x)
+ if (x < 1)
+ fun_l6_n901(x)
+ else
+ fun_l6_n674(x)
+ end
+end
+
+def fun_l5_n973(x)
+ if (x < 1)
+ fun_l6_n853(x)
+ else
+ fun_l6_n714(x)
+ end
+end
+
+def fun_l5_n974(x)
+ if (x < 1)
+ fun_l6_n670(x)
+ else
+ fun_l6_n905(x)
+ end
+end
+
+def fun_l5_n975(x)
+ if (x < 1)
+ fun_l6_n873(x)
+ else
+ fun_l6_n193(x)
+ end
+end
+
+def fun_l5_n976(x)
+ if (x < 1)
+ fun_l6_n603(x)
+ else
+ fun_l6_n186(x)
+ end
+end
+
+def fun_l5_n977(x)
+ if (x < 1)
+ fun_l6_n474(x)
+ else
+ fun_l6_n108(x)
+ end
+end
+
+def fun_l5_n978(x)
+ if (x < 1)
+ fun_l6_n347(x)
+ else
+ fun_l6_n872(x)
+ end
+end
+
+def fun_l5_n979(x)
+ if (x < 1)
+ fun_l6_n593(x)
+ else
+ fun_l6_n575(x)
+ end
+end
+
+def fun_l5_n980(x)
+ if (x < 1)
+ fun_l6_n692(x)
+ else
+ fun_l6_n262(x)
+ end
+end
+
+def fun_l5_n981(x)
+ if (x < 1)
+ fun_l6_n226(x)
+ else
+ fun_l6_n600(x)
+ end
+end
+
+def fun_l5_n982(x)
+ if (x < 1)
+ fun_l6_n357(x)
+ else
+ fun_l6_n165(x)
+ end
+end
+
+def fun_l5_n983(x)
+ if (x < 1)
+ fun_l6_n784(x)
+ else
+ fun_l6_n584(x)
+ end
+end
+
+def fun_l5_n984(x)
+ if (x < 1)
+ fun_l6_n339(x)
+ else
+ fun_l6_n754(x)
+ end
+end
+
+def fun_l5_n985(x)
+ if (x < 1)
+ fun_l6_n536(x)
+ else
+ fun_l6_n663(x)
+ end
+end
+
+def fun_l5_n986(x)
+ if (x < 1)
+ fun_l6_n239(x)
+ else
+ fun_l6_n723(x)
+ end
+end
+
+def fun_l5_n987(x)
+ if (x < 1)
+ fun_l6_n928(x)
+ else
+ fun_l6_n403(x)
+ end
+end
+
+def fun_l5_n988(x)
+ if (x < 1)
+ fun_l6_n328(x)
+ else
+ fun_l6_n551(x)
+ end
+end
+
+def fun_l5_n989(x)
+ if (x < 1)
+ fun_l6_n847(x)
+ else
+ fun_l6_n475(x)
+ end
+end
+
+def fun_l5_n990(x)
+ if (x < 1)
+ fun_l6_n405(x)
+ else
+ fun_l6_n39(x)
+ end
+end
+
+def fun_l5_n991(x)
+ if (x < 1)
+ fun_l6_n705(x)
+ else
+ fun_l6_n281(x)
+ end
+end
+
+def fun_l5_n992(x)
+ if (x < 1)
+ fun_l6_n59(x)
+ else
+ fun_l6_n465(x)
+ end
+end
+
+def fun_l5_n993(x)
+ if (x < 1)
+ fun_l6_n828(x)
+ else
+ fun_l6_n705(x)
+ end
+end
+
+def fun_l5_n994(x)
+ if (x < 1)
+ fun_l6_n687(x)
+ else
+ fun_l6_n451(x)
+ end
+end
+
+def fun_l5_n995(x)
+ if (x < 1)
+ fun_l6_n600(x)
+ else
+ fun_l6_n9(x)
+ end
+end
+
+def fun_l5_n996(x)
+ if (x < 1)
+ fun_l6_n205(x)
+ else
+ fun_l6_n242(x)
+ end
+end
+
+def fun_l5_n997(x)
+ if (x < 1)
+ fun_l6_n438(x)
+ else
+ fun_l6_n108(x)
+ end
+end
+
+def fun_l5_n998(x)
+ if (x < 1)
+ fun_l6_n164(x)
+ else
+ fun_l6_n302(x)
+ end
+end
+
+def fun_l5_n999(x)
+ if (x < 1)
+ fun_l6_n533(x)
+ else
+ fun_l6_n685(x)
+ end
+end
+
+def fun_l6_n0(x)
+ if (x < 1)
+ fun_l7_n74(x)
+ else
+ fun_l7_n45(x)
+ end
+end
+
+def fun_l6_n1(x)
+ if (x < 1)
+ fun_l7_n685(x)
+ else
+ fun_l7_n163(x)
+ end
+end
+
+def fun_l6_n2(x)
+ if (x < 1)
+ fun_l7_n325(x)
+ else
+ fun_l7_n365(x)
+ end
+end
+
+def fun_l6_n3(x)
+ if (x < 1)
+ fun_l7_n855(x)
+ else
+ fun_l7_n359(x)
+ end
+end
+
+def fun_l6_n4(x)
+ if (x < 1)
+ fun_l7_n939(x)
+ else
+ fun_l7_n690(x)
+ end
+end
+
+def fun_l6_n5(x)
+ if (x < 1)
+ fun_l7_n689(x)
+ else
+ fun_l7_n681(x)
+ end
+end
+
+def fun_l6_n6(x)
+ if (x < 1)
+ fun_l7_n226(x)
+ else
+ fun_l7_n307(x)
+ end
+end
+
+def fun_l6_n7(x)
+ if (x < 1)
+ fun_l7_n779(x)
+ else
+ fun_l7_n765(x)
+ end
+end
+
+def fun_l6_n8(x)
+ if (x < 1)
+ fun_l7_n85(x)
+ else
+ fun_l7_n967(x)
+ end
+end
+
+def fun_l6_n9(x)
+ if (x < 1)
+ fun_l7_n539(x)
+ else
+ fun_l7_n5(x)
+ end
+end
+
+def fun_l6_n10(x)
+ if (x < 1)
+ fun_l7_n503(x)
+ else
+ fun_l7_n163(x)
+ end
+end
+
+def fun_l6_n11(x)
+ if (x < 1)
+ fun_l7_n24(x)
+ else
+ fun_l7_n374(x)
+ end
+end
+
+def fun_l6_n12(x)
+ if (x < 1)
+ fun_l7_n633(x)
+ else
+ fun_l7_n395(x)
+ end
+end
+
+def fun_l6_n13(x)
+ if (x < 1)
+ fun_l7_n250(x)
+ else
+ fun_l7_n7(x)
+ end
+end
+
+def fun_l6_n14(x)
+ if (x < 1)
+ fun_l7_n22(x)
+ else
+ fun_l7_n560(x)
+ end
+end
+
+def fun_l6_n15(x)
+ if (x < 1)
+ fun_l7_n209(x)
+ else
+ fun_l7_n323(x)
+ end
+end
+
+def fun_l6_n16(x)
+ if (x < 1)
+ fun_l7_n770(x)
+ else
+ fun_l7_n155(x)
+ end
+end
+
+def fun_l6_n17(x)
+ if (x < 1)
+ fun_l7_n976(x)
+ else
+ fun_l7_n712(x)
+ end
+end
+
+def fun_l6_n18(x)
+ if (x < 1)
+ fun_l7_n762(x)
+ else
+ fun_l7_n307(x)
+ end
+end
+
+def fun_l6_n19(x)
+ if (x < 1)
+ fun_l7_n911(x)
+ else
+ fun_l7_n788(x)
+ end
+end
+
+def fun_l6_n20(x)
+ if (x < 1)
+ fun_l7_n40(x)
+ else
+ fun_l7_n269(x)
+ end
+end
+
+def fun_l6_n21(x)
+ if (x < 1)
+ fun_l7_n707(x)
+ else
+ fun_l7_n861(x)
+ end
+end
+
+def fun_l6_n22(x)
+ if (x < 1)
+ fun_l7_n591(x)
+ else
+ fun_l7_n557(x)
+ end
+end
+
+def fun_l6_n23(x)
+ if (x < 1)
+ fun_l7_n890(x)
+ else
+ fun_l7_n142(x)
+ end
+end
+
+def fun_l6_n24(x)
+ if (x < 1)
+ fun_l7_n563(x)
+ else
+ fun_l7_n509(x)
+ end
+end
+
+def fun_l6_n25(x)
+ if (x < 1)
+ fun_l7_n630(x)
+ else
+ fun_l7_n784(x)
+ end
+end
+
+def fun_l6_n26(x)
+ if (x < 1)
+ fun_l7_n30(x)
+ else
+ fun_l7_n826(x)
+ end
+end
+
+def fun_l6_n27(x)
+ if (x < 1)
+ fun_l7_n223(x)
+ else
+ fun_l7_n800(x)
+ end
+end
+
+def fun_l6_n28(x)
+ if (x < 1)
+ fun_l7_n51(x)
+ else
+ fun_l7_n963(x)
+ end
+end
+
+def fun_l6_n29(x)
+ if (x < 1)
+ fun_l7_n603(x)
+ else
+ fun_l7_n988(x)
+ end
+end
+
+def fun_l6_n30(x)
+ if (x < 1)
+ fun_l7_n258(x)
+ else
+ fun_l7_n512(x)
+ end
+end
+
+def fun_l6_n31(x)
+ if (x < 1)
+ fun_l7_n649(x)
+ else
+ fun_l7_n772(x)
+ end
+end
+
+def fun_l6_n32(x)
+ if (x < 1)
+ fun_l7_n999(x)
+ else
+ fun_l7_n592(x)
+ end
+end
+
+def fun_l6_n33(x)
+ if (x < 1)
+ fun_l7_n371(x)
+ else
+ fun_l7_n801(x)
+ end
+end
+
+def fun_l6_n34(x)
+ if (x < 1)
+ fun_l7_n905(x)
+ else
+ fun_l7_n701(x)
+ end
+end
+
+def fun_l6_n35(x)
+ if (x < 1)
+ fun_l7_n142(x)
+ else
+ fun_l7_n933(x)
+ end
+end
+
+def fun_l6_n36(x)
+ if (x < 1)
+ fun_l7_n987(x)
+ else
+ fun_l7_n305(x)
+ end
+end
+
+def fun_l6_n37(x)
+ if (x < 1)
+ fun_l7_n360(x)
+ else
+ fun_l7_n266(x)
+ end
+end
+
+def fun_l6_n38(x)
+ if (x < 1)
+ fun_l7_n799(x)
+ else
+ fun_l7_n938(x)
+ end
+end
+
+def fun_l6_n39(x)
+ if (x < 1)
+ fun_l7_n921(x)
+ else
+ fun_l7_n739(x)
+ end
+end
+
+def fun_l6_n40(x)
+ if (x < 1)
+ fun_l7_n553(x)
+ else
+ fun_l7_n236(x)
+ end
+end
+
+def fun_l6_n41(x)
+ if (x < 1)
+ fun_l7_n592(x)
+ else
+ fun_l7_n335(x)
+ end
+end
+
+def fun_l6_n42(x)
+ if (x < 1)
+ fun_l7_n33(x)
+ else
+ fun_l7_n521(x)
+ end
+end
+
+def fun_l6_n43(x)
+ if (x < 1)
+ fun_l7_n278(x)
+ else
+ fun_l7_n866(x)
+ end
+end
+
+def fun_l6_n44(x)
+ if (x < 1)
+ fun_l7_n808(x)
+ else
+ fun_l7_n394(x)
+ end
+end
+
+def fun_l6_n45(x)
+ if (x < 1)
+ fun_l7_n556(x)
+ else
+ fun_l7_n462(x)
+ end
+end
+
+def fun_l6_n46(x)
+ if (x < 1)
+ fun_l7_n72(x)
+ else
+ fun_l7_n558(x)
+ end
+end
+
+def fun_l6_n47(x)
+ if (x < 1)
+ fun_l7_n583(x)
+ else
+ fun_l7_n472(x)
+ end
+end
+
+def fun_l6_n48(x)
+ if (x < 1)
+ fun_l7_n577(x)
+ else
+ fun_l7_n264(x)
+ end
+end
+
+def fun_l6_n49(x)
+ if (x < 1)
+ fun_l7_n167(x)
+ else
+ fun_l7_n570(x)
+ end
+end
+
+def fun_l6_n50(x)
+ if (x < 1)
+ fun_l7_n707(x)
+ else
+ fun_l7_n127(x)
+ end
+end
+
+def fun_l6_n51(x)
+ if (x < 1)
+ fun_l7_n151(x)
+ else
+ fun_l7_n82(x)
+ end
+end
+
+def fun_l6_n52(x)
+ if (x < 1)
+ fun_l7_n729(x)
+ else
+ fun_l7_n785(x)
+ end
+end
+
+def fun_l6_n53(x)
+ if (x < 1)
+ fun_l7_n236(x)
+ else
+ fun_l7_n84(x)
+ end
+end
+
+def fun_l6_n54(x)
+ if (x < 1)
+ fun_l7_n573(x)
+ else
+ fun_l7_n92(x)
+ end
+end
+
+def fun_l6_n55(x)
+ if (x < 1)
+ fun_l7_n601(x)
+ else
+ fun_l7_n531(x)
+ end
+end
+
+def fun_l6_n56(x)
+ if (x < 1)
+ fun_l7_n623(x)
+ else
+ fun_l7_n522(x)
+ end
+end
+
+def fun_l6_n57(x)
+ if (x < 1)
+ fun_l7_n707(x)
+ else
+ fun_l7_n830(x)
+ end
+end
+
+def fun_l6_n58(x)
+ if (x < 1)
+ fun_l7_n240(x)
+ else
+ fun_l7_n868(x)
+ end
+end
+
+def fun_l6_n59(x)
+ if (x < 1)
+ fun_l7_n233(x)
+ else
+ fun_l7_n595(x)
+ end
+end
+
+def fun_l6_n60(x)
+ if (x < 1)
+ fun_l7_n384(x)
+ else
+ fun_l7_n605(x)
+ end
+end
+
+def fun_l6_n61(x)
+ if (x < 1)
+ fun_l7_n721(x)
+ else
+ fun_l7_n509(x)
+ end
+end
+
+def fun_l6_n62(x)
+ if (x < 1)
+ fun_l7_n741(x)
+ else
+ fun_l7_n934(x)
+ end
+end
+
+def fun_l6_n63(x)
+ if (x < 1)
+ fun_l7_n724(x)
+ else
+ fun_l7_n963(x)
+ end
+end
+
+def fun_l6_n64(x)
+ if (x < 1)
+ fun_l7_n144(x)
+ else
+ fun_l7_n417(x)
+ end
+end
+
+def fun_l6_n65(x)
+ if (x < 1)
+ fun_l7_n618(x)
+ else
+ fun_l7_n19(x)
+ end
+end
+
+def fun_l6_n66(x)
+ if (x < 1)
+ fun_l7_n128(x)
+ else
+ fun_l7_n257(x)
+ end
+end
+
+def fun_l6_n67(x)
+ if (x < 1)
+ fun_l7_n623(x)
+ else
+ fun_l7_n182(x)
+ end
+end
+
+def fun_l6_n68(x)
+ if (x < 1)
+ fun_l7_n256(x)
+ else
+ fun_l7_n692(x)
+ end
+end
+
+def fun_l6_n69(x)
+ if (x < 1)
+ fun_l7_n360(x)
+ else
+ fun_l7_n34(x)
+ end
+end
+
+def fun_l6_n70(x)
+ if (x < 1)
+ fun_l7_n690(x)
+ else
+ fun_l7_n813(x)
+ end
+end
+
+def fun_l6_n71(x)
+ if (x < 1)
+ fun_l7_n533(x)
+ else
+ fun_l7_n94(x)
+ end
+end
+
+def fun_l6_n72(x)
+ if (x < 1)
+ fun_l7_n245(x)
+ else
+ fun_l7_n548(x)
+ end
+end
+
+def fun_l6_n73(x)
+ if (x < 1)
+ fun_l7_n919(x)
+ else
+ fun_l7_n295(x)
+ end
+end
+
+def fun_l6_n74(x)
+ if (x < 1)
+ fun_l7_n925(x)
+ else
+ fun_l7_n965(x)
+ end
+end
+
+def fun_l6_n75(x)
+ if (x < 1)
+ fun_l7_n825(x)
+ else
+ fun_l7_n79(x)
+ end
+end
+
+def fun_l6_n76(x)
+ if (x < 1)
+ fun_l7_n812(x)
+ else
+ fun_l7_n96(x)
+ end
+end
+
+def fun_l6_n77(x)
+ if (x < 1)
+ fun_l7_n688(x)
+ else
+ fun_l7_n424(x)
+ end
+end
+
+def fun_l6_n78(x)
+ if (x < 1)
+ fun_l7_n171(x)
+ else
+ fun_l7_n728(x)
+ end
+end
+
+def fun_l6_n79(x)
+ if (x < 1)
+ fun_l7_n786(x)
+ else
+ fun_l7_n135(x)
+ end
+end
+
+def fun_l6_n80(x)
+ if (x < 1)
+ fun_l7_n622(x)
+ else
+ fun_l7_n3(x)
+ end
+end
+
+def fun_l6_n81(x)
+ if (x < 1)
+ fun_l7_n386(x)
+ else
+ fun_l7_n946(x)
+ end
+end
+
+def fun_l6_n82(x)
+ if (x < 1)
+ fun_l7_n192(x)
+ else
+ fun_l7_n253(x)
+ end
+end
+
+def fun_l6_n83(x)
+ if (x < 1)
+ fun_l7_n534(x)
+ else
+ fun_l7_n4(x)
+ end
+end
+
+def fun_l6_n84(x)
+ if (x < 1)
+ fun_l7_n198(x)
+ else
+ fun_l7_n455(x)
+ end
+end
+
+def fun_l6_n85(x)
+ if (x < 1)
+ fun_l7_n471(x)
+ else
+ fun_l7_n26(x)
+ end
+end
+
+def fun_l6_n86(x)
+ if (x < 1)
+ fun_l7_n147(x)
+ else
+ fun_l7_n893(x)
+ end
+end
+
+def fun_l6_n87(x)
+ if (x < 1)
+ fun_l7_n424(x)
+ else
+ fun_l7_n713(x)
+ end
+end
+
+def fun_l6_n88(x)
+ if (x < 1)
+ fun_l7_n867(x)
+ else
+ fun_l7_n561(x)
+ end
+end
+
+def fun_l6_n89(x)
+ if (x < 1)
+ fun_l7_n64(x)
+ else
+ fun_l7_n662(x)
+ end
+end
+
+def fun_l6_n90(x)
+ if (x < 1)
+ fun_l7_n849(x)
+ else
+ fun_l7_n105(x)
+ end
+end
+
+def fun_l6_n91(x)
+ if (x < 1)
+ fun_l7_n564(x)
+ else
+ fun_l7_n758(x)
+ end
+end
+
+def fun_l6_n92(x)
+ if (x < 1)
+ fun_l7_n433(x)
+ else
+ fun_l7_n713(x)
+ end
+end
+
+def fun_l6_n93(x)
+ if (x < 1)
+ fun_l7_n283(x)
+ else
+ fun_l7_n577(x)
+ end
+end
+
+def fun_l6_n94(x)
+ if (x < 1)
+ fun_l7_n951(x)
+ else
+ fun_l7_n48(x)
+ end
+end
+
+def fun_l6_n95(x)
+ if (x < 1)
+ fun_l7_n966(x)
+ else
+ fun_l7_n789(x)
+ end
+end
+
+def fun_l6_n96(x)
+ if (x < 1)
+ fun_l7_n954(x)
+ else
+ fun_l7_n431(x)
+ end
+end
+
+def fun_l6_n97(x)
+ if (x < 1)
+ fun_l7_n720(x)
+ else
+ fun_l7_n847(x)
+ end
+end
+
+def fun_l6_n98(x)
+ if (x < 1)
+ fun_l7_n517(x)
+ else
+ fun_l7_n378(x)
+ end
+end
+
+def fun_l6_n99(x)
+ if (x < 1)
+ fun_l7_n951(x)
+ else
+ fun_l7_n688(x)
+ end
+end
+
+def fun_l6_n100(x)
+ if (x < 1)
+ fun_l7_n163(x)
+ else
+ fun_l7_n540(x)
+ end
+end
+
+def fun_l6_n101(x)
+ if (x < 1)
+ fun_l7_n423(x)
+ else
+ fun_l7_n10(x)
+ end
+end
+
+def fun_l6_n102(x)
+ if (x < 1)
+ fun_l7_n346(x)
+ else
+ fun_l7_n409(x)
+ end
+end
+
+def fun_l6_n103(x)
+ if (x < 1)
+ fun_l7_n686(x)
+ else
+ fun_l7_n432(x)
+ end
+end
+
+def fun_l6_n104(x)
+ if (x < 1)
+ fun_l7_n144(x)
+ else
+ fun_l7_n510(x)
+ end
+end
+
+def fun_l6_n105(x)
+ if (x < 1)
+ fun_l7_n568(x)
+ else
+ fun_l7_n756(x)
+ end
+end
+
+def fun_l6_n106(x)
+ if (x < 1)
+ fun_l7_n708(x)
+ else
+ fun_l7_n199(x)
+ end
+end
+
+def fun_l6_n107(x)
+ if (x < 1)
+ fun_l7_n823(x)
+ else
+ fun_l7_n969(x)
+ end
+end
+
+def fun_l6_n108(x)
+ if (x < 1)
+ fun_l7_n156(x)
+ else
+ fun_l7_n211(x)
+ end
+end
+
+def fun_l6_n109(x)
+ if (x < 1)
+ fun_l7_n527(x)
+ else
+ fun_l7_n791(x)
+ end
+end
+
+def fun_l6_n110(x)
+ if (x < 1)
+ fun_l7_n392(x)
+ else
+ fun_l7_n314(x)
+ end
+end
+
+def fun_l6_n111(x)
+ if (x < 1)
+ fun_l7_n355(x)
+ else
+ fun_l7_n222(x)
+ end
+end
+
+def fun_l6_n112(x)
+ if (x < 1)
+ fun_l7_n683(x)
+ else
+ fun_l7_n735(x)
+ end
+end
+
+def fun_l6_n113(x)
+ if (x < 1)
+ fun_l7_n38(x)
+ else
+ fun_l7_n874(x)
+ end
+end
+
+def fun_l6_n114(x)
+ if (x < 1)
+ fun_l7_n190(x)
+ else
+ fun_l7_n209(x)
+ end
+end
+
+def fun_l6_n115(x)
+ if (x < 1)
+ fun_l7_n544(x)
+ else
+ fun_l7_n267(x)
+ end
+end
+
+def fun_l6_n116(x)
+ if (x < 1)
+ fun_l7_n701(x)
+ else
+ fun_l7_n101(x)
+ end
+end
+
+def fun_l6_n117(x)
+ if (x < 1)
+ fun_l7_n283(x)
+ else
+ fun_l7_n979(x)
+ end
+end
+
+def fun_l6_n118(x)
+ if (x < 1)
+ fun_l7_n902(x)
+ else
+ fun_l7_n897(x)
+ end
+end
+
+def fun_l6_n119(x)
+ if (x < 1)
+ fun_l7_n115(x)
+ else
+ fun_l7_n660(x)
+ end
+end
+
+def fun_l6_n120(x)
+ if (x < 1)
+ fun_l7_n804(x)
+ else
+ fun_l7_n536(x)
+ end
+end
+
+def fun_l6_n121(x)
+ if (x < 1)
+ fun_l7_n278(x)
+ else
+ fun_l7_n666(x)
+ end
+end
+
+def fun_l6_n122(x)
+ if (x < 1)
+ fun_l7_n254(x)
+ else
+ fun_l7_n572(x)
+ end
+end
+
+def fun_l6_n123(x)
+ if (x < 1)
+ fun_l7_n474(x)
+ else
+ fun_l7_n912(x)
+ end
+end
+
+def fun_l6_n124(x)
+ if (x < 1)
+ fun_l7_n0(x)
+ else
+ fun_l7_n514(x)
+ end
+end
+
+def fun_l6_n125(x)
+ if (x < 1)
+ fun_l7_n916(x)
+ else
+ fun_l7_n633(x)
+ end
+end
+
+def fun_l6_n126(x)
+ if (x < 1)
+ fun_l7_n184(x)
+ else
+ fun_l7_n379(x)
+ end
+end
+
+def fun_l6_n127(x)
+ if (x < 1)
+ fun_l7_n316(x)
+ else
+ fun_l7_n422(x)
+ end
+end
+
+def fun_l6_n128(x)
+ if (x < 1)
+ fun_l7_n402(x)
+ else
+ fun_l7_n237(x)
+ end
+end
+
+def fun_l6_n129(x)
+ if (x < 1)
+ fun_l7_n303(x)
+ else
+ fun_l7_n61(x)
+ end
+end
+
+def fun_l6_n130(x)
+ if (x < 1)
+ fun_l7_n918(x)
+ else
+ fun_l7_n732(x)
+ end
+end
+
+def fun_l6_n131(x)
+ if (x < 1)
+ fun_l7_n74(x)
+ else
+ fun_l7_n472(x)
+ end
+end
+
+def fun_l6_n132(x)
+ if (x < 1)
+ fun_l7_n648(x)
+ else
+ fun_l7_n546(x)
+ end
+end
+
+def fun_l6_n133(x)
+ if (x < 1)
+ fun_l7_n388(x)
+ else
+ fun_l7_n359(x)
+ end
+end
+
+def fun_l6_n134(x)
+ if (x < 1)
+ fun_l7_n594(x)
+ else
+ fun_l7_n607(x)
+ end
+end
+
+def fun_l6_n135(x)
+ if (x < 1)
+ fun_l7_n642(x)
+ else
+ fun_l7_n188(x)
+ end
+end
+
+def fun_l6_n136(x)
+ if (x < 1)
+ fun_l7_n879(x)
+ else
+ fun_l7_n521(x)
+ end
+end
+
+def fun_l6_n137(x)
+ if (x < 1)
+ fun_l7_n362(x)
+ else
+ fun_l7_n564(x)
+ end
+end
+
+def fun_l6_n138(x)
+ if (x < 1)
+ fun_l7_n590(x)
+ else
+ fun_l7_n59(x)
+ end
+end
+
+def fun_l6_n139(x)
+ if (x < 1)
+ fun_l7_n464(x)
+ else
+ fun_l7_n563(x)
+ end
+end
+
+def fun_l6_n140(x)
+ if (x < 1)
+ fun_l7_n710(x)
+ else
+ fun_l7_n890(x)
+ end
+end
+
+def fun_l6_n141(x)
+ if (x < 1)
+ fun_l7_n63(x)
+ else
+ fun_l7_n470(x)
+ end
+end
+
+def fun_l6_n142(x)
+ if (x < 1)
+ fun_l7_n160(x)
+ else
+ fun_l7_n153(x)
+ end
+end
+
+def fun_l6_n143(x)
+ if (x < 1)
+ fun_l7_n908(x)
+ else
+ fun_l7_n286(x)
+ end
+end
+
+def fun_l6_n144(x)
+ if (x < 1)
+ fun_l7_n193(x)
+ else
+ fun_l7_n657(x)
+ end
+end
+
+def fun_l6_n145(x)
+ if (x < 1)
+ fun_l7_n885(x)
+ else
+ fun_l7_n981(x)
+ end
+end
+
+def fun_l6_n146(x)
+ if (x < 1)
+ fun_l7_n479(x)
+ else
+ fun_l7_n188(x)
+ end
+end
+
+def fun_l6_n147(x)
+ if (x < 1)
+ fun_l7_n378(x)
+ else
+ fun_l7_n299(x)
+ end
+end
+
+def fun_l6_n148(x)
+ if (x < 1)
+ fun_l7_n239(x)
+ else
+ fun_l7_n70(x)
+ end
+end
+
+def fun_l6_n149(x)
+ if (x < 1)
+ fun_l7_n864(x)
+ else
+ fun_l7_n131(x)
+ end
+end
+
+def fun_l6_n150(x)
+ if (x < 1)
+ fun_l7_n748(x)
+ else
+ fun_l7_n112(x)
+ end
+end
+
+def fun_l6_n151(x)
+ if (x < 1)
+ fun_l7_n466(x)
+ else
+ fun_l7_n672(x)
+ end
+end
+
+def fun_l6_n152(x)
+ if (x < 1)
+ fun_l7_n242(x)
+ else
+ fun_l7_n8(x)
+ end
+end
+
+def fun_l6_n153(x)
+ if (x < 1)
+ fun_l7_n408(x)
+ else
+ fun_l7_n538(x)
+ end
+end
+
+def fun_l6_n154(x)
+ if (x < 1)
+ fun_l7_n984(x)
+ else
+ fun_l7_n134(x)
+ end
+end
+
+def fun_l6_n155(x)
+ if (x < 1)
+ fun_l7_n384(x)
+ else
+ fun_l7_n62(x)
+ end
+end
+
+def fun_l6_n156(x)
+ if (x < 1)
+ fun_l7_n576(x)
+ else
+ fun_l7_n168(x)
+ end
+end
+
+def fun_l6_n157(x)
+ if (x < 1)
+ fun_l7_n371(x)
+ else
+ fun_l7_n470(x)
+ end
+end
+
+def fun_l6_n158(x)
+ if (x < 1)
+ fun_l7_n30(x)
+ else
+ fun_l7_n11(x)
+ end
+end
+
+def fun_l6_n159(x)
+ if (x < 1)
+ fun_l7_n45(x)
+ else
+ fun_l7_n191(x)
+ end
+end
+
+def fun_l6_n160(x)
+ if (x < 1)
+ fun_l7_n659(x)
+ else
+ fun_l7_n981(x)
+ end
+end
+
+def fun_l6_n161(x)
+ if (x < 1)
+ fun_l7_n586(x)
+ else
+ fun_l7_n617(x)
+ end
+end
+
+def fun_l6_n162(x)
+ if (x < 1)
+ fun_l7_n844(x)
+ else
+ fun_l7_n831(x)
+ end
+end
+
+def fun_l6_n163(x)
+ if (x < 1)
+ fun_l7_n14(x)
+ else
+ fun_l7_n631(x)
+ end
+end
+
+def fun_l6_n164(x)
+ if (x < 1)
+ fun_l7_n388(x)
+ else
+ fun_l7_n837(x)
+ end
+end
+
+def fun_l6_n165(x)
+ if (x < 1)
+ fun_l7_n825(x)
+ else
+ fun_l7_n902(x)
+ end
+end
+
+def fun_l6_n166(x)
+ if (x < 1)
+ fun_l7_n490(x)
+ else
+ fun_l7_n724(x)
+ end
+end
+
+def fun_l6_n167(x)
+ if (x < 1)
+ fun_l7_n612(x)
+ else
+ fun_l7_n792(x)
+ end
+end
+
+def fun_l6_n168(x)
+ if (x < 1)
+ fun_l7_n344(x)
+ else
+ fun_l7_n624(x)
+ end
+end
+
+def fun_l6_n169(x)
+ if (x < 1)
+ fun_l7_n255(x)
+ else
+ fun_l7_n456(x)
+ end
+end
+
+def fun_l6_n170(x)
+ if (x < 1)
+ fun_l7_n893(x)
+ else
+ fun_l7_n358(x)
+ end
+end
+
+def fun_l6_n171(x)
+ if (x < 1)
+ fun_l7_n926(x)
+ else
+ fun_l7_n988(x)
+ end
+end
+
+def fun_l6_n172(x)
+ if (x < 1)
+ fun_l7_n856(x)
+ else
+ fun_l7_n553(x)
+ end
+end
+
+def fun_l6_n173(x)
+ if (x < 1)
+ fun_l7_n694(x)
+ else
+ fun_l7_n918(x)
+ end
+end
+
+def fun_l6_n174(x)
+ if (x < 1)
+ fun_l7_n884(x)
+ else
+ fun_l7_n711(x)
+ end
+end
+
+def fun_l6_n175(x)
+ if (x < 1)
+ fun_l7_n884(x)
+ else
+ fun_l7_n28(x)
+ end
+end
+
+def fun_l6_n176(x)
+ if (x < 1)
+ fun_l7_n378(x)
+ else
+ fun_l7_n14(x)
+ end
+end
+
+def fun_l6_n177(x)
+ if (x < 1)
+ fun_l7_n844(x)
+ else
+ fun_l7_n549(x)
+ end
+end
+
+def fun_l6_n178(x)
+ if (x < 1)
+ fun_l7_n396(x)
+ else
+ fun_l7_n802(x)
+ end
+end
+
+def fun_l6_n179(x)
+ if (x < 1)
+ fun_l7_n407(x)
+ else
+ fun_l7_n612(x)
+ end
+end
+
+def fun_l6_n180(x)
+ if (x < 1)
+ fun_l7_n403(x)
+ else
+ fun_l7_n768(x)
+ end
+end
+
+def fun_l6_n181(x)
+ if (x < 1)
+ fun_l7_n412(x)
+ else
+ fun_l7_n301(x)
+ end
+end
+
+def fun_l6_n182(x)
+ if (x < 1)
+ fun_l7_n479(x)
+ else
+ fun_l7_n923(x)
+ end
+end
+
+def fun_l6_n183(x)
+ if (x < 1)
+ fun_l7_n664(x)
+ else
+ fun_l7_n451(x)
+ end
+end
+
+def fun_l6_n184(x)
+ if (x < 1)
+ fun_l7_n854(x)
+ else
+ fun_l7_n438(x)
+ end
+end
+
+def fun_l6_n185(x)
+ if (x < 1)
+ fun_l7_n994(x)
+ else
+ fun_l7_n726(x)
+ end
+end
+
+def fun_l6_n186(x)
+ if (x < 1)
+ fun_l7_n128(x)
+ else
+ fun_l7_n166(x)
+ end
+end
+
+def fun_l6_n187(x)
+ if (x < 1)
+ fun_l7_n515(x)
+ else
+ fun_l7_n21(x)
+ end
+end
+
+def fun_l6_n188(x)
+ if (x < 1)
+ fun_l7_n487(x)
+ else
+ fun_l7_n631(x)
+ end
+end
+
+def fun_l6_n189(x)
+ if (x < 1)
+ fun_l7_n16(x)
+ else
+ fun_l7_n579(x)
+ end
+end
+
+def fun_l6_n190(x)
+ if (x < 1)
+ fun_l7_n30(x)
+ else
+ fun_l7_n417(x)
+ end
+end
+
+def fun_l6_n191(x)
+ if (x < 1)
+ fun_l7_n737(x)
+ else
+ fun_l7_n436(x)
+ end
+end
+
+def fun_l6_n192(x)
+ if (x < 1)
+ fun_l7_n260(x)
+ else
+ fun_l7_n657(x)
+ end
+end
+
+def fun_l6_n193(x)
+ if (x < 1)
+ fun_l7_n722(x)
+ else
+ fun_l7_n489(x)
+ end
+end
+
+def fun_l6_n194(x)
+ if (x < 1)
+ fun_l7_n53(x)
+ else
+ fun_l7_n624(x)
+ end
+end
+
+def fun_l6_n195(x)
+ if (x < 1)
+ fun_l7_n91(x)
+ else
+ fun_l7_n597(x)
+ end
+end
+
+def fun_l6_n196(x)
+ if (x < 1)
+ fun_l7_n980(x)
+ else
+ fun_l7_n498(x)
+ end
+end
+
+def fun_l6_n197(x)
+ if (x < 1)
+ fun_l7_n918(x)
+ else
+ fun_l7_n328(x)
+ end
+end
+
+def fun_l6_n198(x)
+ if (x < 1)
+ fun_l7_n184(x)
+ else
+ fun_l7_n761(x)
+ end
+end
+
+def fun_l6_n199(x)
+ if (x < 1)
+ fun_l7_n692(x)
+ else
+ fun_l7_n610(x)
+ end
+end
+
+def fun_l6_n200(x)
+ if (x < 1)
+ fun_l7_n597(x)
+ else
+ fun_l7_n135(x)
+ end
+end
+
+def fun_l6_n201(x)
+ if (x < 1)
+ fun_l7_n973(x)
+ else
+ fun_l7_n453(x)
+ end
+end
+
+def fun_l6_n202(x)
+ if (x < 1)
+ fun_l7_n433(x)
+ else
+ fun_l7_n794(x)
+ end
+end
+
+def fun_l6_n203(x)
+ if (x < 1)
+ fun_l7_n294(x)
+ else
+ fun_l7_n271(x)
+ end
+end
+
+def fun_l6_n204(x)
+ if (x < 1)
+ fun_l7_n783(x)
+ else
+ fun_l7_n20(x)
+ end
+end
+
+def fun_l6_n205(x)
+ if (x < 1)
+ fun_l7_n941(x)
+ else
+ fun_l7_n517(x)
+ end
+end
+
+def fun_l6_n206(x)
+ if (x < 1)
+ fun_l7_n306(x)
+ else
+ fun_l7_n735(x)
+ end
+end
+
+def fun_l6_n207(x)
+ if (x < 1)
+ fun_l7_n63(x)
+ else
+ fun_l7_n313(x)
+ end
+end
+
+def fun_l6_n208(x)
+ if (x < 1)
+ fun_l7_n766(x)
+ else
+ fun_l7_n868(x)
+ end
+end
+
+def fun_l6_n209(x)
+ if (x < 1)
+ fun_l7_n780(x)
+ else
+ fun_l7_n422(x)
+ end
+end
+
+def fun_l6_n210(x)
+ if (x < 1)
+ fun_l7_n279(x)
+ else
+ fun_l7_n695(x)
+ end
+end
+
+def fun_l6_n211(x)
+ if (x < 1)
+ fun_l7_n981(x)
+ else
+ fun_l7_n946(x)
+ end
+end
+
+def fun_l6_n212(x)
+ if (x < 1)
+ fun_l7_n885(x)
+ else
+ fun_l7_n752(x)
+ end
+end
+
+def fun_l6_n213(x)
+ if (x < 1)
+ fun_l7_n238(x)
+ else
+ fun_l7_n322(x)
+ end
+end
+
+def fun_l6_n214(x)
+ if (x < 1)
+ fun_l7_n832(x)
+ else
+ fun_l7_n714(x)
+ end
+end
+
+def fun_l6_n215(x)
+ if (x < 1)
+ fun_l7_n369(x)
+ else
+ fun_l7_n793(x)
+ end
+end
+
+def fun_l6_n216(x)
+ if (x < 1)
+ fun_l7_n897(x)
+ else
+ fun_l7_n22(x)
+ end
+end
+
+def fun_l6_n217(x)
+ if (x < 1)
+ fun_l7_n94(x)
+ else
+ fun_l7_n93(x)
+ end
+end
+
+def fun_l6_n218(x)
+ if (x < 1)
+ fun_l7_n638(x)
+ else
+ fun_l7_n267(x)
+ end
+end
+
+def fun_l6_n219(x)
+ if (x < 1)
+ fun_l7_n254(x)
+ else
+ fun_l7_n162(x)
+ end
+end
+
+def fun_l6_n220(x)
+ if (x < 1)
+ fun_l7_n969(x)
+ else
+ fun_l7_n371(x)
+ end
+end
+
+def fun_l6_n221(x)
+ if (x < 1)
+ fun_l7_n692(x)
+ else
+ fun_l7_n421(x)
+ end
+end
+
+def fun_l6_n222(x)
+ if (x < 1)
+ fun_l7_n312(x)
+ else
+ fun_l7_n475(x)
+ end
+end
+
+def fun_l6_n223(x)
+ if (x < 1)
+ fun_l7_n566(x)
+ else
+ fun_l7_n497(x)
+ end
+end
+
+def fun_l6_n224(x)
+ if (x < 1)
+ fun_l7_n560(x)
+ else
+ fun_l7_n60(x)
+ end
+end
+
+def fun_l6_n225(x)
+ if (x < 1)
+ fun_l7_n484(x)
+ else
+ fun_l7_n602(x)
+ end
+end
+
+def fun_l6_n226(x)
+ if (x < 1)
+ fun_l7_n399(x)
+ else
+ fun_l7_n614(x)
+ end
+end
+
+def fun_l6_n227(x)
+ if (x < 1)
+ fun_l7_n344(x)
+ else
+ fun_l7_n701(x)
+ end
+end
+
+def fun_l6_n228(x)
+ if (x < 1)
+ fun_l7_n840(x)
+ else
+ fun_l7_n211(x)
+ end
+end
+
+def fun_l6_n229(x)
+ if (x < 1)
+ fun_l7_n423(x)
+ else
+ fun_l7_n51(x)
+ end
+end
+
+def fun_l6_n230(x)
+ if (x < 1)
+ fun_l7_n978(x)
+ else
+ fun_l7_n334(x)
+ end
+end
+
+def fun_l6_n231(x)
+ if (x < 1)
+ fun_l7_n136(x)
+ else
+ fun_l7_n296(x)
+ end
+end
+
+def fun_l6_n232(x)
+ if (x < 1)
+ fun_l7_n24(x)
+ else
+ fun_l7_n282(x)
+ end
+end
+
+def fun_l6_n233(x)
+ if (x < 1)
+ fun_l7_n803(x)
+ else
+ fun_l7_n623(x)
+ end
+end
+
+def fun_l6_n234(x)
+ if (x < 1)
+ fun_l7_n720(x)
+ else
+ fun_l7_n492(x)
+ end
+end
+
+def fun_l6_n235(x)
+ if (x < 1)
+ fun_l7_n627(x)
+ else
+ fun_l7_n260(x)
+ end
+end
+
+def fun_l6_n236(x)
+ if (x < 1)
+ fun_l7_n460(x)
+ else
+ fun_l7_n693(x)
+ end
+end
+
+def fun_l6_n237(x)
+ if (x < 1)
+ fun_l7_n635(x)
+ else
+ fun_l7_n745(x)
+ end
+end
+
+def fun_l6_n238(x)
+ if (x < 1)
+ fun_l7_n76(x)
+ else
+ fun_l7_n283(x)
+ end
+end
+
+def fun_l6_n239(x)
+ if (x < 1)
+ fun_l7_n183(x)
+ else
+ fun_l7_n515(x)
+ end
+end
+
+def fun_l6_n240(x)
+ if (x < 1)
+ fun_l7_n266(x)
+ else
+ fun_l7_n34(x)
+ end
+end
+
+def fun_l6_n241(x)
+ if (x < 1)
+ fun_l7_n480(x)
+ else
+ fun_l7_n868(x)
+ end
+end
+
+def fun_l6_n242(x)
+ if (x < 1)
+ fun_l7_n998(x)
+ else
+ fun_l7_n669(x)
+ end
+end
+
+def fun_l6_n243(x)
+ if (x < 1)
+ fun_l7_n414(x)
+ else
+ fun_l7_n161(x)
+ end
+end
+
+def fun_l6_n244(x)
+ if (x < 1)
+ fun_l7_n104(x)
+ else
+ fun_l7_n659(x)
+ end
+end
+
+def fun_l6_n245(x)
+ if (x < 1)
+ fun_l7_n881(x)
+ else
+ fun_l7_n229(x)
+ end
+end
+
+def fun_l6_n246(x)
+ if (x < 1)
+ fun_l7_n328(x)
+ else
+ fun_l7_n935(x)
+ end
+end
+
+def fun_l6_n247(x)
+ if (x < 1)
+ fun_l7_n433(x)
+ else
+ fun_l7_n565(x)
+ end
+end
+
+def fun_l6_n248(x)
+ if (x < 1)
+ fun_l7_n161(x)
+ else
+ fun_l7_n760(x)
+ end
+end
+
+def fun_l6_n249(x)
+ if (x < 1)
+ fun_l7_n115(x)
+ else
+ fun_l7_n594(x)
+ end
+end
+
+def fun_l6_n250(x)
+ if (x < 1)
+ fun_l7_n350(x)
+ else
+ fun_l7_n310(x)
+ end
+end
+
+def fun_l6_n251(x)
+ if (x < 1)
+ fun_l7_n920(x)
+ else
+ fun_l7_n51(x)
+ end
+end
+
+def fun_l6_n252(x)
+ if (x < 1)
+ fun_l7_n132(x)
+ else
+ fun_l7_n492(x)
+ end
+end
+
+def fun_l6_n253(x)
+ if (x < 1)
+ fun_l7_n618(x)
+ else
+ fun_l7_n325(x)
+ end
+end
+
+def fun_l6_n254(x)
+ if (x < 1)
+ fun_l7_n682(x)
+ else
+ fun_l7_n840(x)
+ end
+end
+
+def fun_l6_n255(x)
+ if (x < 1)
+ fun_l7_n462(x)
+ else
+ fun_l7_n780(x)
+ end
+end
+
+def fun_l6_n256(x)
+ if (x < 1)
+ fun_l7_n712(x)
+ else
+ fun_l7_n995(x)
+ end
+end
+
+def fun_l6_n257(x)
+ if (x < 1)
+ fun_l7_n111(x)
+ else
+ fun_l7_n121(x)
+ end
+end
+
+def fun_l6_n258(x)
+ if (x < 1)
+ fun_l7_n255(x)
+ else
+ fun_l7_n384(x)
+ end
+end
+
+def fun_l6_n259(x)
+ if (x < 1)
+ fun_l7_n610(x)
+ else
+ fun_l7_n555(x)
+ end
+end
+
+def fun_l6_n260(x)
+ if (x < 1)
+ fun_l7_n778(x)
+ else
+ fun_l7_n454(x)
+ end
+end
+
+def fun_l6_n261(x)
+ if (x < 1)
+ fun_l7_n376(x)
+ else
+ fun_l7_n892(x)
+ end
+end
+
+def fun_l6_n262(x)
+ if (x < 1)
+ fun_l7_n454(x)
+ else
+ fun_l7_n468(x)
+ end
+end
+
+def fun_l6_n263(x)
+ if (x < 1)
+ fun_l7_n708(x)
+ else
+ fun_l7_n368(x)
+ end
+end
+
+def fun_l6_n264(x)
+ if (x < 1)
+ fun_l7_n517(x)
+ else
+ fun_l7_n299(x)
+ end
+end
+
+def fun_l6_n265(x)
+ if (x < 1)
+ fun_l7_n987(x)
+ else
+ fun_l7_n318(x)
+ end
+end
+
+def fun_l6_n266(x)
+ if (x < 1)
+ fun_l7_n372(x)
+ else
+ fun_l7_n560(x)
+ end
+end
+
+def fun_l6_n267(x)
+ if (x < 1)
+ fun_l7_n493(x)
+ else
+ fun_l7_n288(x)
+ end
+end
+
+def fun_l6_n268(x)
+ if (x < 1)
+ fun_l7_n278(x)
+ else
+ fun_l7_n10(x)
+ end
+end
+
+def fun_l6_n269(x)
+ if (x < 1)
+ fun_l7_n417(x)
+ else
+ fun_l7_n703(x)
+ end
+end
+
+def fun_l6_n270(x)
+ if (x < 1)
+ fun_l7_n410(x)
+ else
+ fun_l7_n91(x)
+ end
+end
+
+def fun_l6_n271(x)
+ if (x < 1)
+ fun_l7_n281(x)
+ else
+ fun_l7_n447(x)
+ end
+end
+
+def fun_l6_n272(x)
+ if (x < 1)
+ fun_l7_n263(x)
+ else
+ fun_l7_n374(x)
+ end
+end
+
+def fun_l6_n273(x)
+ if (x < 1)
+ fun_l7_n622(x)
+ else
+ fun_l7_n310(x)
+ end
+end
+
+def fun_l6_n274(x)
+ if (x < 1)
+ fun_l7_n176(x)
+ else
+ fun_l7_n227(x)
+ end
+end
+
+def fun_l6_n275(x)
+ if (x < 1)
+ fun_l7_n848(x)
+ else
+ fun_l7_n416(x)
+ end
+end
+
+def fun_l6_n276(x)
+ if (x < 1)
+ fun_l7_n998(x)
+ else
+ fun_l7_n969(x)
+ end
+end
+
+def fun_l6_n277(x)
+ if (x < 1)
+ fun_l7_n356(x)
+ else
+ fun_l7_n722(x)
+ end
+end
+
+def fun_l6_n278(x)
+ if (x < 1)
+ fun_l7_n888(x)
+ else
+ fun_l7_n156(x)
+ end
+end
+
+def fun_l6_n279(x)
+ if (x < 1)
+ fun_l7_n779(x)
+ else
+ fun_l7_n123(x)
+ end
+end
+
+def fun_l6_n280(x)
+ if (x < 1)
+ fun_l7_n393(x)
+ else
+ fun_l7_n765(x)
+ end
+end
+
+def fun_l6_n281(x)
+ if (x < 1)
+ fun_l7_n257(x)
+ else
+ fun_l7_n277(x)
+ end
+end
+
+def fun_l6_n282(x)
+ if (x < 1)
+ fun_l7_n780(x)
+ else
+ fun_l7_n643(x)
+ end
+end
+
+def fun_l6_n283(x)
+ if (x < 1)
+ fun_l7_n63(x)
+ else
+ fun_l7_n449(x)
+ end
+end
+
+def fun_l6_n284(x)
+ if (x < 1)
+ fun_l7_n200(x)
+ else
+ fun_l7_n806(x)
+ end
+end
+
+def fun_l6_n285(x)
+ if (x < 1)
+ fun_l7_n575(x)
+ else
+ fun_l7_n409(x)
+ end
+end
+
+def fun_l6_n286(x)
+ if (x < 1)
+ fun_l7_n377(x)
+ else
+ fun_l7_n456(x)
+ end
+end
+
+def fun_l6_n287(x)
+ if (x < 1)
+ fun_l7_n519(x)
+ else
+ fun_l7_n473(x)
+ end
+end
+
+def fun_l6_n288(x)
+ if (x < 1)
+ fun_l7_n525(x)
+ else
+ fun_l7_n45(x)
+ end
+end
+
+def fun_l6_n289(x)
+ if (x < 1)
+ fun_l7_n678(x)
+ else
+ fun_l7_n910(x)
+ end
+end
+
+def fun_l6_n290(x)
+ if (x < 1)
+ fun_l7_n628(x)
+ else
+ fun_l7_n939(x)
+ end
+end
+
+def fun_l6_n291(x)
+ if (x < 1)
+ fun_l7_n967(x)
+ else
+ fun_l7_n927(x)
+ end
+end
+
+def fun_l6_n292(x)
+ if (x < 1)
+ fun_l7_n634(x)
+ else
+ fun_l7_n184(x)
+ end
+end
+
+def fun_l6_n293(x)
+ if (x < 1)
+ fun_l7_n857(x)
+ else
+ fun_l7_n625(x)
+ end
+end
+
+def fun_l6_n294(x)
+ if (x < 1)
+ fun_l7_n105(x)
+ else
+ fun_l7_n46(x)
+ end
+end
+
+def fun_l6_n295(x)
+ if (x < 1)
+ fun_l7_n642(x)
+ else
+ fun_l7_n566(x)
+ end
+end
+
+def fun_l6_n296(x)
+ if (x < 1)
+ fun_l7_n173(x)
+ else
+ fun_l7_n619(x)
+ end
+end
+
+def fun_l6_n297(x)
+ if (x < 1)
+ fun_l7_n257(x)
+ else
+ fun_l7_n485(x)
+ end
+end
+
+def fun_l6_n298(x)
+ if (x < 1)
+ fun_l7_n447(x)
+ else
+ fun_l7_n808(x)
+ end
+end
+
+def fun_l6_n299(x)
+ if (x < 1)
+ fun_l7_n838(x)
+ else
+ fun_l7_n856(x)
+ end
+end
+
+def fun_l6_n300(x)
+ if (x < 1)
+ fun_l7_n893(x)
+ else
+ fun_l7_n99(x)
+ end
+end
+
+def fun_l6_n301(x)
+ if (x < 1)
+ fun_l7_n180(x)
+ else
+ fun_l7_n126(x)
+ end
+end
+
+def fun_l6_n302(x)
+ if (x < 1)
+ fun_l7_n62(x)
+ else
+ fun_l7_n266(x)
+ end
+end
+
+def fun_l6_n303(x)
+ if (x < 1)
+ fun_l7_n709(x)
+ else
+ fun_l7_n196(x)
+ end
+end
+
+def fun_l6_n304(x)
+ if (x < 1)
+ fun_l7_n408(x)
+ else
+ fun_l7_n730(x)
+ end
+end
+
+def fun_l6_n305(x)
+ if (x < 1)
+ fun_l7_n736(x)
+ else
+ fun_l7_n673(x)
+ end
+end
+
+def fun_l6_n306(x)
+ if (x < 1)
+ fun_l7_n734(x)
+ else
+ fun_l7_n519(x)
+ end
+end
+
+def fun_l6_n307(x)
+ if (x < 1)
+ fun_l7_n629(x)
+ else
+ fun_l7_n670(x)
+ end
+end
+
+def fun_l6_n308(x)
+ if (x < 1)
+ fun_l7_n839(x)
+ else
+ fun_l7_n191(x)
+ end
+end
+
+def fun_l6_n309(x)
+ if (x < 1)
+ fun_l7_n123(x)
+ else
+ fun_l7_n553(x)
+ end
+end
+
+def fun_l6_n310(x)
+ if (x < 1)
+ fun_l7_n812(x)
+ else
+ fun_l7_n815(x)
+ end
+end
+
+def fun_l6_n311(x)
+ if (x < 1)
+ fun_l7_n860(x)
+ else
+ fun_l7_n519(x)
+ end
+end
+
+def fun_l6_n312(x)
+ if (x < 1)
+ fun_l7_n181(x)
+ else
+ fun_l7_n674(x)
+ end
+end
+
+def fun_l6_n313(x)
+ if (x < 1)
+ fun_l7_n654(x)
+ else
+ fun_l7_n500(x)
+ end
+end
+
+def fun_l6_n314(x)
+ if (x < 1)
+ fun_l7_n690(x)
+ else
+ fun_l7_n136(x)
+ end
+end
+
+def fun_l6_n315(x)
+ if (x < 1)
+ fun_l7_n944(x)
+ else
+ fun_l7_n956(x)
+ end
+end
+
+def fun_l6_n316(x)
+ if (x < 1)
+ fun_l7_n471(x)
+ else
+ fun_l7_n245(x)
+ end
+end
+
+def fun_l6_n317(x)
+ if (x < 1)
+ fun_l7_n520(x)
+ else
+ fun_l7_n919(x)
+ end
+end
+
+def fun_l6_n318(x)
+ if (x < 1)
+ fun_l7_n843(x)
+ else
+ fun_l7_n793(x)
+ end
+end
+
+def fun_l6_n319(x)
+ if (x < 1)
+ fun_l7_n765(x)
+ else
+ fun_l7_n363(x)
+ end
+end
+
+def fun_l6_n320(x)
+ if (x < 1)
+ fun_l7_n483(x)
+ else
+ fun_l7_n439(x)
+ end
+end
+
+def fun_l6_n321(x)
+ if (x < 1)
+ fun_l7_n232(x)
+ else
+ fun_l7_n921(x)
+ end
+end
+
+def fun_l6_n322(x)
+ if (x < 1)
+ fun_l7_n398(x)
+ else
+ fun_l7_n862(x)
+ end
+end
+
+def fun_l6_n323(x)
+ if (x < 1)
+ fun_l7_n550(x)
+ else
+ fun_l7_n84(x)
+ end
+end
+
+def fun_l6_n324(x)
+ if (x < 1)
+ fun_l7_n788(x)
+ else
+ fun_l7_n512(x)
+ end
+end
+
+def fun_l6_n325(x)
+ if (x < 1)
+ fun_l7_n512(x)
+ else
+ fun_l7_n303(x)
+ end
+end
+
+def fun_l6_n326(x)
+ if (x < 1)
+ fun_l7_n86(x)
+ else
+ fun_l7_n555(x)
+ end
+end
+
+def fun_l6_n327(x)
+ if (x < 1)
+ fun_l7_n857(x)
+ else
+ fun_l7_n751(x)
+ end
+end
+
+def fun_l6_n328(x)
+ if (x < 1)
+ fun_l7_n341(x)
+ else
+ fun_l7_n208(x)
+ end
+end
+
+def fun_l6_n329(x)
+ if (x < 1)
+ fun_l7_n707(x)
+ else
+ fun_l7_n371(x)
+ end
+end
+
+def fun_l6_n330(x)
+ if (x < 1)
+ fun_l7_n217(x)
+ else
+ fun_l7_n604(x)
+ end
+end
+
+def fun_l6_n331(x)
+ if (x < 1)
+ fun_l7_n607(x)
+ else
+ fun_l7_n471(x)
+ end
+end
+
+def fun_l6_n332(x)
+ if (x < 1)
+ fun_l7_n818(x)
+ else
+ fun_l7_n787(x)
+ end
+end
+
+def fun_l6_n333(x)
+ if (x < 1)
+ fun_l7_n28(x)
+ else
+ fun_l7_n220(x)
+ end
+end
+
+def fun_l6_n334(x)
+ if (x < 1)
+ fun_l7_n666(x)
+ else
+ fun_l7_n995(x)
+ end
+end
+
+def fun_l6_n335(x)
+ if (x < 1)
+ fun_l7_n3(x)
+ else
+ fun_l7_n970(x)
+ end
+end
+
+def fun_l6_n336(x)
+ if (x < 1)
+ fun_l7_n977(x)
+ else
+ fun_l7_n77(x)
+ end
+end
+
+def fun_l6_n337(x)
+ if (x < 1)
+ fun_l7_n54(x)
+ else
+ fun_l7_n814(x)
+ end
+end
+
+def fun_l6_n338(x)
+ if (x < 1)
+ fun_l7_n129(x)
+ else
+ fun_l7_n624(x)
+ end
+end
+
+def fun_l6_n339(x)
+ if (x < 1)
+ fun_l7_n866(x)
+ else
+ fun_l7_n821(x)
+ end
+end
+
+def fun_l6_n340(x)
+ if (x < 1)
+ fun_l7_n912(x)
+ else
+ fun_l7_n24(x)
+ end
+end
+
+def fun_l6_n341(x)
+ if (x < 1)
+ fun_l7_n684(x)
+ else
+ fun_l7_n610(x)
+ end
+end
+
+def fun_l6_n342(x)
+ if (x < 1)
+ fun_l7_n816(x)
+ else
+ fun_l7_n826(x)
+ end
+end
+
+def fun_l6_n343(x)
+ if (x < 1)
+ fun_l7_n479(x)
+ else
+ fun_l7_n444(x)
+ end
+end
+
+def fun_l6_n344(x)
+ if (x < 1)
+ fun_l7_n51(x)
+ else
+ fun_l7_n731(x)
+ end
+end
+
+def fun_l6_n345(x)
+ if (x < 1)
+ fun_l7_n690(x)
+ else
+ fun_l7_n631(x)
+ end
+end
+
+def fun_l6_n346(x)
+ if (x < 1)
+ fun_l7_n254(x)
+ else
+ fun_l7_n353(x)
+ end
+end
+
+def fun_l6_n347(x)
+ if (x < 1)
+ fun_l7_n905(x)
+ else
+ fun_l7_n422(x)
+ end
+end
+
+def fun_l6_n348(x)
+ if (x < 1)
+ fun_l7_n249(x)
+ else
+ fun_l7_n200(x)
+ end
+end
+
+def fun_l6_n349(x)
+ if (x < 1)
+ fun_l7_n11(x)
+ else
+ fun_l7_n550(x)
+ end
+end
+
+def fun_l6_n350(x)
+ if (x < 1)
+ fun_l7_n818(x)
+ else
+ fun_l7_n444(x)
+ end
+end
+
+def fun_l6_n351(x)
+ if (x < 1)
+ fun_l7_n422(x)
+ else
+ fun_l7_n242(x)
+ end
+end
+
+def fun_l6_n352(x)
+ if (x < 1)
+ fun_l7_n653(x)
+ else
+ fun_l7_n912(x)
+ end
+end
+
+def fun_l6_n353(x)
+ if (x < 1)
+ fun_l7_n605(x)
+ else
+ fun_l7_n129(x)
+ end
+end
+
+def fun_l6_n354(x)
+ if (x < 1)
+ fun_l7_n622(x)
+ else
+ fun_l7_n172(x)
+ end
+end
+
+def fun_l6_n355(x)
+ if (x < 1)
+ fun_l7_n568(x)
+ else
+ fun_l7_n26(x)
+ end
+end
+
+def fun_l6_n356(x)
+ if (x < 1)
+ fun_l7_n777(x)
+ else
+ fun_l7_n818(x)
+ end
+end
+
+def fun_l6_n357(x)
+ if (x < 1)
+ fun_l7_n807(x)
+ else
+ fun_l7_n642(x)
+ end
+end
+
+def fun_l6_n358(x)
+ if (x < 1)
+ fun_l7_n745(x)
+ else
+ fun_l7_n866(x)
+ end
+end
+
+def fun_l6_n359(x)
+ if (x < 1)
+ fun_l7_n603(x)
+ else
+ fun_l7_n42(x)
+ end
+end
+
+def fun_l6_n360(x)
+ if (x < 1)
+ fun_l7_n818(x)
+ else
+ fun_l7_n203(x)
+ end
+end
+
+def fun_l6_n361(x)
+ if (x < 1)
+ fun_l7_n451(x)
+ else
+ fun_l7_n719(x)
+ end
+end
+
+def fun_l6_n362(x)
+ if (x < 1)
+ fun_l7_n31(x)
+ else
+ fun_l7_n148(x)
+ end
+end
+
+def fun_l6_n363(x)
+ if (x < 1)
+ fun_l7_n148(x)
+ else
+ fun_l7_n292(x)
+ end
+end
+
+def fun_l6_n364(x)
+ if (x < 1)
+ fun_l7_n175(x)
+ else
+ fun_l7_n849(x)
+ end
+end
+
+def fun_l6_n365(x)
+ if (x < 1)
+ fun_l7_n414(x)
+ else
+ fun_l7_n57(x)
+ end
+end
+
+def fun_l6_n366(x)
+ if (x < 1)
+ fun_l7_n771(x)
+ else
+ fun_l7_n625(x)
+ end
+end
+
+def fun_l6_n367(x)
+ if (x < 1)
+ fun_l7_n232(x)
+ else
+ fun_l7_n108(x)
+ end
+end
+
+def fun_l6_n368(x)
+ if (x < 1)
+ fun_l7_n123(x)
+ else
+ fun_l7_n413(x)
+ end
+end
+
+def fun_l6_n369(x)
+ if (x < 1)
+ fun_l7_n587(x)
+ else
+ fun_l7_n876(x)
+ end
+end
+
+def fun_l6_n370(x)
+ if (x < 1)
+ fun_l7_n750(x)
+ else
+ fun_l7_n531(x)
+ end
+end
+
+def fun_l6_n371(x)
+ if (x < 1)
+ fun_l7_n55(x)
+ else
+ fun_l7_n859(x)
+ end
+end
+
+def fun_l6_n372(x)
+ if (x < 1)
+ fun_l7_n848(x)
+ else
+ fun_l7_n272(x)
+ end
+end
+
+def fun_l6_n373(x)
+ if (x < 1)
+ fun_l7_n480(x)
+ else
+ fun_l7_n976(x)
+ end
+end
+
+def fun_l6_n374(x)
+ if (x < 1)
+ fun_l7_n298(x)
+ else
+ fun_l7_n844(x)
+ end
+end
+
+def fun_l6_n375(x)
+ if (x < 1)
+ fun_l7_n564(x)
+ else
+ fun_l7_n960(x)
+ end
+end
+
+def fun_l6_n376(x)
+ if (x < 1)
+ fun_l7_n684(x)
+ else
+ fun_l7_n181(x)
+ end
+end
+
+def fun_l6_n377(x)
+ if (x < 1)
+ fun_l7_n153(x)
+ else
+ fun_l7_n21(x)
+ end
+end
+
+def fun_l6_n378(x)
+ if (x < 1)
+ fun_l7_n377(x)
+ else
+ fun_l7_n761(x)
+ end
+end
+
+def fun_l6_n379(x)
+ if (x < 1)
+ fun_l7_n737(x)
+ else
+ fun_l7_n605(x)
+ end
+end
+
+def fun_l6_n380(x)
+ if (x < 1)
+ fun_l7_n536(x)
+ else
+ fun_l7_n143(x)
+ end
+end
+
+def fun_l6_n381(x)
+ if (x < 1)
+ fun_l7_n314(x)
+ else
+ fun_l7_n999(x)
+ end
+end
+
+def fun_l6_n382(x)
+ if (x < 1)
+ fun_l7_n995(x)
+ else
+ fun_l7_n564(x)
+ end
+end
+
+def fun_l6_n383(x)
+ if (x < 1)
+ fun_l7_n772(x)
+ else
+ fun_l7_n520(x)
+ end
+end
+
+def fun_l6_n384(x)
+ if (x < 1)
+ fun_l7_n250(x)
+ else
+ fun_l7_n142(x)
+ end
+end
+
+def fun_l6_n385(x)
+ if (x < 1)
+ fun_l7_n993(x)
+ else
+ fun_l7_n987(x)
+ end
+end
+
+def fun_l6_n386(x)
+ if (x < 1)
+ fun_l7_n717(x)
+ else
+ fun_l7_n674(x)
+ end
+end
+
+def fun_l6_n387(x)
+ if (x < 1)
+ fun_l7_n585(x)
+ else
+ fun_l7_n102(x)
+ end
+end
+
+def fun_l6_n388(x)
+ if (x < 1)
+ fun_l7_n779(x)
+ else
+ fun_l7_n110(x)
+ end
+end
+
+def fun_l6_n389(x)
+ if (x < 1)
+ fun_l7_n815(x)
+ else
+ fun_l7_n194(x)
+ end
+end
+
+def fun_l6_n390(x)
+ if (x < 1)
+ fun_l7_n261(x)
+ else
+ fun_l7_n30(x)
+ end
+end
+
+def fun_l6_n391(x)
+ if (x < 1)
+ fun_l7_n746(x)
+ else
+ fun_l7_n207(x)
+ end
+end
+
+def fun_l6_n392(x)
+ if (x < 1)
+ fun_l7_n866(x)
+ else
+ fun_l7_n862(x)
+ end
+end
+
+def fun_l6_n393(x)
+ if (x < 1)
+ fun_l7_n47(x)
+ else
+ fun_l7_n692(x)
+ end
+end
+
+def fun_l6_n394(x)
+ if (x < 1)
+ fun_l7_n140(x)
+ else
+ fun_l7_n104(x)
+ end
+end
+
+def fun_l6_n395(x)
+ if (x < 1)
+ fun_l7_n170(x)
+ else
+ fun_l7_n93(x)
+ end
+end
+
+def fun_l6_n396(x)
+ if (x < 1)
+ fun_l7_n184(x)
+ else
+ fun_l7_n218(x)
+ end
+end
+
+def fun_l6_n397(x)
+ if (x < 1)
+ fun_l7_n268(x)
+ else
+ fun_l7_n278(x)
+ end
+end
+
+def fun_l6_n398(x)
+ if (x < 1)
+ fun_l7_n859(x)
+ else
+ fun_l7_n888(x)
+ end
+end
+
+def fun_l6_n399(x)
+ if (x < 1)
+ fun_l7_n540(x)
+ else
+ fun_l7_n218(x)
+ end
+end
+
+def fun_l6_n400(x)
+ if (x < 1)
+ fun_l7_n148(x)
+ else
+ fun_l7_n220(x)
+ end
+end
+
+def fun_l6_n401(x)
+ if (x < 1)
+ fun_l7_n169(x)
+ else
+ fun_l7_n310(x)
+ end
+end
+
+def fun_l6_n402(x)
+ if (x < 1)
+ fun_l7_n256(x)
+ else
+ fun_l7_n336(x)
+ end
+end
+
+def fun_l6_n403(x)
+ if (x < 1)
+ fun_l7_n257(x)
+ else
+ fun_l7_n536(x)
+ end
+end
+
+def fun_l6_n404(x)
+ if (x < 1)
+ fun_l7_n47(x)
+ else
+ fun_l7_n714(x)
+ end
+end
+
+def fun_l6_n405(x)
+ if (x < 1)
+ fun_l7_n913(x)
+ else
+ fun_l7_n705(x)
+ end
+end
+
+def fun_l6_n406(x)
+ if (x < 1)
+ fun_l7_n816(x)
+ else
+ fun_l7_n168(x)
+ end
+end
+
+def fun_l6_n407(x)
+ if (x < 1)
+ fun_l7_n506(x)
+ else
+ fun_l7_n772(x)
+ end
+end
+
+def fun_l6_n408(x)
+ if (x < 1)
+ fun_l7_n983(x)
+ else
+ fun_l7_n973(x)
+ end
+end
+
+def fun_l6_n409(x)
+ if (x < 1)
+ fun_l7_n752(x)
+ else
+ fun_l7_n543(x)
+ end
+end
+
+def fun_l6_n410(x)
+ if (x < 1)
+ fun_l7_n580(x)
+ else
+ fun_l7_n265(x)
+ end
+end
+
+def fun_l6_n411(x)
+ if (x < 1)
+ fun_l7_n744(x)
+ else
+ fun_l7_n736(x)
+ end
+end
+
+def fun_l6_n412(x)
+ if (x < 1)
+ fun_l7_n950(x)
+ else
+ fun_l7_n5(x)
+ end
+end
+
+def fun_l6_n413(x)
+ if (x < 1)
+ fun_l7_n734(x)
+ else
+ fun_l7_n151(x)
+ end
+end
+
+def fun_l6_n414(x)
+ if (x < 1)
+ fun_l7_n907(x)
+ else
+ fun_l7_n113(x)
+ end
+end
+
+def fun_l6_n415(x)
+ if (x < 1)
+ fun_l7_n621(x)
+ else
+ fun_l7_n272(x)
+ end
+end
+
+def fun_l6_n416(x)
+ if (x < 1)
+ fun_l7_n598(x)
+ else
+ fun_l7_n872(x)
+ end
+end
+
+def fun_l6_n417(x)
+ if (x < 1)
+ fun_l7_n811(x)
+ else
+ fun_l7_n734(x)
+ end
+end
+
+def fun_l6_n418(x)
+ if (x < 1)
+ fun_l7_n18(x)
+ else
+ fun_l7_n405(x)
+ end
+end
+
+def fun_l6_n419(x)
+ if (x < 1)
+ fun_l7_n89(x)
+ else
+ fun_l7_n153(x)
+ end
+end
+
+def fun_l6_n420(x)
+ if (x < 1)
+ fun_l7_n438(x)
+ else
+ fun_l7_n452(x)
+ end
+end
+
+def fun_l6_n421(x)
+ if (x < 1)
+ fun_l7_n601(x)
+ else
+ fun_l7_n777(x)
+ end
+end
+
+def fun_l6_n422(x)
+ if (x < 1)
+ fun_l7_n202(x)
+ else
+ fun_l7_n368(x)
+ end
+end
+
+def fun_l6_n423(x)
+ if (x < 1)
+ fun_l7_n636(x)
+ else
+ fun_l7_n137(x)
+ end
+end
+
+def fun_l6_n424(x)
+ if (x < 1)
+ fun_l7_n222(x)
+ else
+ fun_l7_n838(x)
+ end
+end
+
+def fun_l6_n425(x)
+ if (x < 1)
+ fun_l7_n388(x)
+ else
+ fun_l7_n175(x)
+ end
+end
+
+def fun_l6_n426(x)
+ if (x < 1)
+ fun_l7_n629(x)
+ else
+ fun_l7_n376(x)
+ end
+end
+
+def fun_l6_n427(x)
+ if (x < 1)
+ fun_l7_n293(x)
+ else
+ fun_l7_n517(x)
+ end
+end
+
+def fun_l6_n428(x)
+ if (x < 1)
+ fun_l7_n859(x)
+ else
+ fun_l7_n129(x)
+ end
+end
+
+def fun_l6_n429(x)
+ if (x < 1)
+ fun_l7_n854(x)
+ else
+ fun_l7_n647(x)
+ end
+end
+
+def fun_l6_n430(x)
+ if (x < 1)
+ fun_l7_n117(x)
+ else
+ fun_l7_n291(x)
+ end
+end
+
+def fun_l6_n431(x)
+ if (x < 1)
+ fun_l7_n505(x)
+ else
+ fun_l7_n938(x)
+ end
+end
+
+def fun_l6_n432(x)
+ if (x < 1)
+ fun_l7_n536(x)
+ else
+ fun_l7_n303(x)
+ end
+end
+
+def fun_l6_n433(x)
+ if (x < 1)
+ fun_l7_n443(x)
+ else
+ fun_l7_n945(x)
+ end
+end
+
+def fun_l6_n434(x)
+ if (x < 1)
+ fun_l7_n74(x)
+ else
+ fun_l7_n594(x)
+ end
+end
+
+def fun_l6_n435(x)
+ if (x < 1)
+ fun_l7_n273(x)
+ else
+ fun_l7_n704(x)
+ end
+end
+
+def fun_l6_n436(x)
+ if (x < 1)
+ fun_l7_n451(x)
+ else
+ fun_l7_n371(x)
+ end
+end
+
+def fun_l6_n437(x)
+ if (x < 1)
+ fun_l7_n628(x)
+ else
+ fun_l7_n963(x)
+ end
+end
+
+def fun_l6_n438(x)
+ if (x < 1)
+ fun_l7_n361(x)
+ else
+ fun_l7_n506(x)
+ end
+end
+
+def fun_l6_n439(x)
+ if (x < 1)
+ fun_l7_n8(x)
+ else
+ fun_l7_n721(x)
+ end
+end
+
+def fun_l6_n440(x)
+ if (x < 1)
+ fun_l7_n728(x)
+ else
+ fun_l7_n372(x)
+ end
+end
+
+def fun_l6_n441(x)
+ if (x < 1)
+ fun_l7_n988(x)
+ else
+ fun_l7_n323(x)
+ end
+end
+
+def fun_l6_n442(x)
+ if (x < 1)
+ fun_l7_n5(x)
+ else
+ fun_l7_n56(x)
+ end
+end
+
+def fun_l6_n443(x)
+ if (x < 1)
+ fun_l7_n553(x)
+ else
+ fun_l7_n776(x)
+ end
+end
+
+def fun_l6_n444(x)
+ if (x < 1)
+ fun_l7_n194(x)
+ else
+ fun_l7_n101(x)
+ end
+end
+
+def fun_l6_n445(x)
+ if (x < 1)
+ fun_l7_n613(x)
+ else
+ fun_l7_n977(x)
+ end
+end
+
+def fun_l6_n446(x)
+ if (x < 1)
+ fun_l7_n23(x)
+ else
+ fun_l7_n311(x)
+ end
+end
+
+def fun_l6_n447(x)
+ if (x < 1)
+ fun_l7_n686(x)
+ else
+ fun_l7_n8(x)
+ end
+end
+
+def fun_l6_n448(x)
+ if (x < 1)
+ fun_l7_n812(x)
+ else
+ fun_l7_n229(x)
+ end
+end
+
+def fun_l6_n449(x)
+ if (x < 1)
+ fun_l7_n222(x)
+ else
+ fun_l7_n620(x)
+ end
+end
+
+def fun_l6_n450(x)
+ if (x < 1)
+ fun_l7_n599(x)
+ else
+ fun_l7_n468(x)
+ end
+end
+
+def fun_l6_n451(x)
+ if (x < 1)
+ fun_l7_n347(x)
+ else
+ fun_l7_n504(x)
+ end
+end
+
+def fun_l6_n452(x)
+ if (x < 1)
+ fun_l7_n95(x)
+ else
+ fun_l7_n482(x)
+ end
+end
+
+def fun_l6_n453(x)
+ if (x < 1)
+ fun_l7_n217(x)
+ else
+ fun_l7_n419(x)
+ end
+end
+
+def fun_l6_n454(x)
+ if (x < 1)
+ fun_l7_n28(x)
+ else
+ fun_l7_n609(x)
+ end
+end
+
+def fun_l6_n455(x)
+ if (x < 1)
+ fun_l7_n932(x)
+ else
+ fun_l7_n744(x)
+ end
+end
+
+def fun_l6_n456(x)
+ if (x < 1)
+ fun_l7_n901(x)
+ else
+ fun_l7_n882(x)
+ end
+end
+
+def fun_l6_n457(x)
+ if (x < 1)
+ fun_l7_n368(x)
+ else
+ fun_l7_n441(x)
+ end
+end
+
+def fun_l6_n458(x)
+ if (x < 1)
+ fun_l7_n49(x)
+ else
+ fun_l7_n135(x)
+ end
+end
+
+def fun_l6_n459(x)
+ if (x < 1)
+ fun_l7_n228(x)
+ else
+ fun_l7_n899(x)
+ end
+end
+
+def fun_l6_n460(x)
+ if (x < 1)
+ fun_l7_n90(x)
+ else
+ fun_l7_n190(x)
+ end
+end
+
+def fun_l6_n461(x)
+ if (x < 1)
+ fun_l7_n892(x)
+ else
+ fun_l7_n670(x)
+ end
+end
+
+def fun_l6_n462(x)
+ if (x < 1)
+ fun_l7_n961(x)
+ else
+ fun_l7_n769(x)
+ end
+end
+
+def fun_l6_n463(x)
+ if (x < 1)
+ fun_l7_n828(x)
+ else
+ fun_l7_n219(x)
+ end
+end
+
+def fun_l6_n464(x)
+ if (x < 1)
+ fun_l7_n17(x)
+ else
+ fun_l7_n345(x)
+ end
+end
+
+def fun_l6_n465(x)
+ if (x < 1)
+ fun_l7_n412(x)
+ else
+ fun_l7_n498(x)
+ end
+end
+
+def fun_l6_n466(x)
+ if (x < 1)
+ fun_l7_n659(x)
+ else
+ fun_l7_n781(x)
+ end
+end
+
+def fun_l6_n467(x)
+ if (x < 1)
+ fun_l7_n528(x)
+ else
+ fun_l7_n138(x)
+ end
+end
+
+def fun_l6_n468(x)
+ if (x < 1)
+ fun_l7_n272(x)
+ else
+ fun_l7_n512(x)
+ end
+end
+
+def fun_l6_n469(x)
+ if (x < 1)
+ fun_l7_n458(x)
+ else
+ fun_l7_n430(x)
+ end
+end
+
+def fun_l6_n470(x)
+ if (x < 1)
+ fun_l7_n192(x)
+ else
+ fun_l7_n755(x)
+ end
+end
+
+def fun_l6_n471(x)
+ if (x < 1)
+ fun_l7_n188(x)
+ else
+ fun_l7_n827(x)
+ end
+end
+
+def fun_l6_n472(x)
+ if (x < 1)
+ fun_l7_n467(x)
+ else
+ fun_l7_n167(x)
+ end
+end
+
+def fun_l6_n473(x)
+ if (x < 1)
+ fun_l7_n648(x)
+ else
+ fun_l7_n823(x)
+ end
+end
+
+def fun_l6_n474(x)
+ if (x < 1)
+ fun_l7_n788(x)
+ else
+ fun_l7_n120(x)
+ end
+end
+
+def fun_l6_n475(x)
+ if (x < 1)
+ fun_l7_n199(x)
+ else
+ fun_l7_n25(x)
+ end
+end
+
+def fun_l6_n476(x)
+ if (x < 1)
+ fun_l7_n812(x)
+ else
+ fun_l7_n258(x)
+ end
+end
+
+def fun_l6_n477(x)
+ if (x < 1)
+ fun_l7_n525(x)
+ else
+ fun_l7_n140(x)
+ end
+end
+
+def fun_l6_n478(x)
+ if (x < 1)
+ fun_l7_n728(x)
+ else
+ fun_l7_n157(x)
+ end
+end
+
+def fun_l6_n479(x)
+ if (x < 1)
+ fun_l7_n527(x)
+ else
+ fun_l7_n172(x)
+ end
+end
+
+def fun_l6_n480(x)
+ if (x < 1)
+ fun_l7_n295(x)
+ else
+ fun_l7_n230(x)
+ end
+end
+
+def fun_l6_n481(x)
+ if (x < 1)
+ fun_l7_n619(x)
+ else
+ fun_l7_n495(x)
+ end
+end
+
+def fun_l6_n482(x)
+ if (x < 1)
+ fun_l7_n412(x)
+ else
+ fun_l7_n30(x)
+ end
+end
+
+def fun_l6_n483(x)
+ if (x < 1)
+ fun_l7_n236(x)
+ else
+ fun_l7_n842(x)
+ end
+end
+
+def fun_l6_n484(x)
+ if (x < 1)
+ fun_l7_n59(x)
+ else
+ fun_l7_n341(x)
+ end
+end
+
+def fun_l6_n485(x)
+ if (x < 1)
+ fun_l7_n841(x)
+ else
+ fun_l7_n67(x)
+ end
+end
+
+def fun_l6_n486(x)
+ if (x < 1)
+ fun_l7_n299(x)
+ else
+ fun_l7_n144(x)
+ end
+end
+
+def fun_l6_n487(x)
+ if (x < 1)
+ fun_l7_n672(x)
+ else
+ fun_l7_n682(x)
+ end
+end
+
+def fun_l6_n488(x)
+ if (x < 1)
+ fun_l7_n110(x)
+ else
+ fun_l7_n231(x)
+ end
+end
+
+def fun_l6_n489(x)
+ if (x < 1)
+ fun_l7_n984(x)
+ else
+ fun_l7_n583(x)
+ end
+end
+
+def fun_l6_n490(x)
+ if (x < 1)
+ fun_l7_n354(x)
+ else
+ fun_l7_n90(x)
+ end
+end
+
+def fun_l6_n491(x)
+ if (x < 1)
+ fun_l7_n541(x)
+ else
+ fun_l7_n583(x)
+ end
+end
+
+def fun_l6_n492(x)
+ if (x < 1)
+ fun_l7_n35(x)
+ else
+ fun_l7_n209(x)
+ end
+end
+
+def fun_l6_n493(x)
+ if (x < 1)
+ fun_l7_n547(x)
+ else
+ fun_l7_n982(x)
+ end
+end
+
+def fun_l6_n494(x)
+ if (x < 1)
+ fun_l7_n3(x)
+ else
+ fun_l7_n230(x)
+ end
+end
+
+def fun_l6_n495(x)
+ if (x < 1)
+ fun_l7_n777(x)
+ else
+ fun_l7_n140(x)
+ end
+end
+
+def fun_l6_n496(x)
+ if (x < 1)
+ fun_l7_n927(x)
+ else
+ fun_l7_n934(x)
+ end
+end
+
+def fun_l6_n497(x)
+ if (x < 1)
+ fun_l7_n201(x)
+ else
+ fun_l7_n342(x)
+ end
+end
+
+def fun_l6_n498(x)
+ if (x < 1)
+ fun_l7_n973(x)
+ else
+ fun_l7_n106(x)
+ end
+end
+
+def fun_l6_n499(x)
+ if (x < 1)
+ fun_l7_n373(x)
+ else
+ fun_l7_n558(x)
+ end
+end
+
+def fun_l6_n500(x)
+ if (x < 1)
+ fun_l7_n835(x)
+ else
+ fun_l7_n981(x)
+ end
+end
+
+def fun_l6_n501(x)
+ if (x < 1)
+ fun_l7_n135(x)
+ else
+ fun_l7_n997(x)
+ end
+end
+
+def fun_l6_n502(x)
+ if (x < 1)
+ fun_l7_n129(x)
+ else
+ fun_l7_n530(x)
+ end
+end
+
+def fun_l6_n503(x)
+ if (x < 1)
+ fun_l7_n924(x)
+ else
+ fun_l7_n611(x)
+ end
+end
+
+def fun_l6_n504(x)
+ if (x < 1)
+ fun_l7_n125(x)
+ else
+ fun_l7_n26(x)
+ end
+end
+
+def fun_l6_n505(x)
+ if (x < 1)
+ fun_l7_n592(x)
+ else
+ fun_l7_n50(x)
+ end
+end
+
+def fun_l6_n506(x)
+ if (x < 1)
+ fun_l7_n220(x)
+ else
+ fun_l7_n787(x)
+ end
+end
+
+def fun_l6_n507(x)
+ if (x < 1)
+ fun_l7_n908(x)
+ else
+ fun_l7_n15(x)
+ end
+end
+
+def fun_l6_n508(x)
+ if (x < 1)
+ fun_l7_n475(x)
+ else
+ fun_l7_n899(x)
+ end
+end
+
+def fun_l6_n509(x)
+ if (x < 1)
+ fun_l7_n704(x)
+ else
+ fun_l7_n559(x)
+ end
+end
+
+def fun_l6_n510(x)
+ if (x < 1)
+ fun_l7_n625(x)
+ else
+ fun_l7_n73(x)
+ end
+end
+
+def fun_l6_n511(x)
+ if (x < 1)
+ fun_l7_n234(x)
+ else
+ fun_l7_n166(x)
+ end
+end
+
+def fun_l6_n512(x)
+ if (x < 1)
+ fun_l7_n502(x)
+ else
+ fun_l7_n304(x)
+ end
+end
+
+def fun_l6_n513(x)
+ if (x < 1)
+ fun_l7_n686(x)
+ else
+ fun_l7_n643(x)
+ end
+end
+
+def fun_l6_n514(x)
+ if (x < 1)
+ fun_l7_n804(x)
+ else
+ fun_l7_n116(x)
+ end
+end
+
+def fun_l6_n515(x)
+ if (x < 1)
+ fun_l7_n365(x)
+ else
+ fun_l7_n102(x)
+ end
+end
+
+def fun_l6_n516(x)
+ if (x < 1)
+ fun_l7_n563(x)
+ else
+ fun_l7_n161(x)
+ end
+end
+
+def fun_l6_n517(x)
+ if (x < 1)
+ fun_l7_n695(x)
+ else
+ fun_l7_n936(x)
+ end
+end
+
+def fun_l6_n518(x)
+ if (x < 1)
+ fun_l7_n220(x)
+ else
+ fun_l7_n884(x)
+ end
+end
+
+def fun_l6_n519(x)
+ if (x < 1)
+ fun_l7_n602(x)
+ else
+ fun_l7_n144(x)
+ end
+end
+
+def fun_l6_n520(x)
+ if (x < 1)
+ fun_l7_n409(x)
+ else
+ fun_l7_n861(x)
+ end
+end
+
+def fun_l6_n521(x)
+ if (x < 1)
+ fun_l7_n258(x)
+ else
+ fun_l7_n768(x)
+ end
+end
+
+def fun_l6_n522(x)
+ if (x < 1)
+ fun_l7_n878(x)
+ else
+ fun_l7_n503(x)
+ end
+end
+
+def fun_l6_n523(x)
+ if (x < 1)
+ fun_l7_n570(x)
+ else
+ fun_l7_n675(x)
+ end
+end
+
+def fun_l6_n524(x)
+ if (x < 1)
+ fun_l7_n741(x)
+ else
+ fun_l7_n748(x)
+ end
+end
+
+def fun_l6_n525(x)
+ if (x < 1)
+ fun_l7_n729(x)
+ else
+ fun_l7_n272(x)
+ end
+end
+
+def fun_l6_n526(x)
+ if (x < 1)
+ fun_l7_n734(x)
+ else
+ fun_l7_n70(x)
+ end
+end
+
+def fun_l6_n527(x)
+ if (x < 1)
+ fun_l7_n235(x)
+ else
+ fun_l7_n606(x)
+ end
+end
+
+def fun_l6_n528(x)
+ if (x < 1)
+ fun_l7_n67(x)
+ else
+ fun_l7_n399(x)
+ end
+end
+
+def fun_l6_n529(x)
+ if (x < 1)
+ fun_l7_n706(x)
+ else
+ fun_l7_n150(x)
+ end
+end
+
+def fun_l6_n530(x)
+ if (x < 1)
+ fun_l7_n35(x)
+ else
+ fun_l7_n951(x)
+ end
+end
+
+def fun_l6_n531(x)
+ if (x < 1)
+ fun_l7_n517(x)
+ else
+ fun_l7_n329(x)
+ end
+end
+
+def fun_l6_n532(x)
+ if (x < 1)
+ fun_l7_n392(x)
+ else
+ fun_l7_n970(x)
+ end
+end
+
+def fun_l6_n533(x)
+ if (x < 1)
+ fun_l7_n466(x)
+ else
+ fun_l7_n260(x)
+ end
+end
+
+def fun_l6_n534(x)
+ if (x < 1)
+ fun_l7_n957(x)
+ else
+ fun_l7_n417(x)
+ end
+end
+
+def fun_l6_n535(x)
+ if (x < 1)
+ fun_l7_n184(x)
+ else
+ fun_l7_n188(x)
+ end
+end
+
+def fun_l6_n536(x)
+ if (x < 1)
+ fun_l7_n298(x)
+ else
+ fun_l7_n192(x)
+ end
+end
+
+def fun_l6_n537(x)
+ if (x < 1)
+ fun_l7_n28(x)
+ else
+ fun_l7_n309(x)
+ end
+end
+
+def fun_l6_n538(x)
+ if (x < 1)
+ fun_l7_n801(x)
+ else
+ fun_l7_n84(x)
+ end
+end
+
+def fun_l6_n539(x)
+ if (x < 1)
+ fun_l7_n894(x)
+ else
+ fun_l7_n973(x)
+ end
+end
+
+def fun_l6_n540(x)
+ if (x < 1)
+ fun_l7_n895(x)
+ else
+ fun_l7_n231(x)
+ end
+end
+
+def fun_l6_n541(x)
+ if (x < 1)
+ fun_l7_n728(x)
+ else
+ fun_l7_n28(x)
+ end
+end
+
+def fun_l6_n542(x)
+ if (x < 1)
+ fun_l7_n655(x)
+ else
+ fun_l7_n845(x)
+ end
+end
+
+def fun_l6_n543(x)
+ if (x < 1)
+ fun_l7_n952(x)
+ else
+ fun_l7_n484(x)
+ end
+end
+
+def fun_l6_n544(x)
+ if (x < 1)
+ fun_l7_n835(x)
+ else
+ fun_l7_n187(x)
+ end
+end
+
+def fun_l6_n545(x)
+ if (x < 1)
+ fun_l7_n748(x)
+ else
+ fun_l7_n460(x)
+ end
+end
+
+def fun_l6_n546(x)
+ if (x < 1)
+ fun_l7_n734(x)
+ else
+ fun_l7_n165(x)
+ end
+end
+
+def fun_l6_n547(x)
+ if (x < 1)
+ fun_l7_n499(x)
+ else
+ fun_l7_n133(x)
+ end
+end
+
+def fun_l6_n548(x)
+ if (x < 1)
+ fun_l7_n751(x)
+ else
+ fun_l7_n731(x)
+ end
+end
+
+def fun_l6_n549(x)
+ if (x < 1)
+ fun_l7_n269(x)
+ else
+ fun_l7_n690(x)
+ end
+end
+
+def fun_l6_n550(x)
+ if (x < 1)
+ fun_l7_n320(x)
+ else
+ fun_l7_n308(x)
+ end
+end
+
+def fun_l6_n551(x)
+ if (x < 1)
+ fun_l7_n182(x)
+ else
+ fun_l7_n144(x)
+ end
+end
+
+def fun_l6_n552(x)
+ if (x < 1)
+ fun_l7_n683(x)
+ else
+ fun_l7_n691(x)
+ end
+end
+
+def fun_l6_n553(x)
+ if (x < 1)
+ fun_l7_n502(x)
+ else
+ fun_l7_n520(x)
+ end
+end
+
+def fun_l6_n554(x)
+ if (x < 1)
+ fun_l7_n60(x)
+ else
+ fun_l7_n551(x)
+ end
+end
+
+def fun_l6_n555(x)
+ if (x < 1)
+ fun_l7_n185(x)
+ else
+ fun_l7_n87(x)
+ end
+end
+
+def fun_l6_n556(x)
+ if (x < 1)
+ fun_l7_n140(x)
+ else
+ fun_l7_n725(x)
+ end
+end
+
+def fun_l6_n557(x)
+ if (x < 1)
+ fun_l7_n76(x)
+ else
+ fun_l7_n501(x)
+ end
+end
+
+def fun_l6_n558(x)
+ if (x < 1)
+ fun_l7_n553(x)
+ else
+ fun_l7_n146(x)
+ end
+end
+
+def fun_l6_n559(x)
+ if (x < 1)
+ fun_l7_n535(x)
+ else
+ fun_l7_n17(x)
+ end
+end
+
+def fun_l6_n560(x)
+ if (x < 1)
+ fun_l7_n566(x)
+ else
+ fun_l7_n773(x)
+ end
+end
+
+def fun_l6_n561(x)
+ if (x < 1)
+ fun_l7_n358(x)
+ else
+ fun_l7_n951(x)
+ end
+end
+
+def fun_l6_n562(x)
+ if (x < 1)
+ fun_l7_n492(x)
+ else
+ fun_l7_n478(x)
+ end
+end
+
+def fun_l6_n563(x)
+ if (x < 1)
+ fun_l7_n796(x)
+ else
+ fun_l7_n906(x)
+ end
+end
+
+def fun_l6_n564(x)
+ if (x < 1)
+ fun_l7_n751(x)
+ else
+ fun_l7_n546(x)
+ end
+end
+
+def fun_l6_n565(x)
+ if (x < 1)
+ fun_l7_n179(x)
+ else
+ fun_l7_n49(x)
+ end
+end
+
+def fun_l6_n566(x)
+ if (x < 1)
+ fun_l7_n550(x)
+ else
+ fun_l7_n440(x)
+ end
+end
+
+def fun_l6_n567(x)
+ if (x < 1)
+ fun_l7_n715(x)
+ else
+ fun_l7_n862(x)
+ end
+end
+
+def fun_l6_n568(x)
+ if (x < 1)
+ fun_l7_n124(x)
+ else
+ fun_l7_n191(x)
+ end
+end
+
+def fun_l6_n569(x)
+ if (x < 1)
+ fun_l7_n709(x)
+ else
+ fun_l7_n704(x)
+ end
+end
+
+def fun_l6_n570(x)
+ if (x < 1)
+ fun_l7_n864(x)
+ else
+ fun_l7_n84(x)
+ end
+end
+
+def fun_l6_n571(x)
+ if (x < 1)
+ fun_l7_n302(x)
+ else
+ fun_l7_n424(x)
+ end
+end
+
+def fun_l6_n572(x)
+ if (x < 1)
+ fun_l7_n488(x)
+ else
+ fun_l7_n570(x)
+ end
+end
+
+def fun_l6_n573(x)
+ if (x < 1)
+ fun_l7_n590(x)
+ else
+ fun_l7_n560(x)
+ end
+end
+
+def fun_l6_n574(x)
+ if (x < 1)
+ fun_l7_n38(x)
+ else
+ fun_l7_n444(x)
+ end
+end
+
+def fun_l6_n575(x)
+ if (x < 1)
+ fun_l7_n401(x)
+ else
+ fun_l7_n359(x)
+ end
+end
+
+def fun_l6_n576(x)
+ if (x < 1)
+ fun_l7_n518(x)
+ else
+ fun_l7_n240(x)
+ end
+end
+
+def fun_l6_n577(x)
+ if (x < 1)
+ fun_l7_n247(x)
+ else
+ fun_l7_n540(x)
+ end
+end
+
+def fun_l6_n578(x)
+ if (x < 1)
+ fun_l7_n223(x)
+ else
+ fun_l7_n729(x)
+ end
+end
+
+def fun_l6_n579(x)
+ if (x < 1)
+ fun_l7_n524(x)
+ else
+ fun_l7_n684(x)
+ end
+end
+
+def fun_l6_n580(x)
+ if (x < 1)
+ fun_l7_n113(x)
+ else
+ fun_l7_n865(x)
+ end
+end
+
+def fun_l6_n581(x)
+ if (x < 1)
+ fun_l7_n920(x)
+ else
+ fun_l7_n238(x)
+ end
+end
+
+def fun_l6_n582(x)
+ if (x < 1)
+ fun_l7_n78(x)
+ else
+ fun_l7_n85(x)
+ end
+end
+
+def fun_l6_n583(x)
+ if (x < 1)
+ fun_l7_n713(x)
+ else
+ fun_l7_n110(x)
+ end
+end
+
+def fun_l6_n584(x)
+ if (x < 1)
+ fun_l7_n170(x)
+ else
+ fun_l7_n183(x)
+ end
+end
+
+def fun_l6_n585(x)
+ if (x < 1)
+ fun_l7_n100(x)
+ else
+ fun_l7_n215(x)
+ end
+end
+
+def fun_l6_n586(x)
+ if (x < 1)
+ fun_l7_n126(x)
+ else
+ fun_l7_n136(x)
+ end
+end
+
+def fun_l6_n587(x)
+ if (x < 1)
+ fun_l7_n592(x)
+ else
+ fun_l7_n502(x)
+ end
+end
+
+def fun_l6_n588(x)
+ if (x < 1)
+ fun_l7_n155(x)
+ else
+ fun_l7_n591(x)
+ end
+end
+
+def fun_l6_n589(x)
+ if (x < 1)
+ fun_l7_n840(x)
+ else
+ fun_l7_n91(x)
+ end
+end
+
+def fun_l6_n590(x)
+ if (x < 1)
+ fun_l7_n146(x)
+ else
+ fun_l7_n849(x)
+ end
+end
+
+def fun_l6_n591(x)
+ if (x < 1)
+ fun_l7_n161(x)
+ else
+ fun_l7_n884(x)
+ end
+end
+
+def fun_l6_n592(x)
+ if (x < 1)
+ fun_l7_n994(x)
+ else
+ fun_l7_n341(x)
+ end
+end
+
+def fun_l6_n593(x)
+ if (x < 1)
+ fun_l7_n974(x)
+ else
+ fun_l7_n355(x)
+ end
+end
+
+def fun_l6_n594(x)
+ if (x < 1)
+ fun_l7_n726(x)
+ else
+ fun_l7_n266(x)
+ end
+end
+
+def fun_l6_n595(x)
+ if (x < 1)
+ fun_l7_n142(x)
+ else
+ fun_l7_n154(x)
+ end
+end
+
+def fun_l6_n596(x)
+ if (x < 1)
+ fun_l7_n287(x)
+ else
+ fun_l7_n155(x)
+ end
+end
+
+def fun_l6_n597(x)
+ if (x < 1)
+ fun_l7_n594(x)
+ else
+ fun_l7_n424(x)
+ end
+end
+
+def fun_l6_n598(x)
+ if (x < 1)
+ fun_l7_n227(x)
+ else
+ fun_l7_n445(x)
+ end
+end
+
+def fun_l6_n599(x)
+ if (x < 1)
+ fun_l7_n660(x)
+ else
+ fun_l7_n464(x)
+ end
+end
+
+def fun_l6_n600(x)
+ if (x < 1)
+ fun_l7_n930(x)
+ else
+ fun_l7_n520(x)
+ end
+end
+
+def fun_l6_n601(x)
+ if (x < 1)
+ fun_l7_n714(x)
+ else
+ fun_l7_n984(x)
+ end
+end
+
+def fun_l6_n602(x)
+ if (x < 1)
+ fun_l7_n226(x)
+ else
+ fun_l7_n316(x)
+ end
+end
+
+def fun_l6_n603(x)
+ if (x < 1)
+ fun_l7_n104(x)
+ else
+ fun_l7_n563(x)
+ end
+end
+
+def fun_l6_n604(x)
+ if (x < 1)
+ fun_l7_n149(x)
+ else
+ fun_l7_n921(x)
+ end
+end
+
+def fun_l6_n605(x)
+ if (x < 1)
+ fun_l7_n195(x)
+ else
+ fun_l7_n696(x)
+ end
+end
+
+def fun_l6_n606(x)
+ if (x < 1)
+ fun_l7_n337(x)
+ else
+ fun_l7_n347(x)
+ end
+end
+
+def fun_l6_n607(x)
+ if (x < 1)
+ fun_l7_n657(x)
+ else
+ fun_l7_n67(x)
+ end
+end
+
+def fun_l6_n608(x)
+ if (x < 1)
+ fun_l7_n796(x)
+ else
+ fun_l7_n589(x)
+ end
+end
+
+def fun_l6_n609(x)
+ if (x < 1)
+ fun_l7_n230(x)
+ else
+ fun_l7_n769(x)
+ end
+end
+
+def fun_l6_n610(x)
+ if (x < 1)
+ fun_l7_n427(x)
+ else
+ fun_l7_n892(x)
+ end
+end
+
+def fun_l6_n611(x)
+ if (x < 1)
+ fun_l7_n741(x)
+ else
+ fun_l7_n567(x)
+ end
+end
+
+def fun_l6_n612(x)
+ if (x < 1)
+ fun_l7_n471(x)
+ else
+ fun_l7_n824(x)
+ end
+end
+
+def fun_l6_n613(x)
+ if (x < 1)
+ fun_l7_n522(x)
+ else
+ fun_l7_n694(x)
+ end
+end
+
+def fun_l6_n614(x)
+ if (x < 1)
+ fun_l7_n95(x)
+ else
+ fun_l7_n84(x)
+ end
+end
+
+def fun_l6_n615(x)
+ if (x < 1)
+ fun_l7_n632(x)
+ else
+ fun_l7_n590(x)
+ end
+end
+
+def fun_l6_n616(x)
+ if (x < 1)
+ fun_l7_n372(x)
+ else
+ fun_l7_n659(x)
+ end
+end
+
+def fun_l6_n617(x)
+ if (x < 1)
+ fun_l7_n547(x)
+ else
+ fun_l7_n321(x)
+ end
+end
+
+def fun_l6_n618(x)
+ if (x < 1)
+ fun_l7_n53(x)
+ else
+ fun_l7_n723(x)
+ end
+end
+
+def fun_l6_n619(x)
+ if (x < 1)
+ fun_l7_n653(x)
+ else
+ fun_l7_n740(x)
+ end
+end
+
+def fun_l6_n620(x)
+ if (x < 1)
+ fun_l7_n16(x)
+ else
+ fun_l7_n228(x)
+ end
+end
+
+def fun_l6_n621(x)
+ if (x < 1)
+ fun_l7_n655(x)
+ else
+ fun_l7_n701(x)
+ end
+end
+
+def fun_l6_n622(x)
+ if (x < 1)
+ fun_l7_n212(x)
+ else
+ fun_l7_n692(x)
+ end
+end
+
+def fun_l6_n623(x)
+ if (x < 1)
+ fun_l7_n959(x)
+ else
+ fun_l7_n327(x)
+ end
+end
+
+def fun_l6_n624(x)
+ if (x < 1)
+ fun_l7_n607(x)
+ else
+ fun_l7_n168(x)
+ end
+end
+
+def fun_l6_n625(x)
+ if (x < 1)
+ fun_l7_n229(x)
+ else
+ fun_l7_n584(x)
+ end
+end
+
+def fun_l6_n626(x)
+ if (x < 1)
+ fun_l7_n776(x)
+ else
+ fun_l7_n284(x)
+ end
+end
+
+def fun_l6_n627(x)
+ if (x < 1)
+ fun_l7_n770(x)
+ else
+ fun_l7_n169(x)
+ end
+end
+
+def fun_l6_n628(x)
+ if (x < 1)
+ fun_l7_n550(x)
+ else
+ fun_l7_n918(x)
+ end
+end
+
+def fun_l6_n629(x)
+ if (x < 1)
+ fun_l7_n450(x)
+ else
+ fun_l7_n654(x)
+ end
+end
+
+def fun_l6_n630(x)
+ if (x < 1)
+ fun_l7_n968(x)
+ else
+ fun_l7_n770(x)
+ end
+end
+
+def fun_l6_n631(x)
+ if (x < 1)
+ fun_l7_n118(x)
+ else
+ fun_l7_n411(x)
+ end
+end
+
+def fun_l6_n632(x)
+ if (x < 1)
+ fun_l7_n352(x)
+ else
+ fun_l7_n840(x)
+ end
+end
+
+def fun_l6_n633(x)
+ if (x < 1)
+ fun_l7_n588(x)
+ else
+ fun_l7_n810(x)
+ end
+end
+
+def fun_l6_n634(x)
+ if (x < 1)
+ fun_l7_n955(x)
+ else
+ fun_l7_n709(x)
+ end
+end
+
+def fun_l6_n635(x)
+ if (x < 1)
+ fun_l7_n137(x)
+ else
+ fun_l7_n239(x)
+ end
+end
+
+def fun_l6_n636(x)
+ if (x < 1)
+ fun_l7_n955(x)
+ else
+ fun_l7_n87(x)
+ end
+end
+
+def fun_l6_n637(x)
+ if (x < 1)
+ fun_l7_n479(x)
+ else
+ fun_l7_n91(x)
+ end
+end
+
+def fun_l6_n638(x)
+ if (x < 1)
+ fun_l7_n366(x)
+ else
+ fun_l7_n388(x)
+ end
+end
+
+def fun_l6_n639(x)
+ if (x < 1)
+ fun_l7_n90(x)
+ else
+ fun_l7_n971(x)
+ end
+end
+
+def fun_l6_n640(x)
+ if (x < 1)
+ fun_l7_n330(x)
+ else
+ fun_l7_n415(x)
+ end
+end
+
+def fun_l6_n641(x)
+ if (x < 1)
+ fun_l7_n233(x)
+ else
+ fun_l7_n653(x)
+ end
+end
+
+def fun_l6_n642(x)
+ if (x < 1)
+ fun_l7_n106(x)
+ else
+ fun_l7_n440(x)
+ end
+end
+
+def fun_l6_n643(x)
+ if (x < 1)
+ fun_l7_n156(x)
+ else
+ fun_l7_n818(x)
+ end
+end
+
+def fun_l6_n644(x)
+ if (x < 1)
+ fun_l7_n68(x)
+ else
+ fun_l7_n763(x)
+ end
+end
+
+def fun_l6_n645(x)
+ if (x < 1)
+ fun_l7_n858(x)
+ else
+ fun_l7_n465(x)
+ end
+end
+
+def fun_l6_n646(x)
+ if (x < 1)
+ fun_l7_n886(x)
+ else
+ fun_l7_n86(x)
+ end
+end
+
+def fun_l6_n647(x)
+ if (x < 1)
+ fun_l7_n689(x)
+ else
+ fun_l7_n964(x)
+ end
+end
+
+def fun_l6_n648(x)
+ if (x < 1)
+ fun_l7_n748(x)
+ else
+ fun_l7_n214(x)
+ end
+end
+
+def fun_l6_n649(x)
+ if (x < 1)
+ fun_l7_n830(x)
+ else
+ fun_l7_n567(x)
+ end
+end
+
+def fun_l6_n650(x)
+ if (x < 1)
+ fun_l7_n907(x)
+ else
+ fun_l7_n957(x)
+ end
+end
+
+def fun_l6_n651(x)
+ if (x < 1)
+ fun_l7_n242(x)
+ else
+ fun_l7_n239(x)
+ end
+end
+
+def fun_l6_n652(x)
+ if (x < 1)
+ fun_l7_n347(x)
+ else
+ fun_l7_n63(x)
+ end
+end
+
+def fun_l6_n653(x)
+ if (x < 1)
+ fun_l7_n480(x)
+ else
+ fun_l7_n441(x)
+ end
+end
+
+def fun_l6_n654(x)
+ if (x < 1)
+ fun_l7_n304(x)
+ else
+ fun_l7_n690(x)
+ end
+end
+
+def fun_l6_n655(x)
+ if (x < 1)
+ fun_l7_n511(x)
+ else
+ fun_l7_n710(x)
+ end
+end
+
+def fun_l6_n656(x)
+ if (x < 1)
+ fun_l7_n202(x)
+ else
+ fun_l7_n48(x)
+ end
+end
+
+def fun_l6_n657(x)
+ if (x < 1)
+ fun_l7_n232(x)
+ else
+ fun_l7_n919(x)
+ end
+end
+
+def fun_l6_n658(x)
+ if (x < 1)
+ fun_l7_n627(x)
+ else
+ fun_l7_n620(x)
+ end
+end
+
+def fun_l6_n659(x)
+ if (x < 1)
+ fun_l7_n716(x)
+ else
+ fun_l7_n116(x)
+ end
+end
+
+def fun_l6_n660(x)
+ if (x < 1)
+ fun_l7_n105(x)
+ else
+ fun_l7_n536(x)
+ end
+end
+
+def fun_l6_n661(x)
+ if (x < 1)
+ fun_l7_n376(x)
+ else
+ fun_l7_n965(x)
+ end
+end
+
+def fun_l6_n662(x)
+ if (x < 1)
+ fun_l7_n417(x)
+ else
+ fun_l7_n726(x)
+ end
+end
+
+def fun_l6_n663(x)
+ if (x < 1)
+ fun_l7_n567(x)
+ else
+ fun_l7_n948(x)
+ end
+end
+
+def fun_l6_n664(x)
+ if (x < 1)
+ fun_l7_n640(x)
+ else
+ fun_l7_n910(x)
+ end
+end
+
+def fun_l6_n665(x)
+ if (x < 1)
+ fun_l7_n874(x)
+ else
+ fun_l7_n314(x)
+ end
+end
+
+def fun_l6_n666(x)
+ if (x < 1)
+ fun_l7_n946(x)
+ else
+ fun_l7_n101(x)
+ end
+end
+
+def fun_l6_n667(x)
+ if (x < 1)
+ fun_l7_n960(x)
+ else
+ fun_l7_n199(x)
+ end
+end
+
+def fun_l6_n668(x)
+ if (x < 1)
+ fun_l7_n389(x)
+ else
+ fun_l7_n976(x)
+ end
+end
+
+def fun_l6_n669(x)
+ if (x < 1)
+ fun_l7_n31(x)
+ else
+ fun_l7_n903(x)
+ end
+end
+
+def fun_l6_n670(x)
+ if (x < 1)
+ fun_l7_n288(x)
+ else
+ fun_l7_n115(x)
+ end
+end
+
+def fun_l6_n671(x)
+ if (x < 1)
+ fun_l7_n418(x)
+ else
+ fun_l7_n249(x)
+ end
+end
+
+def fun_l6_n672(x)
+ if (x < 1)
+ fun_l7_n733(x)
+ else
+ fun_l7_n815(x)
+ end
+end
+
+def fun_l6_n673(x)
+ if (x < 1)
+ fun_l7_n227(x)
+ else
+ fun_l7_n23(x)
+ end
+end
+
+def fun_l6_n674(x)
+ if (x < 1)
+ fun_l7_n936(x)
+ else
+ fun_l7_n386(x)
+ end
+end
+
+def fun_l6_n675(x)
+ if (x < 1)
+ fun_l7_n638(x)
+ else
+ fun_l7_n39(x)
+ end
+end
+
+def fun_l6_n676(x)
+ if (x < 1)
+ fun_l7_n304(x)
+ else
+ fun_l7_n35(x)
+ end
+end
+
+def fun_l6_n677(x)
+ if (x < 1)
+ fun_l7_n676(x)
+ else
+ fun_l7_n443(x)
+ end
+end
+
+def fun_l6_n678(x)
+ if (x < 1)
+ fun_l7_n648(x)
+ else
+ fun_l7_n453(x)
+ end
+end
+
+def fun_l6_n679(x)
+ if (x < 1)
+ fun_l7_n15(x)
+ else
+ fun_l7_n220(x)
+ end
+end
+
+def fun_l6_n680(x)
+ if (x < 1)
+ fun_l7_n201(x)
+ else
+ fun_l7_n842(x)
+ end
+end
+
+def fun_l6_n681(x)
+ if (x < 1)
+ fun_l7_n67(x)
+ else
+ fun_l7_n73(x)
+ end
+end
+
+def fun_l6_n682(x)
+ if (x < 1)
+ fun_l7_n280(x)
+ else
+ fun_l7_n370(x)
+ end
+end
+
+def fun_l6_n683(x)
+ if (x < 1)
+ fun_l7_n822(x)
+ else
+ fun_l7_n27(x)
+ end
+end
+
+def fun_l6_n684(x)
+ if (x < 1)
+ fun_l7_n720(x)
+ else
+ fun_l7_n651(x)
+ end
+end
+
+def fun_l6_n685(x)
+ if (x < 1)
+ fun_l7_n414(x)
+ else
+ fun_l7_n257(x)
+ end
+end
+
+def fun_l6_n686(x)
+ if (x < 1)
+ fun_l7_n477(x)
+ else
+ fun_l7_n883(x)
+ end
+end
+
+def fun_l6_n687(x)
+ if (x < 1)
+ fun_l7_n467(x)
+ else
+ fun_l7_n739(x)
+ end
+end
+
+def fun_l6_n688(x)
+ if (x < 1)
+ fun_l7_n421(x)
+ else
+ fun_l7_n271(x)
+ end
+end
+
+def fun_l6_n689(x)
+ if (x < 1)
+ fun_l7_n444(x)
+ else
+ fun_l7_n601(x)
+ end
+end
+
+def fun_l6_n690(x)
+ if (x < 1)
+ fun_l7_n104(x)
+ else
+ fun_l7_n597(x)
+ end
+end
+
+def fun_l6_n691(x)
+ if (x < 1)
+ fun_l7_n273(x)
+ else
+ fun_l7_n79(x)
+ end
+end
+
+def fun_l6_n692(x)
+ if (x < 1)
+ fun_l7_n310(x)
+ else
+ fun_l7_n261(x)
+ end
+end
+
+def fun_l6_n693(x)
+ if (x < 1)
+ fun_l7_n190(x)
+ else
+ fun_l7_n330(x)
+ end
+end
+
+def fun_l6_n694(x)
+ if (x < 1)
+ fun_l7_n103(x)
+ else
+ fun_l7_n258(x)
+ end
+end
+
+def fun_l6_n695(x)
+ if (x < 1)
+ fun_l7_n524(x)
+ else
+ fun_l7_n988(x)
+ end
+end
+
+def fun_l6_n696(x)
+ if (x < 1)
+ fun_l7_n885(x)
+ else
+ fun_l7_n731(x)
+ end
+end
+
+def fun_l6_n697(x)
+ if (x < 1)
+ fun_l7_n212(x)
+ else
+ fun_l7_n98(x)
+ end
+end
+
+def fun_l6_n698(x)
+ if (x < 1)
+ fun_l7_n735(x)
+ else
+ fun_l7_n682(x)
+ end
+end
+
+def fun_l6_n699(x)
+ if (x < 1)
+ fun_l7_n610(x)
+ else
+ fun_l7_n512(x)
+ end
+end
+
+def fun_l6_n700(x)
+ if (x < 1)
+ fun_l7_n828(x)
+ else
+ fun_l7_n651(x)
+ end
+end
+
+def fun_l6_n701(x)
+ if (x < 1)
+ fun_l7_n269(x)
+ else
+ fun_l7_n192(x)
+ end
+end
+
+def fun_l6_n702(x)
+ if (x < 1)
+ fun_l7_n775(x)
+ else
+ fun_l7_n334(x)
+ end
+end
+
+def fun_l6_n703(x)
+ if (x < 1)
+ fun_l7_n880(x)
+ else
+ fun_l7_n396(x)
+ end
+end
+
+def fun_l6_n704(x)
+ if (x < 1)
+ fun_l7_n907(x)
+ else
+ fun_l7_n107(x)
+ end
+end
+
+def fun_l6_n705(x)
+ if (x < 1)
+ fun_l7_n425(x)
+ else
+ fun_l7_n555(x)
+ end
+end
+
+def fun_l6_n706(x)
+ if (x < 1)
+ fun_l7_n458(x)
+ else
+ fun_l7_n610(x)
+ end
+end
+
+def fun_l6_n707(x)
+ if (x < 1)
+ fun_l7_n527(x)
+ else
+ fun_l7_n69(x)
+ end
+end
+
+def fun_l6_n708(x)
+ if (x < 1)
+ fun_l7_n518(x)
+ else
+ fun_l7_n87(x)
+ end
+end
+
+def fun_l6_n709(x)
+ if (x < 1)
+ fun_l7_n441(x)
+ else
+ fun_l7_n533(x)
+ end
+end
+
+def fun_l6_n710(x)
+ if (x < 1)
+ fun_l7_n872(x)
+ else
+ fun_l7_n896(x)
+ end
+end
+
+def fun_l6_n711(x)
+ if (x < 1)
+ fun_l7_n388(x)
+ else
+ fun_l7_n476(x)
+ end
+end
+
+def fun_l6_n712(x)
+ if (x < 1)
+ fun_l7_n913(x)
+ else
+ fun_l7_n304(x)
+ end
+end
+
+def fun_l6_n713(x)
+ if (x < 1)
+ fun_l7_n203(x)
+ else
+ fun_l7_n457(x)
+ end
+end
+
+def fun_l6_n714(x)
+ if (x < 1)
+ fun_l7_n593(x)
+ else
+ fun_l7_n921(x)
+ end
+end
+
+def fun_l6_n715(x)
+ if (x < 1)
+ fun_l7_n452(x)
+ else
+ fun_l7_n68(x)
+ end
+end
+
+def fun_l6_n716(x)
+ if (x < 1)
+ fun_l7_n203(x)
+ else
+ fun_l7_n362(x)
+ end
+end
+
+def fun_l6_n717(x)
+ if (x < 1)
+ fun_l7_n455(x)
+ else
+ fun_l7_n199(x)
+ end
+end
+
+def fun_l6_n718(x)
+ if (x < 1)
+ fun_l7_n500(x)
+ else
+ fun_l7_n272(x)
+ end
+end
+
+def fun_l6_n719(x)
+ if (x < 1)
+ fun_l7_n970(x)
+ else
+ fun_l7_n572(x)
+ end
+end
+
+def fun_l6_n720(x)
+ if (x < 1)
+ fun_l7_n74(x)
+ else
+ fun_l7_n246(x)
+ end
+end
+
+def fun_l6_n721(x)
+ if (x < 1)
+ fun_l7_n943(x)
+ else
+ fun_l7_n640(x)
+ end
+end
+
+def fun_l6_n722(x)
+ if (x < 1)
+ fun_l7_n106(x)
+ else
+ fun_l7_n387(x)
+ end
+end
+
+def fun_l6_n723(x)
+ if (x < 1)
+ fun_l7_n474(x)
+ else
+ fun_l7_n530(x)
+ end
+end
+
+def fun_l6_n724(x)
+ if (x < 1)
+ fun_l7_n246(x)
+ else
+ fun_l7_n387(x)
+ end
+end
+
+def fun_l6_n725(x)
+ if (x < 1)
+ fun_l7_n572(x)
+ else
+ fun_l7_n874(x)
+ end
+end
+
+def fun_l6_n726(x)
+ if (x < 1)
+ fun_l7_n858(x)
+ else
+ fun_l7_n71(x)
+ end
+end
+
+def fun_l6_n727(x)
+ if (x < 1)
+ fun_l7_n615(x)
+ else
+ fun_l7_n14(x)
+ end
+end
+
+def fun_l6_n728(x)
+ if (x < 1)
+ fun_l7_n840(x)
+ else
+ fun_l7_n779(x)
+ end
+end
+
+def fun_l6_n729(x)
+ if (x < 1)
+ fun_l7_n811(x)
+ else
+ fun_l7_n981(x)
+ end
+end
+
+def fun_l6_n730(x)
+ if (x < 1)
+ fun_l7_n196(x)
+ else
+ fun_l7_n731(x)
+ end
+end
+
+def fun_l6_n731(x)
+ if (x < 1)
+ fun_l7_n202(x)
+ else
+ fun_l7_n781(x)
+ end
+end
+
+def fun_l6_n732(x)
+ if (x < 1)
+ fun_l7_n867(x)
+ else
+ fun_l7_n770(x)
+ end
+end
+
+def fun_l6_n733(x)
+ if (x < 1)
+ fun_l7_n90(x)
+ else
+ fun_l7_n937(x)
+ end
+end
+
+def fun_l6_n734(x)
+ if (x < 1)
+ fun_l7_n890(x)
+ else
+ fun_l7_n937(x)
+ end
+end
+
+def fun_l6_n735(x)
+ if (x < 1)
+ fun_l7_n967(x)
+ else
+ fun_l7_n235(x)
+ end
+end
+
+def fun_l6_n736(x)
+ if (x < 1)
+ fun_l7_n612(x)
+ else
+ fun_l7_n140(x)
+ end
+end
+
+def fun_l6_n737(x)
+ if (x < 1)
+ fun_l7_n156(x)
+ else
+ fun_l7_n600(x)
+ end
+end
+
+def fun_l6_n738(x)
+ if (x < 1)
+ fun_l7_n462(x)
+ else
+ fun_l7_n907(x)
+ end
+end
+
+def fun_l6_n739(x)
+ if (x < 1)
+ fun_l7_n226(x)
+ else
+ fun_l7_n83(x)
+ end
+end
+
+def fun_l6_n740(x)
+ if (x < 1)
+ fun_l7_n419(x)
+ else
+ fun_l7_n95(x)
+ end
+end
+
+def fun_l6_n741(x)
+ if (x < 1)
+ fun_l7_n358(x)
+ else
+ fun_l7_n701(x)
+ end
+end
+
+def fun_l6_n742(x)
+ if (x < 1)
+ fun_l7_n451(x)
+ else
+ fun_l7_n700(x)
+ end
+end
+
+def fun_l6_n743(x)
+ if (x < 1)
+ fun_l7_n561(x)
+ else
+ fun_l7_n383(x)
+ end
+end
+
+def fun_l6_n744(x)
+ if (x < 1)
+ fun_l7_n28(x)
+ else
+ fun_l7_n56(x)
+ end
+end
+
+def fun_l6_n745(x)
+ if (x < 1)
+ fun_l7_n127(x)
+ else
+ fun_l7_n113(x)
+ end
+end
+
+def fun_l6_n746(x)
+ if (x < 1)
+ fun_l7_n767(x)
+ else
+ fun_l7_n907(x)
+ end
+end
+
+def fun_l6_n747(x)
+ if (x < 1)
+ fun_l7_n174(x)
+ else
+ fun_l7_n955(x)
+ end
+end
+
+def fun_l6_n748(x)
+ if (x < 1)
+ fun_l7_n51(x)
+ else
+ fun_l7_n951(x)
+ end
+end
+
+def fun_l6_n749(x)
+ if (x < 1)
+ fun_l7_n172(x)
+ else
+ fun_l7_n847(x)
+ end
+end
+
+def fun_l6_n750(x)
+ if (x < 1)
+ fun_l7_n240(x)
+ else
+ fun_l7_n869(x)
+ end
+end
+
+def fun_l6_n751(x)
+ if (x < 1)
+ fun_l7_n435(x)
+ else
+ fun_l7_n747(x)
+ end
+end
+
+def fun_l6_n752(x)
+ if (x < 1)
+ fun_l7_n673(x)
+ else
+ fun_l7_n454(x)
+ end
+end
+
+def fun_l6_n753(x)
+ if (x < 1)
+ fun_l7_n98(x)
+ else
+ fun_l7_n66(x)
+ end
+end
+
+def fun_l6_n754(x)
+ if (x < 1)
+ fun_l7_n63(x)
+ else
+ fun_l7_n943(x)
+ end
+end
+
+def fun_l6_n755(x)
+ if (x < 1)
+ fun_l7_n863(x)
+ else
+ fun_l7_n155(x)
+ end
+end
+
+def fun_l6_n756(x)
+ if (x < 1)
+ fun_l7_n197(x)
+ else
+ fun_l7_n807(x)
+ end
+end
+
+def fun_l6_n757(x)
+ if (x < 1)
+ fun_l7_n992(x)
+ else
+ fun_l7_n615(x)
+ end
+end
+
+def fun_l6_n758(x)
+ if (x < 1)
+ fun_l7_n172(x)
+ else
+ fun_l7_n507(x)
+ end
+end
+
+def fun_l6_n759(x)
+ if (x < 1)
+ fun_l7_n756(x)
+ else
+ fun_l7_n599(x)
+ end
+end
+
+def fun_l6_n760(x)
+ if (x < 1)
+ fun_l7_n876(x)
+ else
+ fun_l7_n185(x)
+ end
+end
+
+def fun_l6_n761(x)
+ if (x < 1)
+ fun_l7_n522(x)
+ else
+ fun_l7_n301(x)
+ end
+end
+
+def fun_l6_n762(x)
+ if (x < 1)
+ fun_l7_n994(x)
+ else
+ fun_l7_n408(x)
+ end
+end
+
+def fun_l6_n763(x)
+ if (x < 1)
+ fun_l7_n201(x)
+ else
+ fun_l7_n304(x)
+ end
+end
+
+def fun_l6_n764(x)
+ if (x < 1)
+ fun_l7_n200(x)
+ else
+ fun_l7_n123(x)
+ end
+end
+
+def fun_l6_n765(x)
+ if (x < 1)
+ fun_l7_n156(x)
+ else
+ fun_l7_n117(x)
+ end
+end
+
+def fun_l6_n766(x)
+ if (x < 1)
+ fun_l7_n918(x)
+ else
+ fun_l7_n416(x)
+ end
+end
+
+def fun_l6_n767(x)
+ if (x < 1)
+ fun_l7_n538(x)
+ else
+ fun_l7_n335(x)
+ end
+end
+
+def fun_l6_n768(x)
+ if (x < 1)
+ fun_l7_n699(x)
+ else
+ fun_l7_n980(x)
+ end
+end
+
+def fun_l6_n769(x)
+ if (x < 1)
+ fun_l7_n903(x)
+ else
+ fun_l7_n195(x)
+ end
+end
+
+def fun_l6_n770(x)
+ if (x < 1)
+ fun_l7_n419(x)
+ else
+ fun_l7_n523(x)
+ end
+end
+
+def fun_l6_n771(x)
+ if (x < 1)
+ fun_l7_n221(x)
+ else
+ fun_l7_n39(x)
+ end
+end
+
+def fun_l6_n772(x)
+ if (x < 1)
+ fun_l7_n369(x)
+ else
+ fun_l7_n227(x)
+ end
+end
+
+def fun_l6_n773(x)
+ if (x < 1)
+ fun_l7_n861(x)
+ else
+ fun_l7_n252(x)
+ end
+end
+
+def fun_l6_n774(x)
+ if (x < 1)
+ fun_l7_n682(x)
+ else
+ fun_l7_n42(x)
+ end
+end
+
+def fun_l6_n775(x)
+ if (x < 1)
+ fun_l7_n777(x)
+ else
+ fun_l7_n594(x)
+ end
+end
+
+def fun_l6_n776(x)
+ if (x < 1)
+ fun_l7_n794(x)
+ else
+ fun_l7_n71(x)
+ end
+end
+
+def fun_l6_n777(x)
+ if (x < 1)
+ fun_l7_n669(x)
+ else
+ fun_l7_n66(x)
+ end
+end
+
+def fun_l6_n778(x)
+ if (x < 1)
+ fun_l7_n824(x)
+ else
+ fun_l7_n95(x)
+ end
+end
+
+def fun_l6_n779(x)
+ if (x < 1)
+ fun_l7_n833(x)
+ else
+ fun_l7_n504(x)
+ end
+end
+
+def fun_l6_n780(x)
+ if (x < 1)
+ fun_l7_n50(x)
+ else
+ fun_l7_n647(x)
+ end
+end
+
+def fun_l6_n781(x)
+ if (x < 1)
+ fun_l7_n139(x)
+ else
+ fun_l7_n214(x)
+ end
+end
+
+def fun_l6_n782(x)
+ if (x < 1)
+ fun_l7_n450(x)
+ else
+ fun_l7_n660(x)
+ end
+end
+
+def fun_l6_n783(x)
+ if (x < 1)
+ fun_l7_n164(x)
+ else
+ fun_l7_n576(x)
+ end
+end
+
+def fun_l6_n784(x)
+ if (x < 1)
+ fun_l7_n722(x)
+ else
+ fun_l7_n714(x)
+ end
+end
+
+def fun_l6_n785(x)
+ if (x < 1)
+ fun_l7_n90(x)
+ else
+ fun_l7_n556(x)
+ end
+end
+
+def fun_l6_n786(x)
+ if (x < 1)
+ fun_l7_n413(x)
+ else
+ fun_l7_n722(x)
+ end
+end
+
+def fun_l6_n787(x)
+ if (x < 1)
+ fun_l7_n141(x)
+ else
+ fun_l7_n90(x)
+ end
+end
+
+def fun_l6_n788(x)
+ if (x < 1)
+ fun_l7_n750(x)
+ else
+ fun_l7_n660(x)
+ end
+end
+
+def fun_l6_n789(x)
+ if (x < 1)
+ fun_l7_n581(x)
+ else
+ fun_l7_n368(x)
+ end
+end
+
+def fun_l6_n790(x)
+ if (x < 1)
+ fun_l7_n922(x)
+ else
+ fun_l7_n551(x)
+ end
+end
+
+def fun_l6_n791(x)
+ if (x < 1)
+ fun_l7_n842(x)
+ else
+ fun_l7_n336(x)
+ end
+end
+
+def fun_l6_n792(x)
+ if (x < 1)
+ fun_l7_n264(x)
+ else
+ fun_l7_n7(x)
+ end
+end
+
+def fun_l6_n793(x)
+ if (x < 1)
+ fun_l7_n902(x)
+ else
+ fun_l7_n184(x)
+ end
+end
+
+def fun_l6_n794(x)
+ if (x < 1)
+ fun_l7_n788(x)
+ else
+ fun_l7_n854(x)
+ end
+end
+
+def fun_l6_n795(x)
+ if (x < 1)
+ fun_l7_n375(x)
+ else
+ fun_l7_n601(x)
+ end
+end
+
+def fun_l6_n796(x)
+ if (x < 1)
+ fun_l7_n674(x)
+ else
+ fun_l7_n136(x)
+ end
+end
+
+def fun_l6_n797(x)
+ if (x < 1)
+ fun_l7_n836(x)
+ else
+ fun_l7_n90(x)
+ end
+end
+
+def fun_l6_n798(x)
+ if (x < 1)
+ fun_l7_n461(x)
+ else
+ fun_l7_n686(x)
+ end
+end
+
+def fun_l6_n799(x)
+ if (x < 1)
+ fun_l7_n308(x)
+ else
+ fun_l7_n179(x)
+ end
+end
+
+def fun_l6_n800(x)
+ if (x < 1)
+ fun_l7_n154(x)
+ else
+ fun_l7_n618(x)
+ end
+end
+
+def fun_l6_n801(x)
+ if (x < 1)
+ fun_l7_n242(x)
+ else
+ fun_l7_n16(x)
+ end
+end
+
+def fun_l6_n802(x)
+ if (x < 1)
+ fun_l7_n880(x)
+ else
+ fun_l7_n143(x)
+ end
+end
+
+def fun_l6_n803(x)
+ if (x < 1)
+ fun_l7_n577(x)
+ else
+ fun_l7_n414(x)
+ end
+end
+
+def fun_l6_n804(x)
+ if (x < 1)
+ fun_l7_n409(x)
+ else
+ fun_l7_n116(x)
+ end
+end
+
+def fun_l6_n805(x)
+ if (x < 1)
+ fun_l7_n259(x)
+ else
+ fun_l7_n820(x)
+ end
+end
+
+def fun_l6_n806(x)
+ if (x < 1)
+ fun_l7_n384(x)
+ else
+ fun_l7_n939(x)
+ end
+end
+
+def fun_l6_n807(x)
+ if (x < 1)
+ fun_l7_n138(x)
+ else
+ fun_l7_n652(x)
+ end
+end
+
+def fun_l6_n808(x)
+ if (x < 1)
+ fun_l7_n455(x)
+ else
+ fun_l7_n693(x)
+ end
+end
+
+def fun_l6_n809(x)
+ if (x < 1)
+ fun_l7_n892(x)
+ else
+ fun_l7_n638(x)
+ end
+end
+
+def fun_l6_n810(x)
+ if (x < 1)
+ fun_l7_n498(x)
+ else
+ fun_l7_n716(x)
+ end
+end
+
+def fun_l6_n811(x)
+ if (x < 1)
+ fun_l7_n713(x)
+ else
+ fun_l7_n9(x)
+ end
+end
+
+def fun_l6_n812(x)
+ if (x < 1)
+ fun_l7_n854(x)
+ else
+ fun_l7_n507(x)
+ end
+end
+
+def fun_l6_n813(x)
+ if (x < 1)
+ fun_l7_n385(x)
+ else
+ fun_l7_n323(x)
+ end
+end
+
+def fun_l6_n814(x)
+ if (x < 1)
+ fun_l7_n437(x)
+ else
+ fun_l7_n954(x)
+ end
+end
+
+def fun_l6_n815(x)
+ if (x < 1)
+ fun_l7_n471(x)
+ else
+ fun_l7_n245(x)
+ end
+end
+
+def fun_l6_n816(x)
+ if (x < 1)
+ fun_l7_n485(x)
+ else
+ fun_l7_n935(x)
+ end
+end
+
+def fun_l6_n817(x)
+ if (x < 1)
+ fun_l7_n319(x)
+ else
+ fun_l7_n566(x)
+ end
+end
+
+def fun_l6_n818(x)
+ if (x < 1)
+ fun_l7_n339(x)
+ else
+ fun_l7_n152(x)
+ end
+end
+
+def fun_l6_n819(x)
+ if (x < 1)
+ fun_l7_n21(x)
+ else
+ fun_l7_n452(x)
+ end
+end
+
+def fun_l6_n820(x)
+ if (x < 1)
+ fun_l7_n16(x)
+ else
+ fun_l7_n502(x)
+ end
+end
+
+def fun_l6_n821(x)
+ if (x < 1)
+ fun_l7_n813(x)
+ else
+ fun_l7_n520(x)
+ end
+end
+
+def fun_l6_n822(x)
+ if (x < 1)
+ fun_l7_n519(x)
+ else
+ fun_l7_n651(x)
+ end
+end
+
+def fun_l6_n823(x)
+ if (x < 1)
+ fun_l7_n890(x)
+ else
+ fun_l7_n227(x)
+ end
+end
+
+def fun_l6_n824(x)
+ if (x < 1)
+ fun_l7_n517(x)
+ else
+ fun_l7_n799(x)
+ end
+end
+
+def fun_l6_n825(x)
+ if (x < 1)
+ fun_l7_n404(x)
+ else
+ fun_l7_n442(x)
+ end
+end
+
+def fun_l6_n826(x)
+ if (x < 1)
+ fun_l7_n308(x)
+ else
+ fun_l7_n328(x)
+ end
+end
+
+def fun_l6_n827(x)
+ if (x < 1)
+ fun_l7_n953(x)
+ else
+ fun_l7_n950(x)
+ end
+end
+
+def fun_l6_n828(x)
+ if (x < 1)
+ fun_l7_n206(x)
+ else
+ fun_l7_n701(x)
+ end
+end
+
+def fun_l6_n829(x)
+ if (x < 1)
+ fun_l7_n499(x)
+ else
+ fun_l7_n972(x)
+ end
+end
+
+def fun_l6_n830(x)
+ if (x < 1)
+ fun_l7_n578(x)
+ else
+ fun_l7_n697(x)
+ end
+end
+
+def fun_l6_n831(x)
+ if (x < 1)
+ fun_l7_n116(x)
+ else
+ fun_l7_n747(x)
+ end
+end
+
+def fun_l6_n832(x)
+ if (x < 1)
+ fun_l7_n423(x)
+ else
+ fun_l7_n653(x)
+ end
+end
+
+def fun_l6_n833(x)
+ if (x < 1)
+ fun_l7_n524(x)
+ else
+ fun_l7_n423(x)
+ end
+end
+
+def fun_l6_n834(x)
+ if (x < 1)
+ fun_l7_n940(x)
+ else
+ fun_l7_n48(x)
+ end
+end
+
+def fun_l6_n835(x)
+ if (x < 1)
+ fun_l7_n336(x)
+ else
+ fun_l7_n584(x)
+ end
+end
+
+def fun_l6_n836(x)
+ if (x < 1)
+ fun_l7_n66(x)
+ else
+ fun_l7_n980(x)
+ end
+end
+
+def fun_l6_n837(x)
+ if (x < 1)
+ fun_l7_n176(x)
+ else
+ fun_l7_n845(x)
+ end
+end
+
+def fun_l6_n838(x)
+ if (x < 1)
+ fun_l7_n736(x)
+ else
+ fun_l7_n385(x)
+ end
+end
+
+def fun_l6_n839(x)
+ if (x < 1)
+ fun_l7_n948(x)
+ else
+ fun_l7_n258(x)
+ end
+end
+
+def fun_l6_n840(x)
+ if (x < 1)
+ fun_l7_n926(x)
+ else
+ fun_l7_n926(x)
+ end
+end
+
+def fun_l6_n841(x)
+ if (x < 1)
+ fun_l7_n334(x)
+ else
+ fun_l7_n134(x)
+ end
+end
+
+def fun_l6_n842(x)
+ if (x < 1)
+ fun_l7_n757(x)
+ else
+ fun_l7_n995(x)
+ end
+end
+
+def fun_l6_n843(x)
+ if (x < 1)
+ fun_l7_n75(x)
+ else
+ fun_l7_n6(x)
+ end
+end
+
+def fun_l6_n844(x)
+ if (x < 1)
+ fun_l7_n632(x)
+ else
+ fun_l7_n683(x)
+ end
+end
+
+def fun_l6_n845(x)
+ if (x < 1)
+ fun_l7_n788(x)
+ else
+ fun_l7_n153(x)
+ end
+end
+
+def fun_l6_n846(x)
+ if (x < 1)
+ fun_l7_n668(x)
+ else
+ fun_l7_n78(x)
+ end
+end
+
+def fun_l6_n847(x)
+ if (x < 1)
+ fun_l7_n509(x)
+ else
+ fun_l7_n210(x)
+ end
+end
+
+def fun_l6_n848(x)
+ if (x < 1)
+ fun_l7_n862(x)
+ else
+ fun_l7_n90(x)
+ end
+end
+
+def fun_l6_n849(x)
+ if (x < 1)
+ fun_l7_n837(x)
+ else
+ fun_l7_n37(x)
+ end
+end
+
+def fun_l6_n850(x)
+ if (x < 1)
+ fun_l7_n792(x)
+ else
+ fun_l7_n171(x)
+ end
+end
+
+def fun_l6_n851(x)
+ if (x < 1)
+ fun_l7_n869(x)
+ else
+ fun_l7_n217(x)
+ end
+end
+
+def fun_l6_n852(x)
+ if (x < 1)
+ fun_l7_n585(x)
+ else
+ fun_l7_n980(x)
+ end
+end
+
+def fun_l6_n853(x)
+ if (x < 1)
+ fun_l7_n752(x)
+ else
+ fun_l7_n214(x)
+ end
+end
+
+def fun_l6_n854(x)
+ if (x < 1)
+ fun_l7_n151(x)
+ else
+ fun_l7_n668(x)
+ end
+end
+
+def fun_l6_n855(x)
+ if (x < 1)
+ fun_l7_n145(x)
+ else
+ fun_l7_n99(x)
+ end
+end
+
+def fun_l6_n856(x)
+ if (x < 1)
+ fun_l7_n114(x)
+ else
+ fun_l7_n852(x)
+ end
+end
+
+def fun_l6_n857(x)
+ if (x < 1)
+ fun_l7_n571(x)
+ else
+ fun_l7_n6(x)
+ end
+end
+
+def fun_l6_n858(x)
+ if (x < 1)
+ fun_l7_n724(x)
+ else
+ fun_l7_n132(x)
+ end
+end
+
+def fun_l6_n859(x)
+ if (x < 1)
+ fun_l7_n146(x)
+ else
+ fun_l7_n627(x)
+ end
+end
+
+def fun_l6_n860(x)
+ if (x < 1)
+ fun_l7_n515(x)
+ else
+ fun_l7_n598(x)
+ end
+end
+
+def fun_l6_n861(x)
+ if (x < 1)
+ fun_l7_n49(x)
+ else
+ fun_l7_n781(x)
+ end
+end
+
+def fun_l6_n862(x)
+ if (x < 1)
+ fun_l7_n378(x)
+ else
+ fun_l7_n295(x)
+ end
+end
+
+def fun_l6_n863(x)
+ if (x < 1)
+ fun_l7_n122(x)
+ else
+ fun_l7_n738(x)
+ end
+end
+
+def fun_l6_n864(x)
+ if (x < 1)
+ fun_l7_n421(x)
+ else
+ fun_l7_n719(x)
+ end
+end
+
+def fun_l6_n865(x)
+ if (x < 1)
+ fun_l7_n965(x)
+ else
+ fun_l7_n963(x)
+ end
+end
+
+def fun_l6_n866(x)
+ if (x < 1)
+ fun_l7_n551(x)
+ else
+ fun_l7_n177(x)
+ end
+end
+
+def fun_l6_n867(x)
+ if (x < 1)
+ fun_l7_n136(x)
+ else
+ fun_l7_n289(x)
+ end
+end
+
+def fun_l6_n868(x)
+ if (x < 1)
+ fun_l7_n26(x)
+ else
+ fun_l7_n376(x)
+ end
+end
+
+def fun_l6_n869(x)
+ if (x < 1)
+ fun_l7_n888(x)
+ else
+ fun_l7_n948(x)
+ end
+end
+
+def fun_l6_n870(x)
+ if (x < 1)
+ fun_l7_n636(x)
+ else
+ fun_l7_n89(x)
+ end
+end
+
+def fun_l6_n871(x)
+ if (x < 1)
+ fun_l7_n953(x)
+ else
+ fun_l7_n634(x)
+ end
+end
+
+def fun_l6_n872(x)
+ if (x < 1)
+ fun_l7_n74(x)
+ else
+ fun_l7_n219(x)
+ end
+end
+
+def fun_l6_n873(x)
+ if (x < 1)
+ fun_l7_n317(x)
+ else
+ fun_l7_n863(x)
+ end
+end
+
+def fun_l6_n874(x)
+ if (x < 1)
+ fun_l7_n495(x)
+ else
+ fun_l7_n478(x)
+ end
+end
+
+def fun_l6_n875(x)
+ if (x < 1)
+ fun_l7_n908(x)
+ else
+ fun_l7_n634(x)
+ end
+end
+
+def fun_l6_n876(x)
+ if (x < 1)
+ fun_l7_n780(x)
+ else
+ fun_l7_n886(x)
+ end
+end
+
+def fun_l6_n877(x)
+ if (x < 1)
+ fun_l7_n768(x)
+ else
+ fun_l7_n820(x)
+ end
+end
+
+def fun_l6_n878(x)
+ if (x < 1)
+ fun_l7_n501(x)
+ else
+ fun_l7_n355(x)
+ end
+end
+
+def fun_l6_n879(x)
+ if (x < 1)
+ fun_l7_n412(x)
+ else
+ fun_l7_n701(x)
+ end
+end
+
+def fun_l6_n880(x)
+ if (x < 1)
+ fun_l7_n541(x)
+ else
+ fun_l7_n148(x)
+ end
+end
+
+def fun_l6_n881(x)
+ if (x < 1)
+ fun_l7_n460(x)
+ else
+ fun_l7_n579(x)
+ end
+end
+
+def fun_l6_n882(x)
+ if (x < 1)
+ fun_l7_n576(x)
+ else
+ fun_l7_n118(x)
+ end
+end
+
+def fun_l6_n883(x)
+ if (x < 1)
+ fun_l7_n218(x)
+ else
+ fun_l7_n197(x)
+ end
+end
+
+def fun_l6_n884(x)
+ if (x < 1)
+ fun_l7_n279(x)
+ else
+ fun_l7_n565(x)
+ end
+end
+
+def fun_l6_n885(x)
+ if (x < 1)
+ fun_l7_n934(x)
+ else
+ fun_l7_n46(x)
+ end
+end
+
+def fun_l6_n886(x)
+ if (x < 1)
+ fun_l7_n894(x)
+ else
+ fun_l7_n864(x)
+ end
+end
+
+def fun_l6_n887(x)
+ if (x < 1)
+ fun_l7_n45(x)
+ else
+ fun_l7_n151(x)
+ end
+end
+
+def fun_l6_n888(x)
+ if (x < 1)
+ fun_l7_n190(x)
+ else
+ fun_l7_n46(x)
+ end
+end
+
+def fun_l6_n889(x)
+ if (x < 1)
+ fun_l7_n56(x)
+ else
+ fun_l7_n451(x)
+ end
+end
+
+def fun_l6_n890(x)
+ if (x < 1)
+ fun_l7_n7(x)
+ else
+ fun_l7_n906(x)
+ end
+end
+
+def fun_l6_n891(x)
+ if (x < 1)
+ fun_l7_n507(x)
+ else
+ fun_l7_n121(x)
+ end
+end
+
+def fun_l6_n892(x)
+ if (x < 1)
+ fun_l7_n757(x)
+ else
+ fun_l7_n485(x)
+ end
+end
+
+def fun_l6_n893(x)
+ if (x < 1)
+ fun_l7_n242(x)
+ else
+ fun_l7_n366(x)
+ end
+end
+
+def fun_l6_n894(x)
+ if (x < 1)
+ fun_l7_n563(x)
+ else
+ fun_l7_n749(x)
+ end
+end
+
+def fun_l6_n895(x)
+ if (x < 1)
+ fun_l7_n976(x)
+ else
+ fun_l7_n907(x)
+ end
+end
+
+def fun_l6_n896(x)
+ if (x < 1)
+ fun_l7_n525(x)
+ else
+ fun_l7_n843(x)
+ end
+end
+
+def fun_l6_n897(x)
+ if (x < 1)
+ fun_l7_n255(x)
+ else
+ fun_l7_n133(x)
+ end
+end
+
+def fun_l6_n898(x)
+ if (x < 1)
+ fun_l7_n796(x)
+ else
+ fun_l7_n275(x)
+ end
+end
+
+def fun_l6_n899(x)
+ if (x < 1)
+ fun_l7_n985(x)
+ else
+ fun_l7_n485(x)
+ end
+end
+
+def fun_l6_n900(x)
+ if (x < 1)
+ fun_l7_n32(x)
+ else
+ fun_l7_n324(x)
+ end
+end
+
+def fun_l6_n901(x)
+ if (x < 1)
+ fun_l7_n334(x)
+ else
+ fun_l7_n618(x)
+ end
+end
+
+def fun_l6_n902(x)
+ if (x < 1)
+ fun_l7_n762(x)
+ else
+ fun_l7_n778(x)
+ end
+end
+
+def fun_l6_n903(x)
+ if (x < 1)
+ fun_l7_n343(x)
+ else
+ fun_l7_n349(x)
+ end
+end
+
+def fun_l6_n904(x)
+ if (x < 1)
+ fun_l7_n310(x)
+ else
+ fun_l7_n215(x)
+ end
+end
+
+def fun_l6_n905(x)
+ if (x < 1)
+ fun_l7_n162(x)
+ else
+ fun_l7_n405(x)
+ end
+end
+
+def fun_l6_n906(x)
+ if (x < 1)
+ fun_l7_n667(x)
+ else
+ fun_l7_n633(x)
+ end
+end
+
+def fun_l6_n907(x)
+ if (x < 1)
+ fun_l7_n652(x)
+ else
+ fun_l7_n771(x)
+ end
+end
+
+def fun_l6_n908(x)
+ if (x < 1)
+ fun_l7_n198(x)
+ else
+ fun_l7_n32(x)
+ end
+end
+
+def fun_l6_n909(x)
+ if (x < 1)
+ fun_l7_n577(x)
+ else
+ fun_l7_n116(x)
+ end
+end
+
+def fun_l6_n910(x)
+ if (x < 1)
+ fun_l7_n63(x)
+ else
+ fun_l7_n57(x)
+ end
+end
+
+def fun_l6_n911(x)
+ if (x < 1)
+ fun_l7_n908(x)
+ else
+ fun_l7_n556(x)
+ end
+end
+
+def fun_l6_n912(x)
+ if (x < 1)
+ fun_l7_n420(x)
+ else
+ fun_l7_n163(x)
+ end
+end
+
+def fun_l6_n913(x)
+ if (x < 1)
+ fun_l7_n795(x)
+ else
+ fun_l7_n225(x)
+ end
+end
+
+def fun_l6_n914(x)
+ if (x < 1)
+ fun_l7_n855(x)
+ else
+ fun_l7_n742(x)
+ end
+end
+
+def fun_l6_n915(x)
+ if (x < 1)
+ fun_l7_n386(x)
+ else
+ fun_l7_n314(x)
+ end
+end
+
+def fun_l6_n916(x)
+ if (x < 1)
+ fun_l7_n587(x)
+ else
+ fun_l7_n371(x)
+ end
+end
+
+def fun_l6_n917(x)
+ if (x < 1)
+ fun_l7_n570(x)
+ else
+ fun_l7_n735(x)
+ end
+end
+
+def fun_l6_n918(x)
+ if (x < 1)
+ fun_l7_n985(x)
+ else
+ fun_l7_n492(x)
+ end
+end
+
+def fun_l6_n919(x)
+ if (x < 1)
+ fun_l7_n991(x)
+ else
+ fun_l7_n454(x)
+ end
+end
+
+def fun_l6_n920(x)
+ if (x < 1)
+ fun_l7_n925(x)
+ else
+ fun_l7_n161(x)
+ end
+end
+
+def fun_l6_n921(x)
+ if (x < 1)
+ fun_l7_n398(x)
+ else
+ fun_l7_n621(x)
+ end
+end
+
+def fun_l6_n922(x)
+ if (x < 1)
+ fun_l7_n732(x)
+ else
+ fun_l7_n509(x)
+ end
+end
+
+def fun_l6_n923(x)
+ if (x < 1)
+ fun_l7_n879(x)
+ else
+ fun_l7_n219(x)
+ end
+end
+
+def fun_l6_n924(x)
+ if (x < 1)
+ fun_l7_n19(x)
+ else
+ fun_l7_n604(x)
+ end
+end
+
+def fun_l6_n925(x)
+ if (x < 1)
+ fun_l7_n474(x)
+ else
+ fun_l7_n439(x)
+ end
+end
+
+def fun_l6_n926(x)
+ if (x < 1)
+ fun_l7_n807(x)
+ else
+ fun_l7_n802(x)
+ end
+end
+
+def fun_l6_n927(x)
+ if (x < 1)
+ fun_l7_n146(x)
+ else
+ fun_l7_n966(x)
+ end
+end
+
+def fun_l6_n928(x)
+ if (x < 1)
+ fun_l7_n72(x)
+ else
+ fun_l7_n835(x)
+ end
+end
+
+def fun_l6_n929(x)
+ if (x < 1)
+ fun_l7_n389(x)
+ else
+ fun_l7_n951(x)
+ end
+end
+
+def fun_l6_n930(x)
+ if (x < 1)
+ fun_l7_n104(x)
+ else
+ fun_l7_n719(x)
+ end
+end
+
+def fun_l6_n931(x)
+ if (x < 1)
+ fun_l7_n250(x)
+ else
+ fun_l7_n13(x)
+ end
+end
+
+def fun_l6_n932(x)
+ if (x < 1)
+ fun_l7_n470(x)
+ else
+ fun_l7_n984(x)
+ end
+end
+
+def fun_l6_n933(x)
+ if (x < 1)
+ fun_l7_n485(x)
+ else
+ fun_l7_n750(x)
+ end
+end
+
+def fun_l6_n934(x)
+ if (x < 1)
+ fun_l7_n371(x)
+ else
+ fun_l7_n912(x)
+ end
+end
+
+def fun_l6_n935(x)
+ if (x < 1)
+ fun_l7_n686(x)
+ else
+ fun_l7_n523(x)
+ end
+end
+
+def fun_l6_n936(x)
+ if (x < 1)
+ fun_l7_n998(x)
+ else
+ fun_l7_n6(x)
+ end
+end
+
+def fun_l6_n937(x)
+ if (x < 1)
+ fun_l7_n753(x)
+ else
+ fun_l7_n781(x)
+ end
+end
+
+def fun_l6_n938(x)
+ if (x < 1)
+ fun_l7_n518(x)
+ else
+ fun_l7_n18(x)
+ end
+end
+
+def fun_l6_n939(x)
+ if (x < 1)
+ fun_l7_n771(x)
+ else
+ fun_l7_n1(x)
+ end
+end
+
+def fun_l6_n940(x)
+ if (x < 1)
+ fun_l7_n43(x)
+ else
+ fun_l7_n727(x)
+ end
+end
+
+def fun_l6_n941(x)
+ if (x < 1)
+ fun_l7_n282(x)
+ else
+ fun_l7_n676(x)
+ end
+end
+
+def fun_l6_n942(x)
+ if (x < 1)
+ fun_l7_n284(x)
+ else
+ fun_l7_n56(x)
+ end
+end
+
+def fun_l6_n943(x)
+ if (x < 1)
+ fun_l7_n304(x)
+ else
+ fun_l7_n287(x)
+ end
+end
+
+def fun_l6_n944(x)
+ if (x < 1)
+ fun_l7_n968(x)
+ else
+ fun_l7_n283(x)
+ end
+end
+
+def fun_l6_n945(x)
+ if (x < 1)
+ fun_l7_n892(x)
+ else
+ fun_l7_n413(x)
+ end
+end
+
+def fun_l6_n946(x)
+ if (x < 1)
+ fun_l7_n750(x)
+ else
+ fun_l7_n244(x)
+ end
+end
+
+def fun_l6_n947(x)
+ if (x < 1)
+ fun_l7_n599(x)
+ else
+ fun_l7_n238(x)
+ end
+end
+
+def fun_l6_n948(x)
+ if (x < 1)
+ fun_l7_n447(x)
+ else
+ fun_l7_n880(x)
+ end
+end
+
+def fun_l6_n949(x)
+ if (x < 1)
+ fun_l7_n242(x)
+ else
+ fun_l7_n210(x)
+ end
+end
+
+def fun_l6_n950(x)
+ if (x < 1)
+ fun_l7_n143(x)
+ else
+ fun_l7_n816(x)
+ end
+end
+
+def fun_l6_n951(x)
+ if (x < 1)
+ fun_l7_n125(x)
+ else
+ fun_l7_n909(x)
+ end
+end
+
+def fun_l6_n952(x)
+ if (x < 1)
+ fun_l7_n134(x)
+ else
+ fun_l7_n946(x)
+ end
+end
+
+def fun_l6_n953(x)
+ if (x < 1)
+ fun_l7_n858(x)
+ else
+ fun_l7_n927(x)
+ end
+end
+
+def fun_l6_n954(x)
+ if (x < 1)
+ fun_l7_n853(x)
+ else
+ fun_l7_n396(x)
+ end
+end
+
+def fun_l6_n955(x)
+ if (x < 1)
+ fun_l7_n725(x)
+ else
+ fun_l7_n42(x)
+ end
+end
+
+def fun_l6_n956(x)
+ if (x < 1)
+ fun_l7_n108(x)
+ else
+ fun_l7_n177(x)
+ end
+end
+
+def fun_l6_n957(x)
+ if (x < 1)
+ fun_l7_n742(x)
+ else
+ fun_l7_n482(x)
+ end
+end
+
+def fun_l6_n958(x)
+ if (x < 1)
+ fun_l7_n385(x)
+ else
+ fun_l7_n292(x)
+ end
+end
+
+def fun_l6_n959(x)
+ if (x < 1)
+ fun_l7_n325(x)
+ else
+ fun_l7_n27(x)
+ end
+end
+
+def fun_l6_n960(x)
+ if (x < 1)
+ fun_l7_n558(x)
+ else
+ fun_l7_n556(x)
+ end
+end
+
+def fun_l6_n961(x)
+ if (x < 1)
+ fun_l7_n472(x)
+ else
+ fun_l7_n322(x)
+ end
+end
+
+def fun_l6_n962(x)
+ if (x < 1)
+ fun_l7_n754(x)
+ else
+ fun_l7_n729(x)
+ end
+end
+
+def fun_l6_n963(x)
+ if (x < 1)
+ fun_l7_n35(x)
+ else
+ fun_l7_n232(x)
+ end
+end
+
+def fun_l6_n964(x)
+ if (x < 1)
+ fun_l7_n113(x)
+ else
+ fun_l7_n878(x)
+ end
+end
+
+def fun_l6_n965(x)
+ if (x < 1)
+ fun_l7_n982(x)
+ else
+ fun_l7_n404(x)
+ end
+end
+
+def fun_l6_n966(x)
+ if (x < 1)
+ fun_l7_n385(x)
+ else
+ fun_l7_n20(x)
+ end
+end
+
+def fun_l6_n967(x)
+ if (x < 1)
+ fun_l7_n394(x)
+ else
+ fun_l7_n873(x)
+ end
+end
+
+def fun_l6_n968(x)
+ if (x < 1)
+ fun_l7_n230(x)
+ else
+ fun_l7_n141(x)
+ end
+end
+
+def fun_l6_n969(x)
+ if (x < 1)
+ fun_l7_n742(x)
+ else
+ fun_l7_n75(x)
+ end
+end
+
+def fun_l6_n970(x)
+ if (x < 1)
+ fun_l7_n583(x)
+ else
+ fun_l7_n809(x)
+ end
+end
+
+def fun_l6_n971(x)
+ if (x < 1)
+ fun_l7_n535(x)
+ else
+ fun_l7_n151(x)
+ end
+end
+
+def fun_l6_n972(x)
+ if (x < 1)
+ fun_l7_n42(x)
+ else
+ fun_l7_n469(x)
+ end
+end
+
+def fun_l6_n973(x)
+ if (x < 1)
+ fun_l7_n964(x)
+ else
+ fun_l7_n759(x)
+ end
+end
+
+def fun_l6_n974(x)
+ if (x < 1)
+ fun_l7_n897(x)
+ else
+ fun_l7_n29(x)
+ end
+end
+
+def fun_l6_n975(x)
+ if (x < 1)
+ fun_l7_n331(x)
+ else
+ fun_l7_n972(x)
+ end
+end
+
+def fun_l6_n976(x)
+ if (x < 1)
+ fun_l7_n825(x)
+ else
+ fun_l7_n221(x)
+ end
+end
+
+def fun_l6_n977(x)
+ if (x < 1)
+ fun_l7_n207(x)
+ else
+ fun_l7_n520(x)
+ end
+end
+
+def fun_l6_n978(x)
+ if (x < 1)
+ fun_l7_n231(x)
+ else
+ fun_l7_n552(x)
+ end
+end
+
+def fun_l6_n979(x)
+ if (x < 1)
+ fun_l7_n621(x)
+ else
+ fun_l7_n766(x)
+ end
+end
+
+def fun_l6_n980(x)
+ if (x < 1)
+ fun_l7_n461(x)
+ else
+ fun_l7_n552(x)
+ end
+end
+
+def fun_l6_n981(x)
+ if (x < 1)
+ fun_l7_n891(x)
+ else
+ fun_l7_n710(x)
+ end
+end
+
+def fun_l6_n982(x)
+ if (x < 1)
+ fun_l7_n253(x)
+ else
+ fun_l7_n104(x)
+ end
+end
+
+def fun_l6_n983(x)
+ if (x < 1)
+ fun_l7_n726(x)
+ else
+ fun_l7_n903(x)
+ end
+end
+
+def fun_l6_n984(x)
+ if (x < 1)
+ fun_l7_n524(x)
+ else
+ fun_l7_n700(x)
+ end
+end
+
+def fun_l6_n985(x)
+ if (x < 1)
+ fun_l7_n234(x)
+ else
+ fun_l7_n454(x)
+ end
+end
+
+def fun_l6_n986(x)
+ if (x < 1)
+ fun_l7_n379(x)
+ else
+ fun_l7_n504(x)
+ end
+end
+
+def fun_l6_n987(x)
+ if (x < 1)
+ fun_l7_n194(x)
+ else
+ fun_l7_n962(x)
+ end
+end
+
+def fun_l6_n988(x)
+ if (x < 1)
+ fun_l7_n60(x)
+ else
+ fun_l7_n699(x)
+ end
+end
+
+def fun_l6_n989(x)
+ if (x < 1)
+ fun_l7_n692(x)
+ else
+ fun_l7_n28(x)
+ end
+end
+
+def fun_l6_n990(x)
+ if (x < 1)
+ fun_l7_n456(x)
+ else
+ fun_l7_n126(x)
+ end
+end
+
+def fun_l6_n991(x)
+ if (x < 1)
+ fun_l7_n104(x)
+ else
+ fun_l7_n156(x)
+ end
+end
+
+def fun_l6_n992(x)
+ if (x < 1)
+ fun_l7_n269(x)
+ else
+ fun_l7_n513(x)
+ end
+end
+
+def fun_l6_n993(x)
+ if (x < 1)
+ fun_l7_n20(x)
+ else
+ fun_l7_n754(x)
+ end
+end
+
+def fun_l6_n994(x)
+ if (x < 1)
+ fun_l7_n445(x)
+ else
+ fun_l7_n422(x)
+ end
+end
+
+def fun_l6_n995(x)
+ if (x < 1)
+ fun_l7_n320(x)
+ else
+ fun_l7_n398(x)
+ end
+end
+
+def fun_l6_n996(x)
+ if (x < 1)
+ fun_l7_n479(x)
+ else
+ fun_l7_n238(x)
+ end
+end
+
+def fun_l6_n997(x)
+ if (x < 1)
+ fun_l7_n254(x)
+ else
+ fun_l7_n692(x)
+ end
+end
+
+def fun_l6_n998(x)
+ if (x < 1)
+ fun_l7_n774(x)
+ else
+ fun_l7_n510(x)
+ end
+end
+
+def fun_l6_n999(x)
+ if (x < 1)
+ fun_l7_n158(x)
+ else
+ fun_l7_n929(x)
+ end
+end
+
+def fun_l7_n0(x)
+ if (x < 1)
+ fun_l8_n414(x)
+ else
+ fun_l8_n327(x)
+ end
+end
+
+def fun_l7_n1(x)
+ if (x < 1)
+ fun_l8_n446(x)
+ else
+ fun_l8_n611(x)
+ end
+end
+
+def fun_l7_n2(x)
+ if (x < 1)
+ fun_l8_n116(x)
+ else
+ fun_l8_n224(x)
+ end
+end
+
+def fun_l7_n3(x)
+ if (x < 1)
+ fun_l8_n809(x)
+ else
+ fun_l8_n962(x)
+ end
+end
+
+def fun_l7_n4(x)
+ if (x < 1)
+ fun_l8_n137(x)
+ else
+ fun_l8_n426(x)
+ end
+end
+
+def fun_l7_n5(x)
+ if (x < 1)
+ fun_l8_n686(x)
+ else
+ fun_l8_n600(x)
+ end
+end
+
+def fun_l7_n6(x)
+ if (x < 1)
+ fun_l8_n430(x)
+ else
+ fun_l8_n302(x)
+ end
+end
+
+def fun_l7_n7(x)
+ if (x < 1)
+ fun_l8_n865(x)
+ else
+ fun_l8_n60(x)
+ end
+end
+
+def fun_l7_n8(x)
+ if (x < 1)
+ fun_l8_n895(x)
+ else
+ fun_l8_n148(x)
+ end
+end
+
+def fun_l7_n9(x)
+ if (x < 1)
+ fun_l8_n740(x)
+ else
+ fun_l8_n982(x)
+ end
+end
+
+def fun_l7_n10(x)
+ if (x < 1)
+ fun_l8_n757(x)
+ else
+ fun_l8_n640(x)
+ end
+end
+
+def fun_l7_n11(x)
+ if (x < 1)
+ fun_l8_n744(x)
+ else
+ fun_l8_n256(x)
+ end
+end
+
+def fun_l7_n12(x)
+ if (x < 1)
+ fun_l8_n272(x)
+ else
+ fun_l8_n828(x)
+ end
+end
+
+def fun_l7_n13(x)
+ if (x < 1)
+ fun_l8_n395(x)
+ else
+ fun_l8_n932(x)
+ end
+end
+
+def fun_l7_n14(x)
+ if (x < 1)
+ fun_l8_n178(x)
+ else
+ fun_l8_n676(x)
+ end
+end
+
+def fun_l7_n15(x)
+ if (x < 1)
+ fun_l8_n40(x)
+ else
+ fun_l8_n548(x)
+ end
+end
+
+def fun_l7_n16(x)
+ if (x < 1)
+ fun_l8_n506(x)
+ else
+ fun_l8_n234(x)
+ end
+end
+
+def fun_l7_n17(x)
+ if (x < 1)
+ fun_l8_n239(x)
+ else
+ fun_l8_n56(x)
+ end
+end
+
+def fun_l7_n18(x)
+ if (x < 1)
+ fun_l8_n381(x)
+ else
+ fun_l8_n720(x)
+ end
+end
+
+def fun_l7_n19(x)
+ if (x < 1)
+ fun_l8_n781(x)
+ else
+ fun_l8_n605(x)
+ end
+end
+
+def fun_l7_n20(x)
+ if (x < 1)
+ fun_l8_n479(x)
+ else
+ fun_l8_n894(x)
+ end
+end
+
+def fun_l7_n21(x)
+ if (x < 1)
+ fun_l8_n437(x)
+ else
+ fun_l8_n123(x)
+ end
+end
+
+def fun_l7_n22(x)
+ if (x < 1)
+ fun_l8_n20(x)
+ else
+ fun_l8_n144(x)
+ end
+end
+
+def fun_l7_n23(x)
+ if (x < 1)
+ fun_l8_n684(x)
+ else
+ fun_l8_n866(x)
+ end
+end
+
+def fun_l7_n24(x)
+ if (x < 1)
+ fun_l8_n527(x)
+ else
+ fun_l8_n629(x)
+ end
+end
+
+def fun_l7_n25(x)
+ if (x < 1)
+ fun_l8_n399(x)
+ else
+ fun_l8_n52(x)
+ end
+end
+
+def fun_l7_n26(x)
+ if (x < 1)
+ fun_l8_n353(x)
+ else
+ fun_l8_n438(x)
+ end
+end
+
+def fun_l7_n27(x)
+ if (x < 1)
+ fun_l8_n916(x)
+ else
+ fun_l8_n488(x)
+ end
+end
+
+def fun_l7_n28(x)
+ if (x < 1)
+ fun_l8_n833(x)
+ else
+ fun_l8_n585(x)
+ end
+end
+
+def fun_l7_n29(x)
+ if (x < 1)
+ fun_l8_n38(x)
+ else
+ fun_l8_n785(x)
+ end
+end
+
+def fun_l7_n30(x)
+ if (x < 1)
+ fun_l8_n157(x)
+ else
+ fun_l8_n332(x)
+ end
+end
+
+def fun_l7_n31(x)
+ if (x < 1)
+ fun_l8_n467(x)
+ else
+ fun_l8_n442(x)
+ end
+end
+
+def fun_l7_n32(x)
+ if (x < 1)
+ fun_l8_n704(x)
+ else
+ fun_l8_n295(x)
+ end
+end
+
+def fun_l7_n33(x)
+ if (x < 1)
+ fun_l8_n829(x)
+ else
+ fun_l8_n307(x)
+ end
+end
+
+def fun_l7_n34(x)
+ if (x < 1)
+ fun_l8_n227(x)
+ else
+ fun_l8_n865(x)
+ end
+end
+
+def fun_l7_n35(x)
+ if (x < 1)
+ fun_l8_n930(x)
+ else
+ fun_l8_n129(x)
+ end
+end
+
+def fun_l7_n36(x)
+ if (x < 1)
+ fun_l8_n519(x)
+ else
+ fun_l8_n587(x)
+ end
+end
+
+def fun_l7_n37(x)
+ if (x < 1)
+ fun_l8_n132(x)
+ else
+ fun_l8_n547(x)
+ end
+end
+
+def fun_l7_n38(x)
+ if (x < 1)
+ fun_l8_n627(x)
+ else
+ fun_l8_n712(x)
+ end
+end
+
+def fun_l7_n39(x)
+ if (x < 1)
+ fun_l8_n752(x)
+ else
+ fun_l8_n357(x)
+ end
+end
+
+def fun_l7_n40(x)
+ if (x < 1)
+ fun_l8_n542(x)
+ else
+ fun_l8_n86(x)
+ end
+end
+
+def fun_l7_n41(x)
+ if (x < 1)
+ fun_l8_n89(x)
+ else
+ fun_l8_n492(x)
+ end
+end
+
+def fun_l7_n42(x)
+ if (x < 1)
+ fun_l8_n508(x)
+ else
+ fun_l8_n288(x)
+ end
+end
+
+def fun_l7_n43(x)
+ if (x < 1)
+ fun_l8_n627(x)
+ else
+ fun_l8_n632(x)
+ end
+end
+
+def fun_l7_n44(x)
+ if (x < 1)
+ fun_l8_n513(x)
+ else
+ fun_l8_n472(x)
+ end
+end
+
+def fun_l7_n45(x)
+ if (x < 1)
+ fun_l8_n599(x)
+ else
+ fun_l8_n581(x)
+ end
+end
+
+def fun_l7_n46(x)
+ if (x < 1)
+ fun_l8_n907(x)
+ else
+ fun_l8_n71(x)
+ end
+end
+
+def fun_l7_n47(x)
+ if (x < 1)
+ fun_l8_n609(x)
+ else
+ fun_l8_n601(x)
+ end
+end
+
+def fun_l7_n48(x)
+ if (x < 1)
+ fun_l8_n985(x)
+ else
+ fun_l8_n536(x)
+ end
+end
+
+def fun_l7_n49(x)
+ if (x < 1)
+ fun_l8_n220(x)
+ else
+ fun_l8_n6(x)
+ end
+end
+
+def fun_l7_n50(x)
+ if (x < 1)
+ fun_l8_n445(x)
+ else
+ fun_l8_n939(x)
+ end
+end
+
+def fun_l7_n51(x)
+ if (x < 1)
+ fun_l8_n973(x)
+ else
+ fun_l8_n600(x)
+ end
+end
+
+def fun_l7_n52(x)
+ if (x < 1)
+ fun_l8_n377(x)
+ else
+ fun_l8_n70(x)
+ end
+end
+
+def fun_l7_n53(x)
+ if (x < 1)
+ fun_l8_n745(x)
+ else
+ fun_l8_n237(x)
+ end
+end
+
+def fun_l7_n54(x)
+ if (x < 1)
+ fun_l8_n782(x)
+ else
+ fun_l8_n756(x)
+ end
+end
+
+def fun_l7_n55(x)
+ if (x < 1)
+ fun_l8_n438(x)
+ else
+ fun_l8_n892(x)
+ end
+end
+
+def fun_l7_n56(x)
+ if (x < 1)
+ fun_l8_n564(x)
+ else
+ fun_l8_n600(x)
+ end
+end
+
+def fun_l7_n57(x)
+ if (x < 1)
+ fun_l8_n480(x)
+ else
+ fun_l8_n832(x)
+ end
+end
+
+def fun_l7_n58(x)
+ if (x < 1)
+ fun_l8_n239(x)
+ else
+ fun_l8_n540(x)
+ end
+end
+
+def fun_l7_n59(x)
+ if (x < 1)
+ fun_l8_n904(x)
+ else
+ fun_l8_n334(x)
+ end
+end
+
+def fun_l7_n60(x)
+ if (x < 1)
+ fun_l8_n407(x)
+ else
+ fun_l8_n573(x)
+ end
+end
+
+def fun_l7_n61(x)
+ if (x < 1)
+ fun_l8_n705(x)
+ else
+ fun_l8_n202(x)
+ end
+end
+
+def fun_l7_n62(x)
+ if (x < 1)
+ fun_l8_n715(x)
+ else
+ fun_l8_n394(x)
+ end
+end
+
+def fun_l7_n63(x)
+ if (x < 1)
+ fun_l8_n935(x)
+ else
+ fun_l8_n855(x)
+ end
+end
+
+def fun_l7_n64(x)
+ if (x < 1)
+ fun_l8_n525(x)
+ else
+ fun_l8_n81(x)
+ end
+end
+
+def fun_l7_n65(x)
+ if (x < 1)
+ fun_l8_n692(x)
+ else
+ fun_l8_n372(x)
+ end
+end
+
+def fun_l7_n66(x)
+ if (x < 1)
+ fun_l8_n286(x)
+ else
+ fun_l8_n568(x)
+ end
+end
+
+def fun_l7_n67(x)
+ if (x < 1)
+ fun_l8_n829(x)
+ else
+ fun_l8_n89(x)
+ end
+end
+
+def fun_l7_n68(x)
+ if (x < 1)
+ fun_l8_n542(x)
+ else
+ fun_l8_n362(x)
+ end
+end
+
+def fun_l7_n69(x)
+ if (x < 1)
+ fun_l8_n673(x)
+ else
+ fun_l8_n302(x)
+ end
+end
+
+def fun_l7_n70(x)
+ if (x < 1)
+ fun_l8_n649(x)
+ else
+ fun_l8_n890(x)
+ end
+end
+
+def fun_l7_n71(x)
+ if (x < 1)
+ fun_l8_n639(x)
+ else
+ fun_l8_n304(x)
+ end
+end
+
+def fun_l7_n72(x)
+ if (x < 1)
+ fun_l8_n797(x)
+ else
+ fun_l8_n132(x)
+ end
+end
+
+def fun_l7_n73(x)
+ if (x < 1)
+ fun_l8_n301(x)
+ else
+ fun_l8_n328(x)
+ end
+end
+
+def fun_l7_n74(x)
+ if (x < 1)
+ fun_l8_n438(x)
+ else
+ fun_l8_n979(x)
+ end
+end
+
+def fun_l7_n75(x)
+ if (x < 1)
+ fun_l8_n679(x)
+ else
+ fun_l8_n621(x)
+ end
+end
+
+def fun_l7_n76(x)
+ if (x < 1)
+ fun_l8_n136(x)
+ else
+ fun_l8_n916(x)
+ end
+end
+
+def fun_l7_n77(x)
+ if (x < 1)
+ fun_l8_n39(x)
+ else
+ fun_l8_n945(x)
+ end
+end
+
+def fun_l7_n78(x)
+ if (x < 1)
+ fun_l8_n365(x)
+ else
+ fun_l8_n883(x)
+ end
+end
+
+def fun_l7_n79(x)
+ if (x < 1)
+ fun_l8_n514(x)
+ else
+ fun_l8_n989(x)
+ end
+end
+
+def fun_l7_n80(x)
+ if (x < 1)
+ fun_l8_n378(x)
+ else
+ fun_l8_n634(x)
+ end
+end
+
+def fun_l7_n81(x)
+ if (x < 1)
+ fun_l8_n200(x)
+ else
+ fun_l8_n73(x)
+ end
+end
+
+def fun_l7_n82(x)
+ if (x < 1)
+ fun_l8_n521(x)
+ else
+ fun_l8_n848(x)
+ end
+end
+
+def fun_l7_n83(x)
+ if (x < 1)
+ fun_l8_n184(x)
+ else
+ fun_l8_n350(x)
+ end
+end
+
+def fun_l7_n84(x)
+ if (x < 1)
+ fun_l8_n215(x)
+ else
+ fun_l8_n615(x)
+ end
+end
+
+def fun_l7_n85(x)
+ if (x < 1)
+ fun_l8_n556(x)
+ else
+ fun_l8_n723(x)
+ end
+end
+
+def fun_l7_n86(x)
+ if (x < 1)
+ fun_l8_n565(x)
+ else
+ fun_l8_n661(x)
+ end
+end
+
+def fun_l7_n87(x)
+ if (x < 1)
+ fun_l8_n22(x)
+ else
+ fun_l8_n623(x)
+ end
+end
+
+def fun_l7_n88(x)
+ if (x < 1)
+ fun_l8_n995(x)
+ else
+ fun_l8_n30(x)
+ end
+end
+
+def fun_l7_n89(x)
+ if (x < 1)
+ fun_l8_n912(x)
+ else
+ fun_l8_n332(x)
+ end
+end
+
+def fun_l7_n90(x)
+ if (x < 1)
+ fun_l8_n776(x)
+ else
+ fun_l8_n362(x)
+ end
+end
+
+def fun_l7_n91(x)
+ if (x < 1)
+ fun_l8_n720(x)
+ else
+ fun_l8_n512(x)
+ end
+end
+
+def fun_l7_n92(x)
+ if (x < 1)
+ fun_l8_n437(x)
+ else
+ fun_l8_n107(x)
+ end
+end
+
+def fun_l7_n93(x)
+ if (x < 1)
+ fun_l8_n143(x)
+ else
+ fun_l8_n493(x)
+ end
+end
+
+def fun_l7_n94(x)
+ if (x < 1)
+ fun_l8_n814(x)
+ else
+ fun_l8_n892(x)
+ end
+end
+
+def fun_l7_n95(x)
+ if (x < 1)
+ fun_l8_n117(x)
+ else
+ fun_l8_n18(x)
+ end
+end
+
+def fun_l7_n96(x)
+ if (x < 1)
+ fun_l8_n769(x)
+ else
+ fun_l8_n37(x)
+ end
+end
+
+def fun_l7_n97(x)
+ if (x < 1)
+ fun_l8_n213(x)
+ else
+ fun_l8_n5(x)
+ end
+end
+
+def fun_l7_n98(x)
+ if (x < 1)
+ fun_l8_n608(x)
+ else
+ fun_l8_n551(x)
+ end
+end
+
+def fun_l7_n99(x)
+ if (x < 1)
+ fun_l8_n130(x)
+ else
+ fun_l8_n879(x)
+ end
+end
+
+def fun_l7_n100(x)
+ if (x < 1)
+ fun_l8_n279(x)
+ else
+ fun_l8_n786(x)
+ end
+end
+
+def fun_l7_n101(x)
+ if (x < 1)
+ fun_l8_n254(x)
+ else
+ fun_l8_n904(x)
+ end
+end
+
+def fun_l7_n102(x)
+ if (x < 1)
+ fun_l8_n661(x)
+ else
+ fun_l8_n873(x)
+ end
+end
+
+def fun_l7_n103(x)
+ if (x < 1)
+ fun_l8_n360(x)
+ else
+ fun_l8_n793(x)
+ end
+end
+
+def fun_l7_n104(x)
+ if (x < 1)
+ fun_l8_n687(x)
+ else
+ fun_l8_n853(x)
+ end
+end
+
+def fun_l7_n105(x)
+ if (x < 1)
+ fun_l8_n168(x)
+ else
+ fun_l8_n280(x)
+ end
+end
+
+def fun_l7_n106(x)
+ if (x < 1)
+ fun_l8_n742(x)
+ else
+ fun_l8_n222(x)
+ end
+end
+
+def fun_l7_n107(x)
+ if (x < 1)
+ fun_l8_n470(x)
+ else
+ fun_l8_n633(x)
+ end
+end
+
+def fun_l7_n108(x)
+ if (x < 1)
+ fun_l8_n495(x)
+ else
+ fun_l8_n253(x)
+ end
+end
+
+def fun_l7_n109(x)
+ if (x < 1)
+ fun_l8_n369(x)
+ else
+ fun_l8_n108(x)
+ end
+end
+
+def fun_l7_n110(x)
+ if (x < 1)
+ fun_l8_n254(x)
+ else
+ fun_l8_n162(x)
+ end
+end
+
+def fun_l7_n111(x)
+ if (x < 1)
+ fun_l8_n835(x)
+ else
+ fun_l8_n295(x)
+ end
+end
+
+def fun_l7_n112(x)
+ if (x < 1)
+ fun_l8_n349(x)
+ else
+ fun_l8_n432(x)
+ end
+end
+
+def fun_l7_n113(x)
+ if (x < 1)
+ fun_l8_n237(x)
+ else
+ fun_l8_n484(x)
+ end
+end
+
+def fun_l7_n114(x)
+ if (x < 1)
+ fun_l8_n755(x)
+ else
+ fun_l8_n819(x)
+ end
+end
+
+def fun_l7_n115(x)
+ if (x < 1)
+ fun_l8_n542(x)
+ else
+ fun_l8_n587(x)
+ end
+end
+
+def fun_l7_n116(x)
+ if (x < 1)
+ fun_l8_n837(x)
+ else
+ fun_l8_n274(x)
+ end
+end
+
+def fun_l7_n117(x)
+ if (x < 1)
+ fun_l8_n742(x)
+ else
+ fun_l8_n104(x)
+ end
+end
+
+def fun_l7_n118(x)
+ if (x < 1)
+ fun_l8_n201(x)
+ else
+ fun_l8_n340(x)
+ end
+end
+
+def fun_l7_n119(x)
+ if (x < 1)
+ fun_l8_n349(x)
+ else
+ fun_l8_n213(x)
+ end
+end
+
+def fun_l7_n120(x)
+ if (x < 1)
+ fun_l8_n563(x)
+ else
+ fun_l8_n193(x)
+ end
+end
+
+def fun_l7_n121(x)
+ if (x < 1)
+ fun_l8_n738(x)
+ else
+ fun_l8_n600(x)
+ end
+end
+
+def fun_l7_n122(x)
+ if (x < 1)
+ fun_l8_n261(x)
+ else
+ fun_l8_n500(x)
+ end
+end
+
+def fun_l7_n123(x)
+ if (x < 1)
+ fun_l8_n870(x)
+ else
+ fun_l8_n423(x)
+ end
+end
+
+def fun_l7_n124(x)
+ if (x < 1)
+ fun_l8_n405(x)
+ else
+ fun_l8_n749(x)
+ end
+end
+
+def fun_l7_n125(x)
+ if (x < 1)
+ fun_l8_n848(x)
+ else
+ fun_l8_n106(x)
+ end
+end
+
+def fun_l7_n126(x)
+ if (x < 1)
+ fun_l8_n382(x)
+ else
+ fun_l8_n379(x)
+ end
+end
+
+def fun_l7_n127(x)
+ if (x < 1)
+ fun_l8_n232(x)
+ else
+ fun_l8_n913(x)
+ end
+end
+
+def fun_l7_n128(x)
+ if (x < 1)
+ fun_l8_n7(x)
+ else
+ fun_l8_n177(x)
+ end
+end
+
+def fun_l7_n129(x)
+ if (x < 1)
+ fun_l8_n86(x)
+ else
+ fun_l8_n670(x)
+ end
+end
+
+def fun_l7_n130(x)
+ if (x < 1)
+ fun_l8_n361(x)
+ else
+ fun_l8_n132(x)
+ end
+end
+
+def fun_l7_n131(x)
+ if (x < 1)
+ fun_l8_n125(x)
+ else
+ fun_l8_n925(x)
+ end
+end
+
+def fun_l7_n132(x)
+ if (x < 1)
+ fun_l8_n529(x)
+ else
+ fun_l8_n996(x)
+ end
+end
+
+def fun_l7_n133(x)
+ if (x < 1)
+ fun_l8_n283(x)
+ else
+ fun_l8_n112(x)
+ end
+end
+
+def fun_l7_n134(x)
+ if (x < 1)
+ fun_l8_n974(x)
+ else
+ fun_l8_n204(x)
+ end
+end
+
+def fun_l7_n135(x)
+ if (x < 1)
+ fun_l8_n903(x)
+ else
+ fun_l8_n196(x)
+ end
+end
+
+def fun_l7_n136(x)
+ if (x < 1)
+ fun_l8_n59(x)
+ else
+ fun_l8_n505(x)
+ end
+end
+
+def fun_l7_n137(x)
+ if (x < 1)
+ fun_l8_n530(x)
+ else
+ fun_l8_n31(x)
+ end
+end
+
+def fun_l7_n138(x)
+ if (x < 1)
+ fun_l8_n990(x)
+ else
+ fun_l8_n924(x)
+ end
+end
+
+def fun_l7_n139(x)
+ if (x < 1)
+ fun_l8_n202(x)
+ else
+ fun_l8_n980(x)
+ end
+end
+
+def fun_l7_n140(x)
+ if (x < 1)
+ fun_l8_n354(x)
+ else
+ fun_l8_n694(x)
+ end
+end
+
+def fun_l7_n141(x)
+ if (x < 1)
+ fun_l8_n306(x)
+ else
+ fun_l8_n307(x)
+ end
+end
+
+def fun_l7_n142(x)
+ if (x < 1)
+ fun_l8_n433(x)
+ else
+ fun_l8_n902(x)
+ end
+end
+
+def fun_l7_n143(x)
+ if (x < 1)
+ fun_l8_n522(x)
+ else
+ fun_l8_n904(x)
+ end
+end
+
+def fun_l7_n144(x)
+ if (x < 1)
+ fun_l8_n86(x)
+ else
+ fun_l8_n11(x)
+ end
+end
+
+def fun_l7_n145(x)
+ if (x < 1)
+ fun_l8_n147(x)
+ else
+ fun_l8_n21(x)
+ end
+end
+
+def fun_l7_n146(x)
+ if (x < 1)
+ fun_l8_n47(x)
+ else
+ fun_l8_n855(x)
+ end
+end
+
+def fun_l7_n147(x)
+ if (x < 1)
+ fun_l8_n306(x)
+ else
+ fun_l8_n309(x)
+ end
+end
+
+def fun_l7_n148(x)
+ if (x < 1)
+ fun_l8_n757(x)
+ else
+ fun_l8_n83(x)
+ end
+end
+
+def fun_l7_n149(x)
+ if (x < 1)
+ fun_l8_n377(x)
+ else
+ fun_l8_n124(x)
+ end
+end
+
+def fun_l7_n150(x)
+ if (x < 1)
+ fun_l8_n276(x)
+ else
+ fun_l8_n838(x)
+ end
+end
+
+def fun_l7_n151(x)
+ if (x < 1)
+ fun_l8_n148(x)
+ else
+ fun_l8_n653(x)
+ end
+end
+
+def fun_l7_n152(x)
+ if (x < 1)
+ fun_l8_n315(x)
+ else
+ fun_l8_n942(x)
+ end
+end
+
+def fun_l7_n153(x)
+ if (x < 1)
+ fun_l8_n794(x)
+ else
+ fun_l8_n680(x)
+ end
+end
+
+def fun_l7_n154(x)
+ if (x < 1)
+ fun_l8_n508(x)
+ else
+ fun_l8_n427(x)
+ end
+end
+
+def fun_l7_n155(x)
+ if (x < 1)
+ fun_l8_n249(x)
+ else
+ fun_l8_n615(x)
+ end
+end
+
+def fun_l7_n156(x)
+ if (x < 1)
+ fun_l8_n339(x)
+ else
+ fun_l8_n559(x)
+ end
+end
+
+def fun_l7_n157(x)
+ if (x < 1)
+ fun_l8_n772(x)
+ else
+ fun_l8_n128(x)
+ end
+end
+
+def fun_l7_n158(x)
+ if (x < 1)
+ fun_l8_n247(x)
+ else
+ fun_l8_n962(x)
+ end
+end
+
+def fun_l7_n159(x)
+ if (x < 1)
+ fun_l8_n648(x)
+ else
+ fun_l8_n338(x)
+ end
+end
+
+def fun_l7_n160(x)
+ if (x < 1)
+ fun_l8_n104(x)
+ else
+ fun_l8_n757(x)
+ end
+end
+
+def fun_l7_n161(x)
+ if (x < 1)
+ fun_l8_n74(x)
+ else
+ fun_l8_n288(x)
+ end
+end
+
+def fun_l7_n162(x)
+ if (x < 1)
+ fun_l8_n849(x)
+ else
+ fun_l8_n982(x)
+ end
+end
+
+def fun_l7_n163(x)
+ if (x < 1)
+ fun_l8_n433(x)
+ else
+ fun_l8_n442(x)
+ end
+end
+
+def fun_l7_n164(x)
+ if (x < 1)
+ fun_l8_n268(x)
+ else
+ fun_l8_n717(x)
+ end
+end
+
+def fun_l7_n165(x)
+ if (x < 1)
+ fun_l8_n185(x)
+ else
+ fun_l8_n628(x)
+ end
+end
+
+def fun_l7_n166(x)
+ if (x < 1)
+ fun_l8_n207(x)
+ else
+ fun_l8_n830(x)
+ end
+end
+
+def fun_l7_n167(x)
+ if (x < 1)
+ fun_l8_n334(x)
+ else
+ fun_l8_n20(x)
+ end
+end
+
+def fun_l7_n168(x)
+ if (x < 1)
+ fun_l8_n835(x)
+ else
+ fun_l8_n493(x)
+ end
+end
+
+def fun_l7_n169(x)
+ if (x < 1)
+ fun_l8_n559(x)
+ else
+ fun_l8_n561(x)
+ end
+end
+
+def fun_l7_n170(x)
+ if (x < 1)
+ fun_l8_n942(x)
+ else
+ fun_l8_n699(x)
+ end
+end
+
+def fun_l7_n171(x)
+ if (x < 1)
+ fun_l8_n833(x)
+ else
+ fun_l8_n928(x)
+ end
+end
+
+def fun_l7_n172(x)
+ if (x < 1)
+ fun_l8_n564(x)
+ else
+ fun_l8_n972(x)
+ end
+end
+
+def fun_l7_n173(x)
+ if (x < 1)
+ fun_l8_n509(x)
+ else
+ fun_l8_n125(x)
+ end
+end
+
+def fun_l7_n174(x)
+ if (x < 1)
+ fun_l8_n643(x)
+ else
+ fun_l8_n813(x)
+ end
+end
+
+def fun_l7_n175(x)
+ if (x < 1)
+ fun_l8_n763(x)
+ else
+ fun_l8_n22(x)
+ end
+end
+
+def fun_l7_n176(x)
+ if (x < 1)
+ fun_l8_n955(x)
+ else
+ fun_l8_n579(x)
+ end
+end
+
+def fun_l7_n177(x)
+ if (x < 1)
+ fun_l8_n577(x)
+ else
+ fun_l8_n675(x)
+ end
+end
+
+def fun_l7_n178(x)
+ if (x < 1)
+ fun_l8_n867(x)
+ else
+ fun_l8_n119(x)
+ end
+end
+
+def fun_l7_n179(x)
+ if (x < 1)
+ fun_l8_n357(x)
+ else
+ fun_l8_n543(x)
+ end
+end
+
+def fun_l7_n180(x)
+ if (x < 1)
+ fun_l8_n67(x)
+ else
+ fun_l8_n643(x)
+ end
+end
+
+def fun_l7_n181(x)
+ if (x < 1)
+ fun_l8_n377(x)
+ else
+ fun_l8_n931(x)
+ end
+end
+
+def fun_l7_n182(x)
+ if (x < 1)
+ fun_l8_n962(x)
+ else
+ fun_l8_n220(x)
+ end
+end
+
+def fun_l7_n183(x)
+ if (x < 1)
+ fun_l8_n568(x)
+ else
+ fun_l8_n702(x)
+ end
+end
+
+def fun_l7_n184(x)
+ if (x < 1)
+ fun_l8_n877(x)
+ else
+ fun_l8_n376(x)
+ end
+end
+
+def fun_l7_n185(x)
+ if (x < 1)
+ fun_l8_n171(x)
+ else
+ fun_l8_n981(x)
+ end
+end
+
+def fun_l7_n186(x)
+ if (x < 1)
+ fun_l8_n283(x)
+ else
+ fun_l8_n81(x)
+ end
+end
+
+def fun_l7_n187(x)
+ if (x < 1)
+ fun_l8_n318(x)
+ else
+ fun_l8_n7(x)
+ end
+end
+
+def fun_l7_n188(x)
+ if (x < 1)
+ fun_l8_n874(x)
+ else
+ fun_l8_n879(x)
+ end
+end
+
+def fun_l7_n189(x)
+ if (x < 1)
+ fun_l8_n944(x)
+ else
+ fun_l8_n881(x)
+ end
+end
+
+def fun_l7_n190(x)
+ if (x < 1)
+ fun_l8_n462(x)
+ else
+ fun_l8_n570(x)
+ end
+end
+
+def fun_l7_n191(x)
+ if (x < 1)
+ fun_l8_n815(x)
+ else
+ fun_l8_n957(x)
+ end
+end
+
+def fun_l7_n192(x)
+ if (x < 1)
+ fun_l8_n217(x)
+ else
+ fun_l8_n93(x)
+ end
+end
+
+def fun_l7_n193(x)
+ if (x < 1)
+ fun_l8_n708(x)
+ else
+ fun_l8_n323(x)
+ end
+end
+
+def fun_l7_n194(x)
+ if (x < 1)
+ fun_l8_n420(x)
+ else
+ fun_l8_n375(x)
+ end
+end
+
+def fun_l7_n195(x)
+ if (x < 1)
+ fun_l8_n307(x)
+ else
+ fun_l8_n427(x)
+ end
+end
+
+def fun_l7_n196(x)
+ if (x < 1)
+ fun_l8_n200(x)
+ else
+ fun_l8_n265(x)
+ end
+end
+
+def fun_l7_n197(x)
+ if (x < 1)
+ fun_l8_n547(x)
+ else
+ fun_l8_n687(x)
+ end
+end
+
+def fun_l7_n198(x)
+ if (x < 1)
+ fun_l8_n693(x)
+ else
+ fun_l8_n420(x)
+ end
+end
+
+def fun_l7_n199(x)
+ if (x < 1)
+ fun_l8_n297(x)
+ else
+ fun_l8_n702(x)
+ end
+end
+
+def fun_l7_n200(x)
+ if (x < 1)
+ fun_l8_n418(x)
+ else
+ fun_l8_n758(x)
+ end
+end
+
+def fun_l7_n201(x)
+ if (x < 1)
+ fun_l8_n204(x)
+ else
+ fun_l8_n572(x)
+ end
+end
+
+def fun_l7_n202(x)
+ if (x < 1)
+ fun_l8_n847(x)
+ else
+ fun_l8_n440(x)
+ end
+end
+
+def fun_l7_n203(x)
+ if (x < 1)
+ fun_l8_n692(x)
+ else
+ fun_l8_n595(x)
+ end
+end
+
+def fun_l7_n204(x)
+ if (x < 1)
+ fun_l8_n922(x)
+ else
+ fun_l8_n618(x)
+ end
+end
+
+def fun_l7_n205(x)
+ if (x < 1)
+ fun_l8_n431(x)
+ else
+ fun_l8_n135(x)
+ end
+end
+
+def fun_l7_n206(x)
+ if (x < 1)
+ fun_l8_n92(x)
+ else
+ fun_l8_n370(x)
+ end
+end
+
+def fun_l7_n207(x)
+ if (x < 1)
+ fun_l8_n141(x)
+ else
+ fun_l8_n845(x)
+ end
+end
+
+def fun_l7_n208(x)
+ if (x < 1)
+ fun_l8_n552(x)
+ else
+ fun_l8_n917(x)
+ end
+end
+
+def fun_l7_n209(x)
+ if (x < 1)
+ fun_l8_n341(x)
+ else
+ fun_l8_n794(x)
+ end
+end
+
+def fun_l7_n210(x)
+ if (x < 1)
+ fun_l8_n772(x)
+ else
+ fun_l8_n515(x)
+ end
+end
+
+def fun_l7_n211(x)
+ if (x < 1)
+ fun_l8_n37(x)
+ else
+ fun_l8_n635(x)
+ end
+end
+
+def fun_l7_n212(x)
+ if (x < 1)
+ fun_l8_n164(x)
+ else
+ fun_l8_n506(x)
+ end
+end
+
+def fun_l7_n213(x)
+ if (x < 1)
+ fun_l8_n621(x)
+ else
+ fun_l8_n722(x)
+ end
+end
+
+def fun_l7_n214(x)
+ if (x < 1)
+ fun_l8_n475(x)
+ else
+ fun_l8_n854(x)
+ end
+end
+
+def fun_l7_n215(x)
+ if (x < 1)
+ fun_l8_n275(x)
+ else
+ fun_l8_n884(x)
+ end
+end
+
+def fun_l7_n216(x)
+ if (x < 1)
+ fun_l8_n894(x)
+ else
+ fun_l8_n424(x)
+ end
+end
+
+def fun_l7_n217(x)
+ if (x < 1)
+ fun_l8_n32(x)
+ else
+ fun_l8_n698(x)
+ end
+end
+
+def fun_l7_n218(x)
+ if (x < 1)
+ fun_l8_n707(x)
+ else
+ fun_l8_n728(x)
+ end
+end
+
+def fun_l7_n219(x)
+ if (x < 1)
+ fun_l8_n294(x)
+ else
+ fun_l8_n583(x)
+ end
+end
+
+def fun_l7_n220(x)
+ if (x < 1)
+ fun_l8_n577(x)
+ else
+ fun_l8_n881(x)
+ end
+end
+
+def fun_l7_n221(x)
+ if (x < 1)
+ fun_l8_n925(x)
+ else
+ fun_l8_n177(x)
+ end
+end
+
+def fun_l7_n222(x)
+ if (x < 1)
+ fun_l8_n495(x)
+ else
+ fun_l8_n407(x)
+ end
+end
+
+def fun_l7_n223(x)
+ if (x < 1)
+ fun_l8_n11(x)
+ else
+ fun_l8_n753(x)
+ end
+end
+
+def fun_l7_n224(x)
+ if (x < 1)
+ fun_l8_n366(x)
+ else
+ fun_l8_n546(x)
+ end
+end
+
+def fun_l7_n225(x)
+ if (x < 1)
+ fun_l8_n644(x)
+ else
+ fun_l8_n728(x)
+ end
+end
+
+def fun_l7_n226(x)
+ if (x < 1)
+ fun_l8_n731(x)
+ else
+ fun_l8_n292(x)
+ end
+end
+
+def fun_l7_n227(x)
+ if (x < 1)
+ fun_l8_n653(x)
+ else
+ fun_l8_n521(x)
+ end
+end
+
+def fun_l7_n228(x)
+ if (x < 1)
+ fun_l8_n479(x)
+ else
+ fun_l8_n329(x)
+ end
+end
+
+def fun_l7_n229(x)
+ if (x < 1)
+ fun_l8_n151(x)
+ else
+ fun_l8_n620(x)
+ end
+end
+
+def fun_l7_n230(x)
+ if (x < 1)
+ fun_l8_n58(x)
+ else
+ fun_l8_n369(x)
+ end
+end
+
+def fun_l7_n231(x)
+ if (x < 1)
+ fun_l8_n301(x)
+ else
+ fun_l8_n869(x)
+ end
+end
+
+def fun_l7_n232(x)
+ if (x < 1)
+ fun_l8_n810(x)
+ else
+ fun_l8_n376(x)
+ end
+end
+
+def fun_l7_n233(x)
+ if (x < 1)
+ fun_l8_n19(x)
+ else
+ fun_l8_n278(x)
+ end
+end
+
+def fun_l7_n234(x)
+ if (x < 1)
+ fun_l8_n509(x)
+ else
+ fun_l8_n826(x)
+ end
+end
+
+def fun_l7_n235(x)
+ if (x < 1)
+ fun_l8_n302(x)
+ else
+ fun_l8_n62(x)
+ end
+end
+
+def fun_l7_n236(x)
+ if (x < 1)
+ fun_l8_n289(x)
+ else
+ fun_l8_n935(x)
+ end
+end
+
+def fun_l7_n237(x)
+ if (x < 1)
+ fun_l8_n217(x)
+ else
+ fun_l8_n652(x)
+ end
+end
+
+def fun_l7_n238(x)
+ if (x < 1)
+ fun_l8_n234(x)
+ else
+ fun_l8_n720(x)
+ end
+end
+
+def fun_l7_n239(x)
+ if (x < 1)
+ fun_l8_n158(x)
+ else
+ fun_l8_n409(x)
+ end
+end
+
+def fun_l7_n240(x)
+ if (x < 1)
+ fun_l8_n478(x)
+ else
+ fun_l8_n855(x)
+ end
+end
+
+def fun_l7_n241(x)
+ if (x < 1)
+ fun_l8_n115(x)
+ else
+ fun_l8_n406(x)
+ end
+end
+
+def fun_l7_n242(x)
+ if (x < 1)
+ fun_l8_n278(x)
+ else
+ fun_l8_n12(x)
+ end
+end
+
+def fun_l7_n243(x)
+ if (x < 1)
+ fun_l8_n273(x)
+ else
+ fun_l8_n243(x)
+ end
+end
+
+def fun_l7_n244(x)
+ if (x < 1)
+ fun_l8_n909(x)
+ else
+ fun_l8_n721(x)
+ end
+end
+
+def fun_l7_n245(x)
+ if (x < 1)
+ fun_l8_n415(x)
+ else
+ fun_l8_n530(x)
+ end
+end
+
+def fun_l7_n246(x)
+ if (x < 1)
+ fun_l8_n770(x)
+ else
+ fun_l8_n413(x)
+ end
+end
+
+def fun_l7_n247(x)
+ if (x < 1)
+ fun_l8_n228(x)
+ else
+ fun_l8_n668(x)
+ end
+end
+
+def fun_l7_n248(x)
+ if (x < 1)
+ fun_l8_n174(x)
+ else
+ fun_l8_n559(x)
+ end
+end
+
+def fun_l7_n249(x)
+ if (x < 1)
+ fun_l8_n740(x)
+ else
+ fun_l8_n314(x)
+ end
+end
+
+def fun_l7_n250(x)
+ if (x < 1)
+ fun_l8_n293(x)
+ else
+ fun_l8_n835(x)
+ end
+end
+
+def fun_l7_n251(x)
+ if (x < 1)
+ fun_l8_n584(x)
+ else
+ fun_l8_n755(x)
+ end
+end
+
+def fun_l7_n252(x)
+ if (x < 1)
+ fun_l8_n792(x)
+ else
+ fun_l8_n135(x)
+ end
+end
+
+def fun_l7_n253(x)
+ if (x < 1)
+ fun_l8_n116(x)
+ else
+ fun_l8_n82(x)
+ end
+end
+
+def fun_l7_n254(x)
+ if (x < 1)
+ fun_l8_n478(x)
+ else
+ fun_l8_n809(x)
+ end
+end
+
+def fun_l7_n255(x)
+ if (x < 1)
+ fun_l8_n924(x)
+ else
+ fun_l8_n708(x)
+ end
+end
+
+def fun_l7_n256(x)
+ if (x < 1)
+ fun_l8_n345(x)
+ else
+ fun_l8_n669(x)
+ end
+end
+
+def fun_l7_n257(x)
+ if (x < 1)
+ fun_l8_n300(x)
+ else
+ fun_l8_n166(x)
+ end
+end
+
+def fun_l7_n258(x)
+ if (x < 1)
+ fun_l8_n979(x)
+ else
+ fun_l8_n894(x)
+ end
+end
+
+def fun_l7_n259(x)
+ if (x < 1)
+ fun_l8_n765(x)
+ else
+ fun_l8_n838(x)
+ end
+end
+
+def fun_l7_n260(x)
+ if (x < 1)
+ fun_l8_n812(x)
+ else
+ fun_l8_n472(x)
+ end
+end
+
+def fun_l7_n261(x)
+ if (x < 1)
+ fun_l8_n220(x)
+ else
+ fun_l8_n106(x)
+ end
+end
+
+def fun_l7_n262(x)
+ if (x < 1)
+ fun_l8_n727(x)
+ else
+ fun_l8_n783(x)
+ end
+end
+
+def fun_l7_n263(x)
+ if (x < 1)
+ fun_l8_n560(x)
+ else
+ fun_l8_n781(x)
+ end
+end
+
+def fun_l7_n264(x)
+ if (x < 1)
+ fun_l8_n709(x)
+ else
+ fun_l8_n33(x)
+ end
+end
+
+def fun_l7_n265(x)
+ if (x < 1)
+ fun_l8_n904(x)
+ else
+ fun_l8_n64(x)
+ end
+end
+
+def fun_l7_n266(x)
+ if (x < 1)
+ fun_l8_n944(x)
+ else
+ fun_l8_n652(x)
+ end
+end
+
+def fun_l7_n267(x)
+ if (x < 1)
+ fun_l8_n154(x)
+ else
+ fun_l8_n103(x)
+ end
+end
+
+def fun_l7_n268(x)
+ if (x < 1)
+ fun_l8_n55(x)
+ else
+ fun_l8_n841(x)
+ end
+end
+
+def fun_l7_n269(x)
+ if (x < 1)
+ fun_l8_n914(x)
+ else
+ fun_l8_n108(x)
+ end
+end
+
+def fun_l7_n270(x)
+ if (x < 1)
+ fun_l8_n733(x)
+ else
+ fun_l8_n398(x)
+ end
+end
+
+def fun_l7_n271(x)
+ if (x < 1)
+ fun_l8_n145(x)
+ else
+ fun_l8_n735(x)
+ end
+end
+
+def fun_l7_n272(x)
+ if (x < 1)
+ fun_l8_n404(x)
+ else
+ fun_l8_n216(x)
+ end
+end
+
+def fun_l7_n273(x)
+ if (x < 1)
+ fun_l8_n380(x)
+ else
+ fun_l8_n798(x)
+ end
+end
+
+def fun_l7_n274(x)
+ if (x < 1)
+ fun_l8_n63(x)
+ else
+ fun_l8_n133(x)
+ end
+end
+
+def fun_l7_n275(x)
+ if (x < 1)
+ fun_l8_n878(x)
+ else
+ fun_l8_n284(x)
+ end
+end
+
+def fun_l7_n276(x)
+ if (x < 1)
+ fun_l8_n718(x)
+ else
+ fun_l8_n97(x)
+ end
+end
+
+def fun_l7_n277(x)
+ if (x < 1)
+ fun_l8_n509(x)
+ else
+ fun_l8_n695(x)
+ end
+end
+
+def fun_l7_n278(x)
+ if (x < 1)
+ fun_l8_n581(x)
+ else
+ fun_l8_n898(x)
+ end
+end
+
+def fun_l7_n279(x)
+ if (x < 1)
+ fun_l8_n247(x)
+ else
+ fun_l8_n526(x)
+ end
+end
+
+def fun_l7_n280(x)
+ if (x < 1)
+ fun_l8_n995(x)
+ else
+ fun_l8_n614(x)
+ end
+end
+
+def fun_l7_n281(x)
+ if (x < 1)
+ fun_l8_n301(x)
+ else
+ fun_l8_n178(x)
+ end
+end
+
+def fun_l7_n282(x)
+ if (x < 1)
+ fun_l8_n575(x)
+ else
+ fun_l8_n712(x)
+ end
+end
+
+def fun_l7_n283(x)
+ if (x < 1)
+ fun_l8_n261(x)
+ else
+ fun_l8_n740(x)
+ end
+end
+
+def fun_l7_n284(x)
+ if (x < 1)
+ fun_l8_n284(x)
+ else
+ fun_l8_n350(x)
+ end
+end
+
+def fun_l7_n285(x)
+ if (x < 1)
+ fun_l8_n521(x)
+ else
+ fun_l8_n305(x)
+ end
+end
+
+def fun_l7_n286(x)
+ if (x < 1)
+ fun_l8_n271(x)
+ else
+ fun_l8_n728(x)
+ end
+end
+
+def fun_l7_n287(x)
+ if (x < 1)
+ fun_l8_n292(x)
+ else
+ fun_l8_n799(x)
+ end
+end
+
+def fun_l7_n288(x)
+ if (x < 1)
+ fun_l8_n852(x)
+ else
+ fun_l8_n606(x)
+ end
+end
+
+def fun_l7_n289(x)
+ if (x < 1)
+ fun_l8_n177(x)
+ else
+ fun_l8_n649(x)
+ end
+end
+
+def fun_l7_n290(x)
+ if (x < 1)
+ fun_l8_n488(x)
+ else
+ fun_l8_n252(x)
+ end
+end
+
+def fun_l7_n291(x)
+ if (x < 1)
+ fun_l8_n815(x)
+ else
+ fun_l8_n690(x)
+ end
+end
+
+def fun_l7_n292(x)
+ if (x < 1)
+ fun_l8_n999(x)
+ else
+ fun_l8_n700(x)
+ end
+end
+
+def fun_l7_n293(x)
+ if (x < 1)
+ fun_l8_n9(x)
+ else
+ fun_l8_n194(x)
+ end
+end
+
+def fun_l7_n294(x)
+ if (x < 1)
+ fun_l8_n390(x)
+ else
+ fun_l8_n772(x)
+ end
+end
+
+def fun_l7_n295(x)
+ if (x < 1)
+ fun_l8_n487(x)
+ else
+ fun_l8_n587(x)
+ end
+end
+
+def fun_l7_n296(x)
+ if (x < 1)
+ fun_l8_n892(x)
+ else
+ fun_l8_n126(x)
+ end
+end
+
+def fun_l7_n297(x)
+ if (x < 1)
+ fun_l8_n199(x)
+ else
+ fun_l8_n312(x)
+ end
+end
+
+def fun_l7_n298(x)
+ if (x < 1)
+ fun_l8_n534(x)
+ else
+ fun_l8_n640(x)
+ end
+end
+
+def fun_l7_n299(x)
+ if (x < 1)
+ fun_l8_n344(x)
+ else
+ fun_l8_n58(x)
+ end
+end
+
+def fun_l7_n300(x)
+ if (x < 1)
+ fun_l8_n11(x)
+ else
+ fun_l8_n922(x)
+ end
+end
+
+def fun_l7_n301(x)
+ if (x < 1)
+ fun_l8_n848(x)
+ else
+ fun_l8_n432(x)
+ end
+end
+
+def fun_l7_n302(x)
+ if (x < 1)
+ fun_l8_n292(x)
+ else
+ fun_l8_n86(x)
+ end
+end
+
+def fun_l7_n303(x)
+ if (x < 1)
+ fun_l8_n239(x)
+ else
+ fun_l8_n296(x)
+ end
+end
+
+def fun_l7_n304(x)
+ if (x < 1)
+ fun_l8_n350(x)
+ else
+ fun_l8_n769(x)
+ end
+end
+
+def fun_l7_n305(x)
+ if (x < 1)
+ fun_l8_n959(x)
+ else
+ fun_l8_n292(x)
+ end
+end
+
+def fun_l7_n306(x)
+ if (x < 1)
+ fun_l8_n371(x)
+ else
+ fun_l8_n507(x)
+ end
+end
+
+def fun_l7_n307(x)
+ if (x < 1)
+ fun_l8_n910(x)
+ else
+ fun_l8_n542(x)
+ end
+end
+
+def fun_l7_n308(x)
+ if (x < 1)
+ fun_l8_n299(x)
+ else
+ fun_l8_n543(x)
+ end
+end
+
+def fun_l7_n309(x)
+ if (x < 1)
+ fun_l8_n145(x)
+ else
+ fun_l8_n393(x)
+ end
+end
+
+def fun_l7_n310(x)
+ if (x < 1)
+ fun_l8_n1(x)
+ else
+ fun_l8_n810(x)
+ end
+end
+
+def fun_l7_n311(x)
+ if (x < 1)
+ fun_l8_n866(x)
+ else
+ fun_l8_n519(x)
+ end
+end
+
+def fun_l7_n312(x)
+ if (x < 1)
+ fun_l8_n730(x)
+ else
+ fun_l8_n912(x)
+ end
+end
+
+def fun_l7_n313(x)
+ if (x < 1)
+ fun_l8_n128(x)
+ else
+ fun_l8_n3(x)
+ end
+end
+
+def fun_l7_n314(x)
+ if (x < 1)
+ fun_l8_n393(x)
+ else
+ fun_l8_n887(x)
+ end
+end
+
+def fun_l7_n315(x)
+ if (x < 1)
+ fun_l8_n165(x)
+ else
+ fun_l8_n540(x)
+ end
+end
+
+def fun_l7_n316(x)
+ if (x < 1)
+ fun_l8_n641(x)
+ else
+ fun_l8_n255(x)
+ end
+end
+
+def fun_l7_n317(x)
+ if (x < 1)
+ fun_l8_n265(x)
+ else
+ fun_l8_n754(x)
+ end
+end
+
+def fun_l7_n318(x)
+ if (x < 1)
+ fun_l8_n433(x)
+ else
+ fun_l8_n163(x)
+ end
+end
+
+def fun_l7_n319(x)
+ if (x < 1)
+ fun_l8_n409(x)
+ else
+ fun_l8_n110(x)
+ end
+end
+
+def fun_l7_n320(x)
+ if (x < 1)
+ fun_l8_n704(x)
+ else
+ fun_l8_n959(x)
+ end
+end
+
+def fun_l7_n321(x)
+ if (x < 1)
+ fun_l8_n334(x)
+ else
+ fun_l8_n280(x)
+ end
+end
+
+def fun_l7_n322(x)
+ if (x < 1)
+ fun_l8_n107(x)
+ else
+ fun_l8_n403(x)
+ end
+end
+
+def fun_l7_n323(x)
+ if (x < 1)
+ fun_l8_n108(x)
+ else
+ fun_l8_n426(x)
+ end
+end
+
+def fun_l7_n324(x)
+ if (x < 1)
+ fun_l8_n310(x)
+ else
+ fun_l8_n968(x)
+ end
+end
+
+def fun_l7_n325(x)
+ if (x < 1)
+ fun_l8_n600(x)
+ else
+ fun_l8_n850(x)
+ end
+end
+
+def fun_l7_n326(x)
+ if (x < 1)
+ fun_l8_n736(x)
+ else
+ fun_l8_n61(x)
+ end
+end
+
+def fun_l7_n327(x)
+ if (x < 1)
+ fun_l8_n86(x)
+ else
+ fun_l8_n948(x)
+ end
+end
+
+def fun_l7_n328(x)
+ if (x < 1)
+ fun_l8_n625(x)
+ else
+ fun_l8_n644(x)
+ end
+end
+
+def fun_l7_n329(x)
+ if (x < 1)
+ fun_l8_n507(x)
+ else
+ fun_l8_n624(x)
+ end
+end
+
+def fun_l7_n330(x)
+ if (x < 1)
+ fun_l8_n956(x)
+ else
+ fun_l8_n281(x)
+ end
+end
+
+def fun_l7_n331(x)
+ if (x < 1)
+ fun_l8_n72(x)
+ else
+ fun_l8_n695(x)
+ end
+end
+
+def fun_l7_n332(x)
+ if (x < 1)
+ fun_l8_n445(x)
+ else
+ fun_l8_n465(x)
+ end
+end
+
+def fun_l7_n333(x)
+ if (x < 1)
+ fun_l8_n438(x)
+ else
+ fun_l8_n698(x)
+ end
+end
+
+def fun_l7_n334(x)
+ if (x < 1)
+ fun_l8_n242(x)
+ else
+ fun_l8_n837(x)
+ end
+end
+
+def fun_l7_n335(x)
+ if (x < 1)
+ fun_l8_n299(x)
+ else
+ fun_l8_n312(x)
+ end
+end
+
+def fun_l7_n336(x)
+ if (x < 1)
+ fun_l8_n264(x)
+ else
+ fun_l8_n330(x)
+ end
+end
+
+def fun_l7_n337(x)
+ if (x < 1)
+ fun_l8_n251(x)
+ else
+ fun_l8_n459(x)
+ end
+end
+
+def fun_l7_n338(x)
+ if (x < 1)
+ fun_l8_n876(x)
+ else
+ fun_l8_n689(x)
+ end
+end
+
+def fun_l7_n339(x)
+ if (x < 1)
+ fun_l8_n547(x)
+ else
+ fun_l8_n745(x)
+ end
+end
+
+def fun_l7_n340(x)
+ if (x < 1)
+ fun_l8_n493(x)
+ else
+ fun_l8_n877(x)
+ end
+end
+
+def fun_l7_n341(x)
+ if (x < 1)
+ fun_l8_n143(x)
+ else
+ fun_l8_n429(x)
+ end
+end
+
+def fun_l7_n342(x)
+ if (x < 1)
+ fun_l8_n650(x)
+ else
+ fun_l8_n384(x)
+ end
+end
+
+def fun_l7_n343(x)
+ if (x < 1)
+ fun_l8_n897(x)
+ else
+ fun_l8_n980(x)
+ end
+end
+
+def fun_l7_n344(x)
+ if (x < 1)
+ fun_l8_n699(x)
+ else
+ fun_l8_n673(x)
+ end
+end
+
+def fun_l7_n345(x)
+ if (x < 1)
+ fun_l8_n25(x)
+ else
+ fun_l8_n342(x)
+ end
+end
+
+def fun_l7_n346(x)
+ if (x < 1)
+ fun_l8_n345(x)
+ else
+ fun_l8_n140(x)
+ end
+end
+
+def fun_l7_n347(x)
+ if (x < 1)
+ fun_l8_n661(x)
+ else
+ fun_l8_n153(x)
+ end
+end
+
+def fun_l7_n348(x)
+ if (x < 1)
+ fun_l8_n477(x)
+ else
+ fun_l8_n460(x)
+ end
+end
+
+def fun_l7_n349(x)
+ if (x < 1)
+ fun_l8_n641(x)
+ else
+ fun_l8_n941(x)
+ end
+end
+
+def fun_l7_n350(x)
+ if (x < 1)
+ fun_l8_n952(x)
+ else
+ fun_l8_n886(x)
+ end
+end
+
+def fun_l7_n351(x)
+ if (x < 1)
+ fun_l8_n338(x)
+ else
+ fun_l8_n655(x)
+ end
+end
+
+def fun_l7_n352(x)
+ if (x < 1)
+ fun_l8_n717(x)
+ else
+ fun_l8_n314(x)
+ end
+end
+
+def fun_l7_n353(x)
+ if (x < 1)
+ fun_l8_n645(x)
+ else
+ fun_l8_n464(x)
+ end
+end
+
+def fun_l7_n354(x)
+ if (x < 1)
+ fun_l8_n114(x)
+ else
+ fun_l8_n816(x)
+ end
+end
+
+def fun_l7_n355(x)
+ if (x < 1)
+ fun_l8_n18(x)
+ else
+ fun_l8_n173(x)
+ end
+end
+
+def fun_l7_n356(x)
+ if (x < 1)
+ fun_l8_n214(x)
+ else
+ fun_l8_n834(x)
+ end
+end
+
+def fun_l7_n357(x)
+ if (x < 1)
+ fun_l8_n6(x)
+ else
+ fun_l8_n161(x)
+ end
+end
+
+def fun_l7_n358(x)
+ if (x < 1)
+ fun_l8_n823(x)
+ else
+ fun_l8_n695(x)
+ end
+end
+
+def fun_l7_n359(x)
+ if (x < 1)
+ fun_l8_n86(x)
+ else
+ fun_l8_n174(x)
+ end
+end
+
+def fun_l7_n360(x)
+ if (x < 1)
+ fun_l8_n904(x)
+ else
+ fun_l8_n240(x)
+ end
+end
+
+def fun_l7_n361(x)
+ if (x < 1)
+ fun_l8_n857(x)
+ else
+ fun_l8_n494(x)
+ end
+end
+
+def fun_l7_n362(x)
+ if (x < 1)
+ fun_l8_n780(x)
+ else
+ fun_l8_n186(x)
+ end
+end
+
+def fun_l7_n363(x)
+ if (x < 1)
+ fun_l8_n575(x)
+ else
+ fun_l8_n510(x)
+ end
+end
+
+def fun_l7_n364(x)
+ if (x < 1)
+ fun_l8_n412(x)
+ else
+ fun_l8_n153(x)
+ end
+end
+
+def fun_l7_n365(x)
+ if (x < 1)
+ fun_l8_n840(x)
+ else
+ fun_l8_n199(x)
+ end
+end
+
+def fun_l7_n366(x)
+ if (x < 1)
+ fun_l8_n162(x)
+ else
+ fun_l8_n971(x)
+ end
+end
+
+def fun_l7_n367(x)
+ if (x < 1)
+ fun_l8_n200(x)
+ else
+ fun_l8_n128(x)
+ end
+end
+
+def fun_l7_n368(x)
+ if (x < 1)
+ fun_l8_n404(x)
+ else
+ fun_l8_n657(x)
+ end
+end
+
+def fun_l7_n369(x)
+ if (x < 1)
+ fun_l8_n631(x)
+ else
+ fun_l8_n714(x)
+ end
+end
+
+def fun_l7_n370(x)
+ if (x < 1)
+ fun_l8_n177(x)
+ else
+ fun_l8_n718(x)
+ end
+end
+
+def fun_l7_n371(x)
+ if (x < 1)
+ fun_l8_n284(x)
+ else
+ fun_l8_n474(x)
+ end
+end
+
+def fun_l7_n372(x)
+ if (x < 1)
+ fun_l8_n138(x)
+ else
+ fun_l8_n461(x)
+ end
+end
+
+def fun_l7_n373(x)
+ if (x < 1)
+ fun_l8_n78(x)
+ else
+ fun_l8_n750(x)
+ end
+end
+
+def fun_l7_n374(x)
+ if (x < 1)
+ fun_l8_n231(x)
+ else
+ fun_l8_n648(x)
+ end
+end
+
+def fun_l7_n375(x)
+ if (x < 1)
+ fun_l8_n238(x)
+ else
+ fun_l8_n644(x)
+ end
+end
+
+def fun_l7_n376(x)
+ if (x < 1)
+ fun_l8_n509(x)
+ else
+ fun_l8_n354(x)
+ end
+end
+
+def fun_l7_n377(x)
+ if (x < 1)
+ fun_l8_n332(x)
+ else
+ fun_l8_n739(x)
+ end
+end
+
+def fun_l7_n378(x)
+ if (x < 1)
+ fun_l8_n76(x)
+ else
+ fun_l8_n505(x)
+ end
+end
+
+def fun_l7_n379(x)
+ if (x < 1)
+ fun_l8_n781(x)
+ else
+ fun_l8_n918(x)
+ end
+end
+
+def fun_l7_n380(x)
+ if (x < 1)
+ fun_l8_n854(x)
+ else
+ fun_l8_n85(x)
+ end
+end
+
+def fun_l7_n381(x)
+ if (x < 1)
+ fun_l8_n67(x)
+ else
+ fun_l8_n690(x)
+ end
+end
+
+def fun_l7_n382(x)
+ if (x < 1)
+ fun_l8_n425(x)
+ else
+ fun_l8_n643(x)
+ end
+end
+
+def fun_l7_n383(x)
+ if (x < 1)
+ fun_l8_n210(x)
+ else
+ fun_l8_n533(x)
+ end
+end
+
+def fun_l7_n384(x)
+ if (x < 1)
+ fun_l8_n469(x)
+ else
+ fun_l8_n274(x)
+ end
+end
+
+def fun_l7_n385(x)
+ if (x < 1)
+ fun_l8_n398(x)
+ else
+ fun_l8_n583(x)
+ end
+end
+
+def fun_l7_n386(x)
+ if (x < 1)
+ fun_l8_n483(x)
+ else
+ fun_l8_n80(x)
+ end
+end
+
+def fun_l7_n387(x)
+ if (x < 1)
+ fun_l8_n557(x)
+ else
+ fun_l8_n165(x)
+ end
+end
+
+def fun_l7_n388(x)
+ if (x < 1)
+ fun_l8_n335(x)
+ else
+ fun_l8_n656(x)
+ end
+end
+
+def fun_l7_n389(x)
+ if (x < 1)
+ fun_l8_n810(x)
+ else
+ fun_l8_n586(x)
+ end
+end
+
+def fun_l7_n390(x)
+ if (x < 1)
+ fun_l8_n90(x)
+ else
+ fun_l8_n788(x)
+ end
+end
+
+def fun_l7_n391(x)
+ if (x < 1)
+ fun_l8_n709(x)
+ else
+ fun_l8_n948(x)
+ end
+end
+
+def fun_l7_n392(x)
+ if (x < 1)
+ fun_l8_n139(x)
+ else
+ fun_l8_n631(x)
+ end
+end
+
+def fun_l7_n393(x)
+ if (x < 1)
+ fun_l8_n341(x)
+ else
+ fun_l8_n506(x)
+ end
+end
+
+def fun_l7_n394(x)
+ if (x < 1)
+ fun_l8_n435(x)
+ else
+ fun_l8_n178(x)
+ end
+end
+
+def fun_l7_n395(x)
+ if (x < 1)
+ fun_l8_n186(x)
+ else
+ fun_l8_n58(x)
+ end
+end
+
+def fun_l7_n396(x)
+ if (x < 1)
+ fun_l8_n512(x)
+ else
+ fun_l8_n87(x)
+ end
+end
+
+def fun_l7_n397(x)
+ if (x < 1)
+ fun_l8_n763(x)
+ else
+ fun_l8_n220(x)
+ end
+end
+
+def fun_l7_n398(x)
+ if (x < 1)
+ fun_l8_n266(x)
+ else
+ fun_l8_n231(x)
+ end
+end
+
+def fun_l7_n399(x)
+ if (x < 1)
+ fun_l8_n308(x)
+ else
+ fun_l8_n512(x)
+ end
+end
+
+def fun_l7_n400(x)
+ if (x < 1)
+ fun_l8_n26(x)
+ else
+ fun_l8_n228(x)
+ end
+end
+
+def fun_l7_n401(x)
+ if (x < 1)
+ fun_l8_n143(x)
+ else
+ fun_l8_n826(x)
+ end
+end
+
+def fun_l7_n402(x)
+ if (x < 1)
+ fun_l8_n893(x)
+ else
+ fun_l8_n334(x)
+ end
+end
+
+def fun_l7_n403(x)
+ if (x < 1)
+ fun_l8_n9(x)
+ else
+ fun_l8_n867(x)
+ end
+end
+
+def fun_l7_n404(x)
+ if (x < 1)
+ fun_l8_n85(x)
+ else
+ fun_l8_n279(x)
+ end
+end
+
+def fun_l7_n405(x)
+ if (x < 1)
+ fun_l8_n30(x)
+ else
+ fun_l8_n85(x)
+ end
+end
+
+def fun_l7_n406(x)
+ if (x < 1)
+ fun_l8_n38(x)
+ else
+ fun_l8_n979(x)
+ end
+end
+
+def fun_l7_n407(x)
+ if (x < 1)
+ fun_l8_n630(x)
+ else
+ fun_l8_n262(x)
+ end
+end
+
+def fun_l7_n408(x)
+ if (x < 1)
+ fun_l8_n430(x)
+ else
+ fun_l8_n178(x)
+ end
+end
+
+def fun_l7_n409(x)
+ if (x < 1)
+ fun_l8_n131(x)
+ else
+ fun_l8_n66(x)
+ end
+end
+
+def fun_l7_n410(x)
+ if (x < 1)
+ fun_l8_n373(x)
+ else
+ fun_l8_n514(x)
+ end
+end
+
+def fun_l7_n411(x)
+ if (x < 1)
+ fun_l8_n334(x)
+ else
+ fun_l8_n591(x)
+ end
+end
+
+def fun_l7_n412(x)
+ if (x < 1)
+ fun_l8_n619(x)
+ else
+ fun_l8_n490(x)
+ end
+end
+
+def fun_l7_n413(x)
+ if (x < 1)
+ fun_l8_n318(x)
+ else
+ fun_l8_n456(x)
+ end
+end
+
+def fun_l7_n414(x)
+ if (x < 1)
+ fun_l8_n576(x)
+ else
+ fun_l8_n638(x)
+ end
+end
+
+def fun_l7_n415(x)
+ if (x < 1)
+ fun_l8_n407(x)
+ else
+ fun_l8_n44(x)
+ end
+end
+
+def fun_l7_n416(x)
+ if (x < 1)
+ fun_l8_n970(x)
+ else
+ fun_l8_n564(x)
+ end
+end
+
+def fun_l7_n417(x)
+ if (x < 1)
+ fun_l8_n163(x)
+ else
+ fun_l8_n533(x)
+ end
+end
+
+def fun_l7_n418(x)
+ if (x < 1)
+ fun_l8_n216(x)
+ else
+ fun_l8_n604(x)
+ end
+end
+
+def fun_l7_n419(x)
+ if (x < 1)
+ fun_l8_n505(x)
+ else
+ fun_l8_n620(x)
+ end
+end
+
+def fun_l7_n420(x)
+ if (x < 1)
+ fun_l8_n746(x)
+ else
+ fun_l8_n998(x)
+ end
+end
+
+def fun_l7_n421(x)
+ if (x < 1)
+ fun_l8_n266(x)
+ else
+ fun_l8_n762(x)
+ end
+end
+
+def fun_l7_n422(x)
+ if (x < 1)
+ fun_l8_n216(x)
+ else
+ fun_l8_n995(x)
+ end
+end
+
+def fun_l7_n423(x)
+ if (x < 1)
+ fun_l8_n824(x)
+ else
+ fun_l8_n349(x)
+ end
+end
+
+def fun_l7_n424(x)
+ if (x < 1)
+ fun_l8_n177(x)
+ else
+ fun_l8_n61(x)
+ end
+end
+
+def fun_l7_n425(x)
+ if (x < 1)
+ fun_l8_n286(x)
+ else
+ fun_l8_n213(x)
+ end
+end
+
+def fun_l7_n426(x)
+ if (x < 1)
+ fun_l8_n794(x)
+ else
+ fun_l8_n428(x)
+ end
+end
+
+def fun_l7_n427(x)
+ if (x < 1)
+ fun_l8_n404(x)
+ else
+ fun_l8_n202(x)
+ end
+end
+
+def fun_l7_n428(x)
+ if (x < 1)
+ fun_l8_n571(x)
+ else
+ fun_l8_n812(x)
+ end
+end
+
+def fun_l7_n429(x)
+ if (x < 1)
+ fun_l8_n165(x)
+ else
+ fun_l8_n277(x)
+ end
+end
+
+def fun_l7_n430(x)
+ if (x < 1)
+ fun_l8_n138(x)
+ else
+ fun_l8_n230(x)
+ end
+end
+
+def fun_l7_n431(x)
+ if (x < 1)
+ fun_l8_n832(x)
+ else
+ fun_l8_n78(x)
+ end
+end
+
+def fun_l7_n432(x)
+ if (x < 1)
+ fun_l8_n866(x)
+ else
+ fun_l8_n137(x)
+ end
+end
+
+def fun_l7_n433(x)
+ if (x < 1)
+ fun_l8_n92(x)
+ else
+ fun_l8_n638(x)
+ end
+end
+
+def fun_l7_n434(x)
+ if (x < 1)
+ fun_l8_n788(x)
+ else
+ fun_l8_n991(x)
+ end
+end
+
+def fun_l7_n435(x)
+ if (x < 1)
+ fun_l8_n584(x)
+ else
+ fun_l8_n783(x)
+ end
+end
+
+def fun_l7_n436(x)
+ if (x < 1)
+ fun_l8_n786(x)
+ else
+ fun_l8_n771(x)
+ end
+end
+
+def fun_l7_n437(x)
+ if (x < 1)
+ fun_l8_n650(x)
+ else
+ fun_l8_n684(x)
+ end
+end
+
+def fun_l7_n438(x)
+ if (x < 1)
+ fun_l8_n964(x)
+ else
+ fun_l8_n738(x)
+ end
+end
+
+def fun_l7_n439(x)
+ if (x < 1)
+ fun_l8_n356(x)
+ else
+ fun_l8_n979(x)
+ end
+end
+
+def fun_l7_n440(x)
+ if (x < 1)
+ fun_l8_n630(x)
+ else
+ fun_l8_n79(x)
+ end
+end
+
+def fun_l7_n441(x)
+ if (x < 1)
+ fun_l8_n326(x)
+ else
+ fun_l8_n667(x)
+ end
+end
+
+def fun_l7_n442(x)
+ if (x < 1)
+ fun_l8_n561(x)
+ else
+ fun_l8_n263(x)
+ end
+end
+
+def fun_l7_n443(x)
+ if (x < 1)
+ fun_l8_n62(x)
+ else
+ fun_l8_n528(x)
+ end
+end
+
+def fun_l7_n444(x)
+ if (x < 1)
+ fun_l8_n156(x)
+ else
+ fun_l8_n496(x)
+ end
+end
+
+def fun_l7_n445(x)
+ if (x < 1)
+ fun_l8_n971(x)
+ else
+ fun_l8_n853(x)
+ end
+end
+
+def fun_l7_n446(x)
+ if (x < 1)
+ fun_l8_n217(x)
+ else
+ fun_l8_n985(x)
+ end
+end
+
+def fun_l7_n447(x)
+ if (x < 1)
+ fun_l8_n569(x)
+ else
+ fun_l8_n320(x)
+ end
+end
+
+def fun_l7_n448(x)
+ if (x < 1)
+ fun_l8_n133(x)
+ else
+ fun_l8_n417(x)
+ end
+end
+
+def fun_l7_n449(x)
+ if (x < 1)
+ fun_l8_n369(x)
+ else
+ fun_l8_n25(x)
+ end
+end
+
+def fun_l7_n450(x)
+ if (x < 1)
+ fun_l8_n735(x)
+ else
+ fun_l8_n573(x)
+ end
+end
+
+def fun_l7_n451(x)
+ if (x < 1)
+ fun_l8_n764(x)
+ else
+ fun_l8_n247(x)
+ end
+end
+
+def fun_l7_n452(x)
+ if (x < 1)
+ fun_l8_n512(x)
+ else
+ fun_l8_n274(x)
+ end
+end
+
+def fun_l7_n453(x)
+ if (x < 1)
+ fun_l8_n388(x)
+ else
+ fun_l8_n438(x)
+ end
+end
+
+def fun_l7_n454(x)
+ if (x < 1)
+ fun_l8_n565(x)
+ else
+ fun_l8_n449(x)
+ end
+end
+
+def fun_l7_n455(x)
+ if (x < 1)
+ fun_l8_n771(x)
+ else
+ fun_l8_n827(x)
+ end
+end
+
+def fun_l7_n456(x)
+ if (x < 1)
+ fun_l8_n538(x)
+ else
+ fun_l8_n270(x)
+ end
+end
+
+def fun_l7_n457(x)
+ if (x < 1)
+ fun_l8_n288(x)
+ else
+ fun_l8_n325(x)
+ end
+end
+
+def fun_l7_n458(x)
+ if (x < 1)
+ fun_l8_n345(x)
+ else
+ fun_l8_n334(x)
+ end
+end
+
+def fun_l7_n459(x)
+ if (x < 1)
+ fun_l8_n696(x)
+ else
+ fun_l8_n440(x)
+ end
+end
+
+def fun_l7_n460(x)
+ if (x < 1)
+ fun_l8_n509(x)
+ else
+ fun_l8_n580(x)
+ end
+end
+
+def fun_l7_n461(x)
+ if (x < 1)
+ fun_l8_n254(x)
+ else
+ fun_l8_n162(x)
+ end
+end
+
+def fun_l7_n462(x)
+ if (x < 1)
+ fun_l8_n541(x)
+ else
+ fun_l8_n493(x)
+ end
+end
+
+def fun_l7_n463(x)
+ if (x < 1)
+ fun_l8_n371(x)
+ else
+ fun_l8_n302(x)
+ end
+end
+
+def fun_l7_n464(x)
+ if (x < 1)
+ fun_l8_n44(x)
+ else
+ fun_l8_n677(x)
+ end
+end
+
+def fun_l7_n465(x)
+ if (x < 1)
+ fun_l8_n312(x)
+ else
+ fun_l8_n716(x)
+ end
+end
+
+def fun_l7_n466(x)
+ if (x < 1)
+ fun_l8_n252(x)
+ else
+ fun_l8_n827(x)
+ end
+end
+
+def fun_l7_n467(x)
+ if (x < 1)
+ fun_l8_n871(x)
+ else
+ fun_l8_n962(x)
+ end
+end
+
+def fun_l7_n468(x)
+ if (x < 1)
+ fun_l8_n323(x)
+ else
+ fun_l8_n813(x)
+ end
+end
+
+def fun_l7_n469(x)
+ if (x < 1)
+ fun_l8_n100(x)
+ else
+ fun_l8_n905(x)
+ end
+end
+
+def fun_l7_n470(x)
+ if (x < 1)
+ fun_l8_n95(x)
+ else
+ fun_l8_n96(x)
+ end
+end
+
+def fun_l7_n471(x)
+ if (x < 1)
+ fun_l8_n398(x)
+ else
+ fun_l8_n40(x)
+ end
+end
+
+def fun_l7_n472(x)
+ if (x < 1)
+ fun_l8_n280(x)
+ else
+ fun_l8_n34(x)
+ end
+end
+
+def fun_l7_n473(x)
+ if (x < 1)
+ fun_l8_n262(x)
+ else
+ fun_l8_n399(x)
+ end
+end
+
+def fun_l7_n474(x)
+ if (x < 1)
+ fun_l8_n126(x)
+ else
+ fun_l8_n208(x)
+ end
+end
+
+def fun_l7_n475(x)
+ if (x < 1)
+ fun_l8_n371(x)
+ else
+ fun_l8_n697(x)
+ end
+end
+
+def fun_l7_n476(x)
+ if (x < 1)
+ fun_l8_n617(x)
+ else
+ fun_l8_n822(x)
+ end
+end
+
+def fun_l7_n477(x)
+ if (x < 1)
+ fun_l8_n24(x)
+ else
+ fun_l8_n300(x)
+ end
+end
+
+def fun_l7_n478(x)
+ if (x < 1)
+ fun_l8_n864(x)
+ else
+ fun_l8_n357(x)
+ end
+end
+
+def fun_l7_n479(x)
+ if (x < 1)
+ fun_l8_n231(x)
+ else
+ fun_l8_n892(x)
+ end
+end
+
+def fun_l7_n480(x)
+ if (x < 1)
+ fun_l8_n200(x)
+ else
+ fun_l8_n49(x)
+ end
+end
+
+def fun_l7_n481(x)
+ if (x < 1)
+ fun_l8_n43(x)
+ else
+ fun_l8_n86(x)
+ end
+end
+
+def fun_l7_n482(x)
+ if (x < 1)
+ fun_l8_n617(x)
+ else
+ fun_l8_n752(x)
+ end
+end
+
+def fun_l7_n483(x)
+ if (x < 1)
+ fun_l8_n65(x)
+ else
+ fun_l8_n796(x)
+ end
+end
+
+def fun_l7_n484(x)
+ if (x < 1)
+ fun_l8_n960(x)
+ else
+ fun_l8_n174(x)
+ end
+end
+
+def fun_l7_n485(x)
+ if (x < 1)
+ fun_l8_n383(x)
+ else
+ fun_l8_n50(x)
+ end
+end
+
+def fun_l7_n486(x)
+ if (x < 1)
+ fun_l8_n269(x)
+ else
+ fun_l8_n413(x)
+ end
+end
+
+def fun_l7_n487(x)
+ if (x < 1)
+ fun_l8_n762(x)
+ else
+ fun_l8_n368(x)
+ end
+end
+
+def fun_l7_n488(x)
+ if (x < 1)
+ fun_l8_n635(x)
+ else
+ fun_l8_n900(x)
+ end
+end
+
+def fun_l7_n489(x)
+ if (x < 1)
+ fun_l8_n707(x)
+ else
+ fun_l8_n376(x)
+ end
+end
+
+def fun_l7_n490(x)
+ if (x < 1)
+ fun_l8_n215(x)
+ else
+ fun_l8_n255(x)
+ end
+end
+
+def fun_l7_n491(x)
+ if (x < 1)
+ fun_l8_n730(x)
+ else
+ fun_l8_n489(x)
+ end
+end
+
+def fun_l7_n492(x)
+ if (x < 1)
+ fun_l8_n896(x)
+ else
+ fun_l8_n501(x)
+ end
+end
+
+def fun_l7_n493(x)
+ if (x < 1)
+ fun_l8_n359(x)
+ else
+ fun_l8_n876(x)
+ end
+end
+
+def fun_l7_n494(x)
+ if (x < 1)
+ fun_l8_n13(x)
+ else
+ fun_l8_n669(x)
+ end
+end
+
+def fun_l7_n495(x)
+ if (x < 1)
+ fun_l8_n442(x)
+ else
+ fun_l8_n975(x)
+ end
+end
+
+def fun_l7_n496(x)
+ if (x < 1)
+ fun_l8_n349(x)
+ else
+ fun_l8_n240(x)
+ end
+end
+
+def fun_l7_n497(x)
+ if (x < 1)
+ fun_l8_n174(x)
+ else
+ fun_l8_n416(x)
+ end
+end
+
+def fun_l7_n498(x)
+ if (x < 1)
+ fun_l8_n141(x)
+ else
+ fun_l8_n231(x)
+ end
+end
+
+def fun_l7_n499(x)
+ if (x < 1)
+ fun_l8_n868(x)
+ else
+ fun_l8_n370(x)
+ end
+end
+
+def fun_l7_n500(x)
+ if (x < 1)
+ fun_l8_n888(x)
+ else
+ fun_l8_n525(x)
+ end
+end
+
+def fun_l7_n501(x)
+ if (x < 1)
+ fun_l8_n418(x)
+ else
+ fun_l8_n402(x)
+ end
+end
+
+def fun_l7_n502(x)
+ if (x < 1)
+ fun_l8_n910(x)
+ else
+ fun_l8_n308(x)
+ end
+end
+
+def fun_l7_n503(x)
+ if (x < 1)
+ fun_l8_n435(x)
+ else
+ fun_l8_n106(x)
+ end
+end
+
+def fun_l7_n504(x)
+ if (x < 1)
+ fun_l8_n716(x)
+ else
+ fun_l8_n768(x)
+ end
+end
+
+def fun_l7_n505(x)
+ if (x < 1)
+ fun_l8_n690(x)
+ else
+ fun_l8_n382(x)
+ end
+end
+
+def fun_l7_n506(x)
+ if (x < 1)
+ fun_l8_n786(x)
+ else
+ fun_l8_n270(x)
+ end
+end
+
+def fun_l7_n507(x)
+ if (x < 1)
+ fun_l8_n317(x)
+ else
+ fun_l8_n802(x)
+ end
+end
+
+def fun_l7_n508(x)
+ if (x < 1)
+ fun_l8_n423(x)
+ else
+ fun_l8_n91(x)
+ end
+end
+
+def fun_l7_n509(x)
+ if (x < 1)
+ fun_l8_n853(x)
+ else
+ fun_l8_n434(x)
+ end
+end
+
+def fun_l7_n510(x)
+ if (x < 1)
+ fun_l8_n691(x)
+ else
+ fun_l8_n458(x)
+ end
+end
+
+def fun_l7_n511(x)
+ if (x < 1)
+ fun_l8_n806(x)
+ else
+ fun_l8_n989(x)
+ end
+end
+
+def fun_l7_n512(x)
+ if (x < 1)
+ fun_l8_n696(x)
+ else
+ fun_l8_n234(x)
+ end
+end
+
+def fun_l7_n513(x)
+ if (x < 1)
+ fun_l8_n370(x)
+ else
+ fun_l8_n440(x)
+ end
+end
+
+def fun_l7_n514(x)
+ if (x < 1)
+ fun_l8_n889(x)
+ else
+ fun_l8_n306(x)
+ end
+end
+
+def fun_l7_n515(x)
+ if (x < 1)
+ fun_l8_n147(x)
+ else
+ fun_l8_n527(x)
+ end
+end
+
+def fun_l7_n516(x)
+ if (x < 1)
+ fun_l8_n18(x)
+ else
+ fun_l8_n120(x)
+ end
+end
+
+def fun_l7_n517(x)
+ if (x < 1)
+ fun_l8_n93(x)
+ else
+ fun_l8_n861(x)
+ end
+end
+
+def fun_l7_n518(x)
+ if (x < 1)
+ fun_l8_n954(x)
+ else
+ fun_l8_n864(x)
+ end
+end
+
+def fun_l7_n519(x)
+ if (x < 1)
+ fun_l8_n886(x)
+ else
+ fun_l8_n227(x)
+ end
+end
+
+def fun_l7_n520(x)
+ if (x < 1)
+ fun_l8_n525(x)
+ else
+ fun_l8_n73(x)
+ end
+end
+
+def fun_l7_n521(x)
+ if (x < 1)
+ fun_l8_n550(x)
+ else
+ fun_l8_n638(x)
+ end
+end
+
+def fun_l7_n522(x)
+ if (x < 1)
+ fun_l8_n36(x)
+ else
+ fun_l8_n511(x)
+ end
+end
+
+def fun_l7_n523(x)
+ if (x < 1)
+ fun_l8_n346(x)
+ else
+ fun_l8_n257(x)
+ end
+end
+
+def fun_l7_n524(x)
+ if (x < 1)
+ fun_l8_n973(x)
+ else
+ fun_l8_n704(x)
+ end
+end
+
+def fun_l7_n525(x)
+ if (x < 1)
+ fun_l8_n21(x)
+ else
+ fun_l8_n354(x)
+ end
+end
+
+def fun_l7_n526(x)
+ if (x < 1)
+ fun_l8_n394(x)
+ else
+ fun_l8_n461(x)
+ end
+end
+
+def fun_l7_n527(x)
+ if (x < 1)
+ fun_l8_n444(x)
+ else
+ fun_l8_n333(x)
+ end
+end
+
+def fun_l7_n528(x)
+ if (x < 1)
+ fun_l8_n743(x)
+ else
+ fun_l8_n579(x)
+ end
+end
+
+def fun_l7_n529(x)
+ if (x < 1)
+ fun_l8_n135(x)
+ else
+ fun_l8_n69(x)
+ end
+end
+
+def fun_l7_n530(x)
+ if (x < 1)
+ fun_l8_n66(x)
+ else
+ fun_l8_n6(x)
+ end
+end
+
+def fun_l7_n531(x)
+ if (x < 1)
+ fun_l8_n84(x)
+ else
+ fun_l8_n392(x)
+ end
+end
+
+def fun_l7_n532(x)
+ if (x < 1)
+ fun_l8_n178(x)
+ else
+ fun_l8_n227(x)
+ end
+end
+
+def fun_l7_n533(x)
+ if (x < 1)
+ fun_l8_n695(x)
+ else
+ fun_l8_n696(x)
+ end
+end
+
+def fun_l7_n534(x)
+ if (x < 1)
+ fun_l8_n266(x)
+ else
+ fun_l8_n8(x)
+ end
+end
+
+def fun_l7_n535(x)
+ if (x < 1)
+ fun_l8_n806(x)
+ else
+ fun_l8_n878(x)
+ end
+end
+
+def fun_l7_n536(x)
+ if (x < 1)
+ fun_l8_n775(x)
+ else
+ fun_l8_n778(x)
+ end
+end
+
+def fun_l7_n537(x)
+ if (x < 1)
+ fun_l8_n133(x)
+ else
+ fun_l8_n552(x)
+ end
+end
+
+def fun_l7_n538(x)
+ if (x < 1)
+ fun_l8_n71(x)
+ else
+ fun_l8_n786(x)
+ end
+end
+
+def fun_l7_n539(x)
+ if (x < 1)
+ fun_l8_n679(x)
+ else
+ fun_l8_n407(x)
+ end
+end
+
+def fun_l7_n540(x)
+ if (x < 1)
+ fun_l8_n532(x)
+ else
+ fun_l8_n75(x)
+ end
+end
+
+def fun_l7_n541(x)
+ if (x < 1)
+ fun_l8_n367(x)
+ else
+ fun_l8_n505(x)
+ end
+end
+
+def fun_l7_n542(x)
+ if (x < 1)
+ fun_l8_n74(x)
+ else
+ fun_l8_n374(x)
+ end
+end
+
+def fun_l7_n543(x)
+ if (x < 1)
+ fun_l8_n207(x)
+ else
+ fun_l8_n874(x)
+ end
+end
+
+def fun_l7_n544(x)
+ if (x < 1)
+ fun_l8_n774(x)
+ else
+ fun_l8_n750(x)
+ end
+end
+
+def fun_l7_n545(x)
+ if (x < 1)
+ fun_l8_n503(x)
+ else
+ fun_l8_n933(x)
+ end
+end
+
+def fun_l7_n546(x)
+ if (x < 1)
+ fun_l8_n125(x)
+ else
+ fun_l8_n570(x)
+ end
+end
+
+def fun_l7_n547(x)
+ if (x < 1)
+ fun_l8_n743(x)
+ else
+ fun_l8_n506(x)
+ end
+end
+
+def fun_l7_n548(x)
+ if (x < 1)
+ fun_l8_n297(x)
+ else
+ fun_l8_n70(x)
+ end
+end
+
+def fun_l7_n549(x)
+ if (x < 1)
+ fun_l8_n692(x)
+ else
+ fun_l8_n652(x)
+ end
+end
+
+def fun_l7_n550(x)
+ if (x < 1)
+ fun_l8_n446(x)
+ else
+ fun_l8_n432(x)
+ end
+end
+
+def fun_l7_n551(x)
+ if (x < 1)
+ fun_l8_n947(x)
+ else
+ fun_l8_n429(x)
+ end
+end
+
+def fun_l7_n552(x)
+ if (x < 1)
+ fun_l8_n417(x)
+ else
+ fun_l8_n136(x)
+ end
+end
+
+def fun_l7_n553(x)
+ if (x < 1)
+ fun_l8_n236(x)
+ else
+ fun_l8_n291(x)
+ end
+end
+
+def fun_l7_n554(x)
+ if (x < 1)
+ fun_l8_n60(x)
+ else
+ fun_l8_n328(x)
+ end
+end
+
+def fun_l7_n555(x)
+ if (x < 1)
+ fun_l8_n97(x)
+ else
+ fun_l8_n461(x)
+ end
+end
+
+def fun_l7_n556(x)
+ if (x < 1)
+ fun_l8_n158(x)
+ else
+ fun_l8_n603(x)
+ end
+end
+
+def fun_l7_n557(x)
+ if (x < 1)
+ fun_l8_n328(x)
+ else
+ fun_l8_n725(x)
+ end
+end
+
+def fun_l7_n558(x)
+ if (x < 1)
+ fun_l8_n25(x)
+ else
+ fun_l8_n933(x)
+ end
+end
+
+def fun_l7_n559(x)
+ if (x < 1)
+ fun_l8_n352(x)
+ else
+ fun_l8_n552(x)
+ end
+end
+
+def fun_l7_n560(x)
+ if (x < 1)
+ fun_l8_n427(x)
+ else
+ fun_l8_n91(x)
+ end
+end
+
+def fun_l7_n561(x)
+ if (x < 1)
+ fun_l8_n293(x)
+ else
+ fun_l8_n749(x)
+ end
+end
+
+def fun_l7_n562(x)
+ if (x < 1)
+ fun_l8_n672(x)
+ else
+ fun_l8_n905(x)
+ end
+end
+
+def fun_l7_n563(x)
+ if (x < 1)
+ fun_l8_n201(x)
+ else
+ fun_l8_n668(x)
+ end
+end
+
+def fun_l7_n564(x)
+ if (x < 1)
+ fun_l8_n109(x)
+ else
+ fun_l8_n401(x)
+ end
+end
+
+def fun_l7_n565(x)
+ if (x < 1)
+ fun_l8_n678(x)
+ else
+ fun_l8_n890(x)
+ end
+end
+
+def fun_l7_n566(x)
+ if (x < 1)
+ fun_l8_n876(x)
+ else
+ fun_l8_n129(x)
+ end
+end
+
+def fun_l7_n567(x)
+ if (x < 1)
+ fun_l8_n908(x)
+ else
+ fun_l8_n979(x)
+ end
+end
+
+def fun_l7_n568(x)
+ if (x < 1)
+ fun_l8_n899(x)
+ else
+ fun_l8_n792(x)
+ end
+end
+
+def fun_l7_n569(x)
+ if (x < 1)
+ fun_l8_n742(x)
+ else
+ fun_l8_n441(x)
+ end
+end
+
+def fun_l7_n570(x)
+ if (x < 1)
+ fun_l8_n338(x)
+ else
+ fun_l8_n877(x)
+ end
+end
+
+def fun_l7_n571(x)
+ if (x < 1)
+ fun_l8_n684(x)
+ else
+ fun_l8_n167(x)
+ end
+end
+
+def fun_l7_n572(x)
+ if (x < 1)
+ fun_l8_n366(x)
+ else
+ fun_l8_n239(x)
+ end
+end
+
+def fun_l7_n573(x)
+ if (x < 1)
+ fun_l8_n925(x)
+ else
+ fun_l8_n648(x)
+ end
+end
+
+def fun_l7_n574(x)
+ if (x < 1)
+ fun_l8_n825(x)
+ else
+ fun_l8_n811(x)
+ end
+end
+
+def fun_l7_n575(x)
+ if (x < 1)
+ fun_l8_n348(x)
+ else
+ fun_l8_n994(x)
+ end
+end
+
+def fun_l7_n576(x)
+ if (x < 1)
+ fun_l8_n721(x)
+ else
+ fun_l8_n584(x)
+ end
+end
+
+def fun_l7_n577(x)
+ if (x < 1)
+ fun_l8_n827(x)
+ else
+ fun_l8_n968(x)
+ end
+end
+
+def fun_l7_n578(x)
+ if (x < 1)
+ fun_l8_n649(x)
+ else
+ fun_l8_n684(x)
+ end
+end
+
+def fun_l7_n579(x)
+ if (x < 1)
+ fun_l8_n43(x)
+ else
+ fun_l8_n183(x)
+ end
+end
+
+def fun_l7_n580(x)
+ if (x < 1)
+ fun_l8_n516(x)
+ else
+ fun_l8_n893(x)
+ end
+end
+
+def fun_l7_n581(x)
+ if (x < 1)
+ fun_l8_n334(x)
+ else
+ fun_l8_n677(x)
+ end
+end
+
+def fun_l7_n582(x)
+ if (x < 1)
+ fun_l8_n731(x)
+ else
+ fun_l8_n922(x)
+ end
+end
+
+def fun_l7_n583(x)
+ if (x < 1)
+ fun_l8_n653(x)
+ else
+ fun_l8_n403(x)
+ end
+end
+
+def fun_l7_n584(x)
+ if (x < 1)
+ fun_l8_n534(x)
+ else
+ fun_l8_n155(x)
+ end
+end
+
+def fun_l7_n585(x)
+ if (x < 1)
+ fun_l8_n1(x)
+ else
+ fun_l8_n903(x)
+ end
+end
+
+def fun_l7_n586(x)
+ if (x < 1)
+ fun_l8_n956(x)
+ else
+ fun_l8_n182(x)
+ end
+end
+
+def fun_l7_n587(x)
+ if (x < 1)
+ fun_l8_n590(x)
+ else
+ fun_l8_n707(x)
+ end
+end
+
+def fun_l7_n588(x)
+ if (x < 1)
+ fun_l8_n74(x)
+ else
+ fun_l8_n612(x)
+ end
+end
+
+def fun_l7_n589(x)
+ if (x < 1)
+ fun_l8_n17(x)
+ else
+ fun_l8_n193(x)
+ end
+end
+
+def fun_l7_n590(x)
+ if (x < 1)
+ fun_l8_n650(x)
+ else
+ fun_l8_n863(x)
+ end
+end
+
+def fun_l7_n591(x)
+ if (x < 1)
+ fun_l8_n974(x)
+ else
+ fun_l8_n932(x)
+ end
+end
+
+def fun_l7_n592(x)
+ if (x < 1)
+ fun_l8_n17(x)
+ else
+ fun_l8_n537(x)
+ end
+end
+
+def fun_l7_n593(x)
+ if (x < 1)
+ fun_l8_n118(x)
+ else
+ fun_l8_n588(x)
+ end
+end
+
+def fun_l7_n594(x)
+ if (x < 1)
+ fun_l8_n241(x)
+ else
+ fun_l8_n929(x)
+ end
+end
+
+def fun_l7_n595(x)
+ if (x < 1)
+ fun_l8_n667(x)
+ else
+ fun_l8_n251(x)
+ end
+end
+
+def fun_l7_n596(x)
+ if (x < 1)
+ fun_l8_n473(x)
+ else
+ fun_l8_n189(x)
+ end
+end
+
+def fun_l7_n597(x)
+ if (x < 1)
+ fun_l8_n687(x)
+ else
+ fun_l8_n666(x)
+ end
+end
+
+def fun_l7_n598(x)
+ if (x < 1)
+ fun_l8_n700(x)
+ else
+ fun_l8_n294(x)
+ end
+end
+
+def fun_l7_n599(x)
+ if (x < 1)
+ fun_l8_n144(x)
+ else
+ fun_l8_n656(x)
+ end
+end
+
+def fun_l7_n600(x)
+ if (x < 1)
+ fun_l8_n375(x)
+ else
+ fun_l8_n571(x)
+ end
+end
+
+def fun_l7_n601(x)
+ if (x < 1)
+ fun_l8_n506(x)
+ else
+ fun_l8_n212(x)
+ end
+end
+
+def fun_l7_n602(x)
+ if (x < 1)
+ fun_l8_n770(x)
+ else
+ fun_l8_n491(x)
+ end
+end
+
+def fun_l7_n603(x)
+ if (x < 1)
+ fun_l8_n325(x)
+ else
+ fun_l8_n660(x)
+ end
+end
+
+def fun_l7_n604(x)
+ if (x < 1)
+ fun_l8_n255(x)
+ else
+ fun_l8_n842(x)
+ end
+end
+
+def fun_l7_n605(x)
+ if (x < 1)
+ fun_l8_n149(x)
+ else
+ fun_l8_n648(x)
+ end
+end
+
+def fun_l7_n606(x)
+ if (x < 1)
+ fun_l8_n845(x)
+ else
+ fun_l8_n248(x)
+ end
+end
+
+def fun_l7_n607(x)
+ if (x < 1)
+ fun_l8_n484(x)
+ else
+ fun_l8_n333(x)
+ end
+end
+
+def fun_l7_n608(x)
+ if (x < 1)
+ fun_l8_n287(x)
+ else
+ fun_l8_n341(x)
+ end
+end
+
+def fun_l7_n609(x)
+ if (x < 1)
+ fun_l8_n873(x)
+ else
+ fun_l8_n113(x)
+ end
+end
+
+def fun_l7_n610(x)
+ if (x < 1)
+ fun_l8_n45(x)
+ else
+ fun_l8_n994(x)
+ end
+end
+
+def fun_l7_n611(x)
+ if (x < 1)
+ fun_l8_n427(x)
+ else
+ fun_l8_n359(x)
+ end
+end
+
+def fun_l7_n612(x)
+ if (x < 1)
+ fun_l8_n433(x)
+ else
+ fun_l8_n189(x)
+ end
+end
+
+def fun_l7_n613(x)
+ if (x < 1)
+ fun_l8_n25(x)
+ else
+ fun_l8_n564(x)
+ end
+end
+
+def fun_l7_n614(x)
+ if (x < 1)
+ fun_l8_n789(x)
+ else
+ fun_l8_n441(x)
+ end
+end
+
+def fun_l7_n615(x)
+ if (x < 1)
+ fun_l8_n353(x)
+ else
+ fun_l8_n217(x)
+ end
+end
+
+def fun_l7_n616(x)
+ if (x < 1)
+ fun_l8_n334(x)
+ else
+ fun_l8_n559(x)
+ end
+end
+
+def fun_l7_n617(x)
+ if (x < 1)
+ fun_l8_n709(x)
+ else
+ fun_l8_n764(x)
+ end
+end
+
+def fun_l7_n618(x)
+ if (x < 1)
+ fun_l8_n710(x)
+ else
+ fun_l8_n307(x)
+ end
+end
+
+def fun_l7_n619(x)
+ if (x < 1)
+ fun_l8_n246(x)
+ else
+ fun_l8_n88(x)
+ end
+end
+
+def fun_l7_n620(x)
+ if (x < 1)
+ fun_l8_n259(x)
+ else
+ fun_l8_n813(x)
+ end
+end
+
+def fun_l7_n621(x)
+ if (x < 1)
+ fun_l8_n250(x)
+ else
+ fun_l8_n566(x)
+ end
+end
+
+def fun_l7_n622(x)
+ if (x < 1)
+ fun_l8_n223(x)
+ else
+ fun_l8_n627(x)
+ end
+end
+
+def fun_l7_n623(x)
+ if (x < 1)
+ fun_l8_n345(x)
+ else
+ fun_l8_n604(x)
+ end
+end
+
+def fun_l7_n624(x)
+ if (x < 1)
+ fun_l8_n405(x)
+ else
+ fun_l8_n850(x)
+ end
+end
+
+def fun_l7_n625(x)
+ if (x < 1)
+ fun_l8_n278(x)
+ else
+ fun_l8_n643(x)
+ end
+end
+
+def fun_l7_n626(x)
+ if (x < 1)
+ fun_l8_n359(x)
+ else
+ fun_l8_n167(x)
+ end
+end
+
+def fun_l7_n627(x)
+ if (x < 1)
+ fun_l8_n589(x)
+ else
+ fun_l8_n656(x)
+ end
+end
+
+def fun_l7_n628(x)
+ if (x < 1)
+ fun_l8_n612(x)
+ else
+ fun_l8_n227(x)
+ end
+end
+
+def fun_l7_n629(x)
+ if (x < 1)
+ fun_l8_n845(x)
+ else
+ fun_l8_n469(x)
+ end
+end
+
+def fun_l7_n630(x)
+ if (x < 1)
+ fun_l8_n833(x)
+ else
+ fun_l8_n92(x)
+ end
+end
+
+def fun_l7_n631(x)
+ if (x < 1)
+ fun_l8_n411(x)
+ else
+ fun_l8_n815(x)
+ end
+end
+
+def fun_l7_n632(x)
+ if (x < 1)
+ fun_l8_n844(x)
+ else
+ fun_l8_n349(x)
+ end
+end
+
+def fun_l7_n633(x)
+ if (x < 1)
+ fun_l8_n333(x)
+ else
+ fun_l8_n468(x)
+ end
+end
+
+def fun_l7_n634(x)
+ if (x < 1)
+ fun_l8_n12(x)
+ else
+ fun_l8_n727(x)
+ end
+end
+
+def fun_l7_n635(x)
+ if (x < 1)
+ fun_l8_n65(x)
+ else
+ fun_l8_n729(x)
+ end
+end
+
+def fun_l7_n636(x)
+ if (x < 1)
+ fun_l8_n54(x)
+ else
+ fun_l8_n524(x)
+ end
+end
+
+def fun_l7_n637(x)
+ if (x < 1)
+ fun_l8_n547(x)
+ else
+ fun_l8_n220(x)
+ end
+end
+
+def fun_l7_n638(x)
+ if (x < 1)
+ fun_l8_n679(x)
+ else
+ fun_l8_n693(x)
+ end
+end
+
+def fun_l7_n639(x)
+ if (x < 1)
+ fun_l8_n428(x)
+ else
+ fun_l8_n938(x)
+ end
+end
+
+def fun_l7_n640(x)
+ if (x < 1)
+ fun_l8_n779(x)
+ else
+ fun_l8_n323(x)
+ end
+end
+
+def fun_l7_n641(x)
+ if (x < 1)
+ fun_l8_n254(x)
+ else
+ fun_l8_n443(x)
+ end
+end
+
+def fun_l7_n642(x)
+ if (x < 1)
+ fun_l8_n623(x)
+ else
+ fun_l8_n361(x)
+ end
+end
+
+def fun_l7_n643(x)
+ if (x < 1)
+ fun_l8_n524(x)
+ else
+ fun_l8_n19(x)
+ end
+end
+
+def fun_l7_n644(x)
+ if (x < 1)
+ fun_l8_n77(x)
+ else
+ fun_l8_n696(x)
+ end
+end
+
+def fun_l7_n645(x)
+ if (x < 1)
+ fun_l8_n468(x)
+ else
+ fun_l8_n819(x)
+ end
+end
+
+def fun_l7_n646(x)
+ if (x < 1)
+ fun_l8_n319(x)
+ else
+ fun_l8_n921(x)
+ end
+end
+
+def fun_l7_n647(x)
+ if (x < 1)
+ fun_l8_n681(x)
+ else
+ fun_l8_n925(x)
+ end
+end
+
+def fun_l7_n648(x)
+ if (x < 1)
+ fun_l8_n146(x)
+ else
+ fun_l8_n451(x)
+ end
+end
+
+def fun_l7_n649(x)
+ if (x < 1)
+ fun_l8_n871(x)
+ else
+ fun_l8_n707(x)
+ end
+end
+
+def fun_l7_n650(x)
+ if (x < 1)
+ fun_l8_n782(x)
+ else
+ fun_l8_n556(x)
+ end
+end
+
+def fun_l7_n651(x)
+ if (x < 1)
+ fun_l8_n721(x)
+ else
+ fun_l8_n80(x)
+ end
+end
+
+def fun_l7_n652(x)
+ if (x < 1)
+ fun_l8_n110(x)
+ else
+ fun_l8_n529(x)
+ end
+end
+
+def fun_l7_n653(x)
+ if (x < 1)
+ fun_l8_n107(x)
+ else
+ fun_l8_n876(x)
+ end
+end
+
+def fun_l7_n654(x)
+ if (x < 1)
+ fun_l8_n902(x)
+ else
+ fun_l8_n45(x)
+ end
+end
+
+def fun_l7_n655(x)
+ if (x < 1)
+ fun_l8_n714(x)
+ else
+ fun_l8_n939(x)
+ end
+end
+
+def fun_l7_n656(x)
+ if (x < 1)
+ fun_l8_n761(x)
+ else
+ fun_l8_n940(x)
+ end
+end
+
+def fun_l7_n657(x)
+ if (x < 1)
+ fun_l8_n165(x)
+ else
+ fun_l8_n779(x)
+ end
+end
+
+def fun_l7_n658(x)
+ if (x < 1)
+ fun_l8_n848(x)
+ else
+ fun_l8_n307(x)
+ end
+end
+
+def fun_l7_n659(x)
+ if (x < 1)
+ fun_l8_n414(x)
+ else
+ fun_l8_n855(x)
+ end
+end
+
+def fun_l7_n660(x)
+ if (x < 1)
+ fun_l8_n963(x)
+ else
+ fun_l8_n887(x)
+ end
+end
+
+def fun_l7_n661(x)
+ if (x < 1)
+ fun_l8_n71(x)
+ else
+ fun_l8_n249(x)
+ end
+end
+
+def fun_l7_n662(x)
+ if (x < 1)
+ fun_l8_n426(x)
+ else
+ fun_l8_n977(x)
+ end
+end
+
+def fun_l7_n663(x)
+ if (x < 1)
+ fun_l8_n924(x)
+ else
+ fun_l8_n606(x)
+ end
+end
+
+def fun_l7_n664(x)
+ if (x < 1)
+ fun_l8_n88(x)
+ else
+ fun_l8_n718(x)
+ end
+end
+
+def fun_l7_n665(x)
+ if (x < 1)
+ fun_l8_n611(x)
+ else
+ fun_l8_n898(x)
+ end
+end
+
+def fun_l7_n666(x)
+ if (x < 1)
+ fun_l8_n656(x)
+ else
+ fun_l8_n116(x)
+ end
+end
+
+def fun_l7_n667(x)
+ if (x < 1)
+ fun_l8_n196(x)
+ else
+ fun_l8_n688(x)
+ end
+end
+
+def fun_l7_n668(x)
+ if (x < 1)
+ fun_l8_n873(x)
+ else
+ fun_l8_n561(x)
+ end
+end
+
+def fun_l7_n669(x)
+ if (x < 1)
+ fun_l8_n947(x)
+ else
+ fun_l8_n64(x)
+ end
+end
+
+def fun_l7_n670(x)
+ if (x < 1)
+ fun_l8_n309(x)
+ else
+ fun_l8_n708(x)
+ end
+end
+
+def fun_l7_n671(x)
+ if (x < 1)
+ fun_l8_n699(x)
+ else
+ fun_l8_n218(x)
+ end
+end
+
+def fun_l7_n672(x)
+ if (x < 1)
+ fun_l8_n930(x)
+ else
+ fun_l8_n387(x)
+ end
+end
+
+def fun_l7_n673(x)
+ if (x < 1)
+ fun_l8_n598(x)
+ else
+ fun_l8_n245(x)
+ end
+end
+
+def fun_l7_n674(x)
+ if (x < 1)
+ fun_l8_n411(x)
+ else
+ fun_l8_n236(x)
+ end
+end
+
+def fun_l7_n675(x)
+ if (x < 1)
+ fun_l8_n193(x)
+ else
+ fun_l8_n61(x)
+ end
+end
+
+def fun_l7_n676(x)
+ if (x < 1)
+ fun_l8_n2(x)
+ else
+ fun_l8_n253(x)
+ end
+end
+
+def fun_l7_n677(x)
+ if (x < 1)
+ fun_l8_n839(x)
+ else
+ fun_l8_n919(x)
+ end
+end
+
+def fun_l7_n678(x)
+ if (x < 1)
+ fun_l8_n643(x)
+ else
+ fun_l8_n245(x)
+ end
+end
+
+def fun_l7_n679(x)
+ if (x < 1)
+ fun_l8_n625(x)
+ else
+ fun_l8_n690(x)
+ end
+end
+
+def fun_l7_n680(x)
+ if (x < 1)
+ fun_l8_n899(x)
+ else
+ fun_l8_n307(x)
+ end
+end
+
+def fun_l7_n681(x)
+ if (x < 1)
+ fun_l8_n894(x)
+ else
+ fun_l8_n92(x)
+ end
+end
+
+def fun_l7_n682(x)
+ if (x < 1)
+ fun_l8_n139(x)
+ else
+ fun_l8_n252(x)
+ end
+end
+
+def fun_l7_n683(x)
+ if (x < 1)
+ fun_l8_n978(x)
+ else
+ fun_l8_n84(x)
+ end
+end
+
+def fun_l7_n684(x)
+ if (x < 1)
+ fun_l8_n426(x)
+ else
+ fun_l8_n329(x)
+ end
+end
+
+def fun_l7_n685(x)
+ if (x < 1)
+ fun_l8_n241(x)
+ else
+ fun_l8_n780(x)
+ end
+end
+
+def fun_l7_n686(x)
+ if (x < 1)
+ fun_l8_n793(x)
+ else
+ fun_l8_n534(x)
+ end
+end
+
+def fun_l7_n687(x)
+ if (x < 1)
+ fun_l8_n409(x)
+ else
+ fun_l8_n152(x)
+ end
+end
+
+def fun_l7_n688(x)
+ if (x < 1)
+ fun_l8_n838(x)
+ else
+ fun_l8_n555(x)
+ end
+end
+
+def fun_l7_n689(x)
+ if (x < 1)
+ fun_l8_n634(x)
+ else
+ fun_l8_n27(x)
+ end
+end
+
+def fun_l7_n690(x)
+ if (x < 1)
+ fun_l8_n629(x)
+ else
+ fun_l8_n448(x)
+ end
+end
+
+def fun_l7_n691(x)
+ if (x < 1)
+ fun_l8_n487(x)
+ else
+ fun_l8_n293(x)
+ end
+end
+
+def fun_l7_n692(x)
+ if (x < 1)
+ fun_l8_n739(x)
+ else
+ fun_l8_n472(x)
+ end
+end
+
+def fun_l7_n693(x)
+ if (x < 1)
+ fun_l8_n619(x)
+ else
+ fun_l8_n642(x)
+ end
+end
+
+def fun_l7_n694(x)
+ if (x < 1)
+ fun_l8_n123(x)
+ else
+ fun_l8_n880(x)
+ end
+end
+
+def fun_l7_n695(x)
+ if (x < 1)
+ fun_l8_n695(x)
+ else
+ fun_l8_n364(x)
+ end
+end
+
+def fun_l7_n696(x)
+ if (x < 1)
+ fun_l8_n610(x)
+ else
+ fun_l8_n798(x)
+ end
+end
+
+def fun_l7_n697(x)
+ if (x < 1)
+ fun_l8_n396(x)
+ else
+ fun_l8_n704(x)
+ end
+end
+
+def fun_l7_n698(x)
+ if (x < 1)
+ fun_l8_n759(x)
+ else
+ fun_l8_n880(x)
+ end
+end
+
+def fun_l7_n699(x)
+ if (x < 1)
+ fun_l8_n885(x)
+ else
+ fun_l8_n139(x)
+ end
+end
+
+def fun_l7_n700(x)
+ if (x < 1)
+ fun_l8_n244(x)
+ else
+ fun_l8_n307(x)
+ end
+end
+
+def fun_l7_n701(x)
+ if (x < 1)
+ fun_l8_n698(x)
+ else
+ fun_l8_n949(x)
+ end
+end
+
+def fun_l7_n702(x)
+ if (x < 1)
+ fun_l8_n585(x)
+ else
+ fun_l8_n211(x)
+ end
+end
+
+def fun_l7_n703(x)
+ if (x < 1)
+ fun_l8_n834(x)
+ else
+ fun_l8_n111(x)
+ end
+end
+
+def fun_l7_n704(x)
+ if (x < 1)
+ fun_l8_n690(x)
+ else
+ fun_l8_n981(x)
+ end
+end
+
+def fun_l7_n705(x)
+ if (x < 1)
+ fun_l8_n377(x)
+ else
+ fun_l8_n392(x)
+ end
+end
+
+def fun_l7_n706(x)
+ if (x < 1)
+ fun_l8_n988(x)
+ else
+ fun_l8_n759(x)
+ end
+end
+
+def fun_l7_n707(x)
+ if (x < 1)
+ fun_l8_n917(x)
+ else
+ fun_l8_n326(x)
+ end
+end
+
+def fun_l7_n708(x)
+ if (x < 1)
+ fun_l8_n662(x)
+ else
+ fun_l8_n488(x)
+ end
+end
+
+def fun_l7_n709(x)
+ if (x < 1)
+ fun_l8_n530(x)
+ else
+ fun_l8_n663(x)
+ end
+end
+
+def fun_l7_n710(x)
+ if (x < 1)
+ fun_l8_n344(x)
+ else
+ fun_l8_n282(x)
+ end
+end
+
+def fun_l7_n711(x)
+ if (x < 1)
+ fun_l8_n908(x)
+ else
+ fun_l8_n405(x)
+ end
+end
+
+def fun_l7_n712(x)
+ if (x < 1)
+ fun_l8_n332(x)
+ else
+ fun_l8_n660(x)
+ end
+end
+
+def fun_l7_n713(x)
+ if (x < 1)
+ fun_l8_n37(x)
+ else
+ fun_l8_n689(x)
+ end
+end
+
+def fun_l7_n714(x)
+ if (x < 1)
+ fun_l8_n642(x)
+ else
+ fun_l8_n996(x)
+ end
+end
+
+def fun_l7_n715(x)
+ if (x < 1)
+ fun_l8_n322(x)
+ else
+ fun_l8_n609(x)
+ end
+end
+
+def fun_l7_n716(x)
+ if (x < 1)
+ fun_l8_n567(x)
+ else
+ fun_l8_n492(x)
+ end
+end
+
+def fun_l7_n717(x)
+ if (x < 1)
+ fun_l8_n934(x)
+ else
+ fun_l8_n353(x)
+ end
+end
+
+def fun_l7_n718(x)
+ if (x < 1)
+ fun_l8_n572(x)
+ else
+ fun_l8_n859(x)
+ end
+end
+
+def fun_l7_n719(x)
+ if (x < 1)
+ fun_l8_n777(x)
+ else
+ fun_l8_n810(x)
+ end
+end
+
+def fun_l7_n720(x)
+ if (x < 1)
+ fun_l8_n121(x)
+ else
+ fun_l8_n847(x)
+ end
+end
+
+def fun_l7_n721(x)
+ if (x < 1)
+ fun_l8_n177(x)
+ else
+ fun_l8_n484(x)
+ end
+end
+
+def fun_l7_n722(x)
+ if (x < 1)
+ fun_l8_n73(x)
+ else
+ fun_l8_n795(x)
+ end
+end
+
+def fun_l7_n723(x)
+ if (x < 1)
+ fun_l8_n950(x)
+ else
+ fun_l8_n382(x)
+ end
+end
+
+def fun_l7_n724(x)
+ if (x < 1)
+ fun_l8_n349(x)
+ else
+ fun_l8_n644(x)
+ end
+end
+
+def fun_l7_n725(x)
+ if (x < 1)
+ fun_l8_n480(x)
+ else
+ fun_l8_n262(x)
+ end
+end
+
+def fun_l7_n726(x)
+ if (x < 1)
+ fun_l8_n39(x)
+ else
+ fun_l8_n543(x)
+ end
+end
+
+def fun_l7_n727(x)
+ if (x < 1)
+ fun_l8_n934(x)
+ else
+ fun_l8_n440(x)
+ end
+end
+
+def fun_l7_n728(x)
+ if (x < 1)
+ fun_l8_n312(x)
+ else
+ fun_l8_n341(x)
+ end
+end
+
+def fun_l7_n729(x)
+ if (x < 1)
+ fun_l8_n284(x)
+ else
+ fun_l8_n884(x)
+ end
+end
+
+def fun_l7_n730(x)
+ if (x < 1)
+ fun_l8_n841(x)
+ else
+ fun_l8_n221(x)
+ end
+end
+
+def fun_l7_n731(x)
+ if (x < 1)
+ fun_l8_n719(x)
+ else
+ fun_l8_n907(x)
+ end
+end
+
+def fun_l7_n732(x)
+ if (x < 1)
+ fun_l8_n422(x)
+ else
+ fun_l8_n65(x)
+ end
+end
+
+def fun_l7_n733(x)
+ if (x < 1)
+ fun_l8_n324(x)
+ else
+ fun_l8_n811(x)
+ end
+end
+
+def fun_l7_n734(x)
+ if (x < 1)
+ fun_l8_n643(x)
+ else
+ fun_l8_n622(x)
+ end
+end
+
+def fun_l7_n735(x)
+ if (x < 1)
+ fun_l8_n20(x)
+ else
+ fun_l8_n205(x)
+ end
+end
+
+def fun_l7_n736(x)
+ if (x < 1)
+ fun_l8_n487(x)
+ else
+ fun_l8_n908(x)
+ end
+end
+
+def fun_l7_n737(x)
+ if (x < 1)
+ fun_l8_n576(x)
+ else
+ fun_l8_n789(x)
+ end
+end
+
+def fun_l7_n738(x)
+ if (x < 1)
+ fun_l8_n353(x)
+ else
+ fun_l8_n286(x)
+ end
+end
+
+def fun_l7_n739(x)
+ if (x < 1)
+ fun_l8_n614(x)
+ else
+ fun_l8_n121(x)
+ end
+end
+
+def fun_l7_n740(x)
+ if (x < 1)
+ fun_l8_n79(x)
+ else
+ fun_l8_n637(x)
+ end
+end
+
+def fun_l7_n741(x)
+ if (x < 1)
+ fun_l8_n808(x)
+ else
+ fun_l8_n461(x)
+ end
+end
+
+def fun_l7_n742(x)
+ if (x < 1)
+ fun_l8_n590(x)
+ else
+ fun_l8_n198(x)
+ end
+end
+
+def fun_l7_n743(x)
+ if (x < 1)
+ fun_l8_n498(x)
+ else
+ fun_l8_n379(x)
+ end
+end
+
+def fun_l7_n744(x)
+ if (x < 1)
+ fun_l8_n599(x)
+ else
+ fun_l8_n359(x)
+ end
+end
+
+def fun_l7_n745(x)
+ if (x < 1)
+ fun_l8_n898(x)
+ else
+ fun_l8_n520(x)
+ end
+end
+
+def fun_l7_n746(x)
+ if (x < 1)
+ fun_l8_n835(x)
+ else
+ fun_l8_n131(x)
+ end
+end
+
+def fun_l7_n747(x)
+ if (x < 1)
+ fun_l8_n648(x)
+ else
+ fun_l8_n248(x)
+ end
+end
+
+def fun_l7_n748(x)
+ if (x < 1)
+ fun_l8_n451(x)
+ else
+ fun_l8_n352(x)
+ end
+end
+
+def fun_l7_n749(x)
+ if (x < 1)
+ fun_l8_n69(x)
+ else
+ fun_l8_n974(x)
+ end
+end
+
+def fun_l7_n750(x)
+ if (x < 1)
+ fun_l8_n108(x)
+ else
+ fun_l8_n744(x)
+ end
+end
+
+def fun_l7_n751(x)
+ if (x < 1)
+ fun_l8_n171(x)
+ else
+ fun_l8_n305(x)
+ end
+end
+
+def fun_l7_n752(x)
+ if (x < 1)
+ fun_l8_n180(x)
+ else
+ fun_l8_n293(x)
+ end
+end
+
+def fun_l7_n753(x)
+ if (x < 1)
+ fun_l8_n555(x)
+ else
+ fun_l8_n882(x)
+ end
+end
+
+def fun_l7_n754(x)
+ if (x < 1)
+ fun_l8_n756(x)
+ else
+ fun_l8_n604(x)
+ end
+end
+
+def fun_l7_n755(x)
+ if (x < 1)
+ fun_l8_n782(x)
+ else
+ fun_l8_n708(x)
+ end
+end
+
+def fun_l7_n756(x)
+ if (x < 1)
+ fun_l8_n65(x)
+ else
+ fun_l8_n474(x)
+ end
+end
+
+def fun_l7_n757(x)
+ if (x < 1)
+ fun_l8_n43(x)
+ else
+ fun_l8_n892(x)
+ end
+end
+
+def fun_l7_n758(x)
+ if (x < 1)
+ fun_l8_n90(x)
+ else
+ fun_l8_n968(x)
+ end
+end
+
+def fun_l7_n759(x)
+ if (x < 1)
+ fun_l8_n599(x)
+ else
+ fun_l8_n505(x)
+ end
+end
+
+def fun_l7_n760(x)
+ if (x < 1)
+ fun_l8_n344(x)
+ else
+ fun_l8_n122(x)
+ end
+end
+
+def fun_l7_n761(x)
+ if (x < 1)
+ fun_l8_n289(x)
+ else
+ fun_l8_n867(x)
+ end
+end
+
+def fun_l7_n762(x)
+ if (x < 1)
+ fun_l8_n107(x)
+ else
+ fun_l8_n950(x)
+ end
+end
+
+def fun_l7_n763(x)
+ if (x < 1)
+ fun_l8_n405(x)
+ else
+ fun_l8_n178(x)
+ end
+end
+
+def fun_l7_n764(x)
+ if (x < 1)
+ fun_l8_n91(x)
+ else
+ fun_l8_n760(x)
+ end
+end
+
+def fun_l7_n765(x)
+ if (x < 1)
+ fun_l8_n268(x)
+ else
+ fun_l8_n451(x)
+ end
+end
+
+def fun_l7_n766(x)
+ if (x < 1)
+ fun_l8_n693(x)
+ else
+ fun_l8_n150(x)
+ end
+end
+
+def fun_l7_n767(x)
+ if (x < 1)
+ fun_l8_n622(x)
+ else
+ fun_l8_n114(x)
+ end
+end
+
+def fun_l7_n768(x)
+ if (x < 1)
+ fun_l8_n662(x)
+ else
+ fun_l8_n514(x)
+ end
+end
+
+def fun_l7_n769(x)
+ if (x < 1)
+ fun_l8_n440(x)
+ else
+ fun_l8_n537(x)
+ end
+end
+
+def fun_l7_n770(x)
+ if (x < 1)
+ fun_l8_n207(x)
+ else
+ fun_l8_n513(x)
+ end
+end
+
+def fun_l7_n771(x)
+ if (x < 1)
+ fun_l8_n394(x)
+ else
+ fun_l8_n857(x)
+ end
+end
+
+def fun_l7_n772(x)
+ if (x < 1)
+ fun_l8_n635(x)
+ else
+ fun_l8_n696(x)
+ end
+end
+
+def fun_l7_n773(x)
+ if (x < 1)
+ fun_l8_n687(x)
+ else
+ fun_l8_n926(x)
+ end
+end
+
+def fun_l7_n774(x)
+ if (x < 1)
+ fun_l8_n54(x)
+ else
+ fun_l8_n410(x)
+ end
+end
+
+def fun_l7_n775(x)
+ if (x < 1)
+ fun_l8_n825(x)
+ else
+ fun_l8_n339(x)
+ end
+end
+
+def fun_l7_n776(x)
+ if (x < 1)
+ fun_l8_n130(x)
+ else
+ fun_l8_n48(x)
+ end
+end
+
+def fun_l7_n777(x)
+ if (x < 1)
+ fun_l8_n627(x)
+ else
+ fun_l8_n191(x)
+ end
+end
+
+def fun_l7_n778(x)
+ if (x < 1)
+ fun_l8_n843(x)
+ else
+ fun_l8_n627(x)
+ end
+end
+
+def fun_l7_n779(x)
+ if (x < 1)
+ fun_l8_n950(x)
+ else
+ fun_l8_n247(x)
+ end
+end
+
+def fun_l7_n780(x)
+ if (x < 1)
+ fun_l8_n865(x)
+ else
+ fun_l8_n540(x)
+ end
+end
+
+def fun_l7_n781(x)
+ if (x < 1)
+ fun_l8_n440(x)
+ else
+ fun_l8_n326(x)
+ end
+end
+
+def fun_l7_n782(x)
+ if (x < 1)
+ fun_l8_n463(x)
+ else
+ fun_l8_n808(x)
+ end
+end
+
+def fun_l7_n783(x)
+ if (x < 1)
+ fun_l8_n44(x)
+ else
+ fun_l8_n888(x)
+ end
+end
+
+def fun_l7_n784(x)
+ if (x < 1)
+ fun_l8_n690(x)
+ else
+ fun_l8_n673(x)
+ end
+end
+
+def fun_l7_n785(x)
+ if (x < 1)
+ fun_l8_n641(x)
+ else
+ fun_l8_n367(x)
+ end
+end
+
+def fun_l7_n786(x)
+ if (x < 1)
+ fun_l8_n193(x)
+ else
+ fun_l8_n764(x)
+ end
+end
+
+def fun_l7_n787(x)
+ if (x < 1)
+ fun_l8_n604(x)
+ else
+ fun_l8_n527(x)
+ end
+end
+
+def fun_l7_n788(x)
+ if (x < 1)
+ fun_l8_n626(x)
+ else
+ fun_l8_n101(x)
+ end
+end
+
+def fun_l7_n789(x)
+ if (x < 1)
+ fun_l8_n152(x)
+ else
+ fun_l8_n9(x)
+ end
+end
+
+def fun_l7_n790(x)
+ if (x < 1)
+ fun_l8_n541(x)
+ else
+ fun_l8_n789(x)
+ end
+end
+
+def fun_l7_n791(x)
+ if (x < 1)
+ fun_l8_n706(x)
+ else
+ fun_l8_n577(x)
+ end
+end
+
+def fun_l7_n792(x)
+ if (x < 1)
+ fun_l8_n480(x)
+ else
+ fun_l8_n284(x)
+ end
+end
+
+def fun_l7_n793(x)
+ if (x < 1)
+ fun_l8_n157(x)
+ else
+ fun_l8_n620(x)
+ end
+end
+
+def fun_l7_n794(x)
+ if (x < 1)
+ fun_l8_n666(x)
+ else
+ fun_l8_n755(x)
+ end
+end
+
+def fun_l7_n795(x)
+ if (x < 1)
+ fun_l8_n487(x)
+ else
+ fun_l8_n20(x)
+ end
+end
+
+def fun_l7_n796(x)
+ if (x < 1)
+ fun_l8_n750(x)
+ else
+ fun_l8_n974(x)
+ end
+end
+
+def fun_l7_n797(x)
+ if (x < 1)
+ fun_l8_n812(x)
+ else
+ fun_l8_n915(x)
+ end
+end
+
+def fun_l7_n798(x)
+ if (x < 1)
+ fun_l8_n297(x)
+ else
+ fun_l8_n8(x)
+ end
+end
+
+def fun_l7_n799(x)
+ if (x < 1)
+ fun_l8_n385(x)
+ else
+ fun_l8_n920(x)
+ end
+end
+
+def fun_l7_n800(x)
+ if (x < 1)
+ fun_l8_n322(x)
+ else
+ fun_l8_n603(x)
+ end
+end
+
+def fun_l7_n801(x)
+ if (x < 1)
+ fun_l8_n825(x)
+ else
+ fun_l8_n702(x)
+ end
+end
+
+def fun_l7_n802(x)
+ if (x < 1)
+ fun_l8_n902(x)
+ else
+ fun_l8_n978(x)
+ end
+end
+
+def fun_l7_n803(x)
+ if (x < 1)
+ fun_l8_n921(x)
+ else
+ fun_l8_n61(x)
+ end
+end
+
+def fun_l7_n804(x)
+ if (x < 1)
+ fun_l8_n171(x)
+ else
+ fun_l8_n630(x)
+ end
+end
+
+def fun_l7_n805(x)
+ if (x < 1)
+ fun_l8_n469(x)
+ else
+ fun_l8_n265(x)
+ end
+end
+
+def fun_l7_n806(x)
+ if (x < 1)
+ fun_l8_n367(x)
+ else
+ fun_l8_n820(x)
+ end
+end
+
+def fun_l7_n807(x)
+ if (x < 1)
+ fun_l8_n242(x)
+ else
+ fun_l8_n707(x)
+ end
+end
+
+def fun_l7_n808(x)
+ if (x < 1)
+ fun_l8_n512(x)
+ else
+ fun_l8_n139(x)
+ end
+end
+
+def fun_l7_n809(x)
+ if (x < 1)
+ fun_l8_n17(x)
+ else
+ fun_l8_n615(x)
+ end
+end
+
+def fun_l7_n810(x)
+ if (x < 1)
+ fun_l8_n600(x)
+ else
+ fun_l8_n6(x)
+ end
+end
+
+def fun_l7_n811(x)
+ if (x < 1)
+ fun_l8_n342(x)
+ else
+ fun_l8_n194(x)
+ end
+end
+
+def fun_l7_n812(x)
+ if (x < 1)
+ fun_l8_n191(x)
+ else
+ fun_l8_n864(x)
+ end
+end
+
+def fun_l7_n813(x)
+ if (x < 1)
+ fun_l8_n577(x)
+ else
+ fun_l8_n113(x)
+ end
+end
+
+def fun_l7_n814(x)
+ if (x < 1)
+ fun_l8_n729(x)
+ else
+ fun_l8_n989(x)
+ end
+end
+
+def fun_l7_n815(x)
+ if (x < 1)
+ fun_l8_n707(x)
+ else
+ fun_l8_n846(x)
+ end
+end
+
+def fun_l7_n816(x)
+ if (x < 1)
+ fun_l8_n874(x)
+ else
+ fun_l8_n790(x)
+ end
+end
+
+def fun_l7_n817(x)
+ if (x < 1)
+ fun_l8_n968(x)
+ else
+ fun_l8_n215(x)
+ end
+end
+
+def fun_l7_n818(x)
+ if (x < 1)
+ fun_l8_n444(x)
+ else
+ fun_l8_n182(x)
+ end
+end
+
+def fun_l7_n819(x)
+ if (x < 1)
+ fun_l8_n103(x)
+ else
+ fun_l8_n134(x)
+ end
+end
+
+def fun_l7_n820(x)
+ if (x < 1)
+ fun_l8_n718(x)
+ else
+ fun_l8_n950(x)
+ end
+end
+
+def fun_l7_n821(x)
+ if (x < 1)
+ fun_l8_n439(x)
+ else
+ fun_l8_n68(x)
+ end
+end
+
+def fun_l7_n822(x)
+ if (x < 1)
+ fun_l8_n961(x)
+ else
+ fun_l8_n593(x)
+ end
+end
+
+def fun_l7_n823(x)
+ if (x < 1)
+ fun_l8_n212(x)
+ else
+ fun_l8_n346(x)
+ end
+end
+
+def fun_l7_n824(x)
+ if (x < 1)
+ fun_l8_n926(x)
+ else
+ fun_l8_n225(x)
+ end
+end
+
+def fun_l7_n825(x)
+ if (x < 1)
+ fun_l8_n880(x)
+ else
+ fun_l8_n527(x)
+ end
+end
+
+def fun_l7_n826(x)
+ if (x < 1)
+ fun_l8_n13(x)
+ else
+ fun_l8_n436(x)
+ end
+end
+
+def fun_l7_n827(x)
+ if (x < 1)
+ fun_l8_n19(x)
+ else
+ fun_l8_n201(x)
+ end
+end
+
+def fun_l7_n828(x)
+ if (x < 1)
+ fun_l8_n568(x)
+ else
+ fun_l8_n450(x)
+ end
+end
+
+def fun_l7_n829(x)
+ if (x < 1)
+ fun_l8_n543(x)
+ else
+ fun_l8_n606(x)
+ end
+end
+
+def fun_l7_n830(x)
+ if (x < 1)
+ fun_l8_n503(x)
+ else
+ fun_l8_n104(x)
+ end
+end
+
+def fun_l7_n831(x)
+ if (x < 1)
+ fun_l8_n185(x)
+ else
+ fun_l8_n1(x)
+ end
+end
+
+def fun_l7_n832(x)
+ if (x < 1)
+ fun_l8_n598(x)
+ else
+ fun_l8_n637(x)
+ end
+end
+
+def fun_l7_n833(x)
+ if (x < 1)
+ fun_l8_n936(x)
+ else
+ fun_l8_n554(x)
+ end
+end
+
+def fun_l7_n834(x)
+ if (x < 1)
+ fun_l8_n864(x)
+ else
+ fun_l8_n766(x)
+ end
+end
+
+def fun_l7_n835(x)
+ if (x < 1)
+ fun_l8_n11(x)
+ else
+ fun_l8_n472(x)
+ end
+end
+
+def fun_l7_n836(x)
+ if (x < 1)
+ fun_l8_n596(x)
+ else
+ fun_l8_n429(x)
+ end
+end
+
+def fun_l7_n837(x)
+ if (x < 1)
+ fun_l8_n643(x)
+ else
+ fun_l8_n61(x)
+ end
+end
+
+def fun_l7_n838(x)
+ if (x < 1)
+ fun_l8_n905(x)
+ else
+ fun_l8_n605(x)
+ end
+end
+
+def fun_l7_n839(x)
+ if (x < 1)
+ fun_l8_n371(x)
+ else
+ fun_l8_n44(x)
+ end
+end
+
+def fun_l7_n840(x)
+ if (x < 1)
+ fun_l8_n195(x)
+ else
+ fun_l8_n368(x)
+ end
+end
+
+def fun_l7_n841(x)
+ if (x < 1)
+ fun_l8_n432(x)
+ else
+ fun_l8_n368(x)
+ end
+end
+
+def fun_l7_n842(x)
+ if (x < 1)
+ fun_l8_n145(x)
+ else
+ fun_l8_n180(x)
+ end
+end
+
+def fun_l7_n843(x)
+ if (x < 1)
+ fun_l8_n124(x)
+ else
+ fun_l8_n358(x)
+ end
+end
+
+def fun_l7_n844(x)
+ if (x < 1)
+ fun_l8_n87(x)
+ else
+ fun_l8_n364(x)
+ end
+end
+
+def fun_l7_n845(x)
+ if (x < 1)
+ fun_l8_n133(x)
+ else
+ fun_l8_n849(x)
+ end
+end
+
+def fun_l7_n846(x)
+ if (x < 1)
+ fun_l8_n686(x)
+ else
+ fun_l8_n556(x)
+ end
+end
+
+def fun_l7_n847(x)
+ if (x < 1)
+ fun_l8_n732(x)
+ else
+ fun_l8_n536(x)
+ end
+end
+
+def fun_l7_n848(x)
+ if (x < 1)
+ fun_l8_n950(x)
+ else
+ fun_l8_n173(x)
+ end
+end
+
+def fun_l7_n849(x)
+ if (x < 1)
+ fun_l8_n694(x)
+ else
+ fun_l8_n747(x)
+ end
+end
+
+def fun_l7_n850(x)
+ if (x < 1)
+ fun_l8_n421(x)
+ else
+ fun_l8_n940(x)
+ end
+end
+
+def fun_l7_n851(x)
+ if (x < 1)
+ fun_l8_n359(x)
+ else
+ fun_l8_n239(x)
+ end
+end
+
+def fun_l7_n852(x)
+ if (x < 1)
+ fun_l8_n731(x)
+ else
+ fun_l8_n530(x)
+ end
+end
+
+def fun_l7_n853(x)
+ if (x < 1)
+ fun_l8_n887(x)
+ else
+ fun_l8_n548(x)
+ end
+end
+
+def fun_l7_n854(x)
+ if (x < 1)
+ fun_l8_n47(x)
+ else
+ fun_l8_n675(x)
+ end
+end
+
+def fun_l7_n855(x)
+ if (x < 1)
+ fun_l8_n534(x)
+ else
+ fun_l8_n34(x)
+ end
+end
+
+def fun_l7_n856(x)
+ if (x < 1)
+ fun_l8_n935(x)
+ else
+ fun_l8_n402(x)
+ end
+end
+
+def fun_l7_n857(x)
+ if (x < 1)
+ fun_l8_n873(x)
+ else
+ fun_l8_n864(x)
+ end
+end
+
+def fun_l7_n858(x)
+ if (x < 1)
+ fun_l8_n325(x)
+ else
+ fun_l8_n495(x)
+ end
+end
+
+def fun_l7_n859(x)
+ if (x < 1)
+ fun_l8_n758(x)
+ else
+ fun_l8_n63(x)
+ end
+end
+
+def fun_l7_n860(x)
+ if (x < 1)
+ fun_l8_n811(x)
+ else
+ fun_l8_n150(x)
+ end
+end
+
+def fun_l7_n861(x)
+ if (x < 1)
+ fun_l8_n666(x)
+ else
+ fun_l8_n282(x)
+ end
+end
+
+def fun_l7_n862(x)
+ if (x < 1)
+ fun_l8_n123(x)
+ else
+ fun_l8_n893(x)
+ end
+end
+
+def fun_l7_n863(x)
+ if (x < 1)
+ fun_l8_n681(x)
+ else
+ fun_l8_n640(x)
+ end
+end
+
+def fun_l7_n864(x)
+ if (x < 1)
+ fun_l8_n861(x)
+ else
+ fun_l8_n922(x)
+ end
+end
+
+def fun_l7_n865(x)
+ if (x < 1)
+ fun_l8_n8(x)
+ else
+ fun_l8_n14(x)
+ end
+end
+
+def fun_l7_n866(x)
+ if (x < 1)
+ fun_l8_n713(x)
+ else
+ fun_l8_n802(x)
+ end
+end
+
+def fun_l7_n867(x)
+ if (x < 1)
+ fun_l8_n654(x)
+ else
+ fun_l8_n540(x)
+ end
+end
+
+def fun_l7_n868(x)
+ if (x < 1)
+ fun_l8_n308(x)
+ else
+ fun_l8_n504(x)
+ end
+end
+
+def fun_l7_n869(x)
+ if (x < 1)
+ fun_l8_n67(x)
+ else
+ fun_l8_n592(x)
+ end
+end
+
+def fun_l7_n870(x)
+ if (x < 1)
+ fun_l8_n295(x)
+ else
+ fun_l8_n585(x)
+ end
+end
+
+def fun_l7_n871(x)
+ if (x < 1)
+ fun_l8_n121(x)
+ else
+ fun_l8_n797(x)
+ end
+end
+
+def fun_l7_n872(x)
+ if (x < 1)
+ fun_l8_n234(x)
+ else
+ fun_l8_n834(x)
+ end
+end
+
+def fun_l7_n873(x)
+ if (x < 1)
+ fun_l8_n287(x)
+ else
+ fun_l8_n731(x)
+ end
+end
+
+def fun_l7_n874(x)
+ if (x < 1)
+ fun_l8_n460(x)
+ else
+ fun_l8_n261(x)
+ end
+end
+
+def fun_l7_n875(x)
+ if (x < 1)
+ fun_l8_n211(x)
+ else
+ fun_l8_n199(x)
+ end
+end
+
+def fun_l7_n876(x)
+ if (x < 1)
+ fun_l8_n256(x)
+ else
+ fun_l8_n547(x)
+ end
+end
+
+def fun_l7_n877(x)
+ if (x < 1)
+ fun_l8_n560(x)
+ else
+ fun_l8_n202(x)
+ end
+end
+
+def fun_l7_n878(x)
+ if (x < 1)
+ fun_l8_n5(x)
+ else
+ fun_l8_n955(x)
+ end
+end
+
+def fun_l7_n879(x)
+ if (x < 1)
+ fun_l8_n908(x)
+ else
+ fun_l8_n677(x)
+ end
+end
+
+def fun_l7_n880(x)
+ if (x < 1)
+ fun_l8_n366(x)
+ else
+ fun_l8_n226(x)
+ end
+end
+
+def fun_l7_n881(x)
+ if (x < 1)
+ fun_l8_n970(x)
+ else
+ fun_l8_n939(x)
+ end
+end
+
+def fun_l7_n882(x)
+ if (x < 1)
+ fun_l8_n562(x)
+ else
+ fun_l8_n420(x)
+ end
+end
+
+def fun_l7_n883(x)
+ if (x < 1)
+ fun_l8_n377(x)
+ else
+ fun_l8_n35(x)
+ end
+end
+
+def fun_l7_n884(x)
+ if (x < 1)
+ fun_l8_n459(x)
+ else
+ fun_l8_n155(x)
+ end
+end
+
+def fun_l7_n885(x)
+ if (x < 1)
+ fun_l8_n257(x)
+ else
+ fun_l8_n704(x)
+ end
+end
+
+def fun_l7_n886(x)
+ if (x < 1)
+ fun_l8_n393(x)
+ else
+ fun_l8_n741(x)
+ end
+end
+
+def fun_l7_n887(x)
+ if (x < 1)
+ fun_l8_n333(x)
+ else
+ fun_l8_n225(x)
+ end
+end
+
+def fun_l7_n888(x)
+ if (x < 1)
+ fun_l8_n614(x)
+ else
+ fun_l8_n106(x)
+ end
+end
+
+def fun_l7_n889(x)
+ if (x < 1)
+ fun_l8_n229(x)
+ else
+ fun_l8_n519(x)
+ end
+end
+
+def fun_l7_n890(x)
+ if (x < 1)
+ fun_l8_n651(x)
+ else
+ fun_l8_n68(x)
+ end
+end
+
+def fun_l7_n891(x)
+ if (x < 1)
+ fun_l8_n987(x)
+ else
+ fun_l8_n905(x)
+ end
+end
+
+def fun_l7_n892(x)
+ if (x < 1)
+ fun_l8_n698(x)
+ else
+ fun_l8_n942(x)
+ end
+end
+
+def fun_l7_n893(x)
+ if (x < 1)
+ fun_l8_n559(x)
+ else
+ fun_l8_n613(x)
+ end
+end
+
+def fun_l7_n894(x)
+ if (x < 1)
+ fun_l8_n402(x)
+ else
+ fun_l8_n966(x)
+ end
+end
+
+def fun_l7_n895(x)
+ if (x < 1)
+ fun_l8_n475(x)
+ else
+ fun_l8_n158(x)
+ end
+end
+
+def fun_l7_n896(x)
+ if (x < 1)
+ fun_l8_n420(x)
+ else
+ fun_l8_n113(x)
+ end
+end
+
+def fun_l7_n897(x)
+ if (x < 1)
+ fun_l8_n366(x)
+ else
+ fun_l8_n272(x)
+ end
+end
+
+def fun_l7_n898(x)
+ if (x < 1)
+ fun_l8_n252(x)
+ else
+ fun_l8_n821(x)
+ end
+end
+
+def fun_l7_n899(x)
+ if (x < 1)
+ fun_l8_n736(x)
+ else
+ fun_l8_n174(x)
+ end
+end
+
+def fun_l7_n900(x)
+ if (x < 1)
+ fun_l8_n151(x)
+ else
+ fun_l8_n611(x)
+ end
+end
+
+def fun_l7_n901(x)
+ if (x < 1)
+ fun_l8_n3(x)
+ else
+ fun_l8_n221(x)
+ end
+end
+
+def fun_l7_n902(x)
+ if (x < 1)
+ fun_l8_n319(x)
+ else
+ fun_l8_n930(x)
+ end
+end
+
+def fun_l7_n903(x)
+ if (x < 1)
+ fun_l8_n619(x)
+ else
+ fun_l8_n491(x)
+ end
+end
+
+def fun_l7_n904(x)
+ if (x < 1)
+ fun_l8_n144(x)
+ else
+ fun_l8_n304(x)
+ end
+end
+
+def fun_l7_n905(x)
+ if (x < 1)
+ fun_l8_n721(x)
+ else
+ fun_l8_n996(x)
+ end
+end
+
+def fun_l7_n906(x)
+ if (x < 1)
+ fun_l8_n700(x)
+ else
+ fun_l8_n688(x)
+ end
+end
+
+def fun_l7_n907(x)
+ if (x < 1)
+ fun_l8_n202(x)
+ else
+ fun_l8_n668(x)
+ end
+end
+
+def fun_l7_n908(x)
+ if (x < 1)
+ fun_l8_n514(x)
+ else
+ fun_l8_n306(x)
+ end
+end
+
+def fun_l7_n909(x)
+ if (x < 1)
+ fun_l8_n592(x)
+ else
+ fun_l8_n43(x)
+ end
+end
+
+def fun_l7_n910(x)
+ if (x < 1)
+ fun_l8_n743(x)
+ else
+ fun_l8_n406(x)
+ end
+end
+
+def fun_l7_n911(x)
+ if (x < 1)
+ fun_l8_n801(x)
+ else
+ fun_l8_n91(x)
+ end
+end
+
+def fun_l7_n912(x)
+ if (x < 1)
+ fun_l8_n392(x)
+ else
+ fun_l8_n461(x)
+ end
+end
+
+def fun_l7_n913(x)
+ if (x < 1)
+ fun_l8_n175(x)
+ else
+ fun_l8_n578(x)
+ end
+end
+
+def fun_l7_n914(x)
+ if (x < 1)
+ fun_l8_n155(x)
+ else
+ fun_l8_n795(x)
+ end
+end
+
+def fun_l7_n915(x)
+ if (x < 1)
+ fun_l8_n394(x)
+ else
+ fun_l8_n89(x)
+ end
+end
+
+def fun_l7_n916(x)
+ if (x < 1)
+ fun_l8_n59(x)
+ else
+ fun_l8_n345(x)
+ end
+end
+
+def fun_l7_n917(x)
+ if (x < 1)
+ fun_l8_n450(x)
+ else
+ fun_l8_n136(x)
+ end
+end
+
+def fun_l7_n918(x)
+ if (x < 1)
+ fun_l8_n530(x)
+ else
+ fun_l8_n233(x)
+ end
+end
+
+def fun_l7_n919(x)
+ if (x < 1)
+ fun_l8_n632(x)
+ else
+ fun_l8_n631(x)
+ end
+end
+
+def fun_l7_n920(x)
+ if (x < 1)
+ fun_l8_n252(x)
+ else
+ fun_l8_n95(x)
+ end
+end
+
+def fun_l7_n921(x)
+ if (x < 1)
+ fun_l8_n980(x)
+ else
+ fun_l8_n819(x)
+ end
+end
+
+def fun_l7_n922(x)
+ if (x < 1)
+ fun_l8_n866(x)
+ else
+ fun_l8_n652(x)
+ end
+end
+
+def fun_l7_n923(x)
+ if (x < 1)
+ fun_l8_n239(x)
+ else
+ fun_l8_n83(x)
+ end
+end
+
+def fun_l7_n924(x)
+ if (x < 1)
+ fun_l8_n162(x)
+ else
+ fun_l8_n193(x)
+ end
+end
+
+def fun_l7_n925(x)
+ if (x < 1)
+ fun_l8_n78(x)
+ else
+ fun_l8_n546(x)
+ end
+end
+
+def fun_l7_n926(x)
+ if (x < 1)
+ fun_l8_n102(x)
+ else
+ fun_l8_n847(x)
+ end
+end
+
+def fun_l7_n927(x)
+ if (x < 1)
+ fun_l8_n84(x)
+ else
+ fun_l8_n257(x)
+ end
+end
+
+def fun_l7_n928(x)
+ if (x < 1)
+ fun_l8_n195(x)
+ else
+ fun_l8_n200(x)
+ end
+end
+
+def fun_l7_n929(x)
+ if (x < 1)
+ fun_l8_n245(x)
+ else
+ fun_l8_n926(x)
+ end
+end
+
+def fun_l7_n930(x)
+ if (x < 1)
+ fun_l8_n651(x)
+ else
+ fun_l8_n308(x)
+ end
+end
+
+def fun_l7_n931(x)
+ if (x < 1)
+ fun_l8_n312(x)
+ else
+ fun_l8_n901(x)
+ end
+end
+
+def fun_l7_n932(x)
+ if (x < 1)
+ fun_l8_n221(x)
+ else
+ fun_l8_n775(x)
+ end
+end
+
+def fun_l7_n933(x)
+ if (x < 1)
+ fun_l8_n397(x)
+ else
+ fun_l8_n973(x)
+ end
+end
+
+def fun_l7_n934(x)
+ if (x < 1)
+ fun_l8_n788(x)
+ else
+ fun_l8_n952(x)
+ end
+end
+
+def fun_l7_n935(x)
+ if (x < 1)
+ fun_l8_n965(x)
+ else
+ fun_l8_n861(x)
+ end
+end
+
+def fun_l7_n936(x)
+ if (x < 1)
+ fun_l8_n969(x)
+ else
+ fun_l8_n773(x)
+ end
+end
+
+def fun_l7_n937(x)
+ if (x < 1)
+ fun_l8_n742(x)
+ else
+ fun_l8_n237(x)
+ end
+end
+
+def fun_l7_n938(x)
+ if (x < 1)
+ fun_l8_n369(x)
+ else
+ fun_l8_n444(x)
+ end
+end
+
+def fun_l7_n939(x)
+ if (x < 1)
+ fun_l8_n863(x)
+ else
+ fun_l8_n515(x)
+ end
+end
+
+def fun_l7_n940(x)
+ if (x < 1)
+ fun_l8_n573(x)
+ else
+ fun_l8_n356(x)
+ end
+end
+
+def fun_l7_n941(x)
+ if (x < 1)
+ fun_l8_n188(x)
+ else
+ fun_l8_n171(x)
+ end
+end
+
+def fun_l7_n942(x)
+ if (x < 1)
+ fun_l8_n483(x)
+ else
+ fun_l8_n556(x)
+ end
+end
+
+def fun_l7_n943(x)
+ if (x < 1)
+ fun_l8_n935(x)
+ else
+ fun_l8_n723(x)
+ end
+end
+
+def fun_l7_n944(x)
+ if (x < 1)
+ fun_l8_n451(x)
+ else
+ fun_l8_n227(x)
+ end
+end
+
+def fun_l7_n945(x)
+ if (x < 1)
+ fun_l8_n651(x)
+ else
+ fun_l8_n891(x)
+ end
+end
+
+def fun_l7_n946(x)
+ if (x < 1)
+ fun_l8_n225(x)
+ else
+ fun_l8_n178(x)
+ end
+end
+
+def fun_l7_n947(x)
+ if (x < 1)
+ fun_l8_n704(x)
+ else
+ fun_l8_n456(x)
+ end
+end
+
+def fun_l7_n948(x)
+ if (x < 1)
+ fun_l8_n995(x)
+ else
+ fun_l8_n816(x)
+ end
+end
+
+def fun_l7_n949(x)
+ if (x < 1)
+ fun_l8_n287(x)
+ else
+ fun_l8_n140(x)
+ end
+end
+
+def fun_l7_n950(x)
+ if (x < 1)
+ fun_l8_n302(x)
+ else
+ fun_l8_n582(x)
+ end
+end
+
+def fun_l7_n951(x)
+ if (x < 1)
+ fun_l8_n58(x)
+ else
+ fun_l8_n759(x)
+ end
+end
+
+def fun_l7_n952(x)
+ if (x < 1)
+ fun_l8_n54(x)
+ else
+ fun_l8_n812(x)
+ end
+end
+
+def fun_l7_n953(x)
+ if (x < 1)
+ fun_l8_n263(x)
+ else
+ fun_l8_n801(x)
+ end
+end
+
+def fun_l7_n954(x)
+ if (x < 1)
+ fun_l8_n507(x)
+ else
+ fun_l8_n781(x)
+ end
+end
+
+def fun_l7_n955(x)
+ if (x < 1)
+ fun_l8_n328(x)
+ else
+ fun_l8_n886(x)
+ end
+end
+
+def fun_l7_n956(x)
+ if (x < 1)
+ fun_l8_n653(x)
+ else
+ fun_l8_n847(x)
+ end
+end
+
+def fun_l7_n957(x)
+ if (x < 1)
+ fun_l8_n594(x)
+ else
+ fun_l8_n9(x)
+ end
+end
+
+def fun_l7_n958(x)
+ if (x < 1)
+ fun_l8_n818(x)
+ else
+ fun_l8_n912(x)
+ end
+end
+
+def fun_l7_n959(x)
+ if (x < 1)
+ fun_l8_n941(x)
+ else
+ fun_l8_n394(x)
+ end
+end
+
+def fun_l7_n960(x)
+ if (x < 1)
+ fun_l8_n151(x)
+ else
+ fun_l8_n426(x)
+ end
+end
+
+def fun_l7_n961(x)
+ if (x < 1)
+ fun_l8_n276(x)
+ else
+ fun_l8_n458(x)
+ end
+end
+
+def fun_l7_n962(x)
+ if (x < 1)
+ fun_l8_n310(x)
+ else
+ fun_l8_n472(x)
+ end
+end
+
+def fun_l7_n963(x)
+ if (x < 1)
+ fun_l8_n103(x)
+ else
+ fun_l8_n995(x)
+ end
+end
+
+def fun_l7_n964(x)
+ if (x < 1)
+ fun_l8_n808(x)
+ else
+ fun_l8_n41(x)
+ end
+end
+
+def fun_l7_n965(x)
+ if (x < 1)
+ fun_l8_n840(x)
+ else
+ fun_l8_n143(x)
+ end
+end
+
+def fun_l7_n966(x)
+ if (x < 1)
+ fun_l8_n855(x)
+ else
+ fun_l8_n38(x)
+ end
+end
+
+def fun_l7_n967(x)
+ if (x < 1)
+ fun_l8_n316(x)
+ else
+ fun_l8_n86(x)
+ end
+end
+
+def fun_l7_n968(x)
+ if (x < 1)
+ fun_l8_n856(x)
+ else
+ fun_l8_n182(x)
+ end
+end
+
+def fun_l7_n969(x)
+ if (x < 1)
+ fun_l8_n436(x)
+ else
+ fun_l8_n460(x)
+ end
+end
+
+def fun_l7_n970(x)
+ if (x < 1)
+ fun_l8_n187(x)
+ else
+ fun_l8_n90(x)
+ end
+end
+
+def fun_l7_n971(x)
+ if (x < 1)
+ fun_l8_n689(x)
+ else
+ fun_l8_n921(x)
+ end
+end
+
+def fun_l7_n972(x)
+ if (x < 1)
+ fun_l8_n207(x)
+ else
+ fun_l8_n79(x)
+ end
+end
+
+def fun_l7_n973(x)
+ if (x < 1)
+ fun_l8_n137(x)
+ else
+ fun_l8_n17(x)
+ end
+end
+
+def fun_l7_n974(x)
+ if (x < 1)
+ fun_l8_n813(x)
+ else
+ fun_l8_n944(x)
+ end
+end
+
+def fun_l7_n975(x)
+ if (x < 1)
+ fun_l8_n589(x)
+ else
+ fun_l8_n416(x)
+ end
+end
+
+def fun_l7_n976(x)
+ if (x < 1)
+ fun_l8_n763(x)
+ else
+ fun_l8_n289(x)
+ end
+end
+
+def fun_l7_n977(x)
+ if (x < 1)
+ fun_l8_n118(x)
+ else
+ fun_l8_n998(x)
+ end
+end
+
+def fun_l7_n978(x)
+ if (x < 1)
+ fun_l8_n382(x)
+ else
+ fun_l8_n216(x)
+ end
+end
+
+def fun_l7_n979(x)
+ if (x < 1)
+ fun_l8_n304(x)
+ else
+ fun_l8_n586(x)
+ end
+end
+
+def fun_l7_n980(x)
+ if (x < 1)
+ fun_l8_n693(x)
+ else
+ fun_l8_n118(x)
+ end
+end
+
+def fun_l7_n981(x)
+ if (x < 1)
+ fun_l8_n669(x)
+ else
+ fun_l8_n796(x)
+ end
+end
+
+def fun_l7_n982(x)
+ if (x < 1)
+ fun_l8_n187(x)
+ else
+ fun_l8_n143(x)
+ end
+end
+
+def fun_l7_n983(x)
+ if (x < 1)
+ fun_l8_n848(x)
+ else
+ fun_l8_n172(x)
+ end
+end
+
+def fun_l7_n984(x)
+ if (x < 1)
+ fun_l8_n782(x)
+ else
+ fun_l8_n670(x)
+ end
+end
+
+def fun_l7_n985(x)
+ if (x < 1)
+ fun_l8_n275(x)
+ else
+ fun_l8_n520(x)
+ end
+end
+
+def fun_l7_n986(x)
+ if (x < 1)
+ fun_l8_n841(x)
+ else
+ fun_l8_n446(x)
+ end
+end
+
+def fun_l7_n987(x)
+ if (x < 1)
+ fun_l8_n712(x)
+ else
+ fun_l8_n976(x)
+ end
+end
+
+def fun_l7_n988(x)
+ if (x < 1)
+ fun_l8_n115(x)
+ else
+ fun_l8_n222(x)
+ end
+end
+
+def fun_l7_n989(x)
+ if (x < 1)
+ fun_l8_n23(x)
+ else
+ fun_l8_n665(x)
+ end
+end
+
+def fun_l7_n990(x)
+ if (x < 1)
+ fun_l8_n416(x)
+ else
+ fun_l8_n455(x)
+ end
+end
+
+def fun_l7_n991(x)
+ if (x < 1)
+ fun_l8_n556(x)
+ else
+ fun_l8_n971(x)
+ end
+end
+
+def fun_l7_n992(x)
+ if (x < 1)
+ fun_l8_n726(x)
+ else
+ fun_l8_n312(x)
+ end
+end
+
+def fun_l7_n993(x)
+ if (x < 1)
+ fun_l8_n354(x)
+ else
+ fun_l8_n860(x)
+ end
+end
+
+def fun_l7_n994(x)
+ if (x < 1)
+ fun_l8_n62(x)
+ else
+ fun_l8_n290(x)
+ end
+end
+
+def fun_l7_n995(x)
+ if (x < 1)
+ fun_l8_n695(x)
+ else
+ fun_l8_n881(x)
+ end
+end
+
+def fun_l7_n996(x)
+ if (x < 1)
+ fun_l8_n938(x)
+ else
+ fun_l8_n566(x)
+ end
+end
+
+def fun_l7_n997(x)
+ if (x < 1)
+ fun_l8_n379(x)
+ else
+ fun_l8_n731(x)
+ end
+end
+
+def fun_l7_n998(x)
+ if (x < 1)
+ fun_l8_n320(x)
+ else
+ fun_l8_n339(x)
+ end
+end
+
+def fun_l7_n999(x)
+ if (x < 1)
+ fun_l8_n219(x)
+ else
+ fun_l8_n320(x)
+ end
+end
+
+def fun_l8_n0(x)
+ if (x < 1)
+ fun_l9_n590(x)
+ else
+ fun_l9_n825(x)
+ end
+end
+
+def fun_l8_n1(x)
+ if (x < 1)
+ fun_l9_n301(x)
+ else
+ fun_l9_n457(x)
+ end
+end
+
+def fun_l8_n2(x)
+ if (x < 1)
+ fun_l9_n637(x)
+ else
+ fun_l9_n909(x)
+ end
+end
+
+def fun_l8_n3(x)
+ if (x < 1)
+ fun_l9_n485(x)
+ else
+ fun_l9_n603(x)
+ end
+end
+
+def fun_l8_n4(x)
+ if (x < 1)
+ fun_l9_n465(x)
+ else
+ fun_l9_n39(x)
+ end
+end
+
+def fun_l8_n5(x)
+ if (x < 1)
+ fun_l9_n861(x)
+ else
+ fun_l9_n153(x)
+ end
+end
+
+def fun_l8_n6(x)
+ if (x < 1)
+ fun_l9_n130(x)
+ else
+ fun_l9_n401(x)
+ end
+end
+
+def fun_l8_n7(x)
+ if (x < 1)
+ fun_l9_n726(x)
+ else
+ fun_l9_n248(x)
+ end
+end
+
+def fun_l8_n8(x)
+ if (x < 1)
+ fun_l9_n607(x)
+ else
+ fun_l9_n681(x)
+ end
+end
+
+def fun_l8_n9(x)
+ if (x < 1)
+ fun_l9_n862(x)
+ else
+ fun_l9_n8(x)
+ end
+end
+
+def fun_l8_n10(x)
+ if (x < 1)
+ fun_l9_n607(x)
+ else
+ fun_l9_n373(x)
+ end
+end
+
+def fun_l8_n11(x)
+ if (x < 1)
+ fun_l9_n692(x)
+ else
+ fun_l9_n31(x)
+ end
+end
+
+def fun_l8_n12(x)
+ if (x < 1)
+ fun_l9_n412(x)
+ else
+ fun_l9_n576(x)
+ end
+end
+
+def fun_l8_n13(x)
+ if (x < 1)
+ fun_l9_n582(x)
+ else
+ fun_l9_n281(x)
+ end
+end
+
+def fun_l8_n14(x)
+ if (x < 1)
+ fun_l9_n986(x)
+ else
+ fun_l9_n99(x)
+ end
+end
+
+def fun_l8_n15(x)
+ if (x < 1)
+ fun_l9_n807(x)
+ else
+ fun_l9_n807(x)
+ end
+end
+
+def fun_l8_n16(x)
+ if (x < 1)
+ fun_l9_n635(x)
+ else
+ fun_l9_n51(x)
+ end
+end
+
+def fun_l8_n17(x)
+ if (x < 1)
+ fun_l9_n193(x)
+ else
+ fun_l9_n673(x)
+ end
+end
+
+def fun_l8_n18(x)
+ if (x < 1)
+ fun_l9_n897(x)
+ else
+ fun_l9_n881(x)
+ end
+end
+
+def fun_l8_n19(x)
+ if (x < 1)
+ fun_l9_n288(x)
+ else
+ fun_l9_n337(x)
+ end
+end
+
+def fun_l8_n20(x)
+ if (x < 1)
+ fun_l9_n754(x)
+ else
+ fun_l9_n581(x)
+ end
+end
+
+def fun_l8_n21(x)
+ if (x < 1)
+ fun_l9_n265(x)
+ else
+ fun_l9_n205(x)
+ end
+end
+
+def fun_l8_n22(x)
+ if (x < 1)
+ fun_l9_n784(x)
+ else
+ fun_l9_n428(x)
+ end
+end
+
+def fun_l8_n23(x)
+ if (x < 1)
+ fun_l9_n821(x)
+ else
+ fun_l9_n930(x)
+ end
+end
+
+def fun_l8_n24(x)
+ if (x < 1)
+ fun_l9_n237(x)
+ else
+ fun_l9_n681(x)
+ end
+end
+
+def fun_l8_n25(x)
+ if (x < 1)
+ fun_l9_n32(x)
+ else
+ fun_l9_n405(x)
+ end
+end
+
+def fun_l8_n26(x)
+ if (x < 1)
+ fun_l9_n370(x)
+ else
+ fun_l9_n802(x)
+ end
+end
+
+def fun_l8_n27(x)
+ if (x < 1)
+ fun_l9_n4(x)
+ else
+ fun_l9_n288(x)
+ end
+end
+
+def fun_l8_n28(x)
+ if (x < 1)
+ fun_l9_n9(x)
+ else
+ fun_l9_n180(x)
+ end
+end
+
+def fun_l8_n29(x)
+ if (x < 1)
+ fun_l9_n585(x)
+ else
+ fun_l9_n396(x)
+ end
+end
+
+def fun_l8_n30(x)
+ if (x < 1)
+ fun_l9_n954(x)
+ else
+ fun_l9_n603(x)
+ end
+end
+
+def fun_l8_n31(x)
+ if (x < 1)
+ fun_l9_n808(x)
+ else
+ fun_l9_n770(x)
+ end
+end
+
+def fun_l8_n32(x)
+ if (x < 1)
+ fun_l9_n442(x)
+ else
+ fun_l9_n243(x)
+ end
+end
+
+def fun_l8_n33(x)
+ if (x < 1)
+ fun_l9_n139(x)
+ else
+ fun_l9_n93(x)
+ end
+end
+
+def fun_l8_n34(x)
+ if (x < 1)
+ fun_l9_n270(x)
+ else
+ fun_l9_n333(x)
+ end
+end
+
+def fun_l8_n35(x)
+ if (x < 1)
+ fun_l9_n542(x)
+ else
+ fun_l9_n38(x)
+ end
+end
+
+def fun_l8_n36(x)
+ if (x < 1)
+ fun_l9_n892(x)
+ else
+ fun_l9_n517(x)
+ end
+end
+
+def fun_l8_n37(x)
+ if (x < 1)
+ fun_l9_n599(x)
+ else
+ fun_l9_n692(x)
+ end
+end
+
+def fun_l8_n38(x)
+ if (x < 1)
+ fun_l9_n0(x)
+ else
+ fun_l9_n879(x)
+ end
+end
+
+def fun_l8_n39(x)
+ if (x < 1)
+ fun_l9_n835(x)
+ else
+ fun_l9_n134(x)
+ end
+end
+
+def fun_l8_n40(x)
+ if (x < 1)
+ fun_l9_n151(x)
+ else
+ fun_l9_n546(x)
+ end
+end
+
+def fun_l8_n41(x)
+ if (x < 1)
+ fun_l9_n214(x)
+ else
+ fun_l9_n652(x)
+ end
+end
+
+def fun_l8_n42(x)
+ if (x < 1)
+ fun_l9_n239(x)
+ else
+ fun_l9_n123(x)
+ end
+end
+
+def fun_l8_n43(x)
+ if (x < 1)
+ fun_l9_n763(x)
+ else
+ fun_l9_n953(x)
+ end
+end
+
+def fun_l8_n44(x)
+ if (x < 1)
+ fun_l9_n449(x)
+ else
+ fun_l9_n343(x)
+ end
+end
+
+def fun_l8_n45(x)
+ if (x < 1)
+ fun_l9_n727(x)
+ else
+ fun_l9_n47(x)
+ end
+end
+
+def fun_l8_n46(x)
+ if (x < 1)
+ fun_l9_n684(x)
+ else
+ fun_l9_n711(x)
+ end
+end
+
+def fun_l8_n47(x)
+ if (x < 1)
+ fun_l9_n895(x)
+ else
+ fun_l9_n864(x)
+ end
+end
+
+def fun_l8_n48(x)
+ if (x < 1)
+ fun_l9_n544(x)
+ else
+ fun_l9_n358(x)
+ end
+end
+
+def fun_l8_n49(x)
+ if (x < 1)
+ fun_l9_n829(x)
+ else
+ fun_l9_n411(x)
+ end
+end
+
+def fun_l8_n50(x)
+ if (x < 1)
+ fun_l9_n673(x)
+ else
+ fun_l9_n640(x)
+ end
+end
+
+def fun_l8_n51(x)
+ if (x < 1)
+ fun_l9_n9(x)
+ else
+ fun_l9_n690(x)
+ end
+end
+
+def fun_l8_n52(x)
+ if (x < 1)
+ fun_l9_n293(x)
+ else
+ fun_l9_n889(x)
+ end
+end
+
+def fun_l8_n53(x)
+ if (x < 1)
+ fun_l9_n141(x)
+ else
+ fun_l9_n554(x)
+ end
+end
+
+def fun_l8_n54(x)
+ if (x < 1)
+ fun_l9_n982(x)
+ else
+ fun_l9_n955(x)
+ end
+end
+
+def fun_l8_n55(x)
+ if (x < 1)
+ fun_l9_n382(x)
+ else
+ fun_l9_n897(x)
+ end
+end
+
+def fun_l8_n56(x)
+ if (x < 1)
+ fun_l9_n332(x)
+ else
+ fun_l9_n550(x)
+ end
+end
+
+def fun_l8_n57(x)
+ if (x < 1)
+ fun_l9_n46(x)
+ else
+ fun_l9_n569(x)
+ end
+end
+
+def fun_l8_n58(x)
+ if (x < 1)
+ fun_l9_n556(x)
+ else
+ fun_l9_n0(x)
+ end
+end
+
+def fun_l8_n59(x)
+ if (x < 1)
+ fun_l9_n931(x)
+ else
+ fun_l9_n995(x)
+ end
+end
+
+def fun_l8_n60(x)
+ if (x < 1)
+ fun_l9_n470(x)
+ else
+ fun_l9_n679(x)
+ end
+end
+
+def fun_l8_n61(x)
+ if (x < 1)
+ fun_l9_n269(x)
+ else
+ fun_l9_n742(x)
+ end
+end
+
+def fun_l8_n62(x)
+ if (x < 1)
+ fun_l9_n542(x)
+ else
+ fun_l9_n556(x)
+ end
+end
+
+def fun_l8_n63(x)
+ if (x < 1)
+ fun_l9_n713(x)
+ else
+ fun_l9_n249(x)
+ end
+end
+
+def fun_l8_n64(x)
+ if (x < 1)
+ fun_l9_n842(x)
+ else
+ fun_l9_n566(x)
+ end
+end
+
+def fun_l8_n65(x)
+ if (x < 1)
+ fun_l9_n708(x)
+ else
+ fun_l9_n3(x)
+ end
+end
+
+def fun_l8_n66(x)
+ if (x < 1)
+ fun_l9_n845(x)
+ else
+ fun_l9_n926(x)
+ end
+end
+
+def fun_l8_n67(x)
+ if (x < 1)
+ fun_l9_n823(x)
+ else
+ fun_l9_n326(x)
+ end
+end
+
+def fun_l8_n68(x)
+ if (x < 1)
+ fun_l9_n457(x)
+ else
+ fun_l9_n888(x)
+ end
+end
+
+def fun_l8_n69(x)
+ if (x < 1)
+ fun_l9_n454(x)
+ else
+ fun_l9_n601(x)
+ end
+end
+
+def fun_l8_n70(x)
+ if (x < 1)
+ fun_l9_n636(x)
+ else
+ fun_l9_n482(x)
+ end
+end
+
+def fun_l8_n71(x)
+ if (x < 1)
+ fun_l9_n778(x)
+ else
+ fun_l9_n678(x)
+ end
+end
+
+def fun_l8_n72(x)
+ if (x < 1)
+ fun_l9_n715(x)
+ else
+ fun_l9_n851(x)
+ end
+end
+
+def fun_l8_n73(x)
+ if (x < 1)
+ fun_l9_n330(x)
+ else
+ fun_l9_n84(x)
+ end
+end
+
+def fun_l8_n74(x)
+ if (x < 1)
+ fun_l9_n524(x)
+ else
+ fun_l9_n109(x)
+ end
+end
+
+def fun_l8_n75(x)
+ if (x < 1)
+ fun_l9_n610(x)
+ else
+ fun_l9_n723(x)
+ end
+end
+
+def fun_l8_n76(x)
+ if (x < 1)
+ fun_l9_n964(x)
+ else
+ fun_l9_n893(x)
+ end
+end
+
+def fun_l8_n77(x)
+ if (x < 1)
+ fun_l9_n653(x)
+ else
+ fun_l9_n451(x)
+ end
+end
+
+def fun_l8_n78(x)
+ if (x < 1)
+ fun_l9_n582(x)
+ else
+ fun_l9_n29(x)
+ end
+end
+
+def fun_l8_n79(x)
+ if (x < 1)
+ fun_l9_n219(x)
+ else
+ fun_l9_n25(x)
+ end
+end
+
+def fun_l8_n80(x)
+ if (x < 1)
+ fun_l9_n471(x)
+ else
+ fun_l9_n217(x)
+ end
+end
+
+def fun_l8_n81(x)
+ if (x < 1)
+ fun_l9_n339(x)
+ else
+ fun_l9_n365(x)
+ end
+end
+
+def fun_l8_n82(x)
+ if (x < 1)
+ fun_l9_n808(x)
+ else
+ fun_l9_n501(x)
+ end
+end
+
+def fun_l8_n83(x)
+ if (x < 1)
+ fun_l9_n23(x)
+ else
+ fun_l9_n252(x)
+ end
+end
+
+def fun_l8_n84(x)
+ if (x < 1)
+ fun_l9_n628(x)
+ else
+ fun_l9_n514(x)
+ end
+end
+
+def fun_l8_n85(x)
+ if (x < 1)
+ fun_l9_n22(x)
+ else
+ fun_l9_n465(x)
+ end
+end
+
+def fun_l8_n86(x)
+ if (x < 1)
+ fun_l9_n553(x)
+ else
+ fun_l9_n788(x)
+ end
+end
+
+def fun_l8_n87(x)
+ if (x < 1)
+ fun_l9_n852(x)
+ else
+ fun_l9_n945(x)
+ end
+end
+
+def fun_l8_n88(x)
+ if (x < 1)
+ fun_l9_n886(x)
+ else
+ fun_l9_n438(x)
+ end
+end
+
+def fun_l8_n89(x)
+ if (x < 1)
+ fun_l9_n821(x)
+ else
+ fun_l9_n697(x)
+ end
+end
+
+def fun_l8_n90(x)
+ if (x < 1)
+ fun_l9_n388(x)
+ else
+ fun_l9_n39(x)
+ end
+end
+
+def fun_l8_n91(x)
+ if (x < 1)
+ fun_l9_n135(x)
+ else
+ fun_l9_n736(x)
+ end
+end
+
+def fun_l8_n92(x)
+ if (x < 1)
+ fun_l9_n225(x)
+ else
+ fun_l9_n125(x)
+ end
+end
+
+def fun_l8_n93(x)
+ if (x < 1)
+ fun_l9_n201(x)
+ else
+ fun_l9_n320(x)
+ end
+end
+
+def fun_l8_n94(x)
+ if (x < 1)
+ fun_l9_n30(x)
+ else
+ fun_l9_n938(x)
+ end
+end
+
+def fun_l8_n95(x)
+ if (x < 1)
+ fun_l9_n987(x)
+ else
+ fun_l9_n141(x)
+ end
+end
+
+def fun_l8_n96(x)
+ if (x < 1)
+ fun_l9_n968(x)
+ else
+ fun_l9_n999(x)
+ end
+end
+
+def fun_l8_n97(x)
+ if (x < 1)
+ fun_l9_n852(x)
+ else
+ fun_l9_n927(x)
+ end
+end
+
+def fun_l8_n98(x)
+ if (x < 1)
+ fun_l9_n720(x)
+ else
+ fun_l9_n717(x)
+ end
+end
+
+def fun_l8_n99(x)
+ if (x < 1)
+ fun_l9_n907(x)
+ else
+ fun_l9_n8(x)
+ end
+end
+
+def fun_l8_n100(x)
+ if (x < 1)
+ fun_l9_n973(x)
+ else
+ fun_l9_n379(x)
+ end
+end
+
+def fun_l8_n101(x)
+ if (x < 1)
+ fun_l9_n370(x)
+ else
+ fun_l9_n530(x)
+ end
+end
+
+def fun_l8_n102(x)
+ if (x < 1)
+ fun_l9_n411(x)
+ else
+ fun_l9_n560(x)
+ end
+end
+
+def fun_l8_n103(x)
+ if (x < 1)
+ fun_l9_n54(x)
+ else
+ fun_l9_n813(x)
+ end
+end
+
+def fun_l8_n104(x)
+ if (x < 1)
+ fun_l9_n217(x)
+ else
+ fun_l9_n455(x)
+ end
+end
+
+def fun_l8_n105(x)
+ if (x < 1)
+ fun_l9_n667(x)
+ else
+ fun_l9_n92(x)
+ end
+end
+
+def fun_l8_n106(x)
+ if (x < 1)
+ fun_l9_n933(x)
+ else
+ fun_l9_n727(x)
+ end
+end
+
+def fun_l8_n107(x)
+ if (x < 1)
+ fun_l9_n578(x)
+ else
+ fun_l9_n350(x)
+ end
+end
+
+def fun_l8_n108(x)
+ if (x < 1)
+ fun_l9_n75(x)
+ else
+ fun_l9_n439(x)
+ end
+end
+
+def fun_l8_n109(x)
+ if (x < 1)
+ fun_l9_n21(x)
+ else
+ fun_l9_n112(x)
+ end
+end
+
+def fun_l8_n110(x)
+ if (x < 1)
+ fun_l9_n57(x)
+ else
+ fun_l9_n553(x)
+ end
+end
+
+def fun_l8_n111(x)
+ if (x < 1)
+ fun_l9_n347(x)
+ else
+ fun_l9_n285(x)
+ end
+end
+
+def fun_l8_n112(x)
+ if (x < 1)
+ fun_l9_n837(x)
+ else
+ fun_l9_n793(x)
+ end
+end
+
+def fun_l8_n113(x)
+ if (x < 1)
+ fun_l9_n517(x)
+ else
+ fun_l9_n668(x)
+ end
+end
+
+def fun_l8_n114(x)
+ if (x < 1)
+ fun_l9_n486(x)
+ else
+ fun_l9_n872(x)
+ end
+end
+
+def fun_l8_n115(x)
+ if (x < 1)
+ fun_l9_n454(x)
+ else
+ fun_l9_n507(x)
+ end
+end
+
+def fun_l8_n116(x)
+ if (x < 1)
+ fun_l9_n110(x)
+ else
+ fun_l9_n263(x)
+ end
+end
+
+def fun_l8_n117(x)
+ if (x < 1)
+ fun_l9_n878(x)
+ else
+ fun_l9_n21(x)
+ end
+end
+
+def fun_l8_n118(x)
+ if (x < 1)
+ fun_l9_n564(x)
+ else
+ fun_l9_n409(x)
+ end
+end
+
+def fun_l8_n119(x)
+ if (x < 1)
+ fun_l9_n511(x)
+ else
+ fun_l9_n800(x)
+ end
+end
+
+def fun_l8_n120(x)
+ if (x < 1)
+ fun_l9_n501(x)
+ else
+ fun_l9_n305(x)
+ end
+end
+
+def fun_l8_n121(x)
+ if (x < 1)
+ fun_l9_n630(x)
+ else
+ fun_l9_n319(x)
+ end
+end
+
+def fun_l8_n122(x)
+ if (x < 1)
+ fun_l9_n271(x)
+ else
+ fun_l9_n639(x)
+ end
+end
+
+def fun_l8_n123(x)
+ if (x < 1)
+ fun_l9_n812(x)
+ else
+ fun_l9_n735(x)
+ end
+end
+
+def fun_l8_n124(x)
+ if (x < 1)
+ fun_l9_n828(x)
+ else
+ fun_l9_n203(x)
+ end
+end
+
+def fun_l8_n125(x)
+ if (x < 1)
+ fun_l9_n228(x)
+ else
+ fun_l9_n536(x)
+ end
+end
+
+def fun_l8_n126(x)
+ if (x < 1)
+ fun_l9_n426(x)
+ else
+ fun_l9_n325(x)
+ end
+end
+
+def fun_l8_n127(x)
+ if (x < 1)
+ fun_l9_n19(x)
+ else
+ fun_l9_n324(x)
+ end
+end
+
+def fun_l8_n128(x)
+ if (x < 1)
+ fun_l9_n419(x)
+ else
+ fun_l9_n425(x)
+ end
+end
+
+def fun_l8_n129(x)
+ if (x < 1)
+ fun_l9_n384(x)
+ else
+ fun_l9_n550(x)
+ end
+end
+
+def fun_l8_n130(x)
+ if (x < 1)
+ fun_l9_n956(x)
+ else
+ fun_l9_n270(x)
+ end
+end
+
+def fun_l8_n131(x)
+ if (x < 1)
+ fun_l9_n20(x)
+ else
+ fun_l9_n949(x)
+ end
+end
+
+def fun_l8_n132(x)
+ if (x < 1)
+ fun_l9_n317(x)
+ else
+ fun_l9_n909(x)
+ end
+end
+
+def fun_l8_n133(x)
+ if (x < 1)
+ fun_l9_n131(x)
+ else
+ fun_l9_n108(x)
+ end
+end
+
+def fun_l8_n134(x)
+ if (x < 1)
+ fun_l9_n648(x)
+ else
+ fun_l9_n473(x)
+ end
+end
+
+def fun_l8_n135(x)
+ if (x < 1)
+ fun_l9_n837(x)
+ else
+ fun_l9_n89(x)
+ end
+end
+
+def fun_l8_n136(x)
+ if (x < 1)
+ fun_l9_n637(x)
+ else
+ fun_l9_n394(x)
+ end
+end
+
+def fun_l8_n137(x)
+ if (x < 1)
+ fun_l9_n608(x)
+ else
+ fun_l9_n283(x)
+ end
+end
+
+def fun_l8_n138(x)
+ if (x < 1)
+ fun_l9_n728(x)
+ else
+ fun_l9_n586(x)
+ end
+end
+
+def fun_l8_n139(x)
+ if (x < 1)
+ fun_l9_n689(x)
+ else
+ fun_l9_n700(x)
+ end
+end
+
+def fun_l8_n140(x)
+ if (x < 1)
+ fun_l9_n532(x)
+ else
+ fun_l9_n98(x)
+ end
+end
+
+def fun_l8_n141(x)
+ if (x < 1)
+ fun_l9_n696(x)
+ else
+ fun_l9_n951(x)
+ end
+end
+
+def fun_l8_n142(x)
+ if (x < 1)
+ fun_l9_n28(x)
+ else
+ fun_l9_n714(x)
+ end
+end
+
+def fun_l8_n143(x)
+ if (x < 1)
+ fun_l9_n438(x)
+ else
+ fun_l9_n934(x)
+ end
+end
+
+def fun_l8_n144(x)
+ if (x < 1)
+ fun_l9_n738(x)
+ else
+ fun_l9_n473(x)
+ end
+end
+
+def fun_l8_n145(x)
+ if (x < 1)
+ fun_l9_n201(x)
+ else
+ fun_l9_n634(x)
+ end
+end
+
+def fun_l8_n146(x)
+ if (x < 1)
+ fun_l9_n391(x)
+ else
+ fun_l9_n703(x)
+ end
+end
+
+def fun_l8_n147(x)
+ if (x < 1)
+ fun_l9_n740(x)
+ else
+ fun_l9_n265(x)
+ end
+end
+
+def fun_l8_n148(x)
+ if (x < 1)
+ fun_l9_n303(x)
+ else
+ fun_l9_n162(x)
+ end
+end
+
+def fun_l8_n149(x)
+ if (x < 1)
+ fun_l9_n518(x)
+ else
+ fun_l9_n899(x)
+ end
+end
+
+def fun_l8_n150(x)
+ if (x < 1)
+ fun_l9_n847(x)
+ else
+ fun_l9_n840(x)
+ end
+end
+
+def fun_l8_n151(x)
+ if (x < 1)
+ fun_l9_n567(x)
+ else
+ fun_l9_n29(x)
+ end
+end
+
+def fun_l8_n152(x)
+ if (x < 1)
+ fun_l9_n426(x)
+ else
+ fun_l9_n578(x)
+ end
+end
+
+def fun_l8_n153(x)
+ if (x < 1)
+ fun_l9_n617(x)
+ else
+ fun_l9_n703(x)
+ end
+end
+
+def fun_l8_n154(x)
+ if (x < 1)
+ fun_l9_n673(x)
+ else
+ fun_l9_n663(x)
+ end
+end
+
+def fun_l8_n155(x)
+ if (x < 1)
+ fun_l9_n456(x)
+ else
+ fun_l9_n406(x)
+ end
+end
+
+def fun_l8_n156(x)
+ if (x < 1)
+ fun_l9_n297(x)
+ else
+ fun_l9_n444(x)
+ end
+end
+
+def fun_l8_n157(x)
+ if (x < 1)
+ fun_l9_n300(x)
+ else
+ fun_l9_n179(x)
+ end
+end
+
+def fun_l8_n158(x)
+ if (x < 1)
+ fun_l9_n646(x)
+ else
+ fun_l9_n9(x)
+ end
+end
+
+def fun_l8_n159(x)
+ if (x < 1)
+ fun_l9_n133(x)
+ else
+ fun_l9_n228(x)
+ end
+end
+
+def fun_l8_n160(x)
+ if (x < 1)
+ fun_l9_n814(x)
+ else
+ fun_l9_n775(x)
+ end
+end
+
+def fun_l8_n161(x)
+ if (x < 1)
+ fun_l9_n748(x)
+ else
+ fun_l9_n849(x)
+ end
+end
+
+def fun_l8_n162(x)
+ if (x < 1)
+ fun_l9_n209(x)
+ else
+ fun_l9_n273(x)
+ end
+end
+
+def fun_l8_n163(x)
+ if (x < 1)
+ fun_l9_n116(x)
+ else
+ fun_l9_n669(x)
+ end
+end
+
+def fun_l8_n164(x)
+ if (x < 1)
+ fun_l9_n714(x)
+ else
+ fun_l9_n621(x)
+ end
+end
+
+def fun_l8_n165(x)
+ if (x < 1)
+ fun_l9_n619(x)
+ else
+ fun_l9_n365(x)
+ end
+end
+
+def fun_l8_n166(x)
+ if (x < 1)
+ fun_l9_n756(x)
+ else
+ fun_l9_n745(x)
+ end
+end
+
+def fun_l8_n167(x)
+ if (x < 1)
+ fun_l9_n12(x)
+ else
+ fun_l9_n633(x)
+ end
+end
+
+def fun_l8_n168(x)
+ if (x < 1)
+ fun_l9_n619(x)
+ else
+ fun_l9_n31(x)
+ end
+end
+
+def fun_l8_n169(x)
+ if (x < 1)
+ fun_l9_n685(x)
+ else
+ fun_l9_n107(x)
+ end
+end
+
+def fun_l8_n170(x)
+ if (x < 1)
+ fun_l9_n636(x)
+ else
+ fun_l9_n280(x)
+ end
+end
+
+def fun_l8_n171(x)
+ if (x < 1)
+ fun_l9_n254(x)
+ else
+ fun_l9_n742(x)
+ end
+end
+
+def fun_l8_n172(x)
+ if (x < 1)
+ fun_l9_n829(x)
+ else
+ fun_l9_n632(x)
+ end
+end
+
+def fun_l8_n173(x)
+ if (x < 1)
+ fun_l9_n341(x)
+ else
+ fun_l9_n186(x)
+ end
+end
+
+def fun_l8_n174(x)
+ if (x < 1)
+ fun_l9_n903(x)
+ else
+ fun_l9_n93(x)
+ end
+end
+
+def fun_l8_n175(x)
+ if (x < 1)
+ fun_l9_n416(x)
+ else
+ fun_l9_n318(x)
+ end
+end
+
+def fun_l8_n176(x)
+ if (x < 1)
+ fun_l9_n893(x)
+ else
+ fun_l9_n438(x)
+ end
+end
+
+def fun_l8_n177(x)
+ if (x < 1)
+ fun_l9_n551(x)
+ else
+ fun_l9_n312(x)
+ end
+end
+
+def fun_l8_n178(x)
+ if (x < 1)
+ fun_l9_n582(x)
+ else
+ fun_l9_n926(x)
+ end
+end
+
+def fun_l8_n179(x)
+ if (x < 1)
+ fun_l9_n547(x)
+ else
+ fun_l9_n804(x)
+ end
+end
+
+def fun_l8_n180(x)
+ if (x < 1)
+ fun_l9_n589(x)
+ else
+ fun_l9_n246(x)
+ end
+end
+
+def fun_l8_n181(x)
+ if (x < 1)
+ fun_l9_n67(x)
+ else
+ fun_l9_n345(x)
+ end
+end
+
+def fun_l8_n182(x)
+ if (x < 1)
+ fun_l9_n958(x)
+ else
+ fun_l9_n923(x)
+ end
+end
+
+def fun_l8_n183(x)
+ if (x < 1)
+ fun_l9_n418(x)
+ else
+ fun_l9_n532(x)
+ end
+end
+
+def fun_l8_n184(x)
+ if (x < 1)
+ fun_l9_n372(x)
+ else
+ fun_l9_n808(x)
+ end
+end
+
+def fun_l8_n185(x)
+ if (x < 1)
+ fun_l9_n849(x)
+ else
+ fun_l9_n755(x)
+ end
+end
+
+def fun_l8_n186(x)
+ if (x < 1)
+ fun_l9_n544(x)
+ else
+ fun_l9_n73(x)
+ end
+end
+
+def fun_l8_n187(x)
+ if (x < 1)
+ fun_l9_n729(x)
+ else
+ fun_l9_n295(x)
+ end
+end
+
+def fun_l8_n188(x)
+ if (x < 1)
+ fun_l9_n782(x)
+ else
+ fun_l9_n117(x)
+ end
+end
+
+def fun_l8_n189(x)
+ if (x < 1)
+ fun_l9_n947(x)
+ else
+ fun_l9_n93(x)
+ end
+end
+
+def fun_l8_n190(x)
+ if (x < 1)
+ fun_l9_n989(x)
+ else
+ fun_l9_n444(x)
+ end
+end
+
+def fun_l8_n191(x)
+ if (x < 1)
+ fun_l9_n394(x)
+ else
+ fun_l9_n741(x)
+ end
+end
+
+def fun_l8_n192(x)
+ if (x < 1)
+ fun_l9_n582(x)
+ else
+ fun_l9_n333(x)
+ end
+end
+
+def fun_l8_n193(x)
+ if (x < 1)
+ fun_l9_n73(x)
+ else
+ fun_l9_n227(x)
+ end
+end
+
+def fun_l8_n194(x)
+ if (x < 1)
+ fun_l9_n946(x)
+ else
+ fun_l9_n354(x)
+ end
+end
+
+def fun_l8_n195(x)
+ if (x < 1)
+ fun_l9_n383(x)
+ else
+ fun_l9_n863(x)
+ end
+end
+
+def fun_l8_n196(x)
+ if (x < 1)
+ fun_l9_n441(x)
+ else
+ fun_l9_n947(x)
+ end
+end
+
+def fun_l8_n197(x)
+ if (x < 1)
+ fun_l9_n506(x)
+ else
+ fun_l9_n45(x)
+ end
+end
+
+def fun_l8_n198(x)
+ if (x < 1)
+ fun_l9_n890(x)
+ else
+ fun_l9_n341(x)
+ end
+end
+
+def fun_l8_n199(x)
+ if (x < 1)
+ fun_l9_n75(x)
+ else
+ fun_l9_n56(x)
+ end
+end
+
+def fun_l8_n200(x)
+ if (x < 1)
+ fun_l9_n386(x)
+ else
+ fun_l9_n280(x)
+ end
+end
+
+def fun_l8_n201(x)
+ if (x < 1)
+ fun_l9_n364(x)
+ else
+ fun_l9_n424(x)
+ end
+end
+
+def fun_l8_n202(x)
+ if (x < 1)
+ fun_l9_n923(x)
+ else
+ fun_l9_n326(x)
+ end
+end
+
+def fun_l8_n203(x)
+ if (x < 1)
+ fun_l9_n692(x)
+ else
+ fun_l9_n502(x)
+ end
+end
+
+def fun_l8_n204(x)
+ if (x < 1)
+ fun_l9_n508(x)
+ else
+ fun_l9_n561(x)
+ end
+end
+
+def fun_l8_n205(x)
+ if (x < 1)
+ fun_l9_n496(x)
+ else
+ fun_l9_n949(x)
+ end
+end
+
+def fun_l8_n206(x)
+ if (x < 1)
+ fun_l9_n852(x)
+ else
+ fun_l9_n447(x)
+ end
+end
+
+def fun_l8_n207(x)
+ if (x < 1)
+ fun_l9_n757(x)
+ else
+ fun_l9_n782(x)
+ end
+end
+
+def fun_l8_n208(x)
+ if (x < 1)
+ fun_l9_n505(x)
+ else
+ fun_l9_n32(x)
+ end
+end
+
+def fun_l8_n209(x)
+ if (x < 1)
+ fun_l9_n591(x)
+ else
+ fun_l9_n967(x)
+ end
+end
+
+def fun_l8_n210(x)
+ if (x < 1)
+ fun_l9_n537(x)
+ else
+ fun_l9_n380(x)
+ end
+end
+
+def fun_l8_n211(x)
+ if (x < 1)
+ fun_l9_n19(x)
+ else
+ fun_l9_n362(x)
+ end
+end
+
+def fun_l8_n212(x)
+ if (x < 1)
+ fun_l9_n759(x)
+ else
+ fun_l9_n835(x)
+ end
+end
+
+def fun_l8_n213(x)
+ if (x < 1)
+ fun_l9_n518(x)
+ else
+ fun_l9_n294(x)
+ end
+end
+
+def fun_l8_n214(x)
+ if (x < 1)
+ fun_l9_n921(x)
+ else
+ fun_l9_n687(x)
+ end
+end
+
+def fun_l8_n215(x)
+ if (x < 1)
+ fun_l9_n114(x)
+ else
+ fun_l9_n130(x)
+ end
+end
+
+def fun_l8_n216(x)
+ if (x < 1)
+ fun_l9_n829(x)
+ else
+ fun_l9_n8(x)
+ end
+end
+
+def fun_l8_n217(x)
+ if (x < 1)
+ fun_l9_n875(x)
+ else
+ fun_l9_n392(x)
+ end
+end
+
+def fun_l8_n218(x)
+ if (x < 1)
+ fun_l9_n13(x)
+ else
+ fun_l9_n907(x)
+ end
+end
+
+def fun_l8_n219(x)
+ if (x < 1)
+ fun_l9_n457(x)
+ else
+ fun_l9_n77(x)
+ end
+end
+
+def fun_l8_n220(x)
+ if (x < 1)
+ fun_l9_n404(x)
+ else
+ fun_l9_n12(x)
+ end
+end
+
+def fun_l8_n221(x)
+ if (x < 1)
+ fun_l9_n244(x)
+ else
+ fun_l9_n231(x)
+ end
+end
+
+def fun_l8_n222(x)
+ if (x < 1)
+ fun_l9_n205(x)
+ else
+ fun_l9_n458(x)
+ end
+end
+
+def fun_l8_n223(x)
+ if (x < 1)
+ fun_l9_n570(x)
+ else
+ fun_l9_n44(x)
+ end
+end
+
+def fun_l8_n224(x)
+ if (x < 1)
+ fun_l9_n651(x)
+ else
+ fun_l9_n836(x)
+ end
+end
+
+def fun_l8_n225(x)
+ if (x < 1)
+ fun_l9_n518(x)
+ else
+ fun_l9_n845(x)
+ end
+end
+
+def fun_l8_n226(x)
+ if (x < 1)
+ fun_l9_n92(x)
+ else
+ fun_l9_n637(x)
+ end
+end
+
+def fun_l8_n227(x)
+ if (x < 1)
+ fun_l9_n990(x)
+ else
+ fun_l9_n926(x)
+ end
+end
+
+def fun_l8_n228(x)
+ if (x < 1)
+ fun_l9_n465(x)
+ else
+ fun_l9_n764(x)
+ end
+end
+
+def fun_l8_n229(x)
+ if (x < 1)
+ fun_l9_n7(x)
+ else
+ fun_l9_n981(x)
+ end
+end
+
+def fun_l8_n230(x)
+ if (x < 1)
+ fun_l9_n250(x)
+ else
+ fun_l9_n690(x)
+ end
+end
+
+def fun_l8_n231(x)
+ if (x < 1)
+ fun_l9_n101(x)
+ else
+ fun_l9_n342(x)
+ end
+end
+
+def fun_l8_n232(x)
+ if (x < 1)
+ fun_l9_n659(x)
+ else
+ fun_l9_n216(x)
+ end
+end
+
+def fun_l8_n233(x)
+ if (x < 1)
+ fun_l9_n129(x)
+ else
+ fun_l9_n439(x)
+ end
+end
+
+def fun_l8_n234(x)
+ if (x < 1)
+ fun_l9_n616(x)
+ else
+ fun_l9_n700(x)
+ end
+end
+
+def fun_l8_n235(x)
+ if (x < 1)
+ fun_l9_n850(x)
+ else
+ fun_l9_n254(x)
+ end
+end
+
+def fun_l8_n236(x)
+ if (x < 1)
+ fun_l9_n186(x)
+ else
+ fun_l9_n592(x)
+ end
+end
+
+def fun_l8_n237(x)
+ if (x < 1)
+ fun_l9_n895(x)
+ else
+ fun_l9_n752(x)
+ end
+end
+
+def fun_l8_n238(x)
+ if (x < 1)
+ fun_l9_n496(x)
+ else
+ fun_l9_n784(x)
+ end
+end
+
+def fun_l8_n239(x)
+ if (x < 1)
+ fun_l9_n579(x)
+ else
+ fun_l9_n144(x)
+ end
+end
+
+def fun_l8_n240(x)
+ if (x < 1)
+ fun_l9_n805(x)
+ else
+ fun_l9_n851(x)
+ end
+end
+
+def fun_l8_n241(x)
+ if (x < 1)
+ fun_l9_n756(x)
+ else
+ fun_l9_n332(x)
+ end
+end
+
+def fun_l8_n242(x)
+ if (x < 1)
+ fun_l9_n898(x)
+ else
+ fun_l9_n285(x)
+ end
+end
+
+def fun_l8_n243(x)
+ if (x < 1)
+ fun_l9_n729(x)
+ else
+ fun_l9_n149(x)
+ end
+end
+
+def fun_l8_n244(x)
+ if (x < 1)
+ fun_l9_n881(x)
+ else
+ fun_l9_n356(x)
+ end
+end
+
+def fun_l8_n245(x)
+ if (x < 1)
+ fun_l9_n351(x)
+ else
+ fun_l9_n805(x)
+ end
+end
+
+def fun_l8_n246(x)
+ if (x < 1)
+ fun_l9_n493(x)
+ else
+ fun_l9_n200(x)
+ end
+end
+
+def fun_l8_n247(x)
+ if (x < 1)
+ fun_l9_n706(x)
+ else
+ fun_l9_n917(x)
+ end
+end
+
+def fun_l8_n248(x)
+ if (x < 1)
+ fun_l9_n370(x)
+ else
+ fun_l9_n755(x)
+ end
+end
+
+def fun_l8_n249(x)
+ if (x < 1)
+ fun_l9_n859(x)
+ else
+ fun_l9_n496(x)
+ end
+end
+
+def fun_l8_n250(x)
+ if (x < 1)
+ fun_l9_n443(x)
+ else
+ fun_l9_n113(x)
+ end
+end
+
+def fun_l8_n251(x)
+ if (x < 1)
+ fun_l9_n631(x)
+ else
+ fun_l9_n195(x)
+ end
+end
+
+def fun_l8_n252(x)
+ if (x < 1)
+ fun_l9_n357(x)
+ else
+ fun_l9_n694(x)
+ end
+end
+
+def fun_l8_n253(x)
+ if (x < 1)
+ fun_l9_n387(x)
+ else
+ fun_l9_n820(x)
+ end
+end
+
+def fun_l8_n254(x)
+ if (x < 1)
+ fun_l9_n909(x)
+ else
+ fun_l9_n559(x)
+ end
+end
+
+def fun_l8_n255(x)
+ if (x < 1)
+ fun_l9_n474(x)
+ else
+ fun_l9_n864(x)
+ end
+end
+
+def fun_l8_n256(x)
+ if (x < 1)
+ fun_l9_n914(x)
+ else
+ fun_l9_n672(x)
+ end
+end
+
+def fun_l8_n257(x)
+ if (x < 1)
+ fun_l9_n915(x)
+ else
+ fun_l9_n177(x)
+ end
+end
+
+def fun_l8_n258(x)
+ if (x < 1)
+ fun_l9_n917(x)
+ else
+ fun_l9_n210(x)
+ end
+end
+
+def fun_l8_n259(x)
+ if (x < 1)
+ fun_l9_n851(x)
+ else
+ fun_l9_n342(x)
+ end
+end
+
+def fun_l8_n260(x)
+ if (x < 1)
+ fun_l9_n205(x)
+ else
+ fun_l9_n412(x)
+ end
+end
+
+def fun_l8_n261(x)
+ if (x < 1)
+ fun_l9_n110(x)
+ else
+ fun_l9_n62(x)
+ end
+end
+
+def fun_l8_n262(x)
+ if (x < 1)
+ fun_l9_n706(x)
+ else
+ fun_l9_n903(x)
+ end
+end
+
+def fun_l8_n263(x)
+ if (x < 1)
+ fun_l9_n403(x)
+ else
+ fun_l9_n994(x)
+ end
+end
+
+def fun_l8_n264(x)
+ if (x < 1)
+ fun_l9_n631(x)
+ else
+ fun_l9_n126(x)
+ end
+end
+
+def fun_l8_n265(x)
+ if (x < 1)
+ fun_l9_n216(x)
+ else
+ fun_l9_n573(x)
+ end
+end
+
+def fun_l8_n266(x)
+ if (x < 1)
+ fun_l9_n174(x)
+ else
+ fun_l9_n495(x)
+ end
+end
+
+def fun_l8_n267(x)
+ if (x < 1)
+ fun_l9_n802(x)
+ else
+ fun_l9_n881(x)
+ end
+end
+
+def fun_l8_n268(x)
+ if (x < 1)
+ fun_l9_n148(x)
+ else
+ fun_l9_n399(x)
+ end
+end
+
+def fun_l8_n269(x)
+ if (x < 1)
+ fun_l9_n675(x)
+ else
+ fun_l9_n596(x)
+ end
+end
+
+def fun_l8_n270(x)
+ if (x < 1)
+ fun_l9_n306(x)
+ else
+ fun_l9_n413(x)
+ end
+end
+
+def fun_l8_n271(x)
+ if (x < 1)
+ fun_l9_n205(x)
+ else
+ fun_l9_n569(x)
+ end
+end
+
+def fun_l8_n272(x)
+ if (x < 1)
+ fun_l9_n6(x)
+ else
+ fun_l9_n531(x)
+ end
+end
+
+def fun_l8_n273(x)
+ if (x < 1)
+ fun_l9_n516(x)
+ else
+ fun_l9_n172(x)
+ end
+end
+
+def fun_l8_n274(x)
+ if (x < 1)
+ fun_l9_n641(x)
+ else
+ fun_l9_n85(x)
+ end
+end
+
+def fun_l8_n275(x)
+ if (x < 1)
+ fun_l9_n258(x)
+ else
+ fun_l9_n773(x)
+ end
+end
+
+def fun_l8_n276(x)
+ if (x < 1)
+ fun_l9_n233(x)
+ else
+ fun_l9_n222(x)
+ end
+end
+
+def fun_l8_n277(x)
+ if (x < 1)
+ fun_l9_n615(x)
+ else
+ fun_l9_n598(x)
+ end
+end
+
+def fun_l8_n278(x)
+ if (x < 1)
+ fun_l9_n126(x)
+ else
+ fun_l9_n270(x)
+ end
+end
+
+def fun_l8_n279(x)
+ if (x < 1)
+ fun_l9_n186(x)
+ else
+ fun_l9_n78(x)
+ end
+end
+
+def fun_l8_n280(x)
+ if (x < 1)
+ fun_l9_n731(x)
+ else
+ fun_l9_n114(x)
+ end
+end
+
+def fun_l8_n281(x)
+ if (x < 1)
+ fun_l9_n513(x)
+ else
+ fun_l9_n69(x)
+ end
+end
+
+def fun_l8_n282(x)
+ if (x < 1)
+ fun_l9_n208(x)
+ else
+ fun_l9_n466(x)
+ end
+end
+
+def fun_l8_n283(x)
+ if (x < 1)
+ fun_l9_n958(x)
+ else
+ fun_l9_n86(x)
+ end
+end
+
+def fun_l8_n284(x)
+ if (x < 1)
+ fun_l9_n663(x)
+ else
+ fun_l9_n619(x)
+ end
+end
+
+def fun_l8_n285(x)
+ if (x < 1)
+ fun_l9_n698(x)
+ else
+ fun_l9_n97(x)
+ end
+end
+
+def fun_l8_n286(x)
+ if (x < 1)
+ fun_l9_n544(x)
+ else
+ fun_l9_n791(x)
+ end
+end
+
+def fun_l8_n287(x)
+ if (x < 1)
+ fun_l9_n51(x)
+ else
+ fun_l9_n415(x)
+ end
+end
+
+def fun_l8_n288(x)
+ if (x < 1)
+ fun_l9_n942(x)
+ else
+ fun_l9_n11(x)
+ end
+end
+
+def fun_l8_n289(x)
+ if (x < 1)
+ fun_l9_n386(x)
+ else
+ fun_l9_n507(x)
+ end
+end
+
+def fun_l8_n290(x)
+ if (x < 1)
+ fun_l9_n983(x)
+ else
+ fun_l9_n81(x)
+ end
+end
+
+def fun_l8_n291(x)
+ if (x < 1)
+ fun_l9_n403(x)
+ else
+ fun_l9_n628(x)
+ end
+end
+
+def fun_l8_n292(x)
+ if (x < 1)
+ fun_l9_n479(x)
+ else
+ fun_l9_n379(x)
+ end
+end
+
+def fun_l8_n293(x)
+ if (x < 1)
+ fun_l9_n284(x)
+ else
+ fun_l9_n109(x)
+ end
+end
+
+def fun_l8_n294(x)
+ if (x < 1)
+ fun_l9_n29(x)
+ else
+ fun_l9_n802(x)
+ end
+end
+
+def fun_l8_n295(x)
+ if (x < 1)
+ fun_l9_n579(x)
+ else
+ fun_l9_n371(x)
+ end
+end
+
+def fun_l8_n296(x)
+ if (x < 1)
+ fun_l9_n96(x)
+ else
+ fun_l9_n632(x)
+ end
+end
+
+def fun_l8_n297(x)
+ if (x < 1)
+ fun_l9_n442(x)
+ else
+ fun_l9_n396(x)
+ end
+end
+
+def fun_l8_n298(x)
+ if (x < 1)
+ fun_l9_n902(x)
+ else
+ fun_l9_n804(x)
+ end
+end
+
+def fun_l8_n299(x)
+ if (x < 1)
+ fun_l9_n561(x)
+ else
+ fun_l9_n952(x)
+ end
+end
+
+def fun_l8_n300(x)
+ if (x < 1)
+ fun_l9_n757(x)
+ else
+ fun_l9_n819(x)
+ end
+end
+
+def fun_l8_n301(x)
+ if (x < 1)
+ fun_l9_n97(x)
+ else
+ fun_l9_n892(x)
+ end
+end
+
+def fun_l8_n302(x)
+ if (x < 1)
+ fun_l9_n67(x)
+ else
+ fun_l9_n765(x)
+ end
+end
+
+def fun_l8_n303(x)
+ if (x < 1)
+ fun_l9_n166(x)
+ else
+ fun_l9_n769(x)
+ end
+end
+
+def fun_l8_n304(x)
+ if (x < 1)
+ fun_l9_n592(x)
+ else
+ fun_l9_n423(x)
+ end
+end
+
+def fun_l8_n305(x)
+ if (x < 1)
+ fun_l9_n354(x)
+ else
+ fun_l9_n953(x)
+ end
+end
+
+def fun_l8_n306(x)
+ if (x < 1)
+ fun_l9_n857(x)
+ else
+ fun_l9_n18(x)
+ end
+end
+
+def fun_l8_n307(x)
+ if (x < 1)
+ fun_l9_n445(x)
+ else
+ fun_l9_n796(x)
+ end
+end
+
+def fun_l8_n308(x)
+ if (x < 1)
+ fun_l9_n293(x)
+ else
+ fun_l9_n304(x)
+ end
+end
+
+def fun_l8_n309(x)
+ if (x < 1)
+ fun_l9_n859(x)
+ else
+ fun_l9_n282(x)
+ end
+end
+
+def fun_l8_n310(x)
+ if (x < 1)
+ fun_l9_n133(x)
+ else
+ fun_l9_n90(x)
+ end
+end
+
+def fun_l8_n311(x)
+ if (x < 1)
+ fun_l9_n997(x)
+ else
+ fun_l9_n201(x)
+ end
+end
+
+def fun_l8_n312(x)
+ if (x < 1)
+ fun_l9_n140(x)
+ else
+ fun_l9_n772(x)
+ end
+end
+
+def fun_l8_n313(x)
+ if (x < 1)
+ fun_l9_n761(x)
+ else
+ fun_l9_n980(x)
+ end
+end
+
+def fun_l8_n314(x)
+ if (x < 1)
+ fun_l9_n357(x)
+ else
+ fun_l9_n552(x)
+ end
+end
+
+def fun_l8_n315(x)
+ if (x < 1)
+ fun_l9_n312(x)
+ else
+ fun_l9_n412(x)
+ end
+end
+
+def fun_l8_n316(x)
+ if (x < 1)
+ fun_l9_n700(x)
+ else
+ fun_l9_n551(x)
+ end
+end
+
+def fun_l8_n317(x)
+ if (x < 1)
+ fun_l9_n623(x)
+ else
+ fun_l9_n219(x)
+ end
+end
+
+def fun_l8_n318(x)
+ if (x < 1)
+ fun_l9_n613(x)
+ else
+ fun_l9_n959(x)
+ end
+end
+
+def fun_l8_n319(x)
+ if (x < 1)
+ fun_l9_n978(x)
+ else
+ fun_l9_n596(x)
+ end
+end
+
+def fun_l8_n320(x)
+ if (x < 1)
+ fun_l9_n542(x)
+ else
+ fun_l9_n527(x)
+ end
+end
+
+def fun_l8_n321(x)
+ if (x < 1)
+ fun_l9_n877(x)
+ else
+ fun_l9_n108(x)
+ end
+end
+
+def fun_l8_n322(x)
+ if (x < 1)
+ fun_l9_n817(x)
+ else
+ fun_l9_n476(x)
+ end
+end
+
+def fun_l8_n323(x)
+ if (x < 1)
+ fun_l9_n765(x)
+ else
+ fun_l9_n672(x)
+ end
+end
+
+def fun_l8_n324(x)
+ if (x < 1)
+ fun_l9_n863(x)
+ else
+ fun_l9_n605(x)
+ end
+end
+
+def fun_l8_n325(x)
+ if (x < 1)
+ fun_l9_n566(x)
+ else
+ fun_l9_n592(x)
+ end
+end
+
+def fun_l8_n326(x)
+ if (x < 1)
+ fun_l9_n607(x)
+ else
+ fun_l9_n968(x)
+ end
+end
+
+def fun_l8_n327(x)
+ if (x < 1)
+ fun_l9_n36(x)
+ else
+ fun_l9_n380(x)
+ end
+end
+
+def fun_l8_n328(x)
+ if (x < 1)
+ fun_l9_n597(x)
+ else
+ fun_l9_n664(x)
+ end
+end
+
+def fun_l8_n329(x)
+ if (x < 1)
+ fun_l9_n195(x)
+ else
+ fun_l9_n268(x)
+ end
+end
+
+def fun_l8_n330(x)
+ if (x < 1)
+ fun_l9_n419(x)
+ else
+ fun_l9_n715(x)
+ end
+end
+
+def fun_l8_n331(x)
+ if (x < 1)
+ fun_l9_n451(x)
+ else
+ fun_l9_n518(x)
+ end
+end
+
+def fun_l8_n332(x)
+ if (x < 1)
+ fun_l9_n106(x)
+ else
+ fun_l9_n236(x)
+ end
+end
+
+def fun_l8_n333(x)
+ if (x < 1)
+ fun_l9_n611(x)
+ else
+ fun_l9_n825(x)
+ end
+end
+
+def fun_l8_n334(x)
+ if (x < 1)
+ fun_l9_n394(x)
+ else
+ fun_l9_n34(x)
+ end
+end
+
+def fun_l8_n335(x)
+ if (x < 1)
+ fun_l9_n63(x)
+ else
+ fun_l9_n58(x)
+ end
+end
+
+def fun_l8_n336(x)
+ if (x < 1)
+ fun_l9_n475(x)
+ else
+ fun_l9_n455(x)
+ end
+end
+
+def fun_l8_n337(x)
+ if (x < 1)
+ fun_l9_n836(x)
+ else
+ fun_l9_n318(x)
+ end
+end
+
+def fun_l8_n338(x)
+ if (x < 1)
+ fun_l9_n844(x)
+ else
+ fun_l9_n21(x)
+ end
+end
+
+def fun_l8_n339(x)
+ if (x < 1)
+ fun_l9_n628(x)
+ else
+ fun_l9_n721(x)
+ end
+end
+
+def fun_l8_n340(x)
+ if (x < 1)
+ fun_l9_n966(x)
+ else
+ fun_l9_n833(x)
+ end
+end
+
+def fun_l8_n341(x)
+ if (x < 1)
+ fun_l9_n267(x)
+ else
+ fun_l9_n28(x)
+ end
+end
+
+def fun_l8_n342(x)
+ if (x < 1)
+ fun_l9_n204(x)
+ else
+ fun_l9_n838(x)
+ end
+end
+
+def fun_l8_n343(x)
+ if (x < 1)
+ fun_l9_n151(x)
+ else
+ fun_l9_n382(x)
+ end
+end
+
+def fun_l8_n344(x)
+ if (x < 1)
+ fun_l9_n409(x)
+ else
+ fun_l9_n591(x)
+ end
+end
+
+def fun_l8_n345(x)
+ if (x < 1)
+ fun_l9_n680(x)
+ else
+ fun_l9_n912(x)
+ end
+end
+
+def fun_l8_n346(x)
+ if (x < 1)
+ fun_l9_n150(x)
+ else
+ fun_l9_n34(x)
+ end
+end
+
+def fun_l8_n347(x)
+ if (x < 1)
+ fun_l9_n538(x)
+ else
+ fun_l9_n441(x)
+ end
+end
+
+def fun_l8_n348(x)
+ if (x < 1)
+ fun_l9_n707(x)
+ else
+ fun_l9_n199(x)
+ end
+end
+
+def fun_l8_n349(x)
+ if (x < 1)
+ fun_l9_n245(x)
+ else
+ fun_l9_n809(x)
+ end
+end
+
+def fun_l8_n350(x)
+ if (x < 1)
+ fun_l9_n16(x)
+ else
+ fun_l9_n565(x)
+ end
+end
+
+def fun_l8_n351(x)
+ if (x < 1)
+ fun_l9_n857(x)
+ else
+ fun_l9_n37(x)
+ end
+end
+
+def fun_l8_n352(x)
+ if (x < 1)
+ fun_l9_n816(x)
+ else
+ fun_l9_n941(x)
+ end
+end
+
+def fun_l8_n353(x)
+ if (x < 1)
+ fun_l9_n605(x)
+ else
+ fun_l9_n476(x)
+ end
+end
+
+def fun_l8_n354(x)
+ if (x < 1)
+ fun_l9_n641(x)
+ else
+ fun_l9_n319(x)
+ end
+end
+
+def fun_l8_n355(x)
+ if (x < 1)
+ fun_l9_n133(x)
+ else
+ fun_l9_n676(x)
+ end
+end
+
+def fun_l8_n356(x)
+ if (x < 1)
+ fun_l9_n826(x)
+ else
+ fun_l9_n926(x)
+ end
+end
+
+def fun_l8_n357(x)
+ if (x < 1)
+ fun_l9_n17(x)
+ else
+ fun_l9_n486(x)
+ end
+end
+
+def fun_l8_n358(x)
+ if (x < 1)
+ fun_l9_n90(x)
+ else
+ fun_l9_n744(x)
+ end
+end
+
+def fun_l8_n359(x)
+ if (x < 1)
+ fun_l9_n745(x)
+ else
+ fun_l9_n158(x)
+ end
+end
+
+def fun_l8_n360(x)
+ if (x < 1)
+ fun_l9_n261(x)
+ else
+ fun_l9_n878(x)
+ end
+end
+
+def fun_l8_n361(x)
+ if (x < 1)
+ fun_l9_n832(x)
+ else
+ fun_l9_n905(x)
+ end
+end
+
+def fun_l8_n362(x)
+ if (x < 1)
+ fun_l9_n879(x)
+ else
+ fun_l9_n475(x)
+ end
+end
+
+def fun_l8_n363(x)
+ if (x < 1)
+ fun_l9_n586(x)
+ else
+ fun_l9_n272(x)
+ end
+end
+
+def fun_l8_n364(x)
+ if (x < 1)
+ fun_l9_n469(x)
+ else
+ fun_l9_n918(x)
+ end
+end
+
+def fun_l8_n365(x)
+ if (x < 1)
+ fun_l9_n568(x)
+ else
+ fun_l9_n777(x)
+ end
+end
+
+def fun_l8_n366(x)
+ if (x < 1)
+ fun_l9_n662(x)
+ else
+ fun_l9_n957(x)
+ end
+end
+
+def fun_l8_n367(x)
+ if (x < 1)
+ fun_l9_n26(x)
+ else
+ fun_l9_n593(x)
+ end
+end
+
+def fun_l8_n368(x)
+ if (x < 1)
+ fun_l9_n766(x)
+ else
+ fun_l9_n598(x)
+ end
+end
+
+def fun_l8_n369(x)
+ if (x < 1)
+ fun_l9_n362(x)
+ else
+ fun_l9_n491(x)
+ end
+end
+
+def fun_l8_n370(x)
+ if (x < 1)
+ fun_l9_n205(x)
+ else
+ fun_l9_n585(x)
+ end
+end
+
+def fun_l8_n371(x)
+ if (x < 1)
+ fun_l9_n301(x)
+ else
+ fun_l9_n796(x)
+ end
+end
+
+def fun_l8_n372(x)
+ if (x < 1)
+ fun_l9_n527(x)
+ else
+ fun_l9_n31(x)
+ end
+end
+
+def fun_l8_n373(x)
+ if (x < 1)
+ fun_l9_n461(x)
+ else
+ fun_l9_n42(x)
+ end
+end
+
+def fun_l8_n374(x)
+ if (x < 1)
+ fun_l9_n288(x)
+ else
+ fun_l9_n534(x)
+ end
+end
+
+def fun_l8_n375(x)
+ if (x < 1)
+ fun_l9_n558(x)
+ else
+ fun_l9_n403(x)
+ end
+end
+
+def fun_l8_n376(x)
+ if (x < 1)
+ fun_l9_n835(x)
+ else
+ fun_l9_n390(x)
+ end
+end
+
+def fun_l8_n377(x)
+ if (x < 1)
+ fun_l9_n658(x)
+ else
+ fun_l9_n768(x)
+ end
+end
+
+def fun_l8_n378(x)
+ if (x < 1)
+ fun_l9_n856(x)
+ else
+ fun_l9_n299(x)
+ end
+end
+
+def fun_l8_n379(x)
+ if (x < 1)
+ fun_l9_n196(x)
+ else
+ fun_l9_n540(x)
+ end
+end
+
+def fun_l8_n380(x)
+ if (x < 1)
+ fun_l9_n70(x)
+ else
+ fun_l9_n627(x)
+ end
+end
+
+def fun_l8_n381(x)
+ if (x < 1)
+ fun_l9_n28(x)
+ else
+ fun_l9_n377(x)
+ end
+end
+
+def fun_l8_n382(x)
+ if (x < 1)
+ fun_l9_n955(x)
+ else
+ fun_l9_n124(x)
+ end
+end
+
+def fun_l8_n383(x)
+ if (x < 1)
+ fun_l9_n16(x)
+ else
+ fun_l9_n783(x)
+ end
+end
+
+def fun_l8_n384(x)
+ if (x < 1)
+ fun_l9_n843(x)
+ else
+ fun_l9_n801(x)
+ end
+end
+
+def fun_l8_n385(x)
+ if (x < 1)
+ fun_l9_n876(x)
+ else
+ fun_l9_n152(x)
+ end
+end
+
+def fun_l8_n386(x)
+ if (x < 1)
+ fun_l9_n6(x)
+ else
+ fun_l9_n432(x)
+ end
+end
+
+def fun_l8_n387(x)
+ if (x < 1)
+ fun_l9_n636(x)
+ else
+ fun_l9_n325(x)
+ end
+end
+
+def fun_l8_n388(x)
+ if (x < 1)
+ fun_l9_n267(x)
+ else
+ fun_l9_n716(x)
+ end
+end
+
+def fun_l8_n389(x)
+ if (x < 1)
+ fun_l9_n898(x)
+ else
+ fun_l9_n776(x)
+ end
+end
+
+def fun_l8_n390(x)
+ if (x < 1)
+ fun_l9_n481(x)
+ else
+ fun_l9_n878(x)
+ end
+end
+
+def fun_l8_n391(x)
+ if (x < 1)
+ fun_l9_n398(x)
+ else
+ fun_l9_n159(x)
+ end
+end
+
+def fun_l8_n392(x)
+ if (x < 1)
+ fun_l9_n889(x)
+ else
+ fun_l9_n517(x)
+ end
+end
+
+def fun_l8_n393(x)
+ if (x < 1)
+ fun_l9_n460(x)
+ else
+ fun_l9_n440(x)
+ end
+end
+
+def fun_l8_n394(x)
+ if (x < 1)
+ fun_l9_n576(x)
+ else
+ fun_l9_n421(x)
+ end
+end
+
+def fun_l8_n395(x)
+ if (x < 1)
+ fun_l9_n310(x)
+ else
+ fun_l9_n646(x)
+ end
+end
+
+def fun_l8_n396(x)
+ if (x < 1)
+ fun_l9_n914(x)
+ else
+ fun_l9_n414(x)
+ end
+end
+
+def fun_l8_n397(x)
+ if (x < 1)
+ fun_l9_n330(x)
+ else
+ fun_l9_n520(x)
+ end
+end
+
+def fun_l8_n398(x)
+ if (x < 1)
+ fun_l9_n175(x)
+ else
+ fun_l9_n975(x)
+ end
+end
+
+def fun_l8_n399(x)
+ if (x < 1)
+ fun_l9_n443(x)
+ else
+ fun_l9_n964(x)
+ end
+end
+
+def fun_l8_n400(x)
+ if (x < 1)
+ fun_l9_n810(x)
+ else
+ fun_l9_n102(x)
+ end
+end
+
+def fun_l8_n401(x)
+ if (x < 1)
+ fun_l9_n352(x)
+ else
+ fun_l9_n295(x)
+ end
+end
+
+def fun_l8_n402(x)
+ if (x < 1)
+ fun_l9_n980(x)
+ else
+ fun_l9_n974(x)
+ end
+end
+
+def fun_l8_n403(x)
+ if (x < 1)
+ fun_l9_n169(x)
+ else
+ fun_l9_n877(x)
+ end
+end
+
+def fun_l8_n404(x)
+ if (x < 1)
+ fun_l9_n333(x)
+ else
+ fun_l9_n306(x)
+ end
+end
+
+def fun_l8_n405(x)
+ if (x < 1)
+ fun_l9_n183(x)
+ else
+ fun_l9_n704(x)
+ end
+end
+
+def fun_l8_n406(x)
+ if (x < 1)
+ fun_l9_n532(x)
+ else
+ fun_l9_n684(x)
+ end
+end
+
+def fun_l8_n407(x)
+ if (x < 1)
+ fun_l9_n526(x)
+ else
+ fun_l9_n287(x)
+ end
+end
+
+def fun_l8_n408(x)
+ if (x < 1)
+ fun_l9_n377(x)
+ else
+ fun_l9_n351(x)
+ end
+end
+
+def fun_l8_n409(x)
+ if (x < 1)
+ fun_l9_n770(x)
+ else
+ fun_l9_n738(x)
+ end
+end
+
+def fun_l8_n410(x)
+ if (x < 1)
+ fun_l9_n61(x)
+ else
+ fun_l9_n499(x)
+ end
+end
+
+def fun_l8_n411(x)
+ if (x < 1)
+ fun_l9_n156(x)
+ else
+ fun_l9_n247(x)
+ end
+end
+
+def fun_l8_n412(x)
+ if (x < 1)
+ fun_l9_n431(x)
+ else
+ fun_l9_n636(x)
+ end
+end
+
+def fun_l8_n413(x)
+ if (x < 1)
+ fun_l9_n540(x)
+ else
+ fun_l9_n329(x)
+ end
+end
+
+def fun_l8_n414(x)
+ if (x < 1)
+ fun_l9_n49(x)
+ else
+ fun_l9_n979(x)
+ end
+end
+
+def fun_l8_n415(x)
+ if (x < 1)
+ fun_l9_n94(x)
+ else
+ fun_l9_n487(x)
+ end
+end
+
+def fun_l8_n416(x)
+ if (x < 1)
+ fun_l9_n679(x)
+ else
+ fun_l9_n644(x)
+ end
+end
+
+def fun_l8_n417(x)
+ if (x < 1)
+ fun_l9_n907(x)
+ else
+ fun_l9_n324(x)
+ end
+end
+
+def fun_l8_n418(x)
+ if (x < 1)
+ fun_l9_n426(x)
+ else
+ fun_l9_n495(x)
+ end
+end
+
+def fun_l8_n419(x)
+ if (x < 1)
+ fun_l9_n273(x)
+ else
+ fun_l9_n838(x)
+ end
+end
+
+def fun_l8_n420(x)
+ if (x < 1)
+ fun_l9_n631(x)
+ else
+ fun_l9_n205(x)
+ end
+end
+
+def fun_l8_n421(x)
+ if (x < 1)
+ fun_l9_n484(x)
+ else
+ fun_l9_n80(x)
+ end
+end
+
+def fun_l8_n422(x)
+ if (x < 1)
+ fun_l9_n908(x)
+ else
+ fun_l9_n514(x)
+ end
+end
+
+def fun_l8_n423(x)
+ if (x < 1)
+ fun_l9_n265(x)
+ else
+ fun_l9_n190(x)
+ end
+end
+
+def fun_l8_n424(x)
+ if (x < 1)
+ fun_l9_n463(x)
+ else
+ fun_l9_n714(x)
+ end
+end
+
+def fun_l8_n425(x)
+ if (x < 1)
+ fun_l9_n780(x)
+ else
+ fun_l9_n444(x)
+ end
+end
+
+def fun_l8_n426(x)
+ if (x < 1)
+ fun_l9_n418(x)
+ else
+ fun_l9_n518(x)
+ end
+end
+
+def fun_l8_n427(x)
+ if (x < 1)
+ fun_l9_n912(x)
+ else
+ fun_l9_n27(x)
+ end
+end
+
+def fun_l8_n428(x)
+ if (x < 1)
+ fun_l9_n157(x)
+ else
+ fun_l9_n547(x)
+ end
+end
+
+def fun_l8_n429(x)
+ if (x < 1)
+ fun_l9_n760(x)
+ else
+ fun_l9_n466(x)
+ end
+end
+
+def fun_l8_n430(x)
+ if (x < 1)
+ fun_l9_n726(x)
+ else
+ fun_l9_n609(x)
+ end
+end
+
+def fun_l8_n431(x)
+ if (x < 1)
+ fun_l9_n206(x)
+ else
+ fun_l9_n65(x)
+ end
+end
+
+def fun_l8_n432(x)
+ if (x < 1)
+ fun_l9_n396(x)
+ else
+ fun_l9_n325(x)
+ end
+end
+
+def fun_l8_n433(x)
+ if (x < 1)
+ fun_l9_n100(x)
+ else
+ fun_l9_n519(x)
+ end
+end
+
+def fun_l8_n434(x)
+ if (x < 1)
+ fun_l9_n923(x)
+ else
+ fun_l9_n387(x)
+ end
+end
+
+def fun_l8_n435(x)
+ if (x < 1)
+ fun_l9_n334(x)
+ else
+ fun_l9_n866(x)
+ end
+end
+
+def fun_l8_n436(x)
+ if (x < 1)
+ fun_l9_n896(x)
+ else
+ fun_l9_n780(x)
+ end
+end
+
+def fun_l8_n437(x)
+ if (x < 1)
+ fun_l9_n328(x)
+ else
+ fun_l9_n776(x)
+ end
+end
+
+def fun_l8_n438(x)
+ if (x < 1)
+ fun_l9_n414(x)
+ else
+ fun_l9_n884(x)
+ end
+end
+
+def fun_l8_n439(x)
+ if (x < 1)
+ fun_l9_n528(x)
+ else
+ fun_l9_n419(x)
+ end
+end
+
+def fun_l8_n440(x)
+ if (x < 1)
+ fun_l9_n192(x)
+ else
+ fun_l9_n973(x)
+ end
+end
+
+def fun_l8_n441(x)
+ if (x < 1)
+ fun_l9_n679(x)
+ else
+ fun_l9_n135(x)
+ end
+end
+
+def fun_l8_n442(x)
+ if (x < 1)
+ fun_l9_n294(x)
+ else
+ fun_l9_n138(x)
+ end
+end
+
+def fun_l8_n443(x)
+ if (x < 1)
+ fun_l9_n784(x)
+ else
+ fun_l9_n940(x)
+ end
+end
+
+def fun_l8_n444(x)
+ if (x < 1)
+ fun_l9_n834(x)
+ else
+ fun_l9_n127(x)
+ end
+end
+
+def fun_l8_n445(x)
+ if (x < 1)
+ fun_l9_n217(x)
+ else
+ fun_l9_n788(x)
+ end
+end
+
+def fun_l8_n446(x)
+ if (x < 1)
+ fun_l9_n173(x)
+ else
+ fun_l9_n49(x)
+ end
+end
+
+def fun_l8_n447(x)
+ if (x < 1)
+ fun_l9_n493(x)
+ else
+ fun_l9_n384(x)
+ end
+end
+
+def fun_l8_n448(x)
+ if (x < 1)
+ fun_l9_n770(x)
+ else
+ fun_l9_n761(x)
+ end
+end
+
+def fun_l8_n449(x)
+ if (x < 1)
+ fun_l9_n633(x)
+ else
+ fun_l9_n555(x)
+ end
+end
+
+def fun_l8_n450(x)
+ if (x < 1)
+ fun_l9_n25(x)
+ else
+ fun_l9_n714(x)
+ end
+end
+
+def fun_l8_n451(x)
+ if (x < 1)
+ fun_l9_n960(x)
+ else
+ fun_l9_n371(x)
+ end
+end
+
+def fun_l8_n452(x)
+ if (x < 1)
+ fun_l9_n733(x)
+ else
+ fun_l9_n996(x)
+ end
+end
+
+def fun_l8_n453(x)
+ if (x < 1)
+ fun_l9_n628(x)
+ else
+ fun_l9_n512(x)
+ end
+end
+
+def fun_l8_n454(x)
+ if (x < 1)
+ fun_l9_n406(x)
+ else
+ fun_l9_n671(x)
+ end
+end
+
+def fun_l8_n455(x)
+ if (x < 1)
+ fun_l9_n47(x)
+ else
+ fun_l9_n102(x)
+ end
+end
+
+def fun_l8_n456(x)
+ if (x < 1)
+ fun_l9_n85(x)
+ else
+ fun_l9_n591(x)
+ end
+end
+
+def fun_l8_n457(x)
+ if (x < 1)
+ fun_l9_n234(x)
+ else
+ fun_l9_n209(x)
+ end
+end
+
+def fun_l8_n458(x)
+ if (x < 1)
+ fun_l9_n186(x)
+ else
+ fun_l9_n928(x)
+ end
+end
+
+def fun_l8_n459(x)
+ if (x < 1)
+ fun_l9_n36(x)
+ else
+ fun_l9_n783(x)
+ end
+end
+
+def fun_l8_n460(x)
+ if (x < 1)
+ fun_l9_n775(x)
+ else
+ fun_l9_n641(x)
+ end
+end
+
+def fun_l8_n461(x)
+ if (x < 1)
+ fun_l9_n426(x)
+ else
+ fun_l9_n740(x)
+ end
+end
+
+def fun_l8_n462(x)
+ if (x < 1)
+ fun_l9_n770(x)
+ else
+ fun_l9_n113(x)
+ end
+end
+
+def fun_l8_n463(x)
+ if (x < 1)
+ fun_l9_n94(x)
+ else
+ fun_l9_n574(x)
+ end
+end
+
+def fun_l8_n464(x)
+ if (x < 1)
+ fun_l9_n457(x)
+ else
+ fun_l9_n776(x)
+ end
+end
+
+def fun_l8_n465(x)
+ if (x < 1)
+ fun_l9_n252(x)
+ else
+ fun_l9_n182(x)
+ end
+end
+
+def fun_l8_n466(x)
+ if (x < 1)
+ fun_l9_n157(x)
+ else
+ fun_l9_n849(x)
+ end
+end
+
+def fun_l8_n467(x)
+ if (x < 1)
+ fun_l9_n393(x)
+ else
+ fun_l9_n437(x)
+ end
+end
+
+def fun_l8_n468(x)
+ if (x < 1)
+ fun_l9_n269(x)
+ else
+ fun_l9_n381(x)
+ end
+end
+
+def fun_l8_n469(x)
+ if (x < 1)
+ fun_l9_n97(x)
+ else
+ fun_l9_n184(x)
+ end
+end
+
+def fun_l8_n470(x)
+ if (x < 1)
+ fun_l9_n157(x)
+ else
+ fun_l9_n621(x)
+ end
+end
+
+def fun_l8_n471(x)
+ if (x < 1)
+ fun_l9_n627(x)
+ else
+ fun_l9_n793(x)
+ end
+end
+
+def fun_l8_n472(x)
+ if (x < 1)
+ fun_l9_n117(x)
+ else
+ fun_l9_n318(x)
+ end
+end
+
+def fun_l8_n473(x)
+ if (x < 1)
+ fun_l9_n238(x)
+ else
+ fun_l9_n559(x)
+ end
+end
+
+def fun_l8_n474(x)
+ if (x < 1)
+ fun_l9_n81(x)
+ else
+ fun_l9_n355(x)
+ end
+end
+
+def fun_l8_n475(x)
+ if (x < 1)
+ fun_l9_n889(x)
+ else
+ fun_l9_n940(x)
+ end
+end
+
+def fun_l8_n476(x)
+ if (x < 1)
+ fun_l9_n358(x)
+ else
+ fun_l9_n52(x)
+ end
+end
+
+def fun_l8_n477(x)
+ if (x < 1)
+ fun_l9_n144(x)
+ else
+ fun_l9_n575(x)
+ end
+end
+
+def fun_l8_n478(x)
+ if (x < 1)
+ fun_l9_n975(x)
+ else
+ fun_l9_n740(x)
+ end
+end
+
+def fun_l8_n479(x)
+ if (x < 1)
+ fun_l9_n552(x)
+ else
+ fun_l9_n169(x)
+ end
+end
+
+def fun_l8_n480(x)
+ if (x < 1)
+ fun_l9_n854(x)
+ else
+ fun_l9_n524(x)
+ end
+end
+
+def fun_l8_n481(x)
+ if (x < 1)
+ fun_l9_n461(x)
+ else
+ fun_l9_n65(x)
+ end
+end
+
+def fun_l8_n482(x)
+ if (x < 1)
+ fun_l9_n809(x)
+ else
+ fun_l9_n844(x)
+ end
+end
+
+def fun_l8_n483(x)
+ if (x < 1)
+ fun_l9_n741(x)
+ else
+ fun_l9_n327(x)
+ end
+end
+
+def fun_l8_n484(x)
+ if (x < 1)
+ fun_l9_n560(x)
+ else
+ fun_l9_n385(x)
+ end
+end
+
+def fun_l8_n485(x)
+ if (x < 1)
+ fun_l9_n798(x)
+ else
+ fun_l9_n154(x)
+ end
+end
+
+def fun_l8_n486(x)
+ if (x < 1)
+ fun_l9_n892(x)
+ else
+ fun_l9_n367(x)
+ end
+end
+
+def fun_l8_n487(x)
+ if (x < 1)
+ fun_l9_n423(x)
+ else
+ fun_l9_n723(x)
+ end
+end
+
+def fun_l8_n488(x)
+ if (x < 1)
+ fun_l9_n618(x)
+ else
+ fun_l9_n649(x)
+ end
+end
+
+def fun_l8_n489(x)
+ if (x < 1)
+ fun_l9_n261(x)
+ else
+ fun_l9_n495(x)
+ end
+end
+
+def fun_l8_n490(x)
+ if (x < 1)
+ fun_l9_n566(x)
+ else
+ fun_l9_n405(x)
+ end
+end
+
+def fun_l8_n491(x)
+ if (x < 1)
+ fun_l9_n718(x)
+ else
+ fun_l9_n674(x)
+ end
+end
+
+def fun_l8_n492(x)
+ if (x < 1)
+ fun_l9_n487(x)
+ else
+ fun_l9_n95(x)
+ end
+end
+
+def fun_l8_n493(x)
+ if (x < 1)
+ fun_l9_n473(x)
+ else
+ fun_l9_n722(x)
+ end
+end
+
+def fun_l8_n494(x)
+ if (x < 1)
+ fun_l9_n460(x)
+ else
+ fun_l9_n157(x)
+ end
+end
+
+def fun_l8_n495(x)
+ if (x < 1)
+ fun_l9_n812(x)
+ else
+ fun_l9_n807(x)
+ end
+end
+
+def fun_l8_n496(x)
+ if (x < 1)
+ fun_l9_n609(x)
+ else
+ fun_l9_n697(x)
+ end
+end
+
+def fun_l8_n497(x)
+ if (x < 1)
+ fun_l9_n894(x)
+ else
+ fun_l9_n580(x)
+ end
+end
+
+def fun_l8_n498(x)
+ if (x < 1)
+ fun_l9_n642(x)
+ else
+ fun_l9_n13(x)
+ end
+end
+
+def fun_l8_n499(x)
+ if (x < 1)
+ fun_l9_n961(x)
+ else
+ fun_l9_n669(x)
+ end
+end
+
+def fun_l8_n500(x)
+ if (x < 1)
+ fun_l9_n587(x)
+ else
+ fun_l9_n828(x)
+ end
+end
+
+def fun_l8_n501(x)
+ if (x < 1)
+ fun_l9_n30(x)
+ else
+ fun_l9_n966(x)
+ end
+end
+
+def fun_l8_n502(x)
+ if (x < 1)
+ fun_l9_n436(x)
+ else
+ fun_l9_n170(x)
+ end
+end
+
+def fun_l8_n503(x)
+ if (x < 1)
+ fun_l9_n20(x)
+ else
+ fun_l9_n927(x)
+ end
+end
+
+def fun_l8_n504(x)
+ if (x < 1)
+ fun_l9_n326(x)
+ else
+ fun_l9_n223(x)
+ end
+end
+
+def fun_l8_n505(x)
+ if (x < 1)
+ fun_l9_n911(x)
+ else
+ fun_l9_n746(x)
+ end
+end
+
+def fun_l8_n506(x)
+ if (x < 1)
+ fun_l9_n333(x)
+ else
+ fun_l9_n773(x)
+ end
+end
+
+def fun_l8_n507(x)
+ if (x < 1)
+ fun_l9_n514(x)
+ else
+ fun_l9_n882(x)
+ end
+end
+
+def fun_l8_n508(x)
+ if (x < 1)
+ fun_l9_n918(x)
+ else
+ fun_l9_n713(x)
+ end
+end
+
+def fun_l8_n509(x)
+ if (x < 1)
+ fun_l9_n694(x)
+ else
+ fun_l9_n950(x)
+ end
+end
+
+def fun_l8_n510(x)
+ if (x < 1)
+ fun_l9_n77(x)
+ else
+ fun_l9_n65(x)
+ end
+end
+
+def fun_l8_n511(x)
+ if (x < 1)
+ fun_l9_n506(x)
+ else
+ fun_l9_n144(x)
+ end
+end
+
+def fun_l8_n512(x)
+ if (x < 1)
+ fun_l9_n69(x)
+ else
+ fun_l9_n308(x)
+ end
+end
+
+def fun_l8_n513(x)
+ if (x < 1)
+ fun_l9_n377(x)
+ else
+ fun_l9_n531(x)
+ end
+end
+
+def fun_l8_n514(x)
+ if (x < 1)
+ fun_l9_n342(x)
+ else
+ fun_l9_n265(x)
+ end
+end
+
+def fun_l8_n515(x)
+ if (x < 1)
+ fun_l9_n453(x)
+ else
+ fun_l9_n227(x)
+ end
+end
+
+def fun_l8_n516(x)
+ if (x < 1)
+ fun_l9_n396(x)
+ else
+ fun_l9_n130(x)
+ end
+end
+
+def fun_l8_n517(x)
+ if (x < 1)
+ fun_l9_n715(x)
+ else
+ fun_l9_n953(x)
+ end
+end
+
+def fun_l8_n518(x)
+ if (x < 1)
+ fun_l9_n326(x)
+ else
+ fun_l9_n949(x)
+ end
+end
+
+def fun_l8_n519(x)
+ if (x < 1)
+ fun_l9_n535(x)
+ else
+ fun_l9_n41(x)
+ end
+end
+
+def fun_l8_n520(x)
+ if (x < 1)
+ fun_l9_n985(x)
+ else
+ fun_l9_n942(x)
+ end
+end
+
+def fun_l8_n521(x)
+ if (x < 1)
+ fun_l9_n347(x)
+ else
+ fun_l9_n263(x)
+ end
+end
+
+def fun_l8_n522(x)
+ if (x < 1)
+ fun_l9_n532(x)
+ else
+ fun_l9_n378(x)
+ end
+end
+
+def fun_l8_n523(x)
+ if (x < 1)
+ fun_l9_n362(x)
+ else
+ fun_l9_n630(x)
+ end
+end
+
+def fun_l8_n524(x)
+ if (x < 1)
+ fun_l9_n382(x)
+ else
+ fun_l9_n256(x)
+ end
+end
+
+def fun_l8_n525(x)
+ if (x < 1)
+ fun_l9_n444(x)
+ else
+ fun_l9_n756(x)
+ end
+end
+
+def fun_l8_n526(x)
+ if (x < 1)
+ fun_l9_n5(x)
+ else
+ fun_l9_n754(x)
+ end
+end
+
+def fun_l8_n527(x)
+ if (x < 1)
+ fun_l9_n157(x)
+ else
+ fun_l9_n279(x)
+ end
+end
+
+def fun_l8_n528(x)
+ if (x < 1)
+ fun_l9_n110(x)
+ else
+ fun_l9_n246(x)
+ end
+end
+
+def fun_l8_n529(x)
+ if (x < 1)
+ fun_l9_n312(x)
+ else
+ fun_l9_n890(x)
+ end
+end
+
+def fun_l8_n530(x)
+ if (x < 1)
+ fun_l9_n624(x)
+ else
+ fun_l9_n548(x)
+ end
+end
+
+def fun_l8_n531(x)
+ if (x < 1)
+ fun_l9_n615(x)
+ else
+ fun_l9_n948(x)
+ end
+end
+
+def fun_l8_n532(x)
+ if (x < 1)
+ fun_l9_n519(x)
+ else
+ fun_l9_n583(x)
+ end
+end
+
+def fun_l8_n533(x)
+ if (x < 1)
+ fun_l9_n292(x)
+ else
+ fun_l9_n827(x)
+ end
+end
+
+def fun_l8_n534(x)
+ if (x < 1)
+ fun_l9_n893(x)
+ else
+ fun_l9_n877(x)
+ end
+end
+
+def fun_l8_n535(x)
+ if (x < 1)
+ fun_l9_n873(x)
+ else
+ fun_l9_n399(x)
+ end
+end
+
+def fun_l8_n536(x)
+ if (x < 1)
+ fun_l9_n497(x)
+ else
+ fun_l9_n507(x)
+ end
+end
+
+def fun_l8_n537(x)
+ if (x < 1)
+ fun_l9_n404(x)
+ else
+ fun_l9_n815(x)
+ end
+end
+
+def fun_l8_n538(x)
+ if (x < 1)
+ fun_l9_n258(x)
+ else
+ fun_l9_n810(x)
+ end
+end
+
+def fun_l8_n539(x)
+ if (x < 1)
+ fun_l9_n907(x)
+ else
+ fun_l9_n720(x)
+ end
+end
+
+def fun_l8_n540(x)
+ if (x < 1)
+ fun_l9_n752(x)
+ else
+ fun_l9_n597(x)
+ end
+end
+
+def fun_l8_n541(x)
+ if (x < 1)
+ fun_l9_n802(x)
+ else
+ fun_l9_n45(x)
+ end
+end
+
+def fun_l8_n542(x)
+ if (x < 1)
+ fun_l9_n635(x)
+ else
+ fun_l9_n470(x)
+ end
+end
+
+def fun_l8_n543(x)
+ if (x < 1)
+ fun_l9_n353(x)
+ else
+ fun_l9_n238(x)
+ end
+end
+
+def fun_l8_n544(x)
+ if (x < 1)
+ fun_l9_n656(x)
+ else
+ fun_l9_n569(x)
+ end
+end
+
+def fun_l8_n545(x)
+ if (x < 1)
+ fun_l9_n494(x)
+ else
+ fun_l9_n566(x)
+ end
+end
+
+def fun_l8_n546(x)
+ if (x < 1)
+ fun_l9_n65(x)
+ else
+ fun_l9_n896(x)
+ end
+end
+
+def fun_l8_n547(x)
+ if (x < 1)
+ fun_l9_n995(x)
+ else
+ fun_l9_n727(x)
+ end
+end
+
+def fun_l8_n548(x)
+ if (x < 1)
+ fun_l9_n562(x)
+ else
+ fun_l9_n759(x)
+ end
+end
+
+def fun_l8_n549(x)
+ if (x < 1)
+ fun_l9_n210(x)
+ else
+ fun_l9_n734(x)
+ end
+end
+
+def fun_l8_n550(x)
+ if (x < 1)
+ fun_l9_n482(x)
+ else
+ fun_l9_n11(x)
+ end
+end
+
+def fun_l8_n551(x)
+ if (x < 1)
+ fun_l9_n86(x)
+ else
+ fun_l9_n867(x)
+ end
+end
+
+def fun_l8_n552(x)
+ if (x < 1)
+ fun_l9_n647(x)
+ else
+ fun_l9_n293(x)
+ end
+end
+
+def fun_l8_n553(x)
+ if (x < 1)
+ fun_l9_n98(x)
+ else
+ fun_l9_n868(x)
+ end
+end
+
+def fun_l8_n554(x)
+ if (x < 1)
+ fun_l9_n380(x)
+ else
+ fun_l9_n2(x)
+ end
+end
+
+def fun_l8_n555(x)
+ if (x < 1)
+ fun_l9_n274(x)
+ else
+ fun_l9_n489(x)
+ end
+end
+
+def fun_l8_n556(x)
+ if (x < 1)
+ fun_l9_n623(x)
+ else
+ fun_l9_n848(x)
+ end
+end
+
+def fun_l8_n557(x)
+ if (x < 1)
+ fun_l9_n642(x)
+ else
+ fun_l9_n890(x)
+ end
+end
+
+def fun_l8_n558(x)
+ if (x < 1)
+ fun_l9_n247(x)
+ else
+ fun_l9_n65(x)
+ end
+end
+
+def fun_l8_n559(x)
+ if (x < 1)
+ fun_l9_n896(x)
+ else
+ fun_l9_n937(x)
+ end
+end
+
+def fun_l8_n560(x)
+ if (x < 1)
+ fun_l9_n592(x)
+ else
+ fun_l9_n211(x)
+ end
+end
+
+def fun_l8_n561(x)
+ if (x < 1)
+ fun_l9_n205(x)
+ else
+ fun_l9_n971(x)
+ end
+end
+
+def fun_l8_n562(x)
+ if (x < 1)
+ fun_l9_n663(x)
+ else
+ fun_l9_n147(x)
+ end
+end
+
+def fun_l8_n563(x)
+ if (x < 1)
+ fun_l9_n722(x)
+ else
+ fun_l9_n649(x)
+ end
+end
+
+def fun_l8_n564(x)
+ if (x < 1)
+ fun_l9_n605(x)
+ else
+ fun_l9_n58(x)
+ end
+end
+
+def fun_l8_n565(x)
+ if (x < 1)
+ fun_l9_n914(x)
+ else
+ fun_l9_n617(x)
+ end
+end
+
+def fun_l8_n566(x)
+ if (x < 1)
+ fun_l9_n772(x)
+ else
+ fun_l9_n428(x)
+ end
+end
+
+def fun_l8_n567(x)
+ if (x < 1)
+ fun_l9_n870(x)
+ else
+ fun_l9_n672(x)
+ end
+end
+
+def fun_l8_n568(x)
+ if (x < 1)
+ fun_l9_n946(x)
+ else
+ fun_l9_n465(x)
+ end
+end
+
+def fun_l8_n569(x)
+ if (x < 1)
+ fun_l9_n507(x)
+ else
+ fun_l9_n346(x)
+ end
+end
+
+def fun_l8_n570(x)
+ if (x < 1)
+ fun_l9_n157(x)
+ else
+ fun_l9_n70(x)
+ end
+end
+
+def fun_l8_n571(x)
+ if (x < 1)
+ fun_l9_n549(x)
+ else
+ fun_l9_n831(x)
+ end
+end
+
+def fun_l8_n572(x)
+ if (x < 1)
+ fun_l9_n463(x)
+ else
+ fun_l9_n843(x)
+ end
+end
+
+def fun_l8_n573(x)
+ if (x < 1)
+ fun_l9_n676(x)
+ else
+ fun_l9_n651(x)
+ end
+end
+
+def fun_l8_n574(x)
+ if (x < 1)
+ fun_l9_n648(x)
+ else
+ fun_l9_n562(x)
+ end
+end
+
+def fun_l8_n575(x)
+ if (x < 1)
+ fun_l9_n771(x)
+ else
+ fun_l9_n549(x)
+ end
+end
+
+def fun_l8_n576(x)
+ if (x < 1)
+ fun_l9_n899(x)
+ else
+ fun_l9_n436(x)
+ end
+end
+
+def fun_l8_n577(x)
+ if (x < 1)
+ fun_l9_n110(x)
+ else
+ fun_l9_n708(x)
+ end
+end
+
+def fun_l8_n578(x)
+ if (x < 1)
+ fun_l9_n49(x)
+ else
+ fun_l9_n559(x)
+ end
+end
+
+def fun_l8_n579(x)
+ if (x < 1)
+ fun_l9_n937(x)
+ else
+ fun_l9_n962(x)
+ end
+end
+
+def fun_l8_n580(x)
+ if (x < 1)
+ fun_l9_n970(x)
+ else
+ fun_l9_n203(x)
+ end
+end
+
+def fun_l8_n581(x)
+ if (x < 1)
+ fun_l9_n901(x)
+ else
+ fun_l9_n666(x)
+ end
+end
+
+def fun_l8_n582(x)
+ if (x < 1)
+ fun_l9_n79(x)
+ else
+ fun_l9_n260(x)
+ end
+end
+
+def fun_l8_n583(x)
+ if (x < 1)
+ fun_l9_n167(x)
+ else
+ fun_l9_n512(x)
+ end
+end
+
+def fun_l8_n584(x)
+ if (x < 1)
+ fun_l9_n750(x)
+ else
+ fun_l9_n406(x)
+ end
+end
+
+def fun_l8_n585(x)
+ if (x < 1)
+ fun_l9_n118(x)
+ else
+ fun_l9_n525(x)
+ end
+end
+
+def fun_l8_n586(x)
+ if (x < 1)
+ fun_l9_n573(x)
+ else
+ fun_l9_n657(x)
+ end
+end
+
+def fun_l8_n587(x)
+ if (x < 1)
+ fun_l9_n228(x)
+ else
+ fun_l9_n903(x)
+ end
+end
+
+def fun_l8_n588(x)
+ if (x < 1)
+ fun_l9_n971(x)
+ else
+ fun_l9_n608(x)
+ end
+end
+
+def fun_l8_n589(x)
+ if (x < 1)
+ fun_l9_n334(x)
+ else
+ fun_l9_n704(x)
+ end
+end
+
+def fun_l8_n590(x)
+ if (x < 1)
+ fun_l9_n398(x)
+ else
+ fun_l9_n500(x)
+ end
+end
+
+def fun_l8_n591(x)
+ if (x < 1)
+ fun_l9_n196(x)
+ else
+ fun_l9_n616(x)
+ end
+end
+
+def fun_l8_n592(x)
+ if (x < 1)
+ fun_l9_n756(x)
+ else
+ fun_l9_n655(x)
+ end
+end
+
+def fun_l8_n593(x)
+ if (x < 1)
+ fun_l9_n864(x)
+ else
+ fun_l9_n697(x)
+ end
+end
+
+def fun_l8_n594(x)
+ if (x < 1)
+ fun_l9_n35(x)
+ else
+ fun_l9_n554(x)
+ end
+end
+
+def fun_l8_n595(x)
+ if (x < 1)
+ fun_l9_n480(x)
+ else
+ fun_l9_n688(x)
+ end
+end
+
+def fun_l8_n596(x)
+ if (x < 1)
+ fun_l9_n846(x)
+ else
+ fun_l9_n403(x)
+ end
+end
+
+def fun_l8_n597(x)
+ if (x < 1)
+ fun_l9_n522(x)
+ else
+ fun_l9_n532(x)
+ end
+end
+
+def fun_l8_n598(x)
+ if (x < 1)
+ fun_l9_n800(x)
+ else
+ fun_l9_n531(x)
+ end
+end
+
+def fun_l8_n599(x)
+ if (x < 1)
+ fun_l9_n64(x)
+ else
+ fun_l9_n876(x)
+ end
+end
+
+def fun_l8_n600(x)
+ if (x < 1)
+ fun_l9_n614(x)
+ else
+ fun_l9_n660(x)
+ end
+end
+
+def fun_l8_n601(x)
+ if (x < 1)
+ fun_l9_n119(x)
+ else
+ fun_l9_n998(x)
+ end
+end
+
+def fun_l8_n602(x)
+ if (x < 1)
+ fun_l9_n549(x)
+ else
+ fun_l9_n911(x)
+ end
+end
+
+def fun_l8_n603(x)
+ if (x < 1)
+ fun_l9_n659(x)
+ else
+ fun_l9_n664(x)
+ end
+end
+
+def fun_l8_n604(x)
+ if (x < 1)
+ fun_l9_n570(x)
+ else
+ fun_l9_n960(x)
+ end
+end
+
+def fun_l8_n605(x)
+ if (x < 1)
+ fun_l9_n82(x)
+ else
+ fun_l9_n658(x)
+ end
+end
+
+def fun_l8_n606(x)
+ if (x < 1)
+ fun_l9_n379(x)
+ else
+ fun_l9_n881(x)
+ end
+end
+
+def fun_l8_n607(x)
+ if (x < 1)
+ fun_l9_n104(x)
+ else
+ fun_l9_n869(x)
+ end
+end
+
+def fun_l8_n608(x)
+ if (x < 1)
+ fun_l9_n874(x)
+ else
+ fun_l9_n63(x)
+ end
+end
+
+def fun_l8_n609(x)
+ if (x < 1)
+ fun_l9_n921(x)
+ else
+ fun_l9_n667(x)
+ end
+end
+
+def fun_l8_n610(x)
+ if (x < 1)
+ fun_l9_n1(x)
+ else
+ fun_l9_n524(x)
+ end
+end
+
+def fun_l8_n611(x)
+ if (x < 1)
+ fun_l9_n523(x)
+ else
+ fun_l9_n230(x)
+ end
+end
+
+def fun_l8_n612(x)
+ if (x < 1)
+ fun_l9_n914(x)
+ else
+ fun_l9_n129(x)
+ end
+end
+
+def fun_l8_n613(x)
+ if (x < 1)
+ fun_l9_n591(x)
+ else
+ fun_l9_n551(x)
+ end
+end
+
+def fun_l8_n614(x)
+ if (x < 1)
+ fun_l9_n860(x)
+ else
+ fun_l9_n358(x)
+ end
+end
+
+def fun_l8_n615(x)
+ if (x < 1)
+ fun_l9_n387(x)
+ else
+ fun_l9_n425(x)
+ end
+end
+
+def fun_l8_n616(x)
+ if (x < 1)
+ fun_l9_n426(x)
+ else
+ fun_l9_n449(x)
+ end
+end
+
+def fun_l8_n617(x)
+ if (x < 1)
+ fun_l9_n627(x)
+ else
+ fun_l9_n399(x)
+ end
+end
+
+def fun_l8_n618(x)
+ if (x < 1)
+ fun_l9_n244(x)
+ else
+ fun_l9_n24(x)
+ end
+end
+
+def fun_l8_n619(x)
+ if (x < 1)
+ fun_l9_n574(x)
+ else
+ fun_l9_n640(x)
+ end
+end
+
+def fun_l8_n620(x)
+ if (x < 1)
+ fun_l9_n20(x)
+ else
+ fun_l9_n6(x)
+ end
+end
+
+def fun_l8_n621(x)
+ if (x < 1)
+ fun_l9_n148(x)
+ else
+ fun_l9_n718(x)
+ end
+end
+
+def fun_l8_n622(x)
+ if (x < 1)
+ fun_l9_n151(x)
+ else
+ fun_l9_n56(x)
+ end
+end
+
+def fun_l8_n623(x)
+ if (x < 1)
+ fun_l9_n672(x)
+ else
+ fun_l9_n93(x)
+ end
+end
+
+def fun_l8_n624(x)
+ if (x < 1)
+ fun_l9_n948(x)
+ else
+ fun_l9_n530(x)
+ end
+end
+
+def fun_l8_n625(x)
+ if (x < 1)
+ fun_l9_n0(x)
+ else
+ fun_l9_n334(x)
+ end
+end
+
+def fun_l8_n626(x)
+ if (x < 1)
+ fun_l9_n736(x)
+ else
+ fun_l9_n922(x)
+ end
+end
+
+def fun_l8_n627(x)
+ if (x < 1)
+ fun_l9_n291(x)
+ else
+ fun_l9_n953(x)
+ end
+end
+
+def fun_l8_n628(x)
+ if (x < 1)
+ fun_l9_n493(x)
+ else
+ fun_l9_n4(x)
+ end
+end
+
+def fun_l8_n629(x)
+ if (x < 1)
+ fun_l9_n890(x)
+ else
+ fun_l9_n297(x)
+ end
+end
+
+def fun_l8_n630(x)
+ if (x < 1)
+ fun_l9_n860(x)
+ else
+ fun_l9_n74(x)
+ end
+end
+
+def fun_l8_n631(x)
+ if (x < 1)
+ fun_l9_n400(x)
+ else
+ fun_l9_n584(x)
+ end
+end
+
+def fun_l8_n632(x)
+ if (x < 1)
+ fun_l9_n714(x)
+ else
+ fun_l9_n200(x)
+ end
+end
+
+def fun_l8_n633(x)
+ if (x < 1)
+ fun_l9_n433(x)
+ else
+ fun_l9_n489(x)
+ end
+end
+
+def fun_l8_n634(x)
+ if (x < 1)
+ fun_l9_n974(x)
+ else
+ fun_l9_n25(x)
+ end
+end
+
+def fun_l8_n635(x)
+ if (x < 1)
+ fun_l9_n739(x)
+ else
+ fun_l9_n695(x)
+ end
+end
+
+def fun_l8_n636(x)
+ if (x < 1)
+ fun_l9_n855(x)
+ else
+ fun_l9_n898(x)
+ end
+end
+
+def fun_l8_n637(x)
+ if (x < 1)
+ fun_l9_n868(x)
+ else
+ fun_l9_n825(x)
+ end
+end
+
+def fun_l8_n638(x)
+ if (x < 1)
+ fun_l9_n537(x)
+ else
+ fun_l9_n417(x)
+ end
+end
+
+def fun_l8_n639(x)
+ if (x < 1)
+ fun_l9_n975(x)
+ else
+ fun_l9_n484(x)
+ end
+end
+
+def fun_l8_n640(x)
+ if (x < 1)
+ fun_l9_n228(x)
+ else
+ fun_l9_n964(x)
+ end
+end
+
+def fun_l8_n641(x)
+ if (x < 1)
+ fun_l9_n743(x)
+ else
+ fun_l9_n986(x)
+ end
+end
+
+def fun_l8_n642(x)
+ if (x < 1)
+ fun_l9_n763(x)
+ else
+ fun_l9_n747(x)
+ end
+end
+
+def fun_l8_n643(x)
+ if (x < 1)
+ fun_l9_n77(x)
+ else
+ fun_l9_n149(x)
+ end
+end
+
+def fun_l8_n644(x)
+ if (x < 1)
+ fun_l9_n393(x)
+ else
+ fun_l9_n694(x)
+ end
+end
+
+def fun_l8_n645(x)
+ if (x < 1)
+ fun_l9_n196(x)
+ else
+ fun_l9_n211(x)
+ end
+end
+
+def fun_l8_n646(x)
+ if (x < 1)
+ fun_l9_n94(x)
+ else
+ fun_l9_n649(x)
+ end
+end
+
+def fun_l8_n647(x)
+ if (x < 1)
+ fun_l9_n669(x)
+ else
+ fun_l9_n12(x)
+ end
+end
+
+def fun_l8_n648(x)
+ if (x < 1)
+ fun_l9_n175(x)
+ else
+ fun_l9_n388(x)
+ end
+end
+
+def fun_l8_n649(x)
+ if (x < 1)
+ fun_l9_n122(x)
+ else
+ fun_l9_n736(x)
+ end
+end
+
+def fun_l8_n650(x)
+ if (x < 1)
+ fun_l9_n817(x)
+ else
+ fun_l9_n274(x)
+ end
+end
+
+def fun_l8_n651(x)
+ if (x < 1)
+ fun_l9_n919(x)
+ else
+ fun_l9_n538(x)
+ end
+end
+
+def fun_l8_n652(x)
+ if (x < 1)
+ fun_l9_n171(x)
+ else
+ fun_l9_n895(x)
+ end
+end
+
+def fun_l8_n653(x)
+ if (x < 1)
+ fun_l9_n417(x)
+ else
+ fun_l9_n618(x)
+ end
+end
+
+def fun_l8_n654(x)
+ if (x < 1)
+ fun_l9_n709(x)
+ else
+ fun_l9_n892(x)
+ end
+end
+
+def fun_l8_n655(x)
+ if (x < 1)
+ fun_l9_n906(x)
+ else
+ fun_l9_n602(x)
+ end
+end
+
+def fun_l8_n656(x)
+ if (x < 1)
+ fun_l9_n769(x)
+ else
+ fun_l9_n554(x)
+ end
+end
+
+def fun_l8_n657(x)
+ if (x < 1)
+ fun_l9_n468(x)
+ else
+ fun_l9_n320(x)
+ end
+end
+
+def fun_l8_n658(x)
+ if (x < 1)
+ fun_l9_n38(x)
+ else
+ fun_l9_n947(x)
+ end
+end
+
+def fun_l8_n659(x)
+ if (x < 1)
+ fun_l9_n635(x)
+ else
+ fun_l9_n327(x)
+ end
+end
+
+def fun_l8_n660(x)
+ if (x < 1)
+ fun_l9_n452(x)
+ else
+ fun_l9_n313(x)
+ end
+end
+
+def fun_l8_n661(x)
+ if (x < 1)
+ fun_l9_n568(x)
+ else
+ fun_l9_n383(x)
+ end
+end
+
+def fun_l8_n662(x)
+ if (x < 1)
+ fun_l9_n795(x)
+ else
+ fun_l9_n680(x)
+ end
+end
+
+def fun_l8_n663(x)
+ if (x < 1)
+ fun_l9_n152(x)
+ else
+ fun_l9_n846(x)
+ end
+end
+
+def fun_l8_n664(x)
+ if (x < 1)
+ fun_l9_n585(x)
+ else
+ fun_l9_n670(x)
+ end
+end
+
+def fun_l8_n665(x)
+ if (x < 1)
+ fun_l9_n133(x)
+ else
+ fun_l9_n799(x)
+ end
+end
+
+def fun_l8_n666(x)
+ if (x < 1)
+ fun_l9_n699(x)
+ else
+ fun_l9_n311(x)
+ end
+end
+
+def fun_l8_n667(x)
+ if (x < 1)
+ fun_l9_n558(x)
+ else
+ fun_l9_n669(x)
+ end
+end
+
+def fun_l8_n668(x)
+ if (x < 1)
+ fun_l9_n825(x)
+ else
+ fun_l9_n534(x)
+ end
+end
+
+def fun_l8_n669(x)
+ if (x < 1)
+ fun_l9_n143(x)
+ else
+ fun_l9_n21(x)
+ end
+end
+
+def fun_l8_n670(x)
+ if (x < 1)
+ fun_l9_n827(x)
+ else
+ fun_l9_n679(x)
+ end
+end
+
+def fun_l8_n671(x)
+ if (x < 1)
+ fun_l9_n704(x)
+ else
+ fun_l9_n922(x)
+ end
+end
+
+def fun_l8_n672(x)
+ if (x < 1)
+ fun_l9_n776(x)
+ else
+ fun_l9_n867(x)
+ end
+end
+
+def fun_l8_n673(x)
+ if (x < 1)
+ fun_l9_n871(x)
+ else
+ fun_l9_n315(x)
+ end
+end
+
+def fun_l8_n674(x)
+ if (x < 1)
+ fun_l9_n860(x)
+ else
+ fun_l9_n945(x)
+ end
+end
+
+def fun_l8_n675(x)
+ if (x < 1)
+ fun_l9_n890(x)
+ else
+ fun_l9_n629(x)
+ end
+end
+
+def fun_l8_n676(x)
+ if (x < 1)
+ fun_l9_n91(x)
+ else
+ fun_l9_n35(x)
+ end
+end
+
+def fun_l8_n677(x)
+ if (x < 1)
+ fun_l9_n825(x)
+ else
+ fun_l9_n922(x)
+ end
+end
+
+def fun_l8_n678(x)
+ if (x < 1)
+ fun_l9_n457(x)
+ else
+ fun_l9_n156(x)
+ end
+end
+
+def fun_l8_n679(x)
+ if (x < 1)
+ fun_l9_n455(x)
+ else
+ fun_l9_n809(x)
+ end
+end
+
+def fun_l8_n680(x)
+ if (x < 1)
+ fun_l9_n213(x)
+ else
+ fun_l9_n944(x)
+ end
+end
+
+def fun_l8_n681(x)
+ if (x < 1)
+ fun_l9_n760(x)
+ else
+ fun_l9_n137(x)
+ end
+end
+
+def fun_l8_n682(x)
+ if (x < 1)
+ fun_l9_n998(x)
+ else
+ fun_l9_n703(x)
+ end
+end
+
+def fun_l8_n683(x)
+ if (x < 1)
+ fun_l9_n988(x)
+ else
+ fun_l9_n952(x)
+ end
+end
+
+def fun_l8_n684(x)
+ if (x < 1)
+ fun_l9_n583(x)
+ else
+ fun_l9_n890(x)
+ end
+end
+
+def fun_l8_n685(x)
+ if (x < 1)
+ fun_l9_n879(x)
+ else
+ fun_l9_n978(x)
+ end
+end
+
+def fun_l8_n686(x)
+ if (x < 1)
+ fun_l9_n6(x)
+ else
+ fun_l9_n978(x)
+ end
+end
+
+def fun_l8_n687(x)
+ if (x < 1)
+ fun_l9_n67(x)
+ else
+ fun_l9_n149(x)
+ end
+end
+
+def fun_l8_n688(x)
+ if (x < 1)
+ fun_l9_n386(x)
+ else
+ fun_l9_n293(x)
+ end
+end
+
+def fun_l8_n689(x)
+ if (x < 1)
+ fun_l9_n493(x)
+ else
+ fun_l9_n140(x)
+ end
+end
+
+def fun_l8_n690(x)
+ if (x < 1)
+ fun_l9_n92(x)
+ else
+ fun_l9_n550(x)
+ end
+end
+
+def fun_l8_n691(x)
+ if (x < 1)
+ fun_l9_n456(x)
+ else
+ fun_l9_n976(x)
+ end
+end
+
+def fun_l8_n692(x)
+ if (x < 1)
+ fun_l9_n516(x)
+ else
+ fun_l9_n145(x)
+ end
+end
+
+def fun_l8_n693(x)
+ if (x < 1)
+ fun_l9_n757(x)
+ else
+ fun_l9_n647(x)
+ end
+end
+
+def fun_l8_n694(x)
+ if (x < 1)
+ fun_l9_n348(x)
+ else
+ fun_l9_n86(x)
+ end
+end
+
+def fun_l8_n695(x)
+ if (x < 1)
+ fun_l9_n546(x)
+ else
+ fun_l9_n320(x)
+ end
+end
+
+def fun_l8_n696(x)
+ if (x < 1)
+ fun_l9_n588(x)
+ else
+ fun_l9_n285(x)
+ end
+end
+
+def fun_l8_n697(x)
+ if (x < 1)
+ fun_l9_n635(x)
+ else
+ fun_l9_n710(x)
+ end
+end
+
+def fun_l8_n698(x)
+ if (x < 1)
+ fun_l9_n312(x)
+ else
+ fun_l9_n217(x)
+ end
+end
+
+def fun_l8_n699(x)
+ if (x < 1)
+ fun_l9_n714(x)
+ else
+ fun_l9_n723(x)
+ end
+end
+
+def fun_l8_n700(x)
+ if (x < 1)
+ fun_l9_n378(x)
+ else
+ fun_l9_n122(x)
+ end
+end
+
+def fun_l8_n701(x)
+ if (x < 1)
+ fun_l9_n696(x)
+ else
+ fun_l9_n577(x)
+ end
+end
+
+def fun_l8_n702(x)
+ if (x < 1)
+ fun_l9_n388(x)
+ else
+ fun_l9_n578(x)
+ end
+end
+
+def fun_l8_n703(x)
+ if (x < 1)
+ fun_l9_n502(x)
+ else
+ fun_l9_n410(x)
+ end
+end
+
+def fun_l8_n704(x)
+ if (x < 1)
+ fun_l9_n532(x)
+ else
+ fun_l9_n532(x)
+ end
+end
+
+def fun_l8_n705(x)
+ if (x < 1)
+ fun_l9_n662(x)
+ else
+ fun_l9_n361(x)
+ end
+end
+
+def fun_l8_n706(x)
+ if (x < 1)
+ fun_l9_n109(x)
+ else
+ fun_l9_n380(x)
+ end
+end
+
+def fun_l8_n707(x)
+ if (x < 1)
+ fun_l9_n653(x)
+ else
+ fun_l9_n566(x)
+ end
+end
+
+def fun_l8_n708(x)
+ if (x < 1)
+ fun_l9_n587(x)
+ else
+ fun_l9_n465(x)
+ end
+end
+
+def fun_l8_n709(x)
+ if (x < 1)
+ fun_l9_n523(x)
+ else
+ fun_l9_n274(x)
+ end
+end
+
+def fun_l8_n710(x)
+ if (x < 1)
+ fun_l9_n459(x)
+ else
+ fun_l9_n872(x)
+ end
+end
+
+def fun_l8_n711(x)
+ if (x < 1)
+ fun_l9_n71(x)
+ else
+ fun_l9_n135(x)
+ end
+end
+
+def fun_l8_n712(x)
+ if (x < 1)
+ fun_l9_n770(x)
+ else
+ fun_l9_n405(x)
+ end
+end
+
+def fun_l8_n713(x)
+ if (x < 1)
+ fun_l9_n233(x)
+ else
+ fun_l9_n232(x)
+ end
+end
+
+def fun_l8_n714(x)
+ if (x < 1)
+ fun_l9_n29(x)
+ else
+ fun_l9_n23(x)
+ end
+end
+
+def fun_l8_n715(x)
+ if (x < 1)
+ fun_l9_n44(x)
+ else
+ fun_l9_n185(x)
+ end
+end
+
+def fun_l8_n716(x)
+ if (x < 1)
+ fun_l9_n980(x)
+ else
+ fun_l9_n967(x)
+ end
+end
+
+def fun_l8_n717(x)
+ if (x < 1)
+ fun_l9_n323(x)
+ else
+ fun_l9_n636(x)
+ end
+end
+
+def fun_l8_n718(x)
+ if (x < 1)
+ fun_l9_n733(x)
+ else
+ fun_l9_n10(x)
+ end
+end
+
+def fun_l8_n719(x)
+ if (x < 1)
+ fun_l9_n100(x)
+ else
+ fun_l9_n123(x)
+ end
+end
+
+def fun_l8_n720(x)
+ if (x < 1)
+ fun_l9_n572(x)
+ else
+ fun_l9_n813(x)
+ end
+end
+
+def fun_l8_n721(x)
+ if (x < 1)
+ fun_l9_n634(x)
+ else
+ fun_l9_n152(x)
+ end
+end
+
+def fun_l8_n722(x)
+ if (x < 1)
+ fun_l9_n527(x)
+ else
+ fun_l9_n881(x)
+ end
+end
+
+def fun_l8_n723(x)
+ if (x < 1)
+ fun_l9_n202(x)
+ else
+ fun_l9_n294(x)
+ end
+end
+
+def fun_l8_n724(x)
+ if (x < 1)
+ fun_l9_n668(x)
+ else
+ fun_l9_n792(x)
+ end
+end
+
+def fun_l8_n725(x)
+ if (x < 1)
+ fun_l9_n309(x)
+ else
+ fun_l9_n612(x)
+ end
+end
+
+def fun_l8_n726(x)
+ if (x < 1)
+ fun_l9_n320(x)
+ else
+ fun_l9_n459(x)
+ end
+end
+
+def fun_l8_n727(x)
+ if (x < 1)
+ fun_l9_n355(x)
+ else
+ fun_l9_n321(x)
+ end
+end
+
+def fun_l8_n728(x)
+ if (x < 1)
+ fun_l9_n237(x)
+ else
+ fun_l9_n135(x)
+ end
+end
+
+def fun_l8_n729(x)
+ if (x < 1)
+ fun_l9_n980(x)
+ else
+ fun_l9_n209(x)
+ end
+end
+
+def fun_l8_n730(x)
+ if (x < 1)
+ fun_l9_n957(x)
+ else
+ fun_l9_n481(x)
+ end
+end
+
+def fun_l8_n731(x)
+ if (x < 1)
+ fun_l9_n594(x)
+ else
+ fun_l9_n396(x)
+ end
+end
+
+def fun_l8_n732(x)
+ if (x < 1)
+ fun_l9_n916(x)
+ else
+ fun_l9_n473(x)
+ end
+end
+
+def fun_l8_n733(x)
+ if (x < 1)
+ fun_l9_n376(x)
+ else
+ fun_l9_n231(x)
+ end
+end
+
+def fun_l8_n734(x)
+ if (x < 1)
+ fun_l9_n758(x)
+ else
+ fun_l9_n111(x)
+ end
+end
+
+def fun_l8_n735(x)
+ if (x < 1)
+ fun_l9_n131(x)
+ else
+ fun_l9_n586(x)
+ end
+end
+
+def fun_l8_n736(x)
+ if (x < 1)
+ fun_l9_n290(x)
+ else
+ fun_l9_n227(x)
+ end
+end
+
+def fun_l8_n737(x)
+ if (x < 1)
+ fun_l9_n784(x)
+ else
+ fun_l9_n869(x)
+ end
+end
+
+def fun_l8_n738(x)
+ if (x < 1)
+ fun_l9_n94(x)
+ else
+ fun_l9_n79(x)
+ end
+end
+
+def fun_l8_n739(x)
+ if (x < 1)
+ fun_l9_n489(x)
+ else
+ fun_l9_n347(x)
+ end
+end
+
+def fun_l8_n740(x)
+ if (x < 1)
+ fun_l9_n4(x)
+ else
+ fun_l9_n587(x)
+ end
+end
+
+def fun_l8_n741(x)
+ if (x < 1)
+ fun_l9_n949(x)
+ else
+ fun_l9_n196(x)
+ end
+end
+
+def fun_l8_n742(x)
+ if (x < 1)
+ fun_l9_n577(x)
+ else
+ fun_l9_n562(x)
+ end
+end
+
+def fun_l8_n743(x)
+ if (x < 1)
+ fun_l9_n656(x)
+ else
+ fun_l9_n685(x)
+ end
+end
+
+def fun_l8_n744(x)
+ if (x < 1)
+ fun_l9_n792(x)
+ else
+ fun_l9_n572(x)
+ end
+end
+
+def fun_l8_n745(x)
+ if (x < 1)
+ fun_l9_n318(x)
+ else
+ fun_l9_n335(x)
+ end
+end
+
+def fun_l8_n746(x)
+ if (x < 1)
+ fun_l9_n59(x)
+ else
+ fun_l9_n109(x)
+ end
+end
+
+def fun_l8_n747(x)
+ if (x < 1)
+ fun_l9_n276(x)
+ else
+ fun_l9_n567(x)
+ end
+end
+
+def fun_l8_n748(x)
+ if (x < 1)
+ fun_l9_n902(x)
+ else
+ fun_l9_n220(x)
+ end
+end
+
+def fun_l8_n749(x)
+ if (x < 1)
+ fun_l9_n208(x)
+ else
+ fun_l9_n108(x)
+ end
+end
+
+def fun_l8_n750(x)
+ if (x < 1)
+ fun_l9_n927(x)
+ else
+ fun_l9_n950(x)
+ end
+end
+
+def fun_l8_n751(x)
+ if (x < 1)
+ fun_l9_n371(x)
+ else
+ fun_l9_n72(x)
+ end
+end
+
+def fun_l8_n752(x)
+ if (x < 1)
+ fun_l9_n455(x)
+ else
+ fun_l9_n467(x)
+ end
+end
+
+def fun_l8_n753(x)
+ if (x < 1)
+ fun_l9_n344(x)
+ else
+ fun_l9_n82(x)
+ end
+end
+
+def fun_l8_n754(x)
+ if (x < 1)
+ fun_l9_n902(x)
+ else
+ fun_l9_n219(x)
+ end
+end
+
+def fun_l8_n755(x)
+ if (x < 1)
+ fun_l9_n101(x)
+ else
+ fun_l9_n523(x)
+ end
+end
+
+def fun_l8_n756(x)
+ if (x < 1)
+ fun_l9_n517(x)
+ else
+ fun_l9_n97(x)
+ end
+end
+
+def fun_l8_n757(x)
+ if (x < 1)
+ fun_l9_n571(x)
+ else
+ fun_l9_n650(x)
+ end
+end
+
+def fun_l8_n758(x)
+ if (x < 1)
+ fun_l9_n701(x)
+ else
+ fun_l9_n962(x)
+ end
+end
+
+def fun_l8_n759(x)
+ if (x < 1)
+ fun_l9_n589(x)
+ else
+ fun_l9_n808(x)
+ end
+end
+
+def fun_l8_n760(x)
+ if (x < 1)
+ fun_l9_n570(x)
+ else
+ fun_l9_n90(x)
+ end
+end
+
+def fun_l8_n761(x)
+ if (x < 1)
+ fun_l9_n792(x)
+ else
+ fun_l9_n673(x)
+ end
+end
+
+def fun_l8_n762(x)
+ if (x < 1)
+ fun_l9_n514(x)
+ else
+ fun_l9_n771(x)
+ end
+end
+
+def fun_l8_n763(x)
+ if (x < 1)
+ fun_l9_n404(x)
+ else
+ fun_l9_n264(x)
+ end
+end
+
+def fun_l8_n764(x)
+ if (x < 1)
+ fun_l9_n270(x)
+ else
+ fun_l9_n738(x)
+ end
+end
+
+def fun_l8_n765(x)
+ if (x < 1)
+ fun_l9_n915(x)
+ else
+ fun_l9_n901(x)
+ end
+end
+
+def fun_l8_n766(x)
+ if (x < 1)
+ fun_l9_n120(x)
+ else
+ fun_l9_n176(x)
+ end
+end
+
+def fun_l8_n767(x)
+ if (x < 1)
+ fun_l9_n470(x)
+ else
+ fun_l9_n837(x)
+ end
+end
+
+def fun_l8_n768(x)
+ if (x < 1)
+ fun_l9_n912(x)
+ else
+ fun_l9_n898(x)
+ end
+end
+
+def fun_l8_n769(x)
+ if (x < 1)
+ fun_l9_n76(x)
+ else
+ fun_l9_n350(x)
+ end
+end
+
+def fun_l8_n770(x)
+ if (x < 1)
+ fun_l9_n487(x)
+ else
+ fun_l9_n572(x)
+ end
+end
+
+def fun_l8_n771(x)
+ if (x < 1)
+ fun_l9_n823(x)
+ else
+ fun_l9_n815(x)
+ end
+end
+
+def fun_l8_n772(x)
+ if (x < 1)
+ fun_l9_n655(x)
+ else
+ fun_l9_n968(x)
+ end
+end
+
+def fun_l8_n773(x)
+ if (x < 1)
+ fun_l9_n824(x)
+ else
+ fun_l9_n741(x)
+ end
+end
+
+def fun_l8_n774(x)
+ if (x < 1)
+ fun_l9_n143(x)
+ else
+ fun_l9_n641(x)
+ end
+end
+
+def fun_l8_n775(x)
+ if (x < 1)
+ fun_l9_n985(x)
+ else
+ fun_l9_n592(x)
+ end
+end
+
+def fun_l8_n776(x)
+ if (x < 1)
+ fun_l9_n686(x)
+ else
+ fun_l9_n234(x)
+ end
+end
+
+def fun_l8_n777(x)
+ if (x < 1)
+ fun_l9_n540(x)
+ else
+ fun_l9_n794(x)
+ end
+end
+
+def fun_l8_n778(x)
+ if (x < 1)
+ fun_l9_n154(x)
+ else
+ fun_l9_n656(x)
+ end
+end
+
+def fun_l8_n779(x)
+ if (x < 1)
+ fun_l9_n836(x)
+ else
+ fun_l9_n756(x)
+ end
+end
+
+def fun_l8_n780(x)
+ if (x < 1)
+ fun_l9_n98(x)
+ else
+ fun_l9_n233(x)
+ end
+end
+
+def fun_l8_n781(x)
+ if (x < 1)
+ fun_l9_n584(x)
+ else
+ fun_l9_n398(x)
+ end
+end
+
+def fun_l8_n782(x)
+ if (x < 1)
+ fun_l9_n851(x)
+ else
+ fun_l9_n967(x)
+ end
+end
+
+def fun_l8_n783(x)
+ if (x < 1)
+ fun_l9_n868(x)
+ else
+ fun_l9_n57(x)
+ end
+end
+
+def fun_l8_n784(x)
+ if (x < 1)
+ fun_l9_n782(x)
+ else
+ fun_l9_n214(x)
+ end
+end
+
+def fun_l8_n785(x)
+ if (x < 1)
+ fun_l9_n79(x)
+ else
+ fun_l9_n489(x)
+ end
+end
+
+def fun_l8_n786(x)
+ if (x < 1)
+ fun_l9_n757(x)
+ else
+ fun_l9_n918(x)
+ end
+end
+
+def fun_l8_n787(x)
+ if (x < 1)
+ fun_l9_n985(x)
+ else
+ fun_l9_n781(x)
+ end
+end
+
+def fun_l8_n788(x)
+ if (x < 1)
+ fun_l9_n921(x)
+ else
+ fun_l9_n542(x)
+ end
+end
+
+def fun_l8_n789(x)
+ if (x < 1)
+ fun_l9_n982(x)
+ else
+ fun_l9_n834(x)
+ end
+end
+
+def fun_l8_n790(x)
+ if (x < 1)
+ fun_l9_n482(x)
+ else
+ fun_l9_n424(x)
+ end
+end
+
+def fun_l8_n791(x)
+ if (x < 1)
+ fun_l9_n289(x)
+ else
+ fun_l9_n487(x)
+ end
+end
+
+def fun_l8_n792(x)
+ if (x < 1)
+ fun_l9_n820(x)
+ else
+ fun_l9_n242(x)
+ end
+end
+
+def fun_l8_n793(x)
+ if (x < 1)
+ fun_l9_n110(x)
+ else
+ fun_l9_n356(x)
+ end
+end
+
+def fun_l8_n794(x)
+ if (x < 1)
+ fun_l9_n142(x)
+ else
+ fun_l9_n607(x)
+ end
+end
+
+def fun_l8_n795(x)
+ if (x < 1)
+ fun_l9_n21(x)
+ else
+ fun_l9_n14(x)
+ end
+end
+
+def fun_l8_n796(x)
+ if (x < 1)
+ fun_l9_n147(x)
+ else
+ fun_l9_n767(x)
+ end
+end
+
+def fun_l8_n797(x)
+ if (x < 1)
+ fun_l9_n427(x)
+ else
+ fun_l9_n854(x)
+ end
+end
+
+def fun_l8_n798(x)
+ if (x < 1)
+ fun_l9_n557(x)
+ else
+ fun_l9_n729(x)
+ end
+end
+
+def fun_l8_n799(x)
+ if (x < 1)
+ fun_l9_n150(x)
+ else
+ fun_l9_n180(x)
+ end
+end
+
+def fun_l8_n800(x)
+ if (x < 1)
+ fun_l9_n888(x)
+ else
+ fun_l9_n612(x)
+ end
+end
+
+def fun_l8_n801(x)
+ if (x < 1)
+ fun_l9_n631(x)
+ else
+ fun_l9_n370(x)
+ end
+end
+
+def fun_l8_n802(x)
+ if (x < 1)
+ fun_l9_n759(x)
+ else
+ fun_l9_n446(x)
+ end
+end
+
+def fun_l8_n803(x)
+ if (x < 1)
+ fun_l9_n182(x)
+ else
+ fun_l9_n705(x)
+ end
+end
+
+def fun_l8_n804(x)
+ if (x < 1)
+ fun_l9_n474(x)
+ else
+ fun_l9_n461(x)
+ end
+end
+
+def fun_l8_n805(x)
+ if (x < 1)
+ fun_l9_n897(x)
+ else
+ fun_l9_n935(x)
+ end
+end
+
+def fun_l8_n806(x)
+ if (x < 1)
+ fun_l9_n793(x)
+ else
+ fun_l9_n981(x)
+ end
+end
+
+def fun_l8_n807(x)
+ if (x < 1)
+ fun_l9_n124(x)
+ else
+ fun_l9_n528(x)
+ end
+end
+
+def fun_l8_n808(x)
+ if (x < 1)
+ fun_l9_n637(x)
+ else
+ fun_l9_n989(x)
+ end
+end
+
+def fun_l8_n809(x)
+ if (x < 1)
+ fun_l9_n388(x)
+ else
+ fun_l9_n196(x)
+ end
+end
+
+def fun_l8_n810(x)
+ if (x < 1)
+ fun_l9_n333(x)
+ else
+ fun_l9_n806(x)
+ end
+end
+
+def fun_l8_n811(x)
+ if (x < 1)
+ fun_l9_n541(x)
+ else
+ fun_l9_n6(x)
+ end
+end
+
+def fun_l8_n812(x)
+ if (x < 1)
+ fun_l9_n346(x)
+ else
+ fun_l9_n496(x)
+ end
+end
+
+def fun_l8_n813(x)
+ if (x < 1)
+ fun_l9_n374(x)
+ else
+ fun_l9_n739(x)
+ end
+end
+
+def fun_l8_n814(x)
+ if (x < 1)
+ fun_l9_n121(x)
+ else
+ fun_l9_n184(x)
+ end
+end
+
+def fun_l8_n815(x)
+ if (x < 1)
+ fun_l9_n460(x)
+ else
+ fun_l9_n759(x)
+ end
+end
+
+def fun_l8_n816(x)
+ if (x < 1)
+ fun_l9_n598(x)
+ else
+ fun_l9_n638(x)
+ end
+end
+
+def fun_l8_n817(x)
+ if (x < 1)
+ fun_l9_n986(x)
+ else
+ fun_l9_n658(x)
+ end
+end
+
+def fun_l8_n818(x)
+ if (x < 1)
+ fun_l9_n169(x)
+ else
+ fun_l9_n696(x)
+ end
+end
+
+def fun_l8_n819(x)
+ if (x < 1)
+ fun_l9_n885(x)
+ else
+ fun_l9_n74(x)
+ end
+end
+
+def fun_l8_n820(x)
+ if (x < 1)
+ fun_l9_n24(x)
+ else
+ fun_l9_n87(x)
+ end
+end
+
+def fun_l8_n821(x)
+ if (x < 1)
+ fun_l9_n59(x)
+ else
+ fun_l9_n843(x)
+ end
+end
+
+def fun_l8_n822(x)
+ if (x < 1)
+ fun_l9_n640(x)
+ else
+ fun_l9_n360(x)
+ end
+end
+
+def fun_l8_n823(x)
+ if (x < 1)
+ fun_l9_n355(x)
+ else
+ fun_l9_n28(x)
+ end
+end
+
+def fun_l8_n824(x)
+ if (x < 1)
+ fun_l9_n553(x)
+ else
+ fun_l9_n475(x)
+ end
+end
+
+def fun_l8_n825(x)
+ if (x < 1)
+ fun_l9_n757(x)
+ else
+ fun_l9_n790(x)
+ end
+end
+
+def fun_l8_n826(x)
+ if (x < 1)
+ fun_l9_n787(x)
+ else
+ fun_l9_n226(x)
+ end
+end
+
+def fun_l8_n827(x)
+ if (x < 1)
+ fun_l9_n622(x)
+ else
+ fun_l9_n711(x)
+ end
+end
+
+def fun_l8_n828(x)
+ if (x < 1)
+ fun_l9_n399(x)
+ else
+ fun_l9_n7(x)
+ end
+end
+
+def fun_l8_n829(x)
+ if (x < 1)
+ fun_l9_n589(x)
+ else
+ fun_l9_n276(x)
+ end
+end
+
+def fun_l8_n830(x)
+ if (x < 1)
+ fun_l9_n83(x)
+ else
+ fun_l9_n126(x)
+ end
+end
+
+def fun_l8_n831(x)
+ if (x < 1)
+ fun_l9_n576(x)
+ else
+ fun_l9_n855(x)
+ end
+end
+
+def fun_l8_n832(x)
+ if (x < 1)
+ fun_l9_n756(x)
+ else
+ fun_l9_n638(x)
+ end
+end
+
+def fun_l8_n833(x)
+ if (x < 1)
+ fun_l9_n388(x)
+ else
+ fun_l9_n154(x)
+ end
+end
+
+def fun_l8_n834(x)
+ if (x < 1)
+ fun_l9_n268(x)
+ else
+ fun_l9_n85(x)
+ end
+end
+
+def fun_l8_n835(x)
+ if (x < 1)
+ fun_l9_n32(x)
+ else
+ fun_l9_n678(x)
+ end
+end
+
+def fun_l8_n836(x)
+ if (x < 1)
+ fun_l9_n537(x)
+ else
+ fun_l9_n984(x)
+ end
+end
+
+def fun_l8_n837(x)
+ if (x < 1)
+ fun_l9_n798(x)
+ else
+ fun_l9_n221(x)
+ end
+end
+
+def fun_l8_n838(x)
+ if (x < 1)
+ fun_l9_n153(x)
+ else
+ fun_l9_n414(x)
+ end
+end
+
+def fun_l8_n839(x)
+ if (x < 1)
+ fun_l9_n904(x)
+ else
+ fun_l9_n847(x)
+ end
+end
+
+def fun_l8_n840(x)
+ if (x < 1)
+ fun_l9_n501(x)
+ else
+ fun_l9_n971(x)
+ end
+end
+
+def fun_l8_n841(x)
+ if (x < 1)
+ fun_l9_n94(x)
+ else
+ fun_l9_n719(x)
+ end
+end
+
+def fun_l8_n842(x)
+ if (x < 1)
+ fun_l9_n343(x)
+ else
+ fun_l9_n365(x)
+ end
+end
+
+def fun_l8_n843(x)
+ if (x < 1)
+ fun_l9_n541(x)
+ else
+ fun_l9_n800(x)
+ end
+end
+
+def fun_l8_n844(x)
+ if (x < 1)
+ fun_l9_n122(x)
+ else
+ fun_l9_n662(x)
+ end
+end
+
+def fun_l8_n845(x)
+ if (x < 1)
+ fun_l9_n312(x)
+ else
+ fun_l9_n688(x)
+ end
+end
+
+def fun_l8_n846(x)
+ if (x < 1)
+ fun_l9_n668(x)
+ else
+ fun_l9_n805(x)
+ end
+end
+
+def fun_l8_n847(x)
+ if (x < 1)
+ fun_l9_n785(x)
+ else
+ fun_l9_n917(x)
+ end
+end
+
+def fun_l8_n848(x)
+ if (x < 1)
+ fun_l9_n333(x)
+ else
+ fun_l9_n782(x)
+ end
+end
+
+def fun_l8_n849(x)
+ if (x < 1)
+ fun_l9_n402(x)
+ else
+ fun_l9_n398(x)
+ end
+end
+
+def fun_l8_n850(x)
+ if (x < 1)
+ fun_l9_n708(x)
+ else
+ fun_l9_n199(x)
+ end
+end
+
+def fun_l8_n851(x)
+ if (x < 1)
+ fun_l9_n950(x)
+ else
+ fun_l9_n308(x)
+ end
+end
+
+def fun_l8_n852(x)
+ if (x < 1)
+ fun_l9_n524(x)
+ else
+ fun_l9_n411(x)
+ end
+end
+
+def fun_l8_n853(x)
+ if (x < 1)
+ fun_l9_n467(x)
+ else
+ fun_l9_n807(x)
+ end
+end
+
+def fun_l8_n854(x)
+ if (x < 1)
+ fun_l9_n316(x)
+ else
+ fun_l9_n717(x)
+ end
+end
+
+def fun_l8_n855(x)
+ if (x < 1)
+ fun_l9_n955(x)
+ else
+ fun_l9_n631(x)
+ end
+end
+
+def fun_l8_n856(x)
+ if (x < 1)
+ fun_l9_n244(x)
+ else
+ fun_l9_n838(x)
+ end
+end
+
+def fun_l8_n857(x)
+ if (x < 1)
+ fun_l9_n574(x)
+ else
+ fun_l9_n720(x)
+ end
+end
+
+def fun_l8_n858(x)
+ if (x < 1)
+ fun_l9_n80(x)
+ else
+ fun_l9_n888(x)
+ end
+end
+
+def fun_l8_n859(x)
+ if (x < 1)
+ fun_l9_n675(x)
+ else
+ fun_l9_n71(x)
+ end
+end
+
+def fun_l8_n860(x)
+ if (x < 1)
+ fun_l9_n375(x)
+ else
+ fun_l9_n507(x)
+ end
+end
+
+def fun_l8_n861(x)
+ if (x < 1)
+ fun_l9_n450(x)
+ else
+ fun_l9_n705(x)
+ end
+end
+
+def fun_l8_n862(x)
+ if (x < 1)
+ fun_l9_n358(x)
+ else
+ fun_l9_n614(x)
+ end
+end
+
+def fun_l8_n863(x)
+ if (x < 1)
+ fun_l9_n690(x)
+ else
+ fun_l9_n73(x)
+ end
+end
+
+def fun_l8_n864(x)
+ if (x < 1)
+ fun_l9_n806(x)
+ else
+ fun_l9_n85(x)
+ end
+end
+
+def fun_l8_n865(x)
+ if (x < 1)
+ fun_l9_n251(x)
+ else
+ fun_l9_n657(x)
+ end
+end
+
+def fun_l8_n866(x)
+ if (x < 1)
+ fun_l9_n921(x)
+ else
+ fun_l9_n199(x)
+ end
+end
+
+def fun_l8_n867(x)
+ if (x < 1)
+ fun_l9_n265(x)
+ else
+ fun_l9_n937(x)
+ end
+end
+
+def fun_l8_n868(x)
+ if (x < 1)
+ fun_l9_n610(x)
+ else
+ fun_l9_n7(x)
+ end
+end
+
+def fun_l8_n869(x)
+ if (x < 1)
+ fun_l9_n703(x)
+ else
+ fun_l9_n74(x)
+ end
+end
+
+def fun_l8_n870(x)
+ if (x < 1)
+ fun_l9_n869(x)
+ else
+ fun_l9_n665(x)
+ end
+end
+
+def fun_l8_n871(x)
+ if (x < 1)
+ fun_l9_n808(x)
+ else
+ fun_l9_n686(x)
+ end
+end
+
+def fun_l8_n872(x)
+ if (x < 1)
+ fun_l9_n678(x)
+ else
+ fun_l9_n709(x)
+ end
+end
+
+def fun_l8_n873(x)
+ if (x < 1)
+ fun_l9_n557(x)
+ else
+ fun_l9_n63(x)
+ end
+end
+
+def fun_l8_n874(x)
+ if (x < 1)
+ fun_l9_n214(x)
+ else
+ fun_l9_n926(x)
+ end
+end
+
+def fun_l8_n875(x)
+ if (x < 1)
+ fun_l9_n218(x)
+ else
+ fun_l9_n810(x)
+ end
+end
+
+def fun_l8_n876(x)
+ if (x < 1)
+ fun_l9_n365(x)
+ else
+ fun_l9_n257(x)
+ end
+end
+
+def fun_l8_n877(x)
+ if (x < 1)
+ fun_l9_n51(x)
+ else
+ fun_l9_n68(x)
+ end
+end
+
+def fun_l8_n878(x)
+ if (x < 1)
+ fun_l9_n20(x)
+ else
+ fun_l9_n55(x)
+ end
+end
+
+def fun_l8_n879(x)
+ if (x < 1)
+ fun_l9_n686(x)
+ else
+ fun_l9_n226(x)
+ end
+end
+
+def fun_l8_n880(x)
+ if (x < 1)
+ fun_l9_n283(x)
+ else
+ fun_l9_n270(x)
+ end
+end
+
+def fun_l8_n881(x)
+ if (x < 1)
+ fun_l9_n811(x)
+ else
+ fun_l9_n820(x)
+ end
+end
+
+def fun_l8_n882(x)
+ if (x < 1)
+ fun_l9_n342(x)
+ else
+ fun_l9_n919(x)
+ end
+end
+
+def fun_l8_n883(x)
+ if (x < 1)
+ fun_l9_n515(x)
+ else
+ fun_l9_n24(x)
+ end
+end
+
+def fun_l8_n884(x)
+ if (x < 1)
+ fun_l9_n0(x)
+ else
+ fun_l9_n150(x)
+ end
+end
+
+def fun_l8_n885(x)
+ if (x < 1)
+ fun_l9_n481(x)
+ else
+ fun_l9_n65(x)
+ end
+end
+
+def fun_l8_n886(x)
+ if (x < 1)
+ fun_l9_n252(x)
+ else
+ fun_l9_n544(x)
+ end
+end
+
+def fun_l8_n887(x)
+ if (x < 1)
+ fun_l9_n635(x)
+ else
+ fun_l9_n402(x)
+ end
+end
+
+def fun_l8_n888(x)
+ if (x < 1)
+ fun_l9_n78(x)
+ else
+ fun_l9_n779(x)
+ end
+end
+
+def fun_l8_n889(x)
+ if (x < 1)
+ fun_l9_n249(x)
+ else
+ fun_l9_n331(x)
+ end
+end
+
+def fun_l8_n890(x)
+ if (x < 1)
+ fun_l9_n914(x)
+ else
+ fun_l9_n115(x)
+ end
+end
+
+def fun_l8_n891(x)
+ if (x < 1)
+ fun_l9_n832(x)
+ else
+ fun_l9_n34(x)
+ end
+end
+
+def fun_l8_n892(x)
+ if (x < 1)
+ fun_l9_n919(x)
+ else
+ fun_l9_n620(x)
+ end
+end
+
+def fun_l8_n893(x)
+ if (x < 1)
+ fun_l9_n360(x)
+ else
+ fun_l9_n189(x)
+ end
+end
+
+def fun_l8_n894(x)
+ if (x < 1)
+ fun_l9_n736(x)
+ else
+ fun_l9_n949(x)
+ end
+end
+
+def fun_l8_n895(x)
+ if (x < 1)
+ fun_l9_n56(x)
+ else
+ fun_l9_n826(x)
+ end
+end
+
+def fun_l8_n896(x)
+ if (x < 1)
+ fun_l9_n159(x)
+ else
+ fun_l9_n523(x)
+ end
+end
+
+def fun_l8_n897(x)
+ if (x < 1)
+ fun_l9_n630(x)
+ else
+ fun_l9_n601(x)
+ end
+end
+
+def fun_l8_n898(x)
+ if (x < 1)
+ fun_l9_n434(x)
+ else
+ fun_l9_n919(x)
+ end
+end
+
+def fun_l8_n899(x)
+ if (x < 1)
+ fun_l9_n872(x)
+ else
+ fun_l9_n652(x)
+ end
+end
+
+def fun_l8_n900(x)
+ if (x < 1)
+ fun_l9_n550(x)
+ else
+ fun_l9_n124(x)
+ end
+end
+
+def fun_l8_n901(x)
+ if (x < 1)
+ fun_l9_n56(x)
+ else
+ fun_l9_n422(x)
+ end
+end
+
+def fun_l8_n902(x)
+ if (x < 1)
+ fun_l9_n297(x)
+ else
+ fun_l9_n281(x)
+ end
+end
+
+def fun_l8_n903(x)
+ if (x < 1)
+ fun_l9_n764(x)
+ else
+ fun_l9_n942(x)
+ end
+end
+
+def fun_l8_n904(x)
+ if (x < 1)
+ fun_l9_n700(x)
+ else
+ fun_l9_n525(x)
+ end
+end
+
+def fun_l8_n905(x)
+ if (x < 1)
+ fun_l9_n370(x)
+ else
+ fun_l9_n871(x)
+ end
+end
+
+def fun_l8_n906(x)
+ if (x < 1)
+ fun_l9_n385(x)
+ else
+ fun_l9_n999(x)
+ end
+end
+
+def fun_l8_n907(x)
+ if (x < 1)
+ fun_l9_n63(x)
+ else
+ fun_l9_n137(x)
+ end
+end
+
+def fun_l8_n908(x)
+ if (x < 1)
+ fun_l9_n793(x)
+ else
+ fun_l9_n720(x)
+ end
+end
+
+def fun_l8_n909(x)
+ if (x < 1)
+ fun_l9_n141(x)
+ else
+ fun_l9_n838(x)
+ end
+end
+
+def fun_l8_n910(x)
+ if (x < 1)
+ fun_l9_n764(x)
+ else
+ fun_l9_n334(x)
+ end
+end
+
+def fun_l8_n911(x)
+ if (x < 1)
+ fun_l9_n429(x)
+ else
+ fun_l9_n309(x)
+ end
+end
+
+def fun_l8_n912(x)
+ if (x < 1)
+ fun_l9_n852(x)
+ else
+ fun_l9_n662(x)
+ end
+end
+
+def fun_l8_n913(x)
+ if (x < 1)
+ fun_l9_n467(x)
+ else
+ fun_l9_n817(x)
+ end
+end
+
+def fun_l8_n914(x)
+ if (x < 1)
+ fun_l9_n318(x)
+ else
+ fun_l9_n942(x)
+ end
+end
+
+def fun_l8_n915(x)
+ if (x < 1)
+ fun_l9_n442(x)
+ else
+ fun_l9_n987(x)
+ end
+end
+
+def fun_l8_n916(x)
+ if (x < 1)
+ fun_l9_n657(x)
+ else
+ fun_l9_n736(x)
+ end
+end
+
+def fun_l8_n917(x)
+ if (x < 1)
+ fun_l9_n839(x)
+ else
+ fun_l9_n897(x)
+ end
+end
+
+def fun_l8_n918(x)
+ if (x < 1)
+ fun_l9_n659(x)
+ else
+ fun_l9_n766(x)
+ end
+end
+
+def fun_l8_n919(x)
+ if (x < 1)
+ fun_l9_n523(x)
+ else
+ fun_l9_n54(x)
+ end
+end
+
+def fun_l8_n920(x)
+ if (x < 1)
+ fun_l9_n298(x)
+ else
+ fun_l9_n169(x)
+ end
+end
+
+def fun_l8_n921(x)
+ if (x < 1)
+ fun_l9_n752(x)
+ else
+ fun_l9_n281(x)
+ end
+end
+
+def fun_l8_n922(x)
+ if (x < 1)
+ fun_l9_n703(x)
+ else
+ fun_l9_n874(x)
+ end
+end
+
+def fun_l8_n923(x)
+ if (x < 1)
+ fun_l9_n218(x)
+ else
+ fun_l9_n880(x)
+ end
+end
+
+def fun_l8_n924(x)
+ if (x < 1)
+ fun_l9_n699(x)
+ else
+ fun_l9_n357(x)
+ end
+end
+
+def fun_l8_n925(x)
+ if (x < 1)
+ fun_l9_n279(x)
+ else
+ fun_l9_n300(x)
+ end
+end
+
+def fun_l8_n926(x)
+ if (x < 1)
+ fun_l9_n955(x)
+ else
+ fun_l9_n522(x)
+ end
+end
+
+def fun_l8_n927(x)
+ if (x < 1)
+ fun_l9_n943(x)
+ else
+ fun_l9_n597(x)
+ end
+end
+
+def fun_l8_n928(x)
+ if (x < 1)
+ fun_l9_n828(x)
+ else
+ fun_l9_n658(x)
+ end
+end
+
+def fun_l8_n929(x)
+ if (x < 1)
+ fun_l9_n160(x)
+ else
+ fun_l9_n536(x)
+ end
+end
+
+def fun_l8_n930(x)
+ if (x < 1)
+ fun_l9_n422(x)
+ else
+ fun_l9_n848(x)
+ end
+end
+
+def fun_l8_n931(x)
+ if (x < 1)
+ fun_l9_n66(x)
+ else
+ fun_l9_n298(x)
+ end
+end
+
+def fun_l8_n932(x)
+ if (x < 1)
+ fun_l9_n871(x)
+ else
+ fun_l9_n443(x)
+ end
+end
+
+def fun_l8_n933(x)
+ if (x < 1)
+ fun_l9_n876(x)
+ else
+ fun_l9_n459(x)
+ end
+end
+
+def fun_l8_n934(x)
+ if (x < 1)
+ fun_l9_n319(x)
+ else
+ fun_l9_n921(x)
+ end
+end
+
+def fun_l8_n935(x)
+ if (x < 1)
+ fun_l9_n741(x)
+ else
+ fun_l9_n659(x)
+ end
+end
+
+def fun_l8_n936(x)
+ if (x < 1)
+ fun_l9_n713(x)
+ else
+ fun_l9_n800(x)
+ end
+end
+
+def fun_l8_n937(x)
+ if (x < 1)
+ fun_l9_n945(x)
+ else
+ fun_l9_n548(x)
+ end
+end
+
+def fun_l8_n938(x)
+ if (x < 1)
+ fun_l9_n732(x)
+ else
+ fun_l9_n10(x)
+ end
+end
+
+def fun_l8_n939(x)
+ if (x < 1)
+ fun_l9_n5(x)
+ else
+ fun_l9_n864(x)
+ end
+end
+
+def fun_l8_n940(x)
+ if (x < 1)
+ fun_l9_n353(x)
+ else
+ fun_l9_n46(x)
+ end
+end
+
+def fun_l8_n941(x)
+ if (x < 1)
+ fun_l9_n622(x)
+ else
+ fun_l9_n430(x)
+ end
+end
+
+def fun_l8_n942(x)
+ if (x < 1)
+ fun_l9_n120(x)
+ else
+ fun_l9_n265(x)
+ end
+end
+
+def fun_l8_n943(x)
+ if (x < 1)
+ fun_l9_n272(x)
+ else
+ fun_l9_n290(x)
+ end
+end
+
+def fun_l8_n944(x)
+ if (x < 1)
+ fun_l9_n527(x)
+ else
+ fun_l9_n830(x)
+ end
+end
+
+def fun_l8_n945(x)
+ if (x < 1)
+ fun_l9_n202(x)
+ else
+ fun_l9_n597(x)
+ end
+end
+
+def fun_l8_n946(x)
+ if (x < 1)
+ fun_l9_n797(x)
+ else
+ fun_l9_n984(x)
+ end
+end
+
+def fun_l8_n947(x)
+ if (x < 1)
+ fun_l9_n3(x)
+ else
+ fun_l9_n173(x)
+ end
+end
+
+def fun_l8_n948(x)
+ if (x < 1)
+ fun_l9_n658(x)
+ else
+ fun_l9_n48(x)
+ end
+end
+
+def fun_l8_n949(x)
+ if (x < 1)
+ fun_l9_n302(x)
+ else
+ fun_l9_n549(x)
+ end
+end
+
+def fun_l8_n950(x)
+ if (x < 1)
+ fun_l9_n450(x)
+ else
+ fun_l9_n442(x)
+ end
+end
+
+def fun_l8_n951(x)
+ if (x < 1)
+ fun_l9_n32(x)
+ else
+ fun_l9_n287(x)
+ end
+end
+
+def fun_l8_n952(x)
+ if (x < 1)
+ fun_l9_n427(x)
+ else
+ fun_l9_n67(x)
+ end
+end
+
+def fun_l8_n953(x)
+ if (x < 1)
+ fun_l9_n153(x)
+ else
+ fun_l9_n748(x)
+ end
+end
+
+def fun_l8_n954(x)
+ if (x < 1)
+ fun_l9_n528(x)
+ else
+ fun_l9_n754(x)
+ end
+end
+
+def fun_l8_n955(x)
+ if (x < 1)
+ fun_l9_n722(x)
+ else
+ fun_l9_n982(x)
+ end
+end
+
+def fun_l8_n956(x)
+ if (x < 1)
+ fun_l9_n857(x)
+ else
+ fun_l9_n286(x)
+ end
+end
+
+def fun_l8_n957(x)
+ if (x < 1)
+ fun_l9_n579(x)
+ else
+ fun_l9_n830(x)
+ end
+end
+
+def fun_l8_n958(x)
+ if (x < 1)
+ fun_l9_n913(x)
+ else
+ fun_l9_n918(x)
+ end
+end
+
+def fun_l8_n959(x)
+ if (x < 1)
+ fun_l9_n575(x)
+ else
+ fun_l9_n441(x)
+ end
+end
+
+def fun_l8_n960(x)
+ if (x < 1)
+ fun_l9_n774(x)
+ else
+ fun_l9_n426(x)
+ end
+end
+
+def fun_l8_n961(x)
+ if (x < 1)
+ fun_l9_n415(x)
+ else
+ fun_l9_n720(x)
+ end
+end
+
+def fun_l8_n962(x)
+ if (x < 1)
+ fun_l9_n187(x)
+ else
+ fun_l9_n101(x)
+ end
+end
+
+def fun_l8_n963(x)
+ if (x < 1)
+ fun_l9_n146(x)
+ else
+ fun_l9_n911(x)
+ end
+end
+
+def fun_l8_n964(x)
+ if (x < 1)
+ fun_l9_n758(x)
+ else
+ fun_l9_n46(x)
+ end
+end
+
+def fun_l8_n965(x)
+ if (x < 1)
+ fun_l9_n316(x)
+ else
+ fun_l9_n874(x)
+ end
+end
+
+def fun_l8_n966(x)
+ if (x < 1)
+ fun_l9_n604(x)
+ else
+ fun_l9_n933(x)
+ end
+end
+
+def fun_l8_n967(x)
+ if (x < 1)
+ fun_l9_n185(x)
+ else
+ fun_l9_n729(x)
+ end
+end
+
+def fun_l8_n968(x)
+ if (x < 1)
+ fun_l9_n735(x)
+ else
+ fun_l9_n347(x)
+ end
+end
+
+def fun_l8_n969(x)
+ if (x < 1)
+ fun_l9_n796(x)
+ else
+ fun_l9_n163(x)
+ end
+end
+
+def fun_l8_n970(x)
+ if (x < 1)
+ fun_l9_n535(x)
+ else
+ fun_l9_n184(x)
+ end
+end
+
+def fun_l8_n971(x)
+ if (x < 1)
+ fun_l9_n919(x)
+ else
+ fun_l9_n838(x)
+ end
+end
+
+def fun_l8_n972(x)
+ if (x < 1)
+ fun_l9_n296(x)
+ else
+ fun_l9_n822(x)
+ end
+end
+
+def fun_l8_n973(x)
+ if (x < 1)
+ fun_l9_n503(x)
+ else
+ fun_l9_n979(x)
+ end
+end
+
+def fun_l8_n974(x)
+ if (x < 1)
+ fun_l9_n598(x)
+ else
+ fun_l9_n916(x)
+ end
+end
+
+def fun_l8_n975(x)
+ if (x < 1)
+ fun_l9_n119(x)
+ else
+ fun_l9_n138(x)
+ end
+end
+
+def fun_l8_n976(x)
+ if (x < 1)
+ fun_l9_n92(x)
+ else
+ fun_l9_n244(x)
+ end
+end
+
+def fun_l8_n977(x)
+ if (x < 1)
+ fun_l9_n250(x)
+ else
+ fun_l9_n496(x)
+ end
+end
+
+def fun_l8_n978(x)
+ if (x < 1)
+ fun_l9_n665(x)
+ else
+ fun_l9_n617(x)
+ end
+end
+
+def fun_l8_n979(x)
+ if (x < 1)
+ fun_l9_n212(x)
+ else
+ fun_l9_n63(x)
+ end
+end
+
+def fun_l8_n980(x)
+ if (x < 1)
+ fun_l9_n304(x)
+ else
+ fun_l9_n373(x)
+ end
+end
+
+def fun_l8_n981(x)
+ if (x < 1)
+ fun_l9_n70(x)
+ else
+ fun_l9_n194(x)
+ end
+end
+
+def fun_l8_n982(x)
+ if (x < 1)
+ fun_l9_n996(x)
+ else
+ fun_l9_n821(x)
+ end
+end
+
+def fun_l8_n983(x)
+ if (x < 1)
+ fun_l9_n109(x)
+ else
+ fun_l9_n926(x)
+ end
+end
+
+def fun_l8_n984(x)
+ if (x < 1)
+ fun_l9_n342(x)
+ else
+ fun_l9_n768(x)
+ end
+end
+
+def fun_l8_n985(x)
+ if (x < 1)
+ fun_l9_n12(x)
+ else
+ fun_l9_n55(x)
+ end
+end
+
+def fun_l8_n986(x)
+ if (x < 1)
+ fun_l9_n663(x)
+ else
+ fun_l9_n963(x)
+ end
+end
+
+def fun_l8_n987(x)
+ if (x < 1)
+ fun_l9_n108(x)
+ else
+ fun_l9_n139(x)
+ end
+end
+
+def fun_l8_n988(x)
+ if (x < 1)
+ fun_l9_n256(x)
+ else
+ fun_l9_n55(x)
+ end
+end
+
+def fun_l8_n989(x)
+ if (x < 1)
+ fun_l9_n261(x)
+ else
+ fun_l9_n962(x)
+ end
+end
+
+def fun_l8_n990(x)
+ if (x < 1)
+ fun_l9_n581(x)
+ else
+ fun_l9_n558(x)
+ end
+end
+
+def fun_l8_n991(x)
+ if (x < 1)
+ fun_l9_n379(x)
+ else
+ fun_l9_n179(x)
+ end
+end
+
+def fun_l8_n992(x)
+ if (x < 1)
+ fun_l9_n256(x)
+ else
+ fun_l9_n158(x)
+ end
+end
+
+def fun_l8_n993(x)
+ if (x < 1)
+ fun_l9_n75(x)
+ else
+ fun_l9_n669(x)
+ end
+end
+
+def fun_l8_n994(x)
+ if (x < 1)
+ fun_l9_n1(x)
+ else
+ fun_l9_n723(x)
+ end
+end
+
+def fun_l8_n995(x)
+ if (x < 1)
+ fun_l9_n52(x)
+ else
+ fun_l9_n706(x)
+ end
+end
+
+def fun_l8_n996(x)
+ if (x < 1)
+ fun_l9_n583(x)
+ else
+ fun_l9_n769(x)
+ end
+end
+
+def fun_l8_n997(x)
+ if (x < 1)
+ fun_l9_n91(x)
+ else
+ fun_l9_n86(x)
+ end
+end
+
+def fun_l8_n998(x)
+ if (x < 1)
+ fun_l9_n605(x)
+ else
+ fun_l9_n106(x)
+ end
+end
+
+def fun_l8_n999(x)
+ if (x < 1)
+ fun_l9_n634(x)
+ else
+ fun_l9_n110(x)
+ end
+end
+
+def fun_l9_n0(x)
+ if (x < 1)
+ fun_l10_n583(x)
+ else
+ fun_l10_n168(x)
+ end
+end
+
+def fun_l9_n1(x)
+ if (x < 1)
+ fun_l10_n523(x)
+ else
+ fun_l10_n486(x)
+ end
+end
+
+def fun_l9_n2(x)
+ if (x < 1)
+ fun_l10_n869(x)
+ else
+ fun_l10_n480(x)
+ end
+end
+
+def fun_l9_n3(x)
+ if (x < 1)
+ fun_l10_n227(x)
+ else
+ fun_l10_n798(x)
+ end
+end
+
+def fun_l9_n4(x)
+ if (x < 1)
+ fun_l10_n8(x)
+ else
+ fun_l10_n984(x)
+ end
+end
+
+def fun_l9_n5(x)
+ if (x < 1)
+ fun_l10_n757(x)
+ else
+ fun_l10_n791(x)
+ end
+end
+
+def fun_l9_n6(x)
+ if (x < 1)
+ fun_l10_n131(x)
+ else
+ fun_l10_n44(x)
+ end
+end
+
+def fun_l9_n7(x)
+ if (x < 1)
+ fun_l10_n292(x)
+ else
+ fun_l10_n793(x)
+ end
+end
+
+def fun_l9_n8(x)
+ if (x < 1)
+ fun_l10_n237(x)
+ else
+ fun_l10_n439(x)
+ end
+end
+
+def fun_l9_n9(x)
+ if (x < 1)
+ fun_l10_n99(x)
+ else
+ fun_l10_n914(x)
+ end
+end
+
+def fun_l9_n10(x)
+ if (x < 1)
+ fun_l10_n702(x)
+ else
+ fun_l10_n983(x)
+ end
+end
+
+def fun_l9_n11(x)
+ if (x < 1)
+ fun_l10_n843(x)
+ else
+ fun_l10_n774(x)
+ end
+end
+
+def fun_l9_n12(x)
+ if (x < 1)
+ fun_l10_n720(x)
+ else
+ fun_l10_n238(x)
+ end
+end
+
+def fun_l9_n13(x)
+ if (x < 1)
+ fun_l10_n339(x)
+ else
+ fun_l10_n613(x)
+ end
+end
+
+def fun_l9_n14(x)
+ if (x < 1)
+ fun_l10_n711(x)
+ else
+ fun_l10_n836(x)
+ end
+end
+
+def fun_l9_n15(x)
+ if (x < 1)
+ fun_l10_n542(x)
+ else
+ fun_l10_n90(x)
+ end
+end
+
+def fun_l9_n16(x)
+ if (x < 1)
+ fun_l10_n931(x)
+ else
+ fun_l10_n1(x)
+ end
+end
+
+def fun_l9_n17(x)
+ if (x < 1)
+ fun_l10_n568(x)
+ else
+ fun_l10_n397(x)
+ end
+end
+
+def fun_l9_n18(x)
+ if (x < 1)
+ fun_l10_n108(x)
+ else
+ fun_l10_n245(x)
+ end
+end
+
+def fun_l9_n19(x)
+ if (x < 1)
+ fun_l10_n413(x)
+ else
+ fun_l10_n644(x)
+ end
+end
+
+def fun_l9_n20(x)
+ if (x < 1)
+ fun_l10_n533(x)
+ else
+ fun_l10_n345(x)
+ end
+end
+
+def fun_l9_n21(x)
+ if (x < 1)
+ fun_l10_n84(x)
+ else
+ fun_l10_n821(x)
+ end
+end
+
+def fun_l9_n22(x)
+ if (x < 1)
+ fun_l10_n391(x)
+ else
+ fun_l10_n154(x)
+ end
+end
+
+def fun_l9_n23(x)
+ if (x < 1)
+ fun_l10_n591(x)
+ else
+ fun_l10_n443(x)
+ end
+end
+
+def fun_l9_n24(x)
+ if (x < 1)
+ fun_l10_n105(x)
+ else
+ fun_l10_n652(x)
+ end
+end
+
+def fun_l9_n25(x)
+ if (x < 1)
+ fun_l10_n495(x)
+ else
+ fun_l10_n185(x)
+ end
+end
+
+def fun_l9_n26(x)
+ if (x < 1)
+ fun_l10_n160(x)
+ else
+ fun_l10_n77(x)
+ end
+end
+
+def fun_l9_n27(x)
+ if (x < 1)
+ fun_l10_n307(x)
+ else
+ fun_l10_n813(x)
+ end
+end
+
+def fun_l9_n28(x)
+ if (x < 1)
+ fun_l10_n651(x)
+ else
+ fun_l10_n198(x)
+ end
+end
+
+def fun_l9_n29(x)
+ if (x < 1)
+ fun_l10_n689(x)
+ else
+ fun_l10_n995(x)
+ end
+end
+
+def fun_l9_n30(x)
+ if (x < 1)
+ fun_l10_n52(x)
+ else
+ fun_l10_n846(x)
+ end
+end
+
+def fun_l9_n31(x)
+ if (x < 1)
+ fun_l10_n151(x)
+ else
+ fun_l10_n758(x)
+ end
+end
+
+def fun_l9_n32(x)
+ if (x < 1)
+ fun_l10_n675(x)
+ else
+ fun_l10_n240(x)
+ end
+end
+
+def fun_l9_n33(x)
+ if (x < 1)
+ fun_l10_n660(x)
+ else
+ fun_l10_n826(x)
+ end
+end
+
+def fun_l9_n34(x)
+ if (x < 1)
+ fun_l10_n858(x)
+ else
+ fun_l10_n120(x)
+ end
+end
+
+def fun_l9_n35(x)
+ if (x < 1)
+ fun_l10_n28(x)
+ else
+ fun_l10_n870(x)
+ end
+end
+
+def fun_l9_n36(x)
+ if (x < 1)
+ fun_l10_n275(x)
+ else
+ fun_l10_n376(x)
+ end
+end
+
+def fun_l9_n37(x)
+ if (x < 1)
+ fun_l10_n852(x)
+ else
+ fun_l10_n413(x)
+ end
+end
+
+def fun_l9_n38(x)
+ if (x < 1)
+ fun_l10_n608(x)
+ else
+ fun_l10_n740(x)
+ end
+end
+
+def fun_l9_n39(x)
+ if (x < 1)
+ fun_l10_n856(x)
+ else
+ fun_l10_n543(x)
+ end
+end
+
+def fun_l9_n40(x)
+ if (x < 1)
+ fun_l10_n979(x)
+ else
+ fun_l10_n37(x)
+ end
+end
+
+def fun_l9_n41(x)
+ if (x < 1)
+ fun_l10_n752(x)
+ else
+ fun_l10_n94(x)
+ end
+end
+
+def fun_l9_n42(x)
+ if (x < 1)
+ fun_l10_n653(x)
+ else
+ fun_l10_n64(x)
+ end
+end
+
+def fun_l9_n43(x)
+ if (x < 1)
+ fun_l10_n860(x)
+ else
+ fun_l10_n658(x)
+ end
+end
+
+def fun_l9_n44(x)
+ if (x < 1)
+ fun_l10_n952(x)
+ else
+ fun_l10_n413(x)
+ end
+end
+
+def fun_l9_n45(x)
+ if (x < 1)
+ fun_l10_n70(x)
+ else
+ fun_l10_n297(x)
+ end
+end
+
+def fun_l9_n46(x)
+ if (x < 1)
+ fun_l10_n100(x)
+ else
+ fun_l10_n154(x)
+ end
+end
+
+def fun_l9_n47(x)
+ if (x < 1)
+ fun_l10_n746(x)
+ else
+ fun_l10_n937(x)
+ end
+end
+
+def fun_l9_n48(x)
+ if (x < 1)
+ fun_l10_n341(x)
+ else
+ fun_l10_n200(x)
+ end
+end
+
+def fun_l9_n49(x)
+ if (x < 1)
+ fun_l10_n317(x)
+ else
+ fun_l10_n607(x)
+ end
+end
+
+def fun_l9_n50(x)
+ if (x < 1)
+ fun_l10_n194(x)
+ else
+ fun_l10_n499(x)
+ end
+end
+
+def fun_l9_n51(x)
+ if (x < 1)
+ fun_l10_n936(x)
+ else
+ fun_l10_n387(x)
+ end
+end
+
+def fun_l9_n52(x)
+ if (x < 1)
+ fun_l10_n660(x)
+ else
+ fun_l10_n734(x)
+ end
+end
+
+def fun_l9_n53(x)
+ if (x < 1)
+ fun_l10_n523(x)
+ else
+ fun_l10_n532(x)
+ end
+end
+
+def fun_l9_n54(x)
+ if (x < 1)
+ fun_l10_n847(x)
+ else
+ fun_l10_n586(x)
+ end
+end
+
+def fun_l9_n55(x)
+ if (x < 1)
+ fun_l10_n378(x)
+ else
+ fun_l10_n226(x)
+ end
+end
+
+def fun_l9_n56(x)
+ if (x < 1)
+ fun_l10_n55(x)
+ else
+ fun_l10_n823(x)
+ end
+end
+
+def fun_l9_n57(x)
+ if (x < 1)
+ fun_l10_n931(x)
+ else
+ fun_l10_n268(x)
+ end
+end
+
+def fun_l9_n58(x)
+ if (x < 1)
+ fun_l10_n603(x)
+ else
+ fun_l10_n746(x)
+ end
+end
+
+def fun_l9_n59(x)
+ if (x < 1)
+ fun_l10_n174(x)
+ else
+ fun_l10_n196(x)
+ end
+end
+
+def fun_l9_n60(x)
+ if (x < 1)
+ fun_l10_n45(x)
+ else
+ fun_l10_n907(x)
+ end
+end
+
+def fun_l9_n61(x)
+ if (x < 1)
+ fun_l10_n282(x)
+ else
+ fun_l10_n478(x)
+ end
+end
+
+def fun_l9_n62(x)
+ if (x < 1)
+ fun_l10_n558(x)
+ else
+ fun_l10_n354(x)
+ end
+end
+
+def fun_l9_n63(x)
+ if (x < 1)
+ fun_l10_n729(x)
+ else
+ fun_l10_n275(x)
+ end
+end
+
+def fun_l9_n64(x)
+ if (x < 1)
+ fun_l10_n804(x)
+ else
+ fun_l10_n873(x)
+ end
+end
+
+def fun_l9_n65(x)
+ if (x < 1)
+ fun_l10_n901(x)
+ else
+ fun_l10_n684(x)
+ end
+end
+
+def fun_l9_n66(x)
+ if (x < 1)
+ fun_l10_n542(x)
+ else
+ fun_l10_n668(x)
+ end
+end
+
+def fun_l9_n67(x)
+ if (x < 1)
+ fun_l10_n112(x)
+ else
+ fun_l10_n48(x)
+ end
+end
+
+def fun_l9_n68(x)
+ if (x < 1)
+ fun_l10_n78(x)
+ else
+ fun_l10_n50(x)
+ end
+end
+
+def fun_l9_n69(x)
+ if (x < 1)
+ fun_l10_n595(x)
+ else
+ fun_l10_n163(x)
+ end
+end
+
+def fun_l9_n70(x)
+ if (x < 1)
+ fun_l10_n839(x)
+ else
+ fun_l10_n811(x)
+ end
+end
+
+def fun_l9_n71(x)
+ if (x < 1)
+ fun_l10_n704(x)
+ else
+ fun_l10_n81(x)
+ end
+end
+
+def fun_l9_n72(x)
+ if (x < 1)
+ fun_l10_n708(x)
+ else
+ fun_l10_n711(x)
+ end
+end
+
+def fun_l9_n73(x)
+ if (x < 1)
+ fun_l10_n948(x)
+ else
+ fun_l10_n397(x)
+ end
+end
+
+def fun_l9_n74(x)
+ if (x < 1)
+ fun_l10_n168(x)
+ else
+ fun_l10_n415(x)
+ end
+end
+
+def fun_l9_n75(x)
+ if (x < 1)
+ fun_l10_n191(x)
+ else
+ fun_l10_n547(x)
+ end
+end
+
+def fun_l9_n76(x)
+ if (x < 1)
+ fun_l10_n163(x)
+ else
+ fun_l10_n246(x)
+ end
+end
+
+def fun_l9_n77(x)
+ if (x < 1)
+ fun_l10_n948(x)
+ else
+ fun_l10_n80(x)
+ end
+end
+
+def fun_l9_n78(x)
+ if (x < 1)
+ fun_l10_n178(x)
+ else
+ fun_l10_n698(x)
+ end
+end
+
+def fun_l9_n79(x)
+ if (x < 1)
+ fun_l10_n150(x)
+ else
+ fun_l10_n545(x)
+ end
+end
+
+def fun_l9_n80(x)
+ if (x < 1)
+ fun_l10_n808(x)
+ else
+ fun_l10_n668(x)
+ end
+end
+
+def fun_l9_n81(x)
+ if (x < 1)
+ fun_l10_n597(x)
+ else
+ fun_l10_n908(x)
+ end
+end
+
+def fun_l9_n82(x)
+ if (x < 1)
+ fun_l10_n868(x)
+ else
+ fun_l10_n831(x)
+ end
+end
+
+def fun_l9_n83(x)
+ if (x < 1)
+ fun_l10_n432(x)
+ else
+ fun_l10_n281(x)
+ end
+end
+
+def fun_l9_n84(x)
+ if (x < 1)
+ fun_l10_n906(x)
+ else
+ fun_l10_n838(x)
+ end
+end
+
+def fun_l9_n85(x)
+ if (x < 1)
+ fun_l10_n828(x)
+ else
+ fun_l10_n876(x)
+ end
+end
+
+def fun_l9_n86(x)
+ if (x < 1)
+ fun_l10_n537(x)
+ else
+ fun_l10_n283(x)
+ end
+end
+
+def fun_l9_n87(x)
+ if (x < 1)
+ fun_l10_n108(x)
+ else
+ fun_l10_n157(x)
+ end
+end
+
+def fun_l9_n88(x)
+ if (x < 1)
+ fun_l10_n576(x)
+ else
+ fun_l10_n448(x)
+ end
+end
+
+def fun_l9_n89(x)
+ if (x < 1)
+ fun_l10_n633(x)
+ else
+ fun_l10_n43(x)
+ end
+end
+
+def fun_l9_n90(x)
+ if (x < 1)
+ fun_l10_n114(x)
+ else
+ fun_l10_n44(x)
+ end
+end
+
+def fun_l9_n91(x)
+ if (x < 1)
+ fun_l10_n656(x)
+ else
+ fun_l10_n586(x)
+ end
+end
+
+def fun_l9_n92(x)
+ if (x < 1)
+ fun_l10_n366(x)
+ else
+ fun_l10_n613(x)
+ end
+end
+
+def fun_l9_n93(x)
+ if (x < 1)
+ fun_l10_n174(x)
+ else
+ fun_l10_n250(x)
+ end
+end
+
+def fun_l9_n94(x)
+ if (x < 1)
+ fun_l10_n911(x)
+ else
+ fun_l10_n877(x)
+ end
+end
+
+def fun_l9_n95(x)
+ if (x < 1)
+ fun_l10_n940(x)
+ else
+ fun_l10_n334(x)
+ end
+end
+
+def fun_l9_n96(x)
+ if (x < 1)
+ fun_l10_n473(x)
+ else
+ fun_l10_n914(x)
+ end
+end
+
+def fun_l9_n97(x)
+ if (x < 1)
+ fun_l10_n550(x)
+ else
+ fun_l10_n80(x)
+ end
+end
+
+def fun_l9_n98(x)
+ if (x < 1)
+ fun_l10_n46(x)
+ else
+ fun_l10_n716(x)
+ end
+end
+
+def fun_l9_n99(x)
+ if (x < 1)
+ fun_l10_n294(x)
+ else
+ fun_l10_n615(x)
+ end
+end
+
+def fun_l9_n100(x)
+ if (x < 1)
+ fun_l10_n286(x)
+ else
+ fun_l10_n120(x)
+ end
+end
+
+def fun_l9_n101(x)
+ if (x < 1)
+ fun_l10_n674(x)
+ else
+ fun_l10_n498(x)
+ end
+end
+
+def fun_l9_n102(x)
+ if (x < 1)
+ fun_l10_n700(x)
+ else
+ fun_l10_n35(x)
+ end
+end
+
+def fun_l9_n103(x)
+ if (x < 1)
+ fun_l10_n225(x)
+ else
+ fun_l10_n206(x)
+ end
+end
+
+def fun_l9_n104(x)
+ if (x < 1)
+ fun_l10_n594(x)
+ else
+ fun_l10_n679(x)
+ end
+end
+
+def fun_l9_n105(x)
+ if (x < 1)
+ fun_l10_n148(x)
+ else
+ fun_l10_n449(x)
+ end
+end
+
+def fun_l9_n106(x)
+ if (x < 1)
+ fun_l10_n125(x)
+ else
+ fun_l10_n761(x)
+ end
+end
+
+def fun_l9_n107(x)
+ if (x < 1)
+ fun_l10_n642(x)
+ else
+ fun_l10_n988(x)
+ end
+end
+
+def fun_l9_n108(x)
+ if (x < 1)
+ fun_l10_n952(x)
+ else
+ fun_l10_n436(x)
+ end
+end
+
+def fun_l9_n109(x)
+ if (x < 1)
+ fun_l10_n955(x)
+ else
+ fun_l10_n380(x)
+ end
+end
+
+def fun_l9_n110(x)
+ if (x < 1)
+ fun_l10_n813(x)
+ else
+ fun_l10_n837(x)
+ end
+end
+
+def fun_l9_n111(x)
+ if (x < 1)
+ fun_l10_n471(x)
+ else
+ fun_l10_n69(x)
+ end
+end
+
+def fun_l9_n112(x)
+ if (x < 1)
+ fun_l10_n614(x)
+ else
+ fun_l10_n665(x)
+ end
+end
+
+def fun_l9_n113(x)
+ if (x < 1)
+ fun_l10_n485(x)
+ else
+ fun_l10_n276(x)
+ end
+end
+
+def fun_l9_n114(x)
+ if (x < 1)
+ fun_l10_n171(x)
+ else
+ fun_l10_n457(x)
+ end
+end
+
+def fun_l9_n115(x)
+ if (x < 1)
+ fun_l10_n106(x)
+ else
+ fun_l10_n555(x)
+ end
+end
+
+def fun_l9_n116(x)
+ if (x < 1)
+ fun_l10_n231(x)
+ else
+ fun_l10_n163(x)
+ end
+end
+
+def fun_l9_n117(x)
+ if (x < 1)
+ fun_l10_n569(x)
+ else
+ fun_l10_n345(x)
+ end
+end
+
+def fun_l9_n118(x)
+ if (x < 1)
+ fun_l10_n946(x)
+ else
+ fun_l10_n174(x)
+ end
+end
+
+def fun_l9_n119(x)
+ if (x < 1)
+ fun_l10_n716(x)
+ else
+ fun_l10_n882(x)
+ end
+end
+
+def fun_l9_n120(x)
+ if (x < 1)
+ fun_l10_n628(x)
+ else
+ fun_l10_n838(x)
+ end
+end
+
+def fun_l9_n121(x)
+ if (x < 1)
+ fun_l10_n699(x)
+ else
+ fun_l10_n384(x)
+ end
+end
+
+def fun_l9_n122(x)
+ if (x < 1)
+ fun_l10_n180(x)
+ else
+ fun_l10_n98(x)
+ end
+end
+
+def fun_l9_n123(x)
+ if (x < 1)
+ fun_l10_n177(x)
+ else
+ fun_l10_n635(x)
+ end
+end
+
+def fun_l9_n124(x)
+ if (x < 1)
+ fun_l10_n398(x)
+ else
+ fun_l10_n121(x)
+ end
+end
+
+def fun_l9_n125(x)
+ if (x < 1)
+ fun_l10_n866(x)
+ else
+ fun_l10_n595(x)
+ end
+end
+
+def fun_l9_n126(x)
+ if (x < 1)
+ fun_l10_n9(x)
+ else
+ fun_l10_n901(x)
+ end
+end
+
+def fun_l9_n127(x)
+ if (x < 1)
+ fun_l10_n579(x)
+ else
+ fun_l10_n640(x)
+ end
+end
+
+def fun_l9_n128(x)
+ if (x < 1)
+ fun_l10_n884(x)
+ else
+ fun_l10_n327(x)
+ end
+end
+
+def fun_l9_n129(x)
+ if (x < 1)
+ fun_l10_n553(x)
+ else
+ fun_l10_n73(x)
+ end
+end
+
+def fun_l9_n130(x)
+ if (x < 1)
+ fun_l10_n372(x)
+ else
+ fun_l10_n450(x)
+ end
+end
+
+def fun_l9_n131(x)
+ if (x < 1)
+ fun_l10_n748(x)
+ else
+ fun_l10_n534(x)
+ end
+end
+
+def fun_l9_n132(x)
+ if (x < 1)
+ fun_l10_n529(x)
+ else
+ fun_l10_n689(x)
+ end
+end
+
+def fun_l9_n133(x)
+ if (x < 1)
+ fun_l10_n24(x)
+ else
+ fun_l10_n677(x)
+ end
+end
+
+def fun_l9_n134(x)
+ if (x < 1)
+ fun_l10_n4(x)
+ else
+ fun_l10_n482(x)
+ end
+end
+
+def fun_l9_n135(x)
+ if (x < 1)
+ fun_l10_n314(x)
+ else
+ fun_l10_n509(x)
+ end
+end
+
+def fun_l9_n136(x)
+ if (x < 1)
+ fun_l10_n160(x)
+ else
+ fun_l10_n342(x)
+ end
+end
+
+def fun_l9_n137(x)
+ if (x < 1)
+ fun_l10_n289(x)
+ else
+ fun_l10_n910(x)
+ end
+end
+
+def fun_l9_n138(x)
+ if (x < 1)
+ fun_l10_n926(x)
+ else
+ fun_l10_n752(x)
+ end
+end
+
+def fun_l9_n139(x)
+ if (x < 1)
+ fun_l10_n303(x)
+ else
+ fun_l10_n399(x)
+ end
+end
+
+def fun_l9_n140(x)
+ if (x < 1)
+ fun_l10_n11(x)
+ else
+ fun_l10_n241(x)
+ end
+end
+
+def fun_l9_n141(x)
+ if (x < 1)
+ fun_l10_n528(x)
+ else
+ fun_l10_n727(x)
+ end
+end
+
+def fun_l9_n142(x)
+ if (x < 1)
+ fun_l10_n572(x)
+ else
+ fun_l10_n132(x)
+ end
+end
+
+def fun_l9_n143(x)
+ if (x < 1)
+ fun_l10_n858(x)
+ else
+ fun_l10_n712(x)
+ end
+end
+
+def fun_l9_n144(x)
+ if (x < 1)
+ fun_l10_n662(x)
+ else
+ fun_l10_n128(x)
+ end
+end
+
+def fun_l9_n145(x)
+ if (x < 1)
+ fun_l10_n668(x)
+ else
+ fun_l10_n483(x)
+ end
+end
+
+def fun_l9_n146(x)
+ if (x < 1)
+ fun_l10_n401(x)
+ else
+ fun_l10_n330(x)
+ end
+end
+
+def fun_l9_n147(x)
+ if (x < 1)
+ fun_l10_n103(x)
+ else
+ fun_l10_n859(x)
+ end
+end
+
+def fun_l9_n148(x)
+ if (x < 1)
+ fun_l10_n129(x)
+ else
+ fun_l10_n628(x)
+ end
+end
+
+def fun_l9_n149(x)
+ if (x < 1)
+ fun_l10_n898(x)
+ else
+ fun_l10_n984(x)
+ end
+end
+
+def fun_l9_n150(x)
+ if (x < 1)
+ fun_l10_n574(x)
+ else
+ fun_l10_n59(x)
+ end
+end
+
+def fun_l9_n151(x)
+ if (x < 1)
+ fun_l10_n759(x)
+ else
+ fun_l10_n782(x)
+ end
+end
+
+def fun_l9_n152(x)
+ if (x < 1)
+ fun_l10_n588(x)
+ else
+ fun_l10_n383(x)
+ end
+end
+
+def fun_l9_n153(x)
+ if (x < 1)
+ fun_l10_n889(x)
+ else
+ fun_l10_n628(x)
+ end
+end
+
+def fun_l9_n154(x)
+ if (x < 1)
+ fun_l10_n376(x)
+ else
+ fun_l10_n442(x)
+ end
+end
+
+def fun_l9_n155(x)
+ if (x < 1)
+ fun_l10_n497(x)
+ else
+ fun_l10_n269(x)
+ end
+end
+
+def fun_l9_n156(x)
+ if (x < 1)
+ fun_l10_n976(x)
+ else
+ fun_l10_n829(x)
+ end
+end
+
+def fun_l9_n157(x)
+ if (x < 1)
+ fun_l10_n366(x)
+ else
+ fun_l10_n416(x)
+ end
+end
+
+def fun_l9_n158(x)
+ if (x < 1)
+ fun_l10_n712(x)
+ else
+ fun_l10_n19(x)
+ end
+end
+
+def fun_l9_n159(x)
+ if (x < 1)
+ fun_l10_n151(x)
+ else
+ fun_l10_n129(x)
+ end
+end
+
+def fun_l9_n160(x)
+ if (x < 1)
+ fun_l10_n621(x)
+ else
+ fun_l10_n385(x)
+ end
+end
+
+def fun_l9_n161(x)
+ if (x < 1)
+ fun_l10_n626(x)
+ else
+ fun_l10_n686(x)
+ end
+end
+
+def fun_l9_n162(x)
+ if (x < 1)
+ fun_l10_n165(x)
+ else
+ fun_l10_n922(x)
+ end
+end
+
+def fun_l9_n163(x)
+ if (x < 1)
+ fun_l10_n670(x)
+ else
+ fun_l10_n889(x)
+ end
+end
+
+def fun_l9_n164(x)
+ if (x < 1)
+ fun_l10_n346(x)
+ else
+ fun_l10_n292(x)
+ end
+end
+
+def fun_l9_n165(x)
+ if (x < 1)
+ fun_l10_n812(x)
+ else
+ fun_l10_n799(x)
+ end
+end
+
+def fun_l9_n166(x)
+ if (x < 1)
+ fun_l10_n21(x)
+ else
+ fun_l10_n641(x)
+ end
+end
+
+def fun_l9_n167(x)
+ if (x < 1)
+ fun_l10_n268(x)
+ else
+ fun_l10_n943(x)
+ end
+end
+
+def fun_l9_n168(x)
+ if (x < 1)
+ fun_l10_n349(x)
+ else
+ fun_l10_n620(x)
+ end
+end
+
+def fun_l9_n169(x)
+ if (x < 1)
+ fun_l10_n894(x)
+ else
+ fun_l10_n625(x)
+ end
+end
+
+def fun_l9_n170(x)
+ if (x < 1)
+ fun_l10_n732(x)
+ else
+ fun_l10_n518(x)
+ end
+end
+
+def fun_l9_n171(x)
+ if (x < 1)
+ fun_l10_n272(x)
+ else
+ fun_l10_n148(x)
+ end
+end
+
+def fun_l9_n172(x)
+ if (x < 1)
+ fun_l10_n701(x)
+ else
+ fun_l10_n227(x)
+ end
+end
+
+def fun_l9_n173(x)
+ if (x < 1)
+ fun_l10_n833(x)
+ else
+ fun_l10_n853(x)
+ end
+end
+
+def fun_l9_n174(x)
+ if (x < 1)
+ fun_l10_n643(x)
+ else
+ fun_l10_n314(x)
+ end
+end
+
+def fun_l9_n175(x)
+ if (x < 1)
+ fun_l10_n217(x)
+ else
+ fun_l10_n64(x)
+ end
+end
+
+def fun_l9_n176(x)
+ if (x < 1)
+ fun_l10_n204(x)
+ else
+ fun_l10_n990(x)
+ end
+end
+
+def fun_l9_n177(x)
+ if (x < 1)
+ fun_l10_n130(x)
+ else
+ fun_l10_n829(x)
+ end
+end
+
+def fun_l9_n178(x)
+ if (x < 1)
+ fun_l10_n260(x)
+ else
+ fun_l10_n881(x)
+ end
+end
+
+def fun_l9_n179(x)
+ if (x < 1)
+ fun_l10_n728(x)
+ else
+ fun_l10_n491(x)
+ end
+end
+
+def fun_l9_n180(x)
+ if (x < 1)
+ fun_l10_n456(x)
+ else
+ fun_l10_n221(x)
+ end
+end
+
+def fun_l9_n181(x)
+ if (x < 1)
+ fun_l10_n634(x)
+ else
+ fun_l10_n166(x)
+ end
+end
+
+def fun_l9_n182(x)
+ if (x < 1)
+ fun_l10_n427(x)
+ else
+ fun_l10_n452(x)
+ end
+end
+
+def fun_l9_n183(x)
+ if (x < 1)
+ fun_l10_n754(x)
+ else
+ fun_l10_n54(x)
+ end
+end
+
+def fun_l9_n184(x)
+ if (x < 1)
+ fun_l10_n137(x)
+ else
+ fun_l10_n155(x)
+ end
+end
+
+def fun_l9_n185(x)
+ if (x < 1)
+ fun_l10_n611(x)
+ else
+ fun_l10_n573(x)
+ end
+end
+
+def fun_l9_n186(x)
+ if (x < 1)
+ fun_l10_n694(x)
+ else
+ fun_l10_n890(x)
+ end
+end
+
+def fun_l9_n187(x)
+ if (x < 1)
+ fun_l10_n533(x)
+ else
+ fun_l10_n102(x)
+ end
+end
+
+def fun_l9_n188(x)
+ if (x < 1)
+ fun_l10_n400(x)
+ else
+ fun_l10_n838(x)
+ end
+end
+
+def fun_l9_n189(x)
+ if (x < 1)
+ fun_l10_n783(x)
+ else
+ fun_l10_n620(x)
+ end
+end
+
+def fun_l9_n190(x)
+ if (x < 1)
+ fun_l10_n209(x)
+ else
+ fun_l10_n777(x)
+ end
+end
+
+def fun_l9_n191(x)
+ if (x < 1)
+ fun_l10_n760(x)
+ else
+ fun_l10_n299(x)
+ end
+end
+
+def fun_l9_n192(x)
+ if (x < 1)
+ fun_l10_n306(x)
+ else
+ fun_l10_n509(x)
+ end
+end
+
+def fun_l9_n193(x)
+ if (x < 1)
+ fun_l10_n842(x)
+ else
+ fun_l10_n0(x)
+ end
+end
+
+def fun_l9_n194(x)
+ if (x < 1)
+ fun_l10_n620(x)
+ else
+ fun_l10_n757(x)
+ end
+end
+
+def fun_l9_n195(x)
+ if (x < 1)
+ fun_l10_n944(x)
+ else
+ fun_l10_n257(x)
+ end
+end
+
+def fun_l9_n196(x)
+ if (x < 1)
+ fun_l10_n222(x)
+ else
+ fun_l10_n11(x)
+ end
+end
+
+def fun_l9_n197(x)
+ if (x < 1)
+ fun_l10_n419(x)
+ else
+ fun_l10_n704(x)
+ end
+end
+
+def fun_l9_n198(x)
+ if (x < 1)
+ fun_l10_n656(x)
+ else
+ fun_l10_n341(x)
+ end
+end
+
+def fun_l9_n199(x)
+ if (x < 1)
+ fun_l10_n129(x)
+ else
+ fun_l10_n815(x)
+ end
+end
+
+def fun_l9_n200(x)
+ if (x < 1)
+ fun_l10_n768(x)
+ else
+ fun_l10_n924(x)
+ end
+end
+
+def fun_l9_n201(x)
+ if (x < 1)
+ fun_l10_n439(x)
+ else
+ fun_l10_n361(x)
+ end
+end
+
+def fun_l9_n202(x)
+ if (x < 1)
+ fun_l10_n421(x)
+ else
+ fun_l10_n937(x)
+ end
+end
+
+def fun_l9_n203(x)
+ if (x < 1)
+ fun_l10_n323(x)
+ else
+ fun_l10_n262(x)
+ end
+end
+
+def fun_l9_n204(x)
+ if (x < 1)
+ fun_l10_n335(x)
+ else
+ fun_l10_n87(x)
+ end
+end
+
+def fun_l9_n205(x)
+ if (x < 1)
+ fun_l10_n973(x)
+ else
+ fun_l10_n262(x)
+ end
+end
+
+def fun_l9_n206(x)
+ if (x < 1)
+ fun_l10_n494(x)
+ else
+ fun_l10_n430(x)
+ end
+end
+
+def fun_l9_n207(x)
+ if (x < 1)
+ fun_l10_n482(x)
+ else
+ fun_l10_n828(x)
+ end
+end
+
+def fun_l9_n208(x)
+ if (x < 1)
+ fun_l10_n820(x)
+ else
+ fun_l10_n646(x)
+ end
+end
+
+def fun_l9_n209(x)
+ if (x < 1)
+ fun_l10_n669(x)
+ else
+ fun_l10_n176(x)
+ end
+end
+
+def fun_l9_n210(x)
+ if (x < 1)
+ fun_l10_n165(x)
+ else
+ fun_l10_n963(x)
+ end
+end
+
+def fun_l9_n211(x)
+ if (x < 1)
+ fun_l10_n772(x)
+ else
+ fun_l10_n49(x)
+ end
+end
+
+def fun_l9_n212(x)
+ if (x < 1)
+ fun_l10_n167(x)
+ else
+ fun_l10_n598(x)
+ end
+end
+
+def fun_l9_n213(x)
+ if (x < 1)
+ fun_l10_n552(x)
+ else
+ fun_l10_n374(x)
+ end
+end
+
+def fun_l9_n214(x)
+ if (x < 1)
+ fun_l10_n39(x)
+ else
+ fun_l10_n470(x)
+ end
+end
+
+def fun_l9_n215(x)
+ if (x < 1)
+ fun_l10_n489(x)
+ else
+ fun_l10_n812(x)
+ end
+end
+
+def fun_l9_n216(x)
+ if (x < 1)
+ fun_l10_n390(x)
+ else
+ fun_l10_n928(x)
+ end
+end
+
+def fun_l9_n217(x)
+ if (x < 1)
+ fun_l10_n909(x)
+ else
+ fun_l10_n876(x)
+ end
+end
+
+def fun_l9_n218(x)
+ if (x < 1)
+ fun_l10_n781(x)
+ else
+ fun_l10_n799(x)
+ end
+end
+
+def fun_l9_n219(x)
+ if (x < 1)
+ fun_l10_n958(x)
+ else
+ fun_l10_n697(x)
+ end
+end
+
+def fun_l9_n220(x)
+ if (x < 1)
+ fun_l10_n577(x)
+ else
+ fun_l10_n667(x)
+ end
+end
+
+def fun_l9_n221(x)
+ if (x < 1)
+ fun_l10_n206(x)
+ else
+ fun_l10_n573(x)
+ end
+end
+
+def fun_l9_n222(x)
+ if (x < 1)
+ fun_l10_n389(x)
+ else
+ fun_l10_n659(x)
+ end
+end
+
+def fun_l9_n223(x)
+ if (x < 1)
+ fun_l10_n951(x)
+ else
+ fun_l10_n572(x)
+ end
+end
+
+def fun_l9_n224(x)
+ if (x < 1)
+ fun_l10_n158(x)
+ else
+ fun_l10_n500(x)
+ end
+end
+
+def fun_l9_n225(x)
+ if (x < 1)
+ fun_l10_n681(x)
+ else
+ fun_l10_n983(x)
+ end
+end
+
+def fun_l9_n226(x)
+ if (x < 1)
+ fun_l10_n987(x)
+ else
+ fun_l10_n116(x)
+ end
+end
+
+def fun_l9_n227(x)
+ if (x < 1)
+ fun_l10_n347(x)
+ else
+ fun_l10_n606(x)
+ end
+end
+
+def fun_l9_n228(x)
+ if (x < 1)
+ fun_l10_n566(x)
+ else
+ fun_l10_n77(x)
+ end
+end
+
+def fun_l9_n229(x)
+ if (x < 1)
+ fun_l10_n879(x)
+ else
+ fun_l10_n66(x)
+ end
+end
+
+def fun_l9_n230(x)
+ if (x < 1)
+ fun_l10_n355(x)
+ else
+ fun_l10_n97(x)
+ end
+end
+
+def fun_l9_n231(x)
+ if (x < 1)
+ fun_l10_n938(x)
+ else
+ fun_l10_n5(x)
+ end
+end
+
+def fun_l9_n232(x)
+ if (x < 1)
+ fun_l10_n684(x)
+ else
+ fun_l10_n528(x)
+ end
+end
+
+def fun_l9_n233(x)
+ if (x < 1)
+ fun_l10_n500(x)
+ else
+ fun_l10_n246(x)
+ end
+end
+
+def fun_l9_n234(x)
+ if (x < 1)
+ fun_l10_n610(x)
+ else
+ fun_l10_n61(x)
+ end
+end
+
+def fun_l9_n235(x)
+ if (x < 1)
+ fun_l10_n199(x)
+ else
+ fun_l10_n838(x)
+ end
+end
+
+def fun_l9_n236(x)
+ if (x < 1)
+ fun_l10_n820(x)
+ else
+ fun_l10_n633(x)
+ end
+end
+
+def fun_l9_n237(x)
+ if (x < 1)
+ fun_l10_n216(x)
+ else
+ fun_l10_n546(x)
+ end
+end
+
+def fun_l9_n238(x)
+ if (x < 1)
+ fun_l10_n555(x)
+ else
+ fun_l10_n153(x)
+ end
+end
+
+def fun_l9_n239(x)
+ if (x < 1)
+ fun_l10_n236(x)
+ else
+ fun_l10_n231(x)
+ end
+end
+
+def fun_l9_n240(x)
+ if (x < 1)
+ fun_l10_n775(x)
+ else
+ fun_l10_n823(x)
+ end
+end
+
+def fun_l9_n241(x)
+ if (x < 1)
+ fun_l10_n275(x)
+ else
+ fun_l10_n519(x)
+ end
+end
+
+def fun_l9_n242(x)
+ if (x < 1)
+ fun_l10_n239(x)
+ else
+ fun_l10_n791(x)
+ end
+end
+
+def fun_l9_n243(x)
+ if (x < 1)
+ fun_l10_n639(x)
+ else
+ fun_l10_n972(x)
+ end
+end
+
+def fun_l9_n244(x)
+ if (x < 1)
+ fun_l10_n5(x)
+ else
+ fun_l10_n510(x)
+ end
+end
+
+def fun_l9_n245(x)
+ if (x < 1)
+ fun_l10_n256(x)
+ else
+ fun_l10_n298(x)
+ end
+end
+
+def fun_l9_n246(x)
+ if (x < 1)
+ fun_l10_n139(x)
+ else
+ fun_l10_n385(x)
+ end
+end
+
+def fun_l9_n247(x)
+ if (x < 1)
+ fun_l10_n4(x)
+ else
+ fun_l10_n323(x)
+ end
+end
+
+def fun_l9_n248(x)
+ if (x < 1)
+ fun_l10_n166(x)
+ else
+ fun_l10_n539(x)
+ end
+end
+
+def fun_l9_n249(x)
+ if (x < 1)
+ fun_l10_n374(x)
+ else
+ fun_l10_n351(x)
+ end
+end
+
+def fun_l9_n250(x)
+ if (x < 1)
+ fun_l10_n650(x)
+ else
+ fun_l10_n791(x)
+ end
+end
+
+def fun_l9_n251(x)
+ if (x < 1)
+ fun_l10_n799(x)
+ else
+ fun_l10_n990(x)
+ end
+end
+
+def fun_l9_n252(x)
+ if (x < 1)
+ fun_l10_n388(x)
+ else
+ fun_l10_n887(x)
+ end
+end
+
+def fun_l9_n253(x)
+ if (x < 1)
+ fun_l10_n564(x)
+ else
+ fun_l10_n997(x)
+ end
+end
+
+def fun_l9_n254(x)
+ if (x < 1)
+ fun_l10_n580(x)
+ else
+ fun_l10_n646(x)
+ end
+end
+
+def fun_l9_n255(x)
+ if (x < 1)
+ fun_l10_n0(x)
+ else
+ fun_l10_n480(x)
+ end
+end
+
+def fun_l9_n256(x)
+ if (x < 1)
+ fun_l10_n606(x)
+ else
+ fun_l10_n48(x)
+ end
+end
+
+def fun_l9_n257(x)
+ if (x < 1)
+ fun_l10_n601(x)
+ else
+ fun_l10_n657(x)
+ end
+end
+
+def fun_l9_n258(x)
+ if (x < 1)
+ fun_l10_n419(x)
+ else
+ fun_l10_n909(x)
+ end
+end
+
+def fun_l9_n259(x)
+ if (x < 1)
+ fun_l10_n194(x)
+ else
+ fun_l10_n961(x)
+ end
+end
+
+def fun_l9_n260(x)
+ if (x < 1)
+ fun_l10_n876(x)
+ else
+ fun_l10_n345(x)
+ end
+end
+
+def fun_l9_n261(x)
+ if (x < 1)
+ fun_l10_n643(x)
+ else
+ fun_l10_n905(x)
+ end
+end
+
+def fun_l9_n262(x)
+ if (x < 1)
+ fun_l10_n105(x)
+ else
+ fun_l10_n61(x)
+ end
+end
+
+def fun_l9_n263(x)
+ if (x < 1)
+ fun_l10_n610(x)
+ else
+ fun_l10_n527(x)
+ end
+end
+
+def fun_l9_n264(x)
+ if (x < 1)
+ fun_l10_n183(x)
+ else
+ fun_l10_n51(x)
+ end
+end
+
+def fun_l9_n265(x)
+ if (x < 1)
+ fun_l10_n800(x)
+ else
+ fun_l10_n103(x)
+ end
+end
+
+def fun_l9_n266(x)
+ if (x < 1)
+ fun_l10_n501(x)
+ else
+ fun_l10_n293(x)
+ end
+end
+
+def fun_l9_n267(x)
+ if (x < 1)
+ fun_l10_n207(x)
+ else
+ fun_l10_n162(x)
+ end
+end
+
+def fun_l9_n268(x)
+ if (x < 1)
+ fun_l10_n901(x)
+ else
+ fun_l10_n914(x)
+ end
+end
+
+def fun_l9_n269(x)
+ if (x < 1)
+ fun_l10_n711(x)
+ else
+ fun_l10_n227(x)
+ end
+end
+
+def fun_l9_n270(x)
+ if (x < 1)
+ fun_l10_n445(x)
+ else
+ fun_l10_n227(x)
+ end
+end
+
+def fun_l9_n271(x)
+ if (x < 1)
+ fun_l10_n585(x)
+ else
+ fun_l10_n371(x)
+ end
+end
+
+def fun_l9_n272(x)
+ if (x < 1)
+ fun_l10_n137(x)
+ else
+ fun_l10_n678(x)
+ end
+end
+
+def fun_l9_n273(x)
+ if (x < 1)
+ fun_l10_n284(x)
+ else
+ fun_l10_n801(x)
+ end
+end
+
+def fun_l9_n274(x)
+ if (x < 1)
+ fun_l10_n829(x)
+ else
+ fun_l10_n456(x)
+ end
+end
+
+def fun_l9_n275(x)
+ if (x < 1)
+ fun_l10_n663(x)
+ else
+ fun_l10_n529(x)
+ end
+end
+
+def fun_l9_n276(x)
+ if (x < 1)
+ fun_l10_n154(x)
+ else
+ fun_l10_n421(x)
+ end
+end
+
+def fun_l9_n277(x)
+ if (x < 1)
+ fun_l10_n778(x)
+ else
+ fun_l10_n325(x)
+ end
+end
+
+def fun_l9_n278(x)
+ if (x < 1)
+ fun_l10_n179(x)
+ else
+ fun_l10_n369(x)
+ end
+end
+
+def fun_l9_n279(x)
+ if (x < 1)
+ fun_l10_n800(x)
+ else
+ fun_l10_n488(x)
+ end
+end
+
+def fun_l9_n280(x)
+ if (x < 1)
+ fun_l10_n617(x)
+ else
+ fun_l10_n1(x)
+ end
+end
+
+def fun_l9_n281(x)
+ if (x < 1)
+ fun_l10_n951(x)
+ else
+ fun_l10_n763(x)
+ end
+end
+
+def fun_l9_n282(x)
+ if (x < 1)
+ fun_l10_n537(x)
+ else
+ fun_l10_n541(x)
+ end
+end
+
+def fun_l9_n283(x)
+ if (x < 1)
+ fun_l10_n664(x)
+ else
+ fun_l10_n854(x)
+ end
+end
+
+def fun_l9_n284(x)
+ if (x < 1)
+ fun_l10_n711(x)
+ else
+ fun_l10_n767(x)
+ end
+end
+
+def fun_l9_n285(x)
+ if (x < 1)
+ fun_l10_n211(x)
+ else
+ fun_l10_n733(x)
+ end
+end
+
+def fun_l9_n286(x)
+ if (x < 1)
+ fun_l10_n524(x)
+ else
+ fun_l10_n850(x)
+ end
+end
+
+def fun_l9_n287(x)
+ if (x < 1)
+ fun_l10_n270(x)
+ else
+ fun_l10_n798(x)
+ end
+end
+
+def fun_l9_n288(x)
+ if (x < 1)
+ fun_l10_n906(x)
+ else
+ fun_l10_n408(x)
+ end
+end
+
+def fun_l9_n289(x)
+ if (x < 1)
+ fun_l10_n873(x)
+ else
+ fun_l10_n298(x)
+ end
+end
+
+def fun_l9_n290(x)
+ if (x < 1)
+ fun_l10_n535(x)
+ else
+ fun_l10_n946(x)
+ end
+end
+
+def fun_l9_n291(x)
+ if (x < 1)
+ fun_l10_n290(x)
+ else
+ fun_l10_n631(x)
+ end
+end
+
+def fun_l9_n292(x)
+ if (x < 1)
+ fun_l10_n223(x)
+ else
+ fun_l10_n165(x)
+ end
+end
+
+def fun_l9_n293(x)
+ if (x < 1)
+ fun_l10_n768(x)
+ else
+ fun_l10_n512(x)
+ end
+end
+
+def fun_l9_n294(x)
+ if (x < 1)
+ fun_l10_n133(x)
+ else
+ fun_l10_n986(x)
+ end
+end
+
+def fun_l9_n295(x)
+ if (x < 1)
+ fun_l10_n657(x)
+ else
+ fun_l10_n914(x)
+ end
+end
+
+def fun_l9_n296(x)
+ if (x < 1)
+ fun_l10_n444(x)
+ else
+ fun_l10_n490(x)
+ end
+end
+
+def fun_l9_n297(x)
+ if (x < 1)
+ fun_l10_n478(x)
+ else
+ fun_l10_n979(x)
+ end
+end
+
+def fun_l9_n298(x)
+ if (x < 1)
+ fun_l10_n994(x)
+ else
+ fun_l10_n945(x)
+ end
+end
+
+def fun_l9_n299(x)
+ if (x < 1)
+ fun_l10_n865(x)
+ else
+ fun_l10_n206(x)
+ end
+end
+
+def fun_l9_n300(x)
+ if (x < 1)
+ fun_l10_n678(x)
+ else
+ fun_l10_n103(x)
+ end
+end
+
+def fun_l9_n301(x)
+ if (x < 1)
+ fun_l10_n115(x)
+ else
+ fun_l10_n742(x)
+ end
+end
+
+def fun_l9_n302(x)
+ if (x < 1)
+ fun_l10_n677(x)
+ else
+ fun_l10_n446(x)
+ end
+end
+
+def fun_l9_n303(x)
+ if (x < 1)
+ fun_l10_n144(x)
+ else
+ fun_l10_n856(x)
+ end
+end
+
+def fun_l9_n304(x)
+ if (x < 1)
+ fun_l10_n751(x)
+ else
+ fun_l10_n989(x)
+ end
+end
+
+def fun_l9_n305(x)
+ if (x < 1)
+ fun_l10_n200(x)
+ else
+ fun_l10_n97(x)
+ end
+end
+
+def fun_l9_n306(x)
+ if (x < 1)
+ fun_l10_n685(x)
+ else
+ fun_l10_n663(x)
+ end
+end
+
+def fun_l9_n307(x)
+ if (x < 1)
+ fun_l10_n831(x)
+ else
+ fun_l10_n770(x)
+ end
+end
+
+def fun_l9_n308(x)
+ if (x < 1)
+ fun_l10_n467(x)
+ else
+ fun_l10_n715(x)
+ end
+end
+
+def fun_l9_n309(x)
+ if (x < 1)
+ fun_l10_n676(x)
+ else
+ fun_l10_n885(x)
+ end
+end
+
+def fun_l9_n310(x)
+ if (x < 1)
+ fun_l10_n382(x)
+ else
+ fun_l10_n687(x)
+ end
+end
+
+def fun_l9_n311(x)
+ if (x < 1)
+ fun_l10_n489(x)
+ else
+ fun_l10_n810(x)
+ end
+end
+
+def fun_l9_n312(x)
+ if (x < 1)
+ fun_l10_n922(x)
+ else
+ fun_l10_n81(x)
+ end
+end
+
+def fun_l9_n313(x)
+ if (x < 1)
+ fun_l10_n788(x)
+ else
+ fun_l10_n519(x)
+ end
+end
+
+def fun_l9_n314(x)
+ if (x < 1)
+ fun_l10_n830(x)
+ else
+ fun_l10_n486(x)
+ end
+end
+
+def fun_l9_n315(x)
+ if (x < 1)
+ fun_l10_n848(x)
+ else
+ fun_l10_n250(x)
+ end
+end
+
+def fun_l9_n316(x)
+ if (x < 1)
+ fun_l10_n933(x)
+ else
+ fun_l10_n268(x)
+ end
+end
+
+def fun_l9_n317(x)
+ if (x < 1)
+ fun_l10_n659(x)
+ else
+ fun_l10_n91(x)
+ end
+end
+
+def fun_l9_n318(x)
+ if (x < 1)
+ fun_l10_n417(x)
+ else
+ fun_l10_n99(x)
+ end
+end
+
+def fun_l9_n319(x)
+ if (x < 1)
+ fun_l10_n781(x)
+ else
+ fun_l10_n770(x)
+ end
+end
+
+def fun_l9_n320(x)
+ if (x < 1)
+ fun_l10_n820(x)
+ else
+ fun_l10_n836(x)
+ end
+end
+
+def fun_l9_n321(x)
+ if (x < 1)
+ fun_l10_n865(x)
+ else
+ fun_l10_n232(x)
+ end
+end
+
+def fun_l9_n322(x)
+ if (x < 1)
+ fun_l10_n793(x)
+ else
+ fun_l10_n856(x)
+ end
+end
+
+def fun_l9_n323(x)
+ if (x < 1)
+ fun_l10_n91(x)
+ else
+ fun_l10_n356(x)
+ end
+end
+
+def fun_l9_n324(x)
+ if (x < 1)
+ fun_l10_n262(x)
+ else
+ fun_l10_n776(x)
+ end
+end
+
+def fun_l9_n325(x)
+ if (x < 1)
+ fun_l10_n733(x)
+ else
+ fun_l10_n866(x)
+ end
+end
+
+def fun_l9_n326(x)
+ if (x < 1)
+ fun_l10_n798(x)
+ else
+ fun_l10_n703(x)
+ end
+end
+
+def fun_l9_n327(x)
+ if (x < 1)
+ fun_l10_n478(x)
+ else
+ fun_l10_n181(x)
+ end
+end
+
+def fun_l9_n328(x)
+ if (x < 1)
+ fun_l10_n66(x)
+ else
+ fun_l10_n736(x)
+ end
+end
+
+def fun_l9_n329(x)
+ if (x < 1)
+ fun_l10_n388(x)
+ else
+ fun_l10_n122(x)
+ end
+end
+
+def fun_l9_n330(x)
+ if (x < 1)
+ fun_l10_n382(x)
+ else
+ fun_l10_n85(x)
+ end
+end
+
+def fun_l9_n331(x)
+ if (x < 1)
+ fun_l10_n987(x)
+ else
+ fun_l10_n769(x)
+ end
+end
+
+def fun_l9_n332(x)
+ if (x < 1)
+ fun_l10_n644(x)
+ else
+ fun_l10_n230(x)
+ end
+end
+
+def fun_l9_n333(x)
+ if (x < 1)
+ fun_l10_n604(x)
+ else
+ fun_l10_n157(x)
+ end
+end
+
+def fun_l9_n334(x)
+ if (x < 1)
+ fun_l10_n50(x)
+ else
+ fun_l10_n417(x)
+ end
+end
+
+def fun_l9_n335(x)
+ if (x < 1)
+ fun_l10_n37(x)
+ else
+ fun_l10_n564(x)
+ end
+end
+
+def fun_l9_n336(x)
+ if (x < 1)
+ fun_l10_n265(x)
+ else
+ fun_l10_n330(x)
+ end
+end
+
+def fun_l9_n337(x)
+ if (x < 1)
+ fun_l10_n816(x)
+ else
+ fun_l10_n723(x)
+ end
+end
+
+def fun_l9_n338(x)
+ if (x < 1)
+ fun_l10_n583(x)
+ else
+ fun_l10_n193(x)
+ end
+end
+
+def fun_l9_n339(x)
+ if (x < 1)
+ fun_l10_n552(x)
+ else
+ fun_l10_n710(x)
+ end
+end
+
+def fun_l9_n340(x)
+ if (x < 1)
+ fun_l10_n594(x)
+ else
+ fun_l10_n323(x)
+ end
+end
+
+def fun_l9_n341(x)
+ if (x < 1)
+ fun_l10_n727(x)
+ else
+ fun_l10_n305(x)
+ end
+end
+
+def fun_l9_n342(x)
+ if (x < 1)
+ fun_l10_n621(x)
+ else
+ fun_l10_n917(x)
+ end
+end
+
+def fun_l9_n343(x)
+ if (x < 1)
+ fun_l10_n634(x)
+ else
+ fun_l10_n36(x)
+ end
+end
+
+def fun_l9_n344(x)
+ if (x < 1)
+ fun_l10_n792(x)
+ else
+ fun_l10_n438(x)
+ end
+end
+
+def fun_l9_n345(x)
+ if (x < 1)
+ fun_l10_n399(x)
+ else
+ fun_l10_n577(x)
+ end
+end
+
+def fun_l9_n346(x)
+ if (x < 1)
+ fun_l10_n110(x)
+ else
+ fun_l10_n120(x)
+ end
+end
+
+def fun_l9_n347(x)
+ if (x < 1)
+ fun_l10_n521(x)
+ else
+ fun_l10_n111(x)
+ end
+end
+
+def fun_l9_n348(x)
+ if (x < 1)
+ fun_l10_n134(x)
+ else
+ fun_l10_n49(x)
+ end
+end
+
+def fun_l9_n349(x)
+ if (x < 1)
+ fun_l10_n353(x)
+ else
+ fun_l10_n156(x)
+ end
+end
+
+def fun_l9_n350(x)
+ if (x < 1)
+ fun_l10_n532(x)
+ else
+ fun_l10_n796(x)
+ end
+end
+
+def fun_l9_n351(x)
+ if (x < 1)
+ fun_l10_n896(x)
+ else
+ fun_l10_n176(x)
+ end
+end
+
+def fun_l9_n352(x)
+ if (x < 1)
+ fun_l10_n857(x)
+ else
+ fun_l10_n798(x)
+ end
+end
+
+def fun_l9_n353(x)
+ if (x < 1)
+ fun_l10_n676(x)
+ else
+ fun_l10_n870(x)
+ end
+end
+
+def fun_l9_n354(x)
+ if (x < 1)
+ fun_l10_n806(x)
+ else
+ fun_l10_n951(x)
+ end
+end
+
+def fun_l9_n355(x)
+ if (x < 1)
+ fun_l10_n841(x)
+ else
+ fun_l10_n918(x)
+ end
+end
+
+def fun_l9_n356(x)
+ if (x < 1)
+ fun_l10_n226(x)
+ else
+ fun_l10_n514(x)
+ end
+end
+
+def fun_l9_n357(x)
+ if (x < 1)
+ fun_l10_n289(x)
+ else
+ fun_l10_n911(x)
+ end
+end
+
+def fun_l9_n358(x)
+ if (x < 1)
+ fun_l10_n697(x)
+ else
+ fun_l10_n138(x)
+ end
+end
+
+def fun_l9_n359(x)
+ if (x < 1)
+ fun_l10_n432(x)
+ else
+ fun_l10_n88(x)
+ end
+end
+
+def fun_l9_n360(x)
+ if (x < 1)
+ fun_l10_n351(x)
+ else
+ fun_l10_n968(x)
+ end
+end
+
+def fun_l9_n361(x)
+ if (x < 1)
+ fun_l10_n782(x)
+ else
+ fun_l10_n506(x)
+ end
+end
+
+def fun_l9_n362(x)
+ if (x < 1)
+ fun_l10_n875(x)
+ else
+ fun_l10_n459(x)
+ end
+end
+
+def fun_l9_n363(x)
+ if (x < 1)
+ fun_l10_n2(x)
+ else
+ fun_l10_n468(x)
+ end
+end
+
+def fun_l9_n364(x)
+ if (x < 1)
+ fun_l10_n151(x)
+ else
+ fun_l10_n538(x)
+ end
+end
+
+def fun_l9_n365(x)
+ if (x < 1)
+ fun_l10_n203(x)
+ else
+ fun_l10_n890(x)
+ end
+end
+
+def fun_l9_n366(x)
+ if (x < 1)
+ fun_l10_n612(x)
+ else
+ fun_l10_n483(x)
+ end
+end
+
+def fun_l9_n367(x)
+ if (x < 1)
+ fun_l10_n465(x)
+ else
+ fun_l10_n724(x)
+ end
+end
+
+def fun_l9_n368(x)
+ if (x < 1)
+ fun_l10_n745(x)
+ else
+ fun_l10_n92(x)
+ end
+end
+
+def fun_l9_n369(x)
+ if (x < 1)
+ fun_l10_n312(x)
+ else
+ fun_l10_n754(x)
+ end
+end
+
+def fun_l9_n370(x)
+ if (x < 1)
+ fun_l10_n432(x)
+ else
+ fun_l10_n234(x)
+ end
+end
+
+def fun_l9_n371(x)
+ if (x < 1)
+ fun_l10_n629(x)
+ else
+ fun_l10_n751(x)
+ end
+end
+
+def fun_l9_n372(x)
+ if (x < 1)
+ fun_l10_n142(x)
+ else
+ fun_l10_n381(x)
+ end
+end
+
+def fun_l9_n373(x)
+ if (x < 1)
+ fun_l10_n490(x)
+ else
+ fun_l10_n405(x)
+ end
+end
+
+def fun_l9_n374(x)
+ if (x < 1)
+ fun_l10_n197(x)
+ else
+ fun_l10_n574(x)
+ end
+end
+
+def fun_l9_n375(x)
+ if (x < 1)
+ fun_l10_n808(x)
+ else
+ fun_l10_n753(x)
+ end
+end
+
+def fun_l9_n376(x)
+ if (x < 1)
+ fun_l10_n195(x)
+ else
+ fun_l10_n186(x)
+ end
+end
+
+def fun_l9_n377(x)
+ if (x < 1)
+ fun_l10_n172(x)
+ else
+ fun_l10_n233(x)
+ end
+end
+
+def fun_l9_n378(x)
+ if (x < 1)
+ fun_l10_n723(x)
+ else
+ fun_l10_n919(x)
+ end
+end
+
+def fun_l9_n379(x)
+ if (x < 1)
+ fun_l10_n937(x)
+ else
+ fun_l10_n149(x)
+ end
+end
+
+def fun_l9_n380(x)
+ if (x < 1)
+ fun_l10_n676(x)
+ else
+ fun_l10_n502(x)
+ end
+end
+
+def fun_l9_n381(x)
+ if (x < 1)
+ fun_l10_n756(x)
+ else
+ fun_l10_n346(x)
+ end
+end
+
+def fun_l9_n382(x)
+ if (x < 1)
+ fun_l10_n477(x)
+ else
+ fun_l10_n179(x)
+ end
+end
+
+def fun_l9_n383(x)
+ if (x < 1)
+ fun_l10_n729(x)
+ else
+ fun_l10_n862(x)
+ end
+end
+
+def fun_l9_n384(x)
+ if (x < 1)
+ fun_l10_n406(x)
+ else
+ fun_l10_n145(x)
+ end
+end
+
+def fun_l9_n385(x)
+ if (x < 1)
+ fun_l10_n239(x)
+ else
+ fun_l10_n169(x)
+ end
+end
+
+def fun_l9_n386(x)
+ if (x < 1)
+ fun_l10_n596(x)
+ else
+ fun_l10_n971(x)
+ end
+end
+
+def fun_l9_n387(x)
+ if (x < 1)
+ fun_l10_n466(x)
+ else
+ fun_l10_n488(x)
+ end
+end
+
+def fun_l9_n388(x)
+ if (x < 1)
+ fun_l10_n711(x)
+ else
+ fun_l10_n553(x)
+ end
+end
+
+def fun_l9_n389(x)
+ if (x < 1)
+ fun_l10_n776(x)
+ else
+ fun_l10_n227(x)
+ end
+end
+
+def fun_l9_n390(x)
+ if (x < 1)
+ fun_l10_n872(x)
+ else
+ fun_l10_n901(x)
+ end
+end
+
+def fun_l9_n391(x)
+ if (x < 1)
+ fun_l10_n579(x)
+ else
+ fun_l10_n906(x)
+ end
+end
+
+def fun_l9_n392(x)
+ if (x < 1)
+ fun_l10_n734(x)
+ else
+ fun_l10_n195(x)
+ end
+end
+
+def fun_l9_n393(x)
+ if (x < 1)
+ fun_l10_n691(x)
+ else
+ fun_l10_n68(x)
+ end
+end
+
+def fun_l9_n394(x)
+ if (x < 1)
+ fun_l10_n446(x)
+ else
+ fun_l10_n838(x)
+ end
+end
+
+def fun_l9_n395(x)
+ if (x < 1)
+ fun_l10_n708(x)
+ else
+ fun_l10_n319(x)
+ end
+end
+
+def fun_l9_n396(x)
+ if (x < 1)
+ fun_l10_n414(x)
+ else
+ fun_l10_n152(x)
+ end
+end
+
+def fun_l9_n397(x)
+ if (x < 1)
+ fun_l10_n637(x)
+ else
+ fun_l10_n662(x)
+ end
+end
+
+def fun_l9_n398(x)
+ if (x < 1)
+ fun_l10_n990(x)
+ else
+ fun_l10_n547(x)
+ end
+end
+
+def fun_l9_n399(x)
+ if (x < 1)
+ fun_l10_n43(x)
+ else
+ fun_l10_n845(x)
+ end
+end
+
+def fun_l9_n400(x)
+ if (x < 1)
+ fun_l10_n843(x)
+ else
+ fun_l10_n876(x)
+ end
+end
+
+def fun_l9_n401(x)
+ if (x < 1)
+ fun_l10_n925(x)
+ else
+ fun_l10_n221(x)
+ end
+end
+
+def fun_l9_n402(x)
+ if (x < 1)
+ fun_l10_n420(x)
+ else
+ fun_l10_n267(x)
+ end
+end
+
+def fun_l9_n403(x)
+ if (x < 1)
+ fun_l10_n78(x)
+ else
+ fun_l10_n316(x)
+ end
+end
+
+def fun_l9_n404(x)
+ if (x < 1)
+ fun_l10_n291(x)
+ else
+ fun_l10_n614(x)
+ end
+end
+
+def fun_l9_n405(x)
+ if (x < 1)
+ fun_l10_n956(x)
+ else
+ fun_l10_n550(x)
+ end
+end
+
+def fun_l9_n406(x)
+ if (x < 1)
+ fun_l10_n232(x)
+ else
+ fun_l10_n53(x)
+ end
+end
+
+def fun_l9_n407(x)
+ if (x < 1)
+ fun_l10_n171(x)
+ else
+ fun_l10_n51(x)
+ end
+end
+
+def fun_l9_n408(x)
+ if (x < 1)
+ fun_l10_n401(x)
+ else
+ fun_l10_n932(x)
+ end
+end
+
+def fun_l9_n409(x)
+ if (x < 1)
+ fun_l10_n863(x)
+ else
+ fun_l10_n951(x)
+ end
+end
+
+def fun_l9_n410(x)
+ if (x < 1)
+ fun_l10_n64(x)
+ else
+ fun_l10_n721(x)
+ end
+end
+
+def fun_l9_n411(x)
+ if (x < 1)
+ fun_l10_n539(x)
+ else
+ fun_l10_n951(x)
+ end
+end
+
+def fun_l9_n412(x)
+ if (x < 1)
+ fun_l10_n660(x)
+ else
+ fun_l10_n852(x)
+ end
+end
+
+def fun_l9_n413(x)
+ if (x < 1)
+ fun_l10_n777(x)
+ else
+ fun_l10_n366(x)
+ end
+end
+
+def fun_l9_n414(x)
+ if (x < 1)
+ fun_l10_n695(x)
+ else
+ fun_l10_n538(x)
+ end
+end
+
+def fun_l9_n415(x)
+ if (x < 1)
+ fun_l10_n208(x)
+ else
+ fun_l10_n892(x)
+ end
+end
+
+def fun_l9_n416(x)
+ if (x < 1)
+ fun_l10_n632(x)
+ else
+ fun_l10_n463(x)
+ end
+end
+
+def fun_l9_n417(x)
+ if (x < 1)
+ fun_l10_n238(x)
+ else
+ fun_l10_n55(x)
+ end
+end
+
+def fun_l9_n418(x)
+ if (x < 1)
+ fun_l10_n276(x)
+ else
+ fun_l10_n526(x)
+ end
+end
+
+def fun_l9_n419(x)
+ if (x < 1)
+ fun_l10_n625(x)
+ else
+ fun_l10_n806(x)
+ end
+end
+
+def fun_l9_n420(x)
+ if (x < 1)
+ fun_l10_n899(x)
+ else
+ fun_l10_n594(x)
+ end
+end
+
+def fun_l9_n421(x)
+ if (x < 1)
+ fun_l10_n725(x)
+ else
+ fun_l10_n461(x)
+ end
+end
+
+def fun_l9_n422(x)
+ if (x < 1)
+ fun_l10_n187(x)
+ else
+ fun_l10_n953(x)
+ end
+end
+
+def fun_l9_n423(x)
+ if (x < 1)
+ fun_l10_n698(x)
+ else
+ fun_l10_n751(x)
+ end
+end
+
+def fun_l9_n424(x)
+ if (x < 1)
+ fun_l10_n115(x)
+ else
+ fun_l10_n321(x)
+ end
+end
+
+def fun_l9_n425(x)
+ if (x < 1)
+ fun_l10_n775(x)
+ else
+ fun_l10_n100(x)
+ end
+end
+
+def fun_l9_n426(x)
+ if (x < 1)
+ fun_l10_n177(x)
+ else
+ fun_l10_n565(x)
+ end
+end
+
+def fun_l9_n427(x)
+ if (x < 1)
+ fun_l10_n568(x)
+ else
+ fun_l10_n234(x)
+ end
+end
+
+def fun_l9_n428(x)
+ if (x < 1)
+ fun_l10_n787(x)
+ else
+ fun_l10_n815(x)
+ end
+end
+
+def fun_l9_n429(x)
+ if (x < 1)
+ fun_l10_n580(x)
+ else
+ fun_l10_n990(x)
+ end
+end
+
+def fun_l9_n430(x)
+ if (x < 1)
+ fun_l10_n680(x)
+ else
+ fun_l10_n696(x)
+ end
+end
+
+def fun_l9_n431(x)
+ if (x < 1)
+ fun_l10_n650(x)
+ else
+ fun_l10_n776(x)
+ end
+end
+
+def fun_l9_n432(x)
+ if (x < 1)
+ fun_l10_n377(x)
+ else
+ fun_l10_n232(x)
+ end
+end
+
+def fun_l9_n433(x)
+ if (x < 1)
+ fun_l10_n621(x)
+ else
+ fun_l10_n948(x)
+ end
+end
+
+def fun_l9_n434(x)
+ if (x < 1)
+ fun_l10_n126(x)
+ else
+ fun_l10_n220(x)
+ end
+end
+
+def fun_l9_n435(x)
+ if (x < 1)
+ fun_l10_n395(x)
+ else
+ fun_l10_n732(x)
+ end
+end
+
+def fun_l9_n436(x)
+ if (x < 1)
+ fun_l10_n194(x)
+ else
+ fun_l10_n159(x)
+ end
+end
+
+def fun_l9_n437(x)
+ if (x < 1)
+ fun_l10_n123(x)
+ else
+ fun_l10_n40(x)
+ end
+end
+
+def fun_l9_n438(x)
+ if (x < 1)
+ fun_l10_n241(x)
+ else
+ fun_l10_n861(x)
+ end
+end
+
+def fun_l9_n439(x)
+ if (x < 1)
+ fun_l10_n333(x)
+ else
+ fun_l10_n950(x)
+ end
+end
+
+def fun_l9_n440(x)
+ if (x < 1)
+ fun_l10_n116(x)
+ else
+ fun_l10_n832(x)
+ end
+end
+
+def fun_l9_n441(x)
+ if (x < 1)
+ fun_l10_n598(x)
+ else
+ fun_l10_n68(x)
+ end
+end
+
+def fun_l9_n442(x)
+ if (x < 1)
+ fun_l10_n234(x)
+ else
+ fun_l10_n277(x)
+ end
+end
+
+def fun_l9_n443(x)
+ if (x < 1)
+ fun_l10_n943(x)
+ else
+ fun_l10_n895(x)
+ end
+end
+
+def fun_l9_n444(x)
+ if (x < 1)
+ fun_l10_n490(x)
+ else
+ fun_l10_n512(x)
+ end
+end
+
+def fun_l9_n445(x)
+ if (x < 1)
+ fun_l10_n54(x)
+ else
+ fun_l10_n74(x)
+ end
+end
+
+def fun_l9_n446(x)
+ if (x < 1)
+ fun_l10_n214(x)
+ else
+ fun_l10_n858(x)
+ end
+end
+
+def fun_l9_n447(x)
+ if (x < 1)
+ fun_l10_n274(x)
+ else
+ fun_l10_n255(x)
+ end
+end
+
+def fun_l9_n448(x)
+ if (x < 1)
+ fun_l10_n307(x)
+ else
+ fun_l10_n197(x)
+ end
+end
+
+def fun_l9_n449(x)
+ if (x < 1)
+ fun_l10_n152(x)
+ else
+ fun_l10_n543(x)
+ end
+end
+
+def fun_l9_n450(x)
+ if (x < 1)
+ fun_l10_n773(x)
+ else
+ fun_l10_n582(x)
+ end
+end
+
+def fun_l9_n451(x)
+ if (x < 1)
+ fun_l10_n757(x)
+ else
+ fun_l10_n298(x)
+ end
+end
+
+def fun_l9_n452(x)
+ if (x < 1)
+ fun_l10_n648(x)
+ else
+ fun_l10_n826(x)
+ end
+end
+
+def fun_l9_n453(x)
+ if (x < 1)
+ fun_l10_n209(x)
+ else
+ fun_l10_n767(x)
+ end
+end
+
+def fun_l9_n454(x)
+ if (x < 1)
+ fun_l10_n448(x)
+ else
+ fun_l10_n374(x)
+ end
+end
+
+def fun_l9_n455(x)
+ if (x < 1)
+ fun_l10_n975(x)
+ else
+ fun_l10_n45(x)
+ end
+end
+
+def fun_l9_n456(x)
+ if (x < 1)
+ fun_l10_n938(x)
+ else
+ fun_l10_n354(x)
+ end
+end
+
+def fun_l9_n457(x)
+ if (x < 1)
+ fun_l10_n723(x)
+ else
+ fun_l10_n511(x)
+ end
+end
+
+def fun_l9_n458(x)
+ if (x < 1)
+ fun_l10_n864(x)
+ else
+ fun_l10_n688(x)
+ end
+end
+
+def fun_l9_n459(x)
+ if (x < 1)
+ fun_l10_n283(x)
+ else
+ fun_l10_n776(x)
+ end
+end
+
+def fun_l9_n460(x)
+ if (x < 1)
+ fun_l10_n167(x)
+ else
+ fun_l10_n639(x)
+ end
+end
+
+def fun_l9_n461(x)
+ if (x < 1)
+ fun_l10_n493(x)
+ else
+ fun_l10_n538(x)
+ end
+end
+
+def fun_l9_n462(x)
+ if (x < 1)
+ fun_l10_n392(x)
+ else
+ fun_l10_n434(x)
+ end
+end
+
+def fun_l9_n463(x)
+ if (x < 1)
+ fun_l10_n958(x)
+ else
+ fun_l10_n305(x)
+ end
+end
+
+def fun_l9_n464(x)
+ if (x < 1)
+ fun_l10_n516(x)
+ else
+ fun_l10_n375(x)
+ end
+end
+
+def fun_l9_n465(x)
+ if (x < 1)
+ fun_l10_n371(x)
+ else
+ fun_l10_n596(x)
+ end
+end
+
+def fun_l9_n466(x)
+ if (x < 1)
+ fun_l10_n435(x)
+ else
+ fun_l10_n176(x)
+ end
+end
+
+def fun_l9_n467(x)
+ if (x < 1)
+ fun_l10_n391(x)
+ else
+ fun_l10_n83(x)
+ end
+end
+
+def fun_l9_n468(x)
+ if (x < 1)
+ fun_l10_n751(x)
+ else
+ fun_l10_n632(x)
+ end
+end
+
+def fun_l9_n469(x)
+ if (x < 1)
+ fun_l10_n14(x)
+ else
+ fun_l10_n530(x)
+ end
+end
+
+def fun_l9_n470(x)
+ if (x < 1)
+ fun_l10_n663(x)
+ else
+ fun_l10_n844(x)
+ end
+end
+
+def fun_l9_n471(x)
+ if (x < 1)
+ fun_l10_n82(x)
+ else
+ fun_l10_n493(x)
+ end
+end
+
+def fun_l9_n472(x)
+ if (x < 1)
+ fun_l10_n614(x)
+ else
+ fun_l10_n277(x)
+ end
+end
+
+def fun_l9_n473(x)
+ if (x < 1)
+ fun_l10_n492(x)
+ else
+ fun_l10_n492(x)
+ end
+end
+
+def fun_l9_n474(x)
+ if (x < 1)
+ fun_l10_n440(x)
+ else
+ fun_l10_n665(x)
+ end
+end
+
+def fun_l9_n475(x)
+ if (x < 1)
+ fun_l10_n284(x)
+ else
+ fun_l10_n513(x)
+ end
+end
+
+def fun_l9_n476(x)
+ if (x < 1)
+ fun_l10_n690(x)
+ else
+ fun_l10_n507(x)
+ end
+end
+
+def fun_l9_n477(x)
+ if (x < 1)
+ fun_l10_n281(x)
+ else
+ fun_l10_n519(x)
+ end
+end
+
+def fun_l9_n478(x)
+ if (x < 1)
+ fun_l10_n903(x)
+ else
+ fun_l10_n866(x)
+ end
+end
+
+def fun_l9_n479(x)
+ if (x < 1)
+ fun_l10_n880(x)
+ else
+ fun_l10_n310(x)
+ end
+end
+
+def fun_l9_n480(x)
+ if (x < 1)
+ fun_l10_n69(x)
+ else
+ fun_l10_n227(x)
+ end
+end
+
+def fun_l9_n481(x)
+ if (x < 1)
+ fun_l10_n316(x)
+ else
+ fun_l10_n692(x)
+ end
+end
+
+def fun_l9_n482(x)
+ if (x < 1)
+ fun_l10_n875(x)
+ else
+ fun_l10_n384(x)
+ end
+end
+
+def fun_l9_n483(x)
+ if (x < 1)
+ fun_l10_n496(x)
+ else
+ fun_l10_n81(x)
+ end
+end
+
+def fun_l9_n484(x)
+ if (x < 1)
+ fun_l10_n336(x)
+ else
+ fun_l10_n193(x)
+ end
+end
+
+def fun_l9_n485(x)
+ if (x < 1)
+ fun_l10_n541(x)
+ else
+ fun_l10_n465(x)
+ end
+end
+
+def fun_l9_n486(x)
+ if (x < 1)
+ fun_l10_n197(x)
+ else
+ fun_l10_n844(x)
+ end
+end
+
+def fun_l9_n487(x)
+ if (x < 1)
+ fun_l10_n652(x)
+ else
+ fun_l10_n736(x)
+ end
+end
+
+def fun_l9_n488(x)
+ if (x < 1)
+ fun_l10_n960(x)
+ else
+ fun_l10_n912(x)
+ end
+end
+
+def fun_l9_n489(x)
+ if (x < 1)
+ fun_l10_n238(x)
+ else
+ fun_l10_n64(x)
+ end
+end
+
+def fun_l9_n490(x)
+ if (x < 1)
+ fun_l10_n505(x)
+ else
+ fun_l10_n204(x)
+ end
+end
+
+def fun_l9_n491(x)
+ if (x < 1)
+ fun_l10_n960(x)
+ else
+ fun_l10_n198(x)
+ end
+end
+
+def fun_l9_n492(x)
+ if (x < 1)
+ fun_l10_n148(x)
+ else
+ fun_l10_n669(x)
+ end
+end
+
+def fun_l9_n493(x)
+ if (x < 1)
+ fun_l10_n860(x)
+ else
+ fun_l10_n676(x)
+ end
+end
+
+def fun_l9_n494(x)
+ if (x < 1)
+ fun_l10_n77(x)
+ else
+ fun_l10_n945(x)
+ end
+end
+
+def fun_l9_n495(x)
+ if (x < 1)
+ fun_l10_n151(x)
+ else
+ fun_l10_n588(x)
+ end
+end
+
+def fun_l9_n496(x)
+ if (x < 1)
+ fun_l10_n159(x)
+ else
+ fun_l10_n727(x)
+ end
+end
+
+def fun_l9_n497(x)
+ if (x < 1)
+ fun_l10_n803(x)
+ else
+ fun_l10_n292(x)
+ end
+end
+
+def fun_l9_n498(x)
+ if (x < 1)
+ fun_l10_n308(x)
+ else
+ fun_l10_n46(x)
+ end
+end
+
+def fun_l9_n499(x)
+ if (x < 1)
+ fun_l10_n511(x)
+ else
+ fun_l10_n766(x)
+ end
+end
+
+def fun_l9_n500(x)
+ if (x < 1)
+ fun_l10_n753(x)
+ else
+ fun_l10_n235(x)
+ end
+end
+
+def fun_l9_n501(x)
+ if (x < 1)
+ fun_l10_n776(x)
+ else
+ fun_l10_n779(x)
+ end
+end
+
+def fun_l9_n502(x)
+ if (x < 1)
+ fun_l10_n114(x)
+ else
+ fun_l10_n969(x)
+ end
+end
+
+def fun_l9_n503(x)
+ if (x < 1)
+ fun_l10_n511(x)
+ else
+ fun_l10_n678(x)
+ end
+end
+
+def fun_l9_n504(x)
+ if (x < 1)
+ fun_l10_n578(x)
+ else
+ fun_l10_n689(x)
+ end
+end
+
+def fun_l9_n505(x)
+ if (x < 1)
+ fun_l10_n434(x)
+ else
+ fun_l10_n0(x)
+ end
+end
+
+def fun_l9_n506(x)
+ if (x < 1)
+ fun_l10_n121(x)
+ else
+ fun_l10_n488(x)
+ end
+end
+
+def fun_l9_n507(x)
+ if (x < 1)
+ fun_l10_n865(x)
+ else
+ fun_l10_n540(x)
+ end
+end
+
+def fun_l9_n508(x)
+ if (x < 1)
+ fun_l10_n809(x)
+ else
+ fun_l10_n764(x)
+ end
+end
+
+def fun_l9_n509(x)
+ if (x < 1)
+ fun_l10_n463(x)
+ else
+ fun_l10_n141(x)
+ end
+end
+
+def fun_l9_n510(x)
+ if (x < 1)
+ fun_l10_n442(x)
+ else
+ fun_l10_n646(x)
+ end
+end
+
+def fun_l9_n511(x)
+ if (x < 1)
+ fun_l10_n971(x)
+ else
+ fun_l10_n57(x)
+ end
+end
+
+def fun_l9_n512(x)
+ if (x < 1)
+ fun_l10_n892(x)
+ else
+ fun_l10_n612(x)
+ end
+end
+
+def fun_l9_n513(x)
+ if (x < 1)
+ fun_l10_n864(x)
+ else
+ fun_l10_n438(x)
+ end
+end
+
+def fun_l9_n514(x)
+ if (x < 1)
+ fun_l10_n504(x)
+ else
+ fun_l10_n100(x)
+ end
+end
+
+def fun_l9_n515(x)
+ if (x < 1)
+ fun_l10_n881(x)
+ else
+ fun_l10_n621(x)
+ end
+end
+
+def fun_l9_n516(x)
+ if (x < 1)
+ fun_l10_n170(x)
+ else
+ fun_l10_n435(x)
+ end
+end
+
+def fun_l9_n517(x)
+ if (x < 1)
+ fun_l10_n712(x)
+ else
+ fun_l10_n537(x)
+ end
+end
+
+def fun_l9_n518(x)
+ if (x < 1)
+ fun_l10_n369(x)
+ else
+ fun_l10_n832(x)
+ end
+end
+
+def fun_l9_n519(x)
+ if (x < 1)
+ fun_l10_n654(x)
+ else
+ fun_l10_n364(x)
+ end
+end
+
+def fun_l9_n520(x)
+ if (x < 1)
+ fun_l10_n410(x)
+ else
+ fun_l10_n10(x)
+ end
+end
+
+def fun_l9_n521(x)
+ if (x < 1)
+ fun_l10_n814(x)
+ else
+ fun_l10_n569(x)
+ end
+end
+
+def fun_l9_n522(x)
+ if (x < 1)
+ fun_l10_n787(x)
+ else
+ fun_l10_n333(x)
+ end
+end
+
+def fun_l9_n523(x)
+ if (x < 1)
+ fun_l10_n336(x)
+ else
+ fun_l10_n720(x)
+ end
+end
+
+def fun_l9_n524(x)
+ if (x < 1)
+ fun_l10_n34(x)
+ else
+ fun_l10_n643(x)
+ end
+end
+
+def fun_l9_n525(x)
+ if (x < 1)
+ fun_l10_n147(x)
+ else
+ fun_l10_n62(x)
+ end
+end
+
+def fun_l9_n526(x)
+ if (x < 1)
+ fun_l10_n431(x)
+ else
+ fun_l10_n452(x)
+ end
+end
+
+def fun_l9_n527(x)
+ if (x < 1)
+ fun_l10_n374(x)
+ else
+ fun_l10_n831(x)
+ end
+end
+
+def fun_l9_n528(x)
+ if (x < 1)
+ fun_l10_n604(x)
+ else
+ fun_l10_n274(x)
+ end
+end
+
+def fun_l9_n529(x)
+ if (x < 1)
+ fun_l10_n470(x)
+ else
+ fun_l10_n764(x)
+ end
+end
+
+def fun_l9_n530(x)
+ if (x < 1)
+ fun_l10_n552(x)
+ else
+ fun_l10_n646(x)
+ end
+end
+
+def fun_l9_n531(x)
+ if (x < 1)
+ fun_l10_n427(x)
+ else
+ fun_l10_n464(x)
+ end
+end
+
+def fun_l9_n532(x)
+ if (x < 1)
+ fun_l10_n553(x)
+ else
+ fun_l10_n605(x)
+ end
+end
+
+def fun_l9_n533(x)
+ if (x < 1)
+ fun_l10_n59(x)
+ else
+ fun_l10_n794(x)
+ end
+end
+
+def fun_l9_n534(x)
+ if (x < 1)
+ fun_l10_n168(x)
+ else
+ fun_l10_n740(x)
+ end
+end
+
+def fun_l9_n535(x)
+ if (x < 1)
+ fun_l10_n227(x)
+ else
+ fun_l10_n651(x)
+ end
+end
+
+def fun_l9_n536(x)
+ if (x < 1)
+ fun_l10_n904(x)
+ else
+ fun_l10_n552(x)
+ end
+end
+
+def fun_l9_n537(x)
+ if (x < 1)
+ fun_l10_n389(x)
+ else
+ fun_l10_n397(x)
+ end
+end
+
+def fun_l9_n538(x)
+ if (x < 1)
+ fun_l10_n622(x)
+ else
+ fun_l10_n100(x)
+ end
+end
+
+def fun_l9_n539(x)
+ if (x < 1)
+ fun_l10_n117(x)
+ else
+ fun_l10_n715(x)
+ end
+end
+
+def fun_l9_n540(x)
+ if (x < 1)
+ fun_l10_n959(x)
+ else
+ fun_l10_n391(x)
+ end
+end
+
+def fun_l9_n541(x)
+ if (x < 1)
+ fun_l10_n733(x)
+ else
+ fun_l10_n393(x)
+ end
+end
+
+def fun_l9_n542(x)
+ if (x < 1)
+ fun_l10_n171(x)
+ else
+ fun_l10_n299(x)
+ end
+end
+
+def fun_l9_n543(x)
+ if (x < 1)
+ fun_l10_n655(x)
+ else
+ fun_l10_n285(x)
+ end
+end
+
+def fun_l9_n544(x)
+ if (x < 1)
+ fun_l10_n819(x)
+ else
+ fun_l10_n817(x)
+ end
+end
+
+def fun_l9_n545(x)
+ if (x < 1)
+ fun_l10_n938(x)
+ else
+ fun_l10_n54(x)
+ end
+end
+
+def fun_l9_n546(x)
+ if (x < 1)
+ fun_l10_n712(x)
+ else
+ fun_l10_n6(x)
+ end
+end
+
+def fun_l9_n547(x)
+ if (x < 1)
+ fun_l10_n203(x)
+ else
+ fun_l10_n626(x)
+ end
+end
+
+def fun_l9_n548(x)
+ if (x < 1)
+ fun_l10_n643(x)
+ else
+ fun_l10_n761(x)
+ end
+end
+
+def fun_l9_n549(x)
+ if (x < 1)
+ fun_l10_n450(x)
+ else
+ fun_l10_n673(x)
+ end
+end
+
+def fun_l9_n550(x)
+ if (x < 1)
+ fun_l10_n496(x)
+ else
+ fun_l10_n568(x)
+ end
+end
+
+def fun_l9_n551(x)
+ if (x < 1)
+ fun_l10_n30(x)
+ else
+ fun_l10_n518(x)
+ end
+end
+
+def fun_l9_n552(x)
+ if (x < 1)
+ fun_l10_n398(x)
+ else
+ fun_l10_n858(x)
+ end
+end
+
+def fun_l9_n553(x)
+ if (x < 1)
+ fun_l10_n253(x)
+ else
+ fun_l10_n831(x)
+ end
+end
+
+def fun_l9_n554(x)
+ if (x < 1)
+ fun_l10_n493(x)
+ else
+ fun_l10_n750(x)
+ end
+end
+
+def fun_l9_n555(x)
+ if (x < 1)
+ fun_l10_n111(x)
+ else
+ fun_l10_n279(x)
+ end
+end
+
+def fun_l9_n556(x)
+ if (x < 1)
+ fun_l10_n927(x)
+ else
+ fun_l10_n793(x)
+ end
+end
+
+def fun_l9_n557(x)
+ if (x < 1)
+ fun_l10_n530(x)
+ else
+ fun_l10_n182(x)
+ end
+end
+
+def fun_l9_n558(x)
+ if (x < 1)
+ fun_l10_n434(x)
+ else
+ fun_l10_n453(x)
+ end
+end
+
+def fun_l9_n559(x)
+ if (x < 1)
+ fun_l10_n480(x)
+ else
+ fun_l10_n590(x)
+ end
+end
+
+def fun_l9_n560(x)
+ if (x < 1)
+ fun_l10_n906(x)
+ else
+ fun_l10_n280(x)
+ end
+end
+
+def fun_l9_n561(x)
+ if (x < 1)
+ fun_l10_n107(x)
+ else
+ fun_l10_n716(x)
+ end
+end
+
+def fun_l9_n562(x)
+ if (x < 1)
+ fun_l10_n15(x)
+ else
+ fun_l10_n671(x)
+ end
+end
+
+def fun_l9_n563(x)
+ if (x < 1)
+ fun_l10_n544(x)
+ else
+ fun_l10_n571(x)
+ end
+end
+
+def fun_l9_n564(x)
+ if (x < 1)
+ fun_l10_n482(x)
+ else
+ fun_l10_n885(x)
+ end
+end
+
+def fun_l9_n565(x)
+ if (x < 1)
+ fun_l10_n465(x)
+ else
+ fun_l10_n916(x)
+ end
+end
+
+def fun_l9_n566(x)
+ if (x < 1)
+ fun_l10_n413(x)
+ else
+ fun_l10_n684(x)
+ end
+end
+
+def fun_l9_n567(x)
+ if (x < 1)
+ fun_l10_n413(x)
+ else
+ fun_l10_n577(x)
+ end
+end
+
+def fun_l9_n568(x)
+ if (x < 1)
+ fun_l10_n604(x)
+ else
+ fun_l10_n899(x)
+ end
+end
+
+def fun_l9_n569(x)
+ if (x < 1)
+ fun_l10_n138(x)
+ else
+ fun_l10_n164(x)
+ end
+end
+
+def fun_l9_n570(x)
+ if (x < 1)
+ fun_l10_n993(x)
+ else
+ fun_l10_n94(x)
+ end
+end
+
+def fun_l9_n571(x)
+ if (x < 1)
+ fun_l10_n602(x)
+ else
+ fun_l10_n989(x)
+ end
+end
+
+def fun_l9_n572(x)
+ if (x < 1)
+ fun_l10_n700(x)
+ else
+ fun_l10_n308(x)
+ end
+end
+
+def fun_l9_n573(x)
+ if (x < 1)
+ fun_l10_n773(x)
+ else
+ fun_l10_n945(x)
+ end
+end
+
+def fun_l9_n574(x)
+ if (x < 1)
+ fun_l10_n148(x)
+ else
+ fun_l10_n608(x)
+ end
+end
+
+def fun_l9_n575(x)
+ if (x < 1)
+ fun_l10_n439(x)
+ else
+ fun_l10_n908(x)
+ end
+end
+
+def fun_l9_n576(x)
+ if (x < 1)
+ fun_l10_n174(x)
+ else
+ fun_l10_n872(x)
+ end
+end
+
+def fun_l9_n577(x)
+ if (x < 1)
+ fun_l10_n291(x)
+ else
+ fun_l10_n265(x)
+ end
+end
+
+def fun_l9_n578(x)
+ if (x < 1)
+ fun_l10_n425(x)
+ else
+ fun_l10_n928(x)
+ end
+end
+
+def fun_l9_n579(x)
+ if (x < 1)
+ fun_l10_n674(x)
+ else
+ fun_l10_n666(x)
+ end
+end
+
+def fun_l9_n580(x)
+ if (x < 1)
+ fun_l10_n784(x)
+ else
+ fun_l10_n147(x)
+ end
+end
+
+def fun_l9_n581(x)
+ if (x < 1)
+ fun_l10_n550(x)
+ else
+ fun_l10_n119(x)
+ end
+end
+
+def fun_l9_n582(x)
+ if (x < 1)
+ fun_l10_n953(x)
+ else
+ fun_l10_n269(x)
+ end
+end
+
+def fun_l9_n583(x)
+ if (x < 1)
+ fun_l10_n575(x)
+ else
+ fun_l10_n79(x)
+ end
+end
+
+def fun_l9_n584(x)
+ if (x < 1)
+ fun_l10_n498(x)
+ else
+ fun_l10_n1(x)
+ end
+end
+
+def fun_l9_n585(x)
+ if (x < 1)
+ fun_l10_n728(x)
+ else
+ fun_l10_n92(x)
+ end
+end
+
+def fun_l9_n586(x)
+ if (x < 1)
+ fun_l10_n344(x)
+ else
+ fun_l10_n753(x)
+ end
+end
+
+def fun_l9_n587(x)
+ if (x < 1)
+ fun_l10_n911(x)
+ else
+ fun_l10_n327(x)
+ end
+end
+
+def fun_l9_n588(x)
+ if (x < 1)
+ fun_l10_n422(x)
+ else
+ fun_l10_n224(x)
+ end
+end
+
+def fun_l9_n589(x)
+ if (x < 1)
+ fun_l10_n311(x)
+ else
+ fun_l10_n457(x)
+ end
+end
+
+def fun_l9_n590(x)
+ if (x < 1)
+ fun_l10_n705(x)
+ else
+ fun_l10_n136(x)
+ end
+end
+
+def fun_l9_n591(x)
+ if (x < 1)
+ fun_l10_n338(x)
+ else
+ fun_l10_n14(x)
+ end
+end
+
+def fun_l9_n592(x)
+ if (x < 1)
+ fun_l10_n144(x)
+ else
+ fun_l10_n671(x)
+ end
+end
+
+def fun_l9_n593(x)
+ if (x < 1)
+ fun_l10_n402(x)
+ else
+ fun_l10_n218(x)
+ end
+end
+
+def fun_l9_n594(x)
+ if (x < 1)
+ fun_l10_n854(x)
+ else
+ fun_l10_n198(x)
+ end
+end
+
+def fun_l9_n595(x)
+ if (x < 1)
+ fun_l10_n932(x)
+ else
+ fun_l10_n181(x)
+ end
+end
+
+def fun_l9_n596(x)
+ if (x < 1)
+ fun_l10_n373(x)
+ else
+ fun_l10_n937(x)
+ end
+end
+
+def fun_l9_n597(x)
+ if (x < 1)
+ fun_l10_n181(x)
+ else
+ fun_l10_n925(x)
+ end
+end
+
+def fun_l9_n598(x)
+ if (x < 1)
+ fun_l10_n263(x)
+ else
+ fun_l10_n98(x)
+ end
+end
+
+def fun_l9_n599(x)
+ if (x < 1)
+ fun_l10_n736(x)
+ else
+ fun_l10_n951(x)
+ end
+end
+
+def fun_l9_n600(x)
+ if (x < 1)
+ fun_l10_n576(x)
+ else
+ fun_l10_n998(x)
+ end
+end
+
+def fun_l9_n601(x)
+ if (x < 1)
+ fun_l10_n577(x)
+ else
+ fun_l10_n559(x)
+ end
+end
+
+def fun_l9_n602(x)
+ if (x < 1)
+ fun_l10_n143(x)
+ else
+ fun_l10_n993(x)
+ end
+end
+
+def fun_l9_n603(x)
+ if (x < 1)
+ fun_l10_n35(x)
+ else
+ fun_l10_n132(x)
+ end
+end
+
+def fun_l9_n604(x)
+ if (x < 1)
+ fun_l10_n715(x)
+ else
+ fun_l10_n933(x)
+ end
+end
+
+def fun_l9_n605(x)
+ if (x < 1)
+ fun_l10_n570(x)
+ else
+ fun_l10_n455(x)
+ end
+end
+
+def fun_l9_n606(x)
+ if (x < 1)
+ fun_l10_n225(x)
+ else
+ fun_l10_n216(x)
+ end
+end
+
+def fun_l9_n607(x)
+ if (x < 1)
+ fun_l10_n431(x)
+ else
+ fun_l10_n285(x)
+ end
+end
+
+def fun_l9_n608(x)
+ if (x < 1)
+ fun_l10_n647(x)
+ else
+ fun_l10_n221(x)
+ end
+end
+
+def fun_l9_n609(x)
+ if (x < 1)
+ fun_l10_n348(x)
+ else
+ fun_l10_n849(x)
+ end
+end
+
+def fun_l9_n610(x)
+ if (x < 1)
+ fun_l10_n301(x)
+ else
+ fun_l10_n500(x)
+ end
+end
+
+def fun_l9_n611(x)
+ if (x < 1)
+ fun_l10_n152(x)
+ else
+ fun_l10_n1(x)
+ end
+end
+
+def fun_l9_n612(x)
+ if (x < 1)
+ fun_l10_n339(x)
+ else
+ fun_l10_n577(x)
+ end
+end
+
+def fun_l9_n613(x)
+ if (x < 1)
+ fun_l10_n427(x)
+ else
+ fun_l10_n779(x)
+ end
+end
+
+def fun_l9_n614(x)
+ if (x < 1)
+ fun_l10_n60(x)
+ else
+ fun_l10_n199(x)
+ end
+end
+
+def fun_l9_n615(x)
+ if (x < 1)
+ fun_l10_n616(x)
+ else
+ fun_l10_n33(x)
+ end
+end
+
+def fun_l9_n616(x)
+ if (x < 1)
+ fun_l10_n940(x)
+ else
+ fun_l10_n981(x)
+ end
+end
+
+def fun_l9_n617(x)
+ if (x < 1)
+ fun_l10_n594(x)
+ else
+ fun_l10_n321(x)
+ end
+end
+
+def fun_l9_n618(x)
+ if (x < 1)
+ fun_l10_n233(x)
+ else
+ fun_l10_n500(x)
+ end
+end
+
+def fun_l9_n619(x)
+ if (x < 1)
+ fun_l10_n169(x)
+ else
+ fun_l10_n883(x)
+ end
+end
+
+def fun_l9_n620(x)
+ if (x < 1)
+ fun_l10_n611(x)
+ else
+ fun_l10_n345(x)
+ end
+end
+
+def fun_l9_n621(x)
+ if (x < 1)
+ fun_l10_n155(x)
+ else
+ fun_l10_n547(x)
+ end
+end
+
+def fun_l9_n622(x)
+ if (x < 1)
+ fun_l10_n244(x)
+ else
+ fun_l10_n760(x)
+ end
+end
+
+def fun_l9_n623(x)
+ if (x < 1)
+ fun_l10_n893(x)
+ else
+ fun_l10_n13(x)
+ end
+end
+
+def fun_l9_n624(x)
+ if (x < 1)
+ fun_l10_n465(x)
+ else
+ fun_l10_n276(x)
+ end
+end
+
+def fun_l9_n625(x)
+ if (x < 1)
+ fun_l10_n196(x)
+ else
+ fun_l10_n920(x)
+ end
+end
+
+def fun_l9_n626(x)
+ if (x < 1)
+ fun_l10_n235(x)
+ else
+ fun_l10_n962(x)
+ end
+end
+
+def fun_l9_n627(x)
+ if (x < 1)
+ fun_l10_n361(x)
+ else
+ fun_l10_n162(x)
+ end
+end
+
+def fun_l9_n628(x)
+ if (x < 1)
+ fun_l10_n110(x)
+ else
+ fun_l10_n574(x)
+ end
+end
+
+def fun_l9_n629(x)
+ if (x < 1)
+ fun_l10_n861(x)
+ else
+ fun_l10_n839(x)
+ end
+end
+
+def fun_l9_n630(x)
+ if (x < 1)
+ fun_l10_n386(x)
+ else
+ fun_l10_n741(x)
+ end
+end
+
+def fun_l9_n631(x)
+ if (x < 1)
+ fun_l10_n426(x)
+ else
+ fun_l10_n430(x)
+ end
+end
+
+def fun_l9_n632(x)
+ if (x < 1)
+ fun_l10_n231(x)
+ else
+ fun_l10_n353(x)
+ end
+end
+
+def fun_l9_n633(x)
+ if (x < 1)
+ fun_l10_n945(x)
+ else
+ fun_l10_n199(x)
+ end
+end
+
+def fun_l9_n634(x)
+ if (x < 1)
+ fun_l10_n607(x)
+ else
+ fun_l10_n388(x)
+ end
+end
+
+def fun_l9_n635(x)
+ if (x < 1)
+ fun_l10_n214(x)
+ else
+ fun_l10_n135(x)
+ end
+end
+
+def fun_l9_n636(x)
+ if (x < 1)
+ fun_l10_n642(x)
+ else
+ fun_l10_n522(x)
+ end
+end
+
+def fun_l9_n637(x)
+ if (x < 1)
+ fun_l10_n605(x)
+ else
+ fun_l10_n336(x)
+ end
+end
+
+def fun_l9_n638(x)
+ if (x < 1)
+ fun_l10_n719(x)
+ else
+ fun_l10_n213(x)
+ end
+end
+
+def fun_l9_n639(x)
+ if (x < 1)
+ fun_l10_n202(x)
+ else
+ fun_l10_n767(x)
+ end
+end
+
+def fun_l9_n640(x)
+ if (x < 1)
+ fun_l10_n242(x)
+ else
+ fun_l10_n596(x)
+ end
+end
+
+def fun_l9_n641(x)
+ if (x < 1)
+ fun_l10_n851(x)
+ else
+ fun_l10_n216(x)
+ end
+end
+
+def fun_l9_n642(x)
+ if (x < 1)
+ fun_l10_n645(x)
+ else
+ fun_l10_n890(x)
+ end
+end
+
+def fun_l9_n643(x)
+ if (x < 1)
+ fun_l10_n241(x)
+ else
+ fun_l10_n350(x)
+ end
+end
+
+def fun_l9_n644(x)
+ if (x < 1)
+ fun_l10_n597(x)
+ else
+ fun_l10_n350(x)
+ end
+end
+
+def fun_l9_n645(x)
+ if (x < 1)
+ fun_l10_n170(x)
+ else
+ fun_l10_n962(x)
+ end
+end
+
+def fun_l9_n646(x)
+ if (x < 1)
+ fun_l10_n229(x)
+ else
+ fun_l10_n543(x)
+ end
+end
+
+def fun_l9_n647(x)
+ if (x < 1)
+ fun_l10_n473(x)
+ else
+ fun_l10_n942(x)
+ end
+end
+
+def fun_l9_n648(x)
+ if (x < 1)
+ fun_l10_n630(x)
+ else
+ fun_l10_n630(x)
+ end
+end
+
+def fun_l9_n649(x)
+ if (x < 1)
+ fun_l10_n183(x)
+ else
+ fun_l10_n313(x)
+ end
+end
+
+def fun_l9_n650(x)
+ if (x < 1)
+ fun_l10_n951(x)
+ else
+ fun_l10_n394(x)
+ end
+end
+
+def fun_l9_n651(x)
+ if (x < 1)
+ fun_l10_n107(x)
+ else
+ fun_l10_n849(x)
+ end
+end
+
+def fun_l9_n652(x)
+ if (x < 1)
+ fun_l10_n678(x)
+ else
+ fun_l10_n768(x)
+ end
+end
+
+def fun_l9_n653(x)
+ if (x < 1)
+ fun_l10_n534(x)
+ else
+ fun_l10_n410(x)
+ end
+end
+
+def fun_l9_n654(x)
+ if (x < 1)
+ fun_l10_n694(x)
+ else
+ fun_l10_n134(x)
+ end
+end
+
+def fun_l9_n655(x)
+ if (x < 1)
+ fun_l10_n751(x)
+ else
+ fun_l10_n923(x)
+ end
+end
+
+def fun_l9_n656(x)
+ if (x < 1)
+ fun_l10_n957(x)
+ else
+ fun_l10_n489(x)
+ end
+end
+
+def fun_l9_n657(x)
+ if (x < 1)
+ fun_l10_n612(x)
+ else
+ fun_l10_n577(x)
+ end
+end
+
+def fun_l9_n658(x)
+ if (x < 1)
+ fun_l10_n814(x)
+ else
+ fun_l10_n801(x)
+ end
+end
+
+def fun_l9_n659(x)
+ if (x < 1)
+ fun_l10_n297(x)
+ else
+ fun_l10_n344(x)
+ end
+end
+
+def fun_l9_n660(x)
+ if (x < 1)
+ fun_l10_n674(x)
+ else
+ fun_l10_n780(x)
+ end
+end
+
+def fun_l9_n661(x)
+ if (x < 1)
+ fun_l10_n302(x)
+ else
+ fun_l10_n184(x)
+ end
+end
+
+def fun_l9_n662(x)
+ if (x < 1)
+ fun_l10_n308(x)
+ else
+ fun_l10_n302(x)
+ end
+end
+
+def fun_l9_n663(x)
+ if (x < 1)
+ fun_l10_n825(x)
+ else
+ fun_l10_n866(x)
+ end
+end
+
+def fun_l9_n664(x)
+ if (x < 1)
+ fun_l10_n771(x)
+ else
+ fun_l10_n141(x)
+ end
+end
+
+def fun_l9_n665(x)
+ if (x < 1)
+ fun_l10_n369(x)
+ else
+ fun_l10_n63(x)
+ end
+end
+
+def fun_l9_n666(x)
+ if (x < 1)
+ fun_l10_n198(x)
+ else
+ fun_l10_n793(x)
+ end
+end
+
+def fun_l9_n667(x)
+ if (x < 1)
+ fun_l10_n800(x)
+ else
+ fun_l10_n748(x)
+ end
+end
+
+def fun_l9_n668(x)
+ if (x < 1)
+ fun_l10_n809(x)
+ else
+ fun_l10_n673(x)
+ end
+end
+
+def fun_l9_n669(x)
+ if (x < 1)
+ fun_l10_n438(x)
+ else
+ fun_l10_n301(x)
+ end
+end
+
+def fun_l9_n670(x)
+ if (x < 1)
+ fun_l10_n802(x)
+ else
+ fun_l10_n882(x)
+ end
+end
+
+def fun_l9_n671(x)
+ if (x < 1)
+ fun_l10_n690(x)
+ else
+ fun_l10_n524(x)
+ end
+end
+
+def fun_l9_n672(x)
+ if (x < 1)
+ fun_l10_n996(x)
+ else
+ fun_l10_n68(x)
+ end
+end
+
+def fun_l9_n673(x)
+ if (x < 1)
+ fun_l10_n773(x)
+ else
+ fun_l10_n26(x)
+ end
+end
+
+def fun_l9_n674(x)
+ if (x < 1)
+ fun_l10_n252(x)
+ else
+ fun_l10_n680(x)
+ end
+end
+
+def fun_l9_n675(x)
+ if (x < 1)
+ fun_l10_n466(x)
+ else
+ fun_l10_n885(x)
+ end
+end
+
+def fun_l9_n676(x)
+ if (x < 1)
+ fun_l10_n746(x)
+ else
+ fun_l10_n968(x)
+ end
+end
+
+def fun_l9_n677(x)
+ if (x < 1)
+ fun_l10_n827(x)
+ else
+ fun_l10_n69(x)
+ end
+end
+
+def fun_l9_n678(x)
+ if (x < 1)
+ fun_l10_n158(x)
+ else
+ fun_l10_n780(x)
+ end
+end
+
+def fun_l9_n679(x)
+ if (x < 1)
+ fun_l10_n267(x)
+ else
+ fun_l10_n907(x)
+ end
+end
+
+def fun_l9_n680(x)
+ if (x < 1)
+ fun_l10_n378(x)
+ else
+ fun_l10_n668(x)
+ end
+end
+
+def fun_l9_n681(x)
+ if (x < 1)
+ fun_l10_n481(x)
+ else
+ fun_l10_n421(x)
+ end
+end
+
+def fun_l9_n682(x)
+ if (x < 1)
+ fun_l10_n501(x)
+ else
+ fun_l10_n277(x)
+ end
+end
+
+def fun_l9_n683(x)
+ if (x < 1)
+ fun_l10_n533(x)
+ else
+ fun_l10_n604(x)
+ end
+end
+
+def fun_l9_n684(x)
+ if (x < 1)
+ fun_l10_n483(x)
+ else
+ fun_l10_n761(x)
+ end
+end
+
+def fun_l9_n685(x)
+ if (x < 1)
+ fun_l10_n41(x)
+ else
+ fun_l10_n374(x)
+ end
+end
+
+def fun_l9_n686(x)
+ if (x < 1)
+ fun_l10_n549(x)
+ else
+ fun_l10_n319(x)
+ end
+end
+
+def fun_l9_n687(x)
+ if (x < 1)
+ fun_l10_n246(x)
+ else
+ fun_l10_n854(x)
+ end
+end
+
+def fun_l9_n688(x)
+ if (x < 1)
+ fun_l10_n634(x)
+ else
+ fun_l10_n43(x)
+ end
+end
+
+def fun_l9_n689(x)
+ if (x < 1)
+ fun_l10_n994(x)
+ else
+ fun_l10_n549(x)
+ end
+end
+
+def fun_l9_n690(x)
+ if (x < 1)
+ fun_l10_n439(x)
+ else
+ fun_l10_n560(x)
+ end
+end
+
+def fun_l9_n691(x)
+ if (x < 1)
+ fun_l10_n227(x)
+ else
+ fun_l10_n877(x)
+ end
+end
+
+def fun_l9_n692(x)
+ if (x < 1)
+ fun_l10_n644(x)
+ else
+ fun_l10_n350(x)
+ end
+end
+
+def fun_l9_n693(x)
+ if (x < 1)
+ fun_l10_n543(x)
+ else
+ fun_l10_n638(x)
+ end
+end
+
+def fun_l9_n694(x)
+ if (x < 1)
+ fun_l10_n537(x)
+ else
+ fun_l10_n187(x)
+ end
+end
+
+def fun_l9_n695(x)
+ if (x < 1)
+ fun_l10_n1(x)
+ else
+ fun_l10_n540(x)
+ end
+end
+
+def fun_l9_n696(x)
+ if (x < 1)
+ fun_l10_n306(x)
+ else
+ fun_l10_n290(x)
+ end
+end
+
+def fun_l9_n697(x)
+ if (x < 1)
+ fun_l10_n140(x)
+ else
+ fun_l10_n72(x)
+ end
+end
+
+def fun_l9_n698(x)
+ if (x < 1)
+ fun_l10_n43(x)
+ else
+ fun_l10_n257(x)
+ end
+end
+
+def fun_l9_n699(x)
+ if (x < 1)
+ fun_l10_n91(x)
+ else
+ fun_l10_n816(x)
+ end
+end
+
+def fun_l9_n700(x)
+ if (x < 1)
+ fun_l10_n420(x)
+ else
+ fun_l10_n763(x)
+ end
+end
+
+def fun_l9_n701(x)
+ if (x < 1)
+ fun_l10_n429(x)
+ else
+ fun_l10_n28(x)
+ end
+end
+
+def fun_l9_n702(x)
+ if (x < 1)
+ fun_l10_n615(x)
+ else
+ fun_l10_n995(x)
+ end
+end
+
+def fun_l9_n703(x)
+ if (x < 1)
+ fun_l10_n776(x)
+ else
+ fun_l10_n85(x)
+ end
+end
+
+def fun_l9_n704(x)
+ if (x < 1)
+ fun_l10_n795(x)
+ else
+ fun_l10_n542(x)
+ end
+end
+
+def fun_l9_n705(x)
+ if (x < 1)
+ fun_l10_n114(x)
+ else
+ fun_l10_n166(x)
+ end
+end
+
+def fun_l9_n706(x)
+ if (x < 1)
+ fun_l10_n99(x)
+ else
+ fun_l10_n400(x)
+ end
+end
+
+def fun_l9_n707(x)
+ if (x < 1)
+ fun_l10_n292(x)
+ else
+ fun_l10_n801(x)
+ end
+end
+
+def fun_l9_n708(x)
+ if (x < 1)
+ fun_l10_n303(x)
+ else
+ fun_l10_n380(x)
+ end
+end
+
+def fun_l9_n709(x)
+ if (x < 1)
+ fun_l10_n369(x)
+ else
+ fun_l10_n938(x)
+ end
+end
+
+def fun_l9_n710(x)
+ if (x < 1)
+ fun_l10_n652(x)
+ else
+ fun_l10_n453(x)
+ end
+end
+
+def fun_l9_n711(x)
+ if (x < 1)
+ fun_l10_n770(x)
+ else
+ fun_l10_n32(x)
+ end
+end
+
+def fun_l9_n712(x)
+ if (x < 1)
+ fun_l10_n261(x)
+ else
+ fun_l10_n485(x)
+ end
+end
+
+def fun_l9_n713(x)
+ if (x < 1)
+ fun_l10_n935(x)
+ else
+ fun_l10_n39(x)
+ end
+end
+
+def fun_l9_n714(x)
+ if (x < 1)
+ fun_l10_n332(x)
+ else
+ fun_l10_n309(x)
+ end
+end
+
+def fun_l9_n715(x)
+ if (x < 1)
+ fun_l10_n824(x)
+ else
+ fun_l10_n614(x)
+ end
+end
+
+def fun_l9_n716(x)
+ if (x < 1)
+ fun_l10_n468(x)
+ else
+ fun_l10_n341(x)
+ end
+end
+
+def fun_l9_n717(x)
+ if (x < 1)
+ fun_l10_n425(x)
+ else
+ fun_l10_n67(x)
+ end
+end
+
+def fun_l9_n718(x)
+ if (x < 1)
+ fun_l10_n199(x)
+ else
+ fun_l10_n423(x)
+ end
+end
+
+def fun_l9_n719(x)
+ if (x < 1)
+ fun_l10_n294(x)
+ else
+ fun_l10_n484(x)
+ end
+end
+
+def fun_l9_n720(x)
+ if (x < 1)
+ fun_l10_n276(x)
+ else
+ fun_l10_n799(x)
+ end
+end
+
+def fun_l9_n721(x)
+ if (x < 1)
+ fun_l10_n98(x)
+ else
+ fun_l10_n278(x)
+ end
+end
+
+def fun_l9_n722(x)
+ if (x < 1)
+ fun_l10_n689(x)
+ else
+ fun_l10_n767(x)
+ end
+end
+
+def fun_l9_n723(x)
+ if (x < 1)
+ fun_l10_n786(x)
+ else
+ fun_l10_n409(x)
+ end
+end
+
+def fun_l9_n724(x)
+ if (x < 1)
+ fun_l10_n874(x)
+ else
+ fun_l10_n413(x)
+ end
+end
+
+def fun_l9_n725(x)
+ if (x < 1)
+ fun_l10_n806(x)
+ else
+ fun_l10_n529(x)
+ end
+end
+
+def fun_l9_n726(x)
+ if (x < 1)
+ fun_l10_n847(x)
+ else
+ fun_l10_n427(x)
+ end
+end
+
+def fun_l9_n727(x)
+ if (x < 1)
+ fun_l10_n285(x)
+ else
+ fun_l10_n878(x)
+ end
+end
+
+def fun_l9_n728(x)
+ if (x < 1)
+ fun_l10_n829(x)
+ else
+ fun_l10_n341(x)
+ end
+end
+
+def fun_l9_n729(x)
+ if (x < 1)
+ fun_l10_n797(x)
+ else
+ fun_l10_n865(x)
+ end
+end
+
+def fun_l9_n730(x)
+ if (x < 1)
+ fun_l10_n689(x)
+ else
+ fun_l10_n241(x)
+ end
+end
+
+def fun_l9_n731(x)
+ if (x < 1)
+ fun_l10_n764(x)
+ else
+ fun_l10_n451(x)
+ end
+end
+
+def fun_l9_n732(x)
+ if (x < 1)
+ fun_l10_n147(x)
+ else
+ fun_l10_n998(x)
+ end
+end
+
+def fun_l9_n733(x)
+ if (x < 1)
+ fun_l10_n192(x)
+ else
+ fun_l10_n293(x)
+ end
+end
+
+def fun_l9_n734(x)
+ if (x < 1)
+ fun_l10_n207(x)
+ else
+ fun_l10_n696(x)
+ end
+end
+
+def fun_l9_n735(x)
+ if (x < 1)
+ fun_l10_n457(x)
+ else
+ fun_l10_n93(x)
+ end
+end
+
+def fun_l9_n736(x)
+ if (x < 1)
+ fun_l10_n130(x)
+ else
+ fun_l10_n512(x)
+ end
+end
+
+def fun_l9_n737(x)
+ if (x < 1)
+ fun_l10_n86(x)
+ else
+ fun_l10_n409(x)
+ end
+end
+
+def fun_l9_n738(x)
+ if (x < 1)
+ fun_l10_n783(x)
+ else
+ fun_l10_n981(x)
+ end
+end
+
+def fun_l9_n739(x)
+ if (x < 1)
+ fun_l10_n927(x)
+ else
+ fun_l10_n831(x)
+ end
+end
+
+def fun_l9_n740(x)
+ if (x < 1)
+ fun_l10_n719(x)
+ else
+ fun_l10_n422(x)
+ end
+end
+
+def fun_l9_n741(x)
+ if (x < 1)
+ fun_l10_n287(x)
+ else
+ fun_l10_n139(x)
+ end
+end
+
+def fun_l9_n742(x)
+ if (x < 1)
+ fun_l10_n533(x)
+ else
+ fun_l10_n687(x)
+ end
+end
+
+def fun_l9_n743(x)
+ if (x < 1)
+ fun_l10_n550(x)
+ else
+ fun_l10_n972(x)
+ end
+end
+
+def fun_l9_n744(x)
+ if (x < 1)
+ fun_l10_n5(x)
+ else
+ fun_l10_n306(x)
+ end
+end
+
+def fun_l9_n745(x)
+ if (x < 1)
+ fun_l10_n755(x)
+ else
+ fun_l10_n849(x)
+ end
+end
+
+def fun_l9_n746(x)
+ if (x < 1)
+ fun_l10_n912(x)
+ else
+ fun_l10_n307(x)
+ end
+end
+
+def fun_l9_n747(x)
+ if (x < 1)
+ fun_l10_n181(x)
+ else
+ fun_l10_n476(x)
+ end
+end
+
+def fun_l9_n748(x)
+ if (x < 1)
+ fun_l10_n353(x)
+ else
+ fun_l10_n412(x)
+ end
+end
+
+def fun_l9_n749(x)
+ if (x < 1)
+ fun_l10_n187(x)
+ else
+ fun_l10_n591(x)
+ end
+end
+
+def fun_l9_n750(x)
+ if (x < 1)
+ fun_l10_n464(x)
+ else
+ fun_l10_n581(x)
+ end
+end
+
+def fun_l9_n751(x)
+ if (x < 1)
+ fun_l10_n1(x)
+ else
+ fun_l10_n557(x)
+ end
+end
+
+def fun_l9_n752(x)
+ if (x < 1)
+ fun_l10_n788(x)
+ else
+ fun_l10_n438(x)
+ end
+end
+
+def fun_l9_n753(x)
+ if (x < 1)
+ fun_l10_n535(x)
+ else
+ fun_l10_n13(x)
+ end
+end
+
+def fun_l9_n754(x)
+ if (x < 1)
+ fun_l10_n811(x)
+ else
+ fun_l10_n543(x)
+ end
+end
+
+def fun_l9_n755(x)
+ if (x < 1)
+ fun_l10_n328(x)
+ else
+ fun_l10_n44(x)
+ end
+end
+
+def fun_l9_n756(x)
+ if (x < 1)
+ fun_l10_n839(x)
+ else
+ fun_l10_n16(x)
+ end
+end
+
+def fun_l9_n757(x)
+ if (x < 1)
+ fun_l10_n778(x)
+ else
+ fun_l10_n865(x)
+ end
+end
+
+def fun_l9_n758(x)
+ if (x < 1)
+ fun_l10_n552(x)
+ else
+ fun_l10_n783(x)
+ end
+end
+
+def fun_l9_n759(x)
+ if (x < 1)
+ fun_l10_n293(x)
+ else
+ fun_l10_n140(x)
+ end
+end
+
+def fun_l9_n760(x)
+ if (x < 1)
+ fun_l10_n814(x)
+ else
+ fun_l10_n497(x)
+ end
+end
+
+def fun_l9_n761(x)
+ if (x < 1)
+ fun_l10_n922(x)
+ else
+ fun_l10_n986(x)
+ end
+end
+
+def fun_l9_n762(x)
+ if (x < 1)
+ fun_l10_n100(x)
+ else
+ fun_l10_n346(x)
+ end
+end
+
+def fun_l9_n763(x)
+ if (x < 1)
+ fun_l10_n738(x)
+ else
+ fun_l10_n223(x)
+ end
+end
+
+def fun_l9_n764(x)
+ if (x < 1)
+ fun_l10_n168(x)
+ else
+ fun_l10_n367(x)
+ end
+end
+
+def fun_l9_n765(x)
+ if (x < 1)
+ fun_l10_n929(x)
+ else
+ fun_l10_n684(x)
+ end
+end
+
+def fun_l9_n766(x)
+ if (x < 1)
+ fun_l10_n940(x)
+ else
+ fun_l10_n497(x)
+ end
+end
+
+def fun_l9_n767(x)
+ if (x < 1)
+ fun_l10_n198(x)
+ else
+ fun_l10_n386(x)
+ end
+end
+
+def fun_l9_n768(x)
+ if (x < 1)
+ fun_l10_n667(x)
+ else
+ fun_l10_n913(x)
+ end
+end
+
+def fun_l9_n769(x)
+ if (x < 1)
+ fun_l10_n210(x)
+ else
+ fun_l10_n233(x)
+ end
+end
+
+def fun_l9_n770(x)
+ if (x < 1)
+ fun_l10_n819(x)
+ else
+ fun_l10_n755(x)
+ end
+end
+
+def fun_l9_n771(x)
+ if (x < 1)
+ fun_l10_n519(x)
+ else
+ fun_l10_n554(x)
+ end
+end
+
+def fun_l9_n772(x)
+ if (x < 1)
+ fun_l10_n880(x)
+ else
+ fun_l10_n280(x)
+ end
+end
+
+def fun_l9_n773(x)
+ if (x < 1)
+ fun_l10_n368(x)
+ else
+ fun_l10_n97(x)
+ end
+end
+
+def fun_l9_n774(x)
+ if (x < 1)
+ fun_l10_n447(x)
+ else
+ fun_l10_n918(x)
+ end
+end
+
+def fun_l9_n775(x)
+ if (x < 1)
+ fun_l10_n222(x)
+ else
+ fun_l10_n35(x)
+ end
+end
+
+def fun_l9_n776(x)
+ if (x < 1)
+ fun_l10_n339(x)
+ else
+ fun_l10_n309(x)
+ end
+end
+
+def fun_l9_n777(x)
+ if (x < 1)
+ fun_l10_n948(x)
+ else
+ fun_l10_n967(x)
+ end
+end
+
+def fun_l9_n778(x)
+ if (x < 1)
+ fun_l10_n561(x)
+ else
+ fun_l10_n202(x)
+ end
+end
+
+def fun_l9_n779(x)
+ if (x < 1)
+ fun_l10_n863(x)
+ else
+ fun_l10_n356(x)
+ end
+end
+
+def fun_l9_n780(x)
+ if (x < 1)
+ fun_l10_n459(x)
+ else
+ fun_l10_n358(x)
+ end
+end
+
+def fun_l9_n781(x)
+ if (x < 1)
+ fun_l10_n543(x)
+ else
+ fun_l10_n229(x)
+ end
+end
+
+def fun_l9_n782(x)
+ if (x < 1)
+ fun_l10_n422(x)
+ else
+ fun_l10_n448(x)
+ end
+end
+
+def fun_l9_n783(x)
+ if (x < 1)
+ fun_l10_n222(x)
+ else
+ fun_l10_n63(x)
+ end
+end
+
+def fun_l9_n784(x)
+ if (x < 1)
+ fun_l10_n520(x)
+ else
+ fun_l10_n443(x)
+ end
+end
+
+def fun_l9_n785(x)
+ if (x < 1)
+ fun_l10_n894(x)
+ else
+ fun_l10_n379(x)
+ end
+end
+
+def fun_l9_n786(x)
+ if (x < 1)
+ fun_l10_n362(x)
+ else
+ fun_l10_n676(x)
+ end
+end
+
+def fun_l9_n787(x)
+ if (x < 1)
+ fun_l10_n545(x)
+ else
+ fun_l10_n263(x)
+ end
+end
+
+def fun_l9_n788(x)
+ if (x < 1)
+ fun_l10_n322(x)
+ else
+ fun_l10_n631(x)
+ end
+end
+
+def fun_l9_n789(x)
+ if (x < 1)
+ fun_l10_n916(x)
+ else
+ fun_l10_n877(x)
+ end
+end
+
+def fun_l9_n790(x)
+ if (x < 1)
+ fun_l10_n443(x)
+ else
+ fun_l10_n640(x)
+ end
+end
+
+def fun_l9_n791(x)
+ if (x < 1)
+ fun_l10_n202(x)
+ else
+ fun_l10_n686(x)
+ end
+end
+
+def fun_l9_n792(x)
+ if (x < 1)
+ fun_l10_n143(x)
+ else
+ fun_l10_n200(x)
+ end
+end
+
+def fun_l9_n793(x)
+ if (x < 1)
+ fun_l10_n939(x)
+ else
+ fun_l10_n374(x)
+ end
+end
+
+def fun_l9_n794(x)
+ if (x < 1)
+ fun_l10_n506(x)
+ else
+ fun_l10_n782(x)
+ end
+end
+
+def fun_l9_n795(x)
+ if (x < 1)
+ fun_l10_n619(x)
+ else
+ fun_l10_n439(x)
+ end
+end
+
+def fun_l9_n796(x)
+ if (x < 1)
+ fun_l10_n748(x)
+ else
+ fun_l10_n61(x)
+ end
+end
+
+def fun_l9_n797(x)
+ if (x < 1)
+ fun_l10_n217(x)
+ else
+ fun_l10_n816(x)
+ end
+end
+
+def fun_l9_n798(x)
+ if (x < 1)
+ fun_l10_n310(x)
+ else
+ fun_l10_n445(x)
+ end
+end
+
+def fun_l9_n799(x)
+ if (x < 1)
+ fun_l10_n262(x)
+ else
+ fun_l10_n776(x)
+ end
+end
+
+def fun_l9_n800(x)
+ if (x < 1)
+ fun_l10_n807(x)
+ else
+ fun_l10_n566(x)
+ end
+end
+
+def fun_l9_n801(x)
+ if (x < 1)
+ fun_l10_n466(x)
+ else
+ fun_l10_n287(x)
+ end
+end
+
+def fun_l9_n802(x)
+ if (x < 1)
+ fun_l10_n205(x)
+ else
+ fun_l10_n415(x)
+ end
+end
+
+def fun_l9_n803(x)
+ if (x < 1)
+ fun_l10_n618(x)
+ else
+ fun_l10_n87(x)
+ end
+end
+
+def fun_l9_n804(x)
+ if (x < 1)
+ fun_l10_n248(x)
+ else
+ fun_l10_n32(x)
+ end
+end
+
+def fun_l9_n805(x)
+ if (x < 1)
+ fun_l10_n537(x)
+ else
+ fun_l10_n844(x)
+ end
+end
+
+def fun_l9_n806(x)
+ if (x < 1)
+ fun_l10_n554(x)
+ else
+ fun_l10_n696(x)
+ end
+end
+
+def fun_l9_n807(x)
+ if (x < 1)
+ fun_l10_n774(x)
+ else
+ fun_l10_n486(x)
+ end
+end
+
+def fun_l9_n808(x)
+ if (x < 1)
+ fun_l10_n500(x)
+ else
+ fun_l10_n926(x)
+ end
+end
+
+def fun_l9_n809(x)
+ if (x < 1)
+ fun_l10_n601(x)
+ else
+ fun_l10_n696(x)
+ end
+end
+
+def fun_l9_n810(x)
+ if (x < 1)
+ fun_l10_n770(x)
+ else
+ fun_l10_n948(x)
+ end
+end
+
+def fun_l9_n811(x)
+ if (x < 1)
+ fun_l10_n658(x)
+ else
+ fun_l10_n840(x)
+ end
+end
+
+def fun_l9_n812(x)
+ if (x < 1)
+ fun_l10_n913(x)
+ else
+ fun_l10_n892(x)
+ end
+end
+
+def fun_l9_n813(x)
+ if (x < 1)
+ fun_l10_n440(x)
+ else
+ fun_l10_n204(x)
+ end
+end
+
+def fun_l9_n814(x)
+ if (x < 1)
+ fun_l10_n273(x)
+ else
+ fun_l10_n816(x)
+ end
+end
+
+def fun_l9_n815(x)
+ if (x < 1)
+ fun_l10_n190(x)
+ else
+ fun_l10_n735(x)
+ end
+end
+
+def fun_l9_n816(x)
+ if (x < 1)
+ fun_l10_n77(x)
+ else
+ fun_l10_n30(x)
+ end
+end
+
+def fun_l9_n817(x)
+ if (x < 1)
+ fun_l10_n697(x)
+ else
+ fun_l10_n985(x)
+ end
+end
+
+def fun_l9_n818(x)
+ if (x < 1)
+ fun_l10_n583(x)
+ else
+ fun_l10_n314(x)
+ end
+end
+
+def fun_l9_n819(x)
+ if (x < 1)
+ fun_l10_n149(x)
+ else
+ fun_l10_n556(x)
+ end
+end
+
+def fun_l9_n820(x)
+ if (x < 1)
+ fun_l10_n634(x)
+ else
+ fun_l10_n392(x)
+ end
+end
+
+def fun_l9_n821(x)
+ if (x < 1)
+ fun_l10_n401(x)
+ else
+ fun_l10_n217(x)
+ end
+end
+
+def fun_l9_n822(x)
+ if (x < 1)
+ fun_l10_n564(x)
+ else
+ fun_l10_n860(x)
+ end
+end
+
+def fun_l9_n823(x)
+ if (x < 1)
+ fun_l10_n901(x)
+ else
+ fun_l10_n836(x)
+ end
+end
+
+def fun_l9_n824(x)
+ if (x < 1)
+ fun_l10_n526(x)
+ else
+ fun_l10_n660(x)
+ end
+end
+
+def fun_l9_n825(x)
+ if (x < 1)
+ fun_l10_n245(x)
+ else
+ fun_l10_n914(x)
+ end
+end
+
+def fun_l9_n826(x)
+ if (x < 1)
+ fun_l10_n712(x)
+ else
+ fun_l10_n928(x)
+ end
+end
+
+def fun_l9_n827(x)
+ if (x < 1)
+ fun_l10_n596(x)
+ else
+ fun_l10_n803(x)
+ end
+end
+
+def fun_l9_n828(x)
+ if (x < 1)
+ fun_l10_n454(x)
+ else
+ fun_l10_n679(x)
+ end
+end
+
+def fun_l9_n829(x)
+ if (x < 1)
+ fun_l10_n104(x)
+ else
+ fun_l10_n137(x)
+ end
+end
+
+def fun_l9_n830(x)
+ if (x < 1)
+ fun_l10_n516(x)
+ else
+ fun_l10_n687(x)
+ end
+end
+
+def fun_l9_n831(x)
+ if (x < 1)
+ fun_l10_n720(x)
+ else
+ fun_l10_n770(x)
+ end
+end
+
+def fun_l9_n832(x)
+ if (x < 1)
+ fun_l10_n939(x)
+ else
+ fun_l10_n119(x)
+ end
+end
+
+def fun_l9_n833(x)
+ if (x < 1)
+ fun_l10_n515(x)
+ else
+ fun_l10_n71(x)
+ end
+end
+
+def fun_l9_n834(x)
+ if (x < 1)
+ fun_l10_n668(x)
+ else
+ fun_l10_n521(x)
+ end
+end
+
+def fun_l9_n835(x)
+ if (x < 1)
+ fun_l10_n405(x)
+ else
+ fun_l10_n69(x)
+ end
+end
+
+def fun_l9_n836(x)
+ if (x < 1)
+ fun_l10_n201(x)
+ else
+ fun_l10_n681(x)
+ end
+end
+
+def fun_l9_n837(x)
+ if (x < 1)
+ fun_l10_n161(x)
+ else
+ fun_l10_n258(x)
+ end
+end
+
+def fun_l9_n838(x)
+ if (x < 1)
+ fun_l10_n913(x)
+ else
+ fun_l10_n586(x)
+ end
+end
+
+def fun_l9_n839(x)
+ if (x < 1)
+ fun_l10_n566(x)
+ else
+ fun_l10_n543(x)
+ end
+end
+
+def fun_l9_n840(x)
+ if (x < 1)
+ fun_l10_n547(x)
+ else
+ fun_l10_n570(x)
+ end
+end
+
+def fun_l9_n841(x)
+ if (x < 1)
+ fun_l10_n888(x)
+ else
+ fun_l10_n843(x)
+ end
+end
+
+def fun_l9_n842(x)
+ if (x < 1)
+ fun_l10_n497(x)
+ else
+ fun_l10_n985(x)
+ end
+end
+
+def fun_l9_n843(x)
+ if (x < 1)
+ fun_l10_n754(x)
+ else
+ fun_l10_n390(x)
+ end
+end
+
+def fun_l9_n844(x)
+ if (x < 1)
+ fun_l10_n625(x)
+ else
+ fun_l10_n562(x)
+ end
+end
+
+def fun_l9_n845(x)
+ if (x < 1)
+ fun_l10_n858(x)
+ else
+ fun_l10_n553(x)
+ end
+end
+
+def fun_l9_n846(x)
+ if (x < 1)
+ fun_l10_n145(x)
+ else
+ fun_l10_n551(x)
+ end
+end
+
+def fun_l9_n847(x)
+ if (x < 1)
+ fun_l10_n916(x)
+ else
+ fun_l10_n851(x)
+ end
+end
+
+def fun_l9_n848(x)
+ if (x < 1)
+ fun_l10_n935(x)
+ else
+ fun_l10_n448(x)
+ end
+end
+
+def fun_l9_n849(x)
+ if (x < 1)
+ fun_l10_n664(x)
+ else
+ fun_l10_n832(x)
+ end
+end
+
+def fun_l9_n850(x)
+ if (x < 1)
+ fun_l10_n904(x)
+ else
+ fun_l10_n203(x)
+ end
+end
+
+def fun_l9_n851(x)
+ if (x < 1)
+ fun_l10_n863(x)
+ else
+ fun_l10_n491(x)
+ end
+end
+
+def fun_l9_n852(x)
+ if (x < 1)
+ fun_l10_n930(x)
+ else
+ fun_l10_n248(x)
+ end
+end
+
+def fun_l9_n853(x)
+ if (x < 1)
+ fun_l10_n637(x)
+ else
+ fun_l10_n716(x)
+ end
+end
+
+def fun_l9_n854(x)
+ if (x < 1)
+ fun_l10_n35(x)
+ else
+ fun_l10_n662(x)
+ end
+end
+
+def fun_l9_n855(x)
+ if (x < 1)
+ fun_l10_n57(x)
+ else
+ fun_l10_n392(x)
+ end
+end
+
+def fun_l9_n856(x)
+ if (x < 1)
+ fun_l10_n480(x)
+ else
+ fun_l10_n447(x)
+ end
+end
+
+def fun_l9_n857(x)
+ if (x < 1)
+ fun_l10_n134(x)
+ else
+ fun_l10_n842(x)
+ end
+end
+
+def fun_l9_n858(x)
+ if (x < 1)
+ fun_l10_n384(x)
+ else
+ fun_l10_n577(x)
+ end
+end
+
+def fun_l9_n859(x)
+ if (x < 1)
+ fun_l10_n718(x)
+ else
+ fun_l10_n571(x)
+ end
+end
+
+def fun_l9_n860(x)
+ if (x < 1)
+ fun_l10_n237(x)
+ else
+ fun_l10_n654(x)
+ end
+end
+
+def fun_l9_n861(x)
+ if (x < 1)
+ fun_l10_n807(x)
+ else
+ fun_l10_n409(x)
+ end
+end
+
+def fun_l9_n862(x)
+ if (x < 1)
+ fun_l10_n801(x)
+ else
+ fun_l10_n575(x)
+ end
+end
+
+def fun_l9_n863(x)
+ if (x < 1)
+ fun_l10_n500(x)
+ else
+ fun_l10_n133(x)
+ end
+end
+
+def fun_l9_n864(x)
+ if (x < 1)
+ fun_l10_n403(x)
+ else
+ fun_l10_n720(x)
+ end
+end
+
+def fun_l9_n865(x)
+ if (x < 1)
+ fun_l10_n648(x)
+ else
+ fun_l10_n677(x)
+ end
+end
+
+def fun_l9_n866(x)
+ if (x < 1)
+ fun_l10_n873(x)
+ else
+ fun_l10_n519(x)
+ end
+end
+
+def fun_l9_n867(x)
+ if (x < 1)
+ fun_l10_n459(x)
+ else
+ fun_l10_n331(x)
+ end
+end
+
+def fun_l9_n868(x)
+ if (x < 1)
+ fun_l10_n159(x)
+ else
+ fun_l10_n64(x)
+ end
+end
+
+def fun_l9_n869(x)
+ if (x < 1)
+ fun_l10_n155(x)
+ else
+ fun_l10_n41(x)
+ end
+end
+
+def fun_l9_n870(x)
+ if (x < 1)
+ fun_l10_n947(x)
+ else
+ fun_l10_n386(x)
+ end
+end
+
+def fun_l9_n871(x)
+ if (x < 1)
+ fun_l10_n868(x)
+ else
+ fun_l10_n794(x)
+ end
+end
+
+def fun_l9_n872(x)
+ if (x < 1)
+ fun_l10_n77(x)
+ else
+ fun_l10_n268(x)
+ end
+end
+
+def fun_l9_n873(x)
+ if (x < 1)
+ fun_l10_n119(x)
+ else
+ fun_l10_n819(x)
+ end
+end
+
+def fun_l9_n874(x)
+ if (x < 1)
+ fun_l10_n143(x)
+ else
+ fun_l10_n434(x)
+ end
+end
+
+def fun_l9_n875(x)
+ if (x < 1)
+ fun_l10_n238(x)
+ else
+ fun_l10_n489(x)
+ end
+end
+
+def fun_l9_n876(x)
+ if (x < 1)
+ fun_l10_n687(x)
+ else
+ fun_l10_n384(x)
+ end
+end
+
+def fun_l9_n877(x)
+ if (x < 1)
+ fun_l10_n27(x)
+ else
+ fun_l10_n138(x)
+ end
+end
+
+def fun_l9_n878(x)
+ if (x < 1)
+ fun_l10_n208(x)
+ else
+ fun_l10_n691(x)
+ end
+end
+
+def fun_l9_n879(x)
+ if (x < 1)
+ fun_l10_n793(x)
+ else
+ fun_l10_n165(x)
+ end
+end
+
+def fun_l9_n880(x)
+ if (x < 1)
+ fun_l10_n358(x)
+ else
+ fun_l10_n455(x)
+ end
+end
+
+def fun_l9_n881(x)
+ if (x < 1)
+ fun_l10_n558(x)
+ else
+ fun_l10_n184(x)
+ end
+end
+
+def fun_l9_n882(x)
+ if (x < 1)
+ fun_l10_n461(x)
+ else
+ fun_l10_n155(x)
+ end
+end
+
+def fun_l9_n883(x)
+ if (x < 1)
+ fun_l10_n503(x)
+ else
+ fun_l10_n225(x)
+ end
+end
+
+def fun_l9_n884(x)
+ if (x < 1)
+ fun_l10_n384(x)
+ else
+ fun_l10_n262(x)
+ end
+end
+
+def fun_l9_n885(x)
+ if (x < 1)
+ fun_l10_n565(x)
+ else
+ fun_l10_n633(x)
+ end
+end
+
+def fun_l9_n886(x)
+ if (x < 1)
+ fun_l10_n626(x)
+ else
+ fun_l10_n796(x)
+ end
+end
+
+def fun_l9_n887(x)
+ if (x < 1)
+ fun_l10_n424(x)
+ else
+ fun_l10_n458(x)
+ end
+end
+
+def fun_l9_n888(x)
+ if (x < 1)
+ fun_l10_n687(x)
+ else
+ fun_l10_n145(x)
+ end
+end
+
+def fun_l9_n889(x)
+ if (x < 1)
+ fun_l10_n787(x)
+ else
+ fun_l10_n225(x)
+ end
+end
+
+def fun_l9_n890(x)
+ if (x < 1)
+ fun_l10_n249(x)
+ else
+ fun_l10_n154(x)
+ end
+end
+
+def fun_l9_n891(x)
+ if (x < 1)
+ fun_l10_n38(x)
+ else
+ fun_l10_n635(x)
+ end
+end
+
+def fun_l9_n892(x)
+ if (x < 1)
+ fun_l10_n920(x)
+ else
+ fun_l10_n478(x)
+ end
+end
+
+def fun_l9_n893(x)
+ if (x < 1)
+ fun_l10_n13(x)
+ else
+ fun_l10_n174(x)
+ end
+end
+
+def fun_l9_n894(x)
+ if (x < 1)
+ fun_l10_n304(x)
+ else
+ fun_l10_n495(x)
+ end
+end
+
+def fun_l9_n895(x)
+ if (x < 1)
+ fun_l10_n226(x)
+ else
+ fun_l10_n420(x)
+ end
+end
+
+def fun_l9_n896(x)
+ if (x < 1)
+ fun_l10_n86(x)
+ else
+ fun_l10_n837(x)
+ end
+end
+
+def fun_l9_n897(x)
+ if (x < 1)
+ fun_l10_n927(x)
+ else
+ fun_l10_n344(x)
+ end
+end
+
+def fun_l9_n898(x)
+ if (x < 1)
+ fun_l10_n87(x)
+ else
+ fun_l10_n270(x)
+ end
+end
+
+def fun_l9_n899(x)
+ if (x < 1)
+ fun_l10_n549(x)
+ else
+ fun_l10_n349(x)
+ end
+end
+
+def fun_l9_n900(x)
+ if (x < 1)
+ fun_l10_n456(x)
+ else
+ fun_l10_n345(x)
+ end
+end
+
+def fun_l9_n901(x)
+ if (x < 1)
+ fun_l10_n154(x)
+ else
+ fun_l10_n764(x)
+ end
+end
+
+def fun_l9_n902(x)
+ if (x < 1)
+ fun_l10_n614(x)
+ else
+ fun_l10_n536(x)
+ end
+end
+
+def fun_l9_n903(x)
+ if (x < 1)
+ fun_l10_n108(x)
+ else
+ fun_l10_n197(x)
+ end
+end
+
+def fun_l9_n904(x)
+ if (x < 1)
+ fun_l10_n616(x)
+ else
+ fun_l10_n777(x)
+ end
+end
+
+def fun_l9_n905(x)
+ if (x < 1)
+ fun_l10_n515(x)
+ else
+ fun_l10_n830(x)
+ end
+end
+
+def fun_l9_n906(x)
+ if (x < 1)
+ fun_l10_n288(x)
+ else
+ fun_l10_n717(x)
+ end
+end
+
+def fun_l9_n907(x)
+ if (x < 1)
+ fun_l10_n704(x)
+ else
+ fun_l10_n962(x)
+ end
+end
+
+def fun_l9_n908(x)
+ if (x < 1)
+ fun_l10_n85(x)
+ else
+ fun_l10_n70(x)
+ end
+end
+
+def fun_l9_n909(x)
+ if (x < 1)
+ fun_l10_n806(x)
+ else
+ fun_l10_n97(x)
+ end
+end
+
+def fun_l9_n910(x)
+ if (x < 1)
+ fun_l10_n567(x)
+ else
+ fun_l10_n47(x)
+ end
+end
+
+def fun_l9_n911(x)
+ if (x < 1)
+ fun_l10_n919(x)
+ else
+ fun_l10_n879(x)
+ end
+end
+
+def fun_l9_n912(x)
+ if (x < 1)
+ fun_l10_n229(x)
+ else
+ fun_l10_n200(x)
+ end
+end
+
+def fun_l9_n913(x)
+ if (x < 1)
+ fun_l10_n502(x)
+ else
+ fun_l10_n820(x)
+ end
+end
+
+def fun_l9_n914(x)
+ if (x < 1)
+ fun_l10_n57(x)
+ else
+ fun_l10_n470(x)
+ end
+end
+
+def fun_l9_n915(x)
+ if (x < 1)
+ fun_l10_n909(x)
+ else
+ fun_l10_n845(x)
+ end
+end
+
+def fun_l9_n916(x)
+ if (x < 1)
+ fun_l10_n658(x)
+ else
+ fun_l10_n925(x)
+ end
+end
+
+def fun_l9_n917(x)
+ if (x < 1)
+ fun_l10_n886(x)
+ else
+ fun_l10_n285(x)
+ end
+end
+
+def fun_l9_n918(x)
+ if (x < 1)
+ fun_l10_n484(x)
+ else
+ fun_l10_n712(x)
+ end
+end
+
+def fun_l9_n919(x)
+ if (x < 1)
+ fun_l10_n299(x)
+ else
+ fun_l10_n144(x)
+ end
+end
+
+def fun_l9_n920(x)
+ if (x < 1)
+ fun_l10_n830(x)
+ else
+ fun_l10_n913(x)
+ end
+end
+
+def fun_l9_n921(x)
+ if (x < 1)
+ fun_l10_n306(x)
+ else
+ fun_l10_n242(x)
+ end
+end
+
+def fun_l9_n922(x)
+ if (x < 1)
+ fun_l10_n442(x)
+ else
+ fun_l10_n497(x)
+ end
+end
+
+def fun_l9_n923(x)
+ if (x < 1)
+ fun_l10_n22(x)
+ else
+ fun_l10_n376(x)
+ end
+end
+
+def fun_l9_n924(x)
+ if (x < 1)
+ fun_l10_n737(x)
+ else
+ fun_l10_n603(x)
+ end
+end
+
+def fun_l9_n925(x)
+ if (x < 1)
+ fun_l10_n300(x)
+ else
+ fun_l10_n974(x)
+ end
+end
+
+def fun_l9_n926(x)
+ if (x < 1)
+ fun_l10_n644(x)
+ else
+ fun_l10_n973(x)
+ end
+end
+
+def fun_l9_n927(x)
+ if (x < 1)
+ fun_l10_n413(x)
+ else
+ fun_l10_n353(x)
+ end
+end
+
+def fun_l9_n928(x)
+ if (x < 1)
+ fun_l10_n438(x)
+ else
+ fun_l10_n518(x)
+ end
+end
+
+def fun_l9_n929(x)
+ if (x < 1)
+ fun_l10_n30(x)
+ else
+ fun_l10_n207(x)
+ end
+end
+
+def fun_l9_n930(x)
+ if (x < 1)
+ fun_l10_n976(x)
+ else
+ fun_l10_n70(x)
+ end
+end
+
+def fun_l9_n931(x)
+ if (x < 1)
+ fun_l10_n5(x)
+ else
+ fun_l10_n37(x)
+ end
+end
+
+def fun_l9_n932(x)
+ if (x < 1)
+ fun_l10_n612(x)
+ else
+ fun_l10_n268(x)
+ end
+end
+
+def fun_l9_n933(x)
+ if (x < 1)
+ fun_l10_n81(x)
+ else
+ fun_l10_n373(x)
+ end
+end
+
+def fun_l9_n934(x)
+ if (x < 1)
+ fun_l10_n30(x)
+ else
+ fun_l10_n504(x)
+ end
+end
+
+def fun_l9_n935(x)
+ if (x < 1)
+ fun_l10_n131(x)
+ else
+ fun_l10_n617(x)
+ end
+end
+
+def fun_l9_n936(x)
+ if (x < 1)
+ fun_l10_n114(x)
+ else
+ fun_l10_n883(x)
+ end
+end
+
+def fun_l9_n937(x)
+ if (x < 1)
+ fun_l10_n859(x)
+ else
+ fun_l10_n788(x)
+ end
+end
+
+def fun_l9_n938(x)
+ if (x < 1)
+ fun_l10_n993(x)
+ else
+ fun_l10_n349(x)
+ end
+end
+
+def fun_l9_n939(x)
+ if (x < 1)
+ fun_l10_n775(x)
+ else
+ fun_l10_n195(x)
+ end
+end
+
+def fun_l9_n940(x)
+ if (x < 1)
+ fun_l10_n829(x)
+ else
+ fun_l10_n398(x)
+ end
+end
+
+def fun_l9_n941(x)
+ if (x < 1)
+ fun_l10_n906(x)
+ else
+ fun_l10_n529(x)
+ end
+end
+
+def fun_l9_n942(x)
+ if (x < 1)
+ fun_l10_n965(x)
+ else
+ fun_l10_n372(x)
+ end
+end
+
+def fun_l9_n943(x)
+ if (x < 1)
+ fun_l10_n953(x)
+ else
+ fun_l10_n397(x)
+ end
+end
+
+def fun_l9_n944(x)
+ if (x < 1)
+ fun_l10_n984(x)
+ else
+ fun_l10_n909(x)
+ end
+end
+
+def fun_l9_n945(x)
+ if (x < 1)
+ fun_l10_n649(x)
+ else
+ fun_l10_n304(x)
+ end
+end
+
+def fun_l9_n946(x)
+ if (x < 1)
+ fun_l10_n0(x)
+ else
+ fun_l10_n922(x)
+ end
+end
+
+def fun_l9_n947(x)
+ if (x < 1)
+ fun_l10_n460(x)
+ else
+ fun_l10_n215(x)
+ end
+end
+
+def fun_l9_n948(x)
+ if (x < 1)
+ fun_l10_n251(x)
+ else
+ fun_l10_n636(x)
+ end
+end
+
+def fun_l9_n949(x)
+ if (x < 1)
+ fun_l10_n14(x)
+ else
+ fun_l10_n494(x)
+ end
+end
+
+def fun_l9_n950(x)
+ if (x < 1)
+ fun_l10_n6(x)
+ else
+ fun_l10_n523(x)
+ end
+end
+
+def fun_l9_n951(x)
+ if (x < 1)
+ fun_l10_n705(x)
+ else
+ fun_l10_n689(x)
+ end
+end
+
+def fun_l9_n952(x)
+ if (x < 1)
+ fun_l10_n830(x)
+ else
+ fun_l10_n374(x)
+ end
+end
+
+def fun_l9_n953(x)
+ if (x < 1)
+ fun_l10_n451(x)
+ else
+ fun_l10_n87(x)
+ end
+end
+
+def fun_l9_n954(x)
+ if (x < 1)
+ fun_l10_n202(x)
+ else
+ fun_l10_n753(x)
+ end
+end
+
+def fun_l9_n955(x)
+ if (x < 1)
+ fun_l10_n384(x)
+ else
+ fun_l10_n216(x)
+ end
+end
+
+def fun_l9_n956(x)
+ if (x < 1)
+ fun_l10_n381(x)
+ else
+ fun_l10_n727(x)
+ end
+end
+
+def fun_l9_n957(x)
+ if (x < 1)
+ fun_l10_n876(x)
+ else
+ fun_l10_n760(x)
+ end
+end
+
+def fun_l9_n958(x)
+ if (x < 1)
+ fun_l10_n975(x)
+ else
+ fun_l10_n372(x)
+ end
+end
+
+def fun_l9_n959(x)
+ if (x < 1)
+ fun_l10_n714(x)
+ else
+ fun_l10_n680(x)
+ end
+end
+
+def fun_l9_n960(x)
+ if (x < 1)
+ fun_l10_n733(x)
+ else
+ fun_l10_n508(x)
+ end
+end
+
+def fun_l9_n961(x)
+ if (x < 1)
+ fun_l10_n319(x)
+ else
+ fun_l10_n90(x)
+ end
+end
+
+def fun_l9_n962(x)
+ if (x < 1)
+ fun_l10_n964(x)
+ else
+ fun_l10_n282(x)
+ end
+end
+
+def fun_l9_n963(x)
+ if (x < 1)
+ fun_l10_n179(x)
+ else
+ fun_l10_n324(x)
+ end
+end
+
+def fun_l9_n964(x)
+ if (x < 1)
+ fun_l10_n627(x)
+ else
+ fun_l10_n627(x)
+ end
+end
+
+def fun_l9_n965(x)
+ if (x < 1)
+ fun_l10_n7(x)
+ else
+ fun_l10_n375(x)
+ end
+end
+
+def fun_l9_n966(x)
+ if (x < 1)
+ fun_l10_n960(x)
+ else
+ fun_l10_n272(x)
+ end
+end
+
+def fun_l9_n967(x)
+ if (x < 1)
+ fun_l10_n869(x)
+ else
+ fun_l10_n737(x)
+ end
+end
+
+def fun_l9_n968(x)
+ if (x < 1)
+ fun_l10_n621(x)
+ else
+ fun_l10_n413(x)
+ end
+end
+
+def fun_l9_n969(x)
+ if (x < 1)
+ fun_l10_n258(x)
+ else
+ fun_l10_n105(x)
+ end
+end
+
+def fun_l9_n970(x)
+ if (x < 1)
+ fun_l10_n817(x)
+ else
+ fun_l10_n519(x)
+ end
+end
+
+def fun_l9_n971(x)
+ if (x < 1)
+ fun_l10_n462(x)
+ else
+ fun_l10_n335(x)
+ end
+end
+
+def fun_l9_n972(x)
+ if (x < 1)
+ fun_l10_n770(x)
+ else
+ fun_l10_n856(x)
+ end
+end
+
+def fun_l9_n973(x)
+ if (x < 1)
+ fun_l10_n607(x)
+ else
+ fun_l10_n142(x)
+ end
+end
+
+def fun_l9_n974(x)
+ if (x < 1)
+ fun_l10_n498(x)
+ else
+ fun_l10_n373(x)
+ end
+end
+
+def fun_l9_n975(x)
+ if (x < 1)
+ fun_l10_n239(x)
+ else
+ fun_l10_n895(x)
+ end
+end
+
+def fun_l9_n976(x)
+ if (x < 1)
+ fun_l10_n312(x)
+ else
+ fun_l10_n489(x)
+ end
+end
+
+def fun_l9_n977(x)
+ if (x < 1)
+ fun_l10_n595(x)
+ else
+ fun_l10_n674(x)
+ end
+end
+
+def fun_l9_n978(x)
+ if (x < 1)
+ fun_l10_n928(x)
+ else
+ fun_l10_n774(x)
+ end
+end
+
+def fun_l9_n979(x)
+ if (x < 1)
+ fun_l10_n964(x)
+ else
+ fun_l10_n860(x)
+ end
+end
+
+def fun_l9_n980(x)
+ if (x < 1)
+ fun_l10_n63(x)
+ else
+ fun_l10_n115(x)
+ end
+end
+
+def fun_l9_n981(x)
+ if (x < 1)
+ fun_l10_n930(x)
+ else
+ fun_l10_n559(x)
+ end
+end
+
+def fun_l9_n982(x)
+ if (x < 1)
+ fun_l10_n391(x)
+ else
+ fun_l10_n411(x)
+ end
+end
+
+def fun_l9_n983(x)
+ if (x < 1)
+ fun_l10_n71(x)
+ else
+ fun_l10_n632(x)
+ end
+end
+
+def fun_l9_n984(x)
+ if (x < 1)
+ fun_l10_n613(x)
+ else
+ fun_l10_n218(x)
+ end
+end
+
+def fun_l9_n985(x)
+ if (x < 1)
+ fun_l10_n263(x)
+ else
+ fun_l10_n858(x)
+ end
+end
+
+def fun_l9_n986(x)
+ if (x < 1)
+ fun_l10_n974(x)
+ else
+ fun_l10_n824(x)
+ end
+end
+
+def fun_l9_n987(x)
+ if (x < 1)
+ fun_l10_n636(x)
+ else
+ fun_l10_n55(x)
+ end
+end
+
+def fun_l9_n988(x)
+ if (x < 1)
+ fun_l10_n367(x)
+ else
+ fun_l10_n878(x)
+ end
+end
+
+def fun_l9_n989(x)
+ if (x < 1)
+ fun_l10_n316(x)
+ else
+ fun_l10_n800(x)
+ end
+end
+
+def fun_l9_n990(x)
+ if (x < 1)
+ fun_l10_n581(x)
+ else
+ fun_l10_n511(x)
+ end
+end
+
+def fun_l9_n991(x)
+ if (x < 1)
+ fun_l10_n667(x)
+ else
+ fun_l10_n566(x)
+ end
+end
+
+def fun_l9_n992(x)
+ if (x < 1)
+ fun_l10_n144(x)
+ else
+ fun_l10_n51(x)
+ end
+end
+
+def fun_l9_n993(x)
+ if (x < 1)
+ fun_l10_n652(x)
+ else
+ fun_l10_n436(x)
+ end
+end
+
+def fun_l9_n994(x)
+ if (x < 1)
+ fun_l10_n283(x)
+ else
+ fun_l10_n480(x)
+ end
+end
+
+def fun_l9_n995(x)
+ if (x < 1)
+ fun_l10_n908(x)
+ else
+ fun_l10_n86(x)
+ end
+end
+
+def fun_l9_n996(x)
+ if (x < 1)
+ fun_l10_n43(x)
+ else
+ fun_l10_n466(x)
+ end
+end
+
+def fun_l9_n997(x)
+ if (x < 1)
+ fun_l10_n968(x)
+ else
+ fun_l10_n97(x)
+ end
+end
+
+def fun_l9_n998(x)
+ if (x < 1)
+ fun_l10_n38(x)
+ else
+ fun_l10_n78(x)
+ end
+end
+
+def fun_l9_n999(x)
+ if (x < 1)
+ fun_l10_n947(x)
+ else
+ fun_l10_n322(x)
+ end
+end
+
+def fun_l10_n0(x)
+ if (x < 1)
+ fun_l11_n424(x)
+ else
+ fun_l11_n206(x)
+ end
+end
+
+def fun_l10_n1(x)
+ if (x < 1)
+ fun_l11_n263(x)
+ else
+ fun_l11_n886(x)
+ end
+end
+
+def fun_l10_n2(x)
+ if (x < 1)
+ fun_l11_n31(x)
+ else
+ fun_l11_n693(x)
+ end
+end
+
+def fun_l10_n3(x)
+ if (x < 1)
+ fun_l11_n924(x)
+ else
+ fun_l11_n585(x)
+ end
+end
+
+def fun_l10_n4(x)
+ if (x < 1)
+ fun_l11_n552(x)
+ else
+ fun_l11_n904(x)
+ end
+end
+
+def fun_l10_n5(x)
+ if (x < 1)
+ fun_l11_n912(x)
+ else
+ fun_l11_n127(x)
+ end
+end
+
+def fun_l10_n6(x)
+ if (x < 1)
+ fun_l11_n284(x)
+ else
+ fun_l11_n952(x)
+ end
+end
+
+def fun_l10_n7(x)
+ if (x < 1)
+ fun_l11_n294(x)
+ else
+ fun_l11_n527(x)
+ end
+end
+
+def fun_l10_n8(x)
+ if (x < 1)
+ fun_l11_n675(x)
+ else
+ fun_l11_n457(x)
+ end
+end
+
+def fun_l10_n9(x)
+ if (x < 1)
+ fun_l11_n908(x)
+ else
+ fun_l11_n963(x)
+ end
+end
+
+def fun_l10_n10(x)
+ if (x < 1)
+ fun_l11_n361(x)
+ else
+ fun_l11_n839(x)
+ end
+end
+
+def fun_l10_n11(x)
+ if (x < 1)
+ fun_l11_n402(x)
+ else
+ fun_l11_n228(x)
+ end
+end
+
+def fun_l10_n12(x)
+ if (x < 1)
+ fun_l11_n871(x)
+ else
+ fun_l11_n194(x)
+ end
+end
+
+def fun_l10_n13(x)
+ if (x < 1)
+ fun_l11_n255(x)
+ else
+ fun_l11_n816(x)
+ end
+end
+
+def fun_l10_n14(x)
+ if (x < 1)
+ fun_l11_n987(x)
+ else
+ fun_l11_n870(x)
+ end
+end
+
+def fun_l10_n15(x)
+ if (x < 1)
+ fun_l11_n538(x)
+ else
+ fun_l11_n837(x)
+ end
+end
+
+def fun_l10_n16(x)
+ if (x < 1)
+ fun_l11_n205(x)
+ else
+ fun_l11_n831(x)
+ end
+end
+
+def fun_l10_n17(x)
+ if (x < 1)
+ fun_l11_n737(x)
+ else
+ fun_l11_n242(x)
+ end
+end
+
+def fun_l10_n18(x)
+ if (x < 1)
+ fun_l11_n18(x)
+ else
+ fun_l11_n103(x)
+ end
+end
+
+def fun_l10_n19(x)
+ if (x < 1)
+ fun_l11_n928(x)
+ else
+ fun_l11_n300(x)
+ end
+end
+
+def fun_l10_n20(x)
+ if (x < 1)
+ fun_l11_n816(x)
+ else
+ fun_l11_n225(x)
+ end
+end
+
+def fun_l10_n21(x)
+ if (x < 1)
+ fun_l11_n52(x)
+ else
+ fun_l11_n901(x)
+ end
+end
+
+def fun_l10_n22(x)
+ if (x < 1)
+ fun_l11_n316(x)
+ else
+ fun_l11_n556(x)
+ end
+end
+
+def fun_l10_n23(x)
+ if (x < 1)
+ fun_l11_n103(x)
+ else
+ fun_l11_n223(x)
+ end
+end
+
+def fun_l10_n24(x)
+ if (x < 1)
+ fun_l11_n14(x)
+ else
+ fun_l11_n875(x)
+ end
+end
+
+def fun_l10_n25(x)
+ if (x < 1)
+ fun_l11_n359(x)
+ else
+ fun_l11_n504(x)
+ end
+end
+
+def fun_l10_n26(x)
+ if (x < 1)
+ fun_l11_n416(x)
+ else
+ fun_l11_n172(x)
+ end
+end
+
+def fun_l10_n27(x)
+ if (x < 1)
+ fun_l11_n142(x)
+ else
+ fun_l11_n238(x)
+ end
+end
+
+def fun_l10_n28(x)
+ if (x < 1)
+ fun_l11_n319(x)
+ else
+ fun_l11_n350(x)
+ end
+end
+
+def fun_l10_n29(x)
+ if (x < 1)
+ fun_l11_n53(x)
+ else
+ fun_l11_n162(x)
+ end
+end
+
+def fun_l10_n30(x)
+ if (x < 1)
+ fun_l11_n121(x)
+ else
+ fun_l11_n39(x)
+ end
+end
+
+def fun_l10_n31(x)
+ if (x < 1)
+ fun_l11_n447(x)
+ else
+ fun_l11_n259(x)
+ end
+end
+
+def fun_l10_n32(x)
+ if (x < 1)
+ fun_l11_n931(x)
+ else
+ fun_l11_n571(x)
+ end
+end
+
+def fun_l10_n33(x)
+ if (x < 1)
+ fun_l11_n705(x)
+ else
+ fun_l11_n544(x)
+ end
+end
+
+def fun_l10_n34(x)
+ if (x < 1)
+ fun_l11_n990(x)
+ else
+ fun_l11_n695(x)
+ end
+end
+
+def fun_l10_n35(x)
+ if (x < 1)
+ fun_l11_n197(x)
+ else
+ fun_l11_n391(x)
+ end
+end
+
+def fun_l10_n36(x)
+ if (x < 1)
+ fun_l11_n686(x)
+ else
+ fun_l11_n785(x)
+ end
+end
+
+def fun_l10_n37(x)
+ if (x < 1)
+ fun_l11_n466(x)
+ else
+ fun_l11_n783(x)
+ end
+end
+
+def fun_l10_n38(x)
+ if (x < 1)
+ fun_l11_n351(x)
+ else
+ fun_l11_n732(x)
+ end
+end
+
+def fun_l10_n39(x)
+ if (x < 1)
+ fun_l11_n22(x)
+ else
+ fun_l11_n995(x)
+ end
+end
+
+def fun_l10_n40(x)
+ if (x < 1)
+ fun_l11_n264(x)
+ else
+ fun_l11_n662(x)
+ end
+end
+
+def fun_l10_n41(x)
+ if (x < 1)
+ fun_l11_n91(x)
+ else
+ fun_l11_n673(x)
+ end
+end
+
+def fun_l10_n42(x)
+ if (x < 1)
+ fun_l11_n993(x)
+ else
+ fun_l11_n839(x)
+ end
+end
+
+def fun_l10_n43(x)
+ if (x < 1)
+ fun_l11_n158(x)
+ else
+ fun_l11_n774(x)
+ end
+end
+
+def fun_l10_n44(x)
+ if (x < 1)
+ fun_l11_n977(x)
+ else
+ fun_l11_n321(x)
+ end
+end
+
+def fun_l10_n45(x)
+ if (x < 1)
+ fun_l11_n121(x)
+ else
+ fun_l11_n184(x)
+ end
+end
+
+def fun_l10_n46(x)
+ if (x < 1)
+ fun_l11_n446(x)
+ else
+ fun_l11_n426(x)
+ end
+end
+
+def fun_l10_n47(x)
+ if (x < 1)
+ fun_l11_n524(x)
+ else
+ fun_l11_n123(x)
+ end
+end
+
+def fun_l10_n48(x)
+ if (x < 1)
+ fun_l11_n435(x)
+ else
+ fun_l11_n560(x)
+ end
+end
+
+def fun_l10_n49(x)
+ if (x < 1)
+ fun_l11_n94(x)
+ else
+ fun_l11_n731(x)
+ end
+end
+
+def fun_l10_n50(x)
+ if (x < 1)
+ fun_l11_n177(x)
+ else
+ fun_l11_n902(x)
+ end
+end
+
+def fun_l10_n51(x)
+ if (x < 1)
+ fun_l11_n648(x)
+ else
+ fun_l11_n807(x)
+ end
+end
+
+def fun_l10_n52(x)
+ if (x < 1)
+ fun_l11_n414(x)
+ else
+ fun_l11_n335(x)
+ end
+end
+
+def fun_l10_n53(x)
+ if (x < 1)
+ fun_l11_n754(x)
+ else
+ fun_l11_n789(x)
+ end
+end
+
+def fun_l10_n54(x)
+ if (x < 1)
+ fun_l11_n843(x)
+ else
+ fun_l11_n980(x)
+ end
+end
+
+def fun_l10_n55(x)
+ if (x < 1)
+ fun_l11_n706(x)
+ else
+ fun_l11_n160(x)
+ end
+end
+
+def fun_l10_n56(x)
+ if (x < 1)
+ fun_l11_n564(x)
+ else
+ fun_l11_n672(x)
+ end
+end
+
+def fun_l10_n57(x)
+ if (x < 1)
+ fun_l11_n158(x)
+ else
+ fun_l11_n154(x)
+ end
+end
+
+def fun_l10_n58(x)
+ if (x < 1)
+ fun_l11_n120(x)
+ else
+ fun_l11_n970(x)
+ end
+end
+
+def fun_l10_n59(x)
+ if (x < 1)
+ fun_l11_n561(x)
+ else
+ fun_l11_n872(x)
+ end
+end
+
+def fun_l10_n60(x)
+ if (x < 1)
+ fun_l11_n93(x)
+ else
+ fun_l11_n723(x)
+ end
+end
+
+def fun_l10_n61(x)
+ if (x < 1)
+ fun_l11_n921(x)
+ else
+ fun_l11_n578(x)
+ end
+end
+
+def fun_l10_n62(x)
+ if (x < 1)
+ fun_l11_n527(x)
+ else
+ fun_l11_n118(x)
+ end
+end
+
+def fun_l10_n63(x)
+ if (x < 1)
+ fun_l11_n225(x)
+ else
+ fun_l11_n937(x)
+ end
+end
+
+def fun_l10_n64(x)
+ if (x < 1)
+ fun_l11_n634(x)
+ else
+ fun_l11_n415(x)
+ end
+end
+
+def fun_l10_n65(x)
+ if (x < 1)
+ fun_l11_n718(x)
+ else
+ fun_l11_n958(x)
+ end
+end
+
+def fun_l10_n66(x)
+ if (x < 1)
+ fun_l11_n972(x)
+ else
+ fun_l11_n453(x)
+ end
+end
+
+def fun_l10_n67(x)
+ if (x < 1)
+ fun_l11_n85(x)
+ else
+ fun_l11_n934(x)
+ end
+end
+
+def fun_l10_n68(x)
+ if (x < 1)
+ fun_l11_n386(x)
+ else
+ fun_l11_n138(x)
+ end
+end
+
+def fun_l10_n69(x)
+ if (x < 1)
+ fun_l11_n312(x)
+ else
+ fun_l11_n62(x)
+ end
+end
+
+def fun_l10_n70(x)
+ if (x < 1)
+ fun_l11_n591(x)
+ else
+ fun_l11_n906(x)
+ end
+end
+
+def fun_l10_n71(x)
+ if (x < 1)
+ fun_l11_n571(x)
+ else
+ fun_l11_n429(x)
+ end
+end
+
+def fun_l10_n72(x)
+ if (x < 1)
+ fun_l11_n996(x)
+ else
+ fun_l11_n932(x)
+ end
+end
+
+def fun_l10_n73(x)
+ if (x < 1)
+ fun_l11_n691(x)
+ else
+ fun_l11_n116(x)
+ end
+end
+
+def fun_l10_n74(x)
+ if (x < 1)
+ fun_l11_n670(x)
+ else
+ fun_l11_n865(x)
+ end
+end
+
+def fun_l10_n75(x)
+ if (x < 1)
+ fun_l11_n568(x)
+ else
+ fun_l11_n164(x)
+ end
+end
+
+def fun_l10_n76(x)
+ if (x < 1)
+ fun_l11_n747(x)
+ else
+ fun_l11_n235(x)
+ end
+end
+
+def fun_l10_n77(x)
+ if (x < 1)
+ fun_l11_n402(x)
+ else
+ fun_l11_n670(x)
+ end
+end
+
+def fun_l10_n78(x)
+ if (x < 1)
+ fun_l11_n525(x)
+ else
+ fun_l11_n675(x)
+ end
+end
+
+def fun_l10_n79(x)
+ if (x < 1)
+ fun_l11_n6(x)
+ else
+ fun_l11_n238(x)
+ end
+end
+
+def fun_l10_n80(x)
+ if (x < 1)
+ fun_l11_n905(x)
+ else
+ fun_l11_n170(x)
+ end
+end
+
+def fun_l10_n81(x)
+ if (x < 1)
+ fun_l11_n610(x)
+ else
+ fun_l11_n527(x)
+ end
+end
+
+def fun_l10_n82(x)
+ if (x < 1)
+ fun_l11_n796(x)
+ else
+ fun_l11_n749(x)
+ end
+end
+
+def fun_l10_n83(x)
+ if (x < 1)
+ fun_l11_n634(x)
+ else
+ fun_l11_n49(x)
+ end
+end
+
+def fun_l10_n84(x)
+ if (x < 1)
+ fun_l11_n376(x)
+ else
+ fun_l11_n852(x)
+ end
+end
+
+def fun_l10_n85(x)
+ if (x < 1)
+ fun_l11_n593(x)
+ else
+ fun_l11_n752(x)
+ end
+end
+
+def fun_l10_n86(x)
+ if (x < 1)
+ fun_l11_n821(x)
+ else
+ fun_l11_n892(x)
+ end
+end
+
+def fun_l10_n87(x)
+ if (x < 1)
+ fun_l11_n950(x)
+ else
+ fun_l11_n309(x)
+ end
+end
+
+def fun_l10_n88(x)
+ if (x < 1)
+ fun_l11_n360(x)
+ else
+ fun_l11_n134(x)
+ end
+end
+
+def fun_l10_n89(x)
+ if (x < 1)
+ fun_l11_n935(x)
+ else
+ fun_l11_n241(x)
+ end
+end
+
+def fun_l10_n90(x)
+ if (x < 1)
+ fun_l11_n524(x)
+ else
+ fun_l11_n120(x)
+ end
+end
+
+def fun_l10_n91(x)
+ if (x < 1)
+ fun_l11_n25(x)
+ else
+ fun_l11_n357(x)
+ end
+end
+
+def fun_l10_n92(x)
+ if (x < 1)
+ fun_l11_n248(x)
+ else
+ fun_l11_n212(x)
+ end
+end
+
+def fun_l10_n93(x)
+ if (x < 1)
+ fun_l11_n860(x)
+ else
+ fun_l11_n733(x)
+ end
+end
+
+def fun_l10_n94(x)
+ if (x < 1)
+ fun_l11_n147(x)
+ else
+ fun_l11_n907(x)
+ end
+end
+
+def fun_l10_n95(x)
+ if (x < 1)
+ fun_l11_n758(x)
+ else
+ fun_l11_n62(x)
+ end
+end
+
+def fun_l10_n96(x)
+ if (x < 1)
+ fun_l11_n205(x)
+ else
+ fun_l11_n54(x)
+ end
+end
+
+def fun_l10_n97(x)
+ if (x < 1)
+ fun_l11_n8(x)
+ else
+ fun_l11_n813(x)
+ end
+end
+
+def fun_l10_n98(x)
+ if (x < 1)
+ fun_l11_n296(x)
+ else
+ fun_l11_n693(x)
+ end
+end
+
+def fun_l10_n99(x)
+ if (x < 1)
+ fun_l11_n181(x)
+ else
+ fun_l11_n709(x)
+ end
+end
+
+def fun_l10_n100(x)
+ if (x < 1)
+ fun_l11_n109(x)
+ else
+ fun_l11_n560(x)
+ end
+end
+
+def fun_l10_n101(x)
+ if (x < 1)
+ fun_l11_n290(x)
+ else
+ fun_l11_n693(x)
+ end
+end
+
+def fun_l10_n102(x)
+ if (x < 1)
+ fun_l11_n826(x)
+ else
+ fun_l11_n813(x)
+ end
+end
+
+def fun_l10_n103(x)
+ if (x < 1)
+ fun_l11_n3(x)
+ else
+ fun_l11_n787(x)
+ end
+end
+
+def fun_l10_n104(x)
+ if (x < 1)
+ fun_l11_n477(x)
+ else
+ fun_l11_n336(x)
+ end
+end
+
+def fun_l10_n105(x)
+ if (x < 1)
+ fun_l11_n131(x)
+ else
+ fun_l11_n500(x)
+ end
+end
+
+def fun_l10_n106(x)
+ if (x < 1)
+ fun_l11_n278(x)
+ else
+ fun_l11_n948(x)
+ end
+end
+
+def fun_l10_n107(x)
+ if (x < 1)
+ fun_l11_n950(x)
+ else
+ fun_l11_n848(x)
+ end
+end
+
+def fun_l10_n108(x)
+ if (x < 1)
+ fun_l11_n490(x)
+ else
+ fun_l11_n1(x)
+ end
+end
+
+def fun_l10_n109(x)
+ if (x < 1)
+ fun_l11_n297(x)
+ else
+ fun_l11_n902(x)
+ end
+end
+
+def fun_l10_n110(x)
+ if (x < 1)
+ fun_l11_n808(x)
+ else
+ fun_l11_n697(x)
+ end
+end
+
+def fun_l10_n111(x)
+ if (x < 1)
+ fun_l11_n330(x)
+ else
+ fun_l11_n424(x)
+ end
+end
+
+def fun_l10_n112(x)
+ if (x < 1)
+ fun_l11_n254(x)
+ else
+ fun_l11_n662(x)
+ end
+end
+
+def fun_l10_n113(x)
+ if (x < 1)
+ fun_l11_n811(x)
+ else
+ fun_l11_n196(x)
+ end
+end
+
+def fun_l10_n114(x)
+ if (x < 1)
+ fun_l11_n868(x)
+ else
+ fun_l11_n812(x)
+ end
+end
+
+def fun_l10_n115(x)
+ if (x < 1)
+ fun_l11_n308(x)
+ else
+ fun_l11_n184(x)
+ end
+end
+
+def fun_l10_n116(x)
+ if (x < 1)
+ fun_l11_n64(x)
+ else
+ fun_l11_n906(x)
+ end
+end
+
+def fun_l10_n117(x)
+ if (x < 1)
+ fun_l11_n339(x)
+ else
+ fun_l11_n338(x)
+ end
+end
+
+def fun_l10_n118(x)
+ if (x < 1)
+ fun_l11_n993(x)
+ else
+ fun_l11_n915(x)
+ end
+end
+
+def fun_l10_n119(x)
+ if (x < 1)
+ fun_l11_n729(x)
+ else
+ fun_l11_n472(x)
+ end
+end
+
+def fun_l10_n120(x)
+ if (x < 1)
+ fun_l11_n646(x)
+ else
+ fun_l11_n83(x)
+ end
+end
+
+def fun_l10_n121(x)
+ if (x < 1)
+ fun_l11_n294(x)
+ else
+ fun_l11_n208(x)
+ end
+end
+
+def fun_l10_n122(x)
+ if (x < 1)
+ fun_l11_n309(x)
+ else
+ fun_l11_n52(x)
+ end
+end
+
+def fun_l10_n123(x)
+ if (x < 1)
+ fun_l11_n5(x)
+ else
+ fun_l11_n124(x)
+ end
+end
+
+def fun_l10_n124(x)
+ if (x < 1)
+ fun_l11_n288(x)
+ else
+ fun_l11_n731(x)
+ end
+end
+
+def fun_l10_n125(x)
+ if (x < 1)
+ fun_l11_n835(x)
+ else
+ fun_l11_n381(x)
+ end
+end
+
+def fun_l10_n126(x)
+ if (x < 1)
+ fun_l11_n269(x)
+ else
+ fun_l11_n104(x)
+ end
+end
+
+def fun_l10_n127(x)
+ if (x < 1)
+ fun_l11_n377(x)
+ else
+ fun_l11_n650(x)
+ end
+end
+
+def fun_l10_n128(x)
+ if (x < 1)
+ fun_l11_n749(x)
+ else
+ fun_l11_n223(x)
+ end
+end
+
+def fun_l10_n129(x)
+ if (x < 1)
+ fun_l11_n493(x)
+ else
+ fun_l11_n834(x)
+ end
+end
+
+def fun_l10_n130(x)
+ if (x < 1)
+ fun_l11_n826(x)
+ else
+ fun_l11_n857(x)
+ end
+end
+
+def fun_l10_n131(x)
+ if (x < 1)
+ fun_l11_n19(x)
+ else
+ fun_l11_n932(x)
+ end
+end
+
+def fun_l10_n132(x)
+ if (x < 1)
+ fun_l11_n585(x)
+ else
+ fun_l11_n13(x)
+ end
+end
+
+def fun_l10_n133(x)
+ if (x < 1)
+ fun_l11_n91(x)
+ else
+ fun_l11_n748(x)
+ end
+end
+
+def fun_l10_n134(x)
+ if (x < 1)
+ fun_l11_n218(x)
+ else
+ fun_l11_n343(x)
+ end
+end
+
+def fun_l10_n135(x)
+ if (x < 1)
+ fun_l11_n386(x)
+ else
+ fun_l11_n655(x)
+ end
+end
+
+def fun_l10_n136(x)
+ if (x < 1)
+ fun_l11_n43(x)
+ else
+ fun_l11_n964(x)
+ end
+end
+
+def fun_l10_n137(x)
+ if (x < 1)
+ fun_l11_n50(x)
+ else
+ fun_l11_n836(x)
+ end
+end
+
+def fun_l10_n138(x)
+ if (x < 1)
+ fun_l11_n915(x)
+ else
+ fun_l11_n262(x)
+ end
+end
+
+def fun_l10_n139(x)
+ if (x < 1)
+ fun_l11_n187(x)
+ else
+ fun_l11_n321(x)
+ end
+end
+
+def fun_l10_n140(x)
+ if (x < 1)
+ fun_l11_n473(x)
+ else
+ fun_l11_n771(x)
+ end
+end
+
+def fun_l10_n141(x)
+ if (x < 1)
+ fun_l11_n125(x)
+ else
+ fun_l11_n118(x)
+ end
+end
+
+def fun_l10_n142(x)
+ if (x < 1)
+ fun_l11_n993(x)
+ else
+ fun_l11_n178(x)
+ end
+end
+
+def fun_l10_n143(x)
+ if (x < 1)
+ fun_l11_n223(x)
+ else
+ fun_l11_n509(x)
+ end
+end
+
+def fun_l10_n144(x)
+ if (x < 1)
+ fun_l11_n62(x)
+ else
+ fun_l11_n455(x)
+ end
+end
+
+def fun_l10_n145(x)
+ if (x < 1)
+ fun_l11_n155(x)
+ else
+ fun_l11_n486(x)
+ end
+end
+
+def fun_l10_n146(x)
+ if (x < 1)
+ fun_l11_n414(x)
+ else
+ fun_l11_n384(x)
+ end
+end
+
+def fun_l10_n147(x)
+ if (x < 1)
+ fun_l11_n840(x)
+ else
+ fun_l11_n287(x)
+ end
+end
+
+def fun_l10_n148(x)
+ if (x < 1)
+ fun_l11_n605(x)
+ else
+ fun_l11_n283(x)
+ end
+end
+
+def fun_l10_n149(x)
+ if (x < 1)
+ fun_l11_n101(x)
+ else
+ fun_l11_n710(x)
+ end
+end
+
+def fun_l10_n150(x)
+ if (x < 1)
+ fun_l11_n51(x)
+ else
+ fun_l11_n304(x)
+ end
+end
+
+def fun_l10_n151(x)
+ if (x < 1)
+ fun_l11_n501(x)
+ else
+ fun_l11_n789(x)
+ end
+end
+
+def fun_l10_n152(x)
+ if (x < 1)
+ fun_l11_n265(x)
+ else
+ fun_l11_n304(x)
+ end
+end
+
+def fun_l10_n153(x)
+ if (x < 1)
+ fun_l11_n500(x)
+ else
+ fun_l11_n32(x)
+ end
+end
+
+def fun_l10_n154(x)
+ if (x < 1)
+ fun_l11_n464(x)
+ else
+ fun_l11_n212(x)
+ end
+end
+
+def fun_l10_n155(x)
+ if (x < 1)
+ fun_l11_n729(x)
+ else
+ fun_l11_n805(x)
+ end
+end
+
+def fun_l10_n156(x)
+ if (x < 1)
+ fun_l11_n225(x)
+ else
+ fun_l11_n241(x)
+ end
+end
+
+def fun_l10_n157(x)
+ if (x < 1)
+ fun_l11_n600(x)
+ else
+ fun_l11_n424(x)
+ end
+end
+
+def fun_l10_n158(x)
+ if (x < 1)
+ fun_l11_n684(x)
+ else
+ fun_l11_n898(x)
+ end
+end
+
+def fun_l10_n159(x)
+ if (x < 1)
+ fun_l11_n354(x)
+ else
+ fun_l11_n909(x)
+ end
+end
+
+def fun_l10_n160(x)
+ if (x < 1)
+ fun_l11_n879(x)
+ else
+ fun_l11_n917(x)
+ end
+end
+
+def fun_l10_n161(x)
+ if (x < 1)
+ fun_l11_n547(x)
+ else
+ fun_l11_n333(x)
+ end
+end
+
+def fun_l10_n162(x)
+ if (x < 1)
+ fun_l11_n769(x)
+ else
+ fun_l11_n846(x)
+ end
+end
+
+def fun_l10_n163(x)
+ if (x < 1)
+ fun_l11_n292(x)
+ else
+ fun_l11_n526(x)
+ end
+end
+
+def fun_l10_n164(x)
+ if (x < 1)
+ fun_l11_n355(x)
+ else
+ fun_l11_n783(x)
+ end
+end
+
+def fun_l10_n165(x)
+ if (x < 1)
+ fun_l11_n413(x)
+ else
+ fun_l11_n570(x)
+ end
+end
+
+def fun_l10_n166(x)
+ if (x < 1)
+ fun_l11_n535(x)
+ else
+ fun_l11_n953(x)
+ end
+end
+
+def fun_l10_n167(x)
+ if (x < 1)
+ fun_l11_n661(x)
+ else
+ fun_l11_n178(x)
+ end
+end
+
+def fun_l10_n168(x)
+ if (x < 1)
+ fun_l11_n749(x)
+ else
+ fun_l11_n853(x)
+ end
+end
+
+def fun_l10_n169(x)
+ if (x < 1)
+ fun_l11_n208(x)
+ else
+ fun_l11_n378(x)
+ end
+end
+
+def fun_l10_n170(x)
+ if (x < 1)
+ fun_l11_n385(x)
+ else
+ fun_l11_n811(x)
+ end
+end
+
+def fun_l10_n171(x)
+ if (x < 1)
+ fun_l11_n960(x)
+ else
+ fun_l11_n631(x)
+ end
+end
+
+def fun_l10_n172(x)
+ if (x < 1)
+ fun_l11_n104(x)
+ else
+ fun_l11_n667(x)
+ end
+end
+
+def fun_l10_n173(x)
+ if (x < 1)
+ fun_l11_n532(x)
+ else
+ fun_l11_n169(x)
+ end
+end
+
+def fun_l10_n174(x)
+ if (x < 1)
+ fun_l11_n794(x)
+ else
+ fun_l11_n761(x)
+ end
+end
+
+def fun_l10_n175(x)
+ if (x < 1)
+ fun_l11_n306(x)
+ else
+ fun_l11_n369(x)
+ end
+end
+
+def fun_l10_n176(x)
+ if (x < 1)
+ fun_l11_n693(x)
+ else
+ fun_l11_n254(x)
+ end
+end
+
+def fun_l10_n177(x)
+ if (x < 1)
+ fun_l11_n927(x)
+ else
+ fun_l11_n194(x)
+ end
+end
+
+def fun_l10_n178(x)
+ if (x < 1)
+ fun_l11_n197(x)
+ else
+ fun_l11_n136(x)
+ end
+end
+
+def fun_l10_n179(x)
+ if (x < 1)
+ fun_l11_n482(x)
+ else
+ fun_l11_n182(x)
+ end
+end
+
+def fun_l10_n180(x)
+ if (x < 1)
+ fun_l11_n20(x)
+ else
+ fun_l11_n978(x)
+ end
+end
+
+def fun_l10_n181(x)
+ if (x < 1)
+ fun_l11_n101(x)
+ else
+ fun_l11_n92(x)
+ end
+end
+
+def fun_l10_n182(x)
+ if (x < 1)
+ fun_l11_n179(x)
+ else
+ fun_l11_n634(x)
+ end
+end
+
+def fun_l10_n183(x)
+ if (x < 1)
+ fun_l11_n221(x)
+ else
+ fun_l11_n275(x)
+ end
+end
+
+def fun_l10_n184(x)
+ if (x < 1)
+ fun_l11_n826(x)
+ else
+ fun_l11_n630(x)
+ end
+end
+
+def fun_l10_n185(x)
+ if (x < 1)
+ fun_l11_n706(x)
+ else
+ fun_l11_n30(x)
+ end
+end
+
+def fun_l10_n186(x)
+ if (x < 1)
+ fun_l11_n491(x)
+ else
+ fun_l11_n182(x)
+ end
+end
+
+def fun_l10_n187(x)
+ if (x < 1)
+ fun_l11_n404(x)
+ else
+ fun_l11_n812(x)
+ end
+end
+
+def fun_l10_n188(x)
+ if (x < 1)
+ fun_l11_n41(x)
+ else
+ fun_l11_n39(x)
+ end
+end
+
+def fun_l10_n189(x)
+ if (x < 1)
+ fun_l11_n620(x)
+ else
+ fun_l11_n659(x)
+ end
+end
+
+def fun_l10_n190(x)
+ if (x < 1)
+ fun_l11_n717(x)
+ else
+ fun_l11_n846(x)
+ end
+end
+
+def fun_l10_n191(x)
+ if (x < 1)
+ fun_l11_n328(x)
+ else
+ fun_l11_n223(x)
+ end
+end
+
+def fun_l10_n192(x)
+ if (x < 1)
+ fun_l11_n280(x)
+ else
+ fun_l11_n360(x)
+ end
+end
+
+def fun_l10_n193(x)
+ if (x < 1)
+ fun_l11_n798(x)
+ else
+ fun_l11_n303(x)
+ end
+end
+
+def fun_l10_n194(x)
+ if (x < 1)
+ fun_l11_n617(x)
+ else
+ fun_l11_n207(x)
+ end
+end
+
+def fun_l10_n195(x)
+ if (x < 1)
+ fun_l11_n918(x)
+ else
+ fun_l11_n398(x)
+ end
+end
+
+def fun_l10_n196(x)
+ if (x < 1)
+ fun_l11_n998(x)
+ else
+ fun_l11_n31(x)
+ end
+end
+
+def fun_l10_n197(x)
+ if (x < 1)
+ fun_l11_n740(x)
+ else
+ fun_l11_n220(x)
+ end
+end
+
+def fun_l10_n198(x)
+ if (x < 1)
+ fun_l11_n847(x)
+ else
+ fun_l11_n915(x)
+ end
+end
+
+def fun_l10_n199(x)
+ if (x < 1)
+ fun_l11_n946(x)
+ else
+ fun_l11_n300(x)
+ end
+end
+
+def fun_l10_n200(x)
+ if (x < 1)
+ fun_l11_n494(x)
+ else
+ fun_l11_n316(x)
+ end
+end
+
+def fun_l10_n201(x)
+ if (x < 1)
+ fun_l11_n871(x)
+ else
+ fun_l11_n310(x)
+ end
+end
+
+def fun_l10_n202(x)
+ if (x < 1)
+ fun_l11_n660(x)
+ else
+ fun_l11_n538(x)
+ end
+end
+
+def fun_l10_n203(x)
+ if (x < 1)
+ fun_l11_n478(x)
+ else
+ fun_l11_n618(x)
+ end
+end
+
+def fun_l10_n204(x)
+ if (x < 1)
+ fun_l11_n134(x)
+ else
+ fun_l11_n224(x)
+ end
+end
+
+def fun_l10_n205(x)
+ if (x < 1)
+ fun_l11_n128(x)
+ else
+ fun_l11_n279(x)
+ end
+end
+
+def fun_l10_n206(x)
+ if (x < 1)
+ fun_l11_n718(x)
+ else
+ fun_l11_n514(x)
+ end
+end
+
+def fun_l10_n207(x)
+ if (x < 1)
+ fun_l11_n466(x)
+ else
+ fun_l11_n979(x)
+ end
+end
+
+def fun_l10_n208(x)
+ if (x < 1)
+ fun_l11_n990(x)
+ else
+ fun_l11_n881(x)
+ end
+end
+
+def fun_l10_n209(x)
+ if (x < 1)
+ fun_l11_n860(x)
+ else
+ fun_l11_n995(x)
+ end
+end
+
+def fun_l10_n210(x)
+ if (x < 1)
+ fun_l11_n269(x)
+ else
+ fun_l11_n846(x)
+ end
+end
+
+def fun_l10_n211(x)
+ if (x < 1)
+ fun_l11_n155(x)
+ else
+ fun_l11_n97(x)
+ end
+end
+
+def fun_l10_n212(x)
+ if (x < 1)
+ fun_l11_n377(x)
+ else
+ fun_l11_n749(x)
+ end
+end
+
+def fun_l10_n213(x)
+ if (x < 1)
+ fun_l11_n647(x)
+ else
+ fun_l11_n276(x)
+ end
+end
+
+def fun_l10_n214(x)
+ if (x < 1)
+ fun_l11_n290(x)
+ else
+ fun_l11_n325(x)
+ end
+end
+
+def fun_l10_n215(x)
+ if (x < 1)
+ fun_l11_n445(x)
+ else
+ fun_l11_n538(x)
+ end
+end
+
+def fun_l10_n216(x)
+ if (x < 1)
+ fun_l11_n433(x)
+ else
+ fun_l11_n937(x)
+ end
+end
+
+def fun_l10_n217(x)
+ if (x < 1)
+ fun_l11_n288(x)
+ else
+ fun_l11_n897(x)
+ end
+end
+
+def fun_l10_n218(x)
+ if (x < 1)
+ fun_l11_n386(x)
+ else
+ fun_l11_n545(x)
+ end
+end
+
+def fun_l10_n219(x)
+ if (x < 1)
+ fun_l11_n678(x)
+ else
+ fun_l11_n433(x)
+ end
+end
+
+def fun_l10_n220(x)
+ if (x < 1)
+ fun_l11_n203(x)
+ else
+ fun_l11_n163(x)
+ end
+end
+
+def fun_l10_n221(x)
+ if (x < 1)
+ fun_l11_n134(x)
+ else
+ fun_l11_n545(x)
+ end
+end
+
+def fun_l10_n222(x)
+ if (x < 1)
+ fun_l11_n556(x)
+ else
+ fun_l11_n537(x)
+ end
+end
+
+def fun_l10_n223(x)
+ if (x < 1)
+ fun_l11_n743(x)
+ else
+ fun_l11_n88(x)
+ end
+end
+
+def fun_l10_n224(x)
+ if (x < 1)
+ fun_l11_n678(x)
+ else
+ fun_l11_n643(x)
+ end
+end
+
+def fun_l10_n225(x)
+ if (x < 1)
+ fun_l11_n13(x)
+ else
+ fun_l11_n219(x)
+ end
+end
+
+def fun_l10_n226(x)
+ if (x < 1)
+ fun_l11_n454(x)
+ else
+ fun_l11_n691(x)
+ end
+end
+
+def fun_l10_n227(x)
+ if (x < 1)
+ fun_l11_n117(x)
+ else
+ fun_l11_n433(x)
+ end
+end
+
+def fun_l10_n228(x)
+ if (x < 1)
+ fun_l11_n559(x)
+ else
+ fun_l11_n884(x)
+ end
+end
+
+def fun_l10_n229(x)
+ if (x < 1)
+ fun_l11_n58(x)
+ else
+ fun_l11_n620(x)
+ end
+end
+
+def fun_l10_n230(x)
+ if (x < 1)
+ fun_l11_n688(x)
+ else
+ fun_l11_n76(x)
+ end
+end
+
+def fun_l10_n231(x)
+ if (x < 1)
+ fun_l11_n726(x)
+ else
+ fun_l11_n644(x)
+ end
+end
+
+def fun_l10_n232(x)
+ if (x < 1)
+ fun_l11_n918(x)
+ else
+ fun_l11_n0(x)
+ end
+end
+
+def fun_l10_n233(x)
+ if (x < 1)
+ fun_l11_n761(x)
+ else
+ fun_l11_n487(x)
+ end
+end
+
+def fun_l10_n234(x)
+ if (x < 1)
+ fun_l11_n657(x)
+ else
+ fun_l11_n107(x)
+ end
+end
+
+def fun_l10_n235(x)
+ if (x < 1)
+ fun_l11_n897(x)
+ else
+ fun_l11_n881(x)
+ end
+end
+
+def fun_l10_n236(x)
+ if (x < 1)
+ fun_l11_n851(x)
+ else
+ fun_l11_n593(x)
+ end
+end
+
+def fun_l10_n237(x)
+ if (x < 1)
+ fun_l11_n319(x)
+ else
+ fun_l11_n983(x)
+ end
+end
+
+def fun_l10_n238(x)
+ if (x < 1)
+ fun_l11_n648(x)
+ else
+ fun_l11_n870(x)
+ end
+end
+
+def fun_l10_n239(x)
+ if (x < 1)
+ fun_l11_n195(x)
+ else
+ fun_l11_n378(x)
+ end
+end
+
+def fun_l10_n240(x)
+ if (x < 1)
+ fun_l11_n398(x)
+ else
+ fun_l11_n284(x)
+ end
+end
+
+def fun_l10_n241(x)
+ if (x < 1)
+ fun_l11_n118(x)
+ else
+ fun_l11_n417(x)
+ end
+end
+
+def fun_l10_n242(x)
+ if (x < 1)
+ fun_l11_n220(x)
+ else
+ fun_l11_n445(x)
+ end
+end
+
+def fun_l10_n243(x)
+ if (x < 1)
+ fun_l11_n783(x)
+ else
+ fun_l11_n989(x)
+ end
+end
+
+def fun_l10_n244(x)
+ if (x < 1)
+ fun_l11_n229(x)
+ else
+ fun_l11_n439(x)
+ end
+end
+
+def fun_l10_n245(x)
+ if (x < 1)
+ fun_l11_n78(x)
+ else
+ fun_l11_n272(x)
+ end
+end
+
+def fun_l10_n246(x)
+ if (x < 1)
+ fun_l11_n481(x)
+ else
+ fun_l11_n499(x)
+ end
+end
+
+def fun_l10_n247(x)
+ if (x < 1)
+ fun_l11_n213(x)
+ else
+ fun_l11_n471(x)
+ end
+end
+
+def fun_l10_n248(x)
+ if (x < 1)
+ fun_l11_n45(x)
+ else
+ fun_l11_n919(x)
+ end
+end
+
+def fun_l10_n249(x)
+ if (x < 1)
+ fun_l11_n13(x)
+ else
+ fun_l11_n526(x)
+ end
+end
+
+def fun_l10_n250(x)
+ if (x < 1)
+ fun_l11_n997(x)
+ else
+ fun_l11_n112(x)
+ end
+end
+
+def fun_l10_n251(x)
+ if (x < 1)
+ fun_l11_n662(x)
+ else
+ fun_l11_n950(x)
+ end
+end
+
+def fun_l10_n252(x)
+ if (x < 1)
+ fun_l11_n272(x)
+ else
+ fun_l11_n345(x)
+ end
+end
+
+def fun_l10_n253(x)
+ if (x < 1)
+ fun_l11_n28(x)
+ else
+ fun_l11_n24(x)
+ end
+end
+
+def fun_l10_n254(x)
+ if (x < 1)
+ fun_l11_n326(x)
+ else
+ fun_l11_n907(x)
+ end
+end
+
+def fun_l10_n255(x)
+ if (x < 1)
+ fun_l11_n612(x)
+ else
+ fun_l11_n790(x)
+ end
+end
+
+def fun_l10_n256(x)
+ if (x < 1)
+ fun_l11_n50(x)
+ else
+ fun_l11_n16(x)
+ end
+end
+
+def fun_l10_n257(x)
+ if (x < 1)
+ fun_l11_n350(x)
+ else
+ fun_l11_n151(x)
+ end
+end
+
+def fun_l10_n258(x)
+ if (x < 1)
+ fun_l11_n290(x)
+ else
+ fun_l11_n113(x)
+ end
+end
+
+def fun_l10_n259(x)
+ if (x < 1)
+ fun_l11_n751(x)
+ else
+ fun_l11_n16(x)
+ end
+end
+
+def fun_l10_n260(x)
+ if (x < 1)
+ fun_l11_n337(x)
+ else
+ fun_l11_n516(x)
+ end
+end
+
+def fun_l10_n261(x)
+ if (x < 1)
+ fun_l11_n530(x)
+ else
+ fun_l11_n19(x)
+ end
+end
+
+def fun_l10_n262(x)
+ if (x < 1)
+ fun_l11_n977(x)
+ else
+ fun_l11_n529(x)
+ end
+end
+
+def fun_l10_n263(x)
+ if (x < 1)
+ fun_l11_n769(x)
+ else
+ fun_l11_n723(x)
+ end
+end
+
+def fun_l10_n264(x)
+ if (x < 1)
+ fun_l11_n673(x)
+ else
+ fun_l11_n771(x)
+ end
+end
+
+def fun_l10_n265(x)
+ if (x < 1)
+ fun_l11_n28(x)
+ else
+ fun_l11_n427(x)
+ end
+end
+
+def fun_l10_n266(x)
+ if (x < 1)
+ fun_l11_n92(x)
+ else
+ fun_l11_n590(x)
+ end
+end
+
+def fun_l10_n267(x)
+ if (x < 1)
+ fun_l11_n762(x)
+ else
+ fun_l11_n352(x)
+ end
+end
+
+def fun_l10_n268(x)
+ if (x < 1)
+ fun_l11_n988(x)
+ else
+ fun_l11_n126(x)
+ end
+end
+
+def fun_l10_n269(x)
+ if (x < 1)
+ fun_l11_n92(x)
+ else
+ fun_l11_n455(x)
+ end
+end
+
+def fun_l10_n270(x)
+ if (x < 1)
+ fun_l11_n233(x)
+ else
+ fun_l11_n404(x)
+ end
+end
+
+def fun_l10_n271(x)
+ if (x < 1)
+ fun_l11_n122(x)
+ else
+ fun_l11_n245(x)
+ end
+end
+
+def fun_l10_n272(x)
+ if (x < 1)
+ fun_l11_n277(x)
+ else
+ fun_l11_n969(x)
+ end
+end
+
+def fun_l10_n273(x)
+ if (x < 1)
+ fun_l11_n848(x)
+ else
+ fun_l11_n56(x)
+ end
+end
+
+def fun_l10_n274(x)
+ if (x < 1)
+ fun_l11_n640(x)
+ else
+ fun_l11_n632(x)
+ end
+end
+
+def fun_l10_n275(x)
+ if (x < 1)
+ fun_l11_n38(x)
+ else
+ fun_l11_n816(x)
+ end
+end
+
+def fun_l10_n276(x)
+ if (x < 1)
+ fun_l11_n706(x)
+ else
+ fun_l11_n126(x)
+ end
+end
+
+def fun_l10_n277(x)
+ if (x < 1)
+ fun_l11_n710(x)
+ else
+ fun_l11_n128(x)
+ end
+end
+
+def fun_l10_n278(x)
+ if (x < 1)
+ fun_l11_n175(x)
+ else
+ fun_l11_n954(x)
+ end
+end
+
+def fun_l10_n279(x)
+ if (x < 1)
+ fun_l11_n379(x)
+ else
+ fun_l11_n58(x)
+ end
+end
+
+def fun_l10_n280(x)
+ if (x < 1)
+ fun_l11_n926(x)
+ else
+ fun_l11_n287(x)
+ end
+end
+
+def fun_l10_n281(x)
+ if (x < 1)
+ fun_l11_n981(x)
+ else
+ fun_l11_n921(x)
+ end
+end
+
+def fun_l10_n282(x)
+ if (x < 1)
+ fun_l11_n222(x)
+ else
+ fun_l11_n954(x)
+ end
+end
+
+def fun_l10_n283(x)
+ if (x < 1)
+ fun_l11_n295(x)
+ else
+ fun_l11_n575(x)
+ end
+end
+
+def fun_l10_n284(x)
+ if (x < 1)
+ fun_l11_n554(x)
+ else
+ fun_l11_n559(x)
+ end
+end
+
+def fun_l10_n285(x)
+ if (x < 1)
+ fun_l11_n476(x)
+ else
+ fun_l11_n487(x)
+ end
+end
+
+def fun_l10_n286(x)
+ if (x < 1)
+ fun_l11_n102(x)
+ else
+ fun_l11_n928(x)
+ end
+end
+
+def fun_l10_n287(x)
+ if (x < 1)
+ fun_l11_n949(x)
+ else
+ fun_l11_n900(x)
+ end
+end
+
+def fun_l10_n288(x)
+ if (x < 1)
+ fun_l11_n717(x)
+ else
+ fun_l11_n762(x)
+ end
+end
+
+def fun_l10_n289(x)
+ if (x < 1)
+ fun_l11_n304(x)
+ else
+ fun_l11_n572(x)
+ end
+end
+
+def fun_l10_n290(x)
+ if (x < 1)
+ fun_l11_n748(x)
+ else
+ fun_l11_n791(x)
+ end
+end
+
+def fun_l10_n291(x)
+ if (x < 1)
+ fun_l11_n557(x)
+ else
+ fun_l11_n79(x)
+ end
+end
+
+def fun_l10_n292(x)
+ if (x < 1)
+ fun_l11_n74(x)
+ else
+ fun_l11_n931(x)
+ end
+end
+
+def fun_l10_n293(x)
+ if (x < 1)
+ fun_l11_n31(x)
+ else
+ fun_l11_n791(x)
+ end
+end
+
+def fun_l10_n294(x)
+ if (x < 1)
+ fun_l11_n29(x)
+ else
+ fun_l11_n377(x)
+ end
+end
+
+def fun_l10_n295(x)
+ if (x < 1)
+ fun_l11_n509(x)
+ else
+ fun_l11_n900(x)
+ end
+end
+
+def fun_l10_n296(x)
+ if (x < 1)
+ fun_l11_n594(x)
+ else
+ fun_l11_n835(x)
+ end
+end
+
+def fun_l10_n297(x)
+ if (x < 1)
+ fun_l11_n943(x)
+ else
+ fun_l11_n621(x)
+ end
+end
+
+def fun_l10_n298(x)
+ if (x < 1)
+ fun_l11_n860(x)
+ else
+ fun_l11_n403(x)
+ end
+end
+
+def fun_l10_n299(x)
+ if (x < 1)
+ fun_l11_n676(x)
+ else
+ fun_l11_n478(x)
+ end
+end
+
+def fun_l10_n300(x)
+ if (x < 1)
+ fun_l11_n513(x)
+ else
+ fun_l11_n661(x)
+ end
+end
+
+def fun_l10_n301(x)
+ if (x < 1)
+ fun_l11_n513(x)
+ else
+ fun_l11_n30(x)
+ end
+end
+
+def fun_l10_n302(x)
+ if (x < 1)
+ fun_l11_n763(x)
+ else
+ fun_l11_n823(x)
+ end
+end
+
+def fun_l10_n303(x)
+ if (x < 1)
+ fun_l11_n469(x)
+ else
+ fun_l11_n250(x)
+ end
+end
+
+def fun_l10_n304(x)
+ if (x < 1)
+ fun_l11_n637(x)
+ else
+ fun_l11_n478(x)
+ end
+end
+
+def fun_l10_n305(x)
+ if (x < 1)
+ fun_l11_n825(x)
+ else
+ fun_l11_n258(x)
+ end
+end
+
+def fun_l10_n306(x)
+ if (x < 1)
+ fun_l11_n264(x)
+ else
+ fun_l11_n698(x)
+ end
+end
+
+def fun_l10_n307(x)
+ if (x < 1)
+ fun_l11_n426(x)
+ else
+ fun_l11_n490(x)
+ end
+end
+
+def fun_l10_n308(x)
+ if (x < 1)
+ fun_l11_n157(x)
+ else
+ fun_l11_n407(x)
+ end
+end
+
+def fun_l10_n309(x)
+ if (x < 1)
+ fun_l11_n68(x)
+ else
+ fun_l11_n424(x)
+ end
+end
+
+def fun_l10_n310(x)
+ if (x < 1)
+ fun_l11_n844(x)
+ else
+ fun_l11_n955(x)
+ end
+end
+
+def fun_l10_n311(x)
+ if (x < 1)
+ fun_l11_n316(x)
+ else
+ fun_l11_n27(x)
+ end
+end
+
+def fun_l10_n312(x)
+ if (x < 1)
+ fun_l11_n771(x)
+ else
+ fun_l11_n604(x)
+ end
+end
+
+def fun_l10_n313(x)
+ if (x < 1)
+ fun_l11_n436(x)
+ else
+ fun_l11_n714(x)
+ end
+end
+
+def fun_l10_n314(x)
+ if (x < 1)
+ fun_l11_n791(x)
+ else
+ fun_l11_n889(x)
+ end
+end
+
+def fun_l10_n315(x)
+ if (x < 1)
+ fun_l11_n621(x)
+ else
+ fun_l11_n694(x)
+ end
+end
+
+def fun_l10_n316(x)
+ if (x < 1)
+ fun_l11_n403(x)
+ else
+ fun_l11_n625(x)
+ end
+end
+
+def fun_l10_n317(x)
+ if (x < 1)
+ fun_l11_n532(x)
+ else
+ fun_l11_n920(x)
+ end
+end
+
+def fun_l10_n318(x)
+ if (x < 1)
+ fun_l11_n895(x)
+ else
+ fun_l11_n781(x)
+ end
+end
+
+def fun_l10_n319(x)
+ if (x < 1)
+ fun_l11_n109(x)
+ else
+ fun_l11_n254(x)
+ end
+end
+
+def fun_l10_n320(x)
+ if (x < 1)
+ fun_l11_n842(x)
+ else
+ fun_l11_n879(x)
+ end
+end
+
+def fun_l10_n321(x)
+ if (x < 1)
+ fun_l11_n655(x)
+ else
+ fun_l11_n518(x)
+ end
+end
+
+def fun_l10_n322(x)
+ if (x < 1)
+ fun_l11_n727(x)
+ else
+ fun_l11_n14(x)
+ end
+end
+
+def fun_l10_n323(x)
+ if (x < 1)
+ fun_l11_n808(x)
+ else
+ fun_l11_n128(x)
+ end
+end
+
+def fun_l10_n324(x)
+ if (x < 1)
+ fun_l11_n412(x)
+ else
+ fun_l11_n940(x)
+ end
+end
+
+def fun_l10_n325(x)
+ if (x < 1)
+ fun_l11_n944(x)
+ else
+ fun_l11_n915(x)
+ end
+end
+
+def fun_l10_n326(x)
+ if (x < 1)
+ fun_l11_n120(x)
+ else
+ fun_l11_n572(x)
+ end
+end
+
+def fun_l10_n327(x)
+ if (x < 1)
+ fun_l11_n444(x)
+ else
+ fun_l11_n793(x)
+ end
+end
+
+def fun_l10_n328(x)
+ if (x < 1)
+ fun_l11_n892(x)
+ else
+ fun_l11_n475(x)
+ end
+end
+
+def fun_l10_n329(x)
+ if (x < 1)
+ fun_l11_n919(x)
+ else
+ fun_l11_n183(x)
+ end
+end
+
+def fun_l10_n330(x)
+ if (x < 1)
+ fun_l11_n80(x)
+ else
+ fun_l11_n357(x)
+ end
+end
+
+def fun_l10_n331(x)
+ if (x < 1)
+ fun_l11_n340(x)
+ else
+ fun_l11_n349(x)
+ end
+end
+
+def fun_l10_n332(x)
+ if (x < 1)
+ fun_l11_n579(x)
+ else
+ fun_l11_n845(x)
+ end
+end
+
+def fun_l10_n333(x)
+ if (x < 1)
+ fun_l11_n169(x)
+ else
+ fun_l11_n583(x)
+ end
+end
+
+def fun_l10_n334(x)
+ if (x < 1)
+ fun_l11_n544(x)
+ else
+ fun_l11_n462(x)
+ end
+end
+
+def fun_l10_n335(x)
+ if (x < 1)
+ fun_l11_n51(x)
+ else
+ fun_l11_n635(x)
+ end
+end
+
+def fun_l10_n336(x)
+ if (x < 1)
+ fun_l11_n965(x)
+ else
+ fun_l11_n538(x)
+ end
+end
+
+def fun_l10_n337(x)
+ if (x < 1)
+ fun_l11_n930(x)
+ else
+ fun_l11_n169(x)
+ end
+end
+
+def fun_l10_n338(x)
+ if (x < 1)
+ fun_l11_n732(x)
+ else
+ fun_l11_n574(x)
+ end
+end
+
+def fun_l10_n339(x)
+ if (x < 1)
+ fun_l11_n51(x)
+ else
+ fun_l11_n141(x)
+ end
+end
+
+def fun_l10_n340(x)
+ if (x < 1)
+ fun_l11_n149(x)
+ else
+ fun_l11_n346(x)
+ end
+end
+
+def fun_l10_n341(x)
+ if (x < 1)
+ fun_l11_n163(x)
+ else
+ fun_l11_n224(x)
+ end
+end
+
+def fun_l10_n342(x)
+ if (x < 1)
+ fun_l11_n175(x)
+ else
+ fun_l11_n40(x)
+ end
+end
+
+def fun_l10_n343(x)
+ if (x < 1)
+ fun_l11_n156(x)
+ else
+ fun_l11_n639(x)
+ end
+end
+
+def fun_l10_n344(x)
+ if (x < 1)
+ fun_l11_n934(x)
+ else
+ fun_l11_n85(x)
+ end
+end
+
+def fun_l10_n345(x)
+ if (x < 1)
+ fun_l11_n182(x)
+ else
+ fun_l11_n190(x)
+ end
+end
+
+def fun_l10_n346(x)
+ if (x < 1)
+ fun_l11_n879(x)
+ else
+ fun_l11_n702(x)
+ end
+end
+
+def fun_l10_n347(x)
+ if (x < 1)
+ fun_l11_n540(x)
+ else
+ fun_l11_n689(x)
+ end
+end
+
+def fun_l10_n348(x)
+ if (x < 1)
+ fun_l11_n945(x)
+ else
+ fun_l11_n39(x)
+ end
+end
+
+def fun_l10_n349(x)
+ if (x < 1)
+ fun_l11_n683(x)
+ else
+ fun_l11_n688(x)
+ end
+end
+
+def fun_l10_n350(x)
+ if (x < 1)
+ fun_l11_n750(x)
+ else
+ fun_l11_n577(x)
+ end
+end
+
+def fun_l10_n351(x)
+ if (x < 1)
+ fun_l11_n74(x)
+ else
+ fun_l11_n672(x)
+ end
+end
+
+def fun_l10_n352(x)
+ if (x < 1)
+ fun_l11_n252(x)
+ else
+ fun_l11_n766(x)
+ end
+end
+
+def fun_l10_n353(x)
+ if (x < 1)
+ fun_l11_n702(x)
+ else
+ fun_l11_n516(x)
+ end
+end
+
+def fun_l10_n354(x)
+ if (x < 1)
+ fun_l11_n19(x)
+ else
+ fun_l11_n290(x)
+ end
+end
+
+def fun_l10_n355(x)
+ if (x < 1)
+ fun_l11_n70(x)
+ else
+ fun_l11_n553(x)
+ end
+end
+
+def fun_l10_n356(x)
+ if (x < 1)
+ fun_l11_n654(x)
+ else
+ fun_l11_n108(x)
+ end
+end
+
+def fun_l10_n357(x)
+ if (x < 1)
+ fun_l11_n820(x)
+ else
+ fun_l11_n320(x)
+ end
+end
+
+def fun_l10_n358(x)
+ if (x < 1)
+ fun_l11_n417(x)
+ else
+ fun_l11_n290(x)
+ end
+end
+
+def fun_l10_n359(x)
+ if (x < 1)
+ fun_l11_n832(x)
+ else
+ fun_l11_n647(x)
+ end
+end
+
+def fun_l10_n360(x)
+ if (x < 1)
+ fun_l11_n625(x)
+ else
+ fun_l11_n723(x)
+ end
+end
+
+def fun_l10_n361(x)
+ if (x < 1)
+ fun_l11_n257(x)
+ else
+ fun_l11_n991(x)
+ end
+end
+
+def fun_l10_n362(x)
+ if (x < 1)
+ fun_l11_n101(x)
+ else
+ fun_l11_n247(x)
+ end
+end
+
+def fun_l10_n363(x)
+ if (x < 1)
+ fun_l11_n484(x)
+ else
+ fun_l11_n953(x)
+ end
+end
+
+def fun_l10_n364(x)
+ if (x < 1)
+ fun_l11_n281(x)
+ else
+ fun_l11_n846(x)
+ end
+end
+
+def fun_l10_n365(x)
+ if (x < 1)
+ fun_l11_n425(x)
+ else
+ fun_l11_n772(x)
+ end
+end
+
+def fun_l10_n366(x)
+ if (x < 1)
+ fun_l11_n724(x)
+ else
+ fun_l11_n725(x)
+ end
+end
+
+def fun_l10_n367(x)
+ if (x < 1)
+ fun_l11_n943(x)
+ else
+ fun_l11_n360(x)
+ end
+end
+
+def fun_l10_n368(x)
+ if (x < 1)
+ fun_l11_n874(x)
+ else
+ fun_l11_n698(x)
+ end
+end
+
+def fun_l10_n369(x)
+ if (x < 1)
+ fun_l11_n419(x)
+ else
+ fun_l11_n672(x)
+ end
+end
+
+def fun_l10_n370(x)
+ if (x < 1)
+ fun_l11_n655(x)
+ else
+ fun_l11_n468(x)
+ end
+end
+
+def fun_l10_n371(x)
+ if (x < 1)
+ fun_l11_n577(x)
+ else
+ fun_l11_n402(x)
+ end
+end
+
+def fun_l10_n372(x)
+ if (x < 1)
+ fun_l11_n531(x)
+ else
+ fun_l11_n319(x)
+ end
+end
+
+def fun_l10_n373(x)
+ if (x < 1)
+ fun_l11_n972(x)
+ else
+ fun_l11_n901(x)
+ end
+end
+
+def fun_l10_n374(x)
+ if (x < 1)
+ fun_l11_n59(x)
+ else
+ fun_l11_n12(x)
+ end
+end
+
+def fun_l10_n375(x)
+ if (x < 1)
+ fun_l11_n409(x)
+ else
+ fun_l11_n214(x)
+ end
+end
+
+def fun_l10_n376(x)
+ if (x < 1)
+ fun_l11_n52(x)
+ else
+ fun_l11_n395(x)
+ end
+end
+
+def fun_l10_n377(x)
+ if (x < 1)
+ fun_l11_n594(x)
+ else
+ fun_l11_n434(x)
+ end
+end
+
+def fun_l10_n378(x)
+ if (x < 1)
+ fun_l11_n795(x)
+ else
+ fun_l11_n820(x)
+ end
+end
+
+def fun_l10_n379(x)
+ if (x < 1)
+ fun_l11_n962(x)
+ else
+ fun_l11_n111(x)
+ end
+end
+
+def fun_l10_n380(x)
+ if (x < 1)
+ fun_l11_n762(x)
+ else
+ fun_l11_n678(x)
+ end
+end
+
+def fun_l10_n381(x)
+ if (x < 1)
+ fun_l11_n324(x)
+ else
+ fun_l11_n478(x)
+ end
+end
+
+def fun_l10_n382(x)
+ if (x < 1)
+ fun_l11_n360(x)
+ else
+ fun_l11_n35(x)
+ end
+end
+
+def fun_l10_n383(x)
+ if (x < 1)
+ fun_l11_n710(x)
+ else
+ fun_l11_n898(x)
+ end
+end
+
+def fun_l10_n384(x)
+ if (x < 1)
+ fun_l11_n584(x)
+ else
+ fun_l11_n260(x)
+ end
+end
+
+def fun_l10_n385(x)
+ if (x < 1)
+ fun_l11_n514(x)
+ else
+ fun_l11_n649(x)
+ end
+end
+
+def fun_l10_n386(x)
+ if (x < 1)
+ fun_l11_n426(x)
+ else
+ fun_l11_n391(x)
+ end
+end
+
+def fun_l10_n387(x)
+ if (x < 1)
+ fun_l11_n713(x)
+ else
+ fun_l11_n734(x)
+ end
+end
+
+def fun_l10_n388(x)
+ if (x < 1)
+ fun_l11_n236(x)
+ else
+ fun_l11_n469(x)
+ end
+end
+
+def fun_l10_n389(x)
+ if (x < 1)
+ fun_l11_n267(x)
+ else
+ fun_l11_n965(x)
+ end
+end
+
+def fun_l10_n390(x)
+ if (x < 1)
+ fun_l11_n943(x)
+ else
+ fun_l11_n181(x)
+ end
+end
+
+def fun_l10_n391(x)
+ if (x < 1)
+ fun_l11_n869(x)
+ else
+ fun_l11_n348(x)
+ end
+end
+
+def fun_l10_n392(x)
+ if (x < 1)
+ fun_l11_n144(x)
+ else
+ fun_l11_n801(x)
+ end
+end
+
+def fun_l10_n393(x)
+ if (x < 1)
+ fun_l11_n907(x)
+ else
+ fun_l11_n609(x)
+ end
+end
+
+def fun_l10_n394(x)
+ if (x < 1)
+ fun_l11_n801(x)
+ else
+ fun_l11_n691(x)
+ end
+end
+
+def fun_l10_n395(x)
+ if (x < 1)
+ fun_l11_n629(x)
+ else
+ fun_l11_n924(x)
+ end
+end
+
+def fun_l10_n396(x)
+ if (x < 1)
+ fun_l11_n191(x)
+ else
+ fun_l11_n248(x)
+ end
+end
+
+def fun_l10_n397(x)
+ if (x < 1)
+ fun_l11_n339(x)
+ else
+ fun_l11_n805(x)
+ end
+end
+
+def fun_l10_n398(x)
+ if (x < 1)
+ fun_l11_n798(x)
+ else
+ fun_l11_n154(x)
+ end
+end
+
+def fun_l10_n399(x)
+ if (x < 1)
+ fun_l11_n847(x)
+ else
+ fun_l11_n14(x)
+ end
+end
+
+def fun_l10_n400(x)
+ if (x < 1)
+ fun_l11_n296(x)
+ else
+ fun_l11_n144(x)
+ end
+end
+
+def fun_l10_n401(x)
+ if (x < 1)
+ fun_l11_n853(x)
+ else
+ fun_l11_n156(x)
+ end
+end
+
+def fun_l10_n402(x)
+ if (x < 1)
+ fun_l11_n54(x)
+ else
+ fun_l11_n944(x)
+ end
+end
+
+def fun_l10_n403(x)
+ if (x < 1)
+ fun_l11_n617(x)
+ else
+ fun_l11_n324(x)
+ end
+end
+
+def fun_l10_n404(x)
+ if (x < 1)
+ fun_l11_n962(x)
+ else
+ fun_l11_n139(x)
+ end
+end
+
+def fun_l10_n405(x)
+ if (x < 1)
+ fun_l11_n466(x)
+ else
+ fun_l11_n388(x)
+ end
+end
+
+def fun_l10_n406(x)
+ if (x < 1)
+ fun_l11_n914(x)
+ else
+ fun_l11_n847(x)
+ end
+end
+
+def fun_l10_n407(x)
+ if (x < 1)
+ fun_l11_n741(x)
+ else
+ fun_l11_n757(x)
+ end
+end
+
+def fun_l10_n408(x)
+ if (x < 1)
+ fun_l11_n36(x)
+ else
+ fun_l11_n312(x)
+ end
+end
+
+def fun_l10_n409(x)
+ if (x < 1)
+ fun_l11_n203(x)
+ else
+ fun_l11_n523(x)
+ end
+end
+
+def fun_l10_n410(x)
+ if (x < 1)
+ fun_l11_n187(x)
+ else
+ fun_l11_n291(x)
+ end
+end
+
+def fun_l10_n411(x)
+ if (x < 1)
+ fun_l11_n13(x)
+ else
+ fun_l11_n107(x)
+ end
+end
+
+def fun_l10_n412(x)
+ if (x < 1)
+ fun_l11_n960(x)
+ else
+ fun_l11_n565(x)
+ end
+end
+
+def fun_l10_n413(x)
+ if (x < 1)
+ fun_l11_n549(x)
+ else
+ fun_l11_n885(x)
+ end
+end
+
+def fun_l10_n414(x)
+ if (x < 1)
+ fun_l11_n559(x)
+ else
+ fun_l11_n612(x)
+ end
+end
+
+def fun_l10_n415(x)
+ if (x < 1)
+ fun_l11_n18(x)
+ else
+ fun_l11_n167(x)
+ end
+end
+
+def fun_l10_n416(x)
+ if (x < 1)
+ fun_l11_n125(x)
+ else
+ fun_l11_n206(x)
+ end
+end
+
+def fun_l10_n417(x)
+ if (x < 1)
+ fun_l11_n980(x)
+ else
+ fun_l11_n497(x)
+ end
+end
+
+def fun_l10_n418(x)
+ if (x < 1)
+ fun_l11_n703(x)
+ else
+ fun_l11_n49(x)
+ end
+end
+
+def fun_l10_n419(x)
+ if (x < 1)
+ fun_l11_n690(x)
+ else
+ fun_l11_n63(x)
+ end
+end
+
+def fun_l10_n420(x)
+ if (x < 1)
+ fun_l11_n219(x)
+ else
+ fun_l11_n814(x)
+ end
+end
+
+def fun_l10_n421(x)
+ if (x < 1)
+ fun_l11_n864(x)
+ else
+ fun_l11_n963(x)
+ end
+end
+
+def fun_l10_n422(x)
+ if (x < 1)
+ fun_l11_n672(x)
+ else
+ fun_l11_n87(x)
+ end
+end
+
+def fun_l10_n423(x)
+ if (x < 1)
+ fun_l11_n41(x)
+ else
+ fun_l11_n461(x)
+ end
+end
+
+def fun_l10_n424(x)
+ if (x < 1)
+ fun_l11_n334(x)
+ else
+ fun_l11_n283(x)
+ end
+end
+
+def fun_l10_n425(x)
+ if (x < 1)
+ fun_l11_n369(x)
+ else
+ fun_l11_n269(x)
+ end
+end
+
+def fun_l10_n426(x)
+ if (x < 1)
+ fun_l11_n832(x)
+ else
+ fun_l11_n625(x)
+ end
+end
+
+def fun_l10_n427(x)
+ if (x < 1)
+ fun_l11_n272(x)
+ else
+ fun_l11_n634(x)
+ end
+end
+
+def fun_l10_n428(x)
+ if (x < 1)
+ fun_l11_n122(x)
+ else
+ fun_l11_n53(x)
+ end
+end
+
+def fun_l10_n429(x)
+ if (x < 1)
+ fun_l11_n895(x)
+ else
+ fun_l11_n292(x)
+ end
+end
+
+def fun_l10_n430(x)
+ if (x < 1)
+ fun_l11_n460(x)
+ else
+ fun_l11_n177(x)
+ end
+end
+
+def fun_l10_n431(x)
+ if (x < 1)
+ fun_l11_n238(x)
+ else
+ fun_l11_n938(x)
+ end
+end
+
+def fun_l10_n432(x)
+ if (x < 1)
+ fun_l11_n302(x)
+ else
+ fun_l11_n492(x)
+ end
+end
+
+def fun_l10_n433(x)
+ if (x < 1)
+ fun_l11_n307(x)
+ else
+ fun_l11_n876(x)
+ end
+end
+
+def fun_l10_n434(x)
+ if (x < 1)
+ fun_l11_n64(x)
+ else
+ fun_l11_n892(x)
+ end
+end
+
+def fun_l10_n435(x)
+ if (x < 1)
+ fun_l11_n940(x)
+ else
+ fun_l11_n718(x)
+ end
+end
+
+def fun_l10_n436(x)
+ if (x < 1)
+ fun_l11_n988(x)
+ else
+ fun_l11_n216(x)
+ end
+end
+
+def fun_l10_n437(x)
+ if (x < 1)
+ fun_l11_n282(x)
+ else
+ fun_l11_n168(x)
+ end
+end
+
+def fun_l10_n438(x)
+ if (x < 1)
+ fun_l11_n529(x)
+ else
+ fun_l11_n66(x)
+ end
+end
+
+def fun_l10_n439(x)
+ if (x < 1)
+ fun_l11_n286(x)
+ else
+ fun_l11_n134(x)
+ end
+end
+
+def fun_l10_n440(x)
+ if (x < 1)
+ fun_l11_n454(x)
+ else
+ fun_l11_n873(x)
+ end
+end
+
+def fun_l10_n441(x)
+ if (x < 1)
+ fun_l11_n871(x)
+ else
+ fun_l11_n13(x)
+ end
+end
+
+def fun_l10_n442(x)
+ if (x < 1)
+ fun_l11_n314(x)
+ else
+ fun_l11_n685(x)
+ end
+end
+
+def fun_l10_n443(x)
+ if (x < 1)
+ fun_l11_n752(x)
+ else
+ fun_l11_n162(x)
+ end
+end
+
+def fun_l10_n444(x)
+ if (x < 1)
+ fun_l11_n686(x)
+ else
+ fun_l11_n585(x)
+ end
+end
+
+def fun_l10_n445(x)
+ if (x < 1)
+ fun_l11_n42(x)
+ else
+ fun_l11_n932(x)
+ end
+end
+
+def fun_l10_n446(x)
+ if (x < 1)
+ fun_l11_n433(x)
+ else
+ fun_l11_n241(x)
+ end
+end
+
+def fun_l10_n447(x)
+ if (x < 1)
+ fun_l11_n99(x)
+ else
+ fun_l11_n563(x)
+ end
+end
+
+def fun_l10_n448(x)
+ if (x < 1)
+ fun_l11_n463(x)
+ else
+ fun_l11_n395(x)
+ end
+end
+
+def fun_l10_n449(x)
+ if (x < 1)
+ fun_l11_n393(x)
+ else
+ fun_l11_n151(x)
+ end
+end
+
+def fun_l10_n450(x)
+ if (x < 1)
+ fun_l11_n255(x)
+ else
+ fun_l11_n834(x)
+ end
+end
+
+def fun_l10_n451(x)
+ if (x < 1)
+ fun_l11_n195(x)
+ else
+ fun_l11_n0(x)
+ end
+end
+
+def fun_l10_n452(x)
+ if (x < 1)
+ fun_l11_n372(x)
+ else
+ fun_l11_n228(x)
+ end
+end
+
+def fun_l10_n453(x)
+ if (x < 1)
+ fun_l11_n526(x)
+ else
+ fun_l11_n54(x)
+ end
+end
+
+def fun_l10_n454(x)
+ if (x < 1)
+ fun_l11_n594(x)
+ else
+ fun_l11_n116(x)
+ end
+end
+
+def fun_l10_n455(x)
+ if (x < 1)
+ fun_l11_n25(x)
+ else
+ fun_l11_n930(x)
+ end
+end
+
+def fun_l10_n456(x)
+ if (x < 1)
+ fun_l11_n83(x)
+ else
+ fun_l11_n30(x)
+ end
+end
+
+def fun_l10_n457(x)
+ if (x < 1)
+ fun_l11_n644(x)
+ else
+ fun_l11_n837(x)
+ end
+end
+
+def fun_l10_n458(x)
+ if (x < 1)
+ fun_l11_n311(x)
+ else
+ fun_l11_n86(x)
+ end
+end
+
+def fun_l10_n459(x)
+ if (x < 1)
+ fun_l11_n139(x)
+ else
+ fun_l11_n735(x)
+ end
+end
+
+def fun_l10_n460(x)
+ if (x < 1)
+ fun_l11_n431(x)
+ else
+ fun_l11_n808(x)
+ end
+end
+
+def fun_l10_n461(x)
+ if (x < 1)
+ fun_l11_n488(x)
+ else
+ fun_l11_n439(x)
+ end
+end
+
+def fun_l10_n462(x)
+ if (x < 1)
+ fun_l11_n448(x)
+ else
+ fun_l11_n882(x)
+ end
+end
+
+def fun_l10_n463(x)
+ if (x < 1)
+ fun_l11_n362(x)
+ else
+ fun_l11_n875(x)
+ end
+end
+
+def fun_l10_n464(x)
+ if (x < 1)
+ fun_l11_n88(x)
+ else
+ fun_l11_n842(x)
+ end
+end
+
+def fun_l10_n465(x)
+ if (x < 1)
+ fun_l11_n651(x)
+ else
+ fun_l11_n368(x)
+ end
+end
+
+def fun_l10_n466(x)
+ if (x < 1)
+ fun_l11_n121(x)
+ else
+ fun_l11_n3(x)
+ end
+end
+
+def fun_l10_n467(x)
+ if (x < 1)
+ fun_l11_n654(x)
+ else
+ fun_l11_n260(x)
+ end
+end
+
+def fun_l10_n468(x)
+ if (x < 1)
+ fun_l11_n765(x)
+ else
+ fun_l11_n604(x)
+ end
+end
+
+def fun_l10_n469(x)
+ if (x < 1)
+ fun_l11_n881(x)
+ else
+ fun_l11_n567(x)
+ end
+end
+
+def fun_l10_n470(x)
+ if (x < 1)
+ fun_l11_n41(x)
+ else
+ fun_l11_n92(x)
+ end
+end
+
+def fun_l10_n471(x)
+ if (x < 1)
+ fun_l11_n905(x)
+ else
+ fun_l11_n731(x)
+ end
+end
+
+def fun_l10_n472(x)
+ if (x < 1)
+ fun_l11_n797(x)
+ else
+ fun_l11_n878(x)
+ end
+end
+
+def fun_l10_n473(x)
+ if (x < 1)
+ fun_l11_n487(x)
+ else
+ fun_l11_n951(x)
+ end
+end
+
+def fun_l10_n474(x)
+ if (x < 1)
+ fun_l11_n998(x)
+ else
+ fun_l11_n900(x)
+ end
+end
+
+def fun_l10_n475(x)
+ if (x < 1)
+ fun_l11_n451(x)
+ else
+ fun_l11_n780(x)
+ end
+end
+
+def fun_l10_n476(x)
+ if (x < 1)
+ fun_l11_n427(x)
+ else
+ fun_l11_n760(x)
+ end
+end
+
+def fun_l10_n477(x)
+ if (x < 1)
+ fun_l11_n758(x)
+ else
+ fun_l11_n177(x)
+ end
+end
+
+def fun_l10_n478(x)
+ if (x < 1)
+ fun_l11_n359(x)
+ else
+ fun_l11_n236(x)
+ end
+end
+
+def fun_l10_n479(x)
+ if (x < 1)
+ fun_l11_n70(x)
+ else
+ fun_l11_n49(x)
+ end
+end
+
+def fun_l10_n480(x)
+ if (x < 1)
+ fun_l11_n338(x)
+ else
+ fun_l11_n714(x)
+ end
+end
+
+def fun_l10_n481(x)
+ if (x < 1)
+ fun_l11_n6(x)
+ else
+ fun_l11_n194(x)
+ end
+end
+
+def fun_l10_n482(x)
+ if (x < 1)
+ fun_l11_n801(x)
+ else
+ fun_l11_n591(x)
+ end
+end
+
+def fun_l10_n483(x)
+ if (x < 1)
+ fun_l11_n362(x)
+ else
+ fun_l11_n687(x)
+ end
+end
+
+def fun_l10_n484(x)
+ if (x < 1)
+ fun_l11_n659(x)
+ else
+ fun_l11_n661(x)
+ end
+end
+
+def fun_l10_n485(x)
+ if (x < 1)
+ fun_l11_n903(x)
+ else
+ fun_l11_n419(x)
+ end
+end
+
+def fun_l10_n486(x)
+ if (x < 1)
+ fun_l11_n279(x)
+ else
+ fun_l11_n995(x)
+ end
+end
+
+def fun_l10_n487(x)
+ if (x < 1)
+ fun_l11_n529(x)
+ else
+ fun_l11_n373(x)
+ end
+end
+
+def fun_l10_n488(x)
+ if (x < 1)
+ fun_l11_n198(x)
+ else
+ fun_l11_n899(x)
+ end
+end
+
+def fun_l10_n489(x)
+ if (x < 1)
+ fun_l11_n174(x)
+ else
+ fun_l11_n485(x)
+ end
+end
+
+def fun_l10_n490(x)
+ if (x < 1)
+ fun_l11_n19(x)
+ else
+ fun_l11_n322(x)
+ end
+end
+
+def fun_l10_n491(x)
+ if (x < 1)
+ fun_l11_n0(x)
+ else
+ fun_l11_n855(x)
+ end
+end
+
+def fun_l10_n492(x)
+ if (x < 1)
+ fun_l11_n126(x)
+ else
+ fun_l11_n986(x)
+ end
+end
+
+def fun_l10_n493(x)
+ if (x < 1)
+ fun_l11_n263(x)
+ else
+ fun_l11_n374(x)
+ end
+end
+
+def fun_l10_n494(x)
+ if (x < 1)
+ fun_l11_n21(x)
+ else
+ fun_l11_n749(x)
+ end
+end
+
+def fun_l10_n495(x)
+ if (x < 1)
+ fun_l11_n618(x)
+ else
+ fun_l11_n955(x)
+ end
+end
+
+def fun_l10_n496(x)
+ if (x < 1)
+ fun_l11_n157(x)
+ else
+ fun_l11_n230(x)
+ end
+end
+
+def fun_l10_n497(x)
+ if (x < 1)
+ fun_l11_n387(x)
+ else
+ fun_l11_n841(x)
+ end
+end
+
+def fun_l10_n498(x)
+ if (x < 1)
+ fun_l11_n496(x)
+ else
+ fun_l11_n30(x)
+ end
+end
+
+def fun_l10_n499(x)
+ if (x < 1)
+ fun_l11_n581(x)
+ else
+ fun_l11_n821(x)
+ end
+end
+
+def fun_l10_n500(x)
+ if (x < 1)
+ fun_l11_n202(x)
+ else
+ fun_l11_n26(x)
+ end
+end
+
+def fun_l10_n501(x)
+ if (x < 1)
+ fun_l11_n273(x)
+ else
+ fun_l11_n294(x)
+ end
+end
+
+def fun_l10_n502(x)
+ if (x < 1)
+ fun_l11_n604(x)
+ else
+ fun_l11_n261(x)
+ end
+end
+
+def fun_l10_n503(x)
+ if (x < 1)
+ fun_l11_n632(x)
+ else
+ fun_l11_n340(x)
+ end
+end
+
+def fun_l10_n504(x)
+ if (x < 1)
+ fun_l11_n162(x)
+ else
+ fun_l11_n483(x)
+ end
+end
+
+def fun_l10_n505(x)
+ if (x < 1)
+ fun_l11_n824(x)
+ else
+ fun_l11_n747(x)
+ end
+end
+
+def fun_l10_n506(x)
+ if (x < 1)
+ fun_l11_n575(x)
+ else
+ fun_l11_n932(x)
+ end
+end
+
+def fun_l10_n507(x)
+ if (x < 1)
+ fun_l11_n645(x)
+ else
+ fun_l11_n486(x)
+ end
+end
+
+def fun_l10_n508(x)
+ if (x < 1)
+ fun_l11_n876(x)
+ else
+ fun_l11_n640(x)
+ end
+end
+
+def fun_l10_n509(x)
+ if (x < 1)
+ fun_l11_n280(x)
+ else
+ fun_l11_n116(x)
+ end
+end
+
+def fun_l10_n510(x)
+ if (x < 1)
+ fun_l11_n570(x)
+ else
+ fun_l11_n640(x)
+ end
+end
+
+def fun_l10_n511(x)
+ if (x < 1)
+ fun_l11_n576(x)
+ else
+ fun_l11_n124(x)
+ end
+end
+
+def fun_l10_n512(x)
+ if (x < 1)
+ fun_l11_n328(x)
+ else
+ fun_l11_n880(x)
+ end
+end
+
+def fun_l10_n513(x)
+ if (x < 1)
+ fun_l11_n185(x)
+ else
+ fun_l11_n977(x)
+ end
+end
+
+def fun_l10_n514(x)
+ if (x < 1)
+ fun_l11_n560(x)
+ else
+ fun_l11_n825(x)
+ end
+end
+
+def fun_l10_n515(x)
+ if (x < 1)
+ fun_l11_n28(x)
+ else
+ fun_l11_n908(x)
+ end
+end
+
+def fun_l10_n516(x)
+ if (x < 1)
+ fun_l11_n902(x)
+ else
+ fun_l11_n882(x)
+ end
+end
+
+def fun_l10_n517(x)
+ if (x < 1)
+ fun_l11_n429(x)
+ else
+ fun_l11_n824(x)
+ end
+end
+
+def fun_l10_n518(x)
+ if (x < 1)
+ fun_l11_n706(x)
+ else
+ fun_l11_n149(x)
+ end
+end
+
+def fun_l10_n519(x)
+ if (x < 1)
+ fun_l11_n837(x)
+ else
+ fun_l11_n573(x)
+ end
+end
+
+def fun_l10_n520(x)
+ if (x < 1)
+ fun_l11_n934(x)
+ else
+ fun_l11_n504(x)
+ end
+end
+
+def fun_l10_n521(x)
+ if (x < 1)
+ fun_l11_n254(x)
+ else
+ fun_l11_n551(x)
+ end
+end
+
+def fun_l10_n522(x)
+ if (x < 1)
+ fun_l11_n53(x)
+ else
+ fun_l11_n297(x)
+ end
+end
+
+def fun_l10_n523(x)
+ if (x < 1)
+ fun_l11_n648(x)
+ else
+ fun_l11_n695(x)
+ end
+end
+
+def fun_l10_n524(x)
+ if (x < 1)
+ fun_l11_n737(x)
+ else
+ fun_l11_n636(x)
+ end
+end
+
+def fun_l10_n525(x)
+ if (x < 1)
+ fun_l11_n249(x)
+ else
+ fun_l11_n757(x)
+ end
+end
+
+def fun_l10_n526(x)
+ if (x < 1)
+ fun_l11_n42(x)
+ else
+ fun_l11_n199(x)
+ end
+end
+
+def fun_l10_n527(x)
+ if (x < 1)
+ fun_l11_n783(x)
+ else
+ fun_l11_n856(x)
+ end
+end
+
+def fun_l10_n528(x)
+ if (x < 1)
+ fun_l11_n708(x)
+ else
+ fun_l11_n550(x)
+ end
+end
+
+def fun_l10_n529(x)
+ if (x < 1)
+ fun_l11_n749(x)
+ else
+ fun_l11_n56(x)
+ end
+end
+
+def fun_l10_n530(x)
+ if (x < 1)
+ fun_l11_n838(x)
+ else
+ fun_l11_n57(x)
+ end
+end
+
+def fun_l10_n531(x)
+ if (x < 1)
+ fun_l11_n293(x)
+ else
+ fun_l11_n938(x)
+ end
+end
+
+def fun_l10_n532(x)
+ if (x < 1)
+ fun_l11_n245(x)
+ else
+ fun_l11_n367(x)
+ end
+end
+
+def fun_l10_n533(x)
+ if (x < 1)
+ fun_l11_n255(x)
+ else
+ fun_l11_n234(x)
+ end
+end
+
+def fun_l10_n534(x)
+ if (x < 1)
+ fun_l11_n315(x)
+ else
+ fun_l11_n982(x)
+ end
+end
+
+def fun_l10_n535(x)
+ if (x < 1)
+ fun_l11_n841(x)
+ else
+ fun_l11_n112(x)
+ end
+end
+
+def fun_l10_n536(x)
+ if (x < 1)
+ fun_l11_n481(x)
+ else
+ fun_l11_n622(x)
+ end
+end
+
+def fun_l10_n537(x)
+ if (x < 1)
+ fun_l11_n666(x)
+ else
+ fun_l11_n775(x)
+ end
+end
+
+def fun_l10_n538(x)
+ if (x < 1)
+ fun_l11_n409(x)
+ else
+ fun_l11_n733(x)
+ end
+end
+
+def fun_l10_n539(x)
+ if (x < 1)
+ fun_l11_n633(x)
+ else
+ fun_l11_n122(x)
+ end
+end
+
+def fun_l10_n540(x)
+ if (x < 1)
+ fun_l11_n453(x)
+ else
+ fun_l11_n938(x)
+ end
+end
+
+def fun_l10_n541(x)
+ if (x < 1)
+ fun_l11_n55(x)
+ else
+ fun_l11_n344(x)
+ end
+end
+
+def fun_l10_n542(x)
+ if (x < 1)
+ fun_l11_n167(x)
+ else
+ fun_l11_n908(x)
+ end
+end
+
+def fun_l10_n543(x)
+ if (x < 1)
+ fun_l11_n318(x)
+ else
+ fun_l11_n893(x)
+ end
+end
+
+def fun_l10_n544(x)
+ if (x < 1)
+ fun_l11_n683(x)
+ else
+ fun_l11_n109(x)
+ end
+end
+
+def fun_l10_n545(x)
+ if (x < 1)
+ fun_l11_n728(x)
+ else
+ fun_l11_n432(x)
+ end
+end
+
+def fun_l10_n546(x)
+ if (x < 1)
+ fun_l11_n343(x)
+ else
+ fun_l11_n674(x)
+ end
+end
+
+def fun_l10_n547(x)
+ if (x < 1)
+ fun_l11_n374(x)
+ else
+ fun_l11_n293(x)
+ end
+end
+
+def fun_l10_n548(x)
+ if (x < 1)
+ fun_l11_n661(x)
+ else
+ fun_l11_n619(x)
+ end
+end
+
+def fun_l10_n549(x)
+ if (x < 1)
+ fun_l11_n984(x)
+ else
+ fun_l11_n261(x)
+ end
+end
+
+def fun_l10_n550(x)
+ if (x < 1)
+ fun_l11_n729(x)
+ else
+ fun_l11_n469(x)
+ end
+end
+
+def fun_l10_n551(x)
+ if (x < 1)
+ fun_l11_n829(x)
+ else
+ fun_l11_n30(x)
+ end
+end
+
+def fun_l10_n552(x)
+ if (x < 1)
+ fun_l11_n457(x)
+ else
+ fun_l11_n440(x)
+ end
+end
+
+def fun_l10_n553(x)
+ if (x < 1)
+ fun_l11_n128(x)
+ else
+ fun_l11_n790(x)
+ end
+end
+
+def fun_l10_n554(x)
+ if (x < 1)
+ fun_l11_n135(x)
+ else
+ fun_l11_n118(x)
+ end
+end
+
+def fun_l10_n555(x)
+ if (x < 1)
+ fun_l11_n558(x)
+ else
+ fun_l11_n415(x)
+ end
+end
+
+def fun_l10_n556(x)
+ if (x < 1)
+ fun_l11_n388(x)
+ else
+ fun_l11_n102(x)
+ end
+end
+
+def fun_l10_n557(x)
+ if (x < 1)
+ fun_l11_n575(x)
+ else
+ fun_l11_n877(x)
+ end
+end
+
+def fun_l10_n558(x)
+ if (x < 1)
+ fun_l11_n266(x)
+ else
+ fun_l11_n216(x)
+ end
+end
+
+def fun_l10_n559(x)
+ if (x < 1)
+ fun_l11_n681(x)
+ else
+ fun_l11_n259(x)
+ end
+end
+
+def fun_l10_n560(x)
+ if (x < 1)
+ fun_l11_n922(x)
+ else
+ fun_l11_n828(x)
+ end
+end
+
+def fun_l10_n561(x)
+ if (x < 1)
+ fun_l11_n135(x)
+ else
+ fun_l11_n971(x)
+ end
+end
+
+def fun_l10_n562(x)
+ if (x < 1)
+ fun_l11_n940(x)
+ else
+ fun_l11_n266(x)
+ end
+end
+
+def fun_l10_n563(x)
+ if (x < 1)
+ fun_l11_n291(x)
+ else
+ fun_l11_n587(x)
+ end
+end
+
+def fun_l10_n564(x)
+ if (x < 1)
+ fun_l11_n143(x)
+ else
+ fun_l11_n289(x)
+ end
+end
+
+def fun_l10_n565(x)
+ if (x < 1)
+ fun_l11_n947(x)
+ else
+ fun_l11_n462(x)
+ end
+end
+
+def fun_l10_n566(x)
+ if (x < 1)
+ fun_l11_n307(x)
+ else
+ fun_l11_n904(x)
+ end
+end
+
+def fun_l10_n567(x)
+ if (x < 1)
+ fun_l11_n945(x)
+ else
+ fun_l11_n814(x)
+ end
+end
+
+def fun_l10_n568(x)
+ if (x < 1)
+ fun_l11_n689(x)
+ else
+ fun_l11_n61(x)
+ end
+end
+
+def fun_l10_n569(x)
+ if (x < 1)
+ fun_l11_n446(x)
+ else
+ fun_l11_n305(x)
+ end
+end
+
+def fun_l10_n570(x)
+ if (x < 1)
+ fun_l11_n209(x)
+ else
+ fun_l11_n768(x)
+ end
+end
+
+def fun_l10_n571(x)
+ if (x < 1)
+ fun_l11_n904(x)
+ else
+ fun_l11_n736(x)
+ end
+end
+
+def fun_l10_n572(x)
+ if (x < 1)
+ fun_l11_n87(x)
+ else
+ fun_l11_n474(x)
+ end
+end
+
+def fun_l10_n573(x)
+ if (x < 1)
+ fun_l11_n886(x)
+ else
+ fun_l11_n75(x)
+ end
+end
+
+def fun_l10_n574(x)
+ if (x < 1)
+ fun_l11_n761(x)
+ else
+ fun_l11_n662(x)
+ end
+end
+
+def fun_l10_n575(x)
+ if (x < 1)
+ fun_l11_n255(x)
+ else
+ fun_l11_n321(x)
+ end
+end
+
+def fun_l10_n576(x)
+ if (x < 1)
+ fun_l11_n154(x)
+ else
+ fun_l11_n356(x)
+ end
+end
+
+def fun_l10_n577(x)
+ if (x < 1)
+ fun_l11_n802(x)
+ else
+ fun_l11_n912(x)
+ end
+end
+
+def fun_l10_n578(x)
+ if (x < 1)
+ fun_l11_n709(x)
+ else
+ fun_l11_n66(x)
+ end
+end
+
+def fun_l10_n579(x)
+ if (x < 1)
+ fun_l11_n994(x)
+ else
+ fun_l11_n424(x)
+ end
+end
+
+def fun_l10_n580(x)
+ if (x < 1)
+ fun_l11_n520(x)
+ else
+ fun_l11_n551(x)
+ end
+end
+
+def fun_l10_n581(x)
+ if (x < 1)
+ fun_l11_n386(x)
+ else
+ fun_l11_n615(x)
+ end
+end
+
+def fun_l10_n582(x)
+ if (x < 1)
+ fun_l11_n125(x)
+ else
+ fun_l11_n667(x)
+ end
+end
+
+def fun_l10_n583(x)
+ if (x < 1)
+ fun_l11_n829(x)
+ else
+ fun_l11_n802(x)
+ end
+end
+
+def fun_l10_n584(x)
+ if (x < 1)
+ fun_l11_n649(x)
+ else
+ fun_l11_n39(x)
+ end
+end
+
+def fun_l10_n585(x)
+ if (x < 1)
+ fun_l11_n454(x)
+ else
+ fun_l11_n541(x)
+ end
+end
+
+def fun_l10_n586(x)
+ if (x < 1)
+ fun_l11_n281(x)
+ else
+ fun_l11_n4(x)
+ end
+end
+
+def fun_l10_n587(x)
+ if (x < 1)
+ fun_l11_n382(x)
+ else
+ fun_l11_n656(x)
+ end
+end
+
+def fun_l10_n588(x)
+ if (x < 1)
+ fun_l11_n177(x)
+ else
+ fun_l11_n38(x)
+ end
+end
+
+def fun_l10_n589(x)
+ if (x < 1)
+ fun_l11_n555(x)
+ else
+ fun_l11_n557(x)
+ end
+end
+
+def fun_l10_n590(x)
+ if (x < 1)
+ fun_l11_n999(x)
+ else
+ fun_l11_n645(x)
+ end
+end
+
+def fun_l10_n591(x)
+ if (x < 1)
+ fun_l11_n714(x)
+ else
+ fun_l11_n872(x)
+ end
+end
+
+def fun_l10_n592(x)
+ if (x < 1)
+ fun_l11_n779(x)
+ else
+ fun_l11_n524(x)
+ end
+end
+
+def fun_l10_n593(x)
+ if (x < 1)
+ fun_l11_n557(x)
+ else
+ fun_l11_n906(x)
+ end
+end
+
+def fun_l10_n594(x)
+ if (x < 1)
+ fun_l11_n379(x)
+ else
+ fun_l11_n550(x)
+ end
+end
+
+def fun_l10_n595(x)
+ if (x < 1)
+ fun_l11_n138(x)
+ else
+ fun_l11_n785(x)
+ end
+end
+
+def fun_l10_n596(x)
+ if (x < 1)
+ fun_l11_n486(x)
+ else
+ fun_l11_n381(x)
+ end
+end
+
+def fun_l10_n597(x)
+ if (x < 1)
+ fun_l11_n374(x)
+ else
+ fun_l11_n477(x)
+ end
+end
+
+def fun_l10_n598(x)
+ if (x < 1)
+ fun_l11_n113(x)
+ else
+ fun_l11_n455(x)
+ end
+end
+
+def fun_l10_n599(x)
+ if (x < 1)
+ fun_l11_n31(x)
+ else
+ fun_l11_n983(x)
+ end
+end
+
+def fun_l10_n600(x)
+ if (x < 1)
+ fun_l11_n758(x)
+ else
+ fun_l11_n187(x)
+ end
+end
+
+def fun_l10_n601(x)
+ if (x < 1)
+ fun_l11_n198(x)
+ else
+ fun_l11_n436(x)
+ end
+end
+
+def fun_l10_n602(x)
+ if (x < 1)
+ fun_l11_n207(x)
+ else
+ fun_l11_n86(x)
+ end
+end
+
+def fun_l10_n603(x)
+ if (x < 1)
+ fun_l11_n827(x)
+ else
+ fun_l11_n267(x)
+ end
+end
+
+def fun_l10_n604(x)
+ if (x < 1)
+ fun_l11_n760(x)
+ else
+ fun_l11_n707(x)
+ end
+end
+
+def fun_l10_n605(x)
+ if (x < 1)
+ fun_l11_n791(x)
+ else
+ fun_l11_n249(x)
+ end
+end
+
+def fun_l10_n606(x)
+ if (x < 1)
+ fun_l11_n634(x)
+ else
+ fun_l11_n607(x)
+ end
+end
+
+def fun_l10_n607(x)
+ if (x < 1)
+ fun_l11_n605(x)
+ else
+ fun_l11_n698(x)
+ end
+end
+
+def fun_l10_n608(x)
+ if (x < 1)
+ fun_l11_n401(x)
+ else
+ fun_l11_n316(x)
+ end
+end
+
+def fun_l10_n609(x)
+ if (x < 1)
+ fun_l11_n928(x)
+ else
+ fun_l11_n313(x)
+ end
+end
+
+def fun_l10_n610(x)
+ if (x < 1)
+ fun_l11_n601(x)
+ else
+ fun_l11_n278(x)
+ end
+end
+
+def fun_l10_n611(x)
+ if (x < 1)
+ fun_l11_n554(x)
+ else
+ fun_l11_n584(x)
+ end
+end
+
+def fun_l10_n612(x)
+ if (x < 1)
+ fun_l11_n906(x)
+ else
+ fun_l11_n58(x)
+ end
+end
+
+def fun_l10_n613(x)
+ if (x < 1)
+ fun_l11_n85(x)
+ else
+ fun_l11_n631(x)
+ end
+end
+
+def fun_l10_n614(x)
+ if (x < 1)
+ fun_l11_n221(x)
+ else
+ fun_l11_n85(x)
+ end
+end
+
+def fun_l10_n615(x)
+ if (x < 1)
+ fun_l11_n88(x)
+ else
+ fun_l11_n367(x)
+ end
+end
+
+def fun_l10_n616(x)
+ if (x < 1)
+ fun_l11_n693(x)
+ else
+ fun_l11_n385(x)
+ end
+end
+
+def fun_l10_n617(x)
+ if (x < 1)
+ fun_l11_n18(x)
+ else
+ fun_l11_n526(x)
+ end
+end
+
+def fun_l10_n618(x)
+ if (x < 1)
+ fun_l11_n307(x)
+ else
+ fun_l11_n303(x)
+ end
+end
+
+def fun_l10_n619(x)
+ if (x < 1)
+ fun_l11_n972(x)
+ else
+ fun_l11_n246(x)
+ end
+end
+
+def fun_l10_n620(x)
+ if (x < 1)
+ fun_l11_n185(x)
+ else
+ fun_l11_n512(x)
+ end
+end
+
+def fun_l10_n621(x)
+ if (x < 1)
+ fun_l11_n87(x)
+ else
+ fun_l11_n131(x)
+ end
+end
+
+def fun_l10_n622(x)
+ if (x < 1)
+ fun_l11_n617(x)
+ else
+ fun_l11_n869(x)
+ end
+end
+
+def fun_l10_n623(x)
+ if (x < 1)
+ fun_l11_n514(x)
+ else
+ fun_l11_n824(x)
+ end
+end
+
+def fun_l10_n624(x)
+ if (x < 1)
+ fun_l11_n551(x)
+ else
+ fun_l11_n430(x)
+ end
+end
+
+def fun_l10_n625(x)
+ if (x < 1)
+ fun_l11_n266(x)
+ else
+ fun_l11_n826(x)
+ end
+end
+
+def fun_l10_n626(x)
+ if (x < 1)
+ fun_l11_n90(x)
+ else
+ fun_l11_n866(x)
+ end
+end
+
+def fun_l10_n627(x)
+ if (x < 1)
+ fun_l11_n34(x)
+ else
+ fun_l11_n694(x)
+ end
+end
+
+def fun_l10_n628(x)
+ if (x < 1)
+ fun_l11_n455(x)
+ else
+ fun_l11_n990(x)
+ end
+end
+
+def fun_l10_n629(x)
+ if (x < 1)
+ fun_l11_n573(x)
+ else
+ fun_l11_n874(x)
+ end
+end
+
+def fun_l10_n630(x)
+ if (x < 1)
+ fun_l11_n836(x)
+ else
+ fun_l11_n87(x)
+ end
+end
+
+def fun_l10_n631(x)
+ if (x < 1)
+ fun_l11_n234(x)
+ else
+ fun_l11_n389(x)
+ end
+end
+
+def fun_l10_n632(x)
+ if (x < 1)
+ fun_l11_n647(x)
+ else
+ fun_l11_n655(x)
+ end
+end
+
+def fun_l10_n633(x)
+ if (x < 1)
+ fun_l11_n649(x)
+ else
+ fun_l11_n426(x)
+ end
+end
+
+def fun_l10_n634(x)
+ if (x < 1)
+ fun_l11_n613(x)
+ else
+ fun_l11_n10(x)
+ end
+end
+
+def fun_l10_n635(x)
+ if (x < 1)
+ fun_l11_n315(x)
+ else
+ fun_l11_n419(x)
+ end
+end
+
+def fun_l10_n636(x)
+ if (x < 1)
+ fun_l11_n575(x)
+ else
+ fun_l11_n29(x)
+ end
+end
+
+def fun_l10_n637(x)
+ if (x < 1)
+ fun_l11_n75(x)
+ else
+ fun_l11_n710(x)
+ end
+end
+
+def fun_l10_n638(x)
+ if (x < 1)
+ fun_l11_n42(x)
+ else
+ fun_l11_n45(x)
+ end
+end
+
+def fun_l10_n639(x)
+ if (x < 1)
+ fun_l11_n629(x)
+ else
+ fun_l11_n850(x)
+ end
+end
+
+def fun_l10_n640(x)
+ if (x < 1)
+ fun_l11_n491(x)
+ else
+ fun_l11_n708(x)
+ end
+end
+
+def fun_l10_n641(x)
+ if (x < 1)
+ fun_l11_n673(x)
+ else
+ fun_l11_n722(x)
+ end
+end
+
+def fun_l10_n642(x)
+ if (x < 1)
+ fun_l11_n922(x)
+ else
+ fun_l11_n783(x)
+ end
+end
+
+def fun_l10_n643(x)
+ if (x < 1)
+ fun_l11_n855(x)
+ else
+ fun_l11_n145(x)
+ end
+end
+
+def fun_l10_n644(x)
+ if (x < 1)
+ fun_l11_n897(x)
+ else
+ fun_l11_n281(x)
+ end
+end
+
+def fun_l10_n645(x)
+ if (x < 1)
+ fun_l11_n148(x)
+ else
+ fun_l11_n786(x)
+ end
+end
+
+def fun_l10_n646(x)
+ if (x < 1)
+ fun_l11_n743(x)
+ else
+ fun_l11_n627(x)
+ end
+end
+
+def fun_l10_n647(x)
+ if (x < 1)
+ fun_l11_n343(x)
+ else
+ fun_l11_n234(x)
+ end
+end
+
+def fun_l10_n648(x)
+ if (x < 1)
+ fun_l11_n995(x)
+ else
+ fun_l11_n199(x)
+ end
+end
+
+def fun_l10_n649(x)
+ if (x < 1)
+ fun_l11_n155(x)
+ else
+ fun_l11_n384(x)
+ end
+end
+
+def fun_l10_n650(x)
+ if (x < 1)
+ fun_l11_n329(x)
+ else
+ fun_l11_n313(x)
+ end
+end
+
+def fun_l10_n651(x)
+ if (x < 1)
+ fun_l11_n254(x)
+ else
+ fun_l11_n763(x)
+ end
+end
+
+def fun_l10_n652(x)
+ if (x < 1)
+ fun_l11_n839(x)
+ else
+ fun_l11_n692(x)
+ end
+end
+
+def fun_l10_n653(x)
+ if (x < 1)
+ fun_l11_n388(x)
+ else
+ fun_l11_n187(x)
+ end
+end
+
+def fun_l10_n654(x)
+ if (x < 1)
+ fun_l11_n919(x)
+ else
+ fun_l11_n198(x)
+ end
+end
+
+def fun_l10_n655(x)
+ if (x < 1)
+ fun_l11_n313(x)
+ else
+ fun_l11_n686(x)
+ end
+end
+
+def fun_l10_n656(x)
+ if (x < 1)
+ fun_l11_n91(x)
+ else
+ fun_l11_n95(x)
+ end
+end
+
+def fun_l10_n657(x)
+ if (x < 1)
+ fun_l11_n801(x)
+ else
+ fun_l11_n700(x)
+ end
+end
+
+def fun_l10_n658(x)
+ if (x < 1)
+ fun_l11_n938(x)
+ else
+ fun_l11_n936(x)
+ end
+end
+
+def fun_l10_n659(x)
+ if (x < 1)
+ fun_l11_n78(x)
+ else
+ fun_l11_n611(x)
+ end
+end
+
+def fun_l10_n660(x)
+ if (x < 1)
+ fun_l11_n261(x)
+ else
+ fun_l11_n396(x)
+ end
+end
+
+def fun_l10_n661(x)
+ if (x < 1)
+ fun_l11_n154(x)
+ else
+ fun_l11_n132(x)
+ end
+end
+
+def fun_l10_n662(x)
+ if (x < 1)
+ fun_l11_n603(x)
+ else
+ fun_l11_n718(x)
+ end
+end
+
+def fun_l10_n663(x)
+ if (x < 1)
+ fun_l11_n512(x)
+ else
+ fun_l11_n158(x)
+ end
+end
+
+def fun_l10_n664(x)
+ if (x < 1)
+ fun_l11_n178(x)
+ else
+ fun_l11_n59(x)
+ end
+end
+
+def fun_l10_n665(x)
+ if (x < 1)
+ fun_l11_n703(x)
+ else
+ fun_l11_n54(x)
+ end
+end
+
+def fun_l10_n666(x)
+ if (x < 1)
+ fun_l11_n623(x)
+ else
+ fun_l11_n793(x)
+ end
+end
+
+def fun_l10_n667(x)
+ if (x < 1)
+ fun_l11_n350(x)
+ else
+ fun_l11_n244(x)
+ end
+end
+
+def fun_l10_n668(x)
+ if (x < 1)
+ fun_l11_n253(x)
+ else
+ fun_l11_n297(x)
+ end
+end
+
+def fun_l10_n669(x)
+ if (x < 1)
+ fun_l11_n137(x)
+ else
+ fun_l11_n76(x)
+ end
+end
+
+def fun_l10_n670(x)
+ if (x < 1)
+ fun_l11_n755(x)
+ else
+ fun_l11_n627(x)
+ end
+end
+
+def fun_l10_n671(x)
+ if (x < 1)
+ fun_l11_n393(x)
+ else
+ fun_l11_n394(x)
+ end
+end
+
+def fun_l10_n672(x)
+ if (x < 1)
+ fun_l11_n858(x)
+ else
+ fun_l11_n823(x)
+ end
+end
+
+def fun_l10_n673(x)
+ if (x < 1)
+ fun_l11_n202(x)
+ else
+ fun_l11_n800(x)
+ end
+end
+
+def fun_l10_n674(x)
+ if (x < 1)
+ fun_l11_n977(x)
+ else
+ fun_l11_n343(x)
+ end
+end
+
+def fun_l10_n675(x)
+ if (x < 1)
+ fun_l11_n352(x)
+ else
+ fun_l11_n690(x)
+ end
+end
+
+def fun_l10_n676(x)
+ if (x < 1)
+ fun_l11_n598(x)
+ else
+ fun_l11_n108(x)
+ end
+end
+
+def fun_l10_n677(x)
+ if (x < 1)
+ fun_l11_n126(x)
+ else
+ fun_l11_n226(x)
+ end
+end
+
+def fun_l10_n678(x)
+ if (x < 1)
+ fun_l11_n937(x)
+ else
+ fun_l11_n846(x)
+ end
+end
+
+def fun_l10_n679(x)
+ if (x < 1)
+ fun_l11_n231(x)
+ else
+ fun_l11_n264(x)
+ end
+end
+
+def fun_l10_n680(x)
+ if (x < 1)
+ fun_l11_n657(x)
+ else
+ fun_l11_n766(x)
+ end
+end
+
+def fun_l10_n681(x)
+ if (x < 1)
+ fun_l11_n444(x)
+ else
+ fun_l11_n405(x)
+ end
+end
+
+def fun_l10_n682(x)
+ if (x < 1)
+ fun_l11_n410(x)
+ else
+ fun_l11_n409(x)
+ end
+end
+
+def fun_l10_n683(x)
+ if (x < 1)
+ fun_l11_n690(x)
+ else
+ fun_l11_n673(x)
+ end
+end
+
+def fun_l10_n684(x)
+ if (x < 1)
+ fun_l11_n737(x)
+ else
+ fun_l11_n61(x)
+ end
+end
+
+def fun_l10_n685(x)
+ if (x < 1)
+ fun_l11_n54(x)
+ else
+ fun_l11_n387(x)
+ end
+end
+
+def fun_l10_n686(x)
+ if (x < 1)
+ fun_l11_n271(x)
+ else
+ fun_l11_n698(x)
+ end
+end
+
+def fun_l10_n687(x)
+ if (x < 1)
+ fun_l11_n988(x)
+ else
+ fun_l11_n816(x)
+ end
+end
+
+def fun_l10_n688(x)
+ if (x < 1)
+ fun_l11_n309(x)
+ else
+ fun_l11_n576(x)
+ end
+end
+
+def fun_l10_n689(x)
+ if (x < 1)
+ fun_l11_n390(x)
+ else
+ fun_l11_n35(x)
+ end
+end
+
+def fun_l10_n690(x)
+ if (x < 1)
+ fun_l11_n93(x)
+ else
+ fun_l11_n712(x)
+ end
+end
+
+def fun_l10_n691(x)
+ if (x < 1)
+ fun_l11_n285(x)
+ else
+ fun_l11_n467(x)
+ end
+end
+
+def fun_l10_n692(x)
+ if (x < 1)
+ fun_l11_n403(x)
+ else
+ fun_l11_n41(x)
+ end
+end
+
+def fun_l10_n693(x)
+ if (x < 1)
+ fun_l11_n228(x)
+ else
+ fun_l11_n689(x)
+ end
+end
+
+def fun_l10_n694(x)
+ if (x < 1)
+ fun_l11_n581(x)
+ else
+ fun_l11_n989(x)
+ end
+end
+
+def fun_l10_n695(x)
+ if (x < 1)
+ fun_l11_n451(x)
+ else
+ fun_l11_n618(x)
+ end
+end
+
+def fun_l10_n696(x)
+ if (x < 1)
+ fun_l11_n640(x)
+ else
+ fun_l11_n13(x)
+ end
+end
+
+def fun_l10_n697(x)
+ if (x < 1)
+ fun_l11_n968(x)
+ else
+ fun_l11_n903(x)
+ end
+end
+
+def fun_l10_n698(x)
+ if (x < 1)
+ fun_l11_n918(x)
+ else
+ fun_l11_n244(x)
+ end
+end
+
+def fun_l10_n699(x)
+ if (x < 1)
+ fun_l11_n17(x)
+ else
+ fun_l11_n17(x)
+ end
+end
+
+def fun_l10_n700(x)
+ if (x < 1)
+ fun_l11_n918(x)
+ else
+ fun_l11_n539(x)
+ end
+end
+
+def fun_l10_n701(x)
+ if (x < 1)
+ fun_l11_n924(x)
+ else
+ fun_l11_n103(x)
+ end
+end
+
+def fun_l10_n702(x)
+ if (x < 1)
+ fun_l11_n908(x)
+ else
+ fun_l11_n328(x)
+ end
+end
+
+def fun_l10_n703(x)
+ if (x < 1)
+ fun_l11_n393(x)
+ else
+ fun_l11_n386(x)
+ end
+end
+
+def fun_l10_n704(x)
+ if (x < 1)
+ fun_l11_n194(x)
+ else
+ fun_l11_n812(x)
+ end
+end
+
+def fun_l10_n705(x)
+ if (x < 1)
+ fun_l11_n382(x)
+ else
+ fun_l11_n276(x)
+ end
+end
+
+def fun_l10_n706(x)
+ if (x < 1)
+ fun_l11_n257(x)
+ else
+ fun_l11_n269(x)
+ end
+end
+
+def fun_l10_n707(x)
+ if (x < 1)
+ fun_l11_n940(x)
+ else
+ fun_l11_n593(x)
+ end
+end
+
+def fun_l10_n708(x)
+ if (x < 1)
+ fun_l11_n710(x)
+ else
+ fun_l11_n992(x)
+ end
+end
+
+def fun_l10_n709(x)
+ if (x < 1)
+ fun_l11_n244(x)
+ else
+ fun_l11_n500(x)
+ end
+end
+
+def fun_l10_n710(x)
+ if (x < 1)
+ fun_l11_n712(x)
+ else
+ fun_l11_n544(x)
+ end
+end
+
+def fun_l10_n711(x)
+ if (x < 1)
+ fun_l11_n701(x)
+ else
+ fun_l11_n104(x)
+ end
+end
+
+def fun_l10_n712(x)
+ if (x < 1)
+ fun_l11_n706(x)
+ else
+ fun_l11_n199(x)
+ end
+end
+
+def fun_l10_n713(x)
+ if (x < 1)
+ fun_l11_n189(x)
+ else
+ fun_l11_n840(x)
+ end
+end
+
+def fun_l10_n714(x)
+ if (x < 1)
+ fun_l11_n122(x)
+ else
+ fun_l11_n318(x)
+ end
+end
+
+def fun_l10_n715(x)
+ if (x < 1)
+ fun_l11_n915(x)
+ else
+ fun_l11_n964(x)
+ end
+end
+
+def fun_l10_n716(x)
+ if (x < 1)
+ fun_l11_n341(x)
+ else
+ fun_l11_n118(x)
+ end
+end
+
+def fun_l10_n717(x)
+ if (x < 1)
+ fun_l11_n846(x)
+ else
+ fun_l11_n235(x)
+ end
+end
+
+def fun_l10_n718(x)
+ if (x < 1)
+ fun_l11_n679(x)
+ else
+ fun_l11_n959(x)
+ end
+end
+
+def fun_l10_n719(x)
+ if (x < 1)
+ fun_l11_n121(x)
+ else
+ fun_l11_n708(x)
+ end
+end
+
+def fun_l10_n720(x)
+ if (x < 1)
+ fun_l11_n651(x)
+ else
+ fun_l11_n480(x)
+ end
+end
+
+def fun_l10_n721(x)
+ if (x < 1)
+ fun_l11_n773(x)
+ else
+ fun_l11_n568(x)
+ end
+end
+
+def fun_l10_n722(x)
+ if (x < 1)
+ fun_l11_n809(x)
+ else
+ fun_l11_n111(x)
+ end
+end
+
+def fun_l10_n723(x)
+ if (x < 1)
+ fun_l11_n586(x)
+ else
+ fun_l11_n553(x)
+ end
+end
+
+def fun_l10_n724(x)
+ if (x < 1)
+ fun_l11_n473(x)
+ else
+ fun_l11_n387(x)
+ end
+end
+
+def fun_l10_n725(x)
+ if (x < 1)
+ fun_l11_n584(x)
+ else
+ fun_l11_n224(x)
+ end
+end
+
+def fun_l10_n726(x)
+ if (x < 1)
+ fun_l11_n110(x)
+ else
+ fun_l11_n827(x)
+ end
+end
+
+def fun_l10_n727(x)
+ if (x < 1)
+ fun_l11_n753(x)
+ else
+ fun_l11_n745(x)
+ end
+end
+
+def fun_l10_n728(x)
+ if (x < 1)
+ fun_l11_n550(x)
+ else
+ fun_l11_n380(x)
+ end
+end
+
+def fun_l10_n729(x)
+ if (x < 1)
+ fun_l11_n844(x)
+ else
+ fun_l11_n401(x)
+ end
+end
+
+def fun_l10_n730(x)
+ if (x < 1)
+ fun_l11_n837(x)
+ else
+ fun_l11_n759(x)
+ end
+end
+
+def fun_l10_n731(x)
+ if (x < 1)
+ fun_l11_n850(x)
+ else
+ fun_l11_n953(x)
+ end
+end
+
+def fun_l10_n732(x)
+ if (x < 1)
+ fun_l11_n872(x)
+ else
+ fun_l11_n864(x)
+ end
+end
+
+def fun_l10_n733(x)
+ if (x < 1)
+ fun_l11_n894(x)
+ else
+ fun_l11_n943(x)
+ end
+end
+
+def fun_l10_n734(x)
+ if (x < 1)
+ fun_l11_n830(x)
+ else
+ fun_l11_n858(x)
+ end
+end
+
+def fun_l10_n735(x)
+ if (x < 1)
+ fun_l11_n661(x)
+ else
+ fun_l11_n366(x)
+ end
+end
+
+def fun_l10_n736(x)
+ if (x < 1)
+ fun_l11_n736(x)
+ else
+ fun_l11_n636(x)
+ end
+end
+
+def fun_l10_n737(x)
+ if (x < 1)
+ fun_l11_n316(x)
+ else
+ fun_l11_n977(x)
+ end
+end
+
+def fun_l10_n738(x)
+ if (x < 1)
+ fun_l11_n54(x)
+ else
+ fun_l11_n386(x)
+ end
+end
+
+def fun_l10_n739(x)
+ if (x < 1)
+ fun_l11_n985(x)
+ else
+ fun_l11_n274(x)
+ end
+end
+
+def fun_l10_n740(x)
+ if (x < 1)
+ fun_l11_n756(x)
+ else
+ fun_l11_n171(x)
+ end
+end
+
+def fun_l10_n741(x)
+ if (x < 1)
+ fun_l11_n457(x)
+ else
+ fun_l11_n251(x)
+ end
+end
+
+def fun_l10_n742(x)
+ if (x < 1)
+ fun_l11_n751(x)
+ else
+ fun_l11_n29(x)
+ end
+end
+
+def fun_l10_n743(x)
+ if (x < 1)
+ fun_l11_n6(x)
+ else
+ fun_l11_n892(x)
+ end
+end
+
+def fun_l10_n744(x)
+ if (x < 1)
+ fun_l11_n85(x)
+ else
+ fun_l11_n205(x)
+ end
+end
+
+def fun_l10_n745(x)
+ if (x < 1)
+ fun_l11_n887(x)
+ else
+ fun_l11_n734(x)
+ end
+end
+
+def fun_l10_n746(x)
+ if (x < 1)
+ fun_l11_n478(x)
+ else
+ fun_l11_n505(x)
+ end
+end
+
+def fun_l10_n747(x)
+ if (x < 1)
+ fun_l11_n760(x)
+ else
+ fun_l11_n286(x)
+ end
+end
+
+def fun_l10_n748(x)
+ if (x < 1)
+ fun_l11_n391(x)
+ else
+ fun_l11_n69(x)
+ end
+end
+
+def fun_l10_n749(x)
+ if (x < 1)
+ fun_l11_n780(x)
+ else
+ fun_l11_n28(x)
+ end
+end
+
+def fun_l10_n750(x)
+ if (x < 1)
+ fun_l11_n337(x)
+ else
+ fun_l11_n647(x)
+ end
+end
+
+def fun_l10_n751(x)
+ if (x < 1)
+ fun_l11_n92(x)
+ else
+ fun_l11_n121(x)
+ end
+end
+
+def fun_l10_n752(x)
+ if (x < 1)
+ fun_l11_n358(x)
+ else
+ fun_l11_n177(x)
+ end
+end
+
+def fun_l10_n753(x)
+ if (x < 1)
+ fun_l11_n642(x)
+ else
+ fun_l11_n426(x)
+ end
+end
+
+def fun_l10_n754(x)
+ if (x < 1)
+ fun_l11_n66(x)
+ else
+ fun_l11_n948(x)
+ end
+end
+
+def fun_l10_n755(x)
+ if (x < 1)
+ fun_l11_n45(x)
+ else
+ fun_l11_n795(x)
+ end
+end
+
+def fun_l10_n756(x)
+ if (x < 1)
+ fun_l11_n734(x)
+ else
+ fun_l11_n162(x)
+ end
+end
+
+def fun_l10_n757(x)
+ if (x < 1)
+ fun_l11_n689(x)
+ else
+ fun_l11_n31(x)
+ end
+end
+
+def fun_l10_n758(x)
+ if (x < 1)
+ fun_l11_n33(x)
+ else
+ fun_l11_n992(x)
+ end
+end
+
+def fun_l10_n759(x)
+ if (x < 1)
+ fun_l11_n210(x)
+ else
+ fun_l11_n330(x)
+ end
+end
+
+def fun_l10_n760(x)
+ if (x < 1)
+ fun_l11_n727(x)
+ else
+ fun_l11_n265(x)
+ end
+end
+
+def fun_l10_n761(x)
+ if (x < 1)
+ fun_l11_n710(x)
+ else
+ fun_l11_n706(x)
+ end
+end
+
+def fun_l10_n762(x)
+ if (x < 1)
+ fun_l11_n791(x)
+ else
+ fun_l11_n325(x)
+ end
+end
+
+def fun_l10_n763(x)
+ if (x < 1)
+ fun_l11_n350(x)
+ else
+ fun_l11_n443(x)
+ end
+end
+
+def fun_l10_n764(x)
+ if (x < 1)
+ fun_l11_n522(x)
+ else
+ fun_l11_n662(x)
+ end
+end
+
+def fun_l10_n765(x)
+ if (x < 1)
+ fun_l11_n786(x)
+ else
+ fun_l11_n969(x)
+ end
+end
+
+def fun_l10_n766(x)
+ if (x < 1)
+ fun_l11_n486(x)
+ else
+ fun_l11_n834(x)
+ end
+end
+
+def fun_l10_n767(x)
+ if (x < 1)
+ fun_l11_n84(x)
+ else
+ fun_l11_n989(x)
+ end
+end
+
+def fun_l10_n768(x)
+ if (x < 1)
+ fun_l11_n511(x)
+ else
+ fun_l11_n0(x)
+ end
+end
+
+def fun_l10_n769(x)
+ if (x < 1)
+ fun_l11_n459(x)
+ else
+ fun_l11_n243(x)
+ end
+end
+
+def fun_l10_n770(x)
+ if (x < 1)
+ fun_l11_n59(x)
+ else
+ fun_l11_n267(x)
+ end
+end
+
+def fun_l10_n771(x)
+ if (x < 1)
+ fun_l11_n435(x)
+ else
+ fun_l11_n132(x)
+ end
+end
+
+def fun_l10_n772(x)
+ if (x < 1)
+ fun_l11_n986(x)
+ else
+ fun_l11_n227(x)
+ end
+end
+
+def fun_l10_n773(x)
+ if (x < 1)
+ fun_l11_n931(x)
+ else
+ fun_l11_n215(x)
+ end
+end
+
+def fun_l10_n774(x)
+ if (x < 1)
+ fun_l11_n586(x)
+ else
+ fun_l11_n170(x)
+ end
+end
+
+def fun_l10_n775(x)
+ if (x < 1)
+ fun_l11_n334(x)
+ else
+ fun_l11_n780(x)
+ end
+end
+
+def fun_l10_n776(x)
+ if (x < 1)
+ fun_l11_n81(x)
+ else
+ fun_l11_n583(x)
+ end
+end
+
+def fun_l10_n777(x)
+ if (x < 1)
+ fun_l11_n118(x)
+ else
+ fun_l11_n451(x)
+ end
+end
+
+def fun_l10_n778(x)
+ if (x < 1)
+ fun_l11_n767(x)
+ else
+ fun_l11_n824(x)
+ end
+end
+
+def fun_l10_n779(x)
+ if (x < 1)
+ fun_l11_n270(x)
+ else
+ fun_l11_n725(x)
+ end
+end
+
+def fun_l10_n780(x)
+ if (x < 1)
+ fun_l11_n146(x)
+ else
+ fun_l11_n407(x)
+ end
+end
+
+def fun_l10_n781(x)
+ if (x < 1)
+ fun_l11_n103(x)
+ else
+ fun_l11_n523(x)
+ end
+end
+
+def fun_l10_n782(x)
+ if (x < 1)
+ fun_l11_n499(x)
+ else
+ fun_l11_n710(x)
+ end
+end
+
+def fun_l10_n783(x)
+ if (x < 1)
+ fun_l11_n971(x)
+ else
+ fun_l11_n426(x)
+ end
+end
+
+def fun_l10_n784(x)
+ if (x < 1)
+ fun_l11_n457(x)
+ else
+ fun_l11_n207(x)
+ end
+end
+
+def fun_l10_n785(x)
+ if (x < 1)
+ fun_l11_n307(x)
+ else
+ fun_l11_n19(x)
+ end
+end
+
+def fun_l10_n786(x)
+ if (x < 1)
+ fun_l11_n458(x)
+ else
+ fun_l11_n243(x)
+ end
+end
+
+def fun_l10_n787(x)
+ if (x < 1)
+ fun_l11_n488(x)
+ else
+ fun_l11_n694(x)
+ end
+end
+
+def fun_l10_n788(x)
+ if (x < 1)
+ fun_l11_n422(x)
+ else
+ fun_l11_n201(x)
+ end
+end
+
+def fun_l10_n789(x)
+ if (x < 1)
+ fun_l11_n45(x)
+ else
+ fun_l11_n993(x)
+ end
+end
+
+def fun_l10_n790(x)
+ if (x < 1)
+ fun_l11_n443(x)
+ else
+ fun_l11_n124(x)
+ end
+end
+
+def fun_l10_n791(x)
+ if (x < 1)
+ fun_l11_n875(x)
+ else
+ fun_l11_n605(x)
+ end
+end
+
+def fun_l10_n792(x)
+ if (x < 1)
+ fun_l11_n836(x)
+ else
+ fun_l11_n776(x)
+ end
+end
+
+def fun_l10_n793(x)
+ if (x < 1)
+ fun_l11_n58(x)
+ else
+ fun_l11_n847(x)
+ end
+end
+
+def fun_l10_n794(x)
+ if (x < 1)
+ fun_l11_n334(x)
+ else
+ fun_l11_n981(x)
+ end
+end
+
+def fun_l10_n795(x)
+ if (x < 1)
+ fun_l11_n187(x)
+ else
+ fun_l11_n599(x)
+ end
+end
+
+def fun_l10_n796(x)
+ if (x < 1)
+ fun_l11_n37(x)
+ else
+ fun_l11_n211(x)
+ end
+end
+
+def fun_l10_n797(x)
+ if (x < 1)
+ fun_l11_n770(x)
+ else
+ fun_l11_n688(x)
+ end
+end
+
+def fun_l10_n798(x)
+ if (x < 1)
+ fun_l11_n728(x)
+ else
+ fun_l11_n150(x)
+ end
+end
+
+def fun_l10_n799(x)
+ if (x < 1)
+ fun_l11_n175(x)
+ else
+ fun_l11_n762(x)
+ end
+end
+
+def fun_l10_n800(x)
+ if (x < 1)
+ fun_l11_n977(x)
+ else
+ fun_l11_n86(x)
+ end
+end
+
+def fun_l10_n801(x)
+ if (x < 1)
+ fun_l11_n669(x)
+ else
+ fun_l11_n120(x)
+ end
+end
+
+def fun_l10_n802(x)
+ if (x < 1)
+ fun_l11_n630(x)
+ else
+ fun_l11_n839(x)
+ end
+end
+
+def fun_l10_n803(x)
+ if (x < 1)
+ fun_l11_n505(x)
+ else
+ fun_l11_n461(x)
+ end
+end
+
+def fun_l10_n804(x)
+ if (x < 1)
+ fun_l11_n757(x)
+ else
+ fun_l11_n620(x)
+ end
+end
+
+def fun_l10_n805(x)
+ if (x < 1)
+ fun_l11_n379(x)
+ else
+ fun_l11_n468(x)
+ end
+end
+
+def fun_l10_n806(x)
+ if (x < 1)
+ fun_l11_n708(x)
+ else
+ fun_l11_n73(x)
+ end
+end
+
+def fun_l10_n807(x)
+ if (x < 1)
+ fun_l11_n340(x)
+ else
+ fun_l11_n671(x)
+ end
+end
+
+def fun_l10_n808(x)
+ if (x < 1)
+ fun_l11_n628(x)
+ else
+ fun_l11_n912(x)
+ end
+end
+
+def fun_l10_n809(x)
+ if (x < 1)
+ fun_l11_n455(x)
+ else
+ fun_l11_n20(x)
+ end
+end
+
+def fun_l10_n810(x)
+ if (x < 1)
+ fun_l11_n211(x)
+ else
+ fun_l11_n724(x)
+ end
+end
+
+def fun_l10_n811(x)
+ if (x < 1)
+ fun_l11_n982(x)
+ else
+ fun_l11_n876(x)
+ end
+end
+
+def fun_l10_n812(x)
+ if (x < 1)
+ fun_l11_n455(x)
+ else
+ fun_l11_n846(x)
+ end
+end
+
+def fun_l10_n813(x)
+ if (x < 1)
+ fun_l11_n317(x)
+ else
+ fun_l11_n909(x)
+ end
+end
+
+def fun_l10_n814(x)
+ if (x < 1)
+ fun_l11_n622(x)
+ else
+ fun_l11_n147(x)
+ end
+end
+
+def fun_l10_n815(x)
+ if (x < 1)
+ fun_l11_n174(x)
+ else
+ fun_l11_n660(x)
+ end
+end
+
+def fun_l10_n816(x)
+ if (x < 1)
+ fun_l11_n63(x)
+ else
+ fun_l11_n427(x)
+ end
+end
+
+def fun_l10_n817(x)
+ if (x < 1)
+ fun_l11_n944(x)
+ else
+ fun_l11_n40(x)
+ end
+end
+
+def fun_l10_n818(x)
+ if (x < 1)
+ fun_l11_n887(x)
+ else
+ fun_l11_n641(x)
+ end
+end
+
+def fun_l10_n819(x)
+ if (x < 1)
+ fun_l11_n237(x)
+ else
+ fun_l11_n568(x)
+ end
+end
+
+def fun_l10_n820(x)
+ if (x < 1)
+ fun_l11_n415(x)
+ else
+ fun_l11_n374(x)
+ end
+end
+
+def fun_l10_n821(x)
+ if (x < 1)
+ fun_l11_n183(x)
+ else
+ fun_l11_n38(x)
+ end
+end
+
+def fun_l10_n822(x)
+ if (x < 1)
+ fun_l11_n835(x)
+ else
+ fun_l11_n406(x)
+ end
+end
+
+def fun_l10_n823(x)
+ if (x < 1)
+ fun_l11_n233(x)
+ else
+ fun_l11_n118(x)
+ end
+end
+
+def fun_l10_n824(x)
+ if (x < 1)
+ fun_l11_n898(x)
+ else
+ fun_l11_n543(x)
+ end
+end
+
+def fun_l10_n825(x)
+ if (x < 1)
+ fun_l11_n971(x)
+ else
+ fun_l11_n750(x)
+ end
+end
+
+def fun_l10_n826(x)
+ if (x < 1)
+ fun_l11_n254(x)
+ else
+ fun_l11_n759(x)
+ end
+end
+
+def fun_l10_n827(x)
+ if (x < 1)
+ fun_l11_n953(x)
+ else
+ fun_l11_n187(x)
+ end
+end
+
+def fun_l10_n828(x)
+ if (x < 1)
+ fun_l11_n403(x)
+ else
+ fun_l11_n170(x)
+ end
+end
+
+def fun_l10_n829(x)
+ if (x < 1)
+ fun_l11_n251(x)
+ else
+ fun_l11_n506(x)
+ end
+end
+
+def fun_l10_n830(x)
+ if (x < 1)
+ fun_l11_n426(x)
+ else
+ fun_l11_n325(x)
+ end
+end
+
+def fun_l10_n831(x)
+ if (x < 1)
+ fun_l11_n958(x)
+ else
+ fun_l11_n4(x)
+ end
+end
+
+def fun_l10_n832(x)
+ if (x < 1)
+ fun_l11_n628(x)
+ else
+ fun_l11_n920(x)
+ end
+end
+
+def fun_l10_n833(x)
+ if (x < 1)
+ fun_l11_n241(x)
+ else
+ fun_l11_n459(x)
+ end
+end
+
+def fun_l10_n834(x)
+ if (x < 1)
+ fun_l11_n559(x)
+ else
+ fun_l11_n671(x)
+ end
+end
+
+def fun_l10_n835(x)
+ if (x < 1)
+ fun_l11_n980(x)
+ else
+ fun_l11_n295(x)
+ end
+end
+
+def fun_l10_n836(x)
+ if (x < 1)
+ fun_l11_n306(x)
+ else
+ fun_l11_n143(x)
+ end
+end
+
+def fun_l10_n837(x)
+ if (x < 1)
+ fun_l11_n176(x)
+ else
+ fun_l11_n341(x)
+ end
+end
+
+def fun_l10_n838(x)
+ if (x < 1)
+ fun_l11_n130(x)
+ else
+ fun_l11_n380(x)
+ end
+end
+
+def fun_l10_n839(x)
+ if (x < 1)
+ fun_l11_n630(x)
+ else
+ fun_l11_n216(x)
+ end
+end
+
+def fun_l10_n840(x)
+ if (x < 1)
+ fun_l11_n500(x)
+ else
+ fun_l11_n579(x)
+ end
+end
+
+def fun_l10_n841(x)
+ if (x < 1)
+ fun_l11_n312(x)
+ else
+ fun_l11_n656(x)
+ end
+end
+
+def fun_l10_n842(x)
+ if (x < 1)
+ fun_l11_n209(x)
+ else
+ fun_l11_n332(x)
+ end
+end
+
+def fun_l10_n843(x)
+ if (x < 1)
+ fun_l11_n555(x)
+ else
+ fun_l11_n179(x)
+ end
+end
+
+def fun_l10_n844(x)
+ if (x < 1)
+ fun_l11_n154(x)
+ else
+ fun_l11_n284(x)
+ end
+end
+
+def fun_l10_n845(x)
+ if (x < 1)
+ fun_l11_n912(x)
+ else
+ fun_l11_n543(x)
+ end
+end
+
+def fun_l10_n846(x)
+ if (x < 1)
+ fun_l11_n346(x)
+ else
+ fun_l11_n553(x)
+ end
+end
+
+def fun_l10_n847(x)
+ if (x < 1)
+ fun_l11_n117(x)
+ else
+ fun_l11_n738(x)
+ end
+end
+
+def fun_l10_n848(x)
+ if (x < 1)
+ fun_l11_n664(x)
+ else
+ fun_l11_n988(x)
+ end
+end
+
+def fun_l10_n849(x)
+ if (x < 1)
+ fun_l11_n298(x)
+ else
+ fun_l11_n753(x)
+ end
+end
+
+def fun_l10_n850(x)
+ if (x < 1)
+ fun_l11_n177(x)
+ else
+ fun_l11_n690(x)
+ end
+end
+
+def fun_l10_n851(x)
+ if (x < 1)
+ fun_l11_n259(x)
+ else
+ fun_l11_n713(x)
+ end
+end
+
+def fun_l10_n852(x)
+ if (x < 1)
+ fun_l11_n151(x)
+ else
+ fun_l11_n580(x)
+ end
+end
+
+def fun_l10_n853(x)
+ if (x < 1)
+ fun_l11_n274(x)
+ else
+ fun_l11_n703(x)
+ end
+end
+
+def fun_l10_n854(x)
+ if (x < 1)
+ fun_l11_n295(x)
+ else
+ fun_l11_n885(x)
+ end
+end
+
+def fun_l10_n855(x)
+ if (x < 1)
+ fun_l11_n513(x)
+ else
+ fun_l11_n963(x)
+ end
+end
+
+def fun_l10_n856(x)
+ if (x < 1)
+ fun_l11_n855(x)
+ else
+ fun_l11_n435(x)
+ end
+end
+
+def fun_l10_n857(x)
+ if (x < 1)
+ fun_l11_n573(x)
+ else
+ fun_l11_n489(x)
+ end
+end
+
+def fun_l10_n858(x)
+ if (x < 1)
+ fun_l11_n880(x)
+ else
+ fun_l11_n91(x)
+ end
+end
+
+def fun_l10_n859(x)
+ if (x < 1)
+ fun_l11_n993(x)
+ else
+ fun_l11_n358(x)
+ end
+end
+
+def fun_l10_n860(x)
+ if (x < 1)
+ fun_l11_n836(x)
+ else
+ fun_l11_n192(x)
+ end
+end
+
+def fun_l10_n861(x)
+ if (x < 1)
+ fun_l11_n493(x)
+ else
+ fun_l11_n564(x)
+ end
+end
+
+def fun_l10_n862(x)
+ if (x < 1)
+ fun_l11_n111(x)
+ else
+ fun_l11_n8(x)
+ end
+end
+
+def fun_l10_n863(x)
+ if (x < 1)
+ fun_l11_n596(x)
+ else
+ fun_l11_n129(x)
+ end
+end
+
+def fun_l10_n864(x)
+ if (x < 1)
+ fun_l11_n0(x)
+ else
+ fun_l11_n687(x)
+ end
+end
+
+def fun_l10_n865(x)
+ if (x < 1)
+ fun_l11_n543(x)
+ else
+ fun_l11_n866(x)
+ end
+end
+
+def fun_l10_n866(x)
+ if (x < 1)
+ fun_l11_n398(x)
+ else
+ fun_l11_n532(x)
+ end
+end
+
+def fun_l10_n867(x)
+ if (x < 1)
+ fun_l11_n15(x)
+ else
+ fun_l11_n991(x)
+ end
+end
+
+def fun_l10_n868(x)
+ if (x < 1)
+ fun_l11_n890(x)
+ else
+ fun_l11_n222(x)
+ end
+end
+
+def fun_l10_n869(x)
+ if (x < 1)
+ fun_l11_n206(x)
+ else
+ fun_l11_n983(x)
+ end
+end
+
+def fun_l10_n870(x)
+ if (x < 1)
+ fun_l11_n869(x)
+ else
+ fun_l11_n619(x)
+ end
+end
+
+def fun_l10_n871(x)
+ if (x < 1)
+ fun_l11_n417(x)
+ else
+ fun_l11_n18(x)
+ end
+end
+
+def fun_l10_n872(x)
+ if (x < 1)
+ fun_l11_n738(x)
+ else
+ fun_l11_n473(x)
+ end
+end
+
+def fun_l10_n873(x)
+ if (x < 1)
+ fun_l11_n773(x)
+ else
+ fun_l11_n128(x)
+ end
+end
+
+def fun_l10_n874(x)
+ if (x < 1)
+ fun_l11_n930(x)
+ else
+ fun_l11_n563(x)
+ end
+end
+
+def fun_l10_n875(x)
+ if (x < 1)
+ fun_l11_n868(x)
+ else
+ fun_l11_n356(x)
+ end
+end
+
+def fun_l10_n876(x)
+ if (x < 1)
+ fun_l11_n533(x)
+ else
+ fun_l11_n402(x)
+ end
+end
+
+def fun_l10_n877(x)
+ if (x < 1)
+ fun_l11_n959(x)
+ else
+ fun_l11_n921(x)
+ end
+end
+
+def fun_l10_n878(x)
+ if (x < 1)
+ fun_l11_n717(x)
+ else
+ fun_l11_n484(x)
+ end
+end
+
+def fun_l10_n879(x)
+ if (x < 1)
+ fun_l11_n583(x)
+ else
+ fun_l11_n801(x)
+ end
+end
+
+def fun_l10_n880(x)
+ if (x < 1)
+ fun_l11_n576(x)
+ else
+ fun_l11_n811(x)
+ end
+end
+
+def fun_l10_n881(x)
+ if (x < 1)
+ fun_l11_n382(x)
+ else
+ fun_l11_n585(x)
+ end
+end
+
+def fun_l10_n882(x)
+ if (x < 1)
+ fun_l11_n648(x)
+ else
+ fun_l11_n930(x)
+ end
+end
+
+def fun_l10_n883(x)
+ if (x < 1)
+ fun_l11_n246(x)
+ else
+ fun_l11_n636(x)
+ end
+end
+
+def fun_l10_n884(x)
+ if (x < 1)
+ fun_l11_n112(x)
+ else
+ fun_l11_n798(x)
+ end
+end
+
+def fun_l10_n885(x)
+ if (x < 1)
+ fun_l11_n517(x)
+ else
+ fun_l11_n633(x)
+ end
+end
+
+def fun_l10_n886(x)
+ if (x < 1)
+ fun_l11_n651(x)
+ else
+ fun_l11_n377(x)
+ end
+end
+
+def fun_l10_n887(x)
+ if (x < 1)
+ fun_l11_n652(x)
+ else
+ fun_l11_n419(x)
+ end
+end
+
+def fun_l10_n888(x)
+ if (x < 1)
+ fun_l11_n346(x)
+ else
+ fun_l11_n294(x)
+ end
+end
+
+def fun_l10_n889(x)
+ if (x < 1)
+ fun_l11_n809(x)
+ else
+ fun_l11_n844(x)
+ end
+end
+
+def fun_l10_n890(x)
+ if (x < 1)
+ fun_l11_n382(x)
+ else
+ fun_l11_n930(x)
+ end
+end
+
+def fun_l10_n891(x)
+ if (x < 1)
+ fun_l11_n900(x)
+ else
+ fun_l11_n293(x)
+ end
+end
+
+def fun_l10_n892(x)
+ if (x < 1)
+ fun_l11_n912(x)
+ else
+ fun_l11_n46(x)
+ end
+end
+
+def fun_l10_n893(x)
+ if (x < 1)
+ fun_l11_n429(x)
+ else
+ fun_l11_n174(x)
+ end
+end
+
+def fun_l10_n894(x)
+ if (x < 1)
+ fun_l11_n142(x)
+ else
+ fun_l11_n739(x)
+ end
+end
+
+def fun_l10_n895(x)
+ if (x < 1)
+ fun_l11_n300(x)
+ else
+ fun_l11_n546(x)
+ end
+end
+
+def fun_l10_n896(x)
+ if (x < 1)
+ fun_l11_n253(x)
+ else
+ fun_l11_n555(x)
+ end
+end
+
+def fun_l10_n897(x)
+ if (x < 1)
+ fun_l11_n29(x)
+ else
+ fun_l11_n913(x)
+ end
+end
+
+def fun_l10_n898(x)
+ if (x < 1)
+ fun_l11_n879(x)
+ else
+ fun_l11_n2(x)
+ end
+end
+
+def fun_l10_n899(x)
+ if (x < 1)
+ fun_l11_n191(x)
+ else
+ fun_l11_n418(x)
+ end
+end
+
+def fun_l10_n900(x)
+ if (x < 1)
+ fun_l11_n239(x)
+ else
+ fun_l11_n904(x)
+ end
+end
+
+def fun_l10_n901(x)
+ if (x < 1)
+ fun_l11_n962(x)
+ else
+ fun_l11_n978(x)
+ end
+end
+
+def fun_l10_n902(x)
+ if (x < 1)
+ fun_l11_n343(x)
+ else
+ fun_l11_n358(x)
+ end
+end
+
+def fun_l10_n903(x)
+ if (x < 1)
+ fun_l11_n334(x)
+ else
+ fun_l11_n806(x)
+ end
+end
+
+def fun_l10_n904(x)
+ if (x < 1)
+ fun_l11_n973(x)
+ else
+ fun_l11_n708(x)
+ end
+end
+
+def fun_l10_n905(x)
+ if (x < 1)
+ fun_l11_n990(x)
+ else
+ fun_l11_n211(x)
+ end
+end
+
+def fun_l10_n906(x)
+ if (x < 1)
+ fun_l11_n499(x)
+ else
+ fun_l11_n605(x)
+ end
+end
+
+def fun_l10_n907(x)
+ if (x < 1)
+ fun_l11_n335(x)
+ else
+ fun_l11_n855(x)
+ end
+end
+
+def fun_l10_n908(x)
+ if (x < 1)
+ fun_l11_n197(x)
+ else
+ fun_l11_n130(x)
+ end
+end
+
+def fun_l10_n909(x)
+ if (x < 1)
+ fun_l11_n462(x)
+ else
+ fun_l11_n838(x)
+ end
+end
+
+def fun_l10_n910(x)
+ if (x < 1)
+ fun_l11_n254(x)
+ else
+ fun_l11_n16(x)
+ end
+end
+
+def fun_l10_n911(x)
+ if (x < 1)
+ fun_l11_n321(x)
+ else
+ fun_l11_n158(x)
+ end
+end
+
+def fun_l10_n912(x)
+ if (x < 1)
+ fun_l11_n113(x)
+ else
+ fun_l11_n50(x)
+ end
+end
+
+def fun_l10_n913(x)
+ if (x < 1)
+ fun_l11_n492(x)
+ else
+ fun_l11_n502(x)
+ end
+end
+
+def fun_l10_n914(x)
+ if (x < 1)
+ fun_l11_n221(x)
+ else
+ fun_l11_n732(x)
+ end
+end
+
+def fun_l10_n915(x)
+ if (x < 1)
+ fun_l11_n853(x)
+ else
+ fun_l11_n625(x)
+ end
+end
+
+def fun_l10_n916(x)
+ if (x < 1)
+ fun_l11_n172(x)
+ else
+ fun_l11_n17(x)
+ end
+end
+
+def fun_l10_n917(x)
+ if (x < 1)
+ fun_l11_n438(x)
+ else
+ fun_l11_n480(x)
+ end
+end
+
+def fun_l10_n918(x)
+ if (x < 1)
+ fun_l11_n646(x)
+ else
+ fun_l11_n833(x)
+ end
+end
+
+def fun_l10_n919(x)
+ if (x < 1)
+ fun_l11_n628(x)
+ else
+ fun_l11_n40(x)
+ end
+end
+
+def fun_l10_n920(x)
+ if (x < 1)
+ fun_l11_n387(x)
+ else
+ fun_l11_n824(x)
+ end
+end
+
+def fun_l10_n921(x)
+ if (x < 1)
+ fun_l11_n641(x)
+ else
+ fun_l11_n669(x)
+ end
+end
+
+def fun_l10_n922(x)
+ if (x < 1)
+ fun_l11_n484(x)
+ else
+ fun_l11_n591(x)
+ end
+end
+
+def fun_l10_n923(x)
+ if (x < 1)
+ fun_l11_n610(x)
+ else
+ fun_l11_n132(x)
+ end
+end
+
+def fun_l10_n924(x)
+ if (x < 1)
+ fun_l11_n90(x)
+ else
+ fun_l11_n727(x)
+ end
+end
+
+def fun_l10_n925(x)
+ if (x < 1)
+ fun_l11_n44(x)
+ else
+ fun_l11_n412(x)
+ end
+end
+
+def fun_l10_n926(x)
+ if (x < 1)
+ fun_l11_n912(x)
+ else
+ fun_l11_n229(x)
+ end
+end
+
+def fun_l10_n927(x)
+ if (x < 1)
+ fun_l11_n647(x)
+ else
+ fun_l11_n13(x)
+ end
+end
+
+def fun_l10_n928(x)
+ if (x < 1)
+ fun_l11_n820(x)
+ else
+ fun_l11_n316(x)
+ end
+end
+
+def fun_l10_n929(x)
+ if (x < 1)
+ fun_l11_n850(x)
+ else
+ fun_l11_n868(x)
+ end
+end
+
+def fun_l10_n930(x)
+ if (x < 1)
+ fun_l11_n373(x)
+ else
+ fun_l11_n183(x)
+ end
+end
+
+def fun_l10_n931(x)
+ if (x < 1)
+ fun_l11_n217(x)
+ else
+ fun_l11_n230(x)
+ end
+end
+
+def fun_l10_n932(x)
+ if (x < 1)
+ fun_l11_n77(x)
+ else
+ fun_l11_n917(x)
+ end
+end
+
+def fun_l10_n933(x)
+ if (x < 1)
+ fun_l11_n264(x)
+ else
+ fun_l11_n992(x)
+ end
+end
+
+def fun_l10_n934(x)
+ if (x < 1)
+ fun_l11_n125(x)
+ else
+ fun_l11_n441(x)
+ end
+end
+
+def fun_l10_n935(x)
+ if (x < 1)
+ fun_l11_n586(x)
+ else
+ fun_l11_n946(x)
+ end
+end
+
+def fun_l10_n936(x)
+ if (x < 1)
+ fun_l11_n186(x)
+ else
+ fun_l11_n595(x)
+ end
+end
+
+def fun_l10_n937(x)
+ if (x < 1)
+ fun_l11_n210(x)
+ else
+ fun_l11_n186(x)
+ end
+end
+
+def fun_l10_n938(x)
+ if (x < 1)
+ fun_l11_n131(x)
+ else
+ fun_l11_n519(x)
+ end
+end
+
+def fun_l10_n939(x)
+ if (x < 1)
+ fun_l11_n863(x)
+ else
+ fun_l11_n486(x)
+ end
+end
+
+def fun_l10_n940(x)
+ if (x < 1)
+ fun_l11_n753(x)
+ else
+ fun_l11_n916(x)
+ end
+end
+
+def fun_l10_n941(x)
+ if (x < 1)
+ fun_l11_n8(x)
+ else
+ fun_l11_n153(x)
+ end
+end
+
+def fun_l10_n942(x)
+ if (x < 1)
+ fun_l11_n798(x)
+ else
+ fun_l11_n873(x)
+ end
+end
+
+def fun_l10_n943(x)
+ if (x < 1)
+ fun_l11_n862(x)
+ else
+ fun_l11_n293(x)
+ end
+end
+
+def fun_l10_n944(x)
+ if (x < 1)
+ fun_l11_n554(x)
+ else
+ fun_l11_n599(x)
+ end
+end
+
+def fun_l10_n945(x)
+ if (x < 1)
+ fun_l11_n134(x)
+ else
+ fun_l11_n535(x)
+ end
+end
+
+def fun_l10_n946(x)
+ if (x < 1)
+ fun_l11_n992(x)
+ else
+ fun_l11_n624(x)
+ end
+end
+
+def fun_l10_n947(x)
+ if (x < 1)
+ fun_l11_n436(x)
+ else
+ fun_l11_n153(x)
+ end
+end
+
+def fun_l10_n948(x)
+ if (x < 1)
+ fun_l11_n72(x)
+ else
+ fun_l11_n154(x)
+ end
+end
+
+def fun_l10_n949(x)
+ if (x < 1)
+ fun_l11_n61(x)
+ else
+ fun_l11_n612(x)
+ end
+end
+
+def fun_l10_n950(x)
+ if (x < 1)
+ fun_l11_n964(x)
+ else
+ fun_l11_n999(x)
+ end
+end
+
+def fun_l10_n951(x)
+ if (x < 1)
+ fun_l11_n689(x)
+ else
+ fun_l11_n165(x)
+ end
+end
+
+def fun_l10_n952(x)
+ if (x < 1)
+ fun_l11_n856(x)
+ else
+ fun_l11_n7(x)
+ end
+end
+
+def fun_l10_n953(x)
+ if (x < 1)
+ fun_l11_n421(x)
+ else
+ fun_l11_n416(x)
+ end
+end
+
+def fun_l10_n954(x)
+ if (x < 1)
+ fun_l11_n969(x)
+ else
+ fun_l11_n260(x)
+ end
+end
+
+def fun_l10_n955(x)
+ if (x < 1)
+ fun_l11_n716(x)
+ else
+ fun_l11_n364(x)
+ end
+end
+
+def fun_l10_n956(x)
+ if (x < 1)
+ fun_l11_n491(x)
+ else
+ fun_l11_n575(x)
+ end
+end
+
+def fun_l10_n957(x)
+ if (x < 1)
+ fun_l11_n522(x)
+ else
+ fun_l11_n430(x)
+ end
+end
+
+def fun_l10_n958(x)
+ if (x < 1)
+ fun_l11_n712(x)
+ else
+ fun_l11_n939(x)
+ end
+end
+
+def fun_l10_n959(x)
+ if (x < 1)
+ fun_l11_n230(x)
+ else
+ fun_l11_n819(x)
+ end
+end
+
+def fun_l10_n960(x)
+ if (x < 1)
+ fun_l11_n790(x)
+ else
+ fun_l11_n939(x)
+ end
+end
+
+def fun_l10_n961(x)
+ if (x < 1)
+ fun_l11_n844(x)
+ else
+ fun_l11_n847(x)
+ end
+end
+
+def fun_l10_n962(x)
+ if (x < 1)
+ fun_l11_n105(x)
+ else
+ fun_l11_n722(x)
+ end
+end
+
+def fun_l10_n963(x)
+ if (x < 1)
+ fun_l11_n166(x)
+ else
+ fun_l11_n990(x)
+ end
+end
+
+def fun_l10_n964(x)
+ if (x < 1)
+ fun_l11_n224(x)
+ else
+ fun_l11_n751(x)
+ end
+end
+
+def fun_l10_n965(x)
+ if (x < 1)
+ fun_l11_n809(x)
+ else
+ fun_l11_n739(x)
+ end
+end
+
+def fun_l10_n966(x)
+ if (x < 1)
+ fun_l11_n840(x)
+ else
+ fun_l11_n795(x)
+ end
+end
+
+def fun_l10_n967(x)
+ if (x < 1)
+ fun_l11_n791(x)
+ else
+ fun_l11_n926(x)
+ end
+end
+
+def fun_l10_n968(x)
+ if (x < 1)
+ fun_l11_n484(x)
+ else
+ fun_l11_n409(x)
+ end
+end
+
+def fun_l10_n969(x)
+ if (x < 1)
+ fun_l11_n22(x)
+ else
+ fun_l11_n284(x)
+ end
+end
+
+def fun_l10_n970(x)
+ if (x < 1)
+ fun_l11_n539(x)
+ else
+ fun_l11_n661(x)
+ end
+end
+
+def fun_l10_n971(x)
+ if (x < 1)
+ fun_l11_n453(x)
+ else
+ fun_l11_n619(x)
+ end
+end
+
+def fun_l10_n972(x)
+ if (x < 1)
+ fun_l11_n80(x)
+ else
+ fun_l11_n848(x)
+ end
+end
+
+def fun_l10_n973(x)
+ if (x < 1)
+ fun_l11_n599(x)
+ else
+ fun_l11_n147(x)
+ end
+end
+
+def fun_l10_n974(x)
+ if (x < 1)
+ fun_l11_n784(x)
+ else
+ fun_l11_n603(x)
+ end
+end
+
+def fun_l10_n975(x)
+ if (x < 1)
+ fun_l11_n166(x)
+ else
+ fun_l11_n12(x)
+ end
+end
+
+def fun_l10_n976(x)
+ if (x < 1)
+ fun_l11_n739(x)
+ else
+ fun_l11_n381(x)
+ end
+end
+
+def fun_l10_n977(x)
+ if (x < 1)
+ fun_l11_n45(x)
+ else
+ fun_l11_n67(x)
+ end
+end
+
+def fun_l10_n978(x)
+ if (x < 1)
+ fun_l11_n243(x)
+ else
+ fun_l11_n51(x)
+ end
+end
+
+def fun_l10_n979(x)
+ if (x < 1)
+ fun_l11_n964(x)
+ else
+ fun_l11_n949(x)
+ end
+end
+
+def fun_l10_n980(x)
+ if (x < 1)
+ fun_l11_n881(x)
+ else
+ fun_l11_n893(x)
+ end
+end
+
+def fun_l10_n981(x)
+ if (x < 1)
+ fun_l11_n808(x)
+ else
+ fun_l11_n205(x)
+ end
+end
+
+def fun_l10_n982(x)
+ if (x < 1)
+ fun_l11_n897(x)
+ else
+ fun_l11_n259(x)
+ end
+end
+
+def fun_l10_n983(x)
+ if (x < 1)
+ fun_l11_n671(x)
+ else
+ fun_l11_n115(x)
+ end
+end
+
+def fun_l10_n984(x)
+ if (x < 1)
+ fun_l11_n9(x)
+ else
+ fun_l11_n994(x)
+ end
+end
+
+def fun_l10_n985(x)
+ if (x < 1)
+ fun_l11_n663(x)
+ else
+ fun_l11_n979(x)
+ end
+end
+
+def fun_l10_n986(x)
+ if (x < 1)
+ fun_l11_n8(x)
+ else
+ fun_l11_n949(x)
+ end
+end
+
+def fun_l10_n987(x)
+ if (x < 1)
+ fun_l11_n230(x)
+ else
+ fun_l11_n822(x)
+ end
+end
+
+def fun_l10_n988(x)
+ if (x < 1)
+ fun_l11_n767(x)
+ else
+ fun_l11_n691(x)
+ end
+end
+
+def fun_l10_n989(x)
+ if (x < 1)
+ fun_l11_n524(x)
+ else
+ fun_l11_n514(x)
+ end
+end
+
+def fun_l10_n990(x)
+ if (x < 1)
+ fun_l11_n556(x)
+ else
+ fun_l11_n34(x)
+ end
+end
+
+def fun_l10_n991(x)
+ if (x < 1)
+ fun_l11_n516(x)
+ else
+ fun_l11_n817(x)
+ end
+end
+
+def fun_l10_n992(x)
+ if (x < 1)
+ fun_l11_n273(x)
+ else
+ fun_l11_n189(x)
+ end
+end
+
+def fun_l10_n993(x)
+ if (x < 1)
+ fun_l11_n726(x)
+ else
+ fun_l11_n260(x)
+ end
+end
+
+def fun_l10_n994(x)
+ if (x < 1)
+ fun_l11_n789(x)
+ else
+ fun_l11_n993(x)
+ end
+end
+
+def fun_l10_n995(x)
+ if (x < 1)
+ fun_l11_n187(x)
+ else
+ fun_l11_n291(x)
+ end
+end
+
+def fun_l10_n996(x)
+ if (x < 1)
+ fun_l11_n145(x)
+ else
+ fun_l11_n500(x)
+ end
+end
+
+def fun_l10_n997(x)
+ if (x < 1)
+ fun_l11_n437(x)
+ else
+ fun_l11_n925(x)
+ end
+end
+
+def fun_l10_n998(x)
+ if (x < 1)
+ fun_l11_n945(x)
+ else
+ fun_l11_n300(x)
+ end
+end
+
+def fun_l10_n999(x)
+ if (x < 1)
+ fun_l11_n703(x)
+ else
+ fun_l11_n542(x)
+ end
+end
+
+def fun_l11_n0(x)
+ if (x < 1)
+ fun_l12_n539(x)
+ else
+ fun_l12_n60(x)
+ end
+end
+
+def fun_l11_n1(x)
+ if (x < 1)
+ fun_l12_n659(x)
+ else
+ fun_l12_n739(x)
+ end
+end
+
+def fun_l11_n2(x)
+ if (x < 1)
+ fun_l12_n273(x)
+ else
+ fun_l12_n392(x)
+ end
+end
+
+def fun_l11_n3(x)
+ if (x < 1)
+ fun_l12_n394(x)
+ else
+ fun_l12_n989(x)
+ end
+end
+
+def fun_l11_n4(x)
+ if (x < 1)
+ fun_l12_n254(x)
+ else
+ fun_l12_n906(x)
+ end
+end
+
+def fun_l11_n5(x)
+ if (x < 1)
+ fun_l12_n229(x)
+ else
+ fun_l12_n345(x)
+ end
+end
+
+def fun_l11_n6(x)
+ if (x < 1)
+ fun_l12_n15(x)
+ else
+ fun_l12_n893(x)
+ end
+end
+
+def fun_l11_n7(x)
+ if (x < 1)
+ fun_l12_n185(x)
+ else
+ fun_l12_n187(x)
+ end
+end
+
+def fun_l11_n8(x)
+ if (x < 1)
+ fun_l12_n761(x)
+ else
+ fun_l12_n850(x)
+ end
+end
+
+def fun_l11_n9(x)
+ if (x < 1)
+ fun_l12_n644(x)
+ else
+ fun_l12_n274(x)
+ end
+end
+
+def fun_l11_n10(x)
+ if (x < 1)
+ fun_l12_n652(x)
+ else
+ fun_l12_n223(x)
+ end
+end
+
+def fun_l11_n11(x)
+ if (x < 1)
+ fun_l12_n905(x)
+ else
+ fun_l12_n215(x)
+ end
+end
+
+def fun_l11_n12(x)
+ if (x < 1)
+ fun_l12_n58(x)
+ else
+ fun_l12_n495(x)
+ end
+end
+
+def fun_l11_n13(x)
+ if (x < 1)
+ fun_l12_n529(x)
+ else
+ fun_l12_n477(x)
+ end
+end
+
+def fun_l11_n14(x)
+ if (x < 1)
+ fun_l12_n743(x)
+ else
+ fun_l12_n847(x)
+ end
+end
+
+def fun_l11_n15(x)
+ if (x < 1)
+ fun_l12_n558(x)
+ else
+ fun_l12_n252(x)
+ end
+end
+
+def fun_l11_n16(x)
+ if (x < 1)
+ fun_l12_n115(x)
+ else
+ fun_l12_n972(x)
+ end
+end
+
+def fun_l11_n17(x)
+ if (x < 1)
+ fun_l12_n374(x)
+ else
+ fun_l12_n637(x)
+ end
+end
+
+def fun_l11_n18(x)
+ if (x < 1)
+ fun_l12_n978(x)
+ else
+ fun_l12_n570(x)
+ end
+end
+
+def fun_l11_n19(x)
+ if (x < 1)
+ fun_l12_n264(x)
+ else
+ fun_l12_n743(x)
+ end
+end
+
+def fun_l11_n20(x)
+ if (x < 1)
+ fun_l12_n936(x)
+ else
+ fun_l12_n986(x)
+ end
+end
+
+def fun_l11_n21(x)
+ if (x < 1)
+ fun_l12_n107(x)
+ else
+ fun_l12_n167(x)
+ end
+end
+
+def fun_l11_n22(x)
+ if (x < 1)
+ fun_l12_n777(x)
+ else
+ fun_l12_n143(x)
+ end
+end
+
+def fun_l11_n23(x)
+ if (x < 1)
+ fun_l12_n510(x)
+ else
+ fun_l12_n236(x)
+ end
+end
+
+def fun_l11_n24(x)
+ if (x < 1)
+ fun_l12_n180(x)
+ else
+ fun_l12_n309(x)
+ end
+end
+
+def fun_l11_n25(x)
+ if (x < 1)
+ fun_l12_n850(x)
+ else
+ fun_l12_n374(x)
+ end
+end
+
+def fun_l11_n26(x)
+ if (x < 1)
+ fun_l12_n573(x)
+ else
+ fun_l12_n722(x)
+ end
+end
+
+def fun_l11_n27(x)
+ if (x < 1)
+ fun_l12_n800(x)
+ else
+ fun_l12_n981(x)
+ end
+end
+
+def fun_l11_n28(x)
+ if (x < 1)
+ fun_l12_n705(x)
+ else
+ fun_l12_n636(x)
+ end
+end
+
+def fun_l11_n29(x)
+ if (x < 1)
+ fun_l12_n618(x)
+ else
+ fun_l12_n429(x)
+ end
+end
+
+def fun_l11_n30(x)
+ if (x < 1)
+ fun_l12_n139(x)
+ else
+ fun_l12_n95(x)
+ end
+end
+
+def fun_l11_n31(x)
+ if (x < 1)
+ fun_l12_n861(x)
+ else
+ fun_l12_n797(x)
+ end
+end
+
+def fun_l11_n32(x)
+ if (x < 1)
+ fun_l12_n576(x)
+ else
+ fun_l12_n719(x)
+ end
+end
+
+def fun_l11_n33(x)
+ if (x < 1)
+ fun_l12_n236(x)
+ else
+ fun_l12_n429(x)
+ end
+end
+
+def fun_l11_n34(x)
+ if (x < 1)
+ fun_l12_n375(x)
+ else
+ fun_l12_n696(x)
+ end
+end
+
+def fun_l11_n35(x)
+ if (x < 1)
+ fun_l12_n291(x)
+ else
+ fun_l12_n799(x)
+ end
+end
+
+def fun_l11_n36(x)
+ if (x < 1)
+ fun_l12_n180(x)
+ else
+ fun_l12_n228(x)
+ end
+end
+
+def fun_l11_n37(x)
+ if (x < 1)
+ fun_l12_n455(x)
+ else
+ fun_l12_n983(x)
+ end
+end
+
+def fun_l11_n38(x)
+ if (x < 1)
+ fun_l12_n486(x)
+ else
+ fun_l12_n871(x)
+ end
+end
+
+def fun_l11_n39(x)
+ if (x < 1)
+ fun_l12_n945(x)
+ else
+ fun_l12_n47(x)
+ end
+end
+
+def fun_l11_n40(x)
+ if (x < 1)
+ fun_l12_n531(x)
+ else
+ fun_l12_n506(x)
+ end
+end
+
+def fun_l11_n41(x)
+ if (x < 1)
+ fun_l12_n248(x)
+ else
+ fun_l12_n142(x)
+ end
+end
+
+def fun_l11_n42(x)
+ if (x < 1)
+ fun_l12_n415(x)
+ else
+ fun_l12_n177(x)
+ end
+end
+
+def fun_l11_n43(x)
+ if (x < 1)
+ fun_l12_n560(x)
+ else
+ fun_l12_n63(x)
+ end
+end
+
+def fun_l11_n44(x)
+ if (x < 1)
+ fun_l12_n180(x)
+ else
+ fun_l12_n268(x)
+ end
+end
+
+def fun_l11_n45(x)
+ if (x < 1)
+ fun_l12_n814(x)
+ else
+ fun_l12_n967(x)
+ end
+end
+
+def fun_l11_n46(x)
+ if (x < 1)
+ fun_l12_n273(x)
+ else
+ fun_l12_n702(x)
+ end
+end
+
+def fun_l11_n47(x)
+ if (x < 1)
+ fun_l12_n626(x)
+ else
+ fun_l12_n615(x)
+ end
+end
+
+def fun_l11_n48(x)
+ if (x < 1)
+ fun_l12_n374(x)
+ else
+ fun_l12_n669(x)
+ end
+end
+
+def fun_l11_n49(x)
+ if (x < 1)
+ fun_l12_n681(x)
+ else
+ fun_l12_n48(x)
+ end
+end
+
+def fun_l11_n50(x)
+ if (x < 1)
+ fun_l12_n3(x)
+ else
+ fun_l12_n455(x)
+ end
+end
+
+def fun_l11_n51(x)
+ if (x < 1)
+ fun_l12_n461(x)
+ else
+ fun_l12_n350(x)
+ end
+end
+
+def fun_l11_n52(x)
+ if (x < 1)
+ fun_l12_n129(x)
+ else
+ fun_l12_n266(x)
+ end
+end
+
+def fun_l11_n53(x)
+ if (x < 1)
+ fun_l12_n802(x)
+ else
+ fun_l12_n863(x)
+ end
+end
+
+def fun_l11_n54(x)
+ if (x < 1)
+ fun_l12_n216(x)
+ else
+ fun_l12_n820(x)
+ end
+end
+
+def fun_l11_n55(x)
+ if (x < 1)
+ fun_l12_n626(x)
+ else
+ fun_l12_n476(x)
+ end
+end
+
+def fun_l11_n56(x)
+ if (x < 1)
+ fun_l12_n162(x)
+ else
+ fun_l12_n796(x)
+ end
+end
+
+def fun_l11_n57(x)
+ if (x < 1)
+ fun_l12_n45(x)
+ else
+ fun_l12_n893(x)
+ end
+end
+
+def fun_l11_n58(x)
+ if (x < 1)
+ fun_l12_n227(x)
+ else
+ fun_l12_n919(x)
+ end
+end
+
+def fun_l11_n59(x)
+ if (x < 1)
+ fun_l12_n300(x)
+ else
+ fun_l12_n360(x)
+ end
+end
+
+def fun_l11_n60(x)
+ if (x < 1)
+ fun_l12_n265(x)
+ else
+ fun_l12_n552(x)
+ end
+end
+
+def fun_l11_n61(x)
+ if (x < 1)
+ fun_l12_n927(x)
+ else
+ fun_l12_n486(x)
+ end
+end
+
+def fun_l11_n62(x)
+ if (x < 1)
+ fun_l12_n94(x)
+ else
+ fun_l12_n28(x)
+ end
+end
+
+def fun_l11_n63(x)
+ if (x < 1)
+ fun_l12_n295(x)
+ else
+ fun_l12_n967(x)
+ end
+end
+
+def fun_l11_n64(x)
+ if (x < 1)
+ fun_l12_n713(x)
+ else
+ fun_l12_n463(x)
+ end
+end
+
+def fun_l11_n65(x)
+ if (x < 1)
+ fun_l12_n454(x)
+ else
+ fun_l12_n616(x)
+ end
+end
+
+def fun_l11_n66(x)
+ if (x < 1)
+ fun_l12_n121(x)
+ else
+ fun_l12_n277(x)
+ end
+end
+
+def fun_l11_n67(x)
+ if (x < 1)
+ fun_l12_n524(x)
+ else
+ fun_l12_n242(x)
+ end
+end
+
+def fun_l11_n68(x)
+ if (x < 1)
+ fun_l12_n570(x)
+ else
+ fun_l12_n658(x)
+ end
+end
+
+def fun_l11_n69(x)
+ if (x < 1)
+ fun_l12_n343(x)
+ else
+ fun_l12_n826(x)
+ end
+end
+
+def fun_l11_n70(x)
+ if (x < 1)
+ fun_l12_n732(x)
+ else
+ fun_l12_n993(x)
+ end
+end
+
+def fun_l11_n71(x)
+ if (x < 1)
+ fun_l12_n380(x)
+ else
+ fun_l12_n486(x)
+ end
+end
+
+def fun_l11_n72(x)
+ if (x < 1)
+ fun_l12_n55(x)
+ else
+ fun_l12_n342(x)
+ end
+end
+
+def fun_l11_n73(x)
+ if (x < 1)
+ fun_l12_n789(x)
+ else
+ fun_l12_n646(x)
+ end
+end
+
+def fun_l11_n74(x)
+ if (x < 1)
+ fun_l12_n106(x)
+ else
+ fun_l12_n557(x)
+ end
+end
+
+def fun_l11_n75(x)
+ if (x < 1)
+ fun_l12_n368(x)
+ else
+ fun_l12_n5(x)
+ end
+end
+
+def fun_l11_n76(x)
+ if (x < 1)
+ fun_l12_n992(x)
+ else
+ fun_l12_n521(x)
+ end
+end
+
+def fun_l11_n77(x)
+ if (x < 1)
+ fun_l12_n754(x)
+ else
+ fun_l12_n259(x)
+ end
+end
+
+def fun_l11_n78(x)
+ if (x < 1)
+ fun_l12_n855(x)
+ else
+ fun_l12_n946(x)
+ end
+end
+
+def fun_l11_n79(x)
+ if (x < 1)
+ fun_l12_n727(x)
+ else
+ fun_l12_n422(x)
+ end
+end
+
+def fun_l11_n80(x)
+ if (x < 1)
+ fun_l12_n649(x)
+ else
+ fun_l12_n593(x)
+ end
+end
+
+def fun_l11_n81(x)
+ if (x < 1)
+ fun_l12_n206(x)
+ else
+ fun_l12_n222(x)
+ end
+end
+
+def fun_l11_n82(x)
+ if (x < 1)
+ fun_l12_n995(x)
+ else
+ fun_l12_n471(x)
+ end
+end
+
+def fun_l11_n83(x)
+ if (x < 1)
+ fun_l12_n926(x)
+ else
+ fun_l12_n165(x)
+ end
+end
+
+def fun_l11_n84(x)
+ if (x < 1)
+ fun_l12_n988(x)
+ else
+ fun_l12_n495(x)
+ end
+end
+
+def fun_l11_n85(x)
+ if (x < 1)
+ fun_l12_n839(x)
+ else
+ fun_l12_n565(x)
+ end
+end
+
+def fun_l11_n86(x)
+ if (x < 1)
+ fun_l12_n381(x)
+ else
+ fun_l12_n981(x)
+ end
+end
+
+def fun_l11_n87(x)
+ if (x < 1)
+ fun_l12_n64(x)
+ else
+ fun_l12_n616(x)
+ end
+end
+
+def fun_l11_n88(x)
+ if (x < 1)
+ fun_l12_n714(x)
+ else
+ fun_l12_n995(x)
+ end
+end
+
+def fun_l11_n89(x)
+ if (x < 1)
+ fun_l12_n796(x)
+ else
+ fun_l12_n534(x)
+ end
+end
+
+def fun_l11_n90(x)
+ if (x < 1)
+ fun_l12_n31(x)
+ else
+ fun_l12_n584(x)
+ end
+end
+
+def fun_l11_n91(x)
+ if (x < 1)
+ fun_l12_n741(x)
+ else
+ fun_l12_n356(x)
+ end
+end
+
+def fun_l11_n92(x)
+ if (x < 1)
+ fun_l12_n418(x)
+ else
+ fun_l12_n184(x)
+ end
+end
+
+def fun_l11_n93(x)
+ if (x < 1)
+ fun_l12_n427(x)
+ else
+ fun_l12_n136(x)
+ end
+end
+
+def fun_l11_n94(x)
+ if (x < 1)
+ fun_l12_n968(x)
+ else
+ fun_l12_n647(x)
+ end
+end
+
+def fun_l11_n95(x)
+ if (x < 1)
+ fun_l12_n641(x)
+ else
+ fun_l12_n675(x)
+ end
+end
+
+def fun_l11_n96(x)
+ if (x < 1)
+ fun_l12_n465(x)
+ else
+ fun_l12_n507(x)
+ end
+end
+
+def fun_l11_n97(x)
+ if (x < 1)
+ fun_l12_n910(x)
+ else
+ fun_l12_n718(x)
+ end
+end
+
+def fun_l11_n98(x)
+ if (x < 1)
+ fun_l12_n686(x)
+ else
+ fun_l12_n94(x)
+ end
+end
+
+def fun_l11_n99(x)
+ if (x < 1)
+ fun_l12_n94(x)
+ else
+ fun_l12_n632(x)
+ end
+end
+
+def fun_l11_n100(x)
+ if (x < 1)
+ fun_l12_n270(x)
+ else
+ fun_l12_n228(x)
+ end
+end
+
+def fun_l11_n101(x)
+ if (x < 1)
+ fun_l12_n569(x)
+ else
+ fun_l12_n492(x)
+ end
+end
+
+def fun_l11_n102(x)
+ if (x < 1)
+ fun_l12_n187(x)
+ else
+ fun_l12_n183(x)
+ end
+end
+
+def fun_l11_n103(x)
+ if (x < 1)
+ fun_l12_n894(x)
+ else
+ fun_l12_n655(x)
+ end
+end
+
+def fun_l11_n104(x)
+ if (x < 1)
+ fun_l12_n347(x)
+ else
+ fun_l12_n467(x)
+ end
+end
+
+def fun_l11_n105(x)
+ if (x < 1)
+ fun_l12_n198(x)
+ else
+ fun_l12_n838(x)
+ end
+end
+
+def fun_l11_n106(x)
+ if (x < 1)
+ fun_l12_n941(x)
+ else
+ fun_l12_n98(x)
+ end
+end
+
+def fun_l11_n107(x)
+ if (x < 1)
+ fun_l12_n406(x)
+ else
+ fun_l12_n773(x)
+ end
+end
+
+def fun_l11_n108(x)
+ if (x < 1)
+ fun_l12_n980(x)
+ else
+ fun_l12_n508(x)
+ end
+end
+
+def fun_l11_n109(x)
+ if (x < 1)
+ fun_l12_n286(x)
+ else
+ fun_l12_n928(x)
+ end
+end
+
+def fun_l11_n110(x)
+ if (x < 1)
+ fun_l12_n710(x)
+ else
+ fun_l12_n20(x)
+ end
+end
+
+def fun_l11_n111(x)
+ if (x < 1)
+ fun_l12_n358(x)
+ else
+ fun_l12_n549(x)
+ end
+end
+
+def fun_l11_n112(x)
+ if (x < 1)
+ fun_l12_n359(x)
+ else
+ fun_l12_n548(x)
+ end
+end
+
+def fun_l11_n113(x)
+ if (x < 1)
+ fun_l12_n665(x)
+ else
+ fun_l12_n802(x)
+ end
+end
+
+def fun_l11_n114(x)
+ if (x < 1)
+ fun_l12_n199(x)
+ else
+ fun_l12_n904(x)
+ end
+end
+
+def fun_l11_n115(x)
+ if (x < 1)
+ fun_l12_n995(x)
+ else
+ fun_l12_n319(x)
+ end
+end
+
+def fun_l11_n116(x)
+ if (x < 1)
+ fun_l12_n873(x)
+ else
+ fun_l12_n786(x)
+ end
+end
+
+def fun_l11_n117(x)
+ if (x < 1)
+ fun_l12_n147(x)
+ else
+ fun_l12_n542(x)
+ end
+end
+
+def fun_l11_n118(x)
+ if (x < 1)
+ fun_l12_n669(x)
+ else
+ fun_l12_n871(x)
+ end
+end
+
+def fun_l11_n119(x)
+ if (x < 1)
+ fun_l12_n552(x)
+ else
+ fun_l12_n998(x)
+ end
+end
+
+def fun_l11_n120(x)
+ if (x < 1)
+ fun_l12_n300(x)
+ else
+ fun_l12_n333(x)
+ end
+end
+
+def fun_l11_n121(x)
+ if (x < 1)
+ fun_l12_n846(x)
+ else
+ fun_l12_n133(x)
+ end
+end
+
+def fun_l11_n122(x)
+ if (x < 1)
+ fun_l12_n946(x)
+ else
+ fun_l12_n540(x)
+ end
+end
+
+def fun_l11_n123(x)
+ if (x < 1)
+ fun_l12_n71(x)
+ else
+ fun_l12_n264(x)
+ end
+end
+
+def fun_l11_n124(x)
+ if (x < 1)
+ fun_l12_n410(x)
+ else
+ fun_l12_n60(x)
+ end
+end
+
+def fun_l11_n125(x)
+ if (x < 1)
+ fun_l12_n62(x)
+ else
+ fun_l12_n211(x)
+ end
+end
+
+def fun_l11_n126(x)
+ if (x < 1)
+ fun_l12_n252(x)
+ else
+ fun_l12_n635(x)
+ end
+end
+
+def fun_l11_n127(x)
+ if (x < 1)
+ fun_l12_n444(x)
+ else
+ fun_l12_n735(x)
+ end
+end
+
+def fun_l11_n128(x)
+ if (x < 1)
+ fun_l12_n3(x)
+ else
+ fun_l12_n403(x)
+ end
+end
+
+def fun_l11_n129(x)
+ if (x < 1)
+ fun_l12_n121(x)
+ else
+ fun_l12_n882(x)
+ end
+end
+
+def fun_l11_n130(x)
+ if (x < 1)
+ fun_l12_n985(x)
+ else
+ fun_l12_n983(x)
+ end
+end
+
+def fun_l11_n131(x)
+ if (x < 1)
+ fun_l12_n413(x)
+ else
+ fun_l12_n117(x)
+ end
+end
+
+def fun_l11_n132(x)
+ if (x < 1)
+ fun_l12_n856(x)
+ else
+ fun_l12_n312(x)
+ end
+end
+
+def fun_l11_n133(x)
+ if (x < 1)
+ fun_l12_n249(x)
+ else
+ fun_l12_n870(x)
+ end
+end
+
+def fun_l11_n134(x)
+ if (x < 1)
+ fun_l12_n367(x)
+ else
+ fun_l12_n748(x)
+ end
+end
+
+def fun_l11_n135(x)
+ if (x < 1)
+ fun_l12_n670(x)
+ else
+ fun_l12_n464(x)
+ end
+end
+
+def fun_l11_n136(x)
+ if (x < 1)
+ fun_l12_n698(x)
+ else
+ fun_l12_n238(x)
+ end
+end
+
+def fun_l11_n137(x)
+ if (x < 1)
+ fun_l12_n856(x)
+ else
+ fun_l12_n660(x)
+ end
+end
+
+def fun_l11_n138(x)
+ if (x < 1)
+ fun_l12_n693(x)
+ else
+ fun_l12_n793(x)
+ end
+end
+
+def fun_l11_n139(x)
+ if (x < 1)
+ fun_l12_n959(x)
+ else
+ fun_l12_n377(x)
+ end
+end
+
+def fun_l11_n140(x)
+ if (x < 1)
+ fun_l12_n24(x)
+ else
+ fun_l12_n250(x)
+ end
+end
+
+def fun_l11_n141(x)
+ if (x < 1)
+ fun_l12_n270(x)
+ else
+ fun_l12_n720(x)
+ end
+end
+
+def fun_l11_n142(x)
+ if (x < 1)
+ fun_l12_n775(x)
+ else
+ fun_l12_n781(x)
+ end
+end
+
+def fun_l11_n143(x)
+ if (x < 1)
+ fun_l12_n266(x)
+ else
+ fun_l12_n608(x)
+ end
+end
+
+def fun_l11_n144(x)
+ if (x < 1)
+ fun_l12_n196(x)
+ else
+ fun_l12_n70(x)
+ end
+end
+
+def fun_l11_n145(x)
+ if (x < 1)
+ fun_l12_n100(x)
+ else
+ fun_l12_n846(x)
+ end
+end
+
+def fun_l11_n146(x)
+ if (x < 1)
+ fun_l12_n406(x)
+ else
+ fun_l12_n966(x)
+ end
+end
+
+def fun_l11_n147(x)
+ if (x < 1)
+ fun_l12_n816(x)
+ else
+ fun_l12_n54(x)
+ end
+end
+
+def fun_l11_n148(x)
+ if (x < 1)
+ fun_l12_n856(x)
+ else
+ fun_l12_n710(x)
+ end
+end
+
+def fun_l11_n149(x)
+ if (x < 1)
+ fun_l12_n597(x)
+ else
+ fun_l12_n596(x)
+ end
+end
+
+def fun_l11_n150(x)
+ if (x < 1)
+ fun_l12_n938(x)
+ else
+ fun_l12_n349(x)
+ end
+end
+
+def fun_l11_n151(x)
+ if (x < 1)
+ fun_l12_n987(x)
+ else
+ fun_l12_n231(x)
+ end
+end
+
+def fun_l11_n152(x)
+ if (x < 1)
+ fun_l12_n67(x)
+ else
+ fun_l12_n685(x)
+ end
+end
+
+def fun_l11_n153(x)
+ if (x < 1)
+ fun_l12_n786(x)
+ else
+ fun_l12_n71(x)
+ end
+end
+
+def fun_l11_n154(x)
+ if (x < 1)
+ fun_l12_n245(x)
+ else
+ fun_l12_n109(x)
+ end
+end
+
+def fun_l11_n155(x)
+ if (x < 1)
+ fun_l12_n665(x)
+ else
+ fun_l12_n565(x)
+ end
+end
+
+def fun_l11_n156(x)
+ if (x < 1)
+ fun_l12_n885(x)
+ else
+ fun_l12_n27(x)
+ end
+end
+
+def fun_l11_n157(x)
+ if (x < 1)
+ fun_l12_n704(x)
+ else
+ fun_l12_n140(x)
+ end
+end
+
+def fun_l11_n158(x)
+ if (x < 1)
+ fun_l12_n505(x)
+ else
+ fun_l12_n428(x)
+ end
+end
+
+def fun_l11_n159(x)
+ if (x < 1)
+ fun_l12_n646(x)
+ else
+ fun_l12_n250(x)
+ end
+end
+
+def fun_l11_n160(x)
+ if (x < 1)
+ fun_l12_n125(x)
+ else
+ fun_l12_n22(x)
+ end
+end
+
+def fun_l11_n161(x)
+ if (x < 1)
+ fun_l12_n49(x)
+ else
+ fun_l12_n852(x)
+ end
+end
+
+def fun_l11_n162(x)
+ if (x < 1)
+ fun_l12_n992(x)
+ else
+ fun_l12_n321(x)
+ end
+end
+
+def fun_l11_n163(x)
+ if (x < 1)
+ fun_l12_n457(x)
+ else
+ fun_l12_n162(x)
+ end
+end
+
+def fun_l11_n164(x)
+ if (x < 1)
+ fun_l12_n612(x)
+ else
+ fun_l12_n107(x)
+ end
+end
+
+def fun_l11_n165(x)
+ if (x < 1)
+ fun_l12_n786(x)
+ else
+ fun_l12_n338(x)
+ end
+end
+
+def fun_l11_n166(x)
+ if (x < 1)
+ fun_l12_n623(x)
+ else
+ fun_l12_n18(x)
+ end
+end
+
+def fun_l11_n167(x)
+ if (x < 1)
+ fun_l12_n605(x)
+ else
+ fun_l12_n963(x)
+ end
+end
+
+def fun_l11_n168(x)
+ if (x < 1)
+ fun_l12_n111(x)
+ else
+ fun_l12_n822(x)
+ end
+end
+
+def fun_l11_n169(x)
+ if (x < 1)
+ fun_l12_n502(x)
+ else
+ fun_l12_n291(x)
+ end
+end
+
+def fun_l11_n170(x)
+ if (x < 1)
+ fun_l12_n984(x)
+ else
+ fun_l12_n950(x)
+ end
+end
+
+def fun_l11_n171(x)
+ if (x < 1)
+ fun_l12_n915(x)
+ else
+ fun_l12_n81(x)
+ end
+end
+
+def fun_l11_n172(x)
+ if (x < 1)
+ fun_l12_n839(x)
+ else
+ fun_l12_n405(x)
+ end
+end
+
+def fun_l11_n173(x)
+ if (x < 1)
+ fun_l12_n331(x)
+ else
+ fun_l12_n906(x)
+ end
+end
+
+def fun_l11_n174(x)
+ if (x < 1)
+ fun_l12_n698(x)
+ else
+ fun_l12_n378(x)
+ end
+end
+
+def fun_l11_n175(x)
+ if (x < 1)
+ fun_l12_n648(x)
+ else
+ fun_l12_n824(x)
+ end
+end
+
+def fun_l11_n176(x)
+ if (x < 1)
+ fun_l12_n876(x)
+ else
+ fun_l12_n873(x)
+ end
+end
+
+def fun_l11_n177(x)
+ if (x < 1)
+ fun_l12_n932(x)
+ else
+ fun_l12_n797(x)
+ end
+end
+
+def fun_l11_n178(x)
+ if (x < 1)
+ fun_l12_n975(x)
+ else
+ fun_l12_n166(x)
+ end
+end
+
+def fun_l11_n179(x)
+ if (x < 1)
+ fun_l12_n66(x)
+ else
+ fun_l12_n624(x)
+ end
+end
+
+def fun_l11_n180(x)
+ if (x < 1)
+ fun_l12_n676(x)
+ else
+ fun_l12_n603(x)
+ end
+end
+
+def fun_l11_n181(x)
+ if (x < 1)
+ fun_l12_n80(x)
+ else
+ fun_l12_n504(x)
+ end
+end
+
+def fun_l11_n182(x)
+ if (x < 1)
+ fun_l12_n465(x)
+ else
+ fun_l12_n319(x)
+ end
+end
+
+def fun_l11_n183(x)
+ if (x < 1)
+ fun_l12_n493(x)
+ else
+ fun_l12_n412(x)
+ end
+end
+
+def fun_l11_n184(x)
+ if (x < 1)
+ fun_l12_n278(x)
+ else
+ fun_l12_n145(x)
+ end
+end
+
+def fun_l11_n185(x)
+ if (x < 1)
+ fun_l12_n328(x)
+ else
+ fun_l12_n777(x)
+ end
+end
+
+def fun_l11_n186(x)
+ if (x < 1)
+ fun_l12_n120(x)
+ else
+ fun_l12_n462(x)
+ end
+end
+
+def fun_l11_n187(x)
+ if (x < 1)
+ fun_l12_n755(x)
+ else
+ fun_l12_n260(x)
+ end
+end
+
+def fun_l11_n188(x)
+ if (x < 1)
+ fun_l12_n378(x)
+ else
+ fun_l12_n174(x)
+ end
+end
+
+def fun_l11_n189(x)
+ if (x < 1)
+ fun_l12_n100(x)
+ else
+ fun_l12_n234(x)
+ end
+end
+
+def fun_l11_n190(x)
+ if (x < 1)
+ fun_l12_n132(x)
+ else
+ fun_l12_n437(x)
+ end
+end
+
+def fun_l11_n191(x)
+ if (x < 1)
+ fun_l12_n399(x)
+ else
+ fun_l12_n989(x)
+ end
+end
+
+def fun_l11_n192(x)
+ if (x < 1)
+ fun_l12_n355(x)
+ else
+ fun_l12_n953(x)
+ end
+end
+
+def fun_l11_n193(x)
+ if (x < 1)
+ fun_l12_n139(x)
+ else
+ fun_l12_n138(x)
+ end
+end
+
+def fun_l11_n194(x)
+ if (x < 1)
+ fun_l12_n294(x)
+ else
+ fun_l12_n676(x)
+ end
+end
+
+def fun_l11_n195(x)
+ if (x < 1)
+ fun_l12_n581(x)
+ else
+ fun_l12_n549(x)
+ end
+end
+
+def fun_l11_n196(x)
+ if (x < 1)
+ fun_l12_n555(x)
+ else
+ fun_l12_n738(x)
+ end
+end
+
+def fun_l11_n197(x)
+ if (x < 1)
+ fun_l12_n170(x)
+ else
+ fun_l12_n476(x)
+ end
+end
+
+def fun_l11_n198(x)
+ if (x < 1)
+ fun_l12_n350(x)
+ else
+ fun_l12_n576(x)
+ end
+end
+
+def fun_l11_n199(x)
+ if (x < 1)
+ fun_l12_n647(x)
+ else
+ fun_l12_n94(x)
+ end
+end
+
+def fun_l11_n200(x)
+ if (x < 1)
+ fun_l12_n28(x)
+ else
+ fun_l12_n706(x)
+ end
+end
+
+def fun_l11_n201(x)
+ if (x < 1)
+ fun_l12_n189(x)
+ else
+ fun_l12_n366(x)
+ end
+end
+
+def fun_l11_n202(x)
+ if (x < 1)
+ fun_l12_n690(x)
+ else
+ fun_l12_n807(x)
+ end
+end
+
+def fun_l11_n203(x)
+ if (x < 1)
+ fun_l12_n402(x)
+ else
+ fun_l12_n685(x)
+ end
+end
+
+def fun_l11_n204(x)
+ if (x < 1)
+ fun_l12_n232(x)
+ else
+ fun_l12_n257(x)
+ end
+end
+
+def fun_l11_n205(x)
+ if (x < 1)
+ fun_l12_n108(x)
+ else
+ fun_l12_n888(x)
+ end
+end
+
+def fun_l11_n206(x)
+ if (x < 1)
+ fun_l12_n494(x)
+ else
+ fun_l12_n372(x)
+ end
+end
+
+def fun_l11_n207(x)
+ if (x < 1)
+ fun_l12_n607(x)
+ else
+ fun_l12_n336(x)
+ end
+end
+
+def fun_l11_n208(x)
+ if (x < 1)
+ fun_l12_n913(x)
+ else
+ fun_l12_n134(x)
+ end
+end
+
+def fun_l11_n209(x)
+ if (x < 1)
+ fun_l12_n996(x)
+ else
+ fun_l12_n918(x)
+ end
+end
+
+def fun_l11_n210(x)
+ if (x < 1)
+ fun_l12_n674(x)
+ else
+ fun_l12_n260(x)
+ end
+end
+
+def fun_l11_n211(x)
+ if (x < 1)
+ fun_l12_n344(x)
+ else
+ fun_l12_n219(x)
+ end
+end
+
+def fun_l11_n212(x)
+ if (x < 1)
+ fun_l12_n161(x)
+ else
+ fun_l12_n415(x)
+ end
+end
+
+def fun_l11_n213(x)
+ if (x < 1)
+ fun_l12_n65(x)
+ else
+ fun_l12_n777(x)
+ end
+end
+
+def fun_l11_n214(x)
+ if (x < 1)
+ fun_l12_n369(x)
+ else
+ fun_l12_n899(x)
+ end
+end
+
+def fun_l11_n215(x)
+ if (x < 1)
+ fun_l12_n310(x)
+ else
+ fun_l12_n118(x)
+ end
+end
+
+def fun_l11_n216(x)
+ if (x < 1)
+ fun_l12_n326(x)
+ else
+ fun_l12_n823(x)
+ end
+end
+
+def fun_l11_n217(x)
+ if (x < 1)
+ fun_l12_n981(x)
+ else
+ fun_l12_n824(x)
+ end
+end
+
+def fun_l11_n218(x)
+ if (x < 1)
+ fun_l12_n425(x)
+ else
+ fun_l12_n483(x)
+ end
+end
+
+def fun_l11_n219(x)
+ if (x < 1)
+ fun_l12_n931(x)
+ else
+ fun_l12_n366(x)
+ end
+end
+
+def fun_l11_n220(x)
+ if (x < 1)
+ fun_l12_n325(x)
+ else
+ fun_l12_n926(x)
+ end
+end
+
+def fun_l11_n221(x)
+ if (x < 1)
+ fun_l12_n924(x)
+ else
+ fun_l12_n764(x)
+ end
+end
+
+def fun_l11_n222(x)
+ if (x < 1)
+ fun_l12_n407(x)
+ else
+ fun_l12_n137(x)
+ end
+end
+
+def fun_l11_n223(x)
+ if (x < 1)
+ fun_l12_n584(x)
+ else
+ fun_l12_n294(x)
+ end
+end
+
+def fun_l11_n224(x)
+ if (x < 1)
+ fun_l12_n39(x)
+ else
+ fun_l12_n795(x)
+ end
+end
+
+def fun_l11_n225(x)
+ if (x < 1)
+ fun_l12_n37(x)
+ else
+ fun_l12_n738(x)
+ end
+end
+
+def fun_l11_n226(x)
+ if (x < 1)
+ fun_l12_n779(x)
+ else
+ fun_l12_n152(x)
+ end
+end
+
+def fun_l11_n227(x)
+ if (x < 1)
+ fun_l12_n116(x)
+ else
+ fun_l12_n589(x)
+ end
+end
+
+def fun_l11_n228(x)
+ if (x < 1)
+ fun_l12_n500(x)
+ else
+ fun_l12_n916(x)
+ end
+end
+
+def fun_l11_n229(x)
+ if (x < 1)
+ fun_l12_n443(x)
+ else
+ fun_l12_n126(x)
+ end
+end
+
+def fun_l11_n230(x)
+ if (x < 1)
+ fun_l12_n311(x)
+ else
+ fun_l12_n184(x)
+ end
+end
+
+def fun_l11_n231(x)
+ if (x < 1)
+ fun_l12_n604(x)
+ else
+ fun_l12_n171(x)
+ end
+end
+
+def fun_l11_n232(x)
+ if (x < 1)
+ fun_l12_n287(x)
+ else
+ fun_l12_n899(x)
+ end
+end
+
+def fun_l11_n233(x)
+ if (x < 1)
+ fun_l12_n834(x)
+ else
+ fun_l12_n435(x)
+ end
+end
+
+def fun_l11_n234(x)
+ if (x < 1)
+ fun_l12_n187(x)
+ else
+ fun_l12_n584(x)
+ end
+end
+
+def fun_l11_n235(x)
+ if (x < 1)
+ fun_l12_n711(x)
+ else
+ fun_l12_n542(x)
+ end
+end
+
+def fun_l11_n236(x)
+ if (x < 1)
+ fun_l12_n797(x)
+ else
+ fun_l12_n702(x)
+ end
+end
+
+def fun_l11_n237(x)
+ if (x < 1)
+ fun_l12_n645(x)
+ else
+ fun_l12_n691(x)
+ end
+end
+
+def fun_l11_n238(x)
+ if (x < 1)
+ fun_l12_n920(x)
+ else
+ fun_l12_n97(x)
+ end
+end
+
+def fun_l11_n239(x)
+ if (x < 1)
+ fun_l12_n491(x)
+ else
+ fun_l12_n172(x)
+ end
+end
+
+def fun_l11_n240(x)
+ if (x < 1)
+ fun_l12_n882(x)
+ else
+ fun_l12_n596(x)
+ end
+end
+
+def fun_l11_n241(x)
+ if (x < 1)
+ fun_l12_n178(x)
+ else
+ fun_l12_n671(x)
+ end
+end
+
+def fun_l11_n242(x)
+ if (x < 1)
+ fun_l12_n483(x)
+ else
+ fun_l12_n143(x)
+ end
+end
+
+def fun_l11_n243(x)
+ if (x < 1)
+ fun_l12_n677(x)
+ else
+ fun_l12_n542(x)
+ end
+end
+
+def fun_l11_n244(x)
+ if (x < 1)
+ fun_l12_n676(x)
+ else
+ fun_l12_n873(x)
+ end
+end
+
+def fun_l11_n245(x)
+ if (x < 1)
+ fun_l12_n393(x)
+ else
+ fun_l12_n532(x)
+ end
+end
+
+def fun_l11_n246(x)
+ if (x < 1)
+ fun_l12_n704(x)
+ else
+ fun_l12_n885(x)
+ end
+end
+
+def fun_l11_n247(x)
+ if (x < 1)
+ fun_l12_n668(x)
+ else
+ fun_l12_n305(x)
+ end
+end
+
+def fun_l11_n248(x)
+ if (x < 1)
+ fun_l12_n925(x)
+ else
+ fun_l12_n342(x)
+ end
+end
+
+def fun_l11_n249(x)
+ if (x < 1)
+ fun_l12_n487(x)
+ else
+ fun_l12_n517(x)
+ end
+end
+
+def fun_l11_n250(x)
+ if (x < 1)
+ fun_l12_n889(x)
+ else
+ fun_l12_n91(x)
+ end
+end
+
+def fun_l11_n251(x)
+ if (x < 1)
+ fun_l12_n908(x)
+ else
+ fun_l12_n645(x)
+ end
+end
+
+def fun_l11_n252(x)
+ if (x < 1)
+ fun_l12_n747(x)
+ else
+ fun_l12_n736(x)
+ end
+end
+
+def fun_l11_n253(x)
+ if (x < 1)
+ fun_l12_n749(x)
+ else
+ fun_l12_n264(x)
+ end
+end
+
+def fun_l11_n254(x)
+ if (x < 1)
+ fun_l12_n353(x)
+ else
+ fun_l12_n120(x)
+ end
+end
+
+def fun_l11_n255(x)
+ if (x < 1)
+ fun_l12_n231(x)
+ else
+ fun_l12_n211(x)
+ end
+end
+
+def fun_l11_n256(x)
+ if (x < 1)
+ fun_l12_n66(x)
+ else
+ fun_l12_n998(x)
+ end
+end
+
+def fun_l11_n257(x)
+ if (x < 1)
+ fun_l12_n818(x)
+ else
+ fun_l12_n37(x)
+ end
+end
+
+def fun_l11_n258(x)
+ if (x < 1)
+ fun_l12_n96(x)
+ else
+ fun_l12_n489(x)
+ end
+end
+
+def fun_l11_n259(x)
+ if (x < 1)
+ fun_l12_n86(x)
+ else
+ fun_l12_n432(x)
+ end
+end
+
+def fun_l11_n260(x)
+ if (x < 1)
+ fun_l12_n774(x)
+ else
+ fun_l12_n203(x)
+ end
+end
+
+def fun_l11_n261(x)
+ if (x < 1)
+ fun_l12_n935(x)
+ else
+ fun_l12_n29(x)
+ end
+end
+
+def fun_l11_n262(x)
+ if (x < 1)
+ fun_l12_n599(x)
+ else
+ fun_l12_n204(x)
+ end
+end
+
+def fun_l11_n263(x)
+ if (x < 1)
+ fun_l12_n63(x)
+ else
+ fun_l12_n866(x)
+ end
+end
+
+def fun_l11_n264(x)
+ if (x < 1)
+ fun_l12_n892(x)
+ else
+ fun_l12_n847(x)
+ end
+end
+
+def fun_l11_n265(x)
+ if (x < 1)
+ fun_l12_n695(x)
+ else
+ fun_l12_n881(x)
+ end
+end
+
+def fun_l11_n266(x)
+ if (x < 1)
+ fun_l12_n176(x)
+ else
+ fun_l12_n39(x)
+ end
+end
+
+def fun_l11_n267(x)
+ if (x < 1)
+ fun_l12_n448(x)
+ else
+ fun_l12_n744(x)
+ end
+end
+
+def fun_l11_n268(x)
+ if (x < 1)
+ fun_l12_n587(x)
+ else
+ fun_l12_n462(x)
+ end
+end
+
+def fun_l11_n269(x)
+ if (x < 1)
+ fun_l12_n670(x)
+ else
+ fun_l12_n797(x)
+ end
+end
+
+def fun_l11_n270(x)
+ if (x < 1)
+ fun_l12_n856(x)
+ else
+ fun_l12_n903(x)
+ end
+end
+
+def fun_l11_n271(x)
+ if (x < 1)
+ fun_l12_n914(x)
+ else
+ fun_l12_n459(x)
+ end
+end
+
+def fun_l11_n272(x)
+ if (x < 1)
+ fun_l12_n932(x)
+ else
+ fun_l12_n10(x)
+ end
+end
+
+def fun_l11_n273(x)
+ if (x < 1)
+ fun_l12_n554(x)
+ else
+ fun_l12_n528(x)
+ end
+end
+
+def fun_l11_n274(x)
+ if (x < 1)
+ fun_l12_n698(x)
+ else
+ fun_l12_n899(x)
+ end
+end
+
+def fun_l11_n275(x)
+ if (x < 1)
+ fun_l12_n907(x)
+ else
+ fun_l12_n945(x)
+ end
+end
+
+def fun_l11_n276(x)
+ if (x < 1)
+ fun_l12_n421(x)
+ else
+ fun_l12_n575(x)
+ end
+end
+
+def fun_l11_n277(x)
+ if (x < 1)
+ fun_l12_n757(x)
+ else
+ fun_l12_n808(x)
+ end
+end
+
+def fun_l11_n278(x)
+ if (x < 1)
+ fun_l12_n527(x)
+ else
+ fun_l12_n438(x)
+ end
+end
+
+def fun_l11_n279(x)
+ if (x < 1)
+ fun_l12_n263(x)
+ else
+ fun_l12_n842(x)
+ end
+end
+
+def fun_l11_n280(x)
+ if (x < 1)
+ fun_l12_n603(x)
+ else
+ fun_l12_n899(x)
+ end
+end
+
+def fun_l11_n281(x)
+ if (x < 1)
+ fun_l12_n486(x)
+ else
+ fun_l12_n380(x)
+ end
+end
+
+def fun_l11_n282(x)
+ if (x < 1)
+ fun_l12_n699(x)
+ else
+ fun_l12_n199(x)
+ end
+end
+
+def fun_l11_n283(x)
+ if (x < 1)
+ fun_l12_n422(x)
+ else
+ fun_l12_n258(x)
+ end
+end
+
+def fun_l11_n284(x)
+ if (x < 1)
+ fun_l12_n255(x)
+ else
+ fun_l12_n752(x)
+ end
+end
+
+def fun_l11_n285(x)
+ if (x < 1)
+ fun_l12_n506(x)
+ else
+ fun_l12_n801(x)
+ end
+end
+
+def fun_l11_n286(x)
+ if (x < 1)
+ fun_l12_n535(x)
+ else
+ fun_l12_n892(x)
+ end
+end
+
+def fun_l11_n287(x)
+ if (x < 1)
+ fun_l12_n547(x)
+ else
+ fun_l12_n74(x)
+ end
+end
+
+def fun_l11_n288(x)
+ if (x < 1)
+ fun_l12_n923(x)
+ else
+ fun_l12_n135(x)
+ end
+end
+
+def fun_l11_n289(x)
+ if (x < 1)
+ fun_l12_n78(x)
+ else
+ fun_l12_n704(x)
+ end
+end
+
+def fun_l11_n290(x)
+ if (x < 1)
+ fun_l12_n771(x)
+ else
+ fun_l12_n915(x)
+ end
+end
+
+def fun_l11_n291(x)
+ if (x < 1)
+ fun_l12_n184(x)
+ else
+ fun_l12_n188(x)
+ end
+end
+
+def fun_l11_n292(x)
+ if (x < 1)
+ fun_l12_n736(x)
+ else
+ fun_l12_n190(x)
+ end
+end
+
+def fun_l11_n293(x)
+ if (x < 1)
+ fun_l12_n301(x)
+ else
+ fun_l12_n745(x)
+ end
+end
+
+def fun_l11_n294(x)
+ if (x < 1)
+ fun_l12_n525(x)
+ else
+ fun_l12_n603(x)
+ end
+end
+
+def fun_l11_n295(x)
+ if (x < 1)
+ fun_l12_n339(x)
+ else
+ fun_l12_n996(x)
+ end
+end
+
+def fun_l11_n296(x)
+ if (x < 1)
+ fun_l12_n491(x)
+ else
+ fun_l12_n601(x)
+ end
+end
+
+def fun_l11_n297(x)
+ if (x < 1)
+ fun_l12_n449(x)
+ else
+ fun_l12_n361(x)
+ end
+end
+
+def fun_l11_n298(x)
+ if (x < 1)
+ fun_l12_n617(x)
+ else
+ fun_l12_n346(x)
+ end
+end
+
+def fun_l11_n299(x)
+ if (x < 1)
+ fun_l12_n578(x)
+ else
+ fun_l12_n147(x)
+ end
+end
+
+def fun_l11_n300(x)
+ if (x < 1)
+ fun_l12_n73(x)
+ else
+ fun_l12_n360(x)
+ end
+end
+
+def fun_l11_n301(x)
+ if (x < 1)
+ fun_l12_n398(x)
+ else
+ fun_l12_n749(x)
+ end
+end
+
+def fun_l11_n302(x)
+ if (x < 1)
+ fun_l12_n871(x)
+ else
+ fun_l12_n745(x)
+ end
+end
+
+def fun_l11_n303(x)
+ if (x < 1)
+ fun_l12_n669(x)
+ else
+ fun_l12_n196(x)
+ end
+end
+
+def fun_l11_n304(x)
+ if (x < 1)
+ fun_l12_n202(x)
+ else
+ fun_l12_n173(x)
+ end
+end
+
+def fun_l11_n305(x)
+ if (x < 1)
+ fun_l12_n975(x)
+ else
+ fun_l12_n859(x)
+ end
+end
+
+def fun_l11_n306(x)
+ if (x < 1)
+ fun_l12_n776(x)
+ else
+ fun_l12_n433(x)
+ end
+end
+
+def fun_l11_n307(x)
+ if (x < 1)
+ fun_l12_n760(x)
+ else
+ fun_l12_n4(x)
+ end
+end
+
+def fun_l11_n308(x)
+ if (x < 1)
+ fun_l12_n834(x)
+ else
+ fun_l12_n276(x)
+ end
+end
+
+def fun_l11_n309(x)
+ if (x < 1)
+ fun_l12_n162(x)
+ else
+ fun_l12_n741(x)
+ end
+end
+
+def fun_l11_n310(x)
+ if (x < 1)
+ fun_l12_n231(x)
+ else
+ fun_l12_n646(x)
+ end
+end
+
+def fun_l11_n311(x)
+ if (x < 1)
+ fun_l12_n90(x)
+ else
+ fun_l12_n46(x)
+ end
+end
+
+def fun_l11_n312(x)
+ if (x < 1)
+ fun_l12_n101(x)
+ else
+ fun_l12_n75(x)
+ end
+end
+
+def fun_l11_n313(x)
+ if (x < 1)
+ fun_l12_n415(x)
+ else
+ fun_l12_n535(x)
+ end
+end
+
+def fun_l11_n314(x)
+ if (x < 1)
+ fun_l12_n550(x)
+ else
+ fun_l12_n305(x)
+ end
+end
+
+def fun_l11_n315(x)
+ if (x < 1)
+ fun_l12_n971(x)
+ else
+ fun_l12_n700(x)
+ end
+end
+
+def fun_l11_n316(x)
+ if (x < 1)
+ fun_l12_n942(x)
+ else
+ fun_l12_n793(x)
+ end
+end
+
+def fun_l11_n317(x)
+ if (x < 1)
+ fun_l12_n771(x)
+ else
+ fun_l12_n383(x)
+ end
+end
+
+def fun_l11_n318(x)
+ if (x < 1)
+ fun_l12_n846(x)
+ else
+ fun_l12_n504(x)
+ end
+end
+
+def fun_l11_n319(x)
+ if (x < 1)
+ fun_l12_n28(x)
+ else
+ fun_l12_n174(x)
+ end
+end
+
+def fun_l11_n320(x)
+ if (x < 1)
+ fun_l12_n437(x)
+ else
+ fun_l12_n355(x)
+ end
+end
+
+def fun_l11_n321(x)
+ if (x < 1)
+ fun_l12_n954(x)
+ else
+ fun_l12_n78(x)
+ end
+end
+
+def fun_l11_n322(x)
+ if (x < 1)
+ fun_l12_n256(x)
+ else
+ fun_l12_n729(x)
+ end
+end
+
+def fun_l11_n323(x)
+ if (x < 1)
+ fun_l12_n41(x)
+ else
+ fun_l12_n88(x)
+ end
+end
+
+def fun_l11_n324(x)
+ if (x < 1)
+ fun_l12_n256(x)
+ else
+ fun_l12_n162(x)
+ end
+end
+
+def fun_l11_n325(x)
+ if (x < 1)
+ fun_l12_n143(x)
+ else
+ fun_l12_n506(x)
+ end
+end
+
+def fun_l11_n326(x)
+ if (x < 1)
+ fun_l12_n686(x)
+ else
+ fun_l12_n968(x)
+ end
+end
+
+def fun_l11_n327(x)
+ if (x < 1)
+ fun_l12_n235(x)
+ else
+ fun_l12_n246(x)
+ end
+end
+
+def fun_l11_n328(x)
+ if (x < 1)
+ fun_l12_n85(x)
+ else
+ fun_l12_n125(x)
+ end
+end
+
+def fun_l11_n329(x)
+ if (x < 1)
+ fun_l12_n877(x)
+ else
+ fun_l12_n193(x)
+ end
+end
+
+def fun_l11_n330(x)
+ if (x < 1)
+ fun_l12_n678(x)
+ else
+ fun_l12_n147(x)
+ end
+end
+
+def fun_l11_n331(x)
+ if (x < 1)
+ fun_l12_n402(x)
+ else
+ fun_l12_n747(x)
+ end
+end
+
+def fun_l11_n332(x)
+ if (x < 1)
+ fun_l12_n390(x)
+ else
+ fun_l12_n852(x)
+ end
+end
+
+def fun_l11_n333(x)
+ if (x < 1)
+ fun_l12_n299(x)
+ else
+ fun_l12_n122(x)
+ end
+end
+
+def fun_l11_n334(x)
+ if (x < 1)
+ fun_l12_n398(x)
+ else
+ fun_l12_n886(x)
+ end
+end
+
+def fun_l11_n335(x)
+ if (x < 1)
+ fun_l12_n128(x)
+ else
+ fun_l12_n729(x)
+ end
+end
+
+def fun_l11_n336(x)
+ if (x < 1)
+ fun_l12_n611(x)
+ else
+ fun_l12_n75(x)
+ end
+end
+
+def fun_l11_n337(x)
+ if (x < 1)
+ fun_l12_n327(x)
+ else
+ fun_l12_n442(x)
+ end
+end
+
+def fun_l11_n338(x)
+ if (x < 1)
+ fun_l12_n353(x)
+ else
+ fun_l12_n259(x)
+ end
+end
+
+def fun_l11_n339(x)
+ if (x < 1)
+ fun_l12_n173(x)
+ else
+ fun_l12_n846(x)
+ end
+end
+
+def fun_l11_n340(x)
+ if (x < 1)
+ fun_l12_n579(x)
+ else
+ fun_l12_n869(x)
+ end
+end
+
+def fun_l11_n341(x)
+ if (x < 1)
+ fun_l12_n336(x)
+ else
+ fun_l12_n364(x)
+ end
+end
+
+def fun_l11_n342(x)
+ if (x < 1)
+ fun_l12_n355(x)
+ else
+ fun_l12_n317(x)
+ end
+end
+
+def fun_l11_n343(x)
+ if (x < 1)
+ fun_l12_n560(x)
+ else
+ fun_l12_n202(x)
+ end
+end
+
+def fun_l11_n344(x)
+ if (x < 1)
+ fun_l12_n232(x)
+ else
+ fun_l12_n447(x)
+ end
+end
+
+def fun_l11_n345(x)
+ if (x < 1)
+ fun_l12_n712(x)
+ else
+ fun_l12_n205(x)
+ end
+end
+
+def fun_l11_n346(x)
+ if (x < 1)
+ fun_l12_n102(x)
+ else
+ fun_l12_n785(x)
+ end
+end
+
+def fun_l11_n347(x)
+ if (x < 1)
+ fun_l12_n545(x)
+ else
+ fun_l12_n186(x)
+ end
+end
+
+def fun_l11_n348(x)
+ if (x < 1)
+ fun_l12_n530(x)
+ else
+ fun_l12_n705(x)
+ end
+end
+
+def fun_l11_n349(x)
+ if (x < 1)
+ fun_l12_n428(x)
+ else
+ fun_l12_n295(x)
+ end
+end
+
+def fun_l11_n350(x)
+ if (x < 1)
+ fun_l12_n855(x)
+ else
+ fun_l12_n232(x)
+ end
+end
+
+def fun_l11_n351(x)
+ if (x < 1)
+ fun_l12_n759(x)
+ else
+ fun_l12_n13(x)
+ end
+end
+
+def fun_l11_n352(x)
+ if (x < 1)
+ fun_l12_n366(x)
+ else
+ fun_l12_n700(x)
+ end
+end
+
+def fun_l11_n353(x)
+ if (x < 1)
+ fun_l12_n814(x)
+ else
+ fun_l12_n101(x)
+ end
+end
+
+def fun_l11_n354(x)
+ if (x < 1)
+ fun_l12_n788(x)
+ else
+ fun_l12_n509(x)
+ end
+end
+
+def fun_l11_n355(x)
+ if (x < 1)
+ fun_l12_n619(x)
+ else
+ fun_l12_n531(x)
+ end
+end
+
+def fun_l11_n356(x)
+ if (x < 1)
+ fun_l12_n142(x)
+ else
+ fun_l12_n586(x)
+ end
+end
+
+def fun_l11_n357(x)
+ if (x < 1)
+ fun_l12_n772(x)
+ else
+ fun_l12_n714(x)
+ end
+end
+
+def fun_l11_n358(x)
+ if (x < 1)
+ fun_l12_n506(x)
+ else
+ fun_l12_n405(x)
+ end
+end
+
+def fun_l11_n359(x)
+ if (x < 1)
+ fun_l12_n991(x)
+ else
+ fun_l12_n141(x)
+ end
+end
+
+def fun_l11_n360(x)
+ if (x < 1)
+ fun_l12_n156(x)
+ else
+ fun_l12_n67(x)
+ end
+end
+
+def fun_l11_n361(x)
+ if (x < 1)
+ fun_l12_n525(x)
+ else
+ fun_l12_n293(x)
+ end
+end
+
+def fun_l11_n362(x)
+ if (x < 1)
+ fun_l12_n396(x)
+ else
+ fun_l12_n931(x)
+ end
+end
+
+def fun_l11_n363(x)
+ if (x < 1)
+ fun_l12_n153(x)
+ else
+ fun_l12_n831(x)
+ end
+end
+
+def fun_l11_n364(x)
+ if (x < 1)
+ fun_l12_n240(x)
+ else
+ fun_l12_n450(x)
+ end
+end
+
+def fun_l11_n365(x)
+ if (x < 1)
+ fun_l12_n514(x)
+ else
+ fun_l12_n312(x)
+ end
+end
+
+def fun_l11_n366(x)
+ if (x < 1)
+ fun_l12_n456(x)
+ else
+ fun_l12_n221(x)
+ end
+end
+
+def fun_l11_n367(x)
+ if (x < 1)
+ fun_l12_n920(x)
+ else
+ fun_l12_n699(x)
+ end
+end
+
+def fun_l11_n368(x)
+ if (x < 1)
+ fun_l12_n738(x)
+ else
+ fun_l12_n793(x)
+ end
+end
+
+def fun_l11_n369(x)
+ if (x < 1)
+ fun_l12_n13(x)
+ else
+ fun_l12_n812(x)
+ end
+end
+
+def fun_l11_n370(x)
+ if (x < 1)
+ fun_l12_n392(x)
+ else
+ fun_l12_n342(x)
+ end
+end
+
+def fun_l11_n371(x)
+ if (x < 1)
+ fun_l12_n470(x)
+ else
+ fun_l12_n623(x)
+ end
+end
+
+def fun_l11_n372(x)
+ if (x < 1)
+ fun_l12_n26(x)
+ else
+ fun_l12_n138(x)
+ end
+end
+
+def fun_l11_n373(x)
+ if (x < 1)
+ fun_l12_n70(x)
+ else
+ fun_l12_n682(x)
+ end
+end
+
+def fun_l11_n374(x)
+ if (x < 1)
+ fun_l12_n413(x)
+ else
+ fun_l12_n900(x)
+ end
+end
+
+def fun_l11_n375(x)
+ if (x < 1)
+ fun_l12_n328(x)
+ else
+ fun_l12_n848(x)
+ end
+end
+
+def fun_l11_n376(x)
+ if (x < 1)
+ fun_l12_n604(x)
+ else
+ fun_l12_n823(x)
+ end
+end
+
+def fun_l11_n377(x)
+ if (x < 1)
+ fun_l12_n469(x)
+ else
+ fun_l12_n868(x)
+ end
+end
+
+def fun_l11_n378(x)
+ if (x < 1)
+ fun_l12_n241(x)
+ else
+ fun_l12_n571(x)
+ end
+end
+
+def fun_l11_n379(x)
+ if (x < 1)
+ fun_l12_n669(x)
+ else
+ fun_l12_n75(x)
+ end
+end
+
+def fun_l11_n380(x)
+ if (x < 1)
+ fun_l12_n587(x)
+ else
+ fun_l12_n454(x)
+ end
+end
+
+def fun_l11_n381(x)
+ if (x < 1)
+ fun_l12_n210(x)
+ else
+ fun_l12_n512(x)
+ end
+end
+
+def fun_l11_n382(x)
+ if (x < 1)
+ fun_l12_n73(x)
+ else
+ fun_l12_n981(x)
+ end
+end
+
+def fun_l11_n383(x)
+ if (x < 1)
+ fun_l12_n59(x)
+ else
+ fun_l12_n274(x)
+ end
+end
+
+def fun_l11_n384(x)
+ if (x < 1)
+ fun_l12_n242(x)
+ else
+ fun_l12_n631(x)
+ end
+end
+
+def fun_l11_n385(x)
+ if (x < 1)
+ fun_l12_n933(x)
+ else
+ fun_l12_n678(x)
+ end
+end
+
+def fun_l11_n386(x)
+ if (x < 1)
+ fun_l12_n695(x)
+ else
+ fun_l12_n766(x)
+ end
+end
+
+def fun_l11_n387(x)
+ if (x < 1)
+ fun_l12_n49(x)
+ else
+ fun_l12_n459(x)
+ end
+end
+
+def fun_l11_n388(x)
+ if (x < 1)
+ fun_l12_n751(x)
+ else
+ fun_l12_n594(x)
+ end
+end
+
+def fun_l11_n389(x)
+ if (x < 1)
+ fun_l12_n149(x)
+ else
+ fun_l12_n290(x)
+ end
+end
+
+def fun_l11_n390(x)
+ if (x < 1)
+ fun_l12_n307(x)
+ else
+ fun_l12_n723(x)
+ end
+end
+
+def fun_l11_n391(x)
+ if (x < 1)
+ fun_l12_n606(x)
+ else
+ fun_l12_n97(x)
+ end
+end
+
+def fun_l11_n392(x)
+ if (x < 1)
+ fun_l12_n31(x)
+ else
+ fun_l12_n610(x)
+ end
+end
+
+def fun_l11_n393(x)
+ if (x < 1)
+ fun_l12_n798(x)
+ else
+ fun_l12_n940(x)
+ end
+end
+
+def fun_l11_n394(x)
+ if (x < 1)
+ fun_l12_n131(x)
+ else
+ fun_l12_n79(x)
+ end
+end
+
+def fun_l11_n395(x)
+ if (x < 1)
+ fun_l12_n230(x)
+ else
+ fun_l12_n72(x)
+ end
+end
+
+def fun_l11_n396(x)
+ if (x < 1)
+ fun_l12_n506(x)
+ else
+ fun_l12_n433(x)
+ end
+end
+
+def fun_l11_n397(x)
+ if (x < 1)
+ fun_l12_n410(x)
+ else
+ fun_l12_n648(x)
+ end
+end
+
+def fun_l11_n398(x)
+ if (x < 1)
+ fun_l12_n946(x)
+ else
+ fun_l12_n630(x)
+ end
+end
+
+def fun_l11_n399(x)
+ if (x < 1)
+ fun_l12_n394(x)
+ else
+ fun_l12_n220(x)
+ end
+end
+
+def fun_l11_n400(x)
+ if (x < 1)
+ fun_l12_n761(x)
+ else
+ fun_l12_n407(x)
+ end
+end
+
+def fun_l11_n401(x)
+ if (x < 1)
+ fun_l12_n386(x)
+ else
+ fun_l12_n411(x)
+ end
+end
+
+def fun_l11_n402(x)
+ if (x < 1)
+ fun_l12_n290(x)
+ else
+ fun_l12_n334(x)
+ end
+end
+
+def fun_l11_n403(x)
+ if (x < 1)
+ fun_l12_n600(x)
+ else
+ fun_l12_n282(x)
+ end
+end
+
+def fun_l11_n404(x)
+ if (x < 1)
+ fun_l12_n334(x)
+ else
+ fun_l12_n214(x)
+ end
+end
+
+def fun_l11_n405(x)
+ if (x < 1)
+ fun_l12_n103(x)
+ else
+ fun_l12_n188(x)
+ end
+end
+
+def fun_l11_n406(x)
+ if (x < 1)
+ fun_l12_n755(x)
+ else
+ fun_l12_n773(x)
+ end
+end
+
+def fun_l11_n407(x)
+ if (x < 1)
+ fun_l12_n269(x)
+ else
+ fun_l12_n579(x)
+ end
+end
+
+def fun_l11_n408(x)
+ if (x < 1)
+ fun_l12_n54(x)
+ else
+ fun_l12_n961(x)
+ end
+end
+
+def fun_l11_n409(x)
+ if (x < 1)
+ fun_l12_n699(x)
+ else
+ fun_l12_n117(x)
+ end
+end
+
+def fun_l11_n410(x)
+ if (x < 1)
+ fun_l12_n802(x)
+ else
+ fun_l12_n65(x)
+ end
+end
+
+def fun_l11_n411(x)
+ if (x < 1)
+ fun_l12_n776(x)
+ else
+ fun_l12_n676(x)
+ end
+end
+
+def fun_l11_n412(x)
+ if (x < 1)
+ fun_l12_n520(x)
+ else
+ fun_l12_n447(x)
+ end
+end
+
+def fun_l11_n413(x)
+ if (x < 1)
+ fun_l12_n856(x)
+ else
+ fun_l12_n285(x)
+ end
+end
+
+def fun_l11_n414(x)
+ if (x < 1)
+ fun_l12_n797(x)
+ else
+ fun_l12_n590(x)
+ end
+end
+
+def fun_l11_n415(x)
+ if (x < 1)
+ fun_l12_n128(x)
+ else
+ fun_l12_n677(x)
+ end
+end
+
+def fun_l11_n416(x)
+ if (x < 1)
+ fun_l12_n422(x)
+ else
+ fun_l12_n632(x)
+ end
+end
+
+def fun_l11_n417(x)
+ if (x < 1)
+ fun_l12_n159(x)
+ else
+ fun_l12_n722(x)
+ end
+end
+
+def fun_l11_n418(x)
+ if (x < 1)
+ fun_l12_n989(x)
+ else
+ fun_l12_n670(x)
+ end
+end
+
+def fun_l11_n419(x)
+ if (x < 1)
+ fun_l12_n952(x)
+ else
+ fun_l12_n65(x)
+ end
+end
+
+def fun_l11_n420(x)
+ if (x < 1)
+ fun_l12_n796(x)
+ else
+ fun_l12_n493(x)
+ end
+end
+
+def fun_l11_n421(x)
+ if (x < 1)
+ fun_l12_n897(x)
+ else
+ fun_l12_n729(x)
+ end
+end
+
+def fun_l11_n422(x)
+ if (x < 1)
+ fun_l12_n557(x)
+ else
+ fun_l12_n545(x)
+ end
+end
+
+def fun_l11_n423(x)
+ if (x < 1)
+ fun_l12_n716(x)
+ else
+ fun_l12_n746(x)
+ end
+end
+
+def fun_l11_n424(x)
+ if (x < 1)
+ fun_l12_n335(x)
+ else
+ fun_l12_n968(x)
+ end
+end
+
+def fun_l11_n425(x)
+ if (x < 1)
+ fun_l12_n891(x)
+ else
+ fun_l12_n115(x)
+ end
+end
+
+def fun_l11_n426(x)
+ if (x < 1)
+ fun_l12_n757(x)
+ else
+ fun_l12_n750(x)
+ end
+end
+
+def fun_l11_n427(x)
+ if (x < 1)
+ fun_l12_n391(x)
+ else
+ fun_l12_n729(x)
+ end
+end
+
+def fun_l11_n428(x)
+ if (x < 1)
+ fun_l12_n249(x)
+ else
+ fun_l12_n347(x)
+ end
+end
+
+def fun_l11_n429(x)
+ if (x < 1)
+ fun_l12_n234(x)
+ else
+ fun_l12_n154(x)
+ end
+end
+
+def fun_l11_n430(x)
+ if (x < 1)
+ fun_l12_n890(x)
+ else
+ fun_l12_n40(x)
+ end
+end
+
+def fun_l11_n431(x)
+ if (x < 1)
+ fun_l12_n804(x)
+ else
+ fun_l12_n90(x)
+ end
+end
+
+def fun_l11_n432(x)
+ if (x < 1)
+ fun_l12_n936(x)
+ else
+ fun_l12_n127(x)
+ end
+end
+
+def fun_l11_n433(x)
+ if (x < 1)
+ fun_l12_n551(x)
+ else
+ fun_l12_n404(x)
+ end
+end
+
+def fun_l11_n434(x)
+ if (x < 1)
+ fun_l12_n246(x)
+ else
+ fun_l12_n759(x)
+ end
+end
+
+def fun_l11_n435(x)
+ if (x < 1)
+ fun_l12_n708(x)
+ else
+ fun_l12_n735(x)
+ end
+end
+
+def fun_l11_n436(x)
+ if (x < 1)
+ fun_l12_n535(x)
+ else
+ fun_l12_n785(x)
+ end
+end
+
+def fun_l11_n437(x)
+ if (x < 1)
+ fun_l12_n322(x)
+ else
+ fun_l12_n629(x)
+ end
+end
+
+def fun_l11_n438(x)
+ if (x < 1)
+ fun_l12_n986(x)
+ else
+ fun_l12_n899(x)
+ end
+end
+
+def fun_l11_n439(x)
+ if (x < 1)
+ fun_l12_n147(x)
+ else
+ fun_l12_n582(x)
+ end
+end
+
+def fun_l11_n440(x)
+ if (x < 1)
+ fun_l12_n375(x)
+ else
+ fun_l12_n667(x)
+ end
+end
+
+def fun_l11_n441(x)
+ if (x < 1)
+ fun_l12_n467(x)
+ else
+ fun_l12_n994(x)
+ end
+end
+
+def fun_l11_n442(x)
+ if (x < 1)
+ fun_l12_n176(x)
+ else
+ fun_l12_n558(x)
+ end
+end
+
+def fun_l11_n443(x)
+ if (x < 1)
+ fun_l12_n452(x)
+ else
+ fun_l12_n37(x)
+ end
+end
+
+def fun_l11_n444(x)
+ if (x < 1)
+ fun_l12_n701(x)
+ else
+ fun_l12_n382(x)
+ end
+end
+
+def fun_l11_n445(x)
+ if (x < 1)
+ fun_l12_n881(x)
+ else
+ fun_l12_n896(x)
+ end
+end
+
+def fun_l11_n446(x)
+ if (x < 1)
+ fun_l12_n901(x)
+ else
+ fun_l12_n822(x)
+ end
+end
+
+def fun_l11_n447(x)
+ if (x < 1)
+ fun_l12_n6(x)
+ else
+ fun_l12_n648(x)
+ end
+end
+
+def fun_l11_n448(x)
+ if (x < 1)
+ fun_l12_n359(x)
+ else
+ fun_l12_n682(x)
+ end
+end
+
+def fun_l11_n449(x)
+ if (x < 1)
+ fun_l12_n675(x)
+ else
+ fun_l12_n379(x)
+ end
+end
+
+def fun_l11_n450(x)
+ if (x < 1)
+ fun_l12_n254(x)
+ else
+ fun_l12_n475(x)
+ end
+end
+
+def fun_l11_n451(x)
+ if (x < 1)
+ fun_l12_n951(x)
+ else
+ fun_l12_n947(x)
+ end
+end
+
+def fun_l11_n452(x)
+ if (x < 1)
+ fun_l12_n909(x)
+ else
+ fun_l12_n703(x)
+ end
+end
+
+def fun_l11_n453(x)
+ if (x < 1)
+ fun_l12_n555(x)
+ else
+ fun_l12_n862(x)
+ end
+end
+
+def fun_l11_n454(x)
+ if (x < 1)
+ fun_l12_n379(x)
+ else
+ fun_l12_n852(x)
+ end
+end
+
+def fun_l11_n455(x)
+ if (x < 1)
+ fun_l12_n85(x)
+ else
+ fun_l12_n219(x)
+ end
+end
+
+def fun_l11_n456(x)
+ if (x < 1)
+ fun_l12_n84(x)
+ else
+ fun_l12_n678(x)
+ end
+end
+
+def fun_l11_n457(x)
+ if (x < 1)
+ fun_l12_n663(x)
+ else
+ fun_l12_n637(x)
+ end
+end
+
+def fun_l11_n458(x)
+ if (x < 1)
+ fun_l12_n627(x)
+ else
+ fun_l12_n764(x)
+ end
+end
+
+def fun_l11_n459(x)
+ if (x < 1)
+ fun_l12_n3(x)
+ else
+ fun_l12_n419(x)
+ end
+end
+
+def fun_l11_n460(x)
+ if (x < 1)
+ fun_l12_n69(x)
+ else
+ fun_l12_n802(x)
+ end
+end
+
+def fun_l11_n461(x)
+ if (x < 1)
+ fun_l12_n708(x)
+ else
+ fun_l12_n304(x)
+ end
+end
+
+def fun_l11_n462(x)
+ if (x < 1)
+ fun_l12_n323(x)
+ else
+ fun_l12_n92(x)
+ end
+end
+
+def fun_l11_n463(x)
+ if (x < 1)
+ fun_l12_n987(x)
+ else
+ fun_l12_n434(x)
+ end
+end
+
+def fun_l11_n464(x)
+ if (x < 1)
+ fun_l12_n532(x)
+ else
+ fun_l12_n82(x)
+ end
+end
+
+def fun_l11_n465(x)
+ if (x < 1)
+ fun_l12_n664(x)
+ else
+ fun_l12_n982(x)
+ end
+end
+
+def fun_l11_n466(x)
+ if (x < 1)
+ fun_l12_n488(x)
+ else
+ fun_l12_n799(x)
+ end
+end
+
+def fun_l11_n467(x)
+ if (x < 1)
+ fun_l12_n882(x)
+ else
+ fun_l12_n948(x)
+ end
+end
+
+def fun_l11_n468(x)
+ if (x < 1)
+ fun_l12_n585(x)
+ else
+ fun_l12_n528(x)
+ end
+end
+
+def fun_l11_n469(x)
+ if (x < 1)
+ fun_l12_n318(x)
+ else
+ fun_l12_n233(x)
+ end
+end
+
+def fun_l11_n470(x)
+ if (x < 1)
+ fun_l12_n537(x)
+ else
+ fun_l12_n803(x)
+ end
+end
+
+def fun_l11_n471(x)
+ if (x < 1)
+ fun_l12_n391(x)
+ else
+ fun_l12_n298(x)
+ end
+end
+
+def fun_l11_n472(x)
+ if (x < 1)
+ fun_l12_n266(x)
+ else
+ fun_l12_n345(x)
+ end
+end
+
+def fun_l11_n473(x)
+ if (x < 1)
+ fun_l12_n355(x)
+ else
+ fun_l12_n713(x)
+ end
+end
+
+def fun_l11_n474(x)
+ if (x < 1)
+ fun_l12_n352(x)
+ else
+ fun_l12_n12(x)
+ end
+end
+
+def fun_l11_n475(x)
+ if (x < 1)
+ fun_l12_n23(x)
+ else
+ fun_l12_n715(x)
+ end
+end
+
+def fun_l11_n476(x)
+ if (x < 1)
+ fun_l12_n342(x)
+ else
+ fun_l12_n323(x)
+ end
+end
+
+def fun_l11_n477(x)
+ if (x < 1)
+ fun_l12_n563(x)
+ else
+ fun_l12_n905(x)
+ end
+end
+
+def fun_l11_n478(x)
+ if (x < 1)
+ fun_l12_n313(x)
+ else
+ fun_l12_n489(x)
+ end
+end
+
+def fun_l11_n479(x)
+ if (x < 1)
+ fun_l12_n75(x)
+ else
+ fun_l12_n291(x)
+ end
+end
+
+def fun_l11_n480(x)
+ if (x < 1)
+ fun_l12_n693(x)
+ else
+ fun_l12_n991(x)
+ end
+end
+
+def fun_l11_n481(x)
+ if (x < 1)
+ fun_l12_n246(x)
+ else
+ fun_l12_n664(x)
+ end
+end
+
+def fun_l11_n482(x)
+ if (x < 1)
+ fun_l12_n524(x)
+ else
+ fun_l12_n1(x)
+ end
+end
+
+def fun_l11_n483(x)
+ if (x < 1)
+ fun_l12_n712(x)
+ else
+ fun_l12_n289(x)
+ end
+end
+
+def fun_l11_n484(x)
+ if (x < 1)
+ fun_l12_n435(x)
+ else
+ fun_l12_n163(x)
+ end
+end
+
+def fun_l11_n485(x)
+ if (x < 1)
+ fun_l12_n338(x)
+ else
+ fun_l12_n883(x)
+ end
+end
+
+def fun_l11_n486(x)
+ if (x < 1)
+ fun_l12_n958(x)
+ else
+ fun_l12_n143(x)
+ end
+end
+
+def fun_l11_n487(x)
+ if (x < 1)
+ fun_l12_n22(x)
+ else
+ fun_l12_n674(x)
+ end
+end
+
+def fun_l11_n488(x)
+ if (x < 1)
+ fun_l12_n905(x)
+ else
+ fun_l12_n955(x)
+ end
+end
+
+def fun_l11_n489(x)
+ if (x < 1)
+ fun_l12_n590(x)
+ else
+ fun_l12_n623(x)
+ end
+end
+
+def fun_l11_n490(x)
+ if (x < 1)
+ fun_l12_n434(x)
+ else
+ fun_l12_n793(x)
+ end
+end
+
+def fun_l11_n491(x)
+ if (x < 1)
+ fun_l12_n274(x)
+ else
+ fun_l12_n879(x)
+ end
+end
+
+def fun_l11_n492(x)
+ if (x < 1)
+ fun_l12_n639(x)
+ else
+ fun_l12_n915(x)
+ end
+end
+
+def fun_l11_n493(x)
+ if (x < 1)
+ fun_l12_n547(x)
+ else
+ fun_l12_n87(x)
+ end
+end
+
+def fun_l11_n494(x)
+ if (x < 1)
+ fun_l12_n364(x)
+ else
+ fun_l12_n133(x)
+ end
+end
+
+def fun_l11_n495(x)
+ if (x < 1)
+ fun_l12_n568(x)
+ else
+ fun_l12_n449(x)
+ end
+end
+
+def fun_l11_n496(x)
+ if (x < 1)
+ fun_l12_n751(x)
+ else
+ fun_l12_n580(x)
+ end
+end
+
+def fun_l11_n497(x)
+ if (x < 1)
+ fun_l12_n864(x)
+ else
+ fun_l12_n505(x)
+ end
+end
+
+def fun_l11_n498(x)
+ if (x < 1)
+ fun_l12_n68(x)
+ else
+ fun_l12_n280(x)
+ end
+end
+
+def fun_l11_n499(x)
+ if (x < 1)
+ fun_l12_n821(x)
+ else
+ fun_l12_n816(x)
+ end
+end
+
+def fun_l11_n500(x)
+ if (x < 1)
+ fun_l12_n793(x)
+ else
+ fun_l12_n558(x)
+ end
+end
+
+def fun_l11_n501(x)
+ if (x < 1)
+ fun_l12_n460(x)
+ else
+ fun_l12_n358(x)
+ end
+end
+
+def fun_l11_n502(x)
+ if (x < 1)
+ fun_l12_n99(x)
+ else
+ fun_l12_n149(x)
+ end
+end
+
+def fun_l11_n503(x)
+ if (x < 1)
+ fun_l12_n599(x)
+ else
+ fun_l12_n257(x)
+ end
+end
+
+def fun_l11_n504(x)
+ if (x < 1)
+ fun_l12_n853(x)
+ else
+ fun_l12_n477(x)
+ end
+end
+
+def fun_l11_n505(x)
+ if (x < 1)
+ fun_l12_n845(x)
+ else
+ fun_l12_n776(x)
+ end
+end
+
+def fun_l11_n506(x)
+ if (x < 1)
+ fun_l12_n533(x)
+ else
+ fun_l12_n6(x)
+ end
+end
+
+def fun_l11_n507(x)
+ if (x < 1)
+ fun_l12_n700(x)
+ else
+ fun_l12_n47(x)
+ end
+end
+
+def fun_l11_n508(x)
+ if (x < 1)
+ fun_l12_n449(x)
+ else
+ fun_l12_n261(x)
+ end
+end
+
+def fun_l11_n509(x)
+ if (x < 1)
+ fun_l12_n773(x)
+ else
+ fun_l12_n583(x)
+ end
+end
+
+def fun_l11_n510(x)
+ if (x < 1)
+ fun_l12_n252(x)
+ else
+ fun_l12_n215(x)
+ end
+end
+
+def fun_l11_n511(x)
+ if (x < 1)
+ fun_l12_n280(x)
+ else
+ fun_l12_n589(x)
+ end
+end
+
+def fun_l11_n512(x)
+ if (x < 1)
+ fun_l12_n796(x)
+ else
+ fun_l12_n803(x)
+ end
+end
+
+def fun_l11_n513(x)
+ if (x < 1)
+ fun_l12_n450(x)
+ else
+ fun_l12_n606(x)
+ end
+end
+
+def fun_l11_n514(x)
+ if (x < 1)
+ fun_l12_n509(x)
+ else
+ fun_l12_n521(x)
+ end
+end
+
+def fun_l11_n515(x)
+ if (x < 1)
+ fun_l12_n658(x)
+ else
+ fun_l12_n912(x)
+ end
+end
+
+def fun_l11_n516(x)
+ if (x < 1)
+ fun_l12_n181(x)
+ else
+ fun_l12_n724(x)
+ end
+end
+
+def fun_l11_n517(x)
+ if (x < 1)
+ fun_l12_n167(x)
+ else
+ fun_l12_n996(x)
+ end
+end
+
+def fun_l11_n518(x)
+ if (x < 1)
+ fun_l12_n654(x)
+ else
+ fun_l12_n67(x)
+ end
+end
+
+def fun_l11_n519(x)
+ if (x < 1)
+ fun_l12_n192(x)
+ else
+ fun_l12_n110(x)
+ end
+end
+
+def fun_l11_n520(x)
+ if (x < 1)
+ fun_l12_n271(x)
+ else
+ fun_l12_n74(x)
+ end
+end
+
+def fun_l11_n521(x)
+ if (x < 1)
+ fun_l12_n324(x)
+ else
+ fun_l12_n224(x)
+ end
+end
+
+def fun_l11_n522(x)
+ if (x < 1)
+ fun_l12_n535(x)
+ else
+ fun_l12_n537(x)
+ end
+end
+
+def fun_l11_n523(x)
+ if (x < 1)
+ fun_l12_n103(x)
+ else
+ fun_l12_n942(x)
+ end
+end
+
+def fun_l11_n524(x)
+ if (x < 1)
+ fun_l12_n755(x)
+ else
+ fun_l12_n431(x)
+ end
+end
+
+def fun_l11_n525(x)
+ if (x < 1)
+ fun_l12_n243(x)
+ else
+ fun_l12_n131(x)
+ end
+end
+
+def fun_l11_n526(x)
+ if (x < 1)
+ fun_l12_n270(x)
+ else
+ fun_l12_n747(x)
+ end
+end
+
+def fun_l11_n527(x)
+ if (x < 1)
+ fun_l12_n566(x)
+ else
+ fun_l12_n284(x)
+ end
+end
+
+def fun_l11_n528(x)
+ if (x < 1)
+ fun_l12_n510(x)
+ else
+ fun_l12_n928(x)
+ end
+end
+
+def fun_l11_n529(x)
+ if (x < 1)
+ fun_l12_n354(x)
+ else
+ fun_l12_n1(x)
+ end
+end
+
+def fun_l11_n530(x)
+ if (x < 1)
+ fun_l12_n271(x)
+ else
+ fun_l12_n875(x)
+ end
+end
+
+def fun_l11_n531(x)
+ if (x < 1)
+ fun_l12_n871(x)
+ else
+ fun_l12_n441(x)
+ end
+end
+
+def fun_l11_n532(x)
+ if (x < 1)
+ fun_l12_n727(x)
+ else
+ fun_l12_n903(x)
+ end
+end
+
+def fun_l11_n533(x)
+ if (x < 1)
+ fun_l12_n843(x)
+ else
+ fun_l12_n202(x)
+ end
+end
+
+def fun_l11_n534(x)
+ if (x < 1)
+ fun_l12_n798(x)
+ else
+ fun_l12_n309(x)
+ end
+end
+
+def fun_l11_n535(x)
+ if (x < 1)
+ fun_l12_n397(x)
+ else
+ fun_l12_n377(x)
+ end
+end
+
+def fun_l11_n536(x)
+ if (x < 1)
+ fun_l12_n441(x)
+ else
+ fun_l12_n253(x)
+ end
+end
+
+def fun_l11_n537(x)
+ if (x < 1)
+ fun_l12_n861(x)
+ else
+ fun_l12_n84(x)
+ end
+end
+
+def fun_l11_n538(x)
+ if (x < 1)
+ fun_l12_n268(x)
+ else
+ fun_l12_n627(x)
+ end
+end
+
+def fun_l11_n539(x)
+ if (x < 1)
+ fun_l12_n923(x)
+ else
+ fun_l12_n650(x)
+ end
+end
+
+def fun_l11_n540(x)
+ if (x < 1)
+ fun_l12_n503(x)
+ else
+ fun_l12_n598(x)
+ end
+end
+
+def fun_l11_n541(x)
+ if (x < 1)
+ fun_l12_n355(x)
+ else
+ fun_l12_n201(x)
+ end
+end
+
+def fun_l11_n542(x)
+ if (x < 1)
+ fun_l12_n956(x)
+ else
+ fun_l12_n789(x)
+ end
+end
+
+def fun_l11_n543(x)
+ if (x < 1)
+ fun_l12_n438(x)
+ else
+ fun_l12_n47(x)
+ end
+end
+
+def fun_l11_n544(x)
+ if (x < 1)
+ fun_l12_n425(x)
+ else
+ fun_l12_n109(x)
+ end
+end
+
+def fun_l11_n545(x)
+ if (x < 1)
+ fun_l12_n540(x)
+ else
+ fun_l12_n360(x)
+ end
+end
+
+def fun_l11_n546(x)
+ if (x < 1)
+ fun_l12_n228(x)
+ else
+ fun_l12_n270(x)
+ end
+end
+
+def fun_l11_n547(x)
+ if (x < 1)
+ fun_l12_n528(x)
+ else
+ fun_l12_n423(x)
+ end
+end
+
+def fun_l11_n548(x)
+ if (x < 1)
+ fun_l12_n656(x)
+ else
+ fun_l12_n269(x)
+ end
+end
+
+def fun_l11_n549(x)
+ if (x < 1)
+ fun_l12_n541(x)
+ else
+ fun_l12_n488(x)
+ end
+end
+
+def fun_l11_n550(x)
+ if (x < 1)
+ fun_l12_n240(x)
+ else
+ fun_l12_n990(x)
+ end
+end
+
+def fun_l11_n551(x)
+ if (x < 1)
+ fun_l12_n279(x)
+ else
+ fun_l12_n61(x)
+ end
+end
+
+def fun_l11_n552(x)
+ if (x < 1)
+ fun_l12_n996(x)
+ else
+ fun_l12_n738(x)
+ end
+end
+
+def fun_l11_n553(x)
+ if (x < 1)
+ fun_l12_n334(x)
+ else
+ fun_l12_n117(x)
+ end
+end
+
+def fun_l11_n554(x)
+ if (x < 1)
+ fun_l12_n943(x)
+ else
+ fun_l12_n754(x)
+ end
+end
+
+def fun_l11_n555(x)
+ if (x < 1)
+ fun_l12_n256(x)
+ else
+ fun_l12_n961(x)
+ end
+end
+
+def fun_l11_n556(x)
+ if (x < 1)
+ fun_l12_n530(x)
+ else
+ fun_l12_n378(x)
+ end
+end
+
+def fun_l11_n557(x)
+ if (x < 1)
+ fun_l12_n681(x)
+ else
+ fun_l12_n153(x)
+ end
+end
+
+def fun_l11_n558(x)
+ if (x < 1)
+ fun_l12_n145(x)
+ else
+ fun_l12_n951(x)
+ end
+end
+
+def fun_l11_n559(x)
+ if (x < 1)
+ fun_l12_n107(x)
+ else
+ fun_l12_n341(x)
+ end
+end
+
+def fun_l11_n560(x)
+ if (x < 1)
+ fun_l12_n570(x)
+ else
+ fun_l12_n152(x)
+ end
+end
+
+def fun_l11_n561(x)
+ if (x < 1)
+ fun_l12_n351(x)
+ else
+ fun_l12_n664(x)
+ end
+end
+
+def fun_l11_n562(x)
+ if (x < 1)
+ fun_l12_n825(x)
+ else
+ fun_l12_n226(x)
+ end
+end
+
+def fun_l11_n563(x)
+ if (x < 1)
+ fun_l12_n898(x)
+ else
+ fun_l12_n553(x)
+ end
+end
+
+def fun_l11_n564(x)
+ if (x < 1)
+ fun_l12_n122(x)
+ else
+ fun_l12_n618(x)
+ end
+end
+
+def fun_l11_n565(x)
+ if (x < 1)
+ fun_l12_n185(x)
+ else
+ fun_l12_n51(x)
+ end
+end
+
+def fun_l11_n566(x)
+ if (x < 1)
+ fun_l12_n359(x)
+ else
+ fun_l12_n67(x)
+ end
+end
+
+def fun_l11_n567(x)
+ if (x < 1)
+ fun_l12_n471(x)
+ else
+ fun_l12_n28(x)
+ end
+end
+
+def fun_l11_n568(x)
+ if (x < 1)
+ fun_l12_n195(x)
+ else
+ fun_l12_n104(x)
+ end
+end
+
+def fun_l11_n569(x)
+ if (x < 1)
+ fun_l12_n556(x)
+ else
+ fun_l12_n242(x)
+ end
+end
+
+def fun_l11_n570(x)
+ if (x < 1)
+ fun_l12_n203(x)
+ else
+ fun_l12_n204(x)
+ end
+end
+
+def fun_l11_n571(x)
+ if (x < 1)
+ fun_l12_n217(x)
+ else
+ fun_l12_n392(x)
+ end
+end
+
+def fun_l11_n572(x)
+ if (x < 1)
+ fun_l12_n223(x)
+ else
+ fun_l12_n176(x)
+ end
+end
+
+def fun_l11_n573(x)
+ if (x < 1)
+ fun_l12_n184(x)
+ else
+ fun_l12_n19(x)
+ end
+end
+
+def fun_l11_n574(x)
+ if (x < 1)
+ fun_l12_n799(x)
+ else
+ fun_l12_n652(x)
+ end
+end
+
+def fun_l11_n575(x)
+ if (x < 1)
+ fun_l12_n311(x)
+ else
+ fun_l12_n332(x)
+ end
+end
+
+def fun_l11_n576(x)
+ if (x < 1)
+ fun_l12_n928(x)
+ else
+ fun_l12_n584(x)
+ end
+end
+
+def fun_l11_n577(x)
+ if (x < 1)
+ fun_l12_n796(x)
+ else
+ fun_l12_n931(x)
+ end
+end
+
+def fun_l11_n578(x)
+ if (x < 1)
+ fun_l12_n991(x)
+ else
+ fun_l12_n985(x)
+ end
+end
+
+def fun_l11_n579(x)
+ if (x < 1)
+ fun_l12_n246(x)
+ else
+ fun_l12_n253(x)
+ end
+end
+
+def fun_l11_n580(x)
+ if (x < 1)
+ fun_l12_n492(x)
+ else
+ fun_l12_n239(x)
+ end
+end
+
+def fun_l11_n581(x)
+ if (x < 1)
+ fun_l12_n428(x)
+ else
+ fun_l12_n351(x)
+ end
+end
+
+def fun_l11_n582(x)
+ if (x < 1)
+ fun_l12_n184(x)
+ else
+ fun_l12_n37(x)
+ end
+end
+
+def fun_l11_n583(x)
+ if (x < 1)
+ fun_l12_n809(x)
+ else
+ fun_l12_n527(x)
+ end
+end
+
+def fun_l11_n584(x)
+ if (x < 1)
+ fun_l12_n661(x)
+ else
+ fun_l12_n539(x)
+ end
+end
+
+def fun_l11_n585(x)
+ if (x < 1)
+ fun_l12_n696(x)
+ else
+ fun_l12_n190(x)
+ end
+end
+
+def fun_l11_n586(x)
+ if (x < 1)
+ fun_l12_n178(x)
+ else
+ fun_l12_n301(x)
+ end
+end
+
+def fun_l11_n587(x)
+ if (x < 1)
+ fun_l12_n316(x)
+ else
+ fun_l12_n731(x)
+ end
+end
+
+def fun_l11_n588(x)
+ if (x < 1)
+ fun_l12_n502(x)
+ else
+ fun_l12_n776(x)
+ end
+end
+
+def fun_l11_n589(x)
+ if (x < 1)
+ fun_l12_n273(x)
+ else
+ fun_l12_n268(x)
+ end
+end
+
+def fun_l11_n590(x)
+ if (x < 1)
+ fun_l12_n623(x)
+ else
+ fun_l12_n622(x)
+ end
+end
+
+def fun_l11_n591(x)
+ if (x < 1)
+ fun_l12_n359(x)
+ else
+ fun_l12_n694(x)
+ end
+end
+
+def fun_l11_n592(x)
+ if (x < 1)
+ fun_l12_n71(x)
+ else
+ fun_l12_n984(x)
+ end
+end
+
+def fun_l11_n593(x)
+ if (x < 1)
+ fun_l12_n790(x)
+ else
+ fun_l12_n547(x)
+ end
+end
+
+def fun_l11_n594(x)
+ if (x < 1)
+ fun_l12_n313(x)
+ else
+ fun_l12_n526(x)
+ end
+end
+
+def fun_l11_n595(x)
+ if (x < 1)
+ fun_l12_n239(x)
+ else
+ fun_l12_n821(x)
+ end
+end
+
+def fun_l11_n596(x)
+ if (x < 1)
+ fun_l12_n36(x)
+ else
+ fun_l12_n141(x)
+ end
+end
+
+def fun_l11_n597(x)
+ if (x < 1)
+ fun_l12_n450(x)
+ else
+ fun_l12_n65(x)
+ end
+end
+
+def fun_l11_n598(x)
+ if (x < 1)
+ fun_l12_n226(x)
+ else
+ fun_l12_n490(x)
+ end
+end
+
+def fun_l11_n599(x)
+ if (x < 1)
+ fun_l12_n716(x)
+ else
+ fun_l12_n7(x)
+ end
+end
+
+def fun_l11_n600(x)
+ if (x < 1)
+ fun_l12_n694(x)
+ else
+ fun_l12_n663(x)
+ end
+end
+
+def fun_l11_n601(x)
+ if (x < 1)
+ fun_l12_n690(x)
+ else
+ fun_l12_n256(x)
+ end
+end
+
+def fun_l11_n602(x)
+ if (x < 1)
+ fun_l12_n251(x)
+ else
+ fun_l12_n177(x)
+ end
+end
+
+def fun_l11_n603(x)
+ if (x < 1)
+ fun_l12_n659(x)
+ else
+ fun_l12_n732(x)
+ end
+end
+
+def fun_l11_n604(x)
+ if (x < 1)
+ fun_l12_n440(x)
+ else
+ fun_l12_n334(x)
+ end
+end
+
+def fun_l11_n605(x)
+ if (x < 1)
+ fun_l12_n396(x)
+ else
+ fun_l12_n931(x)
+ end
+end
+
+def fun_l11_n606(x)
+ if (x < 1)
+ fun_l12_n687(x)
+ else
+ fun_l12_n88(x)
+ end
+end
+
+def fun_l11_n607(x)
+ if (x < 1)
+ fun_l12_n647(x)
+ else
+ fun_l12_n799(x)
+ end
+end
+
+def fun_l11_n608(x)
+ if (x < 1)
+ fun_l12_n383(x)
+ else
+ fun_l12_n889(x)
+ end
+end
+
+def fun_l11_n609(x)
+ if (x < 1)
+ fun_l12_n174(x)
+ else
+ fun_l12_n121(x)
+ end
+end
+
+def fun_l11_n610(x)
+ if (x < 1)
+ fun_l12_n818(x)
+ else
+ fun_l12_n835(x)
+ end
+end
+
+def fun_l11_n611(x)
+ if (x < 1)
+ fun_l12_n684(x)
+ else
+ fun_l12_n625(x)
+ end
+end
+
+def fun_l11_n612(x)
+ if (x < 1)
+ fun_l12_n961(x)
+ else
+ fun_l12_n711(x)
+ end
+end
+
+def fun_l11_n613(x)
+ if (x < 1)
+ fun_l12_n15(x)
+ else
+ fun_l12_n542(x)
+ end
+end
+
+def fun_l11_n614(x)
+ if (x < 1)
+ fun_l12_n378(x)
+ else
+ fun_l12_n809(x)
+ end
+end
+
+def fun_l11_n615(x)
+ if (x < 1)
+ fun_l12_n970(x)
+ else
+ fun_l12_n283(x)
+ end
+end
+
+def fun_l11_n616(x)
+ if (x < 1)
+ fun_l12_n391(x)
+ else
+ fun_l12_n949(x)
+ end
+end
+
+def fun_l11_n617(x)
+ if (x < 1)
+ fun_l12_n135(x)
+ else
+ fun_l12_n29(x)
+ end
+end
+
+def fun_l11_n618(x)
+ if (x < 1)
+ fun_l12_n449(x)
+ else
+ fun_l12_n834(x)
+ end
+end
+
+def fun_l11_n619(x)
+ if (x < 1)
+ fun_l12_n555(x)
+ else
+ fun_l12_n464(x)
+ end
+end
+
+def fun_l11_n620(x)
+ if (x < 1)
+ fun_l12_n414(x)
+ else
+ fun_l12_n632(x)
+ end
+end
+
+def fun_l11_n621(x)
+ if (x < 1)
+ fun_l12_n964(x)
+ else
+ fun_l12_n311(x)
+ end
+end
+
+def fun_l11_n622(x)
+ if (x < 1)
+ fun_l12_n184(x)
+ else
+ fun_l12_n499(x)
+ end
+end
+
+def fun_l11_n623(x)
+ if (x < 1)
+ fun_l12_n441(x)
+ else
+ fun_l12_n124(x)
+ end
+end
+
+def fun_l11_n624(x)
+ if (x < 1)
+ fun_l12_n884(x)
+ else
+ fun_l12_n484(x)
+ end
+end
+
+def fun_l11_n625(x)
+ if (x < 1)
+ fun_l12_n878(x)
+ else
+ fun_l12_n646(x)
+ end
+end
+
+def fun_l11_n626(x)
+ if (x < 1)
+ fun_l12_n918(x)
+ else
+ fun_l12_n481(x)
+ end
+end
+
+def fun_l11_n627(x)
+ if (x < 1)
+ fun_l12_n162(x)
+ else
+ fun_l12_n197(x)
+ end
+end
+
+def fun_l11_n628(x)
+ if (x < 1)
+ fun_l12_n852(x)
+ else
+ fun_l12_n874(x)
+ end
+end
+
+def fun_l11_n629(x)
+ if (x < 1)
+ fun_l12_n654(x)
+ else
+ fun_l12_n709(x)
+ end
+end
+
+def fun_l11_n630(x)
+ if (x < 1)
+ fun_l12_n819(x)
+ else
+ fun_l12_n325(x)
+ end
+end
+
+def fun_l11_n631(x)
+ if (x < 1)
+ fun_l12_n776(x)
+ else
+ fun_l12_n621(x)
+ end
+end
+
+def fun_l11_n632(x)
+ if (x < 1)
+ fun_l12_n648(x)
+ else
+ fun_l12_n53(x)
+ end
+end
+
+def fun_l11_n633(x)
+ if (x < 1)
+ fun_l12_n182(x)
+ else
+ fun_l12_n267(x)
+ end
+end
+
+def fun_l11_n634(x)
+ if (x < 1)
+ fun_l12_n17(x)
+ else
+ fun_l12_n415(x)
+ end
+end
+
+def fun_l11_n635(x)
+ if (x < 1)
+ fun_l12_n123(x)
+ else
+ fun_l12_n862(x)
+ end
+end
+
+def fun_l11_n636(x)
+ if (x < 1)
+ fun_l12_n594(x)
+ else
+ fun_l12_n878(x)
+ end
+end
+
+def fun_l11_n637(x)
+ if (x < 1)
+ fun_l12_n913(x)
+ else
+ fun_l12_n245(x)
+ end
+end
+
+def fun_l11_n638(x)
+ if (x < 1)
+ fun_l12_n976(x)
+ else
+ fun_l12_n19(x)
+ end
+end
+
+def fun_l11_n639(x)
+ if (x < 1)
+ fun_l12_n490(x)
+ else
+ fun_l12_n999(x)
+ end
+end
+
+def fun_l11_n640(x)
+ if (x < 1)
+ fun_l12_n345(x)
+ else
+ fun_l12_n585(x)
+ end
+end
+
+def fun_l11_n641(x)
+ if (x < 1)
+ fun_l12_n245(x)
+ else
+ fun_l12_n566(x)
+ end
+end
+
+def fun_l11_n642(x)
+ if (x < 1)
+ fun_l12_n680(x)
+ else
+ fun_l12_n77(x)
+ end
+end
+
+def fun_l11_n643(x)
+ if (x < 1)
+ fun_l12_n330(x)
+ else
+ fun_l12_n268(x)
+ end
+end
+
+def fun_l11_n644(x)
+ if (x < 1)
+ fun_l12_n651(x)
+ else
+ fun_l12_n386(x)
+ end
+end
+
+def fun_l11_n645(x)
+ if (x < 1)
+ fun_l12_n276(x)
+ else
+ fun_l12_n471(x)
+ end
+end
+
+def fun_l11_n646(x)
+ if (x < 1)
+ fun_l12_n784(x)
+ else
+ fun_l12_n892(x)
+ end
+end
+
+def fun_l11_n647(x)
+ if (x < 1)
+ fun_l12_n963(x)
+ else
+ fun_l12_n864(x)
+ end
+end
+
+def fun_l11_n648(x)
+ if (x < 1)
+ fun_l12_n58(x)
+ else
+ fun_l12_n252(x)
+ end
+end
+
+def fun_l11_n649(x)
+ if (x < 1)
+ fun_l12_n321(x)
+ else
+ fun_l12_n593(x)
+ end
+end
+
+def fun_l11_n650(x)
+ if (x < 1)
+ fun_l12_n598(x)
+ else
+ fun_l12_n54(x)
+ end
+end
+
+def fun_l11_n651(x)
+ if (x < 1)
+ fun_l12_n201(x)
+ else
+ fun_l12_n760(x)
+ end
+end
+
+def fun_l11_n652(x)
+ if (x < 1)
+ fun_l12_n880(x)
+ else
+ fun_l12_n841(x)
+ end
+end
+
+def fun_l11_n653(x)
+ if (x < 1)
+ fun_l12_n61(x)
+ else
+ fun_l12_n403(x)
+ end
+end
+
+def fun_l11_n654(x)
+ if (x < 1)
+ fun_l12_n114(x)
+ else
+ fun_l12_n768(x)
+ end
+end
+
+def fun_l11_n655(x)
+ if (x < 1)
+ fun_l12_n511(x)
+ else
+ fun_l12_n521(x)
+ end
+end
+
+def fun_l11_n656(x)
+ if (x < 1)
+ fun_l12_n27(x)
+ else
+ fun_l12_n490(x)
+ end
+end
+
+def fun_l11_n657(x)
+ if (x < 1)
+ fun_l12_n217(x)
+ else
+ fun_l12_n547(x)
+ end
+end
+
+def fun_l11_n658(x)
+ if (x < 1)
+ fun_l12_n549(x)
+ else
+ fun_l12_n823(x)
+ end
+end
+
+def fun_l11_n659(x)
+ if (x < 1)
+ fun_l12_n327(x)
+ else
+ fun_l12_n529(x)
+ end
+end
+
+def fun_l11_n660(x)
+ if (x < 1)
+ fun_l12_n395(x)
+ else
+ fun_l12_n797(x)
+ end
+end
+
+def fun_l11_n661(x)
+ if (x < 1)
+ fun_l12_n867(x)
+ else
+ fun_l12_n142(x)
+ end
+end
+
+def fun_l11_n662(x)
+ if (x < 1)
+ fun_l12_n818(x)
+ else
+ fun_l12_n311(x)
+ end
+end
+
+def fun_l11_n663(x)
+ if (x < 1)
+ fun_l12_n628(x)
+ else
+ fun_l12_n798(x)
+ end
+end
+
+def fun_l11_n664(x)
+ if (x < 1)
+ fun_l12_n260(x)
+ else
+ fun_l12_n607(x)
+ end
+end
+
+def fun_l11_n665(x)
+ if (x < 1)
+ fun_l12_n911(x)
+ else
+ fun_l12_n487(x)
+ end
+end
+
+def fun_l11_n666(x)
+ if (x < 1)
+ fun_l12_n340(x)
+ else
+ fun_l12_n23(x)
+ end
+end
+
+def fun_l11_n667(x)
+ if (x < 1)
+ fun_l12_n744(x)
+ else
+ fun_l12_n874(x)
+ end
+end
+
+def fun_l11_n668(x)
+ if (x < 1)
+ fun_l12_n53(x)
+ else
+ fun_l12_n203(x)
+ end
+end
+
+def fun_l11_n669(x)
+ if (x < 1)
+ fun_l12_n775(x)
+ else
+ fun_l12_n963(x)
+ end
+end
+
+def fun_l11_n670(x)
+ if (x < 1)
+ fun_l12_n922(x)
+ else
+ fun_l12_n0(x)
+ end
+end
+
+def fun_l11_n671(x)
+ if (x < 1)
+ fun_l12_n23(x)
+ else
+ fun_l12_n798(x)
+ end
+end
+
+def fun_l11_n672(x)
+ if (x < 1)
+ fun_l12_n453(x)
+ else
+ fun_l12_n667(x)
+ end
+end
+
+def fun_l11_n673(x)
+ if (x < 1)
+ fun_l12_n991(x)
+ else
+ fun_l12_n350(x)
+ end
+end
+
+def fun_l11_n674(x)
+ if (x < 1)
+ fun_l12_n865(x)
+ else
+ fun_l12_n95(x)
+ end
+end
+
+def fun_l11_n675(x)
+ if (x < 1)
+ fun_l12_n404(x)
+ else
+ fun_l12_n714(x)
+ end
+end
+
+def fun_l11_n676(x)
+ if (x < 1)
+ fun_l12_n576(x)
+ else
+ fun_l12_n162(x)
+ end
+end
+
+def fun_l11_n677(x)
+ if (x < 1)
+ fun_l12_n530(x)
+ else
+ fun_l12_n453(x)
+ end
+end
+
+def fun_l11_n678(x)
+ if (x < 1)
+ fun_l12_n127(x)
+ else
+ fun_l12_n224(x)
+ end
+end
+
+def fun_l11_n679(x)
+ if (x < 1)
+ fun_l12_n658(x)
+ else
+ fun_l12_n11(x)
+ end
+end
+
+def fun_l11_n680(x)
+ if (x < 1)
+ fun_l12_n778(x)
+ else
+ fun_l12_n202(x)
+ end
+end
+
+def fun_l11_n681(x)
+ if (x < 1)
+ fun_l12_n745(x)
+ else
+ fun_l12_n690(x)
+ end
+end
+
+def fun_l11_n682(x)
+ if (x < 1)
+ fun_l12_n920(x)
+ else
+ fun_l12_n54(x)
+ end
+end
+
+def fun_l11_n683(x)
+ if (x < 1)
+ fun_l12_n726(x)
+ else
+ fun_l12_n466(x)
+ end
+end
+
+def fun_l11_n684(x)
+ if (x < 1)
+ fun_l12_n709(x)
+ else
+ fun_l12_n287(x)
+ end
+end
+
+def fun_l11_n685(x)
+ if (x < 1)
+ fun_l12_n304(x)
+ else
+ fun_l12_n617(x)
+ end
+end
+
+def fun_l11_n686(x)
+ if (x < 1)
+ fun_l12_n834(x)
+ else
+ fun_l12_n240(x)
+ end
+end
+
+def fun_l11_n687(x)
+ if (x < 1)
+ fun_l12_n406(x)
+ else
+ fun_l12_n588(x)
+ end
+end
+
+def fun_l11_n688(x)
+ if (x < 1)
+ fun_l12_n308(x)
+ else
+ fun_l12_n790(x)
+ end
+end
+
+def fun_l11_n689(x)
+ if (x < 1)
+ fun_l12_n969(x)
+ else
+ fun_l12_n249(x)
+ end
+end
+
+def fun_l11_n690(x)
+ if (x < 1)
+ fun_l12_n760(x)
+ else
+ fun_l12_n807(x)
+ end
+end
+
+def fun_l11_n691(x)
+ if (x < 1)
+ fun_l12_n417(x)
+ else
+ fun_l12_n645(x)
+ end
+end
+
+def fun_l11_n692(x)
+ if (x < 1)
+ fun_l12_n722(x)
+ else
+ fun_l12_n614(x)
+ end
+end
+
+def fun_l11_n693(x)
+ if (x < 1)
+ fun_l12_n19(x)
+ else
+ fun_l12_n497(x)
+ end
+end
+
+def fun_l11_n694(x)
+ if (x < 1)
+ fun_l12_n580(x)
+ else
+ fun_l12_n76(x)
+ end
+end
+
+def fun_l11_n695(x)
+ if (x < 1)
+ fun_l12_n527(x)
+ else
+ fun_l12_n819(x)
+ end
+end
+
+def fun_l11_n696(x)
+ if (x < 1)
+ fun_l12_n71(x)
+ else
+ fun_l12_n906(x)
+ end
+end
+
+def fun_l11_n697(x)
+ if (x < 1)
+ fun_l12_n95(x)
+ else
+ fun_l12_n743(x)
+ end
+end
+
+def fun_l11_n698(x)
+ if (x < 1)
+ fun_l12_n544(x)
+ else
+ fun_l12_n265(x)
+ end
+end
+
+def fun_l11_n699(x)
+ if (x < 1)
+ fun_l12_n833(x)
+ else
+ fun_l12_n210(x)
+ end
+end
+
+def fun_l11_n700(x)
+ if (x < 1)
+ fun_l12_n865(x)
+ else
+ fun_l12_n318(x)
+ end
+end
+
+def fun_l11_n701(x)
+ if (x < 1)
+ fun_l12_n88(x)
+ else
+ fun_l12_n120(x)
+ end
+end
+
+def fun_l11_n702(x)
+ if (x < 1)
+ fun_l12_n165(x)
+ else
+ fun_l12_n671(x)
+ end
+end
+
+def fun_l11_n703(x)
+ if (x < 1)
+ fun_l12_n607(x)
+ else
+ fun_l12_n730(x)
+ end
+end
+
+def fun_l11_n704(x)
+ if (x < 1)
+ fun_l12_n690(x)
+ else
+ fun_l12_n553(x)
+ end
+end
+
+def fun_l11_n705(x)
+ if (x < 1)
+ fun_l12_n826(x)
+ else
+ fun_l12_n665(x)
+ end
+end
+
+def fun_l11_n706(x)
+ if (x < 1)
+ fun_l12_n125(x)
+ else
+ fun_l12_n167(x)
+ end
+end
+
+def fun_l11_n707(x)
+ if (x < 1)
+ fun_l12_n961(x)
+ else
+ fun_l12_n73(x)
+ end
+end
+
+def fun_l11_n708(x)
+ if (x < 1)
+ fun_l12_n446(x)
+ else
+ fun_l12_n373(x)
+ end
+end
+
+def fun_l11_n709(x)
+ if (x < 1)
+ fun_l12_n199(x)
+ else
+ fun_l12_n803(x)
+ end
+end
+
+def fun_l11_n710(x)
+ if (x < 1)
+ fun_l12_n960(x)
+ else
+ fun_l12_n996(x)
+ end
+end
+
+def fun_l11_n711(x)
+ if (x < 1)
+ fun_l12_n602(x)
+ else
+ fun_l12_n896(x)
+ end
+end
+
+def fun_l11_n712(x)
+ if (x < 1)
+ fun_l12_n198(x)
+ else
+ fun_l12_n857(x)
+ end
+end
+
+def fun_l11_n713(x)
+ if (x < 1)
+ fun_l12_n19(x)
+ else
+ fun_l12_n938(x)
+ end
+end
+
+def fun_l11_n714(x)
+ if (x < 1)
+ fun_l12_n530(x)
+ else
+ fun_l12_n432(x)
+ end
+end
+
+def fun_l11_n715(x)
+ if (x < 1)
+ fun_l12_n99(x)
+ else
+ fun_l12_n382(x)
+ end
+end
+
+def fun_l11_n716(x)
+ if (x < 1)
+ fun_l12_n623(x)
+ else
+ fun_l12_n461(x)
+ end
+end
+
+def fun_l11_n717(x)
+ if (x < 1)
+ fun_l12_n658(x)
+ else
+ fun_l12_n432(x)
+ end
+end
+
+def fun_l11_n718(x)
+ if (x < 1)
+ fun_l12_n17(x)
+ else
+ fun_l12_n83(x)
+ end
+end
+
+def fun_l11_n719(x)
+ if (x < 1)
+ fun_l12_n439(x)
+ else
+ fun_l12_n747(x)
+ end
+end
+
+def fun_l11_n720(x)
+ if (x < 1)
+ fun_l12_n259(x)
+ else
+ fun_l12_n80(x)
+ end
+end
+
+def fun_l11_n721(x)
+ if (x < 1)
+ fun_l12_n749(x)
+ else
+ fun_l12_n108(x)
+ end
+end
+
+def fun_l11_n722(x)
+ if (x < 1)
+ fun_l12_n20(x)
+ else
+ fun_l12_n391(x)
+ end
+end
+
+def fun_l11_n723(x)
+ if (x < 1)
+ fun_l12_n181(x)
+ else
+ fun_l12_n204(x)
+ end
+end
+
+def fun_l11_n724(x)
+ if (x < 1)
+ fun_l12_n426(x)
+ else
+ fun_l12_n109(x)
+ end
+end
+
+def fun_l11_n725(x)
+ if (x < 1)
+ fun_l12_n436(x)
+ else
+ fun_l12_n754(x)
+ end
+end
+
+def fun_l11_n726(x)
+ if (x < 1)
+ fun_l12_n496(x)
+ else
+ fun_l12_n265(x)
+ end
+end
+
+def fun_l11_n727(x)
+ if (x < 1)
+ fun_l12_n58(x)
+ else
+ fun_l12_n982(x)
+ end
+end
+
+def fun_l11_n728(x)
+ if (x < 1)
+ fun_l12_n236(x)
+ else
+ fun_l12_n152(x)
+ end
+end
+
+def fun_l11_n729(x)
+ if (x < 1)
+ fun_l12_n818(x)
+ else
+ fun_l12_n95(x)
+ end
+end
+
+def fun_l11_n730(x)
+ if (x < 1)
+ fun_l12_n696(x)
+ else
+ fun_l12_n263(x)
+ end
+end
+
+def fun_l11_n731(x)
+ if (x < 1)
+ fun_l12_n539(x)
+ else
+ fun_l12_n774(x)
+ end
+end
+
+def fun_l11_n732(x)
+ if (x < 1)
+ fun_l12_n788(x)
+ else
+ fun_l12_n454(x)
+ end
+end
+
+def fun_l11_n733(x)
+ if (x < 1)
+ fun_l12_n131(x)
+ else
+ fun_l12_n877(x)
+ end
+end
+
+def fun_l11_n734(x)
+ if (x < 1)
+ fun_l12_n449(x)
+ else
+ fun_l12_n222(x)
+ end
+end
+
+def fun_l11_n735(x)
+ if (x < 1)
+ fun_l12_n71(x)
+ else
+ fun_l12_n467(x)
+ end
+end
+
+def fun_l11_n736(x)
+ if (x < 1)
+ fun_l12_n220(x)
+ else
+ fun_l12_n214(x)
+ end
+end
+
+def fun_l11_n737(x)
+ if (x < 1)
+ fun_l12_n537(x)
+ else
+ fun_l12_n173(x)
+ end
+end
+
+def fun_l11_n738(x)
+ if (x < 1)
+ fun_l12_n897(x)
+ else
+ fun_l12_n515(x)
+ end
+end
+
+def fun_l11_n739(x)
+ if (x < 1)
+ fun_l12_n724(x)
+ else
+ fun_l12_n48(x)
+ end
+end
+
+def fun_l11_n740(x)
+ if (x < 1)
+ fun_l12_n61(x)
+ else
+ fun_l12_n963(x)
+ end
+end
+
+def fun_l11_n741(x)
+ if (x < 1)
+ fun_l12_n40(x)
+ else
+ fun_l12_n553(x)
+ end
+end
+
+def fun_l11_n742(x)
+ if (x < 1)
+ fun_l12_n361(x)
+ else
+ fun_l12_n975(x)
+ end
+end
+
+def fun_l11_n743(x)
+ if (x < 1)
+ fun_l12_n306(x)
+ else
+ fun_l12_n982(x)
+ end
+end
+
+def fun_l11_n744(x)
+ if (x < 1)
+ fun_l12_n951(x)
+ else
+ fun_l12_n590(x)
+ end
+end
+
+def fun_l11_n745(x)
+ if (x < 1)
+ fun_l12_n224(x)
+ else
+ fun_l12_n409(x)
+ end
+end
+
+def fun_l11_n746(x)
+ if (x < 1)
+ fun_l12_n24(x)
+ else
+ fun_l12_n249(x)
+ end
+end
+
+def fun_l11_n747(x)
+ if (x < 1)
+ fun_l12_n533(x)
+ else
+ fun_l12_n543(x)
+ end
+end
+
+def fun_l11_n748(x)
+ if (x < 1)
+ fun_l12_n616(x)
+ else
+ fun_l12_n63(x)
+ end
+end
+
+def fun_l11_n749(x)
+ if (x < 1)
+ fun_l12_n365(x)
+ else
+ fun_l12_n335(x)
+ end
+end
+
+def fun_l11_n750(x)
+ if (x < 1)
+ fun_l12_n134(x)
+ else
+ fun_l12_n363(x)
+ end
+end
+
+def fun_l11_n751(x)
+ if (x < 1)
+ fun_l12_n413(x)
+ else
+ fun_l12_n582(x)
+ end
+end
+
+def fun_l11_n752(x)
+ if (x < 1)
+ fun_l12_n987(x)
+ else
+ fun_l12_n948(x)
+ end
+end
+
+def fun_l11_n753(x)
+ if (x < 1)
+ fun_l12_n696(x)
+ else
+ fun_l12_n374(x)
+ end
+end
+
+def fun_l11_n754(x)
+ if (x < 1)
+ fun_l12_n730(x)
+ else
+ fun_l12_n345(x)
+ end
+end
+
+def fun_l11_n755(x)
+ if (x < 1)
+ fun_l12_n857(x)
+ else
+ fun_l12_n441(x)
+ end
+end
+
+def fun_l11_n756(x)
+ if (x < 1)
+ fun_l12_n711(x)
+ else
+ fun_l12_n39(x)
+ end
+end
+
+def fun_l11_n757(x)
+ if (x < 1)
+ fun_l12_n946(x)
+ else
+ fun_l12_n657(x)
+ end
+end
+
+def fun_l11_n758(x)
+ if (x < 1)
+ fun_l12_n470(x)
+ else
+ fun_l12_n650(x)
+ end
+end
+
+def fun_l11_n759(x)
+ if (x < 1)
+ fun_l12_n119(x)
+ else
+ fun_l12_n479(x)
+ end
+end
+
+def fun_l11_n760(x)
+ if (x < 1)
+ fun_l12_n429(x)
+ else
+ fun_l12_n922(x)
+ end
+end
+
+def fun_l11_n761(x)
+ if (x < 1)
+ fun_l12_n13(x)
+ else
+ fun_l12_n134(x)
+ end
+end
+
+def fun_l11_n762(x)
+ if (x < 1)
+ fun_l12_n797(x)
+ else
+ fun_l12_n223(x)
+ end
+end
+
+def fun_l11_n763(x)
+ if (x < 1)
+ fun_l12_n945(x)
+ else
+ fun_l12_n197(x)
+ end
+end
+
+def fun_l11_n764(x)
+ if (x < 1)
+ fun_l12_n612(x)
+ else
+ fun_l12_n773(x)
+ end
+end
+
+def fun_l11_n765(x)
+ if (x < 1)
+ fun_l12_n478(x)
+ else
+ fun_l12_n972(x)
+ end
+end
+
+def fun_l11_n766(x)
+ if (x < 1)
+ fun_l12_n946(x)
+ else
+ fun_l12_n9(x)
+ end
+end
+
+def fun_l11_n767(x)
+ if (x < 1)
+ fun_l12_n247(x)
+ else
+ fun_l12_n730(x)
+ end
+end
+
+def fun_l11_n768(x)
+ if (x < 1)
+ fun_l12_n223(x)
+ else
+ fun_l12_n986(x)
+ end
+end
+
+def fun_l11_n769(x)
+ if (x < 1)
+ fun_l12_n676(x)
+ else
+ fun_l12_n527(x)
+ end
+end
+
+def fun_l11_n770(x)
+ if (x < 1)
+ fun_l12_n112(x)
+ else
+ fun_l12_n660(x)
+ end
+end
+
+def fun_l11_n771(x)
+ if (x < 1)
+ fun_l12_n457(x)
+ else
+ fun_l12_n733(x)
+ end
+end
+
+def fun_l11_n772(x)
+ if (x < 1)
+ fun_l12_n633(x)
+ else
+ fun_l12_n449(x)
+ end
+end
+
+def fun_l11_n773(x)
+ if (x < 1)
+ fun_l12_n910(x)
+ else
+ fun_l12_n329(x)
+ end
+end
+
+def fun_l11_n774(x)
+ if (x < 1)
+ fun_l12_n354(x)
+ else
+ fun_l12_n233(x)
+ end
+end
+
+def fun_l11_n775(x)
+ if (x < 1)
+ fun_l12_n887(x)
+ else
+ fun_l12_n100(x)
+ end
+end
+
+def fun_l11_n776(x)
+ if (x < 1)
+ fun_l12_n65(x)
+ else
+ fun_l12_n199(x)
+ end
+end
+
+def fun_l11_n777(x)
+ if (x < 1)
+ fun_l12_n978(x)
+ else
+ fun_l12_n364(x)
+ end
+end
+
+def fun_l11_n778(x)
+ if (x < 1)
+ fun_l12_n502(x)
+ else
+ fun_l12_n90(x)
+ end
+end
+
+def fun_l11_n779(x)
+ if (x < 1)
+ fun_l12_n37(x)
+ else
+ fun_l12_n668(x)
+ end
+end
+
+def fun_l11_n780(x)
+ if (x < 1)
+ fun_l12_n80(x)
+ else
+ fun_l12_n603(x)
+ end
+end
+
+def fun_l11_n781(x)
+ if (x < 1)
+ fun_l12_n435(x)
+ else
+ fun_l12_n583(x)
+ end
+end
+
+def fun_l11_n782(x)
+ if (x < 1)
+ fun_l12_n899(x)
+ else
+ fun_l12_n863(x)
+ end
+end
+
+def fun_l11_n783(x)
+ if (x < 1)
+ fun_l12_n414(x)
+ else
+ fun_l12_n96(x)
+ end
+end
+
+def fun_l11_n784(x)
+ if (x < 1)
+ fun_l12_n286(x)
+ else
+ fun_l12_n126(x)
+ end
+end
+
+def fun_l11_n785(x)
+ if (x < 1)
+ fun_l12_n444(x)
+ else
+ fun_l12_n344(x)
+ end
+end
+
+def fun_l11_n786(x)
+ if (x < 1)
+ fun_l12_n484(x)
+ else
+ fun_l12_n469(x)
+ end
+end
+
+def fun_l11_n787(x)
+ if (x < 1)
+ fun_l12_n686(x)
+ else
+ fun_l12_n728(x)
+ end
+end
+
+def fun_l11_n788(x)
+ if (x < 1)
+ fun_l12_n938(x)
+ else
+ fun_l12_n70(x)
+ end
+end
+
+def fun_l11_n789(x)
+ if (x < 1)
+ fun_l12_n958(x)
+ else
+ fun_l12_n633(x)
+ end
+end
+
+def fun_l11_n790(x)
+ if (x < 1)
+ fun_l12_n984(x)
+ else
+ fun_l12_n39(x)
+ end
+end
+
+def fun_l11_n791(x)
+ if (x < 1)
+ fun_l12_n877(x)
+ else
+ fun_l12_n721(x)
+ end
+end
+
+def fun_l11_n792(x)
+ if (x < 1)
+ fun_l12_n710(x)
+ else
+ fun_l12_n840(x)
+ end
+end
+
+def fun_l11_n793(x)
+ if (x < 1)
+ fun_l12_n955(x)
+ else
+ fun_l12_n774(x)
+ end
+end
+
+def fun_l11_n794(x)
+ if (x < 1)
+ fun_l12_n816(x)
+ else
+ fun_l12_n859(x)
+ end
+end
+
+def fun_l11_n795(x)
+ if (x < 1)
+ fun_l12_n722(x)
+ else
+ fun_l12_n700(x)
+ end
+end
+
+def fun_l11_n796(x)
+ if (x < 1)
+ fun_l12_n508(x)
+ else
+ fun_l12_n617(x)
+ end
+end
+
+def fun_l11_n797(x)
+ if (x < 1)
+ fun_l12_n382(x)
+ else
+ fun_l12_n1(x)
+ end
+end
+
+def fun_l11_n798(x)
+ if (x < 1)
+ fun_l12_n857(x)
+ else
+ fun_l12_n141(x)
+ end
+end
+
+def fun_l11_n799(x)
+ if (x < 1)
+ fun_l12_n711(x)
+ else
+ fun_l12_n842(x)
+ end
+end
+
+def fun_l11_n800(x)
+ if (x < 1)
+ fun_l12_n588(x)
+ else
+ fun_l12_n511(x)
+ end
+end
+
+def fun_l11_n801(x)
+ if (x < 1)
+ fun_l12_n114(x)
+ else
+ fun_l12_n516(x)
+ end
+end
+
+def fun_l11_n802(x)
+ if (x < 1)
+ fun_l12_n792(x)
+ else
+ fun_l12_n128(x)
+ end
+end
+
+def fun_l11_n803(x)
+ if (x < 1)
+ fun_l12_n833(x)
+ else
+ fun_l12_n444(x)
+ end
+end
+
+def fun_l11_n804(x)
+ if (x < 1)
+ fun_l12_n564(x)
+ else
+ fun_l12_n129(x)
+ end
+end
+
+def fun_l11_n805(x)
+ if (x < 1)
+ fun_l12_n234(x)
+ else
+ fun_l12_n429(x)
+ end
+end
+
+def fun_l11_n806(x)
+ if (x < 1)
+ fun_l12_n841(x)
+ else
+ fun_l12_n705(x)
+ end
+end
+
+def fun_l11_n807(x)
+ if (x < 1)
+ fun_l12_n72(x)
+ else
+ fun_l12_n87(x)
+ end
+end
+
+def fun_l11_n808(x)
+ if (x < 1)
+ fun_l12_n131(x)
+ else
+ fun_l12_n27(x)
+ end
+end
+
+def fun_l11_n809(x)
+ if (x < 1)
+ fun_l12_n136(x)
+ else
+ fun_l12_n84(x)
+ end
+end
+
+def fun_l11_n810(x)
+ if (x < 1)
+ fun_l12_n464(x)
+ else
+ fun_l12_n411(x)
+ end
+end
+
+def fun_l11_n811(x)
+ if (x < 1)
+ fun_l12_n939(x)
+ else
+ fun_l12_n584(x)
+ end
+end
+
+def fun_l11_n812(x)
+ if (x < 1)
+ fun_l12_n24(x)
+ else
+ fun_l12_n593(x)
+ end
+end
+
+def fun_l11_n813(x)
+ if (x < 1)
+ fun_l12_n980(x)
+ else
+ fun_l12_n318(x)
+ end
+end
+
+def fun_l11_n814(x)
+ if (x < 1)
+ fun_l12_n73(x)
+ else
+ fun_l12_n431(x)
+ end
+end
+
+def fun_l11_n815(x)
+ if (x < 1)
+ fun_l12_n938(x)
+ else
+ fun_l12_n794(x)
+ end
+end
+
+def fun_l11_n816(x)
+ if (x < 1)
+ fun_l12_n305(x)
+ else
+ fun_l12_n620(x)
+ end
+end
+
+def fun_l11_n817(x)
+ if (x < 1)
+ fun_l12_n881(x)
+ else
+ fun_l12_n636(x)
+ end
+end
+
+def fun_l11_n818(x)
+ if (x < 1)
+ fun_l12_n493(x)
+ else
+ fun_l12_n536(x)
+ end
+end
+
+def fun_l11_n819(x)
+ if (x < 1)
+ fun_l12_n32(x)
+ else
+ fun_l12_n69(x)
+ end
+end
+
+def fun_l11_n820(x)
+ if (x < 1)
+ fun_l12_n131(x)
+ else
+ fun_l12_n206(x)
+ end
+end
+
+def fun_l11_n821(x)
+ if (x < 1)
+ fun_l12_n130(x)
+ else
+ fun_l12_n63(x)
+ end
+end
+
+def fun_l11_n822(x)
+ if (x < 1)
+ fun_l12_n228(x)
+ else
+ fun_l12_n753(x)
+ end
+end
+
+def fun_l11_n823(x)
+ if (x < 1)
+ fun_l12_n171(x)
+ else
+ fun_l12_n605(x)
+ end
+end
+
+def fun_l11_n824(x)
+ if (x < 1)
+ fun_l12_n69(x)
+ else
+ fun_l12_n900(x)
+ end
+end
+
+def fun_l11_n825(x)
+ if (x < 1)
+ fun_l12_n802(x)
+ else
+ fun_l12_n682(x)
+ end
+end
+
+def fun_l11_n826(x)
+ if (x < 1)
+ fun_l12_n311(x)
+ else
+ fun_l12_n257(x)
+ end
+end
+
+def fun_l11_n827(x)
+ if (x < 1)
+ fun_l12_n994(x)
+ else
+ fun_l12_n162(x)
+ end
+end
+
+def fun_l11_n828(x)
+ if (x < 1)
+ fun_l12_n780(x)
+ else
+ fun_l12_n805(x)
+ end
+end
+
+def fun_l11_n829(x)
+ if (x < 1)
+ fun_l12_n744(x)
+ else
+ fun_l12_n55(x)
+ end
+end
+
+def fun_l11_n830(x)
+ if (x < 1)
+ fun_l12_n655(x)
+ else
+ fun_l12_n603(x)
+ end
+end
+
+def fun_l11_n831(x)
+ if (x < 1)
+ fun_l12_n245(x)
+ else
+ fun_l12_n196(x)
+ end
+end
+
+def fun_l11_n832(x)
+ if (x < 1)
+ fun_l12_n381(x)
+ else
+ fun_l12_n582(x)
+ end
+end
+
+def fun_l11_n833(x)
+ if (x < 1)
+ fun_l12_n185(x)
+ else
+ fun_l12_n339(x)
+ end
+end
+
+def fun_l11_n834(x)
+ if (x < 1)
+ fun_l12_n601(x)
+ else
+ fun_l12_n996(x)
+ end
+end
+
+def fun_l11_n835(x)
+ if (x < 1)
+ fun_l12_n934(x)
+ else
+ fun_l12_n460(x)
+ end
+end
+
+def fun_l11_n836(x)
+ if (x < 1)
+ fun_l12_n550(x)
+ else
+ fun_l12_n55(x)
+ end
+end
+
+def fun_l11_n837(x)
+ if (x < 1)
+ fun_l12_n183(x)
+ else
+ fun_l12_n880(x)
+ end
+end
+
+def fun_l11_n838(x)
+ if (x < 1)
+ fun_l12_n742(x)
+ else
+ fun_l12_n249(x)
+ end
+end
+
+def fun_l11_n839(x)
+ if (x < 1)
+ fun_l12_n979(x)
+ else
+ fun_l12_n100(x)
+ end
+end
+
+def fun_l11_n840(x)
+ if (x < 1)
+ fun_l12_n889(x)
+ else
+ fun_l12_n683(x)
+ end
+end
+
+def fun_l11_n841(x)
+ if (x < 1)
+ fun_l12_n964(x)
+ else
+ fun_l12_n0(x)
+ end
+end
+
+def fun_l11_n842(x)
+ if (x < 1)
+ fun_l12_n461(x)
+ else
+ fun_l12_n126(x)
+ end
+end
+
+def fun_l11_n843(x)
+ if (x < 1)
+ fun_l12_n839(x)
+ else
+ fun_l12_n554(x)
+ end
+end
+
+def fun_l11_n844(x)
+ if (x < 1)
+ fun_l12_n150(x)
+ else
+ fun_l12_n857(x)
+ end
+end
+
+def fun_l11_n845(x)
+ if (x < 1)
+ fun_l12_n114(x)
+ else
+ fun_l12_n72(x)
+ end
+end
+
+def fun_l11_n846(x)
+ if (x < 1)
+ fun_l12_n953(x)
+ else
+ fun_l12_n695(x)
+ end
+end
+
+def fun_l11_n847(x)
+ if (x < 1)
+ fun_l12_n16(x)
+ else
+ fun_l12_n216(x)
+ end
+end
+
+def fun_l11_n848(x)
+ if (x < 1)
+ fun_l12_n440(x)
+ else
+ fun_l12_n893(x)
+ end
+end
+
+def fun_l11_n849(x)
+ if (x < 1)
+ fun_l12_n176(x)
+ else
+ fun_l12_n932(x)
+ end
+end
+
+def fun_l11_n850(x)
+ if (x < 1)
+ fun_l12_n723(x)
+ else
+ fun_l12_n363(x)
+ end
+end
+
+def fun_l11_n851(x)
+ if (x < 1)
+ fun_l12_n779(x)
+ else
+ fun_l12_n774(x)
+ end
+end
+
+def fun_l11_n852(x)
+ if (x < 1)
+ fun_l12_n618(x)
+ else
+ fun_l12_n252(x)
+ end
+end
+
+def fun_l11_n853(x)
+ if (x < 1)
+ fun_l12_n298(x)
+ else
+ fun_l12_n563(x)
+ end
+end
+
+def fun_l11_n854(x)
+ if (x < 1)
+ fun_l12_n972(x)
+ else
+ fun_l12_n681(x)
+ end
+end
+
+def fun_l11_n855(x)
+ if (x < 1)
+ fun_l12_n412(x)
+ else
+ fun_l12_n932(x)
+ end
+end
+
+def fun_l11_n856(x)
+ if (x < 1)
+ fun_l12_n132(x)
+ else
+ fun_l12_n699(x)
+ end
+end
+
+def fun_l11_n857(x)
+ if (x < 1)
+ fun_l12_n208(x)
+ else
+ fun_l12_n602(x)
+ end
+end
+
+def fun_l11_n858(x)
+ if (x < 1)
+ fun_l12_n705(x)
+ else
+ fun_l12_n833(x)
+ end
+end
+
+def fun_l11_n859(x)
+ if (x < 1)
+ fun_l12_n408(x)
+ else
+ fun_l12_n570(x)
+ end
+end
+
+def fun_l11_n860(x)
+ if (x < 1)
+ fun_l12_n720(x)
+ else
+ fun_l12_n996(x)
+ end
+end
+
+def fun_l11_n861(x)
+ if (x < 1)
+ fun_l12_n926(x)
+ else
+ fun_l12_n490(x)
+ end
+end
+
+def fun_l11_n862(x)
+ if (x < 1)
+ fun_l12_n985(x)
+ else
+ fun_l12_n54(x)
+ end
+end
+
+def fun_l11_n863(x)
+ if (x < 1)
+ fun_l12_n214(x)
+ else
+ fun_l12_n729(x)
+ end
+end
+
+def fun_l11_n864(x)
+ if (x < 1)
+ fun_l12_n351(x)
+ else
+ fun_l12_n951(x)
+ end
+end
+
+def fun_l11_n865(x)
+ if (x < 1)
+ fun_l12_n514(x)
+ else
+ fun_l12_n468(x)
+ end
+end
+
+def fun_l11_n866(x)
+ if (x < 1)
+ fun_l12_n793(x)
+ else
+ fun_l12_n712(x)
+ end
+end
+
+def fun_l11_n867(x)
+ if (x < 1)
+ fun_l12_n697(x)
+ else
+ fun_l12_n824(x)
+ end
+end
+
+def fun_l11_n868(x)
+ if (x < 1)
+ fun_l12_n144(x)
+ else
+ fun_l12_n703(x)
+ end
+end
+
+def fun_l11_n869(x)
+ if (x < 1)
+ fun_l12_n552(x)
+ else
+ fun_l12_n612(x)
+ end
+end
+
+def fun_l11_n870(x)
+ if (x < 1)
+ fun_l12_n2(x)
+ else
+ fun_l12_n287(x)
+ end
+end
+
+def fun_l11_n871(x)
+ if (x < 1)
+ fun_l12_n604(x)
+ else
+ fun_l12_n260(x)
+ end
+end
+
+def fun_l11_n872(x)
+ if (x < 1)
+ fun_l12_n517(x)
+ else
+ fun_l12_n173(x)
+ end
+end
+
+def fun_l11_n873(x)
+ if (x < 1)
+ fun_l12_n640(x)
+ else
+ fun_l12_n196(x)
+ end
+end
+
+def fun_l11_n874(x)
+ if (x < 1)
+ fun_l12_n874(x)
+ else
+ fun_l12_n697(x)
+ end
+end
+
+def fun_l11_n875(x)
+ if (x < 1)
+ fun_l12_n180(x)
+ else
+ fun_l12_n652(x)
+ end
+end
+
+def fun_l11_n876(x)
+ if (x < 1)
+ fun_l12_n432(x)
+ else
+ fun_l12_n971(x)
+ end
+end
+
+def fun_l11_n877(x)
+ if (x < 1)
+ fun_l12_n111(x)
+ else
+ fun_l12_n919(x)
+ end
+end
+
+def fun_l11_n878(x)
+ if (x < 1)
+ fun_l12_n631(x)
+ else
+ fun_l12_n439(x)
+ end
+end
+
+def fun_l11_n879(x)
+ if (x < 1)
+ fun_l12_n39(x)
+ else
+ fun_l12_n372(x)
+ end
+end
+
+def fun_l11_n880(x)
+ if (x < 1)
+ fun_l12_n675(x)
+ else
+ fun_l12_n64(x)
+ end
+end
+
+def fun_l11_n881(x)
+ if (x < 1)
+ fun_l12_n831(x)
+ else
+ fun_l12_n705(x)
+ end
+end
+
+def fun_l11_n882(x)
+ if (x < 1)
+ fun_l12_n126(x)
+ else
+ fun_l12_n648(x)
+ end
+end
+
+def fun_l11_n883(x)
+ if (x < 1)
+ fun_l12_n768(x)
+ else
+ fun_l12_n483(x)
+ end
+end
+
+def fun_l11_n884(x)
+ if (x < 1)
+ fun_l12_n328(x)
+ else
+ fun_l12_n646(x)
+ end
+end
+
+def fun_l11_n885(x)
+ if (x < 1)
+ fun_l12_n890(x)
+ else
+ fun_l12_n544(x)
+ end
+end
+
+def fun_l11_n886(x)
+ if (x < 1)
+ fun_l12_n651(x)
+ else
+ fun_l12_n557(x)
+ end
+end
+
+def fun_l11_n887(x)
+ if (x < 1)
+ fun_l12_n479(x)
+ else
+ fun_l12_n594(x)
+ end
+end
+
+def fun_l11_n888(x)
+ if (x < 1)
+ fun_l12_n649(x)
+ else
+ fun_l12_n488(x)
+ end
+end
+
+def fun_l11_n889(x)
+ if (x < 1)
+ fun_l12_n347(x)
+ else
+ fun_l12_n42(x)
+ end
+end
+
+def fun_l11_n890(x)
+ if (x < 1)
+ fun_l12_n111(x)
+ else
+ fun_l12_n683(x)
+ end
+end
+
+def fun_l11_n891(x)
+ if (x < 1)
+ fun_l12_n965(x)
+ else
+ fun_l12_n275(x)
+ end
+end
+
+def fun_l11_n892(x)
+ if (x < 1)
+ fun_l12_n148(x)
+ else
+ fun_l12_n541(x)
+ end
+end
+
+def fun_l11_n893(x)
+ if (x < 1)
+ fun_l12_n633(x)
+ else
+ fun_l12_n358(x)
+ end
+end
+
+def fun_l11_n894(x)
+ if (x < 1)
+ fun_l12_n681(x)
+ else
+ fun_l12_n236(x)
+ end
+end
+
+def fun_l11_n895(x)
+ if (x < 1)
+ fun_l12_n292(x)
+ else
+ fun_l12_n417(x)
+ end
+end
+
+def fun_l11_n896(x)
+ if (x < 1)
+ fun_l12_n165(x)
+ else
+ fun_l12_n80(x)
+ end
+end
+
+def fun_l11_n897(x)
+ if (x < 1)
+ fun_l12_n132(x)
+ else
+ fun_l12_n659(x)
+ end
+end
+
+def fun_l11_n898(x)
+ if (x < 1)
+ fun_l12_n329(x)
+ else
+ fun_l12_n204(x)
+ end
+end
+
+def fun_l11_n899(x)
+ if (x < 1)
+ fun_l12_n339(x)
+ else
+ fun_l12_n632(x)
+ end
+end
+
+def fun_l11_n900(x)
+ if (x < 1)
+ fun_l12_n957(x)
+ else
+ fun_l12_n282(x)
+ end
+end
+
+def fun_l11_n901(x)
+ if (x < 1)
+ fun_l12_n709(x)
+ else
+ fun_l12_n155(x)
+ end
+end
+
+def fun_l11_n902(x)
+ if (x < 1)
+ fun_l12_n227(x)
+ else
+ fun_l12_n659(x)
+ end
+end
+
+def fun_l11_n903(x)
+ if (x < 1)
+ fun_l12_n224(x)
+ else
+ fun_l12_n23(x)
+ end
+end
+
+def fun_l11_n904(x)
+ if (x < 1)
+ fun_l12_n494(x)
+ else
+ fun_l12_n292(x)
+ end
+end
+
+def fun_l11_n905(x)
+ if (x < 1)
+ fun_l12_n309(x)
+ else
+ fun_l12_n949(x)
+ end
+end
+
+def fun_l11_n906(x)
+ if (x < 1)
+ fun_l12_n960(x)
+ else
+ fun_l12_n24(x)
+ end
+end
+
+def fun_l11_n907(x)
+ if (x < 1)
+ fun_l12_n98(x)
+ else
+ fun_l12_n674(x)
+ end
+end
+
+def fun_l11_n908(x)
+ if (x < 1)
+ fun_l12_n84(x)
+ else
+ fun_l12_n307(x)
+ end
+end
+
+def fun_l11_n909(x)
+ if (x < 1)
+ fun_l12_n786(x)
+ else
+ fun_l12_n311(x)
+ end
+end
+
+def fun_l11_n910(x)
+ if (x < 1)
+ fun_l12_n631(x)
+ else
+ fun_l12_n605(x)
+ end
+end
+
+def fun_l11_n911(x)
+ if (x < 1)
+ fun_l12_n352(x)
+ else
+ fun_l12_n750(x)
+ end
+end
+
+def fun_l11_n912(x)
+ if (x < 1)
+ fun_l12_n75(x)
+ else
+ fun_l12_n112(x)
+ end
+end
+
+def fun_l11_n913(x)
+ if (x < 1)
+ fun_l12_n404(x)
+ else
+ fun_l12_n995(x)
+ end
+end
+
+def fun_l11_n914(x)
+ if (x < 1)
+ fun_l12_n656(x)
+ else
+ fun_l12_n203(x)
+ end
+end
+
+def fun_l11_n915(x)
+ if (x < 1)
+ fun_l12_n625(x)
+ else
+ fun_l12_n32(x)
+ end
+end
+
+def fun_l11_n916(x)
+ if (x < 1)
+ fun_l12_n785(x)
+ else
+ fun_l12_n237(x)
+ end
+end
+
+def fun_l11_n917(x)
+ if (x < 1)
+ fun_l12_n643(x)
+ else
+ fun_l12_n364(x)
+ end
+end
+
+def fun_l11_n918(x)
+ if (x < 1)
+ fun_l12_n920(x)
+ else
+ fun_l12_n957(x)
+ end
+end
+
+def fun_l11_n919(x)
+ if (x < 1)
+ fun_l12_n336(x)
+ else
+ fun_l12_n726(x)
+ end
+end
+
+def fun_l11_n920(x)
+ if (x < 1)
+ fun_l12_n329(x)
+ else
+ fun_l12_n15(x)
+ end
+end
+
+def fun_l11_n921(x)
+ if (x < 1)
+ fun_l12_n911(x)
+ else
+ fun_l12_n824(x)
+ end
+end
+
+def fun_l11_n922(x)
+ if (x < 1)
+ fun_l12_n907(x)
+ else
+ fun_l12_n854(x)
+ end
+end
+
+def fun_l11_n923(x)
+ if (x < 1)
+ fun_l12_n779(x)
+ else
+ fun_l12_n549(x)
+ end
+end
+
+def fun_l11_n924(x)
+ if (x < 1)
+ fun_l12_n833(x)
+ else
+ fun_l12_n986(x)
+ end
+end
+
+def fun_l11_n925(x)
+ if (x < 1)
+ fun_l12_n450(x)
+ else
+ fun_l12_n783(x)
+ end
+end
+
+def fun_l11_n926(x)
+ if (x < 1)
+ fun_l12_n405(x)
+ else
+ fun_l12_n960(x)
+ end
+end
+
+def fun_l11_n927(x)
+ if (x < 1)
+ fun_l12_n603(x)
+ else
+ fun_l12_n892(x)
+ end
+end
+
+def fun_l11_n928(x)
+ if (x < 1)
+ fun_l12_n137(x)
+ else
+ fun_l12_n200(x)
+ end
+end
+
+def fun_l11_n929(x)
+ if (x < 1)
+ fun_l12_n161(x)
+ else
+ fun_l12_n754(x)
+ end
+end
+
+def fun_l11_n930(x)
+ if (x < 1)
+ fun_l12_n107(x)
+ else
+ fun_l12_n258(x)
+ end
+end
+
+def fun_l11_n931(x)
+ if (x < 1)
+ fun_l12_n794(x)
+ else
+ fun_l12_n812(x)
+ end
+end
+
+def fun_l11_n932(x)
+ if (x < 1)
+ fun_l12_n956(x)
+ else
+ fun_l12_n156(x)
+ end
+end
+
+def fun_l11_n933(x)
+ if (x < 1)
+ fun_l12_n676(x)
+ else
+ fun_l12_n496(x)
+ end
+end
+
+def fun_l11_n934(x)
+ if (x < 1)
+ fun_l12_n229(x)
+ else
+ fun_l12_n339(x)
+ end
+end
+
+def fun_l11_n935(x)
+ if (x < 1)
+ fun_l12_n353(x)
+ else
+ fun_l12_n430(x)
+ end
+end
+
+def fun_l11_n936(x)
+ if (x < 1)
+ fun_l12_n721(x)
+ else
+ fun_l12_n409(x)
+ end
+end
+
+def fun_l11_n937(x)
+ if (x < 1)
+ fun_l12_n151(x)
+ else
+ fun_l12_n60(x)
+ end
+end
+
+def fun_l11_n938(x)
+ if (x < 1)
+ fun_l12_n362(x)
+ else
+ fun_l12_n92(x)
+ end
+end
+
+def fun_l11_n939(x)
+ if (x < 1)
+ fun_l12_n315(x)
+ else
+ fun_l12_n905(x)
+ end
+end
+
+def fun_l11_n940(x)
+ if (x < 1)
+ fun_l12_n788(x)
+ else
+ fun_l12_n105(x)
+ end
+end
+
+def fun_l11_n941(x)
+ if (x < 1)
+ fun_l12_n124(x)
+ else
+ fun_l12_n496(x)
+ end
+end
+
+def fun_l11_n942(x)
+ if (x < 1)
+ fun_l12_n546(x)
+ else
+ fun_l12_n17(x)
+ end
+end
+
+def fun_l11_n943(x)
+ if (x < 1)
+ fun_l12_n594(x)
+ else
+ fun_l12_n55(x)
+ end
+end
+
+def fun_l11_n944(x)
+ if (x < 1)
+ fun_l12_n187(x)
+ else
+ fun_l12_n139(x)
+ end
+end
+
+def fun_l11_n945(x)
+ if (x < 1)
+ fun_l12_n117(x)
+ else
+ fun_l12_n382(x)
+ end
+end
+
+def fun_l11_n946(x)
+ if (x < 1)
+ fun_l12_n579(x)
+ else
+ fun_l12_n895(x)
+ end
+end
+
+def fun_l11_n947(x)
+ if (x < 1)
+ fun_l12_n541(x)
+ else
+ fun_l12_n497(x)
+ end
+end
+
+def fun_l11_n948(x)
+ if (x < 1)
+ fun_l12_n250(x)
+ else
+ fun_l12_n257(x)
+ end
+end
+
+def fun_l11_n949(x)
+ if (x < 1)
+ fun_l12_n553(x)
+ else
+ fun_l12_n663(x)
+ end
+end
+
+def fun_l11_n950(x)
+ if (x < 1)
+ fun_l12_n779(x)
+ else
+ fun_l12_n414(x)
+ end
+end
+
+def fun_l11_n951(x)
+ if (x < 1)
+ fun_l12_n748(x)
+ else
+ fun_l12_n525(x)
+ end
+end
+
+def fun_l11_n952(x)
+ if (x < 1)
+ fun_l12_n669(x)
+ else
+ fun_l12_n339(x)
+ end
+end
+
+def fun_l11_n953(x)
+ if (x < 1)
+ fun_l12_n665(x)
+ else
+ fun_l12_n996(x)
+ end
+end
+
+def fun_l11_n954(x)
+ if (x < 1)
+ fun_l12_n366(x)
+ else
+ fun_l12_n149(x)
+ end
+end
+
+def fun_l11_n955(x)
+ if (x < 1)
+ fun_l12_n549(x)
+ else
+ fun_l12_n414(x)
+ end
+end
+
+def fun_l11_n956(x)
+ if (x < 1)
+ fun_l12_n258(x)
+ else
+ fun_l12_n67(x)
+ end
+end
+
+def fun_l11_n957(x)
+ if (x < 1)
+ fun_l12_n439(x)
+ else
+ fun_l12_n83(x)
+ end
+end
+
+def fun_l11_n958(x)
+ if (x < 1)
+ fun_l12_n601(x)
+ else
+ fun_l12_n938(x)
+ end
+end
+
+def fun_l11_n959(x)
+ if (x < 1)
+ fun_l12_n953(x)
+ else
+ fun_l12_n973(x)
+ end
+end
+
+def fun_l11_n960(x)
+ if (x < 1)
+ fun_l12_n426(x)
+ else
+ fun_l12_n8(x)
+ end
+end
+
+def fun_l11_n961(x)
+ if (x < 1)
+ fun_l12_n719(x)
+ else
+ fun_l12_n657(x)
+ end
+end
+
+def fun_l11_n962(x)
+ if (x < 1)
+ fun_l12_n391(x)
+ else
+ fun_l12_n992(x)
+ end
+end
+
+def fun_l11_n963(x)
+ if (x < 1)
+ fun_l12_n141(x)
+ else
+ fun_l12_n468(x)
+ end
+end
+
+def fun_l11_n964(x)
+ if (x < 1)
+ fun_l12_n463(x)
+ else
+ fun_l12_n94(x)
+ end
+end
+
+def fun_l11_n965(x)
+ if (x < 1)
+ fun_l12_n765(x)
+ else
+ fun_l12_n168(x)
+ end
+end
+
+def fun_l11_n966(x)
+ if (x < 1)
+ fun_l12_n237(x)
+ else
+ fun_l12_n437(x)
+ end
+end
+
+def fun_l11_n967(x)
+ if (x < 1)
+ fun_l12_n741(x)
+ else
+ fun_l12_n331(x)
+ end
+end
+
+def fun_l11_n968(x)
+ if (x < 1)
+ fun_l12_n617(x)
+ else
+ fun_l12_n773(x)
+ end
+end
+
+def fun_l11_n969(x)
+ if (x < 1)
+ fun_l12_n880(x)
+ else
+ fun_l12_n727(x)
+ end
+end
+
+def fun_l11_n970(x)
+ if (x < 1)
+ fun_l12_n781(x)
+ else
+ fun_l12_n270(x)
+ end
+end
+
+def fun_l11_n971(x)
+ if (x < 1)
+ fun_l12_n511(x)
+ else
+ fun_l12_n183(x)
+ end
+end
+
+def fun_l11_n972(x)
+ if (x < 1)
+ fun_l12_n448(x)
+ else
+ fun_l12_n965(x)
+ end
+end
+
+def fun_l11_n973(x)
+ if (x < 1)
+ fun_l12_n816(x)
+ else
+ fun_l12_n974(x)
+ end
+end
+
+def fun_l11_n974(x)
+ if (x < 1)
+ fun_l12_n583(x)
+ else
+ fun_l12_n731(x)
+ end
+end
+
+def fun_l11_n975(x)
+ if (x < 1)
+ fun_l12_n42(x)
+ else
+ fun_l12_n463(x)
+ end
+end
+
+def fun_l11_n976(x)
+ if (x < 1)
+ fun_l12_n267(x)
+ else
+ fun_l12_n769(x)
+ end
+end
+
+def fun_l11_n977(x)
+ if (x < 1)
+ fun_l12_n993(x)
+ else
+ fun_l12_n391(x)
+ end
+end
+
+def fun_l11_n978(x)
+ if (x < 1)
+ fun_l12_n507(x)
+ else
+ fun_l12_n905(x)
+ end
+end
+
+def fun_l11_n979(x)
+ if (x < 1)
+ fun_l12_n486(x)
+ else
+ fun_l12_n562(x)
+ end
+end
+
+def fun_l11_n980(x)
+ if (x < 1)
+ fun_l12_n252(x)
+ else
+ fun_l12_n475(x)
+ end
+end
+
+def fun_l11_n981(x)
+ if (x < 1)
+ fun_l12_n979(x)
+ else
+ fun_l12_n70(x)
+ end
+end
+
+def fun_l11_n982(x)
+ if (x < 1)
+ fun_l12_n11(x)
+ else
+ fun_l12_n483(x)
+ end
+end
+
+def fun_l11_n983(x)
+ if (x < 1)
+ fun_l12_n208(x)
+ else
+ fun_l12_n315(x)
+ end
+end
+
+def fun_l11_n984(x)
+ if (x < 1)
+ fun_l12_n452(x)
+ else
+ fun_l12_n367(x)
+ end
+end
+
+def fun_l11_n985(x)
+ if (x < 1)
+ fun_l12_n937(x)
+ else
+ fun_l12_n33(x)
+ end
+end
+
+def fun_l11_n986(x)
+ if (x < 1)
+ fun_l12_n227(x)
+ else
+ fun_l12_n448(x)
+ end
+end
+
+def fun_l11_n987(x)
+ if (x < 1)
+ fun_l12_n928(x)
+ else
+ fun_l12_n693(x)
+ end
+end
+
+def fun_l11_n988(x)
+ if (x < 1)
+ fun_l12_n731(x)
+ else
+ fun_l12_n872(x)
+ end
+end
+
+def fun_l11_n989(x)
+ if (x < 1)
+ fun_l12_n355(x)
+ else
+ fun_l12_n0(x)
+ end
+end
+
+def fun_l11_n990(x)
+ if (x < 1)
+ fun_l12_n203(x)
+ else
+ fun_l12_n545(x)
+ end
+end
+
+def fun_l11_n991(x)
+ if (x < 1)
+ fun_l12_n237(x)
+ else
+ fun_l12_n186(x)
+ end
+end
+
+def fun_l11_n992(x)
+ if (x < 1)
+ fun_l12_n22(x)
+ else
+ fun_l12_n597(x)
+ end
+end
+
+def fun_l11_n993(x)
+ if (x < 1)
+ fun_l12_n711(x)
+ else
+ fun_l12_n677(x)
+ end
+end
+
+def fun_l11_n994(x)
+ if (x < 1)
+ fun_l12_n892(x)
+ else
+ fun_l12_n729(x)
+ end
+end
+
+def fun_l11_n995(x)
+ if (x < 1)
+ fun_l12_n51(x)
+ else
+ fun_l12_n279(x)
+ end
+end
+
+def fun_l11_n996(x)
+ if (x < 1)
+ fun_l12_n430(x)
+ else
+ fun_l12_n527(x)
+ end
+end
+
+def fun_l11_n997(x)
+ if (x < 1)
+ fun_l12_n153(x)
+ else
+ fun_l12_n366(x)
+ end
+end
+
+def fun_l11_n998(x)
+ if (x < 1)
+ fun_l12_n574(x)
+ else
+ fun_l12_n432(x)
+ end
+end
+
+def fun_l11_n999(x)
+ if (x < 1)
+ fun_l12_n100(x)
+ else
+ fun_l12_n943(x)
+ end
+end
+
+def fun_l12_n0(x)
+ if (x < 1)
+ fun_l13_n874(x)
+ else
+ fun_l13_n769(x)
+ end
+end
+
+def fun_l12_n1(x)
+ if (x < 1)
+ fun_l13_n354(x)
+ else
+ fun_l13_n103(x)
+ end
+end
+
+def fun_l12_n2(x)
+ if (x < 1)
+ fun_l13_n265(x)
+ else
+ fun_l13_n936(x)
+ end
+end
+
+def fun_l12_n3(x)
+ if (x < 1)
+ fun_l13_n683(x)
+ else
+ fun_l13_n607(x)
+ end
+end
+
+def fun_l12_n4(x)
+ if (x < 1)
+ fun_l13_n398(x)
+ else
+ fun_l13_n902(x)
+ end
+end
+
+def fun_l12_n5(x)
+ if (x < 1)
+ fun_l13_n694(x)
+ else
+ fun_l13_n392(x)
+ end
+end
+
+def fun_l12_n6(x)
+ if (x < 1)
+ fun_l13_n170(x)
+ else
+ fun_l13_n207(x)
+ end
+end
+
+def fun_l12_n7(x)
+ if (x < 1)
+ fun_l13_n978(x)
+ else
+ fun_l13_n368(x)
+ end
+end
+
+def fun_l12_n8(x)
+ if (x < 1)
+ fun_l13_n970(x)
+ else
+ fun_l13_n560(x)
+ end
+end
+
+def fun_l12_n9(x)
+ if (x < 1)
+ fun_l13_n56(x)
+ else
+ fun_l13_n697(x)
+ end
+end
+
+def fun_l12_n10(x)
+ if (x < 1)
+ fun_l13_n860(x)
+ else
+ fun_l13_n407(x)
+ end
+end
+
+def fun_l12_n11(x)
+ if (x < 1)
+ fun_l13_n581(x)
+ else
+ fun_l13_n582(x)
+ end
+end
+
+def fun_l12_n12(x)
+ if (x < 1)
+ fun_l13_n835(x)
+ else
+ fun_l13_n706(x)
+ end
+end
+
+def fun_l12_n13(x)
+ if (x < 1)
+ fun_l13_n862(x)
+ else
+ fun_l13_n89(x)
+ end
+end
+
+def fun_l12_n14(x)
+ if (x < 1)
+ fun_l13_n379(x)
+ else
+ fun_l13_n896(x)
+ end
+end
+
+def fun_l12_n15(x)
+ if (x < 1)
+ fun_l13_n175(x)
+ else
+ fun_l13_n113(x)
+ end
+end
+
+def fun_l12_n16(x)
+ if (x < 1)
+ fun_l13_n553(x)
+ else
+ fun_l13_n935(x)
+ end
+end
+
+def fun_l12_n17(x)
+ if (x < 1)
+ fun_l13_n171(x)
+ else
+ fun_l13_n264(x)
+ end
+end
+
+def fun_l12_n18(x)
+ if (x < 1)
+ fun_l13_n61(x)
+ else
+ fun_l13_n412(x)
+ end
+end
+
+def fun_l12_n19(x)
+ if (x < 1)
+ fun_l13_n213(x)
+ else
+ fun_l13_n422(x)
+ end
+end
+
+def fun_l12_n20(x)
+ if (x < 1)
+ fun_l13_n401(x)
+ else
+ fun_l13_n537(x)
+ end
+end
+
+def fun_l12_n21(x)
+ if (x < 1)
+ fun_l13_n207(x)
+ else
+ fun_l13_n495(x)
+ end
+end
+
+def fun_l12_n22(x)
+ if (x < 1)
+ fun_l13_n941(x)
+ else
+ fun_l13_n466(x)
+ end
+end
+
+def fun_l12_n23(x)
+ if (x < 1)
+ fun_l13_n195(x)
+ else
+ fun_l13_n984(x)
+ end
+end
+
+def fun_l12_n24(x)
+ if (x < 1)
+ fun_l13_n106(x)
+ else
+ fun_l13_n812(x)
+ end
+end
+
+def fun_l12_n25(x)
+ if (x < 1)
+ fun_l13_n979(x)
+ else
+ fun_l13_n902(x)
+ end
+end
+
+def fun_l12_n26(x)
+ if (x < 1)
+ fun_l13_n726(x)
+ else
+ fun_l13_n440(x)
+ end
+end
+
+def fun_l12_n27(x)
+ if (x < 1)
+ fun_l13_n229(x)
+ else
+ fun_l13_n995(x)
+ end
+end
+
+def fun_l12_n28(x)
+ if (x < 1)
+ fun_l13_n764(x)
+ else
+ fun_l13_n333(x)
+ end
+end
+
+def fun_l12_n29(x)
+ if (x < 1)
+ fun_l13_n971(x)
+ else
+ fun_l13_n59(x)
+ end
+end
+
+def fun_l12_n30(x)
+ if (x < 1)
+ fun_l13_n731(x)
+ else
+ fun_l13_n138(x)
+ end
+end
+
+def fun_l12_n31(x)
+ if (x < 1)
+ fun_l13_n591(x)
+ else
+ fun_l13_n473(x)
+ end
+end
+
+def fun_l12_n32(x)
+ if (x < 1)
+ fun_l13_n50(x)
+ else
+ fun_l13_n175(x)
+ end
+end
+
+def fun_l12_n33(x)
+ if (x < 1)
+ fun_l13_n26(x)
+ else
+ fun_l13_n867(x)
+ end
+end
+
+def fun_l12_n34(x)
+ if (x < 1)
+ fun_l13_n349(x)
+ else
+ fun_l13_n332(x)
+ end
+end
+
+def fun_l12_n35(x)
+ if (x < 1)
+ fun_l13_n180(x)
+ else
+ fun_l13_n591(x)
+ end
+end
+
+def fun_l12_n36(x)
+ if (x < 1)
+ fun_l13_n339(x)
+ else
+ fun_l13_n354(x)
+ end
+end
+
+def fun_l12_n37(x)
+ if (x < 1)
+ fun_l13_n289(x)
+ else
+ fun_l13_n101(x)
+ end
+end
+
+def fun_l12_n38(x)
+ if (x < 1)
+ fun_l13_n410(x)
+ else
+ fun_l13_n91(x)
+ end
+end
+
+def fun_l12_n39(x)
+ if (x < 1)
+ fun_l13_n617(x)
+ else
+ fun_l13_n716(x)
+ end
+end
+
+def fun_l12_n40(x)
+ if (x < 1)
+ fun_l13_n116(x)
+ else
+ fun_l13_n875(x)
+ end
+end
+
+def fun_l12_n41(x)
+ if (x < 1)
+ fun_l13_n162(x)
+ else
+ fun_l13_n844(x)
+ end
+end
+
+def fun_l12_n42(x)
+ if (x < 1)
+ fun_l13_n79(x)
+ else
+ fun_l13_n589(x)
+ end
+end
+
+def fun_l12_n43(x)
+ if (x < 1)
+ fun_l13_n835(x)
+ else
+ fun_l13_n21(x)
+ end
+end
+
+def fun_l12_n44(x)
+ if (x < 1)
+ fun_l13_n420(x)
+ else
+ fun_l13_n403(x)
+ end
+end
+
+def fun_l12_n45(x)
+ if (x < 1)
+ fun_l13_n203(x)
+ else
+ fun_l13_n890(x)
+ end
+end
+
+def fun_l12_n46(x)
+ if (x < 1)
+ fun_l13_n529(x)
+ else
+ fun_l13_n717(x)
+ end
+end
+
+def fun_l12_n47(x)
+ if (x < 1)
+ fun_l13_n766(x)
+ else
+ fun_l13_n635(x)
+ end
+end
+
+def fun_l12_n48(x)
+ if (x < 1)
+ fun_l13_n223(x)
+ else
+ fun_l13_n460(x)
+ end
+end
+
+def fun_l12_n49(x)
+ if (x < 1)
+ fun_l13_n799(x)
+ else
+ fun_l13_n397(x)
+ end
+end
+
+def fun_l12_n50(x)
+ if (x < 1)
+ fun_l13_n200(x)
+ else
+ fun_l13_n608(x)
+ end
+end
+
+def fun_l12_n51(x)
+ if (x < 1)
+ fun_l13_n212(x)
+ else
+ fun_l13_n612(x)
+ end
+end
+
+def fun_l12_n52(x)
+ if (x < 1)
+ fun_l13_n271(x)
+ else
+ fun_l13_n324(x)
+ end
+end
+
+def fun_l12_n53(x)
+ if (x < 1)
+ fun_l13_n639(x)
+ else
+ fun_l13_n603(x)
+ end
+end
+
+def fun_l12_n54(x)
+ if (x < 1)
+ fun_l13_n125(x)
+ else
+ fun_l13_n726(x)
+ end
+end
+
+def fun_l12_n55(x)
+ if (x < 1)
+ fun_l13_n266(x)
+ else
+ fun_l13_n552(x)
+ end
+end
+
+def fun_l12_n56(x)
+ if (x < 1)
+ fun_l13_n412(x)
+ else
+ fun_l13_n132(x)
+ end
+end
+
+def fun_l12_n57(x)
+ if (x < 1)
+ fun_l13_n235(x)
+ else
+ fun_l13_n892(x)
+ end
+end
+
+def fun_l12_n58(x)
+ if (x < 1)
+ fun_l13_n515(x)
+ else
+ fun_l13_n465(x)
+ end
+end
+
+def fun_l12_n59(x)
+ if (x < 1)
+ fun_l13_n38(x)
+ else
+ fun_l13_n757(x)
+ end
+end
+
+def fun_l12_n60(x)
+ if (x < 1)
+ fun_l13_n544(x)
+ else
+ fun_l13_n794(x)
+ end
+end
+
+def fun_l12_n61(x)
+ if (x < 1)
+ fun_l13_n622(x)
+ else
+ fun_l13_n340(x)
+ end
+end
+
+def fun_l12_n62(x)
+ if (x < 1)
+ fun_l13_n563(x)
+ else
+ fun_l13_n313(x)
+ end
+end
+
+def fun_l12_n63(x)
+ if (x < 1)
+ fun_l13_n936(x)
+ else
+ fun_l13_n38(x)
+ end
+end
+
+def fun_l12_n64(x)
+ if (x < 1)
+ fun_l13_n951(x)
+ else
+ fun_l13_n543(x)
+ end
+end
+
+def fun_l12_n65(x)
+ if (x < 1)
+ fun_l13_n577(x)
+ else
+ fun_l13_n190(x)
+ end
+end
+
+def fun_l12_n66(x)
+ if (x < 1)
+ fun_l13_n649(x)
+ else
+ fun_l13_n887(x)
+ end
+end
+
+def fun_l12_n67(x)
+ if (x < 1)
+ fun_l13_n218(x)
+ else
+ fun_l13_n200(x)
+ end
+end
+
+def fun_l12_n68(x)
+ if (x < 1)
+ fun_l13_n111(x)
+ else
+ fun_l13_n849(x)
+ end
+end
+
+def fun_l12_n69(x)
+ if (x < 1)
+ fun_l13_n431(x)
+ else
+ fun_l13_n816(x)
+ end
+end
+
+def fun_l12_n70(x)
+ if (x < 1)
+ fun_l13_n970(x)
+ else
+ fun_l13_n545(x)
+ end
+end
+
+def fun_l12_n71(x)
+ if (x < 1)
+ fun_l13_n3(x)
+ else
+ fun_l13_n751(x)
+ end
+end
+
+def fun_l12_n72(x)
+ if (x < 1)
+ fun_l13_n58(x)
+ else
+ fun_l13_n994(x)
+ end
+end
+
+def fun_l12_n73(x)
+ if (x < 1)
+ fun_l13_n397(x)
+ else
+ fun_l13_n783(x)
+ end
+end
+
+def fun_l12_n74(x)
+ if (x < 1)
+ fun_l13_n705(x)
+ else
+ fun_l13_n318(x)
+ end
+end
+
+def fun_l12_n75(x)
+ if (x < 1)
+ fun_l13_n406(x)
+ else
+ fun_l13_n880(x)
+ end
+end
+
+def fun_l12_n76(x)
+ if (x < 1)
+ fun_l13_n867(x)
+ else
+ fun_l13_n234(x)
+ end
+end
+
+def fun_l12_n77(x)
+ if (x < 1)
+ fun_l13_n447(x)
+ else
+ fun_l13_n617(x)
+ end
+end
+
+def fun_l12_n78(x)
+ if (x < 1)
+ fun_l13_n631(x)
+ else
+ fun_l13_n687(x)
+ end
+end
+
+def fun_l12_n79(x)
+ if (x < 1)
+ fun_l13_n735(x)
+ else
+ fun_l13_n512(x)
+ end
+end
+
+def fun_l12_n80(x)
+ if (x < 1)
+ fun_l13_n826(x)
+ else
+ fun_l13_n626(x)
+ end
+end
+
+def fun_l12_n81(x)
+ if (x < 1)
+ fun_l13_n959(x)
+ else
+ fun_l13_n357(x)
+ end
+end
+
+def fun_l12_n82(x)
+ if (x < 1)
+ fun_l13_n17(x)
+ else
+ fun_l13_n722(x)
+ end
+end
+
+def fun_l12_n83(x)
+ if (x < 1)
+ fun_l13_n702(x)
+ else
+ fun_l13_n441(x)
+ end
+end
+
+def fun_l12_n84(x)
+ if (x < 1)
+ fun_l13_n939(x)
+ else
+ fun_l13_n972(x)
+ end
+end
+
+def fun_l12_n85(x)
+ if (x < 1)
+ fun_l13_n747(x)
+ else
+ fun_l13_n481(x)
+ end
+end
+
+def fun_l12_n86(x)
+ if (x < 1)
+ fun_l13_n813(x)
+ else
+ fun_l13_n780(x)
+ end
+end
+
+def fun_l12_n87(x)
+ if (x < 1)
+ fun_l13_n87(x)
+ else
+ fun_l13_n19(x)
+ end
+end
+
+def fun_l12_n88(x)
+ if (x < 1)
+ fun_l13_n422(x)
+ else
+ fun_l13_n938(x)
+ end
+end
+
+def fun_l12_n89(x)
+ if (x < 1)
+ fun_l13_n575(x)
+ else
+ fun_l13_n150(x)
+ end
+end
+
+def fun_l12_n90(x)
+ if (x < 1)
+ fun_l13_n294(x)
+ else
+ fun_l13_n666(x)
+ end
+end
+
+def fun_l12_n91(x)
+ if (x < 1)
+ fun_l13_n216(x)
+ else
+ fun_l13_n315(x)
+ end
+end
+
+def fun_l12_n92(x)
+ if (x < 1)
+ fun_l13_n580(x)
+ else
+ fun_l13_n487(x)
+ end
+end
+
+def fun_l12_n93(x)
+ if (x < 1)
+ fun_l13_n500(x)
+ else
+ fun_l13_n2(x)
+ end
+end
+
+def fun_l12_n94(x)
+ if (x < 1)
+ fun_l13_n362(x)
+ else
+ fun_l13_n69(x)
+ end
+end
+
+def fun_l12_n95(x)
+ if (x < 1)
+ fun_l13_n50(x)
+ else
+ fun_l13_n549(x)
+ end
+end
+
+def fun_l12_n96(x)
+ if (x < 1)
+ fun_l13_n407(x)
+ else
+ fun_l13_n935(x)
+ end
+end
+
+def fun_l12_n97(x)
+ if (x < 1)
+ fun_l13_n715(x)
+ else
+ fun_l13_n70(x)
+ end
+end
+
+def fun_l12_n98(x)
+ if (x < 1)
+ fun_l13_n184(x)
+ else
+ fun_l13_n702(x)
+ end
+end
+
+def fun_l12_n99(x)
+ if (x < 1)
+ fun_l13_n612(x)
+ else
+ fun_l13_n972(x)
+ end
+end
+
+def fun_l12_n100(x)
+ if (x < 1)
+ fun_l13_n778(x)
+ else
+ fun_l13_n458(x)
+ end
+end
+
+def fun_l12_n101(x)
+ if (x < 1)
+ fun_l13_n387(x)
+ else
+ fun_l13_n783(x)
+ end
+end
+
+def fun_l12_n102(x)
+ if (x < 1)
+ fun_l13_n764(x)
+ else
+ fun_l13_n647(x)
+ end
+end
+
+def fun_l12_n103(x)
+ if (x < 1)
+ fun_l13_n310(x)
+ else
+ fun_l13_n46(x)
+ end
+end
+
+def fun_l12_n104(x)
+ if (x < 1)
+ fun_l13_n643(x)
+ else
+ fun_l13_n479(x)
+ end
+end
+
+def fun_l12_n105(x)
+ if (x < 1)
+ fun_l13_n909(x)
+ else
+ fun_l13_n10(x)
+ end
+end
+
+def fun_l12_n106(x)
+ if (x < 1)
+ fun_l13_n181(x)
+ else
+ fun_l13_n671(x)
+ end
+end
+
+def fun_l12_n107(x)
+ if (x < 1)
+ fun_l13_n592(x)
+ else
+ fun_l13_n421(x)
+ end
+end
+
+def fun_l12_n108(x)
+ if (x < 1)
+ fun_l13_n438(x)
+ else
+ fun_l13_n196(x)
+ end
+end
+
+def fun_l12_n109(x)
+ if (x < 1)
+ fun_l13_n605(x)
+ else
+ fun_l13_n529(x)
+ end
+end
+
+def fun_l12_n110(x)
+ if (x < 1)
+ fun_l13_n31(x)
+ else
+ fun_l13_n769(x)
+ end
+end
+
+def fun_l12_n111(x)
+ if (x < 1)
+ fun_l13_n790(x)
+ else
+ fun_l13_n773(x)
+ end
+end
+
+def fun_l12_n112(x)
+ if (x < 1)
+ fun_l13_n778(x)
+ else
+ fun_l13_n621(x)
+ end
+end
+
+def fun_l12_n113(x)
+ if (x < 1)
+ fun_l13_n892(x)
+ else
+ fun_l13_n413(x)
+ end
+end
+
+def fun_l12_n114(x)
+ if (x < 1)
+ fun_l13_n675(x)
+ else
+ fun_l13_n124(x)
+ end
+end
+
+def fun_l12_n115(x)
+ if (x < 1)
+ fun_l13_n366(x)
+ else
+ fun_l13_n884(x)
+ end
+end
+
+def fun_l12_n116(x)
+ if (x < 1)
+ fun_l13_n552(x)
+ else
+ fun_l13_n769(x)
+ end
+end
+
+def fun_l12_n117(x)
+ if (x < 1)
+ fun_l13_n11(x)
+ else
+ fun_l13_n46(x)
+ end
+end
+
+def fun_l12_n118(x)
+ if (x < 1)
+ fun_l13_n766(x)
+ else
+ fun_l13_n914(x)
+ end
+end
+
+def fun_l12_n119(x)
+ if (x < 1)
+ fun_l13_n980(x)
+ else
+ fun_l13_n956(x)
+ end
+end
+
+def fun_l12_n120(x)
+ if (x < 1)
+ fun_l13_n668(x)
+ else
+ fun_l13_n532(x)
+ end
+end
+
+def fun_l12_n121(x)
+ if (x < 1)
+ fun_l13_n864(x)
+ else
+ fun_l13_n489(x)
+ end
+end
+
+def fun_l12_n122(x)
+ if (x < 1)
+ fun_l13_n581(x)
+ else
+ fun_l13_n33(x)
+ end
+end
+
+def fun_l12_n123(x)
+ if (x < 1)
+ fun_l13_n188(x)
+ else
+ fun_l13_n652(x)
+ end
+end
+
+def fun_l12_n124(x)
+ if (x < 1)
+ fun_l13_n631(x)
+ else
+ fun_l13_n932(x)
+ end
+end
+
+def fun_l12_n125(x)
+ if (x < 1)
+ fun_l13_n646(x)
+ else
+ fun_l13_n525(x)
+ end
+end
+
+def fun_l12_n126(x)
+ if (x < 1)
+ fun_l13_n878(x)
+ else
+ fun_l13_n98(x)
+ end
+end
+
+def fun_l12_n127(x)
+ if (x < 1)
+ fun_l13_n120(x)
+ else
+ fun_l13_n950(x)
+ end
+end
+
+def fun_l12_n128(x)
+ if (x < 1)
+ fun_l13_n405(x)
+ else
+ fun_l13_n60(x)
+ end
+end
+
+def fun_l12_n129(x)
+ if (x < 1)
+ fun_l13_n635(x)
+ else
+ fun_l13_n992(x)
+ end
+end
+
+def fun_l12_n130(x)
+ if (x < 1)
+ fun_l13_n711(x)
+ else
+ fun_l13_n172(x)
+ end
+end
+
+def fun_l12_n131(x)
+ if (x < 1)
+ fun_l13_n2(x)
+ else
+ fun_l13_n328(x)
+ end
+end
+
+def fun_l12_n132(x)
+ if (x < 1)
+ fun_l13_n506(x)
+ else
+ fun_l13_n258(x)
+ end
+end
+
+def fun_l12_n133(x)
+ if (x < 1)
+ fun_l13_n737(x)
+ else
+ fun_l13_n552(x)
+ end
+end
+
+def fun_l12_n134(x)
+ if (x < 1)
+ fun_l13_n596(x)
+ else
+ fun_l13_n475(x)
+ end
+end
+
+def fun_l12_n135(x)
+ if (x < 1)
+ fun_l13_n751(x)
+ else
+ fun_l13_n610(x)
+ end
+end
+
+def fun_l12_n136(x)
+ if (x < 1)
+ fun_l13_n778(x)
+ else
+ fun_l13_n719(x)
+ end
+end
+
+def fun_l12_n137(x)
+ if (x < 1)
+ fun_l13_n779(x)
+ else
+ fun_l13_n204(x)
+ end
+end
+
+def fun_l12_n138(x)
+ if (x < 1)
+ fun_l13_n765(x)
+ else
+ fun_l13_n280(x)
+ end
+end
+
+def fun_l12_n139(x)
+ if (x < 1)
+ fun_l13_n896(x)
+ else
+ fun_l13_n558(x)
+ end
+end
+
+def fun_l12_n140(x)
+ if (x < 1)
+ fun_l13_n16(x)
+ else
+ fun_l13_n809(x)
+ end
+end
+
+def fun_l12_n141(x)
+ if (x < 1)
+ fun_l13_n182(x)
+ else
+ fun_l13_n960(x)
+ end
+end
+
+def fun_l12_n142(x)
+ if (x < 1)
+ fun_l13_n196(x)
+ else
+ fun_l13_n794(x)
+ end
+end
+
+def fun_l12_n143(x)
+ if (x < 1)
+ fun_l13_n993(x)
+ else
+ fun_l13_n426(x)
+ end
+end
+
+def fun_l12_n144(x)
+ if (x < 1)
+ fun_l13_n926(x)
+ else
+ fun_l13_n554(x)
+ end
+end
+
+def fun_l12_n145(x)
+ if (x < 1)
+ fun_l13_n839(x)
+ else
+ fun_l13_n987(x)
+ end
+end
+
+def fun_l12_n146(x)
+ if (x < 1)
+ fun_l13_n412(x)
+ else
+ fun_l13_n359(x)
+ end
+end
+
+def fun_l12_n147(x)
+ if (x < 1)
+ fun_l13_n147(x)
+ else
+ fun_l13_n640(x)
+ end
+end
+
+def fun_l12_n148(x)
+ if (x < 1)
+ fun_l13_n831(x)
+ else
+ fun_l13_n862(x)
+ end
+end
+
+def fun_l12_n149(x)
+ if (x < 1)
+ fun_l13_n161(x)
+ else
+ fun_l13_n396(x)
+ end
+end
+
+def fun_l12_n150(x)
+ if (x < 1)
+ fun_l13_n734(x)
+ else
+ fun_l13_n226(x)
+ end
+end
+
+def fun_l12_n151(x)
+ if (x < 1)
+ fun_l13_n390(x)
+ else
+ fun_l13_n396(x)
+ end
+end
+
+def fun_l12_n152(x)
+ if (x < 1)
+ fun_l13_n722(x)
+ else
+ fun_l13_n939(x)
+ end
+end
+
+def fun_l12_n153(x)
+ if (x < 1)
+ fun_l13_n554(x)
+ else
+ fun_l13_n461(x)
+ end
+end
+
+def fun_l12_n154(x)
+ if (x < 1)
+ fun_l13_n223(x)
+ else
+ fun_l13_n502(x)
+ end
+end
+
+def fun_l12_n155(x)
+ if (x < 1)
+ fun_l13_n526(x)
+ else
+ fun_l13_n949(x)
+ end
+end
+
+def fun_l12_n156(x)
+ if (x < 1)
+ fun_l13_n764(x)
+ else
+ fun_l13_n290(x)
+ end
+end
+
+def fun_l12_n157(x)
+ if (x < 1)
+ fun_l13_n904(x)
+ else
+ fun_l13_n562(x)
+ end
+end
+
+def fun_l12_n158(x)
+ if (x < 1)
+ fun_l13_n308(x)
+ else
+ fun_l13_n646(x)
+ end
+end
+
+def fun_l12_n159(x)
+ if (x < 1)
+ fun_l13_n417(x)
+ else
+ fun_l13_n576(x)
+ end
+end
+
+def fun_l12_n160(x)
+ if (x < 1)
+ fun_l13_n846(x)
+ else
+ fun_l13_n989(x)
+ end
+end
+
+def fun_l12_n161(x)
+ if (x < 1)
+ fun_l13_n59(x)
+ else
+ fun_l13_n877(x)
+ end
+end
+
+def fun_l12_n162(x)
+ if (x < 1)
+ fun_l13_n194(x)
+ else
+ fun_l13_n654(x)
+ end
+end
+
+def fun_l12_n163(x)
+ if (x < 1)
+ fun_l13_n350(x)
+ else
+ fun_l13_n412(x)
+ end
+end
+
+def fun_l12_n164(x)
+ if (x < 1)
+ fun_l13_n482(x)
+ else
+ fun_l13_n820(x)
+ end
+end
+
+def fun_l12_n165(x)
+ if (x < 1)
+ fun_l13_n251(x)
+ else
+ fun_l13_n421(x)
+ end
+end
+
+def fun_l12_n166(x)
+ if (x < 1)
+ fun_l13_n832(x)
+ else
+ fun_l13_n505(x)
+ end
+end
+
+def fun_l12_n167(x)
+ if (x < 1)
+ fun_l13_n316(x)
+ else
+ fun_l13_n355(x)
+ end
+end
+
+def fun_l12_n168(x)
+ if (x < 1)
+ fun_l13_n325(x)
+ else
+ fun_l13_n755(x)
+ end
+end
+
+def fun_l12_n169(x)
+ if (x < 1)
+ fun_l13_n536(x)
+ else
+ fun_l13_n753(x)
+ end
+end
+
+def fun_l12_n170(x)
+ if (x < 1)
+ fun_l13_n819(x)
+ else
+ fun_l13_n532(x)
+ end
+end
+
+def fun_l12_n171(x)
+ if (x < 1)
+ fun_l13_n633(x)
+ else
+ fun_l13_n96(x)
+ end
+end
+
+def fun_l12_n172(x)
+ if (x < 1)
+ fun_l13_n229(x)
+ else
+ fun_l13_n105(x)
+ end
+end
+
+def fun_l12_n173(x)
+ if (x < 1)
+ fun_l13_n796(x)
+ else
+ fun_l13_n466(x)
+ end
+end
+
+def fun_l12_n174(x)
+ if (x < 1)
+ fun_l13_n520(x)
+ else
+ fun_l13_n329(x)
+ end
+end
+
+def fun_l12_n175(x)
+ if (x < 1)
+ fun_l13_n358(x)
+ else
+ fun_l13_n201(x)
+ end
+end
+
+def fun_l12_n176(x)
+ if (x < 1)
+ fun_l13_n42(x)
+ else
+ fun_l13_n649(x)
+ end
+end
+
+def fun_l12_n177(x)
+ if (x < 1)
+ fun_l13_n933(x)
+ else
+ fun_l13_n719(x)
+ end
+end
+
+def fun_l12_n178(x)
+ if (x < 1)
+ fun_l13_n236(x)
+ else
+ fun_l13_n723(x)
+ end
+end
+
+def fun_l12_n179(x)
+ if (x < 1)
+ fun_l13_n992(x)
+ else
+ fun_l13_n436(x)
+ end
+end
+
+def fun_l12_n180(x)
+ if (x < 1)
+ fun_l13_n221(x)
+ else
+ fun_l13_n294(x)
+ end
+end
+
+def fun_l12_n181(x)
+ if (x < 1)
+ fun_l13_n580(x)
+ else
+ fun_l13_n939(x)
+ end
+end
+
+def fun_l12_n182(x)
+ if (x < 1)
+ fun_l13_n608(x)
+ else
+ fun_l13_n709(x)
+ end
+end
+
+def fun_l12_n183(x)
+ if (x < 1)
+ fun_l13_n644(x)
+ else
+ fun_l13_n717(x)
+ end
+end
+
+def fun_l12_n184(x)
+ if (x < 1)
+ fun_l13_n605(x)
+ else
+ fun_l13_n665(x)
+ end
+end
+
+def fun_l12_n185(x)
+ if (x < 1)
+ fun_l13_n729(x)
+ else
+ fun_l13_n876(x)
+ end
+end
+
+def fun_l12_n186(x)
+ if (x < 1)
+ fun_l13_n43(x)
+ else
+ fun_l13_n366(x)
+ end
+end
+
+def fun_l12_n187(x)
+ if (x < 1)
+ fun_l13_n401(x)
+ else
+ fun_l13_n610(x)
+ end
+end
+
+def fun_l12_n188(x)
+ if (x < 1)
+ fun_l13_n489(x)
+ else
+ fun_l13_n107(x)
+ end
+end
+
+def fun_l12_n189(x)
+ if (x < 1)
+ fun_l13_n859(x)
+ else
+ fun_l13_n355(x)
+ end
+end
+
+def fun_l12_n190(x)
+ if (x < 1)
+ fun_l13_n631(x)
+ else
+ fun_l13_n399(x)
+ end
+end
+
+def fun_l12_n191(x)
+ if (x < 1)
+ fun_l13_n332(x)
+ else
+ fun_l13_n333(x)
+ end
+end
+
+def fun_l12_n192(x)
+ if (x < 1)
+ fun_l13_n535(x)
+ else
+ fun_l13_n191(x)
+ end
+end
+
+def fun_l12_n193(x)
+ if (x < 1)
+ fun_l13_n157(x)
+ else
+ fun_l13_n927(x)
+ end
+end
+
+def fun_l12_n194(x)
+ if (x < 1)
+ fun_l13_n733(x)
+ else
+ fun_l13_n798(x)
+ end
+end
+
+def fun_l12_n195(x)
+ if (x < 1)
+ fun_l13_n31(x)
+ else
+ fun_l13_n703(x)
+ end
+end
+
+def fun_l12_n196(x)
+ if (x < 1)
+ fun_l13_n976(x)
+ else
+ fun_l13_n862(x)
+ end
+end
+
+def fun_l12_n197(x)
+ if (x < 1)
+ fun_l13_n267(x)
+ else
+ fun_l13_n803(x)
+ end
+end
+
+def fun_l12_n198(x)
+ if (x < 1)
+ fun_l13_n598(x)
+ else
+ fun_l13_n255(x)
+ end
+end
+
+def fun_l12_n199(x)
+ if (x < 1)
+ fun_l13_n566(x)
+ else
+ fun_l13_n668(x)
+ end
+end
+
+def fun_l12_n200(x)
+ if (x < 1)
+ fun_l13_n48(x)
+ else
+ fun_l13_n406(x)
+ end
+end
+
+def fun_l12_n201(x)
+ if (x < 1)
+ fun_l13_n971(x)
+ else
+ fun_l13_n225(x)
+ end
+end
+
+def fun_l12_n202(x)
+ if (x < 1)
+ fun_l13_n120(x)
+ else
+ fun_l13_n72(x)
+ end
+end
+
+def fun_l12_n203(x)
+ if (x < 1)
+ fun_l13_n333(x)
+ else
+ fun_l13_n381(x)
+ end
+end
+
+def fun_l12_n204(x)
+ if (x < 1)
+ fun_l13_n558(x)
+ else
+ fun_l13_n474(x)
+ end
+end
+
+def fun_l12_n205(x)
+ if (x < 1)
+ fun_l13_n796(x)
+ else
+ fun_l13_n420(x)
+ end
+end
+
+def fun_l12_n206(x)
+ if (x < 1)
+ fun_l13_n287(x)
+ else
+ fun_l13_n43(x)
+ end
+end
+
+def fun_l12_n207(x)
+ if (x < 1)
+ fun_l13_n778(x)
+ else
+ fun_l13_n560(x)
+ end
+end
+
+def fun_l12_n208(x)
+ if (x < 1)
+ fun_l13_n707(x)
+ else
+ fun_l13_n824(x)
+ end
+end
+
+def fun_l12_n209(x)
+ if (x < 1)
+ fun_l13_n788(x)
+ else
+ fun_l13_n625(x)
+ end
+end
+
+def fun_l12_n210(x)
+ if (x < 1)
+ fun_l13_n818(x)
+ else
+ fun_l13_n667(x)
+ end
+end
+
+def fun_l12_n211(x)
+ if (x < 1)
+ fun_l13_n710(x)
+ else
+ fun_l13_n508(x)
+ end
+end
+
+def fun_l12_n212(x)
+ if (x < 1)
+ fun_l13_n497(x)
+ else
+ fun_l13_n20(x)
+ end
+end
+
+def fun_l12_n213(x)
+ if (x < 1)
+ fun_l13_n648(x)
+ else
+ fun_l13_n33(x)
+ end
+end
+
+def fun_l12_n214(x)
+ if (x < 1)
+ fun_l13_n404(x)
+ else
+ fun_l13_n918(x)
+ end
+end
+
+def fun_l12_n215(x)
+ if (x < 1)
+ fun_l13_n595(x)
+ else
+ fun_l13_n440(x)
+ end
+end
+
+def fun_l12_n216(x)
+ if (x < 1)
+ fun_l13_n302(x)
+ else
+ fun_l13_n388(x)
+ end
+end
+
+def fun_l12_n217(x)
+ if (x < 1)
+ fun_l13_n301(x)
+ else
+ fun_l13_n416(x)
+ end
+end
+
+def fun_l12_n218(x)
+ if (x < 1)
+ fun_l13_n114(x)
+ else
+ fun_l13_n650(x)
+ end
+end
+
+def fun_l12_n219(x)
+ if (x < 1)
+ fun_l13_n221(x)
+ else
+ fun_l13_n539(x)
+ end
+end
+
+def fun_l12_n220(x)
+ if (x < 1)
+ fun_l13_n529(x)
+ else
+ fun_l13_n438(x)
+ end
+end
+
+def fun_l12_n221(x)
+ if (x < 1)
+ fun_l13_n528(x)
+ else
+ fun_l13_n284(x)
+ end
+end
+
+def fun_l12_n222(x)
+ if (x < 1)
+ fun_l13_n746(x)
+ else
+ fun_l13_n634(x)
+ end
+end
+
+def fun_l12_n223(x)
+ if (x < 1)
+ fun_l13_n726(x)
+ else
+ fun_l13_n142(x)
+ end
+end
+
+def fun_l12_n224(x)
+ if (x < 1)
+ fun_l13_n57(x)
+ else
+ fun_l13_n625(x)
+ end
+end
+
+def fun_l12_n225(x)
+ if (x < 1)
+ fun_l13_n739(x)
+ else
+ fun_l13_n667(x)
+ end
+end
+
+def fun_l12_n226(x)
+ if (x < 1)
+ fun_l13_n693(x)
+ else
+ fun_l13_n819(x)
+ end
+end
+
+def fun_l12_n227(x)
+ if (x < 1)
+ fun_l13_n316(x)
+ else
+ fun_l13_n866(x)
+ end
+end
+
+def fun_l12_n228(x)
+ if (x < 1)
+ fun_l13_n88(x)
+ else
+ fun_l13_n336(x)
+ end
+end
+
+def fun_l12_n229(x)
+ if (x < 1)
+ fun_l13_n387(x)
+ else
+ fun_l13_n226(x)
+ end
+end
+
+def fun_l12_n230(x)
+ if (x < 1)
+ fun_l13_n644(x)
+ else
+ fun_l13_n933(x)
+ end
+end
+
+def fun_l12_n231(x)
+ if (x < 1)
+ fun_l13_n952(x)
+ else
+ fun_l13_n747(x)
+ end
+end
+
+def fun_l12_n232(x)
+ if (x < 1)
+ fun_l13_n107(x)
+ else
+ fun_l13_n0(x)
+ end
+end
+
+def fun_l12_n233(x)
+ if (x < 1)
+ fun_l13_n589(x)
+ else
+ fun_l13_n712(x)
+ end
+end
+
+def fun_l12_n234(x)
+ if (x < 1)
+ fun_l13_n429(x)
+ else
+ fun_l13_n845(x)
+ end
+end
+
+def fun_l12_n235(x)
+ if (x < 1)
+ fun_l13_n733(x)
+ else
+ fun_l13_n203(x)
+ end
+end
+
+def fun_l12_n236(x)
+ if (x < 1)
+ fun_l13_n842(x)
+ else
+ fun_l13_n134(x)
+ end
+end
+
+def fun_l12_n237(x)
+ if (x < 1)
+ fun_l13_n114(x)
+ else
+ fun_l13_n794(x)
+ end
+end
+
+def fun_l12_n238(x)
+ if (x < 1)
+ fun_l13_n463(x)
+ else
+ fun_l13_n127(x)
+ end
+end
+
+def fun_l12_n239(x)
+ if (x < 1)
+ fun_l13_n443(x)
+ else
+ fun_l13_n13(x)
+ end
+end
+
+def fun_l12_n240(x)
+ if (x < 1)
+ fun_l13_n713(x)
+ else
+ fun_l13_n447(x)
+ end
+end
+
+def fun_l12_n241(x)
+ if (x < 1)
+ fun_l13_n404(x)
+ else
+ fun_l13_n796(x)
+ end
+end
+
+def fun_l12_n242(x)
+ if (x < 1)
+ fun_l13_n277(x)
+ else
+ fun_l13_n106(x)
+ end
+end
+
+def fun_l12_n243(x)
+ if (x < 1)
+ fun_l13_n584(x)
+ else
+ fun_l13_n262(x)
+ end
+end
+
+def fun_l12_n244(x)
+ if (x < 1)
+ fun_l13_n670(x)
+ else
+ fun_l13_n989(x)
+ end
+end
+
+def fun_l12_n245(x)
+ if (x < 1)
+ fun_l13_n588(x)
+ else
+ fun_l13_n513(x)
+ end
+end
+
+def fun_l12_n246(x)
+ if (x < 1)
+ fun_l13_n98(x)
+ else
+ fun_l13_n400(x)
+ end
+end
+
+def fun_l12_n247(x)
+ if (x < 1)
+ fun_l13_n119(x)
+ else
+ fun_l13_n321(x)
+ end
+end
+
+def fun_l12_n248(x)
+ if (x < 1)
+ fun_l13_n157(x)
+ else
+ fun_l13_n557(x)
+ end
+end
+
+def fun_l12_n249(x)
+ if (x < 1)
+ fun_l13_n243(x)
+ else
+ fun_l13_n596(x)
+ end
+end
+
+def fun_l12_n250(x)
+ if (x < 1)
+ fun_l13_n280(x)
+ else
+ fun_l13_n779(x)
+ end
+end
+
+def fun_l12_n251(x)
+ if (x < 1)
+ fun_l13_n437(x)
+ else
+ fun_l13_n829(x)
+ end
+end
+
+def fun_l12_n252(x)
+ if (x < 1)
+ fun_l13_n472(x)
+ else
+ fun_l13_n224(x)
+ end
+end
+
+def fun_l12_n253(x)
+ if (x < 1)
+ fun_l13_n151(x)
+ else
+ fun_l13_n168(x)
+ end
+end
+
+def fun_l12_n254(x)
+ if (x < 1)
+ fun_l13_n724(x)
+ else
+ fun_l13_n355(x)
+ end
+end
+
+def fun_l12_n255(x)
+ if (x < 1)
+ fun_l13_n27(x)
+ else
+ fun_l13_n776(x)
+ end
+end
+
+def fun_l12_n256(x)
+ if (x < 1)
+ fun_l13_n116(x)
+ else
+ fun_l13_n52(x)
+ end
+end
+
+def fun_l12_n257(x)
+ if (x < 1)
+ fun_l13_n201(x)
+ else
+ fun_l13_n982(x)
+ end
+end
+
+def fun_l12_n258(x)
+ if (x < 1)
+ fun_l13_n152(x)
+ else
+ fun_l13_n818(x)
+ end
+end
+
+def fun_l12_n259(x)
+ if (x < 1)
+ fun_l13_n859(x)
+ else
+ fun_l13_n555(x)
+ end
+end
+
+def fun_l12_n260(x)
+ if (x < 1)
+ fun_l13_n29(x)
+ else
+ fun_l13_n416(x)
+ end
+end
+
+def fun_l12_n261(x)
+ if (x < 1)
+ fun_l13_n811(x)
+ else
+ fun_l13_n827(x)
+ end
+end
+
+def fun_l12_n262(x)
+ if (x < 1)
+ fun_l13_n867(x)
+ else
+ fun_l13_n298(x)
+ end
+end
+
+def fun_l12_n263(x)
+ if (x < 1)
+ fun_l13_n464(x)
+ else
+ fun_l13_n420(x)
+ end
+end
+
+def fun_l12_n264(x)
+ if (x < 1)
+ fun_l13_n494(x)
+ else
+ fun_l13_n368(x)
+ end
+end
+
+def fun_l12_n265(x)
+ if (x < 1)
+ fun_l13_n959(x)
+ else
+ fun_l13_n425(x)
+ end
+end
+
+def fun_l12_n266(x)
+ if (x < 1)
+ fun_l13_n841(x)
+ else
+ fun_l13_n874(x)
+ end
+end
+
+def fun_l12_n267(x)
+ if (x < 1)
+ fun_l13_n885(x)
+ else
+ fun_l13_n631(x)
+ end
+end
+
+def fun_l12_n268(x)
+ if (x < 1)
+ fun_l13_n645(x)
+ else
+ fun_l13_n342(x)
+ end
+end
+
+def fun_l12_n269(x)
+ if (x < 1)
+ fun_l13_n4(x)
+ else
+ fun_l13_n81(x)
+ end
+end
+
+def fun_l12_n270(x)
+ if (x < 1)
+ fun_l13_n44(x)
+ else
+ fun_l13_n924(x)
+ end
+end
+
+def fun_l12_n271(x)
+ if (x < 1)
+ fun_l13_n955(x)
+ else
+ fun_l13_n834(x)
+ end
+end
+
+def fun_l12_n272(x)
+ if (x < 1)
+ fun_l13_n969(x)
+ else
+ fun_l13_n699(x)
+ end
+end
+
+def fun_l12_n273(x)
+ if (x < 1)
+ fun_l13_n590(x)
+ else
+ fun_l13_n608(x)
+ end
+end
+
+def fun_l12_n274(x)
+ if (x < 1)
+ fun_l13_n170(x)
+ else
+ fun_l13_n343(x)
+ end
+end
+
+def fun_l12_n275(x)
+ if (x < 1)
+ fun_l13_n317(x)
+ else
+ fun_l13_n998(x)
+ end
+end
+
+def fun_l12_n276(x)
+ if (x < 1)
+ fun_l13_n864(x)
+ else
+ fun_l13_n644(x)
+ end
+end
+
+def fun_l12_n277(x)
+ if (x < 1)
+ fun_l13_n42(x)
+ else
+ fun_l13_n663(x)
+ end
+end
+
+def fun_l12_n278(x)
+ if (x < 1)
+ fun_l13_n39(x)
+ else
+ fun_l13_n624(x)
+ end
+end
+
+def fun_l12_n279(x)
+ if (x < 1)
+ fun_l13_n578(x)
+ else
+ fun_l13_n592(x)
+ end
+end
+
+def fun_l12_n280(x)
+ if (x < 1)
+ fun_l13_n345(x)
+ else
+ fun_l13_n462(x)
+ end
+end
+
+def fun_l12_n281(x)
+ if (x < 1)
+ fun_l13_n741(x)
+ else
+ fun_l13_n93(x)
+ end
+end
+
+def fun_l12_n282(x)
+ if (x < 1)
+ fun_l13_n845(x)
+ else
+ fun_l13_n981(x)
+ end
+end
+
+def fun_l12_n283(x)
+ if (x < 1)
+ fun_l13_n479(x)
+ else
+ fun_l13_n823(x)
+ end
+end
+
+def fun_l12_n284(x)
+ if (x < 1)
+ fun_l13_n201(x)
+ else
+ fun_l13_n526(x)
+ end
+end
+
+def fun_l12_n285(x)
+ if (x < 1)
+ fun_l13_n890(x)
+ else
+ fun_l13_n237(x)
+ end
+end
+
+def fun_l12_n286(x)
+ if (x < 1)
+ fun_l13_n377(x)
+ else
+ fun_l13_n249(x)
+ end
+end
+
+def fun_l12_n287(x)
+ if (x < 1)
+ fun_l13_n147(x)
+ else
+ fun_l13_n306(x)
+ end
+end
+
+def fun_l12_n288(x)
+ if (x < 1)
+ fun_l13_n822(x)
+ else
+ fun_l13_n220(x)
+ end
+end
+
+def fun_l12_n289(x)
+ if (x < 1)
+ fun_l13_n106(x)
+ else
+ fun_l13_n648(x)
+ end
+end
+
+def fun_l12_n290(x)
+ if (x < 1)
+ fun_l13_n278(x)
+ else
+ fun_l13_n255(x)
+ end
+end
+
+def fun_l12_n291(x)
+ if (x < 1)
+ fun_l13_n994(x)
+ else
+ fun_l13_n36(x)
+ end
+end
+
+def fun_l12_n292(x)
+ if (x < 1)
+ fun_l13_n731(x)
+ else
+ fun_l13_n473(x)
+ end
+end
+
+def fun_l12_n293(x)
+ if (x < 1)
+ fun_l13_n321(x)
+ else
+ fun_l13_n518(x)
+ end
+end
+
+def fun_l12_n294(x)
+ if (x < 1)
+ fun_l13_n91(x)
+ else
+ fun_l13_n765(x)
+ end
+end
+
+def fun_l12_n295(x)
+ if (x < 1)
+ fun_l13_n39(x)
+ else
+ fun_l13_n639(x)
+ end
+end
+
+def fun_l12_n296(x)
+ if (x < 1)
+ fun_l13_n800(x)
+ else
+ fun_l13_n821(x)
+ end
+end
+
+def fun_l12_n297(x)
+ if (x < 1)
+ fun_l13_n553(x)
+ else
+ fun_l13_n898(x)
+ end
+end
+
+def fun_l12_n298(x)
+ if (x < 1)
+ fun_l13_n487(x)
+ else
+ fun_l13_n470(x)
+ end
+end
+
+def fun_l12_n299(x)
+ if (x < 1)
+ fun_l13_n743(x)
+ else
+ fun_l13_n684(x)
+ end
+end
+
+def fun_l12_n300(x)
+ if (x < 1)
+ fun_l13_n177(x)
+ else
+ fun_l13_n375(x)
+ end
+end
+
+def fun_l12_n301(x)
+ if (x < 1)
+ fun_l13_n714(x)
+ else
+ fun_l13_n922(x)
+ end
+end
+
+def fun_l12_n302(x)
+ if (x < 1)
+ fun_l13_n845(x)
+ else
+ fun_l13_n93(x)
+ end
+end
+
+def fun_l12_n303(x)
+ if (x < 1)
+ fun_l13_n806(x)
+ else
+ fun_l13_n706(x)
+ end
+end
+
+def fun_l12_n304(x)
+ if (x < 1)
+ fun_l13_n428(x)
+ else
+ fun_l13_n942(x)
+ end
+end
+
+def fun_l12_n305(x)
+ if (x < 1)
+ fun_l13_n170(x)
+ else
+ fun_l13_n634(x)
+ end
+end
+
+def fun_l12_n306(x)
+ if (x < 1)
+ fun_l13_n998(x)
+ else
+ fun_l13_n224(x)
+ end
+end
+
+def fun_l12_n307(x)
+ if (x < 1)
+ fun_l13_n15(x)
+ else
+ fun_l13_n753(x)
+ end
+end
+
+def fun_l12_n308(x)
+ if (x < 1)
+ fun_l13_n323(x)
+ else
+ fun_l13_n846(x)
+ end
+end
+
+def fun_l12_n309(x)
+ if (x < 1)
+ fun_l13_n779(x)
+ else
+ fun_l13_n330(x)
+ end
+end
+
+def fun_l12_n310(x)
+ if (x < 1)
+ fun_l13_n652(x)
+ else
+ fun_l13_n560(x)
+ end
+end
+
+def fun_l12_n311(x)
+ if (x < 1)
+ fun_l13_n54(x)
+ else
+ fun_l13_n144(x)
+ end
+end
+
+def fun_l12_n312(x)
+ if (x < 1)
+ fun_l13_n674(x)
+ else
+ fun_l13_n779(x)
+ end
+end
+
+def fun_l12_n313(x)
+ if (x < 1)
+ fun_l13_n975(x)
+ else
+ fun_l13_n109(x)
+ end
+end
+
+def fun_l12_n314(x)
+ if (x < 1)
+ fun_l13_n997(x)
+ else
+ fun_l13_n827(x)
+ end
+end
+
+def fun_l12_n315(x)
+ if (x < 1)
+ fun_l13_n822(x)
+ else
+ fun_l13_n349(x)
+ end
+end
+
+def fun_l12_n316(x)
+ if (x < 1)
+ fun_l13_n516(x)
+ else
+ fun_l13_n974(x)
+ end
+end
+
+def fun_l12_n317(x)
+ if (x < 1)
+ fun_l13_n538(x)
+ else
+ fun_l13_n786(x)
+ end
+end
+
+def fun_l12_n318(x)
+ if (x < 1)
+ fun_l13_n125(x)
+ else
+ fun_l13_n809(x)
+ end
+end
+
+def fun_l12_n319(x)
+ if (x < 1)
+ fun_l13_n642(x)
+ else
+ fun_l13_n188(x)
+ end
+end
+
+def fun_l12_n320(x)
+ if (x < 1)
+ fun_l13_n904(x)
+ else
+ fun_l13_n396(x)
+ end
+end
+
+def fun_l12_n321(x)
+ if (x < 1)
+ fun_l13_n278(x)
+ else
+ fun_l13_n752(x)
+ end
+end
+
+def fun_l12_n322(x)
+ if (x < 1)
+ fun_l13_n566(x)
+ else
+ fun_l13_n894(x)
+ end
+end
+
+def fun_l12_n323(x)
+ if (x < 1)
+ fun_l13_n357(x)
+ else
+ fun_l13_n742(x)
+ end
+end
+
+def fun_l12_n324(x)
+ if (x < 1)
+ fun_l13_n667(x)
+ else
+ fun_l13_n764(x)
+ end
+end
+
+def fun_l12_n325(x)
+ if (x < 1)
+ fun_l13_n333(x)
+ else
+ fun_l13_n445(x)
+ end
+end
+
+def fun_l12_n326(x)
+ if (x < 1)
+ fun_l13_n669(x)
+ else
+ fun_l13_n484(x)
+ end
+end
+
+def fun_l12_n327(x)
+ if (x < 1)
+ fun_l13_n662(x)
+ else
+ fun_l13_n610(x)
+ end
+end
+
+def fun_l12_n328(x)
+ if (x < 1)
+ fun_l13_n869(x)
+ else
+ fun_l13_n993(x)
+ end
+end
+
+def fun_l12_n329(x)
+ if (x < 1)
+ fun_l13_n305(x)
+ else
+ fun_l13_n45(x)
+ end
+end
+
+def fun_l12_n330(x)
+ if (x < 1)
+ fun_l13_n32(x)
+ else
+ fun_l13_n253(x)
+ end
+end
+
+def fun_l12_n331(x)
+ if (x < 1)
+ fun_l13_n45(x)
+ else
+ fun_l13_n327(x)
+ end
+end
+
+def fun_l12_n332(x)
+ if (x < 1)
+ fun_l13_n685(x)
+ else
+ fun_l13_n562(x)
+ end
+end
+
+def fun_l12_n333(x)
+ if (x < 1)
+ fun_l13_n274(x)
+ else
+ fun_l13_n461(x)
+ end
+end
+
+def fun_l12_n334(x)
+ if (x < 1)
+ fun_l13_n93(x)
+ else
+ fun_l13_n7(x)
+ end
+end
+
+def fun_l12_n335(x)
+ if (x < 1)
+ fun_l13_n742(x)
+ else
+ fun_l13_n259(x)
+ end
+end
+
+def fun_l12_n336(x)
+ if (x < 1)
+ fun_l13_n518(x)
+ else
+ fun_l13_n108(x)
+ end
+end
+
+def fun_l12_n337(x)
+ if (x < 1)
+ fun_l13_n439(x)
+ else
+ fun_l13_n21(x)
+ end
+end
+
+def fun_l12_n338(x)
+ if (x < 1)
+ fun_l13_n34(x)
+ else
+ fun_l13_n869(x)
+ end
+end
+
+def fun_l12_n339(x)
+ if (x < 1)
+ fun_l13_n995(x)
+ else
+ fun_l13_n810(x)
+ end
+end
+
+def fun_l12_n340(x)
+ if (x < 1)
+ fun_l13_n640(x)
+ else
+ fun_l13_n108(x)
+ end
+end
+
+def fun_l12_n341(x)
+ if (x < 1)
+ fun_l13_n332(x)
+ else
+ fun_l13_n174(x)
+ end
+end
+
+def fun_l12_n342(x)
+ if (x < 1)
+ fun_l13_n425(x)
+ else
+ fun_l13_n523(x)
+ end
+end
+
+def fun_l12_n343(x)
+ if (x < 1)
+ fun_l13_n886(x)
+ else
+ fun_l13_n9(x)
+ end
+end
+
+def fun_l12_n344(x)
+ if (x < 1)
+ fun_l13_n644(x)
+ else
+ fun_l13_n558(x)
+ end
+end
+
+def fun_l12_n345(x)
+ if (x < 1)
+ fun_l13_n40(x)
+ else
+ fun_l13_n569(x)
+ end
+end
+
+def fun_l12_n346(x)
+ if (x < 1)
+ fun_l13_n530(x)
+ else
+ fun_l13_n52(x)
+ end
+end
+
+def fun_l12_n347(x)
+ if (x < 1)
+ fun_l13_n624(x)
+ else
+ fun_l13_n525(x)
+ end
+end
+
+def fun_l12_n348(x)
+ if (x < 1)
+ fun_l13_n106(x)
+ else
+ fun_l13_n101(x)
+ end
+end
+
+def fun_l12_n349(x)
+ if (x < 1)
+ fun_l13_n164(x)
+ else
+ fun_l13_n675(x)
+ end
+end
+
+def fun_l12_n350(x)
+ if (x < 1)
+ fun_l13_n349(x)
+ else
+ fun_l13_n125(x)
+ end
+end
+
+def fun_l12_n351(x)
+ if (x < 1)
+ fun_l13_n536(x)
+ else
+ fun_l13_n949(x)
+ end
+end
+
+def fun_l12_n352(x)
+ if (x < 1)
+ fun_l13_n872(x)
+ else
+ fun_l13_n678(x)
+ end
+end
+
+def fun_l12_n353(x)
+ if (x < 1)
+ fun_l13_n566(x)
+ else
+ fun_l13_n576(x)
+ end
+end
+
+def fun_l12_n354(x)
+ if (x < 1)
+ fun_l13_n978(x)
+ else
+ fun_l13_n539(x)
+ end
+end
+
+def fun_l12_n355(x)
+ if (x < 1)
+ fun_l13_n929(x)
+ else
+ fun_l13_n301(x)
+ end
+end
+
+def fun_l12_n356(x)
+ if (x < 1)
+ fun_l13_n768(x)
+ else
+ fun_l13_n292(x)
+ end
+end
+
+def fun_l12_n357(x)
+ if (x < 1)
+ fun_l13_n873(x)
+ else
+ fun_l13_n201(x)
+ end
+end
+
+def fun_l12_n358(x)
+ if (x < 1)
+ fun_l13_n852(x)
+ else
+ fun_l13_n144(x)
+ end
+end
+
+def fun_l12_n359(x)
+ if (x < 1)
+ fun_l13_n220(x)
+ else
+ fun_l13_n318(x)
+ end
+end
+
+def fun_l12_n360(x)
+ if (x < 1)
+ fun_l13_n339(x)
+ else
+ fun_l13_n896(x)
+ end
+end
+
+def fun_l12_n361(x)
+ if (x < 1)
+ fun_l13_n896(x)
+ else
+ fun_l13_n611(x)
+ end
+end
+
+def fun_l12_n362(x)
+ if (x < 1)
+ fun_l13_n237(x)
+ else
+ fun_l13_n781(x)
+ end
+end
+
+def fun_l12_n363(x)
+ if (x < 1)
+ fun_l13_n994(x)
+ else
+ fun_l13_n306(x)
+ end
+end
+
+def fun_l12_n364(x)
+ if (x < 1)
+ fun_l13_n437(x)
+ else
+ fun_l13_n634(x)
+ end
+end
+
+def fun_l12_n365(x)
+ if (x < 1)
+ fun_l13_n367(x)
+ else
+ fun_l13_n798(x)
+ end
+end
+
+def fun_l12_n366(x)
+ if (x < 1)
+ fun_l13_n831(x)
+ else
+ fun_l13_n352(x)
+ end
+end
+
+def fun_l12_n367(x)
+ if (x < 1)
+ fun_l13_n554(x)
+ else
+ fun_l13_n999(x)
+ end
+end
+
+def fun_l12_n368(x)
+ if (x < 1)
+ fun_l13_n214(x)
+ else
+ fun_l13_n67(x)
+ end
+end
+
+def fun_l12_n369(x)
+ if (x < 1)
+ fun_l13_n628(x)
+ else
+ fun_l13_n637(x)
+ end
+end
+
+def fun_l12_n370(x)
+ if (x < 1)
+ fun_l13_n42(x)
+ else
+ fun_l13_n631(x)
+ end
+end
+
+def fun_l12_n371(x)
+ if (x < 1)
+ fun_l13_n53(x)
+ else
+ fun_l13_n226(x)
+ end
+end
+
+def fun_l12_n372(x)
+ if (x < 1)
+ fun_l13_n810(x)
+ else
+ fun_l13_n853(x)
+ end
+end
+
+def fun_l12_n373(x)
+ if (x < 1)
+ fun_l13_n257(x)
+ else
+ fun_l13_n480(x)
+ end
+end
+
+def fun_l12_n374(x)
+ if (x < 1)
+ fun_l13_n715(x)
+ else
+ fun_l13_n481(x)
+ end
+end
+
+def fun_l12_n375(x)
+ if (x < 1)
+ fun_l13_n499(x)
+ else
+ fun_l13_n694(x)
+ end
+end
+
+def fun_l12_n376(x)
+ if (x < 1)
+ fun_l13_n376(x)
+ else
+ fun_l13_n99(x)
+ end
+end
+
+def fun_l12_n377(x)
+ if (x < 1)
+ fun_l13_n672(x)
+ else
+ fun_l13_n421(x)
+ end
+end
+
+def fun_l12_n378(x)
+ if (x < 1)
+ fun_l13_n320(x)
+ else
+ fun_l13_n590(x)
+ end
+end
+
+def fun_l12_n379(x)
+ if (x < 1)
+ fun_l13_n678(x)
+ else
+ fun_l13_n727(x)
+ end
+end
+
+def fun_l12_n380(x)
+ if (x < 1)
+ fun_l13_n269(x)
+ else
+ fun_l13_n74(x)
+ end
+end
+
+def fun_l12_n381(x)
+ if (x < 1)
+ fun_l13_n838(x)
+ else
+ fun_l13_n105(x)
+ end
+end
+
+def fun_l12_n382(x)
+ if (x < 1)
+ fun_l13_n482(x)
+ else
+ fun_l13_n400(x)
+ end
+end
+
+def fun_l12_n383(x)
+ if (x < 1)
+ fun_l13_n376(x)
+ else
+ fun_l13_n829(x)
+ end
+end
+
+def fun_l12_n384(x)
+ if (x < 1)
+ fun_l13_n81(x)
+ else
+ fun_l13_n895(x)
+ end
+end
+
+def fun_l12_n385(x)
+ if (x < 1)
+ fun_l13_n718(x)
+ else
+ fun_l13_n641(x)
+ end
+end
+
+def fun_l12_n386(x)
+ if (x < 1)
+ fun_l13_n825(x)
+ else
+ fun_l13_n761(x)
+ end
+end
+
+def fun_l12_n387(x)
+ if (x < 1)
+ fun_l13_n930(x)
+ else
+ fun_l13_n204(x)
+ end
+end
+
+def fun_l12_n388(x)
+ if (x < 1)
+ fun_l13_n81(x)
+ else
+ fun_l13_n319(x)
+ end
+end
+
+def fun_l12_n389(x)
+ if (x < 1)
+ fun_l13_n40(x)
+ else
+ fun_l13_n57(x)
+ end
+end
+
+def fun_l12_n390(x)
+ if (x < 1)
+ fun_l13_n206(x)
+ else
+ fun_l13_n219(x)
+ end
+end
+
+def fun_l12_n391(x)
+ if (x < 1)
+ fun_l13_n538(x)
+ else
+ fun_l13_n239(x)
+ end
+end
+
+def fun_l12_n392(x)
+ if (x < 1)
+ fun_l13_n326(x)
+ else
+ fun_l13_n613(x)
+ end
+end
+
+def fun_l12_n393(x)
+ if (x < 1)
+ fun_l13_n860(x)
+ else
+ fun_l13_n712(x)
+ end
+end
+
+def fun_l12_n394(x)
+ if (x < 1)
+ fun_l13_n829(x)
+ else
+ fun_l13_n153(x)
+ end
+end
+
+def fun_l12_n395(x)
+ if (x < 1)
+ fun_l13_n734(x)
+ else
+ fun_l13_n926(x)
+ end
+end
+
+def fun_l12_n396(x)
+ if (x < 1)
+ fun_l13_n188(x)
+ else
+ fun_l13_n821(x)
+ end
+end
+
+def fun_l12_n397(x)
+ if (x < 1)
+ fun_l13_n161(x)
+ else
+ fun_l13_n284(x)
+ end
+end
+
+def fun_l12_n398(x)
+ if (x < 1)
+ fun_l13_n402(x)
+ else
+ fun_l13_n481(x)
+ end
+end
+
+def fun_l12_n399(x)
+ if (x < 1)
+ fun_l13_n469(x)
+ else
+ fun_l13_n348(x)
+ end
+end
+
+def fun_l12_n400(x)
+ if (x < 1)
+ fun_l13_n567(x)
+ else
+ fun_l13_n702(x)
+ end
+end
+
+def fun_l12_n401(x)
+ if (x < 1)
+ fun_l13_n787(x)
+ else
+ fun_l13_n5(x)
+ end
+end
+
+def fun_l12_n402(x)
+ if (x < 1)
+ fun_l13_n525(x)
+ else
+ fun_l13_n983(x)
+ end
+end
+
+def fun_l12_n403(x)
+ if (x < 1)
+ fun_l13_n185(x)
+ else
+ fun_l13_n315(x)
+ end
+end
+
+def fun_l12_n404(x)
+ if (x < 1)
+ fun_l13_n746(x)
+ else
+ fun_l13_n892(x)
+ end
+end
+
+def fun_l12_n405(x)
+ if (x < 1)
+ fun_l13_n990(x)
+ else
+ fun_l13_n868(x)
+ end
+end
+
+def fun_l12_n406(x)
+ if (x < 1)
+ fun_l13_n399(x)
+ else
+ fun_l13_n298(x)
+ end
+end
+
+def fun_l12_n407(x)
+ if (x < 1)
+ fun_l13_n283(x)
+ else
+ fun_l13_n87(x)
+ end
+end
+
+def fun_l12_n408(x)
+ if (x < 1)
+ fun_l13_n597(x)
+ else
+ fun_l13_n355(x)
+ end
+end
+
+def fun_l12_n409(x)
+ if (x < 1)
+ fun_l13_n517(x)
+ else
+ fun_l13_n700(x)
+ end
+end
+
+def fun_l12_n410(x)
+ if (x < 1)
+ fun_l13_n796(x)
+ else
+ fun_l13_n282(x)
+ end
+end
+
+def fun_l12_n411(x)
+ if (x < 1)
+ fun_l13_n876(x)
+ else
+ fun_l13_n562(x)
+ end
+end
+
+def fun_l12_n412(x)
+ if (x < 1)
+ fun_l13_n344(x)
+ else
+ fun_l13_n182(x)
+ end
+end
+
+def fun_l12_n413(x)
+ if (x < 1)
+ fun_l13_n879(x)
+ else
+ fun_l13_n443(x)
+ end
+end
+
+def fun_l12_n414(x)
+ if (x < 1)
+ fun_l13_n335(x)
+ else
+ fun_l13_n451(x)
+ end
+end
+
+def fun_l12_n415(x)
+ if (x < 1)
+ fun_l13_n112(x)
+ else
+ fun_l13_n391(x)
+ end
+end
+
+def fun_l12_n416(x)
+ if (x < 1)
+ fun_l13_n217(x)
+ else
+ fun_l13_n221(x)
+ end
+end
+
+def fun_l12_n417(x)
+ if (x < 1)
+ fun_l13_n113(x)
+ else
+ fun_l13_n563(x)
+ end
+end
+
+def fun_l12_n418(x)
+ if (x < 1)
+ fun_l13_n486(x)
+ else
+ fun_l13_n374(x)
+ end
+end
+
+def fun_l12_n419(x)
+ if (x < 1)
+ fun_l13_n970(x)
+ else
+ fun_l13_n393(x)
+ end
+end
+
+def fun_l12_n420(x)
+ if (x < 1)
+ fun_l13_n273(x)
+ else
+ fun_l13_n64(x)
+ end
+end
+
+def fun_l12_n421(x)
+ if (x < 1)
+ fun_l13_n69(x)
+ else
+ fun_l13_n158(x)
+ end
+end
+
+def fun_l12_n422(x)
+ if (x < 1)
+ fun_l13_n308(x)
+ else
+ fun_l13_n609(x)
+ end
+end
+
+def fun_l12_n423(x)
+ if (x < 1)
+ fun_l13_n964(x)
+ else
+ fun_l13_n36(x)
+ end
+end
+
+def fun_l12_n424(x)
+ if (x < 1)
+ fun_l13_n783(x)
+ else
+ fun_l13_n513(x)
+ end
+end
+
+def fun_l12_n425(x)
+ if (x < 1)
+ fun_l13_n792(x)
+ else
+ fun_l13_n960(x)
+ end
+end
+
+def fun_l12_n426(x)
+ if (x < 1)
+ fun_l13_n160(x)
+ else
+ fun_l13_n911(x)
+ end
+end
+
+def fun_l12_n427(x)
+ if (x < 1)
+ fun_l13_n374(x)
+ else
+ fun_l13_n672(x)
+ end
+end
+
+def fun_l12_n428(x)
+ if (x < 1)
+ fun_l13_n694(x)
+ else
+ fun_l13_n166(x)
+ end
+end
+
+def fun_l12_n429(x)
+ if (x < 1)
+ fun_l13_n807(x)
+ else
+ fun_l13_n929(x)
+ end
+end
+
+def fun_l12_n430(x)
+ if (x < 1)
+ fun_l13_n997(x)
+ else
+ fun_l13_n938(x)
+ end
+end
+
+def fun_l12_n431(x)
+ if (x < 1)
+ fun_l13_n934(x)
+ else
+ fun_l13_n365(x)
+ end
+end
+
+def fun_l12_n432(x)
+ if (x < 1)
+ fun_l13_n546(x)
+ else
+ fun_l13_n272(x)
+ end
+end
+
+def fun_l12_n433(x)
+ if (x < 1)
+ fun_l13_n176(x)
+ else
+ fun_l13_n629(x)
+ end
+end
+
+def fun_l12_n434(x)
+ if (x < 1)
+ fun_l13_n536(x)
+ else
+ fun_l13_n165(x)
+ end
+end
+
+def fun_l12_n435(x)
+ if (x < 1)
+ fun_l13_n915(x)
+ else
+ fun_l13_n823(x)
+ end
+end
+
+def fun_l12_n436(x)
+ if (x < 1)
+ fun_l13_n580(x)
+ else
+ fun_l13_n214(x)
+ end
+end
+
+def fun_l12_n437(x)
+ if (x < 1)
+ fun_l13_n353(x)
+ else
+ fun_l13_n626(x)
+ end
+end
+
+def fun_l12_n438(x)
+ if (x < 1)
+ fun_l13_n888(x)
+ else
+ fun_l13_n874(x)
+ end
+end
+
+def fun_l12_n439(x)
+ if (x < 1)
+ fun_l13_n670(x)
+ else
+ fun_l13_n279(x)
+ end
+end
+
+def fun_l12_n440(x)
+ if (x < 1)
+ fun_l13_n818(x)
+ else
+ fun_l13_n927(x)
+ end
+end
+
+def fun_l12_n441(x)
+ if (x < 1)
+ fun_l13_n686(x)
+ else
+ fun_l13_n32(x)
+ end
+end
+
+def fun_l12_n442(x)
+ if (x < 1)
+ fun_l13_n882(x)
+ else
+ fun_l13_n932(x)
+ end
+end
+
+def fun_l12_n443(x)
+ if (x < 1)
+ fun_l13_n677(x)
+ else
+ fun_l13_n267(x)
+ end
+end
+
+def fun_l12_n444(x)
+ if (x < 1)
+ fun_l13_n632(x)
+ else
+ fun_l13_n808(x)
+ end
+end
+
+def fun_l12_n445(x)
+ if (x < 1)
+ fun_l13_n159(x)
+ else
+ fun_l13_n251(x)
+ end
+end
+
+def fun_l12_n446(x)
+ if (x < 1)
+ fun_l13_n939(x)
+ else
+ fun_l13_n231(x)
+ end
+end
+
+def fun_l12_n447(x)
+ if (x < 1)
+ fun_l13_n971(x)
+ else
+ fun_l13_n103(x)
+ end
+end
+
+def fun_l12_n448(x)
+ if (x < 1)
+ fun_l13_n556(x)
+ else
+ fun_l13_n356(x)
+ end
+end
+
+def fun_l12_n449(x)
+ if (x < 1)
+ fun_l13_n999(x)
+ else
+ fun_l13_n722(x)
+ end
+end
+
+def fun_l12_n450(x)
+ if (x < 1)
+ fun_l13_n387(x)
+ else
+ fun_l13_n15(x)
+ end
+end
+
+def fun_l12_n451(x)
+ if (x < 1)
+ fun_l13_n736(x)
+ else
+ fun_l13_n869(x)
+ end
+end
+
+def fun_l12_n452(x)
+ if (x < 1)
+ fun_l13_n984(x)
+ else
+ fun_l13_n396(x)
+ end
+end
+
+def fun_l12_n453(x)
+ if (x < 1)
+ fun_l13_n375(x)
+ else
+ fun_l13_n275(x)
+ end
+end
+
+def fun_l12_n454(x)
+ if (x < 1)
+ fun_l13_n100(x)
+ else
+ fun_l13_n956(x)
+ end
+end
+
+def fun_l12_n455(x)
+ if (x < 1)
+ fun_l13_n575(x)
+ else
+ fun_l13_n22(x)
+ end
+end
+
+def fun_l12_n456(x)
+ if (x < 1)
+ fun_l13_n515(x)
+ else
+ fun_l13_n716(x)
+ end
+end
+
+def fun_l12_n457(x)
+ if (x < 1)
+ fun_l13_n953(x)
+ else
+ fun_l13_n823(x)
+ end
+end
+
+def fun_l12_n458(x)
+ if (x < 1)
+ fun_l13_n343(x)
+ else
+ fun_l13_n843(x)
+ end
+end
+
+def fun_l12_n459(x)
+ if (x < 1)
+ fun_l13_n209(x)
+ else
+ fun_l13_n464(x)
+ end
+end
+
+def fun_l12_n460(x)
+ if (x < 1)
+ fun_l13_n281(x)
+ else
+ fun_l13_n165(x)
+ end
+end
+
+def fun_l12_n461(x)
+ if (x < 1)
+ fun_l13_n416(x)
+ else
+ fun_l13_n896(x)
+ end
+end
+
+def fun_l12_n462(x)
+ if (x < 1)
+ fun_l13_n677(x)
+ else
+ fun_l13_n767(x)
+ end
+end
+
+def fun_l12_n463(x)
+ if (x < 1)
+ fun_l13_n271(x)
+ else
+ fun_l13_n515(x)
+ end
+end
+
+def fun_l12_n464(x)
+ if (x < 1)
+ fun_l13_n589(x)
+ else
+ fun_l13_n447(x)
+ end
+end
+
+def fun_l12_n465(x)
+ if (x < 1)
+ fun_l13_n316(x)
+ else
+ fun_l13_n309(x)
+ end
+end
+
+def fun_l12_n466(x)
+ if (x < 1)
+ fun_l13_n48(x)
+ else
+ fun_l13_n999(x)
+ end
+end
+
+def fun_l12_n467(x)
+ if (x < 1)
+ fun_l13_n334(x)
+ else
+ fun_l13_n138(x)
+ end
+end
+
+def fun_l12_n468(x)
+ if (x < 1)
+ fun_l13_n483(x)
+ else
+ fun_l13_n353(x)
+ end
+end
+
+def fun_l12_n469(x)
+ if (x < 1)
+ fun_l13_n893(x)
+ else
+ fun_l13_n114(x)
+ end
+end
+
+def fun_l12_n470(x)
+ if (x < 1)
+ fun_l13_n945(x)
+ else
+ fun_l13_n438(x)
+ end
+end
+
+def fun_l12_n471(x)
+ if (x < 1)
+ fun_l13_n546(x)
+ else
+ fun_l13_n181(x)
+ end
+end
+
+def fun_l12_n472(x)
+ if (x < 1)
+ fun_l13_n443(x)
+ else
+ fun_l13_n35(x)
+ end
+end
+
+def fun_l12_n473(x)
+ if (x < 1)
+ fun_l13_n611(x)
+ else
+ fun_l13_n106(x)
+ end
+end
+
+def fun_l12_n474(x)
+ if (x < 1)
+ fun_l13_n408(x)
+ else
+ fun_l13_n162(x)
+ end
+end
+
+def fun_l12_n475(x)
+ if (x < 1)
+ fun_l13_n104(x)
+ else
+ fun_l13_n173(x)
+ end
+end
+
+def fun_l12_n476(x)
+ if (x < 1)
+ fun_l13_n922(x)
+ else
+ fun_l13_n593(x)
+ end
+end
+
+def fun_l12_n477(x)
+ if (x < 1)
+ fun_l13_n650(x)
+ else
+ fun_l13_n659(x)
+ end
+end
+
+def fun_l12_n478(x)
+ if (x < 1)
+ fun_l13_n746(x)
+ else
+ fun_l13_n484(x)
+ end
+end
+
+def fun_l12_n479(x)
+ if (x < 1)
+ fun_l13_n366(x)
+ else
+ fun_l13_n318(x)
+ end
+end
+
+def fun_l12_n480(x)
+ if (x < 1)
+ fun_l13_n995(x)
+ else
+ fun_l13_n108(x)
+ end
+end
+
+def fun_l12_n481(x)
+ if (x < 1)
+ fun_l13_n61(x)
+ else
+ fun_l13_n426(x)
+ end
+end
+
+def fun_l12_n482(x)
+ if (x < 1)
+ fun_l13_n578(x)
+ else
+ fun_l13_n955(x)
+ end
+end
+
+def fun_l12_n483(x)
+ if (x < 1)
+ fun_l13_n650(x)
+ else
+ fun_l13_n588(x)
+ end
+end
+
+def fun_l12_n484(x)
+ if (x < 1)
+ fun_l13_n842(x)
+ else
+ fun_l13_n198(x)
+ end
+end
+
+def fun_l12_n485(x)
+ if (x < 1)
+ fun_l13_n439(x)
+ else
+ fun_l13_n372(x)
+ end
+end
+
+def fun_l12_n486(x)
+ if (x < 1)
+ fun_l13_n94(x)
+ else
+ fun_l13_n531(x)
+ end
+end
+
+def fun_l12_n487(x)
+ if (x < 1)
+ fun_l13_n743(x)
+ else
+ fun_l13_n955(x)
+ end
+end
+
+def fun_l12_n488(x)
+ if (x < 1)
+ fun_l13_n648(x)
+ else
+ fun_l13_n849(x)
+ end
+end
+
+def fun_l12_n489(x)
+ if (x < 1)
+ fun_l13_n371(x)
+ else
+ fun_l13_n972(x)
+ end
+end
+
+def fun_l12_n490(x)
+ if (x < 1)
+ fun_l13_n128(x)
+ else
+ fun_l13_n617(x)
+ end
+end
+
+def fun_l12_n491(x)
+ if (x < 1)
+ fun_l13_n22(x)
+ else
+ fun_l13_n201(x)
+ end
+end
+
+def fun_l12_n492(x)
+ if (x < 1)
+ fun_l13_n209(x)
+ else
+ fun_l13_n679(x)
+ end
+end
+
+def fun_l12_n493(x)
+ if (x < 1)
+ fun_l13_n415(x)
+ else
+ fun_l13_n765(x)
+ end
+end
+
+def fun_l12_n494(x)
+ if (x < 1)
+ fun_l13_n498(x)
+ else
+ fun_l13_n719(x)
+ end
+end
+
+def fun_l12_n495(x)
+ if (x < 1)
+ fun_l13_n492(x)
+ else
+ fun_l13_n161(x)
+ end
+end
+
+def fun_l12_n496(x)
+ if (x < 1)
+ fun_l13_n162(x)
+ else
+ fun_l13_n54(x)
+ end
+end
+
+def fun_l12_n497(x)
+ if (x < 1)
+ fun_l13_n743(x)
+ else
+ fun_l13_n834(x)
+ end
+end
+
+def fun_l12_n498(x)
+ if (x < 1)
+ fun_l13_n376(x)
+ else
+ fun_l13_n676(x)
+ end
+end
+
+def fun_l12_n499(x)
+ if (x < 1)
+ fun_l13_n626(x)
+ else
+ fun_l13_n357(x)
+ end
+end
+
+def fun_l12_n500(x)
+ if (x < 1)
+ fun_l13_n874(x)
+ else
+ fun_l13_n53(x)
+ end
+end
+
+def fun_l12_n501(x)
+ if (x < 1)
+ fun_l13_n146(x)
+ else
+ fun_l13_n732(x)
+ end
+end
+
+def fun_l12_n502(x)
+ if (x < 1)
+ fun_l13_n908(x)
+ else
+ fun_l13_n933(x)
+ end
+end
+
+def fun_l12_n503(x)
+ if (x < 1)
+ fun_l13_n758(x)
+ else
+ fun_l13_n289(x)
+ end
+end
+
+def fun_l12_n504(x)
+ if (x < 1)
+ fun_l13_n913(x)
+ else
+ fun_l13_n770(x)
+ end
+end
+
+def fun_l12_n505(x)
+ if (x < 1)
+ fun_l13_n305(x)
+ else
+ fun_l13_n990(x)
+ end
+end
+
+def fun_l12_n506(x)
+ if (x < 1)
+ fun_l13_n79(x)
+ else
+ fun_l13_n199(x)
+ end
+end
+
+def fun_l12_n507(x)
+ if (x < 1)
+ fun_l13_n430(x)
+ else
+ fun_l13_n394(x)
+ end
+end
+
+def fun_l12_n508(x)
+ if (x < 1)
+ fun_l13_n835(x)
+ else
+ fun_l13_n64(x)
+ end
+end
+
+def fun_l12_n509(x)
+ if (x < 1)
+ fun_l13_n661(x)
+ else
+ fun_l13_n301(x)
+ end
+end
+
+def fun_l12_n510(x)
+ if (x < 1)
+ fun_l13_n672(x)
+ else
+ fun_l13_n498(x)
+ end
+end
+
+def fun_l12_n511(x)
+ if (x < 1)
+ fun_l13_n540(x)
+ else
+ fun_l13_n57(x)
+ end
+end
+
+def fun_l12_n512(x)
+ if (x < 1)
+ fun_l13_n634(x)
+ else
+ fun_l13_n790(x)
+ end
+end
+
+def fun_l12_n513(x)
+ if (x < 1)
+ fun_l13_n998(x)
+ else
+ fun_l13_n3(x)
+ end
+end
+
+def fun_l12_n514(x)
+ if (x < 1)
+ fun_l13_n482(x)
+ else
+ fun_l13_n116(x)
+ end
+end
+
+def fun_l12_n515(x)
+ if (x < 1)
+ fun_l13_n967(x)
+ else
+ fun_l13_n17(x)
+ end
+end
+
+def fun_l12_n516(x)
+ if (x < 1)
+ fun_l13_n614(x)
+ else
+ fun_l13_n260(x)
+ end
+end
+
+def fun_l12_n517(x)
+ if (x < 1)
+ fun_l13_n273(x)
+ else
+ fun_l13_n982(x)
+ end
+end
+
+def fun_l12_n518(x)
+ if (x < 1)
+ fun_l13_n786(x)
+ else
+ fun_l13_n186(x)
+ end
+end
+
+def fun_l12_n519(x)
+ if (x < 1)
+ fun_l13_n990(x)
+ else
+ fun_l13_n223(x)
+ end
+end
+
+def fun_l12_n520(x)
+ if (x < 1)
+ fun_l13_n406(x)
+ else
+ fun_l13_n374(x)
+ end
+end
+
+def fun_l12_n521(x)
+ if (x < 1)
+ fun_l13_n548(x)
+ else
+ fun_l13_n160(x)
+ end
+end
+
+def fun_l12_n522(x)
+ if (x < 1)
+ fun_l13_n249(x)
+ else
+ fun_l13_n295(x)
+ end
+end
+
+def fun_l12_n523(x)
+ if (x < 1)
+ fun_l13_n434(x)
+ else
+ fun_l13_n73(x)
+ end
+end
+
+def fun_l12_n524(x)
+ if (x < 1)
+ fun_l13_n550(x)
+ else
+ fun_l13_n472(x)
+ end
+end
+
+def fun_l12_n525(x)
+ if (x < 1)
+ fun_l13_n720(x)
+ else
+ fun_l13_n979(x)
+ end
+end
+
+def fun_l12_n526(x)
+ if (x < 1)
+ fun_l13_n806(x)
+ else
+ fun_l13_n156(x)
+ end
+end
+
+def fun_l12_n527(x)
+ if (x < 1)
+ fun_l13_n689(x)
+ else
+ fun_l13_n781(x)
+ end
+end
+
+def fun_l12_n528(x)
+ if (x < 1)
+ fun_l13_n130(x)
+ else
+ fun_l13_n909(x)
+ end
+end
+
+def fun_l12_n529(x)
+ if (x < 1)
+ fun_l13_n762(x)
+ else
+ fun_l13_n301(x)
+ end
+end
+
+def fun_l12_n530(x)
+ if (x < 1)
+ fun_l13_n580(x)
+ else
+ fun_l13_n269(x)
+ end
+end
+
+def fun_l12_n531(x)
+ if (x < 1)
+ fun_l13_n427(x)
+ else
+ fun_l13_n279(x)
+ end
+end
+
+def fun_l12_n532(x)
+ if (x < 1)
+ fun_l13_n408(x)
+ else
+ fun_l13_n523(x)
+ end
+end
+
+def fun_l12_n533(x)
+ if (x < 1)
+ fun_l13_n358(x)
+ else
+ fun_l13_n386(x)
+ end
+end
+
+def fun_l12_n534(x)
+ if (x < 1)
+ fun_l13_n401(x)
+ else
+ fun_l13_n148(x)
+ end
+end
+
+def fun_l12_n535(x)
+ if (x < 1)
+ fun_l13_n588(x)
+ else
+ fun_l13_n607(x)
+ end
+end
+
+def fun_l12_n536(x)
+ if (x < 1)
+ fun_l13_n445(x)
+ else
+ fun_l13_n681(x)
+ end
+end
+
+def fun_l12_n537(x)
+ if (x < 1)
+ fun_l13_n16(x)
+ else
+ fun_l13_n931(x)
+ end
+end
+
+def fun_l12_n538(x)
+ if (x < 1)
+ fun_l13_n567(x)
+ else
+ fun_l13_n9(x)
+ end
+end
+
+def fun_l12_n539(x)
+ if (x < 1)
+ fun_l13_n584(x)
+ else
+ fun_l13_n46(x)
+ end
+end
+
+def fun_l12_n540(x)
+ if (x < 1)
+ fun_l13_n147(x)
+ else
+ fun_l13_n498(x)
+ end
+end
+
+def fun_l12_n541(x)
+ if (x < 1)
+ fun_l13_n727(x)
+ else
+ fun_l13_n152(x)
+ end
+end
+
+def fun_l12_n542(x)
+ if (x < 1)
+ fun_l13_n797(x)
+ else
+ fun_l13_n789(x)
+ end
+end
+
+def fun_l12_n543(x)
+ if (x < 1)
+ fun_l13_n711(x)
+ else
+ fun_l13_n939(x)
+ end
+end
+
+def fun_l12_n544(x)
+ if (x < 1)
+ fun_l13_n276(x)
+ else
+ fun_l13_n325(x)
+ end
+end
+
+def fun_l12_n545(x)
+ if (x < 1)
+ fun_l13_n800(x)
+ else
+ fun_l13_n974(x)
+ end
+end
+
+def fun_l12_n546(x)
+ if (x < 1)
+ fun_l13_n654(x)
+ else
+ fun_l13_n331(x)
+ end
+end
+
+def fun_l12_n547(x)
+ if (x < 1)
+ fun_l13_n179(x)
+ else
+ fun_l13_n395(x)
+ end
+end
+
+def fun_l12_n548(x)
+ if (x < 1)
+ fun_l13_n348(x)
+ else
+ fun_l13_n210(x)
+ end
+end
+
+def fun_l12_n549(x)
+ if (x < 1)
+ fun_l13_n669(x)
+ else
+ fun_l13_n459(x)
+ end
+end
+
+def fun_l12_n550(x)
+ if (x < 1)
+ fun_l13_n316(x)
+ else
+ fun_l13_n846(x)
+ end
+end
+
+def fun_l12_n551(x)
+ if (x < 1)
+ fun_l13_n262(x)
+ else
+ fun_l13_n430(x)
+ end
+end
+
+def fun_l12_n552(x)
+ if (x < 1)
+ fun_l13_n224(x)
+ else
+ fun_l13_n866(x)
+ end
+end
+
+def fun_l12_n553(x)
+ if (x < 1)
+ fun_l13_n551(x)
+ else
+ fun_l13_n30(x)
+ end
+end
+
+def fun_l12_n554(x)
+ if (x < 1)
+ fun_l13_n864(x)
+ else
+ fun_l13_n931(x)
+ end
+end
+
+def fun_l12_n555(x)
+ if (x < 1)
+ fun_l13_n427(x)
+ else
+ fun_l13_n138(x)
+ end
+end
+
+def fun_l12_n556(x)
+ if (x < 1)
+ fun_l13_n603(x)
+ else
+ fun_l13_n167(x)
+ end
+end
+
+def fun_l12_n557(x)
+ if (x < 1)
+ fun_l13_n858(x)
+ else
+ fun_l13_n123(x)
+ end
+end
+
+def fun_l12_n558(x)
+ if (x < 1)
+ fun_l13_n729(x)
+ else
+ fun_l13_n769(x)
+ end
+end
+
+def fun_l12_n559(x)
+ if (x < 1)
+ fun_l13_n529(x)
+ else
+ fun_l13_n114(x)
+ end
+end
+
+def fun_l12_n560(x)
+ if (x < 1)
+ fun_l13_n727(x)
+ else
+ fun_l13_n673(x)
+ end
+end
+
+def fun_l12_n561(x)
+ if (x < 1)
+ fun_l13_n742(x)
+ else
+ fun_l13_n981(x)
+ end
+end
+
+def fun_l12_n562(x)
+ if (x < 1)
+ fun_l13_n29(x)
+ else
+ fun_l13_n493(x)
+ end
+end
+
+def fun_l12_n563(x)
+ if (x < 1)
+ fun_l13_n207(x)
+ else
+ fun_l13_n361(x)
+ end
+end
+
+def fun_l12_n564(x)
+ if (x < 1)
+ fun_l13_n370(x)
+ else
+ fun_l13_n185(x)
+ end
+end
+
+def fun_l12_n565(x)
+ if (x < 1)
+ fun_l13_n755(x)
+ else
+ fun_l13_n28(x)
+ end
+end
+
+def fun_l12_n566(x)
+ if (x < 1)
+ fun_l13_n332(x)
+ else
+ fun_l13_n718(x)
+ end
+end
+
+def fun_l12_n567(x)
+ if (x < 1)
+ fun_l13_n329(x)
+ else
+ fun_l13_n623(x)
+ end
+end
+
+def fun_l12_n568(x)
+ if (x < 1)
+ fun_l13_n592(x)
+ else
+ fun_l13_n870(x)
+ end
+end
+
+def fun_l12_n569(x)
+ if (x < 1)
+ fun_l13_n539(x)
+ else
+ fun_l13_n68(x)
+ end
+end
+
+def fun_l12_n570(x)
+ if (x < 1)
+ fun_l13_n794(x)
+ else
+ fun_l13_n617(x)
+ end
+end
+
+def fun_l12_n571(x)
+ if (x < 1)
+ fun_l13_n801(x)
+ else
+ fun_l13_n610(x)
+ end
+end
+
+def fun_l12_n572(x)
+ if (x < 1)
+ fun_l13_n781(x)
+ else
+ fun_l13_n879(x)
+ end
+end
+
+def fun_l12_n573(x)
+ if (x < 1)
+ fun_l13_n519(x)
+ else
+ fun_l13_n748(x)
+ end
+end
+
+def fun_l12_n574(x)
+ if (x < 1)
+ fun_l13_n416(x)
+ else
+ fun_l13_n908(x)
+ end
+end
+
+def fun_l12_n575(x)
+ if (x < 1)
+ fun_l13_n288(x)
+ else
+ fun_l13_n925(x)
+ end
+end
+
+def fun_l12_n576(x)
+ if (x < 1)
+ fun_l13_n398(x)
+ else
+ fun_l13_n185(x)
+ end
+end
+
+def fun_l12_n577(x)
+ if (x < 1)
+ fun_l13_n742(x)
+ else
+ fun_l13_n768(x)
+ end
+end
+
+def fun_l12_n578(x)
+ if (x < 1)
+ fun_l13_n472(x)
+ else
+ fun_l13_n474(x)
+ end
+end
+
+def fun_l12_n579(x)
+ if (x < 1)
+ fun_l13_n229(x)
+ else
+ fun_l13_n479(x)
+ end
+end
+
+def fun_l12_n580(x)
+ if (x < 1)
+ fun_l13_n483(x)
+ else
+ fun_l13_n60(x)
+ end
+end
+
+def fun_l12_n581(x)
+ if (x < 1)
+ fun_l13_n971(x)
+ else
+ fun_l13_n958(x)
+ end
+end
+
+def fun_l12_n582(x)
+ if (x < 1)
+ fun_l13_n612(x)
+ else
+ fun_l13_n491(x)
+ end
+end
+
+def fun_l12_n583(x)
+ if (x < 1)
+ fun_l13_n320(x)
+ else
+ fun_l13_n356(x)
+ end
+end
+
+def fun_l12_n584(x)
+ if (x < 1)
+ fun_l13_n521(x)
+ else
+ fun_l13_n126(x)
+ end
+end
+
+def fun_l12_n585(x)
+ if (x < 1)
+ fun_l13_n778(x)
+ else
+ fun_l13_n503(x)
+ end
+end
+
+def fun_l12_n586(x)
+ if (x < 1)
+ fun_l13_n715(x)
+ else
+ fun_l13_n849(x)
+ end
+end
+
+def fun_l12_n587(x)
+ if (x < 1)
+ fun_l13_n192(x)
+ else
+ fun_l13_n278(x)
+ end
+end
+
+def fun_l12_n588(x)
+ if (x < 1)
+ fun_l13_n882(x)
+ else
+ fun_l13_n992(x)
+ end
+end
+
+def fun_l12_n589(x)
+ if (x < 1)
+ fun_l13_n693(x)
+ else
+ fun_l13_n734(x)
+ end
+end
+
+def fun_l12_n590(x)
+ if (x < 1)
+ fun_l13_n207(x)
+ else
+ fun_l13_n674(x)
+ end
+end
+
+def fun_l12_n591(x)
+ if (x < 1)
+ fun_l13_n409(x)
+ else
+ fun_l13_n937(x)
+ end
+end
+
+def fun_l12_n592(x)
+ if (x < 1)
+ fun_l13_n424(x)
+ else
+ fun_l13_n709(x)
+ end
+end
+
+def fun_l12_n593(x)
+ if (x < 1)
+ fun_l13_n530(x)
+ else
+ fun_l13_n50(x)
+ end
+end
+
+def fun_l12_n594(x)
+ if (x < 1)
+ fun_l13_n451(x)
+ else
+ fun_l13_n513(x)
+ end
+end
+
+def fun_l12_n595(x)
+ if (x < 1)
+ fun_l13_n522(x)
+ else
+ fun_l13_n414(x)
+ end
+end
+
+def fun_l12_n596(x)
+ if (x < 1)
+ fun_l13_n352(x)
+ else
+ fun_l13_n323(x)
+ end
+end
+
+def fun_l12_n597(x)
+ if (x < 1)
+ fun_l13_n342(x)
+ else
+ fun_l13_n362(x)
+ end
+end
+
+def fun_l12_n598(x)
+ if (x < 1)
+ fun_l13_n870(x)
+ else
+ fun_l13_n366(x)
+ end
+end
+
+def fun_l12_n599(x)
+ if (x < 1)
+ fun_l13_n562(x)
+ else
+ fun_l13_n455(x)
+ end
+end
+
+def fun_l12_n600(x)
+ if (x < 1)
+ fun_l13_n554(x)
+ else
+ fun_l13_n929(x)
+ end
+end
+
+def fun_l12_n601(x)
+ if (x < 1)
+ fun_l13_n498(x)
+ else
+ fun_l13_n287(x)
+ end
+end
+
+def fun_l12_n602(x)
+ if (x < 1)
+ fun_l13_n9(x)
+ else
+ fun_l13_n258(x)
+ end
+end
+
+def fun_l12_n603(x)
+ if (x < 1)
+ fun_l13_n976(x)
+ else
+ fun_l13_n604(x)
+ end
+end
+
+def fun_l12_n604(x)
+ if (x < 1)
+ fun_l13_n411(x)
+ else
+ fun_l13_n238(x)
+ end
+end
+
+def fun_l12_n605(x)
+ if (x < 1)
+ fun_l13_n80(x)
+ else
+ fun_l13_n665(x)
+ end
+end
+
+def fun_l12_n606(x)
+ if (x < 1)
+ fun_l13_n453(x)
+ else
+ fun_l13_n642(x)
+ end
+end
+
+def fun_l12_n607(x)
+ if (x < 1)
+ fun_l13_n247(x)
+ else
+ fun_l13_n651(x)
+ end
+end
+
+def fun_l12_n608(x)
+ if (x < 1)
+ fun_l13_n586(x)
+ else
+ fun_l13_n372(x)
+ end
+end
+
+def fun_l12_n609(x)
+ if (x < 1)
+ fun_l13_n623(x)
+ else
+ fun_l13_n380(x)
+ end
+end
+
+def fun_l12_n610(x)
+ if (x < 1)
+ fun_l13_n399(x)
+ else
+ fun_l13_n43(x)
+ end
+end
+
+def fun_l12_n611(x)
+ if (x < 1)
+ fun_l13_n191(x)
+ else
+ fun_l13_n211(x)
+ end
+end
+
+def fun_l12_n612(x)
+ if (x < 1)
+ fun_l13_n719(x)
+ else
+ fun_l13_n663(x)
+ end
+end
+
+def fun_l12_n613(x)
+ if (x < 1)
+ fun_l13_n849(x)
+ else
+ fun_l13_n39(x)
+ end
+end
+
+def fun_l12_n614(x)
+ if (x < 1)
+ fun_l13_n822(x)
+ else
+ fun_l13_n927(x)
+ end
+end
+
+def fun_l12_n615(x)
+ if (x < 1)
+ fun_l13_n358(x)
+ else
+ fun_l13_n364(x)
+ end
+end
+
+def fun_l12_n616(x)
+ if (x < 1)
+ fun_l13_n685(x)
+ else
+ fun_l13_n897(x)
+ end
+end
+
+def fun_l12_n617(x)
+ if (x < 1)
+ fun_l13_n243(x)
+ else
+ fun_l13_n138(x)
+ end
+end
+
+def fun_l12_n618(x)
+ if (x < 1)
+ fun_l13_n737(x)
+ else
+ fun_l13_n187(x)
+ end
+end
+
+def fun_l12_n619(x)
+ if (x < 1)
+ fun_l13_n56(x)
+ else
+ fun_l13_n684(x)
+ end
+end
+
+def fun_l12_n620(x)
+ if (x < 1)
+ fun_l13_n865(x)
+ else
+ fun_l13_n886(x)
+ end
+end
+
+def fun_l12_n621(x)
+ if (x < 1)
+ fun_l13_n749(x)
+ else
+ fun_l13_n554(x)
+ end
+end
+
+def fun_l12_n622(x)
+ if (x < 1)
+ fun_l13_n162(x)
+ else
+ fun_l13_n600(x)
+ end
+end
+
+def fun_l12_n623(x)
+ if (x < 1)
+ fun_l13_n763(x)
+ else
+ fun_l13_n227(x)
+ end
+end
+
+def fun_l12_n624(x)
+ if (x < 1)
+ fun_l13_n767(x)
+ else
+ fun_l13_n431(x)
+ end
+end
+
+def fun_l12_n625(x)
+ if (x < 1)
+ fun_l13_n347(x)
+ else
+ fun_l13_n214(x)
+ end
+end
+
+def fun_l12_n626(x)
+ if (x < 1)
+ fun_l13_n365(x)
+ else
+ fun_l13_n747(x)
+ end
+end
+
+def fun_l12_n627(x)
+ if (x < 1)
+ fun_l13_n783(x)
+ else
+ fun_l13_n597(x)
+ end
+end
+
+def fun_l12_n628(x)
+ if (x < 1)
+ fun_l13_n249(x)
+ else
+ fun_l13_n906(x)
+ end
+end
+
+def fun_l12_n629(x)
+ if (x < 1)
+ fun_l13_n803(x)
+ else
+ fun_l13_n855(x)
+ end
+end
+
+def fun_l12_n630(x)
+ if (x < 1)
+ fun_l13_n981(x)
+ else
+ fun_l13_n38(x)
+ end
+end
+
+def fun_l12_n631(x)
+ if (x < 1)
+ fun_l13_n437(x)
+ else
+ fun_l13_n158(x)
+ end
+end
+
+def fun_l12_n632(x)
+ if (x < 1)
+ fun_l13_n611(x)
+ else
+ fun_l13_n142(x)
+ end
+end
+
+def fun_l12_n633(x)
+ if (x < 1)
+ fun_l13_n880(x)
+ else
+ fun_l13_n172(x)
+ end
+end
+
+def fun_l12_n634(x)
+ if (x < 1)
+ fun_l13_n135(x)
+ else
+ fun_l13_n529(x)
+ end
+end
+
+def fun_l12_n635(x)
+ if (x < 1)
+ fun_l13_n694(x)
+ else
+ fun_l13_n949(x)
+ end
+end
+
+def fun_l12_n636(x)
+ if (x < 1)
+ fun_l13_n153(x)
+ else
+ fun_l13_n326(x)
+ end
+end
+
+def fun_l12_n637(x)
+ if (x < 1)
+ fun_l13_n318(x)
+ else
+ fun_l13_n372(x)
+ end
+end
+
+def fun_l12_n638(x)
+ if (x < 1)
+ fun_l13_n467(x)
+ else
+ fun_l13_n450(x)
+ end
+end
+
+def fun_l12_n639(x)
+ if (x < 1)
+ fun_l13_n397(x)
+ else
+ fun_l13_n138(x)
+ end
+end
+
+def fun_l12_n640(x)
+ if (x < 1)
+ fun_l13_n408(x)
+ else
+ fun_l13_n335(x)
+ end
+end
+
+def fun_l12_n641(x)
+ if (x < 1)
+ fun_l13_n342(x)
+ else
+ fun_l13_n856(x)
+ end
+end
+
+def fun_l12_n642(x)
+ if (x < 1)
+ fun_l13_n163(x)
+ else
+ fun_l13_n979(x)
+ end
+end
+
+def fun_l12_n643(x)
+ if (x < 1)
+ fun_l13_n509(x)
+ else
+ fun_l13_n153(x)
+ end
+end
+
+def fun_l12_n644(x)
+ if (x < 1)
+ fun_l13_n3(x)
+ else
+ fun_l13_n55(x)
+ end
+end
+
+def fun_l12_n645(x)
+ if (x < 1)
+ fun_l13_n730(x)
+ else
+ fun_l13_n52(x)
+ end
+end
+
+def fun_l12_n646(x)
+ if (x < 1)
+ fun_l13_n553(x)
+ else
+ fun_l13_n885(x)
+ end
+end
+
+def fun_l12_n647(x)
+ if (x < 1)
+ fun_l13_n866(x)
+ else
+ fun_l13_n684(x)
+ end
+end
+
+def fun_l12_n648(x)
+ if (x < 1)
+ fun_l13_n989(x)
+ else
+ fun_l13_n511(x)
+ end
+end
+
+def fun_l12_n649(x)
+ if (x < 1)
+ fun_l13_n527(x)
+ else
+ fun_l13_n166(x)
+ end
+end
+
+def fun_l12_n650(x)
+ if (x < 1)
+ fun_l13_n507(x)
+ else
+ fun_l13_n527(x)
+ end
+end
+
+def fun_l12_n651(x)
+ if (x < 1)
+ fun_l13_n174(x)
+ else
+ fun_l13_n881(x)
+ end
+end
+
+def fun_l12_n652(x)
+ if (x < 1)
+ fun_l13_n302(x)
+ else
+ fun_l13_n3(x)
+ end
+end
+
+def fun_l12_n653(x)
+ if (x < 1)
+ fun_l13_n971(x)
+ else
+ fun_l13_n601(x)
+ end
+end
+
+def fun_l12_n654(x)
+ if (x < 1)
+ fun_l13_n440(x)
+ else
+ fun_l13_n286(x)
+ end
+end
+
+def fun_l12_n655(x)
+ if (x < 1)
+ fun_l13_n208(x)
+ else
+ fun_l13_n275(x)
+ end
+end
+
+def fun_l12_n656(x)
+ if (x < 1)
+ fun_l13_n954(x)
+ else
+ fun_l13_n991(x)
+ end
+end
+
+def fun_l12_n657(x)
+ if (x < 1)
+ fun_l13_n212(x)
+ else
+ fun_l13_n640(x)
+ end
+end
+
+def fun_l12_n658(x)
+ if (x < 1)
+ fun_l13_n733(x)
+ else
+ fun_l13_n459(x)
+ end
+end
+
+def fun_l12_n659(x)
+ if (x < 1)
+ fun_l13_n767(x)
+ else
+ fun_l13_n581(x)
+ end
+end
+
+def fun_l12_n660(x)
+ if (x < 1)
+ fun_l13_n421(x)
+ else
+ fun_l13_n19(x)
+ end
+end
+
+def fun_l12_n661(x)
+ if (x < 1)
+ fun_l13_n500(x)
+ else
+ fun_l13_n464(x)
+ end
+end
+
+def fun_l12_n662(x)
+ if (x < 1)
+ fun_l13_n26(x)
+ else
+ fun_l13_n300(x)
+ end
+end
+
+def fun_l12_n663(x)
+ if (x < 1)
+ fun_l13_n160(x)
+ else
+ fun_l13_n112(x)
+ end
+end
+
+def fun_l12_n664(x)
+ if (x < 1)
+ fun_l13_n181(x)
+ else
+ fun_l13_n511(x)
+ end
+end
+
+def fun_l12_n665(x)
+ if (x < 1)
+ fun_l13_n573(x)
+ else
+ fun_l13_n283(x)
+ end
+end
+
+def fun_l12_n666(x)
+ if (x < 1)
+ fun_l13_n562(x)
+ else
+ fun_l13_n992(x)
+ end
+end
+
+def fun_l12_n667(x)
+ if (x < 1)
+ fun_l13_n426(x)
+ else
+ fun_l13_n921(x)
+ end
+end
+
+def fun_l12_n668(x)
+ if (x < 1)
+ fun_l13_n319(x)
+ else
+ fun_l13_n226(x)
+ end
+end
+
+def fun_l12_n669(x)
+ if (x < 1)
+ fun_l13_n832(x)
+ else
+ fun_l13_n690(x)
+ end
+end
+
+def fun_l12_n670(x)
+ if (x < 1)
+ fun_l13_n921(x)
+ else
+ fun_l13_n964(x)
+ end
+end
+
+def fun_l12_n671(x)
+ if (x < 1)
+ fun_l13_n823(x)
+ else
+ fun_l13_n903(x)
+ end
+end
+
+def fun_l12_n672(x)
+ if (x < 1)
+ fun_l13_n469(x)
+ else
+ fun_l13_n914(x)
+ end
+end
+
+def fun_l12_n673(x)
+ if (x < 1)
+ fun_l13_n478(x)
+ else
+ fun_l13_n481(x)
+ end
+end
+
+def fun_l12_n674(x)
+ if (x < 1)
+ fun_l13_n762(x)
+ else
+ fun_l13_n464(x)
+ end
+end
+
+def fun_l12_n675(x)
+ if (x < 1)
+ fun_l13_n930(x)
+ else
+ fun_l13_n587(x)
+ end
+end
+
+def fun_l12_n676(x)
+ if (x < 1)
+ fun_l13_n351(x)
+ else
+ fun_l13_n239(x)
+ end
+end
+
+def fun_l12_n677(x)
+ if (x < 1)
+ fun_l13_n989(x)
+ else
+ fun_l13_n424(x)
+ end
+end
+
+def fun_l12_n678(x)
+ if (x < 1)
+ fun_l13_n505(x)
+ else
+ fun_l13_n186(x)
+ end
+end
+
+def fun_l12_n679(x)
+ if (x < 1)
+ fun_l13_n665(x)
+ else
+ fun_l13_n536(x)
+ end
+end
+
+def fun_l12_n680(x)
+ if (x < 1)
+ fun_l13_n734(x)
+ else
+ fun_l13_n36(x)
+ end
+end
+
+def fun_l12_n681(x)
+ if (x < 1)
+ fun_l13_n380(x)
+ else
+ fun_l13_n340(x)
+ end
+end
+
+def fun_l12_n682(x)
+ if (x < 1)
+ fun_l13_n293(x)
+ else
+ fun_l13_n205(x)
+ end
+end
+
+def fun_l12_n683(x)
+ if (x < 1)
+ fun_l13_n412(x)
+ else
+ fun_l13_n13(x)
+ end
+end
+
+def fun_l12_n684(x)
+ if (x < 1)
+ fun_l13_n187(x)
+ else
+ fun_l13_n186(x)
+ end
+end
+
+def fun_l12_n685(x)
+ if (x < 1)
+ fun_l13_n299(x)
+ else
+ fun_l13_n875(x)
+ end
+end
+
+def fun_l12_n686(x)
+ if (x < 1)
+ fun_l13_n943(x)
+ else
+ fun_l13_n96(x)
+ end
+end
+
+def fun_l12_n687(x)
+ if (x < 1)
+ fun_l13_n736(x)
+ else
+ fun_l13_n377(x)
+ end
+end
+
+def fun_l12_n688(x)
+ if (x < 1)
+ fun_l13_n559(x)
+ else
+ fun_l13_n410(x)
+ end
+end
+
+def fun_l12_n689(x)
+ if (x < 1)
+ fun_l13_n538(x)
+ else
+ fun_l13_n521(x)
+ end
+end
+
+def fun_l12_n690(x)
+ if (x < 1)
+ fun_l13_n568(x)
+ else
+ fun_l13_n838(x)
+ end
+end
+
+def fun_l12_n691(x)
+ if (x < 1)
+ fun_l13_n556(x)
+ else
+ fun_l13_n42(x)
+ end
+end
+
+def fun_l12_n692(x)
+ if (x < 1)
+ fun_l13_n137(x)
+ else
+ fun_l13_n939(x)
+ end
+end
+
+def fun_l12_n693(x)
+ if (x < 1)
+ fun_l13_n974(x)
+ else
+ fun_l13_n308(x)
+ end
+end
+
+def fun_l12_n694(x)
+ if (x < 1)
+ fun_l13_n459(x)
+ else
+ fun_l13_n323(x)
+ end
+end
+
+def fun_l12_n695(x)
+ if (x < 1)
+ fun_l13_n829(x)
+ else
+ fun_l13_n909(x)
+ end
+end
+
+def fun_l12_n696(x)
+ if (x < 1)
+ fun_l13_n710(x)
+ else
+ fun_l13_n648(x)
+ end
+end
+
+def fun_l12_n697(x)
+ if (x < 1)
+ fun_l13_n27(x)
+ else
+ fun_l13_n500(x)
+ end
+end
+
+def fun_l12_n698(x)
+ if (x < 1)
+ fun_l13_n553(x)
+ else
+ fun_l13_n865(x)
+ end
+end
+
+def fun_l12_n699(x)
+ if (x < 1)
+ fun_l13_n126(x)
+ else
+ fun_l13_n789(x)
+ end
+end
+
+def fun_l12_n700(x)
+ if (x < 1)
+ fun_l13_n408(x)
+ else
+ fun_l13_n391(x)
+ end
+end
+
+def fun_l12_n701(x)
+ if (x < 1)
+ fun_l13_n469(x)
+ else
+ fun_l13_n48(x)
+ end
+end
+
+def fun_l12_n702(x)
+ if (x < 1)
+ fun_l13_n646(x)
+ else
+ fun_l13_n117(x)
+ end
+end
+
+def fun_l12_n703(x)
+ if (x < 1)
+ fun_l13_n461(x)
+ else
+ fun_l13_n114(x)
+ end
+end
+
+def fun_l12_n704(x)
+ if (x < 1)
+ fun_l13_n603(x)
+ else
+ fun_l13_n27(x)
+ end
+end
+
+def fun_l12_n705(x)
+ if (x < 1)
+ fun_l13_n842(x)
+ else
+ fun_l13_n792(x)
+ end
+end
+
+def fun_l12_n706(x)
+ if (x < 1)
+ fun_l13_n194(x)
+ else
+ fun_l13_n405(x)
+ end
+end
+
+def fun_l12_n707(x)
+ if (x < 1)
+ fun_l13_n975(x)
+ else
+ fun_l13_n933(x)
+ end
+end
+
+def fun_l12_n708(x)
+ if (x < 1)
+ fun_l13_n919(x)
+ else
+ fun_l13_n558(x)
+ end
+end
+
+def fun_l12_n709(x)
+ if (x < 1)
+ fun_l13_n293(x)
+ else
+ fun_l13_n868(x)
+ end
+end
+
+def fun_l12_n710(x)
+ if (x < 1)
+ fun_l13_n577(x)
+ else
+ fun_l13_n816(x)
+ end
+end
+
+def fun_l12_n711(x)
+ if (x < 1)
+ fun_l13_n625(x)
+ else
+ fun_l13_n319(x)
+ end
+end
+
+def fun_l12_n712(x)
+ if (x < 1)
+ fun_l13_n100(x)
+ else
+ fun_l13_n421(x)
+ end
+end
+
+def fun_l12_n713(x)
+ if (x < 1)
+ fun_l13_n120(x)
+ else
+ fun_l13_n727(x)
+ end
+end
+
+def fun_l12_n714(x)
+ if (x < 1)
+ fun_l13_n346(x)
+ else
+ fun_l13_n399(x)
+ end
+end
+
+def fun_l12_n715(x)
+ if (x < 1)
+ fun_l13_n64(x)
+ else
+ fun_l13_n895(x)
+ end
+end
+
+def fun_l12_n716(x)
+ if (x < 1)
+ fun_l13_n810(x)
+ else
+ fun_l13_n958(x)
+ end
+end
+
+def fun_l12_n717(x)
+ if (x < 1)
+ fun_l13_n24(x)
+ else
+ fun_l13_n851(x)
+ end
+end
+
+def fun_l12_n718(x)
+ if (x < 1)
+ fun_l13_n716(x)
+ else
+ fun_l13_n859(x)
+ end
+end
+
+def fun_l12_n719(x)
+ if (x < 1)
+ fun_l13_n556(x)
+ else
+ fun_l13_n999(x)
+ end
+end
+
+def fun_l12_n720(x)
+ if (x < 1)
+ fun_l13_n388(x)
+ else
+ fun_l13_n127(x)
+ end
+end
+
+def fun_l12_n721(x)
+ if (x < 1)
+ fun_l13_n447(x)
+ else
+ fun_l13_n880(x)
+ end
+end
+
+def fun_l12_n722(x)
+ if (x < 1)
+ fun_l13_n415(x)
+ else
+ fun_l13_n636(x)
+ end
+end
+
+def fun_l12_n723(x)
+ if (x < 1)
+ fun_l13_n315(x)
+ else
+ fun_l13_n766(x)
+ end
+end
+
+def fun_l12_n724(x)
+ if (x < 1)
+ fun_l13_n600(x)
+ else
+ fun_l13_n223(x)
+ end
+end
+
+def fun_l12_n725(x)
+ if (x < 1)
+ fun_l13_n773(x)
+ else
+ fun_l13_n523(x)
+ end
+end
+
+def fun_l12_n726(x)
+ if (x < 1)
+ fun_l13_n662(x)
+ else
+ fun_l13_n775(x)
+ end
+end
+
+def fun_l12_n727(x)
+ if (x < 1)
+ fun_l13_n553(x)
+ else
+ fun_l13_n247(x)
+ end
+end
+
+def fun_l12_n728(x)
+ if (x < 1)
+ fun_l13_n180(x)
+ else
+ fun_l13_n815(x)
+ end
+end
+
+def fun_l12_n729(x)
+ if (x < 1)
+ fun_l13_n786(x)
+ else
+ fun_l13_n729(x)
+ end
+end
+
+def fun_l12_n730(x)
+ if (x < 1)
+ fun_l13_n1(x)
+ else
+ fun_l13_n791(x)
+ end
+end
+
+def fun_l12_n731(x)
+ if (x < 1)
+ fun_l13_n216(x)
+ else
+ fun_l13_n682(x)
+ end
+end
+
+def fun_l12_n732(x)
+ if (x < 1)
+ fun_l13_n953(x)
+ else
+ fun_l13_n364(x)
+ end
+end
+
+def fun_l12_n733(x)
+ if (x < 1)
+ fun_l13_n164(x)
+ else
+ fun_l13_n277(x)
+ end
+end
+
+def fun_l12_n734(x)
+ if (x < 1)
+ fun_l13_n486(x)
+ else
+ fun_l13_n741(x)
+ end
+end
+
+def fun_l12_n735(x)
+ if (x < 1)
+ fun_l13_n310(x)
+ else
+ fun_l13_n940(x)
+ end
+end
+
+def fun_l12_n736(x)
+ if (x < 1)
+ fun_l13_n312(x)
+ else
+ fun_l13_n46(x)
+ end
+end
+
+def fun_l12_n737(x)
+ if (x < 1)
+ fun_l13_n473(x)
+ else
+ fun_l13_n728(x)
+ end
+end
+
+def fun_l12_n738(x)
+ if (x < 1)
+ fun_l13_n602(x)
+ else
+ fun_l13_n652(x)
+ end
+end
+
+def fun_l12_n739(x)
+ if (x < 1)
+ fun_l13_n397(x)
+ else
+ fun_l13_n855(x)
+ end
+end
+
+def fun_l12_n740(x)
+ if (x < 1)
+ fun_l13_n81(x)
+ else
+ fun_l13_n32(x)
+ end
+end
+
+def fun_l12_n741(x)
+ if (x < 1)
+ fun_l13_n822(x)
+ else
+ fun_l13_n231(x)
+ end
+end
+
+def fun_l12_n742(x)
+ if (x < 1)
+ fun_l13_n200(x)
+ else
+ fun_l13_n440(x)
+ end
+end
+
+def fun_l12_n743(x)
+ if (x < 1)
+ fun_l13_n415(x)
+ else
+ fun_l13_n631(x)
+ end
+end
+
+def fun_l12_n744(x)
+ if (x < 1)
+ fun_l13_n353(x)
+ else
+ fun_l13_n536(x)
+ end
+end
+
+def fun_l12_n745(x)
+ if (x < 1)
+ fun_l13_n986(x)
+ else
+ fun_l13_n384(x)
+ end
+end
+
+def fun_l12_n746(x)
+ if (x < 1)
+ fun_l13_n237(x)
+ else
+ fun_l13_n583(x)
+ end
+end
+
+def fun_l12_n747(x)
+ if (x < 1)
+ fun_l13_n518(x)
+ else
+ fun_l13_n717(x)
+ end
+end
+
+def fun_l12_n748(x)
+ if (x < 1)
+ fun_l13_n242(x)
+ else
+ fun_l13_n180(x)
+ end
+end
+
+def fun_l12_n749(x)
+ if (x < 1)
+ fun_l13_n369(x)
+ else
+ fun_l13_n249(x)
+ end
+end
+
+def fun_l12_n750(x)
+ if (x < 1)
+ fun_l13_n335(x)
+ else
+ fun_l13_n180(x)
+ end
+end
+
+def fun_l12_n751(x)
+ if (x < 1)
+ fun_l13_n952(x)
+ else
+ fun_l13_n506(x)
+ end
+end
+
+def fun_l12_n752(x)
+ if (x < 1)
+ fun_l13_n941(x)
+ else
+ fun_l13_n251(x)
+ end
+end
+
+def fun_l12_n753(x)
+ if (x < 1)
+ fun_l13_n21(x)
+ else
+ fun_l13_n536(x)
+ end
+end
+
+def fun_l12_n754(x)
+ if (x < 1)
+ fun_l13_n123(x)
+ else
+ fun_l13_n976(x)
+ end
+end
+
+def fun_l12_n755(x)
+ if (x < 1)
+ fun_l13_n229(x)
+ else
+ fun_l13_n535(x)
+ end
+end
+
+def fun_l12_n756(x)
+ if (x < 1)
+ fun_l13_n23(x)
+ else
+ fun_l13_n976(x)
+ end
+end
+
+def fun_l12_n757(x)
+ if (x < 1)
+ fun_l13_n755(x)
+ else
+ fun_l13_n677(x)
+ end
+end
+
+def fun_l12_n758(x)
+ if (x < 1)
+ fun_l13_n692(x)
+ else
+ fun_l13_n334(x)
+ end
+end
+
+def fun_l12_n759(x)
+ if (x < 1)
+ fun_l13_n380(x)
+ else
+ fun_l13_n903(x)
+ end
+end
+
+def fun_l12_n760(x)
+ if (x < 1)
+ fun_l13_n16(x)
+ else
+ fun_l13_n750(x)
+ end
+end
+
+def fun_l12_n761(x)
+ if (x < 1)
+ fun_l13_n186(x)
+ else
+ fun_l13_n639(x)
+ end
+end
+
+def fun_l12_n762(x)
+ if (x < 1)
+ fun_l13_n163(x)
+ else
+ fun_l13_n273(x)
+ end
+end
+
+def fun_l12_n763(x)
+ if (x < 1)
+ fun_l13_n791(x)
+ else
+ fun_l13_n55(x)
+ end
+end
+
+def fun_l12_n764(x)
+ if (x < 1)
+ fun_l13_n10(x)
+ else
+ fun_l13_n672(x)
+ end
+end
+
+def fun_l12_n765(x)
+ if (x < 1)
+ fun_l13_n382(x)
+ else
+ fun_l13_n284(x)
+ end
+end
+
+def fun_l12_n766(x)
+ if (x < 1)
+ fun_l13_n940(x)
+ else
+ fun_l13_n716(x)
+ end
+end
+
+def fun_l12_n767(x)
+ if (x < 1)
+ fun_l13_n414(x)
+ else
+ fun_l13_n997(x)
+ end
+end
+
+def fun_l12_n768(x)
+ if (x < 1)
+ fun_l13_n345(x)
+ else
+ fun_l13_n511(x)
+ end
+end
+
+def fun_l12_n769(x)
+ if (x < 1)
+ fun_l13_n915(x)
+ else
+ fun_l13_n907(x)
+ end
+end
+
+def fun_l12_n770(x)
+ if (x < 1)
+ fun_l13_n508(x)
+ else
+ fun_l13_n144(x)
+ end
+end
+
+def fun_l12_n771(x)
+ if (x < 1)
+ fun_l13_n764(x)
+ else
+ fun_l13_n211(x)
+ end
+end
+
+def fun_l12_n772(x)
+ if (x < 1)
+ fun_l13_n571(x)
+ else
+ fun_l13_n486(x)
+ end
+end
+
+def fun_l12_n773(x)
+ if (x < 1)
+ fun_l13_n503(x)
+ else
+ fun_l13_n561(x)
+ end
+end
+
+def fun_l12_n774(x)
+ if (x < 1)
+ fun_l13_n831(x)
+ else
+ fun_l13_n608(x)
+ end
+end
+
+def fun_l12_n775(x)
+ if (x < 1)
+ fun_l13_n254(x)
+ else
+ fun_l13_n626(x)
+ end
+end
+
+def fun_l12_n776(x)
+ if (x < 1)
+ fun_l13_n155(x)
+ else
+ fun_l13_n602(x)
+ end
+end
+
+def fun_l12_n777(x)
+ if (x < 1)
+ fun_l13_n331(x)
+ else
+ fun_l13_n837(x)
+ end
+end
+
+def fun_l12_n778(x)
+ if (x < 1)
+ fun_l13_n109(x)
+ else
+ fun_l13_n558(x)
+ end
+end
+
+def fun_l12_n779(x)
+ if (x < 1)
+ fun_l13_n557(x)
+ else
+ fun_l13_n784(x)
+ end
+end
+
+def fun_l12_n780(x)
+ if (x < 1)
+ fun_l13_n719(x)
+ else
+ fun_l13_n933(x)
+ end
+end
+
+def fun_l12_n781(x)
+ if (x < 1)
+ fun_l13_n63(x)
+ else
+ fun_l13_n776(x)
+ end
+end
+
+def fun_l12_n782(x)
+ if (x < 1)
+ fun_l13_n146(x)
+ else
+ fun_l13_n32(x)
+ end
+end
+
+def fun_l12_n783(x)
+ if (x < 1)
+ fun_l13_n452(x)
+ else
+ fun_l13_n621(x)
+ end
+end
+
+def fun_l12_n784(x)
+ if (x < 1)
+ fun_l13_n821(x)
+ else
+ fun_l13_n454(x)
+ end
+end
+
+def fun_l12_n785(x)
+ if (x < 1)
+ fun_l13_n943(x)
+ else
+ fun_l13_n835(x)
+ end
+end
+
+def fun_l12_n786(x)
+ if (x < 1)
+ fun_l13_n47(x)
+ else
+ fun_l13_n252(x)
+ end
+end
+
+def fun_l12_n787(x)
+ if (x < 1)
+ fun_l13_n759(x)
+ else
+ fun_l13_n820(x)
+ end
+end
+
+def fun_l12_n788(x)
+ if (x < 1)
+ fun_l13_n883(x)
+ else
+ fun_l13_n218(x)
+ end
+end
+
+def fun_l12_n789(x)
+ if (x < 1)
+ fun_l13_n10(x)
+ else
+ fun_l13_n765(x)
+ end
+end
+
+def fun_l12_n790(x)
+ if (x < 1)
+ fun_l13_n6(x)
+ else
+ fun_l13_n424(x)
+ end
+end
+
+def fun_l12_n791(x)
+ if (x < 1)
+ fun_l13_n645(x)
+ else
+ fun_l13_n598(x)
+ end
+end
+
+def fun_l12_n792(x)
+ if (x < 1)
+ fun_l13_n237(x)
+ else
+ fun_l13_n141(x)
+ end
+end
+
+def fun_l12_n793(x)
+ if (x < 1)
+ fun_l13_n793(x)
+ else
+ fun_l13_n109(x)
+ end
+end
+
+def fun_l12_n794(x)
+ if (x < 1)
+ fun_l13_n404(x)
+ else
+ fun_l13_n864(x)
+ end
+end
+
+def fun_l12_n795(x)
+ if (x < 1)
+ fun_l13_n511(x)
+ else
+ fun_l13_n620(x)
+ end
+end
+
+def fun_l12_n796(x)
+ if (x < 1)
+ fun_l13_n880(x)
+ else
+ fun_l13_n330(x)
+ end
+end
+
+def fun_l12_n797(x)
+ if (x < 1)
+ fun_l13_n637(x)
+ else
+ fun_l13_n13(x)
+ end
+end
+
+def fun_l12_n798(x)
+ if (x < 1)
+ fun_l13_n567(x)
+ else
+ fun_l13_n958(x)
+ end
+end
+
+def fun_l12_n799(x)
+ if (x < 1)
+ fun_l13_n715(x)
+ else
+ fun_l13_n983(x)
+ end
+end
+
+def fun_l12_n800(x)
+ if (x < 1)
+ fun_l13_n502(x)
+ else
+ fun_l13_n600(x)
+ end
+end
+
+def fun_l12_n801(x)
+ if (x < 1)
+ fun_l13_n645(x)
+ else
+ fun_l13_n713(x)
+ end
+end
+
+def fun_l12_n802(x)
+ if (x < 1)
+ fun_l13_n804(x)
+ else
+ fun_l13_n475(x)
+ end
+end
+
+def fun_l12_n803(x)
+ if (x < 1)
+ fun_l13_n286(x)
+ else
+ fun_l13_n135(x)
+ end
+end
+
+def fun_l12_n804(x)
+ if (x < 1)
+ fun_l13_n420(x)
+ else
+ fun_l13_n534(x)
+ end
+end
+
+def fun_l12_n805(x)
+ if (x < 1)
+ fun_l13_n345(x)
+ else
+ fun_l13_n833(x)
+ end
+end
+
+def fun_l12_n806(x)
+ if (x < 1)
+ fun_l13_n558(x)
+ else
+ fun_l13_n831(x)
+ end
+end
+
+def fun_l12_n807(x)
+ if (x < 1)
+ fun_l13_n82(x)
+ else
+ fun_l13_n56(x)
+ end
+end
+
+def fun_l12_n808(x)
+ if (x < 1)
+ fun_l13_n809(x)
+ else
+ fun_l13_n12(x)
+ end
+end
+
+def fun_l12_n809(x)
+ if (x < 1)
+ fun_l13_n450(x)
+ else
+ fun_l13_n326(x)
+ end
+end
+
+def fun_l12_n810(x)
+ if (x < 1)
+ fun_l13_n567(x)
+ else
+ fun_l13_n437(x)
+ end
+end
+
+def fun_l12_n811(x)
+ if (x < 1)
+ fun_l13_n880(x)
+ else
+ fun_l13_n785(x)
+ end
+end
+
+def fun_l12_n812(x)
+ if (x < 1)
+ fun_l13_n585(x)
+ else
+ fun_l13_n610(x)
+ end
+end
+
+def fun_l12_n813(x)
+ if (x < 1)
+ fun_l13_n41(x)
+ else
+ fun_l13_n911(x)
+ end
+end
+
+def fun_l12_n814(x)
+ if (x < 1)
+ fun_l13_n438(x)
+ else
+ fun_l13_n300(x)
+ end
+end
+
+def fun_l12_n815(x)
+ if (x < 1)
+ fun_l13_n363(x)
+ else
+ fun_l13_n357(x)
+ end
+end
+
+def fun_l12_n816(x)
+ if (x < 1)
+ fun_l13_n172(x)
+ else
+ fun_l13_n25(x)
+ end
+end
+
+def fun_l12_n817(x)
+ if (x < 1)
+ fun_l13_n593(x)
+ else
+ fun_l13_n853(x)
+ end
+end
+
+def fun_l12_n818(x)
+ if (x < 1)
+ fun_l13_n790(x)
+ else
+ fun_l13_n575(x)
+ end
+end
+
+def fun_l12_n819(x)
+ if (x < 1)
+ fun_l13_n795(x)
+ else
+ fun_l13_n877(x)
+ end
+end
+
+def fun_l12_n820(x)
+ if (x < 1)
+ fun_l13_n563(x)
+ else
+ fun_l13_n170(x)
+ end
+end
+
+def fun_l12_n821(x)
+ if (x < 1)
+ fun_l13_n405(x)
+ else
+ fun_l13_n985(x)
+ end
+end
+
+def fun_l12_n822(x)
+ if (x < 1)
+ fun_l13_n668(x)
+ else
+ fun_l13_n702(x)
+ end
+end
+
+def fun_l12_n823(x)
+ if (x < 1)
+ fun_l13_n210(x)
+ else
+ fun_l13_n450(x)
+ end
+end
+
+def fun_l12_n824(x)
+ if (x < 1)
+ fun_l13_n817(x)
+ else
+ fun_l13_n693(x)
+ end
+end
+
+def fun_l12_n825(x)
+ if (x < 1)
+ fun_l13_n909(x)
+ else
+ fun_l13_n857(x)
+ end
+end
+
+def fun_l12_n826(x)
+ if (x < 1)
+ fun_l13_n944(x)
+ else
+ fun_l13_n601(x)
+ end
+end
+
+def fun_l12_n827(x)
+ if (x < 1)
+ fun_l13_n152(x)
+ else
+ fun_l13_n187(x)
+ end
+end
+
+def fun_l12_n828(x)
+ if (x < 1)
+ fun_l13_n735(x)
+ else
+ fun_l13_n198(x)
+ end
+end
+
+def fun_l12_n829(x)
+ if (x < 1)
+ fun_l13_n892(x)
+ else
+ fun_l13_n362(x)
+ end
+end
+
+def fun_l12_n830(x)
+ if (x < 1)
+ fun_l13_n636(x)
+ else
+ fun_l13_n779(x)
+ end
+end
+
+def fun_l12_n831(x)
+ if (x < 1)
+ fun_l13_n597(x)
+ else
+ fun_l13_n186(x)
+ end
+end
+
+def fun_l12_n832(x)
+ if (x < 1)
+ fun_l13_n680(x)
+ else
+ fun_l13_n477(x)
+ end
+end
+
+def fun_l12_n833(x)
+ if (x < 1)
+ fun_l13_n334(x)
+ else
+ fun_l13_n508(x)
+ end
+end
+
+def fun_l12_n834(x)
+ if (x < 1)
+ fun_l13_n927(x)
+ else
+ fun_l13_n111(x)
+ end
+end
+
+def fun_l12_n835(x)
+ if (x < 1)
+ fun_l13_n424(x)
+ else
+ fun_l13_n326(x)
+ end
+end
+
+def fun_l12_n836(x)
+ if (x < 1)
+ fun_l13_n624(x)
+ else
+ fun_l13_n270(x)
+ end
+end
+
+def fun_l12_n837(x)
+ if (x < 1)
+ fun_l13_n458(x)
+ else
+ fun_l13_n736(x)
+ end
+end
+
+def fun_l12_n838(x)
+ if (x < 1)
+ fun_l13_n881(x)
+ else
+ fun_l13_n702(x)
+ end
+end
+
+def fun_l12_n839(x)
+ if (x < 1)
+ fun_l13_n778(x)
+ else
+ fun_l13_n374(x)
+ end
+end
+
+def fun_l12_n840(x)
+ if (x < 1)
+ fun_l13_n118(x)
+ else
+ fun_l13_n543(x)
+ end
+end
+
+def fun_l12_n841(x)
+ if (x < 1)
+ fun_l13_n270(x)
+ else
+ fun_l13_n810(x)
+ end
+end
+
+def fun_l12_n842(x)
+ if (x < 1)
+ fun_l13_n122(x)
+ else
+ fun_l13_n905(x)
+ end
+end
+
+def fun_l12_n843(x)
+ if (x < 1)
+ fun_l13_n154(x)
+ else
+ fun_l13_n636(x)
+ end
+end
+
+def fun_l12_n844(x)
+ if (x < 1)
+ fun_l13_n603(x)
+ else
+ fun_l13_n586(x)
+ end
+end
+
+def fun_l12_n845(x)
+ if (x < 1)
+ fun_l13_n264(x)
+ else
+ fun_l13_n492(x)
+ end
+end
+
+def fun_l12_n846(x)
+ if (x < 1)
+ fun_l13_n264(x)
+ else
+ fun_l13_n214(x)
+ end
+end
+
+def fun_l12_n847(x)
+ if (x < 1)
+ fun_l13_n337(x)
+ else
+ fun_l13_n339(x)
+ end
+end
+
+def fun_l12_n848(x)
+ if (x < 1)
+ fun_l13_n83(x)
+ else
+ fun_l13_n454(x)
+ end
+end
+
+def fun_l12_n849(x)
+ if (x < 1)
+ fun_l13_n129(x)
+ else
+ fun_l13_n30(x)
+ end
+end
+
+def fun_l12_n850(x)
+ if (x < 1)
+ fun_l13_n602(x)
+ else
+ fun_l13_n355(x)
+ end
+end
+
+def fun_l12_n851(x)
+ if (x < 1)
+ fun_l13_n650(x)
+ else
+ fun_l13_n715(x)
+ end
+end
+
+def fun_l12_n852(x)
+ if (x < 1)
+ fun_l13_n482(x)
+ else
+ fun_l13_n852(x)
+ end
+end
+
+def fun_l12_n853(x)
+ if (x < 1)
+ fun_l13_n946(x)
+ else
+ fun_l13_n393(x)
+ end
+end
+
+def fun_l12_n854(x)
+ if (x < 1)
+ fun_l13_n16(x)
+ else
+ fun_l13_n512(x)
+ end
+end
+
+def fun_l12_n855(x)
+ if (x < 1)
+ fun_l13_n469(x)
+ else
+ fun_l13_n567(x)
+ end
+end
+
+def fun_l12_n856(x)
+ if (x < 1)
+ fun_l13_n531(x)
+ else
+ fun_l13_n39(x)
+ end
+end
+
+def fun_l12_n857(x)
+ if (x < 1)
+ fun_l13_n673(x)
+ else
+ fun_l13_n670(x)
+ end
+end
+
+def fun_l12_n858(x)
+ if (x < 1)
+ fun_l13_n83(x)
+ else
+ fun_l13_n588(x)
+ end
+end
+
+def fun_l12_n859(x)
+ if (x < 1)
+ fun_l13_n247(x)
+ else
+ fun_l13_n460(x)
+ end
+end
+
+def fun_l12_n860(x)
+ if (x < 1)
+ fun_l13_n621(x)
+ else
+ fun_l13_n229(x)
+ end
+end
+
+def fun_l12_n861(x)
+ if (x < 1)
+ fun_l13_n121(x)
+ else
+ fun_l13_n147(x)
+ end
+end
+
+def fun_l12_n862(x)
+ if (x < 1)
+ fun_l13_n293(x)
+ else
+ fun_l13_n976(x)
+ end
+end
+
+def fun_l12_n863(x)
+ if (x < 1)
+ fun_l13_n64(x)
+ else
+ fun_l13_n569(x)
+ end
+end
+
+def fun_l12_n864(x)
+ if (x < 1)
+ fun_l13_n802(x)
+ else
+ fun_l13_n962(x)
+ end
+end
+
+def fun_l12_n865(x)
+ if (x < 1)
+ fun_l13_n406(x)
+ else
+ fun_l13_n571(x)
+ end
+end
+
+def fun_l12_n866(x)
+ if (x < 1)
+ fun_l13_n798(x)
+ else
+ fun_l13_n418(x)
+ end
+end
+
+def fun_l12_n867(x)
+ if (x < 1)
+ fun_l13_n725(x)
+ else
+ fun_l13_n716(x)
+ end
+end
+
+def fun_l12_n868(x)
+ if (x < 1)
+ fun_l13_n245(x)
+ else
+ fun_l13_n154(x)
+ end
+end
+
+def fun_l12_n869(x)
+ if (x < 1)
+ fun_l13_n954(x)
+ else
+ fun_l13_n242(x)
+ end
+end
+
+def fun_l12_n870(x)
+ if (x < 1)
+ fun_l13_n649(x)
+ else
+ fun_l13_n160(x)
+ end
+end
+
+def fun_l12_n871(x)
+ if (x < 1)
+ fun_l13_n700(x)
+ else
+ fun_l13_n863(x)
+ end
+end
+
+def fun_l12_n872(x)
+ if (x < 1)
+ fun_l13_n60(x)
+ else
+ fun_l13_n359(x)
+ end
+end
+
+def fun_l12_n873(x)
+ if (x < 1)
+ fun_l13_n820(x)
+ else
+ fun_l13_n247(x)
+ end
+end
+
+def fun_l12_n874(x)
+ if (x < 1)
+ fun_l13_n294(x)
+ else
+ fun_l13_n179(x)
+ end
+end
+
+def fun_l12_n875(x)
+ if (x < 1)
+ fun_l13_n599(x)
+ else
+ fun_l13_n309(x)
+ end
+end
+
+def fun_l12_n876(x)
+ if (x < 1)
+ fun_l13_n922(x)
+ else
+ fun_l13_n632(x)
+ end
+end
+
+def fun_l12_n877(x)
+ if (x < 1)
+ fun_l13_n921(x)
+ else
+ fun_l13_n200(x)
+ end
+end
+
+def fun_l12_n878(x)
+ if (x < 1)
+ fun_l13_n375(x)
+ else
+ fun_l13_n109(x)
+ end
+end
+
+def fun_l12_n879(x)
+ if (x < 1)
+ fun_l13_n771(x)
+ else
+ fun_l13_n758(x)
+ end
+end
+
+def fun_l12_n880(x)
+ if (x < 1)
+ fun_l13_n887(x)
+ else
+ fun_l13_n958(x)
+ end
+end
+
+def fun_l12_n881(x)
+ if (x < 1)
+ fun_l13_n668(x)
+ else
+ fun_l13_n508(x)
+ end
+end
+
+def fun_l12_n882(x)
+ if (x < 1)
+ fun_l13_n822(x)
+ else
+ fun_l13_n933(x)
+ end
+end
+
+def fun_l12_n883(x)
+ if (x < 1)
+ fun_l13_n328(x)
+ else
+ fun_l13_n152(x)
+ end
+end
+
+def fun_l12_n884(x)
+ if (x < 1)
+ fun_l13_n978(x)
+ else
+ fun_l13_n282(x)
+ end
+end
+
+def fun_l12_n885(x)
+ if (x < 1)
+ fun_l13_n91(x)
+ else
+ fun_l13_n592(x)
+ end
+end
+
+def fun_l12_n886(x)
+ if (x < 1)
+ fun_l13_n844(x)
+ else
+ fun_l13_n254(x)
+ end
+end
+
+def fun_l12_n887(x)
+ if (x < 1)
+ fun_l13_n49(x)
+ else
+ fun_l13_n430(x)
+ end
+end
+
+def fun_l12_n888(x)
+ if (x < 1)
+ fun_l13_n653(x)
+ else
+ fun_l13_n612(x)
+ end
+end
+
+def fun_l12_n889(x)
+ if (x < 1)
+ fun_l13_n352(x)
+ else
+ fun_l13_n228(x)
+ end
+end
+
+def fun_l12_n890(x)
+ if (x < 1)
+ fun_l13_n952(x)
+ else
+ fun_l13_n505(x)
+ end
+end
+
+def fun_l12_n891(x)
+ if (x < 1)
+ fun_l13_n381(x)
+ else
+ fun_l13_n799(x)
+ end
+end
+
+def fun_l12_n892(x)
+ if (x < 1)
+ fun_l13_n160(x)
+ else
+ fun_l13_n78(x)
+ end
+end
+
+def fun_l12_n893(x)
+ if (x < 1)
+ fun_l13_n554(x)
+ else
+ fun_l13_n383(x)
+ end
+end
+
+def fun_l12_n894(x)
+ if (x < 1)
+ fun_l13_n475(x)
+ else
+ fun_l13_n853(x)
+ end
+end
+
+def fun_l12_n895(x)
+ if (x < 1)
+ fun_l13_n588(x)
+ else
+ fun_l13_n452(x)
+ end
+end
+
+def fun_l12_n896(x)
+ if (x < 1)
+ fun_l13_n991(x)
+ else
+ fun_l13_n758(x)
+ end
+end
+
+def fun_l12_n897(x)
+ if (x < 1)
+ fun_l13_n808(x)
+ else
+ fun_l13_n742(x)
+ end
+end
+
+def fun_l12_n898(x)
+ if (x < 1)
+ fun_l13_n654(x)
+ else
+ fun_l13_n772(x)
+ end
+end
+
+def fun_l12_n899(x)
+ if (x < 1)
+ fun_l13_n365(x)
+ else
+ fun_l13_n3(x)
+ end
+end
+
+def fun_l12_n900(x)
+ if (x < 1)
+ fun_l13_n322(x)
+ else
+ fun_l13_n143(x)
+ end
+end
+
+def fun_l12_n901(x)
+ if (x < 1)
+ fun_l13_n833(x)
+ else
+ fun_l13_n19(x)
+ end
+end
+
+def fun_l12_n902(x)
+ if (x < 1)
+ fun_l13_n796(x)
+ else
+ fun_l13_n140(x)
+ end
+end
+
+def fun_l12_n903(x)
+ if (x < 1)
+ fun_l13_n866(x)
+ else
+ fun_l13_n227(x)
+ end
+end
+
+def fun_l12_n904(x)
+ if (x < 1)
+ fun_l13_n814(x)
+ else
+ fun_l13_n714(x)
+ end
+end
+
+def fun_l12_n905(x)
+ if (x < 1)
+ fun_l13_n841(x)
+ else
+ fun_l13_n802(x)
+ end
+end
+
+def fun_l12_n906(x)
+ if (x < 1)
+ fun_l13_n212(x)
+ else
+ fun_l13_n14(x)
+ end
+end
+
+def fun_l12_n907(x)
+ if (x < 1)
+ fun_l13_n35(x)
+ else
+ fun_l13_n952(x)
+ end
+end
+
+def fun_l12_n908(x)
+ if (x < 1)
+ fun_l13_n181(x)
+ else
+ fun_l13_n539(x)
+ end
+end
+
+def fun_l12_n909(x)
+ if (x < 1)
+ fun_l13_n770(x)
+ else
+ fun_l13_n80(x)
+ end
+end
+
+def fun_l12_n910(x)
+ if (x < 1)
+ fun_l13_n421(x)
+ else
+ fun_l13_n512(x)
+ end
+end
+
+def fun_l12_n911(x)
+ if (x < 1)
+ fun_l13_n710(x)
+ else
+ fun_l13_n666(x)
+ end
+end
+
+def fun_l12_n912(x)
+ if (x < 1)
+ fun_l13_n319(x)
+ else
+ fun_l13_n491(x)
+ end
+end
+
+def fun_l12_n913(x)
+ if (x < 1)
+ fun_l13_n924(x)
+ else
+ fun_l13_n198(x)
+ end
+end
+
+def fun_l12_n914(x)
+ if (x < 1)
+ fun_l13_n707(x)
+ else
+ fun_l13_n91(x)
+ end
+end
+
+def fun_l12_n915(x)
+ if (x < 1)
+ fun_l13_n29(x)
+ else
+ fun_l13_n134(x)
+ end
+end
+
+def fun_l12_n916(x)
+ if (x < 1)
+ fun_l13_n314(x)
+ else
+ fun_l13_n831(x)
+ end
+end
+
+def fun_l12_n917(x)
+ if (x < 1)
+ fun_l13_n986(x)
+ else
+ fun_l13_n732(x)
+ end
+end
+
+def fun_l12_n918(x)
+ if (x < 1)
+ fun_l13_n787(x)
+ else
+ fun_l13_n232(x)
+ end
+end
+
+def fun_l12_n919(x)
+ if (x < 1)
+ fun_l13_n452(x)
+ else
+ fun_l13_n386(x)
+ end
+end
+
+def fun_l12_n920(x)
+ if (x < 1)
+ fun_l13_n12(x)
+ else
+ fun_l13_n264(x)
+ end
+end
+
+def fun_l12_n921(x)
+ if (x < 1)
+ fun_l13_n734(x)
+ else
+ fun_l13_n885(x)
+ end
+end
+
+def fun_l12_n922(x)
+ if (x < 1)
+ fun_l13_n180(x)
+ else
+ fun_l13_n509(x)
+ end
+end
+
+def fun_l12_n923(x)
+ if (x < 1)
+ fun_l13_n783(x)
+ else
+ fun_l13_n212(x)
+ end
+end
+
+def fun_l12_n924(x)
+ if (x < 1)
+ fun_l13_n623(x)
+ else
+ fun_l13_n159(x)
+ end
+end
+
+def fun_l12_n925(x)
+ if (x < 1)
+ fun_l13_n361(x)
+ else
+ fun_l13_n47(x)
+ end
+end
+
+def fun_l12_n926(x)
+ if (x < 1)
+ fun_l13_n355(x)
+ else
+ fun_l13_n337(x)
+ end
+end
+
+def fun_l12_n927(x)
+ if (x < 1)
+ fun_l13_n892(x)
+ else
+ fun_l13_n814(x)
+ end
+end
+
+def fun_l12_n928(x)
+ if (x < 1)
+ fun_l13_n173(x)
+ else
+ fun_l13_n613(x)
+ end
+end
+
+def fun_l12_n929(x)
+ if (x < 1)
+ fun_l13_n140(x)
+ else
+ fun_l13_n782(x)
+ end
+end
+
+def fun_l12_n930(x)
+ if (x < 1)
+ fun_l13_n964(x)
+ else
+ fun_l13_n830(x)
+ end
+end
+
+def fun_l12_n931(x)
+ if (x < 1)
+ fun_l13_n110(x)
+ else
+ fun_l13_n767(x)
+ end
+end
+
+def fun_l12_n932(x)
+ if (x < 1)
+ fun_l13_n738(x)
+ else
+ fun_l13_n73(x)
+ end
+end
+
+def fun_l12_n933(x)
+ if (x < 1)
+ fun_l13_n92(x)
+ else
+ fun_l13_n113(x)
+ end
+end
+
+def fun_l12_n934(x)
+ if (x < 1)
+ fun_l13_n377(x)
+ else
+ fun_l13_n464(x)
+ end
+end
+
+def fun_l12_n935(x)
+ if (x < 1)
+ fun_l13_n544(x)
+ else
+ fun_l13_n808(x)
+ end
+end
+
+def fun_l12_n936(x)
+ if (x < 1)
+ fun_l13_n36(x)
+ else
+ fun_l13_n343(x)
+ end
+end
+
+def fun_l12_n937(x)
+ if (x < 1)
+ fun_l13_n745(x)
+ else
+ fun_l13_n342(x)
+ end
+end
+
+def fun_l12_n938(x)
+ if (x < 1)
+ fun_l13_n238(x)
+ else
+ fun_l13_n703(x)
+ end
+end
+
+def fun_l12_n939(x)
+ if (x < 1)
+ fun_l13_n229(x)
+ else
+ fun_l13_n118(x)
+ end
+end
+
+def fun_l12_n940(x)
+ if (x < 1)
+ fun_l13_n90(x)
+ else
+ fun_l13_n0(x)
+ end
+end
+
+def fun_l12_n941(x)
+ if (x < 1)
+ fun_l13_n586(x)
+ else
+ fun_l13_n99(x)
+ end
+end
+
+def fun_l12_n942(x)
+ if (x < 1)
+ fun_l13_n755(x)
+ else
+ fun_l13_n573(x)
+ end
+end
+
+def fun_l12_n943(x)
+ if (x < 1)
+ fun_l13_n74(x)
+ else
+ fun_l13_n805(x)
+ end
+end
+
+def fun_l12_n944(x)
+ if (x < 1)
+ fun_l13_n574(x)
+ else
+ fun_l13_n876(x)
+ end
+end
+
+def fun_l12_n945(x)
+ if (x < 1)
+ fun_l13_n0(x)
+ else
+ fun_l13_n478(x)
+ end
+end
+
+def fun_l12_n946(x)
+ if (x < 1)
+ fun_l13_n536(x)
+ else
+ fun_l13_n957(x)
+ end
+end
+
+def fun_l12_n947(x)
+ if (x < 1)
+ fun_l13_n644(x)
+ else
+ fun_l13_n285(x)
+ end
+end
+
+def fun_l12_n948(x)
+ if (x < 1)
+ fun_l13_n215(x)
+ else
+ fun_l13_n914(x)
+ end
+end
+
+def fun_l12_n949(x)
+ if (x < 1)
+ fun_l13_n265(x)
+ else
+ fun_l13_n262(x)
+ end
+end
+
+def fun_l12_n950(x)
+ if (x < 1)
+ fun_l13_n44(x)
+ else
+ fun_l13_n917(x)
+ end
+end
+
+def fun_l12_n951(x)
+ if (x < 1)
+ fun_l13_n222(x)
+ else
+ fun_l13_n53(x)
+ end
+end
+
+def fun_l12_n952(x)
+ if (x < 1)
+ fun_l13_n149(x)
+ else
+ fun_l13_n11(x)
+ end
+end
+
+def fun_l12_n953(x)
+ if (x < 1)
+ fun_l13_n827(x)
+ else
+ fun_l13_n737(x)
+ end
+end
+
+def fun_l12_n954(x)
+ if (x < 1)
+ fun_l13_n655(x)
+ else
+ fun_l13_n308(x)
+ end
+end
+
+def fun_l12_n955(x)
+ if (x < 1)
+ fun_l13_n108(x)
+ else
+ fun_l13_n940(x)
+ end
+end
+
+def fun_l12_n956(x)
+ if (x < 1)
+ fun_l13_n236(x)
+ else
+ fun_l13_n259(x)
+ end
+end
+
+def fun_l12_n957(x)
+ if (x < 1)
+ fun_l13_n886(x)
+ else
+ fun_l13_n955(x)
+ end
+end
+
+def fun_l12_n958(x)
+ if (x < 1)
+ fun_l13_n688(x)
+ else
+ fun_l13_n391(x)
+ end
+end
+
+def fun_l12_n959(x)
+ if (x < 1)
+ fun_l13_n521(x)
+ else
+ fun_l13_n395(x)
+ end
+end
+
+def fun_l12_n960(x)
+ if (x < 1)
+ fun_l13_n877(x)
+ else
+ fun_l13_n808(x)
+ end
+end
+
+def fun_l12_n961(x)
+ if (x < 1)
+ fun_l13_n29(x)
+ else
+ fun_l13_n422(x)
+ end
+end
+
+def fun_l12_n962(x)
+ if (x < 1)
+ fun_l13_n417(x)
+ else
+ fun_l13_n310(x)
+ end
+end
+
+def fun_l12_n963(x)
+ if (x < 1)
+ fun_l13_n987(x)
+ else
+ fun_l13_n462(x)
+ end
+end
+
+def fun_l12_n964(x)
+ if (x < 1)
+ fun_l13_n914(x)
+ else
+ fun_l13_n115(x)
+ end
+end
+
+def fun_l12_n965(x)
+ if (x < 1)
+ fun_l13_n895(x)
+ else
+ fun_l13_n504(x)
+ end
+end
+
+def fun_l12_n966(x)
+ if (x < 1)
+ fun_l13_n304(x)
+ else
+ fun_l13_n788(x)
+ end
+end
+
+def fun_l12_n967(x)
+ if (x < 1)
+ fun_l13_n354(x)
+ else
+ fun_l13_n592(x)
+ end
+end
+
+def fun_l12_n968(x)
+ if (x < 1)
+ fun_l13_n231(x)
+ else
+ fun_l13_n214(x)
+ end
+end
+
+def fun_l12_n969(x)
+ if (x < 1)
+ fun_l13_n435(x)
+ else
+ fun_l13_n779(x)
+ end
+end
+
+def fun_l12_n970(x)
+ if (x < 1)
+ fun_l13_n261(x)
+ else
+ fun_l13_n139(x)
+ end
+end
+
+def fun_l12_n971(x)
+ if (x < 1)
+ fun_l13_n320(x)
+ else
+ fun_l13_n749(x)
+ end
+end
+
+def fun_l12_n972(x)
+ if (x < 1)
+ fun_l13_n56(x)
+ else
+ fun_l13_n207(x)
+ end
+end
+
+def fun_l12_n973(x)
+ if (x < 1)
+ fun_l13_n238(x)
+ else
+ fun_l13_n637(x)
+ end
+end
+
+def fun_l12_n974(x)
+ if (x < 1)
+ fun_l13_n474(x)
+ else
+ fun_l13_n512(x)
+ end
+end
+
+def fun_l12_n975(x)
+ if (x < 1)
+ fun_l13_n552(x)
+ else
+ fun_l13_n355(x)
+ end
+end
+
+def fun_l12_n976(x)
+ if (x < 1)
+ fun_l13_n127(x)
+ else
+ fun_l13_n571(x)
+ end
+end
+
+def fun_l12_n977(x)
+ if (x < 1)
+ fun_l13_n261(x)
+ else
+ fun_l13_n845(x)
+ end
+end
+
+def fun_l12_n978(x)
+ if (x < 1)
+ fun_l13_n280(x)
+ else
+ fun_l13_n465(x)
+ end
+end
+
+def fun_l12_n979(x)
+ if (x < 1)
+ fun_l13_n249(x)
+ else
+ fun_l13_n66(x)
+ end
+end
+
+def fun_l12_n980(x)
+ if (x < 1)
+ fun_l13_n306(x)
+ else
+ fun_l13_n53(x)
+ end
+end
+
+def fun_l12_n981(x)
+ if (x < 1)
+ fun_l13_n827(x)
+ else
+ fun_l13_n395(x)
+ end
+end
+
+def fun_l12_n982(x)
+ if (x < 1)
+ fun_l13_n858(x)
+ else
+ fun_l13_n644(x)
+ end
+end
+
+def fun_l12_n983(x)
+ if (x < 1)
+ fun_l13_n50(x)
+ else
+ fun_l13_n671(x)
+ end
+end
+
+def fun_l12_n984(x)
+ if (x < 1)
+ fun_l13_n629(x)
+ else
+ fun_l13_n55(x)
+ end
+end
+
+def fun_l12_n985(x)
+ if (x < 1)
+ fun_l13_n73(x)
+ else
+ fun_l13_n958(x)
+ end
+end
+
+def fun_l12_n986(x)
+ if (x < 1)
+ fun_l13_n197(x)
+ else
+ fun_l13_n444(x)
+ end
+end
+
+def fun_l12_n987(x)
+ if (x < 1)
+ fun_l13_n108(x)
+ else
+ fun_l13_n898(x)
+ end
+end
+
+def fun_l12_n988(x)
+ if (x < 1)
+ fun_l13_n153(x)
+ else
+ fun_l13_n278(x)
+ end
+end
+
+def fun_l12_n989(x)
+ if (x < 1)
+ fun_l13_n764(x)
+ else
+ fun_l13_n712(x)
+ end
+end
+
+def fun_l12_n990(x)
+ if (x < 1)
+ fun_l13_n711(x)
+ else
+ fun_l13_n825(x)
+ end
+end
+
+def fun_l12_n991(x)
+ if (x < 1)
+ fun_l13_n767(x)
+ else
+ fun_l13_n169(x)
+ end
+end
+
+def fun_l12_n992(x)
+ if (x < 1)
+ fun_l13_n917(x)
+ else
+ fun_l13_n524(x)
+ end
+end
+
+def fun_l12_n993(x)
+ if (x < 1)
+ fun_l13_n589(x)
+ else
+ fun_l13_n695(x)
+ end
+end
+
+def fun_l12_n994(x)
+ if (x < 1)
+ fun_l13_n733(x)
+ else
+ fun_l13_n764(x)
+ end
+end
+
+def fun_l12_n995(x)
+ if (x < 1)
+ fun_l13_n86(x)
+ else
+ fun_l13_n547(x)
+ end
+end
+
+def fun_l12_n996(x)
+ if (x < 1)
+ fun_l13_n236(x)
+ else
+ fun_l13_n197(x)
+ end
+end
+
+def fun_l12_n997(x)
+ if (x < 1)
+ fun_l13_n592(x)
+ else
+ fun_l13_n313(x)
+ end
+end
+
+def fun_l12_n998(x)
+ if (x < 1)
+ fun_l13_n878(x)
+ else
+ fun_l13_n439(x)
+ end
+end
+
+def fun_l12_n999(x)
+ if (x < 1)
+ fun_l13_n904(x)
+ else
+ fun_l13_n651(x)
+ end
+end
+
+def fun_l13_n0(x)
+ if (x < 1)
+ fun_l14_n72(x)
+ else
+ fun_l14_n951(x)
+ end
+end
+
+def fun_l13_n1(x)
+ if (x < 1)
+ fun_l14_n950(x)
+ else
+ fun_l14_n170(x)
+ end
+end
+
+def fun_l13_n2(x)
+ if (x < 1)
+ fun_l14_n773(x)
+ else
+ fun_l14_n351(x)
+ end
+end
+
+def fun_l13_n3(x)
+ if (x < 1)
+ fun_l14_n814(x)
+ else
+ fun_l14_n304(x)
+ end
+end
+
+def fun_l13_n4(x)
+ if (x < 1)
+ fun_l14_n395(x)
+ else
+ fun_l14_n187(x)
+ end
+end
+
+def fun_l13_n5(x)
+ if (x < 1)
+ fun_l14_n60(x)
+ else
+ fun_l14_n165(x)
+ end
+end
+
+def fun_l13_n6(x)
+ if (x < 1)
+ fun_l14_n711(x)
+ else
+ fun_l14_n815(x)
+ end
+end
+
+def fun_l13_n7(x)
+ if (x < 1)
+ fun_l14_n396(x)
+ else
+ fun_l14_n614(x)
+ end
+end
+
+def fun_l13_n8(x)
+ if (x < 1)
+ fun_l14_n477(x)
+ else
+ fun_l14_n427(x)
+ end
+end
+
+def fun_l13_n9(x)
+ if (x < 1)
+ fun_l14_n803(x)
+ else
+ fun_l14_n655(x)
+ end
+end
+
+def fun_l13_n10(x)
+ if (x < 1)
+ fun_l14_n261(x)
+ else
+ fun_l14_n324(x)
+ end
+end
+
+def fun_l13_n11(x)
+ if (x < 1)
+ fun_l14_n485(x)
+ else
+ fun_l14_n302(x)
+ end
+end
+
+def fun_l13_n12(x)
+ if (x < 1)
+ fun_l14_n324(x)
+ else
+ fun_l14_n840(x)
+ end
+end
+
+def fun_l13_n13(x)
+ if (x < 1)
+ fun_l14_n811(x)
+ else
+ fun_l14_n357(x)
+ end
+end
+
+def fun_l13_n14(x)
+ if (x < 1)
+ fun_l14_n736(x)
+ else
+ fun_l14_n763(x)
+ end
+end
+
+def fun_l13_n15(x)
+ if (x < 1)
+ fun_l14_n572(x)
+ else
+ fun_l14_n557(x)
+ end
+end
+
+def fun_l13_n16(x)
+ if (x < 1)
+ fun_l14_n406(x)
+ else
+ fun_l14_n200(x)
+ end
+end
+
+def fun_l13_n17(x)
+ if (x < 1)
+ fun_l14_n500(x)
+ else
+ fun_l14_n480(x)
+ end
+end
+
+def fun_l13_n18(x)
+ if (x < 1)
+ fun_l14_n215(x)
+ else
+ fun_l14_n241(x)
+ end
+end
+
+def fun_l13_n19(x)
+ if (x < 1)
+ fun_l14_n341(x)
+ else
+ fun_l14_n142(x)
+ end
+end
+
+def fun_l13_n20(x)
+ if (x < 1)
+ fun_l14_n649(x)
+ else
+ fun_l14_n853(x)
+ end
+end
+
+def fun_l13_n21(x)
+ if (x < 1)
+ fun_l14_n153(x)
+ else
+ fun_l14_n295(x)
+ end
+end
+
+def fun_l13_n22(x)
+ if (x < 1)
+ fun_l14_n210(x)
+ else
+ fun_l14_n947(x)
+ end
+end
+
+def fun_l13_n23(x)
+ if (x < 1)
+ fun_l14_n764(x)
+ else
+ fun_l14_n810(x)
+ end
+end
+
+def fun_l13_n24(x)
+ if (x < 1)
+ fun_l14_n96(x)
+ else
+ fun_l14_n359(x)
+ end
+end
+
+def fun_l13_n25(x)
+ if (x < 1)
+ fun_l14_n542(x)
+ else
+ fun_l14_n506(x)
+ end
+end
+
+def fun_l13_n26(x)
+ if (x < 1)
+ fun_l14_n583(x)
+ else
+ fun_l14_n754(x)
+ end
+end
+
+def fun_l13_n27(x)
+ if (x < 1)
+ fun_l14_n881(x)
+ else
+ fun_l14_n693(x)
+ end
+end
+
+def fun_l13_n28(x)
+ if (x < 1)
+ fun_l14_n385(x)
+ else
+ fun_l14_n628(x)
+ end
+end
+
+def fun_l13_n29(x)
+ if (x < 1)
+ fun_l14_n429(x)
+ else
+ fun_l14_n370(x)
+ end
+end
+
+def fun_l13_n30(x)
+ if (x < 1)
+ fun_l14_n484(x)
+ else
+ fun_l14_n724(x)
+ end
+end
+
+def fun_l13_n31(x)
+ if (x < 1)
+ fun_l14_n328(x)
+ else
+ fun_l14_n857(x)
+ end
+end
+
+def fun_l13_n32(x)
+ if (x < 1)
+ fun_l14_n367(x)
+ else
+ fun_l14_n441(x)
+ end
+end
+
+def fun_l13_n33(x)
+ if (x < 1)
+ fun_l14_n322(x)
+ else
+ fun_l14_n390(x)
+ end
+end
+
+def fun_l13_n34(x)
+ if (x < 1)
+ fun_l14_n935(x)
+ else
+ fun_l14_n46(x)
+ end
+end
+
+def fun_l13_n35(x)
+ if (x < 1)
+ fun_l14_n274(x)
+ else
+ fun_l14_n536(x)
+ end
+end
+
+def fun_l13_n36(x)
+ if (x < 1)
+ fun_l14_n645(x)
+ else
+ fun_l14_n396(x)
+ end
+end
+
+def fun_l13_n37(x)
+ if (x < 1)
+ fun_l14_n905(x)
+ else
+ fun_l14_n19(x)
+ end
+end
+
+def fun_l13_n38(x)
+ if (x < 1)
+ fun_l14_n562(x)
+ else
+ fun_l14_n983(x)
+ end
+end
+
+def fun_l13_n39(x)
+ if (x < 1)
+ fun_l14_n846(x)
+ else
+ fun_l14_n140(x)
+ end
+end
+
+def fun_l13_n40(x)
+ if (x < 1)
+ fun_l14_n308(x)
+ else
+ fun_l14_n968(x)
+ end
+end
+
+def fun_l13_n41(x)
+ if (x < 1)
+ fun_l14_n299(x)
+ else
+ fun_l14_n364(x)
+ end
+end
+
+def fun_l13_n42(x)
+ if (x < 1)
+ fun_l14_n266(x)
+ else
+ fun_l14_n368(x)
+ end
+end
+
+def fun_l13_n43(x)
+ if (x < 1)
+ fun_l14_n216(x)
+ else
+ fun_l14_n894(x)
+ end
+end
+
+def fun_l13_n44(x)
+ if (x < 1)
+ fun_l14_n30(x)
+ else
+ fun_l14_n118(x)
+ end
+end
+
+def fun_l13_n45(x)
+ if (x < 1)
+ fun_l14_n66(x)
+ else
+ fun_l14_n677(x)
+ end
+end
+
+def fun_l13_n46(x)
+ if (x < 1)
+ fun_l14_n415(x)
+ else
+ fun_l14_n311(x)
+ end
+end
+
+def fun_l13_n47(x)
+ if (x < 1)
+ fun_l14_n63(x)
+ else
+ fun_l14_n410(x)
+ end
+end
+
+def fun_l13_n48(x)
+ if (x < 1)
+ fun_l14_n640(x)
+ else
+ fun_l14_n161(x)
+ end
+end
+
+def fun_l13_n49(x)
+ if (x < 1)
+ fun_l14_n546(x)
+ else
+ fun_l14_n655(x)
+ end
+end
+
+def fun_l13_n50(x)
+ if (x < 1)
+ fun_l14_n102(x)
+ else
+ fun_l14_n791(x)
+ end
+end
+
+def fun_l13_n51(x)
+ if (x < 1)
+ fun_l14_n333(x)
+ else
+ fun_l14_n641(x)
+ end
+end
+
+def fun_l13_n52(x)
+ if (x < 1)
+ fun_l14_n16(x)
+ else
+ fun_l14_n653(x)
+ end
+end
+
+def fun_l13_n53(x)
+ if (x < 1)
+ fun_l14_n842(x)
+ else
+ fun_l14_n780(x)
+ end
+end
+
+def fun_l13_n54(x)
+ if (x < 1)
+ fun_l14_n663(x)
+ else
+ fun_l14_n903(x)
+ end
+end
+
+def fun_l13_n55(x)
+ if (x < 1)
+ fun_l14_n745(x)
+ else
+ fun_l14_n925(x)
+ end
+end
+
+def fun_l13_n56(x)
+ if (x < 1)
+ fun_l14_n688(x)
+ else
+ fun_l14_n930(x)
+ end
+end
+
+def fun_l13_n57(x)
+ if (x < 1)
+ fun_l14_n58(x)
+ else
+ fun_l14_n864(x)
+ end
+end
+
+def fun_l13_n58(x)
+ if (x < 1)
+ fun_l14_n107(x)
+ else
+ fun_l14_n197(x)
+ end
+end
+
+def fun_l13_n59(x)
+ if (x < 1)
+ fun_l14_n334(x)
+ else
+ fun_l14_n147(x)
+ end
+end
+
+def fun_l13_n60(x)
+ if (x < 1)
+ fun_l14_n814(x)
+ else
+ fun_l14_n417(x)
+ end
+end
+
+def fun_l13_n61(x)
+ if (x < 1)
+ fun_l14_n696(x)
+ else
+ fun_l14_n973(x)
+ end
+end
+
+def fun_l13_n62(x)
+ if (x < 1)
+ fun_l14_n378(x)
+ else
+ fun_l14_n968(x)
+ end
+end
+
+def fun_l13_n63(x)
+ if (x < 1)
+ fun_l14_n107(x)
+ else
+ fun_l14_n100(x)
+ end
+end
+
+def fun_l13_n64(x)
+ if (x < 1)
+ fun_l14_n105(x)
+ else
+ fun_l14_n393(x)
+ end
+end
+
+def fun_l13_n65(x)
+ if (x < 1)
+ fun_l14_n833(x)
+ else
+ fun_l14_n424(x)
+ end
+end
+
+def fun_l13_n66(x)
+ if (x < 1)
+ fun_l14_n125(x)
+ else
+ fun_l14_n697(x)
+ end
+end
+
+def fun_l13_n67(x)
+ if (x < 1)
+ fun_l14_n684(x)
+ else
+ fun_l14_n458(x)
+ end
+end
+
+def fun_l13_n68(x)
+ if (x < 1)
+ fun_l14_n301(x)
+ else
+ fun_l14_n711(x)
+ end
+end
+
+def fun_l13_n69(x)
+ if (x < 1)
+ fun_l14_n131(x)
+ else
+ fun_l14_n552(x)
+ end
+end
+
+def fun_l13_n70(x)
+ if (x < 1)
+ fun_l14_n425(x)
+ else
+ fun_l14_n241(x)
+ end
+end
+
+def fun_l13_n71(x)
+ if (x < 1)
+ fun_l14_n531(x)
+ else
+ fun_l14_n364(x)
+ end
+end
+
+def fun_l13_n72(x)
+ if (x < 1)
+ fun_l14_n801(x)
+ else
+ fun_l14_n951(x)
+ end
+end
+
+def fun_l13_n73(x)
+ if (x < 1)
+ fun_l14_n415(x)
+ else
+ fun_l14_n294(x)
+ end
+end
+
+def fun_l13_n74(x)
+ if (x < 1)
+ fun_l14_n715(x)
+ else
+ fun_l14_n606(x)
+ end
+end
+
+def fun_l13_n75(x)
+ if (x < 1)
+ fun_l14_n932(x)
+ else
+ fun_l14_n928(x)
+ end
+end
+
+def fun_l13_n76(x)
+ if (x < 1)
+ fun_l14_n930(x)
+ else
+ fun_l14_n102(x)
+ end
+end
+
+def fun_l13_n77(x)
+ if (x < 1)
+ fun_l14_n293(x)
+ else
+ fun_l14_n301(x)
+ end
+end
+
+def fun_l13_n78(x)
+ if (x < 1)
+ fun_l14_n270(x)
+ else
+ fun_l14_n715(x)
+ end
+end
+
+def fun_l13_n79(x)
+ if (x < 1)
+ fun_l14_n862(x)
+ else
+ fun_l14_n589(x)
+ end
+end
+
+def fun_l13_n80(x)
+ if (x < 1)
+ fun_l14_n337(x)
+ else
+ fun_l14_n940(x)
+ end
+end
+
+def fun_l13_n81(x)
+ if (x < 1)
+ fun_l14_n394(x)
+ else
+ fun_l14_n902(x)
+ end
+end
+
+def fun_l13_n82(x)
+ if (x < 1)
+ fun_l14_n468(x)
+ else
+ fun_l14_n816(x)
+ end
+end
+
+def fun_l13_n83(x)
+ if (x < 1)
+ fun_l14_n517(x)
+ else
+ fun_l14_n633(x)
+ end
+end
+
+def fun_l13_n84(x)
+ if (x < 1)
+ fun_l14_n312(x)
+ else
+ fun_l14_n473(x)
+ end
+end
+
+def fun_l13_n85(x)
+ if (x < 1)
+ fun_l14_n377(x)
+ else
+ fun_l14_n616(x)
+ end
+end
+
+def fun_l13_n86(x)
+ if (x < 1)
+ fun_l14_n541(x)
+ else
+ fun_l14_n77(x)
+ end
+end
+
+def fun_l13_n87(x)
+ if (x < 1)
+ fun_l14_n66(x)
+ else
+ fun_l14_n162(x)
+ end
+end
+
+def fun_l13_n88(x)
+ if (x < 1)
+ fun_l14_n202(x)
+ else
+ fun_l14_n158(x)
+ end
+end
+
+def fun_l13_n89(x)
+ if (x < 1)
+ fun_l14_n549(x)
+ else
+ fun_l14_n947(x)
+ end
+end
+
+def fun_l13_n90(x)
+ if (x < 1)
+ fun_l14_n82(x)
+ else
+ fun_l14_n747(x)
+ end
+end
+
+def fun_l13_n91(x)
+ if (x < 1)
+ fun_l14_n374(x)
+ else
+ fun_l14_n738(x)
+ end
+end
+
+def fun_l13_n92(x)
+ if (x < 1)
+ fun_l14_n124(x)
+ else
+ fun_l14_n673(x)
+ end
+end
+
+def fun_l13_n93(x)
+ if (x < 1)
+ fun_l14_n405(x)
+ else
+ fun_l14_n562(x)
+ end
+end
+
+def fun_l13_n94(x)
+ if (x < 1)
+ fun_l14_n766(x)
+ else
+ fun_l14_n466(x)
+ end
+end
+
+def fun_l13_n95(x)
+ if (x < 1)
+ fun_l14_n908(x)
+ else
+ fun_l14_n208(x)
+ end
+end
+
+def fun_l13_n96(x)
+ if (x < 1)
+ fun_l14_n439(x)
+ else
+ fun_l14_n964(x)
+ end
+end
+
+def fun_l13_n97(x)
+ if (x < 1)
+ fun_l14_n529(x)
+ else
+ fun_l14_n374(x)
+ end
+end
+
+def fun_l13_n98(x)
+ if (x < 1)
+ fun_l14_n723(x)
+ else
+ fun_l14_n464(x)
+ end
+end
+
+def fun_l13_n99(x)
+ if (x < 1)
+ fun_l14_n849(x)
+ else
+ fun_l14_n951(x)
+ end
+end
+
+def fun_l13_n100(x)
+ if (x < 1)
+ fun_l14_n797(x)
+ else
+ fun_l14_n421(x)
+ end
+end
+
+def fun_l13_n101(x)
+ if (x < 1)
+ fun_l14_n989(x)
+ else
+ fun_l14_n392(x)
+ end
+end
+
+def fun_l13_n102(x)
+ if (x < 1)
+ fun_l14_n8(x)
+ else
+ fun_l14_n913(x)
+ end
+end
+
+def fun_l13_n103(x)
+ if (x < 1)
+ fun_l14_n498(x)
+ else
+ fun_l14_n248(x)
+ end
+end
+
+def fun_l13_n104(x)
+ if (x < 1)
+ fun_l14_n989(x)
+ else
+ fun_l14_n83(x)
+ end
+end
+
+def fun_l13_n105(x)
+ if (x < 1)
+ fun_l14_n943(x)
+ else
+ fun_l14_n358(x)
+ end
+end
+
+def fun_l13_n106(x)
+ if (x < 1)
+ fun_l14_n252(x)
+ else
+ fun_l14_n626(x)
+ end
+end
+
+def fun_l13_n107(x)
+ if (x < 1)
+ fun_l14_n495(x)
+ else
+ fun_l14_n627(x)
+ end
+end
+
+def fun_l13_n108(x)
+ if (x < 1)
+ fun_l14_n286(x)
+ else
+ fun_l14_n500(x)
+ end
+end
+
+def fun_l13_n109(x)
+ if (x < 1)
+ fun_l14_n927(x)
+ else
+ fun_l14_n627(x)
+ end
+end
+
+def fun_l13_n110(x)
+ if (x < 1)
+ fun_l14_n103(x)
+ else
+ fun_l14_n319(x)
+ end
+end
+
+def fun_l13_n111(x)
+ if (x < 1)
+ fun_l14_n730(x)
+ else
+ fun_l14_n960(x)
+ end
+end
+
+def fun_l13_n112(x)
+ if (x < 1)
+ fun_l14_n188(x)
+ else
+ fun_l14_n145(x)
+ end
+end
+
+def fun_l13_n113(x)
+ if (x < 1)
+ fun_l14_n361(x)
+ else
+ fun_l14_n707(x)
+ end
+end
+
+def fun_l13_n114(x)
+ if (x < 1)
+ fun_l14_n629(x)
+ else
+ fun_l14_n536(x)
+ end
+end
+
+def fun_l13_n115(x)
+ if (x < 1)
+ fun_l14_n276(x)
+ else
+ fun_l14_n244(x)
+ end
+end
+
+def fun_l13_n116(x)
+ if (x < 1)
+ fun_l14_n512(x)
+ else
+ fun_l14_n578(x)
+ end
+end
+
+def fun_l13_n117(x)
+ if (x < 1)
+ fun_l14_n448(x)
+ else
+ fun_l14_n437(x)
+ end
+end
+
+def fun_l13_n118(x)
+ if (x < 1)
+ fun_l14_n855(x)
+ else
+ fun_l14_n617(x)
+ end
+end
+
+def fun_l13_n119(x)
+ if (x < 1)
+ fun_l14_n467(x)
+ else
+ fun_l14_n594(x)
+ end
+end
+
+def fun_l13_n120(x)
+ if (x < 1)
+ fun_l14_n54(x)
+ else
+ fun_l14_n765(x)
+ end
+end
+
+def fun_l13_n121(x)
+ if (x < 1)
+ fun_l14_n700(x)
+ else
+ fun_l14_n189(x)
+ end
+end
+
+def fun_l13_n122(x)
+ if (x < 1)
+ fun_l14_n731(x)
+ else
+ fun_l14_n469(x)
+ end
+end
+
+def fun_l13_n123(x)
+ if (x < 1)
+ fun_l14_n6(x)
+ else
+ fun_l14_n451(x)
+ end
+end
+
+def fun_l13_n124(x)
+ if (x < 1)
+ fun_l14_n402(x)
+ else
+ fun_l14_n445(x)
+ end
+end
+
+def fun_l13_n125(x)
+ if (x < 1)
+ fun_l14_n412(x)
+ else
+ fun_l14_n551(x)
+ end
+end
+
+def fun_l13_n126(x)
+ if (x < 1)
+ fun_l14_n295(x)
+ else
+ fun_l14_n180(x)
+ end
+end
+
+def fun_l13_n127(x)
+ if (x < 1)
+ fun_l14_n873(x)
+ else
+ fun_l14_n209(x)
+ end
+end
+
+def fun_l13_n128(x)
+ if (x < 1)
+ fun_l14_n181(x)
+ else
+ fun_l14_n198(x)
+ end
+end
+
+def fun_l13_n129(x)
+ if (x < 1)
+ fun_l14_n817(x)
+ else
+ fun_l14_n894(x)
+ end
+end
+
+def fun_l13_n130(x)
+ if (x < 1)
+ fun_l14_n306(x)
+ else
+ fun_l14_n429(x)
+ end
+end
+
+def fun_l13_n131(x)
+ if (x < 1)
+ fun_l14_n573(x)
+ else
+ fun_l14_n120(x)
+ end
+end
+
+def fun_l13_n132(x)
+ if (x < 1)
+ fun_l14_n433(x)
+ else
+ fun_l14_n668(x)
+ end
+end
+
+def fun_l13_n133(x)
+ if (x < 1)
+ fun_l14_n653(x)
+ else
+ fun_l14_n934(x)
+ end
+end
+
+def fun_l13_n134(x)
+ if (x < 1)
+ fun_l14_n280(x)
+ else
+ fun_l14_n533(x)
+ end
+end
+
+def fun_l13_n135(x)
+ if (x < 1)
+ fun_l14_n471(x)
+ else
+ fun_l14_n612(x)
+ end
+end
+
+def fun_l13_n136(x)
+ if (x < 1)
+ fun_l14_n55(x)
+ else
+ fun_l14_n684(x)
+ end
+end
+
+def fun_l13_n137(x)
+ if (x < 1)
+ fun_l14_n458(x)
+ else
+ fun_l14_n107(x)
+ end
+end
+
+def fun_l13_n138(x)
+ if (x < 1)
+ fun_l14_n415(x)
+ else
+ fun_l14_n189(x)
+ end
+end
+
+def fun_l13_n139(x)
+ if (x < 1)
+ fun_l14_n877(x)
+ else
+ fun_l14_n862(x)
+ end
+end
+
+def fun_l13_n140(x)
+ if (x < 1)
+ fun_l14_n471(x)
+ else
+ fun_l14_n533(x)
+ end
+end
+
+def fun_l13_n141(x)
+ if (x < 1)
+ fun_l14_n817(x)
+ else
+ fun_l14_n121(x)
+ end
+end
+
+def fun_l13_n142(x)
+ if (x < 1)
+ fun_l14_n523(x)
+ else
+ fun_l14_n894(x)
+ end
+end
+
+def fun_l13_n143(x)
+ if (x < 1)
+ fun_l14_n893(x)
+ else
+ fun_l14_n187(x)
+ end
+end
+
+def fun_l13_n144(x)
+ if (x < 1)
+ fun_l14_n921(x)
+ else
+ fun_l14_n253(x)
+ end
+end
+
+def fun_l13_n145(x)
+ if (x < 1)
+ fun_l14_n0(x)
+ else
+ fun_l14_n608(x)
+ end
+end
+
+def fun_l13_n146(x)
+ if (x < 1)
+ fun_l14_n83(x)
+ else
+ fun_l14_n450(x)
+ end
+end
+
+def fun_l13_n147(x)
+ if (x < 1)
+ fun_l14_n689(x)
+ else
+ fun_l14_n19(x)
+ end
+end
+
+def fun_l13_n148(x)
+ if (x < 1)
+ fun_l14_n922(x)
+ else
+ fun_l14_n417(x)
+ end
+end
+
+def fun_l13_n149(x)
+ if (x < 1)
+ fun_l14_n449(x)
+ else
+ fun_l14_n273(x)
+ end
+end
+
+def fun_l13_n150(x)
+ if (x < 1)
+ fun_l14_n601(x)
+ else
+ fun_l14_n442(x)
+ end
+end
+
+def fun_l13_n151(x)
+ if (x < 1)
+ fun_l14_n96(x)
+ else
+ fun_l14_n552(x)
+ end
+end
+
+def fun_l13_n152(x)
+ if (x < 1)
+ fun_l14_n667(x)
+ else
+ fun_l14_n273(x)
+ end
+end
+
+def fun_l13_n153(x)
+ if (x < 1)
+ fun_l14_n445(x)
+ else
+ fun_l14_n81(x)
+ end
+end
+
+def fun_l13_n154(x)
+ if (x < 1)
+ fun_l14_n906(x)
+ else
+ fun_l14_n960(x)
+ end
+end
+
+def fun_l13_n155(x)
+ if (x < 1)
+ fun_l14_n781(x)
+ else
+ fun_l14_n763(x)
+ end
+end
+
+def fun_l13_n156(x)
+ if (x < 1)
+ fun_l14_n201(x)
+ else
+ fun_l14_n886(x)
+ end
+end
+
+def fun_l13_n157(x)
+ if (x < 1)
+ fun_l14_n926(x)
+ else
+ fun_l14_n852(x)
+ end
+end
+
+def fun_l13_n158(x)
+ if (x < 1)
+ fun_l14_n114(x)
+ else
+ fun_l14_n23(x)
+ end
+end
+
+def fun_l13_n159(x)
+ if (x < 1)
+ fun_l14_n967(x)
+ else
+ fun_l14_n885(x)
+ end
+end
+
+def fun_l13_n160(x)
+ if (x < 1)
+ fun_l14_n563(x)
+ else
+ fun_l14_n309(x)
+ end
+end
+
+def fun_l13_n161(x)
+ if (x < 1)
+ fun_l14_n26(x)
+ else
+ fun_l14_n232(x)
+ end
+end
+
+def fun_l13_n162(x)
+ if (x < 1)
+ fun_l14_n212(x)
+ else
+ fun_l14_n147(x)
+ end
+end
+
+def fun_l13_n163(x)
+ if (x < 1)
+ fun_l14_n841(x)
+ else
+ fun_l14_n636(x)
+ end
+end
+
+def fun_l13_n164(x)
+ if (x < 1)
+ fun_l14_n405(x)
+ else
+ fun_l14_n709(x)
+ end
+end
+
+def fun_l13_n165(x)
+ if (x < 1)
+ fun_l14_n803(x)
+ else
+ fun_l14_n398(x)
+ end
+end
+
+def fun_l13_n166(x)
+ if (x < 1)
+ fun_l14_n112(x)
+ else
+ fun_l14_n197(x)
+ end
+end
+
+def fun_l13_n167(x)
+ if (x < 1)
+ fun_l14_n414(x)
+ else
+ fun_l14_n509(x)
+ end
+end
+
+def fun_l13_n168(x)
+ if (x < 1)
+ fun_l14_n585(x)
+ else
+ fun_l14_n166(x)
+ end
+end
+
+def fun_l13_n169(x)
+ if (x < 1)
+ fun_l14_n653(x)
+ else
+ fun_l14_n581(x)
+ end
+end
+
+def fun_l13_n170(x)
+ if (x < 1)
+ fun_l14_n291(x)
+ else
+ fun_l14_n520(x)
+ end
+end
+
+def fun_l13_n171(x)
+ if (x < 1)
+ fun_l14_n920(x)
+ else
+ fun_l14_n599(x)
+ end
+end
+
+def fun_l13_n172(x)
+ if (x < 1)
+ fun_l14_n125(x)
+ else
+ fun_l14_n84(x)
+ end
+end
+
+def fun_l13_n173(x)
+ if (x < 1)
+ fun_l14_n635(x)
+ else
+ fun_l14_n224(x)
+ end
+end
+
+def fun_l13_n174(x)
+ if (x < 1)
+ fun_l14_n23(x)
+ else
+ fun_l14_n922(x)
+ end
+end
+
+def fun_l13_n175(x)
+ if (x < 1)
+ fun_l14_n736(x)
+ else
+ fun_l14_n685(x)
+ end
+end
+
+def fun_l13_n176(x)
+ if (x < 1)
+ fun_l14_n235(x)
+ else
+ fun_l14_n157(x)
+ end
+end
+
+def fun_l13_n177(x)
+ if (x < 1)
+ fun_l14_n284(x)
+ else
+ fun_l14_n601(x)
+ end
+end
+
+def fun_l13_n178(x)
+ if (x < 1)
+ fun_l14_n785(x)
+ else
+ fun_l14_n498(x)
+ end
+end
+
+def fun_l13_n179(x)
+ if (x < 1)
+ fun_l14_n416(x)
+ else
+ fun_l14_n624(x)
+ end
+end
+
+def fun_l13_n180(x)
+ if (x < 1)
+ fun_l14_n747(x)
+ else
+ fun_l14_n824(x)
+ end
+end
+
+def fun_l13_n181(x)
+ if (x < 1)
+ fun_l14_n658(x)
+ else
+ fun_l14_n814(x)
+ end
+end
+
+def fun_l13_n182(x)
+ if (x < 1)
+ fun_l14_n723(x)
+ else
+ fun_l14_n365(x)
+ end
+end
+
+def fun_l13_n183(x)
+ if (x < 1)
+ fun_l14_n772(x)
+ else
+ fun_l14_n831(x)
+ end
+end
+
+def fun_l13_n184(x)
+ if (x < 1)
+ fun_l14_n560(x)
+ else
+ fun_l14_n933(x)
+ end
+end
+
+def fun_l13_n185(x)
+ if (x < 1)
+ fun_l14_n550(x)
+ else
+ fun_l14_n716(x)
+ end
+end
+
+def fun_l13_n186(x)
+ if (x < 1)
+ fun_l14_n72(x)
+ else
+ fun_l14_n224(x)
+ end
+end
+
+def fun_l13_n187(x)
+ if (x < 1)
+ fun_l14_n910(x)
+ else
+ fun_l14_n31(x)
+ end
+end
+
+def fun_l13_n188(x)
+ if (x < 1)
+ fun_l14_n792(x)
+ else
+ fun_l14_n69(x)
+ end
+end
+
+def fun_l13_n189(x)
+ if (x < 1)
+ fun_l14_n42(x)
+ else
+ fun_l14_n942(x)
+ end
+end
+
+def fun_l13_n190(x)
+ if (x < 1)
+ fun_l14_n520(x)
+ else
+ fun_l14_n826(x)
+ end
+end
+
+def fun_l13_n191(x)
+ if (x < 1)
+ fun_l14_n723(x)
+ else
+ fun_l14_n5(x)
+ end
+end
+
+def fun_l13_n192(x)
+ if (x < 1)
+ fun_l14_n448(x)
+ else
+ fun_l14_n243(x)
+ end
+end
+
+def fun_l13_n193(x)
+ if (x < 1)
+ fun_l14_n722(x)
+ else
+ fun_l14_n450(x)
+ end
+end
+
+def fun_l13_n194(x)
+ if (x < 1)
+ fun_l14_n31(x)
+ else
+ fun_l14_n968(x)
+ end
+end
+
+def fun_l13_n195(x)
+ if (x < 1)
+ fun_l14_n381(x)
+ else
+ fun_l14_n964(x)
+ end
+end
+
+def fun_l13_n196(x)
+ if (x < 1)
+ fun_l14_n797(x)
+ else
+ fun_l14_n216(x)
+ end
+end
+
+def fun_l13_n197(x)
+ if (x < 1)
+ fun_l14_n351(x)
+ else
+ fun_l14_n439(x)
+ end
+end
+
+def fun_l13_n198(x)
+ if (x < 1)
+ fun_l14_n983(x)
+ else
+ fun_l14_n363(x)
+ end
+end
+
+def fun_l13_n199(x)
+ if (x < 1)
+ fun_l14_n939(x)
+ else
+ fun_l14_n806(x)
+ end
+end
+
+def fun_l13_n200(x)
+ if (x < 1)
+ fun_l14_n710(x)
+ else
+ fun_l14_n513(x)
+ end
+end
+
+def fun_l13_n201(x)
+ if (x < 1)
+ fun_l14_n431(x)
+ else
+ fun_l14_n81(x)
+ end
+end
+
+def fun_l13_n202(x)
+ if (x < 1)
+ fun_l14_n41(x)
+ else
+ fun_l14_n916(x)
+ end
+end
+
+def fun_l13_n203(x)
+ if (x < 1)
+ fun_l14_n368(x)
+ else
+ fun_l14_n626(x)
+ end
+end
+
+def fun_l13_n204(x)
+ if (x < 1)
+ fun_l14_n505(x)
+ else
+ fun_l14_n750(x)
+ end
+end
+
+def fun_l13_n205(x)
+ if (x < 1)
+ fun_l14_n263(x)
+ else
+ fun_l14_n636(x)
+ end
+end
+
+def fun_l13_n206(x)
+ if (x < 1)
+ fun_l14_n589(x)
+ else
+ fun_l14_n215(x)
+ end
+end
+
+def fun_l13_n207(x)
+ if (x < 1)
+ fun_l14_n435(x)
+ else
+ fun_l14_n69(x)
+ end
+end
+
+def fun_l13_n208(x)
+ if (x < 1)
+ fun_l14_n114(x)
+ else
+ fun_l14_n222(x)
+ end
+end
+
+def fun_l13_n209(x)
+ if (x < 1)
+ fun_l14_n784(x)
+ else
+ fun_l14_n337(x)
+ end
+end
+
+def fun_l13_n210(x)
+ if (x < 1)
+ fun_l14_n434(x)
+ else
+ fun_l14_n79(x)
+ end
+end
+
+def fun_l13_n211(x)
+ if (x < 1)
+ fun_l14_n152(x)
+ else
+ fun_l14_n428(x)
+ end
+end
+
+def fun_l13_n212(x)
+ if (x < 1)
+ fun_l14_n24(x)
+ else
+ fun_l14_n101(x)
+ end
+end
+
+def fun_l13_n213(x)
+ if (x < 1)
+ fun_l14_n880(x)
+ else
+ fun_l14_n672(x)
+ end
+end
+
+def fun_l13_n214(x)
+ if (x < 1)
+ fun_l14_n824(x)
+ else
+ fun_l14_n351(x)
+ end
+end
+
+def fun_l13_n215(x)
+ if (x < 1)
+ fun_l14_n657(x)
+ else
+ fun_l14_n822(x)
+ end
+end
+
+def fun_l13_n216(x)
+ if (x < 1)
+ fun_l14_n603(x)
+ else
+ fun_l14_n993(x)
+ end
+end
+
+def fun_l13_n217(x)
+ if (x < 1)
+ fun_l14_n593(x)
+ else
+ fun_l14_n808(x)
+ end
+end
+
+def fun_l13_n218(x)
+ if (x < 1)
+ fun_l14_n30(x)
+ else
+ fun_l14_n632(x)
+ end
+end
+
+def fun_l13_n219(x)
+ if (x < 1)
+ fun_l14_n175(x)
+ else
+ fun_l14_n124(x)
+ end
+end
+
+def fun_l13_n220(x)
+ if (x < 1)
+ fun_l14_n878(x)
+ else
+ fun_l14_n342(x)
+ end
+end
+
+def fun_l13_n221(x)
+ if (x < 1)
+ fun_l14_n857(x)
+ else
+ fun_l14_n204(x)
+ end
+end
+
+def fun_l13_n222(x)
+ if (x < 1)
+ fun_l14_n29(x)
+ else
+ fun_l14_n573(x)
+ end
+end
+
+def fun_l13_n223(x)
+ if (x < 1)
+ fun_l14_n329(x)
+ else
+ fun_l14_n35(x)
+ end
+end
+
+def fun_l13_n224(x)
+ if (x < 1)
+ fun_l14_n31(x)
+ else
+ fun_l14_n323(x)
+ end
+end
+
+def fun_l13_n225(x)
+ if (x < 1)
+ fun_l14_n921(x)
+ else
+ fun_l14_n161(x)
+ end
+end
+
+def fun_l13_n226(x)
+ if (x < 1)
+ fun_l14_n599(x)
+ else
+ fun_l14_n566(x)
+ end
+end
+
+def fun_l13_n227(x)
+ if (x < 1)
+ fun_l14_n994(x)
+ else
+ fun_l14_n549(x)
+ end
+end
+
+def fun_l13_n228(x)
+ if (x < 1)
+ fun_l14_n989(x)
+ else
+ fun_l14_n212(x)
+ end
+end
+
+def fun_l13_n229(x)
+ if (x < 1)
+ fun_l14_n22(x)
+ else
+ fun_l14_n656(x)
+ end
+end
+
+def fun_l13_n230(x)
+ if (x < 1)
+ fun_l14_n232(x)
+ else
+ fun_l14_n658(x)
+ end
+end
+
+def fun_l13_n231(x)
+ if (x < 1)
+ fun_l14_n522(x)
+ else
+ fun_l14_n596(x)
+ end
+end
+
+def fun_l13_n232(x)
+ if (x < 1)
+ fun_l14_n296(x)
+ else
+ fun_l14_n53(x)
+ end
+end
+
+def fun_l13_n233(x)
+ if (x < 1)
+ fun_l14_n958(x)
+ else
+ fun_l14_n818(x)
+ end
+end
+
+def fun_l13_n234(x)
+ if (x < 1)
+ fun_l14_n267(x)
+ else
+ fun_l14_n299(x)
+ end
+end
+
+def fun_l13_n235(x)
+ if (x < 1)
+ fun_l14_n776(x)
+ else
+ fun_l14_n99(x)
+ end
+end
+
+def fun_l13_n236(x)
+ if (x < 1)
+ fun_l14_n204(x)
+ else
+ fun_l14_n34(x)
+ end
+end
+
+def fun_l13_n237(x)
+ if (x < 1)
+ fun_l14_n704(x)
+ else
+ fun_l14_n808(x)
+ end
+end
+
+def fun_l13_n238(x)
+ if (x < 1)
+ fun_l14_n82(x)
+ else
+ fun_l14_n352(x)
+ end
+end
+
+def fun_l13_n239(x)
+ if (x < 1)
+ fun_l14_n382(x)
+ else
+ fun_l14_n447(x)
+ end
+end
+
+def fun_l13_n240(x)
+ if (x < 1)
+ fun_l14_n200(x)
+ else
+ fun_l14_n623(x)
+ end
+end
+
+def fun_l13_n241(x)
+ if (x < 1)
+ fun_l14_n563(x)
+ else
+ fun_l14_n259(x)
+ end
+end
+
+def fun_l13_n242(x)
+ if (x < 1)
+ fun_l14_n126(x)
+ else
+ fun_l14_n337(x)
+ end
+end
+
+def fun_l13_n243(x)
+ if (x < 1)
+ fun_l14_n287(x)
+ else
+ fun_l14_n441(x)
+ end
+end
+
+def fun_l13_n244(x)
+ if (x < 1)
+ fun_l14_n271(x)
+ else
+ fun_l14_n961(x)
+ end
+end
+
+def fun_l13_n245(x)
+ if (x < 1)
+ fun_l14_n677(x)
+ else
+ fun_l14_n310(x)
+ end
+end
+
+def fun_l13_n246(x)
+ if (x < 1)
+ fun_l14_n504(x)
+ else
+ fun_l14_n504(x)
+ end
+end
+
+def fun_l13_n247(x)
+ if (x < 1)
+ fun_l14_n61(x)
+ else
+ fun_l14_n560(x)
+ end
+end
+
+def fun_l13_n248(x)
+ if (x < 1)
+ fun_l14_n813(x)
+ else
+ fun_l14_n337(x)
+ end
+end
+
+def fun_l13_n249(x)
+ if (x < 1)
+ fun_l14_n89(x)
+ else
+ fun_l14_n733(x)
+ end
+end
+
+def fun_l13_n250(x)
+ if (x < 1)
+ fun_l14_n203(x)
+ else
+ fun_l14_n342(x)
+ end
+end
+
+def fun_l13_n251(x)
+ if (x < 1)
+ fun_l14_n605(x)
+ else
+ fun_l14_n767(x)
+ end
+end
+
+def fun_l13_n252(x)
+ if (x < 1)
+ fun_l14_n35(x)
+ else
+ fun_l14_n338(x)
+ end
+end
+
+def fun_l13_n253(x)
+ if (x < 1)
+ fun_l14_n894(x)
+ else
+ fun_l14_n905(x)
+ end
+end
+
+def fun_l13_n254(x)
+ if (x < 1)
+ fun_l14_n516(x)
+ else
+ fun_l14_n832(x)
+ end
+end
+
+def fun_l13_n255(x)
+ if (x < 1)
+ fun_l14_n106(x)
+ else
+ fun_l14_n672(x)
+ end
+end
+
+def fun_l13_n256(x)
+ if (x < 1)
+ fun_l14_n978(x)
+ else
+ fun_l14_n940(x)
+ end
+end
+
+def fun_l13_n257(x)
+ if (x < 1)
+ fun_l14_n808(x)
+ else
+ fun_l14_n906(x)
+ end
+end
+
+def fun_l13_n258(x)
+ if (x < 1)
+ fun_l14_n435(x)
+ else
+ fun_l14_n55(x)
+ end
+end
+
+def fun_l13_n259(x)
+ if (x < 1)
+ fun_l14_n981(x)
+ else
+ fun_l14_n550(x)
+ end
+end
+
+def fun_l13_n260(x)
+ if (x < 1)
+ fun_l14_n689(x)
+ else
+ fun_l14_n533(x)
+ end
+end
+
+def fun_l13_n261(x)
+ if (x < 1)
+ fun_l14_n995(x)
+ else
+ fun_l14_n174(x)
+ end
+end
+
+def fun_l13_n262(x)
+ if (x < 1)
+ fun_l14_n161(x)
+ else
+ fun_l14_n357(x)
+ end
+end
+
+def fun_l13_n263(x)
+ if (x < 1)
+ fun_l14_n248(x)
+ else
+ fun_l14_n509(x)
+ end
+end
+
+def fun_l13_n264(x)
+ if (x < 1)
+ fun_l14_n521(x)
+ else
+ fun_l14_n41(x)
+ end
+end
+
+def fun_l13_n265(x)
+ if (x < 1)
+ fun_l14_n771(x)
+ else
+ fun_l14_n387(x)
+ end
+end
+
+def fun_l13_n266(x)
+ if (x < 1)
+ fun_l14_n149(x)
+ else
+ fun_l14_n814(x)
+ end
+end
+
+def fun_l13_n267(x)
+ if (x < 1)
+ fun_l14_n958(x)
+ else
+ fun_l14_n172(x)
+ end
+end
+
+def fun_l13_n268(x)
+ if (x < 1)
+ fun_l14_n167(x)
+ else
+ fun_l14_n889(x)
+ end
+end
+
+def fun_l13_n269(x)
+ if (x < 1)
+ fun_l14_n321(x)
+ else
+ fun_l14_n152(x)
+ end
+end
+
+def fun_l13_n270(x)
+ if (x < 1)
+ fun_l14_n851(x)
+ else
+ fun_l14_n793(x)
+ end
+end
+
+def fun_l13_n271(x)
+ if (x < 1)
+ fun_l14_n306(x)
+ else
+ fun_l14_n843(x)
+ end
+end
+
+def fun_l13_n272(x)
+ if (x < 1)
+ fun_l14_n499(x)
+ else
+ fun_l14_n118(x)
+ end
+end
+
+def fun_l13_n273(x)
+ if (x < 1)
+ fun_l14_n958(x)
+ else
+ fun_l14_n597(x)
+ end
+end
+
+def fun_l13_n274(x)
+ if (x < 1)
+ fun_l14_n884(x)
+ else
+ fun_l14_n23(x)
+ end
+end
+
+def fun_l13_n275(x)
+ if (x < 1)
+ fun_l14_n203(x)
+ else
+ fun_l14_n796(x)
+ end
+end
+
+def fun_l13_n276(x)
+ if (x < 1)
+ fun_l14_n944(x)
+ else
+ fun_l14_n239(x)
+ end
+end
+
+def fun_l13_n277(x)
+ if (x < 1)
+ fun_l14_n511(x)
+ else
+ fun_l14_n464(x)
+ end
+end
+
+def fun_l13_n278(x)
+ if (x < 1)
+ fun_l14_n906(x)
+ else
+ fun_l14_n713(x)
+ end
+end
+
+def fun_l13_n279(x)
+ if (x < 1)
+ fun_l14_n872(x)
+ else
+ fun_l14_n77(x)
+ end
+end
+
+def fun_l13_n280(x)
+ if (x < 1)
+ fun_l14_n888(x)
+ else
+ fun_l14_n117(x)
+ end
+end
+
+def fun_l13_n281(x)
+ if (x < 1)
+ fun_l14_n298(x)
+ else
+ fun_l14_n695(x)
+ end
+end
+
+def fun_l13_n282(x)
+ if (x < 1)
+ fun_l14_n740(x)
+ else
+ fun_l14_n668(x)
+ end
+end
+
+def fun_l13_n283(x)
+ if (x < 1)
+ fun_l14_n438(x)
+ else
+ fun_l14_n322(x)
+ end
+end
+
+def fun_l13_n284(x)
+ if (x < 1)
+ fun_l14_n39(x)
+ else
+ fun_l14_n39(x)
+ end
+end
+
+def fun_l13_n285(x)
+ if (x < 1)
+ fun_l14_n271(x)
+ else
+ fun_l14_n984(x)
+ end
+end
+
+def fun_l13_n286(x)
+ if (x < 1)
+ fun_l14_n278(x)
+ else
+ fun_l14_n453(x)
+ end
+end
+
+def fun_l13_n287(x)
+ if (x < 1)
+ fun_l14_n303(x)
+ else
+ fun_l14_n812(x)
+ end
+end
+
+def fun_l13_n288(x)
+ if (x < 1)
+ fun_l14_n891(x)
+ else
+ fun_l14_n843(x)
+ end
+end
+
+def fun_l13_n289(x)
+ if (x < 1)
+ fun_l14_n672(x)
+ else
+ fun_l14_n543(x)
+ end
+end
+
+def fun_l13_n290(x)
+ if (x < 1)
+ fun_l14_n115(x)
+ else
+ fun_l14_n33(x)
+ end
+end
+
+def fun_l13_n291(x)
+ if (x < 1)
+ fun_l14_n467(x)
+ else
+ fun_l14_n427(x)
+ end
+end
+
+def fun_l13_n292(x)
+ if (x < 1)
+ fun_l14_n528(x)
+ else
+ fun_l14_n51(x)
+ end
+end
+
+def fun_l13_n293(x)
+ if (x < 1)
+ fun_l14_n50(x)
+ else
+ fun_l14_n917(x)
+ end
+end
+
+def fun_l13_n294(x)
+ if (x < 1)
+ fun_l14_n245(x)
+ else
+ fun_l14_n289(x)
+ end
+end
+
+def fun_l13_n295(x)
+ if (x < 1)
+ fun_l14_n108(x)
+ else
+ fun_l14_n772(x)
+ end
+end
+
+def fun_l13_n296(x)
+ if (x < 1)
+ fun_l14_n451(x)
+ else
+ fun_l14_n127(x)
+ end
+end
+
+def fun_l13_n297(x)
+ if (x < 1)
+ fun_l14_n374(x)
+ else
+ fun_l14_n20(x)
+ end
+end
+
+def fun_l13_n298(x)
+ if (x < 1)
+ fun_l14_n588(x)
+ else
+ fun_l14_n95(x)
+ end
+end
+
+def fun_l13_n299(x)
+ if (x < 1)
+ fun_l14_n33(x)
+ else
+ fun_l14_n146(x)
+ end
+end
+
+def fun_l13_n300(x)
+ if (x < 1)
+ fun_l14_n812(x)
+ else
+ fun_l14_n373(x)
+ end
+end
+
+def fun_l13_n301(x)
+ if (x < 1)
+ fun_l14_n39(x)
+ else
+ fun_l14_n228(x)
+ end
+end
+
+def fun_l13_n302(x)
+ if (x < 1)
+ fun_l14_n992(x)
+ else
+ fun_l14_n578(x)
+ end
+end
+
+def fun_l13_n303(x)
+ if (x < 1)
+ fun_l14_n106(x)
+ else
+ fun_l14_n413(x)
+ end
+end
+
+def fun_l13_n304(x)
+ if (x < 1)
+ fun_l14_n463(x)
+ else
+ fun_l14_n884(x)
+ end
+end
+
+def fun_l13_n305(x)
+ if (x < 1)
+ fun_l14_n754(x)
+ else
+ fun_l14_n114(x)
+ end
+end
+
+def fun_l13_n306(x)
+ if (x < 1)
+ fun_l14_n960(x)
+ else
+ fun_l14_n596(x)
+ end
+end
+
+def fun_l13_n307(x)
+ if (x < 1)
+ fun_l14_n858(x)
+ else
+ fun_l14_n488(x)
+ end
+end
+
+def fun_l13_n308(x)
+ if (x < 1)
+ fun_l14_n968(x)
+ else
+ fun_l14_n507(x)
+ end
+end
+
+def fun_l13_n309(x)
+ if (x < 1)
+ fun_l14_n956(x)
+ else
+ fun_l14_n125(x)
+ end
+end
+
+def fun_l13_n310(x)
+ if (x < 1)
+ fun_l14_n190(x)
+ else
+ fun_l14_n817(x)
+ end
+end
+
+def fun_l13_n311(x)
+ if (x < 1)
+ fun_l14_n574(x)
+ else
+ fun_l14_n447(x)
+ end
+end
+
+def fun_l13_n312(x)
+ if (x < 1)
+ fun_l14_n403(x)
+ else
+ fun_l14_n591(x)
+ end
+end
+
+def fun_l13_n313(x)
+ if (x < 1)
+ fun_l14_n499(x)
+ else
+ fun_l14_n458(x)
+ end
+end
+
+def fun_l13_n314(x)
+ if (x < 1)
+ fun_l14_n994(x)
+ else
+ fun_l14_n77(x)
+ end
+end
+
+def fun_l13_n315(x)
+ if (x < 1)
+ fun_l14_n421(x)
+ else
+ fun_l14_n810(x)
+ end
+end
+
+def fun_l13_n316(x)
+ if (x < 1)
+ fun_l14_n304(x)
+ else
+ fun_l14_n785(x)
+ end
+end
+
+def fun_l13_n317(x)
+ if (x < 1)
+ fun_l14_n624(x)
+ else
+ fun_l14_n399(x)
+ end
+end
+
+def fun_l13_n318(x)
+ if (x < 1)
+ fun_l14_n882(x)
+ else
+ fun_l14_n3(x)
+ end
+end
+
+def fun_l13_n319(x)
+ if (x < 1)
+ fun_l14_n267(x)
+ else
+ fun_l14_n955(x)
+ end
+end
+
+def fun_l13_n320(x)
+ if (x < 1)
+ fun_l14_n690(x)
+ else
+ fun_l14_n281(x)
+ end
+end
+
+def fun_l13_n321(x)
+ if (x < 1)
+ fun_l14_n453(x)
+ else
+ fun_l14_n969(x)
+ end
+end
+
+def fun_l13_n322(x)
+ if (x < 1)
+ fun_l14_n297(x)
+ else
+ fun_l14_n50(x)
+ end
+end
+
+def fun_l13_n323(x)
+ if (x < 1)
+ fun_l14_n342(x)
+ else
+ fun_l14_n618(x)
+ end
+end
+
+def fun_l13_n324(x)
+ if (x < 1)
+ fun_l14_n74(x)
+ else
+ fun_l14_n638(x)
+ end
+end
+
+def fun_l13_n325(x)
+ if (x < 1)
+ fun_l14_n218(x)
+ else
+ fun_l14_n169(x)
+ end
+end
+
+def fun_l13_n326(x)
+ if (x < 1)
+ fun_l14_n128(x)
+ else
+ fun_l14_n504(x)
+ end
+end
+
+def fun_l13_n327(x)
+ if (x < 1)
+ fun_l14_n612(x)
+ else
+ fun_l14_n62(x)
+ end
+end
+
+def fun_l13_n328(x)
+ if (x < 1)
+ fun_l14_n83(x)
+ else
+ fun_l14_n67(x)
+ end
+end
+
+def fun_l13_n329(x)
+ if (x < 1)
+ fun_l14_n515(x)
+ else
+ fun_l14_n15(x)
+ end
+end
+
+def fun_l13_n330(x)
+ if (x < 1)
+ fun_l14_n448(x)
+ else
+ fun_l14_n951(x)
+ end
+end
+
+def fun_l13_n331(x)
+ if (x < 1)
+ fun_l14_n804(x)
+ else
+ fun_l14_n315(x)
+ end
+end
+
+def fun_l13_n332(x)
+ if (x < 1)
+ fun_l14_n522(x)
+ else
+ fun_l14_n761(x)
+ end
+end
+
+def fun_l13_n333(x)
+ if (x < 1)
+ fun_l14_n421(x)
+ else
+ fun_l14_n542(x)
+ end
+end
+
+def fun_l13_n334(x)
+ if (x < 1)
+ fun_l14_n952(x)
+ else
+ fun_l14_n390(x)
+ end
+end
+
+def fun_l13_n335(x)
+ if (x < 1)
+ fun_l14_n324(x)
+ else
+ fun_l14_n60(x)
+ end
+end
+
+def fun_l13_n336(x)
+ if (x < 1)
+ fun_l14_n887(x)
+ else
+ fun_l14_n474(x)
+ end
+end
+
+def fun_l13_n337(x)
+ if (x < 1)
+ fun_l14_n355(x)
+ else
+ fun_l14_n840(x)
+ end
+end
+
+def fun_l13_n338(x)
+ if (x < 1)
+ fun_l14_n21(x)
+ else
+ fun_l14_n133(x)
+ end
+end
+
+def fun_l13_n339(x)
+ if (x < 1)
+ fun_l14_n12(x)
+ else
+ fun_l14_n30(x)
+ end
+end
+
+def fun_l13_n340(x)
+ if (x < 1)
+ fun_l14_n678(x)
+ else
+ fun_l14_n583(x)
+ end
+end
+
+def fun_l13_n341(x)
+ if (x < 1)
+ fun_l14_n289(x)
+ else
+ fun_l14_n490(x)
+ end
+end
+
+def fun_l13_n342(x)
+ if (x < 1)
+ fun_l14_n232(x)
+ else
+ fun_l14_n288(x)
+ end
+end
+
+def fun_l13_n343(x)
+ if (x < 1)
+ fun_l14_n744(x)
+ else
+ fun_l14_n963(x)
+ end
+end
+
+def fun_l13_n344(x)
+ if (x < 1)
+ fun_l14_n651(x)
+ else
+ fun_l14_n377(x)
+ end
+end
+
+def fun_l13_n345(x)
+ if (x < 1)
+ fun_l14_n13(x)
+ else
+ fun_l14_n749(x)
+ end
+end
+
+def fun_l13_n346(x)
+ if (x < 1)
+ fun_l14_n789(x)
+ else
+ fun_l14_n621(x)
+ end
+end
+
+def fun_l13_n347(x)
+ if (x < 1)
+ fun_l14_n346(x)
+ else
+ fun_l14_n663(x)
+ end
+end
+
+def fun_l13_n348(x)
+ if (x < 1)
+ fun_l14_n252(x)
+ else
+ fun_l14_n202(x)
+ end
+end
+
+def fun_l13_n349(x)
+ if (x < 1)
+ fun_l14_n919(x)
+ else
+ fun_l14_n997(x)
+ end
+end
+
+def fun_l13_n350(x)
+ if (x < 1)
+ fun_l14_n472(x)
+ else
+ fun_l14_n900(x)
+ end
+end
+
+def fun_l13_n351(x)
+ if (x < 1)
+ fun_l14_n954(x)
+ else
+ fun_l14_n606(x)
+ end
+end
+
+def fun_l13_n352(x)
+ if (x < 1)
+ fun_l14_n227(x)
+ else
+ fun_l14_n344(x)
+ end
+end
+
+def fun_l13_n353(x)
+ if (x < 1)
+ fun_l14_n110(x)
+ else
+ fun_l14_n266(x)
+ end
+end
+
+def fun_l13_n354(x)
+ if (x < 1)
+ fun_l14_n840(x)
+ else
+ fun_l14_n905(x)
+ end
+end
+
+def fun_l13_n355(x)
+ if (x < 1)
+ fun_l14_n950(x)
+ else
+ fun_l14_n307(x)
+ end
+end
+
+def fun_l13_n356(x)
+ if (x < 1)
+ fun_l14_n572(x)
+ else
+ fun_l14_n480(x)
+ end
+end
+
+def fun_l13_n357(x)
+ if (x < 1)
+ fun_l14_n122(x)
+ else
+ fun_l14_n408(x)
+ end
+end
+
+def fun_l13_n358(x)
+ if (x < 1)
+ fun_l14_n105(x)
+ else
+ fun_l14_n173(x)
+ end
+end
+
+def fun_l13_n359(x)
+ if (x < 1)
+ fun_l14_n358(x)
+ else
+ fun_l14_n336(x)
+ end
+end
+
+def fun_l13_n360(x)
+ if (x < 1)
+ fun_l14_n457(x)
+ else
+ fun_l14_n434(x)
+ end
+end
+
+def fun_l13_n361(x)
+ if (x < 1)
+ fun_l14_n679(x)
+ else
+ fun_l14_n771(x)
+ end
+end
+
+def fun_l13_n362(x)
+ if (x < 1)
+ fun_l14_n419(x)
+ else
+ fun_l14_n909(x)
+ end
+end
+
+def fun_l13_n363(x)
+ if (x < 1)
+ fun_l14_n672(x)
+ else
+ fun_l14_n132(x)
+ end
+end
+
+def fun_l13_n364(x)
+ if (x < 1)
+ fun_l14_n947(x)
+ else
+ fun_l14_n328(x)
+ end
+end
+
+def fun_l13_n365(x)
+ if (x < 1)
+ fun_l14_n959(x)
+ else
+ fun_l14_n122(x)
+ end
+end
+
+def fun_l13_n366(x)
+ if (x < 1)
+ fun_l14_n534(x)
+ else
+ fun_l14_n611(x)
+ end
+end
+
+def fun_l13_n367(x)
+ if (x < 1)
+ fun_l14_n349(x)
+ else
+ fun_l14_n149(x)
+ end
+end
+
+def fun_l13_n368(x)
+ if (x < 1)
+ fun_l14_n94(x)
+ else
+ fun_l14_n870(x)
+ end
+end
+
+def fun_l13_n369(x)
+ if (x < 1)
+ fun_l14_n774(x)
+ else
+ fun_l14_n696(x)
+ end
+end
+
+def fun_l13_n370(x)
+ if (x < 1)
+ fun_l14_n311(x)
+ else
+ fun_l14_n479(x)
+ end
+end
+
+def fun_l13_n371(x)
+ if (x < 1)
+ fun_l14_n650(x)
+ else
+ fun_l14_n66(x)
+ end
+end
+
+def fun_l13_n372(x)
+ if (x < 1)
+ fun_l14_n825(x)
+ else
+ fun_l14_n910(x)
+ end
+end
+
+def fun_l13_n373(x)
+ if (x < 1)
+ fun_l14_n454(x)
+ else
+ fun_l14_n492(x)
+ end
+end
+
+def fun_l13_n374(x)
+ if (x < 1)
+ fun_l14_n785(x)
+ else
+ fun_l14_n352(x)
+ end
+end
+
+def fun_l13_n375(x)
+ if (x < 1)
+ fun_l14_n124(x)
+ else
+ fun_l14_n664(x)
+ end
+end
+
+def fun_l13_n376(x)
+ if (x < 1)
+ fun_l14_n427(x)
+ else
+ fun_l14_n615(x)
+ end
+end
+
+def fun_l13_n377(x)
+ if (x < 1)
+ fun_l14_n926(x)
+ else
+ fun_l14_n307(x)
+ end
+end
+
+def fun_l13_n378(x)
+ if (x < 1)
+ fun_l14_n575(x)
+ else
+ fun_l14_n561(x)
+ end
+end
+
+def fun_l13_n379(x)
+ if (x < 1)
+ fun_l14_n497(x)
+ else
+ fun_l14_n690(x)
+ end
+end
+
+def fun_l13_n380(x)
+ if (x < 1)
+ fun_l14_n350(x)
+ else
+ fun_l14_n641(x)
+ end
+end
+
+def fun_l13_n381(x)
+ if (x < 1)
+ fun_l14_n292(x)
+ else
+ fun_l14_n739(x)
+ end
+end
+
+def fun_l13_n382(x)
+ if (x < 1)
+ fun_l14_n302(x)
+ else
+ fun_l14_n583(x)
+ end
+end
+
+def fun_l13_n383(x)
+ if (x < 1)
+ fun_l14_n36(x)
+ else
+ fun_l14_n603(x)
+ end
+end
+
+def fun_l13_n384(x)
+ if (x < 1)
+ fun_l14_n953(x)
+ else
+ fun_l14_n394(x)
+ end
+end
+
+def fun_l13_n385(x)
+ if (x < 1)
+ fun_l14_n107(x)
+ else
+ fun_l14_n149(x)
+ end
+end
+
+def fun_l13_n386(x)
+ if (x < 1)
+ fun_l14_n77(x)
+ else
+ fun_l14_n880(x)
+ end
+end
+
+def fun_l13_n387(x)
+ if (x < 1)
+ fun_l14_n670(x)
+ else
+ fun_l14_n649(x)
+ end
+end
+
+def fun_l13_n388(x)
+ if (x < 1)
+ fun_l14_n277(x)
+ else
+ fun_l14_n922(x)
+ end
+end
+
+def fun_l13_n389(x)
+ if (x < 1)
+ fun_l14_n981(x)
+ else
+ fun_l14_n427(x)
+ end
+end
+
+def fun_l13_n390(x)
+ if (x < 1)
+ fun_l14_n411(x)
+ else
+ fun_l14_n804(x)
+ end
+end
+
+def fun_l13_n391(x)
+ if (x < 1)
+ fun_l14_n52(x)
+ else
+ fun_l14_n770(x)
+ end
+end
+
+def fun_l13_n392(x)
+ if (x < 1)
+ fun_l14_n592(x)
+ else
+ fun_l14_n672(x)
+ end
+end
+
+def fun_l13_n393(x)
+ if (x < 1)
+ fun_l14_n274(x)
+ else
+ fun_l14_n778(x)
+ end
+end
+
+def fun_l13_n394(x)
+ if (x < 1)
+ fun_l14_n708(x)
+ else
+ fun_l14_n262(x)
+ end
+end
+
+def fun_l13_n395(x)
+ if (x < 1)
+ fun_l14_n449(x)
+ else
+ fun_l14_n273(x)
+ end
+end
+
+def fun_l13_n396(x)
+ if (x < 1)
+ fun_l14_n567(x)
+ else
+ fun_l14_n148(x)
+ end
+end
+
+def fun_l13_n397(x)
+ if (x < 1)
+ fun_l14_n127(x)
+ else
+ fun_l14_n309(x)
+ end
+end
+
+def fun_l13_n398(x)
+ if (x < 1)
+ fun_l14_n150(x)
+ else
+ fun_l14_n540(x)
+ end
+end
+
+def fun_l13_n399(x)
+ if (x < 1)
+ fun_l14_n791(x)
+ else
+ fun_l14_n517(x)
+ end
+end
+
+def fun_l13_n400(x)
+ if (x < 1)
+ fun_l14_n152(x)
+ else
+ fun_l14_n319(x)
+ end
+end
+
+def fun_l13_n401(x)
+ if (x < 1)
+ fun_l14_n911(x)
+ else
+ fun_l14_n544(x)
+ end
+end
+
+def fun_l13_n402(x)
+ if (x < 1)
+ fun_l14_n915(x)
+ else
+ fun_l14_n208(x)
+ end
+end
+
+def fun_l13_n403(x)
+ if (x < 1)
+ fun_l14_n452(x)
+ else
+ fun_l14_n62(x)
+ end
+end
+
+def fun_l13_n404(x)
+ if (x < 1)
+ fun_l14_n823(x)
+ else
+ fun_l14_n913(x)
+ end
+end
+
+def fun_l13_n405(x)
+ if (x < 1)
+ fun_l14_n808(x)
+ else
+ fun_l14_n49(x)
+ end
+end
+
+def fun_l13_n406(x)
+ if (x < 1)
+ fun_l14_n498(x)
+ else
+ fun_l14_n470(x)
+ end
+end
+
+def fun_l13_n407(x)
+ if (x < 1)
+ fun_l14_n314(x)
+ else
+ fun_l14_n248(x)
+ end
+end
+
+def fun_l13_n408(x)
+ if (x < 1)
+ fun_l14_n61(x)
+ else
+ fun_l14_n190(x)
+ end
+end
+
+def fun_l13_n409(x)
+ if (x < 1)
+ fun_l14_n126(x)
+ else
+ fun_l14_n505(x)
+ end
+end
+
+def fun_l13_n410(x)
+ if (x < 1)
+ fun_l14_n646(x)
+ else
+ fun_l14_n319(x)
+ end
+end
+
+def fun_l13_n411(x)
+ if (x < 1)
+ fun_l14_n741(x)
+ else
+ fun_l14_n979(x)
+ end
+end
+
+def fun_l13_n412(x)
+ if (x < 1)
+ fun_l14_n840(x)
+ else
+ fun_l14_n211(x)
+ end
+end
+
+def fun_l13_n413(x)
+ if (x < 1)
+ fun_l14_n217(x)
+ else
+ fun_l14_n98(x)
+ end
+end
+
+def fun_l13_n414(x)
+ if (x < 1)
+ fun_l14_n398(x)
+ else
+ fun_l14_n701(x)
+ end
+end
+
+def fun_l13_n415(x)
+ if (x < 1)
+ fun_l14_n470(x)
+ else
+ fun_l14_n394(x)
+ end
+end
+
+def fun_l13_n416(x)
+ if (x < 1)
+ fun_l14_n113(x)
+ else
+ fun_l14_n792(x)
+ end
+end
+
+def fun_l13_n417(x)
+ if (x < 1)
+ fun_l14_n969(x)
+ else
+ fun_l14_n99(x)
+ end
+end
+
+def fun_l13_n418(x)
+ if (x < 1)
+ fun_l14_n54(x)
+ else
+ fun_l14_n800(x)
+ end
+end
+
+def fun_l13_n419(x)
+ if (x < 1)
+ fun_l14_n763(x)
+ else
+ fun_l14_n510(x)
+ end
+end
+
+def fun_l13_n420(x)
+ if (x < 1)
+ fun_l14_n660(x)
+ else
+ fun_l14_n904(x)
+ end
+end
+
+def fun_l13_n421(x)
+ if (x < 1)
+ fun_l14_n345(x)
+ else
+ fun_l14_n200(x)
+ end
+end
+
+def fun_l13_n422(x)
+ if (x < 1)
+ fun_l14_n831(x)
+ else
+ fun_l14_n35(x)
+ end
+end
+
+def fun_l13_n423(x)
+ if (x < 1)
+ fun_l14_n644(x)
+ else
+ fun_l14_n963(x)
+ end
+end
+
+def fun_l13_n424(x)
+ if (x < 1)
+ fun_l14_n0(x)
+ else
+ fun_l14_n625(x)
+ end
+end
+
+def fun_l13_n425(x)
+ if (x < 1)
+ fun_l14_n186(x)
+ else
+ fun_l14_n409(x)
+ end
+end
+
+def fun_l13_n426(x)
+ if (x < 1)
+ fun_l14_n869(x)
+ else
+ fun_l14_n852(x)
+ end
+end
+
+def fun_l13_n427(x)
+ if (x < 1)
+ fun_l14_n322(x)
+ else
+ fun_l14_n160(x)
+ end
+end
+
+def fun_l13_n428(x)
+ if (x < 1)
+ fun_l14_n974(x)
+ else
+ fun_l14_n139(x)
+ end
+end
+
+def fun_l13_n429(x)
+ if (x < 1)
+ fun_l14_n570(x)
+ else
+ fun_l14_n10(x)
+ end
+end
+
+def fun_l13_n430(x)
+ if (x < 1)
+ fun_l14_n199(x)
+ else
+ fun_l14_n829(x)
+ end
+end
+
+def fun_l13_n431(x)
+ if (x < 1)
+ fun_l14_n700(x)
+ else
+ fun_l14_n362(x)
+ end
+end
+
+def fun_l13_n432(x)
+ if (x < 1)
+ fun_l14_n925(x)
+ else
+ fun_l14_n365(x)
+ end
+end
+
+def fun_l13_n433(x)
+ if (x < 1)
+ fun_l14_n837(x)
+ else
+ fun_l14_n119(x)
+ end
+end
+
+def fun_l13_n434(x)
+ if (x < 1)
+ fun_l14_n355(x)
+ else
+ fun_l14_n374(x)
+ end
+end
+
+def fun_l13_n435(x)
+ if (x < 1)
+ fun_l14_n126(x)
+ else
+ fun_l14_n568(x)
+ end
+end
+
+def fun_l13_n436(x)
+ if (x < 1)
+ fun_l14_n468(x)
+ else
+ fun_l14_n299(x)
+ end
+end
+
+def fun_l13_n437(x)
+ if (x < 1)
+ fun_l14_n667(x)
+ else
+ fun_l14_n795(x)
+ end
+end
+
+def fun_l13_n438(x)
+ if (x < 1)
+ fun_l14_n989(x)
+ else
+ fun_l14_n484(x)
+ end
+end
+
+def fun_l13_n439(x)
+ if (x < 1)
+ fun_l14_n109(x)
+ else
+ fun_l14_n534(x)
+ end
+end
+
+def fun_l13_n440(x)
+ if (x < 1)
+ fun_l14_n999(x)
+ else
+ fun_l14_n69(x)
+ end
+end
+
+def fun_l13_n441(x)
+ if (x < 1)
+ fun_l14_n616(x)
+ else
+ fun_l14_n794(x)
+ end
+end
+
+def fun_l13_n442(x)
+ if (x < 1)
+ fun_l14_n719(x)
+ else
+ fun_l14_n967(x)
+ end
+end
+
+def fun_l13_n443(x)
+ if (x < 1)
+ fun_l14_n279(x)
+ else
+ fun_l14_n240(x)
+ end
+end
+
+def fun_l13_n444(x)
+ if (x < 1)
+ fun_l14_n660(x)
+ else
+ fun_l14_n146(x)
+ end
+end
+
+def fun_l13_n445(x)
+ if (x < 1)
+ fun_l14_n164(x)
+ else
+ fun_l14_n903(x)
+ end
+end
+
+def fun_l13_n446(x)
+ if (x < 1)
+ fun_l14_n474(x)
+ else
+ fun_l14_n137(x)
+ end
+end
+
+def fun_l13_n447(x)
+ if (x < 1)
+ fun_l14_n198(x)
+ else
+ fun_l14_n66(x)
+ end
+end
+
+def fun_l13_n448(x)
+ if (x < 1)
+ fun_l14_n948(x)
+ else
+ fun_l14_n682(x)
+ end
+end
+
+def fun_l13_n449(x)
+ if (x < 1)
+ fun_l14_n545(x)
+ else
+ fun_l14_n928(x)
+ end
+end
+
+def fun_l13_n450(x)
+ if (x < 1)
+ fun_l14_n822(x)
+ else
+ fun_l14_n846(x)
+ end
+end
+
+def fun_l13_n451(x)
+ if (x < 1)
+ fun_l14_n514(x)
+ else
+ fun_l14_n54(x)
+ end
+end
+
+def fun_l13_n452(x)
+ if (x < 1)
+ fun_l14_n539(x)
+ else
+ fun_l14_n199(x)
+ end
+end
+
+def fun_l13_n453(x)
+ if (x < 1)
+ fun_l14_n917(x)
+ else
+ fun_l14_n173(x)
+ end
+end
+
+def fun_l13_n454(x)
+ if (x < 1)
+ fun_l14_n924(x)
+ else
+ fun_l14_n51(x)
+ end
+end
+
+def fun_l13_n455(x)
+ if (x < 1)
+ fun_l14_n675(x)
+ else
+ fun_l14_n139(x)
+ end
+end
+
+def fun_l13_n456(x)
+ if (x < 1)
+ fun_l14_n335(x)
+ else
+ fun_l14_n138(x)
+ end
+end
+
+def fun_l13_n457(x)
+ if (x < 1)
+ fun_l14_n112(x)
+ else
+ fun_l14_n707(x)
+ end
+end
+
+def fun_l13_n458(x)
+ if (x < 1)
+ fun_l14_n784(x)
+ else
+ fun_l14_n278(x)
+ end
+end
+
+def fun_l13_n459(x)
+ if (x < 1)
+ fun_l14_n165(x)
+ else
+ fun_l14_n985(x)
+ end
+end
+
+def fun_l13_n460(x)
+ if (x < 1)
+ fun_l14_n843(x)
+ else
+ fun_l14_n262(x)
+ end
+end
+
+def fun_l13_n461(x)
+ if (x < 1)
+ fun_l14_n492(x)
+ else
+ fun_l14_n21(x)
+ end
+end
+
+def fun_l13_n462(x)
+ if (x < 1)
+ fun_l14_n864(x)
+ else
+ fun_l14_n248(x)
+ end
+end
+
+def fun_l13_n463(x)
+ if (x < 1)
+ fun_l14_n940(x)
+ else
+ fun_l14_n713(x)
+ end
+end
+
+def fun_l13_n464(x)
+ if (x < 1)
+ fun_l14_n8(x)
+ else
+ fun_l14_n771(x)
+ end
+end
+
+def fun_l13_n465(x)
+ if (x < 1)
+ fun_l14_n83(x)
+ else
+ fun_l14_n663(x)
+ end
+end
+
+def fun_l13_n466(x)
+ if (x < 1)
+ fun_l14_n411(x)
+ else
+ fun_l14_n570(x)
+ end
+end
+
+def fun_l13_n467(x)
+ if (x < 1)
+ fun_l14_n464(x)
+ else
+ fun_l14_n497(x)
+ end
+end
+
+def fun_l13_n468(x)
+ if (x < 1)
+ fun_l14_n49(x)
+ else
+ fun_l14_n153(x)
+ end
+end
+
+def fun_l13_n469(x)
+ if (x < 1)
+ fun_l14_n33(x)
+ else
+ fun_l14_n562(x)
+ end
+end
+
+def fun_l13_n470(x)
+ if (x < 1)
+ fun_l14_n207(x)
+ else
+ fun_l14_n328(x)
+ end
+end
+
+def fun_l13_n471(x)
+ if (x < 1)
+ fun_l14_n356(x)
+ else
+ fun_l14_n834(x)
+ end
+end
+
+def fun_l13_n472(x)
+ if (x < 1)
+ fun_l14_n46(x)
+ else
+ fun_l14_n842(x)
+ end
+end
+
+def fun_l13_n473(x)
+ if (x < 1)
+ fun_l14_n14(x)
+ else
+ fun_l14_n488(x)
+ end
+end
+
+def fun_l13_n474(x)
+ if (x < 1)
+ fun_l14_n307(x)
+ else
+ fun_l14_n647(x)
+ end
+end
+
+def fun_l13_n475(x)
+ if (x < 1)
+ fun_l14_n474(x)
+ else
+ fun_l14_n369(x)
+ end
+end
+
+def fun_l13_n476(x)
+ if (x < 1)
+ fun_l14_n471(x)
+ else
+ fun_l14_n956(x)
+ end
+end
+
+def fun_l13_n477(x)
+ if (x < 1)
+ fun_l14_n368(x)
+ else
+ fun_l14_n478(x)
+ end
+end
+
+def fun_l13_n478(x)
+ if (x < 1)
+ fun_l14_n377(x)
+ else
+ fun_l14_n675(x)
+ end
+end
+
+def fun_l13_n479(x)
+ if (x < 1)
+ fun_l14_n370(x)
+ else
+ fun_l14_n819(x)
+ end
+end
+
+def fun_l13_n480(x)
+ if (x < 1)
+ fun_l14_n459(x)
+ else
+ fun_l14_n59(x)
+ end
+end
+
+def fun_l13_n481(x)
+ if (x < 1)
+ fun_l14_n200(x)
+ else
+ fun_l14_n681(x)
+ end
+end
+
+def fun_l13_n482(x)
+ if (x < 1)
+ fun_l14_n893(x)
+ else
+ fun_l14_n518(x)
+ end
+end
+
+def fun_l13_n483(x)
+ if (x < 1)
+ fun_l14_n130(x)
+ else
+ fun_l14_n902(x)
+ end
+end
+
+def fun_l13_n484(x)
+ if (x < 1)
+ fun_l14_n598(x)
+ else
+ fun_l14_n533(x)
+ end
+end
+
+def fun_l13_n485(x)
+ if (x < 1)
+ fun_l14_n254(x)
+ else
+ fun_l14_n294(x)
+ end
+end
+
+def fun_l13_n486(x)
+ if (x < 1)
+ fun_l14_n608(x)
+ else
+ fun_l14_n858(x)
+ end
+end
+
+def fun_l13_n487(x)
+ if (x < 1)
+ fun_l14_n82(x)
+ else
+ fun_l14_n379(x)
+ end
+end
+
+def fun_l13_n488(x)
+ if (x < 1)
+ fun_l14_n605(x)
+ else
+ fun_l14_n530(x)
+ end
+end
+
+def fun_l13_n489(x)
+ if (x < 1)
+ fun_l14_n572(x)
+ else
+ fun_l14_n199(x)
+ end
+end
+
+def fun_l13_n490(x)
+ if (x < 1)
+ fun_l14_n3(x)
+ else
+ fun_l14_n103(x)
+ end
+end
+
+def fun_l13_n491(x)
+ if (x < 1)
+ fun_l14_n922(x)
+ else
+ fun_l14_n372(x)
+ end
+end
+
+def fun_l13_n492(x)
+ if (x < 1)
+ fun_l14_n306(x)
+ else
+ fun_l14_n378(x)
+ end
+end
+
+def fun_l13_n493(x)
+ if (x < 1)
+ fun_l14_n980(x)
+ else
+ fun_l14_n617(x)
+ end
+end
+
+def fun_l13_n494(x)
+ if (x < 1)
+ fun_l14_n127(x)
+ else
+ fun_l14_n348(x)
+ end
+end
+
+def fun_l13_n495(x)
+ if (x < 1)
+ fun_l14_n631(x)
+ else
+ fun_l14_n281(x)
+ end
+end
+
+def fun_l13_n496(x)
+ if (x < 1)
+ fun_l14_n552(x)
+ else
+ fun_l14_n493(x)
+ end
+end
+
+def fun_l13_n497(x)
+ if (x < 1)
+ fun_l14_n342(x)
+ else
+ fun_l14_n931(x)
+ end
+end
+
+def fun_l13_n498(x)
+ if (x < 1)
+ fun_l14_n297(x)
+ else
+ fun_l14_n512(x)
+ end
+end
+
+def fun_l13_n499(x)
+ if (x < 1)
+ fun_l14_n950(x)
+ else
+ fun_l14_n952(x)
+ end
+end
+
+def fun_l13_n500(x)
+ if (x < 1)
+ fun_l14_n355(x)
+ else
+ fun_l14_n383(x)
+ end
+end
+
+def fun_l13_n501(x)
+ if (x < 1)
+ fun_l14_n278(x)
+ else
+ fun_l14_n442(x)
+ end
+end
+
+def fun_l13_n502(x)
+ if (x < 1)
+ fun_l14_n16(x)
+ else
+ fun_l14_n150(x)
+ end
+end
+
+def fun_l13_n503(x)
+ if (x < 1)
+ fun_l14_n399(x)
+ else
+ fun_l14_n989(x)
+ end
+end
+
+def fun_l13_n504(x)
+ if (x < 1)
+ fun_l14_n289(x)
+ else
+ fun_l14_n925(x)
+ end
+end
+
+def fun_l13_n505(x)
+ if (x < 1)
+ fun_l14_n743(x)
+ else
+ fun_l14_n784(x)
+ end
+end
+
+def fun_l13_n506(x)
+ if (x < 1)
+ fun_l14_n916(x)
+ else
+ fun_l14_n111(x)
+ end
+end
+
+def fun_l13_n507(x)
+ if (x < 1)
+ fun_l14_n912(x)
+ else
+ fun_l14_n448(x)
+ end
+end
+
+def fun_l13_n508(x)
+ if (x < 1)
+ fun_l14_n10(x)
+ else
+ fun_l14_n451(x)
+ end
+end
+
+def fun_l13_n509(x)
+ if (x < 1)
+ fun_l14_n15(x)
+ else
+ fun_l14_n697(x)
+ end
+end
+
+def fun_l13_n510(x)
+ if (x < 1)
+ fun_l14_n565(x)
+ else
+ fun_l14_n511(x)
+ end
+end
+
+def fun_l13_n511(x)
+ if (x < 1)
+ fun_l14_n843(x)
+ else
+ fun_l14_n272(x)
+ end
+end
+
+def fun_l13_n512(x)
+ if (x < 1)
+ fun_l14_n70(x)
+ else
+ fun_l14_n333(x)
+ end
+end
+
+def fun_l13_n513(x)
+ if (x < 1)
+ fun_l14_n100(x)
+ else
+ fun_l14_n399(x)
+ end
+end
+
+def fun_l13_n514(x)
+ if (x < 1)
+ fun_l14_n678(x)
+ else
+ fun_l14_n247(x)
+ end
+end
+
+def fun_l13_n515(x)
+ if (x < 1)
+ fun_l14_n823(x)
+ else
+ fun_l14_n371(x)
+ end
+end
+
+def fun_l13_n516(x)
+ if (x < 1)
+ fun_l14_n994(x)
+ else
+ fun_l14_n322(x)
+ end
+end
+
+def fun_l13_n517(x)
+ if (x < 1)
+ fun_l14_n399(x)
+ else
+ fun_l14_n567(x)
+ end
+end
+
+def fun_l13_n518(x)
+ if (x < 1)
+ fun_l14_n898(x)
+ else
+ fun_l14_n59(x)
+ end
+end
+
+def fun_l13_n519(x)
+ if (x < 1)
+ fun_l14_n33(x)
+ else
+ fun_l14_n640(x)
+ end
+end
+
+def fun_l13_n520(x)
+ if (x < 1)
+ fun_l14_n475(x)
+ else
+ fun_l14_n67(x)
+ end
+end
+
+def fun_l13_n521(x)
+ if (x < 1)
+ fun_l14_n896(x)
+ else
+ fun_l14_n312(x)
+ end
+end
+
+def fun_l13_n522(x)
+ if (x < 1)
+ fun_l14_n454(x)
+ else
+ fun_l14_n520(x)
+ end
+end
+
+def fun_l13_n523(x)
+ if (x < 1)
+ fun_l14_n334(x)
+ else
+ fun_l14_n879(x)
+ end
+end
+
+def fun_l13_n524(x)
+ if (x < 1)
+ fun_l14_n267(x)
+ else
+ fun_l14_n526(x)
+ end
+end
+
+def fun_l13_n525(x)
+ if (x < 1)
+ fun_l14_n552(x)
+ else
+ fun_l14_n103(x)
+ end
+end
+
+def fun_l13_n526(x)
+ if (x < 1)
+ fun_l14_n224(x)
+ else
+ fun_l14_n211(x)
+ end
+end
+
+def fun_l13_n527(x)
+ if (x < 1)
+ fun_l14_n113(x)
+ else
+ fun_l14_n193(x)
+ end
+end
+
+def fun_l13_n528(x)
+ if (x < 1)
+ fun_l14_n389(x)
+ else
+ fun_l14_n332(x)
+ end
+end
+
+def fun_l13_n529(x)
+ if (x < 1)
+ fun_l14_n881(x)
+ else
+ fun_l14_n655(x)
+ end
+end
+
+def fun_l13_n530(x)
+ if (x < 1)
+ fun_l14_n857(x)
+ else
+ fun_l14_n588(x)
+ end
+end
+
+def fun_l13_n531(x)
+ if (x < 1)
+ fun_l14_n70(x)
+ else
+ fun_l14_n232(x)
+ end
+end
+
+def fun_l13_n532(x)
+ if (x < 1)
+ fun_l14_n617(x)
+ else
+ fun_l14_n477(x)
+ end
+end
+
+def fun_l13_n533(x)
+ if (x < 1)
+ fun_l14_n655(x)
+ else
+ fun_l14_n801(x)
+ end
+end
+
+def fun_l13_n534(x)
+ if (x < 1)
+ fun_l14_n665(x)
+ else
+ fun_l14_n22(x)
+ end
+end
+
+def fun_l13_n535(x)
+ if (x < 1)
+ fun_l14_n314(x)
+ else
+ fun_l14_n924(x)
+ end
+end
+
+def fun_l13_n536(x)
+ if (x < 1)
+ fun_l14_n619(x)
+ else
+ fun_l14_n455(x)
+ end
+end
+
+def fun_l13_n537(x)
+ if (x < 1)
+ fun_l14_n183(x)
+ else
+ fun_l14_n767(x)
+ end
+end
+
+def fun_l13_n538(x)
+ if (x < 1)
+ fun_l14_n862(x)
+ else
+ fun_l14_n352(x)
+ end
+end
+
+def fun_l13_n539(x)
+ if (x < 1)
+ fun_l14_n540(x)
+ else
+ fun_l14_n813(x)
+ end
+end
+
+def fun_l13_n540(x)
+ if (x < 1)
+ fun_l14_n429(x)
+ else
+ fun_l14_n515(x)
+ end
+end
+
+def fun_l13_n541(x)
+ if (x < 1)
+ fun_l14_n294(x)
+ else
+ fun_l14_n341(x)
+ end
+end
+
+def fun_l13_n542(x)
+ if (x < 1)
+ fun_l14_n910(x)
+ else
+ fun_l14_n882(x)
+ end
+end
+
+def fun_l13_n543(x)
+ if (x < 1)
+ fun_l14_n971(x)
+ else
+ fun_l14_n19(x)
+ end
+end
+
+def fun_l13_n544(x)
+ if (x < 1)
+ fun_l14_n344(x)
+ else
+ fun_l14_n419(x)
+ end
+end
+
+def fun_l13_n545(x)
+ if (x < 1)
+ fun_l14_n410(x)
+ else
+ fun_l14_n996(x)
+ end
+end
+
+def fun_l13_n546(x)
+ if (x < 1)
+ fun_l14_n857(x)
+ else
+ fun_l14_n431(x)
+ end
+end
+
+def fun_l13_n547(x)
+ if (x < 1)
+ fun_l14_n548(x)
+ else
+ fun_l14_n934(x)
+ end
+end
+
+def fun_l13_n548(x)
+ if (x < 1)
+ fun_l14_n420(x)
+ else
+ fun_l14_n506(x)
+ end
+end
+
+def fun_l13_n549(x)
+ if (x < 1)
+ fun_l14_n992(x)
+ else
+ fun_l14_n213(x)
+ end
+end
+
+def fun_l13_n550(x)
+ if (x < 1)
+ fun_l14_n754(x)
+ else
+ fun_l14_n666(x)
+ end
+end
+
+def fun_l13_n551(x)
+ if (x < 1)
+ fun_l14_n412(x)
+ else
+ fun_l14_n908(x)
+ end
+end
+
+def fun_l13_n552(x)
+ if (x < 1)
+ fun_l14_n708(x)
+ else
+ fun_l14_n308(x)
+ end
+end
+
+def fun_l13_n553(x)
+ if (x < 1)
+ fun_l14_n797(x)
+ else
+ fun_l14_n622(x)
+ end
+end
+
+def fun_l13_n554(x)
+ if (x < 1)
+ fun_l14_n26(x)
+ else
+ fun_l14_n102(x)
+ end
+end
+
+def fun_l13_n555(x)
+ if (x < 1)
+ fun_l14_n614(x)
+ else
+ fun_l14_n110(x)
+ end
+end
+
+def fun_l13_n556(x)
+ if (x < 1)
+ fun_l14_n368(x)
+ else
+ fun_l14_n718(x)
+ end
+end
+
+def fun_l13_n557(x)
+ if (x < 1)
+ fun_l14_n782(x)
+ else
+ fun_l14_n659(x)
+ end
+end
+
+def fun_l13_n558(x)
+ if (x < 1)
+ fun_l14_n544(x)
+ else
+ fun_l14_n507(x)
+ end
+end
+
+def fun_l13_n559(x)
+ if (x < 1)
+ fun_l14_n39(x)
+ else
+ fun_l14_n97(x)
+ end
+end
+
+def fun_l13_n560(x)
+ if (x < 1)
+ fun_l14_n390(x)
+ else
+ fun_l14_n93(x)
+ end
+end
+
+def fun_l13_n561(x)
+ if (x < 1)
+ fun_l14_n28(x)
+ else
+ fun_l14_n267(x)
+ end
+end
+
+def fun_l13_n562(x)
+ if (x < 1)
+ fun_l14_n10(x)
+ else
+ fun_l14_n990(x)
+ end
+end
+
+def fun_l13_n563(x)
+ if (x < 1)
+ fun_l14_n428(x)
+ else
+ fun_l14_n878(x)
+ end
+end
+
+def fun_l13_n564(x)
+ if (x < 1)
+ fun_l14_n587(x)
+ else
+ fun_l14_n724(x)
+ end
+end
+
+def fun_l13_n565(x)
+ if (x < 1)
+ fun_l14_n524(x)
+ else
+ fun_l14_n87(x)
+ end
+end
+
+def fun_l13_n566(x)
+ if (x < 1)
+ fun_l14_n213(x)
+ else
+ fun_l14_n718(x)
+ end
+end
+
+def fun_l13_n567(x)
+ if (x < 1)
+ fun_l14_n821(x)
+ else
+ fun_l14_n478(x)
+ end
+end
+
+def fun_l13_n568(x)
+ if (x < 1)
+ fun_l14_n580(x)
+ else
+ fun_l14_n731(x)
+ end
+end
+
+def fun_l13_n569(x)
+ if (x < 1)
+ fun_l14_n673(x)
+ else
+ fun_l14_n780(x)
+ end
+end
+
+def fun_l13_n570(x)
+ if (x < 1)
+ fun_l14_n791(x)
+ else
+ fun_l14_n691(x)
+ end
+end
+
+def fun_l13_n571(x)
+ if (x < 1)
+ fun_l14_n192(x)
+ else
+ fun_l14_n712(x)
+ end
+end
+
+def fun_l13_n572(x)
+ if (x < 1)
+ fun_l14_n201(x)
+ else
+ fun_l14_n732(x)
+ end
+end
+
+def fun_l13_n573(x)
+ if (x < 1)
+ fun_l14_n180(x)
+ else
+ fun_l14_n260(x)
+ end
+end
+
+def fun_l13_n574(x)
+ if (x < 1)
+ fun_l14_n609(x)
+ else
+ fun_l14_n110(x)
+ end
+end
+
+def fun_l13_n575(x)
+ if (x < 1)
+ fun_l14_n993(x)
+ else
+ fun_l14_n510(x)
+ end
+end
+
+def fun_l13_n576(x)
+ if (x < 1)
+ fun_l14_n318(x)
+ else
+ fun_l14_n915(x)
+ end
+end
+
+def fun_l13_n577(x)
+ if (x < 1)
+ fun_l14_n635(x)
+ else
+ fun_l14_n21(x)
+ end
+end
+
+def fun_l13_n578(x)
+ if (x < 1)
+ fun_l14_n330(x)
+ else
+ fun_l14_n860(x)
+ end
+end
+
+def fun_l13_n579(x)
+ if (x < 1)
+ fun_l14_n24(x)
+ else
+ fun_l14_n87(x)
+ end
+end
+
+def fun_l13_n580(x)
+ if (x < 1)
+ fun_l14_n404(x)
+ else
+ fun_l14_n530(x)
+ end
+end
+
+def fun_l13_n581(x)
+ if (x < 1)
+ fun_l14_n831(x)
+ else
+ fun_l14_n384(x)
+ end
+end
+
+def fun_l13_n582(x)
+ if (x < 1)
+ fun_l14_n272(x)
+ else
+ fun_l14_n438(x)
+ end
+end
+
+def fun_l13_n583(x)
+ if (x < 1)
+ fun_l14_n297(x)
+ else
+ fun_l14_n414(x)
+ end
+end
+
+def fun_l13_n584(x)
+ if (x < 1)
+ fun_l14_n38(x)
+ else
+ fun_l14_n676(x)
+ end
+end
+
+def fun_l13_n585(x)
+ if (x < 1)
+ fun_l14_n104(x)
+ else
+ fun_l14_n566(x)
+ end
+end
+
+def fun_l13_n586(x)
+ if (x < 1)
+ fun_l14_n322(x)
+ else
+ fun_l14_n601(x)
+ end
+end
+
+def fun_l13_n587(x)
+ if (x < 1)
+ fun_l14_n20(x)
+ else
+ fun_l14_n242(x)
+ end
+end
+
+def fun_l13_n588(x)
+ if (x < 1)
+ fun_l14_n291(x)
+ else
+ fun_l14_n744(x)
+ end
+end
+
+def fun_l13_n589(x)
+ if (x < 1)
+ fun_l14_n702(x)
+ else
+ fun_l14_n456(x)
+ end
+end
+
+def fun_l13_n590(x)
+ if (x < 1)
+ fun_l14_n39(x)
+ else
+ fun_l14_n493(x)
+ end
+end
+
+def fun_l13_n591(x)
+ if (x < 1)
+ fun_l14_n51(x)
+ else
+ fun_l14_n193(x)
+ end
+end
+
+def fun_l13_n592(x)
+ if (x < 1)
+ fun_l14_n512(x)
+ else
+ fun_l14_n382(x)
+ end
+end
+
+def fun_l13_n593(x)
+ if (x < 1)
+ fun_l14_n550(x)
+ else
+ fun_l14_n711(x)
+ end
+end
+
+def fun_l13_n594(x)
+ if (x < 1)
+ fun_l14_n586(x)
+ else
+ fun_l14_n130(x)
+ end
+end
+
+def fun_l13_n595(x)
+ if (x < 1)
+ fun_l14_n348(x)
+ else
+ fun_l14_n214(x)
+ end
+end
+
+def fun_l13_n596(x)
+ if (x < 1)
+ fun_l14_n193(x)
+ else
+ fun_l14_n490(x)
+ end
+end
+
+def fun_l13_n597(x)
+ if (x < 1)
+ fun_l14_n736(x)
+ else
+ fun_l14_n824(x)
+ end
+end
+
+def fun_l13_n598(x)
+ if (x < 1)
+ fun_l14_n555(x)
+ else
+ fun_l14_n546(x)
+ end
+end
+
+def fun_l13_n599(x)
+ if (x < 1)
+ fun_l14_n244(x)
+ else
+ fun_l14_n903(x)
+ end
+end
+
+def fun_l13_n600(x)
+ if (x < 1)
+ fun_l14_n786(x)
+ else
+ fun_l14_n817(x)
+ end
+end
+
+def fun_l13_n601(x)
+ if (x < 1)
+ fun_l14_n991(x)
+ else
+ fun_l14_n691(x)
+ end
+end
+
+def fun_l13_n602(x)
+ if (x < 1)
+ fun_l14_n369(x)
+ else
+ fun_l14_n85(x)
+ end
+end
+
+def fun_l13_n603(x)
+ if (x < 1)
+ fun_l14_n232(x)
+ else
+ fun_l14_n287(x)
+ end
+end
+
+def fun_l13_n604(x)
+ if (x < 1)
+ fun_l14_n397(x)
+ else
+ fun_l14_n59(x)
+ end
+end
+
+def fun_l13_n605(x)
+ if (x < 1)
+ fun_l14_n394(x)
+ else
+ fun_l14_n297(x)
+ end
+end
+
+def fun_l13_n606(x)
+ if (x < 1)
+ fun_l14_n676(x)
+ else
+ fun_l14_n444(x)
+ end
+end
+
+def fun_l13_n607(x)
+ if (x < 1)
+ fun_l14_n894(x)
+ else
+ fun_l14_n147(x)
+ end
+end
+
+def fun_l13_n608(x)
+ if (x < 1)
+ fun_l14_n593(x)
+ else
+ fun_l14_n880(x)
+ end
+end
+
+def fun_l13_n609(x)
+ if (x < 1)
+ fun_l14_n306(x)
+ else
+ fun_l14_n610(x)
+ end
+end
+
+def fun_l13_n610(x)
+ if (x < 1)
+ fun_l14_n884(x)
+ else
+ fun_l14_n202(x)
+ end
+end
+
+def fun_l13_n611(x)
+ if (x < 1)
+ fun_l14_n763(x)
+ else
+ fun_l14_n592(x)
+ end
+end
+
+def fun_l13_n612(x)
+ if (x < 1)
+ fun_l14_n477(x)
+ else
+ fun_l14_n614(x)
+ end
+end
+
+def fun_l13_n613(x)
+ if (x < 1)
+ fun_l14_n372(x)
+ else
+ fun_l14_n330(x)
+ end
+end
+
+def fun_l13_n614(x)
+ if (x < 1)
+ fun_l14_n767(x)
+ else
+ fun_l14_n277(x)
+ end
+end
+
+def fun_l13_n615(x)
+ if (x < 1)
+ fun_l14_n530(x)
+ else
+ fun_l14_n24(x)
+ end
+end
+
+def fun_l13_n616(x)
+ if (x < 1)
+ fun_l14_n657(x)
+ else
+ fun_l14_n709(x)
+ end
+end
+
+def fun_l13_n617(x)
+ if (x < 1)
+ fun_l14_n559(x)
+ else
+ fun_l14_n125(x)
+ end
+end
+
+def fun_l13_n618(x)
+ if (x < 1)
+ fun_l14_n855(x)
+ else
+ fun_l14_n353(x)
+ end
+end
+
+def fun_l13_n619(x)
+ if (x < 1)
+ fun_l14_n635(x)
+ else
+ fun_l14_n907(x)
+ end
+end
+
+def fun_l13_n620(x)
+ if (x < 1)
+ fun_l14_n229(x)
+ else
+ fun_l14_n7(x)
+ end
+end
+
+def fun_l13_n621(x)
+ if (x < 1)
+ fun_l14_n568(x)
+ else
+ fun_l14_n393(x)
+ end
+end
+
+def fun_l13_n622(x)
+ if (x < 1)
+ fun_l14_n153(x)
+ else
+ fun_l14_n641(x)
+ end
+end
+
+def fun_l13_n623(x)
+ if (x < 1)
+ fun_l14_n249(x)
+ else
+ fun_l14_n139(x)
+ end
+end
+
+def fun_l13_n624(x)
+ if (x < 1)
+ fun_l14_n961(x)
+ else
+ fun_l14_n897(x)
+ end
+end
+
+def fun_l13_n625(x)
+ if (x < 1)
+ fun_l14_n535(x)
+ else
+ fun_l14_n252(x)
+ end
+end
+
+def fun_l13_n626(x)
+ if (x < 1)
+ fun_l14_n832(x)
+ else
+ fun_l14_n995(x)
+ end
+end
+
+def fun_l13_n627(x)
+ if (x < 1)
+ fun_l14_n896(x)
+ else
+ fun_l14_n173(x)
+ end
+end
+
+def fun_l13_n628(x)
+ if (x < 1)
+ fun_l14_n939(x)
+ else
+ fun_l14_n852(x)
+ end
+end
+
+def fun_l13_n629(x)
+ if (x < 1)
+ fun_l14_n424(x)
+ else
+ fun_l14_n161(x)
+ end
+end
+
+def fun_l13_n630(x)
+ if (x < 1)
+ fun_l14_n822(x)
+ else
+ fun_l14_n523(x)
+ end
+end
+
+def fun_l13_n631(x)
+ if (x < 1)
+ fun_l14_n697(x)
+ else
+ fun_l14_n939(x)
+ end
+end
+
+def fun_l13_n632(x)
+ if (x < 1)
+ fun_l14_n831(x)
+ else
+ fun_l14_n722(x)
+ end
+end
+
+def fun_l13_n633(x)
+ if (x < 1)
+ fun_l14_n837(x)
+ else
+ fun_l14_n994(x)
+ end
+end
+
+def fun_l13_n634(x)
+ if (x < 1)
+ fun_l14_n568(x)
+ else
+ fun_l14_n636(x)
+ end
+end
+
+def fun_l13_n635(x)
+ if (x < 1)
+ fun_l14_n573(x)
+ else
+ fun_l14_n156(x)
+ end
+end
+
+def fun_l13_n636(x)
+ if (x < 1)
+ fun_l14_n682(x)
+ else
+ fun_l14_n999(x)
+ end
+end
+
+def fun_l13_n637(x)
+ if (x < 1)
+ fun_l14_n648(x)
+ else
+ fun_l14_n567(x)
+ end
+end
+
+def fun_l13_n638(x)
+ if (x < 1)
+ fun_l14_n395(x)
+ else
+ fun_l14_n837(x)
+ end
+end
+
+def fun_l13_n639(x)
+ if (x < 1)
+ fun_l14_n294(x)
+ else
+ fun_l14_n508(x)
+ end
+end
+
+def fun_l13_n640(x)
+ if (x < 1)
+ fun_l14_n530(x)
+ else
+ fun_l14_n542(x)
+ end
+end
+
+def fun_l13_n641(x)
+ if (x < 1)
+ fun_l14_n227(x)
+ else
+ fun_l14_n939(x)
+ end
+end
+
+def fun_l13_n642(x)
+ if (x < 1)
+ fun_l14_n415(x)
+ else
+ fun_l14_n79(x)
+ end
+end
+
+def fun_l13_n643(x)
+ if (x < 1)
+ fun_l14_n354(x)
+ else
+ fun_l14_n606(x)
+ end
+end
+
+def fun_l13_n644(x)
+ if (x < 1)
+ fun_l14_n270(x)
+ else
+ fun_l14_n644(x)
+ end
+end
+
+def fun_l13_n645(x)
+ if (x < 1)
+ fun_l14_n345(x)
+ else
+ fun_l14_n299(x)
+ end
+end
+
+def fun_l13_n646(x)
+ if (x < 1)
+ fun_l14_n384(x)
+ else
+ fun_l14_n97(x)
+ end
+end
+
+def fun_l13_n647(x)
+ if (x < 1)
+ fun_l14_n86(x)
+ else
+ fun_l14_n103(x)
+ end
+end
+
+def fun_l13_n648(x)
+ if (x < 1)
+ fun_l14_n765(x)
+ else
+ fun_l14_n498(x)
+ end
+end
+
+def fun_l13_n649(x)
+ if (x < 1)
+ fun_l14_n135(x)
+ else
+ fun_l14_n993(x)
+ end
+end
+
+def fun_l13_n650(x)
+ if (x < 1)
+ fun_l14_n837(x)
+ else
+ fun_l14_n576(x)
+ end
+end
+
+def fun_l13_n651(x)
+ if (x < 1)
+ fun_l14_n75(x)
+ else
+ fun_l14_n351(x)
+ end
+end
+
+def fun_l13_n652(x)
+ if (x < 1)
+ fun_l14_n932(x)
+ else
+ fun_l14_n646(x)
+ end
+end
+
+def fun_l13_n653(x)
+ if (x < 1)
+ fun_l14_n908(x)
+ else
+ fun_l14_n384(x)
+ end
+end
+
+def fun_l13_n654(x)
+ if (x < 1)
+ fun_l14_n540(x)
+ else
+ fun_l14_n946(x)
+ end
+end
+
+def fun_l13_n655(x)
+ if (x < 1)
+ fun_l14_n686(x)
+ else
+ fun_l14_n926(x)
+ end
+end
+
+def fun_l13_n656(x)
+ if (x < 1)
+ fun_l14_n567(x)
+ else
+ fun_l14_n815(x)
+ end
+end
+
+def fun_l13_n657(x)
+ if (x < 1)
+ fun_l14_n101(x)
+ else
+ fun_l14_n960(x)
+ end
+end
+
+def fun_l13_n658(x)
+ if (x < 1)
+ fun_l14_n956(x)
+ else
+ fun_l14_n980(x)
+ end
+end
+
+def fun_l13_n659(x)
+ if (x < 1)
+ fun_l14_n196(x)
+ else
+ fun_l14_n632(x)
+ end
+end
+
+def fun_l13_n660(x)
+ if (x < 1)
+ fun_l14_n83(x)
+ else
+ fun_l14_n288(x)
+ end
+end
+
+def fun_l13_n661(x)
+ if (x < 1)
+ fun_l14_n907(x)
+ else
+ fun_l14_n719(x)
+ end
+end
+
+def fun_l13_n662(x)
+ if (x < 1)
+ fun_l14_n922(x)
+ else
+ fun_l14_n186(x)
+ end
+end
+
+def fun_l13_n663(x)
+ if (x < 1)
+ fun_l14_n439(x)
+ else
+ fun_l14_n890(x)
+ end
+end
+
+def fun_l13_n664(x)
+ if (x < 1)
+ fun_l14_n310(x)
+ else
+ fun_l14_n534(x)
+ end
+end
+
+def fun_l13_n665(x)
+ if (x < 1)
+ fun_l14_n584(x)
+ else
+ fun_l14_n322(x)
+ end
+end
+
+def fun_l13_n666(x)
+ if (x < 1)
+ fun_l14_n385(x)
+ else
+ fun_l14_n466(x)
+ end
+end
+
+def fun_l13_n667(x)
+ if (x < 1)
+ fun_l14_n387(x)
+ else
+ fun_l14_n284(x)
+ end
+end
+
+def fun_l13_n668(x)
+ if (x < 1)
+ fun_l14_n834(x)
+ else
+ fun_l14_n446(x)
+ end
+end
+
+def fun_l13_n669(x)
+ if (x < 1)
+ fun_l14_n839(x)
+ else
+ fun_l14_n820(x)
+ end
+end
+
+def fun_l13_n670(x)
+ if (x < 1)
+ fun_l14_n666(x)
+ else
+ fun_l14_n690(x)
+ end
+end
+
+def fun_l13_n671(x)
+ if (x < 1)
+ fun_l14_n640(x)
+ else
+ fun_l14_n83(x)
+ end
+end
+
+def fun_l13_n672(x)
+ if (x < 1)
+ fun_l14_n663(x)
+ else
+ fun_l14_n332(x)
+ end
+end
+
+def fun_l13_n673(x)
+ if (x < 1)
+ fun_l14_n776(x)
+ else
+ fun_l14_n818(x)
+ end
+end
+
+def fun_l13_n674(x)
+ if (x < 1)
+ fun_l14_n82(x)
+ else
+ fun_l14_n594(x)
+ end
+end
+
+def fun_l13_n675(x)
+ if (x < 1)
+ fun_l14_n491(x)
+ else
+ fun_l14_n0(x)
+ end
+end
+
+def fun_l13_n676(x)
+ if (x < 1)
+ fun_l14_n963(x)
+ else
+ fun_l14_n634(x)
+ end
+end
+
+def fun_l13_n677(x)
+ if (x < 1)
+ fun_l14_n716(x)
+ else
+ fun_l14_n99(x)
+ end
+end
+
+def fun_l13_n678(x)
+ if (x < 1)
+ fun_l14_n997(x)
+ else
+ fun_l14_n933(x)
+ end
+end
+
+def fun_l13_n679(x)
+ if (x < 1)
+ fun_l14_n171(x)
+ else
+ fun_l14_n356(x)
+ end
+end
+
+def fun_l13_n680(x)
+ if (x < 1)
+ fun_l14_n214(x)
+ else
+ fun_l14_n360(x)
+ end
+end
+
+def fun_l13_n681(x)
+ if (x < 1)
+ fun_l14_n758(x)
+ else
+ fun_l14_n185(x)
+ end
+end
+
+def fun_l13_n682(x)
+ if (x < 1)
+ fun_l14_n480(x)
+ else
+ fun_l14_n572(x)
+ end
+end
+
+def fun_l13_n683(x)
+ if (x < 1)
+ fun_l14_n595(x)
+ else
+ fun_l14_n534(x)
+ end
+end
+
+def fun_l13_n684(x)
+ if (x < 1)
+ fun_l14_n462(x)
+ else
+ fun_l14_n481(x)
+ end
+end
+
+def fun_l13_n685(x)
+ if (x < 1)
+ fun_l14_n946(x)
+ else
+ fun_l14_n726(x)
+ end
+end
+
+def fun_l13_n686(x)
+ if (x < 1)
+ fun_l14_n428(x)
+ else
+ fun_l14_n256(x)
+ end
+end
+
+def fun_l13_n687(x)
+ if (x < 1)
+ fun_l14_n562(x)
+ else
+ fun_l14_n290(x)
+ end
+end
+
+def fun_l13_n688(x)
+ if (x < 1)
+ fun_l14_n679(x)
+ else
+ fun_l14_n787(x)
+ end
+end
+
+def fun_l13_n689(x)
+ if (x < 1)
+ fun_l14_n972(x)
+ else
+ fun_l14_n809(x)
+ end
+end
+
+def fun_l13_n690(x)
+ if (x < 1)
+ fun_l14_n700(x)
+ else
+ fun_l14_n239(x)
+ end
+end
+
+def fun_l13_n691(x)
+ if (x < 1)
+ fun_l14_n525(x)
+ else
+ fun_l14_n251(x)
+ end
+end
+
+def fun_l13_n692(x)
+ if (x < 1)
+ fun_l14_n4(x)
+ else
+ fun_l14_n889(x)
+ end
+end
+
+def fun_l13_n693(x)
+ if (x < 1)
+ fun_l14_n362(x)
+ else
+ fun_l14_n495(x)
+ end
+end
+
+def fun_l13_n694(x)
+ if (x < 1)
+ fun_l14_n466(x)
+ else
+ fun_l14_n820(x)
+ end
+end
+
+def fun_l13_n695(x)
+ if (x < 1)
+ fun_l14_n244(x)
+ else
+ fun_l14_n233(x)
+ end
+end
+
+def fun_l13_n696(x)
+ if (x < 1)
+ fun_l14_n920(x)
+ else
+ fun_l14_n124(x)
+ end
+end
+
+def fun_l13_n697(x)
+ if (x < 1)
+ fun_l14_n926(x)
+ else
+ fun_l14_n417(x)
+ end
+end
+
+def fun_l13_n698(x)
+ if (x < 1)
+ fun_l14_n756(x)
+ else
+ fun_l14_n683(x)
+ end
+end
+
+def fun_l13_n699(x)
+ if (x < 1)
+ fun_l14_n487(x)
+ else
+ fun_l14_n191(x)
+ end
+end
+
+def fun_l13_n700(x)
+ if (x < 1)
+ fun_l14_n316(x)
+ else
+ fun_l14_n123(x)
+ end
+end
+
+def fun_l13_n701(x)
+ if (x < 1)
+ fun_l14_n851(x)
+ else
+ fun_l14_n695(x)
+ end
+end
+
+def fun_l13_n702(x)
+ if (x < 1)
+ fun_l14_n766(x)
+ else
+ fun_l14_n603(x)
+ end
+end
+
+def fun_l13_n703(x)
+ if (x < 1)
+ fun_l14_n689(x)
+ else
+ fun_l14_n524(x)
+ end
+end
+
+def fun_l13_n704(x)
+ if (x < 1)
+ fun_l14_n23(x)
+ else
+ fun_l14_n866(x)
+ end
+end
+
+def fun_l13_n705(x)
+ if (x < 1)
+ fun_l14_n62(x)
+ else
+ fun_l14_n926(x)
+ end
+end
+
+def fun_l13_n706(x)
+ if (x < 1)
+ fun_l14_n53(x)
+ else
+ fun_l14_n567(x)
+ end
+end
+
+def fun_l13_n707(x)
+ if (x < 1)
+ fun_l14_n756(x)
+ else
+ fun_l14_n595(x)
+ end
+end
+
+def fun_l13_n708(x)
+ if (x < 1)
+ fun_l14_n495(x)
+ else
+ fun_l14_n698(x)
+ end
+end
+
+def fun_l13_n709(x)
+ if (x < 1)
+ fun_l14_n511(x)
+ else
+ fun_l14_n131(x)
+ end
+end
+
+def fun_l13_n710(x)
+ if (x < 1)
+ fun_l14_n593(x)
+ else
+ fun_l14_n233(x)
+ end
+end
+
+def fun_l13_n711(x)
+ if (x < 1)
+ fun_l14_n846(x)
+ else
+ fun_l14_n166(x)
+ end
+end
+
+def fun_l13_n712(x)
+ if (x < 1)
+ fun_l14_n759(x)
+ else
+ fun_l14_n103(x)
+ end
+end
+
+def fun_l13_n713(x)
+ if (x < 1)
+ fun_l14_n364(x)
+ else
+ fun_l14_n805(x)
+ end
+end
+
+def fun_l13_n714(x)
+ if (x < 1)
+ fun_l14_n957(x)
+ else
+ fun_l14_n85(x)
+ end
+end
+
+def fun_l13_n715(x)
+ if (x < 1)
+ fun_l14_n877(x)
+ else
+ fun_l14_n111(x)
+ end
+end
+
+def fun_l13_n716(x)
+ if (x < 1)
+ fun_l14_n290(x)
+ else
+ fun_l14_n894(x)
+ end
+end
+
+def fun_l13_n717(x)
+ if (x < 1)
+ fun_l14_n354(x)
+ else
+ fun_l14_n646(x)
+ end
+end
+
+def fun_l13_n718(x)
+ if (x < 1)
+ fun_l14_n364(x)
+ else
+ fun_l14_n810(x)
+ end
+end
+
+def fun_l13_n719(x)
+ if (x < 1)
+ fun_l14_n392(x)
+ else
+ fun_l14_n537(x)
+ end
+end
+
+def fun_l13_n720(x)
+ if (x < 1)
+ fun_l14_n546(x)
+ else
+ fun_l14_n681(x)
+ end
+end
+
+def fun_l13_n721(x)
+ if (x < 1)
+ fun_l14_n153(x)
+ else
+ fun_l14_n925(x)
+ end
+end
+
+def fun_l13_n722(x)
+ if (x < 1)
+ fun_l14_n107(x)
+ else
+ fun_l14_n482(x)
+ end
+end
+
+def fun_l13_n723(x)
+ if (x < 1)
+ fun_l14_n981(x)
+ else
+ fun_l14_n364(x)
+ end
+end
+
+def fun_l13_n724(x)
+ if (x < 1)
+ fun_l14_n869(x)
+ else
+ fun_l14_n871(x)
+ end
+end
+
+def fun_l13_n725(x)
+ if (x < 1)
+ fun_l14_n693(x)
+ else
+ fun_l14_n690(x)
+ end
+end
+
+def fun_l13_n726(x)
+ if (x < 1)
+ fun_l14_n587(x)
+ else
+ fun_l14_n654(x)
+ end
+end
+
+def fun_l13_n727(x)
+ if (x < 1)
+ fun_l14_n150(x)
+ else
+ fun_l14_n904(x)
+ end
+end
+
+def fun_l13_n728(x)
+ if (x < 1)
+ fun_l14_n843(x)
+ else
+ fun_l14_n556(x)
+ end
+end
+
+def fun_l13_n729(x)
+ if (x < 1)
+ fun_l14_n726(x)
+ else
+ fun_l14_n114(x)
+ end
+end
+
+def fun_l13_n730(x)
+ if (x < 1)
+ fun_l14_n976(x)
+ else
+ fun_l14_n740(x)
+ end
+end
+
+def fun_l13_n731(x)
+ if (x < 1)
+ fun_l14_n709(x)
+ else
+ fun_l14_n293(x)
+ end
+end
+
+def fun_l13_n732(x)
+ if (x < 1)
+ fun_l14_n858(x)
+ else
+ fun_l14_n530(x)
+ end
+end
+
+def fun_l13_n733(x)
+ if (x < 1)
+ fun_l14_n789(x)
+ else
+ fun_l14_n475(x)
+ end
+end
+
+def fun_l13_n734(x)
+ if (x < 1)
+ fun_l14_n813(x)
+ else
+ fun_l14_n359(x)
+ end
+end
+
+def fun_l13_n735(x)
+ if (x < 1)
+ fun_l14_n209(x)
+ else
+ fun_l14_n29(x)
+ end
+end
+
+def fun_l13_n736(x)
+ if (x < 1)
+ fun_l14_n710(x)
+ else
+ fun_l14_n823(x)
+ end
+end
+
+def fun_l13_n737(x)
+ if (x < 1)
+ fun_l14_n434(x)
+ else
+ fun_l14_n864(x)
+ end
+end
+
+def fun_l13_n738(x)
+ if (x < 1)
+ fun_l14_n184(x)
+ else
+ fun_l14_n902(x)
+ end
+end
+
+def fun_l13_n739(x)
+ if (x < 1)
+ fun_l14_n206(x)
+ else
+ fun_l14_n65(x)
+ end
+end
+
+def fun_l13_n740(x)
+ if (x < 1)
+ fun_l14_n670(x)
+ else
+ fun_l14_n956(x)
+ end
+end
+
+def fun_l13_n741(x)
+ if (x < 1)
+ fun_l14_n91(x)
+ else
+ fun_l14_n341(x)
+ end
+end
+
+def fun_l13_n742(x)
+ if (x < 1)
+ fun_l14_n864(x)
+ else
+ fun_l14_n864(x)
+ end
+end
+
+def fun_l13_n743(x)
+ if (x < 1)
+ fun_l14_n426(x)
+ else
+ fun_l14_n302(x)
+ end
+end
+
+def fun_l13_n744(x)
+ if (x < 1)
+ fun_l14_n241(x)
+ else
+ fun_l14_n151(x)
+ end
+end
+
+def fun_l13_n745(x)
+ if (x < 1)
+ fun_l14_n161(x)
+ else
+ fun_l14_n715(x)
+ end
+end
+
+def fun_l13_n746(x)
+ if (x < 1)
+ fun_l14_n925(x)
+ else
+ fun_l14_n840(x)
+ end
+end
+
+def fun_l13_n747(x)
+ if (x < 1)
+ fun_l14_n864(x)
+ else
+ fun_l14_n610(x)
+ end
+end
+
+def fun_l13_n748(x)
+ if (x < 1)
+ fun_l14_n322(x)
+ else
+ fun_l14_n69(x)
+ end
+end
+
+def fun_l13_n749(x)
+ if (x < 1)
+ fun_l14_n847(x)
+ else
+ fun_l14_n3(x)
+ end
+end
+
+def fun_l13_n750(x)
+ if (x < 1)
+ fun_l14_n124(x)
+ else
+ fun_l14_n915(x)
+ end
+end
+
+def fun_l13_n751(x)
+ if (x < 1)
+ fun_l14_n163(x)
+ else
+ fun_l14_n136(x)
+ end
+end
+
+def fun_l13_n752(x)
+ if (x < 1)
+ fun_l14_n525(x)
+ else
+ fun_l14_n197(x)
+ end
+end
+
+def fun_l13_n753(x)
+ if (x < 1)
+ fun_l14_n109(x)
+ else
+ fun_l14_n208(x)
+ end
+end
+
+def fun_l13_n754(x)
+ if (x < 1)
+ fun_l14_n597(x)
+ else
+ fun_l14_n307(x)
+ end
+end
+
+def fun_l13_n755(x)
+ if (x < 1)
+ fun_l14_n36(x)
+ else
+ fun_l14_n948(x)
+ end
+end
+
+def fun_l13_n756(x)
+ if (x < 1)
+ fun_l14_n236(x)
+ else
+ fun_l14_n716(x)
+ end
+end
+
+def fun_l13_n757(x)
+ if (x < 1)
+ fun_l14_n326(x)
+ else
+ fun_l14_n870(x)
+ end
+end
+
+def fun_l13_n758(x)
+ if (x < 1)
+ fun_l14_n333(x)
+ else
+ fun_l14_n224(x)
+ end
+end
+
+def fun_l13_n759(x)
+ if (x < 1)
+ fun_l14_n141(x)
+ else
+ fun_l14_n232(x)
+ end
+end
+
+def fun_l13_n760(x)
+ if (x < 1)
+ fun_l14_n653(x)
+ else
+ fun_l14_n559(x)
+ end
+end
+
+def fun_l13_n761(x)
+ if (x < 1)
+ fun_l14_n305(x)
+ else
+ fun_l14_n296(x)
+ end
+end
+
+def fun_l13_n762(x)
+ if (x < 1)
+ fun_l14_n318(x)
+ else
+ fun_l14_n351(x)
+ end
+end
+
+def fun_l13_n763(x)
+ if (x < 1)
+ fun_l14_n685(x)
+ else
+ fun_l14_n643(x)
+ end
+end
+
+def fun_l13_n764(x)
+ if (x < 1)
+ fun_l14_n180(x)
+ else
+ fun_l14_n348(x)
+ end
+end
+
+def fun_l13_n765(x)
+ if (x < 1)
+ fun_l14_n72(x)
+ else
+ fun_l14_n99(x)
+ end
+end
+
+def fun_l13_n766(x)
+ if (x < 1)
+ fun_l14_n463(x)
+ else
+ fun_l14_n135(x)
+ end
+end
+
+def fun_l13_n767(x)
+ if (x < 1)
+ fun_l14_n461(x)
+ else
+ fun_l14_n989(x)
+ end
+end
+
+def fun_l13_n768(x)
+ if (x < 1)
+ fun_l14_n759(x)
+ else
+ fun_l14_n907(x)
+ end
+end
+
+def fun_l13_n769(x)
+ if (x < 1)
+ fun_l14_n330(x)
+ else
+ fun_l14_n268(x)
+ end
+end
+
+def fun_l13_n770(x)
+ if (x < 1)
+ fun_l14_n809(x)
+ else
+ fun_l14_n46(x)
+ end
+end
+
+def fun_l13_n771(x)
+ if (x < 1)
+ fun_l14_n396(x)
+ else
+ fun_l14_n114(x)
+ end
+end
+
+def fun_l13_n772(x)
+ if (x < 1)
+ fun_l14_n300(x)
+ else
+ fun_l14_n60(x)
+ end
+end
+
+def fun_l13_n773(x)
+ if (x < 1)
+ fun_l14_n938(x)
+ else
+ fun_l14_n112(x)
+ end
+end
+
+def fun_l13_n774(x)
+ if (x < 1)
+ fun_l14_n862(x)
+ else
+ fun_l14_n503(x)
+ end
+end
+
+def fun_l13_n775(x)
+ if (x < 1)
+ fun_l14_n305(x)
+ else
+ fun_l14_n11(x)
+ end
+end
+
+def fun_l13_n776(x)
+ if (x < 1)
+ fun_l14_n638(x)
+ else
+ fun_l14_n161(x)
+ end
+end
+
+def fun_l13_n777(x)
+ if (x < 1)
+ fun_l14_n2(x)
+ else
+ fun_l14_n176(x)
+ end
+end
+
+def fun_l13_n778(x)
+ if (x < 1)
+ fun_l14_n967(x)
+ else
+ fun_l14_n739(x)
+ end
+end
+
+def fun_l13_n779(x)
+ if (x < 1)
+ fun_l14_n961(x)
+ else
+ fun_l14_n609(x)
+ end
+end
+
+def fun_l13_n780(x)
+ if (x < 1)
+ fun_l14_n207(x)
+ else
+ fun_l14_n910(x)
+ end
+end
+
+def fun_l13_n781(x)
+ if (x < 1)
+ fun_l14_n370(x)
+ else
+ fun_l14_n163(x)
+ end
+end
+
+def fun_l13_n782(x)
+ if (x < 1)
+ fun_l14_n140(x)
+ else
+ fun_l14_n816(x)
+ end
+end
+
+def fun_l13_n783(x)
+ if (x < 1)
+ fun_l14_n351(x)
+ else
+ fun_l14_n406(x)
+ end
+end
+
+def fun_l13_n784(x)
+ if (x < 1)
+ fun_l14_n790(x)
+ else
+ fun_l14_n175(x)
+ end
+end
+
+def fun_l13_n785(x)
+ if (x < 1)
+ fun_l14_n644(x)
+ else
+ fun_l14_n713(x)
+ end
+end
+
+def fun_l13_n786(x)
+ if (x < 1)
+ fun_l14_n800(x)
+ else
+ fun_l14_n257(x)
+ end
+end
+
+def fun_l13_n787(x)
+ if (x < 1)
+ fun_l14_n248(x)
+ else
+ fun_l14_n709(x)
+ end
+end
+
+def fun_l13_n788(x)
+ if (x < 1)
+ fun_l14_n280(x)
+ else
+ fun_l14_n485(x)
+ end
+end
+
+def fun_l13_n789(x)
+ if (x < 1)
+ fun_l14_n900(x)
+ else
+ fun_l14_n675(x)
+ end
+end
+
+def fun_l13_n790(x)
+ if (x < 1)
+ fun_l14_n65(x)
+ else
+ fun_l14_n426(x)
+ end
+end
+
+def fun_l13_n791(x)
+ if (x < 1)
+ fun_l14_n410(x)
+ else
+ fun_l14_n484(x)
+ end
+end
+
+def fun_l13_n792(x)
+ if (x < 1)
+ fun_l14_n741(x)
+ else
+ fun_l14_n13(x)
+ end
+end
+
+def fun_l13_n793(x)
+ if (x < 1)
+ fun_l14_n550(x)
+ else
+ fun_l14_n884(x)
+ end
+end
+
+def fun_l13_n794(x)
+ if (x < 1)
+ fun_l14_n120(x)
+ else
+ fun_l14_n262(x)
+ end
+end
+
+def fun_l13_n795(x)
+ if (x < 1)
+ fun_l14_n537(x)
+ else
+ fun_l14_n980(x)
+ end
+end
+
+def fun_l13_n796(x)
+ if (x < 1)
+ fun_l14_n742(x)
+ else
+ fun_l14_n6(x)
+ end
+end
+
+def fun_l13_n797(x)
+ if (x < 1)
+ fun_l14_n986(x)
+ else
+ fun_l14_n434(x)
+ end
+end
+
+def fun_l13_n798(x)
+ if (x < 1)
+ fun_l14_n39(x)
+ else
+ fun_l14_n658(x)
+ end
+end
+
+def fun_l13_n799(x)
+ if (x < 1)
+ fun_l14_n838(x)
+ else
+ fun_l14_n810(x)
+ end
+end
+
+def fun_l13_n800(x)
+ if (x < 1)
+ fun_l14_n79(x)
+ else
+ fun_l14_n695(x)
+ end
+end
+
+def fun_l13_n801(x)
+ if (x < 1)
+ fun_l14_n99(x)
+ else
+ fun_l14_n26(x)
+ end
+end
+
+def fun_l13_n802(x)
+ if (x < 1)
+ fun_l14_n839(x)
+ else
+ fun_l14_n430(x)
+ end
+end
+
+def fun_l13_n803(x)
+ if (x < 1)
+ fun_l14_n410(x)
+ else
+ fun_l14_n403(x)
+ end
+end
+
+def fun_l13_n804(x)
+ if (x < 1)
+ fun_l14_n143(x)
+ else
+ fun_l14_n689(x)
+ end
+end
+
+def fun_l13_n805(x)
+ if (x < 1)
+ fun_l14_n695(x)
+ else
+ fun_l14_n721(x)
+ end
+end
+
+def fun_l13_n806(x)
+ if (x < 1)
+ fun_l14_n418(x)
+ else
+ fun_l14_n508(x)
+ end
+end
+
+def fun_l13_n807(x)
+ if (x < 1)
+ fun_l14_n569(x)
+ else
+ fun_l14_n86(x)
+ end
+end
+
+def fun_l13_n808(x)
+ if (x < 1)
+ fun_l14_n670(x)
+ else
+ fun_l14_n690(x)
+ end
+end
+
+def fun_l13_n809(x)
+ if (x < 1)
+ fun_l14_n283(x)
+ else
+ fun_l14_n630(x)
+ end
+end
+
+def fun_l13_n810(x)
+ if (x < 1)
+ fun_l14_n54(x)
+ else
+ fun_l14_n180(x)
+ end
+end
+
+def fun_l13_n811(x)
+ if (x < 1)
+ fun_l14_n669(x)
+ else
+ fun_l14_n131(x)
+ end
+end
+
+def fun_l13_n812(x)
+ if (x < 1)
+ fun_l14_n972(x)
+ else
+ fun_l14_n948(x)
+ end
+end
+
+def fun_l13_n813(x)
+ if (x < 1)
+ fun_l14_n585(x)
+ else
+ fun_l14_n244(x)
+ end
+end
+
+def fun_l13_n814(x)
+ if (x < 1)
+ fun_l14_n277(x)
+ else
+ fun_l14_n530(x)
+ end
+end
+
+def fun_l13_n815(x)
+ if (x < 1)
+ fun_l14_n908(x)
+ else
+ fun_l14_n380(x)
+ end
+end
+
+def fun_l13_n816(x)
+ if (x < 1)
+ fun_l14_n520(x)
+ else
+ fun_l14_n382(x)
+ end
+end
+
+def fun_l13_n817(x)
+ if (x < 1)
+ fun_l14_n40(x)
+ else
+ fun_l14_n757(x)
+ end
+end
+
+def fun_l13_n818(x)
+ if (x < 1)
+ fun_l14_n220(x)
+ else
+ fun_l14_n781(x)
+ end
+end
+
+def fun_l13_n819(x)
+ if (x < 1)
+ fun_l14_n507(x)
+ else
+ fun_l14_n602(x)
+ end
+end
+
+def fun_l13_n820(x)
+ if (x < 1)
+ fun_l14_n39(x)
+ else
+ fun_l14_n798(x)
+ end
+end
+
+def fun_l13_n821(x)
+ if (x < 1)
+ fun_l14_n412(x)
+ else
+ fun_l14_n58(x)
+ end
+end
+
+def fun_l13_n822(x)
+ if (x < 1)
+ fun_l14_n599(x)
+ else
+ fun_l14_n206(x)
+ end
+end
+
+def fun_l13_n823(x)
+ if (x < 1)
+ fun_l14_n294(x)
+ else
+ fun_l14_n711(x)
+ end
+end
+
+def fun_l13_n824(x)
+ if (x < 1)
+ fun_l14_n421(x)
+ else
+ fun_l14_n191(x)
+ end
+end
+
+def fun_l13_n825(x)
+ if (x < 1)
+ fun_l14_n598(x)
+ else
+ fun_l14_n547(x)
+ end
+end
+
+def fun_l13_n826(x)
+ if (x < 1)
+ fun_l14_n131(x)
+ else
+ fun_l14_n29(x)
+ end
+end
+
+def fun_l13_n827(x)
+ if (x < 1)
+ fun_l14_n19(x)
+ else
+ fun_l14_n213(x)
+ end
+end
+
+def fun_l13_n828(x)
+ if (x < 1)
+ fun_l14_n202(x)
+ else
+ fun_l14_n195(x)
+ end
+end
+
+def fun_l13_n829(x)
+ if (x < 1)
+ fun_l14_n133(x)
+ else
+ fun_l14_n949(x)
+ end
+end
+
+def fun_l13_n830(x)
+ if (x < 1)
+ fun_l14_n402(x)
+ else
+ fun_l14_n762(x)
+ end
+end
+
+def fun_l13_n831(x)
+ if (x < 1)
+ fun_l14_n233(x)
+ else
+ fun_l14_n984(x)
+ end
+end
+
+def fun_l13_n832(x)
+ if (x < 1)
+ fun_l14_n309(x)
+ else
+ fun_l14_n545(x)
+ end
+end
+
+def fun_l13_n833(x)
+ if (x < 1)
+ fun_l14_n160(x)
+ else
+ fun_l14_n434(x)
+ end
+end
+
+def fun_l13_n834(x)
+ if (x < 1)
+ fun_l14_n909(x)
+ else
+ fun_l14_n681(x)
+ end
+end
+
+def fun_l13_n835(x)
+ if (x < 1)
+ fun_l14_n747(x)
+ else
+ fun_l14_n813(x)
+ end
+end
+
+def fun_l13_n836(x)
+ if (x < 1)
+ fun_l14_n338(x)
+ else
+ fun_l14_n592(x)
+ end
+end
+
+def fun_l13_n837(x)
+ if (x < 1)
+ fun_l14_n707(x)
+ else
+ fun_l14_n587(x)
+ end
+end
+
+def fun_l13_n838(x)
+ if (x < 1)
+ fun_l14_n655(x)
+ else
+ fun_l14_n207(x)
+ end
+end
+
+def fun_l13_n839(x)
+ if (x < 1)
+ fun_l14_n231(x)
+ else
+ fun_l14_n459(x)
+ end
+end
+
+def fun_l13_n840(x)
+ if (x < 1)
+ fun_l14_n351(x)
+ else
+ fun_l14_n228(x)
+ end
+end
+
+def fun_l13_n841(x)
+ if (x < 1)
+ fun_l14_n205(x)
+ else
+ fun_l14_n628(x)
+ end
+end
+
+def fun_l13_n842(x)
+ if (x < 1)
+ fun_l14_n725(x)
+ else
+ fun_l14_n246(x)
+ end
+end
+
+def fun_l13_n843(x)
+ if (x < 1)
+ fun_l14_n297(x)
+ else
+ fun_l14_n891(x)
+ end
+end
+
+def fun_l13_n844(x)
+ if (x < 1)
+ fun_l14_n598(x)
+ else
+ fun_l14_n168(x)
+ end
+end
+
+def fun_l13_n845(x)
+ if (x < 1)
+ fun_l14_n101(x)
+ else
+ fun_l14_n681(x)
+ end
+end
+
+def fun_l13_n846(x)
+ if (x < 1)
+ fun_l14_n162(x)
+ else
+ fun_l14_n270(x)
+ end
+end
+
+def fun_l13_n847(x)
+ if (x < 1)
+ fun_l14_n84(x)
+ else
+ fun_l14_n957(x)
+ end
+end
+
+def fun_l13_n848(x)
+ if (x < 1)
+ fun_l14_n16(x)
+ else
+ fun_l14_n708(x)
+ end
+end
+
+def fun_l13_n849(x)
+ if (x < 1)
+ fun_l14_n636(x)
+ else
+ fun_l14_n518(x)
+ end
+end
+
+def fun_l13_n850(x)
+ if (x < 1)
+ fun_l14_n379(x)
+ else
+ fun_l14_n595(x)
+ end
+end
+
+def fun_l13_n851(x)
+ if (x < 1)
+ fun_l14_n258(x)
+ else
+ fun_l14_n757(x)
+ end
+end
+
+def fun_l13_n852(x)
+ if (x < 1)
+ fun_l14_n995(x)
+ else
+ fun_l14_n380(x)
+ end
+end
+
+def fun_l13_n853(x)
+ if (x < 1)
+ fun_l14_n505(x)
+ else
+ fun_l14_n934(x)
+ end
+end
+
+def fun_l13_n854(x)
+ if (x < 1)
+ fun_l14_n268(x)
+ else
+ fun_l14_n36(x)
+ end
+end
+
+def fun_l13_n855(x)
+ if (x < 1)
+ fun_l14_n795(x)
+ else
+ fun_l14_n905(x)
+ end
+end
+
+def fun_l13_n856(x)
+ if (x < 1)
+ fun_l14_n136(x)
+ else
+ fun_l14_n750(x)
+ end
+end
+
+def fun_l13_n857(x)
+ if (x < 1)
+ fun_l14_n120(x)
+ else
+ fun_l14_n156(x)
+ end
+end
+
+def fun_l13_n858(x)
+ if (x < 1)
+ fun_l14_n157(x)
+ else
+ fun_l14_n414(x)
+ end
+end
+
+def fun_l13_n859(x)
+ if (x < 1)
+ fun_l14_n926(x)
+ else
+ fun_l14_n718(x)
+ end
+end
+
+def fun_l13_n860(x)
+ if (x < 1)
+ fun_l14_n904(x)
+ else
+ fun_l14_n821(x)
+ end
+end
+
+def fun_l13_n861(x)
+ if (x < 1)
+ fun_l14_n887(x)
+ else
+ fun_l14_n407(x)
+ end
+end
+
+def fun_l13_n862(x)
+ if (x < 1)
+ fun_l14_n870(x)
+ else
+ fun_l14_n950(x)
+ end
+end
+
+def fun_l13_n863(x)
+ if (x < 1)
+ fun_l14_n267(x)
+ else
+ fun_l14_n712(x)
+ end
+end
+
+def fun_l13_n864(x)
+ if (x < 1)
+ fun_l14_n409(x)
+ else
+ fun_l14_n309(x)
+ end
+end
+
+def fun_l13_n865(x)
+ if (x < 1)
+ fun_l14_n345(x)
+ else
+ fun_l14_n110(x)
+ end
+end
+
+def fun_l13_n866(x)
+ if (x < 1)
+ fun_l14_n401(x)
+ else
+ fun_l14_n970(x)
+ end
+end
+
+def fun_l13_n867(x)
+ if (x < 1)
+ fun_l14_n814(x)
+ else
+ fun_l14_n260(x)
+ end
+end
+
+def fun_l13_n868(x)
+ if (x < 1)
+ fun_l14_n490(x)
+ else
+ fun_l14_n31(x)
+ end
+end
+
+def fun_l13_n869(x)
+ if (x < 1)
+ fun_l14_n214(x)
+ else
+ fun_l14_n425(x)
+ end
+end
+
+def fun_l13_n870(x)
+ if (x < 1)
+ fun_l14_n660(x)
+ else
+ fun_l14_n703(x)
+ end
+end
+
+def fun_l13_n871(x)
+ if (x < 1)
+ fun_l14_n650(x)
+ else
+ fun_l14_n257(x)
+ end
+end
+
+def fun_l13_n872(x)
+ if (x < 1)
+ fun_l14_n701(x)
+ else
+ fun_l14_n55(x)
+ end
+end
+
+def fun_l13_n873(x)
+ if (x < 1)
+ fun_l14_n225(x)
+ else
+ fun_l14_n701(x)
+ end
+end
+
+def fun_l13_n874(x)
+ if (x < 1)
+ fun_l14_n525(x)
+ else
+ fun_l14_n793(x)
+ end
+end
+
+def fun_l13_n875(x)
+ if (x < 1)
+ fun_l14_n87(x)
+ else
+ fun_l14_n807(x)
+ end
+end
+
+def fun_l13_n876(x)
+ if (x < 1)
+ fun_l14_n24(x)
+ else
+ fun_l14_n15(x)
+ end
+end
+
+def fun_l13_n877(x)
+ if (x < 1)
+ fun_l14_n120(x)
+ else
+ fun_l14_n551(x)
+ end
+end
+
+def fun_l13_n878(x)
+ if (x < 1)
+ fun_l14_n703(x)
+ else
+ fun_l14_n67(x)
+ end
+end
+
+def fun_l13_n879(x)
+ if (x < 1)
+ fun_l14_n496(x)
+ else
+ fun_l14_n197(x)
+ end
+end
+
+def fun_l13_n880(x)
+ if (x < 1)
+ fun_l14_n369(x)
+ else
+ fun_l14_n834(x)
+ end
+end
+
+def fun_l13_n881(x)
+ if (x < 1)
+ fun_l14_n892(x)
+ else
+ fun_l14_n210(x)
+ end
+end
+
+def fun_l13_n882(x)
+ if (x < 1)
+ fun_l14_n587(x)
+ else
+ fun_l14_n472(x)
+ end
+end
+
+def fun_l13_n883(x)
+ if (x < 1)
+ fun_l14_n1(x)
+ else
+ fun_l14_n778(x)
+ end
+end
+
+def fun_l13_n884(x)
+ if (x < 1)
+ fun_l14_n762(x)
+ else
+ fun_l14_n286(x)
+ end
+end
+
+def fun_l13_n885(x)
+ if (x < 1)
+ fun_l14_n36(x)
+ else
+ fun_l14_n326(x)
+ end
+end
+
+def fun_l13_n886(x)
+ if (x < 1)
+ fun_l14_n857(x)
+ else
+ fun_l14_n564(x)
+ end
+end
+
+def fun_l13_n887(x)
+ if (x < 1)
+ fun_l14_n461(x)
+ else
+ fun_l14_n415(x)
+ end
+end
+
+def fun_l13_n888(x)
+ if (x < 1)
+ fun_l14_n225(x)
+ else
+ fun_l14_n783(x)
+ end
+end
+
+def fun_l13_n889(x)
+ if (x < 1)
+ fun_l14_n10(x)
+ else
+ fun_l14_n114(x)
+ end
+end
+
+def fun_l13_n890(x)
+ if (x < 1)
+ fun_l14_n670(x)
+ else
+ fun_l14_n473(x)
+ end
+end
+
+def fun_l13_n891(x)
+ if (x < 1)
+ fun_l14_n777(x)
+ else
+ fun_l14_n98(x)
+ end
+end
+
+def fun_l13_n892(x)
+ if (x < 1)
+ fun_l14_n600(x)
+ else
+ fun_l14_n808(x)
+ end
+end
+
+def fun_l13_n893(x)
+ if (x < 1)
+ fun_l14_n605(x)
+ else
+ fun_l14_n687(x)
+ end
+end
+
+def fun_l13_n894(x)
+ if (x < 1)
+ fun_l14_n29(x)
+ else
+ fun_l14_n190(x)
+ end
+end
+
+def fun_l13_n895(x)
+ if (x < 1)
+ fun_l14_n26(x)
+ else
+ fun_l14_n887(x)
+ end
+end
+
+def fun_l13_n896(x)
+ if (x < 1)
+ fun_l14_n680(x)
+ else
+ fun_l14_n413(x)
+ end
+end
+
+def fun_l13_n897(x)
+ if (x < 1)
+ fun_l14_n634(x)
+ else
+ fun_l14_n184(x)
+ end
+end
+
+def fun_l13_n898(x)
+ if (x < 1)
+ fun_l14_n420(x)
+ else
+ fun_l14_n603(x)
+ end
+end
+
+def fun_l13_n899(x)
+ if (x < 1)
+ fun_l14_n702(x)
+ else
+ fun_l14_n54(x)
+ end
+end
+
+def fun_l13_n900(x)
+ if (x < 1)
+ fun_l14_n620(x)
+ else
+ fun_l14_n849(x)
+ end
+end
+
+def fun_l13_n901(x)
+ if (x < 1)
+ fun_l14_n848(x)
+ else
+ fun_l14_n384(x)
+ end
+end
+
+def fun_l13_n902(x)
+ if (x < 1)
+ fun_l14_n726(x)
+ else
+ fun_l14_n624(x)
+ end
+end
+
+def fun_l13_n903(x)
+ if (x < 1)
+ fun_l14_n663(x)
+ else
+ fun_l14_n395(x)
+ end
+end
+
+def fun_l13_n904(x)
+ if (x < 1)
+ fun_l14_n803(x)
+ else
+ fun_l14_n979(x)
+ end
+end
+
+def fun_l13_n905(x)
+ if (x < 1)
+ fun_l14_n487(x)
+ else
+ fun_l14_n530(x)
+ end
+end
+
+def fun_l13_n906(x)
+ if (x < 1)
+ fun_l14_n737(x)
+ else
+ fun_l14_n679(x)
+ end
+end
+
+def fun_l13_n907(x)
+ if (x < 1)
+ fun_l14_n815(x)
+ else
+ fun_l14_n84(x)
+ end
+end
+
+def fun_l13_n908(x)
+ if (x < 1)
+ fun_l14_n116(x)
+ else
+ fun_l14_n820(x)
+ end
+end
+
+def fun_l13_n909(x)
+ if (x < 1)
+ fun_l14_n353(x)
+ else
+ fun_l14_n949(x)
+ end
+end
+
+def fun_l13_n910(x)
+ if (x < 1)
+ fun_l14_n271(x)
+ else
+ fun_l14_n168(x)
+ end
+end
+
+def fun_l13_n911(x)
+ if (x < 1)
+ fun_l14_n54(x)
+ else
+ fun_l14_n236(x)
+ end
+end
+
+def fun_l13_n912(x)
+ if (x < 1)
+ fun_l14_n391(x)
+ else
+ fun_l14_n152(x)
+ end
+end
+
+def fun_l13_n913(x)
+ if (x < 1)
+ fun_l14_n450(x)
+ else
+ fun_l14_n521(x)
+ end
+end
+
+def fun_l13_n914(x)
+ if (x < 1)
+ fun_l14_n36(x)
+ else
+ fun_l14_n995(x)
+ end
+end
+
+def fun_l13_n915(x)
+ if (x < 1)
+ fun_l14_n177(x)
+ else
+ fun_l14_n358(x)
+ end
+end
+
+def fun_l13_n916(x)
+ if (x < 1)
+ fun_l14_n36(x)
+ else
+ fun_l14_n32(x)
+ end
+end
+
+def fun_l13_n917(x)
+ if (x < 1)
+ fun_l14_n970(x)
+ else
+ fun_l14_n957(x)
+ end
+end
+
+def fun_l13_n918(x)
+ if (x < 1)
+ fun_l14_n229(x)
+ else
+ fun_l14_n138(x)
+ end
+end
+
+def fun_l13_n919(x)
+ if (x < 1)
+ fun_l14_n439(x)
+ else
+ fun_l14_n641(x)
+ end
+end
+
+def fun_l13_n920(x)
+ if (x < 1)
+ fun_l14_n318(x)
+ else
+ fun_l14_n649(x)
+ end
+end
+
+def fun_l13_n921(x)
+ if (x < 1)
+ fun_l14_n455(x)
+ else
+ fun_l14_n312(x)
+ end
+end
+
+def fun_l13_n922(x)
+ if (x < 1)
+ fun_l14_n15(x)
+ else
+ fun_l14_n825(x)
+ end
+end
+
+def fun_l13_n923(x)
+ if (x < 1)
+ fun_l14_n546(x)
+ else
+ fun_l14_n629(x)
+ end
+end
+
+def fun_l13_n924(x)
+ if (x < 1)
+ fun_l14_n298(x)
+ else
+ fun_l14_n563(x)
+ end
+end
+
+def fun_l13_n925(x)
+ if (x < 1)
+ fun_l14_n312(x)
+ else
+ fun_l14_n736(x)
+ end
+end
+
+def fun_l13_n926(x)
+ if (x < 1)
+ fun_l14_n767(x)
+ else
+ fun_l14_n107(x)
+ end
+end
+
+def fun_l13_n927(x)
+ if (x < 1)
+ fun_l14_n966(x)
+ else
+ fun_l14_n765(x)
+ end
+end
+
+def fun_l13_n928(x)
+ if (x < 1)
+ fun_l14_n545(x)
+ else
+ fun_l14_n383(x)
+ end
+end
+
+def fun_l13_n929(x)
+ if (x < 1)
+ fun_l14_n389(x)
+ else
+ fun_l14_n48(x)
+ end
+end
+
+def fun_l13_n930(x)
+ if (x < 1)
+ fun_l14_n142(x)
+ else
+ fun_l14_n632(x)
+ end
+end
+
+def fun_l13_n931(x)
+ if (x < 1)
+ fun_l14_n146(x)
+ else
+ fun_l14_n275(x)
+ end
+end
+
+def fun_l13_n932(x)
+ if (x < 1)
+ fun_l14_n754(x)
+ else
+ fun_l14_n380(x)
+ end
+end
+
+def fun_l13_n933(x)
+ if (x < 1)
+ fun_l14_n561(x)
+ else
+ fun_l14_n677(x)
+ end
+end
+
+def fun_l13_n934(x)
+ if (x < 1)
+ fun_l14_n253(x)
+ else
+ fun_l14_n86(x)
+ end
+end
+
+def fun_l13_n935(x)
+ if (x < 1)
+ fun_l14_n528(x)
+ else
+ fun_l14_n177(x)
+ end
+end
+
+def fun_l13_n936(x)
+ if (x < 1)
+ fun_l14_n938(x)
+ else
+ fun_l14_n265(x)
+ end
+end
+
+def fun_l13_n937(x)
+ if (x < 1)
+ fun_l14_n763(x)
+ else
+ fun_l14_n662(x)
+ end
+end
+
+def fun_l13_n938(x)
+ if (x < 1)
+ fun_l14_n836(x)
+ else
+ fun_l14_n734(x)
+ end
+end
+
+def fun_l13_n939(x)
+ if (x < 1)
+ fun_l14_n127(x)
+ else
+ fun_l14_n111(x)
+ end
+end
+
+def fun_l13_n940(x)
+ if (x < 1)
+ fun_l14_n356(x)
+ else
+ fun_l14_n544(x)
+ end
+end
+
+def fun_l13_n941(x)
+ if (x < 1)
+ fun_l14_n525(x)
+ else
+ fun_l14_n762(x)
+ end
+end
+
+def fun_l13_n942(x)
+ if (x < 1)
+ fun_l14_n333(x)
+ else
+ fun_l14_n639(x)
+ end
+end
+
+def fun_l13_n943(x)
+ if (x < 1)
+ fun_l14_n452(x)
+ else
+ fun_l14_n944(x)
+ end
+end
+
+def fun_l13_n944(x)
+ if (x < 1)
+ fun_l14_n827(x)
+ else
+ fun_l14_n961(x)
+ end
+end
+
+def fun_l13_n945(x)
+ if (x < 1)
+ fun_l14_n991(x)
+ else
+ fun_l14_n431(x)
+ end
+end
+
+def fun_l13_n946(x)
+ if (x < 1)
+ fun_l14_n646(x)
+ else
+ fun_l14_n183(x)
+ end
+end
+
+def fun_l13_n947(x)
+ if (x < 1)
+ fun_l14_n107(x)
+ else
+ fun_l14_n273(x)
+ end
+end
+
+def fun_l13_n948(x)
+ if (x < 1)
+ fun_l14_n210(x)
+ else
+ fun_l14_n664(x)
+ end
+end
+
+def fun_l13_n949(x)
+ if (x < 1)
+ fun_l14_n542(x)
+ else
+ fun_l14_n462(x)
+ end
+end
+
+def fun_l13_n950(x)
+ if (x < 1)
+ fun_l14_n891(x)
+ else
+ fun_l14_n486(x)
+ end
+end
+
+def fun_l13_n951(x)
+ if (x < 1)
+ fun_l14_n527(x)
+ else
+ fun_l14_n721(x)
+ end
+end
+
+def fun_l13_n952(x)
+ if (x < 1)
+ fun_l14_n745(x)
+ else
+ fun_l14_n11(x)
+ end
+end
+
+def fun_l13_n953(x)
+ if (x < 1)
+ fun_l14_n427(x)
+ else
+ fun_l14_n521(x)
+ end
+end
+
+def fun_l13_n954(x)
+ if (x < 1)
+ fun_l14_n907(x)
+ else
+ fun_l14_n878(x)
+ end
+end
+
+def fun_l13_n955(x)
+ if (x < 1)
+ fun_l14_n818(x)
+ else
+ fun_l14_n722(x)
+ end
+end
+
+def fun_l13_n956(x)
+ if (x < 1)
+ fun_l14_n567(x)
+ else
+ fun_l14_n71(x)
+ end
+end
+
+def fun_l13_n957(x)
+ if (x < 1)
+ fun_l14_n203(x)
+ else
+ fun_l14_n221(x)
+ end
+end
+
+def fun_l13_n958(x)
+ if (x < 1)
+ fun_l14_n173(x)
+ else
+ fun_l14_n854(x)
+ end
+end
+
+def fun_l13_n959(x)
+ if (x < 1)
+ fun_l14_n201(x)
+ else
+ fun_l14_n930(x)
+ end
+end
+
+def fun_l13_n960(x)
+ if (x < 1)
+ fun_l14_n736(x)
+ else
+ fun_l14_n539(x)
+ end
+end
+
+def fun_l13_n961(x)
+ if (x < 1)
+ fun_l14_n459(x)
+ else
+ fun_l14_n771(x)
+ end
+end
+
+def fun_l13_n962(x)
+ if (x < 1)
+ fun_l14_n682(x)
+ else
+ fun_l14_n19(x)
+ end
+end
+
+def fun_l13_n963(x)
+ if (x < 1)
+ fun_l14_n897(x)
+ else
+ fun_l14_n650(x)
+ end
+end
+
+def fun_l13_n964(x)
+ if (x < 1)
+ fun_l14_n814(x)
+ else
+ fun_l14_n726(x)
+ end
+end
+
+def fun_l13_n965(x)
+ if (x < 1)
+ fun_l14_n31(x)
+ else
+ fun_l14_n211(x)
+ end
+end
+
+def fun_l13_n966(x)
+ if (x < 1)
+ fun_l14_n89(x)
+ else
+ fun_l14_n407(x)
+ end
+end
+
+def fun_l13_n967(x)
+ if (x < 1)
+ fun_l14_n772(x)
+ else
+ fun_l14_n7(x)
+ end
+end
+
+def fun_l13_n968(x)
+ if (x < 1)
+ fun_l14_n764(x)
+ else
+ fun_l14_n523(x)
+ end
+end
+
+def fun_l13_n969(x)
+ if (x < 1)
+ fun_l14_n680(x)
+ else
+ fun_l14_n674(x)
+ end
+end
+
+def fun_l13_n970(x)
+ if (x < 1)
+ fun_l14_n517(x)
+ else
+ fun_l14_n346(x)
+ end
+end
+
+def fun_l13_n971(x)
+ if (x < 1)
+ fun_l14_n136(x)
+ else
+ fun_l14_n921(x)
+ end
+end
+
+def fun_l13_n972(x)
+ if (x < 1)
+ fun_l14_n400(x)
+ else
+ fun_l14_n901(x)
+ end
+end
+
+def fun_l13_n973(x)
+ if (x < 1)
+ fun_l14_n62(x)
+ else
+ fun_l14_n784(x)
+ end
+end
+
+def fun_l13_n974(x)
+ if (x < 1)
+ fun_l14_n411(x)
+ else
+ fun_l14_n889(x)
+ end
+end
+
+def fun_l13_n975(x)
+ if (x < 1)
+ fun_l14_n291(x)
+ else
+ fun_l14_n198(x)
+ end
+end
+
+def fun_l13_n976(x)
+ if (x < 1)
+ fun_l14_n229(x)
+ else
+ fun_l14_n346(x)
+ end
+end
+
+def fun_l13_n977(x)
+ if (x < 1)
+ fun_l14_n769(x)
+ else
+ fun_l14_n381(x)
+ end
+end
+
+def fun_l13_n978(x)
+ if (x < 1)
+ fun_l14_n430(x)
+ else
+ fun_l14_n205(x)
+ end
+end
+
+def fun_l13_n979(x)
+ if (x < 1)
+ fun_l14_n170(x)
+ else
+ fun_l14_n927(x)
+ end
+end
+
+def fun_l13_n980(x)
+ if (x < 1)
+ fun_l14_n12(x)
+ else
+ fun_l14_n605(x)
+ end
+end
+
+def fun_l13_n981(x)
+ if (x < 1)
+ fun_l14_n613(x)
+ else
+ fun_l14_n912(x)
+ end
+end
+
+def fun_l13_n982(x)
+ if (x < 1)
+ fun_l14_n982(x)
+ else
+ fun_l14_n707(x)
+ end
+end
+
+def fun_l13_n983(x)
+ if (x < 1)
+ fun_l14_n230(x)
+ else
+ fun_l14_n239(x)
+ end
+end
+
+def fun_l13_n984(x)
+ if (x < 1)
+ fun_l14_n55(x)
+ else
+ fun_l14_n337(x)
+ end
+end
+
+def fun_l13_n985(x)
+ if (x < 1)
+ fun_l14_n853(x)
+ else
+ fun_l14_n425(x)
+ end
+end
+
+def fun_l13_n986(x)
+ if (x < 1)
+ fun_l14_n14(x)
+ else
+ fun_l14_n921(x)
+ end
+end
+
+def fun_l13_n987(x)
+ if (x < 1)
+ fun_l14_n166(x)
+ else
+ fun_l14_n948(x)
+ end
+end
+
+def fun_l13_n988(x)
+ if (x < 1)
+ fun_l14_n752(x)
+ else
+ fun_l14_n226(x)
+ end
+end
+
+def fun_l13_n989(x)
+ if (x < 1)
+ fun_l14_n730(x)
+ else
+ fun_l14_n671(x)
+ end
+end
+
+def fun_l13_n990(x)
+ if (x < 1)
+ fun_l14_n603(x)
+ else
+ fun_l14_n903(x)
+ end
+end
+
+def fun_l13_n991(x)
+ if (x < 1)
+ fun_l14_n598(x)
+ else
+ fun_l14_n842(x)
+ end
+end
+
+def fun_l13_n992(x)
+ if (x < 1)
+ fun_l14_n230(x)
+ else
+ fun_l14_n704(x)
+ end
+end
+
+def fun_l13_n993(x)
+ if (x < 1)
+ fun_l14_n897(x)
+ else
+ fun_l14_n190(x)
+ end
+end
+
+def fun_l13_n994(x)
+ if (x < 1)
+ fun_l14_n640(x)
+ else
+ fun_l14_n622(x)
+ end
+end
+
+def fun_l13_n995(x)
+ if (x < 1)
+ fun_l14_n988(x)
+ else
+ fun_l14_n471(x)
+ end
+end
+
+def fun_l13_n996(x)
+ if (x < 1)
+ fun_l14_n721(x)
+ else
+ fun_l14_n672(x)
+ end
+end
+
+def fun_l13_n997(x)
+ if (x < 1)
+ fun_l14_n425(x)
+ else
+ fun_l14_n885(x)
+ end
+end
+
+def fun_l13_n998(x)
+ if (x < 1)
+ fun_l14_n279(x)
+ else
+ fun_l14_n966(x)
+ end
+end
+
+def fun_l13_n999(x)
+ if (x < 1)
+ fun_l14_n610(x)
+ else
+ fun_l14_n319(x)
+ end
+end
+
+def fun_l14_n0(x)
+ if (x < 1)
+ fun_l15_n46(x)
+ else
+ fun_l15_n966(x)
+ end
+end
+
+def fun_l14_n1(x)
+ if (x < 1)
+ fun_l15_n360(x)
+ else
+ fun_l15_n637(x)
+ end
+end
+
+def fun_l14_n2(x)
+ if (x < 1)
+ fun_l15_n381(x)
+ else
+ fun_l15_n728(x)
+ end
+end
+
+def fun_l14_n3(x)
+ if (x < 1)
+ fun_l15_n189(x)
+ else
+ fun_l15_n826(x)
+ end
+end
+
+def fun_l14_n4(x)
+ if (x < 1)
+ fun_l15_n789(x)
+ else
+ fun_l15_n157(x)
+ end
+end
+
+def fun_l14_n5(x)
+ if (x < 1)
+ fun_l15_n132(x)
+ else
+ fun_l15_n703(x)
+ end
+end
+
+def fun_l14_n6(x)
+ if (x < 1)
+ fun_l15_n64(x)
+ else
+ fun_l15_n537(x)
+ end
+end
+
+def fun_l14_n7(x)
+ if (x < 1)
+ fun_l15_n423(x)
+ else
+ fun_l15_n162(x)
+ end
+end
+
+def fun_l14_n8(x)
+ if (x < 1)
+ fun_l15_n177(x)
+ else
+ fun_l15_n923(x)
+ end
+end
+
+def fun_l14_n9(x)
+ if (x < 1)
+ fun_l15_n508(x)
+ else
+ fun_l15_n135(x)
+ end
+end
+
+def fun_l14_n10(x)
+ if (x < 1)
+ fun_l15_n640(x)
+ else
+ fun_l15_n869(x)
+ end
+end
+
+def fun_l14_n11(x)
+ if (x < 1)
+ fun_l15_n592(x)
+ else
+ fun_l15_n519(x)
+ end
+end
+
+def fun_l14_n12(x)
+ if (x < 1)
+ fun_l15_n332(x)
+ else
+ fun_l15_n263(x)
+ end
+end
+
+def fun_l14_n13(x)
+ if (x < 1)
+ fun_l15_n644(x)
+ else
+ fun_l15_n21(x)
+ end
+end
+
+def fun_l14_n14(x)
+ if (x < 1)
+ fun_l15_n436(x)
+ else
+ fun_l15_n566(x)
+ end
+end
+
+def fun_l14_n15(x)
+ if (x < 1)
+ fun_l15_n160(x)
+ else
+ fun_l15_n291(x)
+ end
+end
+
+def fun_l14_n16(x)
+ if (x < 1)
+ fun_l15_n726(x)
+ else
+ fun_l15_n704(x)
+ end
+end
+
+def fun_l14_n17(x)
+ if (x < 1)
+ fun_l15_n237(x)
+ else
+ fun_l15_n962(x)
+ end
+end
+
+def fun_l14_n18(x)
+ if (x < 1)
+ fun_l15_n941(x)
+ else
+ fun_l15_n217(x)
+ end
+end
+
+def fun_l14_n19(x)
+ if (x < 1)
+ fun_l15_n904(x)
+ else
+ fun_l15_n36(x)
+ end
+end
+
+def fun_l14_n20(x)
+ if (x < 1)
+ fun_l15_n74(x)
+ else
+ fun_l15_n790(x)
+ end
+end
+
+def fun_l14_n21(x)
+ if (x < 1)
+ fun_l15_n694(x)
+ else
+ fun_l15_n298(x)
+ end
+end
+
+def fun_l14_n22(x)
+ if (x < 1)
+ fun_l15_n757(x)
+ else
+ fun_l15_n636(x)
+ end
+end
+
+def fun_l14_n23(x)
+ if (x < 1)
+ fun_l15_n989(x)
+ else
+ fun_l15_n508(x)
+ end
+end
+
+def fun_l14_n24(x)
+ if (x < 1)
+ fun_l15_n80(x)
+ else
+ fun_l15_n686(x)
+ end
+end
+
+def fun_l14_n25(x)
+ if (x < 1)
+ fun_l15_n365(x)
+ else
+ fun_l15_n922(x)
+ end
+end
+
+def fun_l14_n26(x)
+ if (x < 1)
+ fun_l15_n922(x)
+ else
+ fun_l15_n207(x)
+ end
+end
+
+def fun_l14_n27(x)
+ if (x < 1)
+ fun_l15_n406(x)
+ else
+ fun_l15_n481(x)
+ end
+end
+
+def fun_l14_n28(x)
+ if (x < 1)
+ fun_l15_n986(x)
+ else
+ fun_l15_n181(x)
+ end
+end
+
+def fun_l14_n29(x)
+ if (x < 1)
+ fun_l15_n958(x)
+ else
+ fun_l15_n804(x)
+ end
+end
+
+def fun_l14_n30(x)
+ if (x < 1)
+ fun_l15_n233(x)
+ else
+ fun_l15_n877(x)
+ end
+end
+
+def fun_l14_n31(x)
+ if (x < 1)
+ fun_l15_n648(x)
+ else
+ fun_l15_n547(x)
+ end
+end
+
+def fun_l14_n32(x)
+ if (x < 1)
+ fun_l15_n641(x)
+ else
+ fun_l15_n628(x)
+ end
+end
+
+def fun_l14_n33(x)
+ if (x < 1)
+ fun_l15_n351(x)
+ else
+ fun_l15_n280(x)
+ end
+end
+
+def fun_l14_n34(x)
+ if (x < 1)
+ fun_l15_n373(x)
+ else
+ fun_l15_n948(x)
+ end
+end
+
+def fun_l14_n35(x)
+ if (x < 1)
+ fun_l15_n761(x)
+ else
+ fun_l15_n384(x)
+ end
+end
+
+def fun_l14_n36(x)
+ if (x < 1)
+ fun_l15_n75(x)
+ else
+ fun_l15_n581(x)
+ end
+end
+
+def fun_l14_n37(x)
+ if (x < 1)
+ fun_l15_n962(x)
+ else
+ fun_l15_n723(x)
+ end
+end
+
+def fun_l14_n38(x)
+ if (x < 1)
+ fun_l15_n422(x)
+ else
+ fun_l15_n953(x)
+ end
+end
+
+def fun_l14_n39(x)
+ if (x < 1)
+ fun_l15_n123(x)
+ else
+ fun_l15_n989(x)
+ end
+end
+
+def fun_l14_n40(x)
+ if (x < 1)
+ fun_l15_n789(x)
+ else
+ fun_l15_n472(x)
+ end
+end
+
+def fun_l14_n41(x)
+ if (x < 1)
+ fun_l15_n261(x)
+ else
+ fun_l15_n997(x)
+ end
+end
+
+def fun_l14_n42(x)
+ if (x < 1)
+ fun_l15_n231(x)
+ else
+ fun_l15_n703(x)
+ end
+end
+
+def fun_l14_n43(x)
+ if (x < 1)
+ fun_l15_n520(x)
+ else
+ fun_l15_n252(x)
+ end
+end
+
+def fun_l14_n44(x)
+ if (x < 1)
+ fun_l15_n966(x)
+ else
+ fun_l15_n244(x)
+ end
+end
+
+def fun_l14_n45(x)
+ if (x < 1)
+ fun_l15_n192(x)
+ else
+ fun_l15_n280(x)
+ end
+end
+
+def fun_l14_n46(x)
+ if (x < 1)
+ fun_l15_n422(x)
+ else
+ fun_l15_n847(x)
+ end
+end
+
+def fun_l14_n47(x)
+ if (x < 1)
+ fun_l15_n228(x)
+ else
+ fun_l15_n564(x)
+ end
+end
+
+def fun_l14_n48(x)
+ if (x < 1)
+ fun_l15_n263(x)
+ else
+ fun_l15_n226(x)
+ end
+end
+
+def fun_l14_n49(x)
+ if (x < 1)
+ fun_l15_n440(x)
+ else
+ fun_l15_n592(x)
+ end
+end
+
+def fun_l14_n50(x)
+ if (x < 1)
+ fun_l15_n464(x)
+ else
+ fun_l15_n135(x)
+ end
+end
+
+def fun_l14_n51(x)
+ if (x < 1)
+ fun_l15_n903(x)
+ else
+ fun_l15_n821(x)
+ end
+end
+
+def fun_l14_n52(x)
+ if (x < 1)
+ fun_l15_n472(x)
+ else
+ fun_l15_n322(x)
+ end
+end
+
+def fun_l14_n53(x)
+ if (x < 1)
+ fun_l15_n107(x)
+ else
+ fun_l15_n497(x)
+ end
+end
+
+def fun_l14_n54(x)
+ if (x < 1)
+ fun_l15_n692(x)
+ else
+ fun_l15_n392(x)
+ end
+end
+
+def fun_l14_n55(x)
+ if (x < 1)
+ fun_l15_n694(x)
+ else
+ fun_l15_n995(x)
+ end
+end
+
+def fun_l14_n56(x)
+ if (x < 1)
+ fun_l15_n181(x)
+ else
+ fun_l15_n200(x)
+ end
+end
+
+def fun_l14_n57(x)
+ if (x < 1)
+ fun_l15_n721(x)
+ else
+ fun_l15_n849(x)
+ end
+end
+
+def fun_l14_n58(x)
+ if (x < 1)
+ fun_l15_n626(x)
+ else
+ fun_l15_n866(x)
+ end
+end
+
+def fun_l14_n59(x)
+ if (x < 1)
+ fun_l15_n689(x)
+ else
+ fun_l15_n387(x)
+ end
+end
+
+def fun_l14_n60(x)
+ if (x < 1)
+ fun_l15_n805(x)
+ else
+ fun_l15_n842(x)
+ end
+end
+
+def fun_l14_n61(x)
+ if (x < 1)
+ fun_l15_n457(x)
+ else
+ fun_l15_n472(x)
+ end
+end
+
+def fun_l14_n62(x)
+ if (x < 1)
+ fun_l15_n884(x)
+ else
+ fun_l15_n786(x)
+ end
+end
+
+def fun_l14_n63(x)
+ if (x < 1)
+ fun_l15_n509(x)
+ else
+ fun_l15_n106(x)
+ end
+end
+
+def fun_l14_n64(x)
+ if (x < 1)
+ fun_l15_n600(x)
+ else
+ fun_l15_n314(x)
+ end
+end
+
+def fun_l14_n65(x)
+ if (x < 1)
+ fun_l15_n761(x)
+ else
+ fun_l15_n362(x)
+ end
+end
+
+def fun_l14_n66(x)
+ if (x < 1)
+ fun_l15_n812(x)
+ else
+ fun_l15_n640(x)
+ end
+end
+
+def fun_l14_n67(x)
+ if (x < 1)
+ fun_l15_n862(x)
+ else
+ fun_l15_n627(x)
+ end
+end
+
+def fun_l14_n68(x)
+ if (x < 1)
+ fun_l15_n503(x)
+ else
+ fun_l15_n381(x)
+ end
+end
+
+def fun_l14_n69(x)
+ if (x < 1)
+ fun_l15_n482(x)
+ else
+ fun_l15_n851(x)
+ end
+end
+
+def fun_l14_n70(x)
+ if (x < 1)
+ fun_l15_n253(x)
+ else
+ fun_l15_n728(x)
+ end
+end
+
+def fun_l14_n71(x)
+ if (x < 1)
+ fun_l15_n195(x)
+ else
+ fun_l15_n537(x)
+ end
+end
+
+def fun_l14_n72(x)
+ if (x < 1)
+ fun_l15_n482(x)
+ else
+ fun_l15_n604(x)
+ end
+end
+
+def fun_l14_n73(x)
+ if (x < 1)
+ fun_l15_n373(x)
+ else
+ fun_l15_n502(x)
+ end
+end
+
+def fun_l14_n74(x)
+ if (x < 1)
+ fun_l15_n183(x)
+ else
+ fun_l15_n50(x)
+ end
+end
+
+def fun_l14_n75(x)
+ if (x < 1)
+ fun_l15_n397(x)
+ else
+ fun_l15_n467(x)
+ end
+end
+
+def fun_l14_n76(x)
+ if (x < 1)
+ fun_l15_n207(x)
+ else
+ fun_l15_n566(x)
+ end
+end
+
+def fun_l14_n77(x)
+ if (x < 1)
+ fun_l15_n416(x)
+ else
+ fun_l15_n846(x)
+ end
+end
+
+def fun_l14_n78(x)
+ if (x < 1)
+ fun_l15_n426(x)
+ else
+ fun_l15_n142(x)
+ end
+end
+
+def fun_l14_n79(x)
+ if (x < 1)
+ fun_l15_n234(x)
+ else
+ fun_l15_n5(x)
+ end
+end
+
+def fun_l14_n80(x)
+ if (x < 1)
+ fun_l15_n133(x)
+ else
+ fun_l15_n216(x)
+ end
+end
+
+def fun_l14_n81(x)
+ if (x < 1)
+ fun_l15_n23(x)
+ else
+ fun_l15_n126(x)
+ end
+end
+
+def fun_l14_n82(x)
+ if (x < 1)
+ fun_l15_n129(x)
+ else
+ fun_l15_n614(x)
+ end
+end
+
+def fun_l14_n83(x)
+ if (x < 1)
+ fun_l15_n560(x)
+ else
+ fun_l15_n559(x)
+ end
+end
+
+def fun_l14_n84(x)
+ if (x < 1)
+ fun_l15_n113(x)
+ else
+ fun_l15_n300(x)
+ end
+end
+
+def fun_l14_n85(x)
+ if (x < 1)
+ fun_l15_n584(x)
+ else
+ fun_l15_n249(x)
+ end
+end
+
+def fun_l14_n86(x)
+ if (x < 1)
+ fun_l15_n933(x)
+ else
+ fun_l15_n280(x)
+ end
+end
+
+def fun_l14_n87(x)
+ if (x < 1)
+ fun_l15_n528(x)
+ else
+ fun_l15_n350(x)
+ end
+end
+
+def fun_l14_n88(x)
+ if (x < 1)
+ fun_l15_n568(x)
+ else
+ fun_l15_n762(x)
+ end
+end
+
+def fun_l14_n89(x)
+ if (x < 1)
+ fun_l15_n190(x)
+ else
+ fun_l15_n858(x)
+ end
+end
+
+def fun_l14_n90(x)
+ if (x < 1)
+ fun_l15_n896(x)
+ else
+ fun_l15_n543(x)
+ end
+end
+
+def fun_l14_n91(x)
+ if (x < 1)
+ fun_l15_n937(x)
+ else
+ fun_l15_n593(x)
+ end
+end
+
+def fun_l14_n92(x)
+ if (x < 1)
+ fun_l15_n135(x)
+ else
+ fun_l15_n5(x)
+ end
+end
+
+def fun_l14_n93(x)
+ if (x < 1)
+ fun_l15_n351(x)
+ else
+ fun_l15_n779(x)
+ end
+end
+
+def fun_l14_n94(x)
+ if (x < 1)
+ fun_l15_n617(x)
+ else
+ fun_l15_n375(x)
+ end
+end
+
+def fun_l14_n95(x)
+ if (x < 1)
+ fun_l15_n111(x)
+ else
+ fun_l15_n870(x)
+ end
+end
+
+def fun_l14_n96(x)
+ if (x < 1)
+ fun_l15_n187(x)
+ else
+ fun_l15_n881(x)
+ end
+end
+
+def fun_l14_n97(x)
+ if (x < 1)
+ fun_l15_n150(x)
+ else
+ fun_l15_n98(x)
+ end
+end
+
+def fun_l14_n98(x)
+ if (x < 1)
+ fun_l15_n629(x)
+ else
+ fun_l15_n548(x)
+ end
+end
+
+def fun_l14_n99(x)
+ if (x < 1)
+ fun_l15_n37(x)
+ else
+ fun_l15_n383(x)
+ end
+end
+
+def fun_l14_n100(x)
+ if (x < 1)
+ fun_l15_n719(x)
+ else
+ fun_l15_n503(x)
+ end
+end
+
+def fun_l14_n101(x)
+ if (x < 1)
+ fun_l15_n415(x)
+ else
+ fun_l15_n650(x)
+ end
+end
+
+def fun_l14_n102(x)
+ if (x < 1)
+ fun_l15_n924(x)
+ else
+ fun_l15_n520(x)
+ end
+end
+
+def fun_l14_n103(x)
+ if (x < 1)
+ fun_l15_n194(x)
+ else
+ fun_l15_n613(x)
+ end
+end
+
+def fun_l14_n104(x)
+ if (x < 1)
+ fun_l15_n909(x)
+ else
+ fun_l15_n333(x)
+ end
+end
+
+def fun_l14_n105(x)
+ if (x < 1)
+ fun_l15_n586(x)
+ else
+ fun_l15_n2(x)
+ end
+end
+
+def fun_l14_n106(x)
+ if (x < 1)
+ fun_l15_n373(x)
+ else
+ fun_l15_n316(x)
+ end
+end
+
+def fun_l14_n107(x)
+ if (x < 1)
+ fun_l15_n737(x)
+ else
+ fun_l15_n469(x)
+ end
+end
+
+def fun_l14_n108(x)
+ if (x < 1)
+ fun_l15_n841(x)
+ else
+ fun_l15_n888(x)
+ end
+end
+
+def fun_l14_n109(x)
+ if (x < 1)
+ fun_l15_n165(x)
+ else
+ fun_l15_n108(x)
+ end
+end
+
+def fun_l14_n110(x)
+ if (x < 1)
+ fun_l15_n344(x)
+ else
+ fun_l15_n893(x)
+ end
+end
+
+def fun_l14_n111(x)
+ if (x < 1)
+ fun_l15_n424(x)
+ else
+ fun_l15_n702(x)
+ end
+end
+
+def fun_l14_n112(x)
+ if (x < 1)
+ fun_l15_n161(x)
+ else
+ fun_l15_n827(x)
+ end
+end
+
+def fun_l14_n113(x)
+ if (x < 1)
+ fun_l15_n982(x)
+ else
+ fun_l15_n172(x)
+ end
+end
+
+def fun_l14_n114(x)
+ if (x < 1)
+ fun_l15_n233(x)
+ else
+ fun_l15_n178(x)
+ end
+end
+
+def fun_l14_n115(x)
+ if (x < 1)
+ fun_l15_n130(x)
+ else
+ fun_l15_n266(x)
+ end
+end
+
+def fun_l14_n116(x)
+ if (x < 1)
+ fun_l15_n32(x)
+ else
+ fun_l15_n63(x)
+ end
+end
+
+def fun_l14_n117(x)
+ if (x < 1)
+ fun_l15_n117(x)
+ else
+ fun_l15_n659(x)
+ end
+end
+
+def fun_l14_n118(x)
+ if (x < 1)
+ fun_l15_n607(x)
+ else
+ fun_l15_n516(x)
+ end
+end
+
+def fun_l14_n119(x)
+ if (x < 1)
+ fun_l15_n30(x)
+ else
+ fun_l15_n130(x)
+ end
+end
+
+def fun_l14_n120(x)
+ if (x < 1)
+ fun_l15_n510(x)
+ else
+ fun_l15_n789(x)
+ end
+end
+
+def fun_l14_n121(x)
+ if (x < 1)
+ fun_l15_n906(x)
+ else
+ fun_l15_n700(x)
+ end
+end
+
+def fun_l14_n122(x)
+ if (x < 1)
+ fun_l15_n51(x)
+ else
+ fun_l15_n378(x)
+ end
+end
+
+def fun_l14_n123(x)
+ if (x < 1)
+ fun_l15_n243(x)
+ else
+ fun_l15_n896(x)
+ end
+end
+
+def fun_l14_n124(x)
+ if (x < 1)
+ fun_l15_n23(x)
+ else
+ fun_l15_n648(x)
+ end
+end
+
+def fun_l14_n125(x)
+ if (x < 1)
+ fun_l15_n290(x)
+ else
+ fun_l15_n604(x)
+ end
+end
+
+def fun_l14_n126(x)
+ if (x < 1)
+ fun_l15_n410(x)
+ else
+ fun_l15_n646(x)
+ end
+end
+
+def fun_l14_n127(x)
+ if (x < 1)
+ fun_l15_n162(x)
+ else
+ fun_l15_n43(x)
+ end
+end
+
+def fun_l14_n128(x)
+ if (x < 1)
+ fun_l15_n775(x)
+ else
+ fun_l15_n176(x)
+ end
+end
+
+def fun_l14_n129(x)
+ if (x < 1)
+ fun_l15_n642(x)
+ else
+ fun_l15_n709(x)
+ end
+end
+
+def fun_l14_n130(x)
+ if (x < 1)
+ fun_l15_n669(x)
+ else
+ fun_l15_n936(x)
+ end
+end
+
+def fun_l14_n131(x)
+ if (x < 1)
+ fun_l15_n301(x)
+ else
+ fun_l15_n578(x)
+ end
+end
+
+def fun_l14_n132(x)
+ if (x < 1)
+ fun_l15_n112(x)
+ else
+ fun_l15_n72(x)
+ end
+end
+
+def fun_l14_n133(x)
+ if (x < 1)
+ fun_l15_n293(x)
+ else
+ fun_l15_n516(x)
+ end
+end
+
+def fun_l14_n134(x)
+ if (x < 1)
+ fun_l15_n525(x)
+ else
+ fun_l15_n199(x)
+ end
+end
+
+def fun_l14_n135(x)
+ if (x < 1)
+ fun_l15_n168(x)
+ else
+ fun_l15_n430(x)
+ end
+end
+
+def fun_l14_n136(x)
+ if (x < 1)
+ fun_l15_n889(x)
+ else
+ fun_l15_n635(x)
+ end
+end
+
+def fun_l14_n137(x)
+ if (x < 1)
+ fun_l15_n348(x)
+ else
+ fun_l15_n445(x)
+ end
+end
+
+def fun_l14_n138(x)
+ if (x < 1)
+ fun_l15_n828(x)
+ else
+ fun_l15_n23(x)
+ end
+end
+
+def fun_l14_n139(x)
+ if (x < 1)
+ fun_l15_n621(x)
+ else
+ fun_l15_n25(x)
+ end
+end
+
+def fun_l14_n140(x)
+ if (x < 1)
+ fun_l15_n268(x)
+ else
+ fun_l15_n105(x)
+ end
+end
+
+def fun_l14_n141(x)
+ if (x < 1)
+ fun_l15_n296(x)
+ else
+ fun_l15_n856(x)
+ end
+end
+
+def fun_l14_n142(x)
+ if (x < 1)
+ fun_l15_n206(x)
+ else
+ fun_l15_n417(x)
+ end
+end
+
+def fun_l14_n143(x)
+ if (x < 1)
+ fun_l15_n203(x)
+ else
+ fun_l15_n240(x)
+ end
+end
+
+def fun_l14_n144(x)
+ if (x < 1)
+ fun_l15_n556(x)
+ else
+ fun_l15_n47(x)
+ end
+end
+
+def fun_l14_n145(x)
+ if (x < 1)
+ fun_l15_n340(x)
+ else
+ fun_l15_n511(x)
+ end
+end
+
+def fun_l14_n146(x)
+ if (x < 1)
+ fun_l15_n250(x)
+ else
+ fun_l15_n402(x)
+ end
+end
+
+def fun_l14_n147(x)
+ if (x < 1)
+ fun_l15_n4(x)
+ else
+ fun_l15_n26(x)
+ end
+end
+
+def fun_l14_n148(x)
+ if (x < 1)
+ fun_l15_n52(x)
+ else
+ fun_l15_n366(x)
+ end
+end
+
+def fun_l14_n149(x)
+ if (x < 1)
+ fun_l15_n163(x)
+ else
+ fun_l15_n884(x)
+ end
+end
+
+def fun_l14_n150(x)
+ if (x < 1)
+ fun_l15_n677(x)
+ else
+ fun_l15_n509(x)
+ end
+end
+
+def fun_l14_n151(x)
+ if (x < 1)
+ fun_l15_n949(x)
+ else
+ fun_l15_n393(x)
+ end
+end
+
+def fun_l14_n152(x)
+ if (x < 1)
+ fun_l15_n719(x)
+ else
+ fun_l15_n307(x)
+ end
+end
+
+def fun_l14_n153(x)
+ if (x < 1)
+ fun_l15_n12(x)
+ else
+ fun_l15_n985(x)
+ end
+end
+
+def fun_l14_n154(x)
+ if (x < 1)
+ fun_l15_n639(x)
+ else
+ fun_l15_n367(x)
+ end
+end
+
+def fun_l14_n155(x)
+ if (x < 1)
+ fun_l15_n401(x)
+ else
+ fun_l15_n431(x)
+ end
+end
+
+def fun_l14_n156(x)
+ if (x < 1)
+ fun_l15_n897(x)
+ else
+ fun_l15_n136(x)
+ end
+end
+
+def fun_l14_n157(x)
+ if (x < 1)
+ fun_l15_n792(x)
+ else
+ fun_l15_n865(x)
+ end
+end
+
+def fun_l14_n158(x)
+ if (x < 1)
+ fun_l15_n851(x)
+ else
+ fun_l15_n167(x)
+ end
+end
+
+def fun_l14_n159(x)
+ if (x < 1)
+ fun_l15_n643(x)
+ else
+ fun_l15_n458(x)
+ end
+end
+
+def fun_l14_n160(x)
+ if (x < 1)
+ fun_l15_n539(x)
+ else
+ fun_l15_n36(x)
+ end
+end
+
+def fun_l14_n161(x)
+ if (x < 1)
+ fun_l15_n91(x)
+ else
+ fun_l15_n130(x)
+ end
+end
+
+def fun_l14_n162(x)
+ if (x < 1)
+ fun_l15_n214(x)
+ else
+ fun_l15_n712(x)
+ end
+end
+
+def fun_l14_n163(x)
+ if (x < 1)
+ fun_l15_n47(x)
+ else
+ fun_l15_n799(x)
+ end
+end
+
+def fun_l14_n164(x)
+ if (x < 1)
+ fun_l15_n715(x)
+ else
+ fun_l15_n888(x)
+ end
+end
+
+def fun_l14_n165(x)
+ if (x < 1)
+ fun_l15_n904(x)
+ else
+ fun_l15_n484(x)
+ end
+end
+
+def fun_l14_n166(x)
+ if (x < 1)
+ fun_l15_n870(x)
+ else
+ fun_l15_n121(x)
+ end
+end
+
+def fun_l14_n167(x)
+ if (x < 1)
+ fun_l15_n960(x)
+ else
+ fun_l15_n33(x)
+ end
+end
+
+def fun_l14_n168(x)
+ if (x < 1)
+ fun_l15_n16(x)
+ else
+ fun_l15_n24(x)
+ end
+end
+
+def fun_l14_n169(x)
+ if (x < 1)
+ fun_l15_n913(x)
+ else
+ fun_l15_n793(x)
+ end
+end
+
+def fun_l14_n170(x)
+ if (x < 1)
+ fun_l15_n35(x)
+ else
+ fun_l15_n204(x)
+ end
+end
+
+def fun_l14_n171(x)
+ if (x < 1)
+ fun_l15_n526(x)
+ else
+ fun_l15_n92(x)
+ end
+end
+
+def fun_l14_n172(x)
+ if (x < 1)
+ fun_l15_n648(x)
+ else
+ fun_l15_n535(x)
+ end
+end
+
+def fun_l14_n173(x)
+ if (x < 1)
+ fun_l15_n415(x)
+ else
+ fun_l15_n610(x)
+ end
+end
+
+def fun_l14_n174(x)
+ if (x < 1)
+ fun_l15_n352(x)
+ else
+ fun_l15_n256(x)
+ end
+end
+
+def fun_l14_n175(x)
+ if (x < 1)
+ fun_l15_n692(x)
+ else
+ fun_l15_n686(x)
+ end
+end
+
+def fun_l14_n176(x)
+ if (x < 1)
+ fun_l15_n189(x)
+ else
+ fun_l15_n307(x)
+ end
+end
+
+def fun_l14_n177(x)
+ if (x < 1)
+ fun_l15_n725(x)
+ else
+ fun_l15_n714(x)
+ end
+end
+
+def fun_l14_n178(x)
+ if (x < 1)
+ fun_l15_n43(x)
+ else
+ fun_l15_n392(x)
+ end
+end
+
+def fun_l14_n179(x)
+ if (x < 1)
+ fun_l15_n890(x)
+ else
+ fun_l15_n887(x)
+ end
+end
+
+def fun_l14_n180(x)
+ if (x < 1)
+ fun_l15_n499(x)
+ else
+ fun_l15_n729(x)
+ end
+end
+
+def fun_l14_n181(x)
+ if (x < 1)
+ fun_l15_n714(x)
+ else
+ fun_l15_n417(x)
+ end
+end
+
+def fun_l14_n182(x)
+ if (x < 1)
+ fun_l15_n935(x)
+ else
+ fun_l15_n671(x)
+ end
+end
+
+def fun_l14_n183(x)
+ if (x < 1)
+ fun_l15_n123(x)
+ else
+ fun_l15_n349(x)
+ end
+end
+
+def fun_l14_n184(x)
+ if (x < 1)
+ fun_l15_n653(x)
+ else
+ fun_l15_n160(x)
+ end
+end
+
+def fun_l14_n185(x)
+ if (x < 1)
+ fun_l15_n43(x)
+ else
+ fun_l15_n965(x)
+ end
+end
+
+def fun_l14_n186(x)
+ if (x < 1)
+ fun_l15_n38(x)
+ else
+ fun_l15_n411(x)
+ end
+end
+
+def fun_l14_n187(x)
+ if (x < 1)
+ fun_l15_n788(x)
+ else
+ fun_l15_n297(x)
+ end
+end
+
+def fun_l14_n188(x)
+ if (x < 1)
+ fun_l15_n83(x)
+ else
+ fun_l15_n784(x)
+ end
+end
+
+def fun_l14_n189(x)
+ if (x < 1)
+ fun_l15_n403(x)
+ else
+ fun_l15_n469(x)
+ end
+end
+
+def fun_l14_n190(x)
+ if (x < 1)
+ fun_l15_n77(x)
+ else
+ fun_l15_n55(x)
+ end
+end
+
+def fun_l14_n191(x)
+ if (x < 1)
+ fun_l15_n835(x)
+ else
+ fun_l15_n462(x)
+ end
+end
+
+def fun_l14_n192(x)
+ if (x < 1)
+ fun_l15_n830(x)
+ else
+ fun_l15_n680(x)
+ end
+end
+
+def fun_l14_n193(x)
+ if (x < 1)
+ fun_l15_n750(x)
+ else
+ fun_l15_n580(x)
+ end
+end
+
+def fun_l14_n194(x)
+ if (x < 1)
+ fun_l15_n668(x)
+ else
+ fun_l15_n911(x)
+ end
+end
+
+def fun_l14_n195(x)
+ if (x < 1)
+ fun_l15_n90(x)
+ else
+ fun_l15_n232(x)
+ end
+end
+
+def fun_l14_n196(x)
+ if (x < 1)
+ fun_l15_n936(x)
+ else
+ fun_l15_n127(x)
+ end
+end
+
+def fun_l14_n197(x)
+ if (x < 1)
+ fun_l15_n566(x)
+ else
+ fun_l15_n687(x)
+ end
+end
+
+def fun_l14_n198(x)
+ if (x < 1)
+ fun_l15_n797(x)
+ else
+ fun_l15_n835(x)
+ end
+end
+
+def fun_l14_n199(x)
+ if (x < 1)
+ fun_l15_n96(x)
+ else
+ fun_l15_n917(x)
+ end
+end
+
+def fun_l14_n200(x)
+ if (x < 1)
+ fun_l15_n891(x)
+ else
+ fun_l15_n566(x)
+ end
+end
+
+def fun_l14_n201(x)
+ if (x < 1)
+ fun_l15_n697(x)
+ else
+ fun_l15_n218(x)
+ end
+end
+
+def fun_l14_n202(x)
+ if (x < 1)
+ fun_l15_n802(x)
+ else
+ fun_l15_n977(x)
+ end
+end
+
+def fun_l14_n203(x)
+ if (x < 1)
+ fun_l15_n38(x)
+ else
+ fun_l15_n992(x)
+ end
+end
+
+def fun_l14_n204(x)
+ if (x < 1)
+ fun_l15_n591(x)
+ else
+ fun_l15_n394(x)
+ end
+end
+
+def fun_l14_n205(x)
+ if (x < 1)
+ fun_l15_n552(x)
+ else
+ fun_l15_n522(x)
+ end
+end
+
+def fun_l14_n206(x)
+ if (x < 1)
+ fun_l15_n90(x)
+ else
+ fun_l15_n470(x)
+ end
+end
+
+def fun_l14_n207(x)
+ if (x < 1)
+ fun_l15_n92(x)
+ else
+ fun_l15_n148(x)
+ end
+end
+
+def fun_l14_n208(x)
+ if (x < 1)
+ fun_l15_n954(x)
+ else
+ fun_l15_n769(x)
+ end
+end
+
+def fun_l14_n209(x)
+ if (x < 1)
+ fun_l15_n32(x)
+ else
+ fun_l15_n211(x)
+ end
+end
+
+def fun_l14_n210(x)
+ if (x < 1)
+ fun_l15_n338(x)
+ else
+ fun_l15_n678(x)
+ end
+end
+
+def fun_l14_n211(x)
+ if (x < 1)
+ fun_l15_n113(x)
+ else
+ fun_l15_n605(x)
+ end
+end
+
+def fun_l14_n212(x)
+ if (x < 1)
+ fun_l15_n359(x)
+ else
+ fun_l15_n970(x)
+ end
+end
+
+def fun_l14_n213(x)
+ if (x < 1)
+ fun_l15_n437(x)
+ else
+ fun_l15_n279(x)
+ end
+end
+
+def fun_l14_n214(x)
+ if (x < 1)
+ fun_l15_n782(x)
+ else
+ fun_l15_n344(x)
+ end
+end
+
+def fun_l14_n215(x)
+ if (x < 1)
+ fun_l15_n501(x)
+ else
+ fun_l15_n19(x)
+ end
+end
+
+def fun_l14_n216(x)
+ if (x < 1)
+ fun_l15_n525(x)
+ else
+ fun_l15_n269(x)
+ end
+end
+
+def fun_l14_n217(x)
+ if (x < 1)
+ fun_l15_n35(x)
+ else
+ fun_l15_n786(x)
+ end
+end
+
+def fun_l14_n218(x)
+ if (x < 1)
+ fun_l15_n759(x)
+ else
+ fun_l15_n547(x)
+ end
+end
+
+def fun_l14_n219(x)
+ if (x < 1)
+ fun_l15_n260(x)
+ else
+ fun_l15_n155(x)
+ end
+end
+
+def fun_l14_n220(x)
+ if (x < 1)
+ fun_l15_n691(x)
+ else
+ fun_l15_n969(x)
+ end
+end
+
+def fun_l14_n221(x)
+ if (x < 1)
+ fun_l15_n632(x)
+ else
+ fun_l15_n803(x)
+ end
+end
+
+def fun_l14_n222(x)
+ if (x < 1)
+ fun_l15_n652(x)
+ else
+ fun_l15_n70(x)
+ end
+end
+
+def fun_l14_n223(x)
+ if (x < 1)
+ fun_l15_n710(x)
+ else
+ fun_l15_n873(x)
+ end
+end
+
+def fun_l14_n224(x)
+ if (x < 1)
+ fun_l15_n3(x)
+ else
+ fun_l15_n509(x)
+ end
+end
+
+def fun_l14_n225(x)
+ if (x < 1)
+ fun_l15_n37(x)
+ else
+ fun_l15_n814(x)
+ end
+end
+
+def fun_l14_n226(x)
+ if (x < 1)
+ fun_l15_n88(x)
+ else
+ fun_l15_n683(x)
+ end
+end
+
+def fun_l14_n227(x)
+ if (x < 1)
+ fun_l15_n898(x)
+ else
+ fun_l15_n996(x)
+ end
+end
+
+def fun_l14_n228(x)
+ if (x < 1)
+ fun_l15_n510(x)
+ else
+ fun_l15_n315(x)
+ end
+end
+
+def fun_l14_n229(x)
+ if (x < 1)
+ fun_l15_n509(x)
+ else
+ fun_l15_n75(x)
+ end
+end
+
+def fun_l14_n230(x)
+ if (x < 1)
+ fun_l15_n184(x)
+ else
+ fun_l15_n650(x)
+ end
+end
+
+def fun_l14_n231(x)
+ if (x < 1)
+ fun_l15_n227(x)
+ else
+ fun_l15_n607(x)
+ end
+end
+
+def fun_l14_n232(x)
+ if (x < 1)
+ fun_l15_n245(x)
+ else
+ fun_l15_n347(x)
+ end
+end
+
+def fun_l14_n233(x)
+ if (x < 1)
+ fun_l15_n728(x)
+ else
+ fun_l15_n457(x)
+ end
+end
+
+def fun_l14_n234(x)
+ if (x < 1)
+ fun_l15_n619(x)
+ else
+ fun_l15_n936(x)
+ end
+end
+
+def fun_l14_n235(x)
+ if (x < 1)
+ fun_l15_n855(x)
+ else
+ fun_l15_n774(x)
+ end
+end
+
+def fun_l14_n236(x)
+ if (x < 1)
+ fun_l15_n217(x)
+ else
+ fun_l15_n908(x)
+ end
+end
+
+def fun_l14_n237(x)
+ if (x < 1)
+ fun_l15_n537(x)
+ else
+ fun_l15_n441(x)
+ end
+end
+
+def fun_l14_n238(x)
+ if (x < 1)
+ fun_l15_n930(x)
+ else
+ fun_l15_n601(x)
+ end
+end
+
+def fun_l14_n239(x)
+ if (x < 1)
+ fun_l15_n976(x)
+ else
+ fun_l15_n903(x)
+ end
+end
+
+def fun_l14_n240(x)
+ if (x < 1)
+ fun_l15_n792(x)
+ else
+ fun_l15_n882(x)
+ end
+end
+
+def fun_l14_n241(x)
+ if (x < 1)
+ fun_l15_n662(x)
+ else
+ fun_l15_n197(x)
+ end
+end
+
+def fun_l14_n242(x)
+ if (x < 1)
+ fun_l15_n839(x)
+ else
+ fun_l15_n486(x)
+ end
+end
+
+def fun_l14_n243(x)
+ if (x < 1)
+ fun_l15_n122(x)
+ else
+ fun_l15_n165(x)
+ end
+end
+
+def fun_l14_n244(x)
+ if (x < 1)
+ fun_l15_n209(x)
+ else
+ fun_l15_n977(x)
+ end
+end
+
+def fun_l14_n245(x)
+ if (x < 1)
+ fun_l15_n231(x)
+ else
+ fun_l15_n318(x)
+ end
+end
+
+def fun_l14_n246(x)
+ if (x < 1)
+ fun_l15_n53(x)
+ else
+ fun_l15_n995(x)
+ end
+end
+
+def fun_l14_n247(x)
+ if (x < 1)
+ fun_l15_n276(x)
+ else
+ fun_l15_n458(x)
+ end
+end
+
+def fun_l14_n248(x)
+ if (x < 1)
+ fun_l15_n964(x)
+ else
+ fun_l15_n753(x)
+ end
+end
+
+def fun_l14_n249(x)
+ if (x < 1)
+ fun_l15_n964(x)
+ else
+ fun_l15_n783(x)
+ end
+end
+
+def fun_l14_n250(x)
+ if (x < 1)
+ fun_l15_n865(x)
+ else
+ fun_l15_n736(x)
+ end
+end
+
+def fun_l14_n251(x)
+ if (x < 1)
+ fun_l15_n861(x)
+ else
+ fun_l15_n414(x)
+ end
+end
+
+def fun_l14_n252(x)
+ if (x < 1)
+ fun_l15_n327(x)
+ else
+ fun_l15_n440(x)
+ end
+end
+
+def fun_l14_n253(x)
+ if (x < 1)
+ fun_l15_n800(x)
+ else
+ fun_l15_n186(x)
+ end
+end
+
+def fun_l14_n254(x)
+ if (x < 1)
+ fun_l15_n687(x)
+ else
+ fun_l15_n245(x)
+ end
+end
+
+def fun_l14_n255(x)
+ if (x < 1)
+ fun_l15_n421(x)
+ else
+ fun_l15_n421(x)
+ end
+end
+
+def fun_l14_n256(x)
+ if (x < 1)
+ fun_l15_n417(x)
+ else
+ fun_l15_n975(x)
+ end
+end
+
+def fun_l14_n257(x)
+ if (x < 1)
+ fun_l15_n835(x)
+ else
+ fun_l15_n697(x)
+ end
+end
+
+def fun_l14_n258(x)
+ if (x < 1)
+ fun_l15_n433(x)
+ else
+ fun_l15_n811(x)
+ end
+end
+
+def fun_l14_n259(x)
+ if (x < 1)
+ fun_l15_n473(x)
+ else
+ fun_l15_n747(x)
+ end
+end
+
+def fun_l14_n260(x)
+ if (x < 1)
+ fun_l15_n636(x)
+ else
+ fun_l15_n718(x)
+ end
+end
+
+def fun_l14_n261(x)
+ if (x < 1)
+ fun_l15_n472(x)
+ else
+ fun_l15_n971(x)
+ end
+end
+
+def fun_l14_n262(x)
+ if (x < 1)
+ fun_l15_n91(x)
+ else
+ fun_l15_n18(x)
+ end
+end
+
+def fun_l14_n263(x)
+ if (x < 1)
+ fun_l15_n582(x)
+ else
+ fun_l15_n629(x)
+ end
+end
+
+def fun_l14_n264(x)
+ if (x < 1)
+ fun_l15_n493(x)
+ else
+ fun_l15_n718(x)
+ end
+end
+
+def fun_l14_n265(x)
+ if (x < 1)
+ fun_l15_n857(x)
+ else
+ fun_l15_n134(x)
+ end
+end
+
+def fun_l14_n266(x)
+ if (x < 1)
+ fun_l15_n351(x)
+ else
+ fun_l15_n454(x)
+ end
+end
+
+def fun_l14_n267(x)
+ if (x < 1)
+ fun_l15_n578(x)
+ else
+ fun_l15_n453(x)
+ end
+end
+
+def fun_l14_n268(x)
+ if (x < 1)
+ fun_l15_n679(x)
+ else
+ fun_l15_n886(x)
+ end
+end
+
+def fun_l14_n269(x)
+ if (x < 1)
+ fun_l15_n446(x)
+ else
+ fun_l15_n7(x)
+ end
+end
+
+def fun_l14_n270(x)
+ if (x < 1)
+ fun_l15_n375(x)
+ else
+ fun_l15_n83(x)
+ end
+end
+
+def fun_l14_n271(x)
+ if (x < 1)
+ fun_l15_n688(x)
+ else
+ fun_l15_n863(x)
+ end
+end
+
+def fun_l14_n272(x)
+ if (x < 1)
+ fun_l15_n382(x)
+ else
+ fun_l15_n997(x)
+ end
+end
+
+def fun_l14_n273(x)
+ if (x < 1)
+ fun_l15_n281(x)
+ else
+ fun_l15_n909(x)
+ end
+end
+
+def fun_l14_n274(x)
+ if (x < 1)
+ fun_l15_n618(x)
+ else
+ fun_l15_n967(x)
+ end
+end
+
+def fun_l14_n275(x)
+ if (x < 1)
+ fun_l15_n651(x)
+ else
+ fun_l15_n826(x)
+ end
+end
+
+def fun_l14_n276(x)
+ if (x < 1)
+ fun_l15_n326(x)
+ else
+ fun_l15_n11(x)
+ end
+end
+
+def fun_l14_n277(x)
+ if (x < 1)
+ fun_l15_n193(x)
+ else
+ fun_l15_n719(x)
+ end
+end
+
+def fun_l14_n278(x)
+ if (x < 1)
+ fun_l15_n973(x)
+ else
+ fun_l15_n313(x)
+ end
+end
+
+def fun_l14_n279(x)
+ if (x < 1)
+ fun_l15_n33(x)
+ else
+ fun_l15_n526(x)
+ end
+end
+
+def fun_l14_n280(x)
+ if (x < 1)
+ fun_l15_n334(x)
+ else
+ fun_l15_n158(x)
+ end
+end
+
+def fun_l14_n281(x)
+ if (x < 1)
+ fun_l15_n627(x)
+ else
+ fun_l15_n346(x)
+ end
+end
+
+def fun_l14_n282(x)
+ if (x < 1)
+ fun_l15_n537(x)
+ else
+ fun_l15_n198(x)
+ end
+end
+
+def fun_l14_n283(x)
+ if (x < 1)
+ fun_l15_n779(x)
+ else
+ fun_l15_n0(x)
+ end
+end
+
+def fun_l14_n284(x)
+ if (x < 1)
+ fun_l15_n487(x)
+ else
+ fun_l15_n489(x)
+ end
+end
+
+def fun_l14_n285(x)
+ if (x < 1)
+ fun_l15_n793(x)
+ else
+ fun_l15_n803(x)
+ end
+end
+
+def fun_l14_n286(x)
+ if (x < 1)
+ fun_l15_n206(x)
+ else
+ fun_l15_n936(x)
+ end
+end
+
+def fun_l14_n287(x)
+ if (x < 1)
+ fun_l15_n223(x)
+ else
+ fun_l15_n278(x)
+ end
+end
+
+def fun_l14_n288(x)
+ if (x < 1)
+ fun_l15_n601(x)
+ else
+ fun_l15_n251(x)
+ end
+end
+
+def fun_l14_n289(x)
+ if (x < 1)
+ fun_l15_n144(x)
+ else
+ fun_l15_n420(x)
+ end
+end
+
+def fun_l14_n290(x)
+ if (x < 1)
+ fun_l15_n964(x)
+ else
+ fun_l15_n319(x)
+ end
+end
+
+def fun_l14_n291(x)
+ if (x < 1)
+ fun_l15_n385(x)
+ else
+ fun_l15_n498(x)
+ end
+end
+
+def fun_l14_n292(x)
+ if (x < 1)
+ fun_l15_n19(x)
+ else
+ fun_l15_n959(x)
+ end
+end
+
+def fun_l14_n293(x)
+ if (x < 1)
+ fun_l15_n77(x)
+ else
+ fun_l15_n849(x)
+ end
+end
+
+def fun_l14_n294(x)
+ if (x < 1)
+ fun_l15_n96(x)
+ else
+ fun_l15_n964(x)
+ end
+end
+
+def fun_l14_n295(x)
+ if (x < 1)
+ fun_l15_n374(x)
+ else
+ fun_l15_n337(x)
+ end
+end
+
+def fun_l14_n296(x)
+ if (x < 1)
+ fun_l15_n210(x)
+ else
+ fun_l15_n621(x)
+ end
+end
+
+def fun_l14_n297(x)
+ if (x < 1)
+ fun_l15_n992(x)
+ else
+ fun_l15_n90(x)
+ end
+end
+
+def fun_l14_n298(x)
+ if (x < 1)
+ fun_l15_n442(x)
+ else
+ fun_l15_n799(x)
+ end
+end
+
+def fun_l14_n299(x)
+ if (x < 1)
+ fun_l15_n133(x)
+ else
+ fun_l15_n21(x)
+ end
+end
+
+def fun_l14_n300(x)
+ if (x < 1)
+ fun_l15_n619(x)
+ else
+ fun_l15_n46(x)
+ end
+end
+
+def fun_l14_n301(x)
+ if (x < 1)
+ fun_l15_n359(x)
+ else
+ fun_l15_n386(x)
+ end
+end
+
+def fun_l14_n302(x)
+ if (x < 1)
+ fun_l15_n163(x)
+ else
+ fun_l15_n197(x)
+ end
+end
+
+def fun_l14_n303(x)
+ if (x < 1)
+ fun_l15_n382(x)
+ else
+ fun_l15_n693(x)
+ end
+end
+
+def fun_l14_n304(x)
+ if (x < 1)
+ fun_l15_n700(x)
+ else
+ fun_l15_n167(x)
+ end
+end
+
+def fun_l14_n305(x)
+ if (x < 1)
+ fun_l15_n124(x)
+ else
+ fun_l15_n448(x)
+ end
+end
+
+def fun_l14_n306(x)
+ if (x < 1)
+ fun_l15_n829(x)
+ else
+ fun_l15_n986(x)
+ end
+end
+
+def fun_l14_n307(x)
+ if (x < 1)
+ fun_l15_n39(x)
+ else
+ fun_l15_n557(x)
+ end
+end
+
+def fun_l14_n308(x)
+ if (x < 1)
+ fun_l15_n495(x)
+ else
+ fun_l15_n259(x)
+ end
+end
+
+def fun_l14_n309(x)
+ if (x < 1)
+ fun_l15_n462(x)
+ else
+ fun_l15_n121(x)
+ end
+end
+
+def fun_l14_n310(x)
+ if (x < 1)
+ fun_l15_n110(x)
+ else
+ fun_l15_n159(x)
+ end
+end
+
+def fun_l14_n311(x)
+ if (x < 1)
+ fun_l15_n144(x)
+ else
+ fun_l15_n969(x)
+ end
+end
+
+def fun_l14_n312(x)
+ if (x < 1)
+ fun_l15_n679(x)
+ else
+ fun_l15_n610(x)
+ end
+end
+
+def fun_l14_n313(x)
+ if (x < 1)
+ fun_l15_n332(x)
+ else
+ fun_l15_n759(x)
+ end
+end
+
+def fun_l14_n314(x)
+ if (x < 1)
+ fun_l15_n819(x)
+ else
+ fun_l15_n595(x)
+ end
+end
+
+def fun_l14_n315(x)
+ if (x < 1)
+ fun_l15_n180(x)
+ else
+ fun_l15_n555(x)
+ end
+end
+
+def fun_l14_n316(x)
+ if (x < 1)
+ fun_l15_n218(x)
+ else
+ fun_l15_n844(x)
+ end
+end
+
+def fun_l14_n317(x)
+ if (x < 1)
+ fun_l15_n486(x)
+ else
+ fun_l15_n666(x)
+ end
+end
+
+def fun_l14_n318(x)
+ if (x < 1)
+ fun_l15_n277(x)
+ else
+ fun_l15_n486(x)
+ end
+end
+
+def fun_l14_n319(x)
+ if (x < 1)
+ fun_l15_n874(x)
+ else
+ fun_l15_n802(x)
+ end
+end
+
+def fun_l14_n320(x)
+ if (x < 1)
+ fun_l15_n717(x)
+ else
+ fun_l15_n348(x)
+ end
+end
+
+def fun_l14_n321(x)
+ if (x < 1)
+ fun_l15_n701(x)
+ else
+ fun_l15_n897(x)
+ end
+end
+
+def fun_l14_n322(x)
+ if (x < 1)
+ fun_l15_n229(x)
+ else
+ fun_l15_n976(x)
+ end
+end
+
+def fun_l14_n323(x)
+ if (x < 1)
+ fun_l15_n288(x)
+ else
+ fun_l15_n801(x)
+ end
+end
+
+def fun_l14_n324(x)
+ if (x < 1)
+ fun_l15_n25(x)
+ else
+ fun_l15_n566(x)
+ end
+end
+
+def fun_l14_n325(x)
+ if (x < 1)
+ fun_l15_n489(x)
+ else
+ fun_l15_n165(x)
+ end
+end
+
+def fun_l14_n326(x)
+ if (x < 1)
+ fun_l15_n646(x)
+ else
+ fun_l15_n529(x)
+ end
+end
+
+def fun_l14_n327(x)
+ if (x < 1)
+ fun_l15_n126(x)
+ else
+ fun_l15_n247(x)
+ end
+end
+
+def fun_l14_n328(x)
+ if (x < 1)
+ fun_l15_n180(x)
+ else
+ fun_l15_n838(x)
+ end
+end
+
+def fun_l14_n329(x)
+ if (x < 1)
+ fun_l15_n827(x)
+ else
+ fun_l15_n251(x)
+ end
+end
+
+def fun_l14_n330(x)
+ if (x < 1)
+ fun_l15_n232(x)
+ else
+ fun_l15_n371(x)
+ end
+end
+
+def fun_l14_n331(x)
+ if (x < 1)
+ fun_l15_n742(x)
+ else
+ fun_l15_n365(x)
+ end
+end
+
+def fun_l14_n332(x)
+ if (x < 1)
+ fun_l15_n254(x)
+ else
+ fun_l15_n895(x)
+ end
+end
+
+def fun_l14_n333(x)
+ if (x < 1)
+ fun_l15_n267(x)
+ else
+ fun_l15_n716(x)
+ end
+end
+
+def fun_l14_n334(x)
+ if (x < 1)
+ fun_l15_n907(x)
+ else
+ fun_l15_n846(x)
+ end
+end
+
+def fun_l14_n335(x)
+ if (x < 1)
+ fun_l15_n432(x)
+ else
+ fun_l15_n207(x)
+ end
+end
+
+def fun_l14_n336(x)
+ if (x < 1)
+ fun_l15_n342(x)
+ else
+ fun_l15_n533(x)
+ end
+end
+
+def fun_l14_n337(x)
+ if (x < 1)
+ fun_l15_n155(x)
+ else
+ fun_l15_n626(x)
+ end
+end
+
+def fun_l14_n338(x)
+ if (x < 1)
+ fun_l15_n457(x)
+ else
+ fun_l15_n226(x)
+ end
+end
+
+def fun_l14_n339(x)
+ if (x < 1)
+ fun_l15_n621(x)
+ else
+ fun_l15_n685(x)
+ end
+end
+
+def fun_l14_n340(x)
+ if (x < 1)
+ fun_l15_n502(x)
+ else
+ fun_l15_n604(x)
+ end
+end
+
+def fun_l14_n341(x)
+ if (x < 1)
+ fun_l15_n578(x)
+ else
+ fun_l15_n250(x)
+ end
+end
+
+def fun_l14_n342(x)
+ if (x < 1)
+ fun_l15_n16(x)
+ else
+ fun_l15_n897(x)
+ end
+end
+
+def fun_l14_n343(x)
+ if (x < 1)
+ fun_l15_n173(x)
+ else
+ fun_l15_n441(x)
+ end
+end
+
+def fun_l14_n344(x)
+ if (x < 1)
+ fun_l15_n882(x)
+ else
+ fun_l15_n287(x)
+ end
+end
+
+def fun_l14_n345(x)
+ if (x < 1)
+ fun_l15_n549(x)
+ else
+ fun_l15_n559(x)
+ end
+end
+
+def fun_l14_n346(x)
+ if (x < 1)
+ fun_l15_n587(x)
+ else
+ fun_l15_n712(x)
+ end
+end
+
+def fun_l14_n347(x)
+ if (x < 1)
+ fun_l15_n2(x)
+ else
+ fun_l15_n279(x)
+ end
+end
+
+def fun_l14_n348(x)
+ if (x < 1)
+ fun_l15_n602(x)
+ else
+ fun_l15_n801(x)
+ end
+end
+
+def fun_l14_n349(x)
+ if (x < 1)
+ fun_l15_n114(x)
+ else
+ fun_l15_n181(x)
+ end
+end
+
+def fun_l14_n350(x)
+ if (x < 1)
+ fun_l15_n751(x)
+ else
+ fun_l15_n760(x)
+ end
+end
+
+def fun_l14_n351(x)
+ if (x < 1)
+ fun_l15_n570(x)
+ else
+ fun_l15_n168(x)
+ end
+end
+
+def fun_l14_n352(x)
+ if (x < 1)
+ fun_l15_n342(x)
+ else
+ fun_l15_n401(x)
+ end
+end
+
+def fun_l14_n353(x)
+ if (x < 1)
+ fun_l15_n775(x)
+ else
+ fun_l15_n175(x)
+ end
+end
+
+def fun_l14_n354(x)
+ if (x < 1)
+ fun_l15_n0(x)
+ else
+ fun_l15_n831(x)
+ end
+end
+
+def fun_l14_n355(x)
+ if (x < 1)
+ fun_l15_n127(x)
+ else
+ fun_l15_n751(x)
+ end
+end
+
+def fun_l14_n356(x)
+ if (x < 1)
+ fun_l15_n57(x)
+ else
+ fun_l15_n58(x)
+ end
+end
+
+def fun_l14_n357(x)
+ if (x < 1)
+ fun_l15_n696(x)
+ else
+ fun_l15_n694(x)
+ end
+end
+
+def fun_l14_n358(x)
+ if (x < 1)
+ fun_l15_n240(x)
+ else
+ fun_l15_n525(x)
+ end
+end
+
+def fun_l14_n359(x)
+ if (x < 1)
+ fun_l15_n552(x)
+ else
+ fun_l15_n126(x)
+ end
+end
+
+def fun_l14_n360(x)
+ if (x < 1)
+ fun_l15_n435(x)
+ else
+ fun_l15_n24(x)
+ end
+end
+
+def fun_l14_n361(x)
+ if (x < 1)
+ fun_l15_n366(x)
+ else
+ fun_l15_n397(x)
+ end
+end
+
+def fun_l14_n362(x)
+ if (x < 1)
+ fun_l15_n626(x)
+ else
+ fun_l15_n288(x)
+ end
+end
+
+def fun_l14_n363(x)
+ if (x < 1)
+ fun_l15_n474(x)
+ else
+ fun_l15_n205(x)
+ end
+end
+
+def fun_l14_n364(x)
+ if (x < 1)
+ fun_l15_n299(x)
+ else
+ fun_l15_n9(x)
+ end
+end
+
+def fun_l14_n365(x)
+ if (x < 1)
+ fun_l15_n115(x)
+ else
+ fun_l15_n126(x)
+ end
+end
+
+def fun_l14_n366(x)
+ if (x < 1)
+ fun_l15_n777(x)
+ else
+ fun_l15_n714(x)
+ end
+end
+
+def fun_l14_n367(x)
+ if (x < 1)
+ fun_l15_n697(x)
+ else
+ fun_l15_n663(x)
+ end
+end
+
+def fun_l14_n368(x)
+ if (x < 1)
+ fun_l15_n72(x)
+ else
+ fun_l15_n339(x)
+ end
+end
+
+def fun_l14_n369(x)
+ if (x < 1)
+ fun_l15_n703(x)
+ else
+ fun_l15_n901(x)
+ end
+end
+
+def fun_l14_n370(x)
+ if (x < 1)
+ fun_l15_n38(x)
+ else
+ fun_l15_n920(x)
+ end
+end
+
+def fun_l14_n371(x)
+ if (x < 1)
+ fun_l15_n97(x)
+ else
+ fun_l15_n418(x)
+ end
+end
+
+def fun_l14_n372(x)
+ if (x < 1)
+ fun_l15_n831(x)
+ else
+ fun_l15_n295(x)
+ end
+end
+
+def fun_l14_n373(x)
+ if (x < 1)
+ fun_l15_n849(x)
+ else
+ fun_l15_n818(x)
+ end
+end
+
+def fun_l14_n374(x)
+ if (x < 1)
+ fun_l15_n308(x)
+ else
+ fun_l15_n379(x)
+ end
+end
+
+def fun_l14_n375(x)
+ if (x < 1)
+ fun_l15_n552(x)
+ else
+ fun_l15_n109(x)
+ end
+end
+
+def fun_l14_n376(x)
+ if (x < 1)
+ fun_l15_n444(x)
+ else
+ fun_l15_n509(x)
+ end
+end
+
+def fun_l14_n377(x)
+ if (x < 1)
+ fun_l15_n498(x)
+ else
+ fun_l15_n363(x)
+ end
+end
+
+def fun_l14_n378(x)
+ if (x < 1)
+ fun_l15_n475(x)
+ else
+ fun_l15_n250(x)
+ end
+end
+
+def fun_l14_n379(x)
+ if (x < 1)
+ fun_l15_n635(x)
+ else
+ fun_l15_n550(x)
+ end
+end
+
+def fun_l14_n380(x)
+ if (x < 1)
+ fun_l15_n835(x)
+ else
+ fun_l15_n261(x)
+ end
+end
+
+def fun_l14_n381(x)
+ if (x < 1)
+ fun_l15_n903(x)
+ else
+ fun_l15_n492(x)
+ end
+end
+
+def fun_l14_n382(x)
+ if (x < 1)
+ fun_l15_n447(x)
+ else
+ fun_l15_n570(x)
+ end
+end
+
+def fun_l14_n383(x)
+ if (x < 1)
+ fun_l15_n785(x)
+ else
+ fun_l15_n711(x)
+ end
+end
+
+def fun_l14_n384(x)
+ if (x < 1)
+ fun_l15_n321(x)
+ else
+ fun_l15_n966(x)
+ end
+end
+
+def fun_l14_n385(x)
+ if (x < 1)
+ fun_l15_n786(x)
+ else
+ fun_l15_n667(x)
+ end
+end
+
+def fun_l14_n386(x)
+ if (x < 1)
+ fun_l15_n954(x)
+ else
+ fun_l15_n101(x)
+ end
+end
+
+def fun_l14_n387(x)
+ if (x < 1)
+ fun_l15_n868(x)
+ else
+ fun_l15_n1(x)
+ end
+end
+
+def fun_l14_n388(x)
+ if (x < 1)
+ fun_l15_n380(x)
+ else
+ fun_l15_n949(x)
+ end
+end
+
+def fun_l14_n389(x)
+ if (x < 1)
+ fun_l15_n456(x)
+ else
+ fun_l15_n122(x)
+ end
+end
+
+def fun_l14_n390(x)
+ if (x < 1)
+ fun_l15_n644(x)
+ else
+ fun_l15_n601(x)
+ end
+end
+
+def fun_l14_n391(x)
+ if (x < 1)
+ fun_l15_n523(x)
+ else
+ fun_l15_n754(x)
+ end
+end
+
+def fun_l14_n392(x)
+ if (x < 1)
+ fun_l15_n882(x)
+ else
+ fun_l15_n453(x)
+ end
+end
+
+def fun_l14_n393(x)
+ if (x < 1)
+ fun_l15_n249(x)
+ else
+ fun_l15_n773(x)
+ end
+end
+
+def fun_l14_n394(x)
+ if (x < 1)
+ fun_l15_n453(x)
+ else
+ fun_l15_n490(x)
+ end
+end
+
+def fun_l14_n395(x)
+ if (x < 1)
+ fun_l15_n699(x)
+ else
+ fun_l15_n95(x)
+ end
+end
+
+def fun_l14_n396(x)
+ if (x < 1)
+ fun_l15_n726(x)
+ else
+ fun_l15_n632(x)
+ end
+end
+
+def fun_l14_n397(x)
+ if (x < 1)
+ fun_l15_n139(x)
+ else
+ fun_l15_n682(x)
+ end
+end
+
+def fun_l14_n398(x)
+ if (x < 1)
+ fun_l15_n246(x)
+ else
+ fun_l15_n74(x)
+ end
+end
+
+def fun_l14_n399(x)
+ if (x < 1)
+ fun_l15_n334(x)
+ else
+ fun_l15_n504(x)
+ end
+end
+
+def fun_l14_n400(x)
+ if (x < 1)
+ fun_l15_n450(x)
+ else
+ fun_l15_n778(x)
+ end
+end
+
+def fun_l14_n401(x)
+ if (x < 1)
+ fun_l15_n428(x)
+ else
+ fun_l15_n101(x)
+ end
+end
+
+def fun_l14_n402(x)
+ if (x < 1)
+ fun_l15_n779(x)
+ else
+ fun_l15_n924(x)
+ end
+end
+
+def fun_l14_n403(x)
+ if (x < 1)
+ fun_l15_n957(x)
+ else
+ fun_l15_n83(x)
+ end
+end
+
+def fun_l14_n404(x)
+ if (x < 1)
+ fun_l15_n0(x)
+ else
+ fun_l15_n781(x)
+ end
+end
+
+def fun_l14_n405(x)
+ if (x < 1)
+ fun_l15_n100(x)
+ else
+ fun_l15_n21(x)
+ end
+end
+
+def fun_l14_n406(x)
+ if (x < 1)
+ fun_l15_n262(x)
+ else
+ fun_l15_n925(x)
+ end
+end
+
+def fun_l14_n407(x)
+ if (x < 1)
+ fun_l15_n935(x)
+ else
+ fun_l15_n193(x)
+ end
+end
+
+def fun_l14_n408(x)
+ if (x < 1)
+ fun_l15_n140(x)
+ else
+ fun_l15_n459(x)
+ end
+end
+
+def fun_l14_n409(x)
+ if (x < 1)
+ fun_l15_n484(x)
+ else
+ fun_l15_n584(x)
+ end
+end
+
+def fun_l14_n410(x)
+ if (x < 1)
+ fun_l15_n762(x)
+ else
+ fun_l15_n640(x)
+ end
+end
+
+def fun_l14_n411(x)
+ if (x < 1)
+ fun_l15_n347(x)
+ else
+ fun_l15_n395(x)
+ end
+end
+
+def fun_l14_n412(x)
+ if (x < 1)
+ fun_l15_n809(x)
+ else
+ fun_l15_n105(x)
+ end
+end
+
+def fun_l14_n413(x)
+ if (x < 1)
+ fun_l15_n929(x)
+ else
+ fun_l15_n265(x)
+ end
+end
+
+def fun_l14_n414(x)
+ if (x < 1)
+ fun_l15_n228(x)
+ else
+ fun_l15_n88(x)
+ end
+end
+
+def fun_l14_n415(x)
+ if (x < 1)
+ fun_l15_n650(x)
+ else
+ fun_l15_n785(x)
+ end
+end
+
+def fun_l14_n416(x)
+ if (x < 1)
+ fun_l15_n806(x)
+ else
+ fun_l15_n743(x)
+ end
+end
+
+def fun_l14_n417(x)
+ if (x < 1)
+ fun_l15_n417(x)
+ else
+ fun_l15_n454(x)
+ end
+end
+
+def fun_l14_n418(x)
+ if (x < 1)
+ fun_l15_n571(x)
+ else
+ fun_l15_n651(x)
+ end
+end
+
+def fun_l14_n419(x)
+ if (x < 1)
+ fun_l15_n341(x)
+ else
+ fun_l15_n242(x)
+ end
+end
+
+def fun_l14_n420(x)
+ if (x < 1)
+ fun_l15_n613(x)
+ else
+ fun_l15_n339(x)
+ end
+end
+
+def fun_l14_n421(x)
+ if (x < 1)
+ fun_l15_n657(x)
+ else
+ fun_l15_n759(x)
+ end
+end
+
+def fun_l14_n422(x)
+ if (x < 1)
+ fun_l15_n33(x)
+ else
+ fun_l15_n669(x)
+ end
+end
+
+def fun_l14_n423(x)
+ if (x < 1)
+ fun_l15_n628(x)
+ else
+ fun_l15_n963(x)
+ end
+end
+
+def fun_l14_n424(x)
+ if (x < 1)
+ fun_l15_n940(x)
+ else
+ fun_l15_n773(x)
+ end
+end
+
+def fun_l14_n425(x)
+ if (x < 1)
+ fun_l15_n489(x)
+ else
+ fun_l15_n625(x)
+ end
+end
+
+def fun_l14_n426(x)
+ if (x < 1)
+ fun_l15_n501(x)
+ else
+ fun_l15_n278(x)
+ end
+end
+
+def fun_l14_n427(x)
+ if (x < 1)
+ fun_l15_n620(x)
+ else
+ fun_l15_n426(x)
+ end
+end
+
+def fun_l14_n428(x)
+ if (x < 1)
+ fun_l15_n606(x)
+ else
+ fun_l15_n123(x)
+ end
+end
+
+def fun_l14_n429(x)
+ if (x < 1)
+ fun_l15_n622(x)
+ else
+ fun_l15_n873(x)
+ end
+end
+
+def fun_l14_n430(x)
+ if (x < 1)
+ fun_l15_n660(x)
+ else
+ fun_l15_n736(x)
+ end
+end
+
+def fun_l14_n431(x)
+ if (x < 1)
+ fun_l15_n927(x)
+ else
+ fun_l15_n893(x)
+ end
+end
+
+def fun_l14_n432(x)
+ if (x < 1)
+ fun_l15_n492(x)
+ else
+ fun_l15_n947(x)
+ end
+end
+
+def fun_l14_n433(x)
+ if (x < 1)
+ fun_l15_n164(x)
+ else
+ fun_l15_n853(x)
+ end
+end
+
+def fun_l14_n434(x)
+ if (x < 1)
+ fun_l15_n730(x)
+ else
+ fun_l15_n265(x)
+ end
+end
+
+def fun_l14_n435(x)
+ if (x < 1)
+ fun_l15_n548(x)
+ else
+ fun_l15_n272(x)
+ end
+end
+
+def fun_l14_n436(x)
+ if (x < 1)
+ fun_l15_n944(x)
+ else
+ fun_l15_n344(x)
+ end
+end
+
+def fun_l14_n437(x)
+ if (x < 1)
+ fun_l15_n931(x)
+ else
+ fun_l15_n376(x)
+ end
+end
+
+def fun_l14_n438(x)
+ if (x < 1)
+ fun_l15_n261(x)
+ else
+ fun_l15_n270(x)
+ end
+end
+
+def fun_l14_n439(x)
+ if (x < 1)
+ fun_l15_n705(x)
+ else
+ fun_l15_n700(x)
+ end
+end
+
+def fun_l14_n440(x)
+ if (x < 1)
+ fun_l15_n115(x)
+ else
+ fun_l15_n964(x)
+ end
+end
+
+def fun_l14_n441(x)
+ if (x < 1)
+ fun_l15_n396(x)
+ else
+ fun_l15_n780(x)
+ end
+end
+
+def fun_l14_n442(x)
+ if (x < 1)
+ fun_l15_n813(x)
+ else
+ fun_l15_n25(x)
+ end
+end
+
+def fun_l14_n443(x)
+ if (x < 1)
+ fun_l15_n405(x)
+ else
+ fun_l15_n264(x)
+ end
+end
+
+def fun_l14_n444(x)
+ if (x < 1)
+ fun_l15_n816(x)
+ else
+ fun_l15_n857(x)
+ end
+end
+
+def fun_l14_n445(x)
+ if (x < 1)
+ fun_l15_n191(x)
+ else
+ fun_l15_n886(x)
+ end
+end
+
+def fun_l14_n446(x)
+ if (x < 1)
+ fun_l15_n415(x)
+ else
+ fun_l15_n611(x)
+ end
+end
+
+def fun_l14_n447(x)
+ if (x < 1)
+ fun_l15_n473(x)
+ else
+ fun_l15_n701(x)
+ end
+end
+
+def fun_l14_n448(x)
+ if (x < 1)
+ fun_l15_n532(x)
+ else
+ fun_l15_n501(x)
+ end
+end
+
+def fun_l14_n449(x)
+ if (x < 1)
+ fun_l15_n731(x)
+ else
+ fun_l15_n631(x)
+ end
+end
+
+def fun_l14_n450(x)
+ if (x < 1)
+ fun_l15_n75(x)
+ else
+ fun_l15_n356(x)
+ end
+end
+
+def fun_l14_n451(x)
+ if (x < 1)
+ fun_l15_n614(x)
+ else
+ fun_l15_n600(x)
+ end
+end
+
+def fun_l14_n452(x)
+ if (x < 1)
+ fun_l15_n592(x)
+ else
+ fun_l15_n995(x)
+ end
+end
+
+def fun_l14_n453(x)
+ if (x < 1)
+ fun_l15_n712(x)
+ else
+ fun_l15_n815(x)
+ end
+end
+
+def fun_l14_n454(x)
+ if (x < 1)
+ fun_l15_n859(x)
+ else
+ fun_l15_n560(x)
+ end
+end
+
+def fun_l14_n455(x)
+ if (x < 1)
+ fun_l15_n665(x)
+ else
+ fun_l15_n408(x)
+ end
+end
+
+def fun_l14_n456(x)
+ if (x < 1)
+ fun_l15_n693(x)
+ else
+ fun_l15_n491(x)
+ end
+end
+
+def fun_l14_n457(x)
+ if (x < 1)
+ fun_l15_n29(x)
+ else
+ fun_l15_n515(x)
+ end
+end
+
+def fun_l14_n458(x)
+ if (x < 1)
+ fun_l15_n598(x)
+ else
+ fun_l15_n448(x)
+ end
+end
+
+def fun_l14_n459(x)
+ if (x < 1)
+ fun_l15_n937(x)
+ else
+ fun_l15_n199(x)
+ end
+end
+
+def fun_l14_n460(x)
+ if (x < 1)
+ fun_l15_n950(x)
+ else
+ fun_l15_n874(x)
+ end
+end
+
+def fun_l14_n461(x)
+ if (x < 1)
+ fun_l15_n38(x)
+ else
+ fun_l15_n650(x)
+ end
+end
+
+def fun_l14_n462(x)
+ if (x < 1)
+ fun_l15_n366(x)
+ else
+ fun_l15_n271(x)
+ end
+end
+
+def fun_l14_n463(x)
+ if (x < 1)
+ fun_l15_n21(x)
+ else
+ fun_l15_n690(x)
+ end
+end
+
+def fun_l14_n464(x)
+ if (x < 1)
+ fun_l15_n660(x)
+ else
+ fun_l15_n71(x)
+ end
+end
+
+def fun_l14_n465(x)
+ if (x < 1)
+ fun_l15_n889(x)
+ else
+ fun_l15_n324(x)
+ end
+end
+
+def fun_l14_n466(x)
+ if (x < 1)
+ fun_l15_n808(x)
+ else
+ fun_l15_n532(x)
+ end
+end
+
+def fun_l14_n467(x)
+ if (x < 1)
+ fun_l15_n72(x)
+ else
+ fun_l15_n52(x)
+ end
+end
+
+def fun_l14_n468(x)
+ if (x < 1)
+ fun_l15_n563(x)
+ else
+ fun_l15_n327(x)
+ end
+end
+
+def fun_l14_n469(x)
+ if (x < 1)
+ fun_l15_n570(x)
+ else
+ fun_l15_n794(x)
+ end
+end
+
+def fun_l14_n470(x)
+ if (x < 1)
+ fun_l15_n8(x)
+ else
+ fun_l15_n594(x)
+ end
+end
+
+def fun_l14_n471(x)
+ if (x < 1)
+ fun_l15_n859(x)
+ else
+ fun_l15_n519(x)
+ end
+end
+
+def fun_l14_n472(x)
+ if (x < 1)
+ fun_l15_n539(x)
+ else
+ fun_l15_n432(x)
+ end
+end
+
+def fun_l14_n473(x)
+ if (x < 1)
+ fun_l15_n795(x)
+ else
+ fun_l15_n916(x)
+ end
+end
+
+def fun_l14_n474(x)
+ if (x < 1)
+ fun_l15_n851(x)
+ else
+ fun_l15_n157(x)
+ end
+end
+
+def fun_l14_n475(x)
+ if (x < 1)
+ fun_l15_n274(x)
+ else
+ fun_l15_n678(x)
+ end
+end
+
+def fun_l14_n476(x)
+ if (x < 1)
+ fun_l15_n221(x)
+ else
+ fun_l15_n906(x)
+ end
+end
+
+def fun_l14_n477(x)
+ if (x < 1)
+ fun_l15_n116(x)
+ else
+ fun_l15_n778(x)
+ end
+end
+
+def fun_l14_n478(x)
+ if (x < 1)
+ fun_l15_n715(x)
+ else
+ fun_l15_n855(x)
+ end
+end
+
+def fun_l14_n479(x)
+ if (x < 1)
+ fun_l15_n705(x)
+ else
+ fun_l15_n935(x)
+ end
+end
+
+def fun_l14_n480(x)
+ if (x < 1)
+ fun_l15_n119(x)
+ else
+ fun_l15_n559(x)
+ end
+end
+
+def fun_l14_n481(x)
+ if (x < 1)
+ fun_l15_n996(x)
+ else
+ fun_l15_n768(x)
+ end
+end
+
+def fun_l14_n482(x)
+ if (x < 1)
+ fun_l15_n619(x)
+ else
+ fun_l15_n475(x)
+ end
+end
+
+def fun_l14_n483(x)
+ if (x < 1)
+ fun_l15_n189(x)
+ else
+ fun_l15_n398(x)
+ end
+end
+
+def fun_l14_n484(x)
+ if (x < 1)
+ fun_l15_n758(x)
+ else
+ fun_l15_n864(x)
+ end
+end
+
+def fun_l14_n485(x)
+ if (x < 1)
+ fun_l15_n508(x)
+ else
+ fun_l15_n393(x)
+ end
+end
+
+def fun_l14_n486(x)
+ if (x < 1)
+ fun_l15_n825(x)
+ else
+ fun_l15_n337(x)
+ end
+end
+
+def fun_l14_n487(x)
+ if (x < 1)
+ fun_l15_n449(x)
+ else
+ fun_l15_n389(x)
+ end
+end
+
+def fun_l14_n488(x)
+ if (x < 1)
+ fun_l15_n328(x)
+ else
+ fun_l15_n658(x)
+ end
+end
+
+def fun_l14_n489(x)
+ if (x < 1)
+ fun_l15_n138(x)
+ else
+ fun_l15_n938(x)
+ end
+end
+
+def fun_l14_n490(x)
+ if (x < 1)
+ fun_l15_n387(x)
+ else
+ fun_l15_n865(x)
+ end
+end
+
+def fun_l14_n491(x)
+ if (x < 1)
+ fun_l15_n621(x)
+ else
+ fun_l15_n516(x)
+ end
+end
+
+def fun_l14_n492(x)
+ if (x < 1)
+ fun_l15_n962(x)
+ else
+ fun_l15_n821(x)
+ end
+end
+
+def fun_l14_n493(x)
+ if (x < 1)
+ fun_l15_n544(x)
+ else
+ fun_l15_n625(x)
+ end
+end
+
+def fun_l14_n494(x)
+ if (x < 1)
+ fun_l15_n610(x)
+ else
+ fun_l15_n404(x)
+ end
+end
+
+def fun_l14_n495(x)
+ if (x < 1)
+ fun_l15_n329(x)
+ else
+ fun_l15_n537(x)
+ end
+end
+
+def fun_l14_n496(x)
+ if (x < 1)
+ fun_l15_n659(x)
+ else
+ fun_l15_n837(x)
+ end
+end
+
+def fun_l14_n497(x)
+ if (x < 1)
+ fun_l15_n974(x)
+ else
+ fun_l15_n55(x)
+ end
+end
+
+def fun_l14_n498(x)
+ if (x < 1)
+ fun_l15_n243(x)
+ else
+ fun_l15_n810(x)
+ end
+end
+
+def fun_l14_n499(x)
+ if (x < 1)
+ fun_l15_n260(x)
+ else
+ fun_l15_n412(x)
+ end
+end
+
+def fun_l14_n500(x)
+ if (x < 1)
+ fun_l15_n940(x)
+ else
+ fun_l15_n920(x)
+ end
+end
+
+def fun_l14_n501(x)
+ if (x < 1)
+ fun_l15_n829(x)
+ else
+ fun_l15_n877(x)
+ end
+end
+
+def fun_l14_n502(x)
+ if (x < 1)
+ fun_l15_n457(x)
+ else
+ fun_l15_n307(x)
+ end
+end
+
+def fun_l14_n503(x)
+ if (x < 1)
+ fun_l15_n301(x)
+ else
+ fun_l15_n812(x)
+ end
+end
+
+def fun_l14_n504(x)
+ if (x < 1)
+ fun_l15_n175(x)
+ else
+ fun_l15_n715(x)
+ end
+end
+
+def fun_l14_n505(x)
+ if (x < 1)
+ fun_l15_n897(x)
+ else
+ fun_l15_n103(x)
+ end
+end
+
+def fun_l14_n506(x)
+ if (x < 1)
+ fun_l15_n357(x)
+ else
+ fun_l15_n606(x)
+ end
+end
+
+def fun_l14_n507(x)
+ if (x < 1)
+ fun_l15_n974(x)
+ else
+ fun_l15_n389(x)
+ end
+end
+
+def fun_l14_n508(x)
+ if (x < 1)
+ fun_l15_n641(x)
+ else
+ fun_l15_n450(x)
+ end
+end
+
+def fun_l14_n509(x)
+ if (x < 1)
+ fun_l15_n4(x)
+ else
+ fun_l15_n533(x)
+ end
+end
+
+def fun_l14_n510(x)
+ if (x < 1)
+ fun_l15_n258(x)
+ else
+ fun_l15_n716(x)
+ end
+end
+
+def fun_l14_n511(x)
+ if (x < 1)
+ fun_l15_n919(x)
+ else
+ fun_l15_n881(x)
+ end
+end
+
+def fun_l14_n512(x)
+ if (x < 1)
+ fun_l15_n313(x)
+ else
+ fun_l15_n282(x)
+ end
+end
+
+def fun_l14_n513(x)
+ if (x < 1)
+ fun_l15_n116(x)
+ else
+ fun_l15_n861(x)
+ end
+end
+
+def fun_l14_n514(x)
+ if (x < 1)
+ fun_l15_n178(x)
+ else
+ fun_l15_n717(x)
+ end
+end
+
+def fun_l14_n515(x)
+ if (x < 1)
+ fun_l15_n896(x)
+ else
+ fun_l15_n583(x)
+ end
+end
+
+def fun_l14_n516(x)
+ if (x < 1)
+ fun_l15_n203(x)
+ else
+ fun_l15_n802(x)
+ end
+end
+
+def fun_l14_n517(x)
+ if (x < 1)
+ fun_l15_n810(x)
+ else
+ fun_l15_n34(x)
+ end
+end
+
+def fun_l14_n518(x)
+ if (x < 1)
+ fun_l15_n908(x)
+ else
+ fun_l15_n623(x)
+ end
+end
+
+def fun_l14_n519(x)
+ if (x < 1)
+ fun_l15_n954(x)
+ else
+ fun_l15_n411(x)
+ end
+end
+
+def fun_l14_n520(x)
+ if (x < 1)
+ fun_l15_n880(x)
+ else
+ fun_l15_n38(x)
+ end
+end
+
+def fun_l14_n521(x)
+ if (x < 1)
+ fun_l15_n954(x)
+ else
+ fun_l15_n917(x)
+ end
+end
+
+def fun_l14_n522(x)
+ if (x < 1)
+ fun_l15_n693(x)
+ else
+ fun_l15_n950(x)
+ end
+end
+
+def fun_l14_n523(x)
+ if (x < 1)
+ fun_l15_n654(x)
+ else
+ fun_l15_n27(x)
+ end
+end
+
+def fun_l14_n524(x)
+ if (x < 1)
+ fun_l15_n316(x)
+ else
+ fun_l15_n873(x)
+ end
+end
+
+def fun_l14_n525(x)
+ if (x < 1)
+ fun_l15_n554(x)
+ else
+ fun_l15_n656(x)
+ end
+end
+
+def fun_l14_n526(x)
+ if (x < 1)
+ fun_l15_n739(x)
+ else
+ fun_l15_n69(x)
+ end
+end
+
+def fun_l14_n527(x)
+ if (x < 1)
+ fun_l15_n851(x)
+ else
+ fun_l15_n366(x)
+ end
+end
+
+def fun_l14_n528(x)
+ if (x < 1)
+ fun_l15_n113(x)
+ else
+ fun_l15_n271(x)
+ end
+end
+
+def fun_l14_n529(x)
+ if (x < 1)
+ fun_l15_n652(x)
+ else
+ fun_l15_n831(x)
+ end
+end
+
+def fun_l14_n530(x)
+ if (x < 1)
+ fun_l15_n746(x)
+ else
+ fun_l15_n841(x)
+ end
+end
+
+def fun_l14_n531(x)
+ if (x < 1)
+ fun_l15_n758(x)
+ else
+ fun_l15_n893(x)
+ end
+end
+
+def fun_l14_n532(x)
+ if (x < 1)
+ fun_l15_n976(x)
+ else
+ fun_l15_n514(x)
+ end
+end
+
+def fun_l14_n533(x)
+ if (x < 1)
+ fun_l15_n375(x)
+ else
+ fun_l15_n84(x)
+ end
+end
+
+def fun_l14_n534(x)
+ if (x < 1)
+ fun_l15_n226(x)
+ else
+ fun_l15_n770(x)
+ end
+end
+
+def fun_l14_n535(x)
+ if (x < 1)
+ fun_l15_n106(x)
+ else
+ fun_l15_n230(x)
+ end
+end
+
+def fun_l14_n536(x)
+ if (x < 1)
+ fun_l15_n18(x)
+ else
+ fun_l15_n335(x)
+ end
+end
+
+def fun_l14_n537(x)
+ if (x < 1)
+ fun_l15_n755(x)
+ else
+ fun_l15_n16(x)
+ end
+end
+
+def fun_l14_n538(x)
+ if (x < 1)
+ fun_l15_n653(x)
+ else
+ fun_l15_n486(x)
+ end
+end
+
+def fun_l14_n539(x)
+ if (x < 1)
+ fun_l15_n665(x)
+ else
+ fun_l15_n768(x)
+ end
+end
+
+def fun_l14_n540(x)
+ if (x < 1)
+ fun_l15_n282(x)
+ else
+ fun_l15_n780(x)
+ end
+end
+
+def fun_l14_n541(x)
+ if (x < 1)
+ fun_l15_n633(x)
+ else
+ fun_l15_n240(x)
+ end
+end
+
+def fun_l14_n542(x)
+ if (x < 1)
+ fun_l15_n141(x)
+ else
+ fun_l15_n474(x)
+ end
+end
+
+def fun_l14_n543(x)
+ if (x < 1)
+ fun_l15_n80(x)
+ else
+ fun_l15_n708(x)
+ end
+end
+
+def fun_l14_n544(x)
+ if (x < 1)
+ fun_l15_n309(x)
+ else
+ fun_l15_n808(x)
+ end
+end
+
+def fun_l14_n545(x)
+ if (x < 1)
+ fun_l15_n744(x)
+ else
+ fun_l15_n51(x)
+ end
+end
+
+def fun_l14_n546(x)
+ if (x < 1)
+ fun_l15_n571(x)
+ else
+ fun_l15_n581(x)
+ end
+end
+
+def fun_l14_n547(x)
+ if (x < 1)
+ fun_l15_n272(x)
+ else
+ fun_l15_n867(x)
+ end
+end
+
+def fun_l14_n548(x)
+ if (x < 1)
+ fun_l15_n96(x)
+ else
+ fun_l15_n83(x)
+ end
+end
+
+def fun_l14_n549(x)
+ if (x < 1)
+ fun_l15_n828(x)
+ else
+ fun_l15_n109(x)
+ end
+end
+
+def fun_l14_n550(x)
+ if (x < 1)
+ fun_l15_n94(x)
+ else
+ fun_l15_n839(x)
+ end
+end
+
+def fun_l14_n551(x)
+ if (x < 1)
+ fun_l15_n704(x)
+ else
+ fun_l15_n88(x)
+ end
+end
+
+def fun_l14_n552(x)
+ if (x < 1)
+ fun_l15_n531(x)
+ else
+ fun_l15_n865(x)
+ end
+end
+
+def fun_l14_n553(x)
+ if (x < 1)
+ fun_l15_n506(x)
+ else
+ fun_l15_n16(x)
+ end
+end
+
+def fun_l14_n554(x)
+ if (x < 1)
+ fun_l15_n583(x)
+ else
+ fun_l15_n186(x)
+ end
+end
+
+def fun_l14_n555(x)
+ if (x < 1)
+ fun_l15_n673(x)
+ else
+ fun_l15_n560(x)
+ end
+end
+
+def fun_l14_n556(x)
+ if (x < 1)
+ fun_l15_n947(x)
+ else
+ fun_l15_n268(x)
+ end
+end
+
+def fun_l14_n557(x)
+ if (x < 1)
+ fun_l15_n88(x)
+ else
+ fun_l15_n43(x)
+ end
+end
+
+def fun_l14_n558(x)
+ if (x < 1)
+ fun_l15_n690(x)
+ else
+ fun_l15_n145(x)
+ end
+end
+
+def fun_l14_n559(x)
+ if (x < 1)
+ fun_l15_n24(x)
+ else
+ fun_l15_n631(x)
+ end
+end
+
+def fun_l14_n560(x)
+ if (x < 1)
+ fun_l15_n381(x)
+ else
+ fun_l15_n3(x)
+ end
+end
+
+def fun_l14_n561(x)
+ if (x < 1)
+ fun_l15_n954(x)
+ else
+ fun_l15_n816(x)
+ end
+end
+
+def fun_l14_n562(x)
+ if (x < 1)
+ fun_l15_n948(x)
+ else
+ fun_l15_n886(x)
+ end
+end
+
+def fun_l14_n563(x)
+ if (x < 1)
+ fun_l15_n749(x)
+ else
+ fun_l15_n558(x)
+ end
+end
+
+def fun_l14_n564(x)
+ if (x < 1)
+ fun_l15_n715(x)
+ else
+ fun_l15_n157(x)
+ end
+end
+
+def fun_l14_n565(x)
+ if (x < 1)
+ fun_l15_n674(x)
+ else
+ fun_l15_n643(x)
+ end
+end
+
+def fun_l14_n566(x)
+ if (x < 1)
+ fun_l15_n151(x)
+ else
+ fun_l15_n686(x)
+ end
+end
+
+def fun_l14_n567(x)
+ if (x < 1)
+ fun_l15_n362(x)
+ else
+ fun_l15_n37(x)
+ end
+end
+
+def fun_l14_n568(x)
+ if (x < 1)
+ fun_l15_n132(x)
+ else
+ fun_l15_n146(x)
+ end
+end
+
+def fun_l14_n569(x)
+ if (x < 1)
+ fun_l15_n32(x)
+ else
+ fun_l15_n203(x)
+ end
+end
+
+def fun_l14_n570(x)
+ if (x < 1)
+ fun_l15_n477(x)
+ else
+ fun_l15_n403(x)
+ end
+end
+
+def fun_l14_n571(x)
+ if (x < 1)
+ fun_l15_n976(x)
+ else
+ fun_l15_n632(x)
+ end
+end
+
+def fun_l14_n572(x)
+ if (x < 1)
+ fun_l15_n735(x)
+ else
+ fun_l15_n100(x)
+ end
+end
+
+def fun_l14_n573(x)
+ if (x < 1)
+ fun_l15_n186(x)
+ else
+ fun_l15_n83(x)
+ end
+end
+
+def fun_l14_n574(x)
+ if (x < 1)
+ fun_l15_n246(x)
+ else
+ fun_l15_n573(x)
+ end
+end
+
+def fun_l14_n575(x)
+ if (x < 1)
+ fun_l15_n316(x)
+ else
+ fun_l15_n618(x)
+ end
+end
+
+def fun_l14_n576(x)
+ if (x < 1)
+ fun_l15_n426(x)
+ else
+ fun_l15_n616(x)
+ end
+end
+
+def fun_l14_n577(x)
+ if (x < 1)
+ fun_l15_n810(x)
+ else
+ fun_l15_n817(x)
+ end
+end
+
+def fun_l14_n578(x)
+ if (x < 1)
+ fun_l15_n262(x)
+ else
+ fun_l15_n815(x)
+ end
+end
+
+def fun_l14_n579(x)
+ if (x < 1)
+ fun_l15_n851(x)
+ else
+ fun_l15_n524(x)
+ end
+end
+
+def fun_l14_n580(x)
+ if (x < 1)
+ fun_l15_n748(x)
+ else
+ fun_l15_n843(x)
+ end
+end
+
+def fun_l14_n581(x)
+ if (x < 1)
+ fun_l15_n284(x)
+ else
+ fun_l15_n108(x)
+ end
+end
+
+def fun_l14_n582(x)
+ if (x < 1)
+ fun_l15_n976(x)
+ else
+ fun_l15_n294(x)
+ end
+end
+
+def fun_l14_n583(x)
+ if (x < 1)
+ fun_l15_n609(x)
+ else
+ fun_l15_n866(x)
+ end
+end
+
+def fun_l14_n584(x)
+ if (x < 1)
+ fun_l15_n293(x)
+ else
+ fun_l15_n980(x)
+ end
+end
+
+def fun_l14_n585(x)
+ if (x < 1)
+ fun_l15_n548(x)
+ else
+ fun_l15_n319(x)
+ end
+end
+
+def fun_l14_n586(x)
+ if (x < 1)
+ fun_l15_n566(x)
+ else
+ fun_l15_n843(x)
+ end
+end
+
+def fun_l14_n587(x)
+ if (x < 1)
+ fun_l15_n963(x)
+ else
+ fun_l15_n120(x)
+ end
+end
+
+def fun_l14_n588(x)
+ if (x < 1)
+ fun_l15_n149(x)
+ else
+ fun_l15_n17(x)
+ end
+end
+
+def fun_l14_n589(x)
+ if (x < 1)
+ fun_l15_n11(x)
+ else
+ fun_l15_n396(x)
+ end
+end
+
+def fun_l14_n590(x)
+ if (x < 1)
+ fun_l15_n40(x)
+ else
+ fun_l15_n687(x)
+ end
+end
+
+def fun_l14_n591(x)
+ if (x < 1)
+ fun_l15_n617(x)
+ else
+ fun_l15_n564(x)
+ end
+end
+
+def fun_l14_n592(x)
+ if (x < 1)
+ fun_l15_n26(x)
+ else
+ fun_l15_n812(x)
+ end
+end
+
+def fun_l14_n593(x)
+ if (x < 1)
+ fun_l15_n890(x)
+ else
+ fun_l15_n403(x)
+ end
+end
+
+def fun_l14_n594(x)
+ if (x < 1)
+ fun_l15_n455(x)
+ else
+ fun_l15_n248(x)
+ end
+end
+
+def fun_l14_n595(x)
+ if (x < 1)
+ fun_l15_n880(x)
+ else
+ fun_l15_n488(x)
+ end
+end
+
+def fun_l14_n596(x)
+ if (x < 1)
+ fun_l15_n412(x)
+ else
+ fun_l15_n986(x)
+ end
+end
+
+def fun_l14_n597(x)
+ if (x < 1)
+ fun_l15_n487(x)
+ else
+ fun_l15_n75(x)
+ end
+end
+
+def fun_l14_n598(x)
+ if (x < 1)
+ fun_l15_n911(x)
+ else
+ fun_l15_n789(x)
+ end
+end
+
+def fun_l14_n599(x)
+ if (x < 1)
+ fun_l15_n856(x)
+ else
+ fun_l15_n773(x)
+ end
+end
+
+def fun_l14_n600(x)
+ if (x < 1)
+ fun_l15_n57(x)
+ else
+ fun_l15_n538(x)
+ end
+end
+
+def fun_l14_n601(x)
+ if (x < 1)
+ fun_l15_n828(x)
+ else
+ fun_l15_n165(x)
+ end
+end
+
+def fun_l14_n602(x)
+ if (x < 1)
+ fun_l15_n230(x)
+ else
+ fun_l15_n326(x)
+ end
+end
+
+def fun_l14_n603(x)
+ if (x < 1)
+ fun_l15_n463(x)
+ else
+ fun_l15_n906(x)
+ end
+end
+
+def fun_l14_n604(x)
+ if (x < 1)
+ fun_l15_n584(x)
+ else
+ fun_l15_n205(x)
+ end
+end
+
+def fun_l14_n605(x)
+ if (x < 1)
+ fun_l15_n243(x)
+ else
+ fun_l15_n0(x)
+ end
+end
+
+def fun_l14_n606(x)
+ if (x < 1)
+ fun_l15_n258(x)
+ else
+ fun_l15_n574(x)
+ end
+end
+
+def fun_l14_n607(x)
+ if (x < 1)
+ fun_l15_n821(x)
+ else
+ fun_l15_n786(x)
+ end
+end
+
+def fun_l14_n608(x)
+ if (x < 1)
+ fun_l15_n553(x)
+ else
+ fun_l15_n183(x)
+ end
+end
+
+def fun_l14_n609(x)
+ if (x < 1)
+ fun_l15_n853(x)
+ else
+ fun_l15_n600(x)
+ end
+end
+
+def fun_l14_n610(x)
+ if (x < 1)
+ fun_l15_n606(x)
+ else
+ fun_l15_n76(x)
+ end
+end
+
+def fun_l14_n611(x)
+ if (x < 1)
+ fun_l15_n488(x)
+ else
+ fun_l15_n313(x)
+ end
+end
+
+def fun_l14_n612(x)
+ if (x < 1)
+ fun_l15_n261(x)
+ else
+ fun_l15_n320(x)
+ end
+end
+
+def fun_l14_n613(x)
+ if (x < 1)
+ fun_l15_n410(x)
+ else
+ fun_l15_n225(x)
+ end
+end
+
+def fun_l14_n614(x)
+ if (x < 1)
+ fun_l15_n653(x)
+ else
+ fun_l15_n699(x)
+ end
+end
+
+def fun_l14_n615(x)
+ if (x < 1)
+ fun_l15_n917(x)
+ else
+ fun_l15_n199(x)
+ end
+end
+
+def fun_l14_n616(x)
+ if (x < 1)
+ fun_l15_n583(x)
+ else
+ fun_l15_n676(x)
+ end
+end
+
+def fun_l14_n617(x)
+ if (x < 1)
+ fun_l15_n708(x)
+ else
+ fun_l15_n323(x)
+ end
+end
+
+def fun_l14_n618(x)
+ if (x < 1)
+ fun_l15_n935(x)
+ else
+ fun_l15_n570(x)
+ end
+end
+
+def fun_l14_n619(x)
+ if (x < 1)
+ fun_l15_n440(x)
+ else
+ fun_l15_n765(x)
+ end
+end
+
+def fun_l14_n620(x)
+ if (x < 1)
+ fun_l15_n621(x)
+ else
+ fun_l15_n239(x)
+ end
+end
+
+def fun_l14_n621(x)
+ if (x < 1)
+ fun_l15_n498(x)
+ else
+ fun_l15_n586(x)
+ end
+end
+
+def fun_l14_n622(x)
+ if (x < 1)
+ fun_l15_n786(x)
+ else
+ fun_l15_n894(x)
+ end
+end
+
+def fun_l14_n623(x)
+ if (x < 1)
+ fun_l15_n637(x)
+ else
+ fun_l15_n502(x)
+ end
+end
+
+def fun_l14_n624(x)
+ if (x < 1)
+ fun_l15_n982(x)
+ else
+ fun_l15_n690(x)
+ end
+end
+
+def fun_l14_n625(x)
+ if (x < 1)
+ fun_l15_n696(x)
+ else
+ fun_l15_n407(x)
+ end
+end
+
+def fun_l14_n626(x)
+ if (x < 1)
+ fun_l15_n324(x)
+ else
+ fun_l15_n937(x)
+ end
+end
+
+def fun_l14_n627(x)
+ if (x < 1)
+ fun_l15_n223(x)
+ else
+ fun_l15_n538(x)
+ end
+end
+
+def fun_l14_n628(x)
+ if (x < 1)
+ fun_l15_n865(x)
+ else
+ fun_l15_n459(x)
+ end
+end
+
+def fun_l14_n629(x)
+ if (x < 1)
+ fun_l15_n990(x)
+ else
+ fun_l15_n602(x)
+ end
+end
+
+def fun_l14_n630(x)
+ if (x < 1)
+ fun_l15_n289(x)
+ else
+ fun_l15_n608(x)
+ end
+end
+
+def fun_l14_n631(x)
+ if (x < 1)
+ fun_l15_n802(x)
+ else
+ fun_l15_n254(x)
+ end
+end
+
+def fun_l14_n632(x)
+ if (x < 1)
+ fun_l15_n8(x)
+ else
+ fun_l15_n114(x)
+ end
+end
+
+def fun_l14_n633(x)
+ if (x < 1)
+ fun_l15_n91(x)
+ else
+ fun_l15_n130(x)
+ end
+end
+
+def fun_l14_n634(x)
+ if (x < 1)
+ fun_l15_n691(x)
+ else
+ fun_l15_n961(x)
+ end
+end
+
+def fun_l14_n635(x)
+ if (x < 1)
+ fun_l15_n590(x)
+ else
+ fun_l15_n739(x)
+ end
+end
+
+def fun_l14_n636(x)
+ if (x < 1)
+ fun_l15_n552(x)
+ else
+ fun_l15_n526(x)
+ end
+end
+
+def fun_l14_n637(x)
+ if (x < 1)
+ fun_l15_n741(x)
+ else
+ fun_l15_n506(x)
+ end
+end
+
+def fun_l14_n638(x)
+ if (x < 1)
+ fun_l15_n458(x)
+ else
+ fun_l15_n1(x)
+ end
+end
+
+def fun_l14_n639(x)
+ if (x < 1)
+ fun_l15_n933(x)
+ else
+ fun_l15_n500(x)
+ end
+end
+
+def fun_l14_n640(x)
+ if (x < 1)
+ fun_l15_n267(x)
+ else
+ fun_l15_n450(x)
+ end
+end
+
+def fun_l14_n641(x)
+ if (x < 1)
+ fun_l15_n51(x)
+ else
+ fun_l15_n591(x)
+ end
+end
+
+def fun_l14_n642(x)
+ if (x < 1)
+ fun_l15_n262(x)
+ else
+ fun_l15_n254(x)
+ end
+end
+
+def fun_l14_n643(x)
+ if (x < 1)
+ fun_l15_n320(x)
+ else
+ fun_l15_n610(x)
+ end
+end
+
+def fun_l14_n644(x)
+ if (x < 1)
+ fun_l15_n137(x)
+ else
+ fun_l15_n802(x)
+ end
+end
+
+def fun_l14_n645(x)
+ if (x < 1)
+ fun_l15_n365(x)
+ else
+ fun_l15_n779(x)
+ end
+end
+
+def fun_l14_n646(x)
+ if (x < 1)
+ fun_l15_n863(x)
+ else
+ fun_l15_n273(x)
+ end
+end
+
+def fun_l14_n647(x)
+ if (x < 1)
+ fun_l15_n334(x)
+ else
+ fun_l15_n519(x)
+ end
+end
+
+def fun_l14_n648(x)
+ if (x < 1)
+ fun_l15_n232(x)
+ else
+ fun_l15_n876(x)
+ end
+end
+
+def fun_l14_n649(x)
+ if (x < 1)
+ fun_l15_n850(x)
+ else
+ fun_l15_n51(x)
+ end
+end
+
+def fun_l14_n650(x)
+ if (x < 1)
+ fun_l15_n610(x)
+ else
+ fun_l15_n52(x)
+ end
+end
+
+def fun_l14_n651(x)
+ if (x < 1)
+ fun_l15_n701(x)
+ else
+ fun_l15_n143(x)
+ end
+end
+
+def fun_l14_n652(x)
+ if (x < 1)
+ fun_l15_n933(x)
+ else
+ fun_l15_n748(x)
+ end
+end
+
+def fun_l14_n653(x)
+ if (x < 1)
+ fun_l15_n280(x)
+ else
+ fun_l15_n632(x)
+ end
+end
+
+def fun_l14_n654(x)
+ if (x < 1)
+ fun_l15_n361(x)
+ else
+ fun_l15_n107(x)
+ end
+end
+
+def fun_l14_n655(x)
+ if (x < 1)
+ fun_l15_n743(x)
+ else
+ fun_l15_n899(x)
+ end
+end
+
+def fun_l14_n656(x)
+ if (x < 1)
+ fun_l15_n383(x)
+ else
+ fun_l15_n441(x)
+ end
+end
+
+def fun_l14_n657(x)
+ if (x < 1)
+ fun_l15_n244(x)
+ else
+ fun_l15_n349(x)
+ end
+end
+
+def fun_l14_n658(x)
+ if (x < 1)
+ fun_l15_n69(x)
+ else
+ fun_l15_n758(x)
+ end
+end
+
+def fun_l14_n659(x)
+ if (x < 1)
+ fun_l15_n570(x)
+ else
+ fun_l15_n760(x)
+ end
+end
+
+def fun_l14_n660(x)
+ if (x < 1)
+ fun_l15_n554(x)
+ else
+ fun_l15_n258(x)
+ end
+end
+
+def fun_l14_n661(x)
+ if (x < 1)
+ fun_l15_n417(x)
+ else
+ fun_l15_n934(x)
+ end
+end
+
+def fun_l14_n662(x)
+ if (x < 1)
+ fun_l15_n717(x)
+ else
+ fun_l15_n99(x)
+ end
+end
+
+def fun_l14_n663(x)
+ if (x < 1)
+ fun_l15_n882(x)
+ else
+ fun_l15_n515(x)
+ end
+end
+
+def fun_l14_n664(x)
+ if (x < 1)
+ fun_l15_n623(x)
+ else
+ fun_l15_n679(x)
+ end
+end
+
+def fun_l14_n665(x)
+ if (x < 1)
+ fun_l15_n974(x)
+ else
+ fun_l15_n127(x)
+ end
+end
+
+def fun_l14_n666(x)
+ if (x < 1)
+ fun_l15_n592(x)
+ else
+ fun_l15_n322(x)
+ end
+end
+
+def fun_l14_n667(x)
+ if (x < 1)
+ fun_l15_n698(x)
+ else
+ fun_l15_n670(x)
+ end
+end
+
+def fun_l14_n668(x)
+ if (x < 1)
+ fun_l15_n164(x)
+ else
+ fun_l15_n670(x)
+ end
+end
+
+def fun_l14_n669(x)
+ if (x < 1)
+ fun_l15_n837(x)
+ else
+ fun_l15_n113(x)
+ end
+end
+
+def fun_l14_n670(x)
+ if (x < 1)
+ fun_l15_n200(x)
+ else
+ fun_l15_n486(x)
+ end
+end
+
+def fun_l14_n671(x)
+ if (x < 1)
+ fun_l15_n593(x)
+ else
+ fun_l15_n822(x)
+ end
+end
+
+def fun_l14_n672(x)
+ if (x < 1)
+ fun_l15_n191(x)
+ else
+ fun_l15_n842(x)
+ end
+end
+
+def fun_l14_n673(x)
+ if (x < 1)
+ fun_l15_n391(x)
+ else
+ fun_l15_n119(x)
+ end
+end
+
+def fun_l14_n674(x)
+ if (x < 1)
+ fun_l15_n914(x)
+ else
+ fun_l15_n453(x)
+ end
+end
+
+def fun_l14_n675(x)
+ if (x < 1)
+ fun_l15_n73(x)
+ else
+ fun_l15_n366(x)
+ end
+end
+
+def fun_l14_n676(x)
+ if (x < 1)
+ fun_l15_n58(x)
+ else
+ fun_l15_n804(x)
+ end
+end
+
+def fun_l14_n677(x)
+ if (x < 1)
+ fun_l15_n905(x)
+ else
+ fun_l15_n969(x)
+ end
+end
+
+def fun_l14_n678(x)
+ if (x < 1)
+ fun_l15_n301(x)
+ else
+ fun_l15_n838(x)
+ end
+end
+
+def fun_l14_n679(x)
+ if (x < 1)
+ fun_l15_n14(x)
+ else
+ fun_l15_n567(x)
+ end
+end
+
+def fun_l14_n680(x)
+ if (x < 1)
+ fun_l15_n262(x)
+ else
+ fun_l15_n325(x)
+ end
+end
+
+def fun_l14_n681(x)
+ if (x < 1)
+ fun_l15_n985(x)
+ else
+ fun_l15_n181(x)
+ end
+end
+
+def fun_l14_n682(x)
+ if (x < 1)
+ fun_l15_n197(x)
+ else
+ fun_l15_n175(x)
+ end
+end
+
+def fun_l14_n683(x)
+ if (x < 1)
+ fun_l15_n714(x)
+ else
+ fun_l15_n276(x)
+ end
+end
+
+def fun_l14_n684(x)
+ if (x < 1)
+ fun_l15_n720(x)
+ else
+ fun_l15_n517(x)
+ end
+end
+
+def fun_l14_n685(x)
+ if (x < 1)
+ fun_l15_n351(x)
+ else
+ fun_l15_n917(x)
+ end
+end
+
+def fun_l14_n686(x)
+ if (x < 1)
+ fun_l15_n199(x)
+ else
+ fun_l15_n163(x)
+ end
+end
+
+def fun_l14_n687(x)
+ if (x < 1)
+ fun_l15_n769(x)
+ else
+ fun_l15_n205(x)
+ end
+end
+
+def fun_l14_n688(x)
+ if (x < 1)
+ fun_l15_n840(x)
+ else
+ fun_l15_n756(x)
+ end
+end
+
+def fun_l14_n689(x)
+ if (x < 1)
+ fun_l15_n306(x)
+ else
+ fun_l15_n273(x)
+ end
+end
+
+def fun_l14_n690(x)
+ if (x < 1)
+ fun_l15_n549(x)
+ else
+ fun_l15_n192(x)
+ end
+end
+
+def fun_l14_n691(x)
+ if (x < 1)
+ fun_l15_n167(x)
+ else
+ fun_l15_n403(x)
+ end
+end
+
+def fun_l14_n692(x)
+ if (x < 1)
+ fun_l15_n175(x)
+ else
+ fun_l15_n361(x)
+ end
+end
+
+def fun_l14_n693(x)
+ if (x < 1)
+ fun_l15_n208(x)
+ else
+ fun_l15_n582(x)
+ end
+end
+
+def fun_l14_n694(x)
+ if (x < 1)
+ fun_l15_n347(x)
+ else
+ fun_l15_n962(x)
+ end
+end
+
+def fun_l14_n695(x)
+ if (x < 1)
+ fun_l15_n381(x)
+ else
+ fun_l15_n865(x)
+ end
+end
+
+def fun_l14_n696(x)
+ if (x < 1)
+ fun_l15_n76(x)
+ else
+ fun_l15_n140(x)
+ end
+end
+
+def fun_l14_n697(x)
+ if (x < 1)
+ fun_l15_n801(x)
+ else
+ fun_l15_n267(x)
+ end
+end
+
+def fun_l14_n698(x)
+ if (x < 1)
+ fun_l15_n137(x)
+ else
+ fun_l15_n518(x)
+ end
+end
+
+def fun_l14_n699(x)
+ if (x < 1)
+ fun_l15_n56(x)
+ else
+ fun_l15_n758(x)
+ end
+end
+
+def fun_l14_n700(x)
+ if (x < 1)
+ fun_l15_n178(x)
+ else
+ fun_l15_n641(x)
+ end
+end
+
+def fun_l14_n701(x)
+ if (x < 1)
+ fun_l15_n815(x)
+ else
+ fun_l15_n692(x)
+ end
+end
+
+def fun_l14_n702(x)
+ if (x < 1)
+ fun_l15_n355(x)
+ else
+ fun_l15_n338(x)
+ end
+end
+
+def fun_l14_n703(x)
+ if (x < 1)
+ fun_l15_n894(x)
+ else
+ fun_l15_n843(x)
+ end
+end
+
+def fun_l14_n704(x)
+ if (x < 1)
+ fun_l15_n728(x)
+ else
+ fun_l15_n140(x)
+ end
+end
+
+def fun_l14_n705(x)
+ if (x < 1)
+ fun_l15_n304(x)
+ else
+ fun_l15_n237(x)
+ end
+end
+
+def fun_l14_n706(x)
+ if (x < 1)
+ fun_l15_n57(x)
+ else
+ fun_l15_n947(x)
+ end
+end
+
+def fun_l14_n707(x)
+ if (x < 1)
+ fun_l15_n90(x)
+ else
+ fun_l15_n831(x)
+ end
+end
+
+def fun_l14_n708(x)
+ if (x < 1)
+ fun_l15_n487(x)
+ else
+ fun_l15_n937(x)
+ end
+end
+
+def fun_l14_n709(x)
+ if (x < 1)
+ fun_l15_n898(x)
+ else
+ fun_l15_n151(x)
+ end
+end
+
+def fun_l14_n710(x)
+ if (x < 1)
+ fun_l15_n306(x)
+ else
+ fun_l15_n687(x)
+ end
+end
+
+def fun_l14_n711(x)
+ if (x < 1)
+ fun_l15_n151(x)
+ else
+ fun_l15_n239(x)
+ end
+end
+
+def fun_l14_n712(x)
+ if (x < 1)
+ fun_l15_n512(x)
+ else
+ fun_l15_n203(x)
+ end
+end
+
+def fun_l14_n713(x)
+ if (x < 1)
+ fun_l15_n611(x)
+ else
+ fun_l15_n474(x)
+ end
+end
+
+def fun_l14_n714(x)
+ if (x < 1)
+ fun_l15_n109(x)
+ else
+ fun_l15_n149(x)
+ end
+end
+
+def fun_l14_n715(x)
+ if (x < 1)
+ fun_l15_n187(x)
+ else
+ fun_l15_n563(x)
+ end
+end
+
+def fun_l14_n716(x)
+ if (x < 1)
+ fun_l15_n877(x)
+ else
+ fun_l15_n644(x)
+ end
+end
+
+def fun_l14_n717(x)
+ if (x < 1)
+ fun_l15_n960(x)
+ else
+ fun_l15_n471(x)
+ end
+end
+
+def fun_l14_n718(x)
+ if (x < 1)
+ fun_l15_n250(x)
+ else
+ fun_l15_n93(x)
+ end
+end
+
+def fun_l14_n719(x)
+ if (x < 1)
+ fun_l15_n177(x)
+ else
+ fun_l15_n14(x)
+ end
+end
+
+def fun_l14_n720(x)
+ if (x < 1)
+ fun_l15_n912(x)
+ else
+ fun_l15_n95(x)
+ end
+end
+
+def fun_l14_n721(x)
+ if (x < 1)
+ fun_l15_n776(x)
+ else
+ fun_l15_n256(x)
+ end
+end
+
+def fun_l14_n722(x)
+ if (x < 1)
+ fun_l15_n968(x)
+ else
+ fun_l15_n857(x)
+ end
+end
+
+def fun_l14_n723(x)
+ if (x < 1)
+ fun_l15_n402(x)
+ else
+ fun_l15_n60(x)
+ end
+end
+
+def fun_l14_n724(x)
+ if (x < 1)
+ fun_l15_n345(x)
+ else
+ fun_l15_n688(x)
+ end
+end
+
+def fun_l14_n725(x)
+ if (x < 1)
+ fun_l15_n72(x)
+ else
+ fun_l15_n943(x)
+ end
+end
+
+def fun_l14_n726(x)
+ if (x < 1)
+ fun_l15_n535(x)
+ else
+ fun_l15_n916(x)
+ end
+end
+
+def fun_l14_n727(x)
+ if (x < 1)
+ fun_l15_n717(x)
+ else
+ fun_l15_n354(x)
+ end
+end
+
+def fun_l14_n728(x)
+ if (x < 1)
+ fun_l15_n679(x)
+ else
+ fun_l15_n348(x)
+ end
+end
+
+def fun_l14_n729(x)
+ if (x < 1)
+ fun_l15_n187(x)
+ else
+ fun_l15_n910(x)
+ end
+end
+
+def fun_l14_n730(x)
+ if (x < 1)
+ fun_l15_n151(x)
+ else
+ fun_l15_n689(x)
+ end
+end
+
+def fun_l14_n731(x)
+ if (x < 1)
+ fun_l15_n653(x)
+ else
+ fun_l15_n380(x)
+ end
+end
+
+def fun_l14_n732(x)
+ if (x < 1)
+ fun_l15_n627(x)
+ else
+ fun_l15_n214(x)
+ end
+end
+
+def fun_l14_n733(x)
+ if (x < 1)
+ fun_l15_n53(x)
+ else
+ fun_l15_n882(x)
+ end
+end
+
+def fun_l14_n734(x)
+ if (x < 1)
+ fun_l15_n628(x)
+ else
+ fun_l15_n632(x)
+ end
+end
+
+def fun_l14_n735(x)
+ if (x < 1)
+ fun_l15_n415(x)
+ else
+ fun_l15_n719(x)
+ end
+end
+
+def fun_l14_n736(x)
+ if (x < 1)
+ fun_l15_n474(x)
+ else
+ fun_l15_n966(x)
+ end
+end
+
+def fun_l14_n737(x)
+ if (x < 1)
+ fun_l15_n140(x)
+ else
+ fun_l15_n79(x)
+ end
+end
+
+def fun_l14_n738(x)
+ if (x < 1)
+ fun_l15_n682(x)
+ else
+ fun_l15_n788(x)
+ end
+end
+
+def fun_l14_n739(x)
+ if (x < 1)
+ fun_l15_n62(x)
+ else
+ fun_l15_n289(x)
+ end
+end
+
+def fun_l14_n740(x)
+ if (x < 1)
+ fun_l15_n256(x)
+ else
+ fun_l15_n53(x)
+ end
+end
+
+def fun_l14_n741(x)
+ if (x < 1)
+ fun_l15_n571(x)
+ else
+ fun_l15_n912(x)
+ end
+end
+
+def fun_l14_n742(x)
+ if (x < 1)
+ fun_l15_n477(x)
+ else
+ fun_l15_n757(x)
+ end
+end
+
+def fun_l14_n743(x)
+ if (x < 1)
+ fun_l15_n914(x)
+ else
+ fun_l15_n216(x)
+ end
+end
+
+def fun_l14_n744(x)
+ if (x < 1)
+ fun_l15_n474(x)
+ else
+ fun_l15_n860(x)
+ end
+end
+
+def fun_l14_n745(x)
+ if (x < 1)
+ fun_l15_n303(x)
+ else
+ fun_l15_n417(x)
+ end
+end
+
+def fun_l14_n746(x)
+ if (x < 1)
+ fun_l15_n601(x)
+ else
+ fun_l15_n872(x)
+ end
+end
+
+def fun_l14_n747(x)
+ if (x < 1)
+ fun_l15_n70(x)
+ else
+ fun_l15_n245(x)
+ end
+end
+
+def fun_l14_n748(x)
+ if (x < 1)
+ fun_l15_n628(x)
+ else
+ fun_l15_n503(x)
+ end
+end
+
+def fun_l14_n749(x)
+ if (x < 1)
+ fun_l15_n965(x)
+ else
+ fun_l15_n89(x)
+ end
+end
+
+def fun_l14_n750(x)
+ if (x < 1)
+ fun_l15_n910(x)
+ else
+ fun_l15_n386(x)
+ end
+end
+
+def fun_l14_n751(x)
+ if (x < 1)
+ fun_l15_n444(x)
+ else
+ fun_l15_n765(x)
+ end
+end
+
+def fun_l14_n752(x)
+ if (x < 1)
+ fun_l15_n481(x)
+ else
+ fun_l15_n356(x)
+ end
+end
+
+def fun_l14_n753(x)
+ if (x < 1)
+ fun_l15_n45(x)
+ else
+ fun_l15_n644(x)
+ end
+end
+
+def fun_l14_n754(x)
+ if (x < 1)
+ fun_l15_n262(x)
+ else
+ fun_l15_n681(x)
+ end
+end
+
+def fun_l14_n755(x)
+ if (x < 1)
+ fun_l15_n984(x)
+ else
+ fun_l15_n488(x)
+ end
+end
+
+def fun_l14_n756(x)
+ if (x < 1)
+ fun_l15_n751(x)
+ else
+ fun_l15_n165(x)
+ end
+end
+
+def fun_l14_n757(x)
+ if (x < 1)
+ fun_l15_n716(x)
+ else
+ fun_l15_n483(x)
+ end
+end
+
+def fun_l14_n758(x)
+ if (x < 1)
+ fun_l15_n863(x)
+ else
+ fun_l15_n841(x)
+ end
+end
+
+def fun_l14_n759(x)
+ if (x < 1)
+ fun_l15_n654(x)
+ else
+ fun_l15_n782(x)
+ end
+end
+
+def fun_l14_n760(x)
+ if (x < 1)
+ fun_l15_n390(x)
+ else
+ fun_l15_n254(x)
+ end
+end
+
+def fun_l14_n761(x)
+ if (x < 1)
+ fun_l15_n888(x)
+ else
+ fun_l15_n739(x)
+ end
+end
+
+def fun_l14_n762(x)
+ if (x < 1)
+ fun_l15_n775(x)
+ else
+ fun_l15_n310(x)
+ end
+end
+
+def fun_l14_n763(x)
+ if (x < 1)
+ fun_l15_n713(x)
+ else
+ fun_l15_n246(x)
+ end
+end
+
+def fun_l14_n764(x)
+ if (x < 1)
+ fun_l15_n318(x)
+ else
+ fun_l15_n121(x)
+ end
+end
+
+def fun_l14_n765(x)
+ if (x < 1)
+ fun_l15_n424(x)
+ else
+ fun_l15_n538(x)
+ end
+end
+
+def fun_l14_n766(x)
+ if (x < 1)
+ fun_l15_n58(x)
+ else
+ fun_l15_n487(x)
+ end
+end
+
+def fun_l14_n767(x)
+ if (x < 1)
+ fun_l15_n48(x)
+ else
+ fun_l15_n776(x)
+ end
+end
+
+def fun_l14_n768(x)
+ if (x < 1)
+ fun_l15_n156(x)
+ else
+ fun_l15_n340(x)
+ end
+end
+
+def fun_l14_n769(x)
+ if (x < 1)
+ fun_l15_n66(x)
+ else
+ fun_l15_n655(x)
+ end
+end
+
+def fun_l14_n770(x)
+ if (x < 1)
+ fun_l15_n15(x)
+ else
+ fun_l15_n392(x)
+ end
+end
+
+def fun_l14_n771(x)
+ if (x < 1)
+ fun_l15_n331(x)
+ else
+ fun_l15_n114(x)
+ end
+end
+
+def fun_l14_n772(x)
+ if (x < 1)
+ fun_l15_n267(x)
+ else
+ fun_l15_n711(x)
+ end
+end
+
+def fun_l14_n773(x)
+ if (x < 1)
+ fun_l15_n567(x)
+ else
+ fun_l15_n869(x)
+ end
+end
+
+def fun_l14_n774(x)
+ if (x < 1)
+ fun_l15_n915(x)
+ else
+ fun_l15_n594(x)
+ end
+end
+
+def fun_l14_n775(x)
+ if (x < 1)
+ fun_l15_n139(x)
+ else
+ fun_l15_n285(x)
+ end
+end
+
+def fun_l14_n776(x)
+ if (x < 1)
+ fun_l15_n994(x)
+ else
+ fun_l15_n116(x)
+ end
+end
+
+def fun_l14_n777(x)
+ if (x < 1)
+ fun_l15_n999(x)
+ else
+ fun_l15_n356(x)
+ end
+end
+
+def fun_l14_n778(x)
+ if (x < 1)
+ fun_l15_n46(x)
+ else
+ fun_l15_n845(x)
+ end
+end
+
+def fun_l14_n779(x)
+ if (x < 1)
+ fun_l15_n313(x)
+ else
+ fun_l15_n785(x)
+ end
+end
+
+def fun_l14_n780(x)
+ if (x < 1)
+ fun_l15_n282(x)
+ else
+ fun_l15_n489(x)
+ end
+end
+
+def fun_l14_n781(x)
+ if (x < 1)
+ fun_l15_n101(x)
+ else
+ fun_l15_n928(x)
+ end
+end
+
+def fun_l14_n782(x)
+ if (x < 1)
+ fun_l15_n307(x)
+ else
+ fun_l15_n808(x)
+ end
+end
+
+def fun_l14_n783(x)
+ if (x < 1)
+ fun_l15_n475(x)
+ else
+ fun_l15_n347(x)
+ end
+end
+
+def fun_l14_n784(x)
+ if (x < 1)
+ fun_l15_n404(x)
+ else
+ fun_l15_n65(x)
+ end
+end
+
+def fun_l14_n785(x)
+ if (x < 1)
+ fun_l15_n61(x)
+ else
+ fun_l15_n145(x)
+ end
+end
+
+def fun_l14_n786(x)
+ if (x < 1)
+ fun_l15_n919(x)
+ else
+ fun_l15_n700(x)
+ end
+end
+
+def fun_l14_n787(x)
+ if (x < 1)
+ fun_l15_n333(x)
+ else
+ fun_l15_n702(x)
+ end
+end
+
+def fun_l14_n788(x)
+ if (x < 1)
+ fun_l15_n924(x)
+ else
+ fun_l15_n354(x)
+ end
+end
+
+def fun_l14_n789(x)
+ if (x < 1)
+ fun_l15_n171(x)
+ else
+ fun_l15_n643(x)
+ end
+end
+
+def fun_l14_n790(x)
+ if (x < 1)
+ fun_l15_n852(x)
+ else
+ fun_l15_n421(x)
+ end
+end
+
+def fun_l14_n791(x)
+ if (x < 1)
+ fun_l15_n706(x)
+ else
+ fun_l15_n260(x)
+ end
+end
+
+def fun_l14_n792(x)
+ if (x < 1)
+ fun_l15_n908(x)
+ else
+ fun_l15_n145(x)
+ end
+end
+
+def fun_l14_n793(x)
+ if (x < 1)
+ fun_l15_n802(x)
+ else
+ fun_l15_n365(x)
+ end
+end
+
+def fun_l14_n794(x)
+ if (x < 1)
+ fun_l15_n727(x)
+ else
+ fun_l15_n758(x)
+ end
+end
+
+def fun_l14_n795(x)
+ if (x < 1)
+ fun_l15_n463(x)
+ else
+ fun_l15_n58(x)
+ end
+end
+
+def fun_l14_n796(x)
+ if (x < 1)
+ fun_l15_n413(x)
+ else
+ fun_l15_n525(x)
+ end
+end
+
+def fun_l14_n797(x)
+ if (x < 1)
+ fun_l15_n970(x)
+ else
+ fun_l15_n480(x)
+ end
+end
+
+def fun_l14_n798(x)
+ if (x < 1)
+ fun_l15_n476(x)
+ else
+ fun_l15_n316(x)
+ end
+end
+
+def fun_l14_n799(x)
+ if (x < 1)
+ fun_l15_n578(x)
+ else
+ fun_l15_n586(x)
+ end
+end
+
+def fun_l14_n800(x)
+ if (x < 1)
+ fun_l15_n848(x)
+ else
+ fun_l15_n286(x)
+ end
+end
+
+def fun_l14_n801(x)
+ if (x < 1)
+ fun_l15_n745(x)
+ else
+ fun_l15_n144(x)
+ end
+end
+
+def fun_l14_n802(x)
+ if (x < 1)
+ fun_l15_n369(x)
+ else
+ fun_l15_n819(x)
+ end
+end
+
+def fun_l14_n803(x)
+ if (x < 1)
+ fun_l15_n498(x)
+ else
+ fun_l15_n206(x)
+ end
+end
+
+def fun_l14_n804(x)
+ if (x < 1)
+ fun_l15_n817(x)
+ else
+ fun_l15_n707(x)
+ end
+end
+
+def fun_l14_n805(x)
+ if (x < 1)
+ fun_l15_n935(x)
+ else
+ fun_l15_n43(x)
+ end
+end
+
+def fun_l14_n806(x)
+ if (x < 1)
+ fun_l15_n285(x)
+ else
+ fun_l15_n605(x)
+ end
+end
+
+def fun_l14_n807(x)
+ if (x < 1)
+ fun_l15_n392(x)
+ else
+ fun_l15_n672(x)
+ end
+end
+
+def fun_l14_n808(x)
+ if (x < 1)
+ fun_l15_n965(x)
+ else
+ fun_l15_n610(x)
+ end
+end
+
+def fun_l14_n809(x)
+ if (x < 1)
+ fun_l15_n266(x)
+ else
+ fun_l15_n233(x)
+ end
+end
+
+def fun_l14_n810(x)
+ if (x < 1)
+ fun_l15_n514(x)
+ else
+ fun_l15_n204(x)
+ end
+end
+
+def fun_l14_n811(x)
+ if (x < 1)
+ fun_l15_n973(x)
+ else
+ fun_l15_n768(x)
+ end
+end
+
+def fun_l14_n812(x)
+ if (x < 1)
+ fun_l15_n241(x)
+ else
+ fun_l15_n329(x)
+ end
+end
+
+def fun_l14_n813(x)
+ if (x < 1)
+ fun_l15_n150(x)
+ else
+ fun_l15_n264(x)
+ end
+end
+
+def fun_l14_n814(x)
+ if (x < 1)
+ fun_l15_n205(x)
+ else
+ fun_l15_n595(x)
+ end
+end
+
+def fun_l14_n815(x)
+ if (x < 1)
+ fun_l15_n452(x)
+ else
+ fun_l15_n288(x)
+ end
+end
+
+def fun_l14_n816(x)
+ if (x < 1)
+ fun_l15_n385(x)
+ else
+ fun_l15_n633(x)
+ end
+end
+
+def fun_l14_n817(x)
+ if (x < 1)
+ fun_l15_n290(x)
+ else
+ fun_l15_n656(x)
+ end
+end
+
+def fun_l14_n818(x)
+ if (x < 1)
+ fun_l15_n463(x)
+ else
+ fun_l15_n785(x)
+ end
+end
+
+def fun_l14_n819(x)
+ if (x < 1)
+ fun_l15_n183(x)
+ else
+ fun_l15_n787(x)
+ end
+end
+
+def fun_l14_n820(x)
+ if (x < 1)
+ fun_l15_n515(x)
+ else
+ fun_l15_n104(x)
+ end
+end
+
+def fun_l14_n821(x)
+ if (x < 1)
+ fun_l15_n848(x)
+ else
+ fun_l15_n745(x)
+ end
+end
+
+def fun_l14_n822(x)
+ if (x < 1)
+ fun_l15_n268(x)
+ else
+ fun_l15_n140(x)
+ end
+end
+
+def fun_l14_n823(x)
+ if (x < 1)
+ fun_l15_n607(x)
+ else
+ fun_l15_n785(x)
+ end
+end
+
+def fun_l14_n824(x)
+ if (x < 1)
+ fun_l15_n261(x)
+ else
+ fun_l15_n659(x)
+ end
+end
+
+def fun_l14_n825(x)
+ if (x < 1)
+ fun_l15_n628(x)
+ else
+ fun_l15_n427(x)
+ end
+end
+
+def fun_l14_n826(x)
+ if (x < 1)
+ fun_l15_n293(x)
+ else
+ fun_l15_n141(x)
+ end
+end
+
+def fun_l14_n827(x)
+ if (x < 1)
+ fun_l15_n112(x)
+ else
+ fun_l15_n135(x)
+ end
+end
+
+def fun_l14_n828(x)
+ if (x < 1)
+ fun_l15_n779(x)
+ else
+ fun_l15_n323(x)
+ end
+end
+
+def fun_l14_n829(x)
+ if (x < 1)
+ fun_l15_n295(x)
+ else
+ fun_l15_n753(x)
+ end
+end
+
+def fun_l14_n830(x)
+ if (x < 1)
+ fun_l15_n683(x)
+ else
+ fun_l15_n303(x)
+ end
+end
+
+def fun_l14_n831(x)
+ if (x < 1)
+ fun_l15_n522(x)
+ else
+ fun_l15_n983(x)
+ end
+end
+
+def fun_l14_n832(x)
+ if (x < 1)
+ fun_l15_n338(x)
+ else
+ fun_l15_n835(x)
+ end
+end
+
+def fun_l14_n833(x)
+ if (x < 1)
+ fun_l15_n888(x)
+ else
+ fun_l15_n95(x)
+ end
+end
+
+def fun_l14_n834(x)
+ if (x < 1)
+ fun_l15_n510(x)
+ else
+ fun_l15_n342(x)
+ end
+end
+
+def fun_l14_n835(x)
+ if (x < 1)
+ fun_l15_n168(x)
+ else
+ fun_l15_n864(x)
+ end
+end
+
+def fun_l14_n836(x)
+ if (x < 1)
+ fun_l15_n392(x)
+ else
+ fun_l15_n779(x)
+ end
+end
+
+def fun_l14_n837(x)
+ if (x < 1)
+ fun_l15_n176(x)
+ else
+ fun_l15_n354(x)
+ end
+end
+
+def fun_l14_n838(x)
+ if (x < 1)
+ fun_l15_n477(x)
+ else
+ fun_l15_n95(x)
+ end
+end
+
+def fun_l14_n839(x)
+ if (x < 1)
+ fun_l15_n223(x)
+ else
+ fun_l15_n213(x)
+ end
+end
+
+def fun_l14_n840(x)
+ if (x < 1)
+ fun_l15_n228(x)
+ else
+ fun_l15_n897(x)
+ end
+end
+
+def fun_l14_n841(x)
+ if (x < 1)
+ fun_l15_n551(x)
+ else
+ fun_l15_n649(x)
+ end
+end
+
+def fun_l14_n842(x)
+ if (x < 1)
+ fun_l15_n541(x)
+ else
+ fun_l15_n741(x)
+ end
+end
+
+def fun_l14_n843(x)
+ if (x < 1)
+ fun_l15_n464(x)
+ else
+ fun_l15_n403(x)
+ end
+end
+
+def fun_l14_n844(x)
+ if (x < 1)
+ fun_l15_n853(x)
+ else
+ fun_l15_n223(x)
+ end
+end
+
+def fun_l14_n845(x)
+ if (x < 1)
+ fun_l15_n443(x)
+ else
+ fun_l15_n441(x)
+ end
+end
+
+def fun_l14_n846(x)
+ if (x < 1)
+ fun_l15_n864(x)
+ else
+ fun_l15_n912(x)
+ end
+end
+
+def fun_l14_n847(x)
+ if (x < 1)
+ fun_l15_n631(x)
+ else
+ fun_l15_n764(x)
+ end
+end
+
+def fun_l14_n848(x)
+ if (x < 1)
+ fun_l15_n198(x)
+ else
+ fun_l15_n825(x)
+ end
+end
+
+def fun_l14_n849(x)
+ if (x < 1)
+ fun_l15_n525(x)
+ else
+ fun_l15_n31(x)
+ end
+end
+
+def fun_l14_n850(x)
+ if (x < 1)
+ fun_l15_n928(x)
+ else
+ fun_l15_n893(x)
+ end
+end
+
+def fun_l14_n851(x)
+ if (x < 1)
+ fun_l15_n499(x)
+ else
+ fun_l15_n297(x)
+ end
+end
+
+def fun_l14_n852(x)
+ if (x < 1)
+ fun_l15_n777(x)
+ else
+ fun_l15_n239(x)
+ end
+end
+
+def fun_l14_n853(x)
+ if (x < 1)
+ fun_l15_n120(x)
+ else
+ fun_l15_n134(x)
+ end
+end
+
+def fun_l14_n854(x)
+ if (x < 1)
+ fun_l15_n613(x)
+ else
+ fun_l15_n324(x)
+ end
+end
+
+def fun_l14_n855(x)
+ if (x < 1)
+ fun_l15_n22(x)
+ else
+ fun_l15_n192(x)
+ end
+end
+
+def fun_l14_n856(x)
+ if (x < 1)
+ fun_l15_n609(x)
+ else
+ fun_l15_n284(x)
+ end
+end
+
+def fun_l14_n857(x)
+ if (x < 1)
+ fun_l15_n130(x)
+ else
+ fun_l15_n256(x)
+ end
+end
+
+def fun_l14_n858(x)
+ if (x < 1)
+ fun_l15_n40(x)
+ else
+ fun_l15_n340(x)
+ end
+end
+
+def fun_l14_n859(x)
+ if (x < 1)
+ fun_l15_n644(x)
+ else
+ fun_l15_n522(x)
+ end
+end
+
+def fun_l14_n860(x)
+ if (x < 1)
+ fun_l15_n363(x)
+ else
+ fun_l15_n52(x)
+ end
+end
+
+def fun_l14_n861(x)
+ if (x < 1)
+ fun_l15_n166(x)
+ else
+ fun_l15_n452(x)
+ end
+end
+
+def fun_l14_n862(x)
+ if (x < 1)
+ fun_l15_n552(x)
+ else
+ fun_l15_n534(x)
+ end
+end
+
+def fun_l14_n863(x)
+ if (x < 1)
+ fun_l15_n489(x)
+ else
+ fun_l15_n181(x)
+ end
+end
+
+def fun_l14_n864(x)
+ if (x < 1)
+ fun_l15_n584(x)
+ else
+ fun_l15_n871(x)
+ end
+end
+
+def fun_l14_n865(x)
+ if (x < 1)
+ fun_l15_n868(x)
+ else
+ fun_l15_n807(x)
+ end
+end
+
+def fun_l14_n866(x)
+ if (x < 1)
+ fun_l15_n159(x)
+ else
+ fun_l15_n226(x)
+ end
+end
+
+def fun_l14_n867(x)
+ if (x < 1)
+ fun_l15_n440(x)
+ else
+ fun_l15_n318(x)
+ end
+end
+
+def fun_l14_n868(x)
+ if (x < 1)
+ fun_l15_n603(x)
+ else
+ fun_l15_n440(x)
+ end
+end
+
+def fun_l14_n869(x)
+ if (x < 1)
+ fun_l15_n478(x)
+ else
+ fun_l15_n896(x)
+ end
+end
+
+def fun_l14_n870(x)
+ if (x < 1)
+ fun_l15_n593(x)
+ else
+ fun_l15_n973(x)
+ end
+end
+
+def fun_l14_n871(x)
+ if (x < 1)
+ fun_l15_n767(x)
+ else
+ fun_l15_n828(x)
+ end
+end
+
+def fun_l14_n872(x)
+ if (x < 1)
+ fun_l15_n578(x)
+ else
+ fun_l15_n309(x)
+ end
+end
+
+def fun_l14_n873(x)
+ if (x < 1)
+ fun_l15_n959(x)
+ else
+ fun_l15_n263(x)
+ end
+end
+
+def fun_l14_n874(x)
+ if (x < 1)
+ fun_l15_n170(x)
+ else
+ fun_l15_n700(x)
+ end
+end
+
+def fun_l14_n875(x)
+ if (x < 1)
+ fun_l15_n800(x)
+ else
+ fun_l15_n703(x)
+ end
+end
+
+def fun_l14_n876(x)
+ if (x < 1)
+ fun_l15_n556(x)
+ else
+ fun_l15_n854(x)
+ end
+end
+
+def fun_l14_n877(x)
+ if (x < 1)
+ fun_l15_n472(x)
+ else
+ fun_l15_n893(x)
+ end
+end
+
+def fun_l14_n878(x)
+ if (x < 1)
+ fun_l15_n847(x)
+ else
+ fun_l15_n438(x)
+ end
+end
+
+def fun_l14_n879(x)
+ if (x < 1)
+ fun_l15_n401(x)
+ else
+ fun_l15_n59(x)
+ end
+end
+
+def fun_l14_n880(x)
+ if (x < 1)
+ fun_l15_n321(x)
+ else
+ fun_l15_n57(x)
+ end
+end
+
+def fun_l14_n881(x)
+ if (x < 1)
+ fun_l15_n664(x)
+ else
+ fun_l15_n448(x)
+ end
+end
+
+def fun_l14_n882(x)
+ if (x < 1)
+ fun_l15_n113(x)
+ else
+ fun_l15_n270(x)
+ end
+end
+
+def fun_l14_n883(x)
+ if (x < 1)
+ fun_l15_n596(x)
+ else
+ fun_l15_n354(x)
+ end
+end
+
+def fun_l14_n884(x)
+ if (x < 1)
+ fun_l15_n681(x)
+ else
+ fun_l15_n801(x)
+ end
+end
+
+def fun_l14_n885(x)
+ if (x < 1)
+ fun_l15_n802(x)
+ else
+ fun_l15_n327(x)
+ end
+end
+
+def fun_l14_n886(x)
+ if (x < 1)
+ fun_l15_n657(x)
+ else
+ fun_l15_n325(x)
+ end
+end
+
+def fun_l14_n887(x)
+ if (x < 1)
+ fun_l15_n108(x)
+ else
+ fun_l15_n11(x)
+ end
+end
+
+def fun_l14_n888(x)
+ if (x < 1)
+ fun_l15_n696(x)
+ else
+ fun_l15_n88(x)
+ end
+end
+
+def fun_l14_n889(x)
+ if (x < 1)
+ fun_l15_n220(x)
+ else
+ fun_l15_n282(x)
+ end
+end
+
+def fun_l14_n890(x)
+ if (x < 1)
+ fun_l15_n702(x)
+ else
+ fun_l15_n550(x)
+ end
+end
+
+def fun_l14_n891(x)
+ if (x < 1)
+ fun_l15_n67(x)
+ else
+ fun_l15_n763(x)
+ end
+end
+
+def fun_l14_n892(x)
+ if (x < 1)
+ fun_l15_n386(x)
+ else
+ fun_l15_n938(x)
+ end
+end
+
+def fun_l14_n893(x)
+ if (x < 1)
+ fun_l15_n193(x)
+ else
+ fun_l15_n110(x)
+ end
+end
+
+def fun_l14_n894(x)
+ if (x < 1)
+ fun_l15_n408(x)
+ else
+ fun_l15_n392(x)
+ end
+end
+
+def fun_l14_n895(x)
+ if (x < 1)
+ fun_l15_n488(x)
+ else
+ fun_l15_n445(x)
+ end
+end
+
+def fun_l14_n896(x)
+ if (x < 1)
+ fun_l15_n572(x)
+ else
+ fun_l15_n645(x)
+ end
+end
+
+def fun_l14_n897(x)
+ if (x < 1)
+ fun_l15_n432(x)
+ else
+ fun_l15_n288(x)
+ end
+end
+
+def fun_l14_n898(x)
+ if (x < 1)
+ fun_l15_n466(x)
+ else
+ fun_l15_n877(x)
+ end
+end
+
+def fun_l14_n899(x)
+ if (x < 1)
+ fun_l15_n981(x)
+ else
+ fun_l15_n546(x)
+ end
+end
+
+def fun_l14_n900(x)
+ if (x < 1)
+ fun_l15_n334(x)
+ else
+ fun_l15_n198(x)
+ end
+end
+
+def fun_l14_n901(x)
+ if (x < 1)
+ fun_l15_n447(x)
+ else
+ fun_l15_n881(x)
+ end
+end
+
+def fun_l14_n902(x)
+ if (x < 1)
+ fun_l15_n818(x)
+ else
+ fun_l15_n882(x)
+ end
+end
+
+def fun_l14_n903(x)
+ if (x < 1)
+ fun_l15_n86(x)
+ else
+ fun_l15_n864(x)
+ end
+end
+
+def fun_l14_n904(x)
+ if (x < 1)
+ fun_l15_n981(x)
+ else
+ fun_l15_n472(x)
+ end
+end
+
+def fun_l14_n905(x)
+ if (x < 1)
+ fun_l15_n684(x)
+ else
+ fun_l15_n314(x)
+ end
+end
+
+def fun_l14_n906(x)
+ if (x < 1)
+ fun_l15_n792(x)
+ else
+ fun_l15_n270(x)
+ end
+end
+
+def fun_l14_n907(x)
+ if (x < 1)
+ fun_l15_n958(x)
+ else
+ fun_l15_n293(x)
+ end
+end
+
+def fun_l14_n908(x)
+ if (x < 1)
+ fun_l15_n953(x)
+ else
+ fun_l15_n837(x)
+ end
+end
+
+def fun_l14_n909(x)
+ if (x < 1)
+ fun_l15_n448(x)
+ else
+ fun_l15_n985(x)
+ end
+end
+
+def fun_l14_n910(x)
+ if (x < 1)
+ fun_l15_n148(x)
+ else
+ fun_l15_n210(x)
+ end
+end
+
+def fun_l14_n911(x)
+ if (x < 1)
+ fun_l15_n51(x)
+ else
+ fun_l15_n714(x)
+ end
+end
+
+def fun_l14_n912(x)
+ if (x < 1)
+ fun_l15_n538(x)
+ else
+ fun_l15_n653(x)
+ end
+end
+
+def fun_l14_n913(x)
+ if (x < 1)
+ fun_l15_n374(x)
+ else
+ fun_l15_n836(x)
+ end
+end
+
+def fun_l14_n914(x)
+ if (x < 1)
+ fun_l15_n5(x)
+ else
+ fun_l15_n307(x)
+ end
+end
+
+def fun_l14_n915(x)
+ if (x < 1)
+ fun_l15_n670(x)
+ else
+ fun_l15_n961(x)
+ end
+end
+
+def fun_l14_n916(x)
+ if (x < 1)
+ fun_l15_n600(x)
+ else
+ fun_l15_n843(x)
+ end
+end
+
+def fun_l14_n917(x)
+ if (x < 1)
+ fun_l15_n235(x)
+ else
+ fun_l15_n542(x)
+ end
+end
+
+def fun_l14_n918(x)
+ if (x < 1)
+ fun_l15_n883(x)
+ else
+ fun_l15_n990(x)
+ end
+end
+
+def fun_l14_n919(x)
+ if (x < 1)
+ fun_l15_n988(x)
+ else
+ fun_l15_n678(x)
+ end
+end
+
+def fun_l14_n920(x)
+ if (x < 1)
+ fun_l15_n246(x)
+ else
+ fun_l15_n942(x)
+ end
+end
+
+def fun_l14_n921(x)
+ if (x < 1)
+ fun_l15_n316(x)
+ else
+ fun_l15_n503(x)
+ end
+end
+
+def fun_l14_n922(x)
+ if (x < 1)
+ fun_l15_n392(x)
+ else
+ fun_l15_n948(x)
+ end
+end
+
+def fun_l14_n923(x)
+ if (x < 1)
+ fun_l15_n79(x)
+ else
+ fun_l15_n375(x)
+ end
+end
+
+def fun_l14_n924(x)
+ if (x < 1)
+ fun_l15_n139(x)
+ else
+ fun_l15_n350(x)
+ end
+end
+
+def fun_l14_n925(x)
+ if (x < 1)
+ fun_l15_n132(x)
+ else
+ fun_l15_n27(x)
+ end
+end
+
+def fun_l14_n926(x)
+ if (x < 1)
+ fun_l15_n608(x)
+ else
+ fun_l15_n910(x)
+ end
+end
+
+def fun_l14_n927(x)
+ if (x < 1)
+ fun_l15_n447(x)
+ else
+ fun_l15_n361(x)
+ end
+end
+
+def fun_l14_n928(x)
+ if (x < 1)
+ fun_l15_n432(x)
+ else
+ fun_l15_n943(x)
+ end
+end
+
+def fun_l14_n929(x)
+ if (x < 1)
+ fun_l15_n726(x)
+ else
+ fun_l15_n19(x)
+ end
+end
+
+def fun_l14_n930(x)
+ if (x < 1)
+ fun_l15_n311(x)
+ else
+ fun_l15_n683(x)
+ end
+end
+
+def fun_l14_n931(x)
+ if (x < 1)
+ fun_l15_n988(x)
+ else
+ fun_l15_n731(x)
+ end
+end
+
+def fun_l14_n932(x)
+ if (x < 1)
+ fun_l15_n916(x)
+ else
+ fun_l15_n625(x)
+ end
+end
+
+def fun_l14_n933(x)
+ if (x < 1)
+ fun_l15_n723(x)
+ else
+ fun_l15_n954(x)
+ end
+end
+
+def fun_l14_n934(x)
+ if (x < 1)
+ fun_l15_n82(x)
+ else
+ fun_l15_n140(x)
+ end
+end
+
+def fun_l14_n935(x)
+ if (x < 1)
+ fun_l15_n11(x)
+ else
+ fun_l15_n407(x)
+ end
+end
+
+def fun_l14_n936(x)
+ if (x < 1)
+ fun_l15_n261(x)
+ else
+ fun_l15_n733(x)
+ end
+end
+
+def fun_l14_n937(x)
+ if (x < 1)
+ fun_l15_n37(x)
+ else
+ fun_l15_n617(x)
+ end
+end
+
+def fun_l14_n938(x)
+ if (x < 1)
+ fun_l15_n733(x)
+ else
+ fun_l15_n178(x)
+ end
+end
+
+def fun_l14_n939(x)
+ if (x < 1)
+ fun_l15_n989(x)
+ else
+ fun_l15_n917(x)
+ end
+end
+
+def fun_l14_n940(x)
+ if (x < 1)
+ fun_l15_n297(x)
+ else
+ fun_l15_n393(x)
+ end
+end
+
+def fun_l14_n941(x)
+ if (x < 1)
+ fun_l15_n167(x)
+ else
+ fun_l15_n498(x)
+ end
+end
+
+def fun_l14_n942(x)
+ if (x < 1)
+ fun_l15_n365(x)
+ else
+ fun_l15_n158(x)
+ end
+end
+
+def fun_l14_n943(x)
+ if (x < 1)
+ fun_l15_n340(x)
+ else
+ fun_l15_n813(x)
+ end
+end
+
+def fun_l14_n944(x)
+ if (x < 1)
+ fun_l15_n417(x)
+ else
+ fun_l15_n150(x)
+ end
+end
+
+def fun_l14_n945(x)
+ if (x < 1)
+ fun_l15_n477(x)
+ else
+ fun_l15_n639(x)
+ end
+end
+
+def fun_l14_n946(x)
+ if (x < 1)
+ fun_l15_n243(x)
+ else
+ fun_l15_n439(x)
+ end
+end
+
+def fun_l14_n947(x)
+ if (x < 1)
+ fun_l15_n149(x)
+ else
+ fun_l15_n881(x)
+ end
+end
+
+def fun_l14_n948(x)
+ if (x < 1)
+ fun_l15_n383(x)
+ else
+ fun_l15_n525(x)
+ end
+end
+
+def fun_l14_n949(x)
+ if (x < 1)
+ fun_l15_n482(x)
+ else
+ fun_l15_n625(x)
+ end
+end
+
+def fun_l14_n950(x)
+ if (x < 1)
+ fun_l15_n376(x)
+ else
+ fun_l15_n743(x)
+ end
+end
+
+def fun_l14_n951(x)
+ if (x < 1)
+ fun_l15_n53(x)
+ else
+ fun_l15_n734(x)
+ end
+end
+
+def fun_l14_n952(x)
+ if (x < 1)
+ fun_l15_n437(x)
+ else
+ fun_l15_n829(x)
+ end
+end
+
+def fun_l14_n953(x)
+ if (x < 1)
+ fun_l15_n673(x)
+ else
+ fun_l15_n540(x)
+ end
+end
+
+def fun_l14_n954(x)
+ if (x < 1)
+ fun_l15_n477(x)
+ else
+ fun_l15_n488(x)
+ end
+end
+
+def fun_l14_n955(x)
+ if (x < 1)
+ fun_l15_n876(x)
+ else
+ fun_l15_n710(x)
+ end
+end
+
+def fun_l14_n956(x)
+ if (x < 1)
+ fun_l15_n823(x)
+ else
+ fun_l15_n841(x)
+ end
+end
+
+def fun_l14_n957(x)
+ if (x < 1)
+ fun_l15_n948(x)
+ else
+ fun_l15_n378(x)
+ end
+end
+
+def fun_l14_n958(x)
+ if (x < 1)
+ fun_l15_n941(x)
+ else
+ fun_l15_n555(x)
+ end
+end
+
+def fun_l14_n959(x)
+ if (x < 1)
+ fun_l15_n204(x)
+ else
+ fun_l15_n792(x)
+ end
+end
+
+def fun_l14_n960(x)
+ if (x < 1)
+ fun_l15_n897(x)
+ else
+ fun_l15_n287(x)
+ end
+end
+
+def fun_l14_n961(x)
+ if (x < 1)
+ fun_l15_n771(x)
+ else
+ fun_l15_n409(x)
+ end
+end
+
+def fun_l14_n962(x)
+ if (x < 1)
+ fun_l15_n597(x)
+ else
+ fun_l15_n190(x)
+ end
+end
+
+def fun_l14_n963(x)
+ if (x < 1)
+ fun_l15_n573(x)
+ else
+ fun_l15_n982(x)
+ end
+end
+
+def fun_l14_n964(x)
+ if (x < 1)
+ fun_l15_n186(x)
+ else
+ fun_l15_n363(x)
+ end
+end
+
+def fun_l14_n965(x)
+ if (x < 1)
+ fun_l15_n694(x)
+ else
+ fun_l15_n319(x)
+ end
+end
+
+def fun_l14_n966(x)
+ if (x < 1)
+ fun_l15_n312(x)
+ else
+ fun_l15_n332(x)
+ end
+end
+
+def fun_l14_n967(x)
+ if (x < 1)
+ fun_l15_n754(x)
+ else
+ fun_l15_n965(x)
+ end
+end
+
+def fun_l14_n968(x)
+ if (x < 1)
+ fun_l15_n18(x)
+ else
+ fun_l15_n723(x)
+ end
+end
+
+def fun_l14_n969(x)
+ if (x < 1)
+ fun_l15_n111(x)
+ else
+ fun_l15_n447(x)
+ end
+end
+
+def fun_l14_n970(x)
+ if (x < 1)
+ fun_l15_n3(x)
+ else
+ fun_l15_n302(x)
+ end
+end
+
+def fun_l14_n971(x)
+ if (x < 1)
+ fun_l15_n121(x)
+ else
+ fun_l15_n764(x)
+ end
+end
+
+def fun_l14_n972(x)
+ if (x < 1)
+ fun_l15_n192(x)
+ else
+ fun_l15_n692(x)
+ end
+end
+
+def fun_l14_n973(x)
+ if (x < 1)
+ fun_l15_n596(x)
+ else
+ fun_l15_n514(x)
+ end
+end
+
+def fun_l14_n974(x)
+ if (x < 1)
+ fun_l15_n845(x)
+ else
+ fun_l15_n245(x)
+ end
+end
+
+def fun_l14_n975(x)
+ if (x < 1)
+ fun_l15_n566(x)
+ else
+ fun_l15_n58(x)
+ end
+end
+
+def fun_l14_n976(x)
+ if (x < 1)
+ fun_l15_n843(x)
+ else
+ fun_l15_n35(x)
+ end
+end
+
+def fun_l14_n977(x)
+ if (x < 1)
+ fun_l15_n995(x)
+ else
+ fun_l15_n723(x)
+ end
+end
+
+def fun_l14_n978(x)
+ if (x < 1)
+ fun_l15_n534(x)
+ else
+ fun_l15_n704(x)
+ end
+end
+
+def fun_l14_n979(x)
+ if (x < 1)
+ fun_l15_n533(x)
+ else
+ fun_l15_n492(x)
+ end
+end
+
+def fun_l14_n980(x)
+ if (x < 1)
+ fun_l15_n758(x)
+ else
+ fun_l15_n655(x)
+ end
+end
+
+def fun_l14_n981(x)
+ if (x < 1)
+ fun_l15_n94(x)
+ else
+ fun_l15_n246(x)
+ end
+end
+
+def fun_l14_n982(x)
+ if (x < 1)
+ fun_l15_n873(x)
+ else
+ fun_l15_n996(x)
+ end
+end
+
+def fun_l14_n983(x)
+ if (x < 1)
+ fun_l15_n681(x)
+ else
+ fun_l15_n522(x)
+ end
+end
+
+def fun_l14_n984(x)
+ if (x < 1)
+ fun_l15_n272(x)
+ else
+ fun_l15_n501(x)
+ end
+end
+
+def fun_l14_n985(x)
+ if (x < 1)
+ fun_l15_n345(x)
+ else
+ fun_l15_n61(x)
+ end
+end
+
+def fun_l14_n986(x)
+ if (x < 1)
+ fun_l15_n517(x)
+ else
+ fun_l15_n151(x)
+ end
+end
+
+def fun_l14_n987(x)
+ if (x < 1)
+ fun_l15_n792(x)
+ else
+ fun_l15_n969(x)
+ end
+end
+
+def fun_l14_n988(x)
+ if (x < 1)
+ fun_l15_n683(x)
+ else
+ fun_l15_n537(x)
+ end
+end
+
+def fun_l14_n989(x)
+ if (x < 1)
+ fun_l15_n310(x)
+ else
+ fun_l15_n367(x)
+ end
+end
+
+def fun_l14_n990(x)
+ if (x < 1)
+ fun_l15_n249(x)
+ else
+ fun_l15_n897(x)
+ end
+end
+
+def fun_l14_n991(x)
+ if (x < 1)
+ fun_l15_n389(x)
+ else
+ fun_l15_n176(x)
+ end
+end
+
+def fun_l14_n992(x)
+ if (x < 1)
+ fun_l15_n233(x)
+ else
+ fun_l15_n220(x)
+ end
+end
+
+def fun_l14_n993(x)
+ if (x < 1)
+ fun_l15_n161(x)
+ else
+ fun_l15_n642(x)
+ end
+end
+
+def fun_l14_n994(x)
+ if (x < 1)
+ fun_l15_n163(x)
+ else
+ fun_l15_n5(x)
+ end
+end
+
+def fun_l14_n995(x)
+ if (x < 1)
+ fun_l15_n678(x)
+ else
+ fun_l15_n108(x)
+ end
+end
+
+def fun_l14_n996(x)
+ if (x < 1)
+ fun_l15_n732(x)
+ else
+ fun_l15_n26(x)
+ end
+end
+
+def fun_l14_n997(x)
+ if (x < 1)
+ fun_l15_n805(x)
+ else
+ fun_l15_n726(x)
+ end
+end
+
+def fun_l14_n998(x)
+ if (x < 1)
+ fun_l15_n543(x)
+ else
+ fun_l15_n102(x)
+ end
+end
+
+def fun_l14_n999(x)
+ if (x < 1)
+ fun_l15_n358(x)
+ else
+ fun_l15_n986(x)
+ end
+end
+
+def fun_l15_n0(x)
+ if (x < 1)
+ fun_l16_n832(x)
+ else
+ fun_l16_n319(x)
+ end
+end
+
+def fun_l15_n1(x)
+ if (x < 1)
+ fun_l16_n920(x)
+ else
+ fun_l16_n27(x)
+ end
+end
+
+def fun_l15_n2(x)
+ if (x < 1)
+ fun_l16_n929(x)
+ else
+ fun_l16_n230(x)
+ end
+end
+
+def fun_l15_n3(x)
+ if (x < 1)
+ fun_l16_n135(x)
+ else
+ fun_l16_n427(x)
+ end
+end
+
+def fun_l15_n4(x)
+ if (x < 1)
+ fun_l16_n299(x)
+ else
+ fun_l16_n811(x)
+ end
+end
+
+def fun_l15_n5(x)
+ if (x < 1)
+ fun_l16_n821(x)
+ else
+ fun_l16_n717(x)
+ end
+end
+
+def fun_l15_n6(x)
+ if (x < 1)
+ fun_l16_n907(x)
+ else
+ fun_l16_n348(x)
+ end
+end
+
+def fun_l15_n7(x)
+ if (x < 1)
+ fun_l16_n708(x)
+ else
+ fun_l16_n180(x)
+ end
+end
+
+def fun_l15_n8(x)
+ if (x < 1)
+ fun_l16_n835(x)
+ else
+ fun_l16_n754(x)
+ end
+end
+
+def fun_l15_n9(x)
+ if (x < 1)
+ fun_l16_n25(x)
+ else
+ fun_l16_n607(x)
+ end
+end
+
+def fun_l15_n10(x)
+ if (x < 1)
+ fun_l16_n73(x)
+ else
+ fun_l16_n784(x)
+ end
+end
+
+def fun_l15_n11(x)
+ if (x < 1)
+ fun_l16_n413(x)
+ else
+ fun_l16_n914(x)
+ end
+end
+
+def fun_l15_n12(x)
+ if (x < 1)
+ fun_l16_n734(x)
+ else
+ fun_l16_n688(x)
+ end
+end
+
+def fun_l15_n13(x)
+ if (x < 1)
+ fun_l16_n658(x)
+ else
+ fun_l16_n491(x)
+ end
+end
+
+def fun_l15_n14(x)
+ if (x < 1)
+ fun_l16_n839(x)
+ else
+ fun_l16_n740(x)
+ end
+end
+
+def fun_l15_n15(x)
+ if (x < 1)
+ fun_l16_n378(x)
+ else
+ fun_l16_n800(x)
+ end
+end
+
+def fun_l15_n16(x)
+ if (x < 1)
+ fun_l16_n980(x)
+ else
+ fun_l16_n83(x)
+ end
+end
+
+def fun_l15_n17(x)
+ if (x < 1)
+ fun_l16_n338(x)
+ else
+ fun_l16_n871(x)
+ end
+end
+
+def fun_l15_n18(x)
+ if (x < 1)
+ fun_l16_n497(x)
+ else
+ fun_l16_n347(x)
+ end
+end
+
+def fun_l15_n19(x)
+ if (x < 1)
+ fun_l16_n483(x)
+ else
+ fun_l16_n913(x)
+ end
+end
+
+def fun_l15_n20(x)
+ if (x < 1)
+ fun_l16_n663(x)
+ else
+ fun_l16_n432(x)
+ end
+end
+
+def fun_l15_n21(x)
+ if (x < 1)
+ fun_l16_n787(x)
+ else
+ fun_l16_n248(x)
+ end
+end
+
+def fun_l15_n22(x)
+ if (x < 1)
+ fun_l16_n257(x)
+ else
+ fun_l16_n944(x)
+ end
+end
+
+def fun_l15_n23(x)
+ if (x < 1)
+ fun_l16_n11(x)
+ else
+ fun_l16_n343(x)
+ end
+end
+
+def fun_l15_n24(x)
+ if (x < 1)
+ fun_l16_n860(x)
+ else
+ fun_l16_n752(x)
+ end
+end
+
+def fun_l15_n25(x)
+ if (x < 1)
+ fun_l16_n766(x)
+ else
+ fun_l16_n719(x)
+ end
+end
+
+def fun_l15_n26(x)
+ if (x < 1)
+ fun_l16_n144(x)
+ else
+ fun_l16_n963(x)
+ end
+end
+
+def fun_l15_n27(x)
+ if (x < 1)
+ fun_l16_n659(x)
+ else
+ fun_l16_n916(x)
+ end
+end
+
+def fun_l15_n28(x)
+ if (x < 1)
+ fun_l16_n429(x)
+ else
+ fun_l16_n272(x)
+ end
+end
+
+def fun_l15_n29(x)
+ if (x < 1)
+ fun_l16_n54(x)
+ else
+ fun_l16_n794(x)
+ end
+end
+
+def fun_l15_n30(x)
+ if (x < 1)
+ fun_l16_n273(x)
+ else
+ fun_l16_n929(x)
+ end
+end
+
+def fun_l15_n31(x)
+ if (x < 1)
+ fun_l16_n868(x)
+ else
+ fun_l16_n967(x)
+ end
+end
+
+def fun_l15_n32(x)
+ if (x < 1)
+ fun_l16_n888(x)
+ else
+ fun_l16_n283(x)
+ end
+end
+
+def fun_l15_n33(x)
+ if (x < 1)
+ fun_l16_n6(x)
+ else
+ fun_l16_n677(x)
+ end
+end
+
+def fun_l15_n34(x)
+ if (x < 1)
+ fun_l16_n248(x)
+ else
+ fun_l16_n831(x)
+ end
+end
+
+def fun_l15_n35(x)
+ if (x < 1)
+ fun_l16_n832(x)
+ else
+ fun_l16_n634(x)
+ end
+end
+
+def fun_l15_n36(x)
+ if (x < 1)
+ fun_l16_n221(x)
+ else
+ fun_l16_n401(x)
+ end
+end
+
+def fun_l15_n37(x)
+ if (x < 1)
+ fun_l16_n403(x)
+ else
+ fun_l16_n29(x)
+ end
+end
+
+def fun_l15_n38(x)
+ if (x < 1)
+ fun_l16_n11(x)
+ else
+ fun_l16_n517(x)
+ end
+end
+
+def fun_l15_n39(x)
+ if (x < 1)
+ fun_l16_n234(x)
+ else
+ fun_l16_n231(x)
+ end
+end
+
+def fun_l15_n40(x)
+ if (x < 1)
+ fun_l16_n185(x)
+ else
+ fun_l16_n818(x)
+ end
+end
+
+def fun_l15_n41(x)
+ if (x < 1)
+ fun_l16_n169(x)
+ else
+ fun_l16_n239(x)
+ end
+end
+
+def fun_l15_n42(x)
+ if (x < 1)
+ fun_l16_n111(x)
+ else
+ fun_l16_n836(x)
+ end
+end
+
+def fun_l15_n43(x)
+ if (x < 1)
+ fun_l16_n832(x)
+ else
+ fun_l16_n714(x)
+ end
+end
+
+def fun_l15_n44(x)
+ if (x < 1)
+ fun_l16_n167(x)
+ else
+ fun_l16_n65(x)
+ end
+end
+
+def fun_l15_n45(x)
+ if (x < 1)
+ fun_l16_n801(x)
+ else
+ fun_l16_n456(x)
+ end
+end
+
+def fun_l15_n46(x)
+ if (x < 1)
+ fun_l16_n894(x)
+ else
+ fun_l16_n103(x)
+ end
+end
+
+def fun_l15_n47(x)
+ if (x < 1)
+ fun_l16_n156(x)
+ else
+ fun_l16_n228(x)
+ end
+end
+
+def fun_l15_n48(x)
+ if (x < 1)
+ fun_l16_n167(x)
+ else
+ fun_l16_n317(x)
+ end
+end
+
+def fun_l15_n49(x)
+ if (x < 1)
+ fun_l16_n864(x)
+ else
+ fun_l16_n425(x)
+ end
+end
+
+def fun_l15_n50(x)
+ if (x < 1)
+ fun_l16_n11(x)
+ else
+ fun_l16_n498(x)
+ end
+end
+
+def fun_l15_n51(x)
+ if (x < 1)
+ fun_l16_n209(x)
+ else
+ fun_l16_n399(x)
+ end
+end
+
+def fun_l15_n52(x)
+ if (x < 1)
+ fun_l16_n320(x)
+ else
+ fun_l16_n912(x)
+ end
+end
+
+def fun_l15_n53(x)
+ if (x < 1)
+ fun_l16_n135(x)
+ else
+ fun_l16_n349(x)
+ end
+end
+
+def fun_l15_n54(x)
+ if (x < 1)
+ fun_l16_n410(x)
+ else
+ fun_l16_n849(x)
+ end
+end
+
+def fun_l15_n55(x)
+ if (x < 1)
+ fun_l16_n989(x)
+ else
+ fun_l16_n700(x)
+ end
+end
+
+def fun_l15_n56(x)
+ if (x < 1)
+ fun_l16_n79(x)
+ else
+ fun_l16_n549(x)
+ end
+end
+
+def fun_l15_n57(x)
+ if (x < 1)
+ fun_l16_n396(x)
+ else
+ fun_l16_n182(x)
+ end
+end
+
+def fun_l15_n58(x)
+ if (x < 1)
+ fun_l16_n765(x)
+ else
+ fun_l16_n225(x)
+ end
+end
+
+def fun_l15_n59(x)
+ if (x < 1)
+ fun_l16_n124(x)
+ else
+ fun_l16_n694(x)
+ end
+end
+
+def fun_l15_n60(x)
+ if (x < 1)
+ fun_l16_n813(x)
+ else
+ fun_l16_n319(x)
+ end
+end
+
+def fun_l15_n61(x)
+ if (x < 1)
+ fun_l16_n568(x)
+ else
+ fun_l16_n581(x)
+ end
+end
+
+def fun_l15_n62(x)
+ if (x < 1)
+ fun_l16_n667(x)
+ else
+ fun_l16_n12(x)
+ end
+end
+
+def fun_l15_n63(x)
+ if (x < 1)
+ fun_l16_n176(x)
+ else
+ fun_l16_n136(x)
+ end
+end
+
+def fun_l15_n64(x)
+ if (x < 1)
+ fun_l16_n620(x)
+ else
+ fun_l16_n937(x)
+ end
+end
+
+def fun_l15_n65(x)
+ if (x < 1)
+ fun_l16_n130(x)
+ else
+ fun_l16_n503(x)
+ end
+end
+
+def fun_l15_n66(x)
+ if (x < 1)
+ fun_l16_n774(x)
+ else
+ fun_l16_n109(x)
+ end
+end
+
+def fun_l15_n67(x)
+ if (x < 1)
+ fun_l16_n817(x)
+ else
+ fun_l16_n497(x)
+ end
+end
+
+def fun_l15_n68(x)
+ if (x < 1)
+ fun_l16_n123(x)
+ else
+ fun_l16_n482(x)
+ end
+end
+
+def fun_l15_n69(x)
+ if (x < 1)
+ fun_l16_n173(x)
+ else
+ fun_l16_n22(x)
+ end
+end
+
+def fun_l15_n70(x)
+ if (x < 1)
+ fun_l16_n648(x)
+ else
+ fun_l16_n671(x)
+ end
+end
+
+def fun_l15_n71(x)
+ if (x < 1)
+ fun_l16_n831(x)
+ else
+ fun_l16_n126(x)
+ end
+end
+
+def fun_l15_n72(x)
+ if (x < 1)
+ fun_l16_n731(x)
+ else
+ fun_l16_n273(x)
+ end
+end
+
+def fun_l15_n73(x)
+ if (x < 1)
+ fun_l16_n695(x)
+ else
+ fun_l16_n772(x)
+ end
+end
+
+def fun_l15_n74(x)
+ if (x < 1)
+ fun_l16_n831(x)
+ else
+ fun_l16_n49(x)
+ end
+end
+
+def fun_l15_n75(x)
+ if (x < 1)
+ fun_l16_n501(x)
+ else
+ fun_l16_n4(x)
+ end
+end
+
+def fun_l15_n76(x)
+ if (x < 1)
+ fun_l16_n712(x)
+ else
+ fun_l16_n762(x)
+ end
+end
+
+def fun_l15_n77(x)
+ if (x < 1)
+ fun_l16_n585(x)
+ else
+ fun_l16_n398(x)
+ end
+end
+
+def fun_l15_n78(x)
+ if (x < 1)
+ fun_l16_n811(x)
+ else
+ fun_l16_n866(x)
+ end
+end
+
+def fun_l15_n79(x)
+ if (x < 1)
+ fun_l16_n69(x)
+ else
+ fun_l16_n502(x)
+ end
+end
+
+def fun_l15_n80(x)
+ if (x < 1)
+ fun_l16_n885(x)
+ else
+ fun_l16_n116(x)
+ end
+end
+
+def fun_l15_n81(x)
+ if (x < 1)
+ fun_l16_n30(x)
+ else
+ fun_l16_n1(x)
+ end
+end
+
+def fun_l15_n82(x)
+ if (x < 1)
+ fun_l16_n105(x)
+ else
+ fun_l16_n526(x)
+ end
+end
+
+def fun_l15_n83(x)
+ if (x < 1)
+ fun_l16_n760(x)
+ else
+ fun_l16_n206(x)
+ end
+end
+
+def fun_l15_n84(x)
+ if (x < 1)
+ fun_l16_n722(x)
+ else
+ fun_l16_n211(x)
+ end
+end
+
+def fun_l15_n85(x)
+ if (x < 1)
+ fun_l16_n145(x)
+ else
+ fun_l16_n222(x)
+ end
+end
+
+def fun_l15_n86(x)
+ if (x < 1)
+ fun_l16_n691(x)
+ else
+ fun_l16_n885(x)
+ end
+end
+
+def fun_l15_n87(x)
+ if (x < 1)
+ fun_l16_n2(x)
+ else
+ fun_l16_n180(x)
+ end
+end
+
+def fun_l15_n88(x)
+ if (x < 1)
+ fun_l16_n272(x)
+ else
+ fun_l16_n433(x)
+ end
+end
+
+def fun_l15_n89(x)
+ if (x < 1)
+ fun_l16_n31(x)
+ else
+ fun_l16_n854(x)
+ end
+end
+
+def fun_l15_n90(x)
+ if (x < 1)
+ fun_l16_n264(x)
+ else
+ fun_l16_n231(x)
+ end
+end
+
+def fun_l15_n91(x)
+ if (x < 1)
+ fun_l16_n637(x)
+ else
+ fun_l16_n96(x)
+ end
+end
+
+def fun_l15_n92(x)
+ if (x < 1)
+ fun_l16_n317(x)
+ else
+ fun_l16_n56(x)
+ end
+end
+
+def fun_l15_n93(x)
+ if (x < 1)
+ fun_l16_n523(x)
+ else
+ fun_l16_n948(x)
+ end
+end
+
+def fun_l15_n94(x)
+ if (x < 1)
+ fun_l16_n694(x)
+ else
+ fun_l16_n948(x)
+ end
+end
+
+def fun_l15_n95(x)
+ if (x < 1)
+ fun_l16_n708(x)
+ else
+ fun_l16_n581(x)
+ end
+end
+
+def fun_l15_n96(x)
+ if (x < 1)
+ fun_l16_n725(x)
+ else
+ fun_l16_n931(x)
+ end
+end
+
+def fun_l15_n97(x)
+ if (x < 1)
+ fun_l16_n432(x)
+ else
+ fun_l16_n367(x)
+ end
+end
+
+def fun_l15_n98(x)
+ if (x < 1)
+ fun_l16_n671(x)
+ else
+ fun_l16_n165(x)
+ end
+end
+
+def fun_l15_n99(x)
+ if (x < 1)
+ fun_l16_n617(x)
+ else
+ fun_l16_n498(x)
+ end
+end
+
+def fun_l15_n100(x)
+ if (x < 1)
+ fun_l16_n32(x)
+ else
+ fun_l16_n103(x)
+ end
+end
+
+def fun_l15_n101(x)
+ if (x < 1)
+ fun_l16_n619(x)
+ else
+ fun_l16_n556(x)
+ end
+end
+
+def fun_l15_n102(x)
+ if (x < 1)
+ fun_l16_n0(x)
+ else
+ fun_l16_n925(x)
+ end
+end
+
+def fun_l15_n103(x)
+ if (x < 1)
+ fun_l16_n484(x)
+ else
+ fun_l16_n889(x)
+ end
+end
+
+def fun_l15_n104(x)
+ if (x < 1)
+ fun_l16_n557(x)
+ else
+ fun_l16_n465(x)
+ end
+end
+
+def fun_l15_n105(x)
+ if (x < 1)
+ fun_l16_n486(x)
+ else
+ fun_l16_n720(x)
+ end
+end
+
+def fun_l15_n106(x)
+ if (x < 1)
+ fun_l16_n281(x)
+ else
+ fun_l16_n61(x)
+ end
+end
+
+def fun_l15_n107(x)
+ if (x < 1)
+ fun_l16_n861(x)
+ else
+ fun_l16_n944(x)
+ end
+end
+
+def fun_l15_n108(x)
+ if (x < 1)
+ fun_l16_n739(x)
+ else
+ fun_l16_n192(x)
+ end
+end
+
+def fun_l15_n109(x)
+ if (x < 1)
+ fun_l16_n327(x)
+ else
+ fun_l16_n423(x)
+ end
+end
+
+def fun_l15_n110(x)
+ if (x < 1)
+ fun_l16_n541(x)
+ else
+ fun_l16_n927(x)
+ end
+end
+
+def fun_l15_n111(x)
+ if (x < 1)
+ fun_l16_n86(x)
+ else
+ fun_l16_n170(x)
+ end
+end
+
+def fun_l15_n112(x)
+ if (x < 1)
+ fun_l16_n508(x)
+ else
+ fun_l16_n554(x)
+ end
+end
+
+def fun_l15_n113(x)
+ if (x < 1)
+ fun_l16_n326(x)
+ else
+ fun_l16_n289(x)
+ end
+end
+
+def fun_l15_n114(x)
+ if (x < 1)
+ fun_l16_n309(x)
+ else
+ fun_l16_n125(x)
+ end
+end
+
+def fun_l15_n115(x)
+ if (x < 1)
+ fun_l16_n936(x)
+ else
+ fun_l16_n64(x)
+ end
+end
+
+def fun_l15_n116(x)
+ if (x < 1)
+ fun_l16_n942(x)
+ else
+ fun_l16_n737(x)
+ end
+end
+
+def fun_l15_n117(x)
+ if (x < 1)
+ fun_l16_n717(x)
+ else
+ fun_l16_n701(x)
+ end
+end
+
+def fun_l15_n118(x)
+ if (x < 1)
+ fun_l16_n789(x)
+ else
+ fun_l16_n901(x)
+ end
+end
+
+def fun_l15_n119(x)
+ if (x < 1)
+ fun_l16_n49(x)
+ else
+ fun_l16_n610(x)
+ end
+end
+
+def fun_l15_n120(x)
+ if (x < 1)
+ fun_l16_n578(x)
+ else
+ fun_l16_n372(x)
+ end
+end
+
+def fun_l15_n121(x)
+ if (x < 1)
+ fun_l16_n262(x)
+ else
+ fun_l16_n441(x)
+ end
+end
+
+def fun_l15_n122(x)
+ if (x < 1)
+ fun_l16_n29(x)
+ else
+ fun_l16_n837(x)
+ end
+end
+
+def fun_l15_n123(x)
+ if (x < 1)
+ fun_l16_n796(x)
+ else
+ fun_l16_n771(x)
+ end
+end
+
+def fun_l15_n124(x)
+ if (x < 1)
+ fun_l16_n354(x)
+ else
+ fun_l16_n818(x)
+ end
+end
+
+def fun_l15_n125(x)
+ if (x < 1)
+ fun_l16_n971(x)
+ else
+ fun_l16_n305(x)
+ end
+end
+
+def fun_l15_n126(x)
+ if (x < 1)
+ fun_l16_n435(x)
+ else
+ fun_l16_n307(x)
+ end
+end
+
+def fun_l15_n127(x)
+ if (x < 1)
+ fun_l16_n809(x)
+ else
+ fun_l16_n884(x)
+ end
+end
+
+def fun_l15_n128(x)
+ if (x < 1)
+ fun_l16_n794(x)
+ else
+ fun_l16_n480(x)
+ end
+end
+
+def fun_l15_n129(x)
+ if (x < 1)
+ fun_l16_n797(x)
+ else
+ fun_l16_n193(x)
+ end
+end
+
+def fun_l15_n130(x)
+ if (x < 1)
+ fun_l16_n415(x)
+ else
+ fun_l16_n255(x)
+ end
+end
+
+def fun_l15_n131(x)
+ if (x < 1)
+ fun_l16_n736(x)
+ else
+ fun_l16_n904(x)
+ end
+end
+
+def fun_l15_n132(x)
+ if (x < 1)
+ fun_l16_n753(x)
+ else
+ fun_l16_n408(x)
+ end
+end
+
+def fun_l15_n133(x)
+ if (x < 1)
+ fun_l16_n61(x)
+ else
+ fun_l16_n231(x)
+ end
+end
+
+def fun_l15_n134(x)
+ if (x < 1)
+ fun_l16_n541(x)
+ else
+ fun_l16_n93(x)
+ end
+end
+
+def fun_l15_n135(x)
+ if (x < 1)
+ fun_l16_n617(x)
+ else
+ fun_l16_n765(x)
+ end
+end
+
+def fun_l15_n136(x)
+ if (x < 1)
+ fun_l16_n749(x)
+ else
+ fun_l16_n344(x)
+ end
+end
+
+def fun_l15_n137(x)
+ if (x < 1)
+ fun_l16_n431(x)
+ else
+ fun_l16_n354(x)
+ end
+end
+
+def fun_l15_n138(x)
+ if (x < 1)
+ fun_l16_n116(x)
+ else
+ fun_l16_n963(x)
+ end
+end
+
+def fun_l15_n139(x)
+ if (x < 1)
+ fun_l16_n500(x)
+ else
+ fun_l16_n380(x)
+ end
+end
+
+def fun_l15_n140(x)
+ if (x < 1)
+ fun_l16_n120(x)
+ else
+ fun_l16_n953(x)
+ end
+end
+
+def fun_l15_n141(x)
+ if (x < 1)
+ fun_l16_n287(x)
+ else
+ fun_l16_n154(x)
+ end
+end
+
+def fun_l15_n142(x)
+ if (x < 1)
+ fun_l16_n347(x)
+ else
+ fun_l16_n841(x)
+ end
+end
+
+def fun_l15_n143(x)
+ if (x < 1)
+ fun_l16_n562(x)
+ else
+ fun_l16_n674(x)
+ end
+end
+
+def fun_l15_n144(x)
+ if (x < 1)
+ fun_l16_n146(x)
+ else
+ fun_l16_n788(x)
+ end
+end
+
+def fun_l15_n145(x)
+ if (x < 1)
+ fun_l16_n463(x)
+ else
+ fun_l16_n590(x)
+ end
+end
+
+def fun_l15_n146(x)
+ if (x < 1)
+ fun_l16_n452(x)
+ else
+ fun_l16_n732(x)
+ end
+end
+
+def fun_l15_n147(x)
+ if (x < 1)
+ fun_l16_n840(x)
+ else
+ fun_l16_n254(x)
+ end
+end
+
+def fun_l15_n148(x)
+ if (x < 1)
+ fun_l16_n224(x)
+ else
+ fun_l16_n826(x)
+ end
+end
+
+def fun_l15_n149(x)
+ if (x < 1)
+ fun_l16_n40(x)
+ else
+ fun_l16_n267(x)
+ end
+end
+
+def fun_l15_n150(x)
+ if (x < 1)
+ fun_l16_n160(x)
+ else
+ fun_l16_n745(x)
+ end
+end
+
+def fun_l15_n151(x)
+ if (x < 1)
+ fun_l16_n926(x)
+ else
+ fun_l16_n567(x)
+ end
+end
+
+def fun_l15_n152(x)
+ if (x < 1)
+ fun_l16_n392(x)
+ else
+ fun_l16_n487(x)
+ end
+end
+
+def fun_l15_n153(x)
+ if (x < 1)
+ fun_l16_n603(x)
+ else
+ fun_l16_n549(x)
+ end
+end
+
+def fun_l15_n154(x)
+ if (x < 1)
+ fun_l16_n993(x)
+ else
+ fun_l16_n451(x)
+ end
+end
+
+def fun_l15_n155(x)
+ if (x < 1)
+ fun_l16_n358(x)
+ else
+ fun_l16_n52(x)
+ end
+end
+
+def fun_l15_n156(x)
+ if (x < 1)
+ fun_l16_n694(x)
+ else
+ fun_l16_n419(x)
+ end
+end
+
+def fun_l15_n157(x)
+ if (x < 1)
+ fun_l16_n138(x)
+ else
+ fun_l16_n127(x)
+ end
+end
+
+def fun_l15_n158(x)
+ if (x < 1)
+ fun_l16_n619(x)
+ else
+ fun_l16_n328(x)
+ end
+end
+
+def fun_l15_n159(x)
+ if (x < 1)
+ fun_l16_n281(x)
+ else
+ fun_l16_n503(x)
+ end
+end
+
+def fun_l15_n160(x)
+ if (x < 1)
+ fun_l16_n631(x)
+ else
+ fun_l16_n69(x)
+ end
+end
+
+def fun_l15_n161(x)
+ if (x < 1)
+ fun_l16_n41(x)
+ else
+ fun_l16_n734(x)
+ end
+end
+
+def fun_l15_n162(x)
+ if (x < 1)
+ fun_l16_n809(x)
+ else
+ fun_l16_n303(x)
+ end
+end
+
+def fun_l15_n163(x)
+ if (x < 1)
+ fun_l16_n851(x)
+ else
+ fun_l16_n420(x)
+ end
+end
+
+def fun_l15_n164(x)
+ if (x < 1)
+ fun_l16_n534(x)
+ else
+ fun_l16_n686(x)
+ end
+end
+
+def fun_l15_n165(x)
+ if (x < 1)
+ fun_l16_n639(x)
+ else
+ fun_l16_n155(x)
+ end
+end
+
+def fun_l15_n166(x)
+ if (x < 1)
+ fun_l16_n196(x)
+ else
+ fun_l16_n478(x)
+ end
+end
+
+def fun_l15_n167(x)
+ if (x < 1)
+ fun_l16_n926(x)
+ else
+ fun_l16_n506(x)
+ end
+end
+
+def fun_l15_n168(x)
+ if (x < 1)
+ fun_l16_n74(x)
+ else
+ fun_l16_n442(x)
+ end
+end
+
+def fun_l15_n169(x)
+ if (x < 1)
+ fun_l16_n122(x)
+ else
+ fun_l16_n150(x)
+ end
+end
+
+def fun_l15_n170(x)
+ if (x < 1)
+ fun_l16_n805(x)
+ else
+ fun_l16_n46(x)
+ end
+end
+
+def fun_l15_n171(x)
+ if (x < 1)
+ fun_l16_n741(x)
+ else
+ fun_l16_n88(x)
+ end
+end
+
+def fun_l15_n172(x)
+ if (x < 1)
+ fun_l16_n749(x)
+ else
+ fun_l16_n896(x)
+ end
+end
+
+def fun_l15_n173(x)
+ if (x < 1)
+ fun_l16_n310(x)
+ else
+ fun_l16_n517(x)
+ end
+end
+
+def fun_l15_n174(x)
+ if (x < 1)
+ fun_l16_n237(x)
+ else
+ fun_l16_n948(x)
+ end
+end
+
+def fun_l15_n175(x)
+ if (x < 1)
+ fun_l16_n402(x)
+ else
+ fun_l16_n332(x)
+ end
+end
+
+def fun_l15_n176(x)
+ if (x < 1)
+ fun_l16_n189(x)
+ else
+ fun_l16_n223(x)
+ end
+end
+
+def fun_l15_n177(x)
+ if (x < 1)
+ fun_l16_n1(x)
+ else
+ fun_l16_n577(x)
+ end
+end
+
+def fun_l15_n178(x)
+ if (x < 1)
+ fun_l16_n738(x)
+ else
+ fun_l16_n775(x)
+ end
+end
+
+def fun_l15_n179(x)
+ if (x < 1)
+ fun_l16_n80(x)
+ else
+ fun_l16_n652(x)
+ end
+end
+
+def fun_l15_n180(x)
+ if (x < 1)
+ fun_l16_n72(x)
+ else
+ fun_l16_n635(x)
+ end
+end
+
+def fun_l15_n181(x)
+ if (x < 1)
+ fun_l16_n721(x)
+ else
+ fun_l16_n661(x)
+ end
+end
+
+def fun_l15_n182(x)
+ if (x < 1)
+ fun_l16_n354(x)
+ else
+ fun_l16_n681(x)
+ end
+end
+
+def fun_l15_n183(x)
+ if (x < 1)
+ fun_l16_n689(x)
+ else
+ fun_l16_n775(x)
+ end
+end
+
+def fun_l15_n184(x)
+ if (x < 1)
+ fun_l16_n923(x)
+ else
+ fun_l16_n719(x)
+ end
+end
+
+def fun_l15_n185(x)
+ if (x < 1)
+ fun_l16_n33(x)
+ else
+ fun_l16_n98(x)
+ end
+end
+
+def fun_l15_n186(x)
+ if (x < 1)
+ fun_l16_n155(x)
+ else
+ fun_l16_n880(x)
+ end
+end
+
+def fun_l15_n187(x)
+ if (x < 1)
+ fun_l16_n625(x)
+ else
+ fun_l16_n314(x)
+ end
+end
+
+def fun_l15_n188(x)
+ if (x < 1)
+ fun_l16_n284(x)
+ else
+ fun_l16_n229(x)
+ end
+end
+
+def fun_l15_n189(x)
+ if (x < 1)
+ fun_l16_n471(x)
+ else
+ fun_l16_n740(x)
+ end
+end
+
+def fun_l15_n190(x)
+ if (x < 1)
+ fun_l16_n102(x)
+ else
+ fun_l16_n766(x)
+ end
+end
+
+def fun_l15_n191(x)
+ if (x < 1)
+ fun_l16_n812(x)
+ else
+ fun_l16_n94(x)
+ end
+end
+
+def fun_l15_n192(x)
+ if (x < 1)
+ fun_l16_n797(x)
+ else
+ fun_l16_n736(x)
+ end
+end
+
+def fun_l15_n193(x)
+ if (x < 1)
+ fun_l16_n976(x)
+ else
+ fun_l16_n4(x)
+ end
+end
+
+def fun_l15_n194(x)
+ if (x < 1)
+ fun_l16_n423(x)
+ else
+ fun_l16_n612(x)
+ end
+end
+
+def fun_l15_n195(x)
+ if (x < 1)
+ fun_l16_n510(x)
+ else
+ fun_l16_n237(x)
+ end
+end
+
+def fun_l15_n196(x)
+ if (x < 1)
+ fun_l16_n116(x)
+ else
+ fun_l16_n624(x)
+ end
+end
+
+def fun_l15_n197(x)
+ if (x < 1)
+ fun_l16_n515(x)
+ else
+ fun_l16_n979(x)
+ end
+end
+
+def fun_l15_n198(x)
+ if (x < 1)
+ fun_l16_n700(x)
+ else
+ fun_l16_n284(x)
+ end
+end
+
+def fun_l15_n199(x)
+ if (x < 1)
+ fun_l16_n226(x)
+ else
+ fun_l16_n32(x)
+ end
+end
+
+def fun_l15_n200(x)
+ if (x < 1)
+ fun_l16_n453(x)
+ else
+ fun_l16_n959(x)
+ end
+end
+
+def fun_l15_n201(x)
+ if (x < 1)
+ fun_l16_n132(x)
+ else
+ fun_l16_n323(x)
+ end
+end
+
+def fun_l15_n202(x)
+ if (x < 1)
+ fun_l16_n539(x)
+ else
+ fun_l16_n670(x)
+ end
+end
+
+def fun_l15_n203(x)
+ if (x < 1)
+ fun_l16_n786(x)
+ else
+ fun_l16_n633(x)
+ end
+end
+
+def fun_l15_n204(x)
+ if (x < 1)
+ fun_l16_n498(x)
+ else
+ fun_l16_n520(x)
+ end
+end
+
+def fun_l15_n205(x)
+ if (x < 1)
+ fun_l16_n423(x)
+ else
+ fun_l16_n573(x)
+ end
+end
+
+def fun_l15_n206(x)
+ if (x < 1)
+ fun_l16_n746(x)
+ else
+ fun_l16_n562(x)
+ end
+end
+
+def fun_l15_n207(x)
+ if (x < 1)
+ fun_l16_n500(x)
+ else
+ fun_l16_n951(x)
+ end
+end
+
+def fun_l15_n208(x)
+ if (x < 1)
+ fun_l16_n331(x)
+ else
+ fun_l16_n596(x)
+ end
+end
+
+def fun_l15_n209(x)
+ if (x < 1)
+ fun_l16_n1(x)
+ else
+ fun_l16_n69(x)
+ end
+end
+
+def fun_l15_n210(x)
+ if (x < 1)
+ fun_l16_n19(x)
+ else
+ fun_l16_n148(x)
+ end
+end
+
+def fun_l15_n211(x)
+ if (x < 1)
+ fun_l16_n770(x)
+ else
+ fun_l16_n216(x)
+ end
+end
+
+def fun_l15_n212(x)
+ if (x < 1)
+ fun_l16_n863(x)
+ else
+ fun_l16_n319(x)
+ end
+end
+
+def fun_l15_n213(x)
+ if (x < 1)
+ fun_l16_n675(x)
+ else
+ fun_l16_n797(x)
+ end
+end
+
+def fun_l15_n214(x)
+ if (x < 1)
+ fun_l16_n392(x)
+ else
+ fun_l16_n593(x)
+ end
+end
+
+def fun_l15_n215(x)
+ if (x < 1)
+ fun_l16_n120(x)
+ else
+ fun_l16_n232(x)
+ end
+end
+
+def fun_l15_n216(x)
+ if (x < 1)
+ fun_l16_n549(x)
+ else
+ fun_l16_n175(x)
+ end
+end
+
+def fun_l15_n217(x)
+ if (x < 1)
+ fun_l16_n784(x)
+ else
+ fun_l16_n8(x)
+ end
+end
+
+def fun_l15_n218(x)
+ if (x < 1)
+ fun_l16_n296(x)
+ else
+ fun_l16_n454(x)
+ end
+end
+
+def fun_l15_n219(x)
+ if (x < 1)
+ fun_l16_n585(x)
+ else
+ fun_l16_n628(x)
+ end
+end
+
+def fun_l15_n220(x)
+ if (x < 1)
+ fun_l16_n375(x)
+ else
+ fun_l16_n294(x)
+ end
+end
+
+def fun_l15_n221(x)
+ if (x < 1)
+ fun_l16_n69(x)
+ else
+ fun_l16_n771(x)
+ end
+end
+
+def fun_l15_n222(x)
+ if (x < 1)
+ fun_l16_n885(x)
+ else
+ fun_l16_n476(x)
+ end
+end
+
+def fun_l15_n223(x)
+ if (x < 1)
+ fun_l16_n929(x)
+ else
+ fun_l16_n850(x)
+ end
+end
+
+def fun_l15_n224(x)
+ if (x < 1)
+ fun_l16_n489(x)
+ else
+ fun_l16_n234(x)
+ end
+end
+
+def fun_l15_n225(x)
+ if (x < 1)
+ fun_l16_n478(x)
+ else
+ fun_l16_n744(x)
+ end
+end
+
+def fun_l15_n226(x)
+ if (x < 1)
+ fun_l16_n714(x)
+ else
+ fun_l16_n323(x)
+ end
+end
+
+def fun_l15_n227(x)
+ if (x < 1)
+ fun_l16_n146(x)
+ else
+ fun_l16_n937(x)
+ end
+end
+
+def fun_l15_n228(x)
+ if (x < 1)
+ fun_l16_n611(x)
+ else
+ fun_l16_n320(x)
+ end
+end
+
+def fun_l15_n229(x)
+ if (x < 1)
+ fun_l16_n184(x)
+ else
+ fun_l16_n129(x)
+ end
+end
+
+def fun_l15_n230(x)
+ if (x < 1)
+ fun_l16_n563(x)
+ else
+ fun_l16_n581(x)
+ end
+end
+
+def fun_l15_n231(x)
+ if (x < 1)
+ fun_l16_n585(x)
+ else
+ fun_l16_n63(x)
+ end
+end
+
+def fun_l15_n232(x)
+ if (x < 1)
+ fun_l16_n895(x)
+ else
+ fun_l16_n622(x)
+ end
+end
+
+def fun_l15_n233(x)
+ if (x < 1)
+ fun_l16_n998(x)
+ else
+ fun_l16_n95(x)
+ end
+end
+
+def fun_l15_n234(x)
+ if (x < 1)
+ fun_l16_n770(x)
+ else
+ fun_l16_n557(x)
+ end
+end
+
+def fun_l15_n235(x)
+ if (x < 1)
+ fun_l16_n418(x)
+ else
+ fun_l16_n382(x)
+ end
+end
+
+def fun_l15_n236(x)
+ if (x < 1)
+ fun_l16_n842(x)
+ else
+ fun_l16_n543(x)
+ end
+end
+
+def fun_l15_n237(x)
+ if (x < 1)
+ fun_l16_n677(x)
+ else
+ fun_l16_n108(x)
+ end
+end
+
+def fun_l15_n238(x)
+ if (x < 1)
+ fun_l16_n557(x)
+ else
+ fun_l16_n288(x)
+ end
+end
+
+def fun_l15_n239(x)
+ if (x < 1)
+ fun_l16_n467(x)
+ else
+ fun_l16_n661(x)
+ end
+end
+
+def fun_l15_n240(x)
+ if (x < 1)
+ fun_l16_n267(x)
+ else
+ fun_l16_n559(x)
+ end
+end
+
+def fun_l15_n241(x)
+ if (x < 1)
+ fun_l16_n655(x)
+ else
+ fun_l16_n990(x)
+ end
+end
+
+def fun_l15_n242(x)
+ if (x < 1)
+ fun_l16_n673(x)
+ else
+ fun_l16_n390(x)
+ end
+end
+
+def fun_l15_n243(x)
+ if (x < 1)
+ fun_l16_n691(x)
+ else
+ fun_l16_n901(x)
+ end
+end
+
+def fun_l15_n244(x)
+ if (x < 1)
+ fun_l16_n490(x)
+ else
+ fun_l16_n627(x)
+ end
+end
+
+def fun_l15_n245(x)
+ if (x < 1)
+ fun_l16_n293(x)
+ else
+ fun_l16_n569(x)
+ end
+end
+
+def fun_l15_n246(x)
+ if (x < 1)
+ fun_l16_n818(x)
+ else
+ fun_l16_n74(x)
+ end
+end
+
+def fun_l15_n247(x)
+ if (x < 1)
+ fun_l16_n141(x)
+ else
+ fun_l16_n743(x)
+ end
+end
+
+def fun_l15_n248(x)
+ if (x < 1)
+ fun_l16_n819(x)
+ else
+ fun_l16_n141(x)
+ end
+end
+
+def fun_l15_n249(x)
+ if (x < 1)
+ fun_l16_n423(x)
+ else
+ fun_l16_n53(x)
+ end
+end
+
+def fun_l15_n250(x)
+ if (x < 1)
+ fun_l16_n694(x)
+ else
+ fun_l16_n463(x)
+ end
+end
+
+def fun_l15_n251(x)
+ if (x < 1)
+ fun_l16_n828(x)
+ else
+ fun_l16_n739(x)
+ end
+end
+
+def fun_l15_n252(x)
+ if (x < 1)
+ fun_l16_n18(x)
+ else
+ fun_l16_n694(x)
+ end
+end
+
+def fun_l15_n253(x)
+ if (x < 1)
+ fun_l16_n668(x)
+ else
+ fun_l16_n501(x)
+ end
+end
+
+def fun_l15_n254(x)
+ if (x < 1)
+ fun_l16_n649(x)
+ else
+ fun_l16_n397(x)
+ end
+end
+
+def fun_l15_n255(x)
+ if (x < 1)
+ fun_l16_n376(x)
+ else
+ fun_l16_n375(x)
+ end
+end
+
+def fun_l15_n256(x)
+ if (x < 1)
+ fun_l16_n451(x)
+ else
+ fun_l16_n537(x)
+ end
+end
+
+def fun_l15_n257(x)
+ if (x < 1)
+ fun_l16_n360(x)
+ else
+ fun_l16_n330(x)
+ end
+end
+
+def fun_l15_n258(x)
+ if (x < 1)
+ fun_l16_n581(x)
+ else
+ fun_l16_n193(x)
+ end
+end
+
+def fun_l15_n259(x)
+ if (x < 1)
+ fun_l16_n738(x)
+ else
+ fun_l16_n662(x)
+ end
+end
+
+def fun_l15_n260(x)
+ if (x < 1)
+ fun_l16_n450(x)
+ else
+ fun_l16_n942(x)
+ end
+end
+
+def fun_l15_n261(x)
+ if (x < 1)
+ fun_l16_n23(x)
+ else
+ fun_l16_n534(x)
+ end
+end
+
+def fun_l15_n262(x)
+ if (x < 1)
+ fun_l16_n364(x)
+ else
+ fun_l16_n716(x)
+ end
+end
+
+def fun_l15_n263(x)
+ if (x < 1)
+ fun_l16_n528(x)
+ else
+ fun_l16_n185(x)
+ end
+end
+
+def fun_l15_n264(x)
+ if (x < 1)
+ fun_l16_n491(x)
+ else
+ fun_l16_n686(x)
+ end
+end
+
+def fun_l15_n265(x)
+ if (x < 1)
+ fun_l16_n242(x)
+ else
+ fun_l16_n986(x)
+ end
+end
+
+def fun_l15_n266(x)
+ if (x < 1)
+ fun_l16_n726(x)
+ else
+ fun_l16_n88(x)
+ end
+end
+
+def fun_l15_n267(x)
+ if (x < 1)
+ fun_l16_n611(x)
+ else
+ fun_l16_n11(x)
+ end
+end
+
+def fun_l15_n268(x)
+ if (x < 1)
+ fun_l16_n993(x)
+ else
+ fun_l16_n269(x)
+ end
+end
+
+def fun_l15_n269(x)
+ if (x < 1)
+ fun_l16_n296(x)
+ else
+ fun_l16_n8(x)
+ end
+end
+
+def fun_l15_n270(x)
+ if (x < 1)
+ fun_l16_n700(x)
+ else
+ fun_l16_n692(x)
+ end
+end
+
+def fun_l15_n271(x)
+ if (x < 1)
+ fun_l16_n902(x)
+ else
+ fun_l16_n548(x)
+ end
+end
+
+def fun_l15_n272(x)
+ if (x < 1)
+ fun_l16_n39(x)
+ else
+ fun_l16_n635(x)
+ end
+end
+
+def fun_l15_n273(x)
+ if (x < 1)
+ fun_l16_n520(x)
+ else
+ fun_l16_n49(x)
+ end
+end
+
+def fun_l15_n274(x)
+ if (x < 1)
+ fun_l16_n24(x)
+ else
+ fun_l16_n466(x)
+ end
+end
+
+def fun_l15_n275(x)
+ if (x < 1)
+ fun_l16_n144(x)
+ else
+ fun_l16_n555(x)
+ end
+end
+
+def fun_l15_n276(x)
+ if (x < 1)
+ fun_l16_n719(x)
+ else
+ fun_l16_n693(x)
+ end
+end
+
+def fun_l15_n277(x)
+ if (x < 1)
+ fun_l16_n687(x)
+ else
+ fun_l16_n987(x)
+ end
+end
+
+def fun_l15_n278(x)
+ if (x < 1)
+ fun_l16_n426(x)
+ else
+ fun_l16_n179(x)
+ end
+end
+
+def fun_l15_n279(x)
+ if (x < 1)
+ fun_l16_n659(x)
+ else
+ fun_l16_n36(x)
+ end
+end
+
+def fun_l15_n280(x)
+ if (x < 1)
+ fun_l16_n460(x)
+ else
+ fun_l16_n450(x)
+ end
+end
+
+def fun_l15_n281(x)
+ if (x < 1)
+ fun_l16_n42(x)
+ else
+ fun_l16_n230(x)
+ end
+end
+
+def fun_l15_n282(x)
+ if (x < 1)
+ fun_l16_n168(x)
+ else
+ fun_l16_n422(x)
+ end
+end
+
+def fun_l15_n283(x)
+ if (x < 1)
+ fun_l16_n305(x)
+ else
+ fun_l16_n554(x)
+ end
+end
+
+def fun_l15_n284(x)
+ if (x < 1)
+ fun_l16_n680(x)
+ else
+ fun_l16_n147(x)
+ end
+end
+
+def fun_l15_n285(x)
+ if (x < 1)
+ fun_l16_n632(x)
+ else
+ fun_l16_n767(x)
+ end
+end
+
+def fun_l15_n286(x)
+ if (x < 1)
+ fun_l16_n735(x)
+ else
+ fun_l16_n465(x)
+ end
+end
+
+def fun_l15_n287(x)
+ if (x < 1)
+ fun_l16_n17(x)
+ else
+ fun_l16_n638(x)
+ end
+end
+
+def fun_l15_n288(x)
+ if (x < 1)
+ fun_l16_n517(x)
+ else
+ fun_l16_n47(x)
+ end
+end
+
+def fun_l15_n289(x)
+ if (x < 1)
+ fun_l16_n101(x)
+ else
+ fun_l16_n882(x)
+ end
+end
+
+def fun_l15_n290(x)
+ if (x < 1)
+ fun_l16_n697(x)
+ else
+ fun_l16_n963(x)
+ end
+end
+
+def fun_l15_n291(x)
+ if (x < 1)
+ fun_l16_n468(x)
+ else
+ fun_l16_n340(x)
+ end
+end
+
+def fun_l15_n292(x)
+ if (x < 1)
+ fun_l16_n817(x)
+ else
+ fun_l16_n454(x)
+ end
+end
+
+def fun_l15_n293(x)
+ if (x < 1)
+ fun_l16_n885(x)
+ else
+ fun_l16_n733(x)
+ end
+end
+
+def fun_l15_n294(x)
+ if (x < 1)
+ fun_l16_n844(x)
+ else
+ fun_l16_n564(x)
+ end
+end
+
+def fun_l15_n295(x)
+ if (x < 1)
+ fun_l16_n667(x)
+ else
+ fun_l16_n286(x)
+ end
+end
+
+def fun_l15_n296(x)
+ if (x < 1)
+ fun_l16_n694(x)
+ else
+ fun_l16_n660(x)
+ end
+end
+
+def fun_l15_n297(x)
+ if (x < 1)
+ fun_l16_n839(x)
+ else
+ fun_l16_n274(x)
+ end
+end
+
+def fun_l15_n298(x)
+ if (x < 1)
+ fun_l16_n385(x)
+ else
+ fun_l16_n821(x)
+ end
+end
+
+def fun_l15_n299(x)
+ if (x < 1)
+ fun_l16_n137(x)
+ else
+ fun_l16_n548(x)
+ end
+end
+
+def fun_l15_n300(x)
+ if (x < 1)
+ fun_l16_n662(x)
+ else
+ fun_l16_n2(x)
+ end
+end
+
+def fun_l15_n301(x)
+ if (x < 1)
+ fun_l16_n998(x)
+ else
+ fun_l16_n186(x)
+ end
+end
+
+def fun_l15_n302(x)
+ if (x < 1)
+ fun_l16_n667(x)
+ else
+ fun_l16_n454(x)
+ end
+end
+
+def fun_l15_n303(x)
+ if (x < 1)
+ fun_l16_n765(x)
+ else
+ fun_l16_n519(x)
+ end
+end
+
+def fun_l15_n304(x)
+ if (x < 1)
+ fun_l16_n936(x)
+ else
+ fun_l16_n213(x)
+ end
+end
+
+def fun_l15_n305(x)
+ if (x < 1)
+ fun_l16_n695(x)
+ else
+ fun_l16_n545(x)
+ end
+end
+
+def fun_l15_n306(x)
+ if (x < 1)
+ fun_l16_n221(x)
+ else
+ fun_l16_n545(x)
+ end
+end
+
+def fun_l15_n307(x)
+ if (x < 1)
+ fun_l16_n555(x)
+ else
+ fun_l16_n570(x)
+ end
+end
+
+def fun_l15_n308(x)
+ if (x < 1)
+ fun_l16_n57(x)
+ else
+ fun_l16_n91(x)
+ end
+end
+
+def fun_l15_n309(x)
+ if (x < 1)
+ fun_l16_n37(x)
+ else
+ fun_l16_n516(x)
+ end
+end
+
+def fun_l15_n310(x)
+ if (x < 1)
+ fun_l16_n661(x)
+ else
+ fun_l16_n98(x)
+ end
+end
+
+def fun_l15_n311(x)
+ if (x < 1)
+ fun_l16_n119(x)
+ else
+ fun_l16_n613(x)
+ end
+end
+
+def fun_l15_n312(x)
+ if (x < 1)
+ fun_l16_n982(x)
+ else
+ fun_l16_n20(x)
+ end
+end
+
+def fun_l15_n313(x)
+ if (x < 1)
+ fun_l16_n241(x)
+ else
+ fun_l16_n555(x)
+ end
+end
+
+def fun_l15_n314(x)
+ if (x < 1)
+ fun_l16_n638(x)
+ else
+ fun_l16_n854(x)
+ end
+end
+
+def fun_l15_n315(x)
+ if (x < 1)
+ fun_l16_n580(x)
+ else
+ fun_l16_n39(x)
+ end
+end
+
+def fun_l15_n316(x)
+ if (x < 1)
+ fun_l16_n705(x)
+ else
+ fun_l16_n240(x)
+ end
+end
+
+def fun_l15_n317(x)
+ if (x < 1)
+ fun_l16_n395(x)
+ else
+ fun_l16_n114(x)
+ end
+end
+
+def fun_l15_n318(x)
+ if (x < 1)
+ fun_l16_n554(x)
+ else
+ fun_l16_n239(x)
+ end
+end
+
+def fun_l15_n319(x)
+ if (x < 1)
+ fun_l16_n108(x)
+ else
+ fun_l16_n537(x)
+ end
+end
+
+def fun_l15_n320(x)
+ if (x < 1)
+ fun_l16_n554(x)
+ else
+ fun_l16_n902(x)
+ end
+end
+
+def fun_l15_n321(x)
+ if (x < 1)
+ fun_l16_n665(x)
+ else
+ fun_l16_n369(x)
+ end
+end
+
+def fun_l15_n322(x)
+ if (x < 1)
+ fun_l16_n4(x)
+ else
+ fun_l16_n572(x)
+ end
+end
+
+def fun_l15_n323(x)
+ if (x < 1)
+ fun_l16_n579(x)
+ else
+ fun_l16_n182(x)
+ end
+end
+
+def fun_l15_n324(x)
+ if (x < 1)
+ fun_l16_n593(x)
+ else
+ fun_l16_n203(x)
+ end
+end
+
+def fun_l15_n325(x)
+ if (x < 1)
+ fun_l16_n678(x)
+ else
+ fun_l16_n0(x)
+ end
+end
+
+def fun_l15_n326(x)
+ if (x < 1)
+ fun_l16_n809(x)
+ else
+ fun_l16_n833(x)
+ end
+end
+
+def fun_l15_n327(x)
+ if (x < 1)
+ fun_l16_n618(x)
+ else
+ fun_l16_n381(x)
+ end
+end
+
+def fun_l15_n328(x)
+ if (x < 1)
+ fun_l16_n133(x)
+ else
+ fun_l16_n744(x)
+ end
+end
+
+def fun_l15_n329(x)
+ if (x < 1)
+ fun_l16_n488(x)
+ else
+ fun_l16_n88(x)
+ end
+end
+
+def fun_l15_n330(x)
+ if (x < 1)
+ fun_l16_n205(x)
+ else
+ fun_l16_n402(x)
+ end
+end
+
+def fun_l15_n331(x)
+ if (x < 1)
+ fun_l16_n515(x)
+ else
+ fun_l16_n145(x)
+ end
+end
+
+def fun_l15_n332(x)
+ if (x < 1)
+ fun_l16_n581(x)
+ else
+ fun_l16_n607(x)
+ end
+end
+
+def fun_l15_n333(x)
+ if (x < 1)
+ fun_l16_n356(x)
+ else
+ fun_l16_n155(x)
+ end
+end
+
+def fun_l15_n334(x)
+ if (x < 1)
+ fun_l16_n936(x)
+ else
+ fun_l16_n272(x)
+ end
+end
+
+def fun_l15_n335(x)
+ if (x < 1)
+ fun_l16_n714(x)
+ else
+ fun_l16_n245(x)
+ end
+end
+
+def fun_l15_n336(x)
+ if (x < 1)
+ fun_l16_n581(x)
+ else
+ fun_l16_n877(x)
+ end
+end
+
+def fun_l15_n337(x)
+ if (x < 1)
+ fun_l16_n558(x)
+ else
+ fun_l16_n944(x)
+ end
+end
+
+def fun_l15_n338(x)
+ if (x < 1)
+ fun_l16_n49(x)
+ else
+ fun_l16_n501(x)
+ end
+end
+
+def fun_l15_n339(x)
+ if (x < 1)
+ fun_l16_n68(x)
+ else
+ fun_l16_n448(x)
+ end
+end
+
+def fun_l15_n340(x)
+ if (x < 1)
+ fun_l16_n249(x)
+ else
+ fun_l16_n210(x)
+ end
+end
+
+def fun_l15_n341(x)
+ if (x < 1)
+ fun_l16_n720(x)
+ else
+ fun_l16_n977(x)
+ end
+end
+
+def fun_l15_n342(x)
+ if (x < 1)
+ fun_l16_n771(x)
+ else
+ fun_l16_n519(x)
+ end
+end
+
+def fun_l15_n343(x)
+ if (x < 1)
+ fun_l16_n995(x)
+ else
+ fun_l16_n759(x)
+ end
+end
+
+def fun_l15_n344(x)
+ if (x < 1)
+ fun_l16_n972(x)
+ else
+ fun_l16_n558(x)
+ end
+end
+
+def fun_l15_n345(x)
+ if (x < 1)
+ fun_l16_n184(x)
+ else
+ fun_l16_n774(x)
+ end
+end
+
+def fun_l15_n346(x)
+ if (x < 1)
+ fun_l16_n881(x)
+ else
+ fun_l16_n858(x)
+ end
+end
+
+def fun_l15_n347(x)
+ if (x < 1)
+ fun_l16_n921(x)
+ else
+ fun_l16_n640(x)
+ end
+end
+
+def fun_l15_n348(x)
+ if (x < 1)
+ fun_l16_n840(x)
+ else
+ fun_l16_n366(x)
+ end
+end
+
+def fun_l15_n349(x)
+ if (x < 1)
+ fun_l16_n835(x)
+ else
+ fun_l16_n701(x)
+ end
+end
+
+def fun_l15_n350(x)
+ if (x < 1)
+ fun_l16_n304(x)
+ else
+ fun_l16_n144(x)
+ end
+end
+
+def fun_l15_n351(x)
+ if (x < 1)
+ fun_l16_n867(x)
+ else
+ fun_l16_n247(x)
+ end
+end
+
+def fun_l15_n352(x)
+ if (x < 1)
+ fun_l16_n595(x)
+ else
+ fun_l16_n676(x)
+ end
+end
+
+def fun_l15_n353(x)
+ if (x < 1)
+ fun_l16_n125(x)
+ else
+ fun_l16_n99(x)
+ end
+end
+
+def fun_l15_n354(x)
+ if (x < 1)
+ fun_l16_n659(x)
+ else
+ fun_l16_n559(x)
+ end
+end
+
+def fun_l15_n355(x)
+ if (x < 1)
+ fun_l16_n405(x)
+ else
+ fun_l16_n182(x)
+ end
+end
+
+def fun_l15_n356(x)
+ if (x < 1)
+ fun_l16_n347(x)
+ else
+ fun_l16_n482(x)
+ end
+end
+
+def fun_l15_n357(x)
+ if (x < 1)
+ fun_l16_n742(x)
+ else
+ fun_l16_n531(x)
+ end
+end
+
+def fun_l15_n358(x)
+ if (x < 1)
+ fun_l16_n954(x)
+ else
+ fun_l16_n908(x)
+ end
+end
+
+def fun_l15_n359(x)
+ if (x < 1)
+ fun_l16_n670(x)
+ else
+ fun_l16_n401(x)
+ end
+end
+
+def fun_l15_n360(x)
+ if (x < 1)
+ fun_l16_n423(x)
+ else
+ fun_l16_n802(x)
+ end
+end
+
+def fun_l15_n361(x)
+ if (x < 1)
+ fun_l16_n12(x)
+ else
+ fun_l16_n985(x)
+ end
+end
+
+def fun_l15_n362(x)
+ if (x < 1)
+ fun_l16_n644(x)
+ else
+ fun_l16_n40(x)
+ end
+end
+
+def fun_l15_n363(x)
+ if (x < 1)
+ fun_l16_n491(x)
+ else
+ fun_l16_n255(x)
+ end
+end
+
+def fun_l15_n364(x)
+ if (x < 1)
+ fun_l16_n14(x)
+ else
+ fun_l16_n433(x)
+ end
+end
+
+def fun_l15_n365(x)
+ if (x < 1)
+ fun_l16_n652(x)
+ else
+ fun_l16_n418(x)
+ end
+end
+
+def fun_l15_n366(x)
+ if (x < 1)
+ fun_l16_n815(x)
+ else
+ fun_l16_n325(x)
+ end
+end
+
+def fun_l15_n367(x)
+ if (x < 1)
+ fun_l16_n623(x)
+ else
+ fun_l16_n34(x)
+ end
+end
+
+def fun_l15_n368(x)
+ if (x < 1)
+ fun_l16_n596(x)
+ else
+ fun_l16_n382(x)
+ end
+end
+
+def fun_l15_n369(x)
+ if (x < 1)
+ fun_l16_n144(x)
+ else
+ fun_l16_n18(x)
+ end
+end
+
+def fun_l15_n370(x)
+ if (x < 1)
+ fun_l16_n37(x)
+ else
+ fun_l16_n626(x)
+ end
+end
+
+def fun_l15_n371(x)
+ if (x < 1)
+ fun_l16_n275(x)
+ else
+ fun_l16_n343(x)
+ end
+end
+
+def fun_l15_n372(x)
+ if (x < 1)
+ fun_l16_n951(x)
+ else
+ fun_l16_n93(x)
+ end
+end
+
+def fun_l15_n373(x)
+ if (x < 1)
+ fun_l16_n893(x)
+ else
+ fun_l16_n137(x)
+ end
+end
+
+def fun_l15_n374(x)
+ if (x < 1)
+ fun_l16_n32(x)
+ else
+ fun_l16_n663(x)
+ end
+end
+
+def fun_l15_n375(x)
+ if (x < 1)
+ fun_l16_n888(x)
+ else
+ fun_l16_n708(x)
+ end
+end
+
+def fun_l15_n376(x)
+ if (x < 1)
+ fun_l16_n745(x)
+ else
+ fun_l16_n275(x)
+ end
+end
+
+def fun_l15_n377(x)
+ if (x < 1)
+ fun_l16_n957(x)
+ else
+ fun_l16_n766(x)
+ end
+end
+
+def fun_l15_n378(x)
+ if (x < 1)
+ fun_l16_n242(x)
+ else
+ fun_l16_n309(x)
+ end
+end
+
+def fun_l15_n379(x)
+ if (x < 1)
+ fun_l16_n855(x)
+ else
+ fun_l16_n289(x)
+ end
+end
+
+def fun_l15_n380(x)
+ if (x < 1)
+ fun_l16_n511(x)
+ else
+ fun_l16_n261(x)
+ end
+end
+
+def fun_l15_n381(x)
+ if (x < 1)
+ fun_l16_n867(x)
+ else
+ fun_l16_n169(x)
+ end
+end
+
+def fun_l15_n382(x)
+ if (x < 1)
+ fun_l16_n646(x)
+ else
+ fun_l16_n821(x)
+ end
+end
+
+def fun_l15_n383(x)
+ if (x < 1)
+ fun_l16_n181(x)
+ else
+ fun_l16_n798(x)
+ end
+end
+
+def fun_l15_n384(x)
+ if (x < 1)
+ fun_l16_n290(x)
+ else
+ fun_l16_n756(x)
+ end
+end
+
+def fun_l15_n385(x)
+ if (x < 1)
+ fun_l16_n896(x)
+ else
+ fun_l16_n14(x)
+ end
+end
+
+def fun_l15_n386(x)
+ if (x < 1)
+ fun_l16_n602(x)
+ else
+ fun_l16_n817(x)
+ end
+end
+
+def fun_l15_n387(x)
+ if (x < 1)
+ fun_l16_n908(x)
+ else
+ fun_l16_n773(x)
+ end
+end
+
+def fun_l15_n388(x)
+ if (x < 1)
+ fun_l16_n708(x)
+ else
+ fun_l16_n416(x)
+ end
+end
+
+def fun_l15_n389(x)
+ if (x < 1)
+ fun_l16_n42(x)
+ else
+ fun_l16_n325(x)
+ end
+end
+
+def fun_l15_n390(x)
+ if (x < 1)
+ fun_l16_n245(x)
+ else
+ fun_l16_n211(x)
+ end
+end
+
+def fun_l15_n391(x)
+ if (x < 1)
+ fun_l16_n674(x)
+ else
+ fun_l16_n854(x)
+ end
+end
+
+def fun_l15_n392(x)
+ if (x < 1)
+ fun_l16_n294(x)
+ else
+ fun_l16_n299(x)
+ end
+end
+
+def fun_l15_n393(x)
+ if (x < 1)
+ fun_l16_n873(x)
+ else
+ fun_l16_n17(x)
+ end
+end
+
+def fun_l15_n394(x)
+ if (x < 1)
+ fun_l16_n375(x)
+ else
+ fun_l16_n976(x)
+ end
+end
+
+def fun_l15_n395(x)
+ if (x < 1)
+ fun_l16_n753(x)
+ else
+ fun_l16_n362(x)
+ end
+end
+
+def fun_l15_n396(x)
+ if (x < 1)
+ fun_l16_n326(x)
+ else
+ fun_l16_n878(x)
+ end
+end
+
+def fun_l15_n397(x)
+ if (x < 1)
+ fun_l16_n118(x)
+ else
+ fun_l16_n552(x)
+ end
+end
+
+def fun_l15_n398(x)
+ if (x < 1)
+ fun_l16_n931(x)
+ else
+ fun_l16_n552(x)
+ end
+end
+
+def fun_l15_n399(x)
+ if (x < 1)
+ fun_l16_n125(x)
+ else
+ fun_l16_n817(x)
+ end
+end
+
+def fun_l15_n400(x)
+ if (x < 1)
+ fun_l16_n747(x)
+ else
+ fun_l16_n328(x)
+ end
+end
+
+def fun_l15_n401(x)
+ if (x < 1)
+ fun_l16_n204(x)
+ else
+ fun_l16_n644(x)
+ end
+end
+
+def fun_l15_n402(x)
+ if (x < 1)
+ fun_l16_n730(x)
+ else
+ fun_l16_n622(x)
+ end
+end
+
+def fun_l15_n403(x)
+ if (x < 1)
+ fun_l16_n718(x)
+ else
+ fun_l16_n616(x)
+ end
+end
+
+def fun_l15_n404(x)
+ if (x < 1)
+ fun_l16_n260(x)
+ else
+ fun_l16_n96(x)
+ end
+end
+
+def fun_l15_n405(x)
+ if (x < 1)
+ fun_l16_n123(x)
+ else
+ fun_l16_n377(x)
+ end
+end
+
+def fun_l15_n406(x)
+ if (x < 1)
+ fun_l16_n425(x)
+ else
+ fun_l16_n601(x)
+ end
+end
+
+def fun_l15_n407(x)
+ if (x < 1)
+ fun_l16_n842(x)
+ else
+ fun_l16_n936(x)
+ end
+end
+
+def fun_l15_n408(x)
+ if (x < 1)
+ fun_l16_n797(x)
+ else
+ fun_l16_n194(x)
+ end
+end
+
+def fun_l15_n409(x)
+ if (x < 1)
+ fun_l16_n930(x)
+ else
+ fun_l16_n976(x)
+ end
+end
+
+def fun_l15_n410(x)
+ if (x < 1)
+ fun_l16_n163(x)
+ else
+ fun_l16_n703(x)
+ end
+end
+
+def fun_l15_n411(x)
+ if (x < 1)
+ fun_l16_n109(x)
+ else
+ fun_l16_n276(x)
+ end
+end
+
+def fun_l15_n412(x)
+ if (x < 1)
+ fun_l16_n37(x)
+ else
+ fun_l16_n372(x)
+ end
+end
+
+def fun_l15_n413(x)
+ if (x < 1)
+ fun_l16_n995(x)
+ else
+ fun_l16_n762(x)
+ end
+end
+
+def fun_l15_n414(x)
+ if (x < 1)
+ fun_l16_n789(x)
+ else
+ fun_l16_n601(x)
+ end
+end
+
+def fun_l15_n415(x)
+ if (x < 1)
+ fun_l16_n699(x)
+ else
+ fun_l16_n853(x)
+ end
+end
+
+def fun_l15_n416(x)
+ if (x < 1)
+ fun_l16_n936(x)
+ else
+ fun_l16_n478(x)
+ end
+end
+
+def fun_l15_n417(x)
+ if (x < 1)
+ fun_l16_n50(x)
+ else
+ fun_l16_n67(x)
+ end
+end
+
+def fun_l15_n418(x)
+ if (x < 1)
+ fun_l16_n563(x)
+ else
+ fun_l16_n248(x)
+ end
+end
+
+def fun_l15_n419(x)
+ if (x < 1)
+ fun_l16_n238(x)
+ else
+ fun_l16_n188(x)
+ end
+end
+
+def fun_l15_n420(x)
+ if (x < 1)
+ fun_l16_n369(x)
+ else
+ fun_l16_n706(x)
+ end
+end
+
+def fun_l15_n421(x)
+ if (x < 1)
+ fun_l16_n641(x)
+ else
+ fun_l16_n869(x)
+ end
+end
+
+def fun_l15_n422(x)
+ if (x < 1)
+ fun_l16_n219(x)
+ else
+ fun_l16_n333(x)
+ end
+end
+
+def fun_l15_n423(x)
+ if (x < 1)
+ fun_l16_n156(x)
+ else
+ fun_l16_n22(x)
+ end
+end
+
+def fun_l15_n424(x)
+ if (x < 1)
+ fun_l16_n443(x)
+ else
+ fun_l16_n1(x)
+ end
+end
+
+def fun_l15_n425(x)
+ if (x < 1)
+ fun_l16_n892(x)
+ else
+ fun_l16_n937(x)
+ end
+end
+
+def fun_l15_n426(x)
+ if (x < 1)
+ fun_l16_n586(x)
+ else
+ fun_l16_n636(x)
+ end
+end
+
+def fun_l15_n427(x)
+ if (x < 1)
+ fun_l16_n519(x)
+ else
+ fun_l16_n269(x)
+ end
+end
+
+def fun_l15_n428(x)
+ if (x < 1)
+ fun_l16_n379(x)
+ else
+ fun_l16_n994(x)
+ end
+end
+
+def fun_l15_n429(x)
+ if (x < 1)
+ fun_l16_n588(x)
+ else
+ fun_l16_n532(x)
+ end
+end
+
+def fun_l15_n430(x)
+ if (x < 1)
+ fun_l16_n584(x)
+ else
+ fun_l16_n445(x)
+ end
+end
+
+def fun_l15_n431(x)
+ if (x < 1)
+ fun_l16_n63(x)
+ else
+ fun_l16_n678(x)
+ end
+end
+
+def fun_l15_n432(x)
+ if (x < 1)
+ fun_l16_n487(x)
+ else
+ fun_l16_n435(x)
+ end
+end
+
+def fun_l15_n433(x)
+ if (x < 1)
+ fun_l16_n673(x)
+ else
+ fun_l16_n220(x)
+ end
+end
+
+def fun_l15_n434(x)
+ if (x < 1)
+ fun_l16_n131(x)
+ else
+ fun_l16_n751(x)
+ end
+end
+
+def fun_l15_n435(x)
+ if (x < 1)
+ fun_l16_n557(x)
+ else
+ fun_l16_n340(x)
+ end
+end
+
+def fun_l15_n436(x)
+ if (x < 1)
+ fun_l16_n511(x)
+ else
+ fun_l16_n751(x)
+ end
+end
+
+def fun_l15_n437(x)
+ if (x < 1)
+ fun_l16_n983(x)
+ else
+ fun_l16_n632(x)
+ end
+end
+
+def fun_l15_n438(x)
+ if (x < 1)
+ fun_l16_n350(x)
+ else
+ fun_l16_n492(x)
+ end
+end
+
+def fun_l15_n439(x)
+ if (x < 1)
+ fun_l16_n994(x)
+ else
+ fun_l16_n76(x)
+ end
+end
+
+def fun_l15_n440(x)
+ if (x < 1)
+ fun_l16_n756(x)
+ else
+ fun_l16_n177(x)
+ end
+end
+
+def fun_l15_n441(x)
+ if (x < 1)
+ fun_l16_n619(x)
+ else
+ fun_l16_n473(x)
+ end
+end
+
+def fun_l15_n442(x)
+ if (x < 1)
+ fun_l16_n667(x)
+ else
+ fun_l16_n714(x)
+ end
+end
+
+def fun_l15_n443(x)
+ if (x < 1)
+ fun_l16_n790(x)
+ else
+ fun_l16_n848(x)
+ end
+end
+
+def fun_l15_n444(x)
+ if (x < 1)
+ fun_l16_n925(x)
+ else
+ fun_l16_n113(x)
+ end
+end
+
+def fun_l15_n445(x)
+ if (x < 1)
+ fun_l16_n990(x)
+ else
+ fun_l16_n566(x)
+ end
+end
+
+def fun_l15_n446(x)
+ if (x < 1)
+ fun_l16_n589(x)
+ else
+ fun_l16_n881(x)
+ end
+end
+
+def fun_l15_n447(x)
+ if (x < 1)
+ fun_l16_n961(x)
+ else
+ fun_l16_n786(x)
+ end
+end
+
+def fun_l15_n448(x)
+ if (x < 1)
+ fun_l16_n928(x)
+ else
+ fun_l16_n631(x)
+ end
+end
+
+def fun_l15_n449(x)
+ if (x < 1)
+ fun_l16_n317(x)
+ else
+ fun_l16_n980(x)
+ end
+end
+
+def fun_l15_n450(x)
+ if (x < 1)
+ fun_l16_n276(x)
+ else
+ fun_l16_n941(x)
+ end
+end
+
+def fun_l15_n451(x)
+ if (x < 1)
+ fun_l16_n552(x)
+ else
+ fun_l16_n545(x)
+ end
+end
+
+def fun_l15_n452(x)
+ if (x < 1)
+ fun_l16_n334(x)
+ else
+ fun_l16_n340(x)
+ end
+end
+
+def fun_l15_n453(x)
+ if (x < 1)
+ fun_l16_n800(x)
+ else
+ fun_l16_n548(x)
+ end
+end
+
+def fun_l15_n454(x)
+ if (x < 1)
+ fun_l16_n676(x)
+ else
+ fun_l16_n742(x)
+ end
+end
+
+def fun_l15_n455(x)
+ if (x < 1)
+ fun_l16_n722(x)
+ else
+ fun_l16_n446(x)
+ end
+end
+
+def fun_l15_n456(x)
+ if (x < 1)
+ fun_l16_n570(x)
+ else
+ fun_l16_n203(x)
+ end
+end
+
+def fun_l15_n457(x)
+ if (x < 1)
+ fun_l16_n425(x)
+ else
+ fun_l16_n401(x)
+ end
+end
+
+def fun_l15_n458(x)
+ if (x < 1)
+ fun_l16_n3(x)
+ else
+ fun_l16_n483(x)
+ end
+end
+
+def fun_l15_n459(x)
+ if (x < 1)
+ fun_l16_n450(x)
+ else
+ fun_l16_n468(x)
+ end
+end
+
+def fun_l15_n460(x)
+ if (x < 1)
+ fun_l16_n447(x)
+ else
+ fun_l16_n758(x)
+ end
+end
+
+def fun_l15_n461(x)
+ if (x < 1)
+ fun_l16_n531(x)
+ else
+ fun_l16_n268(x)
+ end
+end
+
+def fun_l15_n462(x)
+ if (x < 1)
+ fun_l16_n628(x)
+ else
+ fun_l16_n142(x)
+ end
+end
+
+def fun_l15_n463(x)
+ if (x < 1)
+ fun_l16_n823(x)
+ else
+ fun_l16_n97(x)
+ end
+end
+
+def fun_l15_n464(x)
+ if (x < 1)
+ fun_l16_n807(x)
+ else
+ fun_l16_n231(x)
+ end
+end
+
+def fun_l15_n465(x)
+ if (x < 1)
+ fun_l16_n113(x)
+ else
+ fun_l16_n438(x)
+ end
+end
+
+def fun_l15_n466(x)
+ if (x < 1)
+ fun_l16_n234(x)
+ else
+ fun_l16_n369(x)
+ end
+end
+
+def fun_l15_n467(x)
+ if (x < 1)
+ fun_l16_n242(x)
+ else
+ fun_l16_n121(x)
+ end
+end
+
+def fun_l15_n468(x)
+ if (x < 1)
+ fun_l16_n38(x)
+ else
+ fun_l16_n223(x)
+ end
+end
+
+def fun_l15_n469(x)
+ if (x < 1)
+ fun_l16_n618(x)
+ else
+ fun_l16_n550(x)
+ end
+end
+
+def fun_l15_n470(x)
+ if (x < 1)
+ fun_l16_n318(x)
+ else
+ fun_l16_n182(x)
+ end
+end
+
+def fun_l15_n471(x)
+ if (x < 1)
+ fun_l16_n782(x)
+ else
+ fun_l16_n876(x)
+ end
+end
+
+def fun_l15_n472(x)
+ if (x < 1)
+ fun_l16_n995(x)
+ else
+ fun_l16_n4(x)
+ end
+end
+
+def fun_l15_n473(x)
+ if (x < 1)
+ fun_l16_n425(x)
+ else
+ fun_l16_n891(x)
+ end
+end
+
+def fun_l15_n474(x)
+ if (x < 1)
+ fun_l16_n263(x)
+ else
+ fun_l16_n278(x)
+ end
+end
+
+def fun_l15_n475(x)
+ if (x < 1)
+ fun_l16_n116(x)
+ else
+ fun_l16_n62(x)
+ end
+end
+
+def fun_l15_n476(x)
+ if (x < 1)
+ fun_l16_n855(x)
+ else
+ fun_l16_n153(x)
+ end
+end
+
+def fun_l15_n477(x)
+ if (x < 1)
+ fun_l16_n979(x)
+ else
+ fun_l16_n957(x)
+ end
+end
+
+def fun_l15_n478(x)
+ if (x < 1)
+ fun_l16_n671(x)
+ else
+ fun_l16_n694(x)
+ end
+end
+
+def fun_l15_n479(x)
+ if (x < 1)
+ fun_l16_n479(x)
+ else
+ fun_l16_n400(x)
+ end
+end
+
+def fun_l15_n480(x)
+ if (x < 1)
+ fun_l16_n740(x)
+ else
+ fun_l16_n940(x)
+ end
+end
+
+def fun_l15_n481(x)
+ if (x < 1)
+ fun_l16_n270(x)
+ else
+ fun_l16_n802(x)
+ end
+end
+
+def fun_l15_n482(x)
+ if (x < 1)
+ fun_l16_n489(x)
+ else
+ fun_l16_n402(x)
+ end
+end
+
+def fun_l15_n483(x)
+ if (x < 1)
+ fun_l16_n505(x)
+ else
+ fun_l16_n97(x)
+ end
+end
+
+def fun_l15_n484(x)
+ if (x < 1)
+ fun_l16_n64(x)
+ else
+ fun_l16_n748(x)
+ end
+end
+
+def fun_l15_n485(x)
+ if (x < 1)
+ fun_l16_n7(x)
+ else
+ fun_l16_n627(x)
+ end
+end
+
+def fun_l15_n486(x)
+ if (x < 1)
+ fun_l16_n302(x)
+ else
+ fun_l16_n331(x)
+ end
+end
+
+def fun_l15_n487(x)
+ if (x < 1)
+ fun_l16_n771(x)
+ else
+ fun_l16_n895(x)
+ end
+end
+
+def fun_l15_n488(x)
+ if (x < 1)
+ fun_l16_n306(x)
+ else
+ fun_l16_n740(x)
+ end
+end
+
+def fun_l15_n489(x)
+ if (x < 1)
+ fun_l16_n722(x)
+ else
+ fun_l16_n848(x)
+ end
+end
+
+def fun_l15_n490(x)
+ if (x < 1)
+ fun_l16_n764(x)
+ else
+ fun_l16_n851(x)
+ end
+end
+
+def fun_l15_n491(x)
+ if (x < 1)
+ fun_l16_n357(x)
+ else
+ fun_l16_n117(x)
+ end
+end
+
+def fun_l15_n492(x)
+ if (x < 1)
+ fun_l16_n483(x)
+ else
+ fun_l16_n187(x)
+ end
+end
+
+def fun_l15_n493(x)
+ if (x < 1)
+ fun_l16_n695(x)
+ else
+ fun_l16_n727(x)
+ end
+end
+
+def fun_l15_n494(x)
+ if (x < 1)
+ fun_l16_n460(x)
+ else
+ fun_l16_n154(x)
+ end
+end
+
+def fun_l15_n495(x)
+ if (x < 1)
+ fun_l16_n130(x)
+ else
+ fun_l16_n999(x)
+ end
+end
+
+def fun_l15_n496(x)
+ if (x < 1)
+ fun_l16_n963(x)
+ else
+ fun_l16_n746(x)
+ end
+end
+
+def fun_l15_n497(x)
+ if (x < 1)
+ fun_l16_n630(x)
+ else
+ fun_l16_n852(x)
+ end
+end
+
+def fun_l15_n498(x)
+ if (x < 1)
+ fun_l16_n847(x)
+ else
+ fun_l16_n836(x)
+ end
+end
+
+def fun_l15_n499(x)
+ if (x < 1)
+ fun_l16_n100(x)
+ else
+ fun_l16_n40(x)
+ end
+end
+
+def fun_l15_n500(x)
+ if (x < 1)
+ fun_l16_n246(x)
+ else
+ fun_l16_n442(x)
+ end
+end
+
+def fun_l15_n501(x)
+ if (x < 1)
+ fun_l16_n355(x)
+ else
+ fun_l16_n405(x)
+ end
+end
+
+def fun_l15_n502(x)
+ if (x < 1)
+ fun_l16_n857(x)
+ else
+ fun_l16_n652(x)
+ end
+end
+
+def fun_l15_n503(x)
+ if (x < 1)
+ fun_l16_n612(x)
+ else
+ fun_l16_n779(x)
+ end
+end
+
+def fun_l15_n504(x)
+ if (x < 1)
+ fun_l16_n836(x)
+ else
+ fun_l16_n625(x)
+ end
+end
+
+def fun_l15_n505(x)
+ if (x < 1)
+ fun_l16_n872(x)
+ else
+ fun_l16_n905(x)
+ end
+end
+
+def fun_l15_n506(x)
+ if (x < 1)
+ fun_l16_n953(x)
+ else
+ fun_l16_n955(x)
+ end
+end
+
+def fun_l15_n507(x)
+ if (x < 1)
+ fun_l16_n678(x)
+ else
+ fun_l16_n663(x)
+ end
+end
+
+def fun_l15_n508(x)
+ if (x < 1)
+ fun_l16_n848(x)
+ else
+ fun_l16_n438(x)
+ end
+end
+
+def fun_l15_n509(x)
+ if (x < 1)
+ fun_l16_n558(x)
+ else
+ fun_l16_n430(x)
+ end
+end
+
+def fun_l15_n510(x)
+ if (x < 1)
+ fun_l16_n424(x)
+ else
+ fun_l16_n473(x)
+ end
+end
+
+def fun_l15_n511(x)
+ if (x < 1)
+ fun_l16_n897(x)
+ else
+ fun_l16_n359(x)
+ end
+end
+
+def fun_l15_n512(x)
+ if (x < 1)
+ fun_l16_n229(x)
+ else
+ fun_l16_n205(x)
+ end
+end
+
+def fun_l15_n513(x)
+ if (x < 1)
+ fun_l16_n553(x)
+ else
+ fun_l16_n438(x)
+ end
+end
+
+def fun_l15_n514(x)
+ if (x < 1)
+ fun_l16_n300(x)
+ else
+ fun_l16_n588(x)
+ end
+end
+
+def fun_l15_n515(x)
+ if (x < 1)
+ fun_l16_n819(x)
+ else
+ fun_l16_n467(x)
+ end
+end
+
+def fun_l15_n516(x)
+ if (x < 1)
+ fun_l16_n767(x)
+ else
+ fun_l16_n786(x)
+ end
+end
+
+def fun_l15_n517(x)
+ if (x < 1)
+ fun_l16_n50(x)
+ else
+ fun_l16_n309(x)
+ end
+end
+
+def fun_l15_n518(x)
+ if (x < 1)
+ fun_l16_n671(x)
+ else
+ fun_l16_n635(x)
+ end
+end
+
+def fun_l15_n519(x)
+ if (x < 1)
+ fun_l16_n935(x)
+ else
+ fun_l16_n497(x)
+ end
+end
+
+def fun_l15_n520(x)
+ if (x < 1)
+ fun_l16_n343(x)
+ else
+ fun_l16_n175(x)
+ end
+end
+
+def fun_l15_n521(x)
+ if (x < 1)
+ fun_l16_n212(x)
+ else
+ fun_l16_n987(x)
+ end
+end
+
+def fun_l15_n522(x)
+ if (x < 1)
+ fun_l16_n780(x)
+ else
+ fun_l16_n331(x)
+ end
+end
+
+def fun_l15_n523(x)
+ if (x < 1)
+ fun_l16_n452(x)
+ else
+ fun_l16_n393(x)
+ end
+end
+
+def fun_l15_n524(x)
+ if (x < 1)
+ fun_l16_n823(x)
+ else
+ fun_l16_n212(x)
+ end
+end
+
+def fun_l15_n525(x)
+ if (x < 1)
+ fun_l16_n516(x)
+ else
+ fun_l16_n906(x)
+ end
+end
+
+def fun_l15_n526(x)
+ if (x < 1)
+ fun_l16_n590(x)
+ else
+ fun_l16_n278(x)
+ end
+end
+
+def fun_l15_n527(x)
+ if (x < 1)
+ fun_l16_n392(x)
+ else
+ fun_l16_n714(x)
+ end
+end
+
+def fun_l15_n528(x)
+ if (x < 1)
+ fun_l16_n729(x)
+ else
+ fun_l16_n751(x)
+ end
+end
+
+def fun_l15_n529(x)
+ if (x < 1)
+ fun_l16_n863(x)
+ else
+ fun_l16_n478(x)
+ end
+end
+
+def fun_l15_n530(x)
+ if (x < 1)
+ fun_l16_n472(x)
+ else
+ fun_l16_n672(x)
+ end
+end
+
+def fun_l15_n531(x)
+ if (x < 1)
+ fun_l16_n811(x)
+ else
+ fun_l16_n201(x)
+ end
+end
+
+def fun_l15_n532(x)
+ if (x < 1)
+ fun_l16_n558(x)
+ else
+ fun_l16_n602(x)
+ end
+end
+
+def fun_l15_n533(x)
+ if (x < 1)
+ fun_l16_n788(x)
+ else
+ fun_l16_n175(x)
+ end
+end
+
+def fun_l15_n534(x)
+ if (x < 1)
+ fun_l16_n497(x)
+ else
+ fun_l16_n807(x)
+ end
+end
+
+def fun_l15_n535(x)
+ if (x < 1)
+ fun_l16_n712(x)
+ else
+ fun_l16_n870(x)
+ end
+end
+
+def fun_l15_n536(x)
+ if (x < 1)
+ fun_l16_n699(x)
+ else
+ fun_l16_n879(x)
+ end
+end
+
+def fun_l15_n537(x)
+ if (x < 1)
+ fun_l16_n215(x)
+ else
+ fun_l16_n807(x)
+ end
+end
+
+def fun_l15_n538(x)
+ if (x < 1)
+ fun_l16_n569(x)
+ else
+ fun_l16_n385(x)
+ end
+end
+
+def fun_l15_n539(x)
+ if (x < 1)
+ fun_l16_n807(x)
+ else
+ fun_l16_n699(x)
+ end
+end
+
+def fun_l15_n540(x)
+ if (x < 1)
+ fun_l16_n982(x)
+ else
+ fun_l16_n436(x)
+ end
+end
+
+def fun_l15_n541(x)
+ if (x < 1)
+ fun_l16_n852(x)
+ else
+ fun_l16_n800(x)
+ end
+end
+
+def fun_l15_n542(x)
+ if (x < 1)
+ fun_l16_n401(x)
+ else
+ fun_l16_n478(x)
+ end
+end
+
+def fun_l15_n543(x)
+ if (x < 1)
+ fun_l16_n373(x)
+ else
+ fun_l16_n465(x)
+ end
+end
+
+def fun_l15_n544(x)
+ if (x < 1)
+ fun_l16_n299(x)
+ else
+ fun_l16_n337(x)
+ end
+end
+
+def fun_l15_n545(x)
+ if (x < 1)
+ fun_l16_n931(x)
+ else
+ fun_l16_n68(x)
+ end
+end
+
+def fun_l15_n546(x)
+ if (x < 1)
+ fun_l16_n87(x)
+ else
+ fun_l16_n947(x)
+ end
+end
+
+def fun_l15_n547(x)
+ if (x < 1)
+ fun_l16_n287(x)
+ else
+ fun_l16_n530(x)
+ end
+end
+
+def fun_l15_n548(x)
+ if (x < 1)
+ fun_l16_n910(x)
+ else
+ fun_l16_n112(x)
+ end
+end
+
+def fun_l15_n549(x)
+ if (x < 1)
+ fun_l16_n878(x)
+ else
+ fun_l16_n737(x)
+ end
+end
+
+def fun_l15_n550(x)
+ if (x < 1)
+ fun_l16_n538(x)
+ else
+ fun_l16_n634(x)
+ end
+end
+
+def fun_l15_n551(x)
+ if (x < 1)
+ fun_l16_n109(x)
+ else
+ fun_l16_n493(x)
+ end
+end
+
+def fun_l15_n552(x)
+ if (x < 1)
+ fun_l16_n631(x)
+ else
+ fun_l16_n244(x)
+ end
+end
+
+def fun_l15_n553(x)
+ if (x < 1)
+ fun_l16_n107(x)
+ else
+ fun_l16_n718(x)
+ end
+end
+
+def fun_l15_n554(x)
+ if (x < 1)
+ fun_l16_n572(x)
+ else
+ fun_l16_n199(x)
+ end
+end
+
+def fun_l15_n555(x)
+ if (x < 1)
+ fun_l16_n109(x)
+ else
+ fun_l16_n705(x)
+ end
+end
+
+def fun_l15_n556(x)
+ if (x < 1)
+ fun_l16_n679(x)
+ else
+ fun_l16_n999(x)
+ end
+end
+
+def fun_l15_n557(x)
+ if (x < 1)
+ fun_l16_n714(x)
+ else
+ fun_l16_n121(x)
+ end
+end
+
+def fun_l15_n558(x)
+ if (x < 1)
+ fun_l16_n408(x)
+ else
+ fun_l16_n239(x)
+ end
+end
+
+def fun_l15_n559(x)
+ if (x < 1)
+ fun_l16_n861(x)
+ else
+ fun_l16_n83(x)
+ end
+end
+
+def fun_l15_n560(x)
+ if (x < 1)
+ fun_l16_n597(x)
+ else
+ fun_l16_n413(x)
+ end
+end
+
+def fun_l15_n561(x)
+ if (x < 1)
+ fun_l16_n485(x)
+ else
+ fun_l16_n42(x)
+ end
+end
+
+def fun_l15_n562(x)
+ if (x < 1)
+ fun_l16_n798(x)
+ else
+ fun_l16_n340(x)
+ end
+end
+
+def fun_l15_n563(x)
+ if (x < 1)
+ fun_l16_n50(x)
+ else
+ fun_l16_n858(x)
+ end
+end
+
+def fun_l15_n564(x)
+ if (x < 1)
+ fun_l16_n92(x)
+ else
+ fun_l16_n3(x)
+ end
+end
+
+def fun_l15_n565(x)
+ if (x < 1)
+ fun_l16_n311(x)
+ else
+ fun_l16_n953(x)
+ end
+end
+
+def fun_l15_n566(x)
+ if (x < 1)
+ fun_l16_n649(x)
+ else
+ fun_l16_n670(x)
+ end
+end
+
+def fun_l15_n567(x)
+ if (x < 1)
+ fun_l16_n598(x)
+ else
+ fun_l16_n268(x)
+ end
+end
+
+def fun_l15_n568(x)
+ if (x < 1)
+ fun_l16_n425(x)
+ else
+ fun_l16_n821(x)
+ end
+end
+
+def fun_l15_n569(x)
+ if (x < 1)
+ fun_l16_n447(x)
+ else
+ fun_l16_n940(x)
+ end
+end
+
+def fun_l15_n570(x)
+ if (x < 1)
+ fun_l16_n755(x)
+ else
+ fun_l16_n26(x)
+ end
+end
+
+def fun_l15_n571(x)
+ if (x < 1)
+ fun_l16_n157(x)
+ else
+ fun_l16_n582(x)
+ end
+end
+
+def fun_l15_n572(x)
+ if (x < 1)
+ fun_l16_n530(x)
+ else
+ fun_l16_n202(x)
+ end
+end
+
+def fun_l15_n573(x)
+ if (x < 1)
+ fun_l16_n95(x)
+ else
+ fun_l16_n137(x)
+ end
+end
+
+def fun_l15_n574(x)
+ if (x < 1)
+ fun_l16_n789(x)
+ else
+ fun_l16_n531(x)
+ end
+end
+
+def fun_l15_n575(x)
+ if (x < 1)
+ fun_l16_n677(x)
+ else
+ fun_l16_n686(x)
+ end
+end
+
+def fun_l15_n576(x)
+ if (x < 1)
+ fun_l16_n253(x)
+ else
+ fun_l16_n101(x)
+ end
+end
+
+def fun_l15_n577(x)
+ if (x < 1)
+ fun_l16_n579(x)
+ else
+ fun_l16_n250(x)
+ end
+end
+
+def fun_l15_n578(x)
+ if (x < 1)
+ fun_l16_n104(x)
+ else
+ fun_l16_n860(x)
+ end
+end
+
+def fun_l15_n579(x)
+ if (x < 1)
+ fun_l16_n415(x)
+ else
+ fun_l16_n480(x)
+ end
+end
+
+def fun_l15_n580(x)
+ if (x < 1)
+ fun_l16_n255(x)
+ else
+ fun_l16_n123(x)
+ end
+end
+
+def fun_l15_n581(x)
+ if (x < 1)
+ fun_l16_n40(x)
+ else
+ fun_l16_n36(x)
+ end
+end
+
+def fun_l15_n582(x)
+ if (x < 1)
+ fun_l16_n612(x)
+ else
+ fun_l16_n46(x)
+ end
+end
+
+def fun_l15_n583(x)
+ if (x < 1)
+ fun_l16_n328(x)
+ else
+ fun_l16_n638(x)
+ end
+end
+
+def fun_l15_n584(x)
+ if (x < 1)
+ fun_l16_n219(x)
+ else
+ fun_l16_n672(x)
+ end
+end
+
+def fun_l15_n585(x)
+ if (x < 1)
+ fun_l16_n67(x)
+ else
+ fun_l16_n584(x)
+ end
+end
+
+def fun_l15_n586(x)
+ if (x < 1)
+ fun_l16_n222(x)
+ else
+ fun_l16_n366(x)
+ end
+end
+
+def fun_l15_n587(x)
+ if (x < 1)
+ fun_l16_n194(x)
+ else
+ fun_l16_n54(x)
+ end
+end
+
+def fun_l15_n588(x)
+ if (x < 1)
+ fun_l16_n742(x)
+ else
+ fun_l16_n725(x)
+ end
+end
+
+def fun_l15_n589(x)
+ if (x < 1)
+ fun_l16_n557(x)
+ else
+ fun_l16_n688(x)
+ end
+end
+
+def fun_l15_n590(x)
+ if (x < 1)
+ fun_l16_n588(x)
+ else
+ fun_l16_n296(x)
+ end
+end
+
+def fun_l15_n591(x)
+ if (x < 1)
+ fun_l16_n756(x)
+ else
+ fun_l16_n619(x)
+ end
+end
+
+def fun_l15_n592(x)
+ if (x < 1)
+ fun_l16_n919(x)
+ else
+ fun_l16_n607(x)
+ end
+end
+
+def fun_l15_n593(x)
+ if (x < 1)
+ fun_l16_n168(x)
+ else
+ fun_l16_n425(x)
+ end
+end
+
+def fun_l15_n594(x)
+ if (x < 1)
+ fun_l16_n641(x)
+ else
+ fun_l16_n980(x)
+ end
+end
+
+def fun_l15_n595(x)
+ if (x < 1)
+ fun_l16_n132(x)
+ else
+ fun_l16_n120(x)
+ end
+end
+
+def fun_l15_n596(x)
+ if (x < 1)
+ fun_l16_n998(x)
+ else
+ fun_l16_n383(x)
+ end
+end
+
+def fun_l15_n597(x)
+ if (x < 1)
+ fun_l16_n987(x)
+ else
+ fun_l16_n685(x)
+ end
+end
+
+def fun_l15_n598(x)
+ if (x < 1)
+ fun_l16_n898(x)
+ else
+ fun_l16_n53(x)
+ end
+end
+
+def fun_l15_n599(x)
+ if (x < 1)
+ fun_l16_n589(x)
+ else
+ fun_l16_n25(x)
+ end
+end
+
+def fun_l15_n600(x)
+ if (x < 1)
+ fun_l16_n841(x)
+ else
+ fun_l16_n623(x)
+ end
+end
+
+def fun_l15_n601(x)
+ if (x < 1)
+ fun_l16_n63(x)
+ else
+ fun_l16_n515(x)
+ end
+end
+
+def fun_l15_n602(x)
+ if (x < 1)
+ fun_l16_n708(x)
+ else
+ fun_l16_n318(x)
+ end
+end
+
+def fun_l15_n603(x)
+ if (x < 1)
+ fun_l16_n679(x)
+ else
+ fun_l16_n31(x)
+ end
+end
+
+def fun_l15_n604(x)
+ if (x < 1)
+ fun_l16_n617(x)
+ else
+ fun_l16_n20(x)
+ end
+end
+
+def fun_l15_n605(x)
+ if (x < 1)
+ fun_l16_n635(x)
+ else
+ fun_l16_n990(x)
+ end
+end
+
+def fun_l15_n606(x)
+ if (x < 1)
+ fun_l16_n174(x)
+ else
+ fun_l16_n977(x)
+ end
+end
+
+def fun_l15_n607(x)
+ if (x < 1)
+ fun_l16_n449(x)
+ else
+ fun_l16_n658(x)
+ end
+end
+
+def fun_l15_n608(x)
+ if (x < 1)
+ fun_l16_n208(x)
+ else
+ fun_l16_n875(x)
+ end
+end
+
+def fun_l15_n609(x)
+ if (x < 1)
+ fun_l16_n665(x)
+ else
+ fun_l16_n431(x)
+ end
+end
+
+def fun_l15_n610(x)
+ if (x < 1)
+ fun_l16_n6(x)
+ else
+ fun_l16_n78(x)
+ end
+end
+
+def fun_l15_n611(x)
+ if (x < 1)
+ fun_l16_n335(x)
+ else
+ fun_l16_n558(x)
+ end
+end
+
+def fun_l15_n612(x)
+ if (x < 1)
+ fun_l16_n259(x)
+ else
+ fun_l16_n893(x)
+ end
+end
+
+def fun_l15_n613(x)
+ if (x < 1)
+ fun_l16_n511(x)
+ else
+ fun_l16_n519(x)
+ end
+end
+
+def fun_l15_n614(x)
+ if (x < 1)
+ fun_l16_n96(x)
+ else
+ fun_l16_n28(x)
+ end
+end
+
+def fun_l15_n615(x)
+ if (x < 1)
+ fun_l16_n166(x)
+ else
+ fun_l16_n417(x)
+ end
+end
+
+def fun_l15_n616(x)
+ if (x < 1)
+ fun_l16_n666(x)
+ else
+ fun_l16_n932(x)
+ end
+end
+
+def fun_l15_n617(x)
+ if (x < 1)
+ fun_l16_n745(x)
+ else
+ fun_l16_n967(x)
+ end
+end
+
+def fun_l15_n618(x)
+ if (x < 1)
+ fun_l16_n5(x)
+ else
+ fun_l16_n769(x)
+ end
+end
+
+def fun_l15_n619(x)
+ if (x < 1)
+ fun_l16_n108(x)
+ else
+ fun_l16_n658(x)
+ end
+end
+
+def fun_l15_n620(x)
+ if (x < 1)
+ fun_l16_n454(x)
+ else
+ fun_l16_n666(x)
+ end
+end
+
+def fun_l15_n621(x)
+ if (x < 1)
+ fun_l16_n756(x)
+ else
+ fun_l16_n580(x)
+ end
+end
+
+def fun_l15_n622(x)
+ if (x < 1)
+ fun_l16_n419(x)
+ else
+ fun_l16_n450(x)
+ end
+end
+
+def fun_l15_n623(x)
+ if (x < 1)
+ fun_l16_n793(x)
+ else
+ fun_l16_n268(x)
+ end
+end
+
+def fun_l15_n624(x)
+ if (x < 1)
+ fun_l16_n78(x)
+ else
+ fun_l16_n311(x)
+ end
+end
+
+def fun_l15_n625(x)
+ if (x < 1)
+ fun_l16_n35(x)
+ else
+ fun_l16_n378(x)
+ end
+end
+
+def fun_l15_n626(x)
+ if (x < 1)
+ fun_l16_n974(x)
+ else
+ fun_l16_n483(x)
+ end
+end
+
+def fun_l15_n627(x)
+ if (x < 1)
+ fun_l16_n67(x)
+ else
+ fun_l16_n497(x)
+ end
+end
+
+def fun_l15_n628(x)
+ if (x < 1)
+ fun_l16_n640(x)
+ else
+ fun_l16_n32(x)
+ end
+end
+
+def fun_l15_n629(x)
+ if (x < 1)
+ fun_l16_n297(x)
+ else
+ fun_l16_n63(x)
+ end
+end
+
+def fun_l15_n630(x)
+ if (x < 1)
+ fun_l16_n546(x)
+ else
+ fun_l16_n931(x)
+ end
+end
+
+def fun_l15_n631(x)
+ if (x < 1)
+ fun_l16_n688(x)
+ else
+ fun_l16_n542(x)
+ end
+end
+
+def fun_l15_n632(x)
+ if (x < 1)
+ fun_l16_n313(x)
+ else
+ fun_l16_n1(x)
+ end
+end
+
+def fun_l15_n633(x)
+ if (x < 1)
+ fun_l16_n743(x)
+ else
+ fun_l16_n382(x)
+ end
+end
+
+def fun_l15_n634(x)
+ if (x < 1)
+ fun_l16_n224(x)
+ else
+ fun_l16_n311(x)
+ end
+end
+
+def fun_l15_n635(x)
+ if (x < 1)
+ fun_l16_n926(x)
+ else
+ fun_l16_n329(x)
+ end
+end
+
+def fun_l15_n636(x)
+ if (x < 1)
+ fun_l16_n735(x)
+ else
+ fun_l16_n759(x)
+ end
+end
+
+def fun_l15_n637(x)
+ if (x < 1)
+ fun_l16_n699(x)
+ else
+ fun_l16_n27(x)
+ end
+end
+
+def fun_l15_n638(x)
+ if (x < 1)
+ fun_l16_n710(x)
+ else
+ fun_l16_n194(x)
+ end
+end
+
+def fun_l15_n639(x)
+ if (x < 1)
+ fun_l16_n245(x)
+ else
+ fun_l16_n950(x)
+ end
+end
+
+def fun_l15_n640(x)
+ if (x < 1)
+ fun_l16_n488(x)
+ else
+ fun_l16_n357(x)
+ end
+end
+
+def fun_l15_n641(x)
+ if (x < 1)
+ fun_l16_n331(x)
+ else
+ fun_l16_n962(x)
+ end
+end
+
+def fun_l15_n642(x)
+ if (x < 1)
+ fun_l16_n144(x)
+ else
+ fun_l16_n877(x)
+ end
+end
+
+def fun_l15_n643(x)
+ if (x < 1)
+ fun_l16_n605(x)
+ else
+ fun_l16_n733(x)
+ end
+end
+
+def fun_l15_n644(x)
+ if (x < 1)
+ fun_l16_n22(x)
+ else
+ fun_l16_n176(x)
+ end
+end
+
+def fun_l15_n645(x)
+ if (x < 1)
+ fun_l16_n934(x)
+ else
+ fun_l16_n351(x)
+ end
+end
+
+def fun_l15_n646(x)
+ if (x < 1)
+ fun_l16_n224(x)
+ else
+ fun_l16_n308(x)
+ end
+end
+
+def fun_l15_n647(x)
+ if (x < 1)
+ fun_l16_n374(x)
+ else
+ fun_l16_n612(x)
+ end
+end
+
+def fun_l15_n648(x)
+ if (x < 1)
+ fun_l16_n105(x)
+ else
+ fun_l16_n563(x)
+ end
+end
+
+def fun_l15_n649(x)
+ if (x < 1)
+ fun_l16_n955(x)
+ else
+ fun_l16_n63(x)
+ end
+end
+
+def fun_l15_n650(x)
+ if (x < 1)
+ fun_l16_n734(x)
+ else
+ fun_l16_n194(x)
+ end
+end
+
+def fun_l15_n651(x)
+ if (x < 1)
+ fun_l16_n237(x)
+ else
+ fun_l16_n425(x)
+ end
+end
+
+def fun_l15_n652(x)
+ if (x < 1)
+ fun_l16_n135(x)
+ else
+ fun_l16_n217(x)
+ end
+end
+
+def fun_l15_n653(x)
+ if (x < 1)
+ fun_l16_n565(x)
+ else
+ fun_l16_n437(x)
+ end
+end
+
+def fun_l15_n654(x)
+ if (x < 1)
+ fun_l16_n471(x)
+ else
+ fun_l16_n426(x)
+ end
+end
+
+def fun_l15_n655(x)
+ if (x < 1)
+ fun_l16_n570(x)
+ else
+ fun_l16_n64(x)
+ end
+end
+
+def fun_l15_n656(x)
+ if (x < 1)
+ fun_l16_n456(x)
+ else
+ fun_l16_n479(x)
+ end
+end
+
+def fun_l15_n657(x)
+ if (x < 1)
+ fun_l16_n446(x)
+ else
+ fun_l16_n362(x)
+ end
+end
+
+def fun_l15_n658(x)
+ if (x < 1)
+ fun_l16_n294(x)
+ else
+ fun_l16_n485(x)
+ end
+end
+
+def fun_l15_n659(x)
+ if (x < 1)
+ fun_l16_n96(x)
+ else
+ fun_l16_n60(x)
+ end
+end
+
+def fun_l15_n660(x)
+ if (x < 1)
+ fun_l16_n436(x)
+ else
+ fun_l16_n12(x)
+ end
+end
+
+def fun_l15_n661(x)
+ if (x < 1)
+ fun_l16_n5(x)
+ else
+ fun_l16_n452(x)
+ end
+end
+
+def fun_l15_n662(x)
+ if (x < 1)
+ fun_l16_n70(x)
+ else
+ fun_l16_n564(x)
+ end
+end
+
+def fun_l15_n663(x)
+ if (x < 1)
+ fun_l16_n92(x)
+ else
+ fun_l16_n333(x)
+ end
+end
+
+def fun_l15_n664(x)
+ if (x < 1)
+ fun_l16_n884(x)
+ else
+ fun_l16_n381(x)
+ end
+end
+
+def fun_l15_n665(x)
+ if (x < 1)
+ fun_l16_n816(x)
+ else
+ fun_l16_n243(x)
+ end
+end
+
+def fun_l15_n666(x)
+ if (x < 1)
+ fun_l16_n680(x)
+ else
+ fun_l16_n306(x)
+ end
+end
+
+def fun_l15_n667(x)
+ if (x < 1)
+ fun_l16_n470(x)
+ else
+ fun_l16_n559(x)
+ end
+end
+
+def fun_l15_n668(x)
+ if (x < 1)
+ fun_l16_n34(x)
+ else
+ fun_l16_n261(x)
+ end
+end
+
+def fun_l15_n669(x)
+ if (x < 1)
+ fun_l16_n644(x)
+ else
+ fun_l16_n389(x)
+ end
+end
+
+def fun_l15_n670(x)
+ if (x < 1)
+ fun_l16_n313(x)
+ else
+ fun_l16_n575(x)
+ end
+end
+
+def fun_l15_n671(x)
+ if (x < 1)
+ fun_l16_n241(x)
+ else
+ fun_l16_n304(x)
+ end
+end
+
+def fun_l15_n672(x)
+ if (x < 1)
+ fun_l16_n280(x)
+ else
+ fun_l16_n996(x)
+ end
+end
+
+def fun_l15_n673(x)
+ if (x < 1)
+ fun_l16_n723(x)
+ else
+ fun_l16_n42(x)
+ end
+end
+
+def fun_l15_n674(x)
+ if (x < 1)
+ fun_l16_n503(x)
+ else
+ fun_l16_n837(x)
+ end
+end
+
+def fun_l15_n675(x)
+ if (x < 1)
+ fun_l16_n105(x)
+ else
+ fun_l16_n815(x)
+ end
+end
+
+def fun_l15_n676(x)
+ if (x < 1)
+ fun_l16_n441(x)
+ else
+ fun_l16_n313(x)
+ end
+end
+
+def fun_l15_n677(x)
+ if (x < 1)
+ fun_l16_n277(x)
+ else
+ fun_l16_n653(x)
+ end
+end
+
+def fun_l15_n678(x)
+ if (x < 1)
+ fun_l16_n105(x)
+ else
+ fun_l16_n907(x)
+ end
+end
+
+def fun_l15_n679(x)
+ if (x < 1)
+ fun_l16_n549(x)
+ else
+ fun_l16_n956(x)
+ end
+end
+
+def fun_l15_n680(x)
+ if (x < 1)
+ fun_l16_n177(x)
+ else
+ fun_l16_n238(x)
+ end
+end
+
+def fun_l15_n681(x)
+ if (x < 1)
+ fun_l16_n931(x)
+ else
+ fun_l16_n278(x)
+ end
+end
+
+def fun_l15_n682(x)
+ if (x < 1)
+ fun_l16_n923(x)
+ else
+ fun_l16_n924(x)
+ end
+end
+
+def fun_l15_n683(x)
+ if (x < 1)
+ fun_l16_n926(x)
+ else
+ fun_l16_n76(x)
+ end
+end
+
+def fun_l15_n684(x)
+ if (x < 1)
+ fun_l16_n828(x)
+ else
+ fun_l16_n961(x)
+ end
+end
+
+def fun_l15_n685(x)
+ if (x < 1)
+ fun_l16_n298(x)
+ else
+ fun_l16_n95(x)
+ end
+end
+
+def fun_l15_n686(x)
+ if (x < 1)
+ fun_l16_n929(x)
+ else
+ fun_l16_n239(x)
+ end
+end
+
+def fun_l15_n687(x)
+ if (x < 1)
+ fun_l16_n488(x)
+ else
+ fun_l16_n543(x)
+ end
+end
+
+def fun_l15_n688(x)
+ if (x < 1)
+ fun_l16_n562(x)
+ else
+ fun_l16_n879(x)
+ end
+end
+
+def fun_l15_n689(x)
+ if (x < 1)
+ fun_l16_n348(x)
+ else
+ fun_l16_n458(x)
+ end
+end
+
+def fun_l15_n690(x)
+ if (x < 1)
+ fun_l16_n431(x)
+ else
+ fun_l16_n653(x)
+ end
+end
+
+def fun_l15_n691(x)
+ if (x < 1)
+ fun_l16_n173(x)
+ else
+ fun_l16_n600(x)
+ end
+end
+
+def fun_l15_n692(x)
+ if (x < 1)
+ fun_l16_n820(x)
+ else
+ fun_l16_n793(x)
+ end
+end
+
+def fun_l15_n693(x)
+ if (x < 1)
+ fun_l16_n611(x)
+ else
+ fun_l16_n308(x)
+ end
+end
+
+def fun_l15_n694(x)
+ if (x < 1)
+ fun_l16_n325(x)
+ else
+ fun_l16_n791(x)
+ end
+end
+
+def fun_l15_n695(x)
+ if (x < 1)
+ fun_l16_n890(x)
+ else
+ fun_l16_n98(x)
+ end
+end
+
+def fun_l15_n696(x)
+ if (x < 1)
+ fun_l16_n803(x)
+ else
+ fun_l16_n890(x)
+ end
+end
+
+def fun_l15_n697(x)
+ if (x < 1)
+ fun_l16_n182(x)
+ else
+ fun_l16_n229(x)
+ end
+end
+
+def fun_l15_n698(x)
+ if (x < 1)
+ fun_l16_n238(x)
+ else
+ fun_l16_n395(x)
+ end
+end
+
+def fun_l15_n699(x)
+ if (x < 1)
+ fun_l16_n349(x)
+ else
+ fun_l16_n903(x)
+ end
+end
+
+def fun_l15_n700(x)
+ if (x < 1)
+ fun_l16_n328(x)
+ else
+ fun_l16_n664(x)
+ end
+end
+
+def fun_l15_n701(x)
+ if (x < 1)
+ fun_l16_n924(x)
+ else
+ fun_l16_n415(x)
+ end
+end
+
+def fun_l15_n702(x)
+ if (x < 1)
+ fun_l16_n504(x)
+ else
+ fun_l16_n180(x)
+ end
+end
+
+def fun_l15_n703(x)
+ if (x < 1)
+ fun_l16_n754(x)
+ else
+ fun_l16_n580(x)
+ end
+end
+
+def fun_l15_n704(x)
+ if (x < 1)
+ fun_l16_n686(x)
+ else
+ fun_l16_n75(x)
+ end
+end
+
+def fun_l15_n705(x)
+ if (x < 1)
+ fun_l16_n295(x)
+ else
+ fun_l16_n789(x)
+ end
+end
+
+def fun_l15_n706(x)
+ if (x < 1)
+ fun_l16_n796(x)
+ else
+ fun_l16_n628(x)
+ end
+end
+
+def fun_l15_n707(x)
+ if (x < 1)
+ fun_l16_n603(x)
+ else
+ fun_l16_n864(x)
+ end
+end
+
+def fun_l15_n708(x)
+ if (x < 1)
+ fun_l16_n420(x)
+ else
+ fun_l16_n506(x)
+ end
+end
+
+def fun_l15_n709(x)
+ if (x < 1)
+ fun_l16_n417(x)
+ else
+ fun_l16_n677(x)
+ end
+end
+
+def fun_l15_n710(x)
+ if (x < 1)
+ fun_l16_n484(x)
+ else
+ fun_l16_n210(x)
+ end
+end
+
+def fun_l15_n711(x)
+ if (x < 1)
+ fun_l16_n127(x)
+ else
+ fun_l16_n423(x)
+ end
+end
+
+def fun_l15_n712(x)
+ if (x < 1)
+ fun_l16_n395(x)
+ else
+ fun_l16_n75(x)
+ end
+end
+
+def fun_l15_n713(x)
+ if (x < 1)
+ fun_l16_n388(x)
+ else
+ fun_l16_n261(x)
+ end
+end
+
+def fun_l15_n714(x)
+ if (x < 1)
+ fun_l16_n508(x)
+ else
+ fun_l16_n160(x)
+ end
+end
+
+def fun_l15_n715(x)
+ if (x < 1)
+ fun_l16_n468(x)
+ else
+ fun_l16_n784(x)
+ end
+end
+
+def fun_l15_n716(x)
+ if (x < 1)
+ fun_l16_n156(x)
+ else
+ fun_l16_n769(x)
+ end
+end
+
+def fun_l15_n717(x)
+ if (x < 1)
+ fun_l16_n219(x)
+ else
+ fun_l16_n618(x)
+ end
+end
+
+def fun_l15_n718(x)
+ if (x < 1)
+ fun_l16_n921(x)
+ else
+ fun_l16_n83(x)
+ end
+end
+
+def fun_l15_n719(x)
+ if (x < 1)
+ fun_l16_n262(x)
+ else
+ fun_l16_n170(x)
+ end
+end
+
+def fun_l15_n720(x)
+ if (x < 1)
+ fun_l16_n420(x)
+ else
+ fun_l16_n504(x)
+ end
+end
+
+def fun_l15_n721(x)
+ if (x < 1)
+ fun_l16_n485(x)
+ else
+ fun_l16_n782(x)
+ end
+end
+
+def fun_l15_n722(x)
+ if (x < 1)
+ fun_l16_n607(x)
+ else
+ fun_l16_n706(x)
+ end
+end
+
+def fun_l15_n723(x)
+ if (x < 1)
+ fun_l16_n116(x)
+ else
+ fun_l16_n73(x)
+ end
+end
+
+def fun_l15_n724(x)
+ if (x < 1)
+ fun_l16_n946(x)
+ else
+ fun_l16_n694(x)
+ end
+end
+
+def fun_l15_n725(x)
+ if (x < 1)
+ fun_l16_n73(x)
+ else
+ fun_l16_n223(x)
+ end
+end
+
+def fun_l15_n726(x)
+ if (x < 1)
+ fun_l16_n54(x)
+ else
+ fun_l16_n681(x)
+ end
+end
+
+def fun_l15_n727(x)
+ if (x < 1)
+ fun_l16_n474(x)
+ else
+ fun_l16_n339(x)
+ end
+end
+
+def fun_l15_n728(x)
+ if (x < 1)
+ fun_l16_n780(x)
+ else
+ fun_l16_n364(x)
+ end
+end
+
+def fun_l15_n729(x)
+ if (x < 1)
+ fun_l16_n537(x)
+ else
+ fun_l16_n1(x)
+ end
+end
+
+def fun_l15_n730(x)
+ if (x < 1)
+ fun_l16_n81(x)
+ else
+ fun_l16_n591(x)
+ end
+end
+
+def fun_l15_n731(x)
+ if (x < 1)
+ fun_l16_n631(x)
+ else
+ fun_l16_n626(x)
+ end
+end
+
+def fun_l15_n732(x)
+ if (x < 1)
+ fun_l16_n904(x)
+ else
+ fun_l16_n988(x)
+ end
+end
+
+def fun_l15_n733(x)
+ if (x < 1)
+ fun_l16_n933(x)
+ else
+ fun_l16_n761(x)
+ end
+end
+
+def fun_l15_n734(x)
+ if (x < 1)
+ fun_l16_n687(x)
+ else
+ fun_l16_n611(x)
+ end
+end
+
+def fun_l15_n735(x)
+ if (x < 1)
+ fun_l16_n197(x)
+ else
+ fun_l16_n210(x)
+ end
+end
+
+def fun_l15_n736(x)
+ if (x < 1)
+ fun_l16_n227(x)
+ else
+ fun_l16_n82(x)
+ end
+end
+
+def fun_l15_n737(x)
+ if (x < 1)
+ fun_l16_n981(x)
+ else
+ fun_l16_n18(x)
+ end
+end
+
+def fun_l15_n738(x)
+ if (x < 1)
+ fun_l16_n673(x)
+ else
+ fun_l16_n452(x)
+ end
+end
+
+def fun_l15_n739(x)
+ if (x < 1)
+ fun_l16_n225(x)
+ else
+ fun_l16_n555(x)
+ end
+end
+
+def fun_l15_n740(x)
+ if (x < 1)
+ fun_l16_n409(x)
+ else
+ fun_l16_n29(x)
+ end
+end
+
+def fun_l15_n741(x)
+ if (x < 1)
+ fun_l16_n550(x)
+ else
+ fun_l16_n880(x)
+ end
+end
+
+def fun_l15_n742(x)
+ if (x < 1)
+ fun_l16_n930(x)
+ else
+ fun_l16_n280(x)
+ end
+end
+
+def fun_l15_n743(x)
+ if (x < 1)
+ fun_l16_n622(x)
+ else
+ fun_l16_n438(x)
+ end
+end
+
+def fun_l15_n744(x)
+ if (x < 1)
+ fun_l16_n874(x)
+ else
+ fun_l16_n921(x)
+ end
+end
+
+def fun_l15_n745(x)
+ if (x < 1)
+ fun_l16_n337(x)
+ else
+ fun_l16_n879(x)
+ end
+end
+
+def fun_l15_n746(x)
+ if (x < 1)
+ fun_l16_n668(x)
+ else
+ fun_l16_n858(x)
+ end
+end
+
+def fun_l15_n747(x)
+ if (x < 1)
+ fun_l16_n588(x)
+ else
+ fun_l16_n433(x)
+ end
+end
+
+def fun_l15_n748(x)
+ if (x < 1)
+ fun_l16_n263(x)
+ else
+ fun_l16_n389(x)
+ end
+end
+
+def fun_l15_n749(x)
+ if (x < 1)
+ fun_l16_n79(x)
+ else
+ fun_l16_n218(x)
+ end
+end
+
+def fun_l15_n750(x)
+ if (x < 1)
+ fun_l16_n586(x)
+ else
+ fun_l16_n426(x)
+ end
+end
+
+def fun_l15_n751(x)
+ if (x < 1)
+ fun_l16_n29(x)
+ else
+ fun_l16_n183(x)
+ end
+end
+
+def fun_l15_n752(x)
+ if (x < 1)
+ fun_l16_n423(x)
+ else
+ fun_l16_n994(x)
+ end
+end
+
+def fun_l15_n753(x)
+ if (x < 1)
+ fun_l16_n176(x)
+ else
+ fun_l16_n425(x)
+ end
+end
+
+def fun_l15_n754(x)
+ if (x < 1)
+ fun_l16_n58(x)
+ else
+ fun_l16_n980(x)
+ end
+end
+
+def fun_l15_n755(x)
+ if (x < 1)
+ fun_l16_n333(x)
+ else
+ fun_l16_n949(x)
+ end
+end
+
+def fun_l15_n756(x)
+ if (x < 1)
+ fun_l16_n846(x)
+ else
+ fun_l16_n449(x)
+ end
+end
+
+def fun_l15_n757(x)
+ if (x < 1)
+ fun_l16_n341(x)
+ else
+ fun_l16_n200(x)
+ end
+end
+
+def fun_l15_n758(x)
+ if (x < 1)
+ fun_l16_n32(x)
+ else
+ fun_l16_n271(x)
+ end
+end
+
+def fun_l15_n759(x)
+ if (x < 1)
+ fun_l16_n654(x)
+ else
+ fun_l16_n978(x)
+ end
+end
+
+def fun_l15_n760(x)
+ if (x < 1)
+ fun_l16_n438(x)
+ else
+ fun_l16_n426(x)
+ end
+end
+
+def fun_l15_n761(x)
+ if (x < 1)
+ fun_l16_n218(x)
+ else
+ fun_l16_n393(x)
+ end
+end
+
+def fun_l15_n762(x)
+ if (x < 1)
+ fun_l16_n873(x)
+ else
+ fun_l16_n231(x)
+ end
+end
+
+def fun_l15_n763(x)
+ if (x < 1)
+ fun_l16_n957(x)
+ else
+ fun_l16_n801(x)
+ end
+end
+
+def fun_l15_n764(x)
+ if (x < 1)
+ fun_l16_n571(x)
+ else
+ fun_l16_n369(x)
+ end
+end
+
+def fun_l15_n765(x)
+ if (x < 1)
+ fun_l16_n806(x)
+ else
+ fun_l16_n527(x)
+ end
+end
+
+def fun_l15_n766(x)
+ if (x < 1)
+ fun_l16_n511(x)
+ else
+ fun_l16_n911(x)
+ end
+end
+
+def fun_l15_n767(x)
+ if (x < 1)
+ fun_l16_n589(x)
+ else
+ fun_l16_n468(x)
+ end
+end
+
+def fun_l15_n768(x)
+ if (x < 1)
+ fun_l16_n846(x)
+ else
+ fun_l16_n325(x)
+ end
+end
+
+def fun_l15_n769(x)
+ if (x < 1)
+ fun_l16_n350(x)
+ else
+ fun_l16_n268(x)
+ end
+end
+
+def fun_l15_n770(x)
+ if (x < 1)
+ fun_l16_n200(x)
+ else
+ fun_l16_n151(x)
+ end
+end
+
+def fun_l15_n771(x)
+ if (x < 1)
+ fun_l16_n246(x)
+ else
+ fun_l16_n442(x)
+ end
+end
+
+def fun_l15_n772(x)
+ if (x < 1)
+ fun_l16_n768(x)
+ else
+ fun_l16_n303(x)
+ end
+end
+
+def fun_l15_n773(x)
+ if (x < 1)
+ fun_l16_n414(x)
+ else
+ fun_l16_n857(x)
+ end
+end
+
+def fun_l15_n774(x)
+ if (x < 1)
+ fun_l16_n654(x)
+ else
+ fun_l16_n151(x)
+ end
+end
+
+def fun_l15_n775(x)
+ if (x < 1)
+ fun_l16_n283(x)
+ else
+ fun_l16_n565(x)
+ end
+end
+
+def fun_l15_n776(x)
+ if (x < 1)
+ fun_l16_n375(x)
+ else
+ fun_l16_n897(x)
+ end
+end
+
+def fun_l15_n777(x)
+ if (x < 1)
+ fun_l16_n711(x)
+ else
+ fun_l16_n487(x)
+ end
+end
+
+def fun_l15_n778(x)
+ if (x < 1)
+ fun_l16_n445(x)
+ else
+ fun_l16_n99(x)
+ end
+end
+
+def fun_l15_n779(x)
+ if (x < 1)
+ fun_l16_n320(x)
+ else
+ fun_l16_n614(x)
+ end
+end
+
+def fun_l15_n780(x)
+ if (x < 1)
+ fun_l16_n330(x)
+ else
+ fun_l16_n478(x)
+ end
+end
+
+def fun_l15_n781(x)
+ if (x < 1)
+ fun_l16_n680(x)
+ else
+ fun_l16_n882(x)
+ end
+end
+
+def fun_l15_n782(x)
+ if (x < 1)
+ fun_l16_n799(x)
+ else
+ fun_l16_n511(x)
+ end
+end
+
+def fun_l15_n783(x)
+ if (x < 1)
+ fun_l16_n630(x)
+ else
+ fun_l16_n946(x)
+ end
+end
+
+def fun_l15_n784(x)
+ if (x < 1)
+ fun_l16_n867(x)
+ else
+ fun_l16_n4(x)
+ end
+end
+
+def fun_l15_n785(x)
+ if (x < 1)
+ fun_l16_n154(x)
+ else
+ fun_l16_n400(x)
+ end
+end
+
+def fun_l15_n786(x)
+ if (x < 1)
+ fun_l16_n166(x)
+ else
+ fun_l16_n224(x)
+ end
+end
+
+def fun_l15_n787(x)
+ if (x < 1)
+ fun_l16_n120(x)
+ else
+ fun_l16_n518(x)
+ end
+end
+
+def fun_l15_n788(x)
+ if (x < 1)
+ fun_l16_n648(x)
+ else
+ fun_l16_n56(x)
+ end
+end
+
+def fun_l15_n789(x)
+ if (x < 1)
+ fun_l16_n965(x)
+ else
+ fun_l16_n760(x)
+ end
+end
+
+def fun_l15_n790(x)
+ if (x < 1)
+ fun_l16_n880(x)
+ else
+ fun_l16_n809(x)
+ end
+end
+
+def fun_l15_n791(x)
+ if (x < 1)
+ fun_l16_n836(x)
+ else
+ fun_l16_n61(x)
+ end
+end
+
+def fun_l15_n792(x)
+ if (x < 1)
+ fun_l16_n874(x)
+ else
+ fun_l16_n559(x)
+ end
+end
+
+def fun_l15_n793(x)
+ if (x < 1)
+ fun_l16_n896(x)
+ else
+ fun_l16_n72(x)
+ end
+end
+
+def fun_l15_n794(x)
+ if (x < 1)
+ fun_l16_n994(x)
+ else
+ fun_l16_n411(x)
+ end
+end
+
+def fun_l15_n795(x)
+ if (x < 1)
+ fun_l16_n289(x)
+ else
+ fun_l16_n151(x)
+ end
+end
+
+def fun_l15_n796(x)
+ if (x < 1)
+ fun_l16_n190(x)
+ else
+ fun_l16_n693(x)
+ end
+end
+
+def fun_l15_n797(x)
+ if (x < 1)
+ fun_l16_n320(x)
+ else
+ fun_l16_n955(x)
+ end
+end
+
+def fun_l15_n798(x)
+ if (x < 1)
+ fun_l16_n572(x)
+ else
+ fun_l16_n626(x)
+ end
+end
+
+def fun_l15_n799(x)
+ if (x < 1)
+ fun_l16_n35(x)
+ else
+ fun_l16_n838(x)
+ end
+end
+
+def fun_l15_n800(x)
+ if (x < 1)
+ fun_l16_n423(x)
+ else
+ fun_l16_n834(x)
+ end
+end
+
+def fun_l15_n801(x)
+ if (x < 1)
+ fun_l16_n964(x)
+ else
+ fun_l16_n824(x)
+ end
+end
+
+def fun_l15_n802(x)
+ if (x < 1)
+ fun_l16_n77(x)
+ else
+ fun_l16_n62(x)
+ end
+end
+
+def fun_l15_n803(x)
+ if (x < 1)
+ fun_l16_n226(x)
+ else
+ fun_l16_n373(x)
+ end
+end
+
+def fun_l15_n804(x)
+ if (x < 1)
+ fun_l16_n832(x)
+ else
+ fun_l16_n915(x)
+ end
+end
+
+def fun_l15_n805(x)
+ if (x < 1)
+ fun_l16_n421(x)
+ else
+ fun_l16_n621(x)
+ end
+end
+
+def fun_l15_n806(x)
+ if (x < 1)
+ fun_l16_n303(x)
+ else
+ fun_l16_n713(x)
+ end
+end
+
+def fun_l15_n807(x)
+ if (x < 1)
+ fun_l16_n393(x)
+ else
+ fun_l16_n698(x)
+ end
+end
+
+def fun_l15_n808(x)
+ if (x < 1)
+ fun_l16_n303(x)
+ else
+ fun_l16_n341(x)
+ end
+end
+
+def fun_l15_n809(x)
+ if (x < 1)
+ fun_l16_n116(x)
+ else
+ fun_l16_n976(x)
+ end
+end
+
+def fun_l15_n810(x)
+ if (x < 1)
+ fun_l16_n873(x)
+ else
+ fun_l16_n822(x)
+ end
+end
+
+def fun_l15_n811(x)
+ if (x < 1)
+ fun_l16_n358(x)
+ else
+ fun_l16_n334(x)
+ end
+end
+
+def fun_l15_n812(x)
+ if (x < 1)
+ fun_l16_n599(x)
+ else
+ fun_l16_n527(x)
+ end
+end
+
+def fun_l15_n813(x)
+ if (x < 1)
+ fun_l16_n842(x)
+ else
+ fun_l16_n791(x)
+ end
+end
+
+def fun_l15_n814(x)
+ if (x < 1)
+ fun_l16_n45(x)
+ else
+ fun_l16_n280(x)
+ end
+end
+
+def fun_l15_n815(x)
+ if (x < 1)
+ fun_l16_n187(x)
+ else
+ fun_l16_n151(x)
+ end
+end
+
+def fun_l15_n816(x)
+ if (x < 1)
+ fun_l16_n8(x)
+ else
+ fun_l16_n409(x)
+ end
+end
+
+def fun_l15_n817(x)
+ if (x < 1)
+ fun_l16_n670(x)
+ else
+ fun_l16_n569(x)
+ end
+end
+
+def fun_l15_n818(x)
+ if (x < 1)
+ fun_l16_n344(x)
+ else
+ fun_l16_n618(x)
+ end
+end
+
+def fun_l15_n819(x)
+ if (x < 1)
+ fun_l16_n659(x)
+ else
+ fun_l16_n321(x)
+ end
+end
+
+def fun_l15_n820(x)
+ if (x < 1)
+ fun_l16_n890(x)
+ else
+ fun_l16_n911(x)
+ end
+end
+
+def fun_l15_n821(x)
+ if (x < 1)
+ fun_l16_n360(x)
+ else
+ fun_l16_n742(x)
+ end
+end
+
+def fun_l15_n822(x)
+ if (x < 1)
+ fun_l16_n166(x)
+ else
+ fun_l16_n803(x)
+ end
+end
+
+def fun_l15_n823(x)
+ if (x < 1)
+ fun_l16_n765(x)
+ else
+ fun_l16_n958(x)
+ end
+end
+
+def fun_l15_n824(x)
+ if (x < 1)
+ fun_l16_n439(x)
+ else
+ fun_l16_n931(x)
+ end
+end
+
+def fun_l15_n825(x)
+ if (x < 1)
+ fun_l16_n740(x)
+ else
+ fun_l16_n901(x)
+ end
+end
+
+def fun_l15_n826(x)
+ if (x < 1)
+ fun_l16_n223(x)
+ else
+ fun_l16_n878(x)
+ end
+end
+
+def fun_l15_n827(x)
+ if (x < 1)
+ fun_l16_n969(x)
+ else
+ fun_l16_n553(x)
+ end
+end
+
+def fun_l15_n828(x)
+ if (x < 1)
+ fun_l16_n42(x)
+ else
+ fun_l16_n915(x)
+ end
+end
+
+def fun_l15_n829(x)
+ if (x < 1)
+ fun_l16_n386(x)
+ else
+ fun_l16_n430(x)
+ end
+end
+
+def fun_l15_n830(x)
+ if (x < 1)
+ fun_l16_n164(x)
+ else
+ fun_l16_n337(x)
+ end
+end
+
+def fun_l15_n831(x)
+ if (x < 1)
+ fun_l16_n465(x)
+ else
+ fun_l16_n898(x)
+ end
+end
+
+def fun_l15_n832(x)
+ if (x < 1)
+ fun_l16_n145(x)
+ else
+ fun_l16_n688(x)
+ end
+end
+
+def fun_l15_n833(x)
+ if (x < 1)
+ fun_l16_n238(x)
+ else
+ fun_l16_n624(x)
+ end
+end
+
+def fun_l15_n834(x)
+ if (x < 1)
+ fun_l16_n973(x)
+ else
+ fun_l16_n507(x)
+ end
+end
+
+def fun_l15_n835(x)
+ if (x < 1)
+ fun_l16_n24(x)
+ else
+ fun_l16_n607(x)
+ end
+end
+
+def fun_l15_n836(x)
+ if (x < 1)
+ fun_l16_n307(x)
+ else
+ fun_l16_n265(x)
+ end
+end
+
+def fun_l15_n837(x)
+ if (x < 1)
+ fun_l16_n91(x)
+ else
+ fun_l16_n543(x)
+ end
+end
+
+def fun_l15_n838(x)
+ if (x < 1)
+ fun_l16_n544(x)
+ else
+ fun_l16_n397(x)
+ end
+end
+
+def fun_l15_n839(x)
+ if (x < 1)
+ fun_l16_n121(x)
+ else
+ fun_l16_n503(x)
+ end
+end
+
+def fun_l15_n840(x)
+ if (x < 1)
+ fun_l16_n806(x)
+ else
+ fun_l16_n831(x)
+ end
+end
+
+def fun_l15_n841(x)
+ if (x < 1)
+ fun_l16_n629(x)
+ else
+ fun_l16_n553(x)
+ end
+end
+
+def fun_l15_n842(x)
+ if (x < 1)
+ fun_l16_n674(x)
+ else
+ fun_l16_n945(x)
+ end
+end
+
+def fun_l15_n843(x)
+ if (x < 1)
+ fun_l16_n409(x)
+ else
+ fun_l16_n469(x)
+ end
+end
+
+def fun_l15_n844(x)
+ if (x < 1)
+ fun_l16_n779(x)
+ else
+ fun_l16_n168(x)
+ end
+end
+
+def fun_l15_n845(x)
+ if (x < 1)
+ fun_l16_n258(x)
+ else
+ fun_l16_n501(x)
+ end
+end
+
+def fun_l15_n846(x)
+ if (x < 1)
+ fun_l16_n408(x)
+ else
+ fun_l16_n211(x)
+ end
+end
+
+def fun_l15_n847(x)
+ if (x < 1)
+ fun_l16_n844(x)
+ else
+ fun_l16_n458(x)
+ end
+end
+
+def fun_l15_n848(x)
+ if (x < 1)
+ fun_l16_n565(x)
+ else
+ fun_l16_n177(x)
+ end
+end
+
+def fun_l15_n849(x)
+ if (x < 1)
+ fun_l16_n111(x)
+ else
+ fun_l16_n995(x)
+ end
+end
+
+def fun_l15_n850(x)
+ if (x < 1)
+ fun_l16_n883(x)
+ else
+ fun_l16_n776(x)
+ end
+end
+
+def fun_l15_n851(x)
+ if (x < 1)
+ fun_l16_n821(x)
+ else
+ fun_l16_n352(x)
+ end
+end
+
+def fun_l15_n852(x)
+ if (x < 1)
+ fun_l16_n977(x)
+ else
+ fun_l16_n520(x)
+ end
+end
+
+def fun_l15_n853(x)
+ if (x < 1)
+ fun_l16_n602(x)
+ else
+ fun_l16_n88(x)
+ end
+end
+
+def fun_l15_n854(x)
+ if (x < 1)
+ fun_l16_n819(x)
+ else
+ fun_l16_n177(x)
+ end
+end
+
+def fun_l15_n855(x)
+ if (x < 1)
+ fun_l16_n878(x)
+ else
+ fun_l16_n648(x)
+ end
+end
+
+def fun_l15_n856(x)
+ if (x < 1)
+ fun_l16_n69(x)
+ else
+ fun_l16_n134(x)
+ end
+end
+
+def fun_l15_n857(x)
+ if (x < 1)
+ fun_l16_n728(x)
+ else
+ fun_l16_n282(x)
+ end
+end
+
+def fun_l15_n858(x)
+ if (x < 1)
+ fun_l16_n152(x)
+ else
+ fun_l16_n725(x)
+ end
+end
+
+def fun_l15_n859(x)
+ if (x < 1)
+ fun_l16_n140(x)
+ else
+ fun_l16_n12(x)
+ end
+end
+
+def fun_l15_n860(x)
+ if (x < 1)
+ fun_l16_n691(x)
+ else
+ fun_l16_n159(x)
+ end
+end
+
+def fun_l15_n861(x)
+ if (x < 1)
+ fun_l16_n366(x)
+ else
+ fun_l16_n97(x)
+ end
+end
+
+def fun_l15_n862(x)
+ if (x < 1)
+ fun_l16_n812(x)
+ else
+ fun_l16_n178(x)
+ end
+end
+
+def fun_l15_n863(x)
+ if (x < 1)
+ fun_l16_n491(x)
+ else
+ fun_l16_n167(x)
+ end
+end
+
+def fun_l15_n864(x)
+ if (x < 1)
+ fun_l16_n280(x)
+ else
+ fun_l16_n463(x)
+ end
+end
+
+def fun_l15_n865(x)
+ if (x < 1)
+ fun_l16_n405(x)
+ else
+ fun_l16_n108(x)
+ end
+end
+
+def fun_l15_n866(x)
+ if (x < 1)
+ fun_l16_n956(x)
+ else
+ fun_l16_n840(x)
+ end
+end
+
+def fun_l15_n867(x)
+ if (x < 1)
+ fun_l16_n866(x)
+ else
+ fun_l16_n291(x)
+ end
+end
+
+def fun_l15_n868(x)
+ if (x < 1)
+ fun_l16_n176(x)
+ else
+ fun_l16_n192(x)
+ end
+end
+
+def fun_l15_n869(x)
+ if (x < 1)
+ fun_l16_n833(x)
+ else
+ fun_l16_n503(x)
+ end
+end
+
+def fun_l15_n870(x)
+ if (x < 1)
+ fun_l16_n648(x)
+ else
+ fun_l16_n778(x)
+ end
+end
+
+def fun_l15_n871(x)
+ if (x < 1)
+ fun_l16_n237(x)
+ else
+ fun_l16_n206(x)
+ end
+end
+
+def fun_l15_n872(x)
+ if (x < 1)
+ fun_l16_n676(x)
+ else
+ fun_l16_n868(x)
+ end
+end
+
+def fun_l15_n873(x)
+ if (x < 1)
+ fun_l16_n547(x)
+ else
+ fun_l16_n731(x)
+ end
+end
+
+def fun_l15_n874(x)
+ if (x < 1)
+ fun_l16_n870(x)
+ else
+ fun_l16_n43(x)
+ end
+end
+
+def fun_l15_n875(x)
+ if (x < 1)
+ fun_l16_n246(x)
+ else
+ fun_l16_n654(x)
+ end
+end
+
+def fun_l15_n876(x)
+ if (x < 1)
+ fun_l16_n570(x)
+ else
+ fun_l16_n842(x)
+ end
+end
+
+def fun_l15_n877(x)
+ if (x < 1)
+ fun_l16_n272(x)
+ else
+ fun_l16_n784(x)
+ end
+end
+
+def fun_l15_n878(x)
+ if (x < 1)
+ fun_l16_n702(x)
+ else
+ fun_l16_n758(x)
+ end
+end
+
+def fun_l15_n879(x)
+ if (x < 1)
+ fun_l16_n691(x)
+ else
+ fun_l16_n303(x)
+ end
+end
+
+def fun_l15_n880(x)
+ if (x < 1)
+ fun_l16_n944(x)
+ else
+ fun_l16_n449(x)
+ end
+end
+
+def fun_l15_n881(x)
+ if (x < 1)
+ fun_l16_n741(x)
+ else
+ fun_l16_n254(x)
+ end
+end
+
+def fun_l15_n882(x)
+ if (x < 1)
+ fun_l16_n195(x)
+ else
+ fun_l16_n294(x)
+ end
+end
+
+def fun_l15_n883(x)
+ if (x < 1)
+ fun_l16_n776(x)
+ else
+ fun_l16_n147(x)
+ end
+end
+
+def fun_l15_n884(x)
+ if (x < 1)
+ fun_l16_n145(x)
+ else
+ fun_l16_n856(x)
+ end
+end
+
+def fun_l15_n885(x)
+ if (x < 1)
+ fun_l16_n671(x)
+ else
+ fun_l16_n429(x)
+ end
+end
+
+def fun_l15_n886(x)
+ if (x < 1)
+ fun_l16_n72(x)
+ else
+ fun_l16_n455(x)
+ end
+end
+
+def fun_l15_n887(x)
+ if (x < 1)
+ fun_l16_n775(x)
+ else
+ fun_l16_n43(x)
+ end
+end
+
+def fun_l15_n888(x)
+ if (x < 1)
+ fun_l16_n936(x)
+ else
+ fun_l16_n642(x)
+ end
+end
+
+def fun_l15_n889(x)
+ if (x < 1)
+ fun_l16_n794(x)
+ else
+ fun_l16_n277(x)
+ end
+end
+
+def fun_l15_n890(x)
+ if (x < 1)
+ fun_l16_n72(x)
+ else
+ fun_l16_n450(x)
+ end
+end
+
+def fun_l15_n891(x)
+ if (x < 1)
+ fun_l16_n417(x)
+ else
+ fun_l16_n5(x)
+ end
+end
+
+def fun_l15_n892(x)
+ if (x < 1)
+ fun_l16_n69(x)
+ else
+ fun_l16_n355(x)
+ end
+end
+
+def fun_l15_n893(x)
+ if (x < 1)
+ fun_l16_n352(x)
+ else
+ fun_l16_n635(x)
+ end
+end
+
+def fun_l15_n894(x)
+ if (x < 1)
+ fun_l16_n168(x)
+ else
+ fun_l16_n16(x)
+ end
+end
+
+def fun_l15_n895(x)
+ if (x < 1)
+ fun_l16_n922(x)
+ else
+ fun_l16_n440(x)
+ end
+end
+
+def fun_l15_n896(x)
+ if (x < 1)
+ fun_l16_n808(x)
+ else
+ fun_l16_n896(x)
+ end
+end
+
+def fun_l15_n897(x)
+ if (x < 1)
+ fun_l16_n736(x)
+ else
+ fun_l16_n596(x)
+ end
+end
+
+def fun_l15_n898(x)
+ if (x < 1)
+ fun_l16_n886(x)
+ else
+ fun_l16_n386(x)
+ end
+end
+
+def fun_l15_n899(x)
+ if (x < 1)
+ fun_l16_n374(x)
+ else
+ fun_l16_n746(x)
+ end
+end
+
+def fun_l15_n900(x)
+ if (x < 1)
+ fun_l16_n623(x)
+ else
+ fun_l16_n329(x)
+ end
+end
+
+def fun_l15_n901(x)
+ if (x < 1)
+ fun_l16_n313(x)
+ else
+ fun_l16_n102(x)
+ end
+end
+
+def fun_l15_n902(x)
+ if (x < 1)
+ fun_l16_n234(x)
+ else
+ fun_l16_n425(x)
+ end
+end
+
+def fun_l15_n903(x)
+ if (x < 1)
+ fun_l16_n836(x)
+ else
+ fun_l16_n492(x)
+ end
+end
+
+def fun_l15_n904(x)
+ if (x < 1)
+ fun_l16_n690(x)
+ else
+ fun_l16_n241(x)
+ end
+end
+
+def fun_l15_n905(x)
+ if (x < 1)
+ fun_l16_n129(x)
+ else
+ fun_l16_n57(x)
+ end
+end
+
+def fun_l15_n906(x)
+ if (x < 1)
+ fun_l16_n50(x)
+ else
+ fun_l16_n24(x)
+ end
+end
+
+def fun_l15_n907(x)
+ if (x < 1)
+ fun_l16_n609(x)
+ else
+ fun_l16_n4(x)
+ end
+end
+
+def fun_l15_n908(x)
+ if (x < 1)
+ fun_l16_n483(x)
+ else
+ fun_l16_n708(x)
+ end
+end
+
+def fun_l15_n909(x)
+ if (x < 1)
+ fun_l16_n656(x)
+ else
+ fun_l16_n234(x)
+ end
+end
+
+def fun_l15_n910(x)
+ if (x < 1)
+ fun_l16_n945(x)
+ else
+ fun_l16_n753(x)
+ end
+end
+
+def fun_l15_n911(x)
+ if (x < 1)
+ fun_l16_n152(x)
+ else
+ fun_l16_n739(x)
+ end
+end
+
+def fun_l15_n912(x)
+ if (x < 1)
+ fun_l16_n855(x)
+ else
+ fun_l16_n518(x)
+ end
+end
+
+def fun_l15_n913(x)
+ if (x < 1)
+ fun_l16_n295(x)
+ else
+ fun_l16_n719(x)
+ end
+end
+
+def fun_l15_n914(x)
+ if (x < 1)
+ fun_l16_n442(x)
+ else
+ fun_l16_n803(x)
+ end
+end
+
+def fun_l15_n915(x)
+ if (x < 1)
+ fun_l16_n672(x)
+ else
+ fun_l16_n935(x)
+ end
+end
+
+def fun_l15_n916(x)
+ if (x < 1)
+ fun_l16_n908(x)
+ else
+ fun_l16_n900(x)
+ end
+end
+
+def fun_l15_n917(x)
+ if (x < 1)
+ fun_l16_n853(x)
+ else
+ fun_l16_n896(x)
+ end
+end
+
+def fun_l15_n918(x)
+ if (x < 1)
+ fun_l16_n90(x)
+ else
+ fun_l16_n56(x)
+ end
+end
+
+def fun_l15_n919(x)
+ if (x < 1)
+ fun_l16_n944(x)
+ else
+ fun_l16_n763(x)
+ end
+end
+
+def fun_l15_n920(x)
+ if (x < 1)
+ fun_l16_n303(x)
+ else
+ fun_l16_n328(x)
+ end
+end
+
+def fun_l15_n921(x)
+ if (x < 1)
+ fun_l16_n599(x)
+ else
+ fun_l16_n648(x)
+ end
+end
+
+def fun_l15_n922(x)
+ if (x < 1)
+ fun_l16_n113(x)
+ else
+ fun_l16_n665(x)
+ end
+end
+
+def fun_l15_n923(x)
+ if (x < 1)
+ fun_l16_n97(x)
+ else
+ fun_l16_n757(x)
+ end
+end
+
+def fun_l15_n924(x)
+ if (x < 1)
+ fun_l16_n815(x)
+ else
+ fun_l16_n821(x)
+ end
+end
+
+def fun_l15_n925(x)
+ if (x < 1)
+ fun_l16_n146(x)
+ else
+ fun_l16_n970(x)
+ end
+end
+
+def fun_l15_n926(x)
+ if (x < 1)
+ fun_l16_n74(x)
+ else
+ fun_l16_n203(x)
+ end
+end
+
+def fun_l15_n927(x)
+ if (x < 1)
+ fun_l16_n573(x)
+ else
+ fun_l16_n763(x)
+ end
+end
+
+def fun_l15_n928(x)
+ if (x < 1)
+ fun_l16_n656(x)
+ else
+ fun_l16_n691(x)
+ end
+end
+
+def fun_l15_n929(x)
+ if (x < 1)
+ fun_l16_n240(x)
+ else
+ fun_l16_n536(x)
+ end
+end
+
+def fun_l15_n930(x)
+ if (x < 1)
+ fun_l16_n168(x)
+ else
+ fun_l16_n145(x)
+ end
+end
+
+def fun_l15_n931(x)
+ if (x < 1)
+ fun_l16_n502(x)
+ else
+ fun_l16_n603(x)
+ end
+end
+
+def fun_l15_n932(x)
+ if (x < 1)
+ fun_l16_n998(x)
+ else
+ fun_l16_n259(x)
+ end
+end
+
+def fun_l15_n933(x)
+ if (x < 1)
+ fun_l16_n633(x)
+ else
+ fun_l16_n66(x)
+ end
+end
+
+def fun_l15_n934(x)
+ if (x < 1)
+ fun_l16_n657(x)
+ else
+ fun_l16_n727(x)
+ end
+end
+
+def fun_l15_n935(x)
+ if (x < 1)
+ fun_l16_n641(x)
+ else
+ fun_l16_n975(x)
+ end
+end
+
+def fun_l15_n936(x)
+ if (x < 1)
+ fun_l16_n610(x)
+ else
+ fun_l16_n256(x)
+ end
+end
+
+def fun_l15_n937(x)
+ if (x < 1)
+ fun_l16_n760(x)
+ else
+ fun_l16_n304(x)
+ end
+end
+
+def fun_l15_n938(x)
+ if (x < 1)
+ fun_l16_n395(x)
+ else
+ fun_l16_n302(x)
+ end
+end
+
+def fun_l15_n939(x)
+ if (x < 1)
+ fun_l16_n810(x)
+ else
+ fun_l16_n549(x)
+ end
+end
+
+def fun_l15_n940(x)
+ if (x < 1)
+ fun_l16_n452(x)
+ else
+ fun_l16_n914(x)
+ end
+end
+
+def fun_l15_n941(x)
+ if (x < 1)
+ fun_l16_n472(x)
+ else
+ fun_l16_n328(x)
+ end
+end
+
+def fun_l15_n942(x)
+ if (x < 1)
+ fun_l16_n886(x)
+ else
+ fun_l16_n535(x)
+ end
+end
+
+def fun_l15_n943(x)
+ if (x < 1)
+ fun_l16_n162(x)
+ else
+ fun_l16_n449(x)
+ end
+end
+
+def fun_l15_n944(x)
+ if (x < 1)
+ fun_l16_n152(x)
+ else
+ fun_l16_n790(x)
+ end
+end
+
+def fun_l15_n945(x)
+ if (x < 1)
+ fun_l16_n228(x)
+ else
+ fun_l16_n391(x)
+ end
+end
+
+def fun_l15_n946(x)
+ if (x < 1)
+ fun_l16_n115(x)
+ else
+ fun_l16_n371(x)
+ end
+end
+
+def fun_l15_n947(x)
+ if (x < 1)
+ fun_l16_n359(x)
+ else
+ fun_l16_n928(x)
+ end
+end
+
+def fun_l15_n948(x)
+ if (x < 1)
+ fun_l16_n246(x)
+ else
+ fun_l16_n907(x)
+ end
+end
+
+def fun_l15_n949(x)
+ if (x < 1)
+ fun_l16_n448(x)
+ else
+ fun_l16_n845(x)
+ end
+end
+
+def fun_l15_n950(x)
+ if (x < 1)
+ fun_l16_n457(x)
+ else
+ fun_l16_n954(x)
+ end
+end
+
+def fun_l15_n951(x)
+ if (x < 1)
+ fun_l16_n627(x)
+ else
+ fun_l16_n684(x)
+ end
+end
+
+def fun_l15_n952(x)
+ if (x < 1)
+ fun_l16_n887(x)
+ else
+ fun_l16_n928(x)
+ end
+end
+
+def fun_l15_n953(x)
+ if (x < 1)
+ fun_l16_n782(x)
+ else
+ fun_l16_n619(x)
+ end
+end
+
+def fun_l15_n954(x)
+ if (x < 1)
+ fun_l16_n436(x)
+ else
+ fun_l16_n745(x)
+ end
+end
+
+def fun_l15_n955(x)
+ if (x < 1)
+ fun_l16_n9(x)
+ else
+ fun_l16_n604(x)
+ end
+end
+
+def fun_l15_n956(x)
+ if (x < 1)
+ fun_l16_n149(x)
+ else
+ fun_l16_n357(x)
+ end
+end
+
+def fun_l15_n957(x)
+ if (x < 1)
+ fun_l16_n664(x)
+ else
+ fun_l16_n371(x)
+ end
+end
+
+def fun_l15_n958(x)
+ if (x < 1)
+ fun_l16_n236(x)
+ else
+ fun_l16_n402(x)
+ end
+end
+
+def fun_l15_n959(x)
+ if (x < 1)
+ fun_l16_n681(x)
+ else
+ fun_l16_n410(x)
+ end
+end
+
+def fun_l15_n960(x)
+ if (x < 1)
+ fun_l16_n909(x)
+ else
+ fun_l16_n958(x)
+ end
+end
+
+def fun_l15_n961(x)
+ if (x < 1)
+ fun_l16_n400(x)
+ else
+ fun_l16_n497(x)
+ end
+end
+
+def fun_l15_n962(x)
+ if (x < 1)
+ fun_l16_n949(x)
+ else
+ fun_l16_n794(x)
+ end
+end
+
+def fun_l15_n963(x)
+ if (x < 1)
+ fun_l16_n774(x)
+ else
+ fun_l16_n770(x)
+ end
+end
+
+def fun_l15_n964(x)
+ if (x < 1)
+ fun_l16_n573(x)
+ else
+ fun_l16_n73(x)
+ end
+end
+
+def fun_l15_n965(x)
+ if (x < 1)
+ fun_l16_n33(x)
+ else
+ fun_l16_n978(x)
+ end
+end
+
+def fun_l15_n966(x)
+ if (x < 1)
+ fun_l16_n8(x)
+ else
+ fun_l16_n542(x)
+ end
+end
+
+def fun_l15_n967(x)
+ if (x < 1)
+ fun_l16_n780(x)
+ else
+ fun_l16_n96(x)
+ end
+end
+
+def fun_l15_n968(x)
+ if (x < 1)
+ fun_l16_n75(x)
+ else
+ fun_l16_n560(x)
+ end
+end
+
+def fun_l15_n969(x)
+ if (x < 1)
+ fun_l16_n950(x)
+ else
+ fun_l16_n610(x)
+ end
+end
+
+def fun_l15_n970(x)
+ if (x < 1)
+ fun_l16_n254(x)
+ else
+ fun_l16_n2(x)
+ end
+end
+
+def fun_l15_n971(x)
+ if (x < 1)
+ fun_l16_n793(x)
+ else
+ fun_l16_n89(x)
+ end
+end
+
+def fun_l15_n972(x)
+ if (x < 1)
+ fun_l16_n409(x)
+ else
+ fun_l16_n967(x)
+ end
+end
+
+def fun_l15_n973(x)
+ if (x < 1)
+ fun_l16_n356(x)
+ else
+ fun_l16_n421(x)
+ end
+end
+
+def fun_l15_n974(x)
+ if (x < 1)
+ fun_l16_n539(x)
+ else
+ fun_l16_n997(x)
+ end
+end
+
+def fun_l15_n975(x)
+ if (x < 1)
+ fun_l16_n772(x)
+ else
+ fun_l16_n304(x)
+ end
+end
+
+def fun_l15_n976(x)
+ if (x < 1)
+ fun_l16_n228(x)
+ else
+ fun_l16_n420(x)
+ end
+end
+
+def fun_l15_n977(x)
+ if (x < 1)
+ fun_l16_n508(x)
+ else
+ fun_l16_n352(x)
+ end
+end
+
+def fun_l15_n978(x)
+ if (x < 1)
+ fun_l16_n878(x)
+ else
+ fun_l16_n316(x)
+ end
+end
+
+def fun_l15_n979(x)
+ if (x < 1)
+ fun_l16_n279(x)
+ else
+ fun_l16_n325(x)
+ end
+end
+
+def fun_l15_n980(x)
+ if (x < 1)
+ fun_l16_n98(x)
+ else
+ fun_l16_n10(x)
+ end
+end
+
+def fun_l15_n981(x)
+ if (x < 1)
+ fun_l16_n320(x)
+ else
+ fun_l16_n578(x)
+ end
+end
+
+def fun_l15_n982(x)
+ if (x < 1)
+ fun_l16_n112(x)
+ else
+ fun_l16_n353(x)
+ end
+end
+
+def fun_l15_n983(x)
+ if (x < 1)
+ fun_l16_n579(x)
+ else
+ fun_l16_n946(x)
+ end
+end
+
+def fun_l15_n984(x)
+ if (x < 1)
+ fun_l16_n183(x)
+ else
+ fun_l16_n638(x)
+ end
+end
+
+def fun_l15_n985(x)
+ if (x < 1)
+ fun_l16_n500(x)
+ else
+ fun_l16_n11(x)
+ end
+end
+
+def fun_l15_n986(x)
+ if (x < 1)
+ fun_l16_n773(x)
+ else
+ fun_l16_n135(x)
+ end
+end
+
+def fun_l15_n987(x)
+ if (x < 1)
+ fun_l16_n997(x)
+ else
+ fun_l16_n645(x)
+ end
+end
+
+def fun_l15_n988(x)
+ if (x < 1)
+ fun_l16_n392(x)
+ else
+ fun_l16_n172(x)
+ end
+end
+
+def fun_l15_n989(x)
+ if (x < 1)
+ fun_l16_n150(x)
+ else
+ fun_l16_n163(x)
+ end
+end
+
+def fun_l15_n990(x)
+ if (x < 1)
+ fun_l16_n351(x)
+ else
+ fun_l16_n297(x)
+ end
+end
+
+def fun_l15_n991(x)
+ if (x < 1)
+ fun_l16_n676(x)
+ else
+ fun_l16_n31(x)
+ end
+end
+
+def fun_l15_n992(x)
+ if (x < 1)
+ fun_l16_n257(x)
+ else
+ fun_l16_n45(x)
+ end
+end
+
+def fun_l15_n993(x)
+ if (x < 1)
+ fun_l16_n971(x)
+ else
+ fun_l16_n60(x)
+ end
+end
+
+def fun_l15_n994(x)
+ if (x < 1)
+ fun_l16_n472(x)
+ else
+ fun_l16_n774(x)
+ end
+end
+
+def fun_l15_n995(x)
+ if (x < 1)
+ fun_l16_n559(x)
+ else
+ fun_l16_n605(x)
+ end
+end
+
+def fun_l15_n996(x)
+ if (x < 1)
+ fun_l16_n122(x)
+ else
+ fun_l16_n695(x)
+ end
+end
+
+def fun_l15_n997(x)
+ if (x < 1)
+ fun_l16_n118(x)
+ else
+ fun_l16_n613(x)
+ end
+end
+
+def fun_l15_n998(x)
+ if (x < 1)
+ fun_l16_n973(x)
+ else
+ fun_l16_n193(x)
+ end
+end
+
+def fun_l15_n999(x)
+ if (x < 1)
+ fun_l16_n652(x)
+ else
+ fun_l16_n658(x)
+ end
+end
+
+def fun_l16_n0(x)
+ if (x < 1)
+ fun_l17_n352(x)
+ else
+ fun_l17_n155(x)
+ end
+end
+
+def fun_l16_n1(x)
+ if (x < 1)
+ fun_l17_n786(x)
+ else
+ fun_l17_n961(x)
+ end
+end
+
+def fun_l16_n2(x)
+ if (x < 1)
+ fun_l17_n760(x)
+ else
+ fun_l17_n629(x)
+ end
+end
+
+def fun_l16_n3(x)
+ if (x < 1)
+ fun_l17_n788(x)
+ else
+ fun_l17_n70(x)
+ end
+end
+
+def fun_l16_n4(x)
+ if (x < 1)
+ fun_l17_n116(x)
+ else
+ fun_l17_n616(x)
+ end
+end
+
+def fun_l16_n5(x)
+ if (x < 1)
+ fun_l17_n470(x)
+ else
+ fun_l17_n859(x)
+ end
+end
+
+def fun_l16_n6(x)
+ if (x < 1)
+ fun_l17_n830(x)
+ else
+ fun_l17_n987(x)
+ end
+end
+
+def fun_l16_n7(x)
+ if (x < 1)
+ fun_l17_n339(x)
+ else
+ fun_l17_n284(x)
+ end
+end
+
+def fun_l16_n8(x)
+ if (x < 1)
+ fun_l17_n677(x)
+ else
+ fun_l17_n77(x)
+ end
+end
+
+def fun_l16_n9(x)
+ if (x < 1)
+ fun_l17_n7(x)
+ else
+ fun_l17_n159(x)
+ end
+end
+
+def fun_l16_n10(x)
+ if (x < 1)
+ fun_l17_n275(x)
+ else
+ fun_l17_n37(x)
+ end
+end
+
+def fun_l16_n11(x)
+ if (x < 1)
+ fun_l17_n406(x)
+ else
+ fun_l17_n588(x)
+ end
+end
+
+def fun_l16_n12(x)
+ if (x < 1)
+ fun_l17_n132(x)
+ else
+ fun_l17_n208(x)
+ end
+end
+
+def fun_l16_n13(x)
+ if (x < 1)
+ fun_l17_n87(x)
+ else
+ fun_l17_n850(x)
+ end
+end
+
+def fun_l16_n14(x)
+ if (x < 1)
+ fun_l17_n965(x)
+ else
+ fun_l17_n106(x)
+ end
+end
+
+def fun_l16_n15(x)
+ if (x < 1)
+ fun_l17_n176(x)
+ else
+ fun_l17_n966(x)
+ end
+end
+
+def fun_l16_n16(x)
+ if (x < 1)
+ fun_l17_n825(x)
+ else
+ fun_l17_n815(x)
+ end
+end
+
+def fun_l16_n17(x)
+ if (x < 1)
+ fun_l17_n939(x)
+ else
+ fun_l17_n591(x)
+ end
+end
+
+def fun_l16_n18(x)
+ if (x < 1)
+ fun_l17_n166(x)
+ else
+ fun_l17_n732(x)
+ end
+end
+
+def fun_l16_n19(x)
+ if (x < 1)
+ fun_l17_n471(x)
+ else
+ fun_l17_n175(x)
+ end
+end
+
+def fun_l16_n20(x)
+ if (x < 1)
+ fun_l17_n887(x)
+ else
+ fun_l17_n304(x)
+ end
+end
+
+def fun_l16_n21(x)
+ if (x < 1)
+ fun_l17_n545(x)
+ else
+ fun_l17_n221(x)
+ end
+end
+
+def fun_l16_n22(x)
+ if (x < 1)
+ fun_l17_n879(x)
+ else
+ fun_l17_n143(x)
+ end
+end
+
+def fun_l16_n23(x)
+ if (x < 1)
+ fun_l17_n732(x)
+ else
+ fun_l17_n902(x)
+ end
+end
+
+def fun_l16_n24(x)
+ if (x < 1)
+ fun_l17_n490(x)
+ else
+ fun_l17_n327(x)
+ end
+end
+
+def fun_l16_n25(x)
+ if (x < 1)
+ fun_l17_n588(x)
+ else
+ fun_l17_n658(x)
+ end
+end
+
+def fun_l16_n26(x)
+ if (x < 1)
+ fun_l17_n555(x)
+ else
+ fun_l17_n507(x)
+ end
+end
+
+def fun_l16_n27(x)
+ if (x < 1)
+ fun_l17_n228(x)
+ else
+ fun_l17_n808(x)
+ end
+end
+
+def fun_l16_n28(x)
+ if (x < 1)
+ fun_l17_n705(x)
+ else
+ fun_l17_n696(x)
+ end
+end
+
+def fun_l16_n29(x)
+ if (x < 1)
+ fun_l17_n711(x)
+ else
+ fun_l17_n913(x)
+ end
+end
+
+def fun_l16_n30(x)
+ if (x < 1)
+ fun_l17_n264(x)
+ else
+ fun_l17_n287(x)
+ end
+end
+
+def fun_l16_n31(x)
+ if (x < 1)
+ fun_l17_n624(x)
+ else
+ fun_l17_n358(x)
+ end
+end
+
+def fun_l16_n32(x)
+ if (x < 1)
+ fun_l17_n102(x)
+ else
+ fun_l17_n303(x)
+ end
+end
+
+def fun_l16_n33(x)
+ if (x < 1)
+ fun_l17_n613(x)
+ else
+ fun_l17_n921(x)
+ end
+end
+
+def fun_l16_n34(x)
+ if (x < 1)
+ fun_l17_n637(x)
+ else
+ fun_l17_n142(x)
+ end
+end
+
+def fun_l16_n35(x)
+ if (x < 1)
+ fun_l17_n8(x)
+ else
+ fun_l17_n752(x)
+ end
+end
+
+def fun_l16_n36(x)
+ if (x < 1)
+ fun_l17_n748(x)
+ else
+ fun_l17_n956(x)
+ end
+end
+
+def fun_l16_n37(x)
+ if (x < 1)
+ fun_l17_n985(x)
+ else
+ fun_l17_n133(x)
+ end
+end
+
+def fun_l16_n38(x)
+ if (x < 1)
+ fun_l17_n422(x)
+ else
+ fun_l17_n608(x)
+ end
+end
+
+def fun_l16_n39(x)
+ if (x < 1)
+ fun_l17_n455(x)
+ else
+ fun_l17_n247(x)
+ end
+end
+
+def fun_l16_n40(x)
+ if (x < 1)
+ fun_l17_n363(x)
+ else
+ fun_l17_n874(x)
+ end
+end
+
+def fun_l16_n41(x)
+ if (x < 1)
+ fun_l17_n299(x)
+ else
+ fun_l17_n971(x)
+ end
+end
+
+def fun_l16_n42(x)
+ if (x < 1)
+ fun_l17_n788(x)
+ else
+ fun_l17_n535(x)
+ end
+end
+
+def fun_l16_n43(x)
+ if (x < 1)
+ fun_l17_n282(x)
+ else
+ fun_l17_n468(x)
+ end
+end
+
+def fun_l16_n44(x)
+ if (x < 1)
+ fun_l17_n493(x)
+ else
+ fun_l17_n931(x)
+ end
+end
+
+def fun_l16_n45(x)
+ if (x < 1)
+ fun_l17_n750(x)
+ else
+ fun_l17_n725(x)
+ end
+end
+
+def fun_l16_n46(x)
+ if (x < 1)
+ fun_l17_n227(x)
+ else
+ fun_l17_n769(x)
+ end
+end
+
+def fun_l16_n47(x)
+ if (x < 1)
+ fun_l17_n348(x)
+ else
+ fun_l17_n83(x)
+ end
+end
+
+def fun_l16_n48(x)
+ if (x < 1)
+ fun_l17_n624(x)
+ else
+ fun_l17_n398(x)
+ end
+end
+
+def fun_l16_n49(x)
+ if (x < 1)
+ fun_l17_n645(x)
+ else
+ fun_l17_n645(x)
+ end
+end
+
+def fun_l16_n50(x)
+ if (x < 1)
+ fun_l17_n191(x)
+ else
+ fun_l17_n256(x)
+ end
+end
+
+def fun_l16_n51(x)
+ if (x < 1)
+ fun_l17_n947(x)
+ else
+ fun_l17_n188(x)
+ end
+end
+
+def fun_l16_n52(x)
+ if (x < 1)
+ fun_l17_n135(x)
+ else
+ fun_l17_n923(x)
+ end
+end
+
+def fun_l16_n53(x)
+ if (x < 1)
+ fun_l17_n867(x)
+ else
+ fun_l17_n520(x)
+ end
+end
+
+def fun_l16_n54(x)
+ if (x < 1)
+ fun_l17_n450(x)
+ else
+ fun_l17_n864(x)
+ end
+end
+
+def fun_l16_n55(x)
+ if (x < 1)
+ fun_l17_n116(x)
+ else
+ fun_l17_n370(x)
+ end
+end
+
+def fun_l16_n56(x)
+ if (x < 1)
+ fun_l17_n754(x)
+ else
+ fun_l17_n919(x)
+ end
+end
+
+def fun_l16_n57(x)
+ if (x < 1)
+ fun_l17_n360(x)
+ else
+ fun_l17_n513(x)
+ end
+end
+
+def fun_l16_n58(x)
+ if (x < 1)
+ fun_l17_n436(x)
+ else
+ fun_l17_n618(x)
+ end
+end
+
+def fun_l16_n59(x)
+ if (x < 1)
+ fun_l17_n795(x)
+ else
+ fun_l17_n851(x)
+ end
+end
+
+def fun_l16_n60(x)
+ if (x < 1)
+ fun_l17_n624(x)
+ else
+ fun_l17_n305(x)
+ end
+end
+
+def fun_l16_n61(x)
+ if (x < 1)
+ fun_l17_n520(x)
+ else
+ fun_l17_n360(x)
+ end
+end
+
+def fun_l16_n62(x)
+ if (x < 1)
+ fun_l17_n297(x)
+ else
+ fun_l17_n218(x)
+ end
+end
+
+def fun_l16_n63(x)
+ if (x < 1)
+ fun_l17_n116(x)
+ else
+ fun_l17_n888(x)
+ end
+end
+
+def fun_l16_n64(x)
+ if (x < 1)
+ fun_l17_n800(x)
+ else
+ fun_l17_n985(x)
+ end
+end
+
+def fun_l16_n65(x)
+ if (x < 1)
+ fun_l17_n875(x)
+ else
+ fun_l17_n821(x)
+ end
+end
+
+def fun_l16_n66(x)
+ if (x < 1)
+ fun_l17_n677(x)
+ else
+ fun_l17_n705(x)
+ end
+end
+
+def fun_l16_n67(x)
+ if (x < 1)
+ fun_l17_n643(x)
+ else
+ fun_l17_n240(x)
+ end
+end
+
+def fun_l16_n68(x)
+ if (x < 1)
+ fun_l17_n290(x)
+ else
+ fun_l17_n885(x)
+ end
+end
+
+def fun_l16_n69(x)
+ if (x < 1)
+ fun_l17_n987(x)
+ else
+ fun_l17_n611(x)
+ end
+end
+
+def fun_l16_n70(x)
+ if (x < 1)
+ fun_l17_n546(x)
+ else
+ fun_l17_n95(x)
+ end
+end
+
+def fun_l16_n71(x)
+ if (x < 1)
+ fun_l17_n301(x)
+ else
+ fun_l17_n260(x)
+ end
+end
+
+def fun_l16_n72(x)
+ if (x < 1)
+ fun_l17_n118(x)
+ else
+ fun_l17_n110(x)
+ end
+end
+
+def fun_l16_n73(x)
+ if (x < 1)
+ fun_l17_n254(x)
+ else
+ fun_l17_n602(x)
+ end
+end
+
+def fun_l16_n74(x)
+ if (x < 1)
+ fun_l17_n725(x)
+ else
+ fun_l17_n606(x)
+ end
+end
+
+def fun_l16_n75(x)
+ if (x < 1)
+ fun_l17_n114(x)
+ else
+ fun_l17_n336(x)
+ end
+end
+
+def fun_l16_n76(x)
+ if (x < 1)
+ fun_l17_n930(x)
+ else
+ fun_l17_n513(x)
+ end
+end
+
+def fun_l16_n77(x)
+ if (x < 1)
+ fun_l17_n217(x)
+ else
+ fun_l17_n158(x)
+ end
+end
+
+def fun_l16_n78(x)
+ if (x < 1)
+ fun_l17_n987(x)
+ else
+ fun_l17_n538(x)
+ end
+end
+
+def fun_l16_n79(x)
+ if (x < 1)
+ fun_l17_n467(x)
+ else
+ fun_l17_n675(x)
+ end
+end
+
+def fun_l16_n80(x)
+ if (x < 1)
+ fun_l17_n553(x)
+ else
+ fun_l17_n77(x)
+ end
+end
+
+def fun_l16_n81(x)
+ if (x < 1)
+ fun_l17_n643(x)
+ else
+ fun_l17_n156(x)
+ end
+end
+
+def fun_l16_n82(x)
+ if (x < 1)
+ fun_l17_n858(x)
+ else
+ fun_l17_n300(x)
+ end
+end
+
+def fun_l16_n83(x)
+ if (x < 1)
+ fun_l17_n136(x)
+ else
+ fun_l17_n637(x)
+ end
+end
+
+def fun_l16_n84(x)
+ if (x < 1)
+ fun_l17_n71(x)
+ else
+ fun_l17_n979(x)
+ end
+end
+
+def fun_l16_n85(x)
+ if (x < 1)
+ fun_l17_n135(x)
+ else
+ fun_l17_n893(x)
+ end
+end
+
+def fun_l16_n86(x)
+ if (x < 1)
+ fun_l17_n734(x)
+ else
+ fun_l17_n254(x)
+ end
+end
+
+def fun_l16_n87(x)
+ if (x < 1)
+ fun_l17_n809(x)
+ else
+ fun_l17_n475(x)
+ end
+end
+
+def fun_l16_n88(x)
+ if (x < 1)
+ fun_l17_n931(x)
+ else
+ fun_l17_n110(x)
+ end
+end
+
+def fun_l16_n89(x)
+ if (x < 1)
+ fun_l17_n957(x)
+ else
+ fun_l17_n489(x)
+ end
+end
+
+def fun_l16_n90(x)
+ if (x < 1)
+ fun_l17_n145(x)
+ else
+ fun_l17_n861(x)
+ end
+end
+
+def fun_l16_n91(x)
+ if (x < 1)
+ fun_l17_n276(x)
+ else
+ fun_l17_n967(x)
+ end
+end
+
+def fun_l16_n92(x)
+ if (x < 1)
+ fun_l17_n657(x)
+ else
+ fun_l17_n638(x)
+ end
+end
+
+def fun_l16_n93(x)
+ if (x < 1)
+ fun_l17_n714(x)
+ else
+ fun_l17_n52(x)
+ end
+end
+
+def fun_l16_n94(x)
+ if (x < 1)
+ fun_l17_n487(x)
+ else
+ fun_l17_n380(x)
+ end
+end
+
+def fun_l16_n95(x)
+ if (x < 1)
+ fun_l17_n58(x)
+ else
+ fun_l17_n67(x)
+ end
+end
+
+def fun_l16_n96(x)
+ if (x < 1)
+ fun_l17_n9(x)
+ else
+ fun_l17_n896(x)
+ end
+end
+
+def fun_l16_n97(x)
+ if (x < 1)
+ fun_l17_n723(x)
+ else
+ fun_l17_n16(x)
+ end
+end
+
+def fun_l16_n98(x)
+ if (x < 1)
+ fun_l17_n143(x)
+ else
+ fun_l17_n31(x)
+ end
+end
+
+def fun_l16_n99(x)
+ if (x < 1)
+ fun_l17_n33(x)
+ else
+ fun_l17_n615(x)
+ end
+end
+
+def fun_l16_n100(x)
+ if (x < 1)
+ fun_l17_n318(x)
+ else
+ fun_l17_n83(x)
+ end
+end
+
+def fun_l16_n101(x)
+ if (x < 1)
+ fun_l17_n694(x)
+ else
+ fun_l17_n851(x)
+ end
+end
+
+def fun_l16_n102(x)
+ if (x < 1)
+ fun_l17_n31(x)
+ else
+ fun_l17_n881(x)
+ end
+end
+
+def fun_l16_n103(x)
+ if (x < 1)
+ fun_l17_n739(x)
+ else
+ fun_l17_n680(x)
+ end
+end
+
+def fun_l16_n104(x)
+ if (x < 1)
+ fun_l17_n123(x)
+ else
+ fun_l17_n969(x)
+ end
+end
+
+def fun_l16_n105(x)
+ if (x < 1)
+ fun_l17_n526(x)
+ else
+ fun_l17_n529(x)
+ end
+end
+
+def fun_l16_n106(x)
+ if (x < 1)
+ fun_l17_n613(x)
+ else
+ fun_l17_n738(x)
+ end
+end
+
+def fun_l16_n107(x)
+ if (x < 1)
+ fun_l17_n48(x)
+ else
+ fun_l17_n107(x)
+ end
+end
+
+def fun_l16_n108(x)
+ if (x < 1)
+ fun_l17_n493(x)
+ else
+ fun_l17_n875(x)
+ end
+end
+
+def fun_l16_n109(x)
+ if (x < 1)
+ fun_l17_n101(x)
+ else
+ fun_l17_n295(x)
+ end
+end
+
+def fun_l16_n110(x)
+ if (x < 1)
+ fun_l17_n257(x)
+ else
+ fun_l17_n132(x)
+ end
+end
+
+def fun_l16_n111(x)
+ if (x < 1)
+ fun_l17_n702(x)
+ else
+ fun_l17_n635(x)
+ end
+end
+
+def fun_l16_n112(x)
+ if (x < 1)
+ fun_l17_n193(x)
+ else
+ fun_l17_n931(x)
+ end
+end
+
+def fun_l16_n113(x)
+ if (x < 1)
+ fun_l17_n973(x)
+ else
+ fun_l17_n708(x)
+ end
+end
+
+def fun_l16_n114(x)
+ if (x < 1)
+ fun_l17_n110(x)
+ else
+ fun_l17_n247(x)
+ end
+end
+
+def fun_l16_n115(x)
+ if (x < 1)
+ fun_l17_n769(x)
+ else
+ fun_l17_n872(x)
+ end
+end
+
+def fun_l16_n116(x)
+ if (x < 1)
+ fun_l17_n63(x)
+ else
+ fun_l17_n90(x)
+ end
+end
+
+def fun_l16_n117(x)
+ if (x < 1)
+ fun_l17_n392(x)
+ else
+ fun_l17_n3(x)
+ end
+end
+
+def fun_l16_n118(x)
+ if (x < 1)
+ fun_l17_n73(x)
+ else
+ fun_l17_n354(x)
+ end
+end
+
+def fun_l16_n119(x)
+ if (x < 1)
+ fun_l17_n173(x)
+ else
+ fun_l17_n573(x)
+ end
+end
+
+def fun_l16_n120(x)
+ if (x < 1)
+ fun_l17_n481(x)
+ else
+ fun_l17_n571(x)
+ end
+end
+
+def fun_l16_n121(x)
+ if (x < 1)
+ fun_l17_n838(x)
+ else
+ fun_l17_n736(x)
+ end
+end
+
+def fun_l16_n122(x)
+ if (x < 1)
+ fun_l17_n400(x)
+ else
+ fun_l17_n169(x)
+ end
+end
+
+def fun_l16_n123(x)
+ if (x < 1)
+ fun_l17_n806(x)
+ else
+ fun_l17_n954(x)
+ end
+end
+
+def fun_l16_n124(x)
+ if (x < 1)
+ fun_l17_n328(x)
+ else
+ fun_l17_n200(x)
+ end
+end
+
+def fun_l16_n125(x)
+ if (x < 1)
+ fun_l17_n388(x)
+ else
+ fun_l17_n875(x)
+ end
+end
+
+def fun_l16_n126(x)
+ if (x < 1)
+ fun_l17_n178(x)
+ else
+ fun_l17_n122(x)
+ end
+end
+
+def fun_l16_n127(x)
+ if (x < 1)
+ fun_l17_n974(x)
+ else
+ fun_l17_n490(x)
+ end
+end
+
+def fun_l16_n128(x)
+ if (x < 1)
+ fun_l17_n731(x)
+ else
+ fun_l17_n807(x)
+ end
+end
+
+def fun_l16_n129(x)
+ if (x < 1)
+ fun_l17_n939(x)
+ else
+ fun_l17_n532(x)
+ end
+end
+
+def fun_l16_n130(x)
+ if (x < 1)
+ fun_l17_n482(x)
+ else
+ fun_l17_n926(x)
+ end
+end
+
+def fun_l16_n131(x)
+ if (x < 1)
+ fun_l17_n884(x)
+ else
+ fun_l17_n179(x)
+ end
+end
+
+def fun_l16_n132(x)
+ if (x < 1)
+ fun_l17_n683(x)
+ else
+ fun_l17_n24(x)
+ end
+end
+
+def fun_l16_n133(x)
+ if (x < 1)
+ fun_l17_n968(x)
+ else
+ fun_l17_n536(x)
+ end
+end
+
+def fun_l16_n134(x)
+ if (x < 1)
+ fun_l17_n229(x)
+ else
+ fun_l17_n280(x)
+ end
+end
+
+def fun_l16_n135(x)
+ if (x < 1)
+ fun_l17_n47(x)
+ else
+ fun_l17_n12(x)
+ end
+end
+
+def fun_l16_n136(x)
+ if (x < 1)
+ fun_l17_n905(x)
+ else
+ fun_l17_n461(x)
+ end
+end
+
+def fun_l16_n137(x)
+ if (x < 1)
+ fun_l17_n992(x)
+ else
+ fun_l17_n294(x)
+ end
+end
+
+def fun_l16_n138(x)
+ if (x < 1)
+ fun_l17_n383(x)
+ else
+ fun_l17_n916(x)
+ end
+end
+
+def fun_l16_n139(x)
+ if (x < 1)
+ fun_l17_n116(x)
+ else
+ fun_l17_n96(x)
+ end
+end
+
+def fun_l16_n140(x)
+ if (x < 1)
+ fun_l17_n702(x)
+ else
+ fun_l17_n294(x)
+ end
+end
+
+def fun_l16_n141(x)
+ if (x < 1)
+ fun_l17_n528(x)
+ else
+ fun_l17_n650(x)
+ end
+end
+
+def fun_l16_n142(x)
+ if (x < 1)
+ fun_l17_n341(x)
+ else
+ fun_l17_n168(x)
+ end
+end
+
+def fun_l16_n143(x)
+ if (x < 1)
+ fun_l17_n85(x)
+ else
+ fun_l17_n384(x)
+ end
+end
+
+def fun_l16_n144(x)
+ if (x < 1)
+ fun_l17_n738(x)
+ else
+ fun_l17_n842(x)
+ end
+end
+
+def fun_l16_n145(x)
+ if (x < 1)
+ fun_l17_n359(x)
+ else
+ fun_l17_n691(x)
+ end
+end
+
+def fun_l16_n146(x)
+ if (x < 1)
+ fun_l17_n465(x)
+ else
+ fun_l17_n310(x)
+ end
+end
+
+def fun_l16_n147(x)
+ if (x < 1)
+ fun_l17_n610(x)
+ else
+ fun_l17_n133(x)
+ end
+end
+
+def fun_l16_n148(x)
+ if (x < 1)
+ fun_l17_n829(x)
+ else
+ fun_l17_n449(x)
+ end
+end
+
+def fun_l16_n149(x)
+ if (x < 1)
+ fun_l17_n319(x)
+ else
+ fun_l17_n875(x)
+ end
+end
+
+def fun_l16_n150(x)
+ if (x < 1)
+ fun_l17_n493(x)
+ else
+ fun_l17_n39(x)
+ end
+end
+
+def fun_l16_n151(x)
+ if (x < 1)
+ fun_l17_n801(x)
+ else
+ fun_l17_n294(x)
+ end
+end
+
+def fun_l16_n152(x)
+ if (x < 1)
+ fun_l17_n39(x)
+ else
+ fun_l17_n113(x)
+ end
+end
+
+def fun_l16_n153(x)
+ if (x < 1)
+ fun_l17_n299(x)
+ else
+ fun_l17_n560(x)
+ end
+end
+
+def fun_l16_n154(x)
+ if (x < 1)
+ fun_l17_n220(x)
+ else
+ fun_l17_n485(x)
+ end
+end
+
+def fun_l16_n155(x)
+ if (x < 1)
+ fun_l17_n219(x)
+ else
+ fun_l17_n210(x)
+ end
+end
+
+def fun_l16_n156(x)
+ if (x < 1)
+ fun_l17_n44(x)
+ else
+ fun_l17_n394(x)
+ end
+end
+
+def fun_l16_n157(x)
+ if (x < 1)
+ fun_l17_n858(x)
+ else
+ fun_l17_n9(x)
+ end
+end
+
+def fun_l16_n158(x)
+ if (x < 1)
+ fun_l17_n298(x)
+ else
+ fun_l17_n584(x)
+ end
+end
+
+def fun_l16_n159(x)
+ if (x < 1)
+ fun_l17_n627(x)
+ else
+ fun_l17_n991(x)
+ end
+end
+
+def fun_l16_n160(x)
+ if (x < 1)
+ fun_l17_n459(x)
+ else
+ fun_l17_n686(x)
+ end
+end
+
+def fun_l16_n161(x)
+ if (x < 1)
+ fun_l17_n694(x)
+ else
+ fun_l17_n503(x)
+ end
+end
+
+def fun_l16_n162(x)
+ if (x < 1)
+ fun_l17_n331(x)
+ else
+ fun_l17_n869(x)
+ end
+end
+
+def fun_l16_n163(x)
+ if (x < 1)
+ fun_l17_n958(x)
+ else
+ fun_l17_n102(x)
+ end
+end
+
+def fun_l16_n164(x)
+ if (x < 1)
+ fun_l17_n254(x)
+ else
+ fun_l17_n888(x)
+ end
+end
+
+def fun_l16_n165(x)
+ if (x < 1)
+ fun_l17_n639(x)
+ else
+ fun_l17_n342(x)
+ end
+end
+
+def fun_l16_n166(x)
+ if (x < 1)
+ fun_l17_n859(x)
+ else
+ fun_l17_n2(x)
+ end
+end
+
+def fun_l16_n167(x)
+ if (x < 1)
+ fun_l17_n504(x)
+ else
+ fun_l17_n726(x)
+ end
+end
+
+def fun_l16_n168(x)
+ if (x < 1)
+ fun_l17_n426(x)
+ else
+ fun_l17_n532(x)
+ end
+end
+
+def fun_l16_n169(x)
+ if (x < 1)
+ fun_l17_n919(x)
+ else
+ fun_l17_n515(x)
+ end
+end
+
+def fun_l16_n170(x)
+ if (x < 1)
+ fun_l17_n394(x)
+ else
+ fun_l17_n259(x)
+ end
+end
+
+def fun_l16_n171(x)
+ if (x < 1)
+ fun_l17_n920(x)
+ else
+ fun_l17_n502(x)
+ end
+end
+
+def fun_l16_n172(x)
+ if (x < 1)
+ fun_l17_n898(x)
+ else
+ fun_l17_n984(x)
+ end
+end
+
+def fun_l16_n173(x)
+ if (x < 1)
+ fun_l17_n869(x)
+ else
+ fun_l17_n470(x)
+ end
+end
+
+def fun_l16_n174(x)
+ if (x < 1)
+ fun_l17_n959(x)
+ else
+ fun_l17_n283(x)
+ end
+end
+
+def fun_l16_n175(x)
+ if (x < 1)
+ fun_l17_n1(x)
+ else
+ fun_l17_n68(x)
+ end
+end
+
+def fun_l16_n176(x)
+ if (x < 1)
+ fun_l17_n91(x)
+ else
+ fun_l17_n684(x)
+ end
+end
+
+def fun_l16_n177(x)
+ if (x < 1)
+ fun_l17_n803(x)
+ else
+ fun_l17_n335(x)
+ end
+end
+
+def fun_l16_n178(x)
+ if (x < 1)
+ fun_l17_n242(x)
+ else
+ fun_l17_n671(x)
+ end
+end
+
+def fun_l16_n179(x)
+ if (x < 1)
+ fun_l17_n944(x)
+ else
+ fun_l17_n136(x)
+ end
+end
+
+def fun_l16_n180(x)
+ if (x < 1)
+ fun_l17_n681(x)
+ else
+ fun_l17_n587(x)
+ end
+end
+
+def fun_l16_n181(x)
+ if (x < 1)
+ fun_l17_n564(x)
+ else
+ fun_l17_n965(x)
+ end
+end
+
+def fun_l16_n182(x)
+ if (x < 1)
+ fun_l17_n107(x)
+ else
+ fun_l17_n229(x)
+ end
+end
+
+def fun_l16_n183(x)
+ if (x < 1)
+ fun_l17_n467(x)
+ else
+ fun_l17_n155(x)
+ end
+end
+
+def fun_l16_n184(x)
+ if (x < 1)
+ fun_l17_n62(x)
+ else
+ fun_l17_n507(x)
+ end
+end
+
+def fun_l16_n185(x)
+ if (x < 1)
+ fun_l17_n632(x)
+ else
+ fun_l17_n792(x)
+ end
+end
+
+def fun_l16_n186(x)
+ if (x < 1)
+ fun_l17_n174(x)
+ else
+ fun_l17_n623(x)
+ end
+end
+
+def fun_l16_n187(x)
+ if (x < 1)
+ fun_l17_n733(x)
+ else
+ fun_l17_n640(x)
+ end
+end
+
+def fun_l16_n188(x)
+ if (x < 1)
+ fun_l17_n968(x)
+ else
+ fun_l17_n554(x)
+ end
+end
+
+def fun_l16_n189(x)
+ if (x < 1)
+ fun_l17_n363(x)
+ else
+ fun_l17_n381(x)
+ end
+end
+
+def fun_l16_n190(x)
+ if (x < 1)
+ fun_l17_n34(x)
+ else
+ fun_l17_n145(x)
+ end
+end
+
+def fun_l16_n191(x)
+ if (x < 1)
+ fun_l17_n407(x)
+ else
+ fun_l17_n567(x)
+ end
+end
+
+def fun_l16_n192(x)
+ if (x < 1)
+ fun_l17_n497(x)
+ else
+ fun_l17_n842(x)
+ end
+end
+
+def fun_l16_n193(x)
+ if (x < 1)
+ fun_l17_n935(x)
+ else
+ fun_l17_n394(x)
+ end
+end
+
+def fun_l16_n194(x)
+ if (x < 1)
+ fun_l17_n728(x)
+ else
+ fun_l17_n885(x)
+ end
+end
+
+def fun_l16_n195(x)
+ if (x < 1)
+ fun_l17_n974(x)
+ else
+ fun_l17_n678(x)
+ end
+end
+
+def fun_l16_n196(x)
+ if (x < 1)
+ fun_l17_n420(x)
+ else
+ fun_l17_n894(x)
+ end
+end
+
+def fun_l16_n197(x)
+ if (x < 1)
+ fun_l17_n651(x)
+ else
+ fun_l17_n569(x)
+ end
+end
+
+def fun_l16_n198(x)
+ if (x < 1)
+ fun_l17_n274(x)
+ else
+ fun_l17_n683(x)
+ end
+end
+
+def fun_l16_n199(x)
+ if (x < 1)
+ fun_l17_n624(x)
+ else
+ fun_l17_n343(x)
+ end
+end
+
+def fun_l16_n200(x)
+ if (x < 1)
+ fun_l17_n82(x)
+ else
+ fun_l17_n472(x)
+ end
+end
+
+def fun_l16_n201(x)
+ if (x < 1)
+ fun_l17_n519(x)
+ else
+ fun_l17_n54(x)
+ end
+end
+
+def fun_l16_n202(x)
+ if (x < 1)
+ fun_l17_n858(x)
+ else
+ fun_l17_n379(x)
+ end
+end
+
+def fun_l16_n203(x)
+ if (x < 1)
+ fun_l17_n515(x)
+ else
+ fun_l17_n59(x)
+ end
+end
+
+def fun_l16_n204(x)
+ if (x < 1)
+ fun_l17_n736(x)
+ else
+ fun_l17_n880(x)
+ end
+end
+
+def fun_l16_n205(x)
+ if (x < 1)
+ fun_l17_n724(x)
+ else
+ fun_l17_n890(x)
+ end
+end
+
+def fun_l16_n206(x)
+ if (x < 1)
+ fun_l17_n92(x)
+ else
+ fun_l17_n305(x)
+ end
+end
+
+def fun_l16_n207(x)
+ if (x < 1)
+ fun_l17_n123(x)
+ else
+ fun_l17_n455(x)
+ end
+end
+
+def fun_l16_n208(x)
+ if (x < 1)
+ fun_l17_n722(x)
+ else
+ fun_l17_n142(x)
+ end
+end
+
+def fun_l16_n209(x)
+ if (x < 1)
+ fun_l17_n250(x)
+ else
+ fun_l17_n810(x)
+ end
+end
+
+def fun_l16_n210(x)
+ if (x < 1)
+ fun_l17_n118(x)
+ else
+ fun_l17_n902(x)
+ end
+end
+
+def fun_l16_n211(x)
+ if (x < 1)
+ fun_l17_n8(x)
+ else
+ fun_l17_n874(x)
+ end
+end
+
+def fun_l16_n212(x)
+ if (x < 1)
+ fun_l17_n589(x)
+ else
+ fun_l17_n731(x)
+ end
+end
+
+def fun_l16_n213(x)
+ if (x < 1)
+ fun_l17_n786(x)
+ else
+ fun_l17_n249(x)
+ end
+end
+
+def fun_l16_n214(x)
+ if (x < 1)
+ fun_l17_n80(x)
+ else
+ fun_l17_n763(x)
+ end
+end
+
+def fun_l16_n215(x)
+ if (x < 1)
+ fun_l17_n733(x)
+ else
+ fun_l17_n657(x)
+ end
+end
+
+def fun_l16_n216(x)
+ if (x < 1)
+ fun_l17_n168(x)
+ else
+ fun_l17_n881(x)
+ end
+end
+
+def fun_l16_n217(x)
+ if (x < 1)
+ fun_l17_n568(x)
+ else
+ fun_l17_n698(x)
+ end
+end
+
+def fun_l16_n218(x)
+ if (x < 1)
+ fun_l17_n727(x)
+ else
+ fun_l17_n388(x)
+ end
+end
+
+def fun_l16_n219(x)
+ if (x < 1)
+ fun_l17_n443(x)
+ else
+ fun_l17_n600(x)
+ end
+end
+
+def fun_l16_n220(x)
+ if (x < 1)
+ fun_l17_n901(x)
+ else
+ fun_l17_n875(x)
+ end
+end
+
+def fun_l16_n221(x)
+ if (x < 1)
+ fun_l17_n374(x)
+ else
+ fun_l17_n819(x)
+ end
+end
+
+def fun_l16_n222(x)
+ if (x < 1)
+ fun_l17_n563(x)
+ else
+ fun_l17_n341(x)
+ end
+end
+
+def fun_l16_n223(x)
+ if (x < 1)
+ fun_l17_n404(x)
+ else
+ fun_l17_n201(x)
+ end
+end
+
+def fun_l16_n224(x)
+ if (x < 1)
+ fun_l17_n932(x)
+ else
+ fun_l17_n803(x)
+ end
+end
+
+def fun_l16_n225(x)
+ if (x < 1)
+ fun_l17_n970(x)
+ else
+ fun_l17_n717(x)
+ end
+end
+
+def fun_l16_n226(x)
+ if (x < 1)
+ fun_l17_n599(x)
+ else
+ fun_l17_n692(x)
+ end
+end
+
+def fun_l16_n227(x)
+ if (x < 1)
+ fun_l17_n351(x)
+ else
+ fun_l17_n177(x)
+ end
+end
+
+def fun_l16_n228(x)
+ if (x < 1)
+ fun_l17_n891(x)
+ else
+ fun_l17_n79(x)
+ end
+end
+
+def fun_l16_n229(x)
+ if (x < 1)
+ fun_l17_n143(x)
+ else
+ fun_l17_n702(x)
+ end
+end
+
+def fun_l16_n230(x)
+ if (x < 1)
+ fun_l17_n591(x)
+ else
+ fun_l17_n317(x)
+ end
+end
+
+def fun_l16_n231(x)
+ if (x < 1)
+ fun_l17_n727(x)
+ else
+ fun_l17_n881(x)
+ end
+end
+
+def fun_l16_n232(x)
+ if (x < 1)
+ fun_l17_n390(x)
+ else
+ fun_l17_n580(x)
+ end
+end
+
+def fun_l16_n233(x)
+ if (x < 1)
+ fun_l17_n530(x)
+ else
+ fun_l17_n102(x)
+ end
+end
+
+def fun_l16_n234(x)
+ if (x < 1)
+ fun_l17_n891(x)
+ else
+ fun_l17_n783(x)
+ end
+end
+
+def fun_l16_n235(x)
+ if (x < 1)
+ fun_l17_n91(x)
+ else
+ fun_l17_n142(x)
+ end
+end
+
+def fun_l16_n236(x)
+ if (x < 1)
+ fun_l17_n55(x)
+ else
+ fun_l17_n897(x)
+ end
+end
+
+def fun_l16_n237(x)
+ if (x < 1)
+ fun_l17_n471(x)
+ else
+ fun_l17_n24(x)
+ end
+end
+
+def fun_l16_n238(x)
+ if (x < 1)
+ fun_l17_n812(x)
+ else
+ fun_l17_n833(x)
+ end
+end
+
+def fun_l16_n239(x)
+ if (x < 1)
+ fun_l17_n879(x)
+ else
+ fun_l17_n560(x)
+ end
+end
+
+def fun_l16_n240(x)
+ if (x < 1)
+ fun_l17_n882(x)
+ else
+ fun_l17_n473(x)
+ end
+end
+
+def fun_l16_n241(x)
+ if (x < 1)
+ fun_l17_n30(x)
+ else
+ fun_l17_n299(x)
+ end
+end
+
+def fun_l16_n242(x)
+ if (x < 1)
+ fun_l17_n855(x)
+ else
+ fun_l17_n751(x)
+ end
+end
+
+def fun_l16_n243(x)
+ if (x < 1)
+ fun_l17_n184(x)
+ else
+ fun_l17_n997(x)
+ end
+end
+
+def fun_l16_n244(x)
+ if (x < 1)
+ fun_l17_n151(x)
+ else
+ fun_l17_n495(x)
+ end
+end
+
+def fun_l16_n245(x)
+ if (x < 1)
+ fun_l17_n181(x)
+ else
+ fun_l17_n360(x)
+ end
+end
+
+def fun_l16_n246(x)
+ if (x < 1)
+ fun_l17_n208(x)
+ else
+ fun_l17_n767(x)
+ end
+end
+
+def fun_l16_n247(x)
+ if (x < 1)
+ fun_l17_n969(x)
+ else
+ fun_l17_n15(x)
+ end
+end
+
+def fun_l16_n248(x)
+ if (x < 1)
+ fun_l17_n529(x)
+ else
+ fun_l17_n879(x)
+ end
+end
+
+def fun_l16_n249(x)
+ if (x < 1)
+ fun_l17_n729(x)
+ else
+ fun_l17_n355(x)
+ end
+end
+
+def fun_l16_n250(x)
+ if (x < 1)
+ fun_l17_n239(x)
+ else
+ fun_l17_n414(x)
+ end
+end
+
+def fun_l16_n251(x)
+ if (x < 1)
+ fun_l17_n257(x)
+ else
+ fun_l17_n362(x)
+ end
+end
+
+def fun_l16_n252(x)
+ if (x < 1)
+ fun_l17_n832(x)
+ else
+ fun_l17_n924(x)
+ end
+end
+
+def fun_l16_n253(x)
+ if (x < 1)
+ fun_l17_n907(x)
+ else
+ fun_l17_n548(x)
+ end
+end
+
+def fun_l16_n254(x)
+ if (x < 1)
+ fun_l17_n391(x)
+ else
+ fun_l17_n316(x)
+ end
+end
+
+def fun_l16_n255(x)
+ if (x < 1)
+ fun_l17_n163(x)
+ else
+ fun_l17_n164(x)
+ end
+end
+
+def fun_l16_n256(x)
+ if (x < 1)
+ fun_l17_n86(x)
+ else
+ fun_l17_n473(x)
+ end
+end
+
+def fun_l16_n257(x)
+ if (x < 1)
+ fun_l17_n519(x)
+ else
+ fun_l17_n556(x)
+ end
+end
+
+def fun_l16_n258(x)
+ if (x < 1)
+ fun_l17_n819(x)
+ else
+ fun_l17_n41(x)
+ end
+end
+
+def fun_l16_n259(x)
+ if (x < 1)
+ fun_l17_n330(x)
+ else
+ fun_l17_n334(x)
+ end
+end
+
+def fun_l16_n260(x)
+ if (x < 1)
+ fun_l17_n441(x)
+ else
+ fun_l17_n529(x)
+ end
+end
+
+def fun_l16_n261(x)
+ if (x < 1)
+ fun_l17_n116(x)
+ else
+ fun_l17_n597(x)
+ end
+end
+
+def fun_l16_n262(x)
+ if (x < 1)
+ fun_l17_n537(x)
+ else
+ fun_l17_n594(x)
+ end
+end
+
+def fun_l16_n263(x)
+ if (x < 1)
+ fun_l17_n511(x)
+ else
+ fun_l17_n56(x)
+ end
+end
+
+def fun_l16_n264(x)
+ if (x < 1)
+ fun_l17_n264(x)
+ else
+ fun_l17_n641(x)
+ end
+end
+
+def fun_l16_n265(x)
+ if (x < 1)
+ fun_l17_n806(x)
+ else
+ fun_l17_n432(x)
+ end
+end
+
+def fun_l16_n266(x)
+ if (x < 1)
+ fun_l17_n428(x)
+ else
+ fun_l17_n463(x)
+ end
+end
+
+def fun_l16_n267(x)
+ if (x < 1)
+ fun_l17_n39(x)
+ else
+ fun_l17_n362(x)
+ end
+end
+
+def fun_l16_n268(x)
+ if (x < 1)
+ fun_l17_n502(x)
+ else
+ fun_l17_n87(x)
+ end
+end
+
+def fun_l16_n269(x)
+ if (x < 1)
+ fun_l17_n143(x)
+ else
+ fun_l17_n92(x)
+ end
+end
+
+def fun_l16_n270(x)
+ if (x < 1)
+ fun_l17_n675(x)
+ else
+ fun_l17_n629(x)
+ end
+end
+
+def fun_l16_n271(x)
+ if (x < 1)
+ fun_l17_n33(x)
+ else
+ fun_l17_n158(x)
+ end
+end
+
+def fun_l16_n272(x)
+ if (x < 1)
+ fun_l17_n480(x)
+ else
+ fun_l17_n204(x)
+ end
+end
+
+def fun_l16_n273(x)
+ if (x < 1)
+ fun_l17_n81(x)
+ else
+ fun_l17_n855(x)
+ end
+end
+
+def fun_l16_n274(x)
+ if (x < 1)
+ fun_l17_n608(x)
+ else
+ fun_l17_n969(x)
+ end
+end
+
+def fun_l16_n275(x)
+ if (x < 1)
+ fun_l17_n606(x)
+ else
+ fun_l17_n292(x)
+ end
+end
+
+def fun_l16_n276(x)
+ if (x < 1)
+ fun_l17_n494(x)
+ else
+ fun_l17_n689(x)
+ end
+end
+
+def fun_l16_n277(x)
+ if (x < 1)
+ fun_l17_n3(x)
+ else
+ fun_l17_n207(x)
+ end
+end
+
+def fun_l16_n278(x)
+ if (x < 1)
+ fun_l17_n85(x)
+ else
+ fun_l17_n59(x)
+ end
+end
+
+def fun_l16_n279(x)
+ if (x < 1)
+ fun_l17_n363(x)
+ else
+ fun_l17_n651(x)
+ end
+end
+
+def fun_l16_n280(x)
+ if (x < 1)
+ fun_l17_n199(x)
+ else
+ fun_l17_n77(x)
+ end
+end
+
+def fun_l16_n281(x)
+ if (x < 1)
+ fun_l17_n83(x)
+ else
+ fun_l17_n865(x)
+ end
+end
+
+def fun_l16_n282(x)
+ if (x < 1)
+ fun_l17_n120(x)
+ else
+ fun_l17_n466(x)
+ end
+end
+
+def fun_l16_n283(x)
+ if (x < 1)
+ fun_l17_n667(x)
+ else
+ fun_l17_n867(x)
+ end
+end
+
+def fun_l16_n284(x)
+ if (x < 1)
+ fun_l17_n248(x)
+ else
+ fun_l17_n480(x)
+ end
+end
+
+def fun_l16_n285(x)
+ if (x < 1)
+ fun_l17_n766(x)
+ else
+ fun_l17_n609(x)
+ end
+end
+
+def fun_l16_n286(x)
+ if (x < 1)
+ fun_l17_n95(x)
+ else
+ fun_l17_n341(x)
+ end
+end
+
+def fun_l16_n287(x)
+ if (x < 1)
+ fun_l17_n234(x)
+ else
+ fun_l17_n552(x)
+ end
+end
+
+def fun_l16_n288(x)
+ if (x < 1)
+ fun_l17_n955(x)
+ else
+ fun_l17_n434(x)
+ end
+end
+
+def fun_l16_n289(x)
+ if (x < 1)
+ fun_l17_n954(x)
+ else
+ fun_l17_n554(x)
+ end
+end
+
+def fun_l16_n290(x)
+ if (x < 1)
+ fun_l17_n981(x)
+ else
+ fun_l17_n374(x)
+ end
+end
+
+def fun_l16_n291(x)
+ if (x < 1)
+ fun_l17_n153(x)
+ else
+ fun_l17_n849(x)
+ end
+end
+
+def fun_l16_n292(x)
+ if (x < 1)
+ fun_l17_n89(x)
+ else
+ fun_l17_n491(x)
+ end
+end
+
+def fun_l16_n293(x)
+ if (x < 1)
+ fun_l17_n908(x)
+ else
+ fun_l17_n75(x)
+ end
+end
+
+def fun_l16_n294(x)
+ if (x < 1)
+ fun_l17_n772(x)
+ else
+ fun_l17_n474(x)
+ end
+end
+
+def fun_l16_n295(x)
+ if (x < 1)
+ fun_l17_n577(x)
+ else
+ fun_l17_n470(x)
+ end
+end
+
+def fun_l16_n296(x)
+ if (x < 1)
+ fun_l17_n699(x)
+ else
+ fun_l17_n172(x)
+ end
+end
+
+def fun_l16_n297(x)
+ if (x < 1)
+ fun_l17_n408(x)
+ else
+ fun_l17_n314(x)
+ end
+end
+
+def fun_l16_n298(x)
+ if (x < 1)
+ fun_l17_n521(x)
+ else
+ fun_l17_n940(x)
+ end
+end
+
+def fun_l16_n299(x)
+ if (x < 1)
+ fun_l17_n804(x)
+ else
+ fun_l17_n503(x)
+ end
+end
+
+def fun_l16_n300(x)
+ if (x < 1)
+ fun_l17_n712(x)
+ else
+ fun_l17_n227(x)
+ end
+end
+
+def fun_l16_n301(x)
+ if (x < 1)
+ fun_l17_n700(x)
+ else
+ fun_l17_n102(x)
+ end
+end
+
+def fun_l16_n302(x)
+ if (x < 1)
+ fun_l17_n290(x)
+ else
+ fun_l17_n212(x)
+ end
+end
+
+def fun_l16_n303(x)
+ if (x < 1)
+ fun_l17_n525(x)
+ else
+ fun_l17_n273(x)
+ end
+end
+
+def fun_l16_n304(x)
+ if (x < 1)
+ fun_l17_n356(x)
+ else
+ fun_l17_n359(x)
+ end
+end
+
+def fun_l16_n305(x)
+ if (x < 1)
+ fun_l17_n84(x)
+ else
+ fun_l17_n207(x)
+ end
+end
+
+def fun_l16_n306(x)
+ if (x < 1)
+ fun_l17_n566(x)
+ else
+ fun_l17_n945(x)
+ end
+end
+
+def fun_l16_n307(x)
+ if (x < 1)
+ fun_l17_n692(x)
+ else
+ fun_l17_n326(x)
+ end
+end
+
+def fun_l16_n308(x)
+ if (x < 1)
+ fun_l17_n727(x)
+ else
+ fun_l17_n205(x)
+ end
+end
+
+def fun_l16_n309(x)
+ if (x < 1)
+ fun_l17_n568(x)
+ else
+ fun_l17_n386(x)
+ end
+end
+
+def fun_l16_n310(x)
+ if (x < 1)
+ fun_l17_n244(x)
+ else
+ fun_l17_n472(x)
+ end
+end
+
+def fun_l16_n311(x)
+ if (x < 1)
+ fun_l17_n956(x)
+ else
+ fun_l17_n546(x)
+ end
+end
+
+def fun_l16_n312(x)
+ if (x < 1)
+ fun_l17_n807(x)
+ else
+ fun_l17_n924(x)
+ end
+end
+
+def fun_l16_n313(x)
+ if (x < 1)
+ fun_l17_n931(x)
+ else
+ fun_l17_n962(x)
+ end
+end
+
+def fun_l16_n314(x)
+ if (x < 1)
+ fun_l17_n64(x)
+ else
+ fun_l17_n178(x)
+ end
+end
+
+def fun_l16_n315(x)
+ if (x < 1)
+ fun_l17_n460(x)
+ else
+ fun_l17_n438(x)
+ end
+end
+
+def fun_l16_n316(x)
+ if (x < 1)
+ fun_l17_n185(x)
+ else
+ fun_l17_n25(x)
+ end
+end
+
+def fun_l16_n317(x)
+ if (x < 1)
+ fun_l17_n732(x)
+ else
+ fun_l17_n460(x)
+ end
+end
+
+def fun_l16_n318(x)
+ if (x < 1)
+ fun_l17_n5(x)
+ else
+ fun_l17_n947(x)
+ end
+end
+
+def fun_l16_n319(x)
+ if (x < 1)
+ fun_l17_n682(x)
+ else
+ fun_l17_n644(x)
+ end
+end
+
+def fun_l16_n320(x)
+ if (x < 1)
+ fun_l17_n151(x)
+ else
+ fun_l17_n578(x)
+ end
+end
+
+def fun_l16_n321(x)
+ if (x < 1)
+ fun_l17_n219(x)
+ else
+ fun_l17_n4(x)
+ end
+end
+
+def fun_l16_n322(x)
+ if (x < 1)
+ fun_l17_n214(x)
+ else
+ fun_l17_n594(x)
+ end
+end
+
+def fun_l16_n323(x)
+ if (x < 1)
+ fun_l17_n970(x)
+ else
+ fun_l17_n275(x)
+ end
+end
+
+def fun_l16_n324(x)
+ if (x < 1)
+ fun_l17_n442(x)
+ else
+ fun_l17_n377(x)
+ end
+end
+
+def fun_l16_n325(x)
+ if (x < 1)
+ fun_l17_n783(x)
+ else
+ fun_l17_n731(x)
+ end
+end
+
+def fun_l16_n326(x)
+ if (x < 1)
+ fun_l17_n43(x)
+ else
+ fun_l17_n884(x)
+ end
+end
+
+def fun_l16_n327(x)
+ if (x < 1)
+ fun_l17_n857(x)
+ else
+ fun_l17_n593(x)
+ end
+end
+
+def fun_l16_n328(x)
+ if (x < 1)
+ fun_l17_n942(x)
+ else
+ fun_l17_n772(x)
+ end
+end
+
+def fun_l16_n329(x)
+ if (x < 1)
+ fun_l17_n309(x)
+ else
+ fun_l17_n508(x)
+ end
+end
+
+def fun_l16_n330(x)
+ if (x < 1)
+ fun_l17_n30(x)
+ else
+ fun_l17_n165(x)
+ end
+end
+
+def fun_l16_n331(x)
+ if (x < 1)
+ fun_l17_n981(x)
+ else
+ fun_l17_n355(x)
+ end
+end
+
+def fun_l16_n332(x)
+ if (x < 1)
+ fun_l17_n159(x)
+ else
+ fun_l17_n228(x)
+ end
+end
+
+def fun_l16_n333(x)
+ if (x < 1)
+ fun_l17_n499(x)
+ else
+ fun_l17_n565(x)
+ end
+end
+
+def fun_l16_n334(x)
+ if (x < 1)
+ fun_l17_n371(x)
+ else
+ fun_l17_n856(x)
+ end
+end
+
+def fun_l16_n335(x)
+ if (x < 1)
+ fun_l17_n717(x)
+ else
+ fun_l17_n229(x)
+ end
+end
+
+def fun_l16_n336(x)
+ if (x < 1)
+ fun_l17_n678(x)
+ else
+ fun_l17_n236(x)
+ end
+end
+
+def fun_l16_n337(x)
+ if (x < 1)
+ fun_l17_n472(x)
+ else
+ fun_l17_n566(x)
+ end
+end
+
+def fun_l16_n338(x)
+ if (x < 1)
+ fun_l17_n74(x)
+ else
+ fun_l17_n247(x)
+ end
+end
+
+def fun_l16_n339(x)
+ if (x < 1)
+ fun_l17_n379(x)
+ else
+ fun_l17_n443(x)
+ end
+end
+
+def fun_l16_n340(x)
+ if (x < 1)
+ fun_l17_n233(x)
+ else
+ fun_l17_n79(x)
+ end
+end
+
+def fun_l16_n341(x)
+ if (x < 1)
+ fun_l17_n136(x)
+ else
+ fun_l17_n900(x)
+ end
+end
+
+def fun_l16_n342(x)
+ if (x < 1)
+ fun_l17_n785(x)
+ else
+ fun_l17_n63(x)
+ end
+end
+
+def fun_l16_n343(x)
+ if (x < 1)
+ fun_l17_n429(x)
+ else
+ fun_l17_n111(x)
+ end
+end
+
+def fun_l16_n344(x)
+ if (x < 1)
+ fun_l17_n226(x)
+ else
+ fun_l17_n137(x)
+ end
+end
+
+def fun_l16_n345(x)
+ if (x < 1)
+ fun_l17_n428(x)
+ else
+ fun_l17_n674(x)
+ end
+end
+
+def fun_l16_n346(x)
+ if (x < 1)
+ fun_l17_n940(x)
+ else
+ fun_l17_n987(x)
+ end
+end
+
+def fun_l16_n347(x)
+ if (x < 1)
+ fun_l17_n579(x)
+ else
+ fun_l17_n220(x)
+ end
+end
+
+def fun_l16_n348(x)
+ if (x < 1)
+ fun_l17_n502(x)
+ else
+ fun_l17_n530(x)
+ end
+end
+
+def fun_l16_n349(x)
+ if (x < 1)
+ fun_l17_n334(x)
+ else
+ fun_l17_n955(x)
+ end
+end
+
+def fun_l16_n350(x)
+ if (x < 1)
+ fun_l17_n680(x)
+ else
+ fun_l17_n41(x)
+ end
+end
+
+def fun_l16_n351(x)
+ if (x < 1)
+ fun_l17_n821(x)
+ else
+ fun_l17_n750(x)
+ end
+end
+
+def fun_l16_n352(x)
+ if (x < 1)
+ fun_l17_n212(x)
+ else
+ fun_l17_n537(x)
+ end
+end
+
+def fun_l16_n353(x)
+ if (x < 1)
+ fun_l17_n555(x)
+ else
+ fun_l17_n834(x)
+ end
+end
+
+def fun_l16_n354(x)
+ if (x < 1)
+ fun_l17_n532(x)
+ else
+ fun_l17_n940(x)
+ end
+end
+
+def fun_l16_n355(x)
+ if (x < 1)
+ fun_l17_n771(x)
+ else
+ fun_l17_n915(x)
+ end
+end
+
+def fun_l16_n356(x)
+ if (x < 1)
+ fun_l17_n844(x)
+ else
+ fun_l17_n235(x)
+ end
+end
+
+def fun_l16_n357(x)
+ if (x < 1)
+ fun_l17_n604(x)
+ else
+ fun_l17_n241(x)
+ end
+end
+
+def fun_l16_n358(x)
+ if (x < 1)
+ fun_l17_n156(x)
+ else
+ fun_l17_n832(x)
+ end
+end
+
+def fun_l16_n359(x)
+ if (x < 1)
+ fun_l17_n335(x)
+ else
+ fun_l17_n115(x)
+ end
+end
+
+def fun_l16_n360(x)
+ if (x < 1)
+ fun_l17_n563(x)
+ else
+ fun_l17_n779(x)
+ end
+end
+
+def fun_l16_n361(x)
+ if (x < 1)
+ fun_l17_n280(x)
+ else
+ fun_l17_n946(x)
+ end
+end
+
+def fun_l16_n362(x)
+ if (x < 1)
+ fun_l17_n497(x)
+ else
+ fun_l17_n390(x)
+ end
+end
+
+def fun_l16_n363(x)
+ if (x < 1)
+ fun_l17_n59(x)
+ else
+ fun_l17_n178(x)
+ end
+end
+
+def fun_l16_n364(x)
+ if (x < 1)
+ fun_l17_n509(x)
+ else
+ fun_l17_n963(x)
+ end
+end
+
+def fun_l16_n365(x)
+ if (x < 1)
+ fun_l17_n670(x)
+ else
+ fun_l17_n455(x)
+ end
+end
+
+def fun_l16_n366(x)
+ if (x < 1)
+ fun_l17_n852(x)
+ else
+ fun_l17_n590(x)
+ end
+end
+
+def fun_l16_n367(x)
+ if (x < 1)
+ fun_l17_n714(x)
+ else
+ fun_l17_n98(x)
+ end
+end
+
+def fun_l16_n368(x)
+ if (x < 1)
+ fun_l17_n456(x)
+ else
+ fun_l17_n754(x)
+ end
+end
+
+def fun_l16_n369(x)
+ if (x < 1)
+ fun_l17_n809(x)
+ else
+ fun_l17_n38(x)
+ end
+end
+
+def fun_l16_n370(x)
+ if (x < 1)
+ fun_l17_n127(x)
+ else
+ fun_l17_n395(x)
+ end
+end
+
+def fun_l16_n371(x)
+ if (x < 1)
+ fun_l17_n700(x)
+ else
+ fun_l17_n175(x)
+ end
+end
+
+def fun_l16_n372(x)
+ if (x < 1)
+ fun_l17_n705(x)
+ else
+ fun_l17_n598(x)
+ end
+end
+
+def fun_l16_n373(x)
+ if (x < 1)
+ fun_l17_n808(x)
+ else
+ fun_l17_n253(x)
+ end
+end
+
+def fun_l16_n374(x)
+ if (x < 1)
+ fun_l17_n195(x)
+ else
+ fun_l17_n47(x)
+ end
+end
+
+def fun_l16_n375(x)
+ if (x < 1)
+ fun_l17_n124(x)
+ else
+ fun_l17_n438(x)
+ end
+end
+
+def fun_l16_n376(x)
+ if (x < 1)
+ fun_l17_n261(x)
+ else
+ fun_l17_n317(x)
+ end
+end
+
+def fun_l16_n377(x)
+ if (x < 1)
+ fun_l17_n702(x)
+ else
+ fun_l17_n67(x)
+ end
+end
+
+def fun_l16_n378(x)
+ if (x < 1)
+ fun_l17_n194(x)
+ else
+ fun_l17_n990(x)
+ end
+end
+
+def fun_l16_n379(x)
+ if (x < 1)
+ fun_l17_n574(x)
+ else
+ fun_l17_n379(x)
+ end
+end
+
+def fun_l16_n380(x)
+ if (x < 1)
+ fun_l17_n182(x)
+ else
+ fun_l17_n902(x)
+ end
+end
+
+def fun_l16_n381(x)
+ if (x < 1)
+ fun_l17_n963(x)
+ else
+ fun_l17_n627(x)
+ end
+end
+
+def fun_l16_n382(x)
+ if (x < 1)
+ fun_l17_n200(x)
+ else
+ fun_l17_n889(x)
+ end
+end
+
+def fun_l16_n383(x)
+ if (x < 1)
+ fun_l17_n14(x)
+ else
+ fun_l17_n422(x)
+ end
+end
+
+def fun_l16_n384(x)
+ if (x < 1)
+ fun_l17_n543(x)
+ else
+ fun_l17_n940(x)
+ end
+end
+
+def fun_l16_n385(x)
+ if (x < 1)
+ fun_l17_n762(x)
+ else
+ fun_l17_n493(x)
+ end
+end
+
+def fun_l16_n386(x)
+ if (x < 1)
+ fun_l17_n824(x)
+ else
+ fun_l17_n963(x)
+ end
+end
+
+def fun_l16_n387(x)
+ if (x < 1)
+ fun_l17_n298(x)
+ else
+ fun_l17_n831(x)
+ end
+end
+
+def fun_l16_n388(x)
+ if (x < 1)
+ fun_l17_n284(x)
+ else
+ fun_l17_n784(x)
+ end
+end
+
+def fun_l16_n389(x)
+ if (x < 1)
+ fun_l17_n461(x)
+ else
+ fun_l17_n684(x)
+ end
+end
+
+def fun_l16_n390(x)
+ if (x < 1)
+ fun_l17_n829(x)
+ else
+ fun_l17_n788(x)
+ end
+end
+
+def fun_l16_n391(x)
+ if (x < 1)
+ fun_l17_n263(x)
+ else
+ fun_l17_n21(x)
+ end
+end
+
+def fun_l16_n392(x)
+ if (x < 1)
+ fun_l17_n994(x)
+ else
+ fun_l17_n646(x)
+ end
+end
+
+def fun_l16_n393(x)
+ if (x < 1)
+ fun_l17_n438(x)
+ else
+ fun_l17_n84(x)
+ end
+end
+
+def fun_l16_n394(x)
+ if (x < 1)
+ fun_l17_n660(x)
+ else
+ fun_l17_n269(x)
+ end
+end
+
+def fun_l16_n395(x)
+ if (x < 1)
+ fun_l17_n939(x)
+ else
+ fun_l17_n676(x)
+ end
+end
+
+def fun_l16_n396(x)
+ if (x < 1)
+ fun_l17_n608(x)
+ else
+ fun_l17_n483(x)
+ end
+end
+
+def fun_l16_n397(x)
+ if (x < 1)
+ fun_l17_n504(x)
+ else
+ fun_l17_n499(x)
+ end
+end
+
+def fun_l16_n398(x)
+ if (x < 1)
+ fun_l17_n793(x)
+ else
+ fun_l17_n489(x)
+ end
+end
+
+def fun_l16_n399(x)
+ if (x < 1)
+ fun_l17_n28(x)
+ else
+ fun_l17_n158(x)
+ end
+end
+
+def fun_l16_n400(x)
+ if (x < 1)
+ fun_l17_n30(x)
+ else
+ fun_l17_n21(x)
+ end
+end
+
+def fun_l16_n401(x)
+ if (x < 1)
+ fun_l17_n532(x)
+ else
+ fun_l17_n730(x)
+ end
+end
+
+def fun_l16_n402(x)
+ if (x < 1)
+ fun_l17_n593(x)
+ else
+ fun_l17_n4(x)
+ end
+end
+
+def fun_l16_n403(x)
+ if (x < 1)
+ fun_l17_n881(x)
+ else
+ fun_l17_n956(x)
+ end
+end
+
+def fun_l16_n404(x)
+ if (x < 1)
+ fun_l17_n676(x)
+ else
+ fun_l17_n625(x)
+ end
+end
+
+def fun_l16_n405(x)
+ if (x < 1)
+ fun_l17_n192(x)
+ else
+ fun_l17_n301(x)
+ end
+end
+
+def fun_l16_n406(x)
+ if (x < 1)
+ fun_l17_n170(x)
+ else
+ fun_l17_n970(x)
+ end
+end
+
+def fun_l16_n407(x)
+ if (x < 1)
+ fun_l17_n268(x)
+ else
+ fun_l17_n765(x)
+ end
+end
+
+def fun_l16_n408(x)
+ if (x < 1)
+ fun_l17_n310(x)
+ else
+ fun_l17_n578(x)
+ end
+end
+
+def fun_l16_n409(x)
+ if (x < 1)
+ fun_l17_n301(x)
+ else
+ fun_l17_n870(x)
+ end
+end
+
+def fun_l16_n410(x)
+ if (x < 1)
+ fun_l17_n390(x)
+ else
+ fun_l17_n769(x)
+ end
+end
+
+def fun_l16_n411(x)
+ if (x < 1)
+ fun_l17_n973(x)
+ else
+ fun_l17_n545(x)
+ end
+end
+
+def fun_l16_n412(x)
+ if (x < 1)
+ fun_l17_n108(x)
+ else
+ fun_l17_n731(x)
+ end
+end
+
+def fun_l16_n413(x)
+ if (x < 1)
+ fun_l17_n842(x)
+ else
+ fun_l17_n106(x)
+ end
+end
+
+def fun_l16_n414(x)
+ if (x < 1)
+ fun_l17_n10(x)
+ else
+ fun_l17_n421(x)
+ end
+end
+
+def fun_l16_n415(x)
+ if (x < 1)
+ fun_l17_n765(x)
+ else
+ fun_l17_n584(x)
+ end
+end
+
+def fun_l16_n416(x)
+ if (x < 1)
+ fun_l17_n480(x)
+ else
+ fun_l17_n494(x)
+ end
+end
+
+def fun_l16_n417(x)
+ if (x < 1)
+ fun_l17_n977(x)
+ else
+ fun_l17_n66(x)
+ end
+end
+
+def fun_l16_n418(x)
+ if (x < 1)
+ fun_l17_n291(x)
+ else
+ fun_l17_n161(x)
+ end
+end
+
+def fun_l16_n419(x)
+ if (x < 1)
+ fun_l17_n400(x)
+ else
+ fun_l17_n99(x)
+ end
+end
+
+def fun_l16_n420(x)
+ if (x < 1)
+ fun_l17_n621(x)
+ else
+ fun_l17_n778(x)
+ end
+end
+
+def fun_l16_n421(x)
+ if (x < 1)
+ fun_l17_n286(x)
+ else
+ fun_l17_n784(x)
+ end
+end
+
+def fun_l16_n422(x)
+ if (x < 1)
+ fun_l17_n575(x)
+ else
+ fun_l17_n606(x)
+ end
+end
+
+def fun_l16_n423(x)
+ if (x < 1)
+ fun_l17_n459(x)
+ else
+ fun_l17_n198(x)
+ end
+end
+
+def fun_l16_n424(x)
+ if (x < 1)
+ fun_l17_n190(x)
+ else
+ fun_l17_n597(x)
+ end
+end
+
+def fun_l16_n425(x)
+ if (x < 1)
+ fun_l17_n365(x)
+ else
+ fun_l17_n73(x)
+ end
+end
+
+def fun_l16_n426(x)
+ if (x < 1)
+ fun_l17_n769(x)
+ else
+ fun_l17_n658(x)
+ end
+end
+
+def fun_l16_n427(x)
+ if (x < 1)
+ fun_l17_n980(x)
+ else
+ fun_l17_n594(x)
+ end
+end
+
+def fun_l16_n428(x)
+ if (x < 1)
+ fun_l17_n210(x)
+ else
+ fun_l17_n33(x)
+ end
+end
+
+def fun_l16_n429(x)
+ if (x < 1)
+ fun_l17_n585(x)
+ else
+ fun_l17_n997(x)
+ end
+end
+
+def fun_l16_n430(x)
+ if (x < 1)
+ fun_l17_n660(x)
+ else
+ fun_l17_n883(x)
+ end
+end
+
+def fun_l16_n431(x)
+ if (x < 1)
+ fun_l17_n613(x)
+ else
+ fun_l17_n7(x)
+ end
+end
+
+def fun_l16_n432(x)
+ if (x < 1)
+ fun_l17_n764(x)
+ else
+ fun_l17_n150(x)
+ end
+end
+
+def fun_l16_n433(x)
+ if (x < 1)
+ fun_l17_n582(x)
+ else
+ fun_l17_n197(x)
+ end
+end
+
+def fun_l16_n434(x)
+ if (x < 1)
+ fun_l17_n553(x)
+ else
+ fun_l17_n107(x)
+ end
+end
+
+def fun_l16_n435(x)
+ if (x < 1)
+ fun_l17_n975(x)
+ else
+ fun_l17_n865(x)
+ end
+end
+
+def fun_l16_n436(x)
+ if (x < 1)
+ fun_l17_n622(x)
+ else
+ fun_l17_n351(x)
+ end
+end
+
+def fun_l16_n437(x)
+ if (x < 1)
+ fun_l17_n681(x)
+ else
+ fun_l17_n472(x)
+ end
+end
+
+def fun_l16_n438(x)
+ if (x < 1)
+ fun_l17_n329(x)
+ else
+ fun_l17_n54(x)
+ end
+end
+
+def fun_l16_n439(x)
+ if (x < 1)
+ fun_l17_n340(x)
+ else
+ fun_l17_n567(x)
+ end
+end
+
+def fun_l16_n440(x)
+ if (x < 1)
+ fun_l17_n563(x)
+ else
+ fun_l17_n134(x)
+ end
+end
+
+def fun_l16_n441(x)
+ if (x < 1)
+ fun_l17_n194(x)
+ else
+ fun_l17_n986(x)
+ end
+end
+
+def fun_l16_n442(x)
+ if (x < 1)
+ fun_l17_n926(x)
+ else
+ fun_l17_n35(x)
+ end
+end
+
+def fun_l16_n443(x)
+ if (x < 1)
+ fun_l17_n771(x)
+ else
+ fun_l17_n383(x)
+ end
+end
+
+def fun_l16_n444(x)
+ if (x < 1)
+ fun_l17_n682(x)
+ else
+ fun_l17_n1(x)
+ end
+end
+
+def fun_l16_n445(x)
+ if (x < 1)
+ fun_l17_n633(x)
+ else
+ fun_l17_n757(x)
+ end
+end
+
+def fun_l16_n446(x)
+ if (x < 1)
+ fun_l17_n95(x)
+ else
+ fun_l17_n256(x)
+ end
+end
+
+def fun_l16_n447(x)
+ if (x < 1)
+ fun_l17_n183(x)
+ else
+ fun_l17_n214(x)
+ end
+end
+
+def fun_l16_n448(x)
+ if (x < 1)
+ fun_l17_n140(x)
+ else
+ fun_l17_n371(x)
+ end
+end
+
+def fun_l16_n449(x)
+ if (x < 1)
+ fun_l17_n188(x)
+ else
+ fun_l17_n898(x)
+ end
+end
+
+def fun_l16_n450(x)
+ if (x < 1)
+ fun_l17_n710(x)
+ else
+ fun_l17_n512(x)
+ end
+end
+
+def fun_l16_n451(x)
+ if (x < 1)
+ fun_l17_n796(x)
+ else
+ fun_l17_n56(x)
+ end
+end
+
+def fun_l16_n452(x)
+ if (x < 1)
+ fun_l17_n124(x)
+ else
+ fun_l17_n304(x)
+ end
+end
+
+def fun_l16_n453(x)
+ if (x < 1)
+ fun_l17_n150(x)
+ else
+ fun_l17_n503(x)
+ end
+end
+
+def fun_l16_n454(x)
+ if (x < 1)
+ fun_l17_n369(x)
+ else
+ fun_l17_n623(x)
+ end
+end
+
+def fun_l16_n455(x)
+ if (x < 1)
+ fun_l17_n514(x)
+ else
+ fun_l17_n672(x)
+ end
+end
+
+def fun_l16_n456(x)
+ if (x < 1)
+ fun_l17_n80(x)
+ else
+ fun_l17_n332(x)
+ end
+end
+
+def fun_l16_n457(x)
+ if (x < 1)
+ fun_l17_n80(x)
+ else
+ fun_l17_n32(x)
+ end
+end
+
+def fun_l16_n458(x)
+ if (x < 1)
+ fun_l17_n310(x)
+ else
+ fun_l17_n90(x)
+ end
+end
+
+def fun_l16_n459(x)
+ if (x < 1)
+ fun_l17_n730(x)
+ else
+ fun_l17_n170(x)
+ end
+end
+
+def fun_l16_n460(x)
+ if (x < 1)
+ fun_l17_n908(x)
+ else
+ fun_l17_n865(x)
+ end
+end
+
+def fun_l16_n461(x)
+ if (x < 1)
+ fun_l17_n399(x)
+ else
+ fun_l17_n536(x)
+ end
+end
+
+def fun_l16_n462(x)
+ if (x < 1)
+ fun_l17_n123(x)
+ else
+ fun_l17_n216(x)
+ end
+end
+
+def fun_l16_n463(x)
+ if (x < 1)
+ fun_l17_n577(x)
+ else
+ fun_l17_n757(x)
+ end
+end
+
+def fun_l16_n464(x)
+ if (x < 1)
+ fun_l17_n750(x)
+ else
+ fun_l17_n916(x)
+ end
+end
+
+def fun_l16_n465(x)
+ if (x < 1)
+ fun_l17_n621(x)
+ else
+ fun_l17_n386(x)
+ end
+end
+
+def fun_l16_n466(x)
+ if (x < 1)
+ fun_l17_n904(x)
+ else
+ fun_l17_n732(x)
+ end
+end
+
+def fun_l16_n467(x)
+ if (x < 1)
+ fun_l17_n625(x)
+ else
+ fun_l17_n1(x)
+ end
+end
+
+def fun_l16_n468(x)
+ if (x < 1)
+ fun_l17_n762(x)
+ else
+ fun_l17_n373(x)
+ end
+end
+
+def fun_l16_n469(x)
+ if (x < 1)
+ fun_l17_n816(x)
+ else
+ fun_l17_n490(x)
+ end
+end
+
+def fun_l16_n470(x)
+ if (x < 1)
+ fun_l17_n908(x)
+ else
+ fun_l17_n701(x)
+ end
+end
+
+def fun_l16_n471(x)
+ if (x < 1)
+ fun_l17_n690(x)
+ else
+ fun_l17_n374(x)
+ end
+end
+
+def fun_l16_n472(x)
+ if (x < 1)
+ fun_l17_n753(x)
+ else
+ fun_l17_n625(x)
+ end
+end
+
+def fun_l16_n473(x)
+ if (x < 1)
+ fun_l17_n602(x)
+ else
+ fun_l17_n947(x)
+ end
+end
+
+def fun_l16_n474(x)
+ if (x < 1)
+ fun_l17_n565(x)
+ else
+ fun_l17_n320(x)
+ end
+end
+
+def fun_l16_n475(x)
+ if (x < 1)
+ fun_l17_n990(x)
+ else
+ fun_l17_n431(x)
+ end
+end
+
+def fun_l16_n476(x)
+ if (x < 1)
+ fun_l17_n135(x)
+ else
+ fun_l17_n506(x)
+ end
+end
+
+def fun_l16_n477(x)
+ if (x < 1)
+ fun_l17_n57(x)
+ else
+ fun_l17_n944(x)
+ end
+end
+
+def fun_l16_n478(x)
+ if (x < 1)
+ fun_l17_n877(x)
+ else
+ fun_l17_n28(x)
+ end
+end
+
+def fun_l16_n479(x)
+ if (x < 1)
+ fun_l17_n132(x)
+ else
+ fun_l17_n280(x)
+ end
+end
+
+def fun_l16_n480(x)
+ if (x < 1)
+ fun_l17_n514(x)
+ else
+ fun_l17_n51(x)
+ end
+end
+
+def fun_l16_n481(x)
+ if (x < 1)
+ fun_l17_n55(x)
+ else
+ fun_l17_n366(x)
+ end
+end
+
+def fun_l16_n482(x)
+ if (x < 1)
+ fun_l17_n59(x)
+ else
+ fun_l17_n810(x)
+ end
+end
+
+def fun_l16_n483(x)
+ if (x < 1)
+ fun_l17_n965(x)
+ else
+ fun_l17_n55(x)
+ end
+end
+
+def fun_l16_n484(x)
+ if (x < 1)
+ fun_l17_n813(x)
+ else
+ fun_l17_n408(x)
+ end
+end
+
+def fun_l16_n485(x)
+ if (x < 1)
+ fun_l17_n190(x)
+ else
+ fun_l17_n126(x)
+ end
+end
+
+def fun_l16_n486(x)
+ if (x < 1)
+ fun_l17_n479(x)
+ else
+ fun_l17_n964(x)
+ end
+end
+
+def fun_l16_n487(x)
+ if (x < 1)
+ fun_l17_n267(x)
+ else
+ fun_l17_n867(x)
+ end
+end
+
+def fun_l16_n488(x)
+ if (x < 1)
+ fun_l17_n787(x)
+ else
+ fun_l17_n34(x)
+ end
+end
+
+def fun_l16_n489(x)
+ if (x < 1)
+ fun_l17_n223(x)
+ else
+ fun_l17_n568(x)
+ end
+end
+
+def fun_l16_n490(x)
+ if (x < 1)
+ fun_l17_n773(x)
+ else
+ fun_l17_n11(x)
+ end
+end
+
+def fun_l16_n491(x)
+ if (x < 1)
+ fun_l17_n906(x)
+ else
+ fun_l17_n146(x)
+ end
+end
+
+def fun_l16_n492(x)
+ if (x < 1)
+ fun_l17_n221(x)
+ else
+ fun_l17_n136(x)
+ end
+end
+
+def fun_l16_n493(x)
+ if (x < 1)
+ fun_l17_n40(x)
+ else
+ fun_l17_n599(x)
+ end
+end
+
+def fun_l16_n494(x)
+ if (x < 1)
+ fun_l17_n494(x)
+ else
+ fun_l17_n591(x)
+ end
+end
+
+def fun_l16_n495(x)
+ if (x < 1)
+ fun_l17_n237(x)
+ else
+ fun_l17_n149(x)
+ end
+end
+
+def fun_l16_n496(x)
+ if (x < 1)
+ fun_l17_n501(x)
+ else
+ fun_l17_n681(x)
+ end
+end
+
+def fun_l16_n497(x)
+ if (x < 1)
+ fun_l17_n141(x)
+ else
+ fun_l17_n226(x)
+ end
+end
+
+def fun_l16_n498(x)
+ if (x < 1)
+ fun_l17_n868(x)
+ else
+ fun_l17_n837(x)
+ end
+end
+
+def fun_l16_n499(x)
+ if (x < 1)
+ fun_l17_n921(x)
+ else
+ fun_l17_n806(x)
+ end
+end
+
+def fun_l16_n500(x)
+ if (x < 1)
+ fun_l17_n117(x)
+ else
+ fun_l17_n835(x)
+ end
+end
+
+def fun_l16_n501(x)
+ if (x < 1)
+ fun_l17_n872(x)
+ else
+ fun_l17_n567(x)
+ end
+end
+
+def fun_l16_n502(x)
+ if (x < 1)
+ fun_l17_n787(x)
+ else
+ fun_l17_n785(x)
+ end
+end
+
+def fun_l16_n503(x)
+ if (x < 1)
+ fun_l17_n827(x)
+ else
+ fun_l17_n388(x)
+ end
+end
+
+def fun_l16_n504(x)
+ if (x < 1)
+ fun_l17_n328(x)
+ else
+ fun_l17_n849(x)
+ end
+end
+
+def fun_l16_n505(x)
+ if (x < 1)
+ fun_l17_n348(x)
+ else
+ fun_l17_n580(x)
+ end
+end
+
+def fun_l16_n506(x)
+ if (x < 1)
+ fun_l17_n408(x)
+ else
+ fun_l17_n236(x)
+ end
+end
+
+def fun_l16_n507(x)
+ if (x < 1)
+ fun_l17_n959(x)
+ else
+ fun_l17_n739(x)
+ end
+end
+
+def fun_l16_n508(x)
+ if (x < 1)
+ fun_l17_n496(x)
+ else
+ fun_l17_n774(x)
+ end
+end
+
+def fun_l16_n509(x)
+ if (x < 1)
+ fun_l17_n639(x)
+ else
+ fun_l17_n147(x)
+ end
+end
+
+def fun_l16_n510(x)
+ if (x < 1)
+ fun_l17_n910(x)
+ else
+ fun_l17_n697(x)
+ end
+end
+
+def fun_l16_n511(x)
+ if (x < 1)
+ fun_l17_n239(x)
+ else
+ fun_l17_n691(x)
+ end
+end
+
+def fun_l16_n512(x)
+ if (x < 1)
+ fun_l17_n923(x)
+ else
+ fun_l17_n735(x)
+ end
+end
+
+def fun_l16_n513(x)
+ if (x < 1)
+ fun_l17_n911(x)
+ else
+ fun_l17_n372(x)
+ end
+end
+
+def fun_l16_n514(x)
+ if (x < 1)
+ fun_l17_n706(x)
+ else
+ fun_l17_n27(x)
+ end
+end
+
+def fun_l16_n515(x)
+ if (x < 1)
+ fun_l17_n788(x)
+ else
+ fun_l17_n670(x)
+ end
+end
+
+def fun_l16_n516(x)
+ if (x < 1)
+ fun_l17_n507(x)
+ else
+ fun_l17_n330(x)
+ end
+end
+
+def fun_l16_n517(x)
+ if (x < 1)
+ fun_l17_n398(x)
+ else
+ fun_l17_n997(x)
+ end
+end
+
+def fun_l16_n518(x)
+ if (x < 1)
+ fun_l17_n675(x)
+ else
+ fun_l17_n383(x)
+ end
+end
+
+def fun_l16_n519(x)
+ if (x < 1)
+ fun_l17_n193(x)
+ else
+ fun_l17_n611(x)
+ end
+end
+
+def fun_l16_n520(x)
+ if (x < 1)
+ fun_l17_n884(x)
+ else
+ fun_l17_n200(x)
+ end
+end
+
+def fun_l16_n521(x)
+ if (x < 1)
+ fun_l17_n574(x)
+ else
+ fun_l17_n192(x)
+ end
+end
+
+def fun_l16_n522(x)
+ if (x < 1)
+ fun_l17_n883(x)
+ else
+ fun_l17_n399(x)
+ end
+end
+
+def fun_l16_n523(x)
+ if (x < 1)
+ fun_l17_n516(x)
+ else
+ fun_l17_n592(x)
+ end
+end
+
+def fun_l16_n524(x)
+ if (x < 1)
+ fun_l17_n653(x)
+ else
+ fun_l17_n355(x)
+ end
+end
+
+def fun_l16_n525(x)
+ if (x < 1)
+ fun_l17_n872(x)
+ else
+ fun_l17_n714(x)
+ end
+end
+
+def fun_l16_n526(x)
+ if (x < 1)
+ fun_l17_n891(x)
+ else
+ fun_l17_n70(x)
+ end
+end
+
+def fun_l16_n527(x)
+ if (x < 1)
+ fun_l17_n46(x)
+ else
+ fun_l17_n591(x)
+ end
+end
+
+def fun_l16_n528(x)
+ if (x < 1)
+ fun_l17_n969(x)
+ else
+ fun_l17_n289(x)
+ end
+end
+
+def fun_l16_n529(x)
+ if (x < 1)
+ fun_l17_n713(x)
+ else
+ fun_l17_n775(x)
+ end
+end
+
+def fun_l16_n530(x)
+ if (x < 1)
+ fun_l17_n374(x)
+ else
+ fun_l17_n708(x)
+ end
+end
+
+def fun_l16_n531(x)
+ if (x < 1)
+ fun_l17_n996(x)
+ else
+ fun_l17_n764(x)
+ end
+end
+
+def fun_l16_n532(x)
+ if (x < 1)
+ fun_l17_n314(x)
+ else
+ fun_l17_n445(x)
+ end
+end
+
+def fun_l16_n533(x)
+ if (x < 1)
+ fun_l17_n951(x)
+ else
+ fun_l17_n912(x)
+ end
+end
+
+def fun_l16_n534(x)
+ if (x < 1)
+ fun_l17_n760(x)
+ else
+ fun_l17_n445(x)
+ end
+end
+
+def fun_l16_n535(x)
+ if (x < 1)
+ fun_l17_n310(x)
+ else
+ fun_l17_n16(x)
+ end
+end
+
+def fun_l16_n536(x)
+ if (x < 1)
+ fun_l17_n254(x)
+ else
+ fun_l17_n693(x)
+ end
+end
+
+def fun_l16_n537(x)
+ if (x < 1)
+ fun_l17_n631(x)
+ else
+ fun_l17_n934(x)
+ end
+end
+
+def fun_l16_n538(x)
+ if (x < 1)
+ fun_l17_n944(x)
+ else
+ fun_l17_n922(x)
+ end
+end
+
+def fun_l16_n539(x)
+ if (x < 1)
+ fun_l17_n263(x)
+ else
+ fun_l17_n796(x)
+ end
+end
+
+def fun_l16_n540(x)
+ if (x < 1)
+ fun_l17_n928(x)
+ else
+ fun_l17_n604(x)
+ end
+end
+
+def fun_l16_n541(x)
+ if (x < 1)
+ fun_l17_n678(x)
+ else
+ fun_l17_n880(x)
+ end
+end
+
+def fun_l16_n542(x)
+ if (x < 1)
+ fun_l17_n286(x)
+ else
+ fun_l17_n123(x)
+ end
+end
+
+def fun_l16_n543(x)
+ if (x < 1)
+ fun_l17_n604(x)
+ else
+ fun_l17_n57(x)
+ end
+end
+
+def fun_l16_n544(x)
+ if (x < 1)
+ fun_l17_n204(x)
+ else
+ fun_l17_n950(x)
+ end
+end
+
+def fun_l16_n545(x)
+ if (x < 1)
+ fun_l17_n60(x)
+ else
+ fun_l17_n667(x)
+ end
+end
+
+def fun_l16_n546(x)
+ if (x < 1)
+ fun_l17_n472(x)
+ else
+ fun_l17_n818(x)
+ end
+end
+
+def fun_l16_n547(x)
+ if (x < 1)
+ fun_l17_n515(x)
+ else
+ fun_l17_n180(x)
+ end
+end
+
+def fun_l16_n548(x)
+ if (x < 1)
+ fun_l17_n443(x)
+ else
+ fun_l17_n159(x)
+ end
+end
+
+def fun_l16_n549(x)
+ if (x < 1)
+ fun_l17_n820(x)
+ else
+ fun_l17_n468(x)
+ end
+end
+
+def fun_l16_n550(x)
+ if (x < 1)
+ fun_l17_n938(x)
+ else
+ fun_l17_n307(x)
+ end
+end
+
+def fun_l16_n551(x)
+ if (x < 1)
+ fun_l17_n350(x)
+ else
+ fun_l17_n177(x)
+ end
+end
+
+def fun_l16_n552(x)
+ if (x < 1)
+ fun_l17_n761(x)
+ else
+ fun_l17_n35(x)
+ end
+end
+
+def fun_l16_n553(x)
+ if (x < 1)
+ fun_l17_n189(x)
+ else
+ fun_l17_n991(x)
+ end
+end
+
+def fun_l16_n554(x)
+ if (x < 1)
+ fun_l17_n234(x)
+ else
+ fun_l17_n721(x)
+ end
+end
+
+def fun_l16_n555(x)
+ if (x < 1)
+ fun_l17_n42(x)
+ else
+ fun_l17_n273(x)
+ end
+end
+
+def fun_l16_n556(x)
+ if (x < 1)
+ fun_l17_n261(x)
+ else
+ fun_l17_n328(x)
+ end
+end
+
+def fun_l16_n557(x)
+ if (x < 1)
+ fun_l17_n28(x)
+ else
+ fun_l17_n403(x)
+ end
+end
+
+def fun_l16_n558(x)
+ if (x < 1)
+ fun_l17_n766(x)
+ else
+ fun_l17_n363(x)
+ end
+end
+
+def fun_l16_n559(x)
+ if (x < 1)
+ fun_l17_n35(x)
+ else
+ fun_l17_n648(x)
+ end
+end
+
+def fun_l16_n560(x)
+ if (x < 1)
+ fun_l17_n288(x)
+ else
+ fun_l17_n684(x)
+ end
+end
+
+def fun_l16_n561(x)
+ if (x < 1)
+ fun_l17_n529(x)
+ else
+ fun_l17_n908(x)
+ end
+end
+
+def fun_l16_n562(x)
+ if (x < 1)
+ fun_l17_n244(x)
+ else
+ fun_l17_n342(x)
+ end
+end
+
+def fun_l16_n563(x)
+ if (x < 1)
+ fun_l17_n535(x)
+ else
+ fun_l17_n750(x)
+ end
+end
+
+def fun_l16_n564(x)
+ if (x < 1)
+ fun_l17_n761(x)
+ else
+ fun_l17_n106(x)
+ end
+end
+
+def fun_l16_n565(x)
+ if (x < 1)
+ fun_l17_n236(x)
+ else
+ fun_l17_n95(x)
+ end
+end
+
+def fun_l16_n566(x)
+ if (x < 1)
+ fun_l17_n356(x)
+ else
+ fun_l17_n129(x)
+ end
+end
+
+def fun_l16_n567(x)
+ if (x < 1)
+ fun_l17_n297(x)
+ else
+ fun_l17_n247(x)
+ end
+end
+
+def fun_l16_n568(x)
+ if (x < 1)
+ fun_l17_n735(x)
+ else
+ fun_l17_n781(x)
+ end
+end
+
+def fun_l16_n569(x)
+ if (x < 1)
+ fun_l17_n650(x)
+ else
+ fun_l17_n377(x)
+ end
+end
+
+def fun_l16_n570(x)
+ if (x < 1)
+ fun_l17_n872(x)
+ else
+ fun_l17_n52(x)
+ end
+end
+
+def fun_l16_n571(x)
+ if (x < 1)
+ fun_l17_n970(x)
+ else
+ fun_l17_n719(x)
+ end
+end
+
+def fun_l16_n572(x)
+ if (x < 1)
+ fun_l17_n380(x)
+ else
+ fun_l17_n121(x)
+ end
+end
+
+def fun_l16_n573(x)
+ if (x < 1)
+ fun_l17_n190(x)
+ else
+ fun_l17_n675(x)
+ end
+end
+
+def fun_l16_n574(x)
+ if (x < 1)
+ fun_l17_n269(x)
+ else
+ fun_l17_n362(x)
+ end
+end
+
+def fun_l16_n575(x)
+ if (x < 1)
+ fun_l17_n480(x)
+ else
+ fun_l17_n228(x)
+ end
+end
+
+def fun_l16_n576(x)
+ if (x < 1)
+ fun_l17_n791(x)
+ else
+ fun_l17_n45(x)
+ end
+end
+
+def fun_l16_n577(x)
+ if (x < 1)
+ fun_l17_n403(x)
+ else
+ fun_l17_n887(x)
+ end
+end
+
+def fun_l16_n578(x)
+ if (x < 1)
+ fun_l17_n139(x)
+ else
+ fun_l17_n446(x)
+ end
+end
+
+def fun_l16_n579(x)
+ if (x < 1)
+ fun_l17_n472(x)
+ else
+ fun_l17_n869(x)
+ end
+end
+
+def fun_l16_n580(x)
+ if (x < 1)
+ fun_l17_n738(x)
+ else
+ fun_l17_n298(x)
+ end
+end
+
+def fun_l16_n581(x)
+ if (x < 1)
+ fun_l17_n822(x)
+ else
+ fun_l17_n859(x)
+ end
+end
+
+def fun_l16_n582(x)
+ if (x < 1)
+ fun_l17_n768(x)
+ else
+ fun_l17_n814(x)
+ end
+end
+
+def fun_l16_n583(x)
+ if (x < 1)
+ fun_l17_n892(x)
+ else
+ fun_l17_n821(x)
+ end
+end
+
+def fun_l16_n584(x)
+ if (x < 1)
+ fun_l17_n234(x)
+ else
+ fun_l17_n276(x)
+ end
+end
+
+def fun_l16_n585(x)
+ if (x < 1)
+ fun_l17_n162(x)
+ else
+ fun_l17_n873(x)
+ end
+end
+
+def fun_l16_n586(x)
+ if (x < 1)
+ fun_l17_n932(x)
+ else
+ fun_l17_n227(x)
+ end
+end
+
+def fun_l16_n587(x)
+ if (x < 1)
+ fun_l17_n105(x)
+ else
+ fun_l17_n620(x)
+ end
+end
+
+def fun_l16_n588(x)
+ if (x < 1)
+ fun_l17_n137(x)
+ else
+ fun_l17_n941(x)
+ end
+end
+
+def fun_l16_n589(x)
+ if (x < 1)
+ fun_l17_n936(x)
+ else
+ fun_l17_n877(x)
+ end
+end
+
+def fun_l16_n590(x)
+ if (x < 1)
+ fun_l17_n280(x)
+ else
+ fun_l17_n711(x)
+ end
+end
+
+def fun_l16_n591(x)
+ if (x < 1)
+ fun_l17_n968(x)
+ else
+ fun_l17_n695(x)
+ end
+end
+
+def fun_l16_n592(x)
+ if (x < 1)
+ fun_l17_n774(x)
+ else
+ fun_l17_n674(x)
+ end
+end
+
+def fun_l16_n593(x)
+ if (x < 1)
+ fun_l17_n421(x)
+ else
+ fun_l17_n516(x)
+ end
+end
+
+def fun_l16_n594(x)
+ if (x < 1)
+ fun_l17_n830(x)
+ else
+ fun_l17_n852(x)
+ end
+end
+
+def fun_l16_n595(x)
+ if (x < 1)
+ fun_l17_n659(x)
+ else
+ fun_l17_n114(x)
+ end
+end
+
+def fun_l16_n596(x)
+ if (x < 1)
+ fun_l17_n411(x)
+ else
+ fun_l17_n217(x)
+ end
+end
+
+def fun_l16_n597(x)
+ if (x < 1)
+ fun_l17_n506(x)
+ else
+ fun_l17_n721(x)
+ end
+end
+
+def fun_l16_n598(x)
+ if (x < 1)
+ fun_l17_n979(x)
+ else
+ fun_l17_n579(x)
+ end
+end
+
+def fun_l16_n599(x)
+ if (x < 1)
+ fun_l17_n423(x)
+ else
+ fun_l17_n765(x)
+ end
+end
+
+def fun_l16_n600(x)
+ if (x < 1)
+ fun_l17_n138(x)
+ else
+ fun_l17_n878(x)
+ end
+end
+
+def fun_l16_n601(x)
+ if (x < 1)
+ fun_l17_n616(x)
+ else
+ fun_l17_n531(x)
+ end
+end
+
+def fun_l16_n602(x)
+ if (x < 1)
+ fun_l17_n737(x)
+ else
+ fun_l17_n936(x)
+ end
+end
+
+def fun_l16_n603(x)
+ if (x < 1)
+ fun_l17_n106(x)
+ else
+ fun_l17_n147(x)
+ end
+end
+
+def fun_l16_n604(x)
+ if (x < 1)
+ fun_l17_n562(x)
+ else
+ fun_l17_n852(x)
+ end
+end
+
+def fun_l16_n605(x)
+ if (x < 1)
+ fun_l17_n473(x)
+ else
+ fun_l17_n771(x)
+ end
+end
+
+def fun_l16_n606(x)
+ if (x < 1)
+ fun_l17_n778(x)
+ else
+ fun_l17_n463(x)
+ end
+end
+
+def fun_l16_n607(x)
+ if (x < 1)
+ fun_l17_n35(x)
+ else
+ fun_l17_n341(x)
+ end
+end
+
+def fun_l16_n608(x)
+ if (x < 1)
+ fun_l17_n268(x)
+ else
+ fun_l17_n659(x)
+ end
+end
+
+def fun_l16_n609(x)
+ if (x < 1)
+ fun_l17_n734(x)
+ else
+ fun_l17_n174(x)
+ end
+end
+
+def fun_l16_n610(x)
+ if (x < 1)
+ fun_l17_n815(x)
+ else
+ fun_l17_n798(x)
+ end
+end
+
+def fun_l16_n611(x)
+ if (x < 1)
+ fun_l17_n251(x)
+ else
+ fun_l17_n694(x)
+ end
+end
+
+def fun_l16_n612(x)
+ if (x < 1)
+ fun_l17_n597(x)
+ else
+ fun_l17_n245(x)
+ end
+end
+
+def fun_l16_n613(x)
+ if (x < 1)
+ fun_l17_n990(x)
+ else
+ fun_l17_n58(x)
+ end
+end
+
+def fun_l16_n614(x)
+ if (x < 1)
+ fun_l17_n877(x)
+ else
+ fun_l17_n13(x)
+ end
+end
+
+def fun_l16_n615(x)
+ if (x < 1)
+ fun_l17_n7(x)
+ else
+ fun_l17_n787(x)
+ end
+end
+
+def fun_l16_n616(x)
+ if (x < 1)
+ fun_l17_n372(x)
+ else
+ fun_l17_n643(x)
+ end
+end
+
+def fun_l16_n617(x)
+ if (x < 1)
+ fun_l17_n592(x)
+ else
+ fun_l17_n508(x)
+ end
+end
+
+def fun_l16_n618(x)
+ if (x < 1)
+ fun_l17_n928(x)
+ else
+ fun_l17_n923(x)
+ end
+end
+
+def fun_l16_n619(x)
+ if (x < 1)
+ fun_l17_n407(x)
+ else
+ fun_l17_n885(x)
+ end
+end
+
+def fun_l16_n620(x)
+ if (x < 1)
+ fun_l17_n4(x)
+ else
+ fun_l17_n532(x)
+ end
+end
+
+def fun_l16_n621(x)
+ if (x < 1)
+ fun_l17_n791(x)
+ else
+ fun_l17_n141(x)
+ end
+end
+
+def fun_l16_n622(x)
+ if (x < 1)
+ fun_l17_n529(x)
+ else
+ fun_l17_n140(x)
+ end
+end
+
+def fun_l16_n623(x)
+ if (x < 1)
+ fun_l17_n713(x)
+ else
+ fun_l17_n867(x)
+ end
+end
+
+def fun_l16_n624(x)
+ if (x < 1)
+ fun_l17_n148(x)
+ else
+ fun_l17_n195(x)
+ end
+end
+
+def fun_l16_n625(x)
+ if (x < 1)
+ fun_l17_n287(x)
+ else
+ fun_l17_n662(x)
+ end
+end
+
+def fun_l16_n626(x)
+ if (x < 1)
+ fun_l17_n678(x)
+ else
+ fun_l17_n262(x)
+ end
+end
+
+def fun_l16_n627(x)
+ if (x < 1)
+ fun_l17_n217(x)
+ else
+ fun_l17_n612(x)
+ end
+end
+
+def fun_l16_n628(x)
+ if (x < 1)
+ fun_l17_n826(x)
+ else
+ fun_l17_n164(x)
+ end
+end
+
+def fun_l16_n629(x)
+ if (x < 1)
+ fun_l17_n360(x)
+ else
+ fun_l17_n221(x)
+ end
+end
+
+def fun_l16_n630(x)
+ if (x < 1)
+ fun_l17_n842(x)
+ else
+ fun_l17_n362(x)
+ end
+end
+
+def fun_l16_n631(x)
+ if (x < 1)
+ fun_l17_n53(x)
+ else
+ fun_l17_n216(x)
+ end
+end
+
+def fun_l16_n632(x)
+ if (x < 1)
+ fun_l17_n628(x)
+ else
+ fun_l17_n150(x)
+ end
+end
+
+def fun_l16_n633(x)
+ if (x < 1)
+ fun_l17_n206(x)
+ else
+ fun_l17_n789(x)
+ end
+end
+
+def fun_l16_n634(x)
+ if (x < 1)
+ fun_l17_n26(x)
+ else
+ fun_l17_n376(x)
+ end
+end
+
+def fun_l16_n635(x)
+ if (x < 1)
+ fun_l17_n614(x)
+ else
+ fun_l17_n109(x)
+ end
+end
+
+def fun_l16_n636(x)
+ if (x < 1)
+ fun_l17_n626(x)
+ else
+ fun_l17_n456(x)
+ end
+end
+
+def fun_l16_n637(x)
+ if (x < 1)
+ fun_l17_n836(x)
+ else
+ fun_l17_n602(x)
+ end
+end
+
+def fun_l16_n638(x)
+ if (x < 1)
+ fun_l17_n793(x)
+ else
+ fun_l17_n791(x)
+ end
+end
+
+def fun_l16_n639(x)
+ if (x < 1)
+ fun_l17_n689(x)
+ else
+ fun_l17_n714(x)
+ end
+end
+
+def fun_l16_n640(x)
+ if (x < 1)
+ fun_l17_n587(x)
+ else
+ fun_l17_n203(x)
+ end
+end
+
+def fun_l16_n641(x)
+ if (x < 1)
+ fun_l17_n686(x)
+ else
+ fun_l17_n297(x)
+ end
+end
+
+def fun_l16_n642(x)
+ if (x < 1)
+ fun_l17_n394(x)
+ else
+ fun_l17_n564(x)
+ end
+end
+
+def fun_l16_n643(x)
+ if (x < 1)
+ fun_l17_n669(x)
+ else
+ fun_l17_n250(x)
+ end
+end
+
+def fun_l16_n644(x)
+ if (x < 1)
+ fun_l17_n407(x)
+ else
+ fun_l17_n631(x)
+ end
+end
+
+def fun_l16_n645(x)
+ if (x < 1)
+ fun_l17_n928(x)
+ else
+ fun_l17_n856(x)
+ end
+end
+
+def fun_l16_n646(x)
+ if (x < 1)
+ fun_l17_n344(x)
+ else
+ fun_l17_n529(x)
+ end
+end
+
+def fun_l16_n647(x)
+ if (x < 1)
+ fun_l17_n540(x)
+ else
+ fun_l17_n468(x)
+ end
+end
+
+def fun_l16_n648(x)
+ if (x < 1)
+ fun_l17_n831(x)
+ else
+ fun_l17_n350(x)
+ end
+end
+
+def fun_l16_n649(x)
+ if (x < 1)
+ fun_l17_n154(x)
+ else
+ fun_l17_n587(x)
+ end
+end
+
+def fun_l16_n650(x)
+ if (x < 1)
+ fun_l17_n379(x)
+ else
+ fun_l17_n421(x)
+ end
+end
+
+def fun_l16_n651(x)
+ if (x < 1)
+ fun_l17_n839(x)
+ else
+ fun_l17_n782(x)
+ end
+end
+
+def fun_l16_n652(x)
+ if (x < 1)
+ fun_l17_n408(x)
+ else
+ fun_l17_n923(x)
+ end
+end
+
+def fun_l16_n653(x)
+ if (x < 1)
+ fun_l17_n51(x)
+ else
+ fun_l17_n317(x)
+ end
+end
+
+def fun_l16_n654(x)
+ if (x < 1)
+ fun_l17_n635(x)
+ else
+ fun_l17_n39(x)
+ end
+end
+
+def fun_l16_n655(x)
+ if (x < 1)
+ fun_l17_n921(x)
+ else
+ fun_l17_n641(x)
+ end
+end
+
+def fun_l16_n656(x)
+ if (x < 1)
+ fun_l17_n615(x)
+ else
+ fun_l17_n118(x)
+ end
+end
+
+def fun_l16_n657(x)
+ if (x < 1)
+ fun_l17_n673(x)
+ else
+ fun_l17_n842(x)
+ end
+end
+
+def fun_l16_n658(x)
+ if (x < 1)
+ fun_l17_n743(x)
+ else
+ fun_l17_n594(x)
+ end
+end
+
+def fun_l16_n659(x)
+ if (x < 1)
+ fun_l17_n85(x)
+ else
+ fun_l17_n787(x)
+ end
+end
+
+def fun_l16_n660(x)
+ if (x < 1)
+ fun_l17_n363(x)
+ else
+ fun_l17_n830(x)
+ end
+end
+
+def fun_l16_n661(x)
+ if (x < 1)
+ fun_l17_n897(x)
+ else
+ fun_l17_n989(x)
+ end
+end
+
+def fun_l16_n662(x)
+ if (x < 1)
+ fun_l17_n644(x)
+ else
+ fun_l17_n924(x)
+ end
+end
+
+def fun_l16_n663(x)
+ if (x < 1)
+ fun_l17_n812(x)
+ else
+ fun_l17_n159(x)
+ end
+end
+
+def fun_l16_n664(x)
+ if (x < 1)
+ fun_l17_n937(x)
+ else
+ fun_l17_n720(x)
+ end
+end
+
+def fun_l16_n665(x)
+ if (x < 1)
+ fun_l17_n732(x)
+ else
+ fun_l17_n516(x)
+ end
+end
+
+def fun_l16_n666(x)
+ if (x < 1)
+ fun_l17_n399(x)
+ else
+ fun_l17_n728(x)
+ end
+end
+
+def fun_l16_n667(x)
+ if (x < 1)
+ fun_l17_n673(x)
+ else
+ fun_l17_n735(x)
+ end
+end
+
+def fun_l16_n668(x)
+ if (x < 1)
+ fun_l17_n321(x)
+ else
+ fun_l17_n850(x)
+ end
+end
+
+def fun_l16_n669(x)
+ if (x < 1)
+ fun_l17_n873(x)
+ else
+ fun_l17_n701(x)
+ end
+end
+
+def fun_l16_n670(x)
+ if (x < 1)
+ fun_l17_n683(x)
+ else
+ fun_l17_n903(x)
+ end
+end
+
+def fun_l16_n671(x)
+ if (x < 1)
+ fun_l17_n440(x)
+ else
+ fun_l17_n178(x)
+ end
+end
+
+def fun_l16_n672(x)
+ if (x < 1)
+ fun_l17_n619(x)
+ else
+ fun_l17_n785(x)
+ end
+end
+
+def fun_l16_n673(x)
+ if (x < 1)
+ fun_l17_n185(x)
+ else
+ fun_l17_n794(x)
+ end
+end
+
+def fun_l16_n674(x)
+ if (x < 1)
+ fun_l17_n543(x)
+ else
+ fun_l17_n161(x)
+ end
+end
+
+def fun_l16_n675(x)
+ if (x < 1)
+ fun_l17_n898(x)
+ else
+ fun_l17_n590(x)
+ end
+end
+
+def fun_l16_n676(x)
+ if (x < 1)
+ fun_l17_n471(x)
+ else
+ fun_l17_n66(x)
+ end
+end
+
+def fun_l16_n677(x)
+ if (x < 1)
+ fun_l17_n764(x)
+ else
+ fun_l17_n163(x)
+ end
+end
+
+def fun_l16_n678(x)
+ if (x < 1)
+ fun_l17_n290(x)
+ else
+ fun_l17_n353(x)
+ end
+end
+
+def fun_l16_n679(x)
+ if (x < 1)
+ fun_l17_n851(x)
+ else
+ fun_l17_n7(x)
+ end
+end
+
+def fun_l16_n680(x)
+ if (x < 1)
+ fun_l17_n741(x)
+ else
+ fun_l17_n180(x)
+ end
+end
+
+def fun_l16_n681(x)
+ if (x < 1)
+ fun_l17_n887(x)
+ else
+ fun_l17_n258(x)
+ end
+end
+
+def fun_l16_n682(x)
+ if (x < 1)
+ fun_l17_n536(x)
+ else
+ fun_l17_n84(x)
+ end
+end
+
+def fun_l16_n683(x)
+ if (x < 1)
+ fun_l17_n447(x)
+ else
+ fun_l17_n455(x)
+ end
+end
+
+def fun_l16_n684(x)
+ if (x < 1)
+ fun_l17_n23(x)
+ else
+ fun_l17_n47(x)
+ end
+end
+
+def fun_l16_n685(x)
+ if (x < 1)
+ fun_l17_n983(x)
+ else
+ fun_l17_n470(x)
+ end
+end
+
+def fun_l16_n686(x)
+ if (x < 1)
+ fun_l17_n261(x)
+ else
+ fun_l17_n138(x)
+ end
+end
+
+def fun_l16_n687(x)
+ if (x < 1)
+ fun_l17_n791(x)
+ else
+ fun_l17_n474(x)
+ end
+end
+
+def fun_l16_n688(x)
+ if (x < 1)
+ fun_l17_n148(x)
+ else
+ fun_l17_n317(x)
+ end
+end
+
+def fun_l16_n689(x)
+ if (x < 1)
+ fun_l17_n107(x)
+ else
+ fun_l17_n529(x)
+ end
+end
+
+def fun_l16_n690(x)
+ if (x < 1)
+ fun_l17_n310(x)
+ else
+ fun_l17_n394(x)
+ end
+end
+
+def fun_l16_n691(x)
+ if (x < 1)
+ fun_l17_n193(x)
+ else
+ fun_l17_n348(x)
+ end
+end
+
+def fun_l16_n692(x)
+ if (x < 1)
+ fun_l17_n308(x)
+ else
+ fun_l17_n26(x)
+ end
+end
+
+def fun_l16_n693(x)
+ if (x < 1)
+ fun_l17_n502(x)
+ else
+ fun_l17_n517(x)
+ end
+end
+
+def fun_l16_n694(x)
+ if (x < 1)
+ fun_l17_n396(x)
+ else
+ fun_l17_n886(x)
+ end
+end
+
+def fun_l16_n695(x)
+ if (x < 1)
+ fun_l17_n179(x)
+ else
+ fun_l17_n35(x)
+ end
+end
+
+def fun_l16_n696(x)
+ if (x < 1)
+ fun_l17_n431(x)
+ else
+ fun_l17_n392(x)
+ end
+end
+
+def fun_l16_n697(x)
+ if (x < 1)
+ fun_l17_n778(x)
+ else
+ fun_l17_n766(x)
+ end
+end
+
+def fun_l16_n698(x)
+ if (x < 1)
+ fun_l17_n868(x)
+ else
+ fun_l17_n31(x)
+ end
+end
+
+def fun_l16_n699(x)
+ if (x < 1)
+ fun_l17_n277(x)
+ else
+ fun_l17_n649(x)
+ end
+end
+
+def fun_l16_n700(x)
+ if (x < 1)
+ fun_l17_n638(x)
+ else
+ fun_l17_n411(x)
+ end
+end
+
+def fun_l16_n701(x)
+ if (x < 1)
+ fun_l17_n730(x)
+ else
+ fun_l17_n188(x)
+ end
+end
+
+def fun_l16_n702(x)
+ if (x < 1)
+ fun_l17_n530(x)
+ else
+ fun_l17_n540(x)
+ end
+end
+
+def fun_l16_n703(x)
+ if (x < 1)
+ fun_l17_n691(x)
+ else
+ fun_l17_n550(x)
+ end
+end
+
+def fun_l16_n704(x)
+ if (x < 1)
+ fun_l17_n691(x)
+ else
+ fun_l17_n25(x)
+ end
+end
+
+def fun_l16_n705(x)
+ if (x < 1)
+ fun_l17_n744(x)
+ else
+ fun_l17_n333(x)
+ end
+end
+
+def fun_l16_n706(x)
+ if (x < 1)
+ fun_l17_n845(x)
+ else
+ fun_l17_n229(x)
+ end
+end
+
+def fun_l16_n707(x)
+ if (x < 1)
+ fun_l17_n784(x)
+ else
+ fun_l17_n123(x)
+ end
+end
+
+def fun_l16_n708(x)
+ if (x < 1)
+ fun_l17_n88(x)
+ else
+ fun_l17_n961(x)
+ end
+end
+
+def fun_l16_n709(x)
+ if (x < 1)
+ fun_l17_n310(x)
+ else
+ fun_l17_n943(x)
+ end
+end
+
+def fun_l16_n710(x)
+ if (x < 1)
+ fun_l17_n265(x)
+ else
+ fun_l17_n958(x)
+ end
+end
+
+def fun_l16_n711(x)
+ if (x < 1)
+ fun_l17_n483(x)
+ else
+ fun_l17_n577(x)
+ end
+end
+
+def fun_l16_n712(x)
+ if (x < 1)
+ fun_l17_n703(x)
+ else
+ fun_l17_n625(x)
+ end
+end
+
+def fun_l16_n713(x)
+ if (x < 1)
+ fun_l17_n301(x)
+ else
+ fun_l17_n17(x)
+ end
+end
+
+def fun_l16_n714(x)
+ if (x < 1)
+ fun_l17_n455(x)
+ else
+ fun_l17_n647(x)
+ end
+end
+
+def fun_l16_n715(x)
+ if (x < 1)
+ fun_l17_n628(x)
+ else
+ fun_l17_n748(x)
+ end
+end
+
+def fun_l16_n716(x)
+ if (x < 1)
+ fun_l17_n10(x)
+ else
+ fun_l17_n632(x)
+ end
+end
+
+def fun_l16_n717(x)
+ if (x < 1)
+ fun_l17_n82(x)
+ else
+ fun_l17_n888(x)
+ end
+end
+
+def fun_l16_n718(x)
+ if (x < 1)
+ fun_l17_n234(x)
+ else
+ fun_l17_n554(x)
+ end
+end
+
+def fun_l16_n719(x)
+ if (x < 1)
+ fun_l17_n811(x)
+ else
+ fun_l17_n46(x)
+ end
+end
+
+def fun_l16_n720(x)
+ if (x < 1)
+ fun_l17_n227(x)
+ else
+ fun_l17_n89(x)
+ end
+end
+
+def fun_l16_n721(x)
+ if (x < 1)
+ fun_l17_n780(x)
+ else
+ fun_l17_n941(x)
+ end
+end
+
+def fun_l16_n722(x)
+ if (x < 1)
+ fun_l17_n877(x)
+ else
+ fun_l17_n262(x)
+ end
+end
+
+def fun_l16_n723(x)
+ if (x < 1)
+ fun_l17_n649(x)
+ else
+ fun_l17_n477(x)
+ end
+end
+
+def fun_l16_n724(x)
+ if (x < 1)
+ fun_l17_n902(x)
+ else
+ fun_l17_n315(x)
+ end
+end
+
+def fun_l16_n725(x)
+ if (x < 1)
+ fun_l17_n985(x)
+ else
+ fun_l17_n232(x)
+ end
+end
+
+def fun_l16_n726(x)
+ if (x < 1)
+ fun_l17_n5(x)
+ else
+ fun_l17_n981(x)
+ end
+end
+
+def fun_l16_n727(x)
+ if (x < 1)
+ fun_l17_n730(x)
+ else
+ fun_l17_n780(x)
+ end
+end
+
+def fun_l16_n728(x)
+ if (x < 1)
+ fun_l17_n626(x)
+ else
+ fun_l17_n272(x)
+ end
+end
+
+def fun_l16_n729(x)
+ if (x < 1)
+ fun_l17_n380(x)
+ else
+ fun_l17_n289(x)
+ end
+end
+
+def fun_l16_n730(x)
+ if (x < 1)
+ fun_l17_n711(x)
+ else
+ fun_l17_n861(x)
+ end
+end
+
+def fun_l16_n731(x)
+ if (x < 1)
+ fun_l17_n351(x)
+ else
+ fun_l17_n948(x)
+ end
+end
+
+def fun_l16_n732(x)
+ if (x < 1)
+ fun_l17_n864(x)
+ else
+ fun_l17_n60(x)
+ end
+end
+
+def fun_l16_n733(x)
+ if (x < 1)
+ fun_l17_n974(x)
+ else
+ fun_l17_n475(x)
+ end
+end
+
+def fun_l16_n734(x)
+ if (x < 1)
+ fun_l17_n855(x)
+ else
+ fun_l17_n988(x)
+ end
+end
+
+def fun_l16_n735(x)
+ if (x < 1)
+ fun_l17_n740(x)
+ else
+ fun_l17_n559(x)
+ end
+end
+
+def fun_l16_n736(x)
+ if (x < 1)
+ fun_l17_n449(x)
+ else
+ fun_l17_n580(x)
+ end
+end
+
+def fun_l16_n737(x)
+ if (x < 1)
+ fun_l17_n313(x)
+ else
+ fun_l17_n462(x)
+ end
+end
+
+def fun_l16_n738(x)
+ if (x < 1)
+ fun_l17_n177(x)
+ else
+ fun_l17_n812(x)
+ end
+end
+
+def fun_l16_n739(x)
+ if (x < 1)
+ fun_l17_n518(x)
+ else
+ fun_l17_n453(x)
+ end
+end
+
+def fun_l16_n740(x)
+ if (x < 1)
+ fun_l17_n190(x)
+ else
+ fun_l17_n722(x)
+ end
+end
+
+def fun_l16_n741(x)
+ if (x < 1)
+ fun_l17_n509(x)
+ else
+ fun_l17_n203(x)
+ end
+end
+
+def fun_l16_n742(x)
+ if (x < 1)
+ fun_l17_n901(x)
+ else
+ fun_l17_n497(x)
+ end
+end
+
+def fun_l16_n743(x)
+ if (x < 1)
+ fun_l17_n19(x)
+ else
+ fun_l17_n789(x)
+ end
+end
+
+def fun_l16_n744(x)
+ if (x < 1)
+ fun_l17_n879(x)
+ else
+ fun_l17_n554(x)
+ end
+end
+
+def fun_l16_n745(x)
+ if (x < 1)
+ fun_l17_n106(x)
+ else
+ fun_l17_n255(x)
+ end
+end
+
+def fun_l16_n746(x)
+ if (x < 1)
+ fun_l17_n942(x)
+ else
+ fun_l17_n701(x)
+ end
+end
+
+def fun_l16_n747(x)
+ if (x < 1)
+ fun_l17_n738(x)
+ else
+ fun_l17_n459(x)
+ end
+end
+
+def fun_l16_n748(x)
+ if (x < 1)
+ fun_l17_n984(x)
+ else
+ fun_l17_n501(x)
+ end
+end
+
+def fun_l16_n749(x)
+ if (x < 1)
+ fun_l17_n399(x)
+ else
+ fun_l17_n165(x)
+ end
+end
+
+def fun_l16_n750(x)
+ if (x < 1)
+ fun_l17_n956(x)
+ else
+ fun_l17_n210(x)
+ end
+end
+
+def fun_l16_n751(x)
+ if (x < 1)
+ fun_l17_n549(x)
+ else
+ fun_l17_n406(x)
+ end
+end
+
+def fun_l16_n752(x)
+ if (x < 1)
+ fun_l17_n671(x)
+ else
+ fun_l17_n809(x)
+ end
+end
+
+def fun_l16_n753(x)
+ if (x < 1)
+ fun_l17_n807(x)
+ else
+ fun_l17_n544(x)
+ end
+end
+
+def fun_l16_n754(x)
+ if (x < 1)
+ fun_l17_n150(x)
+ else
+ fun_l17_n705(x)
+ end
+end
+
+def fun_l16_n755(x)
+ if (x < 1)
+ fun_l17_n822(x)
+ else
+ fun_l17_n627(x)
+ end
+end
+
+def fun_l16_n756(x)
+ if (x < 1)
+ fun_l17_n429(x)
+ else
+ fun_l17_n598(x)
+ end
+end
+
+def fun_l16_n757(x)
+ if (x < 1)
+ fun_l17_n327(x)
+ else
+ fun_l17_n391(x)
+ end
+end
+
+def fun_l16_n758(x)
+ if (x < 1)
+ fun_l17_n335(x)
+ else
+ fun_l17_n779(x)
+ end
+end
+
+def fun_l16_n759(x)
+ if (x < 1)
+ fun_l17_n149(x)
+ else
+ fun_l17_n637(x)
+ end
+end
+
+def fun_l16_n760(x)
+ if (x < 1)
+ fun_l17_n83(x)
+ else
+ fun_l17_n616(x)
+ end
+end
+
+def fun_l16_n761(x)
+ if (x < 1)
+ fun_l17_n997(x)
+ else
+ fun_l17_n189(x)
+ end
+end
+
+def fun_l16_n762(x)
+ if (x < 1)
+ fun_l17_n779(x)
+ else
+ fun_l17_n175(x)
+ end
+end
+
+def fun_l16_n763(x)
+ if (x < 1)
+ fun_l17_n73(x)
+ else
+ fun_l17_n473(x)
+ end
+end
+
+def fun_l16_n764(x)
+ if (x < 1)
+ fun_l17_n784(x)
+ else
+ fun_l17_n415(x)
+ end
+end
+
+def fun_l16_n765(x)
+ if (x < 1)
+ fun_l17_n809(x)
+ else
+ fun_l17_n263(x)
+ end
+end
+
+def fun_l16_n766(x)
+ if (x < 1)
+ fun_l17_n114(x)
+ else
+ fun_l17_n898(x)
+ end
+end
+
+def fun_l16_n767(x)
+ if (x < 1)
+ fun_l17_n983(x)
+ else
+ fun_l17_n114(x)
+ end
+end
+
+def fun_l16_n768(x)
+ if (x < 1)
+ fun_l17_n141(x)
+ else
+ fun_l17_n492(x)
+ end
+end
+
+def fun_l16_n769(x)
+ if (x < 1)
+ fun_l17_n216(x)
+ else
+ fun_l17_n610(x)
+ end
+end
+
+def fun_l16_n770(x)
+ if (x < 1)
+ fun_l17_n797(x)
+ else
+ fun_l17_n164(x)
+ end
+end
+
+def fun_l16_n771(x)
+ if (x < 1)
+ fun_l17_n434(x)
+ else
+ fun_l17_n876(x)
+ end
+end
+
+def fun_l16_n772(x)
+ if (x < 1)
+ fun_l17_n165(x)
+ else
+ fun_l17_n646(x)
+ end
+end
+
+def fun_l16_n773(x)
+ if (x < 1)
+ fun_l17_n359(x)
+ else
+ fun_l17_n754(x)
+ end
+end
+
+def fun_l16_n774(x)
+ if (x < 1)
+ fun_l17_n314(x)
+ else
+ fun_l17_n745(x)
+ end
+end
+
+def fun_l16_n775(x)
+ if (x < 1)
+ fun_l17_n35(x)
+ else
+ fun_l17_n673(x)
+ end
+end
+
+def fun_l16_n776(x)
+ if (x < 1)
+ fun_l17_n51(x)
+ else
+ fun_l17_n708(x)
+ end
+end
+
+def fun_l16_n777(x)
+ if (x < 1)
+ fun_l17_n451(x)
+ else
+ fun_l17_n30(x)
+ end
+end
+
+def fun_l16_n778(x)
+ if (x < 1)
+ fun_l17_n821(x)
+ else
+ fun_l17_n114(x)
+ end
+end
+
+def fun_l16_n779(x)
+ if (x < 1)
+ fun_l17_n727(x)
+ else
+ fun_l17_n71(x)
+ end
+end
+
+def fun_l16_n780(x)
+ if (x < 1)
+ fun_l17_n404(x)
+ else
+ fun_l17_n42(x)
+ end
+end
+
+def fun_l16_n781(x)
+ if (x < 1)
+ fun_l17_n926(x)
+ else
+ fun_l17_n53(x)
+ end
+end
+
+def fun_l16_n782(x)
+ if (x < 1)
+ fun_l17_n499(x)
+ else
+ fun_l17_n429(x)
+ end
+end
+
+def fun_l16_n783(x)
+ if (x < 1)
+ fun_l17_n887(x)
+ else
+ fun_l17_n912(x)
+ end
+end
+
+def fun_l16_n784(x)
+ if (x < 1)
+ fun_l17_n900(x)
+ else
+ fun_l17_n163(x)
+ end
+end
+
+def fun_l16_n785(x)
+ if (x < 1)
+ fun_l17_n589(x)
+ else
+ fun_l17_n271(x)
+ end
+end
+
+def fun_l16_n786(x)
+ if (x < 1)
+ fun_l17_n732(x)
+ else
+ fun_l17_n296(x)
+ end
+end
+
+def fun_l16_n787(x)
+ if (x < 1)
+ fun_l17_n711(x)
+ else
+ fun_l17_n777(x)
+ end
+end
+
+def fun_l16_n788(x)
+ if (x < 1)
+ fun_l17_n426(x)
+ else
+ fun_l17_n291(x)
+ end
+end
+
+def fun_l16_n789(x)
+ if (x < 1)
+ fun_l17_n833(x)
+ else
+ fun_l17_n958(x)
+ end
+end
+
+def fun_l16_n790(x)
+ if (x < 1)
+ fun_l17_n680(x)
+ else
+ fun_l17_n707(x)
+ end
+end
+
+def fun_l16_n791(x)
+ if (x < 1)
+ fun_l17_n668(x)
+ else
+ fun_l17_n727(x)
+ end
+end
+
+def fun_l16_n792(x)
+ if (x < 1)
+ fun_l17_n948(x)
+ else
+ fun_l17_n160(x)
+ end
+end
+
+def fun_l16_n793(x)
+ if (x < 1)
+ fun_l17_n847(x)
+ else
+ fun_l17_n643(x)
+ end
+end
+
+def fun_l16_n794(x)
+ if (x < 1)
+ fun_l17_n89(x)
+ else
+ fun_l17_n704(x)
+ end
+end
+
+def fun_l16_n795(x)
+ if (x < 1)
+ fun_l17_n52(x)
+ else
+ fun_l17_n307(x)
+ end
+end
+
+def fun_l16_n796(x)
+ if (x < 1)
+ fun_l17_n632(x)
+ else
+ fun_l17_n839(x)
+ end
+end
+
+def fun_l16_n797(x)
+ if (x < 1)
+ fun_l17_n343(x)
+ else
+ fun_l17_n969(x)
+ end
+end
+
+def fun_l16_n798(x)
+ if (x < 1)
+ fun_l17_n850(x)
+ else
+ fun_l17_n975(x)
+ end
+end
+
+def fun_l16_n799(x)
+ if (x < 1)
+ fun_l17_n119(x)
+ else
+ fun_l17_n303(x)
+ end
+end
+
+def fun_l16_n800(x)
+ if (x < 1)
+ fun_l17_n870(x)
+ else
+ fun_l17_n4(x)
+ end
+end
+
+def fun_l16_n801(x)
+ if (x < 1)
+ fun_l17_n223(x)
+ else
+ fun_l17_n618(x)
+ end
+end
+
+def fun_l16_n802(x)
+ if (x < 1)
+ fun_l17_n183(x)
+ else
+ fun_l17_n358(x)
+ end
+end
+
+def fun_l16_n803(x)
+ if (x < 1)
+ fun_l17_n152(x)
+ else
+ fun_l17_n76(x)
+ end
+end
+
+def fun_l16_n804(x)
+ if (x < 1)
+ fun_l17_n487(x)
+ else
+ fun_l17_n475(x)
+ end
+end
+
+def fun_l16_n805(x)
+ if (x < 1)
+ fun_l17_n900(x)
+ else
+ fun_l17_n786(x)
+ end
+end
+
+def fun_l16_n806(x)
+ if (x < 1)
+ fun_l17_n881(x)
+ else
+ fun_l17_n523(x)
+ end
+end
+
+def fun_l16_n807(x)
+ if (x < 1)
+ fun_l17_n686(x)
+ else
+ fun_l17_n5(x)
+ end
+end
+
+def fun_l16_n808(x)
+ if (x < 1)
+ fun_l17_n841(x)
+ else
+ fun_l17_n73(x)
+ end
+end
+
+def fun_l16_n809(x)
+ if (x < 1)
+ fun_l17_n737(x)
+ else
+ fun_l17_n590(x)
+ end
+end
+
+def fun_l16_n810(x)
+ if (x < 1)
+ fun_l17_n252(x)
+ else
+ fun_l17_n867(x)
+ end
+end
+
+def fun_l16_n811(x)
+ if (x < 1)
+ fun_l17_n333(x)
+ else
+ fun_l17_n418(x)
+ end
+end
+
+def fun_l16_n812(x)
+ if (x < 1)
+ fun_l17_n155(x)
+ else
+ fun_l17_n104(x)
+ end
+end
+
+def fun_l16_n813(x)
+ if (x < 1)
+ fun_l17_n933(x)
+ else
+ fun_l17_n344(x)
+ end
+end
+
+def fun_l16_n814(x)
+ if (x < 1)
+ fun_l17_n107(x)
+ else
+ fun_l17_n784(x)
+ end
+end
+
+def fun_l16_n815(x)
+ if (x < 1)
+ fun_l17_n355(x)
+ else
+ fun_l17_n184(x)
+ end
+end
+
+def fun_l16_n816(x)
+ if (x < 1)
+ fun_l17_n266(x)
+ else
+ fun_l17_n315(x)
+ end
+end
+
+def fun_l16_n817(x)
+ if (x < 1)
+ fun_l17_n821(x)
+ else
+ fun_l17_n534(x)
+ end
+end
+
+def fun_l16_n818(x)
+ if (x < 1)
+ fun_l17_n126(x)
+ else
+ fun_l17_n712(x)
+ end
+end
+
+def fun_l16_n819(x)
+ if (x < 1)
+ fun_l17_n309(x)
+ else
+ fun_l17_n39(x)
+ end
+end
+
+def fun_l16_n820(x)
+ if (x < 1)
+ fun_l17_n629(x)
+ else
+ fun_l17_n689(x)
+ end
+end
+
+def fun_l16_n821(x)
+ if (x < 1)
+ fun_l17_n35(x)
+ else
+ fun_l17_n250(x)
+ end
+end
+
+def fun_l16_n822(x)
+ if (x < 1)
+ fun_l17_n276(x)
+ else
+ fun_l17_n350(x)
+ end
+end
+
+def fun_l16_n823(x)
+ if (x < 1)
+ fun_l17_n775(x)
+ else
+ fun_l17_n542(x)
+ end
+end
+
+def fun_l16_n824(x)
+ if (x < 1)
+ fun_l17_n739(x)
+ else
+ fun_l17_n441(x)
+ end
+end
+
+def fun_l16_n825(x)
+ if (x < 1)
+ fun_l17_n86(x)
+ else
+ fun_l17_n360(x)
+ end
+end
+
+def fun_l16_n826(x)
+ if (x < 1)
+ fun_l17_n196(x)
+ else
+ fun_l17_n406(x)
+ end
+end
+
+def fun_l16_n827(x)
+ if (x < 1)
+ fun_l17_n612(x)
+ else
+ fun_l17_n471(x)
+ end
+end
+
+def fun_l16_n828(x)
+ if (x < 1)
+ fun_l17_n409(x)
+ else
+ fun_l17_n572(x)
+ end
+end
+
+def fun_l16_n829(x)
+ if (x < 1)
+ fun_l17_n347(x)
+ else
+ fun_l17_n450(x)
+ end
+end
+
+def fun_l16_n830(x)
+ if (x < 1)
+ fun_l17_n75(x)
+ else
+ fun_l17_n185(x)
+ end
+end
+
+def fun_l16_n831(x)
+ if (x < 1)
+ fun_l17_n904(x)
+ else
+ fun_l17_n894(x)
+ end
+end
+
+def fun_l16_n832(x)
+ if (x < 1)
+ fun_l17_n889(x)
+ else
+ fun_l17_n651(x)
+ end
+end
+
+def fun_l16_n833(x)
+ if (x < 1)
+ fun_l17_n670(x)
+ else
+ fun_l17_n216(x)
+ end
+end
+
+def fun_l16_n834(x)
+ if (x < 1)
+ fun_l17_n212(x)
+ else
+ fun_l17_n445(x)
+ end
+end
+
+def fun_l16_n835(x)
+ if (x < 1)
+ fun_l17_n453(x)
+ else
+ fun_l17_n187(x)
+ end
+end
+
+def fun_l16_n836(x)
+ if (x < 1)
+ fun_l17_n614(x)
+ else
+ fun_l17_n203(x)
+ end
+end
+
+def fun_l16_n837(x)
+ if (x < 1)
+ fun_l17_n177(x)
+ else
+ fun_l17_n721(x)
+ end
+end
+
+def fun_l16_n838(x)
+ if (x < 1)
+ fun_l17_n910(x)
+ else
+ fun_l17_n510(x)
+ end
+end
+
+def fun_l16_n839(x)
+ if (x < 1)
+ fun_l17_n880(x)
+ else
+ fun_l17_n365(x)
+ end
+end
+
+def fun_l16_n840(x)
+ if (x < 1)
+ fun_l17_n336(x)
+ else
+ fun_l17_n483(x)
+ end
+end
+
+def fun_l16_n841(x)
+ if (x < 1)
+ fun_l17_n83(x)
+ else
+ fun_l17_n947(x)
+ end
+end
+
+def fun_l16_n842(x)
+ if (x < 1)
+ fun_l17_n723(x)
+ else
+ fun_l17_n209(x)
+ end
+end
+
+def fun_l16_n843(x)
+ if (x < 1)
+ fun_l17_n432(x)
+ else
+ fun_l17_n664(x)
+ end
+end
+
+def fun_l16_n844(x)
+ if (x < 1)
+ fun_l17_n906(x)
+ else
+ fun_l17_n472(x)
+ end
+end
+
+def fun_l16_n845(x)
+ if (x < 1)
+ fun_l17_n147(x)
+ else
+ fun_l17_n623(x)
+ end
+end
+
+def fun_l16_n846(x)
+ if (x < 1)
+ fun_l17_n296(x)
+ else
+ fun_l17_n44(x)
+ end
+end
+
+def fun_l16_n847(x)
+ if (x < 1)
+ fun_l17_n498(x)
+ else
+ fun_l17_n764(x)
+ end
+end
+
+def fun_l16_n848(x)
+ if (x < 1)
+ fun_l17_n428(x)
+ else
+ fun_l17_n575(x)
+ end
+end
+
+def fun_l16_n849(x)
+ if (x < 1)
+ fun_l17_n311(x)
+ else
+ fun_l17_n975(x)
+ end
+end
+
+def fun_l16_n850(x)
+ if (x < 1)
+ fun_l17_n482(x)
+ else
+ fun_l17_n388(x)
+ end
+end
+
+def fun_l16_n851(x)
+ if (x < 1)
+ fun_l17_n174(x)
+ else
+ fun_l17_n190(x)
+ end
+end
+
+def fun_l16_n852(x)
+ if (x < 1)
+ fun_l17_n28(x)
+ else
+ fun_l17_n598(x)
+ end
+end
+
+def fun_l16_n853(x)
+ if (x < 1)
+ fun_l17_n142(x)
+ else
+ fun_l17_n340(x)
+ end
+end
+
+def fun_l16_n854(x)
+ if (x < 1)
+ fun_l17_n793(x)
+ else
+ fun_l17_n226(x)
+ end
+end
+
+def fun_l16_n855(x)
+ if (x < 1)
+ fun_l17_n268(x)
+ else
+ fun_l17_n201(x)
+ end
+end
+
+def fun_l16_n856(x)
+ if (x < 1)
+ fun_l17_n52(x)
+ else
+ fun_l17_n871(x)
+ end
+end
+
+def fun_l16_n857(x)
+ if (x < 1)
+ fun_l17_n30(x)
+ else
+ fun_l17_n673(x)
+ end
+end
+
+def fun_l16_n858(x)
+ if (x < 1)
+ fun_l17_n794(x)
+ else
+ fun_l17_n839(x)
+ end
+end
+
+def fun_l16_n859(x)
+ if (x < 1)
+ fun_l17_n162(x)
+ else
+ fun_l17_n655(x)
+ end
+end
+
+def fun_l16_n860(x)
+ if (x < 1)
+ fun_l17_n770(x)
+ else
+ fun_l17_n879(x)
+ end
+end
+
+def fun_l16_n861(x)
+ if (x < 1)
+ fun_l17_n93(x)
+ else
+ fun_l17_n338(x)
+ end
+end
+
+def fun_l16_n862(x)
+ if (x < 1)
+ fun_l17_n468(x)
+ else
+ fun_l17_n977(x)
+ end
+end
+
+def fun_l16_n863(x)
+ if (x < 1)
+ fun_l17_n627(x)
+ else
+ fun_l17_n296(x)
+ end
+end
+
+def fun_l16_n864(x)
+ if (x < 1)
+ fun_l17_n402(x)
+ else
+ fun_l17_n515(x)
+ end
+end
+
+def fun_l16_n865(x)
+ if (x < 1)
+ fun_l17_n793(x)
+ else
+ fun_l17_n62(x)
+ end
+end
+
+def fun_l16_n866(x)
+ if (x < 1)
+ fun_l17_n87(x)
+ else
+ fun_l17_n532(x)
+ end
+end
+
+def fun_l16_n867(x)
+ if (x < 1)
+ fun_l17_n766(x)
+ else
+ fun_l17_n162(x)
+ end
+end
+
+def fun_l16_n868(x)
+ if (x < 1)
+ fun_l17_n214(x)
+ else
+ fun_l17_n827(x)
+ end
+end
+
+def fun_l16_n869(x)
+ if (x < 1)
+ fun_l17_n879(x)
+ else
+ fun_l17_n285(x)
+ end
+end
+
+def fun_l16_n870(x)
+ if (x < 1)
+ fun_l17_n619(x)
+ else
+ fun_l17_n648(x)
+ end
+end
+
+def fun_l16_n871(x)
+ if (x < 1)
+ fun_l17_n150(x)
+ else
+ fun_l17_n458(x)
+ end
+end
+
+def fun_l16_n872(x)
+ if (x < 1)
+ fun_l17_n346(x)
+ else
+ fun_l17_n824(x)
+ end
+end
+
+def fun_l16_n873(x)
+ if (x < 1)
+ fun_l17_n839(x)
+ else
+ fun_l17_n188(x)
+ end
+end
+
+def fun_l16_n874(x)
+ if (x < 1)
+ fun_l17_n202(x)
+ else
+ fun_l17_n147(x)
+ end
+end
+
+def fun_l16_n875(x)
+ if (x < 1)
+ fun_l17_n779(x)
+ else
+ fun_l17_n217(x)
+ end
+end
+
+def fun_l16_n876(x)
+ if (x < 1)
+ fun_l17_n417(x)
+ else
+ fun_l17_n350(x)
+ end
+end
+
+def fun_l16_n877(x)
+ if (x < 1)
+ fun_l17_n971(x)
+ else
+ fun_l17_n825(x)
+ end
+end
+
+def fun_l16_n878(x)
+ if (x < 1)
+ fun_l17_n843(x)
+ else
+ fun_l17_n431(x)
+ end
+end
+
+def fun_l16_n879(x)
+ if (x < 1)
+ fun_l17_n560(x)
+ else
+ fun_l17_n421(x)
+ end
+end
+
+def fun_l16_n880(x)
+ if (x < 1)
+ fun_l17_n399(x)
+ else
+ fun_l17_n101(x)
+ end
+end
+
+def fun_l16_n881(x)
+ if (x < 1)
+ fun_l17_n458(x)
+ else
+ fun_l17_n805(x)
+ end
+end
+
+def fun_l16_n882(x)
+ if (x < 1)
+ fun_l17_n590(x)
+ else
+ fun_l17_n924(x)
+ end
+end
+
+def fun_l16_n883(x)
+ if (x < 1)
+ fun_l17_n753(x)
+ else
+ fun_l17_n128(x)
+ end
+end
+
+def fun_l16_n884(x)
+ if (x < 1)
+ fun_l17_n271(x)
+ else
+ fun_l17_n366(x)
+ end
+end
+
+def fun_l16_n885(x)
+ if (x < 1)
+ fun_l17_n251(x)
+ else
+ fun_l17_n581(x)
+ end
+end
+
+def fun_l16_n886(x)
+ if (x < 1)
+ fun_l17_n82(x)
+ else
+ fun_l17_n212(x)
+ end
+end
+
+def fun_l16_n887(x)
+ if (x < 1)
+ fun_l17_n254(x)
+ else
+ fun_l17_n476(x)
+ end
+end
+
+def fun_l16_n888(x)
+ if (x < 1)
+ fun_l17_n774(x)
+ else
+ fun_l17_n23(x)
+ end
+end
+
+def fun_l16_n889(x)
+ if (x < 1)
+ fun_l17_n258(x)
+ else
+ fun_l17_n931(x)
+ end
+end
+
+def fun_l16_n890(x)
+ if (x < 1)
+ fun_l17_n60(x)
+ else
+ fun_l17_n267(x)
+ end
+end
+
+def fun_l16_n891(x)
+ if (x < 1)
+ fun_l17_n465(x)
+ else
+ fun_l17_n298(x)
+ end
+end
+
+def fun_l16_n892(x)
+ if (x < 1)
+ fun_l17_n284(x)
+ else
+ fun_l17_n59(x)
+ end
+end
+
+def fun_l16_n893(x)
+ if (x < 1)
+ fun_l17_n485(x)
+ else
+ fun_l17_n19(x)
+ end
+end
+
+def fun_l16_n894(x)
+ if (x < 1)
+ fun_l17_n676(x)
+ else
+ fun_l17_n196(x)
+ end
+end
+
+def fun_l16_n895(x)
+ if (x < 1)
+ fun_l17_n894(x)
+ else
+ fun_l17_n667(x)
+ end
+end
+
+def fun_l16_n896(x)
+ if (x < 1)
+ fun_l17_n234(x)
+ else
+ fun_l17_n115(x)
+ end
+end
+
+def fun_l16_n897(x)
+ if (x < 1)
+ fun_l17_n161(x)
+ else
+ fun_l17_n47(x)
+ end
+end
+
+def fun_l16_n898(x)
+ if (x < 1)
+ fun_l17_n598(x)
+ else
+ fun_l17_n796(x)
+ end
+end
+
+def fun_l16_n899(x)
+ if (x < 1)
+ fun_l17_n191(x)
+ else
+ fun_l17_n36(x)
+ end
+end
+
+def fun_l16_n900(x)
+ if (x < 1)
+ fun_l17_n803(x)
+ else
+ fun_l17_n894(x)
+ end
+end
+
+def fun_l16_n901(x)
+ if (x < 1)
+ fun_l17_n225(x)
+ else
+ fun_l17_n608(x)
+ end
+end
+
+def fun_l16_n902(x)
+ if (x < 1)
+ fun_l17_n318(x)
+ else
+ fun_l17_n667(x)
+ end
+end
+
+def fun_l16_n903(x)
+ if (x < 1)
+ fun_l17_n815(x)
+ else
+ fun_l17_n645(x)
+ end
+end
+
+def fun_l16_n904(x)
+ if (x < 1)
+ fun_l17_n891(x)
+ else
+ fun_l17_n465(x)
+ end
+end
+
+def fun_l16_n905(x)
+ if (x < 1)
+ fun_l17_n789(x)
+ else
+ fun_l17_n573(x)
+ end
+end
+
+def fun_l16_n906(x)
+ if (x < 1)
+ fun_l17_n139(x)
+ else
+ fun_l17_n745(x)
+ end
+end
+
+def fun_l16_n907(x)
+ if (x < 1)
+ fun_l17_n632(x)
+ else
+ fun_l17_n625(x)
+ end
+end
+
+def fun_l16_n908(x)
+ if (x < 1)
+ fun_l17_n249(x)
+ else
+ fun_l17_n279(x)
+ end
+end
+
+def fun_l16_n909(x)
+ if (x < 1)
+ fun_l17_n357(x)
+ else
+ fun_l17_n477(x)
+ end
+end
+
+def fun_l16_n910(x)
+ if (x < 1)
+ fun_l17_n796(x)
+ else
+ fun_l17_n313(x)
+ end
+end
+
+def fun_l16_n911(x)
+ if (x < 1)
+ fun_l17_n917(x)
+ else
+ fun_l17_n775(x)
+ end
+end
+
+def fun_l16_n912(x)
+ if (x < 1)
+ fun_l17_n451(x)
+ else
+ fun_l17_n102(x)
+ end
+end
+
+def fun_l16_n913(x)
+ if (x < 1)
+ fun_l17_n782(x)
+ else
+ fun_l17_n998(x)
+ end
+end
+
+def fun_l16_n914(x)
+ if (x < 1)
+ fun_l17_n237(x)
+ else
+ fun_l17_n586(x)
+ end
+end
+
+def fun_l16_n915(x)
+ if (x < 1)
+ fun_l17_n399(x)
+ else
+ fun_l17_n676(x)
+ end
+end
+
+def fun_l16_n916(x)
+ if (x < 1)
+ fun_l17_n65(x)
+ else
+ fun_l17_n61(x)
+ end
+end
+
+def fun_l16_n917(x)
+ if (x < 1)
+ fun_l17_n861(x)
+ else
+ fun_l17_n72(x)
+ end
+end
+
+def fun_l16_n918(x)
+ if (x < 1)
+ fun_l17_n375(x)
+ else
+ fun_l17_n446(x)
+ end
+end
+
+def fun_l16_n919(x)
+ if (x < 1)
+ fun_l17_n776(x)
+ else
+ fun_l17_n302(x)
+ end
+end
+
+def fun_l16_n920(x)
+ if (x < 1)
+ fun_l17_n216(x)
+ else
+ fun_l17_n804(x)
+ end
+end
+
+def fun_l16_n921(x)
+ if (x < 1)
+ fun_l17_n667(x)
+ else
+ fun_l17_n593(x)
+ end
+end
+
+def fun_l16_n922(x)
+ if (x < 1)
+ fun_l17_n499(x)
+ else
+ fun_l17_n577(x)
+ end
+end
+
+def fun_l16_n923(x)
+ if (x < 1)
+ fun_l17_n41(x)
+ else
+ fun_l17_n316(x)
+ end
+end
+
+def fun_l16_n924(x)
+ if (x < 1)
+ fun_l17_n521(x)
+ else
+ fun_l17_n86(x)
+ end
+end
+
+def fun_l16_n925(x)
+ if (x < 1)
+ fun_l17_n695(x)
+ else
+ fun_l17_n662(x)
+ end
+end
+
+def fun_l16_n926(x)
+ if (x < 1)
+ fun_l17_n379(x)
+ else
+ fun_l17_n58(x)
+ end
+end
+
+def fun_l16_n927(x)
+ if (x < 1)
+ fun_l17_n820(x)
+ else
+ fun_l17_n801(x)
+ end
+end
+
+def fun_l16_n928(x)
+ if (x < 1)
+ fun_l17_n175(x)
+ else
+ fun_l17_n865(x)
+ end
+end
+
+def fun_l16_n929(x)
+ if (x < 1)
+ fun_l17_n903(x)
+ else
+ fun_l17_n644(x)
+ end
+end
+
+def fun_l16_n930(x)
+ if (x < 1)
+ fun_l17_n801(x)
+ else
+ fun_l17_n265(x)
+ end
+end
+
+def fun_l16_n931(x)
+ if (x < 1)
+ fun_l17_n292(x)
+ else
+ fun_l17_n897(x)
+ end
+end
+
+def fun_l16_n932(x)
+ if (x < 1)
+ fun_l17_n666(x)
+ else
+ fun_l17_n531(x)
+ end
+end
+
+def fun_l16_n933(x)
+ if (x < 1)
+ fun_l17_n929(x)
+ else
+ fun_l17_n205(x)
+ end
+end
+
+def fun_l16_n934(x)
+ if (x < 1)
+ fun_l17_n557(x)
+ else
+ fun_l17_n70(x)
+ end
+end
+
+def fun_l16_n935(x)
+ if (x < 1)
+ fun_l17_n831(x)
+ else
+ fun_l17_n194(x)
+ end
+end
+
+def fun_l16_n936(x)
+ if (x < 1)
+ fun_l17_n277(x)
+ else
+ fun_l17_n786(x)
+ end
+end
+
+def fun_l16_n937(x)
+ if (x < 1)
+ fun_l17_n464(x)
+ else
+ fun_l17_n482(x)
+ end
+end
+
+def fun_l16_n938(x)
+ if (x < 1)
+ fun_l17_n782(x)
+ else
+ fun_l17_n60(x)
+ end
+end
+
+def fun_l16_n939(x)
+ if (x < 1)
+ fun_l17_n780(x)
+ else
+ fun_l17_n786(x)
+ end
+end
+
+def fun_l16_n940(x)
+ if (x < 1)
+ fun_l17_n201(x)
+ else
+ fun_l17_n614(x)
+ end
+end
+
+def fun_l16_n941(x)
+ if (x < 1)
+ fun_l17_n318(x)
+ else
+ fun_l17_n210(x)
+ end
+end
+
+def fun_l16_n942(x)
+ if (x < 1)
+ fun_l17_n831(x)
+ else
+ fun_l17_n293(x)
+ end
+end
+
+def fun_l16_n943(x)
+ if (x < 1)
+ fun_l17_n368(x)
+ else
+ fun_l17_n292(x)
+ end
+end
+
+def fun_l16_n944(x)
+ if (x < 1)
+ fun_l17_n924(x)
+ else
+ fun_l17_n20(x)
+ end
+end
+
+def fun_l16_n945(x)
+ if (x < 1)
+ fun_l17_n340(x)
+ else
+ fun_l17_n268(x)
+ end
+end
+
+def fun_l16_n946(x)
+ if (x < 1)
+ fun_l17_n913(x)
+ else
+ fun_l17_n877(x)
+ end
+end
+
+def fun_l16_n947(x)
+ if (x < 1)
+ fun_l17_n577(x)
+ else
+ fun_l17_n973(x)
+ end
+end
+
+def fun_l16_n948(x)
+ if (x < 1)
+ fun_l17_n101(x)
+ else
+ fun_l17_n350(x)
+ end
+end
+
+def fun_l16_n949(x)
+ if (x < 1)
+ fun_l17_n1(x)
+ else
+ fun_l17_n683(x)
+ end
+end
+
+def fun_l16_n950(x)
+ if (x < 1)
+ fun_l17_n290(x)
+ else
+ fun_l17_n30(x)
+ end
+end
+
+def fun_l16_n951(x)
+ if (x < 1)
+ fun_l17_n965(x)
+ else
+ fun_l17_n165(x)
+ end
+end
+
+def fun_l16_n952(x)
+ if (x < 1)
+ fun_l17_n532(x)
+ else
+ fun_l17_n887(x)
+ end
+end
+
+def fun_l16_n953(x)
+ if (x < 1)
+ fun_l17_n73(x)
+ else
+ fun_l17_n82(x)
+ end
+end
+
+def fun_l16_n954(x)
+ if (x < 1)
+ fun_l17_n518(x)
+ else
+ fun_l17_n886(x)
+ end
+end
+
+def fun_l16_n955(x)
+ if (x < 1)
+ fun_l17_n990(x)
+ else
+ fun_l17_n213(x)
+ end
+end
+
+def fun_l16_n956(x)
+ if (x < 1)
+ fun_l17_n489(x)
+ else
+ fun_l17_n937(x)
+ end
+end
+
+def fun_l16_n957(x)
+ if (x < 1)
+ fun_l17_n657(x)
+ else
+ fun_l17_n25(x)
+ end
+end
+
+def fun_l16_n958(x)
+ if (x < 1)
+ fun_l17_n988(x)
+ else
+ fun_l17_n684(x)
+ end
+end
+
+def fun_l16_n959(x)
+ if (x < 1)
+ fun_l17_n142(x)
+ else
+ fun_l17_n291(x)
+ end
+end
+
+def fun_l16_n960(x)
+ if (x < 1)
+ fun_l17_n495(x)
+ else
+ fun_l17_n806(x)
+ end
+end
+
+def fun_l16_n961(x)
+ if (x < 1)
+ fun_l17_n92(x)
+ else
+ fun_l17_n137(x)
+ end
+end
+
+def fun_l16_n962(x)
+ if (x < 1)
+ fun_l17_n954(x)
+ else
+ fun_l17_n943(x)
+ end
+end
+
+def fun_l16_n963(x)
+ if (x < 1)
+ fun_l17_n761(x)
+ else
+ fun_l17_n839(x)
+ end
+end
+
+def fun_l16_n964(x)
+ if (x < 1)
+ fun_l17_n591(x)
+ else
+ fun_l17_n519(x)
+ end
+end
+
+def fun_l16_n965(x)
+ if (x < 1)
+ fun_l17_n548(x)
+ else
+ fun_l17_n190(x)
+ end
+end
+
+def fun_l16_n966(x)
+ if (x < 1)
+ fun_l17_n206(x)
+ else
+ fun_l17_n491(x)
+ end
+end
+
+def fun_l16_n967(x)
+ if (x < 1)
+ fun_l17_n895(x)
+ else
+ fun_l17_n404(x)
+ end
+end
+
+def fun_l16_n968(x)
+ if (x < 1)
+ fun_l17_n284(x)
+ else
+ fun_l17_n715(x)
+ end
+end
+
+def fun_l16_n969(x)
+ if (x < 1)
+ fun_l17_n507(x)
+ else
+ fun_l17_n623(x)
+ end
+end
+
+def fun_l16_n970(x)
+ if (x < 1)
+ fun_l17_n415(x)
+ else
+ fun_l17_n718(x)
+ end
+end
+
+def fun_l16_n971(x)
+ if (x < 1)
+ fun_l17_n72(x)
+ else
+ fun_l17_n938(x)
+ end
+end
+
+def fun_l16_n972(x)
+ if (x < 1)
+ fun_l17_n661(x)
+ else
+ fun_l17_n525(x)
+ end
+end
+
+def fun_l16_n973(x)
+ if (x < 1)
+ fun_l17_n314(x)
+ else
+ fun_l17_n195(x)
+ end
+end
+
+def fun_l16_n974(x)
+ if (x < 1)
+ fun_l17_n53(x)
+ else
+ fun_l17_n562(x)
+ end
+end
+
+def fun_l16_n975(x)
+ if (x < 1)
+ fun_l17_n381(x)
+ else
+ fun_l17_n241(x)
+ end
+end
+
+def fun_l16_n976(x)
+ if (x < 1)
+ fun_l17_n919(x)
+ else
+ fun_l17_n291(x)
+ end
+end
+
+def fun_l16_n977(x)
+ if (x < 1)
+ fun_l17_n455(x)
+ else
+ fun_l17_n773(x)
+ end
+end
+
+def fun_l16_n978(x)
+ if (x < 1)
+ fun_l17_n75(x)
+ else
+ fun_l17_n737(x)
+ end
+end
+
+def fun_l16_n979(x)
+ if (x < 1)
+ fun_l17_n68(x)
+ else
+ fun_l17_n339(x)
+ end
+end
+
+def fun_l16_n980(x)
+ if (x < 1)
+ fun_l17_n719(x)
+ else
+ fun_l17_n464(x)
+ end
+end
+
+def fun_l16_n981(x)
+ if (x < 1)
+ fun_l17_n681(x)
+ else
+ fun_l17_n611(x)
+ end
+end
+
+def fun_l16_n982(x)
+ if (x < 1)
+ fun_l17_n367(x)
+ else
+ fun_l17_n446(x)
+ end
+end
+
+def fun_l16_n983(x)
+ if (x < 1)
+ fun_l17_n493(x)
+ else
+ fun_l17_n958(x)
+ end
+end
+
+def fun_l16_n984(x)
+ if (x < 1)
+ fun_l17_n271(x)
+ else
+ fun_l17_n982(x)
+ end
+end
+
+def fun_l16_n985(x)
+ if (x < 1)
+ fun_l17_n136(x)
+ else
+ fun_l17_n446(x)
+ end
+end
+
+def fun_l16_n986(x)
+ if (x < 1)
+ fun_l17_n362(x)
+ else
+ fun_l17_n114(x)
+ end
+end
+
+def fun_l16_n987(x)
+ if (x < 1)
+ fun_l17_n234(x)
+ else
+ fun_l17_n236(x)
+ end
+end
+
+def fun_l16_n988(x)
+ if (x < 1)
+ fun_l17_n339(x)
+ else
+ fun_l17_n2(x)
+ end
+end
+
+def fun_l16_n989(x)
+ if (x < 1)
+ fun_l17_n66(x)
+ else
+ fun_l17_n378(x)
+ end
+end
+
+def fun_l16_n990(x)
+ if (x < 1)
+ fun_l17_n366(x)
+ else
+ fun_l17_n289(x)
+ end
+end
+
+def fun_l16_n991(x)
+ if (x < 1)
+ fun_l17_n977(x)
+ else
+ fun_l17_n520(x)
+ end
+end
+
+def fun_l16_n992(x)
+ if (x < 1)
+ fun_l17_n953(x)
+ else
+ fun_l17_n254(x)
+ end
+end
+
+def fun_l16_n993(x)
+ if (x < 1)
+ fun_l17_n569(x)
+ else
+ fun_l17_n63(x)
+ end
+end
+
+def fun_l16_n994(x)
+ if (x < 1)
+ fun_l17_n844(x)
+ else
+ fun_l17_n42(x)
+ end
+end
+
+def fun_l16_n995(x)
+ if (x < 1)
+ fun_l17_n184(x)
+ else
+ fun_l17_n371(x)
+ end
+end
+
+def fun_l16_n996(x)
+ if (x < 1)
+ fun_l17_n229(x)
+ else
+ fun_l17_n309(x)
+ end
+end
+
+def fun_l16_n997(x)
+ if (x < 1)
+ fun_l17_n468(x)
+ else
+ fun_l17_n653(x)
+ end
+end
+
+def fun_l16_n998(x)
+ if (x < 1)
+ fun_l17_n173(x)
+ else
+ fun_l17_n709(x)
+ end
+end
+
+def fun_l16_n999(x)
+ if (x < 1)
+ fun_l17_n625(x)
+ else
+ fun_l17_n831(x)
+ end
+end
+
+def fun_l17_n0(x)
+ if (x < 1)
+ fun_l18_n495(x)
+ else
+ fun_l18_n122(x)
+ end
+end
+
+def fun_l17_n1(x)
+ if (x < 1)
+ fun_l18_n99(x)
+ else
+ fun_l18_n84(x)
+ end
+end
+
+def fun_l17_n2(x)
+ if (x < 1)
+ fun_l18_n464(x)
+ else
+ fun_l18_n321(x)
+ end
+end
+
+def fun_l17_n3(x)
+ if (x < 1)
+ fun_l18_n391(x)
+ else
+ fun_l18_n122(x)
+ end
+end
+
+def fun_l17_n4(x)
+ if (x < 1)
+ fun_l18_n65(x)
+ else
+ fun_l18_n514(x)
+ end
+end
+
+def fun_l17_n5(x)
+ if (x < 1)
+ fun_l18_n972(x)
+ else
+ fun_l18_n802(x)
+ end
+end
+
+def fun_l17_n6(x)
+ if (x < 1)
+ fun_l18_n577(x)
+ else
+ fun_l18_n26(x)
+ end
+end
+
+def fun_l17_n7(x)
+ if (x < 1)
+ fun_l18_n988(x)
+ else
+ fun_l18_n403(x)
+ end
+end
+
+def fun_l17_n8(x)
+ if (x < 1)
+ fun_l18_n466(x)
+ else
+ fun_l18_n162(x)
+ end
+end
+
+def fun_l17_n9(x)
+ if (x < 1)
+ fun_l18_n30(x)
+ else
+ fun_l18_n438(x)
+ end
+end
+
+def fun_l17_n10(x)
+ if (x < 1)
+ fun_l18_n92(x)
+ else
+ fun_l18_n365(x)
+ end
+end
+
+def fun_l17_n11(x)
+ if (x < 1)
+ fun_l18_n230(x)
+ else
+ fun_l18_n466(x)
+ end
+end
+
+def fun_l17_n12(x)
+ if (x < 1)
+ fun_l18_n274(x)
+ else
+ fun_l18_n38(x)
+ end
+end
+
+def fun_l17_n13(x)
+ if (x < 1)
+ fun_l18_n84(x)
+ else
+ fun_l18_n951(x)
+ end
+end
+
+def fun_l17_n14(x)
+ if (x < 1)
+ fun_l18_n878(x)
+ else
+ fun_l18_n981(x)
+ end
+end
+
+def fun_l17_n15(x)
+ if (x < 1)
+ fun_l18_n592(x)
+ else
+ fun_l18_n917(x)
+ end
+end
+
+def fun_l17_n16(x)
+ if (x < 1)
+ fun_l18_n524(x)
+ else
+ fun_l18_n812(x)
+ end
+end
+
+def fun_l17_n17(x)
+ if (x < 1)
+ fun_l18_n267(x)
+ else
+ fun_l18_n335(x)
+ end
+end
+
+def fun_l17_n18(x)
+ if (x < 1)
+ fun_l18_n427(x)
+ else
+ fun_l18_n591(x)
+ end
+end
+
+def fun_l17_n19(x)
+ if (x < 1)
+ fun_l18_n520(x)
+ else
+ fun_l18_n240(x)
+ end
+end
+
+def fun_l17_n20(x)
+ if (x < 1)
+ fun_l18_n729(x)
+ else
+ fun_l18_n709(x)
+ end
+end
+
+def fun_l17_n21(x)
+ if (x < 1)
+ fun_l18_n100(x)
+ else
+ fun_l18_n192(x)
+ end
+end
+
+def fun_l17_n22(x)
+ if (x < 1)
+ fun_l18_n762(x)
+ else
+ fun_l18_n373(x)
+ end
+end
+
+def fun_l17_n23(x)
+ if (x < 1)
+ fun_l18_n485(x)
+ else
+ fun_l18_n736(x)
+ end
+end
+
+def fun_l17_n24(x)
+ if (x < 1)
+ fun_l18_n743(x)
+ else
+ fun_l18_n83(x)
+ end
+end
+
+def fun_l17_n25(x)
+ if (x < 1)
+ fun_l18_n750(x)
+ else
+ fun_l18_n545(x)
+ end
+end
+
+def fun_l17_n26(x)
+ if (x < 1)
+ fun_l18_n488(x)
+ else
+ fun_l18_n870(x)
+ end
+end
+
+def fun_l17_n27(x)
+ if (x < 1)
+ fun_l18_n0(x)
+ else
+ fun_l18_n675(x)
+ end
+end
+
+def fun_l17_n28(x)
+ if (x < 1)
+ fun_l18_n878(x)
+ else
+ fun_l18_n32(x)
+ end
+end
+
+def fun_l17_n29(x)
+ if (x < 1)
+ fun_l18_n906(x)
+ else
+ fun_l18_n376(x)
+ end
+end
+
+def fun_l17_n30(x)
+ if (x < 1)
+ fun_l18_n182(x)
+ else
+ fun_l18_n58(x)
+ end
+end
+
+def fun_l17_n31(x)
+ if (x < 1)
+ fun_l18_n117(x)
+ else
+ fun_l18_n592(x)
+ end
+end
+
+def fun_l17_n32(x)
+ if (x < 1)
+ fun_l18_n123(x)
+ else
+ fun_l18_n697(x)
+ end
+end
+
+def fun_l17_n33(x)
+ if (x < 1)
+ fun_l18_n672(x)
+ else
+ fun_l18_n645(x)
+ end
+end
+
+def fun_l17_n34(x)
+ if (x < 1)
+ fun_l18_n640(x)
+ else
+ fun_l18_n280(x)
+ end
+end
+
+def fun_l17_n35(x)
+ if (x < 1)
+ fun_l18_n851(x)
+ else
+ fun_l18_n723(x)
+ end
+end
+
+def fun_l17_n36(x)
+ if (x < 1)
+ fun_l18_n968(x)
+ else
+ fun_l18_n840(x)
+ end
+end
+
+def fun_l17_n37(x)
+ if (x < 1)
+ fun_l18_n153(x)
+ else
+ fun_l18_n979(x)
+ end
+end
+
+def fun_l17_n38(x)
+ if (x < 1)
+ fun_l18_n817(x)
+ else
+ fun_l18_n521(x)
+ end
+end
+
+def fun_l17_n39(x)
+ if (x < 1)
+ fun_l18_n742(x)
+ else
+ fun_l18_n576(x)
+ end
+end
+
+def fun_l17_n40(x)
+ if (x < 1)
+ fun_l18_n5(x)
+ else
+ fun_l18_n998(x)
+ end
+end
+
+def fun_l17_n41(x)
+ if (x < 1)
+ fun_l18_n442(x)
+ else
+ fun_l18_n157(x)
+ end
+end
+
+def fun_l17_n42(x)
+ if (x < 1)
+ fun_l18_n832(x)
+ else
+ fun_l18_n218(x)
+ end
+end
+
+def fun_l17_n43(x)
+ if (x < 1)
+ fun_l18_n298(x)
+ else
+ fun_l18_n132(x)
+ end
+end
+
+def fun_l17_n44(x)
+ if (x < 1)
+ fun_l18_n397(x)
+ else
+ fun_l18_n375(x)
+ end
+end
+
+def fun_l17_n45(x)
+ if (x < 1)
+ fun_l18_n974(x)
+ else
+ fun_l18_n19(x)
+ end
+end
+
+def fun_l17_n46(x)
+ if (x < 1)
+ fun_l18_n340(x)
+ else
+ fun_l18_n506(x)
+ end
+end
+
+def fun_l17_n47(x)
+ if (x < 1)
+ fun_l18_n943(x)
+ else
+ fun_l18_n585(x)
+ end
+end
+
+def fun_l17_n48(x)
+ if (x < 1)
+ fun_l18_n756(x)
+ else
+ fun_l18_n2(x)
+ end
+end
+
+def fun_l17_n49(x)
+ if (x < 1)
+ fun_l18_n229(x)
+ else
+ fun_l18_n313(x)
+ end
+end
+
+def fun_l17_n50(x)
+ if (x < 1)
+ fun_l18_n243(x)
+ else
+ fun_l18_n562(x)
+ end
+end
+
+def fun_l17_n51(x)
+ if (x < 1)
+ fun_l18_n231(x)
+ else
+ fun_l18_n381(x)
+ end
+end
+
+def fun_l17_n52(x)
+ if (x < 1)
+ fun_l18_n509(x)
+ else
+ fun_l18_n693(x)
+ end
+end
+
+def fun_l17_n53(x)
+ if (x < 1)
+ fun_l18_n877(x)
+ else
+ fun_l18_n620(x)
+ end
+end
+
+def fun_l17_n54(x)
+ if (x < 1)
+ fun_l18_n435(x)
+ else
+ fun_l18_n3(x)
+ end
+end
+
+def fun_l17_n55(x)
+ if (x < 1)
+ fun_l18_n929(x)
+ else
+ fun_l18_n640(x)
+ end
+end
+
+def fun_l17_n56(x)
+ if (x < 1)
+ fun_l18_n913(x)
+ else
+ fun_l18_n374(x)
+ end
+end
+
+def fun_l17_n57(x)
+ if (x < 1)
+ fun_l18_n174(x)
+ else
+ fun_l18_n588(x)
+ end
+end
+
+def fun_l17_n58(x)
+ if (x < 1)
+ fun_l18_n339(x)
+ else
+ fun_l18_n860(x)
+ end
+end
+
+def fun_l17_n59(x)
+ if (x < 1)
+ fun_l18_n649(x)
+ else
+ fun_l18_n986(x)
+ end
+end
+
+def fun_l17_n60(x)
+ if (x < 1)
+ fun_l18_n326(x)
+ else
+ fun_l18_n739(x)
+ end
+end
+
+def fun_l17_n61(x)
+ if (x < 1)
+ fun_l18_n692(x)
+ else
+ fun_l18_n673(x)
+ end
+end
+
+def fun_l17_n62(x)
+ if (x < 1)
+ fun_l18_n515(x)
+ else
+ fun_l18_n951(x)
+ end
+end
+
+def fun_l17_n63(x)
+ if (x < 1)
+ fun_l18_n502(x)
+ else
+ fun_l18_n781(x)
+ end
+end
+
+def fun_l17_n64(x)
+ if (x < 1)
+ fun_l18_n833(x)
+ else
+ fun_l18_n235(x)
+ end
+end
+
+def fun_l17_n65(x)
+ if (x < 1)
+ fun_l18_n483(x)
+ else
+ fun_l18_n207(x)
+ end
+end
+
+def fun_l17_n66(x)
+ if (x < 1)
+ fun_l18_n292(x)
+ else
+ fun_l18_n916(x)
+ end
+end
+
+def fun_l17_n67(x)
+ if (x < 1)
+ fun_l18_n677(x)
+ else
+ fun_l18_n937(x)
+ end
+end
+
+def fun_l17_n68(x)
+ if (x < 1)
+ fun_l18_n733(x)
+ else
+ fun_l18_n426(x)
+ end
+end
+
+def fun_l17_n69(x)
+ if (x < 1)
+ fun_l18_n186(x)
+ else
+ fun_l18_n146(x)
+ end
+end
+
+def fun_l17_n70(x)
+ if (x < 1)
+ fun_l18_n493(x)
+ else
+ fun_l18_n418(x)
+ end
+end
+
+def fun_l17_n71(x)
+ if (x < 1)
+ fun_l18_n732(x)
+ else
+ fun_l18_n584(x)
+ end
+end
+
+def fun_l17_n72(x)
+ if (x < 1)
+ fun_l18_n774(x)
+ else
+ fun_l18_n349(x)
+ end
+end
+
+def fun_l17_n73(x)
+ if (x < 1)
+ fun_l18_n833(x)
+ else
+ fun_l18_n142(x)
+ end
+end
+
+def fun_l17_n74(x)
+ if (x < 1)
+ fun_l18_n506(x)
+ else
+ fun_l18_n882(x)
+ end
+end
+
+def fun_l17_n75(x)
+ if (x < 1)
+ fun_l18_n856(x)
+ else
+ fun_l18_n906(x)
+ end
+end
+
+def fun_l17_n76(x)
+ if (x < 1)
+ fun_l18_n172(x)
+ else
+ fun_l18_n426(x)
+ end
+end
+
+def fun_l17_n77(x)
+ if (x < 1)
+ fun_l18_n357(x)
+ else
+ fun_l18_n508(x)
+ end
+end
+
+def fun_l17_n78(x)
+ if (x < 1)
+ fun_l18_n25(x)
+ else
+ fun_l18_n899(x)
+ end
+end
+
+def fun_l17_n79(x)
+ if (x < 1)
+ fun_l18_n639(x)
+ else
+ fun_l18_n644(x)
+ end
+end
+
+def fun_l17_n80(x)
+ if (x < 1)
+ fun_l18_n207(x)
+ else
+ fun_l18_n193(x)
+ end
+end
+
+def fun_l17_n81(x)
+ if (x < 1)
+ fun_l18_n200(x)
+ else
+ fun_l18_n766(x)
+ end
+end
+
+def fun_l17_n82(x)
+ if (x < 1)
+ fun_l18_n815(x)
+ else
+ fun_l18_n533(x)
+ end
+end
+
+def fun_l17_n83(x)
+ if (x < 1)
+ fun_l18_n740(x)
+ else
+ fun_l18_n507(x)
+ end
+end
+
+def fun_l17_n84(x)
+ if (x < 1)
+ fun_l18_n484(x)
+ else
+ fun_l18_n158(x)
+ end
+end
+
+def fun_l17_n85(x)
+ if (x < 1)
+ fun_l18_n924(x)
+ else
+ fun_l18_n963(x)
+ end
+end
+
+def fun_l17_n86(x)
+ if (x < 1)
+ fun_l18_n614(x)
+ else
+ fun_l18_n806(x)
+ end
+end
+
+def fun_l17_n87(x)
+ if (x < 1)
+ fun_l18_n553(x)
+ else
+ fun_l18_n510(x)
+ end
+end
+
+def fun_l17_n88(x)
+ if (x < 1)
+ fun_l18_n561(x)
+ else
+ fun_l18_n860(x)
+ end
+end
+
+def fun_l17_n89(x)
+ if (x < 1)
+ fun_l18_n757(x)
+ else
+ fun_l18_n248(x)
+ end
+end
+
+def fun_l17_n90(x)
+ if (x < 1)
+ fun_l18_n616(x)
+ else
+ fun_l18_n217(x)
+ end
+end
+
+def fun_l17_n91(x)
+ if (x < 1)
+ fun_l18_n997(x)
+ else
+ fun_l18_n861(x)
+ end
+end
+
+def fun_l17_n92(x)
+ if (x < 1)
+ fun_l18_n18(x)
+ else
+ fun_l18_n457(x)
+ end
+end
+
+def fun_l17_n93(x)
+ if (x < 1)
+ fun_l18_n264(x)
+ else
+ fun_l18_n213(x)
+ end
+end
+
+def fun_l17_n94(x)
+ if (x < 1)
+ fun_l18_n352(x)
+ else
+ fun_l18_n304(x)
+ end
+end
+
+def fun_l17_n95(x)
+ if (x < 1)
+ fun_l18_n975(x)
+ else
+ fun_l18_n868(x)
+ end
+end
+
+def fun_l17_n96(x)
+ if (x < 1)
+ fun_l18_n859(x)
+ else
+ fun_l18_n786(x)
+ end
+end
+
+def fun_l17_n97(x)
+ if (x < 1)
+ fun_l18_n610(x)
+ else
+ fun_l18_n423(x)
+ end
+end
+
+def fun_l17_n98(x)
+ if (x < 1)
+ fun_l18_n814(x)
+ else
+ fun_l18_n71(x)
+ end
+end
+
+def fun_l17_n99(x)
+ if (x < 1)
+ fun_l18_n897(x)
+ else
+ fun_l18_n412(x)
+ end
+end
+
+def fun_l17_n100(x)
+ if (x < 1)
+ fun_l18_n654(x)
+ else
+ fun_l18_n600(x)
+ end
+end
+
+def fun_l17_n101(x)
+ if (x < 1)
+ fun_l18_n185(x)
+ else
+ fun_l18_n188(x)
+ end
+end
+
+def fun_l17_n102(x)
+ if (x < 1)
+ fun_l18_n262(x)
+ else
+ fun_l18_n509(x)
+ end
+end
+
+def fun_l17_n103(x)
+ if (x < 1)
+ fun_l18_n115(x)
+ else
+ fun_l18_n497(x)
+ end
+end
+
+def fun_l17_n104(x)
+ if (x < 1)
+ fun_l18_n650(x)
+ else
+ fun_l18_n389(x)
+ end
+end
+
+def fun_l17_n105(x)
+ if (x < 1)
+ fun_l18_n939(x)
+ else
+ fun_l18_n842(x)
+ end
+end
+
+def fun_l17_n106(x)
+ if (x < 1)
+ fun_l18_n645(x)
+ else
+ fun_l18_n34(x)
+ end
+end
+
+def fun_l17_n107(x)
+ if (x < 1)
+ fun_l18_n510(x)
+ else
+ fun_l18_n313(x)
+ end
+end
+
+def fun_l17_n108(x)
+ if (x < 1)
+ fun_l18_n377(x)
+ else
+ fun_l18_n397(x)
+ end
+end
+
+def fun_l17_n109(x)
+ if (x < 1)
+ fun_l18_n884(x)
+ else
+ fun_l18_n380(x)
+ end
+end
+
+def fun_l17_n110(x)
+ if (x < 1)
+ fun_l18_n924(x)
+ else
+ fun_l18_n102(x)
+ end
+end
+
+def fun_l17_n111(x)
+ if (x < 1)
+ fun_l18_n856(x)
+ else
+ fun_l18_n646(x)
+ end
+end
+
+def fun_l17_n112(x)
+ if (x < 1)
+ fun_l18_n270(x)
+ else
+ fun_l18_n345(x)
+ end
+end
+
+def fun_l17_n113(x)
+ if (x < 1)
+ fun_l18_n211(x)
+ else
+ fun_l18_n672(x)
+ end
+end
+
+def fun_l17_n114(x)
+ if (x < 1)
+ fun_l18_n947(x)
+ else
+ fun_l18_n376(x)
+ end
+end
+
+def fun_l17_n115(x)
+ if (x < 1)
+ fun_l18_n219(x)
+ else
+ fun_l18_n927(x)
+ end
+end
+
+def fun_l17_n116(x)
+ if (x < 1)
+ fun_l18_n731(x)
+ else
+ fun_l18_n327(x)
+ end
+end
+
+def fun_l17_n117(x)
+ if (x < 1)
+ fun_l18_n512(x)
+ else
+ fun_l18_n658(x)
+ end
+end
+
+def fun_l17_n118(x)
+ if (x < 1)
+ fun_l18_n248(x)
+ else
+ fun_l18_n661(x)
+ end
+end
+
+def fun_l17_n119(x)
+ if (x < 1)
+ fun_l18_n18(x)
+ else
+ fun_l18_n56(x)
+ end
+end
+
+def fun_l17_n120(x)
+ if (x < 1)
+ fun_l18_n441(x)
+ else
+ fun_l18_n648(x)
+ end
+end
+
+def fun_l17_n121(x)
+ if (x < 1)
+ fun_l18_n122(x)
+ else
+ fun_l18_n717(x)
+ end
+end
+
+def fun_l17_n122(x)
+ if (x < 1)
+ fun_l18_n495(x)
+ else
+ fun_l18_n30(x)
+ end
+end
+
+def fun_l17_n123(x)
+ if (x < 1)
+ fun_l18_n418(x)
+ else
+ fun_l18_n686(x)
+ end
+end
+
+def fun_l17_n124(x)
+ if (x < 1)
+ fun_l18_n274(x)
+ else
+ fun_l18_n300(x)
+ end
+end
+
+def fun_l17_n125(x)
+ if (x < 1)
+ fun_l18_n677(x)
+ else
+ fun_l18_n662(x)
+ end
+end
+
+def fun_l17_n126(x)
+ if (x < 1)
+ fun_l18_n448(x)
+ else
+ fun_l18_n584(x)
+ end
+end
+
+def fun_l17_n127(x)
+ if (x < 1)
+ fun_l18_n316(x)
+ else
+ fun_l18_n507(x)
+ end
+end
+
+def fun_l17_n128(x)
+ if (x < 1)
+ fun_l18_n166(x)
+ else
+ fun_l18_n266(x)
+ end
+end
+
+def fun_l17_n129(x)
+ if (x < 1)
+ fun_l18_n890(x)
+ else
+ fun_l18_n581(x)
+ end
+end
+
+def fun_l17_n130(x)
+ if (x < 1)
+ fun_l18_n554(x)
+ else
+ fun_l18_n925(x)
+ end
+end
+
+def fun_l17_n131(x)
+ if (x < 1)
+ fun_l18_n607(x)
+ else
+ fun_l18_n43(x)
+ end
+end
+
+def fun_l17_n132(x)
+ if (x < 1)
+ fun_l18_n747(x)
+ else
+ fun_l18_n461(x)
+ end
+end
+
+def fun_l17_n133(x)
+ if (x < 1)
+ fun_l18_n399(x)
+ else
+ fun_l18_n436(x)
+ end
+end
+
+def fun_l17_n134(x)
+ if (x < 1)
+ fun_l18_n922(x)
+ else
+ fun_l18_n33(x)
+ end
+end
+
+def fun_l17_n135(x)
+ if (x < 1)
+ fun_l18_n719(x)
+ else
+ fun_l18_n70(x)
+ end
+end
+
+def fun_l17_n136(x)
+ if (x < 1)
+ fun_l18_n664(x)
+ else
+ fun_l18_n842(x)
+ end
+end
+
+def fun_l17_n137(x)
+ if (x < 1)
+ fun_l18_n626(x)
+ else
+ fun_l18_n328(x)
+ end
+end
+
+def fun_l17_n138(x)
+ if (x < 1)
+ fun_l18_n64(x)
+ else
+ fun_l18_n24(x)
+ end
+end
+
+def fun_l17_n139(x)
+ if (x < 1)
+ fun_l18_n198(x)
+ else
+ fun_l18_n658(x)
+ end
+end
+
+def fun_l17_n140(x)
+ if (x < 1)
+ fun_l18_n813(x)
+ else
+ fun_l18_n5(x)
+ end
+end
+
+def fun_l17_n141(x)
+ if (x < 1)
+ fun_l18_n8(x)
+ else
+ fun_l18_n115(x)
+ end
+end
+
+def fun_l17_n142(x)
+ if (x < 1)
+ fun_l18_n699(x)
+ else
+ fun_l18_n135(x)
+ end
+end
+
+def fun_l17_n143(x)
+ if (x < 1)
+ fun_l18_n595(x)
+ else
+ fun_l18_n607(x)
+ end
+end
+
+def fun_l17_n144(x)
+ if (x < 1)
+ fun_l18_n650(x)
+ else
+ fun_l18_n994(x)
+ end
+end
+
+def fun_l17_n145(x)
+ if (x < 1)
+ fun_l18_n14(x)
+ else
+ fun_l18_n798(x)
+ end
+end
+
+def fun_l17_n146(x)
+ if (x < 1)
+ fun_l18_n107(x)
+ else
+ fun_l18_n144(x)
+ end
+end
+
+def fun_l17_n147(x)
+ if (x < 1)
+ fun_l18_n923(x)
+ else
+ fun_l18_n482(x)
+ end
+end
+
+def fun_l17_n148(x)
+ if (x < 1)
+ fun_l18_n629(x)
+ else
+ fun_l18_n224(x)
+ end
+end
+
+def fun_l17_n149(x)
+ if (x < 1)
+ fun_l18_n363(x)
+ else
+ fun_l18_n958(x)
+ end
+end
+
+def fun_l17_n150(x)
+ if (x < 1)
+ fun_l18_n143(x)
+ else
+ fun_l18_n828(x)
+ end
+end
+
+def fun_l17_n151(x)
+ if (x < 1)
+ fun_l18_n615(x)
+ else
+ fun_l18_n561(x)
+ end
+end
+
+def fun_l17_n152(x)
+ if (x < 1)
+ fun_l18_n418(x)
+ else
+ fun_l18_n46(x)
+ end
+end
+
+def fun_l17_n153(x)
+ if (x < 1)
+ fun_l18_n331(x)
+ else
+ fun_l18_n736(x)
+ end
+end
+
+def fun_l17_n154(x)
+ if (x < 1)
+ fun_l18_n340(x)
+ else
+ fun_l18_n221(x)
+ end
+end
+
+def fun_l17_n155(x)
+ if (x < 1)
+ fun_l18_n488(x)
+ else
+ fun_l18_n995(x)
+ end
+end
+
+def fun_l17_n156(x)
+ if (x < 1)
+ fun_l18_n500(x)
+ else
+ fun_l18_n106(x)
+ end
+end
+
+def fun_l17_n157(x)
+ if (x < 1)
+ fun_l18_n76(x)
+ else
+ fun_l18_n147(x)
+ end
+end
+
+def fun_l17_n158(x)
+ if (x < 1)
+ fun_l18_n258(x)
+ else
+ fun_l18_n754(x)
+ end
+end
+
+def fun_l17_n159(x)
+ if (x < 1)
+ fun_l18_n174(x)
+ else
+ fun_l18_n676(x)
+ end
+end
+
+def fun_l17_n160(x)
+ if (x < 1)
+ fun_l18_n997(x)
+ else
+ fun_l18_n662(x)
+ end
+end
+
+def fun_l17_n161(x)
+ if (x < 1)
+ fun_l18_n614(x)
+ else
+ fun_l18_n425(x)
+ end
+end
+
+def fun_l17_n162(x)
+ if (x < 1)
+ fun_l18_n943(x)
+ else
+ fun_l18_n534(x)
+ end
+end
+
+def fun_l17_n163(x)
+ if (x < 1)
+ fun_l18_n577(x)
+ else
+ fun_l18_n670(x)
+ end
+end
+
+def fun_l17_n164(x)
+ if (x < 1)
+ fun_l18_n707(x)
+ else
+ fun_l18_n701(x)
+ end
+end
+
+def fun_l17_n165(x)
+ if (x < 1)
+ fun_l18_n316(x)
+ else
+ fun_l18_n981(x)
+ end
+end
+
+def fun_l17_n166(x)
+ if (x < 1)
+ fun_l18_n557(x)
+ else
+ fun_l18_n710(x)
+ end
+end
+
+def fun_l17_n167(x)
+ if (x < 1)
+ fun_l18_n763(x)
+ else
+ fun_l18_n900(x)
+ end
+end
+
+def fun_l17_n168(x)
+ if (x < 1)
+ fun_l18_n818(x)
+ else
+ fun_l18_n2(x)
+ end
+end
+
+def fun_l17_n169(x)
+ if (x < 1)
+ fun_l18_n68(x)
+ else
+ fun_l18_n894(x)
+ end
+end
+
+def fun_l17_n170(x)
+ if (x < 1)
+ fun_l18_n88(x)
+ else
+ fun_l18_n431(x)
+ end
+end
+
+def fun_l17_n171(x)
+ if (x < 1)
+ fun_l18_n530(x)
+ else
+ fun_l18_n714(x)
+ end
+end
+
+def fun_l17_n172(x)
+ if (x < 1)
+ fun_l18_n636(x)
+ else
+ fun_l18_n747(x)
+ end
+end
+
+def fun_l17_n173(x)
+ if (x < 1)
+ fun_l18_n481(x)
+ else
+ fun_l18_n804(x)
+ end
+end
+
+def fun_l17_n174(x)
+ if (x < 1)
+ fun_l18_n591(x)
+ else
+ fun_l18_n121(x)
+ end
+end
+
+def fun_l17_n175(x)
+ if (x < 1)
+ fun_l18_n320(x)
+ else
+ fun_l18_n881(x)
+ end
+end
+
+def fun_l17_n176(x)
+ if (x < 1)
+ fun_l18_n524(x)
+ else
+ fun_l18_n948(x)
+ end
+end
+
+def fun_l17_n177(x)
+ if (x < 1)
+ fun_l18_n540(x)
+ else
+ fun_l18_n508(x)
+ end
+end
+
+def fun_l17_n178(x)
+ if (x < 1)
+ fun_l18_n949(x)
+ else
+ fun_l18_n492(x)
+ end
+end
+
+def fun_l17_n179(x)
+ if (x < 1)
+ fun_l18_n548(x)
+ else
+ fun_l18_n534(x)
+ end
+end
+
+def fun_l17_n180(x)
+ if (x < 1)
+ fun_l18_n591(x)
+ else
+ fun_l18_n104(x)
+ end
+end
+
+def fun_l17_n181(x)
+ if (x < 1)
+ fun_l18_n727(x)
+ else
+ fun_l18_n144(x)
+ end
+end
+
+def fun_l17_n182(x)
+ if (x < 1)
+ fun_l18_n365(x)
+ else
+ fun_l18_n628(x)
+ end
+end
+
+def fun_l17_n183(x)
+ if (x < 1)
+ fun_l18_n32(x)
+ else
+ fun_l18_n752(x)
+ end
+end
+
+def fun_l17_n184(x)
+ if (x < 1)
+ fun_l18_n778(x)
+ else
+ fun_l18_n929(x)
+ end
+end
+
+def fun_l17_n185(x)
+ if (x < 1)
+ fun_l18_n797(x)
+ else
+ fun_l18_n525(x)
+ end
+end
+
+def fun_l17_n186(x)
+ if (x < 1)
+ fun_l18_n800(x)
+ else
+ fun_l18_n799(x)
+ end
+end
+
+def fun_l17_n187(x)
+ if (x < 1)
+ fun_l18_n974(x)
+ else
+ fun_l18_n982(x)
+ end
+end
+
+def fun_l17_n188(x)
+ if (x < 1)
+ fun_l18_n259(x)
+ else
+ fun_l18_n465(x)
+ end
+end
+
+def fun_l17_n189(x)
+ if (x < 1)
+ fun_l18_n905(x)
+ else
+ fun_l18_n477(x)
+ end
+end
+
+def fun_l17_n190(x)
+ if (x < 1)
+ fun_l18_n453(x)
+ else
+ fun_l18_n894(x)
+ end
+end
+
+def fun_l17_n191(x)
+ if (x < 1)
+ fun_l18_n461(x)
+ else
+ fun_l18_n251(x)
+ end
+end
+
+def fun_l17_n192(x)
+ if (x < 1)
+ fun_l18_n377(x)
+ else
+ fun_l18_n371(x)
+ end
+end
+
+def fun_l17_n193(x)
+ if (x < 1)
+ fun_l18_n252(x)
+ else
+ fun_l18_n493(x)
+ end
+end
+
+def fun_l17_n194(x)
+ if (x < 1)
+ fun_l18_n398(x)
+ else
+ fun_l18_n104(x)
+ end
+end
+
+def fun_l17_n195(x)
+ if (x < 1)
+ fun_l18_n791(x)
+ else
+ fun_l18_n4(x)
+ end
+end
+
+def fun_l17_n196(x)
+ if (x < 1)
+ fun_l18_n801(x)
+ else
+ fun_l18_n429(x)
+ end
+end
+
+def fun_l17_n197(x)
+ if (x < 1)
+ fun_l18_n106(x)
+ else
+ fun_l18_n622(x)
+ end
+end
+
+def fun_l17_n198(x)
+ if (x < 1)
+ fun_l18_n581(x)
+ else
+ fun_l18_n312(x)
+ end
+end
+
+def fun_l17_n199(x)
+ if (x < 1)
+ fun_l18_n142(x)
+ else
+ fun_l18_n296(x)
+ end
+end
+
+def fun_l17_n200(x)
+ if (x < 1)
+ fun_l18_n234(x)
+ else
+ fun_l18_n185(x)
+ end
+end
+
+def fun_l17_n201(x)
+ if (x < 1)
+ fun_l18_n486(x)
+ else
+ fun_l18_n857(x)
+ end
+end
+
+def fun_l17_n202(x)
+ if (x < 1)
+ fun_l18_n84(x)
+ else
+ fun_l18_n718(x)
+ end
+end
+
+def fun_l17_n203(x)
+ if (x < 1)
+ fun_l18_n830(x)
+ else
+ fun_l18_n618(x)
+ end
+end
+
+def fun_l17_n204(x)
+ if (x < 1)
+ fun_l18_n860(x)
+ else
+ fun_l18_n28(x)
+ end
+end
+
+def fun_l17_n205(x)
+ if (x < 1)
+ fun_l18_n244(x)
+ else
+ fun_l18_n575(x)
+ end
+end
+
+def fun_l17_n206(x)
+ if (x < 1)
+ fun_l18_n189(x)
+ else
+ fun_l18_n722(x)
+ end
+end
+
+def fun_l17_n207(x)
+ if (x < 1)
+ fun_l18_n164(x)
+ else
+ fun_l18_n197(x)
+ end
+end
+
+def fun_l17_n208(x)
+ if (x < 1)
+ fun_l18_n109(x)
+ else
+ fun_l18_n392(x)
+ end
+end
+
+def fun_l17_n209(x)
+ if (x < 1)
+ fun_l18_n629(x)
+ else
+ fun_l18_n290(x)
+ end
+end
+
+def fun_l17_n210(x)
+ if (x < 1)
+ fun_l18_n637(x)
+ else
+ fun_l18_n317(x)
+ end
+end
+
+def fun_l17_n211(x)
+ if (x < 1)
+ fun_l18_n148(x)
+ else
+ fun_l18_n702(x)
+ end
+end
+
+def fun_l17_n212(x)
+ if (x < 1)
+ fun_l18_n892(x)
+ else
+ fun_l18_n395(x)
+ end
+end
+
+def fun_l17_n213(x)
+ if (x < 1)
+ fun_l18_n457(x)
+ else
+ fun_l18_n859(x)
+ end
+end
+
+def fun_l17_n214(x)
+ if (x < 1)
+ fun_l18_n561(x)
+ else
+ fun_l18_n295(x)
+ end
+end
+
+def fun_l17_n215(x)
+ if (x < 1)
+ fun_l18_n459(x)
+ else
+ fun_l18_n407(x)
+ end
+end
+
+def fun_l17_n216(x)
+ if (x < 1)
+ fun_l18_n761(x)
+ else
+ fun_l18_n308(x)
+ end
+end
+
+def fun_l17_n217(x)
+ if (x < 1)
+ fun_l18_n350(x)
+ else
+ fun_l18_n680(x)
+ end
+end
+
+def fun_l17_n218(x)
+ if (x < 1)
+ fun_l18_n240(x)
+ else
+ fun_l18_n119(x)
+ end
+end
+
+def fun_l17_n219(x)
+ if (x < 1)
+ fun_l18_n538(x)
+ else
+ fun_l18_n732(x)
+ end
+end
+
+def fun_l17_n220(x)
+ if (x < 1)
+ fun_l18_n45(x)
+ else
+ fun_l18_n643(x)
+ end
+end
+
+def fun_l17_n221(x)
+ if (x < 1)
+ fun_l18_n258(x)
+ else
+ fun_l18_n690(x)
+ end
+end
+
+def fun_l17_n222(x)
+ if (x < 1)
+ fun_l18_n288(x)
+ else
+ fun_l18_n998(x)
+ end
+end
+
+def fun_l17_n223(x)
+ if (x < 1)
+ fun_l18_n591(x)
+ else
+ fun_l18_n278(x)
+ end
+end
+
+def fun_l17_n224(x)
+ if (x < 1)
+ fun_l18_n433(x)
+ else
+ fun_l18_n852(x)
+ end
+end
+
+def fun_l17_n225(x)
+ if (x < 1)
+ fun_l18_n51(x)
+ else
+ fun_l18_n837(x)
+ end
+end
+
+def fun_l17_n226(x)
+ if (x < 1)
+ fun_l18_n755(x)
+ else
+ fun_l18_n949(x)
+ end
+end
+
+def fun_l17_n227(x)
+ if (x < 1)
+ fun_l18_n566(x)
+ else
+ fun_l18_n754(x)
+ end
+end
+
+def fun_l17_n228(x)
+ if (x < 1)
+ fun_l18_n915(x)
+ else
+ fun_l18_n893(x)
+ end
+end
+
+def fun_l17_n229(x)
+ if (x < 1)
+ fun_l18_n990(x)
+ else
+ fun_l18_n208(x)
+ end
+end
+
+def fun_l17_n230(x)
+ if (x < 1)
+ fun_l18_n220(x)
+ else
+ fun_l18_n292(x)
+ end
+end
+
+def fun_l17_n231(x)
+ if (x < 1)
+ fun_l18_n39(x)
+ else
+ fun_l18_n211(x)
+ end
+end
+
+def fun_l17_n232(x)
+ if (x < 1)
+ fun_l18_n669(x)
+ else
+ fun_l18_n818(x)
+ end
+end
+
+def fun_l17_n233(x)
+ if (x < 1)
+ fun_l18_n804(x)
+ else
+ fun_l18_n400(x)
+ end
+end
+
+def fun_l17_n234(x)
+ if (x < 1)
+ fun_l18_n198(x)
+ else
+ fun_l18_n393(x)
+ end
+end
+
+def fun_l17_n235(x)
+ if (x < 1)
+ fun_l18_n154(x)
+ else
+ fun_l18_n980(x)
+ end
+end
+
+def fun_l17_n236(x)
+ if (x < 1)
+ fun_l18_n46(x)
+ else
+ fun_l18_n926(x)
+ end
+end
+
+def fun_l17_n237(x)
+ if (x < 1)
+ fun_l18_n158(x)
+ else
+ fun_l18_n364(x)
+ end
+end
+
+def fun_l17_n238(x)
+ if (x < 1)
+ fun_l18_n728(x)
+ else
+ fun_l18_n864(x)
+ end
+end
+
+def fun_l17_n239(x)
+ if (x < 1)
+ fun_l18_n793(x)
+ else
+ fun_l18_n985(x)
+ end
+end
+
+def fun_l17_n240(x)
+ if (x < 1)
+ fun_l18_n619(x)
+ else
+ fun_l18_n216(x)
+ end
+end
+
+def fun_l17_n241(x)
+ if (x < 1)
+ fun_l18_n338(x)
+ else
+ fun_l18_n289(x)
+ end
+end
+
+def fun_l17_n242(x)
+ if (x < 1)
+ fun_l18_n42(x)
+ else
+ fun_l18_n360(x)
+ end
+end
+
+def fun_l17_n243(x)
+ if (x < 1)
+ fun_l18_n883(x)
+ else
+ fun_l18_n243(x)
+ end
+end
+
+def fun_l17_n244(x)
+ if (x < 1)
+ fun_l18_n474(x)
+ else
+ fun_l18_n236(x)
+ end
+end
+
+def fun_l17_n245(x)
+ if (x < 1)
+ fun_l18_n694(x)
+ else
+ fun_l18_n579(x)
+ end
+end
+
+def fun_l17_n246(x)
+ if (x < 1)
+ fun_l18_n787(x)
+ else
+ fun_l18_n349(x)
+ end
+end
+
+def fun_l17_n247(x)
+ if (x < 1)
+ fun_l18_n140(x)
+ else
+ fun_l18_n894(x)
+ end
+end
+
+def fun_l17_n248(x)
+ if (x < 1)
+ fun_l18_n587(x)
+ else
+ fun_l18_n19(x)
+ end
+end
+
+def fun_l17_n249(x)
+ if (x < 1)
+ fun_l18_n7(x)
+ else
+ fun_l18_n352(x)
+ end
+end
+
+def fun_l17_n250(x)
+ if (x < 1)
+ fun_l18_n330(x)
+ else
+ fun_l18_n779(x)
+ end
+end
+
+def fun_l17_n251(x)
+ if (x < 1)
+ fun_l18_n655(x)
+ else
+ fun_l18_n45(x)
+ end
+end
+
+def fun_l17_n252(x)
+ if (x < 1)
+ fun_l18_n263(x)
+ else
+ fun_l18_n668(x)
+ end
+end
+
+def fun_l17_n253(x)
+ if (x < 1)
+ fun_l18_n799(x)
+ else
+ fun_l18_n141(x)
+ end
+end
+
+def fun_l17_n254(x)
+ if (x < 1)
+ fun_l18_n868(x)
+ else
+ fun_l18_n486(x)
+ end
+end
+
+def fun_l17_n255(x)
+ if (x < 1)
+ fun_l18_n238(x)
+ else
+ fun_l18_n298(x)
+ end
+end
+
+def fun_l17_n256(x)
+ if (x < 1)
+ fun_l18_n939(x)
+ else
+ fun_l18_n977(x)
+ end
+end
+
+def fun_l17_n257(x)
+ if (x < 1)
+ fun_l18_n999(x)
+ else
+ fun_l18_n241(x)
+ end
+end
+
+def fun_l17_n258(x)
+ if (x < 1)
+ fun_l18_n362(x)
+ else
+ fun_l18_n19(x)
+ end
+end
+
+def fun_l17_n259(x)
+ if (x < 1)
+ fun_l18_n166(x)
+ else
+ fun_l18_n550(x)
+ end
+end
+
+def fun_l17_n260(x)
+ if (x < 1)
+ fun_l18_n18(x)
+ else
+ fun_l18_n453(x)
+ end
+end
+
+def fun_l17_n261(x)
+ if (x < 1)
+ fun_l18_n590(x)
+ else
+ fun_l18_n217(x)
+ end
+end
+
+def fun_l17_n262(x)
+ if (x < 1)
+ fun_l18_n703(x)
+ else
+ fun_l18_n827(x)
+ end
+end
+
+def fun_l17_n263(x)
+ if (x < 1)
+ fun_l18_n911(x)
+ else
+ fun_l18_n869(x)
+ end
+end
+
+def fun_l17_n264(x)
+ if (x < 1)
+ fun_l18_n980(x)
+ else
+ fun_l18_n598(x)
+ end
+end
+
+def fun_l17_n265(x)
+ if (x < 1)
+ fun_l18_n751(x)
+ else
+ fun_l18_n298(x)
+ end
+end
+
+def fun_l17_n266(x)
+ if (x < 1)
+ fun_l18_n527(x)
+ else
+ fun_l18_n392(x)
+ end
+end
+
+def fun_l17_n267(x)
+ if (x < 1)
+ fun_l18_n257(x)
+ else
+ fun_l18_n731(x)
+ end
+end
+
+def fun_l17_n268(x)
+ if (x < 1)
+ fun_l18_n254(x)
+ else
+ fun_l18_n188(x)
+ end
+end
+
+def fun_l17_n269(x)
+ if (x < 1)
+ fun_l18_n145(x)
+ else
+ fun_l18_n987(x)
+ end
+end
+
+def fun_l17_n270(x)
+ if (x < 1)
+ fun_l18_n640(x)
+ else
+ fun_l18_n370(x)
+ end
+end
+
+def fun_l17_n271(x)
+ if (x < 1)
+ fun_l18_n767(x)
+ else
+ fun_l18_n246(x)
+ end
+end
+
+def fun_l17_n272(x)
+ if (x < 1)
+ fun_l18_n274(x)
+ else
+ fun_l18_n851(x)
+ end
+end
+
+def fun_l17_n273(x)
+ if (x < 1)
+ fun_l18_n12(x)
+ else
+ fun_l18_n48(x)
+ end
+end
+
+def fun_l17_n274(x)
+ if (x < 1)
+ fun_l18_n389(x)
+ else
+ fun_l18_n353(x)
+ end
+end
+
+def fun_l17_n275(x)
+ if (x < 1)
+ fun_l18_n966(x)
+ else
+ fun_l18_n248(x)
+ end
+end
+
+def fun_l17_n276(x)
+ if (x < 1)
+ fun_l18_n459(x)
+ else
+ fun_l18_n989(x)
+ end
+end
+
+def fun_l17_n277(x)
+ if (x < 1)
+ fun_l18_n416(x)
+ else
+ fun_l18_n976(x)
+ end
+end
+
+def fun_l17_n278(x)
+ if (x < 1)
+ fun_l18_n752(x)
+ else
+ fun_l18_n282(x)
+ end
+end
+
+def fun_l17_n279(x)
+ if (x < 1)
+ fun_l18_n774(x)
+ else
+ fun_l18_n478(x)
+ end
+end
+
+def fun_l17_n280(x)
+ if (x < 1)
+ fun_l18_n713(x)
+ else
+ fun_l18_n117(x)
+ end
+end
+
+def fun_l17_n281(x)
+ if (x < 1)
+ fun_l18_n365(x)
+ else
+ fun_l18_n932(x)
+ end
+end
+
+def fun_l17_n282(x)
+ if (x < 1)
+ fun_l18_n791(x)
+ else
+ fun_l18_n331(x)
+ end
+end
+
+def fun_l17_n283(x)
+ if (x < 1)
+ fun_l18_n955(x)
+ else
+ fun_l18_n847(x)
+ end
+end
+
+def fun_l17_n284(x)
+ if (x < 1)
+ fun_l18_n409(x)
+ else
+ fun_l18_n681(x)
+ end
+end
+
+def fun_l17_n285(x)
+ if (x < 1)
+ fun_l18_n185(x)
+ else
+ fun_l18_n651(x)
+ end
+end
+
+def fun_l17_n286(x)
+ if (x < 1)
+ fun_l18_n894(x)
+ else
+ fun_l18_n827(x)
+ end
+end
+
+def fun_l17_n287(x)
+ if (x < 1)
+ fun_l18_n788(x)
+ else
+ fun_l18_n794(x)
+ end
+end
+
+def fun_l17_n288(x)
+ if (x < 1)
+ fun_l18_n361(x)
+ else
+ fun_l18_n415(x)
+ end
+end
+
+def fun_l17_n289(x)
+ if (x < 1)
+ fun_l18_n357(x)
+ else
+ fun_l18_n375(x)
+ end
+end
+
+def fun_l17_n290(x)
+ if (x < 1)
+ fun_l18_n557(x)
+ else
+ fun_l18_n85(x)
+ end
+end
+
+def fun_l17_n291(x)
+ if (x < 1)
+ fun_l18_n490(x)
+ else
+ fun_l18_n260(x)
+ end
+end
+
+def fun_l17_n292(x)
+ if (x < 1)
+ fun_l18_n21(x)
+ else
+ fun_l18_n497(x)
+ end
+end
+
+def fun_l17_n293(x)
+ if (x < 1)
+ fun_l18_n716(x)
+ else
+ fun_l18_n94(x)
+ end
+end
+
+def fun_l17_n294(x)
+ if (x < 1)
+ fun_l18_n462(x)
+ else
+ fun_l18_n408(x)
+ end
+end
+
+def fun_l17_n295(x)
+ if (x < 1)
+ fun_l18_n87(x)
+ else
+ fun_l18_n732(x)
+ end
+end
+
+def fun_l17_n296(x)
+ if (x < 1)
+ fun_l18_n889(x)
+ else
+ fun_l18_n755(x)
+ end
+end
+
+def fun_l17_n297(x)
+ if (x < 1)
+ fun_l18_n539(x)
+ else
+ fun_l18_n130(x)
+ end
+end
+
+def fun_l17_n298(x)
+ if (x < 1)
+ fun_l18_n729(x)
+ else
+ fun_l18_n861(x)
+ end
+end
+
+def fun_l17_n299(x)
+ if (x < 1)
+ fun_l18_n605(x)
+ else
+ fun_l18_n408(x)
+ end
+end
+
+def fun_l17_n300(x)
+ if (x < 1)
+ fun_l18_n408(x)
+ else
+ fun_l18_n281(x)
+ end
+end
+
+def fun_l17_n301(x)
+ if (x < 1)
+ fun_l18_n793(x)
+ else
+ fun_l18_n188(x)
+ end
+end
+
+def fun_l17_n302(x)
+ if (x < 1)
+ fun_l18_n42(x)
+ else
+ fun_l18_n970(x)
+ end
+end
+
+def fun_l17_n303(x)
+ if (x < 1)
+ fun_l18_n904(x)
+ else
+ fun_l18_n630(x)
+ end
+end
+
+def fun_l17_n304(x)
+ if (x < 1)
+ fun_l18_n142(x)
+ else
+ fun_l18_n366(x)
+ end
+end
+
+def fun_l17_n305(x)
+ if (x < 1)
+ fun_l18_n242(x)
+ else
+ fun_l18_n111(x)
+ end
+end
+
+def fun_l17_n306(x)
+ if (x < 1)
+ fun_l18_n184(x)
+ else
+ fun_l18_n301(x)
+ end
+end
+
+def fun_l17_n307(x)
+ if (x < 1)
+ fun_l18_n297(x)
+ else
+ fun_l18_n722(x)
+ end
+end
+
+def fun_l17_n308(x)
+ if (x < 1)
+ fun_l18_n608(x)
+ else
+ fun_l18_n502(x)
+ end
+end
+
+def fun_l17_n309(x)
+ if (x < 1)
+ fun_l18_n513(x)
+ else
+ fun_l18_n828(x)
+ end
+end
+
+def fun_l17_n310(x)
+ if (x < 1)
+ fun_l18_n5(x)
+ else
+ fun_l18_n638(x)
+ end
+end
+
+def fun_l17_n311(x)
+ if (x < 1)
+ fun_l18_n404(x)
+ else
+ fun_l18_n510(x)
+ end
+end
+
+def fun_l17_n312(x)
+ if (x < 1)
+ fun_l18_n961(x)
+ else
+ fun_l18_n526(x)
+ end
+end
+
+def fun_l17_n313(x)
+ if (x < 1)
+ fun_l18_n795(x)
+ else
+ fun_l18_n24(x)
+ end
+end
+
+def fun_l17_n314(x)
+ if (x < 1)
+ fun_l18_n505(x)
+ else
+ fun_l18_n526(x)
+ end
+end
+
+def fun_l17_n315(x)
+ if (x < 1)
+ fun_l18_n458(x)
+ else
+ fun_l18_n767(x)
+ end
+end
+
+def fun_l17_n316(x)
+ if (x < 1)
+ fun_l18_n778(x)
+ else
+ fun_l18_n972(x)
+ end
+end
+
+def fun_l17_n317(x)
+ if (x < 1)
+ fun_l18_n734(x)
+ else
+ fun_l18_n289(x)
+ end
+end
+
+def fun_l17_n318(x)
+ if (x < 1)
+ fun_l18_n950(x)
+ else
+ fun_l18_n507(x)
+ end
+end
+
+def fun_l17_n319(x)
+ if (x < 1)
+ fun_l18_n597(x)
+ else
+ fun_l18_n697(x)
+ end
+end
+
+def fun_l17_n320(x)
+ if (x < 1)
+ fun_l18_n270(x)
+ else
+ fun_l18_n323(x)
+ end
+end
+
+def fun_l17_n321(x)
+ if (x < 1)
+ fun_l18_n558(x)
+ else
+ fun_l18_n357(x)
+ end
+end
+
+def fun_l17_n322(x)
+ if (x < 1)
+ fun_l18_n948(x)
+ else
+ fun_l18_n726(x)
+ end
+end
+
+def fun_l17_n323(x)
+ if (x < 1)
+ fun_l18_n787(x)
+ else
+ fun_l18_n89(x)
+ end
+end
+
+def fun_l17_n324(x)
+ if (x < 1)
+ fun_l18_n894(x)
+ else
+ fun_l18_n454(x)
+ end
+end
+
+def fun_l17_n325(x)
+ if (x < 1)
+ fun_l18_n173(x)
+ else
+ fun_l18_n815(x)
+ end
+end
+
+def fun_l17_n326(x)
+ if (x < 1)
+ fun_l18_n102(x)
+ else
+ fun_l18_n261(x)
+ end
+end
+
+def fun_l17_n327(x)
+ if (x < 1)
+ fun_l18_n83(x)
+ else
+ fun_l18_n732(x)
+ end
+end
+
+def fun_l17_n328(x)
+ if (x < 1)
+ fun_l18_n675(x)
+ else
+ fun_l18_n186(x)
+ end
+end
+
+def fun_l17_n329(x)
+ if (x < 1)
+ fun_l18_n783(x)
+ else
+ fun_l18_n481(x)
+ end
+end
+
+def fun_l17_n330(x)
+ if (x < 1)
+ fun_l18_n828(x)
+ else
+ fun_l18_n829(x)
+ end
+end
+
+def fun_l17_n331(x)
+ if (x < 1)
+ fun_l18_n195(x)
+ else
+ fun_l18_n264(x)
+ end
+end
+
+def fun_l17_n332(x)
+ if (x < 1)
+ fun_l18_n842(x)
+ else
+ fun_l18_n198(x)
+ end
+end
+
+def fun_l17_n333(x)
+ if (x < 1)
+ fun_l18_n549(x)
+ else
+ fun_l18_n208(x)
+ end
+end
+
+def fun_l17_n334(x)
+ if (x < 1)
+ fun_l18_n976(x)
+ else
+ fun_l18_n316(x)
+ end
+end
+
+def fun_l17_n335(x)
+ if (x < 1)
+ fun_l18_n401(x)
+ else
+ fun_l18_n105(x)
+ end
+end
+
+def fun_l17_n336(x)
+ if (x < 1)
+ fun_l18_n357(x)
+ else
+ fun_l18_n54(x)
+ end
+end
+
+def fun_l17_n337(x)
+ if (x < 1)
+ fun_l18_n685(x)
+ else
+ fun_l18_n140(x)
+ end
+end
+
+def fun_l17_n338(x)
+ if (x < 1)
+ fun_l18_n301(x)
+ else
+ fun_l18_n167(x)
+ end
+end
+
+def fun_l17_n339(x)
+ if (x < 1)
+ fun_l18_n398(x)
+ else
+ fun_l18_n643(x)
+ end
+end
+
+def fun_l17_n340(x)
+ if (x < 1)
+ fun_l18_n147(x)
+ else
+ fun_l18_n27(x)
+ end
+end
+
+def fun_l17_n341(x)
+ if (x < 1)
+ fun_l18_n813(x)
+ else
+ fun_l18_n935(x)
+ end
+end
+
+def fun_l17_n342(x)
+ if (x < 1)
+ fun_l18_n319(x)
+ else
+ fun_l18_n429(x)
+ end
+end
+
+def fun_l17_n343(x)
+ if (x < 1)
+ fun_l18_n957(x)
+ else
+ fun_l18_n961(x)
+ end
+end
+
+def fun_l17_n344(x)
+ if (x < 1)
+ fun_l18_n380(x)
+ else
+ fun_l18_n604(x)
+ end
+end
+
+def fun_l17_n345(x)
+ if (x < 1)
+ fun_l18_n321(x)
+ else
+ fun_l18_n473(x)
+ end
+end
+
+def fun_l17_n346(x)
+ if (x < 1)
+ fun_l18_n346(x)
+ else
+ fun_l18_n752(x)
+ end
+end
+
+def fun_l17_n347(x)
+ if (x < 1)
+ fun_l18_n645(x)
+ else
+ fun_l18_n511(x)
+ end
+end
+
+def fun_l17_n348(x)
+ if (x < 1)
+ fun_l18_n647(x)
+ else
+ fun_l18_n997(x)
+ end
+end
+
+def fun_l17_n349(x)
+ if (x < 1)
+ fun_l18_n291(x)
+ else
+ fun_l18_n580(x)
+ end
+end
+
+def fun_l17_n350(x)
+ if (x < 1)
+ fun_l18_n745(x)
+ else
+ fun_l18_n402(x)
+ end
+end
+
+def fun_l17_n351(x)
+ if (x < 1)
+ fun_l18_n533(x)
+ else
+ fun_l18_n117(x)
+ end
+end
+
+def fun_l17_n352(x)
+ if (x < 1)
+ fun_l18_n490(x)
+ else
+ fun_l18_n458(x)
+ end
+end
+
+def fun_l17_n353(x)
+ if (x < 1)
+ fun_l18_n526(x)
+ else
+ fun_l18_n311(x)
+ end
+end
+
+def fun_l17_n354(x)
+ if (x < 1)
+ fun_l18_n315(x)
+ else
+ fun_l18_n306(x)
+ end
+end
+
+def fun_l17_n355(x)
+ if (x < 1)
+ fun_l18_n349(x)
+ else
+ fun_l18_n975(x)
+ end
+end
+
+def fun_l17_n356(x)
+ if (x < 1)
+ fun_l18_n764(x)
+ else
+ fun_l18_n897(x)
+ end
+end
+
+def fun_l17_n357(x)
+ if (x < 1)
+ fun_l18_n308(x)
+ else
+ fun_l18_n662(x)
+ end
+end
+
+def fun_l17_n358(x)
+ if (x < 1)
+ fun_l18_n7(x)
+ else
+ fun_l18_n807(x)
+ end
+end
+
+def fun_l17_n359(x)
+ if (x < 1)
+ fun_l18_n896(x)
+ else
+ fun_l18_n277(x)
+ end
+end
+
+def fun_l17_n360(x)
+ if (x < 1)
+ fun_l18_n606(x)
+ else
+ fun_l18_n605(x)
+ end
+end
+
+def fun_l17_n361(x)
+ if (x < 1)
+ fun_l18_n971(x)
+ else
+ fun_l18_n59(x)
+ end
+end
+
+def fun_l17_n362(x)
+ if (x < 1)
+ fun_l18_n304(x)
+ else
+ fun_l18_n604(x)
+ end
+end
+
+def fun_l17_n363(x)
+ if (x < 1)
+ fun_l18_n607(x)
+ else
+ fun_l18_n758(x)
+ end
+end
+
+def fun_l17_n364(x)
+ if (x < 1)
+ fun_l18_n454(x)
+ else
+ fun_l18_n635(x)
+ end
+end
+
+def fun_l17_n365(x)
+ if (x < 1)
+ fun_l18_n287(x)
+ else
+ fun_l18_n979(x)
+ end
+end
+
+def fun_l17_n366(x)
+ if (x < 1)
+ fun_l18_n708(x)
+ else
+ fun_l18_n480(x)
+ end
+end
+
+def fun_l17_n367(x)
+ if (x < 1)
+ fun_l18_n925(x)
+ else
+ fun_l18_n96(x)
+ end
+end
+
+def fun_l17_n368(x)
+ if (x < 1)
+ fun_l18_n756(x)
+ else
+ fun_l18_n765(x)
+ end
+end
+
+def fun_l17_n369(x)
+ if (x < 1)
+ fun_l18_n134(x)
+ else
+ fun_l18_n320(x)
+ end
+end
+
+def fun_l17_n370(x)
+ if (x < 1)
+ fun_l18_n167(x)
+ else
+ fun_l18_n112(x)
+ end
+end
+
+def fun_l17_n371(x)
+ if (x < 1)
+ fun_l18_n393(x)
+ else
+ fun_l18_n701(x)
+ end
+end
+
+def fun_l17_n372(x)
+ if (x < 1)
+ fun_l18_n363(x)
+ else
+ fun_l18_n934(x)
+ end
+end
+
+def fun_l17_n373(x)
+ if (x < 1)
+ fun_l18_n431(x)
+ else
+ fun_l18_n343(x)
+ end
+end
+
+def fun_l17_n374(x)
+ if (x < 1)
+ fun_l18_n111(x)
+ else
+ fun_l18_n689(x)
+ end
+end
+
+def fun_l17_n375(x)
+ if (x < 1)
+ fun_l18_n609(x)
+ else
+ fun_l18_n814(x)
+ end
+end
+
+def fun_l17_n376(x)
+ if (x < 1)
+ fun_l18_n9(x)
+ else
+ fun_l18_n711(x)
+ end
+end
+
+def fun_l17_n377(x)
+ if (x < 1)
+ fun_l18_n270(x)
+ else
+ fun_l18_n455(x)
+ end
+end
+
+def fun_l17_n378(x)
+ if (x < 1)
+ fun_l18_n432(x)
+ else
+ fun_l18_n348(x)
+ end
+end
+
+def fun_l17_n379(x)
+ if (x < 1)
+ fun_l18_n646(x)
+ else
+ fun_l18_n934(x)
+ end
+end
+
+def fun_l17_n380(x)
+ if (x < 1)
+ fun_l18_n737(x)
+ else
+ fun_l18_n472(x)
+ end
+end
+
+def fun_l17_n381(x)
+ if (x < 1)
+ fun_l18_n163(x)
+ else
+ fun_l18_n533(x)
+ end
+end
+
+def fun_l17_n382(x)
+ if (x < 1)
+ fun_l18_n71(x)
+ else
+ fun_l18_n343(x)
+ end
+end
+
+def fun_l17_n383(x)
+ if (x < 1)
+ fun_l18_n52(x)
+ else
+ fun_l18_n0(x)
+ end
+end
+
+def fun_l17_n384(x)
+ if (x < 1)
+ fun_l18_n708(x)
+ else
+ fun_l18_n616(x)
+ end
+end
+
+def fun_l17_n385(x)
+ if (x < 1)
+ fun_l18_n525(x)
+ else
+ fun_l18_n818(x)
+ end
+end
+
+def fun_l17_n386(x)
+ if (x < 1)
+ fun_l18_n154(x)
+ else
+ fun_l18_n588(x)
+ end
+end
+
+def fun_l17_n387(x)
+ if (x < 1)
+ fun_l18_n295(x)
+ else
+ fun_l18_n462(x)
+ end
+end
+
+def fun_l17_n388(x)
+ if (x < 1)
+ fun_l18_n331(x)
+ else
+ fun_l18_n773(x)
+ end
+end
+
+def fun_l17_n389(x)
+ if (x < 1)
+ fun_l18_n221(x)
+ else
+ fun_l18_n168(x)
+ end
+end
+
+def fun_l17_n390(x)
+ if (x < 1)
+ fun_l18_n575(x)
+ else
+ fun_l18_n284(x)
+ end
+end
+
+def fun_l17_n391(x)
+ if (x < 1)
+ fun_l18_n936(x)
+ else
+ fun_l18_n71(x)
+ end
+end
+
+def fun_l17_n392(x)
+ if (x < 1)
+ fun_l18_n123(x)
+ else
+ fun_l18_n863(x)
+ end
+end
+
+def fun_l17_n393(x)
+ if (x < 1)
+ fun_l18_n664(x)
+ else
+ fun_l18_n189(x)
+ end
+end
+
+def fun_l17_n394(x)
+ if (x < 1)
+ fun_l18_n456(x)
+ else
+ fun_l18_n476(x)
+ end
+end
+
+def fun_l17_n395(x)
+ if (x < 1)
+ fun_l18_n557(x)
+ else
+ fun_l18_n877(x)
+ end
+end
+
+def fun_l17_n396(x)
+ if (x < 1)
+ fun_l18_n192(x)
+ else
+ fun_l18_n312(x)
+ end
+end
+
+def fun_l17_n397(x)
+ if (x < 1)
+ fun_l18_n87(x)
+ else
+ fun_l18_n56(x)
+ end
+end
+
+def fun_l17_n398(x)
+ if (x < 1)
+ fun_l18_n769(x)
+ else
+ fun_l18_n597(x)
+ end
+end
+
+def fun_l17_n399(x)
+ if (x < 1)
+ fun_l18_n534(x)
+ else
+ fun_l18_n366(x)
+ end
+end
+
+def fun_l17_n400(x)
+ if (x < 1)
+ fun_l18_n284(x)
+ else
+ fun_l18_n503(x)
+ end
+end
+
+def fun_l17_n401(x)
+ if (x < 1)
+ fun_l18_n655(x)
+ else
+ fun_l18_n242(x)
+ end
+end
+
+def fun_l17_n402(x)
+ if (x < 1)
+ fun_l18_n491(x)
+ else
+ fun_l18_n81(x)
+ end
+end
+
+def fun_l17_n403(x)
+ if (x < 1)
+ fun_l18_n861(x)
+ else
+ fun_l18_n372(x)
+ end
+end
+
+def fun_l17_n404(x)
+ if (x < 1)
+ fun_l18_n600(x)
+ else
+ fun_l18_n692(x)
+ end
+end
+
+def fun_l17_n405(x)
+ if (x < 1)
+ fun_l18_n336(x)
+ else
+ fun_l18_n778(x)
+ end
+end
+
+def fun_l17_n406(x)
+ if (x < 1)
+ fun_l18_n224(x)
+ else
+ fun_l18_n277(x)
+ end
+end
+
+def fun_l17_n407(x)
+ if (x < 1)
+ fun_l18_n630(x)
+ else
+ fun_l18_n861(x)
+ end
+end
+
+def fun_l17_n408(x)
+ if (x < 1)
+ fun_l18_n829(x)
+ else
+ fun_l18_n213(x)
+ end
+end
+
+def fun_l17_n409(x)
+ if (x < 1)
+ fun_l18_n325(x)
+ else
+ fun_l18_n599(x)
+ end
+end
+
+def fun_l17_n410(x)
+ if (x < 1)
+ fun_l18_n850(x)
+ else
+ fun_l18_n828(x)
+ end
+end
+
+def fun_l17_n411(x)
+ if (x < 1)
+ fun_l18_n557(x)
+ else
+ fun_l18_n757(x)
+ end
+end
+
+def fun_l17_n412(x)
+ if (x < 1)
+ fun_l18_n755(x)
+ else
+ fun_l18_n474(x)
+ end
+end
+
+def fun_l17_n413(x)
+ if (x < 1)
+ fun_l18_n945(x)
+ else
+ fun_l18_n113(x)
+ end
+end
+
+def fun_l17_n414(x)
+ if (x < 1)
+ fun_l18_n584(x)
+ else
+ fun_l18_n815(x)
+ end
+end
+
+def fun_l17_n415(x)
+ if (x < 1)
+ fun_l18_n136(x)
+ else
+ fun_l18_n997(x)
+ end
+end
+
+def fun_l17_n416(x)
+ if (x < 1)
+ fun_l18_n57(x)
+ else
+ fun_l18_n361(x)
+ end
+end
+
+def fun_l17_n417(x)
+ if (x < 1)
+ fun_l18_n3(x)
+ else
+ fun_l18_n882(x)
+ end
+end
+
+def fun_l17_n418(x)
+ if (x < 1)
+ fun_l18_n578(x)
+ else
+ fun_l18_n719(x)
+ end
+end
+
+def fun_l17_n419(x)
+ if (x < 1)
+ fun_l18_n426(x)
+ else
+ fun_l18_n958(x)
+ end
+end
+
+def fun_l17_n420(x)
+ if (x < 1)
+ fun_l18_n384(x)
+ else
+ fun_l18_n182(x)
+ end
+end
+
+def fun_l17_n421(x)
+ if (x < 1)
+ fun_l18_n458(x)
+ else
+ fun_l18_n314(x)
+ end
+end
+
+def fun_l17_n422(x)
+ if (x < 1)
+ fun_l18_n641(x)
+ else
+ fun_l18_n678(x)
+ end
+end
+
+def fun_l17_n423(x)
+ if (x < 1)
+ fun_l18_n790(x)
+ else
+ fun_l18_n830(x)
+ end
+end
+
+def fun_l17_n424(x)
+ if (x < 1)
+ fun_l18_n207(x)
+ else
+ fun_l18_n686(x)
+ end
+end
+
+def fun_l17_n425(x)
+ if (x < 1)
+ fun_l18_n847(x)
+ else
+ fun_l18_n387(x)
+ end
+end
+
+def fun_l17_n426(x)
+ if (x < 1)
+ fun_l18_n744(x)
+ else
+ fun_l18_n9(x)
+ end
+end
+
+def fun_l17_n427(x)
+ if (x < 1)
+ fun_l18_n446(x)
+ else
+ fun_l18_n533(x)
+ end
+end
+
+def fun_l17_n428(x)
+ if (x < 1)
+ fun_l18_n910(x)
+ else
+ fun_l18_n749(x)
+ end
+end
+
+def fun_l17_n429(x)
+ if (x < 1)
+ fun_l18_n918(x)
+ else
+ fun_l18_n260(x)
+ end
+end
+
+def fun_l17_n430(x)
+ if (x < 1)
+ fun_l18_n812(x)
+ else
+ fun_l18_n545(x)
+ end
+end
+
+def fun_l17_n431(x)
+ if (x < 1)
+ fun_l18_n191(x)
+ else
+ fun_l18_n260(x)
+ end
+end
+
+def fun_l17_n432(x)
+ if (x < 1)
+ fun_l18_n155(x)
+ else
+ fun_l18_n582(x)
+ end
+end
+
+def fun_l17_n433(x)
+ if (x < 1)
+ fun_l18_n374(x)
+ else
+ fun_l18_n991(x)
+ end
+end
+
+def fun_l17_n434(x)
+ if (x < 1)
+ fun_l18_n611(x)
+ else
+ fun_l18_n334(x)
+ end
+end
+
+def fun_l17_n435(x)
+ if (x < 1)
+ fun_l18_n876(x)
+ else
+ fun_l18_n386(x)
+ end
+end
+
+def fun_l17_n436(x)
+ if (x < 1)
+ fun_l18_n985(x)
+ else
+ fun_l18_n874(x)
+ end
+end
+
+def fun_l17_n437(x)
+ if (x < 1)
+ fun_l18_n715(x)
+ else
+ fun_l18_n52(x)
+ end
+end
+
+def fun_l17_n438(x)
+ if (x < 1)
+ fun_l18_n53(x)
+ else
+ fun_l18_n15(x)
+ end
+end
+
+def fun_l17_n439(x)
+ if (x < 1)
+ fun_l18_n689(x)
+ else
+ fun_l18_n498(x)
+ end
+end
+
+def fun_l17_n440(x)
+ if (x < 1)
+ fun_l18_n990(x)
+ else
+ fun_l18_n70(x)
+ end
+end
+
+def fun_l17_n441(x)
+ if (x < 1)
+ fun_l18_n369(x)
+ else
+ fun_l18_n327(x)
+ end
+end
+
+def fun_l17_n442(x)
+ if (x < 1)
+ fun_l18_n157(x)
+ else
+ fun_l18_n917(x)
+ end
+end
+
+def fun_l17_n443(x)
+ if (x < 1)
+ fun_l18_n822(x)
+ else
+ fun_l18_n472(x)
+ end
+end
+
+def fun_l17_n444(x)
+ if (x < 1)
+ fun_l18_n465(x)
+ else
+ fun_l18_n19(x)
+ end
+end
+
+def fun_l17_n445(x)
+ if (x < 1)
+ fun_l18_n543(x)
+ else
+ fun_l18_n499(x)
+ end
+end
+
+def fun_l17_n446(x)
+ if (x < 1)
+ fun_l18_n662(x)
+ else
+ fun_l18_n531(x)
+ end
+end
+
+def fun_l17_n447(x)
+ if (x < 1)
+ fun_l18_n452(x)
+ else
+ fun_l18_n150(x)
+ end
+end
+
+def fun_l17_n448(x)
+ if (x < 1)
+ fun_l18_n438(x)
+ else
+ fun_l18_n552(x)
+ end
+end
+
+def fun_l17_n449(x)
+ if (x < 1)
+ fun_l18_n23(x)
+ else
+ fun_l18_n89(x)
+ end
+end
+
+def fun_l17_n450(x)
+ if (x < 1)
+ fun_l18_n896(x)
+ else
+ fun_l18_n313(x)
+ end
+end
+
+def fun_l17_n451(x)
+ if (x < 1)
+ fun_l18_n221(x)
+ else
+ fun_l18_n622(x)
+ end
+end
+
+def fun_l17_n452(x)
+ if (x < 1)
+ fun_l18_n347(x)
+ else
+ fun_l18_n43(x)
+ end
+end
+
+def fun_l17_n453(x)
+ if (x < 1)
+ fun_l18_n695(x)
+ else
+ fun_l18_n5(x)
+ end
+end
+
+def fun_l17_n454(x)
+ if (x < 1)
+ fun_l18_n829(x)
+ else
+ fun_l18_n409(x)
+ end
+end
+
+def fun_l17_n455(x)
+ if (x < 1)
+ fun_l18_n398(x)
+ else
+ fun_l18_n906(x)
+ end
+end
+
+def fun_l17_n456(x)
+ if (x < 1)
+ fun_l18_n983(x)
+ else
+ fun_l18_n235(x)
+ end
+end
+
+def fun_l17_n457(x)
+ if (x < 1)
+ fun_l18_n542(x)
+ else
+ fun_l18_n819(x)
+ end
+end
+
+def fun_l17_n458(x)
+ if (x < 1)
+ fun_l18_n952(x)
+ else
+ fun_l18_n123(x)
+ end
+end
+
+def fun_l17_n459(x)
+ if (x < 1)
+ fun_l18_n249(x)
+ else
+ fun_l18_n525(x)
+ end
+end
+
+def fun_l17_n460(x)
+ if (x < 1)
+ fun_l18_n833(x)
+ else
+ fun_l18_n657(x)
+ end
+end
+
+def fun_l17_n461(x)
+ if (x < 1)
+ fun_l18_n847(x)
+ else
+ fun_l18_n396(x)
+ end
+end
+
+def fun_l17_n462(x)
+ if (x < 1)
+ fun_l18_n611(x)
+ else
+ fun_l18_n790(x)
+ end
+end
+
+def fun_l17_n463(x)
+ if (x < 1)
+ fun_l18_n944(x)
+ else
+ fun_l18_n655(x)
+ end
+end
+
+def fun_l17_n464(x)
+ if (x < 1)
+ fun_l18_n688(x)
+ else
+ fun_l18_n804(x)
+ end
+end
+
+def fun_l17_n465(x)
+ if (x < 1)
+ fun_l18_n29(x)
+ else
+ fun_l18_n324(x)
+ end
+end
+
+def fun_l17_n466(x)
+ if (x < 1)
+ fun_l18_n496(x)
+ else
+ fun_l18_n76(x)
+ end
+end
+
+def fun_l17_n467(x)
+ if (x < 1)
+ fun_l18_n317(x)
+ else
+ fun_l18_n241(x)
+ end
+end
+
+def fun_l17_n468(x)
+ if (x < 1)
+ fun_l18_n759(x)
+ else
+ fun_l18_n516(x)
+ end
+end
+
+def fun_l17_n469(x)
+ if (x < 1)
+ fun_l18_n430(x)
+ else
+ fun_l18_n355(x)
+ end
+end
+
+def fun_l17_n470(x)
+ if (x < 1)
+ fun_l18_n683(x)
+ else
+ fun_l18_n16(x)
+ end
+end
+
+def fun_l17_n471(x)
+ if (x < 1)
+ fun_l18_n46(x)
+ else
+ fun_l18_n216(x)
+ end
+end
+
+def fun_l17_n472(x)
+ if (x < 1)
+ fun_l18_n460(x)
+ else
+ fun_l18_n460(x)
+ end
+end
+
+def fun_l17_n473(x)
+ if (x < 1)
+ fun_l18_n120(x)
+ else
+ fun_l18_n189(x)
+ end
+end
+
+def fun_l17_n474(x)
+ if (x < 1)
+ fun_l18_n663(x)
+ else
+ fun_l18_n732(x)
+ end
+end
+
+def fun_l17_n475(x)
+ if (x < 1)
+ fun_l18_n441(x)
+ else
+ fun_l18_n460(x)
+ end
+end
+
+def fun_l17_n476(x)
+ if (x < 1)
+ fun_l18_n759(x)
+ else
+ fun_l18_n533(x)
+ end
+end
+
+def fun_l17_n477(x)
+ if (x < 1)
+ fun_l18_n105(x)
+ else
+ fun_l18_n671(x)
+ end
+end
+
+def fun_l17_n478(x)
+ if (x < 1)
+ fun_l18_n849(x)
+ else
+ fun_l18_n316(x)
+ end
+end
+
+def fun_l17_n479(x)
+ if (x < 1)
+ fun_l18_n482(x)
+ else
+ fun_l18_n502(x)
+ end
+end
+
+def fun_l17_n480(x)
+ if (x < 1)
+ fun_l18_n335(x)
+ else
+ fun_l18_n795(x)
+ end
+end
+
+def fun_l17_n481(x)
+ if (x < 1)
+ fun_l18_n168(x)
+ else
+ fun_l18_n799(x)
+ end
+end
+
+def fun_l17_n482(x)
+ if (x < 1)
+ fun_l18_n981(x)
+ else
+ fun_l18_n633(x)
+ end
+end
+
+def fun_l17_n483(x)
+ if (x < 1)
+ fun_l18_n873(x)
+ else
+ fun_l18_n723(x)
+ end
+end
+
+def fun_l17_n484(x)
+ if (x < 1)
+ fun_l18_n448(x)
+ else
+ fun_l18_n954(x)
+ end
+end
+
+def fun_l17_n485(x)
+ if (x < 1)
+ fun_l18_n421(x)
+ else
+ fun_l18_n802(x)
+ end
+end
+
+def fun_l17_n486(x)
+ if (x < 1)
+ fun_l18_n477(x)
+ else
+ fun_l18_n976(x)
+ end
+end
+
+def fun_l17_n487(x)
+ if (x < 1)
+ fun_l18_n53(x)
+ else
+ fun_l18_n298(x)
+ end
+end
+
+def fun_l17_n488(x)
+ if (x < 1)
+ fun_l18_n733(x)
+ else
+ fun_l18_n585(x)
+ end
+end
+
+def fun_l17_n489(x)
+ if (x < 1)
+ fun_l18_n684(x)
+ else
+ fun_l18_n537(x)
+ end
+end
+
+def fun_l17_n490(x)
+ if (x < 1)
+ fun_l18_n409(x)
+ else
+ fun_l18_n178(x)
+ end
+end
+
+def fun_l17_n491(x)
+ if (x < 1)
+ fun_l18_n335(x)
+ else
+ fun_l18_n255(x)
+ end
+end
+
+def fun_l17_n492(x)
+ if (x < 1)
+ fun_l18_n798(x)
+ else
+ fun_l18_n398(x)
+ end
+end
+
+def fun_l17_n493(x)
+ if (x < 1)
+ fun_l18_n112(x)
+ else
+ fun_l18_n83(x)
+ end
+end
+
+def fun_l17_n494(x)
+ if (x < 1)
+ fun_l18_n888(x)
+ else
+ fun_l18_n136(x)
+ end
+end
+
+def fun_l17_n495(x)
+ if (x < 1)
+ fun_l18_n726(x)
+ else
+ fun_l18_n678(x)
+ end
+end
+
+def fun_l17_n496(x)
+ if (x < 1)
+ fun_l18_n224(x)
+ else
+ fun_l18_n625(x)
+ end
+end
+
+def fun_l17_n497(x)
+ if (x < 1)
+ fun_l18_n772(x)
+ else
+ fun_l18_n14(x)
+ end
+end
+
+def fun_l17_n498(x)
+ if (x < 1)
+ fun_l18_n646(x)
+ else
+ fun_l18_n758(x)
+ end
+end
+
+def fun_l17_n499(x)
+ if (x < 1)
+ fun_l18_n961(x)
+ else
+ fun_l18_n570(x)
+ end
+end
+
+def fun_l17_n500(x)
+ if (x < 1)
+ fun_l18_n368(x)
+ else
+ fun_l18_n681(x)
+ end
+end
+
+def fun_l17_n501(x)
+ if (x < 1)
+ fun_l18_n768(x)
+ else
+ fun_l18_n747(x)
+ end
+end
+
+def fun_l17_n502(x)
+ if (x < 1)
+ fun_l18_n957(x)
+ else
+ fun_l18_n851(x)
+ end
+end
+
+def fun_l17_n503(x)
+ if (x < 1)
+ fun_l18_n669(x)
+ else
+ fun_l18_n939(x)
+ end
+end
+
+def fun_l17_n504(x)
+ if (x < 1)
+ fun_l18_n969(x)
+ else
+ fun_l18_n899(x)
+ end
+end
+
+def fun_l17_n505(x)
+ if (x < 1)
+ fun_l18_n756(x)
+ else
+ fun_l18_n29(x)
+ end
+end
+
+def fun_l17_n506(x)
+ if (x < 1)
+ fun_l18_n92(x)
+ else
+ fun_l18_n230(x)
+ end
+end
+
+def fun_l17_n507(x)
+ if (x < 1)
+ fun_l18_n670(x)
+ else
+ fun_l18_n744(x)
+ end
+end
+
+def fun_l17_n508(x)
+ if (x < 1)
+ fun_l18_n646(x)
+ else
+ fun_l18_n900(x)
+ end
+end
+
+def fun_l17_n509(x)
+ if (x < 1)
+ fun_l18_n480(x)
+ else
+ fun_l18_n6(x)
+ end
+end
+
+def fun_l17_n510(x)
+ if (x < 1)
+ fun_l18_n141(x)
+ else
+ fun_l18_n735(x)
+ end
+end
+
+def fun_l17_n511(x)
+ if (x < 1)
+ fun_l18_n622(x)
+ else
+ fun_l18_n617(x)
+ end
+end
+
+def fun_l17_n512(x)
+ if (x < 1)
+ fun_l18_n491(x)
+ else
+ fun_l18_n154(x)
+ end
+end
+
+def fun_l17_n513(x)
+ if (x < 1)
+ fun_l18_n931(x)
+ else
+ fun_l18_n730(x)
+ end
+end
+
+def fun_l17_n514(x)
+ if (x < 1)
+ fun_l18_n935(x)
+ else
+ fun_l18_n51(x)
+ end
+end
+
+def fun_l17_n515(x)
+ if (x < 1)
+ fun_l18_n751(x)
+ else
+ fun_l18_n786(x)
+ end
+end
+
+def fun_l17_n516(x)
+ if (x < 1)
+ fun_l18_n538(x)
+ else
+ fun_l18_n630(x)
+ end
+end
+
+def fun_l17_n517(x)
+ if (x < 1)
+ fun_l18_n832(x)
+ else
+ fun_l18_n932(x)
+ end
+end
+
+def fun_l17_n518(x)
+ if (x < 1)
+ fun_l18_n572(x)
+ else
+ fun_l18_n408(x)
+ end
+end
+
+def fun_l17_n519(x)
+ if (x < 1)
+ fun_l18_n961(x)
+ else
+ fun_l18_n820(x)
+ end
+end
+
+def fun_l17_n520(x)
+ if (x < 1)
+ fun_l18_n33(x)
+ else
+ fun_l18_n655(x)
+ end
+end
+
+def fun_l17_n521(x)
+ if (x < 1)
+ fun_l18_n940(x)
+ else
+ fun_l18_n436(x)
+ end
+end
+
+def fun_l17_n522(x)
+ if (x < 1)
+ fun_l18_n471(x)
+ else
+ fun_l18_n975(x)
+ end
+end
+
+def fun_l17_n523(x)
+ if (x < 1)
+ fun_l18_n752(x)
+ else
+ fun_l18_n640(x)
+ end
+end
+
+def fun_l17_n524(x)
+ if (x < 1)
+ fun_l18_n226(x)
+ else
+ fun_l18_n645(x)
+ end
+end
+
+def fun_l17_n525(x)
+ if (x < 1)
+ fun_l18_n986(x)
+ else
+ fun_l18_n858(x)
+ end
+end
+
+def fun_l17_n526(x)
+ if (x < 1)
+ fun_l18_n362(x)
+ else
+ fun_l18_n842(x)
+ end
+end
+
+def fun_l17_n527(x)
+ if (x < 1)
+ fun_l18_n273(x)
+ else
+ fun_l18_n510(x)
+ end
+end
+
+def fun_l17_n528(x)
+ if (x < 1)
+ fun_l18_n728(x)
+ else
+ fun_l18_n906(x)
+ end
+end
+
+def fun_l17_n529(x)
+ if (x < 1)
+ fun_l18_n225(x)
+ else
+ fun_l18_n988(x)
+ end
+end
+
+def fun_l17_n530(x)
+ if (x < 1)
+ fun_l18_n472(x)
+ else
+ fun_l18_n933(x)
+ end
+end
+
+def fun_l17_n531(x)
+ if (x < 1)
+ fun_l18_n105(x)
+ else
+ fun_l18_n501(x)
+ end
+end
+
+def fun_l17_n532(x)
+ if (x < 1)
+ fun_l18_n77(x)
+ else
+ fun_l18_n616(x)
+ end
+end
+
+def fun_l17_n533(x)
+ if (x < 1)
+ fun_l18_n404(x)
+ else
+ fun_l18_n86(x)
+ end
+end
+
+def fun_l17_n534(x)
+ if (x < 1)
+ fun_l18_n312(x)
+ else
+ fun_l18_n638(x)
+ end
+end
+
+def fun_l17_n535(x)
+ if (x < 1)
+ fun_l18_n908(x)
+ else
+ fun_l18_n697(x)
+ end
+end
+
+def fun_l17_n536(x)
+ if (x < 1)
+ fun_l18_n520(x)
+ else
+ fun_l18_n379(x)
+ end
+end
+
+def fun_l17_n537(x)
+ if (x < 1)
+ fun_l18_n15(x)
+ else
+ fun_l18_n97(x)
+ end
+end
+
+def fun_l17_n538(x)
+ if (x < 1)
+ fun_l18_n312(x)
+ else
+ fun_l18_n981(x)
+ end
+end
+
+def fun_l17_n539(x)
+ if (x < 1)
+ fun_l18_n901(x)
+ else
+ fun_l18_n579(x)
+ end
+end
+
+def fun_l17_n540(x)
+ if (x < 1)
+ fun_l18_n569(x)
+ else
+ fun_l18_n512(x)
+ end
+end
+
+def fun_l17_n541(x)
+ if (x < 1)
+ fun_l18_n319(x)
+ else
+ fun_l18_n388(x)
+ end
+end
+
+def fun_l17_n542(x)
+ if (x < 1)
+ fun_l18_n288(x)
+ else
+ fun_l18_n422(x)
+ end
+end
+
+def fun_l17_n543(x)
+ if (x < 1)
+ fun_l18_n873(x)
+ else
+ fun_l18_n614(x)
+ end
+end
+
+def fun_l17_n544(x)
+ if (x < 1)
+ fun_l18_n104(x)
+ else
+ fun_l18_n771(x)
+ end
+end
+
+def fun_l17_n545(x)
+ if (x < 1)
+ fun_l18_n204(x)
+ else
+ fun_l18_n452(x)
+ end
+end
+
+def fun_l17_n546(x)
+ if (x < 1)
+ fun_l18_n288(x)
+ else
+ fun_l18_n558(x)
+ end
+end
+
+def fun_l17_n547(x)
+ if (x < 1)
+ fun_l18_n265(x)
+ else
+ fun_l18_n768(x)
+ end
+end
+
+def fun_l17_n548(x)
+ if (x < 1)
+ fun_l18_n21(x)
+ else
+ fun_l18_n44(x)
+ end
+end
+
+def fun_l17_n549(x)
+ if (x < 1)
+ fun_l18_n72(x)
+ else
+ fun_l18_n321(x)
+ end
+end
+
+def fun_l17_n550(x)
+ if (x < 1)
+ fun_l18_n473(x)
+ else
+ fun_l18_n127(x)
+ end
+end
+
+def fun_l17_n551(x)
+ if (x < 1)
+ fun_l18_n188(x)
+ else
+ fun_l18_n782(x)
+ end
+end
+
+def fun_l17_n552(x)
+ if (x < 1)
+ fun_l18_n118(x)
+ else
+ fun_l18_n466(x)
+ end
+end
+
+def fun_l17_n553(x)
+ if (x < 1)
+ fun_l18_n279(x)
+ else
+ fun_l18_n605(x)
+ end
+end
+
+def fun_l17_n554(x)
+ if (x < 1)
+ fun_l18_n760(x)
+ else
+ fun_l18_n561(x)
+ end
+end
+
+def fun_l17_n555(x)
+ if (x < 1)
+ fun_l18_n873(x)
+ else
+ fun_l18_n846(x)
+ end
+end
+
+def fun_l17_n556(x)
+ if (x < 1)
+ fun_l18_n555(x)
+ else
+ fun_l18_n955(x)
+ end
+end
+
+def fun_l17_n557(x)
+ if (x < 1)
+ fun_l18_n757(x)
+ else
+ fun_l18_n171(x)
+ end
+end
+
+def fun_l17_n558(x)
+ if (x < 1)
+ fun_l18_n684(x)
+ else
+ fun_l18_n784(x)
+ end
+end
+
+def fun_l17_n559(x)
+ if (x < 1)
+ fun_l18_n457(x)
+ else
+ fun_l18_n798(x)
+ end
+end
+
+def fun_l17_n560(x)
+ if (x < 1)
+ fun_l18_n472(x)
+ else
+ fun_l18_n291(x)
+ end
+end
+
+def fun_l17_n561(x)
+ if (x < 1)
+ fun_l18_n870(x)
+ else
+ fun_l18_n395(x)
+ end
+end
+
+def fun_l17_n562(x)
+ if (x < 1)
+ fun_l18_n482(x)
+ else
+ fun_l18_n281(x)
+ end
+end
+
+def fun_l17_n563(x)
+ if (x < 1)
+ fun_l18_n761(x)
+ else
+ fun_l18_n362(x)
+ end
+end
+
+def fun_l17_n564(x)
+ if (x < 1)
+ fun_l18_n586(x)
+ else
+ fun_l18_n92(x)
+ end
+end
+
+def fun_l17_n565(x)
+ if (x < 1)
+ fun_l18_n620(x)
+ else
+ fun_l18_n356(x)
+ end
+end
+
+def fun_l17_n566(x)
+ if (x < 1)
+ fun_l18_n529(x)
+ else
+ fun_l18_n985(x)
+ end
+end
+
+def fun_l17_n567(x)
+ if (x < 1)
+ fun_l18_n351(x)
+ else
+ fun_l18_n77(x)
+ end
+end
+
+def fun_l17_n568(x)
+ if (x < 1)
+ fun_l18_n659(x)
+ else
+ fun_l18_n631(x)
+ end
+end
+
+def fun_l17_n569(x)
+ if (x < 1)
+ fun_l18_n630(x)
+ else
+ fun_l18_n466(x)
+ end
+end
+
+def fun_l17_n570(x)
+ if (x < 1)
+ fun_l18_n374(x)
+ else
+ fun_l18_n203(x)
+ end
+end
+
+def fun_l17_n571(x)
+ if (x < 1)
+ fun_l18_n479(x)
+ else
+ fun_l18_n977(x)
+ end
+end
+
+def fun_l17_n572(x)
+ if (x < 1)
+ fun_l18_n862(x)
+ else
+ fun_l18_n323(x)
+ end
+end
+
+def fun_l17_n573(x)
+ if (x < 1)
+ fun_l18_n148(x)
+ else
+ fun_l18_n848(x)
+ end
+end
+
+def fun_l17_n574(x)
+ if (x < 1)
+ fun_l18_n29(x)
+ else
+ fun_l18_n210(x)
+ end
+end
+
+def fun_l17_n575(x)
+ if (x < 1)
+ fun_l18_n39(x)
+ else
+ fun_l18_n874(x)
+ end
+end
+
+def fun_l17_n576(x)
+ if (x < 1)
+ fun_l18_n843(x)
+ else
+ fun_l18_n5(x)
+ end
+end
+
+def fun_l17_n577(x)
+ if (x < 1)
+ fun_l18_n284(x)
+ else
+ fun_l18_n242(x)
+ end
+end
+
+def fun_l17_n578(x)
+ if (x < 1)
+ fun_l18_n768(x)
+ else
+ fun_l18_n683(x)
+ end
+end
+
+def fun_l17_n579(x)
+ if (x < 1)
+ fun_l18_n67(x)
+ else
+ fun_l18_n423(x)
+ end
+end
+
+def fun_l17_n580(x)
+ if (x < 1)
+ fun_l18_n326(x)
+ else
+ fun_l18_n200(x)
+ end
+end
+
+def fun_l17_n581(x)
+ if (x < 1)
+ fun_l18_n186(x)
+ else
+ fun_l18_n772(x)
+ end
+end
+
+def fun_l17_n582(x)
+ if (x < 1)
+ fun_l18_n151(x)
+ else
+ fun_l18_n222(x)
+ end
+end
+
+def fun_l17_n583(x)
+ if (x < 1)
+ fun_l18_n690(x)
+ else
+ fun_l18_n925(x)
+ end
+end
+
+def fun_l17_n584(x)
+ if (x < 1)
+ fun_l18_n225(x)
+ else
+ fun_l18_n286(x)
+ end
+end
+
+def fun_l17_n585(x)
+ if (x < 1)
+ fun_l18_n542(x)
+ else
+ fun_l18_n703(x)
+ end
+end
+
+def fun_l17_n586(x)
+ if (x < 1)
+ fun_l18_n417(x)
+ else
+ fun_l18_n364(x)
+ end
+end
+
+def fun_l17_n587(x)
+ if (x < 1)
+ fun_l18_n540(x)
+ else
+ fun_l18_n231(x)
+ end
+end
+
+def fun_l17_n588(x)
+ if (x < 1)
+ fun_l18_n859(x)
+ else
+ fun_l18_n557(x)
+ end
+end
+
+def fun_l17_n589(x)
+ if (x < 1)
+ fun_l18_n131(x)
+ else
+ fun_l18_n847(x)
+ end
+end
+
+def fun_l17_n590(x)
+ if (x < 1)
+ fun_l18_n267(x)
+ else
+ fun_l18_n613(x)
+ end
+end
+
+def fun_l17_n591(x)
+ if (x < 1)
+ fun_l18_n273(x)
+ else
+ fun_l18_n857(x)
+ end
+end
+
+def fun_l17_n592(x)
+ if (x < 1)
+ fun_l18_n561(x)
+ else
+ fun_l18_n243(x)
+ end
+end
+
+def fun_l17_n593(x)
+ if (x < 1)
+ fun_l18_n742(x)
+ else
+ fun_l18_n123(x)
+ end
+end
+
+def fun_l17_n594(x)
+ if (x < 1)
+ fun_l18_n480(x)
+ else
+ fun_l18_n290(x)
+ end
+end
+
+def fun_l17_n595(x)
+ if (x < 1)
+ fun_l18_n56(x)
+ else
+ fun_l18_n727(x)
+ end
+end
+
+def fun_l17_n596(x)
+ if (x < 1)
+ fun_l18_n901(x)
+ else
+ fun_l18_n723(x)
+ end
+end
+
+def fun_l17_n597(x)
+ if (x < 1)
+ fun_l18_n405(x)
+ else
+ fun_l18_n498(x)
+ end
+end
+
+def fun_l17_n598(x)
+ if (x < 1)
+ fun_l18_n772(x)
+ else
+ fun_l18_n543(x)
+ end
+end
+
+def fun_l17_n599(x)
+ if (x < 1)
+ fun_l18_n20(x)
+ else
+ fun_l18_n39(x)
+ end
+end
+
+def fun_l17_n600(x)
+ if (x < 1)
+ fun_l18_n657(x)
+ else
+ fun_l18_n381(x)
+ end
+end
+
+def fun_l17_n601(x)
+ if (x < 1)
+ fun_l18_n505(x)
+ else
+ fun_l18_n196(x)
+ end
+end
+
+def fun_l17_n602(x)
+ if (x < 1)
+ fun_l18_n250(x)
+ else
+ fun_l18_n503(x)
+ end
+end
+
+def fun_l17_n603(x)
+ if (x < 1)
+ fun_l18_n694(x)
+ else
+ fun_l18_n589(x)
+ end
+end
+
+def fun_l17_n604(x)
+ if (x < 1)
+ fun_l18_n27(x)
+ else
+ fun_l18_n202(x)
+ end
+end
+
+def fun_l17_n605(x)
+ if (x < 1)
+ fun_l18_n901(x)
+ else
+ fun_l18_n823(x)
+ end
+end
+
+def fun_l17_n606(x)
+ if (x < 1)
+ fun_l18_n296(x)
+ else
+ fun_l18_n854(x)
+ end
+end
+
+def fun_l17_n607(x)
+ if (x < 1)
+ fun_l18_n226(x)
+ else
+ fun_l18_n110(x)
+ end
+end
+
+def fun_l17_n608(x)
+ if (x < 1)
+ fun_l18_n205(x)
+ else
+ fun_l18_n215(x)
+ end
+end
+
+def fun_l17_n609(x)
+ if (x < 1)
+ fun_l18_n265(x)
+ else
+ fun_l18_n715(x)
+ end
+end
+
+def fun_l17_n610(x)
+ if (x < 1)
+ fun_l18_n881(x)
+ else
+ fun_l18_n106(x)
+ end
+end
+
+def fun_l17_n611(x)
+ if (x < 1)
+ fun_l18_n674(x)
+ else
+ fun_l18_n189(x)
+ end
+end
+
+def fun_l17_n612(x)
+ if (x < 1)
+ fun_l18_n20(x)
+ else
+ fun_l18_n96(x)
+ end
+end
+
+def fun_l17_n613(x)
+ if (x < 1)
+ fun_l18_n880(x)
+ else
+ fun_l18_n599(x)
+ end
+end
+
+def fun_l17_n614(x)
+ if (x < 1)
+ fun_l18_n47(x)
+ else
+ fun_l18_n633(x)
+ end
+end
+
+def fun_l17_n615(x)
+ if (x < 1)
+ fun_l18_n7(x)
+ else
+ fun_l18_n165(x)
+ end
+end
+
+def fun_l17_n616(x)
+ if (x < 1)
+ fun_l18_n478(x)
+ else
+ fun_l18_n94(x)
+ end
+end
+
+def fun_l17_n617(x)
+ if (x < 1)
+ fun_l18_n97(x)
+ else
+ fun_l18_n369(x)
+ end
+end
+
+def fun_l17_n618(x)
+ if (x < 1)
+ fun_l18_n291(x)
+ else
+ fun_l18_n637(x)
+ end
+end
+
+def fun_l17_n619(x)
+ if (x < 1)
+ fun_l18_n966(x)
+ else
+ fun_l18_n851(x)
+ end
+end
+
+def fun_l17_n620(x)
+ if (x < 1)
+ fun_l18_n349(x)
+ else
+ fun_l18_n413(x)
+ end
+end
+
+def fun_l17_n621(x)
+ if (x < 1)
+ fun_l18_n343(x)
+ else
+ fun_l18_n224(x)
+ end
+end
+
+def fun_l17_n622(x)
+ if (x < 1)
+ fun_l18_n452(x)
+ else
+ fun_l18_n3(x)
+ end
+end
+
+def fun_l17_n623(x)
+ if (x < 1)
+ fun_l18_n539(x)
+ else
+ fun_l18_n542(x)
+ end
+end
+
+def fun_l17_n624(x)
+ if (x < 1)
+ fun_l18_n117(x)
+ else
+ fun_l18_n348(x)
+ end
+end
+
+def fun_l17_n625(x)
+ if (x < 1)
+ fun_l18_n753(x)
+ else
+ fun_l18_n284(x)
+ end
+end
+
+def fun_l17_n626(x)
+ if (x < 1)
+ fun_l18_n146(x)
+ else
+ fun_l18_n228(x)
+ end
+end
+
+def fun_l17_n627(x)
+ if (x < 1)
+ fun_l18_n286(x)
+ else
+ fun_l18_n413(x)
+ end
+end
+
+def fun_l17_n628(x)
+ if (x < 1)
+ fun_l18_n730(x)
+ else
+ fun_l18_n311(x)
+ end
+end
+
+def fun_l17_n629(x)
+ if (x < 1)
+ fun_l18_n455(x)
+ else
+ fun_l18_n141(x)
+ end
+end
+
+def fun_l17_n630(x)
+ if (x < 1)
+ fun_l18_n300(x)
+ else
+ fun_l18_n368(x)
+ end
+end
+
+def fun_l17_n631(x)
+ if (x < 1)
+ fun_l18_n490(x)
+ else
+ fun_l18_n711(x)
+ end
+end
+
+def fun_l17_n632(x)
+ if (x < 1)
+ fun_l18_n310(x)
+ else
+ fun_l18_n805(x)
+ end
+end
+
+def fun_l17_n633(x)
+ if (x < 1)
+ fun_l18_n2(x)
+ else
+ fun_l18_n709(x)
+ end
+end
+
+def fun_l17_n634(x)
+ if (x < 1)
+ fun_l18_n239(x)
+ else
+ fun_l18_n394(x)
+ end
+end
+
+def fun_l17_n635(x)
+ if (x < 1)
+ fun_l18_n933(x)
+ else
+ fun_l18_n749(x)
+ end
+end
+
+def fun_l17_n636(x)
+ if (x < 1)
+ fun_l18_n54(x)
+ else
+ fun_l18_n511(x)
+ end
+end
+
+def fun_l17_n637(x)
+ if (x < 1)
+ fun_l18_n908(x)
+ else
+ fun_l18_n550(x)
+ end
+end
+
+def fun_l17_n638(x)
+ if (x < 1)
+ fun_l18_n262(x)
+ else
+ fun_l18_n485(x)
+ end
+end
+
+def fun_l17_n639(x)
+ if (x < 1)
+ fun_l18_n676(x)
+ else
+ fun_l18_n860(x)
+ end
+end
+
+def fun_l17_n640(x)
+ if (x < 1)
+ fun_l18_n205(x)
+ else
+ fun_l18_n901(x)
+ end
+end
+
+def fun_l17_n641(x)
+ if (x < 1)
+ fun_l18_n834(x)
+ else
+ fun_l18_n133(x)
+ end
+end
+
+def fun_l17_n642(x)
+ if (x < 1)
+ fun_l18_n824(x)
+ else
+ fun_l18_n551(x)
+ end
+end
+
+def fun_l17_n643(x)
+ if (x < 1)
+ fun_l18_n362(x)
+ else
+ fun_l18_n684(x)
+ end
+end
+
+def fun_l17_n644(x)
+ if (x < 1)
+ fun_l18_n856(x)
+ else
+ fun_l18_n103(x)
+ end
+end
+
+def fun_l17_n645(x)
+ if (x < 1)
+ fun_l18_n999(x)
+ else
+ fun_l18_n995(x)
+ end
+end
+
+def fun_l17_n646(x)
+ if (x < 1)
+ fun_l18_n24(x)
+ else
+ fun_l18_n405(x)
+ end
+end
+
+def fun_l17_n647(x)
+ if (x < 1)
+ fun_l18_n71(x)
+ else
+ fun_l18_n201(x)
+ end
+end
+
+def fun_l17_n648(x)
+ if (x < 1)
+ fun_l18_n905(x)
+ else
+ fun_l18_n14(x)
+ end
+end
+
+def fun_l17_n649(x)
+ if (x < 1)
+ fun_l18_n490(x)
+ else
+ fun_l18_n932(x)
+ end
+end
+
+def fun_l17_n650(x)
+ if (x < 1)
+ fun_l18_n25(x)
+ else
+ fun_l18_n333(x)
+ end
+end
+
+def fun_l17_n651(x)
+ if (x < 1)
+ fun_l18_n282(x)
+ else
+ fun_l18_n197(x)
+ end
+end
+
+def fun_l17_n652(x)
+ if (x < 1)
+ fun_l18_n684(x)
+ else
+ fun_l18_n618(x)
+ end
+end
+
+def fun_l17_n653(x)
+ if (x < 1)
+ fun_l18_n201(x)
+ else
+ fun_l18_n571(x)
+ end
+end
+
+def fun_l17_n654(x)
+ if (x < 1)
+ fun_l18_n26(x)
+ else
+ fun_l18_n813(x)
+ end
+end
+
+def fun_l17_n655(x)
+ if (x < 1)
+ fun_l18_n879(x)
+ else
+ fun_l18_n860(x)
+ end
+end
+
+def fun_l17_n656(x)
+ if (x < 1)
+ fun_l18_n193(x)
+ else
+ fun_l18_n635(x)
+ end
+end
+
+def fun_l17_n657(x)
+ if (x < 1)
+ fun_l18_n163(x)
+ else
+ fun_l18_n601(x)
+ end
+end
+
+def fun_l17_n658(x)
+ if (x < 1)
+ fun_l18_n794(x)
+ else
+ fun_l18_n582(x)
+ end
+end
+
+def fun_l17_n659(x)
+ if (x < 1)
+ fun_l18_n22(x)
+ else
+ fun_l18_n427(x)
+ end
+end
+
+def fun_l17_n660(x)
+ if (x < 1)
+ fun_l18_n959(x)
+ else
+ fun_l18_n21(x)
+ end
+end
+
+def fun_l17_n661(x)
+ if (x < 1)
+ fun_l18_n233(x)
+ else
+ fun_l18_n852(x)
+ end
+end
+
+def fun_l17_n662(x)
+ if (x < 1)
+ fun_l18_n367(x)
+ else
+ fun_l18_n119(x)
+ end
+end
+
+def fun_l17_n663(x)
+ if (x < 1)
+ fun_l18_n511(x)
+ else
+ fun_l18_n425(x)
+ end
+end
+
+def fun_l17_n664(x)
+ if (x < 1)
+ fun_l18_n256(x)
+ else
+ fun_l18_n294(x)
+ end
+end
+
+def fun_l17_n665(x)
+ if (x < 1)
+ fun_l18_n263(x)
+ else
+ fun_l18_n549(x)
+ end
+end
+
+def fun_l17_n666(x)
+ if (x < 1)
+ fun_l18_n868(x)
+ else
+ fun_l18_n221(x)
+ end
+end
+
+def fun_l17_n667(x)
+ if (x < 1)
+ fun_l18_n703(x)
+ else
+ fun_l18_n157(x)
+ end
+end
+
+def fun_l17_n668(x)
+ if (x < 1)
+ fun_l18_n639(x)
+ else
+ fun_l18_n685(x)
+ end
+end
+
+def fun_l17_n669(x)
+ if (x < 1)
+ fun_l18_n278(x)
+ else
+ fun_l18_n366(x)
+ end
+end
+
+def fun_l17_n670(x)
+ if (x < 1)
+ fun_l18_n267(x)
+ else
+ fun_l18_n641(x)
+ end
+end
+
+def fun_l17_n671(x)
+ if (x < 1)
+ fun_l18_n452(x)
+ else
+ fun_l18_n851(x)
+ end
+end
+
+def fun_l17_n672(x)
+ if (x < 1)
+ fun_l18_n256(x)
+ else
+ fun_l18_n282(x)
+ end
+end
+
+def fun_l17_n673(x)
+ if (x < 1)
+ fun_l18_n397(x)
+ else
+ fun_l18_n446(x)
+ end
+end
+
+def fun_l17_n674(x)
+ if (x < 1)
+ fun_l18_n499(x)
+ else
+ fun_l18_n166(x)
+ end
+end
+
+def fun_l17_n675(x)
+ if (x < 1)
+ fun_l18_n299(x)
+ else
+ fun_l18_n473(x)
+ end
+end
+
+def fun_l17_n676(x)
+ if (x < 1)
+ fun_l18_n331(x)
+ else
+ fun_l18_n590(x)
+ end
+end
+
+def fun_l17_n677(x)
+ if (x < 1)
+ fun_l18_n951(x)
+ else
+ fun_l18_n227(x)
+ end
+end
+
+def fun_l17_n678(x)
+ if (x < 1)
+ fun_l18_n874(x)
+ else
+ fun_l18_n359(x)
+ end
+end
+
+def fun_l17_n679(x)
+ if (x < 1)
+ fun_l18_n187(x)
+ else
+ fun_l18_n13(x)
+ end
+end
+
+def fun_l17_n680(x)
+ if (x < 1)
+ fun_l18_n878(x)
+ else
+ fun_l18_n902(x)
+ end
+end
+
+def fun_l17_n681(x)
+ if (x < 1)
+ fun_l18_n450(x)
+ else
+ fun_l18_n262(x)
+ end
+end
+
+def fun_l17_n682(x)
+ if (x < 1)
+ fun_l18_n759(x)
+ else
+ fun_l18_n253(x)
+ end
+end
+
+def fun_l17_n683(x)
+ if (x < 1)
+ fun_l18_n199(x)
+ else
+ fun_l18_n191(x)
+ end
+end
+
+def fun_l17_n684(x)
+ if (x < 1)
+ fun_l18_n93(x)
+ else
+ fun_l18_n275(x)
+ end
+end
+
+def fun_l17_n685(x)
+ if (x < 1)
+ fun_l18_n17(x)
+ else
+ fun_l18_n575(x)
+ end
+end
+
+def fun_l17_n686(x)
+ if (x < 1)
+ fun_l18_n971(x)
+ else
+ fun_l18_n540(x)
+ end
+end
+
+def fun_l17_n687(x)
+ if (x < 1)
+ fun_l18_n942(x)
+ else
+ fun_l18_n285(x)
+ end
+end
+
+def fun_l17_n688(x)
+ if (x < 1)
+ fun_l18_n348(x)
+ else
+ fun_l18_n7(x)
+ end
+end
+
+def fun_l17_n689(x)
+ if (x < 1)
+ fun_l18_n839(x)
+ else
+ fun_l18_n532(x)
+ end
+end
+
+def fun_l17_n690(x)
+ if (x < 1)
+ fun_l18_n578(x)
+ else
+ fun_l18_n751(x)
+ end
+end
+
+def fun_l17_n691(x)
+ if (x < 1)
+ fun_l18_n85(x)
+ else
+ fun_l18_n311(x)
+ end
+end
+
+def fun_l17_n692(x)
+ if (x < 1)
+ fun_l18_n573(x)
+ else
+ fun_l18_n685(x)
+ end
+end
+
+def fun_l17_n693(x)
+ if (x < 1)
+ fun_l18_n449(x)
+ else
+ fun_l18_n749(x)
+ end
+end
+
+def fun_l17_n694(x)
+ if (x < 1)
+ fun_l18_n251(x)
+ else
+ fun_l18_n266(x)
+ end
+end
+
+def fun_l17_n695(x)
+ if (x < 1)
+ fun_l18_n69(x)
+ else
+ fun_l18_n725(x)
+ end
+end
+
+def fun_l17_n696(x)
+ if (x < 1)
+ fun_l18_n54(x)
+ else
+ fun_l18_n196(x)
+ end
+end
+
+def fun_l17_n697(x)
+ if (x < 1)
+ fun_l18_n950(x)
+ else
+ fun_l18_n423(x)
+ end
+end
+
+def fun_l17_n698(x)
+ if (x < 1)
+ fun_l18_n809(x)
+ else
+ fun_l18_n787(x)
+ end
+end
+
+def fun_l17_n699(x)
+ if (x < 1)
+ fun_l18_n211(x)
+ else
+ fun_l18_n79(x)
+ end
+end
+
+def fun_l17_n700(x)
+ if (x < 1)
+ fun_l18_n686(x)
+ else
+ fun_l18_n287(x)
+ end
+end
+
+def fun_l17_n701(x)
+ if (x < 1)
+ fun_l18_n412(x)
+ else
+ fun_l18_n769(x)
+ end
+end
+
+def fun_l17_n702(x)
+ if (x < 1)
+ fun_l18_n62(x)
+ else
+ fun_l18_n592(x)
+ end
+end
+
+def fun_l17_n703(x)
+ if (x < 1)
+ fun_l18_n628(x)
+ else
+ fun_l18_n121(x)
+ end
+end
+
+def fun_l17_n704(x)
+ if (x < 1)
+ fun_l18_n84(x)
+ else
+ fun_l18_n350(x)
+ end
+end
+
+def fun_l17_n705(x)
+ if (x < 1)
+ fun_l18_n599(x)
+ else
+ fun_l18_n174(x)
+ end
+end
+
+def fun_l17_n706(x)
+ if (x < 1)
+ fun_l18_n39(x)
+ else
+ fun_l18_n266(x)
+ end
+end
+
+def fun_l17_n707(x)
+ if (x < 1)
+ fun_l18_n196(x)
+ else
+ fun_l18_n838(x)
+ end
+end
+
+def fun_l17_n708(x)
+ if (x < 1)
+ fun_l18_n647(x)
+ else
+ fun_l18_n26(x)
+ end
+end
+
+def fun_l17_n709(x)
+ if (x < 1)
+ fun_l18_n693(x)
+ else
+ fun_l18_n660(x)
+ end
+end
+
+def fun_l17_n710(x)
+ if (x < 1)
+ fun_l18_n530(x)
+ else
+ fun_l18_n654(x)
+ end
+end
+
+def fun_l17_n711(x)
+ if (x < 1)
+ fun_l18_n580(x)
+ else
+ fun_l18_n65(x)
+ end
+end
+
+def fun_l17_n712(x)
+ if (x < 1)
+ fun_l18_n789(x)
+ else
+ fun_l18_n832(x)
+ end
+end
+
+def fun_l17_n713(x)
+ if (x < 1)
+ fun_l18_n366(x)
+ else
+ fun_l18_n168(x)
+ end
+end
+
+def fun_l17_n714(x)
+ if (x < 1)
+ fun_l18_n571(x)
+ else
+ fun_l18_n23(x)
+ end
+end
+
+def fun_l17_n715(x)
+ if (x < 1)
+ fun_l18_n552(x)
+ else
+ fun_l18_n400(x)
+ end
+end
+
+def fun_l17_n716(x)
+ if (x < 1)
+ fun_l18_n752(x)
+ else
+ fun_l18_n403(x)
+ end
+end
+
+def fun_l17_n717(x)
+ if (x < 1)
+ fun_l18_n498(x)
+ else
+ fun_l18_n173(x)
+ end
+end
+
+def fun_l17_n718(x)
+ if (x < 1)
+ fun_l18_n168(x)
+ else
+ fun_l18_n656(x)
+ end
+end
+
+def fun_l17_n719(x)
+ if (x < 1)
+ fun_l18_n75(x)
+ else
+ fun_l18_n393(x)
+ end
+end
+
+def fun_l17_n720(x)
+ if (x < 1)
+ fun_l18_n856(x)
+ else
+ fun_l18_n101(x)
+ end
+end
+
+def fun_l17_n721(x)
+ if (x < 1)
+ fun_l18_n445(x)
+ else
+ fun_l18_n846(x)
+ end
+end
+
+def fun_l17_n722(x)
+ if (x < 1)
+ fun_l18_n450(x)
+ else
+ fun_l18_n136(x)
+ end
+end
+
+def fun_l17_n723(x)
+ if (x < 1)
+ fun_l18_n267(x)
+ else
+ fun_l18_n800(x)
+ end
+end
+
+def fun_l17_n724(x)
+ if (x < 1)
+ fun_l18_n98(x)
+ else
+ fun_l18_n955(x)
+ end
+end
+
+def fun_l17_n725(x)
+ if (x < 1)
+ fun_l18_n951(x)
+ else
+ fun_l18_n319(x)
+ end
+end
+
+def fun_l17_n726(x)
+ if (x < 1)
+ fun_l18_n531(x)
+ else
+ fun_l18_n846(x)
+ end
+end
+
+def fun_l17_n727(x)
+ if (x < 1)
+ fun_l18_n888(x)
+ else
+ fun_l18_n600(x)
+ end
+end
+
+def fun_l17_n728(x)
+ if (x < 1)
+ fun_l18_n278(x)
+ else
+ fun_l18_n445(x)
+ end
+end
+
+def fun_l17_n729(x)
+ if (x < 1)
+ fun_l18_n113(x)
+ else
+ fun_l18_n991(x)
+ end
+end
+
+def fun_l17_n730(x)
+ if (x < 1)
+ fun_l18_n756(x)
+ else
+ fun_l18_n935(x)
+ end
+end
+
+def fun_l17_n731(x)
+ if (x < 1)
+ fun_l18_n2(x)
+ else
+ fun_l18_n969(x)
+ end
+end
+
+def fun_l17_n732(x)
+ if (x < 1)
+ fun_l18_n138(x)
+ else
+ fun_l18_n198(x)
+ end
+end
+
+def fun_l17_n733(x)
+ if (x < 1)
+ fun_l18_n845(x)
+ else
+ fun_l18_n614(x)
+ end
+end
+
+def fun_l17_n734(x)
+ if (x < 1)
+ fun_l18_n603(x)
+ else
+ fun_l18_n568(x)
+ end
+end
+
+def fun_l17_n735(x)
+ if (x < 1)
+ fun_l18_n276(x)
+ else
+ fun_l18_n58(x)
+ end
+end
+
+def fun_l17_n736(x)
+ if (x < 1)
+ fun_l18_n404(x)
+ else
+ fun_l18_n906(x)
+ end
+end
+
+def fun_l17_n737(x)
+ if (x < 1)
+ fun_l18_n199(x)
+ else
+ fun_l18_n734(x)
+ end
+end
+
+def fun_l17_n738(x)
+ if (x < 1)
+ fun_l18_n327(x)
+ else
+ fun_l18_n667(x)
+ end
+end
+
+def fun_l17_n739(x)
+ if (x < 1)
+ fun_l18_n600(x)
+ else
+ fun_l18_n986(x)
+ end
+end
+
+def fun_l17_n740(x)
+ if (x < 1)
+ fun_l18_n820(x)
+ else
+ fun_l18_n615(x)
+ end
+end
+
+def fun_l17_n741(x)
+ if (x < 1)
+ fun_l18_n779(x)
+ else
+ fun_l18_n912(x)
+ end
+end
+
+def fun_l17_n742(x)
+ if (x < 1)
+ fun_l18_n55(x)
+ else
+ fun_l18_n41(x)
+ end
+end
+
+def fun_l17_n743(x)
+ if (x < 1)
+ fun_l18_n24(x)
+ else
+ fun_l18_n877(x)
+ end
+end
+
+def fun_l17_n744(x)
+ if (x < 1)
+ fun_l18_n834(x)
+ else
+ fun_l18_n10(x)
+ end
+end
+
+def fun_l17_n745(x)
+ if (x < 1)
+ fun_l18_n369(x)
+ else
+ fun_l18_n761(x)
+ end
+end
+
+def fun_l17_n746(x)
+ if (x < 1)
+ fun_l18_n534(x)
+ else
+ fun_l18_n292(x)
+ end
+end
+
+def fun_l17_n747(x)
+ if (x < 1)
+ fun_l18_n260(x)
+ else
+ fun_l18_n98(x)
+ end
+end
+
+def fun_l17_n748(x)
+ if (x < 1)
+ fun_l18_n738(x)
+ else
+ fun_l18_n298(x)
+ end
+end
+
+def fun_l17_n749(x)
+ if (x < 1)
+ fun_l18_n156(x)
+ else
+ fun_l18_n322(x)
+ end
+end
+
+def fun_l17_n750(x)
+ if (x < 1)
+ fun_l18_n519(x)
+ else
+ fun_l18_n566(x)
+ end
+end
+
+def fun_l17_n751(x)
+ if (x < 1)
+ fun_l18_n599(x)
+ else
+ fun_l18_n525(x)
+ end
+end
+
+def fun_l17_n752(x)
+ if (x < 1)
+ fun_l18_n51(x)
+ else
+ fun_l18_n334(x)
+ end
+end
+
+def fun_l17_n753(x)
+ if (x < 1)
+ fun_l18_n593(x)
+ else
+ fun_l18_n799(x)
+ end
+end
+
+def fun_l17_n754(x)
+ if (x < 1)
+ fun_l18_n599(x)
+ else
+ fun_l18_n167(x)
+ end
+end
+
+def fun_l17_n755(x)
+ if (x < 1)
+ fun_l18_n799(x)
+ else
+ fun_l18_n909(x)
+ end
+end
+
+def fun_l17_n756(x)
+ if (x < 1)
+ fun_l18_n988(x)
+ else
+ fun_l18_n793(x)
+ end
+end
+
+def fun_l17_n757(x)
+ if (x < 1)
+ fun_l18_n144(x)
+ else
+ fun_l18_n279(x)
+ end
+end
+
+def fun_l17_n758(x)
+ if (x < 1)
+ fun_l18_n981(x)
+ else
+ fun_l18_n603(x)
+ end
+end
+
+def fun_l17_n759(x)
+ if (x < 1)
+ fun_l18_n576(x)
+ else
+ fun_l18_n730(x)
+ end
+end
+
+def fun_l17_n760(x)
+ if (x < 1)
+ fun_l18_n66(x)
+ else
+ fun_l18_n359(x)
+ end
+end
+
+def fun_l17_n761(x)
+ if (x < 1)
+ fun_l18_n555(x)
+ else
+ fun_l18_n553(x)
+ end
+end
+
+def fun_l17_n762(x)
+ if (x < 1)
+ fun_l18_n508(x)
+ else
+ fun_l18_n665(x)
+ end
+end
+
+def fun_l17_n763(x)
+ if (x < 1)
+ fun_l18_n911(x)
+ else
+ fun_l18_n19(x)
+ end
+end
+
+def fun_l17_n764(x)
+ if (x < 1)
+ fun_l18_n162(x)
+ else
+ fun_l18_n707(x)
+ end
+end
+
+def fun_l17_n765(x)
+ if (x < 1)
+ fun_l18_n262(x)
+ else
+ fun_l18_n494(x)
+ end
+end
+
+def fun_l17_n766(x)
+ if (x < 1)
+ fun_l18_n220(x)
+ else
+ fun_l18_n144(x)
+ end
+end
+
+def fun_l17_n767(x)
+ if (x < 1)
+ fun_l18_n245(x)
+ else
+ fun_l18_n727(x)
+ end
+end
+
+def fun_l17_n768(x)
+ if (x < 1)
+ fun_l18_n875(x)
+ else
+ fun_l18_n610(x)
+ end
+end
+
+def fun_l17_n769(x)
+ if (x < 1)
+ fun_l18_n338(x)
+ else
+ fun_l18_n344(x)
+ end
+end
+
+def fun_l17_n770(x)
+ if (x < 1)
+ fun_l18_n224(x)
+ else
+ fun_l18_n682(x)
+ end
+end
+
+def fun_l17_n771(x)
+ if (x < 1)
+ fun_l18_n353(x)
+ else
+ fun_l18_n102(x)
+ end
+end
+
+def fun_l17_n772(x)
+ if (x < 1)
+ fun_l18_n122(x)
+ else
+ fun_l18_n979(x)
+ end
+end
+
+def fun_l17_n773(x)
+ if (x < 1)
+ fun_l18_n549(x)
+ else
+ fun_l18_n296(x)
+ end
+end
+
+def fun_l17_n774(x)
+ if (x < 1)
+ fun_l18_n82(x)
+ else
+ fun_l18_n748(x)
+ end
+end
+
+def fun_l17_n775(x)
+ if (x < 1)
+ fun_l18_n958(x)
+ else
+ fun_l18_n917(x)
+ end
+end
+
+def fun_l17_n776(x)
+ if (x < 1)
+ fun_l18_n173(x)
+ else
+ fun_l18_n438(x)
+ end
+end
+
+def fun_l17_n777(x)
+ if (x < 1)
+ fun_l18_n222(x)
+ else
+ fun_l18_n55(x)
+ end
+end
+
+def fun_l17_n778(x)
+ if (x < 1)
+ fun_l18_n529(x)
+ else
+ fun_l18_n548(x)
+ end
+end
+
+def fun_l17_n779(x)
+ if (x < 1)
+ fun_l18_n28(x)
+ else
+ fun_l18_n582(x)
+ end
+end
+
+def fun_l17_n780(x)
+ if (x < 1)
+ fun_l18_n818(x)
+ else
+ fun_l18_n836(x)
+ end
+end
+
+def fun_l17_n781(x)
+ if (x < 1)
+ fun_l18_n972(x)
+ else
+ fun_l18_n73(x)
+ end
+end
+
+def fun_l17_n782(x)
+ if (x < 1)
+ fun_l18_n527(x)
+ else
+ fun_l18_n999(x)
+ end
+end
+
+def fun_l17_n783(x)
+ if (x < 1)
+ fun_l18_n832(x)
+ else
+ fun_l18_n833(x)
+ end
+end
+
+def fun_l17_n784(x)
+ if (x < 1)
+ fun_l18_n987(x)
+ else
+ fun_l18_n329(x)
+ end
+end
+
+def fun_l17_n785(x)
+ if (x < 1)
+ fun_l18_n715(x)
+ else
+ fun_l18_n441(x)
+ end
+end
+
+def fun_l17_n786(x)
+ if (x < 1)
+ fun_l18_n55(x)
+ else
+ fun_l18_n682(x)
+ end
+end
+
+def fun_l17_n787(x)
+ if (x < 1)
+ fun_l18_n606(x)
+ else
+ fun_l18_n656(x)
+ end
+end
+
+def fun_l17_n788(x)
+ if (x < 1)
+ fun_l18_n254(x)
+ else
+ fun_l18_n544(x)
+ end
+end
+
+def fun_l17_n789(x)
+ if (x < 1)
+ fun_l18_n285(x)
+ else
+ fun_l18_n585(x)
+ end
+end
+
+def fun_l17_n790(x)
+ if (x < 1)
+ fun_l18_n441(x)
+ else
+ fun_l18_n716(x)
+ end
+end
+
+def fun_l17_n791(x)
+ if (x < 1)
+ fun_l18_n415(x)
+ else
+ fun_l18_n126(x)
+ end
+end
+
+def fun_l17_n792(x)
+ if (x < 1)
+ fun_l18_n490(x)
+ else
+ fun_l18_n753(x)
+ end
+end
+
+def fun_l17_n793(x)
+ if (x < 1)
+ fun_l18_n324(x)
+ else
+ fun_l18_n223(x)
+ end
+end
+
+def fun_l17_n794(x)
+ if (x < 1)
+ fun_l18_n913(x)
+ else
+ fun_l18_n94(x)
+ end
+end
+
+def fun_l17_n795(x)
+ if (x < 1)
+ fun_l18_n879(x)
+ else
+ fun_l18_n404(x)
+ end
+end
+
+def fun_l17_n796(x)
+ if (x < 1)
+ fun_l18_n309(x)
+ else
+ fun_l18_n65(x)
+ end
+end
+
+def fun_l17_n797(x)
+ if (x < 1)
+ fun_l18_n712(x)
+ else
+ fun_l18_n947(x)
+ end
+end
+
+def fun_l17_n798(x)
+ if (x < 1)
+ fun_l18_n238(x)
+ else
+ fun_l18_n83(x)
+ end
+end
+
+def fun_l17_n799(x)
+ if (x < 1)
+ fun_l18_n25(x)
+ else
+ fun_l18_n371(x)
+ end
+end
+
+def fun_l17_n800(x)
+ if (x < 1)
+ fun_l18_n501(x)
+ else
+ fun_l18_n386(x)
+ end
+end
+
+def fun_l17_n801(x)
+ if (x < 1)
+ fun_l18_n453(x)
+ else
+ fun_l18_n168(x)
+ end
+end
+
+def fun_l17_n802(x)
+ if (x < 1)
+ fun_l18_n763(x)
+ else
+ fun_l18_n675(x)
+ end
+end
+
+def fun_l17_n803(x)
+ if (x < 1)
+ fun_l18_n984(x)
+ else
+ fun_l18_n882(x)
+ end
+end
+
+def fun_l17_n804(x)
+ if (x < 1)
+ fun_l18_n545(x)
+ else
+ fun_l18_n79(x)
+ end
+end
+
+def fun_l17_n805(x)
+ if (x < 1)
+ fun_l18_n263(x)
+ else
+ fun_l18_n143(x)
+ end
+end
+
+def fun_l17_n806(x)
+ if (x < 1)
+ fun_l18_n232(x)
+ else
+ fun_l18_n864(x)
+ end
+end
+
+def fun_l17_n807(x)
+ if (x < 1)
+ fun_l18_n6(x)
+ else
+ fun_l18_n983(x)
+ end
+end
+
+def fun_l17_n808(x)
+ if (x < 1)
+ fun_l18_n17(x)
+ else
+ fun_l18_n426(x)
+ end
+end
+
+def fun_l17_n809(x)
+ if (x < 1)
+ fun_l18_n1(x)
+ else
+ fun_l18_n669(x)
+ end
+end
+
+def fun_l17_n810(x)
+ if (x < 1)
+ fun_l18_n191(x)
+ else
+ fun_l18_n540(x)
+ end
+end
+
+def fun_l17_n811(x)
+ if (x < 1)
+ fun_l18_n16(x)
+ else
+ fun_l18_n871(x)
+ end
+end
+
+def fun_l17_n812(x)
+ if (x < 1)
+ fun_l18_n352(x)
+ else
+ fun_l18_n156(x)
+ end
+end
+
+def fun_l17_n813(x)
+ if (x < 1)
+ fun_l18_n239(x)
+ else
+ fun_l18_n314(x)
+ end
+end
+
+def fun_l17_n814(x)
+ if (x < 1)
+ fun_l18_n890(x)
+ else
+ fun_l18_n21(x)
+ end
+end
+
+def fun_l17_n815(x)
+ if (x < 1)
+ fun_l18_n894(x)
+ else
+ fun_l18_n894(x)
+ end
+end
+
+def fun_l17_n816(x)
+ if (x < 1)
+ fun_l18_n75(x)
+ else
+ fun_l18_n631(x)
+ end
+end
+
+def fun_l17_n817(x)
+ if (x < 1)
+ fun_l18_n118(x)
+ else
+ fun_l18_n857(x)
+ end
+end
+
+def fun_l17_n818(x)
+ if (x < 1)
+ fun_l18_n403(x)
+ else
+ fun_l18_n364(x)
+ end
+end
+
+def fun_l17_n819(x)
+ if (x < 1)
+ fun_l18_n15(x)
+ else
+ fun_l18_n232(x)
+ end
+end
+
+def fun_l17_n820(x)
+ if (x < 1)
+ fun_l18_n610(x)
+ else
+ fun_l18_n43(x)
+ end
+end
+
+def fun_l17_n821(x)
+ if (x < 1)
+ fun_l18_n949(x)
+ else
+ fun_l18_n884(x)
+ end
+end
+
+def fun_l17_n822(x)
+ if (x < 1)
+ fun_l18_n387(x)
+ else
+ fun_l18_n587(x)
+ end
+end
+
+def fun_l17_n823(x)
+ if (x < 1)
+ fun_l18_n99(x)
+ else
+ fun_l18_n653(x)
+ end
+end
+
+def fun_l17_n824(x)
+ if (x < 1)
+ fun_l18_n41(x)
+ else
+ fun_l18_n822(x)
+ end
+end
+
+def fun_l17_n825(x)
+ if (x < 1)
+ fun_l18_n325(x)
+ else
+ fun_l18_n735(x)
+ end
+end
+
+def fun_l17_n826(x)
+ if (x < 1)
+ fun_l18_n415(x)
+ else
+ fun_l18_n684(x)
+ end
+end
+
+def fun_l17_n827(x)
+ if (x < 1)
+ fun_l18_n856(x)
+ else
+ fun_l18_n257(x)
+ end
+end
+
+def fun_l17_n828(x)
+ if (x < 1)
+ fun_l18_n455(x)
+ else
+ fun_l18_n200(x)
+ end
+end
+
+def fun_l17_n829(x)
+ if (x < 1)
+ fun_l18_n486(x)
+ else
+ fun_l18_n528(x)
+ end
+end
+
+def fun_l17_n830(x)
+ if (x < 1)
+ fun_l18_n321(x)
+ else
+ fun_l18_n619(x)
+ end
+end
+
+def fun_l17_n831(x)
+ if (x < 1)
+ fun_l18_n910(x)
+ else
+ fun_l18_n796(x)
+ end
+end
+
+def fun_l17_n832(x)
+ if (x < 1)
+ fun_l18_n303(x)
+ else
+ fun_l18_n278(x)
+ end
+end
+
+def fun_l17_n833(x)
+ if (x < 1)
+ fun_l18_n477(x)
+ else
+ fun_l18_n733(x)
+ end
+end
+
+def fun_l17_n834(x)
+ if (x < 1)
+ fun_l18_n320(x)
+ else
+ fun_l18_n801(x)
+ end
+end
+
+def fun_l17_n835(x)
+ if (x < 1)
+ fun_l18_n672(x)
+ else
+ fun_l18_n183(x)
+ end
+end
+
+def fun_l17_n836(x)
+ if (x < 1)
+ fun_l18_n810(x)
+ else
+ fun_l18_n923(x)
+ end
+end
+
+def fun_l17_n837(x)
+ if (x < 1)
+ fun_l18_n775(x)
+ else
+ fun_l18_n884(x)
+ end
+end
+
+def fun_l17_n838(x)
+ if (x < 1)
+ fun_l18_n9(x)
+ else
+ fun_l18_n690(x)
+ end
+end
+
+def fun_l17_n839(x)
+ if (x < 1)
+ fun_l18_n843(x)
+ else
+ fun_l18_n482(x)
+ end
+end
+
+def fun_l17_n840(x)
+ if (x < 1)
+ fun_l18_n527(x)
+ else
+ fun_l18_n331(x)
+ end
+end
+
+def fun_l17_n841(x)
+ if (x < 1)
+ fun_l18_n210(x)
+ else
+ fun_l18_n119(x)
+ end
+end
+
+def fun_l17_n842(x)
+ if (x < 1)
+ fun_l18_n365(x)
+ else
+ fun_l18_n752(x)
+ end
+end
+
+def fun_l17_n843(x)
+ if (x < 1)
+ fun_l18_n855(x)
+ else
+ fun_l18_n149(x)
+ end
+end
+
+def fun_l17_n844(x)
+ if (x < 1)
+ fun_l18_n822(x)
+ else
+ fun_l18_n852(x)
+ end
+end
+
+def fun_l17_n845(x)
+ if (x < 1)
+ fun_l18_n182(x)
+ else
+ fun_l18_n145(x)
+ end
+end
+
+def fun_l17_n846(x)
+ if (x < 1)
+ fun_l18_n167(x)
+ else
+ fun_l18_n47(x)
+ end
+end
+
+def fun_l17_n847(x)
+ if (x < 1)
+ fun_l18_n350(x)
+ else
+ fun_l18_n894(x)
+ end
+end
+
+def fun_l17_n848(x)
+ if (x < 1)
+ fun_l18_n264(x)
+ else
+ fun_l18_n739(x)
+ end
+end
+
+def fun_l17_n849(x)
+ if (x < 1)
+ fun_l18_n475(x)
+ else
+ fun_l18_n974(x)
+ end
+end
+
+def fun_l17_n850(x)
+ if (x < 1)
+ fun_l18_n849(x)
+ else
+ fun_l18_n68(x)
+ end
+end
+
+def fun_l17_n851(x)
+ if (x < 1)
+ fun_l18_n160(x)
+ else
+ fun_l18_n173(x)
+ end
+end
+
+def fun_l17_n852(x)
+ if (x < 1)
+ fun_l18_n353(x)
+ else
+ fun_l18_n931(x)
+ end
+end
+
+def fun_l17_n853(x)
+ if (x < 1)
+ fun_l18_n706(x)
+ else
+ fun_l18_n540(x)
+ end
+end
+
+def fun_l17_n854(x)
+ if (x < 1)
+ fun_l18_n559(x)
+ else
+ fun_l18_n149(x)
+ end
+end
+
+def fun_l17_n855(x)
+ if (x < 1)
+ fun_l18_n347(x)
+ else
+ fun_l18_n559(x)
+ end
+end
+
+def fun_l17_n856(x)
+ if (x < 1)
+ fun_l18_n640(x)
+ else
+ fun_l18_n529(x)
+ end
+end
+
+def fun_l17_n857(x)
+ if (x < 1)
+ fun_l18_n410(x)
+ else
+ fun_l18_n278(x)
+ end
+end
+
+def fun_l17_n858(x)
+ if (x < 1)
+ fun_l18_n15(x)
+ else
+ fun_l18_n21(x)
+ end
+end
+
+def fun_l17_n859(x)
+ if (x < 1)
+ fun_l18_n180(x)
+ else
+ fun_l18_n530(x)
+ end
+end
+
+def fun_l17_n860(x)
+ if (x < 1)
+ fun_l18_n739(x)
+ else
+ fun_l18_n817(x)
+ end
+end
+
+def fun_l17_n861(x)
+ if (x < 1)
+ fun_l18_n341(x)
+ else
+ fun_l18_n962(x)
+ end
+end
+
+def fun_l17_n862(x)
+ if (x < 1)
+ fun_l18_n994(x)
+ else
+ fun_l18_n338(x)
+ end
+end
+
+def fun_l17_n863(x)
+ if (x < 1)
+ fun_l18_n428(x)
+ else
+ fun_l18_n608(x)
+ end
+end
+
+def fun_l17_n864(x)
+ if (x < 1)
+ fun_l18_n889(x)
+ else
+ fun_l18_n974(x)
+ end
+end
+
+def fun_l17_n865(x)
+ if (x < 1)
+ fun_l18_n300(x)
+ else
+ fun_l18_n164(x)
+ end
+end
+
+def fun_l17_n866(x)
+ if (x < 1)
+ fun_l18_n195(x)
+ else
+ fun_l18_n75(x)
+ end
+end
+
+def fun_l17_n867(x)
+ if (x < 1)
+ fun_l18_n725(x)
+ else
+ fun_l18_n639(x)
+ end
+end
+
+def fun_l17_n868(x)
+ if (x < 1)
+ fun_l18_n793(x)
+ else
+ fun_l18_n925(x)
+ end
+end
+
+def fun_l17_n869(x)
+ if (x < 1)
+ fun_l18_n845(x)
+ else
+ fun_l18_n174(x)
+ end
+end
+
+def fun_l17_n870(x)
+ if (x < 1)
+ fun_l18_n202(x)
+ else
+ fun_l18_n376(x)
+ end
+end
+
+def fun_l17_n871(x)
+ if (x < 1)
+ fun_l18_n503(x)
+ else
+ fun_l18_n441(x)
+ end
+end
+
+def fun_l17_n872(x)
+ if (x < 1)
+ fun_l18_n675(x)
+ else
+ fun_l18_n180(x)
+ end
+end
+
+def fun_l17_n873(x)
+ if (x < 1)
+ fun_l18_n457(x)
+ else
+ fun_l18_n286(x)
+ end
+end
+
+def fun_l17_n874(x)
+ if (x < 1)
+ fun_l18_n918(x)
+ else
+ fun_l18_n438(x)
+ end
+end
+
+def fun_l17_n875(x)
+ if (x < 1)
+ fun_l18_n269(x)
+ else
+ fun_l18_n539(x)
+ end
+end
+
+def fun_l17_n876(x)
+ if (x < 1)
+ fun_l18_n417(x)
+ else
+ fun_l18_n68(x)
+ end
+end
+
+def fun_l17_n877(x)
+ if (x < 1)
+ fun_l18_n382(x)
+ else
+ fun_l18_n392(x)
+ end
+end
+
+def fun_l17_n878(x)
+ if (x < 1)
+ fun_l18_n981(x)
+ else
+ fun_l18_n997(x)
+ end
+end
+
+def fun_l17_n879(x)
+ if (x < 1)
+ fun_l18_n8(x)
+ else
+ fun_l18_n255(x)
+ end
+end
+
+def fun_l17_n880(x)
+ if (x < 1)
+ fun_l18_n634(x)
+ else
+ fun_l18_n971(x)
+ end
+end
+
+def fun_l17_n881(x)
+ if (x < 1)
+ fun_l18_n940(x)
+ else
+ fun_l18_n410(x)
+ end
+end
+
+def fun_l17_n882(x)
+ if (x < 1)
+ fun_l18_n550(x)
+ else
+ fun_l18_n959(x)
+ end
+end
+
+def fun_l17_n883(x)
+ if (x < 1)
+ fun_l18_n258(x)
+ else
+ fun_l18_n766(x)
+ end
+end
+
+def fun_l17_n884(x)
+ if (x < 1)
+ fun_l18_n841(x)
+ else
+ fun_l18_n387(x)
+ end
+end
+
+def fun_l17_n885(x)
+ if (x < 1)
+ fun_l18_n357(x)
+ else
+ fun_l18_n128(x)
+ end
+end
+
+def fun_l17_n886(x)
+ if (x < 1)
+ fun_l18_n872(x)
+ else
+ fun_l18_n471(x)
+ end
+end
+
+def fun_l17_n887(x)
+ if (x < 1)
+ fun_l18_n596(x)
+ else
+ fun_l18_n639(x)
+ end
+end
+
+def fun_l17_n888(x)
+ if (x < 1)
+ fun_l18_n665(x)
+ else
+ fun_l18_n999(x)
+ end
+end
+
+def fun_l17_n889(x)
+ if (x < 1)
+ fun_l18_n898(x)
+ else
+ fun_l18_n899(x)
+ end
+end
+
+def fun_l17_n890(x)
+ if (x < 1)
+ fun_l18_n457(x)
+ else
+ fun_l18_n370(x)
+ end
+end
+
+def fun_l17_n891(x)
+ if (x < 1)
+ fun_l18_n100(x)
+ else
+ fun_l18_n899(x)
+ end
+end
+
+def fun_l17_n892(x)
+ if (x < 1)
+ fun_l18_n785(x)
+ else
+ fun_l18_n552(x)
+ end
+end
+
+def fun_l17_n893(x)
+ if (x < 1)
+ fun_l18_n386(x)
+ else
+ fun_l18_n971(x)
+ end
+end
+
+def fun_l17_n894(x)
+ if (x < 1)
+ fun_l18_n128(x)
+ else
+ fun_l18_n28(x)
+ end
+end
+
+def fun_l17_n895(x)
+ if (x < 1)
+ fun_l18_n18(x)
+ else
+ fun_l18_n682(x)
+ end
+end
+
+def fun_l17_n896(x)
+ if (x < 1)
+ fun_l18_n470(x)
+ else
+ fun_l18_n477(x)
+ end
+end
+
+def fun_l17_n897(x)
+ if (x < 1)
+ fun_l18_n543(x)
+ else
+ fun_l18_n943(x)
+ end
+end
+
+def fun_l17_n898(x)
+ if (x < 1)
+ fun_l18_n554(x)
+ else
+ fun_l18_n431(x)
+ end
+end
+
+def fun_l17_n899(x)
+ if (x < 1)
+ fun_l18_n615(x)
+ else
+ fun_l18_n480(x)
+ end
+end
+
+def fun_l17_n900(x)
+ if (x < 1)
+ fun_l18_n557(x)
+ else
+ fun_l18_n831(x)
+ end
+end
+
+def fun_l17_n901(x)
+ if (x < 1)
+ fun_l18_n245(x)
+ else
+ fun_l18_n79(x)
+ end
+end
+
+def fun_l17_n902(x)
+ if (x < 1)
+ fun_l18_n332(x)
+ else
+ fun_l18_n536(x)
+ end
+end
+
+def fun_l17_n903(x)
+ if (x < 1)
+ fun_l18_n531(x)
+ else
+ fun_l18_n933(x)
+ end
+end
+
+def fun_l17_n904(x)
+ if (x < 1)
+ fun_l18_n748(x)
+ else
+ fun_l18_n210(x)
+ end
+end
+
+def fun_l17_n905(x)
+ if (x < 1)
+ fun_l18_n351(x)
+ else
+ fun_l18_n698(x)
+ end
+end
+
+def fun_l17_n906(x)
+ if (x < 1)
+ fun_l18_n112(x)
+ else
+ fun_l18_n397(x)
+ end
+end
+
+def fun_l17_n907(x)
+ if (x < 1)
+ fun_l18_n177(x)
+ else
+ fun_l18_n826(x)
+ end
+end
+
+def fun_l17_n908(x)
+ if (x < 1)
+ fun_l18_n635(x)
+ else
+ fun_l18_n885(x)
+ end
+end
+
+def fun_l17_n909(x)
+ if (x < 1)
+ fun_l18_n225(x)
+ else
+ fun_l18_n139(x)
+ end
+end
+
+def fun_l17_n910(x)
+ if (x < 1)
+ fun_l18_n30(x)
+ else
+ fun_l18_n113(x)
+ end
+end
+
+def fun_l17_n911(x)
+ if (x < 1)
+ fun_l18_n5(x)
+ else
+ fun_l18_n324(x)
+ end
+end
+
+def fun_l17_n912(x)
+ if (x < 1)
+ fun_l18_n626(x)
+ else
+ fun_l18_n326(x)
+ end
+end
+
+def fun_l17_n913(x)
+ if (x < 1)
+ fun_l18_n478(x)
+ else
+ fun_l18_n373(x)
+ end
+end
+
+def fun_l17_n914(x)
+ if (x < 1)
+ fun_l18_n348(x)
+ else
+ fun_l18_n420(x)
+ end
+end
+
+def fun_l17_n915(x)
+ if (x < 1)
+ fun_l18_n777(x)
+ else
+ fun_l18_n185(x)
+ end
+end
+
+def fun_l17_n916(x)
+ if (x < 1)
+ fun_l18_n18(x)
+ else
+ fun_l18_n286(x)
+ end
+end
+
+def fun_l17_n917(x)
+ if (x < 1)
+ fun_l18_n199(x)
+ else
+ fun_l18_n378(x)
+ end
+end
+
+def fun_l17_n918(x)
+ if (x < 1)
+ fun_l18_n282(x)
+ else
+ fun_l18_n617(x)
+ end
+end
+
+def fun_l17_n919(x)
+ if (x < 1)
+ fun_l18_n634(x)
+ else
+ fun_l18_n396(x)
+ end
+end
+
+def fun_l17_n920(x)
+ if (x < 1)
+ fun_l18_n630(x)
+ else
+ fun_l18_n479(x)
+ end
+end
+
+def fun_l17_n921(x)
+ if (x < 1)
+ fun_l18_n828(x)
+ else
+ fun_l18_n189(x)
+ end
+end
+
+def fun_l17_n922(x)
+ if (x < 1)
+ fun_l18_n468(x)
+ else
+ fun_l18_n400(x)
+ end
+end
+
+def fun_l17_n923(x)
+ if (x < 1)
+ fun_l18_n815(x)
+ else
+ fun_l18_n0(x)
+ end
+end
+
+def fun_l17_n924(x)
+ if (x < 1)
+ fun_l18_n796(x)
+ else
+ fun_l18_n357(x)
+ end
+end
+
+def fun_l17_n925(x)
+ if (x < 1)
+ fun_l18_n4(x)
+ else
+ fun_l18_n293(x)
+ end
+end
+
+def fun_l17_n926(x)
+ if (x < 1)
+ fun_l18_n187(x)
+ else
+ fun_l18_n131(x)
+ end
+end
+
+def fun_l17_n927(x)
+ if (x < 1)
+ fun_l18_n896(x)
+ else
+ fun_l18_n257(x)
+ end
+end
+
+def fun_l17_n928(x)
+ if (x < 1)
+ fun_l18_n596(x)
+ else
+ fun_l18_n115(x)
+ end
+end
+
+def fun_l17_n929(x)
+ if (x < 1)
+ fun_l18_n630(x)
+ else
+ fun_l18_n62(x)
+ end
+end
+
+def fun_l17_n930(x)
+ if (x < 1)
+ fun_l18_n776(x)
+ else
+ fun_l18_n664(x)
+ end
+end
+
+def fun_l17_n931(x)
+ if (x < 1)
+ fun_l18_n424(x)
+ else
+ fun_l18_n298(x)
+ end
+end
+
+def fun_l17_n932(x)
+ if (x < 1)
+ fun_l18_n734(x)
+ else
+ fun_l18_n652(x)
+ end
+end
+
+def fun_l17_n933(x)
+ if (x < 1)
+ fun_l18_n796(x)
+ else
+ fun_l18_n8(x)
+ end
+end
+
+def fun_l17_n934(x)
+ if (x < 1)
+ fun_l18_n783(x)
+ else
+ fun_l18_n177(x)
+ end
+end
+
+def fun_l17_n935(x)
+ if (x < 1)
+ fun_l18_n288(x)
+ else
+ fun_l18_n274(x)
+ end
+end
+
+def fun_l17_n936(x)
+ if (x < 1)
+ fun_l18_n289(x)
+ else
+ fun_l18_n938(x)
+ end
+end
+
+def fun_l17_n937(x)
+ if (x < 1)
+ fun_l18_n815(x)
+ else
+ fun_l18_n924(x)
+ end
+end
+
+def fun_l17_n938(x)
+ if (x < 1)
+ fun_l18_n145(x)
+ else
+ fun_l18_n497(x)
+ end
+end
+
+def fun_l17_n939(x)
+ if (x < 1)
+ fun_l18_n433(x)
+ else
+ fun_l18_n628(x)
+ end
+end
+
+def fun_l17_n940(x)
+ if (x < 1)
+ fun_l18_n410(x)
+ else
+ fun_l18_n461(x)
+ end
+end
+
+def fun_l17_n941(x)
+ if (x < 1)
+ fun_l18_n682(x)
+ else
+ fun_l18_n81(x)
+ end
+end
+
+def fun_l17_n942(x)
+ if (x < 1)
+ fun_l18_n948(x)
+ else
+ fun_l18_n29(x)
+ end
+end
+
+def fun_l17_n943(x)
+ if (x < 1)
+ fun_l18_n78(x)
+ else
+ fun_l18_n237(x)
+ end
+end
+
+def fun_l17_n944(x)
+ if (x < 1)
+ fun_l18_n683(x)
+ else
+ fun_l18_n936(x)
+ end
+end
+
+def fun_l17_n945(x)
+ if (x < 1)
+ fun_l18_n339(x)
+ else
+ fun_l18_n471(x)
+ end
+end
+
+def fun_l17_n946(x)
+ if (x < 1)
+ fun_l18_n903(x)
+ else
+ fun_l18_n983(x)
+ end
+end
+
+def fun_l17_n947(x)
+ if (x < 1)
+ fun_l18_n231(x)
+ else
+ fun_l18_n985(x)
+ end
+end
+
+def fun_l17_n948(x)
+ if (x < 1)
+ fun_l18_n379(x)
+ else
+ fun_l18_n385(x)
+ end
+end
+
+def fun_l17_n949(x)
+ if (x < 1)
+ fun_l18_n89(x)
+ else
+ fun_l18_n499(x)
+ end
+end
+
+def fun_l17_n950(x)
+ if (x < 1)
+ fun_l18_n851(x)
+ else
+ fun_l18_n563(x)
+ end
+end
+
+def fun_l17_n951(x)
+ if (x < 1)
+ fun_l18_n803(x)
+ else
+ fun_l18_n109(x)
+ end
+end
+
+def fun_l17_n952(x)
+ if (x < 1)
+ fun_l18_n178(x)
+ else
+ fun_l18_n886(x)
+ end
+end
+
+def fun_l17_n953(x)
+ if (x < 1)
+ fun_l18_n705(x)
+ else
+ fun_l18_n340(x)
+ end
+end
+
+def fun_l17_n954(x)
+ if (x < 1)
+ fun_l18_n207(x)
+ else
+ fun_l18_n499(x)
+ end
+end
+
+def fun_l17_n955(x)
+ if (x < 1)
+ fun_l18_n298(x)
+ else
+ fun_l18_n921(x)
+ end
+end
+
+def fun_l17_n956(x)
+ if (x < 1)
+ fun_l18_n291(x)
+ else
+ fun_l18_n768(x)
+ end
+end
+
+def fun_l17_n957(x)
+ if (x < 1)
+ fun_l18_n144(x)
+ else
+ fun_l18_n316(x)
+ end
+end
+
+def fun_l17_n958(x)
+ if (x < 1)
+ fun_l18_n375(x)
+ else
+ fun_l18_n891(x)
+ end
+end
+
+def fun_l17_n959(x)
+ if (x < 1)
+ fun_l18_n989(x)
+ else
+ fun_l18_n773(x)
+ end
+end
+
+def fun_l17_n960(x)
+ if (x < 1)
+ fun_l18_n615(x)
+ else
+ fun_l18_n252(x)
+ end
+end
+
+def fun_l17_n961(x)
+ if (x < 1)
+ fun_l18_n827(x)
+ else
+ fun_l18_n567(x)
+ end
+end
+
+def fun_l17_n962(x)
+ if (x < 1)
+ fun_l18_n792(x)
+ else
+ fun_l18_n81(x)
+ end
+end
+
+def fun_l17_n963(x)
+ if (x < 1)
+ fun_l18_n561(x)
+ else
+ fun_l18_n732(x)
+ end
+end
+
+def fun_l17_n964(x)
+ if (x < 1)
+ fun_l18_n113(x)
+ else
+ fun_l18_n110(x)
+ end
+end
+
+def fun_l17_n965(x)
+ if (x < 1)
+ fun_l18_n321(x)
+ else
+ fun_l18_n557(x)
+ end
+end
+
+def fun_l17_n966(x)
+ if (x < 1)
+ fun_l18_n409(x)
+ else
+ fun_l18_n449(x)
+ end
+end
+
+def fun_l17_n967(x)
+ if (x < 1)
+ fun_l18_n316(x)
+ else
+ fun_l18_n669(x)
+ end
+end
+
+def fun_l17_n968(x)
+ if (x < 1)
+ fun_l18_n190(x)
+ else
+ fun_l18_n450(x)
+ end
+end
+
+def fun_l17_n969(x)
+ if (x < 1)
+ fun_l18_n174(x)
+ else
+ fun_l18_n425(x)
+ end
+end
+
+def fun_l17_n970(x)
+ if (x < 1)
+ fun_l18_n918(x)
+ else
+ fun_l18_n537(x)
+ end
+end
+
+def fun_l17_n971(x)
+ if (x < 1)
+ fun_l18_n923(x)
+ else
+ fun_l18_n998(x)
+ end
+end
+
+def fun_l17_n972(x)
+ if (x < 1)
+ fun_l18_n625(x)
+ else
+ fun_l18_n75(x)
+ end
+end
+
+def fun_l17_n973(x)
+ if (x < 1)
+ fun_l18_n171(x)
+ else
+ fun_l18_n180(x)
+ end
+end
+
+def fun_l17_n974(x)
+ if (x < 1)
+ fun_l18_n430(x)
+ else
+ fun_l18_n659(x)
+ end
+end
+
+def fun_l17_n975(x)
+ if (x < 1)
+ fun_l18_n88(x)
+ else
+ fun_l18_n363(x)
+ end
+end
+
+def fun_l17_n976(x)
+ if (x < 1)
+ fun_l18_n408(x)
+ else
+ fun_l18_n986(x)
+ end
+end
+
+def fun_l17_n977(x)
+ if (x < 1)
+ fun_l18_n988(x)
+ else
+ fun_l18_n818(x)
+ end
+end
+
+def fun_l17_n978(x)
+ if (x < 1)
+ fun_l18_n824(x)
+ else
+ fun_l18_n24(x)
+ end
+end
+
+def fun_l17_n979(x)
+ if (x < 1)
+ fun_l18_n182(x)
+ else
+ fun_l18_n969(x)
+ end
+end
+
+def fun_l17_n980(x)
+ if (x < 1)
+ fun_l18_n187(x)
+ else
+ fun_l18_n615(x)
+ end
+end
+
+def fun_l17_n981(x)
+ if (x < 1)
+ fun_l18_n646(x)
+ else
+ fun_l18_n25(x)
+ end
+end
+
+def fun_l17_n982(x)
+ if (x < 1)
+ fun_l18_n700(x)
+ else
+ fun_l18_n127(x)
+ end
+end
+
+def fun_l17_n983(x)
+ if (x < 1)
+ fun_l18_n153(x)
+ else
+ fun_l18_n831(x)
+ end
+end
+
+def fun_l17_n984(x)
+ if (x < 1)
+ fun_l18_n884(x)
+ else
+ fun_l18_n540(x)
+ end
+end
+
+def fun_l17_n985(x)
+ if (x < 1)
+ fun_l18_n225(x)
+ else
+ fun_l18_n221(x)
+ end
+end
+
+def fun_l17_n986(x)
+ if (x < 1)
+ fun_l18_n431(x)
+ else
+ fun_l18_n884(x)
+ end
+end
+
+def fun_l17_n987(x)
+ if (x < 1)
+ fun_l18_n271(x)
+ else
+ fun_l18_n541(x)
+ end
+end
+
+def fun_l17_n988(x)
+ if (x < 1)
+ fun_l18_n419(x)
+ else
+ fun_l18_n183(x)
+ end
+end
+
+def fun_l17_n989(x)
+ if (x < 1)
+ fun_l18_n85(x)
+ else
+ fun_l18_n51(x)
+ end
+end
+
+def fun_l17_n990(x)
+ if (x < 1)
+ fun_l18_n528(x)
+ else
+ fun_l18_n380(x)
+ end
+end
+
+def fun_l17_n991(x)
+ if (x < 1)
+ fun_l18_n13(x)
+ else
+ fun_l18_n137(x)
+ end
+end
+
+def fun_l17_n992(x)
+ if (x < 1)
+ fun_l18_n655(x)
+ else
+ fun_l18_n344(x)
+ end
+end
+
+def fun_l17_n993(x)
+ if (x < 1)
+ fun_l18_n911(x)
+ else
+ fun_l18_n21(x)
+ end
+end
+
+def fun_l17_n994(x)
+ if (x < 1)
+ fun_l18_n887(x)
+ else
+ fun_l18_n935(x)
+ end
+end
+
+def fun_l17_n995(x)
+ if (x < 1)
+ fun_l18_n206(x)
+ else
+ fun_l18_n374(x)
+ end
+end
+
+def fun_l17_n996(x)
+ if (x < 1)
+ fun_l18_n552(x)
+ else
+ fun_l18_n209(x)
+ end
+end
+
+def fun_l17_n997(x)
+ if (x < 1)
+ fun_l18_n540(x)
+ else
+ fun_l18_n901(x)
+ end
+end
+
+def fun_l17_n998(x)
+ if (x < 1)
+ fun_l18_n547(x)
+ else
+ fun_l18_n304(x)
+ end
+end
+
+def fun_l17_n999(x)
+ if (x < 1)
+ fun_l18_n297(x)
+ else
+ fun_l18_n868(x)
+ end
+end
+
+def fun_l18_n0(x)
+ if (x < 1)
+ fun_l19_n619(x)
+ else
+ fun_l19_n167(x)
+ end
+end
+
+def fun_l18_n1(x)
+ if (x < 1)
+ fun_l19_n669(x)
+ else
+ fun_l19_n962(x)
+ end
+end
+
+def fun_l18_n2(x)
+ if (x < 1)
+ fun_l19_n235(x)
+ else
+ fun_l19_n99(x)
+ end
+end
+
+def fun_l18_n3(x)
+ if (x < 1)
+ fun_l19_n961(x)
+ else
+ fun_l19_n200(x)
+ end
+end
+
+def fun_l18_n4(x)
+ if (x < 1)
+ fun_l19_n812(x)
+ else
+ fun_l19_n764(x)
+ end
+end
+
+def fun_l18_n5(x)
+ if (x < 1)
+ fun_l19_n605(x)
+ else
+ fun_l19_n260(x)
+ end
+end
+
+def fun_l18_n6(x)
+ if (x < 1)
+ fun_l19_n146(x)
+ else
+ fun_l19_n617(x)
+ end
+end
+
+def fun_l18_n7(x)
+ if (x < 1)
+ fun_l19_n181(x)
+ else
+ fun_l19_n31(x)
+ end
+end
+
+def fun_l18_n8(x)
+ if (x < 1)
+ fun_l19_n884(x)
+ else
+ fun_l19_n341(x)
+ end
+end
+
+def fun_l18_n9(x)
+ if (x < 1)
+ fun_l19_n741(x)
+ else
+ fun_l19_n704(x)
+ end
+end
+
+def fun_l18_n10(x)
+ if (x < 1)
+ fun_l19_n610(x)
+ else
+ fun_l19_n24(x)
+ end
+end
+
+def fun_l18_n11(x)
+ if (x < 1)
+ fun_l19_n184(x)
+ else
+ fun_l19_n125(x)
+ end
+end
+
+def fun_l18_n12(x)
+ if (x < 1)
+ fun_l19_n59(x)
+ else
+ fun_l19_n30(x)
+ end
+end
+
+def fun_l18_n13(x)
+ if (x < 1)
+ fun_l19_n255(x)
+ else
+ fun_l19_n18(x)
+ end
+end
+
+def fun_l18_n14(x)
+ if (x < 1)
+ fun_l19_n661(x)
+ else
+ fun_l19_n554(x)
+ end
+end
+
+def fun_l18_n15(x)
+ if (x < 1)
+ fun_l19_n557(x)
+ else
+ fun_l19_n757(x)
+ end
+end
+
+def fun_l18_n16(x)
+ if (x < 1)
+ fun_l19_n946(x)
+ else
+ fun_l19_n403(x)
+ end
+end
+
+def fun_l18_n17(x)
+ if (x < 1)
+ fun_l19_n872(x)
+ else
+ fun_l19_n64(x)
+ end
+end
+
+def fun_l18_n18(x)
+ if (x < 1)
+ fun_l19_n531(x)
+ else
+ fun_l19_n200(x)
+ end
+end
+
+def fun_l18_n19(x)
+ if (x < 1)
+ fun_l19_n172(x)
+ else
+ fun_l19_n319(x)
+ end
+end
+
+def fun_l18_n20(x)
+ if (x < 1)
+ fun_l19_n369(x)
+ else
+ fun_l19_n707(x)
+ end
+end
+
+def fun_l18_n21(x)
+ if (x < 1)
+ fun_l19_n726(x)
+ else
+ fun_l19_n718(x)
+ end
+end
+
+def fun_l18_n22(x)
+ if (x < 1)
+ fun_l19_n169(x)
+ else
+ fun_l19_n117(x)
+ end
+end
+
+def fun_l18_n23(x)
+ if (x < 1)
+ fun_l19_n913(x)
+ else
+ fun_l19_n489(x)
+ end
+end
+
+def fun_l18_n24(x)
+ if (x < 1)
+ fun_l19_n950(x)
+ else
+ fun_l19_n272(x)
+ end
+end
+
+def fun_l18_n25(x)
+ if (x < 1)
+ fun_l19_n835(x)
+ else
+ fun_l19_n341(x)
+ end
+end
+
+def fun_l18_n26(x)
+ if (x < 1)
+ fun_l19_n771(x)
+ else
+ fun_l19_n805(x)
+ end
+end
+
+def fun_l18_n27(x)
+ if (x < 1)
+ fun_l19_n71(x)
+ else
+ fun_l19_n515(x)
+ end
+end
+
+def fun_l18_n28(x)
+ if (x < 1)
+ fun_l19_n472(x)
+ else
+ fun_l19_n807(x)
+ end
+end
+
+def fun_l18_n29(x)
+ if (x < 1)
+ fun_l19_n957(x)
+ else
+ fun_l19_n555(x)
+ end
+end
+
+def fun_l18_n30(x)
+ if (x < 1)
+ fun_l19_n629(x)
+ else
+ fun_l19_n113(x)
+ end
+end
+
+def fun_l18_n31(x)
+ if (x < 1)
+ fun_l19_n791(x)
+ else
+ fun_l19_n340(x)
+ end
+end
+
+def fun_l18_n32(x)
+ if (x < 1)
+ fun_l19_n852(x)
+ else
+ fun_l19_n204(x)
+ end
+end
+
+def fun_l18_n33(x)
+ if (x < 1)
+ fun_l19_n441(x)
+ else
+ fun_l19_n331(x)
+ end
+end
+
+def fun_l18_n34(x)
+ if (x < 1)
+ fun_l19_n51(x)
+ else
+ fun_l19_n199(x)
+ end
+end
+
+def fun_l18_n35(x)
+ if (x < 1)
+ fun_l19_n472(x)
+ else
+ fun_l19_n589(x)
+ end
+end
+
+def fun_l18_n36(x)
+ if (x < 1)
+ fun_l19_n191(x)
+ else
+ fun_l19_n333(x)
+ end
+end
+
+def fun_l18_n37(x)
+ if (x < 1)
+ fun_l19_n412(x)
+ else
+ fun_l19_n661(x)
+ end
+end
+
+def fun_l18_n38(x)
+ if (x < 1)
+ fun_l19_n427(x)
+ else
+ fun_l19_n401(x)
+ end
+end
+
+def fun_l18_n39(x)
+ if (x < 1)
+ fun_l19_n96(x)
+ else
+ fun_l19_n235(x)
+ end
+end
+
+def fun_l18_n40(x)
+ if (x < 1)
+ fun_l19_n984(x)
+ else
+ fun_l19_n586(x)
+ end
+end
+
+def fun_l18_n41(x)
+ if (x < 1)
+ fun_l19_n559(x)
+ else
+ fun_l19_n382(x)
+ end
+end
+
+def fun_l18_n42(x)
+ if (x < 1)
+ fun_l19_n802(x)
+ else
+ fun_l19_n217(x)
+ end
+end
+
+def fun_l18_n43(x)
+ if (x < 1)
+ fun_l19_n693(x)
+ else
+ fun_l19_n178(x)
+ end
+end
+
+def fun_l18_n44(x)
+ if (x < 1)
+ fun_l19_n961(x)
+ else
+ fun_l19_n425(x)
+ end
+end
+
+def fun_l18_n45(x)
+ if (x < 1)
+ fun_l19_n242(x)
+ else
+ fun_l19_n949(x)
+ end
+end
+
+def fun_l18_n46(x)
+ if (x < 1)
+ fun_l19_n418(x)
+ else
+ fun_l19_n462(x)
+ end
+end
+
+def fun_l18_n47(x)
+ if (x < 1)
+ fun_l19_n56(x)
+ else
+ fun_l19_n79(x)
+ end
+end
+
+def fun_l18_n48(x)
+ if (x < 1)
+ fun_l19_n5(x)
+ else
+ fun_l19_n939(x)
+ end
+end
+
+def fun_l18_n49(x)
+ if (x < 1)
+ fun_l19_n4(x)
+ else
+ fun_l19_n262(x)
+ end
+end
+
+def fun_l18_n50(x)
+ if (x < 1)
+ fun_l19_n476(x)
+ else
+ fun_l19_n751(x)
+ end
+end
+
+def fun_l18_n51(x)
+ if (x < 1)
+ fun_l19_n687(x)
+ else
+ fun_l19_n489(x)
+ end
+end
+
+def fun_l18_n52(x)
+ if (x < 1)
+ fun_l19_n965(x)
+ else
+ fun_l19_n198(x)
+ end
+end
+
+def fun_l18_n53(x)
+ if (x < 1)
+ fun_l19_n349(x)
+ else
+ fun_l19_n603(x)
+ end
+end
+
+def fun_l18_n54(x)
+ if (x < 1)
+ fun_l19_n893(x)
+ else
+ fun_l19_n279(x)
+ end
+end
+
+def fun_l18_n55(x)
+ if (x < 1)
+ fun_l19_n816(x)
+ else
+ fun_l19_n922(x)
+ end
+end
+
+def fun_l18_n56(x)
+ if (x < 1)
+ fun_l19_n10(x)
+ else
+ fun_l19_n750(x)
+ end
+end
+
+def fun_l18_n57(x)
+ if (x < 1)
+ fun_l19_n787(x)
+ else
+ fun_l19_n446(x)
+ end
+end
+
+def fun_l18_n58(x)
+ if (x < 1)
+ fun_l19_n662(x)
+ else
+ fun_l19_n636(x)
+ end
+end
+
+def fun_l18_n59(x)
+ if (x < 1)
+ fun_l19_n640(x)
+ else
+ fun_l19_n604(x)
+ end
+end
+
+def fun_l18_n60(x)
+ if (x < 1)
+ fun_l19_n1(x)
+ else
+ fun_l19_n657(x)
+ end
+end
+
+def fun_l18_n61(x)
+ if (x < 1)
+ fun_l19_n657(x)
+ else
+ fun_l19_n516(x)
+ end
+end
+
+def fun_l18_n62(x)
+ if (x < 1)
+ fun_l19_n167(x)
+ else
+ fun_l19_n770(x)
+ end
+end
+
+def fun_l18_n63(x)
+ if (x < 1)
+ fun_l19_n572(x)
+ else
+ fun_l19_n224(x)
+ end
+end
+
+def fun_l18_n64(x)
+ if (x < 1)
+ fun_l19_n564(x)
+ else
+ fun_l19_n64(x)
+ end
+end
+
+def fun_l18_n65(x)
+ if (x < 1)
+ fun_l19_n200(x)
+ else
+ fun_l19_n724(x)
+ end
+end
+
+def fun_l18_n66(x)
+ if (x < 1)
+ fun_l19_n295(x)
+ else
+ fun_l19_n127(x)
+ end
+end
+
+def fun_l18_n67(x)
+ if (x < 1)
+ fun_l19_n81(x)
+ else
+ fun_l19_n757(x)
+ end
+end
+
+def fun_l18_n68(x)
+ if (x < 1)
+ fun_l19_n573(x)
+ else
+ fun_l19_n473(x)
+ end
+end
+
+def fun_l18_n69(x)
+ if (x < 1)
+ fun_l19_n475(x)
+ else
+ fun_l19_n8(x)
+ end
+end
+
+def fun_l18_n70(x)
+ if (x < 1)
+ fun_l19_n564(x)
+ else
+ fun_l19_n74(x)
+ end
+end
+
+def fun_l18_n71(x)
+ if (x < 1)
+ fun_l19_n270(x)
+ else
+ fun_l19_n12(x)
+ end
+end
+
+def fun_l18_n72(x)
+ if (x < 1)
+ fun_l19_n809(x)
+ else
+ fun_l19_n857(x)
+ end
+end
+
+def fun_l18_n73(x)
+ if (x < 1)
+ fun_l19_n329(x)
+ else
+ fun_l19_n850(x)
+ end
+end
+
+def fun_l18_n74(x)
+ if (x < 1)
+ fun_l19_n471(x)
+ else
+ fun_l19_n127(x)
+ end
+end
+
+def fun_l18_n75(x)
+ if (x < 1)
+ fun_l19_n558(x)
+ else
+ fun_l19_n626(x)
+ end
+end
+
+def fun_l18_n76(x)
+ if (x < 1)
+ fun_l19_n648(x)
+ else
+ fun_l19_n687(x)
+ end
+end
+
+def fun_l18_n77(x)
+ if (x < 1)
+ fun_l19_n690(x)
+ else
+ fun_l19_n612(x)
+ end
+end
+
+def fun_l18_n78(x)
+ if (x < 1)
+ fun_l19_n122(x)
+ else
+ fun_l19_n843(x)
+ end
+end
+
+def fun_l18_n79(x)
+ if (x < 1)
+ fun_l19_n375(x)
+ else
+ fun_l19_n56(x)
+ end
+end
+
+def fun_l18_n80(x)
+ if (x < 1)
+ fun_l19_n184(x)
+ else
+ fun_l19_n280(x)
+ end
+end
+
+def fun_l18_n81(x)
+ if (x < 1)
+ fun_l19_n588(x)
+ else
+ fun_l19_n433(x)
+ end
+end
+
+def fun_l18_n82(x)
+ if (x < 1)
+ fun_l19_n144(x)
+ else
+ fun_l19_n754(x)
+ end
+end
+
+def fun_l18_n83(x)
+ if (x < 1)
+ fun_l19_n468(x)
+ else
+ fun_l19_n951(x)
+ end
+end
+
+def fun_l18_n84(x)
+ if (x < 1)
+ fun_l19_n380(x)
+ else
+ fun_l19_n597(x)
+ end
+end
+
+def fun_l18_n85(x)
+ if (x < 1)
+ fun_l19_n651(x)
+ else
+ fun_l19_n756(x)
+ end
+end
+
+def fun_l18_n86(x)
+ if (x < 1)
+ fun_l19_n440(x)
+ else
+ fun_l19_n184(x)
+ end
+end
+
+def fun_l18_n87(x)
+ if (x < 1)
+ fun_l19_n851(x)
+ else
+ fun_l19_n753(x)
+ end
+end
+
+def fun_l18_n88(x)
+ if (x < 1)
+ fun_l19_n808(x)
+ else
+ fun_l19_n102(x)
+ end
+end
+
+def fun_l18_n89(x)
+ if (x < 1)
+ fun_l19_n768(x)
+ else
+ fun_l19_n885(x)
+ end
+end
+
+def fun_l18_n90(x)
+ if (x < 1)
+ fun_l19_n933(x)
+ else
+ fun_l19_n284(x)
+ end
+end
+
+def fun_l18_n91(x)
+ if (x < 1)
+ fun_l19_n234(x)
+ else
+ fun_l19_n927(x)
+ end
+end
+
+def fun_l18_n92(x)
+ if (x < 1)
+ fun_l19_n901(x)
+ else
+ fun_l19_n690(x)
+ end
+end
+
+def fun_l18_n93(x)
+ if (x < 1)
+ fun_l19_n386(x)
+ else
+ fun_l19_n692(x)
+ end
+end
+
+def fun_l18_n94(x)
+ if (x < 1)
+ fun_l19_n572(x)
+ else
+ fun_l19_n795(x)
+ end
+end
+
+def fun_l18_n95(x)
+ if (x < 1)
+ fun_l19_n647(x)
+ else
+ fun_l19_n337(x)
+ end
+end
+
+def fun_l18_n96(x)
+ if (x < 1)
+ fun_l19_n794(x)
+ else
+ fun_l19_n611(x)
+ end
+end
+
+def fun_l18_n97(x)
+ if (x < 1)
+ fun_l19_n752(x)
+ else
+ fun_l19_n548(x)
+ end
+end
+
+def fun_l18_n98(x)
+ if (x < 1)
+ fun_l19_n710(x)
+ else
+ fun_l19_n685(x)
+ end
+end
+
+def fun_l18_n99(x)
+ if (x < 1)
+ fun_l19_n711(x)
+ else
+ fun_l19_n307(x)
+ end
+end
+
+def fun_l18_n100(x)
+ if (x < 1)
+ fun_l19_n834(x)
+ else
+ fun_l19_n355(x)
+ end
+end
+
+def fun_l18_n101(x)
+ if (x < 1)
+ fun_l19_n473(x)
+ else
+ fun_l19_n924(x)
+ end
+end
+
+def fun_l18_n102(x)
+ if (x < 1)
+ fun_l19_n79(x)
+ else
+ fun_l19_n87(x)
+ end
+end
+
+def fun_l18_n103(x)
+ if (x < 1)
+ fun_l19_n27(x)
+ else
+ fun_l19_n914(x)
+ end
+end
+
+def fun_l18_n104(x)
+ if (x < 1)
+ fun_l19_n327(x)
+ else
+ fun_l19_n136(x)
+ end
+end
+
+def fun_l18_n105(x)
+ if (x < 1)
+ fun_l19_n42(x)
+ else
+ fun_l19_n289(x)
+ end
+end
+
+def fun_l18_n106(x)
+ if (x < 1)
+ fun_l19_n371(x)
+ else
+ fun_l19_n453(x)
+ end
+end
+
+def fun_l18_n107(x)
+ if (x < 1)
+ fun_l19_n579(x)
+ else
+ fun_l19_n500(x)
+ end
+end
+
+def fun_l18_n108(x)
+ if (x < 1)
+ fun_l19_n351(x)
+ else
+ fun_l19_n683(x)
+ end
+end
+
+def fun_l18_n109(x)
+ if (x < 1)
+ fun_l19_n831(x)
+ else
+ fun_l19_n310(x)
+ end
+end
+
+def fun_l18_n110(x)
+ if (x < 1)
+ fun_l19_n618(x)
+ else
+ fun_l19_n113(x)
+ end
+end
+
+def fun_l18_n111(x)
+ if (x < 1)
+ fun_l19_n147(x)
+ else
+ fun_l19_n324(x)
+ end
+end
+
+def fun_l18_n112(x)
+ if (x < 1)
+ fun_l19_n97(x)
+ else
+ fun_l19_n901(x)
+ end
+end
+
+def fun_l18_n113(x)
+ if (x < 1)
+ fun_l19_n223(x)
+ else
+ fun_l19_n819(x)
+ end
+end
+
+def fun_l18_n114(x)
+ if (x < 1)
+ fun_l19_n929(x)
+ else
+ fun_l19_n143(x)
+ end
+end
+
+def fun_l18_n115(x)
+ if (x < 1)
+ fun_l19_n697(x)
+ else
+ fun_l19_n934(x)
+ end
+end
+
+def fun_l18_n116(x)
+ if (x < 1)
+ fun_l19_n143(x)
+ else
+ fun_l19_n815(x)
+ end
+end
+
+def fun_l18_n117(x)
+ if (x < 1)
+ fun_l19_n889(x)
+ else
+ fun_l19_n859(x)
+ end
+end
+
+def fun_l18_n118(x)
+ if (x < 1)
+ fun_l19_n233(x)
+ else
+ fun_l19_n6(x)
+ end
+end
+
+def fun_l18_n119(x)
+ if (x < 1)
+ fun_l19_n490(x)
+ else
+ fun_l19_n783(x)
+ end
+end
+
+def fun_l18_n120(x)
+ if (x < 1)
+ fun_l19_n930(x)
+ else
+ fun_l19_n376(x)
+ end
+end
+
+def fun_l18_n121(x)
+ if (x < 1)
+ fun_l19_n567(x)
+ else
+ fun_l19_n882(x)
+ end
+end
+
+def fun_l18_n122(x)
+ if (x < 1)
+ fun_l19_n532(x)
+ else
+ fun_l19_n294(x)
+ end
+end
+
+def fun_l18_n123(x)
+ if (x < 1)
+ fun_l19_n20(x)
+ else
+ fun_l19_n433(x)
+ end
+end
+
+def fun_l18_n124(x)
+ if (x < 1)
+ fun_l19_n301(x)
+ else
+ fun_l19_n591(x)
+ end
+end
+
+def fun_l18_n125(x)
+ if (x < 1)
+ fun_l19_n424(x)
+ else
+ fun_l19_n524(x)
+ end
+end
+
+def fun_l18_n126(x)
+ if (x < 1)
+ fun_l19_n12(x)
+ else
+ fun_l19_n537(x)
+ end
+end
+
+def fun_l18_n127(x)
+ if (x < 1)
+ fun_l19_n548(x)
+ else
+ fun_l19_n850(x)
+ end
+end
+
+def fun_l18_n128(x)
+ if (x < 1)
+ fun_l19_n463(x)
+ else
+ fun_l19_n714(x)
+ end
+end
+
+def fun_l18_n129(x)
+ if (x < 1)
+ fun_l19_n438(x)
+ else
+ fun_l19_n667(x)
+ end
+end
+
+def fun_l18_n130(x)
+ if (x < 1)
+ fun_l19_n481(x)
+ else
+ fun_l19_n236(x)
+ end
+end
+
+def fun_l18_n131(x)
+ if (x < 1)
+ fun_l19_n84(x)
+ else
+ fun_l19_n370(x)
+ end
+end
+
+def fun_l18_n132(x)
+ if (x < 1)
+ fun_l19_n447(x)
+ else
+ fun_l19_n740(x)
+ end
+end
+
+def fun_l18_n133(x)
+ if (x < 1)
+ fun_l19_n807(x)
+ else
+ fun_l19_n595(x)
+ end
+end
+
+def fun_l18_n134(x)
+ if (x < 1)
+ fun_l19_n716(x)
+ else
+ fun_l19_n440(x)
+ end
+end
+
+def fun_l18_n135(x)
+ if (x < 1)
+ fun_l19_n657(x)
+ else
+ fun_l19_n683(x)
+ end
+end
+
+def fun_l18_n136(x)
+ if (x < 1)
+ fun_l19_n683(x)
+ else
+ fun_l19_n344(x)
+ end
+end
+
+def fun_l18_n137(x)
+ if (x < 1)
+ fun_l19_n228(x)
+ else
+ fun_l19_n186(x)
+ end
+end
+
+def fun_l18_n138(x)
+ if (x < 1)
+ fun_l19_n666(x)
+ else
+ fun_l19_n66(x)
+ end
+end
+
+def fun_l18_n139(x)
+ if (x < 1)
+ fun_l19_n416(x)
+ else
+ fun_l19_n398(x)
+ end
+end
+
+def fun_l18_n140(x)
+ if (x < 1)
+ fun_l19_n766(x)
+ else
+ fun_l19_n534(x)
+ end
+end
+
+def fun_l18_n141(x)
+ if (x < 1)
+ fun_l19_n370(x)
+ else
+ fun_l19_n653(x)
+ end
+end
+
+def fun_l18_n142(x)
+ if (x < 1)
+ fun_l19_n953(x)
+ else
+ fun_l19_n917(x)
+ end
+end
+
+def fun_l18_n143(x)
+ if (x < 1)
+ fun_l19_n989(x)
+ else
+ fun_l19_n862(x)
+ end
+end
+
+def fun_l18_n144(x)
+ if (x < 1)
+ fun_l19_n969(x)
+ else
+ fun_l19_n243(x)
+ end
+end
+
+def fun_l18_n145(x)
+ if (x < 1)
+ fun_l19_n379(x)
+ else
+ fun_l19_n315(x)
+ end
+end
+
+def fun_l18_n146(x)
+ if (x < 1)
+ fun_l19_n360(x)
+ else
+ fun_l19_n585(x)
+ end
+end
+
+def fun_l18_n147(x)
+ if (x < 1)
+ fun_l19_n4(x)
+ else
+ fun_l19_n372(x)
+ end
+end
+
+def fun_l18_n148(x)
+ if (x < 1)
+ fun_l19_n395(x)
+ else
+ fun_l19_n817(x)
+ end
+end
+
+def fun_l18_n149(x)
+ if (x < 1)
+ fun_l19_n237(x)
+ else
+ fun_l19_n506(x)
+ end
+end
+
+def fun_l18_n150(x)
+ if (x < 1)
+ fun_l19_n940(x)
+ else
+ fun_l19_n380(x)
+ end
+end
+
+def fun_l18_n151(x)
+ if (x < 1)
+ fun_l19_n190(x)
+ else
+ fun_l19_n925(x)
+ end
+end
+
+def fun_l18_n152(x)
+ if (x < 1)
+ fun_l19_n810(x)
+ else
+ fun_l19_n958(x)
+ end
+end
+
+def fun_l18_n153(x)
+ if (x < 1)
+ fun_l19_n69(x)
+ else
+ fun_l19_n19(x)
+ end
+end
+
+def fun_l18_n154(x)
+ if (x < 1)
+ fun_l19_n984(x)
+ else
+ fun_l19_n149(x)
+ end
+end
+
+def fun_l18_n155(x)
+ if (x < 1)
+ fun_l19_n179(x)
+ else
+ fun_l19_n583(x)
+ end
+end
+
+def fun_l18_n156(x)
+ if (x < 1)
+ fun_l19_n583(x)
+ else
+ fun_l19_n374(x)
+ end
+end
+
+def fun_l18_n157(x)
+ if (x < 1)
+ fun_l19_n908(x)
+ else
+ fun_l19_n769(x)
+ end
+end
+
+def fun_l18_n158(x)
+ if (x < 1)
+ fun_l19_n288(x)
+ else
+ fun_l19_n715(x)
+ end
+end
+
+def fun_l18_n159(x)
+ if (x < 1)
+ fun_l19_n742(x)
+ else
+ fun_l19_n733(x)
+ end
+end
+
+def fun_l18_n160(x)
+ if (x < 1)
+ fun_l19_n994(x)
+ else
+ fun_l19_n434(x)
+ end
+end
+
+def fun_l18_n161(x)
+ if (x < 1)
+ fun_l19_n440(x)
+ else
+ fun_l19_n994(x)
+ end
+end
+
+def fun_l18_n162(x)
+ if (x < 1)
+ fun_l19_n400(x)
+ else
+ fun_l19_n632(x)
+ end
+end
+
+def fun_l18_n163(x)
+ if (x < 1)
+ fun_l19_n237(x)
+ else
+ fun_l19_n369(x)
+ end
+end
+
+def fun_l18_n164(x)
+ if (x < 1)
+ fun_l19_n431(x)
+ else
+ fun_l19_n276(x)
+ end
+end
+
+def fun_l18_n165(x)
+ if (x < 1)
+ fun_l19_n173(x)
+ else
+ fun_l19_n93(x)
+ end
+end
+
+def fun_l18_n166(x)
+ if (x < 1)
+ fun_l19_n875(x)
+ else
+ fun_l19_n568(x)
+ end
+end
+
+def fun_l18_n167(x)
+ if (x < 1)
+ fun_l19_n61(x)
+ else
+ fun_l19_n79(x)
+ end
+end
+
+def fun_l18_n168(x)
+ if (x < 1)
+ fun_l19_n683(x)
+ else
+ fun_l19_n958(x)
+ end
+end
+
+def fun_l18_n169(x)
+ if (x < 1)
+ fun_l19_n419(x)
+ else
+ fun_l19_n648(x)
+ end
+end
+
+def fun_l18_n170(x)
+ if (x < 1)
+ fun_l19_n152(x)
+ else
+ fun_l19_n746(x)
+ end
+end
+
+def fun_l18_n171(x)
+ if (x < 1)
+ fun_l19_n670(x)
+ else
+ fun_l19_n974(x)
+ end
+end
+
+def fun_l18_n172(x)
+ if (x < 1)
+ fun_l19_n142(x)
+ else
+ fun_l19_n751(x)
+ end
+end
+
+def fun_l18_n173(x)
+ if (x < 1)
+ fun_l19_n640(x)
+ else
+ fun_l19_n911(x)
+ end
+end
+
+def fun_l18_n174(x)
+ if (x < 1)
+ fun_l19_n256(x)
+ else
+ fun_l19_n414(x)
+ end
+end
+
+def fun_l18_n175(x)
+ if (x < 1)
+ fun_l19_n207(x)
+ else
+ fun_l19_n80(x)
+ end
+end
+
+def fun_l18_n176(x)
+ if (x < 1)
+ fun_l19_n317(x)
+ else
+ fun_l19_n22(x)
+ end
+end
+
+def fun_l18_n177(x)
+ if (x < 1)
+ fun_l19_n457(x)
+ else
+ fun_l19_n723(x)
+ end
+end
+
+def fun_l18_n178(x)
+ if (x < 1)
+ fun_l19_n36(x)
+ else
+ fun_l19_n44(x)
+ end
+end
+
+def fun_l18_n179(x)
+ if (x < 1)
+ fun_l19_n92(x)
+ else
+ fun_l19_n75(x)
+ end
+end
+
+def fun_l18_n180(x)
+ if (x < 1)
+ fun_l19_n878(x)
+ else
+ fun_l19_n318(x)
+ end
+end
+
+def fun_l18_n181(x)
+ if (x < 1)
+ fun_l19_n499(x)
+ else
+ fun_l19_n462(x)
+ end
+end
+
+def fun_l18_n182(x)
+ if (x < 1)
+ fun_l19_n172(x)
+ else
+ fun_l19_n91(x)
+ end
+end
+
+def fun_l18_n183(x)
+ if (x < 1)
+ fun_l19_n549(x)
+ else
+ fun_l19_n126(x)
+ end
+end
+
+def fun_l18_n184(x)
+ if (x < 1)
+ fun_l19_n484(x)
+ else
+ fun_l19_n45(x)
+ end
+end
+
+def fun_l18_n185(x)
+ if (x < 1)
+ fun_l19_n237(x)
+ else
+ fun_l19_n651(x)
+ end
+end
+
+def fun_l18_n186(x)
+ if (x < 1)
+ fun_l19_n458(x)
+ else
+ fun_l19_n466(x)
+ end
+end
+
+def fun_l18_n187(x)
+ if (x < 1)
+ fun_l19_n856(x)
+ else
+ fun_l19_n184(x)
+ end
+end
+
+def fun_l18_n188(x)
+ if (x < 1)
+ fun_l19_n432(x)
+ else
+ fun_l19_n251(x)
+ end
+end
+
+def fun_l18_n189(x)
+ if (x < 1)
+ fun_l19_n719(x)
+ else
+ fun_l19_n442(x)
+ end
+end
+
+def fun_l18_n190(x)
+ if (x < 1)
+ fun_l19_n516(x)
+ else
+ fun_l19_n331(x)
+ end
+end
+
+def fun_l18_n191(x)
+ if (x < 1)
+ fun_l19_n342(x)
+ else
+ fun_l19_n750(x)
+ end
+end
+
+def fun_l18_n192(x)
+ if (x < 1)
+ fun_l19_n820(x)
+ else
+ fun_l19_n137(x)
+ end
+end
+
+def fun_l18_n193(x)
+ if (x < 1)
+ fun_l19_n514(x)
+ else
+ fun_l19_n594(x)
+ end
+end
+
+def fun_l18_n194(x)
+ if (x < 1)
+ fun_l19_n744(x)
+ else
+ fun_l19_n605(x)
+ end
+end
+
+def fun_l18_n195(x)
+ if (x < 1)
+ fun_l19_n428(x)
+ else
+ fun_l19_n528(x)
+ end
+end
+
+def fun_l18_n196(x)
+ if (x < 1)
+ fun_l19_n291(x)
+ else
+ fun_l19_n382(x)
+ end
+end
+
+def fun_l18_n197(x)
+ if (x < 1)
+ fun_l19_n238(x)
+ else
+ fun_l19_n38(x)
+ end
+end
+
+def fun_l18_n198(x)
+ if (x < 1)
+ fun_l19_n332(x)
+ else
+ fun_l19_n112(x)
+ end
+end
+
+def fun_l18_n199(x)
+ if (x < 1)
+ fun_l19_n703(x)
+ else
+ fun_l19_n108(x)
+ end
+end
+
+def fun_l18_n200(x)
+ if (x < 1)
+ fun_l19_n917(x)
+ else
+ fun_l19_n629(x)
+ end
+end
+
+def fun_l18_n201(x)
+ if (x < 1)
+ fun_l19_n402(x)
+ else
+ fun_l19_n223(x)
+ end
+end
+
+def fun_l18_n202(x)
+ if (x < 1)
+ fun_l19_n9(x)
+ else
+ fun_l19_n318(x)
+ end
+end
+
+def fun_l18_n203(x)
+ if (x < 1)
+ fun_l19_n560(x)
+ else
+ fun_l19_n77(x)
+ end
+end
+
+def fun_l18_n204(x)
+ if (x < 1)
+ fun_l19_n379(x)
+ else
+ fun_l19_n903(x)
+ end
+end
+
+def fun_l18_n205(x)
+ if (x < 1)
+ fun_l19_n185(x)
+ else
+ fun_l19_n174(x)
+ end
+end
+
+def fun_l18_n206(x)
+ if (x < 1)
+ fun_l19_n738(x)
+ else
+ fun_l19_n518(x)
+ end
+end
+
+def fun_l18_n207(x)
+ if (x < 1)
+ fun_l19_n343(x)
+ else
+ fun_l19_n567(x)
+ end
+end
+
+def fun_l18_n208(x)
+ if (x < 1)
+ fun_l19_n546(x)
+ else
+ fun_l19_n370(x)
+ end
+end
+
+def fun_l18_n209(x)
+ if (x < 1)
+ fun_l19_n589(x)
+ else
+ fun_l19_n511(x)
+ end
+end
+
+def fun_l18_n210(x)
+ if (x < 1)
+ fun_l19_n507(x)
+ else
+ fun_l19_n912(x)
+ end
+end
+
+def fun_l18_n211(x)
+ if (x < 1)
+ fun_l19_n779(x)
+ else
+ fun_l19_n133(x)
+ end
+end
+
+def fun_l18_n212(x)
+ if (x < 1)
+ fun_l19_n400(x)
+ else
+ fun_l19_n345(x)
+ end
+end
+
+def fun_l18_n213(x)
+ if (x < 1)
+ fun_l19_n214(x)
+ else
+ fun_l19_n393(x)
+ end
+end
+
+def fun_l18_n214(x)
+ if (x < 1)
+ fun_l19_n829(x)
+ else
+ fun_l19_n769(x)
+ end
+end
+
+def fun_l18_n215(x)
+ if (x < 1)
+ fun_l19_n835(x)
+ else
+ fun_l19_n80(x)
+ end
+end
+
+def fun_l18_n216(x)
+ if (x < 1)
+ fun_l19_n640(x)
+ else
+ fun_l19_n836(x)
+ end
+end
+
+def fun_l18_n217(x)
+ if (x < 1)
+ fun_l19_n861(x)
+ else
+ fun_l19_n801(x)
+ end
+end
+
+def fun_l18_n218(x)
+ if (x < 1)
+ fun_l19_n316(x)
+ else
+ fun_l19_n263(x)
+ end
+end
+
+def fun_l18_n219(x)
+ if (x < 1)
+ fun_l19_n231(x)
+ else
+ fun_l19_n315(x)
+ end
+end
+
+def fun_l18_n220(x)
+ if (x < 1)
+ fun_l19_n700(x)
+ else
+ fun_l19_n276(x)
+ end
+end
+
+def fun_l18_n221(x)
+ if (x < 1)
+ fun_l19_n654(x)
+ else
+ fun_l19_n32(x)
+ end
+end
+
+def fun_l18_n222(x)
+ if (x < 1)
+ fun_l19_n758(x)
+ else
+ fun_l19_n598(x)
+ end
+end
+
+def fun_l18_n223(x)
+ if (x < 1)
+ fun_l19_n819(x)
+ else
+ fun_l19_n764(x)
+ end
+end
+
+def fun_l18_n224(x)
+ if (x < 1)
+ fun_l19_n31(x)
+ else
+ fun_l19_n51(x)
+ end
+end
+
+def fun_l18_n225(x)
+ if (x < 1)
+ fun_l19_n704(x)
+ else
+ fun_l19_n932(x)
+ end
+end
+
+def fun_l18_n226(x)
+ if (x < 1)
+ fun_l19_n635(x)
+ else
+ fun_l19_n411(x)
+ end
+end
+
+def fun_l18_n227(x)
+ if (x < 1)
+ fun_l19_n368(x)
+ else
+ fun_l19_n472(x)
+ end
+end
+
+def fun_l18_n228(x)
+ if (x < 1)
+ fun_l19_n928(x)
+ else
+ fun_l19_n357(x)
+ end
+end
+
+def fun_l18_n229(x)
+ if (x < 1)
+ fun_l19_n503(x)
+ else
+ fun_l19_n495(x)
+ end
+end
+
+def fun_l18_n230(x)
+ if (x < 1)
+ fun_l19_n497(x)
+ else
+ fun_l19_n73(x)
+ end
+end
+
+def fun_l18_n231(x)
+ if (x < 1)
+ fun_l19_n718(x)
+ else
+ fun_l19_n971(x)
+ end
+end
+
+def fun_l18_n232(x)
+ if (x < 1)
+ fun_l19_n314(x)
+ else
+ fun_l19_n100(x)
+ end
+end
+
+def fun_l18_n233(x)
+ if (x < 1)
+ fun_l19_n490(x)
+ else
+ fun_l19_n569(x)
+ end
+end
+
+def fun_l18_n234(x)
+ if (x < 1)
+ fun_l19_n309(x)
+ else
+ fun_l19_n806(x)
+ end
+end
+
+def fun_l18_n235(x)
+ if (x < 1)
+ fun_l19_n839(x)
+ else
+ fun_l19_n388(x)
+ end
+end
+
+def fun_l18_n236(x)
+ if (x < 1)
+ fun_l19_n158(x)
+ else
+ fun_l19_n438(x)
+ end
+end
+
+def fun_l18_n237(x)
+ if (x < 1)
+ fun_l19_n181(x)
+ else
+ fun_l19_n728(x)
+ end
+end
+
+def fun_l18_n238(x)
+ if (x < 1)
+ fun_l19_n238(x)
+ else
+ fun_l19_n41(x)
+ end
+end
+
+def fun_l18_n239(x)
+ if (x < 1)
+ fun_l19_n342(x)
+ else
+ fun_l19_n756(x)
+ end
+end
+
+def fun_l18_n240(x)
+ if (x < 1)
+ fun_l19_n873(x)
+ else
+ fun_l19_n274(x)
+ end
+end
+
+def fun_l18_n241(x)
+ if (x < 1)
+ fun_l19_n273(x)
+ else
+ fun_l19_n740(x)
+ end
+end
+
+def fun_l18_n242(x)
+ if (x < 1)
+ fun_l19_n256(x)
+ else
+ fun_l19_n99(x)
+ end
+end
+
+def fun_l18_n243(x)
+ if (x < 1)
+ fun_l19_n482(x)
+ else
+ fun_l19_n569(x)
+ end
+end
+
+def fun_l18_n244(x)
+ if (x < 1)
+ fun_l19_n598(x)
+ else
+ fun_l19_n393(x)
+ end
+end
+
+def fun_l18_n245(x)
+ if (x < 1)
+ fun_l19_n320(x)
+ else
+ fun_l19_n164(x)
+ end
+end
+
+def fun_l18_n246(x)
+ if (x < 1)
+ fun_l19_n803(x)
+ else
+ fun_l19_n240(x)
+ end
+end
+
+def fun_l18_n247(x)
+ if (x < 1)
+ fun_l19_n790(x)
+ else
+ fun_l19_n55(x)
+ end
+end
+
+def fun_l18_n248(x)
+ if (x < 1)
+ fun_l19_n193(x)
+ else
+ fun_l19_n754(x)
+ end
+end
+
+def fun_l18_n249(x)
+ if (x < 1)
+ fun_l19_n122(x)
+ else
+ fun_l19_n841(x)
+ end
+end
+
+def fun_l18_n250(x)
+ if (x < 1)
+ fun_l19_n724(x)
+ else
+ fun_l19_n359(x)
+ end
+end
+
+def fun_l18_n251(x)
+ if (x < 1)
+ fun_l19_n497(x)
+ else
+ fun_l19_n777(x)
+ end
+end
+
+def fun_l18_n252(x)
+ if (x < 1)
+ fun_l19_n986(x)
+ else
+ fun_l19_n666(x)
+ end
+end
+
+def fun_l18_n253(x)
+ if (x < 1)
+ fun_l19_n864(x)
+ else
+ fun_l19_n320(x)
+ end
+end
+
+def fun_l18_n254(x)
+ if (x < 1)
+ fun_l19_n386(x)
+ else
+ fun_l19_n582(x)
+ end
+end
+
+def fun_l18_n255(x)
+ if (x < 1)
+ fun_l19_n434(x)
+ else
+ fun_l19_n224(x)
+ end
+end
+
+def fun_l18_n256(x)
+ if (x < 1)
+ fun_l19_n921(x)
+ else
+ fun_l19_n8(x)
+ end
+end
+
+def fun_l18_n257(x)
+ if (x < 1)
+ fun_l19_n789(x)
+ else
+ fun_l19_n546(x)
+ end
+end
+
+def fun_l18_n258(x)
+ if (x < 1)
+ fun_l19_n324(x)
+ else
+ fun_l19_n987(x)
+ end
+end
+
+def fun_l18_n259(x)
+ if (x < 1)
+ fun_l19_n279(x)
+ else
+ fun_l19_n180(x)
+ end
+end
+
+def fun_l18_n260(x)
+ if (x < 1)
+ fun_l19_n596(x)
+ else
+ fun_l19_n670(x)
+ end
+end
+
+def fun_l18_n261(x)
+ if (x < 1)
+ fun_l19_n940(x)
+ else
+ fun_l19_n982(x)
+ end
+end
+
+def fun_l18_n262(x)
+ if (x < 1)
+ fun_l19_n54(x)
+ else
+ fun_l19_n342(x)
+ end
+end
+
+def fun_l18_n263(x)
+ if (x < 1)
+ fun_l19_n815(x)
+ else
+ fun_l19_n663(x)
+ end
+end
+
+def fun_l18_n264(x)
+ if (x < 1)
+ fun_l19_n794(x)
+ else
+ fun_l19_n251(x)
+ end
+end
+
+def fun_l18_n265(x)
+ if (x < 1)
+ fun_l19_n485(x)
+ else
+ fun_l19_n896(x)
+ end
+end
+
+def fun_l18_n266(x)
+ if (x < 1)
+ fun_l19_n346(x)
+ else
+ fun_l19_n151(x)
+ end
+end
+
+def fun_l18_n267(x)
+ if (x < 1)
+ fun_l19_n162(x)
+ else
+ fun_l19_n395(x)
+ end
+end
+
+def fun_l18_n268(x)
+ if (x < 1)
+ fun_l19_n76(x)
+ else
+ fun_l19_n25(x)
+ end
+end
+
+def fun_l18_n269(x)
+ if (x < 1)
+ fun_l19_n943(x)
+ else
+ fun_l19_n587(x)
+ end
+end
+
+def fun_l18_n270(x)
+ if (x < 1)
+ fun_l19_n663(x)
+ else
+ fun_l19_n255(x)
+ end
+end
+
+def fun_l18_n271(x)
+ if (x < 1)
+ fun_l19_n307(x)
+ else
+ fun_l19_n261(x)
+ end
+end
+
+def fun_l18_n272(x)
+ if (x < 1)
+ fun_l19_n478(x)
+ else
+ fun_l19_n600(x)
+ end
+end
+
+def fun_l18_n273(x)
+ if (x < 1)
+ fun_l19_n345(x)
+ else
+ fun_l19_n877(x)
+ end
+end
+
+def fun_l18_n274(x)
+ if (x < 1)
+ fun_l19_n637(x)
+ else
+ fun_l19_n27(x)
+ end
+end
+
+def fun_l18_n275(x)
+ if (x < 1)
+ fun_l19_n752(x)
+ else
+ fun_l19_n946(x)
+ end
+end
+
+def fun_l18_n276(x)
+ if (x < 1)
+ fun_l19_n571(x)
+ else
+ fun_l19_n973(x)
+ end
+end
+
+def fun_l18_n277(x)
+ if (x < 1)
+ fun_l19_n274(x)
+ else
+ fun_l19_n673(x)
+ end
+end
+
+def fun_l18_n278(x)
+ if (x < 1)
+ fun_l19_n922(x)
+ else
+ fun_l19_n826(x)
+ end
+end
+
+def fun_l18_n279(x)
+ if (x < 1)
+ fun_l19_n294(x)
+ else
+ fun_l19_n236(x)
+ end
+end
+
+def fun_l18_n280(x)
+ if (x < 1)
+ fun_l19_n661(x)
+ else
+ fun_l19_n531(x)
+ end
+end
+
+def fun_l18_n281(x)
+ if (x < 1)
+ fun_l19_n295(x)
+ else
+ fun_l19_n961(x)
+ end
+end
+
+def fun_l18_n282(x)
+ if (x < 1)
+ fun_l19_n902(x)
+ else
+ fun_l19_n364(x)
+ end
+end
+
+def fun_l18_n283(x)
+ if (x < 1)
+ fun_l19_n147(x)
+ else
+ fun_l19_n709(x)
+ end
+end
+
+def fun_l18_n284(x)
+ if (x < 1)
+ fun_l19_n394(x)
+ else
+ fun_l19_n757(x)
+ end
+end
+
+def fun_l18_n285(x)
+ if (x < 1)
+ fun_l19_n372(x)
+ else
+ fun_l19_n45(x)
+ end
+end
+
+def fun_l18_n286(x)
+ if (x < 1)
+ fun_l19_n323(x)
+ else
+ fun_l19_n128(x)
+ end
+end
+
+def fun_l18_n287(x)
+ if (x < 1)
+ fun_l19_n50(x)
+ else
+ fun_l19_n650(x)
+ end
+end
+
+def fun_l18_n288(x)
+ if (x < 1)
+ fun_l19_n300(x)
+ else
+ fun_l19_n308(x)
+ end
+end
+
+def fun_l18_n289(x)
+ if (x < 1)
+ fun_l19_n2(x)
+ else
+ fun_l19_n27(x)
+ end
+end
+
+def fun_l18_n290(x)
+ if (x < 1)
+ fun_l19_n341(x)
+ else
+ fun_l19_n281(x)
+ end
+end
+
+def fun_l18_n291(x)
+ if (x < 1)
+ fun_l19_n797(x)
+ else
+ fun_l19_n575(x)
+ end
+end
+
+def fun_l18_n292(x)
+ if (x < 1)
+ fun_l19_n740(x)
+ else
+ fun_l19_n772(x)
+ end
+end
+
+def fun_l18_n293(x)
+ if (x < 1)
+ fun_l19_n707(x)
+ else
+ fun_l19_n456(x)
+ end
+end
+
+def fun_l18_n294(x)
+ if (x < 1)
+ fun_l19_n714(x)
+ else
+ fun_l19_n601(x)
+ end
+end
+
+def fun_l18_n295(x)
+ if (x < 1)
+ fun_l19_n298(x)
+ else
+ fun_l19_n367(x)
+ end
+end
+
+def fun_l18_n296(x)
+ if (x < 1)
+ fun_l19_n0(x)
+ else
+ fun_l19_n970(x)
+ end
+end
+
+def fun_l18_n297(x)
+ if (x < 1)
+ fun_l19_n703(x)
+ else
+ fun_l19_n673(x)
+ end
+end
+
+def fun_l18_n298(x)
+ if (x < 1)
+ fun_l19_n890(x)
+ else
+ fun_l19_n932(x)
+ end
+end
+
+def fun_l18_n299(x)
+ if (x < 1)
+ fun_l19_n152(x)
+ else
+ fun_l19_n784(x)
+ end
+end
+
+def fun_l18_n300(x)
+ if (x < 1)
+ fun_l19_n24(x)
+ else
+ fun_l19_n449(x)
+ end
+end
+
+def fun_l18_n301(x)
+ if (x < 1)
+ fun_l19_n161(x)
+ else
+ fun_l19_n51(x)
+ end
+end
+
+def fun_l18_n302(x)
+ if (x < 1)
+ fun_l19_n695(x)
+ else
+ fun_l19_n604(x)
+ end
+end
+
+def fun_l18_n303(x)
+ if (x < 1)
+ fun_l19_n415(x)
+ else
+ fun_l19_n752(x)
+ end
+end
+
+def fun_l18_n304(x)
+ if (x < 1)
+ fun_l19_n737(x)
+ else
+ fun_l19_n944(x)
+ end
+end
+
+def fun_l18_n305(x)
+ if (x < 1)
+ fun_l19_n833(x)
+ else
+ fun_l19_n98(x)
+ end
+end
+
+def fun_l18_n306(x)
+ if (x < 1)
+ fun_l19_n598(x)
+ else
+ fun_l19_n601(x)
+ end
+end
+
+def fun_l18_n307(x)
+ if (x < 1)
+ fun_l19_n728(x)
+ else
+ fun_l19_n116(x)
+ end
+end
+
+def fun_l18_n308(x)
+ if (x < 1)
+ fun_l19_n892(x)
+ else
+ fun_l19_n826(x)
+ end
+end
+
+def fun_l18_n309(x)
+ if (x < 1)
+ fun_l19_n926(x)
+ else
+ fun_l19_n119(x)
+ end
+end
+
+def fun_l18_n310(x)
+ if (x < 1)
+ fun_l19_n194(x)
+ else
+ fun_l19_n331(x)
+ end
+end
+
+def fun_l18_n311(x)
+ if (x < 1)
+ fun_l19_n490(x)
+ else
+ fun_l19_n401(x)
+ end
+end
+
+def fun_l18_n312(x)
+ if (x < 1)
+ fun_l19_n727(x)
+ else
+ fun_l19_n193(x)
+ end
+end
+
+def fun_l18_n313(x)
+ if (x < 1)
+ fun_l19_n643(x)
+ else
+ fun_l19_n327(x)
+ end
+end
+
+def fun_l18_n314(x)
+ if (x < 1)
+ fun_l19_n747(x)
+ else
+ fun_l19_n938(x)
+ end
+end
+
+def fun_l18_n315(x)
+ if (x < 1)
+ fun_l19_n153(x)
+ else
+ fun_l19_n438(x)
+ end
+end
+
+def fun_l18_n316(x)
+ if (x < 1)
+ fun_l19_n719(x)
+ else
+ fun_l19_n471(x)
+ end
+end
+
+def fun_l18_n317(x)
+ if (x < 1)
+ fun_l19_n105(x)
+ else
+ fun_l19_n832(x)
+ end
+end
+
+def fun_l18_n318(x)
+ if (x < 1)
+ fun_l19_n652(x)
+ else
+ fun_l19_n826(x)
+ end
+end
+
+def fun_l18_n319(x)
+ if (x < 1)
+ fun_l19_n3(x)
+ else
+ fun_l19_n250(x)
+ end
+end
+
+def fun_l18_n320(x)
+ if (x < 1)
+ fun_l19_n854(x)
+ else
+ fun_l19_n371(x)
+ end
+end
+
+def fun_l18_n321(x)
+ if (x < 1)
+ fun_l19_n241(x)
+ else
+ fun_l19_n51(x)
+ end
+end
+
+def fun_l18_n322(x)
+ if (x < 1)
+ fun_l19_n832(x)
+ else
+ fun_l19_n897(x)
+ end
+end
+
+def fun_l18_n323(x)
+ if (x < 1)
+ fun_l19_n472(x)
+ else
+ fun_l19_n838(x)
+ end
+end
+
+def fun_l18_n324(x)
+ if (x < 1)
+ fun_l19_n844(x)
+ else
+ fun_l19_n228(x)
+ end
+end
+
+def fun_l18_n325(x)
+ if (x < 1)
+ fun_l19_n132(x)
+ else
+ fun_l19_n424(x)
+ end
+end
+
+def fun_l18_n326(x)
+ if (x < 1)
+ fun_l19_n311(x)
+ else
+ fun_l19_n388(x)
+ end
+end
+
+def fun_l18_n327(x)
+ if (x < 1)
+ fun_l19_n709(x)
+ else
+ fun_l19_n98(x)
+ end
+end
+
+def fun_l18_n328(x)
+ if (x < 1)
+ fun_l19_n342(x)
+ else
+ fun_l19_n743(x)
+ end
+end
+
+def fun_l18_n329(x)
+ if (x < 1)
+ fun_l19_n984(x)
+ else
+ fun_l19_n762(x)
+ end
+end
+
+def fun_l18_n330(x)
+ if (x < 1)
+ fun_l19_n358(x)
+ else
+ fun_l19_n624(x)
+ end
+end
+
+def fun_l18_n331(x)
+ if (x < 1)
+ fun_l19_n574(x)
+ else
+ fun_l19_n35(x)
+ end
+end
+
+def fun_l18_n332(x)
+ if (x < 1)
+ fun_l19_n564(x)
+ else
+ fun_l19_n629(x)
+ end
+end
+
+def fun_l18_n333(x)
+ if (x < 1)
+ fun_l19_n70(x)
+ else
+ fun_l19_n150(x)
+ end
+end
+
+def fun_l18_n334(x)
+ if (x < 1)
+ fun_l19_n538(x)
+ else
+ fun_l19_n239(x)
+ end
+end
+
+def fun_l18_n335(x)
+ if (x < 1)
+ fun_l19_n818(x)
+ else
+ fun_l19_n878(x)
+ end
+end
+
+def fun_l18_n336(x)
+ if (x < 1)
+ fun_l19_n233(x)
+ else
+ fun_l19_n286(x)
+ end
+end
+
+def fun_l18_n337(x)
+ if (x < 1)
+ fun_l19_n731(x)
+ else
+ fun_l19_n416(x)
+ end
+end
+
+def fun_l18_n338(x)
+ if (x < 1)
+ fun_l19_n917(x)
+ else
+ fun_l19_n710(x)
+ end
+end
+
+def fun_l18_n339(x)
+ if (x < 1)
+ fun_l19_n638(x)
+ else
+ fun_l19_n187(x)
+ end
+end
+
+def fun_l18_n340(x)
+ if (x < 1)
+ fun_l19_n922(x)
+ else
+ fun_l19_n767(x)
+ end
+end
+
+def fun_l18_n341(x)
+ if (x < 1)
+ fun_l19_n9(x)
+ else
+ fun_l19_n708(x)
+ end
+end
+
+def fun_l18_n342(x)
+ if (x < 1)
+ fun_l19_n76(x)
+ else
+ fun_l19_n479(x)
+ end
+end
+
+def fun_l18_n343(x)
+ if (x < 1)
+ fun_l19_n679(x)
+ else
+ fun_l19_n85(x)
+ end
+end
+
+def fun_l18_n344(x)
+ if (x < 1)
+ fun_l19_n725(x)
+ else
+ fun_l19_n809(x)
+ end
+end
+
+def fun_l18_n345(x)
+ if (x < 1)
+ fun_l19_n680(x)
+ else
+ fun_l19_n416(x)
+ end
+end
+
+def fun_l18_n346(x)
+ if (x < 1)
+ fun_l19_n66(x)
+ else
+ fun_l19_n36(x)
+ end
+end
+
+def fun_l18_n347(x)
+ if (x < 1)
+ fun_l19_n420(x)
+ else
+ fun_l19_n879(x)
+ end
+end
+
+def fun_l18_n348(x)
+ if (x < 1)
+ fun_l19_n653(x)
+ else
+ fun_l19_n634(x)
+ end
+end
+
+def fun_l18_n349(x)
+ if (x < 1)
+ fun_l19_n134(x)
+ else
+ fun_l19_n840(x)
+ end
+end
+
+def fun_l18_n350(x)
+ if (x < 1)
+ fun_l19_n21(x)
+ else
+ fun_l19_n843(x)
+ end
+end
+
+def fun_l18_n351(x)
+ if (x < 1)
+ fun_l19_n917(x)
+ else
+ fun_l19_n101(x)
+ end
+end
+
+def fun_l18_n352(x)
+ if (x < 1)
+ fun_l19_n541(x)
+ else
+ fun_l19_n646(x)
+ end
+end
+
+def fun_l18_n353(x)
+ if (x < 1)
+ fun_l19_n555(x)
+ else
+ fun_l19_n648(x)
+ end
+end
+
+def fun_l18_n354(x)
+ if (x < 1)
+ fun_l19_n431(x)
+ else
+ fun_l19_n736(x)
+ end
+end
+
+def fun_l18_n355(x)
+ if (x < 1)
+ fun_l19_n294(x)
+ else
+ fun_l19_n512(x)
+ end
+end
+
+def fun_l18_n356(x)
+ if (x < 1)
+ fun_l19_n852(x)
+ else
+ fun_l19_n348(x)
+ end
+end
+
+def fun_l18_n357(x)
+ if (x < 1)
+ fun_l19_n670(x)
+ else
+ fun_l19_n997(x)
+ end
+end
+
+def fun_l18_n358(x)
+ if (x < 1)
+ fun_l19_n595(x)
+ else
+ fun_l19_n544(x)
+ end
+end
+
+def fun_l18_n359(x)
+ if (x < 1)
+ fun_l19_n13(x)
+ else
+ fun_l19_n838(x)
+ end
+end
+
+def fun_l18_n360(x)
+ if (x < 1)
+ fun_l19_n518(x)
+ else
+ fun_l19_n642(x)
+ end
+end
+
+def fun_l18_n361(x)
+ if (x < 1)
+ fun_l19_n333(x)
+ else
+ fun_l19_n59(x)
+ end
+end
+
+def fun_l18_n362(x)
+ if (x < 1)
+ fun_l19_n670(x)
+ else
+ fun_l19_n844(x)
+ end
+end
+
+def fun_l18_n363(x)
+ if (x < 1)
+ fun_l19_n14(x)
+ else
+ fun_l19_n932(x)
+ end
+end
+
+def fun_l18_n364(x)
+ if (x < 1)
+ fun_l19_n508(x)
+ else
+ fun_l19_n466(x)
+ end
+end
+
+def fun_l18_n365(x)
+ if (x < 1)
+ fun_l19_n177(x)
+ else
+ fun_l19_n365(x)
+ end
+end
+
+def fun_l18_n366(x)
+ if (x < 1)
+ fun_l19_n367(x)
+ else
+ fun_l19_n205(x)
+ end
+end
+
+def fun_l18_n367(x)
+ if (x < 1)
+ fun_l19_n353(x)
+ else
+ fun_l19_n328(x)
+ end
+end
+
+def fun_l18_n368(x)
+ if (x < 1)
+ fun_l19_n801(x)
+ else
+ fun_l19_n420(x)
+ end
+end
+
+def fun_l18_n369(x)
+ if (x < 1)
+ fun_l19_n162(x)
+ else
+ fun_l19_n670(x)
+ end
+end
+
+def fun_l18_n370(x)
+ if (x < 1)
+ fun_l19_n908(x)
+ else
+ fun_l19_n852(x)
+ end
+end
+
+def fun_l18_n371(x)
+ if (x < 1)
+ fun_l19_n47(x)
+ else
+ fun_l19_n130(x)
+ end
+end
+
+def fun_l18_n372(x)
+ if (x < 1)
+ fun_l19_n774(x)
+ else
+ fun_l19_n792(x)
+ end
+end
+
+def fun_l18_n373(x)
+ if (x < 1)
+ fun_l19_n124(x)
+ else
+ fun_l19_n665(x)
+ end
+end
+
+def fun_l18_n374(x)
+ if (x < 1)
+ fun_l19_n24(x)
+ else
+ fun_l19_n371(x)
+ end
+end
+
+def fun_l18_n375(x)
+ if (x < 1)
+ fun_l19_n484(x)
+ else
+ fun_l19_n708(x)
+ end
+end
+
+def fun_l18_n376(x)
+ if (x < 1)
+ fun_l19_n810(x)
+ else
+ fun_l19_n856(x)
+ end
+end
+
+def fun_l18_n377(x)
+ if (x < 1)
+ fun_l19_n23(x)
+ else
+ fun_l19_n817(x)
+ end
+end
+
+def fun_l18_n378(x)
+ if (x < 1)
+ fun_l19_n827(x)
+ else
+ fun_l19_n639(x)
+ end
+end
+
+def fun_l18_n379(x)
+ if (x < 1)
+ fun_l19_n557(x)
+ else
+ fun_l19_n268(x)
+ end
+end
+
+def fun_l18_n380(x)
+ if (x < 1)
+ fun_l19_n885(x)
+ else
+ fun_l19_n421(x)
+ end
+end
+
+def fun_l18_n381(x)
+ if (x < 1)
+ fun_l19_n543(x)
+ else
+ fun_l19_n230(x)
+ end
+end
+
+def fun_l18_n382(x)
+ if (x < 1)
+ fun_l19_n978(x)
+ else
+ fun_l19_n848(x)
+ end
+end
+
+def fun_l18_n383(x)
+ if (x < 1)
+ fun_l19_n31(x)
+ else
+ fun_l19_n731(x)
+ end
+end
+
+def fun_l18_n384(x)
+ if (x < 1)
+ fun_l19_n20(x)
+ else
+ fun_l19_n149(x)
+ end
+end
+
+def fun_l18_n385(x)
+ if (x < 1)
+ fun_l19_n650(x)
+ else
+ fun_l19_n268(x)
+ end
+end
+
+def fun_l18_n386(x)
+ if (x < 1)
+ fun_l19_n491(x)
+ else
+ fun_l19_n644(x)
+ end
+end
+
+def fun_l18_n387(x)
+ if (x < 1)
+ fun_l19_n537(x)
+ else
+ fun_l19_n400(x)
+ end
+end
+
+def fun_l18_n388(x)
+ if (x < 1)
+ fun_l19_n939(x)
+ else
+ fun_l19_n861(x)
+ end
+end
+
+def fun_l18_n389(x)
+ if (x < 1)
+ fun_l19_n728(x)
+ else
+ fun_l19_n877(x)
+ end
+end
+
+def fun_l18_n390(x)
+ if (x < 1)
+ fun_l19_n226(x)
+ else
+ fun_l19_n288(x)
+ end
+end
+
+def fun_l18_n391(x)
+ if (x < 1)
+ fun_l19_n921(x)
+ else
+ fun_l19_n754(x)
+ end
+end
+
+def fun_l18_n392(x)
+ if (x < 1)
+ fun_l19_n71(x)
+ else
+ fun_l19_n844(x)
+ end
+end
+
+def fun_l18_n393(x)
+ if (x < 1)
+ fun_l19_n310(x)
+ else
+ fun_l19_n442(x)
+ end
+end
+
+def fun_l18_n394(x)
+ if (x < 1)
+ fun_l19_n539(x)
+ else
+ fun_l19_n933(x)
+ end
+end
+
+def fun_l18_n395(x)
+ if (x < 1)
+ fun_l19_n849(x)
+ else
+ fun_l19_n719(x)
+ end
+end
+
+def fun_l18_n396(x)
+ if (x < 1)
+ fun_l19_n922(x)
+ else
+ fun_l19_n435(x)
+ end
+end
+
+def fun_l18_n397(x)
+ if (x < 1)
+ fun_l19_n916(x)
+ else
+ fun_l19_n399(x)
+ end
+end
+
+def fun_l18_n398(x)
+ if (x < 1)
+ fun_l19_n820(x)
+ else
+ fun_l19_n650(x)
+ end
+end
+
+def fun_l18_n399(x)
+ if (x < 1)
+ fun_l19_n497(x)
+ else
+ fun_l19_n678(x)
+ end
+end
+
+def fun_l18_n400(x)
+ if (x < 1)
+ fun_l19_n562(x)
+ else
+ fun_l19_n392(x)
+ end
+end
+
+def fun_l18_n401(x)
+ if (x < 1)
+ fun_l19_n298(x)
+ else
+ fun_l19_n61(x)
+ end
+end
+
+def fun_l18_n402(x)
+ if (x < 1)
+ fun_l19_n803(x)
+ else
+ fun_l19_n535(x)
+ end
+end
+
+def fun_l18_n403(x)
+ if (x < 1)
+ fun_l19_n335(x)
+ else
+ fun_l19_n431(x)
+ end
+end
+
+def fun_l18_n404(x)
+ if (x < 1)
+ fun_l19_n558(x)
+ else
+ fun_l19_n821(x)
+ end
+end
+
+def fun_l18_n405(x)
+ if (x < 1)
+ fun_l19_n608(x)
+ else
+ fun_l19_n415(x)
+ end
+end
+
+def fun_l18_n406(x)
+ if (x < 1)
+ fun_l19_n709(x)
+ else
+ fun_l19_n635(x)
+ end
+end
+
+def fun_l18_n407(x)
+ if (x < 1)
+ fun_l19_n432(x)
+ else
+ fun_l19_n923(x)
+ end
+end
+
+def fun_l18_n408(x)
+ if (x < 1)
+ fun_l19_n612(x)
+ else
+ fun_l19_n386(x)
+ end
+end
+
+def fun_l18_n409(x)
+ if (x < 1)
+ fun_l19_n1(x)
+ else
+ fun_l19_n679(x)
+ end
+end
+
+def fun_l18_n410(x)
+ if (x < 1)
+ fun_l19_n998(x)
+ else
+ fun_l19_n969(x)
+ end
+end
+
+def fun_l18_n411(x)
+ if (x < 1)
+ fun_l19_n210(x)
+ else
+ fun_l19_n642(x)
+ end
+end
+
+def fun_l18_n412(x)
+ if (x < 1)
+ fun_l19_n902(x)
+ else
+ fun_l19_n591(x)
+ end
+end
+
+def fun_l18_n413(x)
+ if (x < 1)
+ fun_l19_n417(x)
+ else
+ fun_l19_n192(x)
+ end
+end
+
+def fun_l18_n414(x)
+ if (x < 1)
+ fun_l19_n543(x)
+ else
+ fun_l19_n277(x)
+ end
+end
+
+def fun_l18_n415(x)
+ if (x < 1)
+ fun_l19_n145(x)
+ else
+ fun_l19_n157(x)
+ end
+end
+
+def fun_l18_n416(x)
+ if (x < 1)
+ fun_l19_n696(x)
+ else
+ fun_l19_n453(x)
+ end
+end
+
+def fun_l18_n417(x)
+ if (x < 1)
+ fun_l19_n593(x)
+ else
+ fun_l19_n683(x)
+ end
+end
+
+def fun_l18_n418(x)
+ if (x < 1)
+ fun_l19_n459(x)
+ else
+ fun_l19_n292(x)
+ end
+end
+
+def fun_l18_n419(x)
+ if (x < 1)
+ fun_l19_n37(x)
+ else
+ fun_l19_n281(x)
+ end
+end
+
+def fun_l18_n420(x)
+ if (x < 1)
+ fun_l19_n39(x)
+ else
+ fun_l19_n642(x)
+ end
+end
+
+def fun_l18_n421(x)
+ if (x < 1)
+ fun_l19_n942(x)
+ else
+ fun_l19_n997(x)
+ end
+end
+
+def fun_l18_n422(x)
+ if (x < 1)
+ fun_l19_n18(x)
+ else
+ fun_l19_n301(x)
+ end
+end
+
+def fun_l18_n423(x)
+ if (x < 1)
+ fun_l19_n473(x)
+ else
+ fun_l19_n231(x)
+ end
+end
+
+def fun_l18_n424(x)
+ if (x < 1)
+ fun_l19_n331(x)
+ else
+ fun_l19_n110(x)
+ end
+end
+
+def fun_l18_n425(x)
+ if (x < 1)
+ fun_l19_n786(x)
+ else
+ fun_l19_n991(x)
+ end
+end
+
+def fun_l18_n426(x)
+ if (x < 1)
+ fun_l19_n440(x)
+ else
+ fun_l19_n17(x)
+ end
+end
+
+def fun_l18_n427(x)
+ if (x < 1)
+ fun_l19_n294(x)
+ else
+ fun_l19_n3(x)
+ end
+end
+
+def fun_l18_n428(x)
+ if (x < 1)
+ fun_l19_n369(x)
+ else
+ fun_l19_n576(x)
+ end
+end
+
+def fun_l18_n429(x)
+ if (x < 1)
+ fun_l19_n818(x)
+ else
+ fun_l19_n236(x)
+ end
+end
+
+def fun_l18_n430(x)
+ if (x < 1)
+ fun_l19_n360(x)
+ else
+ fun_l19_n443(x)
+ end
+end
+
+def fun_l18_n431(x)
+ if (x < 1)
+ fun_l19_n432(x)
+ else
+ fun_l19_n863(x)
+ end
+end
+
+def fun_l18_n432(x)
+ if (x < 1)
+ fun_l19_n591(x)
+ else
+ fun_l19_n167(x)
+ end
+end
+
+def fun_l18_n433(x)
+ if (x < 1)
+ fun_l19_n955(x)
+ else
+ fun_l19_n265(x)
+ end
+end
+
+def fun_l18_n434(x)
+ if (x < 1)
+ fun_l19_n374(x)
+ else
+ fun_l19_n812(x)
+ end
+end
+
+def fun_l18_n435(x)
+ if (x < 1)
+ fun_l19_n712(x)
+ else
+ fun_l19_n603(x)
+ end
+end
+
+def fun_l18_n436(x)
+ if (x < 1)
+ fun_l19_n750(x)
+ else
+ fun_l19_n852(x)
+ end
+end
+
+def fun_l18_n437(x)
+ if (x < 1)
+ fun_l19_n393(x)
+ else
+ fun_l19_n121(x)
+ end
+end
+
+def fun_l18_n438(x)
+ if (x < 1)
+ fun_l19_n555(x)
+ else
+ fun_l19_n33(x)
+ end
+end
+
+def fun_l18_n439(x)
+ if (x < 1)
+ fun_l19_n872(x)
+ else
+ fun_l19_n841(x)
+ end
+end
+
+def fun_l18_n440(x)
+ if (x < 1)
+ fun_l19_n828(x)
+ else
+ fun_l19_n549(x)
+ end
+end
+
+def fun_l18_n441(x)
+ if (x < 1)
+ fun_l19_n647(x)
+ else
+ fun_l19_n795(x)
+ end
+end
+
+def fun_l18_n442(x)
+ if (x < 1)
+ fun_l19_n609(x)
+ else
+ fun_l19_n837(x)
+ end
+end
+
+def fun_l18_n443(x)
+ if (x < 1)
+ fun_l19_n977(x)
+ else
+ fun_l19_n670(x)
+ end
+end
+
+def fun_l18_n444(x)
+ if (x < 1)
+ fun_l19_n649(x)
+ else
+ fun_l19_n912(x)
+ end
+end
+
+def fun_l18_n445(x)
+ if (x < 1)
+ fun_l19_n856(x)
+ else
+ fun_l19_n994(x)
+ end
+end
+
+def fun_l18_n446(x)
+ if (x < 1)
+ fun_l19_n868(x)
+ else
+ fun_l19_n105(x)
+ end
+end
+
+def fun_l18_n447(x)
+ if (x < 1)
+ fun_l19_n405(x)
+ else
+ fun_l19_n318(x)
+ end
+end
+
+def fun_l18_n448(x)
+ if (x < 1)
+ fun_l19_n966(x)
+ else
+ fun_l19_n214(x)
+ end
+end
+
+def fun_l18_n449(x)
+ if (x < 1)
+ fun_l19_n458(x)
+ else
+ fun_l19_n650(x)
+ end
+end
+
+def fun_l18_n450(x)
+ if (x < 1)
+ fun_l19_n875(x)
+ else
+ fun_l19_n697(x)
+ end
+end
+
+def fun_l18_n451(x)
+ if (x < 1)
+ fun_l19_n799(x)
+ else
+ fun_l19_n661(x)
+ end
+end
+
+def fun_l18_n452(x)
+ if (x < 1)
+ fun_l19_n677(x)
+ else
+ fun_l19_n750(x)
+ end
+end
+
+def fun_l18_n453(x)
+ if (x < 1)
+ fun_l19_n530(x)
+ else
+ fun_l19_n110(x)
+ end
+end
+
+def fun_l18_n454(x)
+ if (x < 1)
+ fun_l19_n785(x)
+ else
+ fun_l19_n381(x)
+ end
+end
+
+def fun_l18_n455(x)
+ if (x < 1)
+ fun_l19_n680(x)
+ else
+ fun_l19_n201(x)
+ end
+end
+
+def fun_l18_n456(x)
+ if (x < 1)
+ fun_l19_n246(x)
+ else
+ fun_l19_n972(x)
+ end
+end
+
+def fun_l18_n457(x)
+ if (x < 1)
+ fun_l19_n656(x)
+ else
+ fun_l19_n451(x)
+ end
+end
+
+def fun_l18_n458(x)
+ if (x < 1)
+ fun_l19_n612(x)
+ else
+ fun_l19_n288(x)
+ end
+end
+
+def fun_l18_n459(x)
+ if (x < 1)
+ fun_l19_n612(x)
+ else
+ fun_l19_n150(x)
+ end
+end
+
+def fun_l18_n460(x)
+ if (x < 1)
+ fun_l19_n549(x)
+ else
+ fun_l19_n917(x)
+ end
+end
+
+def fun_l18_n461(x)
+ if (x < 1)
+ fun_l19_n661(x)
+ else
+ fun_l19_n11(x)
+ end
+end
+
+def fun_l18_n462(x)
+ if (x < 1)
+ fun_l19_n172(x)
+ else
+ fun_l19_n561(x)
+ end
+end
+
+def fun_l18_n463(x)
+ if (x < 1)
+ fun_l19_n687(x)
+ else
+ fun_l19_n12(x)
+ end
+end
+
+def fun_l18_n464(x)
+ if (x < 1)
+ fun_l19_n57(x)
+ else
+ fun_l19_n835(x)
+ end
+end
+
+def fun_l18_n465(x)
+ if (x < 1)
+ fun_l19_n116(x)
+ else
+ fun_l19_n993(x)
+ end
+end
+
+def fun_l18_n466(x)
+ if (x < 1)
+ fun_l19_n932(x)
+ else
+ fun_l19_n623(x)
+ end
+end
+
+def fun_l18_n467(x)
+ if (x < 1)
+ fun_l19_n839(x)
+ else
+ fun_l19_n70(x)
+ end
+end
+
+def fun_l18_n468(x)
+ if (x < 1)
+ fun_l19_n574(x)
+ else
+ fun_l19_n193(x)
+ end
+end
+
+def fun_l18_n469(x)
+ if (x < 1)
+ fun_l19_n762(x)
+ else
+ fun_l19_n654(x)
+ end
+end
+
+def fun_l18_n470(x)
+ if (x < 1)
+ fun_l19_n656(x)
+ else
+ fun_l19_n42(x)
+ end
+end
+
+def fun_l18_n471(x)
+ if (x < 1)
+ fun_l19_n959(x)
+ else
+ fun_l19_n368(x)
+ end
+end
+
+def fun_l18_n472(x)
+ if (x < 1)
+ fun_l19_n494(x)
+ else
+ fun_l19_n357(x)
+ end
+end
+
+def fun_l18_n473(x)
+ if (x < 1)
+ fun_l19_n394(x)
+ else
+ fun_l19_n313(x)
+ end
+end
+
+def fun_l18_n474(x)
+ if (x < 1)
+ fun_l19_n826(x)
+ else
+ fun_l19_n33(x)
+ end
+end
+
+def fun_l18_n475(x)
+ if (x < 1)
+ fun_l19_n202(x)
+ else
+ fun_l19_n455(x)
+ end
+end
+
+def fun_l18_n476(x)
+ if (x < 1)
+ fun_l19_n855(x)
+ else
+ fun_l19_n375(x)
+ end
+end
+
+def fun_l18_n477(x)
+ if (x < 1)
+ fun_l19_n554(x)
+ else
+ fun_l19_n176(x)
+ end
+end
+
+def fun_l18_n478(x)
+ if (x < 1)
+ fun_l19_n705(x)
+ else
+ fun_l19_n509(x)
+ end
+end
+
+def fun_l18_n479(x)
+ if (x < 1)
+ fun_l19_n473(x)
+ else
+ fun_l19_n123(x)
+ end
+end
+
+def fun_l18_n480(x)
+ if (x < 1)
+ fun_l19_n108(x)
+ else
+ fun_l19_n125(x)
+ end
+end
+
+def fun_l18_n481(x)
+ if (x < 1)
+ fun_l19_n476(x)
+ else
+ fun_l19_n657(x)
+ end
+end
+
+def fun_l18_n482(x)
+ if (x < 1)
+ fun_l19_n800(x)
+ else
+ fun_l19_n691(x)
+ end
+end
+
+def fun_l18_n483(x)
+ if (x < 1)
+ fun_l19_n343(x)
+ else
+ fun_l19_n573(x)
+ end
+end
+
+def fun_l18_n484(x)
+ if (x < 1)
+ fun_l19_n654(x)
+ else
+ fun_l19_n114(x)
+ end
+end
+
+def fun_l18_n485(x)
+ if (x < 1)
+ fun_l19_n231(x)
+ else
+ fun_l19_n291(x)
+ end
+end
+
+def fun_l18_n486(x)
+ if (x < 1)
+ fun_l19_n877(x)
+ else
+ fun_l19_n628(x)
+ end
+end
+
+def fun_l18_n487(x)
+ if (x < 1)
+ fun_l19_n35(x)
+ else
+ fun_l19_n992(x)
+ end
+end
+
+def fun_l18_n488(x)
+ if (x < 1)
+ fun_l19_n592(x)
+ else
+ fun_l19_n951(x)
+ end
+end
+
+def fun_l18_n489(x)
+ if (x < 1)
+ fun_l19_n292(x)
+ else
+ fun_l19_n768(x)
+ end
+end
+
+def fun_l18_n490(x)
+ if (x < 1)
+ fun_l19_n191(x)
+ else
+ fun_l19_n759(x)
+ end
+end
+
+def fun_l18_n491(x)
+ if (x < 1)
+ fun_l19_n474(x)
+ else
+ fun_l19_n393(x)
+ end
+end
+
+def fun_l18_n492(x)
+ if (x < 1)
+ fun_l19_n556(x)
+ else
+ fun_l19_n691(x)
+ end
+end
+
+def fun_l18_n493(x)
+ if (x < 1)
+ fun_l19_n717(x)
+ else
+ fun_l19_n714(x)
+ end
+end
+
+def fun_l18_n494(x)
+ if (x < 1)
+ fun_l19_n542(x)
+ else
+ fun_l19_n505(x)
+ end
+end
+
+def fun_l18_n495(x)
+ if (x < 1)
+ fun_l19_n154(x)
+ else
+ fun_l19_n500(x)
+ end
+end
+
+def fun_l18_n496(x)
+ if (x < 1)
+ fun_l19_n311(x)
+ else
+ fun_l19_n458(x)
+ end
+end
+
+def fun_l18_n497(x)
+ if (x < 1)
+ fun_l19_n523(x)
+ else
+ fun_l19_n475(x)
+ end
+end
+
+def fun_l18_n498(x)
+ if (x < 1)
+ fun_l19_n101(x)
+ else
+ fun_l19_n478(x)
+ end
+end
+
+def fun_l18_n499(x)
+ if (x < 1)
+ fun_l19_n243(x)
+ else
+ fun_l19_n586(x)
+ end
+end
+
+def fun_l18_n500(x)
+ if (x < 1)
+ fun_l19_n263(x)
+ else
+ fun_l19_n888(x)
+ end
+end
+
+def fun_l18_n501(x)
+ if (x < 1)
+ fun_l19_n415(x)
+ else
+ fun_l19_n808(x)
+ end
+end
+
+def fun_l18_n502(x)
+ if (x < 1)
+ fun_l19_n38(x)
+ else
+ fun_l19_n640(x)
+ end
+end
+
+def fun_l18_n503(x)
+ if (x < 1)
+ fun_l19_n218(x)
+ else
+ fun_l19_n577(x)
+ end
+end
+
+def fun_l18_n504(x)
+ if (x < 1)
+ fun_l19_n723(x)
+ else
+ fun_l19_n594(x)
+ end
+end
+
+def fun_l18_n505(x)
+ if (x < 1)
+ fun_l19_n392(x)
+ else
+ fun_l19_n984(x)
+ end
+end
+
+def fun_l18_n506(x)
+ if (x < 1)
+ fun_l19_n310(x)
+ else
+ fun_l19_n668(x)
+ end
+end
+
+def fun_l18_n507(x)
+ if (x < 1)
+ fun_l19_n278(x)
+ else
+ fun_l19_n812(x)
+ end
+end
+
+def fun_l18_n508(x)
+ if (x < 1)
+ fun_l19_n230(x)
+ else
+ fun_l19_n479(x)
+ end
+end
+
+def fun_l18_n509(x)
+ if (x < 1)
+ fun_l19_n63(x)
+ else
+ fun_l19_n774(x)
+ end
+end
+
+def fun_l18_n510(x)
+ if (x < 1)
+ fun_l19_n607(x)
+ else
+ fun_l19_n433(x)
+ end
+end
+
+def fun_l18_n511(x)
+ if (x < 1)
+ fun_l19_n28(x)
+ else
+ fun_l19_n672(x)
+ end
+end
+
+def fun_l18_n512(x)
+ if (x < 1)
+ fun_l19_n684(x)
+ else
+ fun_l19_n247(x)
+ end
+end
+
+def fun_l18_n513(x)
+ if (x < 1)
+ fun_l19_n181(x)
+ else
+ fun_l19_n649(x)
+ end
+end
+
+def fun_l18_n514(x)
+ if (x < 1)
+ fun_l19_n787(x)
+ else
+ fun_l19_n281(x)
+ end
+end
+
+def fun_l18_n515(x)
+ if (x < 1)
+ fun_l19_n191(x)
+ else
+ fun_l19_n848(x)
+ end
+end
+
+def fun_l18_n516(x)
+ if (x < 1)
+ fun_l19_n796(x)
+ else
+ fun_l19_n572(x)
+ end
+end
+
+def fun_l18_n517(x)
+ if (x < 1)
+ fun_l19_n780(x)
+ else
+ fun_l19_n816(x)
+ end
+end
+
+def fun_l18_n518(x)
+ if (x < 1)
+ fun_l19_n429(x)
+ else
+ fun_l19_n681(x)
+ end
+end
+
+def fun_l18_n519(x)
+ if (x < 1)
+ fun_l19_n476(x)
+ else
+ fun_l19_n954(x)
+ end
+end
+
+def fun_l18_n520(x)
+ if (x < 1)
+ fun_l19_n537(x)
+ else
+ fun_l19_n690(x)
+ end
+end
+
+def fun_l18_n521(x)
+ if (x < 1)
+ fun_l19_n657(x)
+ else
+ fun_l19_n293(x)
+ end
+end
+
+def fun_l18_n522(x)
+ if (x < 1)
+ fun_l19_n369(x)
+ else
+ fun_l19_n685(x)
+ end
+end
+
+def fun_l18_n523(x)
+ if (x < 1)
+ fun_l19_n785(x)
+ else
+ fun_l19_n184(x)
+ end
+end
+
+def fun_l18_n524(x)
+ if (x < 1)
+ fun_l19_n6(x)
+ else
+ fun_l19_n970(x)
+ end
+end
+
+def fun_l18_n525(x)
+ if (x < 1)
+ fun_l19_n395(x)
+ else
+ fun_l19_n570(x)
+ end
+end
+
+def fun_l18_n526(x)
+ if (x < 1)
+ fun_l19_n837(x)
+ else
+ fun_l19_n992(x)
+ end
+end
+
+def fun_l18_n527(x)
+ if (x < 1)
+ fun_l19_n827(x)
+ else
+ fun_l19_n119(x)
+ end
+end
+
+def fun_l18_n528(x)
+ if (x < 1)
+ fun_l19_n819(x)
+ else
+ fun_l19_n382(x)
+ end
+end
+
+def fun_l18_n529(x)
+ if (x < 1)
+ fun_l19_n365(x)
+ else
+ fun_l19_n713(x)
+ end
+end
+
+def fun_l18_n530(x)
+ if (x < 1)
+ fun_l19_n223(x)
+ else
+ fun_l19_n346(x)
+ end
+end
+
+def fun_l18_n531(x)
+ if (x < 1)
+ fun_l19_n624(x)
+ else
+ fun_l19_n671(x)
+ end
+end
+
+def fun_l18_n532(x)
+ if (x < 1)
+ fun_l19_n522(x)
+ else
+ fun_l19_n354(x)
+ end
+end
+
+def fun_l18_n533(x)
+ if (x < 1)
+ fun_l19_n324(x)
+ else
+ fun_l19_n602(x)
+ end
+end
+
+def fun_l18_n534(x)
+ if (x < 1)
+ fun_l19_n138(x)
+ else
+ fun_l19_n259(x)
+ end
+end
+
+def fun_l18_n535(x)
+ if (x < 1)
+ fun_l19_n692(x)
+ else
+ fun_l19_n810(x)
+ end
+end
+
+def fun_l18_n536(x)
+ if (x < 1)
+ fun_l19_n694(x)
+ else
+ fun_l19_n39(x)
+ end
+end
+
+def fun_l18_n537(x)
+ if (x < 1)
+ fun_l19_n441(x)
+ else
+ fun_l19_n158(x)
+ end
+end
+
+def fun_l18_n538(x)
+ if (x < 1)
+ fun_l19_n609(x)
+ else
+ fun_l19_n54(x)
+ end
+end
+
+def fun_l18_n539(x)
+ if (x < 1)
+ fun_l19_n984(x)
+ else
+ fun_l19_n206(x)
+ end
+end
+
+def fun_l18_n540(x)
+ if (x < 1)
+ fun_l19_n548(x)
+ else
+ fun_l19_n558(x)
+ end
+end
+
+def fun_l18_n541(x)
+ if (x < 1)
+ fun_l19_n640(x)
+ else
+ fun_l19_n721(x)
+ end
+end
+
+def fun_l18_n542(x)
+ if (x < 1)
+ fun_l19_n50(x)
+ else
+ fun_l19_n598(x)
+ end
+end
+
+def fun_l18_n543(x)
+ if (x < 1)
+ fun_l19_n774(x)
+ else
+ fun_l19_n753(x)
+ end
+end
+
+def fun_l18_n544(x)
+ if (x < 1)
+ fun_l19_n151(x)
+ else
+ fun_l19_n75(x)
+ end
+end
+
+def fun_l18_n545(x)
+ if (x < 1)
+ fun_l19_n162(x)
+ else
+ fun_l19_n550(x)
+ end
+end
+
+def fun_l18_n546(x)
+ if (x < 1)
+ fun_l19_n892(x)
+ else
+ fun_l19_n322(x)
+ end
+end
+
+def fun_l18_n547(x)
+ if (x < 1)
+ fun_l19_n15(x)
+ else
+ fun_l19_n854(x)
+ end
+end
+
+def fun_l18_n548(x)
+ if (x < 1)
+ fun_l19_n54(x)
+ else
+ fun_l19_n627(x)
+ end
+end
+
+def fun_l18_n549(x)
+ if (x < 1)
+ fun_l19_n847(x)
+ else
+ fun_l19_n236(x)
+ end
+end
+
+def fun_l18_n550(x)
+ if (x < 1)
+ fun_l19_n796(x)
+ else
+ fun_l19_n895(x)
+ end
+end
+
+def fun_l18_n551(x)
+ if (x < 1)
+ fun_l19_n922(x)
+ else
+ fun_l19_n854(x)
+ end
+end
+
+def fun_l18_n552(x)
+ if (x < 1)
+ fun_l19_n378(x)
+ else
+ fun_l19_n449(x)
+ end
+end
+
+def fun_l18_n553(x)
+ if (x < 1)
+ fun_l19_n188(x)
+ else
+ fun_l19_n65(x)
+ end
+end
+
+def fun_l18_n554(x)
+ if (x < 1)
+ fun_l19_n606(x)
+ else
+ fun_l19_n292(x)
+ end
+end
+
+def fun_l18_n555(x)
+ if (x < 1)
+ fun_l19_n718(x)
+ else
+ fun_l19_n926(x)
+ end
+end
+
+def fun_l18_n556(x)
+ if (x < 1)
+ fun_l19_n765(x)
+ else
+ fun_l19_n975(x)
+ end
+end
+
+def fun_l18_n557(x)
+ if (x < 1)
+ fun_l19_n987(x)
+ else
+ fun_l19_n152(x)
+ end
+end
+
+def fun_l18_n558(x)
+ if (x < 1)
+ fun_l19_n978(x)
+ else
+ fun_l19_n861(x)
+ end
+end
+
+def fun_l18_n559(x)
+ if (x < 1)
+ fun_l19_n563(x)
+ else
+ fun_l19_n532(x)
+ end
+end
+
+def fun_l18_n560(x)
+ if (x < 1)
+ fun_l19_n492(x)
+ else
+ fun_l19_n337(x)
+ end
+end
+
+def fun_l18_n561(x)
+ if (x < 1)
+ fun_l19_n967(x)
+ else
+ fun_l19_n33(x)
+ end
+end
+
+def fun_l18_n562(x)
+ if (x < 1)
+ fun_l19_n509(x)
+ else
+ fun_l19_n212(x)
+ end
+end
+
+def fun_l18_n563(x)
+ if (x < 1)
+ fun_l19_n55(x)
+ else
+ fun_l19_n167(x)
+ end
+end
+
+def fun_l18_n564(x)
+ if (x < 1)
+ fun_l19_n263(x)
+ else
+ fun_l19_n386(x)
+ end
+end
+
+def fun_l18_n565(x)
+ if (x < 1)
+ fun_l19_n292(x)
+ else
+ fun_l19_n576(x)
+ end
+end
+
+def fun_l18_n566(x)
+ if (x < 1)
+ fun_l19_n16(x)
+ else
+ fun_l19_n180(x)
+ end
+end
+
+def fun_l18_n567(x)
+ if (x < 1)
+ fun_l19_n359(x)
+ else
+ fun_l19_n398(x)
+ end
+end
+
+def fun_l18_n568(x)
+ if (x < 1)
+ fun_l19_n799(x)
+ else
+ fun_l19_n616(x)
+ end
+end
+
+def fun_l18_n569(x)
+ if (x < 1)
+ fun_l19_n751(x)
+ else
+ fun_l19_n539(x)
+ end
+end
+
+def fun_l18_n570(x)
+ if (x < 1)
+ fun_l19_n497(x)
+ else
+ fun_l19_n197(x)
+ end
+end
+
+def fun_l18_n571(x)
+ if (x < 1)
+ fun_l19_n88(x)
+ else
+ fun_l19_n565(x)
+ end
+end
+
+def fun_l18_n572(x)
+ if (x < 1)
+ fun_l19_n213(x)
+ else
+ fun_l19_n137(x)
+ end
+end
+
+def fun_l18_n573(x)
+ if (x < 1)
+ fun_l19_n570(x)
+ else
+ fun_l19_n893(x)
+ end
+end
+
+def fun_l18_n574(x)
+ if (x < 1)
+ fun_l19_n436(x)
+ else
+ fun_l19_n285(x)
+ end
+end
+
+def fun_l18_n575(x)
+ if (x < 1)
+ fun_l19_n787(x)
+ else
+ fun_l19_n541(x)
+ end
+end
+
+def fun_l18_n576(x)
+ if (x < 1)
+ fun_l19_n432(x)
+ else
+ fun_l19_n371(x)
+ end
+end
+
+def fun_l18_n577(x)
+ if (x < 1)
+ fun_l19_n542(x)
+ else
+ fun_l19_n431(x)
+ end
+end
+
+def fun_l18_n578(x)
+ if (x < 1)
+ fun_l19_n829(x)
+ else
+ fun_l19_n415(x)
+ end
+end
+
+def fun_l18_n579(x)
+ if (x < 1)
+ fun_l19_n925(x)
+ else
+ fun_l19_n862(x)
+ end
+end
+
+def fun_l18_n580(x)
+ if (x < 1)
+ fun_l19_n214(x)
+ else
+ fun_l19_n67(x)
+ end
+end
+
+def fun_l18_n581(x)
+ if (x < 1)
+ fun_l19_n734(x)
+ else
+ fun_l19_n220(x)
+ end
+end
+
+def fun_l18_n582(x)
+ if (x < 1)
+ fun_l19_n971(x)
+ else
+ fun_l19_n359(x)
+ end
+end
+
+def fun_l18_n583(x)
+ if (x < 1)
+ fun_l19_n293(x)
+ else
+ fun_l19_n286(x)
+ end
+end
+
+def fun_l18_n584(x)
+ if (x < 1)
+ fun_l19_n618(x)
+ else
+ fun_l19_n866(x)
+ end
+end
+
+def fun_l18_n585(x)
+ if (x < 1)
+ fun_l19_n315(x)
+ else
+ fun_l19_n594(x)
+ end
+end
+
+def fun_l18_n586(x)
+ if (x < 1)
+ fun_l19_n230(x)
+ else
+ fun_l19_n450(x)
+ end
+end
+
+def fun_l18_n587(x)
+ if (x < 1)
+ fun_l19_n805(x)
+ else
+ fun_l19_n429(x)
+ end
+end
+
+def fun_l18_n588(x)
+ if (x < 1)
+ fun_l19_n782(x)
+ else
+ fun_l19_n133(x)
+ end
+end
+
+def fun_l18_n589(x)
+ if (x < 1)
+ fun_l19_n166(x)
+ else
+ fun_l19_n111(x)
+ end
+end
+
+def fun_l18_n590(x)
+ if (x < 1)
+ fun_l19_n26(x)
+ else
+ fun_l19_n678(x)
+ end
+end
+
+def fun_l18_n591(x)
+ if (x < 1)
+ fun_l19_n728(x)
+ else
+ fun_l19_n346(x)
+ end
+end
+
+def fun_l18_n592(x)
+ if (x < 1)
+ fun_l19_n882(x)
+ else
+ fun_l19_n930(x)
+ end
+end
+
+def fun_l18_n593(x)
+ if (x < 1)
+ fun_l19_n454(x)
+ else
+ fun_l19_n560(x)
+ end
+end
+
+def fun_l18_n594(x)
+ if (x < 1)
+ fun_l19_n881(x)
+ else
+ fun_l19_n929(x)
+ end
+end
+
+def fun_l18_n595(x)
+ if (x < 1)
+ fun_l19_n464(x)
+ else
+ fun_l19_n8(x)
+ end
+end
+
+def fun_l18_n596(x)
+ if (x < 1)
+ fun_l19_n247(x)
+ else
+ fun_l19_n48(x)
+ end
+end
+
+def fun_l18_n597(x)
+ if (x < 1)
+ fun_l19_n838(x)
+ else
+ fun_l19_n811(x)
+ end
+end
+
+def fun_l18_n598(x)
+ if (x < 1)
+ fun_l19_n493(x)
+ else
+ fun_l19_n975(x)
+ end
+end
+
+def fun_l18_n599(x)
+ if (x < 1)
+ fun_l19_n372(x)
+ else
+ fun_l19_n334(x)
+ end
+end
+
+def fun_l18_n600(x)
+ if (x < 1)
+ fun_l19_n971(x)
+ else
+ fun_l19_n198(x)
+ end
+end
+
+def fun_l18_n601(x)
+ if (x < 1)
+ fun_l19_n494(x)
+ else
+ fun_l19_n273(x)
+ end
+end
+
+def fun_l18_n602(x)
+ if (x < 1)
+ fun_l19_n778(x)
+ else
+ fun_l19_n815(x)
+ end
+end
+
+def fun_l18_n603(x)
+ if (x < 1)
+ fun_l19_n247(x)
+ else
+ fun_l19_n615(x)
+ end
+end
+
+def fun_l18_n604(x)
+ if (x < 1)
+ fun_l19_n659(x)
+ else
+ fun_l19_n613(x)
+ end
+end
+
+def fun_l18_n605(x)
+ if (x < 1)
+ fun_l19_n814(x)
+ else
+ fun_l19_n742(x)
+ end
+end
+
+def fun_l18_n606(x)
+ if (x < 1)
+ fun_l19_n988(x)
+ else
+ fun_l19_n877(x)
+ end
+end
+
+def fun_l18_n607(x)
+ if (x < 1)
+ fun_l19_n908(x)
+ else
+ fun_l19_n491(x)
+ end
+end
+
+def fun_l18_n608(x)
+ if (x < 1)
+ fun_l19_n600(x)
+ else
+ fun_l19_n381(x)
+ end
+end
+
+def fun_l18_n609(x)
+ if (x < 1)
+ fun_l19_n695(x)
+ else
+ fun_l19_n343(x)
+ end
+end
+
+def fun_l18_n610(x)
+ if (x < 1)
+ fun_l19_n686(x)
+ else
+ fun_l19_n154(x)
+ end
+end
+
+def fun_l18_n611(x)
+ if (x < 1)
+ fun_l19_n413(x)
+ else
+ fun_l19_n364(x)
+ end
+end
+
+def fun_l18_n612(x)
+ if (x < 1)
+ fun_l19_n86(x)
+ else
+ fun_l19_n478(x)
+ end
+end
+
+def fun_l18_n613(x)
+ if (x < 1)
+ fun_l19_n288(x)
+ else
+ fun_l19_n134(x)
+ end
+end
+
+def fun_l18_n614(x)
+ if (x < 1)
+ fun_l19_n71(x)
+ else
+ fun_l19_n95(x)
+ end
+end
+
+def fun_l18_n615(x)
+ if (x < 1)
+ fun_l19_n716(x)
+ else
+ fun_l19_n697(x)
+ end
+end
+
+def fun_l18_n616(x)
+ if (x < 1)
+ fun_l19_n24(x)
+ else
+ fun_l19_n365(x)
+ end
+end
+
+def fun_l18_n617(x)
+ if (x < 1)
+ fun_l19_n317(x)
+ else
+ fun_l19_n117(x)
+ end
+end
+
+def fun_l18_n618(x)
+ if (x < 1)
+ fun_l19_n304(x)
+ else
+ fun_l19_n115(x)
+ end
+end
+
+def fun_l18_n619(x)
+ if (x < 1)
+ fun_l19_n322(x)
+ else
+ fun_l19_n105(x)
+ end
+end
+
+def fun_l18_n620(x)
+ if (x < 1)
+ fun_l19_n213(x)
+ else
+ fun_l19_n122(x)
+ end
+end
+
+def fun_l18_n621(x)
+ if (x < 1)
+ fun_l19_n675(x)
+ else
+ fun_l19_n769(x)
+ end
+end
+
+def fun_l18_n622(x)
+ if (x < 1)
+ fun_l19_n660(x)
+ else
+ fun_l19_n895(x)
+ end
+end
+
+def fun_l18_n623(x)
+ if (x < 1)
+ fun_l19_n656(x)
+ else
+ fun_l19_n698(x)
+ end
+end
+
+def fun_l18_n624(x)
+ if (x < 1)
+ fun_l19_n575(x)
+ else
+ fun_l19_n274(x)
+ end
+end
+
+def fun_l18_n625(x)
+ if (x < 1)
+ fun_l19_n44(x)
+ else
+ fun_l19_n78(x)
+ end
+end
+
+def fun_l18_n626(x)
+ if (x < 1)
+ fun_l19_n326(x)
+ else
+ fun_l19_n76(x)
+ end
+end
+
+def fun_l18_n627(x)
+ if (x < 1)
+ fun_l19_n365(x)
+ else
+ fun_l19_n453(x)
+ end
+end
+
+def fun_l18_n628(x)
+ if (x < 1)
+ fun_l19_n306(x)
+ else
+ fun_l19_n63(x)
+ end
+end
+
+def fun_l18_n629(x)
+ if (x < 1)
+ fun_l19_n116(x)
+ else
+ fun_l19_n577(x)
+ end
+end
+
+def fun_l18_n630(x)
+ if (x < 1)
+ fun_l19_n625(x)
+ else
+ fun_l19_n321(x)
+ end
+end
+
+def fun_l18_n631(x)
+ if (x < 1)
+ fun_l19_n328(x)
+ else
+ fun_l19_n989(x)
+ end
+end
+
+def fun_l18_n632(x)
+ if (x < 1)
+ fun_l19_n216(x)
+ else
+ fun_l19_n375(x)
+ end
+end
+
+def fun_l18_n633(x)
+ if (x < 1)
+ fun_l19_n942(x)
+ else
+ fun_l19_n17(x)
+ end
+end
+
+def fun_l18_n634(x)
+ if (x < 1)
+ fun_l19_n821(x)
+ else
+ fun_l19_n132(x)
+ end
+end
+
+def fun_l18_n635(x)
+ if (x < 1)
+ fun_l19_n164(x)
+ else
+ fun_l19_n679(x)
+ end
+end
+
+def fun_l18_n636(x)
+ if (x < 1)
+ fun_l19_n494(x)
+ else
+ fun_l19_n404(x)
+ end
+end
+
+def fun_l18_n637(x)
+ if (x < 1)
+ fun_l19_n715(x)
+ else
+ fun_l19_n955(x)
+ end
+end
+
+def fun_l18_n638(x)
+ if (x < 1)
+ fun_l19_n297(x)
+ else
+ fun_l19_n349(x)
+ end
+end
+
+def fun_l18_n639(x)
+ if (x < 1)
+ fun_l19_n835(x)
+ else
+ fun_l19_n965(x)
+ end
+end
+
+def fun_l18_n640(x)
+ if (x < 1)
+ fun_l19_n778(x)
+ else
+ fun_l19_n572(x)
+ end
+end
+
+def fun_l18_n641(x)
+ if (x < 1)
+ fun_l19_n51(x)
+ else
+ fun_l19_n497(x)
+ end
+end
+
+def fun_l18_n642(x)
+ if (x < 1)
+ fun_l19_n390(x)
+ else
+ fun_l19_n341(x)
+ end
+end
+
+def fun_l18_n643(x)
+ if (x < 1)
+ fun_l19_n961(x)
+ else
+ fun_l19_n966(x)
+ end
+end
+
+def fun_l18_n644(x)
+ if (x < 1)
+ fun_l19_n832(x)
+ else
+ fun_l19_n279(x)
+ end
+end
+
+def fun_l18_n645(x)
+ if (x < 1)
+ fun_l19_n0(x)
+ else
+ fun_l19_n266(x)
+ end
+end
+
+def fun_l18_n646(x)
+ if (x < 1)
+ fun_l19_n512(x)
+ else
+ fun_l19_n988(x)
+ end
+end
+
+def fun_l18_n647(x)
+ if (x < 1)
+ fun_l19_n728(x)
+ else
+ fun_l19_n390(x)
+ end
+end
+
+def fun_l18_n648(x)
+ if (x < 1)
+ fun_l19_n61(x)
+ else
+ fun_l19_n188(x)
+ end
+end
+
+def fun_l18_n649(x)
+ if (x < 1)
+ fun_l19_n772(x)
+ else
+ fun_l19_n457(x)
+ end
+end
+
+def fun_l18_n650(x)
+ if (x < 1)
+ fun_l19_n768(x)
+ else
+ fun_l19_n624(x)
+ end
+end
+
+def fun_l18_n651(x)
+ if (x < 1)
+ fun_l19_n30(x)
+ else
+ fun_l19_n663(x)
+ end
+end
+
+def fun_l18_n652(x)
+ if (x < 1)
+ fun_l19_n42(x)
+ else
+ fun_l19_n781(x)
+ end
+end
+
+def fun_l18_n653(x)
+ if (x < 1)
+ fun_l19_n59(x)
+ else
+ fun_l19_n99(x)
+ end
+end
+
+def fun_l18_n654(x)
+ if (x < 1)
+ fun_l19_n81(x)
+ else
+ fun_l19_n368(x)
+ end
+end
+
+def fun_l18_n655(x)
+ if (x < 1)
+ fun_l19_n0(x)
+ else
+ fun_l19_n321(x)
+ end
+end
+
+def fun_l18_n656(x)
+ if (x < 1)
+ fun_l19_n344(x)
+ else
+ fun_l19_n996(x)
+ end
+end
+
+def fun_l18_n657(x)
+ if (x < 1)
+ fun_l19_n384(x)
+ else
+ fun_l19_n123(x)
+ end
+end
+
+def fun_l18_n658(x)
+ if (x < 1)
+ fun_l19_n336(x)
+ else
+ fun_l19_n928(x)
+ end
+end
+
+def fun_l18_n659(x)
+ if (x < 1)
+ fun_l19_n785(x)
+ else
+ fun_l19_n370(x)
+ end
+end
+
+def fun_l18_n660(x)
+ if (x < 1)
+ fun_l19_n508(x)
+ else
+ fun_l19_n200(x)
+ end
+end
+
+def fun_l18_n661(x)
+ if (x < 1)
+ fun_l19_n674(x)
+ else
+ fun_l19_n95(x)
+ end
+end
+
+def fun_l18_n662(x)
+ if (x < 1)
+ fun_l19_n839(x)
+ else
+ fun_l19_n737(x)
+ end
+end
+
+def fun_l18_n663(x)
+ if (x < 1)
+ fun_l19_n670(x)
+ else
+ fun_l19_n77(x)
+ end
+end
+
+def fun_l18_n664(x)
+ if (x < 1)
+ fun_l19_n402(x)
+ else
+ fun_l19_n7(x)
+ end
+end
+
+def fun_l18_n665(x)
+ if (x < 1)
+ fun_l19_n357(x)
+ else
+ fun_l19_n961(x)
+ end
+end
+
+def fun_l18_n666(x)
+ if (x < 1)
+ fun_l19_n72(x)
+ else
+ fun_l19_n535(x)
+ end
+end
+
+def fun_l18_n667(x)
+ if (x < 1)
+ fun_l19_n317(x)
+ else
+ fun_l19_n450(x)
+ end
+end
+
+def fun_l18_n668(x)
+ if (x < 1)
+ fun_l19_n823(x)
+ else
+ fun_l19_n301(x)
+ end
+end
+
+def fun_l18_n669(x)
+ if (x < 1)
+ fun_l19_n36(x)
+ else
+ fun_l19_n660(x)
+ end
+end
+
+def fun_l18_n670(x)
+ if (x < 1)
+ fun_l19_n322(x)
+ else
+ fun_l19_n626(x)
+ end
+end
+
+def fun_l18_n671(x)
+ if (x < 1)
+ fun_l19_n408(x)
+ else
+ fun_l19_n872(x)
+ end
+end
+
+def fun_l18_n672(x)
+ if (x < 1)
+ fun_l19_n614(x)
+ else
+ fun_l19_n567(x)
+ end
+end
+
+def fun_l18_n673(x)
+ if (x < 1)
+ fun_l19_n601(x)
+ else
+ fun_l19_n429(x)
+ end
+end
+
+def fun_l18_n674(x)
+ if (x < 1)
+ fun_l19_n658(x)
+ else
+ fun_l19_n424(x)
+ end
+end
+
+def fun_l18_n675(x)
+ if (x < 1)
+ fun_l19_n248(x)
+ else
+ fun_l19_n29(x)
+ end
+end
+
+def fun_l18_n676(x)
+ if (x < 1)
+ fun_l19_n206(x)
+ else
+ fun_l19_n838(x)
+ end
+end
+
+def fun_l18_n677(x)
+ if (x < 1)
+ fun_l19_n354(x)
+ else
+ fun_l19_n700(x)
+ end
+end
+
+def fun_l18_n678(x)
+ if (x < 1)
+ fun_l19_n264(x)
+ else
+ fun_l19_n591(x)
+ end
+end
+
+def fun_l18_n679(x)
+ if (x < 1)
+ fun_l19_n73(x)
+ else
+ fun_l19_n419(x)
+ end
+end
+
+def fun_l18_n680(x)
+ if (x < 1)
+ fun_l19_n260(x)
+ else
+ fun_l19_n902(x)
+ end
+end
+
+def fun_l18_n681(x)
+ if (x < 1)
+ fun_l19_n776(x)
+ else
+ fun_l19_n148(x)
+ end
+end
+
+def fun_l18_n682(x)
+ if (x < 1)
+ fun_l19_n819(x)
+ else
+ fun_l19_n743(x)
+ end
+end
+
+def fun_l18_n683(x)
+ if (x < 1)
+ fun_l19_n831(x)
+ else
+ fun_l19_n194(x)
+ end
+end
+
+def fun_l18_n684(x)
+ if (x < 1)
+ fun_l19_n652(x)
+ else
+ fun_l19_n229(x)
+ end
+end
+
+def fun_l18_n685(x)
+ if (x < 1)
+ fun_l19_n533(x)
+ else
+ fun_l19_n600(x)
+ end
+end
+
+def fun_l18_n686(x)
+ if (x < 1)
+ fun_l19_n45(x)
+ else
+ fun_l19_n623(x)
+ end
+end
+
+def fun_l18_n687(x)
+ if (x < 1)
+ fun_l19_n287(x)
+ else
+ fun_l19_n443(x)
+ end
+end
+
+def fun_l18_n688(x)
+ if (x < 1)
+ fun_l19_n719(x)
+ else
+ fun_l19_n819(x)
+ end
+end
+
+def fun_l18_n689(x)
+ if (x < 1)
+ fun_l19_n872(x)
+ else
+ fun_l19_n944(x)
+ end
+end
+
+def fun_l18_n690(x)
+ if (x < 1)
+ fun_l19_n352(x)
+ else
+ fun_l19_n49(x)
+ end
+end
+
+def fun_l18_n691(x)
+ if (x < 1)
+ fun_l19_n438(x)
+ else
+ fun_l19_n592(x)
+ end
+end
+
+def fun_l18_n692(x)
+ if (x < 1)
+ fun_l19_n717(x)
+ else
+ fun_l19_n30(x)
+ end
+end
+
+def fun_l18_n693(x)
+ if (x < 1)
+ fun_l19_n132(x)
+ else
+ fun_l19_n830(x)
+ end
+end
+
+def fun_l18_n694(x)
+ if (x < 1)
+ fun_l19_n17(x)
+ else
+ fun_l19_n649(x)
+ end
+end
+
+def fun_l18_n695(x)
+ if (x < 1)
+ fun_l19_n883(x)
+ else
+ fun_l19_n812(x)
+ end
+end
+
+def fun_l18_n696(x)
+ if (x < 1)
+ fun_l19_n354(x)
+ else
+ fun_l19_n927(x)
+ end
+end
+
+def fun_l18_n697(x)
+ if (x < 1)
+ fun_l19_n534(x)
+ else
+ fun_l19_n192(x)
+ end
+end
+
+def fun_l18_n698(x)
+ if (x < 1)
+ fun_l19_n911(x)
+ else
+ fun_l19_n386(x)
+ end
+end
+
+def fun_l18_n699(x)
+ if (x < 1)
+ fun_l19_n1(x)
+ else
+ fun_l19_n253(x)
+ end
+end
+
+def fun_l18_n700(x)
+ if (x < 1)
+ fun_l19_n318(x)
+ else
+ fun_l19_n323(x)
+ end
+end
+
+def fun_l18_n701(x)
+ if (x < 1)
+ fun_l19_n158(x)
+ else
+ fun_l19_n61(x)
+ end
+end
+
+def fun_l18_n702(x)
+ if (x < 1)
+ fun_l19_n719(x)
+ else
+ fun_l19_n842(x)
+ end
+end
+
+def fun_l18_n703(x)
+ if (x < 1)
+ fun_l19_n918(x)
+ else
+ fun_l19_n231(x)
+ end
+end
+
+def fun_l18_n704(x)
+ if (x < 1)
+ fun_l19_n136(x)
+ else
+ fun_l19_n28(x)
+ end
+end
+
+def fun_l18_n705(x)
+ if (x < 1)
+ fun_l19_n451(x)
+ else
+ fun_l19_n328(x)
+ end
+end
+
+def fun_l18_n706(x)
+ if (x < 1)
+ fun_l19_n182(x)
+ else
+ fun_l19_n434(x)
+ end
+end
+
+def fun_l18_n707(x)
+ if (x < 1)
+ fun_l19_n368(x)
+ else
+ fun_l19_n302(x)
+ end
+end
+
+def fun_l18_n708(x)
+ if (x < 1)
+ fun_l19_n370(x)
+ else
+ fun_l19_n291(x)
+ end
+end
+
+def fun_l18_n709(x)
+ if (x < 1)
+ fun_l19_n104(x)
+ else
+ fun_l19_n530(x)
+ end
+end
+
+def fun_l18_n710(x)
+ if (x < 1)
+ fun_l19_n712(x)
+ else
+ fun_l19_n325(x)
+ end
+end
+
+def fun_l18_n711(x)
+ if (x < 1)
+ fun_l19_n555(x)
+ else
+ fun_l19_n299(x)
+ end
+end
+
+def fun_l18_n712(x)
+ if (x < 1)
+ fun_l19_n40(x)
+ else
+ fun_l19_n342(x)
+ end
+end
+
+def fun_l18_n713(x)
+ if (x < 1)
+ fun_l19_n871(x)
+ else
+ fun_l19_n72(x)
+ end
+end
+
+def fun_l18_n714(x)
+ if (x < 1)
+ fun_l19_n137(x)
+ else
+ fun_l19_n195(x)
+ end
+end
+
+def fun_l18_n715(x)
+ if (x < 1)
+ fun_l19_n534(x)
+ else
+ fun_l19_n613(x)
+ end
+end
+
+def fun_l18_n716(x)
+ if (x < 1)
+ fun_l19_n591(x)
+ else
+ fun_l19_n899(x)
+ end
+end
+
+def fun_l18_n717(x)
+ if (x < 1)
+ fun_l19_n103(x)
+ else
+ fun_l19_n333(x)
+ end
+end
+
+def fun_l18_n718(x)
+ if (x < 1)
+ fun_l19_n470(x)
+ else
+ fun_l19_n576(x)
+ end
+end
+
+def fun_l18_n719(x)
+ if (x < 1)
+ fun_l19_n494(x)
+ else
+ fun_l19_n765(x)
+ end
+end
+
+def fun_l18_n720(x)
+ if (x < 1)
+ fun_l19_n317(x)
+ else
+ fun_l19_n720(x)
+ end
+end
+
+def fun_l18_n721(x)
+ if (x < 1)
+ fun_l19_n567(x)
+ else
+ fun_l19_n280(x)
+ end
+end
+
+def fun_l18_n722(x)
+ if (x < 1)
+ fun_l19_n642(x)
+ else
+ fun_l19_n700(x)
+ end
+end
+
+def fun_l18_n723(x)
+ if (x < 1)
+ fun_l19_n775(x)
+ else
+ fun_l19_n239(x)
+ end
+end
+
+def fun_l18_n724(x)
+ if (x < 1)
+ fun_l19_n346(x)
+ else
+ fun_l19_n974(x)
+ end
+end
+
+def fun_l18_n725(x)
+ if (x < 1)
+ fun_l19_n509(x)
+ else
+ fun_l19_n90(x)
+ end
+end
+
+def fun_l18_n726(x)
+ if (x < 1)
+ fun_l19_n834(x)
+ else
+ fun_l19_n793(x)
+ end
+end
+
+def fun_l18_n727(x)
+ if (x < 1)
+ fun_l19_n588(x)
+ else
+ fun_l19_n895(x)
+ end
+end
+
+def fun_l18_n728(x)
+ if (x < 1)
+ fun_l19_n18(x)
+ else
+ fun_l19_n218(x)
+ end
+end
+
+def fun_l18_n729(x)
+ if (x < 1)
+ fun_l19_n109(x)
+ else
+ fun_l19_n970(x)
+ end
+end
+
+def fun_l18_n730(x)
+ if (x < 1)
+ fun_l19_n721(x)
+ else
+ fun_l19_n81(x)
+ end
+end
+
+def fun_l18_n731(x)
+ if (x < 1)
+ fun_l19_n935(x)
+ else
+ fun_l19_n652(x)
+ end
+end
+
+def fun_l18_n732(x)
+ if (x < 1)
+ fun_l19_n821(x)
+ else
+ fun_l19_n32(x)
+ end
+end
+
+def fun_l18_n733(x)
+ if (x < 1)
+ fun_l19_n189(x)
+ else
+ fun_l19_n469(x)
+ end
+end
+
+def fun_l18_n734(x)
+ if (x < 1)
+ fun_l19_n11(x)
+ else
+ fun_l19_n741(x)
+ end
+end
+
+def fun_l18_n735(x)
+ if (x < 1)
+ fun_l19_n575(x)
+ else
+ fun_l19_n679(x)
+ end
+end
+
+def fun_l18_n736(x)
+ if (x < 1)
+ fun_l19_n442(x)
+ else
+ fun_l19_n652(x)
+ end
+end
+
+def fun_l18_n737(x)
+ if (x < 1)
+ fun_l19_n22(x)
+ else
+ fun_l19_n950(x)
+ end
+end
+
+def fun_l18_n738(x)
+ if (x < 1)
+ fun_l19_n605(x)
+ else
+ fun_l19_n16(x)
+ end
+end
+
+def fun_l18_n739(x)
+ if (x < 1)
+ fun_l19_n888(x)
+ else
+ fun_l19_n873(x)
+ end
+end
+
+def fun_l18_n740(x)
+ if (x < 1)
+ fun_l19_n355(x)
+ else
+ fun_l19_n558(x)
+ end
+end
+
+def fun_l18_n741(x)
+ if (x < 1)
+ fun_l19_n171(x)
+ else
+ fun_l19_n513(x)
+ end
+end
+
+def fun_l18_n742(x)
+ if (x < 1)
+ fun_l19_n843(x)
+ else
+ fun_l19_n833(x)
+ end
+end
+
+def fun_l18_n743(x)
+ if (x < 1)
+ fun_l19_n774(x)
+ else
+ fun_l19_n992(x)
+ end
+end
+
+def fun_l18_n744(x)
+ if (x < 1)
+ fun_l19_n505(x)
+ else
+ fun_l19_n353(x)
+ end
+end
+
+def fun_l18_n745(x)
+ if (x < 1)
+ fun_l19_n93(x)
+ else
+ fun_l19_n476(x)
+ end
+end
+
+def fun_l18_n746(x)
+ if (x < 1)
+ fun_l19_n555(x)
+ else
+ fun_l19_n233(x)
+ end
+end
+
+def fun_l18_n747(x)
+ if (x < 1)
+ fun_l19_n639(x)
+ else
+ fun_l19_n239(x)
+ end
+end
+
+def fun_l18_n748(x)
+ if (x < 1)
+ fun_l19_n318(x)
+ else
+ fun_l19_n342(x)
+ end
+end
+
+def fun_l18_n749(x)
+ if (x < 1)
+ fun_l19_n80(x)
+ else
+ fun_l19_n252(x)
+ end
+end
+
+def fun_l18_n750(x)
+ if (x < 1)
+ fun_l19_n546(x)
+ else
+ fun_l19_n57(x)
+ end
+end
+
+def fun_l18_n751(x)
+ if (x < 1)
+ fun_l19_n620(x)
+ else
+ fun_l19_n732(x)
+ end
+end
+
+def fun_l18_n752(x)
+ if (x < 1)
+ fun_l19_n870(x)
+ else
+ fun_l19_n696(x)
+ end
+end
+
+def fun_l18_n753(x)
+ if (x < 1)
+ fun_l19_n633(x)
+ else
+ fun_l19_n547(x)
+ end
+end
+
+def fun_l18_n754(x)
+ if (x < 1)
+ fun_l19_n860(x)
+ else
+ fun_l19_n70(x)
+ end
+end
+
+def fun_l18_n755(x)
+ if (x < 1)
+ fun_l19_n4(x)
+ else
+ fun_l19_n560(x)
+ end
+end
+
+def fun_l18_n756(x)
+ if (x < 1)
+ fun_l19_n227(x)
+ else
+ fun_l19_n189(x)
+ end
+end
+
+def fun_l18_n757(x)
+ if (x < 1)
+ fun_l19_n560(x)
+ else
+ fun_l19_n467(x)
+ end
+end
+
+def fun_l18_n758(x)
+ if (x < 1)
+ fun_l19_n777(x)
+ else
+ fun_l19_n761(x)
+ end
+end
+
+def fun_l18_n759(x)
+ if (x < 1)
+ fun_l19_n626(x)
+ else
+ fun_l19_n391(x)
+ end
+end
+
+def fun_l18_n760(x)
+ if (x < 1)
+ fun_l19_n989(x)
+ else
+ fun_l19_n629(x)
+ end
+end
+
+def fun_l18_n761(x)
+ if (x < 1)
+ fun_l19_n509(x)
+ else
+ fun_l19_n268(x)
+ end
+end
+
+def fun_l18_n762(x)
+ if (x < 1)
+ fun_l19_n49(x)
+ else
+ fun_l19_n149(x)
+ end
+end
+
+def fun_l18_n763(x)
+ if (x < 1)
+ fun_l19_n614(x)
+ else
+ fun_l19_n490(x)
+ end
+end
+
+def fun_l18_n764(x)
+ if (x < 1)
+ fun_l19_n7(x)
+ else
+ fun_l19_n686(x)
+ end
+end
+
+def fun_l18_n765(x)
+ if (x < 1)
+ fun_l19_n93(x)
+ else
+ fun_l19_n334(x)
+ end
+end
+
+def fun_l18_n766(x)
+ if (x < 1)
+ fun_l19_n30(x)
+ else
+ fun_l19_n396(x)
+ end
+end
+
+def fun_l18_n767(x)
+ if (x < 1)
+ fun_l19_n437(x)
+ else
+ fun_l19_n614(x)
+ end
+end
+
+def fun_l18_n768(x)
+ if (x < 1)
+ fun_l19_n168(x)
+ else
+ fun_l19_n915(x)
+ end
+end
+
+def fun_l18_n769(x)
+ if (x < 1)
+ fun_l19_n465(x)
+ else
+ fun_l19_n816(x)
+ end
+end
+
+def fun_l18_n770(x)
+ if (x < 1)
+ fun_l19_n692(x)
+ else
+ fun_l19_n772(x)
+ end
+end
+
+def fun_l18_n771(x)
+ if (x < 1)
+ fun_l19_n196(x)
+ else
+ fun_l19_n812(x)
+ end
+end
+
+def fun_l18_n772(x)
+ if (x < 1)
+ fun_l19_n785(x)
+ else
+ fun_l19_n592(x)
+ end
+end
+
+def fun_l18_n773(x)
+ if (x < 1)
+ fun_l19_n649(x)
+ else
+ fun_l19_n50(x)
+ end
+end
+
+def fun_l18_n774(x)
+ if (x < 1)
+ fun_l19_n102(x)
+ else
+ fun_l19_n843(x)
+ end
+end
+
+def fun_l18_n775(x)
+ if (x < 1)
+ fun_l19_n856(x)
+ else
+ fun_l19_n805(x)
+ end
+end
+
+def fun_l18_n776(x)
+ if (x < 1)
+ fun_l19_n449(x)
+ else
+ fun_l19_n425(x)
+ end
+end
+
+def fun_l18_n777(x)
+ if (x < 1)
+ fun_l19_n855(x)
+ else
+ fun_l19_n345(x)
+ end
+end
+
+def fun_l18_n778(x)
+ if (x < 1)
+ fun_l19_n714(x)
+ else
+ fun_l19_n499(x)
+ end
+end
+
+def fun_l18_n779(x)
+ if (x < 1)
+ fun_l19_n131(x)
+ else
+ fun_l19_n396(x)
+ end
+end
+
+def fun_l18_n780(x)
+ if (x < 1)
+ fun_l19_n709(x)
+ else
+ fun_l19_n851(x)
+ end
+end
+
+def fun_l18_n781(x)
+ if (x < 1)
+ fun_l19_n104(x)
+ else
+ fun_l19_n569(x)
+ end
+end
+
+def fun_l18_n782(x)
+ if (x < 1)
+ fun_l19_n121(x)
+ else
+ fun_l19_n690(x)
+ end
+end
+
+def fun_l18_n783(x)
+ if (x < 1)
+ fun_l19_n72(x)
+ else
+ fun_l19_n522(x)
+ end
+end
+
+def fun_l18_n784(x)
+ if (x < 1)
+ fun_l19_n212(x)
+ else
+ fun_l19_n199(x)
+ end
+end
+
+def fun_l18_n785(x)
+ if (x < 1)
+ fun_l19_n168(x)
+ else
+ fun_l19_n948(x)
+ end
+end
+
+def fun_l18_n786(x)
+ if (x < 1)
+ fun_l19_n288(x)
+ else
+ fun_l19_n631(x)
+ end
+end
+
+def fun_l18_n787(x)
+ if (x < 1)
+ fun_l19_n713(x)
+ else
+ fun_l19_n232(x)
+ end
+end
+
+def fun_l18_n788(x)
+ if (x < 1)
+ fun_l19_n6(x)
+ else
+ fun_l19_n725(x)
+ end
+end
+
+def fun_l18_n789(x)
+ if (x < 1)
+ fun_l19_n893(x)
+ else
+ fun_l19_n677(x)
+ end
+end
+
+def fun_l18_n790(x)
+ if (x < 1)
+ fun_l19_n734(x)
+ else
+ fun_l19_n589(x)
+ end
+end
+
+def fun_l18_n791(x)
+ if (x < 1)
+ fun_l19_n369(x)
+ else
+ fun_l19_n710(x)
+ end
+end
+
+def fun_l18_n792(x)
+ if (x < 1)
+ fun_l19_n373(x)
+ else
+ fun_l19_n226(x)
+ end
+end
+
+def fun_l18_n793(x)
+ if (x < 1)
+ fun_l19_n651(x)
+ else
+ fun_l19_n292(x)
+ end
+end
+
+def fun_l18_n794(x)
+ if (x < 1)
+ fun_l19_n625(x)
+ else
+ fun_l19_n494(x)
+ end
+end
+
+def fun_l18_n795(x)
+ if (x < 1)
+ fun_l19_n463(x)
+ else
+ fun_l19_n113(x)
+ end
+end
+
+def fun_l18_n796(x)
+ if (x < 1)
+ fun_l19_n857(x)
+ else
+ fun_l19_n561(x)
+ end
+end
+
+def fun_l18_n797(x)
+ if (x < 1)
+ fun_l19_n845(x)
+ else
+ fun_l19_n598(x)
+ end
+end
+
+def fun_l18_n798(x)
+ if (x < 1)
+ fun_l19_n606(x)
+ else
+ fun_l19_n822(x)
+ end
+end
+
+def fun_l18_n799(x)
+ if (x < 1)
+ fun_l19_n649(x)
+ else
+ fun_l19_n610(x)
+ end
+end
+
+def fun_l18_n800(x)
+ if (x < 1)
+ fun_l19_n619(x)
+ else
+ fun_l19_n753(x)
+ end
+end
+
+def fun_l18_n801(x)
+ if (x < 1)
+ fun_l19_n947(x)
+ else
+ fun_l19_n665(x)
+ end
+end
+
+def fun_l18_n802(x)
+ if (x < 1)
+ fun_l19_n869(x)
+ else
+ fun_l19_n928(x)
+ end
+end
+
+def fun_l18_n803(x)
+ if (x < 1)
+ fun_l19_n568(x)
+ else
+ fun_l19_n624(x)
+ end
+end
+
+def fun_l18_n804(x)
+ if (x < 1)
+ fun_l19_n724(x)
+ else
+ fun_l19_n104(x)
+ end
+end
+
+def fun_l18_n805(x)
+ if (x < 1)
+ fun_l19_n687(x)
+ else
+ fun_l19_n906(x)
+ end
+end
+
+def fun_l18_n806(x)
+ if (x < 1)
+ fun_l19_n387(x)
+ else
+ fun_l19_n317(x)
+ end
+end
+
+def fun_l18_n807(x)
+ if (x < 1)
+ fun_l19_n433(x)
+ else
+ fun_l19_n211(x)
+ end
+end
+
+def fun_l18_n808(x)
+ if (x < 1)
+ fun_l19_n574(x)
+ else
+ fun_l19_n848(x)
+ end
+end
+
+def fun_l18_n809(x)
+ if (x < 1)
+ fun_l19_n929(x)
+ else
+ fun_l19_n751(x)
+ end
+end
+
+def fun_l18_n810(x)
+ if (x < 1)
+ fun_l19_n24(x)
+ else
+ fun_l19_n97(x)
+ end
+end
+
+def fun_l18_n811(x)
+ if (x < 1)
+ fun_l19_n503(x)
+ else
+ fun_l19_n173(x)
+ end
+end
+
+def fun_l18_n812(x)
+ if (x < 1)
+ fun_l19_n431(x)
+ else
+ fun_l19_n553(x)
+ end
+end
+
+def fun_l18_n813(x)
+ if (x < 1)
+ fun_l19_n215(x)
+ else
+ fun_l19_n920(x)
+ end
+end
+
+def fun_l18_n814(x)
+ if (x < 1)
+ fun_l19_n952(x)
+ else
+ fun_l19_n484(x)
+ end
+end
+
+def fun_l18_n815(x)
+ if (x < 1)
+ fun_l19_n253(x)
+ else
+ fun_l19_n20(x)
+ end
+end
+
+def fun_l18_n816(x)
+ if (x < 1)
+ fun_l19_n853(x)
+ else
+ fun_l19_n902(x)
+ end
+end
+
+def fun_l18_n817(x)
+ if (x < 1)
+ fun_l19_n606(x)
+ else
+ fun_l19_n732(x)
+ end
+end
+
+def fun_l18_n818(x)
+ if (x < 1)
+ fun_l19_n227(x)
+ else
+ fun_l19_n908(x)
+ end
+end
+
+def fun_l18_n819(x)
+ if (x < 1)
+ fun_l19_n423(x)
+ else
+ fun_l19_n511(x)
+ end
+end
+
+def fun_l18_n820(x)
+ if (x < 1)
+ fun_l19_n25(x)
+ else
+ fun_l19_n939(x)
+ end
+end
+
+def fun_l18_n821(x)
+ if (x < 1)
+ fun_l19_n709(x)
+ else
+ fun_l19_n776(x)
+ end
+end
+
+def fun_l18_n822(x)
+ if (x < 1)
+ fun_l19_n539(x)
+ else
+ fun_l19_n41(x)
+ end
+end
+
+def fun_l18_n823(x)
+ if (x < 1)
+ fun_l19_n764(x)
+ else
+ fun_l19_n240(x)
+ end
+end
+
+def fun_l18_n824(x)
+ if (x < 1)
+ fun_l19_n508(x)
+ else
+ fun_l19_n505(x)
+ end
+end
+
+def fun_l18_n825(x)
+ if (x < 1)
+ fun_l19_n788(x)
+ else
+ fun_l19_n245(x)
+ end
+end
+
+def fun_l18_n826(x)
+ if (x < 1)
+ fun_l19_n315(x)
+ else
+ fun_l19_n391(x)
+ end
+end
+
+def fun_l18_n827(x)
+ if (x < 1)
+ fun_l19_n210(x)
+ else
+ fun_l19_n17(x)
+ end
+end
+
+def fun_l18_n828(x)
+ if (x < 1)
+ fun_l19_n726(x)
+ else
+ fun_l19_n57(x)
+ end
+end
+
+def fun_l18_n829(x)
+ if (x < 1)
+ fun_l19_n228(x)
+ else
+ fun_l19_n44(x)
+ end
+end
+
+def fun_l18_n830(x)
+ if (x < 1)
+ fun_l19_n5(x)
+ else
+ fun_l19_n110(x)
+ end
+end
+
+def fun_l18_n831(x)
+ if (x < 1)
+ fun_l19_n409(x)
+ else
+ fun_l19_n874(x)
+ end
+end
+
+def fun_l18_n832(x)
+ if (x < 1)
+ fun_l19_n710(x)
+ else
+ fun_l19_n960(x)
+ end
+end
+
+def fun_l18_n833(x)
+ if (x < 1)
+ fun_l19_n92(x)
+ else
+ fun_l19_n869(x)
+ end
+end
+
+def fun_l18_n834(x)
+ if (x < 1)
+ fun_l19_n420(x)
+ else
+ fun_l19_n616(x)
+ end
+end
+
+def fun_l18_n835(x)
+ if (x < 1)
+ fun_l19_n705(x)
+ else
+ fun_l19_n727(x)
+ end
+end
+
+def fun_l18_n836(x)
+ if (x < 1)
+ fun_l19_n78(x)
+ else
+ fun_l19_n211(x)
+ end
+end
+
+def fun_l18_n837(x)
+ if (x < 1)
+ fun_l19_n214(x)
+ else
+ fun_l19_n504(x)
+ end
+end
+
+def fun_l18_n838(x)
+ if (x < 1)
+ fun_l19_n320(x)
+ else
+ fun_l19_n303(x)
+ end
+end
+
+def fun_l18_n839(x)
+ if (x < 1)
+ fun_l19_n168(x)
+ else
+ fun_l19_n677(x)
+ end
+end
+
+def fun_l18_n840(x)
+ if (x < 1)
+ fun_l19_n523(x)
+ else
+ fun_l19_n183(x)
+ end
+end
+
+def fun_l18_n841(x)
+ if (x < 1)
+ fun_l19_n757(x)
+ else
+ fun_l19_n554(x)
+ end
+end
+
+def fun_l18_n842(x)
+ if (x < 1)
+ fun_l19_n309(x)
+ else
+ fun_l19_n70(x)
+ end
+end
+
+def fun_l18_n843(x)
+ if (x < 1)
+ fun_l19_n316(x)
+ else
+ fun_l19_n758(x)
+ end
+end
+
+def fun_l18_n844(x)
+ if (x < 1)
+ fun_l19_n459(x)
+ else
+ fun_l19_n28(x)
+ end
+end
+
+def fun_l18_n845(x)
+ if (x < 1)
+ fun_l19_n458(x)
+ else
+ fun_l19_n597(x)
+ end
+end
+
+def fun_l18_n846(x)
+ if (x < 1)
+ fun_l19_n662(x)
+ else
+ fun_l19_n480(x)
+ end
+end
+
+def fun_l18_n847(x)
+ if (x < 1)
+ fun_l19_n967(x)
+ else
+ fun_l19_n764(x)
+ end
+end
+
+def fun_l18_n848(x)
+ if (x < 1)
+ fun_l19_n248(x)
+ else
+ fun_l19_n459(x)
+ end
+end
+
+def fun_l18_n849(x)
+ if (x < 1)
+ fun_l19_n306(x)
+ else
+ fun_l19_n892(x)
+ end
+end
+
+def fun_l18_n850(x)
+ if (x < 1)
+ fun_l19_n541(x)
+ else
+ fun_l19_n745(x)
+ end
+end
+
+def fun_l18_n851(x)
+ if (x < 1)
+ fun_l19_n974(x)
+ else
+ fun_l19_n593(x)
+ end
+end
+
+def fun_l18_n852(x)
+ if (x < 1)
+ fun_l19_n564(x)
+ else
+ fun_l19_n598(x)
+ end
+end
+
+def fun_l18_n853(x)
+ if (x < 1)
+ fun_l19_n447(x)
+ else
+ fun_l19_n207(x)
+ end
+end
+
+def fun_l18_n854(x)
+ if (x < 1)
+ fun_l19_n261(x)
+ else
+ fun_l19_n35(x)
+ end
+end
+
+def fun_l18_n855(x)
+ if (x < 1)
+ fun_l19_n597(x)
+ else
+ fun_l19_n898(x)
+ end
+end
+
+def fun_l18_n856(x)
+ if (x < 1)
+ fun_l19_n97(x)
+ else
+ fun_l19_n109(x)
+ end
+end
+
+def fun_l18_n857(x)
+ if (x < 1)
+ fun_l19_n487(x)
+ else
+ fun_l19_n423(x)
+ end
+end
+
+def fun_l18_n858(x)
+ if (x < 1)
+ fun_l19_n804(x)
+ else
+ fun_l19_n250(x)
+ end
+end
+
+def fun_l18_n859(x)
+ if (x < 1)
+ fun_l19_n935(x)
+ else
+ fun_l19_n952(x)
+ end
+end
+
+def fun_l18_n860(x)
+ if (x < 1)
+ fun_l19_n149(x)
+ else
+ fun_l19_n586(x)
+ end
+end
+
+def fun_l18_n861(x)
+ if (x < 1)
+ fun_l19_n750(x)
+ else
+ fun_l19_n962(x)
+ end
+end
+
+def fun_l18_n862(x)
+ if (x < 1)
+ fun_l19_n396(x)
+ else
+ fun_l19_n324(x)
+ end
+end
+
+def fun_l18_n863(x)
+ if (x < 1)
+ fun_l19_n231(x)
+ else
+ fun_l19_n897(x)
+ end
+end
+
+def fun_l18_n864(x)
+ if (x < 1)
+ fun_l19_n239(x)
+ else
+ fun_l19_n118(x)
+ end
+end
+
+def fun_l18_n865(x)
+ if (x < 1)
+ fun_l19_n221(x)
+ else
+ fun_l19_n771(x)
+ end
+end
+
+def fun_l18_n866(x)
+ if (x < 1)
+ fun_l19_n258(x)
+ else
+ fun_l19_n868(x)
+ end
+end
+
+def fun_l18_n867(x)
+ if (x < 1)
+ fun_l19_n629(x)
+ else
+ fun_l19_n491(x)
+ end
+end
+
+def fun_l18_n868(x)
+ if (x < 1)
+ fun_l19_n685(x)
+ else
+ fun_l19_n532(x)
+ end
+end
+
+def fun_l18_n869(x)
+ if (x < 1)
+ fun_l19_n45(x)
+ else
+ fun_l19_n769(x)
+ end
+end
+
+def fun_l18_n870(x)
+ if (x < 1)
+ fun_l19_n249(x)
+ else
+ fun_l19_n677(x)
+ end
+end
+
+def fun_l18_n871(x)
+ if (x < 1)
+ fun_l19_n685(x)
+ else
+ fun_l19_n953(x)
+ end
+end
+
+def fun_l18_n872(x)
+ if (x < 1)
+ fun_l19_n270(x)
+ else
+ fun_l19_n208(x)
+ end
+end
+
+def fun_l18_n873(x)
+ if (x < 1)
+ fun_l19_n195(x)
+ else
+ fun_l19_n811(x)
+ end
+end
+
+def fun_l18_n874(x)
+ if (x < 1)
+ fun_l19_n700(x)
+ else
+ fun_l19_n331(x)
+ end
+end
+
+def fun_l18_n875(x)
+ if (x < 1)
+ fun_l19_n209(x)
+ else
+ fun_l19_n304(x)
+ end
+end
+
+def fun_l18_n876(x)
+ if (x < 1)
+ fun_l19_n897(x)
+ else
+ fun_l19_n98(x)
+ end
+end
+
+def fun_l18_n877(x)
+ if (x < 1)
+ fun_l19_n400(x)
+ else
+ fun_l19_n325(x)
+ end
+end
+
+def fun_l18_n878(x)
+ if (x < 1)
+ fun_l19_n312(x)
+ else
+ fun_l19_n872(x)
+ end
+end
+
+def fun_l18_n879(x)
+ if (x < 1)
+ fun_l19_n669(x)
+ else
+ fun_l19_n729(x)
+ end
+end
+
+def fun_l18_n880(x)
+ if (x < 1)
+ fun_l19_n644(x)
+ else
+ fun_l19_n243(x)
+ end
+end
+
+def fun_l18_n881(x)
+ if (x < 1)
+ fun_l19_n440(x)
+ else
+ fun_l19_n495(x)
+ end
+end
+
+def fun_l18_n882(x)
+ if (x < 1)
+ fun_l19_n694(x)
+ else
+ fun_l19_n189(x)
+ end
+end
+
+def fun_l18_n883(x)
+ if (x < 1)
+ fun_l19_n610(x)
+ else
+ fun_l19_n802(x)
+ end
+end
+
+def fun_l18_n884(x)
+ if (x < 1)
+ fun_l19_n69(x)
+ else
+ fun_l19_n129(x)
+ end
+end
+
+def fun_l18_n885(x)
+ if (x < 1)
+ fun_l19_n837(x)
+ else
+ fun_l19_n521(x)
+ end
+end
+
+def fun_l18_n886(x)
+ if (x < 1)
+ fun_l19_n204(x)
+ else
+ fun_l19_n284(x)
+ end
+end
+
+def fun_l18_n887(x)
+ if (x < 1)
+ fun_l19_n2(x)
+ else
+ fun_l19_n378(x)
+ end
+end
+
+def fun_l18_n888(x)
+ if (x < 1)
+ fun_l19_n410(x)
+ else
+ fun_l19_n871(x)
+ end
+end
+
+def fun_l18_n889(x)
+ if (x < 1)
+ fun_l19_n976(x)
+ else
+ fun_l19_n581(x)
+ end
+end
+
+def fun_l18_n890(x)
+ if (x < 1)
+ fun_l19_n274(x)
+ else
+ fun_l19_n57(x)
+ end
+end
+
+def fun_l18_n891(x)
+ if (x < 1)
+ fun_l19_n983(x)
+ else
+ fun_l19_n900(x)
+ end
+end
+
+def fun_l18_n892(x)
+ if (x < 1)
+ fun_l19_n351(x)
+ else
+ fun_l19_n621(x)
+ end
+end
+
+def fun_l18_n893(x)
+ if (x < 1)
+ fun_l19_n539(x)
+ else
+ fun_l19_n847(x)
+ end
+end
+
+def fun_l18_n894(x)
+ if (x < 1)
+ fun_l19_n56(x)
+ else
+ fun_l19_n918(x)
+ end
+end
+
+def fun_l18_n895(x)
+ if (x < 1)
+ fun_l19_n906(x)
+ else
+ fun_l19_n509(x)
+ end
+end
+
+def fun_l18_n896(x)
+ if (x < 1)
+ fun_l19_n64(x)
+ else
+ fun_l19_n269(x)
+ end
+end
+
+def fun_l18_n897(x)
+ if (x < 1)
+ fun_l19_n348(x)
+ else
+ fun_l19_n983(x)
+ end
+end
+
+def fun_l18_n898(x)
+ if (x < 1)
+ fun_l19_n699(x)
+ else
+ fun_l19_n322(x)
+ end
+end
+
+def fun_l18_n899(x)
+ if (x < 1)
+ fun_l19_n754(x)
+ else
+ fun_l19_n608(x)
+ end
+end
+
+def fun_l18_n900(x)
+ if (x < 1)
+ fun_l19_n530(x)
+ else
+ fun_l19_n919(x)
+ end
+end
+
+def fun_l18_n901(x)
+ if (x < 1)
+ fun_l19_n359(x)
+ else
+ fun_l19_n739(x)
+ end
+end
+
+def fun_l18_n902(x)
+ if (x < 1)
+ fun_l19_n647(x)
+ else
+ fun_l19_n389(x)
+ end
+end
+
+def fun_l18_n903(x)
+ if (x < 1)
+ fun_l19_n908(x)
+ else
+ fun_l19_n680(x)
+ end
+end
+
+def fun_l18_n904(x)
+ if (x < 1)
+ fun_l19_n78(x)
+ else
+ fun_l19_n512(x)
+ end
+end
+
+def fun_l18_n905(x)
+ if (x < 1)
+ fun_l19_n514(x)
+ else
+ fun_l19_n250(x)
+ end
+end
+
+def fun_l18_n906(x)
+ if (x < 1)
+ fun_l19_n320(x)
+ else
+ fun_l19_n393(x)
+ end
+end
+
+def fun_l18_n907(x)
+ if (x < 1)
+ fun_l19_n666(x)
+ else
+ fun_l19_n846(x)
+ end
+end
+
+def fun_l18_n908(x)
+ if (x < 1)
+ fun_l19_n757(x)
+ else
+ fun_l19_n194(x)
+ end
+end
+
+def fun_l18_n909(x)
+ if (x < 1)
+ fun_l19_n386(x)
+ else
+ fun_l19_n965(x)
+ end
+end
+
+def fun_l18_n910(x)
+ if (x < 1)
+ fun_l19_n561(x)
+ else
+ fun_l19_n897(x)
+ end
+end
+
+def fun_l18_n911(x)
+ if (x < 1)
+ fun_l19_n281(x)
+ else
+ fun_l19_n960(x)
+ end
+end
+
+def fun_l18_n912(x)
+ if (x < 1)
+ fun_l19_n215(x)
+ else
+ fun_l19_n54(x)
+ end
+end
+
+def fun_l18_n913(x)
+ if (x < 1)
+ fun_l19_n561(x)
+ else
+ fun_l19_n353(x)
+ end
+end
+
+def fun_l18_n914(x)
+ if (x < 1)
+ fun_l19_n780(x)
+ else
+ fun_l19_n924(x)
+ end
+end
+
+def fun_l18_n915(x)
+ if (x < 1)
+ fun_l19_n663(x)
+ else
+ fun_l19_n112(x)
+ end
+end
+
+def fun_l18_n916(x)
+ if (x < 1)
+ fun_l19_n15(x)
+ else
+ fun_l19_n342(x)
+ end
+end
+
+def fun_l18_n917(x)
+ if (x < 1)
+ fun_l19_n226(x)
+ else
+ fun_l19_n337(x)
+ end
+end
+
+def fun_l18_n918(x)
+ if (x < 1)
+ fun_l19_n477(x)
+ else
+ fun_l19_n12(x)
+ end
+end
+
+def fun_l18_n919(x)
+ if (x < 1)
+ fun_l19_n495(x)
+ else
+ fun_l19_n721(x)
+ end
+end
+
+def fun_l18_n920(x)
+ if (x < 1)
+ fun_l19_n551(x)
+ else
+ fun_l19_n626(x)
+ end
+end
+
+def fun_l18_n921(x)
+ if (x < 1)
+ fun_l19_n491(x)
+ else
+ fun_l19_n442(x)
+ end
+end
+
+def fun_l18_n922(x)
+ if (x < 1)
+ fun_l19_n72(x)
+ else
+ fun_l19_n165(x)
+ end
+end
+
+def fun_l18_n923(x)
+ if (x < 1)
+ fun_l19_n475(x)
+ else
+ fun_l19_n381(x)
+ end
+end
+
+def fun_l18_n924(x)
+ if (x < 1)
+ fun_l19_n655(x)
+ else
+ fun_l19_n95(x)
+ end
+end
+
+def fun_l18_n925(x)
+ if (x < 1)
+ fun_l19_n882(x)
+ else
+ fun_l19_n888(x)
+ end
+end
+
+def fun_l18_n926(x)
+ if (x < 1)
+ fun_l19_n620(x)
+ else
+ fun_l19_n85(x)
+ end
+end
+
+def fun_l18_n927(x)
+ if (x < 1)
+ fun_l19_n13(x)
+ else
+ fun_l19_n776(x)
+ end
+end
+
+def fun_l18_n928(x)
+ if (x < 1)
+ fun_l19_n797(x)
+ else
+ fun_l19_n547(x)
+ end
+end
+
+def fun_l18_n929(x)
+ if (x < 1)
+ fun_l19_n34(x)
+ else
+ fun_l19_n753(x)
+ end
+end
+
+def fun_l18_n930(x)
+ if (x < 1)
+ fun_l19_n894(x)
+ else
+ fun_l19_n527(x)
+ end
+end
+
+def fun_l18_n931(x)
+ if (x < 1)
+ fun_l19_n951(x)
+ else
+ fun_l19_n261(x)
+ end
+end
+
+def fun_l18_n932(x)
+ if (x < 1)
+ fun_l19_n178(x)
+ else
+ fun_l19_n365(x)
+ end
+end
+
+def fun_l18_n933(x)
+ if (x < 1)
+ fun_l19_n813(x)
+ else
+ fun_l19_n404(x)
+ end
+end
+
+def fun_l18_n934(x)
+ if (x < 1)
+ fun_l19_n920(x)
+ else
+ fun_l19_n674(x)
+ end
+end
+
+def fun_l18_n935(x)
+ if (x < 1)
+ fun_l19_n155(x)
+ else
+ fun_l19_n250(x)
+ end
+end
+
+def fun_l18_n936(x)
+ if (x < 1)
+ fun_l19_n376(x)
+ else
+ fun_l19_n29(x)
+ end
+end
+
+def fun_l18_n937(x)
+ if (x < 1)
+ fun_l19_n104(x)
+ else
+ fun_l19_n802(x)
+ end
+end
+
+def fun_l18_n938(x)
+ if (x < 1)
+ fun_l19_n340(x)
+ else
+ fun_l19_n424(x)
+ end
+end
+
+def fun_l18_n939(x)
+ if (x < 1)
+ fun_l19_n590(x)
+ else
+ fun_l19_n525(x)
+ end
+end
+
+def fun_l18_n940(x)
+ if (x < 1)
+ fun_l19_n15(x)
+ else
+ fun_l19_n48(x)
+ end
+end
+
+def fun_l18_n941(x)
+ if (x < 1)
+ fun_l19_n83(x)
+ else
+ fun_l19_n975(x)
+ end
+end
+
+def fun_l18_n942(x)
+ if (x < 1)
+ fun_l19_n219(x)
+ else
+ fun_l19_n173(x)
+ end
+end
+
+def fun_l18_n943(x)
+ if (x < 1)
+ fun_l19_n457(x)
+ else
+ fun_l19_n956(x)
+ end
+end
+
+def fun_l18_n944(x)
+ if (x < 1)
+ fun_l19_n900(x)
+ else
+ fun_l19_n363(x)
+ end
+end
+
+def fun_l18_n945(x)
+ if (x < 1)
+ fun_l19_n973(x)
+ else
+ fun_l19_n279(x)
+ end
+end
+
+def fun_l18_n946(x)
+ if (x < 1)
+ fun_l19_n155(x)
+ else
+ fun_l19_n554(x)
+ end
+end
+
+def fun_l18_n947(x)
+ if (x < 1)
+ fun_l19_n744(x)
+ else
+ fun_l19_n854(x)
+ end
+end
+
+def fun_l18_n948(x)
+ if (x < 1)
+ fun_l19_n574(x)
+ else
+ fun_l19_n385(x)
+ end
+end
+
+def fun_l18_n949(x)
+ if (x < 1)
+ fun_l19_n447(x)
+ else
+ fun_l19_n93(x)
+ end
+end
+
+def fun_l18_n950(x)
+ if (x < 1)
+ fun_l19_n621(x)
+ else
+ fun_l19_n467(x)
+ end
+end
+
+def fun_l18_n951(x)
+ if (x < 1)
+ fun_l19_n409(x)
+ else
+ fun_l19_n260(x)
+ end
+end
+
+def fun_l18_n952(x)
+ if (x < 1)
+ fun_l19_n992(x)
+ else
+ fun_l19_n728(x)
+ end
+end
+
+def fun_l18_n953(x)
+ if (x < 1)
+ fun_l19_n760(x)
+ else
+ fun_l19_n724(x)
+ end
+end
+
+def fun_l18_n954(x)
+ if (x < 1)
+ fun_l19_n567(x)
+ else
+ fun_l19_n857(x)
+ end
+end
+
+def fun_l18_n955(x)
+ if (x < 1)
+ fun_l19_n225(x)
+ else
+ fun_l19_n132(x)
+ end
+end
+
+def fun_l18_n956(x)
+ if (x < 1)
+ fun_l19_n856(x)
+ else
+ fun_l19_n449(x)
+ end
+end
+
+def fun_l18_n957(x)
+ if (x < 1)
+ fun_l19_n200(x)
+ else
+ fun_l19_n216(x)
+ end
+end
+
+def fun_l18_n958(x)
+ if (x < 1)
+ fun_l19_n684(x)
+ else
+ fun_l19_n151(x)
+ end
+end
+
+def fun_l18_n959(x)
+ if (x < 1)
+ fun_l19_n989(x)
+ else
+ fun_l19_n137(x)
+ end
+end
+
+def fun_l18_n960(x)
+ if (x < 1)
+ fun_l19_n207(x)
+ else
+ fun_l19_n736(x)
+ end
+end
+
+def fun_l18_n961(x)
+ if (x < 1)
+ fun_l19_n984(x)
+ else
+ fun_l19_n840(x)
+ end
+end
+
+def fun_l18_n962(x)
+ if (x < 1)
+ fun_l19_n367(x)
+ else
+ fun_l19_n155(x)
+ end
+end
+
+def fun_l18_n963(x)
+ if (x < 1)
+ fun_l19_n202(x)
+ else
+ fun_l19_n237(x)
+ end
+end
+
+def fun_l18_n964(x)
+ if (x < 1)
+ fun_l19_n932(x)
+ else
+ fun_l19_n167(x)
+ end
+end
+
+def fun_l18_n965(x)
+ if (x < 1)
+ fun_l19_n269(x)
+ else
+ fun_l19_n105(x)
+ end
+end
+
+def fun_l18_n966(x)
+ if (x < 1)
+ fun_l19_n775(x)
+ else
+ fun_l19_n776(x)
+ end
+end
+
+def fun_l18_n967(x)
+ if (x < 1)
+ fun_l19_n636(x)
+ else
+ fun_l19_n460(x)
+ end
+end
+
+def fun_l18_n968(x)
+ if (x < 1)
+ fun_l19_n335(x)
+ else
+ fun_l19_n4(x)
+ end
+end
+
+def fun_l18_n969(x)
+ if (x < 1)
+ fun_l19_n987(x)
+ else
+ fun_l19_n935(x)
+ end
+end
+
+def fun_l18_n970(x)
+ if (x < 1)
+ fun_l19_n692(x)
+ else
+ fun_l19_n20(x)
+ end
+end
+
+def fun_l18_n971(x)
+ if (x < 1)
+ fun_l19_n805(x)
+ else
+ fun_l19_n139(x)
+ end
+end
+
+def fun_l18_n972(x)
+ if (x < 1)
+ fun_l19_n53(x)
+ else
+ fun_l19_n539(x)
+ end
+end
+
+def fun_l18_n973(x)
+ if (x < 1)
+ fun_l19_n620(x)
+ else
+ fun_l19_n680(x)
+ end
+end
+
+def fun_l18_n974(x)
+ if (x < 1)
+ fun_l19_n662(x)
+ else
+ fun_l19_n580(x)
+ end
+end
+
+def fun_l18_n975(x)
+ if (x < 1)
+ fun_l19_n401(x)
+ else
+ fun_l19_n428(x)
+ end
+end
+
+def fun_l18_n976(x)
+ if (x < 1)
+ fun_l19_n367(x)
+ else
+ fun_l19_n794(x)
+ end
+end
+
+def fun_l18_n977(x)
+ if (x < 1)
+ fun_l19_n204(x)
+ else
+ fun_l19_n258(x)
+ end
+end
+
+def fun_l18_n978(x)
+ if (x < 1)
+ fun_l19_n868(x)
+ else
+ fun_l19_n300(x)
+ end
+end
+
+def fun_l18_n979(x)
+ if (x < 1)
+ fun_l19_n245(x)
+ else
+ fun_l19_n460(x)
+ end
+end
+
+def fun_l18_n980(x)
+ if (x < 1)
+ fun_l19_n965(x)
+ else
+ fun_l19_n639(x)
+ end
+end
+
+def fun_l18_n981(x)
+ if (x < 1)
+ fun_l19_n903(x)
+ else
+ fun_l19_n139(x)
+ end
+end
+
+def fun_l18_n982(x)
+ if (x < 1)
+ fun_l19_n890(x)
+ else
+ fun_l19_n497(x)
+ end
+end
+
+def fun_l18_n983(x)
+ if (x < 1)
+ fun_l19_n723(x)
+ else
+ fun_l19_n705(x)
+ end
+end
+
+def fun_l18_n984(x)
+ if (x < 1)
+ fun_l19_n592(x)
+ else
+ fun_l19_n965(x)
+ end
+end
+
+def fun_l18_n985(x)
+ if (x < 1)
+ fun_l19_n660(x)
+ else
+ fun_l19_n985(x)
+ end
+end
+
+def fun_l18_n986(x)
+ if (x < 1)
+ fun_l19_n230(x)
+ else
+ fun_l19_n447(x)
+ end
+end
+
+def fun_l18_n987(x)
+ if (x < 1)
+ fun_l19_n875(x)
+ else
+ fun_l19_n86(x)
+ end
+end
+
+def fun_l18_n988(x)
+ if (x < 1)
+ fun_l19_n864(x)
+ else
+ fun_l19_n460(x)
+ end
+end
+
+def fun_l18_n989(x)
+ if (x < 1)
+ fun_l19_n834(x)
+ else
+ fun_l19_n628(x)
+ end
+end
+
+def fun_l18_n990(x)
+ if (x < 1)
+ fun_l19_n578(x)
+ else
+ fun_l19_n160(x)
+ end
+end
+
+def fun_l18_n991(x)
+ if (x < 1)
+ fun_l19_n58(x)
+ else
+ fun_l19_n839(x)
+ end
+end
+
+def fun_l18_n992(x)
+ if (x < 1)
+ fun_l19_n282(x)
+ else
+ fun_l19_n864(x)
+ end
+end
+
+def fun_l18_n993(x)
+ if (x < 1)
+ fun_l19_n957(x)
+ else
+ fun_l19_n280(x)
+ end
+end
+
+def fun_l18_n994(x)
+ if (x < 1)
+ fun_l19_n184(x)
+ else
+ fun_l19_n741(x)
+ end
+end
+
+def fun_l18_n995(x)
+ if (x < 1)
+ fun_l19_n458(x)
+ else
+ fun_l19_n802(x)
+ end
+end
+
+def fun_l18_n996(x)
+ if (x < 1)
+ fun_l19_n260(x)
+ else
+ fun_l19_n840(x)
+ end
+end
+
+def fun_l18_n997(x)
+ if (x < 1)
+ fun_l19_n500(x)
+ else
+ fun_l19_n142(x)
+ end
+end
+
+def fun_l18_n998(x)
+ if (x < 1)
+ fun_l19_n712(x)
+ else
+ fun_l19_n736(x)
+ end
+end
+
+def fun_l18_n999(x)
+ if (x < 1)
+ fun_l19_n366(x)
+ else
+ fun_l19_n726(x)
+ end
+end
+
+def fun_l19_n0(x)
+ if (x < 1)
+ fun_l20_n238(x)
+ else
+ fun_l20_n685(x)
+ end
+end
+
+def fun_l19_n1(x)
+ if (x < 1)
+ fun_l20_n892(x)
+ else
+ fun_l20_n786(x)
+ end
+end
+
+def fun_l19_n2(x)
+ if (x < 1)
+ fun_l20_n99(x)
+ else
+ fun_l20_n337(x)
+ end
+end
+
+def fun_l19_n3(x)
+ if (x < 1)
+ fun_l20_n40(x)
+ else
+ fun_l20_n773(x)
+ end
+end
+
+def fun_l19_n4(x)
+ if (x < 1)
+ fun_l20_n815(x)
+ else
+ fun_l20_n576(x)
+ end
+end
+
+def fun_l19_n5(x)
+ if (x < 1)
+ fun_l20_n294(x)
+ else
+ fun_l20_n362(x)
+ end
+end
+
+def fun_l19_n6(x)
+ if (x < 1)
+ fun_l20_n352(x)
+ else
+ fun_l20_n263(x)
+ end
+end
+
+def fun_l19_n7(x)
+ if (x < 1)
+ fun_l20_n920(x)
+ else
+ fun_l20_n164(x)
+ end
+end
+
+def fun_l19_n8(x)
+ if (x < 1)
+ fun_l20_n313(x)
+ else
+ fun_l20_n663(x)
+ end
+end
+
+def fun_l19_n9(x)
+ if (x < 1)
+ fun_l20_n261(x)
+ else
+ fun_l20_n769(x)
+ end
+end
+
+def fun_l19_n10(x)
+ if (x < 1)
+ fun_l20_n85(x)
+ else
+ fun_l20_n243(x)
+ end
+end
+
+def fun_l19_n11(x)
+ if (x < 1)
+ fun_l20_n560(x)
+ else
+ fun_l20_n969(x)
+ end
+end
+
+def fun_l19_n12(x)
+ if (x < 1)
+ fun_l20_n954(x)
+ else
+ fun_l20_n340(x)
+ end
+end
+
+def fun_l19_n13(x)
+ if (x < 1)
+ fun_l20_n548(x)
+ else
+ fun_l20_n689(x)
+ end
+end
+
+def fun_l19_n14(x)
+ if (x < 1)
+ fun_l20_n577(x)
+ else
+ fun_l20_n954(x)
+ end
+end
+
+def fun_l19_n15(x)
+ if (x < 1)
+ fun_l20_n43(x)
+ else
+ fun_l20_n3(x)
+ end
+end
+
+def fun_l19_n16(x)
+ if (x < 1)
+ fun_l20_n15(x)
+ else
+ fun_l20_n281(x)
+ end
+end
+
+def fun_l19_n17(x)
+ if (x < 1)
+ fun_l20_n439(x)
+ else
+ fun_l20_n26(x)
+ end
+end
+
+def fun_l19_n18(x)
+ if (x < 1)
+ fun_l20_n534(x)
+ else
+ fun_l20_n419(x)
+ end
+end
+
+def fun_l19_n19(x)
+ if (x < 1)
+ fun_l20_n456(x)
+ else
+ fun_l20_n959(x)
+ end
+end
+
+def fun_l19_n20(x)
+ if (x < 1)
+ fun_l20_n706(x)
+ else
+ fun_l20_n404(x)
+ end
+end
+
+def fun_l19_n21(x)
+ if (x < 1)
+ fun_l20_n559(x)
+ else
+ fun_l20_n61(x)
+ end
+end
+
+def fun_l19_n22(x)
+ if (x < 1)
+ fun_l20_n986(x)
+ else
+ fun_l20_n202(x)
+ end
+end
+
+def fun_l19_n23(x)
+ if (x < 1)
+ fun_l20_n935(x)
+ else
+ fun_l20_n804(x)
+ end
+end
+
+def fun_l19_n24(x)
+ if (x < 1)
+ fun_l20_n775(x)
+ else
+ fun_l20_n909(x)
+ end
+end
+
+def fun_l19_n25(x)
+ if (x < 1)
+ fun_l20_n28(x)
+ else
+ fun_l20_n631(x)
+ end
+end
+
+def fun_l19_n26(x)
+ if (x < 1)
+ fun_l20_n257(x)
+ else
+ fun_l20_n822(x)
+ end
+end
+
+def fun_l19_n27(x)
+ if (x < 1)
+ fun_l20_n198(x)
+ else
+ fun_l20_n1(x)
+ end
+end
+
+def fun_l19_n28(x)
+ if (x < 1)
+ fun_l20_n534(x)
+ else
+ fun_l20_n46(x)
+ end
+end
+
+def fun_l19_n29(x)
+ if (x < 1)
+ fun_l20_n880(x)
+ else
+ fun_l20_n995(x)
+ end
+end
+
+def fun_l19_n30(x)
+ if (x < 1)
+ fun_l20_n953(x)
+ else
+ fun_l20_n367(x)
+ end
+end
+
+def fun_l19_n31(x)
+ if (x < 1)
+ fun_l20_n165(x)
+ else
+ fun_l20_n404(x)
+ end
+end
+
+def fun_l19_n32(x)
+ if (x < 1)
+ fun_l20_n752(x)
+ else
+ fun_l20_n570(x)
+ end
+end
+
+def fun_l19_n33(x)
+ if (x < 1)
+ fun_l20_n973(x)
+ else
+ fun_l20_n357(x)
+ end
+end
+
+def fun_l19_n34(x)
+ if (x < 1)
+ fun_l20_n897(x)
+ else
+ fun_l20_n501(x)
+ end
+end
+
+def fun_l19_n35(x)
+ if (x < 1)
+ fun_l20_n607(x)
+ else
+ fun_l20_n679(x)
+ end
+end
+
+def fun_l19_n36(x)
+ if (x < 1)
+ fun_l20_n870(x)
+ else
+ fun_l20_n590(x)
+ end
+end
+
+def fun_l19_n37(x)
+ if (x < 1)
+ fun_l20_n620(x)
+ else
+ fun_l20_n462(x)
+ end
+end
+
+def fun_l19_n38(x)
+ if (x < 1)
+ fun_l20_n176(x)
+ else
+ fun_l20_n891(x)
+ end
+end
+
+def fun_l19_n39(x)
+ if (x < 1)
+ fun_l20_n850(x)
+ else
+ fun_l20_n730(x)
+ end
+end
+
+def fun_l19_n40(x)
+ if (x < 1)
+ fun_l20_n193(x)
+ else
+ fun_l20_n635(x)
+ end
+end
+
+def fun_l19_n41(x)
+ if (x < 1)
+ fun_l20_n443(x)
+ else
+ fun_l20_n398(x)
+ end
+end
+
+def fun_l19_n42(x)
+ if (x < 1)
+ fun_l20_n324(x)
+ else
+ fun_l20_n566(x)
+ end
+end
+
+def fun_l19_n43(x)
+ if (x < 1)
+ fun_l20_n817(x)
+ else
+ fun_l20_n791(x)
+ end
+end
+
+def fun_l19_n44(x)
+ if (x < 1)
+ fun_l20_n46(x)
+ else
+ fun_l20_n375(x)
+ end
+end
+
+def fun_l19_n45(x)
+ if (x < 1)
+ fun_l20_n504(x)
+ else
+ fun_l20_n64(x)
+ end
+end
+
+def fun_l19_n46(x)
+ if (x < 1)
+ fun_l20_n174(x)
+ else
+ fun_l20_n621(x)
+ end
+end
+
+def fun_l19_n47(x)
+ if (x < 1)
+ fun_l20_n756(x)
+ else
+ fun_l20_n857(x)
+ end
+end
+
+def fun_l19_n48(x)
+ if (x < 1)
+ fun_l20_n635(x)
+ else
+ fun_l20_n216(x)
+ end
+end
+
+def fun_l19_n49(x)
+ if (x < 1)
+ fun_l20_n806(x)
+ else
+ fun_l20_n291(x)
+ end
+end
+
+def fun_l19_n50(x)
+ if (x < 1)
+ fun_l20_n998(x)
+ else
+ fun_l20_n46(x)
+ end
+end
+
+def fun_l19_n51(x)
+ if (x < 1)
+ fun_l20_n685(x)
+ else
+ fun_l20_n968(x)
+ end
+end
+
+def fun_l19_n52(x)
+ if (x < 1)
+ fun_l20_n906(x)
+ else
+ fun_l20_n788(x)
+ end
+end
+
+def fun_l19_n53(x)
+ if (x < 1)
+ fun_l20_n814(x)
+ else
+ fun_l20_n343(x)
+ end
+end
+
+def fun_l19_n54(x)
+ if (x < 1)
+ fun_l20_n320(x)
+ else
+ fun_l20_n293(x)
+ end
+end
+
+def fun_l19_n55(x)
+ if (x < 1)
+ fun_l20_n608(x)
+ else
+ fun_l20_n958(x)
+ end
+end
+
+def fun_l19_n56(x)
+ if (x < 1)
+ fun_l20_n83(x)
+ else
+ fun_l20_n839(x)
+ end
+end
+
+def fun_l19_n57(x)
+ if (x < 1)
+ fun_l20_n618(x)
+ else
+ fun_l20_n483(x)
+ end
+end
+
+def fun_l19_n58(x)
+ if (x < 1)
+ fun_l20_n647(x)
+ else
+ fun_l20_n782(x)
+ end
+end
+
+def fun_l19_n59(x)
+ if (x < 1)
+ fun_l20_n664(x)
+ else
+ fun_l20_n3(x)
+ end
+end
+
+def fun_l19_n60(x)
+ if (x < 1)
+ fun_l20_n556(x)
+ else
+ fun_l20_n185(x)
+ end
+end
+
+def fun_l19_n61(x)
+ if (x < 1)
+ fun_l20_n657(x)
+ else
+ fun_l20_n162(x)
+ end
+end
+
+def fun_l19_n62(x)
+ if (x < 1)
+ fun_l20_n668(x)
+ else
+ fun_l20_n585(x)
+ end
+end
+
+def fun_l19_n63(x)
+ if (x < 1)
+ fun_l20_n913(x)
+ else
+ fun_l20_n855(x)
+ end
+end
+
+def fun_l19_n64(x)
+ if (x < 1)
+ fun_l20_n331(x)
+ else
+ fun_l20_n71(x)
+ end
+end
+
+def fun_l19_n65(x)
+ if (x < 1)
+ fun_l20_n321(x)
+ else
+ fun_l20_n314(x)
+ end
+end
+
+def fun_l19_n66(x)
+ if (x < 1)
+ fun_l20_n512(x)
+ else
+ fun_l20_n607(x)
+ end
+end
+
+def fun_l19_n67(x)
+ if (x < 1)
+ fun_l20_n649(x)
+ else
+ fun_l20_n733(x)
+ end
+end
+
+def fun_l19_n68(x)
+ if (x < 1)
+ fun_l20_n651(x)
+ else
+ fun_l20_n844(x)
+ end
+end
+
+def fun_l19_n69(x)
+ if (x < 1)
+ fun_l20_n510(x)
+ else
+ fun_l20_n675(x)
+ end
+end
+
+def fun_l19_n70(x)
+ if (x < 1)
+ fun_l20_n830(x)
+ else
+ fun_l20_n338(x)
+ end
+end
+
+def fun_l19_n71(x)
+ if (x < 1)
+ fun_l20_n110(x)
+ else
+ fun_l20_n806(x)
+ end
+end
+
+def fun_l19_n72(x)
+ if (x < 1)
+ fun_l20_n588(x)
+ else
+ fun_l20_n7(x)
+ end
+end
+
+def fun_l19_n73(x)
+ if (x < 1)
+ fun_l20_n495(x)
+ else
+ fun_l20_n293(x)
+ end
+end
+
+def fun_l19_n74(x)
+ if (x < 1)
+ fun_l20_n891(x)
+ else
+ fun_l20_n514(x)
+ end
+end
+
+def fun_l19_n75(x)
+ if (x < 1)
+ fun_l20_n419(x)
+ else
+ fun_l20_n934(x)
+ end
+end
+
+def fun_l19_n76(x)
+ if (x < 1)
+ fun_l20_n476(x)
+ else
+ fun_l20_n652(x)
+ end
+end
+
+def fun_l19_n77(x)
+ if (x < 1)
+ fun_l20_n927(x)
+ else
+ fun_l20_n656(x)
+ end
+end
+
+def fun_l19_n78(x)
+ if (x < 1)
+ fun_l20_n361(x)
+ else
+ fun_l20_n847(x)
+ end
+end
+
+def fun_l19_n79(x)
+ if (x < 1)
+ fun_l20_n584(x)
+ else
+ fun_l20_n24(x)
+ end
+end
+
+def fun_l19_n80(x)
+ if (x < 1)
+ fun_l20_n428(x)
+ else
+ fun_l20_n219(x)
+ end
+end
+
+def fun_l19_n81(x)
+ if (x < 1)
+ fun_l20_n922(x)
+ else
+ fun_l20_n758(x)
+ end
+end
+
+def fun_l19_n82(x)
+ if (x < 1)
+ fun_l20_n188(x)
+ else
+ fun_l20_n378(x)
+ end
+end
+
+def fun_l19_n83(x)
+ if (x < 1)
+ fun_l20_n239(x)
+ else
+ fun_l20_n690(x)
+ end
+end
+
+def fun_l19_n84(x)
+ if (x < 1)
+ fun_l20_n262(x)
+ else
+ fun_l20_n162(x)
+ end
+end
+
+def fun_l19_n85(x)
+ if (x < 1)
+ fun_l20_n117(x)
+ else
+ fun_l20_n117(x)
+ end
+end
+
+def fun_l19_n86(x)
+ if (x < 1)
+ fun_l20_n154(x)
+ else
+ fun_l20_n564(x)
+ end
+end
+
+def fun_l19_n87(x)
+ if (x < 1)
+ fun_l20_n560(x)
+ else
+ fun_l20_n591(x)
+ end
+end
+
+def fun_l19_n88(x)
+ if (x < 1)
+ fun_l20_n529(x)
+ else
+ fun_l20_n107(x)
+ end
+end
+
+def fun_l19_n89(x)
+ if (x < 1)
+ fun_l20_n609(x)
+ else
+ fun_l20_n287(x)
+ end
+end
+
+def fun_l19_n90(x)
+ if (x < 1)
+ fun_l20_n780(x)
+ else
+ fun_l20_n397(x)
+ end
+end
+
+def fun_l19_n91(x)
+ if (x < 1)
+ fun_l20_n587(x)
+ else
+ fun_l20_n416(x)
+ end
+end
+
+def fun_l19_n92(x)
+ if (x < 1)
+ fun_l20_n784(x)
+ else
+ fun_l20_n413(x)
+ end
+end
+
+def fun_l19_n93(x)
+ if (x < 1)
+ fun_l20_n83(x)
+ else
+ fun_l20_n560(x)
+ end
+end
+
+def fun_l19_n94(x)
+ if (x < 1)
+ fun_l20_n126(x)
+ else
+ fun_l20_n67(x)
+ end
+end
+
+def fun_l19_n95(x)
+ if (x < 1)
+ fun_l20_n22(x)
+ else
+ fun_l20_n865(x)
+ end
+end
+
+def fun_l19_n96(x)
+ if (x < 1)
+ fun_l20_n35(x)
+ else
+ fun_l20_n160(x)
+ end
+end
+
+def fun_l19_n97(x)
+ if (x < 1)
+ fun_l20_n701(x)
+ else
+ fun_l20_n139(x)
+ end
+end
+
+def fun_l19_n98(x)
+ if (x < 1)
+ fun_l20_n488(x)
+ else
+ fun_l20_n407(x)
+ end
+end
+
+def fun_l19_n99(x)
+ if (x < 1)
+ fun_l20_n636(x)
+ else
+ fun_l20_n135(x)
+ end
+end
+
+def fun_l19_n100(x)
+ if (x < 1)
+ fun_l20_n83(x)
+ else
+ fun_l20_n923(x)
+ end
+end
+
+def fun_l19_n101(x)
+ if (x < 1)
+ fun_l20_n232(x)
+ else
+ fun_l20_n955(x)
+ end
+end
+
+def fun_l19_n102(x)
+ if (x < 1)
+ fun_l20_n816(x)
+ else
+ fun_l20_n671(x)
+ end
+end
+
+def fun_l19_n103(x)
+ if (x < 1)
+ fun_l20_n366(x)
+ else
+ fun_l20_n646(x)
+ end
+end
+
+def fun_l19_n104(x)
+ if (x < 1)
+ fun_l20_n465(x)
+ else
+ fun_l20_n659(x)
+ end
+end
+
+def fun_l19_n105(x)
+ if (x < 1)
+ fun_l20_n488(x)
+ else
+ fun_l20_n720(x)
+ end
+end
+
+def fun_l19_n106(x)
+ if (x < 1)
+ fun_l20_n278(x)
+ else
+ fun_l20_n570(x)
+ end
+end
+
+def fun_l19_n107(x)
+ if (x < 1)
+ fun_l20_n630(x)
+ else
+ fun_l20_n280(x)
+ end
+end
+
+def fun_l19_n108(x)
+ if (x < 1)
+ fun_l20_n688(x)
+ else
+ fun_l20_n999(x)
+ end
+end
+
+def fun_l19_n109(x)
+ if (x < 1)
+ fun_l20_n175(x)
+ else
+ fun_l20_n633(x)
+ end
+end
+
+def fun_l19_n110(x)
+ if (x < 1)
+ fun_l20_n111(x)
+ else
+ fun_l20_n130(x)
+ end
+end
+
+def fun_l19_n111(x)
+ if (x < 1)
+ fun_l20_n405(x)
+ else
+ fun_l20_n148(x)
+ end
+end
+
+def fun_l19_n112(x)
+ if (x < 1)
+ fun_l20_n645(x)
+ else
+ fun_l20_n303(x)
+ end
+end
+
+def fun_l19_n113(x)
+ if (x < 1)
+ fun_l20_n685(x)
+ else
+ fun_l20_n122(x)
+ end
+end
+
+def fun_l19_n114(x)
+ if (x < 1)
+ fun_l20_n808(x)
+ else
+ fun_l20_n780(x)
+ end
+end
+
+def fun_l19_n115(x)
+ if (x < 1)
+ fun_l20_n136(x)
+ else
+ fun_l20_n749(x)
+ end
+end
+
+def fun_l19_n116(x)
+ if (x < 1)
+ fun_l20_n134(x)
+ else
+ fun_l20_n291(x)
+ end
+end
+
+def fun_l19_n117(x)
+ if (x < 1)
+ fun_l20_n288(x)
+ else
+ fun_l20_n759(x)
+ end
+end
+
+def fun_l19_n118(x)
+ if (x < 1)
+ fun_l20_n617(x)
+ else
+ fun_l20_n823(x)
+ end
+end
+
+def fun_l19_n119(x)
+ if (x < 1)
+ fun_l20_n412(x)
+ else
+ fun_l20_n548(x)
+ end
+end
+
+def fun_l19_n120(x)
+ if (x < 1)
+ fun_l20_n897(x)
+ else
+ fun_l20_n455(x)
+ end
+end
+
+def fun_l19_n121(x)
+ if (x < 1)
+ fun_l20_n105(x)
+ else
+ fun_l20_n753(x)
+ end
+end
+
+def fun_l19_n122(x)
+ if (x < 1)
+ fun_l20_n84(x)
+ else
+ fun_l20_n575(x)
+ end
+end
+
+def fun_l19_n123(x)
+ if (x < 1)
+ fun_l20_n326(x)
+ else
+ fun_l20_n858(x)
+ end
+end
+
+def fun_l19_n124(x)
+ if (x < 1)
+ fun_l20_n878(x)
+ else
+ fun_l20_n348(x)
+ end
+end
+
+def fun_l19_n125(x)
+ if (x < 1)
+ fun_l20_n285(x)
+ else
+ fun_l20_n182(x)
+ end
+end
+
+def fun_l19_n126(x)
+ if (x < 1)
+ fun_l20_n560(x)
+ else
+ fun_l20_n413(x)
+ end
+end
+
+def fun_l19_n127(x)
+ if (x < 1)
+ fun_l20_n597(x)
+ else
+ fun_l20_n748(x)
+ end
+end
+
+def fun_l19_n128(x)
+ if (x < 1)
+ fun_l20_n642(x)
+ else
+ fun_l20_n529(x)
+ end
+end
+
+def fun_l19_n129(x)
+ if (x < 1)
+ fun_l20_n842(x)
+ else
+ fun_l20_n228(x)
+ end
+end
+
+def fun_l19_n130(x)
+ if (x < 1)
+ fun_l20_n283(x)
+ else
+ fun_l20_n656(x)
+ end
+end
+
+def fun_l19_n131(x)
+ if (x < 1)
+ fun_l20_n699(x)
+ else
+ fun_l20_n135(x)
+ end
+end
+
+def fun_l19_n132(x)
+ if (x < 1)
+ fun_l20_n276(x)
+ else
+ fun_l20_n41(x)
+ end
+end
+
+def fun_l19_n133(x)
+ if (x < 1)
+ fun_l20_n734(x)
+ else
+ fun_l20_n157(x)
+ end
+end
+
+def fun_l19_n134(x)
+ if (x < 1)
+ fun_l20_n612(x)
+ else
+ fun_l20_n318(x)
+ end
+end
+
+def fun_l19_n135(x)
+ if (x < 1)
+ fun_l20_n345(x)
+ else
+ fun_l20_n332(x)
+ end
+end
+
+def fun_l19_n136(x)
+ if (x < 1)
+ fun_l20_n131(x)
+ else
+ fun_l20_n747(x)
+ end
+end
+
+def fun_l19_n137(x)
+ if (x < 1)
+ fun_l20_n911(x)
+ else
+ fun_l20_n84(x)
+ end
+end
+
+def fun_l19_n138(x)
+ if (x < 1)
+ fun_l20_n665(x)
+ else
+ fun_l20_n194(x)
+ end
+end
+
+def fun_l19_n139(x)
+ if (x < 1)
+ fun_l20_n301(x)
+ else
+ fun_l20_n71(x)
+ end
+end
+
+def fun_l19_n140(x)
+ if (x < 1)
+ fun_l20_n432(x)
+ else
+ fun_l20_n679(x)
+ end
+end
+
+def fun_l19_n141(x)
+ if (x < 1)
+ fun_l20_n628(x)
+ else
+ fun_l20_n268(x)
+ end
+end
+
+def fun_l19_n142(x)
+ if (x < 1)
+ fun_l20_n982(x)
+ else
+ fun_l20_n241(x)
+ end
+end
+
+def fun_l19_n143(x)
+ if (x < 1)
+ fun_l20_n35(x)
+ else
+ fun_l20_n593(x)
+ end
+end
+
+def fun_l19_n144(x)
+ if (x < 1)
+ fun_l20_n791(x)
+ else
+ fun_l20_n960(x)
+ end
+end
+
+def fun_l19_n145(x)
+ if (x < 1)
+ fun_l20_n613(x)
+ else
+ fun_l20_n366(x)
+ end
+end
+
+def fun_l19_n146(x)
+ if (x < 1)
+ fun_l20_n997(x)
+ else
+ fun_l20_n7(x)
+ end
+end
+
+def fun_l19_n147(x)
+ if (x < 1)
+ fun_l20_n206(x)
+ else
+ fun_l20_n785(x)
+ end
+end
+
+def fun_l19_n148(x)
+ if (x < 1)
+ fun_l20_n822(x)
+ else
+ fun_l20_n178(x)
+ end
+end
+
+def fun_l19_n149(x)
+ if (x < 1)
+ fun_l20_n793(x)
+ else
+ fun_l20_n860(x)
+ end
+end
+
+def fun_l19_n150(x)
+ if (x < 1)
+ fun_l20_n260(x)
+ else
+ fun_l20_n523(x)
+ end
+end
+
+def fun_l19_n151(x)
+ if (x < 1)
+ fun_l20_n848(x)
+ else
+ fun_l20_n568(x)
+ end
+end
+
+def fun_l19_n152(x)
+ if (x < 1)
+ fun_l20_n466(x)
+ else
+ fun_l20_n959(x)
+ end
+end
+
+def fun_l19_n153(x)
+ if (x < 1)
+ fun_l20_n972(x)
+ else
+ fun_l20_n780(x)
+ end
+end
+
+def fun_l19_n154(x)
+ if (x < 1)
+ fun_l20_n349(x)
+ else
+ fun_l20_n490(x)
+ end
+end
+
+def fun_l19_n155(x)
+ if (x < 1)
+ fun_l20_n658(x)
+ else
+ fun_l20_n766(x)
+ end
+end
+
+def fun_l19_n156(x)
+ if (x < 1)
+ fun_l20_n788(x)
+ else
+ fun_l20_n961(x)
+ end
+end
+
+def fun_l19_n157(x)
+ if (x < 1)
+ fun_l20_n32(x)
+ else
+ fun_l20_n155(x)
+ end
+end
+
+def fun_l19_n158(x)
+ if (x < 1)
+ fun_l20_n820(x)
+ else
+ fun_l20_n317(x)
+ end
+end
+
+def fun_l19_n159(x)
+ if (x < 1)
+ fun_l20_n818(x)
+ else
+ fun_l20_n570(x)
+ end
+end
+
+def fun_l19_n160(x)
+ if (x < 1)
+ fun_l20_n82(x)
+ else
+ fun_l20_n331(x)
+ end
+end
+
+def fun_l19_n161(x)
+ if (x < 1)
+ fun_l20_n576(x)
+ else
+ fun_l20_n134(x)
+ end
+end
+
+def fun_l19_n162(x)
+ if (x < 1)
+ fun_l20_n287(x)
+ else
+ fun_l20_n748(x)
+ end
+end
+
+def fun_l19_n163(x)
+ if (x < 1)
+ fun_l20_n855(x)
+ else
+ fun_l20_n97(x)
+ end
+end
+
+def fun_l19_n164(x)
+ if (x < 1)
+ fun_l20_n218(x)
+ else
+ fun_l20_n195(x)
+ end
+end
+
+def fun_l19_n165(x)
+ if (x < 1)
+ fun_l20_n179(x)
+ else
+ fun_l20_n566(x)
+ end
+end
+
+def fun_l19_n166(x)
+ if (x < 1)
+ fun_l20_n833(x)
+ else
+ fun_l20_n35(x)
+ end
+end
+
+def fun_l19_n167(x)
+ if (x < 1)
+ fun_l20_n595(x)
+ else
+ fun_l20_n344(x)
+ end
+end
+
+def fun_l19_n168(x)
+ if (x < 1)
+ fun_l20_n171(x)
+ else
+ fun_l20_n199(x)
+ end
+end
+
+def fun_l19_n169(x)
+ if (x < 1)
+ fun_l20_n531(x)
+ else
+ fun_l20_n385(x)
+ end
+end
+
+def fun_l19_n170(x)
+ if (x < 1)
+ fun_l20_n168(x)
+ else
+ fun_l20_n911(x)
+ end
+end
+
+def fun_l19_n171(x)
+ if (x < 1)
+ fun_l20_n767(x)
+ else
+ fun_l20_n521(x)
+ end
+end
+
+def fun_l19_n172(x)
+ if (x < 1)
+ fun_l20_n769(x)
+ else
+ fun_l20_n56(x)
+ end
+end
+
+def fun_l19_n173(x)
+ if (x < 1)
+ fun_l20_n521(x)
+ else
+ fun_l20_n600(x)
+ end
+end
+
+def fun_l19_n174(x)
+ if (x < 1)
+ fun_l20_n239(x)
+ else
+ fun_l20_n22(x)
+ end
+end
+
+def fun_l19_n175(x)
+ if (x < 1)
+ fun_l20_n963(x)
+ else
+ fun_l20_n497(x)
+ end
+end
+
+def fun_l19_n176(x)
+ if (x < 1)
+ fun_l20_n989(x)
+ else
+ fun_l20_n748(x)
+ end
+end
+
+def fun_l19_n177(x)
+ if (x < 1)
+ fun_l20_n105(x)
+ else
+ fun_l20_n315(x)
+ end
+end
+
+def fun_l19_n178(x)
+ if (x < 1)
+ fun_l20_n48(x)
+ else
+ fun_l20_n550(x)
+ end
+end
+
+def fun_l19_n179(x)
+ if (x < 1)
+ fun_l20_n66(x)
+ else
+ fun_l20_n595(x)
+ end
+end
+
+def fun_l19_n180(x)
+ if (x < 1)
+ fun_l20_n692(x)
+ else
+ fun_l20_n71(x)
+ end
+end
+
+def fun_l19_n181(x)
+ if (x < 1)
+ fun_l20_n639(x)
+ else
+ fun_l20_n869(x)
+ end
+end
+
+def fun_l19_n182(x)
+ if (x < 1)
+ fun_l20_n925(x)
+ else
+ fun_l20_n868(x)
+ end
+end
+
+def fun_l19_n183(x)
+ if (x < 1)
+ fun_l20_n890(x)
+ else
+ fun_l20_n924(x)
+ end
+end
+
+def fun_l19_n184(x)
+ if (x < 1)
+ fun_l20_n579(x)
+ else
+ fun_l20_n349(x)
+ end
+end
+
+def fun_l19_n185(x)
+ if (x < 1)
+ fun_l20_n313(x)
+ else
+ fun_l20_n16(x)
+ end
+end
+
+def fun_l19_n186(x)
+ if (x < 1)
+ fun_l20_n947(x)
+ else
+ fun_l20_n644(x)
+ end
+end
+
+def fun_l19_n187(x)
+ if (x < 1)
+ fun_l20_n424(x)
+ else
+ fun_l20_n815(x)
+ end
+end
+
+def fun_l19_n188(x)
+ if (x < 1)
+ fun_l20_n177(x)
+ else
+ fun_l20_n230(x)
+ end
+end
+
+def fun_l19_n189(x)
+ if (x < 1)
+ fun_l20_n556(x)
+ else
+ fun_l20_n47(x)
+ end
+end
+
+def fun_l19_n190(x)
+ if (x < 1)
+ fun_l20_n804(x)
+ else
+ fun_l20_n516(x)
+ end
+end
+
+def fun_l19_n191(x)
+ if (x < 1)
+ fun_l20_n411(x)
+ else
+ fun_l20_n779(x)
+ end
+end
+
+def fun_l19_n192(x)
+ if (x < 1)
+ fun_l20_n124(x)
+ else
+ fun_l20_n827(x)
+ end
+end
+
+def fun_l19_n193(x)
+ if (x < 1)
+ fun_l20_n514(x)
+ else
+ fun_l20_n516(x)
+ end
+end
+
+def fun_l19_n194(x)
+ if (x < 1)
+ fun_l20_n134(x)
+ else
+ fun_l20_n356(x)
+ end
+end
+
+def fun_l19_n195(x)
+ if (x < 1)
+ fun_l20_n499(x)
+ else
+ fun_l20_n809(x)
+ end
+end
+
+def fun_l19_n196(x)
+ if (x < 1)
+ fun_l20_n958(x)
+ else
+ fun_l20_n675(x)
+ end
+end
+
+def fun_l19_n197(x)
+ if (x < 1)
+ fun_l20_n847(x)
+ else
+ fun_l20_n418(x)
+ end
+end
+
+def fun_l19_n198(x)
+ if (x < 1)
+ fun_l20_n294(x)
+ else
+ fun_l20_n510(x)
+ end
+end
+
+def fun_l19_n199(x)
+ if (x < 1)
+ fun_l20_n365(x)
+ else
+ fun_l20_n952(x)
+ end
+end
+
+def fun_l19_n200(x)
+ if (x < 1)
+ fun_l20_n961(x)
+ else
+ fun_l20_n747(x)
+ end
+end
+
+def fun_l19_n201(x)
+ if (x < 1)
+ fun_l20_n731(x)
+ else
+ fun_l20_n618(x)
+ end
+end
+
+def fun_l19_n202(x)
+ if (x < 1)
+ fun_l20_n825(x)
+ else
+ fun_l20_n907(x)
+ end
+end
+
+def fun_l19_n203(x)
+ if (x < 1)
+ fun_l20_n865(x)
+ else
+ fun_l20_n886(x)
+ end
+end
+
+def fun_l19_n204(x)
+ if (x < 1)
+ fun_l20_n732(x)
+ else
+ fun_l20_n823(x)
+ end
+end
+
+def fun_l19_n205(x)
+ if (x < 1)
+ fun_l20_n305(x)
+ else
+ fun_l20_n596(x)
+ end
+end
+
+def fun_l19_n206(x)
+ if (x < 1)
+ fun_l20_n245(x)
+ else
+ fun_l20_n370(x)
+ end
+end
+
+def fun_l19_n207(x)
+ if (x < 1)
+ fun_l20_n728(x)
+ else
+ fun_l20_n917(x)
+ end
+end
+
+def fun_l19_n208(x)
+ if (x < 1)
+ fun_l20_n448(x)
+ else
+ fun_l20_n904(x)
+ end
+end
+
+def fun_l19_n209(x)
+ if (x < 1)
+ fun_l20_n90(x)
+ else
+ fun_l20_n181(x)
+ end
+end
+
+def fun_l19_n210(x)
+ if (x < 1)
+ fun_l20_n569(x)
+ else
+ fun_l20_n268(x)
+ end
+end
+
+def fun_l19_n211(x)
+ if (x < 1)
+ fun_l20_n772(x)
+ else
+ fun_l20_n770(x)
+ end
+end
+
+def fun_l19_n212(x)
+ if (x < 1)
+ fun_l20_n781(x)
+ else
+ fun_l20_n603(x)
+ end
+end
+
+def fun_l19_n213(x)
+ if (x < 1)
+ fun_l20_n733(x)
+ else
+ fun_l20_n904(x)
+ end
+end
+
+def fun_l19_n214(x)
+ if (x < 1)
+ fun_l20_n303(x)
+ else
+ fun_l20_n888(x)
+ end
+end
+
+def fun_l19_n215(x)
+ if (x < 1)
+ fun_l20_n280(x)
+ else
+ fun_l20_n428(x)
+ end
+end
+
+def fun_l19_n216(x)
+ if (x < 1)
+ fun_l20_n737(x)
+ else
+ fun_l20_n483(x)
+ end
+end
+
+def fun_l19_n217(x)
+ if (x < 1)
+ fun_l20_n780(x)
+ else
+ fun_l20_n240(x)
+ end
+end
+
+def fun_l19_n218(x)
+ if (x < 1)
+ fun_l20_n202(x)
+ else
+ fun_l20_n580(x)
+ end
+end
+
+def fun_l19_n219(x)
+ if (x < 1)
+ fun_l20_n837(x)
+ else
+ fun_l20_n83(x)
+ end
+end
+
+def fun_l19_n220(x)
+ if (x < 1)
+ fun_l20_n68(x)
+ else
+ fun_l20_n292(x)
+ end
+end
+
+def fun_l19_n221(x)
+ if (x < 1)
+ fun_l20_n289(x)
+ else
+ fun_l20_n655(x)
+ end
+end
+
+def fun_l19_n222(x)
+ if (x < 1)
+ fun_l20_n505(x)
+ else
+ fun_l20_n660(x)
+ end
+end
+
+def fun_l19_n223(x)
+ if (x < 1)
+ fun_l20_n534(x)
+ else
+ fun_l20_n391(x)
+ end
+end
+
+def fun_l19_n224(x)
+ if (x < 1)
+ fun_l20_n72(x)
+ else
+ fun_l20_n81(x)
+ end
+end
+
+def fun_l19_n225(x)
+ if (x < 1)
+ fun_l20_n194(x)
+ else
+ fun_l20_n437(x)
+ end
+end
+
+def fun_l19_n226(x)
+ if (x < 1)
+ fun_l20_n629(x)
+ else
+ fun_l20_n645(x)
+ end
+end
+
+def fun_l19_n227(x)
+ if (x < 1)
+ fun_l20_n912(x)
+ else
+ fun_l20_n425(x)
+ end
+end
+
+def fun_l19_n228(x)
+ if (x < 1)
+ fun_l20_n773(x)
+ else
+ fun_l20_n456(x)
+ end
+end
+
+def fun_l19_n229(x)
+ if (x < 1)
+ fun_l20_n247(x)
+ else
+ fun_l20_n275(x)
+ end
+end
+
+def fun_l19_n230(x)
+ if (x < 1)
+ fun_l20_n263(x)
+ else
+ fun_l20_n482(x)
+ end
+end
+
+def fun_l19_n231(x)
+ if (x < 1)
+ fun_l20_n999(x)
+ else
+ fun_l20_n146(x)
+ end
+end
+
+def fun_l19_n232(x)
+ if (x < 1)
+ fun_l20_n117(x)
+ else
+ fun_l20_n851(x)
+ end
+end
+
+def fun_l19_n233(x)
+ if (x < 1)
+ fun_l20_n889(x)
+ else
+ fun_l20_n441(x)
+ end
+end
+
+def fun_l19_n234(x)
+ if (x < 1)
+ fun_l20_n885(x)
+ else
+ fun_l20_n374(x)
+ end
+end
+
+def fun_l19_n235(x)
+ if (x < 1)
+ fun_l20_n703(x)
+ else
+ fun_l20_n962(x)
+ end
+end
+
+def fun_l19_n236(x)
+ if (x < 1)
+ fun_l20_n298(x)
+ else
+ fun_l20_n57(x)
+ end
+end
+
+def fun_l19_n237(x)
+ if (x < 1)
+ fun_l20_n821(x)
+ else
+ fun_l20_n120(x)
+ end
+end
+
+def fun_l19_n238(x)
+ if (x < 1)
+ fun_l20_n437(x)
+ else
+ fun_l20_n204(x)
+ end
+end
+
+def fun_l19_n239(x)
+ if (x < 1)
+ fun_l20_n558(x)
+ else
+ fun_l20_n645(x)
+ end
+end
+
+def fun_l19_n240(x)
+ if (x < 1)
+ fun_l20_n631(x)
+ else
+ fun_l20_n986(x)
+ end
+end
+
+def fun_l19_n241(x)
+ if (x < 1)
+ fun_l20_n418(x)
+ else
+ fun_l20_n738(x)
+ end
+end
+
+def fun_l19_n242(x)
+ if (x < 1)
+ fun_l20_n249(x)
+ else
+ fun_l20_n322(x)
+ end
+end
+
+def fun_l19_n243(x)
+ if (x < 1)
+ fun_l20_n484(x)
+ else
+ fun_l20_n270(x)
+ end
+end
+
+def fun_l19_n244(x)
+ if (x < 1)
+ fun_l20_n749(x)
+ else
+ fun_l20_n322(x)
+ end
+end
+
+def fun_l19_n245(x)
+ if (x < 1)
+ fun_l20_n562(x)
+ else
+ fun_l20_n353(x)
+ end
+end
+
+def fun_l19_n246(x)
+ if (x < 1)
+ fun_l20_n974(x)
+ else
+ fun_l20_n333(x)
+ end
+end
+
+def fun_l19_n247(x)
+ if (x < 1)
+ fun_l20_n929(x)
+ else
+ fun_l20_n885(x)
+ end
+end
+
+def fun_l19_n248(x)
+ if (x < 1)
+ fun_l20_n421(x)
+ else
+ fun_l20_n576(x)
+ end
+end
+
+def fun_l19_n249(x)
+ if (x < 1)
+ fun_l20_n757(x)
+ else
+ fun_l20_n618(x)
+ end
+end
+
+def fun_l19_n250(x)
+ if (x < 1)
+ fun_l20_n108(x)
+ else
+ fun_l20_n704(x)
+ end
+end
+
+def fun_l19_n251(x)
+ if (x < 1)
+ fun_l20_n882(x)
+ else
+ fun_l20_n994(x)
+ end
+end
+
+def fun_l19_n252(x)
+ if (x < 1)
+ fun_l20_n995(x)
+ else
+ fun_l20_n580(x)
+ end
+end
+
+def fun_l19_n253(x)
+ if (x < 1)
+ fun_l20_n869(x)
+ else
+ fun_l20_n302(x)
+ end
+end
+
+def fun_l19_n254(x)
+ if (x < 1)
+ fun_l20_n873(x)
+ else
+ fun_l20_n315(x)
+ end
+end
+
+def fun_l19_n255(x)
+ if (x < 1)
+ fun_l20_n266(x)
+ else
+ fun_l20_n263(x)
+ end
+end
+
+def fun_l19_n256(x)
+ if (x < 1)
+ fun_l20_n450(x)
+ else
+ fun_l20_n994(x)
+ end
+end
+
+def fun_l19_n257(x)
+ if (x < 1)
+ fun_l20_n552(x)
+ else
+ fun_l20_n407(x)
+ end
+end
+
+def fun_l19_n258(x)
+ if (x < 1)
+ fun_l20_n603(x)
+ else
+ fun_l20_n453(x)
+ end
+end
+
+def fun_l19_n259(x)
+ if (x < 1)
+ fun_l20_n933(x)
+ else
+ fun_l20_n609(x)
+ end
+end
+
+def fun_l19_n260(x)
+ if (x < 1)
+ fun_l20_n983(x)
+ else
+ fun_l20_n404(x)
+ end
+end
+
+def fun_l19_n261(x)
+ if (x < 1)
+ fun_l20_n123(x)
+ else
+ fun_l20_n159(x)
+ end
+end
+
+def fun_l19_n262(x)
+ if (x < 1)
+ fun_l20_n890(x)
+ else
+ fun_l20_n749(x)
+ end
+end
+
+def fun_l19_n263(x)
+ if (x < 1)
+ fun_l20_n758(x)
+ else
+ fun_l20_n123(x)
+ end
+end
+
+def fun_l19_n264(x)
+ if (x < 1)
+ fun_l20_n194(x)
+ else
+ fun_l20_n645(x)
+ end
+end
+
+def fun_l19_n265(x)
+ if (x < 1)
+ fun_l20_n71(x)
+ else
+ fun_l20_n750(x)
+ end
+end
+
+def fun_l19_n266(x)
+ if (x < 1)
+ fun_l20_n713(x)
+ else
+ fun_l20_n125(x)
+ end
+end
+
+def fun_l19_n267(x)
+ if (x < 1)
+ fun_l20_n286(x)
+ else
+ fun_l20_n227(x)
+ end
+end
+
+def fun_l19_n268(x)
+ if (x < 1)
+ fun_l20_n220(x)
+ else
+ fun_l20_n233(x)
+ end
+end
+
+def fun_l19_n269(x)
+ if (x < 1)
+ fun_l20_n263(x)
+ else
+ fun_l20_n306(x)
+ end
+end
+
+def fun_l19_n270(x)
+ if (x < 1)
+ fun_l20_n959(x)
+ else
+ fun_l20_n552(x)
+ end
+end
+
+def fun_l19_n271(x)
+ if (x < 1)
+ fun_l20_n154(x)
+ else
+ fun_l20_n212(x)
+ end
+end
+
+def fun_l19_n272(x)
+ if (x < 1)
+ fun_l20_n985(x)
+ else
+ fun_l20_n370(x)
+ end
+end
+
+def fun_l19_n273(x)
+ if (x < 1)
+ fun_l20_n763(x)
+ else
+ fun_l20_n897(x)
+ end
+end
+
+def fun_l19_n274(x)
+ if (x < 1)
+ fun_l20_n582(x)
+ else
+ fun_l20_n638(x)
+ end
+end
+
+def fun_l19_n275(x)
+ if (x < 1)
+ fun_l20_n509(x)
+ else
+ fun_l20_n366(x)
+ end
+end
+
+def fun_l19_n276(x)
+ if (x < 1)
+ fun_l20_n500(x)
+ else
+ fun_l20_n814(x)
+ end
+end
+
+def fun_l19_n277(x)
+ if (x < 1)
+ fun_l20_n726(x)
+ else
+ fun_l20_n934(x)
+ end
+end
+
+def fun_l19_n278(x)
+ if (x < 1)
+ fun_l20_n198(x)
+ else
+ fun_l20_n852(x)
+ end
+end
+
+def fun_l19_n279(x)
+ if (x < 1)
+ fun_l20_n43(x)
+ else
+ fun_l20_n614(x)
+ end
+end
+
+def fun_l19_n280(x)
+ if (x < 1)
+ fun_l20_n79(x)
+ else
+ fun_l20_n821(x)
+ end
+end
+
+def fun_l19_n281(x)
+ if (x < 1)
+ fun_l20_n269(x)
+ else
+ fun_l20_n697(x)
+ end
+end
+
+def fun_l19_n282(x)
+ if (x < 1)
+ fun_l20_n327(x)
+ else
+ fun_l20_n528(x)
+ end
+end
+
+def fun_l19_n283(x)
+ if (x < 1)
+ fun_l20_n77(x)
+ else
+ fun_l20_n743(x)
+ end
+end
+
+def fun_l19_n284(x)
+ if (x < 1)
+ fun_l20_n282(x)
+ else
+ fun_l20_n406(x)
+ end
+end
+
+def fun_l19_n285(x)
+ if (x < 1)
+ fun_l20_n129(x)
+ else
+ fun_l20_n855(x)
+ end
+end
+
+def fun_l19_n286(x)
+ if (x < 1)
+ fun_l20_n897(x)
+ else
+ fun_l20_n687(x)
+ end
+end
+
+def fun_l19_n287(x)
+ if (x < 1)
+ fun_l20_n166(x)
+ else
+ fun_l20_n5(x)
+ end
+end
+
+def fun_l19_n288(x)
+ if (x < 1)
+ fun_l20_n545(x)
+ else
+ fun_l20_n661(x)
+ end
+end
+
+def fun_l19_n289(x)
+ if (x < 1)
+ fun_l20_n630(x)
+ else
+ fun_l20_n820(x)
+ end
+end
+
+def fun_l19_n290(x)
+ if (x < 1)
+ fun_l20_n774(x)
+ else
+ fun_l20_n125(x)
+ end
+end
+
+def fun_l19_n291(x)
+ if (x < 1)
+ fun_l20_n110(x)
+ else
+ fun_l20_n721(x)
+ end
+end
+
+def fun_l19_n292(x)
+ if (x < 1)
+ fun_l20_n777(x)
+ else
+ fun_l20_n44(x)
+ end
+end
+
+def fun_l19_n293(x)
+ if (x < 1)
+ fun_l20_n504(x)
+ else
+ fun_l20_n478(x)
+ end
+end
+
+def fun_l19_n294(x)
+ if (x < 1)
+ fun_l20_n540(x)
+ else
+ fun_l20_n603(x)
+ end
+end
+
+def fun_l19_n295(x)
+ if (x < 1)
+ fun_l20_n576(x)
+ else
+ fun_l20_n417(x)
+ end
+end
+
+def fun_l19_n296(x)
+ if (x < 1)
+ fun_l20_n553(x)
+ else
+ fun_l20_n295(x)
+ end
+end
+
+def fun_l19_n297(x)
+ if (x < 1)
+ fun_l20_n56(x)
+ else
+ fun_l20_n990(x)
+ end
+end
+
+def fun_l19_n298(x)
+ if (x < 1)
+ fun_l20_n362(x)
+ else
+ fun_l20_n158(x)
+ end
+end
+
+def fun_l19_n299(x)
+ if (x < 1)
+ fun_l20_n788(x)
+ else
+ fun_l20_n70(x)
+ end
+end
+
+def fun_l19_n300(x)
+ if (x < 1)
+ fun_l20_n670(x)
+ else
+ fun_l20_n542(x)
+ end
+end
+
+def fun_l19_n301(x)
+ if (x < 1)
+ fun_l20_n960(x)
+ else
+ fun_l20_n827(x)
+ end
+end
+
+def fun_l19_n302(x)
+ if (x < 1)
+ fun_l20_n366(x)
+ else
+ fun_l20_n325(x)
+ end
+end
+
+def fun_l19_n303(x)
+ if (x < 1)
+ fun_l20_n252(x)
+ else
+ fun_l20_n931(x)
+ end
+end
+
+def fun_l19_n304(x)
+ if (x < 1)
+ fun_l20_n124(x)
+ else
+ fun_l20_n102(x)
+ end
+end
+
+def fun_l19_n305(x)
+ if (x < 1)
+ fun_l20_n678(x)
+ else
+ fun_l20_n299(x)
+ end
+end
+
+def fun_l19_n306(x)
+ if (x < 1)
+ fun_l20_n538(x)
+ else
+ fun_l20_n371(x)
+ end
+end
+
+def fun_l19_n307(x)
+ if (x < 1)
+ fun_l20_n452(x)
+ else
+ fun_l20_n879(x)
+ end
+end
+
+def fun_l19_n308(x)
+ if (x < 1)
+ fun_l20_n410(x)
+ else
+ fun_l20_n156(x)
+ end
+end
+
+def fun_l19_n309(x)
+ if (x < 1)
+ fun_l20_n259(x)
+ else
+ fun_l20_n236(x)
+ end
+end
+
+def fun_l19_n310(x)
+ if (x < 1)
+ fun_l20_n710(x)
+ else
+ fun_l20_n23(x)
+ end
+end
+
+def fun_l19_n311(x)
+ if (x < 1)
+ fun_l20_n214(x)
+ else
+ fun_l20_n649(x)
+ end
+end
+
+def fun_l19_n312(x)
+ if (x < 1)
+ fun_l20_n603(x)
+ else
+ fun_l20_n213(x)
+ end
+end
+
+def fun_l19_n313(x)
+ if (x < 1)
+ fun_l20_n874(x)
+ else
+ fun_l20_n83(x)
+ end
+end
+
+def fun_l19_n314(x)
+ if (x < 1)
+ fun_l20_n902(x)
+ else
+ fun_l20_n303(x)
+ end
+end
+
+def fun_l19_n315(x)
+ if (x < 1)
+ fun_l20_n601(x)
+ else
+ fun_l20_n801(x)
+ end
+end
+
+def fun_l19_n316(x)
+ if (x < 1)
+ fun_l20_n76(x)
+ else
+ fun_l20_n960(x)
+ end
+end
+
+def fun_l19_n317(x)
+ if (x < 1)
+ fun_l20_n926(x)
+ else
+ fun_l20_n700(x)
+ end
+end
+
+def fun_l19_n318(x)
+ if (x < 1)
+ fun_l20_n233(x)
+ else
+ fun_l20_n278(x)
+ end
+end
+
+def fun_l19_n319(x)
+ if (x < 1)
+ fun_l20_n724(x)
+ else
+ fun_l20_n181(x)
+ end
+end
+
+def fun_l19_n320(x)
+ if (x < 1)
+ fun_l20_n367(x)
+ else
+ fun_l20_n511(x)
+ end
+end
+
+def fun_l19_n321(x)
+ if (x < 1)
+ fun_l20_n855(x)
+ else
+ fun_l20_n601(x)
+ end
+end
+
+def fun_l19_n322(x)
+ if (x < 1)
+ fun_l20_n173(x)
+ else
+ fun_l20_n151(x)
+ end
+end
+
+def fun_l19_n323(x)
+ if (x < 1)
+ fun_l20_n628(x)
+ else
+ fun_l20_n790(x)
+ end
+end
+
+def fun_l19_n324(x)
+ if (x < 1)
+ fun_l20_n423(x)
+ else
+ fun_l20_n40(x)
+ end
+end
+
+def fun_l19_n325(x)
+ if (x < 1)
+ fun_l20_n850(x)
+ else
+ fun_l20_n698(x)
+ end
+end
+
+def fun_l19_n326(x)
+ if (x < 1)
+ fun_l20_n351(x)
+ else
+ fun_l20_n562(x)
+ end
+end
+
+def fun_l19_n327(x)
+ if (x < 1)
+ fun_l20_n717(x)
+ else
+ fun_l20_n386(x)
+ end
+end
+
+def fun_l19_n328(x)
+ if (x < 1)
+ fun_l20_n461(x)
+ else
+ fun_l20_n604(x)
+ end
+end
+
+def fun_l19_n329(x)
+ if (x < 1)
+ fun_l20_n423(x)
+ else
+ fun_l20_n506(x)
+ end
+end
+
+def fun_l19_n330(x)
+ if (x < 1)
+ fun_l20_n389(x)
+ else
+ fun_l20_n365(x)
+ end
+end
+
+def fun_l19_n331(x)
+ if (x < 1)
+ fun_l20_n858(x)
+ else
+ fun_l20_n623(x)
+ end
+end
+
+def fun_l19_n332(x)
+ if (x < 1)
+ fun_l20_n34(x)
+ else
+ fun_l20_n598(x)
+ end
+end
+
+def fun_l19_n333(x)
+ if (x < 1)
+ fun_l20_n458(x)
+ else
+ fun_l20_n619(x)
+ end
+end
+
+def fun_l19_n334(x)
+ if (x < 1)
+ fun_l20_n203(x)
+ else
+ fun_l20_n391(x)
+ end
+end
+
+def fun_l19_n335(x)
+ if (x < 1)
+ fun_l20_n745(x)
+ else
+ fun_l20_n197(x)
+ end
+end
+
+def fun_l19_n336(x)
+ if (x < 1)
+ fun_l20_n388(x)
+ else
+ fun_l20_n682(x)
+ end
+end
+
+def fun_l19_n337(x)
+ if (x < 1)
+ fun_l20_n340(x)
+ else
+ fun_l20_n836(x)
+ end
+end
+
+def fun_l19_n338(x)
+ if (x < 1)
+ fun_l20_n231(x)
+ else
+ fun_l20_n508(x)
+ end
+end
+
+def fun_l19_n339(x)
+ if (x < 1)
+ fun_l20_n376(x)
+ else
+ fun_l20_n733(x)
+ end
+end
+
+def fun_l19_n340(x)
+ if (x < 1)
+ fun_l20_n162(x)
+ else
+ fun_l20_n397(x)
+ end
+end
+
+def fun_l19_n341(x)
+ if (x < 1)
+ fun_l20_n526(x)
+ else
+ fun_l20_n431(x)
+ end
+end
+
+def fun_l19_n342(x)
+ if (x < 1)
+ fun_l20_n850(x)
+ else
+ fun_l20_n226(x)
+ end
+end
+
+def fun_l19_n343(x)
+ if (x < 1)
+ fun_l20_n936(x)
+ else
+ fun_l20_n739(x)
+ end
+end
+
+def fun_l19_n344(x)
+ if (x < 1)
+ fun_l20_n639(x)
+ else
+ fun_l20_n844(x)
+ end
+end
+
+def fun_l19_n345(x)
+ if (x < 1)
+ fun_l20_n230(x)
+ else
+ fun_l20_n8(x)
+ end
+end
+
+def fun_l19_n346(x)
+ if (x < 1)
+ fun_l20_n156(x)
+ else
+ fun_l20_n417(x)
+ end
+end
+
+def fun_l19_n347(x)
+ if (x < 1)
+ fun_l20_n823(x)
+ else
+ fun_l20_n843(x)
+ end
+end
+
+def fun_l19_n348(x)
+ if (x < 1)
+ fun_l20_n798(x)
+ else
+ fun_l20_n538(x)
+ end
+end
+
+def fun_l19_n349(x)
+ if (x < 1)
+ fun_l20_n701(x)
+ else
+ fun_l20_n949(x)
+ end
+end
+
+def fun_l19_n350(x)
+ if (x < 1)
+ fun_l20_n131(x)
+ else
+ fun_l20_n727(x)
+ end
+end
+
+def fun_l19_n351(x)
+ if (x < 1)
+ fun_l20_n661(x)
+ else
+ fun_l20_n655(x)
+ end
+end
+
+def fun_l19_n352(x)
+ if (x < 1)
+ fun_l20_n824(x)
+ else
+ fun_l20_n436(x)
+ end
+end
+
+def fun_l19_n353(x)
+ if (x < 1)
+ fun_l20_n599(x)
+ else
+ fun_l20_n581(x)
+ end
+end
+
+def fun_l19_n354(x)
+ if (x < 1)
+ fun_l20_n290(x)
+ else
+ fun_l20_n632(x)
+ end
+end
+
+def fun_l19_n355(x)
+ if (x < 1)
+ fun_l20_n495(x)
+ else
+ fun_l20_n466(x)
+ end
+end
+
+def fun_l19_n356(x)
+ if (x < 1)
+ fun_l20_n70(x)
+ else
+ fun_l20_n270(x)
+ end
+end
+
+def fun_l19_n357(x)
+ if (x < 1)
+ fun_l20_n409(x)
+ else
+ fun_l20_n635(x)
+ end
+end
+
+def fun_l19_n358(x)
+ if (x < 1)
+ fun_l20_n396(x)
+ else
+ fun_l20_n41(x)
+ end
+end
+
+def fun_l19_n359(x)
+ if (x < 1)
+ fun_l20_n302(x)
+ else
+ fun_l20_n209(x)
+ end
+end
+
+def fun_l19_n360(x)
+ if (x < 1)
+ fun_l20_n844(x)
+ else
+ fun_l20_n23(x)
+ end
+end
+
+def fun_l19_n361(x)
+ if (x < 1)
+ fun_l20_n18(x)
+ else
+ fun_l20_n20(x)
+ end
+end
+
+def fun_l19_n362(x)
+ if (x < 1)
+ fun_l20_n821(x)
+ else
+ fun_l20_n806(x)
+ end
+end
+
+def fun_l19_n363(x)
+ if (x < 1)
+ fun_l20_n710(x)
+ else
+ fun_l20_n209(x)
+ end
+end
+
+def fun_l19_n364(x)
+ if (x < 1)
+ fun_l20_n979(x)
+ else
+ fun_l20_n457(x)
+ end
+end
+
+def fun_l19_n365(x)
+ if (x < 1)
+ fun_l20_n787(x)
+ else
+ fun_l20_n582(x)
+ end
+end
+
+def fun_l19_n366(x)
+ if (x < 1)
+ fun_l20_n274(x)
+ else
+ fun_l20_n710(x)
+ end
+end
+
+def fun_l19_n367(x)
+ if (x < 1)
+ fun_l20_n461(x)
+ else
+ fun_l20_n685(x)
+ end
+end
+
+def fun_l19_n368(x)
+ if (x < 1)
+ fun_l20_n953(x)
+ else
+ fun_l20_n477(x)
+ end
+end
+
+def fun_l19_n369(x)
+ if (x < 1)
+ fun_l20_n363(x)
+ else
+ fun_l20_n976(x)
+ end
+end
+
+def fun_l19_n370(x)
+ if (x < 1)
+ fun_l20_n934(x)
+ else
+ fun_l20_n742(x)
+ end
+end
+
+def fun_l19_n371(x)
+ if (x < 1)
+ fun_l20_n769(x)
+ else
+ fun_l20_n358(x)
+ end
+end
+
+def fun_l19_n372(x)
+ if (x < 1)
+ fun_l20_n53(x)
+ else
+ fun_l20_n915(x)
+ end
+end
+
+def fun_l19_n373(x)
+ if (x < 1)
+ fun_l20_n678(x)
+ else
+ fun_l20_n930(x)
+ end
+end
+
+def fun_l19_n374(x)
+ if (x < 1)
+ fun_l20_n160(x)
+ else
+ fun_l20_n937(x)
+ end
+end
+
+def fun_l19_n375(x)
+ if (x < 1)
+ fun_l20_n54(x)
+ else
+ fun_l20_n844(x)
+ end
+end
+
+def fun_l19_n376(x)
+ if (x < 1)
+ fun_l20_n911(x)
+ else
+ fun_l20_n756(x)
+ end
+end
+
+def fun_l19_n377(x)
+ if (x < 1)
+ fun_l20_n138(x)
+ else
+ fun_l20_n673(x)
+ end
+end
+
+def fun_l19_n378(x)
+ if (x < 1)
+ fun_l20_n976(x)
+ else
+ fun_l20_n720(x)
+ end
+end
+
+def fun_l19_n379(x)
+ if (x < 1)
+ fun_l20_n704(x)
+ else
+ fun_l20_n53(x)
+ end
+end
+
+def fun_l19_n380(x)
+ if (x < 1)
+ fun_l20_n762(x)
+ else
+ fun_l20_n340(x)
+ end
+end
+
+def fun_l19_n381(x)
+ if (x < 1)
+ fun_l20_n323(x)
+ else
+ fun_l20_n634(x)
+ end
+end
+
+def fun_l19_n382(x)
+ if (x < 1)
+ fun_l20_n515(x)
+ else
+ fun_l20_n562(x)
+ end
+end
+
+def fun_l19_n383(x)
+ if (x < 1)
+ fun_l20_n160(x)
+ else
+ fun_l20_n826(x)
+ end
+end
+
+def fun_l19_n384(x)
+ if (x < 1)
+ fun_l20_n779(x)
+ else
+ fun_l20_n638(x)
+ end
+end
+
+def fun_l19_n385(x)
+ if (x < 1)
+ fun_l20_n401(x)
+ else
+ fun_l20_n4(x)
+ end
+end
+
+def fun_l19_n386(x)
+ if (x < 1)
+ fun_l20_n604(x)
+ else
+ fun_l20_n820(x)
+ end
+end
+
+def fun_l19_n387(x)
+ if (x < 1)
+ fun_l20_n694(x)
+ else
+ fun_l20_n533(x)
+ end
+end
+
+def fun_l19_n388(x)
+ if (x < 1)
+ fun_l20_n687(x)
+ else
+ fun_l20_n697(x)
+ end
+end
+
+def fun_l19_n389(x)
+ if (x < 1)
+ fun_l20_n19(x)
+ else
+ fun_l20_n457(x)
+ end
+end
+
+def fun_l19_n390(x)
+ if (x < 1)
+ fun_l20_n812(x)
+ else
+ fun_l20_n152(x)
+ end
+end
+
+def fun_l19_n391(x)
+ if (x < 1)
+ fun_l20_n773(x)
+ else
+ fun_l20_n25(x)
+ end
+end
+
+def fun_l19_n392(x)
+ if (x < 1)
+ fun_l20_n24(x)
+ else
+ fun_l20_n930(x)
+ end
+end
+
+def fun_l19_n393(x)
+ if (x < 1)
+ fun_l20_n277(x)
+ else
+ fun_l20_n727(x)
+ end
+end
+
+def fun_l19_n394(x)
+ if (x < 1)
+ fun_l20_n272(x)
+ else
+ fun_l20_n298(x)
+ end
+end
+
+def fun_l19_n395(x)
+ if (x < 1)
+ fun_l20_n661(x)
+ else
+ fun_l20_n269(x)
+ end
+end
+
+def fun_l19_n396(x)
+ if (x < 1)
+ fun_l20_n624(x)
+ else
+ fun_l20_n654(x)
+ end
+end
+
+def fun_l19_n397(x)
+ if (x < 1)
+ fun_l20_n501(x)
+ else
+ fun_l20_n625(x)
+ end
+end
+
+def fun_l19_n398(x)
+ if (x < 1)
+ fun_l20_n596(x)
+ else
+ fun_l20_n160(x)
+ end
+end
+
+def fun_l19_n399(x)
+ if (x < 1)
+ fun_l20_n612(x)
+ else
+ fun_l20_n954(x)
+ end
+end
+
+def fun_l19_n400(x)
+ if (x < 1)
+ fun_l20_n911(x)
+ else
+ fun_l20_n321(x)
+ end
+end
+
+def fun_l19_n401(x)
+ if (x < 1)
+ fun_l20_n294(x)
+ else
+ fun_l20_n382(x)
+ end
+end
+
+def fun_l19_n402(x)
+ if (x < 1)
+ fun_l20_n193(x)
+ else
+ fun_l20_n732(x)
+ end
+end
+
+def fun_l19_n403(x)
+ if (x < 1)
+ fun_l20_n929(x)
+ else
+ fun_l20_n109(x)
+ end
+end
+
+def fun_l19_n404(x)
+ if (x < 1)
+ fun_l20_n647(x)
+ else
+ fun_l20_n497(x)
+ end
+end
+
+def fun_l19_n405(x)
+ if (x < 1)
+ fun_l20_n124(x)
+ else
+ fun_l20_n395(x)
+ end
+end
+
+def fun_l19_n406(x)
+ if (x < 1)
+ fun_l20_n949(x)
+ else
+ fun_l20_n195(x)
+ end
+end
+
+def fun_l19_n407(x)
+ if (x < 1)
+ fun_l20_n249(x)
+ else
+ fun_l20_n771(x)
+ end
+end
+
+def fun_l19_n408(x)
+ if (x < 1)
+ fun_l20_n728(x)
+ else
+ fun_l20_n752(x)
+ end
+end
+
+def fun_l19_n409(x)
+ if (x < 1)
+ fun_l20_n135(x)
+ else
+ fun_l20_n774(x)
+ end
+end
+
+def fun_l19_n410(x)
+ if (x < 1)
+ fun_l20_n277(x)
+ else
+ fun_l20_n499(x)
+ end
+end
+
+def fun_l19_n411(x)
+ if (x < 1)
+ fun_l20_n634(x)
+ else
+ fun_l20_n713(x)
+ end
+end
+
+def fun_l19_n412(x)
+ if (x < 1)
+ fun_l20_n118(x)
+ else
+ fun_l20_n879(x)
+ end
+end
+
+def fun_l19_n413(x)
+ if (x < 1)
+ fun_l20_n202(x)
+ else
+ fun_l20_n146(x)
+ end
+end
+
+def fun_l19_n414(x)
+ if (x < 1)
+ fun_l20_n668(x)
+ else
+ fun_l20_n22(x)
+ end
+end
+
+def fun_l19_n415(x)
+ if (x < 1)
+ fun_l20_n673(x)
+ else
+ fun_l20_n91(x)
+ end
+end
+
+def fun_l19_n416(x)
+ if (x < 1)
+ fun_l20_n399(x)
+ else
+ fun_l20_n288(x)
+ end
+end
+
+def fun_l19_n417(x)
+ if (x < 1)
+ fun_l20_n985(x)
+ else
+ fun_l20_n63(x)
+ end
+end
+
+def fun_l19_n418(x)
+ if (x < 1)
+ fun_l20_n973(x)
+ else
+ fun_l20_n37(x)
+ end
+end
+
+def fun_l19_n419(x)
+ if (x < 1)
+ fun_l20_n907(x)
+ else
+ fun_l20_n274(x)
+ end
+end
+
+def fun_l19_n420(x)
+ if (x < 1)
+ fun_l20_n0(x)
+ else
+ fun_l20_n895(x)
+ end
+end
+
+def fun_l19_n421(x)
+ if (x < 1)
+ fun_l20_n138(x)
+ else
+ fun_l20_n941(x)
+ end
+end
+
+def fun_l19_n422(x)
+ if (x < 1)
+ fun_l20_n944(x)
+ else
+ fun_l20_n393(x)
+ end
+end
+
+def fun_l19_n423(x)
+ if (x < 1)
+ fun_l20_n7(x)
+ else
+ fun_l20_n879(x)
+ end
+end
+
+def fun_l19_n424(x)
+ if (x < 1)
+ fun_l20_n855(x)
+ else
+ fun_l20_n19(x)
+ end
+end
+
+def fun_l19_n425(x)
+ if (x < 1)
+ fun_l20_n11(x)
+ else
+ fun_l20_n12(x)
+ end
+end
+
+def fun_l19_n426(x)
+ if (x < 1)
+ fun_l20_n652(x)
+ else
+ fun_l20_n501(x)
+ end
+end
+
+def fun_l19_n427(x)
+ if (x < 1)
+ fun_l20_n825(x)
+ else
+ fun_l20_n547(x)
+ end
+end
+
+def fun_l19_n428(x)
+ if (x < 1)
+ fun_l20_n485(x)
+ else
+ fun_l20_n905(x)
+ end
+end
+
+def fun_l19_n429(x)
+ if (x < 1)
+ fun_l20_n800(x)
+ else
+ fun_l20_n922(x)
+ end
+end
+
+def fun_l19_n430(x)
+ if (x < 1)
+ fun_l20_n122(x)
+ else
+ fun_l20_n79(x)
+ end
+end
+
+def fun_l19_n431(x)
+ if (x < 1)
+ fun_l20_n822(x)
+ else
+ fun_l20_n228(x)
+ end
+end
+
+def fun_l19_n432(x)
+ if (x < 1)
+ fun_l20_n616(x)
+ else
+ fun_l20_n886(x)
+ end
+end
+
+def fun_l19_n433(x)
+ if (x < 1)
+ fun_l20_n232(x)
+ else
+ fun_l20_n716(x)
+ end
+end
+
+def fun_l19_n434(x)
+ if (x < 1)
+ fun_l20_n288(x)
+ else
+ fun_l20_n497(x)
+ end
+end
+
+def fun_l19_n435(x)
+ if (x < 1)
+ fun_l20_n606(x)
+ else
+ fun_l20_n220(x)
+ end
+end
+
+def fun_l19_n436(x)
+ if (x < 1)
+ fun_l20_n185(x)
+ else
+ fun_l20_n69(x)
+ end
+end
+
+def fun_l19_n437(x)
+ if (x < 1)
+ fun_l20_n869(x)
+ else
+ fun_l20_n264(x)
+ end
+end
+
+def fun_l19_n438(x)
+ if (x < 1)
+ fun_l20_n142(x)
+ else
+ fun_l20_n766(x)
+ end
+end
+
+def fun_l19_n439(x)
+ if (x < 1)
+ fun_l20_n155(x)
+ else
+ fun_l20_n697(x)
+ end
+end
+
+def fun_l19_n440(x)
+ if (x < 1)
+ fun_l20_n486(x)
+ else
+ fun_l20_n442(x)
+ end
+end
+
+def fun_l19_n441(x)
+ if (x < 1)
+ fun_l20_n896(x)
+ else
+ fun_l20_n404(x)
+ end
+end
+
+def fun_l19_n442(x)
+ if (x < 1)
+ fun_l20_n944(x)
+ else
+ fun_l20_n906(x)
+ end
+end
+
+def fun_l19_n443(x)
+ if (x < 1)
+ fun_l20_n400(x)
+ else
+ fun_l20_n230(x)
+ end
+end
+
+def fun_l19_n444(x)
+ if (x < 1)
+ fun_l20_n646(x)
+ else
+ fun_l20_n89(x)
+ end
+end
+
+def fun_l19_n445(x)
+ if (x < 1)
+ fun_l20_n683(x)
+ else
+ fun_l20_n434(x)
+ end
+end
+
+def fun_l19_n446(x)
+ if (x < 1)
+ fun_l20_n333(x)
+ else
+ fun_l20_n164(x)
+ end
+end
+
+def fun_l19_n447(x)
+ if (x < 1)
+ fun_l20_n732(x)
+ else
+ fun_l20_n721(x)
+ end
+end
+
+def fun_l19_n448(x)
+ if (x < 1)
+ fun_l20_n948(x)
+ else
+ fun_l20_n343(x)
+ end
+end
+
+def fun_l19_n449(x)
+ if (x < 1)
+ fun_l20_n211(x)
+ else
+ fun_l20_n754(x)
+ end
+end
+
+def fun_l19_n450(x)
+ if (x < 1)
+ fun_l20_n984(x)
+ else
+ fun_l20_n952(x)
+ end
+end
+
+def fun_l19_n451(x)
+ if (x < 1)
+ fun_l20_n349(x)
+ else
+ fun_l20_n424(x)
+ end
+end
+
+def fun_l19_n452(x)
+ if (x < 1)
+ fun_l20_n721(x)
+ else
+ fun_l20_n475(x)
+ end
+end
+
+def fun_l19_n453(x)
+ if (x < 1)
+ fun_l20_n143(x)
+ else
+ fun_l20_n875(x)
+ end
+end
+
+def fun_l19_n454(x)
+ if (x < 1)
+ fun_l20_n561(x)
+ else
+ fun_l20_n255(x)
+ end
+end
+
+def fun_l19_n455(x)
+ if (x < 1)
+ fun_l20_n962(x)
+ else
+ fun_l20_n489(x)
+ end
+end
+
+def fun_l19_n456(x)
+ if (x < 1)
+ fun_l20_n95(x)
+ else
+ fun_l20_n434(x)
+ end
+end
+
+def fun_l19_n457(x)
+ if (x < 1)
+ fun_l20_n863(x)
+ else
+ fun_l20_n198(x)
+ end
+end
+
+def fun_l19_n458(x)
+ if (x < 1)
+ fun_l20_n106(x)
+ else
+ fun_l20_n786(x)
+ end
+end
+
+def fun_l19_n459(x)
+ if (x < 1)
+ fun_l20_n415(x)
+ else
+ fun_l20_n456(x)
+ end
+end
+
+def fun_l19_n460(x)
+ if (x < 1)
+ fun_l20_n706(x)
+ else
+ fun_l20_n47(x)
+ end
+end
+
+def fun_l19_n461(x)
+ if (x < 1)
+ fun_l20_n894(x)
+ else
+ fun_l20_n119(x)
+ end
+end
+
+def fun_l19_n462(x)
+ if (x < 1)
+ fun_l20_n267(x)
+ else
+ fun_l20_n662(x)
+ end
+end
+
+def fun_l19_n463(x)
+ if (x < 1)
+ fun_l20_n689(x)
+ else
+ fun_l20_n633(x)
+ end
+end
+
+def fun_l19_n464(x)
+ if (x < 1)
+ fun_l20_n94(x)
+ else
+ fun_l20_n967(x)
+ end
+end
+
+def fun_l19_n465(x)
+ if (x < 1)
+ fun_l20_n902(x)
+ else
+ fun_l20_n619(x)
+ end
+end
+
+def fun_l19_n466(x)
+ if (x < 1)
+ fun_l20_n574(x)
+ else
+ fun_l20_n204(x)
+ end
+end
+
+def fun_l19_n467(x)
+ if (x < 1)
+ fun_l20_n195(x)
+ else
+ fun_l20_n455(x)
+ end
+end
+
+def fun_l19_n468(x)
+ if (x < 1)
+ fun_l20_n173(x)
+ else
+ fun_l20_n4(x)
+ end
+end
+
+def fun_l19_n469(x)
+ if (x < 1)
+ fun_l20_n769(x)
+ else
+ fun_l20_n314(x)
+ end
+end
+
+def fun_l19_n470(x)
+ if (x < 1)
+ fun_l20_n669(x)
+ else
+ fun_l20_n648(x)
+ end
+end
+
+def fun_l19_n471(x)
+ if (x < 1)
+ fun_l20_n741(x)
+ else
+ fun_l20_n238(x)
+ end
+end
+
+def fun_l19_n472(x)
+ if (x < 1)
+ fun_l20_n370(x)
+ else
+ fun_l20_n610(x)
+ end
+end
+
+def fun_l19_n473(x)
+ if (x < 1)
+ fun_l20_n200(x)
+ else
+ fun_l20_n698(x)
+ end
+end
+
+def fun_l19_n474(x)
+ if (x < 1)
+ fun_l20_n200(x)
+ else
+ fun_l20_n951(x)
+ end
+end
+
+def fun_l19_n475(x)
+ if (x < 1)
+ fun_l20_n47(x)
+ else
+ fun_l20_n244(x)
+ end
+end
+
+def fun_l19_n476(x)
+ if (x < 1)
+ fun_l20_n314(x)
+ else
+ fun_l20_n163(x)
+ end
+end
+
+def fun_l19_n477(x)
+ if (x < 1)
+ fun_l20_n665(x)
+ else
+ fun_l20_n278(x)
+ end
+end
+
+def fun_l19_n478(x)
+ if (x < 1)
+ fun_l20_n539(x)
+ else
+ fun_l20_n149(x)
+ end
+end
+
+def fun_l19_n479(x)
+ if (x < 1)
+ fun_l20_n10(x)
+ else
+ fun_l20_n686(x)
+ end
+end
+
+def fun_l19_n480(x)
+ if (x < 1)
+ fun_l20_n684(x)
+ else
+ fun_l20_n531(x)
+ end
+end
+
+def fun_l19_n481(x)
+ if (x < 1)
+ fun_l20_n579(x)
+ else
+ fun_l20_n468(x)
+ end
+end
+
+def fun_l19_n482(x)
+ if (x < 1)
+ fun_l20_n794(x)
+ else
+ fun_l20_n116(x)
+ end
+end
+
+def fun_l19_n483(x)
+ if (x < 1)
+ fun_l20_n848(x)
+ else
+ fun_l20_n278(x)
+ end
+end
+
+def fun_l19_n484(x)
+ if (x < 1)
+ fun_l20_n965(x)
+ else
+ fun_l20_n23(x)
+ end
+end
+
+def fun_l19_n485(x)
+ if (x < 1)
+ fun_l20_n123(x)
+ else
+ fun_l20_n905(x)
+ end
+end
+
+def fun_l19_n486(x)
+ if (x < 1)
+ fun_l20_n69(x)
+ else
+ fun_l20_n4(x)
+ end
+end
+
+def fun_l19_n487(x)
+ if (x < 1)
+ fun_l20_n234(x)
+ else
+ fun_l20_n648(x)
+ end
+end
+
+def fun_l19_n488(x)
+ if (x < 1)
+ fun_l20_n31(x)
+ else
+ fun_l20_n127(x)
+ end
+end
+
+def fun_l19_n489(x)
+ if (x < 1)
+ fun_l20_n469(x)
+ else
+ fun_l20_n300(x)
+ end
+end
+
+def fun_l19_n490(x)
+ if (x < 1)
+ fun_l20_n855(x)
+ else
+ fun_l20_n722(x)
+ end
+end
+
+def fun_l19_n491(x)
+ if (x < 1)
+ fun_l20_n949(x)
+ else
+ fun_l20_n567(x)
+ end
+end
+
+def fun_l19_n492(x)
+ if (x < 1)
+ fun_l20_n465(x)
+ else
+ fun_l20_n226(x)
+ end
+end
+
+def fun_l19_n493(x)
+ if (x < 1)
+ fun_l20_n436(x)
+ else
+ fun_l20_n292(x)
+ end
+end
+
+def fun_l19_n494(x)
+ if (x < 1)
+ fun_l20_n552(x)
+ else
+ fun_l20_n81(x)
+ end
+end
+
+def fun_l19_n495(x)
+ if (x < 1)
+ fun_l20_n950(x)
+ else
+ fun_l20_n481(x)
+ end
+end
+
+def fun_l19_n496(x)
+ if (x < 1)
+ fun_l20_n382(x)
+ else
+ fun_l20_n846(x)
+ end
+end
+
+def fun_l19_n497(x)
+ if (x < 1)
+ fun_l20_n355(x)
+ else
+ fun_l20_n546(x)
+ end
+end
+
+def fun_l19_n498(x)
+ if (x < 1)
+ fun_l20_n404(x)
+ else
+ fun_l20_n655(x)
+ end
+end
+
+def fun_l19_n499(x)
+ if (x < 1)
+ fun_l20_n794(x)
+ else
+ fun_l20_n531(x)
+ end
+end
+
+def fun_l19_n500(x)
+ if (x < 1)
+ fun_l20_n555(x)
+ else
+ fun_l20_n37(x)
+ end
+end
+
+def fun_l19_n501(x)
+ if (x < 1)
+ fun_l20_n955(x)
+ else
+ fun_l20_n60(x)
+ end
+end
+
+def fun_l19_n502(x)
+ if (x < 1)
+ fun_l20_n957(x)
+ else
+ fun_l20_n482(x)
+ end
+end
+
+def fun_l19_n503(x)
+ if (x < 1)
+ fun_l20_n683(x)
+ else
+ fun_l20_n374(x)
+ end
+end
+
+def fun_l19_n504(x)
+ if (x < 1)
+ fun_l20_n839(x)
+ else
+ fun_l20_n867(x)
+ end
+end
+
+def fun_l19_n505(x)
+ if (x < 1)
+ fun_l20_n956(x)
+ else
+ fun_l20_n336(x)
+ end
+end
+
+def fun_l19_n506(x)
+ if (x < 1)
+ fun_l20_n234(x)
+ else
+ fun_l20_n50(x)
+ end
+end
+
+def fun_l19_n507(x)
+ if (x < 1)
+ fun_l20_n968(x)
+ else
+ fun_l20_n627(x)
+ end
+end
+
+def fun_l19_n508(x)
+ if (x < 1)
+ fun_l20_n680(x)
+ else
+ fun_l20_n812(x)
+ end
+end
+
+def fun_l19_n509(x)
+ if (x < 1)
+ fun_l20_n106(x)
+ else
+ fun_l20_n428(x)
+ end
+end
+
+def fun_l19_n510(x)
+ if (x < 1)
+ fun_l20_n50(x)
+ else
+ fun_l20_n101(x)
+ end
+end
+
+def fun_l19_n511(x)
+ if (x < 1)
+ fun_l20_n75(x)
+ else
+ fun_l20_n299(x)
+ end
+end
+
+def fun_l19_n512(x)
+ if (x < 1)
+ fun_l20_n612(x)
+ else
+ fun_l20_n367(x)
+ end
+end
+
+def fun_l19_n513(x)
+ if (x < 1)
+ fun_l20_n278(x)
+ else
+ fun_l20_n803(x)
+ end
+end
+
+def fun_l19_n514(x)
+ if (x < 1)
+ fun_l20_n637(x)
+ else
+ fun_l20_n837(x)
+ end
+end
+
+def fun_l19_n515(x)
+ if (x < 1)
+ fun_l20_n908(x)
+ else
+ fun_l20_n410(x)
+ end
+end
+
+def fun_l19_n516(x)
+ if (x < 1)
+ fun_l20_n349(x)
+ else
+ fun_l20_n219(x)
+ end
+end
+
+def fun_l19_n517(x)
+ if (x < 1)
+ fun_l20_n869(x)
+ else
+ fun_l20_n922(x)
+ end
+end
+
+def fun_l19_n518(x)
+ if (x < 1)
+ fun_l20_n429(x)
+ else
+ fun_l20_n332(x)
+ end
+end
+
+def fun_l19_n519(x)
+ if (x < 1)
+ fun_l20_n775(x)
+ else
+ fun_l20_n417(x)
+ end
+end
+
+def fun_l19_n520(x)
+ if (x < 1)
+ fun_l20_n551(x)
+ else
+ fun_l20_n214(x)
+ end
+end
+
+def fun_l19_n521(x)
+ if (x < 1)
+ fun_l20_n643(x)
+ else
+ fun_l20_n74(x)
+ end
+end
+
+def fun_l19_n522(x)
+ if (x < 1)
+ fun_l20_n960(x)
+ else
+ fun_l20_n189(x)
+ end
+end
+
+def fun_l19_n523(x)
+ if (x < 1)
+ fun_l20_n815(x)
+ else
+ fun_l20_n624(x)
+ end
+end
+
+def fun_l19_n524(x)
+ if (x < 1)
+ fun_l20_n247(x)
+ else
+ fun_l20_n679(x)
+ end
+end
+
+def fun_l19_n525(x)
+ if (x < 1)
+ fun_l20_n261(x)
+ else
+ fun_l20_n728(x)
+ end
+end
+
+def fun_l19_n526(x)
+ if (x < 1)
+ fun_l20_n361(x)
+ else
+ fun_l20_n295(x)
+ end
+end
+
+def fun_l19_n527(x)
+ if (x < 1)
+ fun_l20_n559(x)
+ else
+ fun_l20_n763(x)
+ end
+end
+
+def fun_l19_n528(x)
+ if (x < 1)
+ fun_l20_n291(x)
+ else
+ fun_l20_n815(x)
+ end
+end
+
+def fun_l19_n529(x)
+ if (x < 1)
+ fun_l20_n224(x)
+ else
+ fun_l20_n305(x)
+ end
+end
+
+def fun_l19_n530(x)
+ if (x < 1)
+ fun_l20_n579(x)
+ else
+ fun_l20_n370(x)
+ end
+end
+
+def fun_l19_n531(x)
+ if (x < 1)
+ fun_l20_n571(x)
+ else
+ fun_l20_n65(x)
+ end
+end
+
+def fun_l19_n532(x)
+ if (x < 1)
+ fun_l20_n815(x)
+ else
+ fun_l20_n567(x)
+ end
+end
+
+def fun_l19_n533(x)
+ if (x < 1)
+ fun_l20_n48(x)
+ else
+ fun_l20_n386(x)
+ end
+end
+
+def fun_l19_n534(x)
+ if (x < 1)
+ fun_l20_n478(x)
+ else
+ fun_l20_n679(x)
+ end
+end
+
+def fun_l19_n535(x)
+ if (x < 1)
+ fun_l20_n241(x)
+ else
+ fun_l20_n829(x)
+ end
+end
+
+def fun_l19_n536(x)
+ if (x < 1)
+ fun_l20_n267(x)
+ else
+ fun_l20_n160(x)
+ end
+end
+
+def fun_l19_n537(x)
+ if (x < 1)
+ fun_l20_n719(x)
+ else
+ fun_l20_n199(x)
+ end
+end
+
+def fun_l19_n538(x)
+ if (x < 1)
+ fun_l20_n477(x)
+ else
+ fun_l20_n662(x)
+ end
+end
+
+def fun_l19_n539(x)
+ if (x < 1)
+ fun_l20_n506(x)
+ else
+ fun_l20_n856(x)
+ end
+end
+
+def fun_l19_n540(x)
+ if (x < 1)
+ fun_l20_n717(x)
+ else
+ fun_l20_n207(x)
+ end
+end
+
+def fun_l19_n541(x)
+ if (x < 1)
+ fun_l20_n94(x)
+ else
+ fun_l20_n988(x)
+ end
+end
+
+def fun_l19_n542(x)
+ if (x < 1)
+ fun_l20_n837(x)
+ else
+ fun_l20_n334(x)
+ end
+end
+
+def fun_l19_n543(x)
+ if (x < 1)
+ fun_l20_n23(x)
+ else
+ fun_l20_n991(x)
+ end
+end
+
+def fun_l19_n544(x)
+ if (x < 1)
+ fun_l20_n558(x)
+ else
+ fun_l20_n740(x)
+ end
+end
+
+def fun_l19_n545(x)
+ if (x < 1)
+ fun_l20_n762(x)
+ else
+ fun_l20_n79(x)
+ end
+end
+
+def fun_l19_n546(x)
+ if (x < 1)
+ fun_l20_n81(x)
+ else
+ fun_l20_n331(x)
+ end
+end
+
+def fun_l19_n547(x)
+ if (x < 1)
+ fun_l20_n9(x)
+ else
+ fun_l20_n267(x)
+ end
+end
+
+def fun_l19_n548(x)
+ if (x < 1)
+ fun_l20_n550(x)
+ else
+ fun_l20_n98(x)
+ end
+end
+
+def fun_l19_n549(x)
+ if (x < 1)
+ fun_l20_n735(x)
+ else
+ fun_l20_n361(x)
+ end
+end
+
+def fun_l19_n550(x)
+ if (x < 1)
+ fun_l20_n155(x)
+ else
+ fun_l20_n560(x)
+ end
+end
+
+def fun_l19_n551(x)
+ if (x < 1)
+ fun_l20_n394(x)
+ else
+ fun_l20_n793(x)
+ end
+end
+
+def fun_l19_n552(x)
+ if (x < 1)
+ fun_l20_n826(x)
+ else
+ fun_l20_n508(x)
+ end
+end
+
+def fun_l19_n553(x)
+ if (x < 1)
+ fun_l20_n569(x)
+ else
+ fun_l20_n981(x)
+ end
+end
+
+def fun_l19_n554(x)
+ if (x < 1)
+ fun_l20_n580(x)
+ else
+ fun_l20_n848(x)
+ end
+end
+
+def fun_l19_n555(x)
+ if (x < 1)
+ fun_l20_n31(x)
+ else
+ fun_l20_n191(x)
+ end
+end
+
+def fun_l19_n556(x)
+ if (x < 1)
+ fun_l20_n283(x)
+ else
+ fun_l20_n376(x)
+ end
+end
+
+def fun_l19_n557(x)
+ if (x < 1)
+ fun_l20_n978(x)
+ else
+ fun_l20_n554(x)
+ end
+end
+
+def fun_l19_n558(x)
+ if (x < 1)
+ fun_l20_n727(x)
+ else
+ fun_l20_n89(x)
+ end
+end
+
+def fun_l19_n559(x)
+ if (x < 1)
+ fun_l20_n204(x)
+ else
+ fun_l20_n652(x)
+ end
+end
+
+def fun_l19_n560(x)
+ if (x < 1)
+ fun_l20_n481(x)
+ else
+ fun_l20_n114(x)
+ end
+end
+
+def fun_l19_n561(x)
+ if (x < 1)
+ fun_l20_n601(x)
+ else
+ fun_l20_n187(x)
+ end
+end
+
+def fun_l19_n562(x)
+ if (x < 1)
+ fun_l20_n682(x)
+ else
+ fun_l20_n88(x)
+ end
+end
+
+def fun_l19_n563(x)
+ if (x < 1)
+ fun_l20_n346(x)
+ else
+ fun_l20_n190(x)
+ end
+end
+
+def fun_l19_n564(x)
+ if (x < 1)
+ fun_l20_n15(x)
+ else
+ fun_l20_n315(x)
+ end
+end
+
+def fun_l19_n565(x)
+ if (x < 1)
+ fun_l20_n555(x)
+ else
+ fun_l20_n208(x)
+ end
+end
+
+def fun_l19_n566(x)
+ if (x < 1)
+ fun_l20_n29(x)
+ else
+ fun_l20_n511(x)
+ end
+end
+
+def fun_l19_n567(x)
+ if (x < 1)
+ fun_l20_n897(x)
+ else
+ fun_l20_n309(x)
+ end
+end
+
+def fun_l19_n568(x)
+ if (x < 1)
+ fun_l20_n586(x)
+ else
+ fun_l20_n602(x)
+ end
+end
+
+def fun_l19_n569(x)
+ if (x < 1)
+ fun_l20_n51(x)
+ else
+ fun_l20_n483(x)
+ end
+end
+
+def fun_l19_n570(x)
+ if (x < 1)
+ fun_l20_n159(x)
+ else
+ fun_l20_n5(x)
+ end
+end
+
+def fun_l19_n571(x)
+ if (x < 1)
+ fun_l20_n892(x)
+ else
+ fun_l20_n336(x)
+ end
+end
+
+def fun_l19_n572(x)
+ if (x < 1)
+ fun_l20_n203(x)
+ else
+ fun_l20_n287(x)
+ end
+end
+
+def fun_l19_n573(x)
+ if (x < 1)
+ fun_l20_n41(x)
+ else
+ fun_l20_n51(x)
+ end
+end
+
+def fun_l19_n574(x)
+ if (x < 1)
+ fun_l20_n977(x)
+ else
+ fun_l20_n474(x)
+ end
+end
+
+def fun_l19_n575(x)
+ if (x < 1)
+ fun_l20_n247(x)
+ else
+ fun_l20_n281(x)
+ end
+end
+
+def fun_l19_n576(x)
+ if (x < 1)
+ fun_l20_n877(x)
+ else
+ fun_l20_n836(x)
+ end
+end
+
+def fun_l19_n577(x)
+ if (x < 1)
+ fun_l20_n527(x)
+ else
+ fun_l20_n549(x)
+ end
+end
+
+def fun_l19_n578(x)
+ if (x < 1)
+ fun_l20_n102(x)
+ else
+ fun_l20_n906(x)
+ end
+end
+
+def fun_l19_n579(x)
+ if (x < 1)
+ fun_l20_n842(x)
+ else
+ fun_l20_n554(x)
+ end
+end
+
+def fun_l19_n580(x)
+ if (x < 1)
+ fun_l20_n371(x)
+ else
+ fun_l20_n44(x)
+ end
+end
+
+def fun_l19_n581(x)
+ if (x < 1)
+ fun_l20_n306(x)
+ else
+ fun_l20_n571(x)
+ end
+end
+
+def fun_l19_n582(x)
+ if (x < 1)
+ fun_l20_n548(x)
+ else
+ fun_l20_n596(x)
+ end
+end
+
+def fun_l19_n583(x)
+ if (x < 1)
+ fun_l20_n724(x)
+ else
+ fun_l20_n835(x)
+ end
+end
+
+def fun_l19_n584(x)
+ if (x < 1)
+ fun_l20_n238(x)
+ else
+ fun_l20_n408(x)
+ end
+end
+
+def fun_l19_n585(x)
+ if (x < 1)
+ fun_l20_n378(x)
+ else
+ fun_l20_n272(x)
+ end
+end
+
+def fun_l19_n586(x)
+ if (x < 1)
+ fun_l20_n647(x)
+ else
+ fun_l20_n814(x)
+ end
+end
+
+def fun_l19_n587(x)
+ if (x < 1)
+ fun_l20_n210(x)
+ else
+ fun_l20_n801(x)
+ end
+end
+
+def fun_l19_n588(x)
+ if (x < 1)
+ fun_l20_n796(x)
+ else
+ fun_l20_n329(x)
+ end
+end
+
+def fun_l19_n589(x)
+ if (x < 1)
+ fun_l20_n403(x)
+ else
+ fun_l20_n392(x)
+ end
+end
+
+def fun_l19_n590(x)
+ if (x < 1)
+ fun_l20_n677(x)
+ else
+ fun_l20_n574(x)
+ end
+end
+
+def fun_l19_n591(x)
+ if (x < 1)
+ fun_l20_n183(x)
+ else
+ fun_l20_n962(x)
+ end
+end
+
+def fun_l19_n592(x)
+ if (x < 1)
+ fun_l20_n230(x)
+ else
+ fun_l20_n783(x)
+ end
+end
+
+def fun_l19_n593(x)
+ if (x < 1)
+ fun_l20_n191(x)
+ else
+ fun_l20_n42(x)
+ end
+end
+
+def fun_l19_n594(x)
+ if (x < 1)
+ fun_l20_n244(x)
+ else
+ fun_l20_n760(x)
+ end
+end
+
+def fun_l19_n595(x)
+ if (x < 1)
+ fun_l20_n754(x)
+ else
+ fun_l20_n570(x)
+ end
+end
+
+def fun_l19_n596(x)
+ if (x < 1)
+ fun_l20_n612(x)
+ else
+ fun_l20_n287(x)
+ end
+end
+
+def fun_l19_n597(x)
+ if (x < 1)
+ fun_l20_n89(x)
+ else
+ fun_l20_n625(x)
+ end
+end
+
+def fun_l19_n598(x)
+ if (x < 1)
+ fun_l20_n782(x)
+ else
+ fun_l20_n516(x)
+ end
+end
+
+def fun_l19_n599(x)
+ if (x < 1)
+ fun_l20_n75(x)
+ else
+ fun_l20_n857(x)
+ end
+end
+
+def fun_l19_n600(x)
+ if (x < 1)
+ fun_l20_n717(x)
+ else
+ fun_l20_n408(x)
+ end
+end
+
+def fun_l19_n601(x)
+ if (x < 1)
+ fun_l20_n528(x)
+ else
+ fun_l20_n761(x)
+ end
+end
+
+def fun_l19_n602(x)
+ if (x < 1)
+ fun_l20_n319(x)
+ else
+ fun_l20_n645(x)
+ end
+end
+
+def fun_l19_n603(x)
+ if (x < 1)
+ fun_l20_n20(x)
+ else
+ fun_l20_n621(x)
+ end
+end
+
+def fun_l19_n604(x)
+ if (x < 1)
+ fun_l20_n118(x)
+ else
+ fun_l20_n699(x)
+ end
+end
+
+def fun_l19_n605(x)
+ if (x < 1)
+ fun_l20_n19(x)
+ else
+ fun_l20_n63(x)
+ end
+end
+
+def fun_l19_n606(x)
+ if (x < 1)
+ fun_l20_n845(x)
+ else
+ fun_l20_n618(x)
+ end
+end
+
+def fun_l19_n607(x)
+ if (x < 1)
+ fun_l20_n733(x)
+ else
+ fun_l20_n880(x)
+ end
+end
+
+def fun_l19_n608(x)
+ if (x < 1)
+ fun_l20_n785(x)
+ else
+ fun_l20_n254(x)
+ end
+end
+
+def fun_l19_n609(x)
+ if (x < 1)
+ fun_l20_n393(x)
+ else
+ fun_l20_n946(x)
+ end
+end
+
+def fun_l19_n610(x)
+ if (x < 1)
+ fun_l20_n635(x)
+ else
+ fun_l20_n418(x)
+ end
+end
+
+def fun_l19_n611(x)
+ if (x < 1)
+ fun_l20_n987(x)
+ else
+ fun_l20_n703(x)
+ end
+end
+
+def fun_l19_n612(x)
+ if (x < 1)
+ fun_l20_n130(x)
+ else
+ fun_l20_n439(x)
+ end
+end
+
+def fun_l19_n613(x)
+ if (x < 1)
+ fun_l20_n516(x)
+ else
+ fun_l20_n724(x)
+ end
+end
+
+def fun_l19_n614(x)
+ if (x < 1)
+ fun_l20_n44(x)
+ else
+ fun_l20_n102(x)
+ end
+end
+
+def fun_l19_n615(x)
+ if (x < 1)
+ fun_l20_n353(x)
+ else
+ fun_l20_n999(x)
+ end
+end
+
+def fun_l19_n616(x)
+ if (x < 1)
+ fun_l20_n191(x)
+ else
+ fun_l20_n726(x)
+ end
+end
+
+def fun_l19_n617(x)
+ if (x < 1)
+ fun_l20_n375(x)
+ else
+ fun_l20_n575(x)
+ end
+end
+
+def fun_l19_n618(x)
+ if (x < 1)
+ fun_l20_n719(x)
+ else
+ fun_l20_n581(x)
+ end
+end
+
+def fun_l19_n619(x)
+ if (x < 1)
+ fun_l20_n960(x)
+ else
+ fun_l20_n316(x)
+ end
+end
+
+def fun_l19_n620(x)
+ if (x < 1)
+ fun_l20_n860(x)
+ else
+ fun_l20_n784(x)
+ end
+end
+
+def fun_l19_n621(x)
+ if (x < 1)
+ fun_l20_n124(x)
+ else
+ fun_l20_n577(x)
+ end
+end
+
+def fun_l19_n622(x)
+ if (x < 1)
+ fun_l20_n547(x)
+ else
+ fun_l20_n623(x)
+ end
+end
+
+def fun_l19_n623(x)
+ if (x < 1)
+ fun_l20_n842(x)
+ else
+ fun_l20_n380(x)
+ end
+end
+
+def fun_l19_n624(x)
+ if (x < 1)
+ fun_l20_n331(x)
+ else
+ fun_l20_n473(x)
+ end
+end
+
+def fun_l19_n625(x)
+ if (x < 1)
+ fun_l20_n118(x)
+ else
+ fun_l20_n392(x)
+ end
+end
+
+def fun_l19_n626(x)
+ if (x < 1)
+ fun_l20_n836(x)
+ else
+ fun_l20_n988(x)
+ end
+end
+
+def fun_l19_n627(x)
+ if (x < 1)
+ fun_l20_n641(x)
+ else
+ fun_l20_n372(x)
+ end
+end
+
+def fun_l19_n628(x)
+ if (x < 1)
+ fun_l20_n377(x)
+ else
+ fun_l20_n780(x)
+ end
+end
+
+def fun_l19_n629(x)
+ if (x < 1)
+ fun_l20_n180(x)
+ else
+ fun_l20_n670(x)
+ end
+end
+
+def fun_l19_n630(x)
+ if (x < 1)
+ fun_l20_n985(x)
+ else
+ fun_l20_n613(x)
+ end
+end
+
+def fun_l19_n631(x)
+ if (x < 1)
+ fun_l20_n149(x)
+ else
+ fun_l20_n754(x)
+ end
+end
+
+def fun_l19_n632(x)
+ if (x < 1)
+ fun_l20_n967(x)
+ else
+ fun_l20_n940(x)
+ end
+end
+
+def fun_l19_n633(x)
+ if (x < 1)
+ fun_l20_n91(x)
+ else
+ fun_l20_n772(x)
+ end
+end
+
+def fun_l19_n634(x)
+ if (x < 1)
+ fun_l20_n637(x)
+ else
+ fun_l20_n296(x)
+ end
+end
+
+def fun_l19_n635(x)
+ if (x < 1)
+ fun_l20_n50(x)
+ else
+ fun_l20_n314(x)
+ end
+end
+
+def fun_l19_n636(x)
+ if (x < 1)
+ fun_l20_n367(x)
+ else
+ fun_l20_n849(x)
+ end
+end
+
+def fun_l19_n637(x)
+ if (x < 1)
+ fun_l20_n229(x)
+ else
+ fun_l20_n550(x)
+ end
+end
+
+def fun_l19_n638(x)
+ if (x < 1)
+ fun_l20_n680(x)
+ else
+ fun_l20_n783(x)
+ end
+end
+
+def fun_l19_n639(x)
+ if (x < 1)
+ fun_l20_n879(x)
+ else
+ fun_l20_n264(x)
+ end
+end
+
+def fun_l19_n640(x)
+ if (x < 1)
+ fun_l20_n143(x)
+ else
+ fun_l20_n455(x)
+ end
+end
+
+def fun_l19_n641(x)
+ if (x < 1)
+ fun_l20_n191(x)
+ else
+ fun_l20_n110(x)
+ end
+end
+
+def fun_l19_n642(x)
+ if (x < 1)
+ fun_l20_n782(x)
+ else
+ fun_l20_n43(x)
+ end
+end
+
+def fun_l19_n643(x)
+ if (x < 1)
+ fun_l20_n320(x)
+ else
+ fun_l20_n376(x)
+ end
+end
+
+def fun_l19_n644(x)
+ if (x < 1)
+ fun_l20_n554(x)
+ else
+ fun_l20_n667(x)
+ end
+end
+
+def fun_l19_n645(x)
+ if (x < 1)
+ fun_l20_n29(x)
+ else
+ fun_l20_n938(x)
+ end
+end
+
+def fun_l19_n646(x)
+ if (x < 1)
+ fun_l20_n789(x)
+ else
+ fun_l20_n907(x)
+ end
+end
+
+def fun_l19_n647(x)
+ if (x < 1)
+ fun_l20_n859(x)
+ else
+ fun_l20_n138(x)
+ end
+end
+
+def fun_l19_n648(x)
+ if (x < 1)
+ fun_l20_n373(x)
+ else
+ fun_l20_n843(x)
+ end
+end
+
+def fun_l19_n649(x)
+ if (x < 1)
+ fun_l20_n50(x)
+ else
+ fun_l20_n982(x)
+ end
+end
+
+def fun_l19_n650(x)
+ if (x < 1)
+ fun_l20_n622(x)
+ else
+ fun_l20_n368(x)
+ end
+end
+
+def fun_l19_n651(x)
+ if (x < 1)
+ fun_l20_n231(x)
+ else
+ fun_l20_n523(x)
+ end
+end
+
+def fun_l19_n652(x)
+ if (x < 1)
+ fun_l20_n233(x)
+ else
+ fun_l20_n963(x)
+ end
+end
+
+def fun_l19_n653(x)
+ if (x < 1)
+ fun_l20_n363(x)
+ else
+ fun_l20_n177(x)
+ end
+end
+
+def fun_l19_n654(x)
+ if (x < 1)
+ fun_l20_n952(x)
+ else
+ fun_l20_n96(x)
+ end
+end
+
+def fun_l19_n655(x)
+ if (x < 1)
+ fun_l20_n98(x)
+ else
+ fun_l20_n93(x)
+ end
+end
+
+def fun_l19_n656(x)
+ if (x < 1)
+ fun_l20_n200(x)
+ else
+ fun_l20_n137(x)
+ end
+end
+
+def fun_l19_n657(x)
+ if (x < 1)
+ fun_l20_n485(x)
+ else
+ fun_l20_n45(x)
+ end
+end
+
+def fun_l19_n658(x)
+ if (x < 1)
+ fun_l20_n234(x)
+ else
+ fun_l20_n366(x)
+ end
+end
+
+def fun_l19_n659(x)
+ if (x < 1)
+ fun_l20_n120(x)
+ else
+ fun_l20_n850(x)
+ end
+end
+
+def fun_l19_n660(x)
+ if (x < 1)
+ fun_l20_n932(x)
+ else
+ fun_l20_n551(x)
+ end
+end
+
+def fun_l19_n661(x)
+ if (x < 1)
+ fun_l20_n952(x)
+ else
+ fun_l20_n178(x)
+ end
+end
+
+def fun_l19_n662(x)
+ if (x < 1)
+ fun_l20_n761(x)
+ else
+ fun_l20_n2(x)
+ end
+end
+
+def fun_l19_n663(x)
+ if (x < 1)
+ fun_l20_n674(x)
+ else
+ fun_l20_n698(x)
+ end
+end
+
+def fun_l19_n664(x)
+ if (x < 1)
+ fun_l20_n669(x)
+ else
+ fun_l20_n563(x)
+ end
+end
+
+def fun_l19_n665(x)
+ if (x < 1)
+ fun_l20_n106(x)
+ else
+ fun_l20_n442(x)
+ end
+end
+
+def fun_l19_n666(x)
+ if (x < 1)
+ fun_l20_n476(x)
+ else
+ fun_l20_n620(x)
+ end
+end
+
+def fun_l19_n667(x)
+ if (x < 1)
+ fun_l20_n813(x)
+ else
+ fun_l20_n501(x)
+ end
+end
+
+def fun_l19_n668(x)
+ if (x < 1)
+ fun_l20_n773(x)
+ else
+ fun_l20_n485(x)
+ end
+end
+
+def fun_l19_n669(x)
+ if (x < 1)
+ fun_l20_n533(x)
+ else
+ fun_l20_n801(x)
+ end
+end
+
+def fun_l19_n670(x)
+ if (x < 1)
+ fun_l20_n64(x)
+ else
+ fun_l20_n872(x)
+ end
+end
+
+def fun_l19_n671(x)
+ if (x < 1)
+ fun_l20_n770(x)
+ else
+ fun_l20_n101(x)
+ end
+end
+
+def fun_l19_n672(x)
+ if (x < 1)
+ fun_l20_n22(x)
+ else
+ fun_l20_n644(x)
+ end
+end
+
+def fun_l19_n673(x)
+ if (x < 1)
+ fun_l20_n634(x)
+ else
+ fun_l20_n955(x)
+ end
+end
+
+def fun_l19_n674(x)
+ if (x < 1)
+ fun_l20_n976(x)
+ else
+ fun_l20_n665(x)
+ end
+end
+
+def fun_l19_n675(x)
+ if (x < 1)
+ fun_l20_n988(x)
+ else
+ fun_l20_n793(x)
+ end
+end
+
+def fun_l19_n676(x)
+ if (x < 1)
+ fun_l20_n235(x)
+ else
+ fun_l20_n833(x)
+ end
+end
+
+def fun_l19_n677(x)
+ if (x < 1)
+ fun_l20_n604(x)
+ else
+ fun_l20_n797(x)
+ end
+end
+
+def fun_l19_n678(x)
+ if (x < 1)
+ fun_l20_n622(x)
+ else
+ fun_l20_n896(x)
+ end
+end
+
+def fun_l19_n679(x)
+ if (x < 1)
+ fun_l20_n190(x)
+ else
+ fun_l20_n281(x)
+ end
+end
+
+def fun_l19_n680(x)
+ if (x < 1)
+ fun_l20_n325(x)
+ else
+ fun_l20_n669(x)
+ end
+end
+
+def fun_l19_n681(x)
+ if (x < 1)
+ fun_l20_n898(x)
+ else
+ fun_l20_n352(x)
+ end
+end
+
+def fun_l19_n682(x)
+ if (x < 1)
+ fun_l20_n820(x)
+ else
+ fun_l20_n117(x)
+ end
+end
+
+def fun_l19_n683(x)
+ if (x < 1)
+ fun_l20_n148(x)
+ else
+ fun_l20_n842(x)
+ end
+end
+
+def fun_l19_n684(x)
+ if (x < 1)
+ fun_l20_n468(x)
+ else
+ fun_l20_n596(x)
+ end
+end
+
+def fun_l19_n685(x)
+ if (x < 1)
+ fun_l20_n285(x)
+ else
+ fun_l20_n730(x)
+ end
+end
+
+def fun_l19_n686(x)
+ if (x < 1)
+ fun_l20_n426(x)
+ else
+ fun_l20_n657(x)
+ end
+end
+
+def fun_l19_n687(x)
+ if (x < 1)
+ fun_l20_n874(x)
+ else
+ fun_l20_n867(x)
+ end
+end
+
+def fun_l19_n688(x)
+ if (x < 1)
+ fun_l20_n451(x)
+ else
+ fun_l20_n846(x)
+ end
+end
+
+def fun_l19_n689(x)
+ if (x < 1)
+ fun_l20_n425(x)
+ else
+ fun_l20_n796(x)
+ end
+end
+
+def fun_l19_n690(x)
+ if (x < 1)
+ fun_l20_n37(x)
+ else
+ fun_l20_n301(x)
+ end
+end
+
+def fun_l19_n691(x)
+ if (x < 1)
+ fun_l20_n886(x)
+ else
+ fun_l20_n513(x)
+ end
+end
+
+def fun_l19_n692(x)
+ if (x < 1)
+ fun_l20_n426(x)
+ else
+ fun_l20_n46(x)
+ end
+end
+
+def fun_l19_n693(x)
+ if (x < 1)
+ fun_l20_n622(x)
+ else
+ fun_l20_n738(x)
+ end
+end
+
+def fun_l19_n694(x)
+ if (x < 1)
+ fun_l20_n530(x)
+ else
+ fun_l20_n981(x)
+ end
+end
+
+def fun_l19_n695(x)
+ if (x < 1)
+ fun_l20_n568(x)
+ else
+ fun_l20_n934(x)
+ end
+end
+
+def fun_l19_n696(x)
+ if (x < 1)
+ fun_l20_n974(x)
+ else
+ fun_l20_n585(x)
+ end
+end
+
+def fun_l19_n697(x)
+ if (x < 1)
+ fun_l20_n780(x)
+ else
+ fun_l20_n408(x)
+ end
+end
+
+def fun_l19_n698(x)
+ if (x < 1)
+ fun_l20_n373(x)
+ else
+ fun_l20_n163(x)
+ end
+end
+
+def fun_l19_n699(x)
+ if (x < 1)
+ fun_l20_n745(x)
+ else
+ fun_l20_n4(x)
+ end
+end
+
+def fun_l19_n700(x)
+ if (x < 1)
+ fun_l20_n307(x)
+ else
+ fun_l20_n172(x)
+ end
+end
+
+def fun_l19_n701(x)
+ if (x < 1)
+ fun_l20_n342(x)
+ else
+ fun_l20_n381(x)
+ end
+end
+
+def fun_l19_n702(x)
+ if (x < 1)
+ fun_l20_n67(x)
+ else
+ fun_l20_n841(x)
+ end
+end
+
+def fun_l19_n703(x)
+ if (x < 1)
+ fun_l20_n697(x)
+ else
+ fun_l20_n597(x)
+ end
+end
+
+def fun_l19_n704(x)
+ if (x < 1)
+ fun_l20_n809(x)
+ else
+ fun_l20_n306(x)
+ end
+end
+
+def fun_l19_n705(x)
+ if (x < 1)
+ fun_l20_n575(x)
+ else
+ fun_l20_n401(x)
+ end
+end
+
+def fun_l19_n706(x)
+ if (x < 1)
+ fun_l20_n651(x)
+ else
+ fun_l20_n552(x)
+ end
+end
+
+def fun_l19_n707(x)
+ if (x < 1)
+ fun_l20_n644(x)
+ else
+ fun_l20_n697(x)
+ end
+end
+
+def fun_l19_n708(x)
+ if (x < 1)
+ fun_l20_n572(x)
+ else
+ fun_l20_n86(x)
+ end
+end
+
+def fun_l19_n709(x)
+ if (x < 1)
+ fun_l20_n239(x)
+ else
+ fun_l20_n18(x)
+ end
+end
+
+def fun_l19_n710(x)
+ if (x < 1)
+ fun_l20_n48(x)
+ else
+ fun_l20_n822(x)
+ end
+end
+
+def fun_l19_n711(x)
+ if (x < 1)
+ fun_l20_n126(x)
+ else
+ fun_l20_n186(x)
+ end
+end
+
+def fun_l19_n712(x)
+ if (x < 1)
+ fun_l20_n552(x)
+ else
+ fun_l20_n901(x)
+ end
+end
+
+def fun_l19_n713(x)
+ if (x < 1)
+ fun_l20_n993(x)
+ else
+ fun_l20_n313(x)
+ end
+end
+
+def fun_l19_n714(x)
+ if (x < 1)
+ fun_l20_n918(x)
+ else
+ fun_l20_n718(x)
+ end
+end
+
+def fun_l19_n715(x)
+ if (x < 1)
+ fun_l20_n442(x)
+ else
+ fun_l20_n652(x)
+ end
+end
+
+def fun_l19_n716(x)
+ if (x < 1)
+ fun_l20_n624(x)
+ else
+ fun_l20_n492(x)
+ end
+end
+
+def fun_l19_n717(x)
+ if (x < 1)
+ fun_l20_n585(x)
+ else
+ fun_l20_n980(x)
+ end
+end
+
+def fun_l19_n718(x)
+ if (x < 1)
+ fun_l20_n159(x)
+ else
+ fun_l20_n327(x)
+ end
+end
+
+def fun_l19_n719(x)
+ if (x < 1)
+ fun_l20_n867(x)
+ else
+ fun_l20_n239(x)
+ end
+end
+
+def fun_l19_n720(x)
+ if (x < 1)
+ fun_l20_n551(x)
+ else
+ fun_l20_n123(x)
+ end
+end
+
+def fun_l19_n721(x)
+ if (x < 1)
+ fun_l20_n794(x)
+ else
+ fun_l20_n1(x)
+ end
+end
+
+def fun_l19_n722(x)
+ if (x < 1)
+ fun_l20_n193(x)
+ else
+ fun_l20_n847(x)
+ end
+end
+
+def fun_l19_n723(x)
+ if (x < 1)
+ fun_l20_n560(x)
+ else
+ fun_l20_n163(x)
+ end
+end
+
+def fun_l19_n724(x)
+ if (x < 1)
+ fun_l20_n338(x)
+ else
+ fun_l20_n411(x)
+ end
+end
+
+def fun_l19_n725(x)
+ if (x < 1)
+ fun_l20_n227(x)
+ else
+ fun_l20_n437(x)
+ end
+end
+
+def fun_l19_n726(x)
+ if (x < 1)
+ fun_l20_n691(x)
+ else
+ fun_l20_n821(x)
+ end
+end
+
+def fun_l19_n727(x)
+ if (x < 1)
+ fun_l20_n578(x)
+ else
+ fun_l20_n589(x)
+ end
+end
+
+def fun_l19_n728(x)
+ if (x < 1)
+ fun_l20_n990(x)
+ else
+ fun_l20_n164(x)
+ end
+end
+
+def fun_l19_n729(x)
+ if (x < 1)
+ fun_l20_n620(x)
+ else
+ fun_l20_n736(x)
+ end
+end
+
+def fun_l19_n730(x)
+ if (x < 1)
+ fun_l20_n980(x)
+ else
+ fun_l20_n345(x)
+ end
+end
+
+def fun_l19_n731(x)
+ if (x < 1)
+ fun_l20_n302(x)
+ else
+ fun_l20_n75(x)
+ end
+end
+
+def fun_l19_n732(x)
+ if (x < 1)
+ fun_l20_n684(x)
+ else
+ fun_l20_n2(x)
+ end
+end
+
+def fun_l19_n733(x)
+ if (x < 1)
+ fun_l20_n11(x)
+ else
+ fun_l20_n503(x)
+ end
+end
+
+def fun_l19_n734(x)
+ if (x < 1)
+ fun_l20_n719(x)
+ else
+ fun_l20_n745(x)
+ end
+end
+
+def fun_l19_n735(x)
+ if (x < 1)
+ fun_l20_n74(x)
+ else
+ fun_l20_n413(x)
+ end
+end
+
+def fun_l19_n736(x)
+ if (x < 1)
+ fun_l20_n858(x)
+ else
+ fun_l20_n224(x)
+ end
+end
+
+def fun_l19_n737(x)
+ if (x < 1)
+ fun_l20_n372(x)
+ else
+ fun_l20_n1(x)
+ end
+end
+
+def fun_l19_n738(x)
+ if (x < 1)
+ fun_l20_n274(x)
+ else
+ fun_l20_n967(x)
+ end
+end
+
+def fun_l19_n739(x)
+ if (x < 1)
+ fun_l20_n191(x)
+ else
+ fun_l20_n984(x)
+ end
+end
+
+def fun_l19_n740(x)
+ if (x < 1)
+ fun_l20_n646(x)
+ else
+ fun_l20_n279(x)
+ end
+end
+
+def fun_l19_n741(x)
+ if (x < 1)
+ fun_l20_n55(x)
+ else
+ fun_l20_n947(x)
+ end
+end
+
+def fun_l19_n742(x)
+ if (x < 1)
+ fun_l20_n306(x)
+ else
+ fun_l20_n798(x)
+ end
+end
+
+def fun_l19_n743(x)
+ if (x < 1)
+ fun_l20_n571(x)
+ else
+ fun_l20_n905(x)
+ end
+end
+
+def fun_l19_n744(x)
+ if (x < 1)
+ fun_l20_n270(x)
+ else
+ fun_l20_n290(x)
+ end
+end
+
+def fun_l19_n745(x)
+ if (x < 1)
+ fun_l20_n39(x)
+ else
+ fun_l20_n983(x)
+ end
+end
+
+def fun_l19_n746(x)
+ if (x < 1)
+ fun_l20_n405(x)
+ else
+ fun_l20_n727(x)
+ end
+end
+
+def fun_l19_n747(x)
+ if (x < 1)
+ fun_l20_n424(x)
+ else
+ fun_l20_n597(x)
+ end
+end
+
+def fun_l19_n748(x)
+ if (x < 1)
+ fun_l20_n602(x)
+ else
+ fun_l20_n467(x)
+ end
+end
+
+def fun_l19_n749(x)
+ if (x < 1)
+ fun_l20_n859(x)
+ else
+ fun_l20_n76(x)
+ end
+end
+
+def fun_l19_n750(x)
+ if (x < 1)
+ fun_l20_n201(x)
+ else
+ fun_l20_n948(x)
+ end
+end
+
+def fun_l19_n751(x)
+ if (x < 1)
+ fun_l20_n998(x)
+ else
+ fun_l20_n425(x)
+ end
+end
+
+def fun_l19_n752(x)
+ if (x < 1)
+ fun_l20_n352(x)
+ else
+ fun_l20_n762(x)
+ end
+end
+
+def fun_l19_n753(x)
+ if (x < 1)
+ fun_l20_n996(x)
+ else
+ fun_l20_n136(x)
+ end
+end
+
+def fun_l19_n754(x)
+ if (x < 1)
+ fun_l20_n462(x)
+ else
+ fun_l20_n544(x)
+ end
+end
+
+def fun_l19_n755(x)
+ if (x < 1)
+ fun_l20_n126(x)
+ else
+ fun_l20_n857(x)
+ end
+end
+
+def fun_l19_n756(x)
+ if (x < 1)
+ fun_l20_n695(x)
+ else
+ fun_l20_n444(x)
+ end
+end
+
+def fun_l19_n757(x)
+ if (x < 1)
+ fun_l20_n694(x)
+ else
+ fun_l20_n718(x)
+ end
+end
+
+def fun_l19_n758(x)
+ if (x < 1)
+ fun_l20_n308(x)
+ else
+ fun_l20_n867(x)
+ end
+end
+
+def fun_l19_n759(x)
+ if (x < 1)
+ fun_l20_n224(x)
+ else
+ fun_l20_n739(x)
+ end
+end
+
+def fun_l19_n760(x)
+ if (x < 1)
+ fun_l20_n286(x)
+ else
+ fun_l20_n660(x)
+ end
+end
+
+def fun_l19_n761(x)
+ if (x < 1)
+ fun_l20_n486(x)
+ else
+ fun_l20_n614(x)
+ end
+end
+
+def fun_l19_n762(x)
+ if (x < 1)
+ fun_l20_n234(x)
+ else
+ fun_l20_n812(x)
+ end
+end
+
+def fun_l19_n763(x)
+ if (x < 1)
+ fun_l20_n663(x)
+ else
+ fun_l20_n649(x)
+ end
+end
+
+def fun_l19_n764(x)
+ if (x < 1)
+ fun_l20_n815(x)
+ else
+ fun_l20_n436(x)
+ end
+end
+
+def fun_l19_n765(x)
+ if (x < 1)
+ fun_l20_n330(x)
+ else
+ fun_l20_n350(x)
+ end
+end
+
+def fun_l19_n766(x)
+ if (x < 1)
+ fun_l20_n532(x)
+ else
+ fun_l20_n676(x)
+ end
+end
+
+def fun_l19_n767(x)
+ if (x < 1)
+ fun_l20_n74(x)
+ else
+ fun_l20_n182(x)
+ end
+end
+
+def fun_l19_n768(x)
+ if (x < 1)
+ fun_l20_n432(x)
+ else
+ fun_l20_n912(x)
+ end
+end
+
+def fun_l19_n769(x)
+ if (x < 1)
+ fun_l20_n413(x)
+ else
+ fun_l20_n315(x)
+ end
+end
+
+def fun_l19_n770(x)
+ if (x < 1)
+ fun_l20_n457(x)
+ else
+ fun_l20_n917(x)
+ end
+end
+
+def fun_l19_n771(x)
+ if (x < 1)
+ fun_l20_n435(x)
+ else
+ fun_l20_n768(x)
+ end
+end
+
+def fun_l19_n772(x)
+ if (x < 1)
+ fun_l20_n994(x)
+ else
+ fun_l20_n865(x)
+ end
+end
+
+def fun_l19_n773(x)
+ if (x < 1)
+ fun_l20_n425(x)
+ else
+ fun_l20_n347(x)
+ end
+end
+
+def fun_l19_n774(x)
+ if (x < 1)
+ fun_l20_n405(x)
+ else
+ fun_l20_n1(x)
+ end
+end
+
+def fun_l19_n775(x)
+ if (x < 1)
+ fun_l20_n460(x)
+ else
+ fun_l20_n417(x)
+ end
+end
+
+def fun_l19_n776(x)
+ if (x < 1)
+ fun_l20_n539(x)
+ else
+ fun_l20_n825(x)
+ end
+end
+
+def fun_l19_n777(x)
+ if (x < 1)
+ fun_l20_n180(x)
+ else
+ fun_l20_n613(x)
+ end
+end
+
+def fun_l19_n778(x)
+ if (x < 1)
+ fun_l20_n452(x)
+ else
+ fun_l20_n717(x)
+ end
+end
+
+def fun_l19_n779(x)
+ if (x < 1)
+ fun_l20_n265(x)
+ else
+ fun_l20_n802(x)
+ end
+end
+
+def fun_l19_n780(x)
+ if (x < 1)
+ fun_l20_n941(x)
+ else
+ fun_l20_n939(x)
+ end
+end
+
+def fun_l19_n781(x)
+ if (x < 1)
+ fun_l20_n777(x)
+ else
+ fun_l20_n796(x)
+ end
+end
+
+def fun_l19_n782(x)
+ if (x < 1)
+ fun_l20_n924(x)
+ else
+ fun_l20_n442(x)
+ end
+end
+
+def fun_l19_n783(x)
+ if (x < 1)
+ fun_l20_n901(x)
+ else
+ fun_l20_n817(x)
+ end
+end
+
+def fun_l19_n784(x)
+ if (x < 1)
+ fun_l20_n101(x)
+ else
+ fun_l20_n983(x)
+ end
+end
+
+def fun_l19_n785(x)
+ if (x < 1)
+ fun_l20_n992(x)
+ else
+ fun_l20_n790(x)
+ end
+end
+
+def fun_l19_n786(x)
+ if (x < 1)
+ fun_l20_n426(x)
+ else
+ fun_l20_n337(x)
+ end
+end
+
+def fun_l19_n787(x)
+ if (x < 1)
+ fun_l20_n812(x)
+ else
+ fun_l20_n7(x)
+ end
+end
+
+def fun_l19_n788(x)
+ if (x < 1)
+ fun_l20_n768(x)
+ else
+ fun_l20_n25(x)
+ end
+end
+
+def fun_l19_n789(x)
+ if (x < 1)
+ fun_l20_n292(x)
+ else
+ fun_l20_n440(x)
+ end
+end
+
+def fun_l19_n790(x)
+ if (x < 1)
+ fun_l20_n855(x)
+ else
+ fun_l20_n191(x)
+ end
+end
+
+def fun_l19_n791(x)
+ if (x < 1)
+ fun_l20_n32(x)
+ else
+ fun_l20_n855(x)
+ end
+end
+
+def fun_l19_n792(x)
+ if (x < 1)
+ fun_l20_n920(x)
+ else
+ fun_l20_n198(x)
+ end
+end
+
+def fun_l19_n793(x)
+ if (x < 1)
+ fun_l20_n411(x)
+ else
+ fun_l20_n396(x)
+ end
+end
+
+def fun_l19_n794(x)
+ if (x < 1)
+ fun_l20_n977(x)
+ else
+ fun_l20_n712(x)
+ end
+end
+
+def fun_l19_n795(x)
+ if (x < 1)
+ fun_l20_n636(x)
+ else
+ fun_l20_n66(x)
+ end
+end
+
+def fun_l19_n796(x)
+ if (x < 1)
+ fun_l20_n137(x)
+ else
+ fun_l20_n656(x)
+ end
+end
+
+def fun_l19_n797(x)
+ if (x < 1)
+ fun_l20_n51(x)
+ else
+ fun_l20_n244(x)
+ end
+end
+
+def fun_l19_n798(x)
+ if (x < 1)
+ fun_l20_n426(x)
+ else
+ fun_l20_n418(x)
+ end
+end
+
+def fun_l19_n799(x)
+ if (x < 1)
+ fun_l20_n272(x)
+ else
+ fun_l20_n365(x)
+ end
+end
+
+def fun_l19_n800(x)
+ if (x < 1)
+ fun_l20_n361(x)
+ else
+ fun_l20_n952(x)
+ end
+end
+
+def fun_l19_n801(x)
+ if (x < 1)
+ fun_l20_n428(x)
+ else
+ fun_l20_n683(x)
+ end
+end
+
+def fun_l19_n802(x)
+ if (x < 1)
+ fun_l20_n54(x)
+ else
+ fun_l20_n86(x)
+ end
+end
+
+def fun_l19_n803(x)
+ if (x < 1)
+ fun_l20_n771(x)
+ else
+ fun_l20_n555(x)
+ end
+end
+
+def fun_l19_n804(x)
+ if (x < 1)
+ fun_l20_n498(x)
+ else
+ fun_l20_n744(x)
+ end
+end
+
+def fun_l19_n805(x)
+ if (x < 1)
+ fun_l20_n30(x)
+ else
+ fun_l20_n813(x)
+ end
+end
+
+def fun_l19_n806(x)
+ if (x < 1)
+ fun_l20_n96(x)
+ else
+ fun_l20_n295(x)
+ end
+end
+
+def fun_l19_n807(x)
+ if (x < 1)
+ fun_l20_n128(x)
+ else
+ fun_l20_n584(x)
+ end
+end
+
+def fun_l19_n808(x)
+ if (x < 1)
+ fun_l20_n818(x)
+ else
+ fun_l20_n396(x)
+ end
+end
+
+def fun_l19_n809(x)
+ if (x < 1)
+ fun_l20_n896(x)
+ else
+ fun_l20_n779(x)
+ end
+end
+
+def fun_l19_n810(x)
+ if (x < 1)
+ fun_l20_n40(x)
+ else
+ fun_l20_n638(x)
+ end
+end
+
+def fun_l19_n811(x)
+ if (x < 1)
+ fun_l20_n925(x)
+ else
+ fun_l20_n914(x)
+ end
+end
+
+def fun_l19_n812(x)
+ if (x < 1)
+ fun_l20_n217(x)
+ else
+ fun_l20_n833(x)
+ end
+end
+
+def fun_l19_n813(x)
+ if (x < 1)
+ fun_l20_n687(x)
+ else
+ fun_l20_n469(x)
+ end
+end
+
+def fun_l19_n814(x)
+ if (x < 1)
+ fun_l20_n709(x)
+ else
+ fun_l20_n196(x)
+ end
+end
+
+def fun_l19_n815(x)
+ if (x < 1)
+ fun_l20_n633(x)
+ else
+ fun_l20_n622(x)
+ end
+end
+
+def fun_l19_n816(x)
+ if (x < 1)
+ fun_l20_n976(x)
+ else
+ fun_l20_n691(x)
+ end
+end
+
+def fun_l19_n817(x)
+ if (x < 1)
+ fun_l20_n260(x)
+ else
+ fun_l20_n592(x)
+ end
+end
+
+def fun_l19_n818(x)
+ if (x < 1)
+ fun_l20_n893(x)
+ else
+ fun_l20_n353(x)
+ end
+end
+
+def fun_l19_n819(x)
+ if (x < 1)
+ fun_l20_n824(x)
+ else
+ fun_l20_n875(x)
+ end
+end
+
+def fun_l19_n820(x)
+ if (x < 1)
+ fun_l20_n605(x)
+ else
+ fun_l20_n797(x)
+ end
+end
+
+def fun_l19_n821(x)
+ if (x < 1)
+ fun_l20_n990(x)
+ else
+ fun_l20_n272(x)
+ end
+end
+
+def fun_l19_n822(x)
+ if (x < 1)
+ fun_l20_n819(x)
+ else
+ fun_l20_n313(x)
+ end
+end
+
+def fun_l19_n823(x)
+ if (x < 1)
+ fun_l20_n838(x)
+ else
+ fun_l20_n513(x)
+ end
+end
+
+def fun_l19_n824(x)
+ if (x < 1)
+ fun_l20_n332(x)
+ else
+ fun_l20_n838(x)
+ end
+end
+
+def fun_l19_n825(x)
+ if (x < 1)
+ fun_l20_n994(x)
+ else
+ fun_l20_n641(x)
+ end
+end
+
+def fun_l19_n826(x)
+ if (x < 1)
+ fun_l20_n820(x)
+ else
+ fun_l20_n17(x)
+ end
+end
+
+def fun_l19_n827(x)
+ if (x < 1)
+ fun_l20_n645(x)
+ else
+ fun_l20_n587(x)
+ end
+end
+
+def fun_l19_n828(x)
+ if (x < 1)
+ fun_l20_n352(x)
+ else
+ fun_l20_n726(x)
+ end
+end
+
+def fun_l19_n829(x)
+ if (x < 1)
+ fun_l20_n33(x)
+ else
+ fun_l20_n803(x)
+ end
+end
+
+def fun_l19_n830(x)
+ if (x < 1)
+ fun_l20_n854(x)
+ else
+ fun_l20_n468(x)
+ end
+end
+
+def fun_l19_n831(x)
+ if (x < 1)
+ fun_l20_n149(x)
+ else
+ fun_l20_n529(x)
+ end
+end
+
+def fun_l19_n832(x)
+ if (x < 1)
+ fun_l20_n442(x)
+ else
+ fun_l20_n114(x)
+ end
+end
+
+def fun_l19_n833(x)
+ if (x < 1)
+ fun_l20_n986(x)
+ else
+ fun_l20_n778(x)
+ end
+end
+
+def fun_l19_n834(x)
+ if (x < 1)
+ fun_l20_n220(x)
+ else
+ fun_l20_n782(x)
+ end
+end
+
+def fun_l19_n835(x)
+ if (x < 1)
+ fun_l20_n330(x)
+ else
+ fun_l20_n361(x)
+ end
+end
+
+def fun_l19_n836(x)
+ if (x < 1)
+ fun_l20_n805(x)
+ else
+ fun_l20_n204(x)
+ end
+end
+
+def fun_l19_n837(x)
+ if (x < 1)
+ fun_l20_n534(x)
+ else
+ fun_l20_n970(x)
+ end
+end
+
+def fun_l19_n838(x)
+ if (x < 1)
+ fun_l20_n890(x)
+ else
+ fun_l20_n526(x)
+ end
+end
+
+def fun_l19_n839(x)
+ if (x < 1)
+ fun_l20_n511(x)
+ else
+ fun_l20_n743(x)
+ end
+end
+
+def fun_l19_n840(x)
+ if (x < 1)
+ fun_l20_n730(x)
+ else
+ fun_l20_n435(x)
+ end
+end
+
+def fun_l19_n841(x)
+ if (x < 1)
+ fun_l20_n34(x)
+ else
+ fun_l20_n228(x)
+ end
+end
+
+def fun_l19_n842(x)
+ if (x < 1)
+ fun_l20_n170(x)
+ else
+ fun_l20_n162(x)
+ end
+end
+
+def fun_l19_n843(x)
+ if (x < 1)
+ fun_l20_n987(x)
+ else
+ fun_l20_n631(x)
+ end
+end
+
+def fun_l19_n844(x)
+ if (x < 1)
+ fun_l20_n193(x)
+ else
+ fun_l20_n48(x)
+ end
+end
+
+def fun_l19_n845(x)
+ if (x < 1)
+ fun_l20_n479(x)
+ else
+ fun_l20_n295(x)
+ end
+end
+
+def fun_l19_n846(x)
+ if (x < 1)
+ fun_l20_n545(x)
+ else
+ fun_l20_n474(x)
+ end
+end
+
+def fun_l19_n847(x)
+ if (x < 1)
+ fun_l20_n155(x)
+ else
+ fun_l20_n222(x)
+ end
+end
+
+def fun_l19_n848(x)
+ if (x < 1)
+ fun_l20_n641(x)
+ else
+ fun_l20_n151(x)
+ end
+end
+
+def fun_l19_n849(x)
+ if (x < 1)
+ fun_l20_n191(x)
+ else
+ fun_l20_n563(x)
+ end
+end
+
+def fun_l19_n850(x)
+ if (x < 1)
+ fun_l20_n891(x)
+ else
+ fun_l20_n247(x)
+ end
+end
+
+def fun_l19_n851(x)
+ if (x < 1)
+ fun_l20_n987(x)
+ else
+ fun_l20_n296(x)
+ end
+end
+
+def fun_l19_n852(x)
+ if (x < 1)
+ fun_l20_n86(x)
+ else
+ fun_l20_n346(x)
+ end
+end
+
+def fun_l19_n853(x)
+ if (x < 1)
+ fun_l20_n93(x)
+ else
+ fun_l20_n198(x)
+ end
+end
+
+def fun_l19_n854(x)
+ if (x < 1)
+ fun_l20_n767(x)
+ else
+ fun_l20_n759(x)
+ end
+end
+
+def fun_l19_n855(x)
+ if (x < 1)
+ fun_l20_n571(x)
+ else
+ fun_l20_n456(x)
+ end
+end
+
+def fun_l19_n856(x)
+ if (x < 1)
+ fun_l20_n722(x)
+ else
+ fun_l20_n603(x)
+ end
+end
+
+def fun_l19_n857(x)
+ if (x < 1)
+ fun_l20_n940(x)
+ else
+ fun_l20_n163(x)
+ end
+end
+
+def fun_l19_n858(x)
+ if (x < 1)
+ fun_l20_n973(x)
+ else
+ fun_l20_n598(x)
+ end
+end
+
+def fun_l19_n859(x)
+ if (x < 1)
+ fun_l20_n79(x)
+ else
+ fun_l20_n401(x)
+ end
+end
+
+def fun_l19_n860(x)
+ if (x < 1)
+ fun_l20_n234(x)
+ else
+ fun_l20_n769(x)
+ end
+end
+
+def fun_l19_n861(x)
+ if (x < 1)
+ fun_l20_n292(x)
+ else
+ fun_l20_n526(x)
+ end
+end
+
+def fun_l19_n862(x)
+ if (x < 1)
+ fun_l20_n554(x)
+ else
+ fun_l20_n468(x)
+ end
+end
+
+def fun_l19_n863(x)
+ if (x < 1)
+ fun_l20_n386(x)
+ else
+ fun_l20_n946(x)
+ end
+end
+
+def fun_l19_n864(x)
+ if (x < 1)
+ fun_l20_n227(x)
+ else
+ fun_l20_n287(x)
+ end
+end
+
+def fun_l19_n865(x)
+ if (x < 1)
+ fun_l20_n485(x)
+ else
+ fun_l20_n276(x)
+ end
+end
+
+def fun_l19_n866(x)
+ if (x < 1)
+ fun_l20_n38(x)
+ else
+ fun_l20_n329(x)
+ end
+end
+
+def fun_l19_n867(x)
+ if (x < 1)
+ fun_l20_n1(x)
+ else
+ fun_l20_n985(x)
+ end
+end
+
+def fun_l19_n868(x)
+ if (x < 1)
+ fun_l20_n13(x)
+ else
+ fun_l20_n823(x)
+ end
+end
+
+def fun_l19_n869(x)
+ if (x < 1)
+ fun_l20_n834(x)
+ else
+ fun_l20_n959(x)
+ end
+end
+
+def fun_l19_n870(x)
+ if (x < 1)
+ fun_l20_n177(x)
+ else
+ fun_l20_n232(x)
+ end
+end
+
+def fun_l19_n871(x)
+ if (x < 1)
+ fun_l20_n56(x)
+ else
+ fun_l20_n712(x)
+ end
+end
+
+def fun_l19_n872(x)
+ if (x < 1)
+ fun_l20_n69(x)
+ else
+ fun_l20_n850(x)
+ end
+end
+
+def fun_l19_n873(x)
+ if (x < 1)
+ fun_l20_n558(x)
+ else
+ fun_l20_n877(x)
+ end
+end
+
+def fun_l19_n874(x)
+ if (x < 1)
+ fun_l20_n34(x)
+ else
+ fun_l20_n540(x)
+ end
+end
+
+def fun_l19_n875(x)
+ if (x < 1)
+ fun_l20_n392(x)
+ else
+ fun_l20_n904(x)
+ end
+end
+
+def fun_l19_n876(x)
+ if (x < 1)
+ fun_l20_n99(x)
+ else
+ fun_l20_n691(x)
+ end
+end
+
+def fun_l19_n877(x)
+ if (x < 1)
+ fun_l20_n799(x)
+ else
+ fun_l20_n982(x)
+ end
+end
+
+def fun_l19_n878(x)
+ if (x < 1)
+ fun_l20_n511(x)
+ else
+ fun_l20_n869(x)
+ end
+end
+
+def fun_l19_n879(x)
+ if (x < 1)
+ fun_l20_n65(x)
+ else
+ fun_l20_n318(x)
+ end
+end
+
+def fun_l19_n880(x)
+ if (x < 1)
+ fun_l20_n335(x)
+ else
+ fun_l20_n811(x)
+ end
+end
+
+def fun_l19_n881(x)
+ if (x < 1)
+ fun_l20_n165(x)
+ else
+ fun_l20_n870(x)
+ end
+end
+
+def fun_l19_n882(x)
+ if (x < 1)
+ fun_l20_n427(x)
+ else
+ fun_l20_n597(x)
+ end
+end
+
+def fun_l19_n883(x)
+ if (x < 1)
+ fun_l20_n319(x)
+ else
+ fun_l20_n503(x)
+ end
+end
+
+def fun_l19_n884(x)
+ if (x < 1)
+ fun_l20_n57(x)
+ else
+ fun_l20_n620(x)
+ end
+end
+
+def fun_l19_n885(x)
+ if (x < 1)
+ fun_l20_n489(x)
+ else
+ fun_l20_n359(x)
+ end
+end
+
+def fun_l19_n886(x)
+ if (x < 1)
+ fun_l20_n773(x)
+ else
+ fun_l20_n719(x)
+ end
+end
+
+def fun_l19_n887(x)
+ if (x < 1)
+ fun_l20_n969(x)
+ else
+ fun_l20_n32(x)
+ end
+end
+
+def fun_l19_n888(x)
+ if (x < 1)
+ fun_l20_n758(x)
+ else
+ fun_l20_n132(x)
+ end
+end
+
+def fun_l19_n889(x)
+ if (x < 1)
+ fun_l20_n130(x)
+ else
+ fun_l20_n886(x)
+ end
+end
+
+def fun_l19_n890(x)
+ if (x < 1)
+ fun_l20_n195(x)
+ else
+ fun_l20_n258(x)
+ end
+end
+
+def fun_l19_n891(x)
+ if (x < 1)
+ fun_l20_n747(x)
+ else
+ fun_l20_n967(x)
+ end
+end
+
+def fun_l19_n892(x)
+ if (x < 1)
+ fun_l20_n403(x)
+ else
+ fun_l20_n314(x)
+ end
+end
+
+def fun_l19_n893(x)
+ if (x < 1)
+ fun_l20_n927(x)
+ else
+ fun_l20_n923(x)
+ end
+end
+
+def fun_l19_n894(x)
+ if (x < 1)
+ fun_l20_n894(x)
+ else
+ fun_l20_n318(x)
+ end
+end
+
+def fun_l19_n895(x)
+ if (x < 1)
+ fun_l20_n825(x)
+ else
+ fun_l20_n574(x)
+ end
+end
+
+def fun_l19_n896(x)
+ if (x < 1)
+ fun_l20_n436(x)
+ else
+ fun_l20_n321(x)
+ end
+end
+
+def fun_l19_n897(x)
+ if (x < 1)
+ fun_l20_n317(x)
+ else
+ fun_l20_n312(x)
+ end
+end
+
+def fun_l19_n898(x)
+ if (x < 1)
+ fun_l20_n219(x)
+ else
+ fun_l20_n362(x)
+ end
+end
+
+def fun_l19_n899(x)
+ if (x < 1)
+ fun_l20_n731(x)
+ else
+ fun_l20_n1(x)
+ end
+end
+
+def fun_l19_n900(x)
+ if (x < 1)
+ fun_l20_n804(x)
+ else
+ fun_l20_n629(x)
+ end
+end
+
+def fun_l19_n901(x)
+ if (x < 1)
+ fun_l20_n152(x)
+ else
+ fun_l20_n232(x)
+ end
+end
+
+def fun_l19_n902(x)
+ if (x < 1)
+ fun_l20_n104(x)
+ else
+ fun_l20_n579(x)
+ end
+end
+
+def fun_l19_n903(x)
+ if (x < 1)
+ fun_l20_n860(x)
+ else
+ fun_l20_n322(x)
+ end
+end
+
+def fun_l19_n904(x)
+ if (x < 1)
+ fun_l20_n55(x)
+ else
+ fun_l20_n70(x)
+ end
+end
+
+def fun_l19_n905(x)
+ if (x < 1)
+ fun_l20_n674(x)
+ else
+ fun_l20_n713(x)
+ end
+end
+
+def fun_l19_n906(x)
+ if (x < 1)
+ fun_l20_n957(x)
+ else
+ fun_l20_n962(x)
+ end
+end
+
+def fun_l19_n907(x)
+ if (x < 1)
+ fun_l20_n656(x)
+ else
+ fun_l20_n582(x)
+ end
+end
+
+def fun_l19_n908(x)
+ if (x < 1)
+ fun_l20_n3(x)
+ else
+ fun_l20_n323(x)
+ end
+end
+
+def fun_l19_n909(x)
+ if (x < 1)
+ fun_l20_n763(x)
+ else
+ fun_l20_n387(x)
+ end
+end
+
+def fun_l19_n910(x)
+ if (x < 1)
+ fun_l20_n434(x)
+ else
+ fun_l20_n113(x)
+ end
+end
+
+def fun_l19_n911(x)
+ if (x < 1)
+ fun_l20_n713(x)
+ else
+ fun_l20_n4(x)
+ end
+end
+
+def fun_l19_n912(x)
+ if (x < 1)
+ fun_l20_n313(x)
+ else
+ fun_l20_n776(x)
+ end
+end
+
+def fun_l19_n913(x)
+ if (x < 1)
+ fun_l20_n541(x)
+ else
+ fun_l20_n80(x)
+ end
+end
+
+def fun_l19_n914(x)
+ if (x < 1)
+ fun_l20_n131(x)
+ else
+ fun_l20_n982(x)
+ end
+end
+
+def fun_l19_n915(x)
+ if (x < 1)
+ fun_l20_n558(x)
+ else
+ fun_l20_n538(x)
+ end
+end
+
+def fun_l19_n916(x)
+ if (x < 1)
+ fun_l20_n715(x)
+ else
+ fun_l20_n401(x)
+ end
+end
+
+def fun_l19_n917(x)
+ if (x < 1)
+ fun_l20_n820(x)
+ else
+ fun_l20_n576(x)
+ end
+end
+
+def fun_l19_n918(x)
+ if (x < 1)
+ fun_l20_n602(x)
+ else
+ fun_l20_n158(x)
+ end
+end
+
+def fun_l19_n919(x)
+ if (x < 1)
+ fun_l20_n127(x)
+ else
+ fun_l20_n493(x)
+ end
+end
+
+def fun_l19_n920(x)
+ if (x < 1)
+ fun_l20_n719(x)
+ else
+ fun_l20_n895(x)
+ end
+end
+
+def fun_l19_n921(x)
+ if (x < 1)
+ fun_l20_n277(x)
+ else
+ fun_l20_n588(x)
+ end
+end
+
+def fun_l19_n922(x)
+ if (x < 1)
+ fun_l20_n479(x)
+ else
+ fun_l20_n799(x)
+ end
+end
+
+def fun_l19_n923(x)
+ if (x < 1)
+ fun_l20_n879(x)
+ else
+ fun_l20_n809(x)
+ end
+end
+
+def fun_l19_n924(x)
+ if (x < 1)
+ fun_l20_n574(x)
+ else
+ fun_l20_n756(x)
+ end
+end
+
+def fun_l19_n925(x)
+ if (x < 1)
+ fun_l20_n774(x)
+ else
+ fun_l20_n806(x)
+ end
+end
+
+def fun_l19_n926(x)
+ if (x < 1)
+ fun_l20_n804(x)
+ else
+ fun_l20_n87(x)
+ end
+end
+
+def fun_l19_n927(x)
+ if (x < 1)
+ fun_l20_n647(x)
+ else
+ fun_l20_n497(x)
+ end
+end
+
+def fun_l19_n928(x)
+ if (x < 1)
+ fun_l20_n134(x)
+ else
+ fun_l20_n690(x)
+ end
+end
+
+def fun_l19_n929(x)
+ if (x < 1)
+ fun_l20_n981(x)
+ else
+ fun_l20_n590(x)
+ end
+end
+
+def fun_l19_n930(x)
+ if (x < 1)
+ fun_l20_n393(x)
+ else
+ fun_l20_n585(x)
+ end
+end
+
+def fun_l19_n931(x)
+ if (x < 1)
+ fun_l20_n408(x)
+ else
+ fun_l20_n753(x)
+ end
+end
+
+def fun_l19_n932(x)
+ if (x < 1)
+ fun_l20_n133(x)
+ else
+ fun_l20_n289(x)
+ end
+end
+
+def fun_l19_n933(x)
+ if (x < 1)
+ fun_l20_n552(x)
+ else
+ fun_l20_n867(x)
+ end
+end
+
+def fun_l19_n934(x)
+ if (x < 1)
+ fun_l20_n232(x)
+ else
+ fun_l20_n134(x)
+ end
+end
+
+def fun_l19_n935(x)
+ if (x < 1)
+ fun_l20_n45(x)
+ else
+ fun_l20_n100(x)
+ end
+end
+
+def fun_l19_n936(x)
+ if (x < 1)
+ fun_l20_n263(x)
+ else
+ fun_l20_n686(x)
+ end
+end
+
+def fun_l19_n937(x)
+ if (x < 1)
+ fun_l20_n63(x)
+ else
+ fun_l20_n401(x)
+ end
+end
+
+def fun_l19_n938(x)
+ if (x < 1)
+ fun_l20_n564(x)
+ else
+ fun_l20_n265(x)
+ end
+end
+
+def fun_l19_n939(x)
+ if (x < 1)
+ fun_l20_n414(x)
+ else
+ fun_l20_n32(x)
+ end
+end
+
+def fun_l19_n940(x)
+ if (x < 1)
+ fun_l20_n686(x)
+ else
+ fun_l20_n116(x)
+ end
+end
+
+def fun_l19_n941(x)
+ if (x < 1)
+ fun_l20_n812(x)
+ else
+ fun_l20_n438(x)
+ end
+end
+
+def fun_l19_n942(x)
+ if (x < 1)
+ fun_l20_n365(x)
+ else
+ fun_l20_n95(x)
+ end
+end
+
+def fun_l19_n943(x)
+ if (x < 1)
+ fun_l20_n159(x)
+ else
+ fun_l20_n763(x)
+ end
+end
+
+def fun_l19_n944(x)
+ if (x < 1)
+ fun_l20_n844(x)
+ else
+ fun_l20_n958(x)
+ end
+end
+
+def fun_l19_n945(x)
+ if (x < 1)
+ fun_l20_n730(x)
+ else
+ fun_l20_n814(x)
+ end
+end
+
+def fun_l19_n946(x)
+ if (x < 1)
+ fun_l20_n963(x)
+ else
+ fun_l20_n2(x)
+ end
+end
+
+def fun_l19_n947(x)
+ if (x < 1)
+ fun_l20_n285(x)
+ else
+ fun_l20_n605(x)
+ end
+end
+
+def fun_l19_n948(x)
+ if (x < 1)
+ fun_l20_n869(x)
+ else
+ fun_l20_n409(x)
+ end
+end
+
+def fun_l19_n949(x)
+ if (x < 1)
+ fun_l20_n313(x)
+ else
+ fun_l20_n854(x)
+ end
+end
+
+def fun_l19_n950(x)
+ if (x < 1)
+ fun_l20_n802(x)
+ else
+ fun_l20_n411(x)
+ end
+end
+
+def fun_l19_n951(x)
+ if (x < 1)
+ fun_l20_n273(x)
+ else
+ fun_l20_n100(x)
+ end
+end
+
+def fun_l19_n952(x)
+ if (x < 1)
+ fun_l20_n283(x)
+ else
+ fun_l20_n253(x)
+ end
+end
+
+def fun_l19_n953(x)
+ if (x < 1)
+ fun_l20_n137(x)
+ else
+ fun_l20_n535(x)
+ end
+end
+
+def fun_l19_n954(x)
+ if (x < 1)
+ fun_l20_n504(x)
+ else
+ fun_l20_n849(x)
+ end
+end
+
+def fun_l19_n955(x)
+ if (x < 1)
+ fun_l20_n568(x)
+ else
+ fun_l20_n208(x)
+ end
+end
+
+def fun_l19_n956(x)
+ if (x < 1)
+ fun_l20_n775(x)
+ else
+ fun_l20_n781(x)
+ end
+end
+
+def fun_l19_n957(x)
+ if (x < 1)
+ fun_l20_n144(x)
+ else
+ fun_l20_n411(x)
+ end
+end
+
+def fun_l19_n958(x)
+ if (x < 1)
+ fun_l20_n791(x)
+ else
+ fun_l20_n720(x)
+ end
+end
+
+def fun_l19_n959(x)
+ if (x < 1)
+ fun_l20_n268(x)
+ else
+ fun_l20_n251(x)
+ end
+end
+
+def fun_l19_n960(x)
+ if (x < 1)
+ fun_l20_n661(x)
+ else
+ fun_l20_n114(x)
+ end
+end
+
+def fun_l19_n961(x)
+ if (x < 1)
+ fun_l20_n559(x)
+ else
+ fun_l20_n177(x)
+ end
+end
+
+def fun_l19_n962(x)
+ if (x < 1)
+ fun_l20_n536(x)
+ else
+ fun_l20_n671(x)
+ end
+end
+
+def fun_l19_n963(x)
+ if (x < 1)
+ fun_l20_n64(x)
+ else
+ fun_l20_n656(x)
+ end
+end
+
+def fun_l19_n964(x)
+ if (x < 1)
+ fun_l20_n618(x)
+ else
+ fun_l20_n837(x)
+ end
+end
+
+def fun_l19_n965(x)
+ if (x < 1)
+ fun_l20_n201(x)
+ else
+ fun_l20_n562(x)
+ end
+end
+
+def fun_l19_n966(x)
+ if (x < 1)
+ fun_l20_n562(x)
+ else
+ fun_l20_n632(x)
+ end
+end
+
+def fun_l19_n967(x)
+ if (x < 1)
+ fun_l20_n183(x)
+ else
+ fun_l20_n589(x)
+ end
+end
+
+def fun_l19_n968(x)
+ if (x < 1)
+ fun_l20_n971(x)
+ else
+ fun_l20_n619(x)
+ end
+end
+
+def fun_l19_n969(x)
+ if (x < 1)
+ fun_l20_n826(x)
+ else
+ fun_l20_n745(x)
+ end
+end
+
+def fun_l19_n970(x)
+ if (x < 1)
+ fun_l20_n140(x)
+ else
+ fun_l20_n370(x)
+ end
+end
+
+def fun_l19_n971(x)
+ if (x < 1)
+ fun_l20_n26(x)
+ else
+ fun_l20_n243(x)
+ end
+end
+
+def fun_l19_n972(x)
+ if (x < 1)
+ fun_l20_n375(x)
+ else
+ fun_l20_n6(x)
+ end
+end
+
+def fun_l19_n973(x)
+ if (x < 1)
+ fun_l20_n289(x)
+ else
+ fun_l20_n266(x)
+ end
+end
+
+def fun_l19_n974(x)
+ if (x < 1)
+ fun_l20_n932(x)
+ else
+ fun_l20_n602(x)
+ end
+end
+
+def fun_l19_n975(x)
+ if (x < 1)
+ fun_l20_n272(x)
+ else
+ fun_l20_n671(x)
+ end
+end
+
+def fun_l19_n976(x)
+ if (x < 1)
+ fun_l20_n653(x)
+ else
+ fun_l20_n201(x)
+ end
+end
+
+def fun_l19_n977(x)
+ if (x < 1)
+ fun_l20_n785(x)
+ else
+ fun_l20_n976(x)
+ end
+end
+
+def fun_l19_n978(x)
+ if (x < 1)
+ fun_l20_n212(x)
+ else
+ fun_l20_n601(x)
+ end
+end
+
+def fun_l19_n979(x)
+ if (x < 1)
+ fun_l20_n218(x)
+ else
+ fun_l20_n914(x)
+ end
+end
+
+def fun_l19_n980(x)
+ if (x < 1)
+ fun_l20_n109(x)
+ else
+ fun_l20_n147(x)
+ end
+end
+
+def fun_l19_n981(x)
+ if (x < 1)
+ fun_l20_n46(x)
+ else
+ fun_l20_n276(x)
+ end
+end
+
+def fun_l19_n982(x)
+ if (x < 1)
+ fun_l20_n727(x)
+ else
+ fun_l20_n545(x)
+ end
+end
+
+def fun_l19_n983(x)
+ if (x < 1)
+ fun_l20_n679(x)
+ else
+ fun_l20_n731(x)
+ end
+end
+
+def fun_l19_n984(x)
+ if (x < 1)
+ fun_l20_n291(x)
+ else
+ fun_l20_n294(x)
+ end
+end
+
+def fun_l19_n985(x)
+ if (x < 1)
+ fun_l20_n741(x)
+ else
+ fun_l20_n508(x)
+ end
+end
+
+def fun_l19_n986(x)
+ if (x < 1)
+ fun_l20_n417(x)
+ else
+ fun_l20_n169(x)
+ end
+end
+
+def fun_l19_n987(x)
+ if (x < 1)
+ fun_l20_n685(x)
+ else
+ fun_l20_n871(x)
+ end
+end
+
+def fun_l19_n988(x)
+ if (x < 1)
+ fun_l20_n386(x)
+ else
+ fun_l20_n616(x)
+ end
+end
+
+def fun_l19_n989(x)
+ if (x < 1)
+ fun_l20_n317(x)
+ else
+ fun_l20_n954(x)
+ end
+end
+
+def fun_l19_n990(x)
+ if (x < 1)
+ fun_l20_n954(x)
+ else
+ fun_l20_n974(x)
+ end
+end
+
+def fun_l19_n991(x)
+ if (x < 1)
+ fun_l20_n251(x)
+ else
+ fun_l20_n56(x)
+ end
+end
+
+def fun_l19_n992(x)
+ if (x < 1)
+ fun_l20_n775(x)
+ else
+ fun_l20_n175(x)
+ end
+end
+
+def fun_l19_n993(x)
+ if (x < 1)
+ fun_l20_n578(x)
+ else
+ fun_l20_n217(x)
+ end
+end
+
+def fun_l19_n994(x)
+ if (x < 1)
+ fun_l20_n483(x)
+ else
+ fun_l20_n279(x)
+ end
+end
+
+def fun_l19_n995(x)
+ if (x < 1)
+ fun_l20_n316(x)
+ else
+ fun_l20_n343(x)
+ end
+end
+
+def fun_l19_n996(x)
+ if (x < 1)
+ fun_l20_n618(x)
+ else
+ fun_l20_n995(x)
+ end
+end
+
+def fun_l19_n997(x)
+ if (x < 1)
+ fun_l20_n396(x)
+ else
+ fun_l20_n540(x)
+ end
+end
+
+def fun_l19_n998(x)
+ if (x < 1)
+ fun_l20_n184(x)
+ else
+ fun_l20_n380(x)
+ end
+end
+
+def fun_l19_n999(x)
+ if (x < 1)
+ fun_l20_n360(x)
+ else
+ fun_l20_n48(x)
+ end
+end
+
+def fun_l20_n0(x)
+ if (x < 1)
+ fun_l21_n609(x)
+ else
+ fun_l21_n305(x)
+ end
+end
+
+def fun_l20_n1(x)
+ if (x < 1)
+ fun_l21_n937(x)
+ else
+ fun_l21_n174(x)
+ end
+end
+
+def fun_l20_n2(x)
+ if (x < 1)
+ fun_l21_n939(x)
+ else
+ fun_l21_n174(x)
+ end
+end
+
+def fun_l20_n3(x)
+ if (x < 1)
+ fun_l21_n163(x)
+ else
+ fun_l21_n572(x)
+ end
+end
+
+def fun_l20_n4(x)
+ if (x < 1)
+ fun_l21_n43(x)
+ else
+ fun_l21_n384(x)
+ end
+end
+
+def fun_l20_n5(x)
+ if (x < 1)
+ fun_l21_n565(x)
+ else
+ fun_l21_n788(x)
+ end
+end
+
+def fun_l20_n6(x)
+ if (x < 1)
+ fun_l21_n539(x)
+ else
+ fun_l21_n806(x)
+ end
+end
+
+def fun_l20_n7(x)
+ if (x < 1)
+ fun_l21_n395(x)
+ else
+ fun_l21_n9(x)
+ end
+end
+
+def fun_l20_n8(x)
+ if (x < 1)
+ fun_l21_n231(x)
+ else
+ fun_l21_n788(x)
+ end
+end
+
+def fun_l20_n9(x)
+ if (x < 1)
+ fun_l21_n511(x)
+ else
+ fun_l21_n236(x)
+ end
+end
+
+def fun_l20_n10(x)
+ if (x < 1)
+ fun_l21_n141(x)
+ else
+ fun_l21_n34(x)
+ end
+end
+
+def fun_l20_n11(x)
+ if (x < 1)
+ fun_l21_n801(x)
+ else
+ fun_l21_n760(x)
+ end
+end
+
+def fun_l20_n12(x)
+ if (x < 1)
+ fun_l21_n627(x)
+ else
+ fun_l21_n289(x)
+ end
+end
+
+def fun_l20_n13(x)
+ if (x < 1)
+ fun_l21_n795(x)
+ else
+ fun_l21_n183(x)
+ end
+end
+
+def fun_l20_n14(x)
+ if (x < 1)
+ fun_l21_n384(x)
+ else
+ fun_l21_n3(x)
+ end
+end
+
+def fun_l20_n15(x)
+ if (x < 1)
+ fun_l21_n823(x)
+ else
+ fun_l21_n312(x)
+ end
+end
+
+def fun_l20_n16(x)
+ if (x < 1)
+ fun_l21_n727(x)
+ else
+ fun_l21_n897(x)
+ end
+end
+
+def fun_l20_n17(x)
+ if (x < 1)
+ fun_l21_n710(x)
+ else
+ fun_l21_n532(x)
+ end
+end
+
+def fun_l20_n18(x)
+ if (x < 1)
+ fun_l21_n373(x)
+ else
+ fun_l21_n807(x)
+ end
+end
+
+def fun_l20_n19(x)
+ if (x < 1)
+ fun_l21_n164(x)
+ else
+ fun_l21_n472(x)
+ end
+end
+
+def fun_l20_n20(x)
+ if (x < 1)
+ fun_l21_n522(x)
+ else
+ fun_l21_n264(x)
+ end
+end
+
+def fun_l20_n21(x)
+ if (x < 1)
+ fun_l21_n122(x)
+ else
+ fun_l21_n897(x)
+ end
+end
+
+def fun_l20_n22(x)
+ if (x < 1)
+ fun_l21_n292(x)
+ else
+ fun_l21_n873(x)
+ end
+end
+
+def fun_l20_n23(x)
+ if (x < 1)
+ fun_l21_n461(x)
+ else
+ fun_l21_n681(x)
+ end
+end
+
+def fun_l20_n24(x)
+ if (x < 1)
+ fun_l21_n80(x)
+ else
+ fun_l21_n484(x)
+ end
+end
+
+def fun_l20_n25(x)
+ if (x < 1)
+ fun_l21_n7(x)
+ else
+ fun_l21_n444(x)
+ end
+end
+
+def fun_l20_n26(x)
+ if (x < 1)
+ fun_l21_n269(x)
+ else
+ fun_l21_n58(x)
+ end
+end
+
+def fun_l20_n27(x)
+ if (x < 1)
+ fun_l21_n318(x)
+ else
+ fun_l21_n224(x)
+ end
+end
+
+def fun_l20_n28(x)
+ if (x < 1)
+ fun_l21_n437(x)
+ else
+ fun_l21_n621(x)
+ end
+end
+
+def fun_l20_n29(x)
+ if (x < 1)
+ fun_l21_n907(x)
+ else
+ fun_l21_n32(x)
+ end
+end
+
+def fun_l20_n30(x)
+ if (x < 1)
+ fun_l21_n525(x)
+ else
+ fun_l21_n10(x)
+ end
+end
+
+def fun_l20_n31(x)
+ if (x < 1)
+ fun_l21_n278(x)
+ else
+ fun_l21_n243(x)
+ end
+end
+
+def fun_l20_n32(x)
+ if (x < 1)
+ fun_l21_n865(x)
+ else
+ fun_l21_n236(x)
+ end
+end
+
+def fun_l20_n33(x)
+ if (x < 1)
+ fun_l21_n732(x)
+ else
+ fun_l21_n472(x)
+ end
+end
+
+def fun_l20_n34(x)
+ if (x < 1)
+ fun_l21_n331(x)
+ else
+ fun_l21_n162(x)
+ end
+end
+
+def fun_l20_n35(x)
+ if (x < 1)
+ fun_l21_n217(x)
+ else
+ fun_l21_n877(x)
+ end
+end
+
+def fun_l20_n36(x)
+ if (x < 1)
+ fun_l21_n125(x)
+ else
+ fun_l21_n683(x)
+ end
+end
+
+def fun_l20_n37(x)
+ if (x < 1)
+ fun_l21_n236(x)
+ else
+ fun_l21_n79(x)
+ end
+end
+
+def fun_l20_n38(x)
+ if (x < 1)
+ fun_l21_n308(x)
+ else
+ fun_l21_n995(x)
+ end
+end
+
+def fun_l20_n39(x)
+ if (x < 1)
+ fun_l21_n923(x)
+ else
+ fun_l21_n956(x)
+ end
+end
+
+def fun_l20_n40(x)
+ if (x < 1)
+ fun_l21_n505(x)
+ else
+ fun_l21_n47(x)
+ end
+end
+
+def fun_l20_n41(x)
+ if (x < 1)
+ fun_l21_n24(x)
+ else
+ fun_l21_n894(x)
+ end
+end
+
+def fun_l20_n42(x)
+ if (x < 1)
+ fun_l21_n824(x)
+ else
+ fun_l21_n106(x)
+ end
+end
+
+def fun_l20_n43(x)
+ if (x < 1)
+ fun_l21_n898(x)
+ else
+ fun_l21_n576(x)
+ end
+end
+
+def fun_l20_n44(x)
+ if (x < 1)
+ fun_l21_n231(x)
+ else
+ fun_l21_n689(x)
+ end
+end
+
+def fun_l20_n45(x)
+ if (x < 1)
+ fun_l21_n340(x)
+ else
+ fun_l21_n887(x)
+ end
+end
+
+def fun_l20_n46(x)
+ if (x < 1)
+ fun_l21_n157(x)
+ else
+ fun_l21_n551(x)
+ end
+end
+
+def fun_l20_n47(x)
+ if (x < 1)
+ fun_l21_n904(x)
+ else
+ fun_l21_n975(x)
+ end
+end
+
+def fun_l20_n48(x)
+ if (x < 1)
+ fun_l21_n392(x)
+ else
+ fun_l21_n882(x)
+ end
+end
+
+def fun_l20_n49(x)
+ if (x < 1)
+ fun_l21_n484(x)
+ else
+ fun_l21_n810(x)
+ end
+end
+
+def fun_l20_n50(x)
+ if (x < 1)
+ fun_l21_n517(x)
+ else
+ fun_l21_n434(x)
+ end
+end
+
+def fun_l20_n51(x)
+ if (x < 1)
+ fun_l21_n115(x)
+ else
+ fun_l21_n975(x)
+ end
+end
+
+def fun_l20_n52(x)
+ if (x < 1)
+ fun_l21_n633(x)
+ else
+ fun_l21_n799(x)
+ end
+end
+
+def fun_l20_n53(x)
+ if (x < 1)
+ fun_l21_n938(x)
+ else
+ fun_l21_n321(x)
+ end
+end
+
+def fun_l20_n54(x)
+ if (x < 1)
+ fun_l21_n98(x)
+ else
+ fun_l21_n343(x)
+ end
+end
+
+def fun_l20_n55(x)
+ if (x < 1)
+ fun_l21_n851(x)
+ else
+ fun_l21_n794(x)
+ end
+end
+
+def fun_l20_n56(x)
+ if (x < 1)
+ fun_l21_n119(x)
+ else
+ fun_l21_n649(x)
+ end
+end
+
+def fun_l20_n57(x)
+ if (x < 1)
+ fun_l21_n799(x)
+ else
+ fun_l21_n397(x)
+ end
+end
+
+def fun_l20_n58(x)
+ if (x < 1)
+ fun_l21_n429(x)
+ else
+ fun_l21_n781(x)
+ end
+end
+
+def fun_l20_n59(x)
+ if (x < 1)
+ fun_l21_n862(x)
+ else
+ fun_l21_n870(x)
+ end
+end
+
+def fun_l20_n60(x)
+ if (x < 1)
+ fun_l21_n864(x)
+ else
+ fun_l21_n333(x)
+ end
+end
+
+def fun_l20_n61(x)
+ if (x < 1)
+ fun_l21_n673(x)
+ else
+ fun_l21_n481(x)
+ end
+end
+
+def fun_l20_n62(x)
+ if (x < 1)
+ fun_l21_n193(x)
+ else
+ fun_l21_n524(x)
+ end
+end
+
+def fun_l20_n63(x)
+ if (x < 1)
+ fun_l21_n976(x)
+ else
+ fun_l21_n0(x)
+ end
+end
+
+def fun_l20_n64(x)
+ if (x < 1)
+ fun_l21_n804(x)
+ else
+ fun_l21_n833(x)
+ end
+end
+
+def fun_l20_n65(x)
+ if (x < 1)
+ fun_l21_n20(x)
+ else
+ fun_l21_n285(x)
+ end
+end
+
+def fun_l20_n66(x)
+ if (x < 1)
+ fun_l21_n70(x)
+ else
+ fun_l21_n932(x)
+ end
+end
+
+def fun_l20_n67(x)
+ if (x < 1)
+ fun_l21_n213(x)
+ else
+ fun_l21_n196(x)
+ end
+end
+
+def fun_l20_n68(x)
+ if (x < 1)
+ fun_l21_n806(x)
+ else
+ fun_l21_n322(x)
+ end
+end
+
+def fun_l20_n69(x)
+ if (x < 1)
+ fun_l21_n583(x)
+ else
+ fun_l21_n62(x)
+ end
+end
+
+def fun_l20_n70(x)
+ if (x < 1)
+ fun_l21_n141(x)
+ else
+ fun_l21_n490(x)
+ end
+end
+
+def fun_l20_n71(x)
+ if (x < 1)
+ fun_l21_n995(x)
+ else
+ fun_l21_n398(x)
+ end
+end
+
+def fun_l20_n72(x)
+ if (x < 1)
+ fun_l21_n436(x)
+ else
+ fun_l21_n490(x)
+ end
+end
+
+def fun_l20_n73(x)
+ if (x < 1)
+ fun_l21_n585(x)
+ else
+ fun_l21_n275(x)
+ end
+end
+
+def fun_l20_n74(x)
+ if (x < 1)
+ fun_l21_n120(x)
+ else
+ fun_l21_n968(x)
+ end
+end
+
+def fun_l20_n75(x)
+ if (x < 1)
+ fun_l21_n562(x)
+ else
+ fun_l21_n896(x)
+ end
+end
+
+def fun_l20_n76(x)
+ if (x < 1)
+ fun_l21_n794(x)
+ else
+ fun_l21_n224(x)
+ end
+end
+
+def fun_l20_n77(x)
+ if (x < 1)
+ fun_l21_n71(x)
+ else
+ fun_l21_n870(x)
+ end
+end
+
+def fun_l20_n78(x)
+ if (x < 1)
+ fun_l21_n0(x)
+ else
+ fun_l21_n41(x)
+ end
+end
+
+def fun_l20_n79(x)
+ if (x < 1)
+ fun_l21_n325(x)
+ else
+ fun_l21_n814(x)
+ end
+end
+
+def fun_l20_n80(x)
+ if (x < 1)
+ fun_l21_n963(x)
+ else
+ fun_l21_n792(x)
+ end
+end
+
+def fun_l20_n81(x)
+ if (x < 1)
+ fun_l21_n415(x)
+ else
+ fun_l21_n200(x)
+ end
+end
+
+def fun_l20_n82(x)
+ if (x < 1)
+ fun_l21_n438(x)
+ else
+ fun_l21_n506(x)
+ end
+end
+
+def fun_l20_n83(x)
+ if (x < 1)
+ fun_l21_n283(x)
+ else
+ fun_l21_n708(x)
+ end
+end
+
+def fun_l20_n84(x)
+ if (x < 1)
+ fun_l21_n968(x)
+ else
+ fun_l21_n80(x)
+ end
+end
+
+def fun_l20_n85(x)
+ if (x < 1)
+ fun_l21_n839(x)
+ else
+ fun_l21_n808(x)
+ end
+end
+
+def fun_l20_n86(x)
+ if (x < 1)
+ fun_l21_n653(x)
+ else
+ fun_l21_n343(x)
+ end
+end
+
+def fun_l20_n87(x)
+ if (x < 1)
+ fun_l21_n580(x)
+ else
+ fun_l21_n652(x)
+ end
+end
+
+def fun_l20_n88(x)
+ if (x < 1)
+ fun_l21_n64(x)
+ else
+ fun_l21_n899(x)
+ end
+end
+
+def fun_l20_n89(x)
+ if (x < 1)
+ fun_l21_n325(x)
+ else
+ fun_l21_n645(x)
+ end
+end
+
+def fun_l20_n90(x)
+ if (x < 1)
+ fun_l21_n251(x)
+ else
+ fun_l21_n210(x)
+ end
+end
+
+def fun_l20_n91(x)
+ if (x < 1)
+ fun_l21_n943(x)
+ else
+ fun_l21_n451(x)
+ end
+end
+
+def fun_l20_n92(x)
+ if (x < 1)
+ fun_l21_n95(x)
+ else
+ fun_l21_n937(x)
+ end
+end
+
+def fun_l20_n93(x)
+ if (x < 1)
+ fun_l21_n263(x)
+ else
+ fun_l21_n107(x)
+ end
+end
+
+def fun_l20_n94(x)
+ if (x < 1)
+ fun_l21_n438(x)
+ else
+ fun_l21_n213(x)
+ end
+end
+
+def fun_l20_n95(x)
+ if (x < 1)
+ fun_l21_n283(x)
+ else
+ fun_l21_n203(x)
+ end
+end
+
+def fun_l20_n96(x)
+ if (x < 1)
+ fun_l21_n809(x)
+ else
+ fun_l21_n154(x)
+ end
+end
+
+def fun_l20_n97(x)
+ if (x < 1)
+ fun_l21_n513(x)
+ else
+ fun_l21_n15(x)
+ end
+end
+
+def fun_l20_n98(x)
+ if (x < 1)
+ fun_l21_n854(x)
+ else
+ fun_l21_n679(x)
+ end
+end
+
+def fun_l20_n99(x)
+ if (x < 1)
+ fun_l21_n102(x)
+ else
+ fun_l21_n546(x)
+ end
+end
+
+def fun_l20_n100(x)
+ if (x < 1)
+ fun_l21_n790(x)
+ else
+ fun_l21_n143(x)
+ end
+end
+
+def fun_l20_n101(x)
+ if (x < 1)
+ fun_l21_n835(x)
+ else
+ fun_l21_n78(x)
+ end
+end
+
+def fun_l20_n102(x)
+ if (x < 1)
+ fun_l21_n96(x)
+ else
+ fun_l21_n995(x)
+ end
+end
+
+def fun_l20_n103(x)
+ if (x < 1)
+ fun_l21_n445(x)
+ else
+ fun_l21_n332(x)
+ end
+end
+
+def fun_l20_n104(x)
+ if (x < 1)
+ fun_l21_n532(x)
+ else
+ fun_l21_n509(x)
+ end
+end
+
+def fun_l20_n105(x)
+ if (x < 1)
+ fun_l21_n592(x)
+ else
+ fun_l21_n237(x)
+ end
+end
+
+def fun_l20_n106(x)
+ if (x < 1)
+ fun_l21_n837(x)
+ else
+ fun_l21_n13(x)
+ end
+end
+
+def fun_l20_n107(x)
+ if (x < 1)
+ fun_l21_n518(x)
+ else
+ fun_l21_n463(x)
+ end
+end
+
+def fun_l20_n108(x)
+ if (x < 1)
+ fun_l21_n373(x)
+ else
+ fun_l21_n597(x)
+ end
+end
+
+def fun_l20_n109(x)
+ if (x < 1)
+ fun_l21_n832(x)
+ else
+ fun_l21_n784(x)
+ end
+end
+
+def fun_l20_n110(x)
+ if (x < 1)
+ fun_l21_n408(x)
+ else
+ fun_l21_n738(x)
+ end
+end
+
+def fun_l20_n111(x)
+ if (x < 1)
+ fun_l21_n243(x)
+ else
+ fun_l21_n96(x)
+ end
+end
+
+def fun_l20_n112(x)
+ if (x < 1)
+ fun_l21_n251(x)
+ else
+ fun_l21_n151(x)
+ end
+end
+
+def fun_l20_n113(x)
+ if (x < 1)
+ fun_l21_n970(x)
+ else
+ fun_l21_n329(x)
+ end
+end
+
+def fun_l20_n114(x)
+ if (x < 1)
+ fun_l21_n691(x)
+ else
+ fun_l21_n309(x)
+ end
+end
+
+def fun_l20_n115(x)
+ if (x < 1)
+ fun_l21_n250(x)
+ else
+ fun_l21_n927(x)
+ end
+end
+
+def fun_l20_n116(x)
+ if (x < 1)
+ fun_l21_n819(x)
+ else
+ fun_l21_n49(x)
+ end
+end
+
+def fun_l20_n117(x)
+ if (x < 1)
+ fun_l21_n761(x)
+ else
+ fun_l21_n91(x)
+ end
+end
+
+def fun_l20_n118(x)
+ if (x < 1)
+ fun_l21_n170(x)
+ else
+ fun_l21_n317(x)
+ end
+end
+
+def fun_l20_n119(x)
+ if (x < 1)
+ fun_l21_n199(x)
+ else
+ fun_l21_n406(x)
+ end
+end
+
+def fun_l20_n120(x)
+ if (x < 1)
+ fun_l21_n983(x)
+ else
+ fun_l21_n742(x)
+ end
+end
+
+def fun_l20_n121(x)
+ if (x < 1)
+ fun_l21_n428(x)
+ else
+ fun_l21_n887(x)
+ end
+end
+
+def fun_l20_n122(x)
+ if (x < 1)
+ fun_l21_n369(x)
+ else
+ fun_l21_n64(x)
+ end
+end
+
+def fun_l20_n123(x)
+ if (x < 1)
+ fun_l21_n727(x)
+ else
+ fun_l21_n484(x)
+ end
+end
+
+def fun_l20_n124(x)
+ if (x < 1)
+ fun_l21_n310(x)
+ else
+ fun_l21_n198(x)
+ end
+end
+
+def fun_l20_n125(x)
+ if (x < 1)
+ fun_l21_n747(x)
+ else
+ fun_l21_n935(x)
+ end
+end
+
+def fun_l20_n126(x)
+ if (x < 1)
+ fun_l21_n389(x)
+ else
+ fun_l21_n966(x)
+ end
+end
+
+def fun_l20_n127(x)
+ if (x < 1)
+ fun_l21_n852(x)
+ else
+ fun_l21_n128(x)
+ end
+end
+
+def fun_l20_n128(x)
+ if (x < 1)
+ fun_l21_n10(x)
+ else
+ fun_l21_n376(x)
+ end
+end
+
+def fun_l20_n129(x)
+ if (x < 1)
+ fun_l21_n413(x)
+ else
+ fun_l21_n465(x)
+ end
+end
+
+def fun_l20_n130(x)
+ if (x < 1)
+ fun_l21_n536(x)
+ else
+ fun_l21_n689(x)
+ end
+end
+
+def fun_l20_n131(x)
+ if (x < 1)
+ fun_l21_n707(x)
+ else
+ fun_l21_n793(x)
+ end
+end
+
+def fun_l20_n132(x)
+ if (x < 1)
+ fun_l21_n328(x)
+ else
+ fun_l21_n56(x)
+ end
+end
+
+def fun_l20_n133(x)
+ if (x < 1)
+ fun_l21_n318(x)
+ else
+ fun_l21_n570(x)
+ end
+end
+
+def fun_l20_n134(x)
+ if (x < 1)
+ fun_l21_n656(x)
+ else
+ fun_l21_n187(x)
+ end
+end
+
+def fun_l20_n135(x)
+ if (x < 1)
+ fun_l21_n259(x)
+ else
+ fun_l21_n718(x)
+ end
+end
+
+def fun_l20_n136(x)
+ if (x < 1)
+ fun_l21_n284(x)
+ else
+ fun_l21_n167(x)
+ end
+end
+
+def fun_l20_n137(x)
+ if (x < 1)
+ fun_l21_n788(x)
+ else
+ fun_l21_n595(x)
+ end
+end
+
+def fun_l20_n138(x)
+ if (x < 1)
+ fun_l21_n431(x)
+ else
+ fun_l21_n620(x)
+ end
+end
+
+def fun_l20_n139(x)
+ if (x < 1)
+ fun_l21_n365(x)
+ else
+ fun_l21_n995(x)
+ end
+end
+
+def fun_l20_n140(x)
+ if (x < 1)
+ fun_l21_n614(x)
+ else
+ fun_l21_n79(x)
+ end
+end
+
+def fun_l20_n141(x)
+ if (x < 1)
+ fun_l21_n138(x)
+ else
+ fun_l21_n655(x)
+ end
+end
+
+def fun_l20_n142(x)
+ if (x < 1)
+ fun_l21_n155(x)
+ else
+ fun_l21_n34(x)
+ end
+end
+
+def fun_l20_n143(x)
+ if (x < 1)
+ fun_l21_n829(x)
+ else
+ fun_l21_n703(x)
+ end
+end
+
+def fun_l20_n144(x)
+ if (x < 1)
+ fun_l21_n290(x)
+ else
+ fun_l21_n279(x)
+ end
+end
+
+def fun_l20_n145(x)
+ if (x < 1)
+ fun_l21_n825(x)
+ else
+ fun_l21_n720(x)
+ end
+end
+
+def fun_l20_n146(x)
+ if (x < 1)
+ fun_l21_n678(x)
+ else
+ fun_l21_n347(x)
+ end
+end
+
+def fun_l20_n147(x)
+ if (x < 1)
+ fun_l21_n967(x)
+ else
+ fun_l21_n133(x)
+ end
+end
+
+def fun_l20_n148(x)
+ if (x < 1)
+ fun_l21_n935(x)
+ else
+ fun_l21_n438(x)
+ end
+end
+
+def fun_l20_n149(x)
+ if (x < 1)
+ fun_l21_n14(x)
+ else
+ fun_l21_n233(x)
+ end
+end
+
+def fun_l20_n150(x)
+ if (x < 1)
+ fun_l21_n42(x)
+ else
+ fun_l21_n507(x)
+ end
+end
+
+def fun_l20_n151(x)
+ if (x < 1)
+ fun_l21_n33(x)
+ else
+ fun_l21_n404(x)
+ end
+end
+
+def fun_l20_n152(x)
+ if (x < 1)
+ fun_l21_n897(x)
+ else
+ fun_l21_n972(x)
+ end
+end
+
+def fun_l20_n153(x)
+ if (x < 1)
+ fun_l21_n221(x)
+ else
+ fun_l21_n718(x)
+ end
+end
+
+def fun_l20_n154(x)
+ if (x < 1)
+ fun_l21_n737(x)
+ else
+ fun_l21_n257(x)
+ end
+end
+
+def fun_l20_n155(x)
+ if (x < 1)
+ fun_l21_n465(x)
+ else
+ fun_l21_n917(x)
+ end
+end
+
+def fun_l20_n156(x)
+ if (x < 1)
+ fun_l21_n338(x)
+ else
+ fun_l21_n673(x)
+ end
+end
+
+def fun_l20_n157(x)
+ if (x < 1)
+ fun_l21_n429(x)
+ else
+ fun_l21_n23(x)
+ end
+end
+
+def fun_l20_n158(x)
+ if (x < 1)
+ fun_l21_n826(x)
+ else
+ fun_l21_n115(x)
+ end
+end
+
+def fun_l20_n159(x)
+ if (x < 1)
+ fun_l21_n713(x)
+ else
+ fun_l21_n954(x)
+ end
+end
+
+def fun_l20_n160(x)
+ if (x < 1)
+ fun_l21_n897(x)
+ else
+ fun_l21_n46(x)
+ end
+end
+
+def fun_l20_n161(x)
+ if (x < 1)
+ fun_l21_n751(x)
+ else
+ fun_l21_n885(x)
+ end
+end
+
+def fun_l20_n162(x)
+ if (x < 1)
+ fun_l21_n935(x)
+ else
+ fun_l21_n230(x)
+ end
+end
+
+def fun_l20_n163(x)
+ if (x < 1)
+ fun_l21_n862(x)
+ else
+ fun_l21_n874(x)
+ end
+end
+
+def fun_l20_n164(x)
+ if (x < 1)
+ fun_l21_n695(x)
+ else
+ fun_l21_n707(x)
+ end
+end
+
+def fun_l20_n165(x)
+ if (x < 1)
+ fun_l21_n539(x)
+ else
+ fun_l21_n14(x)
+ end
+end
+
+def fun_l20_n166(x)
+ if (x < 1)
+ fun_l21_n139(x)
+ else
+ fun_l21_n766(x)
+ end
+end
+
+def fun_l20_n167(x)
+ if (x < 1)
+ fun_l21_n100(x)
+ else
+ fun_l21_n229(x)
+ end
+end
+
+def fun_l20_n168(x)
+ if (x < 1)
+ fun_l21_n88(x)
+ else
+ fun_l21_n642(x)
+ end
+end
+
+def fun_l20_n169(x)
+ if (x < 1)
+ fun_l21_n57(x)
+ else
+ fun_l21_n252(x)
+ end
+end
+
+def fun_l20_n170(x)
+ if (x < 1)
+ fun_l21_n470(x)
+ else
+ fun_l21_n224(x)
+ end
+end
+
+def fun_l20_n171(x)
+ if (x < 1)
+ fun_l21_n163(x)
+ else
+ fun_l21_n114(x)
+ end
+end
+
+def fun_l20_n172(x)
+ if (x < 1)
+ fun_l21_n231(x)
+ else
+ fun_l21_n405(x)
+ end
+end
+
+def fun_l20_n173(x)
+ if (x < 1)
+ fun_l21_n553(x)
+ else
+ fun_l21_n758(x)
+ end
+end
+
+def fun_l20_n174(x)
+ if (x < 1)
+ fun_l21_n874(x)
+ else
+ fun_l21_n43(x)
+ end
+end
+
+def fun_l20_n175(x)
+ if (x < 1)
+ fun_l21_n911(x)
+ else
+ fun_l21_n644(x)
+ end
+end
+
+def fun_l20_n176(x)
+ if (x < 1)
+ fun_l21_n747(x)
+ else
+ fun_l21_n900(x)
+ end
+end
+
+def fun_l20_n177(x)
+ if (x < 1)
+ fun_l21_n956(x)
+ else
+ fun_l21_n152(x)
+ end
+end
+
+def fun_l20_n178(x)
+ if (x < 1)
+ fun_l21_n226(x)
+ else
+ fun_l21_n654(x)
+ end
+end
+
+def fun_l20_n179(x)
+ if (x < 1)
+ fun_l21_n284(x)
+ else
+ fun_l21_n968(x)
+ end
+end
+
+def fun_l20_n180(x)
+ if (x < 1)
+ fun_l21_n181(x)
+ else
+ fun_l21_n690(x)
+ end
+end
+
+def fun_l20_n181(x)
+ if (x < 1)
+ fun_l21_n35(x)
+ else
+ fun_l21_n500(x)
+ end
+end
+
+def fun_l20_n182(x)
+ if (x < 1)
+ fun_l21_n212(x)
+ else
+ fun_l21_n559(x)
+ end
+end
+
+def fun_l20_n183(x)
+ if (x < 1)
+ fun_l21_n981(x)
+ else
+ fun_l21_n605(x)
+ end
+end
+
+def fun_l20_n184(x)
+ if (x < 1)
+ fun_l21_n447(x)
+ else
+ fun_l21_n718(x)
+ end
+end
+
+def fun_l20_n185(x)
+ if (x < 1)
+ fun_l21_n272(x)
+ else
+ fun_l21_n341(x)
+ end
+end
+
+def fun_l20_n186(x)
+ if (x < 1)
+ fun_l21_n5(x)
+ else
+ fun_l21_n426(x)
+ end
+end
+
+def fun_l20_n187(x)
+ if (x < 1)
+ fun_l21_n630(x)
+ else
+ fun_l21_n62(x)
+ end
+end
+
+def fun_l20_n188(x)
+ if (x < 1)
+ fun_l21_n600(x)
+ else
+ fun_l21_n674(x)
+ end
+end
+
+def fun_l20_n189(x)
+ if (x < 1)
+ fun_l21_n645(x)
+ else
+ fun_l21_n936(x)
+ end
+end
+
+def fun_l20_n190(x)
+ if (x < 1)
+ fun_l21_n15(x)
+ else
+ fun_l21_n158(x)
+ end
+end
+
+def fun_l20_n191(x)
+ if (x < 1)
+ fun_l21_n789(x)
+ else
+ fun_l21_n103(x)
+ end
+end
+
+def fun_l20_n192(x)
+ if (x < 1)
+ fun_l21_n501(x)
+ else
+ fun_l21_n655(x)
+ end
+end
+
+def fun_l20_n193(x)
+ if (x < 1)
+ fun_l21_n242(x)
+ else
+ fun_l21_n241(x)
+ end
+end
+
+def fun_l20_n194(x)
+ if (x < 1)
+ fun_l21_n296(x)
+ else
+ fun_l21_n442(x)
+ end
+end
+
+def fun_l20_n195(x)
+ if (x < 1)
+ fun_l21_n288(x)
+ else
+ fun_l21_n165(x)
+ end
+end
+
+def fun_l20_n196(x)
+ if (x < 1)
+ fun_l21_n336(x)
+ else
+ fun_l21_n328(x)
+ end
+end
+
+def fun_l20_n197(x)
+ if (x < 1)
+ fun_l21_n423(x)
+ else
+ fun_l21_n906(x)
+ end
+end
+
+def fun_l20_n198(x)
+ if (x < 1)
+ fun_l21_n875(x)
+ else
+ fun_l21_n801(x)
+ end
+end
+
+def fun_l20_n199(x)
+ if (x < 1)
+ fun_l21_n864(x)
+ else
+ fun_l21_n594(x)
+ end
+end
+
+def fun_l20_n200(x)
+ if (x < 1)
+ fun_l21_n145(x)
+ else
+ fun_l21_n728(x)
+ end
+end
+
+def fun_l20_n201(x)
+ if (x < 1)
+ fun_l21_n941(x)
+ else
+ fun_l21_n592(x)
+ end
+end
+
+def fun_l20_n202(x)
+ if (x < 1)
+ fun_l21_n458(x)
+ else
+ fun_l21_n839(x)
+ end
+end
+
+def fun_l20_n203(x)
+ if (x < 1)
+ fun_l21_n352(x)
+ else
+ fun_l21_n319(x)
+ end
+end
+
+def fun_l20_n204(x)
+ if (x < 1)
+ fun_l21_n453(x)
+ else
+ fun_l21_n944(x)
+ end
+end
+
+def fun_l20_n205(x)
+ if (x < 1)
+ fun_l21_n479(x)
+ else
+ fun_l21_n409(x)
+ end
+end
+
+def fun_l20_n206(x)
+ if (x < 1)
+ fun_l21_n72(x)
+ else
+ fun_l21_n177(x)
+ end
+end
+
+def fun_l20_n207(x)
+ if (x < 1)
+ fun_l21_n895(x)
+ else
+ fun_l21_n77(x)
+ end
+end
+
+def fun_l20_n208(x)
+ if (x < 1)
+ fun_l21_n308(x)
+ else
+ fun_l21_n181(x)
+ end
+end
+
+def fun_l20_n209(x)
+ if (x < 1)
+ fun_l21_n358(x)
+ else
+ fun_l21_n666(x)
+ end
+end
+
+def fun_l20_n210(x)
+ if (x < 1)
+ fun_l21_n275(x)
+ else
+ fun_l21_n739(x)
+ end
+end
+
+def fun_l20_n211(x)
+ if (x < 1)
+ fun_l21_n706(x)
+ else
+ fun_l21_n722(x)
+ end
+end
+
+def fun_l20_n212(x)
+ if (x < 1)
+ fun_l21_n185(x)
+ else
+ fun_l21_n893(x)
+ end
+end
+
+def fun_l20_n213(x)
+ if (x < 1)
+ fun_l21_n307(x)
+ else
+ fun_l21_n871(x)
+ end
+end
+
+def fun_l20_n214(x)
+ if (x < 1)
+ fun_l21_n365(x)
+ else
+ fun_l21_n311(x)
+ end
+end
+
+def fun_l20_n215(x)
+ if (x < 1)
+ fun_l21_n176(x)
+ else
+ fun_l21_n998(x)
+ end
+end
+
+def fun_l20_n216(x)
+ if (x < 1)
+ fun_l21_n542(x)
+ else
+ fun_l21_n248(x)
+ end
+end
+
+def fun_l20_n217(x)
+ if (x < 1)
+ fun_l21_n568(x)
+ else
+ fun_l21_n671(x)
+ end
+end
+
+def fun_l20_n218(x)
+ if (x < 1)
+ fun_l21_n704(x)
+ else
+ fun_l21_n992(x)
+ end
+end
+
+def fun_l20_n219(x)
+ if (x < 1)
+ fun_l21_n500(x)
+ else
+ fun_l21_n845(x)
+ end
+end
+
+def fun_l20_n220(x)
+ if (x < 1)
+ fun_l21_n75(x)
+ else
+ fun_l21_n365(x)
+ end
+end
+
+def fun_l20_n221(x)
+ if (x < 1)
+ fun_l21_n780(x)
+ else
+ fun_l21_n574(x)
+ end
+end
+
+def fun_l20_n222(x)
+ if (x < 1)
+ fun_l21_n778(x)
+ else
+ fun_l21_n315(x)
+ end
+end
+
+def fun_l20_n223(x)
+ if (x < 1)
+ fun_l21_n845(x)
+ else
+ fun_l21_n521(x)
+ end
+end
+
+def fun_l20_n224(x)
+ if (x < 1)
+ fun_l21_n608(x)
+ else
+ fun_l21_n762(x)
+ end
+end
+
+def fun_l20_n225(x)
+ if (x < 1)
+ fun_l21_n912(x)
+ else
+ fun_l21_n651(x)
+ end
+end
+
+def fun_l20_n226(x)
+ if (x < 1)
+ fun_l21_n337(x)
+ else
+ fun_l21_n723(x)
+ end
+end
+
+def fun_l20_n227(x)
+ if (x < 1)
+ fun_l21_n734(x)
+ else
+ fun_l21_n967(x)
+ end
+end
+
+def fun_l20_n228(x)
+ if (x < 1)
+ fun_l21_n342(x)
+ else
+ fun_l21_n611(x)
+ end
+end
+
+def fun_l20_n229(x)
+ if (x < 1)
+ fun_l21_n607(x)
+ else
+ fun_l21_n317(x)
+ end
+end
+
+def fun_l20_n230(x)
+ if (x < 1)
+ fun_l21_n478(x)
+ else
+ fun_l21_n208(x)
+ end
+end
+
+def fun_l20_n231(x)
+ if (x < 1)
+ fun_l21_n481(x)
+ else
+ fun_l21_n171(x)
+ end
+end
+
+def fun_l20_n232(x)
+ if (x < 1)
+ fun_l21_n80(x)
+ else
+ fun_l21_n810(x)
+ end
+end
+
+def fun_l20_n233(x)
+ if (x < 1)
+ fun_l21_n597(x)
+ else
+ fun_l21_n474(x)
+ end
+end
+
+def fun_l20_n234(x)
+ if (x < 1)
+ fun_l21_n997(x)
+ else
+ fun_l21_n98(x)
+ end
+end
+
+def fun_l20_n235(x)
+ if (x < 1)
+ fun_l21_n663(x)
+ else
+ fun_l21_n103(x)
+ end
+end
+
+def fun_l20_n236(x)
+ if (x < 1)
+ fun_l21_n602(x)
+ else
+ fun_l21_n421(x)
+ end
+end
+
+def fun_l20_n237(x)
+ if (x < 1)
+ fun_l21_n888(x)
+ else
+ fun_l21_n759(x)
+ end
+end
+
+def fun_l20_n238(x)
+ if (x < 1)
+ fun_l21_n21(x)
+ else
+ fun_l21_n56(x)
+ end
+end
+
+def fun_l20_n239(x)
+ if (x < 1)
+ fun_l21_n663(x)
+ else
+ fun_l21_n102(x)
+ end
+end
+
+def fun_l20_n240(x)
+ if (x < 1)
+ fun_l21_n244(x)
+ else
+ fun_l21_n507(x)
+ end
+end
+
+def fun_l20_n241(x)
+ if (x < 1)
+ fun_l21_n263(x)
+ else
+ fun_l21_n382(x)
+ end
+end
+
+def fun_l20_n242(x)
+ if (x < 1)
+ fun_l21_n639(x)
+ else
+ fun_l21_n380(x)
+ end
+end
+
+def fun_l20_n243(x)
+ if (x < 1)
+ fun_l21_n99(x)
+ else
+ fun_l21_n35(x)
+ end
+end
+
+def fun_l20_n244(x)
+ if (x < 1)
+ fun_l21_n648(x)
+ else
+ fun_l21_n266(x)
+ end
+end
+
+def fun_l20_n245(x)
+ if (x < 1)
+ fun_l21_n613(x)
+ else
+ fun_l21_n277(x)
+ end
+end
+
+def fun_l20_n246(x)
+ if (x < 1)
+ fun_l21_n886(x)
+ else
+ fun_l21_n4(x)
+ end
+end
+
+def fun_l20_n247(x)
+ if (x < 1)
+ fun_l21_n510(x)
+ else
+ fun_l21_n146(x)
+ end
+end
+
+def fun_l20_n248(x)
+ if (x < 1)
+ fun_l21_n933(x)
+ else
+ fun_l21_n765(x)
+ end
+end
+
+def fun_l20_n249(x)
+ if (x < 1)
+ fun_l21_n323(x)
+ else
+ fun_l21_n222(x)
+ end
+end
+
+def fun_l20_n250(x)
+ if (x < 1)
+ fun_l21_n708(x)
+ else
+ fun_l21_n241(x)
+ end
+end
+
+def fun_l20_n251(x)
+ if (x < 1)
+ fun_l21_n394(x)
+ else
+ fun_l21_n899(x)
+ end
+end
+
+def fun_l20_n252(x)
+ if (x < 1)
+ fun_l21_n253(x)
+ else
+ fun_l21_n221(x)
+ end
+end
+
+def fun_l20_n253(x)
+ if (x < 1)
+ fun_l21_n842(x)
+ else
+ fun_l21_n594(x)
+ end
+end
+
+def fun_l20_n254(x)
+ if (x < 1)
+ fun_l21_n325(x)
+ else
+ fun_l21_n145(x)
+ end
+end
+
+def fun_l20_n255(x)
+ if (x < 1)
+ fun_l21_n568(x)
+ else
+ fun_l21_n736(x)
+ end
+end
+
+def fun_l20_n256(x)
+ if (x < 1)
+ fun_l21_n862(x)
+ else
+ fun_l21_n388(x)
+ end
+end
+
+def fun_l20_n257(x)
+ if (x < 1)
+ fun_l21_n738(x)
+ else
+ fun_l21_n255(x)
+ end
+end
+
+def fun_l20_n258(x)
+ if (x < 1)
+ fun_l21_n704(x)
+ else
+ fun_l21_n539(x)
+ end
+end
+
+def fun_l20_n259(x)
+ if (x < 1)
+ fun_l21_n149(x)
+ else
+ fun_l21_n940(x)
+ end
+end
+
+def fun_l20_n260(x)
+ if (x < 1)
+ fun_l21_n462(x)
+ else
+ fun_l21_n840(x)
+ end
+end
+
+def fun_l20_n261(x)
+ if (x < 1)
+ fun_l21_n549(x)
+ else
+ fun_l21_n968(x)
+ end
+end
+
+def fun_l20_n262(x)
+ if (x < 1)
+ fun_l21_n290(x)
+ else
+ fun_l21_n127(x)
+ end
+end
+
+def fun_l20_n263(x)
+ if (x < 1)
+ fun_l21_n311(x)
+ else
+ fun_l21_n652(x)
+ end
+end
+
+def fun_l20_n264(x)
+ if (x < 1)
+ fun_l21_n544(x)
+ else
+ fun_l21_n521(x)
+ end
+end
+
+def fun_l20_n265(x)
+ if (x < 1)
+ fun_l21_n984(x)
+ else
+ fun_l21_n957(x)
+ end
+end
+
+def fun_l20_n266(x)
+ if (x < 1)
+ fun_l21_n10(x)
+ else
+ fun_l21_n154(x)
+ end
+end
+
+def fun_l20_n267(x)
+ if (x < 1)
+ fun_l21_n707(x)
+ else
+ fun_l21_n623(x)
+ end
+end
+
+def fun_l20_n268(x)
+ if (x < 1)
+ fun_l21_n420(x)
+ else
+ fun_l21_n31(x)
+ end
+end
+
+def fun_l20_n269(x)
+ if (x < 1)
+ fun_l21_n380(x)
+ else
+ fun_l21_n397(x)
+ end
+end
+
+def fun_l20_n270(x)
+ if (x < 1)
+ fun_l21_n95(x)
+ else
+ fun_l21_n881(x)
+ end
+end
+
+def fun_l20_n271(x)
+ if (x < 1)
+ fun_l21_n731(x)
+ else
+ fun_l21_n521(x)
+ end
+end
+
+def fun_l20_n272(x)
+ if (x < 1)
+ fun_l21_n255(x)
+ else
+ fun_l21_n412(x)
+ end
+end
+
+def fun_l20_n273(x)
+ if (x < 1)
+ fun_l21_n455(x)
+ else
+ fun_l21_n225(x)
+ end
+end
+
+def fun_l20_n274(x)
+ if (x < 1)
+ fun_l21_n223(x)
+ else
+ fun_l21_n71(x)
+ end
+end
+
+def fun_l20_n275(x)
+ if (x < 1)
+ fun_l21_n819(x)
+ else
+ fun_l21_n765(x)
+ end
+end
+
+def fun_l20_n276(x)
+ if (x < 1)
+ fun_l21_n379(x)
+ else
+ fun_l21_n892(x)
+ end
+end
+
+def fun_l20_n277(x)
+ if (x < 1)
+ fun_l21_n695(x)
+ else
+ fun_l21_n856(x)
+ end
+end
+
+def fun_l20_n278(x)
+ if (x < 1)
+ fun_l21_n217(x)
+ else
+ fun_l21_n166(x)
+ end
+end
+
+def fun_l20_n279(x)
+ if (x < 1)
+ fun_l21_n708(x)
+ else
+ fun_l21_n987(x)
+ end
+end
+
+def fun_l20_n280(x)
+ if (x < 1)
+ fun_l21_n251(x)
+ else
+ fun_l21_n144(x)
+ end
+end
+
+def fun_l20_n281(x)
+ if (x < 1)
+ fun_l21_n262(x)
+ else
+ fun_l21_n428(x)
+ end
+end
+
+def fun_l20_n282(x)
+ if (x < 1)
+ fun_l21_n439(x)
+ else
+ fun_l21_n1(x)
+ end
+end
+
+def fun_l20_n283(x)
+ if (x < 1)
+ fun_l21_n405(x)
+ else
+ fun_l21_n413(x)
+ end
+end
+
+def fun_l20_n284(x)
+ if (x < 1)
+ fun_l21_n729(x)
+ else
+ fun_l21_n61(x)
+ end
+end
+
+def fun_l20_n285(x)
+ if (x < 1)
+ fun_l21_n255(x)
+ else
+ fun_l21_n985(x)
+ end
+end
+
+def fun_l20_n286(x)
+ if (x < 1)
+ fun_l21_n348(x)
+ else
+ fun_l21_n54(x)
+ end
+end
+
+def fun_l20_n287(x)
+ if (x < 1)
+ fun_l21_n663(x)
+ else
+ fun_l21_n837(x)
+ end
+end
+
+def fun_l20_n288(x)
+ if (x < 1)
+ fun_l21_n444(x)
+ else
+ fun_l21_n767(x)
+ end
+end
+
+def fun_l20_n289(x)
+ if (x < 1)
+ fun_l21_n756(x)
+ else
+ fun_l21_n246(x)
+ end
+end
+
+def fun_l20_n290(x)
+ if (x < 1)
+ fun_l21_n0(x)
+ else
+ fun_l21_n253(x)
+ end
+end
+
+def fun_l20_n291(x)
+ if (x < 1)
+ fun_l21_n867(x)
+ else
+ fun_l21_n464(x)
+ end
+end
+
+def fun_l20_n292(x)
+ if (x < 1)
+ fun_l21_n885(x)
+ else
+ fun_l21_n588(x)
+ end
+end
+
+def fun_l20_n293(x)
+ if (x < 1)
+ fun_l21_n420(x)
+ else
+ fun_l21_n622(x)
+ end
+end
+
+def fun_l20_n294(x)
+ if (x < 1)
+ fun_l21_n411(x)
+ else
+ fun_l21_n351(x)
+ end
+end
+
+def fun_l20_n295(x)
+ if (x < 1)
+ fun_l21_n208(x)
+ else
+ fun_l21_n0(x)
+ end
+end
+
+def fun_l20_n296(x)
+ if (x < 1)
+ fun_l21_n551(x)
+ else
+ fun_l21_n68(x)
+ end
+end
+
+def fun_l20_n297(x)
+ if (x < 1)
+ fun_l21_n351(x)
+ else
+ fun_l21_n108(x)
+ end
+end
+
+def fun_l20_n298(x)
+ if (x < 1)
+ fun_l21_n134(x)
+ else
+ fun_l21_n893(x)
+ end
+end
+
+def fun_l20_n299(x)
+ if (x < 1)
+ fun_l21_n697(x)
+ else
+ fun_l21_n538(x)
+ end
+end
+
+def fun_l20_n300(x)
+ if (x < 1)
+ fun_l21_n61(x)
+ else
+ fun_l21_n641(x)
+ end
+end
+
+def fun_l20_n301(x)
+ if (x < 1)
+ fun_l21_n13(x)
+ else
+ fun_l21_n103(x)
+ end
+end
+
+def fun_l20_n302(x)
+ if (x < 1)
+ fun_l21_n260(x)
+ else
+ fun_l21_n430(x)
+ end
+end
+
+def fun_l20_n303(x)
+ if (x < 1)
+ fun_l21_n63(x)
+ else
+ fun_l21_n911(x)
+ end
+end
+
+def fun_l20_n304(x)
+ if (x < 1)
+ fun_l21_n470(x)
+ else
+ fun_l21_n407(x)
+ end
+end
+
+def fun_l20_n305(x)
+ if (x < 1)
+ fun_l21_n615(x)
+ else
+ fun_l21_n767(x)
+ end
+end
+
+def fun_l20_n306(x)
+ if (x < 1)
+ fun_l21_n898(x)
+ else
+ fun_l21_n215(x)
+ end
+end
+
+def fun_l20_n307(x)
+ if (x < 1)
+ fun_l21_n793(x)
+ else
+ fun_l21_n468(x)
+ end
+end
+
+def fun_l20_n308(x)
+ if (x < 1)
+ fun_l21_n582(x)
+ else
+ fun_l21_n968(x)
+ end
+end
+
+def fun_l20_n309(x)
+ if (x < 1)
+ fun_l21_n7(x)
+ else
+ fun_l21_n703(x)
+ end
+end
+
+def fun_l20_n310(x)
+ if (x < 1)
+ fun_l21_n826(x)
+ else
+ fun_l21_n735(x)
+ end
+end
+
+def fun_l20_n311(x)
+ if (x < 1)
+ fun_l21_n856(x)
+ else
+ fun_l21_n959(x)
+ end
+end
+
+def fun_l20_n312(x)
+ if (x < 1)
+ fun_l21_n194(x)
+ else
+ fun_l21_n158(x)
+ end
+end
+
+def fun_l20_n313(x)
+ if (x < 1)
+ fun_l21_n690(x)
+ else
+ fun_l21_n813(x)
+ end
+end
+
+def fun_l20_n314(x)
+ if (x < 1)
+ fun_l21_n699(x)
+ else
+ fun_l21_n842(x)
+ end
+end
+
+def fun_l20_n315(x)
+ if (x < 1)
+ fun_l21_n485(x)
+ else
+ fun_l21_n0(x)
+ end
+end
+
+def fun_l20_n316(x)
+ if (x < 1)
+ fun_l21_n753(x)
+ else
+ fun_l21_n306(x)
+ end
+end
+
+def fun_l20_n317(x)
+ if (x < 1)
+ fun_l21_n516(x)
+ else
+ fun_l21_n35(x)
+ end
+end
+
+def fun_l20_n318(x)
+ if (x < 1)
+ fun_l21_n78(x)
+ else
+ fun_l21_n104(x)
+ end
+end
+
+def fun_l20_n319(x)
+ if (x < 1)
+ fun_l21_n492(x)
+ else
+ fun_l21_n211(x)
+ end
+end
+
+def fun_l20_n320(x)
+ if (x < 1)
+ fun_l21_n303(x)
+ else
+ fun_l21_n218(x)
+ end
+end
+
+def fun_l20_n321(x)
+ if (x < 1)
+ fun_l21_n614(x)
+ else
+ fun_l21_n743(x)
+ end
+end
+
+def fun_l20_n322(x)
+ if (x < 1)
+ fun_l21_n141(x)
+ else
+ fun_l21_n320(x)
+ end
+end
+
+def fun_l20_n323(x)
+ if (x < 1)
+ fun_l21_n349(x)
+ else
+ fun_l21_n396(x)
+ end
+end
+
+def fun_l20_n324(x)
+ if (x < 1)
+ fun_l21_n189(x)
+ else
+ fun_l21_n32(x)
+ end
+end
+
+def fun_l20_n325(x)
+ if (x < 1)
+ fun_l21_n938(x)
+ else
+ fun_l21_n747(x)
+ end
+end
+
+def fun_l20_n326(x)
+ if (x < 1)
+ fun_l21_n571(x)
+ else
+ fun_l21_n20(x)
+ end
+end
+
+def fun_l20_n327(x)
+ if (x < 1)
+ fun_l21_n905(x)
+ else
+ fun_l21_n106(x)
+ end
+end
+
+def fun_l20_n328(x)
+ if (x < 1)
+ fun_l21_n849(x)
+ else
+ fun_l21_n747(x)
+ end
+end
+
+def fun_l20_n329(x)
+ if (x < 1)
+ fun_l21_n830(x)
+ else
+ fun_l21_n61(x)
+ end
+end
+
+def fun_l20_n330(x)
+ if (x < 1)
+ fun_l21_n613(x)
+ else
+ fun_l21_n945(x)
+ end
+end
+
+def fun_l20_n331(x)
+ if (x < 1)
+ fun_l21_n379(x)
+ else
+ fun_l21_n920(x)
+ end
+end
+
+def fun_l20_n332(x)
+ if (x < 1)
+ fun_l21_n315(x)
+ else
+ fun_l21_n968(x)
+ end
+end
+
+def fun_l20_n333(x)
+ if (x < 1)
+ fun_l21_n256(x)
+ else
+ fun_l21_n460(x)
+ end
+end
+
+def fun_l20_n334(x)
+ if (x < 1)
+ fun_l21_n644(x)
+ else
+ fun_l21_n372(x)
+ end
+end
+
+def fun_l20_n335(x)
+ if (x < 1)
+ fun_l21_n588(x)
+ else
+ fun_l21_n351(x)
+ end
+end
+
+def fun_l20_n336(x)
+ if (x < 1)
+ fun_l21_n516(x)
+ else
+ fun_l21_n975(x)
+ end
+end
+
+def fun_l20_n337(x)
+ if (x < 1)
+ fun_l21_n432(x)
+ else
+ fun_l21_n47(x)
+ end
+end
+
+def fun_l20_n338(x)
+ if (x < 1)
+ fun_l21_n31(x)
+ else
+ fun_l21_n728(x)
+ end
+end
+
+def fun_l20_n339(x)
+ if (x < 1)
+ fun_l21_n700(x)
+ else
+ fun_l21_n454(x)
+ end
+end
+
+def fun_l20_n340(x)
+ if (x < 1)
+ fun_l21_n947(x)
+ else
+ fun_l21_n880(x)
+ end
+end
+
+def fun_l20_n341(x)
+ if (x < 1)
+ fun_l21_n363(x)
+ else
+ fun_l21_n861(x)
+ end
+end
+
+def fun_l20_n342(x)
+ if (x < 1)
+ fun_l21_n338(x)
+ else
+ fun_l21_n118(x)
+ end
+end
+
+def fun_l20_n343(x)
+ if (x < 1)
+ fun_l21_n352(x)
+ else
+ fun_l21_n402(x)
+ end
+end
+
+def fun_l20_n344(x)
+ if (x < 1)
+ fun_l21_n344(x)
+ else
+ fun_l21_n407(x)
+ end
+end
+
+def fun_l20_n345(x)
+ if (x < 1)
+ fun_l21_n869(x)
+ else
+ fun_l21_n912(x)
+ end
+end
+
+def fun_l20_n346(x)
+ if (x < 1)
+ fun_l21_n397(x)
+ else
+ fun_l21_n429(x)
+ end
+end
+
+def fun_l20_n347(x)
+ if (x < 1)
+ fun_l21_n28(x)
+ else
+ fun_l21_n671(x)
+ end
+end
+
+def fun_l20_n348(x)
+ if (x < 1)
+ fun_l21_n215(x)
+ else
+ fun_l21_n821(x)
+ end
+end
+
+def fun_l20_n349(x)
+ if (x < 1)
+ fun_l21_n432(x)
+ else
+ fun_l21_n250(x)
+ end
+end
+
+def fun_l20_n350(x)
+ if (x < 1)
+ fun_l21_n496(x)
+ else
+ fun_l21_n988(x)
+ end
+end
+
+def fun_l20_n351(x)
+ if (x < 1)
+ fun_l21_n317(x)
+ else
+ fun_l21_n516(x)
+ end
+end
+
+def fun_l20_n352(x)
+ if (x < 1)
+ fun_l21_n968(x)
+ else
+ fun_l21_n638(x)
+ end
+end
+
+def fun_l20_n353(x)
+ if (x < 1)
+ fun_l21_n447(x)
+ else
+ fun_l21_n14(x)
+ end
+end
+
+def fun_l20_n354(x)
+ if (x < 1)
+ fun_l21_n151(x)
+ else
+ fun_l21_n545(x)
+ end
+end
+
+def fun_l20_n355(x)
+ if (x < 1)
+ fun_l21_n579(x)
+ else
+ fun_l21_n934(x)
+ end
+end
+
+def fun_l20_n356(x)
+ if (x < 1)
+ fun_l21_n612(x)
+ else
+ fun_l21_n433(x)
+ end
+end
+
+def fun_l20_n357(x)
+ if (x < 1)
+ fun_l21_n969(x)
+ else
+ fun_l21_n816(x)
+ end
+end
+
+def fun_l20_n358(x)
+ if (x < 1)
+ fun_l21_n24(x)
+ else
+ fun_l21_n272(x)
+ end
+end
+
+def fun_l20_n359(x)
+ if (x < 1)
+ fun_l21_n945(x)
+ else
+ fun_l21_n458(x)
+ end
+end
+
+def fun_l20_n360(x)
+ if (x < 1)
+ fun_l21_n294(x)
+ else
+ fun_l21_n934(x)
+ end
+end
+
+def fun_l20_n361(x)
+ if (x < 1)
+ fun_l21_n777(x)
+ else
+ fun_l21_n499(x)
+ end
+end
+
+def fun_l20_n362(x)
+ if (x < 1)
+ fun_l21_n538(x)
+ else
+ fun_l21_n400(x)
+ end
+end
+
+def fun_l20_n363(x)
+ if (x < 1)
+ fun_l21_n660(x)
+ else
+ fun_l21_n970(x)
+ end
+end
+
+def fun_l20_n364(x)
+ if (x < 1)
+ fun_l21_n230(x)
+ else
+ fun_l21_n977(x)
+ end
+end
+
+def fun_l20_n365(x)
+ if (x < 1)
+ fun_l21_n335(x)
+ else
+ fun_l21_n436(x)
+ end
+end
+
+def fun_l20_n366(x)
+ if (x < 1)
+ fun_l21_n596(x)
+ else
+ fun_l21_n992(x)
+ end
+end
+
+def fun_l20_n367(x)
+ if (x < 1)
+ fun_l21_n502(x)
+ else
+ fun_l21_n251(x)
+ end
+end
+
+def fun_l20_n368(x)
+ if (x < 1)
+ fun_l21_n501(x)
+ else
+ fun_l21_n493(x)
+ end
+end
+
+def fun_l20_n369(x)
+ if (x < 1)
+ fun_l21_n48(x)
+ else
+ fun_l21_n850(x)
+ end
+end
+
+def fun_l20_n370(x)
+ if (x < 1)
+ fun_l21_n900(x)
+ else
+ fun_l21_n919(x)
+ end
+end
+
+def fun_l20_n371(x)
+ if (x < 1)
+ fun_l21_n349(x)
+ else
+ fun_l21_n80(x)
+ end
+end
+
+def fun_l20_n372(x)
+ if (x < 1)
+ fun_l21_n275(x)
+ else
+ fun_l21_n135(x)
+ end
+end
+
+def fun_l20_n373(x)
+ if (x < 1)
+ fun_l21_n987(x)
+ else
+ fun_l21_n472(x)
+ end
+end
+
+def fun_l20_n374(x)
+ if (x < 1)
+ fun_l21_n877(x)
+ else
+ fun_l21_n298(x)
+ end
+end
+
+def fun_l20_n375(x)
+ if (x < 1)
+ fun_l21_n518(x)
+ else
+ fun_l21_n676(x)
+ end
+end
+
+def fun_l20_n376(x)
+ if (x < 1)
+ fun_l21_n108(x)
+ else
+ fun_l21_n470(x)
+ end
+end
+
+def fun_l20_n377(x)
+ if (x < 1)
+ fun_l21_n643(x)
+ else
+ fun_l21_n189(x)
+ end
+end
+
+def fun_l20_n378(x)
+ if (x < 1)
+ fun_l21_n608(x)
+ else
+ fun_l21_n376(x)
+ end
+end
+
+def fun_l20_n379(x)
+ if (x < 1)
+ fun_l21_n520(x)
+ else
+ fun_l21_n651(x)
+ end
+end
+
+def fun_l20_n380(x)
+ if (x < 1)
+ fun_l21_n399(x)
+ else
+ fun_l21_n867(x)
+ end
+end
+
+def fun_l20_n381(x)
+ if (x < 1)
+ fun_l21_n815(x)
+ else
+ fun_l21_n78(x)
+ end
+end
+
+def fun_l20_n382(x)
+ if (x < 1)
+ fun_l21_n216(x)
+ else
+ fun_l21_n379(x)
+ end
+end
+
+def fun_l20_n383(x)
+ if (x < 1)
+ fun_l21_n628(x)
+ else
+ fun_l21_n227(x)
+ end
+end
+
+def fun_l20_n384(x)
+ if (x < 1)
+ fun_l21_n699(x)
+ else
+ fun_l21_n170(x)
+ end
+end
+
+def fun_l20_n385(x)
+ if (x < 1)
+ fun_l21_n444(x)
+ else
+ fun_l21_n603(x)
+ end
+end
+
+def fun_l20_n386(x)
+ if (x < 1)
+ fun_l21_n299(x)
+ else
+ fun_l21_n803(x)
+ end
+end
+
+def fun_l20_n387(x)
+ if (x < 1)
+ fun_l21_n708(x)
+ else
+ fun_l21_n187(x)
+ end
+end
+
+def fun_l20_n388(x)
+ if (x < 1)
+ fun_l21_n490(x)
+ else
+ fun_l21_n75(x)
+ end
+end
+
+def fun_l20_n389(x)
+ if (x < 1)
+ fun_l21_n856(x)
+ else
+ fun_l21_n257(x)
+ end
+end
+
+def fun_l20_n390(x)
+ if (x < 1)
+ fun_l21_n394(x)
+ else
+ fun_l21_n669(x)
+ end
+end
+
+def fun_l20_n391(x)
+ if (x < 1)
+ fun_l21_n501(x)
+ else
+ fun_l21_n555(x)
+ end
+end
+
+def fun_l20_n392(x)
+ if (x < 1)
+ fun_l21_n657(x)
+ else
+ fun_l21_n226(x)
+ end
+end
+
+def fun_l20_n393(x)
+ if (x < 1)
+ fun_l21_n229(x)
+ else
+ fun_l21_n898(x)
+ end
+end
+
+def fun_l20_n394(x)
+ if (x < 1)
+ fun_l21_n726(x)
+ else
+ fun_l21_n349(x)
+ end
+end
+
+def fun_l20_n395(x)
+ if (x < 1)
+ fun_l21_n247(x)
+ else
+ fun_l21_n996(x)
+ end
+end
+
+def fun_l20_n396(x)
+ if (x < 1)
+ fun_l21_n136(x)
+ else
+ fun_l21_n601(x)
+ end
+end
+
+def fun_l20_n397(x)
+ if (x < 1)
+ fun_l21_n365(x)
+ else
+ fun_l21_n203(x)
+ end
+end
+
+def fun_l20_n398(x)
+ if (x < 1)
+ fun_l21_n376(x)
+ else
+ fun_l21_n172(x)
+ end
+end
+
+def fun_l20_n399(x)
+ if (x < 1)
+ fun_l21_n23(x)
+ else
+ fun_l21_n577(x)
+ end
+end
+
+def fun_l20_n400(x)
+ if (x < 1)
+ fun_l21_n368(x)
+ else
+ fun_l21_n448(x)
+ end
+end
+
+def fun_l20_n401(x)
+ if (x < 1)
+ fun_l21_n934(x)
+ else
+ fun_l21_n949(x)
+ end
+end
+
+def fun_l20_n402(x)
+ if (x < 1)
+ fun_l21_n127(x)
+ else
+ fun_l21_n132(x)
+ end
+end
+
+def fun_l20_n403(x)
+ if (x < 1)
+ fun_l21_n133(x)
+ else
+ fun_l21_n389(x)
+ end
+end
+
+def fun_l20_n404(x)
+ if (x < 1)
+ fun_l21_n750(x)
+ else
+ fun_l21_n591(x)
+ end
+end
+
+def fun_l20_n405(x)
+ if (x < 1)
+ fun_l21_n492(x)
+ else
+ fun_l21_n763(x)
+ end
+end
+
+def fun_l20_n406(x)
+ if (x < 1)
+ fun_l21_n137(x)
+ else
+ fun_l21_n552(x)
+ end
+end
+
+def fun_l20_n407(x)
+ if (x < 1)
+ fun_l21_n200(x)
+ else
+ fun_l21_n537(x)
+ end
+end
+
+def fun_l20_n408(x)
+ if (x < 1)
+ fun_l21_n681(x)
+ else
+ fun_l21_n645(x)
+ end
+end
+
+def fun_l20_n409(x)
+ if (x < 1)
+ fun_l21_n86(x)
+ else
+ fun_l21_n239(x)
+ end
+end
+
+def fun_l20_n410(x)
+ if (x < 1)
+ fun_l21_n357(x)
+ else
+ fun_l21_n98(x)
+ end
+end
+
+def fun_l20_n411(x)
+ if (x < 1)
+ fun_l21_n889(x)
+ else
+ fun_l21_n199(x)
+ end
+end
+
+def fun_l20_n412(x)
+ if (x < 1)
+ fun_l21_n504(x)
+ else
+ fun_l21_n950(x)
+ end
+end
+
+def fun_l20_n413(x)
+ if (x < 1)
+ fun_l21_n220(x)
+ else
+ fun_l21_n351(x)
+ end
+end
+
+def fun_l20_n414(x)
+ if (x < 1)
+ fun_l21_n287(x)
+ else
+ fun_l21_n614(x)
+ end
+end
+
+def fun_l20_n415(x)
+ if (x < 1)
+ fun_l21_n699(x)
+ else
+ fun_l21_n464(x)
+ end
+end
+
+def fun_l20_n416(x)
+ if (x < 1)
+ fun_l21_n638(x)
+ else
+ fun_l21_n10(x)
+ end
+end
+
+def fun_l20_n417(x)
+ if (x < 1)
+ fun_l21_n52(x)
+ else
+ fun_l21_n348(x)
+ end
+end
+
+def fun_l20_n418(x)
+ if (x < 1)
+ fun_l21_n248(x)
+ else
+ fun_l21_n703(x)
+ end
+end
+
+def fun_l20_n419(x)
+ if (x < 1)
+ fun_l21_n430(x)
+ else
+ fun_l21_n886(x)
+ end
+end
+
+def fun_l20_n420(x)
+ if (x < 1)
+ fun_l21_n695(x)
+ else
+ fun_l21_n528(x)
+ end
+end
+
+def fun_l20_n421(x)
+ if (x < 1)
+ fun_l21_n545(x)
+ else
+ fun_l21_n521(x)
+ end
+end
+
+def fun_l20_n422(x)
+ if (x < 1)
+ fun_l21_n66(x)
+ else
+ fun_l21_n31(x)
+ end
+end
+
+def fun_l20_n423(x)
+ if (x < 1)
+ fun_l21_n411(x)
+ else
+ fun_l21_n476(x)
+ end
+end
+
+def fun_l20_n424(x)
+ if (x < 1)
+ fun_l21_n433(x)
+ else
+ fun_l21_n940(x)
+ end
+end
+
+def fun_l20_n425(x)
+ if (x < 1)
+ fun_l21_n622(x)
+ else
+ fun_l21_n817(x)
+ end
+end
+
+def fun_l20_n426(x)
+ if (x < 1)
+ fun_l21_n516(x)
+ else
+ fun_l21_n665(x)
+ end
+end
+
+def fun_l20_n427(x)
+ if (x < 1)
+ fun_l21_n828(x)
+ else
+ fun_l21_n47(x)
+ end
+end
+
+def fun_l20_n428(x)
+ if (x < 1)
+ fun_l21_n445(x)
+ else
+ fun_l21_n94(x)
+ end
+end
+
+def fun_l20_n429(x)
+ if (x < 1)
+ fun_l21_n799(x)
+ else
+ fun_l21_n676(x)
+ end
+end
+
+def fun_l20_n430(x)
+ if (x < 1)
+ fun_l21_n518(x)
+ else
+ fun_l21_n988(x)
+ end
+end
+
+def fun_l20_n431(x)
+ if (x < 1)
+ fun_l21_n787(x)
+ else
+ fun_l21_n127(x)
+ end
+end
+
+def fun_l20_n432(x)
+ if (x < 1)
+ fun_l21_n502(x)
+ else
+ fun_l21_n719(x)
+ end
+end
+
+def fun_l20_n433(x)
+ if (x < 1)
+ fun_l21_n406(x)
+ else
+ fun_l21_n828(x)
+ end
+end
+
+def fun_l20_n434(x)
+ if (x < 1)
+ fun_l21_n845(x)
+ else
+ fun_l21_n75(x)
+ end
+end
+
+def fun_l20_n435(x)
+ if (x < 1)
+ fun_l21_n425(x)
+ else
+ fun_l21_n449(x)
+ end
+end
+
+def fun_l20_n436(x)
+ if (x < 1)
+ fun_l21_n520(x)
+ else
+ fun_l21_n68(x)
+ end
+end
+
+def fun_l20_n437(x)
+ if (x < 1)
+ fun_l21_n872(x)
+ else
+ fun_l21_n978(x)
+ end
+end
+
+def fun_l20_n438(x)
+ if (x < 1)
+ fun_l21_n522(x)
+ else
+ fun_l21_n658(x)
+ end
+end
+
+def fun_l20_n439(x)
+ if (x < 1)
+ fun_l21_n976(x)
+ else
+ fun_l21_n224(x)
+ end
+end
+
+def fun_l20_n440(x)
+ if (x < 1)
+ fun_l21_n256(x)
+ else
+ fun_l21_n700(x)
+ end
+end
+
+def fun_l20_n441(x)
+ if (x < 1)
+ fun_l21_n722(x)
+ else
+ fun_l21_n348(x)
+ end
+end
+
+def fun_l20_n442(x)
+ if (x < 1)
+ fun_l21_n377(x)
+ else
+ fun_l21_n966(x)
+ end
+end
+
+def fun_l20_n443(x)
+ if (x < 1)
+ fun_l21_n519(x)
+ else
+ fun_l21_n611(x)
+ end
+end
+
+def fun_l20_n444(x)
+ if (x < 1)
+ fun_l21_n318(x)
+ else
+ fun_l21_n937(x)
+ end
+end
+
+def fun_l20_n445(x)
+ if (x < 1)
+ fun_l21_n416(x)
+ else
+ fun_l21_n874(x)
+ end
+end
+
+def fun_l20_n446(x)
+ if (x < 1)
+ fun_l21_n157(x)
+ else
+ fun_l21_n328(x)
+ end
+end
+
+def fun_l20_n447(x)
+ if (x < 1)
+ fun_l21_n540(x)
+ else
+ fun_l21_n906(x)
+ end
+end
+
+def fun_l20_n448(x)
+ if (x < 1)
+ fun_l21_n13(x)
+ else
+ fun_l21_n325(x)
+ end
+end
+
+def fun_l20_n449(x)
+ if (x < 1)
+ fun_l21_n771(x)
+ else
+ fun_l21_n929(x)
+ end
+end
+
+def fun_l20_n450(x)
+ if (x < 1)
+ fun_l21_n770(x)
+ else
+ fun_l21_n778(x)
+ end
+end
+
+def fun_l20_n451(x)
+ if (x < 1)
+ fun_l21_n939(x)
+ else
+ fun_l21_n493(x)
+ end
+end
+
+def fun_l20_n452(x)
+ if (x < 1)
+ fun_l21_n481(x)
+ else
+ fun_l21_n407(x)
+ end
+end
+
+def fun_l20_n453(x)
+ if (x < 1)
+ fun_l21_n759(x)
+ else
+ fun_l21_n322(x)
+ end
+end
+
+def fun_l20_n454(x)
+ if (x < 1)
+ fun_l21_n703(x)
+ else
+ fun_l21_n409(x)
+ end
+end
+
+def fun_l20_n455(x)
+ if (x < 1)
+ fun_l21_n394(x)
+ else
+ fun_l21_n415(x)
+ end
+end
+
+def fun_l20_n456(x)
+ if (x < 1)
+ fun_l21_n583(x)
+ else
+ fun_l21_n188(x)
+ end
+end
+
+def fun_l20_n457(x)
+ if (x < 1)
+ fun_l21_n668(x)
+ else
+ fun_l21_n46(x)
+ end
+end
+
+def fun_l20_n458(x)
+ if (x < 1)
+ fun_l21_n855(x)
+ else
+ fun_l21_n802(x)
+ end
+end
+
+def fun_l20_n459(x)
+ if (x < 1)
+ fun_l21_n720(x)
+ else
+ fun_l21_n691(x)
+ end
+end
+
+def fun_l20_n460(x)
+ if (x < 1)
+ fun_l21_n440(x)
+ else
+ fun_l21_n353(x)
+ end
+end
+
+def fun_l20_n461(x)
+ if (x < 1)
+ fun_l21_n604(x)
+ else
+ fun_l21_n872(x)
+ end
+end
+
+def fun_l20_n462(x)
+ if (x < 1)
+ fun_l21_n355(x)
+ else
+ fun_l21_n699(x)
+ end
+end
+
+def fun_l20_n463(x)
+ if (x < 1)
+ fun_l21_n476(x)
+ else
+ fun_l21_n447(x)
+ end
+end
+
+def fun_l20_n464(x)
+ if (x < 1)
+ fun_l21_n554(x)
+ else
+ fun_l21_n745(x)
+ end
+end
+
+def fun_l20_n465(x)
+ if (x < 1)
+ fun_l21_n632(x)
+ else
+ fun_l21_n281(x)
+ end
+end
+
+def fun_l20_n466(x)
+ if (x < 1)
+ fun_l21_n873(x)
+ else
+ fun_l21_n449(x)
+ end
+end
+
+def fun_l20_n467(x)
+ if (x < 1)
+ fun_l21_n90(x)
+ else
+ fun_l21_n933(x)
+ end
+end
+
+def fun_l20_n468(x)
+ if (x < 1)
+ fun_l21_n915(x)
+ else
+ fun_l21_n801(x)
+ end
+end
+
+def fun_l20_n469(x)
+ if (x < 1)
+ fun_l21_n429(x)
+ else
+ fun_l21_n139(x)
+ end
+end
+
+def fun_l20_n470(x)
+ if (x < 1)
+ fun_l21_n858(x)
+ else
+ fun_l21_n450(x)
+ end
+end
+
+def fun_l20_n471(x)
+ if (x < 1)
+ fun_l21_n556(x)
+ else
+ fun_l21_n109(x)
+ end
+end
+
+def fun_l20_n472(x)
+ if (x < 1)
+ fun_l21_n395(x)
+ else
+ fun_l21_n129(x)
+ end
+end
+
+def fun_l20_n473(x)
+ if (x < 1)
+ fun_l21_n282(x)
+ else
+ fun_l21_n277(x)
+ end
+end
+
+def fun_l20_n474(x)
+ if (x < 1)
+ fun_l21_n90(x)
+ else
+ fun_l21_n399(x)
+ end
+end
+
+def fun_l20_n475(x)
+ if (x < 1)
+ fun_l21_n719(x)
+ else
+ fun_l21_n698(x)
+ end
+end
+
+def fun_l20_n476(x)
+ if (x < 1)
+ fun_l21_n597(x)
+ else
+ fun_l21_n210(x)
+ end
+end
+
+def fun_l20_n477(x)
+ if (x < 1)
+ fun_l21_n722(x)
+ else
+ fun_l21_n31(x)
+ end
+end
+
+def fun_l20_n478(x)
+ if (x < 1)
+ fun_l21_n874(x)
+ else
+ fun_l21_n527(x)
+ end
+end
+
+def fun_l20_n479(x)
+ if (x < 1)
+ fun_l21_n247(x)
+ else
+ fun_l21_n164(x)
+ end
+end
+
+def fun_l20_n480(x)
+ if (x < 1)
+ fun_l21_n449(x)
+ else
+ fun_l21_n106(x)
+ end
+end
+
+def fun_l20_n481(x)
+ if (x < 1)
+ fun_l21_n787(x)
+ else
+ fun_l21_n678(x)
+ end
+end
+
+def fun_l20_n482(x)
+ if (x < 1)
+ fun_l21_n176(x)
+ else
+ fun_l21_n650(x)
+ end
+end
+
+def fun_l20_n483(x)
+ if (x < 1)
+ fun_l21_n314(x)
+ else
+ fun_l21_n325(x)
+ end
+end
+
+def fun_l20_n484(x)
+ if (x < 1)
+ fun_l21_n877(x)
+ else
+ fun_l21_n539(x)
+ end
+end
+
+def fun_l20_n485(x)
+ if (x < 1)
+ fun_l21_n230(x)
+ else
+ fun_l21_n314(x)
+ end
+end
+
+def fun_l20_n486(x)
+ if (x < 1)
+ fun_l21_n778(x)
+ else
+ fun_l21_n493(x)
+ end
+end
+
+def fun_l20_n487(x)
+ if (x < 1)
+ fun_l21_n615(x)
+ else
+ fun_l21_n111(x)
+ end
+end
+
+def fun_l20_n488(x)
+ if (x < 1)
+ fun_l21_n133(x)
+ else
+ fun_l21_n381(x)
+ end
+end
+
+def fun_l20_n489(x)
+ if (x < 1)
+ fun_l21_n332(x)
+ else
+ fun_l21_n68(x)
+ end
+end
+
+def fun_l20_n490(x)
+ if (x < 1)
+ fun_l21_n995(x)
+ else
+ fun_l21_n861(x)
+ end
+end
+
+def fun_l20_n491(x)
+ if (x < 1)
+ fun_l21_n537(x)
+ else
+ fun_l21_n164(x)
+ end
+end
+
+def fun_l20_n492(x)
+ if (x < 1)
+ fun_l21_n759(x)
+ else
+ fun_l21_n598(x)
+ end
+end
+
+def fun_l20_n493(x)
+ if (x < 1)
+ fun_l21_n890(x)
+ else
+ fun_l21_n644(x)
+ end
+end
+
+def fun_l20_n494(x)
+ if (x < 1)
+ fun_l21_n641(x)
+ else
+ fun_l21_n420(x)
+ end
+end
+
+def fun_l20_n495(x)
+ if (x < 1)
+ fun_l21_n826(x)
+ else
+ fun_l21_n821(x)
+ end
+end
+
+def fun_l20_n496(x)
+ if (x < 1)
+ fun_l21_n348(x)
+ else
+ fun_l21_n277(x)
+ end
+end
+
+def fun_l20_n497(x)
+ if (x < 1)
+ fun_l21_n14(x)
+ else
+ fun_l21_n950(x)
+ end
+end
+
+def fun_l20_n498(x)
+ if (x < 1)
+ fun_l21_n43(x)
+ else
+ fun_l21_n759(x)
+ end
+end
+
+def fun_l20_n499(x)
+ if (x < 1)
+ fun_l21_n899(x)
+ else
+ fun_l21_n730(x)
+ end
+end
+
+def fun_l20_n500(x)
+ if (x < 1)
+ fun_l21_n918(x)
+ else
+ fun_l21_n454(x)
+ end
+end
+
+def fun_l20_n501(x)
+ if (x < 1)
+ fun_l21_n821(x)
+ else
+ fun_l21_n388(x)
+ end
+end
+
+def fun_l20_n502(x)
+ if (x < 1)
+ fun_l21_n164(x)
+ else
+ fun_l21_n718(x)
+ end
+end
+
+def fun_l20_n503(x)
+ if (x < 1)
+ fun_l21_n152(x)
+ else
+ fun_l21_n613(x)
+ end
+end
+
+def fun_l20_n504(x)
+ if (x < 1)
+ fun_l21_n931(x)
+ else
+ fun_l21_n912(x)
+ end
+end
+
+def fun_l20_n505(x)
+ if (x < 1)
+ fun_l21_n655(x)
+ else
+ fun_l21_n38(x)
+ end
+end
+
+def fun_l20_n506(x)
+ if (x < 1)
+ fun_l21_n408(x)
+ else
+ fun_l21_n38(x)
+ end
+end
+
+def fun_l20_n507(x)
+ if (x < 1)
+ fun_l21_n960(x)
+ else
+ fun_l21_n857(x)
+ end
+end
+
+def fun_l20_n508(x)
+ if (x < 1)
+ fun_l21_n308(x)
+ else
+ fun_l21_n210(x)
+ end
+end
+
+def fun_l20_n509(x)
+ if (x < 1)
+ fun_l21_n985(x)
+ else
+ fun_l21_n537(x)
+ end
+end
+
+def fun_l20_n510(x)
+ if (x < 1)
+ fun_l21_n200(x)
+ else
+ fun_l21_n598(x)
+ end
+end
+
+def fun_l20_n511(x)
+ if (x < 1)
+ fun_l21_n451(x)
+ else
+ fun_l21_n958(x)
+ end
+end
+
+def fun_l20_n512(x)
+ if (x < 1)
+ fun_l21_n459(x)
+ else
+ fun_l21_n823(x)
+ end
+end
+
+def fun_l20_n513(x)
+ if (x < 1)
+ fun_l21_n153(x)
+ else
+ fun_l21_n931(x)
+ end
+end
+
+def fun_l20_n514(x)
+ if (x < 1)
+ fun_l21_n213(x)
+ else
+ fun_l21_n336(x)
+ end
+end
+
+def fun_l20_n515(x)
+ if (x < 1)
+ fun_l21_n401(x)
+ else
+ fun_l21_n222(x)
+ end
+end
+
+def fun_l20_n516(x)
+ if (x < 1)
+ fun_l21_n582(x)
+ else
+ fun_l21_n735(x)
+ end
+end
+
+def fun_l20_n517(x)
+ if (x < 1)
+ fun_l21_n799(x)
+ else
+ fun_l21_n139(x)
+ end
+end
+
+def fun_l20_n518(x)
+ if (x < 1)
+ fun_l21_n279(x)
+ else
+ fun_l21_n476(x)
+ end
+end
+
+def fun_l20_n519(x)
+ if (x < 1)
+ fun_l21_n624(x)
+ else
+ fun_l21_n276(x)
+ end
+end
+
+def fun_l20_n520(x)
+ if (x < 1)
+ fun_l21_n505(x)
+ else
+ fun_l21_n523(x)
+ end
+end
+
+def fun_l20_n521(x)
+ if (x < 1)
+ fun_l21_n887(x)
+ else
+ fun_l21_n948(x)
+ end
+end
+
+def fun_l20_n522(x)
+ if (x < 1)
+ fun_l21_n969(x)
+ else
+ fun_l21_n988(x)
+ end
+end
+
+def fun_l20_n523(x)
+ if (x < 1)
+ fun_l21_n271(x)
+ else
+ fun_l21_n189(x)
+ end
+end
+
+def fun_l20_n524(x)
+ if (x < 1)
+ fun_l21_n478(x)
+ else
+ fun_l21_n111(x)
+ end
+end
+
+def fun_l20_n525(x)
+ if (x < 1)
+ fun_l21_n808(x)
+ else
+ fun_l21_n256(x)
+ end
+end
+
+def fun_l20_n526(x)
+ if (x < 1)
+ fun_l21_n715(x)
+ else
+ fun_l21_n508(x)
+ end
+end
+
+def fun_l20_n527(x)
+ if (x < 1)
+ fun_l21_n819(x)
+ else
+ fun_l21_n670(x)
+ end
+end
+
+def fun_l20_n528(x)
+ if (x < 1)
+ fun_l21_n598(x)
+ else
+ fun_l21_n369(x)
+ end
+end
+
+def fun_l20_n529(x)
+ if (x < 1)
+ fun_l21_n391(x)
+ else
+ fun_l21_n651(x)
+ end
+end
+
+def fun_l20_n530(x)
+ if (x < 1)
+ fun_l21_n69(x)
+ else
+ fun_l21_n706(x)
+ end
+end
+
+def fun_l20_n531(x)
+ if (x < 1)
+ fun_l21_n786(x)
+ else
+ fun_l21_n289(x)
+ end
+end
+
+def fun_l20_n532(x)
+ if (x < 1)
+ fun_l21_n128(x)
+ else
+ fun_l21_n789(x)
+ end
+end
+
+def fun_l20_n533(x)
+ if (x < 1)
+ fun_l21_n935(x)
+ else
+ fun_l21_n29(x)
+ end
+end
+
+def fun_l20_n534(x)
+ if (x < 1)
+ fun_l21_n735(x)
+ else
+ fun_l21_n381(x)
+ end
+end
+
+def fun_l20_n535(x)
+ if (x < 1)
+ fun_l21_n299(x)
+ else
+ fun_l21_n932(x)
+ end
+end
+
+def fun_l20_n536(x)
+ if (x < 1)
+ fun_l21_n823(x)
+ else
+ fun_l21_n7(x)
+ end
+end
+
+def fun_l20_n537(x)
+ if (x < 1)
+ fun_l21_n152(x)
+ else
+ fun_l21_n758(x)
+ end
+end
+
+def fun_l20_n538(x)
+ if (x < 1)
+ fun_l21_n8(x)
+ else
+ fun_l21_n772(x)
+ end
+end
+
+def fun_l20_n539(x)
+ if (x < 1)
+ fun_l21_n900(x)
+ else
+ fun_l21_n984(x)
+ end
+end
+
+def fun_l20_n540(x)
+ if (x < 1)
+ fun_l21_n726(x)
+ else
+ fun_l21_n337(x)
+ end
+end
+
+def fun_l20_n541(x)
+ if (x < 1)
+ fun_l21_n557(x)
+ else
+ fun_l21_n998(x)
+ end
+end
+
+def fun_l20_n542(x)
+ if (x < 1)
+ fun_l21_n898(x)
+ else
+ fun_l21_n389(x)
+ end
+end
+
+def fun_l20_n543(x)
+ if (x < 1)
+ fun_l21_n71(x)
+ else
+ fun_l21_n276(x)
+ end
+end
+
+def fun_l20_n544(x)
+ if (x < 1)
+ fun_l21_n888(x)
+ else
+ fun_l21_n525(x)
+ end
+end
+
+def fun_l20_n545(x)
+ if (x < 1)
+ fun_l21_n797(x)
+ else
+ fun_l21_n487(x)
+ end
+end
+
+def fun_l20_n546(x)
+ if (x < 1)
+ fun_l21_n825(x)
+ else
+ fun_l21_n349(x)
+ end
+end
+
+def fun_l20_n547(x)
+ if (x < 1)
+ fun_l21_n538(x)
+ else
+ fun_l21_n817(x)
+ end
+end
+
+def fun_l20_n548(x)
+ if (x < 1)
+ fun_l21_n630(x)
+ else
+ fun_l21_n432(x)
+ end
+end
+
+def fun_l20_n549(x)
+ if (x < 1)
+ fun_l21_n553(x)
+ else
+ fun_l21_n179(x)
+ end
+end
+
+def fun_l20_n550(x)
+ if (x < 1)
+ fun_l21_n982(x)
+ else
+ fun_l21_n350(x)
+ end
+end
+
+def fun_l20_n551(x)
+ if (x < 1)
+ fun_l21_n404(x)
+ else
+ fun_l21_n313(x)
+ end
+end
+
+def fun_l20_n552(x)
+ if (x < 1)
+ fun_l21_n893(x)
+ else
+ fun_l21_n879(x)
+ end
+end
+
+def fun_l20_n553(x)
+ if (x < 1)
+ fun_l21_n360(x)
+ else
+ fun_l21_n403(x)
+ end
+end
+
+def fun_l20_n554(x)
+ if (x < 1)
+ fun_l21_n607(x)
+ else
+ fun_l21_n18(x)
+ end
+end
+
+def fun_l20_n555(x)
+ if (x < 1)
+ fun_l21_n269(x)
+ else
+ fun_l21_n514(x)
+ end
+end
+
+def fun_l20_n556(x)
+ if (x < 1)
+ fun_l21_n22(x)
+ else
+ fun_l21_n164(x)
+ end
+end
+
+def fun_l20_n557(x)
+ if (x < 1)
+ fun_l21_n560(x)
+ else
+ fun_l21_n671(x)
+ end
+end
+
+def fun_l20_n558(x)
+ if (x < 1)
+ fun_l21_n857(x)
+ else
+ fun_l21_n34(x)
+ end
+end
+
+def fun_l20_n559(x)
+ if (x < 1)
+ fun_l21_n750(x)
+ else
+ fun_l21_n267(x)
+ end
+end
+
+def fun_l20_n560(x)
+ if (x < 1)
+ fun_l21_n97(x)
+ else
+ fun_l21_n72(x)
+ end
+end
+
+def fun_l20_n561(x)
+ if (x < 1)
+ fun_l21_n482(x)
+ else
+ fun_l21_n644(x)
+ end
+end
+
+def fun_l20_n562(x)
+ if (x < 1)
+ fun_l21_n147(x)
+ else
+ fun_l21_n524(x)
+ end
+end
+
+def fun_l20_n563(x)
+ if (x < 1)
+ fun_l21_n509(x)
+ else
+ fun_l21_n124(x)
+ end
+end
+
+def fun_l20_n564(x)
+ if (x < 1)
+ fun_l21_n183(x)
+ else
+ fun_l21_n254(x)
+ end
+end
+
+def fun_l20_n565(x)
+ if (x < 1)
+ fun_l21_n919(x)
+ else
+ fun_l21_n727(x)
+ end
+end
+
+def fun_l20_n566(x)
+ if (x < 1)
+ fun_l21_n847(x)
+ else
+ fun_l21_n546(x)
+ end
+end
+
+def fun_l20_n567(x)
+ if (x < 1)
+ fun_l21_n214(x)
+ else
+ fun_l21_n692(x)
+ end
+end
+
+def fun_l20_n568(x)
+ if (x < 1)
+ fun_l21_n867(x)
+ else
+ fun_l21_n747(x)
+ end
+end
+
+def fun_l20_n569(x)
+ if (x < 1)
+ fun_l21_n277(x)
+ else
+ fun_l21_n130(x)
+ end
+end
+
+def fun_l20_n570(x)
+ if (x < 1)
+ fun_l21_n472(x)
+ else
+ fun_l21_n296(x)
+ end
+end
+
+def fun_l20_n571(x)
+ if (x < 1)
+ fun_l21_n633(x)
+ else
+ fun_l21_n704(x)
+ end
+end
+
+def fun_l20_n572(x)
+ if (x < 1)
+ fun_l21_n179(x)
+ else
+ fun_l21_n683(x)
+ end
+end
+
+def fun_l20_n573(x)
+ if (x < 1)
+ fun_l21_n607(x)
+ else
+ fun_l21_n140(x)
+ end
+end
+
+def fun_l20_n574(x)
+ if (x < 1)
+ fun_l21_n647(x)
+ else
+ fun_l21_n233(x)
+ end
+end
+
+def fun_l20_n575(x)
+ if (x < 1)
+ fun_l21_n992(x)
+ else
+ fun_l21_n951(x)
+ end
+end
+
+def fun_l20_n576(x)
+ if (x < 1)
+ fun_l21_n750(x)
+ else
+ fun_l21_n574(x)
+ end
+end
+
+def fun_l20_n577(x)
+ if (x < 1)
+ fun_l21_n116(x)
+ else
+ fun_l21_n488(x)
+ end
+end
+
+def fun_l20_n578(x)
+ if (x < 1)
+ fun_l21_n580(x)
+ else
+ fun_l21_n547(x)
+ end
+end
+
+def fun_l20_n579(x)
+ if (x < 1)
+ fun_l21_n576(x)
+ else
+ fun_l21_n744(x)
+ end
+end
+
+def fun_l20_n580(x)
+ if (x < 1)
+ fun_l21_n791(x)
+ else
+ fun_l21_n495(x)
+ end
+end
+
+def fun_l20_n581(x)
+ if (x < 1)
+ fun_l21_n188(x)
+ else
+ fun_l21_n795(x)
+ end
+end
+
+def fun_l20_n582(x)
+ if (x < 1)
+ fun_l21_n477(x)
+ else
+ fun_l21_n965(x)
+ end
+end
+
+def fun_l20_n583(x)
+ if (x < 1)
+ fun_l21_n436(x)
+ else
+ fun_l21_n169(x)
+ end
+end
+
+def fun_l20_n584(x)
+ if (x < 1)
+ fun_l21_n518(x)
+ else
+ fun_l21_n849(x)
+ end
+end
+
+def fun_l20_n585(x)
+ if (x < 1)
+ fun_l21_n747(x)
+ else
+ fun_l21_n882(x)
+ end
+end
+
+def fun_l20_n586(x)
+ if (x < 1)
+ fun_l21_n0(x)
+ else
+ fun_l21_n481(x)
+ end
+end
+
+def fun_l20_n587(x)
+ if (x < 1)
+ fun_l21_n876(x)
+ else
+ fun_l21_n279(x)
+ end
+end
+
+def fun_l20_n588(x)
+ if (x < 1)
+ fun_l21_n355(x)
+ else
+ fun_l21_n744(x)
+ end
+end
+
+def fun_l20_n589(x)
+ if (x < 1)
+ fun_l21_n408(x)
+ else
+ fun_l21_n27(x)
+ end
+end
+
+def fun_l20_n590(x)
+ if (x < 1)
+ fun_l21_n152(x)
+ else
+ fun_l21_n867(x)
+ end
+end
+
+def fun_l20_n591(x)
+ if (x < 1)
+ fun_l21_n543(x)
+ else
+ fun_l21_n193(x)
+ end
+end
+
+def fun_l20_n592(x)
+ if (x < 1)
+ fun_l21_n160(x)
+ else
+ fun_l21_n185(x)
+ end
+end
+
+def fun_l20_n593(x)
+ if (x < 1)
+ fun_l21_n613(x)
+ else
+ fun_l21_n403(x)
+ end
+end
+
+def fun_l20_n594(x)
+ if (x < 1)
+ fun_l21_n660(x)
+ else
+ fun_l21_n933(x)
+ end
+end
+
+def fun_l20_n595(x)
+ if (x < 1)
+ fun_l21_n222(x)
+ else
+ fun_l21_n922(x)
+ end
+end
+
+def fun_l20_n596(x)
+ if (x < 1)
+ fun_l21_n668(x)
+ else
+ fun_l21_n857(x)
+ end
+end
+
+def fun_l20_n597(x)
+ if (x < 1)
+ fun_l21_n846(x)
+ else
+ fun_l21_n164(x)
+ end
+end
+
+def fun_l20_n598(x)
+ if (x < 1)
+ fun_l21_n755(x)
+ else
+ fun_l21_n591(x)
+ end
+end
+
+def fun_l20_n599(x)
+ if (x < 1)
+ fun_l21_n224(x)
+ else
+ fun_l21_n390(x)
+ end
+end
+
+def fun_l20_n600(x)
+ if (x < 1)
+ fun_l21_n713(x)
+ else
+ fun_l21_n735(x)
+ end
+end
+
+def fun_l20_n601(x)
+ if (x < 1)
+ fun_l21_n551(x)
+ else
+ fun_l21_n57(x)
+ end
+end
+
+def fun_l20_n602(x)
+ if (x < 1)
+ fun_l21_n808(x)
+ else
+ fun_l21_n928(x)
+ end
+end
+
+def fun_l20_n603(x)
+ if (x < 1)
+ fun_l21_n471(x)
+ else
+ fun_l21_n436(x)
+ end
+end
+
+def fun_l20_n604(x)
+ if (x < 1)
+ fun_l21_n482(x)
+ else
+ fun_l21_n445(x)
+ end
+end
+
+def fun_l20_n605(x)
+ if (x < 1)
+ fun_l21_n680(x)
+ else
+ fun_l21_n433(x)
+ end
+end
+
+def fun_l20_n606(x)
+ if (x < 1)
+ fun_l21_n687(x)
+ else
+ fun_l21_n885(x)
+ end
+end
+
+def fun_l20_n607(x)
+ if (x < 1)
+ fun_l21_n370(x)
+ else
+ fun_l21_n414(x)
+ end
+end
+
+def fun_l20_n608(x)
+ if (x < 1)
+ fun_l21_n11(x)
+ else
+ fun_l21_n792(x)
+ end
+end
+
+def fun_l20_n609(x)
+ if (x < 1)
+ fun_l21_n490(x)
+ else
+ fun_l21_n947(x)
+ end
+end
+
+def fun_l20_n610(x)
+ if (x < 1)
+ fun_l21_n609(x)
+ else
+ fun_l21_n514(x)
+ end
+end
+
+def fun_l20_n611(x)
+ if (x < 1)
+ fun_l21_n873(x)
+ else
+ fun_l21_n247(x)
+ end
+end
+
+def fun_l20_n612(x)
+ if (x < 1)
+ fun_l21_n199(x)
+ else
+ fun_l21_n421(x)
+ end
+end
+
+def fun_l20_n613(x)
+ if (x < 1)
+ fun_l21_n807(x)
+ else
+ fun_l21_n905(x)
+ end
+end
+
+def fun_l20_n614(x)
+ if (x < 1)
+ fun_l21_n260(x)
+ else
+ fun_l21_n926(x)
+ end
+end
+
+def fun_l20_n615(x)
+ if (x < 1)
+ fun_l21_n288(x)
+ else
+ fun_l21_n944(x)
+ end
+end
+
+def fun_l20_n616(x)
+ if (x < 1)
+ fun_l21_n346(x)
+ else
+ fun_l21_n949(x)
+ end
+end
+
+def fun_l20_n617(x)
+ if (x < 1)
+ fun_l21_n243(x)
+ else
+ fun_l21_n527(x)
+ end
+end
+
+def fun_l20_n618(x)
+ if (x < 1)
+ fun_l21_n193(x)
+ else
+ fun_l21_n576(x)
+ end
+end
+
+def fun_l20_n619(x)
+ if (x < 1)
+ fun_l21_n861(x)
+ else
+ fun_l21_n19(x)
+ end
+end
+
+def fun_l20_n620(x)
+ if (x < 1)
+ fun_l21_n735(x)
+ else
+ fun_l21_n477(x)
+ end
+end
+
+def fun_l20_n621(x)
+ if (x < 1)
+ fun_l21_n368(x)
+ else
+ fun_l21_n250(x)
+ end
+end
+
+def fun_l20_n622(x)
+ if (x < 1)
+ fun_l21_n235(x)
+ else
+ fun_l21_n461(x)
+ end
+end
+
+def fun_l20_n623(x)
+ if (x < 1)
+ fun_l21_n289(x)
+ else
+ fun_l21_n217(x)
+ end
+end
+
+def fun_l20_n624(x)
+ if (x < 1)
+ fun_l21_n951(x)
+ else
+ fun_l21_n124(x)
+ end
+end
+
+def fun_l20_n625(x)
+ if (x < 1)
+ fun_l21_n590(x)
+ else
+ fun_l21_n163(x)
+ end
+end
+
+def fun_l20_n626(x)
+ if (x < 1)
+ fun_l21_n122(x)
+ else
+ fun_l21_n34(x)
+ end
+end
+
+def fun_l20_n627(x)
+ if (x < 1)
+ fun_l21_n139(x)
+ else
+ fun_l21_n452(x)
+ end
+end
+
+def fun_l20_n628(x)
+ if (x < 1)
+ fun_l21_n626(x)
+ else
+ fun_l21_n816(x)
+ end
+end
+
+def fun_l20_n629(x)
+ if (x < 1)
+ fun_l21_n713(x)
+ else
+ fun_l21_n291(x)
+ end
+end
+
+def fun_l20_n630(x)
+ if (x < 1)
+ fun_l21_n896(x)
+ else
+ fun_l21_n167(x)
+ end
+end
+
+def fun_l20_n631(x)
+ if (x < 1)
+ fun_l21_n461(x)
+ else
+ fun_l21_n965(x)
+ end
+end
+
+def fun_l20_n632(x)
+ if (x < 1)
+ fun_l21_n984(x)
+ else
+ fun_l21_n336(x)
+ end
+end
+
+def fun_l20_n633(x)
+ if (x < 1)
+ fun_l21_n525(x)
+ else
+ fun_l21_n500(x)
+ end
+end
+
+def fun_l20_n634(x)
+ if (x < 1)
+ fun_l21_n296(x)
+ else
+ fun_l21_n535(x)
+ end
+end
+
+def fun_l20_n635(x)
+ if (x < 1)
+ fun_l21_n961(x)
+ else
+ fun_l21_n296(x)
+ end
+end
+
+def fun_l20_n636(x)
+ if (x < 1)
+ fun_l21_n736(x)
+ else
+ fun_l21_n474(x)
+ end
+end
+
+def fun_l20_n637(x)
+ if (x < 1)
+ fun_l21_n942(x)
+ else
+ fun_l21_n503(x)
+ end
+end
+
+def fun_l20_n638(x)
+ if (x < 1)
+ fun_l21_n906(x)
+ else
+ fun_l21_n612(x)
+ end
+end
+
+def fun_l20_n639(x)
+ if (x < 1)
+ fun_l21_n152(x)
+ else
+ fun_l21_n772(x)
+ end
+end
+
+def fun_l20_n640(x)
+ if (x < 1)
+ fun_l21_n109(x)
+ else
+ fun_l21_n416(x)
+ end
+end
+
+def fun_l20_n641(x)
+ if (x < 1)
+ fun_l21_n189(x)
+ else
+ fun_l21_n353(x)
+ end
+end
+
+def fun_l20_n642(x)
+ if (x < 1)
+ fun_l21_n414(x)
+ else
+ fun_l21_n550(x)
+ end
+end
+
+def fun_l20_n643(x)
+ if (x < 1)
+ fun_l21_n469(x)
+ else
+ fun_l21_n542(x)
+ end
+end
+
+def fun_l20_n644(x)
+ if (x < 1)
+ fun_l21_n465(x)
+ else
+ fun_l21_n742(x)
+ end
+end
+
+def fun_l20_n645(x)
+ if (x < 1)
+ fun_l21_n139(x)
+ else
+ fun_l21_n138(x)
+ end
+end
+
+def fun_l20_n646(x)
+ if (x < 1)
+ fun_l21_n550(x)
+ else
+ fun_l21_n910(x)
+ end
+end
+
+def fun_l20_n647(x)
+ if (x < 1)
+ fun_l21_n939(x)
+ else
+ fun_l21_n347(x)
+ end
+end
+
+def fun_l20_n648(x)
+ if (x < 1)
+ fun_l21_n391(x)
+ else
+ fun_l21_n648(x)
+ end
+end
+
+def fun_l20_n649(x)
+ if (x < 1)
+ fun_l21_n690(x)
+ else
+ fun_l21_n627(x)
+ end
+end
+
+def fun_l20_n650(x)
+ if (x < 1)
+ fun_l21_n596(x)
+ else
+ fun_l21_n681(x)
+ end
+end
+
+def fun_l20_n651(x)
+ if (x < 1)
+ fun_l21_n686(x)
+ else
+ fun_l21_n399(x)
+ end
+end
+
+def fun_l20_n652(x)
+ if (x < 1)
+ fun_l21_n461(x)
+ else
+ fun_l21_n851(x)
+ end
+end
+
+def fun_l20_n653(x)
+ if (x < 1)
+ fun_l21_n562(x)
+ else
+ fun_l21_n60(x)
+ end
+end
+
+def fun_l20_n654(x)
+ if (x < 1)
+ fun_l21_n269(x)
+ else
+ fun_l21_n937(x)
+ end
+end
+
+def fun_l20_n655(x)
+ if (x < 1)
+ fun_l21_n994(x)
+ else
+ fun_l21_n386(x)
+ end
+end
+
+def fun_l20_n656(x)
+ if (x < 1)
+ fun_l21_n568(x)
+ else
+ fun_l21_n180(x)
+ end
+end
+
+def fun_l20_n657(x)
+ if (x < 1)
+ fun_l21_n334(x)
+ else
+ fun_l21_n362(x)
+ end
+end
+
+def fun_l20_n658(x)
+ if (x < 1)
+ fun_l21_n14(x)
+ else
+ fun_l21_n311(x)
+ end
+end
+
+def fun_l20_n659(x)
+ if (x < 1)
+ fun_l21_n715(x)
+ else
+ fun_l21_n945(x)
+ end
+end
+
+def fun_l20_n660(x)
+ if (x < 1)
+ fun_l21_n739(x)
+ else
+ fun_l21_n456(x)
+ end
+end
+
+def fun_l20_n661(x)
+ if (x < 1)
+ fun_l21_n298(x)
+ else
+ fun_l21_n344(x)
+ end
+end
+
+def fun_l20_n662(x)
+ if (x < 1)
+ fun_l21_n134(x)
+ else
+ fun_l21_n828(x)
+ end
+end
+
+def fun_l20_n663(x)
+ if (x < 1)
+ fun_l21_n831(x)
+ else
+ fun_l21_n231(x)
+ end
+end
+
+def fun_l20_n664(x)
+ if (x < 1)
+ fun_l21_n330(x)
+ else
+ fun_l21_n733(x)
+ end
+end
+
+def fun_l20_n665(x)
+ if (x < 1)
+ fun_l21_n22(x)
+ else
+ fun_l21_n973(x)
+ end
+end
+
+def fun_l20_n666(x)
+ if (x < 1)
+ fun_l21_n277(x)
+ else
+ fun_l21_n988(x)
+ end
+end
+
+def fun_l20_n667(x)
+ if (x < 1)
+ fun_l21_n252(x)
+ else
+ fun_l21_n8(x)
+ end
+end
+
+def fun_l20_n668(x)
+ if (x < 1)
+ fun_l21_n991(x)
+ else
+ fun_l21_n801(x)
+ end
+end
+
+def fun_l20_n669(x)
+ if (x < 1)
+ fun_l21_n811(x)
+ else
+ fun_l21_n660(x)
+ end
+end
+
+def fun_l20_n670(x)
+ if (x < 1)
+ fun_l21_n384(x)
+ else
+ fun_l21_n596(x)
+ end
+end
+
+def fun_l20_n671(x)
+ if (x < 1)
+ fun_l21_n509(x)
+ else
+ fun_l21_n133(x)
+ end
+end
+
+def fun_l20_n672(x)
+ if (x < 1)
+ fun_l21_n650(x)
+ else
+ fun_l21_n679(x)
+ end
+end
+
+def fun_l20_n673(x)
+ if (x < 1)
+ fun_l21_n323(x)
+ else
+ fun_l21_n824(x)
+ end
+end
+
+def fun_l20_n674(x)
+ if (x < 1)
+ fun_l21_n728(x)
+ else
+ fun_l21_n697(x)
+ end
+end
+
+def fun_l20_n675(x)
+ if (x < 1)
+ fun_l21_n367(x)
+ else
+ fun_l21_n383(x)
+ end
+end
+
+def fun_l20_n676(x)
+ if (x < 1)
+ fun_l21_n280(x)
+ else
+ fun_l21_n309(x)
+ end
+end
+
+def fun_l20_n677(x)
+ if (x < 1)
+ fun_l21_n17(x)
+ else
+ fun_l21_n687(x)
+ end
+end
+
+def fun_l20_n678(x)
+ if (x < 1)
+ fun_l21_n133(x)
+ else
+ fun_l21_n250(x)
+ end
+end
+
+def fun_l20_n679(x)
+ if (x < 1)
+ fun_l21_n713(x)
+ else
+ fun_l21_n630(x)
+ end
+end
+
+def fun_l20_n680(x)
+ if (x < 1)
+ fun_l21_n348(x)
+ else
+ fun_l21_n737(x)
+ end
+end
+
+def fun_l20_n681(x)
+ if (x < 1)
+ fun_l21_n450(x)
+ else
+ fun_l21_n283(x)
+ end
+end
+
+def fun_l20_n682(x)
+ if (x < 1)
+ fun_l21_n568(x)
+ else
+ fun_l21_n22(x)
+ end
+end
+
+def fun_l20_n683(x)
+ if (x < 1)
+ fun_l21_n173(x)
+ else
+ fun_l21_n457(x)
+ end
+end
+
+def fun_l20_n684(x)
+ if (x < 1)
+ fun_l21_n846(x)
+ else
+ fun_l21_n415(x)
+ end
+end
+
+def fun_l20_n685(x)
+ if (x < 1)
+ fun_l21_n757(x)
+ else
+ fun_l21_n817(x)
+ end
+end
+
+def fun_l20_n686(x)
+ if (x < 1)
+ fun_l21_n282(x)
+ else
+ fun_l21_n503(x)
+ end
+end
+
+def fun_l20_n687(x)
+ if (x < 1)
+ fun_l21_n337(x)
+ else
+ fun_l21_n407(x)
+ end
+end
+
+def fun_l20_n688(x)
+ if (x < 1)
+ fun_l21_n783(x)
+ else
+ fun_l21_n307(x)
+ end
+end
+
+def fun_l20_n689(x)
+ if (x < 1)
+ fun_l21_n397(x)
+ else
+ fun_l21_n10(x)
+ end
+end
+
+def fun_l20_n690(x)
+ if (x < 1)
+ fun_l21_n100(x)
+ else
+ fun_l21_n704(x)
+ end
+end
+
+def fun_l20_n691(x)
+ if (x < 1)
+ fun_l21_n380(x)
+ else
+ fun_l21_n780(x)
+ end
+end
+
+def fun_l20_n692(x)
+ if (x < 1)
+ fun_l21_n782(x)
+ else
+ fun_l21_n955(x)
+ end
+end
+
+def fun_l20_n693(x)
+ if (x < 1)
+ fun_l21_n40(x)
+ else
+ fun_l21_n599(x)
+ end
+end
+
+def fun_l20_n694(x)
+ if (x < 1)
+ fun_l21_n730(x)
+ else
+ fun_l21_n215(x)
+ end
+end
+
+def fun_l20_n695(x)
+ if (x < 1)
+ fun_l21_n168(x)
+ else
+ fun_l21_n757(x)
+ end
+end
+
+def fun_l20_n696(x)
+ if (x < 1)
+ fun_l21_n622(x)
+ else
+ fun_l21_n411(x)
+ end
+end
+
+def fun_l20_n697(x)
+ if (x < 1)
+ fun_l21_n958(x)
+ else
+ fun_l21_n832(x)
+ end
+end
+
+def fun_l20_n698(x)
+ if (x < 1)
+ fun_l21_n452(x)
+ else
+ fun_l21_n390(x)
+ end
+end
+
+def fun_l20_n699(x)
+ if (x < 1)
+ fun_l21_n669(x)
+ else
+ fun_l21_n642(x)
+ end
+end
+
+def fun_l20_n700(x)
+ if (x < 1)
+ fun_l21_n481(x)
+ else
+ fun_l21_n273(x)
+ end
+end
+
+def fun_l20_n701(x)
+ if (x < 1)
+ fun_l21_n305(x)
+ else
+ fun_l21_n783(x)
+ end
+end
+
+def fun_l20_n702(x)
+ if (x < 1)
+ fun_l21_n766(x)
+ else
+ fun_l21_n943(x)
+ end
+end
+
+def fun_l20_n703(x)
+ if (x < 1)
+ fun_l21_n440(x)
+ else
+ fun_l21_n875(x)
+ end
+end
+
+def fun_l20_n704(x)
+ if (x < 1)
+ fun_l21_n332(x)
+ else
+ fun_l21_n839(x)
+ end
+end
+
+def fun_l20_n705(x)
+ if (x < 1)
+ fun_l21_n459(x)
+ else
+ fun_l21_n341(x)
+ end
+end
+
+def fun_l20_n706(x)
+ if (x < 1)
+ fun_l21_n897(x)
+ else
+ fun_l21_n235(x)
+ end
+end
+
+def fun_l20_n707(x)
+ if (x < 1)
+ fun_l21_n400(x)
+ else
+ fun_l21_n349(x)
+ end
+end
+
+def fun_l20_n708(x)
+ if (x < 1)
+ fun_l21_n121(x)
+ else
+ fun_l21_n40(x)
+ end
+end
+
+def fun_l20_n709(x)
+ if (x < 1)
+ fun_l21_n496(x)
+ else
+ fun_l21_n473(x)
+ end
+end
+
+def fun_l20_n710(x)
+ if (x < 1)
+ fun_l21_n146(x)
+ else
+ fun_l21_n944(x)
+ end
+end
+
+def fun_l20_n711(x)
+ if (x < 1)
+ fun_l21_n497(x)
+ else
+ fun_l21_n322(x)
+ end
+end
+
+def fun_l20_n712(x)
+ if (x < 1)
+ fun_l21_n647(x)
+ else
+ fun_l21_n76(x)
+ end
+end
+
+def fun_l20_n713(x)
+ if (x < 1)
+ fun_l21_n402(x)
+ else
+ fun_l21_n904(x)
+ end
+end
+
+def fun_l20_n714(x)
+ if (x < 1)
+ fun_l21_n834(x)
+ else
+ fun_l21_n904(x)
+ end
+end
+
+def fun_l20_n715(x)
+ if (x < 1)
+ fun_l21_n482(x)
+ else
+ fun_l21_n399(x)
+ end
+end
+
+def fun_l20_n716(x)
+ if (x < 1)
+ fun_l21_n441(x)
+ else
+ fun_l21_n348(x)
+ end
+end
+
+def fun_l20_n717(x)
+ if (x < 1)
+ fun_l21_n577(x)
+ else
+ fun_l21_n815(x)
+ end
+end
+
+def fun_l20_n718(x)
+ if (x < 1)
+ fun_l21_n18(x)
+ else
+ fun_l21_n399(x)
+ end
+end
+
+def fun_l20_n719(x)
+ if (x < 1)
+ fun_l21_n245(x)
+ else
+ fun_l21_n928(x)
+ end
+end
+
+def fun_l20_n720(x)
+ if (x < 1)
+ fun_l21_n373(x)
+ else
+ fun_l21_n432(x)
+ end
+end
+
+def fun_l20_n721(x)
+ if (x < 1)
+ fun_l21_n20(x)
+ else
+ fun_l21_n485(x)
+ end
+end
+
+def fun_l20_n722(x)
+ if (x < 1)
+ fun_l21_n79(x)
+ else
+ fun_l21_n525(x)
+ end
+end
+
+def fun_l20_n723(x)
+ if (x < 1)
+ fun_l21_n474(x)
+ else
+ fun_l21_n706(x)
+ end
+end
+
+def fun_l20_n724(x)
+ if (x < 1)
+ fun_l21_n27(x)
+ else
+ fun_l21_n833(x)
+ end
+end
+
+def fun_l20_n725(x)
+ if (x < 1)
+ fun_l21_n386(x)
+ else
+ fun_l21_n422(x)
+ end
+end
+
+def fun_l20_n726(x)
+ if (x < 1)
+ fun_l21_n816(x)
+ else
+ fun_l21_n204(x)
+ end
+end
+
+def fun_l20_n727(x)
+ if (x < 1)
+ fun_l21_n502(x)
+ else
+ fun_l21_n554(x)
+ end
+end
+
+def fun_l20_n728(x)
+ if (x < 1)
+ fun_l21_n846(x)
+ else
+ fun_l21_n948(x)
+ end
+end
+
+def fun_l20_n729(x)
+ if (x < 1)
+ fun_l21_n308(x)
+ else
+ fun_l21_n408(x)
+ end
+end
+
+def fun_l20_n730(x)
+ if (x < 1)
+ fun_l21_n882(x)
+ else
+ fun_l21_n151(x)
+ end
+end
+
+def fun_l20_n731(x)
+ if (x < 1)
+ fun_l21_n22(x)
+ else
+ fun_l21_n839(x)
+ end
+end
+
+def fun_l20_n732(x)
+ if (x < 1)
+ fun_l21_n482(x)
+ else
+ fun_l21_n942(x)
+ end
+end
+
+def fun_l20_n733(x)
+ if (x < 1)
+ fun_l21_n959(x)
+ else
+ fun_l21_n615(x)
+ end
+end
+
+def fun_l20_n734(x)
+ if (x < 1)
+ fun_l21_n137(x)
+ else
+ fun_l21_n455(x)
+ end
+end
+
+def fun_l20_n735(x)
+ if (x < 1)
+ fun_l21_n388(x)
+ else
+ fun_l21_n362(x)
+ end
+end
+
+def fun_l20_n736(x)
+ if (x < 1)
+ fun_l21_n107(x)
+ else
+ fun_l21_n883(x)
+ end
+end
+
+def fun_l20_n737(x)
+ if (x < 1)
+ fun_l21_n42(x)
+ else
+ fun_l21_n288(x)
+ end
+end
+
+def fun_l20_n738(x)
+ if (x < 1)
+ fun_l21_n885(x)
+ else
+ fun_l21_n443(x)
+ end
+end
+
+def fun_l20_n739(x)
+ if (x < 1)
+ fun_l21_n414(x)
+ else
+ fun_l21_n976(x)
+ end
+end
+
+def fun_l20_n740(x)
+ if (x < 1)
+ fun_l21_n244(x)
+ else
+ fun_l21_n327(x)
+ end
+end
+
+def fun_l20_n741(x)
+ if (x < 1)
+ fun_l21_n832(x)
+ else
+ fun_l21_n951(x)
+ end
+end
+
+def fun_l20_n742(x)
+ if (x < 1)
+ fun_l21_n408(x)
+ else
+ fun_l21_n978(x)
+ end
+end
+
+def fun_l20_n743(x)
+ if (x < 1)
+ fun_l21_n517(x)
+ else
+ fun_l21_n468(x)
+ end
+end
+
+def fun_l20_n744(x)
+ if (x < 1)
+ fun_l21_n281(x)
+ else
+ fun_l21_n9(x)
+ end
+end
+
+def fun_l20_n745(x)
+ if (x < 1)
+ fun_l21_n488(x)
+ else
+ fun_l21_n526(x)
+ end
+end
+
+def fun_l20_n746(x)
+ if (x < 1)
+ fun_l21_n494(x)
+ else
+ fun_l21_n769(x)
+ end
+end
+
+def fun_l20_n747(x)
+ if (x < 1)
+ fun_l21_n277(x)
+ else
+ fun_l21_n103(x)
+ end
+end
+
+def fun_l20_n748(x)
+ if (x < 1)
+ fun_l21_n663(x)
+ else
+ fun_l21_n281(x)
+ end
+end
+
+def fun_l20_n749(x)
+ if (x < 1)
+ fun_l21_n260(x)
+ else
+ fun_l21_n320(x)
+ end
+end
+
+def fun_l20_n750(x)
+ if (x < 1)
+ fun_l21_n781(x)
+ else
+ fun_l21_n705(x)
+ end
+end
+
+def fun_l20_n751(x)
+ if (x < 1)
+ fun_l21_n317(x)
+ else
+ fun_l21_n728(x)
+ end
+end
+
+def fun_l20_n752(x)
+ if (x < 1)
+ fun_l21_n573(x)
+ else
+ fun_l21_n172(x)
+ end
+end
+
+def fun_l20_n753(x)
+ if (x < 1)
+ fun_l21_n352(x)
+ else
+ fun_l21_n933(x)
+ end
+end
+
+def fun_l20_n754(x)
+ if (x < 1)
+ fun_l21_n876(x)
+ else
+ fun_l21_n180(x)
+ end
+end
+
+def fun_l20_n755(x)
+ if (x < 1)
+ fun_l21_n937(x)
+ else
+ fun_l21_n387(x)
+ end
+end
+
+def fun_l20_n756(x)
+ if (x < 1)
+ fun_l21_n154(x)
+ else
+ fun_l21_n187(x)
+ end
+end
+
+def fun_l20_n757(x)
+ if (x < 1)
+ fun_l21_n766(x)
+ else
+ fun_l21_n259(x)
+ end
+end
+
+def fun_l20_n758(x)
+ if (x < 1)
+ fun_l21_n235(x)
+ else
+ fun_l21_n636(x)
+ end
+end
+
+def fun_l20_n759(x)
+ if (x < 1)
+ fun_l21_n872(x)
+ else
+ fun_l21_n913(x)
+ end
+end
+
+def fun_l20_n760(x)
+ if (x < 1)
+ fun_l21_n73(x)
+ else
+ fun_l21_n743(x)
+ end
+end
+
+def fun_l20_n761(x)
+ if (x < 1)
+ fun_l21_n666(x)
+ else
+ fun_l21_n777(x)
+ end
+end
+
+def fun_l20_n762(x)
+ if (x < 1)
+ fun_l21_n829(x)
+ else
+ fun_l21_n800(x)
+ end
+end
+
+def fun_l20_n763(x)
+ if (x < 1)
+ fun_l21_n37(x)
+ else
+ fun_l21_n152(x)
+ end
+end
+
+def fun_l20_n764(x)
+ if (x < 1)
+ fun_l21_n53(x)
+ else
+ fun_l21_n196(x)
+ end
+end
+
+def fun_l20_n765(x)
+ if (x < 1)
+ fun_l21_n511(x)
+ else
+ fun_l21_n415(x)
+ end
+end
+
+def fun_l20_n766(x)
+ if (x < 1)
+ fun_l21_n375(x)
+ else
+ fun_l21_n885(x)
+ end
+end
+
+def fun_l20_n767(x)
+ if (x < 1)
+ fun_l21_n267(x)
+ else
+ fun_l21_n597(x)
+ end
+end
+
+def fun_l20_n768(x)
+ if (x < 1)
+ fun_l21_n920(x)
+ else
+ fun_l21_n943(x)
+ end
+end
+
+def fun_l20_n769(x)
+ if (x < 1)
+ fun_l21_n585(x)
+ else
+ fun_l21_n659(x)
+ end
+end
+
+def fun_l20_n770(x)
+ if (x < 1)
+ fun_l21_n897(x)
+ else
+ fun_l21_n742(x)
+ end
+end
+
+def fun_l20_n771(x)
+ if (x < 1)
+ fun_l21_n41(x)
+ else
+ fun_l21_n431(x)
+ end
+end
+
+def fun_l20_n772(x)
+ if (x < 1)
+ fun_l21_n446(x)
+ else
+ fun_l21_n22(x)
+ end
+end
+
+def fun_l20_n773(x)
+ if (x < 1)
+ fun_l21_n918(x)
+ else
+ fun_l21_n387(x)
+ end
+end
+
+def fun_l20_n774(x)
+ if (x < 1)
+ fun_l21_n88(x)
+ else
+ fun_l21_n763(x)
+ end
+end
+
+def fun_l20_n775(x)
+ if (x < 1)
+ fun_l21_n224(x)
+ else
+ fun_l21_n886(x)
+ end
+end
+
+def fun_l20_n776(x)
+ if (x < 1)
+ fun_l21_n860(x)
+ else
+ fun_l21_n145(x)
+ end
+end
+
+def fun_l20_n777(x)
+ if (x < 1)
+ fun_l21_n198(x)
+ else
+ fun_l21_n593(x)
+ end
+end
+
+def fun_l20_n778(x)
+ if (x < 1)
+ fun_l21_n510(x)
+ else
+ fun_l21_n146(x)
+ end
+end
+
+def fun_l20_n779(x)
+ if (x < 1)
+ fun_l21_n125(x)
+ else
+ fun_l21_n390(x)
+ end
+end
+
+def fun_l20_n780(x)
+ if (x < 1)
+ fun_l21_n278(x)
+ else
+ fun_l21_n100(x)
+ end
+end
+
+def fun_l20_n781(x)
+ if (x < 1)
+ fun_l21_n9(x)
+ else
+ fun_l21_n312(x)
+ end
+end
+
+def fun_l20_n782(x)
+ if (x < 1)
+ fun_l21_n883(x)
+ else
+ fun_l21_n118(x)
+ end
+end
+
+def fun_l20_n783(x)
+ if (x < 1)
+ fun_l21_n314(x)
+ else
+ fun_l21_n357(x)
+ end
+end
+
+def fun_l20_n784(x)
+ if (x < 1)
+ fun_l21_n599(x)
+ else
+ fun_l21_n211(x)
+ end
+end
+
+def fun_l20_n785(x)
+ if (x < 1)
+ fun_l21_n882(x)
+ else
+ fun_l21_n903(x)
+ end
+end
+
+def fun_l20_n786(x)
+ if (x < 1)
+ fun_l21_n741(x)
+ else
+ fun_l21_n634(x)
+ end
+end
+
+def fun_l20_n787(x)
+ if (x < 1)
+ fun_l21_n186(x)
+ else
+ fun_l21_n68(x)
+ end
+end
+
+def fun_l20_n788(x)
+ if (x < 1)
+ fun_l21_n620(x)
+ else
+ fun_l21_n976(x)
+ end
+end
+
+def fun_l20_n789(x)
+ if (x < 1)
+ fun_l21_n692(x)
+ else
+ fun_l21_n8(x)
+ end
+end
+
+def fun_l20_n790(x)
+ if (x < 1)
+ fun_l21_n893(x)
+ else
+ fun_l21_n916(x)
+ end
+end
+
+def fun_l20_n791(x)
+ if (x < 1)
+ fun_l21_n823(x)
+ else
+ fun_l21_n498(x)
+ end
+end
+
+def fun_l20_n792(x)
+ if (x < 1)
+ fun_l21_n390(x)
+ else
+ fun_l21_n711(x)
+ end
+end
+
+def fun_l20_n793(x)
+ if (x < 1)
+ fun_l21_n918(x)
+ else
+ fun_l21_n819(x)
+ end
+end
+
+def fun_l20_n794(x)
+ if (x < 1)
+ fun_l21_n809(x)
+ else
+ fun_l21_n320(x)
+ end
+end
+
+def fun_l20_n795(x)
+ if (x < 1)
+ fun_l21_n387(x)
+ else
+ fun_l21_n377(x)
+ end
+end
+
+def fun_l20_n796(x)
+ if (x < 1)
+ fun_l21_n243(x)
+ else
+ fun_l21_n555(x)
+ end
+end
+
+def fun_l20_n797(x)
+ if (x < 1)
+ fun_l21_n946(x)
+ else
+ fun_l21_n811(x)
+ end
+end
+
+def fun_l20_n798(x)
+ if (x < 1)
+ fun_l21_n492(x)
+ else
+ fun_l21_n367(x)
+ end
+end
+
+def fun_l20_n799(x)
+ if (x < 1)
+ fun_l21_n161(x)
+ else
+ fun_l21_n818(x)
+ end
+end
+
+def fun_l20_n800(x)
+ if (x < 1)
+ fun_l21_n365(x)
+ else
+ fun_l21_n560(x)
+ end
+end
+
+def fun_l20_n801(x)
+ if (x < 1)
+ fun_l21_n456(x)
+ else
+ fun_l21_n880(x)
+ end
+end
+
+def fun_l20_n802(x)
+ if (x < 1)
+ fun_l21_n683(x)
+ else
+ fun_l21_n71(x)
+ end
+end
+
+def fun_l20_n803(x)
+ if (x < 1)
+ fun_l21_n250(x)
+ else
+ fun_l21_n183(x)
+ end
+end
+
+def fun_l20_n804(x)
+ if (x < 1)
+ fun_l21_n900(x)
+ else
+ fun_l21_n63(x)
+ end
+end
+
+def fun_l20_n805(x)
+ if (x < 1)
+ fun_l21_n798(x)
+ else
+ fun_l21_n91(x)
+ end
+end
+
+def fun_l20_n806(x)
+ if (x < 1)
+ fun_l21_n525(x)
+ else
+ fun_l21_n59(x)
+ end
+end
+
+def fun_l20_n807(x)
+ if (x < 1)
+ fun_l21_n515(x)
+ else
+ fun_l21_n457(x)
+ end
+end
+
+def fun_l20_n808(x)
+ if (x < 1)
+ fun_l21_n410(x)
+ else
+ fun_l21_n172(x)
+ end
+end
+
+def fun_l20_n809(x)
+ if (x < 1)
+ fun_l21_n194(x)
+ else
+ fun_l21_n425(x)
+ end
+end
+
+def fun_l20_n810(x)
+ if (x < 1)
+ fun_l21_n660(x)
+ else
+ fun_l21_n120(x)
+ end
+end
+
+def fun_l20_n811(x)
+ if (x < 1)
+ fun_l21_n920(x)
+ else
+ fun_l21_n97(x)
+ end
+end
+
+def fun_l20_n812(x)
+ if (x < 1)
+ fun_l21_n443(x)
+ else
+ fun_l21_n876(x)
+ end
+end
+
+def fun_l20_n813(x)
+ if (x < 1)
+ fun_l21_n935(x)
+ else
+ fun_l21_n186(x)
+ end
+end
+
+def fun_l20_n814(x)
+ if (x < 1)
+ fun_l21_n139(x)
+ else
+ fun_l21_n313(x)
+ end
+end
+
+def fun_l20_n815(x)
+ if (x < 1)
+ fun_l21_n21(x)
+ else
+ fun_l21_n500(x)
+ end
+end
+
+def fun_l20_n816(x)
+ if (x < 1)
+ fun_l21_n682(x)
+ else
+ fun_l21_n17(x)
+ end
+end
+
+def fun_l20_n817(x)
+ if (x < 1)
+ fun_l21_n945(x)
+ else
+ fun_l21_n472(x)
+ end
+end
+
+def fun_l20_n818(x)
+ if (x < 1)
+ fun_l21_n76(x)
+ else
+ fun_l21_n464(x)
+ end
+end
+
+def fun_l20_n819(x)
+ if (x < 1)
+ fun_l21_n696(x)
+ else
+ fun_l21_n989(x)
+ end
+end
+
+def fun_l20_n820(x)
+ if (x < 1)
+ fun_l21_n150(x)
+ else
+ fun_l21_n459(x)
+ end
+end
+
+def fun_l20_n821(x)
+ if (x < 1)
+ fun_l21_n280(x)
+ else
+ fun_l21_n535(x)
+ end
+end
+
+def fun_l20_n822(x)
+ if (x < 1)
+ fun_l21_n120(x)
+ else
+ fun_l21_n553(x)
+ end
+end
+
+def fun_l20_n823(x)
+ if (x < 1)
+ fun_l21_n450(x)
+ else
+ fun_l21_n168(x)
+ end
+end
+
+def fun_l20_n824(x)
+ if (x < 1)
+ fun_l21_n635(x)
+ else
+ fun_l21_n45(x)
+ end
+end
+
+def fun_l20_n825(x)
+ if (x < 1)
+ fun_l21_n245(x)
+ else
+ fun_l21_n491(x)
+ end
+end
+
+def fun_l20_n826(x)
+ if (x < 1)
+ fun_l21_n202(x)
+ else
+ fun_l21_n307(x)
+ end
+end
+
+def fun_l20_n827(x)
+ if (x < 1)
+ fun_l21_n883(x)
+ else
+ fun_l21_n113(x)
+ end
+end
+
+def fun_l20_n828(x)
+ if (x < 1)
+ fun_l21_n864(x)
+ else
+ fun_l21_n982(x)
+ end
+end
+
+def fun_l20_n829(x)
+ if (x < 1)
+ fun_l21_n707(x)
+ else
+ fun_l21_n909(x)
+ end
+end
+
+def fun_l20_n830(x)
+ if (x < 1)
+ fun_l21_n838(x)
+ else
+ fun_l21_n784(x)
+ end
+end
+
+def fun_l20_n831(x)
+ if (x < 1)
+ fun_l21_n179(x)
+ else
+ fun_l21_n445(x)
+ end
+end
+
+def fun_l20_n832(x)
+ if (x < 1)
+ fun_l21_n563(x)
+ else
+ fun_l21_n981(x)
+ end
+end
+
+def fun_l20_n833(x)
+ if (x < 1)
+ fun_l21_n441(x)
+ else
+ fun_l21_n911(x)
+ end
+end
+
+def fun_l20_n834(x)
+ if (x < 1)
+ fun_l21_n46(x)
+ else
+ fun_l21_n244(x)
+ end
+end
+
+def fun_l20_n835(x)
+ if (x < 1)
+ fun_l21_n740(x)
+ else
+ fun_l21_n877(x)
+ end
+end
+
+def fun_l20_n836(x)
+ if (x < 1)
+ fun_l21_n987(x)
+ else
+ fun_l21_n459(x)
+ end
+end
+
+def fun_l20_n837(x)
+ if (x < 1)
+ fun_l21_n51(x)
+ else
+ fun_l21_n533(x)
+ end
+end
+
+def fun_l20_n838(x)
+ if (x < 1)
+ fun_l21_n530(x)
+ else
+ fun_l21_n916(x)
+ end
+end
+
+def fun_l20_n839(x)
+ if (x < 1)
+ fun_l21_n644(x)
+ else
+ fun_l21_n574(x)
+ end
+end
+
+def fun_l20_n840(x)
+ if (x < 1)
+ fun_l21_n167(x)
+ else
+ fun_l21_n935(x)
+ end
+end
+
+def fun_l20_n841(x)
+ if (x < 1)
+ fun_l21_n657(x)
+ else
+ fun_l21_n914(x)
+ end
+end
+
+def fun_l20_n842(x)
+ if (x < 1)
+ fun_l21_n646(x)
+ else
+ fun_l21_n191(x)
+ end
+end
+
+def fun_l20_n843(x)
+ if (x < 1)
+ fun_l21_n881(x)
+ else
+ fun_l21_n744(x)
+ end
+end
+
+def fun_l20_n844(x)
+ if (x < 1)
+ fun_l21_n293(x)
+ else
+ fun_l21_n474(x)
+ end
+end
+
+def fun_l20_n845(x)
+ if (x < 1)
+ fun_l21_n481(x)
+ else
+ fun_l21_n80(x)
+ end
+end
+
+def fun_l20_n846(x)
+ if (x < 1)
+ fun_l21_n785(x)
+ else
+ fun_l21_n694(x)
+ end
+end
+
+def fun_l20_n847(x)
+ if (x < 1)
+ fun_l21_n874(x)
+ else
+ fun_l21_n465(x)
+ end
+end
+
+def fun_l20_n848(x)
+ if (x < 1)
+ fun_l21_n43(x)
+ else
+ fun_l21_n666(x)
+ end
+end
+
+def fun_l20_n849(x)
+ if (x < 1)
+ fun_l21_n868(x)
+ else
+ fun_l21_n272(x)
+ end
+end
+
+def fun_l20_n850(x)
+ if (x < 1)
+ fun_l21_n194(x)
+ else
+ fun_l21_n995(x)
+ end
+end
+
+def fun_l20_n851(x)
+ if (x < 1)
+ fun_l21_n989(x)
+ else
+ fun_l21_n385(x)
+ end
+end
+
+def fun_l20_n852(x)
+ if (x < 1)
+ fun_l21_n396(x)
+ else
+ fun_l21_n366(x)
+ end
+end
+
+def fun_l20_n853(x)
+ if (x < 1)
+ fun_l21_n439(x)
+ else
+ fun_l21_n141(x)
+ end
+end
+
+def fun_l20_n854(x)
+ if (x < 1)
+ fun_l21_n78(x)
+ else
+ fun_l21_n180(x)
+ end
+end
+
+def fun_l20_n855(x)
+ if (x < 1)
+ fun_l21_n203(x)
+ else
+ fun_l21_n382(x)
+ end
+end
+
+def fun_l20_n856(x)
+ if (x < 1)
+ fun_l21_n387(x)
+ else
+ fun_l21_n696(x)
+ end
+end
+
+def fun_l20_n857(x)
+ if (x < 1)
+ fun_l21_n383(x)
+ else
+ fun_l21_n655(x)
+ end
+end
+
+def fun_l20_n858(x)
+ if (x < 1)
+ fun_l21_n375(x)
+ else
+ fun_l21_n14(x)
+ end
+end
+
+def fun_l20_n859(x)
+ if (x < 1)
+ fun_l21_n418(x)
+ else
+ fun_l21_n435(x)
+ end
+end
+
+def fun_l20_n860(x)
+ if (x < 1)
+ fun_l21_n75(x)
+ else
+ fun_l21_n258(x)
+ end
+end
+
+def fun_l20_n861(x)
+ if (x < 1)
+ fun_l21_n509(x)
+ else
+ fun_l21_n585(x)
+ end
+end
+
+def fun_l20_n862(x)
+ if (x < 1)
+ fun_l21_n388(x)
+ else
+ fun_l21_n962(x)
+ end
+end
+
+def fun_l20_n863(x)
+ if (x < 1)
+ fun_l21_n826(x)
+ else
+ fun_l21_n691(x)
+ end
+end
+
+def fun_l20_n864(x)
+ if (x < 1)
+ fun_l21_n230(x)
+ else
+ fun_l21_n588(x)
+ end
+end
+
+def fun_l20_n865(x)
+ if (x < 1)
+ fun_l21_n138(x)
+ else
+ fun_l21_n779(x)
+ end
+end
+
+def fun_l20_n866(x)
+ if (x < 1)
+ fun_l21_n994(x)
+ else
+ fun_l21_n325(x)
+ end
+end
+
+def fun_l20_n867(x)
+ if (x < 1)
+ fun_l21_n169(x)
+ else
+ fun_l21_n384(x)
+ end
+end
+
+def fun_l20_n868(x)
+ if (x < 1)
+ fun_l21_n30(x)
+ else
+ fun_l21_n922(x)
+ end
+end
+
+def fun_l20_n869(x)
+ if (x < 1)
+ fun_l21_n500(x)
+ else
+ fun_l21_n896(x)
+ end
+end
+
+def fun_l20_n870(x)
+ if (x < 1)
+ fun_l21_n25(x)
+ else
+ fun_l21_n292(x)
+ end
+end
+
+def fun_l20_n871(x)
+ if (x < 1)
+ fun_l21_n266(x)
+ else
+ fun_l21_n58(x)
+ end
+end
+
+def fun_l20_n872(x)
+ if (x < 1)
+ fun_l21_n172(x)
+ else
+ fun_l21_n721(x)
+ end
+end
+
+def fun_l20_n873(x)
+ if (x < 1)
+ fun_l21_n87(x)
+ else
+ fun_l21_n717(x)
+ end
+end
+
+def fun_l20_n874(x)
+ if (x < 1)
+ fun_l21_n235(x)
+ else
+ fun_l21_n891(x)
+ end
+end
+
+def fun_l20_n875(x)
+ if (x < 1)
+ fun_l21_n87(x)
+ else
+ fun_l21_n810(x)
+ end
+end
+
+def fun_l20_n876(x)
+ if (x < 1)
+ fun_l21_n785(x)
+ else
+ fun_l21_n668(x)
+ end
+end
+
+def fun_l20_n877(x)
+ if (x < 1)
+ fun_l21_n532(x)
+ else
+ fun_l21_n505(x)
+ end
+end
+
+def fun_l20_n878(x)
+ if (x < 1)
+ fun_l21_n885(x)
+ else
+ fun_l21_n820(x)
+ end
+end
+
+def fun_l20_n879(x)
+ if (x < 1)
+ fun_l21_n986(x)
+ else
+ fun_l21_n916(x)
+ end
+end
+
+def fun_l20_n880(x)
+ if (x < 1)
+ fun_l21_n46(x)
+ else
+ fun_l21_n751(x)
+ end
+end
+
+def fun_l20_n881(x)
+ if (x < 1)
+ fun_l21_n964(x)
+ else
+ fun_l21_n829(x)
+ end
+end
+
+def fun_l20_n882(x)
+ if (x < 1)
+ fun_l21_n938(x)
+ else
+ fun_l21_n862(x)
+ end
+end
+
+def fun_l20_n883(x)
+ if (x < 1)
+ fun_l21_n880(x)
+ else
+ fun_l21_n548(x)
+ end
+end
+
+def fun_l20_n884(x)
+ if (x < 1)
+ fun_l21_n621(x)
+ else
+ fun_l21_n184(x)
+ end
+end
+
+def fun_l20_n885(x)
+ if (x < 1)
+ fun_l21_n587(x)
+ else
+ fun_l21_n603(x)
+ end
+end
+
+def fun_l20_n886(x)
+ if (x < 1)
+ fun_l21_n935(x)
+ else
+ fun_l21_n105(x)
+ end
+end
+
+def fun_l20_n887(x)
+ if (x < 1)
+ fun_l21_n76(x)
+ else
+ fun_l21_n96(x)
+ end
+end
+
+def fun_l20_n888(x)
+ if (x < 1)
+ fun_l21_n241(x)
+ else
+ fun_l21_n56(x)
+ end
+end
+
+def fun_l20_n889(x)
+ if (x < 1)
+ fun_l21_n180(x)
+ else
+ fun_l21_n360(x)
+ end
+end
+
+def fun_l20_n890(x)
+ if (x < 1)
+ fun_l21_n179(x)
+ else
+ fun_l21_n510(x)
+ end
+end
+
+def fun_l20_n891(x)
+ if (x < 1)
+ fun_l21_n641(x)
+ else
+ fun_l21_n70(x)
+ end
+end
+
+def fun_l20_n892(x)
+ if (x < 1)
+ fun_l21_n615(x)
+ else
+ fun_l21_n30(x)
+ end
+end
+
+def fun_l20_n893(x)
+ if (x < 1)
+ fun_l21_n787(x)
+ else
+ fun_l21_n914(x)
+ end
+end
+
+def fun_l20_n894(x)
+ if (x < 1)
+ fun_l21_n949(x)
+ else
+ fun_l21_n449(x)
+ end
+end
+
+def fun_l20_n895(x)
+ if (x < 1)
+ fun_l21_n182(x)
+ else
+ fun_l21_n935(x)
+ end
+end
+
+def fun_l20_n896(x)
+ if (x < 1)
+ fun_l21_n411(x)
+ else
+ fun_l21_n43(x)
+ end
+end
+
+def fun_l20_n897(x)
+ if (x < 1)
+ fun_l21_n70(x)
+ else
+ fun_l21_n363(x)
+ end
+end
+
+def fun_l20_n898(x)
+ if (x < 1)
+ fun_l21_n910(x)
+ else
+ fun_l21_n271(x)
+ end
+end
+
+def fun_l20_n899(x)
+ if (x < 1)
+ fun_l21_n722(x)
+ else
+ fun_l21_n793(x)
+ end
+end
+
+def fun_l20_n900(x)
+ if (x < 1)
+ fun_l21_n356(x)
+ else
+ fun_l21_n301(x)
+ end
+end
+
+def fun_l20_n901(x)
+ if (x < 1)
+ fun_l21_n915(x)
+ else
+ fun_l21_n373(x)
+ end
+end
+
+def fun_l20_n902(x)
+ if (x < 1)
+ fun_l21_n468(x)
+ else
+ fun_l21_n632(x)
+ end
+end
+
+def fun_l20_n903(x)
+ if (x < 1)
+ fun_l21_n970(x)
+ else
+ fun_l21_n54(x)
+ end
+end
+
+def fun_l20_n904(x)
+ if (x < 1)
+ fun_l21_n452(x)
+ else
+ fun_l21_n536(x)
+ end
+end
+
+def fun_l20_n905(x)
+ if (x < 1)
+ fun_l21_n223(x)
+ else
+ fun_l21_n423(x)
+ end
+end
+
+def fun_l20_n906(x)
+ if (x < 1)
+ fun_l21_n102(x)
+ else
+ fun_l21_n755(x)
+ end
+end
+
+def fun_l20_n907(x)
+ if (x < 1)
+ fun_l21_n537(x)
+ else
+ fun_l21_n84(x)
+ end
+end
+
+def fun_l20_n908(x)
+ if (x < 1)
+ fun_l21_n786(x)
+ else
+ fun_l21_n979(x)
+ end
+end
+
+def fun_l20_n909(x)
+ if (x < 1)
+ fun_l21_n573(x)
+ else
+ fun_l21_n965(x)
+ end
+end
+
+def fun_l20_n910(x)
+ if (x < 1)
+ fun_l21_n764(x)
+ else
+ fun_l21_n375(x)
+ end
+end
+
+def fun_l20_n911(x)
+ if (x < 1)
+ fun_l21_n673(x)
+ else
+ fun_l21_n545(x)
+ end
+end
+
+def fun_l20_n912(x)
+ if (x < 1)
+ fun_l21_n616(x)
+ else
+ fun_l21_n257(x)
+ end
+end
+
+def fun_l20_n913(x)
+ if (x < 1)
+ fun_l21_n276(x)
+ else
+ fun_l21_n670(x)
+ end
+end
+
+def fun_l20_n914(x)
+ if (x < 1)
+ fun_l21_n969(x)
+ else
+ fun_l21_n482(x)
+ end
+end
+
+def fun_l20_n915(x)
+ if (x < 1)
+ fun_l21_n603(x)
+ else
+ fun_l21_n916(x)
+ end
+end
+
+def fun_l20_n916(x)
+ if (x < 1)
+ fun_l21_n287(x)
+ else
+ fun_l21_n253(x)
+ end
+end
+
+def fun_l20_n917(x)
+ if (x < 1)
+ fun_l21_n201(x)
+ else
+ fun_l21_n175(x)
+ end
+end
+
+def fun_l20_n918(x)
+ if (x < 1)
+ fun_l21_n557(x)
+ else
+ fun_l21_n668(x)
+ end
+end
+
+def fun_l20_n919(x)
+ if (x < 1)
+ fun_l21_n598(x)
+ else
+ fun_l21_n85(x)
+ end
+end
+
+def fun_l20_n920(x)
+ if (x < 1)
+ fun_l21_n998(x)
+ else
+ fun_l21_n611(x)
+ end
+end
+
+def fun_l20_n921(x)
+ if (x < 1)
+ fun_l21_n22(x)
+ else
+ fun_l21_n76(x)
+ end
+end
+
+def fun_l20_n922(x)
+ if (x < 1)
+ fun_l21_n611(x)
+ else
+ fun_l21_n823(x)
+ end
+end
+
+def fun_l20_n923(x)
+ if (x < 1)
+ fun_l21_n739(x)
+ else
+ fun_l21_n231(x)
+ end
+end
+
+def fun_l20_n924(x)
+ if (x < 1)
+ fun_l21_n806(x)
+ else
+ fun_l21_n362(x)
+ end
+end
+
+def fun_l20_n925(x)
+ if (x < 1)
+ fun_l21_n32(x)
+ else
+ fun_l21_n593(x)
+ end
+end
+
+def fun_l20_n926(x)
+ if (x < 1)
+ fun_l21_n592(x)
+ else
+ fun_l21_n422(x)
+ end
+end
+
+def fun_l20_n927(x)
+ if (x < 1)
+ fun_l21_n624(x)
+ else
+ fun_l21_n690(x)
+ end
+end
+
+def fun_l20_n928(x)
+ if (x < 1)
+ fun_l21_n838(x)
+ else
+ fun_l21_n351(x)
+ end
+end
+
+def fun_l20_n929(x)
+ if (x < 1)
+ fun_l21_n289(x)
+ else
+ fun_l21_n842(x)
+ end
+end
+
+def fun_l20_n930(x)
+ if (x < 1)
+ fun_l21_n948(x)
+ else
+ fun_l21_n679(x)
+ end
+end
+
+def fun_l20_n931(x)
+ if (x < 1)
+ fun_l21_n746(x)
+ else
+ fun_l21_n267(x)
+ end
+end
+
+def fun_l20_n932(x)
+ if (x < 1)
+ fun_l21_n494(x)
+ else
+ fun_l21_n19(x)
+ end
+end
+
+def fun_l20_n933(x)
+ if (x < 1)
+ fun_l21_n8(x)
+ else
+ fun_l21_n234(x)
+ end
+end
+
+def fun_l20_n934(x)
+ if (x < 1)
+ fun_l21_n743(x)
+ else
+ fun_l21_n175(x)
+ end
+end
+
+def fun_l20_n935(x)
+ if (x < 1)
+ fun_l21_n111(x)
+ else
+ fun_l21_n300(x)
+ end
+end
+
+def fun_l20_n936(x)
+ if (x < 1)
+ fun_l21_n482(x)
+ else
+ fun_l21_n431(x)
+ end
+end
+
+def fun_l20_n937(x)
+ if (x < 1)
+ fun_l21_n885(x)
+ else
+ fun_l21_n523(x)
+ end
+end
+
+def fun_l20_n938(x)
+ if (x < 1)
+ fun_l21_n661(x)
+ else
+ fun_l21_n461(x)
+ end
+end
+
+def fun_l20_n939(x)
+ if (x < 1)
+ fun_l21_n809(x)
+ else
+ fun_l21_n868(x)
+ end
+end
+
+def fun_l20_n940(x)
+ if (x < 1)
+ fun_l21_n549(x)
+ else
+ fun_l21_n287(x)
+ end
+end
+
+def fun_l20_n941(x)
+ if (x < 1)
+ fun_l21_n246(x)
+ else
+ fun_l21_n228(x)
+ end
+end
+
+def fun_l20_n942(x)
+ if (x < 1)
+ fun_l21_n656(x)
+ else
+ fun_l21_n399(x)
+ end
+end
+
+def fun_l20_n943(x)
+ if (x < 1)
+ fun_l21_n344(x)
+ else
+ fun_l21_n77(x)
+ end
+end
+
+def fun_l20_n944(x)
+ if (x < 1)
+ fun_l21_n862(x)
+ else
+ fun_l21_n696(x)
+ end
+end
+
+def fun_l20_n945(x)
+ if (x < 1)
+ fun_l21_n892(x)
+ else
+ fun_l21_n782(x)
+ end
+end
+
+def fun_l20_n946(x)
+ if (x < 1)
+ fun_l21_n461(x)
+ else
+ fun_l21_n946(x)
+ end
+end
+
+def fun_l20_n947(x)
+ if (x < 1)
+ fun_l21_n576(x)
+ else
+ fun_l21_n216(x)
+ end
+end
+
+def fun_l20_n948(x)
+ if (x < 1)
+ fun_l21_n136(x)
+ else
+ fun_l21_n132(x)
+ end
+end
+
+def fun_l20_n949(x)
+ if (x < 1)
+ fun_l21_n987(x)
+ else
+ fun_l21_n615(x)
+ end
+end
+
+def fun_l20_n950(x)
+ if (x < 1)
+ fun_l21_n170(x)
+ else
+ fun_l21_n55(x)
+ end
+end
+
+def fun_l20_n951(x)
+ if (x < 1)
+ fun_l21_n260(x)
+ else
+ fun_l21_n675(x)
+ end
+end
+
+def fun_l20_n952(x)
+ if (x < 1)
+ fun_l21_n406(x)
+ else
+ fun_l21_n569(x)
+ end
+end
+
+def fun_l20_n953(x)
+ if (x < 1)
+ fun_l21_n41(x)
+ else
+ fun_l21_n951(x)
+ end
+end
+
+def fun_l20_n954(x)
+ if (x < 1)
+ fun_l21_n467(x)
+ else
+ fun_l21_n837(x)
+ end
+end
+
+def fun_l20_n955(x)
+ if (x < 1)
+ fun_l21_n41(x)
+ else
+ fun_l21_n349(x)
+ end
+end
+
+def fun_l20_n956(x)
+ if (x < 1)
+ fun_l21_n105(x)
+ else
+ fun_l21_n595(x)
+ end
+end
+
+def fun_l20_n957(x)
+ if (x < 1)
+ fun_l21_n132(x)
+ else
+ fun_l21_n622(x)
+ end
+end
+
+def fun_l20_n958(x)
+ if (x < 1)
+ fun_l21_n1(x)
+ else
+ fun_l21_n770(x)
+ end
+end
+
+def fun_l20_n959(x)
+ if (x < 1)
+ fun_l21_n768(x)
+ else
+ fun_l21_n979(x)
+ end
+end
+
+def fun_l20_n960(x)
+ if (x < 1)
+ fun_l21_n954(x)
+ else
+ fun_l21_n906(x)
+ end
+end
+
+def fun_l20_n961(x)
+ if (x < 1)
+ fun_l21_n759(x)
+ else
+ fun_l21_n381(x)
+ end
+end
+
+def fun_l20_n962(x)
+ if (x < 1)
+ fun_l21_n590(x)
+ else
+ fun_l21_n868(x)
+ end
+end
+
+def fun_l20_n963(x)
+ if (x < 1)
+ fun_l21_n119(x)
+ else
+ fun_l21_n962(x)
+ end
+end
+
+def fun_l20_n964(x)
+ if (x < 1)
+ fun_l21_n350(x)
+ else
+ fun_l21_n930(x)
+ end
+end
+
+def fun_l20_n965(x)
+ if (x < 1)
+ fun_l21_n542(x)
+ else
+ fun_l21_n217(x)
+ end
+end
+
+def fun_l20_n966(x)
+ if (x < 1)
+ fun_l21_n375(x)
+ else
+ fun_l21_n244(x)
+ end
+end
+
+def fun_l20_n967(x)
+ if (x < 1)
+ fun_l21_n160(x)
+ else
+ fun_l21_n610(x)
+ end
+end
+
+def fun_l20_n968(x)
+ if (x < 1)
+ fun_l21_n28(x)
+ else
+ fun_l21_n925(x)
+ end
+end
+
+def fun_l20_n969(x)
+ if (x < 1)
+ fun_l21_n661(x)
+ else
+ fun_l21_n944(x)
+ end
+end
+
+def fun_l20_n970(x)
+ if (x < 1)
+ fun_l21_n534(x)
+ else
+ fun_l21_n872(x)
+ end
+end
+
+def fun_l20_n971(x)
+ if (x < 1)
+ fun_l21_n684(x)
+ else
+ fun_l21_n271(x)
+ end
+end
+
+def fun_l20_n972(x)
+ if (x < 1)
+ fun_l21_n493(x)
+ else
+ fun_l21_n893(x)
+ end
+end
+
+def fun_l20_n973(x)
+ if (x < 1)
+ fun_l21_n912(x)
+ else
+ fun_l21_n385(x)
+ end
+end
+
+def fun_l20_n974(x)
+ if (x < 1)
+ fun_l21_n528(x)
+ else
+ fun_l21_n948(x)
+ end
+end
+
+def fun_l20_n975(x)
+ if (x < 1)
+ fun_l21_n263(x)
+ else
+ fun_l21_n362(x)
+ end
+end
+
+def fun_l20_n976(x)
+ if (x < 1)
+ fun_l21_n86(x)
+ else
+ fun_l21_n937(x)
+ end
+end
+
+def fun_l20_n977(x)
+ if (x < 1)
+ fun_l21_n886(x)
+ else
+ fun_l21_n845(x)
+ end
+end
+
+def fun_l20_n978(x)
+ if (x < 1)
+ fun_l21_n681(x)
+ else
+ fun_l21_n437(x)
+ end
+end
+
+def fun_l20_n979(x)
+ if (x < 1)
+ fun_l21_n342(x)
+ else
+ fun_l21_n333(x)
+ end
+end
+
+def fun_l20_n980(x)
+ if (x < 1)
+ fun_l21_n160(x)
+ else
+ fun_l21_n635(x)
+ end
+end
+
+def fun_l20_n981(x)
+ if (x < 1)
+ fun_l21_n580(x)
+ else
+ fun_l21_n895(x)
+ end
+end
+
+def fun_l20_n982(x)
+ if (x < 1)
+ fun_l21_n578(x)
+ else
+ fun_l21_n669(x)
+ end
+end
+
+def fun_l20_n983(x)
+ if (x < 1)
+ fun_l21_n939(x)
+ else
+ fun_l21_n321(x)
+ end
+end
+
+def fun_l20_n984(x)
+ if (x < 1)
+ fun_l21_n465(x)
+ else
+ fun_l21_n175(x)
+ end
+end
+
+def fun_l20_n985(x)
+ if (x < 1)
+ fun_l21_n522(x)
+ else
+ fun_l21_n108(x)
+ end
+end
+
+def fun_l20_n986(x)
+ if (x < 1)
+ fun_l21_n347(x)
+ else
+ fun_l21_n207(x)
+ end
+end
+
+def fun_l20_n987(x)
+ if (x < 1)
+ fun_l21_n844(x)
+ else
+ fun_l21_n39(x)
+ end
+end
+
+def fun_l20_n988(x)
+ if (x < 1)
+ fun_l21_n104(x)
+ else
+ fun_l21_n528(x)
+ end
+end
+
+def fun_l20_n989(x)
+ if (x < 1)
+ fun_l21_n486(x)
+ else
+ fun_l21_n443(x)
+ end
+end
+
+def fun_l20_n990(x)
+ if (x < 1)
+ fun_l21_n643(x)
+ else
+ fun_l21_n503(x)
+ end
+end
+
+def fun_l20_n991(x)
+ if (x < 1)
+ fun_l21_n428(x)
+ else
+ fun_l21_n813(x)
+ end
+end
+
+def fun_l20_n992(x)
+ if (x < 1)
+ fun_l21_n452(x)
+ else
+ fun_l21_n536(x)
+ end
+end
+
+def fun_l20_n993(x)
+ if (x < 1)
+ fun_l21_n247(x)
+ else
+ fun_l21_n961(x)
+ end
+end
+
+def fun_l20_n994(x)
+ if (x < 1)
+ fun_l21_n749(x)
+ else
+ fun_l21_n554(x)
+ end
+end
+
+def fun_l20_n995(x)
+ if (x < 1)
+ fun_l21_n333(x)
+ else
+ fun_l21_n162(x)
+ end
+end
+
+def fun_l20_n996(x)
+ if (x < 1)
+ fun_l21_n686(x)
+ else
+ fun_l21_n635(x)
+ end
+end
+
+def fun_l20_n997(x)
+ if (x < 1)
+ fun_l21_n709(x)
+ else
+ fun_l21_n953(x)
+ end
+end
+
+def fun_l20_n998(x)
+ if (x < 1)
+ fun_l21_n315(x)
+ else
+ fun_l21_n818(x)
+ end
+end
+
+def fun_l20_n999(x)
+ if (x < 1)
+ fun_l21_n543(x)
+ else
+ fun_l21_n385(x)
+ end
+end
+
+def fun_l21_n0(x)
+ if (x < 1)
+ fun_l22_n736(x)
+ else
+ fun_l22_n837(x)
+ end
+end
+
+def fun_l21_n1(x)
+ if (x < 1)
+ fun_l22_n333(x)
+ else
+ fun_l22_n358(x)
+ end
+end
+
+def fun_l21_n2(x)
+ if (x < 1)
+ fun_l22_n150(x)
+ else
+ fun_l22_n469(x)
+ end
+end
+
+def fun_l21_n3(x)
+ if (x < 1)
+ fun_l22_n899(x)
+ else
+ fun_l22_n917(x)
+ end
+end
+
+def fun_l21_n4(x)
+ if (x < 1)
+ fun_l22_n943(x)
+ else
+ fun_l22_n435(x)
+ end
+end
+
+def fun_l21_n5(x)
+ if (x < 1)
+ fun_l22_n56(x)
+ else
+ fun_l22_n123(x)
+ end
+end
+
+def fun_l21_n6(x)
+ if (x < 1)
+ fun_l22_n849(x)
+ else
+ fun_l22_n475(x)
+ end
+end
+
+def fun_l21_n7(x)
+ if (x < 1)
+ fun_l22_n931(x)
+ else
+ fun_l22_n529(x)
+ end
+end
+
+def fun_l21_n8(x)
+ if (x < 1)
+ fun_l22_n192(x)
+ else
+ fun_l22_n441(x)
+ end
+end
+
+def fun_l21_n9(x)
+ if (x < 1)
+ fun_l22_n84(x)
+ else
+ fun_l22_n428(x)
+ end
+end
+
+def fun_l21_n10(x)
+ if (x < 1)
+ fun_l22_n355(x)
+ else
+ fun_l22_n432(x)
+ end
+end
+
+def fun_l21_n11(x)
+ if (x < 1)
+ fun_l22_n380(x)
+ else
+ fun_l22_n739(x)
+ end
+end
+
+def fun_l21_n12(x)
+ if (x < 1)
+ fun_l22_n559(x)
+ else
+ fun_l22_n492(x)
+ end
+end
+
+def fun_l21_n13(x)
+ if (x < 1)
+ fun_l22_n542(x)
+ else
+ fun_l22_n284(x)
+ end
+end
+
+def fun_l21_n14(x)
+ if (x < 1)
+ fun_l22_n106(x)
+ else
+ fun_l22_n443(x)
+ end
+end
+
+def fun_l21_n15(x)
+ if (x < 1)
+ fun_l22_n769(x)
+ else
+ fun_l22_n111(x)
+ end
+end
+
+def fun_l21_n16(x)
+ if (x < 1)
+ fun_l22_n982(x)
+ else
+ fun_l22_n855(x)
+ end
+end
+
+def fun_l21_n17(x)
+ if (x < 1)
+ fun_l22_n994(x)
+ else
+ fun_l22_n952(x)
+ end
+end
+
+def fun_l21_n18(x)
+ if (x < 1)
+ fun_l22_n567(x)
+ else
+ fun_l22_n741(x)
+ end
+end
+
+def fun_l21_n19(x)
+ if (x < 1)
+ fun_l22_n851(x)
+ else
+ fun_l22_n830(x)
+ end
+end
+
+def fun_l21_n20(x)
+ if (x < 1)
+ fun_l22_n353(x)
+ else
+ fun_l22_n184(x)
+ end
+end
+
+def fun_l21_n21(x)
+ if (x < 1)
+ fun_l22_n891(x)
+ else
+ fun_l22_n629(x)
+ end
+end
+
+def fun_l21_n22(x)
+ if (x < 1)
+ fun_l22_n521(x)
+ else
+ fun_l22_n932(x)
+ end
+end
+
+def fun_l21_n23(x)
+ if (x < 1)
+ fun_l22_n834(x)
+ else
+ fun_l22_n913(x)
+ end
+end
+
+def fun_l21_n24(x)
+ if (x < 1)
+ fun_l22_n839(x)
+ else
+ fun_l22_n402(x)
+ end
+end
+
+def fun_l21_n25(x)
+ if (x < 1)
+ fun_l22_n525(x)
+ else
+ fun_l22_n247(x)
+ end
+end
+
+def fun_l21_n26(x)
+ if (x < 1)
+ fun_l22_n906(x)
+ else
+ fun_l22_n392(x)
+ end
+end
+
+def fun_l21_n27(x)
+ if (x < 1)
+ fun_l22_n716(x)
+ else
+ fun_l22_n804(x)
+ end
+end
+
+def fun_l21_n28(x)
+ if (x < 1)
+ fun_l22_n444(x)
+ else
+ fun_l22_n21(x)
+ end
+end
+
+def fun_l21_n29(x)
+ if (x < 1)
+ fun_l22_n674(x)
+ else
+ fun_l22_n695(x)
+ end
+end
+
+def fun_l21_n30(x)
+ if (x < 1)
+ fun_l22_n948(x)
+ else
+ fun_l22_n447(x)
+ end
+end
+
+def fun_l21_n31(x)
+ if (x < 1)
+ fun_l22_n460(x)
+ else
+ fun_l22_n743(x)
+ end
+end
+
+def fun_l21_n32(x)
+ if (x < 1)
+ fun_l22_n369(x)
+ else
+ fun_l22_n331(x)
+ end
+end
+
+def fun_l21_n33(x)
+ if (x < 1)
+ fun_l22_n602(x)
+ else
+ fun_l22_n934(x)
+ end
+end
+
+def fun_l21_n34(x)
+ if (x < 1)
+ fun_l22_n572(x)
+ else
+ fun_l22_n267(x)
+ end
+end
+
+def fun_l21_n35(x)
+ if (x < 1)
+ fun_l22_n517(x)
+ else
+ fun_l22_n298(x)
+ end
+end
+
+def fun_l21_n36(x)
+ if (x < 1)
+ fun_l22_n998(x)
+ else
+ fun_l22_n561(x)
+ end
+end
+
+def fun_l21_n37(x)
+ if (x < 1)
+ fun_l22_n457(x)
+ else
+ fun_l22_n513(x)
+ end
+end
+
+def fun_l21_n38(x)
+ if (x < 1)
+ fun_l22_n378(x)
+ else
+ fun_l22_n238(x)
+ end
+end
+
+def fun_l21_n39(x)
+ if (x < 1)
+ fun_l22_n788(x)
+ else
+ fun_l22_n45(x)
+ end
+end
+
+def fun_l21_n40(x)
+ if (x < 1)
+ fun_l22_n299(x)
+ else
+ fun_l22_n516(x)
+ end
+end
+
+def fun_l21_n41(x)
+ if (x < 1)
+ fun_l22_n454(x)
+ else
+ fun_l22_n274(x)
+ end
+end
+
+def fun_l21_n42(x)
+ if (x < 1)
+ fun_l22_n855(x)
+ else
+ fun_l22_n360(x)
+ end
+end
+
+def fun_l21_n43(x)
+ if (x < 1)
+ fun_l22_n577(x)
+ else
+ fun_l22_n213(x)
+ end
+end
+
+def fun_l21_n44(x)
+ if (x < 1)
+ fun_l22_n569(x)
+ else
+ fun_l22_n857(x)
+ end
+end
+
+def fun_l21_n45(x)
+ if (x < 1)
+ fun_l22_n667(x)
+ else
+ fun_l22_n285(x)
+ end
+end
+
+def fun_l21_n46(x)
+ if (x < 1)
+ fun_l22_n915(x)
+ else
+ fun_l22_n232(x)
+ end
+end
+
+def fun_l21_n47(x)
+ if (x < 1)
+ fun_l22_n124(x)
+ else
+ fun_l22_n708(x)
+ end
+end
+
+def fun_l21_n48(x)
+ if (x < 1)
+ fun_l22_n184(x)
+ else
+ fun_l22_n272(x)
+ end
+end
+
+def fun_l21_n49(x)
+ if (x < 1)
+ fun_l22_n376(x)
+ else
+ fun_l22_n138(x)
+ end
+end
+
+def fun_l21_n50(x)
+ if (x < 1)
+ fun_l22_n897(x)
+ else
+ fun_l22_n857(x)
+ end
+end
+
+def fun_l21_n51(x)
+ if (x < 1)
+ fun_l22_n335(x)
+ else
+ fun_l22_n614(x)
+ end
+end
+
+def fun_l21_n52(x)
+ if (x < 1)
+ fun_l22_n921(x)
+ else
+ fun_l22_n109(x)
+ end
+end
+
+def fun_l21_n53(x)
+ if (x < 1)
+ fun_l22_n27(x)
+ else
+ fun_l22_n609(x)
+ end
+end
+
+def fun_l21_n54(x)
+ if (x < 1)
+ fun_l22_n831(x)
+ else
+ fun_l22_n769(x)
+ end
+end
+
+def fun_l21_n55(x)
+ if (x < 1)
+ fun_l22_n936(x)
+ else
+ fun_l22_n250(x)
+ end
+end
+
+def fun_l21_n56(x)
+ if (x < 1)
+ fun_l22_n261(x)
+ else
+ fun_l22_n142(x)
+ end
+end
+
+def fun_l21_n57(x)
+ if (x < 1)
+ fun_l22_n721(x)
+ else
+ fun_l22_n604(x)
+ end
+end
+
+def fun_l21_n58(x)
+ if (x < 1)
+ fun_l22_n760(x)
+ else
+ fun_l22_n545(x)
+ end
+end
+
+def fun_l21_n59(x)
+ if (x < 1)
+ fun_l22_n934(x)
+ else
+ fun_l22_n110(x)
+ end
+end
+
+def fun_l21_n60(x)
+ if (x < 1)
+ fun_l22_n422(x)
+ else
+ fun_l22_n31(x)
+ end
+end
+
+def fun_l21_n61(x)
+ if (x < 1)
+ fun_l22_n776(x)
+ else
+ fun_l22_n251(x)
+ end
+end
+
+def fun_l21_n62(x)
+ if (x < 1)
+ fun_l22_n76(x)
+ else
+ fun_l22_n930(x)
+ end
+end
+
+def fun_l21_n63(x)
+ if (x < 1)
+ fun_l22_n331(x)
+ else
+ fun_l22_n550(x)
+ end
+end
+
+def fun_l21_n64(x)
+ if (x < 1)
+ fun_l22_n845(x)
+ else
+ fun_l22_n62(x)
+ end
+end
+
+def fun_l21_n65(x)
+ if (x < 1)
+ fun_l22_n887(x)
+ else
+ fun_l22_n784(x)
+ end
+end
+
+def fun_l21_n66(x)
+ if (x < 1)
+ fun_l22_n353(x)
+ else
+ fun_l22_n918(x)
+ end
+end
+
+def fun_l21_n67(x)
+ if (x < 1)
+ fun_l22_n682(x)
+ else
+ fun_l22_n840(x)
+ end
+end
+
+def fun_l21_n68(x)
+ if (x < 1)
+ fun_l22_n966(x)
+ else
+ fun_l22_n187(x)
+ end
+end
+
+def fun_l21_n69(x)
+ if (x < 1)
+ fun_l22_n424(x)
+ else
+ fun_l22_n674(x)
+ end
+end
+
+def fun_l21_n70(x)
+ if (x < 1)
+ fun_l22_n530(x)
+ else
+ fun_l22_n148(x)
+ end
+end
+
+def fun_l21_n71(x)
+ if (x < 1)
+ fun_l22_n616(x)
+ else
+ fun_l22_n945(x)
+ end
+end
+
+def fun_l21_n72(x)
+ if (x < 1)
+ fun_l22_n634(x)
+ else
+ fun_l22_n945(x)
+ end
+end
+
+def fun_l21_n73(x)
+ if (x < 1)
+ fun_l22_n153(x)
+ else
+ fun_l22_n657(x)
+ end
+end
+
+def fun_l21_n74(x)
+ if (x < 1)
+ fun_l22_n284(x)
+ else
+ fun_l22_n83(x)
+ end
+end
+
+def fun_l21_n75(x)
+ if (x < 1)
+ fun_l22_n292(x)
+ else
+ fun_l22_n440(x)
+ end
+end
+
+def fun_l21_n76(x)
+ if (x < 1)
+ fun_l22_n932(x)
+ else
+ fun_l22_n29(x)
+ end
+end
+
+def fun_l21_n77(x)
+ if (x < 1)
+ fun_l22_n292(x)
+ else
+ fun_l22_n866(x)
+ end
+end
+
+def fun_l21_n78(x)
+ if (x < 1)
+ fun_l22_n822(x)
+ else
+ fun_l22_n838(x)
+ end
+end
+
+def fun_l21_n79(x)
+ if (x < 1)
+ fun_l22_n297(x)
+ else
+ fun_l22_n677(x)
+ end
+end
+
+def fun_l21_n80(x)
+ if (x < 1)
+ fun_l22_n540(x)
+ else
+ fun_l22_n975(x)
+ end
+end
+
+def fun_l21_n81(x)
+ if (x < 1)
+ fun_l22_n375(x)
+ else
+ fun_l22_n735(x)
+ end
+end
+
+def fun_l21_n82(x)
+ if (x < 1)
+ fun_l22_n549(x)
+ else
+ fun_l22_n844(x)
+ end
+end
+
+def fun_l21_n83(x)
+ if (x < 1)
+ fun_l22_n763(x)
+ else
+ fun_l22_n863(x)
+ end
+end
+
+def fun_l21_n84(x)
+ if (x < 1)
+ fun_l22_n993(x)
+ else
+ fun_l22_n155(x)
+ end
+end
+
+def fun_l21_n85(x)
+ if (x < 1)
+ fun_l22_n751(x)
+ else
+ fun_l22_n264(x)
+ end
+end
+
+def fun_l21_n86(x)
+ if (x < 1)
+ fun_l22_n517(x)
+ else
+ fun_l22_n752(x)
+ end
+end
+
+def fun_l21_n87(x)
+ if (x < 1)
+ fun_l22_n477(x)
+ else
+ fun_l22_n486(x)
+ end
+end
+
+def fun_l21_n88(x)
+ if (x < 1)
+ fun_l22_n220(x)
+ else
+ fun_l22_n4(x)
+ end
+end
+
+def fun_l21_n89(x)
+ if (x < 1)
+ fun_l22_n678(x)
+ else
+ fun_l22_n692(x)
+ end
+end
+
+def fun_l21_n90(x)
+ if (x < 1)
+ fun_l22_n75(x)
+ else
+ fun_l22_n306(x)
+ end
+end
+
+def fun_l21_n91(x)
+ if (x < 1)
+ fun_l22_n460(x)
+ else
+ fun_l22_n514(x)
+ end
+end
+
+def fun_l21_n92(x)
+ if (x < 1)
+ fun_l22_n446(x)
+ else
+ fun_l22_n201(x)
+ end
+end
+
+def fun_l21_n93(x)
+ if (x < 1)
+ fun_l22_n872(x)
+ else
+ fun_l22_n611(x)
+ end
+end
+
+def fun_l21_n94(x)
+ if (x < 1)
+ fun_l22_n809(x)
+ else
+ fun_l22_n91(x)
+ end
+end
+
+def fun_l21_n95(x)
+ if (x < 1)
+ fun_l22_n565(x)
+ else
+ fun_l22_n968(x)
+ end
+end
+
+def fun_l21_n96(x)
+ if (x < 1)
+ fun_l22_n765(x)
+ else
+ fun_l22_n622(x)
+ end
+end
+
+def fun_l21_n97(x)
+ if (x < 1)
+ fun_l22_n856(x)
+ else
+ fun_l22_n923(x)
+ end
+end
+
+def fun_l21_n98(x)
+ if (x < 1)
+ fun_l22_n14(x)
+ else
+ fun_l22_n742(x)
+ end
+end
+
+def fun_l21_n99(x)
+ if (x < 1)
+ fun_l22_n214(x)
+ else
+ fun_l22_n118(x)
+ end
+end
+
+def fun_l21_n100(x)
+ if (x < 1)
+ fun_l22_n992(x)
+ else
+ fun_l22_n610(x)
+ end
+end
+
+def fun_l21_n101(x)
+ if (x < 1)
+ fun_l22_n603(x)
+ else
+ fun_l22_n208(x)
+ end
+end
+
+def fun_l21_n102(x)
+ if (x < 1)
+ fun_l22_n647(x)
+ else
+ fun_l22_n753(x)
+ end
+end
+
+def fun_l21_n103(x)
+ if (x < 1)
+ fun_l22_n952(x)
+ else
+ fun_l22_n25(x)
+ end
+end
+
+def fun_l21_n104(x)
+ if (x < 1)
+ fun_l22_n635(x)
+ else
+ fun_l22_n381(x)
+ end
+end
+
+def fun_l21_n105(x)
+ if (x < 1)
+ fun_l22_n258(x)
+ else
+ fun_l22_n346(x)
+ end
+end
+
+def fun_l21_n106(x)
+ if (x < 1)
+ fun_l22_n732(x)
+ else
+ fun_l22_n851(x)
+ end
+end
+
+def fun_l21_n107(x)
+ if (x < 1)
+ fun_l22_n67(x)
+ else
+ fun_l22_n80(x)
+ end
+end
+
+def fun_l21_n108(x)
+ if (x < 1)
+ fun_l22_n237(x)
+ else
+ fun_l22_n600(x)
+ end
+end
+
+def fun_l21_n109(x)
+ if (x < 1)
+ fun_l22_n448(x)
+ else
+ fun_l22_n768(x)
+ end
+end
+
+def fun_l21_n110(x)
+ if (x < 1)
+ fun_l22_n52(x)
+ else
+ fun_l22_n849(x)
+ end
+end
+
+def fun_l21_n111(x)
+ if (x < 1)
+ fun_l22_n471(x)
+ else
+ fun_l22_n400(x)
+ end
+end
+
+def fun_l21_n112(x)
+ if (x < 1)
+ fun_l22_n655(x)
+ else
+ fun_l22_n691(x)
+ end
+end
+
+def fun_l21_n113(x)
+ if (x < 1)
+ fun_l22_n325(x)
+ else
+ fun_l22_n936(x)
+ end
+end
+
+def fun_l21_n114(x)
+ if (x < 1)
+ fun_l22_n693(x)
+ else
+ fun_l22_n118(x)
+ end
+end
+
+def fun_l21_n115(x)
+ if (x < 1)
+ fun_l22_n881(x)
+ else
+ fun_l22_n167(x)
+ end
+end
+
+def fun_l21_n116(x)
+ if (x < 1)
+ fun_l22_n958(x)
+ else
+ fun_l22_n36(x)
+ end
+end
+
+def fun_l21_n117(x)
+ if (x < 1)
+ fun_l22_n233(x)
+ else
+ fun_l22_n649(x)
+ end
+end
+
+def fun_l21_n118(x)
+ if (x < 1)
+ fun_l22_n847(x)
+ else
+ fun_l22_n544(x)
+ end
+end
+
+def fun_l21_n119(x)
+ if (x < 1)
+ fun_l22_n392(x)
+ else
+ fun_l22_n2(x)
+ end
+end
+
+def fun_l21_n120(x)
+ if (x < 1)
+ fun_l22_n750(x)
+ else
+ fun_l22_n481(x)
+ end
+end
+
+def fun_l21_n121(x)
+ if (x < 1)
+ fun_l22_n124(x)
+ else
+ fun_l22_n769(x)
+ end
+end
+
+def fun_l21_n122(x)
+ if (x < 1)
+ fun_l22_n483(x)
+ else
+ fun_l22_n147(x)
+ end
+end
+
+def fun_l21_n123(x)
+ if (x < 1)
+ fun_l22_n543(x)
+ else
+ fun_l22_n454(x)
+ end
+end
+
+def fun_l21_n124(x)
+ if (x < 1)
+ fun_l22_n24(x)
+ else
+ fun_l22_n815(x)
+ end
+end
+
+def fun_l21_n125(x)
+ if (x < 1)
+ fun_l22_n315(x)
+ else
+ fun_l22_n263(x)
+ end
+end
+
+def fun_l21_n126(x)
+ if (x < 1)
+ fun_l22_n934(x)
+ else
+ fun_l22_n351(x)
+ end
+end
+
+def fun_l21_n127(x)
+ if (x < 1)
+ fun_l22_n982(x)
+ else
+ fun_l22_n755(x)
+ end
+end
+
+def fun_l21_n128(x)
+ if (x < 1)
+ fun_l22_n146(x)
+ else
+ fun_l22_n345(x)
+ end
+end
+
+def fun_l21_n129(x)
+ if (x < 1)
+ fun_l22_n85(x)
+ else
+ fun_l22_n356(x)
+ end
+end
+
+def fun_l21_n130(x)
+ if (x < 1)
+ fun_l22_n987(x)
+ else
+ fun_l22_n103(x)
+ end
+end
+
+def fun_l21_n131(x)
+ if (x < 1)
+ fun_l22_n413(x)
+ else
+ fun_l22_n260(x)
+ end
+end
+
+def fun_l21_n132(x)
+ if (x < 1)
+ fun_l22_n615(x)
+ else
+ fun_l22_n742(x)
+ end
+end
+
+def fun_l21_n133(x)
+ if (x < 1)
+ fun_l22_n836(x)
+ else
+ fun_l22_n214(x)
+ end
+end
+
+def fun_l21_n134(x)
+ if (x < 1)
+ fun_l22_n85(x)
+ else
+ fun_l22_n916(x)
+ end
+end
+
+def fun_l21_n135(x)
+ if (x < 1)
+ fun_l22_n21(x)
+ else
+ fun_l22_n902(x)
+ end
+end
+
+def fun_l21_n136(x)
+ if (x < 1)
+ fun_l22_n842(x)
+ else
+ fun_l22_n475(x)
+ end
+end
+
+def fun_l21_n137(x)
+ if (x < 1)
+ fun_l22_n573(x)
+ else
+ fun_l22_n108(x)
+ end
+end
+
+def fun_l21_n138(x)
+ if (x < 1)
+ fun_l22_n394(x)
+ else
+ fun_l22_n783(x)
+ end
+end
+
+def fun_l21_n139(x)
+ if (x < 1)
+ fun_l22_n514(x)
+ else
+ fun_l22_n37(x)
+ end
+end
+
+def fun_l21_n140(x)
+ if (x < 1)
+ fun_l22_n358(x)
+ else
+ fun_l22_n768(x)
+ end
+end
+
+def fun_l21_n141(x)
+ if (x < 1)
+ fun_l22_n201(x)
+ else
+ fun_l22_n981(x)
+ end
+end
+
+def fun_l21_n142(x)
+ if (x < 1)
+ fun_l22_n371(x)
+ else
+ fun_l22_n66(x)
+ end
+end
+
+def fun_l21_n143(x)
+ if (x < 1)
+ fun_l22_n41(x)
+ else
+ fun_l22_n869(x)
+ end
+end
+
+def fun_l21_n144(x)
+ if (x < 1)
+ fun_l22_n961(x)
+ else
+ fun_l22_n488(x)
+ end
+end
+
+def fun_l21_n145(x)
+ if (x < 1)
+ fun_l22_n769(x)
+ else
+ fun_l22_n82(x)
+ end
+end
+
+def fun_l21_n146(x)
+ if (x < 1)
+ fun_l22_n700(x)
+ else
+ fun_l22_n276(x)
+ end
+end
+
+def fun_l21_n147(x)
+ if (x < 1)
+ fun_l22_n439(x)
+ else
+ fun_l22_n654(x)
+ end
+end
+
+def fun_l21_n148(x)
+ if (x < 1)
+ fun_l22_n130(x)
+ else
+ fun_l22_n825(x)
+ end
+end
+
+def fun_l21_n149(x)
+ if (x < 1)
+ fun_l22_n174(x)
+ else
+ fun_l22_n907(x)
+ end
+end
+
+def fun_l21_n150(x)
+ if (x < 1)
+ fun_l22_n386(x)
+ else
+ fun_l22_n760(x)
+ end
+end
+
+def fun_l21_n151(x)
+ if (x < 1)
+ fun_l22_n460(x)
+ else
+ fun_l22_n403(x)
+ end
+end
+
+def fun_l21_n152(x)
+ if (x < 1)
+ fun_l22_n861(x)
+ else
+ fun_l22_n832(x)
+ end
+end
+
+def fun_l21_n153(x)
+ if (x < 1)
+ fun_l22_n564(x)
+ else
+ fun_l22_n604(x)
+ end
+end
+
+def fun_l21_n154(x)
+ if (x < 1)
+ fun_l22_n402(x)
+ else
+ fun_l22_n999(x)
+ end
+end
+
+def fun_l21_n155(x)
+ if (x < 1)
+ fun_l22_n645(x)
+ else
+ fun_l22_n807(x)
+ end
+end
+
+def fun_l21_n156(x)
+ if (x < 1)
+ fun_l22_n709(x)
+ else
+ fun_l22_n930(x)
+ end
+end
+
+def fun_l21_n157(x)
+ if (x < 1)
+ fun_l22_n353(x)
+ else
+ fun_l22_n462(x)
+ end
+end
+
+def fun_l21_n158(x)
+ if (x < 1)
+ fun_l22_n697(x)
+ else
+ fun_l22_n463(x)
+ end
+end
+
+def fun_l21_n159(x)
+ if (x < 1)
+ fun_l22_n690(x)
+ else
+ fun_l22_n309(x)
+ end
+end
+
+def fun_l21_n160(x)
+ if (x < 1)
+ fun_l22_n889(x)
+ else
+ fun_l22_n326(x)
+ end
+end
+
+def fun_l21_n161(x)
+ if (x < 1)
+ fun_l22_n952(x)
+ else
+ fun_l22_n225(x)
+ end
+end
+
+def fun_l21_n162(x)
+ if (x < 1)
+ fun_l22_n345(x)
+ else
+ fun_l22_n168(x)
+ end
+end
+
+def fun_l21_n163(x)
+ if (x < 1)
+ fun_l22_n437(x)
+ else
+ fun_l22_n494(x)
+ end
+end
+
+def fun_l21_n164(x)
+ if (x < 1)
+ fun_l22_n151(x)
+ else
+ fun_l22_n846(x)
+ end
+end
+
+def fun_l21_n165(x)
+ if (x < 1)
+ fun_l22_n324(x)
+ else
+ fun_l22_n999(x)
+ end
+end
+
+def fun_l21_n166(x)
+ if (x < 1)
+ fun_l22_n232(x)
+ else
+ fun_l22_n473(x)
+ end
+end
+
+def fun_l21_n167(x)
+ if (x < 1)
+ fun_l22_n934(x)
+ else
+ fun_l22_n437(x)
+ end
+end
+
+def fun_l21_n168(x)
+ if (x < 1)
+ fun_l22_n738(x)
+ else
+ fun_l22_n410(x)
+ end
+end
+
+def fun_l21_n169(x)
+ if (x < 1)
+ fun_l22_n686(x)
+ else
+ fun_l22_n108(x)
+ end
+end
+
+def fun_l21_n170(x)
+ if (x < 1)
+ fun_l22_n595(x)
+ else
+ fun_l22_n935(x)
+ end
+end
+
+def fun_l21_n171(x)
+ if (x < 1)
+ fun_l22_n723(x)
+ else
+ fun_l22_n478(x)
+ end
+end
+
+def fun_l21_n172(x)
+ if (x < 1)
+ fun_l22_n610(x)
+ else
+ fun_l22_n709(x)
+ end
+end
+
+def fun_l21_n173(x)
+ if (x < 1)
+ fun_l22_n539(x)
+ else
+ fun_l22_n17(x)
+ end
+end
+
+def fun_l21_n174(x)
+ if (x < 1)
+ fun_l22_n612(x)
+ else
+ fun_l22_n235(x)
+ end
+end
+
+def fun_l21_n175(x)
+ if (x < 1)
+ fun_l22_n835(x)
+ else
+ fun_l22_n138(x)
+ end
+end
+
+def fun_l21_n176(x)
+ if (x < 1)
+ fun_l22_n997(x)
+ else
+ fun_l22_n123(x)
+ end
+end
+
+def fun_l21_n177(x)
+ if (x < 1)
+ fun_l22_n97(x)
+ else
+ fun_l22_n997(x)
+ end
+end
+
+def fun_l21_n178(x)
+ if (x < 1)
+ fun_l22_n842(x)
+ else
+ fun_l22_n925(x)
+ end
+end
+
+def fun_l21_n179(x)
+ if (x < 1)
+ fun_l22_n159(x)
+ else
+ fun_l22_n412(x)
+ end
+end
+
+def fun_l21_n180(x)
+ if (x < 1)
+ fun_l22_n109(x)
+ else
+ fun_l22_n691(x)
+ end
+end
+
+def fun_l21_n181(x)
+ if (x < 1)
+ fun_l22_n315(x)
+ else
+ fun_l22_n127(x)
+ end
+end
+
+def fun_l21_n182(x)
+ if (x < 1)
+ fun_l22_n220(x)
+ else
+ fun_l22_n143(x)
+ end
+end
+
+def fun_l21_n183(x)
+ if (x < 1)
+ fun_l22_n493(x)
+ else
+ fun_l22_n895(x)
+ end
+end
+
+def fun_l21_n184(x)
+ if (x < 1)
+ fun_l22_n667(x)
+ else
+ fun_l22_n675(x)
+ end
+end
+
+def fun_l21_n185(x)
+ if (x < 1)
+ fun_l22_n995(x)
+ else
+ fun_l22_n4(x)
+ end
+end
+
+def fun_l21_n186(x)
+ if (x < 1)
+ fun_l22_n210(x)
+ else
+ fun_l22_n690(x)
+ end
+end
+
+def fun_l21_n187(x)
+ if (x < 1)
+ fun_l22_n413(x)
+ else
+ fun_l22_n227(x)
+ end
+end
+
+def fun_l21_n188(x)
+ if (x < 1)
+ fun_l22_n562(x)
+ else
+ fun_l22_n591(x)
+ end
+end
+
+def fun_l21_n189(x)
+ if (x < 1)
+ fun_l22_n171(x)
+ else
+ fun_l22_n891(x)
+ end
+end
+
+def fun_l21_n190(x)
+ if (x < 1)
+ fun_l22_n207(x)
+ else
+ fun_l22_n401(x)
+ end
+end
+
+def fun_l21_n191(x)
+ if (x < 1)
+ fun_l22_n703(x)
+ else
+ fun_l22_n604(x)
+ end
+end
+
+def fun_l21_n192(x)
+ if (x < 1)
+ fun_l22_n772(x)
+ else
+ fun_l22_n321(x)
+ end
+end
+
+def fun_l21_n193(x)
+ if (x < 1)
+ fun_l22_n576(x)
+ else
+ fun_l22_n273(x)
+ end
+end
+
+def fun_l21_n194(x)
+ if (x < 1)
+ fun_l22_n897(x)
+ else
+ fun_l22_n624(x)
+ end
+end
+
+def fun_l21_n195(x)
+ if (x < 1)
+ fun_l22_n909(x)
+ else
+ fun_l22_n216(x)
+ end
+end
+
+def fun_l21_n196(x)
+ if (x < 1)
+ fun_l22_n904(x)
+ else
+ fun_l22_n618(x)
+ end
+end
+
+def fun_l21_n197(x)
+ if (x < 1)
+ fun_l22_n410(x)
+ else
+ fun_l22_n926(x)
+ end
+end
+
+def fun_l21_n198(x)
+ if (x < 1)
+ fun_l22_n884(x)
+ else
+ fun_l22_n174(x)
+ end
+end
+
+def fun_l21_n199(x)
+ if (x < 1)
+ fun_l22_n407(x)
+ else
+ fun_l22_n270(x)
+ end
+end
+
+def fun_l21_n200(x)
+ if (x < 1)
+ fun_l22_n741(x)
+ else
+ fun_l22_n2(x)
+ end
+end
+
+def fun_l21_n201(x)
+ if (x < 1)
+ fun_l22_n143(x)
+ else
+ fun_l22_n93(x)
+ end
+end
+
+def fun_l21_n202(x)
+ if (x < 1)
+ fun_l22_n397(x)
+ else
+ fun_l22_n424(x)
+ end
+end
+
+def fun_l21_n203(x)
+ if (x < 1)
+ fun_l22_n183(x)
+ else
+ fun_l22_n258(x)
+ end
+end
+
+def fun_l21_n204(x)
+ if (x < 1)
+ fun_l22_n12(x)
+ else
+ fun_l22_n50(x)
+ end
+end
+
+def fun_l21_n205(x)
+ if (x < 1)
+ fun_l22_n488(x)
+ else
+ fun_l22_n148(x)
+ end
+end
+
+def fun_l21_n206(x)
+ if (x < 1)
+ fun_l22_n516(x)
+ else
+ fun_l22_n87(x)
+ end
+end
+
+def fun_l21_n207(x)
+ if (x < 1)
+ fun_l22_n810(x)
+ else
+ fun_l22_n773(x)
+ end
+end
+
+def fun_l21_n208(x)
+ if (x < 1)
+ fun_l22_n508(x)
+ else
+ fun_l22_n898(x)
+ end
+end
+
+def fun_l21_n209(x)
+ if (x < 1)
+ fun_l22_n188(x)
+ else
+ fun_l22_n815(x)
+ end
+end
+
+def fun_l21_n210(x)
+ if (x < 1)
+ fun_l22_n86(x)
+ else
+ fun_l22_n615(x)
+ end
+end
+
+def fun_l21_n211(x)
+ if (x < 1)
+ fun_l22_n589(x)
+ else
+ fun_l22_n774(x)
+ end
+end
+
+def fun_l21_n212(x)
+ if (x < 1)
+ fun_l22_n926(x)
+ else
+ fun_l22_n14(x)
+ end
+end
+
+def fun_l21_n213(x)
+ if (x < 1)
+ fun_l22_n104(x)
+ else
+ fun_l22_n723(x)
+ end
+end
+
+def fun_l21_n214(x)
+ if (x < 1)
+ fun_l22_n699(x)
+ else
+ fun_l22_n775(x)
+ end
+end
+
+def fun_l21_n215(x)
+ if (x < 1)
+ fun_l22_n941(x)
+ else
+ fun_l22_n997(x)
+ end
+end
+
+def fun_l21_n216(x)
+ if (x < 1)
+ fun_l22_n182(x)
+ else
+ fun_l22_n409(x)
+ end
+end
+
+def fun_l21_n217(x)
+ if (x < 1)
+ fun_l22_n410(x)
+ else
+ fun_l22_n807(x)
+ end
+end
+
+def fun_l21_n218(x)
+ if (x < 1)
+ fun_l22_n787(x)
+ else
+ fun_l22_n143(x)
+ end
+end
+
+def fun_l21_n219(x)
+ if (x < 1)
+ fun_l22_n515(x)
+ else
+ fun_l22_n558(x)
+ end
+end
+
+def fun_l21_n220(x)
+ if (x < 1)
+ fun_l22_n22(x)
+ else
+ fun_l22_n37(x)
+ end
+end
+
+def fun_l21_n221(x)
+ if (x < 1)
+ fun_l22_n366(x)
+ else
+ fun_l22_n63(x)
+ end
+end
+
+def fun_l21_n222(x)
+ if (x < 1)
+ fun_l22_n846(x)
+ else
+ fun_l22_n655(x)
+ end
+end
+
+def fun_l21_n223(x)
+ if (x < 1)
+ fun_l22_n946(x)
+ else
+ fun_l22_n587(x)
+ end
+end
+
+def fun_l21_n224(x)
+ if (x < 1)
+ fun_l22_n841(x)
+ else
+ fun_l22_n874(x)
+ end
+end
+
+def fun_l21_n225(x)
+ if (x < 1)
+ fun_l22_n19(x)
+ else
+ fun_l22_n142(x)
+ end
+end
+
+def fun_l21_n226(x)
+ if (x < 1)
+ fun_l22_n939(x)
+ else
+ fun_l22_n214(x)
+ end
+end
+
+def fun_l21_n227(x)
+ if (x < 1)
+ fun_l22_n900(x)
+ else
+ fun_l22_n673(x)
+ end
+end
+
+def fun_l21_n228(x)
+ if (x < 1)
+ fun_l22_n784(x)
+ else
+ fun_l22_n258(x)
+ end
+end
+
+def fun_l21_n229(x)
+ if (x < 1)
+ fun_l22_n553(x)
+ else
+ fun_l22_n253(x)
+ end
+end
+
+def fun_l21_n230(x)
+ if (x < 1)
+ fun_l22_n927(x)
+ else
+ fun_l22_n9(x)
+ end
+end
+
+def fun_l21_n231(x)
+ if (x < 1)
+ fun_l22_n822(x)
+ else
+ fun_l22_n870(x)
+ end
+end
+
+def fun_l21_n232(x)
+ if (x < 1)
+ fun_l22_n741(x)
+ else
+ fun_l22_n185(x)
+ end
+end
+
+def fun_l21_n233(x)
+ if (x < 1)
+ fun_l22_n691(x)
+ else
+ fun_l22_n613(x)
+ end
+end
+
+def fun_l21_n234(x)
+ if (x < 1)
+ fun_l22_n995(x)
+ else
+ fun_l22_n73(x)
+ end
+end
+
+def fun_l21_n235(x)
+ if (x < 1)
+ fun_l22_n250(x)
+ else
+ fun_l22_n356(x)
+ end
+end
+
+def fun_l21_n236(x)
+ if (x < 1)
+ fun_l22_n531(x)
+ else
+ fun_l22_n335(x)
+ end
+end
+
+def fun_l21_n237(x)
+ if (x < 1)
+ fun_l22_n376(x)
+ else
+ fun_l22_n732(x)
+ end
+end
+
+def fun_l21_n238(x)
+ if (x < 1)
+ fun_l22_n293(x)
+ else
+ fun_l22_n886(x)
+ end
+end
+
+def fun_l21_n239(x)
+ if (x < 1)
+ fun_l22_n266(x)
+ else
+ fun_l22_n820(x)
+ end
+end
+
+def fun_l21_n240(x)
+ if (x < 1)
+ fun_l22_n450(x)
+ else
+ fun_l22_n418(x)
+ end
+end
+
+def fun_l21_n241(x)
+ if (x < 1)
+ fun_l22_n902(x)
+ else
+ fun_l22_n991(x)
+ end
+end
+
+def fun_l21_n242(x)
+ if (x < 1)
+ fun_l22_n521(x)
+ else
+ fun_l22_n516(x)
+ end
+end
+
+def fun_l21_n243(x)
+ if (x < 1)
+ fun_l22_n97(x)
+ else
+ fun_l22_n388(x)
+ end
+end
+
+def fun_l21_n244(x)
+ if (x < 1)
+ fun_l22_n596(x)
+ else
+ fun_l22_n758(x)
+ end
+end
+
+def fun_l21_n245(x)
+ if (x < 1)
+ fun_l22_n370(x)
+ else
+ fun_l22_n747(x)
+ end
+end
+
+def fun_l21_n246(x)
+ if (x < 1)
+ fun_l22_n73(x)
+ else
+ fun_l22_n84(x)
+ end
+end
+
+def fun_l21_n247(x)
+ if (x < 1)
+ fun_l22_n489(x)
+ else
+ fun_l22_n166(x)
+ end
+end
+
+def fun_l21_n248(x)
+ if (x < 1)
+ fun_l22_n419(x)
+ else
+ fun_l22_n698(x)
+ end
+end
+
+def fun_l21_n249(x)
+ if (x < 1)
+ fun_l22_n330(x)
+ else
+ fun_l22_n995(x)
+ end
+end
+
+def fun_l21_n250(x)
+ if (x < 1)
+ fun_l22_n443(x)
+ else
+ fun_l22_n341(x)
+ end
+end
+
+def fun_l21_n251(x)
+ if (x < 1)
+ fun_l22_n442(x)
+ else
+ fun_l22_n311(x)
+ end
+end
+
+def fun_l21_n252(x)
+ if (x < 1)
+ fun_l22_n60(x)
+ else
+ fun_l22_n399(x)
+ end
+end
+
+def fun_l21_n253(x)
+ if (x < 1)
+ fun_l22_n831(x)
+ else
+ fun_l22_n245(x)
+ end
+end
+
+def fun_l21_n254(x)
+ if (x < 1)
+ fun_l22_n946(x)
+ else
+ fun_l22_n205(x)
+ end
+end
+
+def fun_l21_n255(x)
+ if (x < 1)
+ fun_l22_n499(x)
+ else
+ fun_l22_n476(x)
+ end
+end
+
+def fun_l21_n256(x)
+ if (x < 1)
+ fun_l22_n841(x)
+ else
+ fun_l22_n70(x)
+ end
+end
+
+def fun_l21_n257(x)
+ if (x < 1)
+ fun_l22_n289(x)
+ else
+ fun_l22_n329(x)
+ end
+end
+
+def fun_l21_n258(x)
+ if (x < 1)
+ fun_l22_n149(x)
+ else
+ fun_l22_n270(x)
+ end
+end
+
+def fun_l21_n259(x)
+ if (x < 1)
+ fun_l22_n569(x)
+ else
+ fun_l22_n972(x)
+ end
+end
+
+def fun_l21_n260(x)
+ if (x < 1)
+ fun_l22_n313(x)
+ else
+ fun_l22_n573(x)
+ end
+end
+
+def fun_l21_n261(x)
+ if (x < 1)
+ fun_l22_n458(x)
+ else
+ fun_l22_n964(x)
+ end
+end
+
+def fun_l21_n262(x)
+ if (x < 1)
+ fun_l22_n308(x)
+ else
+ fun_l22_n825(x)
+ end
+end
+
+def fun_l21_n263(x)
+ if (x < 1)
+ fun_l22_n810(x)
+ else
+ fun_l22_n864(x)
+ end
+end
+
+def fun_l21_n264(x)
+ if (x < 1)
+ fun_l22_n52(x)
+ else
+ fun_l22_n486(x)
+ end
+end
+
+def fun_l21_n265(x)
+ if (x < 1)
+ fun_l22_n520(x)
+ else
+ fun_l22_n758(x)
+ end
+end
+
+def fun_l21_n266(x)
+ if (x < 1)
+ fun_l22_n954(x)
+ else
+ fun_l22_n819(x)
+ end
+end
+
+def fun_l21_n267(x)
+ if (x < 1)
+ fun_l22_n226(x)
+ else
+ fun_l22_n893(x)
+ end
+end
+
+def fun_l21_n268(x)
+ if (x < 1)
+ fun_l22_n854(x)
+ else
+ fun_l22_n281(x)
+ end
+end
+
+def fun_l21_n269(x)
+ if (x < 1)
+ fun_l22_n354(x)
+ else
+ fun_l22_n296(x)
+ end
+end
+
+def fun_l21_n270(x)
+ if (x < 1)
+ fun_l22_n970(x)
+ else
+ fun_l22_n898(x)
+ end
+end
+
+def fun_l21_n271(x)
+ if (x < 1)
+ fun_l22_n769(x)
+ else
+ fun_l22_n94(x)
+ end
+end
+
+def fun_l21_n272(x)
+ if (x < 1)
+ fun_l22_n100(x)
+ else
+ fun_l22_n830(x)
+ end
+end
+
+def fun_l21_n273(x)
+ if (x < 1)
+ fun_l22_n514(x)
+ else
+ fun_l22_n522(x)
+ end
+end
+
+def fun_l21_n274(x)
+ if (x < 1)
+ fun_l22_n897(x)
+ else
+ fun_l22_n260(x)
+ end
+end
+
+def fun_l21_n275(x)
+ if (x < 1)
+ fun_l22_n834(x)
+ else
+ fun_l22_n125(x)
+ end
+end
+
+def fun_l21_n276(x)
+ if (x < 1)
+ fun_l22_n262(x)
+ else
+ fun_l22_n617(x)
+ end
+end
+
+def fun_l21_n277(x)
+ if (x < 1)
+ fun_l22_n84(x)
+ else
+ fun_l22_n483(x)
+ end
+end
+
+def fun_l21_n278(x)
+ if (x < 1)
+ fun_l22_n657(x)
+ else
+ fun_l22_n10(x)
+ end
+end
+
+def fun_l21_n279(x)
+ if (x < 1)
+ fun_l22_n142(x)
+ else
+ fun_l22_n666(x)
+ end
+end
+
+def fun_l21_n280(x)
+ if (x < 1)
+ fun_l22_n824(x)
+ else
+ fun_l22_n408(x)
+ end
+end
+
+def fun_l21_n281(x)
+ if (x < 1)
+ fun_l22_n39(x)
+ else
+ fun_l22_n225(x)
+ end
+end
+
+def fun_l21_n282(x)
+ if (x < 1)
+ fun_l22_n93(x)
+ else
+ fun_l22_n410(x)
+ end
+end
+
+def fun_l21_n283(x)
+ if (x < 1)
+ fun_l22_n294(x)
+ else
+ fun_l22_n268(x)
+ end
+end
+
+def fun_l21_n284(x)
+ if (x < 1)
+ fun_l22_n636(x)
+ else
+ fun_l22_n767(x)
+ end
+end
+
+def fun_l21_n285(x)
+ if (x < 1)
+ fun_l22_n181(x)
+ else
+ fun_l22_n317(x)
+ end
+end
+
+def fun_l21_n286(x)
+ if (x < 1)
+ fun_l22_n208(x)
+ else
+ fun_l22_n803(x)
+ end
+end
+
+def fun_l21_n287(x)
+ if (x < 1)
+ fun_l22_n910(x)
+ else
+ fun_l22_n872(x)
+ end
+end
+
+def fun_l21_n288(x)
+ if (x < 1)
+ fun_l22_n771(x)
+ else
+ fun_l22_n858(x)
+ end
+end
+
+def fun_l21_n289(x)
+ if (x < 1)
+ fun_l22_n109(x)
+ else
+ fun_l22_n577(x)
+ end
+end
+
+def fun_l21_n290(x)
+ if (x < 1)
+ fun_l22_n474(x)
+ else
+ fun_l22_n289(x)
+ end
+end
+
+def fun_l21_n291(x)
+ if (x < 1)
+ fun_l22_n55(x)
+ else
+ fun_l22_n448(x)
+ end
+end
+
+def fun_l21_n292(x)
+ if (x < 1)
+ fun_l22_n644(x)
+ else
+ fun_l22_n958(x)
+ end
+end
+
+def fun_l21_n293(x)
+ if (x < 1)
+ fun_l22_n775(x)
+ else
+ fun_l22_n131(x)
+ end
+end
+
+def fun_l21_n294(x)
+ if (x < 1)
+ fun_l22_n950(x)
+ else
+ fun_l22_n216(x)
+ end
+end
+
+def fun_l21_n295(x)
+ if (x < 1)
+ fun_l22_n258(x)
+ else
+ fun_l22_n919(x)
+ end
+end
+
+def fun_l21_n296(x)
+ if (x < 1)
+ fun_l22_n298(x)
+ else
+ fun_l22_n334(x)
+ end
+end
+
+def fun_l21_n297(x)
+ if (x < 1)
+ fun_l22_n124(x)
+ else
+ fun_l22_n704(x)
+ end
+end
+
+def fun_l21_n298(x)
+ if (x < 1)
+ fun_l22_n526(x)
+ else
+ fun_l22_n139(x)
+ end
+end
+
+def fun_l21_n299(x)
+ if (x < 1)
+ fun_l22_n133(x)
+ else
+ fun_l22_n65(x)
+ end
+end
+
+def fun_l21_n300(x)
+ if (x < 1)
+ fun_l22_n476(x)
+ else
+ fun_l22_n858(x)
+ end
+end
+
+def fun_l21_n301(x)
+ if (x < 1)
+ fun_l22_n23(x)
+ else
+ fun_l22_n391(x)
+ end
+end
+
+def fun_l21_n302(x)
+ if (x < 1)
+ fun_l22_n292(x)
+ else
+ fun_l22_n127(x)
+ end
+end
+
+def fun_l21_n303(x)
+ if (x < 1)
+ fun_l22_n935(x)
+ else
+ fun_l22_n399(x)
+ end
+end
+
+def fun_l21_n304(x)
+ if (x < 1)
+ fun_l22_n110(x)
+ else
+ fun_l22_n904(x)
+ end
+end
+
+def fun_l21_n305(x)
+ if (x < 1)
+ fun_l22_n865(x)
+ else
+ fun_l22_n510(x)
+ end
+end
+
+def fun_l21_n306(x)
+ if (x < 1)
+ fun_l22_n930(x)
+ else
+ fun_l22_n892(x)
+ end
+end
+
+def fun_l21_n307(x)
+ if (x < 1)
+ fun_l22_n701(x)
+ else
+ fun_l22_n172(x)
+ end
+end
+
+def fun_l21_n308(x)
+ if (x < 1)
+ fun_l22_n424(x)
+ else
+ fun_l22_n169(x)
+ end
+end
+
+def fun_l21_n309(x)
+ if (x < 1)
+ fun_l22_n494(x)
+ else
+ fun_l22_n608(x)
+ end
+end
+
+def fun_l21_n310(x)
+ if (x < 1)
+ fun_l22_n862(x)
+ else
+ fun_l22_n54(x)
+ end
+end
+
+def fun_l21_n311(x)
+ if (x < 1)
+ fun_l22_n679(x)
+ else
+ fun_l22_n246(x)
+ end
+end
+
+def fun_l21_n312(x)
+ if (x < 1)
+ fun_l22_n897(x)
+ else
+ fun_l22_n581(x)
+ end
+end
+
+def fun_l21_n313(x)
+ if (x < 1)
+ fun_l22_n788(x)
+ else
+ fun_l22_n32(x)
+ end
+end
+
+def fun_l21_n314(x)
+ if (x < 1)
+ fun_l22_n68(x)
+ else
+ fun_l22_n920(x)
+ end
+end
+
+def fun_l21_n315(x)
+ if (x < 1)
+ fun_l22_n520(x)
+ else
+ fun_l22_n814(x)
+ end
+end
+
+def fun_l21_n316(x)
+ if (x < 1)
+ fun_l22_n190(x)
+ else
+ fun_l22_n832(x)
+ end
+end
+
+def fun_l21_n317(x)
+ if (x < 1)
+ fun_l22_n500(x)
+ else
+ fun_l22_n576(x)
+ end
+end
+
+def fun_l21_n318(x)
+ if (x < 1)
+ fun_l22_n999(x)
+ else
+ fun_l22_n423(x)
+ end
+end
+
+def fun_l21_n319(x)
+ if (x < 1)
+ fun_l22_n62(x)
+ else
+ fun_l22_n451(x)
+ end
+end
+
+def fun_l21_n320(x)
+ if (x < 1)
+ fun_l22_n265(x)
+ else
+ fun_l22_n421(x)
+ end
+end
+
+def fun_l21_n321(x)
+ if (x < 1)
+ fun_l22_n340(x)
+ else
+ fun_l22_n297(x)
+ end
+end
+
+def fun_l21_n322(x)
+ if (x < 1)
+ fun_l22_n526(x)
+ else
+ fun_l22_n834(x)
+ end
+end
+
+def fun_l21_n323(x)
+ if (x < 1)
+ fun_l22_n305(x)
+ else
+ fun_l22_n444(x)
+ end
+end
+
+def fun_l21_n324(x)
+ if (x < 1)
+ fun_l22_n117(x)
+ else
+ fun_l22_n617(x)
+ end
+end
+
+def fun_l21_n325(x)
+ if (x < 1)
+ fun_l22_n715(x)
+ else
+ fun_l22_n551(x)
+ end
+end
+
+def fun_l21_n326(x)
+ if (x < 1)
+ fun_l22_n921(x)
+ else
+ fun_l22_n69(x)
+ end
+end
+
+def fun_l21_n327(x)
+ if (x < 1)
+ fun_l22_n226(x)
+ else
+ fun_l22_n21(x)
+ end
+end
+
+def fun_l21_n328(x)
+ if (x < 1)
+ fun_l22_n181(x)
+ else
+ fun_l22_n409(x)
+ end
+end
+
+def fun_l21_n329(x)
+ if (x < 1)
+ fun_l22_n894(x)
+ else
+ fun_l22_n17(x)
+ end
+end
+
+def fun_l21_n330(x)
+ if (x < 1)
+ fun_l22_n633(x)
+ else
+ fun_l22_n370(x)
+ end
+end
+
+def fun_l21_n331(x)
+ if (x < 1)
+ fun_l22_n638(x)
+ else
+ fun_l22_n994(x)
+ end
+end
+
+def fun_l21_n332(x)
+ if (x < 1)
+ fun_l22_n663(x)
+ else
+ fun_l22_n981(x)
+ end
+end
+
+def fun_l21_n333(x)
+ if (x < 1)
+ fun_l22_n861(x)
+ else
+ fun_l22_n472(x)
+ end
+end
+
+def fun_l21_n334(x)
+ if (x < 1)
+ fun_l22_n265(x)
+ else
+ fun_l22_n534(x)
+ end
+end
+
+def fun_l21_n335(x)
+ if (x < 1)
+ fun_l22_n43(x)
+ else
+ fun_l22_n613(x)
+ end
+end
+
+def fun_l21_n336(x)
+ if (x < 1)
+ fun_l22_n788(x)
+ else
+ fun_l22_n649(x)
+ end
+end
+
+def fun_l21_n337(x)
+ if (x < 1)
+ fun_l22_n406(x)
+ else
+ fun_l22_n644(x)
+ end
+end
+
+def fun_l21_n338(x)
+ if (x < 1)
+ fun_l22_n582(x)
+ else
+ fun_l22_n463(x)
+ end
+end
+
+def fun_l21_n339(x)
+ if (x < 1)
+ fun_l22_n825(x)
+ else
+ fun_l22_n775(x)
+ end
+end
+
+def fun_l21_n340(x)
+ if (x < 1)
+ fun_l22_n696(x)
+ else
+ fun_l22_n318(x)
+ end
+end
+
+def fun_l21_n341(x)
+ if (x < 1)
+ fun_l22_n21(x)
+ else
+ fun_l22_n285(x)
+ end
+end
+
+def fun_l21_n342(x)
+ if (x < 1)
+ fun_l22_n10(x)
+ else
+ fun_l22_n423(x)
+ end
+end
+
+def fun_l21_n343(x)
+ if (x < 1)
+ fun_l22_n205(x)
+ else
+ fun_l22_n86(x)
+ end
+end
+
+def fun_l21_n344(x)
+ if (x < 1)
+ fun_l22_n437(x)
+ else
+ fun_l22_n712(x)
+ end
+end
+
+def fun_l21_n345(x)
+ if (x < 1)
+ fun_l22_n941(x)
+ else
+ fun_l22_n655(x)
+ end
+end
+
+def fun_l21_n346(x)
+ if (x < 1)
+ fun_l22_n673(x)
+ else
+ fun_l22_n750(x)
+ end
+end
+
+def fun_l21_n347(x)
+ if (x < 1)
+ fun_l22_n728(x)
+ else
+ fun_l22_n605(x)
+ end
+end
+
+def fun_l21_n348(x)
+ if (x < 1)
+ fun_l22_n452(x)
+ else
+ fun_l22_n968(x)
+ end
+end
+
+def fun_l21_n349(x)
+ if (x < 1)
+ fun_l22_n554(x)
+ else
+ fun_l22_n997(x)
+ end
+end
+
+def fun_l21_n350(x)
+ if (x < 1)
+ fun_l22_n784(x)
+ else
+ fun_l22_n801(x)
+ end
+end
+
+def fun_l21_n351(x)
+ if (x < 1)
+ fun_l22_n397(x)
+ else
+ fun_l22_n636(x)
+ end
+end
+
+def fun_l21_n352(x)
+ if (x < 1)
+ fun_l22_n562(x)
+ else
+ fun_l22_n150(x)
+ end
+end
+
+def fun_l21_n353(x)
+ if (x < 1)
+ fun_l22_n142(x)
+ else
+ fun_l22_n396(x)
+ end
+end
+
+def fun_l21_n354(x)
+ if (x < 1)
+ fun_l22_n455(x)
+ else
+ fun_l22_n424(x)
+ end
+end
+
+def fun_l21_n355(x)
+ if (x < 1)
+ fun_l22_n736(x)
+ else
+ fun_l22_n534(x)
+ end
+end
+
+def fun_l21_n356(x)
+ if (x < 1)
+ fun_l22_n111(x)
+ else
+ fun_l22_n903(x)
+ end
+end
+
+def fun_l21_n357(x)
+ if (x < 1)
+ fun_l22_n996(x)
+ else
+ fun_l22_n350(x)
+ end
+end
+
+def fun_l21_n358(x)
+ if (x < 1)
+ fun_l22_n516(x)
+ else
+ fun_l22_n202(x)
+ end
+end
+
+def fun_l21_n359(x)
+ if (x < 1)
+ fun_l22_n68(x)
+ else
+ fun_l22_n823(x)
+ end
+end
+
+def fun_l21_n360(x)
+ if (x < 1)
+ fun_l22_n298(x)
+ else
+ fun_l22_n873(x)
+ end
+end
+
+def fun_l21_n361(x)
+ if (x < 1)
+ fun_l22_n491(x)
+ else
+ fun_l22_n86(x)
+ end
+end
+
+def fun_l21_n362(x)
+ if (x < 1)
+ fun_l22_n340(x)
+ else
+ fun_l22_n215(x)
+ end
+end
+
+def fun_l21_n363(x)
+ if (x < 1)
+ fun_l22_n452(x)
+ else
+ fun_l22_n416(x)
+ end
+end
+
+def fun_l21_n364(x)
+ if (x < 1)
+ fun_l22_n625(x)
+ else
+ fun_l22_n638(x)
+ end
+end
+
+def fun_l21_n365(x)
+ if (x < 1)
+ fun_l22_n166(x)
+ else
+ fun_l22_n380(x)
+ end
+end
+
+def fun_l21_n366(x)
+ if (x < 1)
+ fun_l22_n934(x)
+ else
+ fun_l22_n937(x)
+ end
+end
+
+def fun_l21_n367(x)
+ if (x < 1)
+ fun_l22_n77(x)
+ else
+ fun_l22_n117(x)
+ end
+end
+
+def fun_l21_n368(x)
+ if (x < 1)
+ fun_l22_n688(x)
+ else
+ fun_l22_n529(x)
+ end
+end
+
+def fun_l21_n369(x)
+ if (x < 1)
+ fun_l22_n950(x)
+ else
+ fun_l22_n148(x)
+ end
+end
+
+def fun_l21_n370(x)
+ if (x < 1)
+ fun_l22_n216(x)
+ else
+ fun_l22_n588(x)
+ end
+end
+
+def fun_l21_n371(x)
+ if (x < 1)
+ fun_l22_n127(x)
+ else
+ fun_l22_n901(x)
+ end
+end
+
+def fun_l21_n372(x)
+ if (x < 1)
+ fun_l22_n244(x)
+ else
+ fun_l22_n516(x)
+ end
+end
+
+def fun_l21_n373(x)
+ if (x < 1)
+ fun_l22_n791(x)
+ else
+ fun_l22_n466(x)
+ end
+end
+
+def fun_l21_n374(x)
+ if (x < 1)
+ fun_l22_n469(x)
+ else
+ fun_l22_n38(x)
+ end
+end
+
+def fun_l21_n375(x)
+ if (x < 1)
+ fun_l22_n894(x)
+ else
+ fun_l22_n82(x)
+ end
+end
+
+def fun_l21_n376(x)
+ if (x < 1)
+ fun_l22_n663(x)
+ else
+ fun_l22_n865(x)
+ end
+end
+
+def fun_l21_n377(x)
+ if (x < 1)
+ fun_l22_n782(x)
+ else
+ fun_l22_n10(x)
+ end
+end
+
+def fun_l21_n378(x)
+ if (x < 1)
+ fun_l22_n930(x)
+ else
+ fun_l22_n767(x)
+ end
+end
+
+def fun_l21_n379(x)
+ if (x < 1)
+ fun_l22_n130(x)
+ else
+ fun_l22_n437(x)
+ end
+end
+
+def fun_l21_n380(x)
+ if (x < 1)
+ fun_l22_n496(x)
+ else
+ fun_l22_n413(x)
+ end
+end
+
+def fun_l21_n381(x)
+ if (x < 1)
+ fun_l22_n453(x)
+ else
+ fun_l22_n542(x)
+ end
+end
+
+def fun_l21_n382(x)
+ if (x < 1)
+ fun_l22_n404(x)
+ else
+ fun_l22_n637(x)
+ end
+end
+
+def fun_l21_n383(x)
+ if (x < 1)
+ fun_l22_n829(x)
+ else
+ fun_l22_n526(x)
+ end
+end
+
+def fun_l21_n384(x)
+ if (x < 1)
+ fun_l22_n882(x)
+ else
+ fun_l22_n922(x)
+ end
+end
+
+def fun_l21_n385(x)
+ if (x < 1)
+ fun_l22_n58(x)
+ else
+ fun_l22_n401(x)
+ end
+end
+
+def fun_l21_n386(x)
+ if (x < 1)
+ fun_l22_n936(x)
+ else
+ fun_l22_n164(x)
+ end
+end
+
+def fun_l21_n387(x)
+ if (x < 1)
+ fun_l22_n773(x)
+ else
+ fun_l22_n323(x)
+ end
+end
+
+def fun_l21_n388(x)
+ if (x < 1)
+ fun_l22_n718(x)
+ else
+ fun_l22_n189(x)
+ end
+end
+
+def fun_l21_n389(x)
+ if (x < 1)
+ fun_l22_n950(x)
+ else
+ fun_l22_n283(x)
+ end
+end
+
+def fun_l21_n390(x)
+ if (x < 1)
+ fun_l22_n278(x)
+ else
+ fun_l22_n325(x)
+ end
+end
+
+def fun_l21_n391(x)
+ if (x < 1)
+ fun_l22_n98(x)
+ else
+ fun_l22_n162(x)
+ end
+end
+
+def fun_l21_n392(x)
+ if (x < 1)
+ fun_l22_n268(x)
+ else
+ fun_l22_n416(x)
+ end
+end
+
+def fun_l21_n393(x)
+ if (x < 1)
+ fun_l22_n344(x)
+ else
+ fun_l22_n680(x)
+ end
+end
+
+def fun_l21_n394(x)
+ if (x < 1)
+ fun_l22_n545(x)
+ else
+ fun_l22_n41(x)
+ end
+end
+
+def fun_l21_n395(x)
+ if (x < 1)
+ fun_l22_n149(x)
+ else
+ fun_l22_n659(x)
+ end
+end
+
+def fun_l21_n396(x)
+ if (x < 1)
+ fun_l22_n81(x)
+ else
+ fun_l22_n316(x)
+ end
+end
+
+def fun_l21_n397(x)
+ if (x < 1)
+ fun_l22_n657(x)
+ else
+ fun_l22_n414(x)
+ end
+end
+
+def fun_l21_n398(x)
+ if (x < 1)
+ fun_l22_n262(x)
+ else
+ fun_l22_n26(x)
+ end
+end
+
+def fun_l21_n399(x)
+ if (x < 1)
+ fun_l22_n509(x)
+ else
+ fun_l22_n658(x)
+ end
+end
+
+def fun_l21_n400(x)
+ if (x < 1)
+ fun_l22_n533(x)
+ else
+ fun_l22_n416(x)
+ end
+end
+
+def fun_l21_n401(x)
+ if (x < 1)
+ fun_l22_n631(x)
+ else
+ fun_l22_n575(x)
+ end
+end
+
+def fun_l21_n402(x)
+ if (x < 1)
+ fun_l22_n171(x)
+ else
+ fun_l22_n727(x)
+ end
+end
+
+def fun_l21_n403(x)
+ if (x < 1)
+ fun_l22_n65(x)
+ else
+ fun_l22_n109(x)
+ end
+end
+
+def fun_l21_n404(x)
+ if (x < 1)
+ fun_l22_n818(x)
+ else
+ fun_l22_n638(x)
+ end
+end
+
+def fun_l21_n405(x)
+ if (x < 1)
+ fun_l22_n515(x)
+ else
+ fun_l22_n86(x)
+ end
+end
+
+def fun_l21_n406(x)
+ if (x < 1)
+ fun_l22_n500(x)
+ else
+ fun_l22_n367(x)
+ end
+end
+
+def fun_l21_n407(x)
+ if (x < 1)
+ fun_l22_n609(x)
+ else
+ fun_l22_n926(x)
+ end
+end
+
+def fun_l21_n408(x)
+ if (x < 1)
+ fun_l22_n553(x)
+ else
+ fun_l22_n494(x)
+ end
+end
+
+def fun_l21_n409(x)
+ if (x < 1)
+ fun_l22_n837(x)
+ else
+ fun_l22_n800(x)
+ end
+end
+
+def fun_l21_n410(x)
+ if (x < 1)
+ fun_l22_n511(x)
+ else
+ fun_l22_n376(x)
+ end
+end
+
+def fun_l21_n411(x)
+ if (x < 1)
+ fun_l22_n691(x)
+ else
+ fun_l22_n135(x)
+ end
+end
+
+def fun_l21_n412(x)
+ if (x < 1)
+ fun_l22_n537(x)
+ else
+ fun_l22_n708(x)
+ end
+end
+
+def fun_l21_n413(x)
+ if (x < 1)
+ fun_l22_n858(x)
+ else
+ fun_l22_n75(x)
+ end
+end
+
+def fun_l21_n414(x)
+ if (x < 1)
+ fun_l22_n473(x)
+ else
+ fun_l22_n26(x)
+ end
+end
+
+def fun_l21_n415(x)
+ if (x < 1)
+ fun_l22_n443(x)
+ else
+ fun_l22_n709(x)
+ end
+end
+
+def fun_l21_n416(x)
+ if (x < 1)
+ fun_l22_n464(x)
+ else
+ fun_l22_n329(x)
+ end
+end
+
+def fun_l21_n417(x)
+ if (x < 1)
+ fun_l22_n402(x)
+ else
+ fun_l22_n438(x)
+ end
+end
+
+def fun_l21_n418(x)
+ if (x < 1)
+ fun_l22_n741(x)
+ else
+ fun_l22_n704(x)
+ end
+end
+
+def fun_l21_n419(x)
+ if (x < 1)
+ fun_l22_n949(x)
+ else
+ fun_l22_n46(x)
+ end
+end
+
+def fun_l21_n420(x)
+ if (x < 1)
+ fun_l22_n102(x)
+ else
+ fun_l22_n20(x)
+ end
+end
+
+def fun_l21_n421(x)
+ if (x < 1)
+ fun_l22_n834(x)
+ else
+ fun_l22_n876(x)
+ end
+end
+
+def fun_l21_n422(x)
+ if (x < 1)
+ fun_l22_n881(x)
+ else
+ fun_l22_n100(x)
+ end
+end
+
+def fun_l21_n423(x)
+ if (x < 1)
+ fun_l22_n155(x)
+ else
+ fun_l22_n99(x)
+ end
+end
+
+def fun_l21_n424(x)
+ if (x < 1)
+ fun_l22_n913(x)
+ else
+ fun_l22_n839(x)
+ end
+end
+
+def fun_l21_n425(x)
+ if (x < 1)
+ fun_l22_n981(x)
+ else
+ fun_l22_n73(x)
+ end
+end
+
+def fun_l21_n426(x)
+ if (x < 1)
+ fun_l22_n221(x)
+ else
+ fun_l22_n548(x)
+ end
+end
+
+def fun_l21_n427(x)
+ if (x < 1)
+ fun_l22_n563(x)
+ else
+ fun_l22_n978(x)
+ end
+end
+
+def fun_l21_n428(x)
+ if (x < 1)
+ fun_l22_n310(x)
+ else
+ fun_l22_n591(x)
+ end
+end
+
+def fun_l21_n429(x)
+ if (x < 1)
+ fun_l22_n962(x)
+ else
+ fun_l22_n156(x)
+ end
+end
+
+def fun_l21_n430(x)
+ if (x < 1)
+ fun_l22_n810(x)
+ else
+ fun_l22_n766(x)
+ end
+end
+
+def fun_l21_n431(x)
+ if (x < 1)
+ fun_l22_n675(x)
+ else
+ fun_l22_n354(x)
+ end
+end
+
+def fun_l21_n432(x)
+ if (x < 1)
+ fun_l22_n320(x)
+ else
+ fun_l22_n474(x)
+ end
+end
+
+def fun_l21_n433(x)
+ if (x < 1)
+ fun_l22_n50(x)
+ else
+ fun_l22_n626(x)
+ end
+end
+
+def fun_l21_n434(x)
+ if (x < 1)
+ fun_l22_n956(x)
+ else
+ fun_l22_n238(x)
+ end
+end
+
+def fun_l21_n435(x)
+ if (x < 1)
+ fun_l22_n966(x)
+ else
+ fun_l22_n729(x)
+ end
+end
+
+def fun_l21_n436(x)
+ if (x < 1)
+ fun_l22_n856(x)
+ else
+ fun_l22_n553(x)
+ end
+end
+
+def fun_l21_n437(x)
+ if (x < 1)
+ fun_l22_n833(x)
+ else
+ fun_l22_n312(x)
+ end
+end
+
+def fun_l21_n438(x)
+ if (x < 1)
+ fun_l22_n254(x)
+ else
+ fun_l22_n515(x)
+ end
+end
+
+def fun_l21_n439(x)
+ if (x < 1)
+ fun_l22_n548(x)
+ else
+ fun_l22_n184(x)
+ end
+end
+
+def fun_l21_n440(x)
+ if (x < 1)
+ fun_l22_n922(x)
+ else
+ fun_l22_n465(x)
+ end
+end
+
+def fun_l21_n441(x)
+ if (x < 1)
+ fun_l22_n136(x)
+ else
+ fun_l22_n739(x)
+ end
+end
+
+def fun_l21_n442(x)
+ if (x < 1)
+ fun_l22_n4(x)
+ else
+ fun_l22_n359(x)
+ end
+end
+
+def fun_l21_n443(x)
+ if (x < 1)
+ fun_l22_n269(x)
+ else
+ fun_l22_n417(x)
+ end
+end
+
+def fun_l21_n444(x)
+ if (x < 1)
+ fun_l22_n809(x)
+ else
+ fun_l22_n430(x)
+ end
+end
+
+def fun_l21_n445(x)
+ if (x < 1)
+ fun_l22_n428(x)
+ else
+ fun_l22_n55(x)
+ end
+end
+
+def fun_l21_n446(x)
+ if (x < 1)
+ fun_l22_n265(x)
+ else
+ fun_l22_n394(x)
+ end
+end
+
+def fun_l21_n447(x)
+ if (x < 1)
+ fun_l22_n885(x)
+ else
+ fun_l22_n139(x)
+ end
+end
+
+def fun_l21_n448(x)
+ if (x < 1)
+ fun_l22_n219(x)
+ else
+ fun_l22_n578(x)
+ end
+end
+
+def fun_l21_n449(x)
+ if (x < 1)
+ fun_l22_n458(x)
+ else
+ fun_l22_n226(x)
+ end
+end
+
+def fun_l21_n450(x)
+ if (x < 1)
+ fun_l22_n128(x)
+ else
+ fun_l22_n790(x)
+ end
+end
+
+def fun_l21_n451(x)
+ if (x < 1)
+ fun_l22_n134(x)
+ else
+ fun_l22_n471(x)
+ end
+end
+
+def fun_l21_n452(x)
+ if (x < 1)
+ fun_l22_n180(x)
+ else
+ fun_l22_n183(x)
+ end
+end
+
+def fun_l21_n453(x)
+ if (x < 1)
+ fun_l22_n823(x)
+ else
+ fun_l22_n667(x)
+ end
+end
+
+def fun_l21_n454(x)
+ if (x < 1)
+ fun_l22_n324(x)
+ else
+ fun_l22_n487(x)
+ end
+end
+
+def fun_l21_n455(x)
+ if (x < 1)
+ fun_l22_n341(x)
+ else
+ fun_l22_n784(x)
+ end
+end
+
+def fun_l21_n456(x)
+ if (x < 1)
+ fun_l22_n32(x)
+ else
+ fun_l22_n227(x)
+ end
+end
+
+def fun_l21_n457(x)
+ if (x < 1)
+ fun_l22_n567(x)
+ else
+ fun_l22_n774(x)
+ end
+end
+
+def fun_l21_n458(x)
+ if (x < 1)
+ fun_l22_n342(x)
+ else
+ fun_l22_n126(x)
+ end
+end
+
+def fun_l21_n459(x)
+ if (x < 1)
+ fun_l22_n116(x)
+ else
+ fun_l22_n367(x)
+ end
+end
+
+def fun_l21_n460(x)
+ if (x < 1)
+ fun_l22_n864(x)
+ else
+ fun_l22_n618(x)
+ end
+end
+
+def fun_l21_n461(x)
+ if (x < 1)
+ fun_l22_n823(x)
+ else
+ fun_l22_n799(x)
+ end
+end
+
+def fun_l21_n462(x)
+ if (x < 1)
+ fun_l22_n684(x)
+ else
+ fun_l22_n758(x)
+ end
+end
+
+def fun_l21_n463(x)
+ if (x < 1)
+ fun_l22_n662(x)
+ else
+ fun_l22_n514(x)
+ end
+end
+
+def fun_l21_n464(x)
+ if (x < 1)
+ fun_l22_n736(x)
+ else
+ fun_l22_n794(x)
+ end
+end
+
+def fun_l21_n465(x)
+ if (x < 1)
+ fun_l22_n200(x)
+ else
+ fun_l22_n565(x)
+ end
+end
+
+def fun_l21_n466(x)
+ if (x < 1)
+ fun_l22_n787(x)
+ else
+ fun_l22_n835(x)
+ end
+end
+
+def fun_l21_n467(x)
+ if (x < 1)
+ fun_l22_n927(x)
+ else
+ fun_l22_n399(x)
+ end
+end
+
+def fun_l21_n468(x)
+ if (x < 1)
+ fun_l22_n102(x)
+ else
+ fun_l22_n738(x)
+ end
+end
+
+def fun_l21_n469(x)
+ if (x < 1)
+ fun_l22_n833(x)
+ else
+ fun_l22_n917(x)
+ end
+end
+
+def fun_l21_n470(x)
+ if (x < 1)
+ fun_l22_n422(x)
+ else
+ fun_l22_n108(x)
+ end
+end
+
+def fun_l21_n471(x)
+ if (x < 1)
+ fun_l22_n884(x)
+ else
+ fun_l22_n19(x)
+ end
+end
+
+def fun_l21_n472(x)
+ if (x < 1)
+ fun_l22_n849(x)
+ else
+ fun_l22_n251(x)
+ end
+end
+
+def fun_l21_n473(x)
+ if (x < 1)
+ fun_l22_n636(x)
+ else
+ fun_l22_n439(x)
+ end
+end
+
+def fun_l21_n474(x)
+ if (x < 1)
+ fun_l22_n867(x)
+ else
+ fun_l22_n227(x)
+ end
+end
+
+def fun_l21_n475(x)
+ if (x < 1)
+ fun_l22_n809(x)
+ else
+ fun_l22_n548(x)
+ end
+end
+
+def fun_l21_n476(x)
+ if (x < 1)
+ fun_l22_n213(x)
+ else
+ fun_l22_n607(x)
+ end
+end
+
+def fun_l21_n477(x)
+ if (x < 1)
+ fun_l22_n44(x)
+ else
+ fun_l22_n38(x)
+ end
+end
+
+def fun_l21_n478(x)
+ if (x < 1)
+ fun_l22_n400(x)
+ else
+ fun_l22_n436(x)
+ end
+end
+
+def fun_l21_n479(x)
+ if (x < 1)
+ fun_l22_n701(x)
+ else
+ fun_l22_n84(x)
+ end
+end
+
+def fun_l21_n480(x)
+ if (x < 1)
+ fun_l22_n21(x)
+ else
+ fun_l22_n215(x)
+ end
+end
+
+def fun_l21_n481(x)
+ if (x < 1)
+ fun_l22_n27(x)
+ else
+ fun_l22_n198(x)
+ end
+end
+
+def fun_l21_n482(x)
+ if (x < 1)
+ fun_l22_n803(x)
+ else
+ fun_l22_n82(x)
+ end
+end
+
+def fun_l21_n483(x)
+ if (x < 1)
+ fun_l22_n490(x)
+ else
+ fun_l22_n126(x)
+ end
+end
+
+def fun_l21_n484(x)
+ if (x < 1)
+ fun_l22_n348(x)
+ else
+ fun_l22_n586(x)
+ end
+end
+
+def fun_l21_n485(x)
+ if (x < 1)
+ fun_l22_n279(x)
+ else
+ fun_l22_n266(x)
+ end
+end
+
+def fun_l21_n486(x)
+ if (x < 1)
+ fun_l22_n398(x)
+ else
+ fun_l22_n26(x)
+ end
+end
+
+def fun_l21_n487(x)
+ if (x < 1)
+ fun_l22_n529(x)
+ else
+ fun_l22_n972(x)
+ end
+end
+
+def fun_l21_n488(x)
+ if (x < 1)
+ fun_l22_n390(x)
+ else
+ fun_l22_n220(x)
+ end
+end
+
+def fun_l21_n489(x)
+ if (x < 1)
+ fun_l22_n909(x)
+ else
+ fun_l22_n777(x)
+ end
+end
+
+def fun_l21_n490(x)
+ if (x < 1)
+ fun_l22_n797(x)
+ else
+ fun_l22_n643(x)
+ end
+end
+
+def fun_l21_n491(x)
+ if (x < 1)
+ fun_l22_n920(x)
+ else
+ fun_l22_n820(x)
+ end
+end
+
+def fun_l21_n492(x)
+ if (x < 1)
+ fun_l22_n170(x)
+ else
+ fun_l22_n236(x)
+ end
+end
+
+def fun_l21_n493(x)
+ if (x < 1)
+ fun_l22_n352(x)
+ else
+ fun_l22_n147(x)
+ end
+end
+
+def fun_l21_n494(x)
+ if (x < 1)
+ fun_l22_n938(x)
+ else
+ fun_l22_n83(x)
+ end
+end
+
+def fun_l21_n495(x)
+ if (x < 1)
+ fun_l22_n512(x)
+ else
+ fun_l22_n798(x)
+ end
+end
+
+def fun_l21_n496(x)
+ if (x < 1)
+ fun_l22_n254(x)
+ else
+ fun_l22_n827(x)
+ end
+end
+
+def fun_l21_n497(x)
+ if (x < 1)
+ fun_l22_n730(x)
+ else
+ fun_l22_n995(x)
+ end
+end
+
+def fun_l21_n498(x)
+ if (x < 1)
+ fun_l22_n130(x)
+ else
+ fun_l22_n269(x)
+ end
+end
+
+def fun_l21_n499(x)
+ if (x < 1)
+ fun_l22_n275(x)
+ else
+ fun_l22_n176(x)
+ end
+end
+
+def fun_l21_n500(x)
+ if (x < 1)
+ fun_l22_n493(x)
+ else
+ fun_l22_n322(x)
+ end
+end
+
+def fun_l21_n501(x)
+ if (x < 1)
+ fun_l22_n421(x)
+ else
+ fun_l22_n859(x)
+ end
+end
+
+def fun_l21_n502(x)
+ if (x < 1)
+ fun_l22_n611(x)
+ else
+ fun_l22_n727(x)
+ end
+end
+
+def fun_l21_n503(x)
+ if (x < 1)
+ fun_l22_n42(x)
+ else
+ fun_l22_n294(x)
+ end
+end
+
+def fun_l21_n504(x)
+ if (x < 1)
+ fun_l22_n735(x)
+ else
+ fun_l22_n145(x)
+ end
+end
+
+def fun_l21_n505(x)
+ if (x < 1)
+ fun_l22_n865(x)
+ else
+ fun_l22_n225(x)
+ end
+end
+
+def fun_l21_n506(x)
+ if (x < 1)
+ fun_l22_n922(x)
+ else
+ fun_l22_n619(x)
+ end
+end
+
+def fun_l21_n507(x)
+ if (x < 1)
+ fun_l22_n646(x)
+ else
+ fun_l22_n145(x)
+ end
+end
+
+def fun_l21_n508(x)
+ if (x < 1)
+ fun_l22_n608(x)
+ else
+ fun_l22_n320(x)
+ end
+end
+
+def fun_l21_n509(x)
+ if (x < 1)
+ fun_l22_n624(x)
+ else
+ fun_l22_n984(x)
+ end
+end
+
+def fun_l21_n510(x)
+ if (x < 1)
+ fun_l22_n454(x)
+ else
+ fun_l22_n988(x)
+ end
+end
+
+def fun_l21_n511(x)
+ if (x < 1)
+ fun_l22_n593(x)
+ else
+ fun_l22_n796(x)
+ end
+end
+
+def fun_l21_n512(x)
+ if (x < 1)
+ fun_l22_n922(x)
+ else
+ fun_l22_n5(x)
+ end
+end
+
+def fun_l21_n513(x)
+ if (x < 1)
+ fun_l22_n0(x)
+ else
+ fun_l22_n338(x)
+ end
+end
+
+def fun_l21_n514(x)
+ if (x < 1)
+ fun_l22_n454(x)
+ else
+ fun_l22_n743(x)
+ end
+end
+
+def fun_l21_n515(x)
+ if (x < 1)
+ fun_l22_n215(x)
+ else
+ fun_l22_n689(x)
+ end
+end
+
+def fun_l21_n516(x)
+ if (x < 1)
+ fun_l22_n148(x)
+ else
+ fun_l22_n850(x)
+ end
+end
+
+def fun_l21_n517(x)
+ if (x < 1)
+ fun_l22_n466(x)
+ else
+ fun_l22_n529(x)
+ end
+end
+
+def fun_l21_n518(x)
+ if (x < 1)
+ fun_l22_n967(x)
+ else
+ fun_l22_n790(x)
+ end
+end
+
+def fun_l21_n519(x)
+ if (x < 1)
+ fun_l22_n97(x)
+ else
+ fun_l22_n461(x)
+ end
+end
+
+def fun_l21_n520(x)
+ if (x < 1)
+ fun_l22_n106(x)
+ else
+ fun_l22_n41(x)
+ end
+end
+
+def fun_l21_n521(x)
+ if (x < 1)
+ fun_l22_n561(x)
+ else
+ fun_l22_n428(x)
+ end
+end
+
+def fun_l21_n522(x)
+ if (x < 1)
+ fun_l22_n816(x)
+ else
+ fun_l22_n42(x)
+ end
+end
+
+def fun_l21_n523(x)
+ if (x < 1)
+ fun_l22_n229(x)
+ else
+ fun_l22_n720(x)
+ end
+end
+
+def fun_l21_n524(x)
+ if (x < 1)
+ fun_l22_n341(x)
+ else
+ fun_l22_n875(x)
+ end
+end
+
+def fun_l21_n525(x)
+ if (x < 1)
+ fun_l22_n23(x)
+ else
+ fun_l22_n227(x)
+ end
+end
+
+def fun_l21_n526(x)
+ if (x < 1)
+ fun_l22_n230(x)
+ else
+ fun_l22_n655(x)
+ end
+end
+
+def fun_l21_n527(x)
+ if (x < 1)
+ fun_l22_n19(x)
+ else
+ fun_l22_n957(x)
+ end
+end
+
+def fun_l21_n528(x)
+ if (x < 1)
+ fun_l22_n680(x)
+ else
+ fun_l22_n142(x)
+ end
+end
+
+def fun_l21_n529(x)
+ if (x < 1)
+ fun_l22_n994(x)
+ else
+ fun_l22_n674(x)
+ end
+end
+
+def fun_l21_n530(x)
+ if (x < 1)
+ fun_l22_n762(x)
+ else
+ fun_l22_n10(x)
+ end
+end
+
+def fun_l21_n531(x)
+ if (x < 1)
+ fun_l22_n75(x)
+ else
+ fun_l22_n43(x)
+ end
+end
+
+def fun_l21_n532(x)
+ if (x < 1)
+ fun_l22_n481(x)
+ else
+ fun_l22_n766(x)
+ end
+end
+
+def fun_l21_n533(x)
+ if (x < 1)
+ fun_l22_n261(x)
+ else
+ fun_l22_n256(x)
+ end
+end
+
+def fun_l21_n534(x)
+ if (x < 1)
+ fun_l22_n316(x)
+ else
+ fun_l22_n547(x)
+ end
+end
+
+def fun_l21_n535(x)
+ if (x < 1)
+ fun_l22_n304(x)
+ else
+ fun_l22_n392(x)
+ end
+end
+
+def fun_l21_n536(x)
+ if (x < 1)
+ fun_l22_n83(x)
+ else
+ fun_l22_n789(x)
+ end
+end
+
+def fun_l21_n537(x)
+ if (x < 1)
+ fun_l22_n434(x)
+ else
+ fun_l22_n783(x)
+ end
+end
+
+def fun_l21_n538(x)
+ if (x < 1)
+ fun_l22_n445(x)
+ else
+ fun_l22_n960(x)
+ end
+end
+
+def fun_l21_n539(x)
+ if (x < 1)
+ fun_l22_n398(x)
+ else
+ fun_l22_n529(x)
+ end
+end
+
+def fun_l21_n540(x)
+ if (x < 1)
+ fun_l22_n413(x)
+ else
+ fun_l22_n684(x)
+ end
+end
+
+def fun_l21_n541(x)
+ if (x < 1)
+ fun_l22_n812(x)
+ else
+ fun_l22_n257(x)
+ end
+end
+
+def fun_l21_n542(x)
+ if (x < 1)
+ fun_l22_n186(x)
+ else
+ fun_l22_n35(x)
+ end
+end
+
+def fun_l21_n543(x)
+ if (x < 1)
+ fun_l22_n489(x)
+ else
+ fun_l22_n93(x)
+ end
+end
+
+def fun_l21_n544(x)
+ if (x < 1)
+ fun_l22_n105(x)
+ else
+ fun_l22_n282(x)
+ end
+end
+
+def fun_l21_n545(x)
+ if (x < 1)
+ fun_l22_n586(x)
+ else
+ fun_l22_n614(x)
+ end
+end
+
+def fun_l21_n546(x)
+ if (x < 1)
+ fun_l22_n75(x)
+ else
+ fun_l22_n589(x)
+ end
+end
+
+def fun_l21_n547(x)
+ if (x < 1)
+ fun_l22_n128(x)
+ else
+ fun_l22_n552(x)
+ end
+end
+
+def fun_l21_n548(x)
+ if (x < 1)
+ fun_l22_n961(x)
+ else
+ fun_l22_n209(x)
+ end
+end
+
+def fun_l21_n549(x)
+ if (x < 1)
+ fun_l22_n727(x)
+ else
+ fun_l22_n615(x)
+ end
+end
+
+def fun_l21_n550(x)
+ if (x < 1)
+ fun_l22_n45(x)
+ else
+ fun_l22_n161(x)
+ end
+end
+
+def fun_l21_n551(x)
+ if (x < 1)
+ fun_l22_n480(x)
+ else
+ fun_l22_n852(x)
+ end
+end
+
+def fun_l21_n552(x)
+ if (x < 1)
+ fun_l22_n383(x)
+ else
+ fun_l22_n698(x)
+ end
+end
+
+def fun_l21_n553(x)
+ if (x < 1)
+ fun_l22_n805(x)
+ else
+ fun_l22_n309(x)
+ end
+end
+
+def fun_l21_n554(x)
+ if (x < 1)
+ fun_l22_n635(x)
+ else
+ fun_l22_n821(x)
+ end
+end
+
+def fun_l21_n555(x)
+ if (x < 1)
+ fun_l22_n616(x)
+ else
+ fun_l22_n52(x)
+ end
+end
+
+def fun_l21_n556(x)
+ if (x < 1)
+ fun_l22_n283(x)
+ else
+ fun_l22_n514(x)
+ end
+end
+
+def fun_l21_n557(x)
+ if (x < 1)
+ fun_l22_n6(x)
+ else
+ fun_l22_n174(x)
+ end
+end
+
+def fun_l21_n558(x)
+ if (x < 1)
+ fun_l22_n344(x)
+ else
+ fun_l22_n932(x)
+ end
+end
+
+def fun_l21_n559(x)
+ if (x < 1)
+ fun_l22_n287(x)
+ else
+ fun_l22_n98(x)
+ end
+end
+
+def fun_l21_n560(x)
+ if (x < 1)
+ fun_l22_n510(x)
+ else
+ fun_l22_n672(x)
+ end
+end
+
+def fun_l21_n561(x)
+ if (x < 1)
+ fun_l22_n951(x)
+ else
+ fun_l22_n984(x)
+ end
+end
+
+def fun_l21_n562(x)
+ if (x < 1)
+ fun_l22_n133(x)
+ else
+ fun_l22_n207(x)
+ end
+end
+
+def fun_l21_n563(x)
+ if (x < 1)
+ fun_l22_n780(x)
+ else
+ fun_l22_n402(x)
+ end
+end
+
+def fun_l21_n564(x)
+ if (x < 1)
+ fun_l22_n783(x)
+ else
+ fun_l22_n189(x)
+ end
+end
+
+def fun_l21_n565(x)
+ if (x < 1)
+ fun_l22_n736(x)
+ else
+ fun_l22_n590(x)
+ end
+end
+
+def fun_l21_n566(x)
+ if (x < 1)
+ fun_l22_n724(x)
+ else
+ fun_l22_n69(x)
+ end
+end
+
+def fun_l21_n567(x)
+ if (x < 1)
+ fun_l22_n521(x)
+ else
+ fun_l22_n242(x)
+ end
+end
+
+def fun_l21_n568(x)
+ if (x < 1)
+ fun_l22_n440(x)
+ else
+ fun_l22_n156(x)
+ end
+end
+
+def fun_l21_n569(x)
+ if (x < 1)
+ fun_l22_n776(x)
+ else
+ fun_l22_n456(x)
+ end
+end
+
+def fun_l21_n570(x)
+ if (x < 1)
+ fun_l22_n336(x)
+ else
+ fun_l22_n615(x)
+ end
+end
+
+def fun_l21_n571(x)
+ if (x < 1)
+ fun_l22_n775(x)
+ else
+ fun_l22_n585(x)
+ end
+end
+
+def fun_l21_n572(x)
+ if (x < 1)
+ fun_l22_n466(x)
+ else
+ fun_l22_n559(x)
+ end
+end
+
+def fun_l21_n573(x)
+ if (x < 1)
+ fun_l22_n609(x)
+ else
+ fun_l22_n177(x)
+ end
+end
+
+def fun_l21_n574(x)
+ if (x < 1)
+ fun_l22_n310(x)
+ else
+ fun_l22_n190(x)
+ end
+end
+
+def fun_l21_n575(x)
+ if (x < 1)
+ fun_l22_n861(x)
+ else
+ fun_l22_n289(x)
+ end
+end
+
+def fun_l21_n576(x)
+ if (x < 1)
+ fun_l22_n978(x)
+ else
+ fun_l22_n460(x)
+ end
+end
+
+def fun_l21_n577(x)
+ if (x < 1)
+ fun_l22_n440(x)
+ else
+ fun_l22_n816(x)
+ end
+end
+
+def fun_l21_n578(x)
+ if (x < 1)
+ fun_l22_n522(x)
+ else
+ fun_l22_n214(x)
+ end
+end
+
+def fun_l21_n579(x)
+ if (x < 1)
+ fun_l22_n38(x)
+ else
+ fun_l22_n166(x)
+ end
+end
+
+def fun_l21_n580(x)
+ if (x < 1)
+ fun_l22_n114(x)
+ else
+ fun_l22_n314(x)
+ end
+end
+
+def fun_l21_n581(x)
+ if (x < 1)
+ fun_l22_n233(x)
+ else
+ fun_l22_n840(x)
+ end
+end
+
+def fun_l21_n582(x)
+ if (x < 1)
+ fun_l22_n867(x)
+ else
+ fun_l22_n213(x)
+ end
+end
+
+def fun_l21_n583(x)
+ if (x < 1)
+ fun_l22_n742(x)
+ else
+ fun_l22_n798(x)
+ end
+end
+
+def fun_l21_n584(x)
+ if (x < 1)
+ fun_l22_n772(x)
+ else
+ fun_l22_n400(x)
+ end
+end
+
+def fun_l21_n585(x)
+ if (x < 1)
+ fun_l22_n564(x)
+ else
+ fun_l22_n70(x)
+ end
+end
+
+def fun_l21_n586(x)
+ if (x < 1)
+ fun_l22_n836(x)
+ else
+ fun_l22_n188(x)
+ end
+end
+
+def fun_l21_n587(x)
+ if (x < 1)
+ fun_l22_n624(x)
+ else
+ fun_l22_n923(x)
+ end
+end
+
+def fun_l21_n588(x)
+ if (x < 1)
+ fun_l22_n265(x)
+ else
+ fun_l22_n733(x)
+ end
+end
+
+def fun_l21_n589(x)
+ if (x < 1)
+ fun_l22_n545(x)
+ else
+ fun_l22_n399(x)
+ end
+end
+
+def fun_l21_n590(x)
+ if (x < 1)
+ fun_l22_n22(x)
+ else
+ fun_l22_n266(x)
+ end
+end
+
+def fun_l21_n591(x)
+ if (x < 1)
+ fun_l22_n504(x)
+ else
+ fun_l22_n798(x)
+ end
+end
+
+def fun_l21_n592(x)
+ if (x < 1)
+ fun_l22_n979(x)
+ else
+ fun_l22_n712(x)
+ end
+end
+
+def fun_l21_n593(x)
+ if (x < 1)
+ fun_l22_n343(x)
+ else
+ fun_l22_n54(x)
+ end
+end
+
+def fun_l21_n594(x)
+ if (x < 1)
+ fun_l22_n893(x)
+ else
+ fun_l22_n465(x)
+ end
+end
+
+def fun_l21_n595(x)
+ if (x < 1)
+ fun_l22_n28(x)
+ else
+ fun_l22_n162(x)
+ end
+end
+
+def fun_l21_n596(x)
+ if (x < 1)
+ fun_l22_n609(x)
+ else
+ fun_l22_n882(x)
+ end
+end
+
+def fun_l21_n597(x)
+ if (x < 1)
+ fun_l22_n575(x)
+ else
+ fun_l22_n951(x)
+ end
+end
+
+def fun_l21_n598(x)
+ if (x < 1)
+ fun_l22_n794(x)
+ else
+ fun_l22_n767(x)
+ end
+end
+
+def fun_l21_n599(x)
+ if (x < 1)
+ fun_l22_n605(x)
+ else
+ fun_l22_n141(x)
+ end
+end
+
+def fun_l21_n600(x)
+ if (x < 1)
+ fun_l22_n54(x)
+ else
+ fun_l22_n958(x)
+ end
+end
+
+def fun_l21_n601(x)
+ if (x < 1)
+ fun_l22_n506(x)
+ else
+ fun_l22_n269(x)
+ end
+end
+
+def fun_l21_n602(x)
+ if (x < 1)
+ fun_l22_n401(x)
+ else
+ fun_l22_n104(x)
+ end
+end
+
+def fun_l21_n603(x)
+ if (x < 1)
+ fun_l22_n379(x)
+ else
+ fun_l22_n489(x)
+ end
+end
+
+def fun_l21_n604(x)
+ if (x < 1)
+ fun_l22_n673(x)
+ else
+ fun_l22_n502(x)
+ end
+end
+
+def fun_l21_n605(x)
+ if (x < 1)
+ fun_l22_n355(x)
+ else
+ fun_l22_n483(x)
+ end
+end
+
+def fun_l21_n606(x)
+ if (x < 1)
+ fun_l22_n763(x)
+ else
+ fun_l22_n160(x)
+ end
+end
+
+def fun_l21_n607(x)
+ if (x < 1)
+ fun_l22_n802(x)
+ else
+ fun_l22_n414(x)
+ end
+end
+
+def fun_l21_n608(x)
+ if (x < 1)
+ fun_l22_n401(x)
+ else
+ fun_l22_n987(x)
+ end
+end
+
+def fun_l21_n609(x)
+ if (x < 1)
+ fun_l22_n741(x)
+ else
+ fun_l22_n511(x)
+ end
+end
+
+def fun_l21_n610(x)
+ if (x < 1)
+ fun_l22_n883(x)
+ else
+ fun_l22_n73(x)
+ end
+end
+
+def fun_l21_n611(x)
+ if (x < 1)
+ fun_l22_n105(x)
+ else
+ fun_l22_n612(x)
+ end
+end
+
+def fun_l21_n612(x)
+ if (x < 1)
+ fun_l22_n911(x)
+ else
+ fun_l22_n764(x)
+ end
+end
+
+def fun_l21_n613(x)
+ if (x < 1)
+ fun_l22_n818(x)
+ else
+ fun_l22_n43(x)
+ end
+end
+
+def fun_l21_n614(x)
+ if (x < 1)
+ fun_l22_n388(x)
+ else
+ fun_l22_n99(x)
+ end
+end
+
+def fun_l21_n615(x)
+ if (x < 1)
+ fun_l22_n657(x)
+ else
+ fun_l22_n231(x)
+ end
+end
+
+def fun_l21_n616(x)
+ if (x < 1)
+ fun_l22_n937(x)
+ else
+ fun_l22_n357(x)
+ end
+end
+
+def fun_l21_n617(x)
+ if (x < 1)
+ fun_l22_n691(x)
+ else
+ fun_l22_n952(x)
+ end
+end
+
+def fun_l21_n618(x)
+ if (x < 1)
+ fun_l22_n712(x)
+ else
+ fun_l22_n84(x)
+ end
+end
+
+def fun_l21_n619(x)
+ if (x < 1)
+ fun_l22_n483(x)
+ else
+ fun_l22_n506(x)
+ end
+end
+
+def fun_l21_n620(x)
+ if (x < 1)
+ fun_l22_n804(x)
+ else
+ fun_l22_n813(x)
+ end
+end
+
+def fun_l21_n621(x)
+ if (x < 1)
+ fun_l22_n280(x)
+ else
+ fun_l22_n626(x)
+ end
+end
+
+def fun_l21_n622(x)
+ if (x < 1)
+ fun_l22_n979(x)
+ else
+ fun_l22_n508(x)
+ end
+end
+
+def fun_l21_n623(x)
+ if (x < 1)
+ fun_l22_n482(x)
+ else
+ fun_l22_n120(x)
+ end
+end
+
+def fun_l21_n624(x)
+ if (x < 1)
+ fun_l22_n99(x)
+ else
+ fun_l22_n975(x)
+ end
+end
+
+def fun_l21_n625(x)
+ if (x < 1)
+ fun_l22_n540(x)
+ else
+ fun_l22_n68(x)
+ end
+end
+
+def fun_l21_n626(x)
+ if (x < 1)
+ fun_l22_n818(x)
+ else
+ fun_l22_n591(x)
+ end
+end
+
+def fun_l21_n627(x)
+ if (x < 1)
+ fun_l22_n37(x)
+ else
+ fun_l22_n984(x)
+ end
+end
+
+def fun_l21_n628(x)
+ if (x < 1)
+ fun_l22_n547(x)
+ else
+ fun_l22_n482(x)
+ end
+end
+
+def fun_l21_n629(x)
+ if (x < 1)
+ fun_l22_n851(x)
+ else
+ fun_l22_n335(x)
+ end
+end
+
+def fun_l21_n630(x)
+ if (x < 1)
+ fun_l22_n474(x)
+ else
+ fun_l22_n402(x)
+ end
+end
+
+def fun_l21_n631(x)
+ if (x < 1)
+ fun_l22_n433(x)
+ else
+ fun_l22_n298(x)
+ end
+end
+
+def fun_l21_n632(x)
+ if (x < 1)
+ fun_l22_n376(x)
+ else
+ fun_l22_n898(x)
+ end
+end
+
+def fun_l21_n633(x)
+ if (x < 1)
+ fun_l22_n456(x)
+ else
+ fun_l22_n753(x)
+ end
+end
+
+def fun_l21_n634(x)
+ if (x < 1)
+ fun_l22_n888(x)
+ else
+ fun_l22_n394(x)
+ end
+end
+
+def fun_l21_n635(x)
+ if (x < 1)
+ fun_l22_n555(x)
+ else
+ fun_l22_n69(x)
+ end
+end
+
+def fun_l21_n636(x)
+ if (x < 1)
+ fun_l22_n572(x)
+ else
+ fun_l22_n822(x)
+ end
+end
+
+def fun_l21_n637(x)
+ if (x < 1)
+ fun_l22_n645(x)
+ else
+ fun_l22_n968(x)
+ end
+end
+
+def fun_l21_n638(x)
+ if (x < 1)
+ fun_l22_n406(x)
+ else
+ fun_l22_n318(x)
+ end
+end
+
+def fun_l21_n639(x)
+ if (x < 1)
+ fun_l22_n554(x)
+ else
+ fun_l22_n591(x)
+ end
+end
+
+def fun_l21_n640(x)
+ if (x < 1)
+ fun_l22_n478(x)
+ else
+ fun_l22_n962(x)
+ end
+end
+
+def fun_l21_n641(x)
+ if (x < 1)
+ fun_l22_n688(x)
+ else
+ fun_l22_n305(x)
+ end
+end
+
+def fun_l21_n642(x)
+ if (x < 1)
+ fun_l22_n767(x)
+ else
+ fun_l22_n156(x)
+ end
+end
+
+def fun_l21_n643(x)
+ if (x < 1)
+ fun_l22_n264(x)
+ else
+ fun_l22_n489(x)
+ end
+end
+
+def fun_l21_n644(x)
+ if (x < 1)
+ fun_l22_n678(x)
+ else
+ fun_l22_n196(x)
+ end
+end
+
+def fun_l21_n645(x)
+ if (x < 1)
+ fun_l22_n849(x)
+ else
+ fun_l22_n488(x)
+ end
+end
+
+def fun_l21_n646(x)
+ if (x < 1)
+ fun_l22_n837(x)
+ else
+ fun_l22_n274(x)
+ end
+end
+
+def fun_l21_n647(x)
+ if (x < 1)
+ fun_l22_n58(x)
+ else
+ fun_l22_n694(x)
+ end
+end
+
+def fun_l21_n648(x)
+ if (x < 1)
+ fun_l22_n878(x)
+ else
+ fun_l22_n356(x)
+ end
+end
+
+def fun_l21_n649(x)
+ if (x < 1)
+ fun_l22_n945(x)
+ else
+ fun_l22_n28(x)
+ end
+end
+
+def fun_l21_n650(x)
+ if (x < 1)
+ fun_l22_n10(x)
+ else
+ fun_l22_n330(x)
+ end
+end
+
+def fun_l21_n651(x)
+ if (x < 1)
+ fun_l22_n461(x)
+ else
+ fun_l22_n872(x)
+ end
+end
+
+def fun_l21_n652(x)
+ if (x < 1)
+ fun_l22_n860(x)
+ else
+ fun_l22_n358(x)
+ end
+end
+
+def fun_l21_n653(x)
+ if (x < 1)
+ fun_l22_n11(x)
+ else
+ fun_l22_n596(x)
+ end
+end
+
+def fun_l21_n654(x)
+ if (x < 1)
+ fun_l22_n340(x)
+ else
+ fun_l22_n335(x)
+ end
+end
+
+def fun_l21_n655(x)
+ if (x < 1)
+ fun_l22_n259(x)
+ else
+ fun_l22_n642(x)
+ end
+end
+
+def fun_l21_n656(x)
+ if (x < 1)
+ fun_l22_n78(x)
+ else
+ fun_l22_n442(x)
+ end
+end
+
+def fun_l21_n657(x)
+ if (x < 1)
+ fun_l22_n151(x)
+ else
+ fun_l22_n122(x)
+ end
+end
+
+def fun_l21_n658(x)
+ if (x < 1)
+ fun_l22_n440(x)
+ else
+ fun_l22_n940(x)
+ end
+end
+
+def fun_l21_n659(x)
+ if (x < 1)
+ fun_l22_n237(x)
+ else
+ fun_l22_n899(x)
+ end
+end
+
+def fun_l21_n660(x)
+ if (x < 1)
+ fun_l22_n906(x)
+ else
+ fun_l22_n789(x)
+ end
+end
+
+def fun_l21_n661(x)
+ if (x < 1)
+ fun_l22_n812(x)
+ else
+ fun_l22_n492(x)
+ end
+end
+
+def fun_l21_n662(x)
+ if (x < 1)
+ fun_l22_n241(x)
+ else
+ fun_l22_n732(x)
+ end
+end
+
+def fun_l21_n663(x)
+ if (x < 1)
+ fun_l22_n557(x)
+ else
+ fun_l22_n570(x)
+ end
+end
+
+def fun_l21_n664(x)
+ if (x < 1)
+ fun_l22_n928(x)
+ else
+ fun_l22_n943(x)
+ end
+end
+
+def fun_l21_n665(x)
+ if (x < 1)
+ fun_l22_n400(x)
+ else
+ fun_l22_n914(x)
+ end
+end
+
+def fun_l21_n666(x)
+ if (x < 1)
+ fun_l22_n368(x)
+ else
+ fun_l22_n434(x)
+ end
+end
+
+def fun_l21_n667(x)
+ if (x < 1)
+ fun_l22_n827(x)
+ else
+ fun_l22_n213(x)
+ end
+end
+
+def fun_l21_n668(x)
+ if (x < 1)
+ fun_l22_n729(x)
+ else
+ fun_l22_n273(x)
+ end
+end
+
+def fun_l21_n669(x)
+ if (x < 1)
+ fun_l22_n649(x)
+ else
+ fun_l22_n29(x)
+ end
+end
+
+def fun_l21_n670(x)
+ if (x < 1)
+ fun_l22_n878(x)
+ else
+ fun_l22_n794(x)
+ end
+end
+
+def fun_l21_n671(x)
+ if (x < 1)
+ fun_l22_n474(x)
+ else
+ fun_l22_n960(x)
+ end
+end
+
+def fun_l21_n672(x)
+ if (x < 1)
+ fun_l22_n250(x)
+ else
+ fun_l22_n935(x)
+ end
+end
+
+def fun_l21_n673(x)
+ if (x < 1)
+ fun_l22_n766(x)
+ else
+ fun_l22_n325(x)
+ end
+end
+
+def fun_l21_n674(x)
+ if (x < 1)
+ fun_l22_n64(x)
+ else
+ fun_l22_n334(x)
+ end
+end
+
+def fun_l21_n675(x)
+ if (x < 1)
+ fun_l22_n737(x)
+ else
+ fun_l22_n983(x)
+ end
+end
+
+def fun_l21_n676(x)
+ if (x < 1)
+ fun_l22_n506(x)
+ else
+ fun_l22_n393(x)
+ end
+end
+
+def fun_l21_n677(x)
+ if (x < 1)
+ fun_l22_n348(x)
+ else
+ fun_l22_n558(x)
+ end
+end
+
+def fun_l21_n678(x)
+ if (x < 1)
+ fun_l22_n68(x)
+ else
+ fun_l22_n483(x)
+ end
+end
+
+def fun_l21_n679(x)
+ if (x < 1)
+ fun_l22_n816(x)
+ else
+ fun_l22_n959(x)
+ end
+end
+
+def fun_l21_n680(x)
+ if (x < 1)
+ fun_l22_n128(x)
+ else
+ fun_l22_n393(x)
+ end
+end
+
+def fun_l21_n681(x)
+ if (x < 1)
+ fun_l22_n738(x)
+ else
+ fun_l22_n609(x)
+ end
+end
+
+def fun_l21_n682(x)
+ if (x < 1)
+ fun_l22_n113(x)
+ else
+ fun_l22_n664(x)
+ end
+end
+
+def fun_l21_n683(x)
+ if (x < 1)
+ fun_l22_n904(x)
+ else
+ fun_l22_n699(x)
+ end
+end
+
+def fun_l21_n684(x)
+ if (x < 1)
+ fun_l22_n759(x)
+ else
+ fun_l22_n277(x)
+ end
+end
+
+def fun_l21_n685(x)
+ if (x < 1)
+ fun_l22_n359(x)
+ else
+ fun_l22_n961(x)
+ end
+end
+
+def fun_l21_n686(x)
+ if (x < 1)
+ fun_l22_n269(x)
+ else
+ fun_l22_n66(x)
+ end
+end
+
+def fun_l21_n687(x)
+ if (x < 1)
+ fun_l22_n510(x)
+ else
+ fun_l22_n935(x)
+ end
+end
+
+def fun_l21_n688(x)
+ if (x < 1)
+ fun_l22_n127(x)
+ else
+ fun_l22_n441(x)
+ end
+end
+
+def fun_l21_n689(x)
+ if (x < 1)
+ fun_l22_n515(x)
+ else
+ fun_l22_n184(x)
+ end
+end
+
+def fun_l21_n690(x)
+ if (x < 1)
+ fun_l22_n339(x)
+ else
+ fun_l22_n121(x)
+ end
+end
+
+def fun_l21_n691(x)
+ if (x < 1)
+ fun_l22_n74(x)
+ else
+ fun_l22_n172(x)
+ end
+end
+
+def fun_l21_n692(x)
+ if (x < 1)
+ fun_l22_n156(x)
+ else
+ fun_l22_n829(x)
+ end
+end
+
+def fun_l21_n693(x)
+ if (x < 1)
+ fun_l22_n761(x)
+ else
+ fun_l22_n322(x)
+ end
+end
+
+def fun_l21_n694(x)
+ if (x < 1)
+ fun_l22_n168(x)
+ else
+ fun_l22_n789(x)
+ end
+end
+
+def fun_l21_n695(x)
+ if (x < 1)
+ fun_l22_n896(x)
+ else
+ fun_l22_n275(x)
+ end
+end
+
+def fun_l21_n696(x)
+ if (x < 1)
+ fun_l22_n283(x)
+ else
+ fun_l22_n195(x)
+ end
+end
+
+def fun_l21_n697(x)
+ if (x < 1)
+ fun_l22_n353(x)
+ else
+ fun_l22_n664(x)
+ end
+end
+
+def fun_l21_n698(x)
+ if (x < 1)
+ fun_l22_n801(x)
+ else
+ fun_l22_n544(x)
+ end
+end
+
+def fun_l21_n699(x)
+ if (x < 1)
+ fun_l22_n729(x)
+ else
+ fun_l22_n323(x)
+ end
+end
+
+def fun_l21_n700(x)
+ if (x < 1)
+ fun_l22_n47(x)
+ else
+ fun_l22_n340(x)
+ end
+end
+
+def fun_l21_n701(x)
+ if (x < 1)
+ fun_l22_n132(x)
+ else
+ fun_l22_n968(x)
+ end
+end
+
+def fun_l21_n702(x)
+ if (x < 1)
+ fun_l22_n556(x)
+ else
+ fun_l22_n23(x)
+ end
+end
+
+def fun_l21_n703(x)
+ if (x < 1)
+ fun_l22_n274(x)
+ else
+ fun_l22_n276(x)
+ end
+end
+
+def fun_l21_n704(x)
+ if (x < 1)
+ fun_l22_n152(x)
+ else
+ fun_l22_n244(x)
+ end
+end
+
+def fun_l21_n705(x)
+ if (x < 1)
+ fun_l22_n508(x)
+ else
+ fun_l22_n350(x)
+ end
+end
+
+def fun_l21_n706(x)
+ if (x < 1)
+ fun_l22_n188(x)
+ else
+ fun_l22_n60(x)
+ end
+end
+
+def fun_l21_n707(x)
+ if (x < 1)
+ fun_l22_n970(x)
+ else
+ fun_l22_n55(x)
+ end
+end
+
+def fun_l21_n708(x)
+ if (x < 1)
+ fun_l22_n840(x)
+ else
+ fun_l22_n990(x)
+ end
+end
+
+def fun_l21_n709(x)
+ if (x < 1)
+ fun_l22_n466(x)
+ else
+ fun_l22_n25(x)
+ end
+end
+
+def fun_l21_n710(x)
+ if (x < 1)
+ fun_l22_n741(x)
+ else
+ fun_l22_n481(x)
+ end
+end
+
+def fun_l21_n711(x)
+ if (x < 1)
+ fun_l22_n859(x)
+ else
+ fun_l22_n58(x)
+ end
+end
+
+def fun_l21_n712(x)
+ if (x < 1)
+ fun_l22_n282(x)
+ else
+ fun_l22_n807(x)
+ end
+end
+
+def fun_l21_n713(x)
+ if (x < 1)
+ fun_l22_n387(x)
+ else
+ fun_l22_n235(x)
+ end
+end
+
+def fun_l21_n714(x)
+ if (x < 1)
+ fun_l22_n558(x)
+ else
+ fun_l22_n494(x)
+ end
+end
+
+def fun_l21_n715(x)
+ if (x < 1)
+ fun_l22_n613(x)
+ else
+ fun_l22_n194(x)
+ end
+end
+
+def fun_l21_n716(x)
+ if (x < 1)
+ fun_l22_n120(x)
+ else
+ fun_l22_n154(x)
+ end
+end
+
+def fun_l21_n717(x)
+ if (x < 1)
+ fun_l22_n501(x)
+ else
+ fun_l22_n540(x)
+ end
+end
+
+def fun_l21_n718(x)
+ if (x < 1)
+ fun_l22_n283(x)
+ else
+ fun_l22_n102(x)
+ end
+end
+
+def fun_l21_n719(x)
+ if (x < 1)
+ fun_l22_n569(x)
+ else
+ fun_l22_n407(x)
+ end
+end
+
+def fun_l21_n720(x)
+ if (x < 1)
+ fun_l22_n86(x)
+ else
+ fun_l22_n99(x)
+ end
+end
+
+def fun_l21_n721(x)
+ if (x < 1)
+ fun_l22_n872(x)
+ else
+ fun_l22_n331(x)
+ end
+end
+
+def fun_l21_n722(x)
+ if (x < 1)
+ fun_l22_n772(x)
+ else
+ fun_l22_n57(x)
+ end
+end
+
+def fun_l21_n723(x)
+ if (x < 1)
+ fun_l22_n396(x)
+ else
+ fun_l22_n534(x)
+ end
+end
+
+def fun_l21_n724(x)
+ if (x < 1)
+ fun_l22_n928(x)
+ else
+ fun_l22_n576(x)
+ end
+end
+
+def fun_l21_n725(x)
+ if (x < 1)
+ fun_l22_n650(x)
+ else
+ fun_l22_n790(x)
+ end
+end
+
+def fun_l21_n726(x)
+ if (x < 1)
+ fun_l22_n173(x)
+ else
+ fun_l22_n480(x)
+ end
+end
+
+def fun_l21_n727(x)
+ if (x < 1)
+ fun_l22_n222(x)
+ else
+ fun_l22_n258(x)
+ end
+end
+
+def fun_l21_n728(x)
+ if (x < 1)
+ fun_l22_n797(x)
+ else
+ fun_l22_n793(x)
+ end
+end
+
+def fun_l21_n729(x)
+ if (x < 1)
+ fun_l22_n260(x)
+ else
+ fun_l22_n737(x)
+ end
+end
+
+def fun_l21_n730(x)
+ if (x < 1)
+ fun_l22_n419(x)
+ else
+ fun_l22_n974(x)
+ end
+end
+
+def fun_l21_n731(x)
+ if (x < 1)
+ fun_l22_n837(x)
+ else
+ fun_l22_n628(x)
+ end
+end
+
+def fun_l21_n732(x)
+ if (x < 1)
+ fun_l22_n753(x)
+ else
+ fun_l22_n380(x)
+ end
+end
+
+def fun_l21_n733(x)
+ if (x < 1)
+ fun_l22_n420(x)
+ else
+ fun_l22_n890(x)
+ end
+end
+
+def fun_l21_n734(x)
+ if (x < 1)
+ fun_l22_n993(x)
+ else
+ fun_l22_n172(x)
+ end
+end
+
+def fun_l21_n735(x)
+ if (x < 1)
+ fun_l22_n123(x)
+ else
+ fun_l22_n290(x)
+ end
+end
+
+def fun_l21_n736(x)
+ if (x < 1)
+ fun_l22_n805(x)
+ else
+ fun_l22_n923(x)
+ end
+end
+
+def fun_l21_n737(x)
+ if (x < 1)
+ fun_l22_n124(x)
+ else
+ fun_l22_n25(x)
+ end
+end
+
+def fun_l21_n738(x)
+ if (x < 1)
+ fun_l22_n192(x)
+ else
+ fun_l22_n258(x)
+ end
+end
+
+def fun_l21_n739(x)
+ if (x < 1)
+ fun_l22_n243(x)
+ else
+ fun_l22_n512(x)
+ end
+end
+
+def fun_l21_n740(x)
+ if (x < 1)
+ fun_l22_n577(x)
+ else
+ fun_l22_n307(x)
+ end
+end
+
+def fun_l21_n741(x)
+ if (x < 1)
+ fun_l22_n422(x)
+ else
+ fun_l22_n51(x)
+ end
+end
+
+def fun_l21_n742(x)
+ if (x < 1)
+ fun_l22_n247(x)
+ else
+ fun_l22_n453(x)
+ end
+end
+
+def fun_l21_n743(x)
+ if (x < 1)
+ fun_l22_n369(x)
+ else
+ fun_l22_n564(x)
+ end
+end
+
+def fun_l21_n744(x)
+ if (x < 1)
+ fun_l22_n815(x)
+ else
+ fun_l22_n894(x)
+ end
+end
+
+def fun_l21_n745(x)
+ if (x < 1)
+ fun_l22_n526(x)
+ else
+ fun_l22_n555(x)
+ end
+end
+
+def fun_l21_n746(x)
+ if (x < 1)
+ fun_l22_n281(x)
+ else
+ fun_l22_n121(x)
+ end
+end
+
+def fun_l21_n747(x)
+ if (x < 1)
+ fun_l22_n141(x)
+ else
+ fun_l22_n335(x)
+ end
+end
+
+def fun_l21_n748(x)
+ if (x < 1)
+ fun_l22_n73(x)
+ else
+ fun_l22_n241(x)
+ end
+end
+
+def fun_l21_n749(x)
+ if (x < 1)
+ fun_l22_n201(x)
+ else
+ fun_l22_n650(x)
+ end
+end
+
+def fun_l21_n750(x)
+ if (x < 1)
+ fun_l22_n569(x)
+ else
+ fun_l22_n231(x)
+ end
+end
+
+def fun_l21_n751(x)
+ if (x < 1)
+ fun_l22_n23(x)
+ else
+ fun_l22_n315(x)
+ end
+end
+
+def fun_l21_n752(x)
+ if (x < 1)
+ fun_l22_n951(x)
+ else
+ fun_l22_n697(x)
+ end
+end
+
+def fun_l21_n753(x)
+ if (x < 1)
+ fun_l22_n734(x)
+ else
+ fun_l22_n991(x)
+ end
+end
+
+def fun_l21_n754(x)
+ if (x < 1)
+ fun_l22_n557(x)
+ else
+ fun_l22_n85(x)
+ end
+end
+
+def fun_l21_n755(x)
+ if (x < 1)
+ fun_l22_n213(x)
+ else
+ fun_l22_n918(x)
+ end
+end
+
+def fun_l21_n756(x)
+ if (x < 1)
+ fun_l22_n995(x)
+ else
+ fun_l22_n134(x)
+ end
+end
+
+def fun_l21_n757(x)
+ if (x < 1)
+ fun_l22_n173(x)
+ else
+ fun_l22_n764(x)
+ end
+end
+
+def fun_l21_n758(x)
+ if (x < 1)
+ fun_l22_n503(x)
+ else
+ fun_l22_n370(x)
+ end
+end
+
+def fun_l21_n759(x)
+ if (x < 1)
+ fun_l22_n922(x)
+ else
+ fun_l22_n819(x)
+ end
+end
+
+def fun_l21_n760(x)
+ if (x < 1)
+ fun_l22_n901(x)
+ else
+ fun_l22_n252(x)
+ end
+end
+
+def fun_l21_n761(x)
+ if (x < 1)
+ fun_l22_n928(x)
+ else
+ fun_l22_n958(x)
+ end
+end
+
+def fun_l21_n762(x)
+ if (x < 1)
+ fun_l22_n402(x)
+ else
+ fun_l22_n756(x)
+ end
+end
+
+def fun_l21_n763(x)
+ if (x < 1)
+ fun_l22_n223(x)
+ else
+ fun_l22_n781(x)
+ end
+end
+
+def fun_l21_n764(x)
+ if (x < 1)
+ fun_l22_n692(x)
+ else
+ fun_l22_n893(x)
+ end
+end
+
+def fun_l21_n765(x)
+ if (x < 1)
+ fun_l22_n308(x)
+ else
+ fun_l22_n485(x)
+ end
+end
+
+def fun_l21_n766(x)
+ if (x < 1)
+ fun_l22_n858(x)
+ else
+ fun_l22_n316(x)
+ end
+end
+
+def fun_l21_n767(x)
+ if (x < 1)
+ fun_l22_n546(x)
+ else
+ fun_l22_n793(x)
+ end
+end
+
+def fun_l21_n768(x)
+ if (x < 1)
+ fun_l22_n75(x)
+ else
+ fun_l22_n999(x)
+ end
+end
+
+def fun_l21_n769(x)
+ if (x < 1)
+ fun_l22_n758(x)
+ else
+ fun_l22_n149(x)
+ end
+end
+
+def fun_l21_n770(x)
+ if (x < 1)
+ fun_l22_n801(x)
+ else
+ fun_l22_n594(x)
+ end
+end
+
+def fun_l21_n771(x)
+ if (x < 1)
+ fun_l22_n544(x)
+ else
+ fun_l22_n477(x)
+ end
+end
+
+def fun_l21_n772(x)
+ if (x < 1)
+ fun_l22_n118(x)
+ else
+ fun_l22_n406(x)
+ end
+end
+
+def fun_l21_n773(x)
+ if (x < 1)
+ fun_l22_n741(x)
+ else
+ fun_l22_n539(x)
+ end
+end
+
+def fun_l21_n774(x)
+ if (x < 1)
+ fun_l22_n99(x)
+ else
+ fun_l22_n636(x)
+ end
+end
+
+def fun_l21_n775(x)
+ if (x < 1)
+ fun_l22_n54(x)
+ else
+ fun_l22_n139(x)
+ end
+end
+
+def fun_l21_n776(x)
+ if (x < 1)
+ fun_l22_n990(x)
+ else
+ fun_l22_n518(x)
+ end
+end
+
+def fun_l21_n777(x)
+ if (x < 1)
+ fun_l22_n172(x)
+ else
+ fun_l22_n432(x)
+ end
+end
+
+def fun_l21_n778(x)
+ if (x < 1)
+ fun_l22_n302(x)
+ else
+ fun_l22_n406(x)
+ end
+end
+
+def fun_l21_n779(x)
+ if (x < 1)
+ fun_l22_n199(x)
+ else
+ fun_l22_n198(x)
+ end
+end
+
+def fun_l21_n780(x)
+ if (x < 1)
+ fun_l22_n454(x)
+ else
+ fun_l22_n547(x)
+ end
+end
+
+def fun_l21_n781(x)
+ if (x < 1)
+ fun_l22_n234(x)
+ else
+ fun_l22_n332(x)
+ end
+end
+
+def fun_l21_n782(x)
+ if (x < 1)
+ fun_l22_n693(x)
+ else
+ fun_l22_n800(x)
+ end
+end
+
+def fun_l21_n783(x)
+ if (x < 1)
+ fun_l22_n728(x)
+ else
+ fun_l22_n799(x)
+ end
+end
+
+def fun_l21_n784(x)
+ if (x < 1)
+ fun_l22_n594(x)
+ else
+ fun_l22_n350(x)
+ end
+end
+
+def fun_l21_n785(x)
+ if (x < 1)
+ fun_l22_n695(x)
+ else
+ fun_l22_n596(x)
+ end
+end
+
+def fun_l21_n786(x)
+ if (x < 1)
+ fun_l22_n141(x)
+ else
+ fun_l22_n372(x)
+ end
+end
+
+def fun_l21_n787(x)
+ if (x < 1)
+ fun_l22_n15(x)
+ else
+ fun_l22_n352(x)
+ end
+end
+
+def fun_l21_n788(x)
+ if (x < 1)
+ fun_l22_n769(x)
+ else
+ fun_l22_n62(x)
+ end
+end
+
+def fun_l21_n789(x)
+ if (x < 1)
+ fun_l22_n284(x)
+ else
+ fun_l22_n119(x)
+ end
+end
+
+def fun_l21_n790(x)
+ if (x < 1)
+ fun_l22_n335(x)
+ else
+ fun_l22_n570(x)
+ end
+end
+
+def fun_l21_n791(x)
+ if (x < 1)
+ fun_l22_n779(x)
+ else
+ fun_l22_n104(x)
+ end
+end
+
+def fun_l21_n792(x)
+ if (x < 1)
+ fun_l22_n835(x)
+ else
+ fun_l22_n612(x)
+ end
+end
+
+def fun_l21_n793(x)
+ if (x < 1)
+ fun_l22_n241(x)
+ else
+ fun_l22_n883(x)
+ end
+end
+
+def fun_l21_n794(x)
+ if (x < 1)
+ fun_l22_n957(x)
+ else
+ fun_l22_n357(x)
+ end
+end
+
+def fun_l21_n795(x)
+ if (x < 1)
+ fun_l22_n78(x)
+ else
+ fun_l22_n392(x)
+ end
+end
+
+def fun_l21_n796(x)
+ if (x < 1)
+ fun_l22_n711(x)
+ else
+ fun_l22_n364(x)
+ end
+end
+
+def fun_l21_n797(x)
+ if (x < 1)
+ fun_l22_n909(x)
+ else
+ fun_l22_n77(x)
+ end
+end
+
+def fun_l21_n798(x)
+ if (x < 1)
+ fun_l22_n901(x)
+ else
+ fun_l22_n483(x)
+ end
+end
+
+def fun_l21_n799(x)
+ if (x < 1)
+ fun_l22_n429(x)
+ else
+ fun_l22_n244(x)
+ end
+end
+
+def fun_l21_n800(x)
+ if (x < 1)
+ fun_l22_n394(x)
+ else
+ fun_l22_n652(x)
+ end
+end
+
+def fun_l21_n801(x)
+ if (x < 1)
+ fun_l22_n831(x)
+ else
+ fun_l22_n698(x)
+ end
+end
+
+def fun_l21_n802(x)
+ if (x < 1)
+ fun_l22_n623(x)
+ else
+ fun_l22_n382(x)
+ end
+end
+
+def fun_l21_n803(x)
+ if (x < 1)
+ fun_l22_n803(x)
+ else
+ fun_l22_n370(x)
+ end
+end
+
+def fun_l21_n804(x)
+ if (x < 1)
+ fun_l22_n173(x)
+ else
+ fun_l22_n697(x)
+ end
+end
+
+def fun_l21_n805(x)
+ if (x < 1)
+ fun_l22_n653(x)
+ else
+ fun_l22_n514(x)
+ end
+end
+
+def fun_l21_n806(x)
+ if (x < 1)
+ fun_l22_n703(x)
+ else
+ fun_l22_n642(x)
+ end
+end
+
+def fun_l21_n807(x)
+ if (x < 1)
+ fun_l22_n788(x)
+ else
+ fun_l22_n594(x)
+ end
+end
+
+def fun_l21_n808(x)
+ if (x < 1)
+ fun_l22_n389(x)
+ else
+ fun_l22_n3(x)
+ end
+end
+
+def fun_l21_n809(x)
+ if (x < 1)
+ fun_l22_n548(x)
+ else
+ fun_l22_n338(x)
+ end
+end
+
+def fun_l21_n810(x)
+ if (x < 1)
+ fun_l22_n157(x)
+ else
+ fun_l22_n967(x)
+ end
+end
+
+def fun_l21_n811(x)
+ if (x < 1)
+ fun_l22_n573(x)
+ else
+ fun_l22_n91(x)
+ end
+end
+
+def fun_l21_n812(x)
+ if (x < 1)
+ fun_l22_n594(x)
+ else
+ fun_l22_n240(x)
+ end
+end
+
+def fun_l21_n813(x)
+ if (x < 1)
+ fun_l22_n661(x)
+ else
+ fun_l22_n557(x)
+ end
+end
+
+def fun_l21_n814(x)
+ if (x < 1)
+ fun_l22_n29(x)
+ else
+ fun_l22_n808(x)
+ end
+end
+
+def fun_l21_n815(x)
+ if (x < 1)
+ fun_l22_n212(x)
+ else
+ fun_l22_n592(x)
+ end
+end
+
+def fun_l21_n816(x)
+ if (x < 1)
+ fun_l22_n57(x)
+ else
+ fun_l22_n248(x)
+ end
+end
+
+def fun_l21_n817(x)
+ if (x < 1)
+ fun_l22_n656(x)
+ else
+ fun_l22_n588(x)
+ end
+end
+
+def fun_l21_n818(x)
+ if (x < 1)
+ fun_l22_n949(x)
+ else
+ fun_l22_n284(x)
+ end
+end
+
+def fun_l21_n819(x)
+ if (x < 1)
+ fun_l22_n488(x)
+ else
+ fun_l22_n543(x)
+ end
+end
+
+def fun_l21_n820(x)
+ if (x < 1)
+ fun_l22_n938(x)
+ else
+ fun_l22_n155(x)
+ end
+end
+
+def fun_l21_n821(x)
+ if (x < 1)
+ fun_l22_n4(x)
+ else
+ fun_l22_n888(x)
+ end
+end
+
+def fun_l21_n822(x)
+ if (x < 1)
+ fun_l22_n460(x)
+ else
+ fun_l22_n249(x)
+ end
+end
+
+def fun_l21_n823(x)
+ if (x < 1)
+ fun_l22_n494(x)
+ else
+ fun_l22_n864(x)
+ end
+end
+
+def fun_l21_n824(x)
+ if (x < 1)
+ fun_l22_n239(x)
+ else
+ fun_l22_n305(x)
+ end
+end
+
+def fun_l21_n825(x)
+ if (x < 1)
+ fun_l22_n578(x)
+ else
+ fun_l22_n568(x)
+ end
+end
+
+def fun_l21_n826(x)
+ if (x < 1)
+ fun_l22_n669(x)
+ else
+ fun_l22_n28(x)
+ end
+end
+
+def fun_l21_n827(x)
+ if (x < 1)
+ fun_l22_n928(x)
+ else
+ fun_l22_n43(x)
+ end
+end
+
+def fun_l21_n828(x)
+ if (x < 1)
+ fun_l22_n459(x)
+ else
+ fun_l22_n450(x)
+ end
+end
+
+def fun_l21_n829(x)
+ if (x < 1)
+ fun_l22_n834(x)
+ else
+ fun_l22_n583(x)
+ end
+end
+
+def fun_l21_n830(x)
+ if (x < 1)
+ fun_l22_n655(x)
+ else
+ fun_l22_n674(x)
+ end
+end
+
+def fun_l21_n831(x)
+ if (x < 1)
+ fun_l22_n551(x)
+ else
+ fun_l22_n367(x)
+ end
+end
+
+def fun_l21_n832(x)
+ if (x < 1)
+ fun_l22_n921(x)
+ else
+ fun_l22_n750(x)
+ end
+end
+
+def fun_l21_n833(x)
+ if (x < 1)
+ fun_l22_n255(x)
+ else
+ fun_l22_n253(x)
+ end
+end
+
+def fun_l21_n834(x)
+ if (x < 1)
+ fun_l22_n873(x)
+ else
+ fun_l22_n84(x)
+ end
+end
+
+def fun_l21_n835(x)
+ if (x < 1)
+ fun_l22_n362(x)
+ else
+ fun_l22_n976(x)
+ end
+end
+
+def fun_l21_n836(x)
+ if (x < 1)
+ fun_l22_n677(x)
+ else
+ fun_l22_n429(x)
+ end
+end
+
+def fun_l21_n837(x)
+ if (x < 1)
+ fun_l22_n78(x)
+ else
+ fun_l22_n782(x)
+ end
+end
+
+def fun_l21_n838(x)
+ if (x < 1)
+ fun_l22_n339(x)
+ else
+ fun_l22_n855(x)
+ end
+end
+
+def fun_l21_n839(x)
+ if (x < 1)
+ fun_l22_n73(x)
+ else
+ fun_l22_n13(x)
+ end
+end
+
+def fun_l21_n840(x)
+ if (x < 1)
+ fun_l22_n788(x)
+ else
+ fun_l22_n701(x)
+ end
+end
+
+def fun_l21_n841(x)
+ if (x < 1)
+ fun_l22_n583(x)
+ else
+ fun_l22_n501(x)
+ end
+end
+
+def fun_l21_n842(x)
+ if (x < 1)
+ fun_l22_n532(x)
+ else
+ fun_l22_n190(x)
+ end
+end
+
+def fun_l21_n843(x)
+ if (x < 1)
+ fun_l22_n206(x)
+ else
+ fun_l22_n718(x)
+ end
+end
+
+def fun_l21_n844(x)
+ if (x < 1)
+ fun_l22_n307(x)
+ else
+ fun_l22_n200(x)
+ end
+end
+
+def fun_l21_n845(x)
+ if (x < 1)
+ fun_l22_n83(x)
+ else
+ fun_l22_n294(x)
+ end
+end
+
+def fun_l21_n846(x)
+ if (x < 1)
+ fun_l22_n157(x)
+ else
+ fun_l22_n225(x)
+ end
+end
+
+def fun_l21_n847(x)
+ if (x < 1)
+ fun_l22_n935(x)
+ else
+ fun_l22_n888(x)
+ end
+end
+
+def fun_l21_n848(x)
+ if (x < 1)
+ fun_l22_n840(x)
+ else
+ fun_l22_n606(x)
+ end
+end
+
+def fun_l21_n849(x)
+ if (x < 1)
+ fun_l22_n214(x)
+ else
+ fun_l22_n198(x)
+ end
+end
+
+def fun_l21_n850(x)
+ if (x < 1)
+ fun_l22_n793(x)
+ else
+ fun_l22_n503(x)
+ end
+end
+
+def fun_l21_n851(x)
+ if (x < 1)
+ fun_l22_n210(x)
+ else
+ fun_l22_n267(x)
+ end
+end
+
+def fun_l21_n852(x)
+ if (x < 1)
+ fun_l22_n558(x)
+ else
+ fun_l22_n226(x)
+ end
+end
+
+def fun_l21_n853(x)
+ if (x < 1)
+ fun_l22_n12(x)
+ else
+ fun_l22_n765(x)
+ end
+end
+
+def fun_l21_n854(x)
+ if (x < 1)
+ fun_l22_n136(x)
+ else
+ fun_l22_n713(x)
+ end
+end
+
+def fun_l21_n855(x)
+ if (x < 1)
+ fun_l22_n638(x)
+ else
+ fun_l22_n999(x)
+ end
+end
+
+def fun_l21_n856(x)
+ if (x < 1)
+ fun_l22_n366(x)
+ else
+ fun_l22_n505(x)
+ end
+end
+
+def fun_l21_n857(x)
+ if (x < 1)
+ fun_l22_n935(x)
+ else
+ fun_l22_n657(x)
+ end
+end
+
+def fun_l21_n858(x)
+ if (x < 1)
+ fun_l22_n4(x)
+ else
+ fun_l22_n732(x)
+ end
+end
+
+def fun_l21_n859(x)
+ if (x < 1)
+ fun_l22_n433(x)
+ else
+ fun_l22_n350(x)
+ end
+end
+
+def fun_l21_n860(x)
+ if (x < 1)
+ fun_l22_n988(x)
+ else
+ fun_l22_n855(x)
+ end
+end
+
+def fun_l21_n861(x)
+ if (x < 1)
+ fun_l22_n906(x)
+ else
+ fun_l22_n118(x)
+ end
+end
+
+def fun_l21_n862(x)
+ if (x < 1)
+ fun_l22_n127(x)
+ else
+ fun_l22_n299(x)
+ end
+end
+
+def fun_l21_n863(x)
+ if (x < 1)
+ fun_l22_n324(x)
+ else
+ fun_l22_n776(x)
+ end
+end
+
+def fun_l21_n864(x)
+ if (x < 1)
+ fun_l22_n208(x)
+ else
+ fun_l22_n827(x)
+ end
+end
+
+def fun_l21_n865(x)
+ if (x < 1)
+ fun_l22_n846(x)
+ else
+ fun_l22_n750(x)
+ end
+end
+
+def fun_l21_n866(x)
+ if (x < 1)
+ fun_l22_n275(x)
+ else
+ fun_l22_n179(x)
+ end
+end
+
+def fun_l21_n867(x)
+ if (x < 1)
+ fun_l22_n234(x)
+ else
+ fun_l22_n809(x)
+ end
+end
+
+def fun_l21_n868(x)
+ if (x < 1)
+ fun_l22_n597(x)
+ else
+ fun_l22_n563(x)
+ end
+end
+
+def fun_l21_n869(x)
+ if (x < 1)
+ fun_l22_n987(x)
+ else
+ fun_l22_n690(x)
+ end
+end
+
+def fun_l21_n870(x)
+ if (x < 1)
+ fun_l22_n176(x)
+ else
+ fun_l22_n991(x)
+ end
+end
+
+def fun_l21_n871(x)
+ if (x < 1)
+ fun_l22_n272(x)
+ else
+ fun_l22_n211(x)
+ end
+end
+
+def fun_l21_n872(x)
+ if (x < 1)
+ fun_l22_n976(x)
+ else
+ fun_l22_n940(x)
+ end
+end
+
+def fun_l21_n873(x)
+ if (x < 1)
+ fun_l22_n871(x)
+ else
+ fun_l22_n866(x)
+ end
+end
+
+def fun_l21_n874(x)
+ if (x < 1)
+ fun_l22_n727(x)
+ else
+ fun_l22_n560(x)
+ end
+end
+
+def fun_l21_n875(x)
+ if (x < 1)
+ fun_l22_n201(x)
+ else
+ fun_l22_n423(x)
+ end
+end
+
+def fun_l21_n876(x)
+ if (x < 1)
+ fun_l22_n245(x)
+ else
+ fun_l22_n33(x)
+ end
+end
+
+def fun_l21_n877(x)
+ if (x < 1)
+ fun_l22_n535(x)
+ else
+ fun_l22_n11(x)
+ end
+end
+
+def fun_l21_n878(x)
+ if (x < 1)
+ fun_l22_n11(x)
+ else
+ fun_l22_n140(x)
+ end
+end
+
+def fun_l21_n879(x)
+ if (x < 1)
+ fun_l22_n757(x)
+ else
+ fun_l22_n64(x)
+ end
+end
+
+def fun_l21_n880(x)
+ if (x < 1)
+ fun_l22_n982(x)
+ else
+ fun_l22_n774(x)
+ end
+end
+
+def fun_l21_n881(x)
+ if (x < 1)
+ fun_l22_n324(x)
+ else
+ fun_l22_n903(x)
+ end
+end
+
+def fun_l21_n882(x)
+ if (x < 1)
+ fun_l22_n257(x)
+ else
+ fun_l22_n232(x)
+ end
+end
+
+def fun_l21_n883(x)
+ if (x < 1)
+ fun_l22_n546(x)
+ else
+ fun_l22_n317(x)
+ end
+end
+
+def fun_l21_n884(x)
+ if (x < 1)
+ fun_l22_n40(x)
+ else
+ fun_l22_n393(x)
+ end
+end
+
+def fun_l21_n885(x)
+ if (x < 1)
+ fun_l22_n281(x)
+ else
+ fun_l22_n572(x)
+ end
+end
+
+def fun_l21_n886(x)
+ if (x < 1)
+ fun_l22_n41(x)
+ else
+ fun_l22_n656(x)
+ end
+end
+
+def fun_l21_n887(x)
+ if (x < 1)
+ fun_l22_n911(x)
+ else
+ fun_l22_n55(x)
+ end
+end
+
+def fun_l21_n888(x)
+ if (x < 1)
+ fun_l22_n555(x)
+ else
+ fun_l22_n60(x)
+ end
+end
+
+def fun_l21_n889(x)
+ if (x < 1)
+ fun_l22_n69(x)
+ else
+ fun_l22_n330(x)
+ end
+end
+
+def fun_l21_n890(x)
+ if (x < 1)
+ fun_l22_n332(x)
+ else
+ fun_l22_n573(x)
+ end
+end
+
+def fun_l21_n891(x)
+ if (x < 1)
+ fun_l22_n529(x)
+ else
+ fun_l22_n555(x)
+ end
+end
+
+def fun_l21_n892(x)
+ if (x < 1)
+ fun_l22_n900(x)
+ else
+ fun_l22_n137(x)
+ end
+end
+
+def fun_l21_n893(x)
+ if (x < 1)
+ fun_l22_n479(x)
+ else
+ fun_l22_n196(x)
+ end
+end
+
+def fun_l21_n894(x)
+ if (x < 1)
+ fun_l22_n418(x)
+ else
+ fun_l22_n124(x)
+ end
+end
+
+def fun_l21_n895(x)
+ if (x < 1)
+ fun_l22_n658(x)
+ else
+ fun_l22_n196(x)
+ end
+end
+
+def fun_l21_n896(x)
+ if (x < 1)
+ fun_l22_n739(x)
+ else
+ fun_l22_n454(x)
+ end
+end
+
+def fun_l21_n897(x)
+ if (x < 1)
+ fun_l22_n716(x)
+ else
+ fun_l22_n150(x)
+ end
+end
+
+def fun_l21_n898(x)
+ if (x < 1)
+ fun_l22_n356(x)
+ else
+ fun_l22_n264(x)
+ end
+end
+
+def fun_l21_n899(x)
+ if (x < 1)
+ fun_l22_n667(x)
+ else
+ fun_l22_n629(x)
+ end
+end
+
+def fun_l21_n900(x)
+ if (x < 1)
+ fun_l22_n879(x)
+ else
+ fun_l22_n237(x)
+ end
+end
+
+def fun_l21_n901(x)
+ if (x < 1)
+ fun_l22_n462(x)
+ else
+ fun_l22_n401(x)
+ end
+end
+
+def fun_l21_n902(x)
+ if (x < 1)
+ fun_l22_n902(x)
+ else
+ fun_l22_n203(x)
+ end
+end
+
+def fun_l21_n903(x)
+ if (x < 1)
+ fun_l22_n802(x)
+ else
+ fun_l22_n383(x)
+ end
+end
+
+def fun_l21_n904(x)
+ if (x < 1)
+ fun_l22_n672(x)
+ else
+ fun_l22_n808(x)
+ end
+end
+
+def fun_l21_n905(x)
+ if (x < 1)
+ fun_l22_n625(x)
+ else
+ fun_l22_n320(x)
+ end
+end
+
+def fun_l21_n906(x)
+ if (x < 1)
+ fun_l22_n963(x)
+ else
+ fun_l22_n101(x)
+ end
+end
+
+def fun_l21_n907(x)
+ if (x < 1)
+ fun_l22_n609(x)
+ else
+ fun_l22_n500(x)
+ end
+end
+
+def fun_l21_n908(x)
+ if (x < 1)
+ fun_l22_n79(x)
+ else
+ fun_l22_n774(x)
+ end
+end
+
+def fun_l21_n909(x)
+ if (x < 1)
+ fun_l22_n152(x)
+ else
+ fun_l22_n245(x)
+ end
+end
+
+def fun_l21_n910(x)
+ if (x < 1)
+ fun_l22_n981(x)
+ else
+ fun_l22_n647(x)
+ end
+end
+
+def fun_l21_n911(x)
+ if (x < 1)
+ fun_l22_n457(x)
+ else
+ fun_l22_n394(x)
+ end
+end
+
+def fun_l21_n912(x)
+ if (x < 1)
+ fun_l22_n516(x)
+ else
+ fun_l22_n411(x)
+ end
+end
+
+def fun_l21_n913(x)
+ if (x < 1)
+ fun_l22_n212(x)
+ else
+ fun_l22_n159(x)
+ end
+end
+
+def fun_l21_n914(x)
+ if (x < 1)
+ fun_l22_n756(x)
+ else
+ fun_l22_n612(x)
+ end
+end
+
+def fun_l21_n915(x)
+ if (x < 1)
+ fun_l22_n78(x)
+ else
+ fun_l22_n387(x)
+ end
+end
+
+def fun_l21_n916(x)
+ if (x < 1)
+ fun_l22_n973(x)
+ else
+ fun_l22_n854(x)
+ end
+end
+
+def fun_l21_n917(x)
+ if (x < 1)
+ fun_l22_n613(x)
+ else
+ fun_l22_n78(x)
+ end
+end
+
+def fun_l21_n918(x)
+ if (x < 1)
+ fun_l22_n199(x)
+ else
+ fun_l22_n637(x)
+ end
+end
+
+def fun_l21_n919(x)
+ if (x < 1)
+ fun_l22_n834(x)
+ else
+ fun_l22_n804(x)
+ end
+end
+
+def fun_l21_n920(x)
+ if (x < 1)
+ fun_l22_n410(x)
+ else
+ fun_l22_n728(x)
+ end
+end
+
+def fun_l21_n921(x)
+ if (x < 1)
+ fun_l22_n139(x)
+ else
+ fun_l22_n236(x)
+ end
+end
+
+def fun_l21_n922(x)
+ if (x < 1)
+ fun_l22_n443(x)
+ else
+ fun_l22_n683(x)
+ end
+end
+
+def fun_l21_n923(x)
+ if (x < 1)
+ fun_l22_n226(x)
+ else
+ fun_l22_n906(x)
+ end
+end
+
+def fun_l21_n924(x)
+ if (x < 1)
+ fun_l22_n487(x)
+ else
+ fun_l22_n551(x)
+ end
+end
+
+def fun_l21_n925(x)
+ if (x < 1)
+ fun_l22_n143(x)
+ else
+ fun_l22_n932(x)
+ end
+end
+
+def fun_l21_n926(x)
+ if (x < 1)
+ fun_l22_n533(x)
+ else
+ fun_l22_n307(x)
+ end
+end
+
+def fun_l21_n927(x)
+ if (x < 1)
+ fun_l22_n89(x)
+ else
+ fun_l22_n278(x)
+ end
+end
+
+def fun_l21_n928(x)
+ if (x < 1)
+ fun_l22_n802(x)
+ else
+ fun_l22_n18(x)
+ end
+end
+
+def fun_l21_n929(x)
+ if (x < 1)
+ fun_l22_n266(x)
+ else
+ fun_l22_n924(x)
+ end
+end
+
+def fun_l21_n930(x)
+ if (x < 1)
+ fun_l22_n607(x)
+ else
+ fun_l22_n47(x)
+ end
+end
+
+def fun_l21_n931(x)
+ if (x < 1)
+ fun_l22_n241(x)
+ else
+ fun_l22_n983(x)
+ end
+end
+
+def fun_l21_n932(x)
+ if (x < 1)
+ fun_l22_n264(x)
+ else
+ fun_l22_n88(x)
+ end
+end
+
+def fun_l21_n933(x)
+ if (x < 1)
+ fun_l22_n26(x)
+ else
+ fun_l22_n940(x)
+ end
+end
+
+def fun_l21_n934(x)
+ if (x < 1)
+ fun_l22_n688(x)
+ else
+ fun_l22_n248(x)
+ end
+end
+
+def fun_l21_n935(x)
+ if (x < 1)
+ fun_l22_n704(x)
+ else
+ fun_l22_n808(x)
+ end
+end
+
+def fun_l21_n936(x)
+ if (x < 1)
+ fun_l22_n91(x)
+ else
+ fun_l22_n650(x)
+ end
+end
+
+def fun_l21_n937(x)
+ if (x < 1)
+ fun_l22_n308(x)
+ else
+ fun_l22_n389(x)
+ end
+end
+
+def fun_l21_n938(x)
+ if (x < 1)
+ fun_l22_n63(x)
+ else
+ fun_l22_n704(x)
+ end
+end
+
+def fun_l21_n939(x)
+ if (x < 1)
+ fun_l22_n785(x)
+ else
+ fun_l22_n852(x)
+ end
+end
+
+def fun_l21_n940(x)
+ if (x < 1)
+ fun_l22_n515(x)
+ else
+ fun_l22_n148(x)
+ end
+end
+
+def fun_l21_n941(x)
+ if (x < 1)
+ fun_l22_n607(x)
+ else
+ fun_l22_n162(x)
+ end
+end
+
+def fun_l21_n942(x)
+ if (x < 1)
+ fun_l22_n34(x)
+ else
+ fun_l22_n167(x)
+ end
+end
+
+def fun_l21_n943(x)
+ if (x < 1)
+ fun_l22_n239(x)
+ else
+ fun_l22_n100(x)
+ end
+end
+
+def fun_l21_n944(x)
+ if (x < 1)
+ fun_l22_n724(x)
+ else
+ fun_l22_n702(x)
+ end
+end
+
+def fun_l21_n945(x)
+ if (x < 1)
+ fun_l22_n121(x)
+ else
+ fun_l22_n89(x)
+ end
+end
+
+def fun_l21_n946(x)
+ if (x < 1)
+ fun_l22_n699(x)
+ else
+ fun_l22_n410(x)
+ end
+end
+
+def fun_l21_n947(x)
+ if (x < 1)
+ fun_l22_n33(x)
+ else
+ fun_l22_n843(x)
+ end
+end
+
+def fun_l21_n948(x)
+ if (x < 1)
+ fun_l22_n327(x)
+ else
+ fun_l22_n702(x)
+ end
+end
+
+def fun_l21_n949(x)
+ if (x < 1)
+ fun_l22_n191(x)
+ else
+ fun_l22_n137(x)
+ end
+end
+
+def fun_l21_n950(x)
+ if (x < 1)
+ fun_l22_n834(x)
+ else
+ fun_l22_n504(x)
+ end
+end
+
+def fun_l21_n951(x)
+ if (x < 1)
+ fun_l22_n444(x)
+ else
+ fun_l22_n857(x)
+ end
+end
+
+def fun_l21_n952(x)
+ if (x < 1)
+ fun_l22_n961(x)
+ else
+ fun_l22_n817(x)
+ end
+end
+
+def fun_l21_n953(x)
+ if (x < 1)
+ fun_l22_n166(x)
+ else
+ fun_l22_n538(x)
+ end
+end
+
+def fun_l21_n954(x)
+ if (x < 1)
+ fun_l22_n934(x)
+ else
+ fun_l22_n552(x)
+ end
+end
+
+def fun_l21_n955(x)
+ if (x < 1)
+ fun_l22_n144(x)
+ else
+ fun_l22_n814(x)
+ end
+end
+
+def fun_l21_n956(x)
+ if (x < 1)
+ fun_l22_n965(x)
+ else
+ fun_l22_n929(x)
+ end
+end
+
+def fun_l21_n957(x)
+ if (x < 1)
+ fun_l22_n812(x)
+ else
+ fun_l22_n529(x)
+ end
+end
+
+def fun_l21_n958(x)
+ if (x < 1)
+ fun_l22_n625(x)
+ else
+ fun_l22_n974(x)
+ end
+end
+
+def fun_l21_n959(x)
+ if (x < 1)
+ fun_l22_n627(x)
+ else
+ fun_l22_n262(x)
+ end
+end
+
+def fun_l21_n960(x)
+ if (x < 1)
+ fun_l22_n751(x)
+ else
+ fun_l22_n858(x)
+ end
+end
+
+def fun_l21_n961(x)
+ if (x < 1)
+ fun_l22_n819(x)
+ else
+ fun_l22_n408(x)
+ end
+end
+
+def fun_l21_n962(x)
+ if (x < 1)
+ fun_l22_n635(x)
+ else
+ fun_l22_n730(x)
+ end
+end
+
+def fun_l21_n963(x)
+ if (x < 1)
+ fun_l22_n865(x)
+ else
+ fun_l22_n919(x)
+ end
+end
+
+def fun_l21_n964(x)
+ if (x < 1)
+ fun_l22_n368(x)
+ else
+ fun_l22_n912(x)
+ end
+end
+
+def fun_l21_n965(x)
+ if (x < 1)
+ fun_l22_n202(x)
+ else
+ fun_l22_n493(x)
+ end
+end
+
+def fun_l21_n966(x)
+ if (x < 1)
+ fun_l22_n191(x)
+ else
+ fun_l22_n632(x)
+ end
+end
+
+def fun_l21_n967(x)
+ if (x < 1)
+ fun_l22_n96(x)
+ else
+ fun_l22_n329(x)
+ end
+end
+
+def fun_l21_n968(x)
+ if (x < 1)
+ fun_l22_n42(x)
+ else
+ fun_l22_n196(x)
+ end
+end
+
+def fun_l21_n969(x)
+ if (x < 1)
+ fun_l22_n521(x)
+ else
+ fun_l22_n875(x)
+ end
+end
+
+def fun_l21_n970(x)
+ if (x < 1)
+ fun_l22_n202(x)
+ else
+ fun_l22_n373(x)
+ end
+end
+
+def fun_l21_n971(x)
+ if (x < 1)
+ fun_l22_n647(x)
+ else
+ fun_l22_n591(x)
+ end
+end
+
+def fun_l21_n972(x)
+ if (x < 1)
+ fun_l22_n341(x)
+ else
+ fun_l22_n935(x)
+ end
+end
+
+def fun_l21_n973(x)
+ if (x < 1)
+ fun_l22_n151(x)
+ else
+ fun_l22_n396(x)
+ end
+end
+
+def fun_l21_n974(x)
+ if (x < 1)
+ fun_l22_n65(x)
+ else
+ fun_l22_n562(x)
+ end
+end
+
+def fun_l21_n975(x)
+ if (x < 1)
+ fun_l22_n450(x)
+ else
+ fun_l22_n482(x)
+ end
+end
+
+def fun_l21_n976(x)
+ if (x < 1)
+ fun_l22_n179(x)
+ else
+ fun_l22_n838(x)
+ end
+end
+
+def fun_l21_n977(x)
+ if (x < 1)
+ fun_l22_n571(x)
+ else
+ fun_l22_n703(x)
+ end
+end
+
+def fun_l21_n978(x)
+ if (x < 1)
+ fun_l22_n540(x)
+ else
+ fun_l22_n728(x)
+ end
+end
+
+def fun_l21_n979(x)
+ if (x < 1)
+ fun_l22_n170(x)
+ else
+ fun_l22_n487(x)
+ end
+end
+
+def fun_l21_n980(x)
+ if (x < 1)
+ fun_l22_n12(x)
+ else
+ fun_l22_n165(x)
+ end
+end
+
+def fun_l21_n981(x)
+ if (x < 1)
+ fun_l22_n722(x)
+ else
+ fun_l22_n456(x)
+ end
+end
+
+def fun_l21_n982(x)
+ if (x < 1)
+ fun_l22_n313(x)
+ else
+ fun_l22_n175(x)
+ end
+end
+
+def fun_l21_n983(x)
+ if (x < 1)
+ fun_l22_n473(x)
+ else
+ fun_l22_n840(x)
+ end
+end
+
+def fun_l21_n984(x)
+ if (x < 1)
+ fun_l22_n942(x)
+ else
+ fun_l22_n804(x)
+ end
+end
+
+def fun_l21_n985(x)
+ if (x < 1)
+ fun_l22_n116(x)
+ else
+ fun_l22_n117(x)
+ end
+end
+
+def fun_l21_n986(x)
+ if (x < 1)
+ fun_l22_n610(x)
+ else
+ fun_l22_n580(x)
+ end
+end
+
+def fun_l21_n987(x)
+ if (x < 1)
+ fun_l22_n299(x)
+ else
+ fun_l22_n416(x)
+ end
+end
+
+def fun_l21_n988(x)
+ if (x < 1)
+ fun_l22_n507(x)
+ else
+ fun_l22_n995(x)
+ end
+end
+
+def fun_l21_n989(x)
+ if (x < 1)
+ fun_l22_n239(x)
+ else
+ fun_l22_n414(x)
+ end
+end
+
+def fun_l21_n990(x)
+ if (x < 1)
+ fun_l22_n488(x)
+ else
+ fun_l22_n874(x)
+ end
+end
+
+def fun_l21_n991(x)
+ if (x < 1)
+ fun_l22_n586(x)
+ else
+ fun_l22_n88(x)
+ end
+end
+
+def fun_l21_n992(x)
+ if (x < 1)
+ fun_l22_n391(x)
+ else
+ fun_l22_n254(x)
+ end
+end
+
+def fun_l21_n993(x)
+ if (x < 1)
+ fun_l22_n64(x)
+ else
+ fun_l22_n485(x)
+ end
+end
+
+def fun_l21_n994(x)
+ if (x < 1)
+ fun_l22_n507(x)
+ else
+ fun_l22_n266(x)
+ end
+end
+
+def fun_l21_n995(x)
+ if (x < 1)
+ fun_l22_n660(x)
+ else
+ fun_l22_n208(x)
+ end
+end
+
+def fun_l21_n996(x)
+ if (x < 1)
+ fun_l22_n731(x)
+ else
+ fun_l22_n882(x)
+ end
+end
+
+def fun_l21_n997(x)
+ if (x < 1)
+ fun_l22_n283(x)
+ else
+ fun_l22_n719(x)
+ end
+end
+
+def fun_l21_n998(x)
+ if (x < 1)
+ fun_l22_n794(x)
+ else
+ fun_l22_n654(x)
+ end
+end
+
+def fun_l21_n999(x)
+ if (x < 1)
+ fun_l22_n642(x)
+ else
+ fun_l22_n158(x)
+ end
+end
+
+def fun_l22_n0(x)
+ if (x < 1)
+ fun_l23_n423(x)
+ else
+ fun_l23_n28(x)
+ end
+end
+
+def fun_l22_n1(x)
+ if (x < 1)
+ fun_l23_n494(x)
+ else
+ fun_l23_n894(x)
+ end
+end
+
+def fun_l22_n2(x)
+ if (x < 1)
+ fun_l23_n735(x)
+ else
+ fun_l23_n584(x)
+ end
+end
+
+def fun_l22_n3(x)
+ if (x < 1)
+ fun_l23_n982(x)
+ else
+ fun_l23_n790(x)
+ end
+end
+
+def fun_l22_n4(x)
+ if (x < 1)
+ fun_l23_n281(x)
+ else
+ fun_l23_n256(x)
+ end
+end
+
+def fun_l22_n5(x)
+ if (x < 1)
+ fun_l23_n286(x)
+ else
+ fun_l23_n48(x)
+ end
+end
+
+def fun_l22_n6(x)
+ if (x < 1)
+ fun_l23_n982(x)
+ else
+ fun_l23_n731(x)
+ end
+end
+
+def fun_l22_n7(x)
+ if (x < 1)
+ fun_l23_n83(x)
+ else
+ fun_l23_n267(x)
+ end
+end
+
+def fun_l22_n8(x)
+ if (x < 1)
+ fun_l23_n730(x)
+ else
+ fun_l23_n47(x)
+ end
+end
+
+def fun_l22_n9(x)
+ if (x < 1)
+ fun_l23_n106(x)
+ else
+ fun_l23_n125(x)
+ end
+end
+
+def fun_l22_n10(x)
+ if (x < 1)
+ fun_l23_n392(x)
+ else
+ fun_l23_n114(x)
+ end
+end
+
+def fun_l22_n11(x)
+ if (x < 1)
+ fun_l23_n778(x)
+ else
+ fun_l23_n103(x)
+ end
+end
+
+def fun_l22_n12(x)
+ if (x < 1)
+ fun_l23_n145(x)
+ else
+ fun_l23_n449(x)
+ end
+end
+
+def fun_l22_n13(x)
+ if (x < 1)
+ fun_l23_n106(x)
+ else
+ fun_l23_n67(x)
+ end
+end
+
+def fun_l22_n14(x)
+ if (x < 1)
+ fun_l23_n721(x)
+ else
+ fun_l23_n844(x)
+ end
+end
+
+def fun_l22_n15(x)
+ if (x < 1)
+ fun_l23_n411(x)
+ else
+ fun_l23_n479(x)
+ end
+end
+
+def fun_l22_n16(x)
+ if (x < 1)
+ fun_l23_n718(x)
+ else
+ fun_l23_n203(x)
+ end
+end
+
+def fun_l22_n17(x)
+ if (x < 1)
+ fun_l23_n660(x)
+ else
+ fun_l23_n606(x)
+ end
+end
+
+def fun_l22_n18(x)
+ if (x < 1)
+ fun_l23_n225(x)
+ else
+ fun_l23_n310(x)
+ end
+end
+
+def fun_l22_n19(x)
+ if (x < 1)
+ fun_l23_n923(x)
+ else
+ fun_l23_n10(x)
+ end
+end
+
+def fun_l22_n20(x)
+ if (x < 1)
+ fun_l23_n88(x)
+ else
+ fun_l23_n488(x)
+ end
+end
+
+def fun_l22_n21(x)
+ if (x < 1)
+ fun_l23_n986(x)
+ else
+ fun_l23_n123(x)
+ end
+end
+
+def fun_l22_n22(x)
+ if (x < 1)
+ fun_l23_n91(x)
+ else
+ fun_l23_n445(x)
+ end
+end
+
+def fun_l22_n23(x)
+ if (x < 1)
+ fun_l23_n525(x)
+ else
+ fun_l23_n454(x)
+ end
+end
+
+def fun_l22_n24(x)
+ if (x < 1)
+ fun_l23_n55(x)
+ else
+ fun_l23_n540(x)
+ end
+end
+
+def fun_l22_n25(x)
+ if (x < 1)
+ fun_l23_n562(x)
+ else
+ fun_l23_n323(x)
+ end
+end
+
+def fun_l22_n26(x)
+ if (x < 1)
+ fun_l23_n796(x)
+ else
+ fun_l23_n443(x)
+ end
+end
+
+def fun_l22_n27(x)
+ if (x < 1)
+ fun_l23_n421(x)
+ else
+ fun_l23_n654(x)
+ end
+end
+
+def fun_l22_n28(x)
+ if (x < 1)
+ fun_l23_n910(x)
+ else
+ fun_l23_n421(x)
+ end
+end
+
+def fun_l22_n29(x)
+ if (x < 1)
+ fun_l23_n184(x)
+ else
+ fun_l23_n24(x)
+ end
+end
+
+def fun_l22_n30(x)
+ if (x < 1)
+ fun_l23_n803(x)
+ else
+ fun_l23_n375(x)
+ end
+end
+
+def fun_l22_n31(x)
+ if (x < 1)
+ fun_l23_n662(x)
+ else
+ fun_l23_n50(x)
+ end
+end
+
+def fun_l22_n32(x)
+ if (x < 1)
+ fun_l23_n69(x)
+ else
+ fun_l23_n198(x)
+ end
+end
+
+def fun_l22_n33(x)
+ if (x < 1)
+ fun_l23_n465(x)
+ else
+ fun_l23_n979(x)
+ end
+end
+
+def fun_l22_n34(x)
+ if (x < 1)
+ fun_l23_n743(x)
+ else
+ fun_l23_n859(x)
+ end
+end
+
+def fun_l22_n35(x)
+ if (x < 1)
+ fun_l23_n524(x)
+ else
+ fun_l23_n157(x)
+ end
+end
+
+def fun_l22_n36(x)
+ if (x < 1)
+ fun_l23_n530(x)
+ else
+ fun_l23_n938(x)
+ end
+end
+
+def fun_l22_n37(x)
+ if (x < 1)
+ fun_l23_n386(x)
+ else
+ fun_l23_n882(x)
+ end
+end
+
+def fun_l22_n38(x)
+ if (x < 1)
+ fun_l23_n373(x)
+ else
+ fun_l23_n220(x)
+ end
+end
+
+def fun_l22_n39(x)
+ if (x < 1)
+ fun_l23_n783(x)
+ else
+ fun_l23_n731(x)
+ end
+end
+
+def fun_l22_n40(x)
+ if (x < 1)
+ fun_l23_n911(x)
+ else
+ fun_l23_n373(x)
+ end
+end
+
+def fun_l22_n41(x)
+ if (x < 1)
+ fun_l23_n516(x)
+ else
+ fun_l23_n586(x)
+ end
+end
+
+def fun_l22_n42(x)
+ if (x < 1)
+ fun_l23_n40(x)
+ else
+ fun_l23_n350(x)
+ end
+end
+
+def fun_l22_n43(x)
+ if (x < 1)
+ fun_l23_n690(x)
+ else
+ fun_l23_n349(x)
+ end
+end
+
+def fun_l22_n44(x)
+ if (x < 1)
+ fun_l23_n170(x)
+ else
+ fun_l23_n758(x)
+ end
+end
+
+def fun_l22_n45(x)
+ if (x < 1)
+ fun_l23_n317(x)
+ else
+ fun_l23_n856(x)
+ end
+end
+
+def fun_l22_n46(x)
+ if (x < 1)
+ fun_l23_n692(x)
+ else
+ fun_l23_n330(x)
+ end
+end
+
+def fun_l22_n47(x)
+ if (x < 1)
+ fun_l23_n848(x)
+ else
+ fun_l23_n767(x)
+ end
+end
+
+def fun_l22_n48(x)
+ if (x < 1)
+ fun_l23_n683(x)
+ else
+ fun_l23_n225(x)
+ end
+end
+
+def fun_l22_n49(x)
+ if (x < 1)
+ fun_l23_n967(x)
+ else
+ fun_l23_n872(x)
+ end
+end
+
+def fun_l22_n50(x)
+ if (x < 1)
+ fun_l23_n584(x)
+ else
+ fun_l23_n799(x)
+ end
+end
+
+def fun_l22_n51(x)
+ if (x < 1)
+ fun_l23_n156(x)
+ else
+ fun_l23_n710(x)
+ end
+end
+
+def fun_l22_n52(x)
+ if (x < 1)
+ fun_l23_n129(x)
+ else
+ fun_l23_n733(x)
+ end
+end
+
+def fun_l22_n53(x)
+ if (x < 1)
+ fun_l23_n364(x)
+ else
+ fun_l23_n460(x)
+ end
+end
+
+def fun_l22_n54(x)
+ if (x < 1)
+ fun_l23_n284(x)
+ else
+ fun_l23_n13(x)
+ end
+end
+
+def fun_l22_n55(x)
+ if (x < 1)
+ fun_l23_n734(x)
+ else
+ fun_l23_n498(x)
+ end
+end
+
+def fun_l22_n56(x)
+ if (x < 1)
+ fun_l23_n981(x)
+ else
+ fun_l23_n602(x)
+ end
+end
+
+def fun_l22_n57(x)
+ if (x < 1)
+ fun_l23_n632(x)
+ else
+ fun_l23_n123(x)
+ end
+end
+
+def fun_l22_n58(x)
+ if (x < 1)
+ fun_l23_n602(x)
+ else
+ fun_l23_n274(x)
+ end
+end
+
+def fun_l22_n59(x)
+ if (x < 1)
+ fun_l23_n718(x)
+ else
+ fun_l23_n351(x)
+ end
+end
+
+def fun_l22_n60(x)
+ if (x < 1)
+ fun_l23_n618(x)
+ else
+ fun_l23_n583(x)
+ end
+end
+
+def fun_l22_n61(x)
+ if (x < 1)
+ fun_l23_n63(x)
+ else
+ fun_l23_n573(x)
+ end
+end
+
+def fun_l22_n62(x)
+ if (x < 1)
+ fun_l23_n73(x)
+ else
+ fun_l23_n429(x)
+ end
+end
+
+def fun_l22_n63(x)
+ if (x < 1)
+ fun_l23_n969(x)
+ else
+ fun_l23_n518(x)
+ end
+end
+
+def fun_l22_n64(x)
+ if (x < 1)
+ fun_l23_n493(x)
+ else
+ fun_l23_n868(x)
+ end
+end
+
+def fun_l22_n65(x)
+ if (x < 1)
+ fun_l23_n31(x)
+ else
+ fun_l23_n366(x)
+ end
+end
+
+def fun_l22_n66(x)
+ if (x < 1)
+ fun_l23_n442(x)
+ else
+ fun_l23_n362(x)
+ end
+end
+
+def fun_l22_n67(x)
+ if (x < 1)
+ fun_l23_n804(x)
+ else
+ fun_l23_n513(x)
+ end
+end
+
+def fun_l22_n68(x)
+ if (x < 1)
+ fun_l23_n973(x)
+ else
+ fun_l23_n723(x)
+ end
+end
+
+def fun_l22_n69(x)
+ if (x < 1)
+ fun_l23_n424(x)
+ else
+ fun_l23_n247(x)
+ end
+end
+
+def fun_l22_n70(x)
+ if (x < 1)
+ fun_l23_n992(x)
+ else
+ fun_l23_n944(x)
+ end
+end
+
+def fun_l22_n71(x)
+ if (x < 1)
+ fun_l23_n209(x)
+ else
+ fun_l23_n645(x)
+ end
+end
+
+def fun_l22_n72(x)
+ if (x < 1)
+ fun_l23_n373(x)
+ else
+ fun_l23_n540(x)
+ end
+end
+
+def fun_l22_n73(x)
+ if (x < 1)
+ fun_l23_n785(x)
+ else
+ fun_l23_n840(x)
+ end
+end
+
+def fun_l22_n74(x)
+ if (x < 1)
+ fun_l23_n607(x)
+ else
+ fun_l23_n584(x)
+ end
+end
+
+def fun_l22_n75(x)
+ if (x < 1)
+ fun_l23_n331(x)
+ else
+ fun_l23_n196(x)
+ end
+end
+
+def fun_l22_n76(x)
+ if (x < 1)
+ fun_l23_n453(x)
+ else
+ fun_l23_n991(x)
+ end
+end
+
+def fun_l22_n77(x)
+ if (x < 1)
+ fun_l23_n689(x)
+ else
+ fun_l23_n222(x)
+ end
+end
+
+def fun_l22_n78(x)
+ if (x < 1)
+ fun_l23_n446(x)
+ else
+ fun_l23_n767(x)
+ end
+end
+
+def fun_l22_n79(x)
+ if (x < 1)
+ fun_l23_n648(x)
+ else
+ fun_l23_n811(x)
+ end
+end
+
+def fun_l22_n80(x)
+ if (x < 1)
+ fun_l23_n210(x)
+ else
+ fun_l23_n52(x)
+ end
+end
+
+def fun_l22_n81(x)
+ if (x < 1)
+ fun_l23_n786(x)
+ else
+ fun_l23_n984(x)
+ end
+end
+
+def fun_l22_n82(x)
+ if (x < 1)
+ fun_l23_n693(x)
+ else
+ fun_l23_n103(x)
+ end
+end
+
+def fun_l22_n83(x)
+ if (x < 1)
+ fun_l23_n768(x)
+ else
+ fun_l23_n794(x)
+ end
+end
+
+def fun_l22_n84(x)
+ if (x < 1)
+ fun_l23_n820(x)
+ else
+ fun_l23_n774(x)
+ end
+end
+
+def fun_l22_n85(x)
+ if (x < 1)
+ fun_l23_n972(x)
+ else
+ fun_l23_n254(x)
+ end
+end
+
+def fun_l22_n86(x)
+ if (x < 1)
+ fun_l23_n609(x)
+ else
+ fun_l23_n524(x)
+ end
+end
+
+def fun_l22_n87(x)
+ if (x < 1)
+ fun_l23_n486(x)
+ else
+ fun_l23_n173(x)
+ end
+end
+
+def fun_l22_n88(x)
+ if (x < 1)
+ fun_l23_n236(x)
+ else
+ fun_l23_n359(x)
+ end
+end
+
+def fun_l22_n89(x)
+ if (x < 1)
+ fun_l23_n292(x)
+ else
+ fun_l23_n232(x)
+ end
+end
+
+def fun_l22_n90(x)
+ if (x < 1)
+ fun_l23_n104(x)
+ else
+ fun_l23_n799(x)
+ end
+end
+
+def fun_l22_n91(x)
+ if (x < 1)
+ fun_l23_n957(x)
+ else
+ fun_l23_n836(x)
+ end
+end
+
+def fun_l22_n92(x)
+ if (x < 1)
+ fun_l23_n179(x)
+ else
+ fun_l23_n416(x)
+ end
+end
+
+def fun_l22_n93(x)
+ if (x < 1)
+ fun_l23_n281(x)
+ else
+ fun_l23_n530(x)
+ end
+end
+
+def fun_l22_n94(x)
+ if (x < 1)
+ fun_l23_n627(x)
+ else
+ fun_l23_n577(x)
+ end
+end
+
+def fun_l22_n95(x)
+ if (x < 1)
+ fun_l23_n594(x)
+ else
+ fun_l23_n949(x)
+ end
+end
+
+def fun_l22_n96(x)
+ if (x < 1)
+ fun_l23_n408(x)
+ else
+ fun_l23_n547(x)
+ end
+end
+
+def fun_l22_n97(x)
+ if (x < 1)
+ fun_l23_n276(x)
+ else
+ fun_l23_n105(x)
+ end
+end
+
+def fun_l22_n98(x)
+ if (x < 1)
+ fun_l23_n181(x)
+ else
+ fun_l23_n659(x)
+ end
+end
+
+def fun_l22_n99(x)
+ if (x < 1)
+ fun_l23_n7(x)
+ else
+ fun_l23_n423(x)
+ end
+end
+
+def fun_l22_n100(x)
+ if (x < 1)
+ fun_l23_n123(x)
+ else
+ fun_l23_n244(x)
+ end
+end
+
+def fun_l22_n101(x)
+ if (x < 1)
+ fun_l23_n476(x)
+ else
+ fun_l23_n319(x)
+ end
+end
+
+def fun_l22_n102(x)
+ if (x < 1)
+ fun_l23_n443(x)
+ else
+ fun_l23_n959(x)
+ end
+end
+
+def fun_l22_n103(x)
+ if (x < 1)
+ fun_l23_n78(x)
+ else
+ fun_l23_n490(x)
+ end
+end
+
+def fun_l22_n104(x)
+ if (x < 1)
+ fun_l23_n761(x)
+ else
+ fun_l23_n23(x)
+ end
+end
+
+def fun_l22_n105(x)
+ if (x < 1)
+ fun_l23_n126(x)
+ else
+ fun_l23_n426(x)
+ end
+end
+
+def fun_l22_n106(x)
+ if (x < 1)
+ fun_l23_n740(x)
+ else
+ fun_l23_n328(x)
+ end
+end
+
+def fun_l22_n107(x)
+ if (x < 1)
+ fun_l23_n249(x)
+ else
+ fun_l23_n890(x)
+ end
+end
+
+def fun_l22_n108(x)
+ if (x < 1)
+ fun_l23_n665(x)
+ else
+ fun_l23_n60(x)
+ end
+end
+
+def fun_l22_n109(x)
+ if (x < 1)
+ fun_l23_n617(x)
+ else
+ fun_l23_n42(x)
+ end
+end
+
+def fun_l22_n110(x)
+ if (x < 1)
+ fun_l23_n484(x)
+ else
+ fun_l23_n480(x)
+ end
+end
+
+def fun_l22_n111(x)
+ if (x < 1)
+ fun_l23_n135(x)
+ else
+ fun_l23_n447(x)
+ end
+end
+
+def fun_l22_n112(x)
+ if (x < 1)
+ fun_l23_n881(x)
+ else
+ fun_l23_n410(x)
+ end
+end
+
+def fun_l22_n113(x)
+ if (x < 1)
+ fun_l23_n989(x)
+ else
+ fun_l23_n849(x)
+ end
+end
+
+def fun_l22_n114(x)
+ if (x < 1)
+ fun_l23_n660(x)
+ else
+ fun_l23_n307(x)
+ end
+end
+
+def fun_l22_n115(x)
+ if (x < 1)
+ fun_l23_n372(x)
+ else
+ fun_l23_n150(x)
+ end
+end
+
+def fun_l22_n116(x)
+ if (x < 1)
+ fun_l23_n770(x)
+ else
+ fun_l23_n109(x)
+ end
+end
+
+def fun_l22_n117(x)
+ if (x < 1)
+ fun_l23_n364(x)
+ else
+ fun_l23_n321(x)
+ end
+end
+
+def fun_l22_n118(x)
+ if (x < 1)
+ fun_l23_n363(x)
+ else
+ fun_l23_n876(x)
+ end
+end
+
+def fun_l22_n119(x)
+ if (x < 1)
+ fun_l23_n114(x)
+ else
+ fun_l23_n25(x)
+ end
+end
+
+def fun_l22_n120(x)
+ if (x < 1)
+ fun_l23_n160(x)
+ else
+ fun_l23_n744(x)
+ end
+end
+
+def fun_l22_n121(x)
+ if (x < 1)
+ fun_l23_n265(x)
+ else
+ fun_l23_n972(x)
+ end
+end
+
+def fun_l22_n122(x)
+ if (x < 1)
+ fun_l23_n259(x)
+ else
+ fun_l23_n203(x)
+ end
+end
+
+def fun_l22_n123(x)
+ if (x < 1)
+ fun_l23_n865(x)
+ else
+ fun_l23_n137(x)
+ end
+end
+
+def fun_l22_n124(x)
+ if (x < 1)
+ fun_l23_n427(x)
+ else
+ fun_l23_n437(x)
+ end
+end
+
+def fun_l22_n125(x)
+ if (x < 1)
+ fun_l23_n405(x)
+ else
+ fun_l23_n603(x)
+ end
+end
+
+def fun_l22_n126(x)
+ if (x < 1)
+ fun_l23_n938(x)
+ else
+ fun_l23_n505(x)
+ end
+end
+
+def fun_l22_n127(x)
+ if (x < 1)
+ fun_l23_n307(x)
+ else
+ fun_l23_n26(x)
+ end
+end
+
+def fun_l22_n128(x)
+ if (x < 1)
+ fun_l23_n15(x)
+ else
+ fun_l23_n406(x)
+ end
+end
+
+def fun_l22_n129(x)
+ if (x < 1)
+ fun_l23_n633(x)
+ else
+ fun_l23_n831(x)
+ end
+end
+
+def fun_l22_n130(x)
+ if (x < 1)
+ fun_l23_n805(x)
+ else
+ fun_l23_n216(x)
+ end
+end
+
+def fun_l22_n131(x)
+ if (x < 1)
+ fun_l23_n552(x)
+ else
+ fun_l23_n864(x)
+ end
+end
+
+def fun_l22_n132(x)
+ if (x < 1)
+ fun_l23_n50(x)
+ else
+ fun_l23_n805(x)
+ end
+end
+
+def fun_l22_n133(x)
+ if (x < 1)
+ fun_l23_n823(x)
+ else
+ fun_l23_n427(x)
+ end
+end
+
+def fun_l22_n134(x)
+ if (x < 1)
+ fun_l23_n964(x)
+ else
+ fun_l23_n214(x)
+ end
+end
+
+def fun_l22_n135(x)
+ if (x < 1)
+ fun_l23_n267(x)
+ else
+ fun_l23_n351(x)
+ end
+end
+
+def fun_l22_n136(x)
+ if (x < 1)
+ fun_l23_n557(x)
+ else
+ fun_l23_n257(x)
+ end
+end
+
+def fun_l22_n137(x)
+ if (x < 1)
+ fun_l23_n966(x)
+ else
+ fun_l23_n248(x)
+ end
+end
+
+def fun_l22_n138(x)
+ if (x < 1)
+ fun_l23_n569(x)
+ else
+ fun_l23_n376(x)
+ end
+end
+
+def fun_l22_n139(x)
+ if (x < 1)
+ fun_l23_n198(x)
+ else
+ fun_l23_n595(x)
+ end
+end
+
+def fun_l22_n140(x)
+ if (x < 1)
+ fun_l23_n107(x)
+ else
+ fun_l23_n134(x)
+ end
+end
+
+def fun_l22_n141(x)
+ if (x < 1)
+ fun_l23_n113(x)
+ else
+ fun_l23_n290(x)
+ end
+end
+
+def fun_l22_n142(x)
+ if (x < 1)
+ fun_l23_n721(x)
+ else
+ fun_l23_n641(x)
+ end
+end
+
+def fun_l22_n143(x)
+ if (x < 1)
+ fun_l23_n535(x)
+ else
+ fun_l23_n103(x)
+ end
+end
+
+def fun_l22_n144(x)
+ if (x < 1)
+ fun_l23_n690(x)
+ else
+ fun_l23_n125(x)
+ end
+end
+
+def fun_l22_n145(x)
+ if (x < 1)
+ fun_l23_n514(x)
+ else
+ fun_l23_n999(x)
+ end
+end
+
+def fun_l22_n146(x)
+ if (x < 1)
+ fun_l23_n503(x)
+ else
+ fun_l23_n951(x)
+ end
+end
+
+def fun_l22_n147(x)
+ if (x < 1)
+ fun_l23_n413(x)
+ else
+ fun_l23_n634(x)
+ end
+end
+
+def fun_l22_n148(x)
+ if (x < 1)
+ fun_l23_n818(x)
+ else
+ fun_l23_n286(x)
+ end
+end
+
+def fun_l22_n149(x)
+ if (x < 1)
+ fun_l23_n768(x)
+ else
+ fun_l23_n832(x)
+ end
+end
+
+def fun_l22_n150(x)
+ if (x < 1)
+ fun_l23_n128(x)
+ else
+ fun_l23_n588(x)
+ end
+end
+
+def fun_l22_n151(x)
+ if (x < 1)
+ fun_l23_n787(x)
+ else
+ fun_l23_n742(x)
+ end
+end
+
+def fun_l22_n152(x)
+ if (x < 1)
+ fun_l23_n166(x)
+ else
+ fun_l23_n856(x)
+ end
+end
+
+def fun_l22_n153(x)
+ if (x < 1)
+ fun_l23_n377(x)
+ else
+ fun_l23_n90(x)
+ end
+end
+
+def fun_l22_n154(x)
+ if (x < 1)
+ fun_l23_n851(x)
+ else
+ fun_l23_n591(x)
+ end
+end
+
+def fun_l22_n155(x)
+ if (x < 1)
+ fun_l23_n896(x)
+ else
+ fun_l23_n372(x)
+ end
+end
+
+def fun_l22_n156(x)
+ if (x < 1)
+ fun_l23_n132(x)
+ else
+ fun_l23_n144(x)
+ end
+end
+
+def fun_l22_n157(x)
+ if (x < 1)
+ fun_l23_n251(x)
+ else
+ fun_l23_n620(x)
+ end
+end
+
+def fun_l22_n158(x)
+ if (x < 1)
+ fun_l23_n612(x)
+ else
+ fun_l23_n246(x)
+ end
+end
+
+def fun_l22_n159(x)
+ if (x < 1)
+ fun_l23_n530(x)
+ else
+ fun_l23_n94(x)
+ end
+end
+
+def fun_l22_n160(x)
+ if (x < 1)
+ fun_l23_n310(x)
+ else
+ fun_l23_n706(x)
+ end
+end
+
+def fun_l22_n161(x)
+ if (x < 1)
+ fun_l23_n420(x)
+ else
+ fun_l23_n576(x)
+ end
+end
+
+def fun_l22_n162(x)
+ if (x < 1)
+ fun_l23_n544(x)
+ else
+ fun_l23_n277(x)
+ end
+end
+
+def fun_l22_n163(x)
+ if (x < 1)
+ fun_l23_n770(x)
+ else
+ fun_l23_n94(x)
+ end
+end
+
+def fun_l22_n164(x)
+ if (x < 1)
+ fun_l23_n49(x)
+ else
+ fun_l23_n576(x)
+ end
+end
+
+def fun_l22_n165(x)
+ if (x < 1)
+ fun_l23_n610(x)
+ else
+ fun_l23_n184(x)
+ end
+end
+
+def fun_l22_n166(x)
+ if (x < 1)
+ fun_l23_n974(x)
+ else
+ fun_l23_n54(x)
+ end
+end
+
+def fun_l22_n167(x)
+ if (x < 1)
+ fun_l23_n179(x)
+ else
+ fun_l23_n485(x)
+ end
+end
+
+def fun_l22_n168(x)
+ if (x < 1)
+ fun_l23_n114(x)
+ else
+ fun_l23_n766(x)
+ end
+end
+
+def fun_l22_n169(x)
+ if (x < 1)
+ fun_l23_n399(x)
+ else
+ fun_l23_n830(x)
+ end
+end
+
+def fun_l22_n170(x)
+ if (x < 1)
+ fun_l23_n332(x)
+ else
+ fun_l23_n536(x)
+ end
+end
+
+def fun_l22_n171(x)
+ if (x < 1)
+ fun_l23_n384(x)
+ else
+ fun_l23_n773(x)
+ end
+end
+
+def fun_l22_n172(x)
+ if (x < 1)
+ fun_l23_n52(x)
+ else
+ fun_l23_n7(x)
+ end
+end
+
+def fun_l22_n173(x)
+ if (x < 1)
+ fun_l23_n85(x)
+ else
+ fun_l23_n803(x)
+ end
+end
+
+def fun_l22_n174(x)
+ if (x < 1)
+ fun_l23_n853(x)
+ else
+ fun_l23_n682(x)
+ end
+end
+
+def fun_l22_n175(x)
+ if (x < 1)
+ fun_l23_n112(x)
+ else
+ fun_l23_n295(x)
+ end
+end
+
+def fun_l22_n176(x)
+ if (x < 1)
+ fun_l23_n347(x)
+ else
+ fun_l23_n908(x)
+ end
+end
+
+def fun_l22_n177(x)
+ if (x < 1)
+ fun_l23_n267(x)
+ else
+ fun_l23_n19(x)
+ end
+end
+
+def fun_l22_n178(x)
+ if (x < 1)
+ fun_l23_n8(x)
+ else
+ fun_l23_n739(x)
+ end
+end
+
+def fun_l22_n179(x)
+ if (x < 1)
+ fun_l23_n201(x)
+ else
+ fun_l23_n321(x)
+ end
+end
+
+def fun_l22_n180(x)
+ if (x < 1)
+ fun_l23_n773(x)
+ else
+ fun_l23_n224(x)
+ end
+end
+
+def fun_l22_n181(x)
+ if (x < 1)
+ fun_l23_n966(x)
+ else
+ fun_l23_n324(x)
+ end
+end
+
+def fun_l22_n182(x)
+ if (x < 1)
+ fun_l23_n389(x)
+ else
+ fun_l23_n190(x)
+ end
+end
+
+def fun_l22_n183(x)
+ if (x < 1)
+ fun_l23_n918(x)
+ else
+ fun_l23_n512(x)
+ end
+end
+
+def fun_l22_n184(x)
+ if (x < 1)
+ fun_l23_n360(x)
+ else
+ fun_l23_n702(x)
+ end
+end
+
+def fun_l22_n185(x)
+ if (x < 1)
+ fun_l23_n794(x)
+ else
+ fun_l23_n51(x)
+ end
+end
+
+def fun_l22_n186(x)
+ if (x < 1)
+ fun_l23_n982(x)
+ else
+ fun_l23_n779(x)
+ end
+end
+
+def fun_l22_n187(x)
+ if (x < 1)
+ fun_l23_n263(x)
+ else
+ fun_l23_n659(x)
+ end
+end
+
+def fun_l22_n188(x)
+ if (x < 1)
+ fun_l23_n203(x)
+ else
+ fun_l23_n705(x)
+ end
+end
+
+def fun_l22_n189(x)
+ if (x < 1)
+ fun_l23_n976(x)
+ else
+ fun_l23_n307(x)
+ end
+end
+
+def fun_l22_n190(x)
+ if (x < 1)
+ fun_l23_n281(x)
+ else
+ fun_l23_n880(x)
+ end
+end
+
+def fun_l22_n191(x)
+ if (x < 1)
+ fun_l23_n238(x)
+ else
+ fun_l23_n752(x)
+ end
+end
+
+def fun_l22_n192(x)
+ if (x < 1)
+ fun_l23_n679(x)
+ else
+ fun_l23_n935(x)
+ end
+end
+
+def fun_l22_n193(x)
+ if (x < 1)
+ fun_l23_n823(x)
+ else
+ fun_l23_n340(x)
+ end
+end
+
+def fun_l22_n194(x)
+ if (x < 1)
+ fun_l23_n687(x)
+ else
+ fun_l23_n71(x)
+ end
+end
+
+def fun_l22_n195(x)
+ if (x < 1)
+ fun_l23_n47(x)
+ else
+ fun_l23_n119(x)
+ end
+end
+
+def fun_l22_n196(x)
+ if (x < 1)
+ fun_l23_n702(x)
+ else
+ fun_l23_n213(x)
+ end
+end
+
+def fun_l22_n197(x)
+ if (x < 1)
+ fun_l23_n300(x)
+ else
+ fun_l23_n52(x)
+ end
+end
+
+def fun_l22_n198(x)
+ if (x < 1)
+ fun_l23_n85(x)
+ else
+ fun_l23_n845(x)
+ end
+end
+
+def fun_l22_n199(x)
+ if (x < 1)
+ fun_l23_n503(x)
+ else
+ fun_l23_n322(x)
+ end
+end
+
+def fun_l22_n200(x)
+ if (x < 1)
+ fun_l23_n151(x)
+ else
+ fun_l23_n743(x)
+ end
+end
+
+def fun_l22_n201(x)
+ if (x < 1)
+ fun_l23_n531(x)
+ else
+ fun_l23_n597(x)
+ end
+end
+
+def fun_l22_n202(x)
+ if (x < 1)
+ fun_l23_n120(x)
+ else
+ fun_l23_n300(x)
+ end
+end
+
+def fun_l22_n203(x)
+ if (x < 1)
+ fun_l23_n124(x)
+ else
+ fun_l23_n609(x)
+ end
+end
+
+def fun_l22_n204(x)
+ if (x < 1)
+ fun_l23_n945(x)
+ else
+ fun_l23_n498(x)
+ end
+end
+
+def fun_l22_n205(x)
+ if (x < 1)
+ fun_l23_n983(x)
+ else
+ fun_l23_n16(x)
+ end
+end
+
+def fun_l22_n206(x)
+ if (x < 1)
+ fun_l23_n271(x)
+ else
+ fun_l23_n612(x)
+ end
+end
+
+def fun_l22_n207(x)
+ if (x < 1)
+ fun_l23_n762(x)
+ else
+ fun_l23_n596(x)
+ end
+end
+
+def fun_l22_n208(x)
+ if (x < 1)
+ fun_l23_n992(x)
+ else
+ fun_l23_n90(x)
+ end
+end
+
+def fun_l22_n209(x)
+ if (x < 1)
+ fun_l23_n994(x)
+ else
+ fun_l23_n265(x)
+ end
+end
+
+def fun_l22_n210(x)
+ if (x < 1)
+ fun_l23_n449(x)
+ else
+ fun_l23_n609(x)
+ end
+end
+
+def fun_l22_n211(x)
+ if (x < 1)
+ fun_l23_n816(x)
+ else
+ fun_l23_n8(x)
+ end
+end
+
+def fun_l22_n212(x)
+ if (x < 1)
+ fun_l23_n526(x)
+ else
+ fun_l23_n982(x)
+ end
+end
+
+def fun_l22_n213(x)
+ if (x < 1)
+ fun_l23_n25(x)
+ else
+ fun_l23_n302(x)
+ end
+end
+
+def fun_l22_n214(x)
+ if (x < 1)
+ fun_l23_n868(x)
+ else
+ fun_l23_n895(x)
+ end
+end
+
+def fun_l22_n215(x)
+ if (x < 1)
+ fun_l23_n3(x)
+ else
+ fun_l23_n914(x)
+ end
+end
+
+def fun_l22_n216(x)
+ if (x < 1)
+ fun_l23_n106(x)
+ else
+ fun_l23_n271(x)
+ end
+end
+
+def fun_l22_n217(x)
+ if (x < 1)
+ fun_l23_n567(x)
+ else
+ fun_l23_n931(x)
+ end
+end
+
+def fun_l22_n218(x)
+ if (x < 1)
+ fun_l23_n7(x)
+ else
+ fun_l23_n319(x)
+ end
+end
+
+def fun_l22_n219(x)
+ if (x < 1)
+ fun_l23_n510(x)
+ else
+ fun_l23_n753(x)
+ end
+end
+
+def fun_l22_n220(x)
+ if (x < 1)
+ fun_l23_n529(x)
+ else
+ fun_l23_n514(x)
+ end
+end
+
+def fun_l22_n221(x)
+ if (x < 1)
+ fun_l23_n871(x)
+ else
+ fun_l23_n571(x)
+ end
+end
+
+def fun_l22_n222(x)
+ if (x < 1)
+ fun_l23_n739(x)
+ else
+ fun_l23_n716(x)
+ end
+end
+
+def fun_l22_n223(x)
+ if (x < 1)
+ fun_l23_n781(x)
+ else
+ fun_l23_n730(x)
+ end
+end
+
+def fun_l22_n224(x)
+ if (x < 1)
+ fun_l23_n647(x)
+ else
+ fun_l23_n647(x)
+ end
+end
+
+def fun_l22_n225(x)
+ if (x < 1)
+ fun_l23_n968(x)
+ else
+ fun_l23_n680(x)
+ end
+end
+
+def fun_l22_n226(x)
+ if (x < 1)
+ fun_l23_n400(x)
+ else
+ fun_l23_n725(x)
+ end
+end
+
+def fun_l22_n227(x)
+ if (x < 1)
+ fun_l23_n386(x)
+ else
+ fun_l23_n859(x)
+ end
+end
+
+def fun_l22_n228(x)
+ if (x < 1)
+ fun_l23_n751(x)
+ else
+ fun_l23_n640(x)
+ end
+end
+
+def fun_l22_n229(x)
+ if (x < 1)
+ fun_l23_n273(x)
+ else
+ fun_l23_n754(x)
+ end
+end
+
+def fun_l22_n230(x)
+ if (x < 1)
+ fun_l23_n861(x)
+ else
+ fun_l23_n783(x)
+ end
+end
+
+def fun_l22_n231(x)
+ if (x < 1)
+ fun_l23_n665(x)
+ else
+ fun_l23_n18(x)
+ end
+end
+
+def fun_l22_n232(x)
+ if (x < 1)
+ fun_l23_n680(x)
+ else
+ fun_l23_n471(x)
+ end
+end
+
+def fun_l22_n233(x)
+ if (x < 1)
+ fun_l23_n400(x)
+ else
+ fun_l23_n935(x)
+ end
+end
+
+def fun_l22_n234(x)
+ if (x < 1)
+ fun_l23_n563(x)
+ else
+ fun_l23_n799(x)
+ end
+end
+
+def fun_l22_n235(x)
+ if (x < 1)
+ fun_l23_n712(x)
+ else
+ fun_l23_n20(x)
+ end
+end
+
+def fun_l22_n236(x)
+ if (x < 1)
+ fun_l23_n579(x)
+ else
+ fun_l23_n152(x)
+ end
+end
+
+def fun_l22_n237(x)
+ if (x < 1)
+ fun_l23_n752(x)
+ else
+ fun_l23_n282(x)
+ end
+end
+
+def fun_l22_n238(x)
+ if (x < 1)
+ fun_l23_n609(x)
+ else
+ fun_l23_n980(x)
+ end
+end
+
+def fun_l22_n239(x)
+ if (x < 1)
+ fun_l23_n916(x)
+ else
+ fun_l23_n52(x)
+ end
+end
+
+def fun_l22_n240(x)
+ if (x < 1)
+ fun_l23_n468(x)
+ else
+ fun_l23_n735(x)
+ end
+end
+
+def fun_l22_n241(x)
+ if (x < 1)
+ fun_l23_n894(x)
+ else
+ fun_l23_n776(x)
+ end
+end
+
+def fun_l22_n242(x)
+ if (x < 1)
+ fun_l23_n782(x)
+ else
+ fun_l23_n406(x)
+ end
+end
+
+def fun_l22_n243(x)
+ if (x < 1)
+ fun_l23_n90(x)
+ else
+ fun_l23_n226(x)
+ end
+end
+
+def fun_l22_n244(x)
+ if (x < 1)
+ fun_l23_n967(x)
+ else
+ fun_l23_n252(x)
+ end
+end
+
+def fun_l22_n245(x)
+ if (x < 1)
+ fun_l23_n189(x)
+ else
+ fun_l23_n252(x)
+ end
+end
+
+def fun_l22_n246(x)
+ if (x < 1)
+ fun_l23_n919(x)
+ else
+ fun_l23_n581(x)
+ end
+end
+
+def fun_l22_n247(x)
+ if (x < 1)
+ fun_l23_n212(x)
+ else
+ fun_l23_n465(x)
+ end
+end
+
+def fun_l22_n248(x)
+ if (x < 1)
+ fun_l23_n880(x)
+ else
+ fun_l23_n823(x)
+ end
+end
+
+def fun_l22_n249(x)
+ if (x < 1)
+ fun_l23_n227(x)
+ else
+ fun_l23_n620(x)
+ end
+end
+
+def fun_l22_n250(x)
+ if (x < 1)
+ fun_l23_n875(x)
+ else
+ fun_l23_n707(x)
+ end
+end
+
+def fun_l22_n251(x)
+ if (x < 1)
+ fun_l23_n623(x)
+ else
+ fun_l23_n132(x)
+ end
+end
+
+def fun_l22_n252(x)
+ if (x < 1)
+ fun_l23_n739(x)
+ else
+ fun_l23_n417(x)
+ end
+end
+
+def fun_l22_n253(x)
+ if (x < 1)
+ fun_l23_n977(x)
+ else
+ fun_l23_n216(x)
+ end
+end
+
+def fun_l22_n254(x)
+ if (x < 1)
+ fun_l23_n725(x)
+ else
+ fun_l23_n168(x)
+ end
+end
+
+def fun_l22_n255(x)
+ if (x < 1)
+ fun_l23_n878(x)
+ else
+ fun_l23_n699(x)
+ end
+end
+
+def fun_l22_n256(x)
+ if (x < 1)
+ fun_l23_n423(x)
+ else
+ fun_l23_n626(x)
+ end
+end
+
+def fun_l22_n257(x)
+ if (x < 1)
+ fun_l23_n29(x)
+ else
+ fun_l23_n248(x)
+ end
+end
+
+def fun_l22_n258(x)
+ if (x < 1)
+ fun_l23_n78(x)
+ else
+ fun_l23_n925(x)
+ end
+end
+
+def fun_l22_n259(x)
+ if (x < 1)
+ fun_l23_n798(x)
+ else
+ fun_l23_n220(x)
+ end
+end
+
+def fun_l22_n260(x)
+ if (x < 1)
+ fun_l23_n621(x)
+ else
+ fun_l23_n936(x)
+ end
+end
+
+def fun_l22_n261(x)
+ if (x < 1)
+ fun_l23_n894(x)
+ else
+ fun_l23_n463(x)
+ end
+end
+
+def fun_l22_n262(x)
+ if (x < 1)
+ fun_l23_n336(x)
+ else
+ fun_l23_n535(x)
+ end
+end
+
+def fun_l22_n263(x)
+ if (x < 1)
+ fun_l23_n246(x)
+ else
+ fun_l23_n676(x)
+ end
+end
+
+def fun_l22_n264(x)
+ if (x < 1)
+ fun_l23_n986(x)
+ else
+ fun_l23_n675(x)
+ end
+end
+
+def fun_l22_n265(x)
+ if (x < 1)
+ fun_l23_n92(x)
+ else
+ fun_l23_n380(x)
+ end
+end
+
+def fun_l22_n266(x)
+ if (x < 1)
+ fun_l23_n945(x)
+ else
+ fun_l23_n842(x)
+ end
+end
+
+def fun_l22_n267(x)
+ if (x < 1)
+ fun_l23_n351(x)
+ else
+ fun_l23_n261(x)
+ end
+end
+
+def fun_l22_n268(x)
+ if (x < 1)
+ fun_l23_n784(x)
+ else
+ fun_l23_n306(x)
+ end
+end
+
+def fun_l22_n269(x)
+ if (x < 1)
+ fun_l23_n940(x)
+ else
+ fun_l23_n129(x)
+ end
+end
+
+def fun_l22_n270(x)
+ if (x < 1)
+ fun_l23_n491(x)
+ else
+ fun_l23_n806(x)
+ end
+end
+
+def fun_l22_n271(x)
+ if (x < 1)
+ fun_l23_n68(x)
+ else
+ fun_l23_n91(x)
+ end
+end
+
+def fun_l22_n272(x)
+ if (x < 1)
+ fun_l23_n965(x)
+ else
+ fun_l23_n665(x)
+ end
+end
+
+def fun_l22_n273(x)
+ if (x < 1)
+ fun_l23_n461(x)
+ else
+ fun_l23_n619(x)
+ end
+end
+
+def fun_l22_n274(x)
+ if (x < 1)
+ fun_l23_n635(x)
+ else
+ fun_l23_n755(x)
+ end
+end
+
+def fun_l22_n275(x)
+ if (x < 1)
+ fun_l23_n192(x)
+ else
+ fun_l23_n729(x)
+ end
+end
+
+def fun_l22_n276(x)
+ if (x < 1)
+ fun_l23_n94(x)
+ else
+ fun_l23_n832(x)
+ end
+end
+
+def fun_l22_n277(x)
+ if (x < 1)
+ fun_l23_n619(x)
+ else
+ fun_l23_n444(x)
+ end
+end
+
+def fun_l22_n278(x)
+ if (x < 1)
+ fun_l23_n682(x)
+ else
+ fun_l23_n579(x)
+ end
+end
+
+def fun_l22_n279(x)
+ if (x < 1)
+ fun_l23_n889(x)
+ else
+ fun_l23_n425(x)
+ end
+end
+
+def fun_l22_n280(x)
+ if (x < 1)
+ fun_l23_n101(x)
+ else
+ fun_l23_n215(x)
+ end
+end
+
+def fun_l22_n281(x)
+ if (x < 1)
+ fun_l23_n747(x)
+ else
+ fun_l23_n436(x)
+ end
+end
+
+def fun_l22_n282(x)
+ if (x < 1)
+ fun_l23_n519(x)
+ else
+ fun_l23_n438(x)
+ end
+end
+
+def fun_l22_n283(x)
+ if (x < 1)
+ fun_l23_n312(x)
+ else
+ fun_l23_n804(x)
+ end
+end
+
+def fun_l22_n284(x)
+ if (x < 1)
+ fun_l23_n150(x)
+ else
+ fun_l23_n71(x)
+ end
+end
+
+def fun_l22_n285(x)
+ if (x < 1)
+ fun_l23_n698(x)
+ else
+ fun_l23_n254(x)
+ end
+end
+
+def fun_l22_n286(x)
+ if (x < 1)
+ fun_l23_n97(x)
+ else
+ fun_l23_n782(x)
+ end
+end
+
+def fun_l22_n287(x)
+ if (x < 1)
+ fun_l23_n315(x)
+ else
+ fun_l23_n164(x)
+ end
+end
+
+def fun_l22_n288(x)
+ if (x < 1)
+ fun_l23_n704(x)
+ else
+ fun_l23_n927(x)
+ end
+end
+
+def fun_l22_n289(x)
+ if (x < 1)
+ fun_l23_n447(x)
+ else
+ fun_l23_n104(x)
+ end
+end
+
+def fun_l22_n290(x)
+ if (x < 1)
+ fun_l23_n533(x)
+ else
+ fun_l23_n687(x)
+ end
+end
+
+def fun_l22_n291(x)
+ if (x < 1)
+ fun_l23_n897(x)
+ else
+ fun_l23_n692(x)
+ end
+end
+
+def fun_l22_n292(x)
+ if (x < 1)
+ fun_l23_n515(x)
+ else
+ fun_l23_n258(x)
+ end
+end
+
+def fun_l22_n293(x)
+ if (x < 1)
+ fun_l23_n25(x)
+ else
+ fun_l23_n608(x)
+ end
+end
+
+def fun_l22_n294(x)
+ if (x < 1)
+ fun_l23_n313(x)
+ else
+ fun_l23_n675(x)
+ end
+end
+
+def fun_l22_n295(x)
+ if (x < 1)
+ fun_l23_n154(x)
+ else
+ fun_l23_n779(x)
+ end
+end
+
+def fun_l22_n296(x)
+ if (x < 1)
+ fun_l23_n731(x)
+ else
+ fun_l23_n310(x)
+ end
+end
+
+def fun_l22_n297(x)
+ if (x < 1)
+ fun_l23_n443(x)
+ else
+ fun_l23_n709(x)
+ end
+end
+
+def fun_l22_n298(x)
+ if (x < 1)
+ fun_l23_n100(x)
+ else
+ fun_l23_n900(x)
+ end
+end
+
+def fun_l22_n299(x)
+ if (x < 1)
+ fun_l23_n64(x)
+ else
+ fun_l23_n80(x)
+ end
+end
+
+def fun_l22_n300(x)
+ if (x < 1)
+ fun_l23_n361(x)
+ else
+ fun_l23_n535(x)
+ end
+end
+
+def fun_l22_n301(x)
+ if (x < 1)
+ fun_l23_n628(x)
+ else
+ fun_l23_n272(x)
+ end
+end
+
+def fun_l22_n302(x)
+ if (x < 1)
+ fun_l23_n930(x)
+ else
+ fun_l23_n795(x)
+ end
+end
+
+def fun_l22_n303(x)
+ if (x < 1)
+ fun_l23_n642(x)
+ else
+ fun_l23_n766(x)
+ end
+end
+
+def fun_l22_n304(x)
+ if (x < 1)
+ fun_l23_n191(x)
+ else
+ fun_l23_n439(x)
+ end
+end
+
+def fun_l22_n305(x)
+ if (x < 1)
+ fun_l23_n387(x)
+ else
+ fun_l23_n999(x)
+ end
+end
+
+def fun_l22_n306(x)
+ if (x < 1)
+ fun_l23_n470(x)
+ else
+ fun_l23_n572(x)
+ end
+end
+
+def fun_l22_n307(x)
+ if (x < 1)
+ fun_l23_n942(x)
+ else
+ fun_l23_n254(x)
+ end
+end
+
+def fun_l22_n308(x)
+ if (x < 1)
+ fun_l23_n664(x)
+ else
+ fun_l23_n73(x)
+ end
+end
+
+def fun_l22_n309(x)
+ if (x < 1)
+ fun_l23_n63(x)
+ else
+ fun_l23_n321(x)
+ end
+end
+
+def fun_l22_n310(x)
+ if (x < 1)
+ fun_l23_n348(x)
+ else
+ fun_l23_n961(x)
+ end
+end
+
+def fun_l22_n311(x)
+ if (x < 1)
+ fun_l23_n555(x)
+ else
+ fun_l23_n315(x)
+ end
+end
+
+def fun_l22_n312(x)
+ if (x < 1)
+ fun_l23_n978(x)
+ else
+ fun_l23_n498(x)
+ end
+end
+
+def fun_l22_n313(x)
+ if (x < 1)
+ fun_l23_n880(x)
+ else
+ fun_l23_n696(x)
+ end
+end
+
+def fun_l22_n314(x)
+ if (x < 1)
+ fun_l23_n325(x)
+ else
+ fun_l23_n43(x)
+ end
+end
+
+def fun_l22_n315(x)
+ if (x < 1)
+ fun_l23_n848(x)
+ else
+ fun_l23_n314(x)
+ end
+end
+
+def fun_l22_n316(x)
+ if (x < 1)
+ fun_l23_n660(x)
+ else
+ fun_l23_n378(x)
+ end
+end
+
+def fun_l22_n317(x)
+ if (x < 1)
+ fun_l23_n975(x)
+ else
+ fun_l23_n503(x)
+ end
+end
+
+def fun_l22_n318(x)
+ if (x < 1)
+ fun_l23_n41(x)
+ else
+ fun_l23_n746(x)
+ end
+end
+
+def fun_l22_n319(x)
+ if (x < 1)
+ fun_l23_n325(x)
+ else
+ fun_l23_n565(x)
+ end
+end
+
+def fun_l22_n320(x)
+ if (x < 1)
+ fun_l23_n19(x)
+ else
+ fun_l23_n922(x)
+ end
+end
+
+def fun_l22_n321(x)
+ if (x < 1)
+ fun_l23_n235(x)
+ else
+ fun_l23_n284(x)
+ end
+end
+
+def fun_l22_n322(x)
+ if (x < 1)
+ fun_l23_n591(x)
+ else
+ fun_l23_n821(x)
+ end
+end
+
+def fun_l22_n323(x)
+ if (x < 1)
+ fun_l23_n23(x)
+ else
+ fun_l23_n151(x)
+ end
+end
+
+def fun_l22_n324(x)
+ if (x < 1)
+ fun_l23_n361(x)
+ else
+ fun_l23_n322(x)
+ end
+end
+
+def fun_l22_n325(x)
+ if (x < 1)
+ fun_l23_n245(x)
+ else
+ fun_l23_n205(x)
+ end
+end
+
+def fun_l22_n326(x)
+ if (x < 1)
+ fun_l23_n568(x)
+ else
+ fun_l23_n133(x)
+ end
+end
+
+def fun_l22_n327(x)
+ if (x < 1)
+ fun_l23_n895(x)
+ else
+ fun_l23_n315(x)
+ end
+end
+
+def fun_l22_n328(x)
+ if (x < 1)
+ fun_l23_n473(x)
+ else
+ fun_l23_n315(x)
+ end
+end
+
+def fun_l22_n329(x)
+ if (x < 1)
+ fun_l23_n618(x)
+ else
+ fun_l23_n196(x)
+ end
+end
+
+def fun_l22_n330(x)
+ if (x < 1)
+ fun_l23_n97(x)
+ else
+ fun_l23_n422(x)
+ end
+end
+
+def fun_l22_n331(x)
+ if (x < 1)
+ fun_l23_n101(x)
+ else
+ fun_l23_n447(x)
+ end
+end
+
+def fun_l22_n332(x)
+ if (x < 1)
+ fun_l23_n875(x)
+ else
+ fun_l23_n197(x)
+ end
+end
+
+def fun_l22_n333(x)
+ if (x < 1)
+ fun_l23_n25(x)
+ else
+ fun_l23_n499(x)
+ end
+end
+
+def fun_l22_n334(x)
+ if (x < 1)
+ fun_l23_n602(x)
+ else
+ fun_l23_n75(x)
+ end
+end
+
+def fun_l22_n335(x)
+ if (x < 1)
+ fun_l23_n370(x)
+ else
+ fun_l23_n150(x)
+ end
+end
+
+def fun_l22_n336(x)
+ if (x < 1)
+ fun_l23_n960(x)
+ else
+ fun_l23_n498(x)
+ end
+end
+
+def fun_l22_n337(x)
+ if (x < 1)
+ fun_l23_n675(x)
+ else
+ fun_l23_n525(x)
+ end
+end
+
+def fun_l22_n338(x)
+ if (x < 1)
+ fun_l23_n445(x)
+ else
+ fun_l23_n581(x)
+ end
+end
+
+def fun_l22_n339(x)
+ if (x < 1)
+ fun_l23_n718(x)
+ else
+ fun_l23_n995(x)
+ end
+end
+
+def fun_l22_n340(x)
+ if (x < 1)
+ fun_l23_n790(x)
+ else
+ fun_l23_n370(x)
+ end
+end
+
+def fun_l22_n341(x)
+ if (x < 1)
+ fun_l23_n234(x)
+ else
+ fun_l23_n187(x)
+ end
+end
+
+def fun_l22_n342(x)
+ if (x < 1)
+ fun_l23_n777(x)
+ else
+ fun_l23_n411(x)
+ end
+end
+
+def fun_l22_n343(x)
+ if (x < 1)
+ fun_l23_n258(x)
+ else
+ fun_l23_n129(x)
+ end
+end
+
+def fun_l22_n344(x)
+ if (x < 1)
+ fun_l23_n715(x)
+ else
+ fun_l23_n381(x)
+ end
+end
+
+def fun_l22_n345(x)
+ if (x < 1)
+ fun_l23_n495(x)
+ else
+ fun_l23_n892(x)
+ end
+end
+
+def fun_l22_n346(x)
+ if (x < 1)
+ fun_l23_n433(x)
+ else
+ fun_l23_n987(x)
+ end
+end
+
+def fun_l22_n347(x)
+ if (x < 1)
+ fun_l23_n569(x)
+ else
+ fun_l23_n832(x)
+ end
+end
+
+def fun_l22_n348(x)
+ if (x < 1)
+ fun_l23_n425(x)
+ else
+ fun_l23_n894(x)
+ end
+end
+
+def fun_l22_n349(x)
+ if (x < 1)
+ fun_l23_n186(x)
+ else
+ fun_l23_n211(x)
+ end
+end
+
+def fun_l22_n350(x)
+ if (x < 1)
+ fun_l23_n435(x)
+ else
+ fun_l23_n393(x)
+ end
+end
+
+def fun_l22_n351(x)
+ if (x < 1)
+ fun_l23_n942(x)
+ else
+ fun_l23_n364(x)
+ end
+end
+
+def fun_l22_n352(x)
+ if (x < 1)
+ fun_l23_n29(x)
+ else
+ fun_l23_n574(x)
+ end
+end
+
+def fun_l22_n353(x)
+ if (x < 1)
+ fun_l23_n548(x)
+ else
+ fun_l23_n663(x)
+ end
+end
+
+def fun_l22_n354(x)
+ if (x < 1)
+ fun_l23_n238(x)
+ else
+ fun_l23_n693(x)
+ end
+end
+
+def fun_l22_n355(x)
+ if (x < 1)
+ fun_l23_n459(x)
+ else
+ fun_l23_n197(x)
+ end
+end
+
+def fun_l22_n356(x)
+ if (x < 1)
+ fun_l23_n478(x)
+ else
+ fun_l23_n905(x)
+ end
+end
+
+def fun_l22_n357(x)
+ if (x < 1)
+ fun_l23_n732(x)
+ else
+ fun_l23_n124(x)
+ end
+end
+
+def fun_l22_n358(x)
+ if (x < 1)
+ fun_l23_n716(x)
+ else
+ fun_l23_n758(x)
+ end
+end
+
+def fun_l22_n359(x)
+ if (x < 1)
+ fun_l23_n376(x)
+ else
+ fun_l23_n883(x)
+ end
+end
+
+def fun_l22_n360(x)
+ if (x < 1)
+ fun_l23_n100(x)
+ else
+ fun_l23_n485(x)
+ end
+end
+
+def fun_l22_n361(x)
+ if (x < 1)
+ fun_l23_n62(x)
+ else
+ fun_l23_n794(x)
+ end
+end
+
+def fun_l22_n362(x)
+ if (x < 1)
+ fun_l23_n951(x)
+ else
+ fun_l23_n23(x)
+ end
+end
+
+def fun_l22_n363(x)
+ if (x < 1)
+ fun_l23_n298(x)
+ else
+ fun_l23_n775(x)
+ end
+end
+
+def fun_l22_n364(x)
+ if (x < 1)
+ fun_l23_n53(x)
+ else
+ fun_l23_n595(x)
+ end
+end
+
+def fun_l22_n365(x)
+ if (x < 1)
+ fun_l23_n695(x)
+ else
+ fun_l23_n401(x)
+ end
+end
+
+def fun_l22_n366(x)
+ if (x < 1)
+ fun_l23_n475(x)
+ else
+ fun_l23_n762(x)
+ end
+end
+
+def fun_l22_n367(x)
+ if (x < 1)
+ fun_l23_n706(x)
+ else
+ fun_l23_n527(x)
+ end
+end
+
+def fun_l22_n368(x)
+ if (x < 1)
+ fun_l23_n919(x)
+ else
+ fun_l23_n301(x)
+ end
+end
+
+def fun_l22_n369(x)
+ if (x < 1)
+ fun_l23_n755(x)
+ else
+ fun_l23_n256(x)
+ end
+end
+
+def fun_l22_n370(x)
+ if (x < 1)
+ fun_l23_n592(x)
+ else
+ fun_l23_n608(x)
+ end
+end
+
+def fun_l22_n371(x)
+ if (x < 1)
+ fun_l23_n192(x)
+ else
+ fun_l23_n10(x)
+ end
+end
+
+def fun_l22_n372(x)
+ if (x < 1)
+ fun_l23_n332(x)
+ else
+ fun_l23_n448(x)
+ end
+end
+
+def fun_l22_n373(x)
+ if (x < 1)
+ fun_l23_n135(x)
+ else
+ fun_l23_n793(x)
+ end
+end
+
+def fun_l22_n374(x)
+ if (x < 1)
+ fun_l23_n141(x)
+ else
+ fun_l23_n669(x)
+ end
+end
+
+def fun_l22_n375(x)
+ if (x < 1)
+ fun_l23_n474(x)
+ else
+ fun_l23_n356(x)
+ end
+end
+
+def fun_l22_n376(x)
+ if (x < 1)
+ fun_l23_n69(x)
+ else
+ fun_l23_n384(x)
+ end
+end
+
+def fun_l22_n377(x)
+ if (x < 1)
+ fun_l23_n386(x)
+ else
+ fun_l23_n552(x)
+ end
+end
+
+def fun_l22_n378(x)
+ if (x < 1)
+ fun_l23_n878(x)
+ else
+ fun_l23_n131(x)
+ end
+end
+
+def fun_l22_n379(x)
+ if (x < 1)
+ fun_l23_n929(x)
+ else
+ fun_l23_n479(x)
+ end
+end
+
+def fun_l22_n380(x)
+ if (x < 1)
+ fun_l23_n782(x)
+ else
+ fun_l23_n745(x)
+ end
+end
+
+def fun_l22_n381(x)
+ if (x < 1)
+ fun_l23_n126(x)
+ else
+ fun_l23_n732(x)
+ end
+end
+
+def fun_l22_n382(x)
+ if (x < 1)
+ fun_l23_n694(x)
+ else
+ fun_l23_n291(x)
+ end
+end
+
+def fun_l22_n383(x)
+ if (x < 1)
+ fun_l23_n165(x)
+ else
+ fun_l23_n49(x)
+ end
+end
+
+def fun_l22_n384(x)
+ if (x < 1)
+ fun_l23_n453(x)
+ else
+ fun_l23_n144(x)
+ end
+end
+
+def fun_l22_n385(x)
+ if (x < 1)
+ fun_l23_n182(x)
+ else
+ fun_l23_n974(x)
+ end
+end
+
+def fun_l22_n386(x)
+ if (x < 1)
+ fun_l23_n861(x)
+ else
+ fun_l23_n185(x)
+ end
+end
+
+def fun_l22_n387(x)
+ if (x < 1)
+ fun_l23_n962(x)
+ else
+ fun_l23_n578(x)
+ end
+end
+
+def fun_l22_n388(x)
+ if (x < 1)
+ fun_l23_n88(x)
+ else
+ fun_l23_n508(x)
+ end
+end
+
+def fun_l22_n389(x)
+ if (x < 1)
+ fun_l23_n421(x)
+ else
+ fun_l23_n886(x)
+ end
+end
+
+def fun_l22_n390(x)
+ if (x < 1)
+ fun_l23_n992(x)
+ else
+ fun_l23_n540(x)
+ end
+end
+
+def fun_l22_n391(x)
+ if (x < 1)
+ fun_l23_n996(x)
+ else
+ fun_l23_n533(x)
+ end
+end
+
+def fun_l22_n392(x)
+ if (x < 1)
+ fun_l23_n97(x)
+ else
+ fun_l23_n803(x)
+ end
+end
+
+def fun_l22_n393(x)
+ if (x < 1)
+ fun_l23_n505(x)
+ else
+ fun_l23_n263(x)
+ end
+end
+
+def fun_l22_n394(x)
+ if (x < 1)
+ fun_l23_n52(x)
+ else
+ fun_l23_n566(x)
+ end
+end
+
+def fun_l22_n395(x)
+ if (x < 1)
+ fun_l23_n290(x)
+ else
+ fun_l23_n558(x)
+ end
+end
+
+def fun_l22_n396(x)
+ if (x < 1)
+ fun_l23_n51(x)
+ else
+ fun_l23_n365(x)
+ end
+end
+
+def fun_l22_n397(x)
+ if (x < 1)
+ fun_l23_n505(x)
+ else
+ fun_l23_n461(x)
+ end
+end
+
+def fun_l22_n398(x)
+ if (x < 1)
+ fun_l23_n415(x)
+ else
+ fun_l23_n460(x)
+ end
+end
+
+def fun_l22_n399(x)
+ if (x < 1)
+ fun_l23_n370(x)
+ else
+ fun_l23_n377(x)
+ end
+end
+
+def fun_l22_n400(x)
+ if (x < 1)
+ fun_l23_n644(x)
+ else
+ fun_l23_n300(x)
+ end
+end
+
+def fun_l22_n401(x)
+ if (x < 1)
+ fun_l23_n22(x)
+ else
+ fun_l23_n348(x)
+ end
+end
+
+def fun_l22_n402(x)
+ if (x < 1)
+ fun_l23_n286(x)
+ else
+ fun_l23_n991(x)
+ end
+end
+
+def fun_l22_n403(x)
+ if (x < 1)
+ fun_l23_n928(x)
+ else
+ fun_l23_n627(x)
+ end
+end
+
+def fun_l22_n404(x)
+ if (x < 1)
+ fun_l23_n884(x)
+ else
+ fun_l23_n326(x)
+ end
+end
+
+def fun_l22_n405(x)
+ if (x < 1)
+ fun_l23_n586(x)
+ else
+ fun_l23_n913(x)
+ end
+end
+
+def fun_l22_n406(x)
+ if (x < 1)
+ fun_l23_n732(x)
+ else
+ fun_l23_n964(x)
+ end
+end
+
+def fun_l22_n407(x)
+ if (x < 1)
+ fun_l23_n301(x)
+ else
+ fun_l23_n946(x)
+ end
+end
+
+def fun_l22_n408(x)
+ if (x < 1)
+ fun_l23_n540(x)
+ else
+ fun_l23_n29(x)
+ end
+end
+
+def fun_l22_n409(x)
+ if (x < 1)
+ fun_l23_n793(x)
+ else
+ fun_l23_n420(x)
+ end
+end
+
+def fun_l22_n410(x)
+ if (x < 1)
+ fun_l23_n766(x)
+ else
+ fun_l23_n473(x)
+ end
+end
+
+def fun_l22_n411(x)
+ if (x < 1)
+ fun_l23_n683(x)
+ else
+ fun_l23_n12(x)
+ end
+end
+
+def fun_l22_n412(x)
+ if (x < 1)
+ fun_l23_n273(x)
+ else
+ fun_l23_n45(x)
+ end
+end
+
+def fun_l22_n413(x)
+ if (x < 1)
+ fun_l23_n732(x)
+ else
+ fun_l23_n313(x)
+ end
+end
+
+def fun_l22_n414(x)
+ if (x < 1)
+ fun_l23_n291(x)
+ else
+ fun_l23_n216(x)
+ end
+end
+
+def fun_l22_n415(x)
+ if (x < 1)
+ fun_l23_n6(x)
+ else
+ fun_l23_n482(x)
+ end
+end
+
+def fun_l22_n416(x)
+ if (x < 1)
+ fun_l23_n214(x)
+ else
+ fun_l23_n341(x)
+ end
+end
+
+def fun_l22_n417(x)
+ if (x < 1)
+ fun_l23_n690(x)
+ else
+ fun_l23_n773(x)
+ end
+end
+
+def fun_l22_n418(x)
+ if (x < 1)
+ fun_l23_n437(x)
+ else
+ fun_l23_n941(x)
+ end
+end
+
+def fun_l22_n419(x)
+ if (x < 1)
+ fun_l23_n131(x)
+ else
+ fun_l23_n14(x)
+ end
+end
+
+def fun_l22_n420(x)
+ if (x < 1)
+ fun_l23_n924(x)
+ else
+ fun_l23_n359(x)
+ end
+end
+
+def fun_l22_n421(x)
+ if (x < 1)
+ fun_l23_n653(x)
+ else
+ fun_l23_n875(x)
+ end
+end
+
+def fun_l22_n422(x)
+ if (x < 1)
+ fun_l23_n411(x)
+ else
+ fun_l23_n981(x)
+ end
+end
+
+def fun_l22_n423(x)
+ if (x < 1)
+ fun_l23_n258(x)
+ else
+ fun_l23_n876(x)
+ end
+end
+
+def fun_l22_n424(x)
+ if (x < 1)
+ fun_l23_n430(x)
+ else
+ fun_l23_n62(x)
+ end
+end
+
+def fun_l22_n425(x)
+ if (x < 1)
+ fun_l23_n444(x)
+ else
+ fun_l23_n48(x)
+ end
+end
+
+def fun_l22_n426(x)
+ if (x < 1)
+ fun_l23_n905(x)
+ else
+ fun_l23_n458(x)
+ end
+end
+
+def fun_l22_n427(x)
+ if (x < 1)
+ fun_l23_n440(x)
+ else
+ fun_l23_n411(x)
+ end
+end
+
+def fun_l22_n428(x)
+ if (x < 1)
+ fun_l23_n655(x)
+ else
+ fun_l23_n622(x)
+ end
+end
+
+def fun_l22_n429(x)
+ if (x < 1)
+ fun_l23_n587(x)
+ else
+ fun_l23_n638(x)
+ end
+end
+
+def fun_l22_n430(x)
+ if (x < 1)
+ fun_l23_n156(x)
+ else
+ fun_l23_n900(x)
+ end
+end
+
+def fun_l22_n431(x)
+ if (x < 1)
+ fun_l23_n136(x)
+ else
+ fun_l23_n562(x)
+ end
+end
+
+def fun_l22_n432(x)
+ if (x < 1)
+ fun_l23_n897(x)
+ else
+ fun_l23_n16(x)
+ end
+end
+
+def fun_l22_n433(x)
+ if (x < 1)
+ fun_l23_n28(x)
+ else
+ fun_l23_n504(x)
+ end
+end
+
+def fun_l22_n434(x)
+ if (x < 1)
+ fun_l23_n987(x)
+ else
+ fun_l23_n640(x)
+ end
+end
+
+def fun_l22_n435(x)
+ if (x < 1)
+ fun_l23_n395(x)
+ else
+ fun_l23_n922(x)
+ end
+end
+
+def fun_l22_n436(x)
+ if (x < 1)
+ fun_l23_n679(x)
+ else
+ fun_l23_n576(x)
+ end
+end
+
+def fun_l22_n437(x)
+ if (x < 1)
+ fun_l23_n915(x)
+ else
+ fun_l23_n240(x)
+ end
+end
+
+def fun_l22_n438(x)
+ if (x < 1)
+ fun_l23_n889(x)
+ else
+ fun_l23_n38(x)
+ end
+end
+
+def fun_l22_n439(x)
+ if (x < 1)
+ fun_l23_n522(x)
+ else
+ fun_l23_n481(x)
+ end
+end
+
+def fun_l22_n440(x)
+ if (x < 1)
+ fun_l23_n458(x)
+ else
+ fun_l23_n81(x)
+ end
+end
+
+def fun_l22_n441(x)
+ if (x < 1)
+ fun_l23_n220(x)
+ else
+ fun_l23_n393(x)
+ end
+end
+
+def fun_l22_n442(x)
+ if (x < 1)
+ fun_l23_n404(x)
+ else
+ fun_l23_n945(x)
+ end
+end
+
+def fun_l22_n443(x)
+ if (x < 1)
+ fun_l23_n347(x)
+ else
+ fun_l23_n377(x)
+ end
+end
+
+def fun_l22_n444(x)
+ if (x < 1)
+ fun_l23_n484(x)
+ else
+ fun_l23_n277(x)
+ end
+end
+
+def fun_l22_n445(x)
+ if (x < 1)
+ fun_l23_n118(x)
+ else
+ fun_l23_n578(x)
+ end
+end
+
+def fun_l22_n446(x)
+ if (x < 1)
+ fun_l23_n674(x)
+ else
+ fun_l23_n238(x)
+ end
+end
+
+def fun_l22_n447(x)
+ if (x < 1)
+ fun_l23_n290(x)
+ else
+ fun_l23_n275(x)
+ end
+end
+
+def fun_l22_n448(x)
+ if (x < 1)
+ fun_l23_n358(x)
+ else
+ fun_l23_n939(x)
+ end
+end
+
+def fun_l22_n449(x)
+ if (x < 1)
+ fun_l23_n38(x)
+ else
+ fun_l23_n122(x)
+ end
+end
+
+def fun_l22_n450(x)
+ if (x < 1)
+ fun_l23_n575(x)
+ else
+ fun_l23_n582(x)
+ end
+end
+
+def fun_l22_n451(x)
+ if (x < 1)
+ fun_l23_n657(x)
+ else
+ fun_l23_n986(x)
+ end
+end
+
+def fun_l22_n452(x)
+ if (x < 1)
+ fun_l23_n771(x)
+ else
+ fun_l23_n603(x)
+ end
+end
+
+def fun_l22_n453(x)
+ if (x < 1)
+ fun_l23_n981(x)
+ else
+ fun_l23_n762(x)
+ end
+end
+
+def fun_l22_n454(x)
+ if (x < 1)
+ fun_l23_n93(x)
+ else
+ fun_l23_n26(x)
+ end
+end
+
+def fun_l22_n455(x)
+ if (x < 1)
+ fun_l23_n675(x)
+ else
+ fun_l23_n332(x)
+ end
+end
+
+def fun_l22_n456(x)
+ if (x < 1)
+ fun_l23_n923(x)
+ else
+ fun_l23_n416(x)
+ end
+end
+
+def fun_l22_n457(x)
+ if (x < 1)
+ fun_l23_n179(x)
+ else
+ fun_l23_n485(x)
+ end
+end
+
+def fun_l22_n458(x)
+ if (x < 1)
+ fun_l23_n38(x)
+ else
+ fun_l23_n319(x)
+ end
+end
+
+def fun_l22_n459(x)
+ if (x < 1)
+ fun_l23_n22(x)
+ else
+ fun_l23_n747(x)
+ end
+end
+
+def fun_l22_n460(x)
+ if (x < 1)
+ fun_l23_n643(x)
+ else
+ fun_l23_n132(x)
+ end
+end
+
+def fun_l22_n461(x)
+ if (x < 1)
+ fun_l23_n165(x)
+ else
+ fun_l23_n673(x)
+ end
+end
+
+def fun_l22_n462(x)
+ if (x < 1)
+ fun_l23_n988(x)
+ else
+ fun_l23_n916(x)
+ end
+end
+
+def fun_l22_n463(x)
+ if (x < 1)
+ fun_l23_n331(x)
+ else
+ fun_l23_n853(x)
+ end
+end
+
+def fun_l22_n464(x)
+ if (x < 1)
+ fun_l23_n699(x)
+ else
+ fun_l23_n771(x)
+ end
+end
+
+def fun_l22_n465(x)
+ if (x < 1)
+ fun_l23_n358(x)
+ else
+ fun_l23_n966(x)
+ end
+end
+
+def fun_l22_n466(x)
+ if (x < 1)
+ fun_l23_n723(x)
+ else
+ fun_l23_n897(x)
+ end
+end
+
+def fun_l22_n467(x)
+ if (x < 1)
+ fun_l23_n69(x)
+ else
+ fun_l23_n186(x)
+ end
+end
+
+def fun_l22_n468(x)
+ if (x < 1)
+ fun_l23_n661(x)
+ else
+ fun_l23_n420(x)
+ end
+end
+
+def fun_l22_n469(x)
+ if (x < 1)
+ fun_l23_n175(x)
+ else
+ fun_l23_n270(x)
+ end
+end
+
+def fun_l22_n470(x)
+ if (x < 1)
+ fun_l23_n556(x)
+ else
+ fun_l23_n344(x)
+ end
+end
+
+def fun_l22_n471(x)
+ if (x < 1)
+ fun_l23_n413(x)
+ else
+ fun_l23_n338(x)
+ end
+end
+
+def fun_l22_n472(x)
+ if (x < 1)
+ fun_l23_n456(x)
+ else
+ fun_l23_n125(x)
+ end
+end
+
+def fun_l22_n473(x)
+ if (x < 1)
+ fun_l23_n364(x)
+ else
+ fun_l23_n347(x)
+ end
+end
+
+def fun_l22_n474(x)
+ if (x < 1)
+ fun_l23_n436(x)
+ else
+ fun_l23_n897(x)
+ end
+end
+
+def fun_l22_n475(x)
+ if (x < 1)
+ fun_l23_n613(x)
+ else
+ fun_l23_n851(x)
+ end
+end
+
+def fun_l22_n476(x)
+ if (x < 1)
+ fun_l23_n754(x)
+ else
+ fun_l23_n755(x)
+ end
+end
+
+def fun_l22_n477(x)
+ if (x < 1)
+ fun_l23_n899(x)
+ else
+ fun_l23_n496(x)
+ end
+end
+
+def fun_l22_n478(x)
+ if (x < 1)
+ fun_l23_n183(x)
+ else
+ fun_l23_n864(x)
+ end
+end
+
+def fun_l22_n479(x)
+ if (x < 1)
+ fun_l23_n11(x)
+ else
+ fun_l23_n679(x)
+ end
+end
+
+def fun_l22_n480(x)
+ if (x < 1)
+ fun_l23_n160(x)
+ else
+ fun_l23_n747(x)
+ end
+end
+
+def fun_l22_n481(x)
+ if (x < 1)
+ fun_l23_n138(x)
+ else
+ fun_l23_n762(x)
+ end
+end
+
+def fun_l22_n482(x)
+ if (x < 1)
+ fun_l23_n467(x)
+ else
+ fun_l23_n148(x)
+ end
+end
+
+def fun_l22_n483(x)
+ if (x < 1)
+ fun_l23_n97(x)
+ else
+ fun_l23_n826(x)
+ end
+end
+
+def fun_l22_n484(x)
+ if (x < 1)
+ fun_l23_n754(x)
+ else
+ fun_l23_n661(x)
+ end
+end
+
+def fun_l22_n485(x)
+ if (x < 1)
+ fun_l23_n415(x)
+ else
+ fun_l23_n531(x)
+ end
+end
+
+def fun_l22_n486(x)
+ if (x < 1)
+ fun_l23_n543(x)
+ else
+ fun_l23_n271(x)
+ end
+end
+
+def fun_l22_n487(x)
+ if (x < 1)
+ fun_l23_n240(x)
+ else
+ fun_l23_n221(x)
+ end
+end
+
+def fun_l22_n488(x)
+ if (x < 1)
+ fun_l23_n208(x)
+ else
+ fun_l23_n633(x)
+ end
+end
+
+def fun_l22_n489(x)
+ if (x < 1)
+ fun_l23_n539(x)
+ else
+ fun_l23_n925(x)
+ end
+end
+
+def fun_l22_n490(x)
+ if (x < 1)
+ fun_l23_n141(x)
+ else
+ fun_l23_n142(x)
+ end
+end
+
+def fun_l22_n491(x)
+ if (x < 1)
+ fun_l23_n899(x)
+ else
+ fun_l23_n407(x)
+ end
+end
+
+def fun_l22_n492(x)
+ if (x < 1)
+ fun_l23_n237(x)
+ else
+ fun_l23_n836(x)
+ end
+end
+
+def fun_l22_n493(x)
+ if (x < 1)
+ fun_l23_n23(x)
+ else
+ fun_l23_n266(x)
+ end
+end
+
+def fun_l22_n494(x)
+ if (x < 1)
+ fun_l23_n819(x)
+ else
+ fun_l23_n473(x)
+ end
+end
+
+def fun_l22_n495(x)
+ if (x < 1)
+ fun_l23_n182(x)
+ else
+ fun_l23_n253(x)
+ end
+end
+
+def fun_l22_n496(x)
+ if (x < 1)
+ fun_l23_n459(x)
+ else
+ fun_l23_n421(x)
+ end
+end
+
+def fun_l22_n497(x)
+ if (x < 1)
+ fun_l23_n553(x)
+ else
+ fun_l23_n207(x)
+ end
+end
+
+def fun_l22_n498(x)
+ if (x < 1)
+ fun_l23_n5(x)
+ else
+ fun_l23_n261(x)
+ end
+end
+
+def fun_l22_n499(x)
+ if (x < 1)
+ fun_l23_n53(x)
+ else
+ fun_l23_n478(x)
+ end
+end
+
+def fun_l22_n500(x)
+ if (x < 1)
+ fun_l23_n489(x)
+ else
+ fun_l23_n77(x)
+ end
+end
+
+def fun_l22_n501(x)
+ if (x < 1)
+ fun_l23_n551(x)
+ else
+ fun_l23_n854(x)
+ end
+end
+
+def fun_l22_n502(x)
+ if (x < 1)
+ fun_l23_n32(x)
+ else
+ fun_l23_n241(x)
+ end
+end
+
+def fun_l22_n503(x)
+ if (x < 1)
+ fun_l23_n536(x)
+ else
+ fun_l23_n820(x)
+ end
+end
+
+def fun_l22_n504(x)
+ if (x < 1)
+ fun_l23_n521(x)
+ else
+ fun_l23_n551(x)
+ end
+end
+
+def fun_l22_n505(x)
+ if (x < 1)
+ fun_l23_n812(x)
+ else
+ fun_l23_n885(x)
+ end
+end
+
+def fun_l22_n506(x)
+ if (x < 1)
+ fun_l23_n935(x)
+ else
+ fun_l23_n38(x)
+ end
+end
+
+def fun_l22_n507(x)
+ if (x < 1)
+ fun_l23_n99(x)
+ else
+ fun_l23_n907(x)
+ end
+end
+
+def fun_l22_n508(x)
+ if (x < 1)
+ fun_l23_n89(x)
+ else
+ fun_l23_n322(x)
+ end
+end
+
+def fun_l22_n509(x)
+ if (x < 1)
+ fun_l23_n279(x)
+ else
+ fun_l23_n103(x)
+ end
+end
+
+def fun_l22_n510(x)
+ if (x < 1)
+ fun_l23_n476(x)
+ else
+ fun_l23_n947(x)
+ end
+end
+
+def fun_l22_n511(x)
+ if (x < 1)
+ fun_l23_n872(x)
+ else
+ fun_l23_n497(x)
+ end
+end
+
+def fun_l22_n512(x)
+ if (x < 1)
+ fun_l23_n508(x)
+ else
+ fun_l23_n548(x)
+ end
+end
+
+def fun_l22_n513(x)
+ if (x < 1)
+ fun_l23_n640(x)
+ else
+ fun_l23_n696(x)
+ end
+end
+
+def fun_l22_n514(x)
+ if (x < 1)
+ fun_l23_n694(x)
+ else
+ fun_l23_n483(x)
+ end
+end
+
+def fun_l22_n515(x)
+ if (x < 1)
+ fun_l23_n914(x)
+ else
+ fun_l23_n772(x)
+ end
+end
+
+def fun_l22_n516(x)
+ if (x < 1)
+ fun_l23_n192(x)
+ else
+ fun_l23_n35(x)
+ end
+end
+
+def fun_l22_n517(x)
+ if (x < 1)
+ fun_l23_n597(x)
+ else
+ fun_l23_n473(x)
+ end
+end
+
+def fun_l22_n518(x)
+ if (x < 1)
+ fun_l23_n974(x)
+ else
+ fun_l23_n315(x)
+ end
+end
+
+def fun_l22_n519(x)
+ if (x < 1)
+ fun_l23_n391(x)
+ else
+ fun_l23_n800(x)
+ end
+end
+
+def fun_l22_n520(x)
+ if (x < 1)
+ fun_l23_n106(x)
+ else
+ fun_l23_n170(x)
+ end
+end
+
+def fun_l22_n521(x)
+ if (x < 1)
+ fun_l23_n926(x)
+ else
+ fun_l23_n495(x)
+ end
+end
+
+def fun_l22_n522(x)
+ if (x < 1)
+ fun_l23_n135(x)
+ else
+ fun_l23_n304(x)
+ end
+end
+
+def fun_l22_n523(x)
+ if (x < 1)
+ fun_l23_n765(x)
+ else
+ fun_l23_n53(x)
+ end
+end
+
+def fun_l22_n524(x)
+ if (x < 1)
+ fun_l23_n699(x)
+ else
+ fun_l23_n158(x)
+ end
+end
+
+def fun_l22_n525(x)
+ if (x < 1)
+ fun_l23_n759(x)
+ else
+ fun_l23_n34(x)
+ end
+end
+
+def fun_l22_n526(x)
+ if (x < 1)
+ fun_l23_n813(x)
+ else
+ fun_l23_n938(x)
+ end
+end
+
+def fun_l22_n527(x)
+ if (x < 1)
+ fun_l23_n207(x)
+ else
+ fun_l23_n549(x)
+ end
+end
+
+def fun_l22_n528(x)
+ if (x < 1)
+ fun_l23_n468(x)
+ else
+ fun_l23_n681(x)
+ end
+end
+
+def fun_l22_n529(x)
+ if (x < 1)
+ fun_l23_n643(x)
+ else
+ fun_l23_n652(x)
+ end
+end
+
+def fun_l22_n530(x)
+ if (x < 1)
+ fun_l23_n254(x)
+ else
+ fun_l23_n283(x)
+ end
+end
+
+def fun_l22_n531(x)
+ if (x < 1)
+ fun_l23_n750(x)
+ else
+ fun_l23_n969(x)
+ end
+end
+
+def fun_l22_n532(x)
+ if (x < 1)
+ fun_l23_n343(x)
+ else
+ fun_l23_n578(x)
+ end
+end
+
+def fun_l22_n533(x)
+ if (x < 1)
+ fun_l23_n240(x)
+ else
+ fun_l23_n698(x)
+ end
+end
+
+def fun_l22_n534(x)
+ if (x < 1)
+ fun_l23_n497(x)
+ else
+ fun_l23_n992(x)
+ end
+end
+
+def fun_l22_n535(x)
+ if (x < 1)
+ fun_l23_n554(x)
+ else
+ fun_l23_n53(x)
+ end
+end
+
+def fun_l22_n536(x)
+ if (x < 1)
+ fun_l23_n165(x)
+ else
+ fun_l23_n467(x)
+ end
+end
+
+def fun_l22_n537(x)
+ if (x < 1)
+ fun_l23_n2(x)
+ else
+ fun_l23_n560(x)
+ end
+end
+
+def fun_l22_n538(x)
+ if (x < 1)
+ fun_l23_n151(x)
+ else
+ fun_l23_n434(x)
+ end
+end
+
+def fun_l22_n539(x)
+ if (x < 1)
+ fun_l23_n108(x)
+ else
+ fun_l23_n108(x)
+ end
+end
+
+def fun_l22_n540(x)
+ if (x < 1)
+ fun_l23_n879(x)
+ else
+ fun_l23_n608(x)
+ end
+end
+
+def fun_l22_n541(x)
+ if (x < 1)
+ fun_l23_n160(x)
+ else
+ fun_l23_n820(x)
+ end
+end
+
+def fun_l22_n542(x)
+ if (x < 1)
+ fun_l23_n813(x)
+ else
+ fun_l23_n169(x)
+ end
+end
+
+def fun_l22_n543(x)
+ if (x < 1)
+ fun_l23_n151(x)
+ else
+ fun_l23_n420(x)
+ end
+end
+
+def fun_l22_n544(x)
+ if (x < 1)
+ fun_l23_n81(x)
+ else
+ fun_l23_n226(x)
+ end
+end
+
+def fun_l22_n545(x)
+ if (x < 1)
+ fun_l23_n464(x)
+ else
+ fun_l23_n602(x)
+ end
+end
+
+def fun_l22_n546(x)
+ if (x < 1)
+ fun_l23_n798(x)
+ else
+ fun_l23_n395(x)
+ end
+end
+
+def fun_l22_n547(x)
+ if (x < 1)
+ fun_l23_n597(x)
+ else
+ fun_l23_n147(x)
+ end
+end
+
+def fun_l22_n548(x)
+ if (x < 1)
+ fun_l23_n952(x)
+ else
+ fun_l23_n515(x)
+ end
+end
+
+def fun_l22_n549(x)
+ if (x < 1)
+ fun_l23_n134(x)
+ else
+ fun_l23_n154(x)
+ end
+end
+
+def fun_l22_n550(x)
+ if (x < 1)
+ fun_l23_n35(x)
+ else
+ fun_l23_n492(x)
+ end
+end
+
+def fun_l22_n551(x)
+ if (x < 1)
+ fun_l23_n878(x)
+ else
+ fun_l23_n899(x)
+ end
+end
+
+def fun_l22_n552(x)
+ if (x < 1)
+ fun_l23_n574(x)
+ else
+ fun_l23_n108(x)
+ end
+end
+
+def fun_l22_n553(x)
+ if (x < 1)
+ fun_l23_n386(x)
+ else
+ fun_l23_n565(x)
+ end
+end
+
+def fun_l22_n554(x)
+ if (x < 1)
+ fun_l23_n551(x)
+ else
+ fun_l23_n905(x)
+ end
+end
+
+def fun_l22_n555(x)
+ if (x < 1)
+ fun_l23_n680(x)
+ else
+ fun_l23_n367(x)
+ end
+end
+
+def fun_l22_n556(x)
+ if (x < 1)
+ fun_l23_n452(x)
+ else
+ fun_l23_n211(x)
+ end
+end
+
+def fun_l22_n557(x)
+ if (x < 1)
+ fun_l23_n597(x)
+ else
+ fun_l23_n112(x)
+ end
+end
+
+def fun_l22_n558(x)
+ if (x < 1)
+ fun_l23_n22(x)
+ else
+ fun_l23_n966(x)
+ end
+end
+
+def fun_l22_n559(x)
+ if (x < 1)
+ fun_l23_n512(x)
+ else
+ fun_l23_n337(x)
+ end
+end
+
+def fun_l22_n560(x)
+ if (x < 1)
+ fun_l23_n649(x)
+ else
+ fun_l23_n361(x)
+ end
+end
+
+def fun_l22_n561(x)
+ if (x < 1)
+ fun_l23_n500(x)
+ else
+ fun_l23_n113(x)
+ end
+end
+
+def fun_l22_n562(x)
+ if (x < 1)
+ fun_l23_n455(x)
+ else
+ fun_l23_n734(x)
+ end
+end
+
+def fun_l22_n563(x)
+ if (x < 1)
+ fun_l23_n847(x)
+ else
+ fun_l23_n86(x)
+ end
+end
+
+def fun_l22_n564(x)
+ if (x < 1)
+ fun_l23_n251(x)
+ else
+ fun_l23_n203(x)
+ end
+end
+
+def fun_l22_n565(x)
+ if (x < 1)
+ fun_l23_n977(x)
+ else
+ fun_l23_n893(x)
+ end
+end
+
+def fun_l22_n566(x)
+ if (x < 1)
+ fun_l23_n693(x)
+ else
+ fun_l23_n507(x)
+ end
+end
+
+def fun_l22_n567(x)
+ if (x < 1)
+ fun_l23_n194(x)
+ else
+ fun_l23_n972(x)
+ end
+end
+
+def fun_l22_n568(x)
+ if (x < 1)
+ fun_l23_n44(x)
+ else
+ fun_l23_n694(x)
+ end
+end
+
+def fun_l22_n569(x)
+ if (x < 1)
+ fun_l23_n277(x)
+ else
+ fun_l23_n317(x)
+ end
+end
+
+def fun_l22_n570(x)
+ if (x < 1)
+ fun_l23_n40(x)
+ else
+ fun_l23_n10(x)
+ end
+end
+
+def fun_l22_n571(x)
+ if (x < 1)
+ fun_l23_n199(x)
+ else
+ fun_l23_n454(x)
+ end
+end
+
+def fun_l22_n572(x)
+ if (x < 1)
+ fun_l23_n821(x)
+ else
+ fun_l23_n556(x)
+ end
+end
+
+def fun_l22_n573(x)
+ if (x < 1)
+ fun_l23_n142(x)
+ else
+ fun_l23_n307(x)
+ end
+end
+
+def fun_l22_n574(x)
+ if (x < 1)
+ fun_l23_n291(x)
+ else
+ fun_l23_n152(x)
+ end
+end
+
+def fun_l22_n575(x)
+ if (x < 1)
+ fun_l23_n547(x)
+ else
+ fun_l23_n580(x)
+ end
+end
+
+def fun_l22_n576(x)
+ if (x < 1)
+ fun_l23_n841(x)
+ else
+ fun_l23_n518(x)
+ end
+end
+
+def fun_l22_n577(x)
+ if (x < 1)
+ fun_l23_n91(x)
+ else
+ fun_l23_n730(x)
+ end
+end
+
+def fun_l22_n578(x)
+ if (x < 1)
+ fun_l23_n626(x)
+ else
+ fun_l23_n403(x)
+ end
+end
+
+def fun_l22_n579(x)
+ if (x < 1)
+ fun_l23_n12(x)
+ else
+ fun_l23_n863(x)
+ end
+end
+
+def fun_l22_n580(x)
+ if (x < 1)
+ fun_l23_n878(x)
+ else
+ fun_l23_n28(x)
+ end
+end
+
+def fun_l22_n581(x)
+ if (x < 1)
+ fun_l23_n793(x)
+ else
+ fun_l23_n942(x)
+ end
+end
+
+def fun_l22_n582(x)
+ if (x < 1)
+ fun_l23_n168(x)
+ else
+ fun_l23_n102(x)
+ end
+end
+
+def fun_l22_n583(x)
+ if (x < 1)
+ fun_l23_n40(x)
+ else
+ fun_l23_n231(x)
+ end
+end
+
+def fun_l22_n584(x)
+ if (x < 1)
+ fun_l23_n54(x)
+ else
+ fun_l23_n734(x)
+ end
+end
+
+def fun_l22_n585(x)
+ if (x < 1)
+ fun_l23_n878(x)
+ else
+ fun_l23_n938(x)
+ end
+end
+
+def fun_l22_n586(x)
+ if (x < 1)
+ fun_l23_n89(x)
+ else
+ fun_l23_n533(x)
+ end
+end
+
+def fun_l22_n587(x)
+ if (x < 1)
+ fun_l23_n289(x)
+ else
+ fun_l23_n587(x)
+ end
+end
+
+def fun_l22_n588(x)
+ if (x < 1)
+ fun_l23_n716(x)
+ else
+ fun_l23_n785(x)
+ end
+end
+
+def fun_l22_n589(x)
+ if (x < 1)
+ fun_l23_n22(x)
+ else
+ fun_l23_n820(x)
+ end
+end
+
+def fun_l22_n590(x)
+ if (x < 1)
+ fun_l23_n945(x)
+ else
+ fun_l23_n644(x)
+ end
+end
+
+def fun_l22_n591(x)
+ if (x < 1)
+ fun_l23_n209(x)
+ else
+ fun_l23_n86(x)
+ end
+end
+
+def fun_l22_n592(x)
+ if (x < 1)
+ fun_l23_n209(x)
+ else
+ fun_l23_n971(x)
+ end
+end
+
+def fun_l22_n593(x)
+ if (x < 1)
+ fun_l23_n489(x)
+ else
+ fun_l23_n725(x)
+ end
+end
+
+def fun_l22_n594(x)
+ if (x < 1)
+ fun_l23_n42(x)
+ else
+ fun_l23_n405(x)
+ end
+end
+
+def fun_l22_n595(x)
+ if (x < 1)
+ fun_l23_n162(x)
+ else
+ fun_l23_n222(x)
+ end
+end
+
+def fun_l22_n596(x)
+ if (x < 1)
+ fun_l23_n942(x)
+ else
+ fun_l23_n193(x)
+ end
+end
+
+def fun_l22_n597(x)
+ if (x < 1)
+ fun_l23_n616(x)
+ else
+ fun_l23_n806(x)
+ end
+end
+
+def fun_l22_n598(x)
+ if (x < 1)
+ fun_l23_n278(x)
+ else
+ fun_l23_n330(x)
+ end
+end
+
+def fun_l22_n599(x)
+ if (x < 1)
+ fun_l23_n863(x)
+ else
+ fun_l23_n428(x)
+ end
+end
+
+def fun_l22_n600(x)
+ if (x < 1)
+ fun_l23_n315(x)
+ else
+ fun_l23_n319(x)
+ end
+end
+
+def fun_l22_n601(x)
+ if (x < 1)
+ fun_l23_n409(x)
+ else
+ fun_l23_n682(x)
+ end
+end
+
+def fun_l22_n602(x)
+ if (x < 1)
+ fun_l23_n307(x)
+ else
+ fun_l23_n47(x)
+ end
+end
+
+def fun_l22_n603(x)
+ if (x < 1)
+ fun_l23_n578(x)
+ else
+ fun_l23_n762(x)
+ end
+end
+
+def fun_l22_n604(x)
+ if (x < 1)
+ fun_l23_n208(x)
+ else
+ fun_l23_n314(x)
+ end
+end
+
+def fun_l22_n605(x)
+ if (x < 1)
+ fun_l23_n259(x)
+ else
+ fun_l23_n720(x)
+ end
+end
+
+def fun_l22_n606(x)
+ if (x < 1)
+ fun_l23_n272(x)
+ else
+ fun_l23_n619(x)
+ end
+end
+
+def fun_l22_n607(x)
+ if (x < 1)
+ fun_l23_n550(x)
+ else
+ fun_l23_n850(x)
+ end
+end
+
+def fun_l22_n608(x)
+ if (x < 1)
+ fun_l23_n617(x)
+ else
+ fun_l23_n999(x)
+ end
+end
+
+def fun_l22_n609(x)
+ if (x < 1)
+ fun_l23_n203(x)
+ else
+ fun_l23_n597(x)
+ end
+end
+
+def fun_l22_n610(x)
+ if (x < 1)
+ fun_l23_n547(x)
+ else
+ fun_l23_n252(x)
+ end
+end
+
+def fun_l22_n611(x)
+ if (x < 1)
+ fun_l23_n427(x)
+ else
+ fun_l23_n16(x)
+ end
+end
+
+def fun_l22_n612(x)
+ if (x < 1)
+ fun_l23_n236(x)
+ else
+ fun_l23_n142(x)
+ end
+end
+
+def fun_l22_n613(x)
+ if (x < 1)
+ fun_l23_n94(x)
+ else
+ fun_l23_n739(x)
+ end
+end
+
+def fun_l22_n614(x)
+ if (x < 1)
+ fun_l23_n504(x)
+ else
+ fun_l23_n101(x)
+ end
+end
+
+def fun_l22_n615(x)
+ if (x < 1)
+ fun_l23_n469(x)
+ else
+ fun_l23_n650(x)
+ end
+end
+
+def fun_l22_n616(x)
+ if (x < 1)
+ fun_l23_n752(x)
+ else
+ fun_l23_n262(x)
+ end
+end
+
+def fun_l22_n617(x)
+ if (x < 1)
+ fun_l23_n256(x)
+ else
+ fun_l23_n269(x)
+ end
+end
+
+def fun_l22_n618(x)
+ if (x < 1)
+ fun_l23_n784(x)
+ else
+ fun_l23_n402(x)
+ end
+end
+
+def fun_l22_n619(x)
+ if (x < 1)
+ fun_l23_n405(x)
+ else
+ fun_l23_n585(x)
+ end
+end
+
+def fun_l22_n620(x)
+ if (x < 1)
+ fun_l23_n33(x)
+ else
+ fun_l23_n357(x)
+ end
+end
+
+def fun_l22_n621(x)
+ if (x < 1)
+ fun_l23_n448(x)
+ else
+ fun_l23_n618(x)
+ end
+end
+
+def fun_l22_n622(x)
+ if (x < 1)
+ fun_l23_n520(x)
+ else
+ fun_l23_n612(x)
+ end
+end
+
+def fun_l22_n623(x)
+ if (x < 1)
+ fun_l23_n54(x)
+ else
+ fun_l23_n872(x)
+ end
+end
+
+def fun_l22_n624(x)
+ if (x < 1)
+ fun_l23_n915(x)
+ else
+ fun_l23_n1(x)
+ end
+end
+
+def fun_l22_n625(x)
+ if (x < 1)
+ fun_l23_n274(x)
+ else
+ fun_l23_n509(x)
+ end
+end
+
+def fun_l22_n626(x)
+ if (x < 1)
+ fun_l23_n506(x)
+ else
+ fun_l23_n938(x)
+ end
+end
+
+def fun_l22_n627(x)
+ if (x < 1)
+ fun_l23_n463(x)
+ else
+ fun_l23_n436(x)
+ end
+end
+
+def fun_l22_n628(x)
+ if (x < 1)
+ fun_l23_n33(x)
+ else
+ fun_l23_n279(x)
+ end
+end
+
+def fun_l22_n629(x)
+ if (x < 1)
+ fun_l23_n825(x)
+ else
+ fun_l23_n11(x)
+ end
+end
+
+def fun_l22_n630(x)
+ if (x < 1)
+ fun_l23_n778(x)
+ else
+ fun_l23_n77(x)
+ end
+end
+
+def fun_l22_n631(x)
+ if (x < 1)
+ fun_l23_n826(x)
+ else
+ fun_l23_n601(x)
+ end
+end
+
+def fun_l22_n632(x)
+ if (x < 1)
+ fun_l23_n973(x)
+ else
+ fun_l23_n444(x)
+ end
+end
+
+def fun_l22_n633(x)
+ if (x < 1)
+ fun_l23_n59(x)
+ else
+ fun_l23_n578(x)
+ end
+end
+
+def fun_l22_n634(x)
+ if (x < 1)
+ fun_l23_n366(x)
+ else
+ fun_l23_n128(x)
+ end
+end
+
+def fun_l22_n635(x)
+ if (x < 1)
+ fun_l23_n733(x)
+ else
+ fun_l23_n486(x)
+ end
+end
+
+def fun_l22_n636(x)
+ if (x < 1)
+ fun_l23_n22(x)
+ else
+ fun_l23_n997(x)
+ end
+end
+
+def fun_l22_n637(x)
+ if (x < 1)
+ fun_l23_n286(x)
+ else
+ fun_l23_n609(x)
+ end
+end
+
+def fun_l22_n638(x)
+ if (x < 1)
+ fun_l23_n519(x)
+ else
+ fun_l23_n381(x)
+ end
+end
+
+def fun_l22_n639(x)
+ if (x < 1)
+ fun_l23_n697(x)
+ else
+ fun_l23_n954(x)
+ end
+end
+
+def fun_l22_n640(x)
+ if (x < 1)
+ fun_l23_n348(x)
+ else
+ fun_l23_n261(x)
+ end
+end
+
+def fun_l22_n641(x)
+ if (x < 1)
+ fun_l23_n426(x)
+ else
+ fun_l23_n166(x)
+ end
+end
+
+def fun_l22_n642(x)
+ if (x < 1)
+ fun_l23_n488(x)
+ else
+ fun_l23_n79(x)
+ end
+end
+
+def fun_l22_n643(x)
+ if (x < 1)
+ fun_l23_n186(x)
+ else
+ fun_l23_n723(x)
+ end
+end
+
+def fun_l22_n644(x)
+ if (x < 1)
+ fun_l23_n582(x)
+ else
+ fun_l23_n365(x)
+ end
+end
+
+def fun_l22_n645(x)
+ if (x < 1)
+ fun_l23_n36(x)
+ else
+ fun_l23_n726(x)
+ end
+end
+
+def fun_l22_n646(x)
+ if (x < 1)
+ fun_l23_n585(x)
+ else
+ fun_l23_n770(x)
+ end
+end
+
+def fun_l22_n647(x)
+ if (x < 1)
+ fun_l23_n68(x)
+ else
+ fun_l23_n261(x)
+ end
+end
+
+def fun_l22_n648(x)
+ if (x < 1)
+ fun_l23_n208(x)
+ else
+ fun_l23_n302(x)
+ end
+end
+
+def fun_l22_n649(x)
+ if (x < 1)
+ fun_l23_n539(x)
+ else
+ fun_l23_n731(x)
+ end
+end
+
+def fun_l22_n650(x)
+ if (x < 1)
+ fun_l23_n709(x)
+ else
+ fun_l23_n144(x)
+ end
+end
+
+def fun_l22_n651(x)
+ if (x < 1)
+ fun_l23_n802(x)
+ else
+ fun_l23_n886(x)
+ end
+end
+
+def fun_l22_n652(x)
+ if (x < 1)
+ fun_l23_n796(x)
+ else
+ fun_l23_n574(x)
+ end
+end
+
+def fun_l22_n653(x)
+ if (x < 1)
+ fun_l23_n755(x)
+ else
+ fun_l23_n960(x)
+ end
+end
+
+def fun_l22_n654(x)
+ if (x < 1)
+ fun_l23_n415(x)
+ else
+ fun_l23_n543(x)
+ end
+end
+
+def fun_l22_n655(x)
+ if (x < 1)
+ fun_l23_n932(x)
+ else
+ fun_l23_n412(x)
+ end
+end
+
+def fun_l22_n656(x)
+ if (x < 1)
+ fun_l23_n216(x)
+ else
+ fun_l23_n869(x)
+ end
+end
+
+def fun_l22_n657(x)
+ if (x < 1)
+ fun_l23_n750(x)
+ else
+ fun_l23_n66(x)
+ end
+end
+
+def fun_l22_n658(x)
+ if (x < 1)
+ fun_l23_n400(x)
+ else
+ fun_l23_n31(x)
+ end
+end
+
+def fun_l22_n659(x)
+ if (x < 1)
+ fun_l23_n815(x)
+ else
+ fun_l23_n866(x)
+ end
+end
+
+def fun_l22_n660(x)
+ if (x < 1)
+ fun_l23_n459(x)
+ else
+ fun_l23_n833(x)
+ end
+end
+
+def fun_l22_n661(x)
+ if (x < 1)
+ fun_l23_n167(x)
+ else
+ fun_l23_n861(x)
+ end
+end
+
+def fun_l22_n662(x)
+ if (x < 1)
+ fun_l23_n789(x)
+ else
+ fun_l23_n543(x)
+ end
+end
+
+def fun_l22_n663(x)
+ if (x < 1)
+ fun_l23_n850(x)
+ else
+ fun_l23_n899(x)
+ end
+end
+
+def fun_l22_n664(x)
+ if (x < 1)
+ fun_l23_n986(x)
+ else
+ fun_l23_n924(x)
+ end
+end
+
+def fun_l22_n665(x)
+ if (x < 1)
+ fun_l23_n667(x)
+ else
+ fun_l23_n510(x)
+ end
+end
+
+def fun_l22_n666(x)
+ if (x < 1)
+ fun_l23_n744(x)
+ else
+ fun_l23_n530(x)
+ end
+end
+
+def fun_l22_n667(x)
+ if (x < 1)
+ fun_l23_n930(x)
+ else
+ fun_l23_n693(x)
+ end
+end
+
+def fun_l22_n668(x)
+ if (x < 1)
+ fun_l23_n942(x)
+ else
+ fun_l23_n785(x)
+ end
+end
+
+def fun_l22_n669(x)
+ if (x < 1)
+ fun_l23_n520(x)
+ else
+ fun_l23_n342(x)
+ end
+end
+
+def fun_l22_n670(x)
+ if (x < 1)
+ fun_l23_n865(x)
+ else
+ fun_l23_n63(x)
+ end
+end
+
+def fun_l22_n671(x)
+ if (x < 1)
+ fun_l23_n173(x)
+ else
+ fun_l23_n142(x)
+ end
+end
+
+def fun_l22_n672(x)
+ if (x < 1)
+ fun_l23_n487(x)
+ else
+ fun_l23_n400(x)
+ end
+end
+
+def fun_l22_n673(x)
+ if (x < 1)
+ fun_l23_n330(x)
+ else
+ fun_l23_n639(x)
+ end
+end
+
+def fun_l22_n674(x)
+ if (x < 1)
+ fun_l23_n593(x)
+ else
+ fun_l23_n653(x)
+ end
+end
+
+def fun_l22_n675(x)
+ if (x < 1)
+ fun_l23_n167(x)
+ else
+ fun_l23_n173(x)
+ end
+end
+
+def fun_l22_n676(x)
+ if (x < 1)
+ fun_l23_n288(x)
+ else
+ fun_l23_n412(x)
+ end
+end
+
+def fun_l22_n677(x)
+ if (x < 1)
+ fun_l23_n266(x)
+ else
+ fun_l23_n728(x)
+ end
+end
+
+def fun_l22_n678(x)
+ if (x < 1)
+ fun_l23_n137(x)
+ else
+ fun_l23_n277(x)
+ end
+end
+
+def fun_l22_n679(x)
+ if (x < 1)
+ fun_l23_n732(x)
+ else
+ fun_l23_n760(x)
+ end
+end
+
+def fun_l22_n680(x)
+ if (x < 1)
+ fun_l23_n372(x)
+ else
+ fun_l23_n26(x)
+ end
+end
+
+def fun_l22_n681(x)
+ if (x < 1)
+ fun_l23_n156(x)
+ else
+ fun_l23_n449(x)
+ end
+end
+
+def fun_l22_n682(x)
+ if (x < 1)
+ fun_l23_n117(x)
+ else
+ fun_l23_n711(x)
+ end
+end
+
+def fun_l22_n683(x)
+ if (x < 1)
+ fun_l23_n732(x)
+ else
+ fun_l23_n922(x)
+ end
+end
+
+def fun_l22_n684(x)
+ if (x < 1)
+ fun_l23_n116(x)
+ else
+ fun_l23_n347(x)
+ end
+end
+
+def fun_l22_n685(x)
+ if (x < 1)
+ fun_l23_n277(x)
+ else
+ fun_l23_n837(x)
+ end
+end
+
+def fun_l22_n686(x)
+ if (x < 1)
+ fun_l23_n578(x)
+ else
+ fun_l23_n290(x)
+ end
+end
+
+def fun_l22_n687(x)
+ if (x < 1)
+ fun_l23_n858(x)
+ else
+ fun_l23_n390(x)
+ end
+end
+
+def fun_l22_n688(x)
+ if (x < 1)
+ fun_l23_n52(x)
+ else
+ fun_l23_n759(x)
+ end
+end
+
+def fun_l22_n689(x)
+ if (x < 1)
+ fun_l23_n873(x)
+ else
+ fun_l23_n25(x)
+ end
+end
+
+def fun_l22_n690(x)
+ if (x < 1)
+ fun_l23_n262(x)
+ else
+ fun_l23_n511(x)
+ end
+end
+
+def fun_l22_n691(x)
+ if (x < 1)
+ fun_l23_n654(x)
+ else
+ fun_l23_n359(x)
+ end
+end
+
+def fun_l22_n692(x)
+ if (x < 1)
+ fun_l23_n933(x)
+ else
+ fun_l23_n369(x)
+ end
+end
+
+def fun_l22_n693(x)
+ if (x < 1)
+ fun_l23_n845(x)
+ else
+ fun_l23_n999(x)
+ end
+end
+
+def fun_l22_n694(x)
+ if (x < 1)
+ fun_l23_n479(x)
+ else
+ fun_l23_n284(x)
+ end
+end
+
+def fun_l22_n695(x)
+ if (x < 1)
+ fun_l23_n383(x)
+ else
+ fun_l23_n91(x)
+ end
+end
+
+def fun_l22_n696(x)
+ if (x < 1)
+ fun_l23_n467(x)
+ else
+ fun_l23_n555(x)
+ end
+end
+
+def fun_l22_n697(x)
+ if (x < 1)
+ fun_l23_n590(x)
+ else
+ fun_l23_n372(x)
+ end
+end
+
+def fun_l22_n698(x)
+ if (x < 1)
+ fun_l23_n706(x)
+ else
+ fun_l23_n195(x)
+ end
+end
+
+def fun_l22_n699(x)
+ if (x < 1)
+ fun_l23_n621(x)
+ else
+ fun_l23_n265(x)
+ end
+end
+
+def fun_l22_n700(x)
+ if (x < 1)
+ fun_l23_n505(x)
+ else
+ fun_l23_n831(x)
+ end
+end
+
+def fun_l22_n701(x)
+ if (x < 1)
+ fun_l23_n361(x)
+ else
+ fun_l23_n74(x)
+ end
+end
+
+def fun_l22_n702(x)
+ if (x < 1)
+ fun_l23_n734(x)
+ else
+ fun_l23_n922(x)
+ end
+end
+
+def fun_l22_n703(x)
+ if (x < 1)
+ fun_l23_n457(x)
+ else
+ fun_l23_n219(x)
+ end
+end
+
+def fun_l22_n704(x)
+ if (x < 1)
+ fun_l23_n436(x)
+ else
+ fun_l23_n733(x)
+ end
+end
+
+def fun_l22_n705(x)
+ if (x < 1)
+ fun_l23_n150(x)
+ else
+ fun_l23_n463(x)
+ end
+end
+
+def fun_l22_n706(x)
+ if (x < 1)
+ fun_l23_n486(x)
+ else
+ fun_l23_n906(x)
+ end
+end
+
+def fun_l22_n707(x)
+ if (x < 1)
+ fun_l23_n826(x)
+ else
+ fun_l23_n829(x)
+ end
+end
+
+def fun_l22_n708(x)
+ if (x < 1)
+ fun_l23_n186(x)
+ else
+ fun_l23_n555(x)
+ end
+end
+
+def fun_l22_n709(x)
+ if (x < 1)
+ fun_l23_n186(x)
+ else
+ fun_l23_n739(x)
+ end
+end
+
+def fun_l22_n710(x)
+ if (x < 1)
+ fun_l23_n58(x)
+ else
+ fun_l23_n395(x)
+ end
+end
+
+def fun_l22_n711(x)
+ if (x < 1)
+ fun_l23_n916(x)
+ else
+ fun_l23_n546(x)
+ end
+end
+
+def fun_l22_n712(x)
+ if (x < 1)
+ fun_l23_n309(x)
+ else
+ fun_l23_n582(x)
+ end
+end
+
+def fun_l22_n713(x)
+ if (x < 1)
+ fun_l23_n460(x)
+ else
+ fun_l23_n1(x)
+ end
+end
+
+def fun_l22_n714(x)
+ if (x < 1)
+ fun_l23_n270(x)
+ else
+ fun_l23_n888(x)
+ end
+end
+
+def fun_l22_n715(x)
+ if (x < 1)
+ fun_l23_n564(x)
+ else
+ fun_l23_n652(x)
+ end
+end
+
+def fun_l22_n716(x)
+ if (x < 1)
+ fun_l23_n14(x)
+ else
+ fun_l23_n862(x)
+ end
+end
+
+def fun_l22_n717(x)
+ if (x < 1)
+ fun_l23_n15(x)
+ else
+ fun_l23_n366(x)
+ end
+end
+
+def fun_l22_n718(x)
+ if (x < 1)
+ fun_l23_n580(x)
+ else
+ fun_l23_n367(x)
+ end
+end
+
+def fun_l22_n719(x)
+ if (x < 1)
+ fun_l23_n256(x)
+ else
+ fun_l23_n385(x)
+ end
+end
+
+def fun_l22_n720(x)
+ if (x < 1)
+ fun_l23_n735(x)
+ else
+ fun_l23_n811(x)
+ end
+end
+
+def fun_l22_n721(x)
+ if (x < 1)
+ fun_l23_n348(x)
+ else
+ fun_l23_n681(x)
+ end
+end
+
+def fun_l22_n722(x)
+ if (x < 1)
+ fun_l23_n908(x)
+ else
+ fun_l23_n80(x)
+ end
+end
+
+def fun_l22_n723(x)
+ if (x < 1)
+ fun_l23_n523(x)
+ else
+ fun_l23_n91(x)
+ end
+end
+
+def fun_l22_n724(x)
+ if (x < 1)
+ fun_l23_n212(x)
+ else
+ fun_l23_n220(x)
+ end
+end
+
+def fun_l22_n725(x)
+ if (x < 1)
+ fun_l23_n396(x)
+ else
+ fun_l23_n855(x)
+ end
+end
+
+def fun_l22_n726(x)
+ if (x < 1)
+ fun_l23_n717(x)
+ else
+ fun_l23_n314(x)
+ end
+end
+
+def fun_l22_n727(x)
+ if (x < 1)
+ fun_l23_n152(x)
+ else
+ fun_l23_n374(x)
+ end
+end
+
+def fun_l22_n728(x)
+ if (x < 1)
+ fun_l23_n464(x)
+ else
+ fun_l23_n439(x)
+ end
+end
+
+def fun_l22_n729(x)
+ if (x < 1)
+ fun_l23_n631(x)
+ else
+ fun_l23_n601(x)
+ end
+end
+
+def fun_l22_n730(x)
+ if (x < 1)
+ fun_l23_n689(x)
+ else
+ fun_l23_n929(x)
+ end
+end
+
+def fun_l22_n731(x)
+ if (x < 1)
+ fun_l23_n691(x)
+ else
+ fun_l23_n868(x)
+ end
+end
+
+def fun_l22_n732(x)
+ if (x < 1)
+ fun_l23_n629(x)
+ else
+ fun_l23_n997(x)
+ end
+end
+
+def fun_l22_n733(x)
+ if (x < 1)
+ fun_l23_n815(x)
+ else
+ fun_l23_n696(x)
+ end
+end
+
+def fun_l22_n734(x)
+ if (x < 1)
+ fun_l23_n636(x)
+ else
+ fun_l23_n858(x)
+ end
+end
+
+def fun_l22_n735(x)
+ if (x < 1)
+ fun_l23_n131(x)
+ else
+ fun_l23_n350(x)
+ end
+end
+
+def fun_l22_n736(x)
+ if (x < 1)
+ fun_l23_n509(x)
+ else
+ fun_l23_n197(x)
+ end
+end
+
+def fun_l22_n737(x)
+ if (x < 1)
+ fun_l23_n549(x)
+ else
+ fun_l23_n16(x)
+ end
+end
+
+def fun_l22_n738(x)
+ if (x < 1)
+ fun_l23_n797(x)
+ else
+ fun_l23_n829(x)
+ end
+end
+
+def fun_l22_n739(x)
+ if (x < 1)
+ fun_l23_n78(x)
+ else
+ fun_l23_n299(x)
+ end
+end
+
+def fun_l22_n740(x)
+ if (x < 1)
+ fun_l23_n165(x)
+ else
+ fun_l23_n822(x)
+ end
+end
+
+def fun_l22_n741(x)
+ if (x < 1)
+ fun_l23_n494(x)
+ else
+ fun_l23_n226(x)
+ end
+end
+
+def fun_l22_n742(x)
+ if (x < 1)
+ fun_l23_n930(x)
+ else
+ fun_l23_n301(x)
+ end
+end
+
+def fun_l22_n743(x)
+ if (x < 1)
+ fun_l23_n357(x)
+ else
+ fun_l23_n399(x)
+ end
+end
+
+def fun_l22_n744(x)
+ if (x < 1)
+ fun_l23_n865(x)
+ else
+ fun_l23_n499(x)
+ end
+end
+
+def fun_l22_n745(x)
+ if (x < 1)
+ fun_l23_n437(x)
+ else
+ fun_l23_n145(x)
+ end
+end
+
+def fun_l22_n746(x)
+ if (x < 1)
+ fun_l23_n883(x)
+ else
+ fun_l23_n269(x)
+ end
+end
+
+def fun_l22_n747(x)
+ if (x < 1)
+ fun_l23_n323(x)
+ else
+ fun_l23_n199(x)
+ end
+end
+
+def fun_l22_n748(x)
+ if (x < 1)
+ fun_l23_n843(x)
+ else
+ fun_l23_n179(x)
+ end
+end
+
+def fun_l22_n749(x)
+ if (x < 1)
+ fun_l23_n413(x)
+ else
+ fun_l23_n195(x)
+ end
+end
+
+def fun_l22_n750(x)
+ if (x < 1)
+ fun_l23_n50(x)
+ else
+ fun_l23_n219(x)
+ end
+end
+
+def fun_l22_n751(x)
+ if (x < 1)
+ fun_l23_n574(x)
+ else
+ fun_l23_n649(x)
+ end
+end
+
+def fun_l22_n752(x)
+ if (x < 1)
+ fun_l23_n495(x)
+ else
+ fun_l23_n664(x)
+ end
+end
+
+def fun_l22_n753(x)
+ if (x < 1)
+ fun_l23_n899(x)
+ else
+ fun_l23_n14(x)
+ end
+end
+
+def fun_l22_n754(x)
+ if (x < 1)
+ fun_l23_n230(x)
+ else
+ fun_l23_n933(x)
+ end
+end
+
+def fun_l22_n755(x)
+ if (x < 1)
+ fun_l23_n236(x)
+ else
+ fun_l23_n854(x)
+ end
+end
+
+def fun_l22_n756(x)
+ if (x < 1)
+ fun_l23_n786(x)
+ else
+ fun_l23_n599(x)
+ end
+end
+
+def fun_l22_n757(x)
+ if (x < 1)
+ fun_l23_n921(x)
+ else
+ fun_l23_n805(x)
+ end
+end
+
+def fun_l22_n758(x)
+ if (x < 1)
+ fun_l23_n990(x)
+ else
+ fun_l23_n724(x)
+ end
+end
+
+def fun_l22_n759(x)
+ if (x < 1)
+ fun_l23_n376(x)
+ else
+ fun_l23_n568(x)
+ end
+end
+
+def fun_l22_n760(x)
+ if (x < 1)
+ fun_l23_n676(x)
+ else
+ fun_l23_n995(x)
+ end
+end
+
+def fun_l22_n761(x)
+ if (x < 1)
+ fun_l23_n144(x)
+ else
+ fun_l23_n104(x)
+ end
+end
+
+def fun_l22_n762(x)
+ if (x < 1)
+ fun_l23_n463(x)
+ else
+ fun_l23_n736(x)
+ end
+end
+
+def fun_l22_n763(x)
+ if (x < 1)
+ fun_l23_n436(x)
+ else
+ fun_l23_n475(x)
+ end
+end
+
+def fun_l22_n764(x)
+ if (x < 1)
+ fun_l23_n607(x)
+ else
+ fun_l23_n737(x)
+ end
+end
+
+def fun_l22_n765(x)
+ if (x < 1)
+ fun_l23_n108(x)
+ else
+ fun_l23_n396(x)
+ end
+end
+
+def fun_l22_n766(x)
+ if (x < 1)
+ fun_l23_n35(x)
+ else
+ fun_l23_n422(x)
+ end
+end
+
+def fun_l22_n767(x)
+ if (x < 1)
+ fun_l23_n541(x)
+ else
+ fun_l23_n756(x)
+ end
+end
+
+def fun_l22_n768(x)
+ if (x < 1)
+ fun_l23_n558(x)
+ else
+ fun_l23_n858(x)
+ end
+end
+
+def fun_l22_n769(x)
+ if (x < 1)
+ fun_l23_n153(x)
+ else
+ fun_l23_n544(x)
+ end
+end
+
+def fun_l22_n770(x)
+ if (x < 1)
+ fun_l23_n201(x)
+ else
+ fun_l23_n905(x)
+ end
+end
+
+def fun_l22_n771(x)
+ if (x < 1)
+ fun_l23_n373(x)
+ else
+ fun_l23_n420(x)
+ end
+end
+
+def fun_l22_n772(x)
+ if (x < 1)
+ fun_l23_n635(x)
+ else
+ fun_l23_n464(x)
+ end
+end
+
+def fun_l22_n773(x)
+ if (x < 1)
+ fun_l23_n822(x)
+ else
+ fun_l23_n803(x)
+ end
+end
+
+def fun_l22_n774(x)
+ if (x < 1)
+ fun_l23_n118(x)
+ else
+ fun_l23_n127(x)
+ end
+end
+
+def fun_l22_n775(x)
+ if (x < 1)
+ fun_l23_n364(x)
+ else
+ fun_l23_n512(x)
+ end
+end
+
+def fun_l22_n776(x)
+ if (x < 1)
+ fun_l23_n186(x)
+ else
+ fun_l23_n275(x)
+ end
+end
+
+def fun_l22_n777(x)
+ if (x < 1)
+ fun_l23_n803(x)
+ else
+ fun_l23_n105(x)
+ end
+end
+
+def fun_l22_n778(x)
+ if (x < 1)
+ fun_l23_n535(x)
+ else
+ fun_l23_n569(x)
+ end
+end
+
+def fun_l22_n779(x)
+ if (x < 1)
+ fun_l23_n847(x)
+ else
+ fun_l23_n505(x)
+ end
+end
+
+def fun_l22_n780(x)
+ if (x < 1)
+ fun_l23_n323(x)
+ else
+ fun_l23_n552(x)
+ end
+end
+
+def fun_l22_n781(x)
+ if (x < 1)
+ fun_l23_n294(x)
+ else
+ fun_l23_n914(x)
+ end
+end
+
+def fun_l22_n782(x)
+ if (x < 1)
+ fun_l23_n887(x)
+ else
+ fun_l23_n214(x)
+ end
+end
+
+def fun_l22_n783(x)
+ if (x < 1)
+ fun_l23_n900(x)
+ else
+ fun_l23_n729(x)
+ end
+end
+
+def fun_l22_n784(x)
+ if (x < 1)
+ fun_l23_n458(x)
+ else
+ fun_l23_n233(x)
+ end
+end
+
+def fun_l22_n785(x)
+ if (x < 1)
+ fun_l23_n553(x)
+ else
+ fun_l23_n306(x)
+ end
+end
+
+def fun_l22_n786(x)
+ if (x < 1)
+ fun_l23_n853(x)
+ else
+ fun_l23_n946(x)
+ end
+end
+
+def fun_l22_n787(x)
+ if (x < 1)
+ fun_l23_n595(x)
+ else
+ fun_l23_n288(x)
+ end
+end
+
+def fun_l22_n788(x)
+ if (x < 1)
+ fun_l23_n785(x)
+ else
+ fun_l23_n752(x)
+ end
+end
+
+def fun_l22_n789(x)
+ if (x < 1)
+ fun_l23_n787(x)
+ else
+ fun_l23_n788(x)
+ end
+end
+
+def fun_l22_n790(x)
+ if (x < 1)
+ fun_l23_n461(x)
+ else
+ fun_l23_n251(x)
+ end
+end
+
+def fun_l22_n791(x)
+ if (x < 1)
+ fun_l23_n523(x)
+ else
+ fun_l23_n328(x)
+ end
+end
+
+def fun_l22_n792(x)
+ if (x < 1)
+ fun_l23_n200(x)
+ else
+ fun_l23_n689(x)
+ end
+end
+
+def fun_l22_n793(x)
+ if (x < 1)
+ fun_l23_n612(x)
+ else
+ fun_l23_n398(x)
+ end
+end
+
+def fun_l22_n794(x)
+ if (x < 1)
+ fun_l23_n937(x)
+ else
+ fun_l23_n965(x)
+ end
+end
+
+def fun_l22_n795(x)
+ if (x < 1)
+ fun_l23_n362(x)
+ else
+ fun_l23_n789(x)
+ end
+end
+
+def fun_l22_n796(x)
+ if (x < 1)
+ fun_l23_n145(x)
+ else
+ fun_l23_n36(x)
+ end
+end
+
+def fun_l22_n797(x)
+ if (x < 1)
+ fun_l23_n923(x)
+ else
+ fun_l23_n251(x)
+ end
+end
+
+def fun_l22_n798(x)
+ if (x < 1)
+ fun_l23_n15(x)
+ else
+ fun_l23_n563(x)
+ end
+end
+
+def fun_l22_n799(x)
+ if (x < 1)
+ fun_l23_n554(x)
+ else
+ fun_l23_n336(x)
+ end
+end
+
+def fun_l22_n800(x)
+ if (x < 1)
+ fun_l23_n939(x)
+ else
+ fun_l23_n993(x)
+ end
+end
+
+def fun_l22_n801(x)
+ if (x < 1)
+ fun_l23_n506(x)
+ else
+ fun_l23_n656(x)
+ end
+end
+
+def fun_l22_n802(x)
+ if (x < 1)
+ fun_l23_n591(x)
+ else
+ fun_l23_n582(x)
+ end
+end
+
+def fun_l22_n803(x)
+ if (x < 1)
+ fun_l23_n707(x)
+ else
+ fun_l23_n235(x)
+ end
+end
+
+def fun_l22_n804(x)
+ if (x < 1)
+ fun_l23_n474(x)
+ else
+ fun_l23_n253(x)
+ end
+end
+
+def fun_l22_n805(x)
+ if (x < 1)
+ fun_l23_n707(x)
+ else
+ fun_l23_n885(x)
+ end
+end
+
+def fun_l22_n806(x)
+ if (x < 1)
+ fun_l23_n155(x)
+ else
+ fun_l23_n210(x)
+ end
+end
+
+def fun_l22_n807(x)
+ if (x < 1)
+ fun_l23_n489(x)
+ else
+ fun_l23_n249(x)
+ end
+end
+
+def fun_l22_n808(x)
+ if (x < 1)
+ fun_l23_n840(x)
+ else
+ fun_l23_n748(x)
+ end
+end
+
+def fun_l22_n809(x)
+ if (x < 1)
+ fun_l23_n910(x)
+ else
+ fun_l23_n884(x)
+ end
+end
+
+def fun_l22_n810(x)
+ if (x < 1)
+ fun_l23_n653(x)
+ else
+ fun_l23_n321(x)
+ end
+end
+
+def fun_l22_n811(x)
+ if (x < 1)
+ fun_l23_n310(x)
+ else
+ fun_l23_n366(x)
+ end
+end
+
+def fun_l22_n812(x)
+ if (x < 1)
+ fun_l23_n441(x)
+ else
+ fun_l23_n795(x)
+ end
+end
+
+def fun_l22_n813(x)
+ if (x < 1)
+ fun_l23_n666(x)
+ else
+ fun_l23_n631(x)
+ end
+end
+
+def fun_l22_n814(x)
+ if (x < 1)
+ fun_l23_n680(x)
+ else
+ fun_l23_n88(x)
+ end
+end
+
+def fun_l22_n815(x)
+ if (x < 1)
+ fun_l23_n80(x)
+ else
+ fun_l23_n989(x)
+ end
+end
+
+def fun_l22_n816(x)
+ if (x < 1)
+ fun_l23_n65(x)
+ else
+ fun_l23_n46(x)
+ end
+end
+
+def fun_l22_n817(x)
+ if (x < 1)
+ fun_l23_n427(x)
+ else
+ fun_l23_n868(x)
+ end
+end
+
+def fun_l22_n818(x)
+ if (x < 1)
+ fun_l23_n900(x)
+ else
+ fun_l23_n213(x)
+ end
+end
+
+def fun_l22_n819(x)
+ if (x < 1)
+ fun_l23_n394(x)
+ else
+ fun_l23_n647(x)
+ end
+end
+
+def fun_l22_n820(x)
+ if (x < 1)
+ fun_l23_n981(x)
+ else
+ fun_l23_n530(x)
+ end
+end
+
+def fun_l22_n821(x)
+ if (x < 1)
+ fun_l23_n806(x)
+ else
+ fun_l23_n511(x)
+ end
+end
+
+def fun_l22_n822(x)
+ if (x < 1)
+ fun_l23_n141(x)
+ else
+ fun_l23_n91(x)
+ end
+end
+
+def fun_l22_n823(x)
+ if (x < 1)
+ fun_l23_n604(x)
+ else
+ fun_l23_n270(x)
+ end
+end
+
+def fun_l22_n824(x)
+ if (x < 1)
+ fun_l23_n347(x)
+ else
+ fun_l23_n937(x)
+ end
+end
+
+def fun_l22_n825(x)
+ if (x < 1)
+ fun_l23_n302(x)
+ else
+ fun_l23_n659(x)
+ end
+end
+
+def fun_l22_n826(x)
+ if (x < 1)
+ fun_l23_n386(x)
+ else
+ fun_l23_n174(x)
+ end
+end
+
+def fun_l22_n827(x)
+ if (x < 1)
+ fun_l23_n347(x)
+ else
+ fun_l23_n659(x)
+ end
+end
+
+def fun_l22_n828(x)
+ if (x < 1)
+ fun_l23_n647(x)
+ else
+ fun_l23_n648(x)
+ end
+end
+
+def fun_l22_n829(x)
+ if (x < 1)
+ fun_l23_n892(x)
+ else
+ fun_l23_n910(x)
+ end
+end
+
+def fun_l22_n830(x)
+ if (x < 1)
+ fun_l23_n274(x)
+ else
+ fun_l23_n739(x)
+ end
+end
+
+def fun_l22_n831(x)
+ if (x < 1)
+ fun_l23_n211(x)
+ else
+ fun_l23_n658(x)
+ end
+end
+
+def fun_l22_n832(x)
+ if (x < 1)
+ fun_l23_n584(x)
+ else
+ fun_l23_n163(x)
+ end
+end
+
+def fun_l22_n833(x)
+ if (x < 1)
+ fun_l23_n598(x)
+ else
+ fun_l23_n735(x)
+ end
+end
+
+def fun_l22_n834(x)
+ if (x < 1)
+ fun_l23_n934(x)
+ else
+ fun_l23_n579(x)
+ end
+end
+
+def fun_l22_n835(x)
+ if (x < 1)
+ fun_l23_n483(x)
+ else
+ fun_l23_n632(x)
+ end
+end
+
+def fun_l22_n836(x)
+ if (x < 1)
+ fun_l23_n329(x)
+ else
+ fun_l23_n799(x)
+ end
+end
+
+def fun_l22_n837(x)
+ if (x < 1)
+ fun_l23_n699(x)
+ else
+ fun_l23_n846(x)
+ end
+end
+
+def fun_l22_n838(x)
+ if (x < 1)
+ fun_l23_n40(x)
+ else
+ fun_l23_n715(x)
+ end
+end
+
+def fun_l22_n839(x)
+ if (x < 1)
+ fun_l23_n917(x)
+ else
+ fun_l23_n595(x)
+ end
+end
+
+def fun_l22_n840(x)
+ if (x < 1)
+ fun_l23_n171(x)
+ else
+ fun_l23_n204(x)
+ end
+end
+
+def fun_l22_n841(x)
+ if (x < 1)
+ fun_l23_n652(x)
+ else
+ fun_l23_n342(x)
+ end
+end
+
+def fun_l22_n842(x)
+ if (x < 1)
+ fun_l23_n853(x)
+ else
+ fun_l23_n981(x)
+ end
+end
+
+def fun_l22_n843(x)
+ if (x < 1)
+ fun_l23_n673(x)
+ else
+ fun_l23_n2(x)
+ end
+end
+
+def fun_l22_n844(x)
+ if (x < 1)
+ fun_l23_n799(x)
+ else
+ fun_l23_n654(x)
+ end
+end
+
+def fun_l22_n845(x)
+ if (x < 1)
+ fun_l23_n989(x)
+ else
+ fun_l23_n563(x)
+ end
+end
+
+def fun_l22_n846(x)
+ if (x < 1)
+ fun_l23_n415(x)
+ else
+ fun_l23_n245(x)
+ end
+end
+
+def fun_l22_n847(x)
+ if (x < 1)
+ fun_l23_n836(x)
+ else
+ fun_l23_n347(x)
+ end
+end
+
+def fun_l22_n848(x)
+ if (x < 1)
+ fun_l23_n493(x)
+ else
+ fun_l23_n712(x)
+ end
+end
+
+def fun_l22_n849(x)
+ if (x < 1)
+ fun_l23_n780(x)
+ else
+ fun_l23_n43(x)
+ end
+end
+
+def fun_l22_n850(x)
+ if (x < 1)
+ fun_l23_n511(x)
+ else
+ fun_l23_n356(x)
+ end
+end
+
+def fun_l22_n851(x)
+ if (x < 1)
+ fun_l23_n229(x)
+ else
+ fun_l23_n355(x)
+ end
+end
+
+def fun_l22_n852(x)
+ if (x < 1)
+ fun_l23_n50(x)
+ else
+ fun_l23_n908(x)
+ end
+end
+
+def fun_l22_n853(x)
+ if (x < 1)
+ fun_l23_n156(x)
+ else
+ fun_l23_n422(x)
+ end
+end
+
+def fun_l22_n854(x)
+ if (x < 1)
+ fun_l23_n448(x)
+ else
+ fun_l23_n763(x)
+ end
+end
+
+def fun_l22_n855(x)
+ if (x < 1)
+ fun_l23_n662(x)
+ else
+ fun_l23_n887(x)
+ end
+end
+
+def fun_l22_n856(x)
+ if (x < 1)
+ fun_l23_n511(x)
+ else
+ fun_l23_n292(x)
+ end
+end
+
+def fun_l22_n857(x)
+ if (x < 1)
+ fun_l23_n313(x)
+ else
+ fun_l23_n207(x)
+ end
+end
+
+def fun_l22_n858(x)
+ if (x < 1)
+ fun_l23_n544(x)
+ else
+ fun_l23_n488(x)
+ end
+end
+
+def fun_l22_n859(x)
+ if (x < 1)
+ fun_l23_n34(x)
+ else
+ fun_l23_n133(x)
+ end
+end
+
+def fun_l22_n860(x)
+ if (x < 1)
+ fun_l23_n739(x)
+ else
+ fun_l23_n127(x)
+ end
+end
+
+def fun_l22_n861(x)
+ if (x < 1)
+ fun_l23_n727(x)
+ else
+ fun_l23_n339(x)
+ end
+end
+
+def fun_l22_n862(x)
+ if (x < 1)
+ fun_l23_n78(x)
+ else
+ fun_l23_n101(x)
+ end
+end
+
+def fun_l22_n863(x)
+ if (x < 1)
+ fun_l23_n310(x)
+ else
+ fun_l23_n884(x)
+ end
+end
+
+def fun_l22_n864(x)
+ if (x < 1)
+ fun_l23_n97(x)
+ else
+ fun_l23_n716(x)
+ end
+end
+
+def fun_l22_n865(x)
+ if (x < 1)
+ fun_l23_n63(x)
+ else
+ fun_l23_n654(x)
+ end
+end
+
+def fun_l22_n866(x)
+ if (x < 1)
+ fun_l23_n336(x)
+ else
+ fun_l23_n334(x)
+ end
+end
+
+def fun_l22_n867(x)
+ if (x < 1)
+ fun_l23_n317(x)
+ else
+ fun_l23_n197(x)
+ end
+end
+
+def fun_l22_n868(x)
+ if (x < 1)
+ fun_l23_n98(x)
+ else
+ fun_l23_n466(x)
+ end
+end
+
+def fun_l22_n869(x)
+ if (x < 1)
+ fun_l23_n157(x)
+ else
+ fun_l23_n43(x)
+ end
+end
+
+def fun_l22_n870(x)
+ if (x < 1)
+ fun_l23_n347(x)
+ else
+ fun_l23_n961(x)
+ end
+end
+
+def fun_l22_n871(x)
+ if (x < 1)
+ fun_l23_n460(x)
+ else
+ fun_l23_n820(x)
+ end
+end
+
+def fun_l22_n872(x)
+ if (x < 1)
+ fun_l23_n216(x)
+ else
+ fun_l23_n419(x)
+ end
+end
+
+def fun_l22_n873(x)
+ if (x < 1)
+ fun_l23_n879(x)
+ else
+ fun_l23_n343(x)
+ end
+end
+
+def fun_l22_n874(x)
+ if (x < 1)
+ fun_l23_n507(x)
+ else
+ fun_l23_n572(x)
+ end
+end
+
+def fun_l22_n875(x)
+ if (x < 1)
+ fun_l23_n959(x)
+ else
+ fun_l23_n750(x)
+ end
+end
+
+def fun_l22_n876(x)
+ if (x < 1)
+ fun_l23_n718(x)
+ else
+ fun_l23_n406(x)
+ end
+end
+
+def fun_l22_n877(x)
+ if (x < 1)
+ fun_l23_n733(x)
+ else
+ fun_l23_n486(x)
+ end
+end
+
+def fun_l22_n878(x)
+ if (x < 1)
+ fun_l23_n95(x)
+ else
+ fun_l23_n842(x)
+ end
+end
+
+def fun_l22_n879(x)
+ if (x < 1)
+ fun_l23_n626(x)
+ else
+ fun_l23_n428(x)
+ end
+end
+
+def fun_l22_n880(x)
+ if (x < 1)
+ fun_l23_n194(x)
+ else
+ fun_l23_n441(x)
+ end
+end
+
+def fun_l22_n881(x)
+ if (x < 1)
+ fun_l23_n10(x)
+ else
+ fun_l23_n727(x)
+ end
+end
+
+def fun_l22_n882(x)
+ if (x < 1)
+ fun_l23_n173(x)
+ else
+ fun_l23_n301(x)
+ end
+end
+
+def fun_l22_n883(x)
+ if (x < 1)
+ fun_l23_n338(x)
+ else
+ fun_l23_n420(x)
+ end
+end
+
+def fun_l22_n884(x)
+ if (x < 1)
+ fun_l23_n615(x)
+ else
+ fun_l23_n923(x)
+ end
+end
+
+def fun_l22_n885(x)
+ if (x < 1)
+ fun_l23_n547(x)
+ else
+ fun_l23_n979(x)
+ end
+end
+
+def fun_l22_n886(x)
+ if (x < 1)
+ fun_l23_n28(x)
+ else
+ fun_l23_n213(x)
+ end
+end
+
+def fun_l22_n887(x)
+ if (x < 1)
+ fun_l23_n919(x)
+ else
+ fun_l23_n228(x)
+ end
+end
+
+def fun_l22_n888(x)
+ if (x < 1)
+ fun_l23_n264(x)
+ else
+ fun_l23_n156(x)
+ end
+end
+
+def fun_l22_n889(x)
+ if (x < 1)
+ fun_l23_n137(x)
+ else
+ fun_l23_n582(x)
+ end
+end
+
+def fun_l22_n890(x)
+ if (x < 1)
+ fun_l23_n468(x)
+ else
+ fun_l23_n409(x)
+ end
+end
+
+def fun_l22_n891(x)
+ if (x < 1)
+ fun_l23_n823(x)
+ else
+ fun_l23_n999(x)
+ end
+end
+
+def fun_l22_n892(x)
+ if (x < 1)
+ fun_l23_n248(x)
+ else
+ fun_l23_n821(x)
+ end
+end
+
+def fun_l22_n893(x)
+ if (x < 1)
+ fun_l23_n117(x)
+ else
+ fun_l23_n127(x)
+ end
+end
+
+def fun_l22_n894(x)
+ if (x < 1)
+ fun_l23_n622(x)
+ else
+ fun_l23_n737(x)
+ end
+end
+
+def fun_l22_n895(x)
+ if (x < 1)
+ fun_l23_n66(x)
+ else
+ fun_l23_n261(x)
+ end
+end
+
+def fun_l22_n896(x)
+ if (x < 1)
+ fun_l23_n245(x)
+ else
+ fun_l23_n18(x)
+ end
+end
+
+def fun_l22_n897(x)
+ if (x < 1)
+ fun_l23_n269(x)
+ else
+ fun_l23_n666(x)
+ end
+end
+
+def fun_l22_n898(x)
+ if (x < 1)
+ fun_l23_n807(x)
+ else
+ fun_l23_n449(x)
+ end
+end
+
+def fun_l22_n899(x)
+ if (x < 1)
+ fun_l23_n801(x)
+ else
+ fun_l23_n34(x)
+ end
+end
+
+def fun_l22_n900(x)
+ if (x < 1)
+ fun_l23_n17(x)
+ else
+ fun_l23_n117(x)
+ end
+end
+
+def fun_l22_n901(x)
+ if (x < 1)
+ fun_l23_n677(x)
+ else
+ fun_l23_n872(x)
+ end
+end
+
+def fun_l22_n902(x)
+ if (x < 1)
+ fun_l23_n221(x)
+ else
+ fun_l23_n685(x)
+ end
+end
+
+def fun_l22_n903(x)
+ if (x < 1)
+ fun_l23_n224(x)
+ else
+ fun_l23_n15(x)
+ end
+end
+
+def fun_l22_n904(x)
+ if (x < 1)
+ fun_l23_n353(x)
+ else
+ fun_l23_n367(x)
+ end
+end
+
+def fun_l22_n905(x)
+ if (x < 1)
+ fun_l23_n466(x)
+ else
+ fun_l23_n466(x)
+ end
+end
+
+def fun_l22_n906(x)
+ if (x < 1)
+ fun_l23_n674(x)
+ else
+ fun_l23_n521(x)
+ end
+end
+
+def fun_l22_n907(x)
+ if (x < 1)
+ fun_l23_n978(x)
+ else
+ fun_l23_n79(x)
+ end
+end
+
+def fun_l22_n908(x)
+ if (x < 1)
+ fun_l23_n976(x)
+ else
+ fun_l23_n513(x)
+ end
+end
+
+def fun_l22_n909(x)
+ if (x < 1)
+ fun_l23_n478(x)
+ else
+ fun_l23_n524(x)
+ end
+end
+
+def fun_l22_n910(x)
+ if (x < 1)
+ fun_l23_n744(x)
+ else
+ fun_l23_n451(x)
+ end
+end
+
+def fun_l22_n911(x)
+ if (x < 1)
+ fun_l23_n524(x)
+ else
+ fun_l23_n409(x)
+ end
+end
+
+def fun_l22_n912(x)
+ if (x < 1)
+ fun_l23_n651(x)
+ else
+ fun_l23_n424(x)
+ end
+end
+
+def fun_l22_n913(x)
+ if (x < 1)
+ fun_l23_n740(x)
+ else
+ fun_l23_n841(x)
+ end
+end
+
+def fun_l22_n914(x)
+ if (x < 1)
+ fun_l23_n388(x)
+ else
+ fun_l23_n790(x)
+ end
+end
+
+def fun_l22_n915(x)
+ if (x < 1)
+ fun_l23_n625(x)
+ else
+ fun_l23_n276(x)
+ end
+end
+
+def fun_l22_n916(x)
+ if (x < 1)
+ fun_l23_n322(x)
+ else
+ fun_l23_n598(x)
+ end
+end
+
+def fun_l22_n917(x)
+ if (x < 1)
+ fun_l23_n51(x)
+ else
+ fun_l23_n286(x)
+ end
+end
+
+def fun_l22_n918(x)
+ if (x < 1)
+ fun_l23_n265(x)
+ else
+ fun_l23_n553(x)
+ end
+end
+
+def fun_l22_n919(x)
+ if (x < 1)
+ fun_l23_n525(x)
+ else
+ fun_l23_n825(x)
+ end
+end
+
+def fun_l22_n920(x)
+ if (x < 1)
+ fun_l23_n59(x)
+ else
+ fun_l23_n643(x)
+ end
+end
+
+def fun_l22_n921(x)
+ if (x < 1)
+ fun_l23_n135(x)
+ else
+ fun_l23_n811(x)
+ end
+end
+
+def fun_l22_n922(x)
+ if (x < 1)
+ fun_l23_n587(x)
+ else
+ fun_l23_n564(x)
+ end
+end
+
+def fun_l22_n923(x)
+ if (x < 1)
+ fun_l23_n235(x)
+ else
+ fun_l23_n337(x)
+ end
+end
+
+def fun_l22_n924(x)
+ if (x < 1)
+ fun_l23_n99(x)
+ else
+ fun_l23_n805(x)
+ end
+end
+
+def fun_l22_n925(x)
+ if (x < 1)
+ fun_l23_n360(x)
+ else
+ fun_l23_n67(x)
+ end
+end
+
+def fun_l22_n926(x)
+ if (x < 1)
+ fun_l23_n438(x)
+ else
+ fun_l23_n948(x)
+ end
+end
+
+def fun_l22_n927(x)
+ if (x < 1)
+ fun_l23_n545(x)
+ else
+ fun_l23_n287(x)
+ end
+end
+
+def fun_l22_n928(x)
+ if (x < 1)
+ fun_l23_n632(x)
+ else
+ fun_l23_n769(x)
+ end
+end
+
+def fun_l22_n929(x)
+ if (x < 1)
+ fun_l23_n17(x)
+ else
+ fun_l23_n240(x)
+ end
+end
+
+def fun_l22_n930(x)
+ if (x < 1)
+ fun_l23_n948(x)
+ else
+ fun_l23_n690(x)
+ end
+end
+
+def fun_l22_n931(x)
+ if (x < 1)
+ fun_l23_n12(x)
+ else
+ fun_l23_n640(x)
+ end
+end
+
+def fun_l22_n932(x)
+ if (x < 1)
+ fun_l23_n157(x)
+ else
+ fun_l23_n594(x)
+ end
+end
+
+def fun_l22_n933(x)
+ if (x < 1)
+ fun_l23_n96(x)
+ else
+ fun_l23_n771(x)
+ end
+end
+
+def fun_l22_n934(x)
+ if (x < 1)
+ fun_l23_n237(x)
+ else
+ fun_l23_n910(x)
+ end
+end
+
+def fun_l22_n935(x)
+ if (x < 1)
+ fun_l23_n553(x)
+ else
+ fun_l23_n300(x)
+ end
+end
+
+def fun_l22_n936(x)
+ if (x < 1)
+ fun_l23_n224(x)
+ else
+ fun_l23_n566(x)
+ end
+end
+
+def fun_l22_n937(x)
+ if (x < 1)
+ fun_l23_n314(x)
+ else
+ fun_l23_n328(x)
+ end
+end
+
+def fun_l22_n938(x)
+ if (x < 1)
+ fun_l23_n775(x)
+ else
+ fun_l23_n72(x)
+ end
+end
+
+def fun_l22_n939(x)
+ if (x < 1)
+ fun_l23_n273(x)
+ else
+ fun_l23_n43(x)
+ end
+end
+
+def fun_l22_n940(x)
+ if (x < 1)
+ fun_l23_n215(x)
+ else
+ fun_l23_n646(x)
+ end
+end
+
+def fun_l22_n941(x)
+ if (x < 1)
+ fun_l23_n925(x)
+ else
+ fun_l23_n97(x)
+ end
+end
+
+def fun_l22_n942(x)
+ if (x < 1)
+ fun_l23_n391(x)
+ else
+ fun_l23_n972(x)
+ end
+end
+
+def fun_l22_n943(x)
+ if (x < 1)
+ fun_l23_n276(x)
+ else
+ fun_l23_n725(x)
+ end
+end
+
+def fun_l22_n944(x)
+ if (x < 1)
+ fun_l23_n928(x)
+ else
+ fun_l23_n94(x)
+ end
+end
+
+def fun_l22_n945(x)
+ if (x < 1)
+ fun_l23_n176(x)
+ else
+ fun_l23_n598(x)
+ end
+end
+
+def fun_l22_n946(x)
+ if (x < 1)
+ fun_l23_n530(x)
+ else
+ fun_l23_n37(x)
+ end
+end
+
+def fun_l22_n947(x)
+ if (x < 1)
+ fun_l23_n412(x)
+ else
+ fun_l23_n718(x)
+ end
+end
+
+def fun_l22_n948(x)
+ if (x < 1)
+ fun_l23_n905(x)
+ else
+ fun_l23_n723(x)
+ end
+end
+
+def fun_l22_n949(x)
+ if (x < 1)
+ fun_l23_n451(x)
+ else
+ fun_l23_n232(x)
+ end
+end
+
+def fun_l22_n950(x)
+ if (x < 1)
+ fun_l23_n312(x)
+ else
+ fun_l23_n556(x)
+ end
+end
+
+def fun_l22_n951(x)
+ if (x < 1)
+ fun_l23_n906(x)
+ else
+ fun_l23_n33(x)
+ end
+end
+
+def fun_l22_n952(x)
+ if (x < 1)
+ fun_l23_n964(x)
+ else
+ fun_l23_n46(x)
+ end
+end
+
+def fun_l22_n953(x)
+ if (x < 1)
+ fun_l23_n813(x)
+ else
+ fun_l23_n494(x)
+ end
+end
+
+def fun_l22_n954(x)
+ if (x < 1)
+ fun_l23_n725(x)
+ else
+ fun_l23_n705(x)
+ end
+end
+
+def fun_l22_n955(x)
+ if (x < 1)
+ fun_l23_n525(x)
+ else
+ fun_l23_n370(x)
+ end
+end
+
+def fun_l22_n956(x)
+ if (x < 1)
+ fun_l23_n266(x)
+ else
+ fun_l23_n872(x)
+ end
+end
+
+def fun_l22_n957(x)
+ if (x < 1)
+ fun_l23_n492(x)
+ else
+ fun_l23_n730(x)
+ end
+end
+
+def fun_l22_n958(x)
+ if (x < 1)
+ fun_l23_n950(x)
+ else
+ fun_l23_n557(x)
+ end
+end
+
+def fun_l22_n959(x)
+ if (x < 1)
+ fun_l23_n156(x)
+ else
+ fun_l23_n379(x)
+ end
+end
+
+def fun_l22_n960(x)
+ if (x < 1)
+ fun_l23_n270(x)
+ else
+ fun_l23_n486(x)
+ end
+end
+
+def fun_l22_n961(x)
+ if (x < 1)
+ fun_l23_n789(x)
+ else
+ fun_l23_n316(x)
+ end
+end
+
+def fun_l22_n962(x)
+ if (x < 1)
+ fun_l23_n425(x)
+ else
+ fun_l23_n470(x)
+ end
+end
+
+def fun_l22_n963(x)
+ if (x < 1)
+ fun_l23_n598(x)
+ else
+ fun_l23_n304(x)
+ end
+end
+
+def fun_l22_n964(x)
+ if (x < 1)
+ fun_l23_n249(x)
+ else
+ fun_l23_n517(x)
+ end
+end
+
+def fun_l22_n965(x)
+ if (x < 1)
+ fun_l23_n775(x)
+ else
+ fun_l23_n892(x)
+ end
+end
+
+def fun_l22_n966(x)
+ if (x < 1)
+ fun_l23_n771(x)
+ else
+ fun_l23_n879(x)
+ end
+end
+
+def fun_l22_n967(x)
+ if (x < 1)
+ fun_l23_n596(x)
+ else
+ fun_l23_n22(x)
+ end
+end
+
+def fun_l22_n968(x)
+ if (x < 1)
+ fun_l23_n722(x)
+ else
+ fun_l23_n203(x)
+ end
+end
+
+def fun_l22_n969(x)
+ if (x < 1)
+ fun_l23_n912(x)
+ else
+ fun_l23_n216(x)
+ end
+end
+
+def fun_l22_n970(x)
+ if (x < 1)
+ fun_l23_n230(x)
+ else
+ fun_l23_n295(x)
+ end
+end
+
+def fun_l22_n971(x)
+ if (x < 1)
+ fun_l23_n255(x)
+ else
+ fun_l23_n407(x)
+ end
+end
+
+def fun_l22_n972(x)
+ if (x < 1)
+ fun_l23_n673(x)
+ else
+ fun_l23_n940(x)
+ end
+end
+
+def fun_l22_n973(x)
+ if (x < 1)
+ fun_l23_n793(x)
+ else
+ fun_l23_n776(x)
+ end
+end
+
+def fun_l22_n974(x)
+ if (x < 1)
+ fun_l23_n812(x)
+ else
+ fun_l23_n653(x)
+ end
+end
+
+def fun_l22_n975(x)
+ if (x < 1)
+ fun_l23_n866(x)
+ else
+ fun_l23_n25(x)
+ end
+end
+
+def fun_l22_n976(x)
+ if (x < 1)
+ fun_l23_n143(x)
+ else
+ fun_l23_n236(x)
+ end
+end
+
+def fun_l22_n977(x)
+ if (x < 1)
+ fun_l23_n274(x)
+ else
+ fun_l23_n414(x)
+ end
+end
+
+def fun_l22_n978(x)
+ if (x < 1)
+ fun_l23_n281(x)
+ else
+ fun_l23_n946(x)
+ end
+end
+
+def fun_l22_n979(x)
+ if (x < 1)
+ fun_l23_n255(x)
+ else
+ fun_l23_n585(x)
+ end
+end
+
+def fun_l22_n980(x)
+ if (x < 1)
+ fun_l23_n269(x)
+ else
+ fun_l23_n182(x)
+ end
+end
+
+def fun_l22_n981(x)
+ if (x < 1)
+ fun_l23_n340(x)
+ else
+ fun_l23_n262(x)
+ end
+end
+
+def fun_l22_n982(x)
+ if (x < 1)
+ fun_l23_n713(x)
+ else
+ fun_l23_n247(x)
+ end
+end
+
+def fun_l22_n983(x)
+ if (x < 1)
+ fun_l23_n827(x)
+ else
+ fun_l23_n821(x)
+ end
+end
+
+def fun_l22_n984(x)
+ if (x < 1)
+ fun_l23_n628(x)
+ else
+ fun_l23_n243(x)
+ end
+end
+
+def fun_l22_n985(x)
+ if (x < 1)
+ fun_l23_n479(x)
+ else
+ fun_l23_n440(x)
+ end
+end
+
+def fun_l22_n986(x)
+ if (x < 1)
+ fun_l23_n451(x)
+ else
+ fun_l23_n299(x)
+ end
+end
+
+def fun_l22_n987(x)
+ if (x < 1)
+ fun_l23_n528(x)
+ else
+ fun_l23_n336(x)
+ end
+end
+
+def fun_l22_n988(x)
+ if (x < 1)
+ fun_l23_n825(x)
+ else
+ fun_l23_n767(x)
+ end
+end
+
+def fun_l22_n989(x)
+ if (x < 1)
+ fun_l23_n427(x)
+ else
+ fun_l23_n996(x)
+ end
+end
+
+def fun_l22_n990(x)
+ if (x < 1)
+ fun_l23_n175(x)
+ else
+ fun_l23_n888(x)
+ end
+end
+
+def fun_l22_n991(x)
+ if (x < 1)
+ fun_l23_n351(x)
+ else
+ fun_l23_n982(x)
+ end
+end
+
+def fun_l22_n992(x)
+ if (x < 1)
+ fun_l23_n235(x)
+ else
+ fun_l23_n91(x)
+ end
+end
+
+def fun_l22_n993(x)
+ if (x < 1)
+ fun_l23_n966(x)
+ else
+ fun_l23_n520(x)
+ end
+end
+
+def fun_l22_n994(x)
+ if (x < 1)
+ fun_l23_n854(x)
+ else
+ fun_l23_n937(x)
+ end
+end
+
+def fun_l22_n995(x)
+ if (x < 1)
+ fun_l23_n922(x)
+ else
+ fun_l23_n176(x)
+ end
+end
+
+def fun_l22_n996(x)
+ if (x < 1)
+ fun_l23_n925(x)
+ else
+ fun_l23_n271(x)
+ end
+end
+
+def fun_l22_n997(x)
+ if (x < 1)
+ fun_l23_n513(x)
+ else
+ fun_l23_n195(x)
+ end
+end
+
+def fun_l22_n998(x)
+ if (x < 1)
+ fun_l23_n135(x)
+ else
+ fun_l23_n834(x)
+ end
+end
+
+def fun_l22_n999(x)
+ if (x < 1)
+ fun_l23_n664(x)
+ else
+ fun_l23_n861(x)
+ end
+end
+
+def fun_l23_n0(x)
+ if (x < 1)
+ fun_l24_n327(x)
+ else
+ fun_l24_n159(x)
+ end
+end
+
+def fun_l23_n1(x)
+ if (x < 1)
+ fun_l24_n433(x)
+ else
+ fun_l24_n862(x)
+ end
+end
+
+def fun_l23_n2(x)
+ if (x < 1)
+ fun_l24_n56(x)
+ else
+ fun_l24_n651(x)
+ end
+end
+
+def fun_l23_n3(x)
+ if (x < 1)
+ fun_l24_n267(x)
+ else
+ fun_l24_n566(x)
+ end
+end
+
+def fun_l23_n4(x)
+ if (x < 1)
+ fun_l24_n880(x)
+ else
+ fun_l24_n886(x)
+ end
+end
+
+def fun_l23_n5(x)
+ if (x < 1)
+ fun_l24_n66(x)
+ else
+ fun_l24_n894(x)
+ end
+end
+
+def fun_l23_n6(x)
+ if (x < 1)
+ fun_l24_n965(x)
+ else
+ fun_l24_n453(x)
+ end
+end
+
+def fun_l23_n7(x)
+ if (x < 1)
+ fun_l24_n250(x)
+ else
+ fun_l24_n42(x)
+ end
+end
+
+def fun_l23_n8(x)
+ if (x < 1)
+ fun_l24_n376(x)
+ else
+ fun_l24_n736(x)
+ end
+end
+
+def fun_l23_n9(x)
+ if (x < 1)
+ fun_l24_n434(x)
+ else
+ fun_l24_n334(x)
+ end
+end
+
+def fun_l23_n10(x)
+ if (x < 1)
+ fun_l24_n944(x)
+ else
+ fun_l24_n70(x)
+ end
+end
+
+def fun_l23_n11(x)
+ if (x < 1)
+ fun_l24_n38(x)
+ else
+ fun_l24_n532(x)
+ end
+end
+
+def fun_l23_n12(x)
+ if (x < 1)
+ fun_l24_n603(x)
+ else
+ fun_l24_n682(x)
+ end
+end
+
+def fun_l23_n13(x)
+ if (x < 1)
+ fun_l24_n716(x)
+ else
+ fun_l24_n754(x)
+ end
+end
+
+def fun_l23_n14(x)
+ if (x < 1)
+ fun_l24_n578(x)
+ else
+ fun_l24_n727(x)
+ end
+end
+
+def fun_l23_n15(x)
+ if (x < 1)
+ fun_l24_n166(x)
+ else
+ fun_l24_n224(x)
+ end
+end
+
+def fun_l23_n16(x)
+ if (x < 1)
+ fun_l24_n755(x)
+ else
+ fun_l24_n548(x)
+ end
+end
+
+def fun_l23_n17(x)
+ if (x < 1)
+ fun_l24_n355(x)
+ else
+ fun_l24_n625(x)
+ end
+end
+
+def fun_l23_n18(x)
+ if (x < 1)
+ fun_l24_n400(x)
+ else
+ fun_l24_n834(x)
+ end
+end
+
+def fun_l23_n19(x)
+ if (x < 1)
+ fun_l24_n188(x)
+ else
+ fun_l24_n305(x)
+ end
+end
+
+def fun_l23_n20(x)
+ if (x < 1)
+ fun_l24_n392(x)
+ else
+ fun_l24_n466(x)
+ end
+end
+
+def fun_l23_n21(x)
+ if (x < 1)
+ fun_l24_n937(x)
+ else
+ fun_l24_n603(x)
+ end
+end
+
+def fun_l23_n22(x)
+ if (x < 1)
+ fun_l24_n767(x)
+ else
+ fun_l24_n750(x)
+ end
+end
+
+def fun_l23_n23(x)
+ if (x < 1)
+ fun_l24_n888(x)
+ else
+ fun_l24_n472(x)
+ end
+end
+
+def fun_l23_n24(x)
+ if (x < 1)
+ fun_l24_n937(x)
+ else
+ fun_l24_n192(x)
+ end
+end
+
+def fun_l23_n25(x)
+ if (x < 1)
+ fun_l24_n704(x)
+ else
+ fun_l24_n839(x)
+ end
+end
+
+def fun_l23_n26(x)
+ if (x < 1)
+ fun_l24_n758(x)
+ else
+ fun_l24_n579(x)
+ end
+end
+
+def fun_l23_n27(x)
+ if (x < 1)
+ fun_l24_n161(x)
+ else
+ fun_l24_n268(x)
+ end
+end
+
+def fun_l23_n28(x)
+ if (x < 1)
+ fun_l24_n628(x)
+ else
+ fun_l24_n413(x)
+ end
+end
+
+def fun_l23_n29(x)
+ if (x < 1)
+ fun_l24_n954(x)
+ else
+ fun_l24_n962(x)
+ end
+end
+
+def fun_l23_n30(x)
+ if (x < 1)
+ fun_l24_n723(x)
+ else
+ fun_l24_n220(x)
+ end
+end
+
+def fun_l23_n31(x)
+ if (x < 1)
+ fun_l24_n841(x)
+ else
+ fun_l24_n331(x)
+ end
+end
+
+def fun_l23_n32(x)
+ if (x < 1)
+ fun_l24_n42(x)
+ else
+ fun_l24_n331(x)
+ end
+end
+
+def fun_l23_n33(x)
+ if (x < 1)
+ fun_l24_n873(x)
+ else
+ fun_l24_n58(x)
+ end
+end
+
+def fun_l23_n34(x)
+ if (x < 1)
+ fun_l24_n586(x)
+ else
+ fun_l24_n981(x)
+ end
+end
+
+def fun_l23_n35(x)
+ if (x < 1)
+ fun_l24_n455(x)
+ else
+ fun_l24_n279(x)
+ end
+end
+
+def fun_l23_n36(x)
+ if (x < 1)
+ fun_l24_n401(x)
+ else
+ fun_l24_n633(x)
+ end
+end
+
+def fun_l23_n37(x)
+ if (x < 1)
+ fun_l24_n432(x)
+ else
+ fun_l24_n389(x)
+ end
+end
+
+def fun_l23_n38(x)
+ if (x < 1)
+ fun_l24_n46(x)
+ else
+ fun_l24_n426(x)
+ end
+end
+
+def fun_l23_n39(x)
+ if (x < 1)
+ fun_l24_n679(x)
+ else
+ fun_l24_n222(x)
+ end
+end
+
+def fun_l23_n40(x)
+ if (x < 1)
+ fun_l24_n129(x)
+ else
+ fun_l24_n2(x)
+ end
+end
+
+def fun_l23_n41(x)
+ if (x < 1)
+ fun_l24_n228(x)
+ else
+ fun_l24_n386(x)
+ end
+end
+
+def fun_l23_n42(x)
+ if (x < 1)
+ fun_l24_n740(x)
+ else
+ fun_l24_n605(x)
+ end
+end
+
+def fun_l23_n43(x)
+ if (x < 1)
+ fun_l24_n686(x)
+ else
+ fun_l24_n755(x)
+ end
+end
+
+def fun_l23_n44(x)
+ if (x < 1)
+ fun_l24_n569(x)
+ else
+ fun_l24_n553(x)
+ end
+end
+
+def fun_l23_n45(x)
+ if (x < 1)
+ fun_l24_n908(x)
+ else
+ fun_l24_n388(x)
+ end
+end
+
+def fun_l23_n46(x)
+ if (x < 1)
+ fun_l24_n106(x)
+ else
+ fun_l24_n335(x)
+ end
+end
+
+def fun_l23_n47(x)
+ if (x < 1)
+ fun_l24_n876(x)
+ else
+ fun_l24_n813(x)
+ end
+end
+
+def fun_l23_n48(x)
+ if (x < 1)
+ fun_l24_n337(x)
+ else
+ fun_l24_n967(x)
+ end
+end
+
+def fun_l23_n49(x)
+ if (x < 1)
+ fun_l24_n309(x)
+ else
+ fun_l24_n988(x)
+ end
+end
+
+def fun_l23_n50(x)
+ if (x < 1)
+ fun_l24_n325(x)
+ else
+ fun_l24_n703(x)
+ end
+end
+
+def fun_l23_n51(x)
+ if (x < 1)
+ fun_l24_n755(x)
+ else
+ fun_l24_n146(x)
+ end
+end
+
+def fun_l23_n52(x)
+ if (x < 1)
+ fun_l24_n597(x)
+ else
+ fun_l24_n764(x)
+ end
+end
+
+def fun_l23_n53(x)
+ if (x < 1)
+ fun_l24_n259(x)
+ else
+ fun_l24_n9(x)
+ end
+end
+
+def fun_l23_n54(x)
+ if (x < 1)
+ fun_l24_n73(x)
+ else
+ fun_l24_n700(x)
+ end
+end
+
+def fun_l23_n55(x)
+ if (x < 1)
+ fun_l24_n369(x)
+ else
+ fun_l24_n632(x)
+ end
+end
+
+def fun_l23_n56(x)
+ if (x < 1)
+ fun_l24_n475(x)
+ else
+ fun_l24_n553(x)
+ end
+end
+
+def fun_l23_n57(x)
+ if (x < 1)
+ fun_l24_n473(x)
+ else
+ fun_l24_n84(x)
+ end
+end
+
+def fun_l23_n58(x)
+ if (x < 1)
+ fun_l24_n837(x)
+ else
+ fun_l24_n164(x)
+ end
+end
+
+def fun_l23_n59(x)
+ if (x < 1)
+ fun_l24_n129(x)
+ else
+ fun_l24_n993(x)
+ end
+end
+
+def fun_l23_n60(x)
+ if (x < 1)
+ fun_l24_n201(x)
+ else
+ fun_l24_n644(x)
+ end
+end
+
+def fun_l23_n61(x)
+ if (x < 1)
+ fun_l24_n825(x)
+ else
+ fun_l24_n513(x)
+ end
+end
+
+def fun_l23_n62(x)
+ if (x < 1)
+ fun_l24_n162(x)
+ else
+ fun_l24_n575(x)
+ end
+end
+
+def fun_l23_n63(x)
+ if (x < 1)
+ fun_l24_n959(x)
+ else
+ fun_l24_n514(x)
+ end
+end
+
+def fun_l23_n64(x)
+ if (x < 1)
+ fun_l24_n133(x)
+ else
+ fun_l24_n731(x)
+ end
+end
+
+def fun_l23_n65(x)
+ if (x < 1)
+ fun_l24_n370(x)
+ else
+ fun_l24_n903(x)
+ end
+end
+
+def fun_l23_n66(x)
+ if (x < 1)
+ fun_l24_n787(x)
+ else
+ fun_l24_n11(x)
+ end
+end
+
+def fun_l23_n67(x)
+ if (x < 1)
+ fun_l24_n307(x)
+ else
+ fun_l24_n7(x)
+ end
+end
+
+def fun_l23_n68(x)
+ if (x < 1)
+ fun_l24_n157(x)
+ else
+ fun_l24_n747(x)
+ end
+end
+
+def fun_l23_n69(x)
+ if (x < 1)
+ fun_l24_n435(x)
+ else
+ fun_l24_n763(x)
+ end
+end
+
+def fun_l23_n70(x)
+ if (x < 1)
+ fun_l24_n623(x)
+ else
+ fun_l24_n279(x)
+ end
+end
+
+def fun_l23_n71(x)
+ if (x < 1)
+ fun_l24_n456(x)
+ else
+ fun_l24_n465(x)
+ end
+end
+
+def fun_l23_n72(x)
+ if (x < 1)
+ fun_l24_n411(x)
+ else
+ fun_l24_n397(x)
+ end
+end
+
+def fun_l23_n73(x)
+ if (x < 1)
+ fun_l24_n964(x)
+ else
+ fun_l24_n144(x)
+ end
+end
+
+def fun_l23_n74(x)
+ if (x < 1)
+ fun_l24_n170(x)
+ else
+ fun_l24_n406(x)
+ end
+end
+
+def fun_l23_n75(x)
+ if (x < 1)
+ fun_l24_n838(x)
+ else
+ fun_l24_n295(x)
+ end
+end
+
+def fun_l23_n76(x)
+ if (x < 1)
+ fun_l24_n89(x)
+ else
+ fun_l24_n803(x)
+ end
+end
+
+def fun_l23_n77(x)
+ if (x < 1)
+ fun_l24_n580(x)
+ else
+ fun_l24_n931(x)
+ end
+end
+
+def fun_l23_n78(x)
+ if (x < 1)
+ fun_l24_n504(x)
+ else
+ fun_l24_n150(x)
+ end
+end
+
+def fun_l23_n79(x)
+ if (x < 1)
+ fun_l24_n363(x)
+ else
+ fun_l24_n717(x)
+ end
+end
+
+def fun_l23_n80(x)
+ if (x < 1)
+ fun_l24_n765(x)
+ else
+ fun_l24_n917(x)
+ end
+end
+
+def fun_l23_n81(x)
+ if (x < 1)
+ fun_l24_n673(x)
+ else
+ fun_l24_n549(x)
+ end
+end
+
+def fun_l23_n82(x)
+ if (x < 1)
+ fun_l24_n986(x)
+ else
+ fun_l24_n177(x)
+ end
+end
+
+def fun_l23_n83(x)
+ if (x < 1)
+ fun_l24_n821(x)
+ else
+ fun_l24_n302(x)
+ end
+end
+
+def fun_l23_n84(x)
+ if (x < 1)
+ fun_l24_n530(x)
+ else
+ fun_l24_n744(x)
+ end
+end
+
+def fun_l23_n85(x)
+ if (x < 1)
+ fun_l24_n456(x)
+ else
+ fun_l24_n964(x)
+ end
+end
+
+def fun_l23_n86(x)
+ if (x < 1)
+ fun_l24_n901(x)
+ else
+ fun_l24_n214(x)
+ end
+end
+
+def fun_l23_n87(x)
+ if (x < 1)
+ fun_l24_n308(x)
+ else
+ fun_l24_n329(x)
+ end
+end
+
+def fun_l23_n88(x)
+ if (x < 1)
+ fun_l24_n749(x)
+ else
+ fun_l24_n822(x)
+ end
+end
+
+def fun_l23_n89(x)
+ if (x < 1)
+ fun_l24_n283(x)
+ else
+ fun_l24_n865(x)
+ end
+end
+
+def fun_l23_n90(x)
+ if (x < 1)
+ fun_l24_n834(x)
+ else
+ fun_l24_n422(x)
+ end
+end
+
+def fun_l23_n91(x)
+ if (x < 1)
+ fun_l24_n920(x)
+ else
+ fun_l24_n799(x)
+ end
+end
+
+def fun_l23_n92(x)
+ if (x < 1)
+ fun_l24_n272(x)
+ else
+ fun_l24_n846(x)
+ end
+end
+
+def fun_l23_n93(x)
+ if (x < 1)
+ fun_l24_n447(x)
+ else
+ fun_l24_n809(x)
+ end
+end
+
+def fun_l23_n94(x)
+ if (x < 1)
+ fun_l24_n826(x)
+ else
+ fun_l24_n521(x)
+ end
+end
+
+def fun_l23_n95(x)
+ if (x < 1)
+ fun_l24_n934(x)
+ else
+ fun_l24_n774(x)
+ end
+end
+
+def fun_l23_n96(x)
+ if (x < 1)
+ fun_l24_n440(x)
+ else
+ fun_l24_n40(x)
+ end
+end
+
+def fun_l23_n97(x)
+ if (x < 1)
+ fun_l24_n980(x)
+ else
+ fun_l24_n801(x)
+ end
+end
+
+def fun_l23_n98(x)
+ if (x < 1)
+ fun_l24_n344(x)
+ else
+ fun_l24_n239(x)
+ end
+end
+
+def fun_l23_n99(x)
+ if (x < 1)
+ fun_l24_n918(x)
+ else
+ fun_l24_n241(x)
+ end
+end
+
+def fun_l23_n100(x)
+ if (x < 1)
+ fun_l24_n902(x)
+ else
+ fun_l24_n12(x)
+ end
+end
+
+def fun_l23_n101(x)
+ if (x < 1)
+ fun_l24_n533(x)
+ else
+ fun_l24_n510(x)
+ end
+end
+
+def fun_l23_n102(x)
+ if (x < 1)
+ fun_l24_n337(x)
+ else
+ fun_l24_n144(x)
+ end
+end
+
+def fun_l23_n103(x)
+ if (x < 1)
+ fun_l24_n835(x)
+ else
+ fun_l24_n268(x)
+ end
+end
+
+def fun_l23_n104(x)
+ if (x < 1)
+ fun_l24_n352(x)
+ else
+ fun_l24_n772(x)
+ end
+end
+
+def fun_l23_n105(x)
+ if (x < 1)
+ fun_l24_n135(x)
+ else
+ fun_l24_n97(x)
+ end
+end
+
+def fun_l23_n106(x)
+ if (x < 1)
+ fun_l24_n70(x)
+ else
+ fun_l24_n528(x)
+ end
+end
+
+def fun_l23_n107(x)
+ if (x < 1)
+ fun_l24_n945(x)
+ else
+ fun_l24_n85(x)
+ end
+end
+
+def fun_l23_n108(x)
+ if (x < 1)
+ fun_l24_n233(x)
+ else
+ fun_l24_n637(x)
+ end
+end
+
+def fun_l23_n109(x)
+ if (x < 1)
+ fun_l24_n715(x)
+ else
+ fun_l24_n111(x)
+ end
+end
+
+def fun_l23_n110(x)
+ if (x < 1)
+ fun_l24_n673(x)
+ else
+ fun_l24_n423(x)
+ end
+end
+
+def fun_l23_n111(x)
+ if (x < 1)
+ fun_l24_n408(x)
+ else
+ fun_l24_n5(x)
+ end
+end
+
+def fun_l23_n112(x)
+ if (x < 1)
+ fun_l24_n89(x)
+ else
+ fun_l24_n669(x)
+ end
+end
+
+def fun_l23_n113(x)
+ if (x < 1)
+ fun_l24_n733(x)
+ else
+ fun_l24_n76(x)
+ end
+end
+
+def fun_l23_n114(x)
+ if (x < 1)
+ fun_l24_n767(x)
+ else
+ fun_l24_n465(x)
+ end
+end
+
+def fun_l23_n115(x)
+ if (x < 1)
+ fun_l24_n428(x)
+ else
+ fun_l24_n948(x)
+ end
+end
+
+def fun_l23_n116(x)
+ if (x < 1)
+ fun_l24_n412(x)
+ else
+ fun_l24_n355(x)
+ end
+end
+
+def fun_l23_n117(x)
+ if (x < 1)
+ fun_l24_n550(x)
+ else
+ fun_l24_n616(x)
+ end
+end
+
+def fun_l23_n118(x)
+ if (x < 1)
+ fun_l24_n858(x)
+ else
+ fun_l24_n74(x)
+ end
+end
+
+def fun_l23_n119(x)
+ if (x < 1)
+ fun_l24_n709(x)
+ else
+ fun_l24_n939(x)
+ end
+end
+
+def fun_l23_n120(x)
+ if (x < 1)
+ fun_l24_n712(x)
+ else
+ fun_l24_n74(x)
+ end
+end
+
+def fun_l23_n121(x)
+ if (x < 1)
+ fun_l24_n34(x)
+ else
+ fun_l24_n532(x)
+ end
+end
+
+def fun_l23_n122(x)
+ if (x < 1)
+ fun_l24_n998(x)
+ else
+ fun_l24_n736(x)
+ end
+end
+
+def fun_l23_n123(x)
+ if (x < 1)
+ fun_l24_n33(x)
+ else
+ fun_l24_n561(x)
+ end
+end
+
+def fun_l23_n124(x)
+ if (x < 1)
+ fun_l24_n750(x)
+ else
+ fun_l24_n634(x)
+ end
+end
+
+def fun_l23_n125(x)
+ if (x < 1)
+ fun_l24_n935(x)
+ else
+ fun_l24_n29(x)
+ end
+end
+
+def fun_l23_n126(x)
+ if (x < 1)
+ fun_l24_n249(x)
+ else
+ fun_l24_n571(x)
+ end
+end
+
+def fun_l23_n127(x)
+ if (x < 1)
+ fun_l24_n827(x)
+ else
+ fun_l24_n892(x)
+ end
+end
+
+def fun_l23_n128(x)
+ if (x < 1)
+ fun_l24_n903(x)
+ else
+ fun_l24_n171(x)
+ end
+end
+
+def fun_l23_n129(x)
+ if (x < 1)
+ fun_l24_n725(x)
+ else
+ fun_l24_n358(x)
+ end
+end
+
+def fun_l23_n130(x)
+ if (x < 1)
+ fun_l24_n616(x)
+ else
+ fun_l24_n795(x)
+ end
+end
+
+def fun_l23_n131(x)
+ if (x < 1)
+ fun_l24_n942(x)
+ else
+ fun_l24_n574(x)
+ end
+end
+
+def fun_l23_n132(x)
+ if (x < 1)
+ fun_l24_n290(x)
+ else
+ fun_l24_n869(x)
+ end
+end
+
+def fun_l23_n133(x)
+ if (x < 1)
+ fun_l24_n73(x)
+ else
+ fun_l24_n542(x)
+ end
+end
+
+def fun_l23_n134(x)
+ if (x < 1)
+ fun_l24_n730(x)
+ else
+ fun_l24_n857(x)
+ end
+end
+
+def fun_l23_n135(x)
+ if (x < 1)
+ fun_l24_n754(x)
+ else
+ fun_l24_n579(x)
+ end
+end
+
+def fun_l23_n136(x)
+ if (x < 1)
+ fun_l24_n503(x)
+ else
+ fun_l24_n574(x)
+ end
+end
+
+def fun_l23_n137(x)
+ if (x < 1)
+ fun_l24_n682(x)
+ else
+ fun_l24_n630(x)
+ end
+end
+
+def fun_l23_n138(x)
+ if (x < 1)
+ fun_l24_n918(x)
+ else
+ fun_l24_n440(x)
+ end
+end
+
+def fun_l23_n139(x)
+ if (x < 1)
+ fun_l24_n938(x)
+ else
+ fun_l24_n524(x)
+ end
+end
+
+def fun_l23_n140(x)
+ if (x < 1)
+ fun_l24_n966(x)
+ else
+ fun_l24_n921(x)
+ end
+end
+
+def fun_l23_n141(x)
+ if (x < 1)
+ fun_l24_n87(x)
+ else
+ fun_l24_n548(x)
+ end
+end
+
+def fun_l23_n142(x)
+ if (x < 1)
+ fun_l24_n828(x)
+ else
+ fun_l24_n708(x)
+ end
+end
+
+def fun_l23_n143(x)
+ if (x < 1)
+ fun_l24_n655(x)
+ else
+ fun_l24_n322(x)
+ end
+end
+
+def fun_l23_n144(x)
+ if (x < 1)
+ fun_l24_n382(x)
+ else
+ fun_l24_n484(x)
+ end
+end
+
+def fun_l23_n145(x)
+ if (x < 1)
+ fun_l24_n830(x)
+ else
+ fun_l24_n755(x)
+ end
+end
+
+def fun_l23_n146(x)
+ if (x < 1)
+ fun_l24_n432(x)
+ else
+ fun_l24_n487(x)
+ end
+end
+
+def fun_l23_n147(x)
+ if (x < 1)
+ fun_l24_n954(x)
+ else
+ fun_l24_n453(x)
+ end
+end
+
+def fun_l23_n148(x)
+ if (x < 1)
+ fun_l24_n562(x)
+ else
+ fun_l24_n872(x)
+ end
+end
+
+def fun_l23_n149(x)
+ if (x < 1)
+ fun_l24_n929(x)
+ else
+ fun_l24_n212(x)
+ end
+end
+
+def fun_l23_n150(x)
+ if (x < 1)
+ fun_l24_n143(x)
+ else
+ fun_l24_n344(x)
+ end
+end
+
+def fun_l23_n151(x)
+ if (x < 1)
+ fun_l24_n475(x)
+ else
+ fun_l24_n379(x)
+ end
+end
+
+def fun_l23_n152(x)
+ if (x < 1)
+ fun_l24_n160(x)
+ else
+ fun_l24_n774(x)
+ end
+end
+
+def fun_l23_n153(x)
+ if (x < 1)
+ fun_l24_n689(x)
+ else
+ fun_l24_n19(x)
+ end
+end
+
+def fun_l23_n154(x)
+ if (x < 1)
+ fun_l24_n98(x)
+ else
+ fun_l24_n572(x)
+ end
+end
+
+def fun_l23_n155(x)
+ if (x < 1)
+ fun_l24_n104(x)
+ else
+ fun_l24_n797(x)
+ end
+end
+
+def fun_l23_n156(x)
+ if (x < 1)
+ fun_l24_n892(x)
+ else
+ fun_l24_n874(x)
+ end
+end
+
+def fun_l23_n157(x)
+ if (x < 1)
+ fun_l24_n900(x)
+ else
+ fun_l24_n458(x)
+ end
+end
+
+def fun_l23_n158(x)
+ if (x < 1)
+ fun_l24_n50(x)
+ else
+ fun_l24_n912(x)
+ end
+end
+
+def fun_l23_n159(x)
+ if (x < 1)
+ fun_l24_n303(x)
+ else
+ fun_l24_n373(x)
+ end
+end
+
+def fun_l23_n160(x)
+ if (x < 1)
+ fun_l24_n137(x)
+ else
+ fun_l24_n102(x)
+ end
+end
+
+def fun_l23_n161(x)
+ if (x < 1)
+ fun_l24_n263(x)
+ else
+ fun_l24_n818(x)
+ end
+end
+
+def fun_l23_n162(x)
+ if (x < 1)
+ fun_l24_n618(x)
+ else
+ fun_l24_n895(x)
+ end
+end
+
+def fun_l23_n163(x)
+ if (x < 1)
+ fun_l24_n845(x)
+ else
+ fun_l24_n26(x)
+ end
+end
+
+def fun_l23_n164(x)
+ if (x < 1)
+ fun_l24_n941(x)
+ else
+ fun_l24_n242(x)
+ end
+end
+
+def fun_l23_n165(x)
+ if (x < 1)
+ fun_l24_n145(x)
+ else
+ fun_l24_n492(x)
+ end
+end
+
+def fun_l23_n166(x)
+ if (x < 1)
+ fun_l24_n261(x)
+ else
+ fun_l24_n235(x)
+ end
+end
+
+def fun_l23_n167(x)
+ if (x < 1)
+ fun_l24_n941(x)
+ else
+ fun_l24_n618(x)
+ end
+end
+
+def fun_l23_n168(x)
+ if (x < 1)
+ fun_l24_n709(x)
+ else
+ fun_l24_n908(x)
+ end
+end
+
+def fun_l23_n169(x)
+ if (x < 1)
+ fun_l24_n746(x)
+ else
+ fun_l24_n116(x)
+ end
+end
+
+def fun_l23_n170(x)
+ if (x < 1)
+ fun_l24_n911(x)
+ else
+ fun_l24_n599(x)
+ end
+end
+
+def fun_l23_n171(x)
+ if (x < 1)
+ fun_l24_n526(x)
+ else
+ fun_l24_n275(x)
+ end
+end
+
+def fun_l23_n172(x)
+ if (x < 1)
+ fun_l24_n919(x)
+ else
+ fun_l24_n525(x)
+ end
+end
+
+def fun_l23_n173(x)
+ if (x < 1)
+ fun_l24_n945(x)
+ else
+ fun_l24_n894(x)
+ end
+end
+
+def fun_l23_n174(x)
+ if (x < 1)
+ fun_l24_n349(x)
+ else
+ fun_l24_n434(x)
+ end
+end
+
+def fun_l23_n175(x)
+ if (x < 1)
+ fun_l24_n498(x)
+ else
+ fun_l24_n679(x)
+ end
+end
+
+def fun_l23_n176(x)
+ if (x < 1)
+ fun_l24_n867(x)
+ else
+ fun_l24_n177(x)
+ end
+end
+
+def fun_l23_n177(x)
+ if (x < 1)
+ fun_l24_n680(x)
+ else
+ fun_l24_n601(x)
+ end
+end
+
+def fun_l23_n178(x)
+ if (x < 1)
+ fun_l24_n838(x)
+ else
+ fun_l24_n5(x)
+ end
+end
+
+def fun_l23_n179(x)
+ if (x < 1)
+ fun_l24_n418(x)
+ else
+ fun_l24_n780(x)
+ end
+end
+
+def fun_l23_n180(x)
+ if (x < 1)
+ fun_l24_n88(x)
+ else
+ fun_l24_n333(x)
+ end
+end
+
+def fun_l23_n181(x)
+ if (x < 1)
+ fun_l24_n657(x)
+ else
+ fun_l24_n787(x)
+ end
+end
+
+def fun_l23_n182(x)
+ if (x < 1)
+ fun_l24_n767(x)
+ else
+ fun_l24_n903(x)
+ end
+end
+
+def fun_l23_n183(x)
+ if (x < 1)
+ fun_l24_n878(x)
+ else
+ fun_l24_n426(x)
+ end
+end
+
+def fun_l23_n184(x)
+ if (x < 1)
+ fun_l24_n649(x)
+ else
+ fun_l24_n221(x)
+ end
+end
+
+def fun_l23_n185(x)
+ if (x < 1)
+ fun_l24_n315(x)
+ else
+ fun_l24_n955(x)
+ end
+end
+
+def fun_l23_n186(x)
+ if (x < 1)
+ fun_l24_n599(x)
+ else
+ fun_l24_n201(x)
+ end
+end
+
+def fun_l23_n187(x)
+ if (x < 1)
+ fun_l24_n851(x)
+ else
+ fun_l24_n294(x)
+ end
+end
+
+def fun_l23_n188(x)
+ if (x < 1)
+ fun_l24_n585(x)
+ else
+ fun_l24_n139(x)
+ end
+end
+
+def fun_l23_n189(x)
+ if (x < 1)
+ fun_l24_n893(x)
+ else
+ fun_l24_n159(x)
+ end
+end
+
+def fun_l23_n190(x)
+ if (x < 1)
+ fun_l24_n70(x)
+ else
+ fun_l24_n50(x)
+ end
+end
+
+def fun_l23_n191(x)
+ if (x < 1)
+ fun_l24_n111(x)
+ else
+ fun_l24_n967(x)
+ end
+end
+
+def fun_l23_n192(x)
+ if (x < 1)
+ fun_l24_n979(x)
+ else
+ fun_l24_n91(x)
+ end
+end
+
+def fun_l23_n193(x)
+ if (x < 1)
+ fun_l24_n651(x)
+ else
+ fun_l24_n321(x)
+ end
+end
+
+def fun_l23_n194(x)
+ if (x < 1)
+ fun_l24_n236(x)
+ else
+ fun_l24_n251(x)
+ end
+end
+
+def fun_l23_n195(x)
+ if (x < 1)
+ fun_l24_n947(x)
+ else
+ fun_l24_n116(x)
+ end
+end
+
+def fun_l23_n196(x)
+ if (x < 1)
+ fun_l24_n336(x)
+ else
+ fun_l24_n637(x)
+ end
+end
+
+def fun_l23_n197(x)
+ if (x < 1)
+ fun_l24_n192(x)
+ else
+ fun_l24_n824(x)
+ end
+end
+
+def fun_l23_n198(x)
+ if (x < 1)
+ fun_l24_n747(x)
+ else
+ fun_l24_n610(x)
+ end
+end
+
+def fun_l23_n199(x)
+ if (x < 1)
+ fun_l24_n735(x)
+ else
+ fun_l24_n347(x)
+ end
+end
+
+def fun_l23_n200(x)
+ if (x < 1)
+ fun_l24_n543(x)
+ else
+ fun_l24_n463(x)
+ end
+end
+
+def fun_l23_n201(x)
+ if (x < 1)
+ fun_l24_n933(x)
+ else
+ fun_l24_n185(x)
+ end
+end
+
+def fun_l23_n202(x)
+ if (x < 1)
+ fun_l24_n319(x)
+ else
+ fun_l24_n739(x)
+ end
+end
+
+def fun_l23_n203(x)
+ if (x < 1)
+ fun_l24_n994(x)
+ else
+ fun_l24_n248(x)
+ end
+end
+
+def fun_l23_n204(x)
+ if (x < 1)
+ fun_l24_n980(x)
+ else
+ fun_l24_n248(x)
+ end
+end
+
+def fun_l23_n205(x)
+ if (x < 1)
+ fun_l24_n427(x)
+ else
+ fun_l24_n670(x)
+ end
+end
+
+def fun_l23_n206(x)
+ if (x < 1)
+ fun_l24_n562(x)
+ else
+ fun_l24_n752(x)
+ end
+end
+
+def fun_l23_n207(x)
+ if (x < 1)
+ fun_l24_n424(x)
+ else
+ fun_l24_n310(x)
+ end
+end
+
+def fun_l23_n208(x)
+ if (x < 1)
+ fun_l24_n761(x)
+ else
+ fun_l24_n562(x)
+ end
+end
+
+def fun_l23_n209(x)
+ if (x < 1)
+ fun_l24_n264(x)
+ else
+ fun_l24_n20(x)
+ end
+end
+
+def fun_l23_n210(x)
+ if (x < 1)
+ fun_l24_n886(x)
+ else
+ fun_l24_n505(x)
+ end
+end
+
+def fun_l23_n211(x)
+ if (x < 1)
+ fun_l24_n715(x)
+ else
+ fun_l24_n641(x)
+ end
+end
+
+def fun_l23_n212(x)
+ if (x < 1)
+ fun_l24_n132(x)
+ else
+ fun_l24_n875(x)
+ end
+end
+
+def fun_l23_n213(x)
+ if (x < 1)
+ fun_l24_n121(x)
+ else
+ fun_l24_n38(x)
+ end
+end
+
+def fun_l23_n214(x)
+ if (x < 1)
+ fun_l24_n672(x)
+ else
+ fun_l24_n497(x)
+ end
+end
+
+def fun_l23_n215(x)
+ if (x < 1)
+ fun_l24_n36(x)
+ else
+ fun_l24_n696(x)
+ end
+end
+
+def fun_l23_n216(x)
+ if (x < 1)
+ fun_l24_n559(x)
+ else
+ fun_l24_n772(x)
+ end
+end
+
+def fun_l23_n217(x)
+ if (x < 1)
+ fun_l24_n63(x)
+ else
+ fun_l24_n990(x)
+ end
+end
+
+def fun_l23_n218(x)
+ if (x < 1)
+ fun_l24_n482(x)
+ else
+ fun_l24_n811(x)
+ end
+end
+
+def fun_l23_n219(x)
+ if (x < 1)
+ fun_l24_n572(x)
+ else
+ fun_l24_n651(x)
+ end
+end
+
+def fun_l23_n220(x)
+ if (x < 1)
+ fun_l24_n588(x)
+ else
+ fun_l24_n87(x)
+ end
+end
+
+def fun_l23_n221(x)
+ if (x < 1)
+ fun_l24_n462(x)
+ else
+ fun_l24_n909(x)
+ end
+end
+
+def fun_l23_n222(x)
+ if (x < 1)
+ fun_l24_n729(x)
+ else
+ fun_l24_n364(x)
+ end
+end
+
+def fun_l23_n223(x)
+ if (x < 1)
+ fun_l24_n259(x)
+ else
+ fun_l24_n661(x)
+ end
+end
+
+def fun_l23_n224(x)
+ if (x < 1)
+ fun_l24_n504(x)
+ else
+ fun_l24_n531(x)
+ end
+end
+
+def fun_l23_n225(x)
+ if (x < 1)
+ fun_l24_n114(x)
+ else
+ fun_l24_n292(x)
+ end
+end
+
+def fun_l23_n226(x)
+ if (x < 1)
+ fun_l24_n207(x)
+ else
+ fun_l24_n206(x)
+ end
+end
+
+def fun_l23_n227(x)
+ if (x < 1)
+ fun_l24_n153(x)
+ else
+ fun_l24_n572(x)
+ end
+end
+
+def fun_l23_n228(x)
+ if (x < 1)
+ fun_l24_n738(x)
+ else
+ fun_l24_n767(x)
+ end
+end
+
+def fun_l23_n229(x)
+ if (x < 1)
+ fun_l24_n374(x)
+ else
+ fun_l24_n336(x)
+ end
+end
+
+def fun_l23_n230(x)
+ if (x < 1)
+ fun_l24_n727(x)
+ else
+ fun_l24_n842(x)
+ end
+end
+
+def fun_l23_n231(x)
+ if (x < 1)
+ fun_l24_n506(x)
+ else
+ fun_l24_n8(x)
+ end
+end
+
+def fun_l23_n232(x)
+ if (x < 1)
+ fun_l24_n101(x)
+ else
+ fun_l24_n502(x)
+ end
+end
+
+def fun_l23_n233(x)
+ if (x < 1)
+ fun_l24_n469(x)
+ else
+ fun_l24_n274(x)
+ end
+end
+
+def fun_l23_n234(x)
+ if (x < 1)
+ fun_l24_n67(x)
+ else
+ fun_l24_n66(x)
+ end
+end
+
+def fun_l23_n235(x)
+ if (x < 1)
+ fun_l24_n874(x)
+ else
+ fun_l24_n104(x)
+ end
+end
+
+def fun_l23_n236(x)
+ if (x < 1)
+ fun_l24_n154(x)
+ else
+ fun_l24_n723(x)
+ end
+end
+
+def fun_l23_n237(x)
+ if (x < 1)
+ fun_l24_n300(x)
+ else
+ fun_l24_n0(x)
+ end
+end
+
+def fun_l23_n238(x)
+ if (x < 1)
+ fun_l24_n767(x)
+ else
+ fun_l24_n134(x)
+ end
+end
+
+def fun_l23_n239(x)
+ if (x < 1)
+ fun_l24_n647(x)
+ else
+ fun_l24_n890(x)
+ end
+end
+
+def fun_l23_n240(x)
+ if (x < 1)
+ fun_l24_n258(x)
+ else
+ fun_l24_n302(x)
+ end
+end
+
+def fun_l23_n241(x)
+ if (x < 1)
+ fun_l24_n104(x)
+ else
+ fun_l24_n335(x)
+ end
+end
+
+def fun_l23_n242(x)
+ if (x < 1)
+ fun_l24_n500(x)
+ else
+ fun_l24_n383(x)
+ end
+end
+
+def fun_l23_n243(x)
+ if (x < 1)
+ fun_l24_n63(x)
+ else
+ fun_l24_n421(x)
+ end
+end
+
+def fun_l23_n244(x)
+ if (x < 1)
+ fun_l24_n105(x)
+ else
+ fun_l24_n451(x)
+ end
+end
+
+def fun_l23_n245(x)
+ if (x < 1)
+ fun_l24_n729(x)
+ else
+ fun_l24_n333(x)
+ end
+end
+
+def fun_l23_n246(x)
+ if (x < 1)
+ fun_l24_n966(x)
+ else
+ fun_l24_n556(x)
+ end
+end
+
+def fun_l23_n247(x)
+ if (x < 1)
+ fun_l24_n118(x)
+ else
+ fun_l24_n565(x)
+ end
+end
+
+def fun_l23_n248(x)
+ if (x < 1)
+ fun_l24_n61(x)
+ else
+ fun_l24_n816(x)
+ end
+end
+
+def fun_l23_n249(x)
+ if (x < 1)
+ fun_l24_n769(x)
+ else
+ fun_l24_n183(x)
+ end
+end
+
+def fun_l23_n250(x)
+ if (x < 1)
+ fun_l24_n688(x)
+ else
+ fun_l24_n60(x)
+ end
+end
+
+def fun_l23_n251(x)
+ if (x < 1)
+ fun_l24_n859(x)
+ else
+ fun_l24_n434(x)
+ end
+end
+
+def fun_l23_n252(x)
+ if (x < 1)
+ fun_l24_n650(x)
+ else
+ fun_l24_n448(x)
+ end
+end
+
+def fun_l23_n253(x)
+ if (x < 1)
+ fun_l24_n519(x)
+ else
+ fun_l24_n963(x)
+ end
+end
+
+def fun_l23_n254(x)
+ if (x < 1)
+ fun_l24_n176(x)
+ else
+ fun_l24_n908(x)
+ end
+end
+
+def fun_l23_n255(x)
+ if (x < 1)
+ fun_l24_n146(x)
+ else
+ fun_l24_n751(x)
+ end
+end
+
+def fun_l23_n256(x)
+ if (x < 1)
+ fun_l24_n742(x)
+ else
+ fun_l24_n928(x)
+ end
+end
+
+def fun_l23_n257(x)
+ if (x < 1)
+ fun_l24_n22(x)
+ else
+ fun_l24_n48(x)
+ end
+end
+
+def fun_l23_n258(x)
+ if (x < 1)
+ fun_l24_n158(x)
+ else
+ fun_l24_n299(x)
+ end
+end
+
+def fun_l23_n259(x)
+ if (x < 1)
+ fun_l24_n247(x)
+ else
+ fun_l24_n419(x)
+ end
+end
+
+def fun_l23_n260(x)
+ if (x < 1)
+ fun_l24_n161(x)
+ else
+ fun_l24_n387(x)
+ end
+end
+
+def fun_l23_n261(x)
+ if (x < 1)
+ fun_l24_n627(x)
+ else
+ fun_l24_n321(x)
+ end
+end
+
+def fun_l23_n262(x)
+ if (x < 1)
+ fun_l24_n946(x)
+ else
+ fun_l24_n617(x)
+ end
+end
+
+def fun_l23_n263(x)
+ if (x < 1)
+ fun_l24_n853(x)
+ else
+ fun_l24_n208(x)
+ end
+end
+
+def fun_l23_n264(x)
+ if (x < 1)
+ fun_l24_n213(x)
+ else
+ fun_l24_n27(x)
+ end
+end
+
+def fun_l23_n265(x)
+ if (x < 1)
+ fun_l24_n819(x)
+ else
+ fun_l24_n438(x)
+ end
+end
+
+def fun_l23_n266(x)
+ if (x < 1)
+ fun_l24_n351(x)
+ else
+ fun_l24_n739(x)
+ end
+end
+
+def fun_l23_n267(x)
+ if (x < 1)
+ fun_l24_n333(x)
+ else
+ fun_l24_n179(x)
+ end
+end
+
+def fun_l23_n268(x)
+ if (x < 1)
+ fun_l24_n528(x)
+ else
+ fun_l24_n397(x)
+ end
+end
+
+def fun_l23_n269(x)
+ if (x < 1)
+ fun_l24_n655(x)
+ else
+ fun_l24_n994(x)
+ end
+end
+
+def fun_l23_n270(x)
+ if (x < 1)
+ fun_l24_n257(x)
+ else
+ fun_l24_n346(x)
+ end
+end
+
+def fun_l23_n271(x)
+ if (x < 1)
+ fun_l24_n183(x)
+ else
+ fun_l24_n908(x)
+ end
+end
+
+def fun_l23_n272(x)
+ if (x < 1)
+ fun_l24_n742(x)
+ else
+ fun_l24_n483(x)
+ end
+end
+
+def fun_l23_n273(x)
+ if (x < 1)
+ fun_l24_n803(x)
+ else
+ fun_l24_n318(x)
+ end
+end
+
+def fun_l23_n274(x)
+ if (x < 1)
+ fun_l24_n228(x)
+ else
+ fun_l24_n540(x)
+ end
+end
+
+def fun_l23_n275(x)
+ if (x < 1)
+ fun_l24_n999(x)
+ else
+ fun_l24_n55(x)
+ end
+end
+
+def fun_l23_n276(x)
+ if (x < 1)
+ fun_l24_n129(x)
+ else
+ fun_l24_n235(x)
+ end
+end
+
+def fun_l23_n277(x)
+ if (x < 1)
+ fun_l24_n320(x)
+ else
+ fun_l24_n211(x)
+ end
+end
+
+def fun_l23_n278(x)
+ if (x < 1)
+ fun_l24_n757(x)
+ else
+ fun_l24_n440(x)
+ end
+end
+
+def fun_l23_n279(x)
+ if (x < 1)
+ fun_l24_n784(x)
+ else
+ fun_l24_n117(x)
+ end
+end
+
+def fun_l23_n280(x)
+ if (x < 1)
+ fun_l24_n280(x)
+ else
+ fun_l24_n560(x)
+ end
+end
+
+def fun_l23_n281(x)
+ if (x < 1)
+ fun_l24_n981(x)
+ else
+ fun_l24_n939(x)
+ end
+end
+
+def fun_l23_n282(x)
+ if (x < 1)
+ fun_l24_n500(x)
+ else
+ fun_l24_n90(x)
+ end
+end
+
+def fun_l23_n283(x)
+ if (x < 1)
+ fun_l24_n958(x)
+ else
+ fun_l24_n415(x)
+ end
+end
+
+def fun_l23_n284(x)
+ if (x < 1)
+ fun_l24_n237(x)
+ else
+ fun_l24_n556(x)
+ end
+end
+
+def fun_l23_n285(x)
+ if (x < 1)
+ fun_l24_n87(x)
+ else
+ fun_l24_n630(x)
+ end
+end
+
+def fun_l23_n286(x)
+ if (x < 1)
+ fun_l24_n121(x)
+ else
+ fun_l24_n974(x)
+ end
+end
+
+def fun_l23_n287(x)
+ if (x < 1)
+ fun_l24_n491(x)
+ else
+ fun_l24_n505(x)
+ end
+end
+
+def fun_l23_n288(x)
+ if (x < 1)
+ fun_l24_n342(x)
+ else
+ fun_l24_n408(x)
+ end
+end
+
+def fun_l23_n289(x)
+ if (x < 1)
+ fun_l24_n456(x)
+ else
+ fun_l24_n768(x)
+ end
+end
+
+def fun_l23_n290(x)
+ if (x < 1)
+ fun_l24_n64(x)
+ else
+ fun_l24_n515(x)
+ end
+end
+
+def fun_l23_n291(x)
+ if (x < 1)
+ fun_l24_n86(x)
+ else
+ fun_l24_n420(x)
+ end
+end
+
+def fun_l23_n292(x)
+ if (x < 1)
+ fun_l24_n61(x)
+ else
+ fun_l24_n295(x)
+ end
+end
+
+def fun_l23_n293(x)
+ if (x < 1)
+ fun_l24_n893(x)
+ else
+ fun_l24_n680(x)
+ end
+end
+
+def fun_l23_n294(x)
+ if (x < 1)
+ fun_l24_n81(x)
+ else
+ fun_l24_n946(x)
+ end
+end
+
+def fun_l23_n295(x)
+ if (x < 1)
+ fun_l24_n444(x)
+ else
+ fun_l24_n205(x)
+ end
+end
+
+def fun_l23_n296(x)
+ if (x < 1)
+ fun_l24_n898(x)
+ else
+ fun_l24_n101(x)
+ end
+end
+
+def fun_l23_n297(x)
+ if (x < 1)
+ fun_l24_n617(x)
+ else
+ fun_l24_n660(x)
+ end
+end
+
+def fun_l23_n298(x)
+ if (x < 1)
+ fun_l24_n117(x)
+ else
+ fun_l24_n806(x)
+ end
+end
+
+def fun_l23_n299(x)
+ if (x < 1)
+ fun_l24_n92(x)
+ else
+ fun_l24_n660(x)
+ end
+end
+
+def fun_l23_n300(x)
+ if (x < 1)
+ fun_l24_n202(x)
+ else
+ fun_l24_n611(x)
+ end
+end
+
+def fun_l23_n301(x)
+ if (x < 1)
+ fun_l24_n852(x)
+ else
+ fun_l24_n569(x)
+ end
+end
+
+def fun_l23_n302(x)
+ if (x < 1)
+ fun_l24_n69(x)
+ else
+ fun_l24_n725(x)
+ end
+end
+
+def fun_l23_n303(x)
+ if (x < 1)
+ fun_l24_n183(x)
+ else
+ fun_l24_n406(x)
+ end
+end
+
+def fun_l23_n304(x)
+ if (x < 1)
+ fun_l24_n926(x)
+ else
+ fun_l24_n838(x)
+ end
+end
+
+def fun_l23_n305(x)
+ if (x < 1)
+ fun_l24_n16(x)
+ else
+ fun_l24_n681(x)
+ end
+end
+
+def fun_l23_n306(x)
+ if (x < 1)
+ fun_l24_n43(x)
+ else
+ fun_l24_n504(x)
+ end
+end
+
+def fun_l23_n307(x)
+ if (x < 1)
+ fun_l24_n417(x)
+ else
+ fun_l24_n239(x)
+ end
+end
+
+def fun_l23_n308(x)
+ if (x < 1)
+ fun_l24_n353(x)
+ else
+ fun_l24_n467(x)
+ end
+end
+
+def fun_l23_n309(x)
+ if (x < 1)
+ fun_l24_n633(x)
+ else
+ fun_l24_n593(x)
+ end
+end
+
+def fun_l23_n310(x)
+ if (x < 1)
+ fun_l24_n974(x)
+ else
+ fun_l24_n894(x)
+ end
+end
+
+def fun_l23_n311(x)
+ if (x < 1)
+ fun_l24_n3(x)
+ else
+ fun_l24_n751(x)
+ end
+end
+
+def fun_l23_n312(x)
+ if (x < 1)
+ fun_l24_n728(x)
+ else
+ fun_l24_n116(x)
+ end
+end
+
+def fun_l23_n313(x)
+ if (x < 1)
+ fun_l24_n588(x)
+ else
+ fun_l24_n636(x)
+ end
+end
+
+def fun_l23_n314(x)
+ if (x < 1)
+ fun_l24_n284(x)
+ else
+ fun_l24_n751(x)
+ end
+end
+
+def fun_l23_n315(x)
+ if (x < 1)
+ fun_l24_n567(x)
+ else
+ fun_l24_n356(x)
+ end
+end
+
+def fun_l23_n316(x)
+ if (x < 1)
+ fun_l24_n78(x)
+ else
+ fun_l24_n714(x)
+ end
+end
+
+def fun_l23_n317(x)
+ if (x < 1)
+ fun_l24_n592(x)
+ else
+ fun_l24_n720(x)
+ end
+end
+
+def fun_l23_n318(x)
+ if (x < 1)
+ fun_l24_n273(x)
+ else
+ fun_l24_n367(x)
+ end
+end
+
+def fun_l23_n319(x)
+ if (x < 1)
+ fun_l24_n816(x)
+ else
+ fun_l24_n964(x)
+ end
+end
+
+def fun_l23_n320(x)
+ if (x < 1)
+ fun_l24_n59(x)
+ else
+ fun_l24_n630(x)
+ end
+end
+
+def fun_l23_n321(x)
+ if (x < 1)
+ fun_l24_n298(x)
+ else
+ fun_l24_n639(x)
+ end
+end
+
+def fun_l23_n322(x)
+ if (x < 1)
+ fun_l24_n70(x)
+ else
+ fun_l24_n714(x)
+ end
+end
+
+def fun_l23_n323(x)
+ if (x < 1)
+ fun_l24_n495(x)
+ else
+ fun_l24_n630(x)
+ end
+end
+
+def fun_l23_n324(x)
+ if (x < 1)
+ fun_l24_n780(x)
+ else
+ fun_l24_n932(x)
+ end
+end
+
+def fun_l23_n325(x)
+ if (x < 1)
+ fun_l24_n494(x)
+ else
+ fun_l24_n610(x)
+ end
+end
+
+def fun_l23_n326(x)
+ if (x < 1)
+ fun_l24_n509(x)
+ else
+ fun_l24_n635(x)
+ end
+end
+
+def fun_l23_n327(x)
+ if (x < 1)
+ fun_l24_n991(x)
+ else
+ fun_l24_n355(x)
+ end
+end
+
+def fun_l23_n328(x)
+ if (x < 1)
+ fun_l24_n153(x)
+ else
+ fun_l24_n234(x)
+ end
+end
+
+def fun_l23_n329(x)
+ if (x < 1)
+ fun_l24_n483(x)
+ else
+ fun_l24_n812(x)
+ end
+end
+
+def fun_l23_n330(x)
+ if (x < 1)
+ fun_l24_n123(x)
+ else
+ fun_l24_n665(x)
+ end
+end
+
+def fun_l23_n331(x)
+ if (x < 1)
+ fun_l24_n752(x)
+ else
+ fun_l24_n471(x)
+ end
+end
+
+def fun_l23_n332(x)
+ if (x < 1)
+ fun_l24_n440(x)
+ else
+ fun_l24_n788(x)
+ end
+end
+
+def fun_l23_n333(x)
+ if (x < 1)
+ fun_l24_n381(x)
+ else
+ fun_l24_n95(x)
+ end
+end
+
+def fun_l23_n334(x)
+ if (x < 1)
+ fun_l24_n379(x)
+ else
+ fun_l24_n982(x)
+ end
+end
+
+def fun_l23_n335(x)
+ if (x < 1)
+ fun_l24_n766(x)
+ else
+ fun_l24_n14(x)
+ end
+end
+
+def fun_l23_n336(x)
+ if (x < 1)
+ fun_l24_n733(x)
+ else
+ fun_l24_n614(x)
+ end
+end
+
+def fun_l23_n337(x)
+ if (x < 1)
+ fun_l24_n946(x)
+ else
+ fun_l24_n408(x)
+ end
+end
+
+def fun_l23_n338(x)
+ if (x < 1)
+ fun_l24_n98(x)
+ else
+ fun_l24_n542(x)
+ end
+end
+
+def fun_l23_n339(x)
+ if (x < 1)
+ fun_l24_n60(x)
+ else
+ fun_l24_n970(x)
+ end
+end
+
+def fun_l23_n340(x)
+ if (x < 1)
+ fun_l24_n933(x)
+ else
+ fun_l24_n517(x)
+ end
+end
+
+def fun_l23_n341(x)
+ if (x < 1)
+ fun_l24_n634(x)
+ else
+ fun_l24_n943(x)
+ end
+end
+
+def fun_l23_n342(x)
+ if (x < 1)
+ fun_l24_n50(x)
+ else
+ fun_l24_n800(x)
+ end
+end
+
+def fun_l23_n343(x)
+ if (x < 1)
+ fun_l24_n352(x)
+ else
+ fun_l24_n450(x)
+ end
+end
+
+def fun_l23_n344(x)
+ if (x < 1)
+ fun_l24_n340(x)
+ else
+ fun_l24_n101(x)
+ end
+end
+
+def fun_l23_n345(x)
+ if (x < 1)
+ fun_l24_n383(x)
+ else
+ fun_l24_n493(x)
+ end
+end
+
+def fun_l23_n346(x)
+ if (x < 1)
+ fun_l24_n805(x)
+ else
+ fun_l24_n845(x)
+ end
+end
+
+def fun_l23_n347(x)
+ if (x < 1)
+ fun_l24_n491(x)
+ else
+ fun_l24_n756(x)
+ end
+end
+
+def fun_l23_n348(x)
+ if (x < 1)
+ fun_l24_n508(x)
+ else
+ fun_l24_n2(x)
+ end
+end
+
+def fun_l23_n349(x)
+ if (x < 1)
+ fun_l24_n865(x)
+ else
+ fun_l24_n55(x)
+ end
+end
+
+def fun_l23_n350(x)
+ if (x < 1)
+ fun_l24_n218(x)
+ else
+ fun_l24_n456(x)
+ end
+end
+
+def fun_l23_n351(x)
+ if (x < 1)
+ fun_l24_n162(x)
+ else
+ fun_l24_n312(x)
+ end
+end
+
+def fun_l23_n352(x)
+ if (x < 1)
+ fun_l24_n309(x)
+ else
+ fun_l24_n431(x)
+ end
+end
+
+def fun_l23_n353(x)
+ if (x < 1)
+ fun_l24_n411(x)
+ else
+ fun_l24_n684(x)
+ end
+end
+
+def fun_l23_n354(x)
+ if (x < 1)
+ fun_l24_n381(x)
+ else
+ fun_l24_n703(x)
+ end
+end
+
+def fun_l23_n355(x)
+ if (x < 1)
+ fun_l24_n189(x)
+ else
+ fun_l24_n217(x)
+ end
+end
+
+def fun_l23_n356(x)
+ if (x < 1)
+ fun_l24_n180(x)
+ else
+ fun_l24_n706(x)
+ end
+end
+
+def fun_l23_n357(x)
+ if (x < 1)
+ fun_l24_n76(x)
+ else
+ fun_l24_n575(x)
+ end
+end
+
+def fun_l23_n358(x)
+ if (x < 1)
+ fun_l24_n574(x)
+ else
+ fun_l24_n842(x)
+ end
+end
+
+def fun_l23_n359(x)
+ if (x < 1)
+ fun_l24_n281(x)
+ else
+ fun_l24_n572(x)
+ end
+end
+
+def fun_l23_n360(x)
+ if (x < 1)
+ fun_l24_n2(x)
+ else
+ fun_l24_n928(x)
+ end
+end
+
+def fun_l23_n361(x)
+ if (x < 1)
+ fun_l24_n840(x)
+ else
+ fun_l24_n794(x)
+ end
+end
+
+def fun_l23_n362(x)
+ if (x < 1)
+ fun_l24_n657(x)
+ else
+ fun_l24_n987(x)
+ end
+end
+
+def fun_l23_n363(x)
+ if (x < 1)
+ fun_l24_n400(x)
+ else
+ fun_l24_n151(x)
+ end
+end
+
+def fun_l23_n364(x)
+ if (x < 1)
+ fun_l24_n123(x)
+ else
+ fun_l24_n873(x)
+ end
+end
+
+def fun_l23_n365(x)
+ if (x < 1)
+ fun_l24_n51(x)
+ else
+ fun_l24_n52(x)
+ end
+end
+
+def fun_l23_n366(x)
+ if (x < 1)
+ fun_l24_n809(x)
+ else
+ fun_l24_n32(x)
+ end
+end
+
+def fun_l23_n367(x)
+ if (x < 1)
+ fun_l24_n928(x)
+ else
+ fun_l24_n618(x)
+ end
+end
+
+def fun_l23_n368(x)
+ if (x < 1)
+ fun_l24_n563(x)
+ else
+ fun_l24_n937(x)
+ end
+end
+
+def fun_l23_n369(x)
+ if (x < 1)
+ fun_l24_n312(x)
+ else
+ fun_l24_n918(x)
+ end
+end
+
+def fun_l23_n370(x)
+ if (x < 1)
+ fun_l24_n940(x)
+ else
+ fun_l24_n994(x)
+ end
+end
+
+def fun_l23_n371(x)
+ if (x < 1)
+ fun_l24_n788(x)
+ else
+ fun_l24_n187(x)
+ end
+end
+
+def fun_l23_n372(x)
+ if (x < 1)
+ fun_l24_n110(x)
+ else
+ fun_l24_n523(x)
+ end
+end
+
+def fun_l23_n373(x)
+ if (x < 1)
+ fun_l24_n158(x)
+ else
+ fun_l24_n656(x)
+ end
+end
+
+def fun_l23_n374(x)
+ if (x < 1)
+ fun_l24_n522(x)
+ else
+ fun_l24_n395(x)
+ end
+end
+
+def fun_l23_n375(x)
+ if (x < 1)
+ fun_l24_n90(x)
+ else
+ fun_l24_n732(x)
+ end
+end
+
+def fun_l23_n376(x)
+ if (x < 1)
+ fun_l24_n809(x)
+ else
+ fun_l24_n513(x)
+ end
+end
+
+def fun_l23_n377(x)
+ if (x < 1)
+ fun_l24_n916(x)
+ else
+ fun_l24_n962(x)
+ end
+end
+
+def fun_l23_n378(x)
+ if (x < 1)
+ fun_l24_n852(x)
+ else
+ fun_l24_n350(x)
+ end
+end
+
+def fun_l23_n379(x)
+ if (x < 1)
+ fun_l24_n555(x)
+ else
+ fun_l24_n375(x)
+ end
+end
+
+def fun_l23_n380(x)
+ if (x < 1)
+ fun_l24_n17(x)
+ else
+ fun_l24_n566(x)
+ end
+end
+
+def fun_l23_n381(x)
+ if (x < 1)
+ fun_l24_n332(x)
+ else
+ fun_l24_n35(x)
+ end
+end
+
+def fun_l23_n382(x)
+ if (x < 1)
+ fun_l24_n531(x)
+ else
+ fun_l24_n368(x)
+ end
+end
+
+def fun_l23_n383(x)
+ if (x < 1)
+ fun_l24_n712(x)
+ else
+ fun_l24_n32(x)
+ end
+end
+
+def fun_l23_n384(x)
+ if (x < 1)
+ fun_l24_n239(x)
+ else
+ fun_l24_n542(x)
+ end
+end
+
+def fun_l23_n385(x)
+ if (x < 1)
+ fun_l24_n914(x)
+ else
+ fun_l24_n820(x)
+ end
+end
+
+def fun_l23_n386(x)
+ if (x < 1)
+ fun_l24_n579(x)
+ else
+ fun_l24_n202(x)
+ end
+end
+
+def fun_l23_n387(x)
+ if (x < 1)
+ fun_l24_n36(x)
+ else
+ fun_l24_n591(x)
+ end
+end
+
+def fun_l23_n388(x)
+ if (x < 1)
+ fun_l24_n485(x)
+ else
+ fun_l24_n707(x)
+ end
+end
+
+def fun_l23_n389(x)
+ if (x < 1)
+ fun_l24_n587(x)
+ else
+ fun_l24_n588(x)
+ end
+end
+
+def fun_l23_n390(x)
+ if (x < 1)
+ fun_l24_n837(x)
+ else
+ fun_l24_n352(x)
+ end
+end
+
+def fun_l23_n391(x)
+ if (x < 1)
+ fun_l24_n926(x)
+ else
+ fun_l24_n553(x)
+ end
+end
+
+def fun_l23_n392(x)
+ if (x < 1)
+ fun_l24_n557(x)
+ else
+ fun_l24_n944(x)
+ end
+end
+
+def fun_l23_n393(x)
+ if (x < 1)
+ fun_l24_n870(x)
+ else
+ fun_l24_n632(x)
+ end
+end
+
+def fun_l23_n394(x)
+ if (x < 1)
+ fun_l24_n732(x)
+ else
+ fun_l24_n285(x)
+ end
+end
+
+def fun_l23_n395(x)
+ if (x < 1)
+ fun_l24_n249(x)
+ else
+ fun_l24_n709(x)
+ end
+end
+
+def fun_l23_n396(x)
+ if (x < 1)
+ fun_l24_n674(x)
+ else
+ fun_l24_n693(x)
+ end
+end
+
+def fun_l23_n397(x)
+ if (x < 1)
+ fun_l24_n20(x)
+ else
+ fun_l24_n367(x)
+ end
+end
+
+def fun_l23_n398(x)
+ if (x < 1)
+ fun_l24_n545(x)
+ else
+ fun_l24_n973(x)
+ end
+end
+
+def fun_l23_n399(x)
+ if (x < 1)
+ fun_l24_n460(x)
+ else
+ fun_l24_n627(x)
+ end
+end
+
+def fun_l23_n400(x)
+ if (x < 1)
+ fun_l24_n941(x)
+ else
+ fun_l24_n679(x)
+ end
+end
+
+def fun_l23_n401(x)
+ if (x < 1)
+ fun_l24_n161(x)
+ else
+ fun_l24_n518(x)
+ end
+end
+
+def fun_l23_n402(x)
+ if (x < 1)
+ fun_l24_n738(x)
+ else
+ fun_l24_n393(x)
+ end
+end
+
+def fun_l23_n403(x)
+ if (x < 1)
+ fun_l24_n75(x)
+ else
+ fun_l24_n776(x)
+ end
+end
+
+def fun_l23_n404(x)
+ if (x < 1)
+ fun_l24_n996(x)
+ else
+ fun_l24_n71(x)
+ end
+end
+
+def fun_l23_n405(x)
+ if (x < 1)
+ fun_l24_n732(x)
+ else
+ fun_l24_n649(x)
+ end
+end
+
+def fun_l23_n406(x)
+ if (x < 1)
+ fun_l24_n142(x)
+ else
+ fun_l24_n563(x)
+ end
+end
+
+def fun_l23_n407(x)
+ if (x < 1)
+ fun_l24_n63(x)
+ else
+ fun_l24_n629(x)
+ end
+end
+
+def fun_l23_n408(x)
+ if (x < 1)
+ fun_l24_n734(x)
+ else
+ fun_l24_n857(x)
+ end
+end
+
+def fun_l23_n409(x)
+ if (x < 1)
+ fun_l24_n100(x)
+ else
+ fun_l24_n340(x)
+ end
+end
+
+def fun_l23_n410(x)
+ if (x < 1)
+ fun_l24_n471(x)
+ else
+ fun_l24_n114(x)
+ end
+end
+
+def fun_l23_n411(x)
+ if (x < 1)
+ fun_l24_n316(x)
+ else
+ fun_l24_n965(x)
+ end
+end
+
+def fun_l23_n412(x)
+ if (x < 1)
+ fun_l24_n909(x)
+ else
+ fun_l24_n779(x)
+ end
+end
+
+def fun_l23_n413(x)
+ if (x < 1)
+ fun_l24_n846(x)
+ else
+ fun_l24_n473(x)
+ end
+end
+
+def fun_l23_n414(x)
+ if (x < 1)
+ fun_l24_n117(x)
+ else
+ fun_l24_n751(x)
+ end
+end
+
+def fun_l23_n415(x)
+ if (x < 1)
+ fun_l24_n360(x)
+ else
+ fun_l24_n285(x)
+ end
+end
+
+def fun_l23_n416(x)
+ if (x < 1)
+ fun_l24_n430(x)
+ else
+ fun_l24_n273(x)
+ end
+end
+
+def fun_l23_n417(x)
+ if (x < 1)
+ fun_l24_n925(x)
+ else
+ fun_l24_n928(x)
+ end
+end
+
+def fun_l23_n418(x)
+ if (x < 1)
+ fun_l24_n478(x)
+ else
+ fun_l24_n511(x)
+ end
+end
+
+def fun_l23_n419(x)
+ if (x < 1)
+ fun_l24_n415(x)
+ else
+ fun_l24_n127(x)
+ end
+end
+
+def fun_l23_n420(x)
+ if (x < 1)
+ fun_l24_n33(x)
+ else
+ fun_l24_n897(x)
+ end
+end
+
+def fun_l23_n421(x)
+ if (x < 1)
+ fun_l24_n112(x)
+ else
+ fun_l24_n87(x)
+ end
+end
+
+def fun_l23_n422(x)
+ if (x < 1)
+ fun_l24_n386(x)
+ else
+ fun_l24_n450(x)
+ end
+end
+
+def fun_l23_n423(x)
+ if (x < 1)
+ fun_l24_n430(x)
+ else
+ fun_l24_n517(x)
+ end
+end
+
+def fun_l23_n424(x)
+ if (x < 1)
+ fun_l24_n413(x)
+ else
+ fun_l24_n799(x)
+ end
+end
+
+def fun_l23_n425(x)
+ if (x < 1)
+ fun_l24_n744(x)
+ else
+ fun_l24_n218(x)
+ end
+end
+
+def fun_l23_n426(x)
+ if (x < 1)
+ fun_l24_n231(x)
+ else
+ fun_l24_n454(x)
+ end
+end
+
+def fun_l23_n427(x)
+ if (x < 1)
+ fun_l24_n693(x)
+ else
+ fun_l24_n28(x)
+ end
+end
+
+def fun_l23_n428(x)
+ if (x < 1)
+ fun_l24_n694(x)
+ else
+ fun_l24_n712(x)
+ end
+end
+
+def fun_l23_n429(x)
+ if (x < 1)
+ fun_l24_n949(x)
+ else
+ fun_l24_n983(x)
+ end
+end
+
+def fun_l23_n430(x)
+ if (x < 1)
+ fun_l24_n324(x)
+ else
+ fun_l24_n818(x)
+ end
+end
+
+def fun_l23_n431(x)
+ if (x < 1)
+ fun_l24_n820(x)
+ else
+ fun_l24_n662(x)
+ end
+end
+
+def fun_l23_n432(x)
+ if (x < 1)
+ fun_l24_n391(x)
+ else
+ fun_l24_n801(x)
+ end
+end
+
+def fun_l23_n433(x)
+ if (x < 1)
+ fun_l24_n285(x)
+ else
+ fun_l24_n79(x)
+ end
+end
+
+def fun_l23_n434(x)
+ if (x < 1)
+ fun_l24_n582(x)
+ else
+ fun_l24_n820(x)
+ end
+end
+
+def fun_l23_n435(x)
+ if (x < 1)
+ fun_l24_n324(x)
+ else
+ fun_l24_n348(x)
+ end
+end
+
+def fun_l23_n436(x)
+ if (x < 1)
+ fun_l24_n241(x)
+ else
+ fun_l24_n568(x)
+ end
+end
+
+def fun_l23_n437(x)
+ if (x < 1)
+ fun_l24_n261(x)
+ else
+ fun_l24_n374(x)
+ end
+end
+
+def fun_l23_n438(x)
+ if (x < 1)
+ fun_l24_n886(x)
+ else
+ fun_l24_n38(x)
+ end
+end
+
+def fun_l23_n439(x)
+ if (x < 1)
+ fun_l24_n344(x)
+ else
+ fun_l24_n991(x)
+ end
+end
+
+def fun_l23_n440(x)
+ if (x < 1)
+ fun_l24_n792(x)
+ else
+ fun_l24_n298(x)
+ end
+end
+
+def fun_l23_n441(x)
+ if (x < 1)
+ fun_l24_n728(x)
+ else
+ fun_l24_n575(x)
+ end
+end
+
+def fun_l23_n442(x)
+ if (x < 1)
+ fun_l24_n22(x)
+ else
+ fun_l24_n804(x)
+ end
+end
+
+def fun_l23_n443(x)
+ if (x < 1)
+ fun_l24_n406(x)
+ else
+ fun_l24_n723(x)
+ end
+end
+
+def fun_l23_n444(x)
+ if (x < 1)
+ fun_l24_n921(x)
+ else
+ fun_l24_n455(x)
+ end
+end
+
+def fun_l23_n445(x)
+ if (x < 1)
+ fun_l24_n725(x)
+ else
+ fun_l24_n799(x)
+ end
+end
+
+def fun_l23_n446(x)
+ if (x < 1)
+ fun_l24_n543(x)
+ else
+ fun_l24_n350(x)
+ end
+end
+
+def fun_l23_n447(x)
+ if (x < 1)
+ fun_l24_n849(x)
+ else
+ fun_l24_n447(x)
+ end
+end
+
+def fun_l23_n448(x)
+ if (x < 1)
+ fun_l24_n357(x)
+ else
+ fun_l24_n915(x)
+ end
+end
+
+def fun_l23_n449(x)
+ if (x < 1)
+ fun_l24_n143(x)
+ else
+ fun_l24_n164(x)
+ end
+end
+
+def fun_l23_n450(x)
+ if (x < 1)
+ fun_l24_n702(x)
+ else
+ fun_l24_n940(x)
+ end
+end
+
+def fun_l23_n451(x)
+ if (x < 1)
+ fun_l24_n76(x)
+ else
+ fun_l24_n229(x)
+ end
+end
+
+def fun_l23_n452(x)
+ if (x < 1)
+ fun_l24_n55(x)
+ else
+ fun_l24_n177(x)
+ end
+end
+
+def fun_l23_n453(x)
+ if (x < 1)
+ fun_l24_n65(x)
+ else
+ fun_l24_n310(x)
+ end
+end
+
+def fun_l23_n454(x)
+ if (x < 1)
+ fun_l24_n818(x)
+ else
+ fun_l24_n1(x)
+ end
+end
+
+def fun_l23_n455(x)
+ if (x < 1)
+ fun_l24_n555(x)
+ else
+ fun_l24_n475(x)
+ end
+end
+
+def fun_l23_n456(x)
+ if (x < 1)
+ fun_l24_n867(x)
+ else
+ fun_l24_n350(x)
+ end
+end
+
+def fun_l23_n457(x)
+ if (x < 1)
+ fun_l24_n953(x)
+ else
+ fun_l24_n932(x)
+ end
+end
+
+def fun_l23_n458(x)
+ if (x < 1)
+ fun_l24_n104(x)
+ else
+ fun_l24_n555(x)
+ end
+end
+
+def fun_l23_n459(x)
+ if (x < 1)
+ fun_l24_n259(x)
+ else
+ fun_l24_n196(x)
+ end
+end
+
+def fun_l23_n460(x)
+ if (x < 1)
+ fun_l24_n747(x)
+ else
+ fun_l24_n788(x)
+ end
+end
+
+def fun_l23_n461(x)
+ if (x < 1)
+ fun_l24_n302(x)
+ else
+ fun_l24_n479(x)
+ end
+end
+
+def fun_l23_n462(x)
+ if (x < 1)
+ fun_l24_n292(x)
+ else
+ fun_l24_n235(x)
+ end
+end
+
+def fun_l23_n463(x)
+ if (x < 1)
+ fun_l24_n589(x)
+ else
+ fun_l24_n277(x)
+ end
+end
+
+def fun_l23_n464(x)
+ if (x < 1)
+ fun_l24_n212(x)
+ else
+ fun_l24_n334(x)
+ end
+end
+
+def fun_l23_n465(x)
+ if (x < 1)
+ fun_l24_n878(x)
+ else
+ fun_l24_n111(x)
+ end
+end
+
+def fun_l23_n466(x)
+ if (x < 1)
+ fun_l24_n862(x)
+ else
+ fun_l24_n736(x)
+ end
+end
+
+def fun_l23_n467(x)
+ if (x < 1)
+ fun_l24_n257(x)
+ else
+ fun_l24_n745(x)
+ end
+end
+
+def fun_l23_n468(x)
+ if (x < 1)
+ fun_l24_n922(x)
+ else
+ fun_l24_n453(x)
+ end
+end
+
+def fun_l23_n469(x)
+ if (x < 1)
+ fun_l24_n334(x)
+ else
+ fun_l24_n23(x)
+ end
+end
+
+def fun_l23_n470(x)
+ if (x < 1)
+ fun_l24_n585(x)
+ else
+ fun_l24_n512(x)
+ end
+end
+
+def fun_l23_n471(x)
+ if (x < 1)
+ fun_l24_n135(x)
+ else
+ fun_l24_n244(x)
+ end
+end
+
+def fun_l23_n472(x)
+ if (x < 1)
+ fun_l24_n151(x)
+ else
+ fun_l24_n479(x)
+ end
+end
+
+def fun_l23_n473(x)
+ if (x < 1)
+ fun_l24_n192(x)
+ else
+ fun_l24_n748(x)
+ end
+end
+
+def fun_l23_n474(x)
+ if (x < 1)
+ fun_l24_n729(x)
+ else
+ fun_l24_n283(x)
+ end
+end
+
+def fun_l23_n475(x)
+ if (x < 1)
+ fun_l24_n453(x)
+ else
+ fun_l24_n244(x)
+ end
+end
+
+def fun_l23_n476(x)
+ if (x < 1)
+ fun_l24_n210(x)
+ else
+ fun_l24_n6(x)
+ end
+end
+
+def fun_l23_n477(x)
+ if (x < 1)
+ fun_l24_n387(x)
+ else
+ fun_l24_n857(x)
+ end
+end
+
+def fun_l23_n478(x)
+ if (x < 1)
+ fun_l24_n312(x)
+ else
+ fun_l24_n378(x)
+ end
+end
+
+def fun_l23_n479(x)
+ if (x < 1)
+ fun_l24_n553(x)
+ else
+ fun_l24_n264(x)
+ end
+end
+
+def fun_l23_n480(x)
+ if (x < 1)
+ fun_l24_n903(x)
+ else
+ fun_l24_n374(x)
+ end
+end
+
+def fun_l23_n481(x)
+ if (x < 1)
+ fun_l24_n9(x)
+ else
+ fun_l24_n494(x)
+ end
+end
+
+def fun_l23_n482(x)
+ if (x < 1)
+ fun_l24_n4(x)
+ else
+ fun_l24_n119(x)
+ end
+end
+
+def fun_l23_n483(x)
+ if (x < 1)
+ fun_l24_n969(x)
+ else
+ fun_l24_n716(x)
+ end
+end
+
+def fun_l23_n484(x)
+ if (x < 1)
+ fun_l24_n132(x)
+ else
+ fun_l24_n950(x)
+ end
+end
+
+def fun_l23_n485(x)
+ if (x < 1)
+ fun_l24_n641(x)
+ else
+ fun_l24_n134(x)
+ end
+end
+
+def fun_l23_n486(x)
+ if (x < 1)
+ fun_l24_n499(x)
+ else
+ fun_l24_n506(x)
+ end
+end
+
+def fun_l23_n487(x)
+ if (x < 1)
+ fun_l24_n594(x)
+ else
+ fun_l24_n508(x)
+ end
+end
+
+def fun_l23_n488(x)
+ if (x < 1)
+ fun_l24_n730(x)
+ else
+ fun_l24_n464(x)
+ end
+end
+
+def fun_l23_n489(x)
+ if (x < 1)
+ fun_l24_n564(x)
+ else
+ fun_l24_n716(x)
+ end
+end
+
+def fun_l23_n490(x)
+ if (x < 1)
+ fun_l24_n658(x)
+ else
+ fun_l24_n63(x)
+ end
+end
+
+def fun_l23_n491(x)
+ if (x < 1)
+ fun_l24_n404(x)
+ else
+ fun_l24_n982(x)
+ end
+end
+
+def fun_l23_n492(x)
+ if (x < 1)
+ fun_l24_n182(x)
+ else
+ fun_l24_n97(x)
+ end
+end
+
+def fun_l23_n493(x)
+ if (x < 1)
+ fun_l24_n97(x)
+ else
+ fun_l24_n765(x)
+ end
+end
+
+def fun_l23_n494(x)
+ if (x < 1)
+ fun_l24_n728(x)
+ else
+ fun_l24_n703(x)
+ end
+end
+
+def fun_l23_n495(x)
+ if (x < 1)
+ fun_l24_n327(x)
+ else
+ fun_l24_n484(x)
+ end
+end
+
+def fun_l23_n496(x)
+ if (x < 1)
+ fun_l24_n544(x)
+ else
+ fun_l24_n814(x)
+ end
+end
+
+def fun_l23_n497(x)
+ if (x < 1)
+ fun_l24_n555(x)
+ else
+ fun_l24_n160(x)
+ end
+end
+
+def fun_l23_n498(x)
+ if (x < 1)
+ fun_l24_n336(x)
+ else
+ fun_l24_n544(x)
+ end
+end
+
+def fun_l23_n499(x)
+ if (x < 1)
+ fun_l24_n242(x)
+ else
+ fun_l24_n337(x)
+ end
+end
+
+def fun_l23_n500(x)
+ if (x < 1)
+ fun_l24_n71(x)
+ else
+ fun_l24_n446(x)
+ end
+end
+
+def fun_l23_n501(x)
+ if (x < 1)
+ fun_l24_n726(x)
+ else
+ fun_l24_n127(x)
+ end
+end
+
+def fun_l23_n502(x)
+ if (x < 1)
+ fun_l24_n430(x)
+ else
+ fun_l24_n136(x)
+ end
+end
+
+def fun_l23_n503(x)
+ if (x < 1)
+ fun_l24_n140(x)
+ else
+ fun_l24_n942(x)
+ end
+end
+
+def fun_l23_n504(x)
+ if (x < 1)
+ fun_l24_n135(x)
+ else
+ fun_l24_n701(x)
+ end
+end
+
+def fun_l23_n505(x)
+ if (x < 1)
+ fun_l24_n409(x)
+ else
+ fun_l24_n825(x)
+ end
+end
+
+def fun_l23_n506(x)
+ if (x < 1)
+ fun_l24_n415(x)
+ else
+ fun_l24_n336(x)
+ end
+end
+
+def fun_l23_n507(x)
+ if (x < 1)
+ fun_l24_n118(x)
+ else
+ fun_l24_n904(x)
+ end
+end
+
+def fun_l23_n508(x)
+ if (x < 1)
+ fun_l24_n870(x)
+ else
+ fun_l24_n473(x)
+ end
+end
+
+def fun_l23_n509(x)
+ if (x < 1)
+ fun_l24_n99(x)
+ else
+ fun_l24_n157(x)
+ end
+end
+
+def fun_l23_n510(x)
+ if (x < 1)
+ fun_l24_n484(x)
+ else
+ fun_l24_n933(x)
+ end
+end
+
+def fun_l23_n511(x)
+ if (x < 1)
+ fun_l24_n204(x)
+ else
+ fun_l24_n95(x)
+ end
+end
+
+def fun_l23_n512(x)
+ if (x < 1)
+ fun_l24_n783(x)
+ else
+ fun_l24_n490(x)
+ end
+end
+
+def fun_l23_n513(x)
+ if (x < 1)
+ fun_l24_n642(x)
+ else
+ fun_l24_n622(x)
+ end
+end
+
+def fun_l23_n514(x)
+ if (x < 1)
+ fun_l24_n514(x)
+ else
+ fun_l24_n287(x)
+ end
+end
+
+def fun_l23_n515(x)
+ if (x < 1)
+ fun_l24_n174(x)
+ else
+ fun_l24_n19(x)
+ end
+end
+
+def fun_l23_n516(x)
+ if (x < 1)
+ fun_l24_n840(x)
+ else
+ fun_l24_n710(x)
+ end
+end
+
+def fun_l23_n517(x)
+ if (x < 1)
+ fun_l24_n921(x)
+ else
+ fun_l24_n11(x)
+ end
+end
+
+def fun_l23_n518(x)
+ if (x < 1)
+ fun_l24_n162(x)
+ else
+ fun_l24_n185(x)
+ end
+end
+
+def fun_l23_n519(x)
+ if (x < 1)
+ fun_l24_n654(x)
+ else
+ fun_l24_n514(x)
+ end
+end
+
+def fun_l23_n520(x)
+ if (x < 1)
+ fun_l24_n763(x)
+ else
+ fun_l24_n158(x)
+ end
+end
+
+def fun_l23_n521(x)
+ if (x < 1)
+ fun_l24_n471(x)
+ else
+ fun_l24_n617(x)
+ end
+end
+
+def fun_l23_n522(x)
+ if (x < 1)
+ fun_l24_n146(x)
+ else
+ fun_l24_n6(x)
+ end
+end
+
+def fun_l23_n523(x)
+ if (x < 1)
+ fun_l24_n447(x)
+ else
+ fun_l24_n981(x)
+ end
+end
+
+def fun_l23_n524(x)
+ if (x < 1)
+ fun_l24_n809(x)
+ else
+ fun_l24_n78(x)
+ end
+end
+
+def fun_l23_n525(x)
+ if (x < 1)
+ fun_l24_n554(x)
+ else
+ fun_l24_n50(x)
+ end
+end
+
+def fun_l23_n526(x)
+ if (x < 1)
+ fun_l24_n970(x)
+ else
+ fun_l24_n600(x)
+ end
+end
+
+def fun_l23_n527(x)
+ if (x < 1)
+ fun_l24_n700(x)
+ else
+ fun_l24_n982(x)
+ end
+end
+
+def fun_l23_n528(x)
+ if (x < 1)
+ fun_l24_n947(x)
+ else
+ fun_l24_n886(x)
+ end
+end
+
+def fun_l23_n529(x)
+ if (x < 1)
+ fun_l24_n198(x)
+ else
+ fun_l24_n283(x)
+ end
+end
+
+def fun_l23_n530(x)
+ if (x < 1)
+ fun_l24_n641(x)
+ else
+ fun_l24_n879(x)
+ end
+end
+
+def fun_l23_n531(x)
+ if (x < 1)
+ fun_l24_n393(x)
+ else
+ fun_l24_n451(x)
+ end
+end
+
+def fun_l23_n532(x)
+ if (x < 1)
+ fun_l24_n802(x)
+ else
+ fun_l24_n271(x)
+ end
+end
+
+def fun_l23_n533(x)
+ if (x < 1)
+ fun_l24_n926(x)
+ else
+ fun_l24_n315(x)
+ end
+end
+
+def fun_l23_n534(x)
+ if (x < 1)
+ fun_l24_n544(x)
+ else
+ fun_l24_n358(x)
+ end
+end
+
+def fun_l23_n535(x)
+ if (x < 1)
+ fun_l24_n456(x)
+ else
+ fun_l24_n569(x)
+ end
+end
+
+def fun_l23_n536(x)
+ if (x < 1)
+ fun_l24_n235(x)
+ else
+ fun_l24_n182(x)
+ end
+end
+
+def fun_l23_n537(x)
+ if (x < 1)
+ fun_l24_n159(x)
+ else
+ fun_l24_n674(x)
+ end
+end
+
+def fun_l23_n538(x)
+ if (x < 1)
+ fun_l24_n956(x)
+ else
+ fun_l24_n145(x)
+ end
+end
+
+def fun_l23_n539(x)
+ if (x < 1)
+ fun_l24_n294(x)
+ else
+ fun_l24_n910(x)
+ end
+end
+
+def fun_l23_n540(x)
+ if (x < 1)
+ fun_l24_n434(x)
+ else
+ fun_l24_n336(x)
+ end
+end
+
+def fun_l23_n541(x)
+ if (x < 1)
+ fun_l24_n635(x)
+ else
+ fun_l24_n182(x)
+ end
+end
+
+def fun_l23_n542(x)
+ if (x < 1)
+ fun_l24_n418(x)
+ else
+ fun_l24_n828(x)
+ end
+end
+
+def fun_l23_n543(x)
+ if (x < 1)
+ fun_l24_n337(x)
+ else
+ fun_l24_n740(x)
+ end
+end
+
+def fun_l23_n544(x)
+ if (x < 1)
+ fun_l24_n893(x)
+ else
+ fun_l24_n402(x)
+ end
+end
+
+def fun_l23_n545(x)
+ if (x < 1)
+ fun_l24_n407(x)
+ else
+ fun_l24_n124(x)
+ end
+end
+
+def fun_l23_n546(x)
+ if (x < 1)
+ fun_l24_n170(x)
+ else
+ fun_l24_n64(x)
+ end
+end
+
+def fun_l23_n547(x)
+ if (x < 1)
+ fun_l24_n936(x)
+ else
+ fun_l24_n876(x)
+ end
+end
+
+def fun_l23_n548(x)
+ if (x < 1)
+ fun_l24_n387(x)
+ else
+ fun_l24_n655(x)
+ end
+end
+
+def fun_l23_n549(x)
+ if (x < 1)
+ fun_l24_n162(x)
+ else
+ fun_l24_n210(x)
+ end
+end
+
+def fun_l23_n550(x)
+ if (x < 1)
+ fun_l24_n454(x)
+ else
+ fun_l24_n695(x)
+ end
+end
+
+def fun_l23_n551(x)
+ if (x < 1)
+ fun_l24_n410(x)
+ else
+ fun_l24_n529(x)
+ end
+end
+
+def fun_l23_n552(x)
+ if (x < 1)
+ fun_l24_n726(x)
+ else
+ fun_l24_n450(x)
+ end
+end
+
+def fun_l23_n553(x)
+ if (x < 1)
+ fun_l24_n39(x)
+ else
+ fun_l24_n37(x)
+ end
+end
+
+def fun_l23_n554(x)
+ if (x < 1)
+ fun_l24_n994(x)
+ else
+ fun_l24_n106(x)
+ end
+end
+
+def fun_l23_n555(x)
+ if (x < 1)
+ fun_l24_n929(x)
+ else
+ fun_l24_n766(x)
+ end
+end
+
+def fun_l23_n556(x)
+ if (x < 1)
+ fun_l24_n531(x)
+ else
+ fun_l24_n502(x)
+ end
+end
+
+def fun_l23_n557(x)
+ if (x < 1)
+ fun_l24_n890(x)
+ else
+ fun_l24_n919(x)
+ end
+end
+
+def fun_l23_n558(x)
+ if (x < 1)
+ fun_l24_n803(x)
+ else
+ fun_l24_n460(x)
+ end
+end
+
+def fun_l23_n559(x)
+ if (x < 1)
+ fun_l24_n5(x)
+ else
+ fun_l24_n464(x)
+ end
+end
+
+def fun_l23_n560(x)
+ if (x < 1)
+ fun_l24_n506(x)
+ else
+ fun_l24_n891(x)
+ end
+end
+
+def fun_l23_n561(x)
+ if (x < 1)
+ fun_l24_n98(x)
+ else
+ fun_l24_n534(x)
+ end
+end
+
+def fun_l23_n562(x)
+ if (x < 1)
+ fun_l24_n130(x)
+ else
+ fun_l24_n54(x)
+ end
+end
+
+def fun_l23_n563(x)
+ if (x < 1)
+ fun_l24_n881(x)
+ else
+ fun_l24_n699(x)
+ end
+end
+
+def fun_l23_n564(x)
+ if (x < 1)
+ fun_l24_n192(x)
+ else
+ fun_l24_n112(x)
+ end
+end
+
+def fun_l23_n565(x)
+ if (x < 1)
+ fun_l24_n249(x)
+ else
+ fun_l24_n796(x)
+ end
+end
+
+def fun_l23_n566(x)
+ if (x < 1)
+ fun_l24_n113(x)
+ else
+ fun_l24_n599(x)
+ end
+end
+
+def fun_l23_n567(x)
+ if (x < 1)
+ fun_l24_n334(x)
+ else
+ fun_l24_n80(x)
+ end
+end
+
+def fun_l23_n568(x)
+ if (x < 1)
+ fun_l24_n347(x)
+ else
+ fun_l24_n726(x)
+ end
+end
+
+def fun_l23_n569(x)
+ if (x < 1)
+ fun_l24_n60(x)
+ else
+ fun_l24_n249(x)
+ end
+end
+
+def fun_l23_n570(x)
+ if (x < 1)
+ fun_l24_n400(x)
+ else
+ fun_l24_n773(x)
+ end
+end
+
+def fun_l23_n571(x)
+ if (x < 1)
+ fun_l24_n172(x)
+ else
+ fun_l24_n787(x)
+ end
+end
+
+def fun_l23_n572(x)
+ if (x < 1)
+ fun_l24_n973(x)
+ else
+ fun_l24_n875(x)
+ end
+end
+
+def fun_l23_n573(x)
+ if (x < 1)
+ fun_l24_n290(x)
+ else
+ fun_l24_n225(x)
+ end
+end
+
+def fun_l23_n574(x)
+ if (x < 1)
+ fun_l24_n383(x)
+ else
+ fun_l24_n714(x)
+ end
+end
+
+def fun_l23_n575(x)
+ if (x < 1)
+ fun_l24_n32(x)
+ else
+ fun_l24_n508(x)
+ end
+end
+
+def fun_l23_n576(x)
+ if (x < 1)
+ fun_l24_n74(x)
+ else
+ fun_l24_n368(x)
+ end
+end
+
+def fun_l23_n577(x)
+ if (x < 1)
+ fun_l24_n431(x)
+ else
+ fun_l24_n2(x)
+ end
+end
+
+def fun_l23_n578(x)
+ if (x < 1)
+ fun_l24_n758(x)
+ else
+ fun_l24_n178(x)
+ end
+end
+
+def fun_l23_n579(x)
+ if (x < 1)
+ fun_l24_n130(x)
+ else
+ fun_l24_n512(x)
+ end
+end
+
+def fun_l23_n580(x)
+ if (x < 1)
+ fun_l24_n790(x)
+ else
+ fun_l24_n280(x)
+ end
+end
+
+def fun_l23_n581(x)
+ if (x < 1)
+ fun_l24_n76(x)
+ else
+ fun_l24_n596(x)
+ end
+end
+
+def fun_l23_n582(x)
+ if (x < 1)
+ fun_l24_n643(x)
+ else
+ fun_l24_n506(x)
+ end
+end
+
+def fun_l23_n583(x)
+ if (x < 1)
+ fun_l24_n392(x)
+ else
+ fun_l24_n671(x)
+ end
+end
+
+def fun_l23_n584(x)
+ if (x < 1)
+ fun_l24_n722(x)
+ else
+ fun_l24_n390(x)
+ end
+end
+
+def fun_l23_n585(x)
+ if (x < 1)
+ fun_l24_n613(x)
+ else
+ fun_l24_n461(x)
+ end
+end
+
+def fun_l23_n586(x)
+ if (x < 1)
+ fun_l24_n784(x)
+ else
+ fun_l24_n426(x)
+ end
+end
+
+def fun_l23_n587(x)
+ if (x < 1)
+ fun_l24_n351(x)
+ else
+ fun_l24_n68(x)
+ end
+end
+
+def fun_l23_n588(x)
+ if (x < 1)
+ fun_l24_n8(x)
+ else
+ fun_l24_n9(x)
+ end
+end
+
+def fun_l23_n589(x)
+ if (x < 1)
+ fun_l24_n984(x)
+ else
+ fun_l24_n704(x)
+ end
+end
+
+def fun_l23_n590(x)
+ if (x < 1)
+ fun_l24_n150(x)
+ else
+ fun_l24_n36(x)
+ end
+end
+
+def fun_l23_n591(x)
+ if (x < 1)
+ fun_l24_n232(x)
+ else
+ fun_l24_n293(x)
+ end
+end
+
+def fun_l23_n592(x)
+ if (x < 1)
+ fun_l24_n763(x)
+ else
+ fun_l24_n444(x)
+ end
+end
+
+def fun_l23_n593(x)
+ if (x < 1)
+ fun_l24_n246(x)
+ else
+ fun_l24_n101(x)
+ end
+end
+
+def fun_l23_n594(x)
+ if (x < 1)
+ fun_l24_n145(x)
+ else
+ fun_l24_n626(x)
+ end
+end
+
+def fun_l23_n595(x)
+ if (x < 1)
+ fun_l24_n835(x)
+ else
+ fun_l24_n827(x)
+ end
+end
+
+def fun_l23_n596(x)
+ if (x < 1)
+ fun_l24_n925(x)
+ else
+ fun_l24_n875(x)
+ end
+end
+
+def fun_l23_n597(x)
+ if (x < 1)
+ fun_l24_n600(x)
+ else
+ fun_l24_n817(x)
+ end
+end
+
+def fun_l23_n598(x)
+ if (x < 1)
+ fun_l24_n653(x)
+ else
+ fun_l24_n632(x)
+ end
+end
+
+def fun_l23_n599(x)
+ if (x < 1)
+ fun_l24_n103(x)
+ else
+ fun_l24_n675(x)
+ end
+end
+
+def fun_l23_n600(x)
+ if (x < 1)
+ fun_l24_n1(x)
+ else
+ fun_l24_n899(x)
+ end
+end
+
+def fun_l23_n601(x)
+ if (x < 1)
+ fun_l24_n357(x)
+ else
+ fun_l24_n88(x)
+ end
+end
+
+def fun_l23_n602(x)
+ if (x < 1)
+ fun_l24_n213(x)
+ else
+ fun_l24_n71(x)
+ end
+end
+
+def fun_l23_n603(x)
+ if (x < 1)
+ fun_l24_n299(x)
+ else
+ fun_l24_n283(x)
+ end
+end
+
+def fun_l23_n604(x)
+ if (x < 1)
+ fun_l24_n647(x)
+ else
+ fun_l24_n891(x)
+ end
+end
+
+def fun_l23_n605(x)
+ if (x < 1)
+ fun_l24_n86(x)
+ else
+ fun_l24_n581(x)
+ end
+end
+
+def fun_l23_n606(x)
+ if (x < 1)
+ fun_l24_n749(x)
+ else
+ fun_l24_n780(x)
+ end
+end
+
+def fun_l23_n607(x)
+ if (x < 1)
+ fun_l24_n537(x)
+ else
+ fun_l24_n22(x)
+ end
+end
+
+def fun_l23_n608(x)
+ if (x < 1)
+ fun_l24_n535(x)
+ else
+ fun_l24_n379(x)
+ end
+end
+
+def fun_l23_n609(x)
+ if (x < 1)
+ fun_l24_n860(x)
+ else
+ fun_l24_n220(x)
+ end
+end
+
+def fun_l23_n610(x)
+ if (x < 1)
+ fun_l24_n366(x)
+ else
+ fun_l24_n216(x)
+ end
+end
+
+def fun_l23_n611(x)
+ if (x < 1)
+ fun_l24_n79(x)
+ else
+ fun_l24_n506(x)
+ end
+end
+
+def fun_l23_n612(x)
+ if (x < 1)
+ fun_l24_n600(x)
+ else
+ fun_l24_n367(x)
+ end
+end
+
+def fun_l23_n613(x)
+ if (x < 1)
+ fun_l24_n764(x)
+ else
+ fun_l24_n167(x)
+ end
+end
+
+def fun_l23_n614(x)
+ if (x < 1)
+ fun_l24_n113(x)
+ else
+ fun_l24_n398(x)
+ end
+end
+
+def fun_l23_n615(x)
+ if (x < 1)
+ fun_l24_n292(x)
+ else
+ fun_l24_n1(x)
+ end
+end
+
+def fun_l23_n616(x)
+ if (x < 1)
+ fun_l24_n523(x)
+ else
+ fun_l24_n344(x)
+ end
+end
+
+def fun_l23_n617(x)
+ if (x < 1)
+ fun_l24_n60(x)
+ else
+ fun_l24_n618(x)
+ end
+end
+
+def fun_l23_n618(x)
+ if (x < 1)
+ fun_l24_n252(x)
+ else
+ fun_l24_n718(x)
+ end
+end
+
+def fun_l23_n619(x)
+ if (x < 1)
+ fun_l24_n962(x)
+ else
+ fun_l24_n69(x)
+ end
+end
+
+def fun_l23_n620(x)
+ if (x < 1)
+ fun_l24_n10(x)
+ else
+ fun_l24_n87(x)
+ end
+end
+
+def fun_l23_n621(x)
+ if (x < 1)
+ fun_l24_n128(x)
+ else
+ fun_l24_n958(x)
+ end
+end
+
+def fun_l23_n622(x)
+ if (x < 1)
+ fun_l24_n775(x)
+ else
+ fun_l24_n205(x)
+ end
+end
+
+def fun_l23_n623(x)
+ if (x < 1)
+ fun_l24_n121(x)
+ else
+ fun_l24_n69(x)
+ end
+end
+
+def fun_l23_n624(x)
+ if (x < 1)
+ fun_l24_n768(x)
+ else
+ fun_l24_n439(x)
+ end
+end
+
+def fun_l23_n625(x)
+ if (x < 1)
+ fun_l24_n332(x)
+ else
+ fun_l24_n73(x)
+ end
+end
+
+def fun_l23_n626(x)
+ if (x < 1)
+ fun_l24_n735(x)
+ else
+ fun_l24_n651(x)
+ end
+end
+
+def fun_l23_n627(x)
+ if (x < 1)
+ fun_l24_n661(x)
+ else
+ fun_l24_n827(x)
+ end
+end
+
+def fun_l23_n628(x)
+ if (x < 1)
+ fun_l24_n607(x)
+ else
+ fun_l24_n343(x)
+ end
+end
+
+def fun_l23_n629(x)
+ if (x < 1)
+ fun_l24_n868(x)
+ else
+ fun_l24_n633(x)
+ end
+end
+
+def fun_l23_n630(x)
+ if (x < 1)
+ fun_l24_n321(x)
+ else
+ fun_l24_n44(x)
+ end
+end
+
+def fun_l23_n631(x)
+ if (x < 1)
+ fun_l24_n840(x)
+ else
+ fun_l24_n265(x)
+ end
+end
+
+def fun_l23_n632(x)
+ if (x < 1)
+ fun_l24_n710(x)
+ else
+ fun_l24_n343(x)
+ end
+end
+
+def fun_l23_n633(x)
+ if (x < 1)
+ fun_l24_n640(x)
+ else
+ fun_l24_n112(x)
+ end
+end
+
+def fun_l23_n634(x)
+ if (x < 1)
+ fun_l24_n237(x)
+ else
+ fun_l24_n83(x)
+ end
+end
+
+def fun_l23_n635(x)
+ if (x < 1)
+ fun_l24_n235(x)
+ else
+ fun_l24_n970(x)
+ end
+end
+
+def fun_l23_n636(x)
+ if (x < 1)
+ fun_l24_n576(x)
+ else
+ fun_l24_n891(x)
+ end
+end
+
+def fun_l23_n637(x)
+ if (x < 1)
+ fun_l24_n489(x)
+ else
+ fun_l24_n136(x)
+ end
+end
+
+def fun_l23_n638(x)
+ if (x < 1)
+ fun_l24_n532(x)
+ else
+ fun_l24_n150(x)
+ end
+end
+
+def fun_l23_n639(x)
+ if (x < 1)
+ fun_l24_n496(x)
+ else
+ fun_l24_n57(x)
+ end
+end
+
+def fun_l23_n640(x)
+ if (x < 1)
+ fun_l24_n857(x)
+ else
+ fun_l24_n564(x)
+ end
+end
+
+def fun_l23_n641(x)
+ if (x < 1)
+ fun_l24_n203(x)
+ else
+ fun_l24_n730(x)
+ end
+end
+
+def fun_l23_n642(x)
+ if (x < 1)
+ fun_l24_n38(x)
+ else
+ fun_l24_n388(x)
+ end
+end
+
+def fun_l23_n643(x)
+ if (x < 1)
+ fun_l24_n650(x)
+ else
+ fun_l24_n672(x)
+ end
+end
+
+def fun_l23_n644(x)
+ if (x < 1)
+ fun_l24_n842(x)
+ else
+ fun_l24_n473(x)
+ end
+end
+
+def fun_l23_n645(x)
+ if (x < 1)
+ fun_l24_n650(x)
+ else
+ fun_l24_n36(x)
+ end
+end
+
+def fun_l23_n646(x)
+ if (x < 1)
+ fun_l24_n25(x)
+ else
+ fun_l24_n696(x)
+ end
+end
+
+def fun_l23_n647(x)
+ if (x < 1)
+ fun_l24_n24(x)
+ else
+ fun_l24_n414(x)
+ end
+end
+
+def fun_l23_n648(x)
+ if (x < 1)
+ fun_l24_n778(x)
+ else
+ fun_l24_n794(x)
+ end
+end
+
+def fun_l23_n649(x)
+ if (x < 1)
+ fun_l24_n132(x)
+ else
+ fun_l24_n833(x)
+ end
+end
+
+def fun_l23_n650(x)
+ if (x < 1)
+ fun_l24_n718(x)
+ else
+ fun_l24_n327(x)
+ end
+end
+
+def fun_l23_n651(x)
+ if (x < 1)
+ fun_l24_n969(x)
+ else
+ fun_l24_n865(x)
+ end
+end
+
+def fun_l23_n652(x)
+ if (x < 1)
+ fun_l24_n904(x)
+ else
+ fun_l24_n4(x)
+ end
+end
+
+def fun_l23_n653(x)
+ if (x < 1)
+ fun_l24_n342(x)
+ else
+ fun_l24_n953(x)
+ end
+end
+
+def fun_l23_n654(x)
+ if (x < 1)
+ fun_l24_n393(x)
+ else
+ fun_l24_n175(x)
+ end
+end
+
+def fun_l23_n655(x)
+ if (x < 1)
+ fun_l24_n241(x)
+ else
+ fun_l24_n835(x)
+ end
+end
+
+def fun_l23_n656(x)
+ if (x < 1)
+ fun_l24_n326(x)
+ else
+ fun_l24_n294(x)
+ end
+end
+
+def fun_l23_n657(x)
+ if (x < 1)
+ fun_l24_n8(x)
+ else
+ fun_l24_n327(x)
+ end
+end
+
+def fun_l23_n658(x)
+ if (x < 1)
+ fun_l24_n859(x)
+ else
+ fun_l24_n138(x)
+ end
+end
+
+def fun_l23_n659(x)
+ if (x < 1)
+ fun_l24_n389(x)
+ else
+ fun_l24_n840(x)
+ end
+end
+
+def fun_l23_n660(x)
+ if (x < 1)
+ fun_l24_n171(x)
+ else
+ fun_l24_n731(x)
+ end
+end
+
+def fun_l23_n661(x)
+ if (x < 1)
+ fun_l24_n284(x)
+ else
+ fun_l24_n358(x)
+ end
+end
+
+def fun_l23_n662(x)
+ if (x < 1)
+ fun_l24_n329(x)
+ else
+ fun_l24_n459(x)
+ end
+end
+
+def fun_l23_n663(x)
+ if (x < 1)
+ fun_l24_n6(x)
+ else
+ fun_l24_n29(x)
+ end
+end
+
+def fun_l23_n664(x)
+ if (x < 1)
+ fun_l24_n324(x)
+ else
+ fun_l24_n58(x)
+ end
+end
+
+def fun_l23_n665(x)
+ if (x < 1)
+ fun_l24_n473(x)
+ else
+ fun_l24_n932(x)
+ end
+end
+
+def fun_l23_n666(x)
+ if (x < 1)
+ fun_l24_n425(x)
+ else
+ fun_l24_n49(x)
+ end
+end
+
+def fun_l23_n667(x)
+ if (x < 1)
+ fun_l24_n122(x)
+ else
+ fun_l24_n515(x)
+ end
+end
+
+def fun_l23_n668(x)
+ if (x < 1)
+ fun_l24_n883(x)
+ else
+ fun_l24_n383(x)
+ end
+end
+
+def fun_l23_n669(x)
+ if (x < 1)
+ fun_l24_n316(x)
+ else
+ fun_l24_n456(x)
+ end
+end
+
+def fun_l23_n670(x)
+ if (x < 1)
+ fun_l24_n812(x)
+ else
+ fun_l24_n625(x)
+ end
+end
+
+def fun_l23_n671(x)
+ if (x < 1)
+ fun_l24_n431(x)
+ else
+ fun_l24_n685(x)
+ end
+end
+
+def fun_l23_n672(x)
+ if (x < 1)
+ fun_l24_n68(x)
+ else
+ fun_l24_n112(x)
+ end
+end
+
+def fun_l23_n673(x)
+ if (x < 1)
+ fun_l24_n137(x)
+ else
+ fun_l24_n349(x)
+ end
+end
+
+def fun_l23_n674(x)
+ if (x < 1)
+ fun_l24_n629(x)
+ else
+ fun_l24_n165(x)
+ end
+end
+
+def fun_l23_n675(x)
+ if (x < 1)
+ fun_l24_n484(x)
+ else
+ fun_l24_n102(x)
+ end
+end
+
+def fun_l23_n676(x)
+ if (x < 1)
+ fun_l24_n641(x)
+ else
+ fun_l24_n912(x)
+ end
+end
+
+def fun_l23_n677(x)
+ if (x < 1)
+ fun_l24_n817(x)
+ else
+ fun_l24_n975(x)
+ end
+end
+
+def fun_l23_n678(x)
+ if (x < 1)
+ fun_l24_n510(x)
+ else
+ fun_l24_n346(x)
+ end
+end
+
+def fun_l23_n679(x)
+ if (x < 1)
+ fun_l24_n129(x)
+ else
+ fun_l24_n602(x)
+ end
+end
+
+def fun_l23_n680(x)
+ if (x < 1)
+ fun_l24_n991(x)
+ else
+ fun_l24_n406(x)
+ end
+end
+
+def fun_l23_n681(x)
+ if (x < 1)
+ fun_l24_n433(x)
+ else
+ fun_l24_n998(x)
+ end
+end
+
+def fun_l23_n682(x)
+ if (x < 1)
+ fun_l24_n645(x)
+ else
+ fun_l24_n275(x)
+ end
+end
+
+def fun_l23_n683(x)
+ if (x < 1)
+ fun_l24_n832(x)
+ else
+ fun_l24_n346(x)
+ end
+end
+
+def fun_l23_n684(x)
+ if (x < 1)
+ fun_l24_n769(x)
+ else
+ fun_l24_n927(x)
+ end
+end
+
+def fun_l23_n685(x)
+ if (x < 1)
+ fun_l24_n389(x)
+ else
+ fun_l24_n777(x)
+ end
+end
+
+def fun_l23_n686(x)
+ if (x < 1)
+ fun_l24_n658(x)
+ else
+ fun_l24_n184(x)
+ end
+end
+
+def fun_l23_n687(x)
+ if (x < 1)
+ fun_l24_n134(x)
+ else
+ fun_l24_n517(x)
+ end
+end
+
+def fun_l23_n688(x)
+ if (x < 1)
+ fun_l24_n49(x)
+ else
+ fun_l24_n392(x)
+ end
+end
+
+def fun_l23_n689(x)
+ if (x < 1)
+ fun_l24_n23(x)
+ else
+ fun_l24_n402(x)
+ end
+end
+
+def fun_l23_n690(x)
+ if (x < 1)
+ fun_l24_n719(x)
+ else
+ fun_l24_n529(x)
+ end
+end
+
+def fun_l23_n691(x)
+ if (x < 1)
+ fun_l24_n543(x)
+ else
+ fun_l24_n789(x)
+ end
+end
+
+def fun_l23_n692(x)
+ if (x < 1)
+ fun_l24_n850(x)
+ else
+ fun_l24_n50(x)
+ end
+end
+
+def fun_l23_n693(x)
+ if (x < 1)
+ fun_l24_n728(x)
+ else
+ fun_l24_n730(x)
+ end
+end
+
+def fun_l23_n694(x)
+ if (x < 1)
+ fun_l24_n810(x)
+ else
+ fun_l24_n999(x)
+ end
+end
+
+def fun_l23_n695(x)
+ if (x < 1)
+ fun_l24_n856(x)
+ else
+ fun_l24_n404(x)
+ end
+end
+
+def fun_l23_n696(x)
+ if (x < 1)
+ fun_l24_n405(x)
+ else
+ fun_l24_n275(x)
+ end
+end
+
+def fun_l23_n697(x)
+ if (x < 1)
+ fun_l24_n446(x)
+ else
+ fun_l24_n773(x)
+ end
+end
+
+def fun_l23_n698(x)
+ if (x < 1)
+ fun_l24_n509(x)
+ else
+ fun_l24_n146(x)
+ end
+end
+
+def fun_l23_n699(x)
+ if (x < 1)
+ fun_l24_n770(x)
+ else
+ fun_l24_n275(x)
+ end
+end
+
+def fun_l23_n700(x)
+ if (x < 1)
+ fun_l24_n222(x)
+ else
+ fun_l24_n60(x)
+ end
+end
+
+def fun_l23_n701(x)
+ if (x < 1)
+ fun_l24_n380(x)
+ else
+ fun_l24_n654(x)
+ end
+end
+
+def fun_l23_n702(x)
+ if (x < 1)
+ fun_l24_n417(x)
+ else
+ fun_l24_n221(x)
+ end
+end
+
+def fun_l23_n703(x)
+ if (x < 1)
+ fun_l24_n283(x)
+ else
+ fun_l24_n171(x)
+ end
+end
+
+def fun_l23_n704(x)
+ if (x < 1)
+ fun_l24_n822(x)
+ else
+ fun_l24_n72(x)
+ end
+end
+
+def fun_l23_n705(x)
+ if (x < 1)
+ fun_l24_n171(x)
+ else
+ fun_l24_n258(x)
+ end
+end
+
+def fun_l23_n706(x)
+ if (x < 1)
+ fun_l24_n147(x)
+ else
+ fun_l24_n518(x)
+ end
+end
+
+def fun_l23_n707(x)
+ if (x < 1)
+ fun_l24_n479(x)
+ else
+ fun_l24_n267(x)
+ end
+end
+
+def fun_l23_n708(x)
+ if (x < 1)
+ fun_l24_n424(x)
+ else
+ fun_l24_n517(x)
+ end
+end
+
+def fun_l23_n709(x)
+ if (x < 1)
+ fun_l24_n816(x)
+ else
+ fun_l24_n329(x)
+ end
+end
+
+def fun_l23_n710(x)
+ if (x < 1)
+ fun_l24_n870(x)
+ else
+ fun_l24_n185(x)
+ end
+end
+
+def fun_l23_n711(x)
+ if (x < 1)
+ fun_l24_n726(x)
+ else
+ fun_l24_n950(x)
+ end
+end
+
+def fun_l23_n712(x)
+ if (x < 1)
+ fun_l24_n473(x)
+ else
+ fun_l24_n179(x)
+ end
+end
+
+def fun_l23_n713(x)
+ if (x < 1)
+ fun_l24_n345(x)
+ else
+ fun_l24_n872(x)
+ end
+end
+
+def fun_l23_n714(x)
+ if (x < 1)
+ fun_l24_n757(x)
+ else
+ fun_l24_n364(x)
+ end
+end
+
+def fun_l23_n715(x)
+ if (x < 1)
+ fun_l24_n91(x)
+ else
+ fun_l24_n999(x)
+ end
+end
+
+def fun_l23_n716(x)
+ if (x < 1)
+ fun_l24_n308(x)
+ else
+ fun_l24_n281(x)
+ end
+end
+
+def fun_l23_n717(x)
+ if (x < 1)
+ fun_l24_n855(x)
+ else
+ fun_l24_n175(x)
+ end
+end
+
+def fun_l23_n718(x)
+ if (x < 1)
+ fun_l24_n251(x)
+ else
+ fun_l24_n532(x)
+ end
+end
+
+def fun_l23_n719(x)
+ if (x < 1)
+ fun_l24_n261(x)
+ else
+ fun_l24_n755(x)
+ end
+end
+
+def fun_l23_n720(x)
+ if (x < 1)
+ fun_l24_n182(x)
+ else
+ fun_l24_n115(x)
+ end
+end
+
+def fun_l23_n721(x)
+ if (x < 1)
+ fun_l24_n648(x)
+ else
+ fun_l24_n728(x)
+ end
+end
+
+def fun_l23_n722(x)
+ if (x < 1)
+ fun_l24_n552(x)
+ else
+ fun_l24_n549(x)
+ end
+end
+
+def fun_l23_n723(x)
+ if (x < 1)
+ fun_l24_n24(x)
+ else
+ fun_l24_n794(x)
+ end
+end
+
+def fun_l23_n724(x)
+ if (x < 1)
+ fun_l24_n242(x)
+ else
+ fun_l24_n980(x)
+ end
+end
+
+def fun_l23_n725(x)
+ if (x < 1)
+ fun_l24_n931(x)
+ else
+ fun_l24_n711(x)
+ end
+end
+
+def fun_l23_n726(x)
+ if (x < 1)
+ fun_l24_n659(x)
+ else
+ fun_l24_n981(x)
+ end
+end
+
+def fun_l23_n727(x)
+ if (x < 1)
+ fun_l24_n258(x)
+ else
+ fun_l24_n915(x)
+ end
+end
+
+def fun_l23_n728(x)
+ if (x < 1)
+ fun_l24_n544(x)
+ else
+ fun_l24_n89(x)
+ end
+end
+
+def fun_l23_n729(x)
+ if (x < 1)
+ fun_l24_n497(x)
+ else
+ fun_l24_n320(x)
+ end
+end
+
+def fun_l23_n730(x)
+ if (x < 1)
+ fun_l24_n936(x)
+ else
+ fun_l24_n209(x)
+ end
+end
+
+def fun_l23_n731(x)
+ if (x < 1)
+ fun_l24_n763(x)
+ else
+ fun_l24_n836(x)
+ end
+end
+
+def fun_l23_n732(x)
+ if (x < 1)
+ fun_l24_n60(x)
+ else
+ fun_l24_n867(x)
+ end
+end
+
+def fun_l23_n733(x)
+ if (x < 1)
+ fun_l24_n146(x)
+ else
+ fun_l24_n294(x)
+ end
+end
+
+def fun_l23_n734(x)
+ if (x < 1)
+ fun_l24_n905(x)
+ else
+ fun_l24_n463(x)
+ end
+end
+
+def fun_l23_n735(x)
+ if (x < 1)
+ fun_l24_n566(x)
+ else
+ fun_l24_n240(x)
+ end
+end
+
+def fun_l23_n736(x)
+ if (x < 1)
+ fun_l24_n321(x)
+ else
+ fun_l24_n597(x)
+ end
+end
+
+def fun_l23_n737(x)
+ if (x < 1)
+ fun_l24_n169(x)
+ else
+ fun_l24_n201(x)
+ end
+end
+
+def fun_l23_n738(x)
+ if (x < 1)
+ fun_l24_n157(x)
+ else
+ fun_l24_n349(x)
+ end
+end
+
+def fun_l23_n739(x)
+ if (x < 1)
+ fun_l24_n503(x)
+ else
+ fun_l24_n342(x)
+ end
+end
+
+def fun_l23_n740(x)
+ if (x < 1)
+ fun_l24_n974(x)
+ else
+ fun_l24_n467(x)
+ end
+end
+
+def fun_l23_n741(x)
+ if (x < 1)
+ fun_l24_n566(x)
+ else
+ fun_l24_n162(x)
+ end
+end
+
+def fun_l23_n742(x)
+ if (x < 1)
+ fun_l24_n19(x)
+ else
+ fun_l24_n750(x)
+ end
+end
+
+def fun_l23_n743(x)
+ if (x < 1)
+ fun_l24_n409(x)
+ else
+ fun_l24_n362(x)
+ end
+end
+
+def fun_l23_n744(x)
+ if (x < 1)
+ fun_l24_n281(x)
+ else
+ fun_l24_n439(x)
+ end
+end
+
+def fun_l23_n745(x)
+ if (x < 1)
+ fun_l24_n808(x)
+ else
+ fun_l24_n794(x)
+ end
+end
+
+def fun_l23_n746(x)
+ if (x < 1)
+ fun_l24_n173(x)
+ else
+ fun_l24_n892(x)
+ end
+end
+
+def fun_l23_n747(x)
+ if (x < 1)
+ fun_l24_n762(x)
+ else
+ fun_l24_n339(x)
+ end
+end
+
+def fun_l23_n748(x)
+ if (x < 1)
+ fun_l24_n319(x)
+ else
+ fun_l24_n753(x)
+ end
+end
+
+def fun_l23_n749(x)
+ if (x < 1)
+ fun_l24_n546(x)
+ else
+ fun_l24_n727(x)
+ end
+end
+
+def fun_l23_n750(x)
+ if (x < 1)
+ fun_l24_n699(x)
+ else
+ fun_l24_n173(x)
+ end
+end
+
+def fun_l23_n751(x)
+ if (x < 1)
+ fun_l24_n280(x)
+ else
+ fun_l24_n468(x)
+ end
+end
+
+def fun_l23_n752(x)
+ if (x < 1)
+ fun_l24_n910(x)
+ else
+ fun_l24_n500(x)
+ end
+end
+
+def fun_l23_n753(x)
+ if (x < 1)
+ fun_l24_n463(x)
+ else
+ fun_l24_n81(x)
+ end
+end
+
+def fun_l23_n754(x)
+ if (x < 1)
+ fun_l24_n769(x)
+ else
+ fun_l24_n584(x)
+ end
+end
+
+def fun_l23_n755(x)
+ if (x < 1)
+ fun_l24_n702(x)
+ else
+ fun_l24_n337(x)
+ end
+end
+
+def fun_l23_n756(x)
+ if (x < 1)
+ fun_l24_n12(x)
+ else
+ fun_l24_n335(x)
+ end
+end
+
+def fun_l23_n757(x)
+ if (x < 1)
+ fun_l24_n100(x)
+ else
+ fun_l24_n743(x)
+ end
+end
+
+def fun_l23_n758(x)
+ if (x < 1)
+ fun_l24_n865(x)
+ else
+ fun_l24_n594(x)
+ end
+end
+
+def fun_l23_n759(x)
+ if (x < 1)
+ fun_l24_n948(x)
+ else
+ fun_l24_n32(x)
+ end
+end
+
+def fun_l23_n760(x)
+ if (x < 1)
+ fun_l24_n487(x)
+ else
+ fun_l24_n72(x)
+ end
+end
+
+def fun_l23_n761(x)
+ if (x < 1)
+ fun_l24_n566(x)
+ else
+ fun_l24_n290(x)
+ end
+end
+
+def fun_l23_n762(x)
+ if (x < 1)
+ fun_l24_n896(x)
+ else
+ fun_l24_n840(x)
+ end
+end
+
+def fun_l23_n763(x)
+ if (x < 1)
+ fun_l24_n175(x)
+ else
+ fun_l24_n50(x)
+ end
+end
+
+def fun_l23_n764(x)
+ if (x < 1)
+ fun_l24_n107(x)
+ else
+ fun_l24_n446(x)
+ end
+end
+
+def fun_l23_n765(x)
+ if (x < 1)
+ fun_l24_n238(x)
+ else
+ fun_l24_n944(x)
+ end
+end
+
+def fun_l23_n766(x)
+ if (x < 1)
+ fun_l24_n999(x)
+ else
+ fun_l24_n419(x)
+ end
+end
+
+def fun_l23_n767(x)
+ if (x < 1)
+ fun_l24_n476(x)
+ else
+ fun_l24_n976(x)
+ end
+end
+
+def fun_l23_n768(x)
+ if (x < 1)
+ fun_l24_n328(x)
+ else
+ fun_l24_n782(x)
+ end
+end
+
+def fun_l23_n769(x)
+ if (x < 1)
+ fun_l24_n875(x)
+ else
+ fun_l24_n847(x)
+ end
+end
+
+def fun_l23_n770(x)
+ if (x < 1)
+ fun_l24_n391(x)
+ else
+ fun_l24_n123(x)
+ end
+end
+
+def fun_l23_n771(x)
+ if (x < 1)
+ fun_l24_n968(x)
+ else
+ fun_l24_n915(x)
+ end
+end
+
+def fun_l23_n772(x)
+ if (x < 1)
+ fun_l24_n883(x)
+ else
+ fun_l24_n604(x)
+ end
+end
+
+def fun_l23_n773(x)
+ if (x < 1)
+ fun_l24_n307(x)
+ else
+ fun_l24_n70(x)
+ end
+end
+
+def fun_l23_n774(x)
+ if (x < 1)
+ fun_l24_n615(x)
+ else
+ fun_l24_n115(x)
+ end
+end
+
+def fun_l23_n775(x)
+ if (x < 1)
+ fun_l24_n250(x)
+ else
+ fun_l24_n178(x)
+ end
+end
+
+def fun_l23_n776(x)
+ if (x < 1)
+ fun_l24_n982(x)
+ else
+ fun_l24_n570(x)
+ end
+end
+
+def fun_l23_n777(x)
+ if (x < 1)
+ fun_l24_n317(x)
+ else
+ fun_l24_n170(x)
+ end
+end
+
+def fun_l23_n778(x)
+ if (x < 1)
+ fun_l24_n895(x)
+ else
+ fun_l24_n147(x)
+ end
+end
+
+def fun_l23_n779(x)
+ if (x < 1)
+ fun_l24_n393(x)
+ else
+ fun_l24_n513(x)
+ end
+end
+
+def fun_l23_n780(x)
+ if (x < 1)
+ fun_l24_n635(x)
+ else
+ fun_l24_n161(x)
+ end
+end
+
+def fun_l23_n781(x)
+ if (x < 1)
+ fun_l24_n189(x)
+ else
+ fun_l24_n225(x)
+ end
+end
+
+def fun_l23_n782(x)
+ if (x < 1)
+ fun_l24_n205(x)
+ else
+ fun_l24_n620(x)
+ end
+end
+
+def fun_l23_n783(x)
+ if (x < 1)
+ fun_l24_n203(x)
+ else
+ fun_l24_n58(x)
+ end
+end
+
+def fun_l23_n784(x)
+ if (x < 1)
+ fun_l24_n198(x)
+ else
+ fun_l24_n948(x)
+ end
+end
+
+def fun_l23_n785(x)
+ if (x < 1)
+ fun_l24_n60(x)
+ else
+ fun_l24_n406(x)
+ end
+end
+
+def fun_l23_n786(x)
+ if (x < 1)
+ fun_l24_n538(x)
+ else
+ fun_l24_n992(x)
+ end
+end
+
+def fun_l23_n787(x)
+ if (x < 1)
+ fun_l24_n83(x)
+ else
+ fun_l24_n544(x)
+ end
+end
+
+def fun_l23_n788(x)
+ if (x < 1)
+ fun_l24_n964(x)
+ else
+ fun_l24_n939(x)
+ end
+end
+
+def fun_l23_n789(x)
+ if (x < 1)
+ fun_l24_n120(x)
+ else
+ fun_l24_n843(x)
+ end
+end
+
+def fun_l23_n790(x)
+ if (x < 1)
+ fun_l24_n772(x)
+ else
+ fun_l24_n111(x)
+ end
+end
+
+def fun_l23_n791(x)
+ if (x < 1)
+ fun_l24_n983(x)
+ else
+ fun_l24_n934(x)
+ end
+end
+
+def fun_l23_n792(x)
+ if (x < 1)
+ fun_l24_n475(x)
+ else
+ fun_l24_n532(x)
+ end
+end
+
+def fun_l23_n793(x)
+ if (x < 1)
+ fun_l24_n316(x)
+ else
+ fun_l24_n400(x)
+ end
+end
+
+def fun_l23_n794(x)
+ if (x < 1)
+ fun_l24_n103(x)
+ else
+ fun_l24_n19(x)
+ end
+end
+
+def fun_l23_n795(x)
+ if (x < 1)
+ fun_l24_n371(x)
+ else
+ fun_l24_n176(x)
+ end
+end
+
+def fun_l23_n796(x)
+ if (x < 1)
+ fun_l24_n469(x)
+ else
+ fun_l24_n958(x)
+ end
+end
+
+def fun_l23_n797(x)
+ if (x < 1)
+ fun_l24_n706(x)
+ else
+ fun_l24_n953(x)
+ end
+end
+
+def fun_l23_n798(x)
+ if (x < 1)
+ fun_l24_n384(x)
+ else
+ fun_l24_n439(x)
+ end
+end
+
+def fun_l23_n799(x)
+ if (x < 1)
+ fun_l24_n352(x)
+ else
+ fun_l24_n36(x)
+ end
+end
+
+def fun_l23_n800(x)
+ if (x < 1)
+ fun_l24_n390(x)
+ else
+ fun_l24_n963(x)
+ end
+end
+
+def fun_l23_n801(x)
+ if (x < 1)
+ fun_l24_n470(x)
+ else
+ fun_l24_n818(x)
+ end
+end
+
+def fun_l23_n802(x)
+ if (x < 1)
+ fun_l24_n262(x)
+ else
+ fun_l24_n893(x)
+ end
+end
+
+def fun_l23_n803(x)
+ if (x < 1)
+ fun_l24_n118(x)
+ else
+ fun_l24_n684(x)
+ end
+end
+
+def fun_l23_n804(x)
+ if (x < 1)
+ fun_l24_n484(x)
+ else
+ fun_l24_n520(x)
+ end
+end
+
+def fun_l23_n805(x)
+ if (x < 1)
+ fun_l24_n370(x)
+ else
+ fun_l24_n80(x)
+ end
+end
+
+def fun_l23_n806(x)
+ if (x < 1)
+ fun_l24_n326(x)
+ else
+ fun_l24_n436(x)
+ end
+end
+
+def fun_l23_n807(x)
+ if (x < 1)
+ fun_l24_n490(x)
+ else
+ fun_l24_n811(x)
+ end
+end
+
+def fun_l23_n808(x)
+ if (x < 1)
+ fun_l24_n447(x)
+ else
+ fun_l24_n150(x)
+ end
+end
+
+def fun_l23_n809(x)
+ if (x < 1)
+ fun_l24_n339(x)
+ else
+ fun_l24_n367(x)
+ end
+end
+
+def fun_l23_n810(x)
+ if (x < 1)
+ fun_l24_n221(x)
+ else
+ fun_l24_n505(x)
+ end
+end
+
+def fun_l23_n811(x)
+ if (x < 1)
+ fun_l24_n637(x)
+ else
+ fun_l24_n101(x)
+ end
+end
+
+def fun_l23_n812(x)
+ if (x < 1)
+ fun_l24_n83(x)
+ else
+ fun_l24_n538(x)
+ end
+end
+
+def fun_l23_n813(x)
+ if (x < 1)
+ fun_l24_n927(x)
+ else
+ fun_l24_n513(x)
+ end
+end
+
+def fun_l23_n814(x)
+ if (x < 1)
+ fun_l24_n496(x)
+ else
+ fun_l24_n290(x)
+ end
+end
+
+def fun_l23_n815(x)
+ if (x < 1)
+ fun_l24_n640(x)
+ else
+ fun_l24_n796(x)
+ end
+end
+
+def fun_l23_n816(x)
+ if (x < 1)
+ fun_l24_n999(x)
+ else
+ fun_l24_n54(x)
+ end
+end
+
+def fun_l23_n817(x)
+ if (x < 1)
+ fun_l24_n162(x)
+ else
+ fun_l24_n617(x)
+ end
+end
+
+def fun_l23_n818(x)
+ if (x < 1)
+ fun_l24_n118(x)
+ else
+ fun_l24_n187(x)
+ end
+end
+
+def fun_l23_n819(x)
+ if (x < 1)
+ fun_l24_n334(x)
+ else
+ fun_l24_n901(x)
+ end
+end
+
+def fun_l23_n820(x)
+ if (x < 1)
+ fun_l24_n939(x)
+ else
+ fun_l24_n896(x)
+ end
+end
+
+def fun_l23_n821(x)
+ if (x < 1)
+ fun_l24_n970(x)
+ else
+ fun_l24_n725(x)
+ end
+end
+
+def fun_l23_n822(x)
+ if (x < 1)
+ fun_l24_n357(x)
+ else
+ fun_l24_n771(x)
+ end
+end
+
+def fun_l23_n823(x)
+ if (x < 1)
+ fun_l24_n8(x)
+ else
+ fun_l24_n214(x)
+ end
+end
+
+def fun_l23_n824(x)
+ if (x < 1)
+ fun_l24_n412(x)
+ else
+ fun_l24_n145(x)
+ end
+end
+
+def fun_l23_n825(x)
+ if (x < 1)
+ fun_l24_n218(x)
+ else
+ fun_l24_n700(x)
+ end
+end
+
+def fun_l23_n826(x)
+ if (x < 1)
+ fun_l24_n945(x)
+ else
+ fun_l24_n523(x)
+ end
+end
+
+def fun_l23_n827(x)
+ if (x < 1)
+ fun_l24_n251(x)
+ else
+ fun_l24_n854(x)
+ end
+end
+
+def fun_l23_n828(x)
+ if (x < 1)
+ fun_l24_n704(x)
+ else
+ fun_l24_n879(x)
+ end
+end
+
+def fun_l23_n829(x)
+ if (x < 1)
+ fun_l24_n161(x)
+ else
+ fun_l24_n529(x)
+ end
+end
+
+def fun_l23_n830(x)
+ if (x < 1)
+ fun_l24_n751(x)
+ else
+ fun_l24_n409(x)
+ end
+end
+
+def fun_l23_n831(x)
+ if (x < 1)
+ fun_l24_n883(x)
+ else
+ fun_l24_n1(x)
+ end
+end
+
+def fun_l23_n832(x)
+ if (x < 1)
+ fun_l24_n135(x)
+ else
+ fun_l24_n738(x)
+ end
+end
+
+def fun_l23_n833(x)
+ if (x < 1)
+ fun_l24_n507(x)
+ else
+ fun_l24_n727(x)
+ end
+end
+
+def fun_l23_n834(x)
+ if (x < 1)
+ fun_l24_n677(x)
+ else
+ fun_l24_n602(x)
+ end
+end
+
+def fun_l23_n835(x)
+ if (x < 1)
+ fun_l24_n197(x)
+ else
+ fun_l24_n481(x)
+ end
+end
+
+def fun_l23_n836(x)
+ if (x < 1)
+ fun_l24_n39(x)
+ else
+ fun_l24_n149(x)
+ end
+end
+
+def fun_l23_n837(x)
+ if (x < 1)
+ fun_l24_n950(x)
+ else
+ fun_l24_n455(x)
+ end
+end
+
+def fun_l23_n838(x)
+ if (x < 1)
+ fun_l24_n718(x)
+ else
+ fun_l24_n264(x)
+ end
+end
+
+def fun_l23_n839(x)
+ if (x < 1)
+ fun_l24_n831(x)
+ else
+ fun_l24_n576(x)
+ end
+end
+
+def fun_l23_n840(x)
+ if (x < 1)
+ fun_l24_n813(x)
+ else
+ fun_l24_n564(x)
+ end
+end
+
+def fun_l23_n841(x)
+ if (x < 1)
+ fun_l24_n537(x)
+ else
+ fun_l24_n880(x)
+ end
+end
+
+def fun_l23_n842(x)
+ if (x < 1)
+ fun_l24_n958(x)
+ else
+ fun_l24_n963(x)
+ end
+end
+
+def fun_l23_n843(x)
+ if (x < 1)
+ fun_l24_n879(x)
+ else
+ fun_l24_n281(x)
+ end
+end
+
+def fun_l23_n844(x)
+ if (x < 1)
+ fun_l24_n138(x)
+ else
+ fun_l24_n562(x)
+ end
+end
+
+def fun_l23_n845(x)
+ if (x < 1)
+ fun_l24_n804(x)
+ else
+ fun_l24_n283(x)
+ end
+end
+
+def fun_l23_n846(x)
+ if (x < 1)
+ fun_l24_n253(x)
+ else
+ fun_l24_n339(x)
+ end
+end
+
+def fun_l23_n847(x)
+ if (x < 1)
+ fun_l24_n99(x)
+ else
+ fun_l24_n623(x)
+ end
+end
+
+def fun_l23_n848(x)
+ if (x < 1)
+ fun_l24_n955(x)
+ else
+ fun_l24_n121(x)
+ end
+end
+
+def fun_l23_n849(x)
+ if (x < 1)
+ fun_l24_n437(x)
+ else
+ fun_l24_n387(x)
+ end
+end
+
+def fun_l23_n850(x)
+ if (x < 1)
+ fun_l24_n19(x)
+ else
+ fun_l24_n790(x)
+ end
+end
+
+def fun_l23_n851(x)
+ if (x < 1)
+ fun_l24_n11(x)
+ else
+ fun_l24_n931(x)
+ end
+end
+
+def fun_l23_n852(x)
+ if (x < 1)
+ fun_l24_n506(x)
+ else
+ fun_l24_n162(x)
+ end
+end
+
+def fun_l23_n853(x)
+ if (x < 1)
+ fun_l24_n262(x)
+ else
+ fun_l24_n1(x)
+ end
+end
+
+def fun_l23_n854(x)
+ if (x < 1)
+ fun_l24_n275(x)
+ else
+ fun_l24_n549(x)
+ end
+end
+
+def fun_l23_n855(x)
+ if (x < 1)
+ fun_l24_n865(x)
+ else
+ fun_l24_n472(x)
+ end
+end
+
+def fun_l23_n856(x)
+ if (x < 1)
+ fun_l24_n270(x)
+ else
+ fun_l24_n312(x)
+ end
+end
+
+def fun_l23_n857(x)
+ if (x < 1)
+ fun_l24_n261(x)
+ else
+ fun_l24_n240(x)
+ end
+end
+
+def fun_l23_n858(x)
+ if (x < 1)
+ fun_l24_n166(x)
+ else
+ fun_l24_n996(x)
+ end
+end
+
+def fun_l23_n859(x)
+ if (x < 1)
+ fun_l24_n653(x)
+ else
+ fun_l24_n464(x)
+ end
+end
+
+def fun_l23_n860(x)
+ if (x < 1)
+ fun_l24_n446(x)
+ else
+ fun_l24_n706(x)
+ end
+end
+
+def fun_l23_n861(x)
+ if (x < 1)
+ fun_l24_n744(x)
+ else
+ fun_l24_n53(x)
+ end
+end
+
+def fun_l23_n862(x)
+ if (x < 1)
+ fun_l24_n983(x)
+ else
+ fun_l24_n188(x)
+ end
+end
+
+def fun_l23_n863(x)
+ if (x < 1)
+ fun_l24_n399(x)
+ else
+ fun_l24_n582(x)
+ end
+end
+
+def fun_l23_n864(x)
+ if (x < 1)
+ fun_l24_n392(x)
+ else
+ fun_l24_n937(x)
+ end
+end
+
+def fun_l23_n865(x)
+ if (x < 1)
+ fun_l24_n495(x)
+ else
+ fun_l24_n557(x)
+ end
+end
+
+def fun_l23_n866(x)
+ if (x < 1)
+ fun_l24_n94(x)
+ else
+ fun_l24_n295(x)
+ end
+end
+
+def fun_l23_n867(x)
+ if (x < 1)
+ fun_l24_n628(x)
+ else
+ fun_l24_n432(x)
+ end
+end
+
+def fun_l23_n868(x)
+ if (x < 1)
+ fun_l24_n386(x)
+ else
+ fun_l24_n385(x)
+ end
+end
+
+def fun_l23_n869(x)
+ if (x < 1)
+ fun_l24_n376(x)
+ else
+ fun_l24_n469(x)
+ end
+end
+
+def fun_l23_n870(x)
+ if (x < 1)
+ fun_l24_n74(x)
+ else
+ fun_l24_n712(x)
+ end
+end
+
+def fun_l23_n871(x)
+ if (x < 1)
+ fun_l24_n72(x)
+ else
+ fun_l24_n642(x)
+ end
+end
+
+def fun_l23_n872(x)
+ if (x < 1)
+ fun_l24_n937(x)
+ else
+ fun_l24_n751(x)
+ end
+end
+
+def fun_l23_n873(x)
+ if (x < 1)
+ fun_l24_n385(x)
+ else
+ fun_l24_n404(x)
+ end
+end
+
+def fun_l23_n874(x)
+ if (x < 1)
+ fun_l24_n336(x)
+ else
+ fun_l24_n226(x)
+ end
+end
+
+def fun_l23_n875(x)
+ if (x < 1)
+ fun_l24_n289(x)
+ else
+ fun_l24_n989(x)
+ end
+end
+
+def fun_l23_n876(x)
+ if (x < 1)
+ fun_l24_n45(x)
+ else
+ fun_l24_n279(x)
+ end
+end
+
+def fun_l23_n877(x)
+ if (x < 1)
+ fun_l24_n683(x)
+ else
+ fun_l24_n342(x)
+ end
+end
+
+def fun_l23_n878(x)
+ if (x < 1)
+ fun_l24_n279(x)
+ else
+ fun_l24_n600(x)
+ end
+end
+
+def fun_l23_n879(x)
+ if (x < 1)
+ fun_l24_n82(x)
+ else
+ fun_l24_n177(x)
+ end
+end
+
+def fun_l23_n880(x)
+ if (x < 1)
+ fun_l24_n167(x)
+ else
+ fun_l24_n912(x)
+ end
+end
+
+def fun_l23_n881(x)
+ if (x < 1)
+ fun_l24_n311(x)
+ else
+ fun_l24_n634(x)
+ end
+end
+
+def fun_l23_n882(x)
+ if (x < 1)
+ fun_l24_n127(x)
+ else
+ fun_l24_n661(x)
+ end
+end
+
+def fun_l23_n883(x)
+ if (x < 1)
+ fun_l24_n199(x)
+ else
+ fun_l24_n999(x)
+ end
+end
+
+def fun_l23_n884(x)
+ if (x < 1)
+ fun_l24_n525(x)
+ else
+ fun_l24_n948(x)
+ end
+end
+
+def fun_l23_n885(x)
+ if (x < 1)
+ fun_l24_n590(x)
+ else
+ fun_l24_n822(x)
+ end
+end
+
+def fun_l23_n886(x)
+ if (x < 1)
+ fun_l24_n811(x)
+ else
+ fun_l24_n975(x)
+ end
+end
+
+def fun_l23_n887(x)
+ if (x < 1)
+ fun_l24_n446(x)
+ else
+ fun_l24_n710(x)
+ end
+end
+
+def fun_l23_n888(x)
+ if (x < 1)
+ fun_l24_n31(x)
+ else
+ fun_l24_n92(x)
+ end
+end
+
+def fun_l23_n889(x)
+ if (x < 1)
+ fun_l24_n535(x)
+ else
+ fun_l24_n819(x)
+ end
+end
+
+def fun_l23_n890(x)
+ if (x < 1)
+ fun_l24_n526(x)
+ else
+ fun_l24_n207(x)
+ end
+end
+
+def fun_l23_n891(x)
+ if (x < 1)
+ fun_l24_n752(x)
+ else
+ fun_l24_n994(x)
+ end
+end
+
+def fun_l23_n892(x)
+ if (x < 1)
+ fun_l24_n758(x)
+ else
+ fun_l24_n292(x)
+ end
+end
+
+def fun_l23_n893(x)
+ if (x < 1)
+ fun_l24_n106(x)
+ else
+ fun_l24_n742(x)
+ end
+end
+
+def fun_l23_n894(x)
+ if (x < 1)
+ fun_l24_n385(x)
+ else
+ fun_l24_n562(x)
+ end
+end
+
+def fun_l23_n895(x)
+ if (x < 1)
+ fun_l24_n565(x)
+ else
+ fun_l24_n242(x)
+ end
+end
+
+def fun_l23_n896(x)
+ if (x < 1)
+ fun_l24_n570(x)
+ else
+ fun_l24_n241(x)
+ end
+end
+
+def fun_l23_n897(x)
+ if (x < 1)
+ fun_l24_n840(x)
+ else
+ fun_l24_n681(x)
+ end
+end
+
+def fun_l23_n898(x)
+ if (x < 1)
+ fun_l24_n524(x)
+ else
+ fun_l24_n9(x)
+ end
+end
+
+def fun_l23_n899(x)
+ if (x < 1)
+ fun_l24_n161(x)
+ else
+ fun_l24_n795(x)
+ end
+end
+
+def fun_l23_n900(x)
+ if (x < 1)
+ fun_l24_n64(x)
+ else
+ fun_l24_n447(x)
+ end
+end
+
+def fun_l23_n901(x)
+ if (x < 1)
+ fun_l24_n676(x)
+ else
+ fun_l24_n286(x)
+ end
+end
+
+def fun_l23_n902(x)
+ if (x < 1)
+ fun_l24_n623(x)
+ else
+ fun_l24_n298(x)
+ end
+end
+
+def fun_l23_n903(x)
+ if (x < 1)
+ fun_l24_n795(x)
+ else
+ fun_l24_n646(x)
+ end
+end
+
+def fun_l23_n904(x)
+ if (x < 1)
+ fun_l24_n746(x)
+ else
+ fun_l24_n7(x)
+ end
+end
+
+def fun_l23_n905(x)
+ if (x < 1)
+ fun_l24_n311(x)
+ else
+ fun_l24_n417(x)
+ end
+end
+
+def fun_l23_n906(x)
+ if (x < 1)
+ fun_l24_n338(x)
+ else
+ fun_l24_n592(x)
+ end
+end
+
+def fun_l23_n907(x)
+ if (x < 1)
+ fun_l24_n667(x)
+ else
+ fun_l24_n370(x)
+ end
+end
+
+def fun_l23_n908(x)
+ if (x < 1)
+ fun_l24_n444(x)
+ else
+ fun_l24_n703(x)
+ end
+end
+
+def fun_l23_n909(x)
+ if (x < 1)
+ fun_l24_n325(x)
+ else
+ fun_l24_n977(x)
+ end
+end
+
+def fun_l23_n910(x)
+ if (x < 1)
+ fun_l24_n994(x)
+ else
+ fun_l24_n765(x)
+ end
+end
+
+def fun_l23_n911(x)
+ if (x < 1)
+ fun_l24_n327(x)
+ else
+ fun_l24_n657(x)
+ end
+end
+
+def fun_l23_n912(x)
+ if (x < 1)
+ fun_l24_n932(x)
+ else
+ fun_l24_n769(x)
+ end
+end
+
+def fun_l23_n913(x)
+ if (x < 1)
+ fun_l24_n263(x)
+ else
+ fun_l24_n729(x)
+ end
+end
+
+def fun_l23_n914(x)
+ if (x < 1)
+ fun_l24_n248(x)
+ else
+ fun_l24_n412(x)
+ end
+end
+
+def fun_l23_n915(x)
+ if (x < 1)
+ fun_l24_n793(x)
+ else
+ fun_l24_n329(x)
+ end
+end
+
+def fun_l23_n916(x)
+ if (x < 1)
+ fun_l24_n7(x)
+ else
+ fun_l24_n460(x)
+ end
+end
+
+def fun_l23_n917(x)
+ if (x < 1)
+ fun_l24_n612(x)
+ else
+ fun_l24_n79(x)
+ end
+end
+
+def fun_l23_n918(x)
+ if (x < 1)
+ fun_l24_n450(x)
+ else
+ fun_l24_n950(x)
+ end
+end
+
+def fun_l23_n919(x)
+ if (x < 1)
+ fun_l24_n72(x)
+ else
+ fun_l24_n550(x)
+ end
+end
+
+def fun_l23_n920(x)
+ if (x < 1)
+ fun_l24_n73(x)
+ else
+ fun_l24_n339(x)
+ end
+end
+
+def fun_l23_n921(x)
+ if (x < 1)
+ fun_l24_n6(x)
+ else
+ fun_l24_n865(x)
+ end
+end
+
+def fun_l23_n922(x)
+ if (x < 1)
+ fun_l24_n507(x)
+ else
+ fun_l24_n475(x)
+ end
+end
+
+def fun_l23_n923(x)
+ if (x < 1)
+ fun_l24_n579(x)
+ else
+ fun_l24_n832(x)
+ end
+end
+
+def fun_l23_n924(x)
+ if (x < 1)
+ fun_l24_n681(x)
+ else
+ fun_l24_n253(x)
+ end
+end
+
+def fun_l23_n925(x)
+ if (x < 1)
+ fun_l24_n611(x)
+ else
+ fun_l24_n831(x)
+ end
+end
+
+def fun_l23_n926(x)
+ if (x < 1)
+ fun_l24_n371(x)
+ else
+ fun_l24_n236(x)
+ end
+end
+
+def fun_l23_n927(x)
+ if (x < 1)
+ fun_l24_n941(x)
+ else
+ fun_l24_n905(x)
+ end
+end
+
+def fun_l23_n928(x)
+ if (x < 1)
+ fun_l24_n616(x)
+ else
+ fun_l24_n421(x)
+ end
+end
+
+def fun_l23_n929(x)
+ if (x < 1)
+ fun_l24_n469(x)
+ else
+ fun_l24_n405(x)
+ end
+end
+
+def fun_l23_n930(x)
+ if (x < 1)
+ fun_l24_n584(x)
+ else
+ fun_l24_n694(x)
+ end
+end
+
+def fun_l23_n931(x)
+ if (x < 1)
+ fun_l24_n530(x)
+ else
+ fun_l24_n112(x)
+ end
+end
+
+def fun_l23_n932(x)
+ if (x < 1)
+ fun_l24_n115(x)
+ else
+ fun_l24_n667(x)
+ end
+end
+
+def fun_l23_n933(x)
+ if (x < 1)
+ fun_l24_n23(x)
+ else
+ fun_l24_n68(x)
+ end
+end
+
+def fun_l23_n934(x)
+ if (x < 1)
+ fun_l24_n215(x)
+ else
+ fun_l24_n459(x)
+ end
+end
+
+def fun_l23_n935(x)
+ if (x < 1)
+ fun_l24_n533(x)
+ else
+ fun_l24_n882(x)
+ end
+end
+
+def fun_l23_n936(x)
+ if (x < 1)
+ fun_l24_n918(x)
+ else
+ fun_l24_n522(x)
+ end
+end
+
+def fun_l23_n937(x)
+ if (x < 1)
+ fun_l24_n472(x)
+ else
+ fun_l24_n322(x)
+ end
+end
+
+def fun_l23_n938(x)
+ if (x < 1)
+ fun_l24_n528(x)
+ else
+ fun_l24_n937(x)
+ end
+end
+
+def fun_l23_n939(x)
+ if (x < 1)
+ fun_l24_n426(x)
+ else
+ fun_l24_n904(x)
+ end
+end
+
+def fun_l23_n940(x)
+ if (x < 1)
+ fun_l24_n259(x)
+ else
+ fun_l24_n350(x)
+ end
+end
+
+def fun_l23_n941(x)
+ if (x < 1)
+ fun_l24_n770(x)
+ else
+ fun_l24_n449(x)
+ end
+end
+
+def fun_l23_n942(x)
+ if (x < 1)
+ fun_l24_n159(x)
+ else
+ fun_l24_n312(x)
+ end
+end
+
+def fun_l23_n943(x)
+ if (x < 1)
+ fun_l24_n168(x)
+ else
+ fun_l24_n820(x)
+ end
+end
+
+def fun_l23_n944(x)
+ if (x < 1)
+ fun_l24_n861(x)
+ else
+ fun_l24_n395(x)
+ end
+end
+
+def fun_l23_n945(x)
+ if (x < 1)
+ fun_l24_n802(x)
+ else
+ fun_l24_n651(x)
+ end
+end
+
+def fun_l23_n946(x)
+ if (x < 1)
+ fun_l24_n519(x)
+ else
+ fun_l24_n736(x)
+ end
+end
+
+def fun_l23_n947(x)
+ if (x < 1)
+ fun_l24_n277(x)
+ else
+ fun_l24_n705(x)
+ end
+end
+
+def fun_l23_n948(x)
+ if (x < 1)
+ fun_l24_n658(x)
+ else
+ fun_l24_n983(x)
+ end
+end
+
+def fun_l23_n949(x)
+ if (x < 1)
+ fun_l24_n390(x)
+ else
+ fun_l24_n365(x)
+ end
+end
+
+def fun_l23_n950(x)
+ if (x < 1)
+ fun_l24_n362(x)
+ else
+ fun_l24_n895(x)
+ end
+end
+
+def fun_l23_n951(x)
+ if (x < 1)
+ fun_l24_n431(x)
+ else
+ fun_l24_n240(x)
+ end
+end
+
+def fun_l23_n952(x)
+ if (x < 1)
+ fun_l24_n87(x)
+ else
+ fun_l24_n923(x)
+ end
+end
+
+def fun_l23_n953(x)
+ if (x < 1)
+ fun_l24_n605(x)
+ else
+ fun_l24_n369(x)
+ end
+end
+
+def fun_l23_n954(x)
+ if (x < 1)
+ fun_l24_n659(x)
+ else
+ fun_l24_n485(x)
+ end
+end
+
+def fun_l23_n955(x)
+ if (x < 1)
+ fun_l24_n204(x)
+ else
+ fun_l24_n719(x)
+ end
+end
+
+def fun_l23_n956(x)
+ if (x < 1)
+ fun_l24_n752(x)
+ else
+ fun_l24_n522(x)
+ end
+end
+
+def fun_l23_n957(x)
+ if (x < 1)
+ fun_l24_n827(x)
+ else
+ fun_l24_n740(x)
+ end
+end
+
+def fun_l23_n958(x)
+ if (x < 1)
+ fun_l24_n476(x)
+ else
+ fun_l24_n766(x)
+ end
+end
+
+def fun_l23_n959(x)
+ if (x < 1)
+ fun_l24_n167(x)
+ else
+ fun_l24_n552(x)
+ end
+end
+
+def fun_l23_n960(x)
+ if (x < 1)
+ fun_l24_n352(x)
+ else
+ fun_l24_n147(x)
+ end
+end
+
+def fun_l23_n961(x)
+ if (x < 1)
+ fun_l24_n641(x)
+ else
+ fun_l24_n263(x)
+ end
+end
+
+def fun_l23_n962(x)
+ if (x < 1)
+ fun_l24_n2(x)
+ else
+ fun_l24_n819(x)
+ end
+end
+
+def fun_l23_n963(x)
+ if (x < 1)
+ fun_l24_n649(x)
+ else
+ fun_l24_n589(x)
+ end
+end
+
+def fun_l23_n964(x)
+ if (x < 1)
+ fun_l24_n351(x)
+ else
+ fun_l24_n170(x)
+ end
+end
+
+def fun_l23_n965(x)
+ if (x < 1)
+ fun_l24_n913(x)
+ else
+ fun_l24_n141(x)
+ end
+end
+
+def fun_l23_n966(x)
+ if (x < 1)
+ fun_l24_n230(x)
+ else
+ fun_l24_n438(x)
+ end
+end
+
+def fun_l23_n967(x)
+ if (x < 1)
+ fun_l24_n649(x)
+ else
+ fun_l24_n867(x)
+ end
+end
+
+def fun_l23_n968(x)
+ if (x < 1)
+ fun_l24_n877(x)
+ else
+ fun_l24_n341(x)
+ end
+end
+
+def fun_l23_n969(x)
+ if (x < 1)
+ fun_l24_n802(x)
+ else
+ fun_l24_n409(x)
+ end
+end
+
+def fun_l23_n970(x)
+ if (x < 1)
+ fun_l24_n388(x)
+ else
+ fun_l24_n521(x)
+ end
+end
+
+def fun_l23_n971(x)
+ if (x < 1)
+ fun_l24_n533(x)
+ else
+ fun_l24_n856(x)
+ end
+end
+
+def fun_l23_n972(x)
+ if (x < 1)
+ fun_l24_n409(x)
+ else
+ fun_l24_n119(x)
+ end
+end
+
+def fun_l23_n973(x)
+ if (x < 1)
+ fun_l24_n774(x)
+ else
+ fun_l24_n561(x)
+ end
+end
+
+def fun_l23_n974(x)
+ if (x < 1)
+ fun_l24_n96(x)
+ else
+ fun_l24_n629(x)
+ end
+end
+
+def fun_l23_n975(x)
+ if (x < 1)
+ fun_l24_n985(x)
+ else
+ fun_l24_n651(x)
+ end
+end
+
+def fun_l23_n976(x)
+ if (x < 1)
+ fun_l24_n977(x)
+ else
+ fun_l24_n274(x)
+ end
+end
+
+def fun_l23_n977(x)
+ if (x < 1)
+ fun_l24_n85(x)
+ else
+ fun_l24_n337(x)
+ end
+end
+
+def fun_l23_n978(x)
+ if (x < 1)
+ fun_l24_n312(x)
+ else
+ fun_l24_n990(x)
+ end
+end
+
+def fun_l23_n979(x)
+ if (x < 1)
+ fun_l24_n438(x)
+ else
+ fun_l24_n42(x)
+ end
+end
+
+def fun_l23_n980(x)
+ if (x < 1)
+ fun_l24_n341(x)
+ else
+ fun_l24_n27(x)
+ end
+end
+
+def fun_l23_n981(x)
+ if (x < 1)
+ fun_l24_n300(x)
+ else
+ fun_l24_n669(x)
+ end
+end
+
+def fun_l23_n982(x)
+ if (x < 1)
+ fun_l24_n586(x)
+ else
+ fun_l24_n822(x)
+ end
+end
+
+def fun_l23_n983(x)
+ if (x < 1)
+ fun_l24_n388(x)
+ else
+ fun_l24_n966(x)
+ end
+end
+
+def fun_l23_n984(x)
+ if (x < 1)
+ fun_l24_n661(x)
+ else
+ fun_l24_n66(x)
+ end
+end
+
+def fun_l23_n985(x)
+ if (x < 1)
+ fun_l24_n384(x)
+ else
+ fun_l24_n419(x)
+ end
+end
+
+def fun_l23_n986(x)
+ if (x < 1)
+ fun_l24_n698(x)
+ else
+ fun_l24_n961(x)
+ end
+end
+
+def fun_l23_n987(x)
+ if (x < 1)
+ fun_l24_n820(x)
+ else
+ fun_l24_n112(x)
+ end
+end
+
+def fun_l23_n988(x)
+ if (x < 1)
+ fun_l24_n976(x)
+ else
+ fun_l24_n232(x)
+ end
+end
+
+def fun_l23_n989(x)
+ if (x < 1)
+ fun_l24_n292(x)
+ else
+ fun_l24_n77(x)
+ end
+end
+
+def fun_l23_n990(x)
+ if (x < 1)
+ fun_l24_n572(x)
+ else
+ fun_l24_n524(x)
+ end
+end
+
+def fun_l23_n991(x)
+ if (x < 1)
+ fun_l24_n226(x)
+ else
+ fun_l24_n821(x)
+ end
+end
+
+def fun_l23_n992(x)
+ if (x < 1)
+ fun_l24_n12(x)
+ else
+ fun_l24_n891(x)
+ end
+end
+
+def fun_l23_n993(x)
+ if (x < 1)
+ fun_l24_n101(x)
+ else
+ fun_l24_n592(x)
+ end
+end
+
+def fun_l23_n994(x)
+ if (x < 1)
+ fun_l24_n796(x)
+ else
+ fun_l24_n594(x)
+ end
+end
+
+def fun_l23_n995(x)
+ if (x < 1)
+ fun_l24_n707(x)
+ else
+ fun_l24_n577(x)
+ end
+end
+
+def fun_l23_n996(x)
+ if (x < 1)
+ fun_l24_n123(x)
+ else
+ fun_l24_n730(x)
+ end
+end
+
+def fun_l23_n997(x)
+ if (x < 1)
+ fun_l24_n520(x)
+ else
+ fun_l24_n888(x)
+ end
+end
+
+def fun_l23_n998(x)
+ if (x < 1)
+ fun_l24_n165(x)
+ else
+ fun_l24_n576(x)
+ end
+end
+
+def fun_l23_n999(x)
+ if (x < 1)
+ fun_l24_n496(x)
+ else
+ fun_l24_n722(x)
+ end
+end
+
+def fun_l24_n0(x)
+ if (x < 1)
+ fun_l25_n357(x)
+ else
+ fun_l25_n144(x)
+ end
+end
+
+def fun_l24_n1(x)
+ if (x < 1)
+ fun_l25_n49(x)
+ else
+ fun_l25_n870(x)
+ end
+end
+
+def fun_l24_n2(x)
+ if (x < 1)
+ fun_l25_n547(x)
+ else
+ fun_l25_n357(x)
+ end
+end
+
+def fun_l24_n3(x)
+ if (x < 1)
+ fun_l25_n167(x)
+ else
+ fun_l25_n908(x)
+ end
+end
+
+def fun_l24_n4(x)
+ if (x < 1)
+ fun_l25_n943(x)
+ else
+ fun_l25_n882(x)
+ end
+end
+
+def fun_l24_n5(x)
+ if (x < 1)
+ fun_l25_n635(x)
+ else
+ fun_l25_n988(x)
+ end
+end
+
+def fun_l24_n6(x)
+ if (x < 1)
+ fun_l25_n648(x)
+ else
+ fun_l25_n62(x)
+ end
+end
+
+def fun_l24_n7(x)
+ if (x < 1)
+ fun_l25_n896(x)
+ else
+ fun_l25_n636(x)
+ end
+end
+
+def fun_l24_n8(x)
+ if (x < 1)
+ fun_l25_n666(x)
+ else
+ fun_l25_n50(x)
+ end
+end
+
+def fun_l24_n9(x)
+ if (x < 1)
+ fun_l25_n42(x)
+ else
+ fun_l25_n216(x)
+ end
+end
+
+def fun_l24_n10(x)
+ if (x < 1)
+ fun_l25_n979(x)
+ else
+ fun_l25_n27(x)
+ end
+end
+
+def fun_l24_n11(x)
+ if (x < 1)
+ fun_l25_n421(x)
+ else
+ fun_l25_n239(x)
+ end
+end
+
+def fun_l24_n12(x)
+ if (x < 1)
+ fun_l25_n465(x)
+ else
+ fun_l25_n483(x)
+ end
+end
+
+def fun_l24_n13(x)
+ if (x < 1)
+ fun_l25_n172(x)
+ else
+ fun_l25_n918(x)
+ end
+end
+
+def fun_l24_n14(x)
+ if (x < 1)
+ fun_l25_n130(x)
+ else
+ fun_l25_n144(x)
+ end
+end
+
+def fun_l24_n15(x)
+ if (x < 1)
+ fun_l25_n569(x)
+ else
+ fun_l25_n319(x)
+ end
+end
+
+def fun_l24_n16(x)
+ if (x < 1)
+ fun_l25_n54(x)
+ else
+ fun_l25_n253(x)
+ end
+end
+
+def fun_l24_n17(x)
+ if (x < 1)
+ fun_l25_n127(x)
+ else
+ fun_l25_n594(x)
+ end
+end
+
+def fun_l24_n18(x)
+ if (x < 1)
+ fun_l25_n94(x)
+ else
+ fun_l25_n486(x)
+ end
+end
+
+def fun_l24_n19(x)
+ if (x < 1)
+ fun_l25_n322(x)
+ else
+ fun_l25_n731(x)
+ end
+end
+
+def fun_l24_n20(x)
+ if (x < 1)
+ fun_l25_n828(x)
+ else
+ fun_l25_n410(x)
+ end
+end
+
+def fun_l24_n21(x)
+ if (x < 1)
+ fun_l25_n422(x)
+ else
+ fun_l25_n265(x)
+ end
+end
+
+def fun_l24_n22(x)
+ if (x < 1)
+ fun_l25_n259(x)
+ else
+ fun_l25_n902(x)
+ end
+end
+
+def fun_l24_n23(x)
+ if (x < 1)
+ fun_l25_n660(x)
+ else
+ fun_l25_n525(x)
+ end
+end
+
+def fun_l24_n24(x)
+ if (x < 1)
+ fun_l25_n898(x)
+ else
+ fun_l25_n231(x)
+ end
+end
+
+def fun_l24_n25(x)
+ if (x < 1)
+ fun_l25_n319(x)
+ else
+ fun_l25_n306(x)
+ end
+end
+
+def fun_l24_n26(x)
+ if (x < 1)
+ fun_l25_n447(x)
+ else
+ fun_l25_n110(x)
+ end
+end
+
+def fun_l24_n27(x)
+ if (x < 1)
+ fun_l25_n416(x)
+ else
+ fun_l25_n335(x)
+ end
+end
+
+def fun_l24_n28(x)
+ if (x < 1)
+ fun_l25_n132(x)
+ else
+ fun_l25_n549(x)
+ end
+end
+
+def fun_l24_n29(x)
+ if (x < 1)
+ fun_l25_n878(x)
+ else
+ fun_l25_n790(x)
+ end
+end
+
+def fun_l24_n30(x)
+ if (x < 1)
+ fun_l25_n205(x)
+ else
+ fun_l25_n328(x)
+ end
+end
+
+def fun_l24_n31(x)
+ if (x < 1)
+ fun_l25_n448(x)
+ else
+ fun_l25_n255(x)
+ end
+end
+
+def fun_l24_n32(x)
+ if (x < 1)
+ fun_l25_n800(x)
+ else
+ fun_l25_n254(x)
+ end
+end
+
+def fun_l24_n33(x)
+ if (x < 1)
+ fun_l25_n377(x)
+ else
+ fun_l25_n178(x)
+ end
+end
+
+def fun_l24_n34(x)
+ if (x < 1)
+ fun_l25_n317(x)
+ else
+ fun_l25_n271(x)
+ end
+end
+
+def fun_l24_n35(x)
+ if (x < 1)
+ fun_l25_n50(x)
+ else
+ fun_l25_n801(x)
+ end
+end
+
+def fun_l24_n36(x)
+ if (x < 1)
+ fun_l25_n720(x)
+ else
+ fun_l25_n267(x)
+ end
+end
+
+def fun_l24_n37(x)
+ if (x < 1)
+ fun_l25_n688(x)
+ else
+ fun_l25_n901(x)
+ end
+end
+
+def fun_l24_n38(x)
+ if (x < 1)
+ fun_l25_n752(x)
+ else
+ fun_l25_n541(x)
+ end
+end
+
+def fun_l24_n39(x)
+ if (x < 1)
+ fun_l25_n716(x)
+ else
+ fun_l25_n884(x)
+ end
+end
+
+def fun_l24_n40(x)
+ if (x < 1)
+ fun_l25_n138(x)
+ else
+ fun_l25_n536(x)
+ end
+end
+
+def fun_l24_n41(x)
+ if (x < 1)
+ fun_l25_n382(x)
+ else
+ fun_l25_n496(x)
+ end
+end
+
+def fun_l24_n42(x)
+ if (x < 1)
+ fun_l25_n729(x)
+ else
+ fun_l25_n443(x)
+ end
+end
+
+def fun_l24_n43(x)
+ if (x < 1)
+ fun_l25_n401(x)
+ else
+ fun_l25_n300(x)
+ end
+end
+
+def fun_l24_n44(x)
+ if (x < 1)
+ fun_l25_n695(x)
+ else
+ fun_l25_n139(x)
+ end
+end
+
+def fun_l24_n45(x)
+ if (x < 1)
+ fun_l25_n186(x)
+ else
+ fun_l25_n446(x)
+ end
+end
+
+def fun_l24_n46(x)
+ if (x < 1)
+ fun_l25_n102(x)
+ else
+ fun_l25_n415(x)
+ end
+end
+
+def fun_l24_n47(x)
+ if (x < 1)
+ fun_l25_n74(x)
+ else
+ fun_l25_n947(x)
+ end
+end
+
+def fun_l24_n48(x)
+ if (x < 1)
+ fun_l25_n720(x)
+ else
+ fun_l25_n873(x)
+ end
+end
+
+def fun_l24_n49(x)
+ if (x < 1)
+ fun_l25_n779(x)
+ else
+ fun_l25_n61(x)
+ end
+end
+
+def fun_l24_n50(x)
+ if (x < 1)
+ fun_l25_n889(x)
+ else
+ fun_l25_n620(x)
+ end
+end
+
+def fun_l24_n51(x)
+ if (x < 1)
+ fun_l25_n323(x)
+ else
+ fun_l25_n412(x)
+ end
+end
+
+def fun_l24_n52(x)
+ if (x < 1)
+ fun_l25_n986(x)
+ else
+ fun_l25_n950(x)
+ end
+end
+
+def fun_l24_n53(x)
+ if (x < 1)
+ fun_l25_n810(x)
+ else
+ fun_l25_n956(x)
+ end
+end
+
+def fun_l24_n54(x)
+ if (x < 1)
+ fun_l25_n89(x)
+ else
+ fun_l25_n110(x)
+ end
+end
+
+def fun_l24_n55(x)
+ if (x < 1)
+ fun_l25_n255(x)
+ else
+ fun_l25_n953(x)
+ end
+end
+
+def fun_l24_n56(x)
+ if (x < 1)
+ fun_l25_n200(x)
+ else
+ fun_l25_n366(x)
+ end
+end
+
+def fun_l24_n57(x)
+ if (x < 1)
+ fun_l25_n431(x)
+ else
+ fun_l25_n49(x)
+ end
+end
+
+def fun_l24_n58(x)
+ if (x < 1)
+ fun_l25_n705(x)
+ else
+ fun_l25_n362(x)
+ end
+end
+
+def fun_l24_n59(x)
+ if (x < 1)
+ fun_l25_n587(x)
+ else
+ fun_l25_n511(x)
+ end
+end
+
+def fun_l24_n60(x)
+ if (x < 1)
+ fun_l25_n72(x)
+ else
+ fun_l25_n560(x)
+ end
+end
+
+def fun_l24_n61(x)
+ if (x < 1)
+ fun_l25_n732(x)
+ else
+ fun_l25_n214(x)
+ end
+end
+
+def fun_l24_n62(x)
+ if (x < 1)
+ fun_l25_n348(x)
+ else
+ fun_l25_n70(x)
+ end
+end
+
+def fun_l24_n63(x)
+ if (x < 1)
+ fun_l25_n371(x)
+ else
+ fun_l25_n625(x)
+ end
+end
+
+def fun_l24_n64(x)
+ if (x < 1)
+ fun_l25_n204(x)
+ else
+ fun_l25_n249(x)
+ end
+end
+
+def fun_l24_n65(x)
+ if (x < 1)
+ fun_l25_n608(x)
+ else
+ fun_l25_n682(x)
+ end
+end
+
+def fun_l24_n66(x)
+ if (x < 1)
+ fun_l25_n450(x)
+ else
+ fun_l25_n951(x)
+ end
+end
+
+def fun_l24_n67(x)
+ if (x < 1)
+ fun_l25_n749(x)
+ else
+ fun_l25_n39(x)
+ end
+end
+
+def fun_l24_n68(x)
+ if (x < 1)
+ fun_l25_n169(x)
+ else
+ fun_l25_n801(x)
+ end
+end
+
+def fun_l24_n69(x)
+ if (x < 1)
+ fun_l25_n55(x)
+ else
+ fun_l25_n728(x)
+ end
+end
+
+def fun_l24_n70(x)
+ if (x < 1)
+ fun_l25_n115(x)
+ else
+ fun_l25_n689(x)
+ end
+end
+
+def fun_l24_n71(x)
+ if (x < 1)
+ fun_l25_n332(x)
+ else
+ fun_l25_n474(x)
+ end
+end
+
+def fun_l24_n72(x)
+ if (x < 1)
+ fun_l25_n846(x)
+ else
+ fun_l25_n808(x)
+ end
+end
+
+def fun_l24_n73(x)
+ if (x < 1)
+ fun_l25_n521(x)
+ else
+ fun_l25_n229(x)
+ end
+end
+
+def fun_l24_n74(x)
+ if (x < 1)
+ fun_l25_n307(x)
+ else
+ fun_l25_n992(x)
+ end
+end
+
+def fun_l24_n75(x)
+ if (x < 1)
+ fun_l25_n564(x)
+ else
+ fun_l25_n940(x)
+ end
+end
+
+def fun_l24_n76(x)
+ if (x < 1)
+ fun_l25_n348(x)
+ else
+ fun_l25_n453(x)
+ end
+end
+
+def fun_l24_n77(x)
+ if (x < 1)
+ fun_l25_n252(x)
+ else
+ fun_l25_n270(x)
+ end
+end
+
+def fun_l24_n78(x)
+ if (x < 1)
+ fun_l25_n333(x)
+ else
+ fun_l25_n980(x)
+ end
+end
+
+def fun_l24_n79(x)
+ if (x < 1)
+ fun_l25_n486(x)
+ else
+ fun_l25_n276(x)
+ end
+end
+
+def fun_l24_n80(x)
+ if (x < 1)
+ fun_l25_n45(x)
+ else
+ fun_l25_n930(x)
+ end
+end
+
+def fun_l24_n81(x)
+ if (x < 1)
+ fun_l25_n527(x)
+ else
+ fun_l25_n181(x)
+ end
+end
+
+def fun_l24_n82(x)
+ if (x < 1)
+ fun_l25_n768(x)
+ else
+ fun_l25_n869(x)
+ end
+end
+
+def fun_l24_n83(x)
+ if (x < 1)
+ fun_l25_n505(x)
+ else
+ fun_l25_n214(x)
+ end
+end
+
+def fun_l24_n84(x)
+ if (x < 1)
+ fun_l25_n41(x)
+ else
+ fun_l25_n873(x)
+ end
+end
+
+def fun_l24_n85(x)
+ if (x < 1)
+ fun_l25_n646(x)
+ else
+ fun_l25_n105(x)
+ end
+end
+
+def fun_l24_n86(x)
+ if (x < 1)
+ fun_l25_n675(x)
+ else
+ fun_l25_n830(x)
+ end
+end
+
+def fun_l24_n87(x)
+ if (x < 1)
+ fun_l25_n953(x)
+ else
+ fun_l25_n268(x)
+ end
+end
+
+def fun_l24_n88(x)
+ if (x < 1)
+ fun_l25_n36(x)
+ else
+ fun_l25_n31(x)
+ end
+end
+
+def fun_l24_n89(x)
+ if (x < 1)
+ fun_l25_n810(x)
+ else
+ fun_l25_n315(x)
+ end
+end
+
+def fun_l24_n90(x)
+ if (x < 1)
+ fun_l25_n100(x)
+ else
+ fun_l25_n882(x)
+ end
+end
+
+def fun_l24_n91(x)
+ if (x < 1)
+ fun_l25_n278(x)
+ else
+ fun_l25_n720(x)
+ end
+end
+
+def fun_l24_n92(x)
+ if (x < 1)
+ fun_l25_n472(x)
+ else
+ fun_l25_n615(x)
+ end
+end
+
+def fun_l24_n93(x)
+ if (x < 1)
+ fun_l25_n42(x)
+ else
+ fun_l25_n16(x)
+ end
+end
+
+def fun_l24_n94(x)
+ if (x < 1)
+ fun_l25_n905(x)
+ else
+ fun_l25_n988(x)
+ end
+end
+
+def fun_l24_n95(x)
+ if (x < 1)
+ fun_l25_n862(x)
+ else
+ fun_l25_n355(x)
+ end
+end
+
+def fun_l24_n96(x)
+ if (x < 1)
+ fun_l25_n931(x)
+ else
+ fun_l25_n539(x)
+ end
+end
+
+def fun_l24_n97(x)
+ if (x < 1)
+ fun_l25_n185(x)
+ else
+ fun_l25_n868(x)
+ end
+end
+
+def fun_l24_n98(x)
+ if (x < 1)
+ fun_l25_n276(x)
+ else
+ fun_l25_n591(x)
+ end
+end
+
+def fun_l24_n99(x)
+ if (x < 1)
+ fun_l25_n695(x)
+ else
+ fun_l25_n965(x)
+ end
+end
+
+def fun_l24_n100(x)
+ if (x < 1)
+ fun_l25_n293(x)
+ else
+ fun_l25_n127(x)
+ end
+end
+
+def fun_l24_n101(x)
+ if (x < 1)
+ fun_l25_n71(x)
+ else
+ fun_l25_n245(x)
+ end
+end
+
+def fun_l24_n102(x)
+ if (x < 1)
+ fun_l25_n397(x)
+ else
+ fun_l25_n893(x)
+ end
+end
+
+def fun_l24_n103(x)
+ if (x < 1)
+ fun_l25_n191(x)
+ else
+ fun_l25_n101(x)
+ end
+end
+
+def fun_l24_n104(x)
+ if (x < 1)
+ fun_l25_n982(x)
+ else
+ fun_l25_n101(x)
+ end
+end
+
+def fun_l24_n105(x)
+ if (x < 1)
+ fun_l25_n385(x)
+ else
+ fun_l25_n651(x)
+ end
+end
+
+def fun_l24_n106(x)
+ if (x < 1)
+ fun_l25_n577(x)
+ else
+ fun_l25_n241(x)
+ end
+end
+
+def fun_l24_n107(x)
+ if (x < 1)
+ fun_l25_n219(x)
+ else
+ fun_l25_n92(x)
+ end
+end
+
+def fun_l24_n108(x)
+ if (x < 1)
+ fun_l25_n202(x)
+ else
+ fun_l25_n133(x)
+ end
+end
+
+def fun_l24_n109(x)
+ if (x < 1)
+ fun_l25_n706(x)
+ else
+ fun_l25_n970(x)
+ end
+end
+
+def fun_l24_n110(x)
+ if (x < 1)
+ fun_l25_n948(x)
+ else
+ fun_l25_n595(x)
+ end
+end
+
+def fun_l24_n111(x)
+ if (x < 1)
+ fun_l25_n775(x)
+ else
+ fun_l25_n609(x)
+ end
+end
+
+def fun_l24_n112(x)
+ if (x < 1)
+ fun_l25_n905(x)
+ else
+ fun_l25_n11(x)
+ end
+end
+
+def fun_l24_n113(x)
+ if (x < 1)
+ fun_l25_n730(x)
+ else
+ fun_l25_n826(x)
+ end
+end
+
+def fun_l24_n114(x)
+ if (x < 1)
+ fun_l25_n403(x)
+ else
+ fun_l25_n562(x)
+ end
+end
+
+def fun_l24_n115(x)
+ if (x < 1)
+ fun_l25_n272(x)
+ else
+ fun_l25_n844(x)
+ end
+end
+
+def fun_l24_n116(x)
+ if (x < 1)
+ fun_l25_n907(x)
+ else
+ fun_l25_n797(x)
+ end
+end
+
+def fun_l24_n117(x)
+ if (x < 1)
+ fun_l25_n910(x)
+ else
+ fun_l25_n632(x)
+ end
+end
+
+def fun_l24_n118(x)
+ if (x < 1)
+ fun_l25_n570(x)
+ else
+ fun_l25_n645(x)
+ end
+end
+
+def fun_l24_n119(x)
+ if (x < 1)
+ fun_l25_n930(x)
+ else
+ fun_l25_n31(x)
+ end
+end
+
+def fun_l24_n120(x)
+ if (x < 1)
+ fun_l25_n228(x)
+ else
+ fun_l25_n340(x)
+ end
+end
+
+def fun_l24_n121(x)
+ if (x < 1)
+ fun_l25_n891(x)
+ else
+ fun_l25_n395(x)
+ end
+end
+
+def fun_l24_n122(x)
+ if (x < 1)
+ fun_l25_n340(x)
+ else
+ fun_l25_n966(x)
+ end
+end
+
+def fun_l24_n123(x)
+ if (x < 1)
+ fun_l25_n835(x)
+ else
+ fun_l25_n407(x)
+ end
+end
+
+def fun_l24_n124(x)
+ if (x < 1)
+ fun_l25_n156(x)
+ else
+ fun_l25_n151(x)
+ end
+end
+
+def fun_l24_n125(x)
+ if (x < 1)
+ fun_l25_n912(x)
+ else
+ fun_l25_n733(x)
+ end
+end
+
+def fun_l24_n126(x)
+ if (x < 1)
+ fun_l25_n385(x)
+ else
+ fun_l25_n406(x)
+ end
+end
+
+def fun_l24_n127(x)
+ if (x < 1)
+ fun_l25_n662(x)
+ else
+ fun_l25_n932(x)
+ end
+end
+
+def fun_l24_n128(x)
+ if (x < 1)
+ fun_l25_n418(x)
+ else
+ fun_l25_n445(x)
+ end
+end
+
+def fun_l24_n129(x)
+ if (x < 1)
+ fun_l25_n659(x)
+ else
+ fun_l25_n518(x)
+ end
+end
+
+def fun_l24_n130(x)
+ if (x < 1)
+ fun_l25_n784(x)
+ else
+ fun_l25_n342(x)
+ end
+end
+
+def fun_l24_n131(x)
+ if (x < 1)
+ fun_l25_n184(x)
+ else
+ fun_l25_n316(x)
+ end
+end
+
+def fun_l24_n132(x)
+ if (x < 1)
+ fun_l25_n76(x)
+ else
+ fun_l25_n156(x)
+ end
+end
+
+def fun_l24_n133(x)
+ if (x < 1)
+ fun_l25_n355(x)
+ else
+ fun_l25_n430(x)
+ end
+end
+
+def fun_l24_n134(x)
+ if (x < 1)
+ fun_l25_n643(x)
+ else
+ fun_l25_n109(x)
+ end
+end
+
+def fun_l24_n135(x)
+ if (x < 1)
+ fun_l25_n277(x)
+ else
+ fun_l25_n76(x)
+ end
+end
+
+def fun_l24_n136(x)
+ if (x < 1)
+ fun_l25_n898(x)
+ else
+ fun_l25_n870(x)
+ end
+end
+
+def fun_l24_n137(x)
+ if (x < 1)
+ fun_l25_n275(x)
+ else
+ fun_l25_n762(x)
+ end
+end
+
+def fun_l24_n138(x)
+ if (x < 1)
+ fun_l25_n109(x)
+ else
+ fun_l25_n913(x)
+ end
+end
+
+def fun_l24_n139(x)
+ if (x < 1)
+ fun_l25_n731(x)
+ else
+ fun_l25_n767(x)
+ end
+end
+
+def fun_l24_n140(x)
+ if (x < 1)
+ fun_l25_n385(x)
+ else
+ fun_l25_n743(x)
+ end
+end
+
+def fun_l24_n141(x)
+ if (x < 1)
+ fun_l25_n518(x)
+ else
+ fun_l25_n185(x)
+ end
+end
+
+def fun_l24_n142(x)
+ if (x < 1)
+ fun_l25_n656(x)
+ else
+ fun_l25_n614(x)
+ end
+end
+
+def fun_l24_n143(x)
+ if (x < 1)
+ fun_l25_n86(x)
+ else
+ fun_l25_n825(x)
+ end
+end
+
+def fun_l24_n144(x)
+ if (x < 1)
+ fun_l25_n982(x)
+ else
+ fun_l25_n970(x)
+ end
+end
+
+def fun_l24_n145(x)
+ if (x < 1)
+ fun_l25_n608(x)
+ else
+ fun_l25_n970(x)
+ end
+end
+
+def fun_l24_n146(x)
+ if (x < 1)
+ fun_l25_n273(x)
+ else
+ fun_l25_n4(x)
+ end
+end
+
+def fun_l24_n147(x)
+ if (x < 1)
+ fun_l25_n366(x)
+ else
+ fun_l25_n902(x)
+ end
+end
+
+def fun_l24_n148(x)
+ if (x < 1)
+ fun_l25_n682(x)
+ else
+ fun_l25_n210(x)
+ end
+end
+
+def fun_l24_n149(x)
+ if (x < 1)
+ fun_l25_n212(x)
+ else
+ fun_l25_n429(x)
+ end
+end
+
+def fun_l24_n150(x)
+ if (x < 1)
+ fun_l25_n680(x)
+ else
+ fun_l25_n959(x)
+ end
+end
+
+def fun_l24_n151(x)
+ if (x < 1)
+ fun_l25_n65(x)
+ else
+ fun_l25_n654(x)
+ end
+end
+
+def fun_l24_n152(x)
+ if (x < 1)
+ fun_l25_n465(x)
+ else
+ fun_l25_n24(x)
+ end
+end
+
+def fun_l24_n153(x)
+ if (x < 1)
+ fun_l25_n254(x)
+ else
+ fun_l25_n611(x)
+ end
+end
+
+def fun_l24_n154(x)
+ if (x < 1)
+ fun_l25_n525(x)
+ else
+ fun_l25_n25(x)
+ end
+end
+
+def fun_l24_n155(x)
+ if (x < 1)
+ fun_l25_n967(x)
+ else
+ fun_l25_n163(x)
+ end
+end
+
+def fun_l24_n156(x)
+ if (x < 1)
+ fun_l25_n191(x)
+ else
+ fun_l25_n603(x)
+ end
+end
+
+def fun_l24_n157(x)
+ if (x < 1)
+ fun_l25_n724(x)
+ else
+ fun_l25_n537(x)
+ end
+end
+
+def fun_l24_n158(x)
+ if (x < 1)
+ fun_l25_n115(x)
+ else
+ fun_l25_n967(x)
+ end
+end
+
+def fun_l24_n159(x)
+ if (x < 1)
+ fun_l25_n247(x)
+ else
+ fun_l25_n650(x)
+ end
+end
+
+def fun_l24_n160(x)
+ if (x < 1)
+ fun_l25_n681(x)
+ else
+ fun_l25_n754(x)
+ end
+end
+
+def fun_l24_n161(x)
+ if (x < 1)
+ fun_l25_n689(x)
+ else
+ fun_l25_n283(x)
+ end
+end
+
+def fun_l24_n162(x)
+ if (x < 1)
+ fun_l25_n697(x)
+ else
+ fun_l25_n262(x)
+ end
+end
+
+def fun_l24_n163(x)
+ if (x < 1)
+ fun_l25_n584(x)
+ else
+ fun_l25_n502(x)
+ end
+end
+
+def fun_l24_n164(x)
+ if (x < 1)
+ fun_l25_n949(x)
+ else
+ fun_l25_n738(x)
+ end
+end
+
+def fun_l24_n165(x)
+ if (x < 1)
+ fun_l25_n847(x)
+ else
+ fun_l25_n317(x)
+ end
+end
+
+def fun_l24_n166(x)
+ if (x < 1)
+ fun_l25_n827(x)
+ else
+ fun_l25_n831(x)
+ end
+end
+
+def fun_l24_n167(x)
+ if (x < 1)
+ fun_l25_n400(x)
+ else
+ fun_l25_n60(x)
+ end
+end
+
+def fun_l24_n168(x)
+ if (x < 1)
+ fun_l25_n411(x)
+ else
+ fun_l25_n333(x)
+ end
+end
+
+def fun_l24_n169(x)
+ if (x < 1)
+ fun_l25_n481(x)
+ else
+ fun_l25_n336(x)
+ end
+end
+
+def fun_l24_n170(x)
+ if (x < 1)
+ fun_l25_n551(x)
+ else
+ fun_l25_n184(x)
+ end
+end
+
+def fun_l24_n171(x)
+ if (x < 1)
+ fun_l25_n700(x)
+ else
+ fun_l25_n542(x)
+ end
+end
+
+def fun_l24_n172(x)
+ if (x < 1)
+ fun_l25_n496(x)
+ else
+ fun_l25_n494(x)
+ end
+end
+
+def fun_l24_n173(x)
+ if (x < 1)
+ fun_l25_n684(x)
+ else
+ fun_l25_n865(x)
+ end
+end
+
+def fun_l24_n174(x)
+ if (x < 1)
+ fun_l25_n304(x)
+ else
+ fun_l25_n641(x)
+ end
+end
+
+def fun_l24_n175(x)
+ if (x < 1)
+ fun_l25_n252(x)
+ else
+ fun_l25_n573(x)
+ end
+end
+
+def fun_l24_n176(x)
+ if (x < 1)
+ fun_l25_n463(x)
+ else
+ fun_l25_n596(x)
+ end
+end
+
+def fun_l24_n177(x)
+ if (x < 1)
+ fun_l25_n864(x)
+ else
+ fun_l25_n810(x)
+ end
+end
+
+def fun_l24_n178(x)
+ if (x < 1)
+ fun_l25_n182(x)
+ else
+ fun_l25_n900(x)
+ end
+end
+
+def fun_l24_n179(x)
+ if (x < 1)
+ fun_l25_n678(x)
+ else
+ fun_l25_n299(x)
+ end
+end
+
+def fun_l24_n180(x)
+ if (x < 1)
+ fun_l25_n423(x)
+ else
+ fun_l25_n791(x)
+ end
+end
+
+def fun_l24_n181(x)
+ if (x < 1)
+ fun_l25_n582(x)
+ else
+ fun_l25_n382(x)
+ end
+end
+
+def fun_l24_n182(x)
+ if (x < 1)
+ fun_l25_n498(x)
+ else
+ fun_l25_n247(x)
+ end
+end
+
+def fun_l24_n183(x)
+ if (x < 1)
+ fun_l25_n534(x)
+ else
+ fun_l25_n504(x)
+ end
+end
+
+def fun_l24_n184(x)
+ if (x < 1)
+ fun_l25_n947(x)
+ else
+ fun_l25_n708(x)
+ end
+end
+
+def fun_l24_n185(x)
+ if (x < 1)
+ fun_l25_n673(x)
+ else
+ fun_l25_n711(x)
+ end
+end
+
+def fun_l24_n186(x)
+ if (x < 1)
+ fun_l25_n155(x)
+ else
+ fun_l25_n233(x)
+ end
+end
+
+def fun_l24_n187(x)
+ if (x < 1)
+ fun_l25_n669(x)
+ else
+ fun_l25_n558(x)
+ end
+end
+
+def fun_l24_n188(x)
+ if (x < 1)
+ fun_l25_n307(x)
+ else
+ fun_l25_n839(x)
+ end
+end
+
+def fun_l24_n189(x)
+ if (x < 1)
+ fun_l25_n623(x)
+ else
+ fun_l25_n17(x)
+ end
+end
+
+def fun_l24_n190(x)
+ if (x < 1)
+ fun_l25_n468(x)
+ else
+ fun_l25_n391(x)
+ end
+end
+
+def fun_l24_n191(x)
+ if (x < 1)
+ fun_l25_n492(x)
+ else
+ fun_l25_n953(x)
+ end
+end
+
+def fun_l24_n192(x)
+ if (x < 1)
+ fun_l25_n644(x)
+ else
+ fun_l25_n724(x)
+ end
+end
+
+def fun_l24_n193(x)
+ if (x < 1)
+ fun_l25_n438(x)
+ else
+ fun_l25_n110(x)
+ end
+end
+
+def fun_l24_n194(x)
+ if (x < 1)
+ fun_l25_n763(x)
+ else
+ fun_l25_n0(x)
+ end
+end
+
+def fun_l24_n195(x)
+ if (x < 1)
+ fun_l25_n766(x)
+ else
+ fun_l25_n436(x)
+ end
+end
+
+def fun_l24_n196(x)
+ if (x < 1)
+ fun_l25_n646(x)
+ else
+ fun_l25_n264(x)
+ end
+end
+
+def fun_l24_n197(x)
+ if (x < 1)
+ fun_l25_n140(x)
+ else
+ fun_l25_n387(x)
+ end
+end
+
+def fun_l24_n198(x)
+ if (x < 1)
+ fun_l25_n890(x)
+ else
+ fun_l25_n756(x)
+ end
+end
+
+def fun_l24_n199(x)
+ if (x < 1)
+ fun_l25_n597(x)
+ else
+ fun_l25_n330(x)
+ end
+end
+
+def fun_l24_n200(x)
+ if (x < 1)
+ fun_l25_n656(x)
+ else
+ fun_l25_n292(x)
+ end
+end
+
+def fun_l24_n201(x)
+ if (x < 1)
+ fun_l25_n224(x)
+ else
+ fun_l25_n233(x)
+ end
+end
+
+def fun_l24_n202(x)
+ if (x < 1)
+ fun_l25_n153(x)
+ else
+ fun_l25_n926(x)
+ end
+end
+
+def fun_l24_n203(x)
+ if (x < 1)
+ fun_l25_n897(x)
+ else
+ fun_l25_n680(x)
+ end
+end
+
+def fun_l24_n204(x)
+ if (x < 1)
+ fun_l25_n610(x)
+ else
+ fun_l25_n154(x)
+ end
+end
+
+def fun_l24_n205(x)
+ if (x < 1)
+ fun_l25_n307(x)
+ else
+ fun_l25_n451(x)
+ end
+end
+
+def fun_l24_n206(x)
+ if (x < 1)
+ fun_l25_n138(x)
+ else
+ fun_l25_n875(x)
+ end
+end
+
+def fun_l24_n207(x)
+ if (x < 1)
+ fun_l25_n306(x)
+ else
+ fun_l25_n474(x)
+ end
+end
+
+def fun_l24_n208(x)
+ if (x < 1)
+ fun_l25_n771(x)
+ else
+ fun_l25_n105(x)
+ end
+end
+
+def fun_l24_n209(x)
+ if (x < 1)
+ fun_l25_n120(x)
+ else
+ fun_l25_n961(x)
+ end
+end
+
+def fun_l24_n210(x)
+ if (x < 1)
+ fun_l25_n455(x)
+ else
+ fun_l25_n244(x)
+ end
+end
+
+def fun_l24_n211(x)
+ if (x < 1)
+ fun_l25_n93(x)
+ else
+ fun_l25_n31(x)
+ end
+end
+
+def fun_l24_n212(x)
+ if (x < 1)
+ fun_l25_n69(x)
+ else
+ fun_l25_n39(x)
+ end
+end
+
+def fun_l24_n213(x)
+ if (x < 1)
+ fun_l25_n379(x)
+ else
+ fun_l25_n482(x)
+ end
+end
+
+def fun_l24_n214(x)
+ if (x < 1)
+ fun_l25_n839(x)
+ else
+ fun_l25_n669(x)
+ end
+end
+
+def fun_l24_n215(x)
+ if (x < 1)
+ fun_l25_n27(x)
+ else
+ fun_l25_n46(x)
+ end
+end
+
+def fun_l24_n216(x)
+ if (x < 1)
+ fun_l25_n290(x)
+ else
+ fun_l25_n908(x)
+ end
+end
+
+def fun_l24_n217(x)
+ if (x < 1)
+ fun_l25_n618(x)
+ else
+ fun_l25_n242(x)
+ end
+end
+
+def fun_l24_n218(x)
+ if (x < 1)
+ fun_l25_n42(x)
+ else
+ fun_l25_n674(x)
+ end
+end
+
+def fun_l24_n219(x)
+ if (x < 1)
+ fun_l25_n510(x)
+ else
+ fun_l25_n963(x)
+ end
+end
+
+def fun_l24_n220(x)
+ if (x < 1)
+ fun_l25_n345(x)
+ else
+ fun_l25_n666(x)
+ end
+end
+
+def fun_l24_n221(x)
+ if (x < 1)
+ fun_l25_n548(x)
+ else
+ fun_l25_n424(x)
+ end
+end
+
+def fun_l24_n222(x)
+ if (x < 1)
+ fun_l25_n387(x)
+ else
+ fun_l25_n30(x)
+ end
+end
+
+def fun_l24_n223(x)
+ if (x < 1)
+ fun_l25_n124(x)
+ else
+ fun_l25_n374(x)
+ end
+end
+
+def fun_l24_n224(x)
+ if (x < 1)
+ fun_l25_n200(x)
+ else
+ fun_l25_n108(x)
+ end
+end
+
+def fun_l24_n225(x)
+ if (x < 1)
+ fun_l25_n462(x)
+ else
+ fun_l25_n11(x)
+ end
+end
+
+def fun_l24_n226(x)
+ if (x < 1)
+ fun_l25_n930(x)
+ else
+ fun_l25_n791(x)
+ end
+end
+
+def fun_l24_n227(x)
+ if (x < 1)
+ fun_l25_n10(x)
+ else
+ fun_l25_n447(x)
+ end
+end
+
+def fun_l24_n228(x)
+ if (x < 1)
+ fun_l25_n858(x)
+ else
+ fun_l25_n472(x)
+ end
+end
+
+def fun_l24_n229(x)
+ if (x < 1)
+ fun_l25_n409(x)
+ else
+ fun_l25_n228(x)
+ end
+end
+
+def fun_l24_n230(x)
+ if (x < 1)
+ fun_l25_n82(x)
+ else
+ fun_l25_n665(x)
+ end
+end
+
+def fun_l24_n231(x)
+ if (x < 1)
+ fun_l25_n148(x)
+ else
+ fun_l25_n174(x)
+ end
+end
+
+def fun_l24_n232(x)
+ if (x < 1)
+ fun_l25_n785(x)
+ else
+ fun_l25_n996(x)
+ end
+end
+
+def fun_l24_n233(x)
+ if (x < 1)
+ fun_l25_n827(x)
+ else
+ fun_l25_n393(x)
+ end
+end
+
+def fun_l24_n234(x)
+ if (x < 1)
+ fun_l25_n619(x)
+ else
+ fun_l25_n361(x)
+ end
+end
+
+def fun_l24_n235(x)
+ if (x < 1)
+ fun_l25_n52(x)
+ else
+ fun_l25_n420(x)
+ end
+end
+
+def fun_l24_n236(x)
+ if (x < 1)
+ fun_l25_n355(x)
+ else
+ fun_l25_n561(x)
+ end
+end
+
+def fun_l24_n237(x)
+ if (x < 1)
+ fun_l25_n36(x)
+ else
+ fun_l25_n885(x)
+ end
+end
+
+def fun_l24_n238(x)
+ if (x < 1)
+ fun_l25_n15(x)
+ else
+ fun_l25_n19(x)
+ end
+end
+
+def fun_l24_n239(x)
+ if (x < 1)
+ fun_l25_n137(x)
+ else
+ fun_l25_n34(x)
+ end
+end
+
+def fun_l24_n240(x)
+ if (x < 1)
+ fun_l25_n776(x)
+ else
+ fun_l25_n199(x)
+ end
+end
+
+def fun_l24_n241(x)
+ if (x < 1)
+ fun_l25_n904(x)
+ else
+ fun_l25_n396(x)
+ end
+end
+
+def fun_l24_n242(x)
+ if (x < 1)
+ fun_l25_n122(x)
+ else
+ fun_l25_n720(x)
+ end
+end
+
+def fun_l24_n243(x)
+ if (x < 1)
+ fun_l25_n513(x)
+ else
+ fun_l25_n429(x)
+ end
+end
+
+def fun_l24_n244(x)
+ if (x < 1)
+ fun_l25_n289(x)
+ else
+ fun_l25_n265(x)
+ end
+end
+
+def fun_l24_n245(x)
+ if (x < 1)
+ fun_l25_n334(x)
+ else
+ fun_l25_n42(x)
+ end
+end
+
+def fun_l24_n246(x)
+ if (x < 1)
+ fun_l25_n55(x)
+ else
+ fun_l25_n67(x)
+ end
+end
+
+def fun_l24_n247(x)
+ if (x < 1)
+ fun_l25_n648(x)
+ else
+ fun_l25_n38(x)
+ end
+end
+
+def fun_l24_n248(x)
+ if (x < 1)
+ fun_l25_n904(x)
+ else
+ fun_l25_n732(x)
+ end
+end
+
+def fun_l24_n249(x)
+ if (x < 1)
+ fun_l25_n243(x)
+ else
+ fun_l25_n704(x)
+ end
+end
+
+def fun_l24_n250(x)
+ if (x < 1)
+ fun_l25_n513(x)
+ else
+ fun_l25_n326(x)
+ end
+end
+
+def fun_l24_n251(x)
+ if (x < 1)
+ fun_l25_n122(x)
+ else
+ fun_l25_n617(x)
+ end
+end
+
+def fun_l24_n252(x)
+ if (x < 1)
+ fun_l25_n837(x)
+ else
+ fun_l25_n891(x)
+ end
+end
+
+def fun_l24_n253(x)
+ if (x < 1)
+ fun_l25_n39(x)
+ else
+ fun_l25_n318(x)
+ end
+end
+
+def fun_l24_n254(x)
+ if (x < 1)
+ fun_l25_n79(x)
+ else
+ fun_l25_n195(x)
+ end
+end
+
+def fun_l24_n255(x)
+ if (x < 1)
+ fun_l25_n671(x)
+ else
+ fun_l25_n485(x)
+ end
+end
+
+def fun_l24_n256(x)
+ if (x < 1)
+ fun_l25_n775(x)
+ else
+ fun_l25_n187(x)
+ end
+end
+
+def fun_l24_n257(x)
+ if (x < 1)
+ fun_l25_n150(x)
+ else
+ fun_l25_n740(x)
+ end
+end
+
+def fun_l24_n258(x)
+ if (x < 1)
+ fun_l25_n131(x)
+ else
+ fun_l25_n960(x)
+ end
+end
+
+def fun_l24_n259(x)
+ if (x < 1)
+ fun_l25_n608(x)
+ else
+ fun_l25_n931(x)
+ end
+end
+
+def fun_l24_n260(x)
+ if (x < 1)
+ fun_l25_n846(x)
+ else
+ fun_l25_n278(x)
+ end
+end
+
+def fun_l24_n261(x)
+ if (x < 1)
+ fun_l25_n532(x)
+ else
+ fun_l25_n432(x)
+ end
+end
+
+def fun_l24_n262(x)
+ if (x < 1)
+ fun_l25_n367(x)
+ else
+ fun_l25_n847(x)
+ end
+end
+
+def fun_l24_n263(x)
+ if (x < 1)
+ fun_l25_n782(x)
+ else
+ fun_l25_n33(x)
+ end
+end
+
+def fun_l24_n264(x)
+ if (x < 1)
+ fun_l25_n822(x)
+ else
+ fun_l25_n711(x)
+ end
+end
+
+def fun_l24_n265(x)
+ if (x < 1)
+ fun_l25_n994(x)
+ else
+ fun_l25_n573(x)
+ end
+end
+
+def fun_l24_n266(x)
+ if (x < 1)
+ fun_l25_n234(x)
+ else
+ fun_l25_n617(x)
+ end
+end
+
+def fun_l24_n267(x)
+ if (x < 1)
+ fun_l25_n52(x)
+ else
+ fun_l25_n759(x)
+ end
+end
+
+def fun_l24_n268(x)
+ if (x < 1)
+ fun_l25_n161(x)
+ else
+ fun_l25_n167(x)
+ end
+end
+
+def fun_l24_n269(x)
+ if (x < 1)
+ fun_l25_n113(x)
+ else
+ fun_l25_n158(x)
+ end
+end
+
+def fun_l24_n270(x)
+ if (x < 1)
+ fun_l25_n151(x)
+ else
+ fun_l25_n127(x)
+ end
+end
+
+def fun_l24_n271(x)
+ if (x < 1)
+ fun_l25_n811(x)
+ else
+ fun_l25_n81(x)
+ end
+end
+
+def fun_l24_n272(x)
+ if (x < 1)
+ fun_l25_n622(x)
+ else
+ fun_l25_n796(x)
+ end
+end
+
+def fun_l24_n273(x)
+ if (x < 1)
+ fun_l25_n106(x)
+ else
+ fun_l25_n697(x)
+ end
+end
+
+def fun_l24_n274(x)
+ if (x < 1)
+ fun_l25_n63(x)
+ else
+ fun_l25_n599(x)
+ end
+end
+
+def fun_l24_n275(x)
+ if (x < 1)
+ fun_l25_n999(x)
+ else
+ fun_l25_n188(x)
+ end
+end
+
+def fun_l24_n276(x)
+ if (x < 1)
+ fun_l25_n491(x)
+ else
+ fun_l25_n614(x)
+ end
+end
+
+def fun_l24_n277(x)
+ if (x < 1)
+ fun_l25_n549(x)
+ else
+ fun_l25_n141(x)
+ end
+end
+
+def fun_l24_n278(x)
+ if (x < 1)
+ fun_l25_n442(x)
+ else
+ fun_l25_n900(x)
+ end
+end
+
+def fun_l24_n279(x)
+ if (x < 1)
+ fun_l25_n816(x)
+ else
+ fun_l25_n904(x)
+ end
+end
+
+def fun_l24_n280(x)
+ if (x < 1)
+ fun_l25_n508(x)
+ else
+ fun_l25_n569(x)
+ end
+end
+
+def fun_l24_n281(x)
+ if (x < 1)
+ fun_l25_n438(x)
+ else
+ fun_l25_n750(x)
+ end
+end
+
+def fun_l24_n282(x)
+ if (x < 1)
+ fun_l25_n984(x)
+ else
+ fun_l25_n573(x)
+ end
+end
+
+def fun_l24_n283(x)
+ if (x < 1)
+ fun_l25_n425(x)
+ else
+ fun_l25_n963(x)
+ end
+end
+
+def fun_l24_n284(x)
+ if (x < 1)
+ fun_l25_n213(x)
+ else
+ fun_l25_n344(x)
+ end
+end
+
+def fun_l24_n285(x)
+ if (x < 1)
+ fun_l25_n1(x)
+ else
+ fun_l25_n826(x)
+ end
+end
+
+def fun_l24_n286(x)
+ if (x < 1)
+ fun_l25_n297(x)
+ else
+ fun_l25_n266(x)
+ end
+end
+
+def fun_l24_n287(x)
+ if (x < 1)
+ fun_l25_n203(x)
+ else
+ fun_l25_n570(x)
+ end
+end
+
+def fun_l24_n288(x)
+ if (x < 1)
+ fun_l25_n849(x)
+ else
+ fun_l25_n336(x)
+ end
+end
+
+def fun_l24_n289(x)
+ if (x < 1)
+ fun_l25_n982(x)
+ else
+ fun_l25_n38(x)
+ end
+end
+
+def fun_l24_n290(x)
+ if (x < 1)
+ fun_l25_n687(x)
+ else
+ fun_l25_n906(x)
+ end
+end
+
+def fun_l24_n291(x)
+ if (x < 1)
+ fun_l25_n921(x)
+ else
+ fun_l25_n229(x)
+ end
+end
+
+def fun_l24_n292(x)
+ if (x < 1)
+ fun_l25_n494(x)
+ else
+ fun_l25_n138(x)
+ end
+end
+
+def fun_l24_n293(x)
+ if (x < 1)
+ fun_l25_n175(x)
+ else
+ fun_l25_n575(x)
+ end
+end
+
+def fun_l24_n294(x)
+ if (x < 1)
+ fun_l25_n126(x)
+ else
+ fun_l25_n902(x)
+ end
+end
+
+def fun_l24_n295(x)
+ if (x < 1)
+ fun_l25_n634(x)
+ else
+ fun_l25_n199(x)
+ end
+end
+
+def fun_l24_n296(x)
+ if (x < 1)
+ fun_l25_n929(x)
+ else
+ fun_l25_n468(x)
+ end
+end
+
+def fun_l24_n297(x)
+ if (x < 1)
+ fun_l25_n856(x)
+ else
+ fun_l25_n135(x)
+ end
+end
+
+def fun_l24_n298(x)
+ if (x < 1)
+ fun_l25_n655(x)
+ else
+ fun_l25_n545(x)
+ end
+end
+
+def fun_l24_n299(x)
+ if (x < 1)
+ fun_l25_n373(x)
+ else
+ fun_l25_n173(x)
+ end
+end
+
+def fun_l24_n300(x)
+ if (x < 1)
+ fun_l25_n874(x)
+ else
+ fun_l25_n85(x)
+ end
+end
+
+def fun_l24_n301(x)
+ if (x < 1)
+ fun_l25_n398(x)
+ else
+ fun_l25_n43(x)
+ end
+end
+
+def fun_l24_n302(x)
+ if (x < 1)
+ fun_l25_n995(x)
+ else
+ fun_l25_n890(x)
+ end
+end
+
+def fun_l24_n303(x)
+ if (x < 1)
+ fun_l25_n971(x)
+ else
+ fun_l25_n250(x)
+ end
+end
+
+def fun_l24_n304(x)
+ if (x < 1)
+ fun_l25_n752(x)
+ else
+ fun_l25_n681(x)
+ end
+end
+
+def fun_l24_n305(x)
+ if (x < 1)
+ fun_l25_n688(x)
+ else
+ fun_l25_n451(x)
+ end
+end
+
+def fun_l24_n306(x)
+ if (x < 1)
+ fun_l25_n167(x)
+ else
+ fun_l25_n784(x)
+ end
+end
+
+def fun_l24_n307(x)
+ if (x < 1)
+ fun_l25_n479(x)
+ else
+ fun_l25_n295(x)
+ end
+end
+
+def fun_l24_n308(x)
+ if (x < 1)
+ fun_l25_n779(x)
+ else
+ fun_l25_n472(x)
+ end
+end
+
+def fun_l24_n309(x)
+ if (x < 1)
+ fun_l25_n10(x)
+ else
+ fun_l25_n301(x)
+ end
+end
+
+def fun_l24_n310(x)
+ if (x < 1)
+ fun_l25_n197(x)
+ else
+ fun_l25_n152(x)
+ end
+end
+
+def fun_l24_n311(x)
+ if (x < 1)
+ fun_l25_n300(x)
+ else
+ fun_l25_n105(x)
+ end
+end
+
+def fun_l24_n312(x)
+ if (x < 1)
+ fun_l25_n1(x)
+ else
+ fun_l25_n956(x)
+ end
+end
+
+def fun_l24_n313(x)
+ if (x < 1)
+ fun_l25_n310(x)
+ else
+ fun_l25_n701(x)
+ end
+end
+
+def fun_l24_n314(x)
+ if (x < 1)
+ fun_l25_n0(x)
+ else
+ fun_l25_n58(x)
+ end
+end
+
+def fun_l24_n315(x)
+ if (x < 1)
+ fun_l25_n31(x)
+ else
+ fun_l25_n69(x)
+ end
+end
+
+def fun_l24_n316(x)
+ if (x < 1)
+ fun_l25_n967(x)
+ else
+ fun_l25_n130(x)
+ end
+end
+
+def fun_l24_n317(x)
+ if (x < 1)
+ fun_l25_n995(x)
+ else
+ fun_l25_n630(x)
+ end
+end
+
+def fun_l24_n318(x)
+ if (x < 1)
+ fun_l25_n349(x)
+ else
+ fun_l25_n916(x)
+ end
+end
+
+def fun_l24_n319(x)
+ if (x < 1)
+ fun_l25_n230(x)
+ else
+ fun_l25_n880(x)
+ end
+end
+
+def fun_l24_n320(x)
+ if (x < 1)
+ fun_l25_n452(x)
+ else
+ fun_l25_n316(x)
+ end
+end
+
+def fun_l24_n321(x)
+ if (x < 1)
+ fun_l25_n581(x)
+ else
+ fun_l25_n262(x)
+ end
+end
+
+def fun_l24_n322(x)
+ if (x < 1)
+ fun_l25_n70(x)
+ else
+ fun_l25_n674(x)
+ end
+end
+
+def fun_l24_n323(x)
+ if (x < 1)
+ fun_l25_n726(x)
+ else
+ fun_l25_n943(x)
+ end
+end
+
+def fun_l24_n324(x)
+ if (x < 1)
+ fun_l25_n779(x)
+ else
+ fun_l25_n209(x)
+ end
+end
+
+def fun_l24_n325(x)
+ if (x < 1)
+ fun_l25_n132(x)
+ else
+ fun_l25_n301(x)
+ end
+end
+
+def fun_l24_n326(x)
+ if (x < 1)
+ fun_l25_n255(x)
+ else
+ fun_l25_n154(x)
+ end
+end
+
+def fun_l24_n327(x)
+ if (x < 1)
+ fun_l25_n248(x)
+ else
+ fun_l25_n152(x)
+ end
+end
+
+def fun_l24_n328(x)
+ if (x < 1)
+ fun_l25_n536(x)
+ else
+ fun_l25_n703(x)
+ end
+end
+
+def fun_l24_n329(x)
+ if (x < 1)
+ fun_l25_n744(x)
+ else
+ fun_l25_n133(x)
+ end
+end
+
+def fun_l24_n330(x)
+ if (x < 1)
+ fun_l25_n455(x)
+ else
+ fun_l25_n576(x)
+ end
+end
+
+def fun_l24_n331(x)
+ if (x < 1)
+ fun_l25_n590(x)
+ else
+ fun_l25_n357(x)
+ end
+end
+
+def fun_l24_n332(x)
+ if (x < 1)
+ fun_l25_n151(x)
+ else
+ fun_l25_n969(x)
+ end
+end
+
+def fun_l24_n333(x)
+ if (x < 1)
+ fun_l25_n725(x)
+ else
+ fun_l25_n681(x)
+ end
+end
+
+def fun_l24_n334(x)
+ if (x < 1)
+ fun_l25_n157(x)
+ else
+ fun_l25_n643(x)
+ end
+end
+
+def fun_l24_n335(x)
+ if (x < 1)
+ fun_l25_n42(x)
+ else
+ fun_l25_n749(x)
+ end
+end
+
+def fun_l24_n336(x)
+ if (x < 1)
+ fun_l25_n831(x)
+ else
+ fun_l25_n126(x)
+ end
+end
+
+def fun_l24_n337(x)
+ if (x < 1)
+ fun_l25_n424(x)
+ else
+ fun_l25_n559(x)
+ end
+end
+
+def fun_l24_n338(x)
+ if (x < 1)
+ fun_l25_n897(x)
+ else
+ fun_l25_n89(x)
+ end
+end
+
+def fun_l24_n339(x)
+ if (x < 1)
+ fun_l25_n755(x)
+ else
+ fun_l25_n506(x)
+ end
+end
+
+def fun_l24_n340(x)
+ if (x < 1)
+ fun_l25_n387(x)
+ else
+ fun_l25_n631(x)
+ end
+end
+
+def fun_l24_n341(x)
+ if (x < 1)
+ fun_l25_n694(x)
+ else
+ fun_l25_n707(x)
+ end
+end
+
+def fun_l24_n342(x)
+ if (x < 1)
+ fun_l25_n65(x)
+ else
+ fun_l25_n687(x)
+ end
+end
+
+def fun_l24_n343(x)
+ if (x < 1)
+ fun_l25_n84(x)
+ else
+ fun_l25_n738(x)
+ end
+end
+
+def fun_l24_n344(x)
+ if (x < 1)
+ fun_l25_n729(x)
+ else
+ fun_l25_n639(x)
+ end
+end
+
+def fun_l24_n345(x)
+ if (x < 1)
+ fun_l25_n102(x)
+ else
+ fun_l25_n299(x)
+ end
+end
+
+def fun_l24_n346(x)
+ if (x < 1)
+ fun_l25_n604(x)
+ else
+ fun_l25_n94(x)
+ end
+end
+
+def fun_l24_n347(x)
+ if (x < 1)
+ fun_l25_n93(x)
+ else
+ fun_l25_n975(x)
+ end
+end
+
+def fun_l24_n348(x)
+ if (x < 1)
+ fun_l25_n124(x)
+ else
+ fun_l25_n927(x)
+ end
+end
+
+def fun_l24_n349(x)
+ if (x < 1)
+ fun_l25_n944(x)
+ else
+ fun_l25_n162(x)
+ end
+end
+
+def fun_l24_n350(x)
+ if (x < 1)
+ fun_l25_n623(x)
+ else
+ fun_l25_n5(x)
+ end
+end
+
+def fun_l24_n351(x)
+ if (x < 1)
+ fun_l25_n885(x)
+ else
+ fun_l25_n884(x)
+ end
+end
+
+def fun_l24_n352(x)
+ if (x < 1)
+ fun_l25_n1(x)
+ else
+ fun_l25_n366(x)
+ end
+end
+
+def fun_l24_n353(x)
+ if (x < 1)
+ fun_l25_n240(x)
+ else
+ fun_l25_n630(x)
+ end
+end
+
+def fun_l24_n354(x)
+ if (x < 1)
+ fun_l25_n232(x)
+ else
+ fun_l25_n758(x)
+ end
+end
+
+def fun_l24_n355(x)
+ if (x < 1)
+ fun_l25_n529(x)
+ else
+ fun_l25_n810(x)
+ end
+end
+
+def fun_l24_n356(x)
+ if (x < 1)
+ fun_l25_n438(x)
+ else
+ fun_l25_n146(x)
+ end
+end
+
+def fun_l24_n357(x)
+ if (x < 1)
+ fun_l25_n551(x)
+ else
+ fun_l25_n727(x)
+ end
+end
+
+def fun_l24_n358(x)
+ if (x < 1)
+ fun_l25_n764(x)
+ else
+ fun_l25_n379(x)
+ end
+end
+
+def fun_l24_n359(x)
+ if (x < 1)
+ fun_l25_n89(x)
+ else
+ fun_l25_n518(x)
+ end
+end
+
+def fun_l24_n360(x)
+ if (x < 1)
+ fun_l25_n567(x)
+ else
+ fun_l25_n98(x)
+ end
+end
+
+def fun_l24_n361(x)
+ if (x < 1)
+ fun_l25_n26(x)
+ else
+ fun_l25_n818(x)
+ end
+end
+
+def fun_l24_n362(x)
+ if (x < 1)
+ fun_l25_n205(x)
+ else
+ fun_l25_n460(x)
+ end
+end
+
+def fun_l24_n363(x)
+ if (x < 1)
+ fun_l25_n19(x)
+ else
+ fun_l25_n134(x)
+ end
+end
+
+def fun_l24_n364(x)
+ if (x < 1)
+ fun_l25_n221(x)
+ else
+ fun_l25_n391(x)
+ end
+end
+
+def fun_l24_n365(x)
+ if (x < 1)
+ fun_l25_n546(x)
+ else
+ fun_l25_n62(x)
+ end
+end
+
+def fun_l24_n366(x)
+ if (x < 1)
+ fun_l25_n412(x)
+ else
+ fun_l25_n593(x)
+ end
+end
+
+def fun_l24_n367(x)
+ if (x < 1)
+ fun_l25_n576(x)
+ else
+ fun_l25_n798(x)
+ end
+end
+
+def fun_l24_n368(x)
+ if (x < 1)
+ fun_l25_n528(x)
+ else
+ fun_l25_n575(x)
+ end
+end
+
+def fun_l24_n369(x)
+ if (x < 1)
+ fun_l25_n914(x)
+ else
+ fun_l25_n417(x)
+ end
+end
+
+def fun_l24_n370(x)
+ if (x < 1)
+ fun_l25_n397(x)
+ else
+ fun_l25_n684(x)
+ end
+end
+
+def fun_l24_n371(x)
+ if (x < 1)
+ fun_l25_n827(x)
+ else
+ fun_l25_n677(x)
+ end
+end
+
+def fun_l24_n372(x)
+ if (x < 1)
+ fun_l25_n256(x)
+ else
+ fun_l25_n841(x)
+ end
+end
+
+def fun_l24_n373(x)
+ if (x < 1)
+ fun_l25_n671(x)
+ else
+ fun_l25_n712(x)
+ end
+end
+
+def fun_l24_n374(x)
+ if (x < 1)
+ fun_l25_n696(x)
+ else
+ fun_l25_n598(x)
+ end
+end
+
+def fun_l24_n375(x)
+ if (x < 1)
+ fun_l25_n384(x)
+ else
+ fun_l25_n426(x)
+ end
+end
+
+def fun_l24_n376(x)
+ if (x < 1)
+ fun_l25_n578(x)
+ else
+ fun_l25_n555(x)
+ end
+end
+
+def fun_l24_n377(x)
+ if (x < 1)
+ fun_l25_n290(x)
+ else
+ fun_l25_n480(x)
+ end
+end
+
+def fun_l24_n378(x)
+ if (x < 1)
+ fun_l25_n481(x)
+ else
+ fun_l25_n647(x)
+ end
+end
+
+def fun_l24_n379(x)
+ if (x < 1)
+ fun_l25_n502(x)
+ else
+ fun_l25_n985(x)
+ end
+end
+
+def fun_l24_n380(x)
+ if (x < 1)
+ fun_l25_n275(x)
+ else
+ fun_l25_n575(x)
+ end
+end
+
+def fun_l24_n381(x)
+ if (x < 1)
+ fun_l25_n901(x)
+ else
+ fun_l25_n396(x)
+ end
+end
+
+def fun_l24_n382(x)
+ if (x < 1)
+ fun_l25_n283(x)
+ else
+ fun_l25_n544(x)
+ end
+end
+
+def fun_l24_n383(x)
+ if (x < 1)
+ fun_l25_n192(x)
+ else
+ fun_l25_n953(x)
+ end
+end
+
+def fun_l24_n384(x)
+ if (x < 1)
+ fun_l25_n862(x)
+ else
+ fun_l25_n264(x)
+ end
+end
+
+def fun_l24_n385(x)
+ if (x < 1)
+ fun_l25_n528(x)
+ else
+ fun_l25_n429(x)
+ end
+end
+
+def fun_l24_n386(x)
+ if (x < 1)
+ fun_l25_n29(x)
+ else
+ fun_l25_n831(x)
+ end
+end
+
+def fun_l24_n387(x)
+ if (x < 1)
+ fun_l25_n152(x)
+ else
+ fun_l25_n902(x)
+ end
+end
+
+def fun_l24_n388(x)
+ if (x < 1)
+ fun_l25_n538(x)
+ else
+ fun_l25_n468(x)
+ end
+end
+
+def fun_l24_n389(x)
+ if (x < 1)
+ fun_l25_n772(x)
+ else
+ fun_l25_n105(x)
+ end
+end
+
+def fun_l24_n390(x)
+ if (x < 1)
+ fun_l25_n875(x)
+ else
+ fun_l25_n723(x)
+ end
+end
+
+def fun_l24_n391(x)
+ if (x < 1)
+ fun_l25_n330(x)
+ else
+ fun_l25_n659(x)
+ end
+end
+
+def fun_l24_n392(x)
+ if (x < 1)
+ fun_l25_n168(x)
+ else
+ fun_l25_n68(x)
+ end
+end
+
+def fun_l24_n393(x)
+ if (x < 1)
+ fun_l25_n481(x)
+ else
+ fun_l25_n200(x)
+ end
+end
+
+def fun_l24_n394(x)
+ if (x < 1)
+ fun_l25_n391(x)
+ else
+ fun_l25_n255(x)
+ end
+end
+
+def fun_l24_n395(x)
+ if (x < 1)
+ fun_l25_n383(x)
+ else
+ fun_l25_n250(x)
+ end
+end
+
+def fun_l24_n396(x)
+ if (x < 1)
+ fun_l25_n537(x)
+ else
+ fun_l25_n283(x)
+ end
+end
+
+def fun_l24_n397(x)
+ if (x < 1)
+ fun_l25_n504(x)
+ else
+ fun_l25_n916(x)
+ end
+end
+
+def fun_l24_n398(x)
+ if (x < 1)
+ fun_l25_n992(x)
+ else
+ fun_l25_n504(x)
+ end
+end
+
+def fun_l24_n399(x)
+ if (x < 1)
+ fun_l25_n294(x)
+ else
+ fun_l25_n412(x)
+ end
+end
+
+def fun_l24_n400(x)
+ if (x < 1)
+ fun_l25_n686(x)
+ else
+ fun_l25_n85(x)
+ end
+end
+
+def fun_l24_n401(x)
+ if (x < 1)
+ fun_l25_n874(x)
+ else
+ fun_l25_n980(x)
+ end
+end
+
+def fun_l24_n402(x)
+ if (x < 1)
+ fun_l25_n454(x)
+ else
+ fun_l25_n867(x)
+ end
+end
+
+def fun_l24_n403(x)
+ if (x < 1)
+ fun_l25_n594(x)
+ else
+ fun_l25_n970(x)
+ end
+end
+
+def fun_l24_n404(x)
+ if (x < 1)
+ fun_l25_n281(x)
+ else
+ fun_l25_n881(x)
+ end
+end
+
+def fun_l24_n405(x)
+ if (x < 1)
+ fun_l25_n713(x)
+ else
+ fun_l25_n530(x)
+ end
+end
+
+def fun_l24_n406(x)
+ if (x < 1)
+ fun_l25_n874(x)
+ else
+ fun_l25_n953(x)
+ end
+end
+
+def fun_l24_n407(x)
+ if (x < 1)
+ fun_l25_n569(x)
+ else
+ fun_l25_n991(x)
+ end
+end
+
+def fun_l24_n408(x)
+ if (x < 1)
+ fun_l25_n875(x)
+ else
+ fun_l25_n409(x)
+ end
+end
+
+def fun_l24_n409(x)
+ if (x < 1)
+ fun_l25_n604(x)
+ else
+ fun_l25_n454(x)
+ end
+end
+
+def fun_l24_n410(x)
+ if (x < 1)
+ fun_l25_n267(x)
+ else
+ fun_l25_n100(x)
+ end
+end
+
+def fun_l24_n411(x)
+ if (x < 1)
+ fun_l25_n966(x)
+ else
+ fun_l25_n537(x)
+ end
+end
+
+def fun_l24_n412(x)
+ if (x < 1)
+ fun_l25_n261(x)
+ else
+ fun_l25_n106(x)
+ end
+end
+
+def fun_l24_n413(x)
+ if (x < 1)
+ fun_l25_n869(x)
+ else
+ fun_l25_n890(x)
+ end
+end
+
+def fun_l24_n414(x)
+ if (x < 1)
+ fun_l25_n784(x)
+ else
+ fun_l25_n147(x)
+ end
+end
+
+def fun_l24_n415(x)
+ if (x < 1)
+ fun_l25_n6(x)
+ else
+ fun_l25_n808(x)
+ end
+end
+
+def fun_l24_n416(x)
+ if (x < 1)
+ fun_l25_n940(x)
+ else
+ fun_l25_n680(x)
+ end
+end
+
+def fun_l24_n417(x)
+ if (x < 1)
+ fun_l25_n3(x)
+ else
+ fun_l25_n799(x)
+ end
+end
+
+def fun_l24_n418(x)
+ if (x < 1)
+ fun_l25_n196(x)
+ else
+ fun_l25_n785(x)
+ end
+end
+
+def fun_l24_n419(x)
+ if (x < 1)
+ fun_l25_n786(x)
+ else
+ fun_l25_n607(x)
+ end
+end
+
+def fun_l24_n420(x)
+ if (x < 1)
+ fun_l25_n720(x)
+ else
+ fun_l25_n74(x)
+ end
+end
+
+def fun_l24_n421(x)
+ if (x < 1)
+ fun_l25_n962(x)
+ else
+ fun_l25_n489(x)
+ end
+end
+
+def fun_l24_n422(x)
+ if (x < 1)
+ fun_l25_n231(x)
+ else
+ fun_l25_n878(x)
+ end
+end
+
+def fun_l24_n423(x)
+ if (x < 1)
+ fun_l25_n720(x)
+ else
+ fun_l25_n988(x)
+ end
+end
+
+def fun_l24_n424(x)
+ if (x < 1)
+ fun_l25_n883(x)
+ else
+ fun_l25_n510(x)
+ end
+end
+
+def fun_l24_n425(x)
+ if (x < 1)
+ fun_l25_n443(x)
+ else
+ fun_l25_n533(x)
+ end
+end
+
+def fun_l24_n426(x)
+ if (x < 1)
+ fun_l25_n541(x)
+ else
+ fun_l25_n747(x)
+ end
+end
+
+def fun_l24_n427(x)
+ if (x < 1)
+ fun_l25_n308(x)
+ else
+ fun_l25_n373(x)
+ end
+end
+
+def fun_l24_n428(x)
+ if (x < 1)
+ fun_l25_n484(x)
+ else
+ fun_l25_n632(x)
+ end
+end
+
+def fun_l24_n429(x)
+ if (x < 1)
+ fun_l25_n777(x)
+ else
+ fun_l25_n128(x)
+ end
+end
+
+def fun_l24_n430(x)
+ if (x < 1)
+ fun_l25_n729(x)
+ else
+ fun_l25_n644(x)
+ end
+end
+
+def fun_l24_n431(x)
+ if (x < 1)
+ fun_l25_n330(x)
+ else
+ fun_l25_n947(x)
+ end
+end
+
+def fun_l24_n432(x)
+ if (x < 1)
+ fun_l25_n929(x)
+ else
+ fun_l25_n80(x)
+ end
+end
+
+def fun_l24_n433(x)
+ if (x < 1)
+ fun_l25_n269(x)
+ else
+ fun_l25_n307(x)
+ end
+end
+
+def fun_l24_n434(x)
+ if (x < 1)
+ fun_l25_n824(x)
+ else
+ fun_l25_n451(x)
+ end
+end
+
+def fun_l24_n435(x)
+ if (x < 1)
+ fun_l25_n93(x)
+ else
+ fun_l25_n198(x)
+ end
+end
+
+def fun_l24_n436(x)
+ if (x < 1)
+ fun_l25_n359(x)
+ else
+ fun_l25_n412(x)
+ end
+end
+
+def fun_l24_n437(x)
+ if (x < 1)
+ fun_l25_n427(x)
+ else
+ fun_l25_n321(x)
+ end
+end
+
+def fun_l24_n438(x)
+ if (x < 1)
+ fun_l25_n765(x)
+ else
+ fun_l25_n223(x)
+ end
+end
+
+def fun_l24_n439(x)
+ if (x < 1)
+ fun_l25_n918(x)
+ else
+ fun_l25_n902(x)
+ end
+end
+
+def fun_l24_n440(x)
+ if (x < 1)
+ fun_l25_n320(x)
+ else
+ fun_l25_n428(x)
+ end
+end
+
+def fun_l24_n441(x)
+ if (x < 1)
+ fun_l25_n159(x)
+ else
+ fun_l25_n857(x)
+ end
+end
+
+def fun_l24_n442(x)
+ if (x < 1)
+ fun_l25_n505(x)
+ else
+ fun_l25_n565(x)
+ end
+end
+
+def fun_l24_n443(x)
+ if (x < 1)
+ fun_l25_n214(x)
+ else
+ fun_l25_n861(x)
+ end
+end
+
+def fun_l24_n444(x)
+ if (x < 1)
+ fun_l25_n185(x)
+ else
+ fun_l25_n255(x)
+ end
+end
+
+def fun_l24_n445(x)
+ if (x < 1)
+ fun_l25_n198(x)
+ else
+ fun_l25_n314(x)
+ end
+end
+
+def fun_l24_n446(x)
+ if (x < 1)
+ fun_l25_n334(x)
+ else
+ fun_l25_n633(x)
+ end
+end
+
+def fun_l24_n447(x)
+ if (x < 1)
+ fun_l25_n972(x)
+ else
+ fun_l25_n671(x)
+ end
+end
+
+def fun_l24_n448(x)
+ if (x < 1)
+ fun_l25_n608(x)
+ else
+ fun_l25_n720(x)
+ end
+end
+
+def fun_l24_n449(x)
+ if (x < 1)
+ fun_l25_n71(x)
+ else
+ fun_l25_n479(x)
+ end
+end
+
+def fun_l24_n450(x)
+ if (x < 1)
+ fun_l25_n689(x)
+ else
+ fun_l25_n716(x)
+ end
+end
+
+def fun_l24_n451(x)
+ if (x < 1)
+ fun_l25_n696(x)
+ else
+ fun_l25_n453(x)
+ end
+end
+
+def fun_l24_n452(x)
+ if (x < 1)
+ fun_l25_n804(x)
+ else
+ fun_l25_n508(x)
+ end
+end
+
+def fun_l24_n453(x)
+ if (x < 1)
+ fun_l25_n32(x)
+ else
+ fun_l25_n180(x)
+ end
+end
+
+def fun_l24_n454(x)
+ if (x < 1)
+ fun_l25_n493(x)
+ else
+ fun_l25_n200(x)
+ end
+end
+
+def fun_l24_n455(x)
+ if (x < 1)
+ fun_l25_n763(x)
+ else
+ fun_l25_n362(x)
+ end
+end
+
+def fun_l24_n456(x)
+ if (x < 1)
+ fun_l25_n488(x)
+ else
+ fun_l25_n202(x)
+ end
+end
+
+def fun_l24_n457(x)
+ if (x < 1)
+ fun_l25_n752(x)
+ else
+ fun_l25_n670(x)
+ end
+end
+
+def fun_l24_n458(x)
+ if (x < 1)
+ fun_l25_n462(x)
+ else
+ fun_l25_n457(x)
+ end
+end
+
+def fun_l24_n459(x)
+ if (x < 1)
+ fun_l25_n266(x)
+ else
+ fun_l25_n455(x)
+ end
+end
+
+def fun_l24_n460(x)
+ if (x < 1)
+ fun_l25_n173(x)
+ else
+ fun_l25_n873(x)
+ end
+end
+
+def fun_l24_n461(x)
+ if (x < 1)
+ fun_l25_n127(x)
+ else
+ fun_l25_n213(x)
+ end
+end
+
+def fun_l24_n462(x)
+ if (x < 1)
+ fun_l25_n579(x)
+ else
+ fun_l25_n44(x)
+ end
+end
+
+def fun_l24_n463(x)
+ if (x < 1)
+ fun_l25_n68(x)
+ else
+ fun_l25_n989(x)
+ end
+end
+
+def fun_l24_n464(x)
+ if (x < 1)
+ fun_l25_n826(x)
+ else
+ fun_l25_n883(x)
+ end
+end
+
+def fun_l24_n465(x)
+ if (x < 1)
+ fun_l25_n855(x)
+ else
+ fun_l25_n131(x)
+ end
+end
+
+def fun_l24_n466(x)
+ if (x < 1)
+ fun_l25_n923(x)
+ else
+ fun_l25_n433(x)
+ end
+end
+
+def fun_l24_n467(x)
+ if (x < 1)
+ fun_l25_n84(x)
+ else
+ fun_l25_n648(x)
+ end
+end
+
+def fun_l24_n468(x)
+ if (x < 1)
+ fun_l25_n53(x)
+ else
+ fun_l25_n766(x)
+ end
+end
+
+def fun_l24_n469(x)
+ if (x < 1)
+ fun_l25_n689(x)
+ else
+ fun_l25_n201(x)
+ end
+end
+
+def fun_l24_n470(x)
+ if (x < 1)
+ fun_l25_n361(x)
+ else
+ fun_l25_n459(x)
+ end
+end
+
+def fun_l24_n471(x)
+ if (x < 1)
+ fun_l25_n550(x)
+ else
+ fun_l25_n522(x)
+ end
+end
+
+def fun_l24_n472(x)
+ if (x < 1)
+ fun_l25_n128(x)
+ else
+ fun_l25_n417(x)
+ end
+end
+
+def fun_l24_n473(x)
+ if (x < 1)
+ fun_l25_n600(x)
+ else
+ fun_l25_n137(x)
+ end
+end
+
+def fun_l24_n474(x)
+ if (x < 1)
+ fun_l25_n72(x)
+ else
+ fun_l25_n548(x)
+ end
+end
+
+def fun_l24_n475(x)
+ if (x < 1)
+ fun_l25_n879(x)
+ else
+ fun_l25_n376(x)
+ end
+end
+
+def fun_l24_n476(x)
+ if (x < 1)
+ fun_l25_n822(x)
+ else
+ fun_l25_n695(x)
+ end
+end
+
+def fun_l24_n477(x)
+ if (x < 1)
+ fun_l25_n991(x)
+ else
+ fun_l25_n208(x)
+ end
+end
+
+def fun_l24_n478(x)
+ if (x < 1)
+ fun_l25_n17(x)
+ else
+ fun_l25_n332(x)
+ end
+end
+
+def fun_l24_n479(x)
+ if (x < 1)
+ fun_l25_n353(x)
+ else
+ fun_l25_n438(x)
+ end
+end
+
+def fun_l24_n480(x)
+ if (x < 1)
+ fun_l25_n109(x)
+ else
+ fun_l25_n360(x)
+ end
+end
+
+def fun_l24_n481(x)
+ if (x < 1)
+ fun_l25_n57(x)
+ else
+ fun_l25_n417(x)
+ end
+end
+
+def fun_l24_n482(x)
+ if (x < 1)
+ fun_l25_n903(x)
+ else
+ fun_l25_n486(x)
+ end
+end
+
+def fun_l24_n483(x)
+ if (x < 1)
+ fun_l25_n677(x)
+ else
+ fun_l25_n77(x)
+ end
+end
+
+def fun_l24_n484(x)
+ if (x < 1)
+ fun_l25_n117(x)
+ else
+ fun_l25_n582(x)
+ end
+end
+
+def fun_l24_n485(x)
+ if (x < 1)
+ fun_l25_n454(x)
+ else
+ fun_l25_n198(x)
+ end
+end
+
+def fun_l24_n486(x)
+ if (x < 1)
+ fun_l25_n779(x)
+ else
+ fun_l25_n301(x)
+ end
+end
+
+def fun_l24_n487(x)
+ if (x < 1)
+ fun_l25_n3(x)
+ else
+ fun_l25_n363(x)
+ end
+end
+
+def fun_l24_n488(x)
+ if (x < 1)
+ fun_l25_n84(x)
+ else
+ fun_l25_n793(x)
+ end
+end
+
+def fun_l24_n489(x)
+ if (x < 1)
+ fun_l25_n344(x)
+ else
+ fun_l25_n342(x)
+ end
+end
+
+def fun_l24_n490(x)
+ if (x < 1)
+ fun_l25_n365(x)
+ else
+ fun_l25_n546(x)
+ end
+end
+
+def fun_l24_n491(x)
+ if (x < 1)
+ fun_l25_n431(x)
+ else
+ fun_l25_n193(x)
+ end
+end
+
+def fun_l24_n492(x)
+ if (x < 1)
+ fun_l25_n763(x)
+ else
+ fun_l25_n174(x)
+ end
+end
+
+def fun_l24_n493(x)
+ if (x < 1)
+ fun_l25_n231(x)
+ else
+ fun_l25_n435(x)
+ end
+end
+
+def fun_l24_n494(x)
+ if (x < 1)
+ fun_l25_n408(x)
+ else
+ fun_l25_n848(x)
+ end
+end
+
+def fun_l24_n495(x)
+ if (x < 1)
+ fun_l25_n955(x)
+ else
+ fun_l25_n232(x)
+ end
+end
+
+def fun_l24_n496(x)
+ if (x < 1)
+ fun_l25_n72(x)
+ else
+ fun_l25_n11(x)
+ end
+end
+
+def fun_l24_n497(x)
+ if (x < 1)
+ fun_l25_n196(x)
+ else
+ fun_l25_n180(x)
+ end
+end
+
+def fun_l24_n498(x)
+ if (x < 1)
+ fun_l25_n102(x)
+ else
+ fun_l25_n360(x)
+ end
+end
+
+def fun_l24_n499(x)
+ if (x < 1)
+ fun_l25_n755(x)
+ else
+ fun_l25_n760(x)
+ end
+end
+
+def fun_l24_n500(x)
+ if (x < 1)
+ fun_l25_n676(x)
+ else
+ fun_l25_n825(x)
+ end
+end
+
+def fun_l24_n501(x)
+ if (x < 1)
+ fun_l25_n203(x)
+ else
+ fun_l25_n731(x)
+ end
+end
+
+def fun_l24_n502(x)
+ if (x < 1)
+ fun_l25_n551(x)
+ else
+ fun_l25_n165(x)
+ end
+end
+
+def fun_l24_n503(x)
+ if (x < 1)
+ fun_l25_n702(x)
+ else
+ fun_l25_n779(x)
+ end
+end
+
+def fun_l24_n504(x)
+ if (x < 1)
+ fun_l25_n525(x)
+ else
+ fun_l25_n846(x)
+ end
+end
+
+def fun_l24_n505(x)
+ if (x < 1)
+ fun_l25_n97(x)
+ else
+ fun_l25_n331(x)
+ end
+end
+
+def fun_l24_n506(x)
+ if (x < 1)
+ fun_l25_n572(x)
+ else
+ fun_l25_n759(x)
+ end
+end
+
+def fun_l24_n507(x)
+ if (x < 1)
+ fun_l25_n402(x)
+ else
+ fun_l25_n460(x)
+ end
+end
+
+def fun_l24_n508(x)
+ if (x < 1)
+ fun_l25_n640(x)
+ else
+ fun_l25_n833(x)
+ end
+end
+
+def fun_l24_n509(x)
+ if (x < 1)
+ fun_l25_n190(x)
+ else
+ fun_l25_n524(x)
+ end
+end
+
+def fun_l24_n510(x)
+ if (x < 1)
+ fun_l25_n307(x)
+ else
+ fun_l25_n92(x)
+ end
+end
+
+def fun_l24_n511(x)
+ if (x < 1)
+ fun_l25_n444(x)
+ else
+ fun_l25_n593(x)
+ end
+end
+
+def fun_l24_n512(x)
+ if (x < 1)
+ fun_l25_n684(x)
+ else
+ fun_l25_n163(x)
+ end
+end
+
+def fun_l24_n513(x)
+ if (x < 1)
+ fun_l25_n998(x)
+ else
+ fun_l25_n582(x)
+ end
+end
+
+def fun_l24_n514(x)
+ if (x < 1)
+ fun_l25_n767(x)
+ else
+ fun_l25_n557(x)
+ end
+end
+
+def fun_l24_n515(x)
+ if (x < 1)
+ fun_l25_n893(x)
+ else
+ fun_l25_n179(x)
+ end
+end
+
+def fun_l24_n516(x)
+ if (x < 1)
+ fun_l25_n726(x)
+ else
+ fun_l25_n651(x)
+ end
+end
+
+def fun_l24_n517(x)
+ if (x < 1)
+ fun_l25_n57(x)
+ else
+ fun_l25_n454(x)
+ end
+end
+
+def fun_l24_n518(x)
+ if (x < 1)
+ fun_l25_n598(x)
+ else
+ fun_l25_n554(x)
+ end
+end
+
+def fun_l24_n519(x)
+ if (x < 1)
+ fun_l25_n437(x)
+ else
+ fun_l25_n349(x)
+ end
+end
+
+def fun_l24_n520(x)
+ if (x < 1)
+ fun_l25_n754(x)
+ else
+ fun_l25_n259(x)
+ end
+end
+
+def fun_l24_n521(x)
+ if (x < 1)
+ fun_l25_n856(x)
+ else
+ fun_l25_n155(x)
+ end
+end
+
+def fun_l24_n522(x)
+ if (x < 1)
+ fun_l25_n607(x)
+ else
+ fun_l25_n751(x)
+ end
+end
+
+def fun_l24_n523(x)
+ if (x < 1)
+ fun_l25_n510(x)
+ else
+ fun_l25_n297(x)
+ end
+end
+
+def fun_l24_n524(x)
+ if (x < 1)
+ fun_l25_n433(x)
+ else
+ fun_l25_n102(x)
+ end
+end
+
+def fun_l24_n525(x)
+ if (x < 1)
+ fun_l25_n173(x)
+ else
+ fun_l25_n487(x)
+ end
+end
+
+def fun_l24_n526(x)
+ if (x < 1)
+ fun_l25_n716(x)
+ else
+ fun_l25_n230(x)
+ end
+end
+
+def fun_l24_n527(x)
+ if (x < 1)
+ fun_l25_n511(x)
+ else
+ fun_l25_n272(x)
+ end
+end
+
+def fun_l24_n528(x)
+ if (x < 1)
+ fun_l25_n974(x)
+ else
+ fun_l25_n954(x)
+ end
+end
+
+def fun_l24_n529(x)
+ if (x < 1)
+ fun_l25_n92(x)
+ else
+ fun_l25_n704(x)
+ end
+end
+
+def fun_l24_n530(x)
+ if (x < 1)
+ fun_l25_n117(x)
+ else
+ fun_l25_n725(x)
+ end
+end
+
+def fun_l24_n531(x)
+ if (x < 1)
+ fun_l25_n817(x)
+ else
+ fun_l25_n6(x)
+ end
+end
+
+def fun_l24_n532(x)
+ if (x < 1)
+ fun_l25_n27(x)
+ else
+ fun_l25_n438(x)
+ end
+end
+
+def fun_l24_n533(x)
+ if (x < 1)
+ fun_l25_n964(x)
+ else
+ fun_l25_n291(x)
+ end
+end
+
+def fun_l24_n534(x)
+ if (x < 1)
+ fun_l25_n786(x)
+ else
+ fun_l25_n871(x)
+ end
+end
+
+def fun_l24_n535(x)
+ if (x < 1)
+ fun_l25_n79(x)
+ else
+ fun_l25_n786(x)
+ end
+end
+
+def fun_l24_n536(x)
+ if (x < 1)
+ fun_l25_n403(x)
+ else
+ fun_l25_n78(x)
+ end
+end
+
+def fun_l24_n537(x)
+ if (x < 1)
+ fun_l25_n20(x)
+ else
+ fun_l25_n239(x)
+ end
+end
+
+def fun_l24_n538(x)
+ if (x < 1)
+ fun_l25_n818(x)
+ else
+ fun_l25_n917(x)
+ end
+end
+
+def fun_l24_n539(x)
+ if (x < 1)
+ fun_l25_n598(x)
+ else
+ fun_l25_n708(x)
+ end
+end
+
+def fun_l24_n540(x)
+ if (x < 1)
+ fun_l25_n802(x)
+ else
+ fun_l25_n208(x)
+ end
+end
+
+def fun_l24_n541(x)
+ if (x < 1)
+ fun_l25_n962(x)
+ else
+ fun_l25_n487(x)
+ end
+end
+
+def fun_l24_n542(x)
+ if (x < 1)
+ fun_l25_n690(x)
+ else
+ fun_l25_n503(x)
+ end
+end
+
+def fun_l24_n543(x)
+ if (x < 1)
+ fun_l25_n548(x)
+ else
+ fun_l25_n295(x)
+ end
+end
+
+def fun_l24_n544(x)
+ if (x < 1)
+ fun_l25_n373(x)
+ else
+ fun_l25_n896(x)
+ end
+end
+
+def fun_l24_n545(x)
+ if (x < 1)
+ fun_l25_n759(x)
+ else
+ fun_l25_n171(x)
+ end
+end
+
+def fun_l24_n546(x)
+ if (x < 1)
+ fun_l25_n269(x)
+ else
+ fun_l25_n153(x)
+ end
+end
+
+def fun_l24_n547(x)
+ if (x < 1)
+ fun_l25_n489(x)
+ else
+ fun_l25_n628(x)
+ end
+end
+
+def fun_l24_n548(x)
+ if (x < 1)
+ fun_l25_n540(x)
+ else
+ fun_l25_n7(x)
+ end
+end
+
+def fun_l24_n549(x)
+ if (x < 1)
+ fun_l25_n916(x)
+ else
+ fun_l25_n365(x)
+ end
+end
+
+def fun_l24_n550(x)
+ if (x < 1)
+ fun_l25_n377(x)
+ else
+ fun_l25_n420(x)
+ end
+end
+
+def fun_l24_n551(x)
+ if (x < 1)
+ fun_l25_n331(x)
+ else
+ fun_l25_n568(x)
+ end
+end
+
+def fun_l24_n552(x)
+ if (x < 1)
+ fun_l25_n348(x)
+ else
+ fun_l25_n934(x)
+ end
+end
+
+def fun_l24_n553(x)
+ if (x < 1)
+ fun_l25_n676(x)
+ else
+ fun_l25_n142(x)
+ end
+end
+
+def fun_l24_n554(x)
+ if (x < 1)
+ fun_l25_n913(x)
+ else
+ fun_l25_n255(x)
+ end
+end
+
+def fun_l24_n555(x)
+ if (x < 1)
+ fun_l25_n873(x)
+ else
+ fun_l25_n951(x)
+ end
+end
+
+def fun_l24_n556(x)
+ if (x < 1)
+ fun_l25_n300(x)
+ else
+ fun_l25_n969(x)
+ end
+end
+
+def fun_l24_n557(x)
+ if (x < 1)
+ fun_l25_n674(x)
+ else
+ fun_l25_n290(x)
+ end
+end
+
+def fun_l24_n558(x)
+ if (x < 1)
+ fun_l25_n323(x)
+ else
+ fun_l25_n325(x)
+ end
+end
+
+def fun_l24_n559(x)
+ if (x < 1)
+ fun_l25_n547(x)
+ else
+ fun_l25_n207(x)
+ end
+end
+
+def fun_l24_n560(x)
+ if (x < 1)
+ fun_l25_n858(x)
+ else
+ fun_l25_n304(x)
+ end
+end
+
+def fun_l24_n561(x)
+ if (x < 1)
+ fun_l25_n831(x)
+ else
+ fun_l25_n840(x)
+ end
+end
+
+def fun_l24_n562(x)
+ if (x < 1)
+ fun_l25_n174(x)
+ else
+ fun_l25_n162(x)
+ end
+end
+
+def fun_l24_n563(x)
+ if (x < 1)
+ fun_l25_n662(x)
+ else
+ fun_l25_n676(x)
+ end
+end
+
+def fun_l24_n564(x)
+ if (x < 1)
+ fun_l25_n474(x)
+ else
+ fun_l25_n173(x)
+ end
+end
+
+def fun_l24_n565(x)
+ if (x < 1)
+ fun_l25_n232(x)
+ else
+ fun_l25_n57(x)
+ end
+end
+
+def fun_l24_n566(x)
+ if (x < 1)
+ fun_l25_n615(x)
+ else
+ fun_l25_n944(x)
+ end
+end
+
+def fun_l24_n567(x)
+ if (x < 1)
+ fun_l25_n586(x)
+ else
+ fun_l25_n183(x)
+ end
+end
+
+def fun_l24_n568(x)
+ if (x < 1)
+ fun_l25_n758(x)
+ else
+ fun_l25_n376(x)
+ end
+end
+
+def fun_l24_n569(x)
+ if (x < 1)
+ fun_l25_n755(x)
+ else
+ fun_l25_n903(x)
+ end
+end
+
+def fun_l24_n570(x)
+ if (x < 1)
+ fun_l25_n562(x)
+ else
+ fun_l25_n843(x)
+ end
+end
+
+def fun_l24_n571(x)
+ if (x < 1)
+ fun_l25_n369(x)
+ else
+ fun_l25_n712(x)
+ end
+end
+
+def fun_l24_n572(x)
+ if (x < 1)
+ fun_l25_n183(x)
+ else
+ fun_l25_n273(x)
+ end
+end
+
+def fun_l24_n573(x)
+ if (x < 1)
+ fun_l25_n150(x)
+ else
+ fun_l25_n309(x)
+ end
+end
+
+def fun_l24_n574(x)
+ if (x < 1)
+ fun_l25_n485(x)
+ else
+ fun_l25_n20(x)
+ end
+end
+
+def fun_l24_n575(x)
+ if (x < 1)
+ fun_l25_n325(x)
+ else
+ fun_l25_n770(x)
+ end
+end
+
+def fun_l24_n576(x)
+ if (x < 1)
+ fun_l25_n528(x)
+ else
+ fun_l25_n529(x)
+ end
+end
+
+def fun_l24_n577(x)
+ if (x < 1)
+ fun_l25_n557(x)
+ else
+ fun_l25_n416(x)
+ end
+end
+
+def fun_l24_n578(x)
+ if (x < 1)
+ fun_l25_n501(x)
+ else
+ fun_l25_n81(x)
+ end
+end
+
+def fun_l24_n579(x)
+ if (x < 1)
+ fun_l25_n355(x)
+ else
+ fun_l25_n391(x)
+ end
+end
+
+def fun_l24_n580(x)
+ if (x < 1)
+ fun_l25_n665(x)
+ else
+ fun_l25_n656(x)
+ end
+end
+
+def fun_l24_n581(x)
+ if (x < 1)
+ fun_l25_n496(x)
+ else
+ fun_l25_n933(x)
+ end
+end
+
+def fun_l24_n582(x)
+ if (x < 1)
+ fun_l25_n71(x)
+ else
+ fun_l25_n815(x)
+ end
+end
+
+def fun_l24_n583(x)
+ if (x < 1)
+ fun_l25_n488(x)
+ else
+ fun_l25_n587(x)
+ end
+end
+
+def fun_l24_n584(x)
+ if (x < 1)
+ fun_l25_n909(x)
+ else
+ fun_l25_n673(x)
+ end
+end
+
+def fun_l24_n585(x)
+ if (x < 1)
+ fun_l25_n452(x)
+ else
+ fun_l25_n774(x)
+ end
+end
+
+def fun_l24_n586(x)
+ if (x < 1)
+ fun_l25_n376(x)
+ else
+ fun_l25_n855(x)
+ end
+end
+
+def fun_l24_n587(x)
+ if (x < 1)
+ fun_l25_n452(x)
+ else
+ fun_l25_n331(x)
+ end
+end
+
+def fun_l24_n588(x)
+ if (x < 1)
+ fun_l25_n718(x)
+ else
+ fun_l25_n496(x)
+ end
+end
+
+def fun_l24_n589(x)
+ if (x < 1)
+ fun_l25_n923(x)
+ else
+ fun_l25_n633(x)
+ end
+end
+
+def fun_l24_n590(x)
+ if (x < 1)
+ fun_l25_n815(x)
+ else
+ fun_l25_n633(x)
+ end
+end
+
+def fun_l24_n591(x)
+ if (x < 1)
+ fun_l25_n699(x)
+ else
+ fun_l25_n609(x)
+ end
+end
+
+def fun_l24_n592(x)
+ if (x < 1)
+ fun_l25_n722(x)
+ else
+ fun_l25_n884(x)
+ end
+end
+
+def fun_l24_n593(x)
+ if (x < 1)
+ fun_l25_n580(x)
+ else
+ fun_l25_n48(x)
+ end
+end
+
+def fun_l24_n594(x)
+ if (x < 1)
+ fun_l25_n245(x)
+ else
+ fun_l25_n126(x)
+ end
+end
+
+def fun_l24_n595(x)
+ if (x < 1)
+ fun_l25_n778(x)
+ else
+ fun_l25_n989(x)
+ end
+end
+
+def fun_l24_n596(x)
+ if (x < 1)
+ fun_l25_n813(x)
+ else
+ fun_l25_n117(x)
+ end
+end
+
+def fun_l24_n597(x)
+ if (x < 1)
+ fun_l25_n622(x)
+ else
+ fun_l25_n293(x)
+ end
+end
+
+def fun_l24_n598(x)
+ if (x < 1)
+ fun_l25_n996(x)
+ else
+ fun_l25_n704(x)
+ end
+end
+
+def fun_l24_n599(x)
+ if (x < 1)
+ fun_l25_n173(x)
+ else
+ fun_l25_n336(x)
+ end
+end
+
+def fun_l24_n600(x)
+ if (x < 1)
+ fun_l25_n295(x)
+ else
+ fun_l25_n293(x)
+ end
+end
+
+def fun_l24_n601(x)
+ if (x < 1)
+ fun_l25_n104(x)
+ else
+ fun_l25_n907(x)
+ end
+end
+
+def fun_l24_n602(x)
+ if (x < 1)
+ fun_l25_n136(x)
+ else
+ fun_l25_n915(x)
+ end
+end
+
+def fun_l24_n603(x)
+ if (x < 1)
+ fun_l25_n19(x)
+ else
+ fun_l25_n113(x)
+ end
+end
+
+def fun_l24_n604(x)
+ if (x < 1)
+ fun_l25_n389(x)
+ else
+ fun_l25_n863(x)
+ end
+end
+
+def fun_l24_n605(x)
+ if (x < 1)
+ fun_l25_n20(x)
+ else
+ fun_l25_n830(x)
+ end
+end
+
+def fun_l24_n606(x)
+ if (x < 1)
+ fun_l25_n723(x)
+ else
+ fun_l25_n956(x)
+ end
+end
+
+def fun_l24_n607(x)
+ if (x < 1)
+ fun_l25_n765(x)
+ else
+ fun_l25_n27(x)
+ end
+end
+
+def fun_l24_n608(x)
+ if (x < 1)
+ fun_l25_n682(x)
+ else
+ fun_l25_n953(x)
+ end
+end
+
+def fun_l24_n609(x)
+ if (x < 1)
+ fun_l25_n501(x)
+ else
+ fun_l25_n81(x)
+ end
+end
+
+def fun_l24_n610(x)
+ if (x < 1)
+ fun_l25_n896(x)
+ else
+ fun_l25_n192(x)
+ end
+end
+
+def fun_l24_n611(x)
+ if (x < 1)
+ fun_l25_n605(x)
+ else
+ fun_l25_n443(x)
+ end
+end
+
+def fun_l24_n612(x)
+ if (x < 1)
+ fun_l25_n298(x)
+ else
+ fun_l25_n818(x)
+ end
+end
+
+def fun_l24_n613(x)
+ if (x < 1)
+ fun_l25_n289(x)
+ else
+ fun_l25_n227(x)
+ end
+end
+
+def fun_l24_n614(x)
+ if (x < 1)
+ fun_l25_n511(x)
+ else
+ fun_l25_n460(x)
+ end
+end
+
+def fun_l24_n615(x)
+ if (x < 1)
+ fun_l25_n774(x)
+ else
+ fun_l25_n794(x)
+ end
+end
+
+def fun_l24_n616(x)
+ if (x < 1)
+ fun_l25_n933(x)
+ else
+ fun_l25_n448(x)
+ end
+end
+
+def fun_l24_n617(x)
+ if (x < 1)
+ fun_l25_n239(x)
+ else
+ fun_l25_n156(x)
+ end
+end
+
+def fun_l24_n618(x)
+ if (x < 1)
+ fun_l25_n713(x)
+ else
+ fun_l25_n337(x)
+ end
+end
+
+def fun_l24_n619(x)
+ if (x < 1)
+ fun_l25_n450(x)
+ else
+ fun_l25_n282(x)
+ end
+end
+
+def fun_l24_n620(x)
+ if (x < 1)
+ fun_l25_n97(x)
+ else
+ fun_l25_n360(x)
+ end
+end
+
+def fun_l24_n621(x)
+ if (x < 1)
+ fun_l25_n197(x)
+ else
+ fun_l25_n406(x)
+ end
+end
+
+def fun_l24_n622(x)
+ if (x < 1)
+ fun_l25_n791(x)
+ else
+ fun_l25_n876(x)
+ end
+end
+
+def fun_l24_n623(x)
+ if (x < 1)
+ fun_l25_n989(x)
+ else
+ fun_l25_n616(x)
+ end
+end
+
+def fun_l24_n624(x)
+ if (x < 1)
+ fun_l25_n754(x)
+ else
+ fun_l25_n605(x)
+ end
+end
+
+def fun_l24_n625(x)
+ if (x < 1)
+ fun_l25_n113(x)
+ else
+ fun_l25_n400(x)
+ end
+end
+
+def fun_l24_n626(x)
+ if (x < 1)
+ fun_l25_n6(x)
+ else
+ fun_l25_n742(x)
+ end
+end
+
+def fun_l24_n627(x)
+ if (x < 1)
+ fun_l25_n916(x)
+ else
+ fun_l25_n5(x)
+ end
+end
+
+def fun_l24_n628(x)
+ if (x < 1)
+ fun_l25_n5(x)
+ else
+ fun_l25_n327(x)
+ end
+end
+
+def fun_l24_n629(x)
+ if (x < 1)
+ fun_l25_n867(x)
+ else
+ fun_l25_n37(x)
+ end
+end
+
+def fun_l24_n630(x)
+ if (x < 1)
+ fun_l25_n409(x)
+ else
+ fun_l25_n137(x)
+ end
+end
+
+def fun_l24_n631(x)
+ if (x < 1)
+ fun_l25_n128(x)
+ else
+ fun_l25_n499(x)
+ end
+end
+
+def fun_l24_n632(x)
+ if (x < 1)
+ fun_l25_n694(x)
+ else
+ fun_l25_n983(x)
+ end
+end
+
+def fun_l24_n633(x)
+ if (x < 1)
+ fun_l25_n62(x)
+ else
+ fun_l25_n538(x)
+ end
+end
+
+def fun_l24_n634(x)
+ if (x < 1)
+ fun_l25_n740(x)
+ else
+ fun_l25_n795(x)
+ end
+end
+
+def fun_l24_n635(x)
+ if (x < 1)
+ fun_l25_n597(x)
+ else
+ fun_l25_n557(x)
+ end
+end
+
+def fun_l24_n636(x)
+ if (x < 1)
+ fun_l25_n642(x)
+ else
+ fun_l25_n40(x)
+ end
+end
+
+def fun_l24_n637(x)
+ if (x < 1)
+ fun_l25_n303(x)
+ else
+ fun_l25_n931(x)
+ end
+end
+
+def fun_l24_n638(x)
+ if (x < 1)
+ fun_l25_n977(x)
+ else
+ fun_l25_n848(x)
+ end
+end
+
+def fun_l24_n639(x)
+ if (x < 1)
+ fun_l25_n983(x)
+ else
+ fun_l25_n11(x)
+ end
+end
+
+def fun_l24_n640(x)
+ if (x < 1)
+ fun_l25_n258(x)
+ else
+ fun_l25_n280(x)
+ end
+end
+
+def fun_l24_n641(x)
+ if (x < 1)
+ fun_l25_n553(x)
+ else
+ fun_l25_n351(x)
+ end
+end
+
+def fun_l24_n642(x)
+ if (x < 1)
+ fun_l25_n4(x)
+ else
+ fun_l25_n375(x)
+ end
+end
+
+def fun_l24_n643(x)
+ if (x < 1)
+ fun_l25_n678(x)
+ else
+ fun_l25_n139(x)
+ end
+end
+
+def fun_l24_n644(x)
+ if (x < 1)
+ fun_l25_n193(x)
+ else
+ fun_l25_n490(x)
+ end
+end
+
+def fun_l24_n645(x)
+ if (x < 1)
+ fun_l25_n146(x)
+ else
+ fun_l25_n450(x)
+ end
+end
+
+def fun_l24_n646(x)
+ if (x < 1)
+ fun_l25_n813(x)
+ else
+ fun_l25_n59(x)
+ end
+end
+
+def fun_l24_n647(x)
+ if (x < 1)
+ fun_l25_n726(x)
+ else
+ fun_l25_n792(x)
+ end
+end
+
+def fun_l24_n648(x)
+ if (x < 1)
+ fun_l25_n508(x)
+ else
+ fun_l25_n496(x)
+ end
+end
+
+def fun_l24_n649(x)
+ if (x < 1)
+ fun_l25_n231(x)
+ else
+ fun_l25_n688(x)
+ end
+end
+
+def fun_l24_n650(x)
+ if (x < 1)
+ fun_l25_n602(x)
+ else
+ fun_l25_n641(x)
+ end
+end
+
+def fun_l24_n651(x)
+ if (x < 1)
+ fun_l25_n101(x)
+ else
+ fun_l25_n394(x)
+ end
+end
+
+def fun_l24_n652(x)
+ if (x < 1)
+ fun_l25_n454(x)
+ else
+ fun_l25_n466(x)
+ end
+end
+
+def fun_l24_n653(x)
+ if (x < 1)
+ fun_l25_n147(x)
+ else
+ fun_l25_n116(x)
+ end
+end
+
+def fun_l24_n654(x)
+ if (x < 1)
+ fun_l25_n83(x)
+ else
+ fun_l25_n951(x)
+ end
+end
+
+def fun_l24_n655(x)
+ if (x < 1)
+ fun_l25_n667(x)
+ else
+ fun_l25_n293(x)
+ end
+end
+
+def fun_l24_n656(x)
+ if (x < 1)
+ fun_l25_n413(x)
+ else
+ fun_l25_n708(x)
+ end
+end
+
+def fun_l24_n657(x)
+ if (x < 1)
+ fun_l25_n495(x)
+ else
+ fun_l25_n277(x)
+ end
+end
+
+def fun_l24_n658(x)
+ if (x < 1)
+ fun_l25_n926(x)
+ else
+ fun_l25_n624(x)
+ end
+end
+
+def fun_l24_n659(x)
+ if (x < 1)
+ fun_l25_n612(x)
+ else
+ fun_l25_n666(x)
+ end
+end
+
+def fun_l24_n660(x)
+ if (x < 1)
+ fun_l25_n32(x)
+ else
+ fun_l25_n290(x)
+ end
+end
+
+def fun_l24_n661(x)
+ if (x < 1)
+ fun_l25_n674(x)
+ else
+ fun_l25_n937(x)
+ end
+end
+
+def fun_l24_n662(x)
+ if (x < 1)
+ fun_l25_n556(x)
+ else
+ fun_l25_n576(x)
+ end
+end
+
+def fun_l24_n663(x)
+ if (x < 1)
+ fun_l25_n763(x)
+ else
+ fun_l25_n898(x)
+ end
+end
+
+def fun_l24_n664(x)
+ if (x < 1)
+ fun_l25_n564(x)
+ else
+ fun_l25_n478(x)
+ end
+end
+
+def fun_l24_n665(x)
+ if (x < 1)
+ fun_l25_n515(x)
+ else
+ fun_l25_n991(x)
+ end
+end
+
+def fun_l24_n666(x)
+ if (x < 1)
+ fun_l25_n737(x)
+ else
+ fun_l25_n936(x)
+ end
+end
+
+def fun_l24_n667(x)
+ if (x < 1)
+ fun_l25_n829(x)
+ else
+ fun_l25_n350(x)
+ end
+end
+
+def fun_l24_n668(x)
+ if (x < 1)
+ fun_l25_n59(x)
+ else
+ fun_l25_n979(x)
+ end
+end
+
+def fun_l24_n669(x)
+ if (x < 1)
+ fun_l25_n866(x)
+ else
+ fun_l25_n624(x)
+ end
+end
+
+def fun_l24_n670(x)
+ if (x < 1)
+ fun_l25_n572(x)
+ else
+ fun_l25_n203(x)
+ end
+end
+
+def fun_l24_n671(x)
+ if (x < 1)
+ fun_l25_n96(x)
+ else
+ fun_l25_n862(x)
+ end
+end
+
+def fun_l24_n672(x)
+ if (x < 1)
+ fun_l25_n979(x)
+ else
+ fun_l25_n484(x)
+ end
+end
+
+def fun_l24_n673(x)
+ if (x < 1)
+ fun_l25_n20(x)
+ else
+ fun_l25_n201(x)
+ end
+end
+
+def fun_l24_n674(x)
+ if (x < 1)
+ fun_l25_n109(x)
+ else
+ fun_l25_n788(x)
+ end
+end
+
+def fun_l24_n675(x)
+ if (x < 1)
+ fun_l25_n792(x)
+ else
+ fun_l25_n132(x)
+ end
+end
+
+def fun_l24_n676(x)
+ if (x < 1)
+ fun_l25_n786(x)
+ else
+ fun_l25_n77(x)
+ end
+end
+
+def fun_l24_n677(x)
+ if (x < 1)
+ fun_l25_n21(x)
+ else
+ fun_l25_n96(x)
+ end
+end
+
+def fun_l24_n678(x)
+ if (x < 1)
+ fun_l25_n299(x)
+ else
+ fun_l25_n649(x)
+ end
+end
+
+def fun_l24_n679(x)
+ if (x < 1)
+ fun_l25_n247(x)
+ else
+ fun_l25_n607(x)
+ end
+end
+
+def fun_l24_n680(x)
+ if (x < 1)
+ fun_l25_n480(x)
+ else
+ fun_l25_n471(x)
+ end
+end
+
+def fun_l24_n681(x)
+ if (x < 1)
+ fun_l25_n277(x)
+ else
+ fun_l25_n460(x)
+ end
+end
+
+def fun_l24_n682(x)
+ if (x < 1)
+ fun_l25_n573(x)
+ else
+ fun_l25_n193(x)
+ end
+end
+
+def fun_l24_n683(x)
+ if (x < 1)
+ fun_l25_n741(x)
+ else
+ fun_l25_n441(x)
+ end
+end
+
+def fun_l24_n684(x)
+ if (x < 1)
+ fun_l25_n821(x)
+ else
+ fun_l25_n24(x)
+ end
+end
+
+def fun_l24_n685(x)
+ if (x < 1)
+ fun_l25_n150(x)
+ else
+ fun_l25_n530(x)
+ end
+end
+
+def fun_l24_n686(x)
+ if (x < 1)
+ fun_l25_n564(x)
+ else
+ fun_l25_n26(x)
+ end
+end
+
+def fun_l24_n687(x)
+ if (x < 1)
+ fun_l25_n872(x)
+ else
+ fun_l25_n522(x)
+ end
+end
+
+def fun_l24_n688(x)
+ if (x < 1)
+ fun_l25_n963(x)
+ else
+ fun_l25_n422(x)
+ end
+end
+
+def fun_l24_n689(x)
+ if (x < 1)
+ fun_l25_n418(x)
+ else
+ fun_l25_n900(x)
+ end
+end
+
+def fun_l24_n690(x)
+ if (x < 1)
+ fun_l25_n117(x)
+ else
+ fun_l25_n900(x)
+ end
+end
+
+def fun_l24_n691(x)
+ if (x < 1)
+ fun_l25_n412(x)
+ else
+ fun_l25_n466(x)
+ end
+end
+
+def fun_l24_n692(x)
+ if (x < 1)
+ fun_l25_n761(x)
+ else
+ fun_l25_n190(x)
+ end
+end
+
+def fun_l24_n693(x)
+ if (x < 1)
+ fun_l25_n875(x)
+ else
+ fun_l25_n222(x)
+ end
+end
+
+def fun_l24_n694(x)
+ if (x < 1)
+ fun_l25_n405(x)
+ else
+ fun_l25_n66(x)
+ end
+end
+
+def fun_l24_n695(x)
+ if (x < 1)
+ fun_l25_n570(x)
+ else
+ fun_l25_n801(x)
+ end
+end
+
+def fun_l24_n696(x)
+ if (x < 1)
+ fun_l25_n591(x)
+ else
+ fun_l25_n121(x)
+ end
+end
+
+def fun_l24_n697(x)
+ if (x < 1)
+ fun_l25_n27(x)
+ else
+ fun_l25_n610(x)
+ end
+end
+
+def fun_l24_n698(x)
+ if (x < 1)
+ fun_l25_n843(x)
+ else
+ fun_l25_n488(x)
+ end
+end
+
+def fun_l24_n699(x)
+ if (x < 1)
+ fun_l25_n946(x)
+ else
+ fun_l25_n164(x)
+ end
+end
+
+def fun_l24_n700(x)
+ if (x < 1)
+ fun_l25_n424(x)
+ else
+ fun_l25_n614(x)
+ end
+end
+
+def fun_l24_n701(x)
+ if (x < 1)
+ fun_l25_n692(x)
+ else
+ fun_l25_n893(x)
+ end
+end
+
+def fun_l24_n702(x)
+ if (x < 1)
+ fun_l25_n39(x)
+ else
+ fun_l25_n274(x)
+ end
+end
+
+def fun_l24_n703(x)
+ if (x < 1)
+ fun_l25_n814(x)
+ else
+ fun_l25_n281(x)
+ end
+end
+
+def fun_l24_n704(x)
+ if (x < 1)
+ fun_l25_n670(x)
+ else
+ fun_l25_n882(x)
+ end
+end
+
+def fun_l24_n705(x)
+ if (x < 1)
+ fun_l25_n498(x)
+ else
+ fun_l25_n881(x)
+ end
+end
+
+def fun_l24_n706(x)
+ if (x < 1)
+ fun_l25_n193(x)
+ else
+ fun_l25_n10(x)
+ end
+end
+
+def fun_l24_n707(x)
+ if (x < 1)
+ fun_l25_n531(x)
+ else
+ fun_l25_n870(x)
+ end
+end
+
+def fun_l24_n708(x)
+ if (x < 1)
+ fun_l25_n106(x)
+ else
+ fun_l25_n692(x)
+ end
+end
+
+def fun_l24_n709(x)
+ if (x < 1)
+ fun_l25_n484(x)
+ else
+ fun_l25_n700(x)
+ end
+end
+
+def fun_l24_n710(x)
+ if (x < 1)
+ fun_l25_n699(x)
+ else
+ fun_l25_n117(x)
+ end
+end
+
+def fun_l24_n711(x)
+ if (x < 1)
+ fun_l25_n138(x)
+ else
+ fun_l25_n532(x)
+ end
+end
+
+def fun_l24_n712(x)
+ if (x < 1)
+ fun_l25_n468(x)
+ else
+ fun_l25_n350(x)
+ end
+end
+
+def fun_l24_n713(x)
+ if (x < 1)
+ fun_l25_n906(x)
+ else
+ fun_l25_n25(x)
+ end
+end
+
+def fun_l24_n714(x)
+ if (x < 1)
+ fun_l25_n23(x)
+ else
+ fun_l25_n745(x)
+ end
+end
+
+def fun_l24_n715(x)
+ if (x < 1)
+ fun_l25_n917(x)
+ else
+ fun_l25_n942(x)
+ end
+end
+
+def fun_l24_n716(x)
+ if (x < 1)
+ fun_l25_n986(x)
+ else
+ fun_l25_n605(x)
+ end
+end
+
+def fun_l24_n717(x)
+ if (x < 1)
+ fun_l25_n771(x)
+ else
+ fun_l25_n100(x)
+ end
+end
+
+def fun_l24_n718(x)
+ if (x < 1)
+ fun_l25_n994(x)
+ else
+ fun_l25_n249(x)
+ end
+end
+
+def fun_l24_n719(x)
+ if (x < 1)
+ fun_l25_n368(x)
+ else
+ fun_l25_n657(x)
+ end
+end
+
+def fun_l24_n720(x)
+ if (x < 1)
+ fun_l25_n856(x)
+ else
+ fun_l25_n650(x)
+ end
+end
+
+def fun_l24_n721(x)
+ if (x < 1)
+ fun_l25_n667(x)
+ else
+ fun_l25_n609(x)
+ end
+end
+
+def fun_l24_n722(x)
+ if (x < 1)
+ fun_l25_n353(x)
+ else
+ fun_l25_n665(x)
+ end
+end
+
+def fun_l24_n723(x)
+ if (x < 1)
+ fun_l25_n520(x)
+ else
+ fun_l25_n771(x)
+ end
+end
+
+def fun_l24_n724(x)
+ if (x < 1)
+ fun_l25_n636(x)
+ else
+ fun_l25_n34(x)
+ end
+end
+
+def fun_l24_n725(x)
+ if (x < 1)
+ fun_l25_n222(x)
+ else
+ fun_l25_n444(x)
+ end
+end
+
+def fun_l24_n726(x)
+ if (x < 1)
+ fun_l25_n519(x)
+ else
+ fun_l25_n675(x)
+ end
+end
+
+def fun_l24_n727(x)
+ if (x < 1)
+ fun_l25_n739(x)
+ else
+ fun_l25_n910(x)
+ end
+end
+
+def fun_l24_n728(x)
+ if (x < 1)
+ fun_l25_n669(x)
+ else
+ fun_l25_n645(x)
+ end
+end
+
+def fun_l24_n729(x)
+ if (x < 1)
+ fun_l25_n358(x)
+ else
+ fun_l25_n316(x)
+ end
+end
+
+def fun_l24_n730(x)
+ if (x < 1)
+ fun_l25_n614(x)
+ else
+ fun_l25_n484(x)
+ end
+end
+
+def fun_l24_n731(x)
+ if (x < 1)
+ fun_l25_n640(x)
+ else
+ fun_l25_n613(x)
+ end
+end
+
+def fun_l24_n732(x)
+ if (x < 1)
+ fun_l25_n16(x)
+ else
+ fun_l25_n596(x)
+ end
+end
+
+def fun_l24_n733(x)
+ if (x < 1)
+ fun_l25_n780(x)
+ else
+ fun_l25_n673(x)
+ end
+end
+
+def fun_l24_n734(x)
+ if (x < 1)
+ fun_l25_n999(x)
+ else
+ fun_l25_n210(x)
+ end
+end
+
+def fun_l24_n735(x)
+ if (x < 1)
+ fun_l25_n915(x)
+ else
+ fun_l25_n788(x)
+ end
+end
+
+def fun_l24_n736(x)
+ if (x < 1)
+ fun_l25_n484(x)
+ else
+ fun_l25_n369(x)
+ end
+end
+
+def fun_l24_n737(x)
+ if (x < 1)
+ fun_l25_n851(x)
+ else
+ fun_l25_n674(x)
+ end
+end
+
+def fun_l24_n738(x)
+ if (x < 1)
+ fun_l25_n830(x)
+ else
+ fun_l25_n382(x)
+ end
+end
+
+def fun_l24_n739(x)
+ if (x < 1)
+ fun_l25_n861(x)
+ else
+ fun_l25_n482(x)
+ end
+end
+
+def fun_l24_n740(x)
+ if (x < 1)
+ fun_l25_n244(x)
+ else
+ fun_l25_n414(x)
+ end
+end
+
+def fun_l24_n741(x)
+ if (x < 1)
+ fun_l25_n829(x)
+ else
+ fun_l25_n846(x)
+ end
+end
+
+def fun_l24_n742(x)
+ if (x < 1)
+ fun_l25_n197(x)
+ else
+ fun_l25_n943(x)
+ end
+end
+
+def fun_l24_n743(x)
+ if (x < 1)
+ fun_l25_n290(x)
+ else
+ fun_l25_n394(x)
+ end
+end
+
+def fun_l24_n744(x)
+ if (x < 1)
+ fun_l25_n965(x)
+ else
+ fun_l25_n987(x)
+ end
+end
+
+def fun_l24_n745(x)
+ if (x < 1)
+ fun_l25_n104(x)
+ else
+ fun_l25_n369(x)
+ end
+end
+
+def fun_l24_n746(x)
+ if (x < 1)
+ fun_l25_n880(x)
+ else
+ fun_l25_n541(x)
+ end
+end
+
+def fun_l24_n747(x)
+ if (x < 1)
+ fun_l25_n345(x)
+ else
+ fun_l25_n155(x)
+ end
+end
+
+def fun_l24_n748(x)
+ if (x < 1)
+ fun_l25_n803(x)
+ else
+ fun_l25_n383(x)
+ end
+end
+
+def fun_l24_n749(x)
+ if (x < 1)
+ fun_l25_n848(x)
+ else
+ fun_l25_n340(x)
+ end
+end
+
+def fun_l24_n750(x)
+ if (x < 1)
+ fun_l25_n197(x)
+ else
+ fun_l25_n313(x)
+ end
+end
+
+def fun_l24_n751(x)
+ if (x < 1)
+ fun_l25_n253(x)
+ else
+ fun_l25_n99(x)
+ end
+end
+
+def fun_l24_n752(x)
+ if (x < 1)
+ fun_l25_n873(x)
+ else
+ fun_l25_n347(x)
+ end
+end
+
+def fun_l24_n753(x)
+ if (x < 1)
+ fun_l25_n849(x)
+ else
+ fun_l25_n627(x)
+ end
+end
+
+def fun_l24_n754(x)
+ if (x < 1)
+ fun_l25_n817(x)
+ else
+ fun_l25_n441(x)
+ end
+end
+
+def fun_l24_n755(x)
+ if (x < 1)
+ fun_l25_n235(x)
+ else
+ fun_l25_n602(x)
+ end
+end
+
+def fun_l24_n756(x)
+ if (x < 1)
+ fun_l25_n950(x)
+ else
+ fun_l25_n516(x)
+ end
+end
+
+def fun_l24_n757(x)
+ if (x < 1)
+ fun_l25_n646(x)
+ else
+ fun_l25_n996(x)
+ end
+end
+
+def fun_l24_n758(x)
+ if (x < 1)
+ fun_l25_n27(x)
+ else
+ fun_l25_n650(x)
+ end
+end
+
+def fun_l24_n759(x)
+ if (x < 1)
+ fun_l25_n290(x)
+ else
+ fun_l25_n852(x)
+ end
+end
+
+def fun_l24_n760(x)
+ if (x < 1)
+ fun_l25_n118(x)
+ else
+ fun_l25_n871(x)
+ end
+end
+
+def fun_l24_n761(x)
+ if (x < 1)
+ fun_l25_n372(x)
+ else
+ fun_l25_n537(x)
+ end
+end
+
+def fun_l24_n762(x)
+ if (x < 1)
+ fun_l25_n124(x)
+ else
+ fun_l25_n939(x)
+ end
+end
+
+def fun_l24_n763(x)
+ if (x < 1)
+ fun_l25_n163(x)
+ else
+ fun_l25_n787(x)
+ end
+end
+
+def fun_l24_n764(x)
+ if (x < 1)
+ fun_l25_n485(x)
+ else
+ fun_l25_n753(x)
+ end
+end
+
+def fun_l24_n765(x)
+ if (x < 1)
+ fun_l25_n181(x)
+ else
+ fun_l25_n595(x)
+ end
+end
+
+def fun_l24_n766(x)
+ if (x < 1)
+ fun_l25_n909(x)
+ else
+ fun_l25_n734(x)
+ end
+end
+
+def fun_l24_n767(x)
+ if (x < 1)
+ fun_l25_n980(x)
+ else
+ fun_l25_n673(x)
+ end
+end
+
+def fun_l24_n768(x)
+ if (x < 1)
+ fun_l25_n756(x)
+ else
+ fun_l25_n429(x)
+ end
+end
+
+def fun_l24_n769(x)
+ if (x < 1)
+ fun_l25_n301(x)
+ else
+ fun_l25_n197(x)
+ end
+end
+
+def fun_l24_n770(x)
+ if (x < 1)
+ fun_l25_n977(x)
+ else
+ fun_l25_n569(x)
+ end
+end
+
+def fun_l24_n771(x)
+ if (x < 1)
+ fun_l25_n829(x)
+ else
+ fun_l25_n34(x)
+ end
+end
+
+def fun_l24_n772(x)
+ if (x < 1)
+ fun_l25_n601(x)
+ else
+ fun_l25_n762(x)
+ end
+end
+
+def fun_l24_n773(x)
+ if (x < 1)
+ fun_l25_n790(x)
+ else
+ fun_l25_n282(x)
+ end
+end
+
+def fun_l24_n774(x)
+ if (x < 1)
+ fun_l25_n464(x)
+ else
+ fun_l25_n814(x)
+ end
+end
+
+def fun_l24_n775(x)
+ if (x < 1)
+ fun_l25_n562(x)
+ else
+ fun_l25_n543(x)
+ end
+end
+
+def fun_l24_n776(x)
+ if (x < 1)
+ fun_l25_n869(x)
+ else
+ fun_l25_n857(x)
+ end
+end
+
+def fun_l24_n777(x)
+ if (x < 1)
+ fun_l25_n206(x)
+ else
+ fun_l25_n369(x)
+ end
+end
+
+def fun_l24_n778(x)
+ if (x < 1)
+ fun_l25_n43(x)
+ else
+ fun_l25_n405(x)
+ end
+end
+
+def fun_l24_n779(x)
+ if (x < 1)
+ fun_l25_n116(x)
+ else
+ fun_l25_n644(x)
+ end
+end
+
+def fun_l24_n780(x)
+ if (x < 1)
+ fun_l25_n455(x)
+ else
+ fun_l25_n174(x)
+ end
+end
+
+def fun_l24_n781(x)
+ if (x < 1)
+ fun_l25_n234(x)
+ else
+ fun_l25_n887(x)
+ end
+end
+
+def fun_l24_n782(x)
+ if (x < 1)
+ fun_l25_n157(x)
+ else
+ fun_l25_n459(x)
+ end
+end
+
+def fun_l24_n783(x)
+ if (x < 1)
+ fun_l25_n441(x)
+ else
+ fun_l25_n830(x)
+ end
+end
+
+def fun_l24_n784(x)
+ if (x < 1)
+ fun_l25_n908(x)
+ else
+ fun_l25_n363(x)
+ end
+end
+
+def fun_l24_n785(x)
+ if (x < 1)
+ fun_l25_n495(x)
+ else
+ fun_l25_n790(x)
+ end
+end
+
+def fun_l24_n786(x)
+ if (x < 1)
+ fun_l25_n365(x)
+ else
+ fun_l25_n561(x)
+ end
+end
+
+def fun_l24_n787(x)
+ if (x < 1)
+ fun_l25_n419(x)
+ else
+ fun_l25_n471(x)
+ end
+end
+
+def fun_l24_n788(x)
+ if (x < 1)
+ fun_l25_n568(x)
+ else
+ fun_l25_n807(x)
+ end
+end
+
+def fun_l24_n789(x)
+ if (x < 1)
+ fun_l25_n148(x)
+ else
+ fun_l25_n476(x)
+ end
+end
+
+def fun_l24_n790(x)
+ if (x < 1)
+ fun_l25_n470(x)
+ else
+ fun_l25_n662(x)
+ end
+end
+
+def fun_l24_n791(x)
+ if (x < 1)
+ fun_l25_n307(x)
+ else
+ fun_l25_n828(x)
+ end
+end
+
+def fun_l24_n792(x)
+ if (x < 1)
+ fun_l25_n227(x)
+ else
+ fun_l25_n802(x)
+ end
+end
+
+def fun_l24_n793(x)
+ if (x < 1)
+ fun_l25_n891(x)
+ else
+ fun_l25_n561(x)
+ end
+end
+
+def fun_l24_n794(x)
+ if (x < 1)
+ fun_l25_n465(x)
+ else
+ fun_l25_n805(x)
+ end
+end
+
+def fun_l24_n795(x)
+ if (x < 1)
+ fun_l25_n869(x)
+ else
+ fun_l25_n250(x)
+ end
+end
+
+def fun_l24_n796(x)
+ if (x < 1)
+ fun_l25_n479(x)
+ else
+ fun_l25_n996(x)
+ end
+end
+
+def fun_l24_n797(x)
+ if (x < 1)
+ fun_l25_n773(x)
+ else
+ fun_l25_n294(x)
+ end
+end
+
+def fun_l24_n798(x)
+ if (x < 1)
+ fun_l25_n601(x)
+ else
+ fun_l25_n259(x)
+ end
+end
+
+def fun_l24_n799(x)
+ if (x < 1)
+ fun_l25_n334(x)
+ else
+ fun_l25_n696(x)
+ end
+end
+
+def fun_l24_n800(x)
+ if (x < 1)
+ fun_l25_n6(x)
+ else
+ fun_l25_n184(x)
+ end
+end
+
+def fun_l24_n801(x)
+ if (x < 1)
+ fun_l25_n345(x)
+ else
+ fun_l25_n476(x)
+ end
+end
+
+def fun_l24_n802(x)
+ if (x < 1)
+ fun_l25_n957(x)
+ else
+ fun_l25_n893(x)
+ end
+end
+
+def fun_l24_n803(x)
+ if (x < 1)
+ fun_l25_n541(x)
+ else
+ fun_l25_n562(x)
+ end
+end
+
+def fun_l24_n804(x)
+ if (x < 1)
+ fun_l25_n403(x)
+ else
+ fun_l25_n398(x)
+ end
+end
+
+def fun_l24_n805(x)
+ if (x < 1)
+ fun_l25_n759(x)
+ else
+ fun_l25_n861(x)
+ end
+end
+
+def fun_l24_n806(x)
+ if (x < 1)
+ fun_l25_n145(x)
+ else
+ fun_l25_n460(x)
+ end
+end
+
+def fun_l24_n807(x)
+ if (x < 1)
+ fun_l25_n960(x)
+ else
+ fun_l25_n865(x)
+ end
+end
+
+def fun_l24_n808(x)
+ if (x < 1)
+ fun_l25_n386(x)
+ else
+ fun_l25_n443(x)
+ end
+end
+
+def fun_l24_n809(x)
+ if (x < 1)
+ fun_l25_n789(x)
+ else
+ fun_l25_n295(x)
+ end
+end
+
+def fun_l24_n810(x)
+ if (x < 1)
+ fun_l25_n985(x)
+ else
+ fun_l25_n15(x)
+ end
+end
+
+def fun_l24_n811(x)
+ if (x < 1)
+ fun_l25_n976(x)
+ else
+ fun_l25_n636(x)
+ end
+end
+
+def fun_l24_n812(x)
+ if (x < 1)
+ fun_l25_n183(x)
+ else
+ fun_l25_n146(x)
+ end
+end
+
+def fun_l24_n813(x)
+ if (x < 1)
+ fun_l25_n457(x)
+ else
+ fun_l25_n141(x)
+ end
+end
+
+def fun_l24_n814(x)
+ if (x < 1)
+ fun_l25_n1(x)
+ else
+ fun_l25_n708(x)
+ end
+end
+
+def fun_l24_n815(x)
+ if (x < 1)
+ fun_l25_n696(x)
+ else
+ fun_l25_n898(x)
+ end
+end
+
+def fun_l24_n816(x)
+ if (x < 1)
+ fun_l25_n423(x)
+ else
+ fun_l25_n250(x)
+ end
+end
+
+def fun_l24_n817(x)
+ if (x < 1)
+ fun_l25_n432(x)
+ else
+ fun_l25_n918(x)
+ end
+end
+
+def fun_l24_n818(x)
+ if (x < 1)
+ fun_l25_n712(x)
+ else
+ fun_l25_n8(x)
+ end
+end
+
+def fun_l24_n819(x)
+ if (x < 1)
+ fun_l25_n331(x)
+ else
+ fun_l25_n194(x)
+ end
+end
+
+def fun_l24_n820(x)
+ if (x < 1)
+ fun_l25_n106(x)
+ else
+ fun_l25_n588(x)
+ end
+end
+
+def fun_l24_n821(x)
+ if (x < 1)
+ fun_l25_n662(x)
+ else
+ fun_l25_n365(x)
+ end
+end
+
+def fun_l24_n822(x)
+ if (x < 1)
+ fun_l25_n461(x)
+ else
+ fun_l25_n931(x)
+ end
+end
+
+def fun_l24_n823(x)
+ if (x < 1)
+ fun_l25_n243(x)
+ else
+ fun_l25_n26(x)
+ end
+end
+
+def fun_l24_n824(x)
+ if (x < 1)
+ fun_l25_n6(x)
+ else
+ fun_l25_n787(x)
+ end
+end
+
+def fun_l24_n825(x)
+ if (x < 1)
+ fun_l25_n536(x)
+ else
+ fun_l25_n721(x)
+ end
+end
+
+def fun_l24_n826(x)
+ if (x < 1)
+ fun_l25_n693(x)
+ else
+ fun_l25_n649(x)
+ end
+end
+
+def fun_l24_n827(x)
+ if (x < 1)
+ fun_l25_n662(x)
+ else
+ fun_l25_n981(x)
+ end
+end
+
+def fun_l24_n828(x)
+ if (x < 1)
+ fun_l25_n594(x)
+ else
+ fun_l25_n345(x)
+ end
+end
+
+def fun_l24_n829(x)
+ if (x < 1)
+ fun_l25_n917(x)
+ else
+ fun_l25_n665(x)
+ end
+end
+
+def fun_l24_n830(x)
+ if (x < 1)
+ fun_l25_n246(x)
+ else
+ fun_l25_n58(x)
+ end
+end
+
+def fun_l24_n831(x)
+ if (x < 1)
+ fun_l25_n415(x)
+ else
+ fun_l25_n617(x)
+ end
+end
+
+def fun_l24_n832(x)
+ if (x < 1)
+ fun_l25_n596(x)
+ else
+ fun_l25_n858(x)
+ end
+end
+
+def fun_l24_n833(x)
+ if (x < 1)
+ fun_l25_n810(x)
+ else
+ fun_l25_n532(x)
+ end
+end
+
+def fun_l24_n834(x)
+ if (x < 1)
+ fun_l25_n298(x)
+ else
+ fun_l25_n881(x)
+ end
+end
+
+def fun_l24_n835(x)
+ if (x < 1)
+ fun_l25_n791(x)
+ else
+ fun_l25_n344(x)
+ end
+end
+
+def fun_l24_n836(x)
+ if (x < 1)
+ fun_l25_n531(x)
+ else
+ fun_l25_n880(x)
+ end
+end
+
+def fun_l24_n837(x)
+ if (x < 1)
+ fun_l25_n571(x)
+ else
+ fun_l25_n306(x)
+ end
+end
+
+def fun_l24_n838(x)
+ if (x < 1)
+ fun_l25_n191(x)
+ else
+ fun_l25_n450(x)
+ end
+end
+
+def fun_l24_n839(x)
+ if (x < 1)
+ fun_l25_n777(x)
+ else
+ fun_l25_n234(x)
+ end
+end
+
+def fun_l24_n840(x)
+ if (x < 1)
+ fun_l25_n876(x)
+ else
+ fun_l25_n548(x)
+ end
+end
+
+def fun_l24_n841(x)
+ if (x < 1)
+ fun_l25_n83(x)
+ else
+ fun_l25_n346(x)
+ end
+end
+
+def fun_l24_n842(x)
+ if (x < 1)
+ fun_l25_n976(x)
+ else
+ fun_l25_n843(x)
+ end
+end
+
+def fun_l24_n843(x)
+ if (x < 1)
+ fun_l25_n559(x)
+ else
+ fun_l25_n424(x)
+ end
+end
+
+def fun_l24_n844(x)
+ if (x < 1)
+ fun_l25_n974(x)
+ else
+ fun_l25_n906(x)
+ end
+end
+
+def fun_l24_n845(x)
+ if (x < 1)
+ fun_l25_n274(x)
+ else
+ fun_l25_n528(x)
+ end
+end
+
+def fun_l24_n846(x)
+ if (x < 1)
+ fun_l25_n773(x)
+ else
+ fun_l25_n507(x)
+ end
+end
+
+def fun_l24_n847(x)
+ if (x < 1)
+ fun_l25_n80(x)
+ else
+ fun_l25_n274(x)
+ end
+end
+
+def fun_l24_n848(x)
+ if (x < 1)
+ fun_l25_n557(x)
+ else
+ fun_l25_n541(x)
+ end
+end
+
+def fun_l24_n849(x)
+ if (x < 1)
+ fun_l25_n208(x)
+ else
+ fun_l25_n765(x)
+ end
+end
+
+def fun_l24_n850(x)
+ if (x < 1)
+ fun_l25_n705(x)
+ else
+ fun_l25_n81(x)
+ end
+end
+
+def fun_l24_n851(x)
+ if (x < 1)
+ fun_l25_n151(x)
+ else
+ fun_l25_n706(x)
+ end
+end
+
+def fun_l24_n852(x)
+ if (x < 1)
+ fun_l25_n723(x)
+ else
+ fun_l25_n451(x)
+ end
+end
+
+def fun_l24_n853(x)
+ if (x < 1)
+ fun_l25_n155(x)
+ else
+ fun_l25_n48(x)
+ end
+end
+
+def fun_l24_n854(x)
+ if (x < 1)
+ fun_l25_n317(x)
+ else
+ fun_l25_n118(x)
+ end
+end
+
+def fun_l24_n855(x)
+ if (x < 1)
+ fun_l25_n794(x)
+ else
+ fun_l25_n880(x)
+ end
+end
+
+def fun_l24_n856(x)
+ if (x < 1)
+ fun_l25_n556(x)
+ else
+ fun_l25_n255(x)
+ end
+end
+
+def fun_l24_n857(x)
+ if (x < 1)
+ fun_l25_n665(x)
+ else
+ fun_l25_n640(x)
+ end
+end
+
+def fun_l24_n858(x)
+ if (x < 1)
+ fun_l25_n732(x)
+ else
+ fun_l25_n771(x)
+ end
+end
+
+def fun_l24_n859(x)
+ if (x < 1)
+ fun_l25_n367(x)
+ else
+ fun_l25_n616(x)
+ end
+end
+
+def fun_l24_n860(x)
+ if (x < 1)
+ fun_l25_n184(x)
+ else
+ fun_l25_n912(x)
+ end
+end
+
+def fun_l24_n861(x)
+ if (x < 1)
+ fun_l25_n916(x)
+ else
+ fun_l25_n66(x)
+ end
+end
+
+def fun_l24_n862(x)
+ if (x < 1)
+ fun_l25_n526(x)
+ else
+ fun_l25_n807(x)
+ end
+end
+
+def fun_l24_n863(x)
+ if (x < 1)
+ fun_l25_n83(x)
+ else
+ fun_l25_n180(x)
+ end
+end
+
+def fun_l24_n864(x)
+ if (x < 1)
+ fun_l25_n199(x)
+ else
+ fun_l25_n471(x)
+ end
+end
+
+def fun_l24_n865(x)
+ if (x < 1)
+ fun_l25_n763(x)
+ else
+ fun_l25_n16(x)
+ end
+end
+
+def fun_l24_n866(x)
+ if (x < 1)
+ fun_l25_n280(x)
+ else
+ fun_l25_n66(x)
+ end
+end
+
+def fun_l24_n867(x)
+ if (x < 1)
+ fun_l25_n366(x)
+ else
+ fun_l25_n143(x)
+ end
+end
+
+def fun_l24_n868(x)
+ if (x < 1)
+ fun_l25_n110(x)
+ else
+ fun_l25_n151(x)
+ end
+end
+
+def fun_l24_n869(x)
+ if (x < 1)
+ fun_l25_n936(x)
+ else
+ fun_l25_n153(x)
+ end
+end
+
+def fun_l24_n870(x)
+ if (x < 1)
+ fun_l25_n555(x)
+ else
+ fun_l25_n915(x)
+ end
+end
+
+def fun_l24_n871(x)
+ if (x < 1)
+ fun_l25_n199(x)
+ else
+ fun_l25_n613(x)
+ end
+end
+
+def fun_l24_n872(x)
+ if (x < 1)
+ fun_l25_n381(x)
+ else
+ fun_l25_n899(x)
+ end
+end
+
+def fun_l24_n873(x)
+ if (x < 1)
+ fun_l25_n64(x)
+ else
+ fun_l25_n337(x)
+ end
+end
+
+def fun_l24_n874(x)
+ if (x < 1)
+ fun_l25_n753(x)
+ else
+ fun_l25_n981(x)
+ end
+end
+
+def fun_l24_n875(x)
+ if (x < 1)
+ fun_l25_n113(x)
+ else
+ fun_l25_n126(x)
+ end
+end
+
+def fun_l24_n876(x)
+ if (x < 1)
+ fun_l25_n3(x)
+ else
+ fun_l25_n288(x)
+ end
+end
+
+def fun_l24_n877(x)
+ if (x < 1)
+ fun_l25_n359(x)
+ else
+ fun_l25_n596(x)
+ end
+end
+
+def fun_l24_n878(x)
+ if (x < 1)
+ fun_l25_n937(x)
+ else
+ fun_l25_n72(x)
+ end
+end
+
+def fun_l24_n879(x)
+ if (x < 1)
+ fun_l25_n495(x)
+ else
+ fun_l25_n368(x)
+ end
+end
+
+def fun_l24_n880(x)
+ if (x < 1)
+ fun_l25_n524(x)
+ else
+ fun_l25_n228(x)
+ end
+end
+
+def fun_l24_n881(x)
+ if (x < 1)
+ fun_l25_n438(x)
+ else
+ fun_l25_n986(x)
+ end
+end
+
+def fun_l24_n882(x)
+ if (x < 1)
+ fun_l25_n334(x)
+ else
+ fun_l25_n54(x)
+ end
+end
+
+def fun_l24_n883(x)
+ if (x < 1)
+ fun_l25_n612(x)
+ else
+ fun_l25_n126(x)
+ end
+end
+
+def fun_l24_n884(x)
+ if (x < 1)
+ fun_l25_n316(x)
+ else
+ fun_l25_n222(x)
+ end
+end
+
+def fun_l24_n885(x)
+ if (x < 1)
+ fun_l25_n915(x)
+ else
+ fun_l25_n971(x)
+ end
+end
+
+def fun_l24_n886(x)
+ if (x < 1)
+ fun_l25_n987(x)
+ else
+ fun_l25_n499(x)
+ end
+end
+
+def fun_l24_n887(x)
+ if (x < 1)
+ fun_l25_n476(x)
+ else
+ fun_l25_n280(x)
+ end
+end
+
+def fun_l24_n888(x)
+ if (x < 1)
+ fun_l25_n420(x)
+ else
+ fun_l25_n584(x)
+ end
+end
+
+def fun_l24_n889(x)
+ if (x < 1)
+ fun_l25_n560(x)
+ else
+ fun_l25_n767(x)
+ end
+end
+
+def fun_l24_n890(x)
+ if (x < 1)
+ fun_l25_n26(x)
+ else
+ fun_l25_n431(x)
+ end
+end
+
+def fun_l24_n891(x)
+ if (x < 1)
+ fun_l25_n107(x)
+ else
+ fun_l25_n803(x)
+ end
+end
+
+def fun_l24_n892(x)
+ if (x < 1)
+ fun_l25_n225(x)
+ else
+ fun_l25_n665(x)
+ end
+end
+
+def fun_l24_n893(x)
+ if (x < 1)
+ fun_l25_n19(x)
+ else
+ fun_l25_n507(x)
+ end
+end
+
+def fun_l24_n894(x)
+ if (x < 1)
+ fun_l25_n44(x)
+ else
+ fun_l25_n420(x)
+ end
+end
+
+def fun_l24_n895(x)
+ if (x < 1)
+ fun_l25_n526(x)
+ else
+ fun_l25_n871(x)
+ end
+end
+
+def fun_l24_n896(x)
+ if (x < 1)
+ fun_l25_n900(x)
+ else
+ fun_l25_n824(x)
+ end
+end
+
+def fun_l24_n897(x)
+ if (x < 1)
+ fun_l25_n105(x)
+ else
+ fun_l25_n602(x)
+ end
+end
+
+def fun_l24_n898(x)
+ if (x < 1)
+ fun_l25_n228(x)
+ else
+ fun_l25_n993(x)
+ end
+end
+
+def fun_l24_n899(x)
+ if (x < 1)
+ fun_l25_n330(x)
+ else
+ fun_l25_n60(x)
+ end
+end
+
+def fun_l24_n900(x)
+ if (x < 1)
+ fun_l25_n512(x)
+ else
+ fun_l25_n708(x)
+ end
+end
+
+def fun_l24_n901(x)
+ if (x < 1)
+ fun_l25_n791(x)
+ else
+ fun_l25_n554(x)
+ end
+end
+
+def fun_l24_n902(x)
+ if (x < 1)
+ fun_l25_n204(x)
+ else
+ fun_l25_n439(x)
+ end
+end
+
+def fun_l24_n903(x)
+ if (x < 1)
+ fun_l25_n577(x)
+ else
+ fun_l25_n174(x)
+ end
+end
+
+def fun_l24_n904(x)
+ if (x < 1)
+ fun_l25_n713(x)
+ else
+ fun_l25_n35(x)
+ end
+end
+
+def fun_l24_n905(x)
+ if (x < 1)
+ fun_l25_n290(x)
+ else
+ fun_l25_n342(x)
+ end
+end
+
+def fun_l24_n906(x)
+ if (x < 1)
+ fun_l25_n607(x)
+ else
+ fun_l25_n52(x)
+ end
+end
+
+def fun_l24_n907(x)
+ if (x < 1)
+ fun_l25_n72(x)
+ else
+ fun_l25_n169(x)
+ end
+end
+
+def fun_l24_n908(x)
+ if (x < 1)
+ fun_l25_n179(x)
+ else
+ fun_l25_n383(x)
+ end
+end
+
+def fun_l24_n909(x)
+ if (x < 1)
+ fun_l25_n52(x)
+ else
+ fun_l25_n504(x)
+ end
+end
+
+def fun_l24_n910(x)
+ if (x < 1)
+ fun_l25_n346(x)
+ else
+ fun_l25_n775(x)
+ end
+end
+
+def fun_l24_n911(x)
+ if (x < 1)
+ fun_l25_n535(x)
+ else
+ fun_l25_n210(x)
+ end
+end
+
+def fun_l24_n912(x)
+ if (x < 1)
+ fun_l25_n937(x)
+ else
+ fun_l25_n409(x)
+ end
+end
+
+def fun_l24_n913(x)
+ if (x < 1)
+ fun_l25_n889(x)
+ else
+ fun_l25_n463(x)
+ end
+end
+
+def fun_l24_n914(x)
+ if (x < 1)
+ fun_l25_n75(x)
+ else
+ fun_l25_n817(x)
+ end
+end
+
+def fun_l24_n915(x)
+ if (x < 1)
+ fun_l25_n277(x)
+ else
+ fun_l25_n3(x)
+ end
+end
+
+def fun_l24_n916(x)
+ if (x < 1)
+ fun_l25_n97(x)
+ else
+ fun_l25_n819(x)
+ end
+end
+
+def fun_l24_n917(x)
+ if (x < 1)
+ fun_l25_n412(x)
+ else
+ fun_l25_n851(x)
+ end
+end
+
+def fun_l24_n918(x)
+ if (x < 1)
+ fun_l25_n803(x)
+ else
+ fun_l25_n429(x)
+ end
+end
+
+def fun_l24_n919(x)
+ if (x < 1)
+ fun_l25_n12(x)
+ else
+ fun_l25_n434(x)
+ end
+end
+
+def fun_l24_n920(x)
+ if (x < 1)
+ fun_l25_n721(x)
+ else
+ fun_l25_n553(x)
+ end
+end
+
+def fun_l24_n921(x)
+ if (x < 1)
+ fun_l25_n438(x)
+ else
+ fun_l25_n211(x)
+ end
+end
+
+def fun_l24_n922(x)
+ if (x < 1)
+ fun_l25_n123(x)
+ else
+ fun_l25_n89(x)
+ end
+end
+
+def fun_l24_n923(x)
+ if (x < 1)
+ fun_l25_n696(x)
+ else
+ fun_l25_n78(x)
+ end
+end
+
+def fun_l24_n924(x)
+ if (x < 1)
+ fun_l25_n556(x)
+ else
+ fun_l25_n788(x)
+ end
+end
+
+def fun_l24_n925(x)
+ if (x < 1)
+ fun_l25_n928(x)
+ else
+ fun_l25_n797(x)
+ end
+end
+
+def fun_l24_n926(x)
+ if (x < 1)
+ fun_l25_n796(x)
+ else
+ fun_l25_n84(x)
+ end
+end
+
+def fun_l24_n927(x)
+ if (x < 1)
+ fun_l25_n874(x)
+ else
+ fun_l25_n255(x)
+ end
+end
+
+def fun_l24_n928(x)
+ if (x < 1)
+ fun_l25_n715(x)
+ else
+ fun_l25_n812(x)
+ end
+end
+
+def fun_l24_n929(x)
+ if (x < 1)
+ fun_l25_n384(x)
+ else
+ fun_l25_n859(x)
+ end
+end
+
+def fun_l24_n930(x)
+ if (x < 1)
+ fun_l25_n133(x)
+ else
+ fun_l25_n923(x)
+ end
+end
+
+def fun_l24_n931(x)
+ if (x < 1)
+ fun_l25_n712(x)
+ else
+ fun_l25_n850(x)
+ end
+end
+
+def fun_l24_n932(x)
+ if (x < 1)
+ fun_l25_n301(x)
+ else
+ fun_l25_n743(x)
+ end
+end
+
+def fun_l24_n933(x)
+ if (x < 1)
+ fun_l25_n554(x)
+ else
+ fun_l25_n4(x)
+ end
+end
+
+def fun_l24_n934(x)
+ if (x < 1)
+ fun_l25_n407(x)
+ else
+ fun_l25_n656(x)
+ end
+end
+
+def fun_l24_n935(x)
+ if (x < 1)
+ fun_l25_n109(x)
+ else
+ fun_l25_n356(x)
+ end
+end
+
+def fun_l24_n936(x)
+ if (x < 1)
+ fun_l25_n985(x)
+ else
+ fun_l25_n183(x)
+ end
+end
+
+def fun_l24_n937(x)
+ if (x < 1)
+ fun_l25_n365(x)
+ else
+ fun_l25_n949(x)
+ end
+end
+
+def fun_l24_n938(x)
+ if (x < 1)
+ fun_l25_n672(x)
+ else
+ fun_l25_n417(x)
+ end
+end
+
+def fun_l24_n939(x)
+ if (x < 1)
+ fun_l25_n360(x)
+ else
+ fun_l25_n271(x)
+ end
+end
+
+def fun_l24_n940(x)
+ if (x < 1)
+ fun_l25_n654(x)
+ else
+ fun_l25_n365(x)
+ end
+end
+
+def fun_l24_n941(x)
+ if (x < 1)
+ fun_l25_n836(x)
+ else
+ fun_l25_n303(x)
+ end
+end
+
+def fun_l24_n942(x)
+ if (x < 1)
+ fun_l25_n299(x)
+ else
+ fun_l25_n130(x)
+ end
+end
+
+def fun_l24_n943(x)
+ if (x < 1)
+ fun_l25_n566(x)
+ else
+ fun_l25_n347(x)
+ end
+end
+
+def fun_l24_n944(x)
+ if (x < 1)
+ fun_l25_n754(x)
+ else
+ fun_l25_n670(x)
+ end
+end
+
+def fun_l24_n945(x)
+ if (x < 1)
+ fun_l25_n484(x)
+ else
+ fun_l25_n278(x)
+ end
+end
+
+def fun_l24_n946(x)
+ if (x < 1)
+ fun_l25_n35(x)
+ else
+ fun_l25_n915(x)
+ end
+end
+
+def fun_l24_n947(x)
+ if (x < 1)
+ fun_l25_n488(x)
+ else
+ fun_l25_n664(x)
+ end
+end
+
+def fun_l24_n948(x)
+ if (x < 1)
+ fun_l25_n249(x)
+ else
+ fun_l25_n931(x)
+ end
+end
+
+def fun_l24_n949(x)
+ if (x < 1)
+ fun_l25_n165(x)
+ else
+ fun_l25_n101(x)
+ end
+end
+
+def fun_l24_n950(x)
+ if (x < 1)
+ fun_l25_n304(x)
+ else
+ fun_l25_n668(x)
+ end
+end
+
+def fun_l24_n951(x)
+ if (x < 1)
+ fun_l25_n279(x)
+ else
+ fun_l25_n600(x)
+ end
+end
+
+def fun_l24_n952(x)
+ if (x < 1)
+ fun_l25_n70(x)
+ else
+ fun_l25_n852(x)
+ end
+end
+
+def fun_l24_n953(x)
+ if (x < 1)
+ fun_l25_n419(x)
+ else
+ fun_l25_n856(x)
+ end
+end
+
+def fun_l24_n954(x)
+ if (x < 1)
+ fun_l25_n55(x)
+ else
+ fun_l25_n857(x)
+ end
+end
+
+def fun_l24_n955(x)
+ if (x < 1)
+ fun_l25_n122(x)
+ else
+ fun_l25_n658(x)
+ end
+end
+
+def fun_l24_n956(x)
+ if (x < 1)
+ fun_l25_n973(x)
+ else
+ fun_l25_n421(x)
+ end
+end
+
+def fun_l24_n957(x)
+ if (x < 1)
+ fun_l25_n82(x)
+ else
+ fun_l25_n264(x)
+ end
+end
+
+def fun_l24_n958(x)
+ if (x < 1)
+ fun_l25_n608(x)
+ else
+ fun_l25_n469(x)
+ end
+end
+
+def fun_l24_n959(x)
+ if (x < 1)
+ fun_l25_n823(x)
+ else
+ fun_l25_n320(x)
+ end
+end
+
+def fun_l24_n960(x)
+ if (x < 1)
+ fun_l25_n765(x)
+ else
+ fun_l25_n461(x)
+ end
+end
+
+def fun_l24_n961(x)
+ if (x < 1)
+ fun_l25_n343(x)
+ else
+ fun_l25_n18(x)
+ end
+end
+
+def fun_l24_n962(x)
+ if (x < 1)
+ fun_l25_n346(x)
+ else
+ fun_l25_n821(x)
+ end
+end
+
+def fun_l24_n963(x)
+ if (x < 1)
+ fun_l25_n80(x)
+ else
+ fun_l25_n949(x)
+ end
+end
+
+def fun_l24_n964(x)
+ if (x < 1)
+ fun_l25_n171(x)
+ else
+ fun_l25_n514(x)
+ end
+end
+
+def fun_l24_n965(x)
+ if (x < 1)
+ fun_l25_n625(x)
+ else
+ fun_l25_n768(x)
+ end
+end
+
+def fun_l24_n966(x)
+ if (x < 1)
+ fun_l25_n390(x)
+ else
+ fun_l25_n195(x)
+ end
+end
+
+def fun_l24_n967(x)
+ if (x < 1)
+ fun_l25_n774(x)
+ else
+ fun_l25_n928(x)
+ end
+end
+
+def fun_l24_n968(x)
+ if (x < 1)
+ fun_l25_n997(x)
+ else
+ fun_l25_n441(x)
+ end
+end
+
+def fun_l24_n969(x)
+ if (x < 1)
+ fun_l25_n865(x)
+ else
+ fun_l25_n418(x)
+ end
+end
+
+def fun_l24_n970(x)
+ if (x < 1)
+ fun_l25_n238(x)
+ else
+ fun_l25_n816(x)
+ end
+end
+
+def fun_l24_n971(x)
+ if (x < 1)
+ fun_l25_n521(x)
+ else
+ fun_l25_n427(x)
+ end
+end
+
+def fun_l24_n972(x)
+ if (x < 1)
+ fun_l25_n214(x)
+ else
+ fun_l25_n282(x)
+ end
+end
+
+def fun_l24_n973(x)
+ if (x < 1)
+ fun_l25_n611(x)
+ else
+ fun_l25_n439(x)
+ end
+end
+
+def fun_l24_n974(x)
+ if (x < 1)
+ fun_l25_n395(x)
+ else
+ fun_l25_n593(x)
+ end
+end
+
+def fun_l24_n975(x)
+ if (x < 1)
+ fun_l25_n720(x)
+ else
+ fun_l25_n477(x)
+ end
+end
+
+def fun_l24_n976(x)
+ if (x < 1)
+ fun_l25_n204(x)
+ else
+ fun_l25_n912(x)
+ end
+end
+
+def fun_l24_n977(x)
+ if (x < 1)
+ fun_l25_n703(x)
+ else
+ fun_l25_n651(x)
+ end
+end
+
+def fun_l24_n978(x)
+ if (x < 1)
+ fun_l25_n247(x)
+ else
+ fun_l25_n917(x)
+ end
+end
+
+def fun_l24_n979(x)
+ if (x < 1)
+ fun_l25_n792(x)
+ else
+ fun_l25_n320(x)
+ end
+end
+
+def fun_l24_n980(x)
+ if (x < 1)
+ fun_l25_n480(x)
+ else
+ fun_l25_n128(x)
+ end
+end
+
+def fun_l24_n981(x)
+ if (x < 1)
+ fun_l25_n848(x)
+ else
+ fun_l25_n344(x)
+ end
+end
+
+def fun_l24_n982(x)
+ if (x < 1)
+ fun_l25_n84(x)
+ else
+ fun_l25_n977(x)
+ end
+end
+
+def fun_l24_n983(x)
+ if (x < 1)
+ fun_l25_n213(x)
+ else
+ fun_l25_n131(x)
+ end
+end
+
+def fun_l24_n984(x)
+ if (x < 1)
+ fun_l25_n2(x)
+ else
+ fun_l25_n21(x)
+ end
+end
+
+def fun_l24_n985(x)
+ if (x < 1)
+ fun_l25_n301(x)
+ else
+ fun_l25_n910(x)
+ end
+end
+
+def fun_l24_n986(x)
+ if (x < 1)
+ fun_l25_n533(x)
+ else
+ fun_l25_n397(x)
+ end
+end
+
+def fun_l24_n987(x)
+ if (x < 1)
+ fun_l25_n226(x)
+ else
+ fun_l25_n281(x)
+ end
+end
+
+def fun_l24_n988(x)
+ if (x < 1)
+ fun_l25_n402(x)
+ else
+ fun_l25_n70(x)
+ end
+end
+
+def fun_l24_n989(x)
+ if (x < 1)
+ fun_l25_n190(x)
+ else
+ fun_l25_n70(x)
+ end
+end
+
+def fun_l24_n990(x)
+ if (x < 1)
+ fun_l25_n376(x)
+ else
+ fun_l25_n331(x)
+ end
+end
+
+def fun_l24_n991(x)
+ if (x < 1)
+ fun_l25_n915(x)
+ else
+ fun_l25_n234(x)
+ end
+end
+
+def fun_l24_n992(x)
+ if (x < 1)
+ fun_l25_n146(x)
+ else
+ fun_l25_n825(x)
+ end
+end
+
+def fun_l24_n993(x)
+ if (x < 1)
+ fun_l25_n877(x)
+ else
+ fun_l25_n237(x)
+ end
+end
+
+def fun_l24_n994(x)
+ if (x < 1)
+ fun_l25_n454(x)
+ else
+ fun_l25_n852(x)
+ end
+end
+
+def fun_l24_n995(x)
+ if (x < 1)
+ fun_l25_n45(x)
+ else
+ fun_l25_n337(x)
+ end
+end
+
+def fun_l24_n996(x)
+ if (x < 1)
+ fun_l25_n491(x)
+ else
+ fun_l25_n319(x)
+ end
+end
+
+def fun_l24_n997(x)
+ if (x < 1)
+ fun_l25_n216(x)
+ else
+ fun_l25_n249(x)
+ end
+end
+
+def fun_l24_n998(x)
+ if (x < 1)
+ fun_l25_n370(x)
+ else
+ fun_l25_n747(x)
+ end
+end
+
+def fun_l24_n999(x)
+ if (x < 1)
+ fun_l25_n584(x)
+ else
+ fun_l25_n813(x)
+ end
+end
+
+def fun_l25_n0(x)
+ if (x < 1)
+ fun_l26_n818(x)
+ else
+ fun_l26_n750(x)
+ end
+end
+
+def fun_l25_n1(x)
+ if (x < 1)
+ fun_l26_n725(x)
+ else
+ fun_l26_n848(x)
+ end
+end
+
+def fun_l25_n2(x)
+ if (x < 1)
+ fun_l26_n716(x)
+ else
+ fun_l26_n190(x)
+ end
+end
+
+def fun_l25_n3(x)
+ if (x < 1)
+ fun_l26_n977(x)
+ else
+ fun_l26_n222(x)
+ end
+end
+
+def fun_l25_n4(x)
+ if (x < 1)
+ fun_l26_n931(x)
+ else
+ fun_l26_n615(x)
+ end
+end
+
+def fun_l25_n5(x)
+ if (x < 1)
+ fun_l26_n720(x)
+ else
+ fun_l26_n440(x)
+ end
+end
+
+def fun_l25_n6(x)
+ if (x < 1)
+ fun_l26_n400(x)
+ else
+ fun_l26_n336(x)
+ end
+end
+
+def fun_l25_n7(x)
+ if (x < 1)
+ fun_l26_n109(x)
+ else
+ fun_l26_n74(x)
+ end
+end
+
+def fun_l25_n8(x)
+ if (x < 1)
+ fun_l26_n12(x)
+ else
+ fun_l26_n857(x)
+ end
+end
+
+def fun_l25_n9(x)
+ if (x < 1)
+ fun_l26_n778(x)
+ else
+ fun_l26_n286(x)
+ end
+end
+
+def fun_l25_n10(x)
+ if (x < 1)
+ fun_l26_n857(x)
+ else
+ fun_l26_n311(x)
+ end
+end
+
+def fun_l25_n11(x)
+ if (x < 1)
+ fun_l26_n204(x)
+ else
+ fun_l26_n348(x)
+ end
+end
+
+def fun_l25_n12(x)
+ if (x < 1)
+ fun_l26_n626(x)
+ else
+ fun_l26_n983(x)
+ end
+end
+
+def fun_l25_n13(x)
+ if (x < 1)
+ fun_l26_n417(x)
+ else
+ fun_l26_n334(x)
+ end
+end
+
+def fun_l25_n14(x)
+ if (x < 1)
+ fun_l26_n34(x)
+ else
+ fun_l26_n269(x)
+ end
+end
+
+def fun_l25_n15(x)
+ if (x < 1)
+ fun_l26_n184(x)
+ else
+ fun_l26_n183(x)
+ end
+end
+
+def fun_l25_n16(x)
+ if (x < 1)
+ fun_l26_n744(x)
+ else
+ fun_l26_n450(x)
+ end
+end
+
+def fun_l25_n17(x)
+ if (x < 1)
+ fun_l26_n763(x)
+ else
+ fun_l26_n390(x)
+ end
+end
+
+def fun_l25_n18(x)
+ if (x < 1)
+ fun_l26_n926(x)
+ else
+ fun_l26_n379(x)
+ end
+end
+
+def fun_l25_n19(x)
+ if (x < 1)
+ fun_l26_n746(x)
+ else
+ fun_l26_n946(x)
+ end
+end
+
+def fun_l25_n20(x)
+ if (x < 1)
+ fun_l26_n500(x)
+ else
+ fun_l26_n599(x)
+ end
+end
+
+def fun_l25_n21(x)
+ if (x < 1)
+ fun_l26_n757(x)
+ else
+ fun_l26_n725(x)
+ end
+end
+
+def fun_l25_n22(x)
+ if (x < 1)
+ fun_l26_n738(x)
+ else
+ fun_l26_n24(x)
+ end
+end
+
+def fun_l25_n23(x)
+ if (x < 1)
+ fun_l26_n350(x)
+ else
+ fun_l26_n344(x)
+ end
+end
+
+def fun_l25_n24(x)
+ if (x < 1)
+ fun_l26_n521(x)
+ else
+ fun_l26_n680(x)
+ end
+end
+
+def fun_l25_n25(x)
+ if (x < 1)
+ fun_l26_n647(x)
+ else
+ fun_l26_n604(x)
+ end
+end
+
+def fun_l25_n26(x)
+ if (x < 1)
+ fun_l26_n990(x)
+ else
+ fun_l26_n262(x)
+ end
+end
+
+def fun_l25_n27(x)
+ if (x < 1)
+ fun_l26_n309(x)
+ else
+ fun_l26_n759(x)
+ end
+end
+
+def fun_l25_n28(x)
+ if (x < 1)
+ fun_l26_n720(x)
+ else
+ fun_l26_n11(x)
+ end
+end
+
+def fun_l25_n29(x)
+ if (x < 1)
+ fun_l26_n761(x)
+ else
+ fun_l26_n690(x)
+ end
+end
+
+def fun_l25_n30(x)
+ if (x < 1)
+ fun_l26_n729(x)
+ else
+ fun_l26_n577(x)
+ end
+end
+
+def fun_l25_n31(x)
+ if (x < 1)
+ fun_l26_n321(x)
+ else
+ fun_l26_n608(x)
+ end
+end
+
+def fun_l25_n32(x)
+ if (x < 1)
+ fun_l26_n325(x)
+ else
+ fun_l26_n541(x)
+ end
+end
+
+def fun_l25_n33(x)
+ if (x < 1)
+ fun_l26_n644(x)
+ else
+ fun_l26_n15(x)
+ end
+end
+
+def fun_l25_n34(x)
+ if (x < 1)
+ fun_l26_n53(x)
+ else
+ fun_l26_n887(x)
+ end
+end
+
+def fun_l25_n35(x)
+ if (x < 1)
+ fun_l26_n470(x)
+ else
+ fun_l26_n564(x)
+ end
+end
+
+def fun_l25_n36(x)
+ if (x < 1)
+ fun_l26_n198(x)
+ else
+ fun_l26_n542(x)
+ end
+end
+
+def fun_l25_n37(x)
+ if (x < 1)
+ fun_l26_n455(x)
+ else
+ fun_l26_n373(x)
+ end
+end
+
+def fun_l25_n38(x)
+ if (x < 1)
+ fun_l26_n216(x)
+ else
+ fun_l26_n86(x)
+ end
+end
+
+def fun_l25_n39(x)
+ if (x < 1)
+ fun_l26_n417(x)
+ else
+ fun_l26_n50(x)
+ end
+end
+
+def fun_l25_n40(x)
+ if (x < 1)
+ fun_l26_n955(x)
+ else
+ fun_l26_n979(x)
+ end
+end
+
+def fun_l25_n41(x)
+ if (x < 1)
+ fun_l26_n692(x)
+ else
+ fun_l26_n935(x)
+ end
+end
+
+def fun_l25_n42(x)
+ if (x < 1)
+ fun_l26_n360(x)
+ else
+ fun_l26_n246(x)
+ end
+end
+
+def fun_l25_n43(x)
+ if (x < 1)
+ fun_l26_n826(x)
+ else
+ fun_l26_n433(x)
+ end
+end
+
+def fun_l25_n44(x)
+ if (x < 1)
+ fun_l26_n222(x)
+ else
+ fun_l26_n101(x)
+ end
+end
+
+def fun_l25_n45(x)
+ if (x < 1)
+ fun_l26_n590(x)
+ else
+ fun_l26_n398(x)
+ end
+end
+
+def fun_l25_n46(x)
+ if (x < 1)
+ fun_l26_n959(x)
+ else
+ fun_l26_n620(x)
+ end
+end
+
+def fun_l25_n47(x)
+ if (x < 1)
+ fun_l26_n530(x)
+ else
+ fun_l26_n503(x)
+ end
+end
+
+def fun_l25_n48(x)
+ if (x < 1)
+ fun_l26_n615(x)
+ else
+ fun_l26_n640(x)
+ end
+end
+
+def fun_l25_n49(x)
+ if (x < 1)
+ fun_l26_n774(x)
+ else
+ fun_l26_n23(x)
+ end
+end
+
+def fun_l25_n50(x)
+ if (x < 1)
+ fun_l26_n344(x)
+ else
+ fun_l26_n303(x)
+ end
+end
+
+def fun_l25_n51(x)
+ if (x < 1)
+ fun_l26_n54(x)
+ else
+ fun_l26_n26(x)
+ end
+end
+
+def fun_l25_n52(x)
+ if (x < 1)
+ fun_l26_n545(x)
+ else
+ fun_l26_n791(x)
+ end
+end
+
+def fun_l25_n53(x)
+ if (x < 1)
+ fun_l26_n554(x)
+ else
+ fun_l26_n42(x)
+ end
+end
+
+def fun_l25_n54(x)
+ if (x < 1)
+ fun_l26_n419(x)
+ else
+ fun_l26_n179(x)
+ end
+end
+
+def fun_l25_n55(x)
+ if (x < 1)
+ fun_l26_n845(x)
+ else
+ fun_l26_n641(x)
+ end
+end
+
+def fun_l25_n56(x)
+ if (x < 1)
+ fun_l26_n389(x)
+ else
+ fun_l26_n547(x)
+ end
+end
+
+def fun_l25_n57(x)
+ if (x < 1)
+ fun_l26_n744(x)
+ else
+ fun_l26_n946(x)
+ end
+end
+
+def fun_l25_n58(x)
+ if (x < 1)
+ fun_l26_n410(x)
+ else
+ fun_l26_n909(x)
+ end
+end
+
+def fun_l25_n59(x)
+ if (x < 1)
+ fun_l26_n126(x)
+ else
+ fun_l26_n382(x)
+ end
+end
+
+def fun_l25_n60(x)
+ if (x < 1)
+ fun_l26_n355(x)
+ else
+ fun_l26_n902(x)
+ end
+end
+
+def fun_l25_n61(x)
+ if (x < 1)
+ fun_l26_n759(x)
+ else
+ fun_l26_n445(x)
+ end
+end
+
+def fun_l25_n62(x)
+ if (x < 1)
+ fun_l26_n859(x)
+ else
+ fun_l26_n362(x)
+ end
+end
+
+def fun_l25_n63(x)
+ if (x < 1)
+ fun_l26_n488(x)
+ else
+ fun_l26_n725(x)
+ end
+end
+
+def fun_l25_n64(x)
+ if (x < 1)
+ fun_l26_n268(x)
+ else
+ fun_l26_n865(x)
+ end
+end
+
+def fun_l25_n65(x)
+ if (x < 1)
+ fun_l26_n33(x)
+ else
+ fun_l26_n417(x)
+ end
+end
+
+def fun_l25_n66(x)
+ if (x < 1)
+ fun_l26_n281(x)
+ else
+ fun_l26_n485(x)
+ end
+end
+
+def fun_l25_n67(x)
+ if (x < 1)
+ fun_l26_n627(x)
+ else
+ fun_l26_n200(x)
+ end
+end
+
+def fun_l25_n68(x)
+ if (x < 1)
+ fun_l26_n392(x)
+ else
+ fun_l26_n639(x)
+ end
+end
+
+def fun_l25_n69(x)
+ if (x < 1)
+ fun_l26_n799(x)
+ else
+ fun_l26_n242(x)
+ end
+end
+
+def fun_l25_n70(x)
+ if (x < 1)
+ fun_l26_n783(x)
+ else
+ fun_l26_n564(x)
+ end
+end
+
+def fun_l25_n71(x)
+ if (x < 1)
+ fun_l26_n768(x)
+ else
+ fun_l26_n908(x)
+ end
+end
+
+def fun_l25_n72(x)
+ if (x < 1)
+ fun_l26_n567(x)
+ else
+ fun_l26_n365(x)
+ end
+end
+
+def fun_l25_n73(x)
+ if (x < 1)
+ fun_l26_n291(x)
+ else
+ fun_l26_n887(x)
+ end
+end
+
+def fun_l25_n74(x)
+ if (x < 1)
+ fun_l26_n889(x)
+ else
+ fun_l26_n180(x)
+ end
+end
+
+def fun_l25_n75(x)
+ if (x < 1)
+ fun_l26_n142(x)
+ else
+ fun_l26_n101(x)
+ end
+end
+
+def fun_l25_n76(x)
+ if (x < 1)
+ fun_l26_n108(x)
+ else
+ fun_l26_n863(x)
+ end
+end
+
+def fun_l25_n77(x)
+ if (x < 1)
+ fun_l26_n441(x)
+ else
+ fun_l26_n51(x)
+ end
+end
+
+def fun_l25_n78(x)
+ if (x < 1)
+ fun_l26_n787(x)
+ else
+ fun_l26_n543(x)
+ end
+end
+
+def fun_l25_n79(x)
+ if (x < 1)
+ fun_l26_n699(x)
+ else
+ fun_l26_n513(x)
+ end
+end
+
+def fun_l25_n80(x)
+ if (x < 1)
+ fun_l26_n400(x)
+ else
+ fun_l26_n72(x)
+ end
+end
+
+def fun_l25_n81(x)
+ if (x < 1)
+ fun_l26_n814(x)
+ else
+ fun_l26_n732(x)
+ end
+end
+
+def fun_l25_n82(x)
+ if (x < 1)
+ fun_l26_n755(x)
+ else
+ fun_l26_n606(x)
+ end
+end
+
+def fun_l25_n83(x)
+ if (x < 1)
+ fun_l26_n351(x)
+ else
+ fun_l26_n208(x)
+ end
+end
+
+def fun_l25_n84(x)
+ if (x < 1)
+ fun_l26_n124(x)
+ else
+ fun_l26_n554(x)
+ end
+end
+
+def fun_l25_n85(x)
+ if (x < 1)
+ fun_l26_n19(x)
+ else
+ fun_l26_n58(x)
+ end
+end
+
+def fun_l25_n86(x)
+ if (x < 1)
+ fun_l26_n710(x)
+ else
+ fun_l26_n300(x)
+ end
+end
+
+def fun_l25_n87(x)
+ if (x < 1)
+ fun_l26_n833(x)
+ else
+ fun_l26_n53(x)
+ end
+end
+
+def fun_l25_n88(x)
+ if (x < 1)
+ fun_l26_n923(x)
+ else
+ fun_l26_n445(x)
+ end
+end
+
+def fun_l25_n89(x)
+ if (x < 1)
+ fun_l26_n674(x)
+ else
+ fun_l26_n176(x)
+ end
+end
+
+def fun_l25_n90(x)
+ if (x < 1)
+ fun_l26_n78(x)
+ else
+ fun_l26_n506(x)
+ end
+end
+
+def fun_l25_n91(x)
+ if (x < 1)
+ fun_l26_n352(x)
+ else
+ fun_l26_n312(x)
+ end
+end
+
+def fun_l25_n92(x)
+ if (x < 1)
+ fun_l26_n400(x)
+ else
+ fun_l26_n787(x)
+ end
+end
+
+def fun_l25_n93(x)
+ if (x < 1)
+ fun_l26_n897(x)
+ else
+ fun_l26_n395(x)
+ end
+end
+
+def fun_l25_n94(x)
+ if (x < 1)
+ fun_l26_n267(x)
+ else
+ fun_l26_n974(x)
+ end
+end
+
+def fun_l25_n95(x)
+ if (x < 1)
+ fun_l26_n547(x)
+ else
+ fun_l26_n280(x)
+ end
+end
+
+def fun_l25_n96(x)
+ if (x < 1)
+ fun_l26_n281(x)
+ else
+ fun_l26_n222(x)
+ end
+end
+
+def fun_l25_n97(x)
+ if (x < 1)
+ fun_l26_n130(x)
+ else
+ fun_l26_n232(x)
+ end
+end
+
+def fun_l25_n98(x)
+ if (x < 1)
+ fun_l26_n863(x)
+ else
+ fun_l26_n970(x)
+ end
+end
+
+def fun_l25_n99(x)
+ if (x < 1)
+ fun_l26_n28(x)
+ else
+ fun_l26_n344(x)
+ end
+end
+
+def fun_l25_n100(x)
+ if (x < 1)
+ fun_l26_n906(x)
+ else
+ fun_l26_n818(x)
+ end
+end
+
+def fun_l25_n101(x)
+ if (x < 1)
+ fun_l26_n658(x)
+ else
+ fun_l26_n708(x)
+ end
+end
+
+def fun_l25_n102(x)
+ if (x < 1)
+ fun_l26_n545(x)
+ else
+ fun_l26_n627(x)
+ end
+end
+
+def fun_l25_n103(x)
+ if (x < 1)
+ fun_l26_n377(x)
+ else
+ fun_l26_n555(x)
+ end
+end
+
+def fun_l25_n104(x)
+ if (x < 1)
+ fun_l26_n628(x)
+ else
+ fun_l26_n465(x)
+ end
+end
+
+def fun_l25_n105(x)
+ if (x < 1)
+ fun_l26_n208(x)
+ else
+ fun_l26_n720(x)
+ end
+end
+
+def fun_l25_n106(x)
+ if (x < 1)
+ fun_l26_n203(x)
+ else
+ fun_l26_n984(x)
+ end
+end
+
+def fun_l25_n107(x)
+ if (x < 1)
+ fun_l26_n265(x)
+ else
+ fun_l26_n124(x)
+ end
+end
+
+def fun_l25_n108(x)
+ if (x < 1)
+ fun_l26_n786(x)
+ else
+ fun_l26_n305(x)
+ end
+end
+
+def fun_l25_n109(x)
+ if (x < 1)
+ fun_l26_n907(x)
+ else
+ fun_l26_n57(x)
+ end
+end
+
+def fun_l25_n110(x)
+ if (x < 1)
+ fun_l26_n883(x)
+ else
+ fun_l26_n107(x)
+ end
+end
+
+def fun_l25_n111(x)
+ if (x < 1)
+ fun_l26_n783(x)
+ else
+ fun_l26_n443(x)
+ end
+end
+
+def fun_l25_n112(x)
+ if (x < 1)
+ fun_l26_n309(x)
+ else
+ fun_l26_n127(x)
+ end
+end
+
+def fun_l25_n113(x)
+ if (x < 1)
+ fun_l26_n578(x)
+ else
+ fun_l26_n656(x)
+ end
+end
+
+def fun_l25_n114(x)
+ if (x < 1)
+ fun_l26_n352(x)
+ else
+ fun_l26_n610(x)
+ end
+end
+
+def fun_l25_n115(x)
+ if (x < 1)
+ fun_l26_n975(x)
+ else
+ fun_l26_n580(x)
+ end
+end
+
+def fun_l25_n116(x)
+ if (x < 1)
+ fun_l26_n892(x)
+ else
+ fun_l26_n596(x)
+ end
+end
+
+def fun_l25_n117(x)
+ if (x < 1)
+ fun_l26_n80(x)
+ else
+ fun_l26_n759(x)
+ end
+end
+
+def fun_l25_n118(x)
+ if (x < 1)
+ fun_l26_n866(x)
+ else
+ fun_l26_n964(x)
+ end
+end
+
+def fun_l25_n119(x)
+ if (x < 1)
+ fun_l26_n367(x)
+ else
+ fun_l26_n896(x)
+ end
+end
+
+def fun_l25_n120(x)
+ if (x < 1)
+ fun_l26_n787(x)
+ else
+ fun_l26_n17(x)
+ end
+end
+
+def fun_l25_n121(x)
+ if (x < 1)
+ fun_l26_n312(x)
+ else
+ fun_l26_n247(x)
+ end
+end
+
+def fun_l25_n122(x)
+ if (x < 1)
+ fun_l26_n163(x)
+ else
+ fun_l26_n906(x)
+ end
+end
+
+def fun_l25_n123(x)
+ if (x < 1)
+ fun_l26_n706(x)
+ else
+ fun_l26_n840(x)
+ end
+end
+
+def fun_l25_n124(x)
+ if (x < 1)
+ fun_l26_n85(x)
+ else
+ fun_l26_n200(x)
+ end
+end
+
+def fun_l25_n125(x)
+ if (x < 1)
+ fun_l26_n389(x)
+ else
+ fun_l26_n274(x)
+ end
+end
+
+def fun_l25_n126(x)
+ if (x < 1)
+ fun_l26_n509(x)
+ else
+ fun_l26_n471(x)
+ end
+end
+
+def fun_l25_n127(x)
+ if (x < 1)
+ fun_l26_n924(x)
+ else
+ fun_l26_n132(x)
+ end
+end
+
+def fun_l25_n128(x)
+ if (x < 1)
+ fun_l26_n496(x)
+ else
+ fun_l26_n865(x)
+ end
+end
+
+def fun_l25_n129(x)
+ if (x < 1)
+ fun_l26_n775(x)
+ else
+ fun_l26_n22(x)
+ end
+end
+
+def fun_l25_n130(x)
+ if (x < 1)
+ fun_l26_n875(x)
+ else
+ fun_l26_n771(x)
+ end
+end
+
+def fun_l25_n131(x)
+ if (x < 1)
+ fun_l26_n656(x)
+ else
+ fun_l26_n709(x)
+ end
+end
+
+def fun_l25_n132(x)
+ if (x < 1)
+ fun_l26_n733(x)
+ else
+ fun_l26_n343(x)
+ end
+end
+
+def fun_l25_n133(x)
+ if (x < 1)
+ fun_l26_n791(x)
+ else
+ fun_l26_n954(x)
+ end
+end
+
+def fun_l25_n134(x)
+ if (x < 1)
+ fun_l26_n792(x)
+ else
+ fun_l26_n118(x)
+ end
+end
+
+def fun_l25_n135(x)
+ if (x < 1)
+ fun_l26_n93(x)
+ else
+ fun_l26_n683(x)
+ end
+end
+
+def fun_l25_n136(x)
+ if (x < 1)
+ fun_l26_n290(x)
+ else
+ fun_l26_n787(x)
+ end
+end
+
+def fun_l25_n137(x)
+ if (x < 1)
+ fun_l26_n459(x)
+ else
+ fun_l26_n283(x)
+ end
+end
+
+def fun_l25_n138(x)
+ if (x < 1)
+ fun_l26_n240(x)
+ else
+ fun_l26_n552(x)
+ end
+end
+
+def fun_l25_n139(x)
+ if (x < 1)
+ fun_l26_n323(x)
+ else
+ fun_l26_n157(x)
+ end
+end
+
+def fun_l25_n140(x)
+ if (x < 1)
+ fun_l26_n926(x)
+ else
+ fun_l26_n446(x)
+ end
+end
+
+def fun_l25_n141(x)
+ if (x < 1)
+ fun_l26_n382(x)
+ else
+ fun_l26_n317(x)
+ end
+end
+
+def fun_l25_n142(x)
+ if (x < 1)
+ fun_l26_n296(x)
+ else
+ fun_l26_n672(x)
+ end
+end
+
+def fun_l25_n143(x)
+ if (x < 1)
+ fun_l26_n313(x)
+ else
+ fun_l26_n222(x)
+ end
+end
+
+def fun_l25_n144(x)
+ if (x < 1)
+ fun_l26_n25(x)
+ else
+ fun_l26_n260(x)
+ end
+end
+
+def fun_l25_n145(x)
+ if (x < 1)
+ fun_l26_n457(x)
+ else
+ fun_l26_n876(x)
+ end
+end
+
+def fun_l25_n146(x)
+ if (x < 1)
+ fun_l26_n503(x)
+ else
+ fun_l26_n850(x)
+ end
+end
+
+def fun_l25_n147(x)
+ if (x < 1)
+ fun_l26_n811(x)
+ else
+ fun_l26_n293(x)
+ end
+end
+
+def fun_l25_n148(x)
+ if (x < 1)
+ fun_l26_n433(x)
+ else
+ fun_l26_n582(x)
+ end
+end
+
+def fun_l25_n149(x)
+ if (x < 1)
+ fun_l26_n860(x)
+ else
+ fun_l26_n663(x)
+ end
+end
+
+def fun_l25_n150(x)
+ if (x < 1)
+ fun_l26_n293(x)
+ else
+ fun_l26_n341(x)
+ end
+end
+
+def fun_l25_n151(x)
+ if (x < 1)
+ fun_l26_n187(x)
+ else
+ fun_l26_n430(x)
+ end
+end
+
+def fun_l25_n152(x)
+ if (x < 1)
+ fun_l26_n914(x)
+ else
+ fun_l26_n250(x)
+ end
+end
+
+def fun_l25_n153(x)
+ if (x < 1)
+ fun_l26_n370(x)
+ else
+ fun_l26_n378(x)
+ end
+end
+
+def fun_l25_n154(x)
+ if (x < 1)
+ fun_l26_n238(x)
+ else
+ fun_l26_n743(x)
+ end
+end
+
+def fun_l25_n155(x)
+ if (x < 1)
+ fun_l26_n149(x)
+ else
+ fun_l26_n556(x)
+ end
+end
+
+def fun_l25_n156(x)
+ if (x < 1)
+ fun_l26_n530(x)
+ else
+ fun_l26_n543(x)
+ end
+end
+
+def fun_l25_n157(x)
+ if (x < 1)
+ fun_l26_n230(x)
+ else
+ fun_l26_n600(x)
+ end
+end
+
+def fun_l25_n158(x)
+ if (x < 1)
+ fun_l26_n110(x)
+ else
+ fun_l26_n954(x)
+ end
+end
+
+def fun_l25_n159(x)
+ if (x < 1)
+ fun_l26_n952(x)
+ else
+ fun_l26_n110(x)
+ end
+end
+
+def fun_l25_n160(x)
+ if (x < 1)
+ fun_l26_n525(x)
+ else
+ fun_l26_n435(x)
+ end
+end
+
+def fun_l25_n161(x)
+ if (x < 1)
+ fun_l26_n511(x)
+ else
+ fun_l26_n10(x)
+ end
+end
+
+def fun_l25_n162(x)
+ if (x < 1)
+ fun_l26_n755(x)
+ else
+ fun_l26_n567(x)
+ end
+end
+
+def fun_l25_n163(x)
+ if (x < 1)
+ fun_l26_n618(x)
+ else
+ fun_l26_n249(x)
+ end
+end
+
+def fun_l25_n164(x)
+ if (x < 1)
+ fun_l26_n803(x)
+ else
+ fun_l26_n512(x)
+ end
+end
+
+def fun_l25_n165(x)
+ if (x < 1)
+ fun_l26_n234(x)
+ else
+ fun_l26_n806(x)
+ end
+end
+
+def fun_l25_n166(x)
+ if (x < 1)
+ fun_l26_n442(x)
+ else
+ fun_l26_n904(x)
+ end
+end
+
+def fun_l25_n167(x)
+ if (x < 1)
+ fun_l26_n369(x)
+ else
+ fun_l26_n910(x)
+ end
+end
+
+def fun_l25_n168(x)
+ if (x < 1)
+ fun_l26_n107(x)
+ else
+ fun_l26_n125(x)
+ end
+end
+
+def fun_l25_n169(x)
+ if (x < 1)
+ fun_l26_n415(x)
+ else
+ fun_l26_n37(x)
+ end
+end
+
+def fun_l25_n170(x)
+ if (x < 1)
+ fun_l26_n315(x)
+ else
+ fun_l26_n977(x)
+ end
+end
+
+def fun_l25_n171(x)
+ if (x < 1)
+ fun_l26_n106(x)
+ else
+ fun_l26_n908(x)
+ end
+end
+
+def fun_l25_n172(x)
+ if (x < 1)
+ fun_l26_n870(x)
+ else
+ fun_l26_n74(x)
+ end
+end
+
+def fun_l25_n173(x)
+ if (x < 1)
+ fun_l26_n290(x)
+ else
+ fun_l26_n938(x)
+ end
+end
+
+def fun_l25_n174(x)
+ if (x < 1)
+ fun_l26_n908(x)
+ else
+ fun_l26_n215(x)
+ end
+end
+
+def fun_l25_n175(x)
+ if (x < 1)
+ fun_l26_n671(x)
+ else
+ fun_l26_n976(x)
+ end
+end
+
+def fun_l25_n176(x)
+ if (x < 1)
+ fun_l26_n727(x)
+ else
+ fun_l26_n559(x)
+ end
+end
+
+def fun_l25_n177(x)
+ if (x < 1)
+ fun_l26_n684(x)
+ else
+ fun_l26_n353(x)
+ end
+end
+
+def fun_l25_n178(x)
+ if (x < 1)
+ fun_l26_n353(x)
+ else
+ fun_l26_n327(x)
+ end
+end
+
+def fun_l25_n179(x)
+ if (x < 1)
+ fun_l26_n393(x)
+ else
+ fun_l26_n774(x)
+ end
+end
+
+def fun_l25_n180(x)
+ if (x < 1)
+ fun_l26_n500(x)
+ else
+ fun_l26_n23(x)
+ end
+end
+
+def fun_l25_n181(x)
+ if (x < 1)
+ fun_l26_n49(x)
+ else
+ fun_l26_n504(x)
+ end
+end
+
+def fun_l25_n182(x)
+ if (x < 1)
+ fun_l26_n631(x)
+ else
+ fun_l26_n147(x)
+ end
+end
+
+def fun_l25_n183(x)
+ if (x < 1)
+ fun_l26_n353(x)
+ else
+ fun_l26_n64(x)
+ end
+end
+
+def fun_l25_n184(x)
+ if (x < 1)
+ fun_l26_n215(x)
+ else
+ fun_l26_n416(x)
+ end
+end
+
+def fun_l25_n185(x)
+ if (x < 1)
+ fun_l26_n701(x)
+ else
+ fun_l26_n809(x)
+ end
+end
+
+def fun_l25_n186(x)
+ if (x < 1)
+ fun_l26_n267(x)
+ else
+ fun_l26_n197(x)
+ end
+end
+
+def fun_l25_n187(x)
+ if (x < 1)
+ fun_l26_n436(x)
+ else
+ fun_l26_n609(x)
+ end
+end
+
+def fun_l25_n188(x)
+ if (x < 1)
+ fun_l26_n993(x)
+ else
+ fun_l26_n740(x)
+ end
+end
+
+def fun_l25_n189(x)
+ if (x < 1)
+ fun_l26_n742(x)
+ else
+ fun_l26_n507(x)
+ end
+end
+
+def fun_l25_n190(x)
+ if (x < 1)
+ fun_l26_n850(x)
+ else
+ fun_l26_n394(x)
+ end
+end
+
+def fun_l25_n191(x)
+ if (x < 1)
+ fun_l26_n494(x)
+ else
+ fun_l26_n219(x)
+ end
+end
+
+def fun_l25_n192(x)
+ if (x < 1)
+ fun_l26_n477(x)
+ else
+ fun_l26_n115(x)
+ end
+end
+
+def fun_l25_n193(x)
+ if (x < 1)
+ fun_l26_n629(x)
+ else
+ fun_l26_n772(x)
+ end
+end
+
+def fun_l25_n194(x)
+ if (x < 1)
+ fun_l26_n995(x)
+ else
+ fun_l26_n75(x)
+ end
+end
+
+def fun_l25_n195(x)
+ if (x < 1)
+ fun_l26_n34(x)
+ else
+ fun_l26_n590(x)
+ end
+end
+
+def fun_l25_n196(x)
+ if (x < 1)
+ fun_l26_n767(x)
+ else
+ fun_l26_n468(x)
+ end
+end
+
+def fun_l25_n197(x)
+ if (x < 1)
+ fun_l26_n883(x)
+ else
+ fun_l26_n757(x)
+ end
+end
+
+def fun_l25_n198(x)
+ if (x < 1)
+ fun_l26_n687(x)
+ else
+ fun_l26_n288(x)
+ end
+end
+
+def fun_l25_n199(x)
+ if (x < 1)
+ fun_l26_n328(x)
+ else
+ fun_l26_n556(x)
+ end
+end
+
+def fun_l25_n200(x)
+ if (x < 1)
+ fun_l26_n894(x)
+ else
+ fun_l26_n854(x)
+ end
+end
+
+def fun_l25_n201(x)
+ if (x < 1)
+ fun_l26_n343(x)
+ else
+ fun_l26_n889(x)
+ end
+end
+
+def fun_l25_n202(x)
+ if (x < 1)
+ fun_l26_n430(x)
+ else
+ fun_l26_n935(x)
+ end
+end
+
+def fun_l25_n203(x)
+ if (x < 1)
+ fun_l26_n384(x)
+ else
+ fun_l26_n37(x)
+ end
+end
+
+def fun_l25_n204(x)
+ if (x < 1)
+ fun_l26_n821(x)
+ else
+ fun_l26_n509(x)
+ end
+end
+
+def fun_l25_n205(x)
+ if (x < 1)
+ fun_l26_n985(x)
+ else
+ fun_l26_n877(x)
+ end
+end
+
+def fun_l25_n206(x)
+ if (x < 1)
+ fun_l26_n184(x)
+ else
+ fun_l26_n568(x)
+ end
+end
+
+def fun_l25_n207(x)
+ if (x < 1)
+ fun_l26_n753(x)
+ else
+ fun_l26_n922(x)
+ end
+end
+
+def fun_l25_n208(x)
+ if (x < 1)
+ fun_l26_n454(x)
+ else
+ fun_l26_n499(x)
+ end
+end
+
+def fun_l25_n209(x)
+ if (x < 1)
+ fun_l26_n695(x)
+ else
+ fun_l26_n181(x)
+ end
+end
+
+def fun_l25_n210(x)
+ if (x < 1)
+ fun_l26_n139(x)
+ else
+ fun_l26_n456(x)
+ end
+end
+
+def fun_l25_n211(x)
+ if (x < 1)
+ fun_l26_n745(x)
+ else
+ fun_l26_n447(x)
+ end
+end
+
+def fun_l25_n212(x)
+ if (x < 1)
+ fun_l26_n785(x)
+ else
+ fun_l26_n946(x)
+ end
+end
+
+def fun_l25_n213(x)
+ if (x < 1)
+ fun_l26_n161(x)
+ else
+ fun_l26_n283(x)
+ end
+end
+
+def fun_l25_n214(x)
+ if (x < 1)
+ fun_l26_n16(x)
+ else
+ fun_l26_n450(x)
+ end
+end
+
+def fun_l25_n215(x)
+ if (x < 1)
+ fun_l26_n818(x)
+ else
+ fun_l26_n2(x)
+ end
+end
+
+def fun_l25_n216(x)
+ if (x < 1)
+ fun_l26_n242(x)
+ else
+ fun_l26_n691(x)
+ end
+end
+
+def fun_l25_n217(x)
+ if (x < 1)
+ fun_l26_n18(x)
+ else
+ fun_l26_n522(x)
+ end
+end
+
+def fun_l25_n218(x)
+ if (x < 1)
+ fun_l26_n87(x)
+ else
+ fun_l26_n888(x)
+ end
+end
+
+def fun_l25_n219(x)
+ if (x < 1)
+ fun_l26_n317(x)
+ else
+ fun_l26_n593(x)
+ end
+end
+
+def fun_l25_n220(x)
+ if (x < 1)
+ fun_l26_n650(x)
+ else
+ fun_l26_n258(x)
+ end
+end
+
+def fun_l25_n221(x)
+ if (x < 1)
+ fun_l26_n381(x)
+ else
+ fun_l26_n500(x)
+ end
+end
+
+def fun_l25_n222(x)
+ if (x < 1)
+ fun_l26_n607(x)
+ else
+ fun_l26_n138(x)
+ end
+end
+
+def fun_l25_n223(x)
+ if (x < 1)
+ fun_l26_n595(x)
+ else
+ fun_l26_n657(x)
+ end
+end
+
+def fun_l25_n224(x)
+ if (x < 1)
+ fun_l26_n166(x)
+ else
+ fun_l26_n420(x)
+ end
+end
+
+def fun_l25_n225(x)
+ if (x < 1)
+ fun_l26_n744(x)
+ else
+ fun_l26_n684(x)
+ end
+end
+
+def fun_l25_n226(x)
+ if (x < 1)
+ fun_l26_n225(x)
+ else
+ fun_l26_n264(x)
+ end
+end
+
+def fun_l25_n227(x)
+ if (x < 1)
+ fun_l26_n140(x)
+ else
+ fun_l26_n387(x)
+ end
+end
+
+def fun_l25_n228(x)
+ if (x < 1)
+ fun_l26_n563(x)
+ else
+ fun_l26_n83(x)
+ end
+end
+
+def fun_l25_n229(x)
+ if (x < 1)
+ fun_l26_n392(x)
+ else
+ fun_l26_n130(x)
+ end
+end
+
+def fun_l25_n230(x)
+ if (x < 1)
+ fun_l26_n687(x)
+ else
+ fun_l26_n970(x)
+ end
+end
+
+def fun_l25_n231(x)
+ if (x < 1)
+ fun_l26_n328(x)
+ else
+ fun_l26_n809(x)
+ end
+end
+
+def fun_l25_n232(x)
+ if (x < 1)
+ fun_l26_n963(x)
+ else
+ fun_l26_n429(x)
+ end
+end
+
+def fun_l25_n233(x)
+ if (x < 1)
+ fun_l26_n290(x)
+ else
+ fun_l26_n131(x)
+ end
+end
+
+def fun_l25_n234(x)
+ if (x < 1)
+ fun_l26_n877(x)
+ else
+ fun_l26_n729(x)
+ end
+end
+
+def fun_l25_n235(x)
+ if (x < 1)
+ fun_l26_n916(x)
+ else
+ fun_l26_n694(x)
+ end
+end
+
+def fun_l25_n236(x)
+ if (x < 1)
+ fun_l26_n901(x)
+ else
+ fun_l26_n226(x)
+ end
+end
+
+def fun_l25_n237(x)
+ if (x < 1)
+ fun_l26_n65(x)
+ else
+ fun_l26_n748(x)
+ end
+end
+
+def fun_l25_n238(x)
+ if (x < 1)
+ fun_l26_n171(x)
+ else
+ fun_l26_n858(x)
+ end
+end
+
+def fun_l25_n239(x)
+ if (x < 1)
+ fun_l26_n391(x)
+ else
+ fun_l26_n809(x)
+ end
+end
+
+def fun_l25_n240(x)
+ if (x < 1)
+ fun_l26_n336(x)
+ else
+ fun_l26_n391(x)
+ end
+end
+
+def fun_l25_n241(x)
+ if (x < 1)
+ fun_l26_n418(x)
+ else
+ fun_l26_n133(x)
+ end
+end
+
+def fun_l25_n242(x)
+ if (x < 1)
+ fun_l26_n617(x)
+ else
+ fun_l26_n283(x)
+ end
+end
+
+def fun_l25_n243(x)
+ if (x < 1)
+ fun_l26_n962(x)
+ else
+ fun_l26_n763(x)
+ end
+end
+
+def fun_l25_n244(x)
+ if (x < 1)
+ fun_l26_n34(x)
+ else
+ fun_l26_n629(x)
+ end
+end
+
+def fun_l25_n245(x)
+ if (x < 1)
+ fun_l26_n444(x)
+ else
+ fun_l26_n271(x)
+ end
+end
+
+def fun_l25_n246(x)
+ if (x < 1)
+ fun_l26_n478(x)
+ else
+ fun_l26_n541(x)
+ end
+end
+
+def fun_l25_n247(x)
+ if (x < 1)
+ fun_l26_n796(x)
+ else
+ fun_l26_n673(x)
+ end
+end
+
+def fun_l25_n248(x)
+ if (x < 1)
+ fun_l26_n400(x)
+ else
+ fun_l26_n602(x)
+ end
+end
+
+def fun_l25_n249(x)
+ if (x < 1)
+ fun_l26_n70(x)
+ else
+ fun_l26_n796(x)
+ end
+end
+
+def fun_l25_n250(x)
+ if (x < 1)
+ fun_l26_n187(x)
+ else
+ fun_l26_n602(x)
+ end
+end
+
+def fun_l25_n251(x)
+ if (x < 1)
+ fun_l26_n29(x)
+ else
+ fun_l26_n283(x)
+ end
+end
+
+def fun_l25_n252(x)
+ if (x < 1)
+ fun_l26_n49(x)
+ else
+ fun_l26_n522(x)
+ end
+end
+
+def fun_l25_n253(x)
+ if (x < 1)
+ fun_l26_n998(x)
+ else
+ fun_l26_n986(x)
+ end
+end
+
+def fun_l25_n254(x)
+ if (x < 1)
+ fun_l26_n586(x)
+ else
+ fun_l26_n566(x)
+ end
+end
+
+def fun_l25_n255(x)
+ if (x < 1)
+ fun_l26_n474(x)
+ else
+ fun_l26_n279(x)
+ end
+end
+
+def fun_l25_n256(x)
+ if (x < 1)
+ fun_l26_n769(x)
+ else
+ fun_l26_n240(x)
+ end
+end
+
+def fun_l25_n257(x)
+ if (x < 1)
+ fun_l26_n212(x)
+ else
+ fun_l26_n512(x)
+ end
+end
+
+def fun_l25_n258(x)
+ if (x < 1)
+ fun_l26_n980(x)
+ else
+ fun_l26_n715(x)
+ end
+end
+
+def fun_l25_n259(x)
+ if (x < 1)
+ fun_l26_n237(x)
+ else
+ fun_l26_n355(x)
+ end
+end
+
+def fun_l25_n260(x)
+ if (x < 1)
+ fun_l26_n406(x)
+ else
+ fun_l26_n584(x)
+ end
+end
+
+def fun_l25_n261(x)
+ if (x < 1)
+ fun_l26_n632(x)
+ else
+ fun_l26_n28(x)
+ end
+end
+
+def fun_l25_n262(x)
+ if (x < 1)
+ fun_l26_n481(x)
+ else
+ fun_l26_n303(x)
+ end
+end
+
+def fun_l25_n263(x)
+ if (x < 1)
+ fun_l26_n676(x)
+ else
+ fun_l26_n220(x)
+ end
+end
+
+def fun_l25_n264(x)
+ if (x < 1)
+ fun_l26_n757(x)
+ else
+ fun_l26_n58(x)
+ end
+end
+
+def fun_l25_n265(x)
+ if (x < 1)
+ fun_l26_n525(x)
+ else
+ fun_l26_n168(x)
+ end
+end
+
+def fun_l25_n266(x)
+ if (x < 1)
+ fun_l26_n832(x)
+ else
+ fun_l26_n754(x)
+ end
+end
+
+def fun_l25_n267(x)
+ if (x < 1)
+ fun_l26_n723(x)
+ else
+ fun_l26_n830(x)
+ end
+end
+
+def fun_l25_n268(x)
+ if (x < 1)
+ fun_l26_n171(x)
+ else
+ fun_l26_n411(x)
+ end
+end
+
+def fun_l25_n269(x)
+ if (x < 1)
+ fun_l26_n150(x)
+ else
+ fun_l26_n360(x)
+ end
+end
+
+def fun_l25_n270(x)
+ if (x < 1)
+ fun_l26_n401(x)
+ else
+ fun_l26_n767(x)
+ end
+end
+
+def fun_l25_n271(x)
+ if (x < 1)
+ fun_l26_n462(x)
+ else
+ fun_l26_n305(x)
+ end
+end
+
+def fun_l25_n272(x)
+ if (x < 1)
+ fun_l26_n989(x)
+ else
+ fun_l26_n780(x)
+ end
+end
+
+def fun_l25_n273(x)
+ if (x < 1)
+ fun_l26_n2(x)
+ else
+ fun_l26_n735(x)
+ end
+end
+
+def fun_l25_n274(x)
+ if (x < 1)
+ fun_l26_n646(x)
+ else
+ fun_l26_n30(x)
+ end
+end
+
+def fun_l25_n275(x)
+ if (x < 1)
+ fun_l26_n197(x)
+ else
+ fun_l26_n262(x)
+ end
+end
+
+def fun_l25_n276(x)
+ if (x < 1)
+ fun_l26_n647(x)
+ else
+ fun_l26_n715(x)
+ end
+end
+
+def fun_l25_n277(x)
+ if (x < 1)
+ fun_l26_n597(x)
+ else
+ fun_l26_n228(x)
+ end
+end
+
+def fun_l25_n278(x)
+ if (x < 1)
+ fun_l26_n880(x)
+ else
+ fun_l26_n324(x)
+ end
+end
+
+def fun_l25_n279(x)
+ if (x < 1)
+ fun_l26_n40(x)
+ else
+ fun_l26_n615(x)
+ end
+end
+
+def fun_l25_n280(x)
+ if (x < 1)
+ fun_l26_n697(x)
+ else
+ fun_l26_n671(x)
+ end
+end
+
+def fun_l25_n281(x)
+ if (x < 1)
+ fun_l26_n819(x)
+ else
+ fun_l26_n469(x)
+ end
+end
+
+def fun_l25_n282(x)
+ if (x < 1)
+ fun_l26_n427(x)
+ else
+ fun_l26_n295(x)
+ end
+end
+
+def fun_l25_n283(x)
+ if (x < 1)
+ fun_l26_n35(x)
+ else
+ fun_l26_n432(x)
+ end
+end
+
+def fun_l25_n284(x)
+ if (x < 1)
+ fun_l26_n691(x)
+ else
+ fun_l26_n846(x)
+ end
+end
+
+def fun_l25_n285(x)
+ if (x < 1)
+ fun_l26_n353(x)
+ else
+ fun_l26_n473(x)
+ end
+end
+
+def fun_l25_n286(x)
+ if (x < 1)
+ fun_l26_n959(x)
+ else
+ fun_l26_n608(x)
+ end
+end
+
+def fun_l25_n287(x)
+ if (x < 1)
+ fun_l26_n728(x)
+ else
+ fun_l26_n993(x)
+ end
+end
+
+def fun_l25_n288(x)
+ if (x < 1)
+ fun_l26_n836(x)
+ else
+ fun_l26_n587(x)
+ end
+end
+
+def fun_l25_n289(x)
+ if (x < 1)
+ fun_l26_n300(x)
+ else
+ fun_l26_n965(x)
+ end
+end
+
+def fun_l25_n290(x)
+ if (x < 1)
+ fun_l26_n925(x)
+ else
+ fun_l26_n180(x)
+ end
+end
+
+def fun_l25_n291(x)
+ if (x < 1)
+ fun_l26_n934(x)
+ else
+ fun_l26_n579(x)
+ end
+end
+
+def fun_l25_n292(x)
+ if (x < 1)
+ fun_l26_n97(x)
+ else
+ fun_l26_n33(x)
+ end
+end
+
+def fun_l25_n293(x)
+ if (x < 1)
+ fun_l26_n653(x)
+ else
+ fun_l26_n968(x)
+ end
+end
+
+def fun_l25_n294(x)
+ if (x < 1)
+ fun_l26_n264(x)
+ else
+ fun_l26_n68(x)
+ end
+end
+
+def fun_l25_n295(x)
+ if (x < 1)
+ fun_l26_n420(x)
+ else
+ fun_l26_n450(x)
+ end
+end
+
+def fun_l25_n296(x)
+ if (x < 1)
+ fun_l26_n200(x)
+ else
+ fun_l26_n599(x)
+ end
+end
+
+def fun_l25_n297(x)
+ if (x < 1)
+ fun_l26_n922(x)
+ else
+ fun_l26_n36(x)
+ end
+end
+
+def fun_l25_n298(x)
+ if (x < 1)
+ fun_l26_n741(x)
+ else
+ fun_l26_n743(x)
+ end
+end
+
+def fun_l25_n299(x)
+ if (x < 1)
+ fun_l26_n989(x)
+ else
+ fun_l26_n777(x)
+ end
+end
+
+def fun_l25_n300(x)
+ if (x < 1)
+ fun_l26_n600(x)
+ else
+ fun_l26_n228(x)
+ end
+end
+
+def fun_l25_n301(x)
+ if (x < 1)
+ fun_l26_n493(x)
+ else
+ fun_l26_n852(x)
+ end
+end
+
+def fun_l25_n302(x)
+ if (x < 1)
+ fun_l26_n552(x)
+ else
+ fun_l26_n305(x)
+ end
+end
+
+def fun_l25_n303(x)
+ if (x < 1)
+ fun_l26_n280(x)
+ else
+ fun_l26_n373(x)
+ end
+end
+
+def fun_l25_n304(x)
+ if (x < 1)
+ fun_l26_n379(x)
+ else
+ fun_l26_n877(x)
+ end
+end
+
+def fun_l25_n305(x)
+ if (x < 1)
+ fun_l26_n562(x)
+ else
+ fun_l26_n165(x)
+ end
+end
+
+def fun_l25_n306(x)
+ if (x < 1)
+ fun_l26_n890(x)
+ else
+ fun_l26_n24(x)
+ end
+end
+
+def fun_l25_n307(x)
+ if (x < 1)
+ fun_l26_n881(x)
+ else
+ fun_l26_n936(x)
+ end
+end
+
+def fun_l25_n308(x)
+ if (x < 1)
+ fun_l26_n31(x)
+ else
+ fun_l26_n851(x)
+ end
+end
+
+def fun_l25_n309(x)
+ if (x < 1)
+ fun_l26_n894(x)
+ else
+ fun_l26_n496(x)
+ end
+end
+
+def fun_l25_n310(x)
+ if (x < 1)
+ fun_l26_n477(x)
+ else
+ fun_l26_n436(x)
+ end
+end
+
+def fun_l25_n311(x)
+ if (x < 1)
+ fun_l26_n943(x)
+ else
+ fun_l26_n565(x)
+ end
+end
+
+def fun_l25_n312(x)
+ if (x < 1)
+ fun_l26_n795(x)
+ else
+ fun_l26_n416(x)
+ end
+end
+
+def fun_l25_n313(x)
+ if (x < 1)
+ fun_l26_n264(x)
+ else
+ fun_l26_n528(x)
+ end
+end
+
+def fun_l25_n314(x)
+ if (x < 1)
+ fun_l26_n269(x)
+ else
+ fun_l26_n666(x)
+ end
+end
+
+def fun_l25_n315(x)
+ if (x < 1)
+ fun_l26_n166(x)
+ else
+ fun_l26_n633(x)
+ end
+end
+
+def fun_l25_n316(x)
+ if (x < 1)
+ fun_l26_n463(x)
+ else
+ fun_l26_n82(x)
+ end
+end
+
+def fun_l25_n317(x)
+ if (x < 1)
+ fun_l26_n379(x)
+ else
+ fun_l26_n429(x)
+ end
+end
+
+def fun_l25_n318(x)
+ if (x < 1)
+ fun_l26_n538(x)
+ else
+ fun_l26_n714(x)
+ end
+end
+
+def fun_l25_n319(x)
+ if (x < 1)
+ fun_l26_n913(x)
+ else
+ fun_l26_n584(x)
+ end
+end
+
+def fun_l25_n320(x)
+ if (x < 1)
+ fun_l26_n833(x)
+ else
+ fun_l26_n887(x)
+ end
+end
+
+def fun_l25_n321(x)
+ if (x < 1)
+ fun_l26_n332(x)
+ else
+ fun_l26_n720(x)
+ end
+end
+
+def fun_l25_n322(x)
+ if (x < 1)
+ fun_l26_n409(x)
+ else
+ fun_l26_n924(x)
+ end
+end
+
+def fun_l25_n323(x)
+ if (x < 1)
+ fun_l26_n201(x)
+ else
+ fun_l26_n15(x)
+ end
+end
+
+def fun_l25_n324(x)
+ if (x < 1)
+ fun_l26_n454(x)
+ else
+ fun_l26_n348(x)
+ end
+end
+
+def fun_l25_n325(x)
+ if (x < 1)
+ fun_l26_n798(x)
+ else
+ fun_l26_n310(x)
+ end
+end
+
+def fun_l25_n326(x)
+ if (x < 1)
+ fun_l26_n70(x)
+ else
+ fun_l26_n973(x)
+ end
+end
+
+def fun_l25_n327(x)
+ if (x < 1)
+ fun_l26_n683(x)
+ else
+ fun_l26_n857(x)
+ end
+end
+
+def fun_l25_n328(x)
+ if (x < 1)
+ fun_l26_n885(x)
+ else
+ fun_l26_n855(x)
+ end
+end
+
+def fun_l25_n329(x)
+ if (x < 1)
+ fun_l26_n725(x)
+ else
+ fun_l26_n625(x)
+ end
+end
+
+def fun_l25_n330(x)
+ if (x < 1)
+ fun_l26_n960(x)
+ else
+ fun_l26_n710(x)
+ end
+end
+
+def fun_l25_n331(x)
+ if (x < 1)
+ fun_l26_n899(x)
+ else
+ fun_l26_n671(x)
+ end
+end
+
+def fun_l25_n332(x)
+ if (x < 1)
+ fun_l26_n743(x)
+ else
+ fun_l26_n541(x)
+ end
+end
+
+def fun_l25_n333(x)
+ if (x < 1)
+ fun_l26_n353(x)
+ else
+ fun_l26_n336(x)
+ end
+end
+
+def fun_l25_n334(x)
+ if (x < 1)
+ fun_l26_n53(x)
+ else
+ fun_l26_n422(x)
+ end
+end
+
+def fun_l25_n335(x)
+ if (x < 1)
+ fun_l26_n291(x)
+ else
+ fun_l26_n586(x)
+ end
+end
+
+def fun_l25_n336(x)
+ if (x < 1)
+ fun_l26_n395(x)
+ else
+ fun_l26_n716(x)
+ end
+end
+
+def fun_l25_n337(x)
+ if (x < 1)
+ fun_l26_n655(x)
+ else
+ fun_l26_n590(x)
+ end
+end
+
+def fun_l25_n338(x)
+ if (x < 1)
+ fun_l26_n443(x)
+ else
+ fun_l26_n680(x)
+ end
+end
+
+def fun_l25_n339(x)
+ if (x < 1)
+ fun_l26_n930(x)
+ else
+ fun_l26_n828(x)
+ end
+end
+
+def fun_l25_n340(x)
+ if (x < 1)
+ fun_l26_n488(x)
+ else
+ fun_l26_n514(x)
+ end
+end
+
+def fun_l25_n341(x)
+ if (x < 1)
+ fun_l26_n504(x)
+ else
+ fun_l26_n592(x)
+ end
+end
+
+def fun_l25_n342(x)
+ if (x < 1)
+ fun_l26_n695(x)
+ else
+ fun_l26_n945(x)
+ end
+end
+
+def fun_l25_n343(x)
+ if (x < 1)
+ fun_l26_n483(x)
+ else
+ fun_l26_n511(x)
+ end
+end
+
+def fun_l25_n344(x)
+ if (x < 1)
+ fun_l26_n958(x)
+ else
+ fun_l26_n316(x)
+ end
+end
+
+def fun_l25_n345(x)
+ if (x < 1)
+ fun_l26_n481(x)
+ else
+ fun_l26_n473(x)
+ end
+end
+
+def fun_l25_n346(x)
+ if (x < 1)
+ fun_l26_n340(x)
+ else
+ fun_l26_n672(x)
+ end
+end
+
+def fun_l25_n347(x)
+ if (x < 1)
+ fun_l26_n222(x)
+ else
+ fun_l26_n232(x)
+ end
+end
+
+def fun_l25_n348(x)
+ if (x < 1)
+ fun_l26_n162(x)
+ else
+ fun_l26_n846(x)
+ end
+end
+
+def fun_l25_n349(x)
+ if (x < 1)
+ fun_l26_n56(x)
+ else
+ fun_l26_n93(x)
+ end
+end
+
+def fun_l25_n350(x)
+ if (x < 1)
+ fun_l26_n191(x)
+ else
+ fun_l26_n245(x)
+ end
+end
+
+def fun_l25_n351(x)
+ if (x < 1)
+ fun_l26_n294(x)
+ else
+ fun_l26_n494(x)
+ end
+end
+
+def fun_l25_n352(x)
+ if (x < 1)
+ fun_l26_n591(x)
+ else
+ fun_l26_n524(x)
+ end
+end
+
+def fun_l25_n353(x)
+ if (x < 1)
+ fun_l26_n904(x)
+ else
+ fun_l26_n793(x)
+ end
+end
+
+def fun_l25_n354(x)
+ if (x < 1)
+ fun_l26_n1(x)
+ else
+ fun_l26_n432(x)
+ end
+end
+
+def fun_l25_n355(x)
+ if (x < 1)
+ fun_l26_n757(x)
+ else
+ fun_l26_n733(x)
+ end
+end
+
+def fun_l25_n356(x)
+ if (x < 1)
+ fun_l26_n987(x)
+ else
+ fun_l26_n425(x)
+ end
+end
+
+def fun_l25_n357(x)
+ if (x < 1)
+ fun_l26_n288(x)
+ else
+ fun_l26_n587(x)
+ end
+end
+
+def fun_l25_n358(x)
+ if (x < 1)
+ fun_l26_n843(x)
+ else
+ fun_l26_n731(x)
+ end
+end
+
+def fun_l25_n359(x)
+ if (x < 1)
+ fun_l26_n433(x)
+ else
+ fun_l26_n208(x)
+ end
+end
+
+def fun_l25_n360(x)
+ if (x < 1)
+ fun_l26_n473(x)
+ else
+ fun_l26_n992(x)
+ end
+end
+
+def fun_l25_n361(x)
+ if (x < 1)
+ fun_l26_n210(x)
+ else
+ fun_l26_n704(x)
+ end
+end
+
+def fun_l25_n362(x)
+ if (x < 1)
+ fun_l26_n625(x)
+ else
+ fun_l26_n365(x)
+ end
+end
+
+def fun_l25_n363(x)
+ if (x < 1)
+ fun_l26_n55(x)
+ else
+ fun_l26_n555(x)
+ end
+end
+
+def fun_l25_n364(x)
+ if (x < 1)
+ fun_l26_n763(x)
+ else
+ fun_l26_n417(x)
+ end
+end
+
+def fun_l25_n365(x)
+ if (x < 1)
+ fun_l26_n557(x)
+ else
+ fun_l26_n24(x)
+ end
+end
+
+def fun_l25_n366(x)
+ if (x < 1)
+ fun_l26_n791(x)
+ else
+ fun_l26_n753(x)
+ end
+end
+
+def fun_l25_n367(x)
+ if (x < 1)
+ fun_l26_n490(x)
+ else
+ fun_l26_n765(x)
+ end
+end
+
+def fun_l25_n368(x)
+ if (x < 1)
+ fun_l26_n875(x)
+ else
+ fun_l26_n628(x)
+ end
+end
+
+def fun_l25_n369(x)
+ if (x < 1)
+ fun_l26_n544(x)
+ else
+ fun_l26_n234(x)
+ end
+end
+
+def fun_l25_n370(x)
+ if (x < 1)
+ fun_l26_n288(x)
+ else
+ fun_l26_n524(x)
+ end
+end
+
+def fun_l25_n371(x)
+ if (x < 1)
+ fun_l26_n548(x)
+ else
+ fun_l26_n782(x)
+ end
+end
+
+def fun_l25_n372(x)
+ if (x < 1)
+ fun_l26_n112(x)
+ else
+ fun_l26_n861(x)
+ end
+end
+
+def fun_l25_n373(x)
+ if (x < 1)
+ fun_l26_n565(x)
+ else
+ fun_l26_n442(x)
+ end
+end
+
+def fun_l25_n374(x)
+ if (x < 1)
+ fun_l26_n37(x)
+ else
+ fun_l26_n810(x)
+ end
+end
+
+def fun_l25_n375(x)
+ if (x < 1)
+ fun_l26_n384(x)
+ else
+ fun_l26_n103(x)
+ end
+end
+
+def fun_l25_n376(x)
+ if (x < 1)
+ fun_l26_n371(x)
+ else
+ fun_l26_n219(x)
+ end
+end
+
+def fun_l25_n377(x)
+ if (x < 1)
+ fun_l26_n964(x)
+ else
+ fun_l26_n542(x)
+ end
+end
+
+def fun_l25_n378(x)
+ if (x < 1)
+ fun_l26_n617(x)
+ else
+ fun_l26_n616(x)
+ end
+end
+
+def fun_l25_n379(x)
+ if (x < 1)
+ fun_l26_n94(x)
+ else
+ fun_l26_n870(x)
+ end
+end
+
+def fun_l25_n380(x)
+ if (x < 1)
+ fun_l26_n538(x)
+ else
+ fun_l26_n483(x)
+ end
+end
+
+def fun_l25_n381(x)
+ if (x < 1)
+ fun_l26_n395(x)
+ else
+ fun_l26_n873(x)
+ end
+end
+
+def fun_l25_n382(x)
+ if (x < 1)
+ fun_l26_n406(x)
+ else
+ fun_l26_n843(x)
+ end
+end
+
+def fun_l25_n383(x)
+ if (x < 1)
+ fun_l26_n422(x)
+ else
+ fun_l26_n367(x)
+ end
+end
+
+def fun_l25_n384(x)
+ if (x < 1)
+ fun_l26_n472(x)
+ else
+ fun_l26_n676(x)
+ end
+end
+
+def fun_l25_n385(x)
+ if (x < 1)
+ fun_l26_n782(x)
+ else
+ fun_l26_n995(x)
+ end
+end
+
+def fun_l25_n386(x)
+ if (x < 1)
+ fun_l26_n655(x)
+ else
+ fun_l26_n758(x)
+ end
+end
+
+def fun_l25_n387(x)
+ if (x < 1)
+ fun_l26_n665(x)
+ else
+ fun_l26_n775(x)
+ end
+end
+
+def fun_l25_n388(x)
+ if (x < 1)
+ fun_l26_n168(x)
+ else
+ fun_l26_n604(x)
+ end
+end
+
+def fun_l25_n389(x)
+ if (x < 1)
+ fun_l26_n31(x)
+ else
+ fun_l26_n681(x)
+ end
+end
+
+def fun_l25_n390(x)
+ if (x < 1)
+ fun_l26_n758(x)
+ else
+ fun_l26_n596(x)
+ end
+end
+
+def fun_l25_n391(x)
+ if (x < 1)
+ fun_l26_n413(x)
+ else
+ fun_l26_n528(x)
+ end
+end
+
+def fun_l25_n392(x)
+ if (x < 1)
+ fun_l26_n136(x)
+ else
+ fun_l26_n408(x)
+ end
+end
+
+def fun_l25_n393(x)
+ if (x < 1)
+ fun_l26_n493(x)
+ else
+ fun_l26_n182(x)
+ end
+end
+
+def fun_l25_n394(x)
+ if (x < 1)
+ fun_l26_n156(x)
+ else
+ fun_l26_n775(x)
+ end
+end
+
+def fun_l25_n395(x)
+ if (x < 1)
+ fun_l26_n839(x)
+ else
+ fun_l26_n823(x)
+ end
+end
+
+def fun_l25_n396(x)
+ if (x < 1)
+ fun_l26_n248(x)
+ else
+ fun_l26_n679(x)
+ end
+end
+
+def fun_l25_n397(x)
+ if (x < 1)
+ fun_l26_n594(x)
+ else
+ fun_l26_n117(x)
+ end
+end
+
+def fun_l25_n398(x)
+ if (x < 1)
+ fun_l26_n82(x)
+ else
+ fun_l26_n595(x)
+ end
+end
+
+def fun_l25_n399(x)
+ if (x < 1)
+ fun_l26_n978(x)
+ else
+ fun_l26_n391(x)
+ end
+end
+
+def fun_l25_n400(x)
+ if (x < 1)
+ fun_l26_n731(x)
+ else
+ fun_l26_n252(x)
+ end
+end
+
+def fun_l25_n401(x)
+ if (x < 1)
+ fun_l26_n297(x)
+ else
+ fun_l26_n918(x)
+ end
+end
+
+def fun_l25_n402(x)
+ if (x < 1)
+ fun_l26_n745(x)
+ else
+ fun_l26_n972(x)
+ end
+end
+
+def fun_l25_n403(x)
+ if (x < 1)
+ fun_l26_n685(x)
+ else
+ fun_l26_n555(x)
+ end
+end
+
+def fun_l25_n404(x)
+ if (x < 1)
+ fun_l26_n667(x)
+ else
+ fun_l26_n384(x)
+ end
+end
+
+def fun_l25_n405(x)
+ if (x < 1)
+ fun_l26_n330(x)
+ else
+ fun_l26_n440(x)
+ end
+end
+
+def fun_l25_n406(x)
+ if (x < 1)
+ fun_l26_n911(x)
+ else
+ fun_l26_n580(x)
+ end
+end
+
+def fun_l25_n407(x)
+ if (x < 1)
+ fun_l26_n789(x)
+ else
+ fun_l26_n297(x)
+ end
+end
+
+def fun_l25_n408(x)
+ if (x < 1)
+ fun_l26_n879(x)
+ else
+ fun_l26_n201(x)
+ end
+end
+
+def fun_l25_n409(x)
+ if (x < 1)
+ fun_l26_n36(x)
+ else
+ fun_l26_n885(x)
+ end
+end
+
+def fun_l25_n410(x)
+ if (x < 1)
+ fun_l26_n224(x)
+ else
+ fun_l26_n571(x)
+ end
+end
+
+def fun_l25_n411(x)
+ if (x < 1)
+ fun_l26_n395(x)
+ else
+ fun_l26_n640(x)
+ end
+end
+
+def fun_l25_n412(x)
+ if (x < 1)
+ fun_l26_n754(x)
+ else
+ fun_l26_n754(x)
+ end
+end
+
+def fun_l25_n413(x)
+ if (x < 1)
+ fun_l26_n885(x)
+ else
+ fun_l26_n857(x)
+ end
+end
+
+def fun_l25_n414(x)
+ if (x < 1)
+ fun_l26_n464(x)
+ else
+ fun_l26_n44(x)
+ end
+end
+
+def fun_l25_n415(x)
+ if (x < 1)
+ fun_l26_n13(x)
+ else
+ fun_l26_n546(x)
+ end
+end
+
+def fun_l25_n416(x)
+ if (x < 1)
+ fun_l26_n318(x)
+ else
+ fun_l26_n313(x)
+ end
+end
+
+def fun_l25_n417(x)
+ if (x < 1)
+ fun_l26_n98(x)
+ else
+ fun_l26_n139(x)
+ end
+end
+
+def fun_l25_n418(x)
+ if (x < 1)
+ fun_l26_n654(x)
+ else
+ fun_l26_n602(x)
+ end
+end
+
+def fun_l25_n419(x)
+ if (x < 1)
+ fun_l26_n808(x)
+ else
+ fun_l26_n987(x)
+ end
+end
+
+def fun_l25_n420(x)
+ if (x < 1)
+ fun_l26_n878(x)
+ else
+ fun_l26_n36(x)
+ end
+end
+
+def fun_l25_n421(x)
+ if (x < 1)
+ fun_l26_n427(x)
+ else
+ fun_l26_n620(x)
+ end
+end
+
+def fun_l25_n422(x)
+ if (x < 1)
+ fun_l26_n118(x)
+ else
+ fun_l26_n145(x)
+ end
+end
+
+def fun_l25_n423(x)
+ if (x < 1)
+ fun_l26_n131(x)
+ else
+ fun_l26_n520(x)
+ end
+end
+
+def fun_l25_n424(x)
+ if (x < 1)
+ fun_l26_n295(x)
+ else
+ fun_l26_n197(x)
+ end
+end
+
+def fun_l25_n425(x)
+ if (x < 1)
+ fun_l26_n632(x)
+ else
+ fun_l26_n951(x)
+ end
+end
+
+def fun_l25_n426(x)
+ if (x < 1)
+ fun_l26_n92(x)
+ else
+ fun_l26_n96(x)
+ end
+end
+
+def fun_l25_n427(x)
+ if (x < 1)
+ fun_l26_n677(x)
+ else
+ fun_l26_n5(x)
+ end
+end
+
+def fun_l25_n428(x)
+ if (x < 1)
+ fun_l26_n425(x)
+ else
+ fun_l26_n864(x)
+ end
+end
+
+def fun_l25_n429(x)
+ if (x < 1)
+ fun_l26_n187(x)
+ else
+ fun_l26_n62(x)
+ end
+end
+
+def fun_l25_n430(x)
+ if (x < 1)
+ fun_l26_n964(x)
+ else
+ fun_l26_n704(x)
+ end
+end
+
+def fun_l25_n431(x)
+ if (x < 1)
+ fun_l26_n109(x)
+ else
+ fun_l26_n181(x)
+ end
+end
+
+def fun_l25_n432(x)
+ if (x < 1)
+ fun_l26_n620(x)
+ else
+ fun_l26_n484(x)
+ end
+end
+
+def fun_l25_n433(x)
+ if (x < 1)
+ fun_l26_n283(x)
+ else
+ fun_l26_n622(x)
+ end
+end
+
+def fun_l25_n434(x)
+ if (x < 1)
+ fun_l26_n377(x)
+ else
+ fun_l26_n357(x)
+ end
+end
+
+def fun_l25_n435(x)
+ if (x < 1)
+ fun_l26_n375(x)
+ else
+ fun_l26_n346(x)
+ end
+end
+
+def fun_l25_n436(x)
+ if (x < 1)
+ fun_l26_n50(x)
+ else
+ fun_l26_n283(x)
+ end
+end
+
+def fun_l25_n437(x)
+ if (x < 1)
+ fun_l26_n348(x)
+ else
+ fun_l26_n465(x)
+ end
+end
+
+def fun_l25_n438(x)
+ if (x < 1)
+ fun_l26_n206(x)
+ else
+ fun_l26_n968(x)
+ end
+end
+
+def fun_l25_n439(x)
+ if (x < 1)
+ fun_l26_n878(x)
+ else
+ fun_l26_n248(x)
+ end
+end
+
+def fun_l25_n440(x)
+ if (x < 1)
+ fun_l26_n469(x)
+ else
+ fun_l26_n842(x)
+ end
+end
+
+def fun_l25_n441(x)
+ if (x < 1)
+ fun_l26_n476(x)
+ else
+ fun_l26_n666(x)
+ end
+end
+
+def fun_l25_n442(x)
+ if (x < 1)
+ fun_l26_n491(x)
+ else
+ fun_l26_n365(x)
+ end
+end
+
+def fun_l25_n443(x)
+ if (x < 1)
+ fun_l26_n412(x)
+ else
+ fun_l26_n308(x)
+ end
+end
+
+def fun_l25_n444(x)
+ if (x < 1)
+ fun_l26_n750(x)
+ else
+ fun_l26_n82(x)
+ end
+end
+
+def fun_l25_n445(x)
+ if (x < 1)
+ fun_l26_n434(x)
+ else
+ fun_l26_n711(x)
+ end
+end
+
+def fun_l25_n446(x)
+ if (x < 1)
+ fun_l26_n698(x)
+ else
+ fun_l26_n407(x)
+ end
+end
+
+def fun_l25_n447(x)
+ if (x < 1)
+ fun_l26_n992(x)
+ else
+ fun_l26_n404(x)
+ end
+end
+
+def fun_l25_n448(x)
+ if (x < 1)
+ fun_l26_n723(x)
+ else
+ fun_l26_n317(x)
+ end
+end
+
+def fun_l25_n449(x)
+ if (x < 1)
+ fun_l26_n582(x)
+ else
+ fun_l26_n384(x)
+ end
+end
+
+def fun_l25_n450(x)
+ if (x < 1)
+ fun_l26_n956(x)
+ else
+ fun_l26_n111(x)
+ end
+end
+
+def fun_l25_n451(x)
+ if (x < 1)
+ fun_l26_n506(x)
+ else
+ fun_l26_n775(x)
+ end
+end
+
+def fun_l25_n452(x)
+ if (x < 1)
+ fun_l26_n857(x)
+ else
+ fun_l26_n884(x)
+ end
+end
+
+def fun_l25_n453(x)
+ if (x < 1)
+ fun_l26_n889(x)
+ else
+ fun_l26_n471(x)
+ end
+end
+
+def fun_l25_n454(x)
+ if (x < 1)
+ fun_l26_n850(x)
+ else
+ fun_l26_n204(x)
+ end
+end
+
+def fun_l25_n455(x)
+ if (x < 1)
+ fun_l26_n244(x)
+ else
+ fun_l26_n507(x)
+ end
+end
+
+def fun_l25_n456(x)
+ if (x < 1)
+ fun_l26_n875(x)
+ else
+ fun_l26_n694(x)
+ end
+end
+
+def fun_l25_n457(x)
+ if (x < 1)
+ fun_l26_n517(x)
+ else
+ fun_l26_n64(x)
+ end
+end
+
+def fun_l25_n458(x)
+ if (x < 1)
+ fun_l26_n870(x)
+ else
+ fun_l26_n495(x)
+ end
+end
+
+def fun_l25_n459(x)
+ if (x < 1)
+ fun_l26_n577(x)
+ else
+ fun_l26_n42(x)
+ end
+end
+
+def fun_l25_n460(x)
+ if (x < 1)
+ fun_l26_n919(x)
+ else
+ fun_l26_n508(x)
+ end
+end
+
+def fun_l25_n461(x)
+ if (x < 1)
+ fun_l26_n334(x)
+ else
+ fun_l26_n720(x)
+ end
+end
+
+def fun_l25_n462(x)
+ if (x < 1)
+ fun_l26_n682(x)
+ else
+ fun_l26_n422(x)
+ end
+end
+
+def fun_l25_n463(x)
+ if (x < 1)
+ fun_l26_n415(x)
+ else
+ fun_l26_n505(x)
+ end
+end
+
+def fun_l25_n464(x)
+ if (x < 1)
+ fun_l26_n783(x)
+ else
+ fun_l26_n269(x)
+ end
+end
+
+def fun_l25_n465(x)
+ if (x < 1)
+ fun_l26_n797(x)
+ else
+ fun_l26_n780(x)
+ end
+end
+
+def fun_l25_n466(x)
+ if (x < 1)
+ fun_l26_n806(x)
+ else
+ fun_l26_n773(x)
+ end
+end
+
+def fun_l25_n467(x)
+ if (x < 1)
+ fun_l26_n922(x)
+ else
+ fun_l26_n45(x)
+ end
+end
+
+def fun_l25_n468(x)
+ if (x < 1)
+ fun_l26_n919(x)
+ else
+ fun_l26_n780(x)
+ end
+end
+
+def fun_l25_n469(x)
+ if (x < 1)
+ fun_l26_n354(x)
+ else
+ fun_l26_n360(x)
+ end
+end
+
+def fun_l25_n470(x)
+ if (x < 1)
+ fun_l26_n492(x)
+ else
+ fun_l26_n230(x)
+ end
+end
+
+def fun_l25_n471(x)
+ if (x < 1)
+ fun_l26_n1(x)
+ else
+ fun_l26_n845(x)
+ end
+end
+
+def fun_l25_n472(x)
+ if (x < 1)
+ fun_l26_n854(x)
+ else
+ fun_l26_n408(x)
+ end
+end
+
+def fun_l25_n473(x)
+ if (x < 1)
+ fun_l26_n17(x)
+ else
+ fun_l26_n570(x)
+ end
+end
+
+def fun_l25_n474(x)
+ if (x < 1)
+ fun_l26_n485(x)
+ else
+ fun_l26_n953(x)
+ end
+end
+
+def fun_l25_n475(x)
+ if (x < 1)
+ fun_l26_n398(x)
+ else
+ fun_l26_n712(x)
+ end
+end
+
+def fun_l25_n476(x)
+ if (x < 1)
+ fun_l26_n499(x)
+ else
+ fun_l26_n218(x)
+ end
+end
+
+def fun_l25_n477(x)
+ if (x < 1)
+ fun_l26_n107(x)
+ else
+ fun_l26_n38(x)
+ end
+end
+
+def fun_l25_n478(x)
+ if (x < 1)
+ fun_l26_n234(x)
+ else
+ fun_l26_n718(x)
+ end
+end
+
+def fun_l25_n479(x)
+ if (x < 1)
+ fun_l26_n396(x)
+ else
+ fun_l26_n247(x)
+ end
+end
+
+def fun_l25_n480(x)
+ if (x < 1)
+ fun_l26_n457(x)
+ else
+ fun_l26_n259(x)
+ end
+end
+
+def fun_l25_n481(x)
+ if (x < 1)
+ fun_l26_n581(x)
+ else
+ fun_l26_n512(x)
+ end
+end
+
+def fun_l25_n482(x)
+ if (x < 1)
+ fun_l26_n262(x)
+ else
+ fun_l26_n790(x)
+ end
+end
+
+def fun_l25_n483(x)
+ if (x < 1)
+ fun_l26_n140(x)
+ else
+ fun_l26_n821(x)
+ end
+end
+
+def fun_l25_n484(x)
+ if (x < 1)
+ fun_l26_n133(x)
+ else
+ fun_l26_n863(x)
+ end
+end
+
+def fun_l25_n485(x)
+ if (x < 1)
+ fun_l26_n440(x)
+ else
+ fun_l26_n265(x)
+ end
+end
+
+def fun_l25_n486(x)
+ if (x < 1)
+ fun_l26_n913(x)
+ else
+ fun_l26_n994(x)
+ end
+end
+
+def fun_l25_n487(x)
+ if (x < 1)
+ fun_l26_n186(x)
+ else
+ fun_l26_n433(x)
+ end
+end
+
+def fun_l25_n488(x)
+ if (x < 1)
+ fun_l26_n357(x)
+ else
+ fun_l26_n16(x)
+ end
+end
+
+def fun_l25_n489(x)
+ if (x < 1)
+ fun_l26_n165(x)
+ else
+ fun_l26_n674(x)
+ end
+end
+
+def fun_l25_n490(x)
+ if (x < 1)
+ fun_l26_n772(x)
+ else
+ fun_l26_n749(x)
+ end
+end
+
+def fun_l25_n491(x)
+ if (x < 1)
+ fun_l26_n677(x)
+ else
+ fun_l26_n36(x)
+ end
+end
+
+def fun_l25_n492(x)
+ if (x < 1)
+ fun_l26_n962(x)
+ else
+ fun_l26_n750(x)
+ end
+end
+
+def fun_l25_n493(x)
+ if (x < 1)
+ fun_l26_n22(x)
+ else
+ fun_l26_n657(x)
+ end
+end
+
+def fun_l25_n494(x)
+ if (x < 1)
+ fun_l26_n302(x)
+ else
+ fun_l26_n394(x)
+ end
+end
+
+def fun_l25_n495(x)
+ if (x < 1)
+ fun_l26_n313(x)
+ else
+ fun_l26_n552(x)
+ end
+end
+
+def fun_l25_n496(x)
+ if (x < 1)
+ fun_l26_n946(x)
+ else
+ fun_l26_n447(x)
+ end
+end
+
+def fun_l25_n497(x)
+ if (x < 1)
+ fun_l26_n565(x)
+ else
+ fun_l26_n242(x)
+ end
+end
+
+def fun_l25_n498(x)
+ if (x < 1)
+ fun_l26_n932(x)
+ else
+ fun_l26_n413(x)
+ end
+end
+
+def fun_l25_n499(x)
+ if (x < 1)
+ fun_l26_n751(x)
+ else
+ fun_l26_n921(x)
+ end
+end
+
+def fun_l25_n500(x)
+ if (x < 1)
+ fun_l26_n1(x)
+ else
+ fun_l26_n722(x)
+ end
+end
+
+def fun_l25_n501(x)
+ if (x < 1)
+ fun_l26_n63(x)
+ else
+ fun_l26_n205(x)
+ end
+end
+
+def fun_l25_n502(x)
+ if (x < 1)
+ fun_l26_n67(x)
+ else
+ fun_l26_n638(x)
+ end
+end
+
+def fun_l25_n503(x)
+ if (x < 1)
+ fun_l26_n762(x)
+ else
+ fun_l26_n688(x)
+ end
+end
+
+def fun_l25_n504(x)
+ if (x < 1)
+ fun_l26_n839(x)
+ else
+ fun_l26_n775(x)
+ end
+end
+
+def fun_l25_n505(x)
+ if (x < 1)
+ fun_l26_n773(x)
+ else
+ fun_l26_n986(x)
+ end
+end
+
+def fun_l25_n506(x)
+ if (x < 1)
+ fun_l26_n934(x)
+ else
+ fun_l26_n117(x)
+ end
+end
+
+def fun_l25_n507(x)
+ if (x < 1)
+ fun_l26_n507(x)
+ else
+ fun_l26_n217(x)
+ end
+end
+
+def fun_l25_n508(x)
+ if (x < 1)
+ fun_l26_n833(x)
+ else
+ fun_l26_n779(x)
+ end
+end
+
+def fun_l25_n509(x)
+ if (x < 1)
+ fun_l26_n244(x)
+ else
+ fun_l26_n71(x)
+ end
+end
+
+def fun_l25_n510(x)
+ if (x < 1)
+ fun_l26_n466(x)
+ else
+ fun_l26_n440(x)
+ end
+end
+
+def fun_l25_n511(x)
+ if (x < 1)
+ fun_l26_n829(x)
+ else
+ fun_l26_n459(x)
+ end
+end
+
+def fun_l25_n512(x)
+ if (x < 1)
+ fun_l26_n923(x)
+ else
+ fun_l26_n672(x)
+ end
+end
+
+def fun_l25_n513(x)
+ if (x < 1)
+ fun_l26_n925(x)
+ else
+ fun_l26_n758(x)
+ end
+end
+
+def fun_l25_n514(x)
+ if (x < 1)
+ fun_l26_n782(x)
+ else
+ fun_l26_n157(x)
+ end
+end
+
+def fun_l25_n515(x)
+ if (x < 1)
+ fun_l26_n987(x)
+ else
+ fun_l26_n407(x)
+ end
+end
+
+def fun_l25_n516(x)
+ if (x < 1)
+ fun_l26_n224(x)
+ else
+ fun_l26_n531(x)
+ end
+end
+
+def fun_l25_n517(x)
+ if (x < 1)
+ fun_l26_n222(x)
+ else
+ fun_l26_n141(x)
+ end
+end
+
+def fun_l25_n518(x)
+ if (x < 1)
+ fun_l26_n723(x)
+ else
+ fun_l26_n787(x)
+ end
+end
+
+def fun_l25_n519(x)
+ if (x < 1)
+ fun_l26_n802(x)
+ else
+ fun_l26_n448(x)
+ end
+end
+
+def fun_l25_n520(x)
+ if (x < 1)
+ fun_l26_n152(x)
+ else
+ fun_l26_n666(x)
+ end
+end
+
+def fun_l25_n521(x)
+ if (x < 1)
+ fun_l26_n476(x)
+ else
+ fun_l26_n7(x)
+ end
+end
+
+def fun_l25_n522(x)
+ if (x < 1)
+ fun_l26_n523(x)
+ else
+ fun_l26_n326(x)
+ end
+end
+
+def fun_l25_n523(x)
+ if (x < 1)
+ fun_l26_n432(x)
+ else
+ fun_l26_n525(x)
+ end
+end
+
+def fun_l25_n524(x)
+ if (x < 1)
+ fun_l26_n403(x)
+ else
+ fun_l26_n983(x)
+ end
+end
+
+def fun_l25_n525(x)
+ if (x < 1)
+ fun_l26_n681(x)
+ else
+ fun_l26_n326(x)
+ end
+end
+
+def fun_l25_n526(x)
+ if (x < 1)
+ fun_l26_n352(x)
+ else
+ fun_l26_n402(x)
+ end
+end
+
+def fun_l25_n527(x)
+ if (x < 1)
+ fun_l26_n870(x)
+ else
+ fun_l26_n181(x)
+ end
+end
+
+def fun_l25_n528(x)
+ if (x < 1)
+ fun_l26_n382(x)
+ else
+ fun_l26_n880(x)
+ end
+end
+
+def fun_l25_n529(x)
+ if (x < 1)
+ fun_l26_n337(x)
+ else
+ fun_l26_n616(x)
+ end
+end
+
+def fun_l25_n530(x)
+ if (x < 1)
+ fun_l26_n959(x)
+ else
+ fun_l26_n239(x)
+ end
+end
+
+def fun_l25_n531(x)
+ if (x < 1)
+ fun_l26_n57(x)
+ else
+ fun_l26_n896(x)
+ end
+end
+
+def fun_l25_n532(x)
+ if (x < 1)
+ fun_l26_n456(x)
+ else
+ fun_l26_n365(x)
+ end
+end
+
+def fun_l25_n533(x)
+ if (x < 1)
+ fun_l26_n73(x)
+ else
+ fun_l26_n420(x)
+ end
+end
+
+def fun_l25_n534(x)
+ if (x < 1)
+ fun_l26_n295(x)
+ else
+ fun_l26_n663(x)
+ end
+end
+
+def fun_l25_n535(x)
+ if (x < 1)
+ fun_l26_n881(x)
+ else
+ fun_l26_n391(x)
+ end
+end
+
+def fun_l25_n536(x)
+ if (x < 1)
+ fun_l26_n775(x)
+ else
+ fun_l26_n19(x)
+ end
+end
+
+def fun_l25_n537(x)
+ if (x < 1)
+ fun_l26_n954(x)
+ else
+ fun_l26_n97(x)
+ end
+end
+
+def fun_l25_n538(x)
+ if (x < 1)
+ fun_l26_n764(x)
+ else
+ fun_l26_n353(x)
+ end
+end
+
+def fun_l25_n539(x)
+ if (x < 1)
+ fun_l26_n220(x)
+ else
+ fun_l26_n958(x)
+ end
+end
+
+def fun_l25_n540(x)
+ if (x < 1)
+ fun_l26_n915(x)
+ else
+ fun_l26_n792(x)
+ end
+end
+
+def fun_l25_n541(x)
+ if (x < 1)
+ fun_l26_n880(x)
+ else
+ fun_l26_n374(x)
+ end
+end
+
+def fun_l25_n542(x)
+ if (x < 1)
+ fun_l26_n655(x)
+ else
+ fun_l26_n578(x)
+ end
+end
+
+def fun_l25_n543(x)
+ if (x < 1)
+ fun_l26_n862(x)
+ else
+ fun_l26_n177(x)
+ end
+end
+
+def fun_l25_n544(x)
+ if (x < 1)
+ fun_l26_n286(x)
+ else
+ fun_l26_n670(x)
+ end
+end
+
+def fun_l25_n545(x)
+ if (x < 1)
+ fun_l26_n862(x)
+ else
+ fun_l26_n45(x)
+ end
+end
+
+def fun_l25_n546(x)
+ if (x < 1)
+ fun_l26_n743(x)
+ else
+ fun_l26_n575(x)
+ end
+end
+
+def fun_l25_n547(x)
+ if (x < 1)
+ fun_l26_n909(x)
+ else
+ fun_l26_n457(x)
+ end
+end
+
+def fun_l25_n548(x)
+ if (x < 1)
+ fun_l26_n784(x)
+ else
+ fun_l26_n482(x)
+ end
+end
+
+def fun_l25_n549(x)
+ if (x < 1)
+ fun_l26_n381(x)
+ else
+ fun_l26_n560(x)
+ end
+end
+
+def fun_l25_n550(x)
+ if (x < 1)
+ fun_l26_n62(x)
+ else
+ fun_l26_n640(x)
+ end
+end
+
+def fun_l25_n551(x)
+ if (x < 1)
+ fun_l26_n714(x)
+ else
+ fun_l26_n898(x)
+ end
+end
+
+def fun_l25_n552(x)
+ if (x < 1)
+ fun_l26_n515(x)
+ else
+ fun_l26_n221(x)
+ end
+end
+
+def fun_l25_n553(x)
+ if (x < 1)
+ fun_l26_n217(x)
+ else
+ fun_l26_n932(x)
+ end
+end
+
+def fun_l25_n554(x)
+ if (x < 1)
+ fun_l26_n583(x)
+ else
+ fun_l26_n722(x)
+ end
+end
+
+def fun_l25_n555(x)
+ if (x < 1)
+ fun_l26_n398(x)
+ else
+ fun_l26_n503(x)
+ end
+end
+
+def fun_l25_n556(x)
+ if (x < 1)
+ fun_l26_n891(x)
+ else
+ fun_l26_n72(x)
+ end
+end
+
+def fun_l25_n557(x)
+ if (x < 1)
+ fun_l26_n367(x)
+ else
+ fun_l26_n141(x)
+ end
+end
+
+def fun_l25_n558(x)
+ if (x < 1)
+ fun_l26_n477(x)
+ else
+ fun_l26_n40(x)
+ end
+end
+
+def fun_l25_n559(x)
+ if (x < 1)
+ fun_l26_n156(x)
+ else
+ fun_l26_n491(x)
+ end
+end
+
+def fun_l25_n560(x)
+ if (x < 1)
+ fun_l26_n859(x)
+ else
+ fun_l26_n423(x)
+ end
+end
+
+def fun_l25_n561(x)
+ if (x < 1)
+ fun_l26_n693(x)
+ else
+ fun_l26_n281(x)
+ end
+end
+
+def fun_l25_n562(x)
+ if (x < 1)
+ fun_l26_n460(x)
+ else
+ fun_l26_n151(x)
+ end
+end
+
+def fun_l25_n563(x)
+ if (x < 1)
+ fun_l26_n14(x)
+ else
+ fun_l26_n395(x)
+ end
+end
+
+def fun_l25_n564(x)
+ if (x < 1)
+ fun_l26_n423(x)
+ else
+ fun_l26_n198(x)
+ end
+end
+
+def fun_l25_n565(x)
+ if (x < 1)
+ fun_l26_n911(x)
+ else
+ fun_l26_n841(x)
+ end
+end
+
+def fun_l25_n566(x)
+ if (x < 1)
+ fun_l26_n273(x)
+ else
+ fun_l26_n361(x)
+ end
+end
+
+def fun_l25_n567(x)
+ if (x < 1)
+ fun_l26_n94(x)
+ else
+ fun_l26_n932(x)
+ end
+end
+
+def fun_l25_n568(x)
+ if (x < 1)
+ fun_l26_n734(x)
+ else
+ fun_l26_n191(x)
+ end
+end
+
+def fun_l25_n569(x)
+ if (x < 1)
+ fun_l26_n699(x)
+ else
+ fun_l26_n496(x)
+ end
+end
+
+def fun_l25_n570(x)
+ if (x < 1)
+ fun_l26_n90(x)
+ else
+ fun_l26_n574(x)
+ end
+end
+
+def fun_l25_n571(x)
+ if (x < 1)
+ fun_l26_n818(x)
+ else
+ fun_l26_n529(x)
+ end
+end
+
+def fun_l25_n572(x)
+ if (x < 1)
+ fun_l26_n459(x)
+ else
+ fun_l26_n770(x)
+ end
+end
+
+def fun_l25_n573(x)
+ if (x < 1)
+ fun_l26_n725(x)
+ else
+ fun_l26_n896(x)
+ end
+end
+
+def fun_l25_n574(x)
+ if (x < 1)
+ fun_l26_n773(x)
+ else
+ fun_l26_n8(x)
+ end
+end
+
+def fun_l25_n575(x)
+ if (x < 1)
+ fun_l26_n582(x)
+ else
+ fun_l26_n274(x)
+ end
+end
+
+def fun_l25_n576(x)
+ if (x < 1)
+ fun_l26_n529(x)
+ else
+ fun_l26_n434(x)
+ end
+end
+
+def fun_l25_n577(x)
+ if (x < 1)
+ fun_l26_n197(x)
+ else
+ fun_l26_n88(x)
+ end
+end
+
+def fun_l25_n578(x)
+ if (x < 1)
+ fun_l26_n938(x)
+ else
+ fun_l26_n184(x)
+ end
+end
+
+def fun_l25_n579(x)
+ if (x < 1)
+ fun_l26_n801(x)
+ else
+ fun_l26_n990(x)
+ end
+end
+
+def fun_l25_n580(x)
+ if (x < 1)
+ fun_l26_n732(x)
+ else
+ fun_l26_n955(x)
+ end
+end
+
+def fun_l25_n581(x)
+ if (x < 1)
+ fun_l26_n130(x)
+ else
+ fun_l26_n167(x)
+ end
+end
+
+def fun_l25_n582(x)
+ if (x < 1)
+ fun_l26_n942(x)
+ else
+ fun_l26_n352(x)
+ end
+end
+
+def fun_l25_n583(x)
+ if (x < 1)
+ fun_l26_n673(x)
+ else
+ fun_l26_n613(x)
+ end
+end
+
+def fun_l25_n584(x)
+ if (x < 1)
+ fun_l26_n386(x)
+ else
+ fun_l26_n840(x)
+ end
+end
+
+def fun_l25_n585(x)
+ if (x < 1)
+ fun_l26_n847(x)
+ else
+ fun_l26_n372(x)
+ end
+end
+
+def fun_l25_n586(x)
+ if (x < 1)
+ fun_l26_n0(x)
+ else
+ fun_l26_n717(x)
+ end
+end
+
+def fun_l25_n587(x)
+ if (x < 1)
+ fun_l26_n403(x)
+ else
+ fun_l26_n689(x)
+ end
+end
+
+def fun_l25_n588(x)
+ if (x < 1)
+ fun_l26_n325(x)
+ else
+ fun_l26_n75(x)
+ end
+end
+
+def fun_l25_n589(x)
+ if (x < 1)
+ fun_l26_n653(x)
+ else
+ fun_l26_n993(x)
+ end
+end
+
+def fun_l25_n590(x)
+ if (x < 1)
+ fun_l26_n413(x)
+ else
+ fun_l26_n428(x)
+ end
+end
+
+def fun_l25_n591(x)
+ if (x < 1)
+ fun_l26_n93(x)
+ else
+ fun_l26_n264(x)
+ end
+end
+
+def fun_l25_n592(x)
+ if (x < 1)
+ fun_l26_n117(x)
+ else
+ fun_l26_n466(x)
+ end
+end
+
+def fun_l25_n593(x)
+ if (x < 1)
+ fun_l26_n463(x)
+ else
+ fun_l26_n270(x)
+ end
+end
+
+def fun_l25_n594(x)
+ if (x < 1)
+ fun_l26_n348(x)
+ else
+ fun_l26_n844(x)
+ end
+end
+
+def fun_l25_n595(x)
+ if (x < 1)
+ fun_l26_n939(x)
+ else
+ fun_l26_n891(x)
+ end
+end
+
+def fun_l25_n596(x)
+ if (x < 1)
+ fun_l26_n949(x)
+ else
+ fun_l26_n743(x)
+ end
+end
+
+def fun_l25_n597(x)
+ if (x < 1)
+ fun_l26_n884(x)
+ else
+ fun_l26_n831(x)
+ end
+end
+
+def fun_l25_n598(x)
+ if (x < 1)
+ fun_l26_n910(x)
+ else
+ fun_l26_n79(x)
+ end
+end
+
+def fun_l25_n599(x)
+ if (x < 1)
+ fun_l26_n491(x)
+ else
+ fun_l26_n727(x)
+ end
+end
+
+def fun_l25_n600(x)
+ if (x < 1)
+ fun_l26_n295(x)
+ else
+ fun_l26_n929(x)
+ end
+end
+
+def fun_l25_n601(x)
+ if (x < 1)
+ fun_l26_n130(x)
+ else
+ fun_l26_n35(x)
+ end
+end
+
+def fun_l25_n602(x)
+ if (x < 1)
+ fun_l26_n673(x)
+ else
+ fun_l26_n103(x)
+ end
+end
+
+def fun_l25_n603(x)
+ if (x < 1)
+ fun_l26_n669(x)
+ else
+ fun_l26_n449(x)
+ end
+end
+
+def fun_l25_n604(x)
+ if (x < 1)
+ fun_l26_n201(x)
+ else
+ fun_l26_n616(x)
+ end
+end
+
+def fun_l25_n605(x)
+ if (x < 1)
+ fun_l26_n326(x)
+ else
+ fun_l26_n718(x)
+ end
+end
+
+def fun_l25_n606(x)
+ if (x < 1)
+ fun_l26_n857(x)
+ else
+ fun_l26_n188(x)
+ end
+end
+
+def fun_l25_n607(x)
+ if (x < 1)
+ fun_l26_n351(x)
+ else
+ fun_l26_n688(x)
+ end
+end
+
+def fun_l25_n608(x)
+ if (x < 1)
+ fun_l26_n652(x)
+ else
+ fun_l26_n280(x)
+ end
+end
+
+def fun_l25_n609(x)
+ if (x < 1)
+ fun_l26_n994(x)
+ else
+ fun_l26_n341(x)
+ end
+end
+
+def fun_l25_n610(x)
+ if (x < 1)
+ fun_l26_n876(x)
+ else
+ fun_l26_n643(x)
+ end
+end
+
+def fun_l25_n611(x)
+ if (x < 1)
+ fun_l26_n825(x)
+ else
+ fun_l26_n306(x)
+ end
+end
+
+def fun_l25_n612(x)
+ if (x < 1)
+ fun_l26_n139(x)
+ else
+ fun_l26_n452(x)
+ end
+end
+
+def fun_l25_n613(x)
+ if (x < 1)
+ fun_l26_n689(x)
+ else
+ fun_l26_n818(x)
+ end
+end
+
+def fun_l25_n614(x)
+ if (x < 1)
+ fun_l26_n171(x)
+ else
+ fun_l26_n366(x)
+ end
+end
+
+def fun_l25_n615(x)
+ if (x < 1)
+ fun_l26_n658(x)
+ else
+ fun_l26_n603(x)
+ end
+end
+
+def fun_l25_n616(x)
+ if (x < 1)
+ fun_l26_n150(x)
+ else
+ fun_l26_n603(x)
+ end
+end
+
+def fun_l25_n617(x)
+ if (x < 1)
+ fun_l26_n432(x)
+ else
+ fun_l26_n391(x)
+ end
+end
+
+def fun_l25_n618(x)
+ if (x < 1)
+ fun_l26_n79(x)
+ else
+ fun_l26_n416(x)
+ end
+end
+
+def fun_l25_n619(x)
+ if (x < 1)
+ fun_l26_n494(x)
+ else
+ fun_l26_n355(x)
+ end
+end
+
+def fun_l25_n620(x)
+ if (x < 1)
+ fun_l26_n868(x)
+ else
+ fun_l26_n461(x)
+ end
+end
+
+def fun_l25_n621(x)
+ if (x < 1)
+ fun_l26_n954(x)
+ else
+ fun_l26_n31(x)
+ end
+end
+
+def fun_l25_n622(x)
+ if (x < 1)
+ fun_l26_n620(x)
+ else
+ fun_l26_n777(x)
+ end
+end
+
+def fun_l25_n623(x)
+ if (x < 1)
+ fun_l26_n938(x)
+ else
+ fun_l26_n339(x)
+ end
+end
+
+def fun_l25_n624(x)
+ if (x < 1)
+ fun_l26_n385(x)
+ else
+ fun_l26_n462(x)
+ end
+end
+
+def fun_l25_n625(x)
+ if (x < 1)
+ fun_l26_n83(x)
+ else
+ fun_l26_n351(x)
+ end
+end
+
+def fun_l25_n626(x)
+ if (x < 1)
+ fun_l26_n317(x)
+ else
+ fun_l26_n16(x)
+ end
+end
+
+def fun_l25_n627(x)
+ if (x < 1)
+ fun_l26_n321(x)
+ else
+ fun_l26_n955(x)
+ end
+end
+
+def fun_l25_n628(x)
+ if (x < 1)
+ fun_l26_n649(x)
+ else
+ fun_l26_n195(x)
+ end
+end
+
+def fun_l25_n629(x)
+ if (x < 1)
+ fun_l26_n351(x)
+ else
+ fun_l26_n429(x)
+ end
+end
+
+def fun_l25_n630(x)
+ if (x < 1)
+ fun_l26_n338(x)
+ else
+ fun_l26_n334(x)
+ end
+end
+
+def fun_l25_n631(x)
+ if (x < 1)
+ fun_l26_n355(x)
+ else
+ fun_l26_n782(x)
+ end
+end
+
+def fun_l25_n632(x)
+ if (x < 1)
+ fun_l26_n619(x)
+ else
+ fun_l26_n189(x)
+ end
+end
+
+def fun_l25_n633(x)
+ if (x < 1)
+ fun_l26_n818(x)
+ else
+ fun_l26_n740(x)
+ end
+end
+
+def fun_l25_n634(x)
+ if (x < 1)
+ fun_l26_n725(x)
+ else
+ fun_l26_n114(x)
+ end
+end
+
+def fun_l25_n635(x)
+ if (x < 1)
+ fun_l26_n948(x)
+ else
+ fun_l26_n587(x)
+ end
+end
+
+def fun_l25_n636(x)
+ if (x < 1)
+ fun_l26_n268(x)
+ else
+ fun_l26_n871(x)
+ end
+end
+
+def fun_l25_n637(x)
+ if (x < 1)
+ fun_l26_n128(x)
+ else
+ fun_l26_n5(x)
+ end
+end
+
+def fun_l25_n638(x)
+ if (x < 1)
+ fun_l26_n981(x)
+ else
+ fun_l26_n209(x)
+ end
+end
+
+def fun_l25_n639(x)
+ if (x < 1)
+ fun_l26_n729(x)
+ else
+ fun_l26_n786(x)
+ end
+end
+
+def fun_l25_n640(x)
+ if (x < 1)
+ fun_l26_n86(x)
+ else
+ fun_l26_n320(x)
+ end
+end
+
+def fun_l25_n641(x)
+ if (x < 1)
+ fun_l26_n59(x)
+ else
+ fun_l26_n457(x)
+ end
+end
+
+def fun_l25_n642(x)
+ if (x < 1)
+ fun_l26_n517(x)
+ else
+ fun_l26_n249(x)
+ end
+end
+
+def fun_l25_n643(x)
+ if (x < 1)
+ fun_l26_n528(x)
+ else
+ fun_l26_n754(x)
+ end
+end
+
+def fun_l25_n644(x)
+ if (x < 1)
+ fun_l26_n254(x)
+ else
+ fun_l26_n886(x)
+ end
+end
+
+def fun_l25_n645(x)
+ if (x < 1)
+ fun_l26_n244(x)
+ else
+ fun_l26_n364(x)
+ end
+end
+
+def fun_l25_n646(x)
+ if (x < 1)
+ fun_l26_n550(x)
+ else
+ fun_l26_n877(x)
+ end
+end
+
+def fun_l25_n647(x)
+ if (x < 1)
+ fun_l26_n274(x)
+ else
+ fun_l26_n712(x)
+ end
+end
+
+def fun_l25_n648(x)
+ if (x < 1)
+ fun_l26_n299(x)
+ else
+ fun_l26_n957(x)
+ end
+end
+
+def fun_l25_n649(x)
+ if (x < 1)
+ fun_l26_n996(x)
+ else
+ fun_l26_n671(x)
+ end
+end
+
+def fun_l25_n650(x)
+ if (x < 1)
+ fun_l26_n91(x)
+ else
+ fun_l26_n867(x)
+ end
+end
+
+def fun_l25_n651(x)
+ if (x < 1)
+ fun_l26_n987(x)
+ else
+ fun_l26_n643(x)
+ end
+end
+
+def fun_l25_n652(x)
+ if (x < 1)
+ fun_l26_n429(x)
+ else
+ fun_l26_n802(x)
+ end
+end
+
+def fun_l25_n653(x)
+ if (x < 1)
+ fun_l26_n967(x)
+ else
+ fun_l26_n590(x)
+ end
+end
+
+def fun_l25_n654(x)
+ if (x < 1)
+ fun_l26_n404(x)
+ else
+ fun_l26_n283(x)
+ end
+end
+
+def fun_l25_n655(x)
+ if (x < 1)
+ fun_l26_n438(x)
+ else
+ fun_l26_n232(x)
+ end
+end
+
+def fun_l25_n656(x)
+ if (x < 1)
+ fun_l26_n295(x)
+ else
+ fun_l26_n559(x)
+ end
+end
+
+def fun_l25_n657(x)
+ if (x < 1)
+ fun_l26_n892(x)
+ else
+ fun_l26_n46(x)
+ end
+end
+
+def fun_l25_n658(x)
+ if (x < 1)
+ fun_l26_n30(x)
+ else
+ fun_l26_n640(x)
+ end
+end
+
+def fun_l25_n659(x)
+ if (x < 1)
+ fun_l26_n323(x)
+ else
+ fun_l26_n583(x)
+ end
+end
+
+def fun_l25_n660(x)
+ if (x < 1)
+ fun_l26_n682(x)
+ else
+ fun_l26_n668(x)
+ end
+end
+
+def fun_l25_n661(x)
+ if (x < 1)
+ fun_l26_n78(x)
+ else
+ fun_l26_n83(x)
+ end
+end
+
+def fun_l25_n662(x)
+ if (x < 1)
+ fun_l26_n457(x)
+ else
+ fun_l26_n289(x)
+ end
+end
+
+def fun_l25_n663(x)
+ if (x < 1)
+ fun_l26_n444(x)
+ else
+ fun_l26_n159(x)
+ end
+end
+
+def fun_l25_n664(x)
+ if (x < 1)
+ fun_l26_n10(x)
+ else
+ fun_l26_n925(x)
+ end
+end
+
+def fun_l25_n665(x)
+ if (x < 1)
+ fun_l26_n870(x)
+ else
+ fun_l26_n253(x)
+ end
+end
+
+def fun_l25_n666(x)
+ if (x < 1)
+ fun_l26_n55(x)
+ else
+ fun_l26_n705(x)
+ end
+end
+
+def fun_l25_n667(x)
+ if (x < 1)
+ fun_l26_n179(x)
+ else
+ fun_l26_n607(x)
+ end
+end
+
+def fun_l25_n668(x)
+ if (x < 1)
+ fun_l26_n359(x)
+ else
+ fun_l26_n56(x)
+ end
+end
+
+def fun_l25_n669(x)
+ if (x < 1)
+ fun_l26_n908(x)
+ else
+ fun_l26_n997(x)
+ end
+end
+
+def fun_l25_n670(x)
+ if (x < 1)
+ fun_l26_n469(x)
+ else
+ fun_l26_n438(x)
+ end
+end
+
+def fun_l25_n671(x)
+ if (x < 1)
+ fun_l26_n740(x)
+ else
+ fun_l26_n847(x)
+ end
+end
+
+def fun_l25_n672(x)
+ if (x < 1)
+ fun_l26_n123(x)
+ else
+ fun_l26_n636(x)
+ end
+end
+
+def fun_l25_n673(x)
+ if (x < 1)
+ fun_l26_n654(x)
+ else
+ fun_l26_n221(x)
+ end
+end
+
+def fun_l25_n674(x)
+ if (x < 1)
+ fun_l26_n14(x)
+ else
+ fun_l26_n792(x)
+ end
+end
+
+def fun_l25_n675(x)
+ if (x < 1)
+ fun_l26_n424(x)
+ else
+ fun_l26_n999(x)
+ end
+end
+
+def fun_l25_n676(x)
+ if (x < 1)
+ fun_l26_n491(x)
+ else
+ fun_l26_n698(x)
+ end
+end
+
+def fun_l25_n677(x)
+ if (x < 1)
+ fun_l26_n859(x)
+ else
+ fun_l26_n749(x)
+ end
+end
+
+def fun_l25_n678(x)
+ if (x < 1)
+ fun_l26_n357(x)
+ else
+ fun_l26_n861(x)
+ end
+end
+
+def fun_l25_n679(x)
+ if (x < 1)
+ fun_l26_n144(x)
+ else
+ fun_l26_n347(x)
+ end
+end
+
+def fun_l25_n680(x)
+ if (x < 1)
+ fun_l26_n42(x)
+ else
+ fun_l26_n168(x)
+ end
+end
+
+def fun_l25_n681(x)
+ if (x < 1)
+ fun_l26_n808(x)
+ else
+ fun_l26_n639(x)
+ end
+end
+
+def fun_l25_n682(x)
+ if (x < 1)
+ fun_l26_n943(x)
+ else
+ fun_l26_n152(x)
+ end
+end
+
+def fun_l25_n683(x)
+ if (x < 1)
+ fun_l26_n668(x)
+ else
+ fun_l26_n186(x)
+ end
+end
+
+def fun_l25_n684(x)
+ if (x < 1)
+ fun_l26_n607(x)
+ else
+ fun_l26_n141(x)
+ end
+end
+
+def fun_l25_n685(x)
+ if (x < 1)
+ fun_l26_n221(x)
+ else
+ fun_l26_n960(x)
+ end
+end
+
+def fun_l25_n686(x)
+ if (x < 1)
+ fun_l26_n85(x)
+ else
+ fun_l26_n285(x)
+ end
+end
+
+def fun_l25_n687(x)
+ if (x < 1)
+ fun_l26_n707(x)
+ else
+ fun_l26_n638(x)
+ end
+end
+
+def fun_l25_n688(x)
+ if (x < 1)
+ fun_l26_n288(x)
+ else
+ fun_l26_n318(x)
+ end
+end
+
+def fun_l25_n689(x)
+ if (x < 1)
+ fun_l26_n505(x)
+ else
+ fun_l26_n802(x)
+ end
+end
+
+def fun_l25_n690(x)
+ if (x < 1)
+ fun_l26_n757(x)
+ else
+ fun_l26_n988(x)
+ end
+end
+
+def fun_l25_n691(x)
+ if (x < 1)
+ fun_l26_n211(x)
+ else
+ fun_l26_n868(x)
+ end
+end
+
+def fun_l25_n692(x)
+ if (x < 1)
+ fun_l26_n945(x)
+ else
+ fun_l26_n689(x)
+ end
+end
+
+def fun_l25_n693(x)
+ if (x < 1)
+ fun_l26_n65(x)
+ else
+ fun_l26_n326(x)
+ end
+end
+
+def fun_l25_n694(x)
+ if (x < 1)
+ fun_l26_n905(x)
+ else
+ fun_l26_n912(x)
+ end
+end
+
+def fun_l25_n695(x)
+ if (x < 1)
+ fun_l26_n408(x)
+ else
+ fun_l26_n834(x)
+ end
+end
+
+def fun_l25_n696(x)
+ if (x < 1)
+ fun_l26_n862(x)
+ else
+ fun_l26_n827(x)
+ end
+end
+
+def fun_l25_n697(x)
+ if (x < 1)
+ fun_l26_n356(x)
+ else
+ fun_l26_n201(x)
+ end
+end
+
+def fun_l25_n698(x)
+ if (x < 1)
+ fun_l26_n819(x)
+ else
+ fun_l26_n672(x)
+ end
+end
+
+def fun_l25_n699(x)
+ if (x < 1)
+ fun_l26_n252(x)
+ else
+ fun_l26_n672(x)
+ end
+end
+
+def fun_l25_n700(x)
+ if (x < 1)
+ fun_l26_n620(x)
+ else
+ fun_l26_n693(x)
+ end
+end
+
+def fun_l25_n701(x)
+ if (x < 1)
+ fun_l26_n393(x)
+ else
+ fun_l26_n246(x)
+ end
+end
+
+def fun_l25_n702(x)
+ if (x < 1)
+ fun_l26_n601(x)
+ else
+ fun_l26_n230(x)
+ end
+end
+
+def fun_l25_n703(x)
+ if (x < 1)
+ fun_l26_n583(x)
+ else
+ fun_l26_n503(x)
+ end
+end
+
+def fun_l25_n704(x)
+ if (x < 1)
+ fun_l26_n156(x)
+ else
+ fun_l26_n951(x)
+ end
+end
+
+def fun_l25_n705(x)
+ if (x < 1)
+ fun_l26_n681(x)
+ else
+ fun_l26_n692(x)
+ end
+end
+
+def fun_l25_n706(x)
+ if (x < 1)
+ fun_l26_n176(x)
+ else
+ fun_l26_n158(x)
+ end
+end
+
+def fun_l25_n707(x)
+ if (x < 1)
+ fun_l26_n607(x)
+ else
+ fun_l26_n3(x)
+ end
+end
+
+def fun_l25_n708(x)
+ if (x < 1)
+ fun_l26_n999(x)
+ else
+ fun_l26_n614(x)
+ end
+end
+
+def fun_l25_n709(x)
+ if (x < 1)
+ fun_l26_n930(x)
+ else
+ fun_l26_n888(x)
+ end
+end
+
+def fun_l25_n710(x)
+ if (x < 1)
+ fun_l26_n347(x)
+ else
+ fun_l26_n106(x)
+ end
+end
+
+def fun_l25_n711(x)
+ if (x < 1)
+ fun_l26_n425(x)
+ else
+ fun_l26_n474(x)
+ end
+end
+
+def fun_l25_n712(x)
+ if (x < 1)
+ fun_l26_n265(x)
+ else
+ fun_l26_n519(x)
+ end
+end
+
+def fun_l25_n713(x)
+ if (x < 1)
+ fun_l26_n205(x)
+ else
+ fun_l26_n76(x)
+ end
+end
+
+def fun_l25_n714(x)
+ if (x < 1)
+ fun_l26_n628(x)
+ else
+ fun_l26_n784(x)
+ end
+end
+
+def fun_l25_n715(x)
+ if (x < 1)
+ fun_l26_n217(x)
+ else
+ fun_l26_n484(x)
+ end
+end
+
+def fun_l25_n716(x)
+ if (x < 1)
+ fun_l26_n883(x)
+ else
+ fun_l26_n5(x)
+ end
+end
+
+def fun_l25_n717(x)
+ if (x < 1)
+ fun_l26_n23(x)
+ else
+ fun_l26_n457(x)
+ end
+end
+
+def fun_l25_n718(x)
+ if (x < 1)
+ fun_l26_n370(x)
+ else
+ fun_l26_n789(x)
+ end
+end
+
+def fun_l25_n719(x)
+ if (x < 1)
+ fun_l26_n636(x)
+ else
+ fun_l26_n776(x)
+ end
+end
+
+def fun_l25_n720(x)
+ if (x < 1)
+ fun_l26_n558(x)
+ else
+ fun_l26_n491(x)
+ end
+end
+
+def fun_l25_n721(x)
+ if (x < 1)
+ fun_l26_n867(x)
+ else
+ fun_l26_n49(x)
+ end
+end
+
+def fun_l25_n722(x)
+ if (x < 1)
+ fun_l26_n178(x)
+ else
+ fun_l26_n835(x)
+ end
+end
+
+def fun_l25_n723(x)
+ if (x < 1)
+ fun_l26_n967(x)
+ else
+ fun_l26_n266(x)
+ end
+end
+
+def fun_l25_n724(x)
+ if (x < 1)
+ fun_l26_n191(x)
+ else
+ fun_l26_n58(x)
+ end
+end
+
+def fun_l25_n725(x)
+ if (x < 1)
+ fun_l26_n536(x)
+ else
+ fun_l26_n78(x)
+ end
+end
+
+def fun_l25_n726(x)
+ if (x < 1)
+ fun_l26_n128(x)
+ else
+ fun_l26_n764(x)
+ end
+end
+
+def fun_l25_n727(x)
+ if (x < 1)
+ fun_l26_n243(x)
+ else
+ fun_l26_n217(x)
+ end
+end
+
+def fun_l25_n728(x)
+ if (x < 1)
+ fun_l26_n608(x)
+ else
+ fun_l26_n613(x)
+ end
+end
+
+def fun_l25_n729(x)
+ if (x < 1)
+ fun_l26_n765(x)
+ else
+ fun_l26_n822(x)
+ end
+end
+
+def fun_l25_n730(x)
+ if (x < 1)
+ fun_l26_n445(x)
+ else
+ fun_l26_n160(x)
+ end
+end
+
+def fun_l25_n731(x)
+ if (x < 1)
+ fun_l26_n209(x)
+ else
+ fun_l26_n980(x)
+ end
+end
+
+def fun_l25_n732(x)
+ if (x < 1)
+ fun_l26_n888(x)
+ else
+ fun_l26_n726(x)
+ end
+end
+
+def fun_l25_n733(x)
+ if (x < 1)
+ fun_l26_n232(x)
+ else
+ fun_l26_n47(x)
+ end
+end
+
+def fun_l25_n734(x)
+ if (x < 1)
+ fun_l26_n278(x)
+ else
+ fun_l26_n878(x)
+ end
+end
+
+def fun_l25_n735(x)
+ if (x < 1)
+ fun_l26_n894(x)
+ else
+ fun_l26_n523(x)
+ end
+end
+
+def fun_l25_n736(x)
+ if (x < 1)
+ fun_l26_n334(x)
+ else
+ fun_l26_n270(x)
+ end
+end
+
+def fun_l25_n737(x)
+ if (x < 1)
+ fun_l26_n877(x)
+ else
+ fun_l26_n105(x)
+ end
+end
+
+def fun_l25_n738(x)
+ if (x < 1)
+ fun_l26_n761(x)
+ else
+ fun_l26_n187(x)
+ end
+end
+
+def fun_l25_n739(x)
+ if (x < 1)
+ fun_l26_n668(x)
+ else
+ fun_l26_n592(x)
+ end
+end
+
+def fun_l25_n740(x)
+ if (x < 1)
+ fun_l26_n497(x)
+ else
+ fun_l26_n98(x)
+ end
+end
+
+def fun_l25_n741(x)
+ if (x < 1)
+ fun_l26_n415(x)
+ else
+ fun_l26_n85(x)
+ end
+end
+
+def fun_l25_n742(x)
+ if (x < 1)
+ fun_l26_n883(x)
+ else
+ fun_l26_n505(x)
+ end
+end
+
+def fun_l25_n743(x)
+ if (x < 1)
+ fun_l26_n12(x)
+ else
+ fun_l26_n91(x)
+ end
+end
+
+def fun_l25_n744(x)
+ if (x < 1)
+ fun_l26_n487(x)
+ else
+ fun_l26_n336(x)
+ end
+end
+
+def fun_l25_n745(x)
+ if (x < 1)
+ fun_l26_n489(x)
+ else
+ fun_l26_n186(x)
+ end
+end
+
+def fun_l25_n746(x)
+ if (x < 1)
+ fun_l26_n783(x)
+ else
+ fun_l26_n233(x)
+ end
+end
+
+def fun_l25_n747(x)
+ if (x < 1)
+ fun_l26_n171(x)
+ else
+ fun_l26_n574(x)
+ end
+end
+
+def fun_l25_n748(x)
+ if (x < 1)
+ fun_l26_n171(x)
+ else
+ fun_l26_n61(x)
+ end
+end
+
+def fun_l25_n749(x)
+ if (x < 1)
+ fun_l26_n444(x)
+ else
+ fun_l26_n89(x)
+ end
+end
+
+def fun_l25_n750(x)
+ if (x < 1)
+ fun_l26_n609(x)
+ else
+ fun_l26_n998(x)
+ end
+end
+
+def fun_l25_n751(x)
+ if (x < 1)
+ fun_l26_n914(x)
+ else
+ fun_l26_n893(x)
+ end
+end
+
+def fun_l25_n752(x)
+ if (x < 1)
+ fun_l26_n782(x)
+ else
+ fun_l26_n984(x)
+ end
+end
+
+def fun_l25_n753(x)
+ if (x < 1)
+ fun_l26_n351(x)
+ else
+ fun_l26_n370(x)
+ end
+end
+
+def fun_l25_n754(x)
+ if (x < 1)
+ fun_l26_n689(x)
+ else
+ fun_l26_n234(x)
+ end
+end
+
+def fun_l25_n755(x)
+ if (x < 1)
+ fun_l26_n131(x)
+ else
+ fun_l26_n960(x)
+ end
+end
+
+def fun_l25_n756(x)
+ if (x < 1)
+ fun_l26_n635(x)
+ else
+ fun_l26_n89(x)
+ end
+end
+
+def fun_l25_n757(x)
+ if (x < 1)
+ fun_l26_n309(x)
+ else
+ fun_l26_n74(x)
+ end
+end
+
+def fun_l25_n758(x)
+ if (x < 1)
+ fun_l26_n818(x)
+ else
+ fun_l26_n520(x)
+ end
+end
+
+def fun_l25_n759(x)
+ if (x < 1)
+ fun_l26_n873(x)
+ else
+ fun_l26_n761(x)
+ end
+end
+
+def fun_l25_n760(x)
+ if (x < 1)
+ fun_l26_n216(x)
+ else
+ fun_l26_n449(x)
+ end
+end
+
+def fun_l25_n761(x)
+ if (x < 1)
+ fun_l26_n596(x)
+ else
+ fun_l26_n617(x)
+ end
+end
+
+def fun_l25_n762(x)
+ if (x < 1)
+ fun_l26_n485(x)
+ else
+ fun_l26_n164(x)
+ end
+end
+
+def fun_l25_n763(x)
+ if (x < 1)
+ fun_l26_n434(x)
+ else
+ fun_l26_n422(x)
+ end
+end
+
+def fun_l25_n764(x)
+ if (x < 1)
+ fun_l26_n845(x)
+ else
+ fun_l26_n678(x)
+ end
+end
+
+def fun_l25_n765(x)
+ if (x < 1)
+ fun_l26_n376(x)
+ else
+ fun_l26_n128(x)
+ end
+end
+
+def fun_l25_n766(x)
+ if (x < 1)
+ fun_l26_n217(x)
+ else
+ fun_l26_n721(x)
+ end
+end
+
+def fun_l25_n767(x)
+ if (x < 1)
+ fun_l26_n929(x)
+ else
+ fun_l26_n425(x)
+ end
+end
+
+def fun_l25_n768(x)
+ if (x < 1)
+ fun_l26_n420(x)
+ else
+ fun_l26_n990(x)
+ end
+end
+
+def fun_l25_n769(x)
+ if (x < 1)
+ fun_l26_n310(x)
+ else
+ fun_l26_n901(x)
+ end
+end
+
+def fun_l25_n770(x)
+ if (x < 1)
+ fun_l26_n667(x)
+ else
+ fun_l26_n627(x)
+ end
+end
+
+def fun_l25_n771(x)
+ if (x < 1)
+ fun_l26_n265(x)
+ else
+ fun_l26_n852(x)
+ end
+end
+
+def fun_l25_n772(x)
+ if (x < 1)
+ fun_l26_n520(x)
+ else
+ fun_l26_n596(x)
+ end
+end
+
+def fun_l25_n773(x)
+ if (x < 1)
+ fun_l26_n280(x)
+ else
+ fun_l26_n0(x)
+ end
+end
+
+def fun_l25_n774(x)
+ if (x < 1)
+ fun_l26_n451(x)
+ else
+ fun_l26_n828(x)
+ end
+end
+
+def fun_l25_n775(x)
+ if (x < 1)
+ fun_l26_n814(x)
+ else
+ fun_l26_n797(x)
+ end
+end
+
+def fun_l25_n776(x)
+ if (x < 1)
+ fun_l26_n345(x)
+ else
+ fun_l26_n223(x)
+ end
+end
+
+def fun_l25_n777(x)
+ if (x < 1)
+ fun_l26_n392(x)
+ else
+ fun_l26_n847(x)
+ end
+end
+
+def fun_l25_n778(x)
+ if (x < 1)
+ fun_l26_n957(x)
+ else
+ fun_l26_n474(x)
+ end
+end
+
+def fun_l25_n779(x)
+ if (x < 1)
+ fun_l26_n950(x)
+ else
+ fun_l26_n804(x)
+ end
+end
+
+def fun_l25_n780(x)
+ if (x < 1)
+ fun_l26_n939(x)
+ else
+ fun_l26_n133(x)
+ end
+end
+
+def fun_l25_n781(x)
+ if (x < 1)
+ fun_l26_n176(x)
+ else
+ fun_l26_n237(x)
+ end
+end
+
+def fun_l25_n782(x)
+ if (x < 1)
+ fun_l26_n156(x)
+ else
+ fun_l26_n268(x)
+ end
+end
+
+def fun_l25_n783(x)
+ if (x < 1)
+ fun_l26_n750(x)
+ else
+ fun_l26_n88(x)
+ end
+end
+
+def fun_l25_n784(x)
+ if (x < 1)
+ fun_l26_n638(x)
+ else
+ fun_l26_n147(x)
+ end
+end
+
+def fun_l25_n785(x)
+ if (x < 1)
+ fun_l26_n570(x)
+ else
+ fun_l26_n698(x)
+ end
+end
+
+def fun_l25_n786(x)
+ if (x < 1)
+ fun_l26_n749(x)
+ else
+ fun_l26_n728(x)
+ end
+end
+
+def fun_l25_n787(x)
+ if (x < 1)
+ fun_l26_n183(x)
+ else
+ fun_l26_n649(x)
+ end
+end
+
+def fun_l25_n788(x)
+ if (x < 1)
+ fun_l26_n157(x)
+ else
+ fun_l26_n55(x)
+ end
+end
+
+def fun_l25_n789(x)
+ if (x < 1)
+ fun_l26_n559(x)
+ else
+ fun_l26_n228(x)
+ end
+end
+
+def fun_l25_n790(x)
+ if (x < 1)
+ fun_l26_n690(x)
+ else
+ fun_l26_n214(x)
+ end
+end
+
+def fun_l25_n791(x)
+ if (x < 1)
+ fun_l26_n621(x)
+ else
+ fun_l26_n184(x)
+ end
+end
+
+def fun_l25_n792(x)
+ if (x < 1)
+ fun_l26_n13(x)
+ else
+ fun_l26_n610(x)
+ end
+end
+
+def fun_l25_n793(x)
+ if (x < 1)
+ fun_l26_n709(x)
+ else
+ fun_l26_n40(x)
+ end
+end
+
+def fun_l25_n794(x)
+ if (x < 1)
+ fun_l26_n51(x)
+ else
+ fun_l26_n288(x)
+ end
+end
+
+def fun_l25_n795(x)
+ if (x < 1)
+ fun_l26_n526(x)
+ else
+ fun_l26_n237(x)
+ end
+end
+
+def fun_l25_n796(x)
+ if (x < 1)
+ fun_l26_n279(x)
+ else
+ fun_l26_n157(x)
+ end
+end
+
+def fun_l25_n797(x)
+ if (x < 1)
+ fun_l26_n299(x)
+ else
+ fun_l26_n999(x)
+ end
+end
+
+def fun_l25_n798(x)
+ if (x < 1)
+ fun_l26_n547(x)
+ else
+ fun_l26_n41(x)
+ end
+end
+
+def fun_l25_n799(x)
+ if (x < 1)
+ fun_l26_n522(x)
+ else
+ fun_l26_n544(x)
+ end
+end
+
+def fun_l25_n800(x)
+ if (x < 1)
+ fun_l26_n509(x)
+ else
+ fun_l26_n364(x)
+ end
+end
+
+def fun_l25_n801(x)
+ if (x < 1)
+ fun_l26_n412(x)
+ else
+ fun_l26_n719(x)
+ end
+end
+
+def fun_l25_n802(x)
+ if (x < 1)
+ fun_l26_n844(x)
+ else
+ fun_l26_n452(x)
+ end
+end
+
+def fun_l25_n803(x)
+ if (x < 1)
+ fun_l26_n681(x)
+ else
+ fun_l26_n217(x)
+ end
+end
+
+def fun_l25_n804(x)
+ if (x < 1)
+ fun_l26_n855(x)
+ else
+ fun_l26_n97(x)
+ end
+end
+
+def fun_l25_n805(x)
+ if (x < 1)
+ fun_l26_n32(x)
+ else
+ fun_l26_n512(x)
+ end
+end
+
+def fun_l25_n806(x)
+ if (x < 1)
+ fun_l26_n674(x)
+ else
+ fun_l26_n675(x)
+ end
+end
+
+def fun_l25_n807(x)
+ if (x < 1)
+ fun_l26_n684(x)
+ else
+ fun_l26_n848(x)
+ end
+end
+
+def fun_l25_n808(x)
+ if (x < 1)
+ fun_l26_n784(x)
+ else
+ fun_l26_n603(x)
+ end
+end
+
+def fun_l25_n809(x)
+ if (x < 1)
+ fun_l26_n58(x)
+ else
+ fun_l26_n20(x)
+ end
+end
+
+def fun_l25_n810(x)
+ if (x < 1)
+ fun_l26_n654(x)
+ else
+ fun_l26_n230(x)
+ end
+end
+
+def fun_l25_n811(x)
+ if (x < 1)
+ fun_l26_n627(x)
+ else
+ fun_l26_n812(x)
+ end
+end
+
+def fun_l25_n812(x)
+ if (x < 1)
+ fun_l26_n30(x)
+ else
+ fun_l26_n315(x)
+ end
+end
+
+def fun_l25_n813(x)
+ if (x < 1)
+ fun_l26_n690(x)
+ else
+ fun_l26_n755(x)
+ end
+end
+
+def fun_l25_n814(x)
+ if (x < 1)
+ fun_l26_n566(x)
+ else
+ fun_l26_n44(x)
+ end
+end
+
+def fun_l25_n815(x)
+ if (x < 1)
+ fun_l26_n884(x)
+ else
+ fun_l26_n954(x)
+ end
+end
+
+def fun_l25_n816(x)
+ if (x < 1)
+ fun_l26_n64(x)
+ else
+ fun_l26_n179(x)
+ end
+end
+
+def fun_l25_n817(x)
+ if (x < 1)
+ fun_l26_n341(x)
+ else
+ fun_l26_n440(x)
+ end
+end
+
+def fun_l25_n818(x)
+ if (x < 1)
+ fun_l26_n934(x)
+ else
+ fun_l26_n678(x)
+ end
+end
+
+def fun_l25_n819(x)
+ if (x < 1)
+ fun_l26_n225(x)
+ else
+ fun_l26_n807(x)
+ end
+end
+
+def fun_l25_n820(x)
+ if (x < 1)
+ fun_l26_n625(x)
+ else
+ fun_l26_n63(x)
+ end
+end
+
+def fun_l25_n821(x)
+ if (x < 1)
+ fun_l26_n744(x)
+ else
+ fun_l26_n68(x)
+ end
+end
+
+def fun_l25_n822(x)
+ if (x < 1)
+ fun_l26_n962(x)
+ else
+ fun_l26_n205(x)
+ end
+end
+
+def fun_l25_n823(x)
+ if (x < 1)
+ fun_l26_n715(x)
+ else
+ fun_l26_n130(x)
+ end
+end
+
+def fun_l25_n824(x)
+ if (x < 1)
+ fun_l26_n843(x)
+ else
+ fun_l26_n853(x)
+ end
+end
+
+def fun_l25_n825(x)
+ if (x < 1)
+ fun_l26_n34(x)
+ else
+ fun_l26_n665(x)
+ end
+end
+
+def fun_l25_n826(x)
+ if (x < 1)
+ fun_l26_n540(x)
+ else
+ fun_l26_n693(x)
+ end
+end
+
+def fun_l25_n827(x)
+ if (x < 1)
+ fun_l26_n482(x)
+ else
+ fun_l26_n527(x)
+ end
+end
+
+def fun_l25_n828(x)
+ if (x < 1)
+ fun_l26_n98(x)
+ else
+ fun_l26_n888(x)
+ end
+end
+
+def fun_l25_n829(x)
+ if (x < 1)
+ fun_l26_n681(x)
+ else
+ fun_l26_n176(x)
+ end
+end
+
+def fun_l25_n830(x)
+ if (x < 1)
+ fun_l26_n453(x)
+ else
+ fun_l26_n455(x)
+ end
+end
+
+def fun_l25_n831(x)
+ if (x < 1)
+ fun_l26_n587(x)
+ else
+ fun_l26_n501(x)
+ end
+end
+
+def fun_l25_n832(x)
+ if (x < 1)
+ fun_l26_n725(x)
+ else
+ fun_l26_n608(x)
+ end
+end
+
+def fun_l25_n833(x)
+ if (x < 1)
+ fun_l26_n589(x)
+ else
+ fun_l26_n945(x)
+ end
+end
+
+def fun_l25_n834(x)
+ if (x < 1)
+ fun_l26_n41(x)
+ else
+ fun_l26_n925(x)
+ end
+end
+
+def fun_l25_n835(x)
+ if (x < 1)
+ fun_l26_n858(x)
+ else
+ fun_l26_n840(x)
+ end
+end
+
+def fun_l25_n836(x)
+ if (x < 1)
+ fun_l26_n572(x)
+ else
+ fun_l26_n360(x)
+ end
+end
+
+def fun_l25_n837(x)
+ if (x < 1)
+ fun_l26_n446(x)
+ else
+ fun_l26_n912(x)
+ end
+end
+
+def fun_l25_n838(x)
+ if (x < 1)
+ fun_l26_n104(x)
+ else
+ fun_l26_n795(x)
+ end
+end
+
+def fun_l25_n839(x)
+ if (x < 1)
+ fun_l26_n607(x)
+ else
+ fun_l26_n803(x)
+ end
+end
+
+def fun_l25_n840(x)
+ if (x < 1)
+ fun_l26_n156(x)
+ else
+ fun_l26_n874(x)
+ end
+end
+
+def fun_l25_n841(x)
+ if (x < 1)
+ fun_l26_n314(x)
+ else
+ fun_l26_n28(x)
+ end
+end
+
+def fun_l25_n842(x)
+ if (x < 1)
+ fun_l26_n683(x)
+ else
+ fun_l26_n695(x)
+ end
+end
+
+def fun_l25_n843(x)
+ if (x < 1)
+ fun_l26_n881(x)
+ else
+ fun_l26_n272(x)
+ end
+end
+
+def fun_l25_n844(x)
+ if (x < 1)
+ fun_l26_n354(x)
+ else
+ fun_l26_n993(x)
+ end
+end
+
+def fun_l25_n845(x)
+ if (x < 1)
+ fun_l26_n686(x)
+ else
+ fun_l26_n594(x)
+ end
+end
+
+def fun_l25_n846(x)
+ if (x < 1)
+ fun_l26_n644(x)
+ else
+ fun_l26_n930(x)
+ end
+end
+
+def fun_l25_n847(x)
+ if (x < 1)
+ fun_l26_n417(x)
+ else
+ fun_l26_n705(x)
+ end
+end
+
+def fun_l25_n848(x)
+ if (x < 1)
+ fun_l26_n694(x)
+ else
+ fun_l26_n331(x)
+ end
+end
+
+def fun_l25_n849(x)
+ if (x < 1)
+ fun_l26_n546(x)
+ else
+ fun_l26_n848(x)
+ end
+end
+
+def fun_l25_n850(x)
+ if (x < 1)
+ fun_l26_n199(x)
+ else
+ fun_l26_n49(x)
+ end
+end
+
+def fun_l25_n851(x)
+ if (x < 1)
+ fun_l26_n439(x)
+ else
+ fun_l26_n406(x)
+ end
+end
+
+def fun_l25_n852(x)
+ if (x < 1)
+ fun_l26_n355(x)
+ else
+ fun_l26_n582(x)
+ end
+end
+
+def fun_l25_n853(x)
+ if (x < 1)
+ fun_l26_n839(x)
+ else
+ fun_l26_n485(x)
+ end
+end
+
+def fun_l25_n854(x)
+ if (x < 1)
+ fun_l26_n952(x)
+ else
+ fun_l26_n781(x)
+ end
+end
+
+def fun_l25_n855(x)
+ if (x < 1)
+ fun_l26_n616(x)
+ else
+ fun_l26_n811(x)
+ end
+end
+
+def fun_l25_n856(x)
+ if (x < 1)
+ fun_l26_n590(x)
+ else
+ fun_l26_n977(x)
+ end
+end
+
+def fun_l25_n857(x)
+ if (x < 1)
+ fun_l26_n167(x)
+ else
+ fun_l26_n329(x)
+ end
+end
+
+def fun_l25_n858(x)
+ if (x < 1)
+ fun_l26_n732(x)
+ else
+ fun_l26_n707(x)
+ end
+end
+
+def fun_l25_n859(x)
+ if (x < 1)
+ fun_l26_n956(x)
+ else
+ fun_l26_n955(x)
+ end
+end
+
+def fun_l25_n860(x)
+ if (x < 1)
+ fun_l26_n443(x)
+ else
+ fun_l26_n816(x)
+ end
+end
+
+def fun_l25_n861(x)
+ if (x < 1)
+ fun_l26_n584(x)
+ else
+ fun_l26_n671(x)
+ end
+end
+
+def fun_l25_n862(x)
+ if (x < 1)
+ fun_l26_n43(x)
+ else
+ fun_l26_n0(x)
+ end
+end
+
+def fun_l25_n863(x)
+ if (x < 1)
+ fun_l26_n697(x)
+ else
+ fun_l26_n842(x)
+ end
+end
+
+def fun_l25_n864(x)
+ if (x < 1)
+ fun_l26_n423(x)
+ else
+ fun_l26_n509(x)
+ end
+end
+
+def fun_l25_n865(x)
+ if (x < 1)
+ fun_l26_n239(x)
+ else
+ fun_l26_n257(x)
+ end
+end
+
+def fun_l25_n866(x)
+ if (x < 1)
+ fun_l26_n78(x)
+ else
+ fun_l26_n450(x)
+ end
+end
+
+def fun_l25_n867(x)
+ if (x < 1)
+ fun_l26_n121(x)
+ else
+ fun_l26_n453(x)
+ end
+end
+
+def fun_l25_n868(x)
+ if (x < 1)
+ fun_l26_n844(x)
+ else
+ fun_l26_n977(x)
+ end
+end
+
+def fun_l25_n869(x)
+ if (x < 1)
+ fun_l26_n54(x)
+ else
+ fun_l26_n869(x)
+ end
+end
+
+def fun_l25_n870(x)
+ if (x < 1)
+ fun_l26_n18(x)
+ else
+ fun_l26_n799(x)
+ end
+end
+
+def fun_l25_n871(x)
+ if (x < 1)
+ fun_l26_n990(x)
+ else
+ fun_l26_n53(x)
+ end
+end
+
+def fun_l25_n872(x)
+ if (x < 1)
+ fun_l26_n607(x)
+ else
+ fun_l26_n822(x)
+ end
+end
+
+def fun_l25_n873(x)
+ if (x < 1)
+ fun_l26_n378(x)
+ else
+ fun_l26_n158(x)
+ end
+end
+
+def fun_l25_n874(x)
+ if (x < 1)
+ fun_l26_n206(x)
+ else
+ fun_l26_n271(x)
+ end
+end
+
+def fun_l25_n875(x)
+ if (x < 1)
+ fun_l26_n536(x)
+ else
+ fun_l26_n850(x)
+ end
+end
+
+def fun_l25_n876(x)
+ if (x < 1)
+ fun_l26_n129(x)
+ else
+ fun_l26_n750(x)
+ end
+end
+
+def fun_l25_n877(x)
+ if (x < 1)
+ fun_l26_n553(x)
+ else
+ fun_l26_n815(x)
+ end
+end
+
+def fun_l25_n878(x)
+ if (x < 1)
+ fun_l26_n619(x)
+ else
+ fun_l26_n182(x)
+ end
+end
+
+def fun_l25_n879(x)
+ if (x < 1)
+ fun_l26_n529(x)
+ else
+ fun_l26_n541(x)
+ end
+end
+
+def fun_l25_n880(x)
+ if (x < 1)
+ fun_l26_n228(x)
+ else
+ fun_l26_n672(x)
+ end
+end
+
+def fun_l25_n881(x)
+ if (x < 1)
+ fun_l26_n834(x)
+ else
+ fun_l26_n830(x)
+ end
+end
+
+def fun_l25_n882(x)
+ if (x < 1)
+ fun_l26_n80(x)
+ else
+ fun_l26_n257(x)
+ end
+end
+
+def fun_l25_n883(x)
+ if (x < 1)
+ fun_l26_n805(x)
+ else
+ fun_l26_n589(x)
+ end
+end
+
+def fun_l25_n884(x)
+ if (x < 1)
+ fun_l26_n20(x)
+ else
+ fun_l26_n880(x)
+ end
+end
+
+def fun_l25_n885(x)
+ if (x < 1)
+ fun_l26_n924(x)
+ else
+ fun_l26_n832(x)
+ end
+end
+
+def fun_l25_n886(x)
+ if (x < 1)
+ fun_l26_n262(x)
+ else
+ fun_l26_n928(x)
+ end
+end
+
+def fun_l25_n887(x)
+ if (x < 1)
+ fun_l26_n461(x)
+ else
+ fun_l26_n81(x)
+ end
+end
+
+def fun_l25_n888(x)
+ if (x < 1)
+ fun_l26_n484(x)
+ else
+ fun_l26_n376(x)
+ end
+end
+
+def fun_l25_n889(x)
+ if (x < 1)
+ fun_l26_n26(x)
+ else
+ fun_l26_n28(x)
+ end
+end
+
+def fun_l25_n890(x)
+ if (x < 1)
+ fun_l26_n184(x)
+ else
+ fun_l26_n623(x)
+ end
+end
+
+def fun_l25_n891(x)
+ if (x < 1)
+ fun_l26_n326(x)
+ else
+ fun_l26_n441(x)
+ end
+end
+
+def fun_l25_n892(x)
+ if (x < 1)
+ fun_l26_n35(x)
+ else
+ fun_l26_n543(x)
+ end
+end
+
+def fun_l25_n893(x)
+ if (x < 1)
+ fun_l26_n568(x)
+ else
+ fun_l26_n229(x)
+ end
+end
+
+def fun_l25_n894(x)
+ if (x < 1)
+ fun_l26_n163(x)
+ else
+ fun_l26_n505(x)
+ end
+end
+
+def fun_l25_n895(x)
+ if (x < 1)
+ fun_l26_n675(x)
+ else
+ fun_l26_n508(x)
+ end
+end
+
+def fun_l25_n896(x)
+ if (x < 1)
+ fun_l26_n285(x)
+ else
+ fun_l26_n936(x)
+ end
+end
+
+def fun_l25_n897(x)
+ if (x < 1)
+ fun_l26_n848(x)
+ else
+ fun_l26_n169(x)
+ end
+end
+
+def fun_l25_n898(x)
+ if (x < 1)
+ fun_l26_n139(x)
+ else
+ fun_l26_n479(x)
+ end
+end
+
+def fun_l25_n899(x)
+ if (x < 1)
+ fun_l26_n355(x)
+ else
+ fun_l26_n49(x)
+ end
+end
+
+def fun_l25_n900(x)
+ if (x < 1)
+ fun_l26_n918(x)
+ else
+ fun_l26_n215(x)
+ end
+end
+
+def fun_l25_n901(x)
+ if (x < 1)
+ fun_l26_n55(x)
+ else
+ fun_l26_n550(x)
+ end
+end
+
+def fun_l25_n902(x)
+ if (x < 1)
+ fun_l26_n660(x)
+ else
+ fun_l26_n117(x)
+ end
+end
+
+def fun_l25_n903(x)
+ if (x < 1)
+ fun_l26_n968(x)
+ else
+ fun_l26_n279(x)
+ end
+end
+
+def fun_l25_n904(x)
+ if (x < 1)
+ fun_l26_n693(x)
+ else
+ fun_l26_n57(x)
+ end
+end
+
+def fun_l25_n905(x)
+ if (x < 1)
+ fun_l26_n248(x)
+ else
+ fun_l26_n154(x)
+ end
+end
+
+def fun_l25_n906(x)
+ if (x < 1)
+ fun_l26_n837(x)
+ else
+ fun_l26_n698(x)
+ end
+end
+
+def fun_l25_n907(x)
+ if (x < 1)
+ fun_l26_n630(x)
+ else
+ fun_l26_n460(x)
+ end
+end
+
+def fun_l25_n908(x)
+ if (x < 1)
+ fun_l26_n424(x)
+ else
+ fun_l26_n243(x)
+ end
+end
+
+def fun_l25_n909(x)
+ if (x < 1)
+ fun_l26_n897(x)
+ else
+ fun_l26_n736(x)
+ end
+end
+
+def fun_l25_n910(x)
+ if (x < 1)
+ fun_l26_n573(x)
+ else
+ fun_l26_n205(x)
+ end
+end
+
+def fun_l25_n911(x)
+ if (x < 1)
+ fun_l26_n535(x)
+ else
+ fun_l26_n970(x)
+ end
+end
+
+def fun_l25_n912(x)
+ if (x < 1)
+ fun_l26_n826(x)
+ else
+ fun_l26_n744(x)
+ end
+end
+
+def fun_l25_n913(x)
+ if (x < 1)
+ fun_l26_n244(x)
+ else
+ fun_l26_n216(x)
+ end
+end
+
+def fun_l25_n914(x)
+ if (x < 1)
+ fun_l26_n958(x)
+ else
+ fun_l26_n617(x)
+ end
+end
+
+def fun_l25_n915(x)
+ if (x < 1)
+ fun_l26_n911(x)
+ else
+ fun_l26_n684(x)
+ end
+end
+
+def fun_l25_n916(x)
+ if (x < 1)
+ fun_l26_n294(x)
+ else
+ fun_l26_n319(x)
+ end
+end
+
+def fun_l25_n917(x)
+ if (x < 1)
+ fun_l26_n665(x)
+ else
+ fun_l26_n867(x)
+ end
+end
+
+def fun_l25_n918(x)
+ if (x < 1)
+ fun_l26_n733(x)
+ else
+ fun_l26_n746(x)
+ end
+end
+
+def fun_l25_n919(x)
+ if (x < 1)
+ fun_l26_n243(x)
+ else
+ fun_l26_n328(x)
+ end
+end
+
+def fun_l25_n920(x)
+ if (x < 1)
+ fun_l26_n897(x)
+ else
+ fun_l26_n197(x)
+ end
+end
+
+def fun_l25_n921(x)
+ if (x < 1)
+ fun_l26_n528(x)
+ else
+ fun_l26_n229(x)
+ end
+end
+
+def fun_l25_n922(x)
+ if (x < 1)
+ fun_l26_n897(x)
+ else
+ fun_l26_n547(x)
+ end
+end
+
+def fun_l25_n923(x)
+ if (x < 1)
+ fun_l26_n234(x)
+ else
+ fun_l26_n920(x)
+ end
+end
+
+def fun_l25_n924(x)
+ if (x < 1)
+ fun_l26_n827(x)
+ else
+ fun_l26_n257(x)
+ end
+end
+
+def fun_l25_n925(x)
+ if (x < 1)
+ fun_l26_n847(x)
+ else
+ fun_l26_n469(x)
+ end
+end
+
+def fun_l25_n926(x)
+ if (x < 1)
+ fun_l26_n27(x)
+ else
+ fun_l26_n974(x)
+ end
+end
+
+def fun_l25_n927(x)
+ if (x < 1)
+ fun_l26_n872(x)
+ else
+ fun_l26_n535(x)
+ end
+end
+
+def fun_l25_n928(x)
+ if (x < 1)
+ fun_l26_n870(x)
+ else
+ fun_l26_n783(x)
+ end
+end
+
+def fun_l25_n929(x)
+ if (x < 1)
+ fun_l26_n993(x)
+ else
+ fun_l26_n168(x)
+ end
+end
+
+def fun_l25_n930(x)
+ if (x < 1)
+ fun_l26_n852(x)
+ else
+ fun_l26_n41(x)
+ end
+end
+
+def fun_l25_n931(x)
+ if (x < 1)
+ fun_l26_n290(x)
+ else
+ fun_l26_n249(x)
+ end
+end
+
+def fun_l25_n932(x)
+ if (x < 1)
+ fun_l26_n446(x)
+ else
+ fun_l26_n841(x)
+ end
+end
+
+def fun_l25_n933(x)
+ if (x < 1)
+ fun_l26_n303(x)
+ else
+ fun_l26_n779(x)
+ end
+end
+
+def fun_l25_n934(x)
+ if (x < 1)
+ fun_l26_n352(x)
+ else
+ fun_l26_n731(x)
+ end
+end
+
+def fun_l25_n935(x)
+ if (x < 1)
+ fun_l26_n377(x)
+ else
+ fun_l26_n214(x)
+ end
+end
+
+def fun_l25_n936(x)
+ if (x < 1)
+ fun_l26_n374(x)
+ else
+ fun_l26_n793(x)
+ end
+end
+
+def fun_l25_n937(x)
+ if (x < 1)
+ fun_l26_n656(x)
+ else
+ fun_l26_n575(x)
+ end
+end
+
+def fun_l25_n938(x)
+ if (x < 1)
+ fun_l26_n777(x)
+ else
+ fun_l26_n773(x)
+ end
+end
+
+def fun_l25_n939(x)
+ if (x < 1)
+ fun_l26_n5(x)
+ else
+ fun_l26_n206(x)
+ end
+end
+
+def fun_l25_n940(x)
+ if (x < 1)
+ fun_l26_n780(x)
+ else
+ fun_l26_n486(x)
+ end
+end
+
+def fun_l25_n941(x)
+ if (x < 1)
+ fun_l26_n634(x)
+ else
+ fun_l26_n727(x)
+ end
+end
+
+def fun_l25_n942(x)
+ if (x < 1)
+ fun_l26_n78(x)
+ else
+ fun_l26_n918(x)
+ end
+end
+
+def fun_l25_n943(x)
+ if (x < 1)
+ fun_l26_n616(x)
+ else
+ fun_l26_n35(x)
+ end
+end
+
+def fun_l25_n944(x)
+ if (x < 1)
+ fun_l26_n540(x)
+ else
+ fun_l26_n837(x)
+ end
+end
+
+def fun_l25_n945(x)
+ if (x < 1)
+ fun_l26_n365(x)
+ else
+ fun_l26_n561(x)
+ end
+end
+
+def fun_l25_n946(x)
+ if (x < 1)
+ fun_l26_n519(x)
+ else
+ fun_l26_n440(x)
+ end
+end
+
+def fun_l25_n947(x)
+ if (x < 1)
+ fun_l26_n144(x)
+ else
+ fun_l26_n426(x)
+ end
+end
+
+def fun_l25_n948(x)
+ if (x < 1)
+ fun_l26_n973(x)
+ else
+ fun_l26_n63(x)
+ end
+end
+
+def fun_l25_n949(x)
+ if (x < 1)
+ fun_l26_n258(x)
+ else
+ fun_l26_n690(x)
+ end
+end
+
+def fun_l25_n950(x)
+ if (x < 1)
+ fun_l26_n368(x)
+ else
+ fun_l26_n307(x)
+ end
+end
+
+def fun_l25_n951(x)
+ if (x < 1)
+ fun_l26_n133(x)
+ else
+ fun_l26_n774(x)
+ end
+end
+
+def fun_l25_n952(x)
+ if (x < 1)
+ fun_l26_n866(x)
+ else
+ fun_l26_n299(x)
+ end
+end
+
+def fun_l25_n953(x)
+ if (x < 1)
+ fun_l26_n72(x)
+ else
+ fun_l26_n421(x)
+ end
+end
+
+def fun_l25_n954(x)
+ if (x < 1)
+ fun_l26_n990(x)
+ else
+ fun_l26_n716(x)
+ end
+end
+
+def fun_l25_n955(x)
+ if (x < 1)
+ fun_l26_n138(x)
+ else
+ fun_l26_n387(x)
+ end
+end
+
+def fun_l25_n956(x)
+ if (x < 1)
+ fun_l26_n451(x)
+ else
+ fun_l26_n965(x)
+ end
+end
+
+def fun_l25_n957(x)
+ if (x < 1)
+ fun_l26_n292(x)
+ else
+ fun_l26_n741(x)
+ end
+end
+
+def fun_l25_n958(x)
+ if (x < 1)
+ fun_l26_n835(x)
+ else
+ fun_l26_n82(x)
+ end
+end
+
+def fun_l25_n959(x)
+ if (x < 1)
+ fun_l26_n73(x)
+ else
+ fun_l26_n987(x)
+ end
+end
+
+def fun_l25_n960(x)
+ if (x < 1)
+ fun_l26_n465(x)
+ else
+ fun_l26_n893(x)
+ end
+end
+
+def fun_l25_n961(x)
+ if (x < 1)
+ fun_l26_n277(x)
+ else
+ fun_l26_n846(x)
+ end
+end
+
+def fun_l25_n962(x)
+ if (x < 1)
+ fun_l26_n1(x)
+ else
+ fun_l26_n408(x)
+ end
+end
+
+def fun_l25_n963(x)
+ if (x < 1)
+ fun_l26_n139(x)
+ else
+ fun_l26_n43(x)
+ end
+end
+
+def fun_l25_n964(x)
+ if (x < 1)
+ fun_l26_n238(x)
+ else
+ fun_l26_n427(x)
+ end
+end
+
+def fun_l25_n965(x)
+ if (x < 1)
+ fun_l26_n150(x)
+ else
+ fun_l26_n60(x)
+ end
+end
+
+def fun_l25_n966(x)
+ if (x < 1)
+ fun_l26_n423(x)
+ else
+ fun_l26_n166(x)
+ end
+end
+
+def fun_l25_n967(x)
+ if (x < 1)
+ fun_l26_n102(x)
+ else
+ fun_l26_n679(x)
+ end
+end
+
+def fun_l25_n968(x)
+ if (x < 1)
+ fun_l26_n41(x)
+ else
+ fun_l26_n553(x)
+ end
+end
+
+def fun_l25_n969(x)
+ if (x < 1)
+ fun_l26_n577(x)
+ else
+ fun_l26_n589(x)
+ end
+end
+
+def fun_l25_n970(x)
+ if (x < 1)
+ fun_l26_n569(x)
+ else
+ fun_l26_n677(x)
+ end
+end
+
+def fun_l25_n971(x)
+ if (x < 1)
+ fun_l26_n845(x)
+ else
+ fun_l26_n237(x)
+ end
+end
+
+def fun_l25_n972(x)
+ if (x < 1)
+ fun_l26_n33(x)
+ else
+ fun_l26_n281(x)
+ end
+end
+
+def fun_l25_n973(x)
+ if (x < 1)
+ fun_l26_n432(x)
+ else
+ fun_l26_n800(x)
+ end
+end
+
+def fun_l25_n974(x)
+ if (x < 1)
+ fun_l26_n49(x)
+ else
+ fun_l26_n864(x)
+ end
+end
+
+def fun_l25_n975(x)
+ if (x < 1)
+ fun_l26_n379(x)
+ else
+ fun_l26_n704(x)
+ end
+end
+
+def fun_l25_n976(x)
+ if (x < 1)
+ fun_l26_n778(x)
+ else
+ fun_l26_n310(x)
+ end
+end
+
+def fun_l25_n977(x)
+ if (x < 1)
+ fun_l26_n137(x)
+ else
+ fun_l26_n261(x)
+ end
+end
+
+def fun_l25_n978(x)
+ if (x < 1)
+ fun_l26_n38(x)
+ else
+ fun_l26_n244(x)
+ end
+end
+
+def fun_l25_n979(x)
+ if (x < 1)
+ fun_l26_n665(x)
+ else
+ fun_l26_n883(x)
+ end
+end
+
+def fun_l25_n980(x)
+ if (x < 1)
+ fun_l26_n448(x)
+ else
+ fun_l26_n619(x)
+ end
+end
+
+def fun_l25_n981(x)
+ if (x < 1)
+ fun_l26_n652(x)
+ else
+ fun_l26_n804(x)
+ end
+end
+
+def fun_l25_n982(x)
+ if (x < 1)
+ fun_l26_n804(x)
+ else
+ fun_l26_n110(x)
+ end
+end
+
+def fun_l25_n983(x)
+ if (x < 1)
+ fun_l26_n151(x)
+ else
+ fun_l26_n588(x)
+ end
+end
+
+def fun_l25_n984(x)
+ if (x < 1)
+ fun_l26_n379(x)
+ else
+ fun_l26_n156(x)
+ end
+end
+
+def fun_l25_n985(x)
+ if (x < 1)
+ fun_l26_n936(x)
+ else
+ fun_l26_n31(x)
+ end
+end
+
+def fun_l25_n986(x)
+ if (x < 1)
+ fun_l26_n65(x)
+ else
+ fun_l26_n303(x)
+ end
+end
+
+def fun_l25_n987(x)
+ if (x < 1)
+ fun_l26_n273(x)
+ else
+ fun_l26_n4(x)
+ end
+end
+
+def fun_l25_n988(x)
+ if (x < 1)
+ fun_l26_n538(x)
+ else
+ fun_l26_n357(x)
+ end
+end
+
+def fun_l25_n989(x)
+ if (x < 1)
+ fun_l26_n922(x)
+ else
+ fun_l26_n457(x)
+ end
+end
+
+def fun_l25_n990(x)
+ if (x < 1)
+ fun_l26_n250(x)
+ else
+ fun_l26_n945(x)
+ end
+end
+
+def fun_l25_n991(x)
+ if (x < 1)
+ fun_l26_n878(x)
+ else
+ fun_l26_n992(x)
+ end
+end
+
+def fun_l25_n992(x)
+ if (x < 1)
+ fun_l26_n767(x)
+ else
+ fun_l26_n132(x)
+ end
+end
+
+def fun_l25_n993(x)
+ if (x < 1)
+ fun_l26_n737(x)
+ else
+ fun_l26_n323(x)
+ end
+end
+
+def fun_l25_n994(x)
+ if (x < 1)
+ fun_l26_n173(x)
+ else
+ fun_l26_n424(x)
+ end
+end
+
+def fun_l25_n995(x)
+ if (x < 1)
+ fun_l26_n860(x)
+ else
+ fun_l26_n390(x)
+ end
+end
+
+def fun_l25_n996(x)
+ if (x < 1)
+ fun_l26_n794(x)
+ else
+ fun_l26_n613(x)
+ end
+end
+
+def fun_l25_n997(x)
+ if (x < 1)
+ fun_l26_n807(x)
+ else
+ fun_l26_n277(x)
+ end
+end
+
+def fun_l25_n998(x)
+ if (x < 1)
+ fun_l26_n418(x)
+ else
+ fun_l26_n830(x)
+ end
+end
+
+def fun_l25_n999(x)
+ if (x < 1)
+ fun_l26_n212(x)
+ else
+ fun_l26_n863(x)
+ end
+end
+
+def fun_l26_n0(x)
+ if (x < 1)
+ fun_l27_n276(x)
+ else
+ fun_l27_n243(x)
+ end
+end
+
+def fun_l26_n1(x)
+ if (x < 1)
+ fun_l27_n136(x)
+ else
+ fun_l27_n625(x)
+ end
+end
+
+def fun_l26_n2(x)
+ if (x < 1)
+ fun_l27_n205(x)
+ else
+ fun_l27_n576(x)
+ end
+end
+
+def fun_l26_n3(x)
+ if (x < 1)
+ fun_l27_n97(x)
+ else
+ fun_l27_n753(x)
+ end
+end
+
+def fun_l26_n4(x)
+ if (x < 1)
+ fun_l27_n984(x)
+ else
+ fun_l27_n827(x)
+ end
+end
+
+def fun_l26_n5(x)
+ if (x < 1)
+ fun_l27_n428(x)
+ else
+ fun_l27_n559(x)
+ end
+end
+
+def fun_l26_n6(x)
+ if (x < 1)
+ fun_l27_n148(x)
+ else
+ fun_l27_n351(x)
+ end
+end
+
+def fun_l26_n7(x)
+ if (x < 1)
+ fun_l27_n90(x)
+ else
+ fun_l27_n241(x)
+ end
+end
+
+def fun_l26_n8(x)
+ if (x < 1)
+ fun_l27_n860(x)
+ else
+ fun_l27_n495(x)
+ end
+end
+
+def fun_l26_n9(x)
+ if (x < 1)
+ fun_l27_n245(x)
+ else
+ fun_l27_n429(x)
+ end
+end
+
+def fun_l26_n10(x)
+ if (x < 1)
+ fun_l27_n999(x)
+ else
+ fun_l27_n536(x)
+ end
+end
+
+def fun_l26_n11(x)
+ if (x < 1)
+ fun_l27_n777(x)
+ else
+ fun_l27_n823(x)
+ end
+end
+
+def fun_l26_n12(x)
+ if (x < 1)
+ fun_l27_n158(x)
+ else
+ fun_l27_n249(x)
+ end
+end
+
+def fun_l26_n13(x)
+ if (x < 1)
+ fun_l27_n781(x)
+ else
+ fun_l27_n710(x)
+ end
+end
+
+def fun_l26_n14(x)
+ if (x < 1)
+ fun_l27_n784(x)
+ else
+ fun_l27_n728(x)
+ end
+end
+
+def fun_l26_n15(x)
+ if (x < 1)
+ fun_l27_n225(x)
+ else
+ fun_l27_n216(x)
+ end
+end
+
+def fun_l26_n16(x)
+ if (x < 1)
+ fun_l27_n228(x)
+ else
+ fun_l27_n219(x)
+ end
+end
+
+def fun_l26_n17(x)
+ if (x < 1)
+ fun_l27_n849(x)
+ else
+ fun_l27_n348(x)
+ end
+end
+
+def fun_l26_n18(x)
+ if (x < 1)
+ fun_l27_n722(x)
+ else
+ fun_l27_n884(x)
+ end
+end
+
+def fun_l26_n19(x)
+ if (x < 1)
+ fun_l27_n756(x)
+ else
+ fun_l27_n715(x)
+ end
+end
+
+def fun_l26_n20(x)
+ if (x < 1)
+ fun_l27_n217(x)
+ else
+ fun_l27_n909(x)
+ end
+end
+
+def fun_l26_n21(x)
+ if (x < 1)
+ fun_l27_n239(x)
+ else
+ fun_l27_n370(x)
+ end
+end
+
+def fun_l26_n22(x)
+ if (x < 1)
+ fun_l27_n954(x)
+ else
+ fun_l27_n223(x)
+ end
+end
+
+def fun_l26_n23(x)
+ if (x < 1)
+ fun_l27_n781(x)
+ else
+ fun_l27_n845(x)
+ end
+end
+
+def fun_l26_n24(x)
+ if (x < 1)
+ fun_l27_n80(x)
+ else
+ fun_l27_n71(x)
+ end
+end
+
+def fun_l26_n25(x)
+ if (x < 1)
+ fun_l27_n850(x)
+ else
+ fun_l27_n715(x)
+ end
+end
+
+def fun_l26_n26(x)
+ if (x < 1)
+ fun_l27_n632(x)
+ else
+ fun_l27_n624(x)
+ end
+end
+
+def fun_l26_n27(x)
+ if (x < 1)
+ fun_l27_n342(x)
+ else
+ fun_l27_n999(x)
+ end
+end
+
+def fun_l26_n28(x)
+ if (x < 1)
+ fun_l27_n105(x)
+ else
+ fun_l27_n390(x)
+ end
+end
+
+def fun_l26_n29(x)
+ if (x < 1)
+ fun_l27_n972(x)
+ else
+ fun_l27_n451(x)
+ end
+end
+
+def fun_l26_n30(x)
+ if (x < 1)
+ fun_l27_n364(x)
+ else
+ fun_l27_n392(x)
+ end
+end
+
+def fun_l26_n31(x)
+ if (x < 1)
+ fun_l27_n892(x)
+ else
+ fun_l27_n874(x)
+ end
+end
+
+def fun_l26_n32(x)
+ if (x < 1)
+ fun_l27_n783(x)
+ else
+ fun_l27_n456(x)
+ end
+end
+
+def fun_l26_n33(x)
+ if (x < 1)
+ fun_l27_n491(x)
+ else
+ fun_l27_n479(x)
+ end
+end
+
+def fun_l26_n34(x)
+ if (x < 1)
+ fun_l27_n799(x)
+ else
+ fun_l27_n438(x)
+ end
+end
+
+def fun_l26_n35(x)
+ if (x < 1)
+ fun_l27_n335(x)
+ else
+ fun_l27_n263(x)
+ end
+end
+
+def fun_l26_n36(x)
+ if (x < 1)
+ fun_l27_n935(x)
+ else
+ fun_l27_n715(x)
+ end
+end
+
+def fun_l26_n37(x)
+ if (x < 1)
+ fun_l27_n2(x)
+ else
+ fun_l27_n13(x)
+ end
+end
+
+def fun_l26_n38(x)
+ if (x < 1)
+ fun_l27_n567(x)
+ else
+ fun_l27_n878(x)
+ end
+end
+
+def fun_l26_n39(x)
+ if (x < 1)
+ fun_l27_n144(x)
+ else
+ fun_l27_n349(x)
+ end
+end
+
+def fun_l26_n40(x)
+ if (x < 1)
+ fun_l27_n957(x)
+ else
+ fun_l27_n990(x)
+ end
+end
+
+def fun_l26_n41(x)
+ if (x < 1)
+ fun_l27_n501(x)
+ else
+ fun_l27_n752(x)
+ end
+end
+
+def fun_l26_n42(x)
+ if (x < 1)
+ fun_l27_n23(x)
+ else
+ fun_l27_n200(x)
+ end
+end
+
+def fun_l26_n43(x)
+ if (x < 1)
+ fun_l27_n61(x)
+ else
+ fun_l27_n306(x)
+ end
+end
+
+def fun_l26_n44(x)
+ if (x < 1)
+ fun_l27_n336(x)
+ else
+ fun_l27_n468(x)
+ end
+end
+
+def fun_l26_n45(x)
+ if (x < 1)
+ fun_l27_n350(x)
+ else
+ fun_l27_n359(x)
+ end
+end
+
+def fun_l26_n46(x)
+ if (x < 1)
+ fun_l27_n574(x)
+ else
+ fun_l27_n791(x)
+ end
+end
+
+def fun_l26_n47(x)
+ if (x < 1)
+ fun_l27_n859(x)
+ else
+ fun_l27_n524(x)
+ end
+end
+
+def fun_l26_n48(x)
+ if (x < 1)
+ fun_l27_n530(x)
+ else
+ fun_l27_n387(x)
+ end
+end
+
+def fun_l26_n49(x)
+ if (x < 1)
+ fun_l27_n174(x)
+ else
+ fun_l27_n673(x)
+ end
+end
+
+def fun_l26_n50(x)
+ if (x < 1)
+ fun_l27_n457(x)
+ else
+ fun_l27_n996(x)
+ end
+end
+
+def fun_l26_n51(x)
+ if (x < 1)
+ fun_l27_n757(x)
+ else
+ fun_l27_n84(x)
+ end
+end
+
+def fun_l26_n52(x)
+ if (x < 1)
+ fun_l27_n315(x)
+ else
+ fun_l27_n790(x)
+ end
+end
+
+def fun_l26_n53(x)
+ if (x < 1)
+ fun_l27_n452(x)
+ else
+ fun_l27_n201(x)
+ end
+end
+
+def fun_l26_n54(x)
+ if (x < 1)
+ fun_l27_n153(x)
+ else
+ fun_l27_n143(x)
+ end
+end
+
+def fun_l26_n55(x)
+ if (x < 1)
+ fun_l27_n476(x)
+ else
+ fun_l27_n149(x)
+ end
+end
+
+def fun_l26_n56(x)
+ if (x < 1)
+ fun_l27_n737(x)
+ else
+ fun_l27_n628(x)
+ end
+end
+
+def fun_l26_n57(x)
+ if (x < 1)
+ fun_l27_n780(x)
+ else
+ fun_l27_n906(x)
+ end
+end
+
+def fun_l26_n58(x)
+ if (x < 1)
+ fun_l27_n914(x)
+ else
+ fun_l27_n197(x)
+ end
+end
+
+def fun_l26_n59(x)
+ if (x < 1)
+ fun_l27_n816(x)
+ else
+ fun_l27_n16(x)
+ end
+end
+
+def fun_l26_n60(x)
+ if (x < 1)
+ fun_l27_n643(x)
+ else
+ fun_l27_n90(x)
+ end
+end
+
+def fun_l26_n61(x)
+ if (x < 1)
+ fun_l27_n514(x)
+ else
+ fun_l27_n156(x)
+ end
+end
+
+def fun_l26_n62(x)
+ if (x < 1)
+ fun_l27_n261(x)
+ else
+ fun_l27_n410(x)
+ end
+end
+
+def fun_l26_n63(x)
+ if (x < 1)
+ fun_l27_n82(x)
+ else
+ fun_l27_n817(x)
+ end
+end
+
+def fun_l26_n64(x)
+ if (x < 1)
+ fun_l27_n755(x)
+ else
+ fun_l27_n438(x)
+ end
+end
+
+def fun_l26_n65(x)
+ if (x < 1)
+ fun_l27_n960(x)
+ else
+ fun_l27_n600(x)
+ end
+end
+
+def fun_l26_n66(x)
+ if (x < 1)
+ fun_l27_n100(x)
+ else
+ fun_l27_n699(x)
+ end
+end
+
+def fun_l26_n67(x)
+ if (x < 1)
+ fun_l27_n367(x)
+ else
+ fun_l27_n783(x)
+ end
+end
+
+def fun_l26_n68(x)
+ if (x < 1)
+ fun_l27_n691(x)
+ else
+ fun_l27_n996(x)
+ end
+end
+
+def fun_l26_n69(x)
+ if (x < 1)
+ fun_l27_n989(x)
+ else
+ fun_l27_n628(x)
+ end
+end
+
+def fun_l26_n70(x)
+ if (x < 1)
+ fun_l27_n139(x)
+ else
+ fun_l27_n4(x)
+ end
+end
+
+def fun_l26_n71(x)
+ if (x < 1)
+ fun_l27_n890(x)
+ else
+ fun_l27_n88(x)
+ end
+end
+
+def fun_l26_n72(x)
+ if (x < 1)
+ fun_l27_n35(x)
+ else
+ fun_l27_n991(x)
+ end
+end
+
+def fun_l26_n73(x)
+ if (x < 1)
+ fun_l27_n613(x)
+ else
+ fun_l27_n836(x)
+ end
+end
+
+def fun_l26_n74(x)
+ if (x < 1)
+ fun_l27_n739(x)
+ else
+ fun_l27_n455(x)
+ end
+end
+
+def fun_l26_n75(x)
+ if (x < 1)
+ fun_l27_n382(x)
+ else
+ fun_l27_n909(x)
+ end
+end
+
+def fun_l26_n76(x)
+ if (x < 1)
+ fun_l27_n480(x)
+ else
+ fun_l27_n178(x)
+ end
+end
+
+def fun_l26_n77(x)
+ if (x < 1)
+ fun_l27_n180(x)
+ else
+ fun_l27_n577(x)
+ end
+end
+
+def fun_l26_n78(x)
+ if (x < 1)
+ fun_l27_n910(x)
+ else
+ fun_l27_n659(x)
+ end
+end
+
+def fun_l26_n79(x)
+ if (x < 1)
+ fun_l27_n710(x)
+ else
+ fun_l27_n159(x)
+ end
+end
+
+def fun_l26_n80(x)
+ if (x < 1)
+ fun_l27_n153(x)
+ else
+ fun_l27_n367(x)
+ end
+end
+
+def fun_l26_n81(x)
+ if (x < 1)
+ fun_l27_n935(x)
+ else
+ fun_l27_n389(x)
+ end
+end
+
+def fun_l26_n82(x)
+ if (x < 1)
+ fun_l27_n782(x)
+ else
+ fun_l27_n333(x)
+ end
+end
+
+def fun_l26_n83(x)
+ if (x < 1)
+ fun_l27_n85(x)
+ else
+ fun_l27_n122(x)
+ end
+end
+
+def fun_l26_n84(x)
+ if (x < 1)
+ fun_l27_n722(x)
+ else
+ fun_l27_n937(x)
+ end
+end
+
+def fun_l26_n85(x)
+ if (x < 1)
+ fun_l27_n403(x)
+ else
+ fun_l27_n270(x)
+ end
+end
+
+def fun_l26_n86(x)
+ if (x < 1)
+ fun_l27_n987(x)
+ else
+ fun_l27_n622(x)
+ end
+end
+
+def fun_l26_n87(x)
+ if (x < 1)
+ fun_l27_n316(x)
+ else
+ fun_l27_n519(x)
+ end
+end
+
+def fun_l26_n88(x)
+ if (x < 1)
+ fun_l27_n503(x)
+ else
+ fun_l27_n320(x)
+ end
+end
+
+def fun_l26_n89(x)
+ if (x < 1)
+ fun_l27_n936(x)
+ else
+ fun_l27_n77(x)
+ end
+end
+
+def fun_l26_n90(x)
+ if (x < 1)
+ fun_l27_n875(x)
+ else
+ fun_l27_n857(x)
+ end
+end
+
+def fun_l26_n91(x)
+ if (x < 1)
+ fun_l27_n277(x)
+ else
+ fun_l27_n231(x)
+ end
+end
+
+def fun_l26_n92(x)
+ if (x < 1)
+ fun_l27_n743(x)
+ else
+ fun_l27_n468(x)
+ end
+end
+
+def fun_l26_n93(x)
+ if (x < 1)
+ fun_l27_n997(x)
+ else
+ fun_l27_n49(x)
+ end
+end
+
+def fun_l26_n94(x)
+ if (x < 1)
+ fun_l27_n410(x)
+ else
+ fun_l27_n123(x)
+ end
+end
+
+def fun_l26_n95(x)
+ if (x < 1)
+ fun_l27_n696(x)
+ else
+ fun_l27_n799(x)
+ end
+end
+
+def fun_l26_n96(x)
+ if (x < 1)
+ fun_l27_n47(x)
+ else
+ fun_l27_n195(x)
+ end
+end
+
+def fun_l26_n97(x)
+ if (x < 1)
+ fun_l27_n559(x)
+ else
+ fun_l27_n242(x)
+ end
+end
+
+def fun_l26_n98(x)
+ if (x < 1)
+ fun_l27_n407(x)
+ else
+ fun_l27_n797(x)
+ end
+end
+
+def fun_l26_n99(x)
+ if (x < 1)
+ fun_l27_n886(x)
+ else
+ fun_l27_n253(x)
+ end
+end
+
+def fun_l26_n100(x)
+ if (x < 1)
+ fun_l27_n753(x)
+ else
+ fun_l27_n103(x)
+ end
+end
+
+def fun_l26_n101(x)
+ if (x < 1)
+ fun_l27_n717(x)
+ else
+ fun_l27_n596(x)
+ end
+end
+
+def fun_l26_n102(x)
+ if (x < 1)
+ fun_l27_n88(x)
+ else
+ fun_l27_n916(x)
+ end
+end
+
+def fun_l26_n103(x)
+ if (x < 1)
+ fun_l27_n504(x)
+ else
+ fun_l27_n91(x)
+ end
+end
+
+def fun_l26_n104(x)
+ if (x < 1)
+ fun_l27_n418(x)
+ else
+ fun_l27_n810(x)
+ end
+end
+
+def fun_l26_n105(x)
+ if (x < 1)
+ fun_l27_n736(x)
+ else
+ fun_l27_n515(x)
+ end
+end
+
+def fun_l26_n106(x)
+ if (x < 1)
+ fun_l27_n450(x)
+ else
+ fun_l27_n778(x)
+ end
+end
+
+def fun_l26_n107(x)
+ if (x < 1)
+ fun_l27_n670(x)
+ else
+ fun_l27_n483(x)
+ end
+end
+
+def fun_l26_n108(x)
+ if (x < 1)
+ fun_l27_n592(x)
+ else
+ fun_l27_n638(x)
+ end
+end
+
+def fun_l26_n109(x)
+ if (x < 1)
+ fun_l27_n803(x)
+ else
+ fun_l27_n865(x)
+ end
+end
+
+def fun_l26_n110(x)
+ if (x < 1)
+ fun_l27_n555(x)
+ else
+ fun_l27_n123(x)
+ end
+end
+
+def fun_l26_n111(x)
+ if (x < 1)
+ fun_l27_n5(x)
+ else
+ fun_l27_n768(x)
+ end
+end
+
+def fun_l26_n112(x)
+ if (x < 1)
+ fun_l27_n452(x)
+ else
+ fun_l27_n356(x)
+ end
+end
+
+def fun_l26_n113(x)
+ if (x < 1)
+ fun_l27_n353(x)
+ else
+ fun_l27_n513(x)
+ end
+end
+
+def fun_l26_n114(x)
+ if (x < 1)
+ fun_l27_n859(x)
+ else
+ fun_l27_n851(x)
+ end
+end
+
+def fun_l26_n115(x)
+ if (x < 1)
+ fun_l27_n47(x)
+ else
+ fun_l27_n206(x)
+ end
+end
+
+def fun_l26_n116(x)
+ if (x < 1)
+ fun_l27_n260(x)
+ else
+ fun_l27_n746(x)
+ end
+end
+
+def fun_l26_n117(x)
+ if (x < 1)
+ fun_l27_n733(x)
+ else
+ fun_l27_n906(x)
+ end
+end
+
+def fun_l26_n118(x)
+ if (x < 1)
+ fun_l27_n40(x)
+ else
+ fun_l27_n467(x)
+ end
+end
+
+def fun_l26_n119(x)
+ if (x < 1)
+ fun_l27_n764(x)
+ else
+ fun_l27_n69(x)
+ end
+end
+
+def fun_l26_n120(x)
+ if (x < 1)
+ fun_l27_n851(x)
+ else
+ fun_l27_n905(x)
+ end
+end
+
+def fun_l26_n121(x)
+ if (x < 1)
+ fun_l27_n793(x)
+ else
+ fun_l27_n169(x)
+ end
+end
+
+def fun_l26_n122(x)
+ if (x < 1)
+ fun_l27_n126(x)
+ else
+ fun_l27_n440(x)
+ end
+end
+
+def fun_l26_n123(x)
+ if (x < 1)
+ fun_l27_n147(x)
+ else
+ fun_l27_n720(x)
+ end
+end
+
+def fun_l26_n124(x)
+ if (x < 1)
+ fun_l27_n843(x)
+ else
+ fun_l27_n789(x)
+ end
+end
+
+def fun_l26_n125(x)
+ if (x < 1)
+ fun_l27_n927(x)
+ else
+ fun_l27_n364(x)
+ end
+end
+
+def fun_l26_n126(x)
+ if (x < 1)
+ fun_l27_n203(x)
+ else
+ fun_l27_n344(x)
+ end
+end
+
+def fun_l26_n127(x)
+ if (x < 1)
+ fun_l27_n398(x)
+ else
+ fun_l27_n202(x)
+ end
+end
+
+def fun_l26_n128(x)
+ if (x < 1)
+ fun_l27_n216(x)
+ else
+ fun_l27_n344(x)
+ end
+end
+
+def fun_l26_n129(x)
+ if (x < 1)
+ fun_l27_n496(x)
+ else
+ fun_l27_n40(x)
+ end
+end
+
+def fun_l26_n130(x)
+ if (x < 1)
+ fun_l27_n615(x)
+ else
+ fun_l27_n762(x)
+ end
+end
+
+def fun_l26_n131(x)
+ if (x < 1)
+ fun_l27_n642(x)
+ else
+ fun_l27_n329(x)
+ end
+end
+
+def fun_l26_n132(x)
+ if (x < 1)
+ fun_l27_n364(x)
+ else
+ fun_l27_n436(x)
+ end
+end
+
+def fun_l26_n133(x)
+ if (x < 1)
+ fun_l27_n502(x)
+ else
+ fun_l27_n176(x)
+ end
+end
+
+def fun_l26_n134(x)
+ if (x < 1)
+ fun_l27_n591(x)
+ else
+ fun_l27_n119(x)
+ end
+end
+
+def fun_l26_n135(x)
+ if (x < 1)
+ fun_l27_n946(x)
+ else
+ fun_l27_n963(x)
+ end
+end
+
+def fun_l26_n136(x)
+ if (x < 1)
+ fun_l27_n688(x)
+ else
+ fun_l27_n44(x)
+ end
+end
+
+def fun_l26_n137(x)
+ if (x < 1)
+ fun_l27_n786(x)
+ else
+ fun_l27_n965(x)
+ end
+end
+
+def fun_l26_n138(x)
+ if (x < 1)
+ fun_l27_n259(x)
+ else
+ fun_l27_n63(x)
+ end
+end
+
+def fun_l26_n139(x)
+ if (x < 1)
+ fun_l27_n568(x)
+ else
+ fun_l27_n129(x)
+ end
+end
+
+def fun_l26_n140(x)
+ if (x < 1)
+ fun_l27_n255(x)
+ else
+ fun_l27_n873(x)
+ end
+end
+
+def fun_l26_n141(x)
+ if (x < 1)
+ fun_l27_n777(x)
+ else
+ fun_l27_n86(x)
+ end
+end
+
+def fun_l26_n142(x)
+ if (x < 1)
+ fun_l27_n134(x)
+ else
+ fun_l27_n569(x)
+ end
+end
+
+def fun_l26_n143(x)
+ if (x < 1)
+ fun_l27_n147(x)
+ else
+ fun_l27_n388(x)
+ end
+end
+
+def fun_l26_n144(x)
+ if (x < 1)
+ fun_l27_n633(x)
+ else
+ fun_l27_n256(x)
+ end
+end
+
+def fun_l26_n145(x)
+ if (x < 1)
+ fun_l27_n38(x)
+ else
+ fun_l27_n94(x)
+ end
+end
+
+def fun_l26_n146(x)
+ if (x < 1)
+ fun_l27_n710(x)
+ else
+ fun_l27_n489(x)
+ end
+end
+
+def fun_l26_n147(x)
+ if (x < 1)
+ fun_l27_n187(x)
+ else
+ fun_l27_n252(x)
+ end
+end
+
+def fun_l26_n148(x)
+ if (x < 1)
+ fun_l27_n978(x)
+ else
+ fun_l27_n835(x)
+ end
+end
+
+def fun_l26_n149(x)
+ if (x < 1)
+ fun_l27_n759(x)
+ else
+ fun_l27_n742(x)
+ end
+end
+
+def fun_l26_n150(x)
+ if (x < 1)
+ fun_l27_n438(x)
+ else
+ fun_l27_n808(x)
+ end
+end
+
+def fun_l26_n151(x)
+ if (x < 1)
+ fun_l27_n424(x)
+ else
+ fun_l27_n54(x)
+ end
+end
+
+def fun_l26_n152(x)
+ if (x < 1)
+ fun_l27_n455(x)
+ else
+ fun_l27_n953(x)
+ end
+end
+
+def fun_l26_n153(x)
+ if (x < 1)
+ fun_l27_n13(x)
+ else
+ fun_l27_n330(x)
+ end
+end
+
+def fun_l26_n154(x)
+ if (x < 1)
+ fun_l27_n399(x)
+ else
+ fun_l27_n81(x)
+ end
+end
+
+def fun_l26_n155(x)
+ if (x < 1)
+ fun_l27_n356(x)
+ else
+ fun_l27_n237(x)
+ end
+end
+
+def fun_l26_n156(x)
+ if (x < 1)
+ fun_l27_n636(x)
+ else
+ fun_l27_n446(x)
+ end
+end
+
+def fun_l26_n157(x)
+ if (x < 1)
+ fun_l27_n715(x)
+ else
+ fun_l27_n800(x)
+ end
+end
+
+def fun_l26_n158(x)
+ if (x < 1)
+ fun_l27_n284(x)
+ else
+ fun_l27_n280(x)
+ end
+end
+
+def fun_l26_n159(x)
+ if (x < 1)
+ fun_l27_n41(x)
+ else
+ fun_l27_n65(x)
+ end
+end
+
+def fun_l26_n160(x)
+ if (x < 1)
+ fun_l27_n691(x)
+ else
+ fun_l27_n76(x)
+ end
+end
+
+def fun_l26_n161(x)
+ if (x < 1)
+ fun_l27_n863(x)
+ else
+ fun_l27_n878(x)
+ end
+end
+
+def fun_l26_n162(x)
+ if (x < 1)
+ fun_l27_n694(x)
+ else
+ fun_l27_n5(x)
+ end
+end
+
+def fun_l26_n163(x)
+ if (x < 1)
+ fun_l27_n16(x)
+ else
+ fun_l27_n644(x)
+ end
+end
+
+def fun_l26_n164(x)
+ if (x < 1)
+ fun_l27_n760(x)
+ else
+ fun_l27_n167(x)
+ end
+end
+
+def fun_l26_n165(x)
+ if (x < 1)
+ fun_l27_n884(x)
+ else
+ fun_l27_n297(x)
+ end
+end
+
+def fun_l26_n166(x)
+ if (x < 1)
+ fun_l27_n707(x)
+ else
+ fun_l27_n456(x)
+ end
+end
+
+def fun_l26_n167(x)
+ if (x < 1)
+ fun_l27_n140(x)
+ else
+ fun_l27_n143(x)
+ end
+end
+
+def fun_l26_n168(x)
+ if (x < 1)
+ fun_l27_n581(x)
+ else
+ fun_l27_n369(x)
+ end
+end
+
+def fun_l26_n169(x)
+ if (x < 1)
+ fun_l27_n538(x)
+ else
+ fun_l27_n276(x)
+ end
+end
+
+def fun_l26_n170(x)
+ if (x < 1)
+ fun_l27_n984(x)
+ else
+ fun_l27_n729(x)
+ end
+end
+
+def fun_l26_n171(x)
+ if (x < 1)
+ fun_l27_n274(x)
+ else
+ fun_l27_n519(x)
+ end
+end
+
+def fun_l26_n172(x)
+ if (x < 1)
+ fun_l27_n597(x)
+ else
+ fun_l27_n632(x)
+ end
+end
+
+def fun_l26_n173(x)
+ if (x < 1)
+ fun_l27_n485(x)
+ else
+ fun_l27_n130(x)
+ end
+end
+
+def fun_l26_n174(x)
+ if (x < 1)
+ fun_l27_n460(x)
+ else
+ fun_l27_n133(x)
+ end
+end
+
+def fun_l26_n175(x)
+ if (x < 1)
+ fun_l27_n512(x)
+ else
+ fun_l27_n252(x)
+ end
+end
+
+def fun_l26_n176(x)
+ if (x < 1)
+ fun_l27_n429(x)
+ else
+ fun_l27_n297(x)
+ end
+end
+
+def fun_l26_n177(x)
+ if (x < 1)
+ fun_l27_n497(x)
+ else
+ fun_l27_n845(x)
+ end
+end
+
+def fun_l26_n178(x)
+ if (x < 1)
+ fun_l27_n930(x)
+ else
+ fun_l27_n923(x)
+ end
+end
+
+def fun_l26_n179(x)
+ if (x < 1)
+ fun_l27_n218(x)
+ else
+ fun_l27_n921(x)
+ end
+end
+
+def fun_l26_n180(x)
+ if (x < 1)
+ fun_l27_n793(x)
+ else
+ fun_l27_n278(x)
+ end
+end
+
+def fun_l26_n181(x)
+ if (x < 1)
+ fun_l27_n606(x)
+ else
+ fun_l27_n9(x)
+ end
+end
+
+def fun_l26_n182(x)
+ if (x < 1)
+ fun_l27_n297(x)
+ else
+ fun_l27_n62(x)
+ end
+end
+
+def fun_l26_n183(x)
+ if (x < 1)
+ fun_l27_n174(x)
+ else
+ fun_l27_n698(x)
+ end
+end
+
+def fun_l26_n184(x)
+ if (x < 1)
+ fun_l27_n773(x)
+ else
+ fun_l27_n312(x)
+ end
+end
+
+def fun_l26_n185(x)
+ if (x < 1)
+ fun_l27_n75(x)
+ else
+ fun_l27_n65(x)
+ end
+end
+
+def fun_l26_n186(x)
+ if (x < 1)
+ fun_l27_n389(x)
+ else
+ fun_l27_n27(x)
+ end
+end
+
+def fun_l26_n187(x)
+ if (x < 1)
+ fun_l27_n674(x)
+ else
+ fun_l27_n70(x)
+ end
+end
+
+def fun_l26_n188(x)
+ if (x < 1)
+ fun_l27_n157(x)
+ else
+ fun_l27_n160(x)
+ end
+end
+
+def fun_l26_n189(x)
+ if (x < 1)
+ fun_l27_n401(x)
+ else
+ fun_l27_n340(x)
+ end
+end
+
+def fun_l26_n190(x)
+ if (x < 1)
+ fun_l27_n550(x)
+ else
+ fun_l27_n551(x)
+ end
+end
+
+def fun_l26_n191(x)
+ if (x < 1)
+ fun_l27_n971(x)
+ else
+ fun_l27_n925(x)
+ end
+end
+
+def fun_l26_n192(x)
+ if (x < 1)
+ fun_l27_n370(x)
+ else
+ fun_l27_n697(x)
+ end
+end
+
+def fun_l26_n193(x)
+ if (x < 1)
+ fun_l27_n188(x)
+ else
+ fun_l27_n989(x)
+ end
+end
+
+def fun_l26_n194(x)
+ if (x < 1)
+ fun_l27_n848(x)
+ else
+ fun_l27_n288(x)
+ end
+end
+
+def fun_l26_n195(x)
+ if (x < 1)
+ fun_l27_n886(x)
+ else
+ fun_l27_n554(x)
+ end
+end
+
+def fun_l26_n196(x)
+ if (x < 1)
+ fun_l27_n989(x)
+ else
+ fun_l27_n577(x)
+ end
+end
+
+def fun_l26_n197(x)
+ if (x < 1)
+ fun_l27_n55(x)
+ else
+ fun_l27_n951(x)
+ end
+end
+
+def fun_l26_n198(x)
+ if (x < 1)
+ fun_l27_n750(x)
+ else
+ fun_l27_n941(x)
+ end
+end
+
+def fun_l26_n199(x)
+ if (x < 1)
+ fun_l27_n468(x)
+ else
+ fun_l27_n64(x)
+ end
+end
+
+def fun_l26_n200(x)
+ if (x < 1)
+ fun_l27_n617(x)
+ else
+ fun_l27_n156(x)
+ end
+end
+
+def fun_l26_n201(x)
+ if (x < 1)
+ fun_l27_n119(x)
+ else
+ fun_l27_n63(x)
+ end
+end
+
+def fun_l26_n202(x)
+ if (x < 1)
+ fun_l27_n524(x)
+ else
+ fun_l27_n455(x)
+ end
+end
+
+def fun_l26_n203(x)
+ if (x < 1)
+ fun_l27_n489(x)
+ else
+ fun_l27_n328(x)
+ end
+end
+
+def fun_l26_n204(x)
+ if (x < 1)
+ fun_l27_n854(x)
+ else
+ fun_l27_n605(x)
+ end
+end
+
+def fun_l26_n205(x)
+ if (x < 1)
+ fun_l27_n591(x)
+ else
+ fun_l27_n787(x)
+ end
+end
+
+def fun_l26_n206(x)
+ if (x < 1)
+ fun_l27_n122(x)
+ else
+ fun_l27_n977(x)
+ end
+end
+
+def fun_l26_n207(x)
+ if (x < 1)
+ fun_l27_n204(x)
+ else
+ fun_l27_n652(x)
+ end
+end
+
+def fun_l26_n208(x)
+ if (x < 1)
+ fun_l27_n213(x)
+ else
+ fun_l27_n699(x)
+ end
+end
+
+def fun_l26_n209(x)
+ if (x < 1)
+ fun_l27_n731(x)
+ else
+ fun_l27_n910(x)
+ end
+end
+
+def fun_l26_n210(x)
+ if (x < 1)
+ fun_l27_n398(x)
+ else
+ fun_l27_n2(x)
+ end
+end
+
+def fun_l26_n211(x)
+ if (x < 1)
+ fun_l27_n132(x)
+ else
+ fun_l27_n574(x)
+ end
+end
+
+def fun_l26_n212(x)
+ if (x < 1)
+ fun_l27_n701(x)
+ else
+ fun_l27_n617(x)
+ end
+end
+
+def fun_l26_n213(x)
+ if (x < 1)
+ fun_l27_n486(x)
+ else
+ fun_l27_n861(x)
+ end
+end
+
+def fun_l26_n214(x)
+ if (x < 1)
+ fun_l27_n305(x)
+ else
+ fun_l27_n20(x)
+ end
+end
+
+def fun_l26_n215(x)
+ if (x < 1)
+ fun_l27_n598(x)
+ else
+ fun_l27_n842(x)
+ end
+end
+
+def fun_l26_n216(x)
+ if (x < 1)
+ fun_l27_n948(x)
+ else
+ fun_l27_n669(x)
+ end
+end
+
+def fun_l26_n217(x)
+ if (x < 1)
+ fun_l27_n344(x)
+ else
+ fun_l27_n101(x)
+ end
+end
+
+def fun_l26_n218(x)
+ if (x < 1)
+ fun_l27_n527(x)
+ else
+ fun_l27_n930(x)
+ end
+end
+
+def fun_l26_n219(x)
+ if (x < 1)
+ fun_l27_n889(x)
+ else
+ fun_l27_n380(x)
+ end
+end
+
+def fun_l26_n220(x)
+ if (x < 1)
+ fun_l27_n873(x)
+ else
+ fun_l27_n925(x)
+ end
+end
+
+def fun_l26_n221(x)
+ if (x < 1)
+ fun_l27_n403(x)
+ else
+ fun_l27_n280(x)
+ end
+end
+
+def fun_l26_n222(x)
+ if (x < 1)
+ fun_l27_n614(x)
+ else
+ fun_l27_n370(x)
+ end
+end
+
+def fun_l26_n223(x)
+ if (x < 1)
+ fun_l27_n543(x)
+ else
+ fun_l27_n543(x)
+ end
+end
+
+def fun_l26_n224(x)
+ if (x < 1)
+ fun_l27_n873(x)
+ else
+ fun_l27_n895(x)
+ end
+end
+
+def fun_l26_n225(x)
+ if (x < 1)
+ fun_l27_n665(x)
+ else
+ fun_l27_n259(x)
+ end
+end
+
+def fun_l26_n226(x)
+ if (x < 1)
+ fun_l27_n663(x)
+ else
+ fun_l27_n271(x)
+ end
+end
+
+def fun_l26_n227(x)
+ if (x < 1)
+ fun_l27_n816(x)
+ else
+ fun_l27_n353(x)
+ end
+end
+
+def fun_l26_n228(x)
+ if (x < 1)
+ fun_l27_n941(x)
+ else
+ fun_l27_n484(x)
+ end
+end
+
+def fun_l26_n229(x)
+ if (x < 1)
+ fun_l27_n455(x)
+ else
+ fun_l27_n385(x)
+ end
+end
+
+def fun_l26_n230(x)
+ if (x < 1)
+ fun_l27_n398(x)
+ else
+ fun_l27_n888(x)
+ end
+end
+
+def fun_l26_n231(x)
+ if (x < 1)
+ fun_l27_n93(x)
+ else
+ fun_l27_n297(x)
+ end
+end
+
+def fun_l26_n232(x)
+ if (x < 1)
+ fun_l27_n197(x)
+ else
+ fun_l27_n779(x)
+ end
+end
+
+def fun_l26_n233(x)
+ if (x < 1)
+ fun_l27_n826(x)
+ else
+ fun_l27_n835(x)
+ end
+end
+
+def fun_l26_n234(x)
+ if (x < 1)
+ fun_l27_n32(x)
+ else
+ fun_l27_n430(x)
+ end
+end
+
+def fun_l26_n235(x)
+ if (x < 1)
+ fun_l27_n133(x)
+ else
+ fun_l27_n743(x)
+ end
+end
+
+def fun_l26_n236(x)
+ if (x < 1)
+ fun_l27_n763(x)
+ else
+ fun_l27_n683(x)
+ end
+end
+
+def fun_l26_n237(x)
+ if (x < 1)
+ fun_l27_n211(x)
+ else
+ fun_l27_n726(x)
+ end
+end
+
+def fun_l26_n238(x)
+ if (x < 1)
+ fun_l27_n19(x)
+ else
+ fun_l27_n404(x)
+ end
+end
+
+def fun_l26_n239(x)
+ if (x < 1)
+ fun_l27_n635(x)
+ else
+ fun_l27_n427(x)
+ end
+end
+
+def fun_l26_n240(x)
+ if (x < 1)
+ fun_l27_n102(x)
+ else
+ fun_l27_n875(x)
+ end
+end
+
+def fun_l26_n241(x)
+ if (x < 1)
+ fun_l27_n930(x)
+ else
+ fun_l27_n189(x)
+ end
+end
+
+def fun_l26_n242(x)
+ if (x < 1)
+ fun_l27_n860(x)
+ else
+ fun_l27_n347(x)
+ end
+end
+
+def fun_l26_n243(x)
+ if (x < 1)
+ fun_l27_n826(x)
+ else
+ fun_l27_n848(x)
+ end
+end
+
+def fun_l26_n244(x)
+ if (x < 1)
+ fun_l27_n491(x)
+ else
+ fun_l27_n797(x)
+ end
+end
+
+def fun_l26_n245(x)
+ if (x < 1)
+ fun_l27_n361(x)
+ else
+ fun_l27_n382(x)
+ end
+end
+
+def fun_l26_n246(x)
+ if (x < 1)
+ fun_l27_n391(x)
+ else
+ fun_l27_n907(x)
+ end
+end
+
+def fun_l26_n247(x)
+ if (x < 1)
+ fun_l27_n352(x)
+ else
+ fun_l27_n501(x)
+ end
+end
+
+def fun_l26_n248(x)
+ if (x < 1)
+ fun_l27_n235(x)
+ else
+ fun_l27_n610(x)
+ end
+end
+
+def fun_l26_n249(x)
+ if (x < 1)
+ fun_l27_n970(x)
+ else
+ fun_l27_n561(x)
+ end
+end
+
+def fun_l26_n250(x)
+ if (x < 1)
+ fun_l27_n625(x)
+ else
+ fun_l27_n526(x)
+ end
+end
+
+def fun_l26_n251(x)
+ if (x < 1)
+ fun_l27_n185(x)
+ else
+ fun_l27_n911(x)
+ end
+end
+
+def fun_l26_n252(x)
+ if (x < 1)
+ fun_l27_n426(x)
+ else
+ fun_l27_n247(x)
+ end
+end
+
+def fun_l26_n253(x)
+ if (x < 1)
+ fun_l27_n874(x)
+ else
+ fun_l27_n28(x)
+ end
+end
+
+def fun_l26_n254(x)
+ if (x < 1)
+ fun_l27_n178(x)
+ else
+ fun_l27_n290(x)
+ end
+end
+
+def fun_l26_n255(x)
+ if (x < 1)
+ fun_l27_n218(x)
+ else
+ fun_l27_n816(x)
+ end
+end
+
+def fun_l26_n256(x)
+ if (x < 1)
+ fun_l27_n27(x)
+ else
+ fun_l27_n896(x)
+ end
+end
+
+def fun_l26_n257(x)
+ if (x < 1)
+ fun_l27_n690(x)
+ else
+ fun_l27_n27(x)
+ end
+end
+
+def fun_l26_n258(x)
+ if (x < 1)
+ fun_l27_n549(x)
+ else
+ fun_l27_n481(x)
+ end
+end
+
+def fun_l26_n259(x)
+ if (x < 1)
+ fun_l27_n357(x)
+ else
+ fun_l27_n604(x)
+ end
+end
+
+def fun_l26_n260(x)
+ if (x < 1)
+ fun_l27_n731(x)
+ else
+ fun_l27_n111(x)
+ end
+end
+
+def fun_l26_n261(x)
+ if (x < 1)
+ fun_l27_n849(x)
+ else
+ fun_l27_n91(x)
+ end
+end
+
+def fun_l26_n262(x)
+ if (x < 1)
+ fun_l27_n686(x)
+ else
+ fun_l27_n969(x)
+ end
+end
+
+def fun_l26_n263(x)
+ if (x < 1)
+ fun_l27_n17(x)
+ else
+ fun_l27_n424(x)
+ end
+end
+
+def fun_l26_n264(x)
+ if (x < 1)
+ fun_l27_n25(x)
+ else
+ fun_l27_n487(x)
+ end
+end
+
+def fun_l26_n265(x)
+ if (x < 1)
+ fun_l27_n715(x)
+ else
+ fun_l27_n210(x)
+ end
+end
+
+def fun_l26_n266(x)
+ if (x < 1)
+ fun_l27_n997(x)
+ else
+ fun_l27_n563(x)
+ end
+end
+
+def fun_l26_n267(x)
+ if (x < 1)
+ fun_l27_n489(x)
+ else
+ fun_l27_n666(x)
+ end
+end
+
+def fun_l26_n268(x)
+ if (x < 1)
+ fun_l27_n85(x)
+ else
+ fun_l27_n780(x)
+ end
+end
+
+def fun_l26_n269(x)
+ if (x < 1)
+ fun_l27_n420(x)
+ else
+ fun_l27_n897(x)
+ end
+end
+
+def fun_l26_n270(x)
+ if (x < 1)
+ fun_l27_n152(x)
+ else
+ fun_l27_n841(x)
+ end
+end
+
+def fun_l26_n271(x)
+ if (x < 1)
+ fun_l27_n60(x)
+ else
+ fun_l27_n808(x)
+ end
+end
+
+def fun_l26_n272(x)
+ if (x < 1)
+ fun_l27_n27(x)
+ else
+ fun_l27_n69(x)
+ end
+end
+
+def fun_l26_n273(x)
+ if (x < 1)
+ fun_l27_n992(x)
+ else
+ fun_l27_n306(x)
+ end
+end
+
+def fun_l26_n274(x)
+ if (x < 1)
+ fun_l27_n893(x)
+ else
+ fun_l27_n837(x)
+ end
+end
+
+def fun_l26_n275(x)
+ if (x < 1)
+ fun_l27_n617(x)
+ else
+ fun_l27_n628(x)
+ end
+end
+
+def fun_l26_n276(x)
+ if (x < 1)
+ fun_l27_n402(x)
+ else
+ fun_l27_n766(x)
+ end
+end
+
+def fun_l26_n277(x)
+ if (x < 1)
+ fun_l27_n692(x)
+ else
+ fun_l27_n999(x)
+ end
+end
+
+def fun_l26_n278(x)
+ if (x < 1)
+ fun_l27_n896(x)
+ else
+ fun_l27_n941(x)
+ end
+end
+
+def fun_l26_n279(x)
+ if (x < 1)
+ fun_l27_n440(x)
+ else
+ fun_l27_n888(x)
+ end
+end
+
+def fun_l26_n280(x)
+ if (x < 1)
+ fun_l27_n350(x)
+ else
+ fun_l27_n19(x)
+ end
+end
+
+def fun_l26_n281(x)
+ if (x < 1)
+ fun_l27_n324(x)
+ else
+ fun_l27_n63(x)
+ end
+end
+
+def fun_l26_n282(x)
+ if (x < 1)
+ fun_l27_n422(x)
+ else
+ fun_l27_n369(x)
+ end
+end
+
+def fun_l26_n283(x)
+ if (x < 1)
+ fun_l27_n629(x)
+ else
+ fun_l27_n200(x)
+ end
+end
+
+def fun_l26_n284(x)
+ if (x < 1)
+ fun_l27_n466(x)
+ else
+ fun_l27_n392(x)
+ end
+end
+
+def fun_l26_n285(x)
+ if (x < 1)
+ fun_l27_n995(x)
+ else
+ fun_l27_n374(x)
+ end
+end
+
+def fun_l26_n286(x)
+ if (x < 1)
+ fun_l27_n808(x)
+ else
+ fun_l27_n529(x)
+ end
+end
+
+def fun_l26_n287(x)
+ if (x < 1)
+ fun_l27_n764(x)
+ else
+ fun_l27_n155(x)
+ end
+end
+
+def fun_l26_n288(x)
+ if (x < 1)
+ fun_l27_n282(x)
+ else
+ fun_l27_n676(x)
+ end
+end
+
+def fun_l26_n289(x)
+ if (x < 1)
+ fun_l27_n797(x)
+ else
+ fun_l27_n462(x)
+ end
+end
+
+def fun_l26_n290(x)
+ if (x < 1)
+ fun_l27_n572(x)
+ else
+ fun_l27_n909(x)
+ end
+end
+
+def fun_l26_n291(x)
+ if (x < 1)
+ fun_l27_n401(x)
+ else
+ fun_l27_n906(x)
+ end
+end
+
+def fun_l26_n292(x)
+ if (x < 1)
+ fun_l27_n680(x)
+ else
+ fun_l27_n922(x)
+ end
+end
+
+def fun_l26_n293(x)
+ if (x < 1)
+ fun_l27_n876(x)
+ else
+ fun_l27_n882(x)
+ end
+end
+
+def fun_l26_n294(x)
+ if (x < 1)
+ fun_l27_n40(x)
+ else
+ fun_l27_n752(x)
+ end
+end
+
+def fun_l26_n295(x)
+ if (x < 1)
+ fun_l27_n164(x)
+ else
+ fun_l27_n479(x)
+ end
+end
+
+def fun_l26_n296(x)
+ if (x < 1)
+ fun_l27_n836(x)
+ else
+ fun_l27_n956(x)
+ end
+end
+
+def fun_l26_n297(x)
+ if (x < 1)
+ fun_l27_n197(x)
+ else
+ fun_l27_n135(x)
+ end
+end
+
+def fun_l26_n298(x)
+ if (x < 1)
+ fun_l27_n289(x)
+ else
+ fun_l27_n314(x)
+ end
+end
+
+def fun_l26_n299(x)
+ if (x < 1)
+ fun_l27_n942(x)
+ else
+ fun_l27_n747(x)
+ end
+end
+
+def fun_l26_n300(x)
+ if (x < 1)
+ fun_l27_n4(x)
+ else
+ fun_l27_n355(x)
+ end
+end
+
+def fun_l26_n301(x)
+ if (x < 1)
+ fun_l27_n616(x)
+ else
+ fun_l27_n681(x)
+ end
+end
+
+def fun_l26_n302(x)
+ if (x < 1)
+ fun_l27_n175(x)
+ else
+ fun_l27_n859(x)
+ end
+end
+
+def fun_l26_n303(x)
+ if (x < 1)
+ fun_l27_n323(x)
+ else
+ fun_l27_n491(x)
+ end
+end
+
+def fun_l26_n304(x)
+ if (x < 1)
+ fun_l27_n630(x)
+ else
+ fun_l27_n821(x)
+ end
+end
+
+def fun_l26_n305(x)
+ if (x < 1)
+ fun_l27_n416(x)
+ else
+ fun_l27_n927(x)
+ end
+end
+
+def fun_l26_n306(x)
+ if (x < 1)
+ fun_l27_n80(x)
+ else
+ fun_l27_n69(x)
+ end
+end
+
+def fun_l26_n307(x)
+ if (x < 1)
+ fun_l27_n209(x)
+ else
+ fun_l27_n476(x)
+ end
+end
+
+def fun_l26_n308(x)
+ if (x < 1)
+ fun_l27_n201(x)
+ else
+ fun_l27_n18(x)
+ end
+end
+
+def fun_l26_n309(x)
+ if (x < 1)
+ fun_l27_n712(x)
+ else
+ fun_l27_n697(x)
+ end
+end
+
+def fun_l26_n310(x)
+ if (x < 1)
+ fun_l27_n815(x)
+ else
+ fun_l27_n626(x)
+ end
+end
+
+def fun_l26_n311(x)
+ if (x < 1)
+ fun_l27_n159(x)
+ else
+ fun_l27_n483(x)
+ end
+end
+
+def fun_l26_n312(x)
+ if (x < 1)
+ fun_l27_n304(x)
+ else
+ fun_l27_n260(x)
+ end
+end
+
+def fun_l26_n313(x)
+ if (x < 1)
+ fun_l27_n15(x)
+ else
+ fun_l27_n50(x)
+ end
+end
+
+def fun_l26_n314(x)
+ if (x < 1)
+ fun_l27_n748(x)
+ else
+ fun_l27_n71(x)
+ end
+end
+
+def fun_l26_n315(x)
+ if (x < 1)
+ fun_l27_n957(x)
+ else
+ fun_l27_n90(x)
+ end
+end
+
+def fun_l26_n316(x)
+ if (x < 1)
+ fun_l27_n189(x)
+ else
+ fun_l27_n276(x)
+ end
+end
+
+def fun_l26_n317(x)
+ if (x < 1)
+ fun_l27_n926(x)
+ else
+ fun_l27_n916(x)
+ end
+end
+
+def fun_l26_n318(x)
+ if (x < 1)
+ fun_l27_n74(x)
+ else
+ fun_l27_n395(x)
+ end
+end
+
+def fun_l26_n319(x)
+ if (x < 1)
+ fun_l27_n424(x)
+ else
+ fun_l27_n826(x)
+ end
+end
+
+def fun_l26_n320(x)
+ if (x < 1)
+ fun_l27_n321(x)
+ else
+ fun_l27_n553(x)
+ end
+end
+
+def fun_l26_n321(x)
+ if (x < 1)
+ fun_l27_n906(x)
+ else
+ fun_l27_n344(x)
+ end
+end
+
+def fun_l26_n322(x)
+ if (x < 1)
+ fun_l27_n706(x)
+ else
+ fun_l27_n189(x)
+ end
+end
+
+def fun_l26_n323(x)
+ if (x < 1)
+ fun_l27_n303(x)
+ else
+ fun_l27_n135(x)
+ end
+end
+
+def fun_l26_n324(x)
+ if (x < 1)
+ fun_l27_n103(x)
+ else
+ fun_l27_n579(x)
+ end
+end
+
+def fun_l26_n325(x)
+ if (x < 1)
+ fun_l27_n655(x)
+ else
+ fun_l27_n619(x)
+ end
+end
+
+def fun_l26_n326(x)
+ if (x < 1)
+ fun_l27_n119(x)
+ else
+ fun_l27_n950(x)
+ end
+end
+
+def fun_l26_n327(x)
+ if (x < 1)
+ fun_l27_n402(x)
+ else
+ fun_l27_n490(x)
+ end
+end
+
+def fun_l26_n328(x)
+ if (x < 1)
+ fun_l27_n6(x)
+ else
+ fun_l27_n844(x)
+ end
+end
+
+def fun_l26_n329(x)
+ if (x < 1)
+ fun_l27_n297(x)
+ else
+ fun_l27_n879(x)
+ end
+end
+
+def fun_l26_n330(x)
+ if (x < 1)
+ fun_l27_n747(x)
+ else
+ fun_l27_n701(x)
+ end
+end
+
+def fun_l26_n331(x)
+ if (x < 1)
+ fun_l27_n714(x)
+ else
+ fun_l27_n770(x)
+ end
+end
+
+def fun_l26_n332(x)
+ if (x < 1)
+ fun_l27_n377(x)
+ else
+ fun_l27_n434(x)
+ end
+end
+
+def fun_l26_n333(x)
+ if (x < 1)
+ fun_l27_n530(x)
+ else
+ fun_l27_n678(x)
+ end
+end
+
+def fun_l26_n334(x)
+ if (x < 1)
+ fun_l27_n28(x)
+ else
+ fun_l27_n154(x)
+ end
+end
+
+def fun_l26_n335(x)
+ if (x < 1)
+ fun_l27_n905(x)
+ else
+ fun_l27_n207(x)
+ end
+end
+
+def fun_l26_n336(x)
+ if (x < 1)
+ fun_l27_n537(x)
+ else
+ fun_l27_n426(x)
+ end
+end
+
+def fun_l26_n337(x)
+ if (x < 1)
+ fun_l27_n284(x)
+ else
+ fun_l27_n118(x)
+ end
+end
+
+def fun_l26_n338(x)
+ if (x < 1)
+ fun_l27_n40(x)
+ else
+ fun_l27_n123(x)
+ end
+end
+
+def fun_l26_n339(x)
+ if (x < 1)
+ fun_l27_n620(x)
+ else
+ fun_l27_n370(x)
+ end
+end
+
+def fun_l26_n340(x)
+ if (x < 1)
+ fun_l27_n946(x)
+ else
+ fun_l27_n994(x)
+ end
+end
+
+def fun_l26_n341(x)
+ if (x < 1)
+ fun_l27_n685(x)
+ else
+ fun_l27_n911(x)
+ end
+end
+
+def fun_l26_n342(x)
+ if (x < 1)
+ fun_l27_n641(x)
+ else
+ fun_l27_n339(x)
+ end
+end
+
+def fun_l26_n343(x)
+ if (x < 1)
+ fun_l27_n936(x)
+ else
+ fun_l27_n344(x)
+ end
+end
+
+def fun_l26_n344(x)
+ if (x < 1)
+ fun_l27_n822(x)
+ else
+ fun_l27_n939(x)
+ end
+end
+
+def fun_l26_n345(x)
+ if (x < 1)
+ fun_l27_n608(x)
+ else
+ fun_l27_n870(x)
+ end
+end
+
+def fun_l26_n346(x)
+ if (x < 1)
+ fun_l27_n211(x)
+ else
+ fun_l27_n124(x)
+ end
+end
+
+def fun_l26_n347(x)
+ if (x < 1)
+ fun_l27_n71(x)
+ else
+ fun_l27_n9(x)
+ end
+end
+
+def fun_l26_n348(x)
+ if (x < 1)
+ fun_l27_n68(x)
+ else
+ fun_l27_n51(x)
+ end
+end
+
+def fun_l26_n349(x)
+ if (x < 1)
+ fun_l27_n641(x)
+ else
+ fun_l27_n665(x)
+ end
+end
+
+def fun_l26_n350(x)
+ if (x < 1)
+ fun_l27_n516(x)
+ else
+ fun_l27_n364(x)
+ end
+end
+
+def fun_l26_n351(x)
+ if (x < 1)
+ fun_l27_n104(x)
+ else
+ fun_l27_n569(x)
+ end
+end
+
+def fun_l26_n352(x)
+ if (x < 1)
+ fun_l27_n90(x)
+ else
+ fun_l27_n565(x)
+ end
+end
+
+def fun_l26_n353(x)
+ if (x < 1)
+ fun_l27_n647(x)
+ else
+ fun_l27_n124(x)
+ end
+end
+
+def fun_l26_n354(x)
+ if (x < 1)
+ fun_l27_n332(x)
+ else
+ fun_l27_n368(x)
+ end
+end
+
+def fun_l26_n355(x)
+ if (x < 1)
+ fun_l27_n547(x)
+ else
+ fun_l27_n797(x)
+ end
+end
+
+def fun_l26_n356(x)
+ if (x < 1)
+ fun_l27_n462(x)
+ else
+ fun_l27_n503(x)
+ end
+end
+
+def fun_l26_n357(x)
+ if (x < 1)
+ fun_l27_n25(x)
+ else
+ fun_l27_n920(x)
+ end
+end
+
+def fun_l26_n358(x)
+ if (x < 1)
+ fun_l27_n891(x)
+ else
+ fun_l27_n136(x)
+ end
+end
+
+def fun_l26_n359(x)
+ if (x < 1)
+ fun_l27_n785(x)
+ else
+ fun_l27_n600(x)
+ end
+end
+
+def fun_l26_n360(x)
+ if (x < 1)
+ fun_l27_n945(x)
+ else
+ fun_l27_n617(x)
+ end
+end
+
+def fun_l26_n361(x)
+ if (x < 1)
+ fun_l27_n995(x)
+ else
+ fun_l27_n781(x)
+ end
+end
+
+def fun_l26_n362(x)
+ if (x < 1)
+ fun_l27_n553(x)
+ else
+ fun_l27_n650(x)
+ end
+end
+
+def fun_l26_n363(x)
+ if (x < 1)
+ fun_l27_n937(x)
+ else
+ fun_l27_n382(x)
+ end
+end
+
+def fun_l26_n364(x)
+ if (x < 1)
+ fun_l27_n946(x)
+ else
+ fun_l27_n980(x)
+ end
+end
+
+def fun_l26_n365(x)
+ if (x < 1)
+ fun_l27_n293(x)
+ else
+ fun_l27_n225(x)
+ end
+end
+
+def fun_l26_n366(x)
+ if (x < 1)
+ fun_l27_n872(x)
+ else
+ fun_l27_n535(x)
+ end
+end
+
+def fun_l26_n367(x)
+ if (x < 1)
+ fun_l27_n427(x)
+ else
+ fun_l27_n175(x)
+ end
+end
+
+def fun_l26_n368(x)
+ if (x < 1)
+ fun_l27_n111(x)
+ else
+ fun_l27_n379(x)
+ end
+end
+
+def fun_l26_n369(x)
+ if (x < 1)
+ fun_l27_n735(x)
+ else
+ fun_l27_n921(x)
+ end
+end
+
+def fun_l26_n370(x)
+ if (x < 1)
+ fun_l27_n818(x)
+ else
+ fun_l27_n189(x)
+ end
+end
+
+def fun_l26_n371(x)
+ if (x < 1)
+ fun_l27_n932(x)
+ else
+ fun_l27_n884(x)
+ end
+end
+
+def fun_l26_n372(x)
+ if (x < 1)
+ fun_l27_n40(x)
+ else
+ fun_l27_n732(x)
+ end
+end
+
+def fun_l26_n373(x)
+ if (x < 1)
+ fun_l27_n54(x)
+ else
+ fun_l27_n365(x)
+ end
+end
+
+def fun_l26_n374(x)
+ if (x < 1)
+ fun_l27_n742(x)
+ else
+ fun_l27_n319(x)
+ end
+end
+
+def fun_l26_n375(x)
+ if (x < 1)
+ fun_l27_n149(x)
+ else
+ fun_l27_n504(x)
+ end
+end
+
+def fun_l26_n376(x)
+ if (x < 1)
+ fun_l27_n185(x)
+ else
+ fun_l27_n458(x)
+ end
+end
+
+def fun_l26_n377(x)
+ if (x < 1)
+ fun_l27_n107(x)
+ else
+ fun_l27_n201(x)
+ end
+end
+
+def fun_l26_n378(x)
+ if (x < 1)
+ fun_l27_n94(x)
+ else
+ fun_l27_n173(x)
+ end
+end
+
+def fun_l26_n379(x)
+ if (x < 1)
+ fun_l27_n198(x)
+ else
+ fun_l27_n885(x)
+ end
+end
+
+def fun_l26_n380(x)
+ if (x < 1)
+ fun_l27_n164(x)
+ else
+ fun_l27_n23(x)
+ end
+end
+
+def fun_l26_n381(x)
+ if (x < 1)
+ fun_l27_n170(x)
+ else
+ fun_l27_n431(x)
+ end
+end
+
+def fun_l26_n382(x)
+ if (x < 1)
+ fun_l27_n679(x)
+ else
+ fun_l27_n613(x)
+ end
+end
+
+def fun_l26_n383(x)
+ if (x < 1)
+ fun_l27_n981(x)
+ else
+ fun_l27_n69(x)
+ end
+end
+
+def fun_l26_n384(x)
+ if (x < 1)
+ fun_l27_n600(x)
+ else
+ fun_l27_n544(x)
+ end
+end
+
+def fun_l26_n385(x)
+ if (x < 1)
+ fun_l27_n153(x)
+ else
+ fun_l27_n332(x)
+ end
+end
+
+def fun_l26_n386(x)
+ if (x < 1)
+ fun_l27_n63(x)
+ else
+ fun_l27_n597(x)
+ end
+end
+
+def fun_l26_n387(x)
+ if (x < 1)
+ fun_l27_n259(x)
+ else
+ fun_l27_n33(x)
+ end
+end
+
+def fun_l26_n388(x)
+ if (x < 1)
+ fun_l27_n363(x)
+ else
+ fun_l27_n765(x)
+ end
+end
+
+def fun_l26_n389(x)
+ if (x < 1)
+ fun_l27_n495(x)
+ else
+ fun_l27_n133(x)
+ end
+end
+
+def fun_l26_n390(x)
+ if (x < 1)
+ fun_l27_n62(x)
+ else
+ fun_l27_n462(x)
+ end
+end
+
+def fun_l26_n391(x)
+ if (x < 1)
+ fun_l27_n811(x)
+ else
+ fun_l27_n30(x)
+ end
+end
+
+def fun_l26_n392(x)
+ if (x < 1)
+ fun_l27_n222(x)
+ else
+ fun_l27_n451(x)
+ end
+end
+
+def fun_l26_n393(x)
+ if (x < 1)
+ fun_l27_n286(x)
+ else
+ fun_l27_n664(x)
+ end
+end
+
+def fun_l26_n394(x)
+ if (x < 1)
+ fun_l27_n935(x)
+ else
+ fun_l27_n392(x)
+ end
+end
+
+def fun_l26_n395(x)
+ if (x < 1)
+ fun_l27_n621(x)
+ else
+ fun_l27_n434(x)
+ end
+end
+
+def fun_l26_n396(x)
+ if (x < 1)
+ fun_l27_n318(x)
+ else
+ fun_l27_n410(x)
+ end
+end
+
+def fun_l26_n397(x)
+ if (x < 1)
+ fun_l27_n847(x)
+ else
+ fun_l27_n727(x)
+ end
+end
+
+def fun_l26_n398(x)
+ if (x < 1)
+ fun_l27_n705(x)
+ else
+ fun_l27_n453(x)
+ end
+end
+
+def fun_l26_n399(x)
+ if (x < 1)
+ fun_l27_n787(x)
+ else
+ fun_l27_n442(x)
+ end
+end
+
+def fun_l26_n400(x)
+ if (x < 1)
+ fun_l27_n854(x)
+ else
+ fun_l27_n885(x)
+ end
+end
+
+def fun_l26_n401(x)
+ if (x < 1)
+ fun_l27_n825(x)
+ else
+ fun_l27_n399(x)
+ end
+end
+
+def fun_l26_n402(x)
+ if (x < 1)
+ fun_l27_n420(x)
+ else
+ fun_l27_n747(x)
+ end
+end
+
+def fun_l26_n403(x)
+ if (x < 1)
+ fun_l27_n985(x)
+ else
+ fun_l27_n875(x)
+ end
+end
+
+def fun_l26_n404(x)
+ if (x < 1)
+ fun_l27_n193(x)
+ else
+ fun_l27_n448(x)
+ end
+end
+
+def fun_l26_n405(x)
+ if (x < 1)
+ fun_l27_n594(x)
+ else
+ fun_l27_n769(x)
+ end
+end
+
+def fun_l26_n406(x)
+ if (x < 1)
+ fun_l27_n774(x)
+ else
+ fun_l27_n44(x)
+ end
+end
+
+def fun_l26_n407(x)
+ if (x < 1)
+ fun_l27_n563(x)
+ else
+ fun_l27_n979(x)
+ end
+end
+
+def fun_l26_n408(x)
+ if (x < 1)
+ fun_l27_n369(x)
+ else
+ fun_l27_n825(x)
+ end
+end
+
+def fun_l26_n409(x)
+ if (x < 1)
+ fun_l27_n70(x)
+ else
+ fun_l27_n894(x)
+ end
+end
+
+def fun_l26_n410(x)
+ if (x < 1)
+ fun_l27_n651(x)
+ else
+ fun_l27_n224(x)
+ end
+end
+
+def fun_l26_n411(x)
+ if (x < 1)
+ fun_l27_n219(x)
+ else
+ fun_l27_n193(x)
+ end
+end
+
+def fun_l26_n412(x)
+ if (x < 1)
+ fun_l27_n16(x)
+ else
+ fun_l27_n113(x)
+ end
+end
+
+def fun_l26_n413(x)
+ if (x < 1)
+ fun_l27_n653(x)
+ else
+ fun_l27_n754(x)
+ end
+end
+
+def fun_l26_n414(x)
+ if (x < 1)
+ fun_l27_n682(x)
+ else
+ fun_l27_n378(x)
+ end
+end
+
+def fun_l26_n415(x)
+ if (x < 1)
+ fun_l27_n326(x)
+ else
+ fun_l27_n534(x)
+ end
+end
+
+def fun_l26_n416(x)
+ if (x < 1)
+ fun_l27_n552(x)
+ else
+ fun_l27_n627(x)
+ end
+end
+
+def fun_l26_n417(x)
+ if (x < 1)
+ fun_l27_n486(x)
+ else
+ fun_l27_n729(x)
+ end
+end
+
+def fun_l26_n418(x)
+ if (x < 1)
+ fun_l27_n153(x)
+ else
+ fun_l27_n220(x)
+ end
+end
+
+def fun_l26_n419(x)
+ if (x < 1)
+ fun_l27_n636(x)
+ else
+ fun_l27_n492(x)
+ end
+end
+
+def fun_l26_n420(x)
+ if (x < 1)
+ fun_l27_n692(x)
+ else
+ fun_l27_n7(x)
+ end
+end
+
+def fun_l26_n421(x)
+ if (x < 1)
+ fun_l27_n303(x)
+ else
+ fun_l27_n396(x)
+ end
+end
+
+def fun_l26_n422(x)
+ if (x < 1)
+ fun_l27_n937(x)
+ else
+ fun_l27_n940(x)
+ end
+end
+
+def fun_l26_n423(x)
+ if (x < 1)
+ fun_l27_n581(x)
+ else
+ fun_l27_n355(x)
+ end
+end
+
+def fun_l26_n424(x)
+ if (x < 1)
+ fun_l27_n743(x)
+ else
+ fun_l27_n636(x)
+ end
+end
+
+def fun_l26_n425(x)
+ if (x < 1)
+ fun_l27_n385(x)
+ else
+ fun_l27_n573(x)
+ end
+end
+
+def fun_l26_n426(x)
+ if (x < 1)
+ fun_l27_n595(x)
+ else
+ fun_l27_n873(x)
+ end
+end
+
+def fun_l26_n427(x)
+ if (x < 1)
+ fun_l27_n700(x)
+ else
+ fun_l27_n541(x)
+ end
+end
+
+def fun_l26_n428(x)
+ if (x < 1)
+ fun_l27_n445(x)
+ else
+ fun_l27_n239(x)
+ end
+end
+
+def fun_l26_n429(x)
+ if (x < 1)
+ fun_l27_n500(x)
+ else
+ fun_l27_n7(x)
+ end
+end
+
+def fun_l26_n430(x)
+ if (x < 1)
+ fun_l27_n615(x)
+ else
+ fun_l27_n383(x)
+ end
+end
+
+def fun_l26_n431(x)
+ if (x < 1)
+ fun_l27_n962(x)
+ else
+ fun_l27_n424(x)
+ end
+end
+
+def fun_l26_n432(x)
+ if (x < 1)
+ fun_l27_n289(x)
+ else
+ fun_l27_n142(x)
+ end
+end
+
+def fun_l26_n433(x)
+ if (x < 1)
+ fun_l27_n527(x)
+ else
+ fun_l27_n112(x)
+ end
+end
+
+def fun_l26_n434(x)
+ if (x < 1)
+ fun_l27_n884(x)
+ else
+ fun_l27_n509(x)
+ end
+end
+
+def fun_l26_n435(x)
+ if (x < 1)
+ fun_l27_n65(x)
+ else
+ fun_l27_n431(x)
+ end
+end
+
+def fun_l26_n436(x)
+ if (x < 1)
+ fun_l27_n324(x)
+ else
+ fun_l27_n885(x)
+ end
+end
+
+def fun_l26_n437(x)
+ if (x < 1)
+ fun_l27_n826(x)
+ else
+ fun_l27_n372(x)
+ end
+end
+
+def fun_l26_n438(x)
+ if (x < 1)
+ fun_l27_n291(x)
+ else
+ fun_l27_n793(x)
+ end
+end
+
+def fun_l26_n439(x)
+ if (x < 1)
+ fun_l27_n677(x)
+ else
+ fun_l27_n31(x)
+ end
+end
+
+def fun_l26_n440(x)
+ if (x < 1)
+ fun_l27_n948(x)
+ else
+ fun_l27_n320(x)
+ end
+end
+
+def fun_l26_n441(x)
+ if (x < 1)
+ fun_l27_n951(x)
+ else
+ fun_l27_n504(x)
+ end
+end
+
+def fun_l26_n442(x)
+ if (x < 1)
+ fun_l27_n388(x)
+ else
+ fun_l27_n1(x)
+ end
+end
+
+def fun_l26_n443(x)
+ if (x < 1)
+ fun_l27_n92(x)
+ else
+ fun_l27_n570(x)
+ end
+end
+
+def fun_l26_n444(x)
+ if (x < 1)
+ fun_l27_n956(x)
+ else
+ fun_l27_n120(x)
+ end
+end
+
+def fun_l26_n445(x)
+ if (x < 1)
+ fun_l27_n985(x)
+ else
+ fun_l27_n233(x)
+ end
+end
+
+def fun_l26_n446(x)
+ if (x < 1)
+ fun_l27_n153(x)
+ else
+ fun_l27_n590(x)
+ end
+end
+
+def fun_l26_n447(x)
+ if (x < 1)
+ fun_l27_n793(x)
+ else
+ fun_l27_n675(x)
+ end
+end
+
+def fun_l26_n448(x)
+ if (x < 1)
+ fun_l27_n351(x)
+ else
+ fun_l27_n781(x)
+ end
+end
+
+def fun_l26_n449(x)
+ if (x < 1)
+ fun_l27_n137(x)
+ else
+ fun_l27_n147(x)
+ end
+end
+
+def fun_l26_n450(x)
+ if (x < 1)
+ fun_l27_n138(x)
+ else
+ fun_l27_n636(x)
+ end
+end
+
+def fun_l26_n451(x)
+ if (x < 1)
+ fun_l27_n154(x)
+ else
+ fun_l27_n755(x)
+ end
+end
+
+def fun_l26_n452(x)
+ if (x < 1)
+ fun_l27_n665(x)
+ else
+ fun_l27_n65(x)
+ end
+end
+
+def fun_l26_n453(x)
+ if (x < 1)
+ fun_l27_n769(x)
+ else
+ fun_l27_n847(x)
+ end
+end
+
+def fun_l26_n454(x)
+ if (x < 1)
+ fun_l27_n959(x)
+ else
+ fun_l27_n731(x)
+ end
+end
+
+def fun_l26_n455(x)
+ if (x < 1)
+ fun_l27_n565(x)
+ else
+ fun_l27_n916(x)
+ end
+end
+
+def fun_l26_n456(x)
+ if (x < 1)
+ fun_l27_n421(x)
+ else
+ fun_l27_n57(x)
+ end
+end
+
+def fun_l26_n457(x)
+ if (x < 1)
+ fun_l27_n595(x)
+ else
+ fun_l27_n920(x)
+ end
+end
+
+def fun_l26_n458(x)
+ if (x < 1)
+ fun_l27_n660(x)
+ else
+ fun_l27_n835(x)
+ end
+end
+
+def fun_l26_n459(x)
+ if (x < 1)
+ fun_l27_n114(x)
+ else
+ fun_l27_n418(x)
+ end
+end
+
+def fun_l26_n460(x)
+ if (x < 1)
+ fun_l27_n744(x)
+ else
+ fun_l27_n674(x)
+ end
+end
+
+def fun_l26_n461(x)
+ if (x < 1)
+ fun_l27_n436(x)
+ else
+ fun_l27_n448(x)
+ end
+end
+
+def fun_l26_n462(x)
+ if (x < 1)
+ fun_l27_n796(x)
+ else
+ fun_l27_n960(x)
+ end
+end
+
+def fun_l26_n463(x)
+ if (x < 1)
+ fun_l27_n871(x)
+ else
+ fun_l27_n300(x)
+ end
+end
+
+def fun_l26_n464(x)
+ if (x < 1)
+ fun_l27_n942(x)
+ else
+ fun_l27_n625(x)
+ end
+end
+
+def fun_l26_n465(x)
+ if (x < 1)
+ fun_l27_n219(x)
+ else
+ fun_l27_n383(x)
+ end
+end
+
+def fun_l26_n466(x)
+ if (x < 1)
+ fun_l27_n440(x)
+ else
+ fun_l27_n177(x)
+ end
+end
+
+def fun_l26_n467(x)
+ if (x < 1)
+ fun_l27_n958(x)
+ else
+ fun_l27_n441(x)
+ end
+end
+
+def fun_l26_n468(x)
+ if (x < 1)
+ fun_l27_n899(x)
+ else
+ fun_l27_n613(x)
+ end
+end
+
+def fun_l26_n469(x)
+ if (x < 1)
+ fun_l27_n535(x)
+ else
+ fun_l27_n439(x)
+ end
+end
+
+def fun_l26_n470(x)
+ if (x < 1)
+ fun_l27_n18(x)
+ else
+ fun_l27_n716(x)
+ end
+end
+
+def fun_l26_n471(x)
+ if (x < 1)
+ fun_l27_n768(x)
+ else
+ fun_l27_n374(x)
+ end
+end
+
+def fun_l26_n472(x)
+ if (x < 1)
+ fun_l27_n537(x)
+ else
+ fun_l27_n434(x)
+ end
+end
+
+def fun_l26_n473(x)
+ if (x < 1)
+ fun_l27_n632(x)
+ else
+ fun_l27_n733(x)
+ end
+end
+
+def fun_l26_n474(x)
+ if (x < 1)
+ fun_l27_n347(x)
+ else
+ fun_l27_n562(x)
+ end
+end
+
+def fun_l26_n475(x)
+ if (x < 1)
+ fun_l27_n741(x)
+ else
+ fun_l27_n684(x)
+ end
+end
+
+def fun_l26_n476(x)
+ if (x < 1)
+ fun_l27_n222(x)
+ else
+ fun_l27_n41(x)
+ end
+end
+
+def fun_l26_n477(x)
+ if (x < 1)
+ fun_l27_n23(x)
+ else
+ fun_l27_n541(x)
+ end
+end
+
+def fun_l26_n478(x)
+ if (x < 1)
+ fun_l27_n588(x)
+ else
+ fun_l27_n394(x)
+ end
+end
+
+def fun_l26_n479(x)
+ if (x < 1)
+ fun_l27_n526(x)
+ else
+ fun_l27_n974(x)
+ end
+end
+
+def fun_l26_n480(x)
+ if (x < 1)
+ fun_l27_n845(x)
+ else
+ fun_l27_n528(x)
+ end
+end
+
+def fun_l26_n481(x)
+ if (x < 1)
+ fun_l27_n505(x)
+ else
+ fun_l27_n913(x)
+ end
+end
+
+def fun_l26_n482(x)
+ if (x < 1)
+ fun_l27_n100(x)
+ else
+ fun_l27_n233(x)
+ end
+end
+
+def fun_l26_n483(x)
+ if (x < 1)
+ fun_l27_n87(x)
+ else
+ fun_l27_n339(x)
+ end
+end
+
+def fun_l26_n484(x)
+ if (x < 1)
+ fun_l27_n744(x)
+ else
+ fun_l27_n404(x)
+ end
+end
+
+def fun_l26_n485(x)
+ if (x < 1)
+ fun_l27_n965(x)
+ else
+ fun_l27_n86(x)
+ end
+end
+
+def fun_l26_n486(x)
+ if (x < 1)
+ fun_l27_n826(x)
+ else
+ fun_l27_n25(x)
+ end
+end
+
+def fun_l26_n487(x)
+ if (x < 1)
+ fun_l27_n950(x)
+ else
+ fun_l27_n876(x)
+ end
+end
+
+def fun_l26_n488(x)
+ if (x < 1)
+ fun_l27_n964(x)
+ else
+ fun_l27_n60(x)
+ end
+end
+
+def fun_l26_n489(x)
+ if (x < 1)
+ fun_l27_n171(x)
+ else
+ fun_l27_n768(x)
+ end
+end
+
+def fun_l26_n490(x)
+ if (x < 1)
+ fun_l27_n391(x)
+ else
+ fun_l27_n308(x)
+ end
+end
+
+def fun_l26_n491(x)
+ if (x < 1)
+ fun_l27_n440(x)
+ else
+ fun_l27_n51(x)
+ end
+end
+
+def fun_l26_n492(x)
+ if (x < 1)
+ fun_l27_n403(x)
+ else
+ fun_l27_n956(x)
+ end
+end
+
+def fun_l26_n493(x)
+ if (x < 1)
+ fun_l27_n802(x)
+ else
+ fun_l27_n931(x)
+ end
+end
+
+def fun_l26_n494(x)
+ if (x < 1)
+ fun_l27_n7(x)
+ else
+ fun_l27_n291(x)
+ end
+end
+
+def fun_l26_n495(x)
+ if (x < 1)
+ fun_l27_n149(x)
+ else
+ fun_l27_n173(x)
+ end
+end
+
+def fun_l26_n496(x)
+ if (x < 1)
+ fun_l27_n864(x)
+ else
+ fun_l27_n488(x)
+ end
+end
+
+def fun_l26_n497(x)
+ if (x < 1)
+ fun_l27_n290(x)
+ else
+ fun_l27_n431(x)
+ end
+end
+
+def fun_l26_n498(x)
+ if (x < 1)
+ fun_l27_n269(x)
+ else
+ fun_l27_n622(x)
+ end
+end
+
+def fun_l26_n499(x)
+ if (x < 1)
+ fun_l27_n168(x)
+ else
+ fun_l27_n225(x)
+ end
+end
+
+def fun_l26_n500(x)
+ if (x < 1)
+ fun_l27_n512(x)
+ else
+ fun_l27_n363(x)
+ end
+end
+
+def fun_l26_n501(x)
+ if (x < 1)
+ fun_l27_n844(x)
+ else
+ fun_l27_n15(x)
+ end
+end
+
+def fun_l26_n502(x)
+ if (x < 1)
+ fun_l27_n242(x)
+ else
+ fun_l27_n479(x)
+ end
+end
+
+def fun_l26_n503(x)
+ if (x < 1)
+ fun_l27_n285(x)
+ else
+ fun_l27_n202(x)
+ end
+end
+
+def fun_l26_n504(x)
+ if (x < 1)
+ fun_l27_n64(x)
+ else
+ fun_l27_n223(x)
+ end
+end
+
+def fun_l26_n505(x)
+ if (x < 1)
+ fun_l27_n85(x)
+ else
+ fun_l27_n477(x)
+ end
+end
+
+def fun_l26_n506(x)
+ if (x < 1)
+ fun_l27_n360(x)
+ else
+ fun_l27_n406(x)
+ end
+end
+
+def fun_l26_n507(x)
+ if (x < 1)
+ fun_l27_n515(x)
+ else
+ fun_l27_n599(x)
+ end
+end
+
+def fun_l26_n508(x)
+ if (x < 1)
+ fun_l27_n848(x)
+ else
+ fun_l27_n832(x)
+ end
+end
+
+def fun_l26_n509(x)
+ if (x < 1)
+ fun_l27_n831(x)
+ else
+ fun_l27_n334(x)
+ end
+end
+
+def fun_l26_n510(x)
+ if (x < 1)
+ fun_l27_n53(x)
+ else
+ fun_l27_n937(x)
+ end
+end
+
+def fun_l26_n511(x)
+ if (x < 1)
+ fun_l27_n583(x)
+ else
+ fun_l27_n901(x)
+ end
+end
+
+def fun_l26_n512(x)
+ if (x < 1)
+ fun_l27_n394(x)
+ else
+ fun_l27_n135(x)
+ end
+end
+
+def fun_l26_n513(x)
+ if (x < 1)
+ fun_l27_n175(x)
+ else
+ fun_l27_n339(x)
+ end
+end
+
+def fun_l26_n514(x)
+ if (x < 1)
+ fun_l27_n200(x)
+ else
+ fun_l27_n124(x)
+ end
+end
+
+def fun_l26_n515(x)
+ if (x < 1)
+ fun_l27_n145(x)
+ else
+ fun_l27_n426(x)
+ end
+end
+
+def fun_l26_n516(x)
+ if (x < 1)
+ fun_l27_n803(x)
+ else
+ fun_l27_n466(x)
+ end
+end
+
+def fun_l26_n517(x)
+ if (x < 1)
+ fun_l27_n773(x)
+ else
+ fun_l27_n296(x)
+ end
+end
+
+def fun_l26_n518(x)
+ if (x < 1)
+ fun_l27_n957(x)
+ else
+ fun_l27_n373(x)
+ end
+end
+
+def fun_l26_n519(x)
+ if (x < 1)
+ fun_l27_n887(x)
+ else
+ fun_l27_n498(x)
+ end
+end
+
+def fun_l26_n520(x)
+ if (x < 1)
+ fun_l27_n629(x)
+ else
+ fun_l27_n477(x)
+ end
+end
+
+def fun_l26_n521(x)
+ if (x < 1)
+ fun_l27_n634(x)
+ else
+ fun_l27_n138(x)
+ end
+end
+
+def fun_l26_n522(x)
+ if (x < 1)
+ fun_l27_n942(x)
+ else
+ fun_l27_n853(x)
+ end
+end
+
+def fun_l26_n523(x)
+ if (x < 1)
+ fun_l27_n453(x)
+ else
+ fun_l27_n520(x)
+ end
+end
+
+def fun_l26_n524(x)
+ if (x < 1)
+ fun_l27_n125(x)
+ else
+ fun_l27_n922(x)
+ end
+end
+
+def fun_l26_n525(x)
+ if (x < 1)
+ fun_l27_n629(x)
+ else
+ fun_l27_n711(x)
+ end
+end
+
+def fun_l26_n526(x)
+ if (x < 1)
+ fun_l27_n243(x)
+ else
+ fun_l27_n374(x)
+ end
+end
+
+def fun_l26_n527(x)
+ if (x < 1)
+ fun_l27_n476(x)
+ else
+ fun_l27_n348(x)
+ end
+end
+
+def fun_l26_n528(x)
+ if (x < 1)
+ fun_l27_n532(x)
+ else
+ fun_l27_n156(x)
+ end
+end
+
+def fun_l26_n529(x)
+ if (x < 1)
+ fun_l27_n139(x)
+ else
+ fun_l27_n976(x)
+ end
+end
+
+def fun_l26_n530(x)
+ if (x < 1)
+ fun_l27_n323(x)
+ else
+ fun_l27_n48(x)
+ end
+end
+
+def fun_l26_n531(x)
+ if (x < 1)
+ fun_l27_n626(x)
+ else
+ fun_l27_n913(x)
+ end
+end
+
+def fun_l26_n532(x)
+ if (x < 1)
+ fun_l27_n98(x)
+ else
+ fun_l27_n369(x)
+ end
+end
+
+def fun_l26_n533(x)
+ if (x < 1)
+ fun_l27_n50(x)
+ else
+ fun_l27_n41(x)
+ end
+end
+
+def fun_l26_n534(x)
+ if (x < 1)
+ fun_l27_n163(x)
+ else
+ fun_l27_n722(x)
+ end
+end
+
+def fun_l26_n535(x)
+ if (x < 1)
+ fun_l27_n640(x)
+ else
+ fun_l27_n622(x)
+ end
+end
+
+def fun_l26_n536(x)
+ if (x < 1)
+ fun_l27_n98(x)
+ else
+ fun_l27_n970(x)
+ end
+end
+
+def fun_l26_n537(x)
+ if (x < 1)
+ fun_l27_n828(x)
+ else
+ fun_l27_n240(x)
+ end
+end
+
+def fun_l26_n538(x)
+ if (x < 1)
+ fun_l27_n303(x)
+ else
+ fun_l27_n116(x)
+ end
+end
+
+def fun_l26_n539(x)
+ if (x < 1)
+ fun_l27_n341(x)
+ else
+ fun_l27_n545(x)
+ end
+end
+
+def fun_l26_n540(x)
+ if (x < 1)
+ fun_l27_n476(x)
+ else
+ fun_l27_n943(x)
+ end
+end
+
+def fun_l26_n541(x)
+ if (x < 1)
+ fun_l27_n380(x)
+ else
+ fun_l27_n894(x)
+ end
+end
+
+def fun_l26_n542(x)
+ if (x < 1)
+ fun_l27_n330(x)
+ else
+ fun_l27_n96(x)
+ end
+end
+
+def fun_l26_n543(x)
+ if (x < 1)
+ fun_l27_n676(x)
+ else
+ fun_l27_n876(x)
+ end
+end
+
+def fun_l26_n544(x)
+ if (x < 1)
+ fun_l27_n396(x)
+ else
+ fun_l27_n116(x)
+ end
+end
+
+def fun_l26_n545(x)
+ if (x < 1)
+ fun_l27_n691(x)
+ else
+ fun_l27_n178(x)
+ end
+end
+
+def fun_l26_n546(x)
+ if (x < 1)
+ fun_l27_n118(x)
+ else
+ fun_l27_n956(x)
+ end
+end
+
+def fun_l26_n547(x)
+ if (x < 1)
+ fun_l27_n20(x)
+ else
+ fun_l27_n777(x)
+ end
+end
+
+def fun_l26_n548(x)
+ if (x < 1)
+ fun_l27_n522(x)
+ else
+ fun_l27_n808(x)
+ end
+end
+
+def fun_l26_n549(x)
+ if (x < 1)
+ fun_l27_n624(x)
+ else
+ fun_l27_n54(x)
+ end
+end
+
+def fun_l26_n550(x)
+ if (x < 1)
+ fun_l27_n364(x)
+ else
+ fun_l27_n243(x)
+ end
+end
+
+def fun_l26_n551(x)
+ if (x < 1)
+ fun_l27_n283(x)
+ else
+ fun_l27_n913(x)
+ end
+end
+
+def fun_l26_n552(x)
+ if (x < 1)
+ fun_l27_n101(x)
+ else
+ fun_l27_n136(x)
+ end
+end
+
+def fun_l26_n553(x)
+ if (x < 1)
+ fun_l27_n965(x)
+ else
+ fun_l27_n453(x)
+ end
+end
+
+def fun_l26_n554(x)
+ if (x < 1)
+ fun_l27_n807(x)
+ else
+ fun_l27_n442(x)
+ end
+end
+
+def fun_l26_n555(x)
+ if (x < 1)
+ fun_l27_n987(x)
+ else
+ fun_l27_n883(x)
+ end
+end
+
+def fun_l26_n556(x)
+ if (x < 1)
+ fun_l27_n475(x)
+ else
+ fun_l27_n439(x)
+ end
+end
+
+def fun_l26_n557(x)
+ if (x < 1)
+ fun_l27_n580(x)
+ else
+ fun_l27_n301(x)
+ end
+end
+
+def fun_l26_n558(x)
+ if (x < 1)
+ fun_l27_n91(x)
+ else
+ fun_l27_n514(x)
+ end
+end
+
+def fun_l26_n559(x)
+ if (x < 1)
+ fun_l27_n395(x)
+ else
+ fun_l27_n583(x)
+ end
+end
+
+def fun_l26_n560(x)
+ if (x < 1)
+ fun_l27_n81(x)
+ else
+ fun_l27_n817(x)
+ end
+end
+
+def fun_l26_n561(x)
+ if (x < 1)
+ fun_l27_n816(x)
+ else
+ fun_l27_n423(x)
+ end
+end
+
+def fun_l26_n562(x)
+ if (x < 1)
+ fun_l27_n513(x)
+ else
+ fun_l27_n577(x)
+ end
+end
+
+def fun_l26_n563(x)
+ if (x < 1)
+ fun_l27_n864(x)
+ else
+ fun_l27_n249(x)
+ end
+end
+
+def fun_l26_n564(x)
+ if (x < 1)
+ fun_l27_n408(x)
+ else
+ fun_l27_n281(x)
+ end
+end
+
+def fun_l26_n565(x)
+ if (x < 1)
+ fun_l27_n963(x)
+ else
+ fun_l27_n736(x)
+ end
+end
+
+def fun_l26_n566(x)
+ if (x < 1)
+ fun_l27_n366(x)
+ else
+ fun_l27_n774(x)
+ end
+end
+
+def fun_l26_n567(x)
+ if (x < 1)
+ fun_l27_n239(x)
+ else
+ fun_l27_n473(x)
+ end
+end
+
+def fun_l26_n568(x)
+ if (x < 1)
+ fun_l27_n272(x)
+ else
+ fun_l27_n790(x)
+ end
+end
+
+def fun_l26_n569(x)
+ if (x < 1)
+ fun_l27_n225(x)
+ else
+ fun_l27_n970(x)
+ end
+end
+
+def fun_l26_n570(x)
+ if (x < 1)
+ fun_l27_n631(x)
+ else
+ fun_l27_n988(x)
+ end
+end
+
+def fun_l26_n571(x)
+ if (x < 1)
+ fun_l27_n224(x)
+ else
+ fun_l27_n286(x)
+ end
+end
+
+def fun_l26_n572(x)
+ if (x < 1)
+ fun_l27_n141(x)
+ else
+ fun_l27_n573(x)
+ end
+end
+
+def fun_l26_n573(x)
+ if (x < 1)
+ fun_l27_n493(x)
+ else
+ fun_l27_n288(x)
+ end
+end
+
+def fun_l26_n574(x)
+ if (x < 1)
+ fun_l27_n573(x)
+ else
+ fun_l27_n88(x)
+ end
+end
+
+def fun_l26_n575(x)
+ if (x < 1)
+ fun_l27_n174(x)
+ else
+ fun_l27_n635(x)
+ end
+end
+
+def fun_l26_n576(x)
+ if (x < 1)
+ fun_l27_n146(x)
+ else
+ fun_l27_n48(x)
+ end
+end
+
+def fun_l26_n577(x)
+ if (x < 1)
+ fun_l27_n344(x)
+ else
+ fun_l27_n668(x)
+ end
+end
+
+def fun_l26_n578(x)
+ if (x < 1)
+ fun_l27_n624(x)
+ else
+ fun_l27_n516(x)
+ end
+end
+
+def fun_l26_n579(x)
+ if (x < 1)
+ fun_l27_n349(x)
+ else
+ fun_l27_n510(x)
+ end
+end
+
+def fun_l26_n580(x)
+ if (x < 1)
+ fun_l27_n625(x)
+ else
+ fun_l27_n474(x)
+ end
+end
+
+def fun_l26_n581(x)
+ if (x < 1)
+ fun_l27_n473(x)
+ else
+ fun_l27_n785(x)
+ end
+end
+
+def fun_l26_n582(x)
+ if (x < 1)
+ fun_l27_n246(x)
+ else
+ fun_l27_n803(x)
+ end
+end
+
+def fun_l26_n583(x)
+ if (x < 1)
+ fun_l27_n232(x)
+ else
+ fun_l27_n981(x)
+ end
+end
+
+def fun_l26_n584(x)
+ if (x < 1)
+ fun_l27_n825(x)
+ else
+ fun_l27_n65(x)
+ end
+end
+
+def fun_l26_n585(x)
+ if (x < 1)
+ fun_l27_n258(x)
+ else
+ fun_l27_n700(x)
+ end
+end
+
+def fun_l26_n586(x)
+ if (x < 1)
+ fun_l27_n404(x)
+ else
+ fun_l27_n124(x)
+ end
+end
+
+def fun_l26_n587(x)
+ if (x < 1)
+ fun_l27_n390(x)
+ else
+ fun_l27_n812(x)
+ end
+end
+
+def fun_l26_n588(x)
+ if (x < 1)
+ fun_l27_n874(x)
+ else
+ fun_l27_n249(x)
+ end
+end
+
+def fun_l26_n589(x)
+ if (x < 1)
+ fun_l27_n837(x)
+ else
+ fun_l27_n480(x)
+ end
+end
+
+def fun_l26_n590(x)
+ if (x < 1)
+ fun_l27_n126(x)
+ else
+ fun_l27_n446(x)
+ end
+end
+
+def fun_l26_n591(x)
+ if (x < 1)
+ fun_l27_n838(x)
+ else
+ fun_l27_n285(x)
+ end
+end
+
+def fun_l26_n592(x)
+ if (x < 1)
+ fun_l27_n364(x)
+ else
+ fun_l27_n821(x)
+ end
+end
+
+def fun_l26_n593(x)
+ if (x < 1)
+ fun_l27_n781(x)
+ else
+ fun_l27_n310(x)
+ end
+end
+
+def fun_l26_n594(x)
+ if (x < 1)
+ fun_l27_n343(x)
+ else
+ fun_l27_n853(x)
+ end
+end
+
+def fun_l26_n595(x)
+ if (x < 1)
+ fun_l27_n216(x)
+ else
+ fun_l27_n334(x)
+ end
+end
+
+def fun_l26_n596(x)
+ if (x < 1)
+ fun_l27_n866(x)
+ else
+ fun_l27_n981(x)
+ end
+end
+
+def fun_l26_n597(x)
+ if (x < 1)
+ fun_l27_n551(x)
+ else
+ fun_l27_n184(x)
+ end
+end
+
+def fun_l26_n598(x)
+ if (x < 1)
+ fun_l27_n538(x)
+ else
+ fun_l27_n878(x)
+ end
+end
+
+def fun_l26_n599(x)
+ if (x < 1)
+ fun_l27_n909(x)
+ else
+ fun_l27_n435(x)
+ end
+end
+
+def fun_l26_n600(x)
+ if (x < 1)
+ fun_l27_n695(x)
+ else
+ fun_l27_n886(x)
+ end
+end
+
+def fun_l26_n601(x)
+ if (x < 1)
+ fun_l27_n927(x)
+ else
+ fun_l27_n303(x)
+ end
+end
+
+def fun_l26_n602(x)
+ if (x < 1)
+ fun_l27_n323(x)
+ else
+ fun_l27_n534(x)
+ end
+end
+
+def fun_l26_n603(x)
+ if (x < 1)
+ fun_l27_n803(x)
+ else
+ fun_l27_n34(x)
+ end
+end
+
+def fun_l26_n604(x)
+ if (x < 1)
+ fun_l27_n266(x)
+ else
+ fun_l27_n800(x)
+ end
+end
+
+def fun_l26_n605(x)
+ if (x < 1)
+ fun_l27_n831(x)
+ else
+ fun_l27_n338(x)
+ end
+end
+
+def fun_l26_n606(x)
+ if (x < 1)
+ fun_l27_n97(x)
+ else
+ fun_l27_n772(x)
+ end
+end
+
+def fun_l26_n607(x)
+ if (x < 1)
+ fun_l27_n291(x)
+ else
+ fun_l27_n756(x)
+ end
+end
+
+def fun_l26_n608(x)
+ if (x < 1)
+ fun_l27_n906(x)
+ else
+ fun_l27_n861(x)
+ end
+end
+
+def fun_l26_n609(x)
+ if (x < 1)
+ fun_l27_n793(x)
+ else
+ fun_l27_n845(x)
+ end
+end
+
+def fun_l26_n610(x)
+ if (x < 1)
+ fun_l27_n83(x)
+ else
+ fun_l27_n359(x)
+ end
+end
+
+def fun_l26_n611(x)
+ if (x < 1)
+ fun_l27_n911(x)
+ else
+ fun_l27_n526(x)
+ end
+end
+
+def fun_l26_n612(x)
+ if (x < 1)
+ fun_l27_n377(x)
+ else
+ fun_l27_n387(x)
+ end
+end
+
+def fun_l26_n613(x)
+ if (x < 1)
+ fun_l27_n809(x)
+ else
+ fun_l27_n802(x)
+ end
+end
+
+def fun_l26_n614(x)
+ if (x < 1)
+ fun_l27_n984(x)
+ else
+ fun_l27_n683(x)
+ end
+end
+
+def fun_l26_n615(x)
+ if (x < 1)
+ fun_l27_n330(x)
+ else
+ fun_l27_n439(x)
+ end
+end
+
+def fun_l26_n616(x)
+ if (x < 1)
+ fun_l27_n16(x)
+ else
+ fun_l27_n831(x)
+ end
+end
+
+def fun_l26_n617(x)
+ if (x < 1)
+ fun_l27_n149(x)
+ else
+ fun_l27_n934(x)
+ end
+end
+
+def fun_l26_n618(x)
+ if (x < 1)
+ fun_l27_n383(x)
+ else
+ fun_l27_n439(x)
+ end
+end
+
+def fun_l26_n619(x)
+ if (x < 1)
+ fun_l27_n599(x)
+ else
+ fun_l27_n855(x)
+ end
+end
+
+def fun_l26_n620(x)
+ if (x < 1)
+ fun_l27_n202(x)
+ else
+ fun_l27_n902(x)
+ end
+end
+
+def fun_l26_n621(x)
+ if (x < 1)
+ fun_l27_n219(x)
+ else
+ fun_l27_n13(x)
+ end
+end
+
+def fun_l26_n622(x)
+ if (x < 1)
+ fun_l27_n473(x)
+ else
+ fun_l27_n12(x)
+ end
+end
+
+def fun_l26_n623(x)
+ if (x < 1)
+ fun_l27_n918(x)
+ else
+ fun_l27_n50(x)
+ end
+end
+
+def fun_l26_n624(x)
+ if (x < 1)
+ fun_l27_n585(x)
+ else
+ fun_l27_n902(x)
+ end
+end
+
+def fun_l26_n625(x)
+ if (x < 1)
+ fun_l27_n676(x)
+ else
+ fun_l27_n533(x)
+ end
+end
+
+def fun_l26_n626(x)
+ if (x < 1)
+ fun_l27_n122(x)
+ else
+ fun_l27_n823(x)
+ end
+end
+
+def fun_l26_n627(x)
+ if (x < 1)
+ fun_l27_n214(x)
+ else
+ fun_l27_n485(x)
+ end
+end
+
+def fun_l26_n628(x)
+ if (x < 1)
+ fun_l27_n453(x)
+ else
+ fun_l27_n312(x)
+ end
+end
+
+def fun_l26_n629(x)
+ if (x < 1)
+ fun_l27_n929(x)
+ else
+ fun_l27_n272(x)
+ end
+end
+
+def fun_l26_n630(x)
+ if (x < 1)
+ fun_l27_n546(x)
+ else
+ fun_l27_n950(x)
+ end
+end
+
+def fun_l26_n631(x)
+ if (x < 1)
+ fun_l27_n222(x)
+ else
+ fun_l27_n780(x)
+ end
+end
+
+def fun_l26_n632(x)
+ if (x < 1)
+ fun_l27_n878(x)
+ else
+ fun_l27_n721(x)
+ end
+end
+
+def fun_l26_n633(x)
+ if (x < 1)
+ fun_l27_n611(x)
+ else
+ fun_l27_n15(x)
+ end
+end
+
+def fun_l26_n634(x)
+ if (x < 1)
+ fun_l27_n728(x)
+ else
+ fun_l27_n848(x)
+ end
+end
+
+def fun_l26_n635(x)
+ if (x < 1)
+ fun_l27_n489(x)
+ else
+ fun_l27_n3(x)
+ end
+end
+
+def fun_l26_n636(x)
+ if (x < 1)
+ fun_l27_n138(x)
+ else
+ fun_l27_n231(x)
+ end
+end
+
+def fun_l26_n637(x)
+ if (x < 1)
+ fun_l27_n861(x)
+ else
+ fun_l27_n115(x)
+ end
+end
+
+def fun_l26_n638(x)
+ if (x < 1)
+ fun_l27_n7(x)
+ else
+ fun_l27_n894(x)
+ end
+end
+
+def fun_l26_n639(x)
+ if (x < 1)
+ fun_l27_n683(x)
+ else
+ fun_l27_n964(x)
+ end
+end
+
+def fun_l26_n640(x)
+ if (x < 1)
+ fun_l27_n100(x)
+ else
+ fun_l27_n40(x)
+ end
+end
+
+def fun_l26_n641(x)
+ if (x < 1)
+ fun_l27_n744(x)
+ else
+ fun_l27_n855(x)
+ end
+end
+
+def fun_l26_n642(x)
+ if (x < 1)
+ fun_l27_n923(x)
+ else
+ fun_l27_n664(x)
+ end
+end
+
+def fun_l26_n643(x)
+ if (x < 1)
+ fun_l27_n150(x)
+ else
+ fun_l27_n713(x)
+ end
+end
+
+def fun_l26_n644(x)
+ if (x < 1)
+ fun_l27_n95(x)
+ else
+ fun_l27_n566(x)
+ end
+end
+
+def fun_l26_n645(x)
+ if (x < 1)
+ fun_l27_n886(x)
+ else
+ fun_l27_n811(x)
+ end
+end
+
+def fun_l26_n646(x)
+ if (x < 1)
+ fun_l27_n547(x)
+ else
+ fun_l27_n412(x)
+ end
+end
+
+def fun_l26_n647(x)
+ if (x < 1)
+ fun_l27_n570(x)
+ else
+ fun_l27_n606(x)
+ end
+end
+
+def fun_l26_n648(x)
+ if (x < 1)
+ fun_l27_n181(x)
+ else
+ fun_l27_n216(x)
+ end
+end
+
+def fun_l26_n649(x)
+ if (x < 1)
+ fun_l27_n198(x)
+ else
+ fun_l27_n988(x)
+ end
+end
+
+def fun_l26_n650(x)
+ if (x < 1)
+ fun_l27_n503(x)
+ else
+ fun_l27_n257(x)
+ end
+end
+
+def fun_l26_n651(x)
+ if (x < 1)
+ fun_l27_n799(x)
+ else
+ fun_l27_n175(x)
+ end
+end
+
+def fun_l26_n652(x)
+ if (x < 1)
+ fun_l27_n338(x)
+ else
+ fun_l27_n560(x)
+ end
+end
+
+def fun_l26_n653(x)
+ if (x < 1)
+ fun_l27_n597(x)
+ else
+ fun_l27_n988(x)
+ end
+end
+
+def fun_l26_n654(x)
+ if (x < 1)
+ fun_l27_n319(x)
+ else
+ fun_l27_n299(x)
+ end
+end
+
+def fun_l26_n655(x)
+ if (x < 1)
+ fun_l27_n510(x)
+ else
+ fun_l27_n375(x)
+ end
+end
+
+def fun_l26_n656(x)
+ if (x < 1)
+ fun_l27_n808(x)
+ else
+ fun_l27_n289(x)
+ end
+end
+
+def fun_l26_n657(x)
+ if (x < 1)
+ fun_l27_n170(x)
+ else
+ fun_l27_n64(x)
+ end
+end
+
+def fun_l26_n658(x)
+ if (x < 1)
+ fun_l27_n966(x)
+ else
+ fun_l27_n487(x)
+ end
+end
+
+def fun_l26_n659(x)
+ if (x < 1)
+ fun_l27_n238(x)
+ else
+ fun_l27_n638(x)
+ end
+end
+
+def fun_l26_n660(x)
+ if (x < 1)
+ fun_l27_n814(x)
+ else
+ fun_l27_n203(x)
+ end
+end
+
+def fun_l26_n661(x)
+ if (x < 1)
+ fun_l27_n840(x)
+ else
+ fun_l27_n867(x)
+ end
+end
+
+def fun_l26_n662(x)
+ if (x < 1)
+ fun_l27_n753(x)
+ else
+ fun_l27_n543(x)
+ end
+end
+
+def fun_l26_n663(x)
+ if (x < 1)
+ fun_l27_n850(x)
+ else
+ fun_l27_n539(x)
+ end
+end
+
+def fun_l26_n664(x)
+ if (x < 1)
+ fun_l27_n878(x)
+ else
+ fun_l27_n648(x)
+ end
+end
+
+def fun_l26_n665(x)
+ if (x < 1)
+ fun_l27_n256(x)
+ else
+ fun_l27_n243(x)
+ end
+end
+
+def fun_l26_n666(x)
+ if (x < 1)
+ fun_l27_n833(x)
+ else
+ fun_l27_n251(x)
+ end
+end
+
+def fun_l26_n667(x)
+ if (x < 1)
+ fun_l27_n26(x)
+ else
+ fun_l27_n206(x)
+ end
+end
+
+def fun_l26_n668(x)
+ if (x < 1)
+ fun_l27_n860(x)
+ else
+ fun_l27_n736(x)
+ end
+end
+
+def fun_l26_n669(x)
+ if (x < 1)
+ fun_l27_n794(x)
+ else
+ fun_l27_n185(x)
+ end
+end
+
+def fun_l26_n670(x)
+ if (x < 1)
+ fun_l27_n849(x)
+ else
+ fun_l27_n218(x)
+ end
+end
+
+def fun_l26_n671(x)
+ if (x < 1)
+ fun_l27_n423(x)
+ else
+ fun_l27_n163(x)
+ end
+end
+
+def fun_l26_n672(x)
+ if (x < 1)
+ fun_l27_n94(x)
+ else
+ fun_l27_n341(x)
+ end
+end
+
+def fun_l26_n673(x)
+ if (x < 1)
+ fun_l27_n927(x)
+ else
+ fun_l27_n721(x)
+ end
+end
+
+def fun_l26_n674(x)
+ if (x < 1)
+ fun_l27_n390(x)
+ else
+ fun_l27_n807(x)
+ end
+end
+
+def fun_l26_n675(x)
+ if (x < 1)
+ fun_l27_n818(x)
+ else
+ fun_l27_n532(x)
+ end
+end
+
+def fun_l26_n676(x)
+ if (x < 1)
+ fun_l27_n513(x)
+ else
+ fun_l27_n414(x)
+ end
+end
+
+def fun_l26_n677(x)
+ if (x < 1)
+ fun_l27_n364(x)
+ else
+ fun_l27_n940(x)
+ end
+end
+
+def fun_l26_n678(x)
+ if (x < 1)
+ fun_l27_n178(x)
+ else
+ fun_l27_n857(x)
+ end
+end
+
+def fun_l26_n679(x)
+ if (x < 1)
+ fun_l27_n806(x)
+ else
+ fun_l27_n838(x)
+ end
+end
+
+def fun_l26_n680(x)
+ if (x < 1)
+ fun_l27_n216(x)
+ else
+ fun_l27_n774(x)
+ end
+end
+
+def fun_l26_n681(x)
+ if (x < 1)
+ fun_l27_n969(x)
+ else
+ fun_l27_n247(x)
+ end
+end
+
+def fun_l26_n682(x)
+ if (x < 1)
+ fun_l27_n175(x)
+ else
+ fun_l27_n588(x)
+ end
+end
+
+def fun_l26_n683(x)
+ if (x < 1)
+ fun_l27_n310(x)
+ else
+ fun_l27_n48(x)
+ end
+end
+
+def fun_l26_n684(x)
+ if (x < 1)
+ fun_l27_n669(x)
+ else
+ fun_l27_n428(x)
+ end
+end
+
+def fun_l26_n685(x)
+ if (x < 1)
+ fun_l27_n592(x)
+ else
+ fun_l27_n535(x)
+ end
+end
+
+def fun_l26_n686(x)
+ if (x < 1)
+ fun_l27_n81(x)
+ else
+ fun_l27_n259(x)
+ end
+end
+
+def fun_l26_n687(x)
+ if (x < 1)
+ fun_l27_n498(x)
+ else
+ fun_l27_n859(x)
+ end
+end
+
+def fun_l26_n688(x)
+ if (x < 1)
+ fun_l27_n695(x)
+ else
+ fun_l27_n67(x)
+ end
+end
+
+def fun_l26_n689(x)
+ if (x < 1)
+ fun_l27_n97(x)
+ else
+ fun_l27_n11(x)
+ end
+end
+
+def fun_l26_n690(x)
+ if (x < 1)
+ fun_l27_n901(x)
+ else
+ fun_l27_n525(x)
+ end
+end
+
+def fun_l26_n691(x)
+ if (x < 1)
+ fun_l27_n545(x)
+ else
+ fun_l27_n649(x)
+ end
+end
+
+def fun_l26_n692(x)
+ if (x < 1)
+ fun_l27_n866(x)
+ else
+ fun_l27_n379(x)
+ end
+end
+
+def fun_l26_n693(x)
+ if (x < 1)
+ fun_l27_n475(x)
+ else
+ fun_l27_n504(x)
+ end
+end
+
+def fun_l26_n694(x)
+ if (x < 1)
+ fun_l27_n527(x)
+ else
+ fun_l27_n701(x)
+ end
+end
+
+def fun_l26_n695(x)
+ if (x < 1)
+ fun_l27_n159(x)
+ else
+ fun_l27_n946(x)
+ end
+end
+
+def fun_l26_n696(x)
+ if (x < 1)
+ fun_l27_n850(x)
+ else
+ fun_l27_n200(x)
+ end
+end
+
+def fun_l26_n697(x)
+ if (x < 1)
+ fun_l27_n318(x)
+ else
+ fun_l27_n55(x)
+ end
+end
+
+def fun_l26_n698(x)
+ if (x < 1)
+ fun_l27_n563(x)
+ else
+ fun_l27_n413(x)
+ end
+end
+
+def fun_l26_n699(x)
+ if (x < 1)
+ fun_l27_n976(x)
+ else
+ fun_l27_n42(x)
+ end
+end
+
+def fun_l26_n700(x)
+ if (x < 1)
+ fun_l27_n112(x)
+ else
+ fun_l27_n764(x)
+ end
+end
+
+def fun_l26_n701(x)
+ if (x < 1)
+ fun_l27_n519(x)
+ else
+ fun_l27_n800(x)
+ end
+end
+
+def fun_l26_n702(x)
+ if (x < 1)
+ fun_l27_n701(x)
+ else
+ fun_l27_n102(x)
+ end
+end
+
+def fun_l26_n703(x)
+ if (x < 1)
+ fun_l27_n200(x)
+ else
+ fun_l27_n685(x)
+ end
+end
+
+def fun_l26_n704(x)
+ if (x < 1)
+ fun_l27_n770(x)
+ else
+ fun_l27_n47(x)
+ end
+end
+
+def fun_l26_n705(x)
+ if (x < 1)
+ fun_l27_n479(x)
+ else
+ fun_l27_n875(x)
+ end
+end
+
+def fun_l26_n706(x)
+ if (x < 1)
+ fun_l27_n369(x)
+ else
+ fun_l27_n53(x)
+ end
+end
+
+def fun_l26_n707(x)
+ if (x < 1)
+ fun_l27_n16(x)
+ else
+ fun_l27_n612(x)
+ end
+end
+
+def fun_l26_n708(x)
+ if (x < 1)
+ fun_l27_n235(x)
+ else
+ fun_l27_n211(x)
+ end
+end
+
+def fun_l26_n709(x)
+ if (x < 1)
+ fun_l27_n636(x)
+ else
+ fun_l27_n890(x)
+ end
+end
+
+def fun_l26_n710(x)
+ if (x < 1)
+ fun_l27_n877(x)
+ else
+ fun_l27_n301(x)
+ end
+end
+
+def fun_l26_n711(x)
+ if (x < 1)
+ fun_l27_n783(x)
+ else
+ fun_l27_n409(x)
+ end
+end
+
+def fun_l26_n712(x)
+ if (x < 1)
+ fun_l27_n595(x)
+ else
+ fun_l27_n968(x)
+ end
+end
+
+def fun_l26_n713(x)
+ if (x < 1)
+ fun_l27_n858(x)
+ else
+ fun_l27_n879(x)
+ end
+end
+
+def fun_l26_n714(x)
+ if (x < 1)
+ fun_l27_n66(x)
+ else
+ fun_l27_n107(x)
+ end
+end
+
+def fun_l26_n715(x)
+ if (x < 1)
+ fun_l27_n636(x)
+ else
+ fun_l27_n912(x)
+ end
+end
+
+def fun_l26_n716(x)
+ if (x < 1)
+ fun_l27_n605(x)
+ else
+ fun_l27_n935(x)
+ end
+end
+
+def fun_l26_n717(x)
+ if (x < 1)
+ fun_l27_n186(x)
+ else
+ fun_l27_n664(x)
+ end
+end
+
+def fun_l26_n718(x)
+ if (x < 1)
+ fun_l27_n865(x)
+ else
+ fun_l27_n462(x)
+ end
+end
+
+def fun_l26_n719(x)
+ if (x < 1)
+ fun_l27_n783(x)
+ else
+ fun_l27_n668(x)
+ end
+end
+
+def fun_l26_n720(x)
+ if (x < 1)
+ fun_l27_n697(x)
+ else
+ fun_l27_n850(x)
+ end
+end
+
+def fun_l26_n721(x)
+ if (x < 1)
+ fun_l27_n668(x)
+ else
+ fun_l27_n493(x)
+ end
+end
+
+def fun_l26_n722(x)
+ if (x < 1)
+ fun_l27_n25(x)
+ else
+ fun_l27_n473(x)
+ end
+end
+
+def fun_l26_n723(x)
+ if (x < 1)
+ fun_l27_n311(x)
+ else
+ fun_l27_n380(x)
+ end
+end
+
+def fun_l26_n724(x)
+ if (x < 1)
+ fun_l27_n766(x)
+ else
+ fun_l27_n303(x)
+ end
+end
+
+def fun_l26_n725(x)
+ if (x < 1)
+ fun_l27_n97(x)
+ else
+ fun_l27_n306(x)
+ end
+end
+
+def fun_l26_n726(x)
+ if (x < 1)
+ fun_l27_n333(x)
+ else
+ fun_l27_n590(x)
+ end
+end
+
+def fun_l26_n727(x)
+ if (x < 1)
+ fun_l27_n596(x)
+ else
+ fun_l27_n509(x)
+ end
+end
+
+def fun_l26_n728(x)
+ if (x < 1)
+ fun_l27_n234(x)
+ else
+ fun_l27_n583(x)
+ end
+end
+
+def fun_l26_n729(x)
+ if (x < 1)
+ fun_l27_n692(x)
+ else
+ fun_l27_n890(x)
+ end
+end
+
+def fun_l26_n730(x)
+ if (x < 1)
+ fun_l27_n864(x)
+ else
+ fun_l27_n433(x)
+ end
+end
+
+def fun_l26_n731(x)
+ if (x < 1)
+ fun_l27_n866(x)
+ else
+ fun_l27_n350(x)
+ end
+end
+
+def fun_l26_n732(x)
+ if (x < 1)
+ fun_l27_n913(x)
+ else
+ fun_l27_n651(x)
+ end
+end
+
+def fun_l26_n733(x)
+ if (x < 1)
+ fun_l27_n919(x)
+ else
+ fun_l27_n902(x)
+ end
+end
+
+def fun_l26_n734(x)
+ if (x < 1)
+ fun_l27_n731(x)
+ else
+ fun_l27_n768(x)
+ end
+end
+
+def fun_l26_n735(x)
+ if (x < 1)
+ fun_l27_n613(x)
+ else
+ fun_l27_n550(x)
+ end
+end
+
+def fun_l26_n736(x)
+ if (x < 1)
+ fun_l27_n795(x)
+ else
+ fun_l27_n152(x)
+ end
+end
+
+def fun_l26_n737(x)
+ if (x < 1)
+ fun_l27_n214(x)
+ else
+ fun_l27_n990(x)
+ end
+end
+
+def fun_l26_n738(x)
+ if (x < 1)
+ fun_l27_n521(x)
+ else
+ fun_l27_n773(x)
+ end
+end
+
+def fun_l26_n739(x)
+ if (x < 1)
+ fun_l27_n44(x)
+ else
+ fun_l27_n580(x)
+ end
+end
+
+def fun_l26_n740(x)
+ if (x < 1)
+ fun_l27_n800(x)
+ else
+ fun_l27_n385(x)
+ end
+end
+
+def fun_l26_n741(x)
+ if (x < 1)
+ fun_l27_n412(x)
+ else
+ fun_l27_n979(x)
+ end
+end
+
+def fun_l26_n742(x)
+ if (x < 1)
+ fun_l27_n392(x)
+ else
+ fun_l27_n627(x)
+ end
+end
+
+def fun_l26_n743(x)
+ if (x < 1)
+ fun_l27_n348(x)
+ else
+ fun_l27_n141(x)
+ end
+end
+
+def fun_l26_n744(x)
+ if (x < 1)
+ fun_l27_n199(x)
+ else
+ fun_l27_n327(x)
+ end
+end
+
+def fun_l26_n745(x)
+ if (x < 1)
+ fun_l27_n302(x)
+ else
+ fun_l27_n708(x)
+ end
+end
+
+def fun_l26_n746(x)
+ if (x < 1)
+ fun_l27_n431(x)
+ else
+ fun_l27_n362(x)
+ end
+end
+
+def fun_l26_n747(x)
+ if (x < 1)
+ fun_l27_n409(x)
+ else
+ fun_l27_n102(x)
+ end
+end
+
+def fun_l26_n748(x)
+ if (x < 1)
+ fun_l27_n631(x)
+ else
+ fun_l27_n415(x)
+ end
+end
+
+def fun_l26_n749(x)
+ if (x < 1)
+ fun_l27_n196(x)
+ else
+ fun_l27_n835(x)
+ end
+end
+
+def fun_l26_n750(x)
+ if (x < 1)
+ fun_l27_n731(x)
+ else
+ fun_l27_n400(x)
+ end
+end
+
+def fun_l26_n751(x)
+ if (x < 1)
+ fun_l27_n561(x)
+ else
+ fun_l27_n444(x)
+ end
+end
+
+def fun_l26_n752(x)
+ if (x < 1)
+ fun_l27_n444(x)
+ else
+ fun_l27_n245(x)
+ end
+end
+
+def fun_l26_n753(x)
+ if (x < 1)
+ fun_l27_n784(x)
+ else
+ fun_l27_n640(x)
+ end
+end
+
+def fun_l26_n754(x)
+ if (x < 1)
+ fun_l27_n988(x)
+ else
+ fun_l27_n335(x)
+ end
+end
+
+def fun_l26_n755(x)
+ if (x < 1)
+ fun_l27_n188(x)
+ else
+ fun_l27_n584(x)
+ end
+end
+
+def fun_l26_n756(x)
+ if (x < 1)
+ fun_l27_n356(x)
+ else
+ fun_l27_n989(x)
+ end
+end
+
+def fun_l26_n757(x)
+ if (x < 1)
+ fun_l27_n687(x)
+ else
+ fun_l27_n409(x)
+ end
+end
+
+def fun_l26_n758(x)
+ if (x < 1)
+ fun_l27_n383(x)
+ else
+ fun_l27_n502(x)
+ end
+end
+
+def fun_l26_n759(x)
+ if (x < 1)
+ fun_l27_n507(x)
+ else
+ fun_l27_n868(x)
+ end
+end
+
+def fun_l26_n760(x)
+ if (x < 1)
+ fun_l27_n109(x)
+ else
+ fun_l27_n641(x)
+ end
+end
+
+def fun_l26_n761(x)
+ if (x < 1)
+ fun_l27_n831(x)
+ else
+ fun_l27_n248(x)
+ end
+end
+
+def fun_l26_n762(x)
+ if (x < 1)
+ fun_l27_n150(x)
+ else
+ fun_l27_n116(x)
+ end
+end
+
+def fun_l26_n763(x)
+ if (x < 1)
+ fun_l27_n811(x)
+ else
+ fun_l27_n680(x)
+ end
+end
+
+def fun_l26_n764(x)
+ if (x < 1)
+ fun_l27_n593(x)
+ else
+ fun_l27_n756(x)
+ end
+end
+
+def fun_l26_n765(x)
+ if (x < 1)
+ fun_l27_n468(x)
+ else
+ fun_l27_n888(x)
+ end
+end
+
+def fun_l26_n766(x)
+ if (x < 1)
+ fun_l27_n154(x)
+ else
+ fun_l27_n65(x)
+ end
+end
+
+def fun_l26_n767(x)
+ if (x < 1)
+ fun_l27_n709(x)
+ else
+ fun_l27_n878(x)
+ end
+end
+
+def fun_l26_n768(x)
+ if (x < 1)
+ fun_l27_n270(x)
+ else
+ fun_l27_n393(x)
+ end
+end
+
+def fun_l26_n769(x)
+ if (x < 1)
+ fun_l27_n315(x)
+ else
+ fun_l27_n46(x)
+ end
+end
+
+def fun_l26_n770(x)
+ if (x < 1)
+ fun_l27_n448(x)
+ else
+ fun_l27_n364(x)
+ end
+end
+
+def fun_l26_n771(x)
+ if (x < 1)
+ fun_l27_n865(x)
+ else
+ fun_l27_n842(x)
+ end
+end
+
+def fun_l26_n772(x)
+ if (x < 1)
+ fun_l27_n231(x)
+ else
+ fun_l27_n731(x)
+ end
+end
+
+def fun_l26_n773(x)
+ if (x < 1)
+ fun_l27_n303(x)
+ else
+ fun_l27_n769(x)
+ end
+end
+
+def fun_l26_n774(x)
+ if (x < 1)
+ fun_l27_n257(x)
+ else
+ fun_l27_n513(x)
+ end
+end
+
+def fun_l26_n775(x)
+ if (x < 1)
+ fun_l27_n805(x)
+ else
+ fun_l27_n947(x)
+ end
+end
+
+def fun_l26_n776(x)
+ if (x < 1)
+ fun_l27_n199(x)
+ else
+ fun_l27_n413(x)
+ end
+end
+
+def fun_l26_n777(x)
+ if (x < 1)
+ fun_l27_n631(x)
+ else
+ fun_l27_n734(x)
+ end
+end
+
+def fun_l26_n778(x)
+ if (x < 1)
+ fun_l27_n978(x)
+ else
+ fun_l27_n638(x)
+ end
+end
+
+def fun_l26_n779(x)
+ if (x < 1)
+ fun_l27_n441(x)
+ else
+ fun_l27_n936(x)
+ end
+end
+
+def fun_l26_n780(x)
+ if (x < 1)
+ fun_l27_n120(x)
+ else
+ fun_l27_n37(x)
+ end
+end
+
+def fun_l26_n781(x)
+ if (x < 1)
+ fun_l27_n44(x)
+ else
+ fun_l27_n240(x)
+ end
+end
+
+def fun_l26_n782(x)
+ if (x < 1)
+ fun_l27_n920(x)
+ else
+ fun_l27_n54(x)
+ end
+end
+
+def fun_l26_n783(x)
+ if (x < 1)
+ fun_l27_n488(x)
+ else
+ fun_l27_n965(x)
+ end
+end
+
+def fun_l26_n784(x)
+ if (x < 1)
+ fun_l27_n226(x)
+ else
+ fun_l27_n449(x)
+ end
+end
+
+def fun_l26_n785(x)
+ if (x < 1)
+ fun_l27_n794(x)
+ else
+ fun_l27_n469(x)
+ end
+end
+
+def fun_l26_n786(x)
+ if (x < 1)
+ fun_l27_n287(x)
+ else
+ fun_l27_n863(x)
+ end
+end
+
+def fun_l26_n787(x)
+ if (x < 1)
+ fun_l27_n714(x)
+ else
+ fun_l27_n606(x)
+ end
+end
+
+def fun_l26_n788(x)
+ if (x < 1)
+ fun_l27_n649(x)
+ else
+ fun_l27_n347(x)
+ end
+end
+
+def fun_l26_n789(x)
+ if (x < 1)
+ fun_l27_n176(x)
+ else
+ fun_l27_n410(x)
+ end
+end
+
+def fun_l26_n790(x)
+ if (x < 1)
+ fun_l27_n688(x)
+ else
+ fun_l27_n248(x)
+ end
+end
+
+def fun_l26_n791(x)
+ if (x < 1)
+ fun_l27_n157(x)
+ else
+ fun_l27_n119(x)
+ end
+end
+
+def fun_l26_n792(x)
+ if (x < 1)
+ fun_l27_n470(x)
+ else
+ fun_l27_n657(x)
+ end
+end
+
+def fun_l26_n793(x)
+ if (x < 1)
+ fun_l27_n246(x)
+ else
+ fun_l27_n262(x)
+ end
+end
+
+def fun_l26_n794(x)
+ if (x < 1)
+ fun_l27_n142(x)
+ else
+ fun_l27_n524(x)
+ end
+end
+
+def fun_l26_n795(x)
+ if (x < 1)
+ fun_l27_n695(x)
+ else
+ fun_l27_n88(x)
+ end
+end
+
+def fun_l26_n796(x)
+ if (x < 1)
+ fun_l27_n599(x)
+ else
+ fun_l27_n776(x)
+ end
+end
+
+def fun_l26_n797(x)
+ if (x < 1)
+ fun_l27_n364(x)
+ else
+ fun_l27_n616(x)
+ end
+end
+
+def fun_l26_n798(x)
+ if (x < 1)
+ fun_l27_n793(x)
+ else
+ fun_l27_n416(x)
+ end
+end
+
+def fun_l26_n799(x)
+ if (x < 1)
+ fun_l27_n552(x)
+ else
+ fun_l27_n490(x)
+ end
+end
+
+def fun_l26_n800(x)
+ if (x < 1)
+ fun_l27_n691(x)
+ else
+ fun_l27_n743(x)
+ end
+end
+
+def fun_l26_n801(x)
+ if (x < 1)
+ fun_l27_n257(x)
+ else
+ fun_l27_n687(x)
+ end
+end
+
+def fun_l26_n802(x)
+ if (x < 1)
+ fun_l27_n877(x)
+ else
+ fun_l27_n273(x)
+ end
+end
+
+def fun_l26_n803(x)
+ if (x < 1)
+ fun_l27_n398(x)
+ else
+ fun_l27_n874(x)
+ end
+end
+
+def fun_l26_n804(x)
+ if (x < 1)
+ fun_l27_n114(x)
+ else
+ fun_l27_n96(x)
+ end
+end
+
+def fun_l26_n805(x)
+ if (x < 1)
+ fun_l27_n489(x)
+ else
+ fun_l27_n537(x)
+ end
+end
+
+def fun_l26_n806(x)
+ if (x < 1)
+ fun_l27_n619(x)
+ else
+ fun_l27_n813(x)
+ end
+end
+
+def fun_l26_n807(x)
+ if (x < 1)
+ fun_l27_n335(x)
+ else
+ fun_l27_n467(x)
+ end
+end
+
+def fun_l26_n808(x)
+ if (x < 1)
+ fun_l27_n17(x)
+ else
+ fun_l27_n133(x)
+ end
+end
+
+def fun_l26_n809(x)
+ if (x < 1)
+ fun_l27_n266(x)
+ else
+ fun_l27_n383(x)
+ end
+end
+
+def fun_l26_n810(x)
+ if (x < 1)
+ fun_l27_n391(x)
+ else
+ fun_l27_n326(x)
+ end
+end
+
+def fun_l26_n811(x)
+ if (x < 1)
+ fun_l27_n292(x)
+ else
+ fun_l27_n444(x)
+ end
+end
+
+def fun_l26_n812(x)
+ if (x < 1)
+ fun_l27_n920(x)
+ else
+ fun_l27_n909(x)
+ end
+end
+
+def fun_l26_n813(x)
+ if (x < 1)
+ fun_l27_n575(x)
+ else
+ fun_l27_n221(x)
+ end
+end
+
+def fun_l26_n814(x)
+ if (x < 1)
+ fun_l27_n66(x)
+ else
+ fun_l27_n241(x)
+ end
+end
+
+def fun_l26_n815(x)
+ if (x < 1)
+ fun_l27_n552(x)
+ else
+ fun_l27_n906(x)
+ end
+end
+
+def fun_l26_n816(x)
+ if (x < 1)
+ fun_l27_n301(x)
+ else
+ fun_l27_n656(x)
+ end
+end
+
+def fun_l26_n817(x)
+ if (x < 1)
+ fun_l27_n472(x)
+ else
+ fun_l27_n688(x)
+ end
+end
+
+def fun_l26_n818(x)
+ if (x < 1)
+ fun_l27_n712(x)
+ else
+ fun_l27_n830(x)
+ end
+end
+
+def fun_l26_n819(x)
+ if (x < 1)
+ fun_l27_n102(x)
+ else
+ fun_l27_n146(x)
+ end
+end
+
+def fun_l26_n820(x)
+ if (x < 1)
+ fun_l27_n448(x)
+ else
+ fun_l27_n207(x)
+ end
+end
+
+def fun_l26_n821(x)
+ if (x < 1)
+ fun_l27_n732(x)
+ else
+ fun_l27_n285(x)
+ end
+end
+
+def fun_l26_n822(x)
+ if (x < 1)
+ fun_l27_n973(x)
+ else
+ fun_l27_n395(x)
+ end
+end
+
+def fun_l26_n823(x)
+ if (x < 1)
+ fun_l27_n329(x)
+ else
+ fun_l27_n748(x)
+ end
+end
+
+def fun_l26_n824(x)
+ if (x < 1)
+ fun_l27_n280(x)
+ else
+ fun_l27_n676(x)
+ end
+end
+
+def fun_l26_n825(x)
+ if (x < 1)
+ fun_l27_n867(x)
+ else
+ fun_l27_n285(x)
+ end
+end
+
+def fun_l26_n826(x)
+ if (x < 1)
+ fun_l27_n380(x)
+ else
+ fun_l27_n720(x)
+ end
+end
+
+def fun_l26_n827(x)
+ if (x < 1)
+ fun_l27_n595(x)
+ else
+ fun_l27_n740(x)
+ end
+end
+
+def fun_l26_n828(x)
+ if (x < 1)
+ fun_l27_n356(x)
+ else
+ fun_l27_n878(x)
+ end
+end
+
+def fun_l26_n829(x)
+ if (x < 1)
+ fun_l27_n453(x)
+ else
+ fun_l27_n234(x)
+ end
+end
+
+def fun_l26_n830(x)
+ if (x < 1)
+ fun_l27_n775(x)
+ else
+ fun_l27_n13(x)
+ end
+end
+
+def fun_l26_n831(x)
+ if (x < 1)
+ fun_l27_n242(x)
+ else
+ fun_l27_n144(x)
+ end
+end
+
+def fun_l26_n832(x)
+ if (x < 1)
+ fun_l27_n734(x)
+ else
+ fun_l27_n432(x)
+ end
+end
+
+def fun_l26_n833(x)
+ if (x < 1)
+ fun_l27_n996(x)
+ else
+ fun_l27_n396(x)
+ end
+end
+
+def fun_l26_n834(x)
+ if (x < 1)
+ fun_l27_n367(x)
+ else
+ fun_l27_n991(x)
+ end
+end
+
+def fun_l26_n835(x)
+ if (x < 1)
+ fun_l27_n285(x)
+ else
+ fun_l27_n526(x)
+ end
+end
+
+def fun_l26_n836(x)
+ if (x < 1)
+ fun_l27_n945(x)
+ else
+ fun_l27_n418(x)
+ end
+end
+
+def fun_l26_n837(x)
+ if (x < 1)
+ fun_l27_n622(x)
+ else
+ fun_l27_n922(x)
+ end
+end
+
+def fun_l26_n838(x)
+ if (x < 1)
+ fun_l27_n997(x)
+ else
+ fun_l27_n786(x)
+ end
+end
+
+def fun_l26_n839(x)
+ if (x < 1)
+ fun_l27_n478(x)
+ else
+ fun_l27_n991(x)
+ end
+end
+
+def fun_l26_n840(x)
+ if (x < 1)
+ fun_l27_n473(x)
+ else
+ fun_l27_n801(x)
+ end
+end
+
+def fun_l26_n841(x)
+ if (x < 1)
+ fun_l27_n675(x)
+ else
+ fun_l27_n486(x)
+ end
+end
+
+def fun_l26_n842(x)
+ if (x < 1)
+ fun_l27_n170(x)
+ else
+ fun_l27_n27(x)
+ end
+end
+
+def fun_l26_n843(x)
+ if (x < 1)
+ fun_l27_n699(x)
+ else
+ fun_l27_n536(x)
+ end
+end
+
+def fun_l26_n844(x)
+ if (x < 1)
+ fun_l27_n388(x)
+ else
+ fun_l27_n431(x)
+ end
+end
+
+def fun_l26_n845(x)
+ if (x < 1)
+ fun_l27_n248(x)
+ else
+ fun_l27_n64(x)
+ end
+end
+
+def fun_l26_n846(x)
+ if (x < 1)
+ fun_l27_n64(x)
+ else
+ fun_l27_n829(x)
+ end
+end
+
+def fun_l26_n847(x)
+ if (x < 1)
+ fun_l27_n850(x)
+ else
+ fun_l27_n626(x)
+ end
+end
+
+def fun_l26_n848(x)
+ if (x < 1)
+ fun_l27_n889(x)
+ else
+ fun_l27_n504(x)
+ end
+end
+
+def fun_l26_n849(x)
+ if (x < 1)
+ fun_l27_n121(x)
+ else
+ fun_l27_n864(x)
+ end
+end
+
+def fun_l26_n850(x)
+ if (x < 1)
+ fun_l27_n985(x)
+ else
+ fun_l27_n447(x)
+ end
+end
+
+def fun_l26_n851(x)
+ if (x < 1)
+ fun_l27_n952(x)
+ else
+ fun_l27_n30(x)
+ end
+end
+
+def fun_l26_n852(x)
+ if (x < 1)
+ fun_l27_n444(x)
+ else
+ fun_l27_n780(x)
+ end
+end
+
+def fun_l26_n853(x)
+ if (x < 1)
+ fun_l27_n969(x)
+ else
+ fun_l27_n400(x)
+ end
+end
+
+def fun_l26_n854(x)
+ if (x < 1)
+ fun_l27_n711(x)
+ else
+ fun_l27_n165(x)
+ end
+end
+
+def fun_l26_n855(x)
+ if (x < 1)
+ fun_l27_n514(x)
+ else
+ fun_l27_n464(x)
+ end
+end
+
+def fun_l26_n856(x)
+ if (x < 1)
+ fun_l27_n531(x)
+ else
+ fun_l27_n548(x)
+ end
+end
+
+def fun_l26_n857(x)
+ if (x < 1)
+ fun_l27_n996(x)
+ else
+ fun_l27_n63(x)
+ end
+end
+
+def fun_l26_n858(x)
+ if (x < 1)
+ fun_l27_n516(x)
+ else
+ fun_l27_n905(x)
+ end
+end
+
+def fun_l26_n859(x)
+ if (x < 1)
+ fun_l27_n42(x)
+ else
+ fun_l27_n327(x)
+ end
+end
+
+def fun_l26_n860(x)
+ if (x < 1)
+ fun_l27_n300(x)
+ else
+ fun_l27_n276(x)
+ end
+end
+
+def fun_l26_n861(x)
+ if (x < 1)
+ fun_l27_n734(x)
+ else
+ fun_l27_n859(x)
+ end
+end
+
+def fun_l26_n862(x)
+ if (x < 1)
+ fun_l27_n135(x)
+ else
+ fun_l27_n821(x)
+ end
+end
+
+def fun_l26_n863(x)
+ if (x < 1)
+ fun_l27_n645(x)
+ else
+ fun_l27_n287(x)
+ end
+end
+
+def fun_l26_n864(x)
+ if (x < 1)
+ fun_l27_n243(x)
+ else
+ fun_l27_n844(x)
+ end
+end
+
+def fun_l26_n865(x)
+ if (x < 1)
+ fun_l27_n909(x)
+ else
+ fun_l27_n291(x)
+ end
+end
+
+def fun_l26_n866(x)
+ if (x < 1)
+ fun_l27_n925(x)
+ else
+ fun_l27_n484(x)
+ end
+end
+
+def fun_l26_n867(x)
+ if (x < 1)
+ fun_l27_n678(x)
+ else
+ fun_l27_n205(x)
+ end
+end
+
+def fun_l26_n868(x)
+ if (x < 1)
+ fun_l27_n612(x)
+ else
+ fun_l27_n339(x)
+ end
+end
+
+def fun_l26_n869(x)
+ if (x < 1)
+ fun_l27_n622(x)
+ else
+ fun_l27_n246(x)
+ end
+end
+
+def fun_l26_n870(x)
+ if (x < 1)
+ fun_l27_n431(x)
+ else
+ fun_l27_n635(x)
+ end
+end
+
+def fun_l26_n871(x)
+ if (x < 1)
+ fun_l27_n89(x)
+ else
+ fun_l27_n969(x)
+ end
+end
+
+def fun_l26_n872(x)
+ if (x < 1)
+ fun_l27_n839(x)
+ else
+ fun_l27_n398(x)
+ end
+end
+
+def fun_l26_n873(x)
+ if (x < 1)
+ fun_l27_n230(x)
+ else
+ fun_l27_n885(x)
+ end
+end
+
+def fun_l26_n874(x)
+ if (x < 1)
+ fun_l27_n202(x)
+ else
+ fun_l27_n530(x)
+ end
+end
+
+def fun_l26_n875(x)
+ if (x < 1)
+ fun_l27_n153(x)
+ else
+ fun_l27_n959(x)
+ end
+end
+
+def fun_l26_n876(x)
+ if (x < 1)
+ fun_l27_n891(x)
+ else
+ fun_l27_n307(x)
+ end
+end
+
+def fun_l26_n877(x)
+ if (x < 1)
+ fun_l27_n648(x)
+ else
+ fun_l27_n767(x)
+ end
+end
+
+def fun_l26_n878(x)
+ if (x < 1)
+ fun_l27_n120(x)
+ else
+ fun_l27_n614(x)
+ end
+end
+
+def fun_l26_n879(x)
+ if (x < 1)
+ fun_l27_n46(x)
+ else
+ fun_l27_n766(x)
+ end
+end
+
+def fun_l26_n880(x)
+ if (x < 1)
+ fun_l27_n882(x)
+ else
+ fun_l27_n745(x)
+ end
+end
+
+def fun_l26_n881(x)
+ if (x < 1)
+ fun_l27_n966(x)
+ else
+ fun_l27_n699(x)
+ end
+end
+
+def fun_l26_n882(x)
+ if (x < 1)
+ fun_l27_n354(x)
+ else
+ fun_l27_n698(x)
+ end
+end
+
+def fun_l26_n883(x)
+ if (x < 1)
+ fun_l27_n723(x)
+ else
+ fun_l27_n507(x)
+ end
+end
+
+def fun_l26_n884(x)
+ if (x < 1)
+ fun_l27_n705(x)
+ else
+ fun_l27_n865(x)
+ end
+end
+
+def fun_l26_n885(x)
+ if (x < 1)
+ fun_l27_n609(x)
+ else
+ fun_l27_n830(x)
+ end
+end
+
+def fun_l26_n886(x)
+ if (x < 1)
+ fun_l27_n679(x)
+ else
+ fun_l27_n359(x)
+ end
+end
+
+def fun_l26_n887(x)
+ if (x < 1)
+ fun_l27_n830(x)
+ else
+ fun_l27_n59(x)
+ end
+end
+
+def fun_l26_n888(x)
+ if (x < 1)
+ fun_l27_n160(x)
+ else
+ fun_l27_n559(x)
+ end
+end
+
+def fun_l26_n889(x)
+ if (x < 1)
+ fun_l27_n233(x)
+ else
+ fun_l27_n148(x)
+ end
+end
+
+def fun_l26_n890(x)
+ if (x < 1)
+ fun_l27_n520(x)
+ else
+ fun_l27_n104(x)
+ end
+end
+
+def fun_l26_n891(x)
+ if (x < 1)
+ fun_l27_n826(x)
+ else
+ fun_l27_n884(x)
+ end
+end
+
+def fun_l26_n892(x)
+ if (x < 1)
+ fun_l27_n546(x)
+ else
+ fun_l27_n651(x)
+ end
+end
+
+def fun_l26_n893(x)
+ if (x < 1)
+ fun_l27_n181(x)
+ else
+ fun_l27_n430(x)
+ end
+end
+
+def fun_l26_n894(x)
+ if (x < 1)
+ fun_l27_n540(x)
+ else
+ fun_l27_n424(x)
+ end
+end
+
+def fun_l26_n895(x)
+ if (x < 1)
+ fun_l27_n321(x)
+ else
+ fun_l27_n72(x)
+ end
+end
+
+def fun_l26_n896(x)
+ if (x < 1)
+ fun_l27_n532(x)
+ else
+ fun_l27_n535(x)
+ end
+end
+
+def fun_l26_n897(x)
+ if (x < 1)
+ fun_l27_n171(x)
+ else
+ fun_l27_n575(x)
+ end
+end
+
+def fun_l26_n898(x)
+ if (x < 1)
+ fun_l27_n150(x)
+ else
+ fun_l27_n539(x)
+ end
+end
+
+def fun_l26_n899(x)
+ if (x < 1)
+ fun_l27_n27(x)
+ else
+ fun_l27_n487(x)
+ end
+end
+
+def fun_l26_n900(x)
+ if (x < 1)
+ fun_l27_n484(x)
+ else
+ fun_l27_n366(x)
+ end
+end
+
+def fun_l26_n901(x)
+ if (x < 1)
+ fun_l27_n708(x)
+ else
+ fun_l27_n624(x)
+ end
+end
+
+def fun_l26_n902(x)
+ if (x < 1)
+ fun_l27_n811(x)
+ else
+ fun_l27_n905(x)
+ end
+end
+
+def fun_l26_n903(x)
+ if (x < 1)
+ fun_l27_n474(x)
+ else
+ fun_l27_n252(x)
+ end
+end
+
+def fun_l26_n904(x)
+ if (x < 1)
+ fun_l27_n765(x)
+ else
+ fun_l27_n86(x)
+ end
+end
+
+def fun_l26_n905(x)
+ if (x < 1)
+ fun_l27_n120(x)
+ else
+ fun_l27_n868(x)
+ end
+end
+
+def fun_l26_n906(x)
+ if (x < 1)
+ fun_l27_n824(x)
+ else
+ fun_l27_n167(x)
+ end
+end
+
+def fun_l26_n907(x)
+ if (x < 1)
+ fun_l27_n874(x)
+ else
+ fun_l27_n428(x)
+ end
+end
+
+def fun_l26_n908(x)
+ if (x < 1)
+ fun_l27_n270(x)
+ else
+ fun_l27_n539(x)
+ end
+end
+
+def fun_l26_n909(x)
+ if (x < 1)
+ fun_l27_n451(x)
+ else
+ fun_l27_n64(x)
+ end
+end
+
+def fun_l26_n910(x)
+ if (x < 1)
+ fun_l27_n680(x)
+ else
+ fun_l27_n556(x)
+ end
+end
+
+def fun_l26_n911(x)
+ if (x < 1)
+ fun_l27_n480(x)
+ else
+ fun_l27_n599(x)
+ end
+end
+
+def fun_l26_n912(x)
+ if (x < 1)
+ fun_l27_n861(x)
+ else
+ fun_l27_n768(x)
+ end
+end
+
+def fun_l26_n913(x)
+ if (x < 1)
+ fun_l27_n679(x)
+ else
+ fun_l27_n541(x)
+ end
+end
+
+def fun_l26_n914(x)
+ if (x < 1)
+ fun_l27_n69(x)
+ else
+ fun_l27_n904(x)
+ end
+end
+
+def fun_l26_n915(x)
+ if (x < 1)
+ fun_l27_n658(x)
+ else
+ fun_l27_n580(x)
+ end
+end
+
+def fun_l26_n916(x)
+ if (x < 1)
+ fun_l27_n595(x)
+ else
+ fun_l27_n194(x)
+ end
+end
+
+def fun_l26_n917(x)
+ if (x < 1)
+ fun_l27_n518(x)
+ else
+ fun_l27_n613(x)
+ end
+end
+
+def fun_l26_n918(x)
+ if (x < 1)
+ fun_l27_n46(x)
+ else
+ fun_l27_n910(x)
+ end
+end
+
+def fun_l26_n919(x)
+ if (x < 1)
+ fun_l27_n471(x)
+ else
+ fun_l27_n562(x)
+ end
+end
+
+def fun_l26_n920(x)
+ if (x < 1)
+ fun_l27_n637(x)
+ else
+ fun_l27_n638(x)
+ end
+end
+
+def fun_l26_n921(x)
+ if (x < 1)
+ fun_l27_n77(x)
+ else
+ fun_l27_n100(x)
+ end
+end
+
+def fun_l26_n922(x)
+ if (x < 1)
+ fun_l27_n382(x)
+ else
+ fun_l27_n235(x)
+ end
+end
+
+def fun_l26_n923(x)
+ if (x < 1)
+ fun_l27_n576(x)
+ else
+ fun_l27_n404(x)
+ end
+end
+
+def fun_l26_n924(x)
+ if (x < 1)
+ fun_l27_n338(x)
+ else
+ fun_l27_n919(x)
+ end
+end
+
+def fun_l26_n925(x)
+ if (x < 1)
+ fun_l27_n758(x)
+ else
+ fun_l27_n141(x)
+ end
+end
+
+def fun_l26_n926(x)
+ if (x < 1)
+ fun_l27_n904(x)
+ else
+ fun_l27_n965(x)
+ end
+end
+
+def fun_l26_n927(x)
+ if (x < 1)
+ fun_l27_n149(x)
+ else
+ fun_l27_n707(x)
+ end
+end
+
+def fun_l26_n928(x)
+ if (x < 1)
+ fun_l27_n337(x)
+ else
+ fun_l27_n601(x)
+ end
+end
+
+def fun_l26_n929(x)
+ if (x < 1)
+ fun_l27_n34(x)
+ else
+ fun_l27_n383(x)
+ end
+end
+
+def fun_l26_n930(x)
+ if (x < 1)
+ fun_l27_n937(x)
+ else
+ fun_l27_n656(x)
+ end
+end
+
+def fun_l26_n931(x)
+ if (x < 1)
+ fun_l27_n786(x)
+ else
+ fun_l27_n73(x)
+ end
+end
+
+def fun_l26_n932(x)
+ if (x < 1)
+ fun_l27_n568(x)
+ else
+ fun_l27_n465(x)
+ end
+end
+
+def fun_l26_n933(x)
+ if (x < 1)
+ fun_l27_n552(x)
+ else
+ fun_l27_n557(x)
+ end
+end
+
+def fun_l26_n934(x)
+ if (x < 1)
+ fun_l27_n261(x)
+ else
+ fun_l27_n612(x)
+ end
+end
+
+def fun_l26_n935(x)
+ if (x < 1)
+ fun_l27_n707(x)
+ else
+ fun_l27_n955(x)
+ end
+end
+
+def fun_l26_n936(x)
+ if (x < 1)
+ fun_l27_n948(x)
+ else
+ fun_l27_n78(x)
+ end
+end
+
+def fun_l26_n937(x)
+ if (x < 1)
+ fun_l27_n963(x)
+ else
+ fun_l27_n203(x)
+ end
+end
+
+def fun_l26_n938(x)
+ if (x < 1)
+ fun_l27_n779(x)
+ else
+ fun_l27_n393(x)
+ end
+end
+
+def fun_l26_n939(x)
+ if (x < 1)
+ fun_l27_n403(x)
+ else
+ fun_l27_n303(x)
+ end
+end
+
+def fun_l26_n940(x)
+ if (x < 1)
+ fun_l27_n779(x)
+ else
+ fun_l27_n934(x)
+ end
+end
+
+def fun_l26_n941(x)
+ if (x < 1)
+ fun_l27_n191(x)
+ else
+ fun_l27_n414(x)
+ end
+end
+
+def fun_l26_n942(x)
+ if (x < 1)
+ fun_l27_n22(x)
+ else
+ fun_l27_n101(x)
+ end
+end
+
+def fun_l26_n943(x)
+ if (x < 1)
+ fun_l27_n501(x)
+ else
+ fun_l27_n43(x)
+ end
+end
+
+def fun_l26_n944(x)
+ if (x < 1)
+ fun_l27_n154(x)
+ else
+ fun_l27_n659(x)
+ end
+end
+
+def fun_l26_n945(x)
+ if (x < 1)
+ fun_l27_n346(x)
+ else
+ fun_l27_n380(x)
+ end
+end
+
+def fun_l26_n946(x)
+ if (x < 1)
+ fun_l27_n653(x)
+ else
+ fun_l27_n762(x)
+ end
+end
+
+def fun_l26_n947(x)
+ if (x < 1)
+ fun_l27_n191(x)
+ else
+ fun_l27_n649(x)
+ end
+end
+
+def fun_l26_n948(x)
+ if (x < 1)
+ fun_l27_n645(x)
+ else
+ fun_l27_n199(x)
+ end
+end
+
+def fun_l26_n949(x)
+ if (x < 1)
+ fun_l27_n251(x)
+ else
+ fun_l27_n461(x)
+ end
+end
+
+def fun_l26_n950(x)
+ if (x < 1)
+ fun_l27_n720(x)
+ else
+ fun_l27_n645(x)
+ end
+end
+
+def fun_l26_n951(x)
+ if (x < 1)
+ fun_l27_n200(x)
+ else
+ fun_l27_n73(x)
+ end
+end
+
+def fun_l26_n952(x)
+ if (x < 1)
+ fun_l27_n86(x)
+ else
+ fun_l27_n526(x)
+ end
+end
+
+def fun_l26_n953(x)
+ if (x < 1)
+ fun_l27_n448(x)
+ else
+ fun_l27_n108(x)
+ end
+end
+
+def fun_l26_n954(x)
+ if (x < 1)
+ fun_l27_n931(x)
+ else
+ fun_l27_n540(x)
+ end
+end
+
+def fun_l26_n955(x)
+ if (x < 1)
+ fun_l27_n298(x)
+ else
+ fun_l27_n836(x)
+ end
+end
+
+def fun_l26_n956(x)
+ if (x < 1)
+ fun_l27_n232(x)
+ else
+ fun_l27_n200(x)
+ end
+end
+
+def fun_l26_n957(x)
+ if (x < 1)
+ fun_l27_n342(x)
+ else
+ fun_l27_n885(x)
+ end
+end
+
+def fun_l26_n958(x)
+ if (x < 1)
+ fun_l27_n254(x)
+ else
+ fun_l27_n764(x)
+ end
+end
+
+def fun_l26_n959(x)
+ if (x < 1)
+ fun_l27_n765(x)
+ else
+ fun_l27_n264(x)
+ end
+end
+
+def fun_l26_n960(x)
+ if (x < 1)
+ fun_l27_n45(x)
+ else
+ fun_l27_n993(x)
+ end
+end
+
+def fun_l26_n961(x)
+ if (x < 1)
+ fun_l27_n105(x)
+ else
+ fun_l27_n100(x)
+ end
+end
+
+def fun_l26_n962(x)
+ if (x < 1)
+ fun_l27_n979(x)
+ else
+ fun_l27_n87(x)
+ end
+end
+
+def fun_l26_n963(x)
+ if (x < 1)
+ fun_l27_n103(x)
+ else
+ fun_l27_n927(x)
+ end
+end
+
+def fun_l26_n964(x)
+ if (x < 1)
+ fun_l27_n635(x)
+ else
+ fun_l27_n489(x)
+ end
+end
+
+def fun_l26_n965(x)
+ if (x < 1)
+ fun_l27_n565(x)
+ else
+ fun_l27_n70(x)
+ end
+end
+
+def fun_l26_n966(x)
+ if (x < 1)
+ fun_l27_n370(x)
+ else
+ fun_l27_n975(x)
+ end
+end
+
+def fun_l26_n967(x)
+ if (x < 1)
+ fun_l27_n997(x)
+ else
+ fun_l27_n132(x)
+ end
+end
+
+def fun_l26_n968(x)
+ if (x < 1)
+ fun_l27_n964(x)
+ else
+ fun_l27_n201(x)
+ end
+end
+
+def fun_l26_n969(x)
+ if (x < 1)
+ fun_l27_n710(x)
+ else
+ fun_l27_n875(x)
+ end
+end
+
+def fun_l26_n970(x)
+ if (x < 1)
+ fun_l27_n736(x)
+ else
+ fun_l27_n338(x)
+ end
+end
+
+def fun_l26_n971(x)
+ if (x < 1)
+ fun_l27_n429(x)
+ else
+ fun_l27_n64(x)
+ end
+end
+
+def fun_l26_n972(x)
+ if (x < 1)
+ fun_l27_n986(x)
+ else
+ fun_l27_n27(x)
+ end
+end
+
+def fun_l26_n973(x)
+ if (x < 1)
+ fun_l27_n419(x)
+ else
+ fun_l27_n579(x)
+ end
+end
+
+def fun_l26_n974(x)
+ if (x < 1)
+ fun_l27_n479(x)
+ else
+ fun_l27_n709(x)
+ end
+end
+
+def fun_l26_n975(x)
+ if (x < 1)
+ fun_l27_n524(x)
+ else
+ fun_l27_n550(x)
+ end
+end
+
+def fun_l26_n976(x)
+ if (x < 1)
+ fun_l27_n679(x)
+ else
+ fun_l27_n822(x)
+ end
+end
+
+def fun_l26_n977(x)
+ if (x < 1)
+ fun_l27_n535(x)
+ else
+ fun_l27_n198(x)
+ end
+end
+
+def fun_l26_n978(x)
+ if (x < 1)
+ fun_l27_n226(x)
+ else
+ fun_l27_n610(x)
+ end
+end
+
+def fun_l26_n979(x)
+ if (x < 1)
+ fun_l27_n460(x)
+ else
+ fun_l27_n562(x)
+ end
+end
+
+def fun_l26_n980(x)
+ if (x < 1)
+ fun_l27_n109(x)
+ else
+ fun_l27_n632(x)
+ end
+end
+
+def fun_l26_n981(x)
+ if (x < 1)
+ fun_l27_n936(x)
+ else
+ fun_l27_n288(x)
+ end
+end
+
+def fun_l26_n982(x)
+ if (x < 1)
+ fun_l27_n668(x)
+ else
+ fun_l27_n5(x)
+ end
+end
+
+def fun_l26_n983(x)
+ if (x < 1)
+ fun_l27_n458(x)
+ else
+ fun_l27_n861(x)
+ end
+end
+
+def fun_l26_n984(x)
+ if (x < 1)
+ fun_l27_n722(x)
+ else
+ fun_l27_n838(x)
+ end
+end
+
+def fun_l26_n985(x)
+ if (x < 1)
+ fun_l27_n883(x)
+ else
+ fun_l27_n124(x)
+ end
+end
+
+def fun_l26_n986(x)
+ if (x < 1)
+ fun_l27_n873(x)
+ else
+ fun_l27_n399(x)
+ end
+end
+
+def fun_l26_n987(x)
+ if (x < 1)
+ fun_l27_n449(x)
+ else
+ fun_l27_n34(x)
+ end
+end
+
+def fun_l26_n988(x)
+ if (x < 1)
+ fun_l27_n549(x)
+ else
+ fun_l27_n304(x)
+ end
+end
+
+def fun_l26_n989(x)
+ if (x < 1)
+ fun_l27_n287(x)
+ else
+ fun_l27_n270(x)
+ end
+end
+
+def fun_l26_n990(x)
+ if (x < 1)
+ fun_l27_n950(x)
+ else
+ fun_l27_n203(x)
+ end
+end
+
+def fun_l26_n991(x)
+ if (x < 1)
+ fun_l27_n39(x)
+ else
+ fun_l27_n284(x)
+ end
+end
+
+def fun_l26_n992(x)
+ if (x < 1)
+ fun_l27_n944(x)
+ else
+ fun_l27_n420(x)
+ end
+end
+
+def fun_l26_n993(x)
+ if (x < 1)
+ fun_l27_n254(x)
+ else
+ fun_l27_n960(x)
+ end
+end
+
+def fun_l26_n994(x)
+ if (x < 1)
+ fun_l27_n374(x)
+ else
+ fun_l27_n354(x)
+ end
+end
+
+def fun_l26_n995(x)
+ if (x < 1)
+ fun_l27_n766(x)
+ else
+ fun_l27_n937(x)
+ end
+end
+
+def fun_l26_n996(x)
+ if (x < 1)
+ fun_l27_n299(x)
+ else
+ fun_l27_n565(x)
+ end
+end
+
+def fun_l26_n997(x)
+ if (x < 1)
+ fun_l27_n390(x)
+ else
+ fun_l27_n924(x)
+ end
+end
+
+def fun_l26_n998(x)
+ if (x < 1)
+ fun_l27_n452(x)
+ else
+ fun_l27_n653(x)
+ end
+end
+
+def fun_l26_n999(x)
+ if (x < 1)
+ fun_l27_n110(x)
+ else
+ fun_l27_n781(x)
+ end
+end
+
+def fun_l27_n0(x)
+ if (x < 1)
+ fun_l28_n77(x)
+ else
+ fun_l28_n170(x)
+ end
+end
+
+def fun_l27_n1(x)
+ if (x < 1)
+ fun_l28_n420(x)
+ else
+ fun_l28_n414(x)
+ end
+end
+
+def fun_l27_n2(x)
+ if (x < 1)
+ fun_l28_n802(x)
+ else
+ fun_l28_n702(x)
+ end
+end
+
+def fun_l27_n3(x)
+ if (x < 1)
+ fun_l28_n742(x)
+ else
+ fun_l28_n819(x)
+ end
+end
+
+def fun_l27_n4(x)
+ if (x < 1)
+ fun_l28_n75(x)
+ else
+ fun_l28_n675(x)
+ end
+end
+
+def fun_l27_n5(x)
+ if (x < 1)
+ fun_l28_n276(x)
+ else
+ fun_l28_n554(x)
+ end
+end
+
+def fun_l27_n6(x)
+ if (x < 1)
+ fun_l28_n505(x)
+ else
+ fun_l28_n462(x)
+ end
+end
+
+def fun_l27_n7(x)
+ if (x < 1)
+ fun_l28_n401(x)
+ else
+ fun_l28_n437(x)
+ end
+end
+
+def fun_l27_n8(x)
+ if (x < 1)
+ fun_l28_n987(x)
+ else
+ fun_l28_n911(x)
+ end
+end
+
+def fun_l27_n9(x)
+ if (x < 1)
+ fun_l28_n196(x)
+ else
+ fun_l28_n507(x)
+ end
+end
+
+def fun_l27_n10(x)
+ if (x < 1)
+ fun_l28_n676(x)
+ else
+ fun_l28_n612(x)
+ end
+end
+
+def fun_l27_n11(x)
+ if (x < 1)
+ fun_l28_n630(x)
+ else
+ fun_l28_n897(x)
+ end
+end
+
+def fun_l27_n12(x)
+ if (x < 1)
+ fun_l28_n655(x)
+ else
+ fun_l28_n58(x)
+ end
+end
+
+def fun_l27_n13(x)
+ if (x < 1)
+ fun_l28_n777(x)
+ else
+ fun_l28_n138(x)
+ end
+end
+
+def fun_l27_n14(x)
+ if (x < 1)
+ fun_l28_n233(x)
+ else
+ fun_l28_n296(x)
+ end
+end
+
+def fun_l27_n15(x)
+ if (x < 1)
+ fun_l28_n580(x)
+ else
+ fun_l28_n538(x)
+ end
+end
+
+def fun_l27_n16(x)
+ if (x < 1)
+ fun_l28_n124(x)
+ else
+ fun_l28_n285(x)
+ end
+end
+
+def fun_l27_n17(x)
+ if (x < 1)
+ fun_l28_n250(x)
+ else
+ fun_l28_n255(x)
+ end
+end
+
+def fun_l27_n18(x)
+ if (x < 1)
+ fun_l28_n872(x)
+ else
+ fun_l28_n242(x)
+ end
+end
+
+def fun_l27_n19(x)
+ if (x < 1)
+ fun_l28_n548(x)
+ else
+ fun_l28_n30(x)
+ end
+end
+
+def fun_l27_n20(x)
+ if (x < 1)
+ fun_l28_n411(x)
+ else
+ fun_l28_n997(x)
+ end
+end
+
+def fun_l27_n21(x)
+ if (x < 1)
+ fun_l28_n860(x)
+ else
+ fun_l28_n22(x)
+ end
+end
+
+def fun_l27_n22(x)
+ if (x < 1)
+ fun_l28_n147(x)
+ else
+ fun_l28_n210(x)
+ end
+end
+
+def fun_l27_n23(x)
+ if (x < 1)
+ fun_l28_n763(x)
+ else
+ fun_l28_n652(x)
+ end
+end
+
+def fun_l27_n24(x)
+ if (x < 1)
+ fun_l28_n678(x)
+ else
+ fun_l28_n637(x)
+ end
+end
+
+def fun_l27_n25(x)
+ if (x < 1)
+ fun_l28_n748(x)
+ else
+ fun_l28_n445(x)
+ end
+end
+
+def fun_l27_n26(x)
+ if (x < 1)
+ fun_l28_n796(x)
+ else
+ fun_l28_n780(x)
+ end
+end
+
+def fun_l27_n27(x)
+ if (x < 1)
+ fun_l28_n26(x)
+ else
+ fun_l28_n737(x)
+ end
+end
+
+def fun_l27_n28(x)
+ if (x < 1)
+ fun_l28_n779(x)
+ else
+ fun_l28_n206(x)
+ end
+end
+
+def fun_l27_n29(x)
+ if (x < 1)
+ fun_l28_n236(x)
+ else
+ fun_l28_n864(x)
+ end
+end
+
+def fun_l27_n30(x)
+ if (x < 1)
+ fun_l28_n937(x)
+ else
+ fun_l28_n524(x)
+ end
+end
+
+def fun_l27_n31(x)
+ if (x < 1)
+ fun_l28_n61(x)
+ else
+ fun_l28_n791(x)
+ end
+end
+
+def fun_l27_n32(x)
+ if (x < 1)
+ fun_l28_n891(x)
+ else
+ fun_l28_n424(x)
+ end
+end
+
+def fun_l27_n33(x)
+ if (x < 1)
+ fun_l28_n856(x)
+ else
+ fun_l28_n544(x)
+ end
+end
+
+def fun_l27_n34(x)
+ if (x < 1)
+ fun_l28_n575(x)
+ else
+ fun_l28_n608(x)
+ end
+end
+
+def fun_l27_n35(x)
+ if (x < 1)
+ fun_l28_n546(x)
+ else
+ fun_l28_n164(x)
+ end
+end
+
+def fun_l27_n36(x)
+ if (x < 1)
+ fun_l28_n482(x)
+ else
+ fun_l28_n854(x)
+ end
+end
+
+def fun_l27_n37(x)
+ if (x < 1)
+ fun_l28_n667(x)
+ else
+ fun_l28_n568(x)
+ end
+end
+
+def fun_l27_n38(x)
+ if (x < 1)
+ fun_l28_n8(x)
+ else
+ fun_l28_n794(x)
+ end
+end
+
+def fun_l27_n39(x)
+ if (x < 1)
+ fun_l28_n504(x)
+ else
+ fun_l28_n199(x)
+ end
+end
+
+def fun_l27_n40(x)
+ if (x < 1)
+ fun_l28_n360(x)
+ else
+ fun_l28_n714(x)
+ end
+end
+
+def fun_l27_n41(x)
+ if (x < 1)
+ fun_l28_n758(x)
+ else
+ fun_l28_n499(x)
+ end
+end
+
+def fun_l27_n42(x)
+ if (x < 1)
+ fun_l28_n617(x)
+ else
+ fun_l28_n239(x)
+ end
+end
+
+def fun_l27_n43(x)
+ if (x < 1)
+ fun_l28_n357(x)
+ else
+ fun_l28_n950(x)
+ end
+end
+
+def fun_l27_n44(x)
+ if (x < 1)
+ fun_l28_n308(x)
+ else
+ fun_l28_n248(x)
+ end
+end
+
+def fun_l27_n45(x)
+ if (x < 1)
+ fun_l28_n887(x)
+ else
+ fun_l28_n541(x)
+ end
+end
+
+def fun_l27_n46(x)
+ if (x < 1)
+ fun_l28_n922(x)
+ else
+ fun_l28_n21(x)
+ end
+end
+
+def fun_l27_n47(x)
+ if (x < 1)
+ fun_l28_n398(x)
+ else
+ fun_l28_n781(x)
+ end
+end
+
+def fun_l27_n48(x)
+ if (x < 1)
+ fun_l28_n573(x)
+ else
+ fun_l28_n22(x)
+ end
+end
+
+def fun_l27_n49(x)
+ if (x < 1)
+ fun_l28_n324(x)
+ else
+ fun_l28_n764(x)
+ end
+end
+
+def fun_l27_n50(x)
+ if (x < 1)
+ fun_l28_n428(x)
+ else
+ fun_l28_n3(x)
+ end
+end
+
+def fun_l27_n51(x)
+ if (x < 1)
+ fun_l28_n637(x)
+ else
+ fun_l28_n871(x)
+ end
+end
+
+def fun_l27_n52(x)
+ if (x < 1)
+ fun_l28_n547(x)
+ else
+ fun_l28_n370(x)
+ end
+end
+
+def fun_l27_n53(x)
+ if (x < 1)
+ fun_l28_n864(x)
+ else
+ fun_l28_n360(x)
+ end
+end
+
+def fun_l27_n54(x)
+ if (x < 1)
+ fun_l28_n960(x)
+ else
+ fun_l28_n80(x)
+ end
+end
+
+def fun_l27_n55(x)
+ if (x < 1)
+ fun_l28_n339(x)
+ else
+ fun_l28_n828(x)
+ end
+end
+
+def fun_l27_n56(x)
+ if (x < 1)
+ fun_l28_n613(x)
+ else
+ fun_l28_n109(x)
+ end
+end
+
+def fun_l27_n57(x)
+ if (x < 1)
+ fun_l28_n458(x)
+ else
+ fun_l28_n339(x)
+ end
+end
+
+def fun_l27_n58(x)
+ if (x < 1)
+ fun_l28_n313(x)
+ else
+ fun_l28_n20(x)
+ end
+end
+
+def fun_l27_n59(x)
+ if (x < 1)
+ fun_l28_n642(x)
+ else
+ fun_l28_n582(x)
+ end
+end
+
+def fun_l27_n60(x)
+ if (x < 1)
+ fun_l28_n407(x)
+ else
+ fun_l28_n182(x)
+ end
+end
+
+def fun_l27_n61(x)
+ if (x < 1)
+ fun_l28_n475(x)
+ else
+ fun_l28_n865(x)
+ end
+end
+
+def fun_l27_n62(x)
+ if (x < 1)
+ fun_l28_n867(x)
+ else
+ fun_l28_n935(x)
+ end
+end
+
+def fun_l27_n63(x)
+ if (x < 1)
+ fun_l28_n361(x)
+ else
+ fun_l28_n675(x)
+ end
+end
+
+def fun_l27_n64(x)
+ if (x < 1)
+ fun_l28_n583(x)
+ else
+ fun_l28_n990(x)
+ end
+end
+
+def fun_l27_n65(x)
+ if (x < 1)
+ fun_l28_n305(x)
+ else
+ fun_l28_n918(x)
+ end
+end
+
+def fun_l27_n66(x)
+ if (x < 1)
+ fun_l28_n449(x)
+ else
+ fun_l28_n172(x)
+ end
+end
+
+def fun_l27_n67(x)
+ if (x < 1)
+ fun_l28_n384(x)
+ else
+ fun_l28_n102(x)
+ end
+end
+
+def fun_l27_n68(x)
+ if (x < 1)
+ fun_l28_n27(x)
+ else
+ fun_l28_n638(x)
+ end
+end
+
+def fun_l27_n69(x)
+ if (x < 1)
+ fun_l28_n370(x)
+ else
+ fun_l28_n305(x)
+ end
+end
+
+def fun_l27_n70(x)
+ if (x < 1)
+ fun_l28_n91(x)
+ else
+ fun_l28_n516(x)
+ end
+end
+
+def fun_l27_n71(x)
+ if (x < 1)
+ fun_l28_n835(x)
+ else
+ fun_l28_n422(x)
+ end
+end
+
+def fun_l27_n72(x)
+ if (x < 1)
+ fun_l28_n528(x)
+ else
+ fun_l28_n924(x)
+ end
+end
+
+def fun_l27_n73(x)
+ if (x < 1)
+ fun_l28_n910(x)
+ else
+ fun_l28_n177(x)
+ end
+end
+
+def fun_l27_n74(x)
+ if (x < 1)
+ fun_l28_n424(x)
+ else
+ fun_l28_n133(x)
+ end
+end
+
+def fun_l27_n75(x)
+ if (x < 1)
+ fun_l28_n207(x)
+ else
+ fun_l28_n206(x)
+ end
+end
+
+def fun_l27_n76(x)
+ if (x < 1)
+ fun_l28_n285(x)
+ else
+ fun_l28_n513(x)
+ end
+end
+
+def fun_l27_n77(x)
+ if (x < 1)
+ fun_l28_n446(x)
+ else
+ fun_l28_n985(x)
+ end
+end
+
+def fun_l27_n78(x)
+ if (x < 1)
+ fun_l28_n814(x)
+ else
+ fun_l28_n43(x)
+ end
+end
+
+def fun_l27_n79(x)
+ if (x < 1)
+ fun_l28_n155(x)
+ else
+ fun_l28_n944(x)
+ end
+end
+
+def fun_l27_n80(x)
+ if (x < 1)
+ fun_l28_n22(x)
+ else
+ fun_l28_n815(x)
+ end
+end
+
+def fun_l27_n81(x)
+ if (x < 1)
+ fun_l28_n465(x)
+ else
+ fun_l28_n132(x)
+ end
+end
+
+def fun_l27_n82(x)
+ if (x < 1)
+ fun_l28_n540(x)
+ else
+ fun_l28_n199(x)
+ end
+end
+
+def fun_l27_n83(x)
+ if (x < 1)
+ fun_l28_n28(x)
+ else
+ fun_l28_n64(x)
+ end
+end
+
+def fun_l27_n84(x)
+ if (x < 1)
+ fun_l28_n4(x)
+ else
+ fun_l28_n782(x)
+ end
+end
+
+def fun_l27_n85(x)
+ if (x < 1)
+ fun_l28_n685(x)
+ else
+ fun_l28_n57(x)
+ end
+end
+
+def fun_l27_n86(x)
+ if (x < 1)
+ fun_l28_n755(x)
+ else
+ fun_l28_n317(x)
+ end
+end
+
+def fun_l27_n87(x)
+ if (x < 1)
+ fun_l28_n298(x)
+ else
+ fun_l28_n645(x)
+ end
+end
+
+def fun_l27_n88(x)
+ if (x < 1)
+ fun_l28_n489(x)
+ else
+ fun_l28_n357(x)
+ end
+end
+
+def fun_l27_n89(x)
+ if (x < 1)
+ fun_l28_n225(x)
+ else
+ fun_l28_n465(x)
+ end
+end
+
+def fun_l27_n90(x)
+ if (x < 1)
+ fun_l28_n729(x)
+ else
+ fun_l28_n688(x)
+ end
+end
+
+def fun_l27_n91(x)
+ if (x < 1)
+ fun_l28_n936(x)
+ else
+ fun_l28_n62(x)
+ end
+end
+
+def fun_l27_n92(x)
+ if (x < 1)
+ fun_l28_n564(x)
+ else
+ fun_l28_n497(x)
+ end
+end
+
+def fun_l27_n93(x)
+ if (x < 1)
+ fun_l28_n78(x)
+ else
+ fun_l28_n167(x)
+ end
+end
+
+def fun_l27_n94(x)
+ if (x < 1)
+ fun_l28_n24(x)
+ else
+ fun_l28_n543(x)
+ end
+end
+
+def fun_l27_n95(x)
+ if (x < 1)
+ fun_l28_n56(x)
+ else
+ fun_l28_n796(x)
+ end
+end
+
+def fun_l27_n96(x)
+ if (x < 1)
+ fun_l28_n768(x)
+ else
+ fun_l28_n909(x)
+ end
+end
+
+def fun_l27_n97(x)
+ if (x < 1)
+ fun_l28_n72(x)
+ else
+ fun_l28_n604(x)
+ end
+end
+
+def fun_l27_n98(x)
+ if (x < 1)
+ fun_l28_n903(x)
+ else
+ fun_l28_n998(x)
+ end
+end
+
+def fun_l27_n99(x)
+ if (x < 1)
+ fun_l28_n525(x)
+ else
+ fun_l28_n158(x)
+ end
+end
+
+def fun_l27_n100(x)
+ if (x < 1)
+ fun_l28_n54(x)
+ else
+ fun_l28_n667(x)
+ end
+end
+
+def fun_l27_n101(x)
+ if (x < 1)
+ fun_l28_n894(x)
+ else
+ fun_l28_n807(x)
+ end
+end
+
+def fun_l27_n102(x)
+ if (x < 1)
+ fun_l28_n334(x)
+ else
+ fun_l28_n479(x)
+ end
+end
+
+def fun_l27_n103(x)
+ if (x < 1)
+ fun_l28_n211(x)
+ else
+ fun_l28_n383(x)
+ end
+end
+
+def fun_l27_n104(x)
+ if (x < 1)
+ fun_l28_n598(x)
+ else
+ fun_l28_n793(x)
+ end
+end
+
+def fun_l27_n105(x)
+ if (x < 1)
+ fun_l28_n812(x)
+ else
+ fun_l28_n806(x)
+ end
+end
+
+def fun_l27_n106(x)
+ if (x < 1)
+ fun_l28_n726(x)
+ else
+ fun_l28_n769(x)
+ end
+end
+
+def fun_l27_n107(x)
+ if (x < 1)
+ fun_l28_n593(x)
+ else
+ fun_l28_n173(x)
+ end
+end
+
+def fun_l27_n108(x)
+ if (x < 1)
+ fun_l28_n490(x)
+ else
+ fun_l28_n681(x)
+ end
+end
+
+def fun_l27_n109(x)
+ if (x < 1)
+ fun_l28_n691(x)
+ else
+ fun_l28_n323(x)
+ end
+end
+
+def fun_l27_n110(x)
+ if (x < 1)
+ fun_l28_n710(x)
+ else
+ fun_l28_n624(x)
+ end
+end
+
+def fun_l27_n111(x)
+ if (x < 1)
+ fun_l28_n563(x)
+ else
+ fun_l28_n335(x)
+ end
+end
+
+def fun_l27_n112(x)
+ if (x < 1)
+ fun_l28_n510(x)
+ else
+ fun_l28_n879(x)
+ end
+end
+
+def fun_l27_n113(x)
+ if (x < 1)
+ fun_l28_n900(x)
+ else
+ fun_l28_n119(x)
+ end
+end
+
+def fun_l27_n114(x)
+ if (x < 1)
+ fun_l28_n17(x)
+ else
+ fun_l28_n8(x)
+ end
+end
+
+def fun_l27_n115(x)
+ if (x < 1)
+ fun_l28_n813(x)
+ else
+ fun_l28_n948(x)
+ end
+end
+
+def fun_l27_n116(x)
+ if (x < 1)
+ fun_l28_n644(x)
+ else
+ fun_l28_n177(x)
+ end
+end
+
+def fun_l27_n117(x)
+ if (x < 1)
+ fun_l28_n635(x)
+ else
+ fun_l28_n489(x)
+ end
+end
+
+def fun_l27_n118(x)
+ if (x < 1)
+ fun_l28_n520(x)
+ else
+ fun_l28_n127(x)
+ end
+end
+
+def fun_l27_n119(x)
+ if (x < 1)
+ fun_l28_n859(x)
+ else
+ fun_l28_n264(x)
+ end
+end
+
+def fun_l27_n120(x)
+ if (x < 1)
+ fun_l28_n29(x)
+ else
+ fun_l28_n984(x)
+ end
+end
+
+def fun_l27_n121(x)
+ if (x < 1)
+ fun_l28_n2(x)
+ else
+ fun_l28_n858(x)
+ end
+end
+
+def fun_l27_n122(x)
+ if (x < 1)
+ fun_l28_n907(x)
+ else
+ fun_l28_n34(x)
+ end
+end
+
+def fun_l27_n123(x)
+ if (x < 1)
+ fun_l28_n495(x)
+ else
+ fun_l28_n144(x)
+ end
+end
+
+def fun_l27_n124(x)
+ if (x < 1)
+ fun_l28_n160(x)
+ else
+ fun_l28_n987(x)
+ end
+end
+
+def fun_l27_n125(x)
+ if (x < 1)
+ fun_l28_n60(x)
+ else
+ fun_l28_n415(x)
+ end
+end
+
+def fun_l27_n126(x)
+ if (x < 1)
+ fun_l28_n473(x)
+ else
+ fun_l28_n461(x)
+ end
+end
+
+def fun_l27_n127(x)
+ if (x < 1)
+ fun_l28_n664(x)
+ else
+ fun_l28_n764(x)
+ end
+end
+
+def fun_l27_n128(x)
+ if (x < 1)
+ fun_l28_n815(x)
+ else
+ fun_l28_n677(x)
+ end
+end
+
+def fun_l27_n129(x)
+ if (x < 1)
+ fun_l28_n828(x)
+ else
+ fun_l28_n575(x)
+ end
+end
+
+def fun_l27_n130(x)
+ if (x < 1)
+ fun_l28_n100(x)
+ else
+ fun_l28_n811(x)
+ end
+end
+
+def fun_l27_n131(x)
+ if (x < 1)
+ fun_l28_n789(x)
+ else
+ fun_l28_n246(x)
+ end
+end
+
+def fun_l27_n132(x)
+ if (x < 1)
+ fun_l28_n506(x)
+ else
+ fun_l28_n555(x)
+ end
+end
+
+def fun_l27_n133(x)
+ if (x < 1)
+ fun_l28_n272(x)
+ else
+ fun_l28_n115(x)
+ end
+end
+
+def fun_l27_n134(x)
+ if (x < 1)
+ fun_l28_n925(x)
+ else
+ fun_l28_n34(x)
+ end
+end
+
+def fun_l27_n135(x)
+ if (x < 1)
+ fun_l28_n844(x)
+ else
+ fun_l28_n725(x)
+ end
+end
+
+def fun_l27_n136(x)
+ if (x < 1)
+ fun_l28_n825(x)
+ else
+ fun_l28_n38(x)
+ end
+end
+
+def fun_l27_n137(x)
+ if (x < 1)
+ fun_l28_n607(x)
+ else
+ fun_l28_n343(x)
+ end
+end
+
+def fun_l27_n138(x)
+ if (x < 1)
+ fun_l28_n874(x)
+ else
+ fun_l28_n449(x)
+ end
+end
+
+def fun_l27_n139(x)
+ if (x < 1)
+ fun_l28_n632(x)
+ else
+ fun_l28_n454(x)
+ end
+end
+
+def fun_l27_n140(x)
+ if (x < 1)
+ fun_l28_n902(x)
+ else
+ fun_l28_n301(x)
+ end
+end
+
+def fun_l27_n141(x)
+ if (x < 1)
+ fun_l28_n395(x)
+ else
+ fun_l28_n890(x)
+ end
+end
+
+def fun_l27_n142(x)
+ if (x < 1)
+ fun_l28_n625(x)
+ else
+ fun_l28_n246(x)
+ end
+end
+
+def fun_l27_n143(x)
+ if (x < 1)
+ fun_l28_n312(x)
+ else
+ fun_l28_n975(x)
+ end
+end
+
+def fun_l27_n144(x)
+ if (x < 1)
+ fun_l28_n974(x)
+ else
+ fun_l28_n451(x)
+ end
+end
+
+def fun_l27_n145(x)
+ if (x < 1)
+ fun_l28_n541(x)
+ else
+ fun_l28_n566(x)
+ end
+end
+
+def fun_l27_n146(x)
+ if (x < 1)
+ fun_l28_n285(x)
+ else
+ fun_l28_n443(x)
+ end
+end
+
+def fun_l27_n147(x)
+ if (x < 1)
+ fun_l28_n71(x)
+ else
+ fun_l28_n200(x)
+ end
+end
+
+def fun_l27_n148(x)
+ if (x < 1)
+ fun_l28_n681(x)
+ else
+ fun_l28_n561(x)
+ end
+end
+
+def fun_l27_n149(x)
+ if (x < 1)
+ fun_l28_n470(x)
+ else
+ fun_l28_n529(x)
+ end
+end
+
+def fun_l27_n150(x)
+ if (x < 1)
+ fun_l28_n83(x)
+ else
+ fun_l28_n755(x)
+ end
+end
+
+def fun_l27_n151(x)
+ if (x < 1)
+ fun_l28_n142(x)
+ else
+ fun_l28_n631(x)
+ end
+end
+
+def fun_l27_n152(x)
+ if (x < 1)
+ fun_l28_n49(x)
+ else
+ fun_l28_n531(x)
+ end
+end
+
+def fun_l27_n153(x)
+ if (x < 1)
+ fun_l28_n237(x)
+ else
+ fun_l28_n241(x)
+ end
+end
+
+def fun_l27_n154(x)
+ if (x < 1)
+ fun_l28_n36(x)
+ else
+ fun_l28_n862(x)
+ end
+end
+
+def fun_l27_n155(x)
+ if (x < 1)
+ fun_l28_n310(x)
+ else
+ fun_l28_n387(x)
+ end
+end
+
+def fun_l27_n156(x)
+ if (x < 1)
+ fun_l28_n1(x)
+ else
+ fun_l28_n131(x)
+ end
+end
+
+def fun_l27_n157(x)
+ if (x < 1)
+ fun_l28_n232(x)
+ else
+ fun_l28_n503(x)
+ end
+end
+
+def fun_l27_n158(x)
+ if (x < 1)
+ fun_l28_n48(x)
+ else
+ fun_l28_n68(x)
+ end
+end
+
+def fun_l27_n159(x)
+ if (x < 1)
+ fun_l28_n98(x)
+ else
+ fun_l28_n82(x)
+ end
+end
+
+def fun_l27_n160(x)
+ if (x < 1)
+ fun_l28_n175(x)
+ else
+ fun_l28_n466(x)
+ end
+end
+
+def fun_l27_n161(x)
+ if (x < 1)
+ fun_l28_n105(x)
+ else
+ fun_l28_n159(x)
+ end
+end
+
+def fun_l27_n162(x)
+ if (x < 1)
+ fun_l28_n336(x)
+ else
+ fun_l28_n314(x)
+ end
+end
+
+def fun_l27_n163(x)
+ if (x < 1)
+ fun_l28_n458(x)
+ else
+ fun_l28_n901(x)
+ end
+end
+
+def fun_l27_n164(x)
+ if (x < 1)
+ fun_l28_n621(x)
+ else
+ fun_l28_n876(x)
+ end
+end
+
+def fun_l27_n165(x)
+ if (x < 1)
+ fun_l28_n830(x)
+ else
+ fun_l28_n468(x)
+ end
+end
+
+def fun_l27_n166(x)
+ if (x < 1)
+ fun_l28_n606(x)
+ else
+ fun_l28_n253(x)
+ end
+end
+
+def fun_l27_n167(x)
+ if (x < 1)
+ fun_l28_n905(x)
+ else
+ fun_l28_n582(x)
+ end
+end
+
+def fun_l27_n168(x)
+ if (x < 1)
+ fun_l28_n882(x)
+ else
+ fun_l28_n280(x)
+ end
+end
+
+def fun_l27_n169(x)
+ if (x < 1)
+ fun_l28_n824(x)
+ else
+ fun_l28_n672(x)
+ end
+end
+
+def fun_l27_n170(x)
+ if (x < 1)
+ fun_l28_n455(x)
+ else
+ fun_l28_n621(x)
+ end
+end
+
+def fun_l27_n171(x)
+ if (x < 1)
+ fun_l28_n594(x)
+ else
+ fun_l28_n143(x)
+ end
+end
+
+def fun_l27_n172(x)
+ if (x < 1)
+ fun_l28_n414(x)
+ else
+ fun_l28_n371(x)
+ end
+end
+
+def fun_l27_n173(x)
+ if (x < 1)
+ fun_l28_n2(x)
+ else
+ fun_l28_n883(x)
+ end
+end
+
+def fun_l27_n174(x)
+ if (x < 1)
+ fun_l28_n710(x)
+ else
+ fun_l28_n322(x)
+ end
+end
+
+def fun_l27_n175(x)
+ if (x < 1)
+ fun_l28_n271(x)
+ else
+ fun_l28_n110(x)
+ end
+end
+
+def fun_l27_n176(x)
+ if (x < 1)
+ fun_l28_n100(x)
+ else
+ fun_l28_n870(x)
+ end
+end
+
+def fun_l27_n177(x)
+ if (x < 1)
+ fun_l28_n446(x)
+ else
+ fun_l28_n742(x)
+ end
+end
+
+def fun_l27_n178(x)
+ if (x < 1)
+ fun_l28_n175(x)
+ else
+ fun_l28_n170(x)
+ end
+end
+
+def fun_l27_n179(x)
+ if (x < 1)
+ fun_l28_n724(x)
+ else
+ fun_l28_n364(x)
+ end
+end
+
+def fun_l27_n180(x)
+ if (x < 1)
+ fun_l28_n167(x)
+ else
+ fun_l28_n826(x)
+ end
+end
+
+def fun_l27_n181(x)
+ if (x < 1)
+ fun_l28_n65(x)
+ else
+ fun_l28_n375(x)
+ end
+end
+
+def fun_l27_n182(x)
+ if (x < 1)
+ fun_l28_n709(x)
+ else
+ fun_l28_n62(x)
+ end
+end
+
+def fun_l27_n183(x)
+ if (x < 1)
+ fun_l28_n584(x)
+ else
+ fun_l28_n611(x)
+ end
+end
+
+def fun_l27_n184(x)
+ if (x < 1)
+ fun_l28_n442(x)
+ else
+ fun_l28_n174(x)
+ end
+end
+
+def fun_l27_n185(x)
+ if (x < 1)
+ fun_l28_n684(x)
+ else
+ fun_l28_n768(x)
+ end
+end
+
+def fun_l27_n186(x)
+ if (x < 1)
+ fun_l28_n424(x)
+ else
+ fun_l28_n207(x)
+ end
+end
+
+def fun_l27_n187(x)
+ if (x < 1)
+ fun_l28_n670(x)
+ else
+ fun_l28_n970(x)
+ end
+end
+
+def fun_l27_n188(x)
+ if (x < 1)
+ fun_l28_n470(x)
+ else
+ fun_l28_n774(x)
+ end
+end
+
+def fun_l27_n189(x)
+ if (x < 1)
+ fun_l28_n58(x)
+ else
+ fun_l28_n578(x)
+ end
+end
+
+def fun_l27_n190(x)
+ if (x < 1)
+ fun_l28_n697(x)
+ else
+ fun_l28_n310(x)
+ end
+end
+
+def fun_l27_n191(x)
+ if (x < 1)
+ fun_l28_n493(x)
+ else
+ fun_l28_n56(x)
+ end
+end
+
+def fun_l27_n192(x)
+ if (x < 1)
+ fun_l28_n12(x)
+ else
+ fun_l28_n471(x)
+ end
+end
+
+def fun_l27_n193(x)
+ if (x < 1)
+ fun_l28_n306(x)
+ else
+ fun_l28_n10(x)
+ end
+end
+
+def fun_l27_n194(x)
+ if (x < 1)
+ fun_l28_n87(x)
+ else
+ fun_l28_n59(x)
+ end
+end
+
+def fun_l27_n195(x)
+ if (x < 1)
+ fun_l28_n207(x)
+ else
+ fun_l28_n555(x)
+ end
+end
+
+def fun_l27_n196(x)
+ if (x < 1)
+ fun_l28_n563(x)
+ else
+ fun_l28_n256(x)
+ end
+end
+
+def fun_l27_n197(x)
+ if (x < 1)
+ fun_l28_n14(x)
+ else
+ fun_l28_n895(x)
+ end
+end
+
+def fun_l27_n198(x)
+ if (x < 1)
+ fun_l28_n986(x)
+ else
+ fun_l28_n287(x)
+ end
+end
+
+def fun_l27_n199(x)
+ if (x < 1)
+ fun_l28_n810(x)
+ else
+ fun_l28_n66(x)
+ end
+end
+
+def fun_l27_n200(x)
+ if (x < 1)
+ fun_l28_n457(x)
+ else
+ fun_l28_n186(x)
+ end
+end
+
+def fun_l27_n201(x)
+ if (x < 1)
+ fun_l28_n580(x)
+ else
+ fun_l28_n248(x)
+ end
+end
+
+def fun_l27_n202(x)
+ if (x < 1)
+ fun_l28_n9(x)
+ else
+ fun_l28_n66(x)
+ end
+end
+
+def fun_l27_n203(x)
+ if (x < 1)
+ fun_l28_n659(x)
+ else
+ fun_l28_n403(x)
+ end
+end
+
+def fun_l27_n204(x)
+ if (x < 1)
+ fun_l28_n66(x)
+ else
+ fun_l28_n524(x)
+ end
+end
+
+def fun_l27_n205(x)
+ if (x < 1)
+ fun_l28_n754(x)
+ else
+ fun_l28_n46(x)
+ end
+end
+
+def fun_l27_n206(x)
+ if (x < 1)
+ fun_l28_n32(x)
+ else
+ fun_l28_n655(x)
+ end
+end
+
+def fun_l27_n207(x)
+ if (x < 1)
+ fun_l28_n559(x)
+ else
+ fun_l28_n619(x)
+ end
+end
+
+def fun_l27_n208(x)
+ if (x < 1)
+ fun_l28_n251(x)
+ else
+ fun_l28_n410(x)
+ end
+end
+
+def fun_l27_n209(x)
+ if (x < 1)
+ fun_l28_n339(x)
+ else
+ fun_l28_n726(x)
+ end
+end
+
+def fun_l27_n210(x)
+ if (x < 1)
+ fun_l28_n104(x)
+ else
+ fun_l28_n733(x)
+ end
+end
+
+def fun_l27_n211(x)
+ if (x < 1)
+ fun_l28_n500(x)
+ else
+ fun_l28_n654(x)
+ end
+end
+
+def fun_l27_n212(x)
+ if (x < 1)
+ fun_l28_n244(x)
+ else
+ fun_l28_n471(x)
+ end
+end
+
+def fun_l27_n213(x)
+ if (x < 1)
+ fun_l28_n692(x)
+ else
+ fun_l28_n56(x)
+ end
+end
+
+def fun_l27_n214(x)
+ if (x < 1)
+ fun_l28_n54(x)
+ else
+ fun_l28_n753(x)
+ end
+end
+
+def fun_l27_n215(x)
+ if (x < 1)
+ fun_l28_n770(x)
+ else
+ fun_l28_n756(x)
+ end
+end
+
+def fun_l27_n216(x)
+ if (x < 1)
+ fun_l28_n771(x)
+ else
+ fun_l28_n407(x)
+ end
+end
+
+def fun_l27_n217(x)
+ if (x < 1)
+ fun_l28_n728(x)
+ else
+ fun_l28_n361(x)
+ end
+end
+
+def fun_l27_n218(x)
+ if (x < 1)
+ fun_l28_n983(x)
+ else
+ fun_l28_n440(x)
+ end
+end
+
+def fun_l27_n219(x)
+ if (x < 1)
+ fun_l28_n105(x)
+ else
+ fun_l28_n906(x)
+ end
+end
+
+def fun_l27_n220(x)
+ if (x < 1)
+ fun_l28_n694(x)
+ else
+ fun_l28_n792(x)
+ end
+end
+
+def fun_l27_n221(x)
+ if (x < 1)
+ fun_l28_n325(x)
+ else
+ fun_l28_n98(x)
+ end
+end
+
+def fun_l27_n222(x)
+ if (x < 1)
+ fun_l28_n354(x)
+ else
+ fun_l28_n683(x)
+ end
+end
+
+def fun_l27_n223(x)
+ if (x < 1)
+ fun_l28_n236(x)
+ else
+ fun_l28_n999(x)
+ end
+end
+
+def fun_l27_n224(x)
+ if (x < 1)
+ fun_l28_n671(x)
+ else
+ fun_l28_n621(x)
+ end
+end
+
+def fun_l27_n225(x)
+ if (x < 1)
+ fun_l28_n113(x)
+ else
+ fun_l28_n532(x)
+ end
+end
+
+def fun_l27_n226(x)
+ if (x < 1)
+ fun_l28_n43(x)
+ else
+ fun_l28_n449(x)
+ end
+end
+
+def fun_l27_n227(x)
+ if (x < 1)
+ fun_l28_n402(x)
+ else
+ fun_l28_n298(x)
+ end
+end
+
+def fun_l27_n228(x)
+ if (x < 1)
+ fun_l28_n858(x)
+ else
+ fun_l28_n626(x)
+ end
+end
+
+def fun_l27_n229(x)
+ if (x < 1)
+ fun_l28_n596(x)
+ else
+ fun_l28_n21(x)
+ end
+end
+
+def fun_l27_n230(x)
+ if (x < 1)
+ fun_l28_n713(x)
+ else
+ fun_l28_n755(x)
+ end
+end
+
+def fun_l27_n231(x)
+ if (x < 1)
+ fun_l28_n59(x)
+ else
+ fun_l28_n695(x)
+ end
+end
+
+def fun_l27_n232(x)
+ if (x < 1)
+ fun_l28_n715(x)
+ else
+ fun_l28_n614(x)
+ end
+end
+
+def fun_l27_n233(x)
+ if (x < 1)
+ fun_l28_n124(x)
+ else
+ fun_l28_n877(x)
+ end
+end
+
+def fun_l27_n234(x)
+ if (x < 1)
+ fun_l28_n563(x)
+ else
+ fun_l28_n273(x)
+ end
+end
+
+def fun_l27_n235(x)
+ if (x < 1)
+ fun_l28_n331(x)
+ else
+ fun_l28_n866(x)
+ end
+end
+
+def fun_l27_n236(x)
+ if (x < 1)
+ fun_l28_n950(x)
+ else
+ fun_l28_n765(x)
+ end
+end
+
+def fun_l27_n237(x)
+ if (x < 1)
+ fun_l28_n550(x)
+ else
+ fun_l28_n133(x)
+ end
+end
+
+def fun_l27_n238(x)
+ if (x < 1)
+ fun_l28_n0(x)
+ else
+ fun_l28_n749(x)
+ end
+end
+
+def fun_l27_n239(x)
+ if (x < 1)
+ fun_l28_n578(x)
+ else
+ fun_l28_n692(x)
+ end
+end
+
+def fun_l27_n240(x)
+ if (x < 1)
+ fun_l28_n111(x)
+ else
+ fun_l28_n301(x)
+ end
+end
+
+def fun_l27_n241(x)
+ if (x < 1)
+ fun_l28_n191(x)
+ else
+ fun_l28_n272(x)
+ end
+end
+
+def fun_l27_n242(x)
+ if (x < 1)
+ fun_l28_n547(x)
+ else
+ fun_l28_n425(x)
+ end
+end
+
+def fun_l27_n243(x)
+ if (x < 1)
+ fun_l28_n173(x)
+ else
+ fun_l28_n101(x)
+ end
+end
+
+def fun_l27_n244(x)
+ if (x < 1)
+ fun_l28_n511(x)
+ else
+ fun_l28_n758(x)
+ end
+end
+
+def fun_l27_n245(x)
+ if (x < 1)
+ fun_l28_n272(x)
+ else
+ fun_l28_n497(x)
+ end
+end
+
+def fun_l27_n246(x)
+ if (x < 1)
+ fun_l28_n59(x)
+ else
+ fun_l28_n348(x)
+ end
+end
+
+def fun_l27_n247(x)
+ if (x < 1)
+ fun_l28_n583(x)
+ else
+ fun_l28_n730(x)
+ end
+end
+
+def fun_l27_n248(x)
+ if (x < 1)
+ fun_l28_n635(x)
+ else
+ fun_l28_n714(x)
+ end
+end
+
+def fun_l27_n249(x)
+ if (x < 1)
+ fun_l28_n815(x)
+ else
+ fun_l28_n844(x)
+ end
+end
+
+def fun_l27_n250(x)
+ if (x < 1)
+ fun_l28_n694(x)
+ else
+ fun_l28_n869(x)
+ end
+end
+
+def fun_l27_n251(x)
+ if (x < 1)
+ fun_l28_n681(x)
+ else
+ fun_l28_n894(x)
+ end
+end
+
+def fun_l27_n252(x)
+ if (x < 1)
+ fun_l28_n756(x)
+ else
+ fun_l28_n657(x)
+ end
+end
+
+def fun_l27_n253(x)
+ if (x < 1)
+ fun_l28_n392(x)
+ else
+ fun_l28_n706(x)
+ end
+end
+
+def fun_l27_n254(x)
+ if (x < 1)
+ fun_l28_n267(x)
+ else
+ fun_l28_n238(x)
+ end
+end
+
+def fun_l27_n255(x)
+ if (x < 1)
+ fun_l28_n914(x)
+ else
+ fun_l28_n574(x)
+ end
+end
+
+def fun_l27_n256(x)
+ if (x < 1)
+ fun_l28_n872(x)
+ else
+ fun_l28_n269(x)
+ end
+end
+
+def fun_l27_n257(x)
+ if (x < 1)
+ fun_l28_n454(x)
+ else
+ fun_l28_n485(x)
+ end
+end
+
+def fun_l27_n258(x)
+ if (x < 1)
+ fun_l28_n994(x)
+ else
+ fun_l28_n83(x)
+ end
+end
+
+def fun_l27_n259(x)
+ if (x < 1)
+ fun_l28_n41(x)
+ else
+ fun_l28_n495(x)
+ end
+end
+
+def fun_l27_n260(x)
+ if (x < 1)
+ fun_l28_n75(x)
+ else
+ fun_l28_n508(x)
+ end
+end
+
+def fun_l27_n261(x)
+ if (x < 1)
+ fun_l28_n684(x)
+ else
+ fun_l28_n524(x)
+ end
+end
+
+def fun_l27_n262(x)
+ if (x < 1)
+ fun_l28_n78(x)
+ else
+ fun_l28_n563(x)
+ end
+end
+
+def fun_l27_n263(x)
+ if (x < 1)
+ fun_l28_n227(x)
+ else
+ fun_l28_n359(x)
+ end
+end
+
+def fun_l27_n264(x)
+ if (x < 1)
+ fun_l28_n679(x)
+ else
+ fun_l28_n711(x)
+ end
+end
+
+def fun_l27_n265(x)
+ if (x < 1)
+ fun_l28_n0(x)
+ else
+ fun_l28_n720(x)
+ end
+end
+
+def fun_l27_n266(x)
+ if (x < 1)
+ fun_l28_n384(x)
+ else
+ fun_l28_n915(x)
+ end
+end
+
+def fun_l27_n267(x)
+ if (x < 1)
+ fun_l28_n912(x)
+ else
+ fun_l28_n24(x)
+ end
+end
+
+def fun_l27_n268(x)
+ if (x < 1)
+ fun_l28_n337(x)
+ else
+ fun_l28_n880(x)
+ end
+end
+
+def fun_l27_n269(x)
+ if (x < 1)
+ fun_l28_n84(x)
+ else
+ fun_l28_n387(x)
+ end
+end
+
+def fun_l27_n270(x)
+ if (x < 1)
+ fun_l28_n155(x)
+ else
+ fun_l28_n705(x)
+ end
+end
+
+def fun_l27_n271(x)
+ if (x < 1)
+ fun_l28_n159(x)
+ else
+ fun_l28_n815(x)
+ end
+end
+
+def fun_l27_n272(x)
+ if (x < 1)
+ fun_l28_n182(x)
+ else
+ fun_l28_n210(x)
+ end
+end
+
+def fun_l27_n273(x)
+ if (x < 1)
+ fun_l28_n446(x)
+ else
+ fun_l28_n524(x)
+ end
+end
+
+def fun_l27_n274(x)
+ if (x < 1)
+ fun_l28_n828(x)
+ else
+ fun_l28_n14(x)
+ end
+end
+
+def fun_l27_n275(x)
+ if (x < 1)
+ fun_l28_n176(x)
+ else
+ fun_l28_n857(x)
+ end
+end
+
+def fun_l27_n276(x)
+ if (x < 1)
+ fun_l28_n39(x)
+ else
+ fun_l28_n973(x)
+ end
+end
+
+def fun_l27_n277(x)
+ if (x < 1)
+ fun_l28_n310(x)
+ else
+ fun_l28_n900(x)
+ end
+end
+
+def fun_l27_n278(x)
+ if (x < 1)
+ fun_l28_n729(x)
+ else
+ fun_l28_n544(x)
+ end
+end
+
+def fun_l27_n279(x)
+ if (x < 1)
+ fun_l28_n111(x)
+ else
+ fun_l28_n939(x)
+ end
+end
+
+def fun_l27_n280(x)
+ if (x < 1)
+ fun_l28_n102(x)
+ else
+ fun_l28_n658(x)
+ end
+end
+
+def fun_l27_n281(x)
+ if (x < 1)
+ fun_l28_n186(x)
+ else
+ fun_l28_n939(x)
+ end
+end
+
+def fun_l27_n282(x)
+ if (x < 1)
+ fun_l28_n276(x)
+ else
+ fun_l28_n428(x)
+ end
+end
+
+def fun_l27_n283(x)
+ if (x < 1)
+ fun_l28_n137(x)
+ else
+ fun_l28_n876(x)
+ end
+end
+
+def fun_l27_n284(x)
+ if (x < 1)
+ fun_l28_n31(x)
+ else
+ fun_l28_n351(x)
+ end
+end
+
+def fun_l27_n285(x)
+ if (x < 1)
+ fun_l28_n143(x)
+ else
+ fun_l28_n192(x)
+ end
+end
+
+def fun_l27_n286(x)
+ if (x < 1)
+ fun_l28_n63(x)
+ else
+ fun_l28_n764(x)
+ end
+end
+
+def fun_l27_n287(x)
+ if (x < 1)
+ fun_l28_n361(x)
+ else
+ fun_l28_n512(x)
+ end
+end
+
+def fun_l27_n288(x)
+ if (x < 1)
+ fun_l28_n817(x)
+ else
+ fun_l28_n997(x)
+ end
+end
+
+def fun_l27_n289(x)
+ if (x < 1)
+ fun_l28_n837(x)
+ else
+ fun_l28_n834(x)
+ end
+end
+
+def fun_l27_n290(x)
+ if (x < 1)
+ fun_l28_n436(x)
+ else
+ fun_l28_n873(x)
+ end
+end
+
+def fun_l27_n291(x)
+ if (x < 1)
+ fun_l28_n412(x)
+ else
+ fun_l28_n494(x)
+ end
+end
+
+def fun_l27_n292(x)
+ if (x < 1)
+ fun_l28_n794(x)
+ else
+ fun_l28_n972(x)
+ end
+end
+
+def fun_l27_n293(x)
+ if (x < 1)
+ fun_l28_n486(x)
+ else
+ fun_l28_n401(x)
+ end
+end
+
+def fun_l27_n294(x)
+ if (x < 1)
+ fun_l28_n171(x)
+ else
+ fun_l28_n334(x)
+ end
+end
+
+def fun_l27_n295(x)
+ if (x < 1)
+ fun_l28_n681(x)
+ else
+ fun_l28_n753(x)
+ end
+end
+
+def fun_l27_n296(x)
+ if (x < 1)
+ fun_l28_n541(x)
+ else
+ fun_l28_n855(x)
+ end
+end
+
+def fun_l27_n297(x)
+ if (x < 1)
+ fun_l28_n270(x)
+ else
+ fun_l28_n257(x)
+ end
+end
+
+def fun_l27_n298(x)
+ if (x < 1)
+ fun_l28_n923(x)
+ else
+ fun_l28_n997(x)
+ end
+end
+
+def fun_l27_n299(x)
+ if (x < 1)
+ fun_l28_n508(x)
+ else
+ fun_l28_n649(x)
+ end
+end
+
+def fun_l27_n300(x)
+ if (x < 1)
+ fun_l28_n351(x)
+ else
+ fun_l28_n966(x)
+ end
+end
+
+def fun_l27_n301(x)
+ if (x < 1)
+ fun_l28_n622(x)
+ else
+ fun_l28_n436(x)
+ end
+end
+
+def fun_l27_n302(x)
+ if (x < 1)
+ fun_l28_n723(x)
+ else
+ fun_l28_n261(x)
+ end
+end
+
+def fun_l27_n303(x)
+ if (x < 1)
+ fun_l28_n269(x)
+ else
+ fun_l28_n483(x)
+ end
+end
+
+def fun_l27_n304(x)
+ if (x < 1)
+ fun_l28_n449(x)
+ else
+ fun_l28_n5(x)
+ end
+end
+
+def fun_l27_n305(x)
+ if (x < 1)
+ fun_l28_n967(x)
+ else
+ fun_l28_n967(x)
+ end
+end
+
+def fun_l27_n306(x)
+ if (x < 1)
+ fun_l28_n866(x)
+ else
+ fun_l28_n590(x)
+ end
+end
+
+def fun_l27_n307(x)
+ if (x < 1)
+ fun_l28_n145(x)
+ else
+ fun_l28_n75(x)
+ end
+end
+
+def fun_l27_n308(x)
+ if (x < 1)
+ fun_l28_n329(x)
+ else
+ fun_l28_n834(x)
+ end
+end
+
+def fun_l27_n309(x)
+ if (x < 1)
+ fun_l28_n668(x)
+ else
+ fun_l28_n909(x)
+ end
+end
+
+def fun_l27_n310(x)
+ if (x < 1)
+ fun_l28_n70(x)
+ else
+ fun_l28_n311(x)
+ end
+end
+
+def fun_l27_n311(x)
+ if (x < 1)
+ fun_l28_n669(x)
+ else
+ fun_l28_n90(x)
+ end
+end
+
+def fun_l27_n312(x)
+ if (x < 1)
+ fun_l28_n805(x)
+ else
+ fun_l28_n558(x)
+ end
+end
+
+def fun_l27_n313(x)
+ if (x < 1)
+ fun_l28_n493(x)
+ else
+ fun_l28_n642(x)
+ end
+end
+
+def fun_l27_n314(x)
+ if (x < 1)
+ fun_l28_n285(x)
+ else
+ fun_l28_n968(x)
+ end
+end
+
+def fun_l27_n315(x)
+ if (x < 1)
+ fun_l28_n806(x)
+ else
+ fun_l28_n731(x)
+ end
+end
+
+def fun_l27_n316(x)
+ if (x < 1)
+ fun_l28_n284(x)
+ else
+ fun_l28_n441(x)
+ end
+end
+
+def fun_l27_n317(x)
+ if (x < 1)
+ fun_l28_n644(x)
+ else
+ fun_l28_n16(x)
+ end
+end
+
+def fun_l27_n318(x)
+ if (x < 1)
+ fun_l28_n411(x)
+ else
+ fun_l28_n739(x)
+ end
+end
+
+def fun_l27_n319(x)
+ if (x < 1)
+ fun_l28_n462(x)
+ else
+ fun_l28_n680(x)
+ end
+end
+
+def fun_l27_n320(x)
+ if (x < 1)
+ fun_l28_n126(x)
+ else
+ fun_l28_n558(x)
+ end
+end
+
+def fun_l27_n321(x)
+ if (x < 1)
+ fun_l28_n869(x)
+ else
+ fun_l28_n581(x)
+ end
+end
+
+def fun_l27_n322(x)
+ if (x < 1)
+ fun_l28_n25(x)
+ else
+ fun_l28_n352(x)
+ end
+end
+
+def fun_l27_n323(x)
+ if (x < 1)
+ fun_l28_n203(x)
+ else
+ fun_l28_n776(x)
+ end
+end
+
+def fun_l27_n324(x)
+ if (x < 1)
+ fun_l28_n6(x)
+ else
+ fun_l28_n833(x)
+ end
+end
+
+def fun_l27_n325(x)
+ if (x < 1)
+ fun_l28_n817(x)
+ else
+ fun_l28_n258(x)
+ end
+end
+
+def fun_l27_n326(x)
+ if (x < 1)
+ fun_l28_n607(x)
+ else
+ fun_l28_n813(x)
+ end
+end
+
+def fun_l27_n327(x)
+ if (x < 1)
+ fun_l28_n761(x)
+ else
+ fun_l28_n893(x)
+ end
+end
+
+def fun_l27_n328(x)
+ if (x < 1)
+ fun_l28_n861(x)
+ else
+ fun_l28_n879(x)
+ end
+end
+
+def fun_l27_n329(x)
+ if (x < 1)
+ fun_l28_n682(x)
+ else
+ fun_l28_n680(x)
+ end
+end
+
+def fun_l27_n330(x)
+ if (x < 1)
+ fun_l28_n61(x)
+ else
+ fun_l28_n481(x)
+ end
+end
+
+def fun_l27_n331(x)
+ if (x < 1)
+ fun_l28_n738(x)
+ else
+ fun_l28_n230(x)
+ end
+end
+
+def fun_l27_n332(x)
+ if (x < 1)
+ fun_l28_n45(x)
+ else
+ fun_l28_n279(x)
+ end
+end
+
+def fun_l27_n333(x)
+ if (x < 1)
+ fun_l28_n24(x)
+ else
+ fun_l28_n561(x)
+ end
+end
+
+def fun_l27_n334(x)
+ if (x < 1)
+ fun_l28_n459(x)
+ else
+ fun_l28_n594(x)
+ end
+end
+
+def fun_l27_n335(x)
+ if (x < 1)
+ fun_l28_n695(x)
+ else
+ fun_l28_n513(x)
+ end
+end
+
+def fun_l27_n336(x)
+ if (x < 1)
+ fun_l28_n729(x)
+ else
+ fun_l28_n89(x)
+ end
+end
+
+def fun_l27_n337(x)
+ if (x < 1)
+ fun_l28_n509(x)
+ else
+ fun_l28_n574(x)
+ end
+end
+
+def fun_l27_n338(x)
+ if (x < 1)
+ fun_l28_n80(x)
+ else
+ fun_l28_n448(x)
+ end
+end
+
+def fun_l27_n339(x)
+ if (x < 1)
+ fun_l28_n279(x)
+ else
+ fun_l28_n177(x)
+ end
+end
+
+def fun_l27_n340(x)
+ if (x < 1)
+ fun_l28_n508(x)
+ else
+ fun_l28_n706(x)
+ end
+end
+
+def fun_l27_n341(x)
+ if (x < 1)
+ fun_l28_n790(x)
+ else
+ fun_l28_n774(x)
+ end
+end
+
+def fun_l27_n342(x)
+ if (x < 1)
+ fun_l28_n606(x)
+ else
+ fun_l28_n642(x)
+ end
+end
+
+def fun_l27_n343(x)
+ if (x < 1)
+ fun_l28_n108(x)
+ else
+ fun_l28_n539(x)
+ end
+end
+
+def fun_l27_n344(x)
+ if (x < 1)
+ fun_l28_n418(x)
+ else
+ fun_l28_n687(x)
+ end
+end
+
+def fun_l27_n345(x)
+ if (x < 1)
+ fun_l28_n386(x)
+ else
+ fun_l28_n170(x)
+ end
+end
+
+def fun_l27_n346(x)
+ if (x < 1)
+ fun_l28_n648(x)
+ else
+ fun_l28_n340(x)
+ end
+end
+
+def fun_l27_n347(x)
+ if (x < 1)
+ fun_l28_n516(x)
+ else
+ fun_l28_n586(x)
+ end
+end
+
+def fun_l27_n348(x)
+ if (x < 1)
+ fun_l28_n646(x)
+ else
+ fun_l28_n448(x)
+ end
+end
+
+def fun_l27_n349(x)
+ if (x < 1)
+ fun_l28_n378(x)
+ else
+ fun_l28_n413(x)
+ end
+end
+
+def fun_l27_n350(x)
+ if (x < 1)
+ fun_l28_n885(x)
+ else
+ fun_l28_n932(x)
+ end
+end
+
+def fun_l27_n351(x)
+ if (x < 1)
+ fun_l28_n9(x)
+ else
+ fun_l28_n843(x)
+ end
+end
+
+def fun_l27_n352(x)
+ if (x < 1)
+ fun_l28_n502(x)
+ else
+ fun_l28_n229(x)
+ end
+end
+
+def fun_l27_n353(x)
+ if (x < 1)
+ fun_l28_n752(x)
+ else
+ fun_l28_n677(x)
+ end
+end
+
+def fun_l27_n354(x)
+ if (x < 1)
+ fun_l28_n246(x)
+ else
+ fun_l28_n32(x)
+ end
+end
+
+def fun_l27_n355(x)
+ if (x < 1)
+ fun_l28_n969(x)
+ else
+ fun_l28_n933(x)
+ end
+end
+
+def fun_l27_n356(x)
+ if (x < 1)
+ fun_l28_n44(x)
+ else
+ fun_l28_n704(x)
+ end
+end
+
+def fun_l27_n357(x)
+ if (x < 1)
+ fun_l28_n863(x)
+ else
+ fun_l28_n324(x)
+ end
+end
+
+def fun_l27_n358(x)
+ if (x < 1)
+ fun_l28_n467(x)
+ else
+ fun_l28_n418(x)
+ end
+end
+
+def fun_l27_n359(x)
+ if (x < 1)
+ fun_l28_n222(x)
+ else
+ fun_l28_n138(x)
+ end
+end
+
+def fun_l27_n360(x)
+ if (x < 1)
+ fun_l28_n261(x)
+ else
+ fun_l28_n605(x)
+ end
+end
+
+def fun_l27_n361(x)
+ if (x < 1)
+ fun_l28_n470(x)
+ else
+ fun_l28_n519(x)
+ end
+end
+
+def fun_l27_n362(x)
+ if (x < 1)
+ fun_l28_n717(x)
+ else
+ fun_l28_n817(x)
+ end
+end
+
+def fun_l27_n363(x)
+ if (x < 1)
+ fun_l28_n591(x)
+ else
+ fun_l28_n537(x)
+ end
+end
+
+def fun_l27_n364(x)
+ if (x < 1)
+ fun_l28_n733(x)
+ else
+ fun_l28_n222(x)
+ end
+end
+
+def fun_l27_n365(x)
+ if (x < 1)
+ fun_l28_n137(x)
+ else
+ fun_l28_n225(x)
+ end
+end
+
+def fun_l27_n366(x)
+ if (x < 1)
+ fun_l28_n610(x)
+ else
+ fun_l28_n870(x)
+ end
+end
+
+def fun_l27_n367(x)
+ if (x < 1)
+ fun_l28_n697(x)
+ else
+ fun_l28_n866(x)
+ end
+end
+
+def fun_l27_n368(x)
+ if (x < 1)
+ fun_l28_n902(x)
+ else
+ fun_l28_n827(x)
+ end
+end
+
+def fun_l27_n369(x)
+ if (x < 1)
+ fun_l28_n769(x)
+ else
+ fun_l28_n238(x)
+ end
+end
+
+def fun_l27_n370(x)
+ if (x < 1)
+ fun_l28_n66(x)
+ else
+ fun_l28_n958(x)
+ end
+end
+
+def fun_l27_n371(x)
+ if (x < 1)
+ fun_l28_n847(x)
+ else
+ fun_l28_n177(x)
+ end
+end
+
+def fun_l27_n372(x)
+ if (x < 1)
+ fun_l28_n64(x)
+ else
+ fun_l28_n198(x)
+ end
+end
+
+def fun_l27_n373(x)
+ if (x < 1)
+ fun_l28_n36(x)
+ else
+ fun_l28_n282(x)
+ end
+end
+
+def fun_l27_n374(x)
+ if (x < 1)
+ fun_l28_n647(x)
+ else
+ fun_l28_n228(x)
+ end
+end
+
+def fun_l27_n375(x)
+ if (x < 1)
+ fun_l28_n737(x)
+ else
+ fun_l28_n689(x)
+ end
+end
+
+def fun_l27_n376(x)
+ if (x < 1)
+ fun_l28_n336(x)
+ else
+ fun_l28_n20(x)
+ end
+end
+
+def fun_l27_n377(x)
+ if (x < 1)
+ fun_l28_n859(x)
+ else
+ fun_l28_n661(x)
+ end
+end
+
+def fun_l27_n378(x)
+ if (x < 1)
+ fun_l28_n148(x)
+ else
+ fun_l28_n197(x)
+ end
+end
+
+def fun_l27_n379(x)
+ if (x < 1)
+ fun_l28_n986(x)
+ else
+ fun_l28_n441(x)
+ end
+end
+
+def fun_l27_n380(x)
+ if (x < 1)
+ fun_l28_n966(x)
+ else
+ fun_l28_n994(x)
+ end
+end
+
+def fun_l27_n381(x)
+ if (x < 1)
+ fun_l28_n546(x)
+ else
+ fun_l28_n687(x)
+ end
+end
+
+def fun_l27_n382(x)
+ if (x < 1)
+ fun_l28_n63(x)
+ else
+ fun_l28_n366(x)
+ end
+end
+
+def fun_l27_n383(x)
+ if (x < 1)
+ fun_l28_n146(x)
+ else
+ fun_l28_n96(x)
+ end
+end
+
+def fun_l27_n384(x)
+ if (x < 1)
+ fun_l28_n747(x)
+ else
+ fun_l28_n168(x)
+ end
+end
+
+def fun_l27_n385(x)
+ if (x < 1)
+ fun_l28_n556(x)
+ else
+ fun_l28_n194(x)
+ end
+end
+
+def fun_l27_n386(x)
+ if (x < 1)
+ fun_l28_n180(x)
+ else
+ fun_l28_n648(x)
+ end
+end
+
+def fun_l27_n387(x)
+ if (x < 1)
+ fun_l28_n898(x)
+ else
+ fun_l28_n499(x)
+ end
+end
+
+def fun_l27_n388(x)
+ if (x < 1)
+ fun_l28_n720(x)
+ else
+ fun_l28_n996(x)
+ end
+end
+
+def fun_l27_n389(x)
+ if (x < 1)
+ fun_l28_n743(x)
+ else
+ fun_l28_n781(x)
+ end
+end
+
+def fun_l27_n390(x)
+ if (x < 1)
+ fun_l28_n372(x)
+ else
+ fun_l28_n907(x)
+ end
+end
+
+def fun_l27_n391(x)
+ if (x < 1)
+ fun_l28_n893(x)
+ else
+ fun_l28_n911(x)
+ end
+end
+
+def fun_l27_n392(x)
+ if (x < 1)
+ fun_l28_n304(x)
+ else
+ fun_l28_n164(x)
+ end
+end
+
+def fun_l27_n393(x)
+ if (x < 1)
+ fun_l28_n212(x)
+ else
+ fun_l28_n575(x)
+ end
+end
+
+def fun_l27_n394(x)
+ if (x < 1)
+ fun_l28_n279(x)
+ else
+ fun_l28_n306(x)
+ end
+end
+
+def fun_l27_n395(x)
+ if (x < 1)
+ fun_l28_n662(x)
+ else
+ fun_l28_n838(x)
+ end
+end
+
+def fun_l27_n396(x)
+ if (x < 1)
+ fun_l28_n882(x)
+ else
+ fun_l28_n321(x)
+ end
+end
+
+def fun_l27_n397(x)
+ if (x < 1)
+ fun_l28_n996(x)
+ else
+ fun_l28_n170(x)
+ end
+end
+
+def fun_l27_n398(x)
+ if (x < 1)
+ fun_l28_n309(x)
+ else
+ fun_l28_n805(x)
+ end
+end
+
+def fun_l27_n399(x)
+ if (x < 1)
+ fun_l28_n584(x)
+ else
+ fun_l28_n304(x)
+ end
+end
+
+def fun_l27_n400(x)
+ if (x < 1)
+ fun_l28_n575(x)
+ else
+ fun_l28_n405(x)
+ end
+end
+
+def fun_l27_n401(x)
+ if (x < 1)
+ fun_l28_n507(x)
+ else
+ fun_l28_n773(x)
+ end
+end
+
+def fun_l27_n402(x)
+ if (x < 1)
+ fun_l28_n759(x)
+ else
+ fun_l28_n583(x)
+ end
+end
+
+def fun_l27_n403(x)
+ if (x < 1)
+ fun_l28_n689(x)
+ else
+ fun_l28_n511(x)
+ end
+end
+
+def fun_l27_n404(x)
+ if (x < 1)
+ fun_l28_n706(x)
+ else
+ fun_l28_n258(x)
+ end
+end
+
+def fun_l27_n405(x)
+ if (x < 1)
+ fun_l28_n736(x)
+ else
+ fun_l28_n482(x)
+ end
+end
+
+def fun_l27_n406(x)
+ if (x < 1)
+ fun_l28_n851(x)
+ else
+ fun_l28_n898(x)
+ end
+end
+
+def fun_l27_n407(x)
+ if (x < 1)
+ fun_l28_n86(x)
+ else
+ fun_l28_n913(x)
+ end
+end
+
+def fun_l27_n408(x)
+ if (x < 1)
+ fun_l28_n277(x)
+ else
+ fun_l28_n960(x)
+ end
+end
+
+def fun_l27_n409(x)
+ if (x < 1)
+ fun_l28_n137(x)
+ else
+ fun_l28_n789(x)
+ end
+end
+
+def fun_l27_n410(x)
+ if (x < 1)
+ fun_l28_n23(x)
+ else
+ fun_l28_n633(x)
+ end
+end
+
+def fun_l27_n411(x)
+ if (x < 1)
+ fun_l28_n246(x)
+ else
+ fun_l28_n560(x)
+ end
+end
+
+def fun_l27_n412(x)
+ if (x < 1)
+ fun_l28_n218(x)
+ else
+ fun_l28_n66(x)
+ end
+end
+
+def fun_l27_n413(x)
+ if (x < 1)
+ fun_l28_n680(x)
+ else
+ fun_l28_n9(x)
+ end
+end
+
+def fun_l27_n414(x)
+ if (x < 1)
+ fun_l28_n693(x)
+ else
+ fun_l28_n625(x)
+ end
+end
+
+def fun_l27_n415(x)
+ if (x < 1)
+ fun_l28_n560(x)
+ else
+ fun_l28_n739(x)
+ end
+end
+
+def fun_l27_n416(x)
+ if (x < 1)
+ fun_l28_n467(x)
+ else
+ fun_l28_n542(x)
+ end
+end
+
+def fun_l27_n417(x)
+ if (x < 1)
+ fun_l28_n364(x)
+ else
+ fun_l28_n468(x)
+ end
+end
+
+def fun_l27_n418(x)
+ if (x < 1)
+ fun_l28_n123(x)
+ else
+ fun_l28_n775(x)
+ end
+end
+
+def fun_l27_n419(x)
+ if (x < 1)
+ fun_l28_n17(x)
+ else
+ fun_l28_n875(x)
+ end
+end
+
+def fun_l27_n420(x)
+ if (x < 1)
+ fun_l28_n596(x)
+ else
+ fun_l28_n163(x)
+ end
+end
+
+def fun_l27_n421(x)
+ if (x < 1)
+ fun_l28_n638(x)
+ else
+ fun_l28_n426(x)
+ end
+end
+
+def fun_l27_n422(x)
+ if (x < 1)
+ fun_l28_n637(x)
+ else
+ fun_l28_n696(x)
+ end
+end
+
+def fun_l27_n423(x)
+ if (x < 1)
+ fun_l28_n299(x)
+ else
+ fun_l28_n218(x)
+ end
+end
+
+def fun_l27_n424(x)
+ if (x < 1)
+ fun_l28_n683(x)
+ else
+ fun_l28_n248(x)
+ end
+end
+
+def fun_l27_n425(x)
+ if (x < 1)
+ fun_l28_n272(x)
+ else
+ fun_l28_n359(x)
+ end
+end
+
+def fun_l27_n426(x)
+ if (x < 1)
+ fun_l28_n327(x)
+ else
+ fun_l28_n984(x)
+ end
+end
+
+def fun_l27_n427(x)
+ if (x < 1)
+ fun_l28_n912(x)
+ else
+ fun_l28_n393(x)
+ end
+end
+
+def fun_l27_n428(x)
+ if (x < 1)
+ fun_l28_n842(x)
+ else
+ fun_l28_n919(x)
+ end
+end
+
+def fun_l27_n429(x)
+ if (x < 1)
+ fun_l28_n721(x)
+ else
+ fun_l28_n36(x)
+ end
+end
+
+def fun_l27_n430(x)
+ if (x < 1)
+ fun_l28_n16(x)
+ else
+ fun_l28_n418(x)
+ end
+end
+
+def fun_l27_n431(x)
+ if (x < 1)
+ fun_l28_n747(x)
+ else
+ fun_l28_n132(x)
+ end
+end
+
+def fun_l27_n432(x)
+ if (x < 1)
+ fun_l28_n906(x)
+ else
+ fun_l28_n718(x)
+ end
+end
+
+def fun_l27_n433(x)
+ if (x < 1)
+ fun_l28_n508(x)
+ else
+ fun_l28_n862(x)
+ end
+end
+
+def fun_l27_n434(x)
+ if (x < 1)
+ fun_l28_n478(x)
+ else
+ fun_l28_n542(x)
+ end
+end
+
+def fun_l27_n435(x)
+ if (x < 1)
+ fun_l28_n186(x)
+ else
+ fun_l28_n976(x)
+ end
+end
+
+def fun_l27_n436(x)
+ if (x < 1)
+ fun_l28_n637(x)
+ else
+ fun_l28_n49(x)
+ end
+end
+
+def fun_l27_n437(x)
+ if (x < 1)
+ fun_l28_n242(x)
+ else
+ fun_l28_n774(x)
+ end
+end
+
+def fun_l27_n438(x)
+ if (x < 1)
+ fun_l28_n303(x)
+ else
+ fun_l28_n175(x)
+ end
+end
+
+def fun_l27_n439(x)
+ if (x < 1)
+ fun_l28_n851(x)
+ else
+ fun_l28_n908(x)
+ end
+end
+
+def fun_l27_n440(x)
+ if (x < 1)
+ fun_l28_n139(x)
+ else
+ fun_l28_n473(x)
+ end
+end
+
+def fun_l27_n441(x)
+ if (x < 1)
+ fun_l28_n70(x)
+ else
+ fun_l28_n406(x)
+ end
+end
+
+def fun_l27_n442(x)
+ if (x < 1)
+ fun_l28_n368(x)
+ else
+ fun_l28_n624(x)
+ end
+end
+
+def fun_l27_n443(x)
+ if (x < 1)
+ fun_l28_n900(x)
+ else
+ fun_l28_n173(x)
+ end
+end
+
+def fun_l27_n444(x)
+ if (x < 1)
+ fun_l28_n646(x)
+ else
+ fun_l28_n733(x)
+ end
+end
+
+def fun_l27_n445(x)
+ if (x < 1)
+ fun_l28_n859(x)
+ else
+ fun_l28_n100(x)
+ end
+end
+
+def fun_l27_n446(x)
+ if (x < 1)
+ fun_l28_n418(x)
+ else
+ fun_l28_n765(x)
+ end
+end
+
+def fun_l27_n447(x)
+ if (x < 1)
+ fun_l28_n204(x)
+ else
+ fun_l28_n541(x)
+ end
+end
+
+def fun_l27_n448(x)
+ if (x < 1)
+ fun_l28_n192(x)
+ else
+ fun_l28_n414(x)
+ end
+end
+
+def fun_l27_n449(x)
+ if (x < 1)
+ fun_l28_n904(x)
+ else
+ fun_l28_n247(x)
+ end
+end
+
+def fun_l27_n450(x)
+ if (x < 1)
+ fun_l28_n528(x)
+ else
+ fun_l28_n24(x)
+ end
+end
+
+def fun_l27_n451(x)
+ if (x < 1)
+ fun_l28_n312(x)
+ else
+ fun_l28_n48(x)
+ end
+end
+
+def fun_l27_n452(x)
+ if (x < 1)
+ fun_l28_n169(x)
+ else
+ fun_l28_n37(x)
+ end
+end
+
+def fun_l27_n453(x)
+ if (x < 1)
+ fun_l28_n713(x)
+ else
+ fun_l28_n168(x)
+ end
+end
+
+def fun_l27_n454(x)
+ if (x < 1)
+ fun_l28_n748(x)
+ else
+ fun_l28_n213(x)
+ end
+end
+
+def fun_l27_n455(x)
+ if (x < 1)
+ fun_l28_n157(x)
+ else
+ fun_l28_n444(x)
+ end
+end
+
+def fun_l27_n456(x)
+ if (x < 1)
+ fun_l28_n32(x)
+ else
+ fun_l28_n475(x)
+ end
+end
+
+def fun_l27_n457(x)
+ if (x < 1)
+ fun_l28_n252(x)
+ else
+ fun_l28_n730(x)
+ end
+end
+
+def fun_l27_n458(x)
+ if (x < 1)
+ fun_l28_n261(x)
+ else
+ fun_l28_n576(x)
+ end
+end
+
+def fun_l27_n459(x)
+ if (x < 1)
+ fun_l28_n859(x)
+ else
+ fun_l28_n401(x)
+ end
+end
+
+def fun_l27_n460(x)
+ if (x < 1)
+ fun_l28_n394(x)
+ else
+ fun_l28_n10(x)
+ end
+end
+
+def fun_l27_n461(x)
+ if (x < 1)
+ fun_l28_n89(x)
+ else
+ fun_l28_n402(x)
+ end
+end
+
+def fun_l27_n462(x)
+ if (x < 1)
+ fun_l28_n100(x)
+ else
+ fun_l28_n207(x)
+ end
+end
+
+def fun_l27_n463(x)
+ if (x < 1)
+ fun_l28_n907(x)
+ else
+ fun_l28_n354(x)
+ end
+end
+
+def fun_l27_n464(x)
+ if (x < 1)
+ fun_l28_n612(x)
+ else
+ fun_l28_n31(x)
+ end
+end
+
+def fun_l27_n465(x)
+ if (x < 1)
+ fun_l28_n622(x)
+ else
+ fun_l28_n342(x)
+ end
+end
+
+def fun_l27_n466(x)
+ if (x < 1)
+ fun_l28_n373(x)
+ else
+ fun_l28_n831(x)
+ end
+end
+
+def fun_l27_n467(x)
+ if (x < 1)
+ fun_l28_n858(x)
+ else
+ fun_l28_n233(x)
+ end
+end
+
+def fun_l27_n468(x)
+ if (x < 1)
+ fun_l28_n104(x)
+ else
+ fun_l28_n918(x)
+ end
+end
+
+def fun_l27_n469(x)
+ if (x < 1)
+ fun_l28_n778(x)
+ else
+ fun_l28_n758(x)
+ end
+end
+
+def fun_l27_n470(x)
+ if (x < 1)
+ fun_l28_n695(x)
+ else
+ fun_l28_n217(x)
+ end
+end
+
+def fun_l27_n471(x)
+ if (x < 1)
+ fun_l28_n781(x)
+ else
+ fun_l28_n584(x)
+ end
+end
+
+def fun_l27_n472(x)
+ if (x < 1)
+ fun_l28_n883(x)
+ else
+ fun_l28_n152(x)
+ end
+end
+
+def fun_l27_n473(x)
+ if (x < 1)
+ fun_l28_n525(x)
+ else
+ fun_l28_n369(x)
+ end
+end
+
+def fun_l27_n474(x)
+ if (x < 1)
+ fun_l28_n42(x)
+ else
+ fun_l28_n299(x)
+ end
+end
+
+def fun_l27_n475(x)
+ if (x < 1)
+ fun_l28_n174(x)
+ else
+ fun_l28_n664(x)
+ end
+end
+
+def fun_l27_n476(x)
+ if (x < 1)
+ fun_l28_n489(x)
+ else
+ fun_l28_n296(x)
+ end
+end
+
+def fun_l27_n477(x)
+ if (x < 1)
+ fun_l28_n725(x)
+ else
+ fun_l28_n384(x)
+ end
+end
+
+def fun_l27_n478(x)
+ if (x < 1)
+ fun_l28_n138(x)
+ else
+ fun_l28_n812(x)
+ end
+end
+
+def fun_l27_n479(x)
+ if (x < 1)
+ fun_l28_n161(x)
+ else
+ fun_l28_n786(x)
+ end
+end
+
+def fun_l27_n480(x)
+ if (x < 1)
+ fun_l28_n751(x)
+ else
+ fun_l28_n91(x)
+ end
+end
+
+def fun_l27_n481(x)
+ if (x < 1)
+ fun_l28_n434(x)
+ else
+ fun_l28_n507(x)
+ end
+end
+
+def fun_l27_n482(x)
+ if (x < 1)
+ fun_l28_n101(x)
+ else
+ fun_l28_n809(x)
+ end
+end
+
+def fun_l27_n483(x)
+ if (x < 1)
+ fun_l28_n79(x)
+ else
+ fun_l28_n565(x)
+ end
+end
+
+def fun_l27_n484(x)
+ if (x < 1)
+ fun_l28_n681(x)
+ else
+ fun_l28_n390(x)
+ end
+end
+
+def fun_l27_n485(x)
+ if (x < 1)
+ fun_l28_n950(x)
+ else
+ fun_l28_n262(x)
+ end
+end
+
+def fun_l27_n486(x)
+ if (x < 1)
+ fun_l28_n188(x)
+ else
+ fun_l28_n731(x)
+ end
+end
+
+def fun_l27_n487(x)
+ if (x < 1)
+ fun_l28_n724(x)
+ else
+ fun_l28_n806(x)
+ end
+end
+
+def fun_l27_n488(x)
+ if (x < 1)
+ fun_l28_n680(x)
+ else
+ fun_l28_n475(x)
+ end
+end
+
+def fun_l27_n489(x)
+ if (x < 1)
+ fun_l28_n662(x)
+ else
+ fun_l28_n242(x)
+ end
+end
+
+def fun_l27_n490(x)
+ if (x < 1)
+ fun_l28_n578(x)
+ else
+ fun_l28_n534(x)
+ end
+end
+
+def fun_l27_n491(x)
+ if (x < 1)
+ fun_l28_n173(x)
+ else
+ fun_l28_n239(x)
+ end
+end
+
+def fun_l27_n492(x)
+ if (x < 1)
+ fun_l28_n724(x)
+ else
+ fun_l28_n579(x)
+ end
+end
+
+def fun_l27_n493(x)
+ if (x < 1)
+ fun_l28_n449(x)
+ else
+ fun_l28_n44(x)
+ end
+end
+
+def fun_l27_n494(x)
+ if (x < 1)
+ fun_l28_n180(x)
+ else
+ fun_l28_n836(x)
+ end
+end
+
+def fun_l27_n495(x)
+ if (x < 1)
+ fun_l28_n232(x)
+ else
+ fun_l28_n371(x)
+ end
+end
+
+def fun_l27_n496(x)
+ if (x < 1)
+ fun_l28_n558(x)
+ else
+ fun_l28_n904(x)
+ end
+end
+
+def fun_l27_n497(x)
+ if (x < 1)
+ fun_l28_n324(x)
+ else
+ fun_l28_n85(x)
+ end
+end
+
+def fun_l27_n498(x)
+ if (x < 1)
+ fun_l28_n272(x)
+ else
+ fun_l28_n469(x)
+ end
+end
+
+def fun_l27_n499(x)
+ if (x < 1)
+ fun_l28_n232(x)
+ else
+ fun_l28_n899(x)
+ end
+end
+
+def fun_l27_n500(x)
+ if (x < 1)
+ fun_l28_n654(x)
+ else
+ fun_l28_n390(x)
+ end
+end
+
+def fun_l27_n501(x)
+ if (x < 1)
+ fun_l28_n84(x)
+ else
+ fun_l28_n74(x)
+ end
+end
+
+def fun_l27_n502(x)
+ if (x < 1)
+ fun_l28_n799(x)
+ else
+ fun_l28_n224(x)
+ end
+end
+
+def fun_l27_n503(x)
+ if (x < 1)
+ fun_l28_n635(x)
+ else
+ fun_l28_n770(x)
+ end
+end
+
+def fun_l27_n504(x)
+ if (x < 1)
+ fun_l28_n734(x)
+ else
+ fun_l28_n451(x)
+ end
+end
+
+def fun_l27_n505(x)
+ if (x < 1)
+ fun_l28_n340(x)
+ else
+ fun_l28_n318(x)
+ end
+end
+
+def fun_l27_n506(x)
+ if (x < 1)
+ fun_l28_n521(x)
+ else
+ fun_l28_n590(x)
+ end
+end
+
+def fun_l27_n507(x)
+ if (x < 1)
+ fun_l28_n727(x)
+ else
+ fun_l28_n825(x)
+ end
+end
+
+def fun_l27_n508(x)
+ if (x < 1)
+ fun_l28_n923(x)
+ else
+ fun_l28_n413(x)
+ end
+end
+
+def fun_l27_n509(x)
+ if (x < 1)
+ fun_l28_n825(x)
+ else
+ fun_l28_n235(x)
+ end
+end
+
+def fun_l27_n510(x)
+ if (x < 1)
+ fun_l28_n212(x)
+ else
+ fun_l28_n509(x)
+ end
+end
+
+def fun_l27_n511(x)
+ if (x < 1)
+ fun_l28_n6(x)
+ else
+ fun_l28_n16(x)
+ end
+end
+
+def fun_l27_n512(x)
+ if (x < 1)
+ fun_l28_n409(x)
+ else
+ fun_l28_n473(x)
+ end
+end
+
+def fun_l27_n513(x)
+ if (x < 1)
+ fun_l28_n220(x)
+ else
+ fun_l28_n383(x)
+ end
+end
+
+def fun_l27_n514(x)
+ if (x < 1)
+ fun_l28_n338(x)
+ else
+ fun_l28_n32(x)
+ end
+end
+
+def fun_l27_n515(x)
+ if (x < 1)
+ fun_l28_n218(x)
+ else
+ fun_l28_n307(x)
+ end
+end
+
+def fun_l27_n516(x)
+ if (x < 1)
+ fun_l28_n591(x)
+ else
+ fun_l28_n545(x)
+ end
+end
+
+def fun_l27_n517(x)
+ if (x < 1)
+ fun_l28_n405(x)
+ else
+ fun_l28_n241(x)
+ end
+end
+
+def fun_l27_n518(x)
+ if (x < 1)
+ fun_l28_n545(x)
+ else
+ fun_l28_n215(x)
+ end
+end
+
+def fun_l27_n519(x)
+ if (x < 1)
+ fun_l28_n989(x)
+ else
+ fun_l28_n480(x)
+ end
+end
+
+def fun_l27_n520(x)
+ if (x < 1)
+ fun_l28_n479(x)
+ else
+ fun_l28_n869(x)
+ end
+end
+
+def fun_l27_n521(x)
+ if (x < 1)
+ fun_l28_n376(x)
+ else
+ fun_l28_n216(x)
+ end
+end
+
+def fun_l27_n522(x)
+ if (x < 1)
+ fun_l28_n74(x)
+ else
+ fun_l28_n370(x)
+ end
+end
+
+def fun_l27_n523(x)
+ if (x < 1)
+ fun_l28_n665(x)
+ else
+ fun_l28_n982(x)
+ end
+end
+
+def fun_l27_n524(x)
+ if (x < 1)
+ fun_l28_n412(x)
+ else
+ fun_l28_n515(x)
+ end
+end
+
+def fun_l27_n525(x)
+ if (x < 1)
+ fun_l28_n421(x)
+ else
+ fun_l28_n718(x)
+ end
+end
+
+def fun_l27_n526(x)
+ if (x < 1)
+ fun_l28_n914(x)
+ else
+ fun_l28_n297(x)
+ end
+end
+
+def fun_l27_n527(x)
+ if (x < 1)
+ fun_l28_n134(x)
+ else
+ fun_l28_n602(x)
+ end
+end
+
+def fun_l27_n528(x)
+ if (x < 1)
+ fun_l28_n0(x)
+ else
+ fun_l28_n23(x)
+ end
+end
+
+def fun_l27_n529(x)
+ if (x < 1)
+ fun_l28_n610(x)
+ else
+ fun_l28_n736(x)
+ end
+end
+
+def fun_l27_n530(x)
+ if (x < 1)
+ fun_l28_n350(x)
+ else
+ fun_l28_n51(x)
+ end
+end
+
+def fun_l27_n531(x)
+ if (x < 1)
+ fun_l28_n648(x)
+ else
+ fun_l28_n382(x)
+ end
+end
+
+def fun_l27_n532(x)
+ if (x < 1)
+ fun_l28_n432(x)
+ else
+ fun_l28_n872(x)
+ end
+end
+
+def fun_l27_n533(x)
+ if (x < 1)
+ fun_l28_n747(x)
+ else
+ fun_l28_n588(x)
+ end
+end
+
+def fun_l27_n534(x)
+ if (x < 1)
+ fun_l28_n763(x)
+ else
+ fun_l28_n846(x)
+ end
+end
+
+def fun_l27_n535(x)
+ if (x < 1)
+ fun_l28_n300(x)
+ else
+ fun_l28_n26(x)
+ end
+end
+
+def fun_l27_n536(x)
+ if (x < 1)
+ fun_l28_n851(x)
+ else
+ fun_l28_n907(x)
+ end
+end
+
+def fun_l27_n537(x)
+ if (x < 1)
+ fun_l28_n759(x)
+ else
+ fun_l28_n927(x)
+ end
+end
+
+def fun_l27_n538(x)
+ if (x < 1)
+ fun_l28_n188(x)
+ else
+ fun_l28_n199(x)
+ end
+end
+
+def fun_l27_n539(x)
+ if (x < 1)
+ fun_l28_n496(x)
+ else
+ fun_l28_n664(x)
+ end
+end
+
+def fun_l27_n540(x)
+ if (x < 1)
+ fun_l28_n595(x)
+ else
+ fun_l28_n651(x)
+ end
+end
+
+def fun_l27_n541(x)
+ if (x < 1)
+ fun_l28_n678(x)
+ else
+ fun_l28_n172(x)
+ end
+end
+
+def fun_l27_n542(x)
+ if (x < 1)
+ fun_l28_n37(x)
+ else
+ fun_l28_n255(x)
+ end
+end
+
+def fun_l27_n543(x)
+ if (x < 1)
+ fun_l28_n58(x)
+ else
+ fun_l28_n367(x)
+ end
+end
+
+def fun_l27_n544(x)
+ if (x < 1)
+ fun_l28_n275(x)
+ else
+ fun_l28_n925(x)
+ end
+end
+
+def fun_l27_n545(x)
+ if (x < 1)
+ fun_l28_n469(x)
+ else
+ fun_l28_n774(x)
+ end
+end
+
+def fun_l27_n546(x)
+ if (x < 1)
+ fun_l28_n508(x)
+ else
+ fun_l28_n267(x)
+ end
+end
+
+def fun_l27_n547(x)
+ if (x < 1)
+ fun_l28_n288(x)
+ else
+ fun_l28_n64(x)
+ end
+end
+
+def fun_l27_n548(x)
+ if (x < 1)
+ fun_l28_n941(x)
+ else
+ fun_l28_n632(x)
+ end
+end
+
+def fun_l27_n549(x)
+ if (x < 1)
+ fun_l28_n816(x)
+ else
+ fun_l28_n551(x)
+ end
+end
+
+def fun_l27_n550(x)
+ if (x < 1)
+ fun_l28_n848(x)
+ else
+ fun_l28_n778(x)
+ end
+end
+
+def fun_l27_n551(x)
+ if (x < 1)
+ fun_l28_n273(x)
+ else
+ fun_l28_n846(x)
+ end
+end
+
+def fun_l27_n552(x)
+ if (x < 1)
+ fun_l28_n18(x)
+ else
+ fun_l28_n530(x)
+ end
+end
+
+def fun_l27_n553(x)
+ if (x < 1)
+ fun_l28_n673(x)
+ else
+ fun_l28_n824(x)
+ end
+end
+
+def fun_l27_n554(x)
+ if (x < 1)
+ fun_l28_n376(x)
+ else
+ fun_l28_n32(x)
+ end
+end
+
+def fun_l27_n555(x)
+ if (x < 1)
+ fun_l28_n500(x)
+ else
+ fun_l28_n389(x)
+ end
+end
+
+def fun_l27_n556(x)
+ if (x < 1)
+ fun_l28_n712(x)
+ else
+ fun_l28_n729(x)
+ end
+end
+
+def fun_l27_n557(x)
+ if (x < 1)
+ fun_l28_n951(x)
+ else
+ fun_l28_n846(x)
+ end
+end
+
+def fun_l27_n558(x)
+ if (x < 1)
+ fun_l28_n269(x)
+ else
+ fun_l28_n538(x)
+ end
+end
+
+def fun_l27_n559(x)
+ if (x < 1)
+ fun_l28_n72(x)
+ else
+ fun_l28_n711(x)
+ end
+end
+
+def fun_l27_n560(x)
+ if (x < 1)
+ fun_l28_n510(x)
+ else
+ fun_l28_n718(x)
+ end
+end
+
+def fun_l27_n561(x)
+ if (x < 1)
+ fun_l28_n123(x)
+ else
+ fun_l28_n983(x)
+ end
+end
+
+def fun_l27_n562(x)
+ if (x < 1)
+ fun_l28_n486(x)
+ else
+ fun_l28_n796(x)
+ end
+end
+
+def fun_l27_n563(x)
+ if (x < 1)
+ fun_l28_n925(x)
+ else
+ fun_l28_n499(x)
+ end
+end
+
+def fun_l27_n564(x)
+ if (x < 1)
+ fun_l28_n811(x)
+ else
+ fun_l28_n604(x)
+ end
+end
+
+def fun_l27_n565(x)
+ if (x < 1)
+ fun_l28_n685(x)
+ else
+ fun_l28_n721(x)
+ end
+end
+
+def fun_l27_n566(x)
+ if (x < 1)
+ fun_l28_n946(x)
+ else
+ fun_l28_n890(x)
+ end
+end
+
+def fun_l27_n567(x)
+ if (x < 1)
+ fun_l28_n646(x)
+ else
+ fun_l28_n2(x)
+ end
+end
+
+def fun_l27_n568(x)
+ if (x < 1)
+ fun_l28_n570(x)
+ else
+ fun_l28_n427(x)
+ end
+end
+
+def fun_l27_n569(x)
+ if (x < 1)
+ fun_l28_n435(x)
+ else
+ fun_l28_n877(x)
+ end
+end
+
+def fun_l27_n570(x)
+ if (x < 1)
+ fun_l28_n67(x)
+ else
+ fun_l28_n879(x)
+ end
+end
+
+def fun_l27_n571(x)
+ if (x < 1)
+ fun_l28_n278(x)
+ else
+ fun_l28_n90(x)
+ end
+end
+
+def fun_l27_n572(x)
+ if (x < 1)
+ fun_l28_n748(x)
+ else
+ fun_l28_n202(x)
+ end
+end
+
+def fun_l27_n573(x)
+ if (x < 1)
+ fun_l28_n795(x)
+ else
+ fun_l28_n862(x)
+ end
+end
+
+def fun_l27_n574(x)
+ if (x < 1)
+ fun_l28_n208(x)
+ else
+ fun_l28_n979(x)
+ end
+end
+
+def fun_l27_n575(x)
+ if (x < 1)
+ fun_l28_n134(x)
+ else
+ fun_l28_n208(x)
+ end
+end
+
+def fun_l27_n576(x)
+ if (x < 1)
+ fun_l28_n591(x)
+ else
+ fun_l28_n400(x)
+ end
+end
+
+def fun_l27_n577(x)
+ if (x < 1)
+ fun_l28_n579(x)
+ else
+ fun_l28_n675(x)
+ end
+end
+
+def fun_l27_n578(x)
+ if (x < 1)
+ fun_l28_n186(x)
+ else
+ fun_l28_n643(x)
+ end
+end
+
+def fun_l27_n579(x)
+ if (x < 1)
+ fun_l28_n974(x)
+ else
+ fun_l28_n716(x)
+ end
+end
+
+def fun_l27_n580(x)
+ if (x < 1)
+ fun_l28_n168(x)
+ else
+ fun_l28_n10(x)
+ end
+end
+
+def fun_l27_n581(x)
+ if (x < 1)
+ fun_l28_n124(x)
+ else
+ fun_l28_n657(x)
+ end
+end
+
+def fun_l27_n582(x)
+ if (x < 1)
+ fun_l28_n240(x)
+ else
+ fun_l28_n335(x)
+ end
+end
+
+def fun_l27_n583(x)
+ if (x < 1)
+ fun_l28_n346(x)
+ else
+ fun_l28_n170(x)
+ end
+end
+
+def fun_l27_n584(x)
+ if (x < 1)
+ fun_l28_n854(x)
+ else
+ fun_l28_n681(x)
+ end
+end
+
+def fun_l27_n585(x)
+ if (x < 1)
+ fun_l28_n515(x)
+ else
+ fun_l28_n884(x)
+ end
+end
+
+def fun_l27_n586(x)
+ if (x < 1)
+ fun_l28_n901(x)
+ else
+ fun_l28_n12(x)
+ end
+end
+
+def fun_l27_n587(x)
+ if (x < 1)
+ fun_l28_n300(x)
+ else
+ fun_l28_n205(x)
+ end
+end
+
+def fun_l27_n588(x)
+ if (x < 1)
+ fun_l28_n52(x)
+ else
+ fun_l28_n823(x)
+ end
+end
+
+def fun_l27_n589(x)
+ if (x < 1)
+ fun_l28_n170(x)
+ else
+ fun_l28_n588(x)
+ end
+end
+
+def fun_l27_n590(x)
+ if (x < 1)
+ fun_l28_n777(x)
+ else
+ fun_l28_n232(x)
+ end
+end
+
+def fun_l27_n591(x)
+ if (x < 1)
+ fun_l28_n234(x)
+ else
+ fun_l28_n552(x)
+ end
+end
+
+def fun_l27_n592(x)
+ if (x < 1)
+ fun_l28_n83(x)
+ else
+ fun_l28_n736(x)
+ end
+end
+
+def fun_l27_n593(x)
+ if (x < 1)
+ fun_l28_n623(x)
+ else
+ fun_l28_n663(x)
+ end
+end
+
+def fun_l27_n594(x)
+ if (x < 1)
+ fun_l28_n137(x)
+ else
+ fun_l28_n858(x)
+ end
+end
+
+def fun_l27_n595(x)
+ if (x < 1)
+ fun_l28_n238(x)
+ else
+ fun_l28_n11(x)
+ end
+end
+
+def fun_l27_n596(x)
+ if (x < 1)
+ fun_l28_n692(x)
+ else
+ fun_l28_n815(x)
+ end
+end
+
+def fun_l27_n597(x)
+ if (x < 1)
+ fun_l28_n259(x)
+ else
+ fun_l28_n535(x)
+ end
+end
+
+def fun_l27_n598(x)
+ if (x < 1)
+ fun_l28_n135(x)
+ else
+ fun_l28_n567(x)
+ end
+end
+
+def fun_l27_n599(x)
+ if (x < 1)
+ fun_l28_n725(x)
+ else
+ fun_l28_n393(x)
+ end
+end
+
+def fun_l27_n600(x)
+ if (x < 1)
+ fun_l28_n790(x)
+ else
+ fun_l28_n478(x)
+ end
+end
+
+def fun_l27_n601(x)
+ if (x < 1)
+ fun_l28_n248(x)
+ else
+ fun_l28_n62(x)
+ end
+end
+
+def fun_l27_n602(x)
+ if (x < 1)
+ fun_l28_n790(x)
+ else
+ fun_l28_n854(x)
+ end
+end
+
+def fun_l27_n603(x)
+ if (x < 1)
+ fun_l28_n345(x)
+ else
+ fun_l28_n795(x)
+ end
+end
+
+def fun_l27_n604(x)
+ if (x < 1)
+ fun_l28_n689(x)
+ else
+ fun_l28_n357(x)
+ end
+end
+
+def fun_l27_n605(x)
+ if (x < 1)
+ fun_l28_n314(x)
+ else
+ fun_l28_n886(x)
+ end
+end
+
+def fun_l27_n606(x)
+ if (x < 1)
+ fun_l28_n401(x)
+ else
+ fun_l28_n688(x)
+ end
+end
+
+def fun_l27_n607(x)
+ if (x < 1)
+ fun_l28_n386(x)
+ else
+ fun_l28_n126(x)
+ end
+end
+
+def fun_l27_n608(x)
+ if (x < 1)
+ fun_l28_n232(x)
+ else
+ fun_l28_n387(x)
+ end
+end
+
+def fun_l27_n609(x)
+ if (x < 1)
+ fun_l28_n938(x)
+ else
+ fun_l28_n657(x)
+ end
+end
+
+def fun_l27_n610(x)
+ if (x < 1)
+ fun_l28_n40(x)
+ else
+ fun_l28_n141(x)
+ end
+end
+
+def fun_l27_n611(x)
+ if (x < 1)
+ fun_l28_n909(x)
+ else
+ fun_l28_n265(x)
+ end
+end
+
+def fun_l27_n612(x)
+ if (x < 1)
+ fun_l28_n486(x)
+ else
+ fun_l28_n470(x)
+ end
+end
+
+def fun_l27_n613(x)
+ if (x < 1)
+ fun_l28_n959(x)
+ else
+ fun_l28_n793(x)
+ end
+end
+
+def fun_l27_n614(x)
+ if (x < 1)
+ fun_l28_n422(x)
+ else
+ fun_l28_n246(x)
+ end
+end
+
+def fun_l27_n615(x)
+ if (x < 1)
+ fun_l28_n860(x)
+ else
+ fun_l28_n315(x)
+ end
+end
+
+def fun_l27_n616(x)
+ if (x < 1)
+ fun_l28_n529(x)
+ else
+ fun_l28_n647(x)
+ end
+end
+
+def fun_l27_n617(x)
+ if (x < 1)
+ fun_l28_n860(x)
+ else
+ fun_l28_n860(x)
+ end
+end
+
+def fun_l27_n618(x)
+ if (x < 1)
+ fun_l28_n147(x)
+ else
+ fun_l28_n814(x)
+ end
+end
+
+def fun_l27_n619(x)
+ if (x < 1)
+ fun_l28_n828(x)
+ else
+ fun_l28_n854(x)
+ end
+end
+
+def fun_l27_n620(x)
+ if (x < 1)
+ fun_l28_n464(x)
+ else
+ fun_l28_n838(x)
+ end
+end
+
+def fun_l27_n621(x)
+ if (x < 1)
+ fun_l28_n89(x)
+ else
+ fun_l28_n884(x)
+ end
+end
+
+def fun_l27_n622(x)
+ if (x < 1)
+ fun_l28_n933(x)
+ else
+ fun_l28_n889(x)
+ end
+end
+
+def fun_l27_n623(x)
+ if (x < 1)
+ fun_l28_n638(x)
+ else
+ fun_l28_n246(x)
+ end
+end
+
+def fun_l27_n624(x)
+ if (x < 1)
+ fun_l28_n724(x)
+ else
+ fun_l28_n305(x)
+ end
+end
+
+def fun_l27_n625(x)
+ if (x < 1)
+ fun_l28_n927(x)
+ else
+ fun_l28_n772(x)
+ end
+end
+
+def fun_l27_n626(x)
+ if (x < 1)
+ fun_l28_n612(x)
+ else
+ fun_l28_n953(x)
+ end
+end
+
+def fun_l27_n627(x)
+ if (x < 1)
+ fun_l28_n694(x)
+ else
+ fun_l28_n529(x)
+ end
+end
+
+def fun_l27_n628(x)
+ if (x < 1)
+ fun_l28_n136(x)
+ else
+ fun_l28_n977(x)
+ end
+end
+
+def fun_l27_n629(x)
+ if (x < 1)
+ fun_l28_n108(x)
+ else
+ fun_l28_n940(x)
+ end
+end
+
+def fun_l27_n630(x)
+ if (x < 1)
+ fun_l28_n773(x)
+ else
+ fun_l28_n62(x)
+ end
+end
+
+def fun_l27_n631(x)
+ if (x < 1)
+ fun_l28_n531(x)
+ else
+ fun_l28_n68(x)
+ end
+end
+
+def fun_l27_n632(x)
+ if (x < 1)
+ fun_l28_n910(x)
+ else
+ fun_l28_n638(x)
+ end
+end
+
+def fun_l27_n633(x)
+ if (x < 1)
+ fun_l28_n943(x)
+ else
+ fun_l28_n530(x)
+ end
+end
+
+def fun_l27_n634(x)
+ if (x < 1)
+ fun_l28_n161(x)
+ else
+ fun_l28_n842(x)
+ end
+end
+
+def fun_l27_n635(x)
+ if (x < 1)
+ fun_l28_n252(x)
+ else
+ fun_l28_n659(x)
+ end
+end
+
+def fun_l27_n636(x)
+ if (x < 1)
+ fun_l28_n739(x)
+ else
+ fun_l28_n116(x)
+ end
+end
+
+def fun_l27_n637(x)
+ if (x < 1)
+ fun_l28_n528(x)
+ else
+ fun_l28_n451(x)
+ end
+end
+
+def fun_l27_n638(x)
+ if (x < 1)
+ fun_l28_n772(x)
+ else
+ fun_l28_n163(x)
+ end
+end
+
+def fun_l27_n639(x)
+ if (x < 1)
+ fun_l28_n300(x)
+ else
+ fun_l28_n174(x)
+ end
+end
+
+def fun_l27_n640(x)
+ if (x < 1)
+ fun_l28_n967(x)
+ else
+ fun_l28_n437(x)
+ end
+end
+
+def fun_l27_n641(x)
+ if (x < 1)
+ fun_l28_n716(x)
+ else
+ fun_l28_n855(x)
+ end
+end
+
+def fun_l27_n642(x)
+ if (x < 1)
+ fun_l28_n510(x)
+ else
+ fun_l28_n958(x)
+ end
+end
+
+def fun_l27_n643(x)
+ if (x < 1)
+ fun_l28_n57(x)
+ else
+ fun_l28_n347(x)
+ end
+end
+
+def fun_l27_n644(x)
+ if (x < 1)
+ fun_l28_n145(x)
+ else
+ fun_l28_n652(x)
+ end
+end
+
+def fun_l27_n645(x)
+ if (x < 1)
+ fun_l28_n730(x)
+ else
+ fun_l28_n388(x)
+ end
+end
+
+def fun_l27_n646(x)
+ if (x < 1)
+ fun_l28_n409(x)
+ else
+ fun_l28_n394(x)
+ end
+end
+
+def fun_l27_n647(x)
+ if (x < 1)
+ fun_l28_n484(x)
+ else
+ fun_l28_n754(x)
+ end
+end
+
+def fun_l27_n648(x)
+ if (x < 1)
+ fun_l28_n888(x)
+ else
+ fun_l28_n229(x)
+ end
+end
+
+def fun_l27_n649(x)
+ if (x < 1)
+ fun_l28_n1(x)
+ else
+ fun_l28_n995(x)
+ end
+end
+
+def fun_l27_n650(x)
+ if (x < 1)
+ fun_l28_n992(x)
+ else
+ fun_l28_n522(x)
+ end
+end
+
+def fun_l27_n651(x)
+ if (x < 1)
+ fun_l28_n69(x)
+ else
+ fun_l28_n696(x)
+ end
+end
+
+def fun_l27_n652(x)
+ if (x < 1)
+ fun_l28_n496(x)
+ else
+ fun_l28_n47(x)
+ end
+end
+
+def fun_l27_n653(x)
+ if (x < 1)
+ fun_l28_n176(x)
+ else
+ fun_l28_n830(x)
+ end
+end
+
+def fun_l27_n654(x)
+ if (x < 1)
+ fun_l28_n277(x)
+ else
+ fun_l28_n311(x)
+ end
+end
+
+def fun_l27_n655(x)
+ if (x < 1)
+ fun_l28_n994(x)
+ else
+ fun_l28_n518(x)
+ end
+end
+
+def fun_l27_n656(x)
+ if (x < 1)
+ fun_l28_n238(x)
+ else
+ fun_l28_n99(x)
+ end
+end
+
+def fun_l27_n657(x)
+ if (x < 1)
+ fun_l28_n636(x)
+ else
+ fun_l28_n734(x)
+ end
+end
+
+def fun_l27_n658(x)
+ if (x < 1)
+ fun_l28_n796(x)
+ else
+ fun_l28_n109(x)
+ end
+end
+
+def fun_l27_n659(x)
+ if (x < 1)
+ fun_l28_n271(x)
+ else
+ fun_l28_n348(x)
+ end
+end
+
+def fun_l27_n660(x)
+ if (x < 1)
+ fun_l28_n847(x)
+ else
+ fun_l28_n926(x)
+ end
+end
+
+def fun_l27_n661(x)
+ if (x < 1)
+ fun_l28_n559(x)
+ else
+ fun_l28_n636(x)
+ end
+end
+
+def fun_l27_n662(x)
+ if (x < 1)
+ fun_l28_n528(x)
+ else
+ fun_l28_n0(x)
+ end
+end
+
+def fun_l27_n663(x)
+ if (x < 1)
+ fun_l28_n835(x)
+ else
+ fun_l28_n41(x)
+ end
+end
+
+def fun_l27_n664(x)
+ if (x < 1)
+ fun_l28_n135(x)
+ else
+ fun_l28_n356(x)
+ end
+end
+
+def fun_l27_n665(x)
+ if (x < 1)
+ fun_l28_n825(x)
+ else
+ fun_l28_n55(x)
+ end
+end
+
+def fun_l27_n666(x)
+ if (x < 1)
+ fun_l28_n659(x)
+ else
+ fun_l28_n384(x)
+ end
+end
+
+def fun_l27_n667(x)
+ if (x < 1)
+ fun_l28_n604(x)
+ else
+ fun_l28_n870(x)
+ end
+end
+
+def fun_l27_n668(x)
+ if (x < 1)
+ fun_l28_n136(x)
+ else
+ fun_l28_n343(x)
+ end
+end
+
+def fun_l27_n669(x)
+ if (x < 1)
+ fun_l28_n206(x)
+ else
+ fun_l28_n341(x)
+ end
+end
+
+def fun_l27_n670(x)
+ if (x < 1)
+ fun_l28_n947(x)
+ else
+ fun_l28_n926(x)
+ end
+end
+
+def fun_l27_n671(x)
+ if (x < 1)
+ fun_l28_n303(x)
+ else
+ fun_l28_n79(x)
+ end
+end
+
+def fun_l27_n672(x)
+ if (x < 1)
+ fun_l28_n181(x)
+ else
+ fun_l28_n937(x)
+ end
+end
+
+def fun_l27_n673(x)
+ if (x < 1)
+ fun_l28_n301(x)
+ else
+ fun_l28_n687(x)
+ end
+end
+
+def fun_l27_n674(x)
+ if (x < 1)
+ fun_l28_n992(x)
+ else
+ fun_l28_n814(x)
+ end
+end
+
+def fun_l27_n675(x)
+ if (x < 1)
+ fun_l28_n239(x)
+ else
+ fun_l28_n248(x)
+ end
+end
+
+def fun_l27_n676(x)
+ if (x < 1)
+ fun_l28_n728(x)
+ else
+ fun_l28_n368(x)
+ end
+end
+
+def fun_l27_n677(x)
+ if (x < 1)
+ fun_l28_n411(x)
+ else
+ fun_l28_n773(x)
+ end
+end
+
+def fun_l27_n678(x)
+ if (x < 1)
+ fun_l28_n522(x)
+ else
+ fun_l28_n754(x)
+ end
+end
+
+def fun_l27_n679(x)
+ if (x < 1)
+ fun_l28_n538(x)
+ else
+ fun_l28_n976(x)
+ end
+end
+
+def fun_l27_n680(x)
+ if (x < 1)
+ fun_l28_n744(x)
+ else
+ fun_l28_n752(x)
+ end
+end
+
+def fun_l27_n681(x)
+ if (x < 1)
+ fun_l28_n658(x)
+ else
+ fun_l28_n19(x)
+ end
+end
+
+def fun_l27_n682(x)
+ if (x < 1)
+ fun_l28_n843(x)
+ else
+ fun_l28_n657(x)
+ end
+end
+
+def fun_l27_n683(x)
+ if (x < 1)
+ fun_l28_n256(x)
+ else
+ fun_l28_n744(x)
+ end
+end
+
+def fun_l27_n684(x)
+ if (x < 1)
+ fun_l28_n380(x)
+ else
+ fun_l28_n223(x)
+ end
+end
+
+def fun_l27_n685(x)
+ if (x < 1)
+ fun_l28_n762(x)
+ else
+ fun_l28_n122(x)
+ end
+end
+
+def fun_l27_n686(x)
+ if (x < 1)
+ fun_l28_n860(x)
+ else
+ fun_l28_n51(x)
+ end
+end
+
+def fun_l27_n687(x)
+ if (x < 1)
+ fun_l28_n210(x)
+ else
+ fun_l28_n658(x)
+ end
+end
+
+def fun_l27_n688(x)
+ if (x < 1)
+ fun_l28_n250(x)
+ else
+ fun_l28_n165(x)
+ end
+end
+
+def fun_l27_n689(x)
+ if (x < 1)
+ fun_l28_n955(x)
+ else
+ fun_l28_n862(x)
+ end
+end
+
+def fun_l27_n690(x)
+ if (x < 1)
+ fun_l28_n592(x)
+ else
+ fun_l28_n54(x)
+ end
+end
+
+def fun_l27_n691(x)
+ if (x < 1)
+ fun_l28_n558(x)
+ else
+ fun_l28_n750(x)
+ end
+end
+
+def fun_l27_n692(x)
+ if (x < 1)
+ fun_l28_n307(x)
+ else
+ fun_l28_n143(x)
+ end
+end
+
+def fun_l27_n693(x)
+ if (x < 1)
+ fun_l28_n625(x)
+ else
+ fun_l28_n743(x)
+ end
+end
+
+def fun_l27_n694(x)
+ if (x < 1)
+ fun_l28_n883(x)
+ else
+ fun_l28_n567(x)
+ end
+end
+
+def fun_l27_n695(x)
+ if (x < 1)
+ fun_l28_n889(x)
+ else
+ fun_l28_n805(x)
+ end
+end
+
+def fun_l27_n696(x)
+ if (x < 1)
+ fun_l28_n366(x)
+ else
+ fun_l28_n112(x)
+ end
+end
+
+def fun_l27_n697(x)
+ if (x < 1)
+ fun_l28_n746(x)
+ else
+ fun_l28_n924(x)
+ end
+end
+
+def fun_l27_n698(x)
+ if (x < 1)
+ fun_l28_n694(x)
+ else
+ fun_l28_n703(x)
+ end
+end
+
+def fun_l27_n699(x)
+ if (x < 1)
+ fun_l28_n304(x)
+ else
+ fun_l28_n200(x)
+ end
+end
+
+def fun_l27_n700(x)
+ if (x < 1)
+ fun_l28_n477(x)
+ else
+ fun_l28_n851(x)
+ end
+end
+
+def fun_l27_n701(x)
+ if (x < 1)
+ fun_l28_n940(x)
+ else
+ fun_l28_n8(x)
+ end
+end
+
+def fun_l27_n702(x)
+ if (x < 1)
+ fun_l28_n675(x)
+ else
+ fun_l28_n631(x)
+ end
+end
+
+def fun_l27_n703(x)
+ if (x < 1)
+ fun_l28_n683(x)
+ else
+ fun_l28_n191(x)
+ end
+end
+
+def fun_l27_n704(x)
+ if (x < 1)
+ fun_l28_n431(x)
+ else
+ fun_l28_n573(x)
+ end
+end
+
+def fun_l27_n705(x)
+ if (x < 1)
+ fun_l28_n86(x)
+ else
+ fun_l28_n89(x)
+ end
+end
+
+def fun_l27_n706(x)
+ if (x < 1)
+ fun_l28_n315(x)
+ else
+ fun_l28_n388(x)
+ end
+end
+
+def fun_l27_n707(x)
+ if (x < 1)
+ fun_l28_n94(x)
+ else
+ fun_l28_n176(x)
+ end
+end
+
+def fun_l27_n708(x)
+ if (x < 1)
+ fun_l28_n391(x)
+ else
+ fun_l28_n187(x)
+ end
+end
+
+def fun_l27_n709(x)
+ if (x < 1)
+ fun_l28_n845(x)
+ else
+ fun_l28_n497(x)
+ end
+end
+
+def fun_l27_n710(x)
+ if (x < 1)
+ fun_l28_n195(x)
+ else
+ fun_l28_n242(x)
+ end
+end
+
+def fun_l27_n711(x)
+ if (x < 1)
+ fun_l28_n276(x)
+ else
+ fun_l28_n856(x)
+ end
+end
+
+def fun_l27_n712(x)
+ if (x < 1)
+ fun_l28_n42(x)
+ else
+ fun_l28_n184(x)
+ end
+end
+
+def fun_l27_n713(x)
+ if (x < 1)
+ fun_l28_n270(x)
+ else
+ fun_l28_n813(x)
+ end
+end
+
+def fun_l27_n714(x)
+ if (x < 1)
+ fun_l28_n281(x)
+ else
+ fun_l28_n54(x)
+ end
+end
+
+def fun_l27_n715(x)
+ if (x < 1)
+ fun_l28_n226(x)
+ else
+ fun_l28_n202(x)
+ end
+end
+
+def fun_l27_n716(x)
+ if (x < 1)
+ fun_l28_n391(x)
+ else
+ fun_l28_n143(x)
+ end
+end
+
+def fun_l27_n717(x)
+ if (x < 1)
+ fun_l28_n449(x)
+ else
+ fun_l28_n530(x)
+ end
+end
+
+def fun_l27_n718(x)
+ if (x < 1)
+ fun_l28_n198(x)
+ else
+ fun_l28_n342(x)
+ end
+end
+
+def fun_l27_n719(x)
+ if (x < 1)
+ fun_l28_n741(x)
+ else
+ fun_l28_n703(x)
+ end
+end
+
+def fun_l27_n720(x)
+ if (x < 1)
+ fun_l28_n779(x)
+ else
+ fun_l28_n706(x)
+ end
+end
+
+def fun_l27_n721(x)
+ if (x < 1)
+ fun_l28_n184(x)
+ else
+ fun_l28_n472(x)
+ end
+end
+
+def fun_l27_n722(x)
+ if (x < 1)
+ fun_l28_n752(x)
+ else
+ fun_l28_n230(x)
+ end
+end
+
+def fun_l27_n723(x)
+ if (x < 1)
+ fun_l28_n137(x)
+ else
+ fun_l28_n228(x)
+ end
+end
+
+def fun_l27_n724(x)
+ if (x < 1)
+ fun_l28_n360(x)
+ else
+ fun_l28_n186(x)
+ end
+end
+
+def fun_l27_n725(x)
+ if (x < 1)
+ fun_l28_n791(x)
+ else
+ fun_l28_n752(x)
+ end
+end
+
+def fun_l27_n726(x)
+ if (x < 1)
+ fun_l28_n162(x)
+ else
+ fun_l28_n492(x)
+ end
+end
+
+def fun_l27_n727(x)
+ if (x < 1)
+ fun_l28_n329(x)
+ else
+ fun_l28_n286(x)
+ end
+end
+
+def fun_l27_n728(x)
+ if (x < 1)
+ fun_l28_n262(x)
+ else
+ fun_l28_n775(x)
+ end
+end
+
+def fun_l27_n729(x)
+ if (x < 1)
+ fun_l28_n773(x)
+ else
+ fun_l28_n424(x)
+ end
+end
+
+def fun_l27_n730(x)
+ if (x < 1)
+ fun_l28_n202(x)
+ else
+ fun_l28_n379(x)
+ end
+end
+
+def fun_l27_n731(x)
+ if (x < 1)
+ fun_l28_n761(x)
+ else
+ fun_l28_n759(x)
+ end
+end
+
+def fun_l27_n732(x)
+ if (x < 1)
+ fun_l28_n544(x)
+ else
+ fun_l28_n980(x)
+ end
+end
+
+def fun_l27_n733(x)
+ if (x < 1)
+ fun_l28_n75(x)
+ else
+ fun_l28_n786(x)
+ end
+end
+
+def fun_l27_n734(x)
+ if (x < 1)
+ fun_l28_n708(x)
+ else
+ fun_l28_n92(x)
+ end
+end
+
+def fun_l27_n735(x)
+ if (x < 1)
+ fun_l28_n213(x)
+ else
+ fun_l28_n966(x)
+ end
+end
+
+def fun_l27_n736(x)
+ if (x < 1)
+ fun_l28_n298(x)
+ else
+ fun_l28_n517(x)
+ end
+end
+
+def fun_l27_n737(x)
+ if (x < 1)
+ fun_l28_n665(x)
+ else
+ fun_l28_n960(x)
+ end
+end
+
+def fun_l27_n738(x)
+ if (x < 1)
+ fun_l28_n51(x)
+ else
+ fun_l28_n605(x)
+ end
+end
+
+def fun_l27_n739(x)
+ if (x < 1)
+ fun_l28_n931(x)
+ else
+ fun_l28_n697(x)
+ end
+end
+
+def fun_l27_n740(x)
+ if (x < 1)
+ fun_l28_n341(x)
+ else
+ fun_l28_n57(x)
+ end
+end
+
+def fun_l27_n741(x)
+ if (x < 1)
+ fun_l28_n614(x)
+ else
+ fun_l28_n623(x)
+ end
+end
+
+def fun_l27_n742(x)
+ if (x < 1)
+ fun_l28_n466(x)
+ else
+ fun_l28_n260(x)
+ end
+end
+
+def fun_l27_n743(x)
+ if (x < 1)
+ fun_l28_n741(x)
+ else
+ fun_l28_n337(x)
+ end
+end
+
+def fun_l27_n744(x)
+ if (x < 1)
+ fun_l28_n414(x)
+ else
+ fun_l28_n277(x)
+ end
+end
+
+def fun_l27_n745(x)
+ if (x < 1)
+ fun_l28_n377(x)
+ else
+ fun_l28_n245(x)
+ end
+end
+
+def fun_l27_n746(x)
+ if (x < 1)
+ fun_l28_n441(x)
+ else
+ fun_l28_n347(x)
+ end
+end
+
+def fun_l27_n747(x)
+ if (x < 1)
+ fun_l28_n473(x)
+ else
+ fun_l28_n54(x)
+ end
+end
+
+def fun_l27_n748(x)
+ if (x < 1)
+ fun_l28_n140(x)
+ else
+ fun_l28_n680(x)
+ end
+end
+
+def fun_l27_n749(x)
+ if (x < 1)
+ fun_l28_n491(x)
+ else
+ fun_l28_n830(x)
+ end
+end
+
+def fun_l27_n750(x)
+ if (x < 1)
+ fun_l28_n803(x)
+ else
+ fun_l28_n917(x)
+ end
+end
+
+def fun_l27_n751(x)
+ if (x < 1)
+ fun_l28_n97(x)
+ else
+ fun_l28_n702(x)
+ end
+end
+
+def fun_l27_n752(x)
+ if (x < 1)
+ fun_l28_n113(x)
+ else
+ fun_l28_n447(x)
+ end
+end
+
+def fun_l27_n753(x)
+ if (x < 1)
+ fun_l28_n589(x)
+ else
+ fun_l28_n933(x)
+ end
+end
+
+def fun_l27_n754(x)
+ if (x < 1)
+ fun_l28_n610(x)
+ else
+ fun_l28_n365(x)
+ end
+end
+
+def fun_l27_n755(x)
+ if (x < 1)
+ fun_l28_n813(x)
+ else
+ fun_l28_n930(x)
+ end
+end
+
+def fun_l27_n756(x)
+ if (x < 1)
+ fun_l28_n997(x)
+ else
+ fun_l28_n112(x)
+ end
+end
+
+def fun_l27_n757(x)
+ if (x < 1)
+ fun_l28_n635(x)
+ else
+ fun_l28_n852(x)
+ end
+end
+
+def fun_l27_n758(x)
+ if (x < 1)
+ fun_l28_n735(x)
+ else
+ fun_l28_n3(x)
+ end
+end
+
+def fun_l27_n759(x)
+ if (x < 1)
+ fun_l28_n473(x)
+ else
+ fun_l28_n276(x)
+ end
+end
+
+def fun_l27_n760(x)
+ if (x < 1)
+ fun_l28_n708(x)
+ else
+ fun_l28_n602(x)
+ end
+end
+
+def fun_l27_n761(x)
+ if (x < 1)
+ fun_l28_n178(x)
+ else
+ fun_l28_n766(x)
+ end
+end
+
+def fun_l27_n762(x)
+ if (x < 1)
+ fun_l28_n968(x)
+ else
+ fun_l28_n935(x)
+ end
+end
+
+def fun_l27_n763(x)
+ if (x < 1)
+ fun_l28_n17(x)
+ else
+ fun_l28_n680(x)
+ end
+end
+
+def fun_l27_n764(x)
+ if (x < 1)
+ fun_l28_n465(x)
+ else
+ fun_l28_n484(x)
+ end
+end
+
+def fun_l27_n765(x)
+ if (x < 1)
+ fun_l28_n157(x)
+ else
+ fun_l28_n33(x)
+ end
+end
+
+def fun_l27_n766(x)
+ if (x < 1)
+ fun_l28_n306(x)
+ else
+ fun_l28_n588(x)
+ end
+end
+
+def fun_l27_n767(x)
+ if (x < 1)
+ fun_l28_n73(x)
+ else
+ fun_l28_n144(x)
+ end
+end
+
+def fun_l27_n768(x)
+ if (x < 1)
+ fun_l28_n838(x)
+ else
+ fun_l28_n984(x)
+ end
+end
+
+def fun_l27_n769(x)
+ if (x < 1)
+ fun_l28_n541(x)
+ else
+ fun_l28_n687(x)
+ end
+end
+
+def fun_l27_n770(x)
+ if (x < 1)
+ fun_l28_n129(x)
+ else
+ fun_l28_n256(x)
+ end
+end
+
+def fun_l27_n771(x)
+ if (x < 1)
+ fun_l28_n78(x)
+ else
+ fun_l28_n617(x)
+ end
+end
+
+def fun_l27_n772(x)
+ if (x < 1)
+ fun_l28_n590(x)
+ else
+ fun_l28_n78(x)
+ end
+end
+
+def fun_l27_n773(x)
+ if (x < 1)
+ fun_l28_n609(x)
+ else
+ fun_l28_n942(x)
+ end
+end
+
+def fun_l27_n774(x)
+ if (x < 1)
+ fun_l28_n794(x)
+ else
+ fun_l28_n361(x)
+ end
+end
+
+def fun_l27_n775(x)
+ if (x < 1)
+ fun_l28_n632(x)
+ else
+ fun_l28_n722(x)
+ end
+end
+
+def fun_l27_n776(x)
+ if (x < 1)
+ fun_l28_n655(x)
+ else
+ fun_l28_n944(x)
+ end
+end
+
+def fun_l27_n777(x)
+ if (x < 1)
+ fun_l28_n117(x)
+ else
+ fun_l28_n725(x)
+ end
+end
+
+def fun_l27_n778(x)
+ if (x < 1)
+ fun_l28_n511(x)
+ else
+ fun_l28_n934(x)
+ end
+end
+
+def fun_l27_n779(x)
+ if (x < 1)
+ fun_l28_n11(x)
+ else
+ fun_l28_n421(x)
+ end
+end
+
+def fun_l27_n780(x)
+ if (x < 1)
+ fun_l28_n957(x)
+ else
+ fun_l28_n941(x)
+ end
+end
+
+def fun_l27_n781(x)
+ if (x < 1)
+ fun_l28_n899(x)
+ else
+ fun_l28_n122(x)
+ end
+end
+
+def fun_l27_n782(x)
+ if (x < 1)
+ fun_l28_n42(x)
+ else
+ fun_l28_n885(x)
+ end
+end
+
+def fun_l27_n783(x)
+ if (x < 1)
+ fun_l28_n696(x)
+ else
+ fun_l28_n25(x)
+ end
+end
+
+def fun_l27_n784(x)
+ if (x < 1)
+ fun_l28_n683(x)
+ else
+ fun_l28_n201(x)
+ end
+end
+
+def fun_l27_n785(x)
+ if (x < 1)
+ fun_l28_n337(x)
+ else
+ fun_l28_n977(x)
+ end
+end
+
+def fun_l27_n786(x)
+ if (x < 1)
+ fun_l28_n113(x)
+ else
+ fun_l28_n946(x)
+ end
+end
+
+def fun_l27_n787(x)
+ if (x < 1)
+ fun_l28_n311(x)
+ else
+ fun_l28_n396(x)
+ end
+end
+
+def fun_l27_n788(x)
+ if (x < 1)
+ fun_l28_n963(x)
+ else
+ fun_l28_n592(x)
+ end
+end
+
+def fun_l27_n789(x)
+ if (x < 1)
+ fun_l28_n647(x)
+ else
+ fun_l28_n614(x)
+ end
+end
+
+def fun_l27_n790(x)
+ if (x < 1)
+ fun_l28_n15(x)
+ else
+ fun_l28_n602(x)
+ end
+end
+
+def fun_l27_n791(x)
+ if (x < 1)
+ fun_l28_n648(x)
+ else
+ fun_l28_n921(x)
+ end
+end
+
+def fun_l27_n792(x)
+ if (x < 1)
+ fun_l28_n272(x)
+ else
+ fun_l28_n585(x)
+ end
+end
+
+def fun_l27_n793(x)
+ if (x < 1)
+ fun_l28_n74(x)
+ else
+ fun_l28_n412(x)
+ end
+end
+
+def fun_l27_n794(x)
+ if (x < 1)
+ fun_l28_n610(x)
+ else
+ fun_l28_n121(x)
+ end
+end
+
+def fun_l27_n795(x)
+ if (x < 1)
+ fun_l28_n905(x)
+ else
+ fun_l28_n620(x)
+ end
+end
+
+def fun_l27_n796(x)
+ if (x < 1)
+ fun_l28_n691(x)
+ else
+ fun_l28_n833(x)
+ end
+end
+
+def fun_l27_n797(x)
+ if (x < 1)
+ fun_l28_n148(x)
+ else
+ fun_l28_n223(x)
+ end
+end
+
+def fun_l27_n798(x)
+ if (x < 1)
+ fun_l28_n835(x)
+ else
+ fun_l28_n59(x)
+ end
+end
+
+def fun_l27_n799(x)
+ if (x < 1)
+ fun_l28_n317(x)
+ else
+ fun_l28_n39(x)
+ end
+end
+
+def fun_l27_n800(x)
+ if (x < 1)
+ fun_l28_n694(x)
+ else
+ fun_l28_n833(x)
+ end
+end
+
+def fun_l27_n801(x)
+ if (x < 1)
+ fun_l28_n280(x)
+ else
+ fun_l28_n322(x)
+ end
+end
+
+def fun_l27_n802(x)
+ if (x < 1)
+ fun_l28_n612(x)
+ else
+ fun_l28_n866(x)
+ end
+end
+
+def fun_l27_n803(x)
+ if (x < 1)
+ fun_l28_n114(x)
+ else
+ fun_l28_n901(x)
+ end
+end
+
+def fun_l27_n804(x)
+ if (x < 1)
+ fun_l28_n983(x)
+ else
+ fun_l28_n837(x)
+ end
+end
+
+def fun_l27_n805(x)
+ if (x < 1)
+ fun_l28_n225(x)
+ else
+ fun_l28_n345(x)
+ end
+end
+
+def fun_l27_n806(x)
+ if (x < 1)
+ fun_l28_n879(x)
+ else
+ fun_l28_n929(x)
+ end
+end
+
+def fun_l27_n807(x)
+ if (x < 1)
+ fun_l28_n41(x)
+ else
+ fun_l28_n670(x)
+ end
+end
+
+def fun_l27_n808(x)
+ if (x < 1)
+ fun_l28_n407(x)
+ else
+ fun_l28_n46(x)
+ end
+end
+
+def fun_l27_n809(x)
+ if (x < 1)
+ fun_l28_n377(x)
+ else
+ fun_l28_n646(x)
+ end
+end
+
+def fun_l27_n810(x)
+ if (x < 1)
+ fun_l28_n293(x)
+ else
+ fun_l28_n40(x)
+ end
+end
+
+def fun_l27_n811(x)
+ if (x < 1)
+ fun_l28_n150(x)
+ else
+ fun_l28_n743(x)
+ end
+end
+
+def fun_l27_n812(x)
+ if (x < 1)
+ fun_l28_n285(x)
+ else
+ fun_l28_n124(x)
+ end
+end
+
+def fun_l27_n813(x)
+ if (x < 1)
+ fun_l28_n861(x)
+ else
+ fun_l28_n641(x)
+ end
+end
+
+def fun_l27_n814(x)
+ if (x < 1)
+ fun_l28_n917(x)
+ else
+ fun_l28_n51(x)
+ end
+end
+
+def fun_l27_n815(x)
+ if (x < 1)
+ fun_l28_n573(x)
+ else
+ fun_l28_n551(x)
+ end
+end
+
+def fun_l27_n816(x)
+ if (x < 1)
+ fun_l28_n420(x)
+ else
+ fun_l28_n155(x)
+ end
+end
+
+def fun_l27_n817(x)
+ if (x < 1)
+ fun_l28_n283(x)
+ else
+ fun_l28_n797(x)
+ end
+end
+
+def fun_l27_n818(x)
+ if (x < 1)
+ fun_l28_n744(x)
+ else
+ fun_l28_n22(x)
+ end
+end
+
+def fun_l27_n819(x)
+ if (x < 1)
+ fun_l28_n370(x)
+ else
+ fun_l28_n287(x)
+ end
+end
+
+def fun_l27_n820(x)
+ if (x < 1)
+ fun_l28_n435(x)
+ else
+ fun_l28_n23(x)
+ end
+end
+
+def fun_l27_n821(x)
+ if (x < 1)
+ fun_l28_n947(x)
+ else
+ fun_l28_n200(x)
+ end
+end
+
+def fun_l27_n822(x)
+ if (x < 1)
+ fun_l28_n259(x)
+ else
+ fun_l28_n444(x)
+ end
+end
+
+def fun_l27_n823(x)
+ if (x < 1)
+ fun_l28_n663(x)
+ else
+ fun_l28_n755(x)
+ end
+end
+
+def fun_l27_n824(x)
+ if (x < 1)
+ fun_l28_n564(x)
+ else
+ fun_l28_n572(x)
+ end
+end
+
+def fun_l27_n825(x)
+ if (x < 1)
+ fun_l28_n679(x)
+ else
+ fun_l28_n351(x)
+ end
+end
+
+def fun_l27_n826(x)
+ if (x < 1)
+ fun_l28_n654(x)
+ else
+ fun_l28_n393(x)
+ end
+end
+
+def fun_l27_n827(x)
+ if (x < 1)
+ fun_l28_n454(x)
+ else
+ fun_l28_n698(x)
+ end
+end
+
+def fun_l27_n828(x)
+ if (x < 1)
+ fun_l28_n389(x)
+ else
+ fun_l28_n118(x)
+ end
+end
+
+def fun_l27_n829(x)
+ if (x < 1)
+ fun_l28_n918(x)
+ else
+ fun_l28_n176(x)
+ end
+end
+
+def fun_l27_n830(x)
+ if (x < 1)
+ fun_l28_n158(x)
+ else
+ fun_l28_n309(x)
+ end
+end
+
+def fun_l27_n831(x)
+ if (x < 1)
+ fun_l28_n86(x)
+ else
+ fun_l28_n250(x)
+ end
+end
+
+def fun_l27_n832(x)
+ if (x < 1)
+ fun_l28_n21(x)
+ else
+ fun_l28_n688(x)
+ end
+end
+
+def fun_l27_n833(x)
+ if (x < 1)
+ fun_l28_n587(x)
+ else
+ fun_l28_n484(x)
+ end
+end
+
+def fun_l27_n834(x)
+ if (x < 1)
+ fun_l28_n886(x)
+ else
+ fun_l28_n579(x)
+ end
+end
+
+def fun_l27_n835(x)
+ if (x < 1)
+ fun_l28_n923(x)
+ else
+ fun_l28_n140(x)
+ end
+end
+
+def fun_l27_n836(x)
+ if (x < 1)
+ fun_l28_n120(x)
+ else
+ fun_l28_n704(x)
+ end
+end
+
+def fun_l27_n837(x)
+ if (x < 1)
+ fun_l28_n905(x)
+ else
+ fun_l28_n918(x)
+ end
+end
+
+def fun_l27_n838(x)
+ if (x < 1)
+ fun_l28_n679(x)
+ else
+ fun_l28_n588(x)
+ end
+end
+
+def fun_l27_n839(x)
+ if (x < 1)
+ fun_l28_n445(x)
+ else
+ fun_l28_n187(x)
+ end
+end
+
+def fun_l27_n840(x)
+ if (x < 1)
+ fun_l28_n695(x)
+ else
+ fun_l28_n86(x)
+ end
+end
+
+def fun_l27_n841(x)
+ if (x < 1)
+ fun_l28_n784(x)
+ else
+ fun_l28_n802(x)
+ end
+end
+
+def fun_l27_n842(x)
+ if (x < 1)
+ fun_l28_n854(x)
+ else
+ fun_l28_n617(x)
+ end
+end
+
+def fun_l27_n843(x)
+ if (x < 1)
+ fun_l28_n466(x)
+ else
+ fun_l28_n261(x)
+ end
+end
+
+def fun_l27_n844(x)
+ if (x < 1)
+ fun_l28_n326(x)
+ else
+ fun_l28_n517(x)
+ end
+end
+
+def fun_l27_n845(x)
+ if (x < 1)
+ fun_l28_n686(x)
+ else
+ fun_l28_n81(x)
+ end
+end
+
+def fun_l27_n846(x)
+ if (x < 1)
+ fun_l28_n71(x)
+ else
+ fun_l28_n685(x)
+ end
+end
+
+def fun_l27_n847(x)
+ if (x < 1)
+ fun_l28_n622(x)
+ else
+ fun_l28_n469(x)
+ end
+end
+
+def fun_l27_n848(x)
+ if (x < 1)
+ fun_l28_n125(x)
+ else
+ fun_l28_n252(x)
+ end
+end
+
+def fun_l27_n849(x)
+ if (x < 1)
+ fun_l28_n820(x)
+ else
+ fun_l28_n752(x)
+ end
+end
+
+def fun_l27_n850(x)
+ if (x < 1)
+ fun_l28_n278(x)
+ else
+ fun_l28_n198(x)
+ end
+end
+
+def fun_l27_n851(x)
+ if (x < 1)
+ fun_l28_n631(x)
+ else
+ fun_l28_n241(x)
+ end
+end
+
+def fun_l27_n852(x)
+ if (x < 1)
+ fun_l28_n917(x)
+ else
+ fun_l28_n95(x)
+ end
+end
+
+def fun_l27_n853(x)
+ if (x < 1)
+ fun_l28_n271(x)
+ else
+ fun_l28_n493(x)
+ end
+end
+
+def fun_l27_n854(x)
+ if (x < 1)
+ fun_l28_n578(x)
+ else
+ fun_l28_n31(x)
+ end
+end
+
+def fun_l27_n855(x)
+ if (x < 1)
+ fun_l28_n407(x)
+ else
+ fun_l28_n694(x)
+ end
+end
+
+def fun_l27_n856(x)
+ if (x < 1)
+ fun_l28_n541(x)
+ else
+ fun_l28_n81(x)
+ end
+end
+
+def fun_l27_n857(x)
+ if (x < 1)
+ fun_l28_n144(x)
+ else
+ fun_l28_n965(x)
+ end
+end
+
+def fun_l27_n858(x)
+ if (x < 1)
+ fun_l28_n476(x)
+ else
+ fun_l28_n44(x)
+ end
+end
+
+def fun_l27_n859(x)
+ if (x < 1)
+ fun_l28_n647(x)
+ else
+ fun_l28_n973(x)
+ end
+end
+
+def fun_l27_n860(x)
+ if (x < 1)
+ fun_l28_n641(x)
+ else
+ fun_l28_n331(x)
+ end
+end
+
+def fun_l27_n861(x)
+ if (x < 1)
+ fun_l28_n75(x)
+ else
+ fun_l28_n10(x)
+ end
+end
+
+def fun_l27_n862(x)
+ if (x < 1)
+ fun_l28_n435(x)
+ else
+ fun_l28_n182(x)
+ end
+end
+
+def fun_l27_n863(x)
+ if (x < 1)
+ fun_l28_n244(x)
+ else
+ fun_l28_n135(x)
+ end
+end
+
+def fun_l27_n864(x)
+ if (x < 1)
+ fun_l28_n598(x)
+ else
+ fun_l28_n495(x)
+ end
+end
+
+def fun_l27_n865(x)
+ if (x < 1)
+ fun_l28_n456(x)
+ else
+ fun_l28_n16(x)
+ end
+end
+
+def fun_l27_n866(x)
+ if (x < 1)
+ fun_l28_n43(x)
+ else
+ fun_l28_n279(x)
+ end
+end
+
+def fun_l27_n867(x)
+ if (x < 1)
+ fun_l28_n853(x)
+ else
+ fun_l28_n906(x)
+ end
+end
+
+def fun_l27_n868(x)
+ if (x < 1)
+ fun_l28_n641(x)
+ else
+ fun_l28_n479(x)
+ end
+end
+
+def fun_l27_n869(x)
+ if (x < 1)
+ fun_l28_n78(x)
+ else
+ fun_l28_n727(x)
+ end
+end
+
+def fun_l27_n870(x)
+ if (x < 1)
+ fun_l28_n815(x)
+ else
+ fun_l28_n803(x)
+ end
+end
+
+def fun_l27_n871(x)
+ if (x < 1)
+ fun_l28_n343(x)
+ else
+ fun_l28_n665(x)
+ end
+end
+
+def fun_l27_n872(x)
+ if (x < 1)
+ fun_l28_n907(x)
+ else
+ fun_l28_n410(x)
+ end
+end
+
+def fun_l27_n873(x)
+ if (x < 1)
+ fun_l28_n797(x)
+ else
+ fun_l28_n626(x)
+ end
+end
+
+def fun_l27_n874(x)
+ if (x < 1)
+ fun_l28_n784(x)
+ else
+ fun_l28_n679(x)
+ end
+end
+
+def fun_l27_n875(x)
+ if (x < 1)
+ fun_l28_n247(x)
+ else
+ fun_l28_n89(x)
+ end
+end
+
+def fun_l27_n876(x)
+ if (x < 1)
+ fun_l28_n911(x)
+ else
+ fun_l28_n503(x)
+ end
+end
+
+def fun_l27_n877(x)
+ if (x < 1)
+ fun_l28_n233(x)
+ else
+ fun_l28_n437(x)
+ end
+end
+
+def fun_l27_n878(x)
+ if (x < 1)
+ fun_l28_n913(x)
+ else
+ fun_l28_n984(x)
+ end
+end
+
+def fun_l27_n879(x)
+ if (x < 1)
+ fun_l28_n690(x)
+ else
+ fun_l28_n642(x)
+ end
+end
+
+def fun_l27_n880(x)
+ if (x < 1)
+ fun_l28_n222(x)
+ else
+ fun_l28_n400(x)
+ end
+end
+
+def fun_l27_n881(x)
+ if (x < 1)
+ fun_l28_n611(x)
+ else
+ fun_l28_n446(x)
+ end
+end
+
+def fun_l27_n882(x)
+ if (x < 1)
+ fun_l28_n821(x)
+ else
+ fun_l28_n784(x)
+ end
+end
+
+def fun_l27_n883(x)
+ if (x < 1)
+ fun_l28_n849(x)
+ else
+ fun_l28_n83(x)
+ end
+end
+
+def fun_l27_n884(x)
+ if (x < 1)
+ fun_l28_n366(x)
+ else
+ fun_l28_n822(x)
+ end
+end
+
+def fun_l27_n885(x)
+ if (x < 1)
+ fun_l28_n40(x)
+ else
+ fun_l28_n626(x)
+ end
+end
+
+def fun_l27_n886(x)
+ if (x < 1)
+ fun_l28_n280(x)
+ else
+ fun_l28_n957(x)
+ end
+end
+
+def fun_l27_n887(x)
+ if (x < 1)
+ fun_l28_n466(x)
+ else
+ fun_l28_n377(x)
+ end
+end
+
+def fun_l27_n888(x)
+ if (x < 1)
+ fun_l28_n258(x)
+ else
+ fun_l28_n816(x)
+ end
+end
+
+def fun_l27_n889(x)
+ if (x < 1)
+ fun_l28_n893(x)
+ else
+ fun_l28_n263(x)
+ end
+end
+
+def fun_l27_n890(x)
+ if (x < 1)
+ fun_l28_n366(x)
+ else
+ fun_l28_n890(x)
+ end
+end
+
+def fun_l27_n891(x)
+ if (x < 1)
+ fun_l28_n692(x)
+ else
+ fun_l28_n781(x)
+ end
+end
+
+def fun_l27_n892(x)
+ if (x < 1)
+ fun_l28_n301(x)
+ else
+ fun_l28_n142(x)
+ end
+end
+
+def fun_l27_n893(x)
+ if (x < 1)
+ fun_l28_n275(x)
+ else
+ fun_l28_n302(x)
+ end
+end
+
+def fun_l27_n894(x)
+ if (x < 1)
+ fun_l28_n726(x)
+ else
+ fun_l28_n445(x)
+ end
+end
+
+def fun_l27_n895(x)
+ if (x < 1)
+ fun_l28_n859(x)
+ else
+ fun_l28_n839(x)
+ end
+end
+
+def fun_l27_n896(x)
+ if (x < 1)
+ fun_l28_n252(x)
+ else
+ fun_l28_n844(x)
+ end
+end
+
+def fun_l27_n897(x)
+ if (x < 1)
+ fun_l28_n245(x)
+ else
+ fun_l28_n133(x)
+ end
+end
+
+def fun_l27_n898(x)
+ if (x < 1)
+ fun_l28_n233(x)
+ else
+ fun_l28_n417(x)
+ end
+end
+
+def fun_l27_n899(x)
+ if (x < 1)
+ fun_l28_n171(x)
+ else
+ fun_l28_n479(x)
+ end
+end
+
+def fun_l27_n900(x)
+ if (x < 1)
+ fun_l28_n528(x)
+ else
+ fun_l28_n196(x)
+ end
+end
+
+def fun_l27_n901(x)
+ if (x < 1)
+ fun_l28_n243(x)
+ else
+ fun_l28_n270(x)
+ end
+end
+
+def fun_l27_n902(x)
+ if (x < 1)
+ fun_l28_n319(x)
+ else
+ fun_l28_n885(x)
+ end
+end
+
+def fun_l27_n903(x)
+ if (x < 1)
+ fun_l28_n570(x)
+ else
+ fun_l28_n321(x)
+ end
+end
+
+def fun_l27_n904(x)
+ if (x < 1)
+ fun_l28_n522(x)
+ else
+ fun_l28_n720(x)
+ end
+end
+
+def fun_l27_n905(x)
+ if (x < 1)
+ fun_l28_n820(x)
+ else
+ fun_l28_n789(x)
+ end
+end
+
+def fun_l27_n906(x)
+ if (x < 1)
+ fun_l28_n592(x)
+ else
+ fun_l28_n113(x)
+ end
+end
+
+def fun_l27_n907(x)
+ if (x < 1)
+ fun_l28_n432(x)
+ else
+ fun_l28_n591(x)
+ end
+end
+
+def fun_l27_n908(x)
+ if (x < 1)
+ fun_l28_n538(x)
+ else
+ fun_l28_n701(x)
+ end
+end
+
+def fun_l27_n909(x)
+ if (x < 1)
+ fun_l28_n963(x)
+ else
+ fun_l28_n756(x)
+ end
+end
+
+def fun_l27_n910(x)
+ if (x < 1)
+ fun_l28_n871(x)
+ else
+ fun_l28_n387(x)
+ end
+end
+
+def fun_l27_n911(x)
+ if (x < 1)
+ fun_l28_n779(x)
+ else
+ fun_l28_n862(x)
+ end
+end
+
+def fun_l27_n912(x)
+ if (x < 1)
+ fun_l28_n0(x)
+ else
+ fun_l28_n208(x)
+ end
+end
+
+def fun_l27_n913(x)
+ if (x < 1)
+ fun_l28_n994(x)
+ else
+ fun_l28_n756(x)
+ end
+end
+
+def fun_l27_n914(x)
+ if (x < 1)
+ fun_l28_n950(x)
+ else
+ fun_l28_n770(x)
+ end
+end
+
+def fun_l27_n915(x)
+ if (x < 1)
+ fun_l28_n922(x)
+ else
+ fun_l28_n372(x)
+ end
+end
+
+def fun_l27_n916(x)
+ if (x < 1)
+ fun_l28_n786(x)
+ else
+ fun_l28_n786(x)
+ end
+end
+
+def fun_l27_n917(x)
+ if (x < 1)
+ fun_l28_n745(x)
+ else
+ fun_l28_n822(x)
+ end
+end
+
+def fun_l27_n918(x)
+ if (x < 1)
+ fun_l28_n69(x)
+ else
+ fun_l28_n669(x)
+ end
+end
+
+def fun_l27_n919(x)
+ if (x < 1)
+ fun_l28_n714(x)
+ else
+ fun_l28_n777(x)
+ end
+end
+
+def fun_l27_n920(x)
+ if (x < 1)
+ fun_l28_n934(x)
+ else
+ fun_l28_n392(x)
+ end
+end
+
+def fun_l27_n921(x)
+ if (x < 1)
+ fun_l28_n746(x)
+ else
+ fun_l28_n355(x)
+ end
+end
+
+def fun_l27_n922(x)
+ if (x < 1)
+ fun_l28_n645(x)
+ else
+ fun_l28_n351(x)
+ end
+end
+
+def fun_l27_n923(x)
+ if (x < 1)
+ fun_l28_n48(x)
+ else
+ fun_l28_n826(x)
+ end
+end
+
+def fun_l27_n924(x)
+ if (x < 1)
+ fun_l28_n531(x)
+ else
+ fun_l28_n577(x)
+ end
+end
+
+def fun_l27_n925(x)
+ if (x < 1)
+ fun_l28_n907(x)
+ else
+ fun_l28_n136(x)
+ end
+end
+
+def fun_l27_n926(x)
+ if (x < 1)
+ fun_l28_n256(x)
+ else
+ fun_l28_n527(x)
+ end
+end
+
+def fun_l27_n927(x)
+ if (x < 1)
+ fun_l28_n870(x)
+ else
+ fun_l28_n475(x)
+ end
+end
+
+def fun_l27_n928(x)
+ if (x < 1)
+ fun_l28_n184(x)
+ else
+ fun_l28_n397(x)
+ end
+end
+
+def fun_l27_n929(x)
+ if (x < 1)
+ fun_l28_n99(x)
+ else
+ fun_l28_n363(x)
+ end
+end
+
+def fun_l27_n930(x)
+ if (x < 1)
+ fun_l28_n217(x)
+ else
+ fun_l28_n978(x)
+ end
+end
+
+def fun_l27_n931(x)
+ if (x < 1)
+ fun_l28_n372(x)
+ else
+ fun_l28_n542(x)
+ end
+end
+
+def fun_l27_n932(x)
+ if (x < 1)
+ fun_l28_n337(x)
+ else
+ fun_l28_n150(x)
+ end
+end
+
+def fun_l27_n933(x)
+ if (x < 1)
+ fun_l28_n81(x)
+ else
+ fun_l28_n206(x)
+ end
+end
+
+def fun_l27_n934(x)
+ if (x < 1)
+ fun_l28_n984(x)
+ else
+ fun_l28_n748(x)
+ end
+end
+
+def fun_l27_n935(x)
+ if (x < 1)
+ fun_l28_n746(x)
+ else
+ fun_l28_n824(x)
+ end
+end
+
+def fun_l27_n936(x)
+ if (x < 1)
+ fun_l28_n737(x)
+ else
+ fun_l28_n353(x)
+ end
+end
+
+def fun_l27_n937(x)
+ if (x < 1)
+ fun_l28_n681(x)
+ else
+ fun_l28_n518(x)
+ end
+end
+
+def fun_l27_n938(x)
+ if (x < 1)
+ fun_l28_n401(x)
+ else
+ fun_l28_n99(x)
+ end
+end
+
+def fun_l27_n939(x)
+ if (x < 1)
+ fun_l28_n821(x)
+ else
+ fun_l28_n456(x)
+ end
+end
+
+def fun_l27_n940(x)
+ if (x < 1)
+ fun_l28_n411(x)
+ else
+ fun_l28_n578(x)
+ end
+end
+
+def fun_l27_n941(x)
+ if (x < 1)
+ fun_l28_n318(x)
+ else
+ fun_l28_n479(x)
+ end
+end
+
+def fun_l27_n942(x)
+ if (x < 1)
+ fun_l28_n229(x)
+ else
+ fun_l28_n338(x)
+ end
+end
+
+def fun_l27_n943(x)
+ if (x < 1)
+ fun_l28_n195(x)
+ else
+ fun_l28_n667(x)
+ end
+end
+
+def fun_l27_n944(x)
+ if (x < 1)
+ fun_l28_n256(x)
+ else
+ fun_l28_n309(x)
+ end
+end
+
+def fun_l27_n945(x)
+ if (x < 1)
+ fun_l28_n939(x)
+ else
+ fun_l28_n284(x)
+ end
+end
+
+def fun_l27_n946(x)
+ if (x < 1)
+ fun_l28_n70(x)
+ else
+ fun_l28_n408(x)
+ end
+end
+
+def fun_l27_n947(x)
+ if (x < 1)
+ fun_l28_n586(x)
+ else
+ fun_l28_n931(x)
+ end
+end
+
+def fun_l27_n948(x)
+ if (x < 1)
+ fun_l28_n878(x)
+ else
+ fun_l28_n95(x)
+ end
+end
+
+def fun_l27_n949(x)
+ if (x < 1)
+ fun_l28_n749(x)
+ else
+ fun_l28_n414(x)
+ end
+end
+
+def fun_l27_n950(x)
+ if (x < 1)
+ fun_l28_n913(x)
+ else
+ fun_l28_n933(x)
+ end
+end
+
+def fun_l27_n951(x)
+ if (x < 1)
+ fun_l28_n394(x)
+ else
+ fun_l28_n121(x)
+ end
+end
+
+def fun_l27_n952(x)
+ if (x < 1)
+ fun_l28_n381(x)
+ else
+ fun_l28_n279(x)
+ end
+end
+
+def fun_l27_n953(x)
+ if (x < 1)
+ fun_l28_n302(x)
+ else
+ fun_l28_n710(x)
+ end
+end
+
+def fun_l27_n954(x)
+ if (x < 1)
+ fun_l28_n765(x)
+ else
+ fun_l28_n254(x)
+ end
+end
+
+def fun_l27_n955(x)
+ if (x < 1)
+ fun_l28_n736(x)
+ else
+ fun_l28_n67(x)
+ end
+end
+
+def fun_l27_n956(x)
+ if (x < 1)
+ fun_l28_n61(x)
+ else
+ fun_l28_n873(x)
+ end
+end
+
+def fun_l27_n957(x)
+ if (x < 1)
+ fun_l28_n920(x)
+ else
+ fun_l28_n261(x)
+ end
+end
+
+def fun_l27_n958(x)
+ if (x < 1)
+ fun_l28_n350(x)
+ else
+ fun_l28_n545(x)
+ end
+end
+
+def fun_l27_n959(x)
+ if (x < 1)
+ fun_l28_n538(x)
+ else
+ fun_l28_n829(x)
+ end
+end
+
+def fun_l27_n960(x)
+ if (x < 1)
+ fun_l28_n920(x)
+ else
+ fun_l28_n534(x)
+ end
+end
+
+def fun_l27_n961(x)
+ if (x < 1)
+ fun_l28_n730(x)
+ else
+ fun_l28_n19(x)
+ end
+end
+
+def fun_l27_n962(x)
+ if (x < 1)
+ fun_l28_n293(x)
+ else
+ fun_l28_n187(x)
+ end
+end
+
+def fun_l27_n963(x)
+ if (x < 1)
+ fun_l28_n169(x)
+ else
+ fun_l28_n751(x)
+ end
+end
+
+def fun_l27_n964(x)
+ if (x < 1)
+ fun_l28_n195(x)
+ else
+ fun_l28_n112(x)
+ end
+end
+
+def fun_l27_n965(x)
+ if (x < 1)
+ fun_l28_n756(x)
+ else
+ fun_l28_n700(x)
+ end
+end
+
+def fun_l27_n966(x)
+ if (x < 1)
+ fun_l28_n739(x)
+ else
+ fun_l28_n320(x)
+ end
+end
+
+def fun_l27_n967(x)
+ if (x < 1)
+ fun_l28_n693(x)
+ else
+ fun_l28_n101(x)
+ end
+end
+
+def fun_l27_n968(x)
+ if (x < 1)
+ fun_l28_n94(x)
+ else
+ fun_l28_n131(x)
+ end
+end
+
+def fun_l27_n969(x)
+ if (x < 1)
+ fun_l28_n142(x)
+ else
+ fun_l28_n839(x)
+ end
+end
+
+def fun_l27_n970(x)
+ if (x < 1)
+ fun_l28_n792(x)
+ else
+ fun_l28_n243(x)
+ end
+end
+
+def fun_l27_n971(x)
+ if (x < 1)
+ fun_l28_n268(x)
+ else
+ fun_l28_n525(x)
+ end
+end
+
+def fun_l27_n972(x)
+ if (x < 1)
+ fun_l28_n776(x)
+ else
+ fun_l28_n117(x)
+ end
+end
+
+def fun_l27_n973(x)
+ if (x < 1)
+ fun_l28_n401(x)
+ else
+ fun_l28_n571(x)
+ end
+end
+
+def fun_l27_n974(x)
+ if (x < 1)
+ fun_l28_n515(x)
+ else
+ fun_l28_n5(x)
+ end
+end
+
+def fun_l27_n975(x)
+ if (x < 1)
+ fun_l28_n225(x)
+ else
+ fun_l28_n956(x)
+ end
+end
+
+def fun_l27_n976(x)
+ if (x < 1)
+ fun_l28_n536(x)
+ else
+ fun_l28_n379(x)
+ end
+end
+
+def fun_l27_n977(x)
+ if (x < 1)
+ fun_l28_n942(x)
+ else
+ fun_l28_n665(x)
+ end
+end
+
+def fun_l27_n978(x)
+ if (x < 1)
+ fun_l28_n753(x)
+ else
+ fun_l28_n807(x)
+ end
+end
+
+def fun_l27_n979(x)
+ if (x < 1)
+ fun_l28_n206(x)
+ else
+ fun_l28_n548(x)
+ end
+end
+
+def fun_l27_n980(x)
+ if (x < 1)
+ fun_l28_n149(x)
+ else
+ fun_l28_n126(x)
+ end
+end
+
+def fun_l27_n981(x)
+ if (x < 1)
+ fun_l28_n829(x)
+ else
+ fun_l28_n384(x)
+ end
+end
+
+def fun_l27_n982(x)
+ if (x < 1)
+ fun_l28_n764(x)
+ else
+ fun_l28_n554(x)
+ end
+end
+
+def fun_l27_n983(x)
+ if (x < 1)
+ fun_l28_n868(x)
+ else
+ fun_l28_n933(x)
+ end
+end
+
+def fun_l27_n984(x)
+ if (x < 1)
+ fun_l28_n627(x)
+ else
+ fun_l28_n791(x)
+ end
+end
+
+def fun_l27_n985(x)
+ if (x < 1)
+ fun_l28_n796(x)
+ else
+ fun_l28_n352(x)
+ end
+end
+
+def fun_l27_n986(x)
+ if (x < 1)
+ fun_l28_n213(x)
+ else
+ fun_l28_n282(x)
+ end
+end
+
+def fun_l27_n987(x)
+ if (x < 1)
+ fun_l28_n403(x)
+ else
+ fun_l28_n504(x)
+ end
+end
+
+def fun_l27_n988(x)
+ if (x < 1)
+ fun_l28_n78(x)
+ else
+ fun_l28_n283(x)
+ end
+end
+
+def fun_l27_n989(x)
+ if (x < 1)
+ fun_l28_n364(x)
+ else
+ fun_l28_n802(x)
+ end
+end
+
+def fun_l27_n990(x)
+ if (x < 1)
+ fun_l28_n508(x)
+ else
+ fun_l28_n561(x)
+ end
+end
+
+def fun_l27_n991(x)
+ if (x < 1)
+ fun_l28_n922(x)
+ else
+ fun_l28_n901(x)
+ end
+end
+
+def fun_l27_n992(x)
+ if (x < 1)
+ fun_l28_n103(x)
+ else
+ fun_l28_n275(x)
+ end
+end
+
+def fun_l27_n993(x)
+ if (x < 1)
+ fun_l28_n566(x)
+ else
+ fun_l28_n88(x)
+ end
+end
+
+def fun_l27_n994(x)
+ if (x < 1)
+ fun_l28_n174(x)
+ else
+ fun_l28_n741(x)
+ end
+end
+
+def fun_l27_n995(x)
+ if (x < 1)
+ fun_l28_n40(x)
+ else
+ fun_l28_n426(x)
+ end
+end
+
+def fun_l27_n996(x)
+ if (x < 1)
+ fun_l28_n941(x)
+ else
+ fun_l28_n941(x)
+ end
+end
+
+def fun_l27_n997(x)
+ if (x < 1)
+ fun_l28_n651(x)
+ else
+ fun_l28_n301(x)
+ end
+end
+
+def fun_l27_n998(x)
+ if (x < 1)
+ fun_l28_n789(x)
+ else
+ fun_l28_n720(x)
+ end
+end
+
+def fun_l27_n999(x)
+ if (x < 1)
+ fun_l28_n536(x)
+ else
+ fun_l28_n903(x)
+ end
+end
+
+def fun_l28_n0(x)
+ if (x < 1)
+ fun_l29_n585(x)
+ else
+ fun_l29_n979(x)
+ end
+end
+
+def fun_l28_n1(x)
+ if (x < 1)
+ fun_l29_n182(x)
+ else
+ fun_l29_n513(x)
+ end
+end
+
+def fun_l28_n2(x)
+ if (x < 1)
+ fun_l29_n975(x)
+ else
+ fun_l29_n445(x)
+ end
+end
+
+def fun_l28_n3(x)
+ if (x < 1)
+ fun_l29_n7(x)
+ else
+ fun_l29_n958(x)
+ end
+end
+
+def fun_l28_n4(x)
+ if (x < 1)
+ fun_l29_n751(x)
+ else
+ fun_l29_n426(x)
+ end
+end
+
+def fun_l28_n5(x)
+ if (x < 1)
+ fun_l29_n29(x)
+ else
+ fun_l29_n840(x)
+ end
+end
+
+def fun_l28_n6(x)
+ if (x < 1)
+ fun_l29_n571(x)
+ else
+ fun_l29_n971(x)
+ end
+end
+
+def fun_l28_n7(x)
+ if (x < 1)
+ fun_l29_n384(x)
+ else
+ fun_l29_n495(x)
+ end
+end
+
+def fun_l28_n8(x)
+ if (x < 1)
+ fun_l29_n185(x)
+ else
+ fun_l29_n507(x)
+ end
+end
+
+def fun_l28_n9(x)
+ if (x < 1)
+ fun_l29_n496(x)
+ else
+ fun_l29_n241(x)
+ end
+end
+
+def fun_l28_n10(x)
+ if (x < 1)
+ fun_l29_n494(x)
+ else
+ fun_l29_n473(x)
+ end
+end
+
+def fun_l28_n11(x)
+ if (x < 1)
+ fun_l29_n851(x)
+ else
+ fun_l29_n809(x)
+ end
+end
+
+def fun_l28_n12(x)
+ if (x < 1)
+ fun_l29_n875(x)
+ else
+ fun_l29_n135(x)
+ end
+end
+
+def fun_l28_n13(x)
+ if (x < 1)
+ fun_l29_n957(x)
+ else
+ fun_l29_n337(x)
+ end
+end
+
+def fun_l28_n14(x)
+ if (x < 1)
+ fun_l29_n82(x)
+ else
+ fun_l29_n901(x)
+ end
+end
+
+def fun_l28_n15(x)
+ if (x < 1)
+ fun_l29_n608(x)
+ else
+ fun_l29_n334(x)
+ end
+end
+
+def fun_l28_n16(x)
+ if (x < 1)
+ fun_l29_n772(x)
+ else
+ fun_l29_n912(x)
+ end
+end
+
+def fun_l28_n17(x)
+ if (x < 1)
+ fun_l29_n971(x)
+ else
+ fun_l29_n127(x)
+ end
+end
+
+def fun_l28_n18(x)
+ if (x < 1)
+ fun_l29_n667(x)
+ else
+ fun_l29_n347(x)
+ end
+end
+
+def fun_l28_n19(x)
+ if (x < 1)
+ fun_l29_n453(x)
+ else
+ fun_l29_n39(x)
+ end
+end
+
+def fun_l28_n20(x)
+ if (x < 1)
+ fun_l29_n853(x)
+ else
+ fun_l29_n747(x)
+ end
+end
+
+def fun_l28_n21(x)
+ if (x < 1)
+ fun_l29_n433(x)
+ else
+ fun_l29_n298(x)
+ end
+end
+
+def fun_l28_n22(x)
+ if (x < 1)
+ fun_l29_n94(x)
+ else
+ fun_l29_n307(x)
+ end
+end
+
+def fun_l28_n23(x)
+ if (x < 1)
+ fun_l29_n424(x)
+ else
+ fun_l29_n599(x)
+ end
+end
+
+def fun_l28_n24(x)
+ if (x < 1)
+ fun_l29_n986(x)
+ else
+ fun_l29_n232(x)
+ end
+end
+
+def fun_l28_n25(x)
+ if (x < 1)
+ fun_l29_n658(x)
+ else
+ fun_l29_n744(x)
+ end
+end
+
+def fun_l28_n26(x)
+ if (x < 1)
+ fun_l29_n151(x)
+ else
+ fun_l29_n855(x)
+ end
+end
+
+def fun_l28_n27(x)
+ if (x < 1)
+ fun_l29_n416(x)
+ else
+ fun_l29_n763(x)
+ end
+end
+
+def fun_l28_n28(x)
+ if (x < 1)
+ fun_l29_n489(x)
+ else
+ fun_l29_n55(x)
+ end
+end
+
+def fun_l28_n29(x)
+ if (x < 1)
+ fun_l29_n714(x)
+ else
+ fun_l29_n489(x)
+ end
+end
+
+def fun_l28_n30(x)
+ if (x < 1)
+ fun_l29_n328(x)
+ else
+ fun_l29_n476(x)
+ end
+end
+
+def fun_l28_n31(x)
+ if (x < 1)
+ fun_l29_n317(x)
+ else
+ fun_l29_n836(x)
+ end
+end
+
+def fun_l28_n32(x)
+ if (x < 1)
+ fun_l29_n970(x)
+ else
+ fun_l29_n48(x)
+ end
+end
+
+def fun_l28_n33(x)
+ if (x < 1)
+ fun_l29_n159(x)
+ else
+ fun_l29_n449(x)
+ end
+end
+
+def fun_l28_n34(x)
+ if (x < 1)
+ fun_l29_n80(x)
+ else
+ fun_l29_n994(x)
+ end
+end
+
+def fun_l28_n35(x)
+ if (x < 1)
+ fun_l29_n413(x)
+ else
+ fun_l29_n718(x)
+ end
+end
+
+def fun_l28_n36(x)
+ if (x < 1)
+ fun_l29_n196(x)
+ else
+ fun_l29_n713(x)
+ end
+end
+
+def fun_l28_n37(x)
+ if (x < 1)
+ fun_l29_n815(x)
+ else
+ fun_l29_n595(x)
+ end
+end
+
+def fun_l28_n38(x)
+ if (x < 1)
+ fun_l29_n862(x)
+ else
+ fun_l29_n546(x)
+ end
+end
+
+def fun_l28_n39(x)
+ if (x < 1)
+ fun_l29_n875(x)
+ else
+ fun_l29_n456(x)
+ end
+end
+
+def fun_l28_n40(x)
+ if (x < 1)
+ fun_l29_n424(x)
+ else
+ fun_l29_n445(x)
+ end
+end
+
+def fun_l28_n41(x)
+ if (x < 1)
+ fun_l29_n743(x)
+ else
+ fun_l29_n498(x)
+ end
+end
+
+def fun_l28_n42(x)
+ if (x < 1)
+ fun_l29_n950(x)
+ else
+ fun_l29_n497(x)
+ end
+end
+
+def fun_l28_n43(x)
+ if (x < 1)
+ fun_l29_n792(x)
+ else
+ fun_l29_n487(x)
+ end
+end
+
+def fun_l28_n44(x)
+ if (x < 1)
+ fun_l29_n421(x)
+ else
+ fun_l29_n484(x)
+ end
+end
+
+def fun_l28_n45(x)
+ if (x < 1)
+ fun_l29_n862(x)
+ else
+ fun_l29_n824(x)
+ end
+end
+
+def fun_l28_n46(x)
+ if (x < 1)
+ fun_l29_n163(x)
+ else
+ fun_l29_n184(x)
+ end
+end
+
+def fun_l28_n47(x)
+ if (x < 1)
+ fun_l29_n374(x)
+ else
+ fun_l29_n954(x)
+ end
+end
+
+def fun_l28_n48(x)
+ if (x < 1)
+ fun_l29_n422(x)
+ else
+ fun_l29_n223(x)
+ end
+end
+
+def fun_l28_n49(x)
+ if (x < 1)
+ fun_l29_n885(x)
+ else
+ fun_l29_n527(x)
+ end
+end
+
+def fun_l28_n50(x)
+ if (x < 1)
+ fun_l29_n694(x)
+ else
+ fun_l29_n702(x)
+ end
+end
+
+def fun_l28_n51(x)
+ if (x < 1)
+ fun_l29_n273(x)
+ else
+ fun_l29_n504(x)
+ end
+end
+
+def fun_l28_n52(x)
+ if (x < 1)
+ fun_l29_n330(x)
+ else
+ fun_l29_n267(x)
+ end
+end
+
+def fun_l28_n53(x)
+ if (x < 1)
+ fun_l29_n103(x)
+ else
+ fun_l29_n407(x)
+ end
+end
+
+def fun_l28_n54(x)
+ if (x < 1)
+ fun_l29_n210(x)
+ else
+ fun_l29_n645(x)
+ end
+end
+
+def fun_l28_n55(x)
+ if (x < 1)
+ fun_l29_n871(x)
+ else
+ fun_l29_n641(x)
+ end
+end
+
+def fun_l28_n56(x)
+ if (x < 1)
+ fun_l29_n233(x)
+ else
+ fun_l29_n715(x)
+ end
+end
+
+def fun_l28_n57(x)
+ if (x < 1)
+ fun_l29_n742(x)
+ else
+ fun_l29_n104(x)
+ end
+end
+
+def fun_l28_n58(x)
+ if (x < 1)
+ fun_l29_n713(x)
+ else
+ fun_l29_n919(x)
+ end
+end
+
+def fun_l28_n59(x)
+ if (x < 1)
+ fun_l29_n192(x)
+ else
+ fun_l29_n988(x)
+ end
+end
+
+def fun_l28_n60(x)
+ if (x < 1)
+ fun_l29_n533(x)
+ else
+ fun_l29_n972(x)
+ end
+end
+
+def fun_l28_n61(x)
+ if (x < 1)
+ fun_l29_n286(x)
+ else
+ fun_l29_n129(x)
+ end
+end
+
+def fun_l28_n62(x)
+ if (x < 1)
+ fun_l29_n208(x)
+ else
+ fun_l29_n715(x)
+ end
+end
+
+def fun_l28_n63(x)
+ if (x < 1)
+ fun_l29_n588(x)
+ else
+ fun_l29_n975(x)
+ end
+end
+
+def fun_l28_n64(x)
+ if (x < 1)
+ fun_l29_n202(x)
+ else
+ fun_l29_n784(x)
+ end
+end
+
+def fun_l28_n65(x)
+ if (x < 1)
+ fun_l29_n531(x)
+ else
+ fun_l29_n758(x)
+ end
+end
+
+def fun_l28_n66(x)
+ if (x < 1)
+ fun_l29_n102(x)
+ else
+ fun_l29_n23(x)
+ end
+end
+
+def fun_l28_n67(x)
+ if (x < 1)
+ fun_l29_n546(x)
+ else
+ fun_l29_n964(x)
+ end
+end
+
+def fun_l28_n68(x)
+ if (x < 1)
+ fun_l29_n31(x)
+ else
+ fun_l29_n223(x)
+ end
+end
+
+def fun_l28_n69(x)
+ if (x < 1)
+ fun_l29_n344(x)
+ else
+ fun_l29_n250(x)
+ end
+end
+
+def fun_l28_n70(x)
+ if (x < 1)
+ fun_l29_n910(x)
+ else
+ fun_l29_n880(x)
+ end
+end
+
+def fun_l28_n71(x)
+ if (x < 1)
+ fun_l29_n181(x)
+ else
+ fun_l29_n950(x)
+ end
+end
+
+def fun_l28_n72(x)
+ if (x < 1)
+ fun_l29_n405(x)
+ else
+ fun_l29_n105(x)
+ end
+end
+
+def fun_l28_n73(x)
+ if (x < 1)
+ fun_l29_n419(x)
+ else
+ fun_l29_n120(x)
+ end
+end
+
+def fun_l28_n74(x)
+ if (x < 1)
+ fun_l29_n485(x)
+ else
+ fun_l29_n616(x)
+ end
+end
+
+def fun_l28_n75(x)
+ if (x < 1)
+ fun_l29_n690(x)
+ else
+ fun_l29_n581(x)
+ end
+end
+
+def fun_l28_n76(x)
+ if (x < 1)
+ fun_l29_n68(x)
+ else
+ fun_l29_n47(x)
+ end
+end
+
+def fun_l28_n77(x)
+ if (x < 1)
+ fun_l29_n324(x)
+ else
+ fun_l29_n102(x)
+ end
+end
+
+def fun_l28_n78(x)
+ if (x < 1)
+ fun_l29_n416(x)
+ else
+ fun_l29_n965(x)
+ end
+end
+
+def fun_l28_n79(x)
+ if (x < 1)
+ fun_l29_n584(x)
+ else
+ fun_l29_n901(x)
+ end
+end
+
+def fun_l28_n80(x)
+ if (x < 1)
+ fun_l29_n914(x)
+ else
+ fun_l29_n890(x)
+ end
+end
+
+def fun_l28_n81(x)
+ if (x < 1)
+ fun_l29_n85(x)
+ else
+ fun_l29_n822(x)
+ end
+end
+
+def fun_l28_n82(x)
+ if (x < 1)
+ fun_l29_n311(x)
+ else
+ fun_l29_n621(x)
+ end
+end
+
+def fun_l28_n83(x)
+ if (x < 1)
+ fun_l29_n361(x)
+ else
+ fun_l29_n336(x)
+ end
+end
+
+def fun_l28_n84(x)
+ if (x < 1)
+ fun_l29_n642(x)
+ else
+ fun_l29_n495(x)
+ end
+end
+
+def fun_l28_n85(x)
+ if (x < 1)
+ fun_l29_n688(x)
+ else
+ fun_l29_n20(x)
+ end
+end
+
+def fun_l28_n86(x)
+ if (x < 1)
+ fun_l29_n805(x)
+ else
+ fun_l29_n363(x)
+ end
+end
+
+def fun_l28_n87(x)
+ if (x < 1)
+ fun_l29_n215(x)
+ else
+ fun_l29_n530(x)
+ end
+end
+
+def fun_l28_n88(x)
+ if (x < 1)
+ fun_l29_n355(x)
+ else
+ fun_l29_n820(x)
+ end
+end
+
+def fun_l28_n89(x)
+ if (x < 1)
+ fun_l29_n593(x)
+ else
+ fun_l29_n443(x)
+ end
+end
+
+def fun_l28_n90(x)
+ if (x < 1)
+ fun_l29_n917(x)
+ else
+ fun_l29_n920(x)
+ end
+end
+
+def fun_l28_n91(x)
+ if (x < 1)
+ fun_l29_n571(x)
+ else
+ fun_l29_n545(x)
+ end
+end
+
+def fun_l28_n92(x)
+ if (x < 1)
+ fun_l29_n871(x)
+ else
+ fun_l29_n497(x)
+ end
+end
+
+def fun_l28_n93(x)
+ if (x < 1)
+ fun_l29_n433(x)
+ else
+ fun_l29_n899(x)
+ end
+end
+
+def fun_l28_n94(x)
+ if (x < 1)
+ fun_l29_n139(x)
+ else
+ fun_l29_n836(x)
+ end
+end
+
+def fun_l28_n95(x)
+ if (x < 1)
+ fun_l29_n265(x)
+ else
+ fun_l29_n297(x)
+ end
+end
+
+def fun_l28_n96(x)
+ if (x < 1)
+ fun_l29_n554(x)
+ else
+ fun_l29_n345(x)
+ end
+end
+
+def fun_l28_n97(x)
+ if (x < 1)
+ fun_l29_n674(x)
+ else
+ fun_l29_n632(x)
+ end
+end
+
+def fun_l28_n98(x)
+ if (x < 1)
+ fun_l29_n287(x)
+ else
+ fun_l29_n606(x)
+ end
+end
+
+def fun_l28_n99(x)
+ if (x < 1)
+ fun_l29_n288(x)
+ else
+ fun_l29_n751(x)
+ end
+end
+
+def fun_l28_n100(x)
+ if (x < 1)
+ fun_l29_n673(x)
+ else
+ fun_l29_n461(x)
+ end
+end
+
+def fun_l28_n101(x)
+ if (x < 1)
+ fun_l29_n633(x)
+ else
+ fun_l29_n688(x)
+ end
+end
+
+def fun_l28_n102(x)
+ if (x < 1)
+ fun_l29_n487(x)
+ else
+ fun_l29_n879(x)
+ end
+end
+
+def fun_l28_n103(x)
+ if (x < 1)
+ fun_l29_n12(x)
+ else
+ fun_l29_n808(x)
+ end
+end
+
+def fun_l28_n104(x)
+ if (x < 1)
+ fun_l29_n560(x)
+ else
+ fun_l29_n174(x)
+ end
+end
+
+def fun_l28_n105(x)
+ if (x < 1)
+ fun_l29_n379(x)
+ else
+ fun_l29_n509(x)
+ end
+end
+
+def fun_l28_n106(x)
+ if (x < 1)
+ fun_l29_n848(x)
+ else
+ fun_l29_n783(x)
+ end
+end
+
+def fun_l28_n107(x)
+ if (x < 1)
+ fun_l29_n564(x)
+ else
+ fun_l29_n584(x)
+ end
+end
+
+def fun_l28_n108(x)
+ if (x < 1)
+ fun_l29_n251(x)
+ else
+ fun_l29_n77(x)
+ end
+end
+
+def fun_l28_n109(x)
+ if (x < 1)
+ fun_l29_n588(x)
+ else
+ fun_l29_n351(x)
+ end
+end
+
+def fun_l28_n110(x)
+ if (x < 1)
+ fun_l29_n43(x)
+ else
+ fun_l29_n102(x)
+ end
+end
+
+def fun_l28_n111(x)
+ if (x < 1)
+ fun_l29_n33(x)
+ else
+ fun_l29_n168(x)
+ end
+end
+
+def fun_l28_n112(x)
+ if (x < 1)
+ fun_l29_n977(x)
+ else
+ fun_l29_n832(x)
+ end
+end
+
+def fun_l28_n113(x)
+ if (x < 1)
+ fun_l29_n189(x)
+ else
+ fun_l29_n657(x)
+ end
+end
+
+def fun_l28_n114(x)
+ if (x < 1)
+ fun_l29_n833(x)
+ else
+ fun_l29_n237(x)
+ end
+end
+
+def fun_l28_n115(x)
+ if (x < 1)
+ fun_l29_n621(x)
+ else
+ fun_l29_n675(x)
+ end
+end
+
+def fun_l28_n116(x)
+ if (x < 1)
+ fun_l29_n944(x)
+ else
+ fun_l29_n469(x)
+ end
+end
+
+def fun_l28_n117(x)
+ if (x < 1)
+ fun_l29_n2(x)
+ else
+ fun_l29_n959(x)
+ end
+end
+
+def fun_l28_n118(x)
+ if (x < 1)
+ fun_l29_n260(x)
+ else
+ fun_l29_n580(x)
+ end
+end
+
+def fun_l28_n119(x)
+ if (x < 1)
+ fun_l29_n464(x)
+ else
+ fun_l29_n411(x)
+ end
+end
+
+def fun_l28_n120(x)
+ if (x < 1)
+ fun_l29_n973(x)
+ else
+ fun_l29_n837(x)
+ end
+end
+
+def fun_l28_n121(x)
+ if (x < 1)
+ fun_l29_n511(x)
+ else
+ fun_l29_n896(x)
+ end
+end
+
+def fun_l28_n122(x)
+ if (x < 1)
+ fun_l29_n621(x)
+ else
+ fun_l29_n952(x)
+ end
+end
+
+def fun_l28_n123(x)
+ if (x < 1)
+ fun_l29_n250(x)
+ else
+ fun_l29_n551(x)
+ end
+end
+
+def fun_l28_n124(x)
+ if (x < 1)
+ fun_l29_n761(x)
+ else
+ fun_l29_n659(x)
+ end
+end
+
+def fun_l28_n125(x)
+ if (x < 1)
+ fun_l29_n43(x)
+ else
+ fun_l29_n265(x)
+ end
+end
+
+def fun_l28_n126(x)
+ if (x < 1)
+ fun_l29_n794(x)
+ else
+ fun_l29_n953(x)
+ end
+end
+
+def fun_l28_n127(x)
+ if (x < 1)
+ fun_l29_n858(x)
+ else
+ fun_l29_n582(x)
+ end
+end
+
+def fun_l28_n128(x)
+ if (x < 1)
+ fun_l29_n762(x)
+ else
+ fun_l29_n710(x)
+ end
+end
+
+def fun_l28_n129(x)
+ if (x < 1)
+ fun_l29_n541(x)
+ else
+ fun_l29_n182(x)
+ end
+end
+
+def fun_l28_n130(x)
+ if (x < 1)
+ fun_l29_n325(x)
+ else
+ fun_l29_n318(x)
+ end
+end
+
+def fun_l28_n131(x)
+ if (x < 1)
+ fun_l29_n751(x)
+ else
+ fun_l29_n499(x)
+ end
+end
+
+def fun_l28_n132(x)
+ if (x < 1)
+ fun_l29_n185(x)
+ else
+ fun_l29_n547(x)
+ end
+end
+
+def fun_l28_n133(x)
+ if (x < 1)
+ fun_l29_n155(x)
+ else
+ fun_l29_n691(x)
+ end
+end
+
+def fun_l28_n134(x)
+ if (x < 1)
+ fun_l29_n326(x)
+ else
+ fun_l29_n950(x)
+ end
+end
+
+def fun_l28_n135(x)
+ if (x < 1)
+ fun_l29_n782(x)
+ else
+ fun_l29_n968(x)
+ end
+end
+
+def fun_l28_n136(x)
+ if (x < 1)
+ fun_l29_n349(x)
+ else
+ fun_l29_n668(x)
+ end
+end
+
+def fun_l28_n137(x)
+ if (x < 1)
+ fun_l29_n897(x)
+ else
+ fun_l29_n243(x)
+ end
+end
+
+def fun_l28_n138(x)
+ if (x < 1)
+ fun_l29_n994(x)
+ else
+ fun_l29_n84(x)
+ end
+end
+
+def fun_l28_n139(x)
+ if (x < 1)
+ fun_l29_n95(x)
+ else
+ fun_l29_n705(x)
+ end
+end
+
+def fun_l28_n140(x)
+ if (x < 1)
+ fun_l29_n864(x)
+ else
+ fun_l29_n636(x)
+ end
+end
+
+def fun_l28_n141(x)
+ if (x < 1)
+ fun_l29_n587(x)
+ else
+ fun_l29_n908(x)
+ end
+end
+
+def fun_l28_n142(x)
+ if (x < 1)
+ fun_l29_n255(x)
+ else
+ fun_l29_n633(x)
+ end
+end
+
+def fun_l28_n143(x)
+ if (x < 1)
+ fun_l29_n142(x)
+ else
+ fun_l29_n305(x)
+ end
+end
+
+def fun_l28_n144(x)
+ if (x < 1)
+ fun_l29_n735(x)
+ else
+ fun_l29_n637(x)
+ end
+end
+
+def fun_l28_n145(x)
+ if (x < 1)
+ fun_l29_n637(x)
+ else
+ fun_l29_n975(x)
+ end
+end
+
+def fun_l28_n146(x)
+ if (x < 1)
+ fun_l29_n560(x)
+ else
+ fun_l29_n534(x)
+ end
+end
+
+def fun_l28_n147(x)
+ if (x < 1)
+ fun_l29_n829(x)
+ else
+ fun_l29_n344(x)
+ end
+end
+
+def fun_l28_n148(x)
+ if (x < 1)
+ fun_l29_n38(x)
+ else
+ fun_l29_n339(x)
+ end
+end
+
+def fun_l28_n149(x)
+ if (x < 1)
+ fun_l29_n178(x)
+ else
+ fun_l29_n178(x)
+ end
+end
+
+def fun_l28_n150(x)
+ if (x < 1)
+ fun_l29_n434(x)
+ else
+ fun_l29_n677(x)
+ end
+end
+
+def fun_l28_n151(x)
+ if (x < 1)
+ fun_l29_n910(x)
+ else
+ fun_l29_n230(x)
+ end
+end
+
+def fun_l28_n152(x)
+ if (x < 1)
+ fun_l29_n750(x)
+ else
+ fun_l29_n534(x)
+ end
+end
+
+def fun_l28_n153(x)
+ if (x < 1)
+ fun_l29_n550(x)
+ else
+ fun_l29_n757(x)
+ end
+end
+
+def fun_l28_n154(x)
+ if (x < 1)
+ fun_l29_n832(x)
+ else
+ fun_l29_n177(x)
+ end
+end
+
+def fun_l28_n155(x)
+ if (x < 1)
+ fun_l29_n724(x)
+ else
+ fun_l29_n669(x)
+ end
+end
+
+def fun_l28_n156(x)
+ if (x < 1)
+ fun_l29_n362(x)
+ else
+ fun_l29_n882(x)
+ end
+end
+
+def fun_l28_n157(x)
+ if (x < 1)
+ fun_l29_n164(x)
+ else
+ fun_l29_n919(x)
+ end
+end
+
+def fun_l28_n158(x)
+ if (x < 1)
+ fun_l29_n300(x)
+ else
+ fun_l29_n343(x)
+ end
+end
+
+def fun_l28_n159(x)
+ if (x < 1)
+ fun_l29_n395(x)
+ else
+ fun_l29_n535(x)
+ end
+end
+
+def fun_l28_n160(x)
+ if (x < 1)
+ fun_l29_n127(x)
+ else
+ fun_l29_n666(x)
+ end
+end
+
+def fun_l28_n161(x)
+ if (x < 1)
+ fun_l29_n207(x)
+ else
+ fun_l29_n935(x)
+ end
+end
+
+def fun_l28_n162(x)
+ if (x < 1)
+ fun_l29_n865(x)
+ else
+ fun_l29_n692(x)
+ end
+end
+
+def fun_l28_n163(x)
+ if (x < 1)
+ fun_l29_n429(x)
+ else
+ fun_l29_n329(x)
+ end
+end
+
+def fun_l28_n164(x)
+ if (x < 1)
+ fun_l29_n874(x)
+ else
+ fun_l29_n650(x)
+ end
+end
+
+def fun_l28_n165(x)
+ if (x < 1)
+ fun_l29_n985(x)
+ else
+ fun_l29_n488(x)
+ end
+end
+
+def fun_l28_n166(x)
+ if (x < 1)
+ fun_l29_n425(x)
+ else
+ fun_l29_n297(x)
+ end
+end
+
+def fun_l28_n167(x)
+ if (x < 1)
+ fun_l29_n468(x)
+ else
+ fun_l29_n331(x)
+ end
+end
+
+def fun_l28_n168(x)
+ if (x < 1)
+ fun_l29_n991(x)
+ else
+ fun_l29_n399(x)
+ end
+end
+
+def fun_l28_n169(x)
+ if (x < 1)
+ fun_l29_n402(x)
+ else
+ fun_l29_n931(x)
+ end
+end
+
+def fun_l28_n170(x)
+ if (x < 1)
+ fun_l29_n984(x)
+ else
+ fun_l29_n586(x)
+ end
+end
+
+def fun_l28_n171(x)
+ if (x < 1)
+ fun_l29_n305(x)
+ else
+ fun_l29_n638(x)
+ end
+end
+
+def fun_l28_n172(x)
+ if (x < 1)
+ fun_l29_n251(x)
+ else
+ fun_l29_n94(x)
+ end
+end
+
+def fun_l28_n173(x)
+ if (x < 1)
+ fun_l29_n225(x)
+ else
+ fun_l29_n466(x)
+ end
+end
+
+def fun_l28_n174(x)
+ if (x < 1)
+ fun_l29_n643(x)
+ else
+ fun_l29_n974(x)
+ end
+end
+
+def fun_l28_n175(x)
+ if (x < 1)
+ fun_l29_n634(x)
+ else
+ fun_l29_n321(x)
+ end
+end
+
+def fun_l28_n176(x)
+ if (x < 1)
+ fun_l29_n269(x)
+ else
+ fun_l29_n237(x)
+ end
+end
+
+def fun_l28_n177(x)
+ if (x < 1)
+ fun_l29_n649(x)
+ else
+ fun_l29_n661(x)
+ end
+end
+
+def fun_l28_n178(x)
+ if (x < 1)
+ fun_l29_n919(x)
+ else
+ fun_l29_n997(x)
+ end
+end
+
+def fun_l28_n179(x)
+ if (x < 1)
+ fun_l29_n634(x)
+ else
+ fun_l29_n967(x)
+ end
+end
+
+def fun_l28_n180(x)
+ if (x < 1)
+ fun_l29_n798(x)
+ else
+ fun_l29_n733(x)
+ end
+end
+
+def fun_l28_n181(x)
+ if (x < 1)
+ fun_l29_n975(x)
+ else
+ fun_l29_n28(x)
+ end
+end
+
+def fun_l28_n182(x)
+ if (x < 1)
+ fun_l29_n973(x)
+ else
+ fun_l29_n616(x)
+ end
+end
+
+def fun_l28_n183(x)
+ if (x < 1)
+ fun_l29_n360(x)
+ else
+ fun_l29_n18(x)
+ end
+end
+
+def fun_l28_n184(x)
+ if (x < 1)
+ fun_l29_n281(x)
+ else
+ fun_l29_n271(x)
+ end
+end
+
+def fun_l28_n185(x)
+ if (x < 1)
+ fun_l29_n216(x)
+ else
+ fun_l29_n193(x)
+ end
+end
+
+def fun_l28_n186(x)
+ if (x < 1)
+ fun_l29_n262(x)
+ else
+ fun_l29_n509(x)
+ end
+end
+
+def fun_l28_n187(x)
+ if (x < 1)
+ fun_l29_n160(x)
+ else
+ fun_l29_n770(x)
+ end
+end
+
+def fun_l28_n188(x)
+ if (x < 1)
+ fun_l29_n411(x)
+ else
+ fun_l29_n605(x)
+ end
+end
+
+def fun_l28_n189(x)
+ if (x < 1)
+ fun_l29_n397(x)
+ else
+ fun_l29_n205(x)
+ end
+end
+
+def fun_l28_n190(x)
+ if (x < 1)
+ fun_l29_n529(x)
+ else
+ fun_l29_n545(x)
+ end
+end
+
+def fun_l28_n191(x)
+ if (x < 1)
+ fun_l29_n528(x)
+ else
+ fun_l29_n472(x)
+ end
+end
+
+def fun_l28_n192(x)
+ if (x < 1)
+ fun_l29_n843(x)
+ else
+ fun_l29_n88(x)
+ end
+end
+
+def fun_l28_n193(x)
+ if (x < 1)
+ fun_l29_n827(x)
+ else
+ fun_l29_n6(x)
+ end
+end
+
+def fun_l28_n194(x)
+ if (x < 1)
+ fun_l29_n567(x)
+ else
+ fun_l29_n622(x)
+ end
+end
+
+def fun_l28_n195(x)
+ if (x < 1)
+ fun_l29_n799(x)
+ else
+ fun_l29_n605(x)
+ end
+end
+
+def fun_l28_n196(x)
+ if (x < 1)
+ fun_l29_n930(x)
+ else
+ fun_l29_n643(x)
+ end
+end
+
+def fun_l28_n197(x)
+ if (x < 1)
+ fun_l29_n445(x)
+ else
+ fun_l29_n226(x)
+ end
+end
+
+def fun_l28_n198(x)
+ if (x < 1)
+ fun_l29_n453(x)
+ else
+ fun_l29_n941(x)
+ end
+end
+
+def fun_l28_n199(x)
+ if (x < 1)
+ fun_l29_n40(x)
+ else
+ fun_l29_n602(x)
+ end
+end
+
+def fun_l28_n200(x)
+ if (x < 1)
+ fun_l29_n804(x)
+ else
+ fun_l29_n355(x)
+ end
+end
+
+def fun_l28_n201(x)
+ if (x < 1)
+ fun_l29_n894(x)
+ else
+ fun_l29_n749(x)
+ end
+end
+
+def fun_l28_n202(x)
+ if (x < 1)
+ fun_l29_n105(x)
+ else
+ fun_l29_n182(x)
+ end
+end
+
+def fun_l28_n203(x)
+ if (x < 1)
+ fun_l29_n106(x)
+ else
+ fun_l29_n670(x)
+ end
+end
+
+def fun_l28_n204(x)
+ if (x < 1)
+ fun_l29_n897(x)
+ else
+ fun_l29_n337(x)
+ end
+end
+
+def fun_l28_n205(x)
+ if (x < 1)
+ fun_l29_n149(x)
+ else
+ fun_l29_n822(x)
+ end
+end
+
+def fun_l28_n206(x)
+ if (x < 1)
+ fun_l29_n2(x)
+ else
+ fun_l29_n370(x)
+ end
+end
+
+def fun_l28_n207(x)
+ if (x < 1)
+ fun_l29_n430(x)
+ else
+ fun_l29_n262(x)
+ end
+end
+
+def fun_l28_n208(x)
+ if (x < 1)
+ fun_l29_n275(x)
+ else
+ fun_l29_n156(x)
+ end
+end
+
+def fun_l28_n209(x)
+ if (x < 1)
+ fun_l29_n677(x)
+ else
+ fun_l29_n620(x)
+ end
+end
+
+def fun_l28_n210(x)
+ if (x < 1)
+ fun_l29_n732(x)
+ else
+ fun_l29_n533(x)
+ end
+end
+
+def fun_l28_n211(x)
+ if (x < 1)
+ fun_l29_n934(x)
+ else
+ fun_l29_n334(x)
+ end
+end
+
+def fun_l28_n212(x)
+ if (x < 1)
+ fun_l29_n656(x)
+ else
+ fun_l29_n889(x)
+ end
+end
+
+def fun_l28_n213(x)
+ if (x < 1)
+ fun_l29_n210(x)
+ else
+ fun_l29_n225(x)
+ end
+end
+
+def fun_l28_n214(x)
+ if (x < 1)
+ fun_l29_n496(x)
+ else
+ fun_l29_n901(x)
+ end
+end
+
+def fun_l28_n215(x)
+ if (x < 1)
+ fun_l29_n190(x)
+ else
+ fun_l29_n254(x)
+ end
+end
+
+def fun_l28_n216(x)
+ if (x < 1)
+ fun_l29_n708(x)
+ else
+ fun_l29_n680(x)
+ end
+end
+
+def fun_l28_n217(x)
+ if (x < 1)
+ fun_l29_n616(x)
+ else
+ fun_l29_n942(x)
+ end
+end
+
+def fun_l28_n218(x)
+ if (x < 1)
+ fun_l29_n515(x)
+ else
+ fun_l29_n269(x)
+ end
+end
+
+def fun_l28_n219(x)
+ if (x < 1)
+ fun_l29_n422(x)
+ else
+ fun_l29_n644(x)
+ end
+end
+
+def fun_l28_n220(x)
+ if (x < 1)
+ fun_l29_n114(x)
+ else
+ fun_l29_n566(x)
+ end
+end
+
+def fun_l28_n221(x)
+ if (x < 1)
+ fun_l29_n750(x)
+ else
+ fun_l29_n799(x)
+ end
+end
+
+def fun_l28_n222(x)
+ if (x < 1)
+ fun_l29_n121(x)
+ else
+ fun_l29_n556(x)
+ end
+end
+
+def fun_l28_n223(x)
+ if (x < 1)
+ fun_l29_n161(x)
+ else
+ fun_l29_n422(x)
+ end
+end
+
+def fun_l28_n224(x)
+ if (x < 1)
+ fun_l29_n779(x)
+ else
+ fun_l29_n214(x)
+ end
+end
+
+def fun_l28_n225(x)
+ if (x < 1)
+ fun_l29_n355(x)
+ else
+ fun_l29_n10(x)
+ end
+end
+
+def fun_l28_n226(x)
+ if (x < 1)
+ fun_l29_n923(x)
+ else
+ fun_l29_n672(x)
+ end
+end
+
+def fun_l28_n227(x)
+ if (x < 1)
+ fun_l29_n578(x)
+ else
+ fun_l29_n809(x)
+ end
+end
+
+def fun_l28_n228(x)
+ if (x < 1)
+ fun_l29_n277(x)
+ else
+ fun_l29_n979(x)
+ end
+end
+
+def fun_l28_n229(x)
+ if (x < 1)
+ fun_l29_n248(x)
+ else
+ fun_l29_n731(x)
+ end
+end
+
+def fun_l28_n230(x)
+ if (x < 1)
+ fun_l29_n374(x)
+ else
+ fun_l29_n675(x)
+ end
+end
+
+def fun_l28_n231(x)
+ if (x < 1)
+ fun_l29_n339(x)
+ else
+ fun_l29_n62(x)
+ end
+end
+
+def fun_l28_n232(x)
+ if (x < 1)
+ fun_l29_n350(x)
+ else
+ fun_l29_n51(x)
+ end
+end
+
+def fun_l28_n233(x)
+ if (x < 1)
+ fun_l29_n606(x)
+ else
+ fun_l29_n460(x)
+ end
+end
+
+def fun_l28_n234(x)
+ if (x < 1)
+ fun_l29_n266(x)
+ else
+ fun_l29_n843(x)
+ end
+end
+
+def fun_l28_n235(x)
+ if (x < 1)
+ fun_l29_n762(x)
+ else
+ fun_l29_n1(x)
+ end
+end
+
+def fun_l28_n236(x)
+ if (x < 1)
+ fun_l29_n405(x)
+ else
+ fun_l29_n867(x)
+ end
+end
+
+def fun_l28_n237(x)
+ if (x < 1)
+ fun_l29_n62(x)
+ else
+ fun_l29_n288(x)
+ end
+end
+
+def fun_l28_n238(x)
+ if (x < 1)
+ fun_l29_n120(x)
+ else
+ fun_l29_n346(x)
+ end
+end
+
+def fun_l28_n239(x)
+ if (x < 1)
+ fun_l29_n789(x)
+ else
+ fun_l29_n633(x)
+ end
+end
+
+def fun_l28_n240(x)
+ if (x < 1)
+ fun_l29_n467(x)
+ else
+ fun_l29_n150(x)
+ end
+end
+
+def fun_l28_n241(x)
+ if (x < 1)
+ fun_l29_n487(x)
+ else
+ fun_l29_n671(x)
+ end
+end
+
+def fun_l28_n242(x)
+ if (x < 1)
+ fun_l29_n147(x)
+ else
+ fun_l29_n636(x)
+ end
+end
+
+def fun_l28_n243(x)
+ if (x < 1)
+ fun_l29_n710(x)
+ else
+ fun_l29_n196(x)
+ end
+end
+
+def fun_l28_n244(x)
+ if (x < 1)
+ fun_l29_n943(x)
+ else
+ fun_l29_n768(x)
+ end
+end
+
+def fun_l28_n245(x)
+ if (x < 1)
+ fun_l29_n670(x)
+ else
+ fun_l29_n522(x)
+ end
+end
+
+def fun_l28_n246(x)
+ if (x < 1)
+ fun_l29_n12(x)
+ else
+ fun_l29_n459(x)
+ end
+end
+
+def fun_l28_n247(x)
+ if (x < 1)
+ fun_l29_n901(x)
+ else
+ fun_l29_n726(x)
+ end
+end
+
+def fun_l28_n248(x)
+ if (x < 1)
+ fun_l29_n824(x)
+ else
+ fun_l29_n327(x)
+ end
+end
+
+def fun_l28_n249(x)
+ if (x < 1)
+ fun_l29_n327(x)
+ else
+ fun_l29_n343(x)
+ end
+end
+
+def fun_l28_n250(x)
+ if (x < 1)
+ fun_l29_n242(x)
+ else
+ fun_l29_n764(x)
+ end
+end
+
+def fun_l28_n251(x)
+ if (x < 1)
+ fun_l29_n780(x)
+ else
+ fun_l29_n117(x)
+ end
+end
+
+def fun_l28_n252(x)
+ if (x < 1)
+ fun_l29_n309(x)
+ else
+ fun_l29_n821(x)
+ end
+end
+
+def fun_l28_n253(x)
+ if (x < 1)
+ fun_l29_n250(x)
+ else
+ fun_l29_n933(x)
+ end
+end
+
+def fun_l28_n254(x)
+ if (x < 1)
+ fun_l29_n470(x)
+ else
+ fun_l29_n808(x)
+ end
+end
+
+def fun_l28_n255(x)
+ if (x < 1)
+ fun_l29_n425(x)
+ else
+ fun_l29_n800(x)
+ end
+end
+
+def fun_l28_n256(x)
+ if (x < 1)
+ fun_l29_n913(x)
+ else
+ fun_l29_n199(x)
+ end
+end
+
+def fun_l28_n257(x)
+ if (x < 1)
+ fun_l29_n25(x)
+ else
+ fun_l29_n412(x)
+ end
+end
+
+def fun_l28_n258(x)
+ if (x < 1)
+ fun_l29_n194(x)
+ else
+ fun_l29_n606(x)
+ end
+end
+
+def fun_l28_n259(x)
+ if (x < 1)
+ fun_l29_n653(x)
+ else
+ fun_l29_n72(x)
+ end
+end
+
+def fun_l28_n260(x)
+ if (x < 1)
+ fun_l29_n198(x)
+ else
+ fun_l29_n742(x)
+ end
+end
+
+def fun_l28_n261(x)
+ if (x < 1)
+ fun_l29_n452(x)
+ else
+ fun_l29_n522(x)
+ end
+end
+
+def fun_l28_n262(x)
+ if (x < 1)
+ fun_l29_n214(x)
+ else
+ fun_l29_n131(x)
+ end
+end
+
+def fun_l28_n263(x)
+ if (x < 1)
+ fun_l29_n481(x)
+ else
+ fun_l29_n848(x)
+ end
+end
+
+def fun_l28_n264(x)
+ if (x < 1)
+ fun_l29_n147(x)
+ else
+ fun_l29_n187(x)
+ end
+end
+
+def fun_l28_n265(x)
+ if (x < 1)
+ fun_l29_n476(x)
+ else
+ fun_l29_n859(x)
+ end
+end
+
+def fun_l28_n266(x)
+ if (x < 1)
+ fun_l29_n130(x)
+ else
+ fun_l29_n356(x)
+ end
+end
+
+def fun_l28_n267(x)
+ if (x < 1)
+ fun_l29_n427(x)
+ else
+ fun_l29_n578(x)
+ end
+end
+
+def fun_l28_n268(x)
+ if (x < 1)
+ fun_l29_n810(x)
+ else
+ fun_l29_n483(x)
+ end
+end
+
+def fun_l28_n269(x)
+ if (x < 1)
+ fun_l29_n496(x)
+ else
+ fun_l29_n548(x)
+ end
+end
+
+def fun_l28_n270(x)
+ if (x < 1)
+ fun_l29_n159(x)
+ else
+ fun_l29_n184(x)
+ end
+end
+
+def fun_l28_n271(x)
+ if (x < 1)
+ fun_l29_n407(x)
+ else
+ fun_l29_n855(x)
+ end
+end
+
+def fun_l28_n272(x)
+ if (x < 1)
+ fun_l29_n41(x)
+ else
+ fun_l29_n493(x)
+ end
+end
+
+def fun_l28_n273(x)
+ if (x < 1)
+ fun_l29_n853(x)
+ else
+ fun_l29_n711(x)
+ end
+end
+
+def fun_l28_n274(x)
+ if (x < 1)
+ fun_l29_n397(x)
+ else
+ fun_l29_n68(x)
+ end
+end
+
+def fun_l28_n275(x)
+ if (x < 1)
+ fun_l29_n744(x)
+ else
+ fun_l29_n944(x)
+ end
+end
+
+def fun_l28_n276(x)
+ if (x < 1)
+ fun_l29_n641(x)
+ else
+ fun_l29_n766(x)
+ end
+end
+
+def fun_l28_n277(x)
+ if (x < 1)
+ fun_l29_n983(x)
+ else
+ fun_l29_n587(x)
+ end
+end
+
+def fun_l28_n278(x)
+ if (x < 1)
+ fun_l29_n683(x)
+ else
+ fun_l29_n192(x)
+ end
+end
+
+def fun_l28_n279(x)
+ if (x < 1)
+ fun_l29_n252(x)
+ else
+ fun_l29_n30(x)
+ end
+end
+
+def fun_l28_n280(x)
+ if (x < 1)
+ fun_l29_n129(x)
+ else
+ fun_l29_n561(x)
+ end
+end
+
+def fun_l28_n281(x)
+ if (x < 1)
+ fun_l29_n828(x)
+ else
+ fun_l29_n697(x)
+ end
+end
+
+def fun_l28_n282(x)
+ if (x < 1)
+ fun_l29_n492(x)
+ else
+ fun_l29_n243(x)
+ end
+end
+
+def fun_l28_n283(x)
+ if (x < 1)
+ fun_l29_n642(x)
+ else
+ fun_l29_n736(x)
+ end
+end
+
+def fun_l28_n284(x)
+ if (x < 1)
+ fun_l29_n448(x)
+ else
+ fun_l29_n838(x)
+ end
+end
+
+def fun_l28_n285(x)
+ if (x < 1)
+ fun_l29_n133(x)
+ else
+ fun_l29_n372(x)
+ end
+end
+
+def fun_l28_n286(x)
+ if (x < 1)
+ fun_l29_n318(x)
+ else
+ fun_l29_n739(x)
+ end
+end
+
+def fun_l28_n287(x)
+ if (x < 1)
+ fun_l29_n449(x)
+ else
+ fun_l29_n743(x)
+ end
+end
+
+def fun_l28_n288(x)
+ if (x < 1)
+ fun_l29_n769(x)
+ else
+ fun_l29_n496(x)
+ end
+end
+
+def fun_l28_n289(x)
+ if (x < 1)
+ fun_l29_n455(x)
+ else
+ fun_l29_n893(x)
+ end
+end
+
+def fun_l28_n290(x)
+ if (x < 1)
+ fun_l29_n651(x)
+ else
+ fun_l29_n865(x)
+ end
+end
+
+def fun_l28_n291(x)
+ if (x < 1)
+ fun_l29_n194(x)
+ else
+ fun_l29_n491(x)
+ end
+end
+
+def fun_l28_n292(x)
+ if (x < 1)
+ fun_l29_n178(x)
+ else
+ fun_l29_n96(x)
+ end
+end
+
+def fun_l28_n293(x)
+ if (x < 1)
+ fun_l29_n32(x)
+ else
+ fun_l29_n262(x)
+ end
+end
+
+def fun_l28_n294(x)
+ if (x < 1)
+ fun_l29_n706(x)
+ else
+ fun_l29_n864(x)
+ end
+end
+
+def fun_l28_n295(x)
+ if (x < 1)
+ fun_l29_n209(x)
+ else
+ fun_l29_n220(x)
+ end
+end
+
+def fun_l28_n296(x)
+ if (x < 1)
+ fun_l29_n970(x)
+ else
+ fun_l29_n194(x)
+ end
+end
+
+def fun_l28_n297(x)
+ if (x < 1)
+ fun_l29_n959(x)
+ else
+ fun_l29_n472(x)
+ end
+end
+
+def fun_l28_n298(x)
+ if (x < 1)
+ fun_l29_n778(x)
+ else
+ fun_l29_n66(x)
+ end
+end
+
+def fun_l28_n299(x)
+ if (x < 1)
+ fun_l29_n942(x)
+ else
+ fun_l29_n461(x)
+ end
+end
+
+def fun_l28_n300(x)
+ if (x < 1)
+ fun_l29_n563(x)
+ else
+ fun_l29_n426(x)
+ end
+end
+
+def fun_l28_n301(x)
+ if (x < 1)
+ fun_l29_n603(x)
+ else
+ fun_l29_n968(x)
+ end
+end
+
+def fun_l28_n302(x)
+ if (x < 1)
+ fun_l29_n908(x)
+ else
+ fun_l29_n767(x)
+ end
+end
+
+def fun_l28_n303(x)
+ if (x < 1)
+ fun_l29_n387(x)
+ else
+ fun_l29_n484(x)
+ end
+end
+
+def fun_l28_n304(x)
+ if (x < 1)
+ fun_l29_n744(x)
+ else
+ fun_l29_n463(x)
+ end
+end
+
+def fun_l28_n305(x)
+ if (x < 1)
+ fun_l29_n964(x)
+ else
+ fun_l29_n43(x)
+ end
+end
+
+def fun_l28_n306(x)
+ if (x < 1)
+ fun_l29_n65(x)
+ else
+ fun_l29_n910(x)
+ end
+end
+
+def fun_l28_n307(x)
+ if (x < 1)
+ fun_l29_n318(x)
+ else
+ fun_l29_n375(x)
+ end
+end
+
+def fun_l28_n308(x)
+ if (x < 1)
+ fun_l29_n775(x)
+ else
+ fun_l29_n588(x)
+ end
+end
+
+def fun_l28_n309(x)
+ if (x < 1)
+ fun_l29_n977(x)
+ else
+ fun_l29_n299(x)
+ end
+end
+
+def fun_l28_n310(x)
+ if (x < 1)
+ fun_l29_n497(x)
+ else
+ fun_l29_n792(x)
+ end
+end
+
+def fun_l28_n311(x)
+ if (x < 1)
+ fun_l29_n909(x)
+ else
+ fun_l29_n740(x)
+ end
+end
+
+def fun_l28_n312(x)
+ if (x < 1)
+ fun_l29_n967(x)
+ else
+ fun_l29_n4(x)
+ end
+end
+
+def fun_l28_n313(x)
+ if (x < 1)
+ fun_l29_n455(x)
+ else
+ fun_l29_n11(x)
+ end
+end
+
+def fun_l28_n314(x)
+ if (x < 1)
+ fun_l29_n996(x)
+ else
+ fun_l29_n851(x)
+ end
+end
+
+def fun_l28_n315(x)
+ if (x < 1)
+ fun_l29_n110(x)
+ else
+ fun_l29_n517(x)
+ end
+end
+
+def fun_l28_n316(x)
+ if (x < 1)
+ fun_l29_n648(x)
+ else
+ fun_l29_n279(x)
+ end
+end
+
+def fun_l28_n317(x)
+ if (x < 1)
+ fun_l29_n820(x)
+ else
+ fun_l29_n157(x)
+ end
+end
+
+def fun_l28_n318(x)
+ if (x < 1)
+ fun_l29_n957(x)
+ else
+ fun_l29_n93(x)
+ end
+end
+
+def fun_l28_n319(x)
+ if (x < 1)
+ fun_l29_n681(x)
+ else
+ fun_l29_n508(x)
+ end
+end
+
+def fun_l28_n320(x)
+ if (x < 1)
+ fun_l29_n613(x)
+ else
+ fun_l29_n274(x)
+ end
+end
+
+def fun_l28_n321(x)
+ if (x < 1)
+ fun_l29_n239(x)
+ else
+ fun_l29_n862(x)
+ end
+end
+
+def fun_l28_n322(x)
+ if (x < 1)
+ fun_l29_n101(x)
+ else
+ fun_l29_n81(x)
+ end
+end
+
+def fun_l28_n323(x)
+ if (x < 1)
+ fun_l29_n96(x)
+ else
+ fun_l29_n908(x)
+ end
+end
+
+def fun_l28_n324(x)
+ if (x < 1)
+ fun_l29_n443(x)
+ else
+ fun_l29_n78(x)
+ end
+end
+
+def fun_l28_n325(x)
+ if (x < 1)
+ fun_l29_n857(x)
+ else
+ fun_l29_n210(x)
+ end
+end
+
+def fun_l28_n326(x)
+ if (x < 1)
+ fun_l29_n51(x)
+ else
+ fun_l29_n524(x)
+ end
+end
+
+def fun_l28_n327(x)
+ if (x < 1)
+ fun_l29_n381(x)
+ else
+ fun_l29_n309(x)
+ end
+end
+
+def fun_l28_n328(x)
+ if (x < 1)
+ fun_l29_n787(x)
+ else
+ fun_l29_n176(x)
+ end
+end
+
+def fun_l28_n329(x)
+ if (x < 1)
+ fun_l29_n568(x)
+ else
+ fun_l29_n652(x)
+ end
+end
+
+def fun_l28_n330(x)
+ if (x < 1)
+ fun_l29_n1(x)
+ else
+ fun_l29_n634(x)
+ end
+end
+
+def fun_l28_n331(x)
+ if (x < 1)
+ fun_l29_n491(x)
+ else
+ fun_l29_n365(x)
+ end
+end
+
+def fun_l28_n332(x)
+ if (x < 1)
+ fun_l29_n604(x)
+ else
+ fun_l29_n586(x)
+ end
+end
+
+def fun_l28_n333(x)
+ if (x < 1)
+ fun_l29_n811(x)
+ else
+ fun_l29_n981(x)
+ end
+end
+
+def fun_l28_n334(x)
+ if (x < 1)
+ fun_l29_n485(x)
+ else
+ fun_l29_n843(x)
+ end
+end
+
+def fun_l28_n335(x)
+ if (x < 1)
+ fun_l29_n188(x)
+ else
+ fun_l29_n805(x)
+ end
+end
+
+def fun_l28_n336(x)
+ if (x < 1)
+ fun_l29_n818(x)
+ else
+ fun_l29_n650(x)
+ end
+end
+
+def fun_l28_n337(x)
+ if (x < 1)
+ fun_l29_n829(x)
+ else
+ fun_l29_n13(x)
+ end
+end
+
+def fun_l28_n338(x)
+ if (x < 1)
+ fun_l29_n665(x)
+ else
+ fun_l29_n7(x)
+ end
+end
+
+def fun_l28_n339(x)
+ if (x < 1)
+ fun_l29_n347(x)
+ else
+ fun_l29_n914(x)
+ end
+end
+
+def fun_l28_n340(x)
+ if (x < 1)
+ fun_l29_n819(x)
+ else
+ fun_l29_n7(x)
+ end
+end
+
+def fun_l28_n341(x)
+ if (x < 1)
+ fun_l29_n108(x)
+ else
+ fun_l29_n838(x)
+ end
+end
+
+def fun_l28_n342(x)
+ if (x < 1)
+ fun_l29_n292(x)
+ else
+ fun_l29_n831(x)
+ end
+end
+
+def fun_l28_n343(x)
+ if (x < 1)
+ fun_l29_n892(x)
+ else
+ fun_l29_n717(x)
+ end
+end
+
+def fun_l28_n344(x)
+ if (x < 1)
+ fun_l29_n664(x)
+ else
+ fun_l29_n422(x)
+ end
+end
+
+def fun_l28_n345(x)
+ if (x < 1)
+ fun_l29_n59(x)
+ else
+ fun_l29_n858(x)
+ end
+end
+
+def fun_l28_n346(x)
+ if (x < 1)
+ fun_l29_n88(x)
+ else
+ fun_l29_n97(x)
+ end
+end
+
+def fun_l28_n347(x)
+ if (x < 1)
+ fun_l29_n852(x)
+ else
+ fun_l29_n37(x)
+ end
+end
+
+def fun_l28_n348(x)
+ if (x < 1)
+ fun_l29_n201(x)
+ else
+ fun_l29_n663(x)
+ end
+end
+
+def fun_l28_n349(x)
+ if (x < 1)
+ fun_l29_n928(x)
+ else
+ fun_l29_n743(x)
+ end
+end
+
+def fun_l28_n350(x)
+ if (x < 1)
+ fun_l29_n206(x)
+ else
+ fun_l29_n609(x)
+ end
+end
+
+def fun_l28_n351(x)
+ if (x < 1)
+ fun_l29_n98(x)
+ else
+ fun_l29_n659(x)
+ end
+end
+
+def fun_l28_n352(x)
+ if (x < 1)
+ fun_l29_n350(x)
+ else
+ fun_l29_n604(x)
+ end
+end
+
+def fun_l28_n353(x)
+ if (x < 1)
+ fun_l29_n273(x)
+ else
+ fun_l29_n831(x)
+ end
+end
+
+def fun_l28_n354(x)
+ if (x < 1)
+ fun_l29_n377(x)
+ else
+ fun_l29_n926(x)
+ end
+end
+
+def fun_l28_n355(x)
+ if (x < 1)
+ fun_l29_n783(x)
+ else
+ fun_l29_n646(x)
+ end
+end
+
+def fun_l28_n356(x)
+ if (x < 1)
+ fun_l29_n968(x)
+ else
+ fun_l29_n587(x)
+ end
+end
+
+def fun_l28_n357(x)
+ if (x < 1)
+ fun_l29_n813(x)
+ else
+ fun_l29_n791(x)
+ end
+end
+
+def fun_l28_n358(x)
+ if (x < 1)
+ fun_l29_n130(x)
+ else
+ fun_l29_n851(x)
+ end
+end
+
+def fun_l28_n359(x)
+ if (x < 1)
+ fun_l29_n858(x)
+ else
+ fun_l29_n112(x)
+ end
+end
+
+def fun_l28_n360(x)
+ if (x < 1)
+ fun_l29_n349(x)
+ else
+ fun_l29_n612(x)
+ end
+end
+
+def fun_l28_n361(x)
+ if (x < 1)
+ fun_l29_n282(x)
+ else
+ fun_l29_n357(x)
+ end
+end
+
+def fun_l28_n362(x)
+ if (x < 1)
+ fun_l29_n144(x)
+ else
+ fun_l29_n426(x)
+ end
+end
+
+def fun_l28_n363(x)
+ if (x < 1)
+ fun_l29_n438(x)
+ else
+ fun_l29_n539(x)
+ end
+end
+
+def fun_l28_n364(x)
+ if (x < 1)
+ fun_l29_n321(x)
+ else
+ fun_l29_n874(x)
+ end
+end
+
+def fun_l28_n365(x)
+ if (x < 1)
+ fun_l29_n443(x)
+ else
+ fun_l29_n985(x)
+ end
+end
+
+def fun_l28_n366(x)
+ if (x < 1)
+ fun_l29_n436(x)
+ else
+ fun_l29_n787(x)
+ end
+end
+
+def fun_l28_n367(x)
+ if (x < 1)
+ fun_l29_n354(x)
+ else
+ fun_l29_n75(x)
+ end
+end
+
+def fun_l28_n368(x)
+ if (x < 1)
+ fun_l29_n515(x)
+ else
+ fun_l29_n57(x)
+ end
+end
+
+def fun_l28_n369(x)
+ if (x < 1)
+ fun_l29_n222(x)
+ else
+ fun_l29_n954(x)
+ end
+end
+
+def fun_l28_n370(x)
+ if (x < 1)
+ fun_l29_n37(x)
+ else
+ fun_l29_n683(x)
+ end
+end
+
+def fun_l28_n371(x)
+ if (x < 1)
+ fun_l29_n104(x)
+ else
+ fun_l29_n721(x)
+ end
+end
+
+def fun_l28_n372(x)
+ if (x < 1)
+ fun_l29_n763(x)
+ else
+ fun_l29_n173(x)
+ end
+end
+
+def fun_l28_n373(x)
+ if (x < 1)
+ fun_l29_n693(x)
+ else
+ fun_l29_n132(x)
+ end
+end
+
+def fun_l28_n374(x)
+ if (x < 1)
+ fun_l29_n586(x)
+ else
+ fun_l29_n992(x)
+ end
+end
+
+def fun_l28_n375(x)
+ if (x < 1)
+ fun_l29_n815(x)
+ else
+ fun_l29_n721(x)
+ end
+end
+
+def fun_l28_n376(x)
+ if (x < 1)
+ fun_l29_n653(x)
+ else
+ fun_l29_n67(x)
+ end
+end
+
+def fun_l28_n377(x)
+ if (x < 1)
+ fun_l29_n710(x)
+ else
+ fun_l29_n787(x)
+ end
+end
+
+def fun_l28_n378(x)
+ if (x < 1)
+ fun_l29_n448(x)
+ else
+ fun_l29_n170(x)
+ end
+end
+
+def fun_l28_n379(x)
+ if (x < 1)
+ fun_l29_n433(x)
+ else
+ fun_l29_n970(x)
+ end
+end
+
+def fun_l28_n380(x)
+ if (x < 1)
+ fun_l29_n933(x)
+ else
+ fun_l29_n995(x)
+ end
+end
+
+def fun_l28_n381(x)
+ if (x < 1)
+ fun_l29_n78(x)
+ else
+ fun_l29_n791(x)
+ end
+end
+
+def fun_l28_n382(x)
+ if (x < 1)
+ fun_l29_n101(x)
+ else
+ fun_l29_n592(x)
+ end
+end
+
+def fun_l28_n383(x)
+ if (x < 1)
+ fun_l29_n470(x)
+ else
+ fun_l29_n988(x)
+ end
+end
+
+def fun_l28_n384(x)
+ if (x < 1)
+ fun_l29_n260(x)
+ else
+ fun_l29_n359(x)
+ end
+end
+
+def fun_l28_n385(x)
+ if (x < 1)
+ fun_l29_n743(x)
+ else
+ fun_l29_n373(x)
+ end
+end
+
+def fun_l28_n386(x)
+ if (x < 1)
+ fun_l29_n49(x)
+ else
+ fun_l29_n591(x)
+ end
+end
+
+def fun_l28_n387(x)
+ if (x < 1)
+ fun_l29_n271(x)
+ else
+ fun_l29_n924(x)
+ end
+end
+
+def fun_l28_n388(x)
+ if (x < 1)
+ fun_l29_n876(x)
+ else
+ fun_l29_n219(x)
+ end
+end
+
+def fun_l28_n389(x)
+ if (x < 1)
+ fun_l29_n262(x)
+ else
+ fun_l29_n857(x)
+ end
+end
+
+def fun_l28_n390(x)
+ if (x < 1)
+ fun_l29_n217(x)
+ else
+ fun_l29_n198(x)
+ end
+end
+
+def fun_l28_n391(x)
+ if (x < 1)
+ fun_l29_n603(x)
+ else
+ fun_l29_n87(x)
+ end
+end
+
+def fun_l28_n392(x)
+ if (x < 1)
+ fun_l29_n498(x)
+ else
+ fun_l29_n913(x)
+ end
+end
+
+def fun_l28_n393(x)
+ if (x < 1)
+ fun_l29_n795(x)
+ else
+ fun_l29_n87(x)
+ end
+end
+
+def fun_l28_n394(x)
+ if (x < 1)
+ fun_l29_n528(x)
+ else
+ fun_l29_n217(x)
+ end
+end
+
+def fun_l28_n395(x)
+ if (x < 1)
+ fun_l29_n300(x)
+ else
+ fun_l29_n725(x)
+ end
+end
+
+def fun_l28_n396(x)
+ if (x < 1)
+ fun_l29_n538(x)
+ else
+ fun_l29_n812(x)
+ end
+end
+
+def fun_l28_n397(x)
+ if (x < 1)
+ fun_l29_n179(x)
+ else
+ fun_l29_n765(x)
+ end
+end
+
+def fun_l28_n398(x)
+ if (x < 1)
+ fun_l29_n28(x)
+ else
+ fun_l29_n475(x)
+ end
+end
+
+def fun_l28_n399(x)
+ if (x < 1)
+ fun_l29_n471(x)
+ else
+ fun_l29_n368(x)
+ end
+end
+
+def fun_l28_n400(x)
+ if (x < 1)
+ fun_l29_n241(x)
+ else
+ fun_l29_n461(x)
+ end
+end
+
+def fun_l28_n401(x)
+ if (x < 1)
+ fun_l29_n707(x)
+ else
+ fun_l29_n502(x)
+ end
+end
+
+def fun_l28_n402(x)
+ if (x < 1)
+ fun_l29_n129(x)
+ else
+ fun_l29_n176(x)
+ end
+end
+
+def fun_l28_n403(x)
+ if (x < 1)
+ fun_l29_n410(x)
+ else
+ fun_l29_n954(x)
+ end
+end
+
+def fun_l28_n404(x)
+ if (x < 1)
+ fun_l29_n203(x)
+ else
+ fun_l29_n455(x)
+ end
+end
+
+def fun_l28_n405(x)
+ if (x < 1)
+ fun_l29_n238(x)
+ else
+ fun_l29_n865(x)
+ end
+end
+
+def fun_l28_n406(x)
+ if (x < 1)
+ fun_l29_n836(x)
+ else
+ fun_l29_n778(x)
+ end
+end
+
+def fun_l28_n407(x)
+ if (x < 1)
+ fun_l29_n620(x)
+ else
+ fun_l29_n879(x)
+ end
+end
+
+def fun_l28_n408(x)
+ if (x < 1)
+ fun_l29_n656(x)
+ else
+ fun_l29_n594(x)
+ end
+end
+
+def fun_l28_n409(x)
+ if (x < 1)
+ fun_l29_n382(x)
+ else
+ fun_l29_n51(x)
+ end
+end
+
+def fun_l28_n410(x)
+ if (x < 1)
+ fun_l29_n357(x)
+ else
+ fun_l29_n660(x)
+ end
+end
+
+def fun_l28_n411(x)
+ if (x < 1)
+ fun_l29_n900(x)
+ else
+ fun_l29_n902(x)
+ end
+end
+
+def fun_l28_n412(x)
+ if (x < 1)
+ fun_l29_n645(x)
+ else
+ fun_l29_n0(x)
+ end
+end
+
+def fun_l28_n413(x)
+ if (x < 1)
+ fun_l29_n250(x)
+ else
+ fun_l29_n499(x)
+ end
+end
+
+def fun_l28_n414(x)
+ if (x < 1)
+ fun_l29_n700(x)
+ else
+ fun_l29_n301(x)
+ end
+end
+
+def fun_l28_n415(x)
+ if (x < 1)
+ fun_l29_n711(x)
+ else
+ fun_l29_n83(x)
+ end
+end
+
+def fun_l28_n416(x)
+ if (x < 1)
+ fun_l29_n332(x)
+ else
+ fun_l29_n237(x)
+ end
+end
+
+def fun_l28_n417(x)
+ if (x < 1)
+ fun_l29_n573(x)
+ else
+ fun_l29_n822(x)
+ end
+end
+
+def fun_l28_n418(x)
+ if (x < 1)
+ fun_l29_n766(x)
+ else
+ fun_l29_n131(x)
+ end
+end
+
+def fun_l28_n419(x)
+ if (x < 1)
+ fun_l29_n696(x)
+ else
+ fun_l29_n772(x)
+ end
+end
+
+def fun_l28_n420(x)
+ if (x < 1)
+ fun_l29_n361(x)
+ else
+ fun_l29_n598(x)
+ end
+end
+
+def fun_l28_n421(x)
+ if (x < 1)
+ fun_l29_n941(x)
+ else
+ fun_l29_n403(x)
+ end
+end
+
+def fun_l28_n422(x)
+ if (x < 1)
+ fun_l29_n471(x)
+ else
+ fun_l29_n636(x)
+ end
+end
+
+def fun_l28_n423(x)
+ if (x < 1)
+ fun_l29_n650(x)
+ else
+ fun_l29_n787(x)
+ end
+end
+
+def fun_l28_n424(x)
+ if (x < 1)
+ fun_l29_n982(x)
+ else
+ fun_l29_n51(x)
+ end
+end
+
+def fun_l28_n425(x)
+ if (x < 1)
+ fun_l29_n140(x)
+ else
+ fun_l29_n255(x)
+ end
+end
+
+def fun_l28_n426(x)
+ if (x < 1)
+ fun_l29_n694(x)
+ else
+ fun_l29_n777(x)
+ end
+end
+
+def fun_l28_n427(x)
+ if (x < 1)
+ fun_l29_n984(x)
+ else
+ fun_l29_n118(x)
+ end
+end
+
+def fun_l28_n428(x)
+ if (x < 1)
+ fun_l29_n641(x)
+ else
+ fun_l29_n904(x)
+ end
+end
+
+def fun_l28_n429(x)
+ if (x < 1)
+ fun_l29_n537(x)
+ else
+ fun_l29_n950(x)
+ end
+end
+
+def fun_l28_n430(x)
+ if (x < 1)
+ fun_l29_n844(x)
+ else
+ fun_l29_n350(x)
+ end
+end
+
+def fun_l28_n431(x)
+ if (x < 1)
+ fun_l29_n223(x)
+ else
+ fun_l29_n711(x)
+ end
+end
+
+def fun_l28_n432(x)
+ if (x < 1)
+ fun_l29_n287(x)
+ else
+ fun_l29_n424(x)
+ end
+end
+
+def fun_l28_n433(x)
+ if (x < 1)
+ fun_l29_n447(x)
+ else
+ fun_l29_n253(x)
+ end
+end
+
+def fun_l28_n434(x)
+ if (x < 1)
+ fun_l29_n484(x)
+ else
+ fun_l29_n377(x)
+ end
+end
+
+def fun_l28_n435(x)
+ if (x < 1)
+ fun_l29_n899(x)
+ else
+ fun_l29_n385(x)
+ end
+end
+
+def fun_l28_n436(x)
+ if (x < 1)
+ fun_l29_n13(x)
+ else
+ fun_l29_n910(x)
+ end
+end
+
+def fun_l28_n437(x)
+ if (x < 1)
+ fun_l29_n431(x)
+ else
+ fun_l29_n505(x)
+ end
+end
+
+def fun_l28_n438(x)
+ if (x < 1)
+ fun_l29_n974(x)
+ else
+ fun_l29_n162(x)
+ end
+end
+
+def fun_l28_n439(x)
+ if (x < 1)
+ fun_l29_n833(x)
+ else
+ fun_l29_n26(x)
+ end
+end
+
+def fun_l28_n440(x)
+ if (x < 1)
+ fun_l29_n576(x)
+ else
+ fun_l29_n783(x)
+ end
+end
+
+def fun_l28_n441(x)
+ if (x < 1)
+ fun_l29_n580(x)
+ else
+ fun_l29_n476(x)
+ end
+end
+
+def fun_l28_n442(x)
+ if (x < 1)
+ fun_l29_n415(x)
+ else
+ fun_l29_n695(x)
+ end
+end
+
+def fun_l28_n443(x)
+ if (x < 1)
+ fun_l29_n279(x)
+ else
+ fun_l29_n442(x)
+ end
+end
+
+def fun_l28_n444(x)
+ if (x < 1)
+ fun_l29_n784(x)
+ else
+ fun_l29_n25(x)
+ end
+end
+
+def fun_l28_n445(x)
+ if (x < 1)
+ fun_l29_n682(x)
+ else
+ fun_l29_n632(x)
+ end
+end
+
+def fun_l28_n446(x)
+ if (x < 1)
+ fun_l29_n793(x)
+ else
+ fun_l29_n199(x)
+ end
+end
+
+def fun_l28_n447(x)
+ if (x < 1)
+ fun_l29_n885(x)
+ else
+ fun_l29_n590(x)
+ end
+end
+
+def fun_l28_n448(x)
+ if (x < 1)
+ fun_l29_n457(x)
+ else
+ fun_l29_n664(x)
+ end
+end
+
+def fun_l28_n449(x)
+ if (x < 1)
+ fun_l29_n272(x)
+ else
+ fun_l29_n207(x)
+ end
+end
+
+def fun_l28_n450(x)
+ if (x < 1)
+ fun_l29_n73(x)
+ else
+ fun_l29_n598(x)
+ end
+end
+
+def fun_l28_n451(x)
+ if (x < 1)
+ fun_l29_n674(x)
+ else
+ fun_l29_n305(x)
+ end
+end
+
+def fun_l28_n452(x)
+ if (x < 1)
+ fun_l29_n97(x)
+ else
+ fun_l29_n472(x)
+ end
+end
+
+def fun_l28_n453(x)
+ if (x < 1)
+ fun_l29_n995(x)
+ else
+ fun_l29_n156(x)
+ end
+end
+
+def fun_l28_n454(x)
+ if (x < 1)
+ fun_l29_n890(x)
+ else
+ fun_l29_n885(x)
+ end
+end
+
+def fun_l28_n455(x)
+ if (x < 1)
+ fun_l29_n481(x)
+ else
+ fun_l29_n712(x)
+ end
+end
+
+def fun_l28_n456(x)
+ if (x < 1)
+ fun_l29_n34(x)
+ else
+ fun_l29_n186(x)
+ end
+end
+
+def fun_l28_n457(x)
+ if (x < 1)
+ fun_l29_n767(x)
+ else
+ fun_l29_n769(x)
+ end
+end
+
+def fun_l28_n458(x)
+ if (x < 1)
+ fun_l29_n185(x)
+ else
+ fun_l29_n55(x)
+ end
+end
+
+def fun_l28_n459(x)
+ if (x < 1)
+ fun_l29_n826(x)
+ else
+ fun_l29_n954(x)
+ end
+end
+
+def fun_l28_n460(x)
+ if (x < 1)
+ fun_l29_n111(x)
+ else
+ fun_l29_n374(x)
+ end
+end
+
+def fun_l28_n461(x)
+ if (x < 1)
+ fun_l29_n988(x)
+ else
+ fun_l29_n719(x)
+ end
+end
+
+def fun_l28_n462(x)
+ if (x < 1)
+ fun_l29_n355(x)
+ else
+ fun_l29_n772(x)
+ end
+end
+
+def fun_l28_n463(x)
+ if (x < 1)
+ fun_l29_n348(x)
+ else
+ fun_l29_n973(x)
+ end
+end
+
+def fun_l28_n464(x)
+ if (x < 1)
+ fun_l29_n466(x)
+ else
+ fun_l29_n661(x)
+ end
+end
+
+def fun_l28_n465(x)
+ if (x < 1)
+ fun_l29_n95(x)
+ else
+ fun_l29_n300(x)
+ end
+end
+
+def fun_l28_n466(x)
+ if (x < 1)
+ fun_l29_n373(x)
+ else
+ fun_l29_n425(x)
+ end
+end
+
+def fun_l28_n467(x)
+ if (x < 1)
+ fun_l29_n669(x)
+ else
+ fun_l29_n990(x)
+ end
+end
+
+def fun_l28_n468(x)
+ if (x < 1)
+ fun_l29_n908(x)
+ else
+ fun_l29_n416(x)
+ end
+end
+
+def fun_l28_n469(x)
+ if (x < 1)
+ fun_l29_n795(x)
+ else
+ fun_l29_n7(x)
+ end
+end
+
+def fun_l28_n470(x)
+ if (x < 1)
+ fun_l29_n660(x)
+ else
+ fun_l29_n938(x)
+ end
+end
+
+def fun_l28_n471(x)
+ if (x < 1)
+ fun_l29_n816(x)
+ else
+ fun_l29_n857(x)
+ end
+end
+
+def fun_l28_n472(x)
+ if (x < 1)
+ fun_l29_n685(x)
+ else
+ fun_l29_n631(x)
+ end
+end
+
+def fun_l28_n473(x)
+ if (x < 1)
+ fun_l29_n521(x)
+ else
+ fun_l29_n21(x)
+ end
+end
+
+def fun_l28_n474(x)
+ if (x < 1)
+ fun_l29_n994(x)
+ else
+ fun_l29_n888(x)
+ end
+end
+
+def fun_l28_n475(x)
+ if (x < 1)
+ fun_l29_n819(x)
+ else
+ fun_l29_n735(x)
+ end
+end
+
+def fun_l28_n476(x)
+ if (x < 1)
+ fun_l29_n809(x)
+ else
+ fun_l29_n265(x)
+ end
+end
+
+def fun_l28_n477(x)
+ if (x < 1)
+ fun_l29_n99(x)
+ else
+ fun_l29_n484(x)
+ end
+end
+
+def fun_l28_n478(x)
+ if (x < 1)
+ fun_l29_n985(x)
+ else
+ fun_l29_n922(x)
+ end
+end
+
+def fun_l28_n479(x)
+ if (x < 1)
+ fun_l29_n502(x)
+ else
+ fun_l29_n475(x)
+ end
+end
+
+def fun_l28_n480(x)
+ if (x < 1)
+ fun_l29_n104(x)
+ else
+ fun_l29_n168(x)
+ end
+end
+
+def fun_l28_n481(x)
+ if (x < 1)
+ fun_l29_n176(x)
+ else
+ fun_l29_n736(x)
+ end
+end
+
+def fun_l28_n482(x)
+ if (x < 1)
+ fun_l29_n817(x)
+ else
+ fun_l29_n155(x)
+ end
+end
+
+def fun_l28_n483(x)
+ if (x < 1)
+ fun_l29_n162(x)
+ else
+ fun_l29_n45(x)
+ end
+end
+
+def fun_l28_n484(x)
+ if (x < 1)
+ fun_l29_n733(x)
+ else
+ fun_l29_n438(x)
+ end
+end
+
+def fun_l28_n485(x)
+ if (x < 1)
+ fun_l29_n323(x)
+ else
+ fun_l29_n410(x)
+ end
+end
+
+def fun_l28_n486(x)
+ if (x < 1)
+ fun_l29_n141(x)
+ else
+ fun_l29_n327(x)
+ end
+end
+
+def fun_l28_n487(x)
+ if (x < 1)
+ fun_l29_n122(x)
+ else
+ fun_l29_n280(x)
+ end
+end
+
+def fun_l28_n488(x)
+ if (x < 1)
+ fun_l29_n966(x)
+ else
+ fun_l29_n407(x)
+ end
+end
+
+def fun_l28_n489(x)
+ if (x < 1)
+ fun_l29_n826(x)
+ else
+ fun_l29_n852(x)
+ end
+end
+
+def fun_l28_n490(x)
+ if (x < 1)
+ fun_l29_n823(x)
+ else
+ fun_l29_n724(x)
+ end
+end
+
+def fun_l28_n491(x)
+ if (x < 1)
+ fun_l29_n291(x)
+ else
+ fun_l29_n151(x)
+ end
+end
+
+def fun_l28_n492(x)
+ if (x < 1)
+ fun_l29_n944(x)
+ else
+ fun_l29_n663(x)
+ end
+end
+
+def fun_l28_n493(x)
+ if (x < 1)
+ fun_l29_n552(x)
+ else
+ fun_l29_n954(x)
+ end
+end
+
+def fun_l28_n494(x)
+ if (x < 1)
+ fun_l29_n622(x)
+ else
+ fun_l29_n378(x)
+ end
+end
+
+def fun_l28_n495(x)
+ if (x < 1)
+ fun_l29_n824(x)
+ else
+ fun_l29_n377(x)
+ end
+end
+
+def fun_l28_n496(x)
+ if (x < 1)
+ fun_l29_n939(x)
+ else
+ fun_l29_n927(x)
+ end
+end
+
+def fun_l28_n497(x)
+ if (x < 1)
+ fun_l29_n760(x)
+ else
+ fun_l29_n215(x)
+ end
+end
+
+def fun_l28_n498(x)
+ if (x < 1)
+ fun_l29_n208(x)
+ else
+ fun_l29_n256(x)
+ end
+end
+
+def fun_l28_n499(x)
+ if (x < 1)
+ fun_l29_n19(x)
+ else
+ fun_l29_n956(x)
+ end
+end
+
+def fun_l28_n500(x)
+ if (x < 1)
+ fun_l29_n963(x)
+ else
+ fun_l29_n322(x)
+ end
+end
+
+def fun_l28_n501(x)
+ if (x < 1)
+ fun_l29_n564(x)
+ else
+ fun_l29_n261(x)
+ end
+end
+
+def fun_l28_n502(x)
+ if (x < 1)
+ fun_l29_n105(x)
+ else
+ fun_l29_n82(x)
+ end
+end
+
+def fun_l28_n503(x)
+ if (x < 1)
+ fun_l29_n165(x)
+ else
+ fun_l29_n101(x)
+ end
+end
+
+def fun_l28_n504(x)
+ if (x < 1)
+ fun_l29_n619(x)
+ else
+ fun_l29_n453(x)
+ end
+end
+
+def fun_l28_n505(x)
+ if (x < 1)
+ fun_l29_n20(x)
+ else
+ fun_l29_n329(x)
+ end
+end
+
+def fun_l28_n506(x)
+ if (x < 1)
+ fun_l29_n889(x)
+ else
+ fun_l29_n392(x)
+ end
+end
+
+def fun_l28_n507(x)
+ if (x < 1)
+ fun_l29_n824(x)
+ else
+ fun_l29_n709(x)
+ end
+end
+
+def fun_l28_n508(x)
+ if (x < 1)
+ fun_l29_n838(x)
+ else
+ fun_l29_n384(x)
+ end
+end
+
+def fun_l28_n509(x)
+ if (x < 1)
+ fun_l29_n364(x)
+ else
+ fun_l29_n789(x)
+ end
+end
+
+def fun_l28_n510(x)
+ if (x < 1)
+ fun_l29_n824(x)
+ else
+ fun_l29_n4(x)
+ end
+end
+
+def fun_l28_n511(x)
+ if (x < 1)
+ fun_l29_n481(x)
+ else
+ fun_l29_n883(x)
+ end
+end
+
+def fun_l28_n512(x)
+ if (x < 1)
+ fun_l29_n842(x)
+ else
+ fun_l29_n959(x)
+ end
+end
+
+def fun_l28_n513(x)
+ if (x < 1)
+ fun_l29_n989(x)
+ else
+ fun_l29_n400(x)
+ end
+end
+
+def fun_l28_n514(x)
+ if (x < 1)
+ fun_l29_n952(x)
+ else
+ fun_l29_n245(x)
+ end
+end
+
+def fun_l28_n515(x)
+ if (x < 1)
+ fun_l29_n966(x)
+ else
+ fun_l29_n91(x)
+ end
+end
+
+def fun_l28_n516(x)
+ if (x < 1)
+ fun_l29_n489(x)
+ else
+ fun_l29_n280(x)
+ end
+end
+
+def fun_l28_n517(x)
+ if (x < 1)
+ fun_l29_n128(x)
+ else
+ fun_l29_n722(x)
+ end
+end
+
+def fun_l28_n518(x)
+ if (x < 1)
+ fun_l29_n429(x)
+ else
+ fun_l29_n412(x)
+ end
+end
+
+def fun_l28_n519(x)
+ if (x < 1)
+ fun_l29_n884(x)
+ else
+ fun_l29_n993(x)
+ end
+end
+
+def fun_l28_n520(x)
+ if (x < 1)
+ fun_l29_n470(x)
+ else
+ fun_l29_n308(x)
+ end
+end
+
+def fun_l28_n521(x)
+ if (x < 1)
+ fun_l29_n583(x)
+ else
+ fun_l29_n683(x)
+ end
+end
+
+def fun_l28_n522(x)
+ if (x < 1)
+ fun_l29_n400(x)
+ else
+ fun_l29_n643(x)
+ end
+end
+
+def fun_l28_n523(x)
+ if (x < 1)
+ fun_l29_n750(x)
+ else
+ fun_l29_n388(x)
+ end
+end
+
+def fun_l28_n524(x)
+ if (x < 1)
+ fun_l29_n252(x)
+ else
+ fun_l29_n426(x)
+ end
+end
+
+def fun_l28_n525(x)
+ if (x < 1)
+ fun_l29_n51(x)
+ else
+ fun_l29_n720(x)
+ end
+end
+
+def fun_l28_n526(x)
+ if (x < 1)
+ fun_l29_n633(x)
+ else
+ fun_l29_n160(x)
+ end
+end
+
+def fun_l28_n527(x)
+ if (x < 1)
+ fun_l29_n507(x)
+ else
+ fun_l29_n630(x)
+ end
+end
+
+def fun_l28_n528(x)
+ if (x < 1)
+ fun_l29_n53(x)
+ else
+ fun_l29_n189(x)
+ end
+end
+
+def fun_l28_n529(x)
+ if (x < 1)
+ fun_l29_n191(x)
+ else
+ fun_l29_n767(x)
+ end
+end
+
+def fun_l28_n530(x)
+ if (x < 1)
+ fun_l29_n265(x)
+ else
+ fun_l29_n130(x)
+ end
+end
+
+def fun_l28_n531(x)
+ if (x < 1)
+ fun_l29_n936(x)
+ else
+ fun_l29_n270(x)
+ end
+end
+
+def fun_l28_n532(x)
+ if (x < 1)
+ fun_l29_n910(x)
+ else
+ fun_l29_n144(x)
+ end
+end
+
+def fun_l28_n533(x)
+ if (x < 1)
+ fun_l29_n155(x)
+ else
+ fun_l29_n947(x)
+ end
+end
+
+def fun_l28_n534(x)
+ if (x < 1)
+ fun_l29_n977(x)
+ else
+ fun_l29_n372(x)
+ end
+end
+
+def fun_l28_n535(x)
+ if (x < 1)
+ fun_l29_n728(x)
+ else
+ fun_l29_n657(x)
+ end
+end
+
+def fun_l28_n536(x)
+ if (x < 1)
+ fun_l29_n360(x)
+ else
+ fun_l29_n154(x)
+ end
+end
+
+def fun_l28_n537(x)
+ if (x < 1)
+ fun_l29_n934(x)
+ else
+ fun_l29_n93(x)
+ end
+end
+
+def fun_l28_n538(x)
+ if (x < 1)
+ fun_l29_n254(x)
+ else
+ fun_l29_n201(x)
+ end
+end
+
+def fun_l28_n539(x)
+ if (x < 1)
+ fun_l29_n310(x)
+ else
+ fun_l29_n104(x)
+ end
+end
+
+def fun_l28_n540(x)
+ if (x < 1)
+ fun_l29_n197(x)
+ else
+ fun_l29_n332(x)
+ end
+end
+
+def fun_l28_n541(x)
+ if (x < 1)
+ fun_l29_n144(x)
+ else
+ fun_l29_n519(x)
+ end
+end
+
+def fun_l28_n542(x)
+ if (x < 1)
+ fun_l29_n582(x)
+ else
+ fun_l29_n257(x)
+ end
+end
+
+def fun_l28_n543(x)
+ if (x < 1)
+ fun_l29_n984(x)
+ else
+ fun_l29_n375(x)
+ end
+end
+
+def fun_l28_n544(x)
+ if (x < 1)
+ fun_l29_n201(x)
+ else
+ fun_l29_n746(x)
+ end
+end
+
+def fun_l28_n545(x)
+ if (x < 1)
+ fun_l29_n530(x)
+ else
+ fun_l29_n209(x)
+ end
+end
+
+def fun_l28_n546(x)
+ if (x < 1)
+ fun_l29_n764(x)
+ else
+ fun_l29_n858(x)
+ end
+end
+
+def fun_l28_n547(x)
+ if (x < 1)
+ fun_l29_n830(x)
+ else
+ fun_l29_n58(x)
+ end
+end
+
+def fun_l28_n548(x)
+ if (x < 1)
+ fun_l29_n746(x)
+ else
+ fun_l29_n374(x)
+ end
+end
+
+def fun_l28_n549(x)
+ if (x < 1)
+ fun_l29_n923(x)
+ else
+ fun_l29_n489(x)
+ end
+end
+
+def fun_l28_n550(x)
+ if (x < 1)
+ fun_l29_n188(x)
+ else
+ fun_l29_n866(x)
+ end
+end
+
+def fun_l28_n551(x)
+ if (x < 1)
+ fun_l29_n959(x)
+ else
+ fun_l29_n493(x)
+ end
+end
+
+def fun_l28_n552(x)
+ if (x < 1)
+ fun_l29_n568(x)
+ else
+ fun_l29_n747(x)
+ end
+end
+
+def fun_l28_n553(x)
+ if (x < 1)
+ fun_l29_n972(x)
+ else
+ fun_l29_n507(x)
+ end
+end
+
+def fun_l28_n554(x)
+ if (x < 1)
+ fun_l29_n557(x)
+ else
+ fun_l29_n765(x)
+ end
+end
+
+def fun_l28_n555(x)
+ if (x < 1)
+ fun_l29_n430(x)
+ else
+ fun_l29_n941(x)
+ end
+end
+
+def fun_l28_n556(x)
+ if (x < 1)
+ fun_l29_n631(x)
+ else
+ fun_l29_n384(x)
+ end
+end
+
+def fun_l28_n557(x)
+ if (x < 1)
+ fun_l29_n681(x)
+ else
+ fun_l29_n976(x)
+ end
+end
+
+def fun_l28_n558(x)
+ if (x < 1)
+ fun_l29_n326(x)
+ else
+ fun_l29_n481(x)
+ end
+end
+
+def fun_l28_n559(x)
+ if (x < 1)
+ fun_l29_n882(x)
+ else
+ fun_l29_n129(x)
+ end
+end
+
+def fun_l28_n560(x)
+ if (x < 1)
+ fun_l29_n471(x)
+ else
+ fun_l29_n156(x)
+ end
+end
+
+def fun_l28_n561(x)
+ if (x < 1)
+ fun_l29_n692(x)
+ else
+ fun_l29_n968(x)
+ end
+end
+
+def fun_l28_n562(x)
+ if (x < 1)
+ fun_l29_n207(x)
+ else
+ fun_l29_n251(x)
+ end
+end
+
+def fun_l28_n563(x)
+ if (x < 1)
+ fun_l29_n519(x)
+ else
+ fun_l29_n749(x)
+ end
+end
+
+def fun_l28_n564(x)
+ if (x < 1)
+ fun_l29_n609(x)
+ else
+ fun_l29_n657(x)
+ end
+end
+
+def fun_l28_n565(x)
+ if (x < 1)
+ fun_l29_n100(x)
+ else
+ fun_l29_n932(x)
+ end
+end
+
+def fun_l28_n566(x)
+ if (x < 1)
+ fun_l29_n499(x)
+ else
+ fun_l29_n455(x)
+ end
+end
+
+def fun_l28_n567(x)
+ if (x < 1)
+ fun_l29_n486(x)
+ else
+ fun_l29_n13(x)
+ end
+end
+
+def fun_l28_n568(x)
+ if (x < 1)
+ fun_l29_n855(x)
+ else
+ fun_l29_n809(x)
+ end
+end
+
+def fun_l28_n569(x)
+ if (x < 1)
+ fun_l29_n295(x)
+ else
+ fun_l29_n576(x)
+ end
+end
+
+def fun_l28_n570(x)
+ if (x < 1)
+ fun_l29_n354(x)
+ else
+ fun_l29_n430(x)
+ end
+end
+
+def fun_l28_n571(x)
+ if (x < 1)
+ fun_l29_n307(x)
+ else
+ fun_l29_n560(x)
+ end
+end
+
+def fun_l28_n572(x)
+ if (x < 1)
+ fun_l29_n528(x)
+ else
+ fun_l29_n642(x)
+ end
+end
+
+def fun_l28_n573(x)
+ if (x < 1)
+ fun_l29_n552(x)
+ else
+ fun_l29_n421(x)
+ end
+end
+
+def fun_l28_n574(x)
+ if (x < 1)
+ fun_l29_n238(x)
+ else
+ fun_l29_n471(x)
+ end
+end
+
+def fun_l28_n575(x)
+ if (x < 1)
+ fun_l29_n748(x)
+ else
+ fun_l29_n381(x)
+ end
+end
+
+def fun_l28_n576(x)
+ if (x < 1)
+ fun_l29_n75(x)
+ else
+ fun_l29_n994(x)
+ end
+end
+
+def fun_l28_n577(x)
+ if (x < 1)
+ fun_l29_n159(x)
+ else
+ fun_l29_n923(x)
+ end
+end
+
+def fun_l28_n578(x)
+ if (x < 1)
+ fun_l29_n657(x)
+ else
+ fun_l29_n984(x)
+ end
+end
+
+def fun_l28_n579(x)
+ if (x < 1)
+ fun_l29_n150(x)
+ else
+ fun_l29_n887(x)
+ end
+end
+
+def fun_l28_n580(x)
+ if (x < 1)
+ fun_l29_n362(x)
+ else
+ fun_l29_n574(x)
+ end
+end
+
+def fun_l28_n581(x)
+ if (x < 1)
+ fun_l29_n95(x)
+ else
+ fun_l29_n258(x)
+ end
+end
+
+def fun_l28_n582(x)
+ if (x < 1)
+ fun_l29_n123(x)
+ else
+ fun_l29_n501(x)
+ end
+end
+
+def fun_l28_n583(x)
+ if (x < 1)
+ fun_l29_n934(x)
+ else
+ fun_l29_n94(x)
+ end
+end
+
+def fun_l28_n584(x)
+ if (x < 1)
+ fun_l29_n764(x)
+ else
+ fun_l29_n350(x)
+ end
+end
+
+def fun_l28_n585(x)
+ if (x < 1)
+ fun_l29_n328(x)
+ else
+ fun_l29_n483(x)
+ end
+end
+
+def fun_l28_n586(x)
+ if (x < 1)
+ fun_l29_n533(x)
+ else
+ fun_l29_n956(x)
+ end
+end
+
+def fun_l28_n587(x)
+ if (x < 1)
+ fun_l29_n632(x)
+ else
+ fun_l29_n243(x)
+ end
+end
+
+def fun_l28_n588(x)
+ if (x < 1)
+ fun_l29_n897(x)
+ else
+ fun_l29_n894(x)
+ end
+end
+
+def fun_l28_n589(x)
+ if (x < 1)
+ fun_l29_n867(x)
+ else
+ fun_l29_n68(x)
+ end
+end
+
+def fun_l28_n590(x)
+ if (x < 1)
+ fun_l29_n266(x)
+ else
+ fun_l29_n763(x)
+ end
+end
+
+def fun_l28_n591(x)
+ if (x < 1)
+ fun_l29_n104(x)
+ else
+ fun_l29_n940(x)
+ end
+end
+
+def fun_l28_n592(x)
+ if (x < 1)
+ fun_l29_n409(x)
+ else
+ fun_l29_n561(x)
+ end
+end
+
+def fun_l28_n593(x)
+ if (x < 1)
+ fun_l29_n485(x)
+ else
+ fun_l29_n780(x)
+ end
+end
+
+def fun_l28_n594(x)
+ if (x < 1)
+ fun_l29_n925(x)
+ else
+ fun_l29_n581(x)
+ end
+end
+
+def fun_l28_n595(x)
+ if (x < 1)
+ fun_l29_n566(x)
+ else
+ fun_l29_n288(x)
+ end
+end
+
+def fun_l28_n596(x)
+ if (x < 1)
+ fun_l29_n166(x)
+ else
+ fun_l29_n702(x)
+ end
+end
+
+def fun_l28_n597(x)
+ if (x < 1)
+ fun_l29_n82(x)
+ else
+ fun_l29_n815(x)
+ end
+end
+
+def fun_l28_n598(x)
+ if (x < 1)
+ fun_l29_n913(x)
+ else
+ fun_l29_n623(x)
+ end
+end
+
+def fun_l28_n599(x)
+ if (x < 1)
+ fun_l29_n431(x)
+ else
+ fun_l29_n216(x)
+ end
+end
+
+def fun_l28_n600(x)
+ if (x < 1)
+ fun_l29_n260(x)
+ else
+ fun_l29_n907(x)
+ end
+end
+
+def fun_l28_n601(x)
+ if (x < 1)
+ fun_l29_n232(x)
+ else
+ fun_l29_n504(x)
+ end
+end
+
+def fun_l28_n602(x)
+ if (x < 1)
+ fun_l29_n25(x)
+ else
+ fun_l29_n844(x)
+ end
+end
+
+def fun_l28_n603(x)
+ if (x < 1)
+ fun_l29_n997(x)
+ else
+ fun_l29_n821(x)
+ end
+end
+
+def fun_l28_n604(x)
+ if (x < 1)
+ fun_l29_n732(x)
+ else
+ fun_l29_n301(x)
+ end
+end
+
+def fun_l28_n605(x)
+ if (x < 1)
+ fun_l29_n971(x)
+ else
+ fun_l29_n522(x)
+ end
+end
+
+def fun_l28_n606(x)
+ if (x < 1)
+ fun_l29_n518(x)
+ else
+ fun_l29_n874(x)
+ end
+end
+
+def fun_l28_n607(x)
+ if (x < 1)
+ fun_l29_n104(x)
+ else
+ fun_l29_n529(x)
+ end
+end
+
+def fun_l28_n608(x)
+ if (x < 1)
+ fun_l29_n662(x)
+ else
+ fun_l29_n830(x)
+ end
+end
+
+def fun_l28_n609(x)
+ if (x < 1)
+ fun_l29_n521(x)
+ else
+ fun_l29_n944(x)
+ end
+end
+
+def fun_l28_n610(x)
+ if (x < 1)
+ fun_l29_n231(x)
+ else
+ fun_l29_n92(x)
+ end
+end
+
+def fun_l28_n611(x)
+ if (x < 1)
+ fun_l29_n290(x)
+ else
+ fun_l29_n261(x)
+ end
+end
+
+def fun_l28_n612(x)
+ if (x < 1)
+ fun_l29_n490(x)
+ else
+ fun_l29_n621(x)
+ end
+end
+
+def fun_l28_n613(x)
+ if (x < 1)
+ fun_l29_n131(x)
+ else
+ fun_l29_n946(x)
+ end
+end
+
+def fun_l28_n614(x)
+ if (x < 1)
+ fun_l29_n34(x)
+ else
+ fun_l29_n159(x)
+ end
+end
+
+def fun_l28_n615(x)
+ if (x < 1)
+ fun_l29_n811(x)
+ else
+ fun_l29_n895(x)
+ end
+end
+
+def fun_l28_n616(x)
+ if (x < 1)
+ fun_l29_n713(x)
+ else
+ fun_l29_n686(x)
+ end
+end
+
+def fun_l28_n617(x)
+ if (x < 1)
+ fun_l29_n650(x)
+ else
+ fun_l29_n256(x)
+ end
+end
+
+def fun_l28_n618(x)
+ if (x < 1)
+ fun_l29_n815(x)
+ else
+ fun_l29_n537(x)
+ end
+end
+
+def fun_l28_n619(x)
+ if (x < 1)
+ fun_l29_n739(x)
+ else
+ fun_l29_n735(x)
+ end
+end
+
+def fun_l28_n620(x)
+ if (x < 1)
+ fun_l29_n857(x)
+ else
+ fun_l29_n863(x)
+ end
+end
+
+def fun_l28_n621(x)
+ if (x < 1)
+ fun_l29_n81(x)
+ else
+ fun_l29_n755(x)
+ end
+end
+
+def fun_l28_n622(x)
+ if (x < 1)
+ fun_l29_n841(x)
+ else
+ fun_l29_n597(x)
+ end
+end
+
+def fun_l28_n623(x)
+ if (x < 1)
+ fun_l29_n87(x)
+ else
+ fun_l29_n676(x)
+ end
+end
+
+def fun_l28_n624(x)
+ if (x < 1)
+ fun_l29_n67(x)
+ else
+ fun_l29_n883(x)
+ end
+end
+
+def fun_l28_n625(x)
+ if (x < 1)
+ fun_l29_n223(x)
+ else
+ fun_l29_n139(x)
+ end
+end
+
+def fun_l28_n626(x)
+ if (x < 1)
+ fun_l29_n351(x)
+ else
+ fun_l29_n11(x)
+ end
+end
+
+def fun_l28_n627(x)
+ if (x < 1)
+ fun_l29_n281(x)
+ else
+ fun_l29_n138(x)
+ end
+end
+
+def fun_l28_n628(x)
+ if (x < 1)
+ fun_l29_n118(x)
+ else
+ fun_l29_n44(x)
+ end
+end
+
+def fun_l28_n629(x)
+ if (x < 1)
+ fun_l29_n55(x)
+ else
+ fun_l29_n249(x)
+ end
+end
+
+def fun_l28_n630(x)
+ if (x < 1)
+ fun_l29_n636(x)
+ else
+ fun_l29_n717(x)
+ end
+end
+
+def fun_l28_n631(x)
+ if (x < 1)
+ fun_l29_n88(x)
+ else
+ fun_l29_n670(x)
+ end
+end
+
+def fun_l28_n632(x)
+ if (x < 1)
+ fun_l29_n311(x)
+ else
+ fun_l29_n337(x)
+ end
+end
+
+def fun_l28_n633(x)
+ if (x < 1)
+ fun_l29_n67(x)
+ else
+ fun_l29_n12(x)
+ end
+end
+
+def fun_l28_n634(x)
+ if (x < 1)
+ fun_l29_n581(x)
+ else
+ fun_l29_n618(x)
+ end
+end
+
+def fun_l28_n635(x)
+ if (x < 1)
+ fun_l29_n709(x)
+ else
+ fun_l29_n120(x)
+ end
+end
+
+def fun_l28_n636(x)
+ if (x < 1)
+ fun_l29_n904(x)
+ else
+ fun_l29_n987(x)
+ end
+end
+
+def fun_l28_n637(x)
+ if (x < 1)
+ fun_l29_n274(x)
+ else
+ fun_l29_n219(x)
+ end
+end
+
+def fun_l28_n638(x)
+ if (x < 1)
+ fun_l29_n444(x)
+ else
+ fun_l29_n609(x)
+ end
+end
+
+def fun_l28_n639(x)
+ if (x < 1)
+ fun_l29_n473(x)
+ else
+ fun_l29_n433(x)
+ end
+end
+
+def fun_l28_n640(x)
+ if (x < 1)
+ fun_l29_n344(x)
+ else
+ fun_l29_n59(x)
+ end
+end
+
+def fun_l28_n641(x)
+ if (x < 1)
+ fun_l29_n973(x)
+ else
+ fun_l29_n506(x)
+ end
+end
+
+def fun_l28_n642(x)
+ if (x < 1)
+ fun_l29_n387(x)
+ else
+ fun_l29_n347(x)
+ end
+end
+
+def fun_l28_n643(x)
+ if (x < 1)
+ fun_l29_n138(x)
+ else
+ fun_l29_n597(x)
+ end
+end
+
+def fun_l28_n644(x)
+ if (x < 1)
+ fun_l29_n622(x)
+ else
+ fun_l29_n276(x)
+ end
+end
+
+def fun_l28_n645(x)
+ if (x < 1)
+ fun_l29_n454(x)
+ else
+ fun_l29_n930(x)
+ end
+end
+
+def fun_l28_n646(x)
+ if (x < 1)
+ fun_l29_n586(x)
+ else
+ fun_l29_n3(x)
+ end
+end
+
+def fun_l28_n647(x)
+ if (x < 1)
+ fun_l29_n508(x)
+ else
+ fun_l29_n489(x)
+ end
+end
+
+def fun_l28_n648(x)
+ if (x < 1)
+ fun_l29_n549(x)
+ else
+ fun_l29_n57(x)
+ end
+end
+
+def fun_l28_n649(x)
+ if (x < 1)
+ fun_l29_n32(x)
+ else
+ fun_l29_n487(x)
+ end
+end
+
+def fun_l28_n650(x)
+ if (x < 1)
+ fun_l29_n567(x)
+ else
+ fun_l29_n733(x)
+ end
+end
+
+def fun_l28_n651(x)
+ if (x < 1)
+ fun_l29_n401(x)
+ else
+ fun_l29_n234(x)
+ end
+end
+
+def fun_l28_n652(x)
+ if (x < 1)
+ fun_l29_n124(x)
+ else
+ fun_l29_n387(x)
+ end
+end
+
+def fun_l28_n653(x)
+ if (x < 1)
+ fun_l29_n517(x)
+ else
+ fun_l29_n150(x)
+ end
+end
+
+def fun_l28_n654(x)
+ if (x < 1)
+ fun_l29_n502(x)
+ else
+ fun_l29_n139(x)
+ end
+end
+
+def fun_l28_n655(x)
+ if (x < 1)
+ fun_l29_n304(x)
+ else
+ fun_l29_n871(x)
+ end
+end
+
+def fun_l28_n656(x)
+ if (x < 1)
+ fun_l29_n413(x)
+ else
+ fun_l29_n759(x)
+ end
+end
+
+def fun_l28_n657(x)
+ if (x < 1)
+ fun_l29_n810(x)
+ else
+ fun_l29_n274(x)
+ end
+end
+
+def fun_l28_n658(x)
+ if (x < 1)
+ fun_l29_n706(x)
+ else
+ fun_l29_n564(x)
+ end
+end
+
+def fun_l28_n659(x)
+ if (x < 1)
+ fun_l29_n205(x)
+ else
+ fun_l29_n857(x)
+ end
+end
+
+def fun_l28_n660(x)
+ if (x < 1)
+ fun_l29_n534(x)
+ else
+ fun_l29_n853(x)
+ end
+end
+
+def fun_l28_n661(x)
+ if (x < 1)
+ fun_l29_n436(x)
+ else
+ fun_l29_n227(x)
+ end
+end
+
+def fun_l28_n662(x)
+ if (x < 1)
+ fun_l29_n784(x)
+ else
+ fun_l29_n352(x)
+ end
+end
+
+def fun_l28_n663(x)
+ if (x < 1)
+ fun_l29_n889(x)
+ else
+ fun_l29_n186(x)
+ end
+end
+
+def fun_l28_n664(x)
+ if (x < 1)
+ fun_l29_n872(x)
+ else
+ fun_l29_n217(x)
+ end
+end
+
+def fun_l28_n665(x)
+ if (x < 1)
+ fun_l29_n111(x)
+ else
+ fun_l29_n355(x)
+ end
+end
+
+def fun_l28_n666(x)
+ if (x < 1)
+ fun_l29_n175(x)
+ else
+ fun_l29_n971(x)
+ end
+end
+
+def fun_l28_n667(x)
+ if (x < 1)
+ fun_l29_n823(x)
+ else
+ fun_l29_n123(x)
+ end
+end
+
+def fun_l28_n668(x)
+ if (x < 1)
+ fun_l29_n239(x)
+ else
+ fun_l29_n58(x)
+ end
+end
+
+def fun_l28_n669(x)
+ if (x < 1)
+ fun_l29_n127(x)
+ else
+ fun_l29_n628(x)
+ end
+end
+
+def fun_l28_n670(x)
+ if (x < 1)
+ fun_l29_n967(x)
+ else
+ fun_l29_n575(x)
+ end
+end
+
+def fun_l28_n671(x)
+ if (x < 1)
+ fun_l29_n994(x)
+ else
+ fun_l29_n352(x)
+ end
+end
+
+def fun_l28_n672(x)
+ if (x < 1)
+ fun_l29_n598(x)
+ else
+ fun_l29_n620(x)
+ end
+end
+
+def fun_l28_n673(x)
+ if (x < 1)
+ fun_l29_n407(x)
+ else
+ fun_l29_n132(x)
+ end
+end
+
+def fun_l28_n674(x)
+ if (x < 1)
+ fun_l29_n553(x)
+ else
+ fun_l29_n807(x)
+ end
+end
+
+def fun_l28_n675(x)
+ if (x < 1)
+ fun_l29_n918(x)
+ else
+ fun_l29_n462(x)
+ end
+end
+
+def fun_l28_n676(x)
+ if (x < 1)
+ fun_l29_n340(x)
+ else
+ fun_l29_n905(x)
+ end
+end
+
+def fun_l28_n677(x)
+ if (x < 1)
+ fun_l29_n322(x)
+ else
+ fun_l29_n657(x)
+ end
+end
+
+def fun_l28_n678(x)
+ if (x < 1)
+ fun_l29_n249(x)
+ else
+ fun_l29_n691(x)
+ end
+end
+
+def fun_l28_n679(x)
+ if (x < 1)
+ fun_l29_n227(x)
+ else
+ fun_l29_n559(x)
+ end
+end
+
+def fun_l28_n680(x)
+ if (x < 1)
+ fun_l29_n151(x)
+ else
+ fun_l29_n191(x)
+ end
+end
+
+def fun_l28_n681(x)
+ if (x < 1)
+ fun_l29_n211(x)
+ else
+ fun_l29_n400(x)
+ end
+end
+
+def fun_l28_n682(x)
+ if (x < 1)
+ fun_l29_n124(x)
+ else
+ fun_l29_n334(x)
+ end
+end
+
+def fun_l28_n683(x)
+ if (x < 1)
+ fun_l29_n876(x)
+ else
+ fun_l29_n839(x)
+ end
+end
+
+def fun_l28_n684(x)
+ if (x < 1)
+ fun_l29_n764(x)
+ else
+ fun_l29_n449(x)
+ end
+end
+
+def fun_l28_n685(x)
+ if (x < 1)
+ fun_l29_n316(x)
+ else
+ fun_l29_n730(x)
+ end
+end
+
+def fun_l28_n686(x)
+ if (x < 1)
+ fun_l29_n557(x)
+ else
+ fun_l29_n851(x)
+ end
+end
+
+def fun_l28_n687(x)
+ if (x < 1)
+ fun_l29_n315(x)
+ else
+ fun_l29_n280(x)
+ end
+end
+
+def fun_l28_n688(x)
+ if (x < 1)
+ fun_l29_n467(x)
+ else
+ fun_l29_n593(x)
+ end
+end
+
+def fun_l28_n689(x)
+ if (x < 1)
+ fun_l29_n537(x)
+ else
+ fun_l29_n37(x)
+ end
+end
+
+def fun_l28_n690(x)
+ if (x < 1)
+ fun_l29_n582(x)
+ else
+ fun_l29_n205(x)
+ end
+end
+
+def fun_l28_n691(x)
+ if (x < 1)
+ fun_l29_n672(x)
+ else
+ fun_l29_n656(x)
+ end
+end
+
+def fun_l28_n692(x)
+ if (x < 1)
+ fun_l29_n280(x)
+ else
+ fun_l29_n404(x)
+ end
+end
+
+def fun_l28_n693(x)
+ if (x < 1)
+ fun_l29_n609(x)
+ else
+ fun_l29_n914(x)
+ end
+end
+
+def fun_l28_n694(x)
+ if (x < 1)
+ fun_l29_n563(x)
+ else
+ fun_l29_n215(x)
+ end
+end
+
+def fun_l28_n695(x)
+ if (x < 1)
+ fun_l29_n207(x)
+ else
+ fun_l29_n548(x)
+ end
+end
+
+def fun_l28_n696(x)
+ if (x < 1)
+ fun_l29_n981(x)
+ else
+ fun_l29_n79(x)
+ end
+end
+
+def fun_l28_n697(x)
+ if (x < 1)
+ fun_l29_n747(x)
+ else
+ fun_l29_n687(x)
+ end
+end
+
+def fun_l28_n698(x)
+ if (x < 1)
+ fun_l29_n30(x)
+ else
+ fun_l29_n104(x)
+ end
+end
+
+def fun_l28_n699(x)
+ if (x < 1)
+ fun_l29_n587(x)
+ else
+ fun_l29_n414(x)
+ end
+end
+
+def fun_l28_n700(x)
+ if (x < 1)
+ fun_l29_n956(x)
+ else
+ fun_l29_n601(x)
+ end
+end
+
+def fun_l28_n701(x)
+ if (x < 1)
+ fun_l29_n276(x)
+ else
+ fun_l29_n815(x)
+ end
+end
+
+def fun_l28_n702(x)
+ if (x < 1)
+ fun_l29_n294(x)
+ else
+ fun_l29_n94(x)
+ end
+end
+
+def fun_l28_n703(x)
+ if (x < 1)
+ fun_l29_n161(x)
+ else
+ fun_l29_n133(x)
+ end
+end
+
+def fun_l28_n704(x)
+ if (x < 1)
+ fun_l29_n898(x)
+ else
+ fun_l29_n483(x)
+ end
+end
+
+def fun_l28_n705(x)
+ if (x < 1)
+ fun_l29_n651(x)
+ else
+ fun_l29_n577(x)
+ end
+end
+
+def fun_l28_n706(x)
+ if (x < 1)
+ fun_l29_n389(x)
+ else
+ fun_l29_n595(x)
+ end
+end
+
+def fun_l28_n707(x)
+ if (x < 1)
+ fun_l29_n856(x)
+ else
+ fun_l29_n65(x)
+ end
+end
+
+def fun_l28_n708(x)
+ if (x < 1)
+ fun_l29_n77(x)
+ else
+ fun_l29_n687(x)
+ end
+end
+
+def fun_l28_n709(x)
+ if (x < 1)
+ fun_l29_n962(x)
+ else
+ fun_l29_n517(x)
+ end
+end
+
+def fun_l28_n710(x)
+ if (x < 1)
+ fun_l29_n934(x)
+ else
+ fun_l29_n804(x)
+ end
+end
+
+def fun_l28_n711(x)
+ if (x < 1)
+ fun_l29_n267(x)
+ else
+ fun_l29_n557(x)
+ end
+end
+
+def fun_l28_n712(x)
+ if (x < 1)
+ fun_l29_n691(x)
+ else
+ fun_l29_n558(x)
+ end
+end
+
+def fun_l28_n713(x)
+ if (x < 1)
+ fun_l29_n420(x)
+ else
+ fun_l29_n150(x)
+ end
+end
+
+def fun_l28_n714(x)
+ if (x < 1)
+ fun_l29_n289(x)
+ else
+ fun_l29_n814(x)
+ end
+end
+
+def fun_l28_n715(x)
+ if (x < 1)
+ fun_l29_n579(x)
+ else
+ fun_l29_n730(x)
+ end
+end
+
+def fun_l28_n716(x)
+ if (x < 1)
+ fun_l29_n331(x)
+ else
+ fun_l29_n178(x)
+ end
+end
+
+def fun_l28_n717(x)
+ if (x < 1)
+ fun_l29_n914(x)
+ else
+ fun_l29_n176(x)
+ end
+end
+
+def fun_l28_n718(x)
+ if (x < 1)
+ fun_l29_n261(x)
+ else
+ fun_l29_n203(x)
+ end
+end
+
+def fun_l28_n719(x)
+ if (x < 1)
+ fun_l29_n621(x)
+ else
+ fun_l29_n236(x)
+ end
+end
+
+def fun_l28_n720(x)
+ if (x < 1)
+ fun_l29_n453(x)
+ else
+ fun_l29_n420(x)
+ end
+end
+
+def fun_l28_n721(x)
+ if (x < 1)
+ fun_l29_n39(x)
+ else
+ fun_l29_n499(x)
+ end
+end
+
+def fun_l28_n722(x)
+ if (x < 1)
+ fun_l29_n629(x)
+ else
+ fun_l29_n23(x)
+ end
+end
+
+def fun_l28_n723(x)
+ if (x < 1)
+ fun_l29_n55(x)
+ else
+ fun_l29_n497(x)
+ end
+end
+
+def fun_l28_n724(x)
+ if (x < 1)
+ fun_l29_n934(x)
+ else
+ fun_l29_n891(x)
+ end
+end
+
+def fun_l28_n725(x)
+ if (x < 1)
+ fun_l29_n532(x)
+ else
+ fun_l29_n959(x)
+ end
+end
+
+def fun_l28_n726(x)
+ if (x < 1)
+ fun_l29_n510(x)
+ else
+ fun_l29_n171(x)
+ end
+end
+
+def fun_l28_n727(x)
+ if (x < 1)
+ fun_l29_n42(x)
+ else
+ fun_l29_n680(x)
+ end
+end
+
+def fun_l28_n728(x)
+ if (x < 1)
+ fun_l29_n488(x)
+ else
+ fun_l29_n994(x)
+ end
+end
+
+def fun_l28_n729(x)
+ if (x < 1)
+ fun_l29_n347(x)
+ else
+ fun_l29_n135(x)
+ end
+end
+
+def fun_l28_n730(x)
+ if (x < 1)
+ fun_l29_n97(x)
+ else
+ fun_l29_n176(x)
+ end
+end
+
+def fun_l28_n731(x)
+ if (x < 1)
+ fun_l29_n4(x)
+ else
+ fun_l29_n330(x)
+ end
+end
+
+def fun_l28_n732(x)
+ if (x < 1)
+ fun_l29_n808(x)
+ else
+ fun_l29_n491(x)
+ end
+end
+
+def fun_l28_n733(x)
+ if (x < 1)
+ fun_l29_n147(x)
+ else
+ fun_l29_n520(x)
+ end
+end
+
+def fun_l28_n734(x)
+ if (x < 1)
+ fun_l29_n510(x)
+ else
+ fun_l29_n980(x)
+ end
+end
+
+def fun_l28_n735(x)
+ if (x < 1)
+ fun_l29_n656(x)
+ else
+ fun_l29_n861(x)
+ end
+end
+
+def fun_l28_n736(x)
+ if (x < 1)
+ fun_l29_n445(x)
+ else
+ fun_l29_n625(x)
+ end
+end
+
+def fun_l28_n737(x)
+ if (x < 1)
+ fun_l29_n101(x)
+ else
+ fun_l29_n874(x)
+ end
+end
+
+def fun_l28_n738(x)
+ if (x < 1)
+ fun_l29_n337(x)
+ else
+ fun_l29_n231(x)
+ end
+end
+
+def fun_l28_n739(x)
+ if (x < 1)
+ fun_l29_n518(x)
+ else
+ fun_l29_n575(x)
+ end
+end
+
+def fun_l28_n740(x)
+ if (x < 1)
+ fun_l29_n472(x)
+ else
+ fun_l29_n401(x)
+ end
+end
+
+def fun_l28_n741(x)
+ if (x < 1)
+ fun_l29_n47(x)
+ else
+ fun_l29_n435(x)
+ end
+end
+
+def fun_l28_n742(x)
+ if (x < 1)
+ fun_l29_n113(x)
+ else
+ fun_l29_n56(x)
+ end
+end
+
+def fun_l28_n743(x)
+ if (x < 1)
+ fun_l29_n435(x)
+ else
+ fun_l29_n972(x)
+ end
+end
+
+def fun_l28_n744(x)
+ if (x < 1)
+ fun_l29_n692(x)
+ else
+ fun_l29_n328(x)
+ end
+end
+
+def fun_l28_n745(x)
+ if (x < 1)
+ fun_l29_n830(x)
+ else
+ fun_l29_n92(x)
+ end
+end
+
+def fun_l28_n746(x)
+ if (x < 1)
+ fun_l29_n921(x)
+ else
+ fun_l29_n340(x)
+ end
+end
+
+def fun_l28_n747(x)
+ if (x < 1)
+ fun_l29_n346(x)
+ else
+ fun_l29_n654(x)
+ end
+end
+
+def fun_l28_n748(x)
+ if (x < 1)
+ fun_l29_n850(x)
+ else
+ fun_l29_n40(x)
+ end
+end
+
+def fun_l28_n749(x)
+ if (x < 1)
+ fun_l29_n432(x)
+ else
+ fun_l29_n445(x)
+ end
+end
+
+def fun_l28_n750(x)
+ if (x < 1)
+ fun_l29_n28(x)
+ else
+ fun_l29_n537(x)
+ end
+end
+
+def fun_l28_n751(x)
+ if (x < 1)
+ fun_l29_n858(x)
+ else
+ fun_l29_n375(x)
+ end
+end
+
+def fun_l28_n752(x)
+ if (x < 1)
+ fun_l29_n625(x)
+ else
+ fun_l29_n581(x)
+ end
+end
+
+def fun_l28_n753(x)
+ if (x < 1)
+ fun_l29_n223(x)
+ else
+ fun_l29_n509(x)
+ end
+end
+
+def fun_l28_n754(x)
+ if (x < 1)
+ fun_l29_n655(x)
+ else
+ fun_l29_n218(x)
+ end
+end
+
+def fun_l28_n755(x)
+ if (x < 1)
+ fun_l29_n998(x)
+ else
+ fun_l29_n177(x)
+ end
+end
+
+def fun_l28_n756(x)
+ if (x < 1)
+ fun_l29_n66(x)
+ else
+ fun_l29_n763(x)
+ end
+end
+
+def fun_l28_n757(x)
+ if (x < 1)
+ fun_l29_n112(x)
+ else
+ fun_l29_n494(x)
+ end
+end
+
+def fun_l28_n758(x)
+ if (x < 1)
+ fun_l29_n144(x)
+ else
+ fun_l29_n402(x)
+ end
+end
+
+def fun_l28_n759(x)
+ if (x < 1)
+ fun_l29_n162(x)
+ else
+ fun_l29_n338(x)
+ end
+end
+
+def fun_l28_n760(x)
+ if (x < 1)
+ fun_l29_n975(x)
+ else
+ fun_l29_n431(x)
+ end
+end
+
+def fun_l28_n761(x)
+ if (x < 1)
+ fun_l29_n676(x)
+ else
+ fun_l29_n787(x)
+ end
+end
+
+def fun_l28_n762(x)
+ if (x < 1)
+ fun_l29_n90(x)
+ else
+ fun_l29_n828(x)
+ end
+end
+
+def fun_l28_n763(x)
+ if (x < 1)
+ fun_l29_n816(x)
+ else
+ fun_l29_n119(x)
+ end
+end
+
+def fun_l28_n764(x)
+ if (x < 1)
+ fun_l29_n624(x)
+ else
+ fun_l29_n885(x)
+ end
+end
+
+def fun_l28_n765(x)
+ if (x < 1)
+ fun_l29_n933(x)
+ else
+ fun_l29_n378(x)
+ end
+end
+
+def fun_l28_n766(x)
+ if (x < 1)
+ fun_l29_n967(x)
+ else
+ fun_l29_n580(x)
+ end
+end
+
+def fun_l28_n767(x)
+ if (x < 1)
+ fun_l29_n752(x)
+ else
+ fun_l29_n607(x)
+ end
+end
+
+def fun_l28_n768(x)
+ if (x < 1)
+ fun_l29_n333(x)
+ else
+ fun_l29_n339(x)
+ end
+end
+
+def fun_l28_n769(x)
+ if (x < 1)
+ fun_l29_n720(x)
+ else
+ fun_l29_n952(x)
+ end
+end
+
+def fun_l28_n770(x)
+ if (x < 1)
+ fun_l29_n323(x)
+ else
+ fun_l29_n542(x)
+ end
+end
+
+def fun_l28_n771(x)
+ if (x < 1)
+ fun_l29_n472(x)
+ else
+ fun_l29_n4(x)
+ end
+end
+
+def fun_l28_n772(x)
+ if (x < 1)
+ fun_l29_n962(x)
+ else
+ fun_l29_n345(x)
+ end
+end
+
+def fun_l28_n773(x)
+ if (x < 1)
+ fun_l29_n305(x)
+ else
+ fun_l29_n106(x)
+ end
+end
+
+def fun_l28_n774(x)
+ if (x < 1)
+ fun_l29_n880(x)
+ else
+ fun_l29_n731(x)
+ end
+end
+
+def fun_l28_n775(x)
+ if (x < 1)
+ fun_l29_n760(x)
+ else
+ fun_l29_n460(x)
+ end
+end
+
+def fun_l28_n776(x)
+ if (x < 1)
+ fun_l29_n445(x)
+ else
+ fun_l29_n725(x)
+ end
+end
+
+def fun_l28_n777(x)
+ if (x < 1)
+ fun_l29_n850(x)
+ else
+ fun_l29_n121(x)
+ end
+end
+
+def fun_l28_n778(x)
+ if (x < 1)
+ fun_l29_n270(x)
+ else
+ fun_l29_n85(x)
+ end
+end
+
+def fun_l28_n779(x)
+ if (x < 1)
+ fun_l29_n208(x)
+ else
+ fun_l29_n822(x)
+ end
+end
+
+def fun_l28_n780(x)
+ if (x < 1)
+ fun_l29_n832(x)
+ else
+ fun_l29_n712(x)
+ end
+end
+
+def fun_l28_n781(x)
+ if (x < 1)
+ fun_l29_n456(x)
+ else
+ fun_l29_n947(x)
+ end
+end
+
+def fun_l28_n782(x)
+ if (x < 1)
+ fun_l29_n973(x)
+ else
+ fun_l29_n912(x)
+ end
+end
+
+def fun_l28_n783(x)
+ if (x < 1)
+ fun_l29_n365(x)
+ else
+ fun_l29_n496(x)
+ end
+end
+
+def fun_l28_n784(x)
+ if (x < 1)
+ fun_l29_n717(x)
+ else
+ fun_l29_n157(x)
+ end
+end
+
+def fun_l28_n785(x)
+ if (x < 1)
+ fun_l29_n754(x)
+ else
+ fun_l29_n462(x)
+ end
+end
+
+def fun_l28_n786(x)
+ if (x < 1)
+ fun_l29_n470(x)
+ else
+ fun_l29_n528(x)
+ end
+end
+
+def fun_l28_n787(x)
+ if (x < 1)
+ fun_l29_n463(x)
+ else
+ fun_l29_n107(x)
+ end
+end
+
+def fun_l28_n788(x)
+ if (x < 1)
+ fun_l29_n583(x)
+ else
+ fun_l29_n387(x)
+ end
+end
+
+def fun_l28_n789(x)
+ if (x < 1)
+ fun_l29_n55(x)
+ else
+ fun_l29_n694(x)
+ end
+end
+
+def fun_l28_n790(x)
+ if (x < 1)
+ fun_l29_n834(x)
+ else
+ fun_l29_n306(x)
+ end
+end
+
+def fun_l28_n791(x)
+ if (x < 1)
+ fun_l29_n374(x)
+ else
+ fun_l29_n502(x)
+ end
+end
+
+def fun_l28_n792(x)
+ if (x < 1)
+ fun_l29_n462(x)
+ else
+ fun_l29_n221(x)
+ end
+end
+
+def fun_l28_n793(x)
+ if (x < 1)
+ fun_l29_n680(x)
+ else
+ fun_l29_n966(x)
+ end
+end
+
+def fun_l28_n794(x)
+ if (x < 1)
+ fun_l29_n936(x)
+ else
+ fun_l29_n911(x)
+ end
+end
+
+def fun_l28_n795(x)
+ if (x < 1)
+ fun_l29_n863(x)
+ else
+ fun_l29_n978(x)
+ end
+end
+
+def fun_l28_n796(x)
+ if (x < 1)
+ fun_l29_n1(x)
+ else
+ fun_l29_n399(x)
+ end
+end
+
+def fun_l28_n797(x)
+ if (x < 1)
+ fun_l29_n628(x)
+ else
+ fun_l29_n603(x)
+ end
+end
+
+def fun_l28_n798(x)
+ if (x < 1)
+ fun_l29_n799(x)
+ else
+ fun_l29_n979(x)
+ end
+end
+
+def fun_l28_n799(x)
+ if (x < 1)
+ fun_l29_n856(x)
+ else
+ fun_l29_n946(x)
+ end
+end
+
+def fun_l28_n800(x)
+ if (x < 1)
+ fun_l29_n556(x)
+ else
+ fun_l29_n816(x)
+ end
+end
+
+def fun_l28_n801(x)
+ if (x < 1)
+ fun_l29_n619(x)
+ else
+ fun_l29_n19(x)
+ end
+end
+
+def fun_l28_n802(x)
+ if (x < 1)
+ fun_l29_n143(x)
+ else
+ fun_l29_n287(x)
+ end
+end
+
+def fun_l28_n803(x)
+ if (x < 1)
+ fun_l29_n816(x)
+ else
+ fun_l29_n271(x)
+ end
+end
+
+def fun_l28_n804(x)
+ if (x < 1)
+ fun_l29_n517(x)
+ else
+ fun_l29_n931(x)
+ end
+end
+
+def fun_l28_n805(x)
+ if (x < 1)
+ fun_l29_n298(x)
+ else
+ fun_l29_n509(x)
+ end
+end
+
+def fun_l28_n806(x)
+ if (x < 1)
+ fun_l29_n493(x)
+ else
+ fun_l29_n341(x)
+ end
+end
+
+def fun_l28_n807(x)
+ if (x < 1)
+ fun_l29_n270(x)
+ else
+ fun_l29_n82(x)
+ end
+end
+
+def fun_l28_n808(x)
+ if (x < 1)
+ fun_l29_n980(x)
+ else
+ fun_l29_n771(x)
+ end
+end
+
+def fun_l28_n809(x)
+ if (x < 1)
+ fun_l29_n784(x)
+ else
+ fun_l29_n696(x)
+ end
+end
+
+def fun_l28_n810(x)
+ if (x < 1)
+ fun_l29_n966(x)
+ else
+ fun_l29_n216(x)
+ end
+end
+
+def fun_l28_n811(x)
+ if (x < 1)
+ fun_l29_n374(x)
+ else
+ fun_l29_n482(x)
+ end
+end
+
+def fun_l28_n812(x)
+ if (x < 1)
+ fun_l29_n682(x)
+ else
+ fun_l29_n42(x)
+ end
+end
+
+def fun_l28_n813(x)
+ if (x < 1)
+ fun_l29_n254(x)
+ else
+ fun_l29_n899(x)
+ end
+end
+
+def fun_l28_n814(x)
+ if (x < 1)
+ fun_l29_n115(x)
+ else
+ fun_l29_n336(x)
+ end
+end
+
+def fun_l28_n815(x)
+ if (x < 1)
+ fun_l29_n842(x)
+ else
+ fun_l29_n201(x)
+ end
+end
+
+def fun_l28_n816(x)
+ if (x < 1)
+ fun_l29_n258(x)
+ else
+ fun_l29_n675(x)
+ end
+end
+
+def fun_l28_n817(x)
+ if (x < 1)
+ fun_l29_n594(x)
+ else
+ fun_l29_n61(x)
+ end
+end
+
+def fun_l28_n818(x)
+ if (x < 1)
+ fun_l29_n691(x)
+ else
+ fun_l29_n627(x)
+ end
+end
+
+def fun_l28_n819(x)
+ if (x < 1)
+ fun_l29_n963(x)
+ else
+ fun_l29_n611(x)
+ end
+end
+
+def fun_l28_n820(x)
+ if (x < 1)
+ fun_l29_n455(x)
+ else
+ fun_l29_n829(x)
+ end
+end
+
+def fun_l28_n821(x)
+ if (x < 1)
+ fun_l29_n818(x)
+ else
+ fun_l29_n242(x)
+ end
+end
+
+def fun_l28_n822(x)
+ if (x < 1)
+ fun_l29_n242(x)
+ else
+ fun_l29_n474(x)
+ end
+end
+
+def fun_l28_n823(x)
+ if (x < 1)
+ fun_l29_n847(x)
+ else
+ fun_l29_n119(x)
+ end
+end
+
+def fun_l28_n824(x)
+ if (x < 1)
+ fun_l29_n141(x)
+ else
+ fun_l29_n371(x)
+ end
+end
+
+def fun_l28_n825(x)
+ if (x < 1)
+ fun_l29_n913(x)
+ else
+ fun_l29_n129(x)
+ end
+end
+
+def fun_l28_n826(x)
+ if (x < 1)
+ fun_l29_n440(x)
+ else
+ fun_l29_n860(x)
+ end
+end
+
+def fun_l28_n827(x)
+ if (x < 1)
+ fun_l29_n194(x)
+ else
+ fun_l29_n940(x)
+ end
+end
+
+def fun_l28_n828(x)
+ if (x < 1)
+ fun_l29_n444(x)
+ else
+ fun_l29_n332(x)
+ end
+end
+
+def fun_l28_n829(x)
+ if (x < 1)
+ fun_l29_n435(x)
+ else
+ fun_l29_n559(x)
+ end
+end
+
+def fun_l28_n830(x)
+ if (x < 1)
+ fun_l29_n898(x)
+ else
+ fun_l29_n418(x)
+ end
+end
+
+def fun_l28_n831(x)
+ if (x < 1)
+ fun_l29_n13(x)
+ else
+ fun_l29_n917(x)
+ end
+end
+
+def fun_l28_n832(x)
+ if (x < 1)
+ fun_l29_n705(x)
+ else
+ fun_l29_n738(x)
+ end
+end
+
+def fun_l28_n833(x)
+ if (x < 1)
+ fun_l29_n519(x)
+ else
+ fun_l29_n35(x)
+ end
+end
+
+def fun_l28_n834(x)
+ if (x < 1)
+ fun_l29_n205(x)
+ else
+ fun_l29_n928(x)
+ end
+end
+
+def fun_l28_n835(x)
+ if (x < 1)
+ fun_l29_n401(x)
+ else
+ fun_l29_n191(x)
+ end
+end
+
+def fun_l28_n836(x)
+ if (x < 1)
+ fun_l29_n497(x)
+ else
+ fun_l29_n789(x)
+ end
+end
+
+def fun_l28_n837(x)
+ if (x < 1)
+ fun_l29_n745(x)
+ else
+ fun_l29_n714(x)
+ end
+end
+
+def fun_l28_n838(x)
+ if (x < 1)
+ fun_l29_n885(x)
+ else
+ fun_l29_n845(x)
+ end
+end
+
+def fun_l28_n839(x)
+ if (x < 1)
+ fun_l29_n423(x)
+ else
+ fun_l29_n835(x)
+ end
+end
+
+def fun_l28_n840(x)
+ if (x < 1)
+ fun_l29_n844(x)
+ else
+ fun_l29_n296(x)
+ end
+end
+
+def fun_l28_n841(x)
+ if (x < 1)
+ fun_l29_n980(x)
+ else
+ fun_l29_n298(x)
+ end
+end
+
+def fun_l28_n842(x)
+ if (x < 1)
+ fun_l29_n169(x)
+ else
+ fun_l29_n613(x)
+ end
+end
+
+def fun_l28_n843(x)
+ if (x < 1)
+ fun_l29_n323(x)
+ else
+ fun_l29_n437(x)
+ end
+end
+
+def fun_l28_n844(x)
+ if (x < 1)
+ fun_l29_n532(x)
+ else
+ fun_l29_n841(x)
+ end
+end
+
+def fun_l28_n845(x)
+ if (x < 1)
+ fun_l29_n984(x)
+ else
+ fun_l29_n696(x)
+ end
+end
+
+def fun_l28_n846(x)
+ if (x < 1)
+ fun_l29_n474(x)
+ else
+ fun_l29_n346(x)
+ end
+end
+
+def fun_l28_n847(x)
+ if (x < 1)
+ fun_l29_n725(x)
+ else
+ fun_l29_n994(x)
+ end
+end
+
+def fun_l28_n848(x)
+ if (x < 1)
+ fun_l29_n650(x)
+ else
+ fun_l29_n920(x)
+ end
+end
+
+def fun_l28_n849(x)
+ if (x < 1)
+ fun_l29_n626(x)
+ else
+ fun_l29_n704(x)
+ end
+end
+
+def fun_l28_n850(x)
+ if (x < 1)
+ fun_l29_n506(x)
+ else
+ fun_l29_n440(x)
+ end
+end
+
+def fun_l28_n851(x)
+ if (x < 1)
+ fun_l29_n512(x)
+ else
+ fun_l29_n811(x)
+ end
+end
+
+def fun_l28_n852(x)
+ if (x < 1)
+ fun_l29_n763(x)
+ else
+ fun_l29_n986(x)
+ end
+end
+
+def fun_l28_n853(x)
+ if (x < 1)
+ fun_l29_n866(x)
+ else
+ fun_l29_n972(x)
+ end
+end
+
+def fun_l28_n854(x)
+ if (x < 1)
+ fun_l29_n71(x)
+ else
+ fun_l29_n347(x)
+ end
+end
+
+def fun_l28_n855(x)
+ if (x < 1)
+ fun_l29_n380(x)
+ else
+ fun_l29_n809(x)
+ end
+end
+
+def fun_l28_n856(x)
+ if (x < 1)
+ fun_l29_n802(x)
+ else
+ fun_l29_n13(x)
+ end
+end
+
+def fun_l28_n857(x)
+ if (x < 1)
+ fun_l29_n631(x)
+ else
+ fun_l29_n636(x)
+ end
+end
+
+def fun_l28_n858(x)
+ if (x < 1)
+ fun_l29_n542(x)
+ else
+ fun_l29_n166(x)
+ end
+end
+
+def fun_l28_n859(x)
+ if (x < 1)
+ fun_l29_n393(x)
+ else
+ fun_l29_n317(x)
+ end
+end
+
+def fun_l28_n860(x)
+ if (x < 1)
+ fun_l29_n833(x)
+ else
+ fun_l29_n424(x)
+ end
+end
+
+def fun_l28_n861(x)
+ if (x < 1)
+ fun_l29_n62(x)
+ else
+ fun_l29_n78(x)
+ end
+end
+
+def fun_l28_n862(x)
+ if (x < 1)
+ fun_l29_n145(x)
+ else
+ fun_l29_n322(x)
+ end
+end
+
+def fun_l28_n863(x)
+ if (x < 1)
+ fun_l29_n733(x)
+ else
+ fun_l29_n171(x)
+ end
+end
+
+def fun_l28_n864(x)
+ if (x < 1)
+ fun_l29_n35(x)
+ else
+ fun_l29_n626(x)
+ end
+end
+
+def fun_l28_n865(x)
+ if (x < 1)
+ fun_l29_n356(x)
+ else
+ fun_l29_n832(x)
+ end
+end
+
+def fun_l28_n866(x)
+ if (x < 1)
+ fun_l29_n823(x)
+ else
+ fun_l29_n480(x)
+ end
+end
+
+def fun_l28_n867(x)
+ if (x < 1)
+ fun_l29_n397(x)
+ else
+ fun_l29_n245(x)
+ end
+end
+
+def fun_l28_n868(x)
+ if (x < 1)
+ fun_l29_n403(x)
+ else
+ fun_l29_n682(x)
+ end
+end
+
+def fun_l28_n869(x)
+ if (x < 1)
+ fun_l29_n481(x)
+ else
+ fun_l29_n543(x)
+ end
+end
+
+def fun_l28_n870(x)
+ if (x < 1)
+ fun_l29_n759(x)
+ else
+ fun_l29_n281(x)
+ end
+end
+
+def fun_l28_n871(x)
+ if (x < 1)
+ fun_l29_n671(x)
+ else
+ fun_l29_n644(x)
+ end
+end
+
+def fun_l28_n872(x)
+ if (x < 1)
+ fun_l29_n210(x)
+ else
+ fun_l29_n76(x)
+ end
+end
+
+def fun_l28_n873(x)
+ if (x < 1)
+ fun_l29_n823(x)
+ else
+ fun_l29_n461(x)
+ end
+end
+
+def fun_l28_n874(x)
+ if (x < 1)
+ fun_l29_n269(x)
+ else
+ fun_l29_n368(x)
+ end
+end
+
+def fun_l28_n875(x)
+ if (x < 1)
+ fun_l29_n727(x)
+ else
+ fun_l29_n37(x)
+ end
+end
+
+def fun_l28_n876(x)
+ if (x < 1)
+ fun_l29_n670(x)
+ else
+ fun_l29_n389(x)
+ end
+end
+
+def fun_l28_n877(x)
+ if (x < 1)
+ fun_l29_n844(x)
+ else
+ fun_l29_n424(x)
+ end
+end
+
+def fun_l28_n878(x)
+ if (x < 1)
+ fun_l29_n612(x)
+ else
+ fun_l29_n201(x)
+ end
+end
+
+def fun_l28_n879(x)
+ if (x < 1)
+ fun_l29_n790(x)
+ else
+ fun_l29_n270(x)
+ end
+end
+
+def fun_l28_n880(x)
+ if (x < 1)
+ fun_l29_n976(x)
+ else
+ fun_l29_n362(x)
+ end
+end
+
+def fun_l28_n881(x)
+ if (x < 1)
+ fun_l29_n701(x)
+ else
+ fun_l29_n846(x)
+ end
+end
+
+def fun_l28_n882(x)
+ if (x < 1)
+ fun_l29_n354(x)
+ else
+ fun_l29_n803(x)
+ end
+end
+
+def fun_l28_n883(x)
+ if (x < 1)
+ fun_l29_n40(x)
+ else
+ fun_l29_n168(x)
+ end
+end
+
+def fun_l28_n884(x)
+ if (x < 1)
+ fun_l29_n471(x)
+ else
+ fun_l29_n15(x)
+ end
+end
+
+def fun_l28_n885(x)
+ if (x < 1)
+ fun_l29_n87(x)
+ else
+ fun_l29_n287(x)
+ end
+end
+
+def fun_l28_n886(x)
+ if (x < 1)
+ fun_l29_n659(x)
+ else
+ fun_l29_n623(x)
+ end
+end
+
+def fun_l28_n887(x)
+ if (x < 1)
+ fun_l29_n318(x)
+ else
+ fun_l29_n377(x)
+ end
+end
+
+def fun_l28_n888(x)
+ if (x < 1)
+ fun_l29_n996(x)
+ else
+ fun_l29_n393(x)
+ end
+end
+
+def fun_l28_n889(x)
+ if (x < 1)
+ fun_l29_n999(x)
+ else
+ fun_l29_n370(x)
+ end
+end
+
+def fun_l28_n890(x)
+ if (x < 1)
+ fun_l29_n900(x)
+ else
+ fun_l29_n902(x)
+ end
+end
+
+def fun_l28_n891(x)
+ if (x < 1)
+ fun_l29_n180(x)
+ else
+ fun_l29_n477(x)
+ end
+end
+
+def fun_l28_n892(x)
+ if (x < 1)
+ fun_l29_n254(x)
+ else
+ fun_l29_n762(x)
+ end
+end
+
+def fun_l28_n893(x)
+ if (x < 1)
+ fun_l29_n36(x)
+ else
+ fun_l29_n198(x)
+ end
+end
+
+def fun_l28_n894(x)
+ if (x < 1)
+ fun_l29_n811(x)
+ else
+ fun_l29_n667(x)
+ end
+end
+
+def fun_l28_n895(x)
+ if (x < 1)
+ fun_l29_n711(x)
+ else
+ fun_l29_n462(x)
+ end
+end
+
+def fun_l28_n896(x)
+ if (x < 1)
+ fun_l29_n535(x)
+ else
+ fun_l29_n759(x)
+ end
+end
+
+def fun_l28_n897(x)
+ if (x < 1)
+ fun_l29_n336(x)
+ else
+ fun_l29_n72(x)
+ end
+end
+
+def fun_l28_n898(x)
+ if (x < 1)
+ fun_l29_n556(x)
+ else
+ fun_l29_n324(x)
+ end
+end
+
+def fun_l28_n899(x)
+ if (x < 1)
+ fun_l29_n821(x)
+ else
+ fun_l29_n520(x)
+ end
+end
+
+def fun_l28_n900(x)
+ if (x < 1)
+ fun_l29_n820(x)
+ else
+ fun_l29_n581(x)
+ end
+end
+
+def fun_l28_n901(x)
+ if (x < 1)
+ fun_l29_n416(x)
+ else
+ fun_l29_n662(x)
+ end
+end
+
+def fun_l28_n902(x)
+ if (x < 1)
+ fun_l29_n574(x)
+ else
+ fun_l29_n472(x)
+ end
+end
+
+def fun_l28_n903(x)
+ if (x < 1)
+ fun_l29_n140(x)
+ else
+ fun_l29_n608(x)
+ end
+end
+
+def fun_l28_n904(x)
+ if (x < 1)
+ fun_l29_n492(x)
+ else
+ fun_l29_n50(x)
+ end
+end
+
+def fun_l28_n905(x)
+ if (x < 1)
+ fun_l29_n240(x)
+ else
+ fun_l29_n308(x)
+ end
+end
+
+def fun_l28_n906(x)
+ if (x < 1)
+ fun_l29_n400(x)
+ else
+ fun_l29_n560(x)
+ end
+end
+
+def fun_l28_n907(x)
+ if (x < 1)
+ fun_l29_n974(x)
+ else
+ fun_l29_n580(x)
+ end
+end
+
+def fun_l28_n908(x)
+ if (x < 1)
+ fun_l29_n234(x)
+ else
+ fun_l29_n921(x)
+ end
+end
+
+def fun_l28_n909(x)
+ if (x < 1)
+ fun_l29_n712(x)
+ else
+ fun_l29_n861(x)
+ end
+end
+
+def fun_l28_n910(x)
+ if (x < 1)
+ fun_l29_n716(x)
+ else
+ fun_l29_n818(x)
+ end
+end
+
+def fun_l28_n911(x)
+ if (x < 1)
+ fun_l29_n574(x)
+ else
+ fun_l29_n668(x)
+ end
+end
+
+def fun_l28_n912(x)
+ if (x < 1)
+ fun_l29_n259(x)
+ else
+ fun_l29_n573(x)
+ end
+end
+
+def fun_l28_n913(x)
+ if (x < 1)
+ fun_l29_n427(x)
+ else
+ fun_l29_n572(x)
+ end
+end
+
+def fun_l28_n914(x)
+ if (x < 1)
+ fun_l29_n449(x)
+ else
+ fun_l29_n25(x)
+ end
+end
+
+def fun_l28_n915(x)
+ if (x < 1)
+ fun_l29_n234(x)
+ else
+ fun_l29_n391(x)
+ end
+end
+
+def fun_l28_n916(x)
+ if (x < 1)
+ fun_l29_n115(x)
+ else
+ fun_l29_n918(x)
+ end
+end
+
+def fun_l28_n917(x)
+ if (x < 1)
+ fun_l29_n83(x)
+ else
+ fun_l29_n295(x)
+ end
+end
+
+def fun_l28_n918(x)
+ if (x < 1)
+ fun_l29_n917(x)
+ else
+ fun_l29_n542(x)
+ end
+end
+
+def fun_l28_n919(x)
+ if (x < 1)
+ fun_l29_n836(x)
+ else
+ fun_l29_n460(x)
+ end
+end
+
+def fun_l28_n920(x)
+ if (x < 1)
+ fun_l29_n333(x)
+ else
+ fun_l29_n622(x)
+ end
+end
+
+def fun_l28_n921(x)
+ if (x < 1)
+ fun_l29_n717(x)
+ else
+ fun_l29_n342(x)
+ end
+end
+
+def fun_l28_n922(x)
+ if (x < 1)
+ fun_l29_n670(x)
+ else
+ fun_l29_n735(x)
+ end
+end
+
+def fun_l28_n923(x)
+ if (x < 1)
+ fun_l29_n723(x)
+ else
+ fun_l29_n994(x)
+ end
+end
+
+def fun_l28_n924(x)
+ if (x < 1)
+ fun_l29_n477(x)
+ else
+ fun_l29_n234(x)
+ end
+end
+
+def fun_l28_n925(x)
+ if (x < 1)
+ fun_l29_n514(x)
+ else
+ fun_l29_n194(x)
+ end
+end
+
+def fun_l28_n926(x)
+ if (x < 1)
+ fun_l29_n33(x)
+ else
+ fun_l29_n149(x)
+ end
+end
+
+def fun_l28_n927(x)
+ if (x < 1)
+ fun_l29_n805(x)
+ else
+ fun_l29_n9(x)
+ end
+end
+
+def fun_l28_n928(x)
+ if (x < 1)
+ fun_l29_n351(x)
+ else
+ fun_l29_n250(x)
+ end
+end
+
+def fun_l28_n929(x)
+ if (x < 1)
+ fun_l29_n22(x)
+ else
+ fun_l29_n294(x)
+ end
+end
+
+def fun_l28_n930(x)
+ if (x < 1)
+ fun_l29_n456(x)
+ else
+ fun_l29_n194(x)
+ end
+end
+
+def fun_l28_n931(x)
+ if (x < 1)
+ fun_l29_n354(x)
+ else
+ fun_l29_n341(x)
+ end
+end
+
+def fun_l28_n932(x)
+ if (x < 1)
+ fun_l29_n782(x)
+ else
+ fun_l29_n159(x)
+ end
+end
+
+def fun_l28_n933(x)
+ if (x < 1)
+ fun_l29_n636(x)
+ else
+ fun_l29_n588(x)
+ end
+end
+
+def fun_l28_n934(x)
+ if (x < 1)
+ fun_l29_n473(x)
+ else
+ fun_l29_n527(x)
+ end
+end
+
+def fun_l28_n935(x)
+ if (x < 1)
+ fun_l29_n776(x)
+ else
+ fun_l29_n349(x)
+ end
+end
+
+def fun_l28_n936(x)
+ if (x < 1)
+ fun_l29_n786(x)
+ else
+ fun_l29_n95(x)
+ end
+end
+
+def fun_l28_n937(x)
+ if (x < 1)
+ fun_l29_n276(x)
+ else
+ fun_l29_n952(x)
+ end
+end
+
+def fun_l28_n938(x)
+ if (x < 1)
+ fun_l29_n826(x)
+ else
+ fun_l29_n183(x)
+ end
+end
+
+def fun_l28_n939(x)
+ if (x < 1)
+ fun_l29_n11(x)
+ else
+ fun_l29_n775(x)
+ end
+end
+
+def fun_l28_n940(x)
+ if (x < 1)
+ fun_l29_n161(x)
+ else
+ fun_l29_n255(x)
+ end
+end
+
+def fun_l28_n941(x)
+ if (x < 1)
+ fun_l29_n77(x)
+ else
+ fun_l29_n673(x)
+ end
+end
+
+def fun_l28_n942(x)
+ if (x < 1)
+ fun_l29_n659(x)
+ else
+ fun_l29_n413(x)
+ end
+end
+
+def fun_l28_n943(x)
+ if (x < 1)
+ fun_l29_n827(x)
+ else
+ fun_l29_n262(x)
+ end
+end
+
+def fun_l28_n944(x)
+ if (x < 1)
+ fun_l29_n720(x)
+ else
+ fun_l29_n476(x)
+ end
+end
+
+def fun_l28_n945(x)
+ if (x < 1)
+ fun_l29_n457(x)
+ else
+ fun_l29_n613(x)
+ end
+end
+
+def fun_l28_n946(x)
+ if (x < 1)
+ fun_l29_n137(x)
+ else
+ fun_l29_n763(x)
+ end
+end
+
+def fun_l28_n947(x)
+ if (x < 1)
+ fun_l29_n569(x)
+ else
+ fun_l29_n331(x)
+ end
+end
+
+def fun_l28_n948(x)
+ if (x < 1)
+ fun_l29_n687(x)
+ else
+ fun_l29_n684(x)
+ end
+end
+
+def fun_l28_n949(x)
+ if (x < 1)
+ fun_l29_n532(x)
+ else
+ fun_l29_n203(x)
+ end
+end
+
+def fun_l28_n950(x)
+ if (x < 1)
+ fun_l29_n211(x)
+ else
+ fun_l29_n606(x)
+ end
+end
+
+def fun_l28_n951(x)
+ if (x < 1)
+ fun_l29_n522(x)
+ else
+ fun_l29_n907(x)
+ end
+end
+
+def fun_l28_n952(x)
+ if (x < 1)
+ fun_l29_n64(x)
+ else
+ fun_l29_n742(x)
+ end
+end
+
+def fun_l28_n953(x)
+ if (x < 1)
+ fun_l29_n28(x)
+ else
+ fun_l29_n712(x)
+ end
+end
+
+def fun_l28_n954(x)
+ if (x < 1)
+ fun_l29_n177(x)
+ else
+ fun_l29_n327(x)
+ end
+end
+
+def fun_l28_n955(x)
+ if (x < 1)
+ fun_l29_n274(x)
+ else
+ fun_l29_n830(x)
+ end
+end
+
+def fun_l28_n956(x)
+ if (x < 1)
+ fun_l29_n709(x)
+ else
+ fun_l29_n115(x)
+ end
+end
+
+def fun_l28_n957(x)
+ if (x < 1)
+ fun_l29_n72(x)
+ else
+ fun_l29_n849(x)
+ end
+end
+
+def fun_l28_n958(x)
+ if (x < 1)
+ fun_l29_n347(x)
+ else
+ fun_l29_n317(x)
+ end
+end
+
+def fun_l28_n959(x)
+ if (x < 1)
+ fun_l29_n540(x)
+ else
+ fun_l29_n226(x)
+ end
+end
+
+def fun_l28_n960(x)
+ if (x < 1)
+ fun_l29_n383(x)
+ else
+ fun_l29_n634(x)
+ end
+end
+
+def fun_l28_n961(x)
+ if (x < 1)
+ fun_l29_n616(x)
+ else
+ fun_l29_n300(x)
+ end
+end
+
+def fun_l28_n962(x)
+ if (x < 1)
+ fun_l29_n955(x)
+ else
+ fun_l29_n861(x)
+ end
+end
+
+def fun_l28_n963(x)
+ if (x < 1)
+ fun_l29_n143(x)
+ else
+ fun_l29_n106(x)
+ end
+end
+
+def fun_l28_n964(x)
+ if (x < 1)
+ fun_l29_n883(x)
+ else
+ fun_l29_n997(x)
+ end
+end
+
+def fun_l28_n965(x)
+ if (x < 1)
+ fun_l29_n247(x)
+ else
+ fun_l29_n471(x)
+ end
+end
+
+def fun_l28_n966(x)
+ if (x < 1)
+ fun_l29_n237(x)
+ else
+ fun_l29_n107(x)
+ end
+end
+
+def fun_l28_n967(x)
+ if (x < 1)
+ fun_l29_n754(x)
+ else
+ fun_l29_n996(x)
+ end
+end
+
+def fun_l28_n968(x)
+ if (x < 1)
+ fun_l29_n951(x)
+ else
+ fun_l29_n216(x)
+ end
+end
+
+def fun_l28_n969(x)
+ if (x < 1)
+ fun_l29_n36(x)
+ else
+ fun_l29_n815(x)
+ end
+end
+
+def fun_l28_n970(x)
+ if (x < 1)
+ fun_l29_n362(x)
+ else
+ fun_l29_n27(x)
+ end
+end
+
+def fun_l28_n971(x)
+ if (x < 1)
+ fun_l29_n837(x)
+ else
+ fun_l29_n230(x)
+ end
+end
+
+def fun_l28_n972(x)
+ if (x < 1)
+ fun_l29_n295(x)
+ else
+ fun_l29_n772(x)
+ end
+end
+
+def fun_l28_n973(x)
+ if (x < 1)
+ fun_l29_n570(x)
+ else
+ fun_l29_n514(x)
+ end
+end
+
+def fun_l28_n974(x)
+ if (x < 1)
+ fun_l29_n151(x)
+ else
+ fun_l29_n368(x)
+ end
+end
+
+def fun_l28_n975(x)
+ if (x < 1)
+ fun_l29_n229(x)
+ else
+ fun_l29_n408(x)
+ end
+end
+
+def fun_l28_n976(x)
+ if (x < 1)
+ fun_l29_n209(x)
+ else
+ fun_l29_n513(x)
+ end
+end
+
+def fun_l28_n977(x)
+ if (x < 1)
+ fun_l29_n753(x)
+ else
+ fun_l29_n36(x)
+ end
+end
+
+def fun_l28_n978(x)
+ if (x < 1)
+ fun_l29_n887(x)
+ else
+ fun_l29_n330(x)
+ end
+end
+
+def fun_l28_n979(x)
+ if (x < 1)
+ fun_l29_n880(x)
+ else
+ fun_l29_n6(x)
+ end
+end
+
+def fun_l28_n980(x)
+ if (x < 1)
+ fun_l29_n953(x)
+ else
+ fun_l29_n573(x)
+ end
+end
+
+def fun_l28_n981(x)
+ if (x < 1)
+ fun_l29_n960(x)
+ else
+ fun_l29_n774(x)
+ end
+end
+
+def fun_l28_n982(x)
+ if (x < 1)
+ fun_l29_n769(x)
+ else
+ fun_l29_n43(x)
+ end
+end
+
+def fun_l28_n983(x)
+ if (x < 1)
+ fun_l29_n43(x)
+ else
+ fun_l29_n168(x)
+ end
+end
+
+def fun_l28_n984(x)
+ if (x < 1)
+ fun_l29_n70(x)
+ else
+ fun_l29_n695(x)
+ end
+end
+
+def fun_l28_n985(x)
+ if (x < 1)
+ fun_l29_n421(x)
+ else
+ fun_l29_n9(x)
+ end
+end
+
+def fun_l28_n986(x)
+ if (x < 1)
+ fun_l29_n588(x)
+ else
+ fun_l29_n916(x)
+ end
+end
+
+def fun_l28_n987(x)
+ if (x < 1)
+ fun_l29_n693(x)
+ else
+ fun_l29_n979(x)
+ end
+end
+
+def fun_l28_n988(x)
+ if (x < 1)
+ fun_l29_n684(x)
+ else
+ fun_l29_n342(x)
+ end
+end
+
+def fun_l28_n989(x)
+ if (x < 1)
+ fun_l29_n148(x)
+ else
+ fun_l29_n348(x)
+ end
+end
+
+def fun_l28_n990(x)
+ if (x < 1)
+ fun_l29_n740(x)
+ else
+ fun_l29_n120(x)
+ end
+end
+
+def fun_l28_n991(x)
+ if (x < 1)
+ fun_l29_n258(x)
+ else
+ fun_l29_n670(x)
+ end
+end
+
+def fun_l28_n992(x)
+ if (x < 1)
+ fun_l29_n514(x)
+ else
+ fun_l29_n198(x)
+ end
+end
+
+def fun_l28_n993(x)
+ if (x < 1)
+ fun_l29_n563(x)
+ else
+ fun_l29_n174(x)
+ end
+end
+
+def fun_l28_n994(x)
+ if (x < 1)
+ fun_l29_n391(x)
+ else
+ fun_l29_n689(x)
+ end
+end
+
+def fun_l28_n995(x)
+ if (x < 1)
+ fun_l29_n156(x)
+ else
+ fun_l29_n579(x)
+ end
+end
+
+def fun_l28_n996(x)
+ if (x < 1)
+ fun_l29_n411(x)
+ else
+ fun_l29_n212(x)
+ end
+end
+
+def fun_l28_n997(x)
+ if (x < 1)
+ fun_l29_n709(x)
+ else
+ fun_l29_n735(x)
+ end
+end
+
+def fun_l28_n998(x)
+ if (x < 1)
+ fun_l29_n960(x)
+ else
+ fun_l29_n813(x)
+ end
+end
+
+def fun_l28_n999(x)
+ if (x < 1)
+ fun_l29_n553(x)
+ else
+ fun_l29_n875(x)
+ end
+end
+
+def fun_l29_n0(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n1(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n2(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n3(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n4(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n5(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n6(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n7(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n8(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n9(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n10(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n11(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n12(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n13(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n14(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n15(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n16(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n17(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n18(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n19(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n20(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n21(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n22(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n23(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n24(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n25(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n26(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n27(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n28(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n29(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n30(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n31(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n32(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n33(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n34(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n35(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n36(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n37(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n38(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n39(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n40(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n41(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n42(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n43(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n44(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n45(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n46(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n47(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n48(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n49(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n50(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n51(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n52(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n53(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n54(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n55(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n56(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n57(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n58(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n59(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n60(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n61(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n62(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n63(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n64(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n65(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n66(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n67(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n68(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n69(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n70(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n71(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n72(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n73(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n74(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n75(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n76(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n77(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n78(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n79(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n80(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n81(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n82(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n83(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n84(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n85(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n86(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n87(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n88(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n89(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n90(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n91(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n92(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n93(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n94(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n95(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n96(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n97(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n98(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n99(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n100(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n101(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n102(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n103(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n104(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n105(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n106(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n107(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n108(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n109(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n110(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n111(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n112(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n113(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n114(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n115(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n116(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n117(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n118(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n119(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n120(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n121(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n122(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n123(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n124(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n125(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n126(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n127(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n128(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n129(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n130(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n131(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n132(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n133(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n134(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n135(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n136(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n137(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n138(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n139(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n140(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n141(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n142(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n143(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n144(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n145(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n146(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n147(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n148(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n149(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n150(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n151(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n152(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n153(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n154(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n155(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n156(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n157(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n158(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n159(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n160(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n161(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n162(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n163(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n164(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n165(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n166(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n167(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n168(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n169(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n170(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n171(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n172(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n173(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n174(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n175(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n176(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n177(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n178(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n179(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n180(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n181(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n182(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n183(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n184(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n185(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n186(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n187(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n188(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n189(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n190(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n191(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n192(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n193(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n194(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n195(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n196(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n197(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n198(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n199(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n200(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n201(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n202(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n203(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n204(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n205(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n206(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n207(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n208(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n209(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n210(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n211(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n212(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n213(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n214(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n215(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n216(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n217(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n218(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n219(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n220(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n221(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n222(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n223(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n224(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n225(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n226(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n227(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n228(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n229(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n230(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n231(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n232(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n233(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n234(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n235(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n236(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n237(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n238(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n239(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n240(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n241(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n242(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n243(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n244(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n245(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n246(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n247(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n248(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n249(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n250(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n251(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n252(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n253(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n254(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n255(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n256(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n257(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n258(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n259(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n260(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n261(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n262(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n263(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n264(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n265(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n266(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n267(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n268(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n269(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n270(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n271(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n272(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n273(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n274(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n275(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n276(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n277(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n278(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n279(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n280(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n281(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n282(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n283(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n284(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n285(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n286(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n287(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n288(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n289(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n290(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n291(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n292(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n293(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n294(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n295(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n296(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n297(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n298(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n299(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n300(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n301(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n302(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n303(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n304(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n305(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n306(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n307(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n308(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n309(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n310(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n311(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n312(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n313(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n314(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n315(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n316(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n317(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n318(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n319(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n320(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n321(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n322(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n323(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n324(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n325(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n326(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n327(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n328(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n329(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n330(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n331(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n332(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n333(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n334(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n335(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n336(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n337(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n338(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n339(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n340(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n341(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n342(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n343(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n344(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n345(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n346(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n347(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n348(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n349(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n350(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n351(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n352(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n353(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n354(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n355(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n356(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n357(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n358(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n359(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n360(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n361(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n362(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n363(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n364(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n365(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n366(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n367(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n368(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n369(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n370(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n371(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n372(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n373(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n374(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n375(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n376(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n377(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n378(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n379(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n380(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n381(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n382(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n383(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n384(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n385(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n386(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n387(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n388(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n389(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n390(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n391(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n392(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n393(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n394(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n395(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n396(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n397(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n398(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n399(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n400(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n401(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n402(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n403(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n404(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n405(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n406(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n407(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n408(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n409(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n410(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n411(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n412(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n413(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n414(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n415(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n416(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n417(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n418(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n419(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n420(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n421(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n422(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n423(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n424(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n425(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n426(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n427(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n428(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n429(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n430(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n431(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n432(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n433(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n434(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n435(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n436(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n437(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n438(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n439(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n440(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n441(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n442(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n443(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n444(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n445(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n446(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n447(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n448(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n449(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n450(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n451(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n452(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n453(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n454(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n455(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n456(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n457(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n458(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n459(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n460(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n461(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n462(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n463(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n464(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n465(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n466(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n467(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n468(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n469(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n470(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n471(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n472(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n473(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n474(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n475(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n476(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n477(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n478(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n479(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n480(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n481(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n482(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n483(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n484(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n485(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n486(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n487(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n488(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n489(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n490(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n491(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n492(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n493(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n494(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n495(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n496(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n497(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n498(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n499(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n500(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n501(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n502(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n503(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n504(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n505(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n506(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n507(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n508(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n509(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n510(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n511(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n512(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n513(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n514(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n515(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n516(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n517(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n518(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n519(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n520(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n521(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n522(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n523(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n524(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n525(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n526(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n527(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n528(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n529(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n530(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n531(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n532(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n533(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n534(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n535(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n536(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n537(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n538(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n539(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n540(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n541(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n542(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n543(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n544(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n545(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n546(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n547(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n548(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n549(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n550(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n551(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n552(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n553(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n554(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n555(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n556(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n557(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n558(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n559(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n560(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n561(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n562(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n563(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n564(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n565(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n566(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n567(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n568(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n569(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n570(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n571(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n572(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n573(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n574(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n575(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n576(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n577(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n578(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n579(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n580(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n581(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n582(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n583(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n584(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n585(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n586(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n587(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n588(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n589(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n590(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n591(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n592(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n593(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n594(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n595(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n596(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n597(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n598(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n599(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n600(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n601(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n602(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n603(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n604(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n605(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n606(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n607(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n608(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n609(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n610(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n611(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n612(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n613(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n614(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n615(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n616(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n617(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n618(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n619(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n620(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n621(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n622(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n623(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n624(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n625(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n626(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n627(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n628(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n629(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n630(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n631(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n632(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n633(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n634(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n635(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n636(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n637(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n638(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n639(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n640(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n641(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n642(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n643(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n644(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n645(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n646(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n647(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n648(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n649(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n650(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n651(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n652(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n653(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n654(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n655(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n656(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n657(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n658(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n659(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n660(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n661(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n662(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n663(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n664(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n665(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n666(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n667(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n668(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n669(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n670(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n671(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n672(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n673(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n674(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n675(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n676(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n677(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n678(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n679(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n680(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n681(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n682(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n683(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n684(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n685(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n686(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n687(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n688(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n689(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n690(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n691(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n692(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n693(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n694(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n695(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n696(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n697(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n698(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n699(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n700(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n701(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n702(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n703(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n704(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n705(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n706(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n707(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n708(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n709(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n710(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n711(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n712(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n713(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n714(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n715(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n716(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n717(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n718(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n719(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n720(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n721(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n722(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n723(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n724(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n725(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n726(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n727(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n728(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n729(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n730(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n731(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n732(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n733(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n734(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n735(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n736(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n737(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n738(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n739(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n740(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n741(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n742(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n743(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n744(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n745(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n746(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n747(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n748(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n749(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n750(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n751(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n752(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n753(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n754(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n755(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n756(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n757(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n758(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n759(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n760(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n761(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n762(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n763(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n764(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n765(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n766(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n767(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n768(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n769(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n770(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n771(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n772(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n773(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n774(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n775(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n776(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n777(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n778(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n779(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n780(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n781(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n782(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n783(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n784(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n785(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n786(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n787(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n788(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n789(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n790(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n791(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n792(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n793(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n794(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n795(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n796(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n797(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n798(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n799(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n800(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n801(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n802(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n803(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n804(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n805(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n806(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n807(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n808(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n809(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n810(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n811(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n812(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n813(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n814(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n815(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n816(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n817(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n818(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n819(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n820(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n821(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n822(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n823(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n824(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n825(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n826(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n827(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n828(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n829(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n830(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n831(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n832(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n833(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n834(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n835(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n836(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n837(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n838(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n839(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n840(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n841(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n842(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n843(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n844(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n845(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n846(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n847(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n848(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n849(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n850(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n851(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n852(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n853(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n854(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n855(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n856(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n857(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n858(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n859(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n860(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n861(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n862(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n863(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n864(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n865(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n866(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n867(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n868(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n869(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n870(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n871(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n872(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n873(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n874(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n875(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n876(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n877(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n878(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n879(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n880(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n881(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n882(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n883(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n884(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n885(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n886(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n887(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n888(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n889(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n890(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n891(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n892(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n893(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n894(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n895(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n896(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n897(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n898(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n899(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n900(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n901(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n902(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n903(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n904(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n905(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n906(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n907(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n908(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n909(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n910(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n911(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n912(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n913(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n914(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n915(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n916(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n917(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n918(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n919(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n920(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n921(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n922(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n923(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n924(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n925(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n926(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n927(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n928(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n929(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n930(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n931(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n932(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n933(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n934(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n935(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n936(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n937(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n938(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n939(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n940(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n941(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n942(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n943(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n944(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n945(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n946(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n947(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n948(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n949(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n950(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n951(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n952(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n953(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n954(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n955(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n956(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n957(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n958(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n959(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n960(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n961(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n962(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n963(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n964(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n965(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n966(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n967(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n968(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n969(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n970(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n971(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n972(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n973(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n974(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n975(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n976(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n977(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n978(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n979(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n980(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n981(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n982(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n983(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n984(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n985(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n986(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n987(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n988(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n989(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n990(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n991(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n992(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n993(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n994(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n995(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n996(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n997(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n998(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+def fun_l29_n999(x)
+ if (x < 1)
+ inc(x)
+ else
+ inc(x)
+ end
+end
+
+@a = 0
+@b = 0
+@c = 0
+@d = 0
+
+@count = 0
+def inc(x)
+ @count += 1
+end
+
+@x = 0
+
+100.times do
+ @x = (@x < 1)? 1:0
+ fun_l0_n0(@x)
+ fun_l0_n1(@x)
+ fun_l0_n2(@x)
+ fun_l0_n3(@x)
+ fun_l0_n4(@x)
+ fun_l0_n5(@x)
+ fun_l0_n6(@x)
+ fun_l0_n7(@x)
+ fun_l0_n8(@x)
+ fun_l0_n9(@x)
+ fun_l0_n10(@x)
+ fun_l0_n11(@x)
+ fun_l0_n12(@x)
+ fun_l0_n13(@x)
+ fun_l0_n14(@x)
+ fun_l0_n15(@x)
+ fun_l0_n16(@x)
+ fun_l0_n17(@x)
+ fun_l0_n18(@x)
+ fun_l0_n19(@x)
+ fun_l0_n20(@x)
+ fun_l0_n21(@x)
+ fun_l0_n22(@x)
+ fun_l0_n23(@x)
+ fun_l0_n24(@x)
+ fun_l0_n25(@x)
+ fun_l0_n26(@x)
+ fun_l0_n27(@x)
+ fun_l0_n28(@x)
+ fun_l0_n29(@x)
+ fun_l0_n30(@x)
+ fun_l0_n31(@x)
+ fun_l0_n32(@x)
+ fun_l0_n33(@x)
+ fun_l0_n34(@x)
+ fun_l0_n35(@x)
+ fun_l0_n36(@x)
+ fun_l0_n37(@x)
+ fun_l0_n38(@x)
+ fun_l0_n39(@x)
+ fun_l0_n40(@x)
+ fun_l0_n41(@x)
+ fun_l0_n42(@x)
+ fun_l0_n43(@x)
+ fun_l0_n44(@x)
+ fun_l0_n45(@x)
+ fun_l0_n46(@x)
+ fun_l0_n47(@x)
+ fun_l0_n48(@x)
+ fun_l0_n49(@x)
+ fun_l0_n50(@x)
+ fun_l0_n51(@x)
+ fun_l0_n52(@x)
+ fun_l0_n53(@x)
+ fun_l0_n54(@x)
+ fun_l0_n55(@x)
+ fun_l0_n56(@x)
+ fun_l0_n57(@x)
+ fun_l0_n58(@x)
+ fun_l0_n59(@x)
+ fun_l0_n60(@x)
+ fun_l0_n61(@x)
+ fun_l0_n62(@x)
+ fun_l0_n63(@x)
+ fun_l0_n64(@x)
+ fun_l0_n65(@x)
+ fun_l0_n66(@x)
+ fun_l0_n67(@x)
+ fun_l0_n68(@x)
+ fun_l0_n69(@x)
+ fun_l0_n70(@x)
+ fun_l0_n71(@x)
+ fun_l0_n72(@x)
+ fun_l0_n73(@x)
+ fun_l0_n74(@x)
+ fun_l0_n75(@x)
+ fun_l0_n76(@x)
+ fun_l0_n77(@x)
+ fun_l0_n78(@x)
+ fun_l0_n79(@x)
+ fun_l0_n80(@x)
+ fun_l0_n81(@x)
+ fun_l0_n82(@x)
+ fun_l0_n83(@x)
+ fun_l0_n84(@x)
+ fun_l0_n85(@x)
+ fun_l0_n86(@x)
+ fun_l0_n87(@x)
+ fun_l0_n88(@x)
+ fun_l0_n89(@x)
+ fun_l0_n90(@x)
+ fun_l0_n91(@x)
+ fun_l0_n92(@x)
+ fun_l0_n93(@x)
+ fun_l0_n94(@x)
+ fun_l0_n95(@x)
+ fun_l0_n96(@x)
+ fun_l0_n97(@x)
+ fun_l0_n98(@x)
+ fun_l0_n99(@x)
+ fun_l0_n100(@x)
+ fun_l0_n101(@x)
+ fun_l0_n102(@x)
+ fun_l0_n103(@x)
+ fun_l0_n104(@x)
+ fun_l0_n105(@x)
+ fun_l0_n106(@x)
+ fun_l0_n107(@x)
+ fun_l0_n108(@x)
+ fun_l0_n109(@x)
+ fun_l0_n110(@x)
+ fun_l0_n111(@x)
+ fun_l0_n112(@x)
+ fun_l0_n113(@x)
+ fun_l0_n114(@x)
+ fun_l0_n115(@x)
+ fun_l0_n116(@x)
+ fun_l0_n117(@x)
+ fun_l0_n118(@x)
+ fun_l0_n119(@x)
+ fun_l0_n120(@x)
+ fun_l0_n121(@x)
+ fun_l0_n122(@x)
+ fun_l0_n123(@x)
+ fun_l0_n124(@x)
+ fun_l0_n125(@x)
+ fun_l0_n126(@x)
+ fun_l0_n127(@x)
+ fun_l0_n128(@x)
+ fun_l0_n129(@x)
+ fun_l0_n130(@x)
+ fun_l0_n131(@x)
+ fun_l0_n132(@x)
+ fun_l0_n133(@x)
+ fun_l0_n134(@x)
+ fun_l0_n135(@x)
+ fun_l0_n136(@x)
+ fun_l0_n137(@x)
+ fun_l0_n138(@x)
+ fun_l0_n139(@x)
+ fun_l0_n140(@x)
+ fun_l0_n141(@x)
+ fun_l0_n142(@x)
+ fun_l0_n143(@x)
+ fun_l0_n144(@x)
+ fun_l0_n145(@x)
+ fun_l0_n146(@x)
+ fun_l0_n147(@x)
+ fun_l0_n148(@x)
+ fun_l0_n149(@x)
+ fun_l0_n150(@x)
+ fun_l0_n151(@x)
+ fun_l0_n152(@x)
+ fun_l0_n153(@x)
+ fun_l0_n154(@x)
+ fun_l0_n155(@x)
+ fun_l0_n156(@x)
+ fun_l0_n157(@x)
+ fun_l0_n158(@x)
+ fun_l0_n159(@x)
+ fun_l0_n160(@x)
+ fun_l0_n161(@x)
+ fun_l0_n162(@x)
+ fun_l0_n163(@x)
+ fun_l0_n164(@x)
+ fun_l0_n165(@x)
+ fun_l0_n166(@x)
+ fun_l0_n167(@x)
+ fun_l0_n168(@x)
+ fun_l0_n169(@x)
+ fun_l0_n170(@x)
+ fun_l0_n171(@x)
+ fun_l0_n172(@x)
+ fun_l0_n173(@x)
+ fun_l0_n174(@x)
+ fun_l0_n175(@x)
+ fun_l0_n176(@x)
+ fun_l0_n177(@x)
+ fun_l0_n178(@x)
+ fun_l0_n179(@x)
+ fun_l0_n180(@x)
+ fun_l0_n181(@x)
+ fun_l0_n182(@x)
+ fun_l0_n183(@x)
+ fun_l0_n184(@x)
+ fun_l0_n185(@x)
+ fun_l0_n186(@x)
+ fun_l0_n187(@x)
+ fun_l0_n188(@x)
+ fun_l0_n189(@x)
+ fun_l0_n190(@x)
+ fun_l0_n191(@x)
+ fun_l0_n192(@x)
+ fun_l0_n193(@x)
+ fun_l0_n194(@x)
+ fun_l0_n195(@x)
+ fun_l0_n196(@x)
+ fun_l0_n197(@x)
+ fun_l0_n198(@x)
+ fun_l0_n199(@x)
+ fun_l0_n200(@x)
+ fun_l0_n201(@x)
+ fun_l0_n202(@x)
+ fun_l0_n203(@x)
+ fun_l0_n204(@x)
+ fun_l0_n205(@x)
+ fun_l0_n206(@x)
+ fun_l0_n207(@x)
+ fun_l0_n208(@x)
+ fun_l0_n209(@x)
+ fun_l0_n210(@x)
+ fun_l0_n211(@x)
+ fun_l0_n212(@x)
+ fun_l0_n213(@x)
+ fun_l0_n214(@x)
+ fun_l0_n215(@x)
+ fun_l0_n216(@x)
+ fun_l0_n217(@x)
+ fun_l0_n218(@x)
+ fun_l0_n219(@x)
+ fun_l0_n220(@x)
+ fun_l0_n221(@x)
+ fun_l0_n222(@x)
+ fun_l0_n223(@x)
+ fun_l0_n224(@x)
+ fun_l0_n225(@x)
+ fun_l0_n226(@x)
+ fun_l0_n227(@x)
+ fun_l0_n228(@x)
+ fun_l0_n229(@x)
+ fun_l0_n230(@x)
+ fun_l0_n231(@x)
+ fun_l0_n232(@x)
+ fun_l0_n233(@x)
+ fun_l0_n234(@x)
+ fun_l0_n235(@x)
+ fun_l0_n236(@x)
+ fun_l0_n237(@x)
+ fun_l0_n238(@x)
+ fun_l0_n239(@x)
+ fun_l0_n240(@x)
+ fun_l0_n241(@x)
+ fun_l0_n242(@x)
+ fun_l0_n243(@x)
+ fun_l0_n244(@x)
+ fun_l0_n245(@x)
+ fun_l0_n246(@x)
+ fun_l0_n247(@x)
+ fun_l0_n248(@x)
+ fun_l0_n249(@x)
+ fun_l0_n250(@x)
+ fun_l0_n251(@x)
+ fun_l0_n252(@x)
+ fun_l0_n253(@x)
+ fun_l0_n254(@x)
+ fun_l0_n255(@x)
+ fun_l0_n256(@x)
+ fun_l0_n257(@x)
+ fun_l0_n258(@x)
+ fun_l0_n259(@x)
+ fun_l0_n260(@x)
+ fun_l0_n261(@x)
+ fun_l0_n262(@x)
+ fun_l0_n263(@x)
+ fun_l0_n264(@x)
+ fun_l0_n265(@x)
+ fun_l0_n266(@x)
+ fun_l0_n267(@x)
+ fun_l0_n268(@x)
+ fun_l0_n269(@x)
+ fun_l0_n270(@x)
+ fun_l0_n271(@x)
+ fun_l0_n272(@x)
+ fun_l0_n273(@x)
+ fun_l0_n274(@x)
+ fun_l0_n275(@x)
+ fun_l0_n276(@x)
+ fun_l0_n277(@x)
+ fun_l0_n278(@x)
+ fun_l0_n279(@x)
+ fun_l0_n280(@x)
+ fun_l0_n281(@x)
+ fun_l0_n282(@x)
+ fun_l0_n283(@x)
+ fun_l0_n284(@x)
+ fun_l0_n285(@x)
+ fun_l0_n286(@x)
+ fun_l0_n287(@x)
+ fun_l0_n288(@x)
+ fun_l0_n289(@x)
+ fun_l0_n290(@x)
+ fun_l0_n291(@x)
+ fun_l0_n292(@x)
+ fun_l0_n293(@x)
+ fun_l0_n294(@x)
+ fun_l0_n295(@x)
+ fun_l0_n296(@x)
+ fun_l0_n297(@x)
+ fun_l0_n298(@x)
+ fun_l0_n299(@x)
+ fun_l0_n300(@x)
+ fun_l0_n301(@x)
+ fun_l0_n302(@x)
+ fun_l0_n303(@x)
+ fun_l0_n304(@x)
+ fun_l0_n305(@x)
+ fun_l0_n306(@x)
+ fun_l0_n307(@x)
+ fun_l0_n308(@x)
+ fun_l0_n309(@x)
+ fun_l0_n310(@x)
+ fun_l0_n311(@x)
+ fun_l0_n312(@x)
+ fun_l0_n313(@x)
+ fun_l0_n314(@x)
+ fun_l0_n315(@x)
+ fun_l0_n316(@x)
+ fun_l0_n317(@x)
+ fun_l0_n318(@x)
+ fun_l0_n319(@x)
+ fun_l0_n320(@x)
+ fun_l0_n321(@x)
+ fun_l0_n322(@x)
+ fun_l0_n323(@x)
+ fun_l0_n324(@x)
+ fun_l0_n325(@x)
+ fun_l0_n326(@x)
+ fun_l0_n327(@x)
+ fun_l0_n328(@x)
+ fun_l0_n329(@x)
+ fun_l0_n330(@x)
+ fun_l0_n331(@x)
+ fun_l0_n332(@x)
+ fun_l0_n333(@x)
+ fun_l0_n334(@x)
+ fun_l0_n335(@x)
+ fun_l0_n336(@x)
+ fun_l0_n337(@x)
+ fun_l0_n338(@x)
+ fun_l0_n339(@x)
+ fun_l0_n340(@x)
+ fun_l0_n341(@x)
+ fun_l0_n342(@x)
+ fun_l0_n343(@x)
+ fun_l0_n344(@x)
+ fun_l0_n345(@x)
+ fun_l0_n346(@x)
+ fun_l0_n347(@x)
+ fun_l0_n348(@x)
+ fun_l0_n349(@x)
+ fun_l0_n350(@x)
+ fun_l0_n351(@x)
+ fun_l0_n352(@x)
+ fun_l0_n353(@x)
+ fun_l0_n354(@x)
+ fun_l0_n355(@x)
+ fun_l0_n356(@x)
+ fun_l0_n357(@x)
+ fun_l0_n358(@x)
+ fun_l0_n359(@x)
+ fun_l0_n360(@x)
+ fun_l0_n361(@x)
+ fun_l0_n362(@x)
+ fun_l0_n363(@x)
+ fun_l0_n364(@x)
+ fun_l0_n365(@x)
+ fun_l0_n366(@x)
+ fun_l0_n367(@x)
+ fun_l0_n368(@x)
+ fun_l0_n369(@x)
+ fun_l0_n370(@x)
+ fun_l0_n371(@x)
+ fun_l0_n372(@x)
+ fun_l0_n373(@x)
+ fun_l0_n374(@x)
+ fun_l0_n375(@x)
+ fun_l0_n376(@x)
+ fun_l0_n377(@x)
+ fun_l0_n378(@x)
+ fun_l0_n379(@x)
+ fun_l0_n380(@x)
+ fun_l0_n381(@x)
+ fun_l0_n382(@x)
+ fun_l0_n383(@x)
+ fun_l0_n384(@x)
+ fun_l0_n385(@x)
+ fun_l0_n386(@x)
+ fun_l0_n387(@x)
+ fun_l0_n388(@x)
+ fun_l0_n389(@x)
+ fun_l0_n390(@x)
+ fun_l0_n391(@x)
+ fun_l0_n392(@x)
+ fun_l0_n393(@x)
+ fun_l0_n394(@x)
+ fun_l0_n395(@x)
+ fun_l0_n396(@x)
+ fun_l0_n397(@x)
+ fun_l0_n398(@x)
+ fun_l0_n399(@x)
+ fun_l0_n400(@x)
+ fun_l0_n401(@x)
+ fun_l0_n402(@x)
+ fun_l0_n403(@x)
+ fun_l0_n404(@x)
+ fun_l0_n405(@x)
+ fun_l0_n406(@x)
+ fun_l0_n407(@x)
+ fun_l0_n408(@x)
+ fun_l0_n409(@x)
+ fun_l0_n410(@x)
+ fun_l0_n411(@x)
+ fun_l0_n412(@x)
+ fun_l0_n413(@x)
+ fun_l0_n414(@x)
+ fun_l0_n415(@x)
+ fun_l0_n416(@x)
+ fun_l0_n417(@x)
+ fun_l0_n418(@x)
+ fun_l0_n419(@x)
+ fun_l0_n420(@x)
+ fun_l0_n421(@x)
+ fun_l0_n422(@x)
+ fun_l0_n423(@x)
+ fun_l0_n424(@x)
+ fun_l0_n425(@x)
+ fun_l0_n426(@x)
+ fun_l0_n427(@x)
+ fun_l0_n428(@x)
+ fun_l0_n429(@x)
+ fun_l0_n430(@x)
+ fun_l0_n431(@x)
+ fun_l0_n432(@x)
+ fun_l0_n433(@x)
+ fun_l0_n434(@x)
+ fun_l0_n435(@x)
+ fun_l0_n436(@x)
+ fun_l0_n437(@x)
+ fun_l0_n438(@x)
+ fun_l0_n439(@x)
+ fun_l0_n440(@x)
+ fun_l0_n441(@x)
+ fun_l0_n442(@x)
+ fun_l0_n443(@x)
+ fun_l0_n444(@x)
+ fun_l0_n445(@x)
+ fun_l0_n446(@x)
+ fun_l0_n447(@x)
+ fun_l0_n448(@x)
+ fun_l0_n449(@x)
+ fun_l0_n450(@x)
+ fun_l0_n451(@x)
+ fun_l0_n452(@x)
+ fun_l0_n453(@x)
+ fun_l0_n454(@x)
+ fun_l0_n455(@x)
+ fun_l0_n456(@x)
+ fun_l0_n457(@x)
+ fun_l0_n458(@x)
+ fun_l0_n459(@x)
+ fun_l0_n460(@x)
+ fun_l0_n461(@x)
+ fun_l0_n462(@x)
+ fun_l0_n463(@x)
+ fun_l0_n464(@x)
+ fun_l0_n465(@x)
+ fun_l0_n466(@x)
+ fun_l0_n467(@x)
+ fun_l0_n468(@x)
+ fun_l0_n469(@x)
+ fun_l0_n470(@x)
+ fun_l0_n471(@x)
+ fun_l0_n472(@x)
+ fun_l0_n473(@x)
+ fun_l0_n474(@x)
+ fun_l0_n475(@x)
+ fun_l0_n476(@x)
+ fun_l0_n477(@x)
+ fun_l0_n478(@x)
+ fun_l0_n479(@x)
+ fun_l0_n480(@x)
+ fun_l0_n481(@x)
+ fun_l0_n482(@x)
+ fun_l0_n483(@x)
+ fun_l0_n484(@x)
+ fun_l0_n485(@x)
+ fun_l0_n486(@x)
+ fun_l0_n487(@x)
+ fun_l0_n488(@x)
+ fun_l0_n489(@x)
+ fun_l0_n490(@x)
+ fun_l0_n491(@x)
+ fun_l0_n492(@x)
+ fun_l0_n493(@x)
+ fun_l0_n494(@x)
+ fun_l0_n495(@x)
+ fun_l0_n496(@x)
+ fun_l0_n497(@x)
+ fun_l0_n498(@x)
+ fun_l0_n499(@x)
+ fun_l0_n500(@x)
+ fun_l0_n501(@x)
+ fun_l0_n502(@x)
+ fun_l0_n503(@x)
+ fun_l0_n504(@x)
+ fun_l0_n505(@x)
+ fun_l0_n506(@x)
+ fun_l0_n507(@x)
+ fun_l0_n508(@x)
+ fun_l0_n509(@x)
+ fun_l0_n510(@x)
+ fun_l0_n511(@x)
+ fun_l0_n512(@x)
+ fun_l0_n513(@x)
+ fun_l0_n514(@x)
+ fun_l0_n515(@x)
+ fun_l0_n516(@x)
+ fun_l0_n517(@x)
+ fun_l0_n518(@x)
+ fun_l0_n519(@x)
+ fun_l0_n520(@x)
+ fun_l0_n521(@x)
+ fun_l0_n522(@x)
+ fun_l0_n523(@x)
+ fun_l0_n524(@x)
+ fun_l0_n525(@x)
+ fun_l0_n526(@x)
+ fun_l0_n527(@x)
+ fun_l0_n528(@x)
+ fun_l0_n529(@x)
+ fun_l0_n530(@x)
+ fun_l0_n531(@x)
+ fun_l0_n532(@x)
+ fun_l0_n533(@x)
+ fun_l0_n534(@x)
+ fun_l0_n535(@x)
+ fun_l0_n536(@x)
+ fun_l0_n537(@x)
+ fun_l0_n538(@x)
+ fun_l0_n539(@x)
+ fun_l0_n540(@x)
+ fun_l0_n541(@x)
+ fun_l0_n542(@x)
+ fun_l0_n543(@x)
+ fun_l0_n544(@x)
+ fun_l0_n545(@x)
+ fun_l0_n546(@x)
+ fun_l0_n547(@x)
+ fun_l0_n548(@x)
+ fun_l0_n549(@x)
+ fun_l0_n550(@x)
+ fun_l0_n551(@x)
+ fun_l0_n552(@x)
+ fun_l0_n553(@x)
+ fun_l0_n554(@x)
+ fun_l0_n555(@x)
+ fun_l0_n556(@x)
+ fun_l0_n557(@x)
+ fun_l0_n558(@x)
+ fun_l0_n559(@x)
+ fun_l0_n560(@x)
+ fun_l0_n561(@x)
+ fun_l0_n562(@x)
+ fun_l0_n563(@x)
+ fun_l0_n564(@x)
+ fun_l0_n565(@x)
+ fun_l0_n566(@x)
+ fun_l0_n567(@x)
+ fun_l0_n568(@x)
+ fun_l0_n569(@x)
+ fun_l0_n570(@x)
+ fun_l0_n571(@x)
+ fun_l0_n572(@x)
+ fun_l0_n573(@x)
+ fun_l0_n574(@x)
+ fun_l0_n575(@x)
+ fun_l0_n576(@x)
+ fun_l0_n577(@x)
+ fun_l0_n578(@x)
+ fun_l0_n579(@x)
+ fun_l0_n580(@x)
+ fun_l0_n581(@x)
+ fun_l0_n582(@x)
+ fun_l0_n583(@x)
+ fun_l0_n584(@x)
+ fun_l0_n585(@x)
+ fun_l0_n586(@x)
+ fun_l0_n587(@x)
+ fun_l0_n588(@x)
+ fun_l0_n589(@x)
+ fun_l0_n590(@x)
+ fun_l0_n591(@x)
+ fun_l0_n592(@x)
+ fun_l0_n593(@x)
+ fun_l0_n594(@x)
+ fun_l0_n595(@x)
+ fun_l0_n596(@x)
+ fun_l0_n597(@x)
+ fun_l0_n598(@x)
+ fun_l0_n599(@x)
+ fun_l0_n600(@x)
+ fun_l0_n601(@x)
+ fun_l0_n602(@x)
+ fun_l0_n603(@x)
+ fun_l0_n604(@x)
+ fun_l0_n605(@x)
+ fun_l0_n606(@x)
+ fun_l0_n607(@x)
+ fun_l0_n608(@x)
+ fun_l0_n609(@x)
+ fun_l0_n610(@x)
+ fun_l0_n611(@x)
+ fun_l0_n612(@x)
+ fun_l0_n613(@x)
+ fun_l0_n614(@x)
+ fun_l0_n615(@x)
+ fun_l0_n616(@x)
+ fun_l0_n617(@x)
+ fun_l0_n618(@x)
+ fun_l0_n619(@x)
+ fun_l0_n620(@x)
+ fun_l0_n621(@x)
+ fun_l0_n622(@x)
+ fun_l0_n623(@x)
+ fun_l0_n624(@x)
+ fun_l0_n625(@x)
+ fun_l0_n626(@x)
+ fun_l0_n627(@x)
+ fun_l0_n628(@x)
+ fun_l0_n629(@x)
+ fun_l0_n630(@x)
+ fun_l0_n631(@x)
+ fun_l0_n632(@x)
+ fun_l0_n633(@x)
+ fun_l0_n634(@x)
+ fun_l0_n635(@x)
+ fun_l0_n636(@x)
+ fun_l0_n637(@x)
+ fun_l0_n638(@x)
+ fun_l0_n639(@x)
+ fun_l0_n640(@x)
+ fun_l0_n641(@x)
+ fun_l0_n642(@x)
+ fun_l0_n643(@x)
+ fun_l0_n644(@x)
+ fun_l0_n645(@x)
+ fun_l0_n646(@x)
+ fun_l0_n647(@x)
+ fun_l0_n648(@x)
+ fun_l0_n649(@x)
+ fun_l0_n650(@x)
+ fun_l0_n651(@x)
+ fun_l0_n652(@x)
+ fun_l0_n653(@x)
+ fun_l0_n654(@x)
+ fun_l0_n655(@x)
+ fun_l0_n656(@x)
+ fun_l0_n657(@x)
+ fun_l0_n658(@x)
+ fun_l0_n659(@x)
+ fun_l0_n660(@x)
+ fun_l0_n661(@x)
+ fun_l0_n662(@x)
+ fun_l0_n663(@x)
+ fun_l0_n664(@x)
+ fun_l0_n665(@x)
+ fun_l0_n666(@x)
+ fun_l0_n667(@x)
+ fun_l0_n668(@x)
+ fun_l0_n669(@x)
+ fun_l0_n670(@x)
+ fun_l0_n671(@x)
+ fun_l0_n672(@x)
+ fun_l0_n673(@x)
+ fun_l0_n674(@x)
+ fun_l0_n675(@x)
+ fun_l0_n676(@x)
+ fun_l0_n677(@x)
+ fun_l0_n678(@x)
+ fun_l0_n679(@x)
+ fun_l0_n680(@x)
+ fun_l0_n681(@x)
+ fun_l0_n682(@x)
+ fun_l0_n683(@x)
+ fun_l0_n684(@x)
+ fun_l0_n685(@x)
+ fun_l0_n686(@x)
+ fun_l0_n687(@x)
+ fun_l0_n688(@x)
+ fun_l0_n689(@x)
+ fun_l0_n690(@x)
+ fun_l0_n691(@x)
+ fun_l0_n692(@x)
+ fun_l0_n693(@x)
+ fun_l0_n694(@x)
+ fun_l0_n695(@x)
+ fun_l0_n696(@x)
+ fun_l0_n697(@x)
+ fun_l0_n698(@x)
+ fun_l0_n699(@x)
+ fun_l0_n700(@x)
+ fun_l0_n701(@x)
+ fun_l0_n702(@x)
+ fun_l0_n703(@x)
+ fun_l0_n704(@x)
+ fun_l0_n705(@x)
+ fun_l0_n706(@x)
+ fun_l0_n707(@x)
+ fun_l0_n708(@x)
+ fun_l0_n709(@x)
+ fun_l0_n710(@x)
+ fun_l0_n711(@x)
+ fun_l0_n712(@x)
+ fun_l0_n713(@x)
+ fun_l0_n714(@x)
+ fun_l0_n715(@x)
+ fun_l0_n716(@x)
+ fun_l0_n717(@x)
+ fun_l0_n718(@x)
+ fun_l0_n719(@x)
+ fun_l0_n720(@x)
+ fun_l0_n721(@x)
+ fun_l0_n722(@x)
+ fun_l0_n723(@x)
+ fun_l0_n724(@x)
+ fun_l0_n725(@x)
+ fun_l0_n726(@x)
+ fun_l0_n727(@x)
+ fun_l0_n728(@x)
+ fun_l0_n729(@x)
+ fun_l0_n730(@x)
+ fun_l0_n731(@x)
+ fun_l0_n732(@x)
+ fun_l0_n733(@x)
+ fun_l0_n734(@x)
+ fun_l0_n735(@x)
+ fun_l0_n736(@x)
+ fun_l0_n737(@x)
+ fun_l0_n738(@x)
+ fun_l0_n739(@x)
+ fun_l0_n740(@x)
+ fun_l0_n741(@x)
+ fun_l0_n742(@x)
+ fun_l0_n743(@x)
+ fun_l0_n744(@x)
+ fun_l0_n745(@x)
+ fun_l0_n746(@x)
+ fun_l0_n747(@x)
+ fun_l0_n748(@x)
+ fun_l0_n749(@x)
+ fun_l0_n750(@x)
+ fun_l0_n751(@x)
+ fun_l0_n752(@x)
+ fun_l0_n753(@x)
+ fun_l0_n754(@x)
+ fun_l0_n755(@x)
+ fun_l0_n756(@x)
+ fun_l0_n757(@x)
+ fun_l0_n758(@x)
+ fun_l0_n759(@x)
+ fun_l0_n760(@x)
+ fun_l0_n761(@x)
+ fun_l0_n762(@x)
+ fun_l0_n763(@x)
+ fun_l0_n764(@x)
+ fun_l0_n765(@x)
+ fun_l0_n766(@x)
+ fun_l0_n767(@x)
+ fun_l0_n768(@x)
+ fun_l0_n769(@x)
+ fun_l0_n770(@x)
+ fun_l0_n771(@x)
+ fun_l0_n772(@x)
+ fun_l0_n773(@x)
+ fun_l0_n774(@x)
+ fun_l0_n775(@x)
+ fun_l0_n776(@x)
+ fun_l0_n777(@x)
+ fun_l0_n778(@x)
+ fun_l0_n779(@x)
+ fun_l0_n780(@x)
+ fun_l0_n781(@x)
+ fun_l0_n782(@x)
+ fun_l0_n783(@x)
+ fun_l0_n784(@x)
+ fun_l0_n785(@x)
+ fun_l0_n786(@x)
+ fun_l0_n787(@x)
+ fun_l0_n788(@x)
+ fun_l0_n789(@x)
+ fun_l0_n790(@x)
+ fun_l0_n791(@x)
+ fun_l0_n792(@x)
+ fun_l0_n793(@x)
+ fun_l0_n794(@x)
+ fun_l0_n795(@x)
+ fun_l0_n796(@x)
+ fun_l0_n797(@x)
+ fun_l0_n798(@x)
+ fun_l0_n799(@x)
+ fun_l0_n800(@x)
+ fun_l0_n801(@x)
+ fun_l0_n802(@x)
+ fun_l0_n803(@x)
+ fun_l0_n804(@x)
+ fun_l0_n805(@x)
+ fun_l0_n806(@x)
+ fun_l0_n807(@x)
+ fun_l0_n808(@x)
+ fun_l0_n809(@x)
+ fun_l0_n810(@x)
+ fun_l0_n811(@x)
+ fun_l0_n812(@x)
+ fun_l0_n813(@x)
+ fun_l0_n814(@x)
+ fun_l0_n815(@x)
+ fun_l0_n816(@x)
+ fun_l0_n817(@x)
+ fun_l0_n818(@x)
+ fun_l0_n819(@x)
+ fun_l0_n820(@x)
+ fun_l0_n821(@x)
+ fun_l0_n822(@x)
+ fun_l0_n823(@x)
+ fun_l0_n824(@x)
+ fun_l0_n825(@x)
+ fun_l0_n826(@x)
+ fun_l0_n827(@x)
+ fun_l0_n828(@x)
+ fun_l0_n829(@x)
+ fun_l0_n830(@x)
+ fun_l0_n831(@x)
+ fun_l0_n832(@x)
+ fun_l0_n833(@x)
+ fun_l0_n834(@x)
+ fun_l0_n835(@x)
+ fun_l0_n836(@x)
+ fun_l0_n837(@x)
+ fun_l0_n838(@x)
+ fun_l0_n839(@x)
+ fun_l0_n840(@x)
+ fun_l0_n841(@x)
+ fun_l0_n842(@x)
+ fun_l0_n843(@x)
+ fun_l0_n844(@x)
+ fun_l0_n845(@x)
+ fun_l0_n846(@x)
+ fun_l0_n847(@x)
+ fun_l0_n848(@x)
+ fun_l0_n849(@x)
+ fun_l0_n850(@x)
+ fun_l0_n851(@x)
+ fun_l0_n852(@x)
+ fun_l0_n853(@x)
+ fun_l0_n854(@x)
+ fun_l0_n855(@x)
+ fun_l0_n856(@x)
+ fun_l0_n857(@x)
+ fun_l0_n858(@x)
+ fun_l0_n859(@x)
+ fun_l0_n860(@x)
+ fun_l0_n861(@x)
+ fun_l0_n862(@x)
+ fun_l0_n863(@x)
+ fun_l0_n864(@x)
+ fun_l0_n865(@x)
+ fun_l0_n866(@x)
+ fun_l0_n867(@x)
+ fun_l0_n868(@x)
+ fun_l0_n869(@x)
+ fun_l0_n870(@x)
+ fun_l0_n871(@x)
+ fun_l0_n872(@x)
+ fun_l0_n873(@x)
+ fun_l0_n874(@x)
+ fun_l0_n875(@x)
+ fun_l0_n876(@x)
+ fun_l0_n877(@x)
+ fun_l0_n878(@x)
+ fun_l0_n879(@x)
+ fun_l0_n880(@x)
+ fun_l0_n881(@x)
+ fun_l0_n882(@x)
+ fun_l0_n883(@x)
+ fun_l0_n884(@x)
+ fun_l0_n885(@x)
+ fun_l0_n886(@x)
+ fun_l0_n887(@x)
+ fun_l0_n888(@x)
+ fun_l0_n889(@x)
+ fun_l0_n890(@x)
+ fun_l0_n891(@x)
+ fun_l0_n892(@x)
+ fun_l0_n893(@x)
+ fun_l0_n894(@x)
+ fun_l0_n895(@x)
+ fun_l0_n896(@x)
+ fun_l0_n897(@x)
+ fun_l0_n898(@x)
+ fun_l0_n899(@x)
+ fun_l0_n900(@x)
+ fun_l0_n901(@x)
+ fun_l0_n902(@x)
+ fun_l0_n903(@x)
+ fun_l0_n904(@x)
+ fun_l0_n905(@x)
+ fun_l0_n906(@x)
+ fun_l0_n907(@x)
+ fun_l0_n908(@x)
+ fun_l0_n909(@x)
+ fun_l0_n910(@x)
+ fun_l0_n911(@x)
+ fun_l0_n912(@x)
+ fun_l0_n913(@x)
+ fun_l0_n914(@x)
+ fun_l0_n915(@x)
+ fun_l0_n916(@x)
+ fun_l0_n917(@x)
+ fun_l0_n918(@x)
+ fun_l0_n919(@x)
+ fun_l0_n920(@x)
+ fun_l0_n921(@x)
+ fun_l0_n922(@x)
+ fun_l0_n923(@x)
+ fun_l0_n924(@x)
+ fun_l0_n925(@x)
+ fun_l0_n926(@x)
+ fun_l0_n927(@x)
+ fun_l0_n928(@x)
+ fun_l0_n929(@x)
+ fun_l0_n930(@x)
+ fun_l0_n931(@x)
+ fun_l0_n932(@x)
+ fun_l0_n933(@x)
+ fun_l0_n934(@x)
+ fun_l0_n935(@x)
+ fun_l0_n936(@x)
+ fun_l0_n937(@x)
+ fun_l0_n938(@x)
+ fun_l0_n939(@x)
+ fun_l0_n940(@x)
+ fun_l0_n941(@x)
+ fun_l0_n942(@x)
+ fun_l0_n943(@x)
+ fun_l0_n944(@x)
+ fun_l0_n945(@x)
+ fun_l0_n946(@x)
+ fun_l0_n947(@x)
+ fun_l0_n948(@x)
+ fun_l0_n949(@x)
+ fun_l0_n950(@x)
+ fun_l0_n951(@x)
+ fun_l0_n952(@x)
+ fun_l0_n953(@x)
+ fun_l0_n954(@x)
+ fun_l0_n955(@x)
+ fun_l0_n956(@x)
+ fun_l0_n957(@x)
+ fun_l0_n958(@x)
+ fun_l0_n959(@x)
+ fun_l0_n960(@x)
+ fun_l0_n961(@x)
+ fun_l0_n962(@x)
+ fun_l0_n963(@x)
+ fun_l0_n964(@x)
+ fun_l0_n965(@x)
+ fun_l0_n966(@x)
+ fun_l0_n967(@x)
+ fun_l0_n968(@x)
+ fun_l0_n969(@x)
+ fun_l0_n970(@x)
+ fun_l0_n971(@x)
+ fun_l0_n972(@x)
+ fun_l0_n973(@x)
+ fun_l0_n974(@x)
+ fun_l0_n975(@x)
+ fun_l0_n976(@x)
+ fun_l0_n977(@x)
+ fun_l0_n978(@x)
+ fun_l0_n979(@x)
+ fun_l0_n980(@x)
+ fun_l0_n981(@x)
+ fun_l0_n982(@x)
+ fun_l0_n983(@x)
+ fun_l0_n984(@x)
+ fun_l0_n985(@x)
+ fun_l0_n986(@x)
+ fun_l0_n987(@x)
+ fun_l0_n988(@x)
+ fun_l0_n989(@x)
+ fun_l0_n990(@x)
+ fun_l0_n991(@x)
+ fun_l0_n992(@x)
+ fun_l0_n993(@x)
+ fun_l0_n994(@x)
+ fun_l0_n995(@x)
+ fun_l0_n996(@x)
+ fun_l0_n997(@x)
+ fun_l0_n998(@x)
+ fun_l0_n999(@x)
+end
+
+@count
+
+}
diff --git a/bootstraptest/test_yjit_30k_methods.rb b/bootstraptest/test_yjit_30k_methods.rb
new file mode 100644
index 0000000000..f2acea4ce5
--- /dev/null
+++ b/bootstraptest/test_yjit_30k_methods.rb
@@ -0,0 +1,121018 @@
+# This is a torture test for the JIT.
+# There are 30K tiny methods in a 30-deep call hierarchy.
+assert_equal '1000000', %q{
+
+def fun_l0_n0()
+ fun_l1_n758
+end
+
+def fun_l0_n1()
+ fun_l1_n491
+end
+
+def fun_l0_n2()
+ fun_l1_n804
+end
+
+def fun_l0_n3()
+ fun_l1_n253
+end
+
+def fun_l0_n4()
+ fun_l1_n409
+end
+
+def fun_l0_n5()
+ fun_l1_n383
+end
+
+def fun_l0_n6()
+ fun_l1_n170
+end
+
+def fun_l0_n7()
+ fun_l1_n821
+end
+
+def fun_l0_n8()
+ fun_l1_n424
+end
+
+def fun_l0_n9()
+ fun_l1_n328
+end
+
+def fun_l0_n10()
+ fun_l1_n326
+end
+
+def fun_l0_n11()
+ fun_l1_n879
+end
+
+def fun_l0_n12()
+ fun_l1_n509
+end
+
+def fun_l0_n13()
+ fun_l1_n464
+end
+
+def fun_l0_n14()
+ fun_l1_n806
+end
+
+def fun_l0_n15()
+ fun_l1_n277
+end
+
+def fun_l0_n16()
+ fun_l1_n684
+end
+
+def fun_l0_n17()
+ fun_l1_n54
+end
+
+def fun_l0_n18()
+ fun_l1_n514
+end
+
+def fun_l0_n19()
+ fun_l1_n967
+end
+
+def fun_l0_n20()
+ fun_l1_n50
+end
+
+def fun_l0_n21()
+ fun_l1_n248
+end
+
+def fun_l0_n22()
+ fun_l1_n410
+end
+
+def fun_l0_n23()
+ fun_l1_n411
+end
+
+def fun_l0_n24()
+ fun_l1_n422
+end
+
+def fun_l0_n25()
+ fun_l1_n427
+end
+
+def fun_l0_n26()
+ fun_l1_n929
+end
+
+def fun_l0_n27()
+ fun_l1_n93
+end
+
+def fun_l0_n28()
+ fun_l1_n790
+end
+
+def fun_l0_n29()
+ fun_l1_n107
+end
+
+def fun_l0_n30()
+ fun_l1_n29
+end
+
+def fun_l0_n31()
+ fun_l1_n164
+end
+
+def fun_l0_n32()
+ fun_l1_n720
+end
+
+def fun_l0_n33()
+ fun_l1_n30
+end
+
+def fun_l0_n34()
+ fun_l1_n133
+end
+
+def fun_l0_n35()
+ fun_l1_n122
+end
+
+def fun_l0_n36()
+ fun_l1_n101
+end
+
+def fun_l0_n37()
+ fun_l1_n80
+end
+
+def fun_l0_n38()
+ fun_l1_n759
+end
+
+def fun_l0_n39()
+ fun_l1_n315
+end
+
+def fun_l0_n40()
+ fun_l1_n508
+end
+
+def fun_l0_n41()
+ fun_l1_n750
+end
+
+def fun_l0_n42()
+ fun_l1_n200
+end
+
+def fun_l0_n43()
+ fun_l1_n662
+end
+
+def fun_l0_n44()
+ fun_l1_n2
+end
+
+def fun_l0_n45()
+ fun_l1_n864
+end
+
+def fun_l0_n46()
+ fun_l1_n482
+end
+
+def fun_l0_n47()
+ fun_l1_n196
+end
+
+def fun_l0_n48()
+ fun_l1_n867
+end
+
+def fun_l0_n49()
+ fun_l1_n942
+end
+
+def fun_l0_n50()
+ fun_l1_n179
+end
+
+def fun_l0_n51()
+ fun_l1_n442
+end
+
+def fun_l0_n52()
+ fun_l1_n613
+end
+
+def fun_l0_n53()
+ fun_l1_n282
+end
+
+def fun_l0_n54()
+ fun_l1_n624
+end
+
+def fun_l0_n55()
+ fun_l1_n514
+end
+
+def fun_l0_n56()
+ fun_l1_n59
+end
+
+def fun_l0_n57()
+ fun_l1_n401
+end
+
+def fun_l0_n58()
+ fun_l1_n693
+end
+
+def fun_l0_n59()
+ fun_l1_n643
+end
+
+def fun_l0_n60()
+ fun_l1_n104
+end
+
+def fun_l0_n61()
+ fun_l1_n407
+end
+
+def fun_l0_n62()
+ fun_l1_n418
+end
+
+def fun_l0_n63()
+ fun_l1_n775
+end
+
+def fun_l0_n64()
+ fun_l1_n351
+end
+
+def fun_l0_n65()
+ fun_l1_n320
+end
+
+def fun_l0_n66()
+ fun_l1_n181
+end
+
+def fun_l0_n67()
+ fun_l1_n878
+end
+
+def fun_l0_n68()
+ fun_l1_n404
+end
+
+def fun_l0_n69()
+ fun_l1_n660
+end
+
+def fun_l0_n70()
+ fun_l1_n644
+end
+
+def fun_l0_n71()
+ fun_l1_n416
+end
+
+def fun_l0_n72()
+ fun_l1_n372
+end
+
+def fun_l0_n73()
+ fun_l1_n525
+end
+
+def fun_l0_n74()
+ fun_l1_n468
+end
+
+def fun_l0_n75()
+ fun_l1_n652
+end
+
+def fun_l0_n76()
+ fun_l1_n418
+end
+
+def fun_l0_n77()
+ fun_l1_n935
+end
+
+def fun_l0_n78()
+ fun_l1_n170
+end
+
+def fun_l0_n79()
+ fun_l1_n805
+end
+
+def fun_l0_n80()
+ fun_l1_n405
+end
+
+def fun_l0_n81()
+ fun_l1_n994
+end
+
+def fun_l0_n82()
+ fun_l1_n395
+end
+
+def fun_l0_n83()
+ fun_l1_n399
+end
+
+def fun_l0_n84()
+ fun_l1_n503
+end
+
+def fun_l0_n85()
+ fun_l1_n451
+end
+
+def fun_l0_n86()
+ fun_l1_n920
+end
+
+def fun_l0_n87()
+ fun_l1_n446
+end
+
+def fun_l0_n88()
+ fun_l1_n637
+end
+
+def fun_l0_n89()
+ fun_l1_n732
+end
+
+def fun_l0_n90()
+ fun_l1_n823
+end
+
+def fun_l0_n91()
+ fun_l1_n347
+end
+
+def fun_l0_n92()
+ fun_l1_n808
+end
+
+def fun_l0_n93()
+ fun_l1_n941
+end
+
+def fun_l0_n94()
+ fun_l1_n808
+end
+
+def fun_l0_n95()
+ fun_l1_n575
+end
+
+def fun_l0_n96()
+ fun_l1_n835
+end
+
+def fun_l0_n97()
+ fun_l1_n601
+end
+
+def fun_l0_n98()
+ fun_l1_n522
+end
+
+def fun_l0_n99()
+ fun_l1_n884
+end
+
+def fun_l0_n100()
+ fun_l1_n234
+end
+
+def fun_l0_n101()
+ fun_l1_n58
+end
+
+def fun_l0_n102()
+ fun_l1_n702
+end
+
+def fun_l0_n103()
+ fun_l1_n816
+end
+
+def fun_l0_n104()
+ fun_l1_n92
+end
+
+def fun_l0_n105()
+ fun_l1_n673
+end
+
+def fun_l0_n106()
+ fun_l1_n360
+end
+
+def fun_l0_n107()
+ fun_l1_n305
+end
+
+def fun_l0_n108()
+ fun_l1_n202
+end
+
+def fun_l0_n109()
+ fun_l1_n879
+end
+
+def fun_l0_n110()
+ fun_l1_n84
+end
+
+def fun_l0_n111()
+ fun_l1_n50
+end
+
+def fun_l0_n112()
+ fun_l1_n648
+end
+
+def fun_l0_n113()
+ fun_l1_n786
+end
+
+def fun_l0_n114()
+ fun_l1_n627
+end
+
+def fun_l0_n115()
+ fun_l1_n404
+end
+
+def fun_l0_n116()
+ fun_l1_n496
+end
+
+def fun_l0_n117()
+ fun_l1_n778
+end
+
+def fun_l0_n118()
+ fun_l1_n119
+end
+
+def fun_l0_n119()
+ fun_l1_n350
+end
+
+def fun_l0_n120()
+ fun_l1_n767
+end
+
+def fun_l0_n121()
+ fun_l1_n463
+end
+
+def fun_l0_n122()
+ fun_l1_n481
+end
+
+def fun_l0_n123()
+ fun_l1_n80
+end
+
+def fun_l0_n124()
+ fun_l1_n271
+end
+
+def fun_l0_n125()
+ fun_l1_n315
+end
+
+def fun_l0_n126()
+ fun_l1_n545
+end
+
+def fun_l0_n127()
+ fun_l1_n598
+end
+
+def fun_l0_n128()
+ fun_l1_n599
+end
+
+def fun_l0_n129()
+ fun_l1_n263
+end
+
+def fun_l0_n130()
+ fun_l1_n514
+end
+
+def fun_l0_n131()
+ fun_l1_n779
+end
+
+def fun_l0_n132()
+ fun_l1_n585
+end
+
+def fun_l0_n133()
+ fun_l1_n919
+end
+
+def fun_l0_n134()
+ fun_l1_n665
+end
+
+def fun_l0_n135()
+ fun_l1_n442
+end
+
+def fun_l0_n136()
+ fun_l1_n84
+end
+
+def fun_l0_n137()
+ fun_l1_n74
+end
+
+def fun_l0_n138()
+ fun_l1_n606
+end
+
+def fun_l0_n139()
+ fun_l1_n655
+end
+
+def fun_l0_n140()
+ fun_l1_n130
+end
+
+def fun_l0_n141()
+ fun_l1_n626
+end
+
+def fun_l0_n142()
+ fun_l1_n605
+end
+
+def fun_l0_n143()
+ fun_l1_n420
+end
+
+def fun_l0_n144()
+ fun_l1_n100
+end
+
+def fun_l0_n145()
+ fun_l1_n961
+end
+
+def fun_l0_n146()
+ fun_l1_n721
+end
+
+def fun_l0_n147()
+ fun_l1_n453
+end
+
+def fun_l0_n148()
+ fun_l1_n737
+end
+
+def fun_l0_n149()
+ fun_l1_n230
+end
+
+def fun_l0_n150()
+ fun_l1_n881
+end
+
+def fun_l0_n151()
+ fun_l1_n471
+end
+
+def fun_l0_n152()
+ fun_l1_n72
+end
+
+def fun_l0_n153()
+ fun_l1_n221
+end
+
+def fun_l0_n154()
+ fun_l1_n504
+end
+
+def fun_l0_n155()
+ fun_l1_n222
+end
+
+def fun_l0_n156()
+ fun_l1_n348
+end
+
+def fun_l0_n157()
+ fun_l1_n738
+end
+
+def fun_l0_n158()
+ fun_l1_n588
+end
+
+def fun_l0_n159()
+ fun_l1_n64
+end
+
+def fun_l0_n160()
+ fun_l1_n829
+end
+
+def fun_l0_n161()
+ fun_l1_n265
+end
+
+def fun_l0_n162()
+ fun_l1_n471
+end
+
+def fun_l0_n163()
+ fun_l1_n304
+end
+
+def fun_l0_n164()
+ fun_l1_n518
+end
+
+def fun_l0_n165()
+ fun_l1_n89
+end
+
+def fun_l0_n166()
+ fun_l1_n728
+end
+
+def fun_l0_n167()
+ fun_l1_n292
+end
+
+def fun_l0_n168()
+ fun_l1_n142
+end
+
+def fun_l0_n169()
+ fun_l1_n374
+end
+
+def fun_l0_n170()
+ fun_l1_n371
+end
+
+def fun_l0_n171()
+ fun_l1_n904
+end
+
+def fun_l0_n172()
+ fun_l1_n519
+end
+
+def fun_l0_n173()
+ fun_l1_n239
+end
+
+def fun_l0_n174()
+ fun_l1_n664
+end
+
+def fun_l0_n175()
+ fun_l1_n701
+end
+
+def fun_l0_n176()
+ fun_l1_n586
+end
+
+def fun_l0_n177()
+ fun_l1_n78
+end
+
+def fun_l0_n178()
+ fun_l1_n663
+end
+
+def fun_l0_n179()
+ fun_l1_n46
+end
+
+def fun_l0_n180()
+ fun_l1_n273
+end
+
+def fun_l0_n181()
+ fun_l1_n250
+end
+
+def fun_l0_n182()
+ fun_l1_n362
+end
+
+def fun_l0_n183()
+ fun_l1_n69
+end
+
+def fun_l0_n184()
+ fun_l1_n874
+end
+
+def fun_l0_n185()
+ fun_l1_n135
+end
+
+def fun_l0_n186()
+ fun_l1_n634
+end
+
+def fun_l0_n187()
+ fun_l1_n885
+end
+
+def fun_l0_n188()
+ fun_l1_n589
+end
+
+def fun_l0_n189()
+ fun_l1_n21
+end
+
+def fun_l0_n190()
+ fun_l1_n962
+end
+
+def fun_l0_n191()
+ fun_l1_n267
+end
+
+def fun_l0_n192()
+ fun_l1_n569
+end
+
+def fun_l0_n193()
+ fun_l1_n921
+end
+
+def fun_l0_n194()
+ fun_l1_n535
+end
+
+def fun_l0_n195()
+ fun_l1_n362
+end
+
+def fun_l0_n196()
+ fun_l1_n862
+end
+
+def fun_l0_n197()
+ fun_l1_n565
+end
+
+def fun_l0_n198()
+ fun_l1_n779
+end
+
+def fun_l0_n199()
+ fun_l1_n848
+end
+
+def fun_l0_n200()
+ fun_l1_n755
+end
+
+def fun_l0_n201()
+ fun_l1_n493
+end
+
+def fun_l0_n202()
+ fun_l1_n574
+end
+
+def fun_l0_n203()
+ fun_l1_n172
+end
+
+def fun_l0_n204()
+ fun_l1_n388
+end
+
+def fun_l0_n205()
+ fun_l1_n67
+end
+
+def fun_l0_n206()
+ fun_l1_n449
+end
+
+def fun_l0_n207()
+ fun_l1_n883
+end
+
+def fun_l0_n208()
+ fun_l1_n749
+end
+
+def fun_l0_n209()
+ fun_l1_n425
+end
+
+def fun_l0_n210()
+ fun_l1_n848
+end
+
+def fun_l0_n211()
+ fun_l1_n320
+end
+
+def fun_l0_n212()
+ fun_l1_n122
+end
+
+def fun_l0_n213()
+ fun_l1_n878
+end
+
+def fun_l0_n214()
+ fun_l1_n763
+end
+
+def fun_l0_n215()
+ fun_l1_n70
+end
+
+def fun_l0_n216()
+ fun_l1_n494
+end
+
+def fun_l0_n217()
+ fun_l1_n13
+end
+
+def fun_l0_n218()
+ fun_l1_n907
+end
+
+def fun_l0_n219()
+ fun_l1_n775
+end
+
+def fun_l0_n220()
+ fun_l1_n633
+end
+
+def fun_l0_n221()
+ fun_l1_n371
+end
+
+def fun_l0_n222()
+ fun_l1_n691
+end
+
+def fun_l0_n223()
+ fun_l1_n994
+end
+
+def fun_l0_n224()
+ fun_l1_n268
+end
+
+def fun_l0_n225()
+ fun_l1_n52
+end
+
+def fun_l0_n226()
+ fun_l1_n291
+end
+
+def fun_l0_n227()
+ fun_l1_n903
+end
+
+def fun_l0_n228()
+ fun_l1_n369
+end
+
+def fun_l0_n229()
+ fun_l1_n232
+end
+
+def fun_l0_n230()
+ fun_l1_n554
+end
+
+def fun_l0_n231()
+ fun_l1_n479
+end
+
+def fun_l0_n232()
+ fun_l1_n838
+end
+
+def fun_l0_n233()
+ fun_l1_n316
+end
+
+def fun_l0_n234()
+ fun_l1_n685
+end
+
+def fun_l0_n235()
+ fun_l1_n95
+end
+
+def fun_l0_n236()
+ fun_l1_n629
+end
+
+def fun_l0_n237()
+ fun_l1_n218
+end
+
+def fun_l0_n238()
+ fun_l1_n406
+end
+
+def fun_l0_n239()
+ fun_l1_n187
+end
+
+def fun_l0_n240()
+ fun_l1_n905
+end
+
+def fun_l0_n241()
+ fun_l1_n262
+end
+
+def fun_l0_n242()
+ fun_l1_n314
+end
+
+def fun_l0_n243()
+ fun_l1_n669
+end
+
+def fun_l0_n244()
+ fun_l1_n112
+end
+
+def fun_l0_n245()
+ fun_l1_n744
+end
+
+def fun_l0_n246()
+ fun_l1_n637
+end
+
+def fun_l0_n247()
+ fun_l1_n409
+end
+
+def fun_l0_n248()
+ fun_l1_n706
+end
+
+def fun_l0_n249()
+ fun_l1_n150
+end
+
+def fun_l0_n250()
+ fun_l1_n863
+end
+
+def fun_l0_n251()
+ fun_l1_n364
+end
+
+def fun_l0_n252()
+ fun_l1_n989
+end
+
+def fun_l0_n253()
+ fun_l1_n565
+end
+
+def fun_l0_n254()
+ fun_l1_n701
+end
+
+def fun_l0_n255()
+ fun_l1_n48
+end
+
+def fun_l0_n256()
+ fun_l1_n278
+end
+
+def fun_l0_n257()
+ fun_l1_n816
+end
+
+def fun_l0_n258()
+ fun_l1_n981
+end
+
+def fun_l0_n259()
+ fun_l1_n556
+end
+
+def fun_l0_n260()
+ fun_l1_n887
+end
+
+def fun_l0_n261()
+ fun_l1_n193
+end
+
+def fun_l0_n262()
+ fun_l1_n690
+end
+
+def fun_l0_n263()
+ fun_l1_n144
+end
+
+def fun_l0_n264()
+ fun_l1_n577
+end
+
+def fun_l0_n265()
+ fun_l1_n949
+end
+
+def fun_l0_n266()
+ fun_l1_n320
+end
+
+def fun_l0_n267()
+ fun_l1_n857
+end
+
+def fun_l0_n268()
+ fun_l1_n676
+end
+
+def fun_l0_n269()
+ fun_l1_n683
+end
+
+def fun_l0_n270()
+ fun_l1_n303
+end
+
+def fun_l0_n271()
+ fun_l1_n847
+end
+
+def fun_l0_n272()
+ fun_l1_n588
+end
+
+def fun_l0_n273()
+ fun_l1_n456
+end
+
+def fun_l0_n274()
+ fun_l1_n355
+end
+
+def fun_l0_n275()
+ fun_l1_n183
+end
+
+def fun_l0_n276()
+ fun_l1_n271
+end
+
+def fun_l0_n277()
+ fun_l1_n746
+end
+
+def fun_l0_n278()
+ fun_l1_n885
+end
+
+def fun_l0_n279()
+ fun_l1_n951
+end
+
+def fun_l0_n280()
+ fun_l1_n935
+end
+
+def fun_l0_n281()
+ fun_l1_n445
+end
+
+def fun_l0_n282()
+ fun_l1_n2
+end
+
+def fun_l0_n283()
+ fun_l1_n52
+end
+
+def fun_l0_n284()
+ fun_l1_n208
+end
+
+def fun_l0_n285()
+ fun_l1_n27
+end
+
+def fun_l0_n286()
+ fun_l1_n657
+end
+
+def fun_l0_n287()
+ fun_l1_n373
+end
+
+def fun_l0_n288()
+ fun_l1_n439
+end
+
+def fun_l0_n289()
+ fun_l1_n974
+end
+
+def fun_l0_n290()
+ fun_l1_n834
+end
+
+def fun_l0_n291()
+ fun_l1_n673
+end
+
+def fun_l0_n292()
+ fun_l1_n978
+end
+
+def fun_l0_n293()
+ fun_l1_n123
+end
+
+def fun_l0_n294()
+ fun_l1_n644
+end
+
+def fun_l0_n295()
+ fun_l1_n715
+end
+
+def fun_l0_n296()
+ fun_l1_n912
+end
+
+def fun_l0_n297()
+ fun_l1_n954
+end
+
+def fun_l0_n298()
+ fun_l1_n519
+end
+
+def fun_l0_n299()
+ fun_l1_n726
+end
+
+def fun_l0_n300()
+ fun_l1_n417
+end
+
+def fun_l0_n301()
+ fun_l1_n199
+end
+
+def fun_l0_n302()
+ fun_l1_n157
+end
+
+def fun_l0_n303()
+ fun_l1_n432
+end
+
+def fun_l0_n304()
+ fun_l1_n59
+end
+
+def fun_l0_n305()
+ fun_l1_n604
+end
+
+def fun_l0_n306()
+ fun_l1_n301
+end
+
+def fun_l0_n307()
+ fun_l1_n558
+end
+
+def fun_l0_n308()
+ fun_l1_n443
+end
+
+def fun_l0_n309()
+ fun_l1_n873
+end
+
+def fun_l0_n310()
+ fun_l1_n415
+end
+
+def fun_l0_n311()
+ fun_l1_n907
+end
+
+def fun_l0_n312()
+ fun_l1_n159
+end
+
+def fun_l0_n313()
+ fun_l1_n695
+end
+
+def fun_l0_n314()
+ fun_l1_n679
+end
+
+def fun_l0_n315()
+ fun_l1_n788
+end
+
+def fun_l0_n316()
+ fun_l1_n510
+end
+
+def fun_l0_n317()
+ fun_l1_n997
+end
+
+def fun_l0_n318()
+ fun_l1_n821
+end
+
+def fun_l0_n319()
+ fun_l1_n554
+end
+
+def fun_l0_n320()
+ fun_l1_n982
+end
+
+def fun_l0_n321()
+ fun_l1_n996
+end
+
+def fun_l0_n322()
+ fun_l1_n73
+end
+
+def fun_l0_n323()
+ fun_l1_n951
+end
+
+def fun_l0_n324()
+ fun_l1_n597
+end
+
+def fun_l0_n325()
+ fun_l1_n502
+end
+
+def fun_l0_n326()
+ fun_l1_n150
+end
+
+def fun_l0_n327()
+ fun_l1_n979
+end
+
+def fun_l0_n328()
+ fun_l1_n81
+end
+
+def fun_l0_n329()
+ fun_l1_n87
+end
+
+def fun_l0_n330()
+ fun_l1_n726
+end
+
+def fun_l0_n331()
+ fun_l1_n159
+end
+
+def fun_l0_n332()
+ fun_l1_n799
+end
+
+def fun_l0_n333()
+ fun_l1_n202
+end
+
+def fun_l0_n334()
+ fun_l1_n904
+end
+
+def fun_l0_n335()
+ fun_l1_n14
+end
+
+def fun_l0_n336()
+ fun_l1_n136
+end
+
+def fun_l0_n337()
+ fun_l1_n865
+end
+
+def fun_l0_n338()
+ fun_l1_n307
+end
+
+def fun_l0_n339()
+ fun_l1_n827
+end
+
+def fun_l0_n340()
+ fun_l1_n518
+end
+
+def fun_l0_n341()
+ fun_l1_n416
+end
+
+def fun_l0_n342()
+ fun_l1_n277
+end
+
+def fun_l0_n343()
+ fun_l1_n609
+end
+
+def fun_l0_n344()
+ fun_l1_n328
+end
+
+def fun_l0_n345()
+ fun_l1_n941
+end
+
+def fun_l0_n346()
+ fun_l1_n707
+end
+
+def fun_l0_n347()
+ fun_l1_n452
+end
+
+def fun_l0_n348()
+ fun_l1_n874
+end
+
+def fun_l0_n349()
+ fun_l1_n117
+end
+
+def fun_l0_n350()
+ fun_l1_n739
+end
+
+def fun_l0_n351()
+ fun_l1_n202
+end
+
+def fun_l0_n352()
+ fun_l1_n80
+end
+
+def fun_l0_n353()
+ fun_l1_n373
+end
+
+def fun_l0_n354()
+ fun_l1_n747
+end
+
+def fun_l0_n355()
+ fun_l1_n949
+end
+
+def fun_l0_n356()
+ fun_l1_n901
+end
+
+def fun_l0_n357()
+ fun_l1_n512
+end
+
+def fun_l0_n358()
+ fun_l1_n528
+end
+
+def fun_l0_n359()
+ fun_l1_n895
+end
+
+def fun_l0_n360()
+ fun_l1_n683
+end
+
+def fun_l0_n361()
+ fun_l1_n80
+end
+
+def fun_l0_n362()
+ fun_l1_n718
+end
+
+def fun_l0_n363()
+ fun_l1_n388
+end
+
+def fun_l0_n364()
+ fun_l1_n701
+end
+
+def fun_l0_n365()
+ fun_l1_n146
+end
+
+def fun_l0_n366()
+ fun_l1_n143
+end
+
+def fun_l0_n367()
+ fun_l1_n872
+end
+
+def fun_l0_n368()
+ fun_l1_n818
+end
+
+def fun_l0_n369()
+ fun_l1_n821
+end
+
+def fun_l0_n370()
+ fun_l1_n180
+end
+
+def fun_l0_n371()
+ fun_l1_n346
+end
+
+def fun_l0_n372()
+ fun_l1_n524
+end
+
+def fun_l0_n373()
+ fun_l1_n451
+end
+
+def fun_l0_n374()
+ fun_l1_n592
+end
+
+def fun_l0_n375()
+ fun_l1_n215
+end
+
+def fun_l0_n376()
+ fun_l1_n737
+end
+
+def fun_l0_n377()
+ fun_l1_n631
+end
+
+def fun_l0_n378()
+ fun_l1_n385
+end
+
+def fun_l0_n379()
+ fun_l1_n593
+end
+
+def fun_l0_n380()
+ fun_l1_n484
+end
+
+def fun_l0_n381()
+ fun_l1_n979
+end
+
+def fun_l0_n382()
+ fun_l1_n491
+end
+
+def fun_l0_n383()
+ fun_l1_n632
+end
+
+def fun_l0_n384()
+ fun_l1_n939
+end
+
+def fun_l0_n385()
+ fun_l1_n932
+end
+
+def fun_l0_n386()
+ fun_l1_n816
+end
+
+def fun_l0_n387()
+ fun_l1_n308
+end
+
+def fun_l0_n388()
+ fun_l1_n525
+end
+
+def fun_l0_n389()
+ fun_l1_n160
+end
+
+def fun_l0_n390()
+ fun_l1_n313
+end
+
+def fun_l0_n391()
+ fun_l1_n816
+end
+
+def fun_l0_n392()
+ fun_l1_n641
+end
+
+def fun_l0_n393()
+ fun_l1_n319
+end
+
+def fun_l0_n394()
+ fun_l1_n559
+end
+
+def fun_l0_n395()
+ fun_l1_n520
+end
+
+def fun_l0_n396()
+ fun_l1_n277
+end
+
+def fun_l0_n397()
+ fun_l1_n410
+end
+
+def fun_l0_n398()
+ fun_l1_n956
+end
+
+def fun_l0_n399()
+ fun_l1_n101
+end
+
+def fun_l0_n400()
+ fun_l1_n33
+end
+
+def fun_l0_n401()
+ fun_l1_n554
+end
+
+def fun_l0_n402()
+ fun_l1_n821
+end
+
+def fun_l0_n403()
+ fun_l1_n230
+end
+
+def fun_l0_n404()
+ fun_l1_n185
+end
+
+def fun_l0_n405()
+ fun_l1_n430
+end
+
+def fun_l0_n406()
+ fun_l1_n94
+end
+
+def fun_l0_n407()
+ fun_l1_n776
+end
+
+def fun_l0_n408()
+ fun_l1_n981
+end
+
+def fun_l0_n409()
+ fun_l1_n414
+end
+
+def fun_l0_n410()
+ fun_l1_n421
+end
+
+def fun_l0_n411()
+ fun_l1_n343
+end
+
+def fun_l0_n412()
+ fun_l1_n484
+end
+
+def fun_l0_n413()
+ fun_l1_n818
+end
+
+def fun_l0_n414()
+ fun_l1_n860
+end
+
+def fun_l0_n415()
+ fun_l1_n70
+end
+
+def fun_l0_n416()
+ fun_l1_n643
+end
+
+def fun_l0_n417()
+ fun_l1_n382
+end
+
+def fun_l0_n418()
+ fun_l1_n174
+end
+
+def fun_l0_n419()
+ fun_l1_n500
+end
+
+def fun_l0_n420()
+ fun_l1_n904
+end
+
+def fun_l0_n421()
+ fun_l1_n971
+end
+
+def fun_l0_n422()
+ fun_l1_n438
+end
+
+def fun_l0_n423()
+ fun_l1_n524
+end
+
+def fun_l0_n424()
+ fun_l1_n537
+end
+
+def fun_l0_n425()
+ fun_l1_n564
+end
+
+def fun_l0_n426()
+ fun_l1_n378
+end
+
+def fun_l0_n427()
+ fun_l1_n603
+end
+
+def fun_l0_n428()
+ fun_l1_n442
+end
+
+def fun_l0_n429()
+ fun_l1_n687
+end
+
+def fun_l0_n430()
+ fun_l1_n682
+end
+
+def fun_l0_n431()
+ fun_l1_n664
+end
+
+def fun_l0_n432()
+ fun_l1_n319
+end
+
+def fun_l0_n433()
+ fun_l1_n671
+end
+
+def fun_l0_n434()
+ fun_l1_n211
+end
+
+def fun_l0_n435()
+ fun_l1_n65
+end
+
+def fun_l0_n436()
+ fun_l1_n2
+end
+
+def fun_l0_n437()
+ fun_l1_n36
+end
+
+def fun_l0_n438()
+ fun_l1_n270
+end
+
+def fun_l0_n439()
+ fun_l1_n793
+end
+
+def fun_l0_n440()
+ fun_l1_n312
+end
+
+def fun_l0_n441()
+ fun_l1_n134
+end
+
+def fun_l0_n442()
+ fun_l1_n246
+end
+
+def fun_l0_n443()
+ fun_l1_n498
+end
+
+def fun_l0_n444()
+ fun_l1_n606
+end
+
+def fun_l0_n445()
+ fun_l1_n986
+end
+
+def fun_l0_n446()
+ fun_l1_n659
+end
+
+def fun_l0_n447()
+ fun_l1_n823
+end
+
+def fun_l0_n448()
+ fun_l1_n635
+end
+
+def fun_l0_n449()
+ fun_l1_n388
+end
+
+def fun_l0_n450()
+ fun_l1_n474
+end
+
+def fun_l0_n451()
+ fun_l1_n742
+end
+
+def fun_l0_n452()
+ fun_l1_n605
+end
+
+def fun_l0_n453()
+ fun_l1_n0
+end
+
+def fun_l0_n454()
+ fun_l1_n691
+end
+
+def fun_l0_n455()
+ fun_l1_n791
+end
+
+def fun_l0_n456()
+ fun_l1_n363
+end
+
+def fun_l0_n457()
+ fun_l1_n370
+end
+
+def fun_l0_n458()
+ fun_l1_n168
+end
+
+def fun_l0_n459()
+ fun_l1_n626
+end
+
+def fun_l0_n460()
+ fun_l1_n139
+end
+
+def fun_l0_n461()
+ fun_l1_n708
+end
+
+def fun_l0_n462()
+ fun_l1_n77
+end
+
+def fun_l0_n463()
+ fun_l1_n27
+end
+
+def fun_l0_n464()
+ fun_l1_n706
+end
+
+def fun_l0_n465()
+ fun_l1_n29
+end
+
+def fun_l0_n466()
+ fun_l1_n470
+end
+
+def fun_l0_n467()
+ fun_l1_n606
+end
+
+def fun_l0_n468()
+ fun_l1_n458
+end
+
+def fun_l0_n469()
+ fun_l1_n465
+end
+
+def fun_l0_n470()
+ fun_l1_n23
+end
+
+def fun_l0_n471()
+ fun_l1_n364
+end
+
+def fun_l0_n472()
+ fun_l1_n606
+end
+
+def fun_l0_n473()
+ fun_l1_n109
+end
+
+def fun_l0_n474()
+ fun_l1_n904
+end
+
+def fun_l0_n475()
+ fun_l1_n923
+end
+
+def fun_l0_n476()
+ fun_l1_n19
+end
+
+def fun_l0_n477()
+ fun_l1_n871
+end
+
+def fun_l0_n478()
+ fun_l1_n422
+end
+
+def fun_l0_n479()
+ fun_l1_n72
+end
+
+def fun_l0_n480()
+ fun_l1_n528
+end
+
+def fun_l0_n481()
+ fun_l1_n181
+end
+
+def fun_l0_n482()
+ fun_l1_n33
+end
+
+def fun_l0_n483()
+ fun_l1_n951
+end
+
+def fun_l0_n484()
+ fun_l1_n747
+end
+
+def fun_l0_n485()
+ fun_l1_n200
+end
+
+def fun_l0_n486()
+ fun_l1_n474
+end
+
+def fun_l0_n487()
+ fun_l1_n126
+end
+
+def fun_l0_n488()
+ fun_l1_n757
+end
+
+def fun_l0_n489()
+ fun_l1_n101
+end
+
+def fun_l0_n490()
+ fun_l1_n925
+end
+
+def fun_l0_n491()
+ fun_l1_n791
+end
+
+def fun_l0_n492()
+ fun_l1_n404
+end
+
+def fun_l0_n493()
+ fun_l1_n841
+end
+
+def fun_l0_n494()
+ fun_l1_n774
+end
+
+def fun_l0_n495()
+ fun_l1_n230
+end
+
+def fun_l0_n496()
+ fun_l1_n796
+end
+
+def fun_l0_n497()
+ fun_l1_n270
+end
+
+def fun_l0_n498()
+ fun_l1_n795
+end
+
+def fun_l0_n499()
+ fun_l1_n628
+end
+
+def fun_l0_n500()
+ fun_l1_n865
+end
+
+def fun_l0_n501()
+ fun_l1_n105
+end
+
+def fun_l0_n502()
+ fun_l1_n538
+end
+
+def fun_l0_n503()
+ fun_l1_n769
+end
+
+def fun_l0_n504()
+ fun_l1_n714
+end
+
+def fun_l0_n505()
+ fun_l1_n889
+end
+
+def fun_l0_n506()
+ fun_l1_n191
+end
+
+def fun_l0_n507()
+ fun_l1_n966
+end
+
+def fun_l0_n508()
+ fun_l1_n196
+end
+
+def fun_l0_n509()
+ fun_l1_n878
+end
+
+def fun_l0_n510()
+ fun_l1_n487
+end
+
+def fun_l0_n511()
+ fun_l1_n242
+end
+
+def fun_l0_n512()
+ fun_l1_n740
+end
+
+def fun_l0_n513()
+ fun_l1_n938
+end
+
+def fun_l0_n514()
+ fun_l1_n485
+end
+
+def fun_l0_n515()
+ fun_l1_n380
+end
+
+def fun_l0_n516()
+ fun_l1_n936
+end
+
+def fun_l0_n517()
+ fun_l1_n237
+end
+
+def fun_l0_n518()
+ fun_l1_n79
+end
+
+def fun_l0_n519()
+ fun_l1_n501
+end
+
+def fun_l0_n520()
+ fun_l1_n966
+end
+
+def fun_l0_n521()
+ fun_l1_n741
+end
+
+def fun_l0_n522()
+ fun_l1_n170
+end
+
+def fun_l0_n523()
+ fun_l1_n183
+end
+
+def fun_l0_n524()
+ fun_l1_n556
+end
+
+def fun_l0_n525()
+ fun_l1_n865
+end
+
+def fun_l0_n526()
+ fun_l1_n884
+end
+
+def fun_l0_n527()
+ fun_l1_n725
+end
+
+def fun_l0_n528()
+ fun_l1_n205
+end
+
+def fun_l0_n529()
+ fun_l1_n72
+end
+
+def fun_l0_n530()
+ fun_l1_n432
+end
+
+def fun_l0_n531()
+ fun_l1_n90
+end
+
+def fun_l0_n532()
+ fun_l1_n189
+end
+
+def fun_l0_n533()
+ fun_l1_n395
+end
+
+def fun_l0_n534()
+ fun_l1_n201
+end
+
+def fun_l0_n535()
+ fun_l1_n534
+end
+
+def fun_l0_n536()
+ fun_l1_n748
+end
+
+def fun_l0_n537()
+ fun_l1_n439
+end
+
+def fun_l0_n538()
+ fun_l1_n495
+end
+
+def fun_l0_n539()
+ fun_l1_n904
+end
+
+def fun_l0_n540()
+ fun_l1_n525
+end
+
+def fun_l0_n541()
+ fun_l1_n924
+end
+
+def fun_l0_n542()
+ fun_l1_n549
+end
+
+def fun_l0_n543()
+ fun_l1_n2
+end
+
+def fun_l0_n544()
+ fun_l1_n257
+end
+
+def fun_l0_n545()
+ fun_l1_n921
+end
+
+def fun_l0_n546()
+ fun_l1_n82
+end
+
+def fun_l0_n547()
+ fun_l1_n384
+end
+
+def fun_l0_n548()
+ fun_l1_n219
+end
+
+def fun_l0_n549()
+ fun_l1_n379
+end
+
+def fun_l0_n550()
+ fun_l1_n488
+end
+
+def fun_l0_n551()
+ fun_l1_n4
+end
+
+def fun_l0_n552()
+ fun_l1_n150
+end
+
+def fun_l0_n553()
+ fun_l1_n168
+end
+
+def fun_l0_n554()
+ fun_l1_n773
+end
+
+def fun_l0_n555()
+ fun_l1_n444
+end
+
+def fun_l0_n556()
+ fun_l1_n201
+end
+
+def fun_l0_n557()
+ fun_l1_n333
+end
+
+def fun_l0_n558()
+ fun_l1_n556
+end
+
+def fun_l0_n559()
+ fun_l1_n394
+end
+
+def fun_l0_n560()
+ fun_l1_n540
+end
+
+def fun_l0_n561()
+ fun_l1_n640
+end
+
+def fun_l0_n562()
+ fun_l1_n321
+end
+
+def fun_l0_n563()
+ fun_l1_n286
+end
+
+def fun_l0_n564()
+ fun_l1_n320
+end
+
+def fun_l0_n565()
+ fun_l1_n2
+end
+
+def fun_l0_n566()
+ fun_l1_n50
+end
+
+def fun_l0_n567()
+ fun_l1_n269
+end
+
+def fun_l0_n568()
+ fun_l1_n412
+end
+
+def fun_l0_n569()
+ fun_l1_n984
+end
+
+def fun_l0_n570()
+ fun_l1_n307
+end
+
+def fun_l0_n571()
+ fun_l1_n954
+end
+
+def fun_l0_n572()
+ fun_l1_n728
+end
+
+def fun_l0_n573()
+ fun_l1_n227
+end
+
+def fun_l0_n574()
+ fun_l1_n917
+end
+
+def fun_l0_n575()
+ fun_l1_n974
+end
+
+def fun_l0_n576()
+ fun_l1_n995
+end
+
+def fun_l0_n577()
+ fun_l1_n593
+end
+
+def fun_l0_n578()
+ fun_l1_n704
+end
+
+def fun_l0_n579()
+ fun_l1_n142
+end
+
+def fun_l0_n580()
+ fun_l1_n585
+end
+
+def fun_l0_n581()
+ fun_l1_n634
+end
+
+def fun_l0_n582()
+ fun_l1_n888
+end
+
+def fun_l0_n583()
+ fun_l1_n873
+end
+
+def fun_l0_n584()
+ fun_l1_n674
+end
+
+def fun_l0_n585()
+ fun_l1_n657
+end
+
+def fun_l0_n586()
+ fun_l1_n248
+end
+
+def fun_l0_n587()
+ fun_l1_n478
+end
+
+def fun_l0_n588()
+ fun_l1_n263
+end
+
+def fun_l0_n589()
+ fun_l1_n908
+end
+
+def fun_l0_n590()
+ fun_l1_n741
+end
+
+def fun_l0_n591()
+ fun_l1_n299
+end
+
+def fun_l0_n592()
+ fun_l1_n763
+end
+
+def fun_l0_n593()
+ fun_l1_n746
+end
+
+def fun_l0_n594()
+ fun_l1_n367
+end
+
+def fun_l0_n595()
+ fun_l1_n394
+end
+
+def fun_l0_n596()
+ fun_l1_n304
+end
+
+def fun_l0_n597()
+ fun_l1_n939
+end
+
+def fun_l0_n598()
+ fun_l1_n392
+end
+
+def fun_l0_n599()
+ fun_l1_n758
+end
+
+def fun_l0_n600()
+ fun_l1_n133
+end
+
+def fun_l0_n601()
+ fun_l1_n212
+end
+
+def fun_l0_n602()
+ fun_l1_n719
+end
+
+def fun_l0_n603()
+ fun_l1_n952
+end
+
+def fun_l0_n604()
+ fun_l1_n818
+end
+
+def fun_l0_n605()
+ fun_l1_n216
+end
+
+def fun_l0_n606()
+ fun_l1_n438
+end
+
+def fun_l0_n607()
+ fun_l1_n315
+end
+
+def fun_l0_n608()
+ fun_l1_n450
+end
+
+def fun_l0_n609()
+ fun_l1_n420
+end
+
+def fun_l0_n610()
+ fun_l1_n917
+end
+
+def fun_l0_n611()
+ fun_l1_n921
+end
+
+def fun_l0_n612()
+ fun_l1_n596
+end
+
+def fun_l0_n613()
+ fun_l1_n253
+end
+
+def fun_l0_n614()
+ fun_l1_n395
+end
+
+def fun_l0_n615()
+ fun_l1_n120
+end
+
+def fun_l0_n616()
+ fun_l1_n742
+end
+
+def fun_l0_n617()
+ fun_l1_n489
+end
+
+def fun_l0_n618()
+ fun_l1_n338
+end
+
+def fun_l0_n619()
+ fun_l1_n351
+end
+
+def fun_l0_n620()
+ fun_l1_n384
+end
+
+def fun_l0_n621()
+ fun_l1_n581
+end
+
+def fun_l0_n622()
+ fun_l1_n667
+end
+
+def fun_l0_n623()
+ fun_l1_n956
+end
+
+def fun_l0_n624()
+ fun_l1_n156
+end
+
+def fun_l0_n625()
+ fun_l1_n909
+end
+
+def fun_l0_n626()
+ fun_l1_n548
+end
+
+def fun_l0_n627()
+ fun_l1_n293
+end
+
+def fun_l0_n628()
+ fun_l1_n997
+end
+
+def fun_l0_n629()
+ fun_l1_n950
+end
+
+def fun_l0_n630()
+ fun_l1_n761
+end
+
+def fun_l0_n631()
+ fun_l1_n72
+end
+
+def fun_l0_n632()
+ fun_l1_n213
+end
+
+def fun_l0_n633()
+ fun_l1_n746
+end
+
+def fun_l0_n634()
+ fun_l1_n327
+end
+
+def fun_l0_n635()
+ fun_l1_n166
+end
+
+def fun_l0_n636()
+ fun_l1_n749
+end
+
+def fun_l0_n637()
+ fun_l1_n196
+end
+
+def fun_l0_n638()
+ fun_l1_n786
+end
+
+def fun_l0_n639()
+ fun_l1_n613
+end
+
+def fun_l0_n640()
+ fun_l1_n903
+end
+
+def fun_l0_n641()
+ fun_l1_n836
+end
+
+def fun_l0_n642()
+ fun_l1_n687
+end
+
+def fun_l0_n643()
+ fun_l1_n533
+end
+
+def fun_l0_n644()
+ fun_l1_n544
+end
+
+def fun_l0_n645()
+ fun_l1_n637
+end
+
+def fun_l0_n646()
+ fun_l1_n859
+end
+
+def fun_l0_n647()
+ fun_l1_n917
+end
+
+def fun_l0_n648()
+ fun_l1_n119
+end
+
+def fun_l0_n649()
+ fun_l1_n327
+end
+
+def fun_l0_n650()
+ fun_l1_n759
+end
+
+def fun_l0_n651()
+ fun_l1_n169
+end
+
+def fun_l0_n652()
+ fun_l1_n497
+end
+
+def fun_l0_n653()
+ fun_l1_n441
+end
+
+def fun_l0_n654()
+ fun_l1_n151
+end
+
+def fun_l0_n655()
+ fun_l1_n553
+end
+
+def fun_l0_n656()
+ fun_l1_n441
+end
+
+def fun_l0_n657()
+ fun_l1_n390
+end
+
+def fun_l0_n658()
+ fun_l1_n615
+end
+
+def fun_l0_n659()
+ fun_l1_n578
+end
+
+def fun_l0_n660()
+ fun_l1_n873
+end
+
+def fun_l0_n661()
+ fun_l1_n608
+end
+
+def fun_l0_n662()
+ fun_l1_n446
+end
+
+def fun_l0_n663()
+ fun_l1_n647
+end
+
+def fun_l0_n664()
+ fun_l1_n601
+end
+
+def fun_l0_n665()
+ fun_l1_n945
+end
+
+def fun_l0_n666()
+ fun_l1_n172
+end
+
+def fun_l0_n667()
+ fun_l1_n547
+end
+
+def fun_l0_n668()
+ fun_l1_n977
+end
+
+def fun_l0_n669()
+ fun_l1_n419
+end
+
+def fun_l0_n670()
+ fun_l1_n626
+end
+
+def fun_l0_n671()
+ fun_l1_n345
+end
+
+def fun_l0_n672()
+ fun_l1_n899
+end
+
+def fun_l0_n673()
+ fun_l1_n442
+end
+
+def fun_l0_n674()
+ fun_l1_n296
+end
+
+def fun_l0_n675()
+ fun_l1_n303
+end
+
+def fun_l0_n676()
+ fun_l1_n679
+end
+
+def fun_l0_n677()
+ fun_l1_n655
+end
+
+def fun_l0_n678()
+ fun_l1_n998
+end
+
+def fun_l0_n679()
+ fun_l1_n157
+end
+
+def fun_l0_n680()
+ fun_l1_n705
+end
+
+def fun_l0_n681()
+ fun_l1_n832
+end
+
+def fun_l0_n682()
+ fun_l1_n113
+end
+
+def fun_l0_n683()
+ fun_l1_n550
+end
+
+def fun_l0_n684()
+ fun_l1_n21
+end
+
+def fun_l0_n685()
+ fun_l1_n21
+end
+
+def fun_l0_n686()
+ fun_l1_n195
+end
+
+def fun_l0_n687()
+ fun_l1_n269
+end
+
+def fun_l0_n688()
+ fun_l1_n12
+end
+
+def fun_l0_n689()
+ fun_l1_n49
+end
+
+def fun_l0_n690()
+ fun_l1_n836
+end
+
+def fun_l0_n691()
+ fun_l1_n808
+end
+
+def fun_l0_n692()
+ fun_l1_n938
+end
+
+def fun_l0_n693()
+ fun_l1_n531
+end
+
+def fun_l0_n694()
+ fun_l1_n296
+end
+
+def fun_l0_n695()
+ fun_l1_n32
+end
+
+def fun_l0_n696()
+ fun_l1_n641
+end
+
+def fun_l0_n697()
+ fun_l1_n549
+end
+
+def fun_l0_n698()
+ fun_l1_n437
+end
+
+def fun_l0_n699()
+ fun_l1_n133
+end
+
+def fun_l0_n700()
+ fun_l1_n734
+end
+
+def fun_l0_n701()
+ fun_l1_n340
+end
+
+def fun_l0_n702()
+ fun_l1_n768
+end
+
+def fun_l0_n703()
+ fun_l1_n97
+end
+
+def fun_l0_n704()
+ fun_l1_n52
+end
+
+def fun_l0_n705()
+ fun_l1_n121
+end
+
+def fun_l0_n706()
+ fun_l1_n471
+end
+
+def fun_l0_n707()
+ fun_l1_n94
+end
+
+def fun_l0_n708()
+ fun_l1_n946
+end
+
+def fun_l0_n709()
+ fun_l1_n151
+end
+
+def fun_l0_n710()
+ fun_l1_n946
+end
+
+def fun_l0_n711()
+ fun_l1_n191
+end
+
+def fun_l0_n712()
+ fun_l1_n552
+end
+
+def fun_l0_n713()
+ fun_l1_n733
+end
+
+def fun_l0_n714()
+ fun_l1_n895
+end
+
+def fun_l0_n715()
+ fun_l1_n850
+end
+
+def fun_l0_n716()
+ fun_l1_n113
+end
+
+def fun_l0_n717()
+ fun_l1_n69
+end
+
+def fun_l0_n718()
+ fun_l1_n862
+end
+
+def fun_l0_n719()
+ fun_l1_n635
+end
+
+def fun_l0_n720()
+ fun_l1_n714
+end
+
+def fun_l0_n721()
+ fun_l1_n179
+end
+
+def fun_l0_n722()
+ fun_l1_n17
+end
+
+def fun_l0_n723()
+ fun_l1_n299
+end
+
+def fun_l0_n724()
+ fun_l1_n141
+end
+
+def fun_l0_n725()
+ fun_l1_n338
+end
+
+def fun_l0_n726()
+ fun_l1_n650
+end
+
+def fun_l0_n727()
+ fun_l1_n784
+end
+
+def fun_l0_n728()
+ fun_l1_n333
+end
+
+def fun_l0_n729()
+ fun_l1_n10
+end
+
+def fun_l0_n730()
+ fun_l1_n271
+end
+
+def fun_l0_n731()
+ fun_l1_n882
+end
+
+def fun_l0_n732()
+ fun_l1_n512
+end
+
+def fun_l0_n733()
+ fun_l1_n932
+end
+
+def fun_l0_n734()
+ fun_l1_n68
+end
+
+def fun_l0_n735()
+ fun_l1_n111
+end
+
+def fun_l0_n736()
+ fun_l1_n649
+end
+
+def fun_l0_n737()
+ fun_l1_n512
+end
+
+def fun_l0_n738()
+ fun_l1_n551
+end
+
+def fun_l0_n739()
+ fun_l1_n153
+end
+
+def fun_l0_n740()
+ fun_l1_n582
+end
+
+def fun_l0_n741()
+ fun_l1_n366
+end
+
+def fun_l0_n742()
+ fun_l1_n135
+end
+
+def fun_l0_n743()
+ fun_l1_n136
+end
+
+def fun_l0_n744()
+ fun_l1_n782
+end
+
+def fun_l0_n745()
+ fun_l1_n258
+end
+
+def fun_l0_n746()
+ fun_l1_n44
+end
+
+def fun_l0_n747()
+ fun_l1_n379
+end
+
+def fun_l0_n748()
+ fun_l1_n14
+end
+
+def fun_l0_n749()
+ fun_l1_n563
+end
+
+def fun_l0_n750()
+ fun_l1_n361
+end
+
+def fun_l0_n751()
+ fun_l1_n624
+end
+
+def fun_l0_n752()
+ fun_l1_n516
+end
+
+def fun_l0_n753()
+ fun_l1_n944
+end
+
+def fun_l0_n754()
+ fun_l1_n783
+end
+
+def fun_l0_n755()
+ fun_l1_n744
+end
+
+def fun_l0_n756()
+ fun_l1_n500
+end
+
+def fun_l0_n757()
+ fun_l1_n809
+end
+
+def fun_l0_n758()
+ fun_l1_n757
+end
+
+def fun_l0_n759()
+ fun_l1_n995
+end
+
+def fun_l0_n760()
+ fun_l1_n114
+end
+
+def fun_l0_n761()
+ fun_l1_n802
+end
+
+def fun_l0_n762()
+ fun_l1_n114
+end
+
+def fun_l0_n763()
+ fun_l1_n683
+end
+
+def fun_l0_n764()
+ fun_l1_n775
+end
+
+def fun_l0_n765()
+ fun_l1_n967
+end
+
+def fun_l0_n766()
+ fun_l1_n499
+end
+
+def fun_l0_n767()
+ fun_l1_n561
+end
+
+def fun_l0_n768()
+ fun_l1_n206
+end
+
+def fun_l0_n769()
+ fun_l1_n738
+end
+
+def fun_l0_n770()
+ fun_l1_n953
+end
+
+def fun_l0_n771()
+ fun_l1_n394
+end
+
+def fun_l0_n772()
+ fun_l1_n393
+end
+
+def fun_l0_n773()
+ fun_l1_n226
+end
+
+def fun_l0_n774()
+ fun_l1_n363
+end
+
+def fun_l0_n775()
+ fun_l1_n928
+end
+
+def fun_l0_n776()
+ fun_l1_n213
+end
+
+def fun_l0_n777()
+ fun_l1_n3
+end
+
+def fun_l0_n778()
+ fun_l1_n656
+end
+
+def fun_l0_n779()
+ fun_l1_n927
+end
+
+def fun_l0_n780()
+ fun_l1_n406
+end
+
+def fun_l0_n781()
+ fun_l1_n589
+end
+
+def fun_l0_n782()
+ fun_l1_n56
+end
+
+def fun_l0_n783()
+ fun_l1_n280
+end
+
+def fun_l0_n784()
+ fun_l1_n156
+end
+
+def fun_l0_n785()
+ fun_l1_n257
+end
+
+def fun_l0_n786()
+ fun_l1_n269
+end
+
+def fun_l0_n787()
+ fun_l1_n453
+end
+
+def fun_l0_n788()
+ fun_l1_n293
+end
+
+def fun_l0_n789()
+ fun_l1_n570
+end
+
+def fun_l0_n790()
+ fun_l1_n194
+end
+
+def fun_l0_n791()
+ fun_l1_n120
+end
+
+def fun_l0_n792()
+ fun_l1_n976
+end
+
+def fun_l0_n793()
+ fun_l1_n115
+end
+
+def fun_l0_n794()
+ fun_l1_n74
+end
+
+def fun_l0_n795()
+ fun_l1_n25
+end
+
+def fun_l0_n796()
+ fun_l1_n288
+end
+
+def fun_l0_n797()
+ fun_l1_n49
+end
+
+def fun_l0_n798()
+ fun_l1_n237
+end
+
+def fun_l0_n799()
+ fun_l1_n481
+end
+
+def fun_l0_n800()
+ fun_l1_n329
+end
+
+def fun_l0_n801()
+ fun_l1_n907
+end
+
+def fun_l0_n802()
+ fun_l1_n804
+end
+
+def fun_l0_n803()
+ fun_l1_n8
+end
+
+def fun_l0_n804()
+ fun_l1_n270
+end
+
+def fun_l0_n805()
+ fun_l1_n315
+end
+
+def fun_l0_n806()
+ fun_l1_n941
+end
+
+def fun_l0_n807()
+ fun_l1_n343
+end
+
+def fun_l0_n808()
+ fun_l1_n817
+end
+
+def fun_l0_n809()
+ fun_l1_n315
+end
+
+def fun_l0_n810()
+ fun_l1_n156
+end
+
+def fun_l0_n811()
+ fun_l1_n689
+end
+
+def fun_l0_n812()
+ fun_l1_n644
+end
+
+def fun_l0_n813()
+ fun_l1_n158
+end
+
+def fun_l0_n814()
+ fun_l1_n588
+end
+
+def fun_l0_n815()
+ fun_l1_n820
+end
+
+def fun_l0_n816()
+ fun_l1_n86
+end
+
+def fun_l0_n817()
+ fun_l1_n176
+end
+
+def fun_l0_n818()
+ fun_l1_n611
+end
+
+def fun_l0_n819()
+ fun_l1_n816
+end
+
+def fun_l0_n820()
+ fun_l1_n332
+end
+
+def fun_l0_n821()
+ fun_l1_n170
+end
+
+def fun_l0_n822()
+ fun_l1_n483
+end
+
+def fun_l0_n823()
+ fun_l1_n768
+end
+
+def fun_l0_n824()
+ fun_l1_n825
+end
+
+def fun_l0_n825()
+ fun_l1_n114
+end
+
+def fun_l0_n826()
+ fun_l1_n102
+end
+
+def fun_l0_n827()
+ fun_l1_n963
+end
+
+def fun_l0_n828()
+ fun_l1_n202
+end
+
+def fun_l0_n829()
+ fun_l1_n708
+end
+
+def fun_l0_n830()
+ fun_l1_n350
+end
+
+def fun_l0_n831()
+ fun_l1_n976
+end
+
+def fun_l0_n832()
+ fun_l1_n834
+end
+
+def fun_l0_n833()
+ fun_l1_n342
+end
+
+def fun_l0_n834()
+ fun_l1_n764
+end
+
+def fun_l0_n835()
+ fun_l1_n211
+end
+
+def fun_l0_n836()
+ fun_l1_n173
+end
+
+def fun_l0_n837()
+ fun_l1_n988
+end
+
+def fun_l0_n838()
+ fun_l1_n369
+end
+
+def fun_l0_n839()
+ fun_l1_n481
+end
+
+def fun_l0_n840()
+ fun_l1_n580
+end
+
+def fun_l0_n841()
+ fun_l1_n255
+end
+
+def fun_l0_n842()
+ fun_l1_n476
+end
+
+def fun_l0_n843()
+ fun_l1_n795
+end
+
+def fun_l0_n844()
+ fun_l1_n296
+end
+
+def fun_l0_n845()
+ fun_l1_n880
+end
+
+def fun_l0_n846()
+ fun_l1_n457
+end
+
+def fun_l0_n847()
+ fun_l1_n88
+end
+
+def fun_l0_n848()
+ fun_l1_n901
+end
+
+def fun_l0_n849()
+ fun_l1_n988
+end
+
+def fun_l0_n850()
+ fun_l1_n396
+end
+
+def fun_l0_n851()
+ fun_l1_n60
+end
+
+def fun_l0_n852()
+ fun_l1_n738
+end
+
+def fun_l0_n853()
+ fun_l1_n2
+end
+
+def fun_l0_n854()
+ fun_l1_n652
+end
+
+def fun_l0_n855()
+ fun_l1_n982
+end
+
+def fun_l0_n856()
+ fun_l1_n987
+end
+
+def fun_l0_n857()
+ fun_l1_n488
+end
+
+def fun_l0_n858()
+ fun_l1_n354
+end
+
+def fun_l0_n859()
+ fun_l1_n320
+end
+
+def fun_l0_n860()
+ fun_l1_n378
+end
+
+def fun_l0_n861()
+ fun_l1_n965
+end
+
+def fun_l0_n862()
+ fun_l1_n858
+end
+
+def fun_l0_n863()
+ fun_l1_n360
+end
+
+def fun_l0_n864()
+ fun_l1_n812
+end
+
+def fun_l0_n865()
+ fun_l1_n590
+end
+
+def fun_l0_n866()
+ fun_l1_n339
+end
+
+def fun_l0_n867()
+ fun_l1_n365
+end
+
+def fun_l0_n868()
+ fun_l1_n190
+end
+
+def fun_l0_n869()
+ fun_l1_n555
+end
+
+def fun_l0_n870()
+ fun_l1_n676
+end
+
+def fun_l0_n871()
+ fun_l1_n681
+end
+
+def fun_l0_n872()
+ fun_l1_n283
+end
+
+def fun_l0_n873()
+ fun_l1_n865
+end
+
+def fun_l0_n874()
+ fun_l1_n402
+end
+
+def fun_l0_n875()
+ fun_l1_n530
+end
+
+def fun_l0_n876()
+ fun_l1_n25
+end
+
+def fun_l0_n877()
+ fun_l1_n10
+end
+
+def fun_l0_n878()
+ fun_l1_n252
+end
+
+def fun_l0_n879()
+ fun_l1_n174
+end
+
+def fun_l0_n880()
+ fun_l1_n449
+end
+
+def fun_l0_n881()
+ fun_l1_n385
+end
+
+def fun_l0_n882()
+ fun_l1_n689
+end
+
+def fun_l0_n883()
+ fun_l1_n492
+end
+
+def fun_l0_n884()
+ fun_l1_n949
+end
+
+def fun_l0_n885()
+ fun_l1_n912
+end
+
+def fun_l0_n886()
+ fun_l1_n131
+end
+
+def fun_l0_n887()
+ fun_l1_n484
+end
+
+def fun_l0_n888()
+ fun_l1_n647
+end
+
+def fun_l0_n889()
+ fun_l1_n679
+end
+
+def fun_l0_n890()
+ fun_l1_n16
+end
+
+def fun_l0_n891()
+ fun_l1_n745
+end
+
+def fun_l0_n892()
+ fun_l1_n490
+end
+
+def fun_l0_n893()
+ fun_l1_n104
+end
+
+def fun_l0_n894()
+ fun_l1_n91
+end
+
+def fun_l0_n895()
+ fun_l1_n368
+end
+
+def fun_l0_n896()
+ fun_l1_n439
+end
+
+def fun_l0_n897()
+ fun_l1_n23
+end
+
+def fun_l0_n898()
+ fun_l1_n277
+end
+
+def fun_l0_n899()
+ fun_l1_n597
+end
+
+def fun_l0_n900()
+ fun_l1_n644
+end
+
+def fun_l0_n901()
+ fun_l1_n255
+end
+
+def fun_l0_n902()
+ fun_l1_n767
+end
+
+def fun_l0_n903()
+ fun_l1_n417
+end
+
+def fun_l0_n904()
+ fun_l1_n517
+end
+
+def fun_l0_n905()
+ fun_l1_n609
+end
+
+def fun_l0_n906()
+ fun_l1_n498
+end
+
+def fun_l0_n907()
+ fun_l1_n24
+end
+
+def fun_l0_n908()
+ fun_l1_n722
+end
+
+def fun_l0_n909()
+ fun_l1_n494
+end
+
+def fun_l0_n910()
+ fun_l1_n450
+end
+
+def fun_l0_n911()
+ fun_l1_n302
+end
+
+def fun_l0_n912()
+ fun_l1_n801
+end
+
+def fun_l0_n913()
+ fun_l1_n709
+end
+
+def fun_l0_n914()
+ fun_l1_n555
+end
+
+def fun_l0_n915()
+ fun_l1_n955
+end
+
+def fun_l0_n916()
+ fun_l1_n310
+end
+
+def fun_l0_n917()
+ fun_l1_n839
+end
+
+def fun_l0_n918()
+ fun_l1_n590
+end
+
+def fun_l0_n919()
+ fun_l1_n83
+end
+
+def fun_l0_n920()
+ fun_l1_n335
+end
+
+def fun_l0_n921()
+ fun_l1_n740
+end
+
+def fun_l0_n922()
+ fun_l1_n357
+end
+
+def fun_l0_n923()
+ fun_l1_n312
+end
+
+def fun_l0_n924()
+ fun_l1_n544
+end
+
+def fun_l0_n925()
+ fun_l1_n611
+end
+
+def fun_l0_n926()
+ fun_l1_n651
+end
+
+def fun_l0_n927()
+ fun_l1_n730
+end
+
+def fun_l0_n928()
+ fun_l1_n623
+end
+
+def fun_l0_n929()
+ fun_l1_n337
+end
+
+def fun_l0_n930()
+ fun_l1_n574
+end
+
+def fun_l0_n931()
+ fun_l1_n795
+end
+
+def fun_l0_n932()
+ fun_l1_n224
+end
+
+def fun_l0_n933()
+ fun_l1_n355
+end
+
+def fun_l0_n934()
+ fun_l1_n286
+end
+
+def fun_l0_n935()
+ fun_l1_n893
+end
+
+def fun_l0_n936()
+ fun_l1_n278
+end
+
+def fun_l0_n937()
+ fun_l1_n970
+end
+
+def fun_l0_n938()
+ fun_l1_n761
+end
+
+def fun_l0_n939()
+ fun_l1_n244
+end
+
+def fun_l0_n940()
+ fun_l1_n381
+end
+
+def fun_l0_n941()
+ fun_l1_n661
+end
+
+def fun_l0_n942()
+ fun_l1_n543
+end
+
+def fun_l0_n943()
+ fun_l1_n432
+end
+
+def fun_l0_n944()
+ fun_l1_n237
+end
+
+def fun_l0_n945()
+ fun_l1_n815
+end
+
+def fun_l0_n946()
+ fun_l1_n580
+end
+
+def fun_l0_n947()
+ fun_l1_n99
+end
+
+def fun_l0_n948()
+ fun_l1_n492
+end
+
+def fun_l0_n949()
+ fun_l1_n799
+end
+
+def fun_l0_n950()
+ fun_l1_n727
+end
+
+def fun_l0_n951()
+ fun_l1_n632
+end
+
+def fun_l0_n952()
+ fun_l1_n689
+end
+
+def fun_l0_n953()
+ fun_l1_n69
+end
+
+def fun_l0_n954()
+ fun_l1_n782
+end
+
+def fun_l0_n955()
+ fun_l1_n140
+end
+
+def fun_l0_n956()
+ fun_l1_n451
+end
+
+def fun_l0_n957()
+ fun_l1_n440
+end
+
+def fun_l0_n958()
+ fun_l1_n88
+end
+
+def fun_l0_n959()
+ fun_l1_n775
+end
+
+def fun_l0_n960()
+ fun_l1_n455
+end
+
+def fun_l0_n961()
+ fun_l1_n402
+end
+
+def fun_l0_n962()
+ fun_l1_n906
+end
+
+def fun_l0_n963()
+ fun_l1_n990
+end
+
+def fun_l0_n964()
+ fun_l1_n432
+end
+
+def fun_l0_n965()
+ fun_l1_n419
+end
+
+def fun_l0_n966()
+ fun_l1_n568
+end
+
+def fun_l0_n967()
+ fun_l1_n177
+end
+
+def fun_l0_n968()
+ fun_l1_n206
+end
+
+def fun_l0_n969()
+ fun_l1_n170
+end
+
+def fun_l0_n970()
+ fun_l1_n216
+end
+
+def fun_l0_n971()
+ fun_l1_n700
+end
+
+def fun_l0_n972()
+ fun_l1_n286
+end
+
+def fun_l0_n973()
+ fun_l1_n817
+end
+
+def fun_l0_n974()
+ fun_l1_n605
+end
+
+def fun_l0_n975()
+ fun_l1_n400
+end
+
+def fun_l0_n976()
+ fun_l1_n282
+end
+
+def fun_l0_n977()
+ fun_l1_n978
+end
+
+def fun_l0_n978()
+ fun_l1_n661
+end
+
+def fun_l0_n979()
+ fun_l1_n42
+end
+
+def fun_l0_n980()
+ fun_l1_n1
+end
+
+def fun_l0_n981()
+ fun_l1_n864
+end
+
+def fun_l0_n982()
+ fun_l1_n829
+end
+
+def fun_l0_n983()
+ fun_l1_n713
+end
+
+def fun_l0_n984()
+ fun_l1_n653
+end
+
+def fun_l0_n985()
+ fun_l1_n332
+end
+
+def fun_l0_n986()
+ fun_l1_n21
+end
+
+def fun_l0_n987()
+ fun_l1_n532
+end
+
+def fun_l0_n988()
+ fun_l1_n163
+end
+
+def fun_l0_n989()
+ fun_l1_n154
+end
+
+def fun_l0_n990()
+ fun_l1_n351
+end
+
+def fun_l0_n991()
+ fun_l1_n708
+end
+
+def fun_l0_n992()
+ fun_l1_n955
+end
+
+def fun_l0_n993()
+ fun_l1_n250
+end
+
+def fun_l0_n994()
+ fun_l1_n645
+end
+
+def fun_l0_n995()
+ fun_l1_n668
+end
+
+def fun_l0_n996()
+ fun_l1_n764
+end
+
+def fun_l0_n997()
+ fun_l1_n79
+end
+
+def fun_l0_n998()
+ fun_l1_n251
+end
+
+def fun_l0_n999()
+ fun_l1_n586
+end
+
+def fun_l1_n0()
+ fun_l2_n188
+end
+
+def fun_l1_n1()
+ fun_l2_n165
+end
+
+def fun_l1_n2()
+ fun_l2_n875
+end
+
+def fun_l1_n3()
+ fun_l2_n246
+end
+
+def fun_l1_n4()
+ fun_l2_n887
+end
+
+def fun_l1_n5()
+ fun_l2_n191
+end
+
+def fun_l1_n6()
+ fun_l2_n187
+end
+
+def fun_l1_n7()
+ fun_l2_n138
+end
+
+def fun_l1_n8()
+ fun_l2_n455
+end
+
+def fun_l1_n9()
+ fun_l2_n861
+end
+
+def fun_l1_n10()
+ fun_l2_n588
+end
+
+def fun_l1_n11()
+ fun_l2_n157
+end
+
+def fun_l1_n12()
+ fun_l2_n903
+end
+
+def fun_l1_n13()
+ fun_l2_n655
+end
+
+def fun_l1_n14()
+ fun_l2_n252
+end
+
+def fun_l1_n15()
+ fun_l2_n894
+end
+
+def fun_l1_n16()
+ fun_l2_n908
+end
+
+def fun_l1_n17()
+ fun_l2_n649
+end
+
+def fun_l1_n18()
+ fun_l2_n890
+end
+
+def fun_l1_n19()
+ fun_l2_n451
+end
+
+def fun_l1_n20()
+ fun_l2_n775
+end
+
+def fun_l1_n21()
+ fun_l2_n522
+end
+
+def fun_l1_n22()
+ fun_l2_n666
+end
+
+def fun_l1_n23()
+ fun_l2_n784
+end
+
+def fun_l1_n24()
+ fun_l2_n204
+end
+
+def fun_l1_n25()
+ fun_l2_n310
+end
+
+def fun_l1_n26()
+ fun_l2_n740
+end
+
+def fun_l1_n27()
+ fun_l2_n22
+end
+
+def fun_l1_n28()
+ fun_l2_n114
+end
+
+def fun_l1_n29()
+ fun_l2_n132
+end
+
+def fun_l1_n30()
+ fun_l2_n935
+end
+
+def fun_l1_n31()
+ fun_l2_n459
+end
+
+def fun_l1_n32()
+ fun_l2_n262
+end
+
+def fun_l1_n33()
+ fun_l2_n22
+end
+
+def fun_l1_n34()
+ fun_l2_n649
+end
+
+def fun_l1_n35()
+ fun_l2_n817
+end
+
+def fun_l1_n36()
+ fun_l2_n17
+end
+
+def fun_l1_n37()
+ fun_l2_n685
+end
+
+def fun_l1_n38()
+ fun_l2_n118
+end
+
+def fun_l1_n39()
+ fun_l2_n285
+end
+
+def fun_l1_n40()
+ fun_l2_n186
+end
+
+def fun_l1_n41()
+ fun_l2_n318
+end
+
+def fun_l1_n42()
+ fun_l2_n133
+end
+
+def fun_l1_n43()
+ fun_l2_n364
+end
+
+def fun_l1_n44()
+ fun_l2_n672
+end
+
+def fun_l1_n45()
+ fun_l2_n710
+end
+
+def fun_l1_n46()
+ fun_l2_n568
+end
+
+def fun_l1_n47()
+ fun_l2_n923
+end
+
+def fun_l1_n48()
+ fun_l2_n664
+end
+
+def fun_l1_n49()
+ fun_l2_n460
+end
+
+def fun_l1_n50()
+ fun_l2_n900
+end
+
+def fun_l1_n51()
+ fun_l2_n144
+end
+
+def fun_l1_n52()
+ fun_l2_n798
+end
+
+def fun_l1_n53()
+ fun_l2_n529
+end
+
+def fun_l1_n54()
+ fun_l2_n547
+end
+
+def fun_l1_n55()
+ fun_l2_n643
+end
+
+def fun_l1_n56()
+ fun_l2_n454
+end
+
+def fun_l1_n57()
+ fun_l2_n210
+end
+
+def fun_l1_n58()
+ fun_l2_n69
+end
+
+def fun_l1_n59()
+ fun_l2_n140
+end
+
+def fun_l1_n60()
+ fun_l2_n844
+end
+
+def fun_l1_n61()
+ fun_l2_n933
+end
+
+def fun_l1_n62()
+ fun_l2_n569
+end
+
+def fun_l1_n63()
+ fun_l2_n596
+end
+
+def fun_l1_n64()
+ fun_l2_n254
+end
+
+def fun_l1_n65()
+ fun_l2_n838
+end
+
+def fun_l1_n66()
+ fun_l2_n796
+end
+
+def fun_l1_n67()
+ fun_l2_n262
+end
+
+def fun_l1_n68()
+ fun_l2_n379
+end
+
+def fun_l1_n69()
+ fun_l2_n700
+end
+
+def fun_l1_n70()
+ fun_l2_n947
+end
+
+def fun_l1_n71()
+ fun_l2_n226
+end
+
+def fun_l1_n72()
+ fun_l2_n550
+end
+
+def fun_l1_n73()
+ fun_l2_n791
+end
+
+def fun_l1_n74()
+ fun_l2_n252
+end
+
+def fun_l1_n75()
+ fun_l2_n347
+end
+
+def fun_l1_n76()
+ fun_l2_n812
+end
+
+def fun_l1_n77()
+ fun_l2_n14
+end
+
+def fun_l1_n78()
+ fun_l2_n19
+end
+
+def fun_l1_n79()
+ fun_l2_n296
+end
+
+def fun_l1_n80()
+ fun_l2_n217
+end
+
+def fun_l1_n81()
+ fun_l2_n979
+end
+
+def fun_l1_n82()
+ fun_l2_n815
+end
+
+def fun_l1_n83()
+ fun_l2_n879
+end
+
+def fun_l1_n84()
+ fun_l2_n311
+end
+
+def fun_l1_n85()
+ fun_l2_n351
+end
+
+def fun_l1_n86()
+ fun_l2_n997
+end
+
+def fun_l1_n87()
+ fun_l2_n551
+end
+
+def fun_l1_n88()
+ fun_l2_n221
+end
+
+def fun_l1_n89()
+ fun_l2_n869
+end
+
+def fun_l1_n90()
+ fun_l2_n700
+end
+
+def fun_l1_n91()
+ fun_l2_n627
+end
+
+def fun_l1_n92()
+ fun_l2_n106
+end
+
+def fun_l1_n93()
+ fun_l2_n731
+end
+
+def fun_l1_n94()
+ fun_l2_n61
+end
+
+def fun_l1_n95()
+ fun_l2_n386
+end
+
+def fun_l1_n96()
+ fun_l2_n960
+end
+
+def fun_l1_n97()
+ fun_l2_n75
+end
+
+def fun_l1_n98()
+ fun_l2_n896
+end
+
+def fun_l1_n99()
+ fun_l2_n597
+end
+
+def fun_l1_n100()
+ fun_l2_n73
+end
+
+def fun_l1_n101()
+ fun_l2_n78
+end
+
+def fun_l1_n102()
+ fun_l2_n919
+end
+
+def fun_l1_n103()
+ fun_l2_n784
+end
+
+def fun_l1_n104()
+ fun_l2_n798
+end
+
+def fun_l1_n105()
+ fun_l2_n478
+end
+
+def fun_l1_n106()
+ fun_l2_n883
+end
+
+def fun_l1_n107()
+ fun_l2_n855
+end
+
+def fun_l1_n108()
+ fun_l2_n581
+end
+
+def fun_l1_n109()
+ fun_l2_n694
+end
+
+def fun_l1_n110()
+ fun_l2_n490
+end
+
+def fun_l1_n111()
+ fun_l2_n44
+end
+
+def fun_l1_n112()
+ fun_l2_n537
+end
+
+def fun_l1_n113()
+ fun_l2_n21
+end
+
+def fun_l1_n114()
+ fun_l2_n312
+end
+
+def fun_l1_n115()
+ fun_l2_n700
+end
+
+def fun_l1_n116()
+ fun_l2_n227
+end
+
+def fun_l1_n117()
+ fun_l2_n689
+end
+
+def fun_l1_n118()
+ fun_l2_n664
+end
+
+def fun_l1_n119()
+ fun_l2_n669
+end
+
+def fun_l1_n120()
+ fun_l2_n306
+end
+
+def fun_l1_n121()
+ fun_l2_n278
+end
+
+def fun_l1_n122()
+ fun_l2_n312
+end
+
+def fun_l1_n123()
+ fun_l2_n416
+end
+
+def fun_l1_n124()
+ fun_l2_n912
+end
+
+def fun_l1_n125()
+ fun_l2_n135
+end
+
+def fun_l1_n126()
+ fun_l2_n814
+end
+
+def fun_l1_n127()
+ fun_l2_n468
+end
+
+def fun_l1_n128()
+ fun_l2_n342
+end
+
+def fun_l1_n129()
+ fun_l2_n584
+end
+
+def fun_l1_n130()
+ fun_l2_n826
+end
+
+def fun_l1_n131()
+ fun_l2_n361
+end
+
+def fun_l1_n132()
+ fun_l2_n517
+end
+
+def fun_l1_n133()
+ fun_l2_n894
+end
+
+def fun_l1_n134()
+ fun_l2_n40
+end
+
+def fun_l1_n135()
+ fun_l2_n674
+end
+
+def fun_l1_n136()
+ fun_l2_n137
+end
+
+def fun_l1_n137()
+ fun_l2_n915
+end
+
+def fun_l1_n138()
+ fun_l2_n990
+end
+
+def fun_l1_n139()
+ fun_l2_n86
+end
+
+def fun_l1_n140()
+ fun_l2_n692
+end
+
+def fun_l1_n141()
+ fun_l2_n977
+end
+
+def fun_l1_n142()
+ fun_l2_n956
+end
+
+def fun_l1_n143()
+ fun_l2_n909
+end
+
+def fun_l1_n144()
+ fun_l2_n854
+end
+
+def fun_l1_n145()
+ fun_l2_n223
+end
+
+def fun_l1_n146()
+ fun_l2_n873
+end
+
+def fun_l1_n147()
+ fun_l2_n962
+end
+
+def fun_l1_n148()
+ fun_l2_n441
+end
+
+def fun_l1_n149()
+ fun_l2_n598
+end
+
+def fun_l1_n150()
+ fun_l2_n329
+end
+
+def fun_l1_n151()
+ fun_l2_n749
+end
+
+def fun_l1_n152()
+ fun_l2_n756
+end
+
+def fun_l1_n153()
+ fun_l2_n567
+end
+
+def fun_l1_n154()
+ fun_l2_n23
+end
+
+def fun_l1_n155()
+ fun_l2_n626
+end
+
+def fun_l1_n156()
+ fun_l2_n368
+end
+
+def fun_l1_n157()
+ fun_l2_n169
+end
+
+def fun_l1_n158()
+ fun_l2_n496
+end
+
+def fun_l1_n159()
+ fun_l2_n582
+end
+
+def fun_l1_n160()
+ fun_l2_n443
+end
+
+def fun_l1_n161()
+ fun_l2_n406
+end
+
+def fun_l1_n162()
+ fun_l2_n97
+end
+
+def fun_l1_n163()
+ fun_l2_n293
+end
+
+def fun_l1_n164()
+ fun_l2_n608
+end
+
+def fun_l1_n165()
+ fun_l2_n255
+end
+
+def fun_l1_n166()
+ fun_l2_n421
+end
+
+def fun_l1_n167()
+ fun_l2_n126
+end
+
+def fun_l1_n168()
+ fun_l2_n894
+end
+
+def fun_l1_n169()
+ fun_l2_n486
+end
+
+def fun_l1_n170()
+ fun_l2_n219
+end
+
+def fun_l1_n171()
+ fun_l2_n343
+end
+
+def fun_l1_n172()
+ fun_l2_n914
+end
+
+def fun_l1_n173()
+ fun_l2_n815
+end
+
+def fun_l1_n174()
+ fun_l2_n436
+end
+
+def fun_l1_n175()
+ fun_l2_n923
+end
+
+def fun_l1_n176()
+ fun_l2_n706
+end
+
+def fun_l1_n177()
+ fun_l2_n769
+end
+
+def fun_l1_n178()
+ fun_l2_n271
+end
+
+def fun_l1_n179()
+ fun_l2_n489
+end
+
+def fun_l1_n180()
+ fun_l2_n724
+end
+
+def fun_l1_n181()
+ fun_l2_n202
+end
+
+def fun_l1_n182()
+ fun_l2_n884
+end
+
+def fun_l1_n183()
+ fun_l2_n957
+end
+
+def fun_l1_n184()
+ fun_l2_n690
+end
+
+def fun_l1_n185()
+ fun_l2_n468
+end
+
+def fun_l1_n186()
+ fun_l2_n6
+end
+
+def fun_l1_n187()
+ fun_l2_n94
+end
+
+def fun_l1_n188()
+ fun_l2_n226
+end
+
+def fun_l1_n189()
+ fun_l2_n462
+end
+
+def fun_l1_n190()
+ fun_l2_n228
+end
+
+def fun_l1_n191()
+ fun_l2_n497
+end
+
+def fun_l1_n192()
+ fun_l2_n246
+end
+
+def fun_l1_n193()
+ fun_l2_n960
+end
+
+def fun_l1_n194()
+ fun_l2_n492
+end
+
+def fun_l1_n195()
+ fun_l2_n485
+end
+
+def fun_l1_n196()
+ fun_l2_n18
+end
+
+def fun_l1_n197()
+ fun_l2_n536
+end
+
+def fun_l1_n198()
+ fun_l2_n802
+end
+
+def fun_l1_n199()
+ fun_l2_n151
+end
+
+def fun_l1_n200()
+ fun_l2_n82
+end
+
+def fun_l1_n201()
+ fun_l2_n266
+end
+
+def fun_l1_n202()
+ fun_l2_n445
+end
+
+def fun_l1_n203()
+ fun_l2_n64
+end
+
+def fun_l1_n204()
+ fun_l2_n11
+end
+
+def fun_l1_n205()
+ fun_l2_n351
+end
+
+def fun_l1_n206()
+ fun_l2_n994
+end
+
+def fun_l1_n207()
+ fun_l2_n305
+end
+
+def fun_l1_n208()
+ fun_l2_n258
+end
+
+def fun_l1_n209()
+ fun_l2_n122
+end
+
+def fun_l1_n210()
+ fun_l2_n426
+end
+
+def fun_l1_n211()
+ fun_l2_n385
+end
+
+def fun_l1_n212()
+ fun_l2_n556
+end
+
+def fun_l1_n213()
+ fun_l2_n490
+end
+
+def fun_l1_n214()
+ fun_l2_n809
+end
+
+def fun_l1_n215()
+ fun_l2_n547
+end
+
+def fun_l1_n216()
+ fun_l2_n62
+end
+
+def fun_l1_n217()
+ fun_l2_n675
+end
+
+def fun_l1_n218()
+ fun_l2_n923
+end
+
+def fun_l1_n219()
+ fun_l2_n746
+end
+
+def fun_l1_n220()
+ fun_l2_n222
+end
+
+def fun_l1_n221()
+ fun_l2_n962
+end
+
+def fun_l1_n222()
+ fun_l2_n925
+end
+
+def fun_l1_n223()
+ fun_l2_n908
+end
+
+def fun_l1_n224()
+ fun_l2_n593
+end
+
+def fun_l1_n225()
+ fun_l2_n653
+end
+
+def fun_l1_n226()
+ fun_l2_n21
+end
+
+def fun_l1_n227()
+ fun_l2_n135
+end
+
+def fun_l1_n228()
+ fun_l2_n892
+end
+
+def fun_l1_n229()
+ fun_l2_n976
+end
+
+def fun_l1_n230()
+ fun_l2_n20
+end
+
+def fun_l1_n231()
+ fun_l2_n469
+end
+
+def fun_l1_n232()
+ fun_l2_n741
+end
+
+def fun_l1_n233()
+ fun_l2_n259
+end
+
+def fun_l1_n234()
+ fun_l2_n638
+end
+
+def fun_l1_n235()
+ fun_l2_n335
+end
+
+def fun_l1_n236()
+ fun_l2_n775
+end
+
+def fun_l1_n237()
+ fun_l2_n228
+end
+
+def fun_l1_n238()
+ fun_l2_n287
+end
+
+def fun_l1_n239()
+ fun_l2_n690
+end
+
+def fun_l1_n240()
+ fun_l2_n241
+end
+
+def fun_l1_n241()
+ fun_l2_n728
+end
+
+def fun_l1_n242()
+ fun_l2_n507
+end
+
+def fun_l1_n243()
+ fun_l2_n631
+end
+
+def fun_l1_n244()
+ fun_l2_n338
+end
+
+def fun_l1_n245()
+ fun_l2_n41
+end
+
+def fun_l1_n246()
+ fun_l2_n744
+end
+
+def fun_l1_n247()
+ fun_l2_n52
+end
+
+def fun_l1_n248()
+ fun_l2_n406
+end
+
+def fun_l1_n249()
+ fun_l2_n619
+end
+
+def fun_l1_n250()
+ fun_l2_n710
+end
+
+def fun_l1_n251()
+ fun_l2_n54
+end
+
+def fun_l1_n252()
+ fun_l2_n162
+end
+
+def fun_l1_n253()
+ fun_l2_n952
+end
+
+def fun_l1_n254()
+ fun_l2_n909
+end
+
+def fun_l1_n255()
+ fun_l2_n270
+end
+
+def fun_l1_n256()
+ fun_l2_n752
+end
+
+def fun_l1_n257()
+ fun_l2_n377
+end
+
+def fun_l1_n258()
+ fun_l2_n606
+end
+
+def fun_l1_n259()
+ fun_l2_n368
+end
+
+def fun_l1_n260()
+ fun_l2_n165
+end
+
+def fun_l1_n261()
+ fun_l2_n353
+end
+
+def fun_l1_n262()
+ fun_l2_n199
+end
+
+def fun_l1_n263()
+ fun_l2_n17
+end
+
+def fun_l1_n264()
+ fun_l2_n613
+end
+
+def fun_l1_n265()
+ fun_l2_n329
+end
+
+def fun_l1_n266()
+ fun_l2_n827
+end
+
+def fun_l1_n267()
+ fun_l2_n415
+end
+
+def fun_l1_n268()
+ fun_l2_n835
+end
+
+def fun_l1_n269()
+ fun_l2_n267
+end
+
+def fun_l1_n270()
+ fun_l2_n911
+end
+
+def fun_l1_n271()
+ fun_l2_n640
+end
+
+def fun_l1_n272()
+ fun_l2_n810
+end
+
+def fun_l1_n273()
+ fun_l2_n469
+end
+
+def fun_l1_n274()
+ fun_l2_n121
+end
+
+def fun_l1_n275()
+ fun_l2_n661
+end
+
+def fun_l1_n276()
+ fun_l2_n882
+end
+
+def fun_l1_n277()
+ fun_l2_n469
+end
+
+def fun_l1_n278()
+ fun_l2_n356
+end
+
+def fun_l1_n279()
+ fun_l2_n328
+end
+
+def fun_l1_n280()
+ fun_l2_n155
+end
+
+def fun_l1_n281()
+ fun_l2_n386
+end
+
+def fun_l1_n282()
+ fun_l2_n974
+end
+
+def fun_l1_n283()
+ fun_l2_n126
+end
+
+def fun_l1_n284()
+ fun_l2_n294
+end
+
+def fun_l1_n285()
+ fun_l2_n338
+end
+
+def fun_l1_n286()
+ fun_l2_n366
+end
+
+def fun_l1_n287()
+ fun_l2_n159
+end
+
+def fun_l1_n288()
+ fun_l2_n729
+end
+
+def fun_l1_n289()
+ fun_l2_n422
+end
+
+def fun_l1_n290()
+ fun_l2_n865
+end
+
+def fun_l1_n291()
+ fun_l2_n930
+end
+
+def fun_l1_n292()
+ fun_l2_n469
+end
+
+def fun_l1_n293()
+ fun_l2_n567
+end
+
+def fun_l1_n294()
+ fun_l2_n521
+end
+
+def fun_l1_n295()
+ fun_l2_n208
+end
+
+def fun_l1_n296()
+ fun_l2_n778
+end
+
+def fun_l1_n297()
+ fun_l2_n898
+end
+
+def fun_l1_n298()
+ fun_l2_n523
+end
+
+def fun_l1_n299()
+ fun_l2_n475
+end
+
+def fun_l1_n300()
+ fun_l2_n0
+end
+
+def fun_l1_n301()
+ fun_l2_n818
+end
+
+def fun_l1_n302()
+ fun_l2_n278
+end
+
+def fun_l1_n303()
+ fun_l2_n420
+end
+
+def fun_l1_n304()
+ fun_l2_n988
+end
+
+def fun_l1_n305()
+ fun_l2_n311
+end
+
+def fun_l1_n306()
+ fun_l2_n258
+end
+
+def fun_l1_n307()
+ fun_l2_n41
+end
+
+def fun_l1_n308()
+ fun_l2_n654
+end
+
+def fun_l1_n309()
+ fun_l2_n1
+end
+
+def fun_l1_n310()
+ fun_l2_n161
+end
+
+def fun_l1_n311()
+ fun_l2_n438
+end
+
+def fun_l1_n312()
+ fun_l2_n615
+end
+
+def fun_l1_n313()
+ fun_l2_n461
+end
+
+def fun_l1_n314()
+ fun_l2_n617
+end
+
+def fun_l1_n315()
+ fun_l2_n589
+end
+
+def fun_l1_n316()
+ fun_l2_n793
+end
+
+def fun_l1_n317()
+ fun_l2_n955
+end
+
+def fun_l1_n318()
+ fun_l2_n570
+end
+
+def fun_l1_n319()
+ fun_l2_n15
+end
+
+def fun_l1_n320()
+ fun_l2_n422
+end
+
+def fun_l1_n321()
+ fun_l2_n736
+end
+
+def fun_l1_n322()
+ fun_l2_n726
+end
+
+def fun_l1_n323()
+ fun_l2_n704
+end
+
+def fun_l1_n324()
+ fun_l2_n141
+end
+
+def fun_l1_n325()
+ fun_l2_n262
+end
+
+def fun_l1_n326()
+ fun_l2_n426
+end
+
+def fun_l1_n327()
+ fun_l2_n525
+end
+
+def fun_l1_n328()
+ fun_l2_n806
+end
+
+def fun_l1_n329()
+ fun_l2_n450
+end
+
+def fun_l1_n330()
+ fun_l2_n326
+end
+
+def fun_l1_n331()
+ fun_l2_n760
+end
+
+def fun_l1_n332()
+ fun_l2_n51
+end
+
+def fun_l1_n333()
+ fun_l2_n456
+end
+
+def fun_l1_n334()
+ fun_l2_n94
+end
+
+def fun_l1_n335()
+ fun_l2_n503
+end
+
+def fun_l1_n336()
+ fun_l2_n499
+end
+
+def fun_l1_n337()
+ fun_l2_n645
+end
+
+def fun_l1_n338()
+ fun_l2_n279
+end
+
+def fun_l1_n339()
+ fun_l2_n665
+end
+
+def fun_l1_n340()
+ fun_l2_n153
+end
+
+def fun_l1_n341()
+ fun_l2_n184
+end
+
+def fun_l1_n342()
+ fun_l2_n630
+end
+
+def fun_l1_n343()
+ fun_l2_n59
+end
+
+def fun_l1_n344()
+ fun_l2_n745
+end
+
+def fun_l1_n345()
+ fun_l2_n310
+end
+
+def fun_l1_n346()
+ fun_l2_n380
+end
+
+def fun_l1_n347()
+ fun_l2_n11
+end
+
+def fun_l1_n348()
+ fun_l2_n424
+end
+
+def fun_l1_n349()
+ fun_l2_n484
+end
+
+def fun_l1_n350()
+ fun_l2_n255
+end
+
+def fun_l1_n351()
+ fun_l2_n350
+end
+
+def fun_l1_n352()
+ fun_l2_n672
+end
+
+def fun_l1_n353()
+ fun_l2_n835
+end
+
+def fun_l1_n354()
+ fun_l2_n380
+end
+
+def fun_l1_n355()
+ fun_l2_n897
+end
+
+def fun_l1_n356()
+ fun_l2_n963
+end
+
+def fun_l1_n357()
+ fun_l2_n16
+end
+
+def fun_l1_n358()
+ fun_l2_n584
+end
+
+def fun_l1_n359()
+ fun_l2_n684
+end
+
+def fun_l1_n360()
+ fun_l2_n582
+end
+
+def fun_l1_n361()
+ fun_l2_n982
+end
+
+def fun_l1_n362()
+ fun_l2_n224
+end
+
+def fun_l1_n363()
+ fun_l2_n143
+end
+
+def fun_l1_n364()
+ fun_l2_n809
+end
+
+def fun_l1_n365()
+ fun_l2_n94
+end
+
+def fun_l1_n366()
+ fun_l2_n643
+end
+
+def fun_l1_n367()
+ fun_l2_n511
+end
+
+def fun_l1_n368()
+ fun_l2_n858
+end
+
+def fun_l1_n369()
+ fun_l2_n649
+end
+
+def fun_l1_n370()
+ fun_l2_n98
+end
+
+def fun_l1_n371()
+ fun_l2_n537
+end
+
+def fun_l1_n372()
+ fun_l2_n418
+end
+
+def fun_l1_n373()
+ fun_l2_n456
+end
+
+def fun_l1_n374()
+ fun_l2_n694
+end
+
+def fun_l1_n375()
+ fun_l2_n37
+end
+
+def fun_l1_n376()
+ fun_l2_n152
+end
+
+def fun_l1_n377()
+ fun_l2_n916
+end
+
+def fun_l1_n378()
+ fun_l2_n926
+end
+
+def fun_l1_n379()
+ fun_l2_n978
+end
+
+def fun_l1_n380()
+ fun_l2_n706
+end
+
+def fun_l1_n381()
+ fun_l2_n666
+end
+
+def fun_l1_n382()
+ fun_l2_n407
+end
+
+def fun_l1_n383()
+ fun_l2_n839
+end
+
+def fun_l1_n384()
+ fun_l2_n936
+end
+
+def fun_l1_n385()
+ fun_l2_n122
+end
+
+def fun_l1_n386()
+ fun_l2_n189
+end
+
+def fun_l1_n387()
+ fun_l2_n799
+end
+
+def fun_l1_n388()
+ fun_l2_n494
+end
+
+def fun_l1_n389()
+ fun_l2_n534
+end
+
+def fun_l1_n390()
+ fun_l2_n986
+end
+
+def fun_l1_n391()
+ fun_l2_n870
+end
+
+def fun_l1_n392()
+ fun_l2_n341
+end
+
+def fun_l1_n393()
+ fun_l2_n251
+end
+
+def fun_l1_n394()
+ fun_l2_n95
+end
+
+def fun_l1_n395()
+ fun_l2_n127
+end
+
+def fun_l1_n396()
+ fun_l2_n496
+end
+
+def fun_l1_n397()
+ fun_l2_n81
+end
+
+def fun_l1_n398()
+ fun_l2_n628
+end
+
+def fun_l1_n399()
+ fun_l2_n212
+end
+
+def fun_l1_n400()
+ fun_l2_n968
+end
+
+def fun_l1_n401()
+ fun_l2_n3
+end
+
+def fun_l1_n402()
+ fun_l2_n266
+end
+
+def fun_l1_n403()
+ fun_l2_n227
+end
+
+def fun_l1_n404()
+ fun_l2_n311
+end
+
+def fun_l1_n405()
+ fun_l2_n977
+end
+
+def fun_l1_n406()
+ fun_l2_n298
+end
+
+def fun_l1_n407()
+ fun_l2_n619
+end
+
+def fun_l1_n408()
+ fun_l2_n11
+end
+
+def fun_l1_n409()
+ fun_l2_n40
+end
+
+def fun_l1_n410()
+ fun_l2_n238
+end
+
+def fun_l1_n411()
+ fun_l2_n378
+end
+
+def fun_l1_n412()
+ fun_l2_n166
+end
+
+def fun_l1_n413()
+ fun_l2_n392
+end
+
+def fun_l1_n414()
+ fun_l2_n374
+end
+
+def fun_l1_n415()
+ fun_l2_n195
+end
+
+def fun_l1_n416()
+ fun_l2_n627
+end
+
+def fun_l1_n417()
+ fun_l2_n795
+end
+
+def fun_l1_n418()
+ fun_l2_n79
+end
+
+def fun_l1_n419()
+ fun_l2_n425
+end
+
+def fun_l1_n420()
+ fun_l2_n733
+end
+
+def fun_l1_n421()
+ fun_l2_n974
+end
+
+def fun_l1_n422()
+ fun_l2_n697
+end
+
+def fun_l1_n423()
+ fun_l2_n997
+end
+
+def fun_l1_n424()
+ fun_l2_n860
+end
+
+def fun_l1_n425()
+ fun_l2_n446
+end
+
+def fun_l1_n426()
+ fun_l2_n250
+end
+
+def fun_l1_n427()
+ fun_l2_n556
+end
+
+def fun_l1_n428()
+ fun_l2_n945
+end
+
+def fun_l1_n429()
+ fun_l2_n307
+end
+
+def fun_l1_n430()
+ fun_l2_n541
+end
+
+def fun_l1_n431()
+ fun_l2_n171
+end
+
+def fun_l1_n432()
+ fun_l2_n859
+end
+
+def fun_l1_n433()
+ fun_l2_n351
+end
+
+def fun_l1_n434()
+ fun_l2_n218
+end
+
+def fun_l1_n435()
+ fun_l2_n456
+end
+
+def fun_l1_n436()
+ fun_l2_n418
+end
+
+def fun_l1_n437()
+ fun_l2_n611
+end
+
+def fun_l1_n438()
+ fun_l2_n797
+end
+
+def fun_l1_n439()
+ fun_l2_n738
+end
+
+def fun_l1_n440()
+ fun_l2_n796
+end
+
+def fun_l1_n441()
+ fun_l2_n978
+end
+
+def fun_l1_n442()
+ fun_l2_n400
+end
+
+def fun_l1_n443()
+ fun_l2_n295
+end
+
+def fun_l1_n444()
+ fun_l2_n749
+end
+
+def fun_l1_n445()
+ fun_l2_n401
+end
+
+def fun_l1_n446()
+ fun_l2_n96
+end
+
+def fun_l1_n447()
+ fun_l2_n134
+end
+
+def fun_l1_n448()
+ fun_l2_n149
+end
+
+def fun_l1_n449()
+ fun_l2_n306
+end
+
+def fun_l1_n450()
+ fun_l2_n125
+end
+
+def fun_l1_n451()
+ fun_l2_n34
+end
+
+def fun_l1_n452()
+ fun_l2_n891
+end
+
+def fun_l1_n453()
+ fun_l2_n260
+end
+
+def fun_l1_n454()
+ fun_l2_n104
+end
+
+def fun_l1_n455()
+ fun_l2_n766
+end
+
+def fun_l1_n456()
+ fun_l2_n246
+end
+
+def fun_l1_n457()
+ fun_l2_n292
+end
+
+def fun_l1_n458()
+ fun_l2_n730
+end
+
+def fun_l1_n459()
+ fun_l2_n536
+end
+
+def fun_l1_n460()
+ fun_l2_n139
+end
+
+def fun_l1_n461()
+ fun_l2_n433
+end
+
+def fun_l1_n462()
+ fun_l2_n983
+end
+
+def fun_l1_n463()
+ fun_l2_n730
+end
+
+def fun_l1_n464()
+ fun_l2_n543
+end
+
+def fun_l1_n465()
+ fun_l2_n499
+end
+
+def fun_l1_n466()
+ fun_l2_n180
+end
+
+def fun_l1_n467()
+ fun_l2_n242
+end
+
+def fun_l1_n468()
+ fun_l2_n351
+end
+
+def fun_l1_n469()
+ fun_l2_n229
+end
+
+def fun_l1_n470()
+ fun_l2_n999
+end
+
+def fun_l1_n471()
+ fun_l2_n261
+end
+
+def fun_l1_n472()
+ fun_l2_n738
+end
+
+def fun_l1_n473()
+ fun_l2_n406
+end
+
+def fun_l1_n474()
+ fun_l2_n672
+end
+
+def fun_l1_n475()
+ fun_l2_n86
+end
+
+def fun_l1_n476()
+ fun_l2_n616
+end
+
+def fun_l1_n477()
+ fun_l2_n555
+end
+
+def fun_l1_n478()
+ fun_l2_n686
+end
+
+def fun_l1_n479()
+ fun_l2_n964
+end
+
+def fun_l1_n480()
+ fun_l2_n171
+end
+
+def fun_l1_n481()
+ fun_l2_n525
+end
+
+def fun_l1_n482()
+ fun_l2_n106
+end
+
+def fun_l1_n483()
+ fun_l2_n992
+end
+
+def fun_l1_n484()
+ fun_l2_n988
+end
+
+def fun_l1_n485()
+ fun_l2_n657
+end
+
+def fun_l1_n486()
+ fun_l2_n464
+end
+
+def fun_l1_n487()
+ fun_l2_n55
+end
+
+def fun_l1_n488()
+ fun_l2_n416
+end
+
+def fun_l1_n489()
+ fun_l2_n582
+end
+
+def fun_l1_n490()
+ fun_l2_n873
+end
+
+def fun_l1_n491()
+ fun_l2_n629
+end
+
+def fun_l1_n492()
+ fun_l2_n156
+end
+
+def fun_l1_n493()
+ fun_l2_n68
+end
+
+def fun_l1_n494()
+ fun_l2_n239
+end
+
+def fun_l1_n495()
+ fun_l2_n319
+end
+
+def fun_l1_n496()
+ fun_l2_n539
+end
+
+def fun_l1_n497()
+ fun_l2_n237
+end
+
+def fun_l1_n498()
+ fun_l2_n241
+end
+
+def fun_l1_n499()
+ fun_l2_n34
+end
+
+def fun_l1_n500()
+ fun_l2_n588
+end
+
+def fun_l1_n501()
+ fun_l2_n540
+end
+
+def fun_l1_n502()
+ fun_l2_n591
+end
+
+def fun_l1_n503()
+ fun_l2_n199
+end
+
+def fun_l1_n504()
+ fun_l2_n265
+end
+
+def fun_l1_n505()
+ fun_l2_n170
+end
+
+def fun_l1_n506()
+ fun_l2_n29
+end
+
+def fun_l1_n507()
+ fun_l2_n741
+end
+
+def fun_l1_n508()
+ fun_l2_n877
+end
+
+def fun_l1_n509()
+ fun_l2_n710
+end
+
+def fun_l1_n510()
+ fun_l2_n197
+end
+
+def fun_l1_n511()
+ fun_l2_n319
+end
+
+def fun_l1_n512()
+ fun_l2_n60
+end
+
+def fun_l1_n513()
+ fun_l2_n753
+end
+
+def fun_l1_n514()
+ fun_l2_n492
+end
+
+def fun_l1_n515()
+ fun_l2_n961
+end
+
+def fun_l1_n516()
+ fun_l2_n227
+end
+
+def fun_l1_n517()
+ fun_l2_n361
+end
+
+def fun_l1_n518()
+ fun_l2_n265
+end
+
+def fun_l1_n519()
+ fun_l2_n392
+end
+
+def fun_l1_n520()
+ fun_l2_n425
+end
+
+def fun_l1_n521()
+ fun_l2_n869
+end
+
+def fun_l1_n522()
+ fun_l2_n859
+end
+
+def fun_l1_n523()
+ fun_l2_n140
+end
+
+def fun_l1_n524()
+ fun_l2_n451
+end
+
+def fun_l1_n525()
+ fun_l2_n274
+end
+
+def fun_l1_n526()
+ fun_l2_n358
+end
+
+def fun_l1_n527()
+ fun_l2_n475
+end
+
+def fun_l1_n528()
+ fun_l2_n948
+end
+
+def fun_l1_n529()
+ fun_l2_n866
+end
+
+def fun_l1_n530()
+ fun_l2_n70
+end
+
+def fun_l1_n531()
+ fun_l2_n756
+end
+
+def fun_l1_n532()
+ fun_l2_n704
+end
+
+def fun_l1_n533()
+ fun_l2_n59
+end
+
+def fun_l1_n534()
+ fun_l2_n174
+end
+
+def fun_l1_n535()
+ fun_l2_n476
+end
+
+def fun_l1_n536()
+ fun_l2_n269
+end
+
+def fun_l1_n537()
+ fun_l2_n897
+end
+
+def fun_l1_n538()
+ fun_l2_n550
+end
+
+def fun_l1_n539()
+ fun_l2_n404
+end
+
+def fun_l1_n540()
+ fun_l2_n167
+end
+
+def fun_l1_n541()
+ fun_l2_n332
+end
+
+def fun_l1_n542()
+ fun_l2_n853
+end
+
+def fun_l1_n543()
+ fun_l2_n621
+end
+
+def fun_l1_n544()
+ fun_l2_n36
+end
+
+def fun_l1_n545()
+ fun_l2_n978
+end
+
+def fun_l1_n546()
+ fun_l2_n295
+end
+
+def fun_l1_n547()
+ fun_l2_n537
+end
+
+def fun_l1_n548()
+ fun_l2_n315
+end
+
+def fun_l1_n549()
+ fun_l2_n944
+end
+
+def fun_l1_n550()
+ fun_l2_n933
+end
+
+def fun_l1_n551()
+ fun_l2_n209
+end
+
+def fun_l1_n552()
+ fun_l2_n524
+end
+
+def fun_l1_n553()
+ fun_l2_n115
+end
+
+def fun_l1_n554()
+ fun_l2_n475
+end
+
+def fun_l1_n555()
+ fun_l2_n417
+end
+
+def fun_l1_n556()
+ fun_l2_n507
+end
+
+def fun_l1_n557()
+ fun_l2_n812
+end
+
+def fun_l1_n558()
+ fun_l2_n261
+end
+
+def fun_l1_n559()
+ fun_l2_n268
+end
+
+def fun_l1_n560()
+ fun_l2_n34
+end
+
+def fun_l1_n561()
+ fun_l2_n774
+end
+
+def fun_l1_n562()
+ fun_l2_n102
+end
+
+def fun_l1_n563()
+ fun_l2_n791
+end
+
+def fun_l1_n564()
+ fun_l2_n760
+end
+
+def fun_l1_n565()
+ fun_l2_n376
+end
+
+def fun_l1_n566()
+ fun_l2_n897
+end
+
+def fun_l1_n567()
+ fun_l2_n456
+end
+
+def fun_l1_n568()
+ fun_l2_n120
+end
+
+def fun_l1_n569()
+ fun_l2_n892
+end
+
+def fun_l1_n570()
+ fun_l2_n948
+end
+
+def fun_l1_n571()
+ fun_l2_n586
+end
+
+def fun_l1_n572()
+ fun_l2_n428
+end
+
+def fun_l1_n573()
+ fun_l2_n182
+end
+
+def fun_l1_n574()
+ fun_l2_n980
+end
+
+def fun_l1_n575()
+ fun_l2_n192
+end
+
+def fun_l1_n576()
+ fun_l2_n440
+end
+
+def fun_l1_n577()
+ fun_l2_n381
+end
+
+def fun_l1_n578()
+ fun_l2_n508
+end
+
+def fun_l1_n579()
+ fun_l2_n560
+end
+
+def fun_l1_n580()
+ fun_l2_n673
+end
+
+def fun_l1_n581()
+ fun_l2_n236
+end
+
+def fun_l1_n582()
+ fun_l2_n936
+end
+
+def fun_l1_n583()
+ fun_l2_n104
+end
+
+def fun_l1_n584()
+ fun_l2_n439
+end
+
+def fun_l1_n585()
+ fun_l2_n844
+end
+
+def fun_l1_n586()
+ fun_l2_n115
+end
+
+def fun_l1_n587()
+ fun_l2_n114
+end
+
+def fun_l1_n588()
+ fun_l2_n963
+end
+
+def fun_l1_n589()
+ fun_l2_n972
+end
+
+def fun_l1_n590()
+ fun_l2_n333
+end
+
+def fun_l1_n591()
+ fun_l2_n624
+end
+
+def fun_l1_n592()
+ fun_l2_n478
+end
+
+def fun_l1_n593()
+ fun_l2_n581
+end
+
+def fun_l1_n594()
+ fun_l2_n199
+end
+
+def fun_l1_n595()
+ fun_l2_n596
+end
+
+def fun_l1_n596()
+ fun_l2_n458
+end
+
+def fun_l1_n597()
+ fun_l2_n729
+end
+
+def fun_l1_n598()
+ fun_l2_n545
+end
+
+def fun_l1_n599()
+ fun_l2_n60
+end
+
+def fun_l1_n600()
+ fun_l2_n801
+end
+
+def fun_l1_n601()
+ fun_l2_n164
+end
+
+def fun_l1_n602()
+ fun_l2_n3
+end
+
+def fun_l1_n603()
+ fun_l2_n334
+end
+
+def fun_l1_n604()
+ fun_l2_n887
+end
+
+def fun_l1_n605()
+ fun_l2_n777
+end
+
+def fun_l1_n606()
+ fun_l2_n765
+end
+
+def fun_l1_n607()
+ fun_l2_n529
+end
+
+def fun_l1_n608()
+ fun_l2_n233
+end
+
+def fun_l1_n609()
+ fun_l2_n164
+end
+
+def fun_l1_n610()
+ fun_l2_n289
+end
+
+def fun_l1_n611()
+ fun_l2_n918
+end
+
+def fun_l1_n612()
+ fun_l2_n13
+end
+
+def fun_l1_n613()
+ fun_l2_n530
+end
+
+def fun_l1_n614()
+ fun_l2_n574
+end
+
+def fun_l1_n615()
+ fun_l2_n383
+end
+
+def fun_l1_n616()
+ fun_l2_n470
+end
+
+def fun_l1_n617()
+ fun_l2_n551
+end
+
+def fun_l1_n618()
+ fun_l2_n539
+end
+
+def fun_l1_n619()
+ fun_l2_n858
+end
+
+def fun_l1_n620()
+ fun_l2_n523
+end
+
+def fun_l1_n621()
+ fun_l2_n439
+end
+
+def fun_l1_n622()
+ fun_l2_n909
+end
+
+def fun_l1_n623()
+ fun_l2_n686
+end
+
+def fun_l1_n624()
+ fun_l2_n133
+end
+
+def fun_l1_n625()
+ fun_l2_n92
+end
+
+def fun_l1_n626()
+ fun_l2_n443
+end
+
+def fun_l1_n627()
+ fun_l2_n682
+end
+
+def fun_l1_n628()
+ fun_l2_n113
+end
+
+def fun_l1_n629()
+ fun_l2_n353
+end
+
+def fun_l1_n630()
+ fun_l2_n631
+end
+
+def fun_l1_n631()
+ fun_l2_n858
+end
+
+def fun_l1_n632()
+ fun_l2_n816
+end
+
+def fun_l1_n633()
+ fun_l2_n683
+end
+
+def fun_l1_n634()
+ fun_l2_n32
+end
+
+def fun_l1_n635()
+ fun_l2_n983
+end
+
+def fun_l1_n636()
+ fun_l2_n587
+end
+
+def fun_l1_n637()
+ fun_l2_n17
+end
+
+def fun_l1_n638()
+ fun_l2_n129
+end
+
+def fun_l1_n639()
+ fun_l2_n166
+end
+
+def fun_l1_n640()
+ fun_l2_n742
+end
+
+def fun_l1_n641()
+ fun_l2_n8
+end
+
+def fun_l1_n642()
+ fun_l2_n119
+end
+
+def fun_l1_n643()
+ fun_l2_n615
+end
+
+def fun_l1_n644()
+ fun_l2_n419
+end
+
+def fun_l1_n645()
+ fun_l2_n324
+end
+
+def fun_l1_n646()
+ fun_l2_n806
+end
+
+def fun_l1_n647()
+ fun_l2_n722
+end
+
+def fun_l1_n648()
+ fun_l2_n462
+end
+
+def fun_l1_n649()
+ fun_l2_n602
+end
+
+def fun_l1_n650()
+ fun_l2_n39
+end
+
+def fun_l1_n651()
+ fun_l2_n53
+end
+
+def fun_l1_n652()
+ fun_l2_n201
+end
+
+def fun_l1_n653()
+ fun_l2_n403
+end
+
+def fun_l1_n654()
+ fun_l2_n595
+end
+
+def fun_l1_n655()
+ fun_l2_n467
+end
+
+def fun_l1_n656()
+ fun_l2_n904
+end
+
+def fun_l1_n657()
+ fun_l2_n429
+end
+
+def fun_l1_n658()
+ fun_l2_n463
+end
+
+def fun_l1_n659()
+ fun_l2_n470
+end
+
+def fun_l1_n660()
+ fun_l2_n0
+end
+
+def fun_l1_n661()
+ fun_l2_n258
+end
+
+def fun_l1_n662()
+ fun_l2_n950
+end
+
+def fun_l1_n663()
+ fun_l2_n953
+end
+
+def fun_l1_n664()
+ fun_l2_n664
+end
+
+def fun_l1_n665()
+ fun_l2_n12
+end
+
+def fun_l1_n666()
+ fun_l2_n317
+end
+
+def fun_l1_n667()
+ fun_l2_n526
+end
+
+def fun_l1_n668()
+ fun_l2_n984
+end
+
+def fun_l1_n669()
+ fun_l2_n273
+end
+
+def fun_l1_n670()
+ fun_l2_n822
+end
+
+def fun_l1_n671()
+ fun_l2_n759
+end
+
+def fun_l1_n672()
+ fun_l2_n927
+end
+
+def fun_l1_n673()
+ fun_l2_n419
+end
+
+def fun_l1_n674()
+ fun_l2_n546
+end
+
+def fun_l1_n675()
+ fun_l2_n879
+end
+
+def fun_l1_n676()
+ fun_l2_n659
+end
+
+def fun_l1_n677()
+ fun_l2_n317
+end
+
+def fun_l1_n678()
+ fun_l2_n234
+end
+
+def fun_l1_n679()
+ fun_l2_n416
+end
+
+def fun_l1_n680()
+ fun_l2_n890
+end
+
+def fun_l1_n681()
+ fun_l2_n401
+end
+
+def fun_l1_n682()
+ fun_l2_n271
+end
+
+def fun_l1_n683()
+ fun_l2_n915
+end
+
+def fun_l1_n684()
+ fun_l2_n666
+end
+
+def fun_l1_n685()
+ fun_l2_n151
+end
+
+def fun_l1_n686()
+ fun_l2_n786
+end
+
+def fun_l1_n687()
+ fun_l2_n82
+end
+
+def fun_l1_n688()
+ fun_l2_n831
+end
+
+def fun_l1_n689()
+ fun_l2_n830
+end
+
+def fun_l1_n690()
+ fun_l2_n221
+end
+
+def fun_l1_n691()
+ fun_l2_n530
+end
+
+def fun_l1_n692()
+ fun_l2_n131
+end
+
+def fun_l1_n693()
+ fun_l2_n17
+end
+
+def fun_l1_n694()
+ fun_l2_n265
+end
+
+def fun_l1_n695()
+ fun_l2_n111
+end
+
+def fun_l1_n696()
+ fun_l2_n39
+end
+
+def fun_l1_n697()
+ fun_l2_n326
+end
+
+def fun_l1_n698()
+ fun_l2_n713
+end
+
+def fun_l1_n699()
+ fun_l2_n960
+end
+
+def fun_l1_n700()
+ fun_l2_n633
+end
+
+def fun_l1_n701()
+ fun_l2_n291
+end
+
+def fun_l1_n702()
+ fun_l2_n746
+end
+
+def fun_l1_n703()
+ fun_l2_n316
+end
+
+def fun_l1_n704()
+ fun_l2_n116
+end
+
+def fun_l1_n705()
+ fun_l2_n195
+end
+
+def fun_l1_n706()
+ fun_l2_n614
+end
+
+def fun_l1_n707()
+ fun_l2_n591
+end
+
+def fun_l1_n708()
+ fun_l2_n879
+end
+
+def fun_l1_n709()
+ fun_l2_n770
+end
+
+def fun_l1_n710()
+ fun_l2_n332
+end
+
+def fun_l1_n711()
+ fun_l2_n696
+end
+
+def fun_l1_n712()
+ fun_l2_n42
+end
+
+def fun_l1_n713()
+ fun_l2_n126
+end
+
+def fun_l1_n714()
+ fun_l2_n486
+end
+
+def fun_l1_n715()
+ fun_l2_n259
+end
+
+def fun_l1_n716()
+ fun_l2_n390
+end
+
+def fun_l1_n717()
+ fun_l2_n590
+end
+
+def fun_l1_n718()
+ fun_l2_n180
+end
+
+def fun_l1_n719()
+ fun_l2_n673
+end
+
+def fun_l1_n720()
+ fun_l2_n565
+end
+
+def fun_l1_n721()
+ fun_l2_n504
+end
+
+def fun_l1_n722()
+ fun_l2_n585
+end
+
+def fun_l1_n723()
+ fun_l2_n746
+end
+
+def fun_l1_n724()
+ fun_l2_n797
+end
+
+def fun_l1_n725()
+ fun_l2_n281
+end
+
+def fun_l1_n726()
+ fun_l2_n670
+end
+
+def fun_l1_n727()
+ fun_l2_n678
+end
+
+def fun_l1_n728()
+ fun_l2_n329
+end
+
+def fun_l1_n729()
+ fun_l2_n581
+end
+
+def fun_l1_n730()
+ fun_l2_n313
+end
+
+def fun_l1_n731()
+ fun_l2_n893
+end
+
+def fun_l1_n732()
+ fun_l2_n773
+end
+
+def fun_l1_n733()
+ fun_l2_n527
+end
+
+def fun_l1_n734()
+ fun_l2_n473
+end
+
+def fun_l1_n735()
+ fun_l2_n242
+end
+
+def fun_l1_n736()
+ fun_l2_n681
+end
+
+def fun_l1_n737()
+ fun_l2_n593
+end
+
+def fun_l1_n738()
+ fun_l2_n214
+end
+
+def fun_l1_n739()
+ fun_l2_n931
+end
+
+def fun_l1_n740()
+ fun_l2_n157
+end
+
+def fun_l1_n741()
+ fun_l2_n207
+end
+
+def fun_l1_n742()
+ fun_l2_n583
+end
+
+def fun_l1_n743()
+ fun_l2_n978
+end
+
+def fun_l1_n744()
+ fun_l2_n220
+end
+
+def fun_l1_n745()
+ fun_l2_n0
+end
+
+def fun_l1_n746()
+ fun_l2_n871
+end
+
+def fun_l1_n747()
+ fun_l2_n344
+end
+
+def fun_l1_n748()
+ fun_l2_n445
+end
+
+def fun_l1_n749()
+ fun_l2_n682
+end
+
+def fun_l1_n750()
+ fun_l2_n553
+end
+
+def fun_l1_n751()
+ fun_l2_n616
+end
+
+def fun_l1_n752()
+ fun_l2_n93
+end
+
+def fun_l1_n753()
+ fun_l2_n297
+end
+
+def fun_l1_n754()
+ fun_l2_n653
+end
+
+def fun_l1_n755()
+ fun_l2_n730
+end
+
+def fun_l1_n756()
+ fun_l2_n375
+end
+
+def fun_l1_n757()
+ fun_l2_n522
+end
+
+def fun_l1_n758()
+ fun_l2_n855
+end
+
+def fun_l1_n759()
+ fun_l2_n727
+end
+
+def fun_l1_n760()
+ fun_l2_n516
+end
+
+def fun_l1_n761()
+ fun_l2_n322
+end
+
+def fun_l1_n762()
+ fun_l2_n84
+end
+
+def fun_l1_n763()
+ fun_l2_n704
+end
+
+def fun_l1_n764()
+ fun_l2_n516
+end
+
+def fun_l1_n765()
+ fun_l2_n97
+end
+
+def fun_l1_n766()
+ fun_l2_n678
+end
+
+def fun_l1_n767()
+ fun_l2_n690
+end
+
+def fun_l1_n768()
+ fun_l2_n704
+end
+
+def fun_l1_n769()
+ fun_l2_n664
+end
+
+def fun_l1_n770()
+ fun_l2_n157
+end
+
+def fun_l1_n771()
+ fun_l2_n24
+end
+
+def fun_l1_n772()
+ fun_l2_n399
+end
+
+def fun_l1_n773()
+ fun_l2_n362
+end
+
+def fun_l1_n774()
+ fun_l2_n687
+end
+
+def fun_l1_n775()
+ fun_l2_n228
+end
+
+def fun_l1_n776()
+ fun_l2_n781
+end
+
+def fun_l1_n777()
+ fun_l2_n112
+end
+
+def fun_l1_n778()
+ fun_l2_n126
+end
+
+def fun_l1_n779()
+ fun_l2_n298
+end
+
+def fun_l1_n780()
+ fun_l2_n779
+end
+
+def fun_l1_n781()
+ fun_l2_n354
+end
+
+def fun_l1_n782()
+ fun_l2_n357
+end
+
+def fun_l1_n783()
+ fun_l2_n814
+end
+
+def fun_l1_n784()
+ fun_l2_n975
+end
+
+def fun_l1_n785()
+ fun_l2_n853
+end
+
+def fun_l1_n786()
+ fun_l2_n58
+end
+
+def fun_l1_n787()
+ fun_l2_n455
+end
+
+def fun_l1_n788()
+ fun_l2_n31
+end
+
+def fun_l1_n789()
+ fun_l2_n621
+end
+
+def fun_l1_n790()
+ fun_l2_n714
+end
+
+def fun_l1_n791()
+ fun_l2_n931
+end
+
+def fun_l1_n792()
+ fun_l2_n511
+end
+
+def fun_l1_n793()
+ fun_l2_n128
+end
+
+def fun_l1_n794()
+ fun_l2_n750
+end
+
+def fun_l1_n795()
+ fun_l2_n121
+end
+
+def fun_l1_n796()
+ fun_l2_n226
+end
+
+def fun_l1_n797()
+ fun_l2_n515
+end
+
+def fun_l1_n798()
+ fun_l2_n8
+end
+
+def fun_l1_n799()
+ fun_l2_n372
+end
+
+def fun_l1_n800()
+ fun_l2_n646
+end
+
+def fun_l1_n801()
+ fun_l2_n722
+end
+
+def fun_l1_n802()
+ fun_l2_n932
+end
+
+def fun_l1_n803()
+ fun_l2_n992
+end
+
+def fun_l1_n804()
+ fun_l2_n628
+end
+
+def fun_l1_n805()
+ fun_l2_n97
+end
+
+def fun_l1_n806()
+ fun_l2_n113
+end
+
+def fun_l1_n807()
+ fun_l2_n249
+end
+
+def fun_l1_n808()
+ fun_l2_n211
+end
+
+def fun_l1_n809()
+ fun_l2_n40
+end
+
+def fun_l1_n810()
+ fun_l2_n608
+end
+
+def fun_l1_n811()
+ fun_l2_n560
+end
+
+def fun_l1_n812()
+ fun_l2_n182
+end
+
+def fun_l1_n813()
+ fun_l2_n7
+end
+
+def fun_l1_n814()
+ fun_l2_n641
+end
+
+def fun_l1_n815()
+ fun_l2_n541
+end
+
+def fun_l1_n816()
+ fun_l2_n951
+end
+
+def fun_l1_n817()
+ fun_l2_n122
+end
+
+def fun_l1_n818()
+ fun_l2_n270
+end
+
+def fun_l1_n819()
+ fun_l2_n631
+end
+
+def fun_l1_n820()
+ fun_l2_n787
+end
+
+def fun_l1_n821()
+ fun_l2_n543
+end
+
+def fun_l1_n822()
+ fun_l2_n599
+end
+
+def fun_l1_n823()
+ fun_l2_n686
+end
+
+def fun_l1_n824()
+ fun_l2_n11
+end
+
+def fun_l1_n825()
+ fun_l2_n379
+end
+
+def fun_l1_n826()
+ fun_l2_n190
+end
+
+def fun_l1_n827()
+ fun_l2_n815
+end
+
+def fun_l1_n828()
+ fun_l2_n117
+end
+
+def fun_l1_n829()
+ fun_l2_n465
+end
+
+def fun_l1_n830()
+ fun_l2_n333
+end
+
+def fun_l1_n831()
+ fun_l2_n928
+end
+
+def fun_l1_n832()
+ fun_l2_n565
+end
+
+def fun_l1_n833()
+ fun_l2_n83
+end
+
+def fun_l1_n834()
+ fun_l2_n364
+end
+
+def fun_l1_n835()
+ fun_l2_n93
+end
+
+def fun_l1_n836()
+ fun_l2_n20
+end
+
+def fun_l1_n837()
+ fun_l2_n223
+end
+
+def fun_l1_n838()
+ fun_l2_n720
+end
+
+def fun_l1_n839()
+ fun_l2_n848
+end
+
+def fun_l1_n840()
+ fun_l2_n228
+end
+
+def fun_l1_n841()
+ fun_l2_n607
+end
+
+def fun_l1_n842()
+ fun_l2_n253
+end
+
+def fun_l1_n843()
+ fun_l2_n426
+end
+
+def fun_l1_n844()
+ fun_l2_n295
+end
+
+def fun_l1_n845()
+ fun_l2_n213
+end
+
+def fun_l1_n846()
+ fun_l2_n991
+end
+
+def fun_l1_n847()
+ fun_l2_n169
+end
+
+def fun_l1_n848()
+ fun_l2_n32
+end
+
+def fun_l1_n849()
+ fun_l2_n495
+end
+
+def fun_l1_n850()
+ fun_l2_n528
+end
+
+def fun_l1_n851()
+ fun_l2_n862
+end
+
+def fun_l1_n852()
+ fun_l2_n712
+end
+
+def fun_l1_n853()
+ fun_l2_n234
+end
+
+def fun_l1_n854()
+ fun_l2_n646
+end
+
+def fun_l1_n855()
+ fun_l2_n720
+end
+
+def fun_l1_n856()
+ fun_l2_n605
+end
+
+def fun_l1_n857()
+ fun_l2_n966
+end
+
+def fun_l1_n858()
+ fun_l2_n68
+end
+
+def fun_l1_n859()
+ fun_l2_n914
+end
+
+def fun_l1_n860()
+ fun_l2_n234
+end
+
+def fun_l1_n861()
+ fun_l2_n410
+end
+
+def fun_l1_n862()
+ fun_l2_n370
+end
+
+def fun_l1_n863()
+ fun_l2_n127
+end
+
+def fun_l1_n864()
+ fun_l2_n187
+end
+
+def fun_l1_n865()
+ fun_l2_n98
+end
+
+def fun_l1_n866()
+ fun_l2_n256
+end
+
+def fun_l1_n867()
+ fun_l2_n747
+end
+
+def fun_l1_n868()
+ fun_l2_n344
+end
+
+def fun_l1_n869()
+ fun_l2_n570
+end
+
+def fun_l1_n870()
+ fun_l2_n552
+end
+
+def fun_l1_n871()
+ fun_l2_n499
+end
+
+def fun_l1_n872()
+ fun_l2_n763
+end
+
+def fun_l1_n873()
+ fun_l2_n35
+end
+
+def fun_l1_n874()
+ fun_l2_n229
+end
+
+def fun_l1_n875()
+ fun_l2_n124
+end
+
+def fun_l1_n876()
+ fun_l2_n258
+end
+
+def fun_l1_n877()
+ fun_l2_n280
+end
+
+def fun_l1_n878()
+ fun_l2_n899
+end
+
+def fun_l1_n879()
+ fun_l2_n211
+end
+
+def fun_l1_n880()
+ fun_l2_n741
+end
+
+def fun_l1_n881()
+ fun_l2_n32
+end
+
+def fun_l1_n882()
+ fun_l2_n212
+end
+
+def fun_l1_n883()
+ fun_l2_n661
+end
+
+def fun_l1_n884()
+ fun_l2_n889
+end
+
+def fun_l1_n885()
+ fun_l2_n975
+end
+
+def fun_l1_n886()
+ fun_l2_n288
+end
+
+def fun_l1_n887()
+ fun_l2_n448
+end
+
+def fun_l1_n888()
+ fun_l2_n520
+end
+
+def fun_l1_n889()
+ fun_l2_n284
+end
+
+def fun_l1_n890()
+ fun_l2_n254
+end
+
+def fun_l1_n891()
+ fun_l2_n703
+end
+
+def fun_l1_n892()
+ fun_l2_n706
+end
+
+def fun_l1_n893()
+ fun_l2_n9
+end
+
+def fun_l1_n894()
+ fun_l2_n717
+end
+
+def fun_l1_n895()
+ fun_l2_n290
+end
+
+def fun_l1_n896()
+ fun_l2_n657
+end
+
+def fun_l1_n897()
+ fun_l2_n452
+end
+
+def fun_l1_n898()
+ fun_l2_n493
+end
+
+def fun_l1_n899()
+ fun_l2_n308
+end
+
+def fun_l1_n900()
+ fun_l2_n781
+end
+
+def fun_l1_n901()
+ fun_l2_n970
+end
+
+def fun_l1_n902()
+ fun_l2_n371
+end
+
+def fun_l1_n903()
+ fun_l2_n195
+end
+
+def fun_l1_n904()
+ fun_l2_n662
+end
+
+def fun_l1_n905()
+ fun_l2_n172
+end
+
+def fun_l1_n906()
+ fun_l2_n579
+end
+
+def fun_l1_n907()
+ fun_l2_n913
+end
+
+def fun_l1_n908()
+ fun_l2_n949
+end
+
+def fun_l1_n909()
+ fun_l2_n386
+end
+
+def fun_l1_n910()
+ fun_l2_n727
+end
+
+def fun_l1_n911()
+ fun_l2_n283
+end
+
+def fun_l1_n912()
+ fun_l2_n136
+end
+
+def fun_l1_n913()
+ fun_l2_n818
+end
+
+def fun_l1_n914()
+ fun_l2_n118
+end
+
+def fun_l1_n915()
+ fun_l2_n366
+end
+
+def fun_l1_n916()
+ fun_l2_n362
+end
+
+def fun_l1_n917()
+ fun_l2_n854
+end
+
+def fun_l1_n918()
+ fun_l2_n272
+end
+
+def fun_l1_n919()
+ fun_l2_n754
+end
+
+def fun_l1_n920()
+ fun_l2_n145
+end
+
+def fun_l1_n921()
+ fun_l2_n631
+end
+
+def fun_l1_n922()
+ fun_l2_n131
+end
+
+def fun_l1_n923()
+ fun_l2_n862
+end
+
+def fun_l1_n924()
+ fun_l2_n930
+end
+
+def fun_l1_n925()
+ fun_l2_n24
+end
+
+def fun_l1_n926()
+ fun_l2_n336
+end
+
+def fun_l1_n927()
+ fun_l2_n438
+end
+
+def fun_l1_n928()
+ fun_l2_n306
+end
+
+def fun_l1_n929()
+ fun_l2_n897
+end
+
+def fun_l1_n930()
+ fun_l2_n186
+end
+
+def fun_l1_n931()
+ fun_l2_n227
+end
+
+def fun_l1_n932()
+ fun_l2_n462
+end
+
+def fun_l1_n933()
+ fun_l2_n224
+end
+
+def fun_l1_n934()
+ fun_l2_n210
+end
+
+def fun_l1_n935()
+ fun_l2_n315
+end
+
+def fun_l1_n936()
+ fun_l2_n850
+end
+
+def fun_l1_n937()
+ fun_l2_n997
+end
+
+def fun_l1_n938()
+ fun_l2_n703
+end
+
+def fun_l1_n939()
+ fun_l2_n635
+end
+
+def fun_l1_n940()
+ fun_l2_n507
+end
+
+def fun_l1_n941()
+ fun_l2_n202
+end
+
+def fun_l1_n942()
+ fun_l2_n319
+end
+
+def fun_l1_n943()
+ fun_l2_n785
+end
+
+def fun_l1_n944()
+ fun_l2_n26
+end
+
+def fun_l1_n945()
+ fun_l2_n777
+end
+
+def fun_l1_n946()
+ fun_l2_n235
+end
+
+def fun_l1_n947()
+ fun_l2_n845
+end
+
+def fun_l1_n948()
+ fun_l2_n515
+end
+
+def fun_l1_n949()
+ fun_l2_n427
+end
+
+def fun_l1_n950()
+ fun_l2_n34
+end
+
+def fun_l1_n951()
+ fun_l2_n905
+end
+
+def fun_l1_n952()
+ fun_l2_n683
+end
+
+def fun_l1_n953()
+ fun_l2_n171
+end
+
+def fun_l1_n954()
+ fun_l2_n593
+end
+
+def fun_l1_n955()
+ fun_l2_n191
+end
+
+def fun_l1_n956()
+ fun_l2_n370
+end
+
+def fun_l1_n957()
+ fun_l2_n911
+end
+
+def fun_l1_n958()
+ fun_l2_n813
+end
+
+def fun_l1_n959()
+ fun_l2_n765
+end
+
+def fun_l1_n960()
+ fun_l2_n434
+end
+
+def fun_l1_n961()
+ fun_l2_n442
+end
+
+def fun_l1_n962()
+ fun_l2_n390
+end
+
+def fun_l1_n963()
+ fun_l2_n549
+end
+
+def fun_l1_n964()
+ fun_l2_n757
+end
+
+def fun_l1_n965()
+ fun_l2_n12
+end
+
+def fun_l1_n966()
+ fun_l2_n456
+end
+
+def fun_l1_n967()
+ fun_l2_n889
+end
+
+def fun_l1_n968()
+ fun_l2_n933
+end
+
+def fun_l1_n969()
+ fun_l2_n695
+end
+
+def fun_l1_n970()
+ fun_l2_n628
+end
+
+def fun_l1_n971()
+ fun_l2_n265
+end
+
+def fun_l1_n972()
+ fun_l2_n634
+end
+
+def fun_l1_n973()
+ fun_l2_n31
+end
+
+def fun_l1_n974()
+ fun_l2_n49
+end
+
+def fun_l1_n975()
+ fun_l2_n872
+end
+
+def fun_l1_n976()
+ fun_l2_n475
+end
+
+def fun_l1_n977()
+ fun_l2_n927
+end
+
+def fun_l1_n978()
+ fun_l2_n459
+end
+
+def fun_l1_n979()
+ fun_l2_n364
+end
+
+def fun_l1_n980()
+ fun_l2_n246
+end
+
+def fun_l1_n981()
+ fun_l2_n693
+end
+
+def fun_l1_n982()
+ fun_l2_n218
+end
+
+def fun_l1_n983()
+ fun_l2_n21
+end
+
+def fun_l1_n984()
+ fun_l2_n967
+end
+
+def fun_l1_n985()
+ fun_l2_n81
+end
+
+def fun_l1_n986()
+ fun_l2_n753
+end
+
+def fun_l1_n987()
+ fun_l2_n386
+end
+
+def fun_l1_n988()
+ fun_l2_n394
+end
+
+def fun_l1_n989()
+ fun_l2_n804
+end
+
+def fun_l1_n990()
+ fun_l2_n55
+end
+
+def fun_l1_n991()
+ fun_l2_n359
+end
+
+def fun_l1_n992()
+ fun_l2_n883
+end
+
+def fun_l1_n993()
+ fun_l2_n404
+end
+
+def fun_l1_n994()
+ fun_l2_n145
+end
+
+def fun_l1_n995()
+ fun_l2_n684
+end
+
+def fun_l1_n996()
+ fun_l2_n38
+end
+
+def fun_l1_n997()
+ fun_l2_n309
+end
+
+def fun_l1_n998()
+ fun_l2_n560
+end
+
+def fun_l1_n999()
+ fun_l2_n95
+end
+
+def fun_l2_n0()
+ fun_l3_n813
+end
+
+def fun_l2_n1()
+ fun_l3_n785
+end
+
+def fun_l2_n2()
+ fun_l3_n218
+end
+
+def fun_l2_n3()
+ fun_l3_n111
+end
+
+def fun_l2_n4()
+ fun_l3_n581
+end
+
+def fun_l2_n5()
+ fun_l3_n873
+end
+
+def fun_l2_n6()
+ fun_l3_n123
+end
+
+def fun_l2_n7()
+ fun_l3_n576
+end
+
+def fun_l2_n8()
+ fun_l3_n543
+end
+
+def fun_l2_n9()
+ fun_l3_n720
+end
+
+def fun_l2_n10()
+ fun_l3_n970
+end
+
+def fun_l2_n11()
+ fun_l3_n663
+end
+
+def fun_l2_n12()
+ fun_l3_n549
+end
+
+def fun_l2_n13()
+ fun_l3_n787
+end
+
+def fun_l2_n14()
+ fun_l3_n15
+end
+
+def fun_l2_n15()
+ fun_l3_n858
+end
+
+def fun_l2_n16()
+ fun_l3_n873
+end
+
+def fun_l2_n17()
+ fun_l3_n482
+end
+
+def fun_l2_n18()
+ fun_l3_n26
+end
+
+def fun_l2_n19()
+ fun_l3_n591
+end
+
+def fun_l2_n20()
+ fun_l3_n879
+end
+
+def fun_l2_n21()
+ fun_l3_n891
+end
+
+def fun_l2_n22()
+ fun_l3_n381
+end
+
+def fun_l2_n23()
+ fun_l3_n504
+end
+
+def fun_l2_n24()
+ fun_l3_n595
+end
+
+def fun_l2_n25()
+ fun_l3_n985
+end
+
+def fun_l2_n26()
+ fun_l3_n77
+end
+
+def fun_l2_n27()
+ fun_l3_n144
+end
+
+def fun_l2_n28()
+ fun_l3_n912
+end
+
+def fun_l2_n29()
+ fun_l3_n1
+end
+
+def fun_l2_n30()
+ fun_l3_n816
+end
+
+def fun_l2_n31()
+ fun_l3_n246
+end
+
+def fun_l2_n32()
+ fun_l3_n599
+end
+
+def fun_l2_n33()
+ fun_l3_n961
+end
+
+def fun_l2_n34()
+ fun_l3_n392
+end
+
+def fun_l2_n35()
+ fun_l3_n437
+end
+
+def fun_l2_n36()
+ fun_l3_n520
+end
+
+def fun_l2_n37()
+ fun_l3_n146
+end
+
+def fun_l2_n38()
+ fun_l3_n186
+end
+
+def fun_l2_n39()
+ fun_l3_n699
+end
+
+def fun_l2_n40()
+ fun_l3_n863
+end
+
+def fun_l2_n41()
+ fun_l3_n539
+end
+
+def fun_l2_n42()
+ fun_l3_n581
+end
+
+def fun_l2_n43()
+ fun_l3_n325
+end
+
+def fun_l2_n44()
+ fun_l3_n604
+end
+
+def fun_l2_n45()
+ fun_l3_n79
+end
+
+def fun_l2_n46()
+ fun_l3_n530
+end
+
+def fun_l2_n47()
+ fun_l3_n344
+end
+
+def fun_l2_n48()
+ fun_l3_n92
+end
+
+def fun_l2_n49()
+ fun_l3_n826
+end
+
+def fun_l2_n50()
+ fun_l3_n283
+end
+
+def fun_l2_n51()
+ fun_l3_n220
+end
+
+def fun_l2_n52()
+ fun_l3_n96
+end
+
+def fun_l2_n53()
+ fun_l3_n647
+end
+
+def fun_l2_n54()
+ fun_l3_n664
+end
+
+def fun_l2_n55()
+ fun_l3_n718
+end
+
+def fun_l2_n56()
+ fun_l3_n281
+end
+
+def fun_l2_n57()
+ fun_l3_n214
+end
+
+def fun_l2_n58()
+ fun_l3_n143
+end
+
+def fun_l2_n59()
+ fun_l3_n423
+end
+
+def fun_l2_n60()
+ fun_l3_n815
+end
+
+def fun_l2_n61()
+ fun_l3_n561
+end
+
+def fun_l2_n62()
+ fun_l3_n634
+end
+
+def fun_l2_n63()
+ fun_l3_n354
+end
+
+def fun_l2_n64()
+ fun_l3_n39
+end
+
+def fun_l2_n65()
+ fun_l3_n704
+end
+
+def fun_l2_n66()
+ fun_l3_n193
+end
+
+def fun_l2_n67()
+ fun_l3_n267
+end
+
+def fun_l2_n68()
+ fun_l3_n225
+end
+
+def fun_l2_n69()
+ fun_l3_n253
+end
+
+def fun_l2_n70()
+ fun_l3_n97
+end
+
+def fun_l2_n71()
+ fun_l3_n312
+end
+
+def fun_l2_n72()
+ fun_l3_n663
+end
+
+def fun_l2_n73()
+ fun_l3_n730
+end
+
+def fun_l2_n74()
+ fun_l3_n31
+end
+
+def fun_l2_n75()
+ fun_l3_n94
+end
+
+def fun_l2_n76()
+ fun_l3_n719
+end
+
+def fun_l2_n77()
+ fun_l3_n72
+end
+
+def fun_l2_n78()
+ fun_l3_n593
+end
+
+def fun_l2_n79()
+ fun_l3_n586
+end
+
+def fun_l2_n80()
+ fun_l3_n477
+end
+
+def fun_l2_n81()
+ fun_l3_n406
+end
+
+def fun_l2_n82()
+ fun_l3_n624
+end
+
+def fun_l2_n83()
+ fun_l3_n127
+end
+
+def fun_l2_n84()
+ fun_l3_n993
+end
+
+def fun_l2_n85()
+ fun_l3_n764
+end
+
+def fun_l2_n86()
+ fun_l3_n892
+end
+
+def fun_l2_n87()
+ fun_l3_n147
+end
+
+def fun_l2_n88()
+ fun_l3_n971
+end
+
+def fun_l2_n89()
+ fun_l3_n239
+end
+
+def fun_l2_n90()
+ fun_l3_n96
+end
+
+def fun_l2_n91()
+ fun_l3_n686
+end
+
+def fun_l2_n92()
+ fun_l3_n388
+end
+
+def fun_l2_n93()
+ fun_l3_n848
+end
+
+def fun_l2_n94()
+ fun_l3_n415
+end
+
+def fun_l2_n95()
+ fun_l3_n155
+end
+
+def fun_l2_n96()
+ fun_l3_n245
+end
+
+def fun_l2_n97()
+ fun_l3_n103
+end
+
+def fun_l2_n98()
+ fun_l3_n591
+end
+
+def fun_l2_n99()
+ fun_l3_n610
+end
+
+def fun_l2_n100()
+ fun_l3_n925
+end
+
+def fun_l2_n101()
+ fun_l3_n435
+end
+
+def fun_l2_n102()
+ fun_l3_n580
+end
+
+def fun_l2_n103()
+ fun_l3_n116
+end
+
+def fun_l2_n104()
+ fun_l3_n160
+end
+
+def fun_l2_n105()
+ fun_l3_n245
+end
+
+def fun_l2_n106()
+ fun_l3_n970
+end
+
+def fun_l2_n107()
+ fun_l3_n540
+end
+
+def fun_l2_n108()
+ fun_l3_n385
+end
+
+def fun_l2_n109()
+ fun_l3_n292
+end
+
+def fun_l2_n110()
+ fun_l3_n785
+end
+
+def fun_l2_n111()
+ fun_l3_n310
+end
+
+def fun_l2_n112()
+ fun_l3_n983
+end
+
+def fun_l2_n113()
+ fun_l3_n378
+end
+
+def fun_l2_n114()
+ fun_l3_n538
+end
+
+def fun_l2_n115()
+ fun_l3_n161
+end
+
+def fun_l2_n116()
+ fun_l3_n537
+end
+
+def fun_l2_n117()
+ fun_l3_n1
+end
+
+def fun_l2_n118()
+ fun_l3_n606
+end
+
+def fun_l2_n119()
+ fun_l3_n377
+end
+
+def fun_l2_n120()
+ fun_l3_n839
+end
+
+def fun_l2_n121()
+ fun_l3_n174
+end
+
+def fun_l2_n122()
+ fun_l3_n709
+end
+
+def fun_l2_n123()
+ fun_l3_n384
+end
+
+def fun_l2_n124()
+ fun_l3_n566
+end
+
+def fun_l2_n125()
+ fun_l3_n329
+end
+
+def fun_l2_n126()
+ fun_l3_n238
+end
+
+def fun_l2_n127()
+ fun_l3_n366
+end
+
+def fun_l2_n128()
+ fun_l3_n443
+end
+
+def fun_l2_n129()
+ fun_l3_n901
+end
+
+def fun_l2_n130()
+ fun_l3_n16
+end
+
+def fun_l2_n131()
+ fun_l3_n959
+end
+
+def fun_l2_n132()
+ fun_l3_n460
+end
+
+def fun_l2_n133()
+ fun_l3_n26
+end
+
+def fun_l2_n134()
+ fun_l3_n552
+end
+
+def fun_l2_n135()
+ fun_l3_n207
+end
+
+def fun_l2_n136()
+ fun_l3_n804
+end
+
+def fun_l2_n137()
+ fun_l3_n178
+end
+
+def fun_l2_n138()
+ fun_l3_n826
+end
+
+def fun_l2_n139()
+ fun_l3_n421
+end
+
+def fun_l2_n140()
+ fun_l3_n101
+end
+
+def fun_l2_n141()
+ fun_l3_n529
+end
+
+def fun_l2_n142()
+ fun_l3_n594
+end
+
+def fun_l2_n143()
+ fun_l3_n977
+end
+
+def fun_l2_n144()
+ fun_l3_n859
+end
+
+def fun_l2_n145()
+ fun_l3_n24
+end
+
+def fun_l2_n146()
+ fun_l3_n806
+end
+
+def fun_l2_n147()
+ fun_l3_n355
+end
+
+def fun_l2_n148()
+ fun_l3_n648
+end
+
+def fun_l2_n149()
+ fun_l3_n554
+end
+
+def fun_l2_n150()
+ fun_l3_n188
+end
+
+def fun_l2_n151()
+ fun_l3_n711
+end
+
+def fun_l2_n152()
+ fun_l3_n574
+end
+
+def fun_l2_n153()
+ fun_l3_n667
+end
+
+def fun_l2_n154()
+ fun_l3_n638
+end
+
+def fun_l2_n155()
+ fun_l3_n283
+end
+
+def fun_l2_n156()
+ fun_l3_n999
+end
+
+def fun_l2_n157()
+ fun_l3_n412
+end
+
+def fun_l2_n158()
+ fun_l3_n621
+end
+
+def fun_l2_n159()
+ fun_l3_n821
+end
+
+def fun_l2_n160()
+ fun_l3_n857
+end
+
+def fun_l2_n161()
+ fun_l3_n73
+end
+
+def fun_l2_n162()
+ fun_l3_n768
+end
+
+def fun_l2_n163()
+ fun_l3_n929
+end
+
+def fun_l2_n164()
+ fun_l3_n205
+end
+
+def fun_l2_n165()
+ fun_l3_n120
+end
+
+def fun_l2_n166()
+ fun_l3_n787
+end
+
+def fun_l2_n167()
+ fun_l3_n69
+end
+
+def fun_l2_n168()
+ fun_l3_n567
+end
+
+def fun_l2_n169()
+ fun_l3_n106
+end
+
+def fun_l2_n170()
+ fun_l3_n751
+end
+
+def fun_l2_n171()
+ fun_l3_n642
+end
+
+def fun_l2_n172()
+ fun_l3_n744
+end
+
+def fun_l2_n173()
+ fun_l3_n730
+end
+
+def fun_l2_n174()
+ fun_l3_n681
+end
+
+def fun_l2_n175()
+ fun_l3_n493
+end
+
+def fun_l2_n176()
+ fun_l3_n773
+end
+
+def fun_l2_n177()
+ fun_l3_n393
+end
+
+def fun_l2_n178()
+ fun_l3_n702
+end
+
+def fun_l2_n179()
+ fun_l3_n353
+end
+
+def fun_l2_n180()
+ fun_l3_n21
+end
+
+def fun_l2_n181()
+ fun_l3_n575
+end
+
+def fun_l2_n182()
+ fun_l3_n975
+end
+
+def fun_l2_n183()
+ fun_l3_n969
+end
+
+def fun_l2_n184()
+ fun_l3_n8
+end
+
+def fun_l2_n185()
+ fun_l3_n81
+end
+
+def fun_l2_n186()
+ fun_l3_n650
+end
+
+def fun_l2_n187()
+ fun_l3_n257
+end
+
+def fun_l2_n188()
+ fun_l3_n443
+end
+
+def fun_l2_n189()
+ fun_l3_n647
+end
+
+def fun_l2_n190()
+ fun_l3_n783
+end
+
+def fun_l2_n191()
+ fun_l3_n447
+end
+
+def fun_l2_n192()
+ fun_l3_n50
+end
+
+def fun_l2_n193()
+ fun_l3_n25
+end
+
+def fun_l2_n194()
+ fun_l3_n646
+end
+
+def fun_l2_n195()
+ fun_l3_n878
+end
+
+def fun_l2_n196()
+ fun_l3_n156
+end
+
+def fun_l2_n197()
+ fun_l3_n999
+end
+
+def fun_l2_n198()
+ fun_l3_n292
+end
+
+def fun_l2_n199()
+ fun_l3_n386
+end
+
+def fun_l2_n200()
+ fun_l3_n3
+end
+
+def fun_l2_n201()
+ fun_l3_n111
+end
+
+def fun_l2_n202()
+ fun_l3_n89
+end
+
+def fun_l2_n203()
+ fun_l3_n628
+end
+
+def fun_l2_n204()
+ fun_l3_n384
+end
+
+def fun_l2_n205()
+ fun_l3_n951
+end
+
+def fun_l2_n206()
+ fun_l3_n662
+end
+
+def fun_l2_n207()
+ fun_l3_n607
+end
+
+def fun_l2_n208()
+ fun_l3_n245
+end
+
+def fun_l2_n209()
+ fun_l3_n875
+end
+
+def fun_l2_n210()
+ fun_l3_n493
+end
+
+def fun_l2_n211()
+ fun_l3_n639
+end
+
+def fun_l2_n212()
+ fun_l3_n257
+end
+
+def fun_l2_n213()
+ fun_l3_n710
+end
+
+def fun_l2_n214()
+ fun_l3_n848
+end
+
+def fun_l2_n215()
+ fun_l3_n86
+end
+
+def fun_l2_n216()
+ fun_l3_n269
+end
+
+def fun_l2_n217()
+ fun_l3_n907
+end
+
+def fun_l2_n218()
+ fun_l3_n491
+end
+
+def fun_l2_n219()
+ fun_l3_n194
+end
+
+def fun_l2_n220()
+ fun_l3_n204
+end
+
+def fun_l2_n221()
+ fun_l3_n647
+end
+
+def fun_l2_n222()
+ fun_l3_n277
+end
+
+def fun_l2_n223()
+ fun_l3_n687
+end
+
+def fun_l2_n224()
+ fun_l3_n438
+end
+
+def fun_l2_n225()
+ fun_l3_n634
+end
+
+def fun_l2_n226()
+ fun_l3_n826
+end
+
+def fun_l2_n227()
+ fun_l3_n702
+end
+
+def fun_l2_n228()
+ fun_l3_n541
+end
+
+def fun_l2_n229()
+ fun_l3_n741
+end
+
+def fun_l2_n230()
+ fun_l3_n886
+end
+
+def fun_l2_n231()
+ fun_l3_n243
+end
+
+def fun_l2_n232()
+ fun_l3_n313
+end
+
+def fun_l2_n233()
+ fun_l3_n499
+end
+
+def fun_l2_n234()
+ fun_l3_n100
+end
+
+def fun_l2_n235()
+ fun_l3_n958
+end
+
+def fun_l2_n236()
+ fun_l3_n192
+end
+
+def fun_l2_n237()
+ fun_l3_n529
+end
+
+def fun_l2_n238()
+ fun_l3_n761
+end
+
+def fun_l2_n239()
+ fun_l3_n558
+end
+
+def fun_l2_n240()
+ fun_l3_n58
+end
+
+def fun_l2_n241()
+ fun_l3_n65
+end
+
+def fun_l2_n242()
+ fun_l3_n685
+end
+
+def fun_l2_n243()
+ fun_l3_n418
+end
+
+def fun_l2_n244()
+ fun_l3_n206
+end
+
+def fun_l2_n245()
+ fun_l3_n147
+end
+
+def fun_l2_n246()
+ fun_l3_n98
+end
+
+def fun_l2_n247()
+ fun_l3_n104
+end
+
+def fun_l2_n248()
+ fun_l3_n336
+end
+
+def fun_l2_n249()
+ fun_l3_n406
+end
+
+def fun_l2_n250()
+ fun_l3_n835
+end
+
+def fun_l2_n251()
+ fun_l3_n611
+end
+
+def fun_l2_n252()
+ fun_l3_n890
+end
+
+def fun_l2_n253()
+ fun_l3_n272
+end
+
+def fun_l2_n254()
+ fun_l3_n962
+end
+
+def fun_l2_n255()
+ fun_l3_n960
+end
+
+def fun_l2_n256()
+ fun_l3_n675
+end
+
+def fun_l2_n257()
+ fun_l3_n161
+end
+
+def fun_l2_n258()
+ fun_l3_n509
+end
+
+def fun_l2_n259()
+ fun_l3_n36
+end
+
+def fun_l2_n260()
+ fun_l3_n381
+end
+
+def fun_l2_n261()
+ fun_l3_n721
+end
+
+def fun_l2_n262()
+ fun_l3_n807
+end
+
+def fun_l2_n263()
+ fun_l3_n424
+end
+
+def fun_l2_n264()
+ fun_l3_n733
+end
+
+def fun_l2_n265()
+ fun_l3_n417
+end
+
+def fun_l2_n266()
+ fun_l3_n630
+end
+
+def fun_l2_n267()
+ fun_l3_n733
+end
+
+def fun_l2_n268()
+ fun_l3_n797
+end
+
+def fun_l2_n269()
+ fun_l3_n446
+end
+
+def fun_l2_n270()
+ fun_l3_n877
+end
+
+def fun_l2_n271()
+ fun_l3_n64
+end
+
+def fun_l2_n272()
+ fun_l3_n553
+end
+
+def fun_l2_n273()
+ fun_l3_n369
+end
+
+def fun_l2_n274()
+ fun_l3_n261
+end
+
+def fun_l2_n275()
+ fun_l3_n244
+end
+
+def fun_l2_n276()
+ fun_l3_n544
+end
+
+def fun_l2_n277()
+ fun_l3_n779
+end
+
+def fun_l2_n278()
+ fun_l3_n864
+end
+
+def fun_l2_n279()
+ fun_l3_n235
+end
+
+def fun_l2_n280()
+ fun_l3_n343
+end
+
+def fun_l2_n281()
+ fun_l3_n601
+end
+
+def fun_l2_n282()
+ fun_l3_n925
+end
+
+def fun_l2_n283()
+ fun_l3_n822
+end
+
+def fun_l2_n284()
+ fun_l3_n675
+end
+
+def fun_l2_n285()
+ fun_l3_n791
+end
+
+def fun_l2_n286()
+ fun_l3_n359
+end
+
+def fun_l2_n287()
+ fun_l3_n596
+end
+
+def fun_l2_n288()
+ fun_l3_n153
+end
+
+def fun_l2_n289()
+ fun_l3_n420
+end
+
+def fun_l2_n290()
+ fun_l3_n464
+end
+
+def fun_l2_n291()
+ fun_l3_n393
+end
+
+def fun_l2_n292()
+ fun_l3_n614
+end
+
+def fun_l2_n293()
+ fun_l3_n449
+end
+
+def fun_l2_n294()
+ fun_l3_n561
+end
+
+def fun_l2_n295()
+ fun_l3_n119
+end
+
+def fun_l2_n296()
+ fun_l3_n82
+end
+
+def fun_l2_n297()
+ fun_l3_n932
+end
+
+def fun_l2_n298()
+ fun_l3_n505
+end
+
+def fun_l2_n299()
+ fun_l3_n664
+end
+
+def fun_l2_n300()
+ fun_l3_n222
+end
+
+def fun_l2_n301()
+ fun_l3_n428
+end
+
+def fun_l2_n302()
+ fun_l3_n975
+end
+
+def fun_l2_n303()
+ fun_l3_n481
+end
+
+def fun_l2_n304()
+ fun_l3_n263
+end
+
+def fun_l2_n305()
+ fun_l3_n816
+end
+
+def fun_l2_n306()
+ fun_l3_n58
+end
+
+def fun_l2_n307()
+ fun_l3_n89
+end
+
+def fun_l2_n308()
+ fun_l3_n509
+end
+
+def fun_l2_n309()
+ fun_l3_n162
+end
+
+def fun_l2_n310()
+ fun_l3_n222
+end
+
+def fun_l2_n311()
+ fun_l3_n999
+end
+
+def fun_l2_n312()
+ fun_l3_n26
+end
+
+def fun_l2_n313()
+ fun_l3_n857
+end
+
+def fun_l2_n314()
+ fun_l3_n485
+end
+
+def fun_l2_n315()
+ fun_l3_n935
+end
+
+def fun_l2_n316()
+ fun_l3_n159
+end
+
+def fun_l2_n317()
+ fun_l3_n987
+end
+
+def fun_l2_n318()
+ fun_l3_n122
+end
+
+def fun_l2_n319()
+ fun_l3_n675
+end
+
+def fun_l2_n320()
+ fun_l3_n88
+end
+
+def fun_l2_n321()
+ fun_l3_n84
+end
+
+def fun_l2_n322()
+ fun_l3_n17
+end
+
+def fun_l2_n323()
+ fun_l3_n859
+end
+
+def fun_l2_n324()
+ fun_l3_n340
+end
+
+def fun_l2_n325()
+ fun_l3_n122
+end
+
+def fun_l2_n326()
+ fun_l3_n675
+end
+
+def fun_l2_n327()
+ fun_l3_n502
+end
+
+def fun_l2_n328()
+ fun_l3_n56
+end
+
+def fun_l2_n329()
+ fun_l3_n398
+end
+
+def fun_l2_n330()
+ fun_l3_n985
+end
+
+def fun_l2_n331()
+ fun_l3_n117
+end
+
+def fun_l2_n332()
+ fun_l3_n264
+end
+
+def fun_l2_n333()
+ fun_l3_n664
+end
+
+def fun_l2_n334()
+ fun_l3_n958
+end
+
+def fun_l2_n335()
+ fun_l3_n495
+end
+
+def fun_l2_n336()
+ fun_l3_n794
+end
+
+def fun_l2_n337()
+ fun_l3_n95
+end
+
+def fun_l2_n338()
+ fun_l3_n202
+end
+
+def fun_l2_n339()
+ fun_l3_n510
+end
+
+def fun_l2_n340()
+ fun_l3_n919
+end
+
+def fun_l2_n341()
+ fun_l3_n602
+end
+
+def fun_l2_n342()
+ fun_l3_n750
+end
+
+def fun_l2_n343()
+ fun_l3_n122
+end
+
+def fun_l2_n344()
+ fun_l3_n358
+end
+
+def fun_l2_n345()
+ fun_l3_n539
+end
+
+def fun_l2_n346()
+ fun_l3_n67
+end
+
+def fun_l2_n347()
+ fun_l3_n881
+end
+
+def fun_l2_n348()
+ fun_l3_n257
+end
+
+def fun_l2_n349()
+ fun_l3_n987
+end
+
+def fun_l2_n350()
+ fun_l3_n482
+end
+
+def fun_l2_n351()
+ fun_l3_n803
+end
+
+def fun_l2_n352()
+ fun_l3_n172
+end
+
+def fun_l2_n353()
+ fun_l3_n826
+end
+
+def fun_l2_n354()
+ fun_l3_n977
+end
+
+def fun_l2_n355()
+ fun_l3_n976
+end
+
+def fun_l2_n356()
+ fun_l3_n970
+end
+
+def fun_l2_n357()
+ fun_l3_n904
+end
+
+def fun_l2_n358()
+ fun_l3_n735
+end
+
+def fun_l2_n359()
+ fun_l3_n146
+end
+
+def fun_l2_n360()
+ fun_l3_n810
+end
+
+def fun_l2_n361()
+ fun_l3_n591
+end
+
+def fun_l2_n362()
+ fun_l3_n882
+end
+
+def fun_l2_n363()
+ fun_l3_n980
+end
+
+def fun_l2_n364()
+ fun_l3_n594
+end
+
+def fun_l2_n365()
+ fun_l3_n431
+end
+
+def fun_l2_n366()
+ fun_l3_n225
+end
+
+def fun_l2_n367()
+ fun_l3_n11
+end
+
+def fun_l2_n368()
+ fun_l3_n283
+end
+
+def fun_l2_n369()
+ fun_l3_n476
+end
+
+def fun_l2_n370()
+ fun_l3_n382
+end
+
+def fun_l2_n371()
+ fun_l3_n422
+end
+
+def fun_l2_n372()
+ fun_l3_n272
+end
+
+def fun_l2_n373()
+ fun_l3_n911
+end
+
+def fun_l2_n374()
+ fun_l3_n282
+end
+
+def fun_l2_n375()
+ fun_l3_n388
+end
+
+def fun_l2_n376()
+ fun_l3_n928
+end
+
+def fun_l2_n377()
+ fun_l3_n784
+end
+
+def fun_l2_n378()
+ fun_l3_n817
+end
+
+def fun_l2_n379()
+ fun_l3_n799
+end
+
+def fun_l2_n380()
+ fun_l3_n538
+end
+
+def fun_l2_n381()
+ fun_l3_n24
+end
+
+def fun_l2_n382()
+ fun_l3_n726
+end
+
+def fun_l2_n383()
+ fun_l3_n213
+end
+
+def fun_l2_n384()
+ fun_l3_n15
+end
+
+def fun_l2_n385()
+ fun_l3_n915
+end
+
+def fun_l2_n386()
+ fun_l3_n357
+end
+
+def fun_l2_n387()
+ fun_l3_n343
+end
+
+def fun_l2_n388()
+ fun_l3_n258
+end
+
+def fun_l2_n389()
+ fun_l3_n396
+end
+
+def fun_l2_n390()
+ fun_l3_n478
+end
+
+def fun_l2_n391()
+ fun_l3_n122
+end
+
+def fun_l2_n392()
+ fun_l3_n925
+end
+
+def fun_l2_n393()
+ fun_l3_n6
+end
+
+def fun_l2_n394()
+ fun_l3_n251
+end
+
+def fun_l2_n395()
+ fun_l3_n21
+end
+
+def fun_l2_n396()
+ fun_l3_n781
+end
+
+def fun_l2_n397()
+ fun_l3_n765
+end
+
+def fun_l2_n398()
+ fun_l3_n574
+end
+
+def fun_l2_n399()
+ fun_l3_n347
+end
+
+def fun_l2_n400()
+ fun_l3_n409
+end
+
+def fun_l2_n401()
+ fun_l3_n343
+end
+
+def fun_l2_n402()
+ fun_l3_n580
+end
+
+def fun_l2_n403()
+ fun_l3_n878
+end
+
+def fun_l2_n404()
+ fun_l3_n150
+end
+
+def fun_l2_n405()
+ fun_l3_n900
+end
+
+def fun_l2_n406()
+ fun_l3_n19
+end
+
+def fun_l2_n407()
+ fun_l3_n671
+end
+
+def fun_l2_n408()
+ fun_l3_n714
+end
+
+def fun_l2_n409()
+ fun_l3_n865
+end
+
+def fun_l2_n410()
+ fun_l3_n634
+end
+
+def fun_l2_n411()
+ fun_l3_n780
+end
+
+def fun_l2_n412()
+ fun_l3_n404
+end
+
+def fun_l2_n413()
+ fun_l3_n506
+end
+
+def fun_l2_n414()
+ fun_l3_n503
+end
+
+def fun_l2_n415()
+ fun_l3_n120
+end
+
+def fun_l2_n416()
+ fun_l3_n603
+end
+
+def fun_l2_n417()
+ fun_l3_n263
+end
+
+def fun_l2_n418()
+ fun_l3_n142
+end
+
+def fun_l2_n419()
+ fun_l3_n174
+end
+
+def fun_l2_n420()
+ fun_l3_n474
+end
+
+def fun_l2_n421()
+ fun_l3_n980
+end
+
+def fun_l2_n422()
+ fun_l3_n302
+end
+
+def fun_l2_n423()
+ fun_l3_n850
+end
+
+def fun_l2_n424()
+ fun_l3_n395
+end
+
+def fun_l2_n425()
+ fun_l3_n49
+end
+
+def fun_l2_n426()
+ fun_l3_n732
+end
+
+def fun_l2_n427()
+ fun_l3_n473
+end
+
+def fun_l2_n428()
+ fun_l3_n906
+end
+
+def fun_l2_n429()
+ fun_l3_n120
+end
+
+def fun_l2_n430()
+ fun_l3_n818
+end
+
+def fun_l2_n431()
+ fun_l3_n177
+end
+
+def fun_l2_n432()
+ fun_l3_n47
+end
+
+def fun_l2_n433()
+ fun_l3_n423
+end
+
+def fun_l2_n434()
+ fun_l3_n435
+end
+
+def fun_l2_n435()
+ fun_l3_n748
+end
+
+def fun_l2_n436()
+ fun_l3_n953
+end
+
+def fun_l2_n437()
+ fun_l3_n78
+end
+
+def fun_l2_n438()
+ fun_l3_n184
+end
+
+def fun_l2_n439()
+ fun_l3_n533
+end
+
+def fun_l2_n440()
+ fun_l3_n184
+end
+
+def fun_l2_n441()
+ fun_l3_n698
+end
+
+def fun_l2_n442()
+ fun_l3_n752
+end
+
+def fun_l2_n443()
+ fun_l3_n448
+end
+
+def fun_l2_n444()
+ fun_l3_n307
+end
+
+def fun_l2_n445()
+ fun_l3_n333
+end
+
+def fun_l2_n446()
+ fun_l3_n237
+end
+
+def fun_l2_n447()
+ fun_l3_n550
+end
+
+def fun_l2_n448()
+ fun_l3_n951
+end
+
+def fun_l2_n449()
+ fun_l3_n341
+end
+
+def fun_l2_n450()
+ fun_l3_n188
+end
+
+def fun_l2_n451()
+ fun_l3_n505
+end
+
+def fun_l2_n452()
+ fun_l3_n779
+end
+
+def fun_l2_n453()
+ fun_l3_n368
+end
+
+def fun_l2_n454()
+ fun_l3_n191
+end
+
+def fun_l2_n455()
+ fun_l3_n952
+end
+
+def fun_l2_n456()
+ fun_l3_n472
+end
+
+def fun_l2_n457()
+ fun_l3_n294
+end
+
+def fun_l2_n458()
+ fun_l3_n280
+end
+
+def fun_l2_n459()
+ fun_l3_n794
+end
+
+def fun_l2_n460()
+ fun_l3_n780
+end
+
+def fun_l2_n461()
+ fun_l3_n527
+end
+
+def fun_l2_n462()
+ fun_l3_n129
+end
+
+def fun_l2_n463()
+ fun_l3_n365
+end
+
+def fun_l2_n464()
+ fun_l3_n898
+end
+
+def fun_l2_n465()
+ fun_l3_n932
+end
+
+def fun_l2_n466()
+ fun_l3_n616
+end
+
+def fun_l2_n467()
+ fun_l3_n828
+end
+
+def fun_l2_n468()
+ fun_l3_n660
+end
+
+def fun_l2_n469()
+ fun_l3_n255
+end
+
+def fun_l2_n470()
+ fun_l3_n845
+end
+
+def fun_l2_n471()
+ fun_l3_n347
+end
+
+def fun_l2_n472()
+ fun_l3_n154
+end
+
+def fun_l2_n473()
+ fun_l3_n349
+end
+
+def fun_l2_n474()
+ fun_l3_n276
+end
+
+def fun_l2_n475()
+ fun_l3_n962
+end
+
+def fun_l2_n476()
+ fun_l3_n195
+end
+
+def fun_l2_n477()
+ fun_l3_n648
+end
+
+def fun_l2_n478()
+ fun_l3_n692
+end
+
+def fun_l2_n479()
+ fun_l3_n294
+end
+
+def fun_l2_n480()
+ fun_l3_n144
+end
+
+def fun_l2_n481()
+ fun_l3_n702
+end
+
+def fun_l2_n482()
+ fun_l3_n110
+end
+
+def fun_l2_n483()
+ fun_l3_n169
+end
+
+def fun_l2_n484()
+ fun_l3_n140
+end
+
+def fun_l2_n485()
+ fun_l3_n614
+end
+
+def fun_l2_n486()
+ fun_l3_n309
+end
+
+def fun_l2_n487()
+ fun_l3_n792
+end
+
+def fun_l2_n488()
+ fun_l3_n465
+end
+
+def fun_l2_n489()
+ fun_l3_n892
+end
+
+def fun_l2_n490()
+ fun_l3_n205
+end
+
+def fun_l2_n491()
+ fun_l3_n267
+end
+
+def fun_l2_n492()
+ fun_l3_n743
+end
+
+def fun_l2_n493()
+ fun_l3_n669
+end
+
+def fun_l2_n494()
+ fun_l3_n882
+end
+
+def fun_l2_n495()
+ fun_l3_n654
+end
+
+def fun_l2_n496()
+ fun_l3_n885
+end
+
+def fun_l2_n497()
+ fun_l3_n955
+end
+
+def fun_l2_n498()
+ fun_l3_n251
+end
+
+def fun_l2_n499()
+ fun_l3_n521
+end
+
+def fun_l2_n500()
+ fun_l3_n484
+end
+
+def fun_l2_n501()
+ fun_l3_n525
+end
+
+def fun_l2_n502()
+ fun_l3_n493
+end
+
+def fun_l2_n503()
+ fun_l3_n161
+end
+
+def fun_l2_n504()
+ fun_l3_n447
+end
+
+def fun_l2_n505()
+ fun_l3_n339
+end
+
+def fun_l2_n506()
+ fun_l3_n946
+end
+
+def fun_l2_n507()
+ fun_l3_n564
+end
+
+def fun_l2_n508()
+ fun_l3_n586
+end
+
+def fun_l2_n509()
+ fun_l3_n345
+end
+
+def fun_l2_n510()
+ fun_l3_n814
+end
+
+def fun_l2_n511()
+ fun_l3_n946
+end
+
+def fun_l2_n512()
+ fun_l3_n629
+end
+
+def fun_l2_n513()
+ fun_l3_n726
+end
+
+def fun_l2_n514()
+ fun_l3_n91
+end
+
+def fun_l2_n515()
+ fun_l3_n393
+end
+
+def fun_l2_n516()
+ fun_l3_n620
+end
+
+def fun_l2_n517()
+ fun_l3_n907
+end
+
+def fun_l2_n518()
+ fun_l3_n911
+end
+
+def fun_l2_n519()
+ fun_l3_n361
+end
+
+def fun_l2_n520()
+ fun_l3_n420
+end
+
+def fun_l2_n521()
+ fun_l3_n479
+end
+
+def fun_l2_n522()
+ fun_l3_n686
+end
+
+def fun_l2_n523()
+ fun_l3_n888
+end
+
+def fun_l2_n524()
+ fun_l3_n141
+end
+
+def fun_l2_n525()
+ fun_l3_n830
+end
+
+def fun_l2_n526()
+ fun_l3_n681
+end
+
+def fun_l2_n527()
+ fun_l3_n58
+end
+
+def fun_l2_n528()
+ fun_l3_n835
+end
+
+def fun_l2_n529()
+ fun_l3_n390
+end
+
+def fun_l2_n530()
+ fun_l3_n930
+end
+
+def fun_l2_n531()
+ fun_l3_n569
+end
+
+def fun_l2_n532()
+ fun_l3_n943
+end
+
+def fun_l2_n533()
+ fun_l3_n888
+end
+
+def fun_l2_n534()
+ fun_l3_n220
+end
+
+def fun_l2_n535()
+ fun_l3_n809
+end
+
+def fun_l2_n536()
+ fun_l3_n382
+end
+
+def fun_l2_n537()
+ fun_l3_n356
+end
+
+def fun_l2_n538()
+ fun_l3_n912
+end
+
+def fun_l2_n539()
+ fun_l3_n151
+end
+
+def fun_l2_n540()
+ fun_l3_n740
+end
+
+def fun_l2_n541()
+ fun_l3_n925
+end
+
+def fun_l2_n542()
+ fun_l3_n776
+end
+
+def fun_l2_n543()
+ fun_l3_n4
+end
+
+def fun_l2_n544()
+ fun_l3_n549
+end
+
+def fun_l2_n545()
+ fun_l3_n220
+end
+
+def fun_l2_n546()
+ fun_l3_n932
+end
+
+def fun_l2_n547()
+ fun_l3_n267
+end
+
+def fun_l2_n548()
+ fun_l3_n646
+end
+
+def fun_l2_n549()
+ fun_l3_n217
+end
+
+def fun_l2_n550()
+ fun_l3_n217
+end
+
+def fun_l2_n551()
+ fun_l3_n197
+end
+
+def fun_l2_n552()
+ fun_l3_n419
+end
+
+def fun_l2_n553()
+ fun_l3_n232
+end
+
+def fun_l2_n554()
+ fun_l3_n327
+end
+
+def fun_l2_n555()
+ fun_l3_n201
+end
+
+def fun_l2_n556()
+ fun_l3_n567
+end
+
+def fun_l2_n557()
+ fun_l3_n870
+end
+
+def fun_l2_n558()
+ fun_l3_n222
+end
+
+def fun_l2_n559()
+ fun_l3_n792
+end
+
+def fun_l2_n560()
+ fun_l3_n157
+end
+
+def fun_l2_n561()
+ fun_l3_n870
+end
+
+def fun_l2_n562()
+ fun_l3_n564
+end
+
+def fun_l2_n563()
+ fun_l3_n571
+end
+
+def fun_l2_n564()
+ fun_l3_n211
+end
+
+def fun_l2_n565()
+ fun_l3_n657
+end
+
+def fun_l2_n566()
+ fun_l3_n869
+end
+
+def fun_l2_n567()
+ fun_l3_n288
+end
+
+def fun_l2_n568()
+ fun_l3_n736
+end
+
+def fun_l2_n569()
+ fun_l3_n273
+end
+
+def fun_l2_n570()
+ fun_l3_n194
+end
+
+def fun_l2_n571()
+ fun_l3_n435
+end
+
+def fun_l2_n572()
+ fun_l3_n775
+end
+
+def fun_l2_n573()
+ fun_l3_n342
+end
+
+def fun_l2_n574()
+ fun_l3_n843
+end
+
+def fun_l2_n575()
+ fun_l3_n585
+end
+
+def fun_l2_n576()
+ fun_l3_n518
+end
+
+def fun_l2_n577()
+ fun_l3_n524
+end
+
+def fun_l2_n578()
+ fun_l3_n457
+end
+
+def fun_l2_n579()
+ fun_l3_n905
+end
+
+def fun_l2_n580()
+ fun_l3_n346
+end
+
+def fun_l2_n581()
+ fun_l3_n412
+end
+
+def fun_l2_n582()
+ fun_l3_n970
+end
+
+def fun_l2_n583()
+ fun_l3_n648
+end
+
+def fun_l2_n584()
+ fun_l3_n870
+end
+
+def fun_l2_n585()
+ fun_l3_n783
+end
+
+def fun_l2_n586()
+ fun_l3_n856
+end
+
+def fun_l2_n587()
+ fun_l3_n708
+end
+
+def fun_l2_n588()
+ fun_l3_n473
+end
+
+def fun_l2_n589()
+ fun_l3_n277
+end
+
+def fun_l2_n590()
+ fun_l3_n112
+end
+
+def fun_l2_n591()
+ fun_l3_n785
+end
+
+def fun_l2_n592()
+ fun_l3_n283
+end
+
+def fun_l2_n593()
+ fun_l3_n720
+end
+
+def fun_l2_n594()
+ fun_l3_n195
+end
+
+def fun_l2_n595()
+ fun_l3_n923
+end
+
+def fun_l2_n596()
+ fun_l3_n306
+end
+
+def fun_l2_n597()
+ fun_l3_n108
+end
+
+def fun_l2_n598()
+ fun_l3_n615
+end
+
+def fun_l2_n599()
+ fun_l3_n135
+end
+
+def fun_l2_n600()
+ fun_l3_n710
+end
+
+def fun_l2_n601()
+ fun_l3_n722
+end
+
+def fun_l2_n602()
+ fun_l3_n943
+end
+
+def fun_l2_n603()
+ fun_l3_n626
+end
+
+def fun_l2_n604()
+ fun_l3_n702
+end
+
+def fun_l2_n605()
+ fun_l3_n812
+end
+
+def fun_l2_n606()
+ fun_l3_n551
+end
+
+def fun_l2_n607()
+ fun_l3_n497
+end
+
+def fun_l2_n608()
+ fun_l3_n123
+end
+
+def fun_l2_n609()
+ fun_l3_n302
+end
+
+def fun_l2_n610()
+ fun_l3_n850
+end
+
+def fun_l2_n611()
+ fun_l3_n327
+end
+
+def fun_l2_n612()
+ fun_l3_n529
+end
+
+def fun_l2_n613()
+ fun_l3_n441
+end
+
+def fun_l2_n614()
+ fun_l3_n26
+end
+
+def fun_l2_n615()
+ fun_l3_n275
+end
+
+def fun_l2_n616()
+ fun_l3_n211
+end
+
+def fun_l2_n617()
+ fun_l3_n253
+end
+
+def fun_l2_n618()
+ fun_l3_n767
+end
+
+def fun_l2_n619()
+ fun_l3_n601
+end
+
+def fun_l2_n620()
+ fun_l3_n350
+end
+
+def fun_l2_n621()
+ fun_l3_n407
+end
+
+def fun_l2_n622()
+ fun_l3_n12
+end
+
+def fun_l2_n623()
+ fun_l3_n378
+end
+
+def fun_l2_n624()
+ fun_l3_n159
+end
+
+def fun_l2_n625()
+ fun_l3_n521
+end
+
+def fun_l2_n626()
+ fun_l3_n657
+end
+
+def fun_l2_n627()
+ fun_l3_n997
+end
+
+def fun_l2_n628()
+ fun_l3_n504
+end
+
+def fun_l2_n629()
+ fun_l3_n177
+end
+
+def fun_l2_n630()
+ fun_l3_n352
+end
+
+def fun_l2_n631()
+ fun_l3_n579
+end
+
+def fun_l2_n632()
+ fun_l3_n607
+end
+
+def fun_l2_n633()
+ fun_l3_n430
+end
+
+def fun_l2_n634()
+ fun_l3_n437
+end
+
+def fun_l2_n635()
+ fun_l3_n495
+end
+
+def fun_l2_n636()
+ fun_l3_n247
+end
+
+def fun_l2_n637()
+ fun_l3_n68
+end
+
+def fun_l2_n638()
+ fun_l3_n815
+end
+
+def fun_l2_n639()
+ fun_l3_n477
+end
+
+def fun_l2_n640()
+ fun_l3_n894
+end
+
+def fun_l2_n641()
+ fun_l3_n804
+end
+
+def fun_l2_n642()
+ fun_l3_n198
+end
+
+def fun_l2_n643()
+ fun_l3_n676
+end
+
+def fun_l2_n644()
+ fun_l3_n306
+end
+
+def fun_l2_n645()
+ fun_l3_n545
+end
+
+def fun_l2_n646()
+ fun_l3_n519
+end
+
+def fun_l2_n647()
+ fun_l3_n328
+end
+
+def fun_l2_n648()
+ fun_l3_n654
+end
+
+def fun_l2_n649()
+ fun_l3_n879
+end
+
+def fun_l2_n650()
+ fun_l3_n224
+end
+
+def fun_l2_n651()
+ fun_l3_n826
+end
+
+def fun_l2_n652()
+ fun_l3_n976
+end
+
+def fun_l2_n653()
+ fun_l3_n287
+end
+
+def fun_l2_n654()
+ fun_l3_n471
+end
+
+def fun_l2_n655()
+ fun_l3_n738
+end
+
+def fun_l2_n656()
+ fun_l3_n545
+end
+
+def fun_l2_n657()
+ fun_l3_n819
+end
+
+def fun_l2_n658()
+ fun_l3_n866
+end
+
+def fun_l2_n659()
+ fun_l3_n215
+end
+
+def fun_l2_n660()
+ fun_l3_n656
+end
+
+def fun_l2_n661()
+ fun_l3_n519
+end
+
+def fun_l2_n662()
+ fun_l3_n812
+end
+
+def fun_l2_n663()
+ fun_l3_n241
+end
+
+def fun_l2_n664()
+ fun_l3_n245
+end
+
+def fun_l2_n665()
+ fun_l3_n60
+end
+
+def fun_l2_n666()
+ fun_l3_n516
+end
+
+def fun_l2_n667()
+ fun_l3_n264
+end
+
+def fun_l2_n668()
+ fun_l3_n254
+end
+
+def fun_l2_n669()
+ fun_l3_n952
+end
+
+def fun_l2_n670()
+ fun_l3_n928
+end
+
+def fun_l2_n671()
+ fun_l3_n718
+end
+
+def fun_l2_n672()
+ fun_l3_n937
+end
+
+def fun_l2_n673()
+ fun_l3_n549
+end
+
+def fun_l2_n674()
+ fun_l3_n138
+end
+
+def fun_l2_n675()
+ fun_l3_n441
+end
+
+def fun_l2_n676()
+ fun_l3_n641
+end
+
+def fun_l2_n677()
+ fun_l3_n611
+end
+
+def fun_l2_n678()
+ fun_l3_n711
+end
+
+def fun_l2_n679()
+ fun_l3_n60
+end
+
+def fun_l2_n680()
+ fun_l3_n894
+end
+
+def fun_l2_n681()
+ fun_l3_n957
+end
+
+def fun_l2_n682()
+ fun_l3_n516
+end
+
+def fun_l2_n683()
+ fun_l3_n348
+end
+
+def fun_l2_n684()
+ fun_l3_n600
+end
+
+def fun_l2_n685()
+ fun_l3_n955
+end
+
+def fun_l2_n686()
+ fun_l3_n842
+end
+
+def fun_l2_n687()
+ fun_l3_n126
+end
+
+def fun_l2_n688()
+ fun_l3_n739
+end
+
+def fun_l2_n689()
+ fun_l3_n435
+end
+
+def fun_l2_n690()
+ fun_l3_n445
+end
+
+def fun_l2_n691()
+ fun_l3_n973
+end
+
+def fun_l2_n692()
+ fun_l3_n54
+end
+
+def fun_l2_n693()
+ fun_l3_n629
+end
+
+def fun_l2_n694()
+ fun_l3_n83
+end
+
+def fun_l2_n695()
+ fun_l3_n887
+end
+
+def fun_l2_n696()
+ fun_l3_n552
+end
+
+def fun_l2_n697()
+ fun_l3_n263
+end
+
+def fun_l2_n698()
+ fun_l3_n532
+end
+
+def fun_l2_n699()
+ fun_l3_n462
+end
+
+def fun_l2_n700()
+ fun_l3_n319
+end
+
+def fun_l2_n701()
+ fun_l3_n464
+end
+
+def fun_l2_n702()
+ fun_l3_n340
+end
+
+def fun_l2_n703()
+ fun_l3_n188
+end
+
+def fun_l2_n704()
+ fun_l3_n157
+end
+
+def fun_l2_n705()
+ fun_l3_n345
+end
+
+def fun_l2_n706()
+ fun_l3_n637
+end
+
+def fun_l2_n707()
+ fun_l3_n157
+end
+
+def fun_l2_n708()
+ fun_l3_n270
+end
+
+def fun_l2_n709()
+ fun_l3_n13
+end
+
+def fun_l2_n710()
+ fun_l3_n360
+end
+
+def fun_l2_n711()
+ fun_l3_n890
+end
+
+def fun_l2_n712()
+ fun_l3_n539
+end
+
+def fun_l2_n713()
+ fun_l3_n582
+end
+
+def fun_l2_n714()
+ fun_l3_n466
+end
+
+def fun_l2_n715()
+ fun_l3_n623
+end
+
+def fun_l2_n716()
+ fun_l3_n995
+end
+
+def fun_l2_n717()
+ fun_l3_n810
+end
+
+def fun_l2_n718()
+ fun_l3_n95
+end
+
+def fun_l2_n719()
+ fun_l3_n103
+end
+
+def fun_l2_n720()
+ fun_l3_n755
+end
+
+def fun_l2_n721()
+ fun_l3_n858
+end
+
+def fun_l2_n722()
+ fun_l3_n519
+end
+
+def fun_l2_n723()
+ fun_l3_n489
+end
+
+def fun_l2_n724()
+ fun_l3_n578
+end
+
+def fun_l2_n725()
+ fun_l3_n176
+end
+
+def fun_l2_n726()
+ fun_l3_n58
+end
+
+def fun_l2_n727()
+ fun_l3_n817
+end
+
+def fun_l2_n728()
+ fun_l3_n612
+end
+
+def fun_l2_n729()
+ fun_l3_n510
+end
+
+def fun_l2_n730()
+ fun_l3_n934
+end
+
+def fun_l2_n731()
+ fun_l3_n691
+end
+
+def fun_l2_n732()
+ fun_l3_n697
+end
+
+def fun_l2_n733()
+ fun_l3_n667
+end
+
+def fun_l2_n734()
+ fun_l3_n49
+end
+
+def fun_l2_n735()
+ fun_l3_n113
+end
+
+def fun_l2_n736()
+ fun_l3_n157
+end
+
+def fun_l2_n737()
+ fun_l3_n756
+end
+
+def fun_l2_n738()
+ fun_l3_n888
+end
+
+def fun_l2_n739()
+ fun_l3_n847
+end
+
+def fun_l2_n740()
+ fun_l3_n693
+end
+
+def fun_l2_n741()
+ fun_l3_n116
+end
+
+def fun_l2_n742()
+ fun_l3_n95
+end
+
+def fun_l2_n743()
+ fun_l3_n662
+end
+
+def fun_l2_n744()
+ fun_l3_n744
+end
+
+def fun_l2_n745()
+ fun_l3_n800
+end
+
+def fun_l2_n746()
+ fun_l3_n732
+end
+
+def fun_l2_n747()
+ fun_l3_n278
+end
+
+def fun_l2_n748()
+ fun_l3_n441
+end
+
+def fun_l2_n749()
+ fun_l3_n838
+end
+
+def fun_l2_n750()
+ fun_l3_n616
+end
+
+def fun_l2_n751()
+ fun_l3_n438
+end
+
+def fun_l2_n752()
+ fun_l3_n271
+end
+
+def fun_l2_n753()
+ fun_l3_n527
+end
+
+def fun_l2_n754()
+ fun_l3_n568
+end
+
+def fun_l2_n755()
+ fun_l3_n584
+end
+
+def fun_l2_n756()
+ fun_l3_n514
+end
+
+def fun_l2_n757()
+ fun_l3_n599
+end
+
+def fun_l2_n758()
+ fun_l3_n878
+end
+
+def fun_l2_n759()
+ fun_l3_n314
+end
+
+def fun_l2_n760()
+ fun_l3_n277
+end
+
+def fun_l2_n761()
+ fun_l3_n296
+end
+
+def fun_l2_n762()
+ fun_l3_n729
+end
+
+def fun_l2_n763()
+ fun_l3_n192
+end
+
+def fun_l2_n764()
+ fun_l3_n549
+end
+
+def fun_l2_n765()
+ fun_l3_n304
+end
+
+def fun_l2_n766()
+ fun_l3_n133
+end
+
+def fun_l2_n767()
+ fun_l3_n678
+end
+
+def fun_l2_n768()
+ fun_l3_n608
+end
+
+def fun_l2_n769()
+ fun_l3_n830
+end
+
+def fun_l2_n770()
+ fun_l3_n419
+end
+
+def fun_l2_n771()
+ fun_l3_n174
+end
+
+def fun_l2_n772()
+ fun_l3_n806
+end
+
+def fun_l2_n773()
+ fun_l3_n257
+end
+
+def fun_l2_n774()
+ fun_l3_n203
+end
+
+def fun_l2_n775()
+ fun_l3_n572
+end
+
+def fun_l2_n776()
+ fun_l3_n665
+end
+
+def fun_l2_n777()
+ fun_l3_n417
+end
+
+def fun_l2_n778()
+ fun_l3_n44
+end
+
+def fun_l2_n779()
+ fun_l3_n202
+end
+
+def fun_l2_n780()
+ fun_l3_n343
+end
+
+def fun_l2_n781()
+ fun_l3_n343
+end
+
+def fun_l2_n782()
+ fun_l3_n57
+end
+
+def fun_l2_n783()
+ fun_l3_n836
+end
+
+def fun_l2_n784()
+ fun_l3_n634
+end
+
+def fun_l2_n785()
+ fun_l3_n788
+end
+
+def fun_l2_n786()
+ fun_l3_n541
+end
+
+def fun_l2_n787()
+ fun_l3_n906
+end
+
+def fun_l2_n788()
+ fun_l3_n12
+end
+
+def fun_l2_n789()
+ fun_l3_n682
+end
+
+def fun_l2_n790()
+ fun_l3_n80
+end
+
+def fun_l2_n791()
+ fun_l3_n594
+end
+
+def fun_l2_n792()
+ fun_l3_n120
+end
+
+def fun_l2_n793()
+ fun_l3_n551
+end
+
+def fun_l2_n794()
+ fun_l3_n164
+end
+
+def fun_l2_n795()
+ fun_l3_n817
+end
+
+def fun_l2_n796()
+ fun_l3_n611
+end
+
+def fun_l2_n797()
+ fun_l3_n878
+end
+
+def fun_l2_n798()
+ fun_l3_n235
+end
+
+def fun_l2_n799()
+ fun_l3_n210
+end
+
+def fun_l2_n800()
+ fun_l3_n343
+end
+
+def fun_l2_n801()
+ fun_l3_n445
+end
+
+def fun_l2_n802()
+ fun_l3_n549
+end
+
+def fun_l2_n803()
+ fun_l3_n992
+end
+
+def fun_l2_n804()
+ fun_l3_n751
+end
+
+def fun_l2_n805()
+ fun_l3_n514
+end
+
+def fun_l2_n806()
+ fun_l3_n593
+end
+
+def fun_l2_n807()
+ fun_l3_n876
+end
+
+def fun_l2_n808()
+ fun_l3_n612
+end
+
+def fun_l2_n809()
+ fun_l3_n184
+end
+
+def fun_l2_n810()
+ fun_l3_n34
+end
+
+def fun_l2_n811()
+ fun_l3_n703
+end
+
+def fun_l2_n812()
+ fun_l3_n296
+end
+
+def fun_l2_n813()
+ fun_l3_n815
+end
+
+def fun_l2_n814()
+ fun_l3_n417
+end
+
+def fun_l2_n815()
+ fun_l3_n230
+end
+
+def fun_l2_n816()
+ fun_l3_n140
+end
+
+def fun_l2_n817()
+ fun_l3_n772
+end
+
+def fun_l2_n818()
+ fun_l3_n671
+end
+
+def fun_l2_n819()
+ fun_l3_n670
+end
+
+def fun_l2_n820()
+ fun_l3_n286
+end
+
+def fun_l2_n821()
+ fun_l3_n406
+end
+
+def fun_l2_n822()
+ fun_l3_n757
+end
+
+def fun_l2_n823()
+ fun_l3_n995
+end
+
+def fun_l2_n824()
+ fun_l3_n816
+end
+
+def fun_l2_n825()
+ fun_l3_n624
+end
+
+def fun_l2_n826()
+ fun_l3_n625
+end
+
+def fun_l2_n827()
+ fun_l3_n559
+end
+
+def fun_l2_n828()
+ fun_l3_n224
+end
+
+def fun_l2_n829()
+ fun_l3_n437
+end
+
+def fun_l2_n830()
+ fun_l3_n745
+end
+
+def fun_l2_n831()
+ fun_l3_n289
+end
+
+def fun_l2_n832()
+ fun_l3_n555
+end
+
+def fun_l2_n833()
+ fun_l3_n477
+end
+
+def fun_l2_n834()
+ fun_l3_n545
+end
+
+def fun_l2_n835()
+ fun_l3_n87
+end
+
+def fun_l2_n836()
+ fun_l3_n100
+end
+
+def fun_l2_n837()
+ fun_l3_n796
+end
+
+def fun_l2_n838()
+ fun_l3_n166
+end
+
+def fun_l2_n839()
+ fun_l3_n91
+end
+
+def fun_l2_n840()
+ fun_l3_n325
+end
+
+def fun_l2_n841()
+ fun_l3_n717
+end
+
+def fun_l2_n842()
+ fun_l3_n522
+end
+
+def fun_l2_n843()
+ fun_l3_n560
+end
+
+def fun_l2_n844()
+ fun_l3_n811
+end
+
+def fun_l2_n845()
+ fun_l3_n451
+end
+
+def fun_l2_n846()
+ fun_l3_n45
+end
+
+def fun_l2_n847()
+ fun_l3_n410
+end
+
+def fun_l2_n848()
+ fun_l3_n976
+end
+
+def fun_l2_n849()
+ fun_l3_n873
+end
+
+def fun_l2_n850()
+ fun_l3_n302
+end
+
+def fun_l2_n851()
+ fun_l3_n346
+end
+
+def fun_l2_n852()
+ fun_l3_n314
+end
+
+def fun_l2_n853()
+ fun_l3_n829
+end
+
+def fun_l2_n854()
+ fun_l3_n259
+end
+
+def fun_l2_n855()
+ fun_l3_n799
+end
+
+def fun_l2_n856()
+ fun_l3_n451
+end
+
+def fun_l2_n857()
+ fun_l3_n154
+end
+
+def fun_l2_n858()
+ fun_l3_n867
+end
+
+def fun_l2_n859()
+ fun_l3_n806
+end
+
+def fun_l2_n860()
+ fun_l3_n138
+end
+
+def fun_l2_n861()
+ fun_l3_n508
+end
+
+def fun_l2_n862()
+ fun_l3_n627
+end
+
+def fun_l2_n863()
+ fun_l3_n931
+end
+
+def fun_l2_n864()
+ fun_l3_n95
+end
+
+def fun_l2_n865()
+ fun_l3_n533
+end
+
+def fun_l2_n866()
+ fun_l3_n425
+end
+
+def fun_l2_n867()
+ fun_l3_n996
+end
+
+def fun_l2_n868()
+ fun_l3_n331
+end
+
+def fun_l2_n869()
+ fun_l3_n126
+end
+
+def fun_l2_n870()
+ fun_l3_n848
+end
+
+def fun_l2_n871()
+ fun_l3_n174
+end
+
+def fun_l2_n872()
+ fun_l3_n867
+end
+
+def fun_l2_n873()
+ fun_l3_n800
+end
+
+def fun_l2_n874()
+ fun_l3_n526
+end
+
+def fun_l2_n875()
+ fun_l3_n250
+end
+
+def fun_l2_n876()
+ fun_l3_n896
+end
+
+def fun_l2_n877()
+ fun_l3_n229
+end
+
+def fun_l2_n878()
+ fun_l3_n290
+end
+
+def fun_l2_n879()
+ fun_l3_n130
+end
+
+def fun_l2_n880()
+ fun_l3_n437
+end
+
+def fun_l2_n881()
+ fun_l3_n654
+end
+
+def fun_l2_n882()
+ fun_l3_n93
+end
+
+def fun_l2_n883()
+ fun_l3_n632
+end
+
+def fun_l2_n884()
+ fun_l3_n772
+end
+
+def fun_l2_n885()
+ fun_l3_n597
+end
+
+def fun_l2_n886()
+ fun_l3_n668
+end
+
+def fun_l2_n887()
+ fun_l3_n969
+end
+
+def fun_l2_n888()
+ fun_l3_n908
+end
+
+def fun_l2_n889()
+ fun_l3_n10
+end
+
+def fun_l2_n890()
+ fun_l3_n676
+end
+
+def fun_l2_n891()
+ fun_l3_n729
+end
+
+def fun_l2_n892()
+ fun_l3_n659
+end
+
+def fun_l2_n893()
+ fun_l3_n121
+end
+
+def fun_l2_n894()
+ fun_l3_n543
+end
+
+def fun_l2_n895()
+ fun_l3_n931
+end
+
+def fun_l2_n896()
+ fun_l3_n64
+end
+
+def fun_l2_n897()
+ fun_l3_n500
+end
+
+def fun_l2_n898()
+ fun_l3_n664
+end
+
+def fun_l2_n899()
+ fun_l3_n929
+end
+
+def fun_l2_n900()
+ fun_l3_n772
+end
+
+def fun_l2_n901()
+ fun_l3_n309
+end
+
+def fun_l2_n902()
+ fun_l3_n284
+end
+
+def fun_l2_n903()
+ fun_l3_n304
+end
+
+def fun_l2_n904()
+ fun_l3_n18
+end
+
+def fun_l2_n905()
+ fun_l3_n715
+end
+
+def fun_l2_n906()
+ fun_l3_n469
+end
+
+def fun_l2_n907()
+ fun_l3_n524
+end
+
+def fun_l2_n908()
+ fun_l3_n476
+end
+
+def fun_l2_n909()
+ fun_l3_n90
+end
+
+def fun_l2_n910()
+ fun_l3_n471
+end
+
+def fun_l2_n911()
+ fun_l3_n885
+end
+
+def fun_l2_n912()
+ fun_l3_n696
+end
+
+def fun_l2_n913()
+ fun_l3_n393
+end
+
+def fun_l2_n914()
+ fun_l3_n987
+end
+
+def fun_l2_n915()
+ fun_l3_n830
+end
+
+def fun_l2_n916()
+ fun_l3_n684
+end
+
+def fun_l2_n917()
+ fun_l3_n379
+end
+
+def fun_l2_n918()
+ fun_l3_n237
+end
+
+def fun_l2_n919()
+ fun_l3_n115
+end
+
+def fun_l2_n920()
+ fun_l3_n499
+end
+
+def fun_l2_n921()
+ fun_l3_n88
+end
+
+def fun_l2_n922()
+ fun_l3_n563
+end
+
+def fun_l2_n923()
+ fun_l3_n280
+end
+
+def fun_l2_n924()
+ fun_l3_n400
+end
+
+def fun_l2_n925()
+ fun_l3_n750
+end
+
+def fun_l2_n926()
+ fun_l3_n429
+end
+
+def fun_l2_n927()
+ fun_l3_n669
+end
+
+def fun_l2_n928()
+ fun_l3_n275
+end
+
+def fun_l2_n929()
+ fun_l3_n468
+end
+
+def fun_l2_n930()
+ fun_l3_n617
+end
+
+def fun_l2_n931()
+ fun_l3_n291
+end
+
+def fun_l2_n932()
+ fun_l3_n870
+end
+
+def fun_l2_n933()
+ fun_l3_n169
+end
+
+def fun_l2_n934()
+ fun_l3_n603
+end
+
+def fun_l2_n935()
+ fun_l3_n669
+end
+
+def fun_l2_n936()
+ fun_l3_n738
+end
+
+def fun_l2_n937()
+ fun_l3_n417
+end
+
+def fun_l2_n938()
+ fun_l3_n339
+end
+
+def fun_l2_n939()
+ fun_l3_n660
+end
+
+def fun_l2_n940()
+ fun_l3_n253
+end
+
+def fun_l2_n941()
+ fun_l3_n598
+end
+
+def fun_l2_n942()
+ fun_l3_n369
+end
+
+def fun_l2_n943()
+ fun_l3_n453
+end
+
+def fun_l2_n944()
+ fun_l3_n535
+end
+
+def fun_l2_n945()
+ fun_l3_n492
+end
+
+def fun_l2_n946()
+ fun_l3_n950
+end
+
+def fun_l2_n947()
+ fun_l3_n939
+end
+
+def fun_l2_n948()
+ fun_l3_n607
+end
+
+def fun_l2_n949()
+ fun_l3_n440
+end
+
+def fun_l2_n950()
+ fun_l3_n615
+end
+
+def fun_l2_n951()
+ fun_l3_n690
+end
+
+def fun_l2_n952()
+ fun_l3_n205
+end
+
+def fun_l2_n953()
+ fun_l3_n831
+end
+
+def fun_l2_n954()
+ fun_l3_n56
+end
+
+def fun_l2_n955()
+ fun_l3_n695
+end
+
+def fun_l2_n956()
+ fun_l3_n358
+end
+
+def fun_l2_n957()
+ fun_l3_n2
+end
+
+def fun_l2_n958()
+ fun_l3_n663
+end
+
+def fun_l2_n959()
+ fun_l3_n829
+end
+
+def fun_l2_n960()
+ fun_l3_n627
+end
+
+def fun_l2_n961()
+ fun_l3_n43
+end
+
+def fun_l2_n962()
+ fun_l3_n293
+end
+
+def fun_l2_n963()
+ fun_l3_n982
+end
+
+def fun_l2_n964()
+ fun_l3_n472
+end
+
+def fun_l2_n965()
+ fun_l3_n703
+end
+
+def fun_l2_n966()
+ fun_l3_n884
+end
+
+def fun_l2_n967()
+ fun_l3_n395
+end
+
+def fun_l2_n968()
+ fun_l3_n398
+end
+
+def fun_l2_n969()
+ fun_l3_n251
+end
+
+def fun_l2_n970()
+ fun_l3_n52
+end
+
+def fun_l2_n971()
+ fun_l3_n263
+end
+
+def fun_l2_n972()
+ fun_l3_n172
+end
+
+def fun_l2_n973()
+ fun_l3_n334
+end
+
+def fun_l2_n974()
+ fun_l3_n552
+end
+
+def fun_l2_n975()
+ fun_l3_n898
+end
+
+def fun_l2_n976()
+ fun_l3_n55
+end
+
+def fun_l2_n977()
+ fun_l3_n556
+end
+
+def fun_l2_n978()
+ fun_l3_n852
+end
+
+def fun_l2_n979()
+ fun_l3_n681
+end
+
+def fun_l2_n980()
+ fun_l3_n470
+end
+
+def fun_l2_n981()
+ fun_l3_n807
+end
+
+def fun_l2_n982()
+ fun_l3_n411
+end
+
+def fun_l2_n983()
+ fun_l3_n251
+end
+
+def fun_l2_n984()
+ fun_l3_n302
+end
+
+def fun_l2_n985()
+ fun_l3_n598
+end
+
+def fun_l2_n986()
+ fun_l3_n897
+end
+
+def fun_l2_n987()
+ fun_l3_n449
+end
+
+def fun_l2_n988()
+ fun_l3_n178
+end
+
+def fun_l2_n989()
+ fun_l3_n208
+end
+
+def fun_l2_n990()
+ fun_l3_n287
+end
+
+def fun_l2_n991()
+ fun_l3_n237
+end
+
+def fun_l2_n992()
+ fun_l3_n56
+end
+
+def fun_l2_n993()
+ fun_l3_n66
+end
+
+def fun_l2_n994()
+ fun_l3_n838
+end
+
+def fun_l2_n995()
+ fun_l3_n726
+end
+
+def fun_l2_n996()
+ fun_l3_n758
+end
+
+def fun_l2_n997()
+ fun_l3_n850
+end
+
+def fun_l2_n998()
+ fun_l3_n132
+end
+
+def fun_l2_n999()
+ fun_l3_n477
+end
+
+def fun_l3_n0()
+ fun_l4_n984
+end
+
+def fun_l3_n1()
+ fun_l4_n136
+end
+
+def fun_l3_n2()
+ fun_l4_n494
+end
+
+def fun_l3_n3()
+ fun_l4_n267
+end
+
+def fun_l3_n4()
+ fun_l4_n305
+end
+
+def fun_l3_n5()
+ fun_l4_n646
+end
+
+def fun_l3_n6()
+ fun_l4_n144
+end
+
+def fun_l3_n7()
+ fun_l4_n341
+end
+
+def fun_l3_n8()
+ fun_l4_n142
+end
+
+def fun_l3_n9()
+ fun_l4_n382
+end
+
+def fun_l3_n10()
+ fun_l4_n726
+end
+
+def fun_l3_n11()
+ fun_l4_n23
+end
+
+def fun_l3_n12()
+ fun_l4_n911
+end
+
+def fun_l3_n13()
+ fun_l4_n221
+end
+
+def fun_l3_n14()
+ fun_l4_n554
+end
+
+def fun_l3_n15()
+ fun_l4_n602
+end
+
+def fun_l3_n16()
+ fun_l4_n893
+end
+
+def fun_l3_n17()
+ fun_l4_n943
+end
+
+def fun_l3_n18()
+ fun_l4_n523
+end
+
+def fun_l3_n19()
+ fun_l4_n896
+end
+
+def fun_l3_n20()
+ fun_l4_n539
+end
+
+def fun_l3_n21()
+ fun_l4_n333
+end
+
+def fun_l3_n22()
+ fun_l4_n230
+end
+
+def fun_l3_n23()
+ fun_l4_n256
+end
+
+def fun_l3_n24()
+ fun_l4_n278
+end
+
+def fun_l3_n25()
+ fun_l4_n699
+end
+
+def fun_l3_n26()
+ fun_l4_n584
+end
+
+def fun_l3_n27()
+ fun_l4_n259
+end
+
+def fun_l3_n28()
+ fun_l4_n993
+end
+
+def fun_l3_n29()
+ fun_l4_n183
+end
+
+def fun_l3_n30()
+ fun_l4_n249
+end
+
+def fun_l3_n31()
+ fun_l4_n253
+end
+
+def fun_l3_n32()
+ fun_l4_n507
+end
+
+def fun_l3_n33()
+ fun_l4_n507
+end
+
+def fun_l3_n34()
+ fun_l4_n142
+end
+
+def fun_l3_n35()
+ fun_l4_n392
+end
+
+def fun_l3_n36()
+ fun_l4_n962
+end
+
+def fun_l3_n37()
+ fun_l4_n799
+end
+
+def fun_l3_n38()
+ fun_l4_n110
+end
+
+def fun_l3_n39()
+ fun_l4_n623
+end
+
+def fun_l3_n40()
+ fun_l4_n508
+end
+
+def fun_l3_n41()
+ fun_l4_n726
+end
+
+def fun_l3_n42()
+ fun_l4_n282
+end
+
+def fun_l3_n43()
+ fun_l4_n942
+end
+
+def fun_l3_n44()
+ fun_l4_n711
+end
+
+def fun_l3_n45()
+ fun_l4_n926
+end
+
+def fun_l3_n46()
+ fun_l4_n793
+end
+
+def fun_l3_n47()
+ fun_l4_n658
+end
+
+def fun_l3_n48()
+ fun_l4_n802
+end
+
+def fun_l3_n49()
+ fun_l4_n499
+end
+
+def fun_l3_n50()
+ fun_l4_n648
+end
+
+def fun_l3_n51()
+ fun_l4_n465
+end
+
+def fun_l3_n52()
+ fun_l4_n460
+end
+
+def fun_l3_n53()
+ fun_l4_n904
+end
+
+def fun_l3_n54()
+ fun_l4_n939
+end
+
+def fun_l3_n55()
+ fun_l4_n306
+end
+
+def fun_l3_n56()
+ fun_l4_n235
+end
+
+def fun_l3_n57()
+ fun_l4_n783
+end
+
+def fun_l3_n58()
+ fun_l4_n992
+end
+
+def fun_l3_n59()
+ fun_l4_n196
+end
+
+def fun_l3_n60()
+ fun_l4_n637
+end
+
+def fun_l3_n61()
+ fun_l4_n512
+end
+
+def fun_l3_n62()
+ fun_l4_n480
+end
+
+def fun_l3_n63()
+ fun_l4_n31
+end
+
+def fun_l3_n64()
+ fun_l4_n277
+end
+
+def fun_l3_n65()
+ fun_l4_n814
+end
+
+def fun_l3_n66()
+ fun_l4_n170
+end
+
+def fun_l3_n67()
+ fun_l4_n604
+end
+
+def fun_l3_n68()
+ fun_l4_n794
+end
+
+def fun_l3_n69()
+ fun_l4_n530
+end
+
+def fun_l3_n70()
+ fun_l4_n291
+end
+
+def fun_l3_n71()
+ fun_l4_n146
+end
+
+def fun_l3_n72()
+ fun_l4_n588
+end
+
+def fun_l3_n73()
+ fun_l4_n624
+end
+
+def fun_l3_n74()
+ fun_l4_n210
+end
+
+def fun_l3_n75()
+ fun_l4_n924
+end
+
+def fun_l3_n76()
+ fun_l4_n77
+end
+
+def fun_l3_n77()
+ fun_l4_n727
+end
+
+def fun_l3_n78()
+ fun_l4_n840
+end
+
+def fun_l3_n79()
+ fun_l4_n257
+end
+
+def fun_l3_n80()
+ fun_l4_n654
+end
+
+def fun_l3_n81()
+ fun_l4_n498
+end
+
+def fun_l3_n82()
+ fun_l4_n445
+end
+
+def fun_l3_n83()
+ fun_l4_n820
+end
+
+def fun_l3_n84()
+ fun_l4_n376
+end
+
+def fun_l3_n85()
+ fun_l4_n702
+end
+
+def fun_l3_n86()
+ fun_l4_n22
+end
+
+def fun_l3_n87()
+ fun_l4_n278
+end
+
+def fun_l3_n88()
+ fun_l4_n399
+end
+
+def fun_l3_n89()
+ fun_l4_n166
+end
+
+def fun_l3_n90()
+ fun_l4_n461
+end
+
+def fun_l3_n91()
+ fun_l4_n992
+end
+
+def fun_l3_n92()
+ fun_l4_n207
+end
+
+def fun_l3_n93()
+ fun_l4_n915
+end
+
+def fun_l3_n94()
+ fun_l4_n852
+end
+
+def fun_l3_n95()
+ fun_l4_n591
+end
+
+def fun_l3_n96()
+ fun_l4_n74
+end
+
+def fun_l3_n97()
+ fun_l4_n735
+end
+
+def fun_l3_n98()
+ fun_l4_n863
+end
+
+def fun_l3_n99()
+ fun_l4_n692
+end
+
+def fun_l3_n100()
+ fun_l4_n633
+end
+
+def fun_l3_n101()
+ fun_l4_n618
+end
+
+def fun_l3_n102()
+ fun_l4_n306
+end
+
+def fun_l3_n103()
+ fun_l4_n620
+end
+
+def fun_l3_n104()
+ fun_l4_n981
+end
+
+def fun_l3_n105()
+ fun_l4_n763
+end
+
+def fun_l3_n106()
+ fun_l4_n727
+end
+
+def fun_l3_n107()
+ fun_l4_n173
+end
+
+def fun_l3_n108()
+ fun_l4_n645
+end
+
+def fun_l3_n109()
+ fun_l4_n333
+end
+
+def fun_l3_n110()
+ fun_l4_n847
+end
+
+def fun_l3_n111()
+ fun_l4_n905
+end
+
+def fun_l3_n112()
+ fun_l4_n753
+end
+
+def fun_l3_n113()
+ fun_l4_n294
+end
+
+def fun_l3_n114()
+ fun_l4_n891
+end
+
+def fun_l3_n115()
+ fun_l4_n495
+end
+
+def fun_l3_n116()
+ fun_l4_n683
+end
+
+def fun_l3_n117()
+ fun_l4_n925
+end
+
+def fun_l3_n118()
+ fun_l4_n630
+end
+
+def fun_l3_n119()
+ fun_l4_n548
+end
+
+def fun_l3_n120()
+ fun_l4_n767
+end
+
+def fun_l3_n121()
+ fun_l4_n623
+end
+
+def fun_l3_n122()
+ fun_l4_n0
+end
+
+def fun_l3_n123()
+ fun_l4_n849
+end
+
+def fun_l3_n124()
+ fun_l4_n643
+end
+
+def fun_l3_n125()
+ fun_l4_n559
+end
+
+def fun_l3_n126()
+ fun_l4_n533
+end
+
+def fun_l3_n127()
+ fun_l4_n287
+end
+
+def fun_l3_n128()
+ fun_l4_n146
+end
+
+def fun_l3_n129()
+ fun_l4_n636
+end
+
+def fun_l3_n130()
+ fun_l4_n914
+end
+
+def fun_l3_n131()
+ fun_l4_n274
+end
+
+def fun_l3_n132()
+ fun_l4_n60
+end
+
+def fun_l3_n133()
+ fun_l4_n858
+end
+
+def fun_l3_n134()
+ fun_l4_n334
+end
+
+def fun_l3_n135()
+ fun_l4_n892
+end
+
+def fun_l3_n136()
+ fun_l4_n81
+end
+
+def fun_l3_n137()
+ fun_l4_n567
+end
+
+def fun_l3_n138()
+ fun_l4_n456
+end
+
+def fun_l3_n139()
+ fun_l4_n625
+end
+
+def fun_l3_n140()
+ fun_l4_n690
+end
+
+def fun_l3_n141()
+ fun_l4_n919
+end
+
+def fun_l3_n142()
+ fun_l4_n504
+end
+
+def fun_l3_n143()
+ fun_l4_n986
+end
+
+def fun_l3_n144()
+ fun_l4_n99
+end
+
+def fun_l3_n145()
+ fun_l4_n312
+end
+
+def fun_l3_n146()
+ fun_l4_n36
+end
+
+def fun_l3_n147()
+ fun_l4_n3
+end
+
+def fun_l3_n148()
+ fun_l4_n328
+end
+
+def fun_l3_n149()
+ fun_l4_n978
+end
+
+def fun_l3_n150()
+ fun_l4_n474
+end
+
+def fun_l3_n151()
+ fun_l4_n985
+end
+
+def fun_l3_n152()
+ fun_l4_n809
+end
+
+def fun_l3_n153()
+ fun_l4_n379
+end
+
+def fun_l3_n154()
+ fun_l4_n589
+end
+
+def fun_l3_n155()
+ fun_l4_n625
+end
+
+def fun_l3_n156()
+ fun_l4_n937
+end
+
+def fun_l3_n157()
+ fun_l4_n774
+end
+
+def fun_l3_n158()
+ fun_l4_n465
+end
+
+def fun_l3_n159()
+ fun_l4_n315
+end
+
+def fun_l3_n160()
+ fun_l4_n733
+end
+
+def fun_l3_n161()
+ fun_l4_n572
+end
+
+def fun_l3_n162()
+ fun_l4_n794
+end
+
+def fun_l3_n163()
+ fun_l4_n76
+end
+
+def fun_l3_n164()
+ fun_l4_n550
+end
+
+def fun_l3_n165()
+ fun_l4_n913
+end
+
+def fun_l3_n166()
+ fun_l4_n553
+end
+
+def fun_l3_n167()
+ fun_l4_n383
+end
+
+def fun_l3_n168()
+ fun_l4_n118
+end
+
+def fun_l3_n169()
+ fun_l4_n561
+end
+
+def fun_l3_n170()
+ fun_l4_n517
+end
+
+def fun_l3_n171()
+ fun_l4_n680
+end
+
+def fun_l3_n172()
+ fun_l4_n466
+end
+
+def fun_l3_n173()
+ fun_l4_n629
+end
+
+def fun_l3_n174()
+ fun_l4_n469
+end
+
+def fun_l3_n175()
+ fun_l4_n731
+end
+
+def fun_l3_n176()
+ fun_l4_n579
+end
+
+def fun_l3_n177()
+ fun_l4_n574
+end
+
+def fun_l3_n178()
+ fun_l4_n936
+end
+
+def fun_l3_n179()
+ fun_l4_n405
+end
+
+def fun_l3_n180()
+ fun_l4_n667
+end
+
+def fun_l3_n181()
+ fun_l4_n369
+end
+
+def fun_l3_n182()
+ fun_l4_n852
+end
+
+def fun_l3_n183()
+ fun_l4_n861
+end
+
+def fun_l3_n184()
+ fun_l4_n425
+end
+
+def fun_l3_n185()
+ fun_l4_n4
+end
+
+def fun_l3_n186()
+ fun_l4_n28
+end
+
+def fun_l3_n187()
+ fun_l4_n470
+end
+
+def fun_l3_n188()
+ fun_l4_n568
+end
+
+def fun_l3_n189()
+ fun_l4_n83
+end
+
+def fun_l3_n190()
+ fun_l4_n981
+end
+
+def fun_l3_n191()
+ fun_l4_n526
+end
+
+def fun_l3_n192()
+ fun_l4_n496
+end
+
+def fun_l3_n193()
+ fun_l4_n954
+end
+
+def fun_l3_n194()
+ fun_l4_n340
+end
+
+def fun_l3_n195()
+ fun_l4_n343
+end
+
+def fun_l3_n196()
+ fun_l4_n964
+end
+
+def fun_l3_n197()
+ fun_l4_n58
+end
+
+def fun_l3_n198()
+ fun_l4_n317
+end
+
+def fun_l3_n199()
+ fun_l4_n255
+end
+
+def fun_l3_n200()
+ fun_l4_n546
+end
+
+def fun_l3_n201()
+ fun_l4_n933
+end
+
+def fun_l3_n202()
+ fun_l4_n387
+end
+
+def fun_l3_n203()
+ fun_l4_n32
+end
+
+def fun_l3_n204()
+ fun_l4_n514
+end
+
+def fun_l3_n205()
+ fun_l4_n175
+end
+
+def fun_l3_n206()
+ fun_l4_n813
+end
+
+def fun_l3_n207()
+ fun_l4_n881
+end
+
+def fun_l3_n208()
+ fun_l4_n52
+end
+
+def fun_l3_n209()
+ fun_l4_n839
+end
+
+def fun_l3_n210()
+ fun_l4_n919
+end
+
+def fun_l3_n211()
+ fun_l4_n208
+end
+
+def fun_l3_n212()
+ fun_l4_n111
+end
+
+def fun_l3_n213()
+ fun_l4_n878
+end
+
+def fun_l3_n214()
+ fun_l4_n110
+end
+
+def fun_l3_n215()
+ fun_l4_n701
+end
+
+def fun_l3_n216()
+ fun_l4_n769
+end
+
+def fun_l3_n217()
+ fun_l4_n487
+end
+
+def fun_l3_n218()
+ fun_l4_n940
+end
+
+def fun_l3_n219()
+ fun_l4_n427
+end
+
+def fun_l3_n220()
+ fun_l4_n731
+end
+
+def fun_l3_n221()
+ fun_l4_n92
+end
+
+def fun_l3_n222()
+ fun_l4_n246
+end
+
+def fun_l3_n223()
+ fun_l4_n574
+end
+
+def fun_l3_n224()
+ fun_l4_n297
+end
+
+def fun_l3_n225()
+ fun_l4_n48
+end
+
+def fun_l3_n226()
+ fun_l4_n433
+end
+
+def fun_l3_n227()
+ fun_l4_n628
+end
+
+def fun_l3_n228()
+ fun_l4_n426
+end
+
+def fun_l3_n229()
+ fun_l4_n22
+end
+
+def fun_l3_n230()
+ fun_l4_n878
+end
+
+def fun_l3_n231()
+ fun_l4_n905
+end
+
+def fun_l3_n232()
+ fun_l4_n222
+end
+
+def fun_l3_n233()
+ fun_l4_n523
+end
+
+def fun_l3_n234()
+ fun_l4_n9
+end
+
+def fun_l3_n235()
+ fun_l4_n705
+end
+
+def fun_l3_n236()
+ fun_l4_n811
+end
+
+def fun_l3_n237()
+ fun_l4_n987
+end
+
+def fun_l3_n238()
+ fun_l4_n915
+end
+
+def fun_l3_n239()
+ fun_l4_n302
+end
+
+def fun_l3_n240()
+ fun_l4_n766
+end
+
+def fun_l3_n241()
+ fun_l4_n29
+end
+
+def fun_l3_n242()
+ fun_l4_n154
+end
+
+def fun_l3_n243()
+ fun_l4_n853
+end
+
+def fun_l3_n244()
+ fun_l4_n619
+end
+
+def fun_l3_n245()
+ fun_l4_n739
+end
+
+def fun_l3_n246()
+ fun_l4_n814
+end
+
+def fun_l3_n247()
+ fun_l4_n768
+end
+
+def fun_l3_n248()
+ fun_l4_n2
+end
+
+def fun_l3_n249()
+ fun_l4_n595
+end
+
+def fun_l3_n250()
+ fun_l4_n606
+end
+
+def fun_l3_n251()
+ fun_l4_n144
+end
+
+def fun_l3_n252()
+ fun_l4_n550
+end
+
+def fun_l3_n253()
+ fun_l4_n268
+end
+
+def fun_l3_n254()
+ fun_l4_n320
+end
+
+def fun_l3_n255()
+ fun_l4_n59
+end
+
+def fun_l3_n256()
+ fun_l4_n586
+end
+
+def fun_l3_n257()
+ fun_l4_n766
+end
+
+def fun_l3_n258()
+ fun_l4_n96
+end
+
+def fun_l3_n259()
+ fun_l4_n964
+end
+
+def fun_l3_n260()
+ fun_l4_n163
+end
+
+def fun_l3_n261()
+ fun_l4_n305
+end
+
+def fun_l3_n262()
+ fun_l4_n155
+end
+
+def fun_l3_n263()
+ fun_l4_n249
+end
+
+def fun_l3_n264()
+ fun_l4_n887
+end
+
+def fun_l3_n265()
+ fun_l4_n625
+end
+
+def fun_l3_n266()
+ fun_l4_n241
+end
+
+def fun_l3_n267()
+ fun_l4_n385
+end
+
+def fun_l3_n268()
+ fun_l4_n287
+end
+
+def fun_l3_n269()
+ fun_l4_n375
+end
+
+def fun_l3_n270()
+ fun_l4_n13
+end
+
+def fun_l3_n271()
+ fun_l4_n44
+end
+
+def fun_l3_n272()
+ fun_l4_n259
+end
+
+def fun_l3_n273()
+ fun_l4_n231
+end
+
+def fun_l3_n274()
+ fun_l4_n692
+end
+
+def fun_l3_n275()
+ fun_l4_n279
+end
+
+def fun_l3_n276()
+ fun_l4_n353
+end
+
+def fun_l3_n277()
+ fun_l4_n287
+end
+
+def fun_l3_n278()
+ fun_l4_n254
+end
+
+def fun_l3_n279()
+ fun_l4_n717
+end
+
+def fun_l3_n280()
+ fun_l4_n635
+end
+
+def fun_l3_n281()
+ fun_l4_n264
+end
+
+def fun_l3_n282()
+ fun_l4_n390
+end
+
+def fun_l3_n283()
+ fun_l4_n824
+end
+
+def fun_l3_n284()
+ fun_l4_n919
+end
+
+def fun_l3_n285()
+ fun_l4_n273
+end
+
+def fun_l3_n286()
+ fun_l4_n566
+end
+
+def fun_l3_n287()
+ fun_l4_n6
+end
+
+def fun_l3_n288()
+ fun_l4_n28
+end
+
+def fun_l3_n289()
+ fun_l4_n602
+end
+
+def fun_l3_n290()
+ fun_l4_n209
+end
+
+def fun_l3_n291()
+ fun_l4_n753
+end
+
+def fun_l3_n292()
+ fun_l4_n914
+end
+
+def fun_l3_n293()
+ fun_l4_n345
+end
+
+def fun_l3_n294()
+ fun_l4_n616
+end
+
+def fun_l3_n295()
+ fun_l4_n640
+end
+
+def fun_l3_n296()
+ fun_l4_n47
+end
+
+def fun_l3_n297()
+ fun_l4_n542
+end
+
+def fun_l3_n298()
+ fun_l4_n379
+end
+
+def fun_l3_n299()
+ fun_l4_n14
+end
+
+def fun_l3_n300()
+ fun_l4_n126
+end
+
+def fun_l3_n301()
+ fun_l4_n913
+end
+
+def fun_l3_n302()
+ fun_l4_n933
+end
+
+def fun_l3_n303()
+ fun_l4_n429
+end
+
+def fun_l3_n304()
+ fun_l4_n175
+end
+
+def fun_l3_n305()
+ fun_l4_n152
+end
+
+def fun_l3_n306()
+ fun_l4_n556
+end
+
+def fun_l3_n307()
+ fun_l4_n799
+end
+
+def fun_l3_n308()
+ fun_l4_n865
+end
+
+def fun_l3_n309()
+ fun_l4_n501
+end
+
+def fun_l3_n310()
+ fun_l4_n148
+end
+
+def fun_l3_n311()
+ fun_l4_n160
+end
+
+def fun_l3_n312()
+ fun_l4_n333
+end
+
+def fun_l3_n313()
+ fun_l4_n987
+end
+
+def fun_l3_n314()
+ fun_l4_n449
+end
+
+def fun_l3_n315()
+ fun_l4_n460
+end
+
+def fun_l3_n316()
+ fun_l4_n866
+end
+
+def fun_l3_n317()
+ fun_l4_n554
+end
+
+def fun_l3_n318()
+ fun_l4_n497
+end
+
+def fun_l3_n319()
+ fun_l4_n25
+end
+
+def fun_l3_n320()
+ fun_l4_n483
+end
+
+def fun_l3_n321()
+ fun_l4_n412
+end
+
+def fun_l3_n322()
+ fun_l4_n594
+end
+
+def fun_l3_n323()
+ fun_l4_n727
+end
+
+def fun_l3_n324()
+ fun_l4_n209
+end
+
+def fun_l3_n325()
+ fun_l4_n956
+end
+
+def fun_l3_n326()
+ fun_l4_n127
+end
+
+def fun_l3_n327()
+ fun_l4_n942
+end
+
+def fun_l3_n328()
+ fun_l4_n984
+end
+
+def fun_l3_n329()
+ fun_l4_n387
+end
+
+def fun_l3_n330()
+ fun_l4_n834
+end
+
+def fun_l3_n331()
+ fun_l4_n723
+end
+
+def fun_l3_n332()
+ fun_l4_n576
+end
+
+def fun_l3_n333()
+ fun_l4_n949
+end
+
+def fun_l3_n334()
+ fun_l4_n792
+end
+
+def fun_l3_n335()
+ fun_l4_n28
+end
+
+def fun_l3_n336()
+ fun_l4_n805
+end
+
+def fun_l3_n337()
+ fun_l4_n469
+end
+
+def fun_l3_n338()
+ fun_l4_n651
+end
+
+def fun_l3_n339()
+ fun_l4_n672
+end
+
+def fun_l3_n340()
+ fun_l4_n835
+end
+
+def fun_l3_n341()
+ fun_l4_n902
+end
+
+def fun_l3_n342()
+ fun_l4_n9
+end
+
+def fun_l3_n343()
+ fun_l4_n111
+end
+
+def fun_l3_n344()
+ fun_l4_n234
+end
+
+def fun_l3_n345()
+ fun_l4_n608
+end
+
+def fun_l3_n346()
+ fun_l4_n577
+end
+
+def fun_l3_n347()
+ fun_l4_n966
+end
+
+def fun_l3_n348()
+ fun_l4_n777
+end
+
+def fun_l3_n349()
+ fun_l4_n387
+end
+
+def fun_l3_n350()
+ fun_l4_n27
+end
+
+def fun_l3_n351()
+ fun_l4_n94
+end
+
+def fun_l3_n352()
+ fun_l4_n12
+end
+
+def fun_l3_n353()
+ fun_l4_n632
+end
+
+def fun_l3_n354()
+ fun_l4_n314
+end
+
+def fun_l3_n355()
+ fun_l4_n472
+end
+
+def fun_l3_n356()
+ fun_l4_n737
+end
+
+def fun_l3_n357()
+ fun_l4_n775
+end
+
+def fun_l3_n358()
+ fun_l4_n255
+end
+
+def fun_l3_n359()
+ fun_l4_n474
+end
+
+def fun_l3_n360()
+ fun_l4_n668
+end
+
+def fun_l3_n361()
+ fun_l4_n907
+end
+
+def fun_l3_n362()
+ fun_l4_n608
+end
+
+def fun_l3_n363()
+ fun_l4_n885
+end
+
+def fun_l3_n364()
+ fun_l4_n63
+end
+
+def fun_l3_n365()
+ fun_l4_n432
+end
+
+def fun_l3_n366()
+ fun_l4_n748
+end
+
+def fun_l3_n367()
+ fun_l4_n741
+end
+
+def fun_l3_n368()
+ fun_l4_n799
+end
+
+def fun_l3_n369()
+ fun_l4_n747
+end
+
+def fun_l3_n370()
+ fun_l4_n939
+end
+
+def fun_l3_n371()
+ fun_l4_n569
+end
+
+def fun_l3_n372()
+ fun_l4_n267
+end
+
+def fun_l3_n373()
+ fun_l4_n640
+end
+
+def fun_l3_n374()
+ fun_l4_n647
+end
+
+def fun_l3_n375()
+ fun_l4_n658
+end
+
+def fun_l3_n376()
+ fun_l4_n346
+end
+
+def fun_l3_n377()
+ fun_l4_n781
+end
+
+def fun_l3_n378()
+ fun_l4_n820
+end
+
+def fun_l3_n379()
+ fun_l4_n11
+end
+
+def fun_l3_n380()
+ fun_l4_n238
+end
+
+def fun_l3_n381()
+ fun_l4_n78
+end
+
+def fun_l3_n382()
+ fun_l4_n497
+end
+
+def fun_l3_n383()
+ fun_l4_n815
+end
+
+def fun_l3_n384()
+ fun_l4_n876
+end
+
+def fun_l3_n385()
+ fun_l4_n392
+end
+
+def fun_l3_n386()
+ fun_l4_n228
+end
+
+def fun_l3_n387()
+ fun_l4_n230
+end
+
+def fun_l3_n388()
+ fun_l4_n216
+end
+
+def fun_l3_n389()
+ fun_l4_n661
+end
+
+def fun_l3_n390()
+ fun_l4_n831
+end
+
+def fun_l3_n391()
+ fun_l4_n588
+end
+
+def fun_l3_n392()
+ fun_l4_n377
+end
+
+def fun_l3_n393()
+ fun_l4_n245
+end
+
+def fun_l3_n394()
+ fun_l4_n546
+end
+
+def fun_l3_n395()
+ fun_l4_n48
+end
+
+def fun_l3_n396()
+ fun_l4_n109
+end
+
+def fun_l3_n397()
+ fun_l4_n958
+end
+
+def fun_l3_n398()
+ fun_l4_n779
+end
+
+def fun_l3_n399()
+ fun_l4_n942
+end
+
+def fun_l3_n400()
+ fun_l4_n436
+end
+
+def fun_l3_n401()
+ fun_l4_n321
+end
+
+def fun_l3_n402()
+ fun_l4_n789
+end
+
+def fun_l3_n403()
+ fun_l4_n96
+end
+
+def fun_l3_n404()
+ fun_l4_n101
+end
+
+def fun_l3_n405()
+ fun_l4_n373
+end
+
+def fun_l3_n406()
+ fun_l4_n143
+end
+
+def fun_l3_n407()
+ fun_l4_n869
+end
+
+def fun_l3_n408()
+ fun_l4_n836
+end
+
+def fun_l3_n409()
+ fun_l4_n278
+end
+
+def fun_l3_n410()
+ fun_l4_n819
+end
+
+def fun_l3_n411()
+ fun_l4_n716
+end
+
+def fun_l3_n412()
+ fun_l4_n729
+end
+
+def fun_l3_n413()
+ fun_l4_n565
+end
+
+def fun_l3_n414()
+ fun_l4_n258
+end
+
+def fun_l3_n415()
+ fun_l4_n187
+end
+
+def fun_l3_n416()
+ fun_l4_n425
+end
+
+def fun_l3_n417()
+ fun_l4_n239
+end
+
+def fun_l3_n418()
+ fun_l4_n352
+end
+
+def fun_l3_n419()
+ fun_l4_n747
+end
+
+def fun_l3_n420()
+ fun_l4_n103
+end
+
+def fun_l3_n421()
+ fun_l4_n276
+end
+
+def fun_l3_n422()
+ fun_l4_n348
+end
+
+def fun_l3_n423()
+ fun_l4_n737
+end
+
+def fun_l3_n424()
+ fun_l4_n615
+end
+
+def fun_l3_n425()
+ fun_l4_n305
+end
+
+def fun_l3_n426()
+ fun_l4_n474
+end
+
+def fun_l3_n427()
+ fun_l4_n304
+end
+
+def fun_l3_n428()
+ fun_l4_n607
+end
+
+def fun_l3_n429()
+ fun_l4_n202
+end
+
+def fun_l3_n430()
+ fun_l4_n370
+end
+
+def fun_l3_n431()
+ fun_l4_n580
+end
+
+def fun_l3_n432()
+ fun_l4_n752
+end
+
+def fun_l3_n433()
+ fun_l4_n720
+end
+
+def fun_l3_n434()
+ fun_l4_n916
+end
+
+def fun_l3_n435()
+ fun_l4_n424
+end
+
+def fun_l3_n436()
+ fun_l4_n922
+end
+
+def fun_l3_n437()
+ fun_l4_n885
+end
+
+def fun_l3_n438()
+ fun_l4_n849
+end
+
+def fun_l3_n439()
+ fun_l4_n595
+end
+
+def fun_l3_n440()
+ fun_l4_n753
+end
+
+def fun_l3_n441()
+ fun_l4_n871
+end
+
+def fun_l3_n442()
+ fun_l4_n979
+end
+
+def fun_l3_n443()
+ fun_l4_n217
+end
+
+def fun_l3_n444()
+ fun_l4_n249
+end
+
+def fun_l3_n445()
+ fun_l4_n181
+end
+
+def fun_l3_n446()
+ fun_l4_n283
+end
+
+def fun_l3_n447()
+ fun_l4_n495
+end
+
+def fun_l3_n448()
+ fun_l4_n701
+end
+
+def fun_l3_n449()
+ fun_l4_n897
+end
+
+def fun_l3_n450()
+ fun_l4_n479
+end
+
+def fun_l3_n451()
+ fun_l4_n410
+end
+
+def fun_l3_n452()
+ fun_l4_n842
+end
+
+def fun_l3_n453()
+ fun_l4_n700
+end
+
+def fun_l3_n454()
+ fun_l4_n855
+end
+
+def fun_l3_n455()
+ fun_l4_n743
+end
+
+def fun_l3_n456()
+ fun_l4_n842
+end
+
+def fun_l3_n457()
+ fun_l4_n575
+end
+
+def fun_l3_n458()
+ fun_l4_n48
+end
+
+def fun_l3_n459()
+ fun_l4_n650
+end
+
+def fun_l3_n460()
+ fun_l4_n714
+end
+
+def fun_l3_n461()
+ fun_l4_n409
+end
+
+def fun_l3_n462()
+ fun_l4_n225
+end
+
+def fun_l3_n463()
+ fun_l4_n419
+end
+
+def fun_l3_n464()
+ fun_l4_n563
+end
+
+def fun_l3_n465()
+ fun_l4_n416
+end
+
+def fun_l3_n466()
+ fun_l4_n738
+end
+
+def fun_l3_n467()
+ fun_l4_n955
+end
+
+def fun_l3_n468()
+ fun_l4_n406
+end
+
+def fun_l3_n469()
+ fun_l4_n157
+end
+
+def fun_l3_n470()
+ fun_l4_n732
+end
+
+def fun_l3_n471()
+ fun_l4_n567
+end
+
+def fun_l3_n472()
+ fun_l4_n895
+end
+
+def fun_l3_n473()
+ fun_l4_n377
+end
+
+def fun_l3_n474()
+ fun_l4_n105
+end
+
+def fun_l3_n475()
+ fun_l4_n640
+end
+
+def fun_l3_n476()
+ fun_l4_n617
+end
+
+def fun_l3_n477()
+ fun_l4_n109
+end
+
+def fun_l3_n478()
+ fun_l4_n358
+end
+
+def fun_l3_n479()
+ fun_l4_n522
+end
+
+def fun_l3_n480()
+ fun_l4_n550
+end
+
+def fun_l3_n481()
+ fun_l4_n648
+end
+
+def fun_l3_n482()
+ fun_l4_n533
+end
+
+def fun_l3_n483()
+ fun_l4_n782
+end
+
+def fun_l3_n484()
+ fun_l4_n369
+end
+
+def fun_l3_n485()
+ fun_l4_n644
+end
+
+def fun_l3_n486()
+ fun_l4_n989
+end
+
+def fun_l3_n487()
+ fun_l4_n434
+end
+
+def fun_l3_n488()
+ fun_l4_n914
+end
+
+def fun_l3_n489()
+ fun_l4_n2
+end
+
+def fun_l3_n490()
+ fun_l4_n494
+end
+
+def fun_l3_n491()
+ fun_l4_n479
+end
+
+def fun_l3_n492()
+ fun_l4_n733
+end
+
+def fun_l3_n493()
+ fun_l4_n394
+end
+
+def fun_l3_n494()
+ fun_l4_n39
+end
+
+def fun_l3_n495()
+ fun_l4_n866
+end
+
+def fun_l3_n496()
+ fun_l4_n151
+end
+
+def fun_l3_n497()
+ fun_l4_n155
+end
+
+def fun_l3_n498()
+ fun_l4_n417
+end
+
+def fun_l3_n499()
+ fun_l4_n933
+end
+
+def fun_l3_n500()
+ fun_l4_n44
+end
+
+def fun_l3_n501()
+ fun_l4_n738
+end
+
+def fun_l3_n502()
+ fun_l4_n859
+end
+
+def fun_l3_n503()
+ fun_l4_n124
+end
+
+def fun_l3_n504()
+ fun_l4_n344
+end
+
+def fun_l3_n505()
+ fun_l4_n921
+end
+
+def fun_l3_n506()
+ fun_l4_n168
+end
+
+def fun_l3_n507()
+ fun_l4_n135
+end
+
+def fun_l3_n508()
+ fun_l4_n730
+end
+
+def fun_l3_n509()
+ fun_l4_n671
+end
+
+def fun_l3_n510()
+ fun_l4_n899
+end
+
+def fun_l3_n511()
+ fun_l4_n630
+end
+
+def fun_l3_n512()
+ fun_l4_n228
+end
+
+def fun_l3_n513()
+ fun_l4_n429
+end
+
+def fun_l3_n514()
+ fun_l4_n723
+end
+
+def fun_l3_n515()
+ fun_l4_n185
+end
+
+def fun_l3_n516()
+ fun_l4_n161
+end
+
+def fun_l3_n517()
+ fun_l4_n491
+end
+
+def fun_l3_n518()
+ fun_l4_n643
+end
+
+def fun_l3_n519()
+ fun_l4_n3
+end
+
+def fun_l3_n520()
+ fun_l4_n399
+end
+
+def fun_l3_n521()
+ fun_l4_n927
+end
+
+def fun_l3_n522()
+ fun_l4_n501
+end
+
+def fun_l3_n523()
+ fun_l4_n729
+end
+
+def fun_l3_n524()
+ fun_l4_n628
+end
+
+def fun_l3_n525()
+ fun_l4_n469
+end
+
+def fun_l3_n526()
+ fun_l4_n754
+end
+
+def fun_l3_n527()
+ fun_l4_n448
+end
+
+def fun_l3_n528()
+ fun_l4_n562
+end
+
+def fun_l3_n529()
+ fun_l4_n779
+end
+
+def fun_l3_n530()
+ fun_l4_n452
+end
+
+def fun_l3_n531()
+ fun_l4_n756
+end
+
+def fun_l3_n532()
+ fun_l4_n107
+end
+
+def fun_l3_n533()
+ fun_l4_n311
+end
+
+def fun_l3_n534()
+ fun_l4_n169
+end
+
+def fun_l3_n535()
+ fun_l4_n956
+end
+
+def fun_l3_n536()
+ fun_l4_n754
+end
+
+def fun_l3_n537()
+ fun_l4_n675
+end
+
+def fun_l3_n538()
+ fun_l4_n636
+end
+
+def fun_l3_n539()
+ fun_l4_n691
+end
+
+def fun_l3_n540()
+ fun_l4_n867
+end
+
+def fun_l3_n541()
+ fun_l4_n179
+end
+
+def fun_l3_n542()
+ fun_l4_n153
+end
+
+def fun_l3_n543()
+ fun_l4_n133
+end
+
+def fun_l3_n544()
+ fun_l4_n592
+end
+
+def fun_l3_n545()
+ fun_l4_n71
+end
+
+def fun_l3_n546()
+ fun_l4_n87
+end
+
+def fun_l3_n547()
+ fun_l4_n740
+end
+
+def fun_l3_n548()
+ fun_l4_n436
+end
+
+def fun_l3_n549()
+ fun_l4_n59
+end
+
+def fun_l3_n550()
+ fun_l4_n252
+end
+
+def fun_l3_n551()
+ fun_l4_n596
+end
+
+def fun_l3_n552()
+ fun_l4_n851
+end
+
+def fun_l3_n553()
+ fun_l4_n708
+end
+
+def fun_l3_n554()
+ fun_l4_n210
+end
+
+def fun_l3_n555()
+ fun_l4_n931
+end
+
+def fun_l3_n556()
+ fun_l4_n293
+end
+
+def fun_l3_n557()
+ fun_l4_n413
+end
+
+def fun_l3_n558()
+ fun_l4_n547
+end
+
+def fun_l3_n559()
+ fun_l4_n338
+end
+
+def fun_l3_n560()
+ fun_l4_n194
+end
+
+def fun_l3_n561()
+ fun_l4_n937
+end
+
+def fun_l3_n562()
+ fun_l4_n19
+end
+
+def fun_l3_n563()
+ fun_l4_n651
+end
+
+def fun_l3_n564()
+ fun_l4_n364
+end
+
+def fun_l3_n565()
+ fun_l4_n295
+end
+
+def fun_l3_n566()
+ fun_l4_n946
+end
+
+def fun_l3_n567()
+ fun_l4_n712
+end
+
+def fun_l3_n568()
+ fun_l4_n243
+end
+
+def fun_l3_n569()
+ fun_l4_n563
+end
+
+def fun_l3_n570()
+ fun_l4_n651
+end
+
+def fun_l3_n571()
+ fun_l4_n645
+end
+
+def fun_l3_n572()
+ fun_l4_n46
+end
+
+def fun_l3_n573()
+ fun_l4_n971
+end
+
+def fun_l3_n574()
+ fun_l4_n769
+end
+
+def fun_l3_n575()
+ fun_l4_n315
+end
+
+def fun_l3_n576()
+ fun_l4_n657
+end
+
+def fun_l3_n577()
+ fun_l4_n607
+end
+
+def fun_l3_n578()
+ fun_l4_n352
+end
+
+def fun_l3_n579()
+ fun_l4_n346
+end
+
+def fun_l3_n580()
+ fun_l4_n424
+end
+
+def fun_l3_n581()
+ fun_l4_n703
+end
+
+def fun_l3_n582()
+ fun_l4_n872
+end
+
+def fun_l3_n583()
+ fun_l4_n828
+end
+
+def fun_l3_n584()
+ fun_l4_n283
+end
+
+def fun_l3_n585()
+ fun_l4_n557
+end
+
+def fun_l3_n586()
+ fun_l4_n942
+end
+
+def fun_l3_n587()
+ fun_l4_n121
+end
+
+def fun_l3_n588()
+ fun_l4_n866
+end
+
+def fun_l3_n589()
+ fun_l4_n539
+end
+
+def fun_l3_n590()
+ fun_l4_n240
+end
+
+def fun_l3_n591()
+ fun_l4_n438
+end
+
+def fun_l3_n592()
+ fun_l4_n652
+end
+
+def fun_l3_n593()
+ fun_l4_n540
+end
+
+def fun_l3_n594()
+ fun_l4_n122
+end
+
+def fun_l3_n595()
+ fun_l4_n877
+end
+
+def fun_l3_n596()
+ fun_l4_n30
+end
+
+def fun_l3_n597()
+ fun_l4_n465
+end
+
+def fun_l3_n598()
+ fun_l4_n964
+end
+
+def fun_l3_n599()
+ fun_l4_n123
+end
+
+def fun_l3_n600()
+ fun_l4_n365
+end
+
+def fun_l3_n601()
+ fun_l4_n531
+end
+
+def fun_l3_n602()
+ fun_l4_n774
+end
+
+def fun_l3_n603()
+ fun_l4_n961
+end
+
+def fun_l3_n604()
+ fun_l4_n360
+end
+
+def fun_l3_n605()
+ fun_l4_n640
+end
+
+def fun_l3_n606()
+ fun_l4_n785
+end
+
+def fun_l3_n607()
+ fun_l4_n433
+end
+
+def fun_l3_n608()
+ fun_l4_n528
+end
+
+def fun_l3_n609()
+ fun_l4_n125
+end
+
+def fun_l3_n610()
+ fun_l4_n179
+end
+
+def fun_l3_n611()
+ fun_l4_n946
+end
+
+def fun_l3_n612()
+ fun_l4_n899
+end
+
+def fun_l3_n613()
+ fun_l4_n917
+end
+
+def fun_l3_n614()
+ fun_l4_n444
+end
+
+def fun_l3_n615()
+ fun_l4_n823
+end
+
+def fun_l3_n616()
+ fun_l4_n221
+end
+
+def fun_l3_n617()
+ fun_l4_n483
+end
+
+def fun_l3_n618()
+ fun_l4_n112
+end
+
+def fun_l3_n619()
+ fun_l4_n814
+end
+
+def fun_l3_n620()
+ fun_l4_n648
+end
+
+def fun_l3_n621()
+ fun_l4_n823
+end
+
+def fun_l3_n622()
+ fun_l4_n457
+end
+
+def fun_l3_n623()
+ fun_l4_n92
+end
+
+def fun_l3_n624()
+ fun_l4_n8
+end
+
+def fun_l3_n625()
+ fun_l4_n297
+end
+
+def fun_l3_n626()
+ fun_l4_n517
+end
+
+def fun_l3_n627()
+ fun_l4_n159
+end
+
+def fun_l3_n628()
+ fun_l4_n79
+end
+
+def fun_l3_n629()
+ fun_l4_n791
+end
+
+def fun_l3_n630()
+ fun_l4_n692
+end
+
+def fun_l3_n631()
+ fun_l4_n554
+end
+
+def fun_l3_n632()
+ fun_l4_n872
+end
+
+def fun_l3_n633()
+ fun_l4_n871
+end
+
+def fun_l3_n634()
+ fun_l4_n524
+end
+
+def fun_l3_n635()
+ fun_l4_n588
+end
+
+def fun_l3_n636()
+ fun_l4_n596
+end
+
+def fun_l3_n637()
+ fun_l4_n936
+end
+
+def fun_l3_n638()
+ fun_l4_n478
+end
+
+def fun_l3_n639()
+ fun_l4_n893
+end
+
+def fun_l3_n640()
+ fun_l4_n348
+end
+
+def fun_l3_n641()
+ fun_l4_n806
+end
+
+def fun_l3_n642()
+ fun_l4_n522
+end
+
+def fun_l3_n643()
+ fun_l4_n249
+end
+
+def fun_l3_n644()
+ fun_l4_n208
+end
+
+def fun_l3_n645()
+ fun_l4_n989
+end
+
+def fun_l3_n646()
+ fun_l4_n194
+end
+
+def fun_l3_n647()
+ fun_l4_n157
+end
+
+def fun_l3_n648()
+ fun_l4_n395
+end
+
+def fun_l3_n649()
+ fun_l4_n191
+end
+
+def fun_l3_n650()
+ fun_l4_n292
+end
+
+def fun_l3_n651()
+ fun_l4_n640
+end
+
+def fun_l3_n652()
+ fun_l4_n818
+end
+
+def fun_l3_n653()
+ fun_l4_n481
+end
+
+def fun_l3_n654()
+ fun_l4_n304
+end
+
+def fun_l3_n655()
+ fun_l4_n102
+end
+
+def fun_l3_n656()
+ fun_l4_n51
+end
+
+def fun_l3_n657()
+ fun_l4_n110
+end
+
+def fun_l3_n658()
+ fun_l4_n226
+end
+
+def fun_l3_n659()
+ fun_l4_n48
+end
+
+def fun_l3_n660()
+ fun_l4_n112
+end
+
+def fun_l3_n661()
+ fun_l4_n677
+end
+
+def fun_l3_n662()
+ fun_l4_n168
+end
+
+def fun_l3_n663()
+ fun_l4_n15
+end
+
+def fun_l3_n664()
+ fun_l4_n311
+end
+
+def fun_l3_n665()
+ fun_l4_n935
+end
+
+def fun_l3_n666()
+ fun_l4_n861
+end
+
+def fun_l3_n667()
+ fun_l4_n169
+end
+
+def fun_l3_n668()
+ fun_l4_n395
+end
+
+def fun_l3_n669()
+ fun_l4_n371
+end
+
+def fun_l3_n670()
+ fun_l4_n625
+end
+
+def fun_l3_n671()
+ fun_l4_n183
+end
+
+def fun_l3_n672()
+ fun_l4_n299
+end
+
+def fun_l3_n673()
+ fun_l4_n104
+end
+
+def fun_l3_n674()
+ fun_l4_n413
+end
+
+def fun_l3_n675()
+ fun_l4_n957
+end
+
+def fun_l3_n676()
+ fun_l4_n878
+end
+
+def fun_l3_n677()
+ fun_l4_n222
+end
+
+def fun_l3_n678()
+ fun_l4_n832
+end
+
+def fun_l3_n679()
+ fun_l4_n406
+end
+
+def fun_l3_n680()
+ fun_l4_n779
+end
+
+def fun_l3_n681()
+ fun_l4_n874
+end
+
+def fun_l3_n682()
+ fun_l4_n328
+end
+
+def fun_l3_n683()
+ fun_l4_n412
+end
+
+def fun_l3_n684()
+ fun_l4_n46
+end
+
+def fun_l3_n685()
+ fun_l4_n799
+end
+
+def fun_l3_n686()
+ fun_l4_n751
+end
+
+def fun_l3_n687()
+ fun_l4_n32
+end
+
+def fun_l3_n688()
+ fun_l4_n237
+end
+
+def fun_l3_n689()
+ fun_l4_n770
+end
+
+def fun_l3_n690()
+ fun_l4_n120
+end
+
+def fun_l3_n691()
+ fun_l4_n977
+end
+
+def fun_l3_n692()
+ fun_l4_n35
+end
+
+def fun_l3_n693()
+ fun_l4_n398
+end
+
+def fun_l3_n694()
+ fun_l4_n551
+end
+
+def fun_l3_n695()
+ fun_l4_n122
+end
+
+def fun_l3_n696()
+ fun_l4_n268
+end
+
+def fun_l3_n697()
+ fun_l4_n628
+end
+
+def fun_l3_n698()
+ fun_l4_n611
+end
+
+def fun_l3_n699()
+ fun_l4_n382
+end
+
+def fun_l3_n700()
+ fun_l4_n819
+end
+
+def fun_l3_n701()
+ fun_l4_n124
+end
+
+def fun_l3_n702()
+ fun_l4_n529
+end
+
+def fun_l3_n703()
+ fun_l4_n838
+end
+
+def fun_l3_n704()
+ fun_l4_n181
+end
+
+def fun_l3_n705()
+ fun_l4_n123
+end
+
+def fun_l3_n706()
+ fun_l4_n646
+end
+
+def fun_l3_n707()
+ fun_l4_n193
+end
+
+def fun_l3_n708()
+ fun_l4_n233
+end
+
+def fun_l3_n709()
+ fun_l4_n621
+end
+
+def fun_l3_n710()
+ fun_l4_n772
+end
+
+def fun_l3_n711()
+ fun_l4_n461
+end
+
+def fun_l3_n712()
+ fun_l4_n673
+end
+
+def fun_l3_n713()
+ fun_l4_n101
+end
+
+def fun_l3_n714()
+ fun_l4_n467
+end
+
+def fun_l3_n715()
+ fun_l4_n211
+end
+
+def fun_l3_n716()
+ fun_l4_n554
+end
+
+def fun_l3_n717()
+ fun_l4_n276
+end
+
+def fun_l3_n718()
+ fun_l4_n655
+end
+
+def fun_l3_n719()
+ fun_l4_n425
+end
+
+def fun_l3_n720()
+ fun_l4_n241
+end
+
+def fun_l3_n721()
+ fun_l4_n904
+end
+
+def fun_l3_n722()
+ fun_l4_n839
+end
+
+def fun_l3_n723()
+ fun_l4_n991
+end
+
+def fun_l3_n724()
+ fun_l4_n556
+end
+
+def fun_l3_n725()
+ fun_l4_n86
+end
+
+def fun_l3_n726()
+ fun_l4_n953
+end
+
+def fun_l3_n727()
+ fun_l4_n18
+end
+
+def fun_l3_n728()
+ fun_l4_n374
+end
+
+def fun_l3_n729()
+ fun_l4_n712
+end
+
+def fun_l3_n730()
+ fun_l4_n228
+end
+
+def fun_l3_n731()
+ fun_l4_n830
+end
+
+def fun_l3_n732()
+ fun_l4_n49
+end
+
+def fun_l3_n733()
+ fun_l4_n987
+end
+
+def fun_l3_n734()
+ fun_l4_n815
+end
+
+def fun_l3_n735()
+ fun_l4_n386
+end
+
+def fun_l3_n736()
+ fun_l4_n843
+end
+
+def fun_l3_n737()
+ fun_l4_n958
+end
+
+def fun_l3_n738()
+ fun_l4_n317
+end
+
+def fun_l3_n739()
+ fun_l4_n361
+end
+
+def fun_l3_n740()
+ fun_l4_n392
+end
+
+def fun_l3_n741()
+ fun_l4_n888
+end
+
+def fun_l3_n742()
+ fun_l4_n186
+end
+
+def fun_l3_n743()
+ fun_l4_n493
+end
+
+def fun_l3_n744()
+ fun_l4_n302
+end
+
+def fun_l3_n745()
+ fun_l4_n690
+end
+
+def fun_l3_n746()
+ fun_l4_n601
+end
+
+def fun_l3_n747()
+ fun_l4_n975
+end
+
+def fun_l3_n748()
+ fun_l4_n543
+end
+
+def fun_l3_n749()
+ fun_l4_n8
+end
+
+def fun_l3_n750()
+ fun_l4_n905
+end
+
+def fun_l3_n751()
+ fun_l4_n964
+end
+
+def fun_l3_n752()
+ fun_l4_n739
+end
+
+def fun_l3_n753()
+ fun_l4_n24
+end
+
+def fun_l3_n754()
+ fun_l4_n806
+end
+
+def fun_l3_n755()
+ fun_l4_n704
+end
+
+def fun_l3_n756()
+ fun_l4_n579
+end
+
+def fun_l3_n757()
+ fun_l4_n264
+end
+
+def fun_l3_n758()
+ fun_l4_n357
+end
+
+def fun_l3_n759()
+ fun_l4_n333
+end
+
+def fun_l3_n760()
+ fun_l4_n309
+end
+
+def fun_l3_n761()
+ fun_l4_n419
+end
+
+def fun_l3_n762()
+ fun_l4_n347
+end
+
+def fun_l3_n763()
+ fun_l4_n132
+end
+
+def fun_l3_n764()
+ fun_l4_n45
+end
+
+def fun_l3_n765()
+ fun_l4_n740
+end
+
+def fun_l3_n766()
+ fun_l4_n332
+end
+
+def fun_l3_n767()
+ fun_l4_n600
+end
+
+def fun_l3_n768()
+ fun_l4_n343
+end
+
+def fun_l3_n769()
+ fun_l4_n872
+end
+
+def fun_l3_n770()
+ fun_l4_n326
+end
+
+def fun_l3_n771()
+ fun_l4_n862
+end
+
+def fun_l3_n772()
+ fun_l4_n800
+end
+
+def fun_l3_n773()
+ fun_l4_n616
+end
+
+def fun_l3_n774()
+ fun_l4_n392
+end
+
+def fun_l3_n775()
+ fun_l4_n252
+end
+
+def fun_l3_n776()
+ fun_l4_n289
+end
+
+def fun_l3_n777()
+ fun_l4_n789
+end
+
+def fun_l3_n778()
+ fun_l4_n370
+end
+
+def fun_l3_n779()
+ fun_l4_n969
+end
+
+def fun_l3_n780()
+ fun_l4_n444
+end
+
+def fun_l3_n781()
+ fun_l4_n671
+end
+
+def fun_l3_n782()
+ fun_l4_n301
+end
+
+def fun_l3_n783()
+ fun_l4_n418
+end
+
+def fun_l3_n784()
+ fun_l4_n491
+end
+
+def fun_l3_n785()
+ fun_l4_n746
+end
+
+def fun_l3_n786()
+ fun_l4_n212
+end
+
+def fun_l3_n787()
+ fun_l4_n856
+end
+
+def fun_l3_n788()
+ fun_l4_n155
+end
+
+def fun_l3_n789()
+ fun_l4_n685
+end
+
+def fun_l3_n790()
+ fun_l4_n879
+end
+
+def fun_l3_n791()
+ fun_l4_n363
+end
+
+def fun_l3_n792()
+ fun_l4_n231
+end
+
+def fun_l3_n793()
+ fun_l4_n727
+end
+
+def fun_l3_n794()
+ fun_l4_n355
+end
+
+def fun_l3_n795()
+ fun_l4_n671
+end
+
+def fun_l3_n796()
+ fun_l4_n20
+end
+
+def fun_l3_n797()
+ fun_l4_n523
+end
+
+def fun_l3_n798()
+ fun_l4_n26
+end
+
+def fun_l3_n799()
+ fun_l4_n785
+end
+
+def fun_l3_n800()
+ fun_l4_n458
+end
+
+def fun_l3_n801()
+ fun_l4_n160
+end
+
+def fun_l3_n802()
+ fun_l4_n543
+end
+
+def fun_l3_n803()
+ fun_l4_n292
+end
+
+def fun_l3_n804()
+ fun_l4_n64
+end
+
+def fun_l3_n805()
+ fun_l4_n851
+end
+
+def fun_l3_n806()
+ fun_l4_n369
+end
+
+def fun_l3_n807()
+ fun_l4_n827
+end
+
+def fun_l3_n808()
+ fun_l4_n420
+end
+
+def fun_l3_n809()
+ fun_l4_n98
+end
+
+def fun_l3_n810()
+ fun_l4_n508
+end
+
+def fun_l3_n811()
+ fun_l4_n366
+end
+
+def fun_l3_n812()
+ fun_l4_n795
+end
+
+def fun_l3_n813()
+ fun_l4_n345
+end
+
+def fun_l3_n814()
+ fun_l4_n505
+end
+
+def fun_l3_n815()
+ fun_l4_n302
+end
+
+def fun_l3_n816()
+ fun_l4_n561
+end
+
+def fun_l3_n817()
+ fun_l4_n781
+end
+
+def fun_l3_n818()
+ fun_l4_n599
+end
+
+def fun_l3_n819()
+ fun_l4_n967
+end
+
+def fun_l3_n820()
+ fun_l4_n691
+end
+
+def fun_l3_n821()
+ fun_l4_n563
+end
+
+def fun_l3_n822()
+ fun_l4_n769
+end
+
+def fun_l3_n823()
+ fun_l4_n531
+end
+
+def fun_l3_n824()
+ fun_l4_n957
+end
+
+def fun_l3_n825()
+ fun_l4_n395
+end
+
+def fun_l3_n826()
+ fun_l4_n92
+end
+
+def fun_l3_n827()
+ fun_l4_n781
+end
+
+def fun_l3_n828()
+ fun_l4_n758
+end
+
+def fun_l3_n829()
+ fun_l4_n648
+end
+
+def fun_l3_n830()
+ fun_l4_n799
+end
+
+def fun_l3_n831()
+ fun_l4_n922
+end
+
+def fun_l3_n832()
+ fun_l4_n808
+end
+
+def fun_l3_n833()
+ fun_l4_n180
+end
+
+def fun_l3_n834()
+ fun_l4_n126
+end
+
+def fun_l3_n835()
+ fun_l4_n261
+end
+
+def fun_l3_n836()
+ fun_l4_n470
+end
+
+def fun_l3_n837()
+ fun_l4_n441
+end
+
+def fun_l3_n838()
+ fun_l4_n505
+end
+
+def fun_l3_n839()
+ fun_l4_n490
+end
+
+def fun_l3_n840()
+ fun_l4_n663
+end
+
+def fun_l3_n841()
+ fun_l4_n256
+end
+
+def fun_l3_n842()
+ fun_l4_n797
+end
+
+def fun_l3_n843()
+ fun_l4_n836
+end
+
+def fun_l3_n844()
+ fun_l4_n868
+end
+
+def fun_l3_n845()
+ fun_l4_n927
+end
+
+def fun_l3_n846()
+ fun_l4_n746
+end
+
+def fun_l3_n847()
+ fun_l4_n143
+end
+
+def fun_l3_n848()
+ fun_l4_n90
+end
+
+def fun_l3_n849()
+ fun_l4_n63
+end
+
+def fun_l3_n850()
+ fun_l4_n629
+end
+
+def fun_l3_n851()
+ fun_l4_n66
+end
+
+def fun_l3_n852()
+ fun_l4_n192
+end
+
+def fun_l3_n853()
+ fun_l4_n780
+end
+
+def fun_l3_n854()
+ fun_l4_n744
+end
+
+def fun_l3_n855()
+ fun_l4_n989
+end
+
+def fun_l3_n856()
+ fun_l4_n609
+end
+
+def fun_l3_n857()
+ fun_l4_n534
+end
+
+def fun_l3_n858()
+ fun_l4_n961
+end
+
+def fun_l3_n859()
+ fun_l4_n605
+end
+
+def fun_l3_n860()
+ fun_l4_n675
+end
+
+def fun_l3_n861()
+ fun_l4_n520
+end
+
+def fun_l3_n862()
+ fun_l4_n656
+end
+
+def fun_l3_n863()
+ fun_l4_n917
+end
+
+def fun_l3_n864()
+ fun_l4_n291
+end
+
+def fun_l3_n865()
+ fun_l4_n343
+end
+
+def fun_l3_n866()
+ fun_l4_n704
+end
+
+def fun_l3_n867()
+ fun_l4_n368
+end
+
+def fun_l3_n868()
+ fun_l4_n678
+end
+
+def fun_l3_n869()
+ fun_l4_n788
+end
+
+def fun_l3_n870()
+ fun_l4_n458
+end
+
+def fun_l3_n871()
+ fun_l4_n882
+end
+
+def fun_l3_n872()
+ fun_l4_n830
+end
+
+def fun_l3_n873()
+ fun_l4_n434
+end
+
+def fun_l3_n874()
+ fun_l4_n92
+end
+
+def fun_l3_n875()
+ fun_l4_n633
+end
+
+def fun_l3_n876()
+ fun_l4_n243
+end
+
+def fun_l3_n877()
+ fun_l4_n641
+end
+
+def fun_l3_n878()
+ fun_l4_n114
+end
+
+def fun_l3_n879()
+ fun_l4_n696
+end
+
+def fun_l3_n880()
+ fun_l4_n354
+end
+
+def fun_l3_n881()
+ fun_l4_n644
+end
+
+def fun_l3_n882()
+ fun_l4_n771
+end
+
+def fun_l3_n883()
+ fun_l4_n196
+end
+
+def fun_l3_n884()
+ fun_l4_n202
+end
+
+def fun_l3_n885()
+ fun_l4_n322
+end
+
+def fun_l3_n886()
+ fun_l4_n125
+end
+
+def fun_l3_n887()
+ fun_l4_n760
+end
+
+def fun_l3_n888()
+ fun_l4_n69
+end
+
+def fun_l3_n889()
+ fun_l4_n101
+end
+
+def fun_l3_n890()
+ fun_l4_n108
+end
+
+def fun_l3_n891()
+ fun_l4_n929
+end
+
+def fun_l3_n892()
+ fun_l4_n766
+end
+
+def fun_l3_n893()
+ fun_l4_n811
+end
+
+def fun_l3_n894()
+ fun_l4_n169
+end
+
+def fun_l3_n895()
+ fun_l4_n613
+end
+
+def fun_l3_n896()
+ fun_l4_n145
+end
+
+def fun_l3_n897()
+ fun_l4_n780
+end
+
+def fun_l3_n898()
+ fun_l4_n972
+end
+
+def fun_l3_n899()
+ fun_l4_n508
+end
+
+def fun_l3_n900()
+ fun_l4_n468
+end
+
+def fun_l3_n901()
+ fun_l4_n968
+end
+
+def fun_l3_n902()
+ fun_l4_n714
+end
+
+def fun_l3_n903()
+ fun_l4_n817
+end
+
+def fun_l3_n904()
+ fun_l4_n111
+end
+
+def fun_l3_n905()
+ fun_l4_n115
+end
+
+def fun_l3_n906()
+ fun_l4_n593
+end
+
+def fun_l3_n907()
+ fun_l4_n961
+end
+
+def fun_l3_n908()
+ fun_l4_n362
+end
+
+def fun_l3_n909()
+ fun_l4_n251
+end
+
+def fun_l3_n910()
+ fun_l4_n532
+end
+
+def fun_l3_n911()
+ fun_l4_n252
+end
+
+def fun_l3_n912()
+ fun_l4_n751
+end
+
+def fun_l3_n913()
+ fun_l4_n962
+end
+
+def fun_l3_n914()
+ fun_l4_n151
+end
+
+def fun_l3_n915()
+ fun_l4_n91
+end
+
+def fun_l3_n916()
+ fun_l4_n164
+end
+
+def fun_l3_n917()
+ fun_l4_n714
+end
+
+def fun_l3_n918()
+ fun_l4_n496
+end
+
+def fun_l3_n919()
+ fun_l4_n833
+end
+
+def fun_l3_n920()
+ fun_l4_n315
+end
+
+def fun_l3_n921()
+ fun_l4_n551
+end
+
+def fun_l3_n922()
+ fun_l4_n986
+end
+
+def fun_l3_n923()
+ fun_l4_n924
+end
+
+def fun_l3_n924()
+ fun_l4_n670
+end
+
+def fun_l3_n925()
+ fun_l4_n611
+end
+
+def fun_l3_n926()
+ fun_l4_n590
+end
+
+def fun_l3_n927()
+ fun_l4_n951
+end
+
+def fun_l3_n928()
+ fun_l4_n438
+end
+
+def fun_l3_n929()
+ fun_l4_n914
+end
+
+def fun_l3_n930()
+ fun_l4_n357
+end
+
+def fun_l3_n931()
+ fun_l4_n330
+end
+
+def fun_l3_n932()
+ fun_l4_n737
+end
+
+def fun_l3_n933()
+ fun_l4_n857
+end
+
+def fun_l3_n934()
+ fun_l4_n32
+end
+
+def fun_l3_n935()
+ fun_l4_n980
+end
+
+def fun_l3_n936()
+ fun_l4_n229
+end
+
+def fun_l3_n937()
+ fun_l4_n779
+end
+
+def fun_l3_n938()
+ fun_l4_n365
+end
+
+def fun_l3_n939()
+ fun_l4_n681
+end
+
+def fun_l3_n940()
+ fun_l4_n55
+end
+
+def fun_l3_n941()
+ fun_l4_n324
+end
+
+def fun_l3_n942()
+ fun_l4_n630
+end
+
+def fun_l3_n943()
+ fun_l4_n910
+end
+
+def fun_l3_n944()
+ fun_l4_n590
+end
+
+def fun_l3_n945()
+ fun_l4_n798
+end
+
+def fun_l3_n946()
+ fun_l4_n973
+end
+
+def fun_l3_n947()
+ fun_l4_n180
+end
+
+def fun_l3_n948()
+ fun_l4_n425
+end
+
+def fun_l3_n949()
+ fun_l4_n446
+end
+
+def fun_l3_n950()
+ fun_l4_n296
+end
+
+def fun_l3_n951()
+ fun_l4_n61
+end
+
+def fun_l3_n952()
+ fun_l4_n797
+end
+
+def fun_l3_n953()
+ fun_l4_n824
+end
+
+def fun_l3_n954()
+ fun_l4_n336
+end
+
+def fun_l3_n955()
+ fun_l4_n82
+end
+
+def fun_l3_n956()
+ fun_l4_n310
+end
+
+def fun_l3_n957()
+ fun_l4_n983
+end
+
+def fun_l3_n958()
+ fun_l4_n780
+end
+
+def fun_l3_n959()
+ fun_l4_n697
+end
+
+def fun_l3_n960()
+ fun_l4_n822
+end
+
+def fun_l3_n961()
+ fun_l4_n209
+end
+
+def fun_l3_n962()
+ fun_l4_n549
+end
+
+def fun_l3_n963()
+ fun_l4_n226
+end
+
+def fun_l3_n964()
+ fun_l4_n324
+end
+
+def fun_l3_n965()
+ fun_l4_n63
+end
+
+def fun_l3_n966()
+ fun_l4_n430
+end
+
+def fun_l3_n967()
+ fun_l4_n645
+end
+
+def fun_l3_n968()
+ fun_l4_n875
+end
+
+def fun_l3_n969()
+ fun_l4_n713
+end
+
+def fun_l3_n970()
+ fun_l4_n457
+end
+
+def fun_l3_n971()
+ fun_l4_n768
+end
+
+def fun_l3_n972()
+ fun_l4_n548
+end
+
+def fun_l3_n973()
+ fun_l4_n577
+end
+
+def fun_l3_n974()
+ fun_l4_n109
+end
+
+def fun_l3_n975()
+ fun_l4_n460
+end
+
+def fun_l3_n976()
+ fun_l4_n83
+end
+
+def fun_l3_n977()
+ fun_l4_n152
+end
+
+def fun_l3_n978()
+ fun_l4_n224
+end
+
+def fun_l3_n979()
+ fun_l4_n897
+end
+
+def fun_l3_n980()
+ fun_l4_n830
+end
+
+def fun_l3_n981()
+ fun_l4_n747
+end
+
+def fun_l3_n982()
+ fun_l4_n21
+end
+
+def fun_l3_n983()
+ fun_l4_n84
+end
+
+def fun_l3_n984()
+ fun_l4_n342
+end
+
+def fun_l3_n985()
+ fun_l4_n950
+end
+
+def fun_l3_n986()
+ fun_l4_n33
+end
+
+def fun_l3_n987()
+ fun_l4_n388
+end
+
+def fun_l3_n988()
+ fun_l4_n766
+end
+
+def fun_l3_n989()
+ fun_l4_n708
+end
+
+def fun_l3_n990()
+ fun_l4_n392
+end
+
+def fun_l3_n991()
+ fun_l4_n782
+end
+
+def fun_l3_n992()
+ fun_l4_n223
+end
+
+def fun_l3_n993()
+ fun_l4_n416
+end
+
+def fun_l3_n994()
+ fun_l4_n609
+end
+
+def fun_l3_n995()
+ fun_l4_n158
+end
+
+def fun_l3_n996()
+ fun_l4_n246
+end
+
+def fun_l3_n997()
+ fun_l4_n667
+end
+
+def fun_l3_n998()
+ fun_l4_n126
+end
+
+def fun_l3_n999()
+ fun_l4_n726
+end
+
+def fun_l4_n0()
+ fun_l5_n544
+end
+
+def fun_l4_n1()
+ fun_l5_n456
+end
+
+def fun_l4_n2()
+ fun_l5_n364
+end
+
+def fun_l4_n3()
+ fun_l5_n929
+end
+
+def fun_l4_n4()
+ fun_l5_n593
+end
+
+def fun_l4_n5()
+ fun_l5_n287
+end
+
+def fun_l4_n6()
+ fun_l5_n272
+end
+
+def fun_l4_n7()
+ fun_l5_n71
+end
+
+def fun_l4_n8()
+ fun_l5_n704
+end
+
+def fun_l4_n9()
+ fun_l5_n462
+end
+
+def fun_l4_n10()
+ fun_l5_n239
+end
+
+def fun_l4_n11()
+ fun_l5_n853
+end
+
+def fun_l4_n12()
+ fun_l5_n217
+end
+
+def fun_l4_n13()
+ fun_l5_n822
+end
+
+def fun_l4_n14()
+ fun_l5_n663
+end
+
+def fun_l4_n15()
+ fun_l5_n400
+end
+
+def fun_l4_n16()
+ fun_l5_n307
+end
+
+def fun_l4_n17()
+ fun_l5_n820
+end
+
+def fun_l4_n18()
+ fun_l5_n885
+end
+
+def fun_l4_n19()
+ fun_l5_n680
+end
+
+def fun_l4_n20()
+ fun_l5_n592
+end
+
+def fun_l4_n21()
+ fun_l5_n615
+end
+
+def fun_l4_n22()
+ fun_l5_n669
+end
+
+def fun_l4_n23()
+ fun_l5_n978
+end
+
+def fun_l4_n24()
+ fun_l5_n946
+end
+
+def fun_l4_n25()
+ fun_l5_n915
+end
+
+def fun_l4_n26()
+ fun_l5_n286
+end
+
+def fun_l4_n27()
+ fun_l5_n466
+end
+
+def fun_l4_n28()
+ fun_l5_n970
+end
+
+def fun_l4_n29()
+ fun_l5_n822
+end
+
+def fun_l4_n30()
+ fun_l5_n883
+end
+
+def fun_l4_n31()
+ fun_l5_n137
+end
+
+def fun_l4_n32()
+ fun_l5_n957
+end
+
+def fun_l4_n33()
+ fun_l5_n912
+end
+
+def fun_l4_n34()
+ fun_l5_n156
+end
+
+def fun_l4_n35()
+ fun_l5_n207
+end
+
+def fun_l4_n36()
+ fun_l5_n525
+end
+
+def fun_l4_n37()
+ fun_l5_n673
+end
+
+def fun_l4_n38()
+ fun_l5_n151
+end
+
+def fun_l4_n39()
+ fun_l5_n517
+end
+
+def fun_l4_n40()
+ fun_l5_n459
+end
+
+def fun_l4_n41()
+ fun_l5_n738
+end
+
+def fun_l4_n42()
+ fun_l5_n809
+end
+
+def fun_l4_n43()
+ fun_l5_n853
+end
+
+def fun_l4_n44()
+ fun_l5_n653
+end
+
+def fun_l4_n45()
+ fun_l5_n346
+end
+
+def fun_l4_n46()
+ fun_l5_n704
+end
+
+def fun_l4_n47()
+ fun_l5_n662
+end
+
+def fun_l4_n48()
+ fun_l5_n990
+end
+
+def fun_l4_n49()
+ fun_l5_n731
+end
+
+def fun_l4_n50()
+ fun_l5_n305
+end
+
+def fun_l4_n51()
+ fun_l5_n238
+end
+
+def fun_l4_n52()
+ fun_l5_n710
+end
+
+def fun_l4_n53()
+ fun_l5_n61
+end
+
+def fun_l4_n54()
+ fun_l5_n572
+end
+
+def fun_l4_n55()
+ fun_l5_n939
+end
+
+def fun_l4_n56()
+ fun_l5_n223
+end
+
+def fun_l4_n57()
+ fun_l5_n466
+end
+
+def fun_l4_n58()
+ fun_l5_n442
+end
+
+def fun_l4_n59()
+ fun_l5_n971
+end
+
+def fun_l4_n60()
+ fun_l5_n42
+end
+
+def fun_l4_n61()
+ fun_l5_n390
+end
+
+def fun_l4_n62()
+ fun_l5_n254
+end
+
+def fun_l4_n63()
+ fun_l5_n522
+end
+
+def fun_l4_n64()
+ fun_l5_n16
+end
+
+def fun_l4_n65()
+ fun_l5_n567
+end
+
+def fun_l4_n66()
+ fun_l5_n353
+end
+
+def fun_l4_n67()
+ fun_l5_n676
+end
+
+def fun_l4_n68()
+ fun_l5_n526
+end
+
+def fun_l4_n69()
+ fun_l5_n140
+end
+
+def fun_l4_n70()
+ fun_l5_n829
+end
+
+def fun_l4_n71()
+ fun_l5_n562
+end
+
+def fun_l4_n72()
+ fun_l5_n489
+end
+
+def fun_l4_n73()
+ fun_l5_n205
+end
+
+def fun_l4_n74()
+ fun_l5_n558
+end
+
+def fun_l4_n75()
+ fun_l5_n689
+end
+
+def fun_l4_n76()
+ fun_l5_n803
+end
+
+def fun_l4_n77()
+ fun_l5_n222
+end
+
+def fun_l4_n78()
+ fun_l5_n696
+end
+
+def fun_l4_n79()
+ fun_l5_n457
+end
+
+def fun_l4_n80()
+ fun_l5_n794
+end
+
+def fun_l4_n81()
+ fun_l5_n886
+end
+
+def fun_l4_n82()
+ fun_l5_n742
+end
+
+def fun_l4_n83()
+ fun_l5_n560
+end
+
+def fun_l4_n84()
+ fun_l5_n207
+end
+
+def fun_l4_n85()
+ fun_l5_n265
+end
+
+def fun_l4_n86()
+ fun_l5_n871
+end
+
+def fun_l4_n87()
+ fun_l5_n113
+end
+
+def fun_l4_n88()
+ fun_l5_n141
+end
+
+def fun_l4_n89()
+ fun_l5_n231
+end
+
+def fun_l4_n90()
+ fun_l5_n980
+end
+
+def fun_l4_n91()
+ fun_l5_n586
+end
+
+def fun_l4_n92()
+ fun_l5_n961
+end
+
+def fun_l4_n93()
+ fun_l5_n128
+end
+
+def fun_l4_n94()
+ fun_l5_n395
+end
+
+def fun_l4_n95()
+ fun_l5_n810
+end
+
+def fun_l4_n96()
+ fun_l5_n337
+end
+
+def fun_l4_n97()
+ fun_l5_n256
+end
+
+def fun_l4_n98()
+ fun_l5_n188
+end
+
+def fun_l4_n99()
+ fun_l5_n358
+end
+
+def fun_l4_n100()
+ fun_l5_n751
+end
+
+def fun_l4_n101()
+ fun_l5_n898
+end
+
+def fun_l4_n102()
+ fun_l5_n323
+end
+
+def fun_l4_n103()
+ fun_l5_n455
+end
+
+def fun_l4_n104()
+ fun_l5_n976
+end
+
+def fun_l4_n105()
+ fun_l5_n962
+end
+
+def fun_l4_n106()
+ fun_l5_n781
+end
+
+def fun_l4_n107()
+ fun_l5_n277
+end
+
+def fun_l4_n108()
+ fun_l5_n146
+end
+
+def fun_l4_n109()
+ fun_l5_n793
+end
+
+def fun_l4_n110()
+ fun_l5_n787
+end
+
+def fun_l4_n111()
+ fun_l5_n597
+end
+
+def fun_l4_n112()
+ fun_l5_n799
+end
+
+def fun_l4_n113()
+ fun_l5_n598
+end
+
+def fun_l4_n114()
+ fun_l5_n456
+end
+
+def fun_l4_n115()
+ fun_l5_n45
+end
+
+def fun_l4_n116()
+ fun_l5_n265
+end
+
+def fun_l4_n117()
+ fun_l5_n661
+end
+
+def fun_l4_n118()
+ fun_l5_n657
+end
+
+def fun_l4_n119()
+ fun_l5_n703
+end
+
+def fun_l4_n120()
+ fun_l5_n164
+end
+
+def fun_l4_n121()
+ fun_l5_n182
+end
+
+def fun_l4_n122()
+ fun_l5_n605
+end
+
+def fun_l4_n123()
+ fun_l5_n237
+end
+
+def fun_l4_n124()
+ fun_l5_n582
+end
+
+def fun_l4_n125()
+ fun_l5_n381
+end
+
+def fun_l4_n126()
+ fun_l5_n244
+end
+
+def fun_l4_n127()
+ fun_l5_n272
+end
+
+def fun_l4_n128()
+ fun_l5_n989
+end
+
+def fun_l4_n129()
+ fun_l5_n366
+end
+
+def fun_l4_n130()
+ fun_l5_n640
+end
+
+def fun_l4_n131()
+ fun_l5_n953
+end
+
+def fun_l4_n132()
+ fun_l5_n990
+end
+
+def fun_l4_n133()
+ fun_l5_n497
+end
+
+def fun_l4_n134()
+ fun_l5_n12
+end
+
+def fun_l4_n135()
+ fun_l5_n993
+end
+
+def fun_l4_n136()
+ fun_l5_n802
+end
+
+def fun_l4_n137()
+ fun_l5_n411
+end
+
+def fun_l4_n138()
+ fun_l5_n154
+end
+
+def fun_l4_n139()
+ fun_l5_n924
+end
+
+def fun_l4_n140()
+ fun_l5_n772
+end
+
+def fun_l4_n141()
+ fun_l5_n972
+end
+
+def fun_l4_n142()
+ fun_l5_n847
+end
+
+def fun_l4_n143()
+ fun_l5_n481
+end
+
+def fun_l4_n144()
+ fun_l5_n52
+end
+
+def fun_l4_n145()
+ fun_l5_n451
+end
+
+def fun_l4_n146()
+ fun_l5_n339
+end
+
+def fun_l4_n147()
+ fun_l5_n531
+end
+
+def fun_l4_n148()
+ fun_l5_n735
+end
+
+def fun_l4_n149()
+ fun_l5_n747
+end
+
+def fun_l4_n150()
+ fun_l5_n750
+end
+
+def fun_l4_n151()
+ fun_l5_n762
+end
+
+def fun_l4_n152()
+ fun_l5_n131
+end
+
+def fun_l4_n153()
+ fun_l5_n532
+end
+
+def fun_l4_n154()
+ fun_l5_n398
+end
+
+def fun_l4_n155()
+ fun_l5_n660
+end
+
+def fun_l4_n156()
+ fun_l5_n374
+end
+
+def fun_l4_n157()
+ fun_l5_n245
+end
+
+def fun_l4_n158()
+ fun_l5_n850
+end
+
+def fun_l4_n159()
+ fun_l5_n518
+end
+
+def fun_l4_n160()
+ fun_l5_n607
+end
+
+def fun_l4_n161()
+ fun_l5_n823
+end
+
+def fun_l4_n162()
+ fun_l5_n816
+end
+
+def fun_l4_n163()
+ fun_l5_n735
+end
+
+def fun_l4_n164()
+ fun_l5_n802
+end
+
+def fun_l4_n165()
+ fun_l5_n398
+end
+
+def fun_l4_n166()
+ fun_l5_n149
+end
+
+def fun_l4_n167()
+ fun_l5_n292
+end
+
+def fun_l4_n168()
+ fun_l5_n733
+end
+
+def fun_l4_n169()
+ fun_l5_n145
+end
+
+def fun_l4_n170()
+ fun_l5_n288
+end
+
+def fun_l4_n171()
+ fun_l5_n131
+end
+
+def fun_l4_n172()
+ fun_l5_n31
+end
+
+def fun_l4_n173()
+ fun_l5_n253
+end
+
+def fun_l4_n174()
+ fun_l5_n41
+end
+
+def fun_l4_n175()
+ fun_l5_n403
+end
+
+def fun_l4_n176()
+ fun_l5_n859
+end
+
+def fun_l4_n177()
+ fun_l5_n804
+end
+
+def fun_l4_n178()
+ fun_l5_n26
+end
+
+def fun_l4_n179()
+ fun_l5_n729
+end
+
+def fun_l4_n180()
+ fun_l5_n978
+end
+
+def fun_l4_n181()
+ fun_l5_n42
+end
+
+def fun_l4_n182()
+ fun_l5_n38
+end
+
+def fun_l4_n183()
+ fun_l5_n758
+end
+
+def fun_l4_n184()
+ fun_l5_n885
+end
+
+def fun_l4_n185()
+ fun_l5_n473
+end
+
+def fun_l4_n186()
+ fun_l5_n737
+end
+
+def fun_l4_n187()
+ fun_l5_n889
+end
+
+def fun_l4_n188()
+ fun_l5_n398
+end
+
+def fun_l4_n189()
+ fun_l5_n72
+end
+
+def fun_l4_n190()
+ fun_l5_n725
+end
+
+def fun_l4_n191()
+ fun_l5_n774
+end
+
+def fun_l4_n192()
+ fun_l5_n453
+end
+
+def fun_l4_n193()
+ fun_l5_n370
+end
+
+def fun_l4_n194()
+ fun_l5_n648
+end
+
+def fun_l4_n195()
+ fun_l5_n882
+end
+
+def fun_l4_n196()
+ fun_l5_n745
+end
+
+def fun_l4_n197()
+ fun_l5_n529
+end
+
+def fun_l4_n198()
+ fun_l5_n957
+end
+
+def fun_l4_n199()
+ fun_l5_n423
+end
+
+def fun_l4_n200()
+ fun_l5_n399
+end
+
+def fun_l4_n201()
+ fun_l5_n917
+end
+
+def fun_l4_n202()
+ fun_l5_n634
+end
+
+def fun_l4_n203()
+ fun_l5_n868
+end
+
+def fun_l4_n204()
+ fun_l5_n627
+end
+
+def fun_l4_n205()
+ fun_l5_n514
+end
+
+def fun_l4_n206()
+ fun_l5_n61
+end
+
+def fun_l4_n207()
+ fun_l5_n848
+end
+
+def fun_l4_n208()
+ fun_l5_n611
+end
+
+def fun_l4_n209()
+ fun_l5_n417
+end
+
+def fun_l4_n210()
+ fun_l5_n423
+end
+
+def fun_l4_n211()
+ fun_l5_n247
+end
+
+def fun_l4_n212()
+ fun_l5_n208
+end
+
+def fun_l4_n213()
+ fun_l5_n253
+end
+
+def fun_l4_n214()
+ fun_l5_n833
+end
+
+def fun_l4_n215()
+ fun_l5_n351
+end
+
+def fun_l4_n216()
+ fun_l5_n326
+end
+
+def fun_l4_n217()
+ fun_l5_n741
+end
+
+def fun_l4_n218()
+ fun_l5_n958
+end
+
+def fun_l4_n219()
+ fun_l5_n347
+end
+
+def fun_l4_n220()
+ fun_l5_n317
+end
+
+def fun_l4_n221()
+ fun_l5_n291
+end
+
+def fun_l4_n222()
+ fun_l5_n863
+end
+
+def fun_l4_n223()
+ fun_l5_n30
+end
+
+def fun_l4_n224()
+ fun_l5_n413
+end
+
+def fun_l4_n225()
+ fun_l5_n352
+end
+
+def fun_l4_n226()
+ fun_l5_n125
+end
+
+def fun_l4_n227()
+ fun_l5_n266
+end
+
+def fun_l4_n228()
+ fun_l5_n264
+end
+
+def fun_l4_n229()
+ fun_l5_n745
+end
+
+def fun_l4_n230()
+ fun_l5_n622
+end
+
+def fun_l4_n231()
+ fun_l5_n160
+end
+
+def fun_l4_n232()
+ fun_l5_n121
+end
+
+def fun_l4_n233()
+ fun_l5_n150
+end
+
+def fun_l4_n234()
+ fun_l5_n495
+end
+
+def fun_l4_n235()
+ fun_l5_n905
+end
+
+def fun_l4_n236()
+ fun_l5_n886
+end
+
+def fun_l4_n237()
+ fun_l5_n221
+end
+
+def fun_l4_n238()
+ fun_l5_n912
+end
+
+def fun_l4_n239()
+ fun_l5_n834
+end
+
+def fun_l4_n240()
+ fun_l5_n703
+end
+
+def fun_l4_n241()
+ fun_l5_n651
+end
+
+def fun_l4_n242()
+ fun_l5_n404
+end
+
+def fun_l4_n243()
+ fun_l5_n213
+end
+
+def fun_l4_n244()
+ fun_l5_n342
+end
+
+def fun_l4_n245()
+ fun_l5_n887
+end
+
+def fun_l4_n246()
+ fun_l5_n69
+end
+
+def fun_l4_n247()
+ fun_l5_n835
+end
+
+def fun_l4_n248()
+ fun_l5_n856
+end
+
+def fun_l4_n249()
+ fun_l5_n485
+end
+
+def fun_l4_n250()
+ fun_l5_n441
+end
+
+def fun_l4_n251()
+ fun_l5_n976
+end
+
+def fun_l4_n252()
+ fun_l5_n586
+end
+
+def fun_l4_n253()
+ fun_l5_n728
+end
+
+def fun_l4_n254()
+ fun_l5_n377
+end
+
+def fun_l4_n255()
+ fun_l5_n293
+end
+
+def fun_l4_n256()
+ fun_l5_n149
+end
+
+def fun_l4_n257()
+ fun_l5_n205
+end
+
+def fun_l4_n258()
+ fun_l5_n301
+end
+
+def fun_l4_n259()
+ fun_l5_n528
+end
+
+def fun_l4_n260()
+ fun_l5_n642
+end
+
+def fun_l4_n261()
+ fun_l5_n430
+end
+
+def fun_l4_n262()
+ fun_l5_n14
+end
+
+def fun_l4_n263()
+ fun_l5_n796
+end
+
+def fun_l4_n264()
+ fun_l5_n849
+end
+
+def fun_l4_n265()
+ fun_l5_n547
+end
+
+def fun_l4_n266()
+ fun_l5_n946
+end
+
+def fun_l4_n267()
+ fun_l5_n131
+end
+
+def fun_l4_n268()
+ fun_l5_n141
+end
+
+def fun_l4_n269()
+ fun_l5_n9
+end
+
+def fun_l4_n270()
+ fun_l5_n884
+end
+
+def fun_l4_n271()
+ fun_l5_n978
+end
+
+def fun_l4_n272()
+ fun_l5_n47
+end
+
+def fun_l4_n273()
+ fun_l5_n100
+end
+
+def fun_l4_n274()
+ fun_l5_n254
+end
+
+def fun_l4_n275()
+ fun_l5_n972
+end
+
+def fun_l4_n276()
+ fun_l5_n705
+end
+
+def fun_l4_n277()
+ fun_l5_n504
+end
+
+def fun_l4_n278()
+ fun_l5_n854
+end
+
+def fun_l4_n279()
+ fun_l5_n331
+end
+
+def fun_l4_n280()
+ fun_l5_n394
+end
+
+def fun_l4_n281()
+ fun_l5_n922
+end
+
+def fun_l4_n282()
+ fun_l5_n503
+end
+
+def fun_l4_n283()
+ fun_l5_n854
+end
+
+def fun_l4_n284()
+ fun_l5_n679
+end
+
+def fun_l4_n285()
+ fun_l5_n317
+end
+
+def fun_l4_n286()
+ fun_l5_n753
+end
+
+def fun_l4_n287()
+ fun_l5_n154
+end
+
+def fun_l4_n288()
+ fun_l5_n184
+end
+
+def fun_l4_n289()
+ fun_l5_n416
+end
+
+def fun_l4_n290()
+ fun_l5_n426
+end
+
+def fun_l4_n291()
+ fun_l5_n186
+end
+
+def fun_l4_n292()
+ fun_l5_n527
+end
+
+def fun_l4_n293()
+ fun_l5_n483
+end
+
+def fun_l4_n294()
+ fun_l5_n718
+end
+
+def fun_l4_n295()
+ fun_l5_n469
+end
+
+def fun_l4_n296()
+ fun_l5_n842
+end
+
+def fun_l4_n297()
+ fun_l5_n998
+end
+
+def fun_l4_n298()
+ fun_l5_n964
+end
+
+def fun_l4_n299()
+ fun_l5_n377
+end
+
+def fun_l4_n300()
+ fun_l5_n9
+end
+
+def fun_l4_n301()
+ fun_l5_n234
+end
+
+def fun_l4_n302()
+ fun_l5_n813
+end
+
+def fun_l4_n303()
+ fun_l5_n211
+end
+
+def fun_l4_n304()
+ fun_l5_n593
+end
+
+def fun_l4_n305()
+ fun_l5_n847
+end
+
+def fun_l4_n306()
+ fun_l5_n628
+end
+
+def fun_l4_n307()
+ fun_l5_n827
+end
+
+def fun_l4_n308()
+ fun_l5_n417
+end
+
+def fun_l4_n309()
+ fun_l5_n958
+end
+
+def fun_l4_n310()
+ fun_l5_n838
+end
+
+def fun_l4_n311()
+ fun_l5_n712
+end
+
+def fun_l4_n312()
+ fun_l5_n615
+end
+
+def fun_l4_n313()
+ fun_l5_n693
+end
+
+def fun_l4_n314()
+ fun_l5_n708
+end
+
+def fun_l4_n315()
+ fun_l5_n525
+end
+
+def fun_l4_n316()
+ fun_l5_n943
+end
+
+def fun_l4_n317()
+ fun_l5_n959
+end
+
+def fun_l4_n318()
+ fun_l5_n316
+end
+
+def fun_l4_n319()
+ fun_l5_n424
+end
+
+def fun_l4_n320()
+ fun_l5_n391
+end
+
+def fun_l4_n321()
+ fun_l5_n303
+end
+
+def fun_l4_n322()
+ fun_l5_n159
+end
+
+def fun_l4_n323()
+ fun_l5_n853
+end
+
+def fun_l4_n324()
+ fun_l5_n525
+end
+
+def fun_l4_n325()
+ fun_l5_n390
+end
+
+def fun_l4_n326()
+ fun_l5_n225
+end
+
+def fun_l4_n327()
+ fun_l5_n983
+end
+
+def fun_l4_n328()
+ fun_l5_n509
+end
+
+def fun_l4_n329()
+ fun_l5_n141
+end
+
+def fun_l4_n330()
+ fun_l5_n92
+end
+
+def fun_l4_n331()
+ fun_l5_n288
+end
+
+def fun_l4_n332()
+ fun_l5_n213
+end
+
+def fun_l4_n333()
+ fun_l5_n830
+end
+
+def fun_l4_n334()
+ fun_l5_n512
+end
+
+def fun_l4_n335()
+ fun_l5_n449
+end
+
+def fun_l4_n336()
+ fun_l5_n148
+end
+
+def fun_l4_n337()
+ fun_l5_n829
+end
+
+def fun_l4_n338()
+ fun_l5_n232
+end
+
+def fun_l4_n339()
+ fun_l5_n989
+end
+
+def fun_l4_n340()
+ fun_l5_n226
+end
+
+def fun_l4_n341()
+ fun_l5_n187
+end
+
+def fun_l4_n342()
+ fun_l5_n874
+end
+
+def fun_l4_n343()
+ fun_l5_n621
+end
+
+def fun_l4_n344()
+ fun_l5_n861
+end
+
+def fun_l4_n345()
+ fun_l5_n22
+end
+
+def fun_l4_n346()
+ fun_l5_n6
+end
+
+def fun_l4_n347()
+ fun_l5_n580
+end
+
+def fun_l4_n348()
+ fun_l5_n56
+end
+
+def fun_l4_n349()
+ fun_l5_n834
+end
+
+def fun_l4_n350()
+ fun_l5_n460
+end
+
+def fun_l4_n351()
+ fun_l5_n697
+end
+
+def fun_l4_n352()
+ fun_l5_n792
+end
+
+def fun_l4_n353()
+ fun_l5_n777
+end
+
+def fun_l4_n354()
+ fun_l5_n73
+end
+
+def fun_l4_n355()
+ fun_l5_n555
+end
+
+def fun_l4_n356()
+ fun_l5_n32
+end
+
+def fun_l4_n357()
+ fun_l5_n242
+end
+
+def fun_l4_n358()
+ fun_l5_n791
+end
+
+def fun_l4_n359()
+ fun_l5_n570
+end
+
+def fun_l4_n360()
+ fun_l5_n272
+end
+
+def fun_l4_n361()
+ fun_l5_n757
+end
+
+def fun_l4_n362()
+ fun_l5_n946
+end
+
+def fun_l4_n363()
+ fun_l5_n127
+end
+
+def fun_l4_n364()
+ fun_l5_n940
+end
+
+def fun_l4_n365()
+ fun_l5_n662
+end
+
+def fun_l4_n366()
+ fun_l5_n99
+end
+
+def fun_l4_n367()
+ fun_l5_n107
+end
+
+def fun_l4_n368()
+ fun_l5_n370
+end
+
+def fun_l4_n369()
+ fun_l5_n738
+end
+
+def fun_l4_n370()
+ fun_l5_n346
+end
+
+def fun_l4_n371()
+ fun_l5_n63
+end
+
+def fun_l4_n372()
+ fun_l5_n274
+end
+
+def fun_l4_n373()
+ fun_l5_n936
+end
+
+def fun_l4_n374()
+ fun_l5_n602
+end
+
+def fun_l4_n375()
+ fun_l5_n362
+end
+
+def fun_l4_n376()
+ fun_l5_n605
+end
+
+def fun_l4_n377()
+ fun_l5_n477
+end
+
+def fun_l4_n378()
+ fun_l5_n349
+end
+
+def fun_l4_n379()
+ fun_l5_n241
+end
+
+def fun_l4_n380()
+ fun_l5_n913
+end
+
+def fun_l4_n381()
+ fun_l5_n392
+end
+
+def fun_l4_n382()
+ fun_l5_n669
+end
+
+def fun_l4_n383()
+ fun_l5_n41
+end
+
+def fun_l4_n384()
+ fun_l5_n928
+end
+
+def fun_l4_n385()
+ fun_l5_n646
+end
+
+def fun_l4_n386()
+ fun_l5_n23
+end
+
+def fun_l4_n387()
+ fun_l5_n815
+end
+
+def fun_l4_n388()
+ fun_l5_n595
+end
+
+def fun_l4_n389()
+ fun_l5_n210
+end
+
+def fun_l4_n390()
+ fun_l5_n247
+end
+
+def fun_l4_n391()
+ fun_l5_n914
+end
+
+def fun_l4_n392()
+ fun_l5_n882
+end
+
+def fun_l4_n393()
+ fun_l5_n319
+end
+
+def fun_l4_n394()
+ fun_l5_n764
+end
+
+def fun_l4_n395()
+ fun_l5_n282
+end
+
+def fun_l4_n396()
+ fun_l5_n585
+end
+
+def fun_l4_n397()
+ fun_l5_n551
+end
+
+def fun_l4_n398()
+ fun_l5_n56
+end
+
+def fun_l4_n399()
+ fun_l5_n807
+end
+
+def fun_l4_n400()
+ fun_l5_n678
+end
+
+def fun_l4_n401()
+ fun_l5_n153
+end
+
+def fun_l4_n402()
+ fun_l5_n993
+end
+
+def fun_l4_n403()
+ fun_l5_n835
+end
+
+def fun_l4_n404()
+ fun_l5_n642
+end
+
+def fun_l4_n405()
+ fun_l5_n460
+end
+
+def fun_l4_n406()
+ fun_l5_n135
+end
+
+def fun_l4_n407()
+ fun_l5_n199
+end
+
+def fun_l4_n408()
+ fun_l5_n782
+end
+
+def fun_l4_n409()
+ fun_l5_n723
+end
+
+def fun_l4_n410()
+ fun_l5_n638
+end
+
+def fun_l4_n411()
+ fun_l5_n157
+end
+
+def fun_l4_n412()
+ fun_l5_n840
+end
+
+def fun_l4_n413()
+ fun_l5_n11
+end
+
+def fun_l4_n414()
+ fun_l5_n148
+end
+
+def fun_l4_n415()
+ fun_l5_n577
+end
+
+def fun_l4_n416()
+ fun_l5_n403
+end
+
+def fun_l4_n417()
+ fun_l5_n971
+end
+
+def fun_l4_n418()
+ fun_l5_n951
+end
+
+def fun_l4_n419()
+ fun_l5_n620
+end
+
+def fun_l4_n420()
+ fun_l5_n120
+end
+
+def fun_l4_n421()
+ fun_l5_n981
+end
+
+def fun_l4_n422()
+ fun_l5_n543
+end
+
+def fun_l4_n423()
+ fun_l5_n543
+end
+
+def fun_l4_n424()
+ fun_l5_n161
+end
+
+def fun_l4_n425()
+ fun_l5_n308
+end
+
+def fun_l4_n426()
+ fun_l5_n94
+end
+
+def fun_l4_n427()
+ fun_l5_n209
+end
+
+def fun_l4_n428()
+ fun_l5_n543
+end
+
+def fun_l4_n429()
+ fun_l5_n825
+end
+
+def fun_l4_n430()
+ fun_l5_n808
+end
+
+def fun_l4_n431()
+ fun_l5_n315
+end
+
+def fun_l4_n432()
+ fun_l5_n846
+end
+
+def fun_l4_n433()
+ fun_l5_n448
+end
+
+def fun_l4_n434()
+ fun_l5_n903
+end
+
+def fun_l4_n435()
+ fun_l5_n933
+end
+
+def fun_l4_n436()
+ fun_l5_n872
+end
+
+def fun_l4_n437()
+ fun_l5_n297
+end
+
+def fun_l4_n438()
+ fun_l5_n689
+end
+
+def fun_l4_n439()
+ fun_l5_n700
+end
+
+def fun_l4_n440()
+ fun_l5_n316
+end
+
+def fun_l4_n441()
+ fun_l5_n983
+end
+
+def fun_l4_n442()
+ fun_l5_n32
+end
+
+def fun_l4_n443()
+ fun_l5_n404
+end
+
+def fun_l4_n444()
+ fun_l5_n770
+end
+
+def fun_l4_n445()
+ fun_l5_n497
+end
+
+def fun_l4_n446()
+ fun_l5_n762
+end
+
+def fun_l4_n447()
+ fun_l5_n402
+end
+
+def fun_l4_n448()
+ fun_l5_n773
+end
+
+def fun_l4_n449()
+ fun_l5_n264
+end
+
+def fun_l4_n450()
+ fun_l5_n373
+end
+
+def fun_l4_n451()
+ fun_l5_n907
+end
+
+def fun_l4_n452()
+ fun_l5_n477
+end
+
+def fun_l4_n453()
+ fun_l5_n15
+end
+
+def fun_l4_n454()
+ fun_l5_n550
+end
+
+def fun_l4_n455()
+ fun_l5_n973
+end
+
+def fun_l4_n456()
+ fun_l5_n247
+end
+
+def fun_l4_n457()
+ fun_l5_n231
+end
+
+def fun_l4_n458()
+ fun_l5_n431
+end
+
+def fun_l4_n459()
+ fun_l5_n549
+end
+
+def fun_l4_n460()
+ fun_l5_n251
+end
+
+def fun_l4_n461()
+ fun_l5_n313
+end
+
+def fun_l4_n462()
+ fun_l5_n826
+end
+
+def fun_l4_n463()
+ fun_l5_n454
+end
+
+def fun_l4_n464()
+ fun_l5_n329
+end
+
+def fun_l4_n465()
+ fun_l5_n502
+end
+
+def fun_l4_n466()
+ fun_l5_n786
+end
+
+def fun_l4_n467()
+ fun_l5_n195
+end
+
+def fun_l4_n468()
+ fun_l5_n710
+end
+
+def fun_l4_n469()
+ fun_l5_n970
+end
+
+def fun_l4_n470()
+ fun_l5_n925
+end
+
+def fun_l4_n471()
+ fun_l5_n420
+end
+
+def fun_l4_n472()
+ fun_l5_n231
+end
+
+def fun_l4_n473()
+ fun_l5_n867
+end
+
+def fun_l4_n474()
+ fun_l5_n798
+end
+
+def fun_l4_n475()
+ fun_l5_n697
+end
+
+def fun_l4_n476()
+ fun_l5_n767
+end
+
+def fun_l4_n477()
+ fun_l5_n199
+end
+
+def fun_l4_n478()
+ fun_l5_n190
+end
+
+def fun_l4_n479()
+ fun_l5_n524
+end
+
+def fun_l4_n480()
+ fun_l5_n451
+end
+
+def fun_l4_n481()
+ fun_l5_n182
+end
+
+def fun_l4_n482()
+ fun_l5_n906
+end
+
+def fun_l4_n483()
+ fun_l5_n806
+end
+
+def fun_l4_n484()
+ fun_l5_n871
+end
+
+def fun_l4_n485()
+ fun_l5_n947
+end
+
+def fun_l4_n486()
+ fun_l5_n599
+end
+
+def fun_l4_n487()
+ fun_l5_n266
+end
+
+def fun_l4_n488()
+ fun_l5_n20
+end
+
+def fun_l4_n489()
+ fun_l5_n875
+end
+
+def fun_l4_n490()
+ fun_l5_n393
+end
+
+def fun_l4_n491()
+ fun_l5_n673
+end
+
+def fun_l4_n492()
+ fun_l5_n159
+end
+
+def fun_l4_n493()
+ fun_l5_n327
+end
+
+def fun_l4_n494()
+ fun_l5_n71
+end
+
+def fun_l4_n495()
+ fun_l5_n146
+end
+
+def fun_l4_n496()
+ fun_l5_n372
+end
+
+def fun_l4_n497()
+ fun_l5_n654
+end
+
+def fun_l4_n498()
+ fun_l5_n1
+end
+
+def fun_l4_n499()
+ fun_l5_n448
+end
+
+def fun_l4_n500()
+ fun_l5_n684
+end
+
+def fun_l4_n501()
+ fun_l5_n561
+end
+
+def fun_l4_n502()
+ fun_l5_n47
+end
+
+def fun_l4_n503()
+ fun_l5_n313
+end
+
+def fun_l4_n504()
+ fun_l5_n380
+end
+
+def fun_l4_n505()
+ fun_l5_n416
+end
+
+def fun_l4_n506()
+ fun_l5_n90
+end
+
+def fun_l4_n507()
+ fun_l5_n65
+end
+
+def fun_l4_n508()
+ fun_l5_n61
+end
+
+def fun_l4_n509()
+ fun_l5_n451
+end
+
+def fun_l4_n510()
+ fun_l5_n174
+end
+
+def fun_l4_n511()
+ fun_l5_n236
+end
+
+def fun_l4_n512()
+ fun_l5_n470
+end
+
+def fun_l4_n513()
+ fun_l5_n304
+end
+
+def fun_l4_n514()
+ fun_l5_n146
+end
+
+def fun_l4_n515()
+ fun_l5_n671
+end
+
+def fun_l4_n516()
+ fun_l5_n626
+end
+
+def fun_l4_n517()
+ fun_l5_n164
+end
+
+def fun_l4_n518()
+ fun_l5_n308
+end
+
+def fun_l4_n519()
+ fun_l5_n799
+end
+
+def fun_l4_n520()
+ fun_l5_n521
+end
+
+def fun_l4_n521()
+ fun_l5_n675
+end
+
+def fun_l4_n522()
+ fun_l5_n110
+end
+
+def fun_l4_n523()
+ fun_l5_n726
+end
+
+def fun_l4_n524()
+ fun_l5_n189
+end
+
+def fun_l4_n525()
+ fun_l5_n303
+end
+
+def fun_l4_n526()
+ fun_l5_n571
+end
+
+def fun_l4_n527()
+ fun_l5_n693
+end
+
+def fun_l4_n528()
+ fun_l5_n782
+end
+
+def fun_l4_n529()
+ fun_l5_n764
+end
+
+def fun_l4_n530()
+ fun_l5_n629
+end
+
+def fun_l4_n531()
+ fun_l5_n677
+end
+
+def fun_l4_n532()
+ fun_l5_n745
+end
+
+def fun_l4_n533()
+ fun_l5_n868
+end
+
+def fun_l4_n534()
+ fun_l5_n771
+end
+
+def fun_l4_n535()
+ fun_l5_n248
+end
+
+def fun_l4_n536()
+ fun_l5_n412
+end
+
+def fun_l4_n537()
+ fun_l5_n736
+end
+
+def fun_l4_n538()
+ fun_l5_n296
+end
+
+def fun_l4_n539()
+ fun_l5_n847
+end
+
+def fun_l4_n540()
+ fun_l5_n188
+end
+
+def fun_l4_n541()
+ fun_l5_n131
+end
+
+def fun_l4_n542()
+ fun_l5_n31
+end
+
+def fun_l4_n543()
+ fun_l5_n563
+end
+
+def fun_l4_n544()
+ fun_l5_n479
+end
+
+def fun_l4_n545()
+ fun_l5_n243
+end
+
+def fun_l4_n546()
+ fun_l5_n471
+end
+
+def fun_l4_n547()
+ fun_l5_n237
+end
+
+def fun_l4_n548()
+ fun_l5_n772
+end
+
+def fun_l4_n549()
+ fun_l5_n723
+end
+
+def fun_l4_n550()
+ fun_l5_n733
+end
+
+def fun_l4_n551()
+ fun_l5_n274
+end
+
+def fun_l4_n552()
+ fun_l5_n351
+end
+
+def fun_l4_n553()
+ fun_l5_n30
+end
+
+def fun_l4_n554()
+ fun_l5_n112
+end
+
+def fun_l4_n555()
+ fun_l5_n438
+end
+
+def fun_l4_n556()
+ fun_l5_n969
+end
+
+def fun_l4_n557()
+ fun_l5_n57
+end
+
+def fun_l4_n558()
+ fun_l5_n971
+end
+
+def fun_l4_n559()
+ fun_l5_n831
+end
+
+def fun_l4_n560()
+ fun_l5_n833
+end
+
+def fun_l4_n561()
+ fun_l5_n896
+end
+
+def fun_l4_n562()
+ fun_l5_n607
+end
+
+def fun_l4_n563()
+ fun_l5_n793
+end
+
+def fun_l4_n564()
+ fun_l5_n711
+end
+
+def fun_l4_n565()
+ fun_l5_n570
+end
+
+def fun_l4_n566()
+ fun_l5_n933
+end
+
+def fun_l4_n567()
+ fun_l5_n917
+end
+
+def fun_l4_n568()
+ fun_l5_n811
+end
+
+def fun_l4_n569()
+ fun_l5_n414
+end
+
+def fun_l4_n570()
+ fun_l5_n14
+end
+
+def fun_l4_n571()
+ fun_l5_n911
+end
+
+def fun_l4_n572()
+ fun_l5_n114
+end
+
+def fun_l4_n573()
+ fun_l5_n732
+end
+
+def fun_l4_n574()
+ fun_l5_n913
+end
+
+def fun_l4_n575()
+ fun_l5_n66
+end
+
+def fun_l4_n576()
+ fun_l5_n330
+end
+
+def fun_l4_n577()
+ fun_l5_n892
+end
+
+def fun_l4_n578()
+ fun_l5_n329
+end
+
+def fun_l4_n579()
+ fun_l5_n539
+end
+
+def fun_l4_n580()
+ fun_l5_n268
+end
+
+def fun_l4_n581()
+ fun_l5_n357
+end
+
+def fun_l4_n582()
+ fun_l5_n259
+end
+
+def fun_l4_n583()
+ fun_l5_n968
+end
+
+def fun_l4_n584()
+ fun_l5_n873
+end
+
+def fun_l4_n585()
+ fun_l5_n644
+end
+
+def fun_l4_n586()
+ fun_l5_n659
+end
+
+def fun_l4_n587()
+ fun_l5_n906
+end
+
+def fun_l4_n588()
+ fun_l5_n746
+end
+
+def fun_l4_n589()
+ fun_l5_n802
+end
+
+def fun_l4_n590()
+ fun_l5_n9
+end
+
+def fun_l4_n591()
+ fun_l5_n620
+end
+
+def fun_l4_n592()
+ fun_l5_n507
+end
+
+def fun_l4_n593()
+ fun_l5_n338
+end
+
+def fun_l4_n594()
+ fun_l5_n396
+end
+
+def fun_l4_n595()
+ fun_l5_n627
+end
+
+def fun_l4_n596()
+ fun_l5_n621
+end
+
+def fun_l4_n597()
+ fun_l5_n597
+end
+
+def fun_l4_n598()
+ fun_l5_n496
+end
+
+def fun_l4_n599()
+ fun_l5_n265
+end
+
+def fun_l4_n600()
+ fun_l5_n897
+end
+
+def fun_l4_n601()
+ fun_l5_n142
+end
+
+def fun_l4_n602()
+ fun_l5_n614
+end
+
+def fun_l4_n603()
+ fun_l5_n565
+end
+
+def fun_l4_n604()
+ fun_l5_n653
+end
+
+def fun_l4_n605()
+ fun_l5_n728
+end
+
+def fun_l4_n606()
+ fun_l5_n799
+end
+
+def fun_l4_n607()
+ fun_l5_n714
+end
+
+def fun_l4_n608()
+ fun_l5_n448
+end
+
+def fun_l4_n609()
+ fun_l5_n778
+end
+
+def fun_l4_n610()
+ fun_l5_n508
+end
+
+def fun_l4_n611()
+ fun_l5_n216
+end
+
+def fun_l4_n612()
+ fun_l5_n604
+end
+
+def fun_l4_n613()
+ fun_l5_n231
+end
+
+def fun_l4_n614()
+ fun_l5_n696
+end
+
+def fun_l4_n615()
+ fun_l5_n354
+end
+
+def fun_l4_n616()
+ fun_l5_n595
+end
+
+def fun_l4_n617()
+ fun_l5_n747
+end
+
+def fun_l4_n618()
+ fun_l5_n377
+end
+
+def fun_l4_n619()
+ fun_l5_n852
+end
+
+def fun_l4_n620()
+ fun_l5_n381
+end
+
+def fun_l4_n621()
+ fun_l5_n674
+end
+
+def fun_l4_n622()
+ fun_l5_n696
+end
+
+def fun_l4_n623()
+ fun_l5_n25
+end
+
+def fun_l4_n624()
+ fun_l5_n133
+end
+
+def fun_l4_n625()
+ fun_l5_n419
+end
+
+def fun_l4_n626()
+ fun_l5_n612
+end
+
+def fun_l4_n627()
+ fun_l5_n798
+end
+
+def fun_l4_n628()
+ fun_l5_n702
+end
+
+def fun_l4_n629()
+ fun_l5_n125
+end
+
+def fun_l4_n630()
+ fun_l5_n567
+end
+
+def fun_l4_n631()
+ fun_l5_n825
+end
+
+def fun_l4_n632()
+ fun_l5_n794
+end
+
+def fun_l4_n633()
+ fun_l5_n802
+end
+
+def fun_l4_n634()
+ fun_l5_n297
+end
+
+def fun_l4_n635()
+ fun_l5_n366
+end
+
+def fun_l4_n636()
+ fun_l5_n149
+end
+
+def fun_l4_n637()
+ fun_l5_n648
+end
+
+def fun_l4_n638()
+ fun_l5_n997
+end
+
+def fun_l4_n639()
+ fun_l5_n569
+end
+
+def fun_l4_n640()
+ fun_l5_n917
+end
+
+def fun_l4_n641()
+ fun_l5_n172
+end
+
+def fun_l4_n642()
+ fun_l5_n353
+end
+
+def fun_l4_n643()
+ fun_l5_n940
+end
+
+def fun_l4_n644()
+ fun_l5_n255
+end
+
+def fun_l4_n645()
+ fun_l5_n690
+end
+
+def fun_l4_n646()
+ fun_l5_n17
+end
+
+def fun_l4_n647()
+ fun_l5_n320
+end
+
+def fun_l4_n648()
+ fun_l5_n328
+end
+
+def fun_l4_n649()
+ fun_l5_n467
+end
+
+def fun_l4_n650()
+ fun_l5_n352
+end
+
+def fun_l4_n651()
+ fun_l5_n671
+end
+
+def fun_l4_n652()
+ fun_l5_n104
+end
+
+def fun_l4_n653()
+ fun_l5_n40
+end
+
+def fun_l4_n654()
+ fun_l5_n445
+end
+
+def fun_l4_n655()
+ fun_l5_n703
+end
+
+def fun_l4_n656()
+ fun_l5_n699
+end
+
+def fun_l4_n657()
+ fun_l5_n156
+end
+
+def fun_l4_n658()
+ fun_l5_n1
+end
+
+def fun_l4_n659()
+ fun_l5_n728
+end
+
+def fun_l4_n660()
+ fun_l5_n200
+end
+
+def fun_l4_n661()
+ fun_l5_n369
+end
+
+def fun_l4_n662()
+ fun_l5_n621
+end
+
+def fun_l4_n663()
+ fun_l5_n600
+end
+
+def fun_l4_n664()
+ fun_l5_n342
+end
+
+def fun_l4_n665()
+ fun_l5_n129
+end
+
+def fun_l4_n666()
+ fun_l5_n627
+end
+
+def fun_l4_n667()
+ fun_l5_n44
+end
+
+def fun_l4_n668()
+ fun_l5_n43
+end
+
+def fun_l4_n669()
+ fun_l5_n708
+end
+
+def fun_l4_n670()
+ fun_l5_n378
+end
+
+def fun_l4_n671()
+ fun_l5_n320
+end
+
+def fun_l4_n672()
+ fun_l5_n896
+end
+
+def fun_l4_n673()
+ fun_l5_n185
+end
+
+def fun_l4_n674()
+ fun_l5_n456
+end
+
+def fun_l4_n675()
+ fun_l5_n520
+end
+
+def fun_l4_n676()
+ fun_l5_n633
+end
+
+def fun_l4_n677()
+ fun_l5_n122
+end
+
+def fun_l4_n678()
+ fun_l5_n333
+end
+
+def fun_l4_n679()
+ fun_l5_n100
+end
+
+def fun_l4_n680()
+ fun_l5_n941
+end
+
+def fun_l4_n681()
+ fun_l5_n468
+end
+
+def fun_l4_n682()
+ fun_l5_n45
+end
+
+def fun_l4_n683()
+ fun_l5_n295
+end
+
+def fun_l4_n684()
+ fun_l5_n400
+end
+
+def fun_l4_n685()
+ fun_l5_n999
+end
+
+def fun_l4_n686()
+ fun_l5_n294
+end
+
+def fun_l4_n687()
+ fun_l5_n575
+end
+
+def fun_l4_n688()
+ fun_l5_n372
+end
+
+def fun_l4_n689()
+ fun_l5_n777
+end
+
+def fun_l4_n690()
+ fun_l5_n795
+end
+
+def fun_l4_n691()
+ fun_l5_n44
+end
+
+def fun_l4_n692()
+ fun_l5_n27
+end
+
+def fun_l4_n693()
+ fun_l5_n488
+end
+
+def fun_l4_n694()
+ fun_l5_n932
+end
+
+def fun_l4_n695()
+ fun_l5_n104
+end
+
+def fun_l4_n696()
+ fun_l5_n552
+end
+
+def fun_l4_n697()
+ fun_l5_n830
+end
+
+def fun_l4_n698()
+ fun_l5_n612
+end
+
+def fun_l4_n699()
+ fun_l5_n889
+end
+
+def fun_l4_n700()
+ fun_l5_n205
+end
+
+def fun_l4_n701()
+ fun_l5_n90
+end
+
+def fun_l4_n702()
+ fun_l5_n210
+end
+
+def fun_l4_n703()
+ fun_l5_n514
+end
+
+def fun_l4_n704()
+ fun_l5_n374
+end
+
+def fun_l4_n705()
+ fun_l5_n176
+end
+
+def fun_l4_n706()
+ fun_l5_n465
+end
+
+def fun_l4_n707()
+ fun_l5_n542
+end
+
+def fun_l4_n708()
+ fun_l5_n175
+end
+
+def fun_l4_n709()
+ fun_l5_n148
+end
+
+def fun_l4_n710()
+ fun_l5_n212
+end
+
+def fun_l4_n711()
+ fun_l5_n418
+end
+
+def fun_l4_n712()
+ fun_l5_n401
+end
+
+def fun_l4_n713()
+ fun_l5_n14
+end
+
+def fun_l4_n714()
+ fun_l5_n965
+end
+
+def fun_l4_n715()
+ fun_l5_n783
+end
+
+def fun_l4_n716()
+ fun_l5_n421
+end
+
+def fun_l4_n717()
+ fun_l5_n346
+end
+
+def fun_l4_n718()
+ fun_l5_n176
+end
+
+def fun_l4_n719()
+ fun_l5_n522
+end
+
+def fun_l4_n720()
+ fun_l5_n207
+end
+
+def fun_l4_n721()
+ fun_l5_n707
+end
+
+def fun_l4_n722()
+ fun_l5_n593
+end
+
+def fun_l4_n723()
+ fun_l5_n609
+end
+
+def fun_l4_n724()
+ fun_l5_n798
+end
+
+def fun_l4_n725()
+ fun_l5_n744
+end
+
+def fun_l4_n726()
+ fun_l5_n514
+end
+
+def fun_l4_n727()
+ fun_l5_n278
+end
+
+def fun_l4_n728()
+ fun_l5_n425
+end
+
+def fun_l4_n729()
+ fun_l5_n147
+end
+
+def fun_l4_n730()
+ fun_l5_n676
+end
+
+def fun_l4_n731()
+ fun_l5_n887
+end
+
+def fun_l4_n732()
+ fun_l5_n865
+end
+
+def fun_l4_n733()
+ fun_l5_n811
+end
+
+def fun_l4_n734()
+ fun_l5_n545
+end
+
+def fun_l4_n735()
+ fun_l5_n219
+end
+
+def fun_l4_n736()
+ fun_l5_n121
+end
+
+def fun_l4_n737()
+ fun_l5_n253
+end
+
+def fun_l4_n738()
+ fun_l5_n349
+end
+
+def fun_l4_n739()
+ fun_l5_n540
+end
+
+def fun_l4_n740()
+ fun_l5_n301
+end
+
+def fun_l4_n741()
+ fun_l5_n367
+end
+
+def fun_l4_n742()
+ fun_l5_n989
+end
+
+def fun_l4_n743()
+ fun_l5_n454
+end
+
+def fun_l4_n744()
+ fun_l5_n390
+end
+
+def fun_l4_n745()
+ fun_l5_n650
+end
+
+def fun_l4_n746()
+ fun_l5_n403
+end
+
+def fun_l4_n747()
+ fun_l5_n807
+end
+
+def fun_l4_n748()
+ fun_l5_n219
+end
+
+def fun_l4_n749()
+ fun_l5_n756
+end
+
+def fun_l4_n750()
+ fun_l5_n730
+end
+
+def fun_l4_n751()
+ fun_l5_n923
+end
+
+def fun_l4_n752()
+ fun_l5_n407
+end
+
+def fun_l4_n753()
+ fun_l5_n734
+end
+
+def fun_l4_n754()
+ fun_l5_n192
+end
+
+def fun_l4_n755()
+ fun_l5_n26
+end
+
+def fun_l4_n756()
+ fun_l5_n571
+end
+
+def fun_l4_n757()
+ fun_l5_n515
+end
+
+def fun_l4_n758()
+ fun_l5_n701
+end
+
+def fun_l4_n759()
+ fun_l5_n808
+end
+
+def fun_l4_n760()
+ fun_l5_n607
+end
+
+def fun_l4_n761()
+ fun_l5_n231
+end
+
+def fun_l4_n762()
+ fun_l5_n144
+end
+
+def fun_l4_n763()
+ fun_l5_n829
+end
+
+def fun_l4_n764()
+ fun_l5_n939
+end
+
+def fun_l4_n765()
+ fun_l5_n486
+end
+
+def fun_l4_n766()
+ fun_l5_n73
+end
+
+def fun_l4_n767()
+ fun_l5_n409
+end
+
+def fun_l4_n768()
+ fun_l5_n197
+end
+
+def fun_l4_n769()
+ fun_l5_n803
+end
+
+def fun_l4_n770()
+ fun_l5_n877
+end
+
+def fun_l4_n771()
+ fun_l5_n739
+end
+
+def fun_l4_n772()
+ fun_l5_n500
+end
+
+def fun_l4_n773()
+ fun_l5_n104
+end
+
+def fun_l4_n774()
+ fun_l5_n526
+end
+
+def fun_l4_n775()
+ fun_l5_n443
+end
+
+def fun_l4_n776()
+ fun_l5_n397
+end
+
+def fun_l4_n777()
+ fun_l5_n496
+end
+
+def fun_l4_n778()
+ fun_l5_n360
+end
+
+def fun_l4_n779()
+ fun_l5_n93
+end
+
+def fun_l4_n780()
+ fun_l5_n635
+end
+
+def fun_l4_n781()
+ fun_l5_n724
+end
+
+def fun_l4_n782()
+ fun_l5_n445
+end
+
+def fun_l4_n783()
+ fun_l5_n546
+end
+
+def fun_l4_n784()
+ fun_l5_n353
+end
+
+def fun_l4_n785()
+ fun_l5_n546
+end
+
+def fun_l4_n786()
+ fun_l5_n243
+end
+
+def fun_l4_n787()
+ fun_l5_n614
+end
+
+def fun_l4_n788()
+ fun_l5_n249
+end
+
+def fun_l4_n789()
+ fun_l5_n281
+end
+
+def fun_l4_n790()
+ fun_l5_n22
+end
+
+def fun_l4_n791()
+ fun_l5_n857
+end
+
+def fun_l4_n792()
+ fun_l5_n685
+end
+
+def fun_l4_n793()
+ fun_l5_n784
+end
+
+def fun_l4_n794()
+ fun_l5_n522
+end
+
+def fun_l4_n795()
+ fun_l5_n970
+end
+
+def fun_l4_n796()
+ fun_l5_n734
+end
+
+def fun_l4_n797()
+ fun_l5_n36
+end
+
+def fun_l4_n798()
+ fun_l5_n257
+end
+
+def fun_l4_n799()
+ fun_l5_n677
+end
+
+def fun_l4_n800()
+ fun_l5_n556
+end
+
+def fun_l4_n801()
+ fun_l5_n783
+end
+
+def fun_l4_n802()
+ fun_l5_n501
+end
+
+def fun_l4_n803()
+ fun_l5_n731
+end
+
+def fun_l4_n804()
+ fun_l5_n175
+end
+
+def fun_l4_n805()
+ fun_l5_n712
+end
+
+def fun_l4_n806()
+ fun_l5_n566
+end
+
+def fun_l4_n807()
+ fun_l5_n158
+end
+
+def fun_l4_n808()
+ fun_l5_n63
+end
+
+def fun_l4_n809()
+ fun_l5_n354
+end
+
+def fun_l4_n810()
+ fun_l5_n552
+end
+
+def fun_l4_n811()
+ fun_l5_n255
+end
+
+def fun_l4_n812()
+ fun_l5_n830
+end
+
+def fun_l4_n813()
+ fun_l5_n792
+end
+
+def fun_l4_n814()
+ fun_l5_n214
+end
+
+def fun_l4_n815()
+ fun_l5_n906
+end
+
+def fun_l4_n816()
+ fun_l5_n852
+end
+
+def fun_l4_n817()
+ fun_l5_n286
+end
+
+def fun_l4_n818()
+ fun_l5_n704
+end
+
+def fun_l4_n819()
+ fun_l5_n860
+end
+
+def fun_l4_n820()
+ fun_l5_n150
+end
+
+def fun_l4_n821()
+ fun_l5_n793
+end
+
+def fun_l4_n822()
+ fun_l5_n356
+end
+
+def fun_l4_n823()
+ fun_l5_n369
+end
+
+def fun_l4_n824()
+ fun_l5_n519
+end
+
+def fun_l4_n825()
+ fun_l5_n765
+end
+
+def fun_l4_n826()
+ fun_l5_n974
+end
+
+def fun_l4_n827()
+ fun_l5_n265
+end
+
+def fun_l4_n828()
+ fun_l5_n948
+end
+
+def fun_l4_n829()
+ fun_l5_n2
+end
+
+def fun_l4_n830()
+ fun_l5_n269
+end
+
+def fun_l4_n831()
+ fun_l5_n96
+end
+
+def fun_l4_n832()
+ fun_l5_n964
+end
+
+def fun_l4_n833()
+ fun_l5_n362
+end
+
+def fun_l4_n834()
+ fun_l5_n915
+end
+
+def fun_l4_n835()
+ fun_l5_n179
+end
+
+def fun_l4_n836()
+ fun_l5_n128
+end
+
+def fun_l4_n837()
+ fun_l5_n195
+end
+
+def fun_l4_n838()
+ fun_l5_n393
+end
+
+def fun_l4_n839()
+ fun_l5_n120
+end
+
+def fun_l4_n840()
+ fun_l5_n239
+end
+
+def fun_l4_n841()
+ fun_l5_n669
+end
+
+def fun_l4_n842()
+ fun_l5_n234
+end
+
+def fun_l4_n843()
+ fun_l5_n60
+end
+
+def fun_l4_n844()
+ fun_l5_n962
+end
+
+def fun_l4_n845()
+ fun_l5_n770
+end
+
+def fun_l4_n846()
+ fun_l5_n207
+end
+
+def fun_l4_n847()
+ fun_l5_n46
+end
+
+def fun_l4_n848()
+ fun_l5_n615
+end
+
+def fun_l4_n849()
+ fun_l5_n709
+end
+
+def fun_l4_n850()
+ fun_l5_n198
+end
+
+def fun_l4_n851()
+ fun_l5_n639
+end
+
+def fun_l4_n852()
+ fun_l5_n125
+end
+
+def fun_l4_n853()
+ fun_l5_n193
+end
+
+def fun_l4_n854()
+ fun_l5_n806
+end
+
+def fun_l4_n855()
+ fun_l5_n237
+end
+
+def fun_l4_n856()
+ fun_l5_n319
+end
+
+def fun_l4_n857()
+ fun_l5_n533
+end
+
+def fun_l4_n858()
+ fun_l5_n320
+end
+
+def fun_l4_n859()
+ fun_l5_n501
+end
+
+def fun_l4_n860()
+ fun_l5_n404
+end
+
+def fun_l4_n861()
+ fun_l5_n849
+end
+
+def fun_l4_n862()
+ fun_l5_n743
+end
+
+def fun_l4_n863()
+ fun_l5_n764
+end
+
+def fun_l4_n864()
+ fun_l5_n956
+end
+
+def fun_l4_n865()
+ fun_l5_n914
+end
+
+def fun_l4_n866()
+ fun_l5_n652
+end
+
+def fun_l4_n867()
+ fun_l5_n30
+end
+
+def fun_l4_n868()
+ fun_l5_n330
+end
+
+def fun_l4_n869()
+ fun_l5_n677
+end
+
+def fun_l4_n870()
+ fun_l5_n988
+end
+
+def fun_l4_n871()
+ fun_l5_n676
+end
+
+def fun_l4_n872()
+ fun_l5_n752
+end
+
+def fun_l4_n873()
+ fun_l5_n636
+end
+
+def fun_l4_n874()
+ fun_l5_n395
+end
+
+def fun_l4_n875()
+ fun_l5_n428
+end
+
+def fun_l4_n876()
+ fun_l5_n83
+end
+
+def fun_l4_n877()
+ fun_l5_n712
+end
+
+def fun_l4_n878()
+ fun_l5_n708
+end
+
+def fun_l4_n879()
+ fun_l5_n418
+end
+
+def fun_l4_n880()
+ fun_l5_n265
+end
+
+def fun_l4_n881()
+ fun_l5_n379
+end
+
+def fun_l4_n882()
+ fun_l5_n758
+end
+
+def fun_l4_n883()
+ fun_l5_n251
+end
+
+def fun_l4_n884()
+ fun_l5_n723
+end
+
+def fun_l4_n885()
+ fun_l5_n216
+end
+
+def fun_l4_n886()
+ fun_l5_n197
+end
+
+def fun_l4_n887()
+ fun_l5_n261
+end
+
+def fun_l4_n888()
+ fun_l5_n62
+end
+
+def fun_l4_n889()
+ fun_l5_n941
+end
+
+def fun_l4_n890()
+ fun_l5_n535
+end
+
+def fun_l4_n891()
+ fun_l5_n727
+end
+
+def fun_l4_n892()
+ fun_l5_n279
+end
+
+def fun_l4_n893()
+ fun_l5_n541
+end
+
+def fun_l4_n894()
+ fun_l5_n684
+end
+
+def fun_l4_n895()
+ fun_l5_n649
+end
+
+def fun_l4_n896()
+ fun_l5_n396
+end
+
+def fun_l4_n897()
+ fun_l5_n992
+end
+
+def fun_l4_n898()
+ fun_l5_n160
+end
+
+def fun_l4_n899()
+ fun_l5_n84
+end
+
+def fun_l4_n900()
+ fun_l5_n318
+end
+
+def fun_l4_n901()
+ fun_l5_n428
+end
+
+def fun_l4_n902()
+ fun_l5_n534
+end
+
+def fun_l4_n903()
+ fun_l5_n25
+end
+
+def fun_l4_n904()
+ fun_l5_n392
+end
+
+def fun_l4_n905()
+ fun_l5_n926
+end
+
+def fun_l4_n906()
+ fun_l5_n724
+end
+
+def fun_l4_n907()
+ fun_l5_n311
+end
+
+def fun_l4_n908()
+ fun_l5_n535
+end
+
+def fun_l4_n909()
+ fun_l5_n179
+end
+
+def fun_l4_n910()
+ fun_l5_n533
+end
+
+def fun_l4_n911()
+ fun_l5_n875
+end
+
+def fun_l4_n912()
+ fun_l5_n105
+end
+
+def fun_l4_n913()
+ fun_l5_n618
+end
+
+def fun_l4_n914()
+ fun_l5_n827
+end
+
+def fun_l4_n915()
+ fun_l5_n555
+end
+
+def fun_l4_n916()
+ fun_l5_n339
+end
+
+def fun_l4_n917()
+ fun_l5_n848
+end
+
+def fun_l4_n918()
+ fun_l5_n676
+end
+
+def fun_l4_n919()
+ fun_l5_n204
+end
+
+def fun_l4_n920()
+ fun_l5_n769
+end
+
+def fun_l4_n921()
+ fun_l5_n229
+end
+
+def fun_l4_n922()
+ fun_l5_n92
+end
+
+def fun_l4_n923()
+ fun_l5_n973
+end
+
+def fun_l4_n924()
+ fun_l5_n700
+end
+
+def fun_l4_n925()
+ fun_l5_n581
+end
+
+def fun_l4_n926()
+ fun_l5_n138
+end
+
+def fun_l4_n927()
+ fun_l5_n43
+end
+
+def fun_l4_n928()
+ fun_l5_n537
+end
+
+def fun_l4_n929()
+ fun_l5_n882
+end
+
+def fun_l4_n930()
+ fun_l5_n871
+end
+
+def fun_l4_n931()
+ fun_l5_n158
+end
+
+def fun_l4_n932()
+ fun_l5_n542
+end
+
+def fun_l4_n933()
+ fun_l5_n468
+end
+
+def fun_l4_n934()
+ fun_l5_n28
+end
+
+def fun_l4_n935()
+ fun_l5_n976
+end
+
+def fun_l4_n936()
+ fun_l5_n632
+end
+
+def fun_l4_n937()
+ fun_l5_n857
+end
+
+def fun_l4_n938()
+ fun_l5_n841
+end
+
+def fun_l4_n939()
+ fun_l5_n762
+end
+
+def fun_l4_n940()
+ fun_l5_n522
+end
+
+def fun_l4_n941()
+ fun_l5_n841
+end
+
+def fun_l4_n942()
+ fun_l5_n42
+end
+
+def fun_l4_n943()
+ fun_l5_n771
+end
+
+def fun_l4_n944()
+ fun_l5_n145
+end
+
+def fun_l4_n945()
+ fun_l5_n435
+end
+
+def fun_l4_n946()
+ fun_l5_n573
+end
+
+def fun_l4_n947()
+ fun_l5_n422
+end
+
+def fun_l4_n948()
+ fun_l5_n34
+end
+
+def fun_l4_n949()
+ fun_l5_n577
+end
+
+def fun_l4_n950()
+ fun_l5_n156
+end
+
+def fun_l4_n951()
+ fun_l5_n707
+end
+
+def fun_l4_n952()
+ fun_l5_n198
+end
+
+def fun_l4_n953()
+ fun_l5_n950
+end
+
+def fun_l4_n954()
+ fun_l5_n474
+end
+
+def fun_l4_n955()
+ fun_l5_n319
+end
+
+def fun_l4_n956()
+ fun_l5_n208
+end
+
+def fun_l4_n957()
+ fun_l5_n360
+end
+
+def fun_l4_n958()
+ fun_l5_n101
+end
+
+def fun_l4_n959()
+ fun_l5_n37
+end
+
+def fun_l4_n960()
+ fun_l5_n20
+end
+
+def fun_l4_n961()
+ fun_l5_n897
+end
+
+def fun_l4_n962()
+ fun_l5_n92
+end
+
+def fun_l4_n963()
+ fun_l5_n105
+end
+
+def fun_l4_n964()
+ fun_l5_n255
+end
+
+def fun_l4_n965()
+ fun_l5_n97
+end
+
+def fun_l4_n966()
+ fun_l5_n398
+end
+
+def fun_l4_n967()
+ fun_l5_n393
+end
+
+def fun_l4_n968()
+ fun_l5_n135
+end
+
+def fun_l4_n969()
+ fun_l5_n306
+end
+
+def fun_l4_n970()
+ fun_l5_n202
+end
+
+def fun_l4_n971()
+ fun_l5_n832
+end
+
+def fun_l4_n972()
+ fun_l5_n444
+end
+
+def fun_l4_n973()
+ fun_l5_n768
+end
+
+def fun_l4_n974()
+ fun_l5_n384
+end
+
+def fun_l4_n975()
+ fun_l5_n142
+end
+
+def fun_l4_n976()
+ fun_l5_n208
+end
+
+def fun_l4_n977()
+ fun_l5_n818
+end
+
+def fun_l4_n978()
+ fun_l5_n5
+end
+
+def fun_l4_n979()
+ fun_l5_n410
+end
+
+def fun_l4_n980()
+ fun_l5_n713
+end
+
+def fun_l4_n981()
+ fun_l5_n42
+end
+
+def fun_l4_n982()
+ fun_l5_n335
+end
+
+def fun_l4_n983()
+ fun_l5_n446
+end
+
+def fun_l4_n984()
+ fun_l5_n957
+end
+
+def fun_l4_n985()
+ fun_l5_n652
+end
+
+def fun_l4_n986()
+ fun_l5_n341
+end
+
+def fun_l4_n987()
+ fun_l5_n300
+end
+
+def fun_l4_n988()
+ fun_l5_n859
+end
+
+def fun_l4_n989()
+ fun_l5_n467
+end
+
+def fun_l4_n990()
+ fun_l5_n182
+end
+
+def fun_l4_n991()
+ fun_l5_n755
+end
+
+def fun_l4_n992()
+ fun_l5_n925
+end
+
+def fun_l4_n993()
+ fun_l5_n695
+end
+
+def fun_l4_n994()
+ fun_l5_n901
+end
+
+def fun_l4_n995()
+ fun_l5_n844
+end
+
+def fun_l4_n996()
+ fun_l5_n430
+end
+
+def fun_l4_n997()
+ fun_l5_n568
+end
+
+def fun_l4_n998()
+ fun_l5_n472
+end
+
+def fun_l4_n999()
+ fun_l5_n871
+end
+
+def fun_l5_n0()
+ fun_l6_n383
+end
+
+def fun_l5_n1()
+ fun_l6_n172
+end
+
+def fun_l5_n2()
+ fun_l6_n405
+end
+
+def fun_l5_n3()
+ fun_l6_n960
+end
+
+def fun_l5_n4()
+ fun_l6_n846
+end
+
+def fun_l5_n5()
+ fun_l6_n207
+end
+
+def fun_l5_n6()
+ fun_l6_n217
+end
+
+def fun_l5_n7()
+ fun_l6_n317
+end
+
+def fun_l5_n8()
+ fun_l6_n628
+end
+
+def fun_l5_n9()
+ fun_l6_n407
+end
+
+def fun_l5_n10()
+ fun_l6_n933
+end
+
+def fun_l5_n11()
+ fun_l6_n318
+end
+
+def fun_l5_n12()
+ fun_l6_n349
+end
+
+def fun_l5_n13()
+ fun_l6_n559
+end
+
+def fun_l5_n14()
+ fun_l6_n352
+end
+
+def fun_l5_n15()
+ fun_l6_n531
+end
+
+def fun_l5_n16()
+ fun_l6_n6
+end
+
+def fun_l5_n17()
+ fun_l6_n285
+end
+
+def fun_l5_n18()
+ fun_l6_n419
+end
+
+def fun_l5_n19()
+ fun_l6_n232
+end
+
+def fun_l5_n20()
+ fun_l6_n285
+end
+
+def fun_l5_n21()
+ fun_l6_n814
+end
+
+def fun_l5_n22()
+ fun_l6_n773
+end
+
+def fun_l5_n23()
+ fun_l6_n771
+end
+
+def fun_l5_n24()
+ fun_l6_n903
+end
+
+def fun_l5_n25()
+ fun_l6_n116
+end
+
+def fun_l5_n26()
+ fun_l6_n116
+end
+
+def fun_l5_n27()
+ fun_l6_n531
+end
+
+def fun_l5_n28()
+ fun_l6_n418
+end
+
+def fun_l5_n29()
+ fun_l6_n564
+end
+
+def fun_l5_n30()
+ fun_l6_n691
+end
+
+def fun_l5_n31()
+ fun_l6_n267
+end
+
+def fun_l5_n32()
+ fun_l6_n209
+end
+
+def fun_l5_n33()
+ fun_l6_n27
+end
+
+def fun_l5_n34()
+ fun_l6_n312
+end
+
+def fun_l5_n35()
+ fun_l6_n240
+end
+
+def fun_l5_n36()
+ fun_l6_n507
+end
+
+def fun_l5_n37()
+ fun_l6_n808
+end
+
+def fun_l5_n38()
+ fun_l6_n28
+end
+
+def fun_l5_n39()
+ fun_l6_n33
+end
+
+def fun_l5_n40()
+ fun_l6_n808
+end
+
+def fun_l5_n41()
+ fun_l6_n15
+end
+
+def fun_l5_n42()
+ fun_l6_n995
+end
+
+def fun_l5_n43()
+ fun_l6_n886
+end
+
+def fun_l5_n44()
+ fun_l6_n164
+end
+
+def fun_l5_n45()
+ fun_l6_n804
+end
+
+def fun_l5_n46()
+ fun_l6_n776
+end
+
+def fun_l5_n47()
+ fun_l6_n584
+end
+
+def fun_l5_n48()
+ fun_l6_n220
+end
+
+def fun_l5_n49()
+ fun_l6_n680
+end
+
+def fun_l5_n50()
+ fun_l6_n438
+end
+
+def fun_l5_n51()
+ fun_l6_n565
+end
+
+def fun_l5_n52()
+ fun_l6_n394
+end
+
+def fun_l5_n53()
+ fun_l6_n867
+end
+
+def fun_l5_n54()
+ fun_l6_n468
+end
+
+def fun_l5_n55()
+ fun_l6_n622
+end
+
+def fun_l5_n56()
+ fun_l6_n846
+end
+
+def fun_l5_n57()
+ fun_l6_n718
+end
+
+def fun_l5_n58()
+ fun_l6_n367
+end
+
+def fun_l5_n59()
+ fun_l6_n284
+end
+
+def fun_l5_n60()
+ fun_l6_n350
+end
+
+def fun_l5_n61()
+ fun_l6_n849
+end
+
+def fun_l5_n62()
+ fun_l6_n537
+end
+
+def fun_l5_n63()
+ fun_l6_n475
+end
+
+def fun_l5_n64()
+ fun_l6_n525
+end
+
+def fun_l5_n65()
+ fun_l6_n416
+end
+
+def fun_l5_n66()
+ fun_l6_n261
+end
+
+def fun_l5_n67()
+ fun_l6_n528
+end
+
+def fun_l5_n68()
+ fun_l6_n331
+end
+
+def fun_l5_n69()
+ fun_l6_n387
+end
+
+def fun_l5_n70()
+ fun_l6_n780
+end
+
+def fun_l5_n71()
+ fun_l6_n542
+end
+
+def fun_l5_n72()
+ fun_l6_n930
+end
+
+def fun_l5_n73()
+ fun_l6_n79
+end
+
+def fun_l5_n74()
+ fun_l6_n351
+end
+
+def fun_l5_n75()
+ fun_l6_n290
+end
+
+def fun_l5_n76()
+ fun_l6_n659
+end
+
+def fun_l5_n77()
+ fun_l6_n421
+end
+
+def fun_l5_n78()
+ fun_l6_n454
+end
+
+def fun_l5_n79()
+ fun_l6_n78
+end
+
+def fun_l5_n80()
+ fun_l6_n63
+end
+
+def fun_l5_n81()
+ fun_l6_n555
+end
+
+def fun_l5_n82()
+ fun_l6_n54
+end
+
+def fun_l5_n83()
+ fun_l6_n46
+end
+
+def fun_l5_n84()
+ fun_l6_n225
+end
+
+def fun_l5_n85()
+ fun_l6_n330
+end
+
+def fun_l5_n86()
+ fun_l6_n772
+end
+
+def fun_l5_n87()
+ fun_l6_n654
+end
+
+def fun_l5_n88()
+ fun_l6_n281
+end
+
+def fun_l5_n89()
+ fun_l6_n857
+end
+
+def fun_l5_n90()
+ fun_l6_n453
+end
+
+def fun_l5_n91()
+ fun_l6_n504
+end
+
+def fun_l5_n92()
+ fun_l6_n649
+end
+
+def fun_l5_n93()
+ fun_l6_n90
+end
+
+def fun_l5_n94()
+ fun_l6_n520
+end
+
+def fun_l5_n95()
+ fun_l6_n251
+end
+
+def fun_l5_n96()
+ fun_l6_n738
+end
+
+def fun_l5_n97()
+ fun_l6_n837
+end
+
+def fun_l5_n98()
+ fun_l6_n98
+end
+
+def fun_l5_n99()
+ fun_l6_n844
+end
+
+def fun_l5_n100()
+ fun_l6_n699
+end
+
+def fun_l5_n101()
+ fun_l6_n901
+end
+
+def fun_l5_n102()
+ fun_l6_n342
+end
+
+def fun_l5_n103()
+ fun_l6_n856
+end
+
+def fun_l5_n104()
+ fun_l6_n113
+end
+
+def fun_l5_n105()
+ fun_l6_n530
+end
+
+def fun_l5_n106()
+ fun_l6_n445
+end
+
+def fun_l5_n107()
+ fun_l6_n515
+end
+
+def fun_l5_n108()
+ fun_l6_n958
+end
+
+def fun_l5_n109()
+ fun_l6_n561
+end
+
+def fun_l5_n110()
+ fun_l6_n130
+end
+
+def fun_l5_n111()
+ fun_l6_n653
+end
+
+def fun_l5_n112()
+ fun_l6_n367
+end
+
+def fun_l5_n113()
+ fun_l6_n515
+end
+
+def fun_l5_n114()
+ fun_l6_n50
+end
+
+def fun_l5_n115()
+ fun_l6_n259
+end
+
+def fun_l5_n116()
+ fun_l6_n280
+end
+
+def fun_l5_n117()
+ fun_l6_n589
+end
+
+def fun_l5_n118()
+ fun_l6_n988
+end
+
+def fun_l5_n119()
+ fun_l6_n544
+end
+
+def fun_l5_n120()
+ fun_l6_n564
+end
+
+def fun_l5_n121()
+ fun_l6_n468
+end
+
+def fun_l5_n122()
+ fun_l6_n586
+end
+
+def fun_l5_n123()
+ fun_l6_n705
+end
+
+def fun_l5_n124()
+ fun_l6_n510
+end
+
+def fun_l5_n125()
+ fun_l6_n995
+end
+
+def fun_l5_n126()
+ fun_l6_n576
+end
+
+def fun_l5_n127()
+ fun_l6_n221
+end
+
+def fun_l5_n128()
+ fun_l6_n498
+end
+
+def fun_l5_n129()
+ fun_l6_n113
+end
+
+def fun_l5_n130()
+ fun_l6_n916
+end
+
+def fun_l5_n131()
+ fun_l6_n626
+end
+
+def fun_l5_n132()
+ fun_l6_n635
+end
+
+def fun_l5_n133()
+ fun_l6_n605
+end
+
+def fun_l5_n134()
+ fun_l6_n931
+end
+
+def fun_l5_n135()
+ fun_l6_n282
+end
+
+def fun_l5_n136()
+ fun_l6_n904
+end
+
+def fun_l5_n137()
+ fun_l6_n522
+end
+
+def fun_l5_n138()
+ fun_l6_n255
+end
+
+def fun_l5_n139()
+ fun_l6_n308
+end
+
+def fun_l5_n140()
+ fun_l6_n482
+end
+
+def fun_l5_n141()
+ fun_l6_n911
+end
+
+def fun_l5_n142()
+ fun_l6_n640
+end
+
+def fun_l5_n143()
+ fun_l6_n783
+end
+
+def fun_l5_n144()
+ fun_l6_n980
+end
+
+def fun_l5_n145()
+ fun_l6_n85
+end
+
+def fun_l5_n146()
+ fun_l6_n181
+end
+
+def fun_l5_n147()
+ fun_l6_n963
+end
+
+def fun_l5_n148()
+ fun_l6_n516
+end
+
+def fun_l5_n149()
+ fun_l6_n315
+end
+
+def fun_l5_n150()
+ fun_l6_n822
+end
+
+def fun_l5_n151()
+ fun_l6_n528
+end
+
+def fun_l5_n152()
+ fun_l6_n220
+end
+
+def fun_l5_n153()
+ fun_l6_n13
+end
+
+def fun_l5_n154()
+ fun_l6_n172
+end
+
+def fun_l5_n155()
+ fun_l6_n987
+end
+
+def fun_l5_n156()
+ fun_l6_n414
+end
+
+def fun_l5_n157()
+ fun_l6_n758
+end
+
+def fun_l5_n158()
+ fun_l6_n889
+end
+
+def fun_l5_n159()
+ fun_l6_n526
+end
+
+def fun_l5_n160()
+ fun_l6_n576
+end
+
+def fun_l5_n161()
+ fun_l6_n35
+end
+
+def fun_l5_n162()
+ fun_l6_n382
+end
+
+def fun_l5_n163()
+ fun_l6_n503
+end
+
+def fun_l5_n164()
+ fun_l6_n950
+end
+
+def fun_l5_n165()
+ fun_l6_n796
+end
+
+def fun_l5_n166()
+ fun_l6_n72
+end
+
+def fun_l5_n167()
+ fun_l6_n258
+end
+
+def fun_l5_n168()
+ fun_l6_n624
+end
+
+def fun_l5_n169()
+ fun_l6_n146
+end
+
+def fun_l5_n170()
+ fun_l6_n202
+end
+
+def fun_l5_n171()
+ fun_l6_n18
+end
+
+def fun_l5_n172()
+ fun_l6_n822
+end
+
+def fun_l5_n173()
+ fun_l6_n839
+end
+
+def fun_l5_n174()
+ fun_l6_n201
+end
+
+def fun_l5_n175()
+ fun_l6_n109
+end
+
+def fun_l5_n176()
+ fun_l6_n265
+end
+
+def fun_l5_n177()
+ fun_l6_n899
+end
+
+def fun_l5_n178()
+ fun_l6_n805
+end
+
+def fun_l5_n179()
+ fun_l6_n245
+end
+
+def fun_l5_n180()
+ fun_l6_n309
+end
+
+def fun_l5_n181()
+ fun_l6_n31
+end
+
+def fun_l5_n182()
+ fun_l6_n642
+end
+
+def fun_l5_n183()
+ fun_l6_n552
+end
+
+def fun_l5_n184()
+ fun_l6_n217
+end
+
+def fun_l5_n185()
+ fun_l6_n382
+end
+
+def fun_l5_n186()
+ fun_l6_n642
+end
+
+def fun_l5_n187()
+ fun_l6_n415
+end
+
+def fun_l5_n188()
+ fun_l6_n246
+end
+
+def fun_l5_n189()
+ fun_l6_n754
+end
+
+def fun_l5_n190()
+ fun_l6_n869
+end
+
+def fun_l5_n191()
+ fun_l6_n944
+end
+
+def fun_l5_n192()
+ fun_l6_n558
+end
+
+def fun_l5_n193()
+ fun_l6_n548
+end
+
+def fun_l5_n194()
+ fun_l6_n156
+end
+
+def fun_l5_n195()
+ fun_l6_n507
+end
+
+def fun_l5_n196()
+ fun_l6_n897
+end
+
+def fun_l5_n197()
+ fun_l6_n297
+end
+
+def fun_l5_n198()
+ fun_l6_n775
+end
+
+def fun_l5_n199()
+ fun_l6_n897
+end
+
+def fun_l5_n200()
+ fun_l6_n232
+end
+
+def fun_l5_n201()
+ fun_l6_n341
+end
+
+def fun_l5_n202()
+ fun_l6_n881
+end
+
+def fun_l5_n203()
+ fun_l6_n757
+end
+
+def fun_l5_n204()
+ fun_l6_n673
+end
+
+def fun_l5_n205()
+ fun_l6_n753
+end
+
+def fun_l5_n206()
+ fun_l6_n191
+end
+
+def fun_l5_n207()
+ fun_l6_n768
+end
+
+def fun_l5_n208()
+ fun_l6_n963
+end
+
+def fun_l5_n209()
+ fun_l6_n102
+end
+
+def fun_l5_n210()
+ fun_l6_n355
+end
+
+def fun_l5_n211()
+ fun_l6_n838
+end
+
+def fun_l5_n212()
+ fun_l6_n388
+end
+
+def fun_l5_n213()
+ fun_l6_n840
+end
+
+def fun_l5_n214()
+ fun_l6_n501
+end
+
+def fun_l5_n215()
+ fun_l6_n792
+end
+
+def fun_l5_n216()
+ fun_l6_n360
+end
+
+def fun_l5_n217()
+ fun_l6_n70
+end
+
+def fun_l5_n218()
+ fun_l6_n887
+end
+
+def fun_l5_n219()
+ fun_l6_n57
+end
+
+def fun_l5_n220()
+ fun_l6_n595
+end
+
+def fun_l5_n221()
+ fun_l6_n988
+end
+
+def fun_l5_n222()
+ fun_l6_n191
+end
+
+def fun_l5_n223()
+ fun_l6_n667
+end
+
+def fun_l5_n224()
+ fun_l6_n410
+end
+
+def fun_l5_n225()
+ fun_l6_n636
+end
+
+def fun_l5_n226()
+ fun_l6_n669
+end
+
+def fun_l5_n227()
+ fun_l6_n980
+end
+
+def fun_l5_n228()
+ fun_l6_n521
+end
+
+def fun_l5_n229()
+ fun_l6_n707
+end
+
+def fun_l5_n230()
+ fun_l6_n757
+end
+
+def fun_l5_n231()
+ fun_l6_n360
+end
+
+def fun_l5_n232()
+ fun_l6_n480
+end
+
+def fun_l5_n233()
+ fun_l6_n8
+end
+
+def fun_l5_n234()
+ fun_l6_n47
+end
+
+def fun_l5_n235()
+ fun_l6_n985
+end
+
+def fun_l5_n236()
+ fun_l6_n331
+end
+
+def fun_l5_n237()
+ fun_l6_n314
+end
+
+def fun_l5_n238()
+ fun_l6_n666
+end
+
+def fun_l5_n239()
+ fun_l6_n289
+end
+
+def fun_l5_n240()
+ fun_l6_n487
+end
+
+def fun_l5_n241()
+ fun_l6_n298
+end
+
+def fun_l5_n242()
+ fun_l6_n460
+end
+
+def fun_l5_n243()
+ fun_l6_n63
+end
+
+def fun_l5_n244()
+ fun_l6_n898
+end
+
+def fun_l5_n245()
+ fun_l6_n706
+end
+
+def fun_l5_n246()
+ fun_l6_n276
+end
+
+def fun_l5_n247()
+ fun_l6_n709
+end
+
+def fun_l5_n248()
+ fun_l6_n60
+end
+
+def fun_l5_n249()
+ fun_l6_n53
+end
+
+def fun_l5_n250()
+ fun_l6_n396
+end
+
+def fun_l5_n251()
+ fun_l6_n124
+end
+
+def fun_l5_n252()
+ fun_l6_n713
+end
+
+def fun_l5_n253()
+ fun_l6_n208
+end
+
+def fun_l5_n254()
+ fun_l6_n345
+end
+
+def fun_l5_n255()
+ fun_l6_n976
+end
+
+def fun_l5_n256()
+ fun_l6_n775
+end
+
+def fun_l5_n257()
+ fun_l6_n20
+end
+
+def fun_l5_n258()
+ fun_l6_n476
+end
+
+def fun_l5_n259()
+ fun_l6_n80
+end
+
+def fun_l5_n260()
+ fun_l6_n160
+end
+
+def fun_l5_n261()
+ fun_l6_n624
+end
+
+def fun_l5_n262()
+ fun_l6_n275
+end
+
+def fun_l5_n263()
+ fun_l6_n301
+end
+
+def fun_l5_n264()
+ fun_l6_n640
+end
+
+def fun_l5_n265()
+ fun_l6_n473
+end
+
+def fun_l5_n266()
+ fun_l6_n991
+end
+
+def fun_l5_n267()
+ fun_l6_n458
+end
+
+def fun_l5_n268()
+ fun_l6_n128
+end
+
+def fun_l5_n269()
+ fun_l6_n28
+end
+
+def fun_l5_n270()
+ fun_l6_n40
+end
+
+def fun_l5_n271()
+ fun_l6_n48
+end
+
+def fun_l5_n272()
+ fun_l6_n916
+end
+
+def fun_l5_n273()
+ fun_l6_n114
+end
+
+def fun_l5_n274()
+ fun_l6_n747
+end
+
+def fun_l5_n275()
+ fun_l6_n239
+end
+
+def fun_l5_n276()
+ fun_l6_n151
+end
+
+def fun_l5_n277()
+ fun_l6_n820
+end
+
+def fun_l5_n278()
+ fun_l6_n684
+end
+
+def fun_l5_n279()
+ fun_l6_n628
+end
+
+def fun_l5_n280()
+ fun_l6_n248
+end
+
+def fun_l5_n281()
+ fun_l6_n793
+end
+
+def fun_l5_n282()
+ fun_l6_n137
+end
+
+def fun_l5_n283()
+ fun_l6_n520
+end
+
+def fun_l5_n284()
+ fun_l6_n750
+end
+
+def fun_l5_n285()
+ fun_l6_n445
+end
+
+def fun_l5_n286()
+ fun_l6_n419
+end
+
+def fun_l5_n287()
+ fun_l6_n681
+end
+
+def fun_l5_n288()
+ fun_l6_n16
+end
+
+def fun_l5_n289()
+ fun_l6_n939
+end
+
+def fun_l5_n290()
+ fun_l6_n664
+end
+
+def fun_l5_n291()
+ fun_l6_n580
+end
+
+def fun_l5_n292()
+ fun_l6_n945
+end
+
+def fun_l5_n293()
+ fun_l6_n129
+end
+
+def fun_l5_n294()
+ fun_l6_n142
+end
+
+def fun_l5_n295()
+ fun_l6_n774
+end
+
+def fun_l5_n296()
+ fun_l6_n667
+end
+
+def fun_l5_n297()
+ fun_l6_n659
+end
+
+def fun_l5_n298()
+ fun_l6_n82
+end
+
+def fun_l5_n299()
+ fun_l6_n452
+end
+
+def fun_l5_n300()
+ fun_l6_n340
+end
+
+def fun_l5_n301()
+ fun_l6_n675
+end
+
+def fun_l5_n302()
+ fun_l6_n506
+end
+
+def fun_l5_n303()
+ fun_l6_n166
+end
+
+def fun_l5_n304()
+ fun_l6_n220
+end
+
+def fun_l5_n305()
+ fun_l6_n894
+end
+
+def fun_l5_n306()
+ fun_l6_n467
+end
+
+def fun_l5_n307()
+ fun_l6_n204
+end
+
+def fun_l5_n308()
+ fun_l6_n580
+end
+
+def fun_l5_n309()
+ fun_l6_n90
+end
+
+def fun_l5_n310()
+ fun_l6_n854
+end
+
+def fun_l5_n311()
+ fun_l6_n384
+end
+
+def fun_l5_n312()
+ fun_l6_n540
+end
+
+def fun_l5_n313()
+ fun_l6_n314
+end
+
+def fun_l5_n314()
+ fun_l6_n90
+end
+
+def fun_l5_n315()
+ fun_l6_n106
+end
+
+def fun_l5_n316()
+ fun_l6_n404
+end
+
+def fun_l5_n317()
+ fun_l6_n396
+end
+
+def fun_l5_n318()
+ fun_l6_n229
+end
+
+def fun_l5_n319()
+ fun_l6_n137
+end
+
+def fun_l5_n320()
+ fun_l6_n781
+end
+
+def fun_l5_n321()
+ fun_l6_n949
+end
+
+def fun_l5_n322()
+ fun_l6_n810
+end
+
+def fun_l5_n323()
+ fun_l6_n574
+end
+
+def fun_l5_n324()
+ fun_l6_n465
+end
+
+def fun_l5_n325()
+ fun_l6_n785
+end
+
+def fun_l5_n326()
+ fun_l6_n408
+end
+
+def fun_l5_n327()
+ fun_l6_n658
+end
+
+def fun_l5_n328()
+ fun_l6_n1
+end
+
+def fun_l5_n329()
+ fun_l6_n586
+end
+
+def fun_l5_n330()
+ fun_l6_n375
+end
+
+def fun_l5_n331()
+ fun_l6_n950
+end
+
+def fun_l5_n332()
+ fun_l6_n924
+end
+
+def fun_l5_n333()
+ fun_l6_n224
+end
+
+def fun_l5_n334()
+ fun_l6_n786
+end
+
+def fun_l5_n335()
+ fun_l6_n184
+end
+
+def fun_l5_n336()
+ fun_l6_n125
+end
+
+def fun_l5_n337()
+ fun_l6_n215
+end
+
+def fun_l5_n338()
+ fun_l6_n110
+end
+
+def fun_l5_n339()
+ fun_l6_n16
+end
+
+def fun_l5_n340()
+ fun_l6_n746
+end
+
+def fun_l5_n341()
+ fun_l6_n50
+end
+
+def fun_l5_n342()
+ fun_l6_n198
+end
+
+def fun_l5_n343()
+ fun_l6_n735
+end
+
+def fun_l5_n344()
+ fun_l6_n260
+end
+
+def fun_l5_n345()
+ fun_l6_n481
+end
+
+def fun_l5_n346()
+ fun_l6_n100
+end
+
+def fun_l5_n347()
+ fun_l6_n581
+end
+
+def fun_l5_n348()
+ fun_l6_n803
+end
+
+def fun_l5_n349()
+ fun_l6_n495
+end
+
+def fun_l5_n350()
+ fun_l6_n316
+end
+
+def fun_l5_n351()
+ fun_l6_n810
+end
+
+def fun_l5_n352()
+ fun_l6_n21
+end
+
+def fun_l5_n353()
+ fun_l6_n409
+end
+
+def fun_l5_n354()
+ fun_l6_n814
+end
+
+def fun_l5_n355()
+ fun_l6_n525
+end
+
+def fun_l5_n356()
+ fun_l6_n445
+end
+
+def fun_l5_n357()
+ fun_l6_n940
+end
+
+def fun_l5_n358()
+ fun_l6_n508
+end
+
+def fun_l5_n359()
+ fun_l6_n511
+end
+
+def fun_l5_n360()
+ fun_l6_n29
+end
+
+def fun_l5_n361()
+ fun_l6_n272
+end
+
+def fun_l5_n362()
+ fun_l6_n715
+end
+
+def fun_l5_n363()
+ fun_l6_n518
+end
+
+def fun_l5_n364()
+ fun_l6_n392
+end
+
+def fun_l5_n365()
+ fun_l6_n762
+end
+
+def fun_l5_n366()
+ fun_l6_n250
+end
+
+def fun_l5_n367()
+ fun_l6_n192
+end
+
+def fun_l5_n368()
+ fun_l6_n741
+end
+
+def fun_l5_n369()
+ fun_l6_n340
+end
+
+def fun_l5_n370()
+ fun_l6_n891
+end
+
+def fun_l5_n371()
+ fun_l6_n22
+end
+
+def fun_l5_n372()
+ fun_l6_n369
+end
+
+def fun_l5_n373()
+ fun_l6_n653
+end
+
+def fun_l5_n374()
+ fun_l6_n282
+end
+
+def fun_l5_n375()
+ fun_l6_n7
+end
+
+def fun_l5_n376()
+ fun_l6_n511
+end
+
+def fun_l5_n377()
+ fun_l6_n511
+end
+
+def fun_l5_n378()
+ fun_l6_n718
+end
+
+def fun_l5_n379()
+ fun_l6_n521
+end
+
+def fun_l5_n380()
+ fun_l6_n331
+end
+
+def fun_l5_n381()
+ fun_l6_n343
+end
+
+def fun_l5_n382()
+ fun_l6_n411
+end
+
+def fun_l5_n383()
+ fun_l6_n780
+end
+
+def fun_l5_n384()
+ fun_l6_n398
+end
+
+def fun_l5_n385()
+ fun_l6_n173
+end
+
+def fun_l5_n386()
+ fun_l6_n693
+end
+
+def fun_l5_n387()
+ fun_l6_n360
+end
+
+def fun_l5_n388()
+ fun_l6_n146
+end
+
+def fun_l5_n389()
+ fun_l6_n796
+end
+
+def fun_l5_n390()
+ fun_l6_n403
+end
+
+def fun_l5_n391()
+ fun_l6_n662
+end
+
+def fun_l5_n392()
+ fun_l6_n281
+end
+
+def fun_l5_n393()
+ fun_l6_n617
+end
+
+def fun_l5_n394()
+ fun_l6_n367
+end
+
+def fun_l5_n395()
+ fun_l6_n433
+end
+
+def fun_l5_n396()
+ fun_l6_n748
+end
+
+def fun_l5_n397()
+ fun_l6_n600
+end
+
+def fun_l5_n398()
+ fun_l6_n490
+end
+
+def fun_l5_n399()
+ fun_l6_n120
+end
+
+def fun_l5_n400()
+ fun_l6_n549
+end
+
+def fun_l5_n401()
+ fun_l6_n148
+end
+
+def fun_l5_n402()
+ fun_l6_n488
+end
+
+def fun_l5_n403()
+ fun_l6_n316
+end
+
+def fun_l5_n404()
+ fun_l6_n106
+end
+
+def fun_l5_n405()
+ fun_l6_n702
+end
+
+def fun_l5_n406()
+ fun_l6_n787
+end
+
+def fun_l5_n407()
+ fun_l6_n9
+end
+
+def fun_l5_n408()
+ fun_l6_n338
+end
+
+def fun_l5_n409()
+ fun_l6_n83
+end
+
+def fun_l5_n410()
+ fun_l6_n234
+end
+
+def fun_l5_n411()
+ fun_l6_n147
+end
+
+def fun_l5_n412()
+ fun_l6_n602
+end
+
+def fun_l5_n413()
+ fun_l6_n173
+end
+
+def fun_l5_n414()
+ fun_l6_n420
+end
+
+def fun_l5_n415()
+ fun_l6_n214
+end
+
+def fun_l5_n416()
+ fun_l6_n400
+end
+
+def fun_l5_n417()
+ fun_l6_n35
+end
+
+def fun_l5_n418()
+ fun_l6_n545
+end
+
+def fun_l5_n419()
+ fun_l6_n823
+end
+
+def fun_l5_n420()
+ fun_l6_n401
+end
+
+def fun_l5_n421()
+ fun_l6_n447
+end
+
+def fun_l5_n422()
+ fun_l6_n461
+end
+
+def fun_l5_n423()
+ fun_l6_n447
+end
+
+def fun_l5_n424()
+ fun_l6_n530
+end
+
+def fun_l5_n425()
+ fun_l6_n104
+end
+
+def fun_l5_n426()
+ fun_l6_n206
+end
+
+def fun_l5_n427()
+ fun_l6_n25
+end
+
+def fun_l5_n428()
+ fun_l6_n867
+end
+
+def fun_l5_n429()
+ fun_l6_n160
+end
+
+def fun_l5_n430()
+ fun_l6_n152
+end
+
+def fun_l5_n431()
+ fun_l6_n308
+end
+
+def fun_l5_n432()
+ fun_l6_n603
+end
+
+def fun_l5_n433()
+ fun_l6_n270
+end
+
+def fun_l5_n434()
+ fun_l6_n397
+end
+
+def fun_l5_n435()
+ fun_l6_n819
+end
+
+def fun_l5_n436()
+ fun_l6_n476
+end
+
+def fun_l5_n437()
+ fun_l6_n533
+end
+
+def fun_l5_n438()
+ fun_l6_n989
+end
+
+def fun_l5_n439()
+ fun_l6_n329
+end
+
+def fun_l5_n440()
+ fun_l6_n216
+end
+
+def fun_l5_n441()
+ fun_l6_n54
+end
+
+def fun_l5_n442()
+ fun_l6_n374
+end
+
+def fun_l5_n443()
+ fun_l6_n544
+end
+
+def fun_l5_n444()
+ fun_l6_n586
+end
+
+def fun_l5_n445()
+ fun_l6_n137
+end
+
+def fun_l5_n446()
+ fun_l6_n115
+end
+
+def fun_l5_n447()
+ fun_l6_n908
+end
+
+def fun_l5_n448()
+ fun_l6_n657
+end
+
+def fun_l5_n449()
+ fun_l6_n876
+end
+
+def fun_l5_n450()
+ fun_l6_n585
+end
+
+def fun_l5_n451()
+ fun_l6_n159
+end
+
+def fun_l5_n452()
+ fun_l6_n66
+end
+
+def fun_l5_n453()
+ fun_l6_n327
+end
+
+def fun_l5_n454()
+ fun_l6_n441
+end
+
+def fun_l5_n455()
+ fun_l6_n399
+end
+
+def fun_l5_n456()
+ fun_l6_n335
+end
+
+def fun_l5_n457()
+ fun_l6_n820
+end
+
+def fun_l5_n458()
+ fun_l6_n494
+end
+
+def fun_l5_n459()
+ fun_l6_n683
+end
+
+def fun_l5_n460()
+ fun_l6_n453
+end
+
+def fun_l5_n461()
+ fun_l6_n202
+end
+
+def fun_l5_n462()
+ fun_l6_n274
+end
+
+def fun_l5_n463()
+ fun_l6_n493
+end
+
+def fun_l5_n464()
+ fun_l6_n874
+end
+
+def fun_l5_n465()
+ fun_l6_n882
+end
+
+def fun_l5_n466()
+ fun_l6_n706
+end
+
+def fun_l5_n467()
+ fun_l6_n356
+end
+
+def fun_l5_n468()
+ fun_l6_n21
+end
+
+def fun_l5_n469()
+ fun_l6_n131
+end
+
+def fun_l5_n470()
+ fun_l6_n818
+end
+
+def fun_l5_n471()
+ fun_l6_n58
+end
+
+def fun_l5_n472()
+ fun_l6_n606
+end
+
+def fun_l5_n473()
+ fun_l6_n368
+end
+
+def fun_l5_n474()
+ fun_l6_n266
+end
+
+def fun_l5_n475()
+ fun_l6_n910
+end
+
+def fun_l5_n476()
+ fun_l6_n406
+end
+
+def fun_l5_n477()
+ fun_l6_n522
+end
+
+def fun_l5_n478()
+ fun_l6_n479
+end
+
+def fun_l5_n479()
+ fun_l6_n247
+end
+
+def fun_l5_n480()
+ fun_l6_n785
+end
+
+def fun_l5_n481()
+ fun_l6_n953
+end
+
+def fun_l5_n482()
+ fun_l6_n443
+end
+
+def fun_l5_n483()
+ fun_l6_n834
+end
+
+def fun_l5_n484()
+ fun_l6_n494
+end
+
+def fun_l5_n485()
+ fun_l6_n65
+end
+
+def fun_l5_n486()
+ fun_l6_n93
+end
+
+def fun_l5_n487()
+ fun_l6_n702
+end
+
+def fun_l5_n488()
+ fun_l6_n571
+end
+
+def fun_l5_n489()
+ fun_l6_n233
+end
+
+def fun_l5_n490()
+ fun_l6_n106
+end
+
+def fun_l5_n491()
+ fun_l6_n806
+end
+
+def fun_l5_n492()
+ fun_l6_n795
+end
+
+def fun_l5_n493()
+ fun_l6_n273
+end
+
+def fun_l5_n494()
+ fun_l6_n943
+end
+
+def fun_l5_n495()
+ fun_l6_n710
+end
+
+def fun_l5_n496()
+ fun_l6_n419
+end
+
+def fun_l5_n497()
+ fun_l6_n758
+end
+
+def fun_l5_n498()
+ fun_l6_n677
+end
+
+def fun_l5_n499()
+ fun_l6_n573
+end
+
+def fun_l5_n500()
+ fun_l6_n576
+end
+
+def fun_l5_n501()
+ fun_l6_n654
+end
+
+def fun_l5_n502()
+ fun_l6_n497
+end
+
+def fun_l5_n503()
+ fun_l6_n75
+end
+
+def fun_l5_n504()
+ fun_l6_n660
+end
+
+def fun_l5_n505()
+ fun_l6_n923
+end
+
+def fun_l5_n506()
+ fun_l6_n250
+end
+
+def fun_l5_n507()
+ fun_l6_n648
+end
+
+def fun_l5_n508()
+ fun_l6_n785
+end
+
+def fun_l5_n509()
+ fun_l6_n158
+end
+
+def fun_l5_n510()
+ fun_l6_n564
+end
+
+def fun_l5_n511()
+ fun_l6_n916
+end
+
+def fun_l5_n512()
+ fun_l6_n943
+end
+
+def fun_l5_n513()
+ fun_l6_n468
+end
+
+def fun_l5_n514()
+ fun_l6_n165
+end
+
+def fun_l5_n515()
+ fun_l6_n566
+end
+
+def fun_l5_n516()
+ fun_l6_n280
+end
+
+def fun_l5_n517()
+ fun_l6_n998
+end
+
+def fun_l5_n518()
+ fun_l6_n282
+end
+
+def fun_l5_n519()
+ fun_l6_n419
+end
+
+def fun_l5_n520()
+ fun_l6_n10
+end
+
+def fun_l5_n521()
+ fun_l6_n298
+end
+
+def fun_l5_n522()
+ fun_l6_n571
+end
+
+def fun_l5_n523()
+ fun_l6_n873
+end
+
+def fun_l5_n524()
+ fun_l6_n165
+end
+
+def fun_l5_n525()
+ fun_l6_n807
+end
+
+def fun_l5_n526()
+ fun_l6_n194
+end
+
+def fun_l5_n527()
+ fun_l6_n410
+end
+
+def fun_l5_n528()
+ fun_l6_n377
+end
+
+def fun_l5_n529()
+ fun_l6_n328
+end
+
+def fun_l5_n530()
+ fun_l6_n322
+end
+
+def fun_l5_n531()
+ fun_l6_n760
+end
+
+def fun_l5_n532()
+ fun_l6_n738
+end
+
+def fun_l5_n533()
+ fun_l6_n388
+end
+
+def fun_l5_n534()
+ fun_l6_n609
+end
+
+def fun_l5_n535()
+ fun_l6_n808
+end
+
+def fun_l5_n536()
+ fun_l6_n686
+end
+
+def fun_l5_n537()
+ fun_l6_n825
+end
+
+def fun_l5_n538()
+ fun_l6_n940
+end
+
+def fun_l5_n539()
+ fun_l6_n147
+end
+
+def fun_l5_n540()
+ fun_l6_n851
+end
+
+def fun_l5_n541()
+ fun_l6_n983
+end
+
+def fun_l5_n542()
+ fun_l6_n938
+end
+
+def fun_l5_n543()
+ fun_l6_n323
+end
+
+def fun_l5_n544()
+ fun_l6_n662
+end
+
+def fun_l5_n545()
+ fun_l6_n611
+end
+
+def fun_l5_n546()
+ fun_l6_n185
+end
+
+def fun_l5_n547()
+ fun_l6_n321
+end
+
+def fun_l5_n548()
+ fun_l6_n353
+end
+
+def fun_l5_n549()
+ fun_l6_n240
+end
+
+def fun_l5_n550()
+ fun_l6_n69
+end
+
+def fun_l5_n551()
+ fun_l6_n58
+end
+
+def fun_l5_n552()
+ fun_l6_n108
+end
+
+def fun_l5_n553()
+ fun_l6_n169
+end
+
+def fun_l5_n554()
+ fun_l6_n649
+end
+
+def fun_l5_n555()
+ fun_l6_n28
+end
+
+def fun_l5_n556()
+ fun_l6_n136
+end
+
+def fun_l5_n557()
+ fun_l6_n958
+end
+
+def fun_l5_n558()
+ fun_l6_n107
+end
+
+def fun_l5_n559()
+ fun_l6_n495
+end
+
+def fun_l5_n560()
+ fun_l6_n927
+end
+
+def fun_l5_n561()
+ fun_l6_n994
+end
+
+def fun_l5_n562()
+ fun_l6_n134
+end
+
+def fun_l5_n563()
+ fun_l6_n393
+end
+
+def fun_l5_n564()
+ fun_l6_n73
+end
+
+def fun_l5_n565()
+ fun_l6_n860
+end
+
+def fun_l5_n566()
+ fun_l6_n763
+end
+
+def fun_l5_n567()
+ fun_l6_n545
+end
+
+def fun_l5_n568()
+ fun_l6_n429
+end
+
+def fun_l5_n569()
+ fun_l6_n430
+end
+
+def fun_l5_n570()
+ fun_l6_n50
+end
+
+def fun_l5_n571()
+ fun_l6_n574
+end
+
+def fun_l5_n572()
+ fun_l6_n195
+end
+
+def fun_l5_n573()
+ fun_l6_n327
+end
+
+def fun_l5_n574()
+ fun_l6_n207
+end
+
+def fun_l5_n575()
+ fun_l6_n669
+end
+
+def fun_l5_n576()
+ fun_l6_n978
+end
+
+def fun_l5_n577()
+ fun_l6_n60
+end
+
+def fun_l5_n578()
+ fun_l6_n561
+end
+
+def fun_l5_n579()
+ fun_l6_n298
+end
+
+def fun_l5_n580()
+ fun_l6_n790
+end
+
+def fun_l5_n581()
+ fun_l6_n887
+end
+
+def fun_l5_n582()
+ fun_l6_n516
+end
+
+def fun_l5_n583()
+ fun_l6_n895
+end
+
+def fun_l5_n584()
+ fun_l6_n345
+end
+
+def fun_l5_n585()
+ fun_l6_n117
+end
+
+def fun_l5_n586()
+ fun_l6_n493
+end
+
+def fun_l5_n587()
+ fun_l6_n84
+end
+
+def fun_l5_n588()
+ fun_l6_n62
+end
+
+def fun_l5_n589()
+ fun_l6_n91
+end
+
+def fun_l5_n590()
+ fun_l6_n113
+end
+
+def fun_l5_n591()
+ fun_l6_n568
+end
+
+def fun_l5_n592()
+ fun_l6_n273
+end
+
+def fun_l5_n593()
+ fun_l6_n557
+end
+
+def fun_l5_n594()
+ fun_l6_n528
+end
+
+def fun_l5_n595()
+ fun_l6_n283
+end
+
+def fun_l5_n596()
+ fun_l6_n962
+end
+
+def fun_l5_n597()
+ fun_l6_n140
+end
+
+def fun_l5_n598()
+ fun_l6_n780
+end
+
+def fun_l5_n599()
+ fun_l6_n220
+end
+
+def fun_l5_n600()
+ fun_l6_n43
+end
+
+def fun_l5_n601()
+ fun_l6_n256
+end
+
+def fun_l5_n602()
+ fun_l6_n619
+end
+
+def fun_l5_n603()
+ fun_l6_n873
+end
+
+def fun_l5_n604()
+ fun_l6_n975
+end
+
+def fun_l5_n605()
+ fun_l6_n308
+end
+
+def fun_l5_n606()
+ fun_l6_n519
+end
+
+def fun_l5_n607()
+ fun_l6_n356
+end
+
+def fun_l5_n608()
+ fun_l6_n7
+end
+
+def fun_l5_n609()
+ fun_l6_n161
+end
+
+def fun_l5_n610()
+ fun_l6_n122
+end
+
+def fun_l5_n611()
+ fun_l6_n311
+end
+
+def fun_l5_n612()
+ fun_l6_n130
+end
+
+def fun_l5_n613()
+ fun_l6_n603
+end
+
+def fun_l5_n614()
+ fun_l6_n53
+end
+
+def fun_l5_n615()
+ fun_l6_n478
+end
+
+def fun_l5_n616()
+ fun_l6_n585
+end
+
+def fun_l5_n617()
+ fun_l6_n639
+end
+
+def fun_l5_n618()
+ fun_l6_n943
+end
+
+def fun_l5_n619()
+ fun_l6_n432
+end
+
+def fun_l5_n620()
+ fun_l6_n959
+end
+
+def fun_l5_n621()
+ fun_l6_n220
+end
+
+def fun_l5_n622()
+ fun_l6_n243
+end
+
+def fun_l5_n623()
+ fun_l6_n755
+end
+
+def fun_l5_n624()
+ fun_l6_n312
+end
+
+def fun_l5_n625()
+ fun_l6_n61
+end
+
+def fun_l5_n626()
+ fun_l6_n290
+end
+
+def fun_l5_n627()
+ fun_l6_n452
+end
+
+def fun_l5_n628()
+ fun_l6_n225
+end
+
+def fun_l5_n629()
+ fun_l6_n69
+end
+
+def fun_l5_n630()
+ fun_l6_n329
+end
+
+def fun_l5_n631()
+ fun_l6_n24
+end
+
+def fun_l5_n632()
+ fun_l6_n798
+end
+
+def fun_l5_n633()
+ fun_l6_n931
+end
+
+def fun_l5_n634()
+ fun_l6_n801
+end
+
+def fun_l5_n635()
+ fun_l6_n725
+end
+
+def fun_l5_n636()
+ fun_l6_n839
+end
+
+def fun_l5_n637()
+ fun_l6_n870
+end
+
+def fun_l5_n638()
+ fun_l6_n847
+end
+
+def fun_l5_n639()
+ fun_l6_n448
+end
+
+def fun_l5_n640()
+ fun_l6_n46
+end
+
+def fun_l5_n641()
+ fun_l6_n359
+end
+
+def fun_l5_n642()
+ fun_l6_n102
+end
+
+def fun_l5_n643()
+ fun_l6_n149
+end
+
+def fun_l5_n644()
+ fun_l6_n126
+end
+
+def fun_l5_n645()
+ fun_l6_n72
+end
+
+def fun_l5_n646()
+ fun_l6_n320
+end
+
+def fun_l5_n647()
+ fun_l6_n483
+end
+
+def fun_l5_n648()
+ fun_l6_n797
+end
+
+def fun_l5_n649()
+ fun_l6_n130
+end
+
+def fun_l5_n650()
+ fun_l6_n711
+end
+
+def fun_l5_n651()
+ fun_l6_n979
+end
+
+def fun_l5_n652()
+ fun_l6_n534
+end
+
+def fun_l5_n653()
+ fun_l6_n335
+end
+
+def fun_l5_n654()
+ fun_l6_n181
+end
+
+def fun_l5_n655()
+ fun_l6_n435
+end
+
+def fun_l5_n656()
+ fun_l6_n412
+end
+
+def fun_l5_n657()
+ fun_l6_n247
+end
+
+def fun_l5_n658()
+ fun_l6_n450
+end
+
+def fun_l5_n659()
+ fun_l6_n367
+end
+
+def fun_l5_n660()
+ fun_l6_n220
+end
+
+def fun_l5_n661()
+ fun_l6_n410
+end
+
+def fun_l5_n662()
+ fun_l6_n739
+end
+
+def fun_l5_n663()
+ fun_l6_n846
+end
+
+def fun_l5_n664()
+ fun_l6_n238
+end
+
+def fun_l5_n665()
+ fun_l6_n419
+end
+
+def fun_l5_n666()
+ fun_l6_n687
+end
+
+def fun_l5_n667()
+ fun_l6_n229
+end
+
+def fun_l5_n668()
+ fun_l6_n129
+end
+
+def fun_l5_n669()
+ fun_l6_n767
+end
+
+def fun_l5_n670()
+ fun_l6_n809
+end
+
+def fun_l5_n671()
+ fun_l6_n301
+end
+
+def fun_l5_n672()
+ fun_l6_n268
+end
+
+def fun_l5_n673()
+ fun_l6_n635
+end
+
+def fun_l5_n674()
+ fun_l6_n623
+end
+
+def fun_l5_n675()
+ fun_l6_n601
+end
+
+def fun_l5_n676()
+ fun_l6_n464
+end
+
+def fun_l5_n677()
+ fun_l6_n285
+end
+
+def fun_l5_n678()
+ fun_l6_n536
+end
+
+def fun_l5_n679()
+ fun_l6_n233
+end
+
+def fun_l5_n680()
+ fun_l6_n78
+end
+
+def fun_l5_n681()
+ fun_l6_n644
+end
+
+def fun_l5_n682()
+ fun_l6_n289
+end
+
+def fun_l5_n683()
+ fun_l6_n314
+end
+
+def fun_l5_n684()
+ fun_l6_n743
+end
+
+def fun_l5_n685()
+ fun_l6_n444
+end
+
+def fun_l5_n686()
+ fun_l6_n645
+end
+
+def fun_l5_n687()
+ fun_l6_n800
+end
+
+def fun_l5_n688()
+ fun_l6_n507
+end
+
+def fun_l5_n689()
+ fun_l6_n675
+end
+
+def fun_l5_n690()
+ fun_l6_n231
+end
+
+def fun_l5_n691()
+ fun_l6_n595
+end
+
+def fun_l5_n692()
+ fun_l6_n675
+end
+
+def fun_l5_n693()
+ fun_l6_n555
+end
+
+def fun_l5_n694()
+ fun_l6_n35
+end
+
+def fun_l5_n695()
+ fun_l6_n342
+end
+
+def fun_l5_n696()
+ fun_l6_n250
+end
+
+def fun_l5_n697()
+ fun_l6_n706
+end
+
+def fun_l5_n698()
+ fun_l6_n550
+end
+
+def fun_l5_n699()
+ fun_l6_n446
+end
+
+def fun_l5_n700()
+ fun_l6_n190
+end
+
+def fun_l5_n701()
+ fun_l6_n404
+end
+
+def fun_l5_n702()
+ fun_l6_n545
+end
+
+def fun_l5_n703()
+ fun_l6_n721
+end
+
+def fun_l5_n704()
+ fun_l6_n681
+end
+
+def fun_l5_n705()
+ fun_l6_n760
+end
+
+def fun_l5_n706()
+ fun_l6_n853
+end
+
+def fun_l5_n707()
+ fun_l6_n847
+end
+
+def fun_l5_n708()
+ fun_l6_n661
+end
+
+def fun_l5_n709()
+ fun_l6_n257
+end
+
+def fun_l5_n710()
+ fun_l6_n151
+end
+
+def fun_l5_n711()
+ fun_l6_n120
+end
+
+def fun_l5_n712()
+ fun_l6_n701
+end
+
+def fun_l5_n713()
+ fun_l6_n89
+end
+
+def fun_l5_n714()
+ fun_l6_n443
+end
+
+def fun_l5_n715()
+ fun_l6_n969
+end
+
+def fun_l5_n716()
+ fun_l6_n879
+end
+
+def fun_l5_n717()
+ fun_l6_n525
+end
+
+def fun_l5_n718()
+ fun_l6_n471
+end
+
+def fun_l5_n719()
+ fun_l6_n762
+end
+
+def fun_l5_n720()
+ fun_l6_n803
+end
+
+def fun_l5_n721()
+ fun_l6_n741
+end
+
+def fun_l5_n722()
+ fun_l6_n279
+end
+
+def fun_l5_n723()
+ fun_l6_n903
+end
+
+def fun_l5_n724()
+ fun_l6_n20
+end
+
+def fun_l5_n725()
+ fun_l6_n930
+end
+
+def fun_l5_n726()
+ fun_l6_n504
+end
+
+def fun_l5_n727()
+ fun_l6_n978
+end
+
+def fun_l5_n728()
+ fun_l6_n304
+end
+
+def fun_l5_n729()
+ fun_l6_n133
+end
+
+def fun_l5_n730()
+ fun_l6_n430
+end
+
+def fun_l5_n731()
+ fun_l6_n917
+end
+
+def fun_l5_n732()
+ fun_l6_n987
+end
+
+def fun_l5_n733()
+ fun_l6_n24
+end
+
+def fun_l5_n734()
+ fun_l6_n884
+end
+
+def fun_l5_n735()
+ fun_l6_n928
+end
+
+def fun_l5_n736()
+ fun_l6_n126
+end
+
+def fun_l5_n737()
+ fun_l6_n425
+end
+
+def fun_l5_n738()
+ fun_l6_n113
+end
+
+def fun_l5_n739()
+ fun_l6_n779
+end
+
+def fun_l5_n740()
+ fun_l6_n649
+end
+
+def fun_l5_n741()
+ fun_l6_n352
+end
+
+def fun_l5_n742()
+ fun_l6_n369
+end
+
+def fun_l5_n743()
+ fun_l6_n13
+end
+
+def fun_l5_n744()
+ fun_l6_n460
+end
+
+def fun_l5_n745()
+ fun_l6_n476
+end
+
+def fun_l5_n746()
+ fun_l6_n146
+end
+
+def fun_l5_n747()
+ fun_l6_n38
+end
+
+def fun_l5_n748()
+ fun_l6_n86
+end
+
+def fun_l5_n749()
+ fun_l6_n875
+end
+
+def fun_l5_n750()
+ fun_l6_n812
+end
+
+def fun_l5_n751()
+ fun_l6_n282
+end
+
+def fun_l5_n752()
+ fun_l6_n474
+end
+
+def fun_l5_n753()
+ fun_l6_n546
+end
+
+def fun_l5_n754()
+ fun_l6_n107
+end
+
+def fun_l5_n755()
+ fun_l6_n550
+end
+
+def fun_l5_n756()
+ fun_l6_n868
+end
+
+def fun_l5_n757()
+ fun_l6_n149
+end
+
+def fun_l5_n758()
+ fun_l6_n662
+end
+
+def fun_l5_n759()
+ fun_l6_n642
+end
+
+def fun_l5_n760()
+ fun_l6_n760
+end
+
+def fun_l5_n761()
+ fun_l6_n530
+end
+
+def fun_l5_n762()
+ fun_l6_n765
+end
+
+def fun_l5_n763()
+ fun_l6_n634
+end
+
+def fun_l5_n764()
+ fun_l6_n946
+end
+
+def fun_l5_n765()
+ fun_l6_n423
+end
+
+def fun_l5_n766()
+ fun_l6_n478
+end
+
+def fun_l5_n767()
+ fun_l6_n142
+end
+
+def fun_l5_n768()
+ fun_l6_n550
+end
+
+def fun_l5_n769()
+ fun_l6_n610
+end
+
+def fun_l5_n770()
+ fun_l6_n340
+end
+
+def fun_l5_n771()
+ fun_l6_n29
+end
+
+def fun_l5_n772()
+ fun_l6_n164
+end
+
+def fun_l5_n773()
+ fun_l6_n476
+end
+
+def fun_l5_n774()
+ fun_l6_n48
+end
+
+def fun_l5_n775()
+ fun_l6_n123
+end
+
+def fun_l5_n776()
+ fun_l6_n879
+end
+
+def fun_l5_n777()
+ fun_l6_n958
+end
+
+def fun_l5_n778()
+ fun_l6_n100
+end
+
+def fun_l5_n779()
+ fun_l6_n927
+end
+
+def fun_l5_n780()
+ fun_l6_n105
+end
+
+def fun_l5_n781()
+ fun_l6_n360
+end
+
+def fun_l5_n782()
+ fun_l6_n327
+end
+
+def fun_l5_n783()
+ fun_l6_n677
+end
+
+def fun_l5_n784()
+ fun_l6_n378
+end
+
+def fun_l5_n785()
+ fun_l6_n9
+end
+
+def fun_l5_n786()
+ fun_l6_n692
+end
+
+def fun_l5_n787()
+ fun_l6_n952
+end
+
+def fun_l5_n788()
+ fun_l6_n156
+end
+
+def fun_l5_n789()
+ fun_l6_n222
+end
+
+def fun_l5_n790()
+ fun_l6_n419
+end
+
+def fun_l5_n791()
+ fun_l6_n128
+end
+
+def fun_l5_n792()
+ fun_l6_n311
+end
+
+def fun_l5_n793()
+ fun_l6_n610
+end
+
+def fun_l5_n794()
+ fun_l6_n897
+end
+
+def fun_l5_n795()
+ fun_l6_n806
+end
+
+def fun_l5_n796()
+ fun_l6_n291
+end
+
+def fun_l5_n797()
+ fun_l6_n942
+end
+
+def fun_l5_n798()
+ fun_l6_n208
+end
+
+def fun_l5_n799()
+ fun_l6_n776
+end
+
+def fun_l5_n800()
+ fun_l6_n866
+end
+
+def fun_l5_n801()
+ fun_l6_n132
+end
+
+def fun_l5_n802()
+ fun_l6_n436
+end
+
+def fun_l5_n803()
+ fun_l6_n804
+end
+
+def fun_l5_n804()
+ fun_l6_n810
+end
+
+def fun_l5_n805()
+ fun_l6_n302
+end
+
+def fun_l5_n806()
+ fun_l6_n501
+end
+
+def fun_l5_n807()
+ fun_l6_n812
+end
+
+def fun_l5_n808()
+ fun_l6_n861
+end
+
+def fun_l5_n809()
+ fun_l6_n359
+end
+
+def fun_l5_n810()
+ fun_l6_n366
+end
+
+def fun_l5_n811()
+ fun_l6_n855
+end
+
+def fun_l5_n812()
+ fun_l6_n960
+end
+
+def fun_l5_n813()
+ fun_l6_n868
+end
+
+def fun_l5_n814()
+ fun_l6_n101
+end
+
+def fun_l5_n815()
+ fun_l6_n540
+end
+
+def fun_l5_n816()
+ fun_l6_n486
+end
+
+def fun_l5_n817()
+ fun_l6_n896
+end
+
+def fun_l5_n818()
+ fun_l6_n240
+end
+
+def fun_l5_n819()
+ fun_l6_n425
+end
+
+def fun_l5_n820()
+ fun_l6_n408
+end
+
+def fun_l5_n821()
+ fun_l6_n779
+end
+
+def fun_l5_n822()
+ fun_l6_n486
+end
+
+def fun_l5_n823()
+ fun_l6_n903
+end
+
+def fun_l5_n824()
+ fun_l6_n957
+end
+
+def fun_l5_n825()
+ fun_l6_n213
+end
+
+def fun_l5_n826()
+ fun_l6_n326
+end
+
+def fun_l5_n827()
+ fun_l6_n944
+end
+
+def fun_l5_n828()
+ fun_l6_n772
+end
+
+def fun_l5_n829()
+ fun_l6_n879
+end
+
+def fun_l5_n830()
+ fun_l6_n406
+end
+
+def fun_l5_n831()
+ fun_l6_n488
+end
+
+def fun_l5_n832()
+ fun_l6_n615
+end
+
+def fun_l5_n833()
+ fun_l6_n113
+end
+
+def fun_l5_n834()
+ fun_l6_n826
+end
+
+def fun_l5_n835()
+ fun_l6_n621
+end
+
+def fun_l5_n836()
+ fun_l6_n520
+end
+
+def fun_l5_n837()
+ fun_l6_n729
+end
+
+def fun_l5_n838()
+ fun_l6_n83
+end
+
+def fun_l5_n839()
+ fun_l6_n616
+end
+
+def fun_l5_n840()
+ fun_l6_n477
+end
+
+def fun_l5_n841()
+ fun_l6_n25
+end
+
+def fun_l5_n842()
+ fun_l6_n391
+end
+
+def fun_l5_n843()
+ fun_l6_n974
+end
+
+def fun_l5_n844()
+ fun_l6_n970
+end
+
+def fun_l5_n845()
+ fun_l6_n316
+end
+
+def fun_l5_n846()
+ fun_l6_n596
+end
+
+def fun_l5_n847()
+ fun_l6_n518
+end
+
+def fun_l5_n848()
+ fun_l6_n437
+end
+
+def fun_l5_n849()
+ fun_l6_n268
+end
+
+def fun_l5_n850()
+ fun_l6_n347
+end
+
+def fun_l5_n851()
+ fun_l6_n110
+end
+
+def fun_l5_n852()
+ fun_l6_n783
+end
+
+def fun_l5_n853()
+ fun_l6_n503
+end
+
+def fun_l5_n854()
+ fun_l6_n56
+end
+
+def fun_l5_n855()
+ fun_l6_n294
+end
+
+def fun_l5_n856()
+ fun_l6_n145
+end
+
+def fun_l5_n857()
+ fun_l6_n627
+end
+
+def fun_l5_n858()
+ fun_l6_n917
+end
+
+def fun_l5_n859()
+ fun_l6_n242
+end
+
+def fun_l5_n860()
+ fun_l6_n35
+end
+
+def fun_l5_n861()
+ fun_l6_n883
+end
+
+def fun_l5_n862()
+ fun_l6_n766
+end
+
+def fun_l5_n863()
+ fun_l6_n877
+end
+
+def fun_l5_n864()
+ fun_l6_n974
+end
+
+def fun_l5_n865()
+ fun_l6_n525
+end
+
+def fun_l5_n866()
+ fun_l6_n490
+end
+
+def fun_l5_n867()
+ fun_l6_n920
+end
+
+def fun_l5_n868()
+ fun_l6_n28
+end
+
+def fun_l5_n869()
+ fun_l6_n855
+end
+
+def fun_l5_n870()
+ fun_l6_n246
+end
+
+def fun_l5_n871()
+ fun_l6_n60
+end
+
+def fun_l5_n872()
+ fun_l6_n868
+end
+
+def fun_l5_n873()
+ fun_l6_n706
+end
+
+def fun_l5_n874()
+ fun_l6_n629
+end
+
+def fun_l5_n875()
+ fun_l6_n44
+end
+
+def fun_l5_n876()
+ fun_l6_n521
+end
+
+def fun_l5_n877()
+ fun_l6_n607
+end
+
+def fun_l5_n878()
+ fun_l6_n385
+end
+
+def fun_l5_n879()
+ fun_l6_n109
+end
+
+def fun_l5_n880()
+ fun_l6_n296
+end
+
+def fun_l5_n881()
+ fun_l6_n466
+end
+
+def fun_l5_n882()
+ fun_l6_n933
+end
+
+def fun_l5_n883()
+ fun_l6_n529
+end
+
+def fun_l5_n884()
+ fun_l6_n863
+end
+
+def fun_l5_n885()
+ fun_l6_n112
+end
+
+def fun_l5_n886()
+ fun_l6_n262
+end
+
+def fun_l5_n887()
+ fun_l6_n853
+end
+
+def fun_l5_n888()
+ fun_l6_n657
+end
+
+def fun_l5_n889()
+ fun_l6_n860
+end
+
+def fun_l5_n890()
+ fun_l6_n878
+end
+
+def fun_l5_n891()
+ fun_l6_n810
+end
+
+def fun_l5_n892()
+ fun_l6_n285
+end
+
+def fun_l5_n893()
+ fun_l6_n319
+end
+
+def fun_l5_n894()
+ fun_l6_n927
+end
+
+def fun_l5_n895()
+ fun_l6_n530
+end
+
+def fun_l5_n896()
+ fun_l6_n874
+end
+
+def fun_l5_n897()
+ fun_l6_n522
+end
+
+def fun_l5_n898()
+ fun_l6_n31
+end
+
+def fun_l5_n899()
+ fun_l6_n292
+end
+
+def fun_l5_n900()
+ fun_l6_n847
+end
+
+def fun_l5_n901()
+ fun_l6_n989
+end
+
+def fun_l5_n902()
+ fun_l6_n435
+end
+
+def fun_l5_n903()
+ fun_l6_n368
+end
+
+def fun_l5_n904()
+ fun_l6_n320
+end
+
+def fun_l5_n905()
+ fun_l6_n889
+end
+
+def fun_l5_n906()
+ fun_l6_n101
+end
+
+def fun_l5_n907()
+ fun_l6_n717
+end
+
+def fun_l5_n908()
+ fun_l6_n456
+end
+
+def fun_l5_n909()
+ fun_l6_n448
+end
+
+def fun_l5_n910()
+ fun_l6_n523
+end
+
+def fun_l5_n911()
+ fun_l6_n604
+end
+
+def fun_l5_n912()
+ fun_l6_n429
+end
+
+def fun_l5_n913()
+ fun_l6_n947
+end
+
+def fun_l5_n914()
+ fun_l6_n804
+end
+
+def fun_l5_n915()
+ fun_l6_n665
+end
+
+def fun_l5_n916()
+ fun_l6_n195
+end
+
+def fun_l5_n917()
+ fun_l6_n803
+end
+
+def fun_l5_n918()
+ fun_l6_n957
+end
+
+def fun_l5_n919()
+ fun_l6_n187
+end
+
+def fun_l5_n920()
+ fun_l6_n489
+end
+
+def fun_l5_n921()
+ fun_l6_n315
+end
+
+def fun_l5_n922()
+ fun_l6_n216
+end
+
+def fun_l5_n923()
+ fun_l6_n482
+end
+
+def fun_l5_n924()
+ fun_l6_n20
+end
+
+def fun_l5_n925()
+ fun_l6_n941
+end
+
+def fun_l5_n926()
+ fun_l6_n73
+end
+
+def fun_l5_n927()
+ fun_l6_n563
+end
+
+def fun_l5_n928()
+ fun_l6_n179
+end
+
+def fun_l5_n929()
+ fun_l6_n861
+end
+
+def fun_l5_n930()
+ fun_l6_n811
+end
+
+def fun_l5_n931()
+ fun_l6_n996
+end
+
+def fun_l5_n932()
+ fun_l6_n25
+end
+
+def fun_l5_n933()
+ fun_l6_n232
+end
+
+def fun_l5_n934()
+ fun_l6_n671
+end
+
+def fun_l5_n935()
+ fun_l6_n162
+end
+
+def fun_l5_n936()
+ fun_l6_n363
+end
+
+def fun_l5_n937()
+ fun_l6_n517
+end
+
+def fun_l5_n938()
+ fun_l6_n655
+end
+
+def fun_l5_n939()
+ fun_l6_n825
+end
+
+def fun_l5_n940()
+ fun_l6_n58
+end
+
+def fun_l5_n941()
+ fun_l6_n440
+end
+
+def fun_l5_n942()
+ fun_l6_n106
+end
+
+def fun_l5_n943()
+ fun_l6_n218
+end
+
+def fun_l5_n944()
+ fun_l6_n580
+end
+
+def fun_l5_n945()
+ fun_l6_n63
+end
+
+def fun_l5_n946()
+ fun_l6_n116
+end
+
+def fun_l5_n947()
+ fun_l6_n329
+end
+
+def fun_l5_n948()
+ fun_l6_n511
+end
+
+def fun_l5_n949()
+ fun_l6_n499
+end
+
+def fun_l5_n950()
+ fun_l6_n469
+end
+
+def fun_l5_n951()
+ fun_l6_n18
+end
+
+def fun_l5_n952()
+ fun_l6_n200
+end
+
+def fun_l5_n953()
+ fun_l6_n924
+end
+
+def fun_l5_n954()
+ fun_l6_n879
+end
+
+def fun_l5_n955()
+ fun_l6_n959
+end
+
+def fun_l5_n956()
+ fun_l6_n867
+end
+
+def fun_l5_n957()
+ fun_l6_n650
+end
+
+def fun_l5_n958()
+ fun_l6_n481
+end
+
+def fun_l5_n959()
+ fun_l6_n892
+end
+
+def fun_l5_n960()
+ fun_l6_n499
+end
+
+def fun_l5_n961()
+ fun_l6_n406
+end
+
+def fun_l5_n962()
+ fun_l6_n762
+end
+
+def fun_l5_n963()
+ fun_l6_n479
+end
+
+def fun_l5_n964()
+ fun_l6_n869
+end
+
+def fun_l5_n965()
+ fun_l6_n321
+end
+
+def fun_l5_n966()
+ fun_l6_n722
+end
+
+def fun_l5_n967()
+ fun_l6_n834
+end
+
+def fun_l5_n968()
+ fun_l6_n873
+end
+
+def fun_l5_n969()
+ fun_l6_n295
+end
+
+def fun_l5_n970()
+ fun_l6_n394
+end
+
+def fun_l5_n971()
+ fun_l6_n944
+end
+
+def fun_l5_n972()
+ fun_l6_n335
+end
+
+def fun_l5_n973()
+ fun_l6_n958
+end
+
+def fun_l5_n974()
+ fun_l6_n159
+end
+
+def fun_l5_n975()
+ fun_l6_n336
+end
+
+def fun_l5_n976()
+ fun_l6_n979
+end
+
+def fun_l5_n977()
+ fun_l6_n106
+end
+
+def fun_l5_n978()
+ fun_l6_n587
+end
+
+def fun_l5_n979()
+ fun_l6_n693
+end
+
+def fun_l5_n980()
+ fun_l6_n633
+end
+
+def fun_l5_n981()
+ fun_l6_n359
+end
+
+def fun_l5_n982()
+ fun_l6_n118
+end
+
+def fun_l5_n983()
+ fun_l6_n689
+end
+
+def fun_l5_n984()
+ fun_l6_n398
+end
+
+def fun_l5_n985()
+ fun_l6_n985
+end
+
+def fun_l5_n986()
+ fun_l6_n381
+end
+
+def fun_l5_n987()
+ fun_l6_n322
+end
+
+def fun_l5_n988()
+ fun_l6_n817
+end
+
+def fun_l5_n989()
+ fun_l6_n793
+end
+
+def fun_l5_n990()
+ fun_l6_n619
+end
+
+def fun_l5_n991()
+ fun_l6_n876
+end
+
+def fun_l5_n992()
+ fun_l6_n390
+end
+
+def fun_l5_n993()
+ fun_l6_n58
+end
+
+def fun_l5_n994()
+ fun_l6_n545
+end
+
+def fun_l5_n995()
+ fun_l6_n364
+end
+
+def fun_l5_n996()
+ fun_l6_n849
+end
+
+def fun_l5_n997()
+ fun_l6_n185
+end
+
+def fun_l5_n998()
+ fun_l6_n56
+end
+
+def fun_l5_n999()
+ fun_l6_n156
+end
+
+def fun_l6_n0()
+ fun_l7_n367
+end
+
+def fun_l6_n1()
+ fun_l7_n681
+end
+
+def fun_l6_n2()
+ fun_l7_n170
+end
+
+def fun_l6_n3()
+ fun_l7_n39
+end
+
+def fun_l6_n4()
+ fun_l7_n320
+end
+
+def fun_l6_n5()
+ fun_l7_n862
+end
+
+def fun_l6_n6()
+ fun_l7_n604
+end
+
+def fun_l6_n7()
+ fun_l7_n816
+end
+
+def fun_l6_n8()
+ fun_l7_n31
+end
+
+def fun_l6_n9()
+ fun_l7_n285
+end
+
+def fun_l6_n10()
+ fun_l7_n74
+end
+
+def fun_l6_n11()
+ fun_l7_n638
+end
+
+def fun_l6_n12()
+ fun_l7_n471
+end
+
+def fun_l6_n13()
+ fun_l7_n909
+end
+
+def fun_l6_n14()
+ fun_l7_n677
+end
+
+def fun_l6_n15()
+ fun_l7_n603
+end
+
+def fun_l6_n16()
+ fun_l7_n670
+end
+
+def fun_l6_n17()
+ fun_l7_n270
+end
+
+def fun_l6_n18()
+ fun_l7_n10
+end
+
+def fun_l6_n19()
+ fun_l7_n963
+end
+
+def fun_l6_n20()
+ fun_l7_n517
+end
+
+def fun_l6_n21()
+ fun_l7_n956
+end
+
+def fun_l6_n22()
+ fun_l7_n13
+end
+
+def fun_l6_n23()
+ fun_l7_n157
+end
+
+def fun_l6_n24()
+ fun_l7_n828
+end
+
+def fun_l6_n25()
+ fun_l7_n895
+end
+
+def fun_l6_n26()
+ fun_l7_n48
+end
+
+def fun_l6_n27()
+ fun_l7_n760
+end
+
+def fun_l6_n28()
+ fun_l7_n674
+end
+
+def fun_l6_n29()
+ fun_l7_n639
+end
+
+def fun_l6_n30()
+ fun_l7_n395
+end
+
+def fun_l6_n31()
+ fun_l7_n541
+end
+
+def fun_l6_n32()
+ fun_l7_n548
+end
+
+def fun_l6_n33()
+ fun_l7_n348
+end
+
+def fun_l6_n34()
+ fun_l7_n257
+end
+
+def fun_l6_n35()
+ fun_l7_n531
+end
+
+def fun_l6_n36()
+ fun_l7_n210
+end
+
+def fun_l6_n37()
+ fun_l7_n56
+end
+
+def fun_l6_n38()
+ fun_l7_n466
+end
+
+def fun_l6_n39()
+ fun_l7_n369
+end
+
+def fun_l6_n40()
+ fun_l7_n465
+end
+
+def fun_l6_n41()
+ fun_l7_n665
+end
+
+def fun_l6_n42()
+ fun_l7_n662
+end
+
+def fun_l6_n43()
+ fun_l7_n205
+end
+
+def fun_l6_n44()
+ fun_l7_n997
+end
+
+def fun_l6_n45()
+ fun_l7_n840
+end
+
+def fun_l6_n46()
+ fun_l7_n998
+end
+
+def fun_l6_n47()
+ fun_l7_n563
+end
+
+def fun_l6_n48()
+ fun_l7_n442
+end
+
+def fun_l6_n49()
+ fun_l7_n768
+end
+
+def fun_l6_n50()
+ fun_l7_n948
+end
+
+def fun_l6_n51()
+ fun_l7_n773
+end
+
+def fun_l6_n52()
+ fun_l7_n910
+end
+
+def fun_l6_n53()
+ fun_l7_n152
+end
+
+def fun_l6_n54()
+ fun_l7_n277
+end
+
+def fun_l6_n55()
+ fun_l7_n139
+end
+
+def fun_l6_n56()
+ fun_l7_n530
+end
+
+def fun_l6_n57()
+ fun_l7_n587
+end
+
+def fun_l6_n58()
+ fun_l7_n650
+end
+
+def fun_l6_n59()
+ fun_l7_n30
+end
+
+def fun_l6_n60()
+ fun_l7_n31
+end
+
+def fun_l6_n61()
+ fun_l7_n908
+end
+
+def fun_l6_n62()
+ fun_l7_n228
+end
+
+def fun_l6_n63()
+ fun_l7_n210
+end
+
+def fun_l6_n64()
+ fun_l7_n854
+end
+
+def fun_l6_n65()
+ fun_l7_n198
+end
+
+def fun_l6_n66()
+ fun_l7_n183
+end
+
+def fun_l6_n67()
+ fun_l7_n633
+end
+
+def fun_l6_n68()
+ fun_l7_n523
+end
+
+def fun_l6_n69()
+ fun_l7_n392
+end
+
+def fun_l6_n70()
+ fun_l7_n293
+end
+
+def fun_l6_n71()
+ fun_l7_n523
+end
+
+def fun_l6_n72()
+ fun_l7_n314
+end
+
+def fun_l6_n73()
+ fun_l7_n500
+end
+
+def fun_l6_n74()
+ fun_l7_n685
+end
+
+def fun_l6_n75()
+ fun_l7_n692
+end
+
+def fun_l6_n76()
+ fun_l7_n773
+end
+
+def fun_l6_n77()
+ fun_l7_n582
+end
+
+def fun_l6_n78()
+ fun_l7_n934
+end
+
+def fun_l6_n79()
+ fun_l7_n829
+end
+
+def fun_l6_n80()
+ fun_l7_n603
+end
+
+def fun_l6_n81()
+ fun_l7_n735
+end
+
+def fun_l6_n82()
+ fun_l7_n906
+end
+
+def fun_l6_n83()
+ fun_l7_n828
+end
+
+def fun_l6_n84()
+ fun_l7_n945
+end
+
+def fun_l6_n85()
+ fun_l7_n316
+end
+
+def fun_l6_n86()
+ fun_l7_n135
+end
+
+def fun_l6_n87()
+ fun_l7_n444
+end
+
+def fun_l6_n88()
+ fun_l7_n300
+end
+
+def fun_l6_n89()
+ fun_l7_n975
+end
+
+def fun_l6_n90()
+ fun_l7_n385
+end
+
+def fun_l6_n91()
+ fun_l7_n885
+end
+
+def fun_l6_n92()
+ fun_l7_n838
+end
+
+def fun_l6_n93()
+ fun_l7_n769
+end
+
+def fun_l6_n94()
+ fun_l7_n263
+end
+
+def fun_l6_n95()
+ fun_l7_n719
+end
+
+def fun_l6_n96()
+ fun_l7_n585
+end
+
+def fun_l6_n97()
+ fun_l7_n238
+end
+
+def fun_l6_n98()
+ fun_l7_n366
+end
+
+def fun_l6_n99()
+ fun_l7_n498
+end
+
+def fun_l6_n100()
+ fun_l7_n596
+end
+
+def fun_l6_n101()
+ fun_l7_n437
+end
+
+def fun_l6_n102()
+ fun_l7_n441
+end
+
+def fun_l6_n103()
+ fun_l7_n721
+end
+
+def fun_l6_n104()
+ fun_l7_n9
+end
+
+def fun_l6_n105()
+ fun_l7_n412
+end
+
+def fun_l6_n106()
+ fun_l7_n981
+end
+
+def fun_l6_n107()
+ fun_l7_n824
+end
+
+def fun_l6_n108()
+ fun_l7_n255
+end
+
+def fun_l6_n109()
+ fun_l7_n608
+end
+
+def fun_l6_n110()
+ fun_l7_n481
+end
+
+def fun_l6_n111()
+ fun_l7_n804
+end
+
+def fun_l6_n112()
+ fun_l7_n316
+end
+
+def fun_l6_n113()
+ fun_l7_n446
+end
+
+def fun_l6_n114()
+ fun_l7_n123
+end
+
+def fun_l6_n115()
+ fun_l7_n522
+end
+
+def fun_l6_n116()
+ fun_l7_n52
+end
+
+def fun_l6_n117()
+ fun_l7_n559
+end
+
+def fun_l6_n118()
+ fun_l7_n937
+end
+
+def fun_l6_n119()
+ fun_l7_n425
+end
+
+def fun_l6_n120()
+ fun_l7_n112
+end
+
+def fun_l6_n121()
+ fun_l7_n83
+end
+
+def fun_l6_n122()
+ fun_l7_n305
+end
+
+def fun_l6_n123()
+ fun_l7_n157
+end
+
+def fun_l6_n124()
+ fun_l7_n944
+end
+
+def fun_l6_n125()
+ fun_l7_n356
+end
+
+def fun_l6_n126()
+ fun_l7_n69
+end
+
+def fun_l6_n127()
+ fun_l7_n689
+end
+
+def fun_l6_n128()
+ fun_l7_n145
+end
+
+def fun_l6_n129()
+ fun_l7_n633
+end
+
+def fun_l6_n130()
+ fun_l7_n389
+end
+
+def fun_l6_n131()
+ fun_l7_n646
+end
+
+def fun_l6_n132()
+ fun_l7_n684
+end
+
+def fun_l6_n133()
+ fun_l7_n38
+end
+
+def fun_l6_n134()
+ fun_l7_n104
+end
+
+def fun_l6_n135()
+ fun_l7_n856
+end
+
+def fun_l6_n136()
+ fun_l7_n237
+end
+
+def fun_l6_n137()
+ fun_l7_n594
+end
+
+def fun_l6_n138()
+ fun_l7_n929
+end
+
+def fun_l6_n139()
+ fun_l7_n686
+end
+
+def fun_l6_n140()
+ fun_l7_n501
+end
+
+def fun_l6_n141()
+ fun_l7_n309
+end
+
+def fun_l6_n142()
+ fun_l7_n567
+end
+
+def fun_l6_n143()
+ fun_l7_n451
+end
+
+def fun_l6_n144()
+ fun_l7_n325
+end
+
+def fun_l6_n145()
+ fun_l7_n363
+end
+
+def fun_l6_n146()
+ fun_l7_n650
+end
+
+def fun_l6_n147()
+ fun_l7_n551
+end
+
+def fun_l6_n148()
+ fun_l7_n495
+end
+
+def fun_l6_n149()
+ fun_l7_n998
+end
+
+def fun_l6_n150()
+ fun_l7_n584
+end
+
+def fun_l6_n151()
+ fun_l7_n36
+end
+
+def fun_l6_n152()
+ fun_l7_n109
+end
+
+def fun_l6_n153()
+ fun_l7_n855
+end
+
+def fun_l6_n154()
+ fun_l7_n544
+end
+
+def fun_l6_n155()
+ fun_l7_n580
+end
+
+def fun_l6_n156()
+ fun_l7_n872
+end
+
+def fun_l6_n157()
+ fun_l7_n954
+end
+
+def fun_l6_n158()
+ fun_l7_n14
+end
+
+def fun_l6_n159()
+ fun_l7_n802
+end
+
+def fun_l6_n160()
+ fun_l7_n298
+end
+
+def fun_l6_n161()
+ fun_l7_n876
+end
+
+def fun_l6_n162()
+ fun_l7_n694
+end
+
+def fun_l6_n163()
+ fun_l7_n538
+end
+
+def fun_l6_n164()
+ fun_l7_n325
+end
+
+def fun_l6_n165()
+ fun_l7_n47
+end
+
+def fun_l6_n166()
+ fun_l7_n433
+end
+
+def fun_l6_n167()
+ fun_l7_n356
+end
+
+def fun_l6_n168()
+ fun_l7_n81
+end
+
+def fun_l6_n169()
+ fun_l7_n10
+end
+
+def fun_l6_n170()
+ fun_l7_n391
+end
+
+def fun_l6_n171()
+ fun_l7_n770
+end
+
+def fun_l6_n172()
+ fun_l7_n45
+end
+
+def fun_l6_n173()
+ fun_l7_n808
+end
+
+def fun_l6_n174()
+ fun_l7_n722
+end
+
+def fun_l6_n175()
+ fun_l7_n532
+end
+
+def fun_l6_n176()
+ fun_l7_n983
+end
+
+def fun_l6_n177()
+ fun_l7_n666
+end
+
+def fun_l6_n178()
+ fun_l7_n505
+end
+
+def fun_l6_n179()
+ fun_l7_n200
+end
+
+def fun_l6_n180()
+ fun_l7_n57
+end
+
+def fun_l6_n181()
+ fun_l7_n888
+end
+
+def fun_l6_n182()
+ fun_l7_n288
+end
+
+def fun_l6_n183()
+ fun_l7_n435
+end
+
+def fun_l6_n184()
+ fun_l7_n330
+end
+
+def fun_l6_n185()
+ fun_l7_n432
+end
+
+def fun_l6_n186()
+ fun_l7_n321
+end
+
+def fun_l6_n187()
+ fun_l7_n160
+end
+
+def fun_l6_n188()
+ fun_l7_n806
+end
+
+def fun_l6_n189()
+ fun_l7_n929
+end
+
+def fun_l6_n190()
+ fun_l7_n49
+end
+
+def fun_l6_n191()
+ fun_l7_n642
+end
+
+def fun_l6_n192()
+ fun_l7_n551
+end
+
+def fun_l6_n193()
+ fun_l7_n243
+end
+
+def fun_l6_n194()
+ fun_l7_n126
+end
+
+def fun_l6_n195()
+ fun_l7_n594
+end
+
+def fun_l6_n196()
+ fun_l7_n166
+end
+
+def fun_l6_n197()
+ fun_l7_n610
+end
+
+def fun_l6_n198()
+ fun_l7_n730
+end
+
+def fun_l6_n199()
+ fun_l7_n770
+end
+
+def fun_l6_n200()
+ fun_l7_n873
+end
+
+def fun_l6_n201()
+ fun_l7_n833
+end
+
+def fun_l6_n202()
+ fun_l7_n883
+end
+
+def fun_l6_n203()
+ fun_l7_n639
+end
+
+def fun_l6_n204()
+ fun_l7_n563
+end
+
+def fun_l6_n205()
+ fun_l7_n437
+end
+
+def fun_l6_n206()
+ fun_l7_n722
+end
+
+def fun_l6_n207()
+ fun_l7_n785
+end
+
+def fun_l6_n208()
+ fun_l7_n241
+end
+
+def fun_l6_n209()
+ fun_l7_n42
+end
+
+def fun_l6_n210()
+ fun_l7_n352
+end
+
+def fun_l6_n211()
+ fun_l7_n633
+end
+
+def fun_l6_n212()
+ fun_l7_n758
+end
+
+def fun_l6_n213()
+ fun_l7_n194
+end
+
+def fun_l6_n214()
+ fun_l7_n864
+end
+
+def fun_l6_n215()
+ fun_l7_n407
+end
+
+def fun_l6_n216()
+ fun_l7_n78
+end
+
+def fun_l6_n217()
+ fun_l7_n723
+end
+
+def fun_l6_n218()
+ fun_l7_n98
+end
+
+def fun_l6_n219()
+ fun_l7_n909
+end
+
+def fun_l6_n220()
+ fun_l7_n380
+end
+
+def fun_l6_n221()
+ fun_l7_n348
+end
+
+def fun_l6_n222()
+ fun_l7_n934
+end
+
+def fun_l6_n223()
+ fun_l7_n114
+end
+
+def fun_l6_n224()
+ fun_l7_n34
+end
+
+def fun_l6_n225()
+ fun_l7_n774
+end
+
+def fun_l6_n226()
+ fun_l7_n681
+end
+
+def fun_l6_n227()
+ fun_l7_n215
+end
+
+def fun_l6_n228()
+ fun_l7_n526
+end
+
+def fun_l6_n229()
+ fun_l7_n38
+end
+
+def fun_l6_n230()
+ fun_l7_n506
+end
+
+def fun_l6_n231()
+ fun_l7_n456
+end
+
+def fun_l6_n232()
+ fun_l7_n476
+end
+
+def fun_l6_n233()
+ fun_l7_n183
+end
+
+def fun_l6_n234()
+ fun_l7_n73
+end
+
+def fun_l6_n235()
+ fun_l7_n639
+end
+
+def fun_l6_n236()
+ fun_l7_n344
+end
+
+def fun_l6_n237()
+ fun_l7_n656
+end
+
+def fun_l6_n238()
+ fun_l7_n887
+end
+
+def fun_l6_n239()
+ fun_l7_n705
+end
+
+def fun_l6_n240()
+ fun_l7_n342
+end
+
+def fun_l6_n241()
+ fun_l7_n461
+end
+
+def fun_l6_n242()
+ fun_l7_n215
+end
+
+def fun_l6_n243()
+ fun_l7_n74
+end
+
+def fun_l6_n244()
+ fun_l7_n715
+end
+
+def fun_l6_n245()
+ fun_l7_n317
+end
+
+def fun_l6_n246()
+ fun_l7_n238
+end
+
+def fun_l6_n247()
+ fun_l7_n899
+end
+
+def fun_l6_n248()
+ fun_l7_n360
+end
+
+def fun_l6_n249()
+ fun_l7_n753
+end
+
+def fun_l6_n250()
+ fun_l7_n722
+end
+
+def fun_l6_n251()
+ fun_l7_n649
+end
+
+def fun_l6_n252()
+ fun_l7_n640
+end
+
+def fun_l6_n253()
+ fun_l7_n146
+end
+
+def fun_l6_n254()
+ fun_l7_n385
+end
+
+def fun_l6_n255()
+ fun_l7_n483
+end
+
+def fun_l6_n256()
+ fun_l7_n142
+end
+
+def fun_l6_n257()
+ fun_l7_n815
+end
+
+def fun_l6_n258()
+ fun_l7_n499
+end
+
+def fun_l6_n259()
+ fun_l7_n827
+end
+
+def fun_l6_n260()
+ fun_l7_n799
+end
+
+def fun_l6_n261()
+ fun_l7_n633
+end
+
+def fun_l6_n262()
+ fun_l7_n399
+end
+
+def fun_l6_n263()
+ fun_l7_n123
+end
+
+def fun_l6_n264()
+ fun_l7_n94
+end
+
+def fun_l6_n265()
+ fun_l7_n799
+end
+
+def fun_l6_n266()
+ fun_l7_n884
+end
+
+def fun_l6_n267()
+ fun_l7_n983
+end
+
+def fun_l6_n268()
+ fun_l7_n880
+end
+
+def fun_l6_n269()
+ fun_l7_n58
+end
+
+def fun_l6_n270()
+ fun_l7_n181
+end
+
+def fun_l6_n271()
+ fun_l7_n241
+end
+
+def fun_l6_n272()
+ fun_l7_n971
+end
+
+def fun_l6_n273()
+ fun_l7_n297
+end
+
+def fun_l6_n274()
+ fun_l7_n435
+end
+
+def fun_l6_n275()
+ fun_l7_n57
+end
+
+def fun_l6_n276()
+ fun_l7_n665
+end
+
+def fun_l6_n277()
+ fun_l7_n725
+end
+
+def fun_l6_n278()
+ fun_l7_n258
+end
+
+def fun_l6_n279()
+ fun_l7_n680
+end
+
+def fun_l6_n280()
+ fun_l7_n969
+end
+
+def fun_l6_n281()
+ fun_l7_n714
+end
+
+def fun_l6_n282()
+ fun_l7_n166
+end
+
+def fun_l6_n283()
+ fun_l7_n876
+end
+
+def fun_l6_n284()
+ fun_l7_n893
+end
+
+def fun_l6_n285()
+ fun_l7_n530
+end
+
+def fun_l6_n286()
+ fun_l7_n552
+end
+
+def fun_l6_n287()
+ fun_l7_n212
+end
+
+def fun_l6_n288()
+ fun_l7_n194
+end
+
+def fun_l6_n289()
+ fun_l7_n375
+end
+
+def fun_l6_n290()
+ fun_l7_n726
+end
+
+def fun_l6_n291()
+ fun_l7_n498
+end
+
+def fun_l6_n292()
+ fun_l7_n630
+end
+
+def fun_l6_n293()
+ fun_l7_n781
+end
+
+def fun_l6_n294()
+ fun_l7_n122
+end
+
+def fun_l6_n295()
+ fun_l7_n864
+end
+
+def fun_l6_n296()
+ fun_l7_n931
+end
+
+def fun_l6_n297()
+ fun_l7_n561
+end
+
+def fun_l6_n298()
+ fun_l7_n891
+end
+
+def fun_l6_n299()
+ fun_l7_n149
+end
+
+def fun_l6_n300()
+ fun_l7_n697
+end
+
+def fun_l6_n301()
+ fun_l7_n152
+end
+
+def fun_l6_n302()
+ fun_l7_n973
+end
+
+def fun_l6_n303()
+ fun_l7_n32
+end
+
+def fun_l6_n304()
+ fun_l7_n254
+end
+
+def fun_l6_n305()
+ fun_l7_n68
+end
+
+def fun_l6_n306()
+ fun_l7_n46
+end
+
+def fun_l6_n307()
+ fun_l7_n2
+end
+
+def fun_l6_n308()
+ fun_l7_n862
+end
+
+def fun_l6_n309()
+ fun_l7_n722
+end
+
+def fun_l6_n310()
+ fun_l7_n501
+end
+
+def fun_l6_n311()
+ fun_l7_n779
+end
+
+def fun_l6_n312()
+ fun_l7_n899
+end
+
+def fun_l6_n313()
+ fun_l7_n209
+end
+
+def fun_l6_n314()
+ fun_l7_n445
+end
+
+def fun_l6_n315()
+ fun_l7_n882
+end
+
+def fun_l6_n316()
+ fun_l7_n825
+end
+
+def fun_l6_n317()
+ fun_l7_n52
+end
+
+def fun_l6_n318()
+ fun_l7_n813
+end
+
+def fun_l6_n319()
+ fun_l7_n103
+end
+
+def fun_l6_n320()
+ fun_l7_n480
+end
+
+def fun_l6_n321()
+ fun_l7_n357
+end
+
+def fun_l6_n322()
+ fun_l7_n138
+end
+
+def fun_l6_n323()
+ fun_l7_n277
+end
+
+def fun_l6_n324()
+ fun_l7_n287
+end
+
+def fun_l6_n325()
+ fun_l7_n822
+end
+
+def fun_l6_n326()
+ fun_l7_n299
+end
+
+def fun_l6_n327()
+ fun_l7_n617
+end
+
+def fun_l6_n328()
+ fun_l7_n618
+end
+
+def fun_l6_n329()
+ fun_l7_n721
+end
+
+def fun_l6_n330()
+ fun_l7_n600
+end
+
+def fun_l6_n331()
+ fun_l7_n349
+end
+
+def fun_l6_n332()
+ fun_l7_n978
+end
+
+def fun_l6_n333()
+ fun_l7_n889
+end
+
+def fun_l6_n334()
+ fun_l7_n129
+end
+
+def fun_l6_n335()
+ fun_l7_n404
+end
+
+def fun_l6_n336()
+ fun_l7_n169
+end
+
+def fun_l6_n337()
+ fun_l7_n498
+end
+
+def fun_l6_n338()
+ fun_l7_n428
+end
+
+def fun_l6_n339()
+ fun_l7_n910
+end
+
+def fun_l6_n340()
+ fun_l7_n441
+end
+
+def fun_l6_n341()
+ fun_l7_n649
+end
+
+def fun_l6_n342()
+ fun_l7_n251
+end
+
+def fun_l6_n343()
+ fun_l7_n146
+end
+
+def fun_l6_n344()
+ fun_l7_n979
+end
+
+def fun_l6_n345()
+ fun_l7_n561
+end
+
+def fun_l6_n346()
+ fun_l7_n667
+end
+
+def fun_l6_n347()
+ fun_l7_n50
+end
+
+def fun_l6_n348()
+ fun_l7_n324
+end
+
+def fun_l6_n349()
+ fun_l7_n60
+end
+
+def fun_l6_n350()
+ fun_l7_n292
+end
+
+def fun_l6_n351()
+ fun_l7_n227
+end
+
+def fun_l6_n352()
+ fun_l7_n99
+end
+
+def fun_l6_n353()
+ fun_l7_n124
+end
+
+def fun_l6_n354()
+ fun_l7_n519
+end
+
+def fun_l6_n355()
+ fun_l7_n245
+end
+
+def fun_l6_n356()
+ fun_l7_n438
+end
+
+def fun_l6_n357()
+ fun_l7_n916
+end
+
+def fun_l6_n358()
+ fun_l7_n865
+end
+
+def fun_l6_n359()
+ fun_l7_n886
+end
+
+def fun_l6_n360()
+ fun_l7_n432
+end
+
+def fun_l6_n361()
+ fun_l7_n406
+end
+
+def fun_l6_n362()
+ fun_l7_n709
+end
+
+def fun_l6_n363()
+ fun_l7_n271
+end
+
+def fun_l6_n364()
+ fun_l7_n320
+end
+
+def fun_l6_n365()
+ fun_l7_n3
+end
+
+def fun_l6_n366()
+ fun_l7_n831
+end
+
+def fun_l6_n367()
+ fun_l7_n417
+end
+
+def fun_l6_n368()
+ fun_l7_n949
+end
+
+def fun_l6_n369()
+ fun_l7_n941
+end
+
+def fun_l6_n370()
+ fun_l7_n404
+end
+
+def fun_l6_n371()
+ fun_l7_n715
+end
+
+def fun_l6_n372()
+ fun_l7_n223
+end
+
+def fun_l6_n373()
+ fun_l7_n813
+end
+
+def fun_l6_n374()
+ fun_l7_n594
+end
+
+def fun_l6_n375()
+ fun_l7_n949
+end
+
+def fun_l6_n376()
+ fun_l7_n107
+end
+
+def fun_l6_n377()
+ fun_l7_n951
+end
+
+def fun_l6_n378()
+ fun_l7_n940
+end
+
+def fun_l6_n379()
+ fun_l7_n224
+end
+
+def fun_l6_n380()
+ fun_l7_n82
+end
+
+def fun_l6_n381()
+ fun_l7_n815
+end
+
+def fun_l6_n382()
+ fun_l7_n443
+end
+
+def fun_l6_n383()
+ fun_l7_n566
+end
+
+def fun_l6_n384()
+ fun_l7_n954
+end
+
+def fun_l6_n385()
+ fun_l7_n562
+end
+
+def fun_l6_n386()
+ fun_l7_n9
+end
+
+def fun_l6_n387()
+ fun_l7_n233
+end
+
+def fun_l6_n388()
+ fun_l7_n510
+end
+
+def fun_l6_n389()
+ fun_l7_n616
+end
+
+def fun_l6_n390()
+ fun_l7_n991
+end
+
+def fun_l6_n391()
+ fun_l7_n184
+end
+
+def fun_l6_n392()
+ fun_l7_n288
+end
+
+def fun_l6_n393()
+ fun_l7_n282
+end
+
+def fun_l6_n394()
+ fun_l7_n81
+end
+
+def fun_l6_n395()
+ fun_l7_n567
+end
+
+def fun_l6_n396()
+ fun_l7_n465
+end
+
+def fun_l6_n397()
+ fun_l7_n856
+end
+
+def fun_l6_n398()
+ fun_l7_n268
+end
+
+def fun_l6_n399()
+ fun_l7_n695
+end
+
+def fun_l6_n400()
+ fun_l7_n403
+end
+
+def fun_l6_n401()
+ fun_l7_n153
+end
+
+def fun_l6_n402()
+ fun_l7_n321
+end
+
+def fun_l6_n403()
+ fun_l7_n233
+end
+
+def fun_l6_n404()
+ fun_l7_n218
+end
+
+def fun_l6_n405()
+ fun_l7_n285
+end
+
+def fun_l6_n406()
+ fun_l7_n829
+end
+
+def fun_l6_n407()
+ fun_l7_n218
+end
+
+def fun_l6_n408()
+ fun_l7_n457
+end
+
+def fun_l6_n409()
+ fun_l7_n513
+end
+
+def fun_l6_n410()
+ fun_l7_n677
+end
+
+def fun_l6_n411()
+ fun_l7_n849
+end
+
+def fun_l6_n412()
+ fun_l7_n579
+end
+
+def fun_l6_n413()
+ fun_l7_n160
+end
+
+def fun_l6_n414()
+ fun_l7_n567
+end
+
+def fun_l6_n415()
+ fun_l7_n394
+end
+
+def fun_l6_n416()
+ fun_l7_n480
+end
+
+def fun_l6_n417()
+ fun_l7_n234
+end
+
+def fun_l6_n418()
+ fun_l7_n410
+end
+
+def fun_l6_n419()
+ fun_l7_n405
+end
+
+def fun_l6_n420()
+ fun_l7_n497
+end
+
+def fun_l6_n421()
+ fun_l7_n242
+end
+
+def fun_l6_n422()
+ fun_l7_n190
+end
+
+def fun_l6_n423()
+ fun_l7_n513
+end
+
+def fun_l6_n424()
+ fun_l7_n790
+end
+
+def fun_l6_n425()
+ fun_l7_n112
+end
+
+def fun_l6_n426()
+ fun_l7_n792
+end
+
+def fun_l6_n427()
+ fun_l7_n209
+end
+
+def fun_l6_n428()
+ fun_l7_n451
+end
+
+def fun_l6_n429()
+ fun_l7_n897
+end
+
+def fun_l6_n430()
+ fun_l7_n884
+end
+
+def fun_l6_n431()
+ fun_l7_n81
+end
+
+def fun_l6_n432()
+ fun_l7_n764
+end
+
+def fun_l6_n433()
+ fun_l7_n204
+end
+
+def fun_l6_n434()
+ fun_l7_n56
+end
+
+def fun_l6_n435()
+ fun_l7_n394
+end
+
+def fun_l6_n436()
+ fun_l7_n903
+end
+
+def fun_l6_n437()
+ fun_l7_n423
+end
+
+def fun_l6_n438()
+ fun_l7_n899
+end
+
+def fun_l6_n439()
+ fun_l7_n40
+end
+
+def fun_l6_n440()
+ fun_l7_n145
+end
+
+def fun_l6_n441()
+ fun_l7_n811
+end
+
+def fun_l6_n442()
+ fun_l7_n821
+end
+
+def fun_l6_n443()
+ fun_l7_n675
+end
+
+def fun_l6_n444()
+ fun_l7_n665
+end
+
+def fun_l6_n445()
+ fun_l7_n1
+end
+
+def fun_l6_n446()
+ fun_l7_n936
+end
+
+def fun_l6_n447()
+ fun_l7_n838
+end
+
+def fun_l6_n448()
+ fun_l7_n820
+end
+
+def fun_l6_n449()
+ fun_l7_n206
+end
+
+def fun_l6_n450()
+ fun_l7_n234
+end
+
+def fun_l6_n451()
+ fun_l7_n150
+end
+
+def fun_l6_n452()
+ fun_l7_n699
+end
+
+def fun_l6_n453()
+ fun_l7_n369
+end
+
+def fun_l6_n454()
+ fun_l7_n759
+end
+
+def fun_l6_n455()
+ fun_l7_n836
+end
+
+def fun_l6_n456()
+ fun_l7_n55
+end
+
+def fun_l6_n457()
+ fun_l7_n457
+end
+
+def fun_l6_n458()
+ fun_l7_n623
+end
+
+def fun_l6_n459()
+ fun_l7_n679
+end
+
+def fun_l6_n460()
+ fun_l7_n199
+end
+
+def fun_l6_n461()
+ fun_l7_n738
+end
+
+def fun_l6_n462()
+ fun_l7_n479
+end
+
+def fun_l6_n463()
+ fun_l7_n673
+end
+
+def fun_l6_n464()
+ fun_l7_n323
+end
+
+def fun_l6_n465()
+ fun_l7_n652
+end
+
+def fun_l6_n466()
+ fun_l7_n470
+end
+
+def fun_l6_n467()
+ fun_l7_n133
+end
+
+def fun_l6_n468()
+ fun_l7_n179
+end
+
+def fun_l6_n469()
+ fun_l7_n647
+end
+
+def fun_l6_n470()
+ fun_l7_n869
+end
+
+def fun_l6_n471()
+ fun_l7_n553
+end
+
+def fun_l6_n472()
+ fun_l7_n173
+end
+
+def fun_l6_n473()
+ fun_l7_n188
+end
+
+def fun_l6_n474()
+ fun_l7_n530
+end
+
+def fun_l6_n475()
+ fun_l7_n233
+end
+
+def fun_l6_n476()
+ fun_l7_n46
+end
+
+def fun_l6_n477()
+ fun_l7_n892
+end
+
+def fun_l6_n478()
+ fun_l7_n879
+end
+
+def fun_l6_n479()
+ fun_l7_n507
+end
+
+def fun_l6_n480()
+ fun_l7_n383
+end
+
+def fun_l6_n481()
+ fun_l7_n500
+end
+
+def fun_l6_n482()
+ fun_l7_n595
+end
+
+def fun_l6_n483()
+ fun_l7_n225
+end
+
+def fun_l6_n484()
+ fun_l7_n396
+end
+
+def fun_l6_n485()
+ fun_l7_n61
+end
+
+def fun_l6_n486()
+ fun_l7_n953
+end
+
+def fun_l6_n487()
+ fun_l7_n891
+end
+
+def fun_l6_n488()
+ fun_l7_n620
+end
+
+def fun_l6_n489()
+ fun_l7_n672
+end
+
+def fun_l6_n490()
+ fun_l7_n824
+end
+
+def fun_l6_n491()
+ fun_l7_n216
+end
+
+def fun_l6_n492()
+ fun_l7_n404
+end
+
+def fun_l6_n493()
+ fun_l7_n428
+end
+
+def fun_l6_n494()
+ fun_l7_n907
+end
+
+def fun_l6_n495()
+ fun_l7_n297
+end
+
+def fun_l6_n496()
+ fun_l7_n349
+end
+
+def fun_l6_n497()
+ fun_l7_n291
+end
+
+def fun_l6_n498()
+ fun_l7_n642
+end
+
+def fun_l6_n499()
+ fun_l7_n906
+end
+
+def fun_l6_n500()
+ fun_l7_n78
+end
+
+def fun_l6_n501()
+ fun_l7_n568
+end
+
+def fun_l6_n502()
+ fun_l7_n591
+end
+
+def fun_l6_n503()
+ fun_l7_n921
+end
+
+def fun_l6_n504()
+ fun_l7_n832
+end
+
+def fun_l6_n505()
+ fun_l7_n826
+end
+
+def fun_l6_n506()
+ fun_l7_n930
+end
+
+def fun_l6_n507()
+ fun_l7_n791
+end
+
+def fun_l6_n508()
+ fun_l7_n608
+end
+
+def fun_l6_n509()
+ fun_l7_n144
+end
+
+def fun_l6_n510()
+ fun_l7_n202
+end
+
+def fun_l6_n511()
+ fun_l7_n379
+end
+
+def fun_l6_n512()
+ fun_l7_n354
+end
+
+def fun_l6_n513()
+ fun_l7_n245
+end
+
+def fun_l6_n514()
+ fun_l7_n402
+end
+
+def fun_l6_n515()
+ fun_l7_n875
+end
+
+def fun_l6_n516()
+ fun_l7_n847
+end
+
+def fun_l6_n517()
+ fun_l7_n736
+end
+
+def fun_l6_n518()
+ fun_l7_n325
+end
+
+def fun_l6_n519()
+ fun_l7_n949
+end
+
+def fun_l6_n520()
+ fun_l7_n993
+end
+
+def fun_l6_n521()
+ fun_l7_n271
+end
+
+def fun_l6_n522()
+ fun_l7_n799
+end
+
+def fun_l6_n523()
+ fun_l7_n861
+end
+
+def fun_l6_n524()
+ fun_l7_n164
+end
+
+def fun_l6_n525()
+ fun_l7_n293
+end
+
+def fun_l6_n526()
+ fun_l7_n948
+end
+
+def fun_l6_n527()
+ fun_l7_n682
+end
+
+def fun_l6_n528()
+ fun_l7_n914
+end
+
+def fun_l6_n529()
+ fun_l7_n395
+end
+
+def fun_l6_n530()
+ fun_l7_n399
+end
+
+def fun_l6_n531()
+ fun_l7_n220
+end
+
+def fun_l6_n532()
+ fun_l7_n874
+end
+
+def fun_l6_n533()
+ fun_l7_n504
+end
+
+def fun_l6_n534()
+ fun_l7_n713
+end
+
+def fun_l6_n535()
+ fun_l7_n185
+end
+
+def fun_l6_n536()
+ fun_l7_n229
+end
+
+def fun_l6_n537()
+ fun_l7_n696
+end
+
+def fun_l6_n538()
+ fun_l7_n840
+end
+
+def fun_l6_n539()
+ fun_l7_n323
+end
+
+def fun_l6_n540()
+ fun_l7_n342
+end
+
+def fun_l6_n541()
+ fun_l7_n60
+end
+
+def fun_l6_n542()
+ fun_l7_n149
+end
+
+def fun_l6_n543()
+ fun_l7_n465
+end
+
+def fun_l6_n544()
+ fun_l7_n392
+end
+
+def fun_l6_n545()
+ fun_l7_n210
+end
+
+def fun_l6_n546()
+ fun_l7_n565
+end
+
+def fun_l6_n547()
+ fun_l7_n63
+end
+
+def fun_l6_n548()
+ fun_l7_n722
+end
+
+def fun_l6_n549()
+ fun_l7_n119
+end
+
+def fun_l6_n550()
+ fun_l7_n933
+end
+
+def fun_l6_n551()
+ fun_l7_n612
+end
+
+def fun_l6_n552()
+ fun_l7_n479
+end
+
+def fun_l6_n553()
+ fun_l7_n866
+end
+
+def fun_l6_n554()
+ fun_l7_n268
+end
+
+def fun_l6_n555()
+ fun_l7_n547
+end
+
+def fun_l6_n556()
+ fun_l7_n621
+end
+
+def fun_l6_n557()
+ fun_l7_n461
+end
+
+def fun_l6_n558()
+ fun_l7_n907
+end
+
+def fun_l6_n559()
+ fun_l7_n660
+end
+
+def fun_l6_n560()
+ fun_l7_n857
+end
+
+def fun_l6_n561()
+ fun_l7_n398
+end
+
+def fun_l6_n562()
+ fun_l7_n484
+end
+
+def fun_l6_n563()
+ fun_l7_n16
+end
+
+def fun_l6_n564()
+ fun_l7_n697
+end
+
+def fun_l6_n565()
+ fun_l7_n135
+end
+
+def fun_l6_n566()
+ fun_l7_n265
+end
+
+def fun_l6_n567()
+ fun_l7_n627
+end
+
+def fun_l6_n568()
+ fun_l7_n345
+end
+
+def fun_l6_n569()
+ fun_l7_n528
+end
+
+def fun_l6_n570()
+ fun_l7_n926
+end
+
+def fun_l6_n571()
+ fun_l7_n198
+end
+
+def fun_l6_n572()
+ fun_l7_n837
+end
+
+def fun_l6_n573()
+ fun_l7_n95
+end
+
+def fun_l6_n574()
+ fun_l7_n802
+end
+
+def fun_l6_n575()
+ fun_l7_n265
+end
+
+def fun_l6_n576()
+ fun_l7_n884
+end
+
+def fun_l6_n577()
+ fun_l7_n227
+end
+
+def fun_l6_n578()
+ fun_l7_n915
+end
+
+def fun_l6_n579()
+ fun_l7_n221
+end
+
+def fun_l6_n580()
+ fun_l7_n718
+end
+
+def fun_l6_n581()
+ fun_l7_n179
+end
+
+def fun_l6_n582()
+ fun_l7_n975
+end
+
+def fun_l6_n583()
+ fun_l7_n207
+end
+
+def fun_l6_n584()
+ fun_l7_n874
+end
+
+def fun_l6_n585()
+ fun_l7_n540
+end
+
+def fun_l6_n586()
+ fun_l7_n765
+end
+
+def fun_l6_n587()
+ fun_l7_n613
+end
+
+def fun_l6_n588()
+ fun_l7_n853
+end
+
+def fun_l6_n589()
+ fun_l7_n241
+end
+
+def fun_l6_n590()
+ fun_l7_n91
+end
+
+def fun_l6_n591()
+ fun_l7_n383
+end
+
+def fun_l6_n592()
+ fun_l7_n567
+end
+
+def fun_l6_n593()
+ fun_l7_n144
+end
+
+def fun_l6_n594()
+ fun_l7_n663
+end
+
+def fun_l6_n595()
+ fun_l7_n674
+end
+
+def fun_l6_n596()
+ fun_l7_n407
+end
+
+def fun_l6_n597()
+ fun_l7_n207
+end
+
+def fun_l6_n598()
+ fun_l7_n746
+end
+
+def fun_l6_n599()
+ fun_l7_n24
+end
+
+def fun_l6_n600()
+ fun_l7_n150
+end
+
+def fun_l6_n601()
+ fun_l7_n317
+end
+
+def fun_l6_n602()
+ fun_l7_n773
+end
+
+def fun_l6_n603()
+ fun_l7_n932
+end
+
+def fun_l6_n604()
+ fun_l7_n772
+end
+
+def fun_l6_n605()
+ fun_l7_n495
+end
+
+def fun_l6_n606()
+ fun_l7_n526
+end
+
+def fun_l6_n607()
+ fun_l7_n758
+end
+
+def fun_l6_n608()
+ fun_l7_n941
+end
+
+def fun_l6_n609()
+ fun_l7_n998
+end
+
+def fun_l6_n610()
+ fun_l7_n543
+end
+
+def fun_l6_n611()
+ fun_l7_n216
+end
+
+def fun_l6_n612()
+ fun_l7_n445
+end
+
+def fun_l6_n613()
+ fun_l7_n314
+end
+
+def fun_l6_n614()
+ fun_l7_n840
+end
+
+def fun_l6_n615()
+ fun_l7_n722
+end
+
+def fun_l6_n616()
+ fun_l7_n89
+end
+
+def fun_l6_n617()
+ fun_l7_n353
+end
+
+def fun_l6_n618()
+ fun_l7_n800
+end
+
+def fun_l6_n619()
+ fun_l7_n736
+end
+
+def fun_l6_n620()
+ fun_l7_n376
+end
+
+def fun_l6_n621()
+ fun_l7_n24
+end
+
+def fun_l6_n622()
+ fun_l7_n258
+end
+
+def fun_l6_n623()
+ fun_l7_n943
+end
+
+def fun_l6_n624()
+ fun_l7_n963
+end
+
+def fun_l6_n625()
+ fun_l7_n709
+end
+
+def fun_l6_n626()
+ fun_l7_n350
+end
+
+def fun_l6_n627()
+ fun_l7_n322
+end
+
+def fun_l6_n628()
+ fun_l7_n717
+end
+
+def fun_l6_n629()
+ fun_l7_n529
+end
+
+def fun_l6_n630()
+ fun_l7_n365
+end
+
+def fun_l6_n631()
+ fun_l7_n977
+end
+
+def fun_l6_n632()
+ fun_l7_n606
+end
+
+def fun_l6_n633()
+ fun_l7_n712
+end
+
+def fun_l6_n634()
+ fun_l7_n559
+end
+
+def fun_l6_n635()
+ fun_l7_n499
+end
+
+def fun_l6_n636()
+ fun_l7_n871
+end
+
+def fun_l6_n637()
+ fun_l7_n684
+end
+
+def fun_l6_n638()
+ fun_l7_n558
+end
+
+def fun_l6_n639()
+ fun_l7_n333
+end
+
+def fun_l6_n640()
+ fun_l7_n37
+end
+
+def fun_l6_n641()
+ fun_l7_n559
+end
+
+def fun_l6_n642()
+ fun_l7_n17
+end
+
+def fun_l6_n643()
+ fun_l7_n913
+end
+
+def fun_l6_n644()
+ fun_l7_n79
+end
+
+def fun_l6_n645()
+ fun_l7_n402
+end
+
+def fun_l6_n646()
+ fun_l7_n268
+end
+
+def fun_l6_n647()
+ fun_l7_n797
+end
+
+def fun_l6_n648()
+ fun_l7_n985
+end
+
+def fun_l6_n649()
+ fun_l7_n192
+end
+
+def fun_l6_n650()
+ fun_l7_n774
+end
+
+def fun_l6_n651()
+ fun_l7_n805
+end
+
+def fun_l6_n652()
+ fun_l7_n208
+end
+
+def fun_l6_n653()
+ fun_l7_n608
+end
+
+def fun_l6_n654()
+ fun_l7_n714
+end
+
+def fun_l6_n655()
+ fun_l7_n883
+end
+
+def fun_l6_n656()
+ fun_l7_n841
+end
+
+def fun_l6_n657()
+ fun_l7_n646
+end
+
+def fun_l6_n658()
+ fun_l7_n39
+end
+
+def fun_l6_n659()
+ fun_l7_n432
+end
+
+def fun_l6_n660()
+ fun_l7_n177
+end
+
+def fun_l6_n661()
+ fun_l7_n700
+end
+
+def fun_l6_n662()
+ fun_l7_n815
+end
+
+def fun_l6_n663()
+ fun_l7_n553
+end
+
+def fun_l6_n664()
+ fun_l7_n540
+end
+
+def fun_l6_n665()
+ fun_l7_n853
+end
+
+def fun_l6_n666()
+ fun_l7_n526
+end
+
+def fun_l6_n667()
+ fun_l7_n670
+end
+
+def fun_l6_n668()
+ fun_l7_n753
+end
+
+def fun_l6_n669()
+ fun_l7_n811
+end
+
+def fun_l6_n670()
+ fun_l7_n782
+end
+
+def fun_l6_n671()
+ fun_l7_n275
+end
+
+def fun_l6_n672()
+ fun_l7_n884
+end
+
+def fun_l6_n673()
+ fun_l7_n984
+end
+
+def fun_l6_n674()
+ fun_l7_n980
+end
+
+def fun_l6_n675()
+ fun_l7_n341
+end
+
+def fun_l6_n676()
+ fun_l7_n346
+end
+
+def fun_l6_n677()
+ fun_l7_n164
+end
+
+def fun_l6_n678()
+ fun_l7_n600
+end
+
+def fun_l6_n679()
+ fun_l7_n351
+end
+
+def fun_l6_n680()
+ fun_l7_n527
+end
+
+def fun_l6_n681()
+ fun_l7_n206
+end
+
+def fun_l6_n682()
+ fun_l7_n50
+end
+
+def fun_l6_n683()
+ fun_l7_n476
+end
+
+def fun_l6_n684()
+ fun_l7_n684
+end
+
+def fun_l6_n685()
+ fun_l7_n883
+end
+
+def fun_l6_n686()
+ fun_l7_n41
+end
+
+def fun_l6_n687()
+ fun_l7_n382
+end
+
+def fun_l6_n688()
+ fun_l7_n418
+end
+
+def fun_l6_n689()
+ fun_l7_n22
+end
+
+def fun_l6_n690()
+ fun_l7_n543
+end
+
+def fun_l6_n691()
+ fun_l7_n143
+end
+
+def fun_l6_n692()
+ fun_l7_n120
+end
+
+def fun_l6_n693()
+ fun_l7_n431
+end
+
+def fun_l6_n694()
+ fun_l7_n405
+end
+
+def fun_l6_n695()
+ fun_l7_n474
+end
+
+def fun_l6_n696()
+ fun_l7_n117
+end
+
+def fun_l6_n697()
+ fun_l7_n475
+end
+
+def fun_l6_n698()
+ fun_l7_n674
+end
+
+def fun_l6_n699()
+ fun_l7_n398
+end
+
+def fun_l6_n700()
+ fun_l7_n709
+end
+
+def fun_l6_n701()
+ fun_l7_n360
+end
+
+def fun_l6_n702()
+ fun_l7_n241
+end
+
+def fun_l6_n703()
+ fun_l7_n837
+end
+
+def fun_l6_n704()
+ fun_l7_n483
+end
+
+def fun_l6_n705()
+ fun_l7_n943
+end
+
+def fun_l6_n706()
+ fun_l7_n292
+end
+
+def fun_l6_n707()
+ fun_l7_n659
+end
+
+def fun_l6_n708()
+ fun_l7_n657
+end
+
+def fun_l6_n709()
+ fun_l7_n143
+end
+
+def fun_l6_n710()
+ fun_l7_n883
+end
+
+def fun_l6_n711()
+ fun_l7_n764
+end
+
+def fun_l6_n712()
+ fun_l7_n421
+end
+
+def fun_l6_n713()
+ fun_l7_n611
+end
+
+def fun_l6_n714()
+ fun_l7_n657
+end
+
+def fun_l6_n715()
+ fun_l7_n765
+end
+
+def fun_l6_n716()
+ fun_l7_n793
+end
+
+def fun_l6_n717()
+ fun_l7_n752
+end
+
+def fun_l6_n718()
+ fun_l7_n713
+end
+
+def fun_l6_n719()
+ fun_l7_n577
+end
+
+def fun_l6_n720()
+ fun_l7_n422
+end
+
+def fun_l6_n721()
+ fun_l7_n368
+end
+
+def fun_l6_n722()
+ fun_l7_n2
+end
+
+def fun_l6_n723()
+ fun_l7_n739
+end
+
+def fun_l6_n724()
+ fun_l7_n481
+end
+
+def fun_l6_n725()
+ fun_l7_n516
+end
+
+def fun_l6_n726()
+ fun_l7_n266
+end
+
+def fun_l6_n727()
+ fun_l7_n269
+end
+
+def fun_l6_n728()
+ fun_l7_n308
+end
+
+def fun_l6_n729()
+ fun_l7_n915
+end
+
+def fun_l6_n730()
+ fun_l7_n603
+end
+
+def fun_l6_n731()
+ fun_l7_n585
+end
+
+def fun_l6_n732()
+ fun_l7_n182
+end
+
+def fun_l6_n733()
+ fun_l7_n28
+end
+
+def fun_l6_n734()
+ fun_l7_n829
+end
+
+def fun_l6_n735()
+ fun_l7_n365
+end
+
+def fun_l6_n736()
+ fun_l7_n208
+end
+
+def fun_l6_n737()
+ fun_l7_n395
+end
+
+def fun_l6_n738()
+ fun_l7_n745
+end
+
+def fun_l6_n739()
+ fun_l7_n90
+end
+
+def fun_l6_n740()
+ fun_l7_n696
+end
+
+def fun_l6_n741()
+ fun_l7_n730
+end
+
+def fun_l6_n742()
+ fun_l7_n143
+end
+
+def fun_l6_n743()
+ fun_l7_n753
+end
+
+def fun_l6_n744()
+ fun_l7_n484
+end
+
+def fun_l6_n745()
+ fun_l7_n779
+end
+
+def fun_l6_n746()
+ fun_l7_n668
+end
+
+def fun_l6_n747()
+ fun_l7_n331
+end
+
+def fun_l6_n748()
+ fun_l7_n961
+end
+
+def fun_l6_n749()
+ fun_l7_n875
+end
+
+def fun_l6_n750()
+ fun_l7_n541
+end
+
+def fun_l6_n751()
+ fun_l7_n122
+end
+
+def fun_l6_n752()
+ fun_l7_n278
+end
+
+def fun_l6_n753()
+ fun_l7_n510
+end
+
+def fun_l6_n754()
+ fun_l7_n619
+end
+
+def fun_l6_n755()
+ fun_l7_n165
+end
+
+def fun_l6_n756()
+ fun_l7_n537
+end
+
+def fun_l6_n757()
+ fun_l7_n917
+end
+
+def fun_l6_n758()
+ fun_l7_n102
+end
+
+def fun_l6_n759()
+ fun_l7_n504
+end
+
+def fun_l6_n760()
+ fun_l7_n768
+end
+
+def fun_l6_n761()
+ fun_l7_n259
+end
+
+def fun_l6_n762()
+ fun_l7_n371
+end
+
+def fun_l6_n763()
+ fun_l7_n727
+end
+
+def fun_l6_n764()
+ fun_l7_n959
+end
+
+def fun_l6_n765()
+ fun_l7_n191
+end
+
+def fun_l6_n766()
+ fun_l7_n570
+end
+
+def fun_l6_n767()
+ fun_l7_n746
+end
+
+def fun_l6_n768()
+ fun_l7_n133
+end
+
+def fun_l6_n769()
+ fun_l7_n520
+end
+
+def fun_l6_n770()
+ fun_l7_n602
+end
+
+def fun_l6_n771()
+ fun_l7_n722
+end
+
+def fun_l6_n772()
+ fun_l7_n165
+end
+
+def fun_l6_n773()
+ fun_l7_n132
+end
+
+def fun_l6_n774()
+ fun_l7_n328
+end
+
+def fun_l6_n775()
+ fun_l7_n88
+end
+
+def fun_l6_n776()
+ fun_l7_n296
+end
+
+def fun_l6_n777()
+ fun_l7_n389
+end
+
+def fun_l6_n778()
+ fun_l7_n433
+end
+
+def fun_l6_n779()
+ fun_l7_n525
+end
+
+def fun_l6_n780()
+ fun_l7_n736
+end
+
+def fun_l6_n781()
+ fun_l7_n300
+end
+
+def fun_l6_n782()
+ fun_l7_n663
+end
+
+def fun_l6_n783()
+ fun_l7_n33
+end
+
+def fun_l6_n784()
+ fun_l7_n964
+end
+
+def fun_l6_n785()
+ fun_l7_n459
+end
+
+def fun_l6_n786()
+ fun_l7_n397
+end
+
+def fun_l6_n787()
+ fun_l7_n453
+end
+
+def fun_l6_n788()
+ fun_l7_n951
+end
+
+def fun_l6_n789()
+ fun_l7_n485
+end
+
+def fun_l6_n790()
+ fun_l7_n480
+end
+
+def fun_l6_n791()
+ fun_l7_n663
+end
+
+def fun_l6_n792()
+ fun_l7_n245
+end
+
+def fun_l6_n793()
+ fun_l7_n933
+end
+
+def fun_l6_n794()
+ fun_l7_n253
+end
+
+def fun_l6_n795()
+ fun_l7_n746
+end
+
+def fun_l6_n796()
+ fun_l7_n242
+end
+
+def fun_l6_n797()
+ fun_l7_n435
+end
+
+def fun_l6_n798()
+ fun_l7_n982
+end
+
+def fun_l6_n799()
+ fun_l7_n516
+end
+
+def fun_l6_n800()
+ fun_l7_n118
+end
+
+def fun_l6_n801()
+ fun_l7_n787
+end
+
+def fun_l6_n802()
+ fun_l7_n13
+end
+
+def fun_l6_n803()
+ fun_l7_n381
+end
+
+def fun_l6_n804()
+ fun_l7_n601
+end
+
+def fun_l6_n805()
+ fun_l7_n95
+end
+
+def fun_l6_n806()
+ fun_l7_n589
+end
+
+def fun_l6_n807()
+ fun_l7_n33
+end
+
+def fun_l6_n808()
+ fun_l7_n801
+end
+
+def fun_l6_n809()
+ fun_l7_n857
+end
+
+def fun_l6_n810()
+ fun_l7_n23
+end
+
+def fun_l6_n811()
+ fun_l7_n998
+end
+
+def fun_l6_n812()
+ fun_l7_n424
+end
+
+def fun_l6_n813()
+ fun_l7_n525
+end
+
+def fun_l6_n814()
+ fun_l7_n428
+end
+
+def fun_l6_n815()
+ fun_l7_n509
+end
+
+def fun_l6_n816()
+ fun_l7_n599
+end
+
+def fun_l6_n817()
+ fun_l7_n642
+end
+
+def fun_l6_n818()
+ fun_l7_n381
+end
+
+def fun_l6_n819()
+ fun_l7_n802
+end
+
+def fun_l6_n820()
+ fun_l7_n324
+end
+
+def fun_l6_n821()
+ fun_l7_n804
+end
+
+def fun_l6_n822()
+ fun_l7_n743
+end
+
+def fun_l6_n823()
+ fun_l7_n961
+end
+
+def fun_l6_n824()
+ fun_l7_n222
+end
+
+def fun_l6_n825()
+ fun_l7_n184
+end
+
+def fun_l6_n826()
+ fun_l7_n157
+end
+
+def fun_l6_n827()
+ fun_l7_n387
+end
+
+def fun_l6_n828()
+ fun_l7_n963
+end
+
+def fun_l6_n829()
+ fun_l7_n817
+end
+
+def fun_l6_n830()
+ fun_l7_n673
+end
+
+def fun_l6_n831()
+ fun_l7_n471
+end
+
+def fun_l6_n832()
+ fun_l7_n662
+end
+
+def fun_l6_n833()
+ fun_l7_n385
+end
+
+def fun_l6_n834()
+ fun_l7_n802
+end
+
+def fun_l6_n835()
+ fun_l7_n827
+end
+
+def fun_l6_n836()
+ fun_l7_n495
+end
+
+def fun_l6_n837()
+ fun_l7_n44
+end
+
+def fun_l6_n838()
+ fun_l7_n958
+end
+
+def fun_l6_n839()
+ fun_l7_n436
+end
+
+def fun_l6_n840()
+ fun_l7_n210
+end
+
+def fun_l6_n841()
+ fun_l7_n14
+end
+
+def fun_l6_n842()
+ fun_l7_n67
+end
+
+def fun_l6_n843()
+ fun_l7_n0
+end
+
+def fun_l6_n844()
+ fun_l7_n50
+end
+
+def fun_l6_n845()
+ fun_l7_n398
+end
+
+def fun_l6_n846()
+ fun_l7_n269
+end
+
+def fun_l6_n847()
+ fun_l7_n478
+end
+
+def fun_l6_n848()
+ fun_l7_n879
+end
+
+def fun_l6_n849()
+ fun_l7_n713
+end
+
+def fun_l6_n850()
+ fun_l7_n496
+end
+
+def fun_l6_n851()
+ fun_l7_n995
+end
+
+def fun_l6_n852()
+ fun_l7_n973
+end
+
+def fun_l6_n853()
+ fun_l7_n990
+end
+
+def fun_l6_n854()
+ fun_l7_n193
+end
+
+def fun_l6_n855()
+ fun_l7_n200
+end
+
+def fun_l6_n856()
+ fun_l7_n377
+end
+
+def fun_l6_n857()
+ fun_l7_n82
+end
+
+def fun_l6_n858()
+ fun_l7_n261
+end
+
+def fun_l6_n859()
+ fun_l7_n464
+end
+
+def fun_l6_n860()
+ fun_l7_n358
+end
+
+def fun_l6_n861()
+ fun_l7_n920
+end
+
+def fun_l6_n862()
+ fun_l7_n724
+end
+
+def fun_l6_n863()
+ fun_l7_n536
+end
+
+def fun_l6_n864()
+ fun_l7_n127
+end
+
+def fun_l6_n865()
+ fun_l7_n919
+end
+
+def fun_l6_n866()
+ fun_l7_n972
+end
+
+def fun_l6_n867()
+ fun_l7_n773
+end
+
+def fun_l6_n868()
+ fun_l7_n444
+end
+
+def fun_l6_n869()
+ fun_l7_n242
+end
+
+def fun_l6_n870()
+ fun_l7_n910
+end
+
+def fun_l6_n871()
+ fun_l7_n396
+end
+
+def fun_l6_n872()
+ fun_l7_n110
+end
+
+def fun_l6_n873()
+ fun_l7_n393
+end
+
+def fun_l6_n874()
+ fun_l7_n295
+end
+
+def fun_l6_n875()
+ fun_l7_n998
+end
+
+def fun_l6_n876()
+ fun_l7_n357
+end
+
+def fun_l6_n877()
+ fun_l7_n586
+end
+
+def fun_l6_n878()
+ fun_l7_n752
+end
+
+def fun_l6_n879()
+ fun_l7_n998
+end
+
+def fun_l6_n880()
+ fun_l7_n33
+end
+
+def fun_l6_n881()
+ fun_l7_n472
+end
+
+def fun_l6_n882()
+ fun_l7_n511
+end
+
+def fun_l6_n883()
+ fun_l7_n677
+end
+
+def fun_l6_n884()
+ fun_l7_n562
+end
+
+def fun_l6_n885()
+ fun_l7_n100
+end
+
+def fun_l6_n886()
+ fun_l7_n964
+end
+
+def fun_l6_n887()
+ fun_l7_n306
+end
+
+def fun_l6_n888()
+ fun_l7_n295
+end
+
+def fun_l6_n889()
+ fun_l7_n323
+end
+
+def fun_l6_n890()
+ fun_l7_n559
+end
+
+def fun_l6_n891()
+ fun_l7_n872
+end
+
+def fun_l6_n892()
+ fun_l7_n236
+end
+
+def fun_l6_n893()
+ fun_l7_n845
+end
+
+def fun_l6_n894()
+ fun_l7_n853
+end
+
+def fun_l6_n895()
+ fun_l7_n333
+end
+
+def fun_l6_n896()
+ fun_l7_n404
+end
+
+def fun_l6_n897()
+ fun_l7_n17
+end
+
+def fun_l6_n898()
+ fun_l7_n997
+end
+
+def fun_l6_n899()
+ fun_l7_n844
+end
+
+def fun_l6_n900()
+ fun_l7_n327
+end
+
+def fun_l6_n901()
+ fun_l7_n863
+end
+
+def fun_l6_n902()
+ fun_l7_n516
+end
+
+def fun_l6_n903()
+ fun_l7_n298
+end
+
+def fun_l6_n904()
+ fun_l7_n171
+end
+
+def fun_l6_n905()
+ fun_l7_n908
+end
+
+def fun_l6_n906()
+ fun_l7_n934
+end
+
+def fun_l6_n907()
+ fun_l7_n361
+end
+
+def fun_l6_n908()
+ fun_l7_n901
+end
+
+def fun_l6_n909()
+ fun_l7_n830
+end
+
+def fun_l6_n910()
+ fun_l7_n313
+end
+
+def fun_l6_n911()
+ fun_l7_n799
+end
+
+def fun_l6_n912()
+ fun_l7_n223
+end
+
+def fun_l6_n913()
+ fun_l7_n108
+end
+
+def fun_l6_n914()
+ fun_l7_n822
+end
+
+def fun_l6_n915()
+ fun_l7_n42
+end
+
+def fun_l6_n916()
+ fun_l7_n276
+end
+
+def fun_l6_n917()
+ fun_l7_n535
+end
+
+def fun_l6_n918()
+ fun_l7_n586
+end
+
+def fun_l6_n919()
+ fun_l7_n847
+end
+
+def fun_l6_n920()
+ fun_l7_n851
+end
+
+def fun_l6_n921()
+ fun_l7_n544
+end
+
+def fun_l6_n922()
+ fun_l7_n416
+end
+
+def fun_l6_n923()
+ fun_l7_n670
+end
+
+def fun_l6_n924()
+ fun_l7_n366
+end
+
+def fun_l6_n925()
+ fun_l7_n94
+end
+
+def fun_l6_n926()
+ fun_l7_n187
+end
+
+def fun_l6_n927()
+ fun_l7_n72
+end
+
+def fun_l6_n928()
+ fun_l7_n19
+end
+
+def fun_l6_n929()
+ fun_l7_n424
+end
+
+def fun_l6_n930()
+ fun_l7_n833
+end
+
+def fun_l6_n931()
+ fun_l7_n438
+end
+
+def fun_l6_n932()
+ fun_l7_n9
+end
+
+def fun_l6_n933()
+ fun_l7_n967
+end
+
+def fun_l6_n934()
+ fun_l7_n155
+end
+
+def fun_l6_n935()
+ fun_l7_n119
+end
+
+def fun_l6_n936()
+ fun_l7_n916
+end
+
+def fun_l6_n937()
+ fun_l7_n232
+end
+
+def fun_l6_n938()
+ fun_l7_n880
+end
+
+def fun_l6_n939()
+ fun_l7_n456
+end
+
+def fun_l6_n940()
+ fun_l7_n764
+end
+
+def fun_l6_n941()
+ fun_l7_n525
+end
+
+def fun_l6_n942()
+ fun_l7_n794
+end
+
+def fun_l6_n943()
+ fun_l7_n887
+end
+
+def fun_l6_n944()
+ fun_l7_n756
+end
+
+def fun_l6_n945()
+ fun_l7_n863
+end
+
+def fun_l6_n946()
+ fun_l7_n959
+end
+
+def fun_l6_n947()
+ fun_l7_n597
+end
+
+def fun_l6_n948()
+ fun_l7_n919
+end
+
+def fun_l6_n949()
+ fun_l7_n196
+end
+
+def fun_l6_n950()
+ fun_l7_n505
+end
+
+def fun_l6_n951()
+ fun_l7_n374
+end
+
+def fun_l6_n952()
+ fun_l7_n272
+end
+
+def fun_l6_n953()
+ fun_l7_n317
+end
+
+def fun_l6_n954()
+ fun_l7_n149
+end
+
+def fun_l6_n955()
+ fun_l7_n885
+end
+
+def fun_l6_n956()
+ fun_l7_n174
+end
+
+def fun_l6_n957()
+ fun_l7_n234
+end
+
+def fun_l6_n958()
+ fun_l7_n848
+end
+
+def fun_l6_n959()
+ fun_l7_n18
+end
+
+def fun_l6_n960()
+ fun_l7_n111
+end
+
+def fun_l6_n961()
+ fun_l7_n355
+end
+
+def fun_l6_n962()
+ fun_l7_n640
+end
+
+def fun_l6_n963()
+ fun_l7_n486
+end
+
+def fun_l6_n964()
+ fun_l7_n940
+end
+
+def fun_l6_n965()
+ fun_l7_n54
+end
+
+def fun_l6_n966()
+ fun_l7_n970
+end
+
+def fun_l6_n967()
+ fun_l7_n127
+end
+
+def fun_l6_n968()
+ fun_l7_n581
+end
+
+def fun_l6_n969()
+ fun_l7_n921
+end
+
+def fun_l6_n970()
+ fun_l7_n837
+end
+
+def fun_l6_n971()
+ fun_l7_n933
+end
+
+def fun_l6_n972()
+ fun_l7_n109
+end
+
+def fun_l6_n973()
+ fun_l7_n846
+end
+
+def fun_l6_n974()
+ fun_l7_n178
+end
+
+def fun_l6_n975()
+ fun_l7_n278
+end
+
+def fun_l6_n976()
+ fun_l7_n404
+end
+
+def fun_l6_n977()
+ fun_l7_n456
+end
+
+def fun_l6_n978()
+ fun_l7_n860
+end
+
+def fun_l6_n979()
+ fun_l7_n637
+end
+
+def fun_l6_n980()
+ fun_l7_n201
+end
+
+def fun_l6_n981()
+ fun_l7_n836
+end
+
+def fun_l6_n982()
+ fun_l7_n172
+end
+
+def fun_l6_n983()
+ fun_l7_n935
+end
+
+def fun_l6_n984()
+ fun_l7_n937
+end
+
+def fun_l6_n985()
+ fun_l7_n817
+end
+
+def fun_l6_n986()
+ fun_l7_n16
+end
+
+def fun_l6_n987()
+ fun_l7_n152
+end
+
+def fun_l6_n988()
+ fun_l7_n359
+end
+
+def fun_l6_n989()
+ fun_l7_n357
+end
+
+def fun_l6_n990()
+ fun_l7_n609
+end
+
+def fun_l6_n991()
+ fun_l7_n604
+end
+
+def fun_l6_n992()
+ fun_l7_n998
+end
+
+def fun_l6_n993()
+ fun_l7_n366
+end
+
+def fun_l6_n994()
+ fun_l7_n150
+end
+
+def fun_l6_n995()
+ fun_l7_n823
+end
+
+def fun_l6_n996()
+ fun_l7_n476
+end
+
+def fun_l6_n997()
+ fun_l7_n535
+end
+
+def fun_l6_n998()
+ fun_l7_n222
+end
+
+def fun_l6_n999()
+ fun_l7_n238
+end
+
+def fun_l7_n0()
+ fun_l8_n3
+end
+
+def fun_l7_n1()
+ fun_l8_n706
+end
+
+def fun_l7_n2()
+ fun_l8_n887
+end
+
+def fun_l7_n3()
+ fun_l8_n693
+end
+
+def fun_l7_n4()
+ fun_l8_n11
+end
+
+def fun_l7_n5()
+ fun_l8_n155
+end
+
+def fun_l7_n6()
+ fun_l8_n604
+end
+
+def fun_l7_n7()
+ fun_l8_n616
+end
+
+def fun_l7_n8()
+ fun_l8_n686
+end
+
+def fun_l7_n9()
+ fun_l8_n257
+end
+
+def fun_l7_n10()
+ fun_l8_n594
+end
+
+def fun_l7_n11()
+ fun_l8_n548
+end
+
+def fun_l7_n12()
+ fun_l8_n305
+end
+
+def fun_l7_n13()
+ fun_l8_n125
+end
+
+def fun_l7_n14()
+ fun_l8_n183
+end
+
+def fun_l7_n15()
+ fun_l8_n799
+end
+
+def fun_l7_n16()
+ fun_l8_n333
+end
+
+def fun_l7_n17()
+ fun_l8_n873
+end
+
+def fun_l7_n18()
+ fun_l8_n110
+end
+
+def fun_l7_n19()
+ fun_l8_n578
+end
+
+def fun_l7_n20()
+ fun_l8_n423
+end
+
+def fun_l7_n21()
+ fun_l8_n686
+end
+
+def fun_l7_n22()
+ fun_l8_n162
+end
+
+def fun_l7_n23()
+ fun_l8_n277
+end
+
+def fun_l7_n24()
+ fun_l8_n651
+end
+
+def fun_l7_n25()
+ fun_l8_n575
+end
+
+def fun_l7_n26()
+ fun_l8_n937
+end
+
+def fun_l7_n27()
+ fun_l8_n636
+end
+
+def fun_l7_n28()
+ fun_l8_n1
+end
+
+def fun_l7_n29()
+ fun_l8_n83
+end
+
+def fun_l7_n30()
+ fun_l8_n318
+end
+
+def fun_l7_n31()
+ fun_l8_n675
+end
+
+def fun_l7_n32()
+ fun_l8_n118
+end
+
+def fun_l7_n33()
+ fun_l8_n522
+end
+
+def fun_l7_n34()
+ fun_l8_n507
+end
+
+def fun_l7_n35()
+ fun_l8_n846
+end
+
+def fun_l7_n36()
+ fun_l8_n584
+end
+
+def fun_l7_n37()
+ fun_l8_n816
+end
+
+def fun_l7_n38()
+ fun_l8_n217
+end
+
+def fun_l7_n39()
+ fun_l8_n366
+end
+
+def fun_l7_n40()
+ fun_l8_n283
+end
+
+def fun_l7_n41()
+ fun_l8_n536
+end
+
+def fun_l7_n42()
+ fun_l8_n414
+end
+
+def fun_l7_n43()
+ fun_l8_n216
+end
+
+def fun_l7_n44()
+ fun_l8_n743
+end
+
+def fun_l7_n45()
+ fun_l8_n449
+end
+
+def fun_l7_n46()
+ fun_l8_n629
+end
+
+def fun_l7_n47()
+ fun_l8_n711
+end
+
+def fun_l7_n48()
+ fun_l8_n113
+end
+
+def fun_l7_n49()
+ fun_l8_n440
+end
+
+def fun_l7_n50()
+ fun_l8_n822
+end
+
+def fun_l7_n51()
+ fun_l8_n567
+end
+
+def fun_l7_n52()
+ fun_l8_n854
+end
+
+def fun_l7_n53()
+ fun_l8_n204
+end
+
+def fun_l7_n54()
+ fun_l8_n796
+end
+
+def fun_l7_n55()
+ fun_l8_n989
+end
+
+def fun_l7_n56()
+ fun_l8_n504
+end
+
+def fun_l7_n57()
+ fun_l8_n952
+end
+
+def fun_l7_n58()
+ fun_l8_n797
+end
+
+def fun_l7_n59()
+ fun_l8_n492
+end
+
+def fun_l7_n60()
+ fun_l8_n949
+end
+
+def fun_l7_n61()
+ fun_l8_n215
+end
+
+def fun_l7_n62()
+ fun_l8_n306
+end
+
+def fun_l7_n63()
+ fun_l8_n632
+end
+
+def fun_l7_n64()
+ fun_l8_n572
+end
+
+def fun_l7_n65()
+ fun_l8_n69
+end
+
+def fun_l7_n66()
+ fun_l8_n97
+end
+
+def fun_l7_n67()
+ fun_l8_n708
+end
+
+def fun_l7_n68()
+ fun_l8_n548
+end
+
+def fun_l7_n69()
+ fun_l8_n999
+end
+
+def fun_l7_n70()
+ fun_l8_n872
+end
+
+def fun_l7_n71()
+ fun_l8_n20
+end
+
+def fun_l7_n72()
+ fun_l8_n220
+end
+
+def fun_l7_n73()
+ fun_l8_n28
+end
+
+def fun_l7_n74()
+ fun_l8_n79
+end
+
+def fun_l7_n75()
+ fun_l8_n248
+end
+
+def fun_l7_n76()
+ fun_l8_n601
+end
+
+def fun_l7_n77()
+ fun_l8_n469
+end
+
+def fun_l7_n78()
+ fun_l8_n315
+end
+
+def fun_l7_n79()
+ fun_l8_n712
+end
+
+def fun_l7_n80()
+ fun_l8_n177
+end
+
+def fun_l7_n81()
+ fun_l8_n106
+end
+
+def fun_l7_n82()
+ fun_l8_n668
+end
+
+def fun_l7_n83()
+ fun_l8_n299
+end
+
+def fun_l7_n84()
+ fun_l8_n59
+end
+
+def fun_l7_n85()
+ fun_l8_n120
+end
+
+def fun_l7_n86()
+ fun_l8_n209
+end
+
+def fun_l7_n87()
+ fun_l8_n502
+end
+
+def fun_l7_n88()
+ fun_l8_n935
+end
+
+def fun_l7_n89()
+ fun_l8_n697
+end
+
+def fun_l7_n90()
+ fun_l8_n231
+end
+
+def fun_l7_n91()
+ fun_l8_n47
+end
+
+def fun_l7_n92()
+ fun_l8_n125
+end
+
+def fun_l7_n93()
+ fun_l8_n975
+end
+
+def fun_l7_n94()
+ fun_l8_n627
+end
+
+def fun_l7_n95()
+ fun_l8_n898
+end
+
+def fun_l7_n96()
+ fun_l8_n124
+end
+
+def fun_l7_n97()
+ fun_l8_n722
+end
+
+def fun_l7_n98()
+ fun_l8_n745
+end
+
+def fun_l7_n99()
+ fun_l8_n999
+end
+
+def fun_l7_n100()
+ fun_l8_n791
+end
+
+def fun_l7_n101()
+ fun_l8_n360
+end
+
+def fun_l7_n102()
+ fun_l8_n755
+end
+
+def fun_l7_n103()
+ fun_l8_n718
+end
+
+def fun_l7_n104()
+ fun_l8_n495
+end
+
+def fun_l7_n105()
+ fun_l8_n19
+end
+
+def fun_l7_n106()
+ fun_l8_n280
+end
+
+def fun_l7_n107()
+ fun_l8_n710
+end
+
+def fun_l7_n108()
+ fun_l8_n871
+end
+
+def fun_l7_n109()
+ fun_l8_n727
+end
+
+def fun_l7_n110()
+ fun_l8_n807
+end
+
+def fun_l7_n111()
+ fun_l8_n170
+end
+
+def fun_l7_n112()
+ fun_l8_n661
+end
+
+def fun_l7_n113()
+ fun_l8_n684
+end
+
+def fun_l7_n114()
+ fun_l8_n202
+end
+
+def fun_l7_n115()
+ fun_l8_n679
+end
+
+def fun_l7_n116()
+ fun_l8_n773
+end
+
+def fun_l7_n117()
+ fun_l8_n538
+end
+
+def fun_l7_n118()
+ fun_l8_n411
+end
+
+def fun_l7_n119()
+ fun_l8_n264
+end
+
+def fun_l7_n120()
+ fun_l8_n487
+end
+
+def fun_l7_n121()
+ fun_l8_n906
+end
+
+def fun_l7_n122()
+ fun_l8_n833
+end
+
+def fun_l7_n123()
+ fun_l8_n721
+end
+
+def fun_l7_n124()
+ fun_l8_n792
+end
+
+def fun_l7_n125()
+ fun_l8_n852
+end
+
+def fun_l7_n126()
+ fun_l8_n876
+end
+
+def fun_l7_n127()
+ fun_l8_n489
+end
+
+def fun_l7_n128()
+ fun_l8_n715
+end
+
+def fun_l7_n129()
+ fun_l8_n863
+end
+
+def fun_l7_n130()
+ fun_l8_n842
+end
+
+def fun_l7_n131()
+ fun_l8_n99
+end
+
+def fun_l7_n132()
+ fun_l8_n472
+end
+
+def fun_l7_n133()
+ fun_l8_n826
+end
+
+def fun_l7_n134()
+ fun_l8_n805
+end
+
+def fun_l7_n135()
+ fun_l8_n914
+end
+
+def fun_l7_n136()
+ fun_l8_n691
+end
+
+def fun_l7_n137()
+ fun_l8_n880
+end
+
+def fun_l7_n138()
+ fun_l8_n708
+end
+
+def fun_l7_n139()
+ fun_l8_n445
+end
+
+def fun_l7_n140()
+ fun_l8_n173
+end
+
+def fun_l7_n141()
+ fun_l8_n785
+end
+
+def fun_l7_n142()
+ fun_l8_n638
+end
+
+def fun_l7_n143()
+ fun_l8_n319
+end
+
+def fun_l7_n144()
+ fun_l8_n825
+end
+
+def fun_l7_n145()
+ fun_l8_n497
+end
+
+def fun_l7_n146()
+ fun_l8_n941
+end
+
+def fun_l7_n147()
+ fun_l8_n164
+end
+
+def fun_l7_n148()
+ fun_l8_n773
+end
+
+def fun_l7_n149()
+ fun_l8_n603
+end
+
+def fun_l7_n150()
+ fun_l8_n701
+end
+
+def fun_l7_n151()
+ fun_l8_n279
+end
+
+def fun_l7_n152()
+ fun_l8_n120
+end
+
+def fun_l7_n153()
+ fun_l8_n352
+end
+
+def fun_l7_n154()
+ fun_l8_n401
+end
+
+def fun_l7_n155()
+ fun_l8_n195
+end
+
+def fun_l7_n156()
+ fun_l8_n206
+end
+
+def fun_l7_n157()
+ fun_l8_n209
+end
+
+def fun_l7_n158()
+ fun_l8_n594
+end
+
+def fun_l7_n159()
+ fun_l8_n49
+end
+
+def fun_l7_n160()
+ fun_l8_n835
+end
+
+def fun_l7_n161()
+ fun_l8_n108
+end
+
+def fun_l7_n162()
+ fun_l8_n499
+end
+
+def fun_l7_n163()
+ fun_l8_n822
+end
+
+def fun_l7_n164()
+ fun_l8_n712
+end
+
+def fun_l7_n165()
+ fun_l8_n757
+end
+
+def fun_l7_n166()
+ fun_l8_n706
+end
+
+def fun_l7_n167()
+ fun_l8_n517
+end
+
+def fun_l7_n168()
+ fun_l8_n74
+end
+
+def fun_l7_n169()
+ fun_l8_n292
+end
+
+def fun_l7_n170()
+ fun_l8_n560
+end
+
+def fun_l7_n171()
+ fun_l8_n476
+end
+
+def fun_l7_n172()
+ fun_l8_n818
+end
+
+def fun_l7_n173()
+ fun_l8_n91
+end
+
+def fun_l7_n174()
+ fun_l8_n835
+end
+
+def fun_l7_n175()
+ fun_l8_n84
+end
+
+def fun_l7_n176()
+ fun_l8_n506
+end
+
+def fun_l7_n177()
+ fun_l8_n602
+end
+
+def fun_l7_n178()
+ fun_l8_n758
+end
+
+def fun_l7_n179()
+ fun_l8_n591
+end
+
+def fun_l7_n180()
+ fun_l8_n757
+end
+
+def fun_l7_n181()
+ fun_l8_n127
+end
+
+def fun_l7_n182()
+ fun_l8_n287
+end
+
+def fun_l7_n183()
+ fun_l8_n672
+end
+
+def fun_l7_n184()
+ fun_l8_n870
+end
+
+def fun_l7_n185()
+ fun_l8_n267
+end
+
+def fun_l7_n186()
+ fun_l8_n396
+end
+
+def fun_l7_n187()
+ fun_l8_n128
+end
+
+def fun_l7_n188()
+ fun_l8_n670
+end
+
+def fun_l7_n189()
+ fun_l8_n142
+end
+
+def fun_l7_n190()
+ fun_l8_n320
+end
+
+def fun_l7_n191()
+ fun_l8_n829
+end
+
+def fun_l7_n192()
+ fun_l8_n788
+end
+
+def fun_l7_n193()
+ fun_l8_n174
+end
+
+def fun_l7_n194()
+ fun_l8_n526
+end
+
+def fun_l7_n195()
+ fun_l8_n185
+end
+
+def fun_l7_n196()
+ fun_l8_n746
+end
+
+def fun_l7_n197()
+ fun_l8_n889
+end
+
+def fun_l7_n198()
+ fun_l8_n154
+end
+
+def fun_l7_n199()
+ fun_l8_n19
+end
+
+def fun_l7_n200()
+ fun_l8_n913
+end
+
+def fun_l7_n201()
+ fun_l8_n560
+end
+
+def fun_l7_n202()
+ fun_l8_n768
+end
+
+def fun_l7_n203()
+ fun_l8_n412
+end
+
+def fun_l7_n204()
+ fun_l8_n394
+end
+
+def fun_l7_n205()
+ fun_l8_n641
+end
+
+def fun_l7_n206()
+ fun_l8_n83
+end
+
+def fun_l7_n207()
+ fun_l8_n39
+end
+
+def fun_l7_n208()
+ fun_l8_n502
+end
+
+def fun_l7_n209()
+ fun_l8_n904
+end
+
+def fun_l7_n210()
+ fun_l8_n639
+end
+
+def fun_l7_n211()
+ fun_l8_n873
+end
+
+def fun_l7_n212()
+ fun_l8_n940
+end
+
+def fun_l7_n213()
+ fun_l8_n594
+end
+
+def fun_l7_n214()
+ fun_l8_n397
+end
+
+def fun_l7_n215()
+ fun_l8_n318
+end
+
+def fun_l7_n216()
+ fun_l8_n116
+end
+
+def fun_l7_n217()
+ fun_l8_n888
+end
+
+def fun_l7_n218()
+ fun_l8_n148
+end
+
+def fun_l7_n219()
+ fun_l8_n329
+end
+
+def fun_l7_n220()
+ fun_l8_n973
+end
+
+def fun_l7_n221()
+ fun_l8_n913
+end
+
+def fun_l7_n222()
+ fun_l8_n170
+end
+
+def fun_l7_n223()
+ fun_l8_n103
+end
+
+def fun_l7_n224()
+ fun_l8_n835
+end
+
+def fun_l7_n225()
+ fun_l8_n104
+end
+
+def fun_l7_n226()
+ fun_l8_n111
+end
+
+def fun_l7_n227()
+ fun_l8_n12
+end
+
+def fun_l7_n228()
+ fun_l8_n299
+end
+
+def fun_l7_n229()
+ fun_l8_n639
+end
+
+def fun_l7_n230()
+ fun_l8_n789
+end
+
+def fun_l7_n231()
+ fun_l8_n968
+end
+
+def fun_l7_n232()
+ fun_l8_n905
+end
+
+def fun_l7_n233()
+ fun_l8_n325
+end
+
+def fun_l7_n234()
+ fun_l8_n841
+end
+
+def fun_l7_n235()
+ fun_l8_n605
+end
+
+def fun_l7_n236()
+ fun_l8_n495
+end
+
+def fun_l7_n237()
+ fun_l8_n154
+end
+
+def fun_l7_n238()
+ fun_l8_n331
+end
+
+def fun_l7_n239()
+ fun_l8_n30
+end
+
+def fun_l7_n240()
+ fun_l8_n170
+end
+
+def fun_l7_n241()
+ fun_l8_n376
+end
+
+def fun_l7_n242()
+ fun_l8_n49
+end
+
+def fun_l7_n243()
+ fun_l8_n463
+end
+
+def fun_l7_n244()
+ fun_l8_n269
+end
+
+def fun_l7_n245()
+ fun_l8_n573
+end
+
+def fun_l7_n246()
+ fun_l8_n782
+end
+
+def fun_l7_n247()
+ fun_l8_n85
+end
+
+def fun_l7_n248()
+ fun_l8_n667
+end
+
+def fun_l7_n249()
+ fun_l8_n686
+end
+
+def fun_l7_n250()
+ fun_l8_n575
+end
+
+def fun_l7_n251()
+ fun_l8_n349
+end
+
+def fun_l7_n252()
+ fun_l8_n252
+end
+
+def fun_l7_n253()
+ fun_l8_n490
+end
+
+def fun_l7_n254()
+ fun_l8_n600
+end
+
+def fun_l7_n255()
+ fun_l8_n772
+end
+
+def fun_l7_n256()
+ fun_l8_n645
+end
+
+def fun_l7_n257()
+ fun_l8_n633
+end
+
+def fun_l7_n258()
+ fun_l8_n323
+end
+
+def fun_l7_n259()
+ fun_l8_n590
+end
+
+def fun_l7_n260()
+ fun_l8_n77
+end
+
+def fun_l7_n261()
+ fun_l8_n349
+end
+
+def fun_l7_n262()
+ fun_l8_n98
+end
+
+def fun_l7_n263()
+ fun_l8_n312
+end
+
+def fun_l7_n264()
+ fun_l8_n449
+end
+
+def fun_l7_n265()
+ fun_l8_n550
+end
+
+def fun_l7_n266()
+ fun_l8_n717
+end
+
+def fun_l7_n267()
+ fun_l8_n249
+end
+
+def fun_l7_n268()
+ fun_l8_n940
+end
+
+def fun_l7_n269()
+ fun_l8_n243
+end
+
+def fun_l7_n270()
+ fun_l8_n392
+end
+
+def fun_l7_n271()
+ fun_l8_n129
+end
+
+def fun_l7_n272()
+ fun_l8_n704
+end
+
+def fun_l7_n273()
+ fun_l8_n815
+end
+
+def fun_l7_n274()
+ fun_l8_n123
+end
+
+def fun_l7_n275()
+ fun_l8_n281
+end
+
+def fun_l7_n276()
+ fun_l8_n110
+end
+
+def fun_l7_n277()
+ fun_l8_n250
+end
+
+def fun_l7_n278()
+ fun_l8_n245
+end
+
+def fun_l7_n279()
+ fun_l8_n612
+end
+
+def fun_l7_n280()
+ fun_l8_n693
+end
+
+def fun_l7_n281()
+ fun_l8_n441
+end
+
+def fun_l7_n282()
+ fun_l8_n716
+end
+
+def fun_l7_n283()
+ fun_l8_n467
+end
+
+def fun_l7_n284()
+ fun_l8_n944
+end
+
+def fun_l7_n285()
+ fun_l8_n14
+end
+
+def fun_l7_n286()
+ fun_l8_n453
+end
+
+def fun_l7_n287()
+ fun_l8_n342
+end
+
+def fun_l7_n288()
+ fun_l8_n666
+end
+
+def fun_l7_n289()
+ fun_l8_n111
+end
+
+def fun_l7_n290()
+ fun_l8_n353
+end
+
+def fun_l7_n291()
+ fun_l8_n279
+end
+
+def fun_l7_n292()
+ fun_l8_n556
+end
+
+def fun_l7_n293()
+ fun_l8_n780
+end
+
+def fun_l7_n294()
+ fun_l8_n137
+end
+
+def fun_l7_n295()
+ fun_l8_n760
+end
+
+def fun_l7_n296()
+ fun_l8_n56
+end
+
+def fun_l7_n297()
+ fun_l8_n927
+end
+
+def fun_l7_n298()
+ fun_l8_n861
+end
+
+def fun_l7_n299()
+ fun_l8_n653
+end
+
+def fun_l7_n300()
+ fun_l8_n948
+end
+
+def fun_l7_n301()
+ fun_l8_n159
+end
+
+def fun_l7_n302()
+ fun_l8_n426
+end
+
+def fun_l7_n303()
+ fun_l8_n175
+end
+
+def fun_l7_n304()
+ fun_l8_n35
+end
+
+def fun_l7_n305()
+ fun_l8_n700
+end
+
+def fun_l7_n306()
+ fun_l8_n603
+end
+
+def fun_l7_n307()
+ fun_l8_n600
+end
+
+def fun_l7_n308()
+ fun_l8_n280
+end
+
+def fun_l7_n309()
+ fun_l8_n599
+end
+
+def fun_l7_n310()
+ fun_l8_n404
+end
+
+def fun_l7_n311()
+ fun_l8_n475
+end
+
+def fun_l7_n312()
+ fun_l8_n837
+end
+
+def fun_l7_n313()
+ fun_l8_n61
+end
+
+def fun_l7_n314()
+ fun_l8_n571
+end
+
+def fun_l7_n315()
+ fun_l8_n442
+end
+
+def fun_l7_n316()
+ fun_l8_n256
+end
+
+def fun_l7_n317()
+ fun_l8_n751
+end
+
+def fun_l7_n318()
+ fun_l8_n672
+end
+
+def fun_l7_n319()
+ fun_l8_n953
+end
+
+def fun_l7_n320()
+ fun_l8_n330
+end
+
+def fun_l7_n321()
+ fun_l8_n54
+end
+
+def fun_l7_n322()
+ fun_l8_n11
+end
+
+def fun_l7_n323()
+ fun_l8_n504
+end
+
+def fun_l7_n324()
+ fun_l8_n786
+end
+
+def fun_l7_n325()
+ fun_l8_n32
+end
+
+def fun_l7_n326()
+ fun_l8_n85
+end
+
+def fun_l7_n327()
+ fun_l8_n727
+end
+
+def fun_l7_n328()
+ fun_l8_n445
+end
+
+def fun_l7_n329()
+ fun_l8_n787
+end
+
+def fun_l7_n330()
+ fun_l8_n663
+end
+
+def fun_l7_n331()
+ fun_l8_n461
+end
+
+def fun_l7_n332()
+ fun_l8_n82
+end
+
+def fun_l7_n333()
+ fun_l8_n974
+end
+
+def fun_l7_n334()
+ fun_l8_n511
+end
+
+def fun_l7_n335()
+ fun_l8_n827
+end
+
+def fun_l7_n336()
+ fun_l8_n12
+end
+
+def fun_l7_n337()
+ fun_l8_n696
+end
+
+def fun_l7_n338()
+ fun_l8_n325
+end
+
+def fun_l7_n339()
+ fun_l8_n148
+end
+
+def fun_l7_n340()
+ fun_l8_n609
+end
+
+def fun_l7_n341()
+ fun_l8_n471
+end
+
+def fun_l7_n342()
+ fun_l8_n63
+end
+
+def fun_l7_n343()
+ fun_l8_n358
+end
+
+def fun_l7_n344()
+ fun_l8_n658
+end
+
+def fun_l7_n345()
+ fun_l8_n730
+end
+
+def fun_l7_n346()
+ fun_l8_n139
+end
+
+def fun_l7_n347()
+ fun_l8_n951
+end
+
+def fun_l7_n348()
+ fun_l8_n113
+end
+
+def fun_l7_n349()
+ fun_l8_n695
+end
+
+def fun_l7_n350()
+ fun_l8_n803
+end
+
+def fun_l7_n351()
+ fun_l8_n93
+end
+
+def fun_l7_n352()
+ fun_l8_n340
+end
+
+def fun_l7_n353()
+ fun_l8_n551
+end
+
+def fun_l7_n354()
+ fun_l8_n5
+end
+
+def fun_l7_n355()
+ fun_l8_n960
+end
+
+def fun_l7_n356()
+ fun_l8_n76
+end
+
+def fun_l7_n357()
+ fun_l8_n142
+end
+
+def fun_l7_n358()
+ fun_l8_n305
+end
+
+def fun_l7_n359()
+ fun_l8_n739
+end
+
+def fun_l7_n360()
+ fun_l8_n293
+end
+
+def fun_l7_n361()
+ fun_l8_n812
+end
+
+def fun_l7_n362()
+ fun_l8_n635
+end
+
+def fun_l7_n363()
+ fun_l8_n239
+end
+
+def fun_l7_n364()
+ fun_l8_n880
+end
+
+def fun_l7_n365()
+ fun_l8_n999
+end
+
+def fun_l7_n366()
+ fun_l8_n997
+end
+
+def fun_l7_n367()
+ fun_l8_n190
+end
+
+def fun_l7_n368()
+ fun_l8_n763
+end
+
+def fun_l7_n369()
+ fun_l8_n369
+end
+
+def fun_l7_n370()
+ fun_l8_n538
+end
+
+def fun_l7_n371()
+ fun_l8_n553
+end
+
+def fun_l7_n372()
+ fun_l8_n844
+end
+
+def fun_l7_n373()
+ fun_l8_n773
+end
+
+def fun_l7_n374()
+ fun_l8_n589
+end
+
+def fun_l7_n375()
+ fun_l8_n492
+end
+
+def fun_l7_n376()
+ fun_l8_n848
+end
+
+def fun_l7_n377()
+ fun_l8_n715
+end
+
+def fun_l7_n378()
+ fun_l8_n82
+end
+
+def fun_l7_n379()
+ fun_l8_n267
+end
+
+def fun_l7_n380()
+ fun_l8_n84
+end
+
+def fun_l7_n381()
+ fun_l8_n996
+end
+
+def fun_l7_n382()
+ fun_l8_n536
+end
+
+def fun_l7_n383()
+ fun_l8_n518
+end
+
+def fun_l7_n384()
+ fun_l8_n70
+end
+
+def fun_l7_n385()
+ fun_l8_n545
+end
+
+def fun_l7_n386()
+ fun_l8_n156
+end
+
+def fun_l7_n387()
+ fun_l8_n558
+end
+
+def fun_l7_n388()
+ fun_l8_n519
+end
+
+def fun_l7_n389()
+ fun_l8_n321
+end
+
+def fun_l7_n390()
+ fun_l8_n133
+end
+
+def fun_l7_n391()
+ fun_l8_n253
+end
+
+def fun_l7_n392()
+ fun_l8_n969
+end
+
+def fun_l7_n393()
+ fun_l8_n986
+end
+
+def fun_l7_n394()
+ fun_l8_n991
+end
+
+def fun_l7_n395()
+ fun_l8_n757
+end
+
+def fun_l7_n396()
+ fun_l8_n496
+end
+
+def fun_l7_n397()
+ fun_l8_n841
+end
+
+def fun_l7_n398()
+ fun_l8_n922
+end
+
+def fun_l7_n399()
+ fun_l8_n51
+end
+
+def fun_l7_n400()
+ fun_l8_n961
+end
+
+def fun_l7_n401()
+ fun_l8_n82
+end
+
+def fun_l7_n402()
+ fun_l8_n190
+end
+
+def fun_l7_n403()
+ fun_l8_n543
+end
+
+def fun_l7_n404()
+ fun_l8_n768
+end
+
+def fun_l7_n405()
+ fun_l8_n810
+end
+
+def fun_l7_n406()
+ fun_l8_n714
+end
+
+def fun_l7_n407()
+ fun_l8_n692
+end
+
+def fun_l7_n408()
+ fun_l8_n357
+end
+
+def fun_l7_n409()
+ fun_l8_n380
+end
+
+def fun_l7_n410()
+ fun_l8_n958
+end
+
+def fun_l7_n411()
+ fun_l8_n992
+end
+
+def fun_l7_n412()
+ fun_l8_n819
+end
+
+def fun_l7_n413()
+ fun_l8_n4
+end
+
+def fun_l7_n414()
+ fun_l8_n429
+end
+
+def fun_l7_n415()
+ fun_l8_n56
+end
+
+def fun_l7_n416()
+ fun_l8_n212
+end
+
+def fun_l7_n417()
+ fun_l8_n267
+end
+
+def fun_l7_n418()
+ fun_l8_n948
+end
+
+def fun_l7_n419()
+ fun_l8_n221
+end
+
+def fun_l7_n420()
+ fun_l8_n711
+end
+
+def fun_l7_n421()
+ fun_l8_n307
+end
+
+def fun_l7_n422()
+ fun_l8_n482
+end
+
+def fun_l7_n423()
+ fun_l8_n522
+end
+
+def fun_l7_n424()
+ fun_l8_n166
+end
+
+def fun_l7_n425()
+ fun_l8_n410
+end
+
+def fun_l7_n426()
+ fun_l8_n143
+end
+
+def fun_l7_n427()
+ fun_l8_n54
+end
+
+def fun_l7_n428()
+ fun_l8_n217
+end
+
+def fun_l7_n429()
+ fun_l8_n423
+end
+
+def fun_l7_n430()
+ fun_l8_n181
+end
+
+def fun_l7_n431()
+ fun_l8_n456
+end
+
+def fun_l7_n432()
+ fun_l8_n640
+end
+
+def fun_l7_n433()
+ fun_l8_n588
+end
+
+def fun_l7_n434()
+ fun_l8_n49
+end
+
+def fun_l7_n435()
+ fun_l8_n373
+end
+
+def fun_l7_n436()
+ fun_l8_n668
+end
+
+def fun_l7_n437()
+ fun_l8_n478
+end
+
+def fun_l7_n438()
+ fun_l8_n468
+end
+
+def fun_l7_n439()
+ fun_l8_n230
+end
+
+def fun_l7_n440()
+ fun_l8_n361
+end
+
+def fun_l7_n441()
+ fun_l8_n770
+end
+
+def fun_l7_n442()
+ fun_l8_n876
+end
+
+def fun_l7_n443()
+ fun_l8_n383
+end
+
+def fun_l7_n444()
+ fun_l8_n568
+end
+
+def fun_l7_n445()
+ fun_l8_n236
+end
+
+def fun_l7_n446()
+ fun_l8_n136
+end
+
+def fun_l7_n447()
+ fun_l8_n883
+end
+
+def fun_l7_n448()
+ fun_l8_n227
+end
+
+def fun_l7_n449()
+ fun_l8_n634
+end
+
+def fun_l7_n450()
+ fun_l8_n985
+end
+
+def fun_l7_n451()
+ fun_l8_n314
+end
+
+def fun_l7_n452()
+ fun_l8_n90
+end
+
+def fun_l7_n453()
+ fun_l8_n31
+end
+
+def fun_l7_n454()
+ fun_l8_n226
+end
+
+def fun_l7_n455()
+ fun_l8_n309
+end
+
+def fun_l7_n456()
+ fun_l8_n912
+end
+
+def fun_l7_n457()
+ fun_l8_n7
+end
+
+def fun_l7_n458()
+ fun_l8_n304
+end
+
+def fun_l7_n459()
+ fun_l8_n488
+end
+
+def fun_l7_n460()
+ fun_l8_n576
+end
+
+def fun_l7_n461()
+ fun_l8_n854
+end
+
+def fun_l7_n462()
+ fun_l8_n164
+end
+
+def fun_l7_n463()
+ fun_l8_n381
+end
+
+def fun_l7_n464()
+ fun_l8_n241
+end
+
+def fun_l7_n465()
+ fun_l8_n330
+end
+
+def fun_l7_n466()
+ fun_l8_n517
+end
+
+def fun_l7_n467()
+ fun_l8_n647
+end
+
+def fun_l7_n468()
+ fun_l8_n320
+end
+
+def fun_l7_n469()
+ fun_l8_n479
+end
+
+def fun_l7_n470()
+ fun_l8_n913
+end
+
+def fun_l7_n471()
+ fun_l8_n13
+end
+
+def fun_l7_n472()
+ fun_l8_n601
+end
+
+def fun_l7_n473()
+ fun_l8_n364
+end
+
+def fun_l7_n474()
+ fun_l8_n360
+end
+
+def fun_l7_n475()
+ fun_l8_n374
+end
+
+def fun_l7_n476()
+ fun_l8_n651
+end
+
+def fun_l7_n477()
+ fun_l8_n579
+end
+
+def fun_l7_n478()
+ fun_l8_n583
+end
+
+def fun_l7_n479()
+ fun_l8_n693
+end
+
+def fun_l7_n480()
+ fun_l8_n941
+end
+
+def fun_l7_n481()
+ fun_l8_n743
+end
+
+def fun_l7_n482()
+ fun_l8_n511
+end
+
+def fun_l7_n483()
+ fun_l8_n528
+end
+
+def fun_l7_n484()
+ fun_l8_n898
+end
+
+def fun_l7_n485()
+ fun_l8_n175
+end
+
+def fun_l7_n486()
+ fun_l8_n45
+end
+
+def fun_l7_n487()
+ fun_l8_n871
+end
+
+def fun_l7_n488()
+ fun_l8_n464
+end
+
+def fun_l7_n489()
+ fun_l8_n69
+end
+
+def fun_l7_n490()
+ fun_l8_n334
+end
+
+def fun_l7_n491()
+ fun_l8_n687
+end
+
+def fun_l7_n492()
+ fun_l8_n729
+end
+
+def fun_l7_n493()
+ fun_l8_n47
+end
+
+def fun_l7_n494()
+ fun_l8_n905
+end
+
+def fun_l7_n495()
+ fun_l8_n586
+end
+
+def fun_l7_n496()
+ fun_l8_n657
+end
+
+def fun_l7_n497()
+ fun_l8_n673
+end
+
+def fun_l7_n498()
+ fun_l8_n173
+end
+
+def fun_l7_n499()
+ fun_l8_n333
+end
+
+def fun_l7_n500()
+ fun_l8_n712
+end
+
+def fun_l7_n501()
+ fun_l8_n349
+end
+
+def fun_l7_n502()
+ fun_l8_n969
+end
+
+def fun_l7_n503()
+ fun_l8_n678
+end
+
+def fun_l7_n504()
+ fun_l8_n507
+end
+
+def fun_l7_n505()
+ fun_l8_n206
+end
+
+def fun_l7_n506()
+ fun_l8_n370
+end
+
+def fun_l7_n507()
+ fun_l8_n270
+end
+
+def fun_l7_n508()
+ fun_l8_n20
+end
+
+def fun_l7_n509()
+ fun_l8_n545
+end
+
+def fun_l7_n510()
+ fun_l8_n926
+end
+
+def fun_l7_n511()
+ fun_l8_n882
+end
+
+def fun_l7_n512()
+ fun_l8_n630
+end
+
+def fun_l7_n513()
+ fun_l8_n51
+end
+
+def fun_l7_n514()
+ fun_l8_n69
+end
+
+def fun_l7_n515()
+ fun_l8_n859
+end
+
+def fun_l7_n516()
+ fun_l8_n808
+end
+
+def fun_l7_n517()
+ fun_l8_n800
+end
+
+def fun_l7_n518()
+ fun_l8_n226
+end
+
+def fun_l7_n519()
+ fun_l8_n340
+end
+
+def fun_l7_n520()
+ fun_l8_n391
+end
+
+def fun_l7_n521()
+ fun_l8_n538
+end
+
+def fun_l7_n522()
+ fun_l8_n458
+end
+
+def fun_l7_n523()
+ fun_l8_n114
+end
+
+def fun_l7_n524()
+ fun_l8_n593
+end
+
+def fun_l7_n525()
+ fun_l8_n276
+end
+
+def fun_l7_n526()
+ fun_l8_n276
+end
+
+def fun_l7_n527()
+ fun_l8_n719
+end
+
+def fun_l7_n528()
+ fun_l8_n75
+end
+
+def fun_l7_n529()
+ fun_l8_n855
+end
+
+def fun_l7_n530()
+ fun_l8_n731
+end
+
+def fun_l7_n531()
+ fun_l8_n257
+end
+
+def fun_l7_n532()
+ fun_l8_n572
+end
+
+def fun_l7_n533()
+ fun_l8_n483
+end
+
+def fun_l7_n534()
+ fun_l8_n548
+end
+
+def fun_l7_n535()
+ fun_l8_n867
+end
+
+def fun_l7_n536()
+ fun_l8_n923
+end
+
+def fun_l7_n537()
+ fun_l8_n988
+end
+
+def fun_l7_n538()
+ fun_l8_n813
+end
+
+def fun_l7_n539()
+ fun_l8_n503
+end
+
+def fun_l7_n540()
+ fun_l8_n326
+end
+
+def fun_l7_n541()
+ fun_l8_n521
+end
+
+def fun_l7_n542()
+ fun_l8_n804
+end
+
+def fun_l7_n543()
+ fun_l8_n693
+end
+
+def fun_l7_n544()
+ fun_l8_n887
+end
+
+def fun_l7_n545()
+ fun_l8_n543
+end
+
+def fun_l7_n546()
+ fun_l8_n438
+end
+
+def fun_l7_n547()
+ fun_l8_n295
+end
+
+def fun_l7_n548()
+ fun_l8_n361
+end
+
+def fun_l7_n549()
+ fun_l8_n495
+end
+
+def fun_l7_n550()
+ fun_l8_n34
+end
+
+def fun_l7_n551()
+ fun_l8_n491
+end
+
+def fun_l7_n552()
+ fun_l8_n659
+end
+
+def fun_l7_n553()
+ fun_l8_n589
+end
+
+def fun_l7_n554()
+ fun_l8_n450
+end
+
+def fun_l7_n555()
+ fun_l8_n365
+end
+
+def fun_l7_n556()
+ fun_l8_n171
+end
+
+def fun_l7_n557()
+ fun_l8_n145
+end
+
+def fun_l7_n558()
+ fun_l8_n760
+end
+
+def fun_l7_n559()
+ fun_l8_n767
+end
+
+def fun_l7_n560()
+ fun_l8_n51
+end
+
+def fun_l7_n561()
+ fun_l8_n596
+end
+
+def fun_l7_n562()
+ fun_l8_n744
+end
+
+def fun_l7_n563()
+ fun_l8_n80
+end
+
+def fun_l7_n564()
+ fun_l8_n787
+end
+
+def fun_l7_n565()
+ fun_l8_n783
+end
+
+def fun_l7_n566()
+ fun_l8_n310
+end
+
+def fun_l7_n567()
+ fun_l8_n703
+end
+
+def fun_l7_n568()
+ fun_l8_n665
+end
+
+def fun_l7_n569()
+ fun_l8_n866
+end
+
+def fun_l7_n570()
+ fun_l8_n80
+end
+
+def fun_l7_n571()
+ fun_l8_n694
+end
+
+def fun_l7_n572()
+ fun_l8_n970
+end
+
+def fun_l7_n573()
+ fun_l8_n102
+end
+
+def fun_l7_n574()
+ fun_l8_n362
+end
+
+def fun_l7_n575()
+ fun_l8_n119
+end
+
+def fun_l7_n576()
+ fun_l8_n772
+end
+
+def fun_l7_n577()
+ fun_l8_n715
+end
+
+def fun_l7_n578()
+ fun_l8_n487
+end
+
+def fun_l7_n579()
+ fun_l8_n48
+end
+
+def fun_l7_n580()
+ fun_l8_n824
+end
+
+def fun_l7_n581()
+ fun_l8_n208
+end
+
+def fun_l7_n582()
+ fun_l8_n494
+end
+
+def fun_l7_n583()
+ fun_l8_n138
+end
+
+def fun_l7_n584()
+ fun_l8_n961
+end
+
+def fun_l7_n585()
+ fun_l8_n553
+end
+
+def fun_l7_n586()
+ fun_l8_n302
+end
+
+def fun_l7_n587()
+ fun_l8_n266
+end
+
+def fun_l7_n588()
+ fun_l8_n589
+end
+
+def fun_l7_n589()
+ fun_l8_n964
+end
+
+def fun_l7_n590()
+ fun_l8_n238
+end
+
+def fun_l7_n591()
+ fun_l8_n139
+end
+
+def fun_l7_n592()
+ fun_l8_n680
+end
+
+def fun_l7_n593()
+ fun_l8_n252
+end
+
+def fun_l7_n594()
+ fun_l8_n701
+end
+
+def fun_l7_n595()
+ fun_l8_n100
+end
+
+def fun_l7_n596()
+ fun_l8_n358
+end
+
+def fun_l7_n597()
+ fun_l8_n770
+end
+
+def fun_l7_n598()
+ fun_l8_n880
+end
+
+def fun_l7_n599()
+ fun_l8_n761
+end
+
+def fun_l7_n600()
+ fun_l8_n876
+end
+
+def fun_l7_n601()
+ fun_l8_n373
+end
+
+def fun_l7_n602()
+ fun_l8_n775
+end
+
+def fun_l7_n603()
+ fun_l8_n317
+end
+
+def fun_l7_n604()
+ fun_l8_n456
+end
+
+def fun_l7_n605()
+ fun_l8_n343
+end
+
+def fun_l7_n606()
+ fun_l8_n68
+end
+
+def fun_l7_n607()
+ fun_l8_n25
+end
+
+def fun_l7_n608()
+ fun_l8_n399
+end
+
+def fun_l7_n609()
+ fun_l8_n14
+end
+
+def fun_l7_n610()
+ fun_l8_n549
+end
+
+def fun_l7_n611()
+ fun_l8_n45
+end
+
+def fun_l7_n612()
+ fun_l8_n516
+end
+
+def fun_l7_n613()
+ fun_l8_n345
+end
+
+def fun_l7_n614()
+ fun_l8_n909
+end
+
+def fun_l7_n615()
+ fun_l8_n954
+end
+
+def fun_l7_n616()
+ fun_l8_n893
+end
+
+def fun_l7_n617()
+ fun_l8_n57
+end
+
+def fun_l7_n618()
+ fun_l8_n83
+end
+
+def fun_l7_n619()
+ fun_l8_n658
+end
+
+def fun_l7_n620()
+ fun_l8_n585
+end
+
+def fun_l7_n621()
+ fun_l8_n260
+end
+
+def fun_l7_n622()
+ fun_l8_n226
+end
+
+def fun_l7_n623()
+ fun_l8_n186
+end
+
+def fun_l7_n624()
+ fun_l8_n994
+end
+
+def fun_l7_n625()
+ fun_l8_n408
+end
+
+def fun_l7_n626()
+ fun_l8_n878
+end
+
+def fun_l7_n627()
+ fun_l8_n473
+end
+
+def fun_l7_n628()
+ fun_l8_n153
+end
+
+def fun_l7_n629()
+ fun_l8_n590
+end
+
+def fun_l7_n630()
+ fun_l8_n610
+end
+
+def fun_l7_n631()
+ fun_l8_n438
+end
+
+def fun_l7_n632()
+ fun_l8_n484
+end
+
+def fun_l7_n633()
+ fun_l8_n908
+end
+
+def fun_l7_n634()
+ fun_l8_n992
+end
+
+def fun_l7_n635()
+ fun_l8_n556
+end
+
+def fun_l7_n636()
+ fun_l8_n929
+end
+
+def fun_l7_n637()
+ fun_l8_n128
+end
+
+def fun_l7_n638()
+ fun_l8_n372
+end
+
+def fun_l7_n639()
+ fun_l8_n36
+end
+
+def fun_l7_n640()
+ fun_l8_n545
+end
+
+def fun_l7_n641()
+ fun_l8_n801
+end
+
+def fun_l7_n642()
+ fun_l8_n444
+end
+
+def fun_l7_n643()
+ fun_l8_n822
+end
+
+def fun_l7_n644()
+ fun_l8_n587
+end
+
+def fun_l7_n645()
+ fun_l8_n418
+end
+
+def fun_l7_n646()
+ fun_l8_n539
+end
+
+def fun_l7_n647()
+ fun_l8_n266
+end
+
+def fun_l7_n648()
+ fun_l8_n869
+end
+
+def fun_l7_n649()
+ fun_l8_n84
+end
+
+def fun_l7_n650()
+ fun_l8_n265
+end
+
+def fun_l7_n651()
+ fun_l8_n551
+end
+
+def fun_l7_n652()
+ fun_l8_n35
+end
+
+def fun_l7_n653()
+ fun_l8_n606
+end
+
+def fun_l7_n654()
+ fun_l8_n379
+end
+
+def fun_l7_n655()
+ fun_l8_n417
+end
+
+def fun_l7_n656()
+ fun_l8_n641
+end
+
+def fun_l7_n657()
+ fun_l8_n889
+end
+
+def fun_l7_n658()
+ fun_l8_n232
+end
+
+def fun_l7_n659()
+ fun_l8_n957
+end
+
+def fun_l7_n660()
+ fun_l8_n666
+end
+
+def fun_l7_n661()
+ fun_l8_n588
+end
+
+def fun_l7_n662()
+ fun_l8_n591
+end
+
+def fun_l7_n663()
+ fun_l8_n489
+end
+
+def fun_l7_n664()
+ fun_l8_n927
+end
+
+def fun_l7_n665()
+ fun_l8_n304
+end
+
+def fun_l7_n666()
+ fun_l8_n856
+end
+
+def fun_l7_n667()
+ fun_l8_n969
+end
+
+def fun_l7_n668()
+ fun_l8_n36
+end
+
+def fun_l7_n669()
+ fun_l8_n335
+end
+
+def fun_l7_n670()
+ fun_l8_n51
+end
+
+def fun_l7_n671()
+ fun_l8_n765
+end
+
+def fun_l7_n672()
+ fun_l8_n262
+end
+
+def fun_l7_n673()
+ fun_l8_n858
+end
+
+def fun_l7_n674()
+ fun_l8_n412
+end
+
+def fun_l7_n675()
+ fun_l8_n789
+end
+
+def fun_l7_n676()
+ fun_l8_n290
+end
+
+def fun_l7_n677()
+ fun_l8_n935
+end
+
+def fun_l7_n678()
+ fun_l8_n212
+end
+
+def fun_l7_n679()
+ fun_l8_n35
+end
+
+def fun_l7_n680()
+ fun_l8_n141
+end
+
+def fun_l7_n681()
+ fun_l8_n985
+end
+
+def fun_l7_n682()
+ fun_l8_n626
+end
+
+def fun_l7_n683()
+ fun_l8_n996
+end
+
+def fun_l7_n684()
+ fun_l8_n906
+end
+
+def fun_l7_n685()
+ fun_l8_n242
+end
+
+def fun_l7_n686()
+ fun_l8_n431
+end
+
+def fun_l7_n687()
+ fun_l8_n494
+end
+
+def fun_l7_n688()
+ fun_l8_n564
+end
+
+def fun_l7_n689()
+ fun_l8_n737
+end
+
+def fun_l7_n690()
+ fun_l8_n366
+end
+
+def fun_l7_n691()
+ fun_l8_n763
+end
+
+def fun_l7_n692()
+ fun_l8_n556
+end
+
+def fun_l7_n693()
+ fun_l8_n436
+end
+
+def fun_l7_n694()
+ fun_l8_n17
+end
+
+def fun_l7_n695()
+ fun_l8_n283
+end
+
+def fun_l7_n696()
+ fun_l8_n641
+end
+
+def fun_l7_n697()
+ fun_l8_n298
+end
+
+def fun_l7_n698()
+ fun_l8_n819
+end
+
+def fun_l7_n699()
+ fun_l8_n858
+end
+
+def fun_l7_n700()
+ fun_l8_n161
+end
+
+def fun_l7_n701()
+ fun_l8_n813
+end
+
+def fun_l7_n702()
+ fun_l8_n604
+end
+
+def fun_l7_n703()
+ fun_l8_n878
+end
+
+def fun_l7_n704()
+ fun_l8_n880
+end
+
+def fun_l7_n705()
+ fun_l8_n431
+end
+
+def fun_l7_n706()
+ fun_l8_n944
+end
+
+def fun_l7_n707()
+ fun_l8_n672
+end
+
+def fun_l7_n708()
+ fun_l8_n983
+end
+
+def fun_l7_n709()
+ fun_l8_n224
+end
+
+def fun_l7_n710()
+ fun_l8_n915
+end
+
+def fun_l7_n711()
+ fun_l8_n699
+end
+
+def fun_l7_n712()
+ fun_l8_n112
+end
+
+def fun_l7_n713()
+ fun_l8_n64
+end
+
+def fun_l7_n714()
+ fun_l8_n3
+end
+
+def fun_l7_n715()
+ fun_l8_n508
+end
+
+def fun_l7_n716()
+ fun_l8_n172
+end
+
+def fun_l7_n717()
+ fun_l8_n777
+end
+
+def fun_l7_n718()
+ fun_l8_n328
+end
+
+def fun_l7_n719()
+ fun_l8_n338
+end
+
+def fun_l7_n720()
+ fun_l8_n897
+end
+
+def fun_l7_n721()
+ fun_l8_n373
+end
+
+def fun_l7_n722()
+ fun_l8_n91
+end
+
+def fun_l7_n723()
+ fun_l8_n149
+end
+
+def fun_l7_n724()
+ fun_l8_n65
+end
+
+def fun_l7_n725()
+ fun_l8_n685
+end
+
+def fun_l7_n726()
+ fun_l8_n939
+end
+
+def fun_l7_n727()
+ fun_l8_n427
+end
+
+def fun_l7_n728()
+ fun_l8_n606
+end
+
+def fun_l7_n729()
+ fun_l8_n818
+end
+
+def fun_l7_n730()
+ fun_l8_n24
+end
+
+def fun_l7_n731()
+ fun_l8_n901
+end
+
+def fun_l7_n732()
+ fun_l8_n979
+end
+
+def fun_l7_n733()
+ fun_l8_n88
+end
+
+def fun_l7_n734()
+ fun_l8_n516
+end
+
+def fun_l7_n735()
+ fun_l8_n44
+end
+
+def fun_l7_n736()
+ fun_l8_n540
+end
+
+def fun_l7_n737()
+ fun_l8_n586
+end
+
+def fun_l7_n738()
+ fun_l8_n695
+end
+
+def fun_l7_n739()
+ fun_l8_n774
+end
+
+def fun_l7_n740()
+ fun_l8_n797
+end
+
+def fun_l7_n741()
+ fun_l8_n524
+end
+
+def fun_l7_n742()
+ fun_l8_n784
+end
+
+def fun_l7_n743()
+ fun_l8_n203
+end
+
+def fun_l7_n744()
+ fun_l8_n808
+end
+
+def fun_l7_n745()
+ fun_l8_n216
+end
+
+def fun_l7_n746()
+ fun_l8_n14
+end
+
+def fun_l7_n747()
+ fun_l8_n799
+end
+
+def fun_l7_n748()
+ fun_l8_n660
+end
+
+def fun_l7_n749()
+ fun_l8_n417
+end
+
+def fun_l7_n750()
+ fun_l8_n573
+end
+
+def fun_l7_n751()
+ fun_l8_n919
+end
+
+def fun_l7_n752()
+ fun_l8_n956
+end
+
+def fun_l7_n753()
+ fun_l8_n475
+end
+
+def fun_l7_n754()
+ fun_l8_n941
+end
+
+def fun_l7_n755()
+ fun_l8_n629
+end
+
+def fun_l7_n756()
+ fun_l8_n745
+end
+
+def fun_l7_n757()
+ fun_l8_n656
+end
+
+def fun_l7_n758()
+ fun_l8_n315
+end
+
+def fun_l7_n759()
+ fun_l8_n952
+end
+
+def fun_l7_n760()
+ fun_l8_n241
+end
+
+def fun_l7_n761()
+ fun_l8_n341
+end
+
+def fun_l7_n762()
+ fun_l8_n156
+end
+
+def fun_l7_n763()
+ fun_l8_n258
+end
+
+def fun_l7_n764()
+ fun_l8_n275
+end
+
+def fun_l7_n765()
+ fun_l8_n950
+end
+
+def fun_l7_n766()
+ fun_l8_n715
+end
+
+def fun_l7_n767()
+ fun_l8_n746
+end
+
+def fun_l7_n768()
+ fun_l8_n428
+end
+
+def fun_l7_n769()
+ fun_l8_n176
+end
+
+def fun_l7_n770()
+ fun_l8_n586
+end
+
+def fun_l7_n771()
+ fun_l8_n912
+end
+
+def fun_l7_n772()
+ fun_l8_n484
+end
+
+def fun_l7_n773()
+ fun_l8_n155
+end
+
+def fun_l7_n774()
+ fun_l8_n648
+end
+
+def fun_l7_n775()
+ fun_l8_n27
+end
+
+def fun_l7_n776()
+ fun_l8_n188
+end
+
+def fun_l7_n777()
+ fun_l8_n804
+end
+
+def fun_l7_n778()
+ fun_l8_n646
+end
+
+def fun_l7_n779()
+ fun_l8_n884
+end
+
+def fun_l7_n780()
+ fun_l8_n332
+end
+
+def fun_l7_n781()
+ fun_l8_n28
+end
+
+def fun_l7_n782()
+ fun_l8_n966
+end
+
+def fun_l7_n783()
+ fun_l8_n531
+end
+
+def fun_l7_n784()
+ fun_l8_n955
+end
+
+def fun_l7_n785()
+ fun_l8_n264
+end
+
+def fun_l7_n786()
+ fun_l8_n387
+end
+
+def fun_l7_n787()
+ fun_l8_n274
+end
+
+def fun_l7_n788()
+ fun_l8_n790
+end
+
+def fun_l7_n789()
+ fun_l8_n80
+end
+
+def fun_l7_n790()
+ fun_l8_n551
+end
+
+def fun_l7_n791()
+ fun_l8_n762
+end
+
+def fun_l7_n792()
+ fun_l8_n777
+end
+
+def fun_l7_n793()
+ fun_l8_n120
+end
+
+def fun_l7_n794()
+ fun_l8_n189
+end
+
+def fun_l7_n795()
+ fun_l8_n241
+end
+
+def fun_l7_n796()
+ fun_l8_n608
+end
+
+def fun_l7_n797()
+ fun_l8_n689
+end
+
+def fun_l7_n798()
+ fun_l8_n406
+end
+
+def fun_l7_n799()
+ fun_l8_n853
+end
+
+def fun_l7_n800()
+ fun_l8_n606
+end
+
+def fun_l7_n801()
+ fun_l8_n723
+end
+
+def fun_l7_n802()
+ fun_l8_n498
+end
+
+def fun_l7_n803()
+ fun_l8_n109
+end
+
+def fun_l7_n804()
+ fun_l8_n400
+end
+
+def fun_l7_n805()
+ fun_l8_n266
+end
+
+def fun_l7_n806()
+ fun_l8_n661
+end
+
+def fun_l7_n807()
+ fun_l8_n107
+end
+
+def fun_l7_n808()
+ fun_l8_n541
+end
+
+def fun_l7_n809()
+ fun_l8_n44
+end
+
+def fun_l7_n810()
+ fun_l8_n184
+end
+
+def fun_l7_n811()
+ fun_l8_n516
+end
+
+def fun_l7_n812()
+ fun_l8_n706
+end
+
+def fun_l7_n813()
+ fun_l8_n714
+end
+
+def fun_l7_n814()
+ fun_l8_n399
+end
+
+def fun_l7_n815()
+ fun_l8_n877
+end
+
+def fun_l7_n816()
+ fun_l8_n301
+end
+
+def fun_l7_n817()
+ fun_l8_n75
+end
+
+def fun_l7_n818()
+ fun_l8_n169
+end
+
+def fun_l7_n819()
+ fun_l8_n99
+end
+
+def fun_l7_n820()
+ fun_l8_n155
+end
+
+def fun_l7_n821()
+ fun_l8_n281
+end
+
+def fun_l7_n822()
+ fun_l8_n210
+end
+
+def fun_l7_n823()
+ fun_l8_n835
+end
+
+def fun_l7_n824()
+ fun_l8_n700
+end
+
+def fun_l7_n825()
+ fun_l8_n231
+end
+
+def fun_l7_n826()
+ fun_l8_n967
+end
+
+def fun_l7_n827()
+ fun_l8_n818
+end
+
+def fun_l7_n828()
+ fun_l8_n670
+end
+
+def fun_l7_n829()
+ fun_l8_n311
+end
+
+def fun_l7_n830()
+ fun_l8_n919
+end
+
+def fun_l7_n831()
+ fun_l8_n949
+end
+
+def fun_l7_n832()
+ fun_l8_n677
+end
+
+def fun_l7_n833()
+ fun_l8_n626
+end
+
+def fun_l7_n834()
+ fun_l8_n171
+end
+
+def fun_l7_n835()
+ fun_l8_n723
+end
+
+def fun_l7_n836()
+ fun_l8_n606
+end
+
+def fun_l7_n837()
+ fun_l8_n580
+end
+
+def fun_l7_n838()
+ fun_l8_n369
+end
+
+def fun_l7_n839()
+ fun_l8_n510
+end
+
+def fun_l7_n840()
+ fun_l8_n554
+end
+
+def fun_l7_n841()
+ fun_l8_n749
+end
+
+def fun_l7_n842()
+ fun_l8_n623
+end
+
+def fun_l7_n843()
+ fun_l8_n735
+end
+
+def fun_l7_n844()
+ fun_l8_n401
+end
+
+def fun_l7_n845()
+ fun_l8_n693
+end
+
+def fun_l7_n846()
+ fun_l8_n367
+end
+
+def fun_l7_n847()
+ fun_l8_n351
+end
+
+def fun_l7_n848()
+ fun_l8_n527
+end
+
+def fun_l7_n849()
+ fun_l8_n964
+end
+
+def fun_l7_n850()
+ fun_l8_n193
+end
+
+def fun_l7_n851()
+ fun_l8_n401
+end
+
+def fun_l7_n852()
+ fun_l8_n873
+end
+
+def fun_l7_n853()
+ fun_l8_n326
+end
+
+def fun_l7_n854()
+ fun_l8_n292
+end
+
+def fun_l7_n855()
+ fun_l8_n519
+end
+
+def fun_l7_n856()
+ fun_l8_n801
+end
+
+def fun_l7_n857()
+ fun_l8_n45
+end
+
+def fun_l7_n858()
+ fun_l8_n212
+end
+
+def fun_l7_n859()
+ fun_l8_n812
+end
+
+def fun_l7_n860()
+ fun_l8_n541
+end
+
+def fun_l7_n861()
+ fun_l8_n410
+end
+
+def fun_l7_n862()
+ fun_l8_n177
+end
+
+def fun_l7_n863()
+ fun_l8_n940
+end
+
+def fun_l7_n864()
+ fun_l8_n832
+end
+
+def fun_l7_n865()
+ fun_l8_n7
+end
+
+def fun_l7_n866()
+ fun_l8_n654
+end
+
+def fun_l7_n867()
+ fun_l8_n282
+end
+
+def fun_l7_n868()
+ fun_l8_n916
+end
+
+def fun_l7_n869()
+ fun_l8_n638
+end
+
+def fun_l7_n870()
+ fun_l8_n71
+end
+
+def fun_l7_n871()
+ fun_l8_n153
+end
+
+def fun_l7_n872()
+ fun_l8_n285
+end
+
+def fun_l7_n873()
+ fun_l8_n744
+end
+
+def fun_l7_n874()
+ fun_l8_n912
+end
+
+def fun_l7_n875()
+ fun_l8_n258
+end
+
+def fun_l7_n876()
+ fun_l8_n346
+end
+
+def fun_l7_n877()
+ fun_l8_n366
+end
+
+def fun_l7_n878()
+ fun_l8_n165
+end
+
+def fun_l7_n879()
+ fun_l8_n745
+end
+
+def fun_l7_n880()
+ fun_l8_n472
+end
+
+def fun_l7_n881()
+ fun_l8_n290
+end
+
+def fun_l7_n882()
+ fun_l8_n695
+end
+
+def fun_l7_n883()
+ fun_l8_n522
+end
+
+def fun_l7_n884()
+ fun_l8_n851
+end
+
+def fun_l7_n885()
+ fun_l8_n870
+end
+
+def fun_l7_n886()
+ fun_l8_n70
+end
+
+def fun_l7_n887()
+ fun_l8_n334
+end
+
+def fun_l7_n888()
+ fun_l8_n786
+end
+
+def fun_l7_n889()
+ fun_l8_n41
+end
+
+def fun_l7_n890()
+ fun_l8_n316
+end
+
+def fun_l7_n891()
+ fun_l8_n594
+end
+
+def fun_l7_n892()
+ fun_l8_n168
+end
+
+def fun_l7_n893()
+ fun_l8_n960
+end
+
+def fun_l7_n894()
+ fun_l8_n357
+end
+
+def fun_l7_n895()
+ fun_l8_n695
+end
+
+def fun_l7_n896()
+ fun_l8_n616
+end
+
+def fun_l7_n897()
+ fun_l8_n63
+end
+
+def fun_l7_n898()
+ fun_l8_n59
+end
+
+def fun_l7_n899()
+ fun_l8_n958
+end
+
+def fun_l7_n900()
+ fun_l8_n623
+end
+
+def fun_l7_n901()
+ fun_l8_n427
+end
+
+def fun_l7_n902()
+ fun_l8_n203
+end
+
+def fun_l7_n903()
+ fun_l8_n752
+end
+
+def fun_l7_n904()
+ fun_l8_n28
+end
+
+def fun_l7_n905()
+ fun_l8_n687
+end
+
+def fun_l7_n906()
+ fun_l8_n723
+end
+
+def fun_l7_n907()
+ fun_l8_n688
+end
+
+def fun_l7_n908()
+ fun_l8_n417
+end
+
+def fun_l7_n909()
+ fun_l8_n769
+end
+
+def fun_l7_n910()
+ fun_l8_n683
+end
+
+def fun_l7_n911()
+ fun_l8_n865
+end
+
+def fun_l7_n912()
+ fun_l8_n75
+end
+
+def fun_l7_n913()
+ fun_l8_n671
+end
+
+def fun_l7_n914()
+ fun_l8_n168
+end
+
+def fun_l7_n915()
+ fun_l8_n958
+end
+
+def fun_l7_n916()
+ fun_l8_n96
+end
+
+def fun_l7_n917()
+ fun_l8_n981
+end
+
+def fun_l7_n918()
+ fun_l8_n481
+end
+
+def fun_l7_n919()
+ fun_l8_n887
+end
+
+def fun_l7_n920()
+ fun_l8_n319
+end
+
+def fun_l7_n921()
+ fun_l8_n349
+end
+
+def fun_l7_n922()
+ fun_l8_n774
+end
+
+def fun_l7_n923()
+ fun_l8_n490
+end
+
+def fun_l7_n924()
+ fun_l8_n64
+end
+
+def fun_l7_n925()
+ fun_l8_n581
+end
+
+def fun_l7_n926()
+ fun_l8_n306
+end
+
+def fun_l7_n927()
+ fun_l8_n141
+end
+
+def fun_l7_n928()
+ fun_l8_n353
+end
+
+def fun_l7_n929()
+ fun_l8_n653
+end
+
+def fun_l7_n930()
+ fun_l8_n995
+end
+
+def fun_l7_n931()
+ fun_l8_n546
+end
+
+def fun_l7_n932()
+ fun_l8_n163
+end
+
+def fun_l7_n933()
+ fun_l8_n986
+end
+
+def fun_l7_n934()
+ fun_l8_n822
+end
+
+def fun_l7_n935()
+ fun_l8_n445
+end
+
+def fun_l7_n936()
+ fun_l8_n595
+end
+
+def fun_l7_n937()
+ fun_l8_n457
+end
+
+def fun_l7_n938()
+ fun_l8_n119
+end
+
+def fun_l7_n939()
+ fun_l8_n575
+end
+
+def fun_l7_n940()
+ fun_l8_n738
+end
+
+def fun_l7_n941()
+ fun_l8_n307
+end
+
+def fun_l7_n942()
+ fun_l8_n322
+end
+
+def fun_l7_n943()
+ fun_l8_n938
+end
+
+def fun_l7_n944()
+ fun_l8_n787
+end
+
+def fun_l7_n945()
+ fun_l8_n834
+end
+
+def fun_l7_n946()
+ fun_l8_n360
+end
+
+def fun_l7_n947()
+ fun_l8_n631
+end
+
+def fun_l7_n948()
+ fun_l8_n796
+end
+
+def fun_l7_n949()
+ fun_l8_n498
+end
+
+def fun_l7_n950()
+ fun_l8_n494
+end
+
+def fun_l7_n951()
+ fun_l8_n303
+end
+
+def fun_l7_n952()
+ fun_l8_n107
+end
+
+def fun_l7_n953()
+ fun_l8_n403
+end
+
+def fun_l7_n954()
+ fun_l8_n635
+end
+
+def fun_l7_n955()
+ fun_l8_n81
+end
+
+def fun_l7_n956()
+ fun_l8_n770
+end
+
+def fun_l7_n957()
+ fun_l8_n123
+end
+
+def fun_l7_n958()
+ fun_l8_n389
+end
+
+def fun_l7_n959()
+ fun_l8_n965
+end
+
+def fun_l7_n960()
+ fun_l8_n579
+end
+
+def fun_l7_n961()
+ fun_l8_n816
+end
+
+def fun_l7_n962()
+ fun_l8_n570
+end
+
+def fun_l7_n963()
+ fun_l8_n85
+end
+
+def fun_l7_n964()
+ fun_l8_n70
+end
+
+def fun_l7_n965()
+ fun_l8_n13
+end
+
+def fun_l7_n966()
+ fun_l8_n142
+end
+
+def fun_l7_n967()
+ fun_l8_n765
+end
+
+def fun_l7_n968()
+ fun_l8_n912
+end
+
+def fun_l7_n969()
+ fun_l8_n496
+end
+
+def fun_l7_n970()
+ fun_l8_n77
+end
+
+def fun_l7_n971()
+ fun_l8_n75
+end
+
+def fun_l7_n972()
+ fun_l8_n822
+end
+
+def fun_l7_n973()
+ fun_l8_n859
+end
+
+def fun_l7_n974()
+ fun_l8_n502
+end
+
+def fun_l7_n975()
+ fun_l8_n673
+end
+
+def fun_l7_n976()
+ fun_l8_n3
+end
+
+def fun_l7_n977()
+ fun_l8_n288
+end
+
+def fun_l7_n978()
+ fun_l8_n547
+end
+
+def fun_l7_n979()
+ fun_l8_n720
+end
+
+def fun_l7_n980()
+ fun_l8_n822
+end
+
+def fun_l7_n981()
+ fun_l8_n518
+end
+
+def fun_l7_n982()
+ fun_l8_n243
+end
+
+def fun_l7_n983()
+ fun_l8_n695
+end
+
+def fun_l7_n984()
+ fun_l8_n182
+end
+
+def fun_l7_n985()
+ fun_l8_n783
+end
+
+def fun_l7_n986()
+ fun_l8_n237
+end
+
+def fun_l7_n987()
+ fun_l8_n722
+end
+
+def fun_l7_n988()
+ fun_l8_n154
+end
+
+def fun_l7_n989()
+ fun_l8_n728
+end
+
+def fun_l7_n990()
+ fun_l8_n673
+end
+
+def fun_l7_n991()
+ fun_l8_n885
+end
+
+def fun_l7_n992()
+ fun_l8_n490
+end
+
+def fun_l7_n993()
+ fun_l8_n50
+end
+
+def fun_l7_n994()
+ fun_l8_n557
+end
+
+def fun_l7_n995()
+ fun_l8_n993
+end
+
+def fun_l7_n996()
+ fun_l8_n509
+end
+
+def fun_l7_n997()
+ fun_l8_n40
+end
+
+def fun_l7_n998()
+ fun_l8_n754
+end
+
+def fun_l7_n999()
+ fun_l8_n651
+end
+
+def fun_l8_n0()
+ fun_l9_n463
+end
+
+def fun_l8_n1()
+ fun_l9_n312
+end
+
+def fun_l8_n2()
+ fun_l9_n831
+end
+
+def fun_l8_n3()
+ fun_l9_n378
+end
+
+def fun_l8_n4()
+ fun_l9_n706
+end
+
+def fun_l8_n5()
+ fun_l9_n367
+end
+
+def fun_l8_n6()
+ fun_l9_n890
+end
+
+def fun_l8_n7()
+ fun_l9_n315
+end
+
+def fun_l8_n8()
+ fun_l9_n808
+end
+
+def fun_l8_n9()
+ fun_l9_n338
+end
+
+def fun_l8_n10()
+ fun_l9_n911
+end
+
+def fun_l8_n11()
+ fun_l9_n630
+end
+
+def fun_l8_n12()
+ fun_l9_n273
+end
+
+def fun_l8_n13()
+ fun_l9_n835
+end
+
+def fun_l8_n14()
+ fun_l9_n306
+end
+
+def fun_l8_n15()
+ fun_l9_n81
+end
+
+def fun_l8_n16()
+ fun_l9_n26
+end
+
+def fun_l8_n17()
+ fun_l9_n210
+end
+
+def fun_l8_n18()
+ fun_l9_n74
+end
+
+def fun_l8_n19()
+ fun_l9_n297
+end
+
+def fun_l8_n20()
+ fun_l9_n94
+end
+
+def fun_l8_n21()
+ fun_l9_n897
+end
+
+def fun_l8_n22()
+ fun_l9_n839
+end
+
+def fun_l8_n23()
+ fun_l9_n384
+end
+
+def fun_l8_n24()
+ fun_l9_n297
+end
+
+def fun_l8_n25()
+ fun_l9_n198
+end
+
+def fun_l8_n26()
+ fun_l9_n829
+end
+
+def fun_l8_n27()
+ fun_l9_n796
+end
+
+def fun_l8_n28()
+ fun_l9_n89
+end
+
+def fun_l8_n29()
+ fun_l9_n510
+end
+
+def fun_l8_n30()
+ fun_l9_n761
+end
+
+def fun_l8_n31()
+ fun_l9_n665
+end
+
+def fun_l8_n32()
+ fun_l9_n570
+end
+
+def fun_l8_n33()
+ fun_l9_n270
+end
+
+def fun_l8_n34()
+ fun_l9_n600
+end
+
+def fun_l8_n35()
+ fun_l9_n390
+end
+
+def fun_l8_n36()
+ fun_l9_n583
+end
+
+def fun_l8_n37()
+ fun_l9_n392
+end
+
+def fun_l8_n38()
+ fun_l9_n862
+end
+
+def fun_l8_n39()
+ fun_l9_n164
+end
+
+def fun_l8_n40()
+ fun_l9_n626
+end
+
+def fun_l8_n41()
+ fun_l9_n558
+end
+
+def fun_l8_n42()
+ fun_l9_n929
+end
+
+def fun_l8_n43()
+ fun_l9_n161
+end
+
+def fun_l8_n44()
+ fun_l9_n80
+end
+
+def fun_l8_n45()
+ fun_l9_n884
+end
+
+def fun_l8_n46()
+ fun_l9_n784
+end
+
+def fun_l8_n47()
+ fun_l9_n41
+end
+
+def fun_l8_n48()
+ fun_l9_n787
+end
+
+def fun_l8_n49()
+ fun_l9_n179
+end
+
+def fun_l8_n50()
+ fun_l9_n852
+end
+
+def fun_l8_n51()
+ fun_l9_n697
+end
+
+def fun_l8_n52()
+ fun_l9_n8
+end
+
+def fun_l8_n53()
+ fun_l9_n320
+end
+
+def fun_l8_n54()
+ fun_l9_n768
+end
+
+def fun_l8_n55()
+ fun_l9_n574
+end
+
+def fun_l8_n56()
+ fun_l9_n339
+end
+
+def fun_l8_n57()
+ fun_l9_n757
+end
+
+def fun_l8_n58()
+ fun_l9_n221
+end
+
+def fun_l8_n59()
+ fun_l9_n34
+end
+
+def fun_l8_n60()
+ fun_l9_n36
+end
+
+def fun_l8_n61()
+ fun_l9_n244
+end
+
+def fun_l8_n62()
+ fun_l9_n347
+end
+
+def fun_l8_n63()
+ fun_l9_n330
+end
+
+def fun_l8_n64()
+ fun_l9_n717
+end
+
+def fun_l8_n65()
+ fun_l9_n187
+end
+
+def fun_l8_n66()
+ fun_l9_n179
+end
+
+def fun_l8_n67()
+ fun_l9_n807
+end
+
+def fun_l8_n68()
+ fun_l9_n350
+end
+
+def fun_l8_n69()
+ fun_l9_n882
+end
+
+def fun_l8_n70()
+ fun_l9_n936
+end
+
+def fun_l8_n71()
+ fun_l9_n282
+end
+
+def fun_l8_n72()
+ fun_l9_n483
+end
+
+def fun_l8_n73()
+ fun_l9_n296
+end
+
+def fun_l8_n74()
+ fun_l9_n461
+end
+
+def fun_l8_n75()
+ fun_l9_n153
+end
+
+def fun_l8_n76()
+ fun_l9_n555
+end
+
+def fun_l8_n77()
+ fun_l9_n826
+end
+
+def fun_l8_n78()
+ fun_l9_n134
+end
+
+def fun_l8_n79()
+ fun_l9_n552
+end
+
+def fun_l8_n80()
+ fun_l9_n793
+end
+
+def fun_l8_n81()
+ fun_l9_n832
+end
+
+def fun_l8_n82()
+ fun_l9_n270
+end
+
+def fun_l8_n83()
+ fun_l9_n685
+end
+
+def fun_l8_n84()
+ fun_l9_n145
+end
+
+def fun_l8_n85()
+ fun_l9_n331
+end
+
+def fun_l8_n86()
+ fun_l9_n775
+end
+
+def fun_l8_n87()
+ fun_l9_n350
+end
+
+def fun_l8_n88()
+ fun_l9_n569
+end
+
+def fun_l8_n89()
+ fun_l9_n808
+end
+
+def fun_l8_n90()
+ fun_l9_n537
+end
+
+def fun_l8_n91()
+ fun_l9_n40
+end
+
+def fun_l8_n92()
+ fun_l9_n180
+end
+
+def fun_l8_n93()
+ fun_l9_n79
+end
+
+def fun_l8_n94()
+ fun_l9_n664
+end
+
+def fun_l8_n95()
+ fun_l9_n43
+end
+
+def fun_l8_n96()
+ fun_l9_n113
+end
+
+def fun_l8_n97()
+ fun_l9_n108
+end
+
+def fun_l8_n98()
+ fun_l9_n343
+end
+
+def fun_l8_n99()
+ fun_l9_n881
+end
+
+def fun_l8_n100()
+ fun_l9_n272
+end
+
+def fun_l8_n101()
+ fun_l9_n559
+end
+
+def fun_l8_n102()
+ fun_l9_n500
+end
+
+def fun_l8_n103()
+ fun_l9_n738
+end
+
+def fun_l8_n104()
+ fun_l9_n195
+end
+
+def fun_l8_n105()
+ fun_l9_n220
+end
+
+def fun_l8_n106()
+ fun_l9_n321
+end
+
+def fun_l8_n107()
+ fun_l9_n965
+end
+
+def fun_l8_n108()
+ fun_l9_n771
+end
+
+def fun_l8_n109()
+ fun_l9_n227
+end
+
+def fun_l8_n110()
+ fun_l9_n710
+end
+
+def fun_l8_n111()
+ fun_l9_n865
+end
+
+def fun_l8_n112()
+ fun_l9_n791
+end
+
+def fun_l8_n113()
+ fun_l9_n591
+end
+
+def fun_l8_n114()
+ fun_l9_n296
+end
+
+def fun_l8_n115()
+ fun_l9_n269
+end
+
+def fun_l8_n116()
+ fun_l9_n816
+end
+
+def fun_l8_n117()
+ fun_l9_n666
+end
+
+def fun_l8_n118()
+ fun_l9_n31
+end
+
+def fun_l8_n119()
+ fun_l9_n275
+end
+
+def fun_l8_n120()
+ fun_l9_n660
+end
+
+def fun_l8_n121()
+ fun_l9_n514
+end
+
+def fun_l8_n122()
+ fun_l9_n435
+end
+
+def fun_l8_n123()
+ fun_l9_n351
+end
+
+def fun_l8_n124()
+ fun_l9_n190
+end
+
+def fun_l8_n125()
+ fun_l9_n276
+end
+
+def fun_l8_n126()
+ fun_l9_n536
+end
+
+def fun_l8_n127()
+ fun_l9_n551
+end
+
+def fun_l8_n128()
+ fun_l9_n315
+end
+
+def fun_l8_n129()
+ fun_l9_n957
+end
+
+def fun_l8_n130()
+ fun_l9_n609
+end
+
+def fun_l8_n131()
+ fun_l9_n31
+end
+
+def fun_l8_n132()
+ fun_l9_n375
+end
+
+def fun_l8_n133()
+ fun_l9_n363
+end
+
+def fun_l8_n134()
+ fun_l9_n797
+end
+
+def fun_l8_n135()
+ fun_l9_n985
+end
+
+def fun_l8_n136()
+ fun_l9_n797
+end
+
+def fun_l8_n137()
+ fun_l9_n992
+end
+
+def fun_l8_n138()
+ fun_l9_n503
+end
+
+def fun_l8_n139()
+ fun_l9_n336
+end
+
+def fun_l8_n140()
+ fun_l9_n328
+end
+
+def fun_l8_n141()
+ fun_l9_n326
+end
+
+def fun_l8_n142()
+ fun_l9_n983
+end
+
+def fun_l8_n143()
+ fun_l9_n509
+end
+
+def fun_l8_n144()
+ fun_l9_n873
+end
+
+def fun_l8_n145()
+ fun_l9_n97
+end
+
+def fun_l8_n146()
+ fun_l9_n46
+end
+
+def fun_l8_n147()
+ fun_l9_n146
+end
+
+def fun_l8_n148()
+ fun_l9_n293
+end
+
+def fun_l8_n149()
+ fun_l9_n993
+end
+
+def fun_l8_n150()
+ fun_l9_n230
+end
+
+def fun_l8_n151()
+ fun_l9_n485
+end
+
+def fun_l8_n152()
+ fun_l9_n844
+end
+
+def fun_l8_n153()
+ fun_l9_n782
+end
+
+def fun_l8_n154()
+ fun_l9_n493
+end
+
+def fun_l8_n155()
+ fun_l9_n699
+end
+
+def fun_l8_n156()
+ fun_l9_n132
+end
+
+def fun_l8_n157()
+ fun_l9_n573
+end
+
+def fun_l8_n158()
+ fun_l9_n993
+end
+
+def fun_l8_n159()
+ fun_l9_n644
+end
+
+def fun_l8_n160()
+ fun_l9_n151
+end
+
+def fun_l8_n161()
+ fun_l9_n181
+end
+
+def fun_l8_n162()
+ fun_l9_n314
+end
+
+def fun_l8_n163()
+ fun_l9_n716
+end
+
+def fun_l8_n164()
+ fun_l9_n541
+end
+
+def fun_l8_n165()
+ fun_l9_n283
+end
+
+def fun_l8_n166()
+ fun_l9_n55
+end
+
+def fun_l8_n167()
+ fun_l9_n351
+end
+
+def fun_l8_n168()
+ fun_l9_n29
+end
+
+def fun_l8_n169()
+ fun_l9_n117
+end
+
+def fun_l8_n170()
+ fun_l9_n529
+end
+
+def fun_l8_n171()
+ fun_l9_n735
+end
+
+def fun_l8_n172()
+ fun_l9_n161
+end
+
+def fun_l8_n173()
+ fun_l9_n399
+end
+
+def fun_l8_n174()
+ fun_l9_n952
+end
+
+def fun_l8_n175()
+ fun_l9_n420
+end
+
+def fun_l8_n176()
+ fun_l9_n664
+end
+
+def fun_l8_n177()
+ fun_l9_n697
+end
+
+def fun_l8_n178()
+ fun_l9_n506
+end
+
+def fun_l8_n179()
+ fun_l9_n241
+end
+
+def fun_l8_n180()
+ fun_l9_n516
+end
+
+def fun_l8_n181()
+ fun_l9_n540
+end
+
+def fun_l8_n182()
+ fun_l9_n891
+end
+
+def fun_l8_n183()
+ fun_l9_n200
+end
+
+def fun_l8_n184()
+ fun_l9_n118
+end
+
+def fun_l8_n185()
+ fun_l9_n186
+end
+
+def fun_l8_n186()
+ fun_l9_n899
+end
+
+def fun_l8_n187()
+ fun_l9_n766
+end
+
+def fun_l8_n188()
+ fun_l9_n437
+end
+
+def fun_l8_n189()
+ fun_l9_n431
+end
+
+def fun_l8_n190()
+ fun_l9_n814
+end
+
+def fun_l8_n191()
+ fun_l9_n446
+end
+
+def fun_l8_n192()
+ fun_l9_n364
+end
+
+def fun_l8_n193()
+ fun_l9_n634
+end
+
+def fun_l8_n194()
+ fun_l9_n74
+end
+
+def fun_l8_n195()
+ fun_l9_n258
+end
+
+def fun_l8_n196()
+ fun_l9_n105
+end
+
+def fun_l8_n197()
+ fun_l9_n295
+end
+
+def fun_l8_n198()
+ fun_l9_n811
+end
+
+def fun_l8_n199()
+ fun_l9_n210
+end
+
+def fun_l8_n200()
+ fun_l9_n566
+end
+
+def fun_l8_n201()
+ fun_l9_n813
+end
+
+def fun_l8_n202()
+ fun_l9_n624
+end
+
+def fun_l8_n203()
+ fun_l9_n757
+end
+
+def fun_l8_n204()
+ fun_l9_n256
+end
+
+def fun_l8_n205()
+ fun_l9_n439
+end
+
+def fun_l8_n206()
+ fun_l9_n359
+end
+
+def fun_l8_n207()
+ fun_l9_n795
+end
+
+def fun_l8_n208()
+ fun_l9_n178
+end
+
+def fun_l8_n209()
+ fun_l9_n96
+end
+
+def fun_l8_n210()
+ fun_l9_n273
+end
+
+def fun_l8_n211()
+ fun_l9_n976
+end
+
+def fun_l8_n212()
+ fun_l9_n412
+end
+
+def fun_l8_n213()
+ fun_l9_n372
+end
+
+def fun_l8_n214()
+ fun_l9_n902
+end
+
+def fun_l8_n215()
+ fun_l9_n283
+end
+
+def fun_l8_n216()
+ fun_l9_n101
+end
+
+def fun_l8_n217()
+ fun_l9_n792
+end
+
+def fun_l8_n218()
+ fun_l9_n207
+end
+
+def fun_l8_n219()
+ fun_l9_n653
+end
+
+def fun_l8_n220()
+ fun_l9_n784
+end
+
+def fun_l8_n221()
+ fun_l9_n455
+end
+
+def fun_l8_n222()
+ fun_l9_n188
+end
+
+def fun_l8_n223()
+ fun_l9_n169
+end
+
+def fun_l8_n224()
+ fun_l9_n88
+end
+
+def fun_l8_n225()
+ fun_l9_n132
+end
+
+def fun_l8_n226()
+ fun_l9_n269
+end
+
+def fun_l8_n227()
+ fun_l9_n903
+end
+
+def fun_l8_n228()
+ fun_l9_n463
+end
+
+def fun_l8_n229()
+ fun_l9_n73
+end
+
+def fun_l8_n230()
+ fun_l9_n36
+end
+
+def fun_l8_n231()
+ fun_l9_n224
+end
+
+def fun_l8_n232()
+ fun_l9_n739
+end
+
+def fun_l8_n233()
+ fun_l9_n887
+end
+
+def fun_l8_n234()
+ fun_l9_n522
+end
+
+def fun_l8_n235()
+ fun_l9_n261
+end
+
+def fun_l8_n236()
+ fun_l9_n222
+end
+
+def fun_l8_n237()
+ fun_l9_n358
+end
+
+def fun_l8_n238()
+ fun_l9_n855
+end
+
+def fun_l8_n239()
+ fun_l9_n263
+end
+
+def fun_l8_n240()
+ fun_l9_n411
+end
+
+def fun_l8_n241()
+ fun_l9_n450
+end
+
+def fun_l8_n242()
+ fun_l9_n706
+end
+
+def fun_l8_n243()
+ fun_l9_n125
+end
+
+def fun_l8_n244()
+ fun_l9_n163
+end
+
+def fun_l8_n245()
+ fun_l9_n758
+end
+
+def fun_l8_n246()
+ fun_l9_n168
+end
+
+def fun_l8_n247()
+ fun_l9_n250
+end
+
+def fun_l8_n248()
+ fun_l9_n73
+end
+
+def fun_l8_n249()
+ fun_l9_n25
+end
+
+def fun_l8_n250()
+ fun_l9_n311
+end
+
+def fun_l8_n251()
+ fun_l9_n992
+end
+
+def fun_l8_n252()
+ fun_l9_n95
+end
+
+def fun_l8_n253()
+ fun_l9_n470
+end
+
+def fun_l8_n254()
+ fun_l9_n906
+end
+
+def fun_l8_n255()
+ fun_l9_n695
+end
+
+def fun_l8_n256()
+ fun_l9_n835
+end
+
+def fun_l8_n257()
+ fun_l9_n601
+end
+
+def fun_l8_n258()
+ fun_l9_n20
+end
+
+def fun_l8_n259()
+ fun_l9_n806
+end
+
+def fun_l8_n260()
+ fun_l9_n689
+end
+
+def fun_l8_n261()
+ fun_l9_n183
+end
+
+def fun_l8_n262()
+ fun_l9_n444
+end
+
+def fun_l8_n263()
+ fun_l9_n344
+end
+
+def fun_l8_n264()
+ fun_l9_n585
+end
+
+def fun_l8_n265()
+ fun_l9_n109
+end
+
+def fun_l8_n266()
+ fun_l9_n551
+end
+
+def fun_l8_n267()
+ fun_l9_n654
+end
+
+def fun_l8_n268()
+ fun_l9_n573
+end
+
+def fun_l8_n269()
+ fun_l9_n196
+end
+
+def fun_l8_n270()
+ fun_l9_n764
+end
+
+def fun_l8_n271()
+ fun_l9_n349
+end
+
+def fun_l8_n272()
+ fun_l9_n8
+end
+
+def fun_l8_n273()
+ fun_l9_n815
+end
+
+def fun_l8_n274()
+ fun_l9_n343
+end
+
+def fun_l8_n275()
+ fun_l9_n98
+end
+
+def fun_l8_n276()
+ fun_l9_n967
+end
+
+def fun_l8_n277()
+ fun_l9_n368
+end
+
+def fun_l8_n278()
+ fun_l9_n626
+end
+
+def fun_l8_n279()
+ fun_l9_n931
+end
+
+def fun_l8_n280()
+ fun_l9_n723
+end
+
+def fun_l8_n281()
+ fun_l9_n319
+end
+
+def fun_l8_n282()
+ fun_l9_n243
+end
+
+def fun_l8_n283()
+ fun_l9_n683
+end
+
+def fun_l8_n284()
+ fun_l9_n127
+end
+
+def fun_l8_n285()
+ fun_l9_n941
+end
+
+def fun_l8_n286()
+ fun_l9_n263
+end
+
+def fun_l8_n287()
+ fun_l9_n227
+end
+
+def fun_l8_n288()
+ fun_l9_n807
+end
+
+def fun_l8_n289()
+ fun_l9_n486
+end
+
+def fun_l8_n290()
+ fun_l9_n801
+end
+
+def fun_l8_n291()
+ fun_l9_n319
+end
+
+def fun_l8_n292()
+ fun_l9_n687
+end
+
+def fun_l8_n293()
+ fun_l9_n639
+end
+
+def fun_l8_n294()
+ fun_l9_n908
+end
+
+def fun_l8_n295()
+ fun_l9_n522
+end
+
+def fun_l8_n296()
+ fun_l9_n839
+end
+
+def fun_l8_n297()
+ fun_l9_n238
+end
+
+def fun_l8_n298()
+ fun_l9_n66
+end
+
+def fun_l8_n299()
+ fun_l9_n224
+end
+
+def fun_l8_n300()
+ fun_l9_n114
+end
+
+def fun_l8_n301()
+ fun_l9_n237
+end
+
+def fun_l8_n302()
+ fun_l9_n416
+end
+
+def fun_l8_n303()
+ fun_l9_n554
+end
+
+def fun_l8_n304()
+ fun_l9_n613
+end
+
+def fun_l8_n305()
+ fun_l9_n641
+end
+
+def fun_l8_n306()
+ fun_l9_n507
+end
+
+def fun_l8_n307()
+ fun_l9_n367
+end
+
+def fun_l8_n308()
+ fun_l9_n387
+end
+
+def fun_l8_n309()
+ fun_l9_n423
+end
+
+def fun_l8_n310()
+ fun_l9_n981
+end
+
+def fun_l8_n311()
+ fun_l9_n658
+end
+
+def fun_l8_n312()
+ fun_l9_n845
+end
+
+def fun_l8_n313()
+ fun_l9_n944
+end
+
+def fun_l8_n314()
+ fun_l9_n87
+end
+
+def fun_l8_n315()
+ fun_l9_n106
+end
+
+def fun_l8_n316()
+ fun_l9_n461
+end
+
+def fun_l8_n317()
+ fun_l9_n722
+end
+
+def fun_l8_n318()
+ fun_l9_n636
+end
+
+def fun_l8_n319()
+ fun_l9_n420
+end
+
+def fun_l8_n320()
+ fun_l9_n633
+end
+
+def fun_l8_n321()
+ fun_l9_n801
+end
+
+def fun_l8_n322()
+ fun_l9_n754
+end
+
+def fun_l8_n323()
+ fun_l9_n697
+end
+
+def fun_l8_n324()
+ fun_l9_n983
+end
+
+def fun_l8_n325()
+ fun_l9_n244
+end
+
+def fun_l8_n326()
+ fun_l9_n980
+end
+
+def fun_l8_n327()
+ fun_l9_n242
+end
+
+def fun_l8_n328()
+ fun_l9_n798
+end
+
+def fun_l8_n329()
+ fun_l9_n395
+end
+
+def fun_l8_n330()
+ fun_l9_n931
+end
+
+def fun_l8_n331()
+ fun_l9_n827
+end
+
+def fun_l8_n332()
+ fun_l9_n704
+end
+
+def fun_l8_n333()
+ fun_l9_n392
+end
+
+def fun_l8_n334()
+ fun_l9_n288
+end
+
+def fun_l8_n335()
+ fun_l9_n95
+end
+
+def fun_l8_n336()
+ fun_l9_n123
+end
+
+def fun_l8_n337()
+ fun_l9_n238
+end
+
+def fun_l8_n338()
+ fun_l9_n903
+end
+
+def fun_l8_n339()
+ fun_l9_n515
+end
+
+def fun_l8_n340()
+ fun_l9_n368
+end
+
+def fun_l8_n341()
+ fun_l9_n156
+end
+
+def fun_l8_n342()
+ fun_l9_n714
+end
+
+def fun_l8_n343()
+ fun_l9_n435
+end
+
+def fun_l8_n344()
+ fun_l9_n653
+end
+
+def fun_l8_n345()
+ fun_l9_n304
+end
+
+def fun_l8_n346()
+ fun_l9_n880
+end
+
+def fun_l8_n347()
+ fun_l9_n701
+end
+
+def fun_l8_n348()
+ fun_l9_n815
+end
+
+def fun_l8_n349()
+ fun_l9_n180
+end
+
+def fun_l8_n350()
+ fun_l9_n24
+end
+
+def fun_l8_n351()
+ fun_l9_n970
+end
+
+def fun_l8_n352()
+ fun_l9_n829
+end
+
+def fun_l8_n353()
+ fun_l9_n908
+end
+
+def fun_l8_n354()
+ fun_l9_n355
+end
+
+def fun_l8_n355()
+ fun_l9_n844
+end
+
+def fun_l8_n356()
+ fun_l9_n936
+end
+
+def fun_l8_n357()
+ fun_l9_n555
+end
+
+def fun_l8_n358()
+ fun_l9_n936
+end
+
+def fun_l8_n359()
+ fun_l9_n61
+end
+
+def fun_l8_n360()
+ fun_l9_n936
+end
+
+def fun_l8_n361()
+ fun_l9_n244
+end
+
+def fun_l8_n362()
+ fun_l9_n799
+end
+
+def fun_l8_n363()
+ fun_l9_n429
+end
+
+def fun_l8_n364()
+ fun_l9_n676
+end
+
+def fun_l8_n365()
+ fun_l9_n877
+end
+
+def fun_l8_n366()
+ fun_l9_n862
+end
+
+def fun_l8_n367()
+ fun_l9_n937
+end
+
+def fun_l8_n368()
+ fun_l9_n59
+end
+
+def fun_l8_n369()
+ fun_l9_n50
+end
+
+def fun_l8_n370()
+ fun_l9_n550
+end
+
+def fun_l8_n371()
+ fun_l9_n562
+end
+
+def fun_l8_n372()
+ fun_l9_n270
+end
+
+def fun_l8_n373()
+ fun_l9_n774
+end
+
+def fun_l8_n374()
+ fun_l9_n61
+end
+
+def fun_l8_n375()
+ fun_l9_n221
+end
+
+def fun_l8_n376()
+ fun_l9_n483
+end
+
+def fun_l8_n377()
+ fun_l9_n63
+end
+
+def fun_l8_n378()
+ fun_l9_n921
+end
+
+def fun_l8_n379()
+ fun_l9_n34
+end
+
+def fun_l8_n380()
+ fun_l9_n684
+end
+
+def fun_l8_n381()
+ fun_l9_n583
+end
+
+def fun_l8_n382()
+ fun_l9_n918
+end
+
+def fun_l8_n383()
+ fun_l9_n193
+end
+
+def fun_l8_n384()
+ fun_l9_n525
+end
+
+def fun_l8_n385()
+ fun_l9_n789
+end
+
+def fun_l8_n386()
+ fun_l9_n158
+end
+
+def fun_l8_n387()
+ fun_l9_n32
+end
+
+def fun_l8_n388()
+ fun_l9_n741
+end
+
+def fun_l8_n389()
+ fun_l9_n880
+end
+
+def fun_l8_n390()
+ fun_l9_n710
+end
+
+def fun_l8_n391()
+ fun_l9_n837
+end
+
+def fun_l8_n392()
+ fun_l9_n866
+end
+
+def fun_l8_n393()
+ fun_l9_n511
+end
+
+def fun_l8_n394()
+ fun_l9_n794
+end
+
+def fun_l8_n395()
+ fun_l9_n508
+end
+
+def fun_l8_n396()
+ fun_l9_n102
+end
+
+def fun_l8_n397()
+ fun_l9_n24
+end
+
+def fun_l8_n398()
+ fun_l9_n512
+end
+
+def fun_l8_n399()
+ fun_l9_n764
+end
+
+def fun_l8_n400()
+ fun_l9_n100
+end
+
+def fun_l8_n401()
+ fun_l9_n159
+end
+
+def fun_l8_n402()
+ fun_l9_n774
+end
+
+def fun_l8_n403()
+ fun_l9_n382
+end
+
+def fun_l8_n404()
+ fun_l9_n596
+end
+
+def fun_l8_n405()
+ fun_l9_n581
+end
+
+def fun_l8_n406()
+ fun_l9_n818
+end
+
+def fun_l8_n407()
+ fun_l9_n158
+end
+
+def fun_l8_n408()
+ fun_l9_n59
+end
+
+def fun_l8_n409()
+ fun_l9_n392
+end
+
+def fun_l8_n410()
+ fun_l9_n877
+end
+
+def fun_l8_n411()
+ fun_l9_n49
+end
+
+def fun_l8_n412()
+ fun_l9_n379
+end
+
+def fun_l8_n413()
+ fun_l9_n367
+end
+
+def fun_l8_n414()
+ fun_l9_n740
+end
+
+def fun_l8_n415()
+ fun_l9_n880
+end
+
+def fun_l8_n416()
+ fun_l9_n354
+end
+
+def fun_l8_n417()
+ fun_l9_n874
+end
+
+def fun_l8_n418()
+ fun_l9_n769
+end
+
+def fun_l8_n419()
+ fun_l9_n821
+end
+
+def fun_l8_n420()
+ fun_l9_n595
+end
+
+def fun_l8_n421()
+ fun_l9_n471
+end
+
+def fun_l8_n422()
+ fun_l9_n963
+end
+
+def fun_l8_n423()
+ fun_l9_n806
+end
+
+def fun_l8_n424()
+ fun_l9_n863
+end
+
+def fun_l8_n425()
+ fun_l9_n255
+end
+
+def fun_l8_n426()
+ fun_l9_n787
+end
+
+def fun_l8_n427()
+ fun_l9_n369
+end
+
+def fun_l8_n428()
+ fun_l9_n876
+end
+
+def fun_l8_n429()
+ fun_l9_n660
+end
+
+def fun_l8_n430()
+ fun_l9_n678
+end
+
+def fun_l8_n431()
+ fun_l9_n690
+end
+
+def fun_l8_n432()
+ fun_l9_n954
+end
+
+def fun_l8_n433()
+ fun_l9_n250
+end
+
+def fun_l8_n434()
+ fun_l9_n834
+end
+
+def fun_l8_n435()
+ fun_l9_n852
+end
+
+def fun_l8_n436()
+ fun_l9_n987
+end
+
+def fun_l8_n437()
+ fun_l9_n297
+end
+
+def fun_l8_n438()
+ fun_l9_n263
+end
+
+def fun_l8_n439()
+ fun_l9_n120
+end
+
+def fun_l8_n440()
+ fun_l9_n57
+end
+
+def fun_l8_n441()
+ fun_l9_n363
+end
+
+def fun_l8_n442()
+ fun_l9_n458
+end
+
+def fun_l8_n443()
+ fun_l9_n323
+end
+
+def fun_l8_n444()
+ fun_l9_n80
+end
+
+def fun_l8_n445()
+ fun_l9_n88
+end
+
+def fun_l8_n446()
+ fun_l9_n928
+end
+
+def fun_l8_n447()
+ fun_l9_n682
+end
+
+def fun_l8_n448()
+ fun_l9_n740
+end
+
+def fun_l8_n449()
+ fun_l9_n132
+end
+
+def fun_l8_n450()
+ fun_l9_n194
+end
+
+def fun_l8_n451()
+ fun_l9_n694
+end
+
+def fun_l8_n452()
+ fun_l9_n53
+end
+
+def fun_l8_n453()
+ fun_l9_n84
+end
+
+def fun_l8_n454()
+ fun_l9_n801
+end
+
+def fun_l8_n455()
+ fun_l9_n176
+end
+
+def fun_l8_n456()
+ fun_l9_n375
+end
+
+def fun_l8_n457()
+ fun_l9_n161
+end
+
+def fun_l8_n458()
+ fun_l9_n723
+end
+
+def fun_l8_n459()
+ fun_l9_n704
+end
+
+def fun_l8_n460()
+ fun_l9_n335
+end
+
+def fun_l8_n461()
+ fun_l9_n106
+end
+
+def fun_l8_n462()
+ fun_l9_n425
+end
+
+def fun_l8_n463()
+ fun_l9_n972
+end
+
+def fun_l8_n464()
+ fun_l9_n18
+end
+
+def fun_l8_n465()
+ fun_l9_n872
+end
+
+def fun_l8_n466()
+ fun_l9_n453
+end
+
+def fun_l8_n467()
+ fun_l9_n220
+end
+
+def fun_l8_n468()
+ fun_l9_n283
+end
+
+def fun_l8_n469()
+ fun_l9_n48
+end
+
+def fun_l8_n470()
+ fun_l9_n891
+end
+
+def fun_l8_n471()
+ fun_l9_n640
+end
+
+def fun_l8_n472()
+ fun_l9_n842
+end
+
+def fun_l8_n473()
+ fun_l9_n440
+end
+
+def fun_l8_n474()
+ fun_l9_n109
+end
+
+def fun_l8_n475()
+ fun_l9_n910
+end
+
+def fun_l8_n476()
+ fun_l9_n136
+end
+
+def fun_l8_n477()
+ fun_l9_n187
+end
+
+def fun_l8_n478()
+ fun_l9_n279
+end
+
+def fun_l8_n479()
+ fun_l9_n8
+end
+
+def fun_l8_n480()
+ fun_l9_n372
+end
+
+def fun_l8_n481()
+ fun_l9_n504
+end
+
+def fun_l8_n482()
+ fun_l9_n250
+end
+
+def fun_l8_n483()
+ fun_l9_n122
+end
+
+def fun_l8_n484()
+ fun_l9_n435
+end
+
+def fun_l8_n485()
+ fun_l9_n282
+end
+
+def fun_l8_n486()
+ fun_l9_n213
+end
+
+def fun_l8_n487()
+ fun_l9_n256
+end
+
+def fun_l8_n488()
+ fun_l9_n162
+end
+
+def fun_l8_n489()
+ fun_l9_n419
+end
+
+def fun_l8_n490()
+ fun_l9_n286
+end
+
+def fun_l8_n491()
+ fun_l9_n102
+end
+
+def fun_l8_n492()
+ fun_l9_n434
+end
+
+def fun_l8_n493()
+ fun_l9_n782
+end
+
+def fun_l8_n494()
+ fun_l9_n993
+end
+
+def fun_l8_n495()
+ fun_l9_n275
+end
+
+def fun_l8_n496()
+ fun_l9_n873
+end
+
+def fun_l8_n497()
+ fun_l9_n346
+end
+
+def fun_l8_n498()
+ fun_l9_n57
+end
+
+def fun_l8_n499()
+ fun_l9_n77
+end
+
+def fun_l8_n500()
+ fun_l9_n936
+end
+
+def fun_l8_n501()
+ fun_l9_n320
+end
+
+def fun_l8_n502()
+ fun_l9_n921
+end
+
+def fun_l8_n503()
+ fun_l9_n505
+end
+
+def fun_l8_n504()
+ fun_l9_n184
+end
+
+def fun_l8_n505()
+ fun_l9_n476
+end
+
+def fun_l8_n506()
+ fun_l9_n2
+end
+
+def fun_l8_n507()
+ fun_l9_n573
+end
+
+def fun_l8_n508()
+ fun_l9_n150
+end
+
+def fun_l8_n509()
+ fun_l9_n637
+end
+
+def fun_l8_n510()
+ fun_l9_n435
+end
+
+def fun_l8_n511()
+ fun_l9_n361
+end
+
+def fun_l8_n512()
+ fun_l9_n808
+end
+
+def fun_l8_n513()
+ fun_l9_n129
+end
+
+def fun_l8_n514()
+ fun_l9_n57
+end
+
+def fun_l8_n515()
+ fun_l9_n646
+end
+
+def fun_l8_n516()
+ fun_l9_n679
+end
+
+def fun_l8_n517()
+ fun_l9_n256
+end
+
+def fun_l8_n518()
+ fun_l9_n672
+end
+
+def fun_l8_n519()
+ fun_l9_n406
+end
+
+def fun_l8_n520()
+ fun_l9_n59
+end
+
+def fun_l8_n521()
+ fun_l9_n215
+end
+
+def fun_l8_n522()
+ fun_l9_n435
+end
+
+def fun_l8_n523()
+ fun_l9_n693
+end
+
+def fun_l8_n524()
+ fun_l9_n863
+end
+
+def fun_l8_n525()
+ fun_l9_n79
+end
+
+def fun_l8_n526()
+ fun_l9_n527
+end
+
+def fun_l8_n527()
+ fun_l9_n711
+end
+
+def fun_l8_n528()
+ fun_l9_n51
+end
+
+def fun_l8_n529()
+ fun_l9_n712
+end
+
+def fun_l8_n530()
+ fun_l9_n84
+end
+
+def fun_l8_n531()
+ fun_l9_n854
+end
+
+def fun_l8_n532()
+ fun_l9_n43
+end
+
+def fun_l8_n533()
+ fun_l9_n354
+end
+
+def fun_l8_n534()
+ fun_l9_n74
+end
+
+def fun_l8_n535()
+ fun_l9_n736
+end
+
+def fun_l8_n536()
+ fun_l9_n573
+end
+
+def fun_l8_n537()
+ fun_l9_n56
+end
+
+def fun_l8_n538()
+ fun_l9_n818
+end
+
+def fun_l8_n539()
+ fun_l9_n861
+end
+
+def fun_l8_n540()
+ fun_l9_n531
+end
+
+def fun_l8_n541()
+ fun_l9_n204
+end
+
+def fun_l8_n542()
+ fun_l9_n451
+end
+
+def fun_l8_n543()
+ fun_l9_n138
+end
+
+def fun_l8_n544()
+ fun_l9_n888
+end
+
+def fun_l8_n545()
+ fun_l9_n846
+end
+
+def fun_l8_n546()
+ fun_l9_n873
+end
+
+def fun_l8_n547()
+ fun_l9_n467
+end
+
+def fun_l8_n548()
+ fun_l9_n210
+end
+
+def fun_l8_n549()
+ fun_l9_n773
+end
+
+def fun_l8_n550()
+ fun_l9_n546
+end
+
+def fun_l8_n551()
+ fun_l9_n768
+end
+
+def fun_l8_n552()
+ fun_l9_n115
+end
+
+def fun_l8_n553()
+ fun_l9_n20
+end
+
+def fun_l8_n554()
+ fun_l9_n891
+end
+
+def fun_l8_n555()
+ fun_l9_n924
+end
+
+def fun_l8_n556()
+ fun_l9_n192
+end
+
+def fun_l8_n557()
+ fun_l9_n581
+end
+
+def fun_l8_n558()
+ fun_l9_n517
+end
+
+def fun_l8_n559()
+ fun_l9_n533
+end
+
+def fun_l8_n560()
+ fun_l9_n930
+end
+
+def fun_l8_n561()
+ fun_l9_n321
+end
+
+def fun_l8_n562()
+ fun_l9_n648
+end
+
+def fun_l8_n563()
+ fun_l9_n963
+end
+
+def fun_l8_n564()
+ fun_l9_n406
+end
+
+def fun_l8_n565()
+ fun_l9_n823
+end
+
+def fun_l8_n566()
+ fun_l9_n394
+end
+
+def fun_l8_n567()
+ fun_l9_n442
+end
+
+def fun_l8_n568()
+ fun_l9_n851
+end
+
+def fun_l8_n569()
+ fun_l9_n652
+end
+
+def fun_l8_n570()
+ fun_l9_n165
+end
+
+def fun_l8_n571()
+ fun_l9_n213
+end
+
+def fun_l8_n572()
+ fun_l9_n633
+end
+
+def fun_l8_n573()
+ fun_l9_n243
+end
+
+def fun_l8_n574()
+ fun_l9_n232
+end
+
+def fun_l8_n575()
+ fun_l9_n76
+end
+
+def fun_l8_n576()
+ fun_l9_n547
+end
+
+def fun_l8_n577()
+ fun_l9_n628
+end
+
+def fun_l8_n578()
+ fun_l9_n20
+end
+
+def fun_l8_n579()
+ fun_l9_n525
+end
+
+def fun_l8_n580()
+ fun_l9_n788
+end
+
+def fun_l8_n581()
+ fun_l9_n326
+end
+
+def fun_l8_n582()
+ fun_l9_n206
+end
+
+def fun_l8_n583()
+ fun_l9_n709
+end
+
+def fun_l8_n584()
+ fun_l9_n185
+end
+
+def fun_l8_n585()
+ fun_l9_n106
+end
+
+def fun_l8_n586()
+ fun_l9_n180
+end
+
+def fun_l8_n587()
+ fun_l9_n304
+end
+
+def fun_l8_n588()
+ fun_l9_n689
+end
+
+def fun_l8_n589()
+ fun_l9_n124
+end
+
+def fun_l8_n590()
+ fun_l9_n91
+end
+
+def fun_l8_n591()
+ fun_l9_n856
+end
+
+def fun_l8_n592()
+ fun_l9_n16
+end
+
+def fun_l8_n593()
+ fun_l9_n875
+end
+
+def fun_l8_n594()
+ fun_l9_n407
+end
+
+def fun_l8_n595()
+ fun_l9_n386
+end
+
+def fun_l8_n596()
+ fun_l9_n269
+end
+
+def fun_l8_n597()
+ fun_l9_n254
+end
+
+def fun_l8_n598()
+ fun_l9_n452
+end
+
+def fun_l8_n599()
+ fun_l9_n450
+end
+
+def fun_l8_n600()
+ fun_l9_n268
+end
+
+def fun_l8_n601()
+ fun_l9_n965
+end
+
+def fun_l8_n602()
+ fun_l9_n190
+end
+
+def fun_l8_n603()
+ fun_l9_n811
+end
+
+def fun_l8_n604()
+ fun_l9_n802
+end
+
+def fun_l8_n605()
+ fun_l9_n732
+end
+
+def fun_l8_n606()
+ fun_l9_n997
+end
+
+def fun_l8_n607()
+ fun_l9_n929
+end
+
+def fun_l8_n608()
+ fun_l9_n18
+end
+
+def fun_l8_n609()
+ fun_l9_n260
+end
+
+def fun_l8_n610()
+ fun_l9_n17
+end
+
+def fun_l8_n611()
+ fun_l9_n324
+end
+
+def fun_l8_n612()
+ fun_l9_n473
+end
+
+def fun_l8_n613()
+ fun_l9_n266
+end
+
+def fun_l8_n614()
+ fun_l9_n753
+end
+
+def fun_l8_n615()
+ fun_l9_n929
+end
+
+def fun_l8_n616()
+ fun_l9_n374
+end
+
+def fun_l8_n617()
+ fun_l9_n254
+end
+
+def fun_l8_n618()
+ fun_l9_n520
+end
+
+def fun_l8_n619()
+ fun_l9_n561
+end
+
+def fun_l8_n620()
+ fun_l9_n309
+end
+
+def fun_l8_n621()
+ fun_l9_n875
+end
+
+def fun_l8_n622()
+ fun_l9_n635
+end
+
+def fun_l8_n623()
+ fun_l9_n138
+end
+
+def fun_l8_n624()
+ fun_l9_n554
+end
+
+def fun_l8_n625()
+ fun_l9_n903
+end
+
+def fun_l8_n626()
+ fun_l9_n771
+end
+
+def fun_l8_n627()
+ fun_l9_n358
+end
+
+def fun_l8_n628()
+ fun_l9_n238
+end
+
+def fun_l8_n629()
+ fun_l9_n896
+end
+
+def fun_l8_n630()
+ fun_l9_n675
+end
+
+def fun_l8_n631()
+ fun_l9_n817
+end
+
+def fun_l8_n632()
+ fun_l9_n530
+end
+
+def fun_l8_n633()
+ fun_l9_n262
+end
+
+def fun_l8_n634()
+ fun_l9_n221
+end
+
+def fun_l8_n635()
+ fun_l9_n590
+end
+
+def fun_l8_n636()
+ fun_l9_n536
+end
+
+def fun_l8_n637()
+ fun_l9_n910
+end
+
+def fun_l8_n638()
+ fun_l9_n383
+end
+
+def fun_l8_n639()
+ fun_l9_n977
+end
+
+def fun_l8_n640()
+ fun_l9_n172
+end
+
+def fun_l8_n641()
+ fun_l9_n428
+end
+
+def fun_l8_n642()
+ fun_l9_n278
+end
+
+def fun_l8_n643()
+ fun_l9_n77
+end
+
+def fun_l8_n644()
+ fun_l9_n992
+end
+
+def fun_l8_n645()
+ fun_l9_n783
+end
+
+def fun_l8_n646()
+ fun_l9_n285
+end
+
+def fun_l8_n647()
+ fun_l9_n589
+end
+
+def fun_l8_n648()
+ fun_l9_n280
+end
+
+def fun_l8_n649()
+ fun_l9_n626
+end
+
+def fun_l8_n650()
+ fun_l9_n172
+end
+
+def fun_l8_n651()
+ fun_l9_n389
+end
+
+def fun_l8_n652()
+ fun_l9_n53
+end
+
+def fun_l8_n653()
+ fun_l9_n676
+end
+
+def fun_l8_n654()
+ fun_l9_n499
+end
+
+def fun_l8_n655()
+ fun_l9_n270
+end
+
+def fun_l8_n656()
+ fun_l9_n976
+end
+
+def fun_l8_n657()
+ fun_l9_n681
+end
+
+def fun_l8_n658()
+ fun_l9_n960
+end
+
+def fun_l8_n659()
+ fun_l9_n779
+end
+
+def fun_l8_n660()
+ fun_l9_n953
+end
+
+def fun_l8_n661()
+ fun_l9_n856
+end
+
+def fun_l8_n662()
+ fun_l9_n672
+end
+
+def fun_l8_n663()
+ fun_l9_n877
+end
+
+def fun_l8_n664()
+ fun_l9_n667
+end
+
+def fun_l8_n665()
+ fun_l9_n593
+end
+
+def fun_l8_n666()
+ fun_l9_n115
+end
+
+def fun_l8_n667()
+ fun_l9_n117
+end
+
+def fun_l8_n668()
+ fun_l9_n582
+end
+
+def fun_l8_n669()
+ fun_l9_n695
+end
+
+def fun_l8_n670()
+ fun_l9_n119
+end
+
+def fun_l8_n671()
+ fun_l9_n521
+end
+
+def fun_l8_n672()
+ fun_l9_n291
+end
+
+def fun_l8_n673()
+ fun_l9_n630
+end
+
+def fun_l8_n674()
+ fun_l9_n8
+end
+
+def fun_l8_n675()
+ fun_l9_n331
+end
+
+def fun_l8_n676()
+ fun_l9_n32
+end
+
+def fun_l8_n677()
+ fun_l9_n494
+end
+
+def fun_l8_n678()
+ fun_l9_n744
+end
+
+def fun_l8_n679()
+ fun_l9_n220
+end
+
+def fun_l8_n680()
+ fun_l9_n793
+end
+
+def fun_l8_n681()
+ fun_l9_n592
+end
+
+def fun_l8_n682()
+ fun_l9_n40
+end
+
+def fun_l8_n683()
+ fun_l9_n442
+end
+
+def fun_l8_n684()
+ fun_l9_n606
+end
+
+def fun_l8_n685()
+ fun_l9_n592
+end
+
+def fun_l8_n686()
+ fun_l9_n264
+end
+
+def fun_l8_n687()
+ fun_l9_n570
+end
+
+def fun_l8_n688()
+ fun_l9_n69
+end
+
+def fun_l8_n689()
+ fun_l9_n137
+end
+
+def fun_l8_n690()
+ fun_l9_n712
+end
+
+def fun_l8_n691()
+ fun_l9_n593
+end
+
+def fun_l8_n692()
+ fun_l9_n481
+end
+
+def fun_l8_n693()
+ fun_l9_n669
+end
+
+def fun_l8_n694()
+ fun_l9_n504
+end
+
+def fun_l8_n695()
+ fun_l9_n732
+end
+
+def fun_l8_n696()
+ fun_l9_n771
+end
+
+def fun_l8_n697()
+ fun_l9_n258
+end
+
+def fun_l8_n698()
+ fun_l9_n756
+end
+
+def fun_l8_n699()
+ fun_l9_n61
+end
+
+def fun_l8_n700()
+ fun_l9_n257
+end
+
+def fun_l8_n701()
+ fun_l9_n788
+end
+
+def fun_l8_n702()
+ fun_l9_n142
+end
+
+def fun_l8_n703()
+ fun_l9_n380
+end
+
+def fun_l8_n704()
+ fun_l9_n698
+end
+
+def fun_l8_n705()
+ fun_l9_n482
+end
+
+def fun_l8_n706()
+ fun_l9_n515
+end
+
+def fun_l8_n707()
+ fun_l9_n253
+end
+
+def fun_l8_n708()
+ fun_l9_n323
+end
+
+def fun_l8_n709()
+ fun_l9_n524
+end
+
+def fun_l8_n710()
+ fun_l9_n681
+end
+
+def fun_l8_n711()
+ fun_l9_n473
+end
+
+def fun_l8_n712()
+ fun_l9_n186
+end
+
+def fun_l8_n713()
+ fun_l9_n117
+end
+
+def fun_l8_n714()
+ fun_l9_n682
+end
+
+def fun_l8_n715()
+ fun_l9_n475
+end
+
+def fun_l8_n716()
+ fun_l9_n190
+end
+
+def fun_l8_n717()
+ fun_l9_n56
+end
+
+def fun_l8_n718()
+ fun_l9_n492
+end
+
+def fun_l8_n719()
+ fun_l9_n561
+end
+
+def fun_l8_n720()
+ fun_l9_n130
+end
+
+def fun_l8_n721()
+ fun_l9_n296
+end
+
+def fun_l8_n722()
+ fun_l9_n425
+end
+
+def fun_l8_n723()
+ fun_l9_n248
+end
+
+def fun_l8_n724()
+ fun_l9_n523
+end
+
+def fun_l8_n725()
+ fun_l9_n730
+end
+
+def fun_l8_n726()
+ fun_l9_n231
+end
+
+def fun_l8_n727()
+ fun_l9_n953
+end
+
+def fun_l8_n728()
+ fun_l9_n511
+end
+
+def fun_l8_n729()
+ fun_l9_n78
+end
+
+def fun_l8_n730()
+ fun_l9_n284
+end
+
+def fun_l8_n731()
+ fun_l9_n450
+end
+
+def fun_l8_n732()
+ fun_l9_n149
+end
+
+def fun_l8_n733()
+ fun_l9_n396
+end
+
+def fun_l8_n734()
+ fun_l9_n202
+end
+
+def fun_l8_n735()
+ fun_l9_n250
+end
+
+def fun_l8_n736()
+ fun_l9_n459
+end
+
+def fun_l8_n737()
+ fun_l9_n869
+end
+
+def fun_l8_n738()
+ fun_l9_n454
+end
+
+def fun_l8_n739()
+ fun_l9_n322
+end
+
+def fun_l8_n740()
+ fun_l9_n190
+end
+
+def fun_l8_n741()
+ fun_l9_n997
+end
+
+def fun_l8_n742()
+ fun_l9_n983
+end
+
+def fun_l8_n743()
+ fun_l9_n191
+end
+
+def fun_l8_n744()
+ fun_l9_n773
+end
+
+def fun_l8_n745()
+ fun_l9_n261
+end
+
+def fun_l8_n746()
+ fun_l9_n442
+end
+
+def fun_l8_n747()
+ fun_l9_n297
+end
+
+def fun_l8_n748()
+ fun_l9_n103
+end
+
+def fun_l8_n749()
+ fun_l9_n981
+end
+
+def fun_l8_n750()
+ fun_l9_n143
+end
+
+def fun_l8_n751()
+ fun_l9_n499
+end
+
+def fun_l8_n752()
+ fun_l9_n129
+end
+
+def fun_l8_n753()
+ fun_l9_n357
+end
+
+def fun_l8_n754()
+ fun_l9_n273
+end
+
+def fun_l8_n755()
+ fun_l9_n217
+end
+
+def fun_l8_n756()
+ fun_l9_n383
+end
+
+def fun_l8_n757()
+ fun_l9_n965
+end
+
+def fun_l8_n758()
+ fun_l9_n305
+end
+
+def fun_l8_n759()
+ fun_l9_n450
+end
+
+def fun_l8_n760()
+ fun_l9_n450
+end
+
+def fun_l8_n761()
+ fun_l9_n545
+end
+
+def fun_l8_n762()
+ fun_l9_n236
+end
+
+def fun_l8_n763()
+ fun_l9_n329
+end
+
+def fun_l8_n764()
+ fun_l9_n536
+end
+
+def fun_l8_n765()
+ fun_l9_n56
+end
+
+def fun_l8_n766()
+ fun_l9_n214
+end
+
+def fun_l8_n767()
+ fun_l9_n227
+end
+
+def fun_l8_n768()
+ fun_l9_n585
+end
+
+def fun_l8_n769()
+ fun_l9_n368
+end
+
+def fun_l8_n770()
+ fun_l9_n997
+end
+
+def fun_l8_n771()
+ fun_l9_n895
+end
+
+def fun_l8_n772()
+ fun_l9_n601
+end
+
+def fun_l8_n773()
+ fun_l9_n975
+end
+
+def fun_l8_n774()
+ fun_l9_n687
+end
+
+def fun_l8_n775()
+ fun_l9_n498
+end
+
+def fun_l8_n776()
+ fun_l9_n665
+end
+
+def fun_l8_n777()
+ fun_l9_n915
+end
+
+def fun_l8_n778()
+ fun_l9_n823
+end
+
+def fun_l8_n779()
+ fun_l9_n479
+end
+
+def fun_l8_n780()
+ fun_l9_n632
+end
+
+def fun_l8_n781()
+ fun_l9_n793
+end
+
+def fun_l8_n782()
+ fun_l9_n698
+end
+
+def fun_l8_n783()
+ fun_l9_n940
+end
+
+def fun_l8_n784()
+ fun_l9_n982
+end
+
+def fun_l8_n785()
+ fun_l9_n983
+end
+
+def fun_l8_n786()
+ fun_l9_n711
+end
+
+def fun_l8_n787()
+ fun_l9_n61
+end
+
+def fun_l8_n788()
+ fun_l9_n347
+end
+
+def fun_l8_n789()
+ fun_l9_n856
+end
+
+def fun_l8_n790()
+ fun_l9_n363
+end
+
+def fun_l8_n791()
+ fun_l9_n995
+end
+
+def fun_l8_n792()
+ fun_l9_n296
+end
+
+def fun_l8_n793()
+ fun_l9_n497
+end
+
+def fun_l8_n794()
+ fun_l9_n915
+end
+
+def fun_l8_n795()
+ fun_l9_n899
+end
+
+def fun_l8_n796()
+ fun_l9_n388
+end
+
+def fun_l8_n797()
+ fun_l9_n538
+end
+
+def fun_l8_n798()
+ fun_l9_n247
+end
+
+def fun_l8_n799()
+ fun_l9_n426
+end
+
+def fun_l8_n800()
+ fun_l9_n127
+end
+
+def fun_l8_n801()
+ fun_l9_n945
+end
+
+def fun_l8_n802()
+ fun_l9_n656
+end
+
+def fun_l8_n803()
+ fun_l9_n900
+end
+
+def fun_l8_n804()
+ fun_l9_n262
+end
+
+def fun_l8_n805()
+ fun_l9_n371
+end
+
+def fun_l8_n806()
+ fun_l9_n876
+end
+
+def fun_l8_n807()
+ fun_l9_n601
+end
+
+def fun_l8_n808()
+ fun_l9_n271
+end
+
+def fun_l8_n809()
+ fun_l9_n837
+end
+
+def fun_l8_n810()
+ fun_l9_n969
+end
+
+def fun_l8_n811()
+ fun_l9_n287
+end
+
+def fun_l8_n812()
+ fun_l9_n224
+end
+
+def fun_l8_n813()
+ fun_l9_n129
+end
+
+def fun_l8_n814()
+ fun_l9_n938
+end
+
+def fun_l8_n815()
+ fun_l9_n198
+end
+
+def fun_l8_n816()
+ fun_l9_n33
+end
+
+def fun_l8_n817()
+ fun_l9_n535
+end
+
+def fun_l8_n818()
+ fun_l9_n705
+end
+
+def fun_l8_n819()
+ fun_l9_n19
+end
+
+def fun_l8_n820()
+ fun_l9_n434
+end
+
+def fun_l8_n821()
+ fun_l9_n430
+end
+
+def fun_l8_n822()
+ fun_l9_n501
+end
+
+def fun_l8_n823()
+ fun_l9_n349
+end
+
+def fun_l8_n824()
+ fun_l9_n970
+end
+
+def fun_l8_n825()
+ fun_l9_n467
+end
+
+def fun_l8_n826()
+ fun_l9_n218
+end
+
+def fun_l8_n827()
+ fun_l9_n163
+end
+
+def fun_l8_n828()
+ fun_l9_n752
+end
+
+def fun_l8_n829()
+ fun_l9_n34
+end
+
+def fun_l8_n830()
+ fun_l9_n977
+end
+
+def fun_l8_n831()
+ fun_l9_n517
+end
+
+def fun_l8_n832()
+ fun_l9_n740
+end
+
+def fun_l8_n833()
+ fun_l9_n7
+end
+
+def fun_l8_n834()
+ fun_l9_n117
+end
+
+def fun_l8_n835()
+ fun_l9_n879
+end
+
+def fun_l8_n836()
+ fun_l9_n916
+end
+
+def fun_l8_n837()
+ fun_l9_n895
+end
+
+def fun_l8_n838()
+ fun_l9_n831
+end
+
+def fun_l8_n839()
+ fun_l9_n559
+end
+
+def fun_l8_n840()
+ fun_l9_n419
+end
+
+def fun_l8_n841()
+ fun_l9_n994
+end
+
+def fun_l8_n842()
+ fun_l9_n893
+end
+
+def fun_l8_n843()
+ fun_l9_n664
+end
+
+def fun_l8_n844()
+ fun_l9_n611
+end
+
+def fun_l8_n845()
+ fun_l9_n988
+end
+
+def fun_l8_n846()
+ fun_l9_n501
+end
+
+def fun_l8_n847()
+ fun_l9_n97
+end
+
+def fun_l8_n848()
+ fun_l9_n348
+end
+
+def fun_l8_n849()
+ fun_l9_n23
+end
+
+def fun_l8_n850()
+ fun_l9_n164
+end
+
+def fun_l8_n851()
+ fun_l9_n751
+end
+
+def fun_l8_n852()
+ fun_l9_n544
+end
+
+def fun_l8_n853()
+ fun_l9_n944
+end
+
+def fun_l8_n854()
+ fun_l9_n25
+end
+
+def fun_l8_n855()
+ fun_l9_n125
+end
+
+def fun_l8_n856()
+ fun_l9_n720
+end
+
+def fun_l8_n857()
+ fun_l9_n298
+end
+
+def fun_l8_n858()
+ fun_l9_n7
+end
+
+def fun_l8_n859()
+ fun_l9_n885
+end
+
+def fun_l8_n860()
+ fun_l9_n785
+end
+
+def fun_l8_n861()
+ fun_l9_n653
+end
+
+def fun_l8_n862()
+ fun_l9_n206
+end
+
+def fun_l8_n863()
+ fun_l9_n460
+end
+
+def fun_l8_n864()
+ fun_l9_n361
+end
+
+def fun_l8_n865()
+ fun_l9_n782
+end
+
+def fun_l8_n866()
+ fun_l9_n965
+end
+
+def fun_l8_n867()
+ fun_l9_n653
+end
+
+def fun_l8_n868()
+ fun_l9_n757
+end
+
+def fun_l8_n869()
+ fun_l9_n892
+end
+
+def fun_l8_n870()
+ fun_l9_n939
+end
+
+def fun_l8_n871()
+ fun_l9_n105
+end
+
+def fun_l8_n872()
+ fun_l9_n334
+end
+
+def fun_l8_n873()
+ fun_l9_n120
+end
+
+def fun_l8_n874()
+ fun_l9_n530
+end
+
+def fun_l8_n875()
+ fun_l9_n777
+end
+
+def fun_l8_n876()
+ fun_l9_n546
+end
+
+def fun_l8_n877()
+ fun_l9_n235
+end
+
+def fun_l8_n878()
+ fun_l9_n647
+end
+
+def fun_l8_n879()
+ fun_l9_n813
+end
+
+def fun_l8_n880()
+ fun_l9_n756
+end
+
+def fun_l8_n881()
+ fun_l9_n202
+end
+
+def fun_l8_n882()
+ fun_l9_n58
+end
+
+def fun_l8_n883()
+ fun_l9_n895
+end
+
+def fun_l8_n884()
+ fun_l9_n556
+end
+
+def fun_l8_n885()
+ fun_l9_n974
+end
+
+def fun_l8_n886()
+ fun_l9_n671
+end
+
+def fun_l8_n887()
+ fun_l9_n700
+end
+
+def fun_l8_n888()
+ fun_l9_n788
+end
+
+def fun_l8_n889()
+ fun_l9_n568
+end
+
+def fun_l8_n890()
+ fun_l9_n431
+end
+
+def fun_l8_n891()
+ fun_l9_n517
+end
+
+def fun_l8_n892()
+ fun_l9_n330
+end
+
+def fun_l8_n893()
+ fun_l9_n573
+end
+
+def fun_l8_n894()
+ fun_l9_n510
+end
+
+def fun_l8_n895()
+ fun_l9_n784
+end
+
+def fun_l8_n896()
+ fun_l9_n75
+end
+
+def fun_l8_n897()
+ fun_l9_n314
+end
+
+def fun_l8_n898()
+ fun_l9_n703
+end
+
+def fun_l8_n899()
+ fun_l9_n740
+end
+
+def fun_l8_n900()
+ fun_l9_n806
+end
+
+def fun_l8_n901()
+ fun_l9_n208
+end
+
+def fun_l8_n902()
+ fun_l9_n678
+end
+
+def fun_l8_n903()
+ fun_l9_n443
+end
+
+def fun_l8_n904()
+ fun_l9_n285
+end
+
+def fun_l8_n905()
+ fun_l9_n840
+end
+
+def fun_l8_n906()
+ fun_l9_n896
+end
+
+def fun_l8_n907()
+ fun_l9_n253
+end
+
+def fun_l8_n908()
+ fun_l9_n786
+end
+
+def fun_l8_n909()
+ fun_l9_n364
+end
+
+def fun_l8_n910()
+ fun_l9_n314
+end
+
+def fun_l8_n911()
+ fun_l9_n178
+end
+
+def fun_l8_n912()
+ fun_l9_n14
+end
+
+def fun_l8_n913()
+ fun_l9_n594
+end
+
+def fun_l8_n914()
+ fun_l9_n524
+end
+
+def fun_l8_n915()
+ fun_l9_n449
+end
+
+def fun_l8_n916()
+ fun_l9_n970
+end
+
+def fun_l8_n917()
+ fun_l9_n418
+end
+
+def fun_l8_n918()
+ fun_l9_n978
+end
+
+def fun_l8_n919()
+ fun_l9_n266
+end
+
+def fun_l8_n920()
+ fun_l9_n384
+end
+
+def fun_l8_n921()
+ fun_l9_n806
+end
+
+def fun_l8_n922()
+ fun_l9_n99
+end
+
+def fun_l8_n923()
+ fun_l9_n116
+end
+
+def fun_l8_n924()
+ fun_l9_n494
+end
+
+def fun_l8_n925()
+ fun_l9_n891
+end
+
+def fun_l8_n926()
+ fun_l9_n49
+end
+
+def fun_l8_n927()
+ fun_l9_n87
+end
+
+def fun_l8_n928()
+ fun_l9_n502
+end
+
+def fun_l8_n929()
+ fun_l9_n528
+end
+
+def fun_l8_n930()
+ fun_l9_n403
+end
+
+def fun_l8_n931()
+ fun_l9_n385
+end
+
+def fun_l8_n932()
+ fun_l9_n965
+end
+
+def fun_l8_n933()
+ fun_l9_n658
+end
+
+def fun_l8_n934()
+ fun_l9_n316
+end
+
+def fun_l8_n935()
+ fun_l9_n441
+end
+
+def fun_l8_n936()
+ fun_l9_n453
+end
+
+def fun_l8_n937()
+ fun_l9_n957
+end
+
+def fun_l8_n938()
+ fun_l9_n360
+end
+
+def fun_l8_n939()
+ fun_l9_n150
+end
+
+def fun_l8_n940()
+ fun_l9_n934
+end
+
+def fun_l8_n941()
+ fun_l9_n676
+end
+
+def fun_l8_n942()
+ fun_l9_n943
+end
+
+def fun_l8_n943()
+ fun_l9_n824
+end
+
+def fun_l8_n944()
+ fun_l9_n7
+end
+
+def fun_l8_n945()
+ fun_l9_n640
+end
+
+def fun_l8_n946()
+ fun_l9_n18
+end
+
+def fun_l8_n947()
+ fun_l9_n483
+end
+
+def fun_l8_n948()
+ fun_l9_n495
+end
+
+def fun_l8_n949()
+ fun_l9_n711
+end
+
+def fun_l8_n950()
+ fun_l9_n382
+end
+
+def fun_l8_n951()
+ fun_l9_n479
+end
+
+def fun_l8_n952()
+ fun_l9_n920
+end
+
+def fun_l8_n953()
+ fun_l9_n477
+end
+
+def fun_l8_n954()
+ fun_l9_n411
+end
+
+def fun_l8_n955()
+ fun_l9_n801
+end
+
+def fun_l8_n956()
+ fun_l9_n630
+end
+
+def fun_l8_n957()
+ fun_l9_n172
+end
+
+def fun_l8_n958()
+ fun_l9_n104
+end
+
+def fun_l8_n959()
+ fun_l9_n197
+end
+
+def fun_l8_n960()
+ fun_l9_n231
+end
+
+def fun_l8_n961()
+ fun_l9_n769
+end
+
+def fun_l8_n962()
+ fun_l9_n293
+end
+
+def fun_l8_n963()
+ fun_l9_n580
+end
+
+def fun_l8_n964()
+ fun_l9_n345
+end
+
+def fun_l8_n965()
+ fun_l9_n199
+end
+
+def fun_l8_n966()
+ fun_l9_n899
+end
+
+def fun_l8_n967()
+ fun_l9_n68
+end
+
+def fun_l8_n968()
+ fun_l9_n954
+end
+
+def fun_l8_n969()
+ fun_l9_n205
+end
+
+def fun_l8_n970()
+ fun_l9_n697
+end
+
+def fun_l8_n971()
+ fun_l9_n445
+end
+
+def fun_l8_n972()
+ fun_l9_n294
+end
+
+def fun_l8_n973()
+ fun_l9_n96
+end
+
+def fun_l8_n974()
+ fun_l9_n798
+end
+
+def fun_l8_n975()
+ fun_l9_n509
+end
+
+def fun_l8_n976()
+ fun_l9_n918
+end
+
+def fun_l8_n977()
+ fun_l9_n624
+end
+
+def fun_l8_n978()
+ fun_l9_n798
+end
+
+def fun_l8_n979()
+ fun_l9_n267
+end
+
+def fun_l8_n980()
+ fun_l9_n977
+end
+
+def fun_l8_n981()
+ fun_l9_n128
+end
+
+def fun_l8_n982()
+ fun_l9_n759
+end
+
+def fun_l8_n983()
+ fun_l9_n999
+end
+
+def fun_l8_n984()
+ fun_l9_n908
+end
+
+def fun_l8_n985()
+ fun_l9_n713
+end
+
+def fun_l8_n986()
+ fun_l9_n423
+end
+
+def fun_l8_n987()
+ fun_l9_n789
+end
+
+def fun_l8_n988()
+ fun_l9_n342
+end
+
+def fun_l8_n989()
+ fun_l9_n963
+end
+
+def fun_l8_n990()
+ fun_l9_n393
+end
+
+def fun_l8_n991()
+ fun_l9_n446
+end
+
+def fun_l8_n992()
+ fun_l9_n62
+end
+
+def fun_l8_n993()
+ fun_l9_n567
+end
+
+def fun_l8_n994()
+ fun_l9_n99
+end
+
+def fun_l8_n995()
+ fun_l9_n6
+end
+
+def fun_l8_n996()
+ fun_l9_n582
+end
+
+def fun_l8_n997()
+ fun_l9_n714
+end
+
+def fun_l8_n998()
+ fun_l9_n440
+end
+
+def fun_l8_n999()
+ fun_l9_n89
+end
+
+def fun_l9_n0()
+ fun_l10_n441
+end
+
+def fun_l9_n1()
+ fun_l10_n18
+end
+
+def fun_l9_n2()
+ fun_l10_n406
+end
+
+def fun_l9_n3()
+ fun_l10_n623
+end
+
+def fun_l9_n4()
+ fun_l10_n323
+end
+
+def fun_l9_n5()
+ fun_l10_n702
+end
+
+def fun_l9_n6()
+ fun_l10_n46
+end
+
+def fun_l9_n7()
+ fun_l10_n519
+end
+
+def fun_l9_n8()
+ fun_l10_n572
+end
+
+def fun_l9_n9()
+ fun_l10_n670
+end
+
+def fun_l9_n10()
+ fun_l10_n917
+end
+
+def fun_l9_n11()
+ fun_l10_n160
+end
+
+def fun_l9_n12()
+ fun_l10_n153
+end
+
+def fun_l9_n13()
+ fun_l10_n73
+end
+
+def fun_l9_n14()
+ fun_l10_n775
+end
+
+def fun_l9_n15()
+ fun_l10_n97
+end
+
+def fun_l9_n16()
+ fun_l10_n307
+end
+
+def fun_l9_n17()
+ fun_l10_n630
+end
+
+def fun_l9_n18()
+ fun_l10_n446
+end
+
+def fun_l9_n19()
+ fun_l10_n798
+end
+
+def fun_l9_n20()
+ fun_l10_n633
+end
+
+def fun_l9_n21()
+ fun_l10_n83
+end
+
+def fun_l9_n22()
+ fun_l10_n373
+end
+
+def fun_l9_n23()
+ fun_l10_n777
+end
+
+def fun_l9_n24()
+ fun_l10_n47
+end
+
+def fun_l9_n25()
+ fun_l10_n533
+end
+
+def fun_l9_n26()
+ fun_l10_n780
+end
+
+def fun_l9_n27()
+ fun_l10_n220
+end
+
+def fun_l9_n28()
+ fun_l10_n777
+end
+
+def fun_l9_n29()
+ fun_l10_n71
+end
+
+def fun_l9_n30()
+ fun_l10_n590
+end
+
+def fun_l9_n31()
+ fun_l10_n544
+end
+
+def fun_l9_n32()
+ fun_l10_n173
+end
+
+def fun_l9_n33()
+ fun_l10_n464
+end
+
+def fun_l9_n34()
+ fun_l10_n267
+end
+
+def fun_l9_n35()
+ fun_l10_n152
+end
+
+def fun_l9_n36()
+ fun_l10_n330
+end
+
+def fun_l9_n37()
+ fun_l10_n267
+end
+
+def fun_l9_n38()
+ fun_l10_n499
+end
+
+def fun_l9_n39()
+ fun_l10_n213
+end
+
+def fun_l9_n40()
+ fun_l10_n825
+end
+
+def fun_l9_n41()
+ fun_l10_n567
+end
+
+def fun_l9_n42()
+ fun_l10_n112
+end
+
+def fun_l9_n43()
+ fun_l10_n483
+end
+
+def fun_l9_n44()
+ fun_l10_n52
+end
+
+def fun_l9_n45()
+ fun_l10_n564
+end
+
+def fun_l9_n46()
+ fun_l10_n667
+end
+
+def fun_l9_n47()
+ fun_l10_n965
+end
+
+def fun_l9_n48()
+ fun_l10_n49
+end
+
+def fun_l9_n49()
+ fun_l10_n206
+end
+
+def fun_l9_n50()
+ fun_l10_n904
+end
+
+def fun_l9_n51()
+ fun_l10_n161
+end
+
+def fun_l9_n52()
+ fun_l10_n739
+end
+
+def fun_l9_n53()
+ fun_l10_n62
+end
+
+def fun_l9_n54()
+ fun_l10_n881
+end
+
+def fun_l9_n55()
+ fun_l10_n392
+end
+
+def fun_l9_n56()
+ fun_l10_n560
+end
+
+def fun_l9_n57()
+ fun_l10_n202
+end
+
+def fun_l9_n58()
+ fun_l10_n486
+end
+
+def fun_l9_n59()
+ fun_l10_n347
+end
+
+def fun_l9_n60()
+ fun_l10_n593
+end
+
+def fun_l9_n61()
+ fun_l10_n542
+end
+
+def fun_l9_n62()
+ fun_l10_n914
+end
+
+def fun_l9_n63()
+ fun_l10_n956
+end
+
+def fun_l9_n64()
+ fun_l10_n337
+end
+
+def fun_l9_n65()
+ fun_l10_n383
+end
+
+def fun_l9_n66()
+ fun_l10_n332
+end
+
+def fun_l9_n67()
+ fun_l10_n610
+end
+
+def fun_l9_n68()
+ fun_l10_n396
+end
+
+def fun_l9_n69()
+ fun_l10_n847
+end
+
+def fun_l9_n70()
+ fun_l10_n473
+end
+
+def fun_l9_n71()
+ fun_l10_n657
+end
+
+def fun_l9_n72()
+ fun_l10_n933
+end
+
+def fun_l9_n73()
+ fun_l10_n384
+end
+
+def fun_l9_n74()
+ fun_l10_n275
+end
+
+def fun_l9_n75()
+ fun_l10_n90
+end
+
+def fun_l9_n76()
+ fun_l10_n841
+end
+
+def fun_l9_n77()
+ fun_l10_n326
+end
+
+def fun_l9_n78()
+ fun_l10_n275
+end
+
+def fun_l9_n79()
+ fun_l10_n153
+end
+
+def fun_l9_n80()
+ fun_l10_n651
+end
+
+def fun_l9_n81()
+ fun_l10_n724
+end
+
+def fun_l9_n82()
+ fun_l10_n204
+end
+
+def fun_l9_n83()
+ fun_l10_n389
+end
+
+def fun_l9_n84()
+ fun_l10_n583
+end
+
+def fun_l9_n85()
+ fun_l10_n938
+end
+
+def fun_l9_n86()
+ fun_l10_n433
+end
+
+def fun_l9_n87()
+ fun_l10_n917
+end
+
+def fun_l9_n88()
+ fun_l10_n147
+end
+
+def fun_l9_n89()
+ fun_l10_n578
+end
+
+def fun_l9_n90()
+ fun_l10_n760
+end
+
+def fun_l9_n91()
+ fun_l10_n891
+end
+
+def fun_l9_n92()
+ fun_l10_n676
+end
+
+def fun_l9_n93()
+ fun_l10_n130
+end
+
+def fun_l9_n94()
+ fun_l10_n506
+end
+
+def fun_l9_n95()
+ fun_l10_n67
+end
+
+def fun_l9_n96()
+ fun_l10_n98
+end
+
+def fun_l9_n97()
+ fun_l10_n788
+end
+
+def fun_l9_n98()
+ fun_l10_n151
+end
+
+def fun_l9_n99()
+ fun_l10_n170
+end
+
+def fun_l9_n100()
+ fun_l10_n853
+end
+
+def fun_l9_n101()
+ fun_l10_n76
+end
+
+def fun_l9_n102()
+ fun_l10_n577
+end
+
+def fun_l9_n103()
+ fun_l10_n703
+end
+
+def fun_l9_n104()
+ fun_l10_n436
+end
+
+def fun_l9_n105()
+ fun_l10_n983
+end
+
+def fun_l9_n106()
+ fun_l10_n715
+end
+
+def fun_l9_n107()
+ fun_l10_n703
+end
+
+def fun_l9_n108()
+ fun_l10_n986
+end
+
+def fun_l9_n109()
+ fun_l10_n328
+end
+
+def fun_l9_n110()
+ fun_l10_n719
+end
+
+def fun_l9_n111()
+ fun_l10_n885
+end
+
+def fun_l9_n112()
+ fun_l10_n364
+end
+
+def fun_l9_n113()
+ fun_l10_n554
+end
+
+def fun_l9_n114()
+ fun_l10_n909
+end
+
+def fun_l9_n115()
+ fun_l10_n718
+end
+
+def fun_l9_n116()
+ fun_l10_n866
+end
+
+def fun_l9_n117()
+ fun_l10_n592
+end
+
+def fun_l9_n118()
+ fun_l10_n954
+end
+
+def fun_l9_n119()
+ fun_l10_n204
+end
+
+def fun_l9_n120()
+ fun_l10_n565
+end
+
+def fun_l9_n121()
+ fun_l10_n982
+end
+
+def fun_l9_n122()
+ fun_l10_n64
+end
+
+def fun_l9_n123()
+ fun_l10_n851
+end
+
+def fun_l9_n124()
+ fun_l10_n615
+end
+
+def fun_l9_n125()
+ fun_l10_n141
+end
+
+def fun_l9_n126()
+ fun_l10_n663
+end
+
+def fun_l9_n127()
+ fun_l10_n625
+end
+
+def fun_l9_n128()
+ fun_l10_n183
+end
+
+def fun_l9_n129()
+ fun_l10_n433
+end
+
+def fun_l9_n130()
+ fun_l10_n620
+end
+
+def fun_l9_n131()
+ fun_l10_n251
+end
+
+def fun_l9_n132()
+ fun_l10_n726
+end
+
+def fun_l9_n133()
+ fun_l10_n871
+end
+
+def fun_l9_n134()
+ fun_l10_n835
+end
+
+def fun_l9_n135()
+ fun_l10_n643
+end
+
+def fun_l9_n136()
+ fun_l10_n342
+end
+
+def fun_l9_n137()
+ fun_l10_n13
+end
+
+def fun_l9_n138()
+ fun_l10_n173
+end
+
+def fun_l9_n139()
+ fun_l10_n555
+end
+
+def fun_l9_n140()
+ fun_l10_n723
+end
+
+def fun_l9_n141()
+ fun_l10_n269
+end
+
+def fun_l9_n142()
+ fun_l10_n127
+end
+
+def fun_l9_n143()
+ fun_l10_n238
+end
+
+def fun_l9_n144()
+ fun_l10_n962
+end
+
+def fun_l9_n145()
+ fun_l10_n259
+end
+
+def fun_l9_n146()
+ fun_l10_n813
+end
+
+def fun_l9_n147()
+ fun_l10_n506
+end
+
+def fun_l9_n148()
+ fun_l10_n38
+end
+
+def fun_l9_n149()
+ fun_l10_n465
+end
+
+def fun_l9_n150()
+ fun_l10_n602
+end
+
+def fun_l9_n151()
+ fun_l10_n857
+end
+
+def fun_l9_n152()
+ fun_l10_n346
+end
+
+def fun_l9_n153()
+ fun_l10_n611
+end
+
+def fun_l9_n154()
+ fun_l10_n696
+end
+
+def fun_l9_n155()
+ fun_l10_n93
+end
+
+def fun_l9_n156()
+ fun_l10_n874
+end
+
+def fun_l9_n157()
+ fun_l10_n750
+end
+
+def fun_l9_n158()
+ fun_l10_n339
+end
+
+def fun_l9_n159()
+ fun_l10_n395
+end
+
+def fun_l9_n160()
+ fun_l10_n838
+end
+
+def fun_l9_n161()
+ fun_l10_n620
+end
+
+def fun_l9_n162()
+ fun_l10_n934
+end
+
+def fun_l9_n163()
+ fun_l10_n908
+end
+
+def fun_l9_n164()
+ fun_l10_n603
+end
+
+def fun_l9_n165()
+ fun_l10_n906
+end
+
+def fun_l9_n166()
+ fun_l10_n718
+end
+
+def fun_l9_n167()
+ fun_l10_n514
+end
+
+def fun_l9_n168()
+ fun_l10_n766
+end
+
+def fun_l9_n169()
+ fun_l10_n179
+end
+
+def fun_l9_n170()
+ fun_l10_n290
+end
+
+def fun_l9_n171()
+ fun_l10_n833
+end
+
+def fun_l9_n172()
+ fun_l10_n420
+end
+
+def fun_l9_n173()
+ fun_l10_n605
+end
+
+def fun_l9_n174()
+ fun_l10_n356
+end
+
+def fun_l9_n175()
+ fun_l10_n744
+end
+
+def fun_l9_n176()
+ fun_l10_n715
+end
+
+def fun_l9_n177()
+ fun_l10_n725
+end
+
+def fun_l9_n178()
+ fun_l10_n434
+end
+
+def fun_l9_n179()
+ fun_l10_n127
+end
+
+def fun_l9_n180()
+ fun_l10_n982
+end
+
+def fun_l9_n181()
+ fun_l10_n377
+end
+
+def fun_l9_n182()
+ fun_l10_n302
+end
+
+def fun_l9_n183()
+ fun_l10_n472
+end
+
+def fun_l9_n184()
+ fun_l10_n850
+end
+
+def fun_l9_n185()
+ fun_l10_n900
+end
+
+def fun_l9_n186()
+ fun_l10_n581
+end
+
+def fun_l9_n187()
+ fun_l10_n628
+end
+
+def fun_l9_n188()
+ fun_l10_n453
+end
+
+def fun_l9_n189()
+ fun_l10_n31
+end
+
+def fun_l9_n190()
+ fun_l10_n257
+end
+
+def fun_l9_n191()
+ fun_l10_n416
+end
+
+def fun_l9_n192()
+ fun_l10_n399
+end
+
+def fun_l9_n193()
+ fun_l10_n113
+end
+
+def fun_l9_n194()
+ fun_l10_n217
+end
+
+def fun_l9_n195()
+ fun_l10_n975
+end
+
+def fun_l9_n196()
+ fun_l10_n525
+end
+
+def fun_l9_n197()
+ fun_l10_n534
+end
+
+def fun_l9_n198()
+ fun_l10_n986
+end
+
+def fun_l9_n199()
+ fun_l10_n992
+end
+
+def fun_l9_n200()
+ fun_l10_n579
+end
+
+def fun_l9_n201()
+ fun_l10_n776
+end
+
+def fun_l9_n202()
+ fun_l10_n102
+end
+
+def fun_l9_n203()
+ fun_l10_n287
+end
+
+def fun_l9_n204()
+ fun_l10_n11
+end
+
+def fun_l9_n205()
+ fun_l10_n522
+end
+
+def fun_l9_n206()
+ fun_l10_n777
+end
+
+def fun_l9_n207()
+ fun_l10_n984
+end
+
+def fun_l9_n208()
+ fun_l10_n369
+end
+
+def fun_l9_n209()
+ fun_l10_n889
+end
+
+def fun_l9_n210()
+ fun_l10_n619
+end
+
+def fun_l9_n211()
+ fun_l10_n878
+end
+
+def fun_l9_n212()
+ fun_l10_n540
+end
+
+def fun_l9_n213()
+ fun_l10_n285
+end
+
+def fun_l9_n214()
+ fun_l10_n627
+end
+
+def fun_l9_n215()
+ fun_l10_n196
+end
+
+def fun_l9_n216()
+ fun_l10_n166
+end
+
+def fun_l9_n217()
+ fun_l10_n648
+end
+
+def fun_l9_n218()
+ fun_l10_n980
+end
+
+def fun_l9_n219()
+ fun_l10_n801
+end
+
+def fun_l9_n220()
+ fun_l10_n949
+end
+
+def fun_l9_n221()
+ fun_l10_n985
+end
+
+def fun_l9_n222()
+ fun_l10_n384
+end
+
+def fun_l9_n223()
+ fun_l10_n840
+end
+
+def fun_l9_n224()
+ fun_l10_n80
+end
+
+def fun_l9_n225()
+ fun_l10_n79
+end
+
+def fun_l9_n226()
+ fun_l10_n630
+end
+
+def fun_l9_n227()
+ fun_l10_n20
+end
+
+def fun_l9_n228()
+ fun_l10_n224
+end
+
+def fun_l9_n229()
+ fun_l10_n480
+end
+
+def fun_l9_n230()
+ fun_l10_n145
+end
+
+def fun_l9_n231()
+ fun_l10_n923
+end
+
+def fun_l9_n232()
+ fun_l10_n794
+end
+
+def fun_l9_n233()
+ fun_l10_n271
+end
+
+def fun_l9_n234()
+ fun_l10_n124
+end
+
+def fun_l9_n235()
+ fun_l10_n925
+end
+
+def fun_l9_n236()
+ fun_l10_n938
+end
+
+def fun_l9_n237()
+ fun_l10_n470
+end
+
+def fun_l9_n238()
+ fun_l10_n557
+end
+
+def fun_l9_n239()
+ fun_l10_n152
+end
+
+def fun_l9_n240()
+ fun_l10_n200
+end
+
+def fun_l9_n241()
+ fun_l10_n110
+end
+
+def fun_l9_n242()
+ fun_l10_n329
+end
+
+def fun_l9_n243()
+ fun_l10_n2
+end
+
+def fun_l9_n244()
+ fun_l10_n432
+end
+
+def fun_l9_n245()
+ fun_l10_n175
+end
+
+def fun_l9_n246()
+ fun_l10_n33
+end
+
+def fun_l9_n247()
+ fun_l10_n441
+end
+
+def fun_l9_n248()
+ fun_l10_n54
+end
+
+def fun_l9_n249()
+ fun_l10_n408
+end
+
+def fun_l9_n250()
+ fun_l10_n911
+end
+
+def fun_l9_n251()
+ fun_l10_n100
+end
+
+def fun_l9_n252()
+ fun_l10_n645
+end
+
+def fun_l9_n253()
+ fun_l10_n826
+end
+
+def fun_l9_n254()
+ fun_l10_n319
+end
+
+def fun_l9_n255()
+ fun_l10_n735
+end
+
+def fun_l9_n256()
+ fun_l10_n6
+end
+
+def fun_l9_n257()
+ fun_l10_n428
+end
+
+def fun_l9_n258()
+ fun_l10_n511
+end
+
+def fun_l9_n259()
+ fun_l10_n47
+end
+
+def fun_l9_n260()
+ fun_l10_n985
+end
+
+def fun_l9_n261()
+ fun_l10_n278
+end
+
+def fun_l9_n262()
+ fun_l10_n839
+end
+
+def fun_l9_n263()
+ fun_l10_n948
+end
+
+def fun_l9_n264()
+ fun_l10_n572
+end
+
+def fun_l9_n265()
+ fun_l10_n864
+end
+
+def fun_l9_n266()
+ fun_l10_n159
+end
+
+def fun_l9_n267()
+ fun_l10_n870
+end
+
+def fun_l9_n268()
+ fun_l10_n194
+end
+
+def fun_l9_n269()
+ fun_l10_n424
+end
+
+def fun_l9_n270()
+ fun_l10_n238
+end
+
+def fun_l9_n271()
+ fun_l10_n804
+end
+
+def fun_l9_n272()
+ fun_l10_n945
+end
+
+def fun_l9_n273()
+ fun_l10_n181
+end
+
+def fun_l9_n274()
+ fun_l10_n90
+end
+
+def fun_l9_n275()
+ fun_l10_n552
+end
+
+def fun_l9_n276()
+ fun_l10_n690
+end
+
+def fun_l9_n277()
+ fun_l10_n416
+end
+
+def fun_l9_n278()
+ fun_l10_n977
+end
+
+def fun_l9_n279()
+ fun_l10_n930
+end
+
+def fun_l9_n280()
+ fun_l10_n77
+end
+
+def fun_l9_n281()
+ fun_l10_n102
+end
+
+def fun_l9_n282()
+ fun_l10_n263
+end
+
+def fun_l9_n283()
+ fun_l10_n973
+end
+
+def fun_l9_n284()
+ fun_l10_n119
+end
+
+def fun_l9_n285()
+ fun_l10_n102
+end
+
+def fun_l9_n286()
+ fun_l10_n744
+end
+
+def fun_l9_n287()
+ fun_l10_n430
+end
+
+def fun_l9_n288()
+ fun_l10_n465
+end
+
+def fun_l9_n289()
+ fun_l10_n54
+end
+
+def fun_l9_n290()
+ fun_l10_n191
+end
+
+def fun_l9_n291()
+ fun_l10_n781
+end
+
+def fun_l9_n292()
+ fun_l10_n158
+end
+
+def fun_l9_n293()
+ fun_l10_n512
+end
+
+def fun_l9_n294()
+ fun_l10_n396
+end
+
+def fun_l9_n295()
+ fun_l10_n814
+end
+
+def fun_l9_n296()
+ fun_l10_n509
+end
+
+def fun_l9_n297()
+ fun_l10_n340
+end
+
+def fun_l9_n298()
+ fun_l10_n338
+end
+
+def fun_l9_n299()
+ fun_l10_n822
+end
+
+def fun_l9_n300()
+ fun_l10_n64
+end
+
+def fun_l9_n301()
+ fun_l10_n867
+end
+
+def fun_l9_n302()
+ fun_l10_n924
+end
+
+def fun_l9_n303()
+ fun_l10_n628
+end
+
+def fun_l9_n304()
+ fun_l10_n929
+end
+
+def fun_l9_n305()
+ fun_l10_n874
+end
+
+def fun_l9_n306()
+ fun_l10_n411
+end
+
+def fun_l9_n307()
+ fun_l10_n836
+end
+
+def fun_l9_n308()
+ fun_l10_n574
+end
+
+def fun_l9_n309()
+ fun_l10_n865
+end
+
+def fun_l9_n310()
+ fun_l10_n992
+end
+
+def fun_l9_n311()
+ fun_l10_n75
+end
+
+def fun_l9_n312()
+ fun_l10_n221
+end
+
+def fun_l9_n313()
+ fun_l10_n439
+end
+
+def fun_l9_n314()
+ fun_l10_n826
+end
+
+def fun_l9_n315()
+ fun_l10_n589
+end
+
+def fun_l9_n316()
+ fun_l10_n123
+end
+
+def fun_l9_n317()
+ fun_l10_n641
+end
+
+def fun_l9_n318()
+ fun_l10_n556
+end
+
+def fun_l9_n319()
+ fun_l10_n92
+end
+
+def fun_l9_n320()
+ fun_l10_n728
+end
+
+def fun_l9_n321()
+ fun_l10_n503
+end
+
+def fun_l9_n322()
+ fun_l10_n626
+end
+
+def fun_l9_n323()
+ fun_l10_n416
+end
+
+def fun_l9_n324()
+ fun_l10_n331
+end
+
+def fun_l9_n325()
+ fun_l10_n330
+end
+
+def fun_l9_n326()
+ fun_l10_n387
+end
+
+def fun_l9_n327()
+ fun_l10_n337
+end
+
+def fun_l9_n328()
+ fun_l10_n652
+end
+
+def fun_l9_n329()
+ fun_l10_n654
+end
+
+def fun_l9_n330()
+ fun_l10_n413
+end
+
+def fun_l9_n331()
+ fun_l10_n763
+end
+
+def fun_l9_n332()
+ fun_l10_n962
+end
+
+def fun_l9_n333()
+ fun_l10_n944
+end
+
+def fun_l9_n334()
+ fun_l10_n655
+end
+
+def fun_l9_n335()
+ fun_l10_n907
+end
+
+def fun_l9_n336()
+ fun_l10_n293
+end
+
+def fun_l9_n337()
+ fun_l10_n684
+end
+
+def fun_l9_n338()
+ fun_l10_n566
+end
+
+def fun_l9_n339()
+ fun_l10_n547
+end
+
+def fun_l9_n340()
+ fun_l10_n112
+end
+
+def fun_l9_n341()
+ fun_l10_n854
+end
+
+def fun_l9_n342()
+ fun_l10_n336
+end
+
+def fun_l9_n343()
+ fun_l10_n473
+end
+
+def fun_l9_n344()
+ fun_l10_n485
+end
+
+def fun_l9_n345()
+ fun_l10_n588
+end
+
+def fun_l9_n346()
+ fun_l10_n889
+end
+
+def fun_l9_n347()
+ fun_l10_n523
+end
+
+def fun_l9_n348()
+ fun_l10_n8
+end
+
+def fun_l9_n349()
+ fun_l10_n368
+end
+
+def fun_l9_n350()
+ fun_l10_n636
+end
+
+def fun_l9_n351()
+ fun_l10_n879
+end
+
+def fun_l9_n352()
+ fun_l10_n524
+end
+
+def fun_l9_n353()
+ fun_l10_n209
+end
+
+def fun_l9_n354()
+ fun_l10_n271
+end
+
+def fun_l9_n355()
+ fun_l10_n90
+end
+
+def fun_l9_n356()
+ fun_l10_n698
+end
+
+def fun_l9_n357()
+ fun_l10_n268
+end
+
+def fun_l9_n358()
+ fun_l10_n948
+end
+
+def fun_l9_n359()
+ fun_l10_n847
+end
+
+def fun_l9_n360()
+ fun_l10_n985
+end
+
+def fun_l9_n361()
+ fun_l10_n978
+end
+
+def fun_l9_n362()
+ fun_l10_n808
+end
+
+def fun_l9_n363()
+ fun_l10_n796
+end
+
+def fun_l9_n364()
+ fun_l10_n810
+end
+
+def fun_l9_n365()
+ fun_l10_n665
+end
+
+def fun_l9_n366()
+ fun_l10_n765
+end
+
+def fun_l9_n367()
+ fun_l10_n74
+end
+
+def fun_l9_n368()
+ fun_l10_n330
+end
+
+def fun_l9_n369()
+ fun_l10_n125
+end
+
+def fun_l9_n370()
+ fun_l10_n814
+end
+
+def fun_l9_n371()
+ fun_l10_n498
+end
+
+def fun_l9_n372()
+ fun_l10_n783
+end
+
+def fun_l9_n373()
+ fun_l10_n169
+end
+
+def fun_l9_n374()
+ fun_l10_n490
+end
+
+def fun_l9_n375()
+ fun_l10_n923
+end
+
+def fun_l9_n376()
+ fun_l10_n63
+end
+
+def fun_l9_n377()
+ fun_l10_n687
+end
+
+def fun_l9_n378()
+ fun_l10_n603
+end
+
+def fun_l9_n379()
+ fun_l10_n916
+end
+
+def fun_l9_n380()
+ fun_l10_n930
+end
+
+def fun_l9_n381()
+ fun_l10_n884
+end
+
+def fun_l9_n382()
+ fun_l10_n782
+end
+
+def fun_l9_n383()
+ fun_l10_n63
+end
+
+def fun_l9_n384()
+ fun_l10_n488
+end
+
+def fun_l9_n385()
+ fun_l10_n188
+end
+
+def fun_l9_n386()
+ fun_l10_n692
+end
+
+def fun_l9_n387()
+ fun_l10_n213
+end
+
+def fun_l9_n388()
+ fun_l10_n358
+end
+
+def fun_l9_n389()
+ fun_l10_n200
+end
+
+def fun_l9_n390()
+ fun_l10_n881
+end
+
+def fun_l9_n391()
+ fun_l10_n533
+end
+
+def fun_l9_n392()
+ fun_l10_n889
+end
+
+def fun_l9_n393()
+ fun_l10_n444
+end
+
+def fun_l9_n394()
+ fun_l10_n184
+end
+
+def fun_l9_n395()
+ fun_l10_n775
+end
+
+def fun_l9_n396()
+ fun_l10_n714
+end
+
+def fun_l9_n397()
+ fun_l10_n385
+end
+
+def fun_l9_n398()
+ fun_l10_n432
+end
+
+def fun_l9_n399()
+ fun_l10_n357
+end
+
+def fun_l9_n400()
+ fun_l10_n223
+end
+
+def fun_l9_n401()
+ fun_l10_n73
+end
+
+def fun_l9_n402()
+ fun_l10_n139
+end
+
+def fun_l9_n403()
+ fun_l10_n930
+end
+
+def fun_l9_n404()
+ fun_l10_n43
+end
+
+def fun_l9_n405()
+ fun_l10_n104
+end
+
+def fun_l9_n406()
+ fun_l10_n334
+end
+
+def fun_l9_n407()
+ fun_l10_n959
+end
+
+def fun_l9_n408()
+ fun_l10_n59
+end
+
+def fun_l9_n409()
+ fun_l10_n794
+end
+
+def fun_l9_n410()
+ fun_l10_n204
+end
+
+def fun_l9_n411()
+ fun_l10_n225
+end
+
+def fun_l9_n412()
+ fun_l10_n849
+end
+
+def fun_l9_n413()
+ fun_l10_n227
+end
+
+def fun_l9_n414()
+ fun_l10_n59
+end
+
+def fun_l9_n415()
+ fun_l10_n352
+end
+
+def fun_l9_n416()
+ fun_l10_n910
+end
+
+def fun_l9_n417()
+ fun_l10_n628
+end
+
+def fun_l9_n418()
+ fun_l10_n653
+end
+
+def fun_l9_n419()
+ fun_l10_n827
+end
+
+def fun_l9_n420()
+ fun_l10_n960
+end
+
+def fun_l9_n421()
+ fun_l10_n142
+end
+
+def fun_l9_n422()
+ fun_l10_n928
+end
+
+def fun_l9_n423()
+ fun_l10_n370
+end
+
+def fun_l9_n424()
+ fun_l10_n121
+end
+
+def fun_l9_n425()
+ fun_l10_n684
+end
+
+def fun_l9_n426()
+ fun_l10_n187
+end
+
+def fun_l9_n427()
+ fun_l10_n93
+end
+
+def fun_l9_n428()
+ fun_l10_n792
+end
+
+def fun_l9_n429()
+ fun_l10_n565
+end
+
+def fun_l9_n430()
+ fun_l10_n933
+end
+
+def fun_l9_n431()
+ fun_l10_n393
+end
+
+def fun_l9_n432()
+ fun_l10_n412
+end
+
+def fun_l9_n433()
+ fun_l10_n121
+end
+
+def fun_l9_n434()
+ fun_l10_n522
+end
+
+def fun_l9_n435()
+ fun_l10_n408
+end
+
+def fun_l9_n436()
+ fun_l10_n670
+end
+
+def fun_l9_n437()
+ fun_l10_n685
+end
+
+def fun_l9_n438()
+ fun_l10_n138
+end
+
+def fun_l9_n439()
+ fun_l10_n658
+end
+
+def fun_l9_n440()
+ fun_l10_n567
+end
+
+def fun_l9_n441()
+ fun_l10_n121
+end
+
+def fun_l9_n442()
+ fun_l10_n532
+end
+
+def fun_l9_n443()
+ fun_l10_n37
+end
+
+def fun_l9_n444()
+ fun_l10_n502
+end
+
+def fun_l9_n445()
+ fun_l10_n779
+end
+
+def fun_l9_n446()
+ fun_l10_n376
+end
+
+def fun_l9_n447()
+ fun_l10_n412
+end
+
+def fun_l9_n448()
+ fun_l10_n932
+end
+
+def fun_l9_n449()
+ fun_l10_n779
+end
+
+def fun_l9_n450()
+ fun_l10_n231
+end
+
+def fun_l9_n451()
+ fun_l10_n302
+end
+
+def fun_l9_n452()
+ fun_l10_n273
+end
+
+def fun_l9_n453()
+ fun_l10_n531
+end
+
+def fun_l9_n454()
+ fun_l10_n291
+end
+
+def fun_l9_n455()
+ fun_l10_n56
+end
+
+def fun_l9_n456()
+ fun_l10_n970
+end
+
+def fun_l9_n457()
+ fun_l10_n936
+end
+
+def fun_l9_n458()
+ fun_l10_n537
+end
+
+def fun_l9_n459()
+ fun_l10_n145
+end
+
+def fun_l9_n460()
+ fun_l10_n756
+end
+
+def fun_l9_n461()
+ fun_l10_n0
+end
+
+def fun_l9_n462()
+ fun_l10_n691
+end
+
+def fun_l9_n463()
+ fun_l10_n635
+end
+
+def fun_l9_n464()
+ fun_l10_n485
+end
+
+def fun_l9_n465()
+ fun_l10_n407
+end
+
+def fun_l9_n466()
+ fun_l10_n393
+end
+
+def fun_l9_n467()
+ fun_l10_n336
+end
+
+def fun_l9_n468()
+ fun_l10_n169
+end
+
+def fun_l9_n469()
+ fun_l10_n43
+end
+
+def fun_l9_n470()
+ fun_l10_n907
+end
+
+def fun_l9_n471()
+ fun_l10_n215
+end
+
+def fun_l9_n472()
+ fun_l10_n118
+end
+
+def fun_l9_n473()
+ fun_l10_n735
+end
+
+def fun_l9_n474()
+ fun_l10_n319
+end
+
+def fun_l9_n475()
+ fun_l10_n631
+end
+
+def fun_l9_n476()
+ fun_l10_n150
+end
+
+def fun_l9_n477()
+ fun_l10_n899
+end
+
+def fun_l9_n478()
+ fun_l10_n407
+end
+
+def fun_l9_n479()
+ fun_l10_n830
+end
+
+def fun_l9_n480()
+ fun_l10_n931
+end
+
+def fun_l9_n481()
+ fun_l10_n392
+end
+
+def fun_l9_n482()
+ fun_l10_n100
+end
+
+def fun_l9_n483()
+ fun_l10_n210
+end
+
+def fun_l9_n484()
+ fun_l10_n506
+end
+
+def fun_l9_n485()
+ fun_l10_n160
+end
+
+def fun_l9_n486()
+ fun_l10_n998
+end
+
+def fun_l9_n487()
+ fun_l10_n170
+end
+
+def fun_l9_n488()
+ fun_l10_n722
+end
+
+def fun_l9_n489()
+ fun_l10_n196
+end
+
+def fun_l9_n490()
+ fun_l10_n518
+end
+
+def fun_l9_n491()
+ fun_l10_n350
+end
+
+def fun_l9_n492()
+ fun_l10_n89
+end
+
+def fun_l9_n493()
+ fun_l10_n49
+end
+
+def fun_l9_n494()
+ fun_l10_n366
+end
+
+def fun_l9_n495()
+ fun_l10_n850
+end
+
+def fun_l9_n496()
+ fun_l10_n430
+end
+
+def fun_l9_n497()
+ fun_l10_n485
+end
+
+def fun_l9_n498()
+ fun_l10_n584
+end
+
+def fun_l9_n499()
+ fun_l10_n36
+end
+
+def fun_l9_n500()
+ fun_l10_n58
+end
+
+def fun_l9_n501()
+ fun_l10_n81
+end
+
+def fun_l9_n502()
+ fun_l10_n161
+end
+
+def fun_l9_n503()
+ fun_l10_n983
+end
+
+def fun_l9_n504()
+ fun_l10_n994
+end
+
+def fun_l9_n505()
+ fun_l10_n26
+end
+
+def fun_l9_n506()
+ fun_l10_n286
+end
+
+def fun_l9_n507()
+ fun_l10_n118
+end
+
+def fun_l9_n508()
+ fun_l10_n509
+end
+
+def fun_l9_n509()
+ fun_l10_n630
+end
+
+def fun_l9_n510()
+ fun_l10_n302
+end
+
+def fun_l9_n511()
+ fun_l10_n307
+end
+
+def fun_l9_n512()
+ fun_l10_n810
+end
+
+def fun_l9_n513()
+ fun_l10_n21
+end
+
+def fun_l9_n514()
+ fun_l10_n76
+end
+
+def fun_l9_n515()
+ fun_l10_n769
+end
+
+def fun_l9_n516()
+ fun_l10_n58
+end
+
+def fun_l9_n517()
+ fun_l10_n368
+end
+
+def fun_l9_n518()
+ fun_l10_n8
+end
+
+def fun_l9_n519()
+ fun_l10_n559
+end
+
+def fun_l9_n520()
+ fun_l10_n949
+end
+
+def fun_l9_n521()
+ fun_l10_n781
+end
+
+def fun_l9_n522()
+ fun_l10_n453
+end
+
+def fun_l9_n523()
+ fun_l10_n227
+end
+
+def fun_l9_n524()
+ fun_l10_n389
+end
+
+def fun_l9_n525()
+ fun_l10_n641
+end
+
+def fun_l9_n526()
+ fun_l10_n221
+end
+
+def fun_l9_n527()
+ fun_l10_n322
+end
+
+def fun_l9_n528()
+ fun_l10_n918
+end
+
+def fun_l9_n529()
+ fun_l10_n246
+end
+
+def fun_l9_n530()
+ fun_l10_n431
+end
+
+def fun_l9_n531()
+ fun_l10_n445
+end
+
+def fun_l9_n532()
+ fun_l10_n781
+end
+
+def fun_l9_n533()
+ fun_l10_n626
+end
+
+def fun_l9_n534()
+ fun_l10_n51
+end
+
+def fun_l9_n535()
+ fun_l10_n441
+end
+
+def fun_l9_n536()
+ fun_l10_n806
+end
+
+def fun_l9_n537()
+ fun_l10_n58
+end
+
+def fun_l9_n538()
+ fun_l10_n710
+end
+
+def fun_l9_n539()
+ fun_l10_n782
+end
+
+def fun_l9_n540()
+ fun_l10_n991
+end
+
+def fun_l9_n541()
+ fun_l10_n792
+end
+
+def fun_l9_n542()
+ fun_l10_n376
+end
+
+def fun_l9_n543()
+ fun_l10_n716
+end
+
+def fun_l9_n544()
+ fun_l10_n500
+end
+
+def fun_l9_n545()
+ fun_l10_n251
+end
+
+def fun_l9_n546()
+ fun_l10_n951
+end
+
+def fun_l9_n547()
+ fun_l10_n584
+end
+
+def fun_l9_n548()
+ fun_l10_n150
+end
+
+def fun_l9_n549()
+ fun_l10_n380
+end
+
+def fun_l9_n550()
+ fun_l10_n432
+end
+
+def fun_l9_n551()
+ fun_l10_n787
+end
+
+def fun_l9_n552()
+ fun_l10_n749
+end
+
+def fun_l9_n553()
+ fun_l10_n646
+end
+
+def fun_l9_n554()
+ fun_l10_n405
+end
+
+def fun_l9_n555()
+ fun_l10_n345
+end
+
+def fun_l9_n556()
+ fun_l10_n855
+end
+
+def fun_l9_n557()
+ fun_l10_n575
+end
+
+def fun_l9_n558()
+ fun_l10_n368
+end
+
+def fun_l9_n559()
+ fun_l10_n511
+end
+
+def fun_l9_n560()
+ fun_l10_n158
+end
+
+def fun_l9_n561()
+ fun_l10_n243
+end
+
+def fun_l9_n562()
+ fun_l10_n536
+end
+
+def fun_l9_n563()
+ fun_l10_n107
+end
+
+def fun_l9_n564()
+ fun_l10_n270
+end
+
+def fun_l9_n565()
+ fun_l10_n783
+end
+
+def fun_l9_n566()
+ fun_l10_n289
+end
+
+def fun_l9_n567()
+ fun_l10_n360
+end
+
+def fun_l9_n568()
+ fun_l10_n190
+end
+
+def fun_l9_n569()
+ fun_l10_n245
+end
+
+def fun_l9_n570()
+ fun_l10_n565
+end
+
+def fun_l9_n571()
+ fun_l10_n310
+end
+
+def fun_l9_n572()
+ fun_l10_n939
+end
+
+def fun_l9_n573()
+ fun_l10_n955
+end
+
+def fun_l9_n574()
+ fun_l10_n521
+end
+
+def fun_l9_n575()
+ fun_l10_n597
+end
+
+def fun_l9_n576()
+ fun_l10_n122
+end
+
+def fun_l9_n577()
+ fun_l10_n987
+end
+
+def fun_l9_n578()
+ fun_l10_n267
+end
+
+def fun_l9_n579()
+ fun_l10_n798
+end
+
+def fun_l9_n580()
+ fun_l10_n468
+end
+
+def fun_l9_n581()
+ fun_l10_n807
+end
+
+def fun_l9_n582()
+ fun_l10_n749
+end
+
+def fun_l9_n583()
+ fun_l10_n578
+end
+
+def fun_l9_n584()
+ fun_l10_n878
+end
+
+def fun_l9_n585()
+ fun_l10_n404
+end
+
+def fun_l9_n586()
+ fun_l10_n501
+end
+
+def fun_l9_n587()
+ fun_l10_n165
+end
+
+def fun_l9_n588()
+ fun_l10_n270
+end
+
+def fun_l9_n589()
+ fun_l10_n197
+end
+
+def fun_l9_n590()
+ fun_l10_n940
+end
+
+def fun_l9_n591()
+ fun_l10_n667
+end
+
+def fun_l9_n592()
+ fun_l10_n67
+end
+
+def fun_l9_n593()
+ fun_l10_n652
+end
+
+def fun_l9_n594()
+ fun_l10_n728
+end
+
+def fun_l9_n595()
+ fun_l10_n829
+end
+
+def fun_l9_n596()
+ fun_l10_n528
+end
+
+def fun_l9_n597()
+ fun_l10_n765
+end
+
+def fun_l9_n598()
+ fun_l10_n841
+end
+
+def fun_l9_n599()
+ fun_l10_n605
+end
+
+def fun_l9_n600()
+ fun_l10_n316
+end
+
+def fun_l9_n601()
+ fun_l10_n676
+end
+
+def fun_l9_n602()
+ fun_l10_n673
+end
+
+def fun_l9_n603()
+ fun_l10_n400
+end
+
+def fun_l9_n604()
+ fun_l10_n774
+end
+
+def fun_l9_n605()
+ fun_l10_n717
+end
+
+def fun_l9_n606()
+ fun_l10_n853
+end
+
+def fun_l9_n607()
+ fun_l10_n336
+end
+
+def fun_l9_n608()
+ fun_l10_n169
+end
+
+def fun_l9_n609()
+ fun_l10_n7
+end
+
+def fun_l9_n610()
+ fun_l10_n846
+end
+
+def fun_l9_n611()
+ fun_l10_n87
+end
+
+def fun_l9_n612()
+ fun_l10_n805
+end
+
+def fun_l9_n613()
+ fun_l10_n591
+end
+
+def fun_l9_n614()
+ fun_l10_n674
+end
+
+def fun_l9_n615()
+ fun_l10_n796
+end
+
+def fun_l9_n616()
+ fun_l10_n390
+end
+
+def fun_l9_n617()
+ fun_l10_n107
+end
+
+def fun_l9_n618()
+ fun_l10_n302
+end
+
+def fun_l9_n619()
+ fun_l10_n848
+end
+
+def fun_l9_n620()
+ fun_l10_n263
+end
+
+def fun_l9_n621()
+ fun_l10_n380
+end
+
+def fun_l9_n622()
+ fun_l10_n778
+end
+
+def fun_l9_n623()
+ fun_l10_n593
+end
+
+def fun_l9_n624()
+ fun_l10_n147
+end
+
+def fun_l9_n625()
+ fun_l10_n683
+end
+
+def fun_l9_n626()
+ fun_l10_n850
+end
+
+def fun_l9_n627()
+ fun_l10_n545
+end
+
+def fun_l9_n628()
+ fun_l10_n549
+end
+
+def fun_l9_n629()
+ fun_l10_n692
+end
+
+def fun_l9_n630()
+ fun_l10_n688
+end
+
+def fun_l9_n631()
+ fun_l10_n656
+end
+
+def fun_l9_n632()
+ fun_l10_n201
+end
+
+def fun_l9_n633()
+ fun_l10_n216
+end
+
+def fun_l9_n634()
+ fun_l10_n661
+end
+
+def fun_l9_n635()
+ fun_l10_n670
+end
+
+def fun_l9_n636()
+ fun_l10_n436
+end
+
+def fun_l9_n637()
+ fun_l10_n591
+end
+
+def fun_l9_n638()
+ fun_l10_n419
+end
+
+def fun_l9_n639()
+ fun_l10_n133
+end
+
+def fun_l9_n640()
+ fun_l10_n998
+end
+
+def fun_l9_n641()
+ fun_l10_n20
+end
+
+def fun_l9_n642()
+ fun_l10_n484
+end
+
+def fun_l9_n643()
+ fun_l10_n349
+end
+
+def fun_l9_n644()
+ fun_l10_n548
+end
+
+def fun_l9_n645()
+ fun_l10_n67
+end
+
+def fun_l9_n646()
+ fun_l10_n99
+end
+
+def fun_l9_n647()
+ fun_l10_n758
+end
+
+def fun_l9_n648()
+ fun_l10_n559
+end
+
+def fun_l9_n649()
+ fun_l10_n518
+end
+
+def fun_l9_n650()
+ fun_l10_n698
+end
+
+def fun_l9_n651()
+ fun_l10_n807
+end
+
+def fun_l9_n652()
+ fun_l10_n557
+end
+
+def fun_l9_n653()
+ fun_l10_n53
+end
+
+def fun_l9_n654()
+ fun_l10_n783
+end
+
+def fun_l9_n655()
+ fun_l10_n687
+end
+
+def fun_l9_n656()
+ fun_l10_n40
+end
+
+def fun_l9_n657()
+ fun_l10_n758
+end
+
+def fun_l9_n658()
+ fun_l10_n308
+end
+
+def fun_l9_n659()
+ fun_l10_n828
+end
+
+def fun_l9_n660()
+ fun_l10_n510
+end
+
+def fun_l9_n661()
+ fun_l10_n621
+end
+
+def fun_l9_n662()
+ fun_l10_n885
+end
+
+def fun_l9_n663()
+ fun_l10_n765
+end
+
+def fun_l9_n664()
+ fun_l10_n213
+end
+
+def fun_l9_n665()
+ fun_l10_n530
+end
+
+def fun_l9_n666()
+ fun_l10_n178
+end
+
+def fun_l9_n667()
+ fun_l10_n550
+end
+
+def fun_l9_n668()
+ fun_l10_n650
+end
+
+def fun_l9_n669()
+ fun_l10_n695
+end
+
+def fun_l9_n670()
+ fun_l10_n295
+end
+
+def fun_l9_n671()
+ fun_l10_n672
+end
+
+def fun_l9_n672()
+ fun_l10_n603
+end
+
+def fun_l9_n673()
+ fun_l10_n394
+end
+
+def fun_l9_n674()
+ fun_l10_n470
+end
+
+def fun_l9_n675()
+ fun_l10_n869
+end
+
+def fun_l9_n676()
+ fun_l10_n270
+end
+
+def fun_l9_n677()
+ fun_l10_n933
+end
+
+def fun_l9_n678()
+ fun_l10_n268
+end
+
+def fun_l9_n679()
+ fun_l10_n862
+end
+
+def fun_l9_n680()
+ fun_l10_n84
+end
+
+def fun_l9_n681()
+ fun_l10_n370
+end
+
+def fun_l9_n682()
+ fun_l10_n538
+end
+
+def fun_l9_n683()
+ fun_l10_n752
+end
+
+def fun_l9_n684()
+ fun_l10_n868
+end
+
+def fun_l9_n685()
+ fun_l10_n278
+end
+
+def fun_l9_n686()
+ fun_l10_n65
+end
+
+def fun_l9_n687()
+ fun_l10_n713
+end
+
+def fun_l9_n688()
+ fun_l10_n577
+end
+
+def fun_l9_n689()
+ fun_l10_n508
+end
+
+def fun_l9_n690()
+ fun_l10_n400
+end
+
+def fun_l9_n691()
+ fun_l10_n830
+end
+
+def fun_l9_n692()
+ fun_l10_n366
+end
+
+def fun_l9_n693()
+ fun_l10_n545
+end
+
+def fun_l9_n694()
+ fun_l10_n479
+end
+
+def fun_l9_n695()
+ fun_l10_n978
+end
+
+def fun_l9_n696()
+ fun_l10_n935
+end
+
+def fun_l9_n697()
+ fun_l10_n235
+end
+
+def fun_l9_n698()
+ fun_l10_n196
+end
+
+def fun_l9_n699()
+ fun_l10_n508
+end
+
+def fun_l9_n700()
+ fun_l10_n879
+end
+
+def fun_l9_n701()
+ fun_l10_n81
+end
+
+def fun_l9_n702()
+ fun_l10_n676
+end
+
+def fun_l9_n703()
+ fun_l10_n276
+end
+
+def fun_l9_n704()
+ fun_l10_n565
+end
+
+def fun_l9_n705()
+ fun_l10_n98
+end
+
+def fun_l9_n706()
+ fun_l10_n66
+end
+
+def fun_l9_n707()
+ fun_l10_n894
+end
+
+def fun_l9_n708()
+ fun_l10_n258
+end
+
+def fun_l9_n709()
+ fun_l10_n465
+end
+
+def fun_l9_n710()
+ fun_l10_n677
+end
+
+def fun_l9_n711()
+ fun_l10_n644
+end
+
+def fun_l9_n712()
+ fun_l10_n729
+end
+
+def fun_l9_n713()
+ fun_l10_n222
+end
+
+def fun_l9_n714()
+ fun_l10_n186
+end
+
+def fun_l9_n715()
+ fun_l10_n387
+end
+
+def fun_l9_n716()
+ fun_l10_n933
+end
+
+def fun_l9_n717()
+ fun_l10_n280
+end
+
+def fun_l9_n718()
+ fun_l10_n939
+end
+
+def fun_l9_n719()
+ fun_l10_n993
+end
+
+def fun_l9_n720()
+ fun_l10_n529
+end
+
+def fun_l9_n721()
+ fun_l10_n189
+end
+
+def fun_l9_n722()
+ fun_l10_n544
+end
+
+def fun_l9_n723()
+ fun_l10_n655
+end
+
+def fun_l9_n724()
+ fun_l10_n88
+end
+
+def fun_l9_n725()
+ fun_l10_n448
+end
+
+def fun_l9_n726()
+ fun_l10_n656
+end
+
+def fun_l9_n727()
+ fun_l10_n106
+end
+
+def fun_l9_n728()
+ fun_l10_n711
+end
+
+def fun_l9_n729()
+ fun_l10_n400
+end
+
+def fun_l9_n730()
+ fun_l10_n138
+end
+
+def fun_l9_n731()
+ fun_l10_n90
+end
+
+def fun_l9_n732()
+ fun_l10_n290
+end
+
+def fun_l9_n733()
+ fun_l10_n563
+end
+
+def fun_l9_n734()
+ fun_l10_n103
+end
+
+def fun_l9_n735()
+ fun_l10_n115
+end
+
+def fun_l9_n736()
+ fun_l10_n771
+end
+
+def fun_l9_n737()
+ fun_l10_n291
+end
+
+def fun_l9_n738()
+ fun_l10_n46
+end
+
+def fun_l9_n739()
+ fun_l10_n872
+end
+
+def fun_l9_n740()
+ fun_l10_n871
+end
+
+def fun_l9_n741()
+ fun_l10_n190
+end
+
+def fun_l9_n742()
+ fun_l10_n641
+end
+
+def fun_l9_n743()
+ fun_l10_n951
+end
+
+def fun_l9_n744()
+ fun_l10_n248
+end
+
+def fun_l9_n745()
+ fun_l10_n275
+end
+
+def fun_l9_n746()
+ fun_l10_n943
+end
+
+def fun_l9_n747()
+ fun_l10_n995
+end
+
+def fun_l9_n748()
+ fun_l10_n194
+end
+
+def fun_l9_n749()
+ fun_l10_n121
+end
+
+def fun_l9_n750()
+ fun_l10_n707
+end
+
+def fun_l9_n751()
+ fun_l10_n591
+end
+
+def fun_l9_n752()
+ fun_l10_n616
+end
+
+def fun_l9_n753()
+ fun_l10_n155
+end
+
+def fun_l9_n754()
+ fun_l10_n779
+end
+
+def fun_l9_n755()
+ fun_l10_n449
+end
+
+def fun_l9_n756()
+ fun_l10_n937
+end
+
+def fun_l9_n757()
+ fun_l10_n571
+end
+
+def fun_l9_n758()
+ fun_l10_n892
+end
+
+def fun_l9_n759()
+ fun_l10_n441
+end
+
+def fun_l9_n760()
+ fun_l10_n686
+end
+
+def fun_l9_n761()
+ fun_l10_n55
+end
+
+def fun_l9_n762()
+ fun_l10_n852
+end
+
+def fun_l9_n763()
+ fun_l10_n102
+end
+
+def fun_l9_n764()
+ fun_l10_n207
+end
+
+def fun_l9_n765()
+ fun_l10_n269
+end
+
+def fun_l9_n766()
+ fun_l10_n422
+end
+
+def fun_l9_n767()
+ fun_l10_n589
+end
+
+def fun_l9_n768()
+ fun_l10_n406
+end
+
+def fun_l9_n769()
+ fun_l10_n88
+end
+
+def fun_l9_n770()
+ fun_l10_n441
+end
+
+def fun_l9_n771()
+ fun_l10_n506
+end
+
+def fun_l9_n772()
+ fun_l10_n797
+end
+
+def fun_l9_n773()
+ fun_l10_n639
+end
+
+def fun_l9_n774()
+ fun_l10_n390
+end
+
+def fun_l9_n775()
+ fun_l10_n511
+end
+
+def fun_l9_n776()
+ fun_l10_n353
+end
+
+def fun_l9_n777()
+ fun_l10_n137
+end
+
+def fun_l9_n778()
+ fun_l10_n692
+end
+
+def fun_l9_n779()
+ fun_l10_n522
+end
+
+def fun_l9_n780()
+ fun_l10_n532
+end
+
+def fun_l9_n781()
+ fun_l10_n4
+end
+
+def fun_l9_n782()
+ fun_l10_n548
+end
+
+def fun_l9_n783()
+ fun_l10_n386
+end
+
+def fun_l9_n784()
+ fun_l10_n932
+end
+
+def fun_l9_n785()
+ fun_l10_n552
+end
+
+def fun_l9_n786()
+ fun_l10_n215
+end
+
+def fun_l9_n787()
+ fun_l10_n981
+end
+
+def fun_l9_n788()
+ fun_l10_n379
+end
+
+def fun_l9_n789()
+ fun_l10_n208
+end
+
+def fun_l9_n790()
+ fun_l10_n252
+end
+
+def fun_l9_n791()
+ fun_l10_n471
+end
+
+def fun_l9_n792()
+ fun_l10_n300
+end
+
+def fun_l9_n793()
+ fun_l10_n877
+end
+
+def fun_l9_n794()
+ fun_l10_n92
+end
+
+def fun_l9_n795()
+ fun_l10_n75
+end
+
+def fun_l9_n796()
+ fun_l10_n837
+end
+
+def fun_l9_n797()
+ fun_l10_n328
+end
+
+def fun_l9_n798()
+ fun_l10_n454
+end
+
+def fun_l9_n799()
+ fun_l10_n392
+end
+
+def fun_l9_n800()
+ fun_l10_n115
+end
+
+def fun_l9_n801()
+ fun_l10_n966
+end
+
+def fun_l9_n802()
+ fun_l10_n565
+end
+
+def fun_l9_n803()
+ fun_l10_n268
+end
+
+def fun_l9_n804()
+ fun_l10_n13
+end
+
+def fun_l9_n805()
+ fun_l10_n484
+end
+
+def fun_l9_n806()
+ fun_l10_n893
+end
+
+def fun_l9_n807()
+ fun_l10_n59
+end
+
+def fun_l9_n808()
+ fun_l10_n87
+end
+
+def fun_l9_n809()
+ fun_l10_n455
+end
+
+def fun_l9_n810()
+ fun_l10_n972
+end
+
+def fun_l9_n811()
+ fun_l10_n804
+end
+
+def fun_l9_n812()
+ fun_l10_n20
+end
+
+def fun_l9_n813()
+ fun_l10_n148
+end
+
+def fun_l9_n814()
+ fun_l10_n284
+end
+
+def fun_l9_n815()
+ fun_l10_n704
+end
+
+def fun_l9_n816()
+ fun_l10_n346
+end
+
+def fun_l9_n817()
+ fun_l10_n101
+end
+
+def fun_l9_n818()
+ fun_l10_n543
+end
+
+def fun_l9_n819()
+ fun_l10_n207
+end
+
+def fun_l9_n820()
+ fun_l10_n256
+end
+
+def fun_l9_n821()
+ fun_l10_n300
+end
+
+def fun_l9_n822()
+ fun_l10_n69
+end
+
+def fun_l9_n823()
+ fun_l10_n139
+end
+
+def fun_l9_n824()
+ fun_l10_n566
+end
+
+def fun_l9_n825()
+ fun_l10_n277
+end
+
+def fun_l9_n826()
+ fun_l10_n75
+end
+
+def fun_l9_n827()
+ fun_l10_n585
+end
+
+def fun_l9_n828()
+ fun_l10_n2
+end
+
+def fun_l9_n829()
+ fun_l10_n959
+end
+
+def fun_l9_n830()
+ fun_l10_n982
+end
+
+def fun_l9_n831()
+ fun_l10_n621
+end
+
+def fun_l9_n832()
+ fun_l10_n680
+end
+
+def fun_l9_n833()
+ fun_l10_n535
+end
+
+def fun_l9_n834()
+ fun_l10_n732
+end
+
+def fun_l9_n835()
+ fun_l10_n282
+end
+
+def fun_l9_n836()
+ fun_l10_n825
+end
+
+def fun_l9_n837()
+ fun_l10_n323
+end
+
+def fun_l9_n838()
+ fun_l10_n963
+end
+
+def fun_l9_n839()
+ fun_l10_n138
+end
+
+def fun_l9_n840()
+ fun_l10_n370
+end
+
+def fun_l9_n841()
+ fun_l10_n44
+end
+
+def fun_l9_n842()
+ fun_l10_n694
+end
+
+def fun_l9_n843()
+ fun_l10_n532
+end
+
+def fun_l9_n844()
+ fun_l10_n987
+end
+
+def fun_l9_n845()
+ fun_l10_n730
+end
+
+def fun_l9_n846()
+ fun_l10_n376
+end
+
+def fun_l9_n847()
+ fun_l10_n33
+end
+
+def fun_l9_n848()
+ fun_l10_n381
+end
+
+def fun_l9_n849()
+ fun_l10_n569
+end
+
+def fun_l9_n850()
+ fun_l10_n264
+end
+
+def fun_l9_n851()
+ fun_l10_n260
+end
+
+def fun_l9_n852()
+ fun_l10_n750
+end
+
+def fun_l9_n853()
+ fun_l10_n710
+end
+
+def fun_l9_n854()
+ fun_l10_n665
+end
+
+def fun_l9_n855()
+ fun_l10_n544
+end
+
+def fun_l9_n856()
+ fun_l10_n306
+end
+
+def fun_l9_n857()
+ fun_l10_n303
+end
+
+def fun_l9_n858()
+ fun_l10_n754
+end
+
+def fun_l9_n859()
+ fun_l10_n552
+end
+
+def fun_l9_n860()
+ fun_l10_n404
+end
+
+def fun_l9_n861()
+ fun_l10_n123
+end
+
+def fun_l9_n862()
+ fun_l10_n240
+end
+
+def fun_l9_n863()
+ fun_l10_n213
+end
+
+def fun_l9_n864()
+ fun_l10_n697
+end
+
+def fun_l9_n865()
+ fun_l10_n185
+end
+
+def fun_l9_n866()
+ fun_l10_n245
+end
+
+def fun_l9_n867()
+ fun_l10_n889
+end
+
+def fun_l9_n868()
+ fun_l10_n64
+end
+
+def fun_l9_n869()
+ fun_l10_n685
+end
+
+def fun_l9_n870()
+ fun_l10_n653
+end
+
+def fun_l9_n871()
+ fun_l10_n331
+end
+
+def fun_l9_n872()
+ fun_l10_n548
+end
+
+def fun_l9_n873()
+ fun_l10_n120
+end
+
+def fun_l9_n874()
+ fun_l10_n511
+end
+
+def fun_l9_n875()
+ fun_l10_n280
+end
+
+def fun_l9_n876()
+ fun_l10_n250
+end
+
+def fun_l9_n877()
+ fun_l10_n871
+end
+
+def fun_l9_n878()
+ fun_l10_n356
+end
+
+def fun_l9_n879()
+ fun_l10_n985
+end
+
+def fun_l9_n880()
+ fun_l10_n285
+end
+
+def fun_l9_n881()
+ fun_l10_n836
+end
+
+def fun_l9_n882()
+ fun_l10_n906
+end
+
+def fun_l9_n883()
+ fun_l10_n497
+end
+
+def fun_l9_n884()
+ fun_l10_n320
+end
+
+def fun_l9_n885()
+ fun_l10_n932
+end
+
+def fun_l9_n886()
+ fun_l10_n470
+end
+
+def fun_l9_n887()
+ fun_l10_n453
+end
+
+def fun_l9_n888()
+ fun_l10_n208
+end
+
+def fun_l9_n889()
+ fun_l10_n80
+end
+
+def fun_l9_n890()
+ fun_l10_n943
+end
+
+def fun_l9_n891()
+ fun_l10_n711
+end
+
+def fun_l9_n892()
+ fun_l10_n548
+end
+
+def fun_l9_n893()
+ fun_l10_n160
+end
+
+def fun_l9_n894()
+ fun_l10_n44
+end
+
+def fun_l9_n895()
+ fun_l10_n241
+end
+
+def fun_l9_n896()
+ fun_l10_n390
+end
+
+def fun_l9_n897()
+ fun_l10_n133
+end
+
+def fun_l9_n898()
+ fun_l10_n3
+end
+
+def fun_l9_n899()
+ fun_l10_n651
+end
+
+def fun_l9_n900()
+ fun_l10_n556
+end
+
+def fun_l9_n901()
+ fun_l10_n423
+end
+
+def fun_l9_n902()
+ fun_l10_n521
+end
+
+def fun_l9_n903()
+ fun_l10_n589
+end
+
+def fun_l9_n904()
+ fun_l10_n284
+end
+
+def fun_l9_n905()
+ fun_l10_n816
+end
+
+def fun_l9_n906()
+ fun_l10_n326
+end
+
+def fun_l9_n907()
+ fun_l10_n309
+end
+
+def fun_l9_n908()
+ fun_l10_n656
+end
+
+def fun_l9_n909()
+ fun_l10_n636
+end
+
+def fun_l9_n910()
+ fun_l10_n633
+end
+
+def fun_l9_n911()
+ fun_l10_n955
+end
+
+def fun_l9_n912()
+ fun_l10_n807
+end
+
+def fun_l9_n913()
+ fun_l10_n547
+end
+
+def fun_l9_n914()
+ fun_l10_n300
+end
+
+def fun_l9_n915()
+ fun_l10_n98
+end
+
+def fun_l9_n916()
+ fun_l10_n848
+end
+
+def fun_l9_n917()
+ fun_l10_n702
+end
+
+def fun_l9_n918()
+ fun_l10_n102
+end
+
+def fun_l9_n919()
+ fun_l10_n184
+end
+
+def fun_l9_n920()
+ fun_l10_n91
+end
+
+def fun_l9_n921()
+ fun_l10_n744
+end
+
+def fun_l9_n922()
+ fun_l10_n923
+end
+
+def fun_l9_n923()
+ fun_l10_n710
+end
+
+def fun_l9_n924()
+ fun_l10_n137
+end
+
+def fun_l9_n925()
+ fun_l10_n381
+end
+
+def fun_l9_n926()
+ fun_l10_n795
+end
+
+def fun_l9_n927()
+ fun_l10_n255
+end
+
+def fun_l9_n928()
+ fun_l10_n191
+end
+
+def fun_l9_n929()
+ fun_l10_n650
+end
+
+def fun_l9_n930()
+ fun_l10_n928
+end
+
+def fun_l9_n931()
+ fun_l10_n277
+end
+
+def fun_l9_n932()
+ fun_l10_n269
+end
+
+def fun_l9_n933()
+ fun_l10_n221
+end
+
+def fun_l9_n934()
+ fun_l10_n2
+end
+
+def fun_l9_n935()
+ fun_l10_n359
+end
+
+def fun_l9_n936()
+ fun_l10_n403
+end
+
+def fun_l9_n937()
+ fun_l10_n376
+end
+
+def fun_l9_n938()
+ fun_l10_n309
+end
+
+def fun_l9_n939()
+ fun_l10_n245
+end
+
+def fun_l9_n940()
+ fun_l10_n973
+end
+
+def fun_l9_n941()
+ fun_l10_n835
+end
+
+def fun_l9_n942()
+ fun_l10_n884
+end
+
+def fun_l9_n943()
+ fun_l10_n700
+end
+
+def fun_l9_n944()
+ fun_l10_n809
+end
+
+def fun_l9_n945()
+ fun_l10_n864
+end
+
+def fun_l9_n946()
+ fun_l10_n577
+end
+
+def fun_l9_n947()
+ fun_l10_n487
+end
+
+def fun_l9_n948()
+ fun_l10_n205
+end
+
+def fun_l9_n949()
+ fun_l10_n980
+end
+
+def fun_l9_n950()
+ fun_l10_n855
+end
+
+def fun_l9_n951()
+ fun_l10_n100
+end
+
+def fun_l9_n952()
+ fun_l10_n514
+end
+
+def fun_l9_n953()
+ fun_l10_n385
+end
+
+def fun_l9_n954()
+ fun_l10_n676
+end
+
+def fun_l9_n955()
+ fun_l10_n808
+end
+
+def fun_l9_n956()
+ fun_l10_n111
+end
+
+def fun_l9_n957()
+ fun_l10_n571
+end
+
+def fun_l9_n958()
+ fun_l10_n895
+end
+
+def fun_l9_n959()
+ fun_l10_n858
+end
+
+def fun_l9_n960()
+ fun_l10_n74
+end
+
+def fun_l9_n961()
+ fun_l10_n952
+end
+
+def fun_l9_n962()
+ fun_l10_n164
+end
+
+def fun_l9_n963()
+ fun_l10_n149
+end
+
+def fun_l9_n964()
+ fun_l10_n705
+end
+
+def fun_l9_n965()
+ fun_l10_n406
+end
+
+def fun_l9_n966()
+ fun_l10_n569
+end
+
+def fun_l9_n967()
+ fun_l10_n57
+end
+
+def fun_l9_n968()
+ fun_l10_n402
+end
+
+def fun_l9_n969()
+ fun_l10_n988
+end
+
+def fun_l9_n970()
+ fun_l10_n114
+end
+
+def fun_l9_n971()
+ fun_l10_n456
+end
+
+def fun_l9_n972()
+ fun_l10_n346
+end
+
+def fun_l9_n973()
+ fun_l10_n250
+end
+
+def fun_l9_n974()
+ fun_l10_n684
+end
+
+def fun_l9_n975()
+ fun_l10_n445
+end
+
+def fun_l9_n976()
+ fun_l10_n628
+end
+
+def fun_l9_n977()
+ fun_l10_n536
+end
+
+def fun_l9_n978()
+ fun_l10_n937
+end
+
+def fun_l9_n979()
+ fun_l10_n320
+end
+
+def fun_l9_n980()
+ fun_l10_n412
+end
+
+def fun_l9_n981()
+ fun_l10_n280
+end
+
+def fun_l9_n982()
+ fun_l10_n435
+end
+
+def fun_l9_n983()
+ fun_l10_n643
+end
+
+def fun_l9_n984()
+ fun_l10_n702
+end
+
+def fun_l9_n985()
+ fun_l10_n919
+end
+
+def fun_l9_n986()
+ fun_l10_n127
+end
+
+def fun_l9_n987()
+ fun_l10_n770
+end
+
+def fun_l9_n988()
+ fun_l10_n673
+end
+
+def fun_l9_n989()
+ fun_l10_n625
+end
+
+def fun_l9_n990()
+ fun_l10_n196
+end
+
+def fun_l9_n991()
+ fun_l10_n676
+end
+
+def fun_l9_n992()
+ fun_l10_n634
+end
+
+def fun_l9_n993()
+ fun_l10_n694
+end
+
+def fun_l9_n994()
+ fun_l10_n46
+end
+
+def fun_l9_n995()
+ fun_l10_n762
+end
+
+def fun_l9_n996()
+ fun_l10_n163
+end
+
+def fun_l9_n997()
+ fun_l10_n24
+end
+
+def fun_l9_n998()
+ fun_l10_n279
+end
+
+def fun_l9_n999()
+ fun_l10_n110
+end
+
+def fun_l10_n0()
+ fun_l11_n375
+end
+
+def fun_l10_n1()
+ fun_l11_n360
+end
+
+def fun_l10_n2()
+ fun_l11_n220
+end
+
+def fun_l10_n3()
+ fun_l11_n847
+end
+
+def fun_l10_n4()
+ fun_l11_n431
+end
+
+def fun_l10_n5()
+ fun_l11_n609
+end
+
+def fun_l10_n6()
+ fun_l11_n584
+end
+
+def fun_l10_n7()
+ fun_l11_n41
+end
+
+def fun_l10_n8()
+ fun_l11_n259
+end
+
+def fun_l10_n9()
+ fun_l11_n885
+end
+
+def fun_l10_n10()
+ fun_l11_n353
+end
+
+def fun_l10_n11()
+ fun_l11_n675
+end
+
+def fun_l10_n12()
+ fun_l11_n208
+end
+
+def fun_l10_n13()
+ fun_l11_n66
+end
+
+def fun_l10_n14()
+ fun_l11_n420
+end
+
+def fun_l10_n15()
+ fun_l11_n987
+end
+
+def fun_l10_n16()
+ fun_l11_n703
+end
+
+def fun_l10_n17()
+ fun_l11_n755
+end
+
+def fun_l10_n18()
+ fun_l11_n996
+end
+
+def fun_l10_n19()
+ fun_l11_n189
+end
+
+def fun_l10_n20()
+ fun_l11_n950
+end
+
+def fun_l10_n21()
+ fun_l11_n602
+end
+
+def fun_l10_n22()
+ fun_l11_n971
+end
+
+def fun_l10_n23()
+ fun_l11_n797
+end
+
+def fun_l10_n24()
+ fun_l11_n950
+end
+
+def fun_l10_n25()
+ fun_l11_n606
+end
+
+def fun_l10_n26()
+ fun_l11_n201
+end
+
+def fun_l10_n27()
+ fun_l11_n844
+end
+
+def fun_l10_n28()
+ fun_l11_n546
+end
+
+def fun_l10_n29()
+ fun_l11_n448
+end
+
+def fun_l10_n30()
+ fun_l11_n717
+end
+
+def fun_l10_n31()
+ fun_l11_n236
+end
+
+def fun_l10_n32()
+ fun_l11_n49
+end
+
+def fun_l10_n33()
+ fun_l11_n930
+end
+
+def fun_l10_n34()
+ fun_l11_n818
+end
+
+def fun_l10_n35()
+ fun_l11_n795
+end
+
+def fun_l10_n36()
+ fun_l11_n933
+end
+
+def fun_l10_n37()
+ fun_l11_n198
+end
+
+def fun_l10_n38()
+ fun_l11_n666
+end
+
+def fun_l10_n39()
+ fun_l11_n998
+end
+
+def fun_l10_n40()
+ fun_l11_n570
+end
+
+def fun_l10_n41()
+ fun_l11_n759
+end
+
+def fun_l10_n42()
+ fun_l11_n306
+end
+
+def fun_l10_n43()
+ fun_l11_n735
+end
+
+def fun_l10_n44()
+ fun_l11_n730
+end
+
+def fun_l10_n45()
+ fun_l11_n429
+end
+
+def fun_l10_n46()
+ fun_l11_n239
+end
+
+def fun_l10_n47()
+ fun_l11_n877
+end
+
+def fun_l10_n48()
+ fun_l11_n615
+end
+
+def fun_l10_n49()
+ fun_l11_n462
+end
+
+def fun_l10_n50()
+ fun_l11_n187
+end
+
+def fun_l10_n51()
+ fun_l11_n584
+end
+
+def fun_l10_n52()
+ fun_l11_n565
+end
+
+def fun_l10_n53()
+ fun_l11_n53
+end
+
+def fun_l10_n54()
+ fun_l11_n69
+end
+
+def fun_l10_n55()
+ fun_l11_n594
+end
+
+def fun_l10_n56()
+ fun_l11_n307
+end
+
+def fun_l10_n57()
+ fun_l11_n913
+end
+
+def fun_l10_n58()
+ fun_l11_n814
+end
+
+def fun_l10_n59()
+ fun_l11_n764
+end
+
+def fun_l10_n60()
+ fun_l11_n367
+end
+
+def fun_l10_n61()
+ fun_l11_n335
+end
+
+def fun_l10_n62()
+ fun_l11_n166
+end
+
+def fun_l10_n63()
+ fun_l11_n348
+end
+
+def fun_l10_n64()
+ fun_l11_n175
+end
+
+def fun_l10_n65()
+ fun_l11_n685
+end
+
+def fun_l10_n66()
+ fun_l11_n804
+end
+
+def fun_l10_n67()
+ fun_l11_n857
+end
+
+def fun_l10_n68()
+ fun_l11_n361
+end
+
+def fun_l10_n69()
+ fun_l11_n744
+end
+
+def fun_l10_n70()
+ fun_l11_n902
+end
+
+def fun_l10_n71()
+ fun_l11_n142
+end
+
+def fun_l10_n72()
+ fun_l11_n129
+end
+
+def fun_l10_n73()
+ fun_l11_n597
+end
+
+def fun_l10_n74()
+ fun_l11_n416
+end
+
+def fun_l10_n75()
+ fun_l11_n983
+end
+
+def fun_l10_n76()
+ fun_l11_n504
+end
+
+def fun_l10_n77()
+ fun_l11_n887
+end
+
+def fun_l10_n78()
+ fun_l11_n114
+end
+
+def fun_l10_n79()
+ fun_l11_n292
+end
+
+def fun_l10_n80()
+ fun_l11_n635
+end
+
+def fun_l10_n81()
+ fun_l11_n910
+end
+
+def fun_l10_n82()
+ fun_l11_n82
+end
+
+def fun_l10_n83()
+ fun_l11_n149
+end
+
+def fun_l10_n84()
+ fun_l11_n240
+end
+
+def fun_l10_n85()
+ fun_l11_n349
+end
+
+def fun_l10_n86()
+ fun_l11_n873
+end
+
+def fun_l10_n87()
+ fun_l11_n269
+end
+
+def fun_l10_n88()
+ fun_l11_n81
+end
+
+def fun_l10_n89()
+ fun_l11_n735
+end
+
+def fun_l10_n90()
+ fun_l11_n21
+end
+
+def fun_l10_n91()
+ fun_l11_n491
+end
+
+def fun_l10_n92()
+ fun_l11_n808
+end
+
+def fun_l10_n93()
+ fun_l11_n628
+end
+
+def fun_l10_n94()
+ fun_l11_n456
+end
+
+def fun_l10_n95()
+ fun_l11_n982
+end
+
+def fun_l10_n96()
+ fun_l11_n440
+end
+
+def fun_l10_n97()
+ fun_l11_n406
+end
+
+def fun_l10_n98()
+ fun_l11_n920
+end
+
+def fun_l10_n99()
+ fun_l11_n155
+end
+
+def fun_l10_n100()
+ fun_l11_n673
+end
+
+def fun_l10_n101()
+ fun_l11_n902
+end
+
+def fun_l10_n102()
+ fun_l11_n321
+end
+
+def fun_l10_n103()
+ fun_l11_n723
+end
+
+def fun_l10_n104()
+ fun_l11_n914
+end
+
+def fun_l10_n105()
+ fun_l11_n305
+end
+
+def fun_l10_n106()
+ fun_l11_n16
+end
+
+def fun_l10_n107()
+ fun_l11_n342
+end
+
+def fun_l10_n108()
+ fun_l11_n808
+end
+
+def fun_l10_n109()
+ fun_l11_n593
+end
+
+def fun_l10_n110()
+ fun_l11_n912
+end
+
+def fun_l10_n111()
+ fun_l11_n373
+end
+
+def fun_l10_n112()
+ fun_l11_n491
+end
+
+def fun_l10_n113()
+ fun_l11_n893
+end
+
+def fun_l10_n114()
+ fun_l11_n776
+end
+
+def fun_l10_n115()
+ fun_l11_n932
+end
+
+def fun_l10_n116()
+ fun_l11_n347
+end
+
+def fun_l10_n117()
+ fun_l11_n475
+end
+
+def fun_l10_n118()
+ fun_l11_n656
+end
+
+def fun_l10_n119()
+ fun_l11_n199
+end
+
+def fun_l10_n120()
+ fun_l11_n888
+end
+
+def fun_l10_n121()
+ fun_l11_n110
+end
+
+def fun_l10_n122()
+ fun_l11_n520
+end
+
+def fun_l10_n123()
+ fun_l11_n743
+end
+
+def fun_l10_n124()
+ fun_l11_n830
+end
+
+def fun_l10_n125()
+ fun_l11_n740
+end
+
+def fun_l10_n126()
+ fun_l11_n693
+end
+
+def fun_l10_n127()
+ fun_l11_n500
+end
+
+def fun_l10_n128()
+ fun_l11_n311
+end
+
+def fun_l10_n129()
+ fun_l11_n842
+end
+
+def fun_l10_n130()
+ fun_l11_n769
+end
+
+def fun_l10_n131()
+ fun_l11_n341
+end
+
+def fun_l10_n132()
+ fun_l11_n367
+end
+
+def fun_l10_n133()
+ fun_l11_n872
+end
+
+def fun_l10_n134()
+ fun_l11_n460
+end
+
+def fun_l10_n135()
+ fun_l11_n154
+end
+
+def fun_l10_n136()
+ fun_l11_n953
+end
+
+def fun_l10_n137()
+ fun_l11_n300
+end
+
+def fun_l10_n138()
+ fun_l11_n466
+end
+
+def fun_l10_n139()
+ fun_l11_n474
+end
+
+def fun_l10_n140()
+ fun_l11_n145
+end
+
+def fun_l10_n141()
+ fun_l11_n953
+end
+
+def fun_l10_n142()
+ fun_l11_n613
+end
+
+def fun_l10_n143()
+ fun_l11_n55
+end
+
+def fun_l10_n144()
+ fun_l11_n847
+end
+
+def fun_l10_n145()
+ fun_l11_n888
+end
+
+def fun_l10_n146()
+ fun_l11_n721
+end
+
+def fun_l10_n147()
+ fun_l11_n8
+end
+
+def fun_l10_n148()
+ fun_l11_n595
+end
+
+def fun_l10_n149()
+ fun_l11_n326
+end
+
+def fun_l10_n150()
+ fun_l11_n134
+end
+
+def fun_l10_n151()
+ fun_l11_n567
+end
+
+def fun_l10_n152()
+ fun_l11_n87
+end
+
+def fun_l10_n153()
+ fun_l11_n581
+end
+
+def fun_l10_n154()
+ fun_l11_n973
+end
+
+def fun_l10_n155()
+ fun_l11_n349
+end
+
+def fun_l10_n156()
+ fun_l11_n550
+end
+
+def fun_l10_n157()
+ fun_l11_n545
+end
+
+def fun_l10_n158()
+ fun_l11_n325
+end
+
+def fun_l10_n159()
+ fun_l11_n568
+end
+
+def fun_l10_n160()
+ fun_l11_n768
+end
+
+def fun_l10_n161()
+ fun_l11_n320
+end
+
+def fun_l10_n162()
+ fun_l11_n667
+end
+
+def fun_l10_n163()
+ fun_l11_n415
+end
+
+def fun_l10_n164()
+ fun_l11_n185
+end
+
+def fun_l10_n165()
+ fun_l11_n576
+end
+
+def fun_l10_n166()
+ fun_l11_n436
+end
+
+def fun_l10_n167()
+ fun_l11_n290
+end
+
+def fun_l10_n168()
+ fun_l11_n783
+end
+
+def fun_l10_n169()
+ fun_l11_n865
+end
+
+def fun_l10_n170()
+ fun_l11_n837
+end
+
+def fun_l10_n171()
+ fun_l11_n806
+end
+
+def fun_l10_n172()
+ fun_l11_n847
+end
+
+def fun_l10_n173()
+ fun_l11_n425
+end
+
+def fun_l10_n174()
+ fun_l11_n740
+end
+
+def fun_l10_n175()
+ fun_l11_n885
+end
+
+def fun_l10_n176()
+ fun_l11_n787
+end
+
+def fun_l10_n177()
+ fun_l11_n189
+end
+
+def fun_l10_n178()
+ fun_l11_n122
+end
+
+def fun_l10_n179()
+ fun_l11_n132
+end
+
+def fun_l10_n180()
+ fun_l11_n778
+end
+
+def fun_l10_n181()
+ fun_l11_n45
+end
+
+def fun_l10_n182()
+ fun_l11_n856
+end
+
+def fun_l10_n183()
+ fun_l11_n853
+end
+
+def fun_l10_n184()
+ fun_l11_n370
+end
+
+def fun_l10_n185()
+ fun_l11_n850
+end
+
+def fun_l10_n186()
+ fun_l11_n623
+end
+
+def fun_l10_n187()
+ fun_l11_n747
+end
+
+def fun_l10_n188()
+ fun_l11_n792
+end
+
+def fun_l10_n189()
+ fun_l11_n184
+end
+
+def fun_l10_n190()
+ fun_l11_n683
+end
+
+def fun_l10_n191()
+ fun_l11_n831
+end
+
+def fun_l10_n192()
+ fun_l11_n741
+end
+
+def fun_l10_n193()
+ fun_l11_n380
+end
+
+def fun_l10_n194()
+ fun_l11_n183
+end
+
+def fun_l10_n195()
+ fun_l11_n800
+end
+
+def fun_l10_n196()
+ fun_l11_n466
+end
+
+def fun_l10_n197()
+ fun_l11_n930
+end
+
+def fun_l10_n198()
+ fun_l11_n680
+end
+
+def fun_l10_n199()
+ fun_l11_n820
+end
+
+def fun_l10_n200()
+ fun_l11_n699
+end
+
+def fun_l10_n201()
+ fun_l11_n246
+end
+
+def fun_l10_n202()
+ fun_l11_n238
+end
+
+def fun_l10_n203()
+ fun_l11_n481
+end
+
+def fun_l10_n204()
+ fun_l11_n586
+end
+
+def fun_l10_n205()
+ fun_l11_n550
+end
+
+def fun_l10_n206()
+ fun_l11_n662
+end
+
+def fun_l10_n207()
+ fun_l11_n680
+end
+
+def fun_l10_n208()
+ fun_l11_n544
+end
+
+def fun_l10_n209()
+ fun_l11_n927
+end
+
+def fun_l10_n210()
+ fun_l11_n383
+end
+
+def fun_l10_n211()
+ fun_l11_n21
+end
+
+def fun_l10_n212()
+ fun_l11_n628
+end
+
+def fun_l10_n213()
+ fun_l11_n635
+end
+
+def fun_l10_n214()
+ fun_l11_n648
+end
+
+def fun_l10_n215()
+ fun_l11_n349
+end
+
+def fun_l10_n216()
+ fun_l11_n242
+end
+
+def fun_l10_n217()
+ fun_l11_n868
+end
+
+def fun_l10_n218()
+ fun_l11_n804
+end
+
+def fun_l10_n219()
+ fun_l11_n84
+end
+
+def fun_l10_n220()
+ fun_l11_n970
+end
+
+def fun_l10_n221()
+ fun_l11_n400
+end
+
+def fun_l10_n222()
+ fun_l11_n133
+end
+
+def fun_l10_n223()
+ fun_l11_n58
+end
+
+def fun_l10_n224()
+ fun_l11_n790
+end
+
+def fun_l10_n225()
+ fun_l11_n738
+end
+
+def fun_l10_n226()
+ fun_l11_n682
+end
+
+def fun_l10_n227()
+ fun_l11_n822
+end
+
+def fun_l10_n228()
+ fun_l11_n630
+end
+
+def fun_l10_n229()
+ fun_l11_n399
+end
+
+def fun_l10_n230()
+ fun_l11_n177
+end
+
+def fun_l10_n231()
+ fun_l11_n531
+end
+
+def fun_l10_n232()
+ fun_l11_n671
+end
+
+def fun_l10_n233()
+ fun_l11_n34
+end
+
+def fun_l10_n234()
+ fun_l11_n305
+end
+
+def fun_l10_n235()
+ fun_l11_n410
+end
+
+def fun_l10_n236()
+ fun_l11_n72
+end
+
+def fun_l10_n237()
+ fun_l11_n236
+end
+
+def fun_l10_n238()
+ fun_l11_n135
+end
+
+def fun_l10_n239()
+ fun_l11_n718
+end
+
+def fun_l10_n240()
+ fun_l11_n453
+end
+
+def fun_l10_n241()
+ fun_l11_n965
+end
+
+def fun_l10_n242()
+ fun_l11_n919
+end
+
+def fun_l10_n243()
+ fun_l11_n56
+end
+
+def fun_l10_n244()
+ fun_l11_n853
+end
+
+def fun_l10_n245()
+ fun_l11_n719
+end
+
+def fun_l10_n246()
+ fun_l11_n45
+end
+
+def fun_l10_n247()
+ fun_l11_n344
+end
+
+def fun_l10_n248()
+ fun_l11_n907
+end
+
+def fun_l10_n249()
+ fun_l11_n340
+end
+
+def fun_l10_n250()
+ fun_l11_n625
+end
+
+def fun_l10_n251()
+ fun_l11_n274
+end
+
+def fun_l10_n252()
+ fun_l11_n392
+end
+
+def fun_l10_n253()
+ fun_l11_n15
+end
+
+def fun_l10_n254()
+ fun_l11_n474
+end
+
+def fun_l10_n255()
+ fun_l11_n792
+end
+
+def fun_l10_n256()
+ fun_l11_n580
+end
+
+def fun_l10_n257()
+ fun_l11_n375
+end
+
+def fun_l10_n258()
+ fun_l11_n169
+end
+
+def fun_l10_n259()
+ fun_l11_n792
+end
+
+def fun_l10_n260()
+ fun_l11_n553
+end
+
+def fun_l10_n261()
+ fun_l11_n919
+end
+
+def fun_l10_n262()
+ fun_l11_n814
+end
+
+def fun_l10_n263()
+ fun_l11_n845
+end
+
+def fun_l10_n264()
+ fun_l11_n337
+end
+
+def fun_l10_n265()
+ fun_l11_n362
+end
+
+def fun_l10_n266()
+ fun_l11_n400
+end
+
+def fun_l10_n267()
+ fun_l11_n335
+end
+
+def fun_l10_n268()
+ fun_l11_n142
+end
+
+def fun_l10_n269()
+ fun_l11_n262
+end
+
+def fun_l10_n270()
+ fun_l11_n969
+end
+
+def fun_l10_n271()
+ fun_l11_n599
+end
+
+def fun_l10_n272()
+ fun_l11_n763
+end
+
+def fun_l10_n273()
+ fun_l11_n154
+end
+
+def fun_l10_n274()
+ fun_l11_n289
+end
+
+def fun_l10_n275()
+ fun_l11_n852
+end
+
+def fun_l10_n276()
+ fun_l11_n994
+end
+
+def fun_l10_n277()
+ fun_l11_n583
+end
+
+def fun_l10_n278()
+ fun_l11_n580
+end
+
+def fun_l10_n279()
+ fun_l11_n610
+end
+
+def fun_l10_n280()
+ fun_l11_n624
+end
+
+def fun_l10_n281()
+ fun_l11_n987
+end
+
+def fun_l10_n282()
+ fun_l11_n973
+end
+
+def fun_l10_n283()
+ fun_l11_n128
+end
+
+def fun_l10_n284()
+ fun_l11_n864
+end
+
+def fun_l10_n285()
+ fun_l11_n270
+end
+
+def fun_l10_n286()
+ fun_l11_n878
+end
+
+def fun_l10_n287()
+ fun_l11_n242
+end
+
+def fun_l10_n288()
+ fun_l11_n214
+end
+
+def fun_l10_n289()
+ fun_l11_n51
+end
+
+def fun_l10_n290()
+ fun_l11_n122
+end
+
+def fun_l10_n291()
+ fun_l11_n288
+end
+
+def fun_l10_n292()
+ fun_l11_n751
+end
+
+def fun_l10_n293()
+ fun_l11_n723
+end
+
+def fun_l10_n294()
+ fun_l11_n884
+end
+
+def fun_l10_n295()
+ fun_l11_n671
+end
+
+def fun_l10_n296()
+ fun_l11_n949
+end
+
+def fun_l10_n297()
+ fun_l11_n859
+end
+
+def fun_l10_n298()
+ fun_l11_n293
+end
+
+def fun_l10_n299()
+ fun_l11_n548
+end
+
+def fun_l10_n300()
+ fun_l11_n659
+end
+
+def fun_l10_n301()
+ fun_l11_n434
+end
+
+def fun_l10_n302()
+ fun_l11_n251
+end
+
+def fun_l10_n303()
+ fun_l11_n225
+end
+
+def fun_l10_n304()
+ fun_l11_n242
+end
+
+def fun_l10_n305()
+ fun_l11_n401
+end
+
+def fun_l10_n306()
+ fun_l11_n603
+end
+
+def fun_l10_n307()
+ fun_l11_n926
+end
+
+def fun_l10_n308()
+ fun_l11_n922
+end
+
+def fun_l10_n309()
+ fun_l11_n27
+end
+
+def fun_l10_n310()
+ fun_l11_n834
+end
+
+def fun_l10_n311()
+ fun_l11_n119
+end
+
+def fun_l10_n312()
+ fun_l11_n391
+end
+
+def fun_l10_n313()
+ fun_l11_n768
+end
+
+def fun_l10_n314()
+ fun_l11_n147
+end
+
+def fun_l10_n315()
+ fun_l11_n472
+end
+
+def fun_l10_n316()
+ fun_l11_n107
+end
+
+def fun_l10_n317()
+ fun_l11_n682
+end
+
+def fun_l10_n318()
+ fun_l11_n670
+end
+
+def fun_l10_n319()
+ fun_l11_n827
+end
+
+def fun_l10_n320()
+ fun_l11_n812
+end
+
+def fun_l10_n321()
+ fun_l11_n737
+end
+
+def fun_l10_n322()
+ fun_l11_n446
+end
+
+def fun_l10_n323()
+ fun_l11_n312
+end
+
+def fun_l10_n324()
+ fun_l11_n697
+end
+
+def fun_l10_n325()
+ fun_l11_n785
+end
+
+def fun_l10_n326()
+ fun_l11_n379
+end
+
+def fun_l10_n327()
+ fun_l11_n994
+end
+
+def fun_l10_n328()
+ fun_l11_n651
+end
+
+def fun_l10_n329()
+ fun_l11_n896
+end
+
+def fun_l10_n330()
+ fun_l11_n289
+end
+
+def fun_l10_n331()
+ fun_l11_n217
+end
+
+def fun_l10_n332()
+ fun_l11_n502
+end
+
+def fun_l10_n333()
+ fun_l11_n24
+end
+
+def fun_l10_n334()
+ fun_l11_n187
+end
+
+def fun_l10_n335()
+ fun_l11_n301
+end
+
+def fun_l10_n336()
+ fun_l11_n640
+end
+
+def fun_l10_n337()
+ fun_l11_n90
+end
+
+def fun_l10_n338()
+ fun_l11_n226
+end
+
+def fun_l10_n339()
+ fun_l11_n192
+end
+
+def fun_l10_n340()
+ fun_l11_n737
+end
+
+def fun_l10_n341()
+ fun_l11_n197
+end
+
+def fun_l10_n342()
+ fun_l11_n859
+end
+
+def fun_l10_n343()
+ fun_l11_n406
+end
+
+def fun_l10_n344()
+ fun_l11_n179
+end
+
+def fun_l10_n345()
+ fun_l11_n535
+end
+
+def fun_l10_n346()
+ fun_l11_n330
+end
+
+def fun_l10_n347()
+ fun_l11_n117
+end
+
+def fun_l10_n348()
+ fun_l11_n399
+end
+
+def fun_l10_n349()
+ fun_l11_n129
+end
+
+def fun_l10_n350()
+ fun_l11_n295
+end
+
+def fun_l10_n351()
+ fun_l11_n226
+end
+
+def fun_l10_n352()
+ fun_l11_n551
+end
+
+def fun_l10_n353()
+ fun_l11_n394
+end
+
+def fun_l10_n354()
+ fun_l11_n120
+end
+
+def fun_l10_n355()
+ fun_l11_n713
+end
+
+def fun_l10_n356()
+ fun_l11_n873
+end
+
+def fun_l10_n357()
+ fun_l11_n841
+end
+
+def fun_l10_n358()
+ fun_l11_n708
+end
+
+def fun_l10_n359()
+ fun_l11_n351
+end
+
+def fun_l10_n360()
+ fun_l11_n753
+end
+
+def fun_l10_n361()
+ fun_l11_n397
+end
+
+def fun_l10_n362()
+ fun_l11_n986
+end
+
+def fun_l10_n363()
+ fun_l11_n544
+end
+
+def fun_l10_n364()
+ fun_l11_n476
+end
+
+def fun_l10_n365()
+ fun_l11_n596
+end
+
+def fun_l10_n366()
+ fun_l11_n922
+end
+
+def fun_l10_n367()
+ fun_l11_n137
+end
+
+def fun_l10_n368()
+ fun_l11_n87
+end
+
+def fun_l10_n369()
+ fun_l11_n537
+end
+
+def fun_l10_n370()
+ fun_l11_n678
+end
+
+def fun_l10_n371()
+ fun_l11_n729
+end
+
+def fun_l10_n372()
+ fun_l11_n286
+end
+
+def fun_l10_n373()
+ fun_l11_n831
+end
+
+def fun_l10_n374()
+ fun_l11_n130
+end
+
+def fun_l10_n375()
+ fun_l11_n853
+end
+
+def fun_l10_n376()
+ fun_l11_n876
+end
+
+def fun_l10_n377()
+ fun_l11_n291
+end
+
+def fun_l10_n378()
+ fun_l11_n823
+end
+
+def fun_l10_n379()
+ fun_l11_n66
+end
+
+def fun_l10_n380()
+ fun_l11_n460
+end
+
+def fun_l10_n381()
+ fun_l11_n261
+end
+
+def fun_l10_n382()
+ fun_l11_n632
+end
+
+def fun_l10_n383()
+ fun_l11_n341
+end
+
+def fun_l10_n384()
+ fun_l11_n158
+end
+
+def fun_l10_n385()
+ fun_l11_n105
+end
+
+def fun_l10_n386()
+ fun_l11_n735
+end
+
+def fun_l10_n387()
+ fun_l11_n659
+end
+
+def fun_l10_n388()
+ fun_l11_n232
+end
+
+def fun_l10_n389()
+ fun_l11_n909
+end
+
+def fun_l10_n390()
+ fun_l11_n594
+end
+
+def fun_l10_n391()
+ fun_l11_n347
+end
+
+def fun_l10_n392()
+ fun_l11_n650
+end
+
+def fun_l10_n393()
+ fun_l11_n652
+end
+
+def fun_l10_n394()
+ fun_l11_n129
+end
+
+def fun_l10_n395()
+ fun_l11_n791
+end
+
+def fun_l10_n396()
+ fun_l11_n933
+end
+
+def fun_l10_n397()
+ fun_l11_n903
+end
+
+def fun_l10_n398()
+ fun_l11_n301
+end
+
+def fun_l10_n399()
+ fun_l11_n102
+end
+
+def fun_l10_n400()
+ fun_l11_n865
+end
+
+def fun_l10_n401()
+ fun_l11_n112
+end
+
+def fun_l10_n402()
+ fun_l11_n242
+end
+
+def fun_l10_n403()
+ fun_l11_n928
+end
+
+def fun_l10_n404()
+ fun_l11_n289
+end
+
+def fun_l10_n405()
+ fun_l11_n435
+end
+
+def fun_l10_n406()
+ fun_l11_n303
+end
+
+def fun_l10_n407()
+ fun_l11_n979
+end
+
+def fun_l10_n408()
+ fun_l11_n785
+end
+
+def fun_l10_n409()
+ fun_l11_n241
+end
+
+def fun_l10_n410()
+ fun_l11_n32
+end
+
+def fun_l10_n411()
+ fun_l11_n821
+end
+
+def fun_l10_n412()
+ fun_l11_n748
+end
+
+def fun_l10_n413()
+ fun_l11_n454
+end
+
+def fun_l10_n414()
+ fun_l11_n555
+end
+
+def fun_l10_n415()
+ fun_l11_n136
+end
+
+def fun_l10_n416()
+ fun_l11_n996
+end
+
+def fun_l10_n417()
+ fun_l11_n987
+end
+
+def fun_l10_n418()
+ fun_l11_n987
+end
+
+def fun_l10_n419()
+ fun_l11_n817
+end
+
+def fun_l10_n420()
+ fun_l11_n674
+end
+
+def fun_l10_n421()
+ fun_l11_n57
+end
+
+def fun_l10_n422()
+ fun_l11_n43
+end
+
+def fun_l10_n423()
+ fun_l11_n767
+end
+
+def fun_l10_n424()
+ fun_l11_n924
+end
+
+def fun_l10_n425()
+ fun_l11_n63
+end
+
+def fun_l10_n426()
+ fun_l11_n636
+end
+
+def fun_l10_n427()
+ fun_l11_n824
+end
+
+def fun_l10_n428()
+ fun_l11_n266
+end
+
+def fun_l10_n429()
+ fun_l11_n540
+end
+
+def fun_l10_n430()
+ fun_l11_n992
+end
+
+def fun_l10_n431()
+ fun_l11_n215
+end
+
+def fun_l10_n432()
+ fun_l11_n28
+end
+
+def fun_l10_n433()
+ fun_l11_n37
+end
+
+def fun_l10_n434()
+ fun_l11_n38
+end
+
+def fun_l10_n435()
+ fun_l11_n937
+end
+
+def fun_l10_n436()
+ fun_l11_n419
+end
+
+def fun_l10_n437()
+ fun_l11_n390
+end
+
+def fun_l10_n438()
+ fun_l11_n987
+end
+
+def fun_l10_n439()
+ fun_l11_n742
+end
+
+def fun_l10_n440()
+ fun_l11_n173
+end
+
+def fun_l10_n441()
+ fun_l11_n640
+end
+
+def fun_l10_n442()
+ fun_l11_n111
+end
+
+def fun_l10_n443()
+ fun_l11_n492
+end
+
+def fun_l10_n444()
+ fun_l11_n659
+end
+
+def fun_l10_n445()
+ fun_l11_n863
+end
+
+def fun_l10_n446()
+ fun_l11_n938
+end
+
+def fun_l10_n447()
+ fun_l11_n54
+end
+
+def fun_l10_n448()
+ fun_l11_n224
+end
+
+def fun_l10_n449()
+ fun_l11_n863
+end
+
+def fun_l10_n450()
+ fun_l11_n80
+end
+
+def fun_l10_n451()
+ fun_l11_n791
+end
+
+def fun_l10_n452()
+ fun_l11_n93
+end
+
+def fun_l10_n453()
+ fun_l11_n416
+end
+
+def fun_l10_n454()
+ fun_l11_n610
+end
+
+def fun_l10_n455()
+ fun_l11_n455
+end
+
+def fun_l10_n456()
+ fun_l11_n834
+end
+
+def fun_l10_n457()
+ fun_l11_n462
+end
+
+def fun_l10_n458()
+ fun_l11_n69
+end
+
+def fun_l10_n459()
+ fun_l11_n174
+end
+
+def fun_l10_n460()
+ fun_l11_n657
+end
+
+def fun_l10_n461()
+ fun_l11_n608
+end
+
+def fun_l10_n462()
+ fun_l11_n248
+end
+
+def fun_l10_n463()
+ fun_l11_n492
+end
+
+def fun_l10_n464()
+ fun_l11_n125
+end
+
+def fun_l10_n465()
+ fun_l11_n737
+end
+
+def fun_l10_n466()
+ fun_l11_n354
+end
+
+def fun_l10_n467()
+ fun_l11_n890
+end
+
+def fun_l10_n468()
+ fun_l11_n753
+end
+
+def fun_l10_n469()
+ fun_l11_n380
+end
+
+def fun_l10_n470()
+ fun_l11_n428
+end
+
+def fun_l10_n471()
+ fun_l11_n243
+end
+
+def fun_l10_n472()
+ fun_l11_n532
+end
+
+def fun_l10_n473()
+ fun_l11_n328
+end
+
+def fun_l10_n474()
+ fun_l11_n922
+end
+
+def fun_l10_n475()
+ fun_l11_n115
+end
+
+def fun_l10_n476()
+ fun_l11_n705
+end
+
+def fun_l10_n477()
+ fun_l11_n457
+end
+
+def fun_l10_n478()
+ fun_l11_n201
+end
+
+def fun_l10_n479()
+ fun_l11_n801
+end
+
+def fun_l10_n480()
+ fun_l11_n492
+end
+
+def fun_l10_n481()
+ fun_l11_n148
+end
+
+def fun_l10_n482()
+ fun_l11_n802
+end
+
+def fun_l10_n483()
+ fun_l11_n725
+end
+
+def fun_l10_n484()
+ fun_l11_n835
+end
+
+def fun_l10_n485()
+ fun_l11_n564
+end
+
+def fun_l10_n486()
+ fun_l11_n803
+end
+
+def fun_l10_n487()
+ fun_l11_n696
+end
+
+def fun_l10_n488()
+ fun_l11_n171
+end
+
+def fun_l10_n489()
+ fun_l11_n759
+end
+
+def fun_l10_n490()
+ fun_l11_n728
+end
+
+def fun_l10_n491()
+ fun_l11_n64
+end
+
+def fun_l10_n492()
+ fun_l11_n717
+end
+
+def fun_l10_n493()
+ fun_l11_n97
+end
+
+def fun_l10_n494()
+ fun_l11_n157
+end
+
+def fun_l10_n495()
+ fun_l11_n589
+end
+
+def fun_l10_n496()
+ fun_l11_n642
+end
+
+def fun_l10_n497()
+ fun_l11_n994
+end
+
+def fun_l10_n498()
+ fun_l11_n566
+end
+
+def fun_l10_n499()
+ fun_l11_n325
+end
+
+def fun_l10_n500()
+ fun_l11_n905
+end
+
+def fun_l10_n501()
+ fun_l11_n242
+end
+
+def fun_l10_n502()
+ fun_l11_n135
+end
+
+def fun_l10_n503()
+ fun_l11_n476
+end
+
+def fun_l10_n504()
+ fun_l11_n63
+end
+
+def fun_l10_n505()
+ fun_l11_n908
+end
+
+def fun_l10_n506()
+ fun_l11_n51
+end
+
+def fun_l10_n507()
+ fun_l11_n261
+end
+
+def fun_l10_n508()
+ fun_l11_n680
+end
+
+def fun_l10_n509()
+ fun_l11_n346
+end
+
+def fun_l10_n510()
+ fun_l11_n490
+end
+
+def fun_l10_n511()
+ fun_l11_n896
+end
+
+def fun_l10_n512()
+ fun_l11_n788
+end
+
+def fun_l10_n513()
+ fun_l11_n672
+end
+
+def fun_l10_n514()
+ fun_l11_n17
+end
+
+def fun_l10_n515()
+ fun_l11_n744
+end
+
+def fun_l10_n516()
+ fun_l11_n90
+end
+
+def fun_l10_n517()
+ fun_l11_n451
+end
+
+def fun_l10_n518()
+ fun_l11_n942
+end
+
+def fun_l10_n519()
+ fun_l11_n275
+end
+
+def fun_l10_n520()
+ fun_l11_n422
+end
+
+def fun_l10_n521()
+ fun_l11_n463
+end
+
+def fun_l10_n522()
+ fun_l11_n198
+end
+
+def fun_l10_n523()
+ fun_l11_n703
+end
+
+def fun_l10_n524()
+ fun_l11_n745
+end
+
+def fun_l10_n525()
+ fun_l11_n476
+end
+
+def fun_l10_n526()
+ fun_l11_n122
+end
+
+def fun_l10_n527()
+ fun_l11_n111
+end
+
+def fun_l10_n528()
+ fun_l11_n354
+end
+
+def fun_l10_n529()
+ fun_l11_n63
+end
+
+def fun_l10_n530()
+ fun_l11_n652
+end
+
+def fun_l10_n531()
+ fun_l11_n535
+end
+
+def fun_l10_n532()
+ fun_l11_n990
+end
+
+def fun_l10_n533()
+ fun_l11_n506
+end
+
+def fun_l10_n534()
+ fun_l11_n741
+end
+
+def fun_l10_n535()
+ fun_l11_n12
+end
+
+def fun_l10_n536()
+ fun_l11_n138
+end
+
+def fun_l10_n537()
+ fun_l11_n247
+end
+
+def fun_l10_n538()
+ fun_l11_n469
+end
+
+def fun_l10_n539()
+ fun_l11_n574
+end
+
+def fun_l10_n540()
+ fun_l11_n474
+end
+
+def fun_l10_n541()
+ fun_l11_n639
+end
+
+def fun_l10_n542()
+ fun_l11_n932
+end
+
+def fun_l10_n543()
+ fun_l11_n587
+end
+
+def fun_l10_n544()
+ fun_l11_n502
+end
+
+def fun_l10_n545()
+ fun_l11_n134
+end
+
+def fun_l10_n546()
+ fun_l11_n470
+end
+
+def fun_l10_n547()
+ fun_l11_n118
+end
+
+def fun_l10_n548()
+ fun_l11_n253
+end
+
+def fun_l10_n549()
+ fun_l11_n331
+end
+
+def fun_l10_n550()
+ fun_l11_n461
+end
+
+def fun_l10_n551()
+ fun_l11_n807
+end
+
+def fun_l10_n552()
+ fun_l11_n266
+end
+
+def fun_l10_n553()
+ fun_l11_n537
+end
+
+def fun_l10_n554()
+ fun_l11_n649
+end
+
+def fun_l10_n555()
+ fun_l11_n620
+end
+
+def fun_l10_n556()
+ fun_l11_n646
+end
+
+def fun_l10_n557()
+ fun_l11_n972
+end
+
+def fun_l10_n558()
+ fun_l11_n311
+end
+
+def fun_l10_n559()
+ fun_l11_n555
+end
+
+def fun_l10_n560()
+ fun_l11_n930
+end
+
+def fun_l10_n561()
+ fun_l11_n249
+end
+
+def fun_l10_n562()
+ fun_l11_n270
+end
+
+def fun_l10_n563()
+ fun_l11_n769
+end
+
+def fun_l10_n564()
+ fun_l11_n281
+end
+
+def fun_l10_n565()
+ fun_l11_n213
+end
+
+def fun_l10_n566()
+ fun_l11_n849
+end
+
+def fun_l10_n567()
+ fun_l11_n665
+end
+
+def fun_l10_n568()
+ fun_l11_n339
+end
+
+def fun_l10_n569()
+ fun_l11_n476
+end
+
+def fun_l10_n570()
+ fun_l11_n732
+end
+
+def fun_l10_n571()
+ fun_l11_n266
+end
+
+def fun_l10_n572()
+ fun_l11_n85
+end
+
+def fun_l10_n573()
+ fun_l11_n260
+end
+
+def fun_l10_n574()
+ fun_l11_n275
+end
+
+def fun_l10_n575()
+ fun_l11_n673
+end
+
+def fun_l10_n576()
+ fun_l11_n252
+end
+
+def fun_l10_n577()
+ fun_l11_n376
+end
+
+def fun_l10_n578()
+ fun_l11_n407
+end
+
+def fun_l10_n579()
+ fun_l11_n134
+end
+
+def fun_l10_n580()
+ fun_l11_n825
+end
+
+def fun_l10_n581()
+ fun_l11_n266
+end
+
+def fun_l10_n582()
+ fun_l11_n40
+end
+
+def fun_l10_n583()
+ fun_l11_n346
+end
+
+def fun_l10_n584()
+ fun_l11_n503
+end
+
+def fun_l10_n585()
+ fun_l11_n743
+end
+
+def fun_l10_n586()
+ fun_l11_n199
+end
+
+def fun_l10_n587()
+ fun_l11_n268
+end
+
+def fun_l10_n588()
+ fun_l11_n6
+end
+
+def fun_l10_n589()
+ fun_l11_n859
+end
+
+def fun_l10_n590()
+ fun_l11_n499
+end
+
+def fun_l10_n591()
+ fun_l11_n397
+end
+
+def fun_l10_n592()
+ fun_l11_n580
+end
+
+def fun_l10_n593()
+ fun_l11_n299
+end
+
+def fun_l10_n594()
+ fun_l11_n691
+end
+
+def fun_l10_n595()
+ fun_l11_n973
+end
+
+def fun_l10_n596()
+ fun_l11_n987
+end
+
+def fun_l10_n597()
+ fun_l11_n342
+end
+
+def fun_l10_n598()
+ fun_l11_n556
+end
+
+def fun_l10_n599()
+ fun_l11_n754
+end
+
+def fun_l10_n600()
+ fun_l11_n54
+end
+
+def fun_l10_n601()
+ fun_l11_n334
+end
+
+def fun_l10_n602()
+ fun_l11_n6
+end
+
+def fun_l10_n603()
+ fun_l11_n574
+end
+
+def fun_l10_n604()
+ fun_l11_n615
+end
+
+def fun_l10_n605()
+ fun_l11_n314
+end
+
+def fun_l10_n606()
+ fun_l11_n659
+end
+
+def fun_l10_n607()
+ fun_l11_n41
+end
+
+def fun_l10_n608()
+ fun_l11_n119
+end
+
+def fun_l10_n609()
+ fun_l11_n204
+end
+
+def fun_l10_n610()
+ fun_l11_n952
+end
+
+def fun_l10_n611()
+ fun_l11_n587
+end
+
+def fun_l10_n612()
+ fun_l11_n87
+end
+
+def fun_l10_n613()
+ fun_l11_n840
+end
+
+def fun_l10_n614()
+ fun_l11_n520
+end
+
+def fun_l10_n615()
+ fun_l11_n814
+end
+
+def fun_l10_n616()
+ fun_l11_n595
+end
+
+def fun_l10_n617()
+ fun_l11_n765
+end
+
+def fun_l10_n618()
+ fun_l11_n383
+end
+
+def fun_l10_n619()
+ fun_l11_n277
+end
+
+def fun_l10_n620()
+ fun_l11_n897
+end
+
+def fun_l10_n621()
+ fun_l11_n131
+end
+
+def fun_l10_n622()
+ fun_l11_n674
+end
+
+def fun_l10_n623()
+ fun_l11_n971
+end
+
+def fun_l10_n624()
+ fun_l11_n503
+end
+
+def fun_l10_n625()
+ fun_l11_n471
+end
+
+def fun_l10_n626()
+ fun_l11_n805
+end
+
+def fun_l10_n627()
+ fun_l11_n58
+end
+
+def fun_l10_n628()
+ fun_l11_n784
+end
+
+def fun_l10_n629()
+ fun_l11_n222
+end
+
+def fun_l10_n630()
+ fun_l11_n382
+end
+
+def fun_l10_n631()
+ fun_l11_n239
+end
+
+def fun_l10_n632()
+ fun_l11_n53
+end
+
+def fun_l10_n633()
+ fun_l11_n730
+end
+
+def fun_l10_n634()
+ fun_l11_n522
+end
+
+def fun_l10_n635()
+ fun_l11_n182
+end
+
+def fun_l10_n636()
+ fun_l11_n837
+end
+
+def fun_l10_n637()
+ fun_l11_n815
+end
+
+def fun_l10_n638()
+ fun_l11_n754
+end
+
+def fun_l10_n639()
+ fun_l11_n74
+end
+
+def fun_l10_n640()
+ fun_l11_n695
+end
+
+def fun_l10_n641()
+ fun_l11_n454
+end
+
+def fun_l10_n642()
+ fun_l11_n250
+end
+
+def fun_l10_n643()
+ fun_l11_n385
+end
+
+def fun_l10_n644()
+ fun_l11_n115
+end
+
+def fun_l10_n645()
+ fun_l11_n624
+end
+
+def fun_l10_n646()
+ fun_l11_n697
+end
+
+def fun_l10_n647()
+ fun_l11_n184
+end
+
+def fun_l10_n648()
+ fun_l11_n921
+end
+
+def fun_l10_n649()
+ fun_l11_n699
+end
+
+def fun_l10_n650()
+ fun_l11_n952
+end
+
+def fun_l10_n651()
+ fun_l11_n879
+end
+
+def fun_l10_n652()
+ fun_l11_n569
+end
+
+def fun_l10_n653()
+ fun_l11_n85
+end
+
+def fun_l10_n654()
+ fun_l11_n316
+end
+
+def fun_l10_n655()
+ fun_l11_n203
+end
+
+def fun_l10_n656()
+ fun_l11_n424
+end
+
+def fun_l10_n657()
+ fun_l11_n731
+end
+
+def fun_l10_n658()
+ fun_l11_n65
+end
+
+def fun_l10_n659()
+ fun_l11_n232
+end
+
+def fun_l10_n660()
+ fun_l11_n306
+end
+
+def fun_l10_n661()
+ fun_l11_n71
+end
+
+def fun_l10_n662()
+ fun_l11_n577
+end
+
+def fun_l10_n663()
+ fun_l11_n670
+end
+
+def fun_l10_n664()
+ fun_l11_n905
+end
+
+def fun_l10_n665()
+ fun_l11_n717
+end
+
+def fun_l10_n666()
+ fun_l11_n198
+end
+
+def fun_l10_n667()
+ fun_l11_n982
+end
+
+def fun_l10_n668()
+ fun_l11_n933
+end
+
+def fun_l10_n669()
+ fun_l11_n446
+end
+
+def fun_l10_n670()
+ fun_l11_n913
+end
+
+def fun_l10_n671()
+ fun_l11_n794
+end
+
+def fun_l10_n672()
+ fun_l11_n604
+end
+
+def fun_l10_n673()
+ fun_l11_n408
+end
+
+def fun_l10_n674()
+ fun_l11_n297
+end
+
+def fun_l10_n675()
+ fun_l11_n113
+end
+
+def fun_l10_n676()
+ fun_l11_n197
+end
+
+def fun_l10_n677()
+ fun_l11_n606
+end
+
+def fun_l10_n678()
+ fun_l11_n333
+end
+
+def fun_l10_n679()
+ fun_l11_n130
+end
+
+def fun_l10_n680()
+ fun_l11_n893
+end
+
+def fun_l10_n681()
+ fun_l11_n997
+end
+
+def fun_l10_n682()
+ fun_l11_n826
+end
+
+def fun_l10_n683()
+ fun_l11_n889
+end
+
+def fun_l10_n684()
+ fun_l11_n887
+end
+
+def fun_l10_n685()
+ fun_l11_n913
+end
+
+def fun_l10_n686()
+ fun_l11_n563
+end
+
+def fun_l10_n687()
+ fun_l11_n112
+end
+
+def fun_l10_n688()
+ fun_l11_n527
+end
+
+def fun_l10_n689()
+ fun_l11_n423
+end
+
+def fun_l10_n690()
+ fun_l11_n906
+end
+
+def fun_l10_n691()
+ fun_l11_n134
+end
+
+def fun_l10_n692()
+ fun_l11_n549
+end
+
+def fun_l10_n693()
+ fun_l11_n864
+end
+
+def fun_l10_n694()
+ fun_l11_n750
+end
+
+def fun_l10_n695()
+ fun_l11_n357
+end
+
+def fun_l10_n696()
+ fun_l11_n79
+end
+
+def fun_l10_n697()
+ fun_l11_n99
+end
+
+def fun_l10_n698()
+ fun_l11_n638
+end
+
+def fun_l10_n699()
+ fun_l11_n946
+end
+
+def fun_l10_n700()
+ fun_l11_n498
+end
+
+def fun_l10_n701()
+ fun_l11_n490
+end
+
+def fun_l10_n702()
+ fun_l11_n860
+end
+
+def fun_l10_n703()
+ fun_l11_n194
+end
+
+def fun_l10_n704()
+ fun_l11_n130
+end
+
+def fun_l10_n705()
+ fun_l11_n647
+end
+
+def fun_l10_n706()
+ fun_l11_n162
+end
+
+def fun_l10_n707()
+ fun_l11_n41
+end
+
+def fun_l10_n708()
+ fun_l11_n583
+end
+
+def fun_l10_n709()
+ fun_l11_n687
+end
+
+def fun_l10_n710()
+ fun_l11_n83
+end
+
+def fun_l10_n711()
+ fun_l11_n365
+end
+
+def fun_l10_n712()
+ fun_l11_n797
+end
+
+def fun_l10_n713()
+ fun_l11_n730
+end
+
+def fun_l10_n714()
+ fun_l11_n844
+end
+
+def fun_l10_n715()
+ fun_l11_n514
+end
+
+def fun_l10_n716()
+ fun_l11_n212
+end
+
+def fun_l10_n717()
+ fun_l11_n600
+end
+
+def fun_l10_n718()
+ fun_l11_n823
+end
+
+def fun_l10_n719()
+ fun_l11_n439
+end
+
+def fun_l10_n720()
+ fun_l11_n361
+end
+
+def fun_l10_n721()
+ fun_l11_n390
+end
+
+def fun_l10_n722()
+ fun_l11_n10
+end
+
+def fun_l10_n723()
+ fun_l11_n984
+end
+
+def fun_l10_n724()
+ fun_l11_n193
+end
+
+def fun_l10_n725()
+ fun_l11_n584
+end
+
+def fun_l10_n726()
+ fun_l11_n552
+end
+
+def fun_l10_n727()
+ fun_l11_n795
+end
+
+def fun_l10_n728()
+ fun_l11_n958
+end
+
+def fun_l10_n729()
+ fun_l11_n408
+end
+
+def fun_l10_n730()
+ fun_l11_n584
+end
+
+def fun_l10_n731()
+ fun_l11_n707
+end
+
+def fun_l10_n732()
+ fun_l11_n291
+end
+
+def fun_l10_n733()
+ fun_l11_n777
+end
+
+def fun_l10_n734()
+ fun_l11_n634
+end
+
+def fun_l10_n735()
+ fun_l11_n716
+end
+
+def fun_l10_n736()
+ fun_l11_n167
+end
+
+def fun_l10_n737()
+ fun_l11_n119
+end
+
+def fun_l10_n738()
+ fun_l11_n835
+end
+
+def fun_l10_n739()
+ fun_l11_n53
+end
+
+def fun_l10_n740()
+ fun_l11_n743
+end
+
+def fun_l10_n741()
+ fun_l11_n564
+end
+
+def fun_l10_n742()
+ fun_l11_n917
+end
+
+def fun_l10_n743()
+ fun_l11_n848
+end
+
+def fun_l10_n744()
+ fun_l11_n135
+end
+
+def fun_l10_n745()
+ fun_l11_n159
+end
+
+def fun_l10_n746()
+ fun_l11_n374
+end
+
+def fun_l10_n747()
+ fun_l11_n885
+end
+
+def fun_l10_n748()
+ fun_l11_n0
+end
+
+def fun_l10_n749()
+ fun_l11_n735
+end
+
+def fun_l10_n750()
+ fun_l11_n995
+end
+
+def fun_l10_n751()
+ fun_l11_n522
+end
+
+def fun_l10_n752()
+ fun_l11_n166
+end
+
+def fun_l10_n753()
+ fun_l11_n191
+end
+
+def fun_l10_n754()
+ fun_l11_n820
+end
+
+def fun_l10_n755()
+ fun_l11_n180
+end
+
+def fun_l10_n756()
+ fun_l11_n480
+end
+
+def fun_l10_n757()
+ fun_l11_n107
+end
+
+def fun_l10_n758()
+ fun_l11_n263
+end
+
+def fun_l10_n759()
+ fun_l11_n534
+end
+
+def fun_l10_n760()
+ fun_l11_n442
+end
+
+def fun_l10_n761()
+ fun_l11_n719
+end
+
+def fun_l10_n762()
+ fun_l11_n778
+end
+
+def fun_l10_n763()
+ fun_l11_n297
+end
+
+def fun_l10_n764()
+ fun_l11_n582
+end
+
+def fun_l10_n765()
+ fun_l11_n230
+end
+
+def fun_l10_n766()
+ fun_l11_n921
+end
+
+def fun_l10_n767()
+ fun_l11_n629
+end
+
+def fun_l10_n768()
+ fun_l11_n473
+end
+
+def fun_l10_n769()
+ fun_l11_n563
+end
+
+def fun_l10_n770()
+ fun_l11_n61
+end
+
+def fun_l10_n771()
+ fun_l11_n343
+end
+
+def fun_l10_n772()
+ fun_l11_n713
+end
+
+def fun_l10_n773()
+ fun_l11_n724
+end
+
+def fun_l10_n774()
+ fun_l11_n454
+end
+
+def fun_l10_n775()
+ fun_l11_n680
+end
+
+def fun_l10_n776()
+ fun_l11_n620
+end
+
+def fun_l10_n777()
+ fun_l11_n949
+end
+
+def fun_l10_n778()
+ fun_l11_n208
+end
+
+def fun_l10_n779()
+ fun_l11_n904
+end
+
+def fun_l10_n780()
+ fun_l11_n88
+end
+
+def fun_l10_n781()
+ fun_l11_n710
+end
+
+def fun_l10_n782()
+ fun_l11_n875
+end
+
+def fun_l10_n783()
+ fun_l11_n970
+end
+
+def fun_l10_n784()
+ fun_l11_n123
+end
+
+def fun_l10_n785()
+ fun_l11_n420
+end
+
+def fun_l10_n786()
+ fun_l11_n122
+end
+
+def fun_l10_n787()
+ fun_l11_n200
+end
+
+def fun_l10_n788()
+ fun_l11_n716
+end
+
+def fun_l10_n789()
+ fun_l11_n592
+end
+
+def fun_l10_n790()
+ fun_l11_n159
+end
+
+def fun_l10_n791()
+ fun_l11_n852
+end
+
+def fun_l10_n792()
+ fun_l11_n913
+end
+
+def fun_l10_n793()
+ fun_l11_n305
+end
+
+def fun_l10_n794()
+ fun_l11_n123
+end
+
+def fun_l10_n795()
+ fun_l11_n210
+end
+
+def fun_l10_n796()
+ fun_l11_n416
+end
+
+def fun_l10_n797()
+ fun_l11_n800
+end
+
+def fun_l10_n798()
+ fun_l11_n689
+end
+
+def fun_l10_n799()
+ fun_l11_n358
+end
+
+def fun_l10_n800()
+ fun_l11_n542
+end
+
+def fun_l10_n801()
+ fun_l11_n715
+end
+
+def fun_l10_n802()
+ fun_l11_n879
+end
+
+def fun_l10_n803()
+ fun_l11_n414
+end
+
+def fun_l10_n804()
+ fun_l11_n623
+end
+
+def fun_l10_n805()
+ fun_l11_n282
+end
+
+def fun_l10_n806()
+ fun_l11_n719
+end
+
+def fun_l10_n807()
+ fun_l11_n111
+end
+
+def fun_l10_n808()
+ fun_l11_n348
+end
+
+def fun_l10_n809()
+ fun_l11_n836
+end
+
+def fun_l10_n810()
+ fun_l11_n878
+end
+
+def fun_l10_n811()
+ fun_l11_n569
+end
+
+def fun_l10_n812()
+ fun_l11_n701
+end
+
+def fun_l10_n813()
+ fun_l11_n602
+end
+
+def fun_l10_n814()
+ fun_l11_n746
+end
+
+def fun_l10_n815()
+ fun_l11_n892
+end
+
+def fun_l10_n816()
+ fun_l11_n150
+end
+
+def fun_l10_n817()
+ fun_l11_n804
+end
+
+def fun_l10_n818()
+ fun_l11_n459
+end
+
+def fun_l10_n819()
+ fun_l11_n932
+end
+
+def fun_l10_n820()
+ fun_l11_n492
+end
+
+def fun_l10_n821()
+ fun_l11_n351
+end
+
+def fun_l10_n822()
+ fun_l11_n933
+end
+
+def fun_l10_n823()
+ fun_l11_n328
+end
+
+def fun_l10_n824()
+ fun_l11_n75
+end
+
+def fun_l10_n825()
+ fun_l11_n935
+end
+
+def fun_l10_n826()
+ fun_l11_n495
+end
+
+def fun_l10_n827()
+ fun_l11_n328
+end
+
+def fun_l10_n828()
+ fun_l11_n888
+end
+
+def fun_l10_n829()
+ fun_l11_n547
+end
+
+def fun_l10_n830()
+ fun_l11_n315
+end
+
+def fun_l10_n831()
+ fun_l11_n243
+end
+
+def fun_l10_n832()
+ fun_l11_n972
+end
+
+def fun_l10_n833()
+ fun_l11_n33
+end
+
+def fun_l10_n834()
+ fun_l11_n765
+end
+
+def fun_l10_n835()
+ fun_l11_n614
+end
+
+def fun_l10_n836()
+ fun_l11_n686
+end
+
+def fun_l10_n837()
+ fun_l11_n373
+end
+
+def fun_l10_n838()
+ fun_l11_n534
+end
+
+def fun_l10_n839()
+ fun_l11_n375
+end
+
+def fun_l10_n840()
+ fun_l11_n297
+end
+
+def fun_l10_n841()
+ fun_l11_n107
+end
+
+def fun_l10_n842()
+ fun_l11_n409
+end
+
+def fun_l10_n843()
+ fun_l11_n24
+end
+
+def fun_l10_n844()
+ fun_l11_n43
+end
+
+def fun_l10_n845()
+ fun_l11_n93
+end
+
+def fun_l10_n846()
+ fun_l11_n667
+end
+
+def fun_l10_n847()
+ fun_l11_n520
+end
+
+def fun_l10_n848()
+ fun_l11_n109
+end
+
+def fun_l10_n849()
+ fun_l11_n829
+end
+
+def fun_l10_n850()
+ fun_l11_n946
+end
+
+def fun_l10_n851()
+ fun_l11_n232
+end
+
+def fun_l10_n852()
+ fun_l11_n568
+end
+
+def fun_l10_n853()
+ fun_l11_n589
+end
+
+def fun_l10_n854()
+ fun_l11_n76
+end
+
+def fun_l10_n855()
+ fun_l11_n106
+end
+
+def fun_l10_n856()
+ fun_l11_n46
+end
+
+def fun_l10_n857()
+ fun_l11_n261
+end
+
+def fun_l10_n858()
+ fun_l11_n788
+end
+
+def fun_l10_n859()
+ fun_l11_n289
+end
+
+def fun_l10_n860()
+ fun_l11_n269
+end
+
+def fun_l10_n861()
+ fun_l11_n669
+end
+
+def fun_l10_n862()
+ fun_l11_n925
+end
+
+def fun_l10_n863()
+ fun_l11_n782
+end
+
+def fun_l10_n864()
+ fun_l11_n432
+end
+
+def fun_l10_n865()
+ fun_l11_n278
+end
+
+def fun_l10_n866()
+ fun_l11_n380
+end
+
+def fun_l10_n867()
+ fun_l11_n488
+end
+
+def fun_l10_n868()
+ fun_l11_n718
+end
+
+def fun_l10_n869()
+ fun_l11_n569
+end
+
+def fun_l10_n870()
+ fun_l11_n59
+end
+
+def fun_l10_n871()
+ fun_l11_n581
+end
+
+def fun_l10_n872()
+ fun_l11_n128
+end
+
+def fun_l10_n873()
+ fun_l11_n200
+end
+
+def fun_l10_n874()
+ fun_l11_n258
+end
+
+def fun_l10_n875()
+ fun_l11_n869
+end
+
+def fun_l10_n876()
+ fun_l11_n337
+end
+
+def fun_l10_n877()
+ fun_l11_n11
+end
+
+def fun_l10_n878()
+ fun_l11_n968
+end
+
+def fun_l10_n879()
+ fun_l11_n188
+end
+
+def fun_l10_n880()
+ fun_l11_n361
+end
+
+def fun_l10_n881()
+ fun_l11_n268
+end
+
+def fun_l10_n882()
+ fun_l11_n518
+end
+
+def fun_l10_n883()
+ fun_l11_n253
+end
+
+def fun_l10_n884()
+ fun_l11_n159
+end
+
+def fun_l10_n885()
+ fun_l11_n977
+end
+
+def fun_l10_n886()
+ fun_l11_n602
+end
+
+def fun_l10_n887()
+ fun_l11_n957
+end
+
+def fun_l10_n888()
+ fun_l11_n53
+end
+
+def fun_l10_n889()
+ fun_l11_n680
+end
+
+def fun_l10_n890()
+ fun_l11_n6
+end
+
+def fun_l10_n891()
+ fun_l11_n202
+end
+
+def fun_l10_n892()
+ fun_l11_n25
+end
+
+def fun_l10_n893()
+ fun_l11_n857
+end
+
+def fun_l10_n894()
+ fun_l11_n505
+end
+
+def fun_l10_n895()
+ fun_l11_n966
+end
+
+def fun_l10_n896()
+ fun_l11_n381
+end
+
+def fun_l10_n897()
+ fun_l11_n811
+end
+
+def fun_l10_n898()
+ fun_l11_n863
+end
+
+def fun_l10_n899()
+ fun_l11_n902
+end
+
+def fun_l10_n900()
+ fun_l11_n711
+end
+
+def fun_l10_n901()
+ fun_l11_n42
+end
+
+def fun_l10_n902()
+ fun_l11_n324
+end
+
+def fun_l10_n903()
+ fun_l11_n729
+end
+
+def fun_l10_n904()
+ fun_l11_n535
+end
+
+def fun_l10_n905()
+ fun_l11_n427
+end
+
+def fun_l10_n906()
+ fun_l11_n469
+end
+
+def fun_l10_n907()
+ fun_l11_n887
+end
+
+def fun_l10_n908()
+ fun_l11_n822
+end
+
+def fun_l10_n909()
+ fun_l11_n567
+end
+
+def fun_l10_n910()
+ fun_l11_n2
+end
+
+def fun_l10_n911()
+ fun_l11_n957
+end
+
+def fun_l10_n912()
+ fun_l11_n850
+end
+
+def fun_l10_n913()
+ fun_l11_n146
+end
+
+def fun_l10_n914()
+ fun_l11_n318
+end
+
+def fun_l10_n915()
+ fun_l11_n452
+end
+
+def fun_l10_n916()
+ fun_l11_n366
+end
+
+def fun_l10_n917()
+ fun_l11_n126
+end
+
+def fun_l10_n918()
+ fun_l11_n56
+end
+
+def fun_l10_n919()
+ fun_l11_n742
+end
+
+def fun_l10_n920()
+ fun_l11_n1
+end
+
+def fun_l10_n921()
+ fun_l11_n778
+end
+
+def fun_l10_n922()
+ fun_l11_n703
+end
+
+def fun_l10_n923()
+ fun_l11_n622
+end
+
+def fun_l10_n924()
+ fun_l11_n942
+end
+
+def fun_l10_n925()
+ fun_l11_n909
+end
+
+def fun_l10_n926()
+ fun_l11_n98
+end
+
+def fun_l10_n927()
+ fun_l11_n518
+end
+
+def fun_l10_n928()
+ fun_l11_n932
+end
+
+def fun_l10_n929()
+ fun_l11_n768
+end
+
+def fun_l10_n930()
+ fun_l11_n846
+end
+
+def fun_l10_n931()
+ fun_l11_n231
+end
+
+def fun_l10_n932()
+ fun_l11_n944
+end
+
+def fun_l10_n933()
+ fun_l11_n561
+end
+
+def fun_l10_n934()
+ fun_l11_n587
+end
+
+def fun_l10_n935()
+ fun_l11_n372
+end
+
+def fun_l10_n936()
+ fun_l11_n322
+end
+
+def fun_l10_n937()
+ fun_l11_n416
+end
+
+def fun_l10_n938()
+ fun_l11_n191
+end
+
+def fun_l10_n939()
+ fun_l11_n915
+end
+
+def fun_l10_n940()
+ fun_l11_n215
+end
+
+def fun_l10_n941()
+ fun_l11_n271
+end
+
+def fun_l10_n942()
+ fun_l11_n890
+end
+
+def fun_l10_n943()
+ fun_l11_n914
+end
+
+def fun_l10_n944()
+ fun_l11_n313
+end
+
+def fun_l10_n945()
+ fun_l11_n705
+end
+
+def fun_l10_n946()
+ fun_l11_n725
+end
+
+def fun_l10_n947()
+ fun_l11_n46
+end
+
+def fun_l10_n948()
+ fun_l11_n793
+end
+
+def fun_l10_n949()
+ fun_l11_n986
+end
+
+def fun_l10_n950()
+ fun_l11_n607
+end
+
+def fun_l10_n951()
+ fun_l11_n429
+end
+
+def fun_l10_n952()
+ fun_l11_n251
+end
+
+def fun_l10_n953()
+ fun_l11_n264
+end
+
+def fun_l10_n954()
+ fun_l11_n677
+end
+
+def fun_l10_n955()
+ fun_l11_n616
+end
+
+def fun_l10_n956()
+ fun_l11_n264
+end
+
+def fun_l10_n957()
+ fun_l11_n188
+end
+
+def fun_l10_n958()
+ fun_l11_n834
+end
+
+def fun_l10_n959()
+ fun_l11_n231
+end
+
+def fun_l10_n960()
+ fun_l11_n584
+end
+
+def fun_l10_n961()
+ fun_l11_n153
+end
+
+def fun_l10_n962()
+ fun_l11_n215
+end
+
+def fun_l10_n963()
+ fun_l11_n902
+end
+
+def fun_l10_n964()
+ fun_l11_n600
+end
+
+def fun_l10_n965()
+ fun_l11_n113
+end
+
+def fun_l10_n966()
+ fun_l11_n264
+end
+
+def fun_l10_n967()
+ fun_l11_n92
+end
+
+def fun_l10_n968()
+ fun_l11_n346
+end
+
+def fun_l10_n969()
+ fun_l11_n531
+end
+
+def fun_l10_n970()
+ fun_l11_n134
+end
+
+def fun_l10_n971()
+ fun_l11_n883
+end
+
+def fun_l10_n972()
+ fun_l11_n662
+end
+
+def fun_l10_n973()
+ fun_l11_n836
+end
+
+def fun_l10_n974()
+ fun_l11_n418
+end
+
+def fun_l10_n975()
+ fun_l11_n384
+end
+
+def fun_l10_n976()
+ fun_l11_n57
+end
+
+def fun_l10_n977()
+ fun_l11_n827
+end
+
+def fun_l10_n978()
+ fun_l11_n114
+end
+
+def fun_l10_n979()
+ fun_l11_n720
+end
+
+def fun_l10_n980()
+ fun_l11_n328
+end
+
+def fun_l10_n981()
+ fun_l11_n597
+end
+
+def fun_l10_n982()
+ fun_l11_n941
+end
+
+def fun_l10_n983()
+ fun_l11_n848
+end
+
+def fun_l10_n984()
+ fun_l11_n269
+end
+
+def fun_l10_n985()
+ fun_l11_n666
+end
+
+def fun_l10_n986()
+ fun_l11_n538
+end
+
+def fun_l10_n987()
+ fun_l11_n755
+end
+
+def fun_l10_n988()
+ fun_l11_n747
+end
+
+def fun_l10_n989()
+ fun_l11_n100
+end
+
+def fun_l10_n990()
+ fun_l11_n995
+end
+
+def fun_l10_n991()
+ fun_l11_n904
+end
+
+def fun_l10_n992()
+ fun_l11_n948
+end
+
+def fun_l10_n993()
+ fun_l11_n135
+end
+
+def fun_l10_n994()
+ fun_l11_n120
+end
+
+def fun_l10_n995()
+ fun_l11_n156
+end
+
+def fun_l10_n996()
+ fun_l11_n264
+end
+
+def fun_l10_n997()
+ fun_l11_n522
+end
+
+def fun_l10_n998()
+ fun_l11_n105
+end
+
+def fun_l10_n999()
+ fun_l11_n919
+end
+
+def fun_l11_n0()
+ fun_l12_n731
+end
+
+def fun_l11_n1()
+ fun_l12_n521
+end
+
+def fun_l11_n2()
+ fun_l12_n875
+end
+
+def fun_l11_n3()
+ fun_l12_n806
+end
+
+def fun_l11_n4()
+ fun_l12_n211
+end
+
+def fun_l11_n5()
+ fun_l12_n965
+end
+
+def fun_l11_n6()
+ fun_l12_n770
+end
+
+def fun_l11_n7()
+ fun_l12_n440
+end
+
+def fun_l11_n8()
+ fun_l12_n900
+end
+
+def fun_l11_n9()
+ fun_l12_n581
+end
+
+def fun_l11_n10()
+ fun_l12_n427
+end
+
+def fun_l11_n11()
+ fun_l12_n156
+end
+
+def fun_l11_n12()
+ fun_l12_n941
+end
+
+def fun_l11_n13()
+ fun_l12_n711
+end
+
+def fun_l11_n14()
+ fun_l12_n69
+end
+
+def fun_l11_n15()
+ fun_l12_n665
+end
+
+def fun_l11_n16()
+ fun_l12_n325
+end
+
+def fun_l11_n17()
+ fun_l12_n120
+end
+
+def fun_l11_n18()
+ fun_l12_n455
+end
+
+def fun_l11_n19()
+ fun_l12_n14
+end
+
+def fun_l11_n20()
+ fun_l12_n909
+end
+
+def fun_l11_n21()
+ fun_l12_n297
+end
+
+def fun_l11_n22()
+ fun_l12_n81
+end
+
+def fun_l11_n23()
+ fun_l12_n420
+end
+
+def fun_l11_n24()
+ fun_l12_n439
+end
+
+def fun_l11_n25()
+ fun_l12_n867
+end
+
+def fun_l11_n26()
+ fun_l12_n147
+end
+
+def fun_l11_n27()
+ fun_l12_n422
+end
+
+def fun_l11_n28()
+ fun_l12_n338
+end
+
+def fun_l11_n29()
+ fun_l12_n730
+end
+
+def fun_l11_n30()
+ fun_l12_n15
+end
+
+def fun_l11_n31()
+ fun_l12_n276
+end
+
+def fun_l11_n32()
+ fun_l12_n298
+end
+
+def fun_l11_n33()
+ fun_l12_n749
+end
+
+def fun_l11_n34()
+ fun_l12_n255
+end
+
+def fun_l11_n35()
+ fun_l12_n104
+end
+
+def fun_l11_n36()
+ fun_l12_n91
+end
+
+def fun_l11_n37()
+ fun_l12_n825
+end
+
+def fun_l11_n38()
+ fun_l12_n983
+end
+
+def fun_l11_n39()
+ fun_l12_n711
+end
+
+def fun_l11_n40()
+ fun_l12_n991
+end
+
+def fun_l11_n41()
+ fun_l12_n143
+end
+
+def fun_l11_n42()
+ fun_l12_n579
+end
+
+def fun_l11_n43()
+ fun_l12_n217
+end
+
+def fun_l11_n44()
+ fun_l12_n353
+end
+
+def fun_l11_n45()
+ fun_l12_n849
+end
+
+def fun_l11_n46()
+ fun_l12_n452
+end
+
+def fun_l11_n47()
+ fun_l12_n982
+end
+
+def fun_l11_n48()
+ fun_l12_n201
+end
+
+def fun_l11_n49()
+ fun_l12_n289
+end
+
+def fun_l11_n50()
+ fun_l12_n419
+end
+
+def fun_l11_n51()
+ fun_l12_n490
+end
+
+def fun_l11_n52()
+ fun_l12_n969
+end
+
+def fun_l11_n53()
+ fun_l12_n721
+end
+
+def fun_l11_n54()
+ fun_l12_n657
+end
+
+def fun_l11_n55()
+ fun_l12_n498
+end
+
+def fun_l11_n56()
+ fun_l12_n44
+end
+
+def fun_l11_n57()
+ fun_l12_n863
+end
+
+def fun_l11_n58()
+ fun_l12_n366
+end
+
+def fun_l11_n59()
+ fun_l12_n515
+end
+
+def fun_l11_n60()
+ fun_l12_n302
+end
+
+def fun_l11_n61()
+ fun_l12_n717
+end
+
+def fun_l11_n62()
+ fun_l12_n165
+end
+
+def fun_l11_n63()
+ fun_l12_n980
+end
+
+def fun_l11_n64()
+ fun_l12_n988
+end
+
+def fun_l11_n65()
+ fun_l12_n397
+end
+
+def fun_l11_n66()
+ fun_l12_n648
+end
+
+def fun_l11_n67()
+ fun_l12_n8
+end
+
+def fun_l11_n68()
+ fun_l12_n164
+end
+
+def fun_l11_n69()
+ fun_l12_n999
+end
+
+def fun_l11_n70()
+ fun_l12_n434
+end
+
+def fun_l11_n71()
+ fun_l12_n991
+end
+
+def fun_l11_n72()
+ fun_l12_n596
+end
+
+def fun_l11_n73()
+ fun_l12_n533
+end
+
+def fun_l11_n74()
+ fun_l12_n222
+end
+
+def fun_l11_n75()
+ fun_l12_n817
+end
+
+def fun_l11_n76()
+ fun_l12_n740
+end
+
+def fun_l11_n77()
+ fun_l12_n638
+end
+
+def fun_l11_n78()
+ fun_l12_n81
+end
+
+def fun_l11_n79()
+ fun_l12_n702
+end
+
+def fun_l11_n80()
+ fun_l12_n783
+end
+
+def fun_l11_n81()
+ fun_l12_n228
+end
+
+def fun_l11_n82()
+ fun_l12_n487
+end
+
+def fun_l11_n83()
+ fun_l12_n59
+end
+
+def fun_l11_n84()
+ fun_l12_n910
+end
+
+def fun_l11_n85()
+ fun_l12_n581
+end
+
+def fun_l11_n86()
+ fun_l12_n947
+end
+
+def fun_l11_n87()
+ fun_l12_n645
+end
+
+def fun_l11_n88()
+ fun_l12_n505
+end
+
+def fun_l11_n89()
+ fun_l12_n171
+end
+
+def fun_l11_n90()
+ fun_l12_n713
+end
+
+def fun_l11_n91()
+ fun_l12_n414
+end
+
+def fun_l11_n92()
+ fun_l12_n427
+end
+
+def fun_l11_n93()
+ fun_l12_n225
+end
+
+def fun_l11_n94()
+ fun_l12_n655
+end
+
+def fun_l11_n95()
+ fun_l12_n437
+end
+
+def fun_l11_n96()
+ fun_l12_n879
+end
+
+def fun_l11_n97()
+ fun_l12_n222
+end
+
+def fun_l11_n98()
+ fun_l12_n642
+end
+
+def fun_l11_n99()
+ fun_l12_n142
+end
+
+def fun_l11_n100()
+ fun_l12_n612
+end
+
+def fun_l11_n101()
+ fun_l12_n548
+end
+
+def fun_l11_n102()
+ fun_l12_n535
+end
+
+def fun_l11_n103()
+ fun_l12_n245
+end
+
+def fun_l11_n104()
+ fun_l12_n0
+end
+
+def fun_l11_n105()
+ fun_l12_n305
+end
+
+def fun_l11_n106()
+ fun_l12_n674
+end
+
+def fun_l11_n107()
+ fun_l12_n626
+end
+
+def fun_l11_n108()
+ fun_l12_n335
+end
+
+def fun_l11_n109()
+ fun_l12_n963
+end
+
+def fun_l11_n110()
+ fun_l12_n958
+end
+
+def fun_l11_n111()
+ fun_l12_n32
+end
+
+def fun_l11_n112()
+ fun_l12_n149
+end
+
+def fun_l11_n113()
+ fun_l12_n923
+end
+
+def fun_l11_n114()
+ fun_l12_n853
+end
+
+def fun_l11_n115()
+ fun_l12_n793
+end
+
+def fun_l11_n116()
+ fun_l12_n354
+end
+
+def fun_l11_n117()
+ fun_l12_n839
+end
+
+def fun_l11_n118()
+ fun_l12_n995
+end
+
+def fun_l11_n119()
+ fun_l12_n610
+end
+
+def fun_l11_n120()
+ fun_l12_n147
+end
+
+def fun_l11_n121()
+ fun_l12_n191
+end
+
+def fun_l11_n122()
+ fun_l12_n237
+end
+
+def fun_l11_n123()
+ fun_l12_n766
+end
+
+def fun_l11_n124()
+ fun_l12_n830
+end
+
+def fun_l11_n125()
+ fun_l12_n968
+end
+
+def fun_l11_n126()
+ fun_l12_n163
+end
+
+def fun_l11_n127()
+ fun_l12_n357
+end
+
+def fun_l11_n128()
+ fun_l12_n741
+end
+
+def fun_l11_n129()
+ fun_l12_n502
+end
+
+def fun_l11_n130()
+ fun_l12_n569
+end
+
+def fun_l11_n131()
+ fun_l12_n696
+end
+
+def fun_l11_n132()
+ fun_l12_n326
+end
+
+def fun_l11_n133()
+ fun_l12_n765
+end
+
+def fun_l11_n134()
+ fun_l12_n126
+end
+
+def fun_l11_n135()
+ fun_l12_n107
+end
+
+def fun_l11_n136()
+ fun_l12_n8
+end
+
+def fun_l11_n137()
+ fun_l12_n969
+end
+
+def fun_l11_n138()
+ fun_l12_n49
+end
+
+def fun_l11_n139()
+ fun_l12_n65
+end
+
+def fun_l11_n140()
+ fun_l12_n631
+end
+
+def fun_l11_n141()
+ fun_l12_n984
+end
+
+def fun_l11_n142()
+ fun_l12_n520
+end
+
+def fun_l11_n143()
+ fun_l12_n348
+end
+
+def fun_l11_n144()
+ fun_l12_n51
+end
+
+def fun_l11_n145()
+ fun_l12_n756
+end
+
+def fun_l11_n146()
+ fun_l12_n981
+end
+
+def fun_l11_n147()
+ fun_l12_n671
+end
+
+def fun_l11_n148()
+ fun_l12_n4
+end
+
+def fun_l11_n149()
+ fun_l12_n66
+end
+
+def fun_l11_n150()
+ fun_l12_n445
+end
+
+def fun_l11_n151()
+ fun_l12_n131
+end
+
+def fun_l11_n152()
+ fun_l12_n927
+end
+
+def fun_l11_n153()
+ fun_l12_n715
+end
+
+def fun_l11_n154()
+ fun_l12_n767
+end
+
+def fun_l11_n155()
+ fun_l12_n50
+end
+
+def fun_l11_n156()
+ fun_l12_n360
+end
+
+def fun_l11_n157()
+ fun_l12_n311
+end
+
+def fun_l11_n158()
+ fun_l12_n509
+end
+
+def fun_l11_n159()
+ fun_l12_n868
+end
+
+def fun_l11_n160()
+ fun_l12_n185
+end
+
+def fun_l11_n161()
+ fun_l12_n338
+end
+
+def fun_l11_n162()
+ fun_l12_n539
+end
+
+def fun_l11_n163()
+ fun_l12_n30
+end
+
+def fun_l11_n164()
+ fun_l12_n485
+end
+
+def fun_l11_n165()
+ fun_l12_n808
+end
+
+def fun_l11_n166()
+ fun_l12_n78
+end
+
+def fun_l11_n167()
+ fun_l12_n370
+end
+
+def fun_l11_n168()
+ fun_l12_n1
+end
+
+def fun_l11_n169()
+ fun_l12_n473
+end
+
+def fun_l11_n170()
+ fun_l12_n362
+end
+
+def fun_l11_n171()
+ fun_l12_n209
+end
+
+def fun_l11_n172()
+ fun_l12_n431
+end
+
+def fun_l11_n173()
+ fun_l12_n383
+end
+
+def fun_l11_n174()
+ fun_l12_n214
+end
+
+def fun_l11_n175()
+ fun_l12_n215
+end
+
+def fun_l11_n176()
+ fun_l12_n639
+end
+
+def fun_l11_n177()
+ fun_l12_n486
+end
+
+def fun_l11_n178()
+ fun_l12_n486
+end
+
+def fun_l11_n179()
+ fun_l12_n409
+end
+
+def fun_l11_n180()
+ fun_l12_n558
+end
+
+def fun_l11_n181()
+ fun_l12_n546
+end
+
+def fun_l11_n182()
+ fun_l12_n439
+end
+
+def fun_l11_n183()
+ fun_l12_n11
+end
+
+def fun_l11_n184()
+ fun_l12_n304
+end
+
+def fun_l11_n185()
+ fun_l12_n525
+end
+
+def fun_l11_n186()
+ fun_l12_n886
+end
+
+def fun_l11_n187()
+ fun_l12_n17
+end
+
+def fun_l11_n188()
+ fun_l12_n11
+end
+
+def fun_l11_n189()
+ fun_l12_n382
+end
+
+def fun_l11_n190()
+ fun_l12_n185
+end
+
+def fun_l11_n191()
+ fun_l12_n454
+end
+
+def fun_l11_n192()
+ fun_l12_n23
+end
+
+def fun_l11_n193()
+ fun_l12_n900
+end
+
+def fun_l11_n194()
+ fun_l12_n233
+end
+
+def fun_l11_n195()
+ fun_l12_n245
+end
+
+def fun_l11_n196()
+ fun_l12_n474
+end
+
+def fun_l11_n197()
+ fun_l12_n368
+end
+
+def fun_l11_n198()
+ fun_l12_n80
+end
+
+def fun_l11_n199()
+ fun_l12_n522
+end
+
+def fun_l11_n200()
+ fun_l12_n439
+end
+
+def fun_l11_n201()
+ fun_l12_n553
+end
+
+def fun_l11_n202()
+ fun_l12_n713
+end
+
+def fun_l11_n203()
+ fun_l12_n898
+end
+
+def fun_l11_n204()
+ fun_l12_n571
+end
+
+def fun_l11_n205()
+ fun_l12_n830
+end
+
+def fun_l11_n206()
+ fun_l12_n404
+end
+
+def fun_l11_n207()
+ fun_l12_n120
+end
+
+def fun_l11_n208()
+ fun_l12_n147
+end
+
+def fun_l11_n209()
+ fun_l12_n924
+end
+
+def fun_l11_n210()
+ fun_l12_n988
+end
+
+def fun_l11_n211()
+ fun_l12_n25
+end
+
+def fun_l11_n212()
+ fun_l12_n848
+end
+
+def fun_l11_n213()
+ fun_l12_n875
+end
+
+def fun_l11_n214()
+ fun_l12_n718
+end
+
+def fun_l11_n215()
+ fun_l12_n657
+end
+
+def fun_l11_n216()
+ fun_l12_n364
+end
+
+def fun_l11_n217()
+ fun_l12_n342
+end
+
+def fun_l11_n218()
+ fun_l12_n16
+end
+
+def fun_l11_n219()
+ fun_l12_n167
+end
+
+def fun_l11_n220()
+ fun_l12_n719
+end
+
+def fun_l11_n221()
+ fun_l12_n414
+end
+
+def fun_l11_n222()
+ fun_l12_n874
+end
+
+def fun_l11_n223()
+ fun_l12_n482
+end
+
+def fun_l11_n224()
+ fun_l12_n191
+end
+
+def fun_l11_n225()
+ fun_l12_n172
+end
+
+def fun_l11_n226()
+ fun_l12_n768
+end
+
+def fun_l11_n227()
+ fun_l12_n746
+end
+
+def fun_l11_n228()
+ fun_l12_n460
+end
+
+def fun_l11_n229()
+ fun_l12_n64
+end
+
+def fun_l11_n230()
+ fun_l12_n747
+end
+
+def fun_l11_n231()
+ fun_l12_n147
+end
+
+def fun_l11_n232()
+ fun_l12_n157
+end
+
+def fun_l11_n233()
+ fun_l12_n336
+end
+
+def fun_l11_n234()
+ fun_l12_n904
+end
+
+def fun_l11_n235()
+ fun_l12_n76
+end
+
+def fun_l11_n236()
+ fun_l12_n499
+end
+
+def fun_l11_n237()
+ fun_l12_n559
+end
+
+def fun_l11_n238()
+ fun_l12_n949
+end
+
+def fun_l11_n239()
+ fun_l12_n525
+end
+
+def fun_l11_n240()
+ fun_l12_n741
+end
+
+def fun_l11_n241()
+ fun_l12_n11
+end
+
+def fun_l11_n242()
+ fun_l12_n449
+end
+
+def fun_l11_n243()
+ fun_l12_n767
+end
+
+def fun_l11_n244()
+ fun_l12_n94
+end
+
+def fun_l11_n245()
+ fun_l12_n721
+end
+
+def fun_l11_n246()
+ fun_l12_n592
+end
+
+def fun_l11_n247()
+ fun_l12_n184
+end
+
+def fun_l11_n248()
+ fun_l12_n166
+end
+
+def fun_l11_n249()
+ fun_l12_n773
+end
+
+def fun_l11_n250()
+ fun_l12_n334
+end
+
+def fun_l11_n251()
+ fun_l12_n965
+end
+
+def fun_l11_n252()
+ fun_l12_n154
+end
+
+def fun_l11_n253()
+ fun_l12_n182
+end
+
+def fun_l11_n254()
+ fun_l12_n298
+end
+
+def fun_l11_n255()
+ fun_l12_n29
+end
+
+def fun_l11_n256()
+ fun_l12_n409
+end
+
+def fun_l11_n257()
+ fun_l12_n452
+end
+
+def fun_l11_n258()
+ fun_l12_n369
+end
+
+def fun_l11_n259()
+ fun_l12_n794
+end
+
+def fun_l11_n260()
+ fun_l12_n210
+end
+
+def fun_l11_n261()
+ fun_l12_n255
+end
+
+def fun_l11_n262()
+ fun_l12_n801
+end
+
+def fun_l11_n263()
+ fun_l12_n650
+end
+
+def fun_l11_n264()
+ fun_l12_n612
+end
+
+def fun_l11_n265()
+ fun_l12_n122
+end
+
+def fun_l11_n266()
+ fun_l12_n70
+end
+
+def fun_l11_n267()
+ fun_l12_n254
+end
+
+def fun_l11_n268()
+ fun_l12_n104
+end
+
+def fun_l11_n269()
+ fun_l12_n564
+end
+
+def fun_l11_n270()
+ fun_l12_n256
+end
+
+def fun_l11_n271()
+ fun_l12_n525
+end
+
+def fun_l11_n272()
+ fun_l12_n734
+end
+
+def fun_l11_n273()
+ fun_l12_n127
+end
+
+def fun_l11_n274()
+ fun_l12_n705
+end
+
+def fun_l11_n275()
+ fun_l12_n607
+end
+
+def fun_l11_n276()
+ fun_l12_n681
+end
+
+def fun_l11_n277()
+ fun_l12_n510
+end
+
+def fun_l11_n278()
+ fun_l12_n889
+end
+
+def fun_l11_n279()
+ fun_l12_n153
+end
+
+def fun_l11_n280()
+ fun_l12_n457
+end
+
+def fun_l11_n281()
+ fun_l12_n394
+end
+
+def fun_l11_n282()
+ fun_l12_n628
+end
+
+def fun_l11_n283()
+ fun_l12_n576
+end
+
+def fun_l11_n284()
+ fun_l12_n294
+end
+
+def fun_l11_n285()
+ fun_l12_n79
+end
+
+def fun_l11_n286()
+ fun_l12_n505
+end
+
+def fun_l11_n287()
+ fun_l12_n726
+end
+
+def fun_l11_n288()
+ fun_l12_n171
+end
+
+def fun_l11_n289()
+ fun_l12_n317
+end
+
+def fun_l11_n290()
+ fun_l12_n350
+end
+
+def fun_l11_n291()
+ fun_l12_n134
+end
+
+def fun_l11_n292()
+ fun_l12_n595
+end
+
+def fun_l11_n293()
+ fun_l12_n924
+end
+
+def fun_l11_n294()
+ fun_l12_n713
+end
+
+def fun_l11_n295()
+ fun_l12_n630
+end
+
+def fun_l11_n296()
+ fun_l12_n444
+end
+
+def fun_l11_n297()
+ fun_l12_n751
+end
+
+def fun_l11_n298()
+ fun_l12_n324
+end
+
+def fun_l11_n299()
+ fun_l12_n851
+end
+
+def fun_l11_n300()
+ fun_l12_n883
+end
+
+def fun_l11_n301()
+ fun_l12_n289
+end
+
+def fun_l11_n302()
+ fun_l12_n427
+end
+
+def fun_l11_n303()
+ fun_l12_n593
+end
+
+def fun_l11_n304()
+ fun_l12_n380
+end
+
+def fun_l11_n305()
+ fun_l12_n630
+end
+
+def fun_l11_n306()
+ fun_l12_n245
+end
+
+def fun_l11_n307()
+ fun_l12_n369
+end
+
+def fun_l11_n308()
+ fun_l12_n641
+end
+
+def fun_l11_n309()
+ fun_l12_n271
+end
+
+def fun_l11_n310()
+ fun_l12_n67
+end
+
+def fun_l11_n311()
+ fun_l12_n109
+end
+
+def fun_l11_n312()
+ fun_l12_n559
+end
+
+def fun_l11_n313()
+ fun_l12_n211
+end
+
+def fun_l11_n314()
+ fun_l12_n396
+end
+
+def fun_l11_n315()
+ fun_l12_n390
+end
+
+def fun_l11_n316()
+ fun_l12_n72
+end
+
+def fun_l11_n317()
+ fun_l12_n13
+end
+
+def fun_l11_n318()
+ fun_l12_n690
+end
+
+def fun_l11_n319()
+ fun_l12_n104
+end
+
+def fun_l11_n320()
+ fun_l12_n671
+end
+
+def fun_l11_n321()
+ fun_l12_n506
+end
+
+def fun_l11_n322()
+ fun_l12_n679
+end
+
+def fun_l11_n323()
+ fun_l12_n809
+end
+
+def fun_l11_n324()
+ fun_l12_n750
+end
+
+def fun_l11_n325()
+ fun_l12_n754
+end
+
+def fun_l11_n326()
+ fun_l12_n6
+end
+
+def fun_l11_n327()
+ fun_l12_n522
+end
+
+def fun_l11_n328()
+ fun_l12_n414
+end
+
+def fun_l11_n329()
+ fun_l12_n934
+end
+
+def fun_l11_n330()
+ fun_l12_n653
+end
+
+def fun_l11_n331()
+ fun_l12_n290
+end
+
+def fun_l11_n332()
+ fun_l12_n262
+end
+
+def fun_l11_n333()
+ fun_l12_n933
+end
+
+def fun_l11_n334()
+ fun_l12_n332
+end
+
+def fun_l11_n335()
+ fun_l12_n882
+end
+
+def fun_l11_n336()
+ fun_l12_n448
+end
+
+def fun_l11_n337()
+ fun_l12_n5
+end
+
+def fun_l11_n338()
+ fun_l12_n993
+end
+
+def fun_l11_n339()
+ fun_l12_n354
+end
+
+def fun_l11_n340()
+ fun_l12_n643
+end
+
+def fun_l11_n341()
+ fun_l12_n85
+end
+
+def fun_l11_n342()
+ fun_l12_n957
+end
+
+def fun_l11_n343()
+ fun_l12_n581
+end
+
+def fun_l11_n344()
+ fun_l12_n837
+end
+
+def fun_l11_n345()
+ fun_l12_n210
+end
+
+def fun_l11_n346()
+ fun_l12_n45
+end
+
+def fun_l11_n347()
+ fun_l12_n672
+end
+
+def fun_l11_n348()
+ fun_l12_n559
+end
+
+def fun_l11_n349()
+ fun_l12_n76
+end
+
+def fun_l11_n350()
+ fun_l12_n500
+end
+
+def fun_l11_n351()
+ fun_l12_n23
+end
+
+def fun_l11_n352()
+ fun_l12_n364
+end
+
+def fun_l11_n353()
+ fun_l12_n72
+end
+
+def fun_l11_n354()
+ fun_l12_n953
+end
+
+def fun_l11_n355()
+ fun_l12_n104
+end
+
+def fun_l11_n356()
+ fun_l12_n446
+end
+
+def fun_l11_n357()
+ fun_l12_n231
+end
+
+def fun_l11_n358()
+ fun_l12_n923
+end
+
+def fun_l11_n359()
+ fun_l12_n396
+end
+
+def fun_l11_n360()
+ fun_l12_n748
+end
+
+def fun_l11_n361()
+ fun_l12_n168
+end
+
+def fun_l11_n362()
+ fun_l12_n329
+end
+
+def fun_l11_n363()
+ fun_l12_n843
+end
+
+def fun_l11_n364()
+ fun_l12_n864
+end
+
+def fun_l11_n365()
+ fun_l12_n163
+end
+
+def fun_l11_n366()
+ fun_l12_n811
+end
+
+def fun_l11_n367()
+ fun_l12_n7
+end
+
+def fun_l11_n368()
+ fun_l12_n105
+end
+
+def fun_l11_n369()
+ fun_l12_n367
+end
+
+def fun_l11_n370()
+ fun_l12_n650
+end
+
+def fun_l11_n371()
+ fun_l12_n966
+end
+
+def fun_l11_n372()
+ fun_l12_n248
+end
+
+def fun_l11_n373()
+ fun_l12_n431
+end
+
+def fun_l11_n374()
+ fun_l12_n329
+end
+
+def fun_l11_n375()
+ fun_l12_n788
+end
+
+def fun_l11_n376()
+ fun_l12_n407
+end
+
+def fun_l11_n377()
+ fun_l12_n551
+end
+
+def fun_l11_n378()
+ fun_l12_n703
+end
+
+def fun_l11_n379()
+ fun_l12_n414
+end
+
+def fun_l11_n380()
+ fun_l12_n23
+end
+
+def fun_l11_n381()
+ fun_l12_n747
+end
+
+def fun_l11_n382()
+ fun_l12_n10
+end
+
+def fun_l11_n383()
+ fun_l12_n943
+end
+
+def fun_l11_n384()
+ fun_l12_n26
+end
+
+def fun_l11_n385()
+ fun_l12_n459
+end
+
+def fun_l11_n386()
+ fun_l12_n256
+end
+
+def fun_l11_n387()
+ fun_l12_n606
+end
+
+def fun_l11_n388()
+ fun_l12_n138
+end
+
+def fun_l11_n389()
+ fun_l12_n371
+end
+
+def fun_l11_n390()
+ fun_l12_n304
+end
+
+def fun_l11_n391()
+ fun_l12_n459
+end
+
+def fun_l11_n392()
+ fun_l12_n968
+end
+
+def fun_l11_n393()
+ fun_l12_n153
+end
+
+def fun_l11_n394()
+ fun_l12_n742
+end
+
+def fun_l11_n395()
+ fun_l12_n617
+end
+
+def fun_l11_n396()
+ fun_l12_n562
+end
+
+def fun_l11_n397()
+ fun_l12_n474
+end
+
+def fun_l11_n398()
+ fun_l12_n633
+end
+
+def fun_l11_n399()
+ fun_l12_n950
+end
+
+def fun_l11_n400()
+ fun_l12_n370
+end
+
+def fun_l11_n401()
+ fun_l12_n301
+end
+
+def fun_l11_n402()
+ fun_l12_n74
+end
+
+def fun_l11_n403()
+ fun_l12_n759
+end
+
+def fun_l11_n404()
+ fun_l12_n634
+end
+
+def fun_l11_n405()
+ fun_l12_n678
+end
+
+def fun_l11_n406()
+ fun_l12_n761
+end
+
+def fun_l11_n407()
+ fun_l12_n669
+end
+
+def fun_l11_n408()
+ fun_l12_n737
+end
+
+def fun_l11_n409()
+ fun_l12_n666
+end
+
+def fun_l11_n410()
+ fun_l12_n43
+end
+
+def fun_l11_n411()
+ fun_l12_n64
+end
+
+def fun_l11_n412()
+ fun_l12_n956
+end
+
+def fun_l11_n413()
+ fun_l12_n749
+end
+
+def fun_l11_n414()
+ fun_l12_n22
+end
+
+def fun_l11_n415()
+ fun_l12_n170
+end
+
+def fun_l11_n416()
+ fun_l12_n113
+end
+
+def fun_l11_n417()
+ fun_l12_n780
+end
+
+def fun_l11_n418()
+ fun_l12_n855
+end
+
+def fun_l11_n419()
+ fun_l12_n551
+end
+
+def fun_l11_n420()
+ fun_l12_n101
+end
+
+def fun_l11_n421()
+ fun_l12_n543
+end
+
+def fun_l11_n422()
+ fun_l12_n773
+end
+
+def fun_l11_n423()
+ fun_l12_n13
+end
+
+def fun_l11_n424()
+ fun_l12_n997
+end
+
+def fun_l11_n425()
+ fun_l12_n199
+end
+
+def fun_l11_n426()
+ fun_l12_n281
+end
+
+def fun_l11_n427()
+ fun_l12_n685
+end
+
+def fun_l11_n428()
+ fun_l12_n588
+end
+
+def fun_l11_n429()
+ fun_l12_n693
+end
+
+def fun_l11_n430()
+ fun_l12_n595
+end
+
+def fun_l11_n431()
+ fun_l12_n632
+end
+
+def fun_l11_n432()
+ fun_l12_n923
+end
+
+def fun_l11_n433()
+ fun_l12_n388
+end
+
+def fun_l11_n434()
+ fun_l12_n307
+end
+
+def fun_l11_n435()
+ fun_l12_n169
+end
+
+def fun_l11_n436()
+ fun_l12_n13
+end
+
+def fun_l11_n437()
+ fun_l12_n207
+end
+
+def fun_l11_n438()
+ fun_l12_n711
+end
+
+def fun_l11_n439()
+ fun_l12_n649
+end
+
+def fun_l11_n440()
+ fun_l12_n817
+end
+
+def fun_l11_n441()
+ fun_l12_n280
+end
+
+def fun_l11_n442()
+ fun_l12_n833
+end
+
+def fun_l11_n443()
+ fun_l12_n962
+end
+
+def fun_l11_n444()
+ fun_l12_n431
+end
+
+def fun_l11_n445()
+ fun_l12_n564
+end
+
+def fun_l11_n446()
+ fun_l12_n107
+end
+
+def fun_l11_n447()
+ fun_l12_n504
+end
+
+def fun_l11_n448()
+ fun_l12_n680
+end
+
+def fun_l11_n449()
+ fun_l12_n653
+end
+
+def fun_l11_n450()
+ fun_l12_n549
+end
+
+def fun_l11_n451()
+ fun_l12_n34
+end
+
+def fun_l11_n452()
+ fun_l12_n607
+end
+
+def fun_l11_n453()
+ fun_l12_n831
+end
+
+def fun_l11_n454()
+ fun_l12_n974
+end
+
+def fun_l11_n455()
+ fun_l12_n815
+end
+
+def fun_l11_n456()
+ fun_l12_n700
+end
+
+def fun_l11_n457()
+ fun_l12_n583
+end
+
+def fun_l11_n458()
+ fun_l12_n479
+end
+
+def fun_l11_n459()
+ fun_l12_n815
+end
+
+def fun_l11_n460()
+ fun_l12_n45
+end
+
+def fun_l11_n461()
+ fun_l12_n740
+end
+
+def fun_l11_n462()
+ fun_l12_n637
+end
+
+def fun_l11_n463()
+ fun_l12_n568
+end
+
+def fun_l11_n464()
+ fun_l12_n340
+end
+
+def fun_l11_n465()
+ fun_l12_n532
+end
+
+def fun_l11_n466()
+ fun_l12_n13
+end
+
+def fun_l11_n467()
+ fun_l12_n479
+end
+
+def fun_l11_n468()
+ fun_l12_n263
+end
+
+def fun_l11_n469()
+ fun_l12_n109
+end
+
+def fun_l11_n470()
+ fun_l12_n290
+end
+
+def fun_l11_n471()
+ fun_l12_n85
+end
+
+def fun_l11_n472()
+ fun_l12_n360
+end
+
+def fun_l11_n473()
+ fun_l12_n33
+end
+
+def fun_l11_n474()
+ fun_l12_n603
+end
+
+def fun_l11_n475()
+ fun_l12_n82
+end
+
+def fun_l11_n476()
+ fun_l12_n250
+end
+
+def fun_l11_n477()
+ fun_l12_n233
+end
+
+def fun_l11_n478()
+ fun_l12_n530
+end
+
+def fun_l11_n479()
+ fun_l12_n619
+end
+
+def fun_l11_n480()
+ fun_l12_n756
+end
+
+def fun_l11_n481()
+ fun_l12_n681
+end
+
+def fun_l11_n482()
+ fun_l12_n981
+end
+
+def fun_l11_n483()
+ fun_l12_n308
+end
+
+def fun_l11_n484()
+ fun_l12_n955
+end
+
+def fun_l11_n485()
+ fun_l12_n197
+end
+
+def fun_l11_n486()
+ fun_l12_n620
+end
+
+def fun_l11_n487()
+ fun_l12_n485
+end
+
+def fun_l11_n488()
+ fun_l12_n866
+end
+
+def fun_l11_n489()
+ fun_l12_n502
+end
+
+def fun_l11_n490()
+ fun_l12_n16
+end
+
+def fun_l11_n491()
+ fun_l12_n727
+end
+
+def fun_l11_n492()
+ fun_l12_n13
+end
+
+def fun_l11_n493()
+ fun_l12_n268
+end
+
+def fun_l11_n494()
+ fun_l12_n501
+end
+
+def fun_l11_n495()
+ fun_l12_n303
+end
+
+def fun_l11_n496()
+ fun_l12_n223
+end
+
+def fun_l11_n497()
+ fun_l12_n623
+end
+
+def fun_l11_n498()
+ fun_l12_n479
+end
+
+def fun_l11_n499()
+ fun_l12_n310
+end
+
+def fun_l11_n500()
+ fun_l12_n337
+end
+
+def fun_l11_n501()
+ fun_l12_n406
+end
+
+def fun_l11_n502()
+ fun_l12_n727
+end
+
+def fun_l11_n503()
+ fun_l12_n329
+end
+
+def fun_l11_n504()
+ fun_l12_n675
+end
+
+def fun_l11_n505()
+ fun_l12_n41
+end
+
+def fun_l11_n506()
+ fun_l12_n176
+end
+
+def fun_l11_n507()
+ fun_l12_n277
+end
+
+def fun_l11_n508()
+ fun_l12_n767
+end
+
+def fun_l11_n509()
+ fun_l12_n863
+end
+
+def fun_l11_n510()
+ fun_l12_n459
+end
+
+def fun_l11_n511()
+ fun_l12_n360
+end
+
+def fun_l11_n512()
+ fun_l12_n870
+end
+
+def fun_l11_n513()
+ fun_l12_n939
+end
+
+def fun_l11_n514()
+ fun_l12_n697
+end
+
+def fun_l11_n515()
+ fun_l12_n91
+end
+
+def fun_l11_n516()
+ fun_l12_n382
+end
+
+def fun_l11_n517()
+ fun_l12_n649
+end
+
+def fun_l11_n518()
+ fun_l12_n455
+end
+
+def fun_l11_n519()
+ fun_l12_n52
+end
+
+def fun_l11_n520()
+ fun_l12_n857
+end
+
+def fun_l11_n521()
+ fun_l12_n110
+end
+
+def fun_l11_n522()
+ fun_l12_n21
+end
+
+def fun_l11_n523()
+ fun_l12_n786
+end
+
+def fun_l11_n524()
+ fun_l12_n56
+end
+
+def fun_l11_n525()
+ fun_l12_n558
+end
+
+def fun_l11_n526()
+ fun_l12_n923
+end
+
+def fun_l11_n527()
+ fun_l12_n716
+end
+
+def fun_l11_n528()
+ fun_l12_n20
+end
+
+def fun_l11_n529()
+ fun_l12_n503
+end
+
+def fun_l11_n530()
+ fun_l12_n221
+end
+
+def fun_l11_n531()
+ fun_l12_n364
+end
+
+def fun_l11_n532()
+ fun_l12_n412
+end
+
+def fun_l11_n533()
+ fun_l12_n925
+end
+
+def fun_l11_n534()
+ fun_l12_n638
+end
+
+def fun_l11_n535()
+ fun_l12_n413
+end
+
+def fun_l11_n536()
+ fun_l12_n873
+end
+
+def fun_l11_n537()
+ fun_l12_n499
+end
+
+def fun_l11_n538()
+ fun_l12_n231
+end
+
+def fun_l11_n539()
+ fun_l12_n450
+end
+
+def fun_l11_n540()
+ fun_l12_n137
+end
+
+def fun_l11_n541()
+ fun_l12_n516
+end
+
+def fun_l11_n542()
+ fun_l12_n479
+end
+
+def fun_l11_n543()
+ fun_l12_n541
+end
+
+def fun_l11_n544()
+ fun_l12_n42
+end
+
+def fun_l11_n545()
+ fun_l12_n207
+end
+
+def fun_l11_n546()
+ fun_l12_n340
+end
+
+def fun_l11_n547()
+ fun_l12_n888
+end
+
+def fun_l11_n548()
+ fun_l12_n443
+end
+
+def fun_l11_n549()
+ fun_l12_n375
+end
+
+def fun_l11_n550()
+ fun_l12_n972
+end
+
+def fun_l11_n551()
+ fun_l12_n622
+end
+
+def fun_l11_n552()
+ fun_l12_n958
+end
+
+def fun_l11_n553()
+ fun_l12_n279
+end
+
+def fun_l11_n554()
+ fun_l12_n498
+end
+
+def fun_l11_n555()
+ fun_l12_n498
+end
+
+def fun_l11_n556()
+ fun_l12_n502
+end
+
+def fun_l11_n557()
+ fun_l12_n113
+end
+
+def fun_l11_n558()
+ fun_l12_n636
+end
+
+def fun_l11_n559()
+ fun_l12_n525
+end
+
+def fun_l11_n560()
+ fun_l12_n541
+end
+
+def fun_l11_n561()
+ fun_l12_n336
+end
+
+def fun_l11_n562()
+ fun_l12_n787
+end
+
+def fun_l11_n563()
+ fun_l12_n858
+end
+
+def fun_l11_n564()
+ fun_l12_n772
+end
+
+def fun_l11_n565()
+ fun_l12_n831
+end
+
+def fun_l11_n566()
+ fun_l12_n95
+end
+
+def fun_l11_n567()
+ fun_l12_n927
+end
+
+def fun_l11_n568()
+ fun_l12_n888
+end
+
+def fun_l11_n569()
+ fun_l12_n444
+end
+
+def fun_l11_n570()
+ fun_l12_n23
+end
+
+def fun_l11_n571()
+ fun_l12_n995
+end
+
+def fun_l11_n572()
+ fun_l12_n372
+end
+
+def fun_l11_n573()
+ fun_l12_n432
+end
+
+def fun_l11_n574()
+ fun_l12_n156
+end
+
+def fun_l11_n575()
+ fun_l12_n981
+end
+
+def fun_l11_n576()
+ fun_l12_n328
+end
+
+def fun_l11_n577()
+ fun_l12_n411
+end
+
+def fun_l11_n578()
+ fun_l12_n734
+end
+
+def fun_l11_n579()
+ fun_l12_n646
+end
+
+def fun_l11_n580()
+ fun_l12_n214
+end
+
+def fun_l11_n581()
+ fun_l12_n334
+end
+
+def fun_l11_n582()
+ fun_l12_n800
+end
+
+def fun_l11_n583()
+ fun_l12_n344
+end
+
+def fun_l11_n584()
+ fun_l12_n672
+end
+
+def fun_l11_n585()
+ fun_l12_n403
+end
+
+def fun_l11_n586()
+ fun_l12_n351
+end
+
+def fun_l11_n587()
+ fun_l12_n506
+end
+
+def fun_l11_n588()
+ fun_l12_n878
+end
+
+def fun_l11_n589()
+ fun_l12_n986
+end
+
+def fun_l11_n590()
+ fun_l12_n524
+end
+
+def fun_l11_n591()
+ fun_l12_n552
+end
+
+def fun_l11_n592()
+ fun_l12_n735
+end
+
+def fun_l11_n593()
+ fun_l12_n953
+end
+
+def fun_l11_n594()
+ fun_l12_n138
+end
+
+def fun_l11_n595()
+ fun_l12_n185
+end
+
+def fun_l11_n596()
+ fun_l12_n865
+end
+
+def fun_l11_n597()
+ fun_l12_n143
+end
+
+def fun_l11_n598()
+ fun_l12_n879
+end
+
+def fun_l11_n599()
+ fun_l12_n751
+end
+
+def fun_l11_n600()
+ fun_l12_n750
+end
+
+def fun_l11_n601()
+ fun_l12_n574
+end
+
+def fun_l11_n602()
+ fun_l12_n91
+end
+
+def fun_l11_n603()
+ fun_l12_n116
+end
+
+def fun_l11_n604()
+ fun_l12_n398
+end
+
+def fun_l11_n605()
+ fun_l12_n782
+end
+
+def fun_l11_n606()
+ fun_l12_n770
+end
+
+def fun_l11_n607()
+ fun_l12_n240
+end
+
+def fun_l11_n608()
+ fun_l12_n385
+end
+
+def fun_l11_n609()
+ fun_l12_n106
+end
+
+def fun_l11_n610()
+ fun_l12_n959
+end
+
+def fun_l11_n611()
+ fun_l12_n84
+end
+
+def fun_l11_n612()
+ fun_l12_n235
+end
+
+def fun_l11_n613()
+ fun_l12_n429
+end
+
+def fun_l11_n614()
+ fun_l12_n402
+end
+
+def fun_l11_n615()
+ fun_l12_n32
+end
+
+def fun_l11_n616()
+ fun_l12_n517
+end
+
+def fun_l11_n617()
+ fun_l12_n304
+end
+
+def fun_l11_n618()
+ fun_l12_n374
+end
+
+def fun_l11_n619()
+ fun_l12_n884
+end
+
+def fun_l11_n620()
+ fun_l12_n399
+end
+
+def fun_l11_n621()
+ fun_l12_n721
+end
+
+def fun_l11_n622()
+ fun_l12_n58
+end
+
+def fun_l11_n623()
+ fun_l12_n237
+end
+
+def fun_l11_n624()
+ fun_l12_n659
+end
+
+def fun_l11_n625()
+ fun_l12_n454
+end
+
+def fun_l11_n626()
+ fun_l12_n942
+end
+
+def fun_l11_n627()
+ fun_l12_n975
+end
+
+def fun_l11_n628()
+ fun_l12_n192
+end
+
+def fun_l11_n629()
+ fun_l12_n590
+end
+
+def fun_l11_n630()
+ fun_l12_n340
+end
+
+def fun_l11_n631()
+ fun_l12_n229
+end
+
+def fun_l11_n632()
+ fun_l12_n478
+end
+
+def fun_l11_n633()
+ fun_l12_n84
+end
+
+def fun_l11_n634()
+ fun_l12_n280
+end
+
+def fun_l11_n635()
+ fun_l12_n896
+end
+
+def fun_l11_n636()
+ fun_l12_n872
+end
+
+def fun_l11_n637()
+ fun_l12_n924
+end
+
+def fun_l11_n638()
+ fun_l12_n957
+end
+
+def fun_l11_n639()
+ fun_l12_n252
+end
+
+def fun_l11_n640()
+ fun_l12_n308
+end
+
+def fun_l11_n641()
+ fun_l12_n217
+end
+
+def fun_l11_n642()
+ fun_l12_n477
+end
+
+def fun_l11_n643()
+ fun_l12_n754
+end
+
+def fun_l11_n644()
+ fun_l12_n561
+end
+
+def fun_l11_n645()
+ fun_l12_n597
+end
+
+def fun_l11_n646()
+ fun_l12_n194
+end
+
+def fun_l11_n647()
+ fun_l12_n708
+end
+
+def fun_l11_n648()
+ fun_l12_n892
+end
+
+def fun_l11_n649()
+ fun_l12_n771
+end
+
+def fun_l11_n650()
+ fun_l12_n549
+end
+
+def fun_l11_n651()
+ fun_l12_n84
+end
+
+def fun_l11_n652()
+ fun_l12_n256
+end
+
+def fun_l11_n653()
+ fun_l12_n454
+end
+
+def fun_l11_n654()
+ fun_l12_n773
+end
+
+def fun_l11_n655()
+ fun_l12_n674
+end
+
+def fun_l11_n656()
+ fun_l12_n364
+end
+
+def fun_l11_n657()
+ fun_l12_n548
+end
+
+def fun_l11_n658()
+ fun_l12_n287
+end
+
+def fun_l11_n659()
+ fun_l12_n211
+end
+
+def fun_l11_n660()
+ fun_l12_n213
+end
+
+def fun_l11_n661()
+ fun_l12_n975
+end
+
+def fun_l11_n662()
+ fun_l12_n221
+end
+
+def fun_l11_n663()
+ fun_l12_n524
+end
+
+def fun_l11_n664()
+ fun_l12_n167
+end
+
+def fun_l11_n665()
+ fun_l12_n361
+end
+
+def fun_l11_n666()
+ fun_l12_n435
+end
+
+def fun_l11_n667()
+ fun_l12_n881
+end
+
+def fun_l11_n668()
+ fun_l12_n977
+end
+
+def fun_l11_n669()
+ fun_l12_n87
+end
+
+def fun_l11_n670()
+ fun_l12_n281
+end
+
+def fun_l11_n671()
+ fun_l12_n44
+end
+
+def fun_l11_n672()
+ fun_l12_n584
+end
+
+def fun_l11_n673()
+ fun_l12_n645
+end
+
+def fun_l11_n674()
+ fun_l12_n268
+end
+
+def fun_l11_n675()
+ fun_l12_n98
+end
+
+def fun_l11_n676()
+ fun_l12_n861
+end
+
+def fun_l11_n677()
+ fun_l12_n9
+end
+
+def fun_l11_n678()
+ fun_l12_n91
+end
+
+def fun_l11_n679()
+ fun_l12_n976
+end
+
+def fun_l11_n680()
+ fun_l12_n373
+end
+
+def fun_l11_n681()
+ fun_l12_n673
+end
+
+def fun_l11_n682()
+ fun_l12_n206
+end
+
+def fun_l11_n683()
+ fun_l12_n838
+end
+
+def fun_l11_n684()
+ fun_l12_n972
+end
+
+def fun_l11_n685()
+ fun_l12_n607
+end
+
+def fun_l11_n686()
+ fun_l12_n55
+end
+
+def fun_l11_n687()
+ fun_l12_n294
+end
+
+def fun_l11_n688()
+ fun_l12_n871
+end
+
+def fun_l11_n689()
+ fun_l12_n518
+end
+
+def fun_l11_n690()
+ fun_l12_n552
+end
+
+def fun_l11_n691()
+ fun_l12_n622
+end
+
+def fun_l11_n692()
+ fun_l12_n505
+end
+
+def fun_l11_n693()
+ fun_l12_n33
+end
+
+def fun_l11_n694()
+ fun_l12_n522
+end
+
+def fun_l11_n695()
+ fun_l12_n729
+end
+
+def fun_l11_n696()
+ fun_l12_n477
+end
+
+def fun_l11_n697()
+ fun_l12_n424
+end
+
+def fun_l11_n698()
+ fun_l12_n258
+end
+
+def fun_l11_n699()
+ fun_l12_n328
+end
+
+def fun_l11_n700()
+ fun_l12_n501
+end
+
+def fun_l11_n701()
+ fun_l12_n841
+end
+
+def fun_l11_n702()
+ fun_l12_n684
+end
+
+def fun_l11_n703()
+ fun_l12_n864
+end
+
+def fun_l11_n704()
+ fun_l12_n527
+end
+
+def fun_l11_n705()
+ fun_l12_n808
+end
+
+def fun_l11_n706()
+ fun_l12_n213
+end
+
+def fun_l11_n707()
+ fun_l12_n711
+end
+
+def fun_l11_n708()
+ fun_l12_n727
+end
+
+def fun_l11_n709()
+ fun_l12_n82
+end
+
+def fun_l11_n710()
+ fun_l12_n926
+end
+
+def fun_l11_n711()
+ fun_l12_n719
+end
+
+def fun_l11_n712()
+ fun_l12_n180
+end
+
+def fun_l11_n713()
+ fun_l12_n568
+end
+
+def fun_l11_n714()
+ fun_l12_n11
+end
+
+def fun_l11_n715()
+ fun_l12_n624
+end
+
+def fun_l11_n716()
+ fun_l12_n954
+end
+
+def fun_l11_n717()
+ fun_l12_n584
+end
+
+def fun_l11_n718()
+ fun_l12_n222
+end
+
+def fun_l11_n719()
+ fun_l12_n460
+end
+
+def fun_l11_n720()
+ fun_l12_n253
+end
+
+def fun_l11_n721()
+ fun_l12_n938
+end
+
+def fun_l11_n722()
+ fun_l12_n552
+end
+
+def fun_l11_n723()
+ fun_l12_n491
+end
+
+def fun_l11_n724()
+ fun_l12_n146
+end
+
+def fun_l11_n725()
+ fun_l12_n833
+end
+
+def fun_l11_n726()
+ fun_l12_n43
+end
+
+def fun_l11_n727()
+ fun_l12_n700
+end
+
+def fun_l11_n728()
+ fun_l12_n730
+end
+
+def fun_l11_n729()
+ fun_l12_n84
+end
+
+def fun_l11_n730()
+ fun_l12_n468
+end
+
+def fun_l11_n731()
+ fun_l12_n253
+end
+
+def fun_l11_n732()
+ fun_l12_n473
+end
+
+def fun_l11_n733()
+ fun_l12_n997
+end
+
+def fun_l11_n734()
+ fun_l12_n584
+end
+
+def fun_l11_n735()
+ fun_l12_n815
+end
+
+def fun_l11_n736()
+ fun_l12_n577
+end
+
+def fun_l11_n737()
+ fun_l12_n890
+end
+
+def fun_l11_n738()
+ fun_l12_n282
+end
+
+def fun_l11_n739()
+ fun_l12_n794
+end
+
+def fun_l11_n740()
+ fun_l12_n615
+end
+
+def fun_l11_n741()
+ fun_l12_n254
+end
+
+def fun_l11_n742()
+ fun_l12_n250
+end
+
+def fun_l11_n743()
+ fun_l12_n45
+end
+
+def fun_l11_n744()
+ fun_l12_n513
+end
+
+def fun_l11_n745()
+ fun_l12_n786
+end
+
+def fun_l11_n746()
+ fun_l12_n764
+end
+
+def fun_l11_n747()
+ fun_l12_n73
+end
+
+def fun_l11_n748()
+ fun_l12_n944
+end
+
+def fun_l11_n749()
+ fun_l12_n49
+end
+
+def fun_l11_n750()
+ fun_l12_n513
+end
+
+def fun_l11_n751()
+ fun_l12_n367
+end
+
+def fun_l11_n752()
+ fun_l12_n61
+end
+
+def fun_l11_n753()
+ fun_l12_n279
+end
+
+def fun_l11_n754()
+ fun_l12_n991
+end
+
+def fun_l11_n755()
+ fun_l12_n747
+end
+
+def fun_l11_n756()
+ fun_l12_n422
+end
+
+def fun_l11_n757()
+ fun_l12_n414
+end
+
+def fun_l11_n758()
+ fun_l12_n61
+end
+
+def fun_l11_n759()
+ fun_l12_n471
+end
+
+def fun_l11_n760()
+ fun_l12_n436
+end
+
+def fun_l11_n761()
+ fun_l12_n183
+end
+
+def fun_l11_n762()
+ fun_l12_n173
+end
+
+def fun_l11_n763()
+ fun_l12_n362
+end
+
+def fun_l11_n764()
+ fun_l12_n174
+end
+
+def fun_l11_n765()
+ fun_l12_n710
+end
+
+def fun_l11_n766()
+ fun_l12_n212
+end
+
+def fun_l11_n767()
+ fun_l12_n649
+end
+
+def fun_l11_n768()
+ fun_l12_n409
+end
+
+def fun_l11_n769()
+ fun_l12_n375
+end
+
+def fun_l11_n770()
+ fun_l12_n608
+end
+
+def fun_l11_n771()
+ fun_l12_n447
+end
+
+def fun_l11_n772()
+ fun_l12_n530
+end
+
+def fun_l11_n773()
+ fun_l12_n359
+end
+
+def fun_l11_n774()
+ fun_l12_n317
+end
+
+def fun_l11_n775()
+ fun_l12_n105
+end
+
+def fun_l11_n776()
+ fun_l12_n65
+end
+
+def fun_l11_n777()
+ fun_l12_n243
+end
+
+def fun_l11_n778()
+ fun_l12_n274
+end
+
+def fun_l11_n779()
+ fun_l12_n560
+end
+
+def fun_l11_n780()
+ fun_l12_n155
+end
+
+def fun_l11_n781()
+ fun_l12_n277
+end
+
+def fun_l11_n782()
+ fun_l12_n255
+end
+
+def fun_l11_n783()
+ fun_l12_n184
+end
+
+def fun_l11_n784()
+ fun_l12_n495
+end
+
+def fun_l11_n785()
+ fun_l12_n910
+end
+
+def fun_l11_n786()
+ fun_l12_n245
+end
+
+def fun_l11_n787()
+ fun_l12_n761
+end
+
+def fun_l11_n788()
+ fun_l12_n501
+end
+
+def fun_l11_n789()
+ fun_l12_n11
+end
+
+def fun_l11_n790()
+ fun_l12_n87
+end
+
+def fun_l11_n791()
+ fun_l12_n233
+end
+
+def fun_l11_n792()
+ fun_l12_n201
+end
+
+def fun_l11_n793()
+ fun_l12_n471
+end
+
+def fun_l11_n794()
+ fun_l12_n6
+end
+
+def fun_l11_n795()
+ fun_l12_n257
+end
+
+def fun_l11_n796()
+ fun_l12_n104
+end
+
+def fun_l11_n797()
+ fun_l12_n712
+end
+
+def fun_l11_n798()
+ fun_l12_n408
+end
+
+def fun_l11_n799()
+ fun_l12_n713
+end
+
+def fun_l11_n800()
+ fun_l12_n622
+end
+
+def fun_l11_n801()
+ fun_l12_n498
+end
+
+def fun_l11_n802()
+ fun_l12_n904
+end
+
+def fun_l11_n803()
+ fun_l12_n413
+end
+
+def fun_l11_n804()
+ fun_l12_n424
+end
+
+def fun_l11_n805()
+ fun_l12_n209
+end
+
+def fun_l11_n806()
+ fun_l12_n171
+end
+
+def fun_l11_n807()
+ fun_l12_n835
+end
+
+def fun_l11_n808()
+ fun_l12_n872
+end
+
+def fun_l11_n809()
+ fun_l12_n456
+end
+
+def fun_l11_n810()
+ fun_l12_n586
+end
+
+def fun_l11_n811()
+ fun_l12_n422
+end
+
+def fun_l11_n812()
+ fun_l12_n125
+end
+
+def fun_l11_n813()
+ fun_l12_n482
+end
+
+def fun_l11_n814()
+ fun_l12_n17
+end
+
+def fun_l11_n815()
+ fun_l12_n966
+end
+
+def fun_l11_n816()
+ fun_l12_n408
+end
+
+def fun_l11_n817()
+ fun_l12_n874
+end
+
+def fun_l11_n818()
+ fun_l12_n454
+end
+
+def fun_l11_n819()
+ fun_l12_n818
+end
+
+def fun_l11_n820()
+ fun_l12_n469
+end
+
+def fun_l11_n821()
+ fun_l12_n104
+end
+
+def fun_l11_n822()
+ fun_l12_n765
+end
+
+def fun_l11_n823()
+ fun_l12_n472
+end
+
+def fun_l11_n824()
+ fun_l12_n794
+end
+
+def fun_l11_n825()
+ fun_l12_n609
+end
+
+def fun_l11_n826()
+ fun_l12_n609
+end
+
+def fun_l11_n827()
+ fun_l12_n99
+end
+
+def fun_l11_n828()
+ fun_l12_n844
+end
+
+def fun_l11_n829()
+ fun_l12_n423
+end
+
+def fun_l11_n830()
+ fun_l12_n560
+end
+
+def fun_l11_n831()
+ fun_l12_n60
+end
+
+def fun_l11_n832()
+ fun_l12_n670
+end
+
+def fun_l11_n833()
+ fun_l12_n591
+end
+
+def fun_l11_n834()
+ fun_l12_n572
+end
+
+def fun_l11_n835()
+ fun_l12_n96
+end
+
+def fun_l11_n836()
+ fun_l12_n567
+end
+
+def fun_l11_n837()
+ fun_l12_n239
+end
+
+def fun_l11_n838()
+ fun_l12_n937
+end
+
+def fun_l11_n839()
+ fun_l12_n853
+end
+
+def fun_l11_n840()
+ fun_l12_n440
+end
+
+def fun_l11_n841()
+ fun_l12_n930
+end
+
+def fun_l11_n842()
+ fun_l12_n448
+end
+
+def fun_l11_n843()
+ fun_l12_n185
+end
+
+def fun_l11_n844()
+ fun_l12_n904
+end
+
+def fun_l11_n845()
+ fun_l12_n399
+end
+
+def fun_l11_n846()
+ fun_l12_n184
+end
+
+def fun_l11_n847()
+ fun_l12_n985
+end
+
+def fun_l11_n848()
+ fun_l12_n966
+end
+
+def fun_l11_n849()
+ fun_l12_n183
+end
+
+def fun_l11_n850()
+ fun_l12_n418
+end
+
+def fun_l11_n851()
+ fun_l12_n546
+end
+
+def fun_l11_n852()
+ fun_l12_n96
+end
+
+def fun_l11_n853()
+ fun_l12_n172
+end
+
+def fun_l11_n854()
+ fun_l12_n546
+end
+
+def fun_l11_n855()
+ fun_l12_n86
+end
+
+def fun_l11_n856()
+ fun_l12_n815
+end
+
+def fun_l11_n857()
+ fun_l12_n552
+end
+
+def fun_l11_n858()
+ fun_l12_n657
+end
+
+def fun_l11_n859()
+ fun_l12_n567
+end
+
+def fun_l11_n860()
+ fun_l12_n561
+end
+
+def fun_l11_n861()
+ fun_l12_n590
+end
+
+def fun_l11_n862()
+ fun_l12_n28
+end
+
+def fun_l11_n863()
+ fun_l12_n935
+end
+
+def fun_l11_n864()
+ fun_l12_n950
+end
+
+def fun_l11_n865()
+ fun_l12_n946
+end
+
+def fun_l11_n866()
+ fun_l12_n77
+end
+
+def fun_l11_n867()
+ fun_l12_n454
+end
+
+def fun_l11_n868()
+ fun_l12_n813
+end
+
+def fun_l11_n869()
+ fun_l12_n562
+end
+
+def fun_l11_n870()
+ fun_l12_n598
+end
+
+def fun_l11_n871()
+ fun_l12_n331
+end
+
+def fun_l11_n872()
+ fun_l12_n156
+end
+
+def fun_l11_n873()
+ fun_l12_n807
+end
+
+def fun_l11_n874()
+ fun_l12_n442
+end
+
+def fun_l11_n875()
+ fun_l12_n322
+end
+
+def fun_l11_n876()
+ fun_l12_n472
+end
+
+def fun_l11_n877()
+ fun_l12_n581
+end
+
+def fun_l11_n878()
+ fun_l12_n94
+end
+
+def fun_l11_n879()
+ fun_l12_n270
+end
+
+def fun_l11_n880()
+ fun_l12_n63
+end
+
+def fun_l11_n881()
+ fun_l12_n290
+end
+
+def fun_l11_n882()
+ fun_l12_n148
+end
+
+def fun_l11_n883()
+ fun_l12_n862
+end
+
+def fun_l11_n884()
+ fun_l12_n527
+end
+
+def fun_l11_n885()
+ fun_l12_n166
+end
+
+def fun_l11_n886()
+ fun_l12_n422
+end
+
+def fun_l11_n887()
+ fun_l12_n195
+end
+
+def fun_l11_n888()
+ fun_l12_n592
+end
+
+def fun_l11_n889()
+ fun_l12_n116
+end
+
+def fun_l11_n890()
+ fun_l12_n923
+end
+
+def fun_l11_n891()
+ fun_l12_n422
+end
+
+def fun_l11_n892()
+ fun_l12_n945
+end
+
+def fun_l11_n893()
+ fun_l12_n850
+end
+
+def fun_l11_n894()
+ fun_l12_n598
+end
+
+def fun_l11_n895()
+ fun_l12_n448
+end
+
+def fun_l11_n896()
+ fun_l12_n955
+end
+
+def fun_l11_n897()
+ fun_l12_n259
+end
+
+def fun_l11_n898()
+ fun_l12_n145
+end
+
+def fun_l11_n899()
+ fun_l12_n321
+end
+
+def fun_l11_n900()
+ fun_l12_n680
+end
+
+def fun_l11_n901()
+ fun_l12_n856
+end
+
+def fun_l11_n902()
+ fun_l12_n776
+end
+
+def fun_l11_n903()
+ fun_l12_n108
+end
+
+def fun_l11_n904()
+ fun_l12_n340
+end
+
+def fun_l11_n905()
+ fun_l12_n78
+end
+
+def fun_l11_n906()
+ fun_l12_n218
+end
+
+def fun_l11_n907()
+ fun_l12_n288
+end
+
+def fun_l11_n908()
+ fun_l12_n197
+end
+
+def fun_l11_n909()
+ fun_l12_n890
+end
+
+def fun_l11_n910()
+ fun_l12_n850
+end
+
+def fun_l11_n911()
+ fun_l12_n964
+end
+
+def fun_l11_n912()
+ fun_l12_n47
+end
+
+def fun_l11_n913()
+ fun_l12_n462
+end
+
+def fun_l11_n914()
+ fun_l12_n461
+end
+
+def fun_l11_n915()
+ fun_l12_n57
+end
+
+def fun_l11_n916()
+ fun_l12_n938
+end
+
+def fun_l11_n917()
+ fun_l12_n841
+end
+
+def fun_l11_n918()
+ fun_l12_n462
+end
+
+def fun_l11_n919()
+ fun_l12_n425
+end
+
+def fun_l11_n920()
+ fun_l12_n775
+end
+
+def fun_l11_n921()
+ fun_l12_n302
+end
+
+def fun_l11_n922()
+ fun_l12_n921
+end
+
+def fun_l11_n923()
+ fun_l12_n322
+end
+
+def fun_l11_n924()
+ fun_l12_n414
+end
+
+def fun_l11_n925()
+ fun_l12_n461
+end
+
+def fun_l11_n926()
+ fun_l12_n476
+end
+
+def fun_l11_n927()
+ fun_l12_n537
+end
+
+def fun_l11_n928()
+ fun_l12_n359
+end
+
+def fun_l11_n929()
+ fun_l12_n297
+end
+
+def fun_l11_n930()
+ fun_l12_n134
+end
+
+def fun_l11_n931()
+ fun_l12_n875
+end
+
+def fun_l11_n932()
+ fun_l12_n763
+end
+
+def fun_l11_n933()
+ fun_l12_n180
+end
+
+def fun_l11_n934()
+ fun_l12_n522
+end
+
+def fun_l11_n935()
+ fun_l12_n701
+end
+
+def fun_l11_n936()
+ fun_l12_n793
+end
+
+def fun_l11_n937()
+ fun_l12_n853
+end
+
+def fun_l11_n938()
+ fun_l12_n208
+end
+
+def fun_l11_n939()
+ fun_l12_n307
+end
+
+def fun_l11_n940()
+ fun_l12_n695
+end
+
+def fun_l11_n941()
+ fun_l12_n171
+end
+
+def fun_l11_n942()
+ fun_l12_n181
+end
+
+def fun_l11_n943()
+ fun_l12_n58
+end
+
+def fun_l11_n944()
+ fun_l12_n733
+end
+
+def fun_l11_n945()
+ fun_l12_n7
+end
+
+def fun_l11_n946()
+ fun_l12_n332
+end
+
+def fun_l11_n947()
+ fun_l12_n323
+end
+
+def fun_l11_n948()
+ fun_l12_n240
+end
+
+def fun_l11_n949()
+ fun_l12_n21
+end
+
+def fun_l11_n950()
+ fun_l12_n814
+end
+
+def fun_l11_n951()
+ fun_l12_n943
+end
+
+def fun_l11_n952()
+ fun_l12_n4
+end
+
+def fun_l11_n953()
+ fun_l12_n747
+end
+
+def fun_l11_n954()
+ fun_l12_n500
+end
+
+def fun_l11_n955()
+ fun_l12_n361
+end
+
+def fun_l11_n956()
+ fun_l12_n898
+end
+
+def fun_l11_n957()
+ fun_l12_n216
+end
+
+def fun_l11_n958()
+ fun_l12_n58
+end
+
+def fun_l11_n959()
+ fun_l12_n327
+end
+
+def fun_l11_n960()
+ fun_l12_n405
+end
+
+def fun_l11_n961()
+ fun_l12_n665
+end
+
+def fun_l11_n962()
+ fun_l12_n456
+end
+
+def fun_l11_n963()
+ fun_l12_n399
+end
+
+def fun_l11_n964()
+ fun_l12_n836
+end
+
+def fun_l11_n965()
+ fun_l12_n18
+end
+
+def fun_l11_n966()
+ fun_l12_n236
+end
+
+def fun_l11_n967()
+ fun_l12_n594
+end
+
+def fun_l11_n968()
+ fun_l12_n147
+end
+
+def fun_l11_n969()
+ fun_l12_n758
+end
+
+def fun_l11_n970()
+ fun_l12_n271
+end
+
+def fun_l11_n971()
+ fun_l12_n551
+end
+
+def fun_l11_n972()
+ fun_l12_n332
+end
+
+def fun_l11_n973()
+ fun_l12_n348
+end
+
+def fun_l11_n974()
+ fun_l12_n158
+end
+
+def fun_l11_n975()
+ fun_l12_n990
+end
+
+def fun_l11_n976()
+ fun_l12_n330
+end
+
+def fun_l11_n977()
+ fun_l12_n764
+end
+
+def fun_l11_n978()
+ fun_l12_n844
+end
+
+def fun_l11_n979()
+ fun_l12_n452
+end
+
+def fun_l11_n980()
+ fun_l12_n593
+end
+
+def fun_l11_n981()
+ fun_l12_n762
+end
+
+def fun_l11_n982()
+ fun_l12_n736
+end
+
+def fun_l11_n983()
+ fun_l12_n957
+end
+
+def fun_l11_n984()
+ fun_l12_n174
+end
+
+def fun_l11_n985()
+ fun_l12_n454
+end
+
+def fun_l11_n986()
+ fun_l12_n492
+end
+
+def fun_l11_n987()
+ fun_l12_n986
+end
+
+def fun_l11_n988()
+ fun_l12_n868
+end
+
+def fun_l11_n989()
+ fun_l12_n445
+end
+
+def fun_l11_n990()
+ fun_l12_n422
+end
+
+def fun_l11_n991()
+ fun_l12_n877
+end
+
+def fun_l11_n992()
+ fun_l12_n150
+end
+
+def fun_l11_n993()
+ fun_l12_n163
+end
+
+def fun_l11_n994()
+ fun_l12_n183
+end
+
+def fun_l11_n995()
+ fun_l12_n100
+end
+
+def fun_l11_n996()
+ fun_l12_n297
+end
+
+def fun_l11_n997()
+ fun_l12_n43
+end
+
+def fun_l11_n998()
+ fun_l12_n324
+end
+
+def fun_l11_n999()
+ fun_l12_n732
+end
+
+def fun_l12_n0()
+ fun_l13_n595
+end
+
+def fun_l12_n1()
+ fun_l13_n185
+end
+
+def fun_l12_n2()
+ fun_l13_n257
+end
+
+def fun_l12_n3()
+ fun_l13_n865
+end
+
+def fun_l12_n4()
+ fun_l13_n857
+end
+
+def fun_l12_n5()
+ fun_l13_n9
+end
+
+def fun_l12_n6()
+ fun_l13_n41
+end
+
+def fun_l12_n7()
+ fun_l13_n430
+end
+
+def fun_l12_n8()
+ fun_l13_n394
+end
+
+def fun_l12_n9()
+ fun_l13_n20
+end
+
+def fun_l12_n10()
+ fun_l13_n527
+end
+
+def fun_l12_n11()
+ fun_l13_n158
+end
+
+def fun_l12_n12()
+ fun_l13_n229
+end
+
+def fun_l12_n13()
+ fun_l13_n205
+end
+
+def fun_l12_n14()
+ fun_l13_n88
+end
+
+def fun_l12_n15()
+ fun_l13_n359
+end
+
+def fun_l12_n16()
+ fun_l13_n204
+end
+
+def fun_l12_n17()
+ fun_l13_n297
+end
+
+def fun_l12_n18()
+ fun_l13_n531
+end
+
+def fun_l12_n19()
+ fun_l13_n244
+end
+
+def fun_l12_n20()
+ fun_l13_n587
+end
+
+def fun_l12_n21()
+ fun_l13_n731
+end
+
+def fun_l12_n22()
+ fun_l13_n839
+end
+
+def fun_l12_n23()
+ fun_l13_n560
+end
+
+def fun_l12_n24()
+ fun_l13_n22
+end
+
+def fun_l12_n25()
+ fun_l13_n383
+end
+
+def fun_l12_n26()
+ fun_l13_n321
+end
+
+def fun_l12_n27()
+ fun_l13_n286
+end
+
+def fun_l12_n28()
+ fun_l13_n951
+end
+
+def fun_l12_n29()
+ fun_l13_n172
+end
+
+def fun_l12_n30()
+ fun_l13_n804
+end
+
+def fun_l12_n31()
+ fun_l13_n619
+end
+
+def fun_l12_n32()
+ fun_l13_n464
+end
+
+def fun_l12_n33()
+ fun_l13_n87
+end
+
+def fun_l12_n34()
+ fun_l13_n544
+end
+
+def fun_l12_n35()
+ fun_l13_n37
+end
+
+def fun_l12_n36()
+ fun_l13_n614
+end
+
+def fun_l12_n37()
+ fun_l13_n426
+end
+
+def fun_l12_n38()
+ fun_l13_n335
+end
+
+def fun_l12_n39()
+ fun_l13_n689
+end
+
+def fun_l12_n40()
+ fun_l13_n220
+end
+
+def fun_l12_n41()
+ fun_l13_n77
+end
+
+def fun_l12_n42()
+ fun_l13_n791
+end
+
+def fun_l12_n43()
+ fun_l13_n514
+end
+
+def fun_l12_n44()
+ fun_l13_n802
+end
+
+def fun_l12_n45()
+ fun_l13_n860
+end
+
+def fun_l12_n46()
+ fun_l13_n562
+end
+
+def fun_l12_n47()
+ fun_l13_n208
+end
+
+def fun_l12_n48()
+ fun_l13_n167
+end
+
+def fun_l12_n49()
+ fun_l13_n772
+end
+
+def fun_l12_n50()
+ fun_l13_n303
+end
+
+def fun_l12_n51()
+ fun_l13_n757
+end
+
+def fun_l12_n52()
+ fun_l13_n558
+end
+
+def fun_l12_n53()
+ fun_l13_n45
+end
+
+def fun_l12_n54()
+ fun_l13_n292
+end
+
+def fun_l12_n55()
+ fun_l13_n558
+end
+
+def fun_l12_n56()
+ fun_l13_n361
+end
+
+def fun_l12_n57()
+ fun_l13_n605
+end
+
+def fun_l12_n58()
+ fun_l13_n16
+end
+
+def fun_l12_n59()
+ fun_l13_n73
+end
+
+def fun_l12_n60()
+ fun_l13_n292
+end
+
+def fun_l12_n61()
+ fun_l13_n747
+end
+
+def fun_l12_n62()
+ fun_l13_n798
+end
+
+def fun_l12_n63()
+ fun_l13_n130
+end
+
+def fun_l12_n64()
+ fun_l13_n261
+end
+
+def fun_l12_n65()
+ fun_l13_n122
+end
+
+def fun_l12_n66()
+ fun_l13_n346
+end
+
+def fun_l12_n67()
+ fun_l13_n308
+end
+
+def fun_l12_n68()
+ fun_l13_n27
+end
+
+def fun_l12_n69()
+ fun_l13_n433
+end
+
+def fun_l12_n70()
+ fun_l13_n509
+end
+
+def fun_l12_n71()
+ fun_l13_n643
+end
+
+def fun_l12_n72()
+ fun_l13_n462
+end
+
+def fun_l12_n73()
+ fun_l13_n976
+end
+
+def fun_l12_n74()
+ fun_l13_n157
+end
+
+def fun_l12_n75()
+ fun_l13_n733
+end
+
+def fun_l12_n76()
+ fun_l13_n976
+end
+
+def fun_l12_n77()
+ fun_l13_n369
+end
+
+def fun_l12_n78()
+ fun_l13_n308
+end
+
+def fun_l12_n79()
+ fun_l13_n958
+end
+
+def fun_l12_n80()
+ fun_l13_n95
+end
+
+def fun_l12_n81()
+ fun_l13_n653
+end
+
+def fun_l12_n82()
+ fun_l13_n624
+end
+
+def fun_l12_n83()
+ fun_l13_n712
+end
+
+def fun_l12_n84()
+ fun_l13_n950
+end
+
+def fun_l12_n85()
+ fun_l13_n836
+end
+
+def fun_l12_n86()
+ fun_l13_n496
+end
+
+def fun_l12_n87()
+ fun_l13_n727
+end
+
+def fun_l12_n88()
+ fun_l13_n368
+end
+
+def fun_l12_n89()
+ fun_l13_n727
+end
+
+def fun_l12_n90()
+ fun_l13_n682
+end
+
+def fun_l12_n91()
+ fun_l13_n758
+end
+
+def fun_l12_n92()
+ fun_l13_n910
+end
+
+def fun_l12_n93()
+ fun_l13_n490
+end
+
+def fun_l12_n94()
+ fun_l13_n405
+end
+
+def fun_l12_n95()
+ fun_l13_n171
+end
+
+def fun_l12_n96()
+ fun_l13_n69
+end
+
+def fun_l12_n97()
+ fun_l13_n519
+end
+
+def fun_l12_n98()
+ fun_l13_n476
+end
+
+def fun_l12_n99()
+ fun_l13_n399
+end
+
+def fun_l12_n100()
+ fun_l13_n93
+end
+
+def fun_l12_n101()
+ fun_l13_n220
+end
+
+def fun_l12_n102()
+ fun_l13_n483
+end
+
+def fun_l12_n103()
+ fun_l13_n176
+end
+
+def fun_l12_n104()
+ fun_l13_n210
+end
+
+def fun_l12_n105()
+ fun_l13_n111
+end
+
+def fun_l12_n106()
+ fun_l13_n436
+end
+
+def fun_l12_n107()
+ fun_l13_n887
+end
+
+def fun_l12_n108()
+ fun_l13_n118
+end
+
+def fun_l12_n109()
+ fun_l13_n630
+end
+
+def fun_l12_n110()
+ fun_l13_n262
+end
+
+def fun_l12_n111()
+ fun_l13_n975
+end
+
+def fun_l12_n112()
+ fun_l13_n280
+end
+
+def fun_l12_n113()
+ fun_l13_n341
+end
+
+def fun_l12_n114()
+ fun_l13_n452
+end
+
+def fun_l12_n115()
+ fun_l13_n762
+end
+
+def fun_l12_n116()
+ fun_l13_n230
+end
+
+def fun_l12_n117()
+ fun_l13_n470
+end
+
+def fun_l12_n118()
+ fun_l13_n257
+end
+
+def fun_l12_n119()
+ fun_l13_n920
+end
+
+def fun_l12_n120()
+ fun_l13_n600
+end
+
+def fun_l12_n121()
+ fun_l13_n947
+end
+
+def fun_l12_n122()
+ fun_l13_n643
+end
+
+def fun_l12_n123()
+ fun_l13_n18
+end
+
+def fun_l12_n124()
+ fun_l13_n680
+end
+
+def fun_l12_n125()
+ fun_l13_n926
+end
+
+def fun_l12_n126()
+ fun_l13_n841
+end
+
+def fun_l12_n127()
+ fun_l13_n391
+end
+
+def fun_l12_n128()
+ fun_l13_n617
+end
+
+def fun_l12_n129()
+ fun_l13_n484
+end
+
+def fun_l12_n130()
+ fun_l13_n211
+end
+
+def fun_l12_n131()
+ fun_l13_n206
+end
+
+def fun_l12_n132()
+ fun_l13_n789
+end
+
+def fun_l12_n133()
+ fun_l13_n660
+end
+
+def fun_l12_n134()
+ fun_l13_n386
+end
+
+def fun_l12_n135()
+ fun_l13_n414
+end
+
+def fun_l12_n136()
+ fun_l13_n271
+end
+
+def fun_l12_n137()
+ fun_l13_n444
+end
+
+def fun_l12_n138()
+ fun_l13_n661
+end
+
+def fun_l12_n139()
+ fun_l13_n784
+end
+
+def fun_l12_n140()
+ fun_l13_n919
+end
+
+def fun_l12_n141()
+ fun_l13_n29
+end
+
+def fun_l12_n142()
+ fun_l13_n92
+end
+
+def fun_l12_n143()
+ fun_l13_n380
+end
+
+def fun_l12_n144()
+ fun_l13_n826
+end
+
+def fun_l12_n145()
+ fun_l13_n222
+end
+
+def fun_l12_n146()
+ fun_l13_n891
+end
+
+def fun_l12_n147()
+ fun_l13_n162
+end
+
+def fun_l12_n148()
+ fun_l13_n737
+end
+
+def fun_l12_n149()
+ fun_l13_n342
+end
+
+def fun_l12_n150()
+ fun_l13_n371
+end
+
+def fun_l12_n151()
+ fun_l13_n903
+end
+
+def fun_l12_n152()
+ fun_l13_n556
+end
+
+def fun_l12_n153()
+ fun_l13_n333
+end
+
+def fun_l12_n154()
+ fun_l13_n193
+end
+
+def fun_l12_n155()
+ fun_l13_n518
+end
+
+def fun_l12_n156()
+ fun_l13_n411
+end
+
+def fun_l12_n157()
+ fun_l13_n249
+end
+
+def fun_l12_n158()
+ fun_l13_n53
+end
+
+def fun_l12_n159()
+ fun_l13_n467
+end
+
+def fun_l12_n160()
+ fun_l13_n433
+end
+
+def fun_l12_n161()
+ fun_l13_n773
+end
+
+def fun_l12_n162()
+ fun_l13_n178
+end
+
+def fun_l12_n163()
+ fun_l13_n641
+end
+
+def fun_l12_n164()
+ fun_l13_n308
+end
+
+def fun_l12_n165()
+ fun_l13_n787
+end
+
+def fun_l12_n166()
+ fun_l13_n829
+end
+
+def fun_l12_n167()
+ fun_l13_n929
+end
+
+def fun_l12_n168()
+ fun_l13_n788
+end
+
+def fun_l12_n169()
+ fun_l13_n948
+end
+
+def fun_l12_n170()
+ fun_l13_n444
+end
+
+def fun_l12_n171()
+ fun_l13_n946
+end
+
+def fun_l12_n172()
+ fun_l13_n303
+end
+
+def fun_l12_n173()
+ fun_l13_n196
+end
+
+def fun_l12_n174()
+ fun_l13_n521
+end
+
+def fun_l12_n175()
+ fun_l13_n372
+end
+
+def fun_l12_n176()
+ fun_l13_n411
+end
+
+def fun_l12_n177()
+ fun_l13_n434
+end
+
+def fun_l12_n178()
+ fun_l13_n599
+end
+
+def fun_l12_n179()
+ fun_l13_n507
+end
+
+def fun_l12_n180()
+ fun_l13_n781
+end
+
+def fun_l12_n181()
+ fun_l13_n186
+end
+
+def fun_l12_n182()
+ fun_l13_n737
+end
+
+def fun_l12_n183()
+ fun_l13_n993
+end
+
+def fun_l12_n184()
+ fun_l13_n806
+end
+
+def fun_l12_n185()
+ fun_l13_n45
+end
+
+def fun_l12_n186()
+ fun_l13_n30
+end
+
+def fun_l12_n187()
+ fun_l13_n774
+end
+
+def fun_l12_n188()
+ fun_l13_n715
+end
+
+def fun_l12_n189()
+ fun_l13_n351
+end
+
+def fun_l12_n190()
+ fun_l13_n173
+end
+
+def fun_l12_n191()
+ fun_l13_n574
+end
+
+def fun_l12_n192()
+ fun_l13_n768
+end
+
+def fun_l12_n193()
+ fun_l13_n514
+end
+
+def fun_l12_n194()
+ fun_l13_n505
+end
+
+def fun_l12_n195()
+ fun_l13_n460
+end
+
+def fun_l12_n196()
+ fun_l13_n377
+end
+
+def fun_l12_n197()
+ fun_l13_n275
+end
+
+def fun_l12_n198()
+ fun_l13_n642
+end
+
+def fun_l12_n199()
+ fun_l13_n746
+end
+
+def fun_l12_n200()
+ fun_l13_n507
+end
+
+def fun_l12_n201()
+ fun_l13_n576
+end
+
+def fun_l12_n202()
+ fun_l13_n899
+end
+
+def fun_l12_n203()
+ fun_l13_n88
+end
+
+def fun_l12_n204()
+ fun_l13_n735
+end
+
+def fun_l12_n205()
+ fun_l13_n270
+end
+
+def fun_l12_n206()
+ fun_l13_n398
+end
+
+def fun_l12_n207()
+ fun_l13_n98
+end
+
+def fun_l12_n208()
+ fun_l13_n272
+end
+
+def fun_l12_n209()
+ fun_l13_n493
+end
+
+def fun_l12_n210()
+ fun_l13_n893
+end
+
+def fun_l12_n211()
+ fun_l13_n550
+end
+
+def fun_l12_n212()
+ fun_l13_n428
+end
+
+def fun_l12_n213()
+ fun_l13_n20
+end
+
+def fun_l12_n214()
+ fun_l13_n437
+end
+
+def fun_l12_n215()
+ fun_l13_n964
+end
+
+def fun_l12_n216()
+ fun_l13_n880
+end
+
+def fun_l12_n217()
+ fun_l13_n119
+end
+
+def fun_l12_n218()
+ fun_l13_n125
+end
+
+def fun_l12_n219()
+ fun_l13_n48
+end
+
+def fun_l12_n220()
+ fun_l13_n749
+end
+
+def fun_l12_n221()
+ fun_l13_n65
+end
+
+def fun_l12_n222()
+ fun_l13_n535
+end
+
+def fun_l12_n223()
+ fun_l13_n770
+end
+
+def fun_l12_n224()
+ fun_l13_n118
+end
+
+def fun_l12_n225()
+ fun_l13_n859
+end
+
+def fun_l12_n226()
+ fun_l13_n768
+end
+
+def fun_l12_n227()
+ fun_l13_n981
+end
+
+def fun_l12_n228()
+ fun_l13_n518
+end
+
+def fun_l12_n229()
+ fun_l13_n361
+end
+
+def fun_l12_n230()
+ fun_l13_n255
+end
+
+def fun_l12_n231()
+ fun_l13_n922
+end
+
+def fun_l12_n232()
+ fun_l13_n375
+end
+
+def fun_l12_n233()
+ fun_l13_n265
+end
+
+def fun_l12_n234()
+ fun_l13_n832
+end
+
+def fun_l12_n235()
+ fun_l13_n147
+end
+
+def fun_l12_n236()
+ fun_l13_n162
+end
+
+def fun_l12_n237()
+ fun_l13_n832
+end
+
+def fun_l12_n238()
+ fun_l13_n930
+end
+
+def fun_l12_n239()
+ fun_l13_n429
+end
+
+def fun_l12_n240()
+ fun_l13_n429
+end
+
+def fun_l12_n241()
+ fun_l13_n152
+end
+
+def fun_l12_n242()
+ fun_l13_n287
+end
+
+def fun_l12_n243()
+ fun_l13_n140
+end
+
+def fun_l12_n244()
+ fun_l13_n994
+end
+
+def fun_l12_n245()
+ fun_l13_n815
+end
+
+def fun_l12_n246()
+ fun_l13_n865
+end
+
+def fun_l12_n247()
+ fun_l13_n613
+end
+
+def fun_l12_n248()
+ fun_l13_n347
+end
+
+def fun_l12_n249()
+ fun_l13_n959
+end
+
+def fun_l12_n250()
+ fun_l13_n870
+end
+
+def fun_l12_n251()
+ fun_l13_n167
+end
+
+def fun_l12_n252()
+ fun_l13_n860
+end
+
+def fun_l12_n253()
+ fun_l13_n897
+end
+
+def fun_l12_n254()
+ fun_l13_n605
+end
+
+def fun_l12_n255()
+ fun_l13_n136
+end
+
+def fun_l12_n256()
+ fun_l13_n636
+end
+
+def fun_l12_n257()
+ fun_l13_n60
+end
+
+def fun_l12_n258()
+ fun_l13_n925
+end
+
+def fun_l12_n259()
+ fun_l13_n472
+end
+
+def fun_l12_n260()
+ fun_l13_n423
+end
+
+def fun_l12_n261()
+ fun_l13_n798
+end
+
+def fun_l12_n262()
+ fun_l13_n381
+end
+
+def fun_l12_n263()
+ fun_l13_n922
+end
+
+def fun_l12_n264()
+ fun_l13_n923
+end
+
+def fun_l12_n265()
+ fun_l13_n644
+end
+
+def fun_l12_n266()
+ fun_l13_n334
+end
+
+def fun_l12_n267()
+ fun_l13_n201
+end
+
+def fun_l12_n268()
+ fun_l13_n690
+end
+
+def fun_l12_n269()
+ fun_l13_n699
+end
+
+def fun_l12_n270()
+ fun_l13_n269
+end
+
+def fun_l12_n271()
+ fun_l13_n582
+end
+
+def fun_l12_n272()
+ fun_l13_n513
+end
+
+def fun_l12_n273()
+ fun_l13_n723
+end
+
+def fun_l12_n274()
+ fun_l13_n757
+end
+
+def fun_l12_n275()
+ fun_l13_n390
+end
+
+def fun_l12_n276()
+ fun_l13_n459
+end
+
+def fun_l12_n277()
+ fun_l13_n973
+end
+
+def fun_l12_n278()
+ fun_l13_n762
+end
+
+def fun_l12_n279()
+ fun_l13_n829
+end
+
+def fun_l12_n280()
+ fun_l13_n706
+end
+
+def fun_l12_n281()
+ fun_l13_n769
+end
+
+def fun_l12_n282()
+ fun_l13_n736
+end
+
+def fun_l12_n283()
+ fun_l13_n931
+end
+
+def fun_l12_n284()
+ fun_l13_n226
+end
+
+def fun_l12_n285()
+ fun_l13_n688
+end
+
+def fun_l12_n286()
+ fun_l13_n74
+end
+
+def fun_l12_n287()
+ fun_l13_n470
+end
+
+def fun_l12_n288()
+ fun_l13_n932
+end
+
+def fun_l12_n289()
+ fun_l13_n923
+end
+
+def fun_l12_n290()
+ fun_l13_n53
+end
+
+def fun_l12_n291()
+ fun_l13_n113
+end
+
+def fun_l12_n292()
+ fun_l13_n115
+end
+
+def fun_l12_n293()
+ fun_l13_n864
+end
+
+def fun_l12_n294()
+ fun_l13_n503
+end
+
+def fun_l12_n295()
+ fun_l13_n998
+end
+
+def fun_l12_n296()
+ fun_l13_n637
+end
+
+def fun_l12_n297()
+ fun_l13_n655
+end
+
+def fun_l12_n298()
+ fun_l13_n50
+end
+
+def fun_l12_n299()
+ fun_l13_n564
+end
+
+def fun_l12_n300()
+ fun_l13_n39
+end
+
+def fun_l12_n301()
+ fun_l13_n836
+end
+
+def fun_l12_n302()
+ fun_l13_n85
+end
+
+def fun_l12_n303()
+ fun_l13_n992
+end
+
+def fun_l12_n304()
+ fun_l13_n956
+end
+
+def fun_l12_n305()
+ fun_l13_n746
+end
+
+def fun_l12_n306()
+ fun_l13_n281
+end
+
+def fun_l12_n307()
+ fun_l13_n790
+end
+
+def fun_l12_n308()
+ fun_l13_n69
+end
+
+def fun_l12_n309()
+ fun_l13_n296
+end
+
+def fun_l12_n310()
+ fun_l13_n239
+end
+
+def fun_l12_n311()
+ fun_l13_n451
+end
+
+def fun_l12_n312()
+ fun_l13_n756
+end
+
+def fun_l12_n313()
+ fun_l13_n339
+end
+
+def fun_l12_n314()
+ fun_l13_n438
+end
+
+def fun_l12_n315()
+ fun_l13_n840
+end
+
+def fun_l12_n316()
+ fun_l13_n903
+end
+
+def fun_l12_n317()
+ fun_l13_n506
+end
+
+def fun_l12_n318()
+ fun_l13_n529
+end
+
+def fun_l12_n319()
+ fun_l13_n242
+end
+
+def fun_l12_n320()
+ fun_l13_n658
+end
+
+def fun_l12_n321()
+ fun_l13_n34
+end
+
+def fun_l12_n322()
+ fun_l13_n89
+end
+
+def fun_l12_n323()
+ fun_l13_n29
+end
+
+def fun_l12_n324()
+ fun_l13_n981
+end
+
+def fun_l12_n325()
+ fun_l13_n463
+end
+
+def fun_l12_n326()
+ fun_l13_n889
+end
+
+def fun_l12_n327()
+ fun_l13_n583
+end
+
+def fun_l12_n328()
+ fun_l13_n291
+end
+
+def fun_l12_n329()
+ fun_l13_n618
+end
+
+def fun_l12_n330()
+ fun_l13_n660
+end
+
+def fun_l12_n331()
+ fun_l13_n545
+end
+
+def fun_l12_n332()
+ fun_l13_n817
+end
+
+def fun_l12_n333()
+ fun_l13_n399
+end
+
+def fun_l12_n334()
+ fun_l13_n579
+end
+
+def fun_l12_n335()
+ fun_l13_n508
+end
+
+def fun_l12_n336()
+ fun_l13_n979
+end
+
+def fun_l12_n337()
+ fun_l13_n826
+end
+
+def fun_l12_n338()
+ fun_l13_n18
+end
+
+def fun_l12_n339()
+ fun_l13_n218
+end
+
+def fun_l12_n340()
+ fun_l13_n344
+end
+
+def fun_l12_n341()
+ fun_l13_n280
+end
+
+def fun_l12_n342()
+ fun_l13_n244
+end
+
+def fun_l12_n343()
+ fun_l13_n857
+end
+
+def fun_l12_n344()
+ fun_l13_n301
+end
+
+def fun_l12_n345()
+ fun_l13_n428
+end
+
+def fun_l12_n346()
+ fun_l13_n192
+end
+
+def fun_l12_n347()
+ fun_l13_n155
+end
+
+def fun_l12_n348()
+ fun_l13_n414
+end
+
+def fun_l12_n349()
+ fun_l13_n196
+end
+
+def fun_l12_n350()
+ fun_l13_n824
+end
+
+def fun_l12_n351()
+ fun_l13_n901
+end
+
+def fun_l12_n352()
+ fun_l13_n705
+end
+
+def fun_l12_n353()
+ fun_l13_n872
+end
+
+def fun_l12_n354()
+ fun_l13_n82
+end
+
+def fun_l12_n355()
+ fun_l13_n664
+end
+
+def fun_l12_n356()
+ fun_l13_n948
+end
+
+def fun_l12_n357()
+ fun_l13_n430
+end
+
+def fun_l12_n358()
+ fun_l13_n716
+end
+
+def fun_l12_n359()
+ fun_l13_n319
+end
+
+def fun_l12_n360()
+ fun_l13_n680
+end
+
+def fun_l12_n361()
+ fun_l13_n961
+end
+
+def fun_l12_n362()
+ fun_l13_n347
+end
+
+def fun_l12_n363()
+ fun_l13_n164
+end
+
+def fun_l12_n364()
+ fun_l13_n849
+end
+
+def fun_l12_n365()
+ fun_l13_n448
+end
+
+def fun_l12_n366()
+ fun_l13_n622
+end
+
+def fun_l12_n367()
+ fun_l13_n191
+end
+
+def fun_l12_n368()
+ fun_l13_n818
+end
+
+def fun_l12_n369()
+ fun_l13_n525
+end
+
+def fun_l12_n370()
+ fun_l13_n343
+end
+
+def fun_l12_n371()
+ fun_l13_n789
+end
+
+def fun_l12_n372()
+ fun_l13_n811
+end
+
+def fun_l12_n373()
+ fun_l13_n503
+end
+
+def fun_l12_n374()
+ fun_l13_n529
+end
+
+def fun_l12_n375()
+ fun_l13_n471
+end
+
+def fun_l12_n376()
+ fun_l13_n654
+end
+
+def fun_l12_n377()
+ fun_l13_n155
+end
+
+def fun_l12_n378()
+ fun_l13_n79
+end
+
+def fun_l12_n379()
+ fun_l13_n545
+end
+
+def fun_l12_n380()
+ fun_l13_n315
+end
+
+def fun_l12_n381()
+ fun_l13_n655
+end
+
+def fun_l12_n382()
+ fun_l13_n450
+end
+
+def fun_l12_n383()
+ fun_l13_n353
+end
+
+def fun_l12_n384()
+ fun_l13_n700
+end
+
+def fun_l12_n385()
+ fun_l13_n524
+end
+
+def fun_l12_n386()
+ fun_l13_n158
+end
+
+def fun_l12_n387()
+ fun_l13_n880
+end
+
+def fun_l12_n388()
+ fun_l13_n366
+end
+
+def fun_l12_n389()
+ fun_l13_n848
+end
+
+def fun_l12_n390()
+ fun_l13_n45
+end
+
+def fun_l12_n391()
+ fun_l13_n318
+end
+
+def fun_l12_n392()
+ fun_l13_n331
+end
+
+def fun_l12_n393()
+ fun_l13_n528
+end
+
+def fun_l12_n394()
+ fun_l13_n789
+end
+
+def fun_l12_n395()
+ fun_l13_n71
+end
+
+def fun_l12_n396()
+ fun_l13_n317
+end
+
+def fun_l12_n397()
+ fun_l13_n671
+end
+
+def fun_l12_n398()
+ fun_l13_n788
+end
+
+def fun_l12_n399()
+ fun_l13_n276
+end
+
+def fun_l12_n400()
+ fun_l13_n34
+end
+
+def fun_l12_n401()
+ fun_l13_n321
+end
+
+def fun_l12_n402()
+ fun_l13_n737
+end
+
+def fun_l12_n403()
+ fun_l13_n900
+end
+
+def fun_l12_n404()
+ fun_l13_n491
+end
+
+def fun_l12_n405()
+ fun_l13_n826
+end
+
+def fun_l12_n406()
+ fun_l13_n124
+end
+
+def fun_l12_n407()
+ fun_l13_n658
+end
+
+def fun_l12_n408()
+ fun_l13_n159
+end
+
+def fun_l12_n409()
+ fun_l13_n481
+end
+
+def fun_l12_n410()
+ fun_l13_n900
+end
+
+def fun_l12_n411()
+ fun_l13_n481
+end
+
+def fun_l12_n412()
+ fun_l13_n252
+end
+
+def fun_l12_n413()
+ fun_l13_n732
+end
+
+def fun_l12_n414()
+ fun_l13_n94
+end
+
+def fun_l12_n415()
+ fun_l13_n699
+end
+
+def fun_l12_n416()
+ fun_l13_n638
+end
+
+def fun_l12_n417()
+ fun_l13_n108
+end
+
+def fun_l12_n418()
+ fun_l13_n731
+end
+
+def fun_l12_n419()
+ fun_l13_n965
+end
+
+def fun_l12_n420()
+ fun_l13_n704
+end
+
+def fun_l12_n421()
+ fun_l13_n710
+end
+
+def fun_l12_n422()
+ fun_l13_n888
+end
+
+def fun_l12_n423()
+ fun_l13_n331
+end
+
+def fun_l12_n424()
+ fun_l13_n586
+end
+
+def fun_l12_n425()
+ fun_l13_n302
+end
+
+def fun_l12_n426()
+ fun_l13_n514
+end
+
+def fun_l12_n427()
+ fun_l13_n533
+end
+
+def fun_l12_n428()
+ fun_l13_n759
+end
+
+def fun_l12_n429()
+ fun_l13_n652
+end
+
+def fun_l12_n430()
+ fun_l13_n600
+end
+
+def fun_l12_n431()
+ fun_l13_n808
+end
+
+def fun_l12_n432()
+ fun_l13_n345
+end
+
+def fun_l12_n433()
+ fun_l13_n257
+end
+
+def fun_l12_n434()
+ fun_l13_n91
+end
+
+def fun_l12_n435()
+ fun_l13_n627
+end
+
+def fun_l12_n436()
+ fun_l13_n293
+end
+
+def fun_l12_n437()
+ fun_l13_n618
+end
+
+def fun_l12_n438()
+ fun_l13_n462
+end
+
+def fun_l12_n439()
+ fun_l13_n0
+end
+
+def fun_l12_n440()
+ fun_l13_n32
+end
+
+def fun_l12_n441()
+ fun_l13_n4
+end
+
+def fun_l12_n442()
+ fun_l13_n257
+end
+
+def fun_l12_n443()
+ fun_l13_n548
+end
+
+def fun_l12_n444()
+ fun_l13_n300
+end
+
+def fun_l12_n445()
+ fun_l13_n253
+end
+
+def fun_l12_n446()
+ fun_l13_n603
+end
+
+def fun_l12_n447()
+ fun_l13_n295
+end
+
+def fun_l12_n448()
+ fun_l13_n921
+end
+
+def fun_l12_n449()
+ fun_l13_n119
+end
+
+def fun_l12_n450()
+ fun_l13_n51
+end
+
+def fun_l12_n451()
+ fun_l13_n544
+end
+
+def fun_l12_n452()
+ fun_l13_n735
+end
+
+def fun_l12_n453()
+ fun_l13_n20
+end
+
+def fun_l12_n454()
+ fun_l13_n285
+end
+
+def fun_l12_n455()
+ fun_l13_n370
+end
+
+def fun_l12_n456()
+ fun_l13_n245
+end
+
+def fun_l12_n457()
+ fun_l13_n909
+end
+
+def fun_l12_n458()
+ fun_l13_n536
+end
+
+def fun_l12_n459()
+ fun_l13_n665
+end
+
+def fun_l12_n460()
+ fun_l13_n95
+end
+
+def fun_l12_n461()
+ fun_l13_n499
+end
+
+def fun_l12_n462()
+ fun_l13_n105
+end
+
+def fun_l12_n463()
+ fun_l13_n300
+end
+
+def fun_l12_n464()
+ fun_l13_n49
+end
+
+def fun_l12_n465()
+ fun_l13_n567
+end
+
+def fun_l12_n466()
+ fun_l13_n197
+end
+
+def fun_l12_n467()
+ fun_l13_n918
+end
+
+def fun_l12_n468()
+ fun_l13_n735
+end
+
+def fun_l12_n469()
+ fun_l13_n415
+end
+
+def fun_l12_n470()
+ fun_l13_n580
+end
+
+def fun_l12_n471()
+ fun_l13_n119
+end
+
+def fun_l12_n472()
+ fun_l13_n699
+end
+
+def fun_l12_n473()
+ fun_l13_n128
+end
+
+def fun_l12_n474()
+ fun_l13_n251
+end
+
+def fun_l12_n475()
+ fun_l13_n986
+end
+
+def fun_l12_n476()
+ fun_l13_n55
+end
+
+def fun_l12_n477()
+ fun_l13_n394
+end
+
+def fun_l12_n478()
+ fun_l13_n564
+end
+
+def fun_l12_n479()
+ fun_l13_n927
+end
+
+def fun_l12_n480()
+ fun_l13_n614
+end
+
+def fun_l12_n481()
+ fun_l13_n425
+end
+
+def fun_l12_n482()
+ fun_l13_n55
+end
+
+def fun_l12_n483()
+ fun_l13_n212
+end
+
+def fun_l12_n484()
+ fun_l13_n712
+end
+
+def fun_l12_n485()
+ fun_l13_n393
+end
+
+def fun_l12_n486()
+ fun_l13_n891
+end
+
+def fun_l12_n487()
+ fun_l13_n54
+end
+
+def fun_l12_n488()
+ fun_l13_n508
+end
+
+def fun_l12_n489()
+ fun_l13_n266
+end
+
+def fun_l12_n490()
+ fun_l13_n637
+end
+
+def fun_l12_n491()
+ fun_l13_n683
+end
+
+def fun_l12_n492()
+ fun_l13_n499
+end
+
+def fun_l12_n493()
+ fun_l13_n770
+end
+
+def fun_l12_n494()
+ fun_l13_n254
+end
+
+def fun_l12_n495()
+ fun_l13_n801
+end
+
+def fun_l12_n496()
+ fun_l13_n75
+end
+
+def fun_l12_n497()
+ fun_l13_n652
+end
+
+def fun_l12_n498()
+ fun_l13_n638
+end
+
+def fun_l12_n499()
+ fun_l13_n515
+end
+
+def fun_l12_n500()
+ fun_l13_n580
+end
+
+def fun_l12_n501()
+ fun_l13_n198
+end
+
+def fun_l12_n502()
+ fun_l13_n723
+end
+
+def fun_l12_n503()
+ fun_l13_n855
+end
+
+def fun_l12_n504()
+ fun_l13_n969
+end
+
+def fun_l12_n505()
+ fun_l13_n16
+end
+
+def fun_l12_n506()
+ fun_l13_n477
+end
+
+def fun_l12_n507()
+ fun_l13_n873
+end
+
+def fun_l12_n508()
+ fun_l13_n456
+end
+
+def fun_l12_n509()
+ fun_l13_n711
+end
+
+def fun_l12_n510()
+ fun_l13_n979
+end
+
+def fun_l12_n511()
+ fun_l13_n830
+end
+
+def fun_l12_n512()
+ fun_l13_n336
+end
+
+def fun_l12_n513()
+ fun_l13_n579
+end
+
+def fun_l12_n514()
+ fun_l13_n128
+end
+
+def fun_l12_n515()
+ fun_l13_n977
+end
+
+def fun_l12_n516()
+ fun_l13_n870
+end
+
+def fun_l12_n517()
+ fun_l13_n133
+end
+
+def fun_l12_n518()
+ fun_l13_n315
+end
+
+def fun_l12_n519()
+ fun_l13_n324
+end
+
+def fun_l12_n520()
+ fun_l13_n721
+end
+
+def fun_l12_n521()
+ fun_l13_n392
+end
+
+def fun_l12_n522()
+ fun_l13_n945
+end
+
+def fun_l12_n523()
+ fun_l13_n497
+end
+
+def fun_l12_n524()
+ fun_l13_n999
+end
+
+def fun_l12_n525()
+ fun_l13_n152
+end
+
+def fun_l12_n526()
+ fun_l13_n535
+end
+
+def fun_l12_n527()
+ fun_l13_n938
+end
+
+def fun_l12_n528()
+ fun_l13_n813
+end
+
+def fun_l12_n529()
+ fun_l13_n497
+end
+
+def fun_l12_n530()
+ fun_l13_n700
+end
+
+def fun_l12_n531()
+ fun_l13_n493
+end
+
+def fun_l12_n532()
+ fun_l13_n549
+end
+
+def fun_l12_n533()
+ fun_l13_n406
+end
+
+def fun_l12_n534()
+ fun_l13_n918
+end
+
+def fun_l12_n535()
+ fun_l13_n891
+end
+
+def fun_l12_n536()
+ fun_l13_n924
+end
+
+def fun_l12_n537()
+ fun_l13_n753
+end
+
+def fun_l12_n538()
+ fun_l13_n582
+end
+
+def fun_l12_n539()
+ fun_l13_n769
+end
+
+def fun_l12_n540()
+ fun_l13_n297
+end
+
+def fun_l12_n541()
+ fun_l13_n261
+end
+
+def fun_l12_n542()
+ fun_l13_n581
+end
+
+def fun_l12_n543()
+ fun_l13_n667
+end
+
+def fun_l12_n544()
+ fun_l13_n955
+end
+
+def fun_l12_n545()
+ fun_l13_n296
+end
+
+def fun_l12_n546()
+ fun_l13_n762
+end
+
+def fun_l12_n547()
+ fun_l13_n755
+end
+
+def fun_l12_n548()
+ fun_l13_n369
+end
+
+def fun_l12_n549()
+ fun_l13_n685
+end
+
+def fun_l12_n550()
+ fun_l13_n675
+end
+
+def fun_l12_n551()
+ fun_l13_n430
+end
+
+def fun_l12_n552()
+ fun_l13_n530
+end
+
+def fun_l12_n553()
+ fun_l13_n17
+end
+
+def fun_l12_n554()
+ fun_l13_n406
+end
+
+def fun_l12_n555()
+ fun_l13_n687
+end
+
+def fun_l12_n556()
+ fun_l13_n972
+end
+
+def fun_l12_n557()
+ fun_l13_n561
+end
+
+def fun_l12_n558()
+ fun_l13_n202
+end
+
+def fun_l12_n559()
+ fun_l13_n788
+end
+
+def fun_l12_n560()
+ fun_l13_n705
+end
+
+def fun_l12_n561()
+ fun_l13_n434
+end
+
+def fun_l12_n562()
+ fun_l13_n965
+end
+
+def fun_l12_n563()
+ fun_l13_n525
+end
+
+def fun_l12_n564()
+ fun_l13_n938
+end
+
+def fun_l12_n565()
+ fun_l13_n346
+end
+
+def fun_l12_n566()
+ fun_l13_n95
+end
+
+def fun_l12_n567()
+ fun_l13_n458
+end
+
+def fun_l12_n568()
+ fun_l13_n769
+end
+
+def fun_l12_n569()
+ fun_l13_n858
+end
+
+def fun_l12_n570()
+ fun_l13_n230
+end
+
+def fun_l12_n571()
+ fun_l13_n977
+end
+
+def fun_l12_n572()
+ fun_l13_n304
+end
+
+def fun_l12_n573()
+ fun_l13_n271
+end
+
+def fun_l12_n574()
+ fun_l13_n106
+end
+
+def fun_l12_n575()
+ fun_l13_n733
+end
+
+def fun_l12_n576()
+ fun_l13_n197
+end
+
+def fun_l12_n577()
+ fun_l13_n624
+end
+
+def fun_l12_n578()
+ fun_l13_n844
+end
+
+def fun_l12_n579()
+ fun_l13_n268
+end
+
+def fun_l12_n580()
+ fun_l13_n394
+end
+
+def fun_l12_n581()
+ fun_l13_n573
+end
+
+def fun_l12_n582()
+ fun_l13_n950
+end
+
+def fun_l12_n583()
+ fun_l13_n163
+end
+
+def fun_l12_n584()
+ fun_l13_n458
+end
+
+def fun_l12_n585()
+ fun_l13_n569
+end
+
+def fun_l12_n586()
+ fun_l13_n808
+end
+
+def fun_l12_n587()
+ fun_l13_n830
+end
+
+def fun_l12_n588()
+ fun_l13_n328
+end
+
+def fun_l12_n589()
+ fun_l13_n235
+end
+
+def fun_l12_n590()
+ fun_l13_n695
+end
+
+def fun_l12_n591()
+ fun_l13_n543
+end
+
+def fun_l12_n592()
+ fun_l13_n635
+end
+
+def fun_l12_n593()
+ fun_l13_n783
+end
+
+def fun_l12_n594()
+ fun_l13_n349
+end
+
+def fun_l12_n595()
+ fun_l13_n108
+end
+
+def fun_l12_n596()
+ fun_l13_n856
+end
+
+def fun_l12_n597()
+ fun_l13_n743
+end
+
+def fun_l12_n598()
+ fun_l13_n640
+end
+
+def fun_l12_n599()
+ fun_l13_n768
+end
+
+def fun_l12_n600()
+ fun_l13_n798
+end
+
+def fun_l12_n601()
+ fun_l13_n941
+end
+
+def fun_l12_n602()
+ fun_l13_n389
+end
+
+def fun_l12_n603()
+ fun_l13_n624
+end
+
+def fun_l12_n604()
+ fun_l13_n209
+end
+
+def fun_l12_n605()
+ fun_l13_n636
+end
+
+def fun_l12_n606()
+ fun_l13_n741
+end
+
+def fun_l12_n607()
+ fun_l13_n461
+end
+
+def fun_l12_n608()
+ fun_l13_n570
+end
+
+def fun_l12_n609()
+ fun_l13_n358
+end
+
+def fun_l12_n610()
+ fun_l13_n408
+end
+
+def fun_l12_n611()
+ fun_l13_n693
+end
+
+def fun_l12_n612()
+ fun_l13_n760
+end
+
+def fun_l12_n613()
+ fun_l13_n402
+end
+
+def fun_l12_n614()
+ fun_l13_n20
+end
+
+def fun_l12_n615()
+ fun_l13_n15
+end
+
+def fun_l12_n616()
+ fun_l13_n931
+end
+
+def fun_l12_n617()
+ fun_l13_n58
+end
+
+def fun_l12_n618()
+ fun_l13_n627
+end
+
+def fun_l12_n619()
+ fun_l13_n149
+end
+
+def fun_l12_n620()
+ fun_l13_n200
+end
+
+def fun_l12_n621()
+ fun_l13_n832
+end
+
+def fun_l12_n622()
+ fun_l13_n605
+end
+
+def fun_l12_n623()
+ fun_l13_n868
+end
+
+def fun_l12_n624()
+ fun_l13_n480
+end
+
+def fun_l12_n625()
+ fun_l13_n991
+end
+
+def fun_l12_n626()
+ fun_l13_n493
+end
+
+def fun_l12_n627()
+ fun_l13_n2
+end
+
+def fun_l12_n628()
+ fun_l13_n851
+end
+
+def fun_l12_n629()
+ fun_l13_n864
+end
+
+def fun_l12_n630()
+ fun_l13_n293
+end
+
+def fun_l12_n631()
+ fun_l13_n909
+end
+
+def fun_l12_n632()
+ fun_l13_n955
+end
+
+def fun_l12_n633()
+ fun_l13_n276
+end
+
+def fun_l12_n634()
+ fun_l13_n345
+end
+
+def fun_l12_n635()
+ fun_l13_n606
+end
+
+def fun_l12_n636()
+ fun_l13_n685
+end
+
+def fun_l12_n637()
+ fun_l13_n989
+end
+
+def fun_l12_n638()
+ fun_l13_n920
+end
+
+def fun_l12_n639()
+ fun_l13_n702
+end
+
+def fun_l12_n640()
+ fun_l13_n6
+end
+
+def fun_l12_n641()
+ fun_l13_n216
+end
+
+def fun_l12_n642()
+ fun_l13_n501
+end
+
+def fun_l12_n643()
+ fun_l13_n500
+end
+
+def fun_l12_n644()
+ fun_l13_n845
+end
+
+def fun_l12_n645()
+ fun_l13_n758
+end
+
+def fun_l12_n646()
+ fun_l13_n999
+end
+
+def fun_l12_n647()
+ fun_l13_n30
+end
+
+def fun_l12_n648()
+ fun_l13_n670
+end
+
+def fun_l12_n649()
+ fun_l13_n551
+end
+
+def fun_l12_n650()
+ fun_l13_n668
+end
+
+def fun_l12_n651()
+ fun_l13_n51
+end
+
+def fun_l12_n652()
+ fun_l13_n35
+end
+
+def fun_l12_n653()
+ fun_l13_n523
+end
+
+def fun_l12_n654()
+ fun_l13_n118
+end
+
+def fun_l12_n655()
+ fun_l13_n49
+end
+
+def fun_l12_n656()
+ fun_l13_n457
+end
+
+def fun_l12_n657()
+ fun_l13_n669
+end
+
+def fun_l12_n658()
+ fun_l13_n93
+end
+
+def fun_l12_n659()
+ fun_l13_n809
+end
+
+def fun_l12_n660()
+ fun_l13_n759
+end
+
+def fun_l12_n661()
+ fun_l13_n224
+end
+
+def fun_l12_n662()
+ fun_l13_n876
+end
+
+def fun_l12_n663()
+ fun_l13_n784
+end
+
+def fun_l12_n664()
+ fun_l13_n39
+end
+
+def fun_l12_n665()
+ fun_l13_n930
+end
+
+def fun_l12_n666()
+ fun_l13_n250
+end
+
+def fun_l12_n667()
+ fun_l13_n247
+end
+
+def fun_l12_n668()
+ fun_l13_n907
+end
+
+def fun_l12_n669()
+ fun_l13_n333
+end
+
+def fun_l12_n670()
+ fun_l13_n97
+end
+
+def fun_l12_n671()
+ fun_l13_n475
+end
+
+def fun_l12_n672()
+ fun_l13_n480
+end
+
+def fun_l12_n673()
+ fun_l13_n943
+end
+
+def fun_l12_n674()
+ fun_l13_n263
+end
+
+def fun_l12_n675()
+ fun_l13_n879
+end
+
+def fun_l12_n676()
+ fun_l13_n537
+end
+
+def fun_l12_n677()
+ fun_l13_n475
+end
+
+def fun_l12_n678()
+ fun_l13_n626
+end
+
+def fun_l12_n679()
+ fun_l13_n397
+end
+
+def fun_l12_n680()
+ fun_l13_n194
+end
+
+def fun_l12_n681()
+ fun_l13_n468
+end
+
+def fun_l12_n682()
+ fun_l13_n566
+end
+
+def fun_l12_n683()
+ fun_l13_n573
+end
+
+def fun_l12_n684()
+ fun_l13_n354
+end
+
+def fun_l12_n685()
+ fun_l13_n251
+end
+
+def fun_l12_n686()
+ fun_l13_n626
+end
+
+def fun_l12_n687()
+ fun_l13_n954
+end
+
+def fun_l12_n688()
+ fun_l13_n732
+end
+
+def fun_l12_n689()
+ fun_l13_n543
+end
+
+def fun_l12_n690()
+ fun_l13_n878
+end
+
+def fun_l12_n691()
+ fun_l13_n520
+end
+
+def fun_l12_n692()
+ fun_l13_n262
+end
+
+def fun_l12_n693()
+ fun_l13_n179
+end
+
+def fun_l12_n694()
+ fun_l13_n851
+end
+
+def fun_l12_n695()
+ fun_l13_n821
+end
+
+def fun_l12_n696()
+ fun_l13_n951
+end
+
+def fun_l12_n697()
+ fun_l13_n707
+end
+
+def fun_l12_n698()
+ fun_l13_n388
+end
+
+def fun_l12_n699()
+ fun_l13_n660
+end
+
+def fun_l12_n700()
+ fun_l13_n658
+end
+
+def fun_l12_n701()
+ fun_l13_n463
+end
+
+def fun_l12_n702()
+ fun_l13_n547
+end
+
+def fun_l12_n703()
+ fun_l13_n319
+end
+
+def fun_l12_n704()
+ fun_l13_n405
+end
+
+def fun_l12_n705()
+ fun_l13_n645
+end
+
+def fun_l12_n706()
+ fun_l13_n147
+end
+
+def fun_l12_n707()
+ fun_l13_n582
+end
+
+def fun_l12_n708()
+ fun_l13_n618
+end
+
+def fun_l12_n709()
+ fun_l13_n156
+end
+
+def fun_l12_n710()
+ fun_l13_n606
+end
+
+def fun_l12_n711()
+ fun_l13_n525
+end
+
+def fun_l12_n712()
+ fun_l13_n513
+end
+
+def fun_l12_n713()
+ fun_l13_n827
+end
+
+def fun_l12_n714()
+ fun_l13_n438
+end
+
+def fun_l12_n715()
+ fun_l13_n72
+end
+
+def fun_l12_n716()
+ fun_l13_n364
+end
+
+def fun_l12_n717()
+ fun_l13_n380
+end
+
+def fun_l12_n718()
+ fun_l13_n898
+end
+
+def fun_l12_n719()
+ fun_l13_n998
+end
+
+def fun_l12_n720()
+ fun_l13_n679
+end
+
+def fun_l12_n721()
+ fun_l13_n738
+end
+
+def fun_l12_n722()
+ fun_l13_n887
+end
+
+def fun_l12_n723()
+ fun_l13_n73
+end
+
+def fun_l12_n724()
+ fun_l13_n309
+end
+
+def fun_l12_n725()
+ fun_l13_n791
+end
+
+def fun_l12_n726()
+ fun_l13_n939
+end
+
+def fun_l12_n727()
+ fun_l13_n27
+end
+
+def fun_l12_n728()
+ fun_l13_n269
+end
+
+def fun_l12_n729()
+ fun_l13_n418
+end
+
+def fun_l12_n730()
+ fun_l13_n659
+end
+
+def fun_l12_n731()
+ fun_l13_n257
+end
+
+def fun_l12_n732()
+ fun_l13_n519
+end
+
+def fun_l12_n733()
+ fun_l13_n305
+end
+
+def fun_l12_n734()
+ fun_l13_n994
+end
+
+def fun_l12_n735()
+ fun_l13_n159
+end
+
+def fun_l12_n736()
+ fun_l13_n704
+end
+
+def fun_l12_n737()
+ fun_l13_n826
+end
+
+def fun_l12_n738()
+ fun_l13_n204
+end
+
+def fun_l12_n739()
+ fun_l13_n886
+end
+
+def fun_l12_n740()
+ fun_l13_n403
+end
+
+def fun_l12_n741()
+ fun_l13_n567
+end
+
+def fun_l12_n742()
+ fun_l13_n425
+end
+
+def fun_l12_n743()
+ fun_l13_n174
+end
+
+def fun_l12_n744()
+ fun_l13_n530
+end
+
+def fun_l12_n745()
+ fun_l13_n143
+end
+
+def fun_l12_n746()
+ fun_l13_n950
+end
+
+def fun_l12_n747()
+ fun_l13_n982
+end
+
+def fun_l12_n748()
+ fun_l13_n340
+end
+
+def fun_l12_n749()
+ fun_l13_n964
+end
+
+def fun_l12_n750()
+ fun_l13_n747
+end
+
+def fun_l12_n751()
+ fun_l13_n886
+end
+
+def fun_l12_n752()
+ fun_l13_n148
+end
+
+def fun_l12_n753()
+ fun_l13_n675
+end
+
+def fun_l12_n754()
+ fun_l13_n69
+end
+
+def fun_l12_n755()
+ fun_l13_n992
+end
+
+def fun_l12_n756()
+ fun_l13_n126
+end
+
+def fun_l12_n757()
+ fun_l13_n919
+end
+
+def fun_l12_n758()
+ fun_l13_n286
+end
+
+def fun_l12_n759()
+ fun_l13_n472
+end
+
+def fun_l12_n760()
+ fun_l13_n35
+end
+
+def fun_l12_n761()
+ fun_l13_n130
+end
+
+def fun_l12_n762()
+ fun_l13_n394
+end
+
+def fun_l12_n763()
+ fun_l13_n372
+end
+
+def fun_l12_n764()
+ fun_l13_n630
+end
+
+def fun_l12_n765()
+ fun_l13_n439
+end
+
+def fun_l12_n766()
+ fun_l13_n973
+end
+
+def fun_l12_n767()
+ fun_l13_n859
+end
+
+def fun_l12_n768()
+ fun_l13_n903
+end
+
+def fun_l12_n769()
+ fun_l13_n441
+end
+
+def fun_l12_n770()
+ fun_l13_n530
+end
+
+def fun_l12_n771()
+ fun_l13_n584
+end
+
+def fun_l12_n772()
+ fun_l13_n676
+end
+
+def fun_l12_n773()
+ fun_l13_n595
+end
+
+def fun_l12_n774()
+ fun_l13_n523
+end
+
+def fun_l12_n775()
+ fun_l13_n619
+end
+
+def fun_l12_n776()
+ fun_l13_n727
+end
+
+def fun_l12_n777()
+ fun_l13_n793
+end
+
+def fun_l12_n778()
+ fun_l13_n55
+end
+
+def fun_l12_n779()
+ fun_l13_n675
+end
+
+def fun_l12_n780()
+ fun_l13_n779
+end
+
+def fun_l12_n781()
+ fun_l13_n413
+end
+
+def fun_l12_n782()
+ fun_l13_n148
+end
+
+def fun_l12_n783()
+ fun_l13_n149
+end
+
+def fun_l12_n784()
+ fun_l13_n242
+end
+
+def fun_l12_n785()
+ fun_l13_n619
+end
+
+def fun_l12_n786()
+ fun_l13_n171
+end
+
+def fun_l12_n787()
+ fun_l13_n646
+end
+
+def fun_l12_n788()
+ fun_l13_n470
+end
+
+def fun_l12_n789()
+ fun_l13_n812
+end
+
+def fun_l12_n790()
+ fun_l13_n891
+end
+
+def fun_l12_n791()
+ fun_l13_n958
+end
+
+def fun_l12_n792()
+ fun_l13_n451
+end
+
+def fun_l12_n793()
+ fun_l13_n651
+end
+
+def fun_l12_n794()
+ fun_l13_n904
+end
+
+def fun_l12_n795()
+ fun_l13_n400
+end
+
+def fun_l12_n796()
+ fun_l13_n286
+end
+
+def fun_l12_n797()
+ fun_l13_n17
+end
+
+def fun_l12_n798()
+ fun_l13_n280
+end
+
+def fun_l12_n799()
+ fun_l13_n19
+end
+
+def fun_l12_n800()
+ fun_l13_n909
+end
+
+def fun_l12_n801()
+ fun_l13_n434
+end
+
+def fun_l12_n802()
+ fun_l13_n920
+end
+
+def fun_l12_n803()
+ fun_l13_n196
+end
+
+def fun_l12_n804()
+ fun_l13_n374
+end
+
+def fun_l12_n805()
+ fun_l13_n393
+end
+
+def fun_l12_n806()
+ fun_l13_n623
+end
+
+def fun_l12_n807()
+ fun_l13_n846
+end
+
+def fun_l12_n808()
+ fun_l13_n354
+end
+
+def fun_l12_n809()
+ fun_l13_n16
+end
+
+def fun_l12_n810()
+ fun_l13_n371
+end
+
+def fun_l12_n811()
+ fun_l13_n139
+end
+
+def fun_l12_n812()
+ fun_l13_n156
+end
+
+def fun_l12_n813()
+ fun_l13_n799
+end
+
+def fun_l12_n814()
+ fun_l13_n817
+end
+
+def fun_l12_n815()
+ fun_l13_n475
+end
+
+def fun_l12_n816()
+ fun_l13_n799
+end
+
+def fun_l12_n817()
+ fun_l13_n838
+end
+
+def fun_l12_n818()
+ fun_l13_n297
+end
+
+def fun_l12_n819()
+ fun_l13_n834
+end
+
+def fun_l12_n820()
+ fun_l13_n788
+end
+
+def fun_l12_n821()
+ fun_l13_n649
+end
+
+def fun_l12_n822()
+ fun_l13_n908
+end
+
+def fun_l12_n823()
+ fun_l13_n264
+end
+
+def fun_l12_n824()
+ fun_l13_n66
+end
+
+def fun_l12_n825()
+ fun_l13_n367
+end
+
+def fun_l12_n826()
+ fun_l13_n569
+end
+
+def fun_l12_n827()
+ fun_l13_n735
+end
+
+def fun_l12_n828()
+ fun_l13_n704
+end
+
+def fun_l12_n829()
+ fun_l13_n440
+end
+
+def fun_l12_n830()
+ fun_l13_n126
+end
+
+def fun_l12_n831()
+ fun_l13_n590
+end
+
+def fun_l12_n832()
+ fun_l13_n485
+end
+
+def fun_l12_n833()
+ fun_l13_n869
+end
+
+def fun_l12_n834()
+ fun_l13_n691
+end
+
+def fun_l12_n835()
+ fun_l13_n912
+end
+
+def fun_l12_n836()
+ fun_l13_n618
+end
+
+def fun_l12_n837()
+ fun_l13_n64
+end
+
+def fun_l12_n838()
+ fun_l13_n927
+end
+
+def fun_l12_n839()
+ fun_l13_n500
+end
+
+def fun_l12_n840()
+ fun_l13_n280
+end
+
+def fun_l12_n841()
+ fun_l13_n272
+end
+
+def fun_l12_n842()
+ fun_l13_n66
+end
+
+def fun_l12_n843()
+ fun_l13_n169
+end
+
+def fun_l12_n844()
+ fun_l13_n568
+end
+
+def fun_l12_n845()
+ fun_l13_n678
+end
+
+def fun_l12_n846()
+ fun_l13_n269
+end
+
+def fun_l12_n847()
+ fun_l13_n936
+end
+
+def fun_l12_n848()
+ fun_l13_n34
+end
+
+def fun_l12_n849()
+ fun_l13_n475
+end
+
+def fun_l12_n850()
+ fun_l13_n558
+end
+
+def fun_l12_n851()
+ fun_l13_n779
+end
+
+def fun_l12_n852()
+ fun_l13_n421
+end
+
+def fun_l12_n853()
+ fun_l13_n339
+end
+
+def fun_l12_n854()
+ fun_l13_n266
+end
+
+def fun_l12_n855()
+ fun_l13_n346
+end
+
+def fun_l12_n856()
+ fun_l13_n247
+end
+
+def fun_l12_n857()
+ fun_l13_n608
+end
+
+def fun_l12_n858()
+ fun_l13_n878
+end
+
+def fun_l12_n859()
+ fun_l13_n89
+end
+
+def fun_l12_n860()
+ fun_l13_n380
+end
+
+def fun_l12_n861()
+ fun_l13_n859
+end
+
+def fun_l12_n862()
+ fun_l13_n955
+end
+
+def fun_l12_n863()
+ fun_l13_n392
+end
+
+def fun_l12_n864()
+ fun_l13_n43
+end
+
+def fun_l12_n865()
+ fun_l13_n506
+end
+
+def fun_l12_n866()
+ fun_l13_n45
+end
+
+def fun_l12_n867()
+ fun_l13_n898
+end
+
+def fun_l12_n868()
+ fun_l13_n1
+end
+
+def fun_l12_n869()
+ fun_l13_n159
+end
+
+def fun_l12_n870()
+ fun_l13_n265
+end
+
+def fun_l12_n871()
+ fun_l13_n540
+end
+
+def fun_l12_n872()
+ fun_l13_n563
+end
+
+def fun_l12_n873()
+ fun_l13_n845
+end
+
+def fun_l12_n874()
+ fun_l13_n753
+end
+
+def fun_l12_n875()
+ fun_l13_n815
+end
+
+def fun_l12_n876()
+ fun_l13_n483
+end
+
+def fun_l12_n877()
+ fun_l13_n868
+end
+
+def fun_l12_n878()
+ fun_l13_n961
+end
+
+def fun_l12_n879()
+ fun_l13_n688
+end
+
+def fun_l12_n880()
+ fun_l13_n357
+end
+
+def fun_l12_n881()
+ fun_l13_n543
+end
+
+def fun_l12_n882()
+ fun_l13_n965
+end
+
+def fun_l12_n883()
+ fun_l13_n977
+end
+
+def fun_l12_n884()
+ fun_l13_n185
+end
+
+def fun_l12_n885()
+ fun_l13_n734
+end
+
+def fun_l12_n886()
+ fun_l13_n343
+end
+
+def fun_l12_n887()
+ fun_l13_n43
+end
+
+def fun_l12_n888()
+ fun_l13_n248
+end
+
+def fun_l12_n889()
+ fun_l13_n943
+end
+
+def fun_l12_n890()
+ fun_l13_n504
+end
+
+def fun_l12_n891()
+ fun_l13_n330
+end
+
+def fun_l12_n892()
+ fun_l13_n898
+end
+
+def fun_l12_n893()
+ fun_l13_n495
+end
+
+def fun_l12_n894()
+ fun_l13_n180
+end
+
+def fun_l12_n895()
+ fun_l13_n134
+end
+
+def fun_l12_n896()
+ fun_l13_n883
+end
+
+def fun_l12_n897()
+ fun_l13_n881
+end
+
+def fun_l12_n898()
+ fun_l13_n376
+end
+
+def fun_l12_n899()
+ fun_l13_n840
+end
+
+def fun_l12_n900()
+ fun_l13_n784
+end
+
+def fun_l12_n901()
+ fun_l13_n694
+end
+
+def fun_l12_n902()
+ fun_l13_n431
+end
+
+def fun_l12_n903()
+ fun_l13_n16
+end
+
+def fun_l12_n904()
+ fun_l13_n192
+end
+
+def fun_l12_n905()
+ fun_l13_n932
+end
+
+def fun_l12_n906()
+ fun_l13_n160
+end
+
+def fun_l12_n907()
+ fun_l13_n426
+end
+
+def fun_l12_n908()
+ fun_l13_n283
+end
+
+def fun_l12_n909()
+ fun_l13_n569
+end
+
+def fun_l12_n910()
+ fun_l13_n206
+end
+
+def fun_l12_n911()
+ fun_l13_n741
+end
+
+def fun_l12_n912()
+ fun_l13_n173
+end
+
+def fun_l12_n913()
+ fun_l13_n272
+end
+
+def fun_l12_n914()
+ fun_l13_n172
+end
+
+def fun_l12_n915()
+ fun_l13_n63
+end
+
+def fun_l12_n916()
+ fun_l13_n749
+end
+
+def fun_l12_n917()
+ fun_l13_n450
+end
+
+def fun_l12_n918()
+ fun_l13_n53
+end
+
+def fun_l12_n919()
+ fun_l13_n331
+end
+
+def fun_l12_n920()
+ fun_l13_n186
+end
+
+def fun_l12_n921()
+ fun_l13_n454
+end
+
+def fun_l12_n922()
+ fun_l13_n763
+end
+
+def fun_l12_n923()
+ fun_l13_n124
+end
+
+def fun_l12_n924()
+ fun_l13_n134
+end
+
+def fun_l12_n925()
+ fun_l13_n38
+end
+
+def fun_l12_n926()
+ fun_l13_n645
+end
+
+def fun_l12_n927()
+ fun_l13_n683
+end
+
+def fun_l12_n928()
+ fun_l13_n859
+end
+
+def fun_l12_n929()
+ fun_l13_n406
+end
+
+def fun_l12_n930()
+ fun_l13_n534
+end
+
+def fun_l12_n931()
+ fun_l13_n72
+end
+
+def fun_l12_n932()
+ fun_l13_n288
+end
+
+def fun_l12_n933()
+ fun_l13_n3
+end
+
+def fun_l12_n934()
+ fun_l13_n852
+end
+
+def fun_l12_n935()
+ fun_l13_n290
+end
+
+def fun_l12_n936()
+ fun_l13_n237
+end
+
+def fun_l12_n937()
+ fun_l13_n674
+end
+
+def fun_l12_n938()
+ fun_l13_n278
+end
+
+def fun_l12_n939()
+ fun_l13_n579
+end
+
+def fun_l12_n940()
+ fun_l13_n736
+end
+
+def fun_l12_n941()
+ fun_l13_n684
+end
+
+def fun_l12_n942()
+ fun_l13_n744
+end
+
+def fun_l12_n943()
+ fun_l13_n726
+end
+
+def fun_l12_n944()
+ fun_l13_n767
+end
+
+def fun_l12_n945()
+ fun_l13_n466
+end
+
+def fun_l12_n946()
+ fun_l13_n679
+end
+
+def fun_l12_n947()
+ fun_l13_n774
+end
+
+def fun_l12_n948()
+ fun_l13_n104
+end
+
+def fun_l12_n949()
+ fun_l13_n744
+end
+
+def fun_l12_n950()
+ fun_l13_n339
+end
+
+def fun_l12_n951()
+ fun_l13_n848
+end
+
+def fun_l12_n952()
+ fun_l13_n194
+end
+
+def fun_l12_n953()
+ fun_l13_n733
+end
+
+def fun_l12_n954()
+ fun_l13_n430
+end
+
+def fun_l12_n955()
+ fun_l13_n95
+end
+
+def fun_l12_n956()
+ fun_l13_n68
+end
+
+def fun_l12_n957()
+ fun_l13_n951
+end
+
+def fun_l12_n958()
+ fun_l13_n671
+end
+
+def fun_l12_n959()
+ fun_l13_n464
+end
+
+def fun_l12_n960()
+ fun_l13_n700
+end
+
+def fun_l12_n961()
+ fun_l13_n662
+end
+
+def fun_l12_n962()
+ fun_l13_n765
+end
+
+def fun_l12_n963()
+ fun_l13_n662
+end
+
+def fun_l12_n964()
+ fun_l13_n750
+end
+
+def fun_l12_n965()
+ fun_l13_n935
+end
+
+def fun_l12_n966()
+ fun_l13_n585
+end
+
+def fun_l12_n967()
+ fun_l13_n430
+end
+
+def fun_l12_n968()
+ fun_l13_n219
+end
+
+def fun_l12_n969()
+ fun_l13_n895
+end
+
+def fun_l12_n970()
+ fun_l13_n47
+end
+
+def fun_l12_n971()
+ fun_l13_n755
+end
+
+def fun_l12_n972()
+ fun_l13_n56
+end
+
+def fun_l12_n973()
+ fun_l13_n341
+end
+
+def fun_l12_n974()
+ fun_l13_n192
+end
+
+def fun_l12_n975()
+ fun_l13_n434
+end
+
+def fun_l12_n976()
+ fun_l13_n215
+end
+
+def fun_l12_n977()
+ fun_l13_n747
+end
+
+def fun_l12_n978()
+ fun_l13_n463
+end
+
+def fun_l12_n979()
+ fun_l13_n408
+end
+
+def fun_l12_n980()
+ fun_l13_n993
+end
+
+def fun_l12_n981()
+ fun_l13_n583
+end
+
+def fun_l12_n982()
+ fun_l13_n752
+end
+
+def fun_l12_n983()
+ fun_l13_n583
+end
+
+def fun_l12_n984()
+ fun_l13_n601
+end
+
+def fun_l12_n985()
+ fun_l13_n490
+end
+
+def fun_l12_n986()
+ fun_l13_n61
+end
+
+def fun_l12_n987()
+ fun_l13_n89
+end
+
+def fun_l12_n988()
+ fun_l13_n533
+end
+
+def fun_l12_n989()
+ fun_l13_n628
+end
+
+def fun_l12_n990()
+ fun_l13_n301
+end
+
+def fun_l12_n991()
+ fun_l13_n553
+end
+
+def fun_l12_n992()
+ fun_l13_n105
+end
+
+def fun_l12_n993()
+ fun_l13_n595
+end
+
+def fun_l12_n994()
+ fun_l13_n384
+end
+
+def fun_l12_n995()
+ fun_l13_n704
+end
+
+def fun_l12_n996()
+ fun_l13_n657
+end
+
+def fun_l12_n997()
+ fun_l13_n468
+end
+
+def fun_l12_n998()
+ fun_l13_n582
+end
+
+def fun_l12_n999()
+ fun_l13_n335
+end
+
+def fun_l13_n0()
+ fun_l14_n123
+end
+
+def fun_l13_n1()
+ fun_l14_n796
+end
+
+def fun_l13_n2()
+ fun_l14_n217
+end
+
+def fun_l13_n3()
+ fun_l14_n810
+end
+
+def fun_l13_n4()
+ fun_l14_n297
+end
+
+def fun_l13_n5()
+ fun_l14_n682
+end
+
+def fun_l13_n6()
+ fun_l14_n397
+end
+
+def fun_l13_n7()
+ fun_l14_n372
+end
+
+def fun_l13_n8()
+ fun_l14_n688
+end
+
+def fun_l13_n9()
+ fun_l14_n250
+end
+
+def fun_l13_n10()
+ fun_l14_n248
+end
+
+def fun_l13_n11()
+ fun_l14_n335
+end
+
+def fun_l13_n12()
+ fun_l14_n404
+end
+
+def fun_l13_n13()
+ fun_l14_n223
+end
+
+def fun_l13_n14()
+ fun_l14_n894
+end
+
+def fun_l13_n15()
+ fun_l14_n537
+end
+
+def fun_l13_n16()
+ fun_l14_n641
+end
+
+def fun_l13_n17()
+ fun_l14_n509
+end
+
+def fun_l13_n18()
+ fun_l14_n624
+end
+
+def fun_l13_n19()
+ fun_l14_n224
+end
+
+def fun_l13_n20()
+ fun_l14_n283
+end
+
+def fun_l13_n21()
+ fun_l14_n624
+end
+
+def fun_l13_n22()
+ fun_l14_n972
+end
+
+def fun_l13_n23()
+ fun_l14_n698
+end
+
+def fun_l13_n24()
+ fun_l14_n313
+end
+
+def fun_l13_n25()
+ fun_l14_n344
+end
+
+def fun_l13_n26()
+ fun_l14_n823
+end
+
+def fun_l13_n27()
+ fun_l14_n699
+end
+
+def fun_l13_n28()
+ fun_l14_n943
+end
+
+def fun_l13_n29()
+ fun_l14_n69
+end
+
+def fun_l13_n30()
+ fun_l14_n839
+end
+
+def fun_l13_n31()
+ fun_l14_n834
+end
+
+def fun_l13_n32()
+ fun_l14_n143
+end
+
+def fun_l13_n33()
+ fun_l14_n500
+end
+
+def fun_l13_n34()
+ fun_l14_n266
+end
+
+def fun_l13_n35()
+ fun_l14_n576
+end
+
+def fun_l13_n36()
+ fun_l14_n247
+end
+
+def fun_l13_n37()
+ fun_l14_n847
+end
+
+def fun_l13_n38()
+ fun_l14_n474
+end
+
+def fun_l13_n39()
+ fun_l14_n293
+end
+
+def fun_l13_n40()
+ fun_l14_n475
+end
+
+def fun_l13_n41()
+ fun_l14_n641
+end
+
+def fun_l13_n42()
+ fun_l14_n583
+end
+
+def fun_l13_n43()
+ fun_l14_n857
+end
+
+def fun_l13_n44()
+ fun_l14_n97
+end
+
+def fun_l13_n45()
+ fun_l14_n196
+end
+
+def fun_l13_n46()
+ fun_l14_n201
+end
+
+def fun_l13_n47()
+ fun_l14_n877
+end
+
+def fun_l13_n48()
+ fun_l14_n464
+end
+
+def fun_l13_n49()
+ fun_l14_n706
+end
+
+def fun_l13_n50()
+ fun_l14_n274
+end
+
+def fun_l13_n51()
+ fun_l14_n844
+end
+
+def fun_l13_n52()
+ fun_l14_n883
+end
+
+def fun_l13_n53()
+ fun_l14_n77
+end
+
+def fun_l13_n54()
+ fun_l14_n981
+end
+
+def fun_l13_n55()
+ fun_l14_n189
+end
+
+def fun_l13_n56()
+ fun_l14_n597
+end
+
+def fun_l13_n57()
+ fun_l14_n333
+end
+
+def fun_l13_n58()
+ fun_l14_n566
+end
+
+def fun_l13_n59()
+ fun_l14_n231
+end
+
+def fun_l13_n60()
+ fun_l14_n207
+end
+
+def fun_l13_n61()
+ fun_l14_n555
+end
+
+def fun_l13_n62()
+ fun_l14_n46
+end
+
+def fun_l13_n63()
+ fun_l14_n879
+end
+
+def fun_l13_n64()
+ fun_l14_n672
+end
+
+def fun_l13_n65()
+ fun_l14_n266
+end
+
+def fun_l13_n66()
+ fun_l14_n898
+end
+
+def fun_l13_n67()
+ fun_l14_n966
+end
+
+def fun_l13_n68()
+ fun_l14_n63
+end
+
+def fun_l13_n69()
+ fun_l14_n531
+end
+
+def fun_l13_n70()
+ fun_l14_n80
+end
+
+def fun_l13_n71()
+ fun_l14_n206
+end
+
+def fun_l13_n72()
+ fun_l14_n594
+end
+
+def fun_l13_n73()
+ fun_l14_n852
+end
+
+def fun_l13_n74()
+ fun_l14_n443
+end
+
+def fun_l13_n75()
+ fun_l14_n987
+end
+
+def fun_l13_n76()
+ fun_l14_n119
+end
+
+def fun_l13_n77()
+ fun_l14_n113
+end
+
+def fun_l13_n78()
+ fun_l14_n904
+end
+
+def fun_l13_n79()
+ fun_l14_n88
+end
+
+def fun_l13_n80()
+ fun_l14_n209
+end
+
+def fun_l13_n81()
+ fun_l14_n190
+end
+
+def fun_l13_n82()
+ fun_l14_n594
+end
+
+def fun_l13_n83()
+ fun_l14_n87
+end
+
+def fun_l13_n84()
+ fun_l14_n206
+end
+
+def fun_l13_n85()
+ fun_l14_n974
+end
+
+def fun_l13_n86()
+ fun_l14_n646
+end
+
+def fun_l13_n87()
+ fun_l14_n450
+end
+
+def fun_l13_n88()
+ fun_l14_n981
+end
+
+def fun_l13_n89()
+ fun_l14_n277
+end
+
+def fun_l13_n90()
+ fun_l14_n309
+end
+
+def fun_l13_n91()
+ fun_l14_n648
+end
+
+def fun_l13_n92()
+ fun_l14_n353
+end
+
+def fun_l13_n93()
+ fun_l14_n43
+end
+
+def fun_l13_n94()
+ fun_l14_n217
+end
+
+def fun_l13_n95()
+ fun_l14_n945
+end
+
+def fun_l13_n96()
+ fun_l14_n172
+end
+
+def fun_l13_n97()
+ fun_l14_n604
+end
+
+def fun_l13_n98()
+ fun_l14_n252
+end
+
+def fun_l13_n99()
+ fun_l14_n478
+end
+
+def fun_l13_n100()
+ fun_l14_n564
+end
+
+def fun_l13_n101()
+ fun_l14_n937
+end
+
+def fun_l13_n102()
+ fun_l14_n940
+end
+
+def fun_l13_n103()
+ fun_l14_n110
+end
+
+def fun_l13_n104()
+ fun_l14_n175
+end
+
+def fun_l13_n105()
+ fun_l14_n708
+end
+
+def fun_l13_n106()
+ fun_l14_n161
+end
+
+def fun_l13_n107()
+ fun_l14_n129
+end
+
+def fun_l13_n108()
+ fun_l14_n186
+end
+
+def fun_l13_n109()
+ fun_l14_n449
+end
+
+def fun_l13_n110()
+ fun_l14_n358
+end
+
+def fun_l13_n111()
+ fun_l14_n278
+end
+
+def fun_l13_n112()
+ fun_l14_n598
+end
+
+def fun_l13_n113()
+ fun_l14_n896
+end
+
+def fun_l13_n114()
+ fun_l14_n964
+end
+
+def fun_l13_n115()
+ fun_l14_n986
+end
+
+def fun_l13_n116()
+ fun_l14_n268
+end
+
+def fun_l13_n117()
+ fun_l14_n521
+end
+
+def fun_l13_n118()
+ fun_l14_n968
+end
+
+def fun_l13_n119()
+ fun_l14_n380
+end
+
+def fun_l13_n120()
+ fun_l14_n549
+end
+
+def fun_l13_n121()
+ fun_l14_n300
+end
+
+def fun_l13_n122()
+ fun_l14_n246
+end
+
+def fun_l13_n123()
+ fun_l14_n329
+end
+
+def fun_l13_n124()
+ fun_l14_n134
+end
+
+def fun_l13_n125()
+ fun_l14_n740
+end
+
+def fun_l13_n126()
+ fun_l14_n965
+end
+
+def fun_l13_n127()
+ fun_l14_n284
+end
+
+def fun_l13_n128()
+ fun_l14_n409
+end
+
+def fun_l13_n129()
+ fun_l14_n597
+end
+
+def fun_l13_n130()
+ fun_l14_n285
+end
+
+def fun_l13_n131()
+ fun_l14_n270
+end
+
+def fun_l13_n132()
+ fun_l14_n66
+end
+
+def fun_l13_n133()
+ fun_l14_n588
+end
+
+def fun_l13_n134()
+ fun_l14_n534
+end
+
+def fun_l13_n135()
+ fun_l14_n673
+end
+
+def fun_l13_n136()
+ fun_l14_n867
+end
+
+def fun_l13_n137()
+ fun_l14_n157
+end
+
+def fun_l13_n138()
+ fun_l14_n755
+end
+
+def fun_l13_n139()
+ fun_l14_n68
+end
+
+def fun_l13_n140()
+ fun_l14_n859
+end
+
+def fun_l13_n141()
+ fun_l14_n804
+end
+
+def fun_l13_n142()
+ fun_l14_n300
+end
+
+def fun_l13_n143()
+ fun_l14_n157
+end
+
+def fun_l13_n144()
+ fun_l14_n376
+end
+
+def fun_l13_n145()
+ fun_l14_n62
+end
+
+def fun_l13_n146()
+ fun_l14_n755
+end
+
+def fun_l13_n147()
+ fun_l14_n547
+end
+
+def fun_l13_n148()
+ fun_l14_n223
+end
+
+def fun_l13_n149()
+ fun_l14_n277
+end
+
+def fun_l13_n150()
+ fun_l14_n57
+end
+
+def fun_l13_n151()
+ fun_l14_n552
+end
+
+def fun_l13_n152()
+ fun_l14_n390
+end
+
+def fun_l13_n153()
+ fun_l14_n691
+end
+
+def fun_l13_n154()
+ fun_l14_n871
+end
+
+def fun_l13_n155()
+ fun_l14_n14
+end
+
+def fun_l13_n156()
+ fun_l14_n68
+end
+
+def fun_l13_n157()
+ fun_l14_n589
+end
+
+def fun_l13_n158()
+ fun_l14_n504
+end
+
+def fun_l13_n159()
+ fun_l14_n966
+end
+
+def fun_l13_n160()
+ fun_l14_n62
+end
+
+def fun_l13_n161()
+ fun_l14_n880
+end
+
+def fun_l13_n162()
+ fun_l14_n897
+end
+
+def fun_l13_n163()
+ fun_l14_n630
+end
+
+def fun_l13_n164()
+ fun_l14_n129
+end
+
+def fun_l13_n165()
+ fun_l14_n461
+end
+
+def fun_l13_n166()
+ fun_l14_n193
+end
+
+def fun_l13_n167()
+ fun_l14_n588
+end
+
+def fun_l13_n168()
+ fun_l14_n49
+end
+
+def fun_l13_n169()
+ fun_l14_n872
+end
+
+def fun_l13_n170()
+ fun_l14_n199
+end
+
+def fun_l13_n171()
+ fun_l14_n887
+end
+
+def fun_l13_n172()
+ fun_l14_n932
+end
+
+def fun_l13_n173()
+ fun_l14_n616
+end
+
+def fun_l13_n174()
+ fun_l14_n62
+end
+
+def fun_l13_n175()
+ fun_l14_n162
+end
+
+def fun_l13_n176()
+ fun_l14_n979
+end
+
+def fun_l13_n177()
+ fun_l14_n813
+end
+
+def fun_l13_n178()
+ fun_l14_n529
+end
+
+def fun_l13_n179()
+ fun_l14_n202
+end
+
+def fun_l13_n180()
+ fun_l14_n916
+end
+
+def fun_l13_n181()
+ fun_l14_n719
+end
+
+def fun_l13_n182()
+ fun_l14_n256
+end
+
+def fun_l13_n183()
+ fun_l14_n137
+end
+
+def fun_l13_n184()
+ fun_l14_n562
+end
+
+def fun_l13_n185()
+ fun_l14_n614
+end
+
+def fun_l13_n186()
+ fun_l14_n918
+end
+
+def fun_l13_n187()
+ fun_l14_n435
+end
+
+def fun_l13_n188()
+ fun_l14_n429
+end
+
+def fun_l13_n189()
+ fun_l14_n561
+end
+
+def fun_l13_n190()
+ fun_l14_n422
+end
+
+def fun_l13_n191()
+ fun_l14_n396
+end
+
+def fun_l13_n192()
+ fun_l14_n971
+end
+
+def fun_l13_n193()
+ fun_l14_n419
+end
+
+def fun_l13_n194()
+ fun_l14_n319
+end
+
+def fun_l13_n195()
+ fun_l14_n8
+end
+
+def fun_l13_n196()
+ fun_l14_n378
+end
+
+def fun_l13_n197()
+ fun_l14_n709
+end
+
+def fun_l13_n198()
+ fun_l14_n308
+end
+
+def fun_l13_n199()
+ fun_l14_n916
+end
+
+def fun_l13_n200()
+ fun_l14_n822
+end
+
+def fun_l13_n201()
+ fun_l14_n736
+end
+
+def fun_l13_n202()
+ fun_l14_n259
+end
+
+def fun_l13_n203()
+ fun_l14_n965
+end
+
+def fun_l13_n204()
+ fun_l14_n52
+end
+
+def fun_l13_n205()
+ fun_l14_n237
+end
+
+def fun_l13_n206()
+ fun_l14_n850
+end
+
+def fun_l13_n207()
+ fun_l14_n961
+end
+
+def fun_l13_n208()
+ fun_l14_n289
+end
+
+def fun_l13_n209()
+ fun_l14_n465
+end
+
+def fun_l13_n210()
+ fun_l14_n635
+end
+
+def fun_l13_n211()
+ fun_l14_n222
+end
+
+def fun_l13_n212()
+ fun_l14_n796
+end
+
+def fun_l13_n213()
+ fun_l14_n20
+end
+
+def fun_l13_n214()
+ fun_l14_n576
+end
+
+def fun_l13_n215()
+ fun_l14_n947
+end
+
+def fun_l13_n216()
+ fun_l14_n482
+end
+
+def fun_l13_n217()
+ fun_l14_n236
+end
+
+def fun_l13_n218()
+ fun_l14_n405
+end
+
+def fun_l13_n219()
+ fun_l14_n874
+end
+
+def fun_l13_n220()
+ fun_l14_n827
+end
+
+def fun_l13_n221()
+ fun_l14_n975
+end
+
+def fun_l13_n222()
+ fun_l14_n741
+end
+
+def fun_l13_n223()
+ fun_l14_n60
+end
+
+def fun_l13_n224()
+ fun_l14_n587
+end
+
+def fun_l13_n225()
+ fun_l14_n557
+end
+
+def fun_l13_n226()
+ fun_l14_n621
+end
+
+def fun_l13_n227()
+ fun_l14_n426
+end
+
+def fun_l13_n228()
+ fun_l14_n848
+end
+
+def fun_l13_n229()
+ fun_l14_n164
+end
+
+def fun_l13_n230()
+ fun_l14_n427
+end
+
+def fun_l13_n231()
+ fun_l14_n815
+end
+
+def fun_l13_n232()
+ fun_l14_n465
+end
+
+def fun_l13_n233()
+ fun_l14_n474
+end
+
+def fun_l13_n234()
+ fun_l14_n577
+end
+
+def fun_l13_n235()
+ fun_l14_n427
+end
+
+def fun_l13_n236()
+ fun_l14_n580
+end
+
+def fun_l13_n237()
+ fun_l14_n275
+end
+
+def fun_l13_n238()
+ fun_l14_n559
+end
+
+def fun_l13_n239()
+ fun_l14_n834
+end
+
+def fun_l13_n240()
+ fun_l14_n656
+end
+
+def fun_l13_n241()
+ fun_l14_n411
+end
+
+def fun_l13_n242()
+ fun_l14_n54
+end
+
+def fun_l13_n243()
+ fun_l14_n223
+end
+
+def fun_l13_n244()
+ fun_l14_n623
+end
+
+def fun_l13_n245()
+ fun_l14_n251
+end
+
+def fun_l13_n246()
+ fun_l14_n948
+end
+
+def fun_l13_n247()
+ fun_l14_n857
+end
+
+def fun_l13_n248()
+ fun_l14_n528
+end
+
+def fun_l13_n249()
+ fun_l14_n396
+end
+
+def fun_l13_n250()
+ fun_l14_n832
+end
+
+def fun_l13_n251()
+ fun_l14_n191
+end
+
+def fun_l13_n252()
+ fun_l14_n729
+end
+
+def fun_l13_n253()
+ fun_l14_n22
+end
+
+def fun_l13_n254()
+ fun_l14_n10
+end
+
+def fun_l13_n255()
+ fun_l14_n871
+end
+
+def fun_l13_n256()
+ fun_l14_n664
+end
+
+def fun_l13_n257()
+ fun_l14_n877
+end
+
+def fun_l13_n258()
+ fun_l14_n477
+end
+
+def fun_l13_n259()
+ fun_l14_n861
+end
+
+def fun_l13_n260()
+ fun_l14_n160
+end
+
+def fun_l13_n261()
+ fun_l14_n127
+end
+
+def fun_l13_n262()
+ fun_l14_n744
+end
+
+def fun_l13_n263()
+ fun_l14_n305
+end
+
+def fun_l13_n264()
+ fun_l14_n473
+end
+
+def fun_l13_n265()
+ fun_l14_n445
+end
+
+def fun_l13_n266()
+ fun_l14_n31
+end
+
+def fun_l13_n267()
+ fun_l14_n58
+end
+
+def fun_l13_n268()
+ fun_l14_n739
+end
+
+def fun_l13_n269()
+ fun_l14_n840
+end
+
+def fun_l13_n270()
+ fun_l14_n275
+end
+
+def fun_l13_n271()
+ fun_l14_n264
+end
+
+def fun_l13_n272()
+ fun_l14_n503
+end
+
+def fun_l13_n273()
+ fun_l14_n559
+end
+
+def fun_l13_n274()
+ fun_l14_n693
+end
+
+def fun_l13_n275()
+ fun_l14_n723
+end
+
+def fun_l13_n276()
+ fun_l14_n716
+end
+
+def fun_l13_n277()
+ fun_l14_n181
+end
+
+def fun_l13_n278()
+ fun_l14_n904
+end
+
+def fun_l13_n279()
+ fun_l14_n75
+end
+
+def fun_l13_n280()
+ fun_l14_n992
+end
+
+def fun_l13_n281()
+ fun_l14_n904
+end
+
+def fun_l13_n282()
+ fun_l14_n856
+end
+
+def fun_l13_n283()
+ fun_l14_n218
+end
+
+def fun_l13_n284()
+ fun_l14_n896
+end
+
+def fun_l13_n285()
+ fun_l14_n456
+end
+
+def fun_l13_n286()
+ fun_l14_n591
+end
+
+def fun_l13_n287()
+ fun_l14_n960
+end
+
+def fun_l13_n288()
+ fun_l14_n949
+end
+
+def fun_l13_n289()
+ fun_l14_n92
+end
+
+def fun_l13_n290()
+ fun_l14_n945
+end
+
+def fun_l13_n291()
+ fun_l14_n684
+end
+
+def fun_l13_n292()
+ fun_l14_n8
+end
+
+def fun_l13_n293()
+ fun_l14_n147
+end
+
+def fun_l13_n294()
+ fun_l14_n129
+end
+
+def fun_l13_n295()
+ fun_l14_n308
+end
+
+def fun_l13_n296()
+ fun_l14_n112
+end
+
+def fun_l13_n297()
+ fun_l14_n657
+end
+
+def fun_l13_n298()
+ fun_l14_n910
+end
+
+def fun_l13_n299()
+ fun_l14_n804
+end
+
+def fun_l13_n300()
+ fun_l14_n580
+end
+
+def fun_l13_n301()
+ fun_l14_n373
+end
+
+def fun_l13_n302()
+ fun_l14_n749
+end
+
+def fun_l13_n303()
+ fun_l14_n353
+end
+
+def fun_l13_n304()
+ fun_l14_n58
+end
+
+def fun_l13_n305()
+ fun_l14_n207
+end
+
+def fun_l13_n306()
+ fun_l14_n977
+end
+
+def fun_l13_n307()
+ fun_l14_n95
+end
+
+def fun_l13_n308()
+ fun_l14_n836
+end
+
+def fun_l13_n309()
+ fun_l14_n244
+end
+
+def fun_l13_n310()
+ fun_l14_n676
+end
+
+def fun_l13_n311()
+ fun_l14_n617
+end
+
+def fun_l13_n312()
+ fun_l14_n633
+end
+
+def fun_l13_n313()
+ fun_l14_n550
+end
+
+def fun_l13_n314()
+ fun_l14_n564
+end
+
+def fun_l13_n315()
+ fun_l14_n261
+end
+
+def fun_l13_n316()
+ fun_l14_n968
+end
+
+def fun_l13_n317()
+ fun_l14_n16
+end
+
+def fun_l13_n318()
+ fun_l14_n894
+end
+
+def fun_l13_n319()
+ fun_l14_n717
+end
+
+def fun_l13_n320()
+ fun_l14_n802
+end
+
+def fun_l13_n321()
+ fun_l14_n628
+end
+
+def fun_l13_n322()
+ fun_l14_n306
+end
+
+def fun_l13_n323()
+ fun_l14_n121
+end
+
+def fun_l13_n324()
+ fun_l14_n468
+end
+
+def fun_l13_n325()
+ fun_l14_n863
+end
+
+def fun_l13_n326()
+ fun_l14_n970
+end
+
+def fun_l13_n327()
+ fun_l14_n637
+end
+
+def fun_l13_n328()
+ fun_l14_n12
+end
+
+def fun_l13_n329()
+ fun_l14_n244
+end
+
+def fun_l13_n330()
+ fun_l14_n847
+end
+
+def fun_l13_n331()
+ fun_l14_n122
+end
+
+def fun_l13_n332()
+ fun_l14_n546
+end
+
+def fun_l13_n333()
+ fun_l14_n640
+end
+
+def fun_l13_n334()
+ fun_l14_n224
+end
+
+def fun_l13_n335()
+ fun_l14_n73
+end
+
+def fun_l13_n336()
+ fun_l14_n25
+end
+
+def fun_l13_n337()
+ fun_l14_n226
+end
+
+def fun_l13_n338()
+ fun_l14_n63
+end
+
+def fun_l13_n339()
+ fun_l14_n591
+end
+
+def fun_l13_n340()
+ fun_l14_n32
+end
+
+def fun_l13_n341()
+ fun_l14_n646
+end
+
+def fun_l13_n342()
+ fun_l14_n954
+end
+
+def fun_l13_n343()
+ fun_l14_n915
+end
+
+def fun_l13_n344()
+ fun_l14_n359
+end
+
+def fun_l13_n345()
+ fun_l14_n967
+end
+
+def fun_l13_n346()
+ fun_l14_n980
+end
+
+def fun_l13_n347()
+ fun_l14_n324
+end
+
+def fun_l13_n348()
+ fun_l14_n263
+end
+
+def fun_l13_n349()
+ fun_l14_n644
+end
+
+def fun_l13_n350()
+ fun_l14_n575
+end
+
+def fun_l13_n351()
+ fun_l14_n820
+end
+
+def fun_l13_n352()
+ fun_l14_n767
+end
+
+def fun_l13_n353()
+ fun_l14_n175
+end
+
+def fun_l13_n354()
+ fun_l14_n990
+end
+
+def fun_l13_n355()
+ fun_l14_n631
+end
+
+def fun_l13_n356()
+ fun_l14_n503
+end
+
+def fun_l13_n357()
+ fun_l14_n785
+end
+
+def fun_l13_n358()
+ fun_l14_n239
+end
+
+def fun_l13_n359()
+ fun_l14_n678
+end
+
+def fun_l13_n360()
+ fun_l14_n11
+end
+
+def fun_l13_n361()
+ fun_l14_n829
+end
+
+def fun_l13_n362()
+ fun_l14_n205
+end
+
+def fun_l13_n363()
+ fun_l14_n146
+end
+
+def fun_l13_n364()
+ fun_l14_n972
+end
+
+def fun_l13_n365()
+ fun_l14_n68
+end
+
+def fun_l13_n366()
+ fun_l14_n830
+end
+
+def fun_l13_n367()
+ fun_l14_n60
+end
+
+def fun_l13_n368()
+ fun_l14_n521
+end
+
+def fun_l13_n369()
+ fun_l14_n287
+end
+
+def fun_l13_n370()
+ fun_l14_n932
+end
+
+def fun_l13_n371()
+ fun_l14_n268
+end
+
+def fun_l13_n372()
+ fun_l14_n285
+end
+
+def fun_l13_n373()
+ fun_l14_n101
+end
+
+def fun_l13_n374()
+ fun_l14_n811
+end
+
+def fun_l13_n375()
+ fun_l14_n966
+end
+
+def fun_l13_n376()
+ fun_l14_n201
+end
+
+def fun_l13_n377()
+ fun_l14_n176
+end
+
+def fun_l13_n378()
+ fun_l14_n850
+end
+
+def fun_l13_n379()
+ fun_l14_n436
+end
+
+def fun_l13_n380()
+ fun_l14_n83
+end
+
+def fun_l13_n381()
+ fun_l14_n393
+end
+
+def fun_l13_n382()
+ fun_l14_n812
+end
+
+def fun_l13_n383()
+ fun_l14_n276
+end
+
+def fun_l13_n384()
+ fun_l14_n997
+end
+
+def fun_l13_n385()
+ fun_l14_n942
+end
+
+def fun_l13_n386()
+ fun_l14_n851
+end
+
+def fun_l13_n387()
+ fun_l14_n747
+end
+
+def fun_l13_n388()
+ fun_l14_n573
+end
+
+def fun_l13_n389()
+ fun_l14_n949
+end
+
+def fun_l13_n390()
+ fun_l14_n857
+end
+
+def fun_l13_n391()
+ fun_l14_n495
+end
+
+def fun_l13_n392()
+ fun_l14_n399
+end
+
+def fun_l13_n393()
+ fun_l14_n603
+end
+
+def fun_l13_n394()
+ fun_l14_n208
+end
+
+def fun_l13_n395()
+ fun_l14_n736
+end
+
+def fun_l13_n396()
+ fun_l14_n339
+end
+
+def fun_l13_n397()
+ fun_l14_n759
+end
+
+def fun_l13_n398()
+ fun_l14_n912
+end
+
+def fun_l13_n399()
+ fun_l14_n899
+end
+
+def fun_l13_n400()
+ fun_l14_n954
+end
+
+def fun_l13_n401()
+ fun_l14_n143
+end
+
+def fun_l13_n402()
+ fun_l14_n866
+end
+
+def fun_l13_n403()
+ fun_l14_n657
+end
+
+def fun_l13_n404()
+ fun_l14_n854
+end
+
+def fun_l13_n405()
+ fun_l14_n365
+end
+
+def fun_l13_n406()
+ fun_l14_n79
+end
+
+def fun_l13_n407()
+ fun_l14_n724
+end
+
+def fun_l13_n408()
+ fun_l14_n544
+end
+
+def fun_l13_n409()
+ fun_l14_n562
+end
+
+def fun_l13_n410()
+ fun_l14_n946
+end
+
+def fun_l13_n411()
+ fun_l14_n761
+end
+
+def fun_l13_n412()
+ fun_l14_n251
+end
+
+def fun_l13_n413()
+ fun_l14_n689
+end
+
+def fun_l13_n414()
+ fun_l14_n94
+end
+
+def fun_l13_n415()
+ fun_l14_n466
+end
+
+def fun_l13_n416()
+ fun_l14_n186
+end
+
+def fun_l13_n417()
+ fun_l14_n367
+end
+
+def fun_l13_n418()
+ fun_l14_n477
+end
+
+def fun_l13_n419()
+ fun_l14_n356
+end
+
+def fun_l13_n420()
+ fun_l14_n279
+end
+
+def fun_l13_n421()
+ fun_l14_n76
+end
+
+def fun_l13_n422()
+ fun_l14_n677
+end
+
+def fun_l13_n423()
+ fun_l14_n334
+end
+
+def fun_l13_n424()
+ fun_l14_n777
+end
+
+def fun_l13_n425()
+ fun_l14_n632
+end
+
+def fun_l13_n426()
+ fun_l14_n380
+end
+
+def fun_l13_n427()
+ fun_l14_n833
+end
+
+def fun_l13_n428()
+ fun_l14_n395
+end
+
+def fun_l13_n429()
+ fun_l14_n324
+end
+
+def fun_l13_n430()
+ fun_l14_n608
+end
+
+def fun_l13_n431()
+ fun_l14_n916
+end
+
+def fun_l13_n432()
+ fun_l14_n89
+end
+
+def fun_l13_n433()
+ fun_l14_n239
+end
+
+def fun_l13_n434()
+ fun_l14_n712
+end
+
+def fun_l13_n435()
+ fun_l14_n911
+end
+
+def fun_l13_n436()
+ fun_l14_n810
+end
+
+def fun_l13_n437()
+ fun_l14_n670
+end
+
+def fun_l13_n438()
+ fun_l14_n125
+end
+
+def fun_l13_n439()
+ fun_l14_n903
+end
+
+def fun_l13_n440()
+ fun_l14_n277
+end
+
+def fun_l13_n441()
+ fun_l14_n581
+end
+
+def fun_l13_n442()
+ fun_l14_n726
+end
+
+def fun_l13_n443()
+ fun_l14_n360
+end
+
+def fun_l13_n444()
+ fun_l14_n439
+end
+
+def fun_l13_n445()
+ fun_l14_n441
+end
+
+def fun_l13_n446()
+ fun_l14_n464
+end
+
+def fun_l13_n447()
+ fun_l14_n550
+end
+
+def fun_l13_n448()
+ fun_l14_n94
+end
+
+def fun_l13_n449()
+ fun_l14_n844
+end
+
+def fun_l13_n450()
+ fun_l14_n571
+end
+
+def fun_l13_n451()
+ fun_l14_n161
+end
+
+def fun_l13_n452()
+ fun_l14_n863
+end
+
+def fun_l13_n453()
+ fun_l14_n173
+end
+
+def fun_l13_n454()
+ fun_l14_n330
+end
+
+def fun_l13_n455()
+ fun_l14_n175
+end
+
+def fun_l13_n456()
+ fun_l14_n40
+end
+
+def fun_l13_n457()
+ fun_l14_n335
+end
+
+def fun_l13_n458()
+ fun_l14_n46
+end
+
+def fun_l13_n459()
+ fun_l14_n57
+end
+
+def fun_l13_n460()
+ fun_l14_n428
+end
+
+def fun_l13_n461()
+ fun_l14_n773
+end
+
+def fun_l13_n462()
+ fun_l14_n712
+end
+
+def fun_l13_n463()
+ fun_l14_n624
+end
+
+def fun_l13_n464()
+ fun_l14_n103
+end
+
+def fun_l13_n465()
+ fun_l14_n962
+end
+
+def fun_l13_n466()
+ fun_l14_n424
+end
+
+def fun_l13_n467()
+ fun_l14_n780
+end
+
+def fun_l13_n468()
+ fun_l14_n852
+end
+
+def fun_l13_n469()
+ fun_l14_n175
+end
+
+def fun_l13_n470()
+ fun_l14_n900
+end
+
+def fun_l13_n471()
+ fun_l14_n866
+end
+
+def fun_l13_n472()
+ fun_l14_n541
+end
+
+def fun_l13_n473()
+ fun_l14_n966
+end
+
+def fun_l13_n474()
+ fun_l14_n107
+end
+
+def fun_l13_n475()
+ fun_l14_n917
+end
+
+def fun_l13_n476()
+ fun_l14_n683
+end
+
+def fun_l13_n477()
+ fun_l14_n625
+end
+
+def fun_l13_n478()
+ fun_l14_n439
+end
+
+def fun_l13_n479()
+ fun_l14_n69
+end
+
+def fun_l13_n480()
+ fun_l14_n252
+end
+
+def fun_l13_n481()
+ fun_l14_n753
+end
+
+def fun_l13_n482()
+ fun_l14_n50
+end
+
+def fun_l13_n483()
+ fun_l14_n634
+end
+
+def fun_l13_n484()
+ fun_l14_n908
+end
+
+def fun_l13_n485()
+ fun_l14_n733
+end
+
+def fun_l13_n486()
+ fun_l14_n450
+end
+
+def fun_l13_n487()
+ fun_l14_n373
+end
+
+def fun_l13_n488()
+ fun_l14_n226
+end
+
+def fun_l13_n489()
+ fun_l14_n320
+end
+
+def fun_l13_n490()
+ fun_l14_n498
+end
+
+def fun_l13_n491()
+ fun_l14_n49
+end
+
+def fun_l13_n492()
+ fun_l14_n46
+end
+
+def fun_l13_n493()
+ fun_l14_n993
+end
+
+def fun_l13_n494()
+ fun_l14_n123
+end
+
+def fun_l13_n495()
+ fun_l14_n393
+end
+
+def fun_l13_n496()
+ fun_l14_n500
+end
+
+def fun_l13_n497()
+ fun_l14_n328
+end
+
+def fun_l13_n498()
+ fun_l14_n711
+end
+
+def fun_l13_n499()
+ fun_l14_n734
+end
+
+def fun_l13_n500()
+ fun_l14_n354
+end
+
+def fun_l13_n501()
+ fun_l14_n565
+end
+
+def fun_l13_n502()
+ fun_l14_n699
+end
+
+def fun_l13_n503()
+ fun_l14_n157
+end
+
+def fun_l13_n504()
+ fun_l14_n634
+end
+
+def fun_l13_n505()
+ fun_l14_n282
+end
+
+def fun_l13_n506()
+ fun_l14_n484
+end
+
+def fun_l13_n507()
+ fun_l14_n972
+end
+
+def fun_l13_n508()
+ fun_l14_n763
+end
+
+def fun_l13_n509()
+ fun_l14_n530
+end
+
+def fun_l13_n510()
+ fun_l14_n88
+end
+
+def fun_l13_n511()
+ fun_l14_n718
+end
+
+def fun_l13_n512()
+ fun_l14_n988
+end
+
+def fun_l13_n513()
+ fun_l14_n266
+end
+
+def fun_l13_n514()
+ fun_l14_n489
+end
+
+def fun_l13_n515()
+ fun_l14_n662
+end
+
+def fun_l13_n516()
+ fun_l14_n821
+end
+
+def fun_l13_n517()
+ fun_l14_n697
+end
+
+def fun_l13_n518()
+ fun_l14_n984
+end
+
+def fun_l13_n519()
+ fun_l14_n847
+end
+
+def fun_l13_n520()
+ fun_l14_n916
+end
+
+def fun_l13_n521()
+ fun_l14_n304
+end
+
+def fun_l13_n522()
+ fun_l14_n778
+end
+
+def fun_l13_n523()
+ fun_l14_n105
+end
+
+def fun_l13_n524()
+ fun_l14_n272
+end
+
+def fun_l13_n525()
+ fun_l14_n814
+end
+
+def fun_l13_n526()
+ fun_l14_n689
+end
+
+def fun_l13_n527()
+ fun_l14_n314
+end
+
+def fun_l13_n528()
+ fun_l14_n483
+end
+
+def fun_l13_n529()
+ fun_l14_n571
+end
+
+def fun_l13_n530()
+ fun_l14_n162
+end
+
+def fun_l13_n531()
+ fun_l14_n737
+end
+
+def fun_l13_n532()
+ fun_l14_n886
+end
+
+def fun_l13_n533()
+ fun_l14_n638
+end
+
+def fun_l13_n534()
+ fun_l14_n765
+end
+
+def fun_l13_n535()
+ fun_l14_n452
+end
+
+def fun_l13_n536()
+ fun_l14_n367
+end
+
+def fun_l13_n537()
+ fun_l14_n245
+end
+
+def fun_l13_n538()
+ fun_l14_n590
+end
+
+def fun_l13_n539()
+ fun_l14_n383
+end
+
+def fun_l13_n540()
+ fun_l14_n210
+end
+
+def fun_l13_n541()
+ fun_l14_n25
+end
+
+def fun_l13_n542()
+ fun_l14_n612
+end
+
+def fun_l13_n543()
+ fun_l14_n639
+end
+
+def fun_l13_n544()
+ fun_l14_n540
+end
+
+def fun_l13_n545()
+ fun_l14_n538
+end
+
+def fun_l13_n546()
+ fun_l14_n323
+end
+
+def fun_l13_n547()
+ fun_l14_n556
+end
+
+def fun_l13_n548()
+ fun_l14_n219
+end
+
+def fun_l13_n549()
+ fun_l14_n583
+end
+
+def fun_l13_n550()
+ fun_l14_n818
+end
+
+def fun_l13_n551()
+ fun_l14_n167
+end
+
+def fun_l13_n552()
+ fun_l14_n310
+end
+
+def fun_l13_n553()
+ fun_l14_n528
+end
+
+def fun_l13_n554()
+ fun_l14_n604
+end
+
+def fun_l13_n555()
+ fun_l14_n426
+end
+
+def fun_l13_n556()
+ fun_l14_n398
+end
+
+def fun_l13_n557()
+ fun_l14_n885
+end
+
+def fun_l13_n558()
+ fun_l14_n905
+end
+
+def fun_l13_n559()
+ fun_l14_n882
+end
+
+def fun_l13_n560()
+ fun_l14_n536
+end
+
+def fun_l13_n561()
+ fun_l14_n392
+end
+
+def fun_l13_n562()
+ fun_l14_n948
+end
+
+def fun_l13_n563()
+ fun_l14_n522
+end
+
+def fun_l13_n564()
+ fun_l14_n704
+end
+
+def fun_l13_n565()
+ fun_l14_n365
+end
+
+def fun_l13_n566()
+ fun_l14_n925
+end
+
+def fun_l13_n567()
+ fun_l14_n353
+end
+
+def fun_l13_n568()
+ fun_l14_n215
+end
+
+def fun_l13_n569()
+ fun_l14_n932
+end
+
+def fun_l13_n570()
+ fun_l14_n458
+end
+
+def fun_l13_n571()
+ fun_l14_n793
+end
+
+def fun_l13_n572()
+ fun_l14_n650
+end
+
+def fun_l13_n573()
+ fun_l14_n888
+end
+
+def fun_l13_n574()
+ fun_l14_n986
+end
+
+def fun_l13_n575()
+ fun_l14_n834
+end
+
+def fun_l13_n576()
+ fun_l14_n253
+end
+
+def fun_l13_n577()
+ fun_l14_n382
+end
+
+def fun_l13_n578()
+ fun_l14_n300
+end
+
+def fun_l13_n579()
+ fun_l14_n457
+end
+
+def fun_l13_n580()
+ fun_l14_n398
+end
+
+def fun_l13_n581()
+ fun_l14_n93
+end
+
+def fun_l13_n582()
+ fun_l14_n226
+end
+
+def fun_l13_n583()
+ fun_l14_n665
+end
+
+def fun_l13_n584()
+ fun_l14_n354
+end
+
+def fun_l13_n585()
+ fun_l14_n460
+end
+
+def fun_l13_n586()
+ fun_l14_n185
+end
+
+def fun_l13_n587()
+ fun_l14_n577
+end
+
+def fun_l13_n588()
+ fun_l14_n180
+end
+
+def fun_l13_n589()
+ fun_l14_n769
+end
+
+def fun_l13_n590()
+ fun_l14_n78
+end
+
+def fun_l13_n591()
+ fun_l14_n455
+end
+
+def fun_l13_n592()
+ fun_l14_n862
+end
+
+def fun_l13_n593()
+ fun_l14_n471
+end
+
+def fun_l13_n594()
+ fun_l14_n931
+end
+
+def fun_l13_n595()
+ fun_l14_n255
+end
+
+def fun_l13_n596()
+ fun_l14_n261
+end
+
+def fun_l13_n597()
+ fun_l14_n586
+end
+
+def fun_l13_n598()
+ fun_l14_n45
+end
+
+def fun_l13_n599()
+ fun_l14_n892
+end
+
+def fun_l13_n600()
+ fun_l14_n615
+end
+
+def fun_l13_n601()
+ fun_l14_n910
+end
+
+def fun_l13_n602()
+ fun_l14_n888
+end
+
+def fun_l13_n603()
+ fun_l14_n827
+end
+
+def fun_l13_n604()
+ fun_l14_n765
+end
+
+def fun_l13_n605()
+ fun_l14_n118
+end
+
+def fun_l13_n606()
+ fun_l14_n895
+end
+
+def fun_l13_n607()
+ fun_l14_n183
+end
+
+def fun_l13_n608()
+ fun_l14_n200
+end
+
+def fun_l13_n609()
+ fun_l14_n873
+end
+
+def fun_l13_n610()
+ fun_l14_n402
+end
+
+def fun_l13_n611()
+ fun_l14_n414
+end
+
+def fun_l13_n612()
+ fun_l14_n492
+end
+
+def fun_l13_n613()
+ fun_l14_n811
+end
+
+def fun_l13_n614()
+ fun_l14_n814
+end
+
+def fun_l13_n615()
+ fun_l14_n95
+end
+
+def fun_l13_n616()
+ fun_l14_n782
+end
+
+def fun_l13_n617()
+ fun_l14_n329
+end
+
+def fun_l13_n618()
+ fun_l14_n180
+end
+
+def fun_l13_n619()
+ fun_l14_n104
+end
+
+def fun_l13_n620()
+ fun_l14_n341
+end
+
+def fun_l13_n621()
+ fun_l14_n132
+end
+
+def fun_l13_n622()
+ fun_l14_n815
+end
+
+def fun_l13_n623()
+ fun_l14_n785
+end
+
+def fun_l13_n624()
+ fun_l14_n934
+end
+
+def fun_l13_n625()
+ fun_l14_n760
+end
+
+def fun_l13_n626()
+ fun_l14_n307
+end
+
+def fun_l13_n627()
+ fun_l14_n433
+end
+
+def fun_l13_n628()
+ fun_l14_n156
+end
+
+def fun_l13_n629()
+ fun_l14_n95
+end
+
+def fun_l13_n630()
+ fun_l14_n44
+end
+
+def fun_l13_n631()
+ fun_l14_n643
+end
+
+def fun_l13_n632()
+ fun_l14_n876
+end
+
+def fun_l13_n633()
+ fun_l14_n477
+end
+
+def fun_l13_n634()
+ fun_l14_n549
+end
+
+def fun_l13_n635()
+ fun_l14_n795
+end
+
+def fun_l13_n636()
+ fun_l14_n814
+end
+
+def fun_l13_n637()
+ fun_l14_n52
+end
+
+def fun_l13_n638()
+ fun_l14_n542
+end
+
+def fun_l13_n639()
+ fun_l14_n204
+end
+
+def fun_l13_n640()
+ fun_l14_n256
+end
+
+def fun_l13_n641()
+ fun_l14_n198
+end
+
+def fun_l13_n642()
+ fun_l14_n221
+end
+
+def fun_l13_n643()
+ fun_l14_n855
+end
+
+def fun_l13_n644()
+ fun_l14_n978
+end
+
+def fun_l13_n645()
+ fun_l14_n954
+end
+
+def fun_l13_n646()
+ fun_l14_n148
+end
+
+def fun_l13_n647()
+ fun_l14_n528
+end
+
+def fun_l13_n648()
+ fun_l14_n807
+end
+
+def fun_l13_n649()
+ fun_l14_n735
+end
+
+def fun_l13_n650()
+ fun_l14_n518
+end
+
+def fun_l13_n651()
+ fun_l14_n255
+end
+
+def fun_l13_n652()
+ fun_l14_n251
+end
+
+def fun_l13_n653()
+ fun_l14_n311
+end
+
+def fun_l13_n654()
+ fun_l14_n134
+end
+
+def fun_l13_n655()
+ fun_l14_n474
+end
+
+def fun_l13_n656()
+ fun_l14_n857
+end
+
+def fun_l13_n657()
+ fun_l14_n758
+end
+
+def fun_l13_n658()
+ fun_l14_n310
+end
+
+def fun_l13_n659()
+ fun_l14_n846
+end
+
+def fun_l13_n660()
+ fun_l14_n220
+end
+
+def fun_l13_n661()
+ fun_l14_n81
+end
+
+def fun_l13_n662()
+ fun_l14_n958
+end
+
+def fun_l13_n663()
+ fun_l14_n221
+end
+
+def fun_l13_n664()
+ fun_l14_n107
+end
+
+def fun_l13_n665()
+ fun_l14_n131
+end
+
+def fun_l13_n666()
+ fun_l14_n750
+end
+
+def fun_l13_n667()
+ fun_l14_n455
+end
+
+def fun_l13_n668()
+ fun_l14_n354
+end
+
+def fun_l13_n669()
+ fun_l14_n76
+end
+
+def fun_l13_n670()
+ fun_l14_n111
+end
+
+def fun_l13_n671()
+ fun_l14_n411
+end
+
+def fun_l13_n672()
+ fun_l14_n400
+end
+
+def fun_l13_n673()
+ fun_l14_n407
+end
+
+def fun_l13_n674()
+ fun_l14_n851
+end
+
+def fun_l13_n675()
+ fun_l14_n521
+end
+
+def fun_l13_n676()
+ fun_l14_n448
+end
+
+def fun_l13_n677()
+ fun_l14_n615
+end
+
+def fun_l13_n678()
+ fun_l14_n574
+end
+
+def fun_l13_n679()
+ fun_l14_n300
+end
+
+def fun_l13_n680()
+ fun_l14_n783
+end
+
+def fun_l13_n681()
+ fun_l14_n172
+end
+
+def fun_l13_n682()
+ fun_l14_n725
+end
+
+def fun_l13_n683()
+ fun_l14_n657
+end
+
+def fun_l13_n684()
+ fun_l14_n550
+end
+
+def fun_l13_n685()
+ fun_l14_n976
+end
+
+def fun_l13_n686()
+ fun_l14_n77
+end
+
+def fun_l13_n687()
+ fun_l14_n472
+end
+
+def fun_l13_n688()
+ fun_l14_n300
+end
+
+def fun_l13_n689()
+ fun_l14_n139
+end
+
+def fun_l13_n690()
+ fun_l14_n623
+end
+
+def fun_l13_n691()
+ fun_l14_n336
+end
+
+def fun_l13_n692()
+ fun_l14_n502
+end
+
+def fun_l13_n693()
+ fun_l14_n184
+end
+
+def fun_l13_n694()
+ fun_l14_n745
+end
+
+def fun_l13_n695()
+ fun_l14_n27
+end
+
+def fun_l13_n696()
+ fun_l14_n299
+end
+
+def fun_l13_n697()
+ fun_l14_n7
+end
+
+def fun_l13_n698()
+ fun_l14_n842
+end
+
+def fun_l13_n699()
+ fun_l14_n592
+end
+
+def fun_l13_n700()
+ fun_l14_n993
+end
+
+def fun_l13_n701()
+ fun_l14_n113
+end
+
+def fun_l13_n702()
+ fun_l14_n997
+end
+
+def fun_l13_n703()
+ fun_l14_n740
+end
+
+def fun_l13_n704()
+ fun_l14_n261
+end
+
+def fun_l13_n705()
+ fun_l14_n737
+end
+
+def fun_l13_n706()
+ fun_l14_n216
+end
+
+def fun_l13_n707()
+ fun_l14_n607
+end
+
+def fun_l13_n708()
+ fun_l14_n520
+end
+
+def fun_l13_n709()
+ fun_l14_n133
+end
+
+def fun_l13_n710()
+ fun_l14_n615
+end
+
+def fun_l13_n711()
+ fun_l14_n476
+end
+
+def fun_l13_n712()
+ fun_l14_n154
+end
+
+def fun_l13_n713()
+ fun_l14_n947
+end
+
+def fun_l13_n714()
+ fun_l14_n893
+end
+
+def fun_l13_n715()
+ fun_l14_n296
+end
+
+def fun_l13_n716()
+ fun_l14_n275
+end
+
+def fun_l13_n717()
+ fun_l14_n622
+end
+
+def fun_l13_n718()
+ fun_l14_n561
+end
+
+def fun_l13_n719()
+ fun_l14_n216
+end
+
+def fun_l13_n720()
+ fun_l14_n459
+end
+
+def fun_l13_n721()
+ fun_l14_n329
+end
+
+def fun_l13_n722()
+ fun_l14_n901
+end
+
+def fun_l13_n723()
+ fun_l14_n824
+end
+
+def fun_l13_n724()
+ fun_l14_n359
+end
+
+def fun_l13_n725()
+ fun_l14_n399
+end
+
+def fun_l13_n726()
+ fun_l14_n998
+end
+
+def fun_l13_n727()
+ fun_l14_n327
+end
+
+def fun_l13_n728()
+ fun_l14_n659
+end
+
+def fun_l13_n729()
+ fun_l14_n564
+end
+
+def fun_l13_n730()
+ fun_l14_n718
+end
+
+def fun_l13_n731()
+ fun_l14_n751
+end
+
+def fun_l13_n732()
+ fun_l14_n172
+end
+
+def fun_l13_n733()
+ fun_l14_n289
+end
+
+def fun_l13_n734()
+ fun_l14_n956
+end
+
+def fun_l13_n735()
+ fun_l14_n375
+end
+
+def fun_l13_n736()
+ fun_l14_n459
+end
+
+def fun_l13_n737()
+ fun_l14_n471
+end
+
+def fun_l13_n738()
+ fun_l14_n957
+end
+
+def fun_l13_n739()
+ fun_l14_n670
+end
+
+def fun_l13_n740()
+ fun_l14_n396
+end
+
+def fun_l13_n741()
+ fun_l14_n909
+end
+
+def fun_l13_n742()
+ fun_l14_n226
+end
+
+def fun_l13_n743()
+ fun_l14_n458
+end
+
+def fun_l13_n744()
+ fun_l14_n923
+end
+
+def fun_l13_n745()
+ fun_l14_n255
+end
+
+def fun_l13_n746()
+ fun_l14_n2
+end
+
+def fun_l13_n747()
+ fun_l14_n805
+end
+
+def fun_l13_n748()
+ fun_l14_n157
+end
+
+def fun_l13_n749()
+ fun_l14_n952
+end
+
+def fun_l13_n750()
+ fun_l14_n902
+end
+
+def fun_l13_n751()
+ fun_l14_n723
+end
+
+def fun_l13_n752()
+ fun_l14_n204
+end
+
+def fun_l13_n753()
+ fun_l14_n53
+end
+
+def fun_l13_n754()
+ fun_l14_n240
+end
+
+def fun_l13_n755()
+ fun_l14_n161
+end
+
+def fun_l13_n756()
+ fun_l14_n735
+end
+
+def fun_l13_n757()
+ fun_l14_n298
+end
+
+def fun_l13_n758()
+ fun_l14_n743
+end
+
+def fun_l13_n759()
+ fun_l14_n886
+end
+
+def fun_l13_n760()
+ fun_l14_n559
+end
+
+def fun_l13_n761()
+ fun_l14_n42
+end
+
+def fun_l13_n762()
+ fun_l14_n86
+end
+
+def fun_l13_n763()
+ fun_l14_n138
+end
+
+def fun_l13_n764()
+ fun_l14_n477
+end
+
+def fun_l13_n765()
+ fun_l14_n763
+end
+
+def fun_l13_n766()
+ fun_l14_n360
+end
+
+def fun_l13_n767()
+ fun_l14_n486
+end
+
+def fun_l13_n768()
+ fun_l14_n734
+end
+
+def fun_l13_n769()
+ fun_l14_n442
+end
+
+def fun_l13_n770()
+ fun_l14_n512
+end
+
+def fun_l13_n771()
+ fun_l14_n399
+end
+
+def fun_l13_n772()
+ fun_l14_n88
+end
+
+def fun_l13_n773()
+ fun_l14_n55
+end
+
+def fun_l13_n774()
+ fun_l14_n138
+end
+
+def fun_l13_n775()
+ fun_l14_n104
+end
+
+def fun_l13_n776()
+ fun_l14_n901
+end
+
+def fun_l13_n777()
+ fun_l14_n7
+end
+
+def fun_l13_n778()
+ fun_l14_n72
+end
+
+def fun_l13_n779()
+ fun_l14_n588
+end
+
+def fun_l13_n780()
+ fun_l14_n266
+end
+
+def fun_l13_n781()
+ fun_l14_n428
+end
+
+def fun_l13_n782()
+ fun_l14_n802
+end
+
+def fun_l13_n783()
+ fun_l14_n59
+end
+
+def fun_l13_n784()
+ fun_l14_n734
+end
+
+def fun_l13_n785()
+ fun_l14_n674
+end
+
+def fun_l13_n786()
+ fun_l14_n126
+end
+
+def fun_l13_n787()
+ fun_l14_n199
+end
+
+def fun_l13_n788()
+ fun_l14_n695
+end
+
+def fun_l13_n789()
+ fun_l14_n332
+end
+
+def fun_l13_n790()
+ fun_l14_n734
+end
+
+def fun_l13_n791()
+ fun_l14_n856
+end
+
+def fun_l13_n792()
+ fun_l14_n447
+end
+
+def fun_l13_n793()
+ fun_l14_n931
+end
+
+def fun_l13_n794()
+ fun_l14_n608
+end
+
+def fun_l13_n795()
+ fun_l14_n131
+end
+
+def fun_l13_n796()
+ fun_l14_n961
+end
+
+def fun_l13_n797()
+ fun_l14_n109
+end
+
+def fun_l13_n798()
+ fun_l14_n766
+end
+
+def fun_l13_n799()
+ fun_l14_n149
+end
+
+def fun_l13_n800()
+ fun_l14_n44
+end
+
+def fun_l13_n801()
+ fun_l14_n893
+end
+
+def fun_l13_n802()
+ fun_l14_n826
+end
+
+def fun_l13_n803()
+ fun_l14_n372
+end
+
+def fun_l13_n804()
+ fun_l14_n7
+end
+
+def fun_l13_n805()
+ fun_l14_n655
+end
+
+def fun_l13_n806()
+ fun_l14_n418
+end
+
+def fun_l13_n807()
+ fun_l14_n746
+end
+
+def fun_l13_n808()
+ fun_l14_n810
+end
+
+def fun_l13_n809()
+ fun_l14_n838
+end
+
+def fun_l13_n810()
+ fun_l14_n522
+end
+
+def fun_l13_n811()
+ fun_l14_n723
+end
+
+def fun_l13_n812()
+ fun_l14_n476
+end
+
+def fun_l13_n813()
+ fun_l14_n760
+end
+
+def fun_l13_n814()
+ fun_l14_n728
+end
+
+def fun_l13_n815()
+ fun_l14_n926
+end
+
+def fun_l13_n816()
+ fun_l14_n16
+end
+
+def fun_l13_n817()
+ fun_l14_n888
+end
+
+def fun_l13_n818()
+ fun_l14_n812
+end
+
+def fun_l13_n819()
+ fun_l14_n430
+end
+
+def fun_l13_n820()
+ fun_l14_n211
+end
+
+def fun_l13_n821()
+ fun_l14_n204
+end
+
+def fun_l13_n822()
+ fun_l14_n868
+end
+
+def fun_l13_n823()
+ fun_l14_n460
+end
+
+def fun_l13_n824()
+ fun_l14_n597
+end
+
+def fun_l13_n825()
+ fun_l14_n217
+end
+
+def fun_l13_n826()
+ fun_l14_n425
+end
+
+def fun_l13_n827()
+ fun_l14_n216
+end
+
+def fun_l13_n828()
+ fun_l14_n931
+end
+
+def fun_l13_n829()
+ fun_l14_n3
+end
+
+def fun_l13_n830()
+ fun_l14_n55
+end
+
+def fun_l13_n831()
+ fun_l14_n362
+end
+
+def fun_l13_n832()
+ fun_l14_n591
+end
+
+def fun_l13_n833()
+ fun_l14_n339
+end
+
+def fun_l13_n834()
+ fun_l14_n641
+end
+
+def fun_l13_n835()
+ fun_l14_n389
+end
+
+def fun_l13_n836()
+ fun_l14_n668
+end
+
+def fun_l13_n837()
+ fun_l14_n845
+end
+
+def fun_l13_n838()
+ fun_l14_n202
+end
+
+def fun_l13_n839()
+ fun_l14_n575
+end
+
+def fun_l13_n840()
+ fun_l14_n357
+end
+
+def fun_l13_n841()
+ fun_l14_n271
+end
+
+def fun_l13_n842()
+ fun_l14_n876
+end
+
+def fun_l13_n843()
+ fun_l14_n983
+end
+
+def fun_l13_n844()
+ fun_l14_n512
+end
+
+def fun_l13_n845()
+ fun_l14_n205
+end
+
+def fun_l13_n846()
+ fun_l14_n463
+end
+
+def fun_l13_n847()
+ fun_l14_n422
+end
+
+def fun_l13_n848()
+ fun_l14_n54
+end
+
+def fun_l13_n849()
+ fun_l14_n575
+end
+
+def fun_l13_n850()
+ fun_l14_n187
+end
+
+def fun_l13_n851()
+ fun_l14_n151
+end
+
+def fun_l13_n852()
+ fun_l14_n176
+end
+
+def fun_l13_n853()
+ fun_l14_n501
+end
+
+def fun_l13_n854()
+ fun_l14_n390
+end
+
+def fun_l13_n855()
+ fun_l14_n902
+end
+
+def fun_l13_n856()
+ fun_l14_n354
+end
+
+def fun_l13_n857()
+ fun_l14_n245
+end
+
+def fun_l13_n858()
+ fun_l14_n299
+end
+
+def fun_l13_n859()
+ fun_l14_n532
+end
+
+def fun_l13_n860()
+ fun_l14_n263
+end
+
+def fun_l13_n861()
+ fun_l14_n811
+end
+
+def fun_l13_n862()
+ fun_l14_n298
+end
+
+def fun_l13_n863()
+ fun_l14_n635
+end
+
+def fun_l13_n864()
+ fun_l14_n913
+end
+
+def fun_l13_n865()
+ fun_l14_n901
+end
+
+def fun_l13_n866()
+ fun_l14_n380
+end
+
+def fun_l13_n867()
+ fun_l14_n9
+end
+
+def fun_l13_n868()
+ fun_l14_n982
+end
+
+def fun_l13_n869()
+ fun_l14_n703
+end
+
+def fun_l13_n870()
+ fun_l14_n272
+end
+
+def fun_l13_n871()
+ fun_l14_n209
+end
+
+def fun_l13_n872()
+ fun_l14_n429
+end
+
+def fun_l13_n873()
+ fun_l14_n108
+end
+
+def fun_l13_n874()
+ fun_l14_n116
+end
+
+def fun_l13_n875()
+ fun_l14_n169
+end
+
+def fun_l13_n876()
+ fun_l14_n642
+end
+
+def fun_l13_n877()
+ fun_l14_n265
+end
+
+def fun_l13_n878()
+ fun_l14_n227
+end
+
+def fun_l13_n879()
+ fun_l14_n202
+end
+
+def fun_l13_n880()
+ fun_l14_n336
+end
+
+def fun_l13_n881()
+ fun_l14_n856
+end
+
+def fun_l13_n882()
+ fun_l14_n821
+end
+
+def fun_l13_n883()
+ fun_l14_n275
+end
+
+def fun_l13_n884()
+ fun_l14_n903
+end
+
+def fun_l13_n885()
+ fun_l14_n407
+end
+
+def fun_l13_n886()
+ fun_l14_n129
+end
+
+def fun_l13_n887()
+ fun_l14_n68
+end
+
+def fun_l13_n888()
+ fun_l14_n124
+end
+
+def fun_l13_n889()
+ fun_l14_n936
+end
+
+def fun_l13_n890()
+ fun_l14_n401
+end
+
+def fun_l13_n891()
+ fun_l14_n574
+end
+
+def fun_l13_n892()
+ fun_l14_n593
+end
+
+def fun_l13_n893()
+ fun_l14_n262
+end
+
+def fun_l13_n894()
+ fun_l14_n215
+end
+
+def fun_l13_n895()
+ fun_l14_n49
+end
+
+def fun_l13_n896()
+ fun_l14_n767
+end
+
+def fun_l13_n897()
+ fun_l14_n280
+end
+
+def fun_l13_n898()
+ fun_l14_n112
+end
+
+def fun_l13_n899()
+ fun_l14_n202
+end
+
+def fun_l13_n900()
+ fun_l14_n73
+end
+
+def fun_l13_n901()
+ fun_l14_n798
+end
+
+def fun_l13_n902()
+ fun_l14_n827
+end
+
+def fun_l13_n903()
+ fun_l14_n824
+end
+
+def fun_l13_n904()
+ fun_l14_n414
+end
+
+def fun_l13_n905()
+ fun_l14_n502
+end
+
+def fun_l13_n906()
+ fun_l14_n323
+end
+
+def fun_l13_n907()
+ fun_l14_n216
+end
+
+def fun_l13_n908()
+ fun_l14_n173
+end
+
+def fun_l13_n909()
+ fun_l14_n26
+end
+
+def fun_l13_n910()
+ fun_l14_n40
+end
+
+def fun_l13_n911()
+ fun_l14_n883
+end
+
+def fun_l13_n912()
+ fun_l14_n523
+end
+
+def fun_l13_n913()
+ fun_l14_n979
+end
+
+def fun_l13_n914()
+ fun_l14_n921
+end
+
+def fun_l13_n915()
+ fun_l14_n842
+end
+
+def fun_l13_n916()
+ fun_l14_n943
+end
+
+def fun_l13_n917()
+ fun_l14_n97
+end
+
+def fun_l13_n918()
+ fun_l14_n515
+end
+
+def fun_l13_n919()
+ fun_l14_n145
+end
+
+def fun_l13_n920()
+ fun_l14_n497
+end
+
+def fun_l13_n921()
+ fun_l14_n264
+end
+
+def fun_l13_n922()
+ fun_l14_n901
+end
+
+def fun_l13_n923()
+ fun_l14_n436
+end
+
+def fun_l13_n924()
+ fun_l14_n315
+end
+
+def fun_l13_n925()
+ fun_l14_n512
+end
+
+def fun_l13_n926()
+ fun_l14_n611
+end
+
+def fun_l13_n927()
+ fun_l14_n103
+end
+
+def fun_l13_n928()
+ fun_l14_n149
+end
+
+def fun_l13_n929()
+ fun_l14_n407
+end
+
+def fun_l13_n930()
+ fun_l14_n380
+end
+
+def fun_l13_n931()
+ fun_l14_n429
+end
+
+def fun_l13_n932()
+ fun_l14_n870
+end
+
+def fun_l13_n933()
+ fun_l14_n274
+end
+
+def fun_l13_n934()
+ fun_l14_n57
+end
+
+def fun_l13_n935()
+ fun_l14_n718
+end
+
+def fun_l13_n936()
+ fun_l14_n571
+end
+
+def fun_l13_n937()
+ fun_l14_n447
+end
+
+def fun_l13_n938()
+ fun_l14_n742
+end
+
+def fun_l13_n939()
+ fun_l14_n811
+end
+
+def fun_l13_n940()
+ fun_l14_n148
+end
+
+def fun_l13_n941()
+ fun_l14_n795
+end
+
+def fun_l13_n942()
+ fun_l14_n807
+end
+
+def fun_l13_n943()
+ fun_l14_n279
+end
+
+def fun_l13_n944()
+ fun_l14_n939
+end
+
+def fun_l13_n945()
+ fun_l14_n435
+end
+
+def fun_l13_n946()
+ fun_l14_n937
+end
+
+def fun_l13_n947()
+ fun_l14_n543
+end
+
+def fun_l13_n948()
+ fun_l14_n374
+end
+
+def fun_l13_n949()
+ fun_l14_n707
+end
+
+def fun_l13_n950()
+ fun_l14_n866
+end
+
+def fun_l13_n951()
+ fun_l14_n67
+end
+
+def fun_l13_n952()
+ fun_l14_n752
+end
+
+def fun_l13_n953()
+ fun_l14_n113
+end
+
+def fun_l13_n954()
+ fun_l14_n358
+end
+
+def fun_l13_n955()
+ fun_l14_n432
+end
+
+def fun_l13_n956()
+ fun_l14_n132
+end
+
+def fun_l13_n957()
+ fun_l14_n807
+end
+
+def fun_l13_n958()
+ fun_l14_n293
+end
+
+def fun_l13_n959()
+ fun_l14_n681
+end
+
+def fun_l13_n960()
+ fun_l14_n335
+end
+
+def fun_l13_n961()
+ fun_l14_n285
+end
+
+def fun_l13_n962()
+ fun_l14_n366
+end
+
+def fun_l13_n963()
+ fun_l14_n674
+end
+
+def fun_l13_n964()
+ fun_l14_n914
+end
+
+def fun_l13_n965()
+ fun_l14_n776
+end
+
+def fun_l13_n966()
+ fun_l14_n297
+end
+
+def fun_l13_n967()
+ fun_l14_n623
+end
+
+def fun_l13_n968()
+ fun_l14_n357
+end
+
+def fun_l13_n969()
+ fun_l14_n430
+end
+
+def fun_l13_n970()
+ fun_l14_n201
+end
+
+def fun_l13_n971()
+ fun_l14_n482
+end
+
+def fun_l13_n972()
+ fun_l14_n363
+end
+
+def fun_l13_n973()
+ fun_l14_n530
+end
+
+def fun_l13_n974()
+ fun_l14_n892
+end
+
+def fun_l13_n975()
+ fun_l14_n548
+end
+
+def fun_l13_n976()
+ fun_l14_n257
+end
+
+def fun_l13_n977()
+ fun_l14_n449
+end
+
+def fun_l13_n978()
+ fun_l14_n346
+end
+
+def fun_l13_n979()
+ fun_l14_n448
+end
+
+def fun_l13_n980()
+ fun_l14_n912
+end
+
+def fun_l13_n981()
+ fun_l14_n358
+end
+
+def fun_l13_n982()
+ fun_l14_n55
+end
+
+def fun_l13_n983()
+ fun_l14_n712
+end
+
+def fun_l13_n984()
+ fun_l14_n179
+end
+
+def fun_l13_n985()
+ fun_l14_n749
+end
+
+def fun_l13_n986()
+ fun_l14_n469
+end
+
+def fun_l13_n987()
+ fun_l14_n557
+end
+
+def fun_l13_n988()
+ fun_l14_n383
+end
+
+def fun_l13_n989()
+ fun_l14_n929
+end
+
+def fun_l13_n990()
+ fun_l14_n659
+end
+
+def fun_l13_n991()
+ fun_l14_n285
+end
+
+def fun_l13_n992()
+ fun_l14_n779
+end
+
+def fun_l13_n993()
+ fun_l14_n235
+end
+
+def fun_l13_n994()
+ fun_l14_n756
+end
+
+def fun_l13_n995()
+ fun_l14_n249
+end
+
+def fun_l13_n996()
+ fun_l14_n8
+end
+
+def fun_l13_n997()
+ fun_l14_n785
+end
+
+def fun_l13_n998()
+ fun_l14_n945
+end
+
+def fun_l13_n999()
+ fun_l14_n410
+end
+
+def fun_l14_n0()
+ fun_l15_n85
+end
+
+def fun_l14_n1()
+ fun_l15_n932
+end
+
+def fun_l14_n2()
+ fun_l15_n422
+end
+
+def fun_l14_n3()
+ fun_l15_n439
+end
+
+def fun_l14_n4()
+ fun_l15_n186
+end
+
+def fun_l14_n5()
+ fun_l15_n914
+end
+
+def fun_l14_n6()
+ fun_l15_n830
+end
+
+def fun_l14_n7()
+ fun_l15_n384
+end
+
+def fun_l14_n8()
+ fun_l15_n200
+end
+
+def fun_l14_n9()
+ fun_l15_n72
+end
+
+def fun_l14_n10()
+ fun_l15_n498
+end
+
+def fun_l14_n11()
+ fun_l15_n247
+end
+
+def fun_l14_n12()
+ fun_l15_n432
+end
+
+def fun_l14_n13()
+ fun_l15_n718
+end
+
+def fun_l14_n14()
+ fun_l15_n568
+end
+
+def fun_l14_n15()
+ fun_l15_n971
+end
+
+def fun_l14_n16()
+ fun_l15_n545
+end
+
+def fun_l14_n17()
+ fun_l15_n441
+end
+
+def fun_l14_n18()
+ fun_l15_n532
+end
+
+def fun_l14_n19()
+ fun_l15_n484
+end
+
+def fun_l14_n20()
+ fun_l15_n659
+end
+
+def fun_l14_n21()
+ fun_l15_n494
+end
+
+def fun_l14_n22()
+ fun_l15_n379
+end
+
+def fun_l14_n23()
+ fun_l15_n180
+end
+
+def fun_l14_n24()
+ fun_l15_n955
+end
+
+def fun_l14_n25()
+ fun_l15_n536
+end
+
+def fun_l14_n26()
+ fun_l15_n940
+end
+
+def fun_l14_n27()
+ fun_l15_n3
+end
+
+def fun_l14_n28()
+ fun_l15_n520
+end
+
+def fun_l14_n29()
+ fun_l15_n478
+end
+
+def fun_l14_n30()
+ fun_l15_n865
+end
+
+def fun_l14_n31()
+ fun_l15_n330
+end
+
+def fun_l14_n32()
+ fun_l15_n217
+end
+
+def fun_l14_n33()
+ fun_l15_n381
+end
+
+def fun_l14_n34()
+ fun_l15_n88
+end
+
+def fun_l14_n35()
+ fun_l15_n111
+end
+
+def fun_l14_n36()
+ fun_l15_n181
+end
+
+def fun_l14_n37()
+ fun_l15_n978
+end
+
+def fun_l14_n38()
+ fun_l15_n596
+end
+
+def fun_l14_n39()
+ fun_l15_n764
+end
+
+def fun_l14_n40()
+ fun_l15_n779
+end
+
+def fun_l14_n41()
+ fun_l15_n994
+end
+
+def fun_l14_n42()
+ fun_l15_n90
+end
+
+def fun_l14_n43()
+ fun_l15_n329
+end
+
+def fun_l14_n44()
+ fun_l15_n684
+end
+
+def fun_l14_n45()
+ fun_l15_n191
+end
+
+def fun_l14_n46()
+ fun_l15_n282
+end
+
+def fun_l14_n47()
+ fun_l15_n915
+end
+
+def fun_l14_n48()
+ fun_l15_n330
+end
+
+def fun_l14_n49()
+ fun_l15_n136
+end
+
+def fun_l14_n50()
+ fun_l15_n167
+end
+
+def fun_l14_n51()
+ fun_l15_n418
+end
+
+def fun_l14_n52()
+ fun_l15_n822
+end
+
+def fun_l14_n53()
+ fun_l15_n557
+end
+
+def fun_l14_n54()
+ fun_l15_n155
+end
+
+def fun_l14_n55()
+ fun_l15_n629
+end
+
+def fun_l14_n56()
+ fun_l15_n694
+end
+
+def fun_l14_n57()
+ fun_l15_n577
+end
+
+def fun_l14_n58()
+ fun_l15_n412
+end
+
+def fun_l14_n59()
+ fun_l15_n618
+end
+
+def fun_l14_n60()
+ fun_l15_n873
+end
+
+def fun_l14_n61()
+ fun_l15_n758
+end
+
+def fun_l14_n62()
+ fun_l15_n820
+end
+
+def fun_l14_n63()
+ fun_l15_n89
+end
+
+def fun_l14_n64()
+ fun_l15_n788
+end
+
+def fun_l14_n65()
+ fun_l15_n390
+end
+
+def fun_l14_n66()
+ fun_l15_n177
+end
+
+def fun_l14_n67()
+ fun_l15_n972
+end
+
+def fun_l14_n68()
+ fun_l15_n124
+end
+
+def fun_l14_n69()
+ fun_l15_n426
+end
+
+def fun_l14_n70()
+ fun_l15_n490
+end
+
+def fun_l14_n71()
+ fun_l15_n963
+end
+
+def fun_l14_n72()
+ fun_l15_n960
+end
+
+def fun_l14_n73()
+ fun_l15_n111
+end
+
+def fun_l14_n74()
+ fun_l15_n535
+end
+
+def fun_l14_n75()
+ fun_l15_n936
+end
+
+def fun_l14_n76()
+ fun_l15_n17
+end
+
+def fun_l14_n77()
+ fun_l15_n732
+end
+
+def fun_l14_n78()
+ fun_l15_n905
+end
+
+def fun_l14_n79()
+ fun_l15_n658
+end
+
+def fun_l14_n80()
+ fun_l15_n869
+end
+
+def fun_l14_n81()
+ fun_l15_n966
+end
+
+def fun_l14_n82()
+ fun_l15_n413
+end
+
+def fun_l14_n83()
+ fun_l15_n360
+end
+
+def fun_l14_n84()
+ fun_l15_n955
+end
+
+def fun_l14_n85()
+ fun_l15_n612
+end
+
+def fun_l14_n86()
+ fun_l15_n665
+end
+
+def fun_l14_n87()
+ fun_l15_n570
+end
+
+def fun_l14_n88()
+ fun_l15_n381
+end
+
+def fun_l14_n89()
+ fun_l15_n169
+end
+
+def fun_l14_n90()
+ fun_l15_n33
+end
+
+def fun_l14_n91()
+ fun_l15_n574
+end
+
+def fun_l14_n92()
+ fun_l15_n826
+end
+
+def fun_l14_n93()
+ fun_l15_n183
+end
+
+def fun_l14_n94()
+ fun_l15_n878
+end
+
+def fun_l14_n95()
+ fun_l15_n898
+end
+
+def fun_l14_n96()
+ fun_l15_n296
+end
+
+def fun_l14_n97()
+ fun_l15_n769
+end
+
+def fun_l14_n98()
+ fun_l15_n41
+end
+
+def fun_l14_n99()
+ fun_l15_n644
+end
+
+def fun_l14_n100()
+ fun_l15_n218
+end
+
+def fun_l14_n101()
+ fun_l15_n267
+end
+
+def fun_l14_n102()
+ fun_l15_n846
+end
+
+def fun_l14_n103()
+ fun_l15_n409
+end
+
+def fun_l14_n104()
+ fun_l15_n776
+end
+
+def fun_l14_n105()
+ fun_l15_n224
+end
+
+def fun_l14_n106()
+ fun_l15_n401
+end
+
+def fun_l14_n107()
+ fun_l15_n726
+end
+
+def fun_l14_n108()
+ fun_l15_n624
+end
+
+def fun_l14_n109()
+ fun_l15_n319
+end
+
+def fun_l14_n110()
+ fun_l15_n180
+end
+
+def fun_l14_n111()
+ fun_l15_n370
+end
+
+def fun_l14_n112()
+ fun_l15_n834
+end
+
+def fun_l14_n113()
+ fun_l15_n397
+end
+
+def fun_l14_n114()
+ fun_l15_n685
+end
+
+def fun_l14_n115()
+ fun_l15_n286
+end
+
+def fun_l14_n116()
+ fun_l15_n740
+end
+
+def fun_l14_n117()
+ fun_l15_n122
+end
+
+def fun_l14_n118()
+ fun_l15_n112
+end
+
+def fun_l14_n119()
+ fun_l15_n658
+end
+
+def fun_l14_n120()
+ fun_l15_n844
+end
+
+def fun_l14_n121()
+ fun_l15_n715
+end
+
+def fun_l14_n122()
+ fun_l15_n14
+end
+
+def fun_l14_n123()
+ fun_l15_n677
+end
+
+def fun_l14_n124()
+ fun_l15_n742
+end
+
+def fun_l14_n125()
+ fun_l15_n311
+end
+
+def fun_l14_n126()
+ fun_l15_n234
+end
+
+def fun_l14_n127()
+ fun_l15_n746
+end
+
+def fun_l14_n128()
+ fun_l15_n616
+end
+
+def fun_l14_n129()
+ fun_l15_n529
+end
+
+def fun_l14_n130()
+ fun_l15_n330
+end
+
+def fun_l14_n131()
+ fun_l15_n182
+end
+
+def fun_l14_n132()
+ fun_l15_n588
+end
+
+def fun_l14_n133()
+ fun_l15_n477
+end
+
+def fun_l14_n134()
+ fun_l15_n267
+end
+
+def fun_l14_n135()
+ fun_l15_n667
+end
+
+def fun_l14_n136()
+ fun_l15_n233
+end
+
+def fun_l14_n137()
+ fun_l15_n630
+end
+
+def fun_l14_n138()
+ fun_l15_n993
+end
+
+def fun_l14_n139()
+ fun_l15_n79
+end
+
+def fun_l14_n140()
+ fun_l15_n2
+end
+
+def fun_l14_n141()
+ fun_l15_n774
+end
+
+def fun_l14_n142()
+ fun_l15_n762
+end
+
+def fun_l14_n143()
+ fun_l15_n832
+end
+
+def fun_l14_n144()
+ fun_l15_n359
+end
+
+def fun_l14_n145()
+ fun_l15_n344
+end
+
+def fun_l14_n146()
+ fun_l15_n521
+end
+
+def fun_l14_n147()
+ fun_l15_n867
+end
+
+def fun_l14_n148()
+ fun_l15_n132
+end
+
+def fun_l14_n149()
+ fun_l15_n19
+end
+
+def fun_l14_n150()
+ fun_l15_n513
+end
+
+def fun_l14_n151()
+ fun_l15_n732
+end
+
+def fun_l14_n152()
+ fun_l15_n709
+end
+
+def fun_l14_n153()
+ fun_l15_n876
+end
+
+def fun_l14_n154()
+ fun_l15_n400
+end
+
+def fun_l14_n155()
+ fun_l15_n539
+end
+
+def fun_l14_n156()
+ fun_l15_n895
+end
+
+def fun_l14_n157()
+ fun_l15_n208
+end
+
+def fun_l14_n158()
+ fun_l15_n268
+end
+
+def fun_l14_n159()
+ fun_l15_n286
+end
+
+def fun_l14_n160()
+ fun_l15_n457
+end
+
+def fun_l14_n161()
+ fun_l15_n985
+end
+
+def fun_l14_n162()
+ fun_l15_n48
+end
+
+def fun_l14_n163()
+ fun_l15_n495
+end
+
+def fun_l14_n164()
+ fun_l15_n10
+end
+
+def fun_l14_n165()
+ fun_l15_n368
+end
+
+def fun_l14_n166()
+ fun_l15_n266
+end
+
+def fun_l14_n167()
+ fun_l15_n587
+end
+
+def fun_l14_n168()
+ fun_l15_n210
+end
+
+def fun_l14_n169()
+ fun_l15_n5
+end
+
+def fun_l14_n170()
+ fun_l15_n635
+end
+
+def fun_l14_n171()
+ fun_l15_n47
+end
+
+def fun_l14_n172()
+ fun_l15_n88
+end
+
+def fun_l14_n173()
+ fun_l15_n79
+end
+
+def fun_l14_n174()
+ fun_l15_n791
+end
+
+def fun_l14_n175()
+ fun_l15_n812
+end
+
+def fun_l14_n176()
+ fun_l15_n112
+end
+
+def fun_l14_n177()
+ fun_l15_n590
+end
+
+def fun_l14_n178()
+ fun_l15_n59
+end
+
+def fun_l14_n179()
+ fun_l15_n275
+end
+
+def fun_l14_n180()
+ fun_l15_n206
+end
+
+def fun_l14_n181()
+ fun_l15_n385
+end
+
+def fun_l14_n182()
+ fun_l15_n809
+end
+
+def fun_l14_n183()
+ fun_l15_n704
+end
+
+def fun_l14_n184()
+ fun_l15_n331
+end
+
+def fun_l14_n185()
+ fun_l15_n819
+end
+
+def fun_l14_n186()
+ fun_l15_n165
+end
+
+def fun_l14_n187()
+ fun_l15_n623
+end
+
+def fun_l14_n188()
+ fun_l15_n528
+end
+
+def fun_l14_n189()
+ fun_l15_n393
+end
+
+def fun_l14_n190()
+ fun_l15_n712
+end
+
+def fun_l14_n191()
+ fun_l15_n951
+end
+
+def fun_l14_n192()
+ fun_l15_n584
+end
+
+def fun_l14_n193()
+ fun_l15_n984
+end
+
+def fun_l14_n194()
+ fun_l15_n283
+end
+
+def fun_l14_n195()
+ fun_l15_n821
+end
+
+def fun_l14_n196()
+ fun_l15_n105
+end
+
+def fun_l14_n197()
+ fun_l15_n49
+end
+
+def fun_l14_n198()
+ fun_l15_n191
+end
+
+def fun_l14_n199()
+ fun_l15_n751
+end
+
+def fun_l14_n200()
+ fun_l15_n108
+end
+
+def fun_l14_n201()
+ fun_l15_n121
+end
+
+def fun_l14_n202()
+ fun_l15_n751
+end
+
+def fun_l14_n203()
+ fun_l15_n837
+end
+
+def fun_l14_n204()
+ fun_l15_n747
+end
+
+def fun_l14_n205()
+ fun_l15_n682
+end
+
+def fun_l14_n206()
+ fun_l15_n689
+end
+
+def fun_l14_n207()
+ fun_l15_n562
+end
+
+def fun_l14_n208()
+ fun_l15_n580
+end
+
+def fun_l14_n209()
+ fun_l15_n556
+end
+
+def fun_l14_n210()
+ fun_l15_n155
+end
+
+def fun_l14_n211()
+ fun_l15_n661
+end
+
+def fun_l14_n212()
+ fun_l15_n571
+end
+
+def fun_l14_n213()
+ fun_l15_n341
+end
+
+def fun_l14_n214()
+ fun_l15_n200
+end
+
+def fun_l14_n215()
+ fun_l15_n78
+end
+
+def fun_l14_n216()
+ fun_l15_n922
+end
+
+def fun_l14_n217()
+ fun_l15_n437
+end
+
+def fun_l14_n218()
+ fun_l15_n263
+end
+
+def fun_l14_n219()
+ fun_l15_n971
+end
+
+def fun_l14_n220()
+ fun_l15_n65
+end
+
+def fun_l14_n221()
+ fun_l15_n951
+end
+
+def fun_l14_n222()
+ fun_l15_n163
+end
+
+def fun_l14_n223()
+ fun_l15_n732
+end
+
+def fun_l14_n224()
+ fun_l15_n424
+end
+
+def fun_l14_n225()
+ fun_l15_n91
+end
+
+def fun_l14_n226()
+ fun_l15_n711
+end
+
+def fun_l14_n227()
+ fun_l15_n224
+end
+
+def fun_l14_n228()
+ fun_l15_n885
+end
+
+def fun_l14_n229()
+ fun_l15_n489
+end
+
+def fun_l14_n230()
+ fun_l15_n733
+end
+
+def fun_l14_n231()
+ fun_l15_n355
+end
+
+def fun_l14_n232()
+ fun_l15_n819
+end
+
+def fun_l14_n233()
+ fun_l15_n934
+end
+
+def fun_l14_n234()
+ fun_l15_n643
+end
+
+def fun_l14_n235()
+ fun_l15_n555
+end
+
+def fun_l14_n236()
+ fun_l15_n508
+end
+
+def fun_l14_n237()
+ fun_l15_n181
+end
+
+def fun_l14_n238()
+ fun_l15_n171
+end
+
+def fun_l14_n239()
+ fun_l15_n834
+end
+
+def fun_l14_n240()
+ fun_l15_n599
+end
+
+def fun_l14_n241()
+ fun_l15_n492
+end
+
+def fun_l14_n242()
+ fun_l15_n131
+end
+
+def fun_l14_n243()
+ fun_l15_n838
+end
+
+def fun_l14_n244()
+ fun_l15_n745
+end
+
+def fun_l14_n245()
+ fun_l15_n653
+end
+
+def fun_l14_n246()
+ fun_l15_n905
+end
+
+def fun_l14_n247()
+ fun_l15_n962
+end
+
+def fun_l14_n248()
+ fun_l15_n269
+end
+
+def fun_l14_n249()
+ fun_l15_n920
+end
+
+def fun_l14_n250()
+ fun_l15_n428
+end
+
+def fun_l14_n251()
+ fun_l15_n305
+end
+
+def fun_l14_n252()
+ fun_l15_n630
+end
+
+def fun_l14_n253()
+ fun_l15_n458
+end
+
+def fun_l14_n254()
+ fun_l15_n933
+end
+
+def fun_l14_n255()
+ fun_l15_n852
+end
+
+def fun_l14_n256()
+ fun_l15_n855
+end
+
+def fun_l14_n257()
+ fun_l15_n207
+end
+
+def fun_l14_n258()
+ fun_l15_n865
+end
+
+def fun_l14_n259()
+ fun_l15_n958
+end
+
+def fun_l14_n260()
+ fun_l15_n230
+end
+
+def fun_l14_n261()
+ fun_l15_n872
+end
+
+def fun_l14_n262()
+ fun_l15_n963
+end
+
+def fun_l14_n263()
+ fun_l15_n945
+end
+
+def fun_l14_n264()
+ fun_l15_n410
+end
+
+def fun_l14_n265()
+ fun_l15_n735
+end
+
+def fun_l14_n266()
+ fun_l15_n496
+end
+
+def fun_l14_n267()
+ fun_l15_n110
+end
+
+def fun_l14_n268()
+ fun_l15_n267
+end
+
+def fun_l14_n269()
+ fun_l15_n699
+end
+
+def fun_l14_n270()
+ fun_l15_n812
+end
+
+def fun_l14_n271()
+ fun_l15_n273
+end
+
+def fun_l14_n272()
+ fun_l15_n499
+end
+
+def fun_l14_n273()
+ fun_l15_n341
+end
+
+def fun_l14_n274()
+ fun_l15_n512
+end
+
+def fun_l14_n275()
+ fun_l15_n110
+end
+
+def fun_l14_n276()
+ fun_l15_n62
+end
+
+def fun_l14_n277()
+ fun_l15_n541
+end
+
+def fun_l14_n278()
+ fun_l15_n622
+end
+
+def fun_l14_n279()
+ fun_l15_n456
+end
+
+def fun_l14_n280()
+ fun_l15_n527
+end
+
+def fun_l14_n281()
+ fun_l15_n141
+end
+
+def fun_l14_n282()
+ fun_l15_n266
+end
+
+def fun_l14_n283()
+ fun_l15_n817
+end
+
+def fun_l14_n284()
+ fun_l15_n448
+end
+
+def fun_l14_n285()
+ fun_l15_n208
+end
+
+def fun_l14_n286()
+ fun_l15_n368
+end
+
+def fun_l14_n287()
+ fun_l15_n947
+end
+
+def fun_l14_n288()
+ fun_l15_n192
+end
+
+def fun_l14_n289()
+ fun_l15_n68
+end
+
+def fun_l14_n290()
+ fun_l15_n704
+end
+
+def fun_l14_n291()
+ fun_l15_n278
+end
+
+def fun_l14_n292()
+ fun_l15_n352
+end
+
+def fun_l14_n293()
+ fun_l15_n629
+end
+
+def fun_l14_n294()
+ fun_l15_n404
+end
+
+def fun_l14_n295()
+ fun_l15_n89
+end
+
+def fun_l14_n296()
+ fun_l15_n920
+end
+
+def fun_l14_n297()
+ fun_l15_n984
+end
+
+def fun_l14_n298()
+ fun_l15_n198
+end
+
+def fun_l14_n299()
+ fun_l15_n524
+end
+
+def fun_l14_n300()
+ fun_l15_n891
+end
+
+def fun_l14_n301()
+ fun_l15_n921
+end
+
+def fun_l14_n302()
+ fun_l15_n785
+end
+
+def fun_l14_n303()
+ fun_l15_n618
+end
+
+def fun_l14_n304()
+ fun_l15_n387
+end
+
+def fun_l14_n305()
+ fun_l15_n361
+end
+
+def fun_l14_n306()
+ fun_l15_n535
+end
+
+def fun_l14_n307()
+ fun_l15_n137
+end
+
+def fun_l14_n308()
+ fun_l15_n77
+end
+
+def fun_l14_n309()
+ fun_l15_n877
+end
+
+def fun_l14_n310()
+ fun_l15_n178
+end
+
+def fun_l14_n311()
+ fun_l15_n67
+end
+
+def fun_l14_n312()
+ fun_l15_n539
+end
+
+def fun_l14_n313()
+ fun_l15_n971
+end
+
+def fun_l14_n314()
+ fun_l15_n743
+end
+
+def fun_l14_n315()
+ fun_l15_n787
+end
+
+def fun_l14_n316()
+ fun_l15_n451
+end
+
+def fun_l14_n317()
+ fun_l15_n12
+end
+
+def fun_l14_n318()
+ fun_l15_n303
+end
+
+def fun_l14_n319()
+ fun_l15_n210
+end
+
+def fun_l14_n320()
+ fun_l15_n853
+end
+
+def fun_l14_n321()
+ fun_l15_n154
+end
+
+def fun_l14_n322()
+ fun_l15_n71
+end
+
+def fun_l14_n323()
+ fun_l15_n448
+end
+
+def fun_l14_n324()
+ fun_l15_n178
+end
+
+def fun_l14_n325()
+ fun_l15_n312
+end
+
+def fun_l14_n326()
+ fun_l15_n671
+end
+
+def fun_l14_n327()
+ fun_l15_n282
+end
+
+def fun_l14_n328()
+ fun_l15_n315
+end
+
+def fun_l14_n329()
+ fun_l15_n449
+end
+
+def fun_l14_n330()
+ fun_l15_n338
+end
+
+def fun_l14_n331()
+ fun_l15_n260
+end
+
+def fun_l14_n332()
+ fun_l15_n664
+end
+
+def fun_l14_n333()
+ fun_l15_n312
+end
+
+def fun_l14_n334()
+ fun_l15_n202
+end
+
+def fun_l14_n335()
+ fun_l15_n969
+end
+
+def fun_l14_n336()
+ fun_l15_n698
+end
+
+def fun_l14_n337()
+ fun_l15_n802
+end
+
+def fun_l14_n338()
+ fun_l15_n175
+end
+
+def fun_l14_n339()
+ fun_l15_n646
+end
+
+def fun_l14_n340()
+ fun_l15_n145
+end
+
+def fun_l14_n341()
+ fun_l15_n19
+end
+
+def fun_l14_n342()
+ fun_l15_n764
+end
+
+def fun_l14_n343()
+ fun_l15_n970
+end
+
+def fun_l14_n344()
+ fun_l15_n519
+end
+
+def fun_l14_n345()
+ fun_l15_n121
+end
+
+def fun_l14_n346()
+ fun_l15_n299
+end
+
+def fun_l14_n347()
+ fun_l15_n553
+end
+
+def fun_l14_n348()
+ fun_l15_n618
+end
+
+def fun_l14_n349()
+ fun_l15_n725
+end
+
+def fun_l14_n350()
+ fun_l15_n635
+end
+
+def fun_l14_n351()
+ fun_l15_n382
+end
+
+def fun_l14_n352()
+ fun_l15_n529
+end
+
+def fun_l14_n353()
+ fun_l15_n168
+end
+
+def fun_l14_n354()
+ fun_l15_n948
+end
+
+def fun_l14_n355()
+ fun_l15_n192
+end
+
+def fun_l14_n356()
+ fun_l15_n27
+end
+
+def fun_l14_n357()
+ fun_l15_n254
+end
+
+def fun_l14_n358()
+ fun_l15_n384
+end
+
+def fun_l14_n359()
+ fun_l15_n559
+end
+
+def fun_l14_n360()
+ fun_l15_n560
+end
+
+def fun_l14_n361()
+ fun_l15_n781
+end
+
+def fun_l14_n362()
+ fun_l15_n494
+end
+
+def fun_l14_n363()
+ fun_l15_n997
+end
+
+def fun_l14_n364()
+ fun_l15_n203
+end
+
+def fun_l14_n365()
+ fun_l15_n61
+end
+
+def fun_l14_n366()
+ fun_l15_n190
+end
+
+def fun_l14_n367()
+ fun_l15_n755
+end
+
+def fun_l14_n368()
+ fun_l15_n876
+end
+
+def fun_l14_n369()
+ fun_l15_n761
+end
+
+def fun_l14_n370()
+ fun_l15_n641
+end
+
+def fun_l14_n371()
+ fun_l15_n307
+end
+
+def fun_l14_n372()
+ fun_l15_n351
+end
+
+def fun_l14_n373()
+ fun_l15_n929
+end
+
+def fun_l14_n374()
+ fun_l15_n455
+end
+
+def fun_l14_n375()
+ fun_l15_n740
+end
+
+def fun_l14_n376()
+ fun_l15_n803
+end
+
+def fun_l14_n377()
+ fun_l15_n544
+end
+
+def fun_l14_n378()
+ fun_l15_n666
+end
+
+def fun_l14_n379()
+ fun_l15_n274
+end
+
+def fun_l14_n380()
+ fun_l15_n374
+end
+
+def fun_l14_n381()
+ fun_l15_n108
+end
+
+def fun_l14_n382()
+ fun_l15_n632
+end
+
+def fun_l14_n383()
+ fun_l15_n782
+end
+
+def fun_l14_n384()
+ fun_l15_n16
+end
+
+def fun_l14_n385()
+ fun_l15_n323
+end
+
+def fun_l14_n386()
+ fun_l15_n923
+end
+
+def fun_l14_n387()
+ fun_l15_n929
+end
+
+def fun_l14_n388()
+ fun_l15_n318
+end
+
+def fun_l14_n389()
+ fun_l15_n929
+end
+
+def fun_l14_n390()
+ fun_l15_n633
+end
+
+def fun_l14_n391()
+ fun_l15_n159
+end
+
+def fun_l14_n392()
+ fun_l15_n18
+end
+
+def fun_l14_n393()
+ fun_l15_n997
+end
+
+def fun_l14_n394()
+ fun_l15_n585
+end
+
+def fun_l14_n395()
+ fun_l15_n216
+end
+
+def fun_l14_n396()
+ fun_l15_n665
+end
+
+def fun_l14_n397()
+ fun_l15_n51
+end
+
+def fun_l14_n398()
+ fun_l15_n681
+end
+
+def fun_l14_n399()
+ fun_l15_n921
+end
+
+def fun_l14_n400()
+ fun_l15_n937
+end
+
+def fun_l14_n401()
+ fun_l15_n251
+end
+
+def fun_l14_n402()
+ fun_l15_n359
+end
+
+def fun_l14_n403()
+ fun_l15_n262
+end
+
+def fun_l14_n404()
+ fun_l15_n631
+end
+
+def fun_l14_n405()
+ fun_l15_n218
+end
+
+def fun_l14_n406()
+ fun_l15_n138
+end
+
+def fun_l14_n407()
+ fun_l15_n695
+end
+
+def fun_l14_n408()
+ fun_l15_n95
+end
+
+def fun_l14_n409()
+ fun_l15_n166
+end
+
+def fun_l14_n410()
+ fun_l15_n566
+end
+
+def fun_l14_n411()
+ fun_l15_n322
+end
+
+def fun_l14_n412()
+ fun_l15_n278
+end
+
+def fun_l14_n413()
+ fun_l15_n144
+end
+
+def fun_l14_n414()
+ fun_l15_n949
+end
+
+def fun_l14_n415()
+ fun_l15_n351
+end
+
+def fun_l14_n416()
+ fun_l15_n887
+end
+
+def fun_l14_n417()
+ fun_l15_n501
+end
+
+def fun_l14_n418()
+ fun_l15_n997
+end
+
+def fun_l14_n419()
+ fun_l15_n212
+end
+
+def fun_l14_n420()
+ fun_l15_n725
+end
+
+def fun_l14_n421()
+ fun_l15_n728
+end
+
+def fun_l14_n422()
+ fun_l15_n923
+end
+
+def fun_l14_n423()
+ fun_l15_n694
+end
+
+def fun_l14_n424()
+ fun_l15_n472
+end
+
+def fun_l14_n425()
+ fun_l15_n967
+end
+
+def fun_l14_n426()
+ fun_l15_n908
+end
+
+def fun_l14_n427()
+ fun_l15_n199
+end
+
+def fun_l14_n428()
+ fun_l15_n384
+end
+
+def fun_l14_n429()
+ fun_l15_n485
+end
+
+def fun_l14_n430()
+ fun_l15_n767
+end
+
+def fun_l14_n431()
+ fun_l15_n337
+end
+
+def fun_l14_n432()
+ fun_l15_n664
+end
+
+def fun_l14_n433()
+ fun_l15_n735
+end
+
+def fun_l14_n434()
+ fun_l15_n76
+end
+
+def fun_l14_n435()
+ fun_l15_n879
+end
+
+def fun_l14_n436()
+ fun_l15_n815
+end
+
+def fun_l14_n437()
+ fun_l15_n290
+end
+
+def fun_l14_n438()
+ fun_l15_n836
+end
+
+def fun_l14_n439()
+ fun_l15_n56
+end
+
+def fun_l14_n440()
+ fun_l15_n671
+end
+
+def fun_l14_n441()
+ fun_l15_n90
+end
+
+def fun_l14_n442()
+ fun_l15_n930
+end
+
+def fun_l14_n443()
+ fun_l15_n754
+end
+
+def fun_l14_n444()
+ fun_l15_n241
+end
+
+def fun_l14_n445()
+ fun_l15_n362
+end
+
+def fun_l14_n446()
+ fun_l15_n260
+end
+
+def fun_l14_n447()
+ fun_l15_n846
+end
+
+def fun_l14_n448()
+ fun_l15_n754
+end
+
+def fun_l14_n449()
+ fun_l15_n571
+end
+
+def fun_l14_n450()
+ fun_l15_n602
+end
+
+def fun_l14_n451()
+ fun_l15_n243
+end
+
+def fun_l14_n452()
+ fun_l15_n59
+end
+
+def fun_l14_n453()
+ fun_l15_n660
+end
+
+def fun_l14_n454()
+ fun_l15_n338
+end
+
+def fun_l14_n455()
+ fun_l15_n461
+end
+
+def fun_l14_n456()
+ fun_l15_n702
+end
+
+def fun_l14_n457()
+ fun_l15_n878
+end
+
+def fun_l14_n458()
+ fun_l15_n625
+end
+
+def fun_l14_n459()
+ fun_l15_n762
+end
+
+def fun_l14_n460()
+ fun_l15_n36
+end
+
+def fun_l14_n461()
+ fun_l15_n432
+end
+
+def fun_l14_n462()
+ fun_l15_n685
+end
+
+def fun_l14_n463()
+ fun_l15_n398
+end
+
+def fun_l14_n464()
+ fun_l15_n828
+end
+
+def fun_l14_n465()
+ fun_l15_n306
+end
+
+def fun_l14_n466()
+ fun_l15_n717
+end
+
+def fun_l14_n467()
+ fun_l15_n271
+end
+
+def fun_l14_n468()
+ fun_l15_n444
+end
+
+def fun_l14_n469()
+ fun_l15_n82
+end
+
+def fun_l14_n470()
+ fun_l15_n363
+end
+
+def fun_l14_n471()
+ fun_l15_n648
+end
+
+def fun_l14_n472()
+ fun_l15_n33
+end
+
+def fun_l14_n473()
+ fun_l15_n968
+end
+
+def fun_l14_n474()
+ fun_l15_n331
+end
+
+def fun_l14_n475()
+ fun_l15_n228
+end
+
+def fun_l14_n476()
+ fun_l15_n944
+end
+
+def fun_l14_n477()
+ fun_l15_n771
+end
+
+def fun_l14_n478()
+ fun_l15_n228
+end
+
+def fun_l14_n479()
+ fun_l15_n442
+end
+
+def fun_l14_n480()
+ fun_l15_n75
+end
+
+def fun_l14_n481()
+ fun_l15_n911
+end
+
+def fun_l14_n482()
+ fun_l15_n591
+end
+
+def fun_l14_n483()
+ fun_l15_n929
+end
+
+def fun_l14_n484()
+ fun_l15_n504
+end
+
+def fun_l14_n485()
+ fun_l15_n48
+end
+
+def fun_l14_n486()
+ fun_l15_n592
+end
+
+def fun_l14_n487()
+ fun_l15_n399
+end
+
+def fun_l14_n488()
+ fun_l15_n467
+end
+
+def fun_l14_n489()
+ fun_l15_n192
+end
+
+def fun_l14_n490()
+ fun_l15_n347
+end
+
+def fun_l14_n491()
+ fun_l15_n517
+end
+
+def fun_l14_n492()
+ fun_l15_n436
+end
+
+def fun_l14_n493()
+ fun_l15_n50
+end
+
+def fun_l14_n494()
+ fun_l15_n237
+end
+
+def fun_l14_n495()
+ fun_l15_n878
+end
+
+def fun_l14_n496()
+ fun_l15_n46
+end
+
+def fun_l14_n497()
+ fun_l15_n499
+end
+
+def fun_l14_n498()
+ fun_l15_n779
+end
+
+def fun_l14_n499()
+ fun_l15_n763
+end
+
+def fun_l14_n500()
+ fun_l15_n195
+end
+
+def fun_l14_n501()
+ fun_l15_n868
+end
+
+def fun_l14_n502()
+ fun_l15_n83
+end
+
+def fun_l14_n503()
+ fun_l15_n386
+end
+
+def fun_l14_n504()
+ fun_l15_n907
+end
+
+def fun_l14_n505()
+ fun_l15_n889
+end
+
+def fun_l14_n506()
+ fun_l15_n314
+end
+
+def fun_l14_n507()
+ fun_l15_n24
+end
+
+def fun_l14_n508()
+ fun_l15_n122
+end
+
+def fun_l14_n509()
+ fun_l15_n772
+end
+
+def fun_l14_n510()
+ fun_l15_n204
+end
+
+def fun_l14_n511()
+ fun_l15_n646
+end
+
+def fun_l14_n512()
+ fun_l15_n105
+end
+
+def fun_l14_n513()
+ fun_l15_n393
+end
+
+def fun_l14_n514()
+ fun_l15_n533
+end
+
+def fun_l14_n515()
+ fun_l15_n572
+end
+
+def fun_l14_n516()
+ fun_l15_n360
+end
+
+def fun_l14_n517()
+ fun_l15_n241
+end
+
+def fun_l14_n518()
+ fun_l15_n962
+end
+
+def fun_l14_n519()
+ fun_l15_n771
+end
+
+def fun_l14_n520()
+ fun_l15_n379
+end
+
+def fun_l14_n521()
+ fun_l15_n749
+end
+
+def fun_l14_n522()
+ fun_l15_n601
+end
+
+def fun_l14_n523()
+ fun_l15_n0
+end
+
+def fun_l14_n524()
+ fun_l15_n345
+end
+
+def fun_l14_n525()
+ fun_l15_n896
+end
+
+def fun_l14_n526()
+ fun_l15_n612
+end
+
+def fun_l14_n527()
+ fun_l15_n897
+end
+
+def fun_l14_n528()
+ fun_l15_n760
+end
+
+def fun_l14_n529()
+ fun_l15_n283
+end
+
+def fun_l14_n530()
+ fun_l15_n269
+end
+
+def fun_l14_n531()
+ fun_l15_n967
+end
+
+def fun_l14_n532()
+ fun_l15_n399
+end
+
+def fun_l14_n533()
+ fun_l15_n343
+end
+
+def fun_l14_n534()
+ fun_l15_n590
+end
+
+def fun_l14_n535()
+ fun_l15_n37
+end
+
+def fun_l14_n536()
+ fun_l15_n882
+end
+
+def fun_l14_n537()
+ fun_l15_n275
+end
+
+def fun_l14_n538()
+ fun_l15_n169
+end
+
+def fun_l14_n539()
+ fun_l15_n474
+end
+
+def fun_l14_n540()
+ fun_l15_n993
+end
+
+def fun_l14_n541()
+ fun_l15_n872
+end
+
+def fun_l14_n542()
+ fun_l15_n650
+end
+
+def fun_l14_n543()
+ fun_l15_n238
+end
+
+def fun_l14_n544()
+ fun_l15_n80
+end
+
+def fun_l14_n545()
+ fun_l15_n585
+end
+
+def fun_l14_n546()
+ fun_l15_n961
+end
+
+def fun_l14_n547()
+ fun_l15_n574
+end
+
+def fun_l14_n548()
+ fun_l15_n447
+end
+
+def fun_l14_n549()
+ fun_l15_n405
+end
+
+def fun_l14_n550()
+ fun_l15_n347
+end
+
+def fun_l14_n551()
+ fun_l15_n326
+end
+
+def fun_l14_n552()
+ fun_l15_n679
+end
+
+def fun_l14_n553()
+ fun_l15_n848
+end
+
+def fun_l14_n554()
+ fun_l15_n391
+end
+
+def fun_l14_n555()
+ fun_l15_n293
+end
+
+def fun_l14_n556()
+ fun_l15_n997
+end
+
+def fun_l14_n557()
+ fun_l15_n247
+end
+
+def fun_l14_n558()
+ fun_l15_n138
+end
+
+def fun_l14_n559()
+ fun_l15_n737
+end
+
+def fun_l14_n560()
+ fun_l15_n764
+end
+
+def fun_l14_n561()
+ fun_l15_n541
+end
+
+def fun_l14_n562()
+ fun_l15_n373
+end
+
+def fun_l14_n563()
+ fun_l15_n562
+end
+
+def fun_l14_n564()
+ fun_l15_n626
+end
+
+def fun_l14_n565()
+ fun_l15_n601
+end
+
+def fun_l14_n566()
+ fun_l15_n547
+end
+
+def fun_l14_n567()
+ fun_l15_n226
+end
+
+def fun_l14_n568()
+ fun_l15_n182
+end
+
+def fun_l14_n569()
+ fun_l15_n647
+end
+
+def fun_l14_n570()
+ fun_l15_n912
+end
+
+def fun_l14_n571()
+ fun_l15_n33
+end
+
+def fun_l14_n572()
+ fun_l15_n397
+end
+
+def fun_l14_n573()
+ fun_l15_n413
+end
+
+def fun_l14_n574()
+ fun_l15_n714
+end
+
+def fun_l14_n575()
+ fun_l15_n930
+end
+
+def fun_l14_n576()
+ fun_l15_n35
+end
+
+def fun_l14_n577()
+ fun_l15_n868
+end
+
+def fun_l14_n578()
+ fun_l15_n606
+end
+
+def fun_l14_n579()
+ fun_l15_n516
+end
+
+def fun_l14_n580()
+ fun_l15_n127
+end
+
+def fun_l14_n581()
+ fun_l15_n689
+end
+
+def fun_l14_n582()
+ fun_l15_n346
+end
+
+def fun_l14_n583()
+ fun_l15_n352
+end
+
+def fun_l14_n584()
+ fun_l15_n810
+end
+
+def fun_l14_n585()
+ fun_l15_n38
+end
+
+def fun_l14_n586()
+ fun_l15_n751
+end
+
+def fun_l14_n587()
+ fun_l15_n888
+end
+
+def fun_l14_n588()
+ fun_l15_n938
+end
+
+def fun_l14_n589()
+ fun_l15_n941
+end
+
+def fun_l14_n590()
+ fun_l15_n768
+end
+
+def fun_l14_n591()
+ fun_l15_n544
+end
+
+def fun_l14_n592()
+ fun_l15_n393
+end
+
+def fun_l14_n593()
+ fun_l15_n74
+end
+
+def fun_l14_n594()
+ fun_l15_n812
+end
+
+def fun_l14_n595()
+ fun_l15_n94
+end
+
+def fun_l14_n596()
+ fun_l15_n122
+end
+
+def fun_l14_n597()
+ fun_l15_n552
+end
+
+def fun_l14_n598()
+ fun_l15_n586
+end
+
+def fun_l14_n599()
+ fun_l15_n100
+end
+
+def fun_l14_n600()
+ fun_l15_n338
+end
+
+def fun_l14_n601()
+ fun_l15_n627
+end
+
+def fun_l14_n602()
+ fun_l15_n445
+end
+
+def fun_l14_n603()
+ fun_l15_n734
+end
+
+def fun_l14_n604()
+ fun_l15_n852
+end
+
+def fun_l14_n605()
+ fun_l15_n908
+end
+
+def fun_l14_n606()
+ fun_l15_n736
+end
+
+def fun_l14_n607()
+ fun_l15_n590
+end
+
+def fun_l14_n608()
+ fun_l15_n988
+end
+
+def fun_l14_n609()
+ fun_l15_n241
+end
+
+def fun_l14_n610()
+ fun_l15_n375
+end
+
+def fun_l14_n611()
+ fun_l15_n25
+end
+
+def fun_l14_n612()
+ fun_l15_n176
+end
+
+def fun_l14_n613()
+ fun_l15_n375
+end
+
+def fun_l14_n614()
+ fun_l15_n248
+end
+
+def fun_l14_n615()
+ fun_l15_n393
+end
+
+def fun_l14_n616()
+ fun_l15_n2
+end
+
+def fun_l14_n617()
+ fun_l15_n964
+end
+
+def fun_l14_n618()
+ fun_l15_n581
+end
+
+def fun_l14_n619()
+ fun_l15_n190
+end
+
+def fun_l14_n620()
+ fun_l15_n847
+end
+
+def fun_l14_n621()
+ fun_l15_n748
+end
+
+def fun_l14_n622()
+ fun_l15_n27
+end
+
+def fun_l14_n623()
+ fun_l15_n984
+end
+
+def fun_l14_n624()
+ fun_l15_n728
+end
+
+def fun_l14_n625()
+ fun_l15_n740
+end
+
+def fun_l14_n626()
+ fun_l15_n480
+end
+
+def fun_l14_n627()
+ fun_l15_n175
+end
+
+def fun_l14_n628()
+ fun_l15_n152
+end
+
+def fun_l14_n629()
+ fun_l15_n880
+end
+
+def fun_l14_n630()
+ fun_l15_n337
+end
+
+def fun_l14_n631()
+ fun_l15_n862
+end
+
+def fun_l14_n632()
+ fun_l15_n367
+end
+
+def fun_l14_n633()
+ fun_l15_n768
+end
+
+def fun_l14_n634()
+ fun_l15_n178
+end
+
+def fun_l14_n635()
+ fun_l15_n693
+end
+
+def fun_l14_n636()
+ fun_l15_n176
+end
+
+def fun_l14_n637()
+ fun_l15_n348
+end
+
+def fun_l14_n638()
+ fun_l15_n31
+end
+
+def fun_l14_n639()
+ fun_l15_n601
+end
+
+def fun_l14_n640()
+ fun_l15_n824
+end
+
+def fun_l14_n641()
+ fun_l15_n920
+end
+
+def fun_l14_n642()
+ fun_l15_n464
+end
+
+def fun_l14_n643()
+ fun_l15_n747
+end
+
+def fun_l14_n644()
+ fun_l15_n378
+end
+
+def fun_l14_n645()
+ fun_l15_n88
+end
+
+def fun_l14_n646()
+ fun_l15_n267
+end
+
+def fun_l14_n647()
+ fun_l15_n805
+end
+
+def fun_l14_n648()
+ fun_l15_n793
+end
+
+def fun_l14_n649()
+ fun_l15_n135
+end
+
+def fun_l14_n650()
+ fun_l15_n51
+end
+
+def fun_l14_n651()
+ fun_l15_n500
+end
+
+def fun_l14_n652()
+ fun_l15_n726
+end
+
+def fun_l14_n653()
+ fun_l15_n736
+end
+
+def fun_l14_n654()
+ fun_l15_n691
+end
+
+def fun_l14_n655()
+ fun_l15_n718
+end
+
+def fun_l14_n656()
+ fun_l15_n456
+end
+
+def fun_l14_n657()
+ fun_l15_n868
+end
+
+def fun_l14_n658()
+ fun_l15_n818
+end
+
+def fun_l14_n659()
+ fun_l15_n693
+end
+
+def fun_l14_n660()
+ fun_l15_n117
+end
+
+def fun_l14_n661()
+ fun_l15_n872
+end
+
+def fun_l14_n662()
+ fun_l15_n312
+end
+
+def fun_l14_n663()
+ fun_l15_n538
+end
+
+def fun_l14_n664()
+ fun_l15_n449
+end
+
+def fun_l14_n665()
+ fun_l15_n954
+end
+
+def fun_l14_n666()
+ fun_l15_n163
+end
+
+def fun_l14_n667()
+ fun_l15_n291
+end
+
+def fun_l14_n668()
+ fun_l15_n17
+end
+
+def fun_l14_n669()
+ fun_l15_n189
+end
+
+def fun_l14_n670()
+ fun_l15_n25
+end
+
+def fun_l14_n671()
+ fun_l15_n381
+end
+
+def fun_l14_n672()
+ fun_l15_n66
+end
+
+def fun_l14_n673()
+ fun_l15_n28
+end
+
+def fun_l14_n674()
+ fun_l15_n79
+end
+
+def fun_l14_n675()
+ fun_l15_n237
+end
+
+def fun_l14_n676()
+ fun_l15_n301
+end
+
+def fun_l14_n677()
+ fun_l15_n876
+end
+
+def fun_l14_n678()
+ fun_l15_n573
+end
+
+def fun_l14_n679()
+ fun_l15_n758
+end
+
+def fun_l14_n680()
+ fun_l15_n152
+end
+
+def fun_l14_n681()
+ fun_l15_n597
+end
+
+def fun_l14_n682()
+ fun_l15_n872
+end
+
+def fun_l14_n683()
+ fun_l15_n329
+end
+
+def fun_l14_n684()
+ fun_l15_n537
+end
+
+def fun_l14_n685()
+ fun_l15_n379
+end
+
+def fun_l14_n686()
+ fun_l15_n748
+end
+
+def fun_l14_n687()
+ fun_l15_n407
+end
+
+def fun_l14_n688()
+ fun_l15_n762
+end
+
+def fun_l14_n689()
+ fun_l15_n792
+end
+
+def fun_l14_n690()
+ fun_l15_n179
+end
+
+def fun_l14_n691()
+ fun_l15_n855
+end
+
+def fun_l14_n692()
+ fun_l15_n635
+end
+
+def fun_l14_n693()
+ fun_l15_n807
+end
+
+def fun_l14_n694()
+ fun_l15_n957
+end
+
+def fun_l14_n695()
+ fun_l15_n130
+end
+
+def fun_l14_n696()
+ fun_l15_n183
+end
+
+def fun_l14_n697()
+ fun_l15_n881
+end
+
+def fun_l14_n698()
+ fun_l15_n744
+end
+
+def fun_l14_n699()
+ fun_l15_n360
+end
+
+def fun_l14_n700()
+ fun_l15_n661
+end
+
+def fun_l14_n701()
+ fun_l15_n136
+end
+
+def fun_l14_n702()
+ fun_l15_n868
+end
+
+def fun_l14_n703()
+ fun_l15_n718
+end
+
+def fun_l14_n704()
+ fun_l15_n253
+end
+
+def fun_l14_n705()
+ fun_l15_n272
+end
+
+def fun_l14_n706()
+ fun_l15_n474
+end
+
+def fun_l14_n707()
+ fun_l15_n457
+end
+
+def fun_l14_n708()
+ fun_l15_n836
+end
+
+def fun_l14_n709()
+ fun_l15_n141
+end
+
+def fun_l14_n710()
+ fun_l15_n80
+end
+
+def fun_l14_n711()
+ fun_l15_n538
+end
+
+def fun_l14_n712()
+ fun_l15_n68
+end
+
+def fun_l14_n713()
+ fun_l15_n603
+end
+
+def fun_l14_n714()
+ fun_l15_n604
+end
+
+def fun_l14_n715()
+ fun_l15_n415
+end
+
+def fun_l14_n716()
+ fun_l15_n269
+end
+
+def fun_l14_n717()
+ fun_l15_n836
+end
+
+def fun_l14_n718()
+ fun_l15_n599
+end
+
+def fun_l14_n719()
+ fun_l15_n373
+end
+
+def fun_l14_n720()
+ fun_l15_n256
+end
+
+def fun_l14_n721()
+ fun_l15_n18
+end
+
+def fun_l14_n722()
+ fun_l15_n719
+end
+
+def fun_l14_n723()
+ fun_l15_n994
+end
+
+def fun_l14_n724()
+ fun_l15_n361
+end
+
+def fun_l14_n725()
+ fun_l15_n789
+end
+
+def fun_l14_n726()
+ fun_l15_n453
+end
+
+def fun_l14_n727()
+ fun_l15_n950
+end
+
+def fun_l14_n728()
+ fun_l15_n410
+end
+
+def fun_l14_n729()
+ fun_l15_n678
+end
+
+def fun_l14_n730()
+ fun_l15_n948
+end
+
+def fun_l14_n731()
+ fun_l15_n964
+end
+
+def fun_l14_n732()
+ fun_l15_n199
+end
+
+def fun_l14_n733()
+ fun_l15_n812
+end
+
+def fun_l14_n734()
+ fun_l15_n983
+end
+
+def fun_l14_n735()
+ fun_l15_n550
+end
+
+def fun_l14_n736()
+ fun_l15_n776
+end
+
+def fun_l14_n737()
+ fun_l15_n510
+end
+
+def fun_l14_n738()
+ fun_l15_n959
+end
+
+def fun_l14_n739()
+ fun_l15_n537
+end
+
+def fun_l14_n740()
+ fun_l15_n717
+end
+
+def fun_l14_n741()
+ fun_l15_n437
+end
+
+def fun_l14_n742()
+ fun_l15_n364
+end
+
+def fun_l14_n743()
+ fun_l15_n785
+end
+
+def fun_l14_n744()
+ fun_l15_n658
+end
+
+def fun_l14_n745()
+ fun_l15_n462
+end
+
+def fun_l14_n746()
+ fun_l15_n263
+end
+
+def fun_l14_n747()
+ fun_l15_n657
+end
+
+def fun_l14_n748()
+ fun_l15_n395
+end
+
+def fun_l14_n749()
+ fun_l15_n852
+end
+
+def fun_l14_n750()
+ fun_l15_n809
+end
+
+def fun_l14_n751()
+ fun_l15_n959
+end
+
+def fun_l14_n752()
+ fun_l15_n547
+end
+
+def fun_l14_n753()
+ fun_l15_n719
+end
+
+def fun_l14_n754()
+ fun_l15_n118
+end
+
+def fun_l14_n755()
+ fun_l15_n503
+end
+
+def fun_l14_n756()
+ fun_l15_n112
+end
+
+def fun_l14_n757()
+ fun_l15_n39
+end
+
+def fun_l14_n758()
+ fun_l15_n12
+end
+
+def fun_l14_n759()
+ fun_l15_n692
+end
+
+def fun_l14_n760()
+ fun_l15_n276
+end
+
+def fun_l14_n761()
+ fun_l15_n771
+end
+
+def fun_l14_n762()
+ fun_l15_n643
+end
+
+def fun_l14_n763()
+ fun_l15_n820
+end
+
+def fun_l14_n764()
+ fun_l15_n956
+end
+
+def fun_l14_n765()
+ fun_l15_n169
+end
+
+def fun_l14_n766()
+ fun_l15_n558
+end
+
+def fun_l14_n767()
+ fun_l15_n106
+end
+
+def fun_l14_n768()
+ fun_l15_n813
+end
+
+def fun_l14_n769()
+ fun_l15_n65
+end
+
+def fun_l14_n770()
+ fun_l15_n214
+end
+
+def fun_l14_n771()
+ fun_l15_n264
+end
+
+def fun_l14_n772()
+ fun_l15_n687
+end
+
+def fun_l14_n773()
+ fun_l15_n8
+end
+
+def fun_l14_n774()
+ fun_l15_n703
+end
+
+def fun_l14_n775()
+ fun_l15_n971
+end
+
+def fun_l14_n776()
+ fun_l15_n144
+end
+
+def fun_l14_n777()
+ fun_l15_n542
+end
+
+def fun_l14_n778()
+ fun_l15_n57
+end
+
+def fun_l14_n779()
+ fun_l15_n772
+end
+
+def fun_l14_n780()
+ fun_l15_n347
+end
+
+def fun_l14_n781()
+ fun_l15_n895
+end
+
+def fun_l14_n782()
+ fun_l15_n547
+end
+
+def fun_l14_n783()
+ fun_l15_n254
+end
+
+def fun_l14_n784()
+ fun_l15_n358
+end
+
+def fun_l14_n785()
+ fun_l15_n861
+end
+
+def fun_l14_n786()
+ fun_l15_n169
+end
+
+def fun_l14_n787()
+ fun_l15_n607
+end
+
+def fun_l14_n788()
+ fun_l15_n909
+end
+
+def fun_l14_n789()
+ fun_l15_n796
+end
+
+def fun_l14_n790()
+ fun_l15_n414
+end
+
+def fun_l14_n791()
+ fun_l15_n575
+end
+
+def fun_l14_n792()
+ fun_l15_n115
+end
+
+def fun_l14_n793()
+ fun_l15_n289
+end
+
+def fun_l14_n794()
+ fun_l15_n285
+end
+
+def fun_l14_n795()
+ fun_l15_n563
+end
+
+def fun_l14_n796()
+ fun_l15_n78
+end
+
+def fun_l14_n797()
+ fun_l15_n913
+end
+
+def fun_l14_n798()
+ fun_l15_n852
+end
+
+def fun_l14_n799()
+ fun_l15_n779
+end
+
+def fun_l14_n800()
+ fun_l15_n301
+end
+
+def fun_l14_n801()
+ fun_l15_n180
+end
+
+def fun_l14_n802()
+ fun_l15_n618
+end
+
+def fun_l14_n803()
+ fun_l15_n48
+end
+
+def fun_l14_n804()
+ fun_l15_n839
+end
+
+def fun_l14_n805()
+ fun_l15_n608
+end
+
+def fun_l14_n806()
+ fun_l15_n408
+end
+
+def fun_l14_n807()
+ fun_l15_n23
+end
+
+def fun_l14_n808()
+ fun_l15_n723
+end
+
+def fun_l14_n809()
+ fun_l15_n849
+end
+
+def fun_l14_n810()
+ fun_l15_n112
+end
+
+def fun_l14_n811()
+ fun_l15_n801
+end
+
+def fun_l14_n812()
+ fun_l15_n905
+end
+
+def fun_l14_n813()
+ fun_l15_n40
+end
+
+def fun_l14_n814()
+ fun_l15_n628
+end
+
+def fun_l14_n815()
+ fun_l15_n761
+end
+
+def fun_l14_n816()
+ fun_l15_n631
+end
+
+def fun_l14_n817()
+ fun_l15_n565
+end
+
+def fun_l14_n818()
+ fun_l15_n985
+end
+
+def fun_l14_n819()
+ fun_l15_n408
+end
+
+def fun_l14_n820()
+ fun_l15_n173
+end
+
+def fun_l14_n821()
+ fun_l15_n508
+end
+
+def fun_l14_n822()
+ fun_l15_n641
+end
+
+def fun_l14_n823()
+ fun_l15_n348
+end
+
+def fun_l14_n824()
+ fun_l15_n988
+end
+
+def fun_l14_n825()
+ fun_l15_n790
+end
+
+def fun_l14_n826()
+ fun_l15_n915
+end
+
+def fun_l14_n827()
+ fun_l15_n727
+end
+
+def fun_l14_n828()
+ fun_l15_n613
+end
+
+def fun_l14_n829()
+ fun_l15_n21
+end
+
+def fun_l14_n830()
+ fun_l15_n533
+end
+
+def fun_l14_n831()
+ fun_l15_n904
+end
+
+def fun_l14_n832()
+ fun_l15_n586
+end
+
+def fun_l14_n833()
+ fun_l15_n794
+end
+
+def fun_l14_n834()
+ fun_l15_n475
+end
+
+def fun_l14_n835()
+ fun_l15_n14
+end
+
+def fun_l14_n836()
+ fun_l15_n69
+end
+
+def fun_l14_n837()
+ fun_l15_n850
+end
+
+def fun_l14_n838()
+ fun_l15_n426
+end
+
+def fun_l14_n839()
+ fun_l15_n552
+end
+
+def fun_l14_n840()
+ fun_l15_n968
+end
+
+def fun_l14_n841()
+ fun_l15_n305
+end
+
+def fun_l14_n842()
+ fun_l15_n865
+end
+
+def fun_l14_n843()
+ fun_l15_n190
+end
+
+def fun_l14_n844()
+ fun_l15_n610
+end
+
+def fun_l14_n845()
+ fun_l15_n478
+end
+
+def fun_l14_n846()
+ fun_l15_n640
+end
+
+def fun_l14_n847()
+ fun_l15_n294
+end
+
+def fun_l14_n848()
+ fun_l15_n493
+end
+
+def fun_l14_n849()
+ fun_l15_n580
+end
+
+def fun_l14_n850()
+ fun_l15_n173
+end
+
+def fun_l14_n851()
+ fun_l15_n134
+end
+
+def fun_l14_n852()
+ fun_l15_n352
+end
+
+def fun_l14_n853()
+ fun_l15_n738
+end
+
+def fun_l14_n854()
+ fun_l15_n289
+end
+
+def fun_l14_n855()
+ fun_l15_n44
+end
+
+def fun_l14_n856()
+ fun_l15_n200
+end
+
+def fun_l14_n857()
+ fun_l15_n584
+end
+
+def fun_l14_n858()
+ fun_l15_n787
+end
+
+def fun_l14_n859()
+ fun_l15_n901
+end
+
+def fun_l14_n860()
+ fun_l15_n103
+end
+
+def fun_l14_n861()
+ fun_l15_n628
+end
+
+def fun_l14_n862()
+ fun_l15_n521
+end
+
+def fun_l14_n863()
+ fun_l15_n465
+end
+
+def fun_l14_n864()
+ fun_l15_n649
+end
+
+def fun_l14_n865()
+ fun_l15_n60
+end
+
+def fun_l14_n866()
+ fun_l15_n567
+end
+
+def fun_l14_n867()
+ fun_l15_n775
+end
+
+def fun_l14_n868()
+ fun_l15_n333
+end
+
+def fun_l14_n869()
+ fun_l15_n791
+end
+
+def fun_l14_n870()
+ fun_l15_n401
+end
+
+def fun_l14_n871()
+ fun_l15_n289
+end
+
+def fun_l14_n872()
+ fun_l15_n376
+end
+
+def fun_l14_n873()
+ fun_l15_n825
+end
+
+def fun_l14_n874()
+ fun_l15_n233
+end
+
+def fun_l14_n875()
+ fun_l15_n742
+end
+
+def fun_l14_n876()
+ fun_l15_n308
+end
+
+def fun_l14_n877()
+ fun_l15_n793
+end
+
+def fun_l14_n878()
+ fun_l15_n937
+end
+
+def fun_l14_n879()
+ fun_l15_n469
+end
+
+def fun_l14_n880()
+ fun_l15_n129
+end
+
+def fun_l14_n881()
+ fun_l15_n221
+end
+
+def fun_l14_n882()
+ fun_l15_n900
+end
+
+def fun_l14_n883()
+ fun_l15_n548
+end
+
+def fun_l14_n884()
+ fun_l15_n782
+end
+
+def fun_l14_n885()
+ fun_l15_n99
+end
+
+def fun_l14_n886()
+ fun_l15_n33
+end
+
+def fun_l14_n887()
+ fun_l15_n139
+end
+
+def fun_l14_n888()
+ fun_l15_n832
+end
+
+def fun_l14_n889()
+ fun_l15_n24
+end
+
+def fun_l14_n890()
+ fun_l15_n342
+end
+
+def fun_l14_n891()
+ fun_l15_n329
+end
+
+def fun_l14_n892()
+ fun_l15_n706
+end
+
+def fun_l14_n893()
+ fun_l15_n873
+end
+
+def fun_l14_n894()
+ fun_l15_n776
+end
+
+def fun_l14_n895()
+ fun_l15_n799
+end
+
+def fun_l14_n896()
+ fun_l15_n560
+end
+
+def fun_l14_n897()
+ fun_l15_n372
+end
+
+def fun_l14_n898()
+ fun_l15_n370
+end
+
+def fun_l14_n899()
+ fun_l15_n385
+end
+
+def fun_l14_n900()
+ fun_l15_n648
+end
+
+def fun_l14_n901()
+ fun_l15_n376
+end
+
+def fun_l14_n902()
+ fun_l15_n527
+end
+
+def fun_l14_n903()
+ fun_l15_n190
+end
+
+def fun_l14_n904()
+ fun_l15_n633
+end
+
+def fun_l14_n905()
+ fun_l15_n684
+end
+
+def fun_l14_n906()
+ fun_l15_n8
+end
+
+def fun_l14_n907()
+ fun_l15_n814
+end
+
+def fun_l14_n908()
+ fun_l15_n50
+end
+
+def fun_l14_n909()
+ fun_l15_n646
+end
+
+def fun_l14_n910()
+ fun_l15_n442
+end
+
+def fun_l14_n911()
+ fun_l15_n514
+end
+
+def fun_l14_n912()
+ fun_l15_n137
+end
+
+def fun_l14_n913()
+ fun_l15_n126
+end
+
+def fun_l14_n914()
+ fun_l15_n266
+end
+
+def fun_l14_n915()
+ fun_l15_n479
+end
+
+def fun_l14_n916()
+ fun_l15_n985
+end
+
+def fun_l14_n917()
+ fun_l15_n88
+end
+
+def fun_l14_n918()
+ fun_l15_n438
+end
+
+def fun_l14_n919()
+ fun_l15_n347
+end
+
+def fun_l14_n920()
+ fun_l15_n215
+end
+
+def fun_l14_n921()
+ fun_l15_n220
+end
+
+def fun_l14_n922()
+ fun_l15_n507
+end
+
+def fun_l14_n923()
+ fun_l15_n501
+end
+
+def fun_l14_n924()
+ fun_l15_n955
+end
+
+def fun_l14_n925()
+ fun_l15_n59
+end
+
+def fun_l14_n926()
+ fun_l15_n850
+end
+
+def fun_l14_n927()
+ fun_l15_n447
+end
+
+def fun_l14_n928()
+ fun_l15_n298
+end
+
+def fun_l14_n929()
+ fun_l15_n173
+end
+
+def fun_l14_n930()
+ fun_l15_n216
+end
+
+def fun_l14_n931()
+ fun_l15_n594
+end
+
+def fun_l14_n932()
+ fun_l15_n662
+end
+
+def fun_l14_n933()
+ fun_l15_n818
+end
+
+def fun_l14_n934()
+ fun_l15_n783
+end
+
+def fun_l14_n935()
+ fun_l15_n776
+end
+
+def fun_l14_n936()
+ fun_l15_n570
+end
+
+def fun_l14_n937()
+ fun_l15_n495
+end
+
+def fun_l14_n938()
+ fun_l15_n139
+end
+
+def fun_l14_n939()
+ fun_l15_n657
+end
+
+def fun_l14_n940()
+ fun_l15_n773
+end
+
+def fun_l14_n941()
+ fun_l15_n228
+end
+
+def fun_l14_n942()
+ fun_l15_n912
+end
+
+def fun_l14_n943()
+ fun_l15_n837
+end
+
+def fun_l14_n944()
+ fun_l15_n925
+end
+
+def fun_l14_n945()
+ fun_l15_n247
+end
+
+def fun_l14_n946()
+ fun_l15_n890
+end
+
+def fun_l14_n947()
+ fun_l15_n12
+end
+
+def fun_l14_n948()
+ fun_l15_n196
+end
+
+def fun_l14_n949()
+ fun_l15_n887
+end
+
+def fun_l14_n950()
+ fun_l15_n0
+end
+
+def fun_l14_n951()
+ fun_l15_n475
+end
+
+def fun_l14_n952()
+ fun_l15_n548
+end
+
+def fun_l14_n953()
+ fun_l15_n184
+end
+
+def fun_l14_n954()
+ fun_l15_n89
+end
+
+def fun_l14_n955()
+ fun_l15_n604
+end
+
+def fun_l14_n956()
+ fun_l15_n375
+end
+
+def fun_l14_n957()
+ fun_l15_n222
+end
+
+def fun_l14_n958()
+ fun_l15_n629
+end
+
+def fun_l14_n959()
+ fun_l15_n371
+end
+
+def fun_l14_n960()
+ fun_l15_n233
+end
+
+def fun_l14_n961()
+ fun_l15_n268
+end
+
+def fun_l14_n962()
+ fun_l15_n43
+end
+
+def fun_l14_n963()
+ fun_l15_n824
+end
+
+def fun_l14_n964()
+ fun_l15_n574
+end
+
+def fun_l14_n965()
+ fun_l15_n617
+end
+
+def fun_l14_n966()
+ fun_l15_n959
+end
+
+def fun_l14_n967()
+ fun_l15_n757
+end
+
+def fun_l14_n968()
+ fun_l15_n76
+end
+
+def fun_l14_n969()
+ fun_l15_n312
+end
+
+def fun_l14_n970()
+ fun_l15_n895
+end
+
+def fun_l14_n971()
+ fun_l15_n356
+end
+
+def fun_l14_n972()
+ fun_l15_n938
+end
+
+def fun_l14_n973()
+ fun_l15_n233
+end
+
+def fun_l14_n974()
+ fun_l15_n723
+end
+
+def fun_l14_n975()
+ fun_l15_n102
+end
+
+def fun_l14_n976()
+ fun_l15_n8
+end
+
+def fun_l14_n977()
+ fun_l15_n840
+end
+
+def fun_l14_n978()
+ fun_l15_n539
+end
+
+def fun_l14_n979()
+ fun_l15_n936
+end
+
+def fun_l14_n980()
+ fun_l15_n7
+end
+
+def fun_l14_n981()
+ fun_l15_n259
+end
+
+def fun_l14_n982()
+ fun_l15_n680
+end
+
+def fun_l14_n983()
+ fun_l15_n16
+end
+
+def fun_l14_n984()
+ fun_l15_n278
+end
+
+def fun_l14_n985()
+ fun_l15_n951
+end
+
+def fun_l14_n986()
+ fun_l15_n940
+end
+
+def fun_l14_n987()
+ fun_l15_n463
+end
+
+def fun_l14_n988()
+ fun_l15_n54
+end
+
+def fun_l14_n989()
+ fun_l15_n117
+end
+
+def fun_l14_n990()
+ fun_l15_n342
+end
+
+def fun_l14_n991()
+ fun_l15_n345
+end
+
+def fun_l14_n992()
+ fun_l15_n135
+end
+
+def fun_l14_n993()
+ fun_l15_n397
+end
+
+def fun_l14_n994()
+ fun_l15_n406
+end
+
+def fun_l14_n995()
+ fun_l15_n687
+end
+
+def fun_l14_n996()
+ fun_l15_n506
+end
+
+def fun_l14_n997()
+ fun_l15_n406
+end
+
+def fun_l14_n998()
+ fun_l15_n305
+end
+
+def fun_l14_n999()
+ fun_l15_n619
+end
+
+def fun_l15_n0()
+ fun_l16_n214
+end
+
+def fun_l15_n1()
+ fun_l16_n640
+end
+
+def fun_l15_n2()
+ fun_l16_n129
+end
+
+def fun_l15_n3()
+ fun_l16_n883
+end
+
+def fun_l15_n4()
+ fun_l16_n253
+end
+
+def fun_l15_n5()
+ fun_l16_n426
+end
+
+def fun_l15_n6()
+ fun_l16_n969
+end
+
+def fun_l15_n7()
+ fun_l16_n728
+end
+
+def fun_l15_n8()
+ fun_l16_n30
+end
+
+def fun_l15_n9()
+ fun_l16_n337
+end
+
+def fun_l15_n10()
+ fun_l16_n601
+end
+
+def fun_l15_n11()
+ fun_l16_n736
+end
+
+def fun_l15_n12()
+ fun_l16_n905
+end
+
+def fun_l15_n13()
+ fun_l16_n303
+end
+
+def fun_l15_n14()
+ fun_l16_n778
+end
+
+def fun_l15_n15()
+ fun_l16_n92
+end
+
+def fun_l15_n16()
+ fun_l16_n184
+end
+
+def fun_l15_n17()
+ fun_l16_n196
+end
+
+def fun_l15_n18()
+ fun_l16_n68
+end
+
+def fun_l15_n19()
+ fun_l16_n941
+end
+
+def fun_l15_n20()
+ fun_l16_n374
+end
+
+def fun_l15_n21()
+ fun_l16_n680
+end
+
+def fun_l15_n22()
+ fun_l16_n424
+end
+
+def fun_l15_n23()
+ fun_l16_n701
+end
+
+def fun_l15_n24()
+ fun_l16_n211
+end
+
+def fun_l15_n25()
+ fun_l16_n944
+end
+
+def fun_l15_n26()
+ fun_l16_n112
+end
+
+def fun_l15_n27()
+ fun_l16_n219
+end
+
+def fun_l15_n28()
+ fun_l16_n917
+end
+
+def fun_l15_n29()
+ fun_l16_n1
+end
+
+def fun_l15_n30()
+ fun_l16_n178
+end
+
+def fun_l15_n31()
+ fun_l16_n978
+end
+
+def fun_l15_n32()
+ fun_l16_n852
+end
+
+def fun_l15_n33()
+ fun_l16_n633
+end
+
+def fun_l15_n34()
+ fun_l16_n373
+end
+
+def fun_l15_n35()
+ fun_l16_n766
+end
+
+def fun_l15_n36()
+ fun_l16_n324
+end
+
+def fun_l15_n37()
+ fun_l16_n600
+end
+
+def fun_l15_n38()
+ fun_l16_n835
+end
+
+def fun_l15_n39()
+ fun_l16_n518
+end
+
+def fun_l15_n40()
+ fun_l16_n916
+end
+
+def fun_l15_n41()
+ fun_l16_n557
+end
+
+def fun_l15_n42()
+ fun_l16_n401
+end
+
+def fun_l15_n43()
+ fun_l16_n162
+end
+
+def fun_l15_n44()
+ fun_l16_n593
+end
+
+def fun_l15_n45()
+ fun_l16_n615
+end
+
+def fun_l15_n46()
+ fun_l16_n174
+end
+
+def fun_l15_n47()
+ fun_l16_n651
+end
+
+def fun_l15_n48()
+ fun_l16_n168
+end
+
+def fun_l15_n49()
+ fun_l16_n139
+end
+
+def fun_l15_n50()
+ fun_l16_n791
+end
+
+def fun_l15_n51()
+ fun_l16_n1
+end
+
+def fun_l15_n52()
+ fun_l16_n220
+end
+
+def fun_l15_n53()
+ fun_l16_n375
+end
+
+def fun_l15_n54()
+ fun_l16_n530
+end
+
+def fun_l15_n55()
+ fun_l16_n27
+end
+
+def fun_l15_n56()
+ fun_l16_n400
+end
+
+def fun_l15_n57()
+ fun_l16_n489
+end
+
+def fun_l15_n58()
+ fun_l16_n716
+end
+
+def fun_l15_n59()
+ fun_l16_n956
+end
+
+def fun_l15_n60()
+ fun_l16_n147
+end
+
+def fun_l15_n61()
+ fun_l16_n901
+end
+
+def fun_l15_n62()
+ fun_l16_n430
+end
+
+def fun_l15_n63()
+ fun_l16_n161
+end
+
+def fun_l15_n64()
+ fun_l16_n823
+end
+
+def fun_l15_n65()
+ fun_l16_n20
+end
+
+def fun_l15_n66()
+ fun_l16_n767
+end
+
+def fun_l15_n67()
+ fun_l16_n643
+end
+
+def fun_l15_n68()
+ fun_l16_n152
+end
+
+def fun_l15_n69()
+ fun_l16_n54
+end
+
+def fun_l15_n70()
+ fun_l16_n691
+end
+
+def fun_l15_n71()
+ fun_l16_n349
+end
+
+def fun_l15_n72()
+ fun_l16_n9
+end
+
+def fun_l15_n73()
+ fun_l16_n410
+end
+
+def fun_l15_n74()
+ fun_l16_n173
+end
+
+def fun_l15_n75()
+ fun_l16_n187
+end
+
+def fun_l15_n76()
+ fun_l16_n224
+end
+
+def fun_l15_n77()
+ fun_l16_n482
+end
+
+def fun_l15_n78()
+ fun_l16_n230
+end
+
+def fun_l15_n79()
+ fun_l16_n599
+end
+
+def fun_l15_n80()
+ fun_l16_n76
+end
+
+def fun_l15_n81()
+ fun_l16_n343
+end
+
+def fun_l15_n82()
+ fun_l16_n734
+end
+
+def fun_l15_n83()
+ fun_l16_n41
+end
+
+def fun_l15_n84()
+ fun_l16_n338
+end
+
+def fun_l15_n85()
+ fun_l16_n593
+end
+
+def fun_l15_n86()
+ fun_l16_n596
+end
+
+def fun_l15_n87()
+ fun_l16_n610
+end
+
+def fun_l15_n88()
+ fun_l16_n760
+end
+
+def fun_l15_n89()
+ fun_l16_n766
+end
+
+def fun_l15_n90()
+ fun_l16_n946
+end
+
+def fun_l15_n91()
+ fun_l16_n205
+end
+
+def fun_l15_n92()
+ fun_l16_n434
+end
+
+def fun_l15_n93()
+ fun_l16_n507
+end
+
+def fun_l15_n94()
+ fun_l16_n995
+end
+
+def fun_l15_n95()
+ fun_l16_n744
+end
+
+def fun_l15_n96()
+ fun_l16_n706
+end
+
+def fun_l15_n97()
+ fun_l16_n270
+end
+
+def fun_l15_n98()
+ fun_l16_n874
+end
+
+def fun_l15_n99()
+ fun_l16_n18
+end
+
+def fun_l15_n100()
+ fun_l16_n685
+end
+
+def fun_l15_n101()
+ fun_l16_n344
+end
+
+def fun_l15_n102()
+ fun_l16_n265
+end
+
+def fun_l15_n103()
+ fun_l16_n44
+end
+
+def fun_l15_n104()
+ fun_l16_n730
+end
+
+def fun_l15_n105()
+ fun_l16_n314
+end
+
+def fun_l15_n106()
+ fun_l16_n878
+end
+
+def fun_l15_n107()
+ fun_l16_n877
+end
+
+def fun_l15_n108()
+ fun_l16_n237
+end
+
+def fun_l15_n109()
+ fun_l16_n666
+end
+
+def fun_l15_n110()
+ fun_l16_n469
+end
+
+def fun_l15_n111()
+ fun_l16_n925
+end
+
+def fun_l15_n112()
+ fun_l16_n630
+end
+
+def fun_l15_n113()
+ fun_l16_n517
+end
+
+def fun_l15_n114()
+ fun_l16_n550
+end
+
+def fun_l15_n115()
+ fun_l16_n384
+end
+
+def fun_l15_n116()
+ fun_l16_n976
+end
+
+def fun_l15_n117()
+ fun_l16_n702
+end
+
+def fun_l15_n118()
+ fun_l16_n677
+end
+
+def fun_l15_n119()
+ fun_l16_n737
+end
+
+def fun_l15_n120()
+ fun_l16_n380
+end
+
+def fun_l15_n121()
+ fun_l16_n635
+end
+
+def fun_l15_n122()
+ fun_l16_n112
+end
+
+def fun_l15_n123()
+ fun_l16_n779
+end
+
+def fun_l15_n124()
+ fun_l16_n853
+end
+
+def fun_l15_n125()
+ fun_l16_n697
+end
+
+def fun_l15_n126()
+ fun_l16_n289
+end
+
+def fun_l15_n127()
+ fun_l16_n701
+end
+
+def fun_l15_n128()
+ fun_l16_n867
+end
+
+def fun_l15_n129()
+ fun_l16_n537
+end
+
+def fun_l15_n130()
+ fun_l16_n735
+end
+
+def fun_l15_n131()
+ fun_l16_n285
+end
+
+def fun_l15_n132()
+ fun_l16_n196
+end
+
+def fun_l15_n133()
+ fun_l16_n137
+end
+
+def fun_l15_n134()
+ fun_l16_n937
+end
+
+def fun_l15_n135()
+ fun_l16_n285
+end
+
+def fun_l15_n136()
+ fun_l16_n566
+end
+
+def fun_l15_n137()
+ fun_l16_n163
+end
+
+def fun_l15_n138()
+ fun_l16_n223
+end
+
+def fun_l15_n139()
+ fun_l16_n373
+end
+
+def fun_l15_n140()
+ fun_l16_n16
+end
+
+def fun_l15_n141()
+ fun_l16_n539
+end
+
+def fun_l15_n142()
+ fun_l16_n696
+end
+
+def fun_l15_n143()
+ fun_l16_n735
+end
+
+def fun_l15_n144()
+ fun_l16_n81
+end
+
+def fun_l15_n145()
+ fun_l16_n102
+end
+
+def fun_l15_n146()
+ fun_l16_n658
+end
+
+def fun_l15_n147()
+ fun_l16_n858
+end
+
+def fun_l15_n148()
+ fun_l16_n398
+end
+
+def fun_l15_n149()
+ fun_l16_n122
+end
+
+def fun_l15_n150()
+ fun_l16_n712
+end
+
+def fun_l15_n151()
+ fun_l16_n888
+end
+
+def fun_l15_n152()
+ fun_l16_n537
+end
+
+def fun_l15_n153()
+ fun_l16_n190
+end
+
+def fun_l15_n154()
+ fun_l16_n164
+end
+
+def fun_l15_n155()
+ fun_l16_n351
+end
+
+def fun_l15_n156()
+ fun_l16_n641
+end
+
+def fun_l15_n157()
+ fun_l16_n300
+end
+
+def fun_l15_n158()
+ fun_l16_n177
+end
+
+def fun_l15_n159()
+ fun_l16_n634
+end
+
+def fun_l15_n160()
+ fun_l16_n475
+end
+
+def fun_l15_n161()
+ fun_l16_n843
+end
+
+def fun_l15_n162()
+ fun_l16_n262
+end
+
+def fun_l15_n163()
+ fun_l16_n471
+end
+
+def fun_l15_n164()
+ fun_l16_n229
+end
+
+def fun_l15_n165()
+ fun_l16_n374
+end
+
+def fun_l15_n166()
+ fun_l16_n920
+end
+
+def fun_l15_n167()
+ fun_l16_n194
+end
+
+def fun_l15_n168()
+ fun_l16_n369
+end
+
+def fun_l15_n169()
+ fun_l16_n41
+end
+
+def fun_l15_n170()
+ fun_l16_n339
+end
+
+def fun_l15_n171()
+ fun_l16_n152
+end
+
+def fun_l15_n172()
+ fun_l16_n337
+end
+
+def fun_l15_n173()
+ fun_l16_n906
+end
+
+def fun_l15_n174()
+ fun_l16_n13
+end
+
+def fun_l15_n175()
+ fun_l16_n343
+end
+
+def fun_l15_n176()
+ fun_l16_n116
+end
+
+def fun_l15_n177()
+ fun_l16_n722
+end
+
+def fun_l15_n178()
+ fun_l16_n62
+end
+
+def fun_l15_n179()
+ fun_l16_n12
+end
+
+def fun_l15_n180()
+ fun_l16_n177
+end
+
+def fun_l15_n181()
+ fun_l16_n632
+end
+
+def fun_l15_n182()
+ fun_l16_n990
+end
+
+def fun_l15_n183()
+ fun_l16_n749
+end
+
+def fun_l15_n184()
+ fun_l16_n368
+end
+
+def fun_l15_n185()
+ fun_l16_n881
+end
+
+def fun_l15_n186()
+ fun_l16_n760
+end
+
+def fun_l15_n187()
+ fun_l16_n740
+end
+
+def fun_l15_n188()
+ fun_l16_n379
+end
+
+def fun_l15_n189()
+ fun_l16_n194
+end
+
+def fun_l15_n190()
+ fun_l16_n282
+end
+
+def fun_l15_n191()
+ fun_l16_n520
+end
+
+def fun_l15_n192()
+ fun_l16_n113
+end
+
+def fun_l15_n193()
+ fun_l16_n470
+end
+
+def fun_l15_n194()
+ fun_l16_n303
+end
+
+def fun_l15_n195()
+ fun_l16_n712
+end
+
+def fun_l15_n196()
+ fun_l16_n215
+end
+
+def fun_l15_n197()
+ fun_l16_n121
+end
+
+def fun_l15_n198()
+ fun_l16_n281
+end
+
+def fun_l15_n199()
+ fun_l16_n702
+end
+
+def fun_l15_n200()
+ fun_l16_n727
+end
+
+def fun_l15_n201()
+ fun_l16_n856
+end
+
+def fun_l15_n202()
+ fun_l16_n368
+end
+
+def fun_l15_n203()
+ fun_l16_n252
+end
+
+def fun_l15_n204()
+ fun_l16_n86
+end
+
+def fun_l15_n205()
+ fun_l16_n323
+end
+
+def fun_l15_n206()
+ fun_l16_n749
+end
+
+def fun_l15_n207()
+ fun_l16_n728
+end
+
+def fun_l15_n208()
+ fun_l16_n195
+end
+
+def fun_l15_n209()
+ fun_l16_n141
+end
+
+def fun_l15_n210()
+ fun_l16_n685
+end
+
+def fun_l15_n211()
+ fun_l16_n855
+end
+
+def fun_l15_n212()
+ fun_l16_n401
+end
+
+def fun_l15_n213()
+ fun_l16_n415
+end
+
+def fun_l15_n214()
+ fun_l16_n349
+end
+
+def fun_l15_n215()
+ fun_l16_n45
+end
+
+def fun_l15_n216()
+ fun_l16_n534
+end
+
+def fun_l15_n217()
+ fun_l16_n705
+end
+
+def fun_l15_n218()
+ fun_l16_n97
+end
+
+def fun_l15_n219()
+ fun_l16_n828
+end
+
+def fun_l15_n220()
+ fun_l16_n698
+end
+
+def fun_l15_n221()
+ fun_l16_n505
+end
+
+def fun_l15_n222()
+ fun_l16_n100
+end
+
+def fun_l15_n223()
+ fun_l16_n710
+end
+
+def fun_l15_n224()
+ fun_l16_n883
+end
+
+def fun_l15_n225()
+ fun_l16_n503
+end
+
+def fun_l15_n226()
+ fun_l16_n583
+end
+
+def fun_l15_n227()
+ fun_l16_n269
+end
+
+def fun_l15_n228()
+ fun_l16_n570
+end
+
+def fun_l15_n229()
+ fun_l16_n877
+end
+
+def fun_l15_n230()
+ fun_l16_n906
+end
+
+def fun_l15_n231()
+ fun_l16_n123
+end
+
+def fun_l15_n232()
+ fun_l16_n626
+end
+
+def fun_l15_n233()
+ fun_l16_n911
+end
+
+def fun_l15_n234()
+ fun_l16_n741
+end
+
+def fun_l15_n235()
+ fun_l16_n255
+end
+
+def fun_l15_n236()
+ fun_l16_n499
+end
+
+def fun_l15_n237()
+ fun_l16_n998
+end
+
+def fun_l15_n238()
+ fun_l16_n156
+end
+
+def fun_l15_n239()
+ fun_l16_n677
+end
+
+def fun_l15_n240()
+ fun_l16_n551
+end
+
+def fun_l15_n241()
+ fun_l16_n906
+end
+
+def fun_l15_n242()
+ fun_l16_n146
+end
+
+def fun_l15_n243()
+ fun_l16_n372
+end
+
+def fun_l15_n244()
+ fun_l16_n867
+end
+
+def fun_l15_n245()
+ fun_l16_n232
+end
+
+def fun_l15_n246()
+ fun_l16_n952
+end
+
+def fun_l15_n247()
+ fun_l16_n256
+end
+
+def fun_l15_n248()
+ fun_l16_n263
+end
+
+def fun_l15_n249()
+ fun_l16_n642
+end
+
+def fun_l15_n250()
+ fun_l16_n165
+end
+
+def fun_l15_n251()
+ fun_l16_n147
+end
+
+def fun_l15_n252()
+ fun_l16_n182
+end
+
+def fun_l15_n253()
+ fun_l16_n346
+end
+
+def fun_l15_n254()
+ fun_l16_n263
+end
+
+def fun_l15_n255()
+ fun_l16_n512
+end
+
+def fun_l15_n256()
+ fun_l16_n504
+end
+
+def fun_l15_n257()
+ fun_l16_n671
+end
+
+def fun_l15_n258()
+ fun_l16_n219
+end
+
+def fun_l15_n259()
+ fun_l16_n878
+end
+
+def fun_l15_n260()
+ fun_l16_n754
+end
+
+def fun_l15_n261()
+ fun_l16_n976
+end
+
+def fun_l15_n262()
+ fun_l16_n756
+end
+
+def fun_l15_n263()
+ fun_l16_n840
+end
+
+def fun_l15_n264()
+ fun_l16_n320
+end
+
+def fun_l15_n265()
+ fun_l16_n447
+end
+
+def fun_l15_n266()
+ fun_l16_n179
+end
+
+def fun_l15_n267()
+ fun_l16_n669
+end
+
+def fun_l15_n268()
+ fun_l16_n279
+end
+
+def fun_l15_n269()
+ fun_l16_n919
+end
+
+def fun_l15_n270()
+ fun_l16_n55
+end
+
+def fun_l15_n271()
+ fun_l16_n713
+end
+
+def fun_l15_n272()
+ fun_l16_n140
+end
+
+def fun_l15_n273()
+ fun_l16_n738
+end
+
+def fun_l15_n274()
+ fun_l16_n534
+end
+
+def fun_l15_n275()
+ fun_l16_n739
+end
+
+def fun_l15_n276()
+ fun_l16_n733
+end
+
+def fun_l15_n277()
+ fun_l16_n792
+end
+
+def fun_l15_n278()
+ fun_l16_n719
+end
+
+def fun_l15_n279()
+ fun_l16_n946
+end
+
+def fun_l15_n280()
+ fun_l16_n942
+end
+
+def fun_l15_n281()
+ fun_l16_n547
+end
+
+def fun_l15_n282()
+ fun_l16_n961
+end
+
+def fun_l15_n283()
+ fun_l16_n382
+end
+
+def fun_l15_n284()
+ fun_l16_n642
+end
+
+def fun_l15_n285()
+ fun_l16_n761
+end
+
+def fun_l15_n286()
+ fun_l16_n999
+end
+
+def fun_l15_n287()
+ fun_l16_n827
+end
+
+def fun_l15_n288()
+ fun_l16_n364
+end
+
+def fun_l15_n289()
+ fun_l16_n588
+end
+
+def fun_l15_n290()
+ fun_l16_n3
+end
+
+def fun_l15_n291()
+ fun_l16_n741
+end
+
+def fun_l15_n292()
+ fun_l16_n839
+end
+
+def fun_l15_n293()
+ fun_l16_n889
+end
+
+def fun_l15_n294()
+ fun_l16_n106
+end
+
+def fun_l15_n295()
+ fun_l16_n616
+end
+
+def fun_l15_n296()
+ fun_l16_n124
+end
+
+def fun_l15_n297()
+ fun_l16_n691
+end
+
+def fun_l15_n298()
+ fun_l16_n135
+end
+
+def fun_l15_n299()
+ fun_l16_n654
+end
+
+def fun_l15_n300()
+ fun_l16_n706
+end
+
+def fun_l15_n301()
+ fun_l16_n957
+end
+
+def fun_l15_n302()
+ fun_l16_n213
+end
+
+def fun_l15_n303()
+ fun_l16_n340
+end
+
+def fun_l15_n304()
+ fun_l16_n126
+end
+
+def fun_l15_n305()
+ fun_l16_n807
+end
+
+def fun_l15_n306()
+ fun_l16_n901
+end
+
+def fun_l15_n307()
+ fun_l16_n371
+end
+
+def fun_l15_n308()
+ fun_l16_n904
+end
+
+def fun_l15_n309()
+ fun_l16_n475
+end
+
+def fun_l15_n310()
+ fun_l16_n863
+end
+
+def fun_l15_n311()
+ fun_l16_n37
+end
+
+def fun_l15_n312()
+ fun_l16_n315
+end
+
+def fun_l15_n313()
+ fun_l16_n527
+end
+
+def fun_l15_n314()
+ fun_l16_n549
+end
+
+def fun_l15_n315()
+ fun_l16_n351
+end
+
+def fun_l15_n316()
+ fun_l16_n193
+end
+
+def fun_l15_n317()
+ fun_l16_n395
+end
+
+def fun_l15_n318()
+ fun_l16_n373
+end
+
+def fun_l15_n319()
+ fun_l16_n142
+end
+
+def fun_l15_n320()
+ fun_l16_n250
+end
+
+def fun_l15_n321()
+ fun_l16_n544
+end
+
+def fun_l15_n322()
+ fun_l16_n446
+end
+
+def fun_l15_n323()
+ fun_l16_n375
+end
+
+def fun_l15_n324()
+ fun_l16_n832
+end
+
+def fun_l15_n325()
+ fun_l16_n987
+end
+
+def fun_l15_n326()
+ fun_l16_n539
+end
+
+def fun_l15_n327()
+ fun_l16_n293
+end
+
+def fun_l15_n328()
+ fun_l16_n128
+end
+
+def fun_l15_n329()
+ fun_l16_n228
+end
+
+def fun_l15_n330()
+ fun_l16_n952
+end
+
+def fun_l15_n331()
+ fun_l16_n116
+end
+
+def fun_l15_n332()
+ fun_l16_n823
+end
+
+def fun_l15_n333()
+ fun_l16_n933
+end
+
+def fun_l15_n334()
+ fun_l16_n252
+end
+
+def fun_l15_n335()
+ fun_l16_n140
+end
+
+def fun_l15_n336()
+ fun_l16_n245
+end
+
+def fun_l15_n337()
+ fun_l16_n822
+end
+
+def fun_l15_n338()
+ fun_l16_n389
+end
+
+def fun_l15_n339()
+ fun_l16_n824
+end
+
+def fun_l15_n340()
+ fun_l16_n507
+end
+
+def fun_l15_n341()
+ fun_l16_n153
+end
+
+def fun_l15_n342()
+ fun_l16_n661
+end
+
+def fun_l15_n343()
+ fun_l16_n633
+end
+
+def fun_l15_n344()
+ fun_l16_n478
+end
+
+def fun_l15_n345()
+ fun_l16_n423
+end
+
+def fun_l15_n346()
+ fun_l16_n425
+end
+
+def fun_l15_n347()
+ fun_l16_n168
+end
+
+def fun_l15_n348()
+ fun_l16_n426
+end
+
+def fun_l15_n349()
+ fun_l16_n85
+end
+
+def fun_l15_n350()
+ fun_l16_n35
+end
+
+def fun_l15_n351()
+ fun_l16_n796
+end
+
+def fun_l15_n352()
+ fun_l16_n295
+end
+
+def fun_l15_n353()
+ fun_l16_n564
+end
+
+def fun_l15_n354()
+ fun_l16_n273
+end
+
+def fun_l15_n355()
+ fun_l16_n821
+end
+
+def fun_l15_n356()
+ fun_l16_n504
+end
+
+def fun_l15_n357()
+ fun_l16_n911
+end
+
+def fun_l15_n358()
+ fun_l16_n277
+end
+
+def fun_l15_n359()
+ fun_l16_n749
+end
+
+def fun_l15_n360()
+ fun_l16_n886
+end
+
+def fun_l15_n361()
+ fun_l16_n165
+end
+
+def fun_l15_n362()
+ fun_l16_n353
+end
+
+def fun_l15_n363()
+ fun_l16_n309
+end
+
+def fun_l15_n364()
+ fun_l16_n853
+end
+
+def fun_l15_n365()
+ fun_l16_n981
+end
+
+def fun_l15_n366()
+ fun_l16_n429
+end
+
+def fun_l15_n367()
+ fun_l16_n114
+end
+
+def fun_l15_n368()
+ fun_l16_n649
+end
+
+def fun_l15_n369()
+ fun_l16_n966
+end
+
+def fun_l15_n370()
+ fun_l16_n356
+end
+
+def fun_l15_n371()
+ fun_l16_n364
+end
+
+def fun_l15_n372()
+ fun_l16_n12
+end
+
+def fun_l15_n373()
+ fun_l16_n969
+end
+
+def fun_l15_n374()
+ fun_l16_n705
+end
+
+def fun_l15_n375()
+ fun_l16_n194
+end
+
+def fun_l15_n376()
+ fun_l16_n487
+end
+
+def fun_l15_n377()
+ fun_l16_n148
+end
+
+def fun_l15_n378()
+ fun_l16_n419
+end
+
+def fun_l15_n379()
+ fun_l16_n686
+end
+
+def fun_l15_n380()
+ fun_l16_n552
+end
+
+def fun_l15_n381()
+ fun_l16_n630
+end
+
+def fun_l15_n382()
+ fun_l16_n509
+end
+
+def fun_l15_n383()
+ fun_l16_n251
+end
+
+def fun_l15_n384()
+ fun_l16_n506
+end
+
+def fun_l15_n385()
+ fun_l16_n317
+end
+
+def fun_l15_n386()
+ fun_l16_n881
+end
+
+def fun_l15_n387()
+ fun_l16_n12
+end
+
+def fun_l15_n388()
+ fun_l16_n686
+end
+
+def fun_l15_n389()
+ fun_l16_n277
+end
+
+def fun_l15_n390()
+ fun_l16_n174
+end
+
+def fun_l15_n391()
+ fun_l16_n799
+end
+
+def fun_l15_n392()
+ fun_l16_n682
+end
+
+def fun_l15_n393()
+ fun_l16_n102
+end
+
+def fun_l15_n394()
+ fun_l16_n127
+end
+
+def fun_l15_n395()
+ fun_l16_n110
+end
+
+def fun_l15_n396()
+ fun_l16_n331
+end
+
+def fun_l15_n397()
+ fun_l16_n165
+end
+
+def fun_l15_n398()
+ fun_l16_n360
+end
+
+def fun_l15_n399()
+ fun_l16_n622
+end
+
+def fun_l15_n400()
+ fun_l16_n928
+end
+
+def fun_l15_n401()
+ fun_l16_n324
+end
+
+def fun_l15_n402()
+ fun_l16_n712
+end
+
+def fun_l15_n403()
+ fun_l16_n250
+end
+
+def fun_l15_n404()
+ fun_l16_n289
+end
+
+def fun_l15_n405()
+ fun_l16_n520
+end
+
+def fun_l15_n406()
+ fun_l16_n445
+end
+
+def fun_l15_n407()
+ fun_l16_n328
+end
+
+def fun_l15_n408()
+ fun_l16_n496
+end
+
+def fun_l15_n409()
+ fun_l16_n614
+end
+
+def fun_l15_n410()
+ fun_l16_n428
+end
+
+def fun_l15_n411()
+ fun_l16_n226
+end
+
+def fun_l15_n412()
+ fun_l16_n450
+end
+
+def fun_l15_n413()
+ fun_l16_n410
+end
+
+def fun_l15_n414()
+ fun_l16_n926
+end
+
+def fun_l15_n415()
+ fun_l16_n353
+end
+
+def fun_l15_n416()
+ fun_l16_n822
+end
+
+def fun_l15_n417()
+ fun_l16_n800
+end
+
+def fun_l15_n418()
+ fun_l16_n577
+end
+
+def fun_l15_n419()
+ fun_l16_n483
+end
+
+def fun_l15_n420()
+ fun_l16_n744
+end
+
+def fun_l15_n421()
+ fun_l16_n314
+end
+
+def fun_l15_n422()
+ fun_l16_n206
+end
+
+def fun_l15_n423()
+ fun_l16_n359
+end
+
+def fun_l15_n424()
+ fun_l16_n371
+end
+
+def fun_l15_n425()
+ fun_l16_n817
+end
+
+def fun_l15_n426()
+ fun_l16_n471
+end
+
+def fun_l15_n427()
+ fun_l16_n681
+end
+
+def fun_l15_n428()
+ fun_l16_n598
+end
+
+def fun_l15_n429()
+ fun_l16_n532
+end
+
+def fun_l15_n430()
+ fun_l16_n173
+end
+
+def fun_l15_n431()
+ fun_l16_n670
+end
+
+def fun_l15_n432()
+ fun_l16_n310
+end
+
+def fun_l15_n433()
+ fun_l16_n376
+end
+
+def fun_l15_n434()
+ fun_l16_n142
+end
+
+def fun_l15_n435()
+ fun_l16_n591
+end
+
+def fun_l15_n436()
+ fun_l16_n313
+end
+
+def fun_l15_n437()
+ fun_l16_n724
+end
+
+def fun_l15_n438()
+ fun_l16_n313
+end
+
+def fun_l15_n439()
+ fun_l16_n238
+end
+
+def fun_l15_n440()
+ fun_l16_n840
+end
+
+def fun_l15_n441()
+ fun_l16_n235
+end
+
+def fun_l15_n442()
+ fun_l16_n720
+end
+
+def fun_l15_n443()
+ fun_l16_n427
+end
+
+def fun_l15_n444()
+ fun_l16_n269
+end
+
+def fun_l15_n445()
+ fun_l16_n557
+end
+
+def fun_l15_n446()
+ fun_l16_n97
+end
+
+def fun_l15_n447()
+ fun_l16_n655
+end
+
+def fun_l15_n448()
+ fun_l16_n723
+end
+
+def fun_l15_n449()
+ fun_l16_n634
+end
+
+def fun_l15_n450()
+ fun_l16_n208
+end
+
+def fun_l15_n451()
+ fun_l16_n130
+end
+
+def fun_l15_n452()
+ fun_l16_n472
+end
+
+def fun_l15_n453()
+ fun_l16_n172
+end
+
+def fun_l15_n454()
+ fun_l16_n323
+end
+
+def fun_l15_n455()
+ fun_l16_n643
+end
+
+def fun_l15_n456()
+ fun_l16_n20
+end
+
+def fun_l15_n457()
+ fun_l16_n721
+end
+
+def fun_l15_n458()
+ fun_l16_n928
+end
+
+def fun_l15_n459()
+ fun_l16_n312
+end
+
+def fun_l15_n460()
+ fun_l16_n767
+end
+
+def fun_l15_n461()
+ fun_l16_n191
+end
+
+def fun_l15_n462()
+ fun_l16_n88
+end
+
+def fun_l15_n463()
+ fun_l16_n782
+end
+
+def fun_l15_n464()
+ fun_l16_n448
+end
+
+def fun_l15_n465()
+ fun_l16_n595
+end
+
+def fun_l15_n466()
+ fun_l16_n545
+end
+
+def fun_l15_n467()
+ fun_l16_n98
+end
+
+def fun_l15_n468()
+ fun_l16_n523
+end
+
+def fun_l15_n469()
+ fun_l16_n548
+end
+
+def fun_l15_n470()
+ fun_l16_n799
+end
+
+def fun_l15_n471()
+ fun_l16_n727
+end
+
+def fun_l15_n472()
+ fun_l16_n342
+end
+
+def fun_l15_n473()
+ fun_l16_n30
+end
+
+def fun_l15_n474()
+ fun_l16_n461
+end
+
+def fun_l15_n475()
+ fun_l16_n249
+end
+
+def fun_l15_n476()
+ fun_l16_n466
+end
+
+def fun_l15_n477()
+ fun_l16_n28
+end
+
+def fun_l15_n478()
+ fun_l16_n845
+end
+
+def fun_l15_n479()
+ fun_l16_n53
+end
+
+def fun_l15_n480()
+ fun_l16_n122
+end
+
+def fun_l15_n481()
+ fun_l16_n264
+end
+
+def fun_l15_n482()
+ fun_l16_n802
+end
+
+def fun_l15_n483()
+ fun_l16_n688
+end
+
+def fun_l15_n484()
+ fun_l16_n656
+end
+
+def fun_l15_n485()
+ fun_l16_n17
+end
+
+def fun_l15_n486()
+ fun_l16_n956
+end
+
+def fun_l15_n487()
+ fun_l16_n649
+end
+
+def fun_l15_n488()
+ fun_l16_n948
+end
+
+def fun_l15_n489()
+ fun_l16_n85
+end
+
+def fun_l15_n490()
+ fun_l16_n411
+end
+
+def fun_l15_n491()
+ fun_l16_n572
+end
+
+def fun_l15_n492()
+ fun_l16_n698
+end
+
+def fun_l15_n493()
+ fun_l16_n767
+end
+
+def fun_l15_n494()
+ fun_l16_n513
+end
+
+def fun_l15_n495()
+ fun_l16_n983
+end
+
+def fun_l15_n496()
+ fun_l16_n763
+end
+
+def fun_l15_n497()
+ fun_l16_n207
+end
+
+def fun_l15_n498()
+ fun_l16_n154
+end
+
+def fun_l15_n499()
+ fun_l16_n152
+end
+
+def fun_l15_n500()
+ fun_l16_n929
+end
+
+def fun_l15_n501()
+ fun_l16_n573
+end
+
+def fun_l15_n502()
+ fun_l16_n97
+end
+
+def fun_l15_n503()
+ fun_l16_n696
+end
+
+def fun_l15_n504()
+ fun_l16_n877
+end
+
+def fun_l15_n505()
+ fun_l16_n401
+end
+
+def fun_l15_n506()
+ fun_l16_n509
+end
+
+def fun_l15_n507()
+ fun_l16_n933
+end
+
+def fun_l15_n508()
+ fun_l16_n946
+end
+
+def fun_l15_n509()
+ fun_l16_n290
+end
+
+def fun_l15_n510()
+ fun_l16_n630
+end
+
+def fun_l15_n511()
+ fun_l16_n279
+end
+
+def fun_l15_n512()
+ fun_l16_n833
+end
+
+def fun_l15_n513()
+ fun_l16_n984
+end
+
+def fun_l15_n514()
+ fun_l16_n82
+end
+
+def fun_l15_n515()
+ fun_l16_n372
+end
+
+def fun_l15_n516()
+ fun_l16_n407
+end
+
+def fun_l15_n517()
+ fun_l16_n801
+end
+
+def fun_l15_n518()
+ fun_l16_n530
+end
+
+def fun_l15_n519()
+ fun_l16_n349
+end
+
+def fun_l15_n520()
+ fun_l16_n633
+end
+
+def fun_l15_n521()
+ fun_l16_n189
+end
+
+def fun_l15_n522()
+ fun_l16_n613
+end
+
+def fun_l15_n523()
+ fun_l16_n335
+end
+
+def fun_l15_n524()
+ fun_l16_n163
+end
+
+def fun_l15_n525()
+ fun_l16_n542
+end
+
+def fun_l15_n526()
+ fun_l16_n454
+end
+
+def fun_l15_n527()
+ fun_l16_n428
+end
+
+def fun_l15_n528()
+ fun_l16_n985
+end
+
+def fun_l15_n529()
+ fun_l16_n414
+end
+
+def fun_l15_n530()
+ fun_l16_n294
+end
+
+def fun_l15_n531()
+ fun_l16_n493
+end
+
+def fun_l15_n532()
+ fun_l16_n467
+end
+
+def fun_l15_n533()
+ fun_l16_n398
+end
+
+def fun_l15_n534()
+ fun_l16_n861
+end
+
+def fun_l15_n535()
+ fun_l16_n219
+end
+
+def fun_l15_n536()
+ fun_l16_n178
+end
+
+def fun_l15_n537()
+ fun_l16_n436
+end
+
+def fun_l15_n538()
+ fun_l16_n821
+end
+
+def fun_l15_n539()
+ fun_l16_n732
+end
+
+def fun_l15_n540()
+ fun_l16_n432
+end
+
+def fun_l15_n541()
+ fun_l16_n32
+end
+
+def fun_l15_n542()
+ fun_l16_n128
+end
+
+def fun_l15_n543()
+ fun_l16_n2
+end
+
+def fun_l15_n544()
+ fun_l16_n117
+end
+
+def fun_l15_n545()
+ fun_l16_n861
+end
+
+def fun_l15_n546()
+ fun_l16_n817
+end
+
+def fun_l15_n547()
+ fun_l16_n833
+end
+
+def fun_l15_n548()
+ fun_l16_n180
+end
+
+def fun_l15_n549()
+ fun_l16_n176
+end
+
+def fun_l15_n550()
+ fun_l16_n772
+end
+
+def fun_l15_n551()
+ fun_l16_n469
+end
+
+def fun_l15_n552()
+ fun_l16_n209
+end
+
+def fun_l15_n553()
+ fun_l16_n200
+end
+
+def fun_l15_n554()
+ fun_l16_n434
+end
+
+def fun_l15_n555()
+ fun_l16_n529
+end
+
+def fun_l15_n556()
+ fun_l16_n847
+end
+
+def fun_l15_n557()
+ fun_l16_n134
+end
+
+def fun_l15_n558()
+ fun_l16_n748
+end
+
+def fun_l15_n559()
+ fun_l16_n153
+end
+
+def fun_l15_n560()
+ fun_l16_n903
+end
+
+def fun_l15_n561()
+ fun_l16_n449
+end
+
+def fun_l15_n562()
+ fun_l16_n267
+end
+
+def fun_l15_n563()
+ fun_l16_n47
+end
+
+def fun_l15_n564()
+ fun_l16_n762
+end
+
+def fun_l15_n565()
+ fun_l16_n932
+end
+
+def fun_l15_n566()
+ fun_l16_n782
+end
+
+def fun_l15_n567()
+ fun_l16_n580
+end
+
+def fun_l15_n568()
+ fun_l16_n172
+end
+
+def fun_l15_n569()
+ fun_l16_n379
+end
+
+def fun_l15_n570()
+ fun_l16_n890
+end
+
+def fun_l15_n571()
+ fun_l16_n257
+end
+
+def fun_l15_n572()
+ fun_l16_n964
+end
+
+def fun_l15_n573()
+ fun_l16_n164
+end
+
+def fun_l15_n574()
+ fun_l16_n606
+end
+
+def fun_l15_n575()
+ fun_l16_n475
+end
+
+def fun_l15_n576()
+ fun_l16_n500
+end
+
+def fun_l15_n577()
+ fun_l16_n65
+end
+
+def fun_l15_n578()
+ fun_l16_n81
+end
+
+def fun_l15_n579()
+ fun_l16_n952
+end
+
+def fun_l15_n580()
+ fun_l16_n524
+end
+
+def fun_l15_n581()
+ fun_l16_n573
+end
+
+def fun_l15_n582()
+ fun_l16_n812
+end
+
+def fun_l15_n583()
+ fun_l16_n498
+end
+
+def fun_l15_n584()
+ fun_l16_n106
+end
+
+def fun_l15_n585()
+ fun_l16_n807
+end
+
+def fun_l15_n586()
+ fun_l16_n70
+end
+
+def fun_l15_n587()
+ fun_l16_n41
+end
+
+def fun_l15_n588()
+ fun_l16_n78
+end
+
+def fun_l15_n589()
+ fun_l16_n235
+end
+
+def fun_l15_n590()
+ fun_l16_n974
+end
+
+def fun_l15_n591()
+ fun_l16_n450
+end
+
+def fun_l15_n592()
+ fun_l16_n191
+end
+
+def fun_l15_n593()
+ fun_l16_n988
+end
+
+def fun_l15_n594()
+ fun_l16_n516
+end
+
+def fun_l15_n595()
+ fun_l16_n7
+end
+
+def fun_l15_n596()
+ fun_l16_n186
+end
+
+def fun_l15_n597()
+ fun_l16_n249
+end
+
+def fun_l15_n598()
+ fun_l16_n832
+end
+
+def fun_l15_n599()
+ fun_l16_n502
+end
+
+def fun_l15_n600()
+ fun_l16_n967
+end
+
+def fun_l15_n601()
+ fun_l16_n930
+end
+
+def fun_l15_n602()
+ fun_l16_n497
+end
+
+def fun_l15_n603()
+ fun_l16_n467
+end
+
+def fun_l15_n604()
+ fun_l16_n742
+end
+
+def fun_l15_n605()
+ fun_l16_n52
+end
+
+def fun_l15_n606()
+ fun_l16_n494
+end
+
+def fun_l15_n607()
+ fun_l16_n604
+end
+
+def fun_l15_n608()
+ fun_l16_n372
+end
+
+def fun_l15_n609()
+ fun_l16_n503
+end
+
+def fun_l15_n610()
+ fun_l16_n853
+end
+
+def fun_l15_n611()
+ fun_l16_n146
+end
+
+def fun_l15_n612()
+ fun_l16_n812
+end
+
+def fun_l15_n613()
+ fun_l16_n235
+end
+
+def fun_l15_n614()
+ fun_l16_n924
+end
+
+def fun_l15_n615()
+ fun_l16_n212
+end
+
+def fun_l15_n616()
+ fun_l16_n332
+end
+
+def fun_l15_n617()
+ fun_l16_n179
+end
+
+def fun_l15_n618()
+ fun_l16_n767
+end
+
+def fun_l15_n619()
+ fun_l16_n46
+end
+
+def fun_l15_n620()
+ fun_l16_n275
+end
+
+def fun_l15_n621()
+ fun_l16_n348
+end
+
+def fun_l15_n622()
+ fun_l16_n136
+end
+
+def fun_l15_n623()
+ fun_l16_n814
+end
+
+def fun_l15_n624()
+ fun_l16_n782
+end
+
+def fun_l15_n625()
+ fun_l16_n692
+end
+
+def fun_l15_n626()
+ fun_l16_n331
+end
+
+def fun_l15_n627()
+ fun_l16_n228
+end
+
+def fun_l15_n628()
+ fun_l16_n249
+end
+
+def fun_l15_n629()
+ fun_l16_n387
+end
+
+def fun_l15_n630()
+ fun_l16_n994
+end
+
+def fun_l15_n631()
+ fun_l16_n219
+end
+
+def fun_l15_n632()
+ fun_l16_n743
+end
+
+def fun_l15_n633()
+ fun_l16_n674
+end
+
+def fun_l15_n634()
+ fun_l16_n411
+end
+
+def fun_l15_n635()
+ fun_l16_n757
+end
+
+def fun_l15_n636()
+ fun_l16_n568
+end
+
+def fun_l15_n637()
+ fun_l16_n323
+end
+
+def fun_l15_n638()
+ fun_l16_n910
+end
+
+def fun_l15_n639()
+ fun_l16_n823
+end
+
+def fun_l15_n640()
+ fun_l16_n942
+end
+
+def fun_l15_n641()
+ fun_l16_n796
+end
+
+def fun_l15_n642()
+ fun_l16_n507
+end
+
+def fun_l15_n643()
+ fun_l16_n72
+end
+
+def fun_l15_n644()
+ fun_l16_n285
+end
+
+def fun_l15_n645()
+ fun_l16_n654
+end
+
+def fun_l15_n646()
+ fun_l16_n361
+end
+
+def fun_l15_n647()
+ fun_l16_n766
+end
+
+def fun_l15_n648()
+ fun_l16_n587
+end
+
+def fun_l15_n649()
+ fun_l16_n99
+end
+
+def fun_l15_n650()
+ fun_l16_n558
+end
+
+def fun_l15_n651()
+ fun_l16_n623
+end
+
+def fun_l15_n652()
+ fun_l16_n428
+end
+
+def fun_l15_n653()
+ fun_l16_n695
+end
+
+def fun_l15_n654()
+ fun_l16_n514
+end
+
+def fun_l15_n655()
+ fun_l16_n159
+end
+
+def fun_l15_n656()
+ fun_l16_n41
+end
+
+def fun_l15_n657()
+ fun_l16_n510
+end
+
+def fun_l15_n658()
+ fun_l16_n26
+end
+
+def fun_l15_n659()
+ fun_l16_n947
+end
+
+def fun_l15_n660()
+ fun_l16_n766
+end
+
+def fun_l15_n661()
+ fun_l16_n470
+end
+
+def fun_l15_n662()
+ fun_l16_n46
+end
+
+def fun_l15_n663()
+ fun_l16_n499
+end
+
+def fun_l15_n664()
+ fun_l16_n593
+end
+
+def fun_l15_n665()
+ fun_l16_n803
+end
+
+def fun_l15_n666()
+ fun_l16_n321
+end
+
+def fun_l15_n667()
+ fun_l16_n165
+end
+
+def fun_l15_n668()
+ fun_l16_n762
+end
+
+def fun_l15_n669()
+ fun_l16_n800
+end
+
+def fun_l15_n670()
+ fun_l16_n530
+end
+
+def fun_l15_n671()
+ fun_l16_n198
+end
+
+def fun_l15_n672()
+ fun_l16_n365
+end
+
+def fun_l15_n673()
+ fun_l16_n204
+end
+
+def fun_l15_n674()
+ fun_l16_n782
+end
+
+def fun_l15_n675()
+ fun_l16_n465
+end
+
+def fun_l15_n676()
+ fun_l16_n733
+end
+
+def fun_l15_n677()
+ fun_l16_n101
+end
+
+def fun_l15_n678()
+ fun_l16_n38
+end
+
+def fun_l15_n679()
+ fun_l16_n800
+end
+
+def fun_l15_n680()
+ fun_l16_n45
+end
+
+def fun_l15_n681()
+ fun_l16_n996
+end
+
+def fun_l15_n682()
+ fun_l16_n156
+end
+
+def fun_l15_n683()
+ fun_l16_n868
+end
+
+def fun_l15_n684()
+ fun_l16_n537
+end
+
+def fun_l15_n685()
+ fun_l16_n450
+end
+
+def fun_l15_n686()
+ fun_l16_n932
+end
+
+def fun_l15_n687()
+ fun_l16_n733
+end
+
+def fun_l15_n688()
+ fun_l16_n150
+end
+
+def fun_l15_n689()
+ fun_l16_n770
+end
+
+def fun_l15_n690()
+ fun_l16_n522
+end
+
+def fun_l15_n691()
+ fun_l16_n867
+end
+
+def fun_l15_n692()
+ fun_l16_n318
+end
+
+def fun_l15_n693()
+ fun_l16_n23
+end
+
+def fun_l15_n694()
+ fun_l16_n402
+end
+
+def fun_l15_n695()
+ fun_l16_n261
+end
+
+def fun_l15_n696()
+ fun_l16_n726
+end
+
+def fun_l15_n697()
+ fun_l16_n406
+end
+
+def fun_l15_n698()
+ fun_l16_n308
+end
+
+def fun_l15_n699()
+ fun_l16_n428
+end
+
+def fun_l15_n700()
+ fun_l16_n141
+end
+
+def fun_l15_n701()
+ fun_l16_n987
+end
+
+def fun_l15_n702()
+ fun_l16_n371
+end
+
+def fun_l15_n703()
+ fun_l16_n578
+end
+
+def fun_l15_n704()
+ fun_l16_n780
+end
+
+def fun_l15_n705()
+ fun_l16_n914
+end
+
+def fun_l15_n706()
+ fun_l16_n976
+end
+
+def fun_l15_n707()
+ fun_l16_n268
+end
+
+def fun_l15_n708()
+ fun_l16_n431
+end
+
+def fun_l15_n709()
+ fun_l16_n188
+end
+
+def fun_l15_n710()
+ fun_l16_n190
+end
+
+def fun_l15_n711()
+ fun_l16_n742
+end
+
+def fun_l15_n712()
+ fun_l16_n223
+end
+
+def fun_l15_n713()
+ fun_l16_n993
+end
+
+def fun_l15_n714()
+ fun_l16_n482
+end
+
+def fun_l15_n715()
+ fun_l16_n890
+end
+
+def fun_l15_n716()
+ fun_l16_n929
+end
+
+def fun_l15_n717()
+ fun_l16_n644
+end
+
+def fun_l15_n718()
+ fun_l16_n646
+end
+
+def fun_l15_n719()
+ fun_l16_n121
+end
+
+def fun_l15_n720()
+ fun_l16_n417
+end
+
+def fun_l15_n721()
+ fun_l16_n203
+end
+
+def fun_l15_n722()
+ fun_l16_n145
+end
+
+def fun_l15_n723()
+ fun_l16_n401
+end
+
+def fun_l15_n724()
+ fun_l16_n823
+end
+
+def fun_l15_n725()
+ fun_l16_n554
+end
+
+def fun_l15_n726()
+ fun_l16_n641
+end
+
+def fun_l15_n727()
+ fun_l16_n232
+end
+
+def fun_l15_n728()
+ fun_l16_n313
+end
+
+def fun_l15_n729()
+ fun_l16_n943
+end
+
+def fun_l15_n730()
+ fun_l16_n964
+end
+
+def fun_l15_n731()
+ fun_l16_n409
+end
+
+def fun_l15_n732()
+ fun_l16_n375
+end
+
+def fun_l15_n733()
+ fun_l16_n147
+end
+
+def fun_l15_n734()
+ fun_l16_n779
+end
+
+def fun_l15_n735()
+ fun_l16_n690
+end
+
+def fun_l15_n736()
+ fun_l16_n91
+end
+
+def fun_l15_n737()
+ fun_l16_n819
+end
+
+def fun_l15_n738()
+ fun_l16_n68
+end
+
+def fun_l15_n739()
+ fun_l16_n810
+end
+
+def fun_l15_n740()
+ fun_l16_n787
+end
+
+def fun_l15_n741()
+ fun_l16_n90
+end
+
+def fun_l15_n742()
+ fun_l16_n800
+end
+
+def fun_l15_n743()
+ fun_l16_n491
+end
+
+def fun_l15_n744()
+ fun_l16_n729
+end
+
+def fun_l15_n745()
+ fun_l16_n917
+end
+
+def fun_l15_n746()
+ fun_l16_n360
+end
+
+def fun_l15_n747()
+ fun_l16_n489
+end
+
+def fun_l15_n748()
+ fun_l16_n755
+end
+
+def fun_l15_n749()
+ fun_l16_n999
+end
+
+def fun_l15_n750()
+ fun_l16_n268
+end
+
+def fun_l15_n751()
+ fun_l16_n213
+end
+
+def fun_l15_n752()
+ fun_l16_n923
+end
+
+def fun_l15_n753()
+ fun_l16_n456
+end
+
+def fun_l15_n754()
+ fun_l16_n653
+end
+
+def fun_l15_n755()
+ fun_l16_n855
+end
+
+def fun_l15_n756()
+ fun_l16_n833
+end
+
+def fun_l15_n757()
+ fun_l16_n269
+end
+
+def fun_l15_n758()
+ fun_l16_n152
+end
+
+def fun_l15_n759()
+ fun_l16_n391
+end
+
+def fun_l15_n760()
+ fun_l16_n850
+end
+
+def fun_l15_n761()
+ fun_l16_n70
+end
+
+def fun_l15_n762()
+ fun_l16_n774
+end
+
+def fun_l15_n763()
+ fun_l16_n379
+end
+
+def fun_l15_n764()
+ fun_l16_n271
+end
+
+def fun_l15_n765()
+ fun_l16_n667
+end
+
+def fun_l15_n766()
+ fun_l16_n149
+end
+
+def fun_l15_n767()
+ fun_l16_n715
+end
+
+def fun_l15_n768()
+ fun_l16_n645
+end
+
+def fun_l15_n769()
+ fun_l16_n741
+end
+
+def fun_l15_n770()
+ fun_l16_n147
+end
+
+def fun_l15_n771()
+ fun_l16_n23
+end
+
+def fun_l15_n772()
+ fun_l16_n653
+end
+
+def fun_l15_n773()
+ fun_l16_n109
+end
+
+def fun_l15_n774()
+ fun_l16_n402
+end
+
+def fun_l15_n775()
+ fun_l16_n995
+end
+
+def fun_l15_n776()
+ fun_l16_n112
+end
+
+def fun_l15_n777()
+ fun_l16_n416
+end
+
+def fun_l15_n778()
+ fun_l16_n641
+end
+
+def fun_l15_n779()
+ fun_l16_n412
+end
+
+def fun_l15_n780()
+ fun_l16_n548
+end
+
+def fun_l15_n781()
+ fun_l16_n329
+end
+
+def fun_l15_n782()
+ fun_l16_n804
+end
+
+def fun_l15_n783()
+ fun_l16_n377
+end
+
+def fun_l15_n784()
+ fun_l16_n107
+end
+
+def fun_l15_n785()
+ fun_l16_n364
+end
+
+def fun_l15_n786()
+ fun_l16_n950
+end
+
+def fun_l15_n787()
+ fun_l16_n769
+end
+
+def fun_l15_n788()
+ fun_l16_n322
+end
+
+def fun_l15_n789()
+ fun_l16_n604
+end
+
+def fun_l15_n790()
+ fun_l16_n425
+end
+
+def fun_l15_n791()
+ fun_l16_n318
+end
+
+def fun_l15_n792()
+ fun_l16_n236
+end
+
+def fun_l15_n793()
+ fun_l16_n794
+end
+
+def fun_l15_n794()
+ fun_l16_n948
+end
+
+def fun_l15_n795()
+ fun_l16_n421
+end
+
+def fun_l15_n796()
+ fun_l16_n565
+end
+
+def fun_l15_n797()
+ fun_l16_n363
+end
+
+def fun_l15_n798()
+ fun_l16_n274
+end
+
+def fun_l15_n799()
+ fun_l16_n391
+end
+
+def fun_l15_n800()
+ fun_l16_n303
+end
+
+def fun_l15_n801()
+ fun_l16_n31
+end
+
+def fun_l15_n802()
+ fun_l16_n585
+end
+
+def fun_l15_n803()
+ fun_l16_n769
+end
+
+def fun_l15_n804()
+ fun_l16_n749
+end
+
+def fun_l15_n805()
+ fun_l16_n405
+end
+
+def fun_l15_n806()
+ fun_l16_n53
+end
+
+def fun_l15_n807()
+ fun_l16_n951
+end
+
+def fun_l15_n808()
+ fun_l16_n817
+end
+
+def fun_l15_n809()
+ fun_l16_n217
+end
+
+def fun_l15_n810()
+ fun_l16_n210
+end
+
+def fun_l15_n811()
+ fun_l16_n830
+end
+
+def fun_l15_n812()
+ fun_l16_n743
+end
+
+def fun_l15_n813()
+ fun_l16_n908
+end
+
+def fun_l15_n814()
+ fun_l16_n343
+end
+
+def fun_l15_n815()
+ fun_l16_n135
+end
+
+def fun_l15_n816()
+ fun_l16_n346
+end
+
+def fun_l15_n817()
+ fun_l16_n947
+end
+
+def fun_l15_n818()
+ fun_l16_n969
+end
+
+def fun_l15_n819()
+ fun_l16_n313
+end
+
+def fun_l15_n820()
+ fun_l16_n668
+end
+
+def fun_l15_n821()
+ fun_l16_n923
+end
+
+def fun_l15_n822()
+ fun_l16_n650
+end
+
+def fun_l15_n823()
+ fun_l16_n601
+end
+
+def fun_l15_n824()
+ fun_l16_n775
+end
+
+def fun_l15_n825()
+ fun_l16_n748
+end
+
+def fun_l15_n826()
+ fun_l16_n353
+end
+
+def fun_l15_n827()
+ fun_l16_n164
+end
+
+def fun_l15_n828()
+ fun_l16_n458
+end
+
+def fun_l15_n829()
+ fun_l16_n257
+end
+
+def fun_l15_n830()
+ fun_l16_n968
+end
+
+def fun_l15_n831()
+ fun_l16_n932
+end
+
+def fun_l15_n832()
+ fun_l16_n749
+end
+
+def fun_l15_n833()
+ fun_l16_n873
+end
+
+def fun_l15_n834()
+ fun_l16_n940
+end
+
+def fun_l15_n835()
+ fun_l16_n404
+end
+
+def fun_l15_n836()
+ fun_l16_n235
+end
+
+def fun_l15_n837()
+ fun_l16_n584
+end
+
+def fun_l15_n838()
+ fun_l16_n12
+end
+
+def fun_l15_n839()
+ fun_l16_n378
+end
+
+def fun_l15_n840()
+ fun_l16_n463
+end
+
+def fun_l15_n841()
+ fun_l16_n310
+end
+
+def fun_l15_n842()
+ fun_l16_n832
+end
+
+def fun_l15_n843()
+ fun_l16_n641
+end
+
+def fun_l15_n844()
+ fun_l16_n484
+end
+
+def fun_l15_n845()
+ fun_l16_n589
+end
+
+def fun_l15_n846()
+ fun_l16_n315
+end
+
+def fun_l15_n847()
+ fun_l16_n977
+end
+
+def fun_l15_n848()
+ fun_l16_n946
+end
+
+def fun_l15_n849()
+ fun_l16_n848
+end
+
+def fun_l15_n850()
+ fun_l16_n956
+end
+
+def fun_l15_n851()
+ fun_l16_n608
+end
+
+def fun_l15_n852()
+ fun_l16_n787
+end
+
+def fun_l15_n853()
+ fun_l16_n527
+end
+
+def fun_l15_n854()
+ fun_l16_n426
+end
+
+def fun_l15_n855()
+ fun_l16_n330
+end
+
+def fun_l15_n856()
+ fun_l16_n687
+end
+
+def fun_l15_n857()
+ fun_l16_n672
+end
+
+def fun_l15_n858()
+ fun_l16_n133
+end
+
+def fun_l15_n859()
+ fun_l16_n515
+end
+
+def fun_l15_n860()
+ fun_l16_n20
+end
+
+def fun_l15_n861()
+ fun_l16_n419
+end
+
+def fun_l15_n862()
+ fun_l16_n239
+end
+
+def fun_l15_n863()
+ fun_l16_n379
+end
+
+def fun_l15_n864()
+ fun_l16_n241
+end
+
+def fun_l15_n865()
+ fun_l16_n713
+end
+
+def fun_l15_n866()
+ fun_l16_n705
+end
+
+def fun_l15_n867()
+ fun_l16_n487
+end
+
+def fun_l15_n868()
+ fun_l16_n959
+end
+
+def fun_l15_n869()
+ fun_l16_n914
+end
+
+def fun_l15_n870()
+ fun_l16_n325
+end
+
+def fun_l15_n871()
+ fun_l16_n983
+end
+
+def fun_l15_n872()
+ fun_l16_n363
+end
+
+def fun_l15_n873()
+ fun_l16_n617
+end
+
+def fun_l15_n874()
+ fun_l16_n420
+end
+
+def fun_l15_n875()
+ fun_l16_n732
+end
+
+def fun_l15_n876()
+ fun_l16_n560
+end
+
+def fun_l15_n877()
+ fun_l16_n318
+end
+
+def fun_l15_n878()
+ fun_l16_n97
+end
+
+def fun_l15_n879()
+ fun_l16_n242
+end
+
+def fun_l15_n880()
+ fun_l16_n801
+end
+
+def fun_l15_n881()
+ fun_l16_n56
+end
+
+def fun_l15_n882()
+ fun_l16_n68
+end
+
+def fun_l15_n883()
+ fun_l16_n625
+end
+
+def fun_l15_n884()
+ fun_l16_n400
+end
+
+def fun_l15_n885()
+ fun_l16_n405
+end
+
+def fun_l15_n886()
+ fun_l16_n778
+end
+
+def fun_l15_n887()
+ fun_l16_n865
+end
+
+def fun_l15_n888()
+ fun_l16_n737
+end
+
+def fun_l15_n889()
+ fun_l16_n233
+end
+
+def fun_l15_n890()
+ fun_l16_n594
+end
+
+def fun_l15_n891()
+ fun_l16_n240
+end
+
+def fun_l15_n892()
+ fun_l16_n511
+end
+
+def fun_l15_n893()
+ fun_l16_n711
+end
+
+def fun_l15_n894()
+ fun_l16_n238
+end
+
+def fun_l15_n895()
+ fun_l16_n903
+end
+
+def fun_l15_n896()
+ fun_l16_n506
+end
+
+def fun_l15_n897()
+ fun_l16_n794
+end
+
+def fun_l15_n898()
+ fun_l16_n812
+end
+
+def fun_l15_n899()
+ fun_l16_n829
+end
+
+def fun_l15_n900()
+ fun_l16_n686
+end
+
+def fun_l15_n901()
+ fun_l16_n302
+end
+
+def fun_l15_n902()
+ fun_l16_n947
+end
+
+def fun_l15_n903()
+ fun_l16_n107
+end
+
+def fun_l15_n904()
+ fun_l16_n79
+end
+
+def fun_l15_n905()
+ fun_l16_n570
+end
+
+def fun_l15_n906()
+ fun_l16_n567
+end
+
+def fun_l15_n907()
+ fun_l16_n853
+end
+
+def fun_l15_n908()
+ fun_l16_n49
+end
+
+def fun_l15_n909()
+ fun_l16_n721
+end
+
+def fun_l15_n910()
+ fun_l16_n376
+end
+
+def fun_l15_n911()
+ fun_l16_n513
+end
+
+def fun_l15_n912()
+ fun_l16_n863
+end
+
+def fun_l15_n913()
+ fun_l16_n692
+end
+
+def fun_l15_n914()
+ fun_l16_n391
+end
+
+def fun_l15_n915()
+ fun_l16_n263
+end
+
+def fun_l15_n916()
+ fun_l16_n159
+end
+
+def fun_l15_n917()
+ fun_l16_n291
+end
+
+def fun_l15_n918()
+ fun_l16_n290
+end
+
+def fun_l15_n919()
+ fun_l16_n328
+end
+
+def fun_l15_n920()
+ fun_l16_n838
+end
+
+def fun_l15_n921()
+ fun_l16_n66
+end
+
+def fun_l15_n922()
+ fun_l16_n821
+end
+
+def fun_l15_n923()
+ fun_l16_n549
+end
+
+def fun_l15_n924()
+ fun_l16_n235
+end
+
+def fun_l15_n925()
+ fun_l16_n800
+end
+
+def fun_l15_n926()
+ fun_l16_n486
+end
+
+def fun_l15_n927()
+ fun_l16_n824
+end
+
+def fun_l15_n928()
+ fun_l16_n881
+end
+
+def fun_l15_n929()
+ fun_l16_n772
+end
+
+def fun_l15_n930()
+ fun_l16_n563
+end
+
+def fun_l15_n931()
+ fun_l16_n99
+end
+
+def fun_l15_n932()
+ fun_l16_n691
+end
+
+def fun_l15_n933()
+ fun_l16_n983
+end
+
+def fun_l15_n934()
+ fun_l16_n593
+end
+
+def fun_l15_n935()
+ fun_l16_n611
+end
+
+def fun_l15_n936()
+ fun_l16_n600
+end
+
+def fun_l15_n937()
+ fun_l16_n892
+end
+
+def fun_l15_n938()
+ fun_l16_n653
+end
+
+def fun_l15_n939()
+ fun_l16_n78
+end
+
+def fun_l15_n940()
+ fun_l16_n139
+end
+
+def fun_l15_n941()
+ fun_l16_n995
+end
+
+def fun_l15_n942()
+ fun_l16_n63
+end
+
+def fun_l15_n943()
+ fun_l16_n466
+end
+
+def fun_l15_n944()
+ fun_l16_n740
+end
+
+def fun_l15_n945()
+ fun_l16_n870
+end
+
+def fun_l15_n946()
+ fun_l16_n373
+end
+
+def fun_l15_n947()
+ fun_l16_n375
+end
+
+def fun_l15_n948()
+ fun_l16_n360
+end
+
+def fun_l15_n949()
+ fun_l16_n526
+end
+
+def fun_l15_n950()
+ fun_l16_n100
+end
+
+def fun_l15_n951()
+ fun_l16_n644
+end
+
+def fun_l15_n952()
+ fun_l16_n773
+end
+
+def fun_l15_n953()
+ fun_l16_n311
+end
+
+def fun_l15_n954()
+ fun_l16_n152
+end
+
+def fun_l15_n955()
+ fun_l16_n754
+end
+
+def fun_l15_n956()
+ fun_l16_n31
+end
+
+def fun_l15_n957()
+ fun_l16_n501
+end
+
+def fun_l15_n958()
+ fun_l16_n333
+end
+
+def fun_l15_n959()
+ fun_l16_n952
+end
+
+def fun_l15_n960()
+ fun_l16_n753
+end
+
+def fun_l15_n961()
+ fun_l16_n694
+end
+
+def fun_l15_n962()
+ fun_l16_n82
+end
+
+def fun_l15_n963()
+ fun_l16_n204
+end
+
+def fun_l15_n964()
+ fun_l16_n910
+end
+
+def fun_l15_n965()
+ fun_l16_n127
+end
+
+def fun_l15_n966()
+ fun_l16_n203
+end
+
+def fun_l15_n967()
+ fun_l16_n760
+end
+
+def fun_l15_n968()
+ fun_l16_n718
+end
+
+def fun_l15_n969()
+ fun_l16_n446
+end
+
+def fun_l15_n970()
+ fun_l16_n595
+end
+
+def fun_l15_n971()
+ fun_l16_n165
+end
+
+def fun_l15_n972()
+ fun_l16_n393
+end
+
+def fun_l15_n973()
+ fun_l16_n766
+end
+
+def fun_l15_n974()
+ fun_l16_n276
+end
+
+def fun_l15_n975()
+ fun_l16_n97
+end
+
+def fun_l15_n976()
+ fun_l16_n319
+end
+
+def fun_l15_n977()
+ fun_l16_n333
+end
+
+def fun_l15_n978()
+ fun_l16_n635
+end
+
+def fun_l15_n979()
+ fun_l16_n466
+end
+
+def fun_l15_n980()
+ fun_l16_n841
+end
+
+def fun_l15_n981()
+ fun_l16_n415
+end
+
+def fun_l15_n982()
+ fun_l16_n630
+end
+
+def fun_l15_n983()
+ fun_l16_n19
+end
+
+def fun_l15_n984()
+ fun_l16_n901
+end
+
+def fun_l15_n985()
+ fun_l16_n933
+end
+
+def fun_l15_n986()
+ fun_l16_n558
+end
+
+def fun_l15_n987()
+ fun_l16_n357
+end
+
+def fun_l15_n988()
+ fun_l16_n929
+end
+
+def fun_l15_n989()
+ fun_l16_n871
+end
+
+def fun_l15_n990()
+ fun_l16_n967
+end
+
+def fun_l15_n991()
+ fun_l16_n803
+end
+
+def fun_l15_n992()
+ fun_l16_n484
+end
+
+def fun_l15_n993()
+ fun_l16_n270
+end
+
+def fun_l15_n994()
+ fun_l16_n670
+end
+
+def fun_l15_n995()
+ fun_l16_n77
+end
+
+def fun_l15_n996()
+ fun_l16_n480
+end
+
+def fun_l15_n997()
+ fun_l16_n279
+end
+
+def fun_l15_n998()
+ fun_l16_n109
+end
+
+def fun_l15_n999()
+ fun_l16_n333
+end
+
+def fun_l16_n0()
+ fun_l17_n358
+end
+
+def fun_l16_n1()
+ fun_l17_n388
+end
+
+def fun_l16_n2()
+ fun_l17_n450
+end
+
+def fun_l16_n3()
+ fun_l17_n274
+end
+
+def fun_l16_n4()
+ fun_l17_n83
+end
+
+def fun_l16_n5()
+ fun_l17_n148
+end
+
+def fun_l16_n6()
+ fun_l17_n370
+end
+
+def fun_l16_n7()
+ fun_l17_n956
+end
+
+def fun_l16_n8()
+ fun_l17_n137
+end
+
+def fun_l16_n9()
+ fun_l17_n702
+end
+
+def fun_l16_n10()
+ fun_l17_n296
+end
+
+def fun_l16_n11()
+ fun_l17_n44
+end
+
+def fun_l16_n12()
+ fun_l17_n937
+end
+
+def fun_l16_n13()
+ fun_l17_n100
+end
+
+def fun_l16_n14()
+ fun_l17_n599
+end
+
+def fun_l16_n15()
+ fun_l17_n757
+end
+
+def fun_l16_n16()
+ fun_l17_n831
+end
+
+def fun_l16_n17()
+ fun_l17_n753
+end
+
+def fun_l16_n18()
+ fun_l17_n726
+end
+
+def fun_l16_n19()
+ fun_l17_n126
+end
+
+def fun_l16_n20()
+ fun_l17_n106
+end
+
+def fun_l16_n21()
+ fun_l17_n46
+end
+
+def fun_l16_n22()
+ fun_l17_n56
+end
+
+def fun_l16_n23()
+ fun_l17_n16
+end
+
+def fun_l16_n24()
+ fun_l17_n298
+end
+
+def fun_l16_n25()
+ fun_l17_n173
+end
+
+def fun_l16_n26()
+ fun_l17_n479
+end
+
+def fun_l16_n27()
+ fun_l17_n304
+end
+
+def fun_l16_n28()
+ fun_l17_n426
+end
+
+def fun_l16_n29()
+ fun_l17_n214
+end
+
+def fun_l16_n30()
+ fun_l17_n818
+end
+
+def fun_l16_n31()
+ fun_l17_n362
+end
+
+def fun_l16_n32()
+ fun_l17_n392
+end
+
+def fun_l16_n33()
+ fun_l17_n751
+end
+
+def fun_l16_n34()
+ fun_l17_n719
+end
+
+def fun_l16_n35()
+ fun_l17_n258
+end
+
+def fun_l16_n36()
+ fun_l17_n128
+end
+
+def fun_l16_n37()
+ fun_l17_n95
+end
+
+def fun_l16_n38()
+ fun_l17_n30
+end
+
+def fun_l16_n39()
+ fun_l17_n539
+end
+
+def fun_l16_n40()
+ fun_l17_n139
+end
+
+def fun_l16_n41()
+ fun_l17_n309
+end
+
+def fun_l16_n42()
+ fun_l17_n943
+end
+
+def fun_l16_n43()
+ fun_l17_n242
+end
+
+def fun_l16_n44()
+ fun_l17_n402
+end
+
+def fun_l16_n45()
+ fun_l17_n173
+end
+
+def fun_l16_n46()
+ fun_l17_n328
+end
+
+def fun_l16_n47()
+ fun_l17_n883
+end
+
+def fun_l16_n48()
+ fun_l17_n992
+end
+
+def fun_l16_n49()
+ fun_l17_n921
+end
+
+def fun_l16_n50()
+ fun_l17_n130
+end
+
+def fun_l16_n51()
+ fun_l17_n374
+end
+
+def fun_l16_n52()
+ fun_l17_n555
+end
+
+def fun_l16_n53()
+ fun_l17_n965
+end
+
+def fun_l16_n54()
+ fun_l17_n353
+end
+
+def fun_l16_n55()
+ fun_l17_n525
+end
+
+def fun_l16_n56()
+ fun_l17_n569
+end
+
+def fun_l16_n57()
+ fun_l17_n156
+end
+
+def fun_l16_n58()
+ fun_l17_n695
+end
+
+def fun_l16_n59()
+ fun_l17_n864
+end
+
+def fun_l16_n60()
+ fun_l17_n415
+end
+
+def fun_l16_n61()
+ fun_l17_n605
+end
+
+def fun_l16_n62()
+ fun_l17_n995
+end
+
+def fun_l16_n63()
+ fun_l17_n794
+end
+
+def fun_l16_n64()
+ fun_l17_n813
+end
+
+def fun_l16_n65()
+ fun_l17_n839
+end
+
+def fun_l16_n66()
+ fun_l17_n273
+end
+
+def fun_l16_n67()
+ fun_l17_n223
+end
+
+def fun_l16_n68()
+ fun_l17_n168
+end
+
+def fun_l16_n69()
+ fun_l17_n798
+end
+
+def fun_l16_n70()
+ fun_l17_n892
+end
+
+def fun_l16_n71()
+ fun_l17_n966
+end
+
+def fun_l16_n72()
+ fun_l17_n102
+end
+
+def fun_l16_n73()
+ fun_l17_n209
+end
+
+def fun_l16_n74()
+ fun_l17_n618
+end
+
+def fun_l16_n75()
+ fun_l17_n432
+end
+
+def fun_l16_n76()
+ fun_l17_n254
+end
+
+def fun_l16_n77()
+ fun_l17_n413
+end
+
+def fun_l16_n78()
+ fun_l17_n908
+end
+
+def fun_l16_n79()
+ fun_l17_n519
+end
+
+def fun_l16_n80()
+ fun_l17_n67
+end
+
+def fun_l16_n81()
+ fun_l17_n914
+end
+
+def fun_l16_n82()
+ fun_l17_n356
+end
+
+def fun_l16_n83()
+ fun_l17_n138
+end
+
+def fun_l16_n84()
+ fun_l17_n714
+end
+
+def fun_l16_n85()
+ fun_l17_n803
+end
+
+def fun_l16_n86()
+ fun_l17_n770
+end
+
+def fun_l16_n87()
+ fun_l17_n813
+end
+
+def fun_l16_n88()
+ fun_l17_n752
+end
+
+def fun_l16_n89()
+ fun_l17_n580
+end
+
+def fun_l16_n90()
+ fun_l17_n368
+end
+
+def fun_l16_n91()
+ fun_l17_n169
+end
+
+def fun_l16_n92()
+ fun_l17_n565
+end
+
+def fun_l16_n93()
+ fun_l17_n111
+end
+
+def fun_l16_n94()
+ fun_l17_n911
+end
+
+def fun_l16_n95()
+ fun_l17_n448
+end
+
+def fun_l16_n96()
+ fun_l17_n455
+end
+
+def fun_l16_n97()
+ fun_l17_n76
+end
+
+def fun_l16_n98()
+ fun_l17_n27
+end
+
+def fun_l16_n99()
+ fun_l17_n884
+end
+
+def fun_l16_n100()
+ fun_l17_n144
+end
+
+def fun_l16_n101()
+ fun_l17_n344
+end
+
+def fun_l16_n102()
+ fun_l17_n293
+end
+
+def fun_l16_n103()
+ fun_l17_n91
+end
+
+def fun_l16_n104()
+ fun_l17_n398
+end
+
+def fun_l16_n105()
+ fun_l17_n398
+end
+
+def fun_l16_n106()
+ fun_l17_n216
+end
+
+def fun_l16_n107()
+ fun_l17_n22
+end
+
+def fun_l16_n108()
+ fun_l17_n901
+end
+
+def fun_l16_n109()
+ fun_l17_n817
+end
+
+def fun_l16_n110()
+ fun_l17_n574
+end
+
+def fun_l16_n111()
+ fun_l17_n546
+end
+
+def fun_l16_n112()
+ fun_l17_n704
+end
+
+def fun_l16_n113()
+ fun_l17_n184
+end
+
+def fun_l16_n114()
+ fun_l17_n993
+end
+
+def fun_l16_n115()
+ fun_l17_n582
+end
+
+def fun_l16_n116()
+ fun_l17_n943
+end
+
+def fun_l16_n117()
+ fun_l17_n692
+end
+
+def fun_l16_n118()
+ fun_l17_n203
+end
+
+def fun_l16_n119()
+ fun_l17_n283
+end
+
+def fun_l16_n120()
+ fun_l17_n600
+end
+
+def fun_l16_n121()
+ fun_l17_n953
+end
+
+def fun_l16_n122()
+ fun_l17_n810
+end
+
+def fun_l16_n123()
+ fun_l17_n861
+end
+
+def fun_l16_n124()
+ fun_l17_n680
+end
+
+def fun_l16_n125()
+ fun_l17_n401
+end
+
+def fun_l16_n126()
+ fun_l17_n905
+end
+
+def fun_l16_n127()
+ fun_l17_n376
+end
+
+def fun_l16_n128()
+ fun_l17_n231
+end
+
+def fun_l16_n129()
+ fun_l17_n693
+end
+
+def fun_l16_n130()
+ fun_l17_n219
+end
+
+def fun_l16_n131()
+ fun_l17_n560
+end
+
+def fun_l16_n132()
+ fun_l17_n17
+end
+
+def fun_l16_n133()
+ fun_l17_n706
+end
+
+def fun_l16_n134()
+ fun_l17_n355
+end
+
+def fun_l16_n135()
+ fun_l17_n309
+end
+
+def fun_l16_n136()
+ fun_l17_n514
+end
+
+def fun_l16_n137()
+ fun_l17_n428
+end
+
+def fun_l16_n138()
+ fun_l17_n80
+end
+
+def fun_l16_n139()
+ fun_l17_n548
+end
+
+def fun_l16_n140()
+ fun_l17_n514
+end
+
+def fun_l16_n141()
+ fun_l17_n316
+end
+
+def fun_l16_n142()
+ fun_l17_n791
+end
+
+def fun_l16_n143()
+ fun_l17_n70
+end
+
+def fun_l16_n144()
+ fun_l17_n953
+end
+
+def fun_l16_n145()
+ fun_l17_n416
+end
+
+def fun_l16_n146()
+ fun_l17_n989
+end
+
+def fun_l16_n147()
+ fun_l17_n604
+end
+
+def fun_l16_n148()
+ fun_l17_n845
+end
+
+def fun_l16_n149()
+ fun_l17_n576
+end
+
+def fun_l16_n150()
+ fun_l17_n831
+end
+
+def fun_l16_n151()
+ fun_l17_n727
+end
+
+def fun_l16_n152()
+ fun_l17_n231
+end
+
+def fun_l16_n153()
+ fun_l17_n405
+end
+
+def fun_l16_n154()
+ fun_l17_n643
+end
+
+def fun_l16_n155()
+ fun_l17_n117
+end
+
+def fun_l16_n156()
+ fun_l17_n842
+end
+
+def fun_l16_n157()
+ fun_l17_n522
+end
+
+def fun_l16_n158()
+ fun_l17_n415
+end
+
+def fun_l16_n159()
+ fun_l17_n239
+end
+
+def fun_l16_n160()
+ fun_l17_n512
+end
+
+def fun_l16_n161()
+ fun_l17_n247
+end
+
+def fun_l16_n162()
+ fun_l17_n798
+end
+
+def fun_l16_n163()
+ fun_l17_n771
+end
+
+def fun_l16_n164()
+ fun_l17_n47
+end
+
+def fun_l16_n165()
+ fun_l17_n803
+end
+
+def fun_l16_n166()
+ fun_l17_n500
+end
+
+def fun_l16_n167()
+ fun_l17_n797
+end
+
+def fun_l16_n168()
+ fun_l17_n467
+end
+
+def fun_l16_n169()
+ fun_l17_n893
+end
+
+def fun_l16_n170()
+ fun_l17_n900
+end
+
+def fun_l16_n171()
+ fun_l17_n539
+end
+
+def fun_l16_n172()
+ fun_l17_n631
+end
+
+def fun_l16_n173()
+ fun_l17_n113
+end
+
+def fun_l16_n174()
+ fun_l17_n674
+end
+
+def fun_l16_n175()
+ fun_l17_n827
+end
+
+def fun_l16_n176()
+ fun_l17_n751
+end
+
+def fun_l16_n177()
+ fun_l17_n600
+end
+
+def fun_l16_n178()
+ fun_l17_n290
+end
+
+def fun_l16_n179()
+ fun_l17_n947
+end
+
+def fun_l16_n180()
+ fun_l17_n718
+end
+
+def fun_l16_n181()
+ fun_l17_n531
+end
+
+def fun_l16_n182()
+ fun_l17_n849
+end
+
+def fun_l16_n183()
+ fun_l17_n310
+end
+
+def fun_l16_n184()
+ fun_l17_n795
+end
+
+def fun_l16_n185()
+ fun_l17_n65
+end
+
+def fun_l16_n186()
+ fun_l17_n242
+end
+
+def fun_l16_n187()
+ fun_l17_n832
+end
+
+def fun_l16_n188()
+ fun_l17_n749
+end
+
+def fun_l16_n189()
+ fun_l17_n826
+end
+
+def fun_l16_n190()
+ fun_l17_n244
+end
+
+def fun_l16_n191()
+ fun_l17_n279
+end
+
+def fun_l16_n192()
+ fun_l17_n746
+end
+
+def fun_l16_n193()
+ fun_l17_n199
+end
+
+def fun_l16_n194()
+ fun_l17_n458
+end
+
+def fun_l16_n195()
+ fun_l17_n161
+end
+
+def fun_l16_n196()
+ fun_l17_n584
+end
+
+def fun_l16_n197()
+ fun_l17_n400
+end
+
+def fun_l16_n198()
+ fun_l17_n598
+end
+
+def fun_l16_n199()
+ fun_l17_n685
+end
+
+def fun_l16_n200()
+ fun_l17_n939
+end
+
+def fun_l16_n201()
+ fun_l17_n374
+end
+
+def fun_l16_n202()
+ fun_l17_n463
+end
+
+def fun_l16_n203()
+ fun_l17_n677
+end
+
+def fun_l16_n204()
+ fun_l17_n857
+end
+
+def fun_l16_n205()
+ fun_l17_n39
+end
+
+def fun_l16_n206()
+ fun_l17_n899
+end
+
+def fun_l16_n207()
+ fun_l17_n733
+end
+
+def fun_l16_n208()
+ fun_l17_n137
+end
+
+def fun_l16_n209()
+ fun_l17_n988
+end
+
+def fun_l16_n210()
+ fun_l17_n792
+end
+
+def fun_l16_n211()
+ fun_l17_n861
+end
+
+def fun_l16_n212()
+ fun_l17_n889
+end
+
+def fun_l16_n213()
+ fun_l17_n933
+end
+
+def fun_l16_n214()
+ fun_l17_n898
+end
+
+def fun_l16_n215()
+ fun_l17_n723
+end
+
+def fun_l16_n216()
+ fun_l17_n116
+end
+
+def fun_l16_n217()
+ fun_l17_n251
+end
+
+def fun_l16_n218()
+ fun_l17_n586
+end
+
+def fun_l16_n219()
+ fun_l17_n428
+end
+
+def fun_l16_n220()
+ fun_l17_n53
+end
+
+def fun_l16_n221()
+ fun_l17_n611
+end
+
+def fun_l16_n222()
+ fun_l17_n480
+end
+
+def fun_l16_n223()
+ fun_l17_n2
+end
+
+def fun_l16_n224()
+ fun_l17_n623
+end
+
+def fun_l16_n225()
+ fun_l17_n178
+end
+
+def fun_l16_n226()
+ fun_l17_n938
+end
+
+def fun_l16_n227()
+ fun_l17_n284
+end
+
+def fun_l16_n228()
+ fun_l17_n925
+end
+
+def fun_l16_n229()
+ fun_l17_n899
+end
+
+def fun_l16_n230()
+ fun_l17_n314
+end
+
+def fun_l16_n231()
+ fun_l17_n931
+end
+
+def fun_l16_n232()
+ fun_l17_n103
+end
+
+def fun_l16_n233()
+ fun_l17_n201
+end
+
+def fun_l16_n234()
+ fun_l17_n139
+end
+
+def fun_l16_n235()
+ fun_l17_n509
+end
+
+def fun_l16_n236()
+ fun_l17_n168
+end
+
+def fun_l16_n237()
+ fun_l17_n667
+end
+
+def fun_l16_n238()
+ fun_l17_n998
+end
+
+def fun_l16_n239()
+ fun_l17_n931
+end
+
+def fun_l16_n240()
+ fun_l17_n159
+end
+
+def fun_l16_n241()
+ fun_l17_n402
+end
+
+def fun_l16_n242()
+ fun_l17_n488
+end
+
+def fun_l16_n243()
+ fun_l17_n319
+end
+
+def fun_l16_n244()
+ fun_l17_n209
+end
+
+def fun_l16_n245()
+ fun_l17_n409
+end
+
+def fun_l16_n246()
+ fun_l17_n712
+end
+
+def fun_l16_n247()
+ fun_l17_n680
+end
+
+def fun_l16_n248()
+ fun_l17_n57
+end
+
+def fun_l16_n249()
+ fun_l17_n68
+end
+
+def fun_l16_n250()
+ fun_l17_n676
+end
+
+def fun_l16_n251()
+ fun_l17_n870
+end
+
+def fun_l16_n252()
+ fun_l17_n718
+end
+
+def fun_l16_n253()
+ fun_l17_n753
+end
+
+def fun_l16_n254()
+ fun_l17_n317
+end
+
+def fun_l16_n255()
+ fun_l17_n905
+end
+
+def fun_l16_n256()
+ fun_l17_n524
+end
+
+def fun_l16_n257()
+ fun_l17_n496
+end
+
+def fun_l16_n258()
+ fun_l17_n253
+end
+
+def fun_l16_n259()
+ fun_l17_n32
+end
+
+def fun_l16_n260()
+ fun_l17_n299
+end
+
+def fun_l16_n261()
+ fun_l17_n291
+end
+
+def fun_l16_n262()
+ fun_l17_n516
+end
+
+def fun_l16_n263()
+ fun_l17_n542
+end
+
+def fun_l16_n264()
+ fun_l17_n550
+end
+
+def fun_l16_n265()
+ fun_l17_n886
+end
+
+def fun_l16_n266()
+ fun_l17_n428
+end
+
+def fun_l16_n267()
+ fun_l17_n741
+end
+
+def fun_l16_n268()
+ fun_l17_n711
+end
+
+def fun_l16_n269()
+ fun_l17_n709
+end
+
+def fun_l16_n270()
+ fun_l17_n71
+end
+
+def fun_l16_n271()
+ fun_l17_n256
+end
+
+def fun_l16_n272()
+ fun_l17_n585
+end
+
+def fun_l16_n273()
+ fun_l17_n478
+end
+
+def fun_l16_n274()
+ fun_l17_n314
+end
+
+def fun_l16_n275()
+ fun_l17_n223
+end
+
+def fun_l16_n276()
+ fun_l17_n691
+end
+
+def fun_l16_n277()
+ fun_l17_n637
+end
+
+def fun_l16_n278()
+ fun_l17_n218
+end
+
+def fun_l16_n279()
+ fun_l17_n675
+end
+
+def fun_l16_n280()
+ fun_l17_n705
+end
+
+def fun_l16_n281()
+ fun_l17_n492
+end
+
+def fun_l16_n282()
+ fun_l17_n426
+end
+
+def fun_l16_n283()
+ fun_l17_n366
+end
+
+def fun_l16_n284()
+ fun_l17_n533
+end
+
+def fun_l16_n285()
+ fun_l17_n980
+end
+
+def fun_l16_n286()
+ fun_l17_n660
+end
+
+def fun_l16_n287()
+ fun_l17_n550
+end
+
+def fun_l16_n288()
+ fun_l17_n37
+end
+
+def fun_l16_n289()
+ fun_l17_n453
+end
+
+def fun_l16_n290()
+ fun_l17_n687
+end
+
+def fun_l16_n291()
+ fun_l17_n82
+end
+
+def fun_l16_n292()
+ fun_l17_n327
+end
+
+def fun_l16_n293()
+ fun_l17_n842
+end
+
+def fun_l16_n294()
+ fun_l17_n201
+end
+
+def fun_l16_n295()
+ fun_l17_n26
+end
+
+def fun_l16_n296()
+ fun_l17_n153
+end
+
+def fun_l16_n297()
+ fun_l17_n684
+end
+
+def fun_l16_n298()
+ fun_l17_n752
+end
+
+def fun_l16_n299()
+ fun_l17_n763
+end
+
+def fun_l16_n300()
+ fun_l17_n651
+end
+
+def fun_l16_n301()
+ fun_l17_n605
+end
+
+def fun_l16_n302()
+ fun_l17_n48
+end
+
+def fun_l16_n303()
+ fun_l17_n71
+end
+
+def fun_l16_n304()
+ fun_l17_n57
+end
+
+def fun_l16_n305()
+ fun_l17_n72
+end
+
+def fun_l16_n306()
+ fun_l17_n561
+end
+
+def fun_l16_n307()
+ fun_l17_n10
+end
+
+def fun_l16_n308()
+ fun_l17_n543
+end
+
+def fun_l16_n309()
+ fun_l17_n17
+end
+
+def fun_l16_n310()
+ fun_l17_n340
+end
+
+def fun_l16_n311()
+ fun_l17_n184
+end
+
+def fun_l16_n312()
+ fun_l17_n208
+end
+
+def fun_l16_n313()
+ fun_l17_n46
+end
+
+def fun_l16_n314()
+ fun_l17_n386
+end
+
+def fun_l16_n315()
+ fun_l17_n258
+end
+
+def fun_l16_n316()
+ fun_l17_n594
+end
+
+def fun_l16_n317()
+ fun_l17_n968
+end
+
+def fun_l16_n318()
+ fun_l17_n403
+end
+
+def fun_l16_n319()
+ fun_l17_n256
+end
+
+def fun_l16_n320()
+ fun_l17_n212
+end
+
+def fun_l16_n321()
+ fun_l17_n567
+end
+
+def fun_l16_n322()
+ fun_l17_n61
+end
+
+def fun_l16_n323()
+ fun_l17_n925
+end
+
+def fun_l16_n324()
+ fun_l17_n679
+end
+
+def fun_l16_n325()
+ fun_l17_n136
+end
+
+def fun_l16_n326()
+ fun_l17_n403
+end
+
+def fun_l16_n327()
+ fun_l17_n35
+end
+
+def fun_l16_n328()
+ fun_l17_n833
+end
+
+def fun_l16_n329()
+ fun_l17_n925
+end
+
+def fun_l16_n330()
+ fun_l17_n193
+end
+
+def fun_l16_n331()
+ fun_l17_n474
+end
+
+def fun_l16_n332()
+ fun_l17_n271
+end
+
+def fun_l16_n333()
+ fun_l17_n604
+end
+
+def fun_l16_n334()
+ fun_l17_n570
+end
+
+def fun_l16_n335()
+ fun_l17_n110
+end
+
+def fun_l16_n336()
+ fun_l17_n920
+end
+
+def fun_l16_n337()
+ fun_l17_n388
+end
+
+def fun_l16_n338()
+ fun_l17_n207
+end
+
+def fun_l16_n339()
+ fun_l17_n899
+end
+
+def fun_l16_n340()
+ fun_l17_n337
+end
+
+def fun_l16_n341()
+ fun_l17_n611
+end
+
+def fun_l16_n342()
+ fun_l17_n474
+end
+
+def fun_l16_n343()
+ fun_l17_n71
+end
+
+def fun_l16_n344()
+ fun_l17_n347
+end
+
+def fun_l16_n345()
+ fun_l17_n911
+end
+
+def fun_l16_n346()
+ fun_l17_n625
+end
+
+def fun_l16_n347()
+ fun_l17_n683
+end
+
+def fun_l16_n348()
+ fun_l17_n628
+end
+
+def fun_l16_n349()
+ fun_l17_n73
+end
+
+def fun_l16_n350()
+ fun_l17_n710
+end
+
+def fun_l16_n351()
+ fun_l17_n550
+end
+
+def fun_l16_n352()
+ fun_l17_n96
+end
+
+def fun_l16_n353()
+ fun_l17_n815
+end
+
+def fun_l16_n354()
+ fun_l17_n494
+end
+
+def fun_l16_n355()
+ fun_l17_n831
+end
+
+def fun_l16_n356()
+ fun_l17_n174
+end
+
+def fun_l16_n357()
+ fun_l17_n196
+end
+
+def fun_l16_n358()
+ fun_l17_n191
+end
+
+def fun_l16_n359()
+ fun_l17_n278
+end
+
+def fun_l16_n360()
+ fun_l17_n433
+end
+
+def fun_l16_n361()
+ fun_l17_n673
+end
+
+def fun_l16_n362()
+ fun_l17_n313
+end
+
+def fun_l16_n363()
+ fun_l17_n517
+end
+
+def fun_l16_n364()
+ fun_l17_n392
+end
+
+def fun_l16_n365()
+ fun_l17_n574
+end
+
+def fun_l16_n366()
+ fun_l17_n531
+end
+
+def fun_l16_n367()
+ fun_l17_n222
+end
+
+def fun_l16_n368()
+ fun_l17_n226
+end
+
+def fun_l16_n369()
+ fun_l17_n309
+end
+
+def fun_l16_n370()
+ fun_l17_n125
+end
+
+def fun_l16_n371()
+ fun_l17_n523
+end
+
+def fun_l16_n372()
+ fun_l17_n261
+end
+
+def fun_l16_n373()
+ fun_l17_n830
+end
+
+def fun_l16_n374()
+ fun_l17_n851
+end
+
+def fun_l16_n375()
+ fun_l17_n845
+end
+
+def fun_l16_n376()
+ fun_l17_n76
+end
+
+def fun_l16_n377()
+ fun_l17_n405
+end
+
+def fun_l16_n378()
+ fun_l17_n972
+end
+
+def fun_l16_n379()
+ fun_l17_n769
+end
+
+def fun_l16_n380()
+ fun_l17_n246
+end
+
+def fun_l16_n381()
+ fun_l17_n95
+end
+
+def fun_l16_n382()
+ fun_l17_n768
+end
+
+def fun_l16_n383()
+ fun_l17_n12
+end
+
+def fun_l16_n384()
+ fun_l17_n164
+end
+
+def fun_l16_n385()
+ fun_l17_n579
+end
+
+def fun_l16_n386()
+ fun_l17_n241
+end
+
+def fun_l16_n387()
+ fun_l17_n913
+end
+
+def fun_l16_n388()
+ fun_l17_n518
+end
+
+def fun_l16_n389()
+ fun_l17_n376
+end
+
+def fun_l16_n390()
+ fun_l17_n256
+end
+
+def fun_l16_n391()
+ fun_l17_n25
+end
+
+def fun_l16_n392()
+ fun_l17_n699
+end
+
+def fun_l16_n393()
+ fun_l17_n808
+end
+
+def fun_l16_n394()
+ fun_l17_n234
+end
+
+def fun_l16_n395()
+ fun_l17_n517
+end
+
+def fun_l16_n396()
+ fun_l17_n172
+end
+
+def fun_l16_n397()
+ fun_l17_n811
+end
+
+def fun_l16_n398()
+ fun_l17_n513
+end
+
+def fun_l16_n399()
+ fun_l17_n144
+end
+
+def fun_l16_n400()
+ fun_l17_n92
+end
+
+def fun_l16_n401()
+ fun_l17_n599
+end
+
+def fun_l16_n402()
+ fun_l17_n394
+end
+
+def fun_l16_n403()
+ fun_l17_n17
+end
+
+def fun_l16_n404()
+ fun_l17_n450
+end
+
+def fun_l16_n405()
+ fun_l17_n46
+end
+
+def fun_l16_n406()
+ fun_l17_n819
+end
+
+def fun_l16_n407()
+ fun_l17_n955
+end
+
+def fun_l16_n408()
+ fun_l17_n261
+end
+
+def fun_l16_n409()
+ fun_l17_n695
+end
+
+def fun_l16_n410()
+ fun_l17_n90
+end
+
+def fun_l16_n411()
+ fun_l17_n93
+end
+
+def fun_l16_n412()
+ fun_l17_n529
+end
+
+def fun_l16_n413()
+ fun_l17_n831
+end
+
+def fun_l16_n414()
+ fun_l17_n107
+end
+
+def fun_l16_n415()
+ fun_l17_n977
+end
+
+def fun_l16_n416()
+ fun_l17_n891
+end
+
+def fun_l16_n417()
+ fun_l17_n256
+end
+
+def fun_l16_n418()
+ fun_l17_n45
+end
+
+def fun_l16_n419()
+ fun_l17_n862
+end
+
+def fun_l16_n420()
+ fun_l17_n294
+end
+
+def fun_l16_n421()
+ fun_l17_n421
+end
+
+def fun_l16_n422()
+ fun_l17_n749
+end
+
+def fun_l16_n423()
+ fun_l17_n689
+end
+
+def fun_l16_n424()
+ fun_l17_n524
+end
+
+def fun_l16_n425()
+ fun_l17_n946
+end
+
+def fun_l16_n426()
+ fun_l17_n222
+end
+
+def fun_l16_n427()
+ fun_l17_n146
+end
+
+def fun_l16_n428()
+ fun_l17_n219
+end
+
+def fun_l16_n429()
+ fun_l17_n380
+end
+
+def fun_l16_n430()
+ fun_l17_n371
+end
+
+def fun_l16_n431()
+ fun_l17_n813
+end
+
+def fun_l16_n432()
+ fun_l17_n546
+end
+
+def fun_l16_n433()
+ fun_l17_n429
+end
+
+def fun_l16_n434()
+ fun_l17_n672
+end
+
+def fun_l16_n435()
+ fun_l17_n374
+end
+
+def fun_l16_n436()
+ fun_l17_n695
+end
+
+def fun_l16_n437()
+ fun_l17_n682
+end
+
+def fun_l16_n438()
+ fun_l17_n894
+end
+
+def fun_l16_n439()
+ fun_l17_n268
+end
+
+def fun_l16_n440()
+ fun_l17_n393
+end
+
+def fun_l16_n441()
+ fun_l17_n852
+end
+
+def fun_l16_n442()
+ fun_l17_n481
+end
+
+def fun_l16_n443()
+ fun_l17_n598
+end
+
+def fun_l16_n444()
+ fun_l17_n851
+end
+
+def fun_l16_n445()
+ fun_l17_n132
+end
+
+def fun_l16_n446()
+ fun_l17_n357
+end
+
+def fun_l16_n447()
+ fun_l17_n132
+end
+
+def fun_l16_n448()
+ fun_l17_n829
+end
+
+def fun_l16_n449()
+ fun_l17_n591
+end
+
+def fun_l16_n450()
+ fun_l17_n437
+end
+
+def fun_l16_n451()
+ fun_l17_n108
+end
+
+def fun_l16_n452()
+ fun_l17_n898
+end
+
+def fun_l16_n453()
+ fun_l17_n263
+end
+
+def fun_l16_n454()
+ fun_l17_n942
+end
+
+def fun_l16_n455()
+ fun_l17_n470
+end
+
+def fun_l16_n456()
+ fun_l17_n427
+end
+
+def fun_l16_n457()
+ fun_l17_n884
+end
+
+def fun_l16_n458()
+ fun_l17_n413
+end
+
+def fun_l16_n459()
+ fun_l17_n105
+end
+
+def fun_l16_n460()
+ fun_l17_n75
+end
+
+def fun_l16_n461()
+ fun_l17_n149
+end
+
+def fun_l16_n462()
+ fun_l17_n133
+end
+
+def fun_l16_n463()
+ fun_l17_n173
+end
+
+def fun_l16_n464()
+ fun_l17_n232
+end
+
+def fun_l16_n465()
+ fun_l17_n909
+end
+
+def fun_l16_n466()
+ fun_l17_n400
+end
+
+def fun_l16_n467()
+ fun_l17_n500
+end
+
+def fun_l16_n468()
+ fun_l17_n446
+end
+
+def fun_l16_n469()
+ fun_l17_n288
+end
+
+def fun_l16_n470()
+ fun_l17_n228
+end
+
+def fun_l16_n471()
+ fun_l17_n169
+end
+
+def fun_l16_n472()
+ fun_l17_n10
+end
+
+def fun_l16_n473()
+ fun_l17_n538
+end
+
+def fun_l16_n474()
+ fun_l17_n722
+end
+
+def fun_l16_n475()
+ fun_l17_n430
+end
+
+def fun_l16_n476()
+ fun_l17_n687
+end
+
+def fun_l16_n477()
+ fun_l17_n932
+end
+
+def fun_l16_n478()
+ fun_l17_n658
+end
+
+def fun_l16_n479()
+ fun_l17_n104
+end
+
+def fun_l16_n480()
+ fun_l17_n723
+end
+
+def fun_l16_n481()
+ fun_l17_n121
+end
+
+def fun_l16_n482()
+ fun_l17_n836
+end
+
+def fun_l16_n483()
+ fun_l17_n860
+end
+
+def fun_l16_n484()
+ fun_l17_n583
+end
+
+def fun_l16_n485()
+ fun_l17_n582
+end
+
+def fun_l16_n486()
+ fun_l17_n470
+end
+
+def fun_l16_n487()
+ fun_l17_n103
+end
+
+def fun_l16_n488()
+ fun_l17_n69
+end
+
+def fun_l16_n489()
+ fun_l17_n164
+end
+
+def fun_l16_n490()
+ fun_l17_n218
+end
+
+def fun_l16_n491()
+ fun_l17_n458
+end
+
+def fun_l16_n492()
+ fun_l17_n653
+end
+
+def fun_l16_n493()
+ fun_l17_n367
+end
+
+def fun_l16_n494()
+ fun_l17_n40
+end
+
+def fun_l16_n495()
+ fun_l17_n533
+end
+
+def fun_l16_n496()
+ fun_l17_n614
+end
+
+def fun_l16_n497()
+ fun_l17_n228
+end
+
+def fun_l16_n498()
+ fun_l17_n172
+end
+
+def fun_l16_n499()
+ fun_l17_n101
+end
+
+def fun_l16_n500()
+ fun_l17_n843
+end
+
+def fun_l16_n501()
+ fun_l17_n710
+end
+
+def fun_l16_n502()
+ fun_l17_n109
+end
+
+def fun_l16_n503()
+ fun_l17_n858
+end
+
+def fun_l16_n504()
+ fun_l17_n81
+end
+
+def fun_l16_n505()
+ fun_l17_n951
+end
+
+def fun_l16_n506()
+ fun_l17_n303
+end
+
+def fun_l16_n507()
+ fun_l17_n591
+end
+
+def fun_l16_n508()
+ fun_l17_n956
+end
+
+def fun_l16_n509()
+ fun_l17_n207
+end
+
+def fun_l16_n510()
+ fun_l17_n113
+end
+
+def fun_l16_n511()
+ fun_l17_n875
+end
+
+def fun_l16_n512()
+ fun_l17_n514
+end
+
+def fun_l16_n513()
+ fun_l17_n990
+end
+
+def fun_l16_n514()
+ fun_l17_n418
+end
+
+def fun_l16_n515()
+ fun_l17_n849
+end
+
+def fun_l16_n516()
+ fun_l17_n491
+end
+
+def fun_l16_n517()
+ fun_l17_n740
+end
+
+def fun_l16_n518()
+ fun_l17_n46
+end
+
+def fun_l16_n519()
+ fun_l17_n923
+end
+
+def fun_l16_n520()
+ fun_l17_n632
+end
+
+def fun_l16_n521()
+ fun_l17_n198
+end
+
+def fun_l16_n522()
+ fun_l17_n441
+end
+
+def fun_l16_n523()
+ fun_l17_n291
+end
+
+def fun_l16_n524()
+ fun_l17_n32
+end
+
+def fun_l16_n525()
+ fun_l17_n600
+end
+
+def fun_l16_n526()
+ fun_l17_n536
+end
+
+def fun_l16_n527()
+ fun_l17_n702
+end
+
+def fun_l16_n528()
+ fun_l17_n193
+end
+
+def fun_l16_n529()
+ fun_l17_n155
+end
+
+def fun_l16_n530()
+ fun_l17_n957
+end
+
+def fun_l16_n531()
+ fun_l17_n543
+end
+
+def fun_l16_n532()
+ fun_l17_n932
+end
+
+def fun_l16_n533()
+ fun_l17_n685
+end
+
+def fun_l16_n534()
+ fun_l17_n56
+end
+
+def fun_l16_n535()
+ fun_l17_n488
+end
+
+def fun_l16_n536()
+ fun_l17_n894
+end
+
+def fun_l16_n537()
+ fun_l17_n753
+end
+
+def fun_l16_n538()
+ fun_l17_n577
+end
+
+def fun_l16_n539()
+ fun_l17_n827
+end
+
+def fun_l16_n540()
+ fun_l17_n619
+end
+
+def fun_l16_n541()
+ fun_l17_n144
+end
+
+def fun_l16_n542()
+ fun_l17_n756
+end
+
+def fun_l16_n543()
+ fun_l17_n32
+end
+
+def fun_l16_n544()
+ fun_l17_n774
+end
+
+def fun_l16_n545()
+ fun_l17_n143
+end
+
+def fun_l16_n546()
+ fun_l17_n605
+end
+
+def fun_l16_n547()
+ fun_l17_n573
+end
+
+def fun_l16_n548()
+ fun_l17_n242
+end
+
+def fun_l16_n549()
+ fun_l17_n522
+end
+
+def fun_l16_n550()
+ fun_l17_n208
+end
+
+def fun_l16_n551()
+ fun_l17_n740
+end
+
+def fun_l16_n552()
+ fun_l17_n972
+end
+
+def fun_l16_n553()
+ fun_l17_n390
+end
+
+def fun_l16_n554()
+ fun_l17_n889
+end
+
+def fun_l16_n555()
+ fun_l17_n60
+end
+
+def fun_l16_n556()
+ fun_l17_n682
+end
+
+def fun_l16_n557()
+ fun_l17_n592
+end
+
+def fun_l16_n558()
+ fun_l17_n480
+end
+
+def fun_l16_n559()
+ fun_l17_n963
+end
+
+def fun_l16_n560()
+ fun_l17_n128
+end
+
+def fun_l16_n561()
+ fun_l17_n167
+end
+
+def fun_l16_n562()
+ fun_l17_n415
+end
+
+def fun_l16_n563()
+ fun_l17_n199
+end
+
+def fun_l16_n564()
+ fun_l17_n926
+end
+
+def fun_l16_n565()
+ fun_l17_n165
+end
+
+def fun_l16_n566()
+ fun_l17_n226
+end
+
+def fun_l16_n567()
+ fun_l17_n346
+end
+
+def fun_l16_n568()
+ fun_l17_n351
+end
+
+def fun_l16_n569()
+ fun_l17_n934
+end
+
+def fun_l16_n570()
+ fun_l17_n658
+end
+
+def fun_l16_n571()
+ fun_l17_n941
+end
+
+def fun_l16_n572()
+ fun_l17_n20
+end
+
+def fun_l16_n573()
+ fun_l17_n769
+end
+
+def fun_l16_n574()
+ fun_l17_n419
+end
+
+def fun_l16_n575()
+ fun_l17_n51
+end
+
+def fun_l16_n576()
+ fun_l17_n809
+end
+
+def fun_l16_n577()
+ fun_l17_n315
+end
+
+def fun_l16_n578()
+ fun_l17_n479
+end
+
+def fun_l16_n579()
+ fun_l17_n99
+end
+
+def fun_l16_n580()
+ fun_l17_n675
+end
+
+def fun_l16_n581()
+ fun_l17_n381
+end
+
+def fun_l16_n582()
+ fun_l17_n340
+end
+
+def fun_l16_n583()
+ fun_l17_n569
+end
+
+def fun_l16_n584()
+ fun_l17_n697
+end
+
+def fun_l16_n585()
+ fun_l17_n376
+end
+
+def fun_l16_n586()
+ fun_l17_n179
+end
+
+def fun_l16_n587()
+ fun_l17_n266
+end
+
+def fun_l16_n588()
+ fun_l17_n638
+end
+
+def fun_l16_n589()
+ fun_l17_n236
+end
+
+def fun_l16_n590()
+ fun_l17_n293
+end
+
+def fun_l16_n591()
+ fun_l17_n310
+end
+
+def fun_l16_n592()
+ fun_l17_n213
+end
+
+def fun_l16_n593()
+ fun_l17_n716
+end
+
+def fun_l16_n594()
+ fun_l17_n563
+end
+
+def fun_l16_n595()
+ fun_l17_n781
+end
+
+def fun_l16_n596()
+ fun_l17_n961
+end
+
+def fun_l16_n597()
+ fun_l17_n445
+end
+
+def fun_l16_n598()
+ fun_l17_n68
+end
+
+def fun_l16_n599()
+ fun_l17_n946
+end
+
+def fun_l16_n600()
+ fun_l17_n246
+end
+
+def fun_l16_n601()
+ fun_l17_n842
+end
+
+def fun_l16_n602()
+ fun_l17_n43
+end
+
+def fun_l16_n603()
+ fun_l17_n274
+end
+
+def fun_l16_n604()
+ fun_l17_n10
+end
+
+def fun_l16_n605()
+ fun_l17_n319
+end
+
+def fun_l16_n606()
+ fun_l17_n834
+end
+
+def fun_l16_n607()
+ fun_l17_n483
+end
+
+def fun_l16_n608()
+ fun_l17_n846
+end
+
+def fun_l16_n609()
+ fun_l17_n779
+end
+
+def fun_l16_n610()
+ fun_l17_n539
+end
+
+def fun_l16_n611()
+ fun_l17_n579
+end
+
+def fun_l16_n612()
+ fun_l17_n841
+end
+
+def fun_l16_n613()
+ fun_l17_n27
+end
+
+def fun_l16_n614()
+ fun_l17_n283
+end
+
+def fun_l16_n615()
+ fun_l17_n782
+end
+
+def fun_l16_n616()
+ fun_l17_n815
+end
+
+def fun_l16_n617()
+ fun_l17_n961
+end
+
+def fun_l16_n618()
+ fun_l17_n626
+end
+
+def fun_l16_n619()
+ fun_l17_n79
+end
+
+def fun_l16_n620()
+ fun_l17_n814
+end
+
+def fun_l16_n621()
+ fun_l17_n674
+end
+
+def fun_l16_n622()
+ fun_l17_n788
+end
+
+def fun_l16_n623()
+ fun_l17_n714
+end
+
+def fun_l16_n624()
+ fun_l17_n257
+end
+
+def fun_l16_n625()
+ fun_l17_n424
+end
+
+def fun_l16_n626()
+ fun_l17_n393
+end
+
+def fun_l16_n627()
+ fun_l17_n187
+end
+
+def fun_l16_n628()
+ fun_l17_n778
+end
+
+def fun_l16_n629()
+ fun_l17_n466
+end
+
+def fun_l16_n630()
+ fun_l17_n63
+end
+
+def fun_l16_n631()
+ fun_l17_n375
+end
+
+def fun_l16_n632()
+ fun_l17_n584
+end
+
+def fun_l16_n633()
+ fun_l17_n148
+end
+
+def fun_l16_n634()
+ fun_l17_n466
+end
+
+def fun_l16_n635()
+ fun_l17_n889
+end
+
+def fun_l16_n636()
+ fun_l17_n360
+end
+
+def fun_l16_n637()
+ fun_l17_n578
+end
+
+def fun_l16_n638()
+ fun_l17_n345
+end
+
+def fun_l16_n639()
+ fun_l17_n224
+end
+
+def fun_l16_n640()
+ fun_l17_n574
+end
+
+def fun_l16_n641()
+ fun_l17_n175
+end
+
+def fun_l16_n642()
+ fun_l17_n141
+end
+
+def fun_l16_n643()
+ fun_l17_n405
+end
+
+def fun_l16_n644()
+ fun_l17_n992
+end
+
+def fun_l16_n645()
+ fun_l17_n503
+end
+
+def fun_l16_n646()
+ fun_l17_n553
+end
+
+def fun_l16_n647()
+ fun_l17_n615
+end
+
+def fun_l16_n648()
+ fun_l17_n925
+end
+
+def fun_l16_n649()
+ fun_l17_n174
+end
+
+def fun_l16_n650()
+ fun_l17_n552
+end
+
+def fun_l16_n651()
+ fun_l17_n243
+end
+
+def fun_l16_n652()
+ fun_l17_n364
+end
+
+def fun_l16_n653()
+ fun_l17_n76
+end
+
+def fun_l16_n654()
+ fun_l17_n68
+end
+
+def fun_l16_n655()
+ fun_l17_n623
+end
+
+def fun_l16_n656()
+ fun_l17_n539
+end
+
+def fun_l16_n657()
+ fun_l17_n875
+end
+
+def fun_l16_n658()
+ fun_l17_n593
+end
+
+def fun_l16_n659()
+ fun_l17_n740
+end
+
+def fun_l16_n660()
+ fun_l17_n241
+end
+
+def fun_l16_n661()
+ fun_l17_n338
+end
+
+def fun_l16_n662()
+ fun_l17_n430
+end
+
+def fun_l16_n663()
+ fun_l17_n49
+end
+
+def fun_l16_n664()
+ fun_l17_n42
+end
+
+def fun_l16_n665()
+ fun_l17_n254
+end
+
+def fun_l16_n666()
+ fun_l17_n538
+end
+
+def fun_l16_n667()
+ fun_l17_n192
+end
+
+def fun_l16_n668()
+ fun_l17_n803
+end
+
+def fun_l16_n669()
+ fun_l17_n898
+end
+
+def fun_l16_n670()
+ fun_l17_n825
+end
+
+def fun_l16_n671()
+ fun_l17_n968
+end
+
+def fun_l16_n672()
+ fun_l17_n417
+end
+
+def fun_l16_n673()
+ fun_l17_n255
+end
+
+def fun_l16_n674()
+ fun_l17_n311
+end
+
+def fun_l16_n675()
+ fun_l17_n296
+end
+
+def fun_l16_n676()
+ fun_l17_n209
+end
+
+def fun_l16_n677()
+ fun_l17_n560
+end
+
+def fun_l16_n678()
+ fun_l17_n909
+end
+
+def fun_l16_n679()
+ fun_l17_n927
+end
+
+def fun_l16_n680()
+ fun_l17_n844
+end
+
+def fun_l16_n681()
+ fun_l17_n411
+end
+
+def fun_l16_n682()
+ fun_l17_n757
+end
+
+def fun_l16_n683()
+ fun_l17_n723
+end
+
+def fun_l16_n684()
+ fun_l17_n119
+end
+
+def fun_l16_n685()
+ fun_l17_n906
+end
+
+def fun_l16_n686()
+ fun_l17_n674
+end
+
+def fun_l16_n687()
+ fun_l17_n42
+end
+
+def fun_l16_n688()
+ fun_l17_n350
+end
+
+def fun_l16_n689()
+ fun_l17_n574
+end
+
+def fun_l16_n690()
+ fun_l17_n363
+end
+
+def fun_l16_n691()
+ fun_l17_n342
+end
+
+def fun_l16_n692()
+ fun_l17_n79
+end
+
+def fun_l16_n693()
+ fun_l17_n253
+end
+
+def fun_l16_n694()
+ fun_l17_n66
+end
+
+def fun_l16_n695()
+ fun_l17_n503
+end
+
+def fun_l16_n696()
+ fun_l17_n846
+end
+
+def fun_l16_n697()
+ fun_l17_n100
+end
+
+def fun_l16_n698()
+ fun_l17_n844
+end
+
+def fun_l16_n699()
+ fun_l17_n317
+end
+
+def fun_l16_n700()
+ fun_l17_n690
+end
+
+def fun_l16_n701()
+ fun_l17_n484
+end
+
+def fun_l16_n702()
+ fun_l17_n451
+end
+
+def fun_l16_n703()
+ fun_l17_n101
+end
+
+def fun_l16_n704()
+ fun_l17_n962
+end
+
+def fun_l16_n705()
+ fun_l17_n459
+end
+
+def fun_l16_n706()
+ fun_l17_n842
+end
+
+def fun_l16_n707()
+ fun_l17_n705
+end
+
+def fun_l16_n708()
+ fun_l17_n827
+end
+
+def fun_l16_n709()
+ fun_l17_n250
+end
+
+def fun_l16_n710()
+ fun_l17_n561
+end
+
+def fun_l16_n711()
+ fun_l17_n568
+end
+
+def fun_l16_n712()
+ fun_l17_n216
+end
+
+def fun_l16_n713()
+ fun_l17_n292
+end
+
+def fun_l16_n714()
+ fun_l17_n221
+end
+
+def fun_l16_n715()
+ fun_l17_n952
+end
+
+def fun_l16_n716()
+ fun_l17_n486
+end
+
+def fun_l16_n717()
+ fun_l17_n266
+end
+
+def fun_l16_n718()
+ fun_l17_n858
+end
+
+def fun_l16_n719()
+ fun_l17_n464
+end
+
+def fun_l16_n720()
+ fun_l17_n555
+end
+
+def fun_l16_n721()
+ fun_l17_n732
+end
+
+def fun_l16_n722()
+ fun_l17_n281
+end
+
+def fun_l16_n723()
+ fun_l17_n210
+end
+
+def fun_l16_n724()
+ fun_l17_n211
+end
+
+def fun_l16_n725()
+ fun_l17_n971
+end
+
+def fun_l16_n726()
+ fun_l17_n94
+end
+
+def fun_l16_n727()
+ fun_l17_n103
+end
+
+def fun_l16_n728()
+ fun_l17_n655
+end
+
+def fun_l16_n729()
+ fun_l17_n272
+end
+
+def fun_l16_n730()
+ fun_l17_n908
+end
+
+def fun_l16_n731()
+ fun_l17_n126
+end
+
+def fun_l16_n732()
+ fun_l17_n417
+end
+
+def fun_l16_n733()
+ fun_l17_n573
+end
+
+def fun_l16_n734()
+ fun_l17_n733
+end
+
+def fun_l16_n735()
+ fun_l17_n483
+end
+
+def fun_l16_n736()
+ fun_l17_n330
+end
+
+def fun_l16_n737()
+ fun_l17_n159
+end
+
+def fun_l16_n738()
+ fun_l17_n548
+end
+
+def fun_l16_n739()
+ fun_l17_n770
+end
+
+def fun_l16_n740()
+ fun_l17_n320
+end
+
+def fun_l16_n741()
+ fun_l17_n706
+end
+
+def fun_l16_n742()
+ fun_l17_n383
+end
+
+def fun_l16_n743()
+ fun_l17_n737
+end
+
+def fun_l16_n744()
+ fun_l17_n470
+end
+
+def fun_l16_n745()
+ fun_l17_n956
+end
+
+def fun_l16_n746()
+ fun_l17_n582
+end
+
+def fun_l16_n747()
+ fun_l17_n0
+end
+
+def fun_l16_n748()
+ fun_l17_n744
+end
+
+def fun_l16_n749()
+ fun_l17_n810
+end
+
+def fun_l16_n750()
+ fun_l17_n130
+end
+
+def fun_l16_n751()
+ fun_l17_n17
+end
+
+def fun_l16_n752()
+ fun_l17_n191
+end
+
+def fun_l16_n753()
+ fun_l17_n557
+end
+
+def fun_l16_n754()
+ fun_l17_n675
+end
+
+def fun_l16_n755()
+ fun_l17_n43
+end
+
+def fun_l16_n756()
+ fun_l17_n907
+end
+
+def fun_l16_n757()
+ fun_l17_n203
+end
+
+def fun_l16_n758()
+ fun_l17_n388
+end
+
+def fun_l16_n759()
+ fun_l17_n101
+end
+
+def fun_l16_n760()
+ fun_l17_n110
+end
+
+def fun_l16_n761()
+ fun_l17_n765
+end
+
+def fun_l16_n762()
+ fun_l17_n406
+end
+
+def fun_l16_n763()
+ fun_l17_n120
+end
+
+def fun_l16_n764()
+ fun_l17_n266
+end
+
+def fun_l16_n765()
+ fun_l17_n35
+end
+
+def fun_l16_n766()
+ fun_l17_n478
+end
+
+def fun_l16_n767()
+ fun_l17_n135
+end
+
+def fun_l16_n768()
+ fun_l17_n934
+end
+
+def fun_l16_n769()
+ fun_l17_n442
+end
+
+def fun_l16_n770()
+ fun_l17_n233
+end
+
+def fun_l16_n771()
+ fun_l17_n336
+end
+
+def fun_l16_n772()
+ fun_l17_n832
+end
+
+def fun_l16_n773()
+ fun_l17_n207
+end
+
+def fun_l16_n774()
+ fun_l17_n752
+end
+
+def fun_l16_n775()
+ fun_l17_n928
+end
+
+def fun_l16_n776()
+ fun_l17_n217
+end
+
+def fun_l16_n777()
+ fun_l17_n925
+end
+
+def fun_l16_n778()
+ fun_l17_n833
+end
+
+def fun_l16_n779()
+ fun_l17_n421
+end
+
+def fun_l16_n780()
+ fun_l17_n878
+end
+
+def fun_l16_n781()
+ fun_l17_n117
+end
+
+def fun_l16_n782()
+ fun_l17_n55
+end
+
+def fun_l16_n783()
+ fun_l17_n46
+end
+
+def fun_l16_n784()
+ fun_l17_n260
+end
+
+def fun_l16_n785()
+ fun_l17_n270
+end
+
+def fun_l16_n786()
+ fun_l17_n68
+end
+
+def fun_l16_n787()
+ fun_l17_n768
+end
+
+def fun_l16_n788()
+ fun_l17_n671
+end
+
+def fun_l16_n789()
+ fun_l17_n338
+end
+
+def fun_l16_n790()
+ fun_l17_n442
+end
+
+def fun_l16_n791()
+ fun_l17_n677
+end
+
+def fun_l16_n792()
+ fun_l17_n141
+end
+
+def fun_l16_n793()
+ fun_l17_n427
+end
+
+def fun_l16_n794()
+ fun_l17_n493
+end
+
+def fun_l16_n795()
+ fun_l17_n461
+end
+
+def fun_l16_n796()
+ fun_l17_n615
+end
+
+def fun_l16_n797()
+ fun_l17_n895
+end
+
+def fun_l16_n798()
+ fun_l17_n883
+end
+
+def fun_l16_n799()
+ fun_l17_n992
+end
+
+def fun_l16_n800()
+ fun_l17_n754
+end
+
+def fun_l16_n801()
+ fun_l17_n668
+end
+
+def fun_l16_n802()
+ fun_l17_n362
+end
+
+def fun_l16_n803()
+ fun_l17_n179
+end
+
+def fun_l16_n804()
+ fun_l17_n35
+end
+
+def fun_l16_n805()
+ fun_l17_n999
+end
+
+def fun_l16_n806()
+ fun_l17_n211
+end
+
+def fun_l16_n807()
+ fun_l17_n859
+end
+
+def fun_l16_n808()
+ fun_l17_n126
+end
+
+def fun_l16_n809()
+ fun_l17_n935
+end
+
+def fun_l16_n810()
+ fun_l17_n682
+end
+
+def fun_l16_n811()
+ fun_l17_n788
+end
+
+def fun_l16_n812()
+ fun_l17_n939
+end
+
+def fun_l16_n813()
+ fun_l17_n687
+end
+
+def fun_l16_n814()
+ fun_l17_n274
+end
+
+def fun_l16_n815()
+ fun_l17_n699
+end
+
+def fun_l16_n816()
+ fun_l17_n129
+end
+
+def fun_l16_n817()
+ fun_l17_n201
+end
+
+def fun_l16_n818()
+ fun_l17_n448
+end
+
+def fun_l16_n819()
+ fun_l17_n482
+end
+
+def fun_l16_n820()
+ fun_l17_n199
+end
+
+def fun_l16_n821()
+ fun_l17_n283
+end
+
+def fun_l16_n822()
+ fun_l17_n413
+end
+
+def fun_l16_n823()
+ fun_l17_n373
+end
+
+def fun_l16_n824()
+ fun_l17_n368
+end
+
+def fun_l16_n825()
+ fun_l17_n892
+end
+
+def fun_l16_n826()
+ fun_l17_n40
+end
+
+def fun_l16_n827()
+ fun_l17_n258
+end
+
+def fun_l16_n828()
+ fun_l17_n218
+end
+
+def fun_l16_n829()
+ fun_l17_n647
+end
+
+def fun_l16_n830()
+ fun_l17_n429
+end
+
+def fun_l16_n831()
+ fun_l17_n524
+end
+
+def fun_l16_n832()
+ fun_l17_n424
+end
+
+def fun_l16_n833()
+ fun_l17_n755
+end
+
+def fun_l16_n834()
+ fun_l17_n82
+end
+
+def fun_l16_n835()
+ fun_l17_n109
+end
+
+def fun_l16_n836()
+ fun_l17_n399
+end
+
+def fun_l16_n837()
+ fun_l17_n829
+end
+
+def fun_l16_n838()
+ fun_l17_n26
+end
+
+def fun_l16_n839()
+ fun_l17_n537
+end
+
+def fun_l16_n840()
+ fun_l17_n969
+end
+
+def fun_l16_n841()
+ fun_l17_n248
+end
+
+def fun_l16_n842()
+ fun_l17_n178
+end
+
+def fun_l16_n843()
+ fun_l17_n816
+end
+
+def fun_l16_n844()
+ fun_l17_n925
+end
+
+def fun_l16_n845()
+ fun_l17_n388
+end
+
+def fun_l16_n846()
+ fun_l17_n923
+end
+
+def fun_l16_n847()
+ fun_l17_n386
+end
+
+def fun_l16_n848()
+ fun_l17_n940
+end
+
+def fun_l16_n849()
+ fun_l17_n831
+end
+
+def fun_l16_n850()
+ fun_l17_n771
+end
+
+def fun_l16_n851()
+ fun_l17_n45
+end
+
+def fun_l16_n852()
+ fun_l17_n18
+end
+
+def fun_l16_n853()
+ fun_l17_n435
+end
+
+def fun_l16_n854()
+ fun_l17_n397
+end
+
+def fun_l16_n855()
+ fun_l17_n656
+end
+
+def fun_l16_n856()
+ fun_l17_n72
+end
+
+def fun_l16_n857()
+ fun_l17_n531
+end
+
+def fun_l16_n858()
+ fun_l17_n790
+end
+
+def fun_l16_n859()
+ fun_l17_n25
+end
+
+def fun_l16_n860()
+ fun_l17_n926
+end
+
+def fun_l16_n861()
+ fun_l17_n474
+end
+
+def fun_l16_n862()
+ fun_l17_n888
+end
+
+def fun_l16_n863()
+ fun_l17_n110
+end
+
+def fun_l16_n864()
+ fun_l17_n561
+end
+
+def fun_l16_n865()
+ fun_l17_n59
+end
+
+def fun_l16_n866()
+ fun_l17_n611
+end
+
+def fun_l16_n867()
+ fun_l17_n436
+end
+
+def fun_l16_n868()
+ fun_l17_n851
+end
+
+def fun_l16_n869()
+ fun_l17_n714
+end
+
+def fun_l16_n870()
+ fun_l17_n423
+end
+
+def fun_l16_n871()
+ fun_l17_n884
+end
+
+def fun_l16_n872()
+ fun_l17_n230
+end
+
+def fun_l16_n873()
+ fun_l17_n988
+end
+
+def fun_l16_n874()
+ fun_l17_n763
+end
+
+def fun_l16_n875()
+ fun_l17_n929
+end
+
+def fun_l16_n876()
+ fun_l17_n521
+end
+
+def fun_l16_n877()
+ fun_l17_n262
+end
+
+def fun_l16_n878()
+ fun_l17_n774
+end
+
+def fun_l16_n879()
+ fun_l17_n358
+end
+
+def fun_l16_n880()
+ fun_l17_n861
+end
+
+def fun_l16_n881()
+ fun_l17_n984
+end
+
+def fun_l16_n882()
+ fun_l17_n272
+end
+
+def fun_l16_n883()
+ fun_l17_n293
+end
+
+def fun_l16_n884()
+ fun_l17_n525
+end
+
+def fun_l16_n885()
+ fun_l17_n226
+end
+
+def fun_l16_n886()
+ fun_l17_n941
+end
+
+def fun_l16_n887()
+ fun_l17_n671
+end
+
+def fun_l16_n888()
+ fun_l17_n960
+end
+
+def fun_l16_n889()
+ fun_l17_n218
+end
+
+def fun_l16_n890()
+ fun_l17_n475
+end
+
+def fun_l16_n891()
+ fun_l17_n300
+end
+
+def fun_l16_n892()
+ fun_l17_n908
+end
+
+def fun_l16_n893()
+ fun_l17_n739
+end
+
+def fun_l16_n894()
+ fun_l17_n878
+end
+
+def fun_l16_n895()
+ fun_l17_n906
+end
+
+def fun_l16_n896()
+ fun_l17_n944
+end
+
+def fun_l16_n897()
+ fun_l17_n302
+end
+
+def fun_l16_n898()
+ fun_l17_n486
+end
+
+def fun_l16_n899()
+ fun_l17_n135
+end
+
+def fun_l16_n900()
+ fun_l17_n470
+end
+
+def fun_l16_n901()
+ fun_l17_n895
+end
+
+def fun_l16_n902()
+ fun_l17_n333
+end
+
+def fun_l16_n903()
+ fun_l17_n310
+end
+
+def fun_l16_n904()
+ fun_l17_n229
+end
+
+def fun_l16_n905()
+ fun_l17_n315
+end
+
+def fun_l16_n906()
+ fun_l17_n333
+end
+
+def fun_l16_n907()
+ fun_l17_n563
+end
+
+def fun_l16_n908()
+ fun_l17_n558
+end
+
+def fun_l16_n909()
+ fun_l17_n580
+end
+
+def fun_l16_n910()
+ fun_l17_n916
+end
+
+def fun_l16_n911()
+ fun_l17_n378
+end
+
+def fun_l16_n912()
+ fun_l17_n882
+end
+
+def fun_l16_n913()
+ fun_l17_n28
+end
+
+def fun_l16_n914()
+ fun_l17_n767
+end
+
+def fun_l16_n915()
+ fun_l17_n105
+end
+
+def fun_l16_n916()
+ fun_l17_n463
+end
+
+def fun_l16_n917()
+ fun_l17_n92
+end
+
+def fun_l16_n918()
+ fun_l17_n722
+end
+
+def fun_l16_n919()
+ fun_l17_n403
+end
+
+def fun_l16_n920()
+ fun_l17_n771
+end
+
+def fun_l16_n921()
+ fun_l17_n818
+end
+
+def fun_l16_n922()
+ fun_l17_n214
+end
+
+def fun_l16_n923()
+ fun_l17_n167
+end
+
+def fun_l16_n924()
+ fun_l17_n189
+end
+
+def fun_l16_n925()
+ fun_l17_n401
+end
+
+def fun_l16_n926()
+ fun_l17_n377
+end
+
+def fun_l16_n927()
+ fun_l17_n980
+end
+
+def fun_l16_n928()
+ fun_l17_n476
+end
+
+def fun_l16_n929()
+ fun_l17_n321
+end
+
+def fun_l16_n930()
+ fun_l17_n485
+end
+
+def fun_l16_n931()
+ fun_l17_n902
+end
+
+def fun_l16_n932()
+ fun_l17_n269
+end
+
+def fun_l16_n933()
+ fun_l17_n806
+end
+
+def fun_l16_n934()
+ fun_l17_n952
+end
+
+def fun_l16_n935()
+ fun_l17_n401
+end
+
+def fun_l16_n936()
+ fun_l17_n416
+end
+
+def fun_l16_n937()
+ fun_l17_n739
+end
+
+def fun_l16_n938()
+ fun_l17_n47
+end
+
+def fun_l16_n939()
+ fun_l17_n556
+end
+
+def fun_l16_n940()
+ fun_l17_n426
+end
+
+def fun_l16_n941()
+ fun_l17_n474
+end
+
+def fun_l16_n942()
+ fun_l17_n393
+end
+
+def fun_l16_n943()
+ fun_l17_n492
+end
+
+def fun_l16_n944()
+ fun_l17_n528
+end
+
+def fun_l16_n945()
+ fun_l17_n66
+end
+
+def fun_l16_n946()
+ fun_l17_n587
+end
+
+def fun_l16_n947()
+ fun_l17_n116
+end
+
+def fun_l16_n948()
+ fun_l17_n205
+end
+
+def fun_l16_n949()
+ fun_l17_n958
+end
+
+def fun_l16_n950()
+ fun_l17_n264
+end
+
+def fun_l16_n951()
+ fun_l17_n78
+end
+
+def fun_l16_n952()
+ fun_l17_n990
+end
+
+def fun_l16_n953()
+ fun_l17_n154
+end
+
+def fun_l16_n954()
+ fun_l17_n213
+end
+
+def fun_l16_n955()
+ fun_l17_n979
+end
+
+def fun_l16_n956()
+ fun_l17_n632
+end
+
+def fun_l16_n957()
+ fun_l17_n292
+end
+
+def fun_l16_n958()
+ fun_l17_n719
+end
+
+def fun_l16_n959()
+ fun_l17_n320
+end
+
+def fun_l16_n960()
+ fun_l17_n448
+end
+
+def fun_l16_n961()
+ fun_l17_n532
+end
+
+def fun_l16_n962()
+ fun_l17_n662
+end
+
+def fun_l16_n963()
+ fun_l17_n423
+end
+
+def fun_l16_n964()
+ fun_l17_n193
+end
+
+def fun_l16_n965()
+ fun_l17_n475
+end
+
+def fun_l16_n966()
+ fun_l17_n168
+end
+
+def fun_l16_n967()
+ fun_l17_n92
+end
+
+def fun_l16_n968()
+ fun_l17_n925
+end
+
+def fun_l16_n969()
+ fun_l17_n138
+end
+
+def fun_l16_n970()
+ fun_l17_n673
+end
+
+def fun_l16_n971()
+ fun_l17_n697
+end
+
+def fun_l16_n972()
+ fun_l17_n438
+end
+
+def fun_l16_n973()
+ fun_l17_n114
+end
+
+def fun_l16_n974()
+ fun_l17_n40
+end
+
+def fun_l16_n975()
+ fun_l17_n344
+end
+
+def fun_l16_n976()
+ fun_l17_n568
+end
+
+def fun_l16_n977()
+ fun_l17_n350
+end
+
+def fun_l16_n978()
+ fun_l17_n873
+end
+
+def fun_l16_n979()
+ fun_l17_n719
+end
+
+def fun_l16_n980()
+ fun_l17_n631
+end
+
+def fun_l16_n981()
+ fun_l17_n848
+end
+
+def fun_l16_n982()
+ fun_l17_n912
+end
+
+def fun_l16_n983()
+ fun_l17_n872
+end
+
+def fun_l16_n984()
+ fun_l17_n290
+end
+
+def fun_l16_n985()
+ fun_l17_n416
+end
+
+def fun_l16_n986()
+ fun_l17_n552
+end
+
+def fun_l16_n987()
+ fun_l17_n458
+end
+
+def fun_l16_n988()
+ fun_l17_n808
+end
+
+def fun_l16_n989()
+ fun_l17_n953
+end
+
+def fun_l16_n990()
+ fun_l17_n136
+end
+
+def fun_l16_n991()
+ fun_l17_n798
+end
+
+def fun_l16_n992()
+ fun_l17_n419
+end
+
+def fun_l16_n993()
+ fun_l17_n293
+end
+
+def fun_l16_n994()
+ fun_l17_n663
+end
+
+def fun_l16_n995()
+ fun_l17_n533
+end
+
+def fun_l16_n996()
+ fun_l17_n625
+end
+
+def fun_l16_n997()
+ fun_l17_n215
+end
+
+def fun_l16_n998()
+ fun_l17_n954
+end
+
+def fun_l16_n999()
+ fun_l17_n797
+end
+
+def fun_l17_n0()
+ fun_l18_n287
+end
+
+def fun_l17_n1()
+ fun_l18_n242
+end
+
+def fun_l17_n2()
+ fun_l18_n595
+end
+
+def fun_l17_n3()
+ fun_l18_n801
+end
+
+def fun_l17_n4()
+ fun_l18_n367
+end
+
+def fun_l17_n5()
+ fun_l18_n21
+end
+
+def fun_l17_n6()
+ fun_l18_n439
+end
+
+def fun_l17_n7()
+ fun_l18_n96
+end
+
+def fun_l17_n8()
+ fun_l18_n500
+end
+
+def fun_l17_n9()
+ fun_l18_n332
+end
+
+def fun_l17_n10()
+ fun_l18_n374
+end
+
+def fun_l17_n11()
+ fun_l18_n338
+end
+
+def fun_l17_n12()
+ fun_l18_n737
+end
+
+def fun_l17_n13()
+ fun_l18_n437
+end
+
+def fun_l17_n14()
+ fun_l18_n442
+end
+
+def fun_l17_n15()
+ fun_l18_n309
+end
+
+def fun_l17_n16()
+ fun_l18_n173
+end
+
+def fun_l17_n17()
+ fun_l18_n615
+end
+
+def fun_l17_n18()
+ fun_l18_n881
+end
+
+def fun_l17_n19()
+ fun_l18_n629
+end
+
+def fun_l17_n20()
+ fun_l18_n304
+end
+
+def fun_l17_n21()
+ fun_l18_n788
+end
+
+def fun_l17_n22()
+ fun_l18_n425
+end
+
+def fun_l17_n23()
+ fun_l18_n376
+end
+
+def fun_l17_n24()
+ fun_l18_n353
+end
+
+def fun_l17_n25()
+ fun_l18_n273
+end
+
+def fun_l17_n26()
+ fun_l18_n337
+end
+
+def fun_l17_n27()
+ fun_l18_n588
+end
+
+def fun_l17_n28()
+ fun_l18_n64
+end
+
+def fun_l17_n29()
+ fun_l18_n651
+end
+
+def fun_l17_n30()
+ fun_l18_n91
+end
+
+def fun_l17_n31()
+ fun_l18_n392
+end
+
+def fun_l17_n32()
+ fun_l18_n65
+end
+
+def fun_l17_n33()
+ fun_l18_n166
+end
+
+def fun_l17_n34()
+ fun_l18_n917
+end
+
+def fun_l17_n35()
+ fun_l18_n217
+end
+
+def fun_l17_n36()
+ fun_l18_n416
+end
+
+def fun_l17_n37()
+ fun_l18_n977
+end
+
+def fun_l17_n38()
+ fun_l18_n76
+end
+
+def fun_l17_n39()
+ fun_l18_n322
+end
+
+def fun_l17_n40()
+ fun_l18_n253
+end
+
+def fun_l17_n41()
+ fun_l18_n192
+end
+
+def fun_l17_n42()
+ fun_l18_n883
+end
+
+def fun_l17_n43()
+ fun_l18_n132
+end
+
+def fun_l17_n44()
+ fun_l18_n480
+end
+
+def fun_l17_n45()
+ fun_l18_n36
+end
+
+def fun_l17_n46()
+ fun_l18_n142
+end
+
+def fun_l17_n47()
+ fun_l18_n172
+end
+
+def fun_l17_n48()
+ fun_l18_n339
+end
+
+def fun_l17_n49()
+ fun_l18_n664
+end
+
+def fun_l17_n50()
+ fun_l18_n482
+end
+
+def fun_l17_n51()
+ fun_l18_n809
+end
+
+def fun_l17_n52()
+ fun_l18_n525
+end
+
+def fun_l17_n53()
+ fun_l18_n50
+end
+
+def fun_l17_n54()
+ fun_l18_n977
+end
+
+def fun_l17_n55()
+ fun_l18_n730
+end
+
+def fun_l17_n56()
+ fun_l18_n565
+end
+
+def fun_l17_n57()
+ fun_l18_n997
+end
+
+def fun_l17_n58()
+ fun_l18_n811
+end
+
+def fun_l17_n59()
+ fun_l18_n898
+end
+
+def fun_l17_n60()
+ fun_l18_n627
+end
+
+def fun_l17_n61()
+ fun_l18_n539
+end
+
+def fun_l17_n62()
+ fun_l18_n877
+end
+
+def fun_l17_n63()
+ fun_l18_n428
+end
+
+def fun_l17_n64()
+ fun_l18_n779
+end
+
+def fun_l17_n65()
+ fun_l18_n14
+end
+
+def fun_l17_n66()
+ fun_l18_n202
+end
+
+def fun_l17_n67()
+ fun_l18_n23
+end
+
+def fun_l17_n68()
+ fun_l18_n861
+end
+
+def fun_l17_n69()
+ fun_l18_n356
+end
+
+def fun_l17_n70()
+ fun_l18_n997
+end
+
+def fun_l17_n71()
+ fun_l18_n130
+end
+
+def fun_l17_n72()
+ fun_l18_n462
+end
+
+def fun_l17_n73()
+ fun_l18_n590
+end
+
+def fun_l17_n74()
+ fun_l18_n544
+end
+
+def fun_l17_n75()
+ fun_l18_n571
+end
+
+def fun_l17_n76()
+ fun_l18_n336
+end
+
+def fun_l17_n77()
+ fun_l18_n154
+end
+
+def fun_l17_n78()
+ fun_l18_n18
+end
+
+def fun_l17_n79()
+ fun_l18_n911
+end
+
+def fun_l17_n80()
+ fun_l18_n980
+end
+
+def fun_l17_n81()
+ fun_l18_n156
+end
+
+def fun_l17_n82()
+ fun_l18_n487
+end
+
+def fun_l17_n83()
+ fun_l18_n292
+end
+
+def fun_l17_n84()
+ fun_l18_n709
+end
+
+def fun_l17_n85()
+ fun_l18_n557
+end
+
+def fun_l17_n86()
+ fun_l18_n910
+end
+
+def fun_l17_n87()
+ fun_l18_n121
+end
+
+def fun_l17_n88()
+ fun_l18_n706
+end
+
+def fun_l17_n89()
+ fun_l18_n949
+end
+
+def fun_l17_n90()
+ fun_l18_n529
+end
+
+def fun_l17_n91()
+ fun_l18_n778
+end
+
+def fun_l17_n92()
+ fun_l18_n682
+end
+
+def fun_l17_n93()
+ fun_l18_n743
+end
+
+def fun_l17_n94()
+ fun_l18_n714
+end
+
+def fun_l17_n95()
+ fun_l18_n749
+end
+
+def fun_l17_n96()
+ fun_l18_n453
+end
+
+def fun_l17_n97()
+ fun_l18_n248
+end
+
+def fun_l17_n98()
+ fun_l18_n315
+end
+
+def fun_l17_n99()
+ fun_l18_n534
+end
+
+def fun_l17_n100()
+ fun_l18_n391
+end
+
+def fun_l17_n101()
+ fun_l18_n515
+end
+
+def fun_l17_n102()
+ fun_l18_n495
+end
+
+def fun_l17_n103()
+ fun_l18_n776
+end
+
+def fun_l17_n104()
+ fun_l18_n957
+end
+
+def fun_l17_n105()
+ fun_l18_n982
+end
+
+def fun_l17_n106()
+ fun_l18_n401
+end
+
+def fun_l17_n107()
+ fun_l18_n230
+end
+
+def fun_l17_n108()
+ fun_l18_n13
+end
+
+def fun_l17_n109()
+ fun_l18_n318
+end
+
+def fun_l17_n110()
+ fun_l18_n275
+end
+
+def fun_l17_n111()
+ fun_l18_n155
+end
+
+def fun_l17_n112()
+ fun_l18_n86
+end
+
+def fun_l17_n113()
+ fun_l18_n573
+end
+
+def fun_l17_n114()
+ fun_l18_n124
+end
+
+def fun_l17_n115()
+ fun_l18_n694
+end
+
+def fun_l17_n116()
+ fun_l18_n929
+end
+
+def fun_l17_n117()
+ fun_l18_n177
+end
+
+def fun_l17_n118()
+ fun_l18_n510
+end
+
+def fun_l17_n119()
+ fun_l18_n143
+end
+
+def fun_l17_n120()
+ fun_l18_n358
+end
+
+def fun_l17_n121()
+ fun_l18_n739
+end
+
+def fun_l17_n122()
+ fun_l18_n463
+end
+
+def fun_l17_n123()
+ fun_l18_n343
+end
+
+def fun_l17_n124()
+ fun_l18_n714
+end
+
+def fun_l17_n125()
+ fun_l18_n53
+end
+
+def fun_l17_n126()
+ fun_l18_n375
+end
+
+def fun_l17_n127()
+ fun_l18_n870
+end
+
+def fun_l17_n128()
+ fun_l18_n555
+end
+
+def fun_l17_n129()
+ fun_l18_n773
+end
+
+def fun_l17_n130()
+ fun_l18_n309
+end
+
+def fun_l17_n131()
+ fun_l18_n50
+end
+
+def fun_l17_n132()
+ fun_l18_n408
+end
+
+def fun_l17_n133()
+ fun_l18_n339
+end
+
+def fun_l17_n134()
+ fun_l18_n952
+end
+
+def fun_l17_n135()
+ fun_l18_n599
+end
+
+def fun_l17_n136()
+ fun_l18_n280
+end
+
+def fun_l17_n137()
+ fun_l18_n922
+end
+
+def fun_l17_n138()
+ fun_l18_n132
+end
+
+def fun_l17_n139()
+ fun_l18_n224
+end
+
+def fun_l17_n140()
+ fun_l18_n841
+end
+
+def fun_l17_n141()
+ fun_l18_n84
+end
+
+def fun_l17_n142()
+ fun_l18_n697
+end
+
+def fun_l17_n143()
+ fun_l18_n60
+end
+
+def fun_l17_n144()
+ fun_l18_n479
+end
+
+def fun_l17_n145()
+ fun_l18_n671
+end
+
+def fun_l17_n146()
+ fun_l18_n422
+end
+
+def fun_l17_n147()
+ fun_l18_n255
+end
+
+def fun_l17_n148()
+ fun_l18_n615
+end
+
+def fun_l17_n149()
+ fun_l18_n878
+end
+
+def fun_l17_n150()
+ fun_l18_n402
+end
+
+def fun_l17_n151()
+ fun_l18_n134
+end
+
+def fun_l17_n152()
+ fun_l18_n493
+end
+
+def fun_l17_n153()
+ fun_l18_n347
+end
+
+def fun_l17_n154()
+ fun_l18_n679
+end
+
+def fun_l17_n155()
+ fun_l18_n477
+end
+
+def fun_l17_n156()
+ fun_l18_n56
+end
+
+def fun_l17_n157()
+ fun_l18_n43
+end
+
+def fun_l17_n158()
+ fun_l18_n928
+end
+
+def fun_l17_n159()
+ fun_l18_n190
+end
+
+def fun_l17_n160()
+ fun_l18_n402
+end
+
+def fun_l17_n161()
+ fun_l18_n894
+end
+
+def fun_l17_n162()
+ fun_l18_n869
+end
+
+def fun_l17_n163()
+ fun_l18_n36
+end
+
+def fun_l17_n164()
+ fun_l18_n635
+end
+
+def fun_l17_n165()
+ fun_l18_n414
+end
+
+def fun_l17_n166()
+ fun_l18_n744
+end
+
+def fun_l17_n167()
+ fun_l18_n87
+end
+
+def fun_l17_n168()
+ fun_l18_n531
+end
+
+def fun_l17_n169()
+ fun_l18_n923
+end
+
+def fun_l17_n170()
+ fun_l18_n815
+end
+
+def fun_l17_n171()
+ fun_l18_n27
+end
+
+def fun_l17_n172()
+ fun_l18_n194
+end
+
+def fun_l17_n173()
+ fun_l18_n456
+end
+
+def fun_l17_n174()
+ fun_l18_n275
+end
+
+def fun_l17_n175()
+ fun_l18_n48
+end
+
+def fun_l17_n176()
+ fun_l18_n230
+end
+
+def fun_l17_n177()
+ fun_l18_n806
+end
+
+def fun_l17_n178()
+ fun_l18_n851
+end
+
+def fun_l17_n179()
+ fun_l18_n76
+end
+
+def fun_l17_n180()
+ fun_l18_n925
+end
+
+def fun_l17_n181()
+ fun_l18_n680
+end
+
+def fun_l17_n182()
+ fun_l18_n547
+end
+
+def fun_l17_n183()
+ fun_l18_n439
+end
+
+def fun_l17_n184()
+ fun_l18_n642
+end
+
+def fun_l17_n185()
+ fun_l18_n249
+end
+
+def fun_l17_n186()
+ fun_l18_n92
+end
+
+def fun_l17_n187()
+ fun_l18_n727
+end
+
+def fun_l17_n188()
+ fun_l18_n358
+end
+
+def fun_l17_n189()
+ fun_l18_n874
+end
+
+def fun_l17_n190()
+ fun_l18_n357
+end
+
+def fun_l17_n191()
+ fun_l18_n773
+end
+
+def fun_l17_n192()
+ fun_l18_n487
+end
+
+def fun_l17_n193()
+ fun_l18_n985
+end
+
+def fun_l17_n194()
+ fun_l18_n771
+end
+
+def fun_l17_n195()
+ fun_l18_n918
+end
+
+def fun_l17_n196()
+ fun_l18_n768
+end
+
+def fun_l17_n197()
+ fun_l18_n275
+end
+
+def fun_l17_n198()
+ fun_l18_n72
+end
+
+def fun_l17_n199()
+ fun_l18_n288
+end
+
+def fun_l17_n200()
+ fun_l18_n187
+end
+
+def fun_l17_n201()
+ fun_l18_n905
+end
+
+def fun_l17_n202()
+ fun_l18_n61
+end
+
+def fun_l17_n203()
+ fun_l18_n845
+end
+
+def fun_l17_n204()
+ fun_l18_n390
+end
+
+def fun_l17_n205()
+ fun_l18_n501
+end
+
+def fun_l17_n206()
+ fun_l18_n820
+end
+
+def fun_l17_n207()
+ fun_l18_n889
+end
+
+def fun_l17_n208()
+ fun_l18_n746
+end
+
+def fun_l17_n209()
+ fun_l18_n640
+end
+
+def fun_l17_n210()
+ fun_l18_n974
+end
+
+def fun_l17_n211()
+ fun_l18_n128
+end
+
+def fun_l17_n212()
+ fun_l18_n227
+end
+
+def fun_l17_n213()
+ fun_l18_n646
+end
+
+def fun_l17_n214()
+ fun_l18_n55
+end
+
+def fun_l17_n215()
+ fun_l18_n989
+end
+
+def fun_l17_n216()
+ fun_l18_n417
+end
+
+def fun_l17_n217()
+ fun_l18_n85
+end
+
+def fun_l17_n218()
+ fun_l18_n477
+end
+
+def fun_l17_n219()
+ fun_l18_n442
+end
+
+def fun_l17_n220()
+ fun_l18_n804
+end
+
+def fun_l17_n221()
+ fun_l18_n135
+end
+
+def fun_l17_n222()
+ fun_l18_n347
+end
+
+def fun_l17_n223()
+ fun_l18_n34
+end
+
+def fun_l17_n224()
+ fun_l18_n534
+end
+
+def fun_l17_n225()
+ fun_l18_n789
+end
+
+def fun_l17_n226()
+ fun_l18_n938
+end
+
+def fun_l17_n227()
+ fun_l18_n777
+end
+
+def fun_l17_n228()
+ fun_l18_n247
+end
+
+def fun_l17_n229()
+ fun_l18_n935
+end
+
+def fun_l17_n230()
+ fun_l18_n406
+end
+
+def fun_l17_n231()
+ fun_l18_n0
+end
+
+def fun_l17_n232()
+ fun_l18_n530
+end
+
+def fun_l17_n233()
+ fun_l18_n994
+end
+
+def fun_l17_n234()
+ fun_l18_n818
+end
+
+def fun_l17_n235()
+ fun_l18_n941
+end
+
+def fun_l17_n236()
+ fun_l18_n687
+end
+
+def fun_l17_n237()
+ fun_l18_n372
+end
+
+def fun_l17_n238()
+ fun_l18_n344
+end
+
+def fun_l17_n239()
+ fun_l18_n336
+end
+
+def fun_l17_n240()
+ fun_l18_n870
+end
+
+def fun_l17_n241()
+ fun_l18_n694
+end
+
+def fun_l17_n242()
+ fun_l18_n233
+end
+
+def fun_l17_n243()
+ fun_l18_n301
+end
+
+def fun_l17_n244()
+ fun_l18_n425
+end
+
+def fun_l17_n245()
+ fun_l18_n334
+end
+
+def fun_l17_n246()
+ fun_l18_n848
+end
+
+def fun_l17_n247()
+ fun_l18_n27
+end
+
+def fun_l17_n248()
+ fun_l18_n964
+end
+
+def fun_l17_n249()
+ fun_l18_n953
+end
+
+def fun_l17_n250()
+ fun_l18_n4
+end
+
+def fun_l17_n251()
+ fun_l18_n504
+end
+
+def fun_l17_n252()
+ fun_l18_n165
+end
+
+def fun_l17_n253()
+ fun_l18_n401
+end
+
+def fun_l17_n254()
+ fun_l18_n267
+end
+
+def fun_l17_n255()
+ fun_l18_n966
+end
+
+def fun_l17_n256()
+ fun_l18_n854
+end
+
+def fun_l17_n257()
+ fun_l18_n927
+end
+
+def fun_l17_n258()
+ fun_l18_n476
+end
+
+def fun_l17_n259()
+ fun_l18_n274
+end
+
+def fun_l17_n260()
+ fun_l18_n711
+end
+
+def fun_l17_n261()
+ fun_l18_n96
+end
+
+def fun_l17_n262()
+ fun_l18_n901
+end
+
+def fun_l17_n263()
+ fun_l18_n601
+end
+
+def fun_l17_n264()
+ fun_l18_n495
+end
+
+def fun_l17_n265()
+ fun_l18_n672
+end
+
+def fun_l17_n266()
+ fun_l18_n946
+end
+
+def fun_l17_n267()
+ fun_l18_n91
+end
+
+def fun_l17_n268()
+ fun_l18_n547
+end
+
+def fun_l17_n269()
+ fun_l18_n977
+end
+
+def fun_l17_n270()
+ fun_l18_n113
+end
+
+def fun_l17_n271()
+ fun_l18_n818
+end
+
+def fun_l17_n272()
+ fun_l18_n370
+end
+
+def fun_l17_n273()
+ fun_l18_n940
+end
+
+def fun_l17_n274()
+ fun_l18_n892
+end
+
+def fun_l17_n275()
+ fun_l18_n501
+end
+
+def fun_l17_n276()
+ fun_l18_n252
+end
+
+def fun_l17_n277()
+ fun_l18_n720
+end
+
+def fun_l17_n278()
+ fun_l18_n12
+end
+
+def fun_l17_n279()
+ fun_l18_n318
+end
+
+def fun_l17_n280()
+ fun_l18_n536
+end
+
+def fun_l17_n281()
+ fun_l18_n344
+end
+
+def fun_l17_n282()
+ fun_l18_n613
+end
+
+def fun_l17_n283()
+ fun_l18_n198
+end
+
+def fun_l17_n284()
+ fun_l18_n153
+end
+
+def fun_l17_n285()
+ fun_l18_n118
+end
+
+def fun_l17_n286()
+ fun_l18_n694
+end
+
+def fun_l17_n287()
+ fun_l18_n402
+end
+
+def fun_l17_n288()
+ fun_l18_n609
+end
+
+def fun_l17_n289()
+ fun_l18_n334
+end
+
+def fun_l17_n290()
+ fun_l18_n266
+end
+
+def fun_l17_n291()
+ fun_l18_n235
+end
+
+def fun_l17_n292()
+ fun_l18_n942
+end
+
+def fun_l17_n293()
+ fun_l18_n165
+end
+
+def fun_l17_n294()
+ fun_l18_n443
+end
+
+def fun_l17_n295()
+ fun_l18_n837
+end
+
+def fun_l17_n296()
+ fun_l18_n329
+end
+
+def fun_l17_n297()
+ fun_l18_n64
+end
+
+def fun_l17_n298()
+ fun_l18_n469
+end
+
+def fun_l17_n299()
+ fun_l18_n557
+end
+
+def fun_l17_n300()
+ fun_l18_n158
+end
+
+def fun_l17_n301()
+ fun_l18_n250
+end
+
+def fun_l17_n302()
+ fun_l18_n733
+end
+
+def fun_l17_n303()
+ fun_l18_n491
+end
+
+def fun_l17_n304()
+ fun_l18_n966
+end
+
+def fun_l17_n305()
+ fun_l18_n210
+end
+
+def fun_l17_n306()
+ fun_l18_n118
+end
+
+def fun_l17_n307()
+ fun_l18_n394
+end
+
+def fun_l17_n308()
+ fun_l18_n421
+end
+
+def fun_l17_n309()
+ fun_l18_n559
+end
+
+def fun_l17_n310()
+ fun_l18_n386
+end
+
+def fun_l17_n311()
+ fun_l18_n350
+end
+
+def fun_l17_n312()
+ fun_l18_n527
+end
+
+def fun_l17_n313()
+ fun_l18_n539
+end
+
+def fun_l17_n314()
+ fun_l18_n468
+end
+
+def fun_l17_n315()
+ fun_l18_n533
+end
+
+def fun_l17_n316()
+ fun_l18_n607
+end
+
+def fun_l17_n317()
+ fun_l18_n410
+end
+
+def fun_l17_n318()
+ fun_l18_n391
+end
+
+def fun_l17_n319()
+ fun_l18_n709
+end
+
+def fun_l17_n320()
+ fun_l18_n131
+end
+
+def fun_l17_n321()
+ fun_l18_n401
+end
+
+def fun_l17_n322()
+ fun_l18_n249
+end
+
+def fun_l17_n323()
+ fun_l18_n459
+end
+
+def fun_l17_n324()
+ fun_l18_n111
+end
+
+def fun_l17_n325()
+ fun_l18_n539
+end
+
+def fun_l17_n326()
+ fun_l18_n493
+end
+
+def fun_l17_n327()
+ fun_l18_n415
+end
+
+def fun_l17_n328()
+ fun_l18_n334
+end
+
+def fun_l17_n329()
+ fun_l18_n784
+end
+
+def fun_l17_n330()
+ fun_l18_n45
+end
+
+def fun_l17_n331()
+ fun_l18_n820
+end
+
+def fun_l17_n332()
+ fun_l18_n892
+end
+
+def fun_l17_n333()
+ fun_l18_n598
+end
+
+def fun_l17_n334()
+ fun_l18_n800
+end
+
+def fun_l17_n335()
+ fun_l18_n384
+end
+
+def fun_l17_n336()
+ fun_l18_n364
+end
+
+def fun_l17_n337()
+ fun_l18_n857
+end
+
+def fun_l17_n338()
+ fun_l18_n617
+end
+
+def fun_l17_n339()
+ fun_l18_n669
+end
+
+def fun_l17_n340()
+ fun_l18_n332
+end
+
+def fun_l17_n341()
+ fun_l18_n104
+end
+
+def fun_l17_n342()
+ fun_l18_n716
+end
+
+def fun_l17_n343()
+ fun_l18_n836
+end
+
+def fun_l17_n344()
+ fun_l18_n31
+end
+
+def fun_l17_n345()
+ fun_l18_n345
+end
+
+def fun_l17_n346()
+ fun_l18_n988
+end
+
+def fun_l17_n347()
+ fun_l18_n63
+end
+
+def fun_l17_n348()
+ fun_l18_n637
+end
+
+def fun_l17_n349()
+ fun_l18_n767
+end
+
+def fun_l17_n350()
+ fun_l18_n45
+end
+
+def fun_l17_n351()
+ fun_l18_n332
+end
+
+def fun_l17_n352()
+ fun_l18_n622
+end
+
+def fun_l17_n353()
+ fun_l18_n879
+end
+
+def fun_l17_n354()
+ fun_l18_n499
+end
+
+def fun_l17_n355()
+ fun_l18_n446
+end
+
+def fun_l17_n356()
+ fun_l18_n355
+end
+
+def fun_l17_n357()
+ fun_l18_n40
+end
+
+def fun_l17_n358()
+ fun_l18_n602
+end
+
+def fun_l17_n359()
+ fun_l18_n162
+end
+
+def fun_l17_n360()
+ fun_l18_n415
+end
+
+def fun_l17_n361()
+ fun_l18_n966
+end
+
+def fun_l17_n362()
+ fun_l18_n801
+end
+
+def fun_l17_n363()
+ fun_l18_n242
+end
+
+def fun_l17_n364()
+ fun_l18_n563
+end
+
+def fun_l17_n365()
+ fun_l18_n150
+end
+
+def fun_l17_n366()
+ fun_l18_n667
+end
+
+def fun_l17_n367()
+ fun_l18_n997
+end
+
+def fun_l17_n368()
+ fun_l18_n550
+end
+
+def fun_l17_n369()
+ fun_l18_n313
+end
+
+def fun_l17_n370()
+ fun_l18_n434
+end
+
+def fun_l17_n371()
+ fun_l18_n254
+end
+
+def fun_l17_n372()
+ fun_l18_n138
+end
+
+def fun_l17_n373()
+ fun_l18_n371
+end
+
+def fun_l17_n374()
+ fun_l18_n135
+end
+
+def fun_l17_n375()
+ fun_l18_n405
+end
+
+def fun_l17_n376()
+ fun_l18_n501
+end
+
+def fun_l17_n377()
+ fun_l18_n565
+end
+
+def fun_l17_n378()
+ fun_l18_n769
+end
+
+def fun_l17_n379()
+ fun_l18_n20
+end
+
+def fun_l17_n380()
+ fun_l18_n917
+end
+
+def fun_l17_n381()
+ fun_l18_n983
+end
+
+def fun_l17_n382()
+ fun_l18_n783
+end
+
+def fun_l17_n383()
+ fun_l18_n849
+end
+
+def fun_l17_n384()
+ fun_l18_n21
+end
+
+def fun_l17_n385()
+ fun_l18_n806
+end
+
+def fun_l17_n386()
+ fun_l18_n440
+end
+
+def fun_l17_n387()
+ fun_l18_n810
+end
+
+def fun_l17_n388()
+ fun_l18_n744
+end
+
+def fun_l17_n389()
+ fun_l18_n184
+end
+
+def fun_l17_n390()
+ fun_l18_n775
+end
+
+def fun_l17_n391()
+ fun_l18_n704
+end
+
+def fun_l17_n392()
+ fun_l18_n413
+end
+
+def fun_l17_n393()
+ fun_l18_n329
+end
+
+def fun_l17_n394()
+ fun_l18_n874
+end
+
+def fun_l17_n395()
+ fun_l18_n756
+end
+
+def fun_l17_n396()
+ fun_l18_n502
+end
+
+def fun_l17_n397()
+ fun_l18_n675
+end
+
+def fun_l17_n398()
+ fun_l18_n504
+end
+
+def fun_l17_n399()
+ fun_l18_n117
+end
+
+def fun_l17_n400()
+ fun_l18_n203
+end
+
+def fun_l17_n401()
+ fun_l18_n672
+end
+
+def fun_l17_n402()
+ fun_l18_n971
+end
+
+def fun_l17_n403()
+ fun_l18_n742
+end
+
+def fun_l17_n404()
+ fun_l18_n817
+end
+
+def fun_l17_n405()
+ fun_l18_n981
+end
+
+def fun_l17_n406()
+ fun_l18_n791
+end
+
+def fun_l17_n407()
+ fun_l18_n660
+end
+
+def fun_l17_n408()
+ fun_l18_n988
+end
+
+def fun_l17_n409()
+ fun_l18_n875
+end
+
+def fun_l17_n410()
+ fun_l18_n469
+end
+
+def fun_l17_n411()
+ fun_l18_n890
+end
+
+def fun_l17_n412()
+ fun_l18_n739
+end
+
+def fun_l17_n413()
+ fun_l18_n880
+end
+
+def fun_l17_n414()
+ fun_l18_n47
+end
+
+def fun_l17_n415()
+ fun_l18_n474
+end
+
+def fun_l17_n416()
+ fun_l18_n923
+end
+
+def fun_l17_n417()
+ fun_l18_n959
+end
+
+def fun_l17_n418()
+ fun_l18_n748
+end
+
+def fun_l17_n419()
+ fun_l18_n555
+end
+
+def fun_l17_n420()
+ fun_l18_n785
+end
+
+def fun_l17_n421()
+ fun_l18_n49
+end
+
+def fun_l17_n422()
+ fun_l18_n509
+end
+
+def fun_l17_n423()
+ fun_l18_n0
+end
+
+def fun_l17_n424()
+ fun_l18_n388
+end
+
+def fun_l17_n425()
+ fun_l18_n394
+end
+
+def fun_l17_n426()
+ fun_l18_n199
+end
+
+def fun_l17_n427()
+ fun_l18_n554
+end
+
+def fun_l17_n428()
+ fun_l18_n963
+end
+
+def fun_l17_n429()
+ fun_l18_n464
+end
+
+def fun_l17_n430()
+ fun_l18_n941
+end
+
+def fun_l17_n431()
+ fun_l18_n116
+end
+
+def fun_l17_n432()
+ fun_l18_n370
+end
+
+def fun_l17_n433()
+ fun_l18_n848
+end
+
+def fun_l17_n434()
+ fun_l18_n123
+end
+
+def fun_l17_n435()
+ fun_l18_n32
+end
+
+def fun_l17_n436()
+ fun_l18_n285
+end
+
+def fun_l17_n437()
+ fun_l18_n823
+end
+
+def fun_l17_n438()
+ fun_l18_n517
+end
+
+def fun_l17_n439()
+ fun_l18_n292
+end
+
+def fun_l17_n440()
+ fun_l18_n29
+end
+
+def fun_l17_n441()
+ fun_l18_n166
+end
+
+def fun_l17_n442()
+ fun_l18_n282
+end
+
+def fun_l17_n443()
+ fun_l18_n300
+end
+
+def fun_l17_n444()
+ fun_l18_n8
+end
+
+def fun_l17_n445()
+ fun_l18_n458
+end
+
+def fun_l17_n446()
+ fun_l18_n797
+end
+
+def fun_l17_n447()
+ fun_l18_n835
+end
+
+def fun_l17_n448()
+ fun_l18_n535
+end
+
+def fun_l17_n449()
+ fun_l18_n909
+end
+
+def fun_l17_n450()
+ fun_l18_n890
+end
+
+def fun_l17_n451()
+ fun_l18_n706
+end
+
+def fun_l17_n452()
+ fun_l18_n636
+end
+
+def fun_l17_n453()
+ fun_l18_n541
+end
+
+def fun_l17_n454()
+ fun_l18_n332
+end
+
+def fun_l17_n455()
+ fun_l18_n241
+end
+
+def fun_l17_n456()
+ fun_l18_n334
+end
+
+def fun_l17_n457()
+ fun_l18_n212
+end
+
+def fun_l17_n458()
+ fun_l18_n414
+end
+
+def fun_l17_n459()
+ fun_l18_n600
+end
+
+def fun_l17_n460()
+ fun_l18_n237
+end
+
+def fun_l17_n461()
+ fun_l18_n881
+end
+
+def fun_l17_n462()
+ fun_l18_n539
+end
+
+def fun_l17_n463()
+ fun_l18_n262
+end
+
+def fun_l17_n464()
+ fun_l18_n437
+end
+
+def fun_l17_n465()
+ fun_l18_n874
+end
+
+def fun_l17_n466()
+ fun_l18_n418
+end
+
+def fun_l17_n467()
+ fun_l18_n963
+end
+
+def fun_l17_n468()
+ fun_l18_n340
+end
+
+def fun_l17_n469()
+ fun_l18_n708
+end
+
+def fun_l17_n470()
+ fun_l18_n725
+end
+
+def fun_l17_n471()
+ fun_l18_n59
+end
+
+def fun_l17_n472()
+ fun_l18_n309
+end
+
+def fun_l17_n473()
+ fun_l18_n490
+end
+
+def fun_l17_n474()
+ fun_l18_n588
+end
+
+def fun_l17_n475()
+ fun_l18_n623
+end
+
+def fun_l17_n476()
+ fun_l18_n127
+end
+
+def fun_l17_n477()
+ fun_l18_n385
+end
+
+def fun_l17_n478()
+ fun_l18_n381
+end
+
+def fun_l17_n479()
+ fun_l18_n603
+end
+
+def fun_l17_n480()
+ fun_l18_n524
+end
+
+def fun_l17_n481()
+ fun_l18_n829
+end
+
+def fun_l17_n482()
+ fun_l18_n675
+end
+
+def fun_l17_n483()
+ fun_l18_n792
+end
+
+def fun_l17_n484()
+ fun_l18_n438
+end
+
+def fun_l17_n485()
+ fun_l18_n101
+end
+
+def fun_l17_n486()
+ fun_l18_n513
+end
+
+def fun_l17_n487()
+ fun_l18_n44
+end
+
+def fun_l17_n488()
+ fun_l18_n975
+end
+
+def fun_l17_n489()
+ fun_l18_n891
+end
+
+def fun_l17_n490()
+ fun_l18_n650
+end
+
+def fun_l17_n491()
+ fun_l18_n840
+end
+
+def fun_l17_n492()
+ fun_l18_n954
+end
+
+def fun_l17_n493()
+ fun_l18_n326
+end
+
+def fun_l17_n494()
+ fun_l18_n93
+end
+
+def fun_l17_n495()
+ fun_l18_n537
+end
+
+def fun_l17_n496()
+ fun_l18_n871
+end
+
+def fun_l17_n497()
+ fun_l18_n786
+end
+
+def fun_l17_n498()
+ fun_l18_n311
+end
+
+def fun_l17_n499()
+ fun_l18_n494
+end
+
+def fun_l17_n500()
+ fun_l18_n787
+end
+
+def fun_l17_n501()
+ fun_l18_n511
+end
+
+def fun_l17_n502()
+ fun_l18_n342
+end
+
+def fun_l17_n503()
+ fun_l18_n218
+end
+
+def fun_l17_n504()
+ fun_l18_n432
+end
+
+def fun_l17_n505()
+ fun_l18_n637
+end
+
+def fun_l17_n506()
+ fun_l18_n877
+end
+
+def fun_l17_n507()
+ fun_l18_n767
+end
+
+def fun_l17_n508()
+ fun_l18_n854
+end
+
+def fun_l17_n509()
+ fun_l18_n614
+end
+
+def fun_l17_n510()
+ fun_l18_n720
+end
+
+def fun_l17_n511()
+ fun_l18_n556
+end
+
+def fun_l17_n512()
+ fun_l18_n950
+end
+
+def fun_l17_n513()
+ fun_l18_n502
+end
+
+def fun_l17_n514()
+ fun_l18_n841
+end
+
+def fun_l17_n515()
+ fun_l18_n24
+end
+
+def fun_l17_n516()
+ fun_l18_n392
+end
+
+def fun_l17_n517()
+ fun_l18_n99
+end
+
+def fun_l17_n518()
+ fun_l18_n370
+end
+
+def fun_l17_n519()
+ fun_l18_n798
+end
+
+def fun_l17_n520()
+ fun_l18_n405
+end
+
+def fun_l17_n521()
+ fun_l18_n736
+end
+
+def fun_l17_n522()
+ fun_l18_n616
+end
+
+def fun_l17_n523()
+ fun_l18_n701
+end
+
+def fun_l17_n524()
+ fun_l18_n914
+end
+
+def fun_l17_n525()
+ fun_l18_n832
+end
+
+def fun_l17_n526()
+ fun_l18_n234
+end
+
+def fun_l17_n527()
+ fun_l18_n65
+end
+
+def fun_l17_n528()
+ fun_l18_n61
+end
+
+def fun_l17_n529()
+ fun_l18_n639
+end
+
+def fun_l17_n530()
+ fun_l18_n162
+end
+
+def fun_l17_n531()
+ fun_l18_n250
+end
+
+def fun_l17_n532()
+ fun_l18_n567
+end
+
+def fun_l17_n533()
+ fun_l18_n183
+end
+
+def fun_l17_n534()
+ fun_l18_n170
+end
+
+def fun_l17_n535()
+ fun_l18_n663
+end
+
+def fun_l17_n536()
+ fun_l18_n654
+end
+
+def fun_l17_n537()
+ fun_l18_n616
+end
+
+def fun_l17_n538()
+ fun_l18_n836
+end
+
+def fun_l17_n539()
+ fun_l18_n679
+end
+
+def fun_l17_n540()
+ fun_l18_n286
+end
+
+def fun_l17_n541()
+ fun_l18_n35
+end
+
+def fun_l17_n542()
+ fun_l18_n622
+end
+
+def fun_l17_n543()
+ fun_l18_n305
+end
+
+def fun_l17_n544()
+ fun_l18_n665
+end
+
+def fun_l17_n545()
+ fun_l18_n376
+end
+
+def fun_l17_n546()
+ fun_l18_n831
+end
+
+def fun_l17_n547()
+ fun_l18_n917
+end
+
+def fun_l17_n548()
+ fun_l18_n72
+end
+
+def fun_l17_n549()
+ fun_l18_n934
+end
+
+def fun_l17_n550()
+ fun_l18_n450
+end
+
+def fun_l17_n551()
+ fun_l18_n683
+end
+
+def fun_l17_n552()
+ fun_l18_n775
+end
+
+def fun_l17_n553()
+ fun_l18_n418
+end
+
+def fun_l17_n554()
+ fun_l18_n95
+end
+
+def fun_l17_n555()
+ fun_l18_n395
+end
+
+def fun_l17_n556()
+ fun_l18_n398
+end
+
+def fun_l17_n557()
+ fun_l18_n192
+end
+
+def fun_l17_n558()
+ fun_l18_n773
+end
+
+def fun_l17_n559()
+ fun_l18_n924
+end
+
+def fun_l17_n560()
+ fun_l18_n338
+end
+
+def fun_l17_n561()
+ fun_l18_n926
+end
+
+def fun_l17_n562()
+ fun_l18_n153
+end
+
+def fun_l17_n563()
+ fun_l18_n76
+end
+
+def fun_l17_n564()
+ fun_l18_n192
+end
+
+def fun_l17_n565()
+ fun_l18_n605
+end
+
+def fun_l17_n566()
+ fun_l18_n219
+end
+
+def fun_l17_n567()
+ fun_l18_n58
+end
+
+def fun_l17_n568()
+ fun_l18_n245
+end
+
+def fun_l17_n569()
+ fun_l18_n810
+end
+
+def fun_l17_n570()
+ fun_l18_n541
+end
+
+def fun_l17_n571()
+ fun_l18_n37
+end
+
+def fun_l17_n572()
+ fun_l18_n329
+end
+
+def fun_l17_n573()
+ fun_l18_n159
+end
+
+def fun_l17_n574()
+ fun_l18_n926
+end
+
+def fun_l17_n575()
+ fun_l18_n940
+end
+
+def fun_l17_n576()
+ fun_l18_n547
+end
+
+def fun_l17_n577()
+ fun_l18_n694
+end
+
+def fun_l17_n578()
+ fun_l18_n513
+end
+
+def fun_l17_n579()
+ fun_l18_n197
+end
+
+def fun_l17_n580()
+ fun_l18_n97
+end
+
+def fun_l17_n581()
+ fun_l18_n504
+end
+
+def fun_l17_n582()
+ fun_l18_n30
+end
+
+def fun_l17_n583()
+ fun_l18_n972
+end
+
+def fun_l17_n584()
+ fun_l18_n684
+end
+
+def fun_l17_n585()
+ fun_l18_n720
+end
+
+def fun_l17_n586()
+ fun_l18_n999
+end
+
+def fun_l17_n587()
+ fun_l18_n241
+end
+
+def fun_l17_n588()
+ fun_l18_n289
+end
+
+def fun_l17_n589()
+ fun_l18_n168
+end
+
+def fun_l17_n590()
+ fun_l18_n890
+end
+
+def fun_l17_n591()
+ fun_l18_n566
+end
+
+def fun_l17_n592()
+ fun_l18_n722
+end
+
+def fun_l17_n593()
+ fun_l18_n65
+end
+
+def fun_l17_n594()
+ fun_l18_n975
+end
+
+def fun_l17_n595()
+ fun_l18_n68
+end
+
+def fun_l17_n596()
+ fun_l18_n930
+end
+
+def fun_l17_n597()
+ fun_l18_n386
+end
+
+def fun_l17_n598()
+ fun_l18_n755
+end
+
+def fun_l17_n599()
+ fun_l18_n571
+end
+
+def fun_l17_n600()
+ fun_l18_n633
+end
+
+def fun_l17_n601()
+ fun_l18_n823
+end
+
+def fun_l17_n602()
+ fun_l18_n618
+end
+
+def fun_l17_n603()
+ fun_l18_n587
+end
+
+def fun_l17_n604()
+ fun_l18_n730
+end
+
+def fun_l17_n605()
+ fun_l18_n829
+end
+
+def fun_l17_n606()
+ fun_l18_n591
+end
+
+def fun_l17_n607()
+ fun_l18_n971
+end
+
+def fun_l17_n608()
+ fun_l18_n79
+end
+
+def fun_l17_n609()
+ fun_l18_n971
+end
+
+def fun_l17_n610()
+ fun_l18_n571
+end
+
+def fun_l17_n611()
+ fun_l18_n768
+end
+
+def fun_l17_n612()
+ fun_l18_n894
+end
+
+def fun_l17_n613()
+ fun_l18_n424
+end
+
+def fun_l17_n614()
+ fun_l18_n452
+end
+
+def fun_l17_n615()
+ fun_l18_n928
+end
+
+def fun_l17_n616()
+ fun_l18_n273
+end
+
+def fun_l17_n617()
+ fun_l18_n344
+end
+
+def fun_l17_n618()
+ fun_l18_n673
+end
+
+def fun_l17_n619()
+ fun_l18_n849
+end
+
+def fun_l17_n620()
+ fun_l18_n462
+end
+
+def fun_l17_n621()
+ fun_l18_n691
+end
+
+def fun_l17_n622()
+ fun_l18_n111
+end
+
+def fun_l17_n623()
+ fun_l18_n140
+end
+
+def fun_l17_n624()
+ fun_l18_n949
+end
+
+def fun_l17_n625()
+ fun_l18_n743
+end
+
+def fun_l17_n626()
+ fun_l18_n985
+end
+
+def fun_l17_n627()
+ fun_l18_n123
+end
+
+def fun_l17_n628()
+ fun_l18_n59
+end
+
+def fun_l17_n629()
+ fun_l18_n355
+end
+
+def fun_l17_n630()
+ fun_l18_n828
+end
+
+def fun_l17_n631()
+ fun_l18_n602
+end
+
+def fun_l17_n632()
+ fun_l18_n597
+end
+
+def fun_l17_n633()
+ fun_l18_n156
+end
+
+def fun_l17_n634()
+ fun_l18_n249
+end
+
+def fun_l17_n635()
+ fun_l18_n166
+end
+
+def fun_l17_n636()
+ fun_l18_n913
+end
+
+def fun_l17_n637()
+ fun_l18_n667
+end
+
+def fun_l17_n638()
+ fun_l18_n641
+end
+
+def fun_l17_n639()
+ fun_l18_n31
+end
+
+def fun_l17_n640()
+ fun_l18_n481
+end
+
+def fun_l17_n641()
+ fun_l18_n670
+end
+
+def fun_l17_n642()
+ fun_l18_n104
+end
+
+def fun_l17_n643()
+ fun_l18_n490
+end
+
+def fun_l17_n644()
+ fun_l18_n653
+end
+
+def fun_l17_n645()
+ fun_l18_n582
+end
+
+def fun_l17_n646()
+ fun_l18_n805
+end
+
+def fun_l17_n647()
+ fun_l18_n89
+end
+
+def fun_l17_n648()
+ fun_l18_n226
+end
+
+def fun_l17_n649()
+ fun_l18_n657
+end
+
+def fun_l17_n650()
+ fun_l18_n711
+end
+
+def fun_l17_n651()
+ fun_l18_n991
+end
+
+def fun_l17_n652()
+ fun_l18_n955
+end
+
+def fun_l17_n653()
+ fun_l18_n357
+end
+
+def fun_l17_n654()
+ fun_l18_n816
+end
+
+def fun_l17_n655()
+ fun_l18_n3
+end
+
+def fun_l17_n656()
+ fun_l18_n796
+end
+
+def fun_l17_n657()
+ fun_l18_n864
+end
+
+def fun_l17_n658()
+ fun_l18_n484
+end
+
+def fun_l17_n659()
+ fun_l18_n59
+end
+
+def fun_l17_n660()
+ fun_l18_n465
+end
+
+def fun_l17_n661()
+ fun_l18_n175
+end
+
+def fun_l17_n662()
+ fun_l18_n721
+end
+
+def fun_l17_n663()
+ fun_l18_n203
+end
+
+def fun_l17_n664()
+ fun_l18_n77
+end
+
+def fun_l17_n665()
+ fun_l18_n428
+end
+
+def fun_l17_n666()
+ fun_l18_n651
+end
+
+def fun_l17_n667()
+ fun_l18_n652
+end
+
+def fun_l17_n668()
+ fun_l18_n199
+end
+
+def fun_l17_n669()
+ fun_l18_n851
+end
+
+def fun_l17_n670()
+ fun_l18_n27
+end
+
+def fun_l17_n671()
+ fun_l18_n399
+end
+
+def fun_l17_n672()
+ fun_l18_n233
+end
+
+def fun_l17_n673()
+ fun_l18_n213
+end
+
+def fun_l17_n674()
+ fun_l18_n112
+end
+
+def fun_l17_n675()
+ fun_l18_n56
+end
+
+def fun_l17_n676()
+ fun_l18_n813
+end
+
+def fun_l17_n677()
+ fun_l18_n344
+end
+
+def fun_l17_n678()
+ fun_l18_n705
+end
+
+def fun_l17_n679()
+ fun_l18_n117
+end
+
+def fun_l17_n680()
+ fun_l18_n644
+end
+
+def fun_l17_n681()
+ fun_l18_n544
+end
+
+def fun_l17_n682()
+ fun_l18_n910
+end
+
+def fun_l17_n683()
+ fun_l18_n604
+end
+
+def fun_l17_n684()
+ fun_l18_n916
+end
+
+def fun_l17_n685()
+ fun_l18_n795
+end
+
+def fun_l17_n686()
+ fun_l18_n983
+end
+
+def fun_l17_n687()
+ fun_l18_n200
+end
+
+def fun_l17_n688()
+ fun_l18_n699
+end
+
+def fun_l17_n689()
+ fun_l18_n736
+end
+
+def fun_l17_n690()
+ fun_l18_n465
+end
+
+def fun_l17_n691()
+ fun_l18_n496
+end
+
+def fun_l17_n692()
+ fun_l18_n505
+end
+
+def fun_l17_n693()
+ fun_l18_n753
+end
+
+def fun_l17_n694()
+ fun_l18_n473
+end
+
+def fun_l17_n695()
+ fun_l18_n320
+end
+
+def fun_l17_n696()
+ fun_l18_n319
+end
+
+def fun_l17_n697()
+ fun_l18_n789
+end
+
+def fun_l17_n698()
+ fun_l18_n474
+end
+
+def fun_l17_n699()
+ fun_l18_n561
+end
+
+def fun_l17_n700()
+ fun_l18_n455
+end
+
+def fun_l17_n701()
+ fun_l18_n863
+end
+
+def fun_l17_n702()
+ fun_l18_n22
+end
+
+def fun_l17_n703()
+ fun_l18_n850
+end
+
+def fun_l17_n704()
+ fun_l18_n200
+end
+
+def fun_l17_n705()
+ fun_l18_n411
+end
+
+def fun_l17_n706()
+ fun_l18_n655
+end
+
+def fun_l17_n707()
+ fun_l18_n101
+end
+
+def fun_l17_n708()
+ fun_l18_n911
+end
+
+def fun_l17_n709()
+ fun_l18_n974
+end
+
+def fun_l17_n710()
+ fun_l18_n354
+end
+
+def fun_l17_n711()
+ fun_l18_n265
+end
+
+def fun_l17_n712()
+ fun_l18_n995
+end
+
+def fun_l17_n713()
+ fun_l18_n21
+end
+
+def fun_l17_n714()
+ fun_l18_n783
+end
+
+def fun_l17_n715()
+ fun_l18_n974
+end
+
+def fun_l17_n716()
+ fun_l18_n814
+end
+
+def fun_l17_n717()
+ fun_l18_n833
+end
+
+def fun_l17_n718()
+ fun_l18_n919
+end
+
+def fun_l17_n719()
+ fun_l18_n379
+end
+
+def fun_l17_n720()
+ fun_l18_n995
+end
+
+def fun_l17_n721()
+ fun_l18_n473
+end
+
+def fun_l17_n722()
+ fun_l18_n345
+end
+
+def fun_l17_n723()
+ fun_l18_n982
+end
+
+def fun_l17_n724()
+ fun_l18_n857
+end
+
+def fun_l17_n725()
+ fun_l18_n238
+end
+
+def fun_l17_n726()
+ fun_l18_n428
+end
+
+def fun_l17_n727()
+ fun_l18_n387
+end
+
+def fun_l17_n728()
+ fun_l18_n690
+end
+
+def fun_l17_n729()
+ fun_l18_n581
+end
+
+def fun_l17_n730()
+ fun_l18_n110
+end
+
+def fun_l17_n731()
+ fun_l18_n788
+end
+
+def fun_l17_n732()
+ fun_l18_n190
+end
+
+def fun_l17_n733()
+ fun_l18_n856
+end
+
+def fun_l17_n734()
+ fun_l18_n724
+end
+
+def fun_l17_n735()
+ fun_l18_n174
+end
+
+def fun_l17_n736()
+ fun_l18_n527
+end
+
+def fun_l17_n737()
+ fun_l18_n816
+end
+
+def fun_l17_n738()
+ fun_l18_n425
+end
+
+def fun_l17_n739()
+ fun_l18_n476
+end
+
+def fun_l17_n740()
+ fun_l18_n685
+end
+
+def fun_l17_n741()
+ fun_l18_n211
+end
+
+def fun_l17_n742()
+ fun_l18_n354
+end
+
+def fun_l17_n743()
+ fun_l18_n849
+end
+
+def fun_l17_n744()
+ fun_l18_n673
+end
+
+def fun_l17_n745()
+ fun_l18_n274
+end
+
+def fun_l17_n746()
+ fun_l18_n147
+end
+
+def fun_l17_n747()
+ fun_l18_n103
+end
+
+def fun_l17_n748()
+ fun_l18_n185
+end
+
+def fun_l17_n749()
+ fun_l18_n781
+end
+
+def fun_l17_n750()
+ fun_l18_n980
+end
+
+def fun_l17_n751()
+ fun_l18_n961
+end
+
+def fun_l17_n752()
+ fun_l18_n447
+end
+
+def fun_l17_n753()
+ fun_l18_n124
+end
+
+def fun_l17_n754()
+ fun_l18_n605
+end
+
+def fun_l17_n755()
+ fun_l18_n7
+end
+
+def fun_l17_n756()
+ fun_l18_n731
+end
+
+def fun_l17_n757()
+ fun_l18_n479
+end
+
+def fun_l17_n758()
+ fun_l18_n931
+end
+
+def fun_l17_n759()
+ fun_l18_n535
+end
+
+def fun_l17_n760()
+ fun_l18_n772
+end
+
+def fun_l17_n761()
+ fun_l18_n827
+end
+
+def fun_l17_n762()
+ fun_l18_n265
+end
+
+def fun_l17_n763()
+ fun_l18_n81
+end
+
+def fun_l17_n764()
+ fun_l18_n377
+end
+
+def fun_l17_n765()
+ fun_l18_n565
+end
+
+def fun_l17_n766()
+ fun_l18_n520
+end
+
+def fun_l17_n767()
+ fun_l18_n556
+end
+
+def fun_l17_n768()
+ fun_l18_n711
+end
+
+def fun_l17_n769()
+ fun_l18_n460
+end
+
+def fun_l17_n770()
+ fun_l18_n902
+end
+
+def fun_l17_n771()
+ fun_l18_n874
+end
+
+def fun_l17_n772()
+ fun_l18_n742
+end
+
+def fun_l17_n773()
+ fun_l18_n578
+end
+
+def fun_l17_n774()
+ fun_l18_n198
+end
+
+def fun_l17_n775()
+ fun_l18_n965
+end
+
+def fun_l17_n776()
+ fun_l18_n342
+end
+
+def fun_l17_n777()
+ fun_l18_n50
+end
+
+def fun_l17_n778()
+ fun_l18_n299
+end
+
+def fun_l17_n779()
+ fun_l18_n289
+end
+
+def fun_l17_n780()
+ fun_l18_n830
+end
+
+def fun_l17_n781()
+ fun_l18_n157
+end
+
+def fun_l17_n782()
+ fun_l18_n628
+end
+
+def fun_l17_n783()
+ fun_l18_n875
+end
+
+def fun_l17_n784()
+ fun_l18_n810
+end
+
+def fun_l17_n785()
+ fun_l18_n642
+end
+
+def fun_l17_n786()
+ fun_l18_n422
+end
+
+def fun_l17_n787()
+ fun_l18_n816
+end
+
+def fun_l17_n788()
+ fun_l18_n184
+end
+
+def fun_l17_n789()
+ fun_l18_n391
+end
+
+def fun_l17_n790()
+ fun_l18_n804
+end
+
+def fun_l17_n791()
+ fun_l18_n534
+end
+
+def fun_l17_n792()
+ fun_l18_n353
+end
+
+def fun_l17_n793()
+ fun_l18_n329
+end
+
+def fun_l17_n794()
+ fun_l18_n75
+end
+
+def fun_l17_n795()
+ fun_l18_n854
+end
+
+def fun_l17_n796()
+ fun_l18_n478
+end
+
+def fun_l17_n797()
+ fun_l18_n403
+end
+
+def fun_l17_n798()
+ fun_l18_n842
+end
+
+def fun_l17_n799()
+ fun_l18_n569
+end
+
+def fun_l17_n800()
+ fun_l18_n596
+end
+
+def fun_l17_n801()
+ fun_l18_n548
+end
+
+def fun_l17_n802()
+ fun_l18_n393
+end
+
+def fun_l17_n803()
+ fun_l18_n253
+end
+
+def fun_l17_n804()
+ fun_l18_n987
+end
+
+def fun_l17_n805()
+ fun_l18_n560
+end
+
+def fun_l17_n806()
+ fun_l18_n582
+end
+
+def fun_l17_n807()
+ fun_l18_n356
+end
+
+def fun_l17_n808()
+ fun_l18_n458
+end
+
+def fun_l17_n809()
+ fun_l18_n215
+end
+
+def fun_l17_n810()
+ fun_l18_n16
+end
+
+def fun_l17_n811()
+ fun_l18_n586
+end
+
+def fun_l17_n812()
+ fun_l18_n312
+end
+
+def fun_l17_n813()
+ fun_l18_n861
+end
+
+def fun_l17_n814()
+ fun_l18_n455
+end
+
+def fun_l17_n815()
+ fun_l18_n530
+end
+
+def fun_l17_n816()
+ fun_l18_n583
+end
+
+def fun_l17_n817()
+ fun_l18_n511
+end
+
+def fun_l17_n818()
+ fun_l18_n568
+end
+
+def fun_l17_n819()
+ fun_l18_n411
+end
+
+def fun_l17_n820()
+ fun_l18_n404
+end
+
+def fun_l17_n821()
+ fun_l18_n199
+end
+
+def fun_l17_n822()
+ fun_l18_n393
+end
+
+def fun_l17_n823()
+ fun_l18_n856
+end
+
+def fun_l17_n824()
+ fun_l18_n638
+end
+
+def fun_l17_n825()
+ fun_l18_n853
+end
+
+def fun_l17_n826()
+ fun_l18_n896
+end
+
+def fun_l17_n827()
+ fun_l18_n267
+end
+
+def fun_l17_n828()
+ fun_l18_n419
+end
+
+def fun_l17_n829()
+ fun_l18_n47
+end
+
+def fun_l17_n830()
+ fun_l18_n436
+end
+
+def fun_l17_n831()
+ fun_l18_n714
+end
+
+def fun_l17_n832()
+ fun_l18_n156
+end
+
+def fun_l17_n833()
+ fun_l18_n32
+end
+
+def fun_l17_n834()
+ fun_l18_n467
+end
+
+def fun_l17_n835()
+ fun_l18_n905
+end
+
+def fun_l17_n836()
+ fun_l18_n824
+end
+
+def fun_l17_n837()
+ fun_l18_n503
+end
+
+def fun_l17_n838()
+ fun_l18_n454
+end
+
+def fun_l17_n839()
+ fun_l18_n295
+end
+
+def fun_l17_n840()
+ fun_l18_n669
+end
+
+def fun_l17_n841()
+ fun_l18_n618
+end
+
+def fun_l17_n842()
+ fun_l18_n984
+end
+
+def fun_l17_n843()
+ fun_l18_n485
+end
+
+def fun_l17_n844()
+ fun_l18_n952
+end
+
+def fun_l17_n845()
+ fun_l18_n374
+end
+
+def fun_l17_n846()
+ fun_l18_n933
+end
+
+def fun_l17_n847()
+ fun_l18_n246
+end
+
+def fun_l17_n848()
+ fun_l18_n672
+end
+
+def fun_l17_n849()
+ fun_l18_n23
+end
+
+def fun_l17_n850()
+ fun_l18_n641
+end
+
+def fun_l17_n851()
+ fun_l18_n439
+end
+
+def fun_l17_n852()
+ fun_l18_n423
+end
+
+def fun_l17_n853()
+ fun_l18_n565
+end
+
+def fun_l17_n854()
+ fun_l18_n189
+end
+
+def fun_l17_n855()
+ fun_l18_n265
+end
+
+def fun_l17_n856()
+ fun_l18_n101
+end
+
+def fun_l17_n857()
+ fun_l18_n799
+end
+
+def fun_l17_n858()
+ fun_l18_n831
+end
+
+def fun_l17_n859()
+ fun_l18_n222
+end
+
+def fun_l17_n860()
+ fun_l18_n398
+end
+
+def fun_l17_n861()
+ fun_l18_n946
+end
+
+def fun_l17_n862()
+ fun_l18_n693
+end
+
+def fun_l17_n863()
+ fun_l18_n947
+end
+
+def fun_l17_n864()
+ fun_l18_n22
+end
+
+def fun_l17_n865()
+ fun_l18_n386
+end
+
+def fun_l17_n866()
+ fun_l18_n771
+end
+
+def fun_l17_n867()
+ fun_l18_n38
+end
+
+def fun_l17_n868()
+ fun_l18_n290
+end
+
+def fun_l17_n869()
+ fun_l18_n204
+end
+
+def fun_l17_n870()
+ fun_l18_n780
+end
+
+def fun_l17_n871()
+ fun_l18_n275
+end
+
+def fun_l17_n872()
+ fun_l18_n810
+end
+
+def fun_l17_n873()
+ fun_l18_n104
+end
+
+def fun_l17_n874()
+ fun_l18_n433
+end
+
+def fun_l17_n875()
+ fun_l18_n55
+end
+
+def fun_l17_n876()
+ fun_l18_n508
+end
+
+def fun_l17_n877()
+ fun_l18_n997
+end
+
+def fun_l17_n878()
+ fun_l18_n115
+end
+
+def fun_l17_n879()
+ fun_l18_n568
+end
+
+def fun_l17_n880()
+ fun_l18_n385
+end
+
+def fun_l17_n881()
+ fun_l18_n912
+end
+
+def fun_l17_n882()
+ fun_l18_n234
+end
+
+def fun_l17_n883()
+ fun_l18_n85
+end
+
+def fun_l17_n884()
+ fun_l18_n935
+end
+
+def fun_l17_n885()
+ fun_l18_n389
+end
+
+def fun_l17_n886()
+ fun_l18_n925
+end
+
+def fun_l17_n887()
+ fun_l18_n629
+end
+
+def fun_l17_n888()
+ fun_l18_n310
+end
+
+def fun_l17_n889()
+ fun_l18_n538
+end
+
+def fun_l17_n890()
+ fun_l18_n172
+end
+
+def fun_l17_n891()
+ fun_l18_n161
+end
+
+def fun_l17_n892()
+ fun_l18_n11
+end
+
+def fun_l17_n893()
+ fun_l18_n216
+end
+
+def fun_l17_n894()
+ fun_l18_n802
+end
+
+def fun_l17_n895()
+ fun_l18_n982
+end
+
+def fun_l17_n896()
+ fun_l18_n220
+end
+
+def fun_l17_n897()
+ fun_l18_n169
+end
+
+def fun_l17_n898()
+ fun_l18_n64
+end
+
+def fun_l17_n899()
+ fun_l18_n282
+end
+
+def fun_l17_n900()
+ fun_l18_n134
+end
+
+def fun_l17_n901()
+ fun_l18_n424
+end
+
+def fun_l17_n902()
+ fun_l18_n766
+end
+
+def fun_l17_n903()
+ fun_l18_n808
+end
+
+def fun_l17_n904()
+ fun_l18_n766
+end
+
+def fun_l17_n905()
+ fun_l18_n836
+end
+
+def fun_l17_n906()
+ fun_l18_n5
+end
+
+def fun_l17_n907()
+ fun_l18_n47
+end
+
+def fun_l17_n908()
+ fun_l18_n414
+end
+
+def fun_l17_n909()
+ fun_l18_n11
+end
+
+def fun_l17_n910()
+ fun_l18_n446
+end
+
+def fun_l17_n911()
+ fun_l18_n161
+end
+
+def fun_l17_n912()
+ fun_l18_n291
+end
+
+def fun_l17_n913()
+ fun_l18_n728
+end
+
+def fun_l17_n914()
+ fun_l18_n806
+end
+
+def fun_l17_n915()
+ fun_l18_n355
+end
+
+def fun_l17_n916()
+ fun_l18_n157
+end
+
+def fun_l17_n917()
+ fun_l18_n912
+end
+
+def fun_l17_n918()
+ fun_l18_n354
+end
+
+def fun_l17_n919()
+ fun_l18_n84
+end
+
+def fun_l17_n920()
+ fun_l18_n291
+end
+
+def fun_l17_n921()
+ fun_l18_n258
+end
+
+def fun_l17_n922()
+ fun_l18_n935
+end
+
+def fun_l17_n923()
+ fun_l18_n622
+end
+
+def fun_l17_n924()
+ fun_l18_n760
+end
+
+def fun_l17_n925()
+ fun_l18_n153
+end
+
+def fun_l17_n926()
+ fun_l18_n673
+end
+
+def fun_l17_n927()
+ fun_l18_n105
+end
+
+def fun_l17_n928()
+ fun_l18_n432
+end
+
+def fun_l17_n929()
+ fun_l18_n403
+end
+
+def fun_l17_n930()
+ fun_l18_n312
+end
+
+def fun_l17_n931()
+ fun_l18_n874
+end
+
+def fun_l17_n932()
+ fun_l18_n642
+end
+
+def fun_l17_n933()
+ fun_l18_n694
+end
+
+def fun_l17_n934()
+ fun_l18_n247
+end
+
+def fun_l17_n935()
+ fun_l18_n483
+end
+
+def fun_l17_n936()
+ fun_l18_n849
+end
+
+def fun_l17_n937()
+ fun_l18_n784
+end
+
+def fun_l17_n938()
+ fun_l18_n948
+end
+
+def fun_l17_n939()
+ fun_l18_n26
+end
+
+def fun_l17_n940()
+ fun_l18_n36
+end
+
+def fun_l17_n941()
+ fun_l18_n933
+end
+
+def fun_l17_n942()
+ fun_l18_n734
+end
+
+def fun_l17_n943()
+ fun_l18_n33
+end
+
+def fun_l17_n944()
+ fun_l18_n78
+end
+
+def fun_l17_n945()
+ fun_l18_n592
+end
+
+def fun_l17_n946()
+ fun_l18_n504
+end
+
+def fun_l17_n947()
+ fun_l18_n255
+end
+
+def fun_l17_n948()
+ fun_l18_n389
+end
+
+def fun_l17_n949()
+ fun_l18_n71
+end
+
+def fun_l17_n950()
+ fun_l18_n938
+end
+
+def fun_l17_n951()
+ fun_l18_n125
+end
+
+def fun_l17_n952()
+ fun_l18_n310
+end
+
+def fun_l17_n953()
+ fun_l18_n422
+end
+
+def fun_l17_n954()
+ fun_l18_n268
+end
+
+def fun_l17_n955()
+ fun_l18_n655
+end
+
+def fun_l17_n956()
+ fun_l18_n106
+end
+
+def fun_l17_n957()
+ fun_l18_n226
+end
+
+def fun_l17_n958()
+ fun_l18_n247
+end
+
+def fun_l17_n959()
+ fun_l18_n282
+end
+
+def fun_l17_n960()
+ fun_l18_n495
+end
+
+def fun_l17_n961()
+ fun_l18_n333
+end
+
+def fun_l17_n962()
+ fun_l18_n796
+end
+
+def fun_l17_n963()
+ fun_l18_n939
+end
+
+def fun_l17_n964()
+ fun_l18_n529
+end
+
+def fun_l17_n965()
+ fun_l18_n835
+end
+
+def fun_l17_n966()
+ fun_l18_n947
+end
+
+def fun_l17_n967()
+ fun_l18_n925
+end
+
+def fun_l17_n968()
+ fun_l18_n445
+end
+
+def fun_l17_n969()
+ fun_l18_n815
+end
+
+def fun_l17_n970()
+ fun_l18_n476
+end
+
+def fun_l17_n971()
+ fun_l18_n39
+end
+
+def fun_l17_n972()
+ fun_l18_n374
+end
+
+def fun_l17_n973()
+ fun_l18_n332
+end
+
+def fun_l17_n974()
+ fun_l18_n231
+end
+
+def fun_l17_n975()
+ fun_l18_n155
+end
+
+def fun_l17_n976()
+ fun_l18_n892
+end
+
+def fun_l17_n977()
+ fun_l18_n890
+end
+
+def fun_l17_n978()
+ fun_l18_n304
+end
+
+def fun_l17_n979()
+ fun_l18_n67
+end
+
+def fun_l17_n980()
+ fun_l18_n793
+end
+
+def fun_l17_n981()
+ fun_l18_n902
+end
+
+def fun_l17_n982()
+ fun_l18_n990
+end
+
+def fun_l17_n983()
+ fun_l18_n506
+end
+
+def fun_l17_n984()
+ fun_l18_n411
+end
+
+def fun_l17_n985()
+ fun_l18_n360
+end
+
+def fun_l17_n986()
+ fun_l18_n958
+end
+
+def fun_l17_n987()
+ fun_l18_n941
+end
+
+def fun_l17_n988()
+ fun_l18_n896
+end
+
+def fun_l17_n989()
+ fun_l18_n17
+end
+
+def fun_l17_n990()
+ fun_l18_n971
+end
+
+def fun_l17_n991()
+ fun_l18_n71
+end
+
+def fun_l17_n992()
+ fun_l18_n880
+end
+
+def fun_l17_n993()
+ fun_l18_n473
+end
+
+def fun_l17_n994()
+ fun_l18_n602
+end
+
+def fun_l17_n995()
+ fun_l18_n112
+end
+
+def fun_l17_n996()
+ fun_l18_n748
+end
+
+def fun_l17_n997()
+ fun_l18_n156
+end
+
+def fun_l17_n998()
+ fun_l18_n979
+end
+
+def fun_l17_n999()
+ fun_l18_n950
+end
+
+def fun_l18_n0()
+ fun_l19_n673
+end
+
+def fun_l18_n1()
+ fun_l19_n72
+end
+
+def fun_l18_n2()
+ fun_l19_n941
+end
+
+def fun_l18_n3()
+ fun_l19_n32
+end
+
+def fun_l18_n4()
+ fun_l19_n386
+end
+
+def fun_l18_n5()
+ fun_l19_n834
+end
+
+def fun_l18_n6()
+ fun_l19_n337
+end
+
+def fun_l18_n7()
+ fun_l19_n669
+end
+
+def fun_l18_n8()
+ fun_l19_n953
+end
+
+def fun_l18_n9()
+ fun_l19_n823
+end
+
+def fun_l18_n10()
+ fun_l19_n709
+end
+
+def fun_l18_n11()
+ fun_l19_n70
+end
+
+def fun_l18_n12()
+ fun_l19_n54
+end
+
+def fun_l18_n13()
+ fun_l19_n601
+end
+
+def fun_l18_n14()
+ fun_l19_n638
+end
+
+def fun_l18_n15()
+ fun_l19_n497
+end
+
+def fun_l18_n16()
+ fun_l19_n7
+end
+
+def fun_l18_n17()
+ fun_l19_n955
+end
+
+def fun_l18_n18()
+ fun_l19_n229
+end
+
+def fun_l18_n19()
+ fun_l19_n158
+end
+
+def fun_l18_n20()
+ fun_l19_n905
+end
+
+def fun_l18_n21()
+ fun_l19_n34
+end
+
+def fun_l18_n22()
+ fun_l19_n462
+end
+
+def fun_l18_n23()
+ fun_l19_n496
+end
+
+def fun_l18_n24()
+ fun_l19_n560
+end
+
+def fun_l18_n25()
+ fun_l19_n877
+end
+
+def fun_l18_n26()
+ fun_l19_n555
+end
+
+def fun_l18_n27()
+ fun_l19_n973
+end
+
+def fun_l18_n28()
+ fun_l19_n680
+end
+
+def fun_l18_n29()
+ fun_l19_n525
+end
+
+def fun_l18_n30()
+ fun_l19_n26
+end
+
+def fun_l18_n31()
+ fun_l19_n51
+end
+
+def fun_l18_n32()
+ fun_l19_n859
+end
+
+def fun_l18_n33()
+ fun_l19_n345
+end
+
+def fun_l18_n34()
+ fun_l19_n376
+end
+
+def fun_l18_n35()
+ fun_l19_n411
+end
+
+def fun_l18_n36()
+ fun_l19_n717
+end
+
+def fun_l18_n37()
+ fun_l19_n750
+end
+
+def fun_l18_n38()
+ fun_l19_n927
+end
+
+def fun_l18_n39()
+ fun_l19_n129
+end
+
+def fun_l18_n40()
+ fun_l19_n121
+end
+
+def fun_l18_n41()
+ fun_l19_n670
+end
+
+def fun_l18_n42()
+ fun_l19_n926
+end
+
+def fun_l18_n43()
+ fun_l19_n80
+end
+
+def fun_l18_n44()
+ fun_l19_n355
+end
+
+def fun_l18_n45()
+ fun_l19_n107
+end
+
+def fun_l18_n46()
+ fun_l19_n437
+end
+
+def fun_l18_n47()
+ fun_l19_n821
+end
+
+def fun_l18_n48()
+ fun_l19_n215
+end
+
+def fun_l18_n49()
+ fun_l19_n783
+end
+
+def fun_l18_n50()
+ fun_l19_n941
+end
+
+def fun_l18_n51()
+ fun_l19_n156
+end
+
+def fun_l18_n52()
+ fun_l19_n797
+end
+
+def fun_l18_n53()
+ fun_l19_n522
+end
+
+def fun_l18_n54()
+ fun_l19_n294
+end
+
+def fun_l18_n55()
+ fun_l19_n985
+end
+
+def fun_l18_n56()
+ fun_l19_n709
+end
+
+def fun_l18_n57()
+ fun_l19_n492
+end
+
+def fun_l18_n58()
+ fun_l19_n460
+end
+
+def fun_l18_n59()
+ fun_l19_n186
+end
+
+def fun_l18_n60()
+ fun_l19_n764
+end
+
+def fun_l18_n61()
+ fun_l19_n439
+end
+
+def fun_l18_n62()
+ fun_l19_n568
+end
+
+def fun_l18_n63()
+ fun_l19_n797
+end
+
+def fun_l18_n64()
+ fun_l19_n542
+end
+
+def fun_l18_n65()
+ fun_l19_n985
+end
+
+def fun_l18_n66()
+ fun_l19_n787
+end
+
+def fun_l18_n67()
+ fun_l19_n447
+end
+
+def fun_l18_n68()
+ fun_l19_n567
+end
+
+def fun_l18_n69()
+ fun_l19_n406
+end
+
+def fun_l18_n70()
+ fun_l19_n984
+end
+
+def fun_l18_n71()
+ fun_l19_n58
+end
+
+def fun_l18_n72()
+ fun_l19_n820
+end
+
+def fun_l18_n73()
+ fun_l19_n831
+end
+
+def fun_l18_n74()
+ fun_l19_n533
+end
+
+def fun_l18_n75()
+ fun_l19_n277
+end
+
+def fun_l18_n76()
+ fun_l19_n92
+end
+
+def fun_l18_n77()
+ fun_l19_n965
+end
+
+def fun_l18_n78()
+ fun_l19_n127
+end
+
+def fun_l18_n79()
+ fun_l19_n728
+end
+
+def fun_l18_n80()
+ fun_l19_n672
+end
+
+def fun_l18_n81()
+ fun_l19_n748
+end
+
+def fun_l18_n82()
+ fun_l19_n485
+end
+
+def fun_l18_n83()
+ fun_l19_n815
+end
+
+def fun_l18_n84()
+ fun_l19_n957
+end
+
+def fun_l18_n85()
+ fun_l19_n884
+end
+
+def fun_l18_n86()
+ fun_l19_n107
+end
+
+def fun_l18_n87()
+ fun_l19_n255
+end
+
+def fun_l18_n88()
+ fun_l19_n498
+end
+
+def fun_l18_n89()
+ fun_l19_n589
+end
+
+def fun_l18_n90()
+ fun_l19_n726
+end
+
+def fun_l18_n91()
+ fun_l19_n755
+end
+
+def fun_l18_n92()
+ fun_l19_n855
+end
+
+def fun_l18_n93()
+ fun_l19_n490
+end
+
+def fun_l18_n94()
+ fun_l19_n463
+end
+
+def fun_l18_n95()
+ fun_l19_n213
+end
+
+def fun_l18_n96()
+ fun_l19_n946
+end
+
+def fun_l18_n97()
+ fun_l19_n319
+end
+
+def fun_l18_n98()
+ fun_l19_n565
+end
+
+def fun_l18_n99()
+ fun_l19_n805
+end
+
+def fun_l18_n100()
+ fun_l19_n21
+end
+
+def fun_l18_n101()
+ fun_l19_n168
+end
+
+def fun_l18_n102()
+ fun_l19_n462
+end
+
+def fun_l18_n103()
+ fun_l19_n15
+end
+
+def fun_l18_n104()
+ fun_l19_n408
+end
+
+def fun_l18_n105()
+ fun_l19_n736
+end
+
+def fun_l18_n106()
+ fun_l19_n313
+end
+
+def fun_l18_n107()
+ fun_l19_n736
+end
+
+def fun_l18_n108()
+ fun_l19_n703
+end
+
+def fun_l18_n109()
+ fun_l19_n456
+end
+
+def fun_l18_n110()
+ fun_l19_n467
+end
+
+def fun_l18_n111()
+ fun_l19_n287
+end
+
+def fun_l18_n112()
+ fun_l19_n630
+end
+
+def fun_l18_n113()
+ fun_l19_n499
+end
+
+def fun_l18_n114()
+ fun_l19_n308
+end
+
+def fun_l18_n115()
+ fun_l19_n902
+end
+
+def fun_l18_n116()
+ fun_l19_n894
+end
+
+def fun_l18_n117()
+ fun_l19_n545
+end
+
+def fun_l18_n118()
+ fun_l19_n467
+end
+
+def fun_l18_n119()
+ fun_l19_n791
+end
+
+def fun_l18_n120()
+ fun_l19_n845
+end
+
+def fun_l18_n121()
+ fun_l19_n376
+end
+
+def fun_l18_n122()
+ fun_l19_n898
+end
+
+def fun_l18_n123()
+ fun_l19_n200
+end
+
+def fun_l18_n124()
+ fun_l19_n415
+end
+
+def fun_l18_n125()
+ fun_l19_n80
+end
+
+def fun_l18_n126()
+ fun_l19_n6
+end
+
+def fun_l18_n127()
+ fun_l19_n150
+end
+
+def fun_l18_n128()
+ fun_l19_n223
+end
+
+def fun_l18_n129()
+ fun_l19_n179
+end
+
+def fun_l18_n130()
+ fun_l19_n687
+end
+
+def fun_l18_n131()
+ fun_l19_n625
+end
+
+def fun_l18_n132()
+ fun_l19_n332
+end
+
+def fun_l18_n133()
+ fun_l19_n87
+end
+
+def fun_l18_n134()
+ fun_l19_n469
+end
+
+def fun_l18_n135()
+ fun_l19_n4
+end
+
+def fun_l18_n136()
+ fun_l19_n142
+end
+
+def fun_l18_n137()
+ fun_l19_n506
+end
+
+def fun_l18_n138()
+ fun_l19_n227
+end
+
+def fun_l18_n139()
+ fun_l19_n332
+end
+
+def fun_l18_n140()
+ fun_l19_n18
+end
+
+def fun_l18_n141()
+ fun_l19_n773
+end
+
+def fun_l18_n142()
+ fun_l19_n306
+end
+
+def fun_l18_n143()
+ fun_l19_n376
+end
+
+def fun_l18_n144()
+ fun_l19_n524
+end
+
+def fun_l18_n145()
+ fun_l19_n61
+end
+
+def fun_l18_n146()
+ fun_l19_n635
+end
+
+def fun_l18_n147()
+ fun_l19_n816
+end
+
+def fun_l18_n148()
+ fun_l19_n398
+end
+
+def fun_l18_n149()
+ fun_l19_n408
+end
+
+def fun_l18_n150()
+ fun_l19_n889
+end
+
+def fun_l18_n151()
+ fun_l19_n167
+end
+
+def fun_l18_n152()
+ fun_l19_n436
+end
+
+def fun_l18_n153()
+ fun_l19_n738
+end
+
+def fun_l18_n154()
+ fun_l19_n382
+end
+
+def fun_l18_n155()
+ fun_l19_n260
+end
+
+def fun_l18_n156()
+ fun_l19_n227
+end
+
+def fun_l18_n157()
+ fun_l19_n191
+end
+
+def fun_l18_n158()
+ fun_l19_n269
+end
+
+def fun_l18_n159()
+ fun_l19_n599
+end
+
+def fun_l18_n160()
+ fun_l19_n992
+end
+
+def fun_l18_n161()
+ fun_l19_n754
+end
+
+def fun_l18_n162()
+ fun_l19_n578
+end
+
+def fun_l18_n163()
+ fun_l19_n162
+end
+
+def fun_l18_n164()
+ fun_l19_n88
+end
+
+def fun_l18_n165()
+ fun_l19_n592
+end
+
+def fun_l18_n166()
+ fun_l19_n621
+end
+
+def fun_l18_n167()
+ fun_l19_n398
+end
+
+def fun_l18_n168()
+ fun_l19_n585
+end
+
+def fun_l18_n169()
+ fun_l19_n51
+end
+
+def fun_l18_n170()
+ fun_l19_n715
+end
+
+def fun_l18_n171()
+ fun_l19_n841
+end
+
+def fun_l18_n172()
+ fun_l19_n882
+end
+
+def fun_l18_n173()
+ fun_l19_n676
+end
+
+def fun_l18_n174()
+ fun_l19_n93
+end
+
+def fun_l18_n175()
+ fun_l19_n41
+end
+
+def fun_l18_n176()
+ fun_l19_n565
+end
+
+def fun_l18_n177()
+ fun_l19_n895
+end
+
+def fun_l18_n178()
+ fun_l19_n743
+end
+
+def fun_l18_n179()
+ fun_l19_n679
+end
+
+def fun_l18_n180()
+ fun_l19_n77
+end
+
+def fun_l18_n181()
+ fun_l19_n539
+end
+
+def fun_l18_n182()
+ fun_l19_n439
+end
+
+def fun_l18_n183()
+ fun_l19_n758
+end
+
+def fun_l18_n184()
+ fun_l19_n327
+end
+
+def fun_l18_n185()
+ fun_l19_n257
+end
+
+def fun_l18_n186()
+ fun_l19_n544
+end
+
+def fun_l18_n187()
+ fun_l19_n632
+end
+
+def fun_l18_n188()
+ fun_l19_n83
+end
+
+def fun_l18_n189()
+ fun_l19_n88
+end
+
+def fun_l18_n190()
+ fun_l19_n244
+end
+
+def fun_l18_n191()
+ fun_l19_n403
+end
+
+def fun_l18_n192()
+ fun_l19_n644
+end
+
+def fun_l18_n193()
+ fun_l19_n953
+end
+
+def fun_l18_n194()
+ fun_l19_n690
+end
+
+def fun_l18_n195()
+ fun_l19_n534
+end
+
+def fun_l18_n196()
+ fun_l19_n352
+end
+
+def fun_l18_n197()
+ fun_l19_n502
+end
+
+def fun_l18_n198()
+ fun_l19_n924
+end
+
+def fun_l18_n199()
+ fun_l19_n815
+end
+
+def fun_l18_n200()
+ fun_l19_n910
+end
+
+def fun_l18_n201()
+ fun_l19_n391
+end
+
+def fun_l18_n202()
+ fun_l19_n144
+end
+
+def fun_l18_n203()
+ fun_l19_n823
+end
+
+def fun_l18_n204()
+ fun_l19_n732
+end
+
+def fun_l18_n205()
+ fun_l19_n109
+end
+
+def fun_l18_n206()
+ fun_l19_n677
+end
+
+def fun_l18_n207()
+ fun_l19_n736
+end
+
+def fun_l18_n208()
+ fun_l19_n141
+end
+
+def fun_l18_n209()
+ fun_l19_n45
+end
+
+def fun_l18_n210()
+ fun_l19_n11
+end
+
+def fun_l18_n211()
+ fun_l19_n924
+end
+
+def fun_l18_n212()
+ fun_l19_n940
+end
+
+def fun_l18_n213()
+ fun_l19_n683
+end
+
+def fun_l18_n214()
+ fun_l19_n383
+end
+
+def fun_l18_n215()
+ fun_l19_n798
+end
+
+def fun_l18_n216()
+ fun_l19_n99
+end
+
+def fun_l18_n217()
+ fun_l19_n814
+end
+
+def fun_l18_n218()
+ fun_l19_n827
+end
+
+def fun_l18_n219()
+ fun_l19_n629
+end
+
+def fun_l18_n220()
+ fun_l19_n814
+end
+
+def fun_l18_n221()
+ fun_l19_n452
+end
+
+def fun_l18_n222()
+ fun_l19_n388
+end
+
+def fun_l18_n223()
+ fun_l19_n324
+end
+
+def fun_l18_n224()
+ fun_l19_n233
+end
+
+def fun_l18_n225()
+ fun_l19_n596
+end
+
+def fun_l18_n226()
+ fun_l19_n396
+end
+
+def fun_l18_n227()
+ fun_l19_n529
+end
+
+def fun_l18_n228()
+ fun_l19_n603
+end
+
+def fun_l18_n229()
+ fun_l19_n76
+end
+
+def fun_l18_n230()
+ fun_l19_n799
+end
+
+def fun_l18_n231()
+ fun_l19_n576
+end
+
+def fun_l18_n232()
+ fun_l19_n35
+end
+
+def fun_l18_n233()
+ fun_l19_n883
+end
+
+def fun_l18_n234()
+ fun_l19_n776
+end
+
+def fun_l18_n235()
+ fun_l19_n478
+end
+
+def fun_l18_n236()
+ fun_l19_n922
+end
+
+def fun_l18_n237()
+ fun_l19_n636
+end
+
+def fun_l18_n238()
+ fun_l19_n680
+end
+
+def fun_l18_n239()
+ fun_l19_n735
+end
+
+def fun_l18_n240()
+ fun_l19_n893
+end
+
+def fun_l18_n241()
+ fun_l19_n785
+end
+
+def fun_l18_n242()
+ fun_l19_n325
+end
+
+def fun_l18_n243()
+ fun_l19_n25
+end
+
+def fun_l18_n244()
+ fun_l19_n930
+end
+
+def fun_l18_n245()
+ fun_l19_n747
+end
+
+def fun_l18_n246()
+ fun_l19_n808
+end
+
+def fun_l18_n247()
+ fun_l19_n356
+end
+
+def fun_l18_n248()
+ fun_l19_n16
+end
+
+def fun_l18_n249()
+ fun_l19_n191
+end
+
+def fun_l18_n250()
+ fun_l19_n772
+end
+
+def fun_l18_n251()
+ fun_l19_n247
+end
+
+def fun_l18_n252()
+ fun_l19_n112
+end
+
+def fun_l18_n253()
+ fun_l19_n22
+end
+
+def fun_l18_n254()
+ fun_l19_n15
+end
+
+def fun_l18_n255()
+ fun_l19_n444
+end
+
+def fun_l18_n256()
+ fun_l19_n498
+end
+
+def fun_l18_n257()
+ fun_l19_n403
+end
+
+def fun_l18_n258()
+ fun_l19_n572
+end
+
+def fun_l18_n259()
+ fun_l19_n451
+end
+
+def fun_l18_n260()
+ fun_l19_n224
+end
+
+def fun_l18_n261()
+ fun_l19_n197
+end
+
+def fun_l18_n262()
+ fun_l19_n891
+end
+
+def fun_l18_n263()
+ fun_l19_n612
+end
+
+def fun_l18_n264()
+ fun_l19_n107
+end
+
+def fun_l18_n265()
+ fun_l19_n267
+end
+
+def fun_l18_n266()
+ fun_l19_n746
+end
+
+def fun_l18_n267()
+ fun_l19_n547
+end
+
+def fun_l18_n268()
+ fun_l19_n608
+end
+
+def fun_l18_n269()
+ fun_l19_n474
+end
+
+def fun_l18_n270()
+ fun_l19_n285
+end
+
+def fun_l18_n271()
+ fun_l19_n970
+end
+
+def fun_l18_n272()
+ fun_l19_n227
+end
+
+def fun_l18_n273()
+ fun_l19_n440
+end
+
+def fun_l18_n274()
+ fun_l19_n816
+end
+
+def fun_l18_n275()
+ fun_l19_n320
+end
+
+def fun_l18_n276()
+ fun_l19_n237
+end
+
+def fun_l18_n277()
+ fun_l19_n37
+end
+
+def fun_l18_n278()
+ fun_l19_n408
+end
+
+def fun_l18_n279()
+ fun_l19_n229
+end
+
+def fun_l18_n280()
+ fun_l19_n576
+end
+
+def fun_l18_n281()
+ fun_l19_n422
+end
+
+def fun_l18_n282()
+ fun_l19_n725
+end
+
+def fun_l18_n283()
+ fun_l19_n498
+end
+
+def fun_l18_n284()
+ fun_l19_n28
+end
+
+def fun_l18_n285()
+ fun_l19_n711
+end
+
+def fun_l18_n286()
+ fun_l19_n222
+end
+
+def fun_l18_n287()
+ fun_l19_n688
+end
+
+def fun_l18_n288()
+ fun_l19_n885
+end
+
+def fun_l18_n289()
+ fun_l19_n522
+end
+
+def fun_l18_n290()
+ fun_l19_n776
+end
+
+def fun_l18_n291()
+ fun_l19_n862
+end
+
+def fun_l18_n292()
+ fun_l19_n415
+end
+
+def fun_l18_n293()
+ fun_l19_n194
+end
+
+def fun_l18_n294()
+ fun_l19_n652
+end
+
+def fun_l18_n295()
+ fun_l19_n929
+end
+
+def fun_l18_n296()
+ fun_l19_n923
+end
+
+def fun_l18_n297()
+ fun_l19_n104
+end
+
+def fun_l18_n298()
+ fun_l19_n191
+end
+
+def fun_l18_n299()
+ fun_l19_n996
+end
+
+def fun_l18_n300()
+ fun_l19_n426
+end
+
+def fun_l18_n301()
+ fun_l19_n698
+end
+
+def fun_l18_n302()
+ fun_l19_n397
+end
+
+def fun_l18_n303()
+ fun_l19_n287
+end
+
+def fun_l18_n304()
+ fun_l19_n731
+end
+
+def fun_l18_n305()
+ fun_l19_n162
+end
+
+def fun_l18_n306()
+ fun_l19_n794
+end
+
+def fun_l18_n307()
+ fun_l19_n234
+end
+
+def fun_l18_n308()
+ fun_l19_n184
+end
+
+def fun_l18_n309()
+ fun_l19_n314
+end
+
+def fun_l18_n310()
+ fun_l19_n259
+end
+
+def fun_l18_n311()
+ fun_l19_n687
+end
+
+def fun_l18_n312()
+ fun_l19_n653
+end
+
+def fun_l18_n313()
+ fun_l19_n834
+end
+
+def fun_l18_n314()
+ fun_l19_n519
+end
+
+def fun_l18_n315()
+ fun_l19_n706
+end
+
+def fun_l18_n316()
+ fun_l19_n860
+end
+
+def fun_l18_n317()
+ fun_l19_n99
+end
+
+def fun_l18_n318()
+ fun_l19_n757
+end
+
+def fun_l18_n319()
+ fun_l19_n860
+end
+
+def fun_l18_n320()
+ fun_l19_n266
+end
+
+def fun_l18_n321()
+ fun_l19_n802
+end
+
+def fun_l18_n322()
+ fun_l19_n349
+end
+
+def fun_l18_n323()
+ fun_l19_n408
+end
+
+def fun_l18_n324()
+ fun_l19_n539
+end
+
+def fun_l18_n325()
+ fun_l19_n696
+end
+
+def fun_l18_n326()
+ fun_l19_n233
+end
+
+def fun_l18_n327()
+ fun_l19_n476
+end
+
+def fun_l18_n328()
+ fun_l19_n101
+end
+
+def fun_l18_n329()
+ fun_l19_n881
+end
+
+def fun_l18_n330()
+ fun_l19_n699
+end
+
+def fun_l18_n331()
+ fun_l19_n559
+end
+
+def fun_l18_n332()
+ fun_l19_n990
+end
+
+def fun_l18_n333()
+ fun_l19_n382
+end
+
+def fun_l18_n334()
+ fun_l19_n941
+end
+
+def fun_l18_n335()
+ fun_l19_n363
+end
+
+def fun_l18_n336()
+ fun_l19_n870
+end
+
+def fun_l18_n337()
+ fun_l19_n250
+end
+
+def fun_l18_n338()
+ fun_l19_n209
+end
+
+def fun_l18_n339()
+ fun_l19_n156
+end
+
+def fun_l18_n340()
+ fun_l19_n320
+end
+
+def fun_l18_n341()
+ fun_l19_n320
+end
+
+def fun_l18_n342()
+ fun_l19_n68
+end
+
+def fun_l18_n343()
+ fun_l19_n823
+end
+
+def fun_l18_n344()
+ fun_l19_n713
+end
+
+def fun_l18_n345()
+ fun_l19_n893
+end
+
+def fun_l18_n346()
+ fun_l19_n628
+end
+
+def fun_l18_n347()
+ fun_l19_n429
+end
+
+def fun_l18_n348()
+ fun_l19_n766
+end
+
+def fun_l18_n349()
+ fun_l19_n937
+end
+
+def fun_l18_n350()
+ fun_l19_n983
+end
+
+def fun_l18_n351()
+ fun_l19_n131
+end
+
+def fun_l18_n352()
+ fun_l19_n76
+end
+
+def fun_l18_n353()
+ fun_l19_n225
+end
+
+def fun_l18_n354()
+ fun_l19_n979
+end
+
+def fun_l18_n355()
+ fun_l19_n279
+end
+
+def fun_l18_n356()
+ fun_l19_n434
+end
+
+def fun_l18_n357()
+ fun_l19_n723
+end
+
+def fun_l18_n358()
+ fun_l19_n44
+end
+
+def fun_l18_n359()
+ fun_l19_n895
+end
+
+def fun_l18_n360()
+ fun_l19_n602
+end
+
+def fun_l18_n361()
+ fun_l19_n420
+end
+
+def fun_l18_n362()
+ fun_l19_n318
+end
+
+def fun_l18_n363()
+ fun_l19_n990
+end
+
+def fun_l18_n364()
+ fun_l19_n318
+end
+
+def fun_l18_n365()
+ fun_l19_n640
+end
+
+def fun_l18_n366()
+ fun_l19_n679
+end
+
+def fun_l18_n367()
+ fun_l19_n572
+end
+
+def fun_l18_n368()
+ fun_l19_n411
+end
+
+def fun_l18_n369()
+ fun_l19_n703
+end
+
+def fun_l18_n370()
+ fun_l19_n39
+end
+
+def fun_l18_n371()
+ fun_l19_n656
+end
+
+def fun_l18_n372()
+ fun_l19_n960
+end
+
+def fun_l18_n373()
+ fun_l19_n491
+end
+
+def fun_l18_n374()
+ fun_l19_n916
+end
+
+def fun_l18_n375()
+ fun_l19_n413
+end
+
+def fun_l18_n376()
+ fun_l19_n90
+end
+
+def fun_l18_n377()
+ fun_l19_n790
+end
+
+def fun_l18_n378()
+ fun_l19_n424
+end
+
+def fun_l18_n379()
+ fun_l19_n578
+end
+
+def fun_l18_n380()
+ fun_l19_n555
+end
+
+def fun_l18_n381()
+ fun_l19_n405
+end
+
+def fun_l18_n382()
+ fun_l19_n378
+end
+
+def fun_l18_n383()
+ fun_l19_n594
+end
+
+def fun_l18_n384()
+ fun_l19_n593
+end
+
+def fun_l18_n385()
+ fun_l19_n115
+end
+
+def fun_l18_n386()
+ fun_l19_n67
+end
+
+def fun_l18_n387()
+ fun_l19_n531
+end
+
+def fun_l18_n388()
+ fun_l19_n7
+end
+
+def fun_l18_n389()
+ fun_l19_n535
+end
+
+def fun_l18_n390()
+ fun_l19_n35
+end
+
+def fun_l18_n391()
+ fun_l19_n410
+end
+
+def fun_l18_n392()
+ fun_l19_n811
+end
+
+def fun_l18_n393()
+ fun_l19_n719
+end
+
+def fun_l18_n394()
+ fun_l19_n859
+end
+
+def fun_l18_n395()
+ fun_l19_n491
+end
+
+def fun_l18_n396()
+ fun_l19_n131
+end
+
+def fun_l18_n397()
+ fun_l19_n501
+end
+
+def fun_l18_n398()
+ fun_l19_n917
+end
+
+def fun_l18_n399()
+ fun_l19_n467
+end
+
+def fun_l18_n400()
+ fun_l19_n189
+end
+
+def fun_l18_n401()
+ fun_l19_n135
+end
+
+def fun_l18_n402()
+ fun_l19_n105
+end
+
+def fun_l18_n403()
+ fun_l19_n120
+end
+
+def fun_l18_n404()
+ fun_l19_n611
+end
+
+def fun_l18_n405()
+ fun_l19_n386
+end
+
+def fun_l18_n406()
+ fun_l19_n239
+end
+
+def fun_l18_n407()
+ fun_l19_n717
+end
+
+def fun_l18_n408()
+ fun_l19_n425
+end
+
+def fun_l18_n409()
+ fun_l19_n500
+end
+
+def fun_l18_n410()
+ fun_l19_n424
+end
+
+def fun_l18_n411()
+ fun_l19_n654
+end
+
+def fun_l18_n412()
+ fun_l19_n243
+end
+
+def fun_l18_n413()
+ fun_l19_n920
+end
+
+def fun_l18_n414()
+ fun_l19_n556
+end
+
+def fun_l18_n415()
+ fun_l19_n693
+end
+
+def fun_l18_n416()
+ fun_l19_n656
+end
+
+def fun_l18_n417()
+ fun_l19_n596
+end
+
+def fun_l18_n418()
+ fun_l19_n573
+end
+
+def fun_l18_n419()
+ fun_l19_n504
+end
+
+def fun_l18_n420()
+ fun_l19_n5
+end
+
+def fun_l18_n421()
+ fun_l19_n554
+end
+
+def fun_l18_n422()
+ fun_l19_n852
+end
+
+def fun_l18_n423()
+ fun_l19_n725
+end
+
+def fun_l18_n424()
+ fun_l19_n121
+end
+
+def fun_l18_n425()
+ fun_l19_n184
+end
+
+def fun_l18_n426()
+ fun_l19_n752
+end
+
+def fun_l18_n427()
+ fun_l19_n636
+end
+
+def fun_l18_n428()
+ fun_l19_n858
+end
+
+def fun_l18_n429()
+ fun_l19_n249
+end
+
+def fun_l18_n430()
+ fun_l19_n696
+end
+
+def fun_l18_n431()
+ fun_l19_n560
+end
+
+def fun_l18_n432()
+ fun_l19_n978
+end
+
+def fun_l18_n433()
+ fun_l19_n776
+end
+
+def fun_l18_n434()
+ fun_l19_n954
+end
+
+def fun_l18_n435()
+ fun_l19_n552
+end
+
+def fun_l18_n436()
+ fun_l19_n238
+end
+
+def fun_l18_n437()
+ fun_l19_n496
+end
+
+def fun_l18_n438()
+ fun_l19_n444
+end
+
+def fun_l18_n439()
+ fun_l19_n632
+end
+
+def fun_l18_n440()
+ fun_l19_n243
+end
+
+def fun_l18_n441()
+ fun_l19_n41
+end
+
+def fun_l18_n442()
+ fun_l19_n267
+end
+
+def fun_l18_n443()
+ fun_l19_n449
+end
+
+def fun_l18_n444()
+ fun_l19_n718
+end
+
+def fun_l18_n445()
+ fun_l19_n458
+end
+
+def fun_l18_n446()
+ fun_l19_n23
+end
+
+def fun_l18_n447()
+ fun_l19_n642
+end
+
+def fun_l18_n448()
+ fun_l19_n46
+end
+
+def fun_l18_n449()
+ fun_l19_n812
+end
+
+def fun_l18_n450()
+ fun_l19_n659
+end
+
+def fun_l18_n451()
+ fun_l19_n499
+end
+
+def fun_l18_n452()
+ fun_l19_n691
+end
+
+def fun_l18_n453()
+ fun_l19_n453
+end
+
+def fun_l18_n454()
+ fun_l19_n348
+end
+
+def fun_l18_n455()
+ fun_l19_n115
+end
+
+def fun_l18_n456()
+ fun_l19_n429
+end
+
+def fun_l18_n457()
+ fun_l19_n751
+end
+
+def fun_l18_n458()
+ fun_l19_n669
+end
+
+def fun_l18_n459()
+ fun_l19_n692
+end
+
+def fun_l18_n460()
+ fun_l19_n510
+end
+
+def fun_l18_n461()
+ fun_l19_n276
+end
+
+def fun_l18_n462()
+ fun_l19_n967
+end
+
+def fun_l18_n463()
+ fun_l19_n464
+end
+
+def fun_l18_n464()
+ fun_l19_n742
+end
+
+def fun_l18_n465()
+ fun_l19_n512
+end
+
+def fun_l18_n466()
+ fun_l19_n864
+end
+
+def fun_l18_n467()
+ fun_l19_n956
+end
+
+def fun_l18_n468()
+ fun_l19_n547
+end
+
+def fun_l18_n469()
+ fun_l19_n875
+end
+
+def fun_l18_n470()
+ fun_l19_n840
+end
+
+def fun_l18_n471()
+ fun_l19_n37
+end
+
+def fun_l18_n472()
+ fun_l19_n499
+end
+
+def fun_l18_n473()
+ fun_l19_n112
+end
+
+def fun_l18_n474()
+ fun_l19_n293
+end
+
+def fun_l18_n475()
+ fun_l19_n320
+end
+
+def fun_l18_n476()
+ fun_l19_n502
+end
+
+def fun_l18_n477()
+ fun_l19_n224
+end
+
+def fun_l18_n478()
+ fun_l19_n145
+end
+
+def fun_l18_n479()
+ fun_l19_n71
+end
+
+def fun_l18_n480()
+ fun_l19_n349
+end
+
+def fun_l18_n481()
+ fun_l19_n302
+end
+
+def fun_l18_n482()
+ fun_l19_n205
+end
+
+def fun_l18_n483()
+ fun_l19_n951
+end
+
+def fun_l18_n484()
+ fun_l19_n630
+end
+
+def fun_l18_n485()
+ fun_l19_n288
+end
+
+def fun_l18_n486()
+ fun_l19_n542
+end
+
+def fun_l18_n487()
+ fun_l19_n146
+end
+
+def fun_l18_n488()
+ fun_l19_n530
+end
+
+def fun_l18_n489()
+ fun_l19_n762
+end
+
+def fun_l18_n490()
+ fun_l19_n207
+end
+
+def fun_l18_n491()
+ fun_l19_n915
+end
+
+def fun_l18_n492()
+ fun_l19_n424
+end
+
+def fun_l18_n493()
+ fun_l19_n959
+end
+
+def fun_l18_n494()
+ fun_l19_n4
+end
+
+def fun_l18_n495()
+ fun_l19_n349
+end
+
+def fun_l18_n496()
+ fun_l19_n533
+end
+
+def fun_l18_n497()
+ fun_l19_n727
+end
+
+def fun_l18_n498()
+ fun_l19_n42
+end
+
+def fun_l18_n499()
+ fun_l19_n321
+end
+
+def fun_l18_n500()
+ fun_l19_n440
+end
+
+def fun_l18_n501()
+ fun_l19_n401
+end
+
+def fun_l18_n502()
+ fun_l19_n857
+end
+
+def fun_l18_n503()
+ fun_l19_n750
+end
+
+def fun_l18_n504()
+ fun_l19_n494
+end
+
+def fun_l18_n505()
+ fun_l19_n848
+end
+
+def fun_l18_n506()
+ fun_l19_n676
+end
+
+def fun_l18_n507()
+ fun_l19_n390
+end
+
+def fun_l18_n508()
+ fun_l19_n135
+end
+
+def fun_l18_n509()
+ fun_l19_n241
+end
+
+def fun_l18_n510()
+ fun_l19_n290
+end
+
+def fun_l18_n511()
+ fun_l19_n912
+end
+
+def fun_l18_n512()
+ fun_l19_n410
+end
+
+def fun_l18_n513()
+ fun_l19_n911
+end
+
+def fun_l18_n514()
+ fun_l19_n173
+end
+
+def fun_l18_n515()
+ fun_l19_n383
+end
+
+def fun_l18_n516()
+ fun_l19_n540
+end
+
+def fun_l18_n517()
+ fun_l19_n434
+end
+
+def fun_l18_n518()
+ fun_l19_n997
+end
+
+def fun_l18_n519()
+ fun_l19_n355
+end
+
+def fun_l18_n520()
+ fun_l19_n825
+end
+
+def fun_l18_n521()
+ fun_l19_n711
+end
+
+def fun_l18_n522()
+ fun_l19_n937
+end
+
+def fun_l18_n523()
+ fun_l19_n191
+end
+
+def fun_l18_n524()
+ fun_l19_n284
+end
+
+def fun_l18_n525()
+ fun_l19_n483
+end
+
+def fun_l18_n526()
+ fun_l19_n163
+end
+
+def fun_l18_n527()
+ fun_l19_n514
+end
+
+def fun_l18_n528()
+ fun_l19_n111
+end
+
+def fun_l18_n529()
+ fun_l19_n339
+end
+
+def fun_l18_n530()
+ fun_l19_n322
+end
+
+def fun_l18_n531()
+ fun_l19_n208
+end
+
+def fun_l18_n532()
+ fun_l19_n34
+end
+
+def fun_l18_n533()
+ fun_l19_n106
+end
+
+def fun_l18_n534()
+ fun_l19_n532
+end
+
+def fun_l18_n535()
+ fun_l19_n277
+end
+
+def fun_l18_n536()
+ fun_l19_n936
+end
+
+def fun_l18_n537()
+ fun_l19_n955
+end
+
+def fun_l18_n538()
+ fun_l19_n75
+end
+
+def fun_l18_n539()
+ fun_l19_n349
+end
+
+def fun_l18_n540()
+ fun_l19_n430
+end
+
+def fun_l18_n541()
+ fun_l19_n598
+end
+
+def fun_l18_n542()
+ fun_l19_n336
+end
+
+def fun_l18_n543()
+ fun_l19_n763
+end
+
+def fun_l18_n544()
+ fun_l19_n150
+end
+
+def fun_l18_n545()
+ fun_l19_n301
+end
+
+def fun_l18_n546()
+ fun_l19_n600
+end
+
+def fun_l18_n547()
+ fun_l19_n576
+end
+
+def fun_l18_n548()
+ fun_l19_n119
+end
+
+def fun_l18_n549()
+ fun_l19_n681
+end
+
+def fun_l18_n550()
+ fun_l19_n303
+end
+
+def fun_l18_n551()
+ fun_l19_n498
+end
+
+def fun_l18_n552()
+ fun_l19_n75
+end
+
+def fun_l18_n553()
+ fun_l19_n690
+end
+
+def fun_l18_n554()
+ fun_l19_n496
+end
+
+def fun_l18_n555()
+ fun_l19_n542
+end
+
+def fun_l18_n556()
+ fun_l19_n684
+end
+
+def fun_l18_n557()
+ fun_l19_n315
+end
+
+def fun_l18_n558()
+ fun_l19_n470
+end
+
+def fun_l18_n559()
+ fun_l19_n357
+end
+
+def fun_l18_n560()
+ fun_l19_n805
+end
+
+def fun_l18_n561()
+ fun_l19_n306
+end
+
+def fun_l18_n562()
+ fun_l19_n460
+end
+
+def fun_l18_n563()
+ fun_l19_n173
+end
+
+def fun_l18_n564()
+ fun_l19_n327
+end
+
+def fun_l18_n565()
+ fun_l19_n871
+end
+
+def fun_l18_n566()
+ fun_l19_n792
+end
+
+def fun_l18_n567()
+ fun_l19_n251
+end
+
+def fun_l18_n568()
+ fun_l19_n113
+end
+
+def fun_l18_n569()
+ fun_l19_n877
+end
+
+def fun_l18_n570()
+ fun_l19_n921
+end
+
+def fun_l18_n571()
+ fun_l19_n610
+end
+
+def fun_l18_n572()
+ fun_l19_n895
+end
+
+def fun_l18_n573()
+ fun_l19_n215
+end
+
+def fun_l18_n574()
+ fun_l19_n751
+end
+
+def fun_l18_n575()
+ fun_l19_n2
+end
+
+def fun_l18_n576()
+ fun_l19_n32
+end
+
+def fun_l18_n577()
+ fun_l19_n447
+end
+
+def fun_l18_n578()
+ fun_l19_n652
+end
+
+def fun_l18_n579()
+ fun_l19_n74
+end
+
+def fun_l18_n580()
+ fun_l19_n487
+end
+
+def fun_l18_n581()
+ fun_l19_n522
+end
+
+def fun_l18_n582()
+ fun_l19_n422
+end
+
+def fun_l18_n583()
+ fun_l19_n951
+end
+
+def fun_l18_n584()
+ fun_l19_n216
+end
+
+def fun_l18_n585()
+ fun_l19_n897
+end
+
+def fun_l18_n586()
+ fun_l19_n469
+end
+
+def fun_l18_n587()
+ fun_l19_n315
+end
+
+def fun_l18_n588()
+ fun_l19_n937
+end
+
+def fun_l18_n589()
+ fun_l19_n685
+end
+
+def fun_l18_n590()
+ fun_l19_n322
+end
+
+def fun_l18_n591()
+ fun_l19_n234
+end
+
+def fun_l18_n592()
+ fun_l19_n693
+end
+
+def fun_l18_n593()
+ fun_l19_n941
+end
+
+def fun_l18_n594()
+ fun_l19_n626
+end
+
+def fun_l18_n595()
+ fun_l19_n729
+end
+
+def fun_l18_n596()
+ fun_l19_n65
+end
+
+def fun_l18_n597()
+ fun_l19_n359
+end
+
+def fun_l18_n598()
+ fun_l19_n826
+end
+
+def fun_l18_n599()
+ fun_l19_n631
+end
+
+def fun_l18_n600()
+ fun_l19_n156
+end
+
+def fun_l18_n601()
+ fun_l19_n132
+end
+
+def fun_l18_n602()
+ fun_l19_n23
+end
+
+def fun_l18_n603()
+ fun_l19_n867
+end
+
+def fun_l18_n604()
+ fun_l19_n327
+end
+
+def fun_l18_n605()
+ fun_l19_n9
+end
+
+def fun_l18_n606()
+ fun_l19_n99
+end
+
+def fun_l18_n607()
+ fun_l19_n597
+end
+
+def fun_l18_n608()
+ fun_l19_n969
+end
+
+def fun_l18_n609()
+ fun_l19_n106
+end
+
+def fun_l18_n610()
+ fun_l19_n183
+end
+
+def fun_l18_n611()
+ fun_l19_n956
+end
+
+def fun_l18_n612()
+ fun_l19_n661
+end
+
+def fun_l18_n613()
+ fun_l19_n562
+end
+
+def fun_l18_n614()
+ fun_l19_n49
+end
+
+def fun_l18_n615()
+ fun_l19_n769
+end
+
+def fun_l18_n616()
+ fun_l19_n215
+end
+
+def fun_l18_n617()
+ fun_l19_n89
+end
+
+def fun_l18_n618()
+ fun_l19_n928
+end
+
+def fun_l18_n619()
+ fun_l19_n213
+end
+
+def fun_l18_n620()
+ fun_l19_n215
+end
+
+def fun_l18_n621()
+ fun_l19_n472
+end
+
+def fun_l18_n622()
+ fun_l19_n363
+end
+
+def fun_l18_n623()
+ fun_l19_n251
+end
+
+def fun_l18_n624()
+ fun_l19_n780
+end
+
+def fun_l18_n625()
+ fun_l19_n414
+end
+
+def fun_l18_n626()
+ fun_l19_n348
+end
+
+def fun_l18_n627()
+ fun_l19_n268
+end
+
+def fun_l18_n628()
+ fun_l19_n772
+end
+
+def fun_l18_n629()
+ fun_l19_n232
+end
+
+def fun_l18_n630()
+ fun_l19_n775
+end
+
+def fun_l18_n631()
+ fun_l19_n181
+end
+
+def fun_l18_n632()
+ fun_l19_n953
+end
+
+def fun_l18_n633()
+ fun_l19_n927
+end
+
+def fun_l18_n634()
+ fun_l19_n241
+end
+
+def fun_l18_n635()
+ fun_l19_n426
+end
+
+def fun_l18_n636()
+ fun_l19_n337
+end
+
+def fun_l18_n637()
+ fun_l19_n948
+end
+
+def fun_l18_n638()
+ fun_l19_n703
+end
+
+def fun_l18_n639()
+ fun_l19_n938
+end
+
+def fun_l18_n640()
+ fun_l19_n432
+end
+
+def fun_l18_n641()
+ fun_l19_n117
+end
+
+def fun_l18_n642()
+ fun_l19_n362
+end
+
+def fun_l18_n643()
+ fun_l19_n956
+end
+
+def fun_l18_n644()
+ fun_l19_n947
+end
+
+def fun_l18_n645()
+ fun_l19_n954
+end
+
+def fun_l18_n646()
+ fun_l19_n159
+end
+
+def fun_l18_n647()
+ fun_l19_n838
+end
+
+def fun_l18_n648()
+ fun_l19_n614
+end
+
+def fun_l18_n649()
+ fun_l19_n589
+end
+
+def fun_l18_n650()
+ fun_l19_n16
+end
+
+def fun_l18_n651()
+ fun_l19_n721
+end
+
+def fun_l18_n652()
+ fun_l19_n608
+end
+
+def fun_l18_n653()
+ fun_l19_n462
+end
+
+def fun_l18_n654()
+ fun_l19_n66
+end
+
+def fun_l18_n655()
+ fun_l19_n219
+end
+
+def fun_l18_n656()
+ fun_l19_n660
+end
+
+def fun_l18_n657()
+ fun_l19_n466
+end
+
+def fun_l18_n658()
+ fun_l19_n441
+end
+
+def fun_l18_n659()
+ fun_l19_n140
+end
+
+def fun_l18_n660()
+ fun_l19_n538
+end
+
+def fun_l18_n661()
+ fun_l19_n602
+end
+
+def fun_l18_n662()
+ fun_l19_n94
+end
+
+def fun_l18_n663()
+ fun_l19_n435
+end
+
+def fun_l18_n664()
+ fun_l19_n632
+end
+
+def fun_l18_n665()
+ fun_l19_n404
+end
+
+def fun_l18_n666()
+ fun_l19_n894
+end
+
+def fun_l18_n667()
+ fun_l19_n668
+end
+
+def fun_l18_n668()
+ fun_l19_n802
+end
+
+def fun_l18_n669()
+ fun_l19_n785
+end
+
+def fun_l18_n670()
+ fun_l19_n16
+end
+
+def fun_l18_n671()
+ fun_l19_n124
+end
+
+def fun_l18_n672()
+ fun_l19_n587
+end
+
+def fun_l18_n673()
+ fun_l19_n605
+end
+
+def fun_l18_n674()
+ fun_l19_n903
+end
+
+def fun_l18_n675()
+ fun_l19_n980
+end
+
+def fun_l18_n676()
+ fun_l19_n463
+end
+
+def fun_l18_n677()
+ fun_l19_n716
+end
+
+def fun_l18_n678()
+ fun_l19_n815
+end
+
+def fun_l18_n679()
+ fun_l19_n909
+end
+
+def fun_l18_n680()
+ fun_l19_n924
+end
+
+def fun_l18_n681()
+ fun_l19_n383
+end
+
+def fun_l18_n682()
+ fun_l19_n761
+end
+
+def fun_l18_n683()
+ fun_l19_n663
+end
+
+def fun_l18_n684()
+ fun_l19_n176
+end
+
+def fun_l18_n685()
+ fun_l19_n87
+end
+
+def fun_l18_n686()
+ fun_l19_n1
+end
+
+def fun_l18_n687()
+ fun_l19_n953
+end
+
+def fun_l18_n688()
+ fun_l19_n737
+end
+
+def fun_l18_n689()
+ fun_l19_n792
+end
+
+def fun_l18_n690()
+ fun_l19_n165
+end
+
+def fun_l18_n691()
+ fun_l19_n266
+end
+
+def fun_l18_n692()
+ fun_l19_n357
+end
+
+def fun_l18_n693()
+ fun_l19_n780
+end
+
+def fun_l18_n694()
+ fun_l19_n893
+end
+
+def fun_l18_n695()
+ fun_l19_n280
+end
+
+def fun_l18_n696()
+ fun_l19_n117
+end
+
+def fun_l18_n697()
+ fun_l19_n985
+end
+
+def fun_l18_n698()
+ fun_l19_n306
+end
+
+def fun_l18_n699()
+ fun_l19_n421
+end
+
+def fun_l18_n700()
+ fun_l19_n62
+end
+
+def fun_l18_n701()
+ fun_l19_n384
+end
+
+def fun_l18_n702()
+ fun_l19_n394
+end
+
+def fun_l18_n703()
+ fun_l19_n707
+end
+
+def fun_l18_n704()
+ fun_l19_n599
+end
+
+def fun_l18_n705()
+ fun_l19_n590
+end
+
+def fun_l18_n706()
+ fun_l19_n49
+end
+
+def fun_l18_n707()
+ fun_l19_n529
+end
+
+def fun_l18_n708()
+ fun_l19_n824
+end
+
+def fun_l18_n709()
+ fun_l19_n481
+end
+
+def fun_l18_n710()
+ fun_l19_n221
+end
+
+def fun_l18_n711()
+ fun_l19_n305
+end
+
+def fun_l18_n712()
+ fun_l19_n612
+end
+
+def fun_l18_n713()
+ fun_l19_n809
+end
+
+def fun_l18_n714()
+ fun_l19_n41
+end
+
+def fun_l18_n715()
+ fun_l19_n477
+end
+
+def fun_l18_n716()
+ fun_l19_n717
+end
+
+def fun_l18_n717()
+ fun_l19_n447
+end
+
+def fun_l18_n718()
+ fun_l19_n501
+end
+
+def fun_l18_n719()
+ fun_l19_n86
+end
+
+def fun_l18_n720()
+ fun_l19_n250
+end
+
+def fun_l18_n721()
+ fun_l19_n504
+end
+
+def fun_l18_n722()
+ fun_l19_n274
+end
+
+def fun_l18_n723()
+ fun_l19_n167
+end
+
+def fun_l18_n724()
+ fun_l19_n824
+end
+
+def fun_l18_n725()
+ fun_l19_n188
+end
+
+def fun_l18_n726()
+ fun_l19_n953
+end
+
+def fun_l18_n727()
+ fun_l19_n61
+end
+
+def fun_l18_n728()
+ fun_l19_n242
+end
+
+def fun_l18_n729()
+ fun_l19_n167
+end
+
+def fun_l18_n730()
+ fun_l19_n936
+end
+
+def fun_l18_n731()
+ fun_l19_n293
+end
+
+def fun_l18_n732()
+ fun_l19_n951
+end
+
+def fun_l18_n733()
+ fun_l19_n235
+end
+
+def fun_l18_n734()
+ fun_l19_n718
+end
+
+def fun_l18_n735()
+ fun_l19_n930
+end
+
+def fun_l18_n736()
+ fun_l19_n842
+end
+
+def fun_l18_n737()
+ fun_l19_n697
+end
+
+def fun_l18_n738()
+ fun_l19_n503
+end
+
+def fun_l18_n739()
+ fun_l19_n789
+end
+
+def fun_l18_n740()
+ fun_l19_n87
+end
+
+def fun_l18_n741()
+ fun_l19_n919
+end
+
+def fun_l18_n742()
+ fun_l19_n26
+end
+
+def fun_l18_n743()
+ fun_l19_n873
+end
+
+def fun_l18_n744()
+ fun_l19_n334
+end
+
+def fun_l18_n745()
+ fun_l19_n112
+end
+
+def fun_l18_n746()
+ fun_l19_n648
+end
+
+def fun_l18_n747()
+ fun_l19_n261
+end
+
+def fun_l18_n748()
+ fun_l19_n617
+end
+
+def fun_l18_n749()
+ fun_l19_n922
+end
+
+def fun_l18_n750()
+ fun_l19_n434
+end
+
+def fun_l18_n751()
+ fun_l19_n842
+end
+
+def fun_l18_n752()
+ fun_l19_n498
+end
+
+def fun_l18_n753()
+ fun_l19_n367
+end
+
+def fun_l18_n754()
+ fun_l19_n799
+end
+
+def fun_l18_n755()
+ fun_l19_n780
+end
+
+def fun_l18_n756()
+ fun_l19_n119
+end
+
+def fun_l18_n757()
+ fun_l19_n871
+end
+
+def fun_l18_n758()
+ fun_l19_n293
+end
+
+def fun_l18_n759()
+ fun_l19_n645
+end
+
+def fun_l18_n760()
+ fun_l19_n226
+end
+
+def fun_l18_n761()
+ fun_l19_n518
+end
+
+def fun_l18_n762()
+ fun_l19_n223
+end
+
+def fun_l18_n763()
+ fun_l19_n859
+end
+
+def fun_l18_n764()
+ fun_l19_n545
+end
+
+def fun_l18_n765()
+ fun_l19_n452
+end
+
+def fun_l18_n766()
+ fun_l19_n538
+end
+
+def fun_l18_n767()
+ fun_l19_n574
+end
+
+def fun_l18_n768()
+ fun_l19_n605
+end
+
+def fun_l18_n769()
+ fun_l19_n794
+end
+
+def fun_l18_n770()
+ fun_l19_n35
+end
+
+def fun_l18_n771()
+ fun_l19_n990
+end
+
+def fun_l18_n772()
+ fun_l19_n276
+end
+
+def fun_l18_n773()
+ fun_l19_n806
+end
+
+def fun_l18_n774()
+ fun_l19_n321
+end
+
+def fun_l18_n775()
+ fun_l19_n874
+end
+
+def fun_l18_n776()
+ fun_l19_n349
+end
+
+def fun_l18_n777()
+ fun_l19_n595
+end
+
+def fun_l18_n778()
+ fun_l19_n944
+end
+
+def fun_l18_n779()
+ fun_l19_n617
+end
+
+def fun_l18_n780()
+ fun_l19_n982
+end
+
+def fun_l18_n781()
+ fun_l19_n395
+end
+
+def fun_l18_n782()
+ fun_l19_n362
+end
+
+def fun_l18_n783()
+ fun_l19_n533
+end
+
+def fun_l18_n784()
+ fun_l19_n646
+end
+
+def fun_l18_n785()
+ fun_l19_n160
+end
+
+def fun_l18_n786()
+ fun_l19_n288
+end
+
+def fun_l18_n787()
+ fun_l19_n381
+end
+
+def fun_l18_n788()
+ fun_l19_n299
+end
+
+def fun_l18_n789()
+ fun_l19_n546
+end
+
+def fun_l18_n790()
+ fun_l19_n906
+end
+
+def fun_l18_n791()
+ fun_l19_n788
+end
+
+def fun_l18_n792()
+ fun_l19_n389
+end
+
+def fun_l18_n793()
+ fun_l19_n593
+end
+
+def fun_l18_n794()
+ fun_l19_n224
+end
+
+def fun_l18_n795()
+ fun_l19_n815
+end
+
+def fun_l18_n796()
+ fun_l19_n533
+end
+
+def fun_l18_n797()
+ fun_l19_n47
+end
+
+def fun_l18_n798()
+ fun_l19_n457
+end
+
+def fun_l18_n799()
+ fun_l19_n951
+end
+
+def fun_l18_n800()
+ fun_l19_n680
+end
+
+def fun_l18_n801()
+ fun_l19_n362
+end
+
+def fun_l18_n802()
+ fun_l19_n667
+end
+
+def fun_l18_n803()
+ fun_l19_n906
+end
+
+def fun_l18_n804()
+ fun_l19_n444
+end
+
+def fun_l18_n805()
+ fun_l19_n562
+end
+
+def fun_l18_n806()
+ fun_l19_n472
+end
+
+def fun_l18_n807()
+ fun_l19_n706
+end
+
+def fun_l18_n808()
+ fun_l19_n611
+end
+
+def fun_l18_n809()
+ fun_l19_n514
+end
+
+def fun_l18_n810()
+ fun_l19_n742
+end
+
+def fun_l18_n811()
+ fun_l19_n144
+end
+
+def fun_l18_n812()
+ fun_l19_n938
+end
+
+def fun_l18_n813()
+ fun_l19_n835
+end
+
+def fun_l18_n814()
+ fun_l19_n127
+end
+
+def fun_l18_n815()
+ fun_l19_n188
+end
+
+def fun_l18_n816()
+ fun_l19_n511
+end
+
+def fun_l18_n817()
+ fun_l19_n919
+end
+
+def fun_l18_n818()
+ fun_l19_n46
+end
+
+def fun_l18_n819()
+ fun_l19_n927
+end
+
+def fun_l18_n820()
+ fun_l19_n655
+end
+
+def fun_l18_n821()
+ fun_l19_n713
+end
+
+def fun_l18_n822()
+ fun_l19_n803
+end
+
+def fun_l18_n823()
+ fun_l19_n116
+end
+
+def fun_l18_n824()
+ fun_l19_n139
+end
+
+def fun_l18_n825()
+ fun_l19_n263
+end
+
+def fun_l18_n826()
+ fun_l19_n728
+end
+
+def fun_l18_n827()
+ fun_l19_n77
+end
+
+def fun_l18_n828()
+ fun_l19_n958
+end
+
+def fun_l18_n829()
+ fun_l19_n827
+end
+
+def fun_l18_n830()
+ fun_l19_n738
+end
+
+def fun_l18_n831()
+ fun_l19_n430
+end
+
+def fun_l18_n832()
+ fun_l19_n16
+end
+
+def fun_l18_n833()
+ fun_l19_n335
+end
+
+def fun_l18_n834()
+ fun_l19_n674
+end
+
+def fun_l18_n835()
+ fun_l19_n938
+end
+
+def fun_l18_n836()
+ fun_l19_n460
+end
+
+def fun_l18_n837()
+ fun_l19_n268
+end
+
+def fun_l18_n838()
+ fun_l19_n250
+end
+
+def fun_l18_n839()
+ fun_l19_n460
+end
+
+def fun_l18_n840()
+ fun_l19_n966
+end
+
+def fun_l18_n841()
+ fun_l19_n228
+end
+
+def fun_l18_n842()
+ fun_l19_n90
+end
+
+def fun_l18_n843()
+ fun_l19_n227
+end
+
+def fun_l18_n844()
+ fun_l19_n494
+end
+
+def fun_l18_n845()
+ fun_l19_n85
+end
+
+def fun_l18_n846()
+ fun_l19_n497
+end
+
+def fun_l18_n847()
+ fun_l19_n395
+end
+
+def fun_l18_n848()
+ fun_l19_n874
+end
+
+def fun_l18_n849()
+ fun_l19_n826
+end
+
+def fun_l18_n850()
+ fun_l19_n467
+end
+
+def fun_l18_n851()
+ fun_l19_n330
+end
+
+def fun_l18_n852()
+ fun_l19_n229
+end
+
+def fun_l18_n853()
+ fun_l19_n172
+end
+
+def fun_l18_n854()
+ fun_l19_n604
+end
+
+def fun_l18_n855()
+ fun_l19_n314
+end
+
+def fun_l18_n856()
+ fun_l19_n553
+end
+
+def fun_l18_n857()
+ fun_l19_n946
+end
+
+def fun_l18_n858()
+ fun_l19_n347
+end
+
+def fun_l18_n859()
+ fun_l19_n566
+end
+
+def fun_l18_n860()
+ fun_l19_n144
+end
+
+def fun_l18_n861()
+ fun_l19_n812
+end
+
+def fun_l18_n862()
+ fun_l19_n615
+end
+
+def fun_l18_n863()
+ fun_l19_n411
+end
+
+def fun_l18_n864()
+ fun_l19_n67
+end
+
+def fun_l18_n865()
+ fun_l19_n830
+end
+
+def fun_l18_n866()
+ fun_l19_n849
+end
+
+def fun_l18_n867()
+ fun_l19_n933
+end
+
+def fun_l18_n868()
+ fun_l19_n892
+end
+
+def fun_l18_n869()
+ fun_l19_n644
+end
+
+def fun_l18_n870()
+ fun_l19_n567
+end
+
+def fun_l18_n871()
+ fun_l19_n558
+end
+
+def fun_l18_n872()
+ fun_l19_n766
+end
+
+def fun_l18_n873()
+ fun_l19_n715
+end
+
+def fun_l18_n874()
+ fun_l19_n641
+end
+
+def fun_l18_n875()
+ fun_l19_n81
+end
+
+def fun_l18_n876()
+ fun_l19_n472
+end
+
+def fun_l18_n877()
+ fun_l19_n907
+end
+
+def fun_l18_n878()
+ fun_l19_n426
+end
+
+def fun_l18_n879()
+ fun_l19_n329
+end
+
+def fun_l18_n880()
+ fun_l19_n935
+end
+
+def fun_l18_n881()
+ fun_l19_n100
+end
+
+def fun_l18_n882()
+ fun_l19_n540
+end
+
+def fun_l18_n883()
+ fun_l19_n905
+end
+
+def fun_l18_n884()
+ fun_l19_n991
+end
+
+def fun_l18_n885()
+ fun_l19_n700
+end
+
+def fun_l18_n886()
+ fun_l19_n698
+end
+
+def fun_l18_n887()
+ fun_l19_n805
+end
+
+def fun_l18_n888()
+ fun_l19_n736
+end
+
+def fun_l18_n889()
+ fun_l19_n386
+end
+
+def fun_l18_n890()
+ fun_l19_n895
+end
+
+def fun_l18_n891()
+ fun_l19_n542
+end
+
+def fun_l18_n892()
+ fun_l19_n261
+end
+
+def fun_l18_n893()
+ fun_l19_n600
+end
+
+def fun_l18_n894()
+ fun_l19_n153
+end
+
+def fun_l18_n895()
+ fun_l19_n767
+end
+
+def fun_l18_n896()
+ fun_l19_n201
+end
+
+def fun_l18_n897()
+ fun_l19_n98
+end
+
+def fun_l18_n898()
+ fun_l19_n423
+end
+
+def fun_l18_n899()
+ fun_l19_n247
+end
+
+def fun_l18_n900()
+ fun_l19_n720
+end
+
+def fun_l18_n901()
+ fun_l19_n1
+end
+
+def fun_l18_n902()
+ fun_l19_n21
+end
+
+def fun_l18_n903()
+ fun_l19_n591
+end
+
+def fun_l18_n904()
+ fun_l19_n36
+end
+
+def fun_l18_n905()
+ fun_l19_n654
+end
+
+def fun_l18_n906()
+ fun_l19_n378
+end
+
+def fun_l18_n907()
+ fun_l19_n841
+end
+
+def fun_l18_n908()
+ fun_l19_n685
+end
+
+def fun_l18_n909()
+ fun_l19_n933
+end
+
+def fun_l18_n910()
+ fun_l19_n71
+end
+
+def fun_l18_n911()
+ fun_l19_n963
+end
+
+def fun_l18_n912()
+ fun_l19_n590
+end
+
+def fun_l18_n913()
+ fun_l19_n24
+end
+
+def fun_l18_n914()
+ fun_l19_n213
+end
+
+def fun_l18_n915()
+ fun_l19_n862
+end
+
+def fun_l18_n916()
+ fun_l19_n2
+end
+
+def fun_l18_n917()
+ fun_l19_n728
+end
+
+def fun_l18_n918()
+ fun_l19_n23
+end
+
+def fun_l18_n919()
+ fun_l19_n345
+end
+
+def fun_l18_n920()
+ fun_l19_n515
+end
+
+def fun_l18_n921()
+ fun_l19_n803
+end
+
+def fun_l18_n922()
+ fun_l19_n378
+end
+
+def fun_l18_n923()
+ fun_l19_n260
+end
+
+def fun_l18_n924()
+ fun_l19_n824
+end
+
+def fun_l18_n925()
+ fun_l19_n698
+end
+
+def fun_l18_n926()
+ fun_l19_n719
+end
+
+def fun_l18_n927()
+ fun_l19_n126
+end
+
+def fun_l18_n928()
+ fun_l19_n647
+end
+
+def fun_l18_n929()
+ fun_l19_n412
+end
+
+def fun_l18_n930()
+ fun_l19_n617
+end
+
+def fun_l18_n931()
+ fun_l19_n295
+end
+
+def fun_l18_n932()
+ fun_l19_n231
+end
+
+def fun_l18_n933()
+ fun_l19_n301
+end
+
+def fun_l18_n934()
+ fun_l19_n25
+end
+
+def fun_l18_n935()
+ fun_l19_n341
+end
+
+def fun_l18_n936()
+ fun_l19_n845
+end
+
+def fun_l18_n937()
+ fun_l19_n97
+end
+
+def fun_l18_n938()
+ fun_l19_n787
+end
+
+def fun_l18_n939()
+ fun_l19_n828
+end
+
+def fun_l18_n940()
+ fun_l19_n298
+end
+
+def fun_l18_n941()
+ fun_l19_n234
+end
+
+def fun_l18_n942()
+ fun_l19_n74
+end
+
+def fun_l18_n943()
+ fun_l19_n928
+end
+
+def fun_l18_n944()
+ fun_l19_n276
+end
+
+def fun_l18_n945()
+ fun_l19_n699
+end
+
+def fun_l18_n946()
+ fun_l19_n507
+end
+
+def fun_l18_n947()
+ fun_l19_n385
+end
+
+def fun_l18_n948()
+ fun_l19_n651
+end
+
+def fun_l18_n949()
+ fun_l19_n315
+end
+
+def fun_l18_n950()
+ fun_l19_n289
+end
+
+def fun_l18_n951()
+ fun_l19_n879
+end
+
+def fun_l18_n952()
+ fun_l19_n549
+end
+
+def fun_l18_n953()
+ fun_l19_n205
+end
+
+def fun_l18_n954()
+ fun_l19_n468
+end
+
+def fun_l18_n955()
+ fun_l19_n11
+end
+
+def fun_l18_n956()
+ fun_l19_n644
+end
+
+def fun_l18_n957()
+ fun_l19_n492
+end
+
+def fun_l18_n958()
+ fun_l19_n94
+end
+
+def fun_l18_n959()
+ fun_l19_n331
+end
+
+def fun_l18_n960()
+ fun_l19_n708
+end
+
+def fun_l18_n961()
+ fun_l19_n646
+end
+
+def fun_l18_n962()
+ fun_l19_n206
+end
+
+def fun_l18_n963()
+ fun_l19_n793
+end
+
+def fun_l18_n964()
+ fun_l19_n426
+end
+
+def fun_l18_n965()
+ fun_l19_n181
+end
+
+def fun_l18_n966()
+ fun_l19_n773
+end
+
+def fun_l18_n967()
+ fun_l19_n324
+end
+
+def fun_l18_n968()
+ fun_l19_n451
+end
+
+def fun_l18_n969()
+ fun_l19_n155
+end
+
+def fun_l18_n970()
+ fun_l19_n812
+end
+
+def fun_l18_n971()
+ fun_l19_n906
+end
+
+def fun_l18_n972()
+ fun_l19_n367
+end
+
+def fun_l18_n973()
+ fun_l19_n260
+end
+
+def fun_l18_n974()
+ fun_l19_n226
+end
+
+def fun_l18_n975()
+ fun_l19_n189
+end
+
+def fun_l18_n976()
+ fun_l19_n32
+end
+
+def fun_l18_n977()
+ fun_l19_n43
+end
+
+def fun_l18_n978()
+ fun_l19_n285
+end
+
+def fun_l18_n979()
+ fun_l19_n511
+end
+
+def fun_l18_n980()
+ fun_l19_n714
+end
+
+def fun_l18_n981()
+ fun_l19_n587
+end
+
+def fun_l18_n982()
+ fun_l19_n247
+end
+
+def fun_l18_n983()
+ fun_l19_n258
+end
+
+def fun_l18_n984()
+ fun_l19_n115
+end
+
+def fun_l18_n985()
+ fun_l19_n873
+end
+
+def fun_l18_n986()
+ fun_l19_n452
+end
+
+def fun_l18_n987()
+ fun_l19_n994
+end
+
+def fun_l18_n988()
+ fun_l19_n912
+end
+
+def fun_l18_n989()
+ fun_l19_n534
+end
+
+def fun_l18_n990()
+ fun_l19_n186
+end
+
+def fun_l18_n991()
+ fun_l19_n49
+end
+
+def fun_l18_n992()
+ fun_l19_n676
+end
+
+def fun_l18_n993()
+ fun_l19_n466
+end
+
+def fun_l18_n994()
+ fun_l19_n571
+end
+
+def fun_l18_n995()
+ fun_l19_n573
+end
+
+def fun_l18_n996()
+ fun_l19_n47
+end
+
+def fun_l18_n997()
+ fun_l19_n657
+end
+
+def fun_l18_n998()
+ fun_l19_n11
+end
+
+def fun_l18_n999()
+ fun_l19_n342
+end
+
+def fun_l19_n0()
+ fun_l20_n278
+end
+
+def fun_l19_n1()
+ fun_l20_n159
+end
+
+def fun_l19_n2()
+ fun_l20_n289
+end
+
+def fun_l19_n3()
+ fun_l20_n766
+end
+
+def fun_l19_n4()
+ fun_l20_n45
+end
+
+def fun_l19_n5()
+ fun_l20_n453
+end
+
+def fun_l19_n6()
+ fun_l20_n581
+end
+
+def fun_l19_n7()
+ fun_l20_n607
+end
+
+def fun_l19_n8()
+ fun_l20_n427
+end
+
+def fun_l19_n9()
+ fun_l20_n287
+end
+
+def fun_l19_n10()
+ fun_l20_n28
+end
+
+def fun_l19_n11()
+ fun_l20_n456
+end
+
+def fun_l19_n12()
+ fun_l20_n283
+end
+
+def fun_l19_n13()
+ fun_l20_n451
+end
+
+def fun_l19_n14()
+ fun_l20_n220
+end
+
+def fun_l19_n15()
+ fun_l20_n497
+end
+
+def fun_l19_n16()
+ fun_l20_n295
+end
+
+def fun_l19_n17()
+ fun_l20_n66
+end
+
+def fun_l19_n18()
+ fun_l20_n863
+end
+
+def fun_l19_n19()
+ fun_l20_n919
+end
+
+def fun_l19_n20()
+ fun_l20_n712
+end
+
+def fun_l19_n21()
+ fun_l20_n323
+end
+
+def fun_l19_n22()
+ fun_l20_n666
+end
+
+def fun_l19_n23()
+ fun_l20_n947
+end
+
+def fun_l19_n24()
+ fun_l20_n422
+end
+
+def fun_l19_n25()
+ fun_l20_n728
+end
+
+def fun_l19_n26()
+ fun_l20_n886
+end
+
+def fun_l19_n27()
+ fun_l20_n585
+end
+
+def fun_l19_n28()
+ fun_l20_n835
+end
+
+def fun_l19_n29()
+ fun_l20_n812
+end
+
+def fun_l19_n30()
+ fun_l20_n425
+end
+
+def fun_l19_n31()
+ fun_l20_n378
+end
+
+def fun_l19_n32()
+ fun_l20_n128
+end
+
+def fun_l19_n33()
+ fun_l20_n714
+end
+
+def fun_l19_n34()
+ fun_l20_n502
+end
+
+def fun_l19_n35()
+ fun_l20_n447
+end
+
+def fun_l19_n36()
+ fun_l20_n512
+end
+
+def fun_l19_n37()
+ fun_l20_n642
+end
+
+def fun_l19_n38()
+ fun_l20_n839
+end
+
+def fun_l19_n39()
+ fun_l20_n539
+end
+
+def fun_l19_n40()
+ fun_l20_n204
+end
+
+def fun_l19_n41()
+ fun_l20_n294
+end
+
+def fun_l19_n42()
+ fun_l20_n360
+end
+
+def fun_l19_n43()
+ fun_l20_n132
+end
+
+def fun_l19_n44()
+ fun_l20_n529
+end
+
+def fun_l19_n45()
+ fun_l20_n783
+end
+
+def fun_l19_n46()
+ fun_l20_n694
+end
+
+def fun_l19_n47()
+ fun_l20_n939
+end
+
+def fun_l19_n48()
+ fun_l20_n972
+end
+
+def fun_l19_n49()
+ fun_l20_n187
+end
+
+def fun_l19_n50()
+ fun_l20_n236
+end
+
+def fun_l19_n51()
+ fun_l20_n218
+end
+
+def fun_l19_n52()
+ fun_l20_n278
+end
+
+def fun_l19_n53()
+ fun_l20_n895
+end
+
+def fun_l19_n54()
+ fun_l20_n967
+end
+
+def fun_l19_n55()
+ fun_l20_n110
+end
+
+def fun_l19_n56()
+ fun_l20_n918
+end
+
+def fun_l19_n57()
+ fun_l20_n458
+end
+
+def fun_l19_n58()
+ fun_l20_n262
+end
+
+def fun_l19_n59()
+ fun_l20_n978
+end
+
+def fun_l19_n60()
+ fun_l20_n434
+end
+
+def fun_l19_n61()
+ fun_l20_n86
+end
+
+def fun_l19_n62()
+ fun_l20_n364
+end
+
+def fun_l19_n63()
+ fun_l20_n92
+end
+
+def fun_l19_n64()
+ fun_l20_n173
+end
+
+def fun_l19_n65()
+ fun_l20_n530
+end
+
+def fun_l19_n66()
+ fun_l20_n291
+end
+
+def fun_l19_n67()
+ fun_l20_n758
+end
+
+def fun_l19_n68()
+ fun_l20_n311
+end
+
+def fun_l19_n69()
+ fun_l20_n984
+end
+
+def fun_l19_n70()
+ fun_l20_n976
+end
+
+def fun_l19_n71()
+ fun_l20_n622
+end
+
+def fun_l19_n72()
+ fun_l20_n467
+end
+
+def fun_l19_n73()
+ fun_l20_n369
+end
+
+def fun_l19_n74()
+ fun_l20_n81
+end
+
+def fun_l19_n75()
+ fun_l20_n6
+end
+
+def fun_l19_n76()
+ fun_l20_n23
+end
+
+def fun_l19_n77()
+ fun_l20_n631
+end
+
+def fun_l19_n78()
+ fun_l20_n535
+end
+
+def fun_l19_n79()
+ fun_l20_n572
+end
+
+def fun_l19_n80()
+ fun_l20_n905
+end
+
+def fun_l19_n81()
+ fun_l20_n709
+end
+
+def fun_l19_n82()
+ fun_l20_n362
+end
+
+def fun_l19_n83()
+ fun_l20_n505
+end
+
+def fun_l19_n84()
+ fun_l20_n247
+end
+
+def fun_l19_n85()
+ fun_l20_n88
+end
+
+def fun_l19_n86()
+ fun_l20_n214
+end
+
+def fun_l19_n87()
+ fun_l20_n607
+end
+
+def fun_l19_n88()
+ fun_l20_n161
+end
+
+def fun_l19_n89()
+ fun_l20_n419
+end
+
+def fun_l19_n90()
+ fun_l20_n514
+end
+
+def fun_l19_n91()
+ fun_l20_n879
+end
+
+def fun_l19_n92()
+ fun_l20_n11
+end
+
+def fun_l19_n93()
+ fun_l20_n269
+end
+
+def fun_l19_n94()
+ fun_l20_n685
+end
+
+def fun_l19_n95()
+ fun_l20_n435
+end
+
+def fun_l19_n96()
+ fun_l20_n183
+end
+
+def fun_l19_n97()
+ fun_l20_n548
+end
+
+def fun_l19_n98()
+ fun_l20_n460
+end
+
+def fun_l19_n99()
+ fun_l20_n636
+end
+
+def fun_l19_n100()
+ fun_l20_n829
+end
+
+def fun_l19_n101()
+ fun_l20_n224
+end
+
+def fun_l19_n102()
+ fun_l20_n291
+end
+
+def fun_l19_n103()
+ fun_l20_n498
+end
+
+def fun_l19_n104()
+ fun_l20_n403
+end
+
+def fun_l19_n105()
+ fun_l20_n699
+end
+
+def fun_l19_n106()
+ fun_l20_n851
+end
+
+def fun_l19_n107()
+ fun_l20_n400
+end
+
+def fun_l19_n108()
+ fun_l20_n834
+end
+
+def fun_l19_n109()
+ fun_l20_n635
+end
+
+def fun_l19_n110()
+ fun_l20_n651
+end
+
+def fun_l19_n111()
+ fun_l20_n930
+end
+
+def fun_l19_n112()
+ fun_l20_n547
+end
+
+def fun_l19_n113()
+ fun_l20_n237
+end
+
+def fun_l19_n114()
+ fun_l20_n298
+end
+
+def fun_l19_n115()
+ fun_l20_n979
+end
+
+def fun_l19_n116()
+ fun_l20_n409
+end
+
+def fun_l19_n117()
+ fun_l20_n942
+end
+
+def fun_l19_n118()
+ fun_l20_n224
+end
+
+def fun_l19_n119()
+ fun_l20_n288
+end
+
+def fun_l19_n120()
+ fun_l20_n42
+end
+
+def fun_l19_n121()
+ fun_l20_n718
+end
+
+def fun_l19_n122()
+ fun_l20_n392
+end
+
+def fun_l19_n123()
+ fun_l20_n375
+end
+
+def fun_l19_n124()
+ fun_l20_n499
+end
+
+def fun_l19_n125()
+ fun_l20_n499
+end
+
+def fun_l19_n126()
+ fun_l20_n998
+end
+
+def fun_l19_n127()
+ fun_l20_n659
+end
+
+def fun_l19_n128()
+ fun_l20_n782
+end
+
+def fun_l19_n129()
+ fun_l20_n607
+end
+
+def fun_l19_n130()
+ fun_l20_n802
+end
+
+def fun_l19_n131()
+ fun_l20_n773
+end
+
+def fun_l19_n132()
+ fun_l20_n861
+end
+
+def fun_l19_n133()
+ fun_l20_n38
+end
+
+def fun_l19_n134()
+ fun_l20_n614
+end
+
+def fun_l19_n135()
+ fun_l20_n546
+end
+
+def fun_l19_n136()
+ fun_l20_n890
+end
+
+def fun_l19_n137()
+ fun_l20_n987
+end
+
+def fun_l19_n138()
+ fun_l20_n518
+end
+
+def fun_l19_n139()
+ fun_l20_n708
+end
+
+def fun_l19_n140()
+ fun_l20_n838
+end
+
+def fun_l19_n141()
+ fun_l20_n642
+end
+
+def fun_l19_n142()
+ fun_l20_n275
+end
+
+def fun_l19_n143()
+ fun_l20_n274
+end
+
+def fun_l19_n144()
+ fun_l20_n479
+end
+
+def fun_l19_n145()
+ fun_l20_n215
+end
+
+def fun_l19_n146()
+ fun_l20_n794
+end
+
+def fun_l19_n147()
+ fun_l20_n329
+end
+
+def fun_l19_n148()
+ fun_l20_n146
+end
+
+def fun_l19_n149()
+ fun_l20_n561
+end
+
+def fun_l19_n150()
+ fun_l20_n782
+end
+
+def fun_l19_n151()
+ fun_l20_n903
+end
+
+def fun_l19_n152()
+ fun_l20_n97
+end
+
+def fun_l19_n153()
+ fun_l20_n962
+end
+
+def fun_l19_n154()
+ fun_l20_n758
+end
+
+def fun_l19_n155()
+ fun_l20_n58
+end
+
+def fun_l19_n156()
+ fun_l20_n683
+end
+
+def fun_l19_n157()
+ fun_l20_n48
+end
+
+def fun_l19_n158()
+ fun_l20_n476
+end
+
+def fun_l19_n159()
+ fun_l20_n19
+end
+
+def fun_l19_n160()
+ fun_l20_n938
+end
+
+def fun_l19_n161()
+ fun_l20_n40
+end
+
+def fun_l19_n162()
+ fun_l20_n817
+end
+
+def fun_l19_n163()
+ fun_l20_n745
+end
+
+def fun_l19_n164()
+ fun_l20_n10
+end
+
+def fun_l19_n165()
+ fun_l20_n486
+end
+
+def fun_l19_n166()
+ fun_l20_n321
+end
+
+def fun_l19_n167()
+ fun_l20_n255
+end
+
+def fun_l19_n168()
+ fun_l20_n286
+end
+
+def fun_l19_n169()
+ fun_l20_n777
+end
+
+def fun_l19_n170()
+ fun_l20_n985
+end
+
+def fun_l19_n171()
+ fun_l20_n827
+end
+
+def fun_l19_n172()
+ fun_l20_n422
+end
+
+def fun_l19_n173()
+ fun_l20_n194
+end
+
+def fun_l19_n174()
+ fun_l20_n399
+end
+
+def fun_l19_n175()
+ fun_l20_n562
+end
+
+def fun_l19_n176()
+ fun_l20_n808
+end
+
+def fun_l19_n177()
+ fun_l20_n646
+end
+
+def fun_l19_n178()
+ fun_l20_n806
+end
+
+def fun_l19_n179()
+ fun_l20_n203
+end
+
+def fun_l19_n180()
+ fun_l20_n426
+end
+
+def fun_l19_n181()
+ fun_l20_n361
+end
+
+def fun_l19_n182()
+ fun_l20_n738
+end
+
+def fun_l19_n183()
+ fun_l20_n446
+end
+
+def fun_l19_n184()
+ fun_l20_n781
+end
+
+def fun_l19_n185()
+ fun_l20_n521
+end
+
+def fun_l19_n186()
+ fun_l20_n599
+end
+
+def fun_l19_n187()
+ fun_l20_n178
+end
+
+def fun_l19_n188()
+ fun_l20_n15
+end
+
+def fun_l19_n189()
+ fun_l20_n846
+end
+
+def fun_l19_n190()
+ fun_l20_n888
+end
+
+def fun_l19_n191()
+ fun_l20_n53
+end
+
+def fun_l19_n192()
+ fun_l20_n943
+end
+
+def fun_l19_n193()
+ fun_l20_n73
+end
+
+def fun_l19_n194()
+ fun_l20_n918
+end
+
+def fun_l19_n195()
+ fun_l20_n924
+end
+
+def fun_l19_n196()
+ fun_l20_n37
+end
+
+def fun_l19_n197()
+ fun_l20_n674
+end
+
+def fun_l19_n198()
+ fun_l20_n167
+end
+
+def fun_l19_n199()
+ fun_l20_n167
+end
+
+def fun_l19_n200()
+ fun_l20_n201
+end
+
+def fun_l19_n201()
+ fun_l20_n785
+end
+
+def fun_l19_n202()
+ fun_l20_n980
+end
+
+def fun_l19_n203()
+ fun_l20_n295
+end
+
+def fun_l19_n204()
+ fun_l20_n586
+end
+
+def fun_l19_n205()
+ fun_l20_n541
+end
+
+def fun_l19_n206()
+ fun_l20_n220
+end
+
+def fun_l19_n207()
+ fun_l20_n956
+end
+
+def fun_l19_n208()
+ fun_l20_n195
+end
+
+def fun_l19_n209()
+ fun_l20_n232
+end
+
+def fun_l19_n210()
+ fun_l20_n91
+end
+
+def fun_l19_n211()
+ fun_l20_n525
+end
+
+def fun_l19_n212()
+ fun_l20_n50
+end
+
+def fun_l19_n213()
+ fun_l20_n635
+end
+
+def fun_l19_n214()
+ fun_l20_n24
+end
+
+def fun_l19_n215()
+ fun_l20_n795
+end
+
+def fun_l19_n216()
+ fun_l20_n743
+end
+
+def fun_l19_n217()
+ fun_l20_n418
+end
+
+def fun_l19_n218()
+ fun_l20_n63
+end
+
+def fun_l19_n219()
+ fun_l20_n866
+end
+
+def fun_l19_n220()
+ fun_l20_n195
+end
+
+def fun_l19_n221()
+ fun_l20_n178
+end
+
+def fun_l19_n222()
+ fun_l20_n147
+end
+
+def fun_l19_n223()
+ fun_l20_n891
+end
+
+def fun_l19_n224()
+ fun_l20_n804
+end
+
+def fun_l19_n225()
+ fun_l20_n379
+end
+
+def fun_l19_n226()
+ fun_l20_n894
+end
+
+def fun_l19_n227()
+ fun_l20_n767
+end
+
+def fun_l19_n228()
+ fun_l20_n532
+end
+
+def fun_l19_n229()
+ fun_l20_n69
+end
+
+def fun_l19_n230()
+ fun_l20_n602
+end
+
+def fun_l19_n231()
+ fun_l20_n933
+end
+
+def fun_l19_n232()
+ fun_l20_n940
+end
+
+def fun_l19_n233()
+ fun_l20_n935
+end
+
+def fun_l19_n234()
+ fun_l20_n234
+end
+
+def fun_l19_n235()
+ fun_l20_n984
+end
+
+def fun_l19_n236()
+ fun_l20_n962
+end
+
+def fun_l19_n237()
+ fun_l20_n334
+end
+
+def fun_l19_n238()
+ fun_l20_n945
+end
+
+def fun_l19_n239()
+ fun_l20_n778
+end
+
+def fun_l19_n240()
+ fun_l20_n946
+end
+
+def fun_l19_n241()
+ fun_l20_n27
+end
+
+def fun_l19_n242()
+ fun_l20_n535
+end
+
+def fun_l19_n243()
+ fun_l20_n940
+end
+
+def fun_l19_n244()
+ fun_l20_n991
+end
+
+def fun_l19_n245()
+ fun_l20_n926
+end
+
+def fun_l19_n246()
+ fun_l20_n945
+end
+
+def fun_l19_n247()
+ fun_l20_n56
+end
+
+def fun_l19_n248()
+ fun_l20_n529
+end
+
+def fun_l19_n249()
+ fun_l20_n497
+end
+
+def fun_l19_n250()
+ fun_l20_n823
+end
+
+def fun_l19_n251()
+ fun_l20_n296
+end
+
+def fun_l19_n252()
+ fun_l20_n342
+end
+
+def fun_l19_n253()
+ fun_l20_n843
+end
+
+def fun_l19_n254()
+ fun_l20_n95
+end
+
+def fun_l19_n255()
+ fun_l20_n0
+end
+
+def fun_l19_n256()
+ fun_l20_n289
+end
+
+def fun_l19_n257()
+ fun_l20_n816
+end
+
+def fun_l19_n258()
+ fun_l20_n318
+end
+
+def fun_l19_n259()
+ fun_l20_n401
+end
+
+def fun_l19_n260()
+ fun_l20_n495
+end
+
+def fun_l19_n261()
+ fun_l20_n331
+end
+
+def fun_l19_n262()
+ fun_l20_n457
+end
+
+def fun_l19_n263()
+ fun_l20_n169
+end
+
+def fun_l19_n264()
+ fun_l20_n736
+end
+
+def fun_l19_n265()
+ fun_l20_n12
+end
+
+def fun_l19_n266()
+ fun_l20_n552
+end
+
+def fun_l19_n267()
+ fun_l20_n350
+end
+
+def fun_l19_n268()
+ fun_l20_n417
+end
+
+def fun_l19_n269()
+ fun_l20_n960
+end
+
+def fun_l19_n270()
+ fun_l20_n251
+end
+
+def fun_l19_n271()
+ fun_l20_n218
+end
+
+def fun_l19_n272()
+ fun_l20_n496
+end
+
+def fun_l19_n273()
+ fun_l20_n262
+end
+
+def fun_l19_n274()
+ fun_l20_n617
+end
+
+def fun_l19_n275()
+ fun_l20_n225
+end
+
+def fun_l19_n276()
+ fun_l20_n878
+end
+
+def fun_l19_n277()
+ fun_l20_n538
+end
+
+def fun_l19_n278()
+ fun_l20_n99
+end
+
+def fun_l19_n279()
+ fun_l20_n654
+end
+
+def fun_l19_n280()
+ fun_l20_n460
+end
+
+def fun_l19_n281()
+ fun_l20_n108
+end
+
+def fun_l19_n282()
+ fun_l20_n62
+end
+
+def fun_l19_n283()
+ fun_l20_n855
+end
+
+def fun_l19_n284()
+ fun_l20_n790
+end
+
+def fun_l19_n285()
+ fun_l20_n838
+end
+
+def fun_l19_n286()
+ fun_l20_n570
+end
+
+def fun_l19_n287()
+ fun_l20_n376
+end
+
+def fun_l19_n288()
+ fun_l20_n219
+end
+
+def fun_l19_n289()
+ fun_l20_n793
+end
+
+def fun_l19_n290()
+ fun_l20_n17
+end
+
+def fun_l19_n291()
+ fun_l20_n408
+end
+
+def fun_l19_n292()
+ fun_l20_n224
+end
+
+def fun_l19_n293()
+ fun_l20_n953
+end
+
+def fun_l19_n294()
+ fun_l20_n0
+end
+
+def fun_l19_n295()
+ fun_l20_n15
+end
+
+def fun_l19_n296()
+ fun_l20_n304
+end
+
+def fun_l19_n297()
+ fun_l20_n917
+end
+
+def fun_l19_n298()
+ fun_l20_n903
+end
+
+def fun_l19_n299()
+ fun_l20_n151
+end
+
+def fun_l19_n300()
+ fun_l20_n704
+end
+
+def fun_l19_n301()
+ fun_l20_n559
+end
+
+def fun_l19_n302()
+ fun_l20_n957
+end
+
+def fun_l19_n303()
+ fun_l20_n607
+end
+
+def fun_l19_n304()
+ fun_l20_n776
+end
+
+def fun_l19_n305()
+ fun_l20_n661
+end
+
+def fun_l19_n306()
+ fun_l20_n545
+end
+
+def fun_l19_n307()
+ fun_l20_n735
+end
+
+def fun_l19_n308()
+ fun_l20_n427
+end
+
+def fun_l19_n309()
+ fun_l20_n427
+end
+
+def fun_l19_n310()
+ fun_l20_n11
+end
+
+def fun_l19_n311()
+ fun_l20_n109
+end
+
+def fun_l19_n312()
+ fun_l20_n84
+end
+
+def fun_l19_n313()
+ fun_l20_n106
+end
+
+def fun_l19_n314()
+ fun_l20_n758
+end
+
+def fun_l19_n315()
+ fun_l20_n343
+end
+
+def fun_l19_n316()
+ fun_l20_n998
+end
+
+def fun_l19_n317()
+ fun_l20_n174
+end
+
+def fun_l19_n318()
+ fun_l20_n12
+end
+
+def fun_l19_n319()
+ fun_l20_n116
+end
+
+def fun_l19_n320()
+ fun_l20_n517
+end
+
+def fun_l19_n321()
+ fun_l20_n15
+end
+
+def fun_l19_n322()
+ fun_l20_n441
+end
+
+def fun_l19_n323()
+ fun_l20_n25
+end
+
+def fun_l19_n324()
+ fun_l20_n101
+end
+
+def fun_l19_n325()
+ fun_l20_n160
+end
+
+def fun_l19_n326()
+ fun_l20_n784
+end
+
+def fun_l19_n327()
+ fun_l20_n940
+end
+
+def fun_l19_n328()
+ fun_l20_n969
+end
+
+def fun_l19_n329()
+ fun_l20_n306
+end
+
+def fun_l19_n330()
+ fun_l20_n337
+end
+
+def fun_l19_n331()
+ fun_l20_n199
+end
+
+def fun_l19_n332()
+ fun_l20_n341
+end
+
+def fun_l19_n333()
+ fun_l20_n2
+end
+
+def fun_l19_n334()
+ fun_l20_n954
+end
+
+def fun_l19_n335()
+ fun_l20_n463
+end
+
+def fun_l19_n336()
+ fun_l20_n16
+end
+
+def fun_l19_n337()
+ fun_l20_n566
+end
+
+def fun_l19_n338()
+ fun_l20_n807
+end
+
+def fun_l19_n339()
+ fun_l20_n785
+end
+
+def fun_l19_n340()
+ fun_l20_n577
+end
+
+def fun_l19_n341()
+ fun_l20_n744
+end
+
+def fun_l19_n342()
+ fun_l20_n769
+end
+
+def fun_l19_n343()
+ fun_l20_n120
+end
+
+def fun_l19_n344()
+ fun_l20_n846
+end
+
+def fun_l19_n345()
+ fun_l20_n7
+end
+
+def fun_l19_n346()
+ fun_l20_n517
+end
+
+def fun_l19_n347()
+ fun_l20_n138
+end
+
+def fun_l19_n348()
+ fun_l20_n551
+end
+
+def fun_l19_n349()
+ fun_l20_n667
+end
+
+def fun_l19_n350()
+ fun_l20_n983
+end
+
+def fun_l19_n351()
+ fun_l20_n941
+end
+
+def fun_l19_n352()
+ fun_l20_n278
+end
+
+def fun_l19_n353()
+ fun_l20_n360
+end
+
+def fun_l19_n354()
+ fun_l20_n327
+end
+
+def fun_l19_n355()
+ fun_l20_n414
+end
+
+def fun_l19_n356()
+ fun_l20_n200
+end
+
+def fun_l19_n357()
+ fun_l20_n298
+end
+
+def fun_l19_n358()
+ fun_l20_n337
+end
+
+def fun_l19_n359()
+ fun_l20_n602
+end
+
+def fun_l19_n360()
+ fun_l20_n631
+end
+
+def fun_l19_n361()
+ fun_l20_n100
+end
+
+def fun_l19_n362()
+ fun_l20_n179
+end
+
+def fun_l19_n363()
+ fun_l20_n710
+end
+
+def fun_l19_n364()
+ fun_l20_n1
+end
+
+def fun_l19_n365()
+ fun_l20_n88
+end
+
+def fun_l19_n366()
+ fun_l20_n98
+end
+
+def fun_l19_n367()
+ fun_l20_n499
+end
+
+def fun_l19_n368()
+ fun_l20_n610
+end
+
+def fun_l19_n369()
+ fun_l20_n243
+end
+
+def fun_l19_n370()
+ fun_l20_n954
+end
+
+def fun_l19_n371()
+ fun_l20_n204
+end
+
+def fun_l19_n372()
+ fun_l20_n618
+end
+
+def fun_l19_n373()
+ fun_l20_n513
+end
+
+def fun_l19_n374()
+ fun_l20_n341
+end
+
+def fun_l19_n375()
+ fun_l20_n31
+end
+
+def fun_l19_n376()
+ fun_l20_n627
+end
+
+def fun_l19_n377()
+ fun_l20_n817
+end
+
+def fun_l19_n378()
+ fun_l20_n545
+end
+
+def fun_l19_n379()
+ fun_l20_n236
+end
+
+def fun_l19_n380()
+ fun_l20_n926
+end
+
+def fun_l19_n381()
+ fun_l20_n167
+end
+
+def fun_l19_n382()
+ fun_l20_n287
+end
+
+def fun_l19_n383()
+ fun_l20_n264
+end
+
+def fun_l19_n384()
+ fun_l20_n16
+end
+
+def fun_l19_n385()
+ fun_l20_n197
+end
+
+def fun_l19_n386()
+ fun_l20_n791
+end
+
+def fun_l19_n387()
+ fun_l20_n124
+end
+
+def fun_l19_n388()
+ fun_l20_n351
+end
+
+def fun_l19_n389()
+ fun_l20_n893
+end
+
+def fun_l19_n390()
+ fun_l20_n191
+end
+
+def fun_l19_n391()
+ fun_l20_n441
+end
+
+def fun_l19_n392()
+ fun_l20_n781
+end
+
+def fun_l19_n393()
+ fun_l20_n614
+end
+
+def fun_l19_n394()
+ fun_l20_n301
+end
+
+def fun_l19_n395()
+ fun_l20_n749
+end
+
+def fun_l19_n396()
+ fun_l20_n815
+end
+
+def fun_l19_n397()
+ fun_l20_n380
+end
+
+def fun_l19_n398()
+ fun_l20_n594
+end
+
+def fun_l19_n399()
+ fun_l20_n279
+end
+
+def fun_l19_n400()
+ fun_l20_n313
+end
+
+def fun_l19_n401()
+ fun_l20_n151
+end
+
+def fun_l19_n402()
+ fun_l20_n101
+end
+
+def fun_l19_n403()
+ fun_l20_n573
+end
+
+def fun_l19_n404()
+ fun_l20_n386
+end
+
+def fun_l19_n405()
+ fun_l20_n40
+end
+
+def fun_l19_n406()
+ fun_l20_n383
+end
+
+def fun_l19_n407()
+ fun_l20_n612
+end
+
+def fun_l19_n408()
+ fun_l20_n555
+end
+
+def fun_l19_n409()
+ fun_l20_n507
+end
+
+def fun_l19_n410()
+ fun_l20_n519
+end
+
+def fun_l19_n411()
+ fun_l20_n842
+end
+
+def fun_l19_n412()
+ fun_l20_n867
+end
+
+def fun_l19_n413()
+ fun_l20_n84
+end
+
+def fun_l19_n414()
+ fun_l20_n84
+end
+
+def fun_l19_n415()
+ fun_l20_n304
+end
+
+def fun_l19_n416()
+ fun_l20_n776
+end
+
+def fun_l19_n417()
+ fun_l20_n712
+end
+
+def fun_l19_n418()
+ fun_l20_n447
+end
+
+def fun_l19_n419()
+ fun_l20_n428
+end
+
+def fun_l19_n420()
+ fun_l20_n350
+end
+
+def fun_l19_n421()
+ fun_l20_n989
+end
+
+def fun_l19_n422()
+ fun_l20_n444
+end
+
+def fun_l19_n423()
+ fun_l20_n771
+end
+
+def fun_l19_n424()
+ fun_l20_n228
+end
+
+def fun_l19_n425()
+ fun_l20_n870
+end
+
+def fun_l19_n426()
+ fun_l20_n553
+end
+
+def fun_l19_n427()
+ fun_l20_n529
+end
+
+def fun_l19_n428()
+ fun_l20_n118
+end
+
+def fun_l19_n429()
+ fun_l20_n886
+end
+
+def fun_l19_n430()
+ fun_l20_n731
+end
+
+def fun_l19_n431()
+ fun_l20_n585
+end
+
+def fun_l19_n432()
+ fun_l20_n997
+end
+
+def fun_l19_n433()
+ fun_l20_n927
+end
+
+def fun_l19_n434()
+ fun_l20_n739
+end
+
+def fun_l19_n435()
+ fun_l20_n691
+end
+
+def fun_l19_n436()
+ fun_l20_n446
+end
+
+def fun_l19_n437()
+ fun_l20_n932
+end
+
+def fun_l19_n438()
+ fun_l20_n297
+end
+
+def fun_l19_n439()
+ fun_l20_n118
+end
+
+def fun_l19_n440()
+ fun_l20_n464
+end
+
+def fun_l19_n441()
+ fun_l20_n367
+end
+
+def fun_l19_n442()
+ fun_l20_n450
+end
+
+def fun_l19_n443()
+ fun_l20_n690
+end
+
+def fun_l19_n444()
+ fun_l20_n996
+end
+
+def fun_l19_n445()
+ fun_l20_n328
+end
+
+def fun_l19_n446()
+ fun_l20_n873
+end
+
+def fun_l19_n447()
+ fun_l20_n843
+end
+
+def fun_l19_n448()
+ fun_l20_n89
+end
+
+def fun_l19_n449()
+ fun_l20_n485
+end
+
+def fun_l19_n450()
+ fun_l20_n343
+end
+
+def fun_l19_n451()
+ fun_l20_n852
+end
+
+def fun_l19_n452()
+ fun_l20_n545
+end
+
+def fun_l19_n453()
+ fun_l20_n41
+end
+
+def fun_l19_n454()
+ fun_l20_n376
+end
+
+def fun_l19_n455()
+ fun_l20_n625
+end
+
+def fun_l19_n456()
+ fun_l20_n495
+end
+
+def fun_l19_n457()
+ fun_l20_n82
+end
+
+def fun_l19_n458()
+ fun_l20_n238
+end
+
+def fun_l19_n459()
+ fun_l20_n355
+end
+
+def fun_l19_n460()
+ fun_l20_n530
+end
+
+def fun_l19_n461()
+ fun_l20_n926
+end
+
+def fun_l19_n462()
+ fun_l20_n721
+end
+
+def fun_l19_n463()
+ fun_l20_n724
+end
+
+def fun_l19_n464()
+ fun_l20_n280
+end
+
+def fun_l19_n465()
+ fun_l20_n656
+end
+
+def fun_l19_n466()
+ fun_l20_n78
+end
+
+def fun_l19_n467()
+ fun_l20_n353
+end
+
+def fun_l19_n468()
+ fun_l20_n712
+end
+
+def fun_l19_n469()
+ fun_l20_n849
+end
+
+def fun_l19_n470()
+ fun_l20_n682
+end
+
+def fun_l19_n471()
+ fun_l20_n964
+end
+
+def fun_l19_n472()
+ fun_l20_n483
+end
+
+def fun_l19_n473()
+ fun_l20_n6
+end
+
+def fun_l19_n474()
+ fun_l20_n19
+end
+
+def fun_l19_n475()
+ fun_l20_n206
+end
+
+def fun_l19_n476()
+ fun_l20_n165
+end
+
+def fun_l19_n477()
+ fun_l20_n514
+end
+
+def fun_l19_n478()
+ fun_l20_n380
+end
+
+def fun_l19_n479()
+ fun_l20_n381
+end
+
+def fun_l19_n480()
+ fun_l20_n210
+end
+
+def fun_l19_n481()
+ fun_l20_n972
+end
+
+def fun_l19_n482()
+ fun_l20_n211
+end
+
+def fun_l19_n483()
+ fun_l20_n795
+end
+
+def fun_l19_n484()
+ fun_l20_n441
+end
+
+def fun_l19_n485()
+ fun_l20_n539
+end
+
+def fun_l19_n486()
+ fun_l20_n217
+end
+
+def fun_l19_n487()
+ fun_l20_n644
+end
+
+def fun_l19_n488()
+ fun_l20_n641
+end
+
+def fun_l19_n489()
+ fun_l20_n179
+end
+
+def fun_l19_n490()
+ fun_l20_n643
+end
+
+def fun_l19_n491()
+ fun_l20_n797
+end
+
+def fun_l19_n492()
+ fun_l20_n863
+end
+
+def fun_l19_n493()
+ fun_l20_n915
+end
+
+def fun_l19_n494()
+ fun_l20_n13
+end
+
+def fun_l19_n495()
+ fun_l20_n427
+end
+
+def fun_l19_n496()
+ fun_l20_n40
+end
+
+def fun_l19_n497()
+ fun_l20_n724
+end
+
+def fun_l19_n498()
+ fun_l20_n666
+end
+
+def fun_l19_n499()
+ fun_l20_n876
+end
+
+def fun_l19_n500()
+ fun_l20_n980
+end
+
+def fun_l19_n501()
+ fun_l20_n817
+end
+
+def fun_l19_n502()
+ fun_l20_n158
+end
+
+def fun_l19_n503()
+ fun_l20_n738
+end
+
+def fun_l19_n504()
+ fun_l20_n347
+end
+
+def fun_l19_n505()
+ fun_l20_n941
+end
+
+def fun_l19_n506()
+ fun_l20_n330
+end
+
+def fun_l19_n507()
+ fun_l20_n196
+end
+
+def fun_l19_n508()
+ fun_l20_n961
+end
+
+def fun_l19_n509()
+ fun_l20_n909
+end
+
+def fun_l19_n510()
+ fun_l20_n489
+end
+
+def fun_l19_n511()
+ fun_l20_n341
+end
+
+def fun_l19_n512()
+ fun_l20_n437
+end
+
+def fun_l19_n513()
+ fun_l20_n293
+end
+
+def fun_l19_n514()
+ fun_l20_n388
+end
+
+def fun_l19_n515()
+ fun_l20_n85
+end
+
+def fun_l19_n516()
+ fun_l20_n769
+end
+
+def fun_l19_n517()
+ fun_l20_n875
+end
+
+def fun_l19_n518()
+ fun_l20_n247
+end
+
+def fun_l19_n519()
+ fun_l20_n607
+end
+
+def fun_l19_n520()
+ fun_l20_n119
+end
+
+def fun_l19_n521()
+ fun_l20_n44
+end
+
+def fun_l19_n522()
+ fun_l20_n870
+end
+
+def fun_l19_n523()
+ fun_l20_n815
+end
+
+def fun_l19_n524()
+ fun_l20_n393
+end
+
+def fun_l19_n525()
+ fun_l20_n158
+end
+
+def fun_l19_n526()
+ fun_l20_n139
+end
+
+def fun_l19_n527()
+ fun_l20_n808
+end
+
+def fun_l19_n528()
+ fun_l20_n549
+end
+
+def fun_l19_n529()
+ fun_l20_n725
+end
+
+def fun_l19_n530()
+ fun_l20_n758
+end
+
+def fun_l19_n531()
+ fun_l20_n650
+end
+
+def fun_l19_n532()
+ fun_l20_n739
+end
+
+def fun_l19_n533()
+ fun_l20_n912
+end
+
+def fun_l19_n534()
+ fun_l20_n632
+end
+
+def fun_l19_n535()
+ fun_l20_n889
+end
+
+def fun_l19_n536()
+ fun_l20_n609
+end
+
+def fun_l19_n537()
+ fun_l20_n997
+end
+
+def fun_l19_n538()
+ fun_l20_n773
+end
+
+def fun_l19_n539()
+ fun_l20_n48
+end
+
+def fun_l19_n540()
+ fun_l20_n102
+end
+
+def fun_l19_n541()
+ fun_l20_n392
+end
+
+def fun_l19_n542()
+ fun_l20_n570
+end
+
+def fun_l19_n543()
+ fun_l20_n36
+end
+
+def fun_l19_n544()
+ fun_l20_n400
+end
+
+def fun_l19_n545()
+ fun_l20_n545
+end
+
+def fun_l19_n546()
+ fun_l20_n27
+end
+
+def fun_l19_n547()
+ fun_l20_n746
+end
+
+def fun_l19_n548()
+ fun_l20_n796
+end
+
+def fun_l19_n549()
+ fun_l20_n651
+end
+
+def fun_l19_n550()
+ fun_l20_n719
+end
+
+def fun_l19_n551()
+ fun_l20_n941
+end
+
+def fun_l19_n552()
+ fun_l20_n799
+end
+
+def fun_l19_n553()
+ fun_l20_n900
+end
+
+def fun_l19_n554()
+ fun_l20_n288
+end
+
+def fun_l19_n555()
+ fun_l20_n52
+end
+
+def fun_l19_n556()
+ fun_l20_n497
+end
+
+def fun_l19_n557()
+ fun_l20_n781
+end
+
+def fun_l19_n558()
+ fun_l20_n209
+end
+
+def fun_l19_n559()
+ fun_l20_n157
+end
+
+def fun_l19_n560()
+ fun_l20_n102
+end
+
+def fun_l19_n561()
+ fun_l20_n248
+end
+
+def fun_l19_n562()
+ fun_l20_n760
+end
+
+def fun_l19_n563()
+ fun_l20_n640
+end
+
+def fun_l19_n564()
+ fun_l20_n30
+end
+
+def fun_l19_n565()
+ fun_l20_n375
+end
+
+def fun_l19_n566()
+ fun_l20_n472
+end
+
+def fun_l19_n567()
+ fun_l20_n223
+end
+
+def fun_l19_n568()
+ fun_l20_n834
+end
+
+def fun_l19_n569()
+ fun_l20_n804
+end
+
+def fun_l19_n570()
+ fun_l20_n620
+end
+
+def fun_l19_n571()
+ fun_l20_n942
+end
+
+def fun_l19_n572()
+ fun_l20_n58
+end
+
+def fun_l19_n573()
+ fun_l20_n113
+end
+
+def fun_l19_n574()
+ fun_l20_n884
+end
+
+def fun_l19_n575()
+ fun_l20_n965
+end
+
+def fun_l19_n576()
+ fun_l20_n975
+end
+
+def fun_l19_n577()
+ fun_l20_n840
+end
+
+def fun_l19_n578()
+ fun_l20_n422
+end
+
+def fun_l19_n579()
+ fun_l20_n213
+end
+
+def fun_l19_n580()
+ fun_l20_n338
+end
+
+def fun_l19_n581()
+ fun_l20_n823
+end
+
+def fun_l19_n582()
+ fun_l20_n284
+end
+
+def fun_l19_n583()
+ fun_l20_n706
+end
+
+def fun_l19_n584()
+ fun_l20_n148
+end
+
+def fun_l19_n585()
+ fun_l20_n750
+end
+
+def fun_l19_n586()
+ fun_l20_n556
+end
+
+def fun_l19_n587()
+ fun_l20_n939
+end
+
+def fun_l19_n588()
+ fun_l20_n885
+end
+
+def fun_l19_n589()
+ fun_l20_n36
+end
+
+def fun_l19_n590()
+ fun_l20_n771
+end
+
+def fun_l19_n591()
+ fun_l20_n958
+end
+
+def fun_l19_n592()
+ fun_l20_n829
+end
+
+def fun_l19_n593()
+ fun_l20_n334
+end
+
+def fun_l19_n594()
+ fun_l20_n546
+end
+
+def fun_l19_n595()
+ fun_l20_n269
+end
+
+def fun_l19_n596()
+ fun_l20_n528
+end
+
+def fun_l19_n597()
+ fun_l20_n63
+end
+
+def fun_l19_n598()
+ fun_l20_n10
+end
+
+def fun_l19_n599()
+ fun_l20_n160
+end
+
+def fun_l19_n600()
+ fun_l20_n750
+end
+
+def fun_l19_n601()
+ fun_l20_n307
+end
+
+def fun_l19_n602()
+ fun_l20_n700
+end
+
+def fun_l19_n603()
+ fun_l20_n720
+end
+
+def fun_l19_n604()
+ fun_l20_n60
+end
+
+def fun_l19_n605()
+ fun_l20_n179
+end
+
+def fun_l19_n606()
+ fun_l20_n425
+end
+
+def fun_l19_n607()
+ fun_l20_n489
+end
+
+def fun_l19_n608()
+ fun_l20_n804
+end
+
+def fun_l19_n609()
+ fun_l20_n276
+end
+
+def fun_l19_n610()
+ fun_l20_n888
+end
+
+def fun_l19_n611()
+ fun_l20_n412
+end
+
+def fun_l19_n612()
+ fun_l20_n715
+end
+
+def fun_l19_n613()
+ fun_l20_n737
+end
+
+def fun_l19_n614()
+ fun_l20_n332
+end
+
+def fun_l19_n615()
+ fun_l20_n4
+end
+
+def fun_l19_n616()
+ fun_l20_n114
+end
+
+def fun_l19_n617()
+ fun_l20_n502
+end
+
+def fun_l19_n618()
+ fun_l20_n825
+end
+
+def fun_l19_n619()
+ fun_l20_n606
+end
+
+def fun_l19_n620()
+ fun_l20_n396
+end
+
+def fun_l19_n621()
+ fun_l20_n810
+end
+
+def fun_l19_n622()
+ fun_l20_n158
+end
+
+def fun_l19_n623()
+ fun_l20_n246
+end
+
+def fun_l19_n624()
+ fun_l20_n973
+end
+
+def fun_l19_n625()
+ fun_l20_n603
+end
+
+def fun_l19_n626()
+ fun_l20_n192
+end
+
+def fun_l19_n627()
+ fun_l20_n744
+end
+
+def fun_l19_n628()
+ fun_l20_n82
+end
+
+def fun_l19_n629()
+ fun_l20_n491
+end
+
+def fun_l19_n630()
+ fun_l20_n576
+end
+
+def fun_l19_n631()
+ fun_l20_n824
+end
+
+def fun_l19_n632()
+ fun_l20_n711
+end
+
+def fun_l19_n633()
+ fun_l20_n989
+end
+
+def fun_l19_n634()
+ fun_l20_n392
+end
+
+def fun_l19_n635()
+ fun_l20_n39
+end
+
+def fun_l19_n636()
+ fun_l20_n755
+end
+
+def fun_l19_n637()
+ fun_l20_n181
+end
+
+def fun_l19_n638()
+ fun_l20_n538
+end
+
+def fun_l19_n639()
+ fun_l20_n801
+end
+
+def fun_l19_n640()
+ fun_l20_n837
+end
+
+def fun_l19_n641()
+ fun_l20_n587
+end
+
+def fun_l19_n642()
+ fun_l20_n680
+end
+
+def fun_l19_n643()
+ fun_l20_n157
+end
+
+def fun_l19_n644()
+ fun_l20_n885
+end
+
+def fun_l19_n645()
+ fun_l20_n421
+end
+
+def fun_l19_n646()
+ fun_l20_n928
+end
+
+def fun_l19_n647()
+ fun_l20_n819
+end
+
+def fun_l19_n648()
+ fun_l20_n206
+end
+
+def fun_l19_n649()
+ fun_l20_n496
+end
+
+def fun_l19_n650()
+ fun_l20_n706
+end
+
+def fun_l19_n651()
+ fun_l20_n976
+end
+
+def fun_l19_n652()
+ fun_l20_n54
+end
+
+def fun_l19_n653()
+ fun_l20_n530
+end
+
+def fun_l19_n654()
+ fun_l20_n893
+end
+
+def fun_l19_n655()
+ fun_l20_n148
+end
+
+def fun_l19_n656()
+ fun_l20_n461
+end
+
+def fun_l19_n657()
+ fun_l20_n286
+end
+
+def fun_l19_n658()
+ fun_l20_n214
+end
+
+def fun_l19_n659()
+ fun_l20_n818
+end
+
+def fun_l19_n660()
+ fun_l20_n685
+end
+
+def fun_l19_n661()
+ fun_l20_n497
+end
+
+def fun_l19_n662()
+ fun_l20_n251
+end
+
+def fun_l19_n663()
+ fun_l20_n385
+end
+
+def fun_l19_n664()
+ fun_l20_n93
+end
+
+def fun_l19_n665()
+ fun_l20_n853
+end
+
+def fun_l19_n666()
+ fun_l20_n298
+end
+
+def fun_l19_n667()
+ fun_l20_n300
+end
+
+def fun_l19_n668()
+ fun_l20_n702
+end
+
+def fun_l19_n669()
+ fun_l20_n430
+end
+
+def fun_l19_n670()
+ fun_l20_n688
+end
+
+def fun_l19_n671()
+ fun_l20_n272
+end
+
+def fun_l19_n672()
+ fun_l20_n351
+end
+
+def fun_l19_n673()
+ fun_l20_n290
+end
+
+def fun_l19_n674()
+ fun_l20_n45
+end
+
+def fun_l19_n675()
+ fun_l20_n530
+end
+
+def fun_l19_n676()
+ fun_l20_n477
+end
+
+def fun_l19_n677()
+ fun_l20_n770
+end
+
+def fun_l19_n678()
+ fun_l20_n49
+end
+
+def fun_l19_n679()
+ fun_l20_n404
+end
+
+def fun_l19_n680()
+ fun_l20_n344
+end
+
+def fun_l19_n681()
+ fun_l20_n707
+end
+
+def fun_l19_n682()
+ fun_l20_n18
+end
+
+def fun_l19_n683()
+ fun_l20_n590
+end
+
+def fun_l19_n684()
+ fun_l20_n281
+end
+
+def fun_l19_n685()
+ fun_l20_n913
+end
+
+def fun_l19_n686()
+ fun_l20_n884
+end
+
+def fun_l19_n687()
+ fun_l20_n696
+end
+
+def fun_l19_n688()
+ fun_l20_n727
+end
+
+def fun_l19_n689()
+ fun_l20_n168
+end
+
+def fun_l19_n690()
+ fun_l20_n178
+end
+
+def fun_l19_n691()
+ fun_l20_n414
+end
+
+def fun_l19_n692()
+ fun_l20_n331
+end
+
+def fun_l19_n693()
+ fun_l20_n701
+end
+
+def fun_l19_n694()
+ fun_l20_n795
+end
+
+def fun_l19_n695()
+ fun_l20_n413
+end
+
+def fun_l19_n696()
+ fun_l20_n613
+end
+
+def fun_l19_n697()
+ fun_l20_n129
+end
+
+def fun_l19_n698()
+ fun_l20_n162
+end
+
+def fun_l19_n699()
+ fun_l20_n24
+end
+
+def fun_l19_n700()
+ fun_l20_n497
+end
+
+def fun_l19_n701()
+ fun_l20_n850
+end
+
+def fun_l19_n702()
+ fun_l20_n28
+end
+
+def fun_l19_n703()
+ fun_l20_n571
+end
+
+def fun_l19_n704()
+ fun_l20_n77
+end
+
+def fun_l19_n705()
+ fun_l20_n705
+end
+
+def fun_l19_n706()
+ fun_l20_n473
+end
+
+def fun_l19_n707()
+ fun_l20_n993
+end
+
+def fun_l19_n708()
+ fun_l20_n51
+end
+
+def fun_l19_n709()
+ fun_l20_n921
+end
+
+def fun_l19_n710()
+ fun_l20_n773
+end
+
+def fun_l19_n711()
+ fun_l20_n137
+end
+
+def fun_l19_n712()
+ fun_l20_n127
+end
+
+def fun_l19_n713()
+ fun_l20_n714
+end
+
+def fun_l19_n714()
+ fun_l20_n76
+end
+
+def fun_l19_n715()
+ fun_l20_n909
+end
+
+def fun_l19_n716()
+ fun_l20_n206
+end
+
+def fun_l19_n717()
+ fun_l20_n37
+end
+
+def fun_l19_n718()
+ fun_l20_n121
+end
+
+def fun_l19_n719()
+ fun_l20_n438
+end
+
+def fun_l19_n720()
+ fun_l20_n42
+end
+
+def fun_l19_n721()
+ fun_l20_n743
+end
+
+def fun_l19_n722()
+ fun_l20_n730
+end
+
+def fun_l19_n723()
+ fun_l20_n190
+end
+
+def fun_l19_n724()
+ fun_l20_n817
+end
+
+def fun_l19_n725()
+ fun_l20_n119
+end
+
+def fun_l19_n726()
+ fun_l20_n201
+end
+
+def fun_l19_n727()
+ fun_l20_n9
+end
+
+def fun_l19_n728()
+ fun_l20_n666
+end
+
+def fun_l19_n729()
+ fun_l20_n595
+end
+
+def fun_l19_n730()
+ fun_l20_n285
+end
+
+def fun_l19_n731()
+ fun_l20_n586
+end
+
+def fun_l19_n732()
+ fun_l20_n228
+end
+
+def fun_l19_n733()
+ fun_l20_n663
+end
+
+def fun_l19_n734()
+ fun_l20_n810
+end
+
+def fun_l19_n735()
+ fun_l20_n348
+end
+
+def fun_l19_n736()
+ fun_l20_n316
+end
+
+def fun_l19_n737()
+ fun_l20_n140
+end
+
+def fun_l19_n738()
+ fun_l20_n668
+end
+
+def fun_l19_n739()
+ fun_l20_n956
+end
+
+def fun_l19_n740()
+ fun_l20_n252
+end
+
+def fun_l19_n741()
+ fun_l20_n490
+end
+
+def fun_l19_n742()
+ fun_l20_n6
+end
+
+def fun_l19_n743()
+ fun_l20_n389
+end
+
+def fun_l19_n744()
+ fun_l20_n939
+end
+
+def fun_l19_n745()
+ fun_l20_n152
+end
+
+def fun_l19_n746()
+ fun_l20_n895
+end
+
+def fun_l19_n747()
+ fun_l20_n769
+end
+
+def fun_l19_n748()
+ fun_l20_n100
+end
+
+def fun_l19_n749()
+ fun_l20_n492
+end
+
+def fun_l19_n750()
+ fun_l20_n410
+end
+
+def fun_l19_n751()
+ fun_l20_n514
+end
+
+def fun_l19_n752()
+ fun_l20_n801
+end
+
+def fun_l19_n753()
+ fun_l20_n148
+end
+
+def fun_l19_n754()
+ fun_l20_n179
+end
+
+def fun_l19_n755()
+ fun_l20_n35
+end
+
+def fun_l19_n756()
+ fun_l20_n60
+end
+
+def fun_l19_n757()
+ fun_l20_n247
+end
+
+def fun_l19_n758()
+ fun_l20_n783
+end
+
+def fun_l19_n759()
+ fun_l20_n357
+end
+
+def fun_l19_n760()
+ fun_l20_n245
+end
+
+def fun_l19_n761()
+ fun_l20_n26
+end
+
+def fun_l19_n762()
+ fun_l20_n77
+end
+
+def fun_l19_n763()
+ fun_l20_n886
+end
+
+def fun_l19_n764()
+ fun_l20_n375
+end
+
+def fun_l19_n765()
+ fun_l20_n238
+end
+
+def fun_l19_n766()
+ fun_l20_n444
+end
+
+def fun_l19_n767()
+ fun_l20_n665
+end
+
+def fun_l19_n768()
+ fun_l20_n328
+end
+
+def fun_l19_n769()
+ fun_l20_n598
+end
+
+def fun_l19_n770()
+ fun_l20_n988
+end
+
+def fun_l19_n771()
+ fun_l20_n350
+end
+
+def fun_l19_n772()
+ fun_l20_n474
+end
+
+def fun_l19_n773()
+ fun_l20_n460
+end
+
+def fun_l19_n774()
+ fun_l20_n535
+end
+
+def fun_l19_n775()
+ fun_l20_n451
+end
+
+def fun_l19_n776()
+ fun_l20_n945
+end
+
+def fun_l19_n777()
+ fun_l20_n902
+end
+
+def fun_l19_n778()
+ fun_l20_n714
+end
+
+def fun_l19_n779()
+ fun_l20_n5
+end
+
+def fun_l19_n780()
+ fun_l20_n32
+end
+
+def fun_l19_n781()
+ fun_l20_n99
+end
+
+def fun_l19_n782()
+ fun_l20_n931
+end
+
+def fun_l19_n783()
+ fun_l20_n664
+end
+
+def fun_l19_n784()
+ fun_l20_n676
+end
+
+def fun_l19_n785()
+ fun_l20_n671
+end
+
+def fun_l19_n786()
+ fun_l20_n982
+end
+
+def fun_l19_n787()
+ fun_l20_n754
+end
+
+def fun_l19_n788()
+ fun_l20_n945
+end
+
+def fun_l19_n789()
+ fun_l20_n130
+end
+
+def fun_l19_n790()
+ fun_l20_n390
+end
+
+def fun_l19_n791()
+ fun_l20_n999
+end
+
+def fun_l19_n792()
+ fun_l20_n138
+end
+
+def fun_l19_n793()
+ fun_l20_n180
+end
+
+def fun_l19_n794()
+ fun_l20_n897
+end
+
+def fun_l19_n795()
+ fun_l20_n85
+end
+
+def fun_l19_n796()
+ fun_l20_n295
+end
+
+def fun_l19_n797()
+ fun_l20_n577
+end
+
+def fun_l19_n798()
+ fun_l20_n131
+end
+
+def fun_l19_n799()
+ fun_l20_n847
+end
+
+def fun_l19_n800()
+ fun_l20_n703
+end
+
+def fun_l19_n801()
+ fun_l20_n82
+end
+
+def fun_l19_n802()
+ fun_l20_n758
+end
+
+def fun_l19_n803()
+ fun_l20_n789
+end
+
+def fun_l19_n804()
+ fun_l20_n353
+end
+
+def fun_l19_n805()
+ fun_l20_n957
+end
+
+def fun_l19_n806()
+ fun_l20_n135
+end
+
+def fun_l19_n807()
+ fun_l20_n87
+end
+
+def fun_l19_n808()
+ fun_l20_n428
+end
+
+def fun_l19_n809()
+ fun_l20_n660
+end
+
+def fun_l19_n810()
+ fun_l20_n844
+end
+
+def fun_l19_n811()
+ fun_l20_n816
+end
+
+def fun_l19_n812()
+ fun_l20_n478
+end
+
+def fun_l19_n813()
+ fun_l20_n823
+end
+
+def fun_l19_n814()
+ fun_l20_n28
+end
+
+def fun_l19_n815()
+ fun_l20_n965
+end
+
+def fun_l19_n816()
+ fun_l20_n469
+end
+
+def fun_l19_n817()
+ fun_l20_n31
+end
+
+def fun_l19_n818()
+ fun_l20_n639
+end
+
+def fun_l19_n819()
+ fun_l20_n831
+end
+
+def fun_l19_n820()
+ fun_l20_n337
+end
+
+def fun_l19_n821()
+ fun_l20_n330
+end
+
+def fun_l19_n822()
+ fun_l20_n366
+end
+
+def fun_l19_n823()
+ fun_l20_n992
+end
+
+def fun_l19_n824()
+ fun_l20_n349
+end
+
+def fun_l19_n825()
+ fun_l20_n291
+end
+
+def fun_l19_n826()
+ fun_l20_n110
+end
+
+def fun_l19_n827()
+ fun_l20_n204
+end
+
+def fun_l19_n828()
+ fun_l20_n122
+end
+
+def fun_l19_n829()
+ fun_l20_n683
+end
+
+def fun_l19_n830()
+ fun_l20_n759
+end
+
+def fun_l19_n831()
+ fun_l20_n619
+end
+
+def fun_l19_n832()
+ fun_l20_n102
+end
+
+def fun_l19_n833()
+ fun_l20_n532
+end
+
+def fun_l19_n834()
+ fun_l20_n620
+end
+
+def fun_l19_n835()
+ fun_l20_n511
+end
+
+def fun_l19_n836()
+ fun_l20_n80
+end
+
+def fun_l19_n837()
+ fun_l20_n731
+end
+
+def fun_l19_n838()
+ fun_l20_n975
+end
+
+def fun_l19_n839()
+ fun_l20_n947
+end
+
+def fun_l19_n840()
+ fun_l20_n243
+end
+
+def fun_l19_n841()
+ fun_l20_n168
+end
+
+def fun_l19_n842()
+ fun_l20_n31
+end
+
+def fun_l19_n843()
+ fun_l20_n979
+end
+
+def fun_l19_n844()
+ fun_l20_n232
+end
+
+def fun_l19_n845()
+ fun_l20_n596
+end
+
+def fun_l19_n846()
+ fun_l20_n415
+end
+
+def fun_l19_n847()
+ fun_l20_n380
+end
+
+def fun_l19_n848()
+ fun_l20_n904
+end
+
+def fun_l19_n849()
+ fun_l20_n858
+end
+
+def fun_l19_n850()
+ fun_l20_n70
+end
+
+def fun_l19_n851()
+ fun_l20_n204
+end
+
+def fun_l19_n852()
+ fun_l20_n501
+end
+
+def fun_l19_n853()
+ fun_l20_n901
+end
+
+def fun_l19_n854()
+ fun_l20_n107
+end
+
+def fun_l19_n855()
+ fun_l20_n391
+end
+
+def fun_l19_n856()
+ fun_l20_n225
+end
+
+def fun_l19_n857()
+ fun_l20_n173
+end
+
+def fun_l19_n858()
+ fun_l20_n143
+end
+
+def fun_l19_n859()
+ fun_l20_n482
+end
+
+def fun_l19_n860()
+ fun_l20_n614
+end
+
+def fun_l19_n861()
+ fun_l20_n819
+end
+
+def fun_l19_n862()
+ fun_l20_n536
+end
+
+def fun_l19_n863()
+ fun_l20_n370
+end
+
+def fun_l19_n864()
+ fun_l20_n139
+end
+
+def fun_l19_n865()
+ fun_l20_n434
+end
+
+def fun_l19_n866()
+ fun_l20_n529
+end
+
+def fun_l19_n867()
+ fun_l20_n770
+end
+
+def fun_l19_n868()
+ fun_l20_n507
+end
+
+def fun_l19_n869()
+ fun_l20_n453
+end
+
+def fun_l19_n870()
+ fun_l20_n417
+end
+
+def fun_l19_n871()
+ fun_l20_n305
+end
+
+def fun_l19_n872()
+ fun_l20_n537
+end
+
+def fun_l19_n873()
+ fun_l20_n613
+end
+
+def fun_l19_n874()
+ fun_l20_n920
+end
+
+def fun_l19_n875()
+ fun_l20_n623
+end
+
+def fun_l19_n876()
+ fun_l20_n212
+end
+
+def fun_l19_n877()
+ fun_l20_n980
+end
+
+def fun_l19_n878()
+ fun_l20_n580
+end
+
+def fun_l19_n879()
+ fun_l20_n112
+end
+
+def fun_l19_n880()
+ fun_l20_n460
+end
+
+def fun_l19_n881()
+ fun_l20_n364
+end
+
+def fun_l19_n882()
+ fun_l20_n685
+end
+
+def fun_l19_n883()
+ fun_l20_n429
+end
+
+def fun_l19_n884()
+ fun_l20_n90
+end
+
+def fun_l19_n885()
+ fun_l20_n448
+end
+
+def fun_l19_n886()
+ fun_l20_n898
+end
+
+def fun_l19_n887()
+ fun_l20_n10
+end
+
+def fun_l19_n888()
+ fun_l20_n618
+end
+
+def fun_l19_n889()
+ fun_l20_n447
+end
+
+def fun_l19_n890()
+ fun_l20_n414
+end
+
+def fun_l19_n891()
+ fun_l20_n570
+end
+
+def fun_l19_n892()
+ fun_l20_n828
+end
+
+def fun_l19_n893()
+ fun_l20_n367
+end
+
+def fun_l19_n894()
+ fun_l20_n897
+end
+
+def fun_l19_n895()
+ fun_l20_n978
+end
+
+def fun_l19_n896()
+ fun_l20_n57
+end
+
+def fun_l19_n897()
+ fun_l20_n61
+end
+
+def fun_l19_n898()
+ fun_l20_n483
+end
+
+def fun_l19_n899()
+ fun_l20_n407
+end
+
+def fun_l19_n900()
+ fun_l20_n369
+end
+
+def fun_l19_n901()
+ fun_l20_n635
+end
+
+def fun_l19_n902()
+ fun_l20_n800
+end
+
+def fun_l19_n903()
+ fun_l20_n748
+end
+
+def fun_l19_n904()
+ fun_l20_n436
+end
+
+def fun_l19_n905()
+ fun_l20_n990
+end
+
+def fun_l19_n906()
+ fun_l20_n484
+end
+
+def fun_l19_n907()
+ fun_l20_n530
+end
+
+def fun_l19_n908()
+ fun_l20_n692
+end
+
+def fun_l19_n909()
+ fun_l20_n356
+end
+
+def fun_l19_n910()
+ fun_l20_n786
+end
+
+def fun_l19_n911()
+ fun_l20_n894
+end
+
+def fun_l19_n912()
+ fun_l20_n217
+end
+
+def fun_l19_n913()
+ fun_l20_n495
+end
+
+def fun_l19_n914()
+ fun_l20_n878
+end
+
+def fun_l19_n915()
+ fun_l20_n166
+end
+
+def fun_l19_n916()
+ fun_l20_n558
+end
+
+def fun_l19_n917()
+ fun_l20_n704
+end
+
+def fun_l19_n918()
+ fun_l20_n996
+end
+
+def fun_l19_n919()
+ fun_l20_n302
+end
+
+def fun_l19_n920()
+ fun_l20_n44
+end
+
+def fun_l19_n921()
+ fun_l20_n694
+end
+
+def fun_l19_n922()
+ fun_l20_n221
+end
+
+def fun_l19_n923()
+ fun_l20_n419
+end
+
+def fun_l19_n924()
+ fun_l20_n400
+end
+
+def fun_l19_n925()
+ fun_l20_n306
+end
+
+def fun_l19_n926()
+ fun_l20_n785
+end
+
+def fun_l19_n927()
+ fun_l20_n851
+end
+
+def fun_l19_n928()
+ fun_l20_n769
+end
+
+def fun_l19_n929()
+ fun_l20_n547
+end
+
+def fun_l19_n930()
+ fun_l20_n887
+end
+
+def fun_l19_n931()
+ fun_l20_n413
+end
+
+def fun_l19_n932()
+ fun_l20_n253
+end
+
+def fun_l19_n933()
+ fun_l20_n37
+end
+
+def fun_l19_n934()
+ fun_l20_n405
+end
+
+def fun_l19_n935()
+ fun_l20_n926
+end
+
+def fun_l19_n936()
+ fun_l20_n864
+end
+
+def fun_l19_n937()
+ fun_l20_n231
+end
+
+def fun_l19_n938()
+ fun_l20_n688
+end
+
+def fun_l19_n939()
+ fun_l20_n144
+end
+
+def fun_l19_n940()
+ fun_l20_n606
+end
+
+def fun_l19_n941()
+ fun_l20_n180
+end
+
+def fun_l19_n942()
+ fun_l20_n103
+end
+
+def fun_l19_n943()
+ fun_l20_n314
+end
+
+def fun_l19_n944()
+ fun_l20_n966
+end
+
+def fun_l19_n945()
+ fun_l20_n15
+end
+
+def fun_l19_n946()
+ fun_l20_n343
+end
+
+def fun_l19_n947()
+ fun_l20_n388
+end
+
+def fun_l19_n948()
+ fun_l20_n868
+end
+
+def fun_l19_n949()
+ fun_l20_n939
+end
+
+def fun_l19_n950()
+ fun_l20_n364
+end
+
+def fun_l19_n951()
+ fun_l20_n739
+end
+
+def fun_l19_n952()
+ fun_l20_n725
+end
+
+def fun_l19_n953()
+ fun_l20_n463
+end
+
+def fun_l19_n954()
+ fun_l20_n737
+end
+
+def fun_l19_n955()
+ fun_l20_n83
+end
+
+def fun_l19_n956()
+ fun_l20_n807
+end
+
+def fun_l19_n957()
+ fun_l20_n710
+end
+
+def fun_l19_n958()
+ fun_l20_n48
+end
+
+def fun_l19_n959()
+ fun_l20_n82
+end
+
+def fun_l19_n960()
+ fun_l20_n330
+end
+
+def fun_l19_n961()
+ fun_l20_n378
+end
+
+def fun_l19_n962()
+ fun_l20_n35
+end
+
+def fun_l19_n963()
+ fun_l20_n191
+end
+
+def fun_l19_n964()
+ fun_l20_n282
+end
+
+def fun_l19_n965()
+ fun_l20_n222
+end
+
+def fun_l19_n966()
+ fun_l20_n416
+end
+
+def fun_l19_n967()
+ fun_l20_n304
+end
+
+def fun_l19_n968()
+ fun_l20_n325
+end
+
+def fun_l19_n969()
+ fun_l20_n374
+end
+
+def fun_l19_n970()
+ fun_l20_n25
+end
+
+def fun_l19_n971()
+ fun_l20_n815
+end
+
+def fun_l19_n972()
+ fun_l20_n272
+end
+
+def fun_l19_n973()
+ fun_l20_n57
+end
+
+def fun_l19_n974()
+ fun_l20_n567
+end
+
+def fun_l19_n975()
+ fun_l20_n995
+end
+
+def fun_l19_n976()
+ fun_l20_n390
+end
+
+def fun_l19_n977()
+ fun_l20_n706
+end
+
+def fun_l19_n978()
+ fun_l20_n496
+end
+
+def fun_l19_n979()
+ fun_l20_n685
+end
+
+def fun_l19_n980()
+ fun_l20_n277
+end
+
+def fun_l19_n981()
+ fun_l20_n933
+end
+
+def fun_l19_n982()
+ fun_l20_n958
+end
+
+def fun_l19_n983()
+ fun_l20_n9
+end
+
+def fun_l19_n984()
+ fun_l20_n455
+end
+
+def fun_l19_n985()
+ fun_l20_n824
+end
+
+def fun_l19_n986()
+ fun_l20_n855
+end
+
+def fun_l19_n987()
+ fun_l20_n561
+end
+
+def fun_l19_n988()
+ fun_l20_n66
+end
+
+def fun_l19_n989()
+ fun_l20_n836
+end
+
+def fun_l19_n990()
+ fun_l20_n466
+end
+
+def fun_l19_n991()
+ fun_l20_n902
+end
+
+def fun_l19_n992()
+ fun_l20_n196
+end
+
+def fun_l19_n993()
+ fun_l20_n488
+end
+
+def fun_l19_n994()
+ fun_l20_n490
+end
+
+def fun_l19_n995()
+ fun_l20_n463
+end
+
+def fun_l19_n996()
+ fun_l20_n222
+end
+
+def fun_l19_n997()
+ fun_l20_n935
+end
+
+def fun_l19_n998()
+ fun_l20_n664
+end
+
+def fun_l19_n999()
+ fun_l20_n44
+end
+
+def fun_l20_n0()
+ fun_l21_n583
+end
+
+def fun_l20_n1()
+ fun_l21_n600
+end
+
+def fun_l20_n2()
+ fun_l21_n308
+end
+
+def fun_l20_n3()
+ fun_l21_n395
+end
+
+def fun_l20_n4()
+ fun_l21_n468
+end
+
+def fun_l20_n5()
+ fun_l21_n340
+end
+
+def fun_l20_n6()
+ fun_l21_n647
+end
+
+def fun_l20_n7()
+ fun_l21_n53
+end
+
+def fun_l20_n8()
+ fun_l21_n231
+end
+
+def fun_l20_n9()
+ fun_l21_n965
+end
+
+def fun_l20_n10()
+ fun_l21_n82
+end
+
+def fun_l20_n11()
+ fun_l21_n464
+end
+
+def fun_l20_n12()
+ fun_l21_n694
+end
+
+def fun_l20_n13()
+ fun_l21_n398
+end
+
+def fun_l20_n14()
+ fun_l21_n197
+end
+
+def fun_l20_n15()
+ fun_l21_n447
+end
+
+def fun_l20_n16()
+ fun_l21_n976
+end
+
+def fun_l20_n17()
+ fun_l21_n421
+end
+
+def fun_l20_n18()
+ fun_l21_n163
+end
+
+def fun_l20_n19()
+ fun_l21_n467
+end
+
+def fun_l20_n20()
+ fun_l21_n210
+end
+
+def fun_l20_n21()
+ fun_l21_n837
+end
+
+def fun_l20_n22()
+ fun_l21_n257
+end
+
+def fun_l20_n23()
+ fun_l21_n818
+end
+
+def fun_l20_n24()
+ fun_l21_n585
+end
+
+def fun_l20_n25()
+ fun_l21_n125
+end
+
+def fun_l20_n26()
+ fun_l21_n740
+end
+
+def fun_l20_n27()
+ fun_l21_n771
+end
+
+def fun_l20_n28()
+ fun_l21_n559
+end
+
+def fun_l20_n29()
+ fun_l21_n591
+end
+
+def fun_l20_n30()
+ fun_l21_n37
+end
+
+def fun_l20_n31()
+ fun_l21_n796
+end
+
+def fun_l20_n32()
+ fun_l21_n762
+end
+
+def fun_l20_n33()
+ fun_l21_n26
+end
+
+def fun_l20_n34()
+ fun_l21_n70
+end
+
+def fun_l20_n35()
+ fun_l21_n789
+end
+
+def fun_l20_n36()
+ fun_l21_n389
+end
+
+def fun_l20_n37()
+ fun_l21_n769
+end
+
+def fun_l20_n38()
+ fun_l21_n296
+end
+
+def fun_l20_n39()
+ fun_l21_n131
+end
+
+def fun_l20_n40()
+ fun_l21_n405
+end
+
+def fun_l20_n41()
+ fun_l21_n546
+end
+
+def fun_l20_n42()
+ fun_l21_n232
+end
+
+def fun_l20_n43()
+ fun_l21_n538
+end
+
+def fun_l20_n44()
+ fun_l21_n55
+end
+
+def fun_l20_n45()
+ fun_l21_n962
+end
+
+def fun_l20_n46()
+ fun_l21_n664
+end
+
+def fun_l20_n47()
+ fun_l21_n443
+end
+
+def fun_l20_n48()
+ fun_l21_n854
+end
+
+def fun_l20_n49()
+ fun_l21_n392
+end
+
+def fun_l20_n50()
+ fun_l21_n699
+end
+
+def fun_l20_n51()
+ fun_l21_n748
+end
+
+def fun_l20_n52()
+ fun_l21_n891
+end
+
+def fun_l20_n53()
+ fun_l21_n411
+end
+
+def fun_l20_n54()
+ fun_l21_n798
+end
+
+def fun_l20_n55()
+ fun_l21_n99
+end
+
+def fun_l20_n56()
+ fun_l21_n538
+end
+
+def fun_l20_n57()
+ fun_l21_n473
+end
+
+def fun_l20_n58()
+ fun_l21_n498
+end
+
+def fun_l20_n59()
+ fun_l21_n769
+end
+
+def fun_l20_n60()
+ fun_l21_n117
+end
+
+def fun_l20_n61()
+ fun_l21_n487
+end
+
+def fun_l20_n62()
+ fun_l21_n538
+end
+
+def fun_l20_n63()
+ fun_l21_n312
+end
+
+def fun_l20_n64()
+ fun_l21_n642
+end
+
+def fun_l20_n65()
+ fun_l21_n877
+end
+
+def fun_l20_n66()
+ fun_l21_n481
+end
+
+def fun_l20_n67()
+ fun_l21_n252
+end
+
+def fun_l20_n68()
+ fun_l21_n367
+end
+
+def fun_l20_n69()
+ fun_l21_n438
+end
+
+def fun_l20_n70()
+ fun_l21_n811
+end
+
+def fun_l20_n71()
+ fun_l21_n807
+end
+
+def fun_l20_n72()
+ fun_l21_n410
+end
+
+def fun_l20_n73()
+ fun_l21_n590
+end
+
+def fun_l20_n74()
+ fun_l21_n963
+end
+
+def fun_l20_n75()
+ fun_l21_n103
+end
+
+def fun_l20_n76()
+ fun_l21_n786
+end
+
+def fun_l20_n77()
+ fun_l21_n256
+end
+
+def fun_l20_n78()
+ fun_l21_n306
+end
+
+def fun_l20_n79()
+ fun_l21_n248
+end
+
+def fun_l20_n80()
+ fun_l21_n931
+end
+
+def fun_l20_n81()
+ fun_l21_n926
+end
+
+def fun_l20_n82()
+ fun_l21_n702
+end
+
+def fun_l20_n83()
+ fun_l21_n611
+end
+
+def fun_l20_n84()
+ fun_l21_n279
+end
+
+def fun_l20_n85()
+ fun_l21_n977
+end
+
+def fun_l20_n86()
+ fun_l21_n239
+end
+
+def fun_l20_n87()
+ fun_l21_n370
+end
+
+def fun_l20_n88()
+ fun_l21_n652
+end
+
+def fun_l20_n89()
+ fun_l21_n956
+end
+
+def fun_l20_n90()
+ fun_l21_n998
+end
+
+def fun_l20_n91()
+ fun_l21_n523
+end
+
+def fun_l20_n92()
+ fun_l21_n376
+end
+
+def fun_l20_n93()
+ fun_l21_n604
+end
+
+def fun_l20_n94()
+ fun_l21_n908
+end
+
+def fun_l20_n95()
+ fun_l21_n716
+end
+
+def fun_l20_n96()
+ fun_l21_n9
+end
+
+def fun_l20_n97()
+ fun_l21_n571
+end
+
+def fun_l20_n98()
+ fun_l21_n787
+end
+
+def fun_l20_n99()
+ fun_l21_n453
+end
+
+def fun_l20_n100()
+ fun_l21_n899
+end
+
+def fun_l20_n101()
+ fun_l21_n491
+end
+
+def fun_l20_n102()
+ fun_l21_n47
+end
+
+def fun_l20_n103()
+ fun_l21_n892
+end
+
+def fun_l20_n104()
+ fun_l21_n974
+end
+
+def fun_l20_n105()
+ fun_l21_n993
+end
+
+def fun_l20_n106()
+ fun_l21_n625
+end
+
+def fun_l20_n107()
+ fun_l21_n743
+end
+
+def fun_l20_n108()
+ fun_l21_n266
+end
+
+def fun_l20_n109()
+ fun_l21_n650
+end
+
+def fun_l20_n110()
+ fun_l21_n642
+end
+
+def fun_l20_n111()
+ fun_l21_n905
+end
+
+def fun_l20_n112()
+ fun_l21_n225
+end
+
+def fun_l20_n113()
+ fun_l21_n857
+end
+
+def fun_l20_n114()
+ fun_l21_n82
+end
+
+def fun_l20_n115()
+ fun_l21_n166
+end
+
+def fun_l20_n116()
+ fun_l21_n844
+end
+
+def fun_l20_n117()
+ fun_l21_n619
+end
+
+def fun_l20_n118()
+ fun_l21_n743
+end
+
+def fun_l20_n119()
+ fun_l21_n69
+end
+
+def fun_l20_n120()
+ fun_l21_n410
+end
+
+def fun_l20_n121()
+ fun_l21_n364
+end
+
+def fun_l20_n122()
+ fun_l21_n186
+end
+
+def fun_l20_n123()
+ fun_l21_n750
+end
+
+def fun_l20_n124()
+ fun_l21_n683
+end
+
+def fun_l20_n125()
+ fun_l21_n576
+end
+
+def fun_l20_n126()
+ fun_l21_n287
+end
+
+def fun_l20_n127()
+ fun_l21_n483
+end
+
+def fun_l20_n128()
+ fun_l21_n738
+end
+
+def fun_l20_n129()
+ fun_l21_n779
+end
+
+def fun_l20_n130()
+ fun_l21_n209
+end
+
+def fun_l20_n131()
+ fun_l21_n652
+end
+
+def fun_l20_n132()
+ fun_l21_n583
+end
+
+def fun_l20_n133()
+ fun_l21_n389
+end
+
+def fun_l20_n134()
+ fun_l21_n289
+end
+
+def fun_l20_n135()
+ fun_l21_n993
+end
+
+def fun_l20_n136()
+ fun_l21_n216
+end
+
+def fun_l20_n137()
+ fun_l21_n118
+end
+
+def fun_l20_n138()
+ fun_l21_n484
+end
+
+def fun_l20_n139()
+ fun_l21_n602
+end
+
+def fun_l20_n140()
+ fun_l21_n714
+end
+
+def fun_l20_n141()
+ fun_l21_n247
+end
+
+def fun_l20_n142()
+ fun_l21_n27
+end
+
+def fun_l20_n143()
+ fun_l21_n939
+end
+
+def fun_l20_n144()
+ fun_l21_n565
+end
+
+def fun_l20_n145()
+ fun_l21_n869
+end
+
+def fun_l20_n146()
+ fun_l21_n569
+end
+
+def fun_l20_n147()
+ fun_l21_n876
+end
+
+def fun_l20_n148()
+ fun_l21_n796
+end
+
+def fun_l20_n149()
+ fun_l21_n754
+end
+
+def fun_l20_n150()
+ fun_l21_n664
+end
+
+def fun_l20_n151()
+ fun_l21_n836
+end
+
+def fun_l20_n152()
+ fun_l21_n389
+end
+
+def fun_l20_n153()
+ fun_l21_n111
+end
+
+def fun_l20_n154()
+ fun_l21_n361
+end
+
+def fun_l20_n155()
+ fun_l21_n733
+end
+
+def fun_l20_n156()
+ fun_l21_n215
+end
+
+def fun_l20_n157()
+ fun_l21_n509
+end
+
+def fun_l20_n158()
+ fun_l21_n12
+end
+
+def fun_l20_n159()
+ fun_l21_n351
+end
+
+def fun_l20_n160()
+ fun_l21_n872
+end
+
+def fun_l20_n161()
+ fun_l21_n888
+end
+
+def fun_l20_n162()
+ fun_l21_n126
+end
+
+def fun_l20_n163()
+ fun_l21_n681
+end
+
+def fun_l20_n164()
+ fun_l21_n160
+end
+
+def fun_l20_n165()
+ fun_l21_n917
+end
+
+def fun_l20_n166()
+ fun_l21_n255
+end
+
+def fun_l20_n167()
+ fun_l21_n37
+end
+
+def fun_l20_n168()
+ fun_l21_n949
+end
+
+def fun_l20_n169()
+ fun_l21_n925
+end
+
+def fun_l20_n170()
+ fun_l21_n921
+end
+
+def fun_l20_n171()
+ fun_l21_n123
+end
+
+def fun_l20_n172()
+ fun_l21_n783
+end
+
+def fun_l20_n173()
+ fun_l21_n45
+end
+
+def fun_l20_n174()
+ fun_l21_n994
+end
+
+def fun_l20_n175()
+ fun_l21_n745
+end
+
+def fun_l20_n176()
+ fun_l21_n122
+end
+
+def fun_l20_n177()
+ fun_l21_n25
+end
+
+def fun_l20_n178()
+ fun_l21_n594
+end
+
+def fun_l20_n179()
+ fun_l21_n115
+end
+
+def fun_l20_n180()
+ fun_l21_n274
+end
+
+def fun_l20_n181()
+ fun_l21_n423
+end
+
+def fun_l20_n182()
+ fun_l21_n68
+end
+
+def fun_l20_n183()
+ fun_l21_n598
+end
+
+def fun_l20_n184()
+ fun_l21_n640
+end
+
+def fun_l20_n185()
+ fun_l21_n810
+end
+
+def fun_l20_n186()
+ fun_l21_n150
+end
+
+def fun_l20_n187()
+ fun_l21_n4
+end
+
+def fun_l20_n188()
+ fun_l21_n487
+end
+
+def fun_l20_n189()
+ fun_l21_n327
+end
+
+def fun_l20_n190()
+ fun_l21_n652
+end
+
+def fun_l20_n191()
+ fun_l21_n913
+end
+
+def fun_l20_n192()
+ fun_l21_n323
+end
+
+def fun_l20_n193()
+ fun_l21_n193
+end
+
+def fun_l20_n194()
+ fun_l21_n527
+end
+
+def fun_l20_n195()
+ fun_l21_n123
+end
+
+def fun_l20_n196()
+ fun_l21_n568
+end
+
+def fun_l20_n197()
+ fun_l21_n629
+end
+
+def fun_l20_n198()
+ fun_l21_n727
+end
+
+def fun_l20_n199()
+ fun_l21_n470
+end
+
+def fun_l20_n200()
+ fun_l21_n608
+end
+
+def fun_l20_n201()
+ fun_l21_n941
+end
+
+def fun_l20_n202()
+ fun_l21_n256
+end
+
+def fun_l20_n203()
+ fun_l21_n624
+end
+
+def fun_l20_n204()
+ fun_l21_n714
+end
+
+def fun_l20_n205()
+ fun_l21_n754
+end
+
+def fun_l20_n206()
+ fun_l21_n513
+end
+
+def fun_l20_n207()
+ fun_l21_n730
+end
+
+def fun_l20_n208()
+ fun_l21_n132
+end
+
+def fun_l20_n209()
+ fun_l21_n205
+end
+
+def fun_l20_n210()
+ fun_l21_n549
+end
+
+def fun_l20_n211()
+ fun_l21_n713
+end
+
+def fun_l20_n212()
+ fun_l21_n51
+end
+
+def fun_l20_n213()
+ fun_l21_n712
+end
+
+def fun_l20_n214()
+ fun_l21_n439
+end
+
+def fun_l20_n215()
+ fun_l21_n969
+end
+
+def fun_l20_n216()
+ fun_l21_n338
+end
+
+def fun_l20_n217()
+ fun_l21_n852
+end
+
+def fun_l20_n218()
+ fun_l21_n935
+end
+
+def fun_l20_n219()
+ fun_l21_n935
+end
+
+def fun_l20_n220()
+ fun_l21_n967
+end
+
+def fun_l20_n221()
+ fun_l21_n195
+end
+
+def fun_l20_n222()
+ fun_l21_n556
+end
+
+def fun_l20_n223()
+ fun_l21_n669
+end
+
+def fun_l20_n224()
+ fun_l21_n874
+end
+
+def fun_l20_n225()
+ fun_l21_n985
+end
+
+def fun_l20_n226()
+ fun_l21_n769
+end
+
+def fun_l20_n227()
+ fun_l21_n482
+end
+
+def fun_l20_n228()
+ fun_l21_n268
+end
+
+def fun_l20_n229()
+ fun_l21_n161
+end
+
+def fun_l20_n230()
+ fun_l21_n383
+end
+
+def fun_l20_n231()
+ fun_l21_n100
+end
+
+def fun_l20_n232()
+ fun_l21_n285
+end
+
+def fun_l20_n233()
+ fun_l21_n255
+end
+
+def fun_l20_n234()
+ fun_l21_n214
+end
+
+def fun_l20_n235()
+ fun_l21_n206
+end
+
+def fun_l20_n236()
+ fun_l21_n990
+end
+
+def fun_l20_n237()
+ fun_l21_n24
+end
+
+def fun_l20_n238()
+ fun_l21_n531
+end
+
+def fun_l20_n239()
+ fun_l21_n171
+end
+
+def fun_l20_n240()
+ fun_l21_n859
+end
+
+def fun_l20_n241()
+ fun_l21_n342
+end
+
+def fun_l20_n242()
+ fun_l21_n724
+end
+
+def fun_l20_n243()
+ fun_l21_n55
+end
+
+def fun_l20_n244()
+ fun_l21_n404
+end
+
+def fun_l20_n245()
+ fun_l21_n615
+end
+
+def fun_l20_n246()
+ fun_l21_n692
+end
+
+def fun_l20_n247()
+ fun_l21_n851
+end
+
+def fun_l20_n248()
+ fun_l21_n715
+end
+
+def fun_l20_n249()
+ fun_l21_n723
+end
+
+def fun_l20_n250()
+ fun_l21_n929
+end
+
+def fun_l20_n251()
+ fun_l21_n26
+end
+
+def fun_l20_n252()
+ fun_l21_n314
+end
+
+def fun_l20_n253()
+ fun_l21_n182
+end
+
+def fun_l20_n254()
+ fun_l21_n889
+end
+
+def fun_l20_n255()
+ fun_l21_n725
+end
+
+def fun_l20_n256()
+ fun_l21_n538
+end
+
+def fun_l20_n257()
+ fun_l21_n303
+end
+
+def fun_l20_n258()
+ fun_l21_n843
+end
+
+def fun_l20_n259()
+ fun_l21_n977
+end
+
+def fun_l20_n260()
+ fun_l21_n438
+end
+
+def fun_l20_n261()
+ fun_l21_n772
+end
+
+def fun_l20_n262()
+ fun_l21_n432
+end
+
+def fun_l20_n263()
+ fun_l21_n204
+end
+
+def fun_l20_n264()
+ fun_l21_n853
+end
+
+def fun_l20_n265()
+ fun_l21_n7
+end
+
+def fun_l20_n266()
+ fun_l21_n171
+end
+
+def fun_l20_n267()
+ fun_l21_n907
+end
+
+def fun_l20_n268()
+ fun_l21_n450
+end
+
+def fun_l20_n269()
+ fun_l21_n836
+end
+
+def fun_l20_n270()
+ fun_l21_n118
+end
+
+def fun_l20_n271()
+ fun_l21_n782
+end
+
+def fun_l20_n272()
+ fun_l21_n160
+end
+
+def fun_l20_n273()
+ fun_l21_n73
+end
+
+def fun_l20_n274()
+ fun_l21_n339
+end
+
+def fun_l20_n275()
+ fun_l21_n257
+end
+
+def fun_l20_n276()
+ fun_l21_n860
+end
+
+def fun_l20_n277()
+ fun_l21_n837
+end
+
+def fun_l20_n278()
+ fun_l21_n936
+end
+
+def fun_l20_n279()
+ fun_l21_n627
+end
+
+def fun_l20_n280()
+ fun_l21_n45
+end
+
+def fun_l20_n281()
+ fun_l21_n934
+end
+
+def fun_l20_n282()
+ fun_l21_n213
+end
+
+def fun_l20_n283()
+ fun_l21_n629
+end
+
+def fun_l20_n284()
+ fun_l21_n944
+end
+
+def fun_l20_n285()
+ fun_l21_n44
+end
+
+def fun_l20_n286()
+ fun_l21_n306
+end
+
+def fun_l20_n287()
+ fun_l21_n259
+end
+
+def fun_l20_n288()
+ fun_l21_n805
+end
+
+def fun_l20_n289()
+ fun_l21_n118
+end
+
+def fun_l20_n290()
+ fun_l21_n456
+end
+
+def fun_l20_n291()
+ fun_l21_n11
+end
+
+def fun_l20_n292()
+ fun_l21_n138
+end
+
+def fun_l20_n293()
+ fun_l21_n110
+end
+
+def fun_l20_n294()
+ fun_l21_n165
+end
+
+def fun_l20_n295()
+ fun_l21_n129
+end
+
+def fun_l20_n296()
+ fun_l21_n731
+end
+
+def fun_l20_n297()
+ fun_l21_n219
+end
+
+def fun_l20_n298()
+ fun_l21_n175
+end
+
+def fun_l20_n299()
+ fun_l21_n497
+end
+
+def fun_l20_n300()
+ fun_l21_n154
+end
+
+def fun_l20_n301()
+ fun_l21_n446
+end
+
+def fun_l20_n302()
+ fun_l21_n890
+end
+
+def fun_l20_n303()
+ fun_l21_n325
+end
+
+def fun_l20_n304()
+ fun_l21_n616
+end
+
+def fun_l20_n305()
+ fun_l21_n743
+end
+
+def fun_l20_n306()
+ fun_l21_n327
+end
+
+def fun_l20_n307()
+ fun_l21_n890
+end
+
+def fun_l20_n308()
+ fun_l21_n289
+end
+
+def fun_l20_n309()
+ fun_l21_n150
+end
+
+def fun_l20_n310()
+ fun_l21_n22
+end
+
+def fun_l20_n311()
+ fun_l21_n290
+end
+
+def fun_l20_n312()
+ fun_l21_n780
+end
+
+def fun_l20_n313()
+ fun_l21_n204
+end
+
+def fun_l20_n314()
+ fun_l21_n204
+end
+
+def fun_l20_n315()
+ fun_l21_n841
+end
+
+def fun_l20_n316()
+ fun_l21_n990
+end
+
+def fun_l20_n317()
+ fun_l21_n574
+end
+
+def fun_l20_n318()
+ fun_l21_n543
+end
+
+def fun_l20_n319()
+ fun_l21_n388
+end
+
+def fun_l20_n320()
+ fun_l21_n44
+end
+
+def fun_l20_n321()
+ fun_l21_n65
+end
+
+def fun_l20_n322()
+ fun_l21_n952
+end
+
+def fun_l20_n323()
+ fun_l21_n633
+end
+
+def fun_l20_n324()
+ fun_l21_n729
+end
+
+def fun_l20_n325()
+ fun_l21_n356
+end
+
+def fun_l20_n326()
+ fun_l21_n968
+end
+
+def fun_l20_n327()
+ fun_l21_n92
+end
+
+def fun_l20_n328()
+ fun_l21_n285
+end
+
+def fun_l20_n329()
+ fun_l21_n341
+end
+
+def fun_l20_n330()
+ fun_l21_n818
+end
+
+def fun_l20_n331()
+ fun_l21_n373
+end
+
+def fun_l20_n332()
+ fun_l21_n166
+end
+
+def fun_l20_n333()
+ fun_l21_n618
+end
+
+def fun_l20_n334()
+ fun_l21_n160
+end
+
+def fun_l20_n335()
+ fun_l21_n965
+end
+
+def fun_l20_n336()
+ fun_l21_n436
+end
+
+def fun_l20_n337()
+ fun_l21_n244
+end
+
+def fun_l20_n338()
+ fun_l21_n425
+end
+
+def fun_l20_n339()
+ fun_l21_n576
+end
+
+def fun_l20_n340()
+ fun_l21_n789
+end
+
+def fun_l20_n341()
+ fun_l21_n559
+end
+
+def fun_l20_n342()
+ fun_l21_n766
+end
+
+def fun_l20_n343()
+ fun_l21_n131
+end
+
+def fun_l20_n344()
+ fun_l21_n806
+end
+
+def fun_l20_n345()
+ fun_l21_n624
+end
+
+def fun_l20_n346()
+ fun_l21_n342
+end
+
+def fun_l20_n347()
+ fun_l21_n567
+end
+
+def fun_l20_n348()
+ fun_l21_n569
+end
+
+def fun_l20_n349()
+ fun_l21_n623
+end
+
+def fun_l20_n350()
+ fun_l21_n984
+end
+
+def fun_l20_n351()
+ fun_l21_n931
+end
+
+def fun_l20_n352()
+ fun_l21_n48
+end
+
+def fun_l20_n353()
+ fun_l21_n962
+end
+
+def fun_l20_n354()
+ fun_l21_n757
+end
+
+def fun_l20_n355()
+ fun_l21_n844
+end
+
+def fun_l20_n356()
+ fun_l21_n217
+end
+
+def fun_l20_n357()
+ fun_l21_n933
+end
+
+def fun_l20_n358()
+ fun_l21_n579
+end
+
+def fun_l20_n359()
+ fun_l21_n342
+end
+
+def fun_l20_n360()
+ fun_l21_n975
+end
+
+def fun_l20_n361()
+ fun_l21_n177
+end
+
+def fun_l20_n362()
+ fun_l21_n491
+end
+
+def fun_l20_n363()
+ fun_l21_n637
+end
+
+def fun_l20_n364()
+ fun_l21_n505
+end
+
+def fun_l20_n365()
+ fun_l21_n784
+end
+
+def fun_l20_n366()
+ fun_l21_n62
+end
+
+def fun_l20_n367()
+ fun_l21_n478
+end
+
+def fun_l20_n368()
+ fun_l21_n369
+end
+
+def fun_l20_n369()
+ fun_l21_n105
+end
+
+def fun_l20_n370()
+ fun_l21_n352
+end
+
+def fun_l20_n371()
+ fun_l21_n537
+end
+
+def fun_l20_n372()
+ fun_l21_n180
+end
+
+def fun_l20_n373()
+ fun_l21_n216
+end
+
+def fun_l20_n374()
+ fun_l21_n938
+end
+
+def fun_l20_n375()
+ fun_l21_n441
+end
+
+def fun_l20_n376()
+ fun_l21_n308
+end
+
+def fun_l20_n377()
+ fun_l21_n544
+end
+
+def fun_l20_n378()
+ fun_l21_n505
+end
+
+def fun_l20_n379()
+ fun_l21_n681
+end
+
+def fun_l20_n380()
+ fun_l21_n844
+end
+
+def fun_l20_n381()
+ fun_l21_n269
+end
+
+def fun_l20_n382()
+ fun_l21_n195
+end
+
+def fun_l20_n383()
+ fun_l21_n214
+end
+
+def fun_l20_n384()
+ fun_l21_n206
+end
+
+def fun_l20_n385()
+ fun_l21_n807
+end
+
+def fun_l20_n386()
+ fun_l21_n932
+end
+
+def fun_l20_n387()
+ fun_l21_n245
+end
+
+def fun_l20_n388()
+ fun_l21_n942
+end
+
+def fun_l20_n389()
+ fun_l21_n618
+end
+
+def fun_l20_n390()
+ fun_l21_n684
+end
+
+def fun_l20_n391()
+ fun_l21_n536
+end
+
+def fun_l20_n392()
+ fun_l21_n899
+end
+
+def fun_l20_n393()
+ fun_l21_n775
+end
+
+def fun_l20_n394()
+ fun_l21_n634
+end
+
+def fun_l20_n395()
+ fun_l21_n870
+end
+
+def fun_l20_n396()
+ fun_l21_n882
+end
+
+def fun_l20_n397()
+ fun_l21_n317
+end
+
+def fun_l20_n398()
+ fun_l21_n162
+end
+
+def fun_l20_n399()
+ fun_l21_n446
+end
+
+def fun_l20_n400()
+ fun_l21_n716
+end
+
+def fun_l20_n401()
+ fun_l21_n869
+end
+
+def fun_l20_n402()
+ fun_l21_n965
+end
+
+def fun_l20_n403()
+ fun_l21_n616
+end
+
+def fun_l20_n404()
+ fun_l21_n385
+end
+
+def fun_l20_n405()
+ fun_l21_n964
+end
+
+def fun_l20_n406()
+ fun_l21_n360
+end
+
+def fun_l20_n407()
+ fun_l21_n432
+end
+
+def fun_l20_n408()
+ fun_l21_n40
+end
+
+def fun_l20_n409()
+ fun_l21_n734
+end
+
+def fun_l20_n410()
+ fun_l21_n978
+end
+
+def fun_l20_n411()
+ fun_l21_n721
+end
+
+def fun_l20_n412()
+ fun_l21_n941
+end
+
+def fun_l20_n413()
+ fun_l21_n315
+end
+
+def fun_l20_n414()
+ fun_l21_n242
+end
+
+def fun_l20_n415()
+ fun_l21_n153
+end
+
+def fun_l20_n416()
+ fun_l21_n999
+end
+
+def fun_l20_n417()
+ fun_l21_n219
+end
+
+def fun_l20_n418()
+ fun_l21_n809
+end
+
+def fun_l20_n419()
+ fun_l21_n139
+end
+
+def fun_l20_n420()
+ fun_l21_n311
+end
+
+def fun_l20_n421()
+ fun_l21_n460
+end
+
+def fun_l20_n422()
+ fun_l21_n0
+end
+
+def fun_l20_n423()
+ fun_l21_n863
+end
+
+def fun_l20_n424()
+ fun_l21_n216
+end
+
+def fun_l20_n425()
+ fun_l21_n1
+end
+
+def fun_l20_n426()
+ fun_l21_n829
+end
+
+def fun_l20_n427()
+ fun_l21_n844
+end
+
+def fun_l20_n428()
+ fun_l21_n941
+end
+
+def fun_l20_n429()
+ fun_l21_n344
+end
+
+def fun_l20_n430()
+ fun_l21_n443
+end
+
+def fun_l20_n431()
+ fun_l21_n549
+end
+
+def fun_l20_n432()
+ fun_l21_n654
+end
+
+def fun_l20_n433()
+ fun_l21_n167
+end
+
+def fun_l20_n434()
+ fun_l21_n392
+end
+
+def fun_l20_n435()
+ fun_l21_n570
+end
+
+def fun_l20_n436()
+ fun_l21_n370
+end
+
+def fun_l20_n437()
+ fun_l21_n65
+end
+
+def fun_l20_n438()
+ fun_l21_n78
+end
+
+def fun_l20_n439()
+ fun_l21_n271
+end
+
+def fun_l20_n440()
+ fun_l21_n606
+end
+
+def fun_l20_n441()
+ fun_l21_n25
+end
+
+def fun_l20_n442()
+ fun_l21_n629
+end
+
+def fun_l20_n443()
+ fun_l21_n294
+end
+
+def fun_l20_n444()
+ fun_l21_n928
+end
+
+def fun_l20_n445()
+ fun_l21_n596
+end
+
+def fun_l20_n446()
+ fun_l21_n630
+end
+
+def fun_l20_n447()
+ fun_l21_n849
+end
+
+def fun_l20_n448()
+ fun_l21_n239
+end
+
+def fun_l20_n449()
+ fun_l21_n641
+end
+
+def fun_l20_n450()
+ fun_l21_n333
+end
+
+def fun_l20_n451()
+ fun_l21_n86
+end
+
+def fun_l20_n452()
+ fun_l21_n68
+end
+
+def fun_l20_n453()
+ fun_l21_n28
+end
+
+def fun_l20_n454()
+ fun_l21_n644
+end
+
+def fun_l20_n455()
+ fun_l21_n282
+end
+
+def fun_l20_n456()
+ fun_l21_n3
+end
+
+def fun_l20_n457()
+ fun_l21_n594
+end
+
+def fun_l20_n458()
+ fun_l21_n173
+end
+
+def fun_l20_n459()
+ fun_l21_n986
+end
+
+def fun_l20_n460()
+ fun_l21_n597
+end
+
+def fun_l20_n461()
+ fun_l21_n488
+end
+
+def fun_l20_n462()
+ fun_l21_n288
+end
+
+def fun_l20_n463()
+ fun_l21_n729
+end
+
+def fun_l20_n464()
+ fun_l21_n985
+end
+
+def fun_l20_n465()
+ fun_l21_n794
+end
+
+def fun_l20_n466()
+ fun_l21_n405
+end
+
+def fun_l20_n467()
+ fun_l21_n985
+end
+
+def fun_l20_n468()
+ fun_l21_n596
+end
+
+def fun_l20_n469()
+ fun_l21_n331
+end
+
+def fun_l20_n470()
+ fun_l21_n480
+end
+
+def fun_l20_n471()
+ fun_l21_n160
+end
+
+def fun_l20_n472()
+ fun_l21_n529
+end
+
+def fun_l20_n473()
+ fun_l21_n185
+end
+
+def fun_l20_n474()
+ fun_l21_n300
+end
+
+def fun_l20_n475()
+ fun_l21_n131
+end
+
+def fun_l20_n476()
+ fun_l21_n561
+end
+
+def fun_l20_n477()
+ fun_l21_n634
+end
+
+def fun_l20_n478()
+ fun_l21_n92
+end
+
+def fun_l20_n479()
+ fun_l21_n105
+end
+
+def fun_l20_n480()
+ fun_l21_n887
+end
+
+def fun_l20_n481()
+ fun_l21_n841
+end
+
+def fun_l20_n482()
+ fun_l21_n404
+end
+
+def fun_l20_n483()
+ fun_l21_n813
+end
+
+def fun_l20_n484()
+ fun_l21_n90
+end
+
+def fun_l20_n485()
+ fun_l21_n978
+end
+
+def fun_l20_n486()
+ fun_l21_n342
+end
+
+def fun_l20_n487()
+ fun_l21_n263
+end
+
+def fun_l20_n488()
+ fun_l21_n587
+end
+
+def fun_l20_n489()
+ fun_l21_n950
+end
+
+def fun_l20_n490()
+ fun_l21_n121
+end
+
+def fun_l20_n491()
+ fun_l21_n85
+end
+
+def fun_l20_n492()
+ fun_l21_n53
+end
+
+def fun_l20_n493()
+ fun_l21_n706
+end
+
+def fun_l20_n494()
+ fun_l21_n612
+end
+
+def fun_l20_n495()
+ fun_l21_n322
+end
+
+def fun_l20_n496()
+ fun_l21_n610
+end
+
+def fun_l20_n497()
+ fun_l21_n465
+end
+
+def fun_l20_n498()
+ fun_l21_n998
+end
+
+def fun_l20_n499()
+ fun_l21_n79
+end
+
+def fun_l20_n500()
+ fun_l21_n203
+end
+
+def fun_l20_n501()
+ fun_l21_n99
+end
+
+def fun_l20_n502()
+ fun_l21_n958
+end
+
+def fun_l20_n503()
+ fun_l21_n528
+end
+
+def fun_l20_n504()
+ fun_l21_n210
+end
+
+def fun_l20_n505()
+ fun_l21_n546
+end
+
+def fun_l20_n506()
+ fun_l21_n343
+end
+
+def fun_l20_n507()
+ fun_l21_n9
+end
+
+def fun_l20_n508()
+ fun_l21_n486
+end
+
+def fun_l20_n509()
+ fun_l21_n252
+end
+
+def fun_l20_n510()
+ fun_l21_n489
+end
+
+def fun_l20_n511()
+ fun_l21_n851
+end
+
+def fun_l20_n512()
+ fun_l21_n150
+end
+
+def fun_l20_n513()
+ fun_l21_n691
+end
+
+def fun_l20_n514()
+ fun_l21_n718
+end
+
+def fun_l20_n515()
+ fun_l21_n681
+end
+
+def fun_l20_n516()
+ fun_l21_n636
+end
+
+def fun_l20_n517()
+ fun_l21_n828
+end
+
+def fun_l20_n518()
+ fun_l21_n15
+end
+
+def fun_l20_n519()
+ fun_l21_n186
+end
+
+def fun_l20_n520()
+ fun_l21_n260
+end
+
+def fun_l20_n521()
+ fun_l21_n646
+end
+
+def fun_l20_n522()
+ fun_l21_n768
+end
+
+def fun_l20_n523()
+ fun_l21_n387
+end
+
+def fun_l20_n524()
+ fun_l21_n597
+end
+
+def fun_l20_n525()
+ fun_l21_n980
+end
+
+def fun_l20_n526()
+ fun_l21_n996
+end
+
+def fun_l20_n527()
+ fun_l21_n945
+end
+
+def fun_l20_n528()
+ fun_l21_n234
+end
+
+def fun_l20_n529()
+ fun_l21_n673
+end
+
+def fun_l20_n530()
+ fun_l21_n766
+end
+
+def fun_l20_n531()
+ fun_l21_n498
+end
+
+def fun_l20_n532()
+ fun_l21_n210
+end
+
+def fun_l20_n533()
+ fun_l21_n537
+end
+
+def fun_l20_n534()
+ fun_l21_n376
+end
+
+def fun_l20_n535()
+ fun_l21_n13
+end
+
+def fun_l20_n536()
+ fun_l21_n994
+end
+
+def fun_l20_n537()
+ fun_l21_n954
+end
+
+def fun_l20_n538()
+ fun_l21_n171
+end
+
+def fun_l20_n539()
+ fun_l21_n778
+end
+
+def fun_l20_n540()
+ fun_l21_n940
+end
+
+def fun_l20_n541()
+ fun_l21_n114
+end
+
+def fun_l20_n542()
+ fun_l21_n987
+end
+
+def fun_l20_n543()
+ fun_l21_n553
+end
+
+def fun_l20_n544()
+ fun_l21_n473
+end
+
+def fun_l20_n545()
+ fun_l21_n503
+end
+
+def fun_l20_n546()
+ fun_l21_n436
+end
+
+def fun_l20_n547()
+ fun_l21_n901
+end
+
+def fun_l20_n548()
+ fun_l21_n98
+end
+
+def fun_l20_n549()
+ fun_l21_n389
+end
+
+def fun_l20_n550()
+ fun_l21_n852
+end
+
+def fun_l20_n551()
+ fun_l21_n193
+end
+
+def fun_l20_n552()
+ fun_l21_n783
+end
+
+def fun_l20_n553()
+ fun_l21_n46
+end
+
+def fun_l20_n554()
+ fun_l21_n38
+end
+
+def fun_l20_n555()
+ fun_l21_n300
+end
+
+def fun_l20_n556()
+ fun_l21_n221
+end
+
+def fun_l20_n557()
+ fun_l21_n816
+end
+
+def fun_l20_n558()
+ fun_l21_n534
+end
+
+def fun_l20_n559()
+ fun_l21_n932
+end
+
+def fun_l20_n560()
+ fun_l21_n880
+end
+
+def fun_l20_n561()
+ fun_l21_n796
+end
+
+def fun_l20_n562()
+ fun_l21_n927
+end
+
+def fun_l20_n563()
+ fun_l21_n10
+end
+
+def fun_l20_n564()
+ fun_l21_n843
+end
+
+def fun_l20_n565()
+ fun_l21_n625
+end
+
+def fun_l20_n566()
+ fun_l21_n429
+end
+
+def fun_l20_n567()
+ fun_l21_n475
+end
+
+def fun_l20_n568()
+ fun_l21_n931
+end
+
+def fun_l20_n569()
+ fun_l21_n460
+end
+
+def fun_l20_n570()
+ fun_l21_n857
+end
+
+def fun_l20_n571()
+ fun_l21_n607
+end
+
+def fun_l20_n572()
+ fun_l21_n727
+end
+
+def fun_l20_n573()
+ fun_l21_n922
+end
+
+def fun_l20_n574()
+ fun_l21_n393
+end
+
+def fun_l20_n575()
+ fun_l21_n232
+end
+
+def fun_l20_n576()
+ fun_l21_n665
+end
+
+def fun_l20_n577()
+ fun_l21_n796
+end
+
+def fun_l20_n578()
+ fun_l21_n80
+end
+
+def fun_l20_n579()
+ fun_l21_n769
+end
+
+def fun_l20_n580()
+ fun_l21_n558
+end
+
+def fun_l20_n581()
+ fun_l21_n630
+end
+
+def fun_l20_n582()
+ fun_l21_n911
+end
+
+def fun_l20_n583()
+ fun_l21_n457
+end
+
+def fun_l20_n584()
+ fun_l21_n61
+end
+
+def fun_l20_n585()
+ fun_l21_n671
+end
+
+def fun_l20_n586()
+ fun_l21_n493
+end
+
+def fun_l20_n587()
+ fun_l21_n780
+end
+
+def fun_l20_n588()
+ fun_l21_n373
+end
+
+def fun_l20_n589()
+ fun_l21_n138
+end
+
+def fun_l20_n590()
+ fun_l21_n377
+end
+
+def fun_l20_n591()
+ fun_l21_n793
+end
+
+def fun_l20_n592()
+ fun_l21_n995
+end
+
+def fun_l20_n593()
+ fun_l21_n46
+end
+
+def fun_l20_n594()
+ fun_l21_n171
+end
+
+def fun_l20_n595()
+ fun_l21_n907
+end
+
+def fun_l20_n596()
+ fun_l21_n182
+end
+
+def fun_l20_n597()
+ fun_l21_n203
+end
+
+def fun_l20_n598()
+ fun_l21_n475
+end
+
+def fun_l20_n599()
+ fun_l21_n198
+end
+
+def fun_l20_n600()
+ fun_l21_n654
+end
+
+def fun_l20_n601()
+ fun_l21_n236
+end
+
+def fun_l20_n602()
+ fun_l21_n854
+end
+
+def fun_l20_n603()
+ fun_l21_n344
+end
+
+def fun_l20_n604()
+ fun_l21_n575
+end
+
+def fun_l20_n605()
+ fun_l21_n214
+end
+
+def fun_l20_n606()
+ fun_l21_n105
+end
+
+def fun_l20_n607()
+ fun_l21_n624
+end
+
+def fun_l20_n608()
+ fun_l21_n505
+end
+
+def fun_l20_n609()
+ fun_l21_n468
+end
+
+def fun_l20_n610()
+ fun_l21_n946
+end
+
+def fun_l20_n611()
+ fun_l21_n197
+end
+
+def fun_l20_n612()
+ fun_l21_n749
+end
+
+def fun_l20_n613()
+ fun_l21_n280
+end
+
+def fun_l20_n614()
+ fun_l21_n587
+end
+
+def fun_l20_n615()
+ fun_l21_n463
+end
+
+def fun_l20_n616()
+ fun_l21_n47
+end
+
+def fun_l20_n617()
+ fun_l21_n467
+end
+
+def fun_l20_n618()
+ fun_l21_n934
+end
+
+def fun_l20_n619()
+ fun_l21_n648
+end
+
+def fun_l20_n620()
+ fun_l21_n572
+end
+
+def fun_l20_n621()
+ fun_l21_n524
+end
+
+def fun_l20_n622()
+ fun_l21_n623
+end
+
+def fun_l20_n623()
+ fun_l21_n142
+end
+
+def fun_l20_n624()
+ fun_l21_n370
+end
+
+def fun_l20_n625()
+ fun_l21_n427
+end
+
+def fun_l20_n626()
+ fun_l21_n23
+end
+
+def fun_l20_n627()
+ fun_l21_n710
+end
+
+def fun_l20_n628()
+ fun_l21_n714
+end
+
+def fun_l20_n629()
+ fun_l21_n929
+end
+
+def fun_l20_n630()
+ fun_l21_n882
+end
+
+def fun_l20_n631()
+ fun_l21_n971
+end
+
+def fun_l20_n632()
+ fun_l21_n484
+end
+
+def fun_l20_n633()
+ fun_l21_n757
+end
+
+def fun_l20_n634()
+ fun_l21_n543
+end
+
+def fun_l20_n635()
+ fun_l21_n96
+end
+
+def fun_l20_n636()
+ fun_l21_n780
+end
+
+def fun_l20_n637()
+ fun_l21_n912
+end
+
+def fun_l20_n638()
+ fun_l21_n288
+end
+
+def fun_l20_n639()
+ fun_l21_n580
+end
+
+def fun_l20_n640()
+ fun_l21_n831
+end
+
+def fun_l20_n641()
+ fun_l21_n660
+end
+
+def fun_l20_n642()
+ fun_l21_n216
+end
+
+def fun_l20_n643()
+ fun_l21_n341
+end
+
+def fun_l20_n644()
+ fun_l21_n747
+end
+
+def fun_l20_n645()
+ fun_l21_n633
+end
+
+def fun_l20_n646()
+ fun_l21_n422
+end
+
+def fun_l20_n647()
+ fun_l21_n122
+end
+
+def fun_l20_n648()
+ fun_l21_n721
+end
+
+def fun_l20_n649()
+ fun_l21_n439
+end
+
+def fun_l20_n650()
+ fun_l21_n663
+end
+
+def fun_l20_n651()
+ fun_l21_n409
+end
+
+def fun_l20_n652()
+ fun_l21_n475
+end
+
+def fun_l20_n653()
+ fun_l21_n812
+end
+
+def fun_l20_n654()
+ fun_l21_n849
+end
+
+def fun_l20_n655()
+ fun_l21_n500
+end
+
+def fun_l20_n656()
+ fun_l21_n120
+end
+
+def fun_l20_n657()
+ fun_l21_n971
+end
+
+def fun_l20_n658()
+ fun_l21_n935
+end
+
+def fun_l20_n659()
+ fun_l21_n952
+end
+
+def fun_l20_n660()
+ fun_l21_n84
+end
+
+def fun_l20_n661()
+ fun_l21_n393
+end
+
+def fun_l20_n662()
+ fun_l21_n454
+end
+
+def fun_l20_n663()
+ fun_l21_n440
+end
+
+def fun_l20_n664()
+ fun_l21_n5
+end
+
+def fun_l20_n665()
+ fun_l21_n475
+end
+
+def fun_l20_n666()
+ fun_l21_n929
+end
+
+def fun_l20_n667()
+ fun_l21_n164
+end
+
+def fun_l20_n668()
+ fun_l21_n23
+end
+
+def fun_l20_n669()
+ fun_l21_n66
+end
+
+def fun_l20_n670()
+ fun_l21_n463
+end
+
+def fun_l20_n671()
+ fun_l21_n425
+end
+
+def fun_l20_n672()
+ fun_l21_n414
+end
+
+def fun_l20_n673()
+ fun_l21_n990
+end
+
+def fun_l20_n674()
+ fun_l21_n504
+end
+
+def fun_l20_n675()
+ fun_l21_n974
+end
+
+def fun_l20_n676()
+ fun_l21_n620
+end
+
+def fun_l20_n677()
+ fun_l21_n798
+end
+
+def fun_l20_n678()
+ fun_l21_n432
+end
+
+def fun_l20_n679()
+ fun_l21_n487
+end
+
+def fun_l20_n680()
+ fun_l21_n570
+end
+
+def fun_l20_n681()
+ fun_l21_n746
+end
+
+def fun_l20_n682()
+ fun_l21_n358
+end
+
+def fun_l20_n683()
+ fun_l21_n207
+end
+
+def fun_l20_n684()
+ fun_l21_n408
+end
+
+def fun_l20_n685()
+ fun_l21_n679
+end
+
+def fun_l20_n686()
+ fun_l21_n38
+end
+
+def fun_l20_n687()
+ fun_l21_n58
+end
+
+def fun_l20_n688()
+ fun_l21_n460
+end
+
+def fun_l20_n689()
+ fun_l21_n855
+end
+
+def fun_l20_n690()
+ fun_l21_n641
+end
+
+def fun_l20_n691()
+ fun_l21_n146
+end
+
+def fun_l20_n692()
+ fun_l21_n709
+end
+
+def fun_l20_n693()
+ fun_l21_n801
+end
+
+def fun_l20_n694()
+ fun_l21_n375
+end
+
+def fun_l20_n695()
+ fun_l21_n778
+end
+
+def fun_l20_n696()
+ fun_l21_n620
+end
+
+def fun_l20_n697()
+ fun_l21_n630
+end
+
+def fun_l20_n698()
+ fun_l21_n582
+end
+
+def fun_l20_n699()
+ fun_l21_n198
+end
+
+def fun_l20_n700()
+ fun_l21_n830
+end
+
+def fun_l20_n701()
+ fun_l21_n101
+end
+
+def fun_l20_n702()
+ fun_l21_n824
+end
+
+def fun_l20_n703()
+ fun_l21_n97
+end
+
+def fun_l20_n704()
+ fun_l21_n628
+end
+
+def fun_l20_n705()
+ fun_l21_n688
+end
+
+def fun_l20_n706()
+ fun_l21_n120
+end
+
+def fun_l20_n707()
+ fun_l21_n343
+end
+
+def fun_l20_n708()
+ fun_l21_n175
+end
+
+def fun_l20_n709()
+ fun_l21_n122
+end
+
+def fun_l20_n710()
+ fun_l21_n272
+end
+
+def fun_l20_n711()
+ fun_l21_n343
+end
+
+def fun_l20_n712()
+ fun_l21_n317
+end
+
+def fun_l20_n713()
+ fun_l21_n982
+end
+
+def fun_l20_n714()
+ fun_l21_n458
+end
+
+def fun_l20_n715()
+ fun_l21_n906
+end
+
+def fun_l20_n716()
+ fun_l21_n565
+end
+
+def fun_l20_n717()
+ fun_l21_n174
+end
+
+def fun_l20_n718()
+ fun_l21_n34
+end
+
+def fun_l20_n719()
+ fun_l21_n832
+end
+
+def fun_l20_n720()
+ fun_l21_n111
+end
+
+def fun_l20_n721()
+ fun_l21_n701
+end
+
+def fun_l20_n722()
+ fun_l21_n201
+end
+
+def fun_l20_n723()
+ fun_l21_n285
+end
+
+def fun_l20_n724()
+ fun_l21_n269
+end
+
+def fun_l20_n725()
+ fun_l21_n144
+end
+
+def fun_l20_n726()
+ fun_l21_n246
+end
+
+def fun_l20_n727()
+ fun_l21_n221
+end
+
+def fun_l20_n728()
+ fun_l21_n599
+end
+
+def fun_l20_n729()
+ fun_l21_n909
+end
+
+def fun_l20_n730()
+ fun_l21_n693
+end
+
+def fun_l20_n731()
+ fun_l21_n879
+end
+
+def fun_l20_n732()
+ fun_l21_n452
+end
+
+def fun_l20_n733()
+ fun_l21_n772
+end
+
+def fun_l20_n734()
+ fun_l21_n116
+end
+
+def fun_l20_n735()
+ fun_l21_n895
+end
+
+def fun_l20_n736()
+ fun_l21_n937
+end
+
+def fun_l20_n737()
+ fun_l21_n50
+end
+
+def fun_l20_n738()
+ fun_l21_n947
+end
+
+def fun_l20_n739()
+ fun_l21_n500
+end
+
+def fun_l20_n740()
+ fun_l21_n753
+end
+
+def fun_l20_n741()
+ fun_l21_n497
+end
+
+def fun_l20_n742()
+ fun_l21_n524
+end
+
+def fun_l20_n743()
+ fun_l21_n389
+end
+
+def fun_l20_n744()
+ fun_l21_n539
+end
+
+def fun_l20_n745()
+ fun_l21_n70
+end
+
+def fun_l20_n746()
+ fun_l21_n736
+end
+
+def fun_l20_n747()
+ fun_l21_n94
+end
+
+def fun_l20_n748()
+ fun_l21_n686
+end
+
+def fun_l20_n749()
+ fun_l21_n269
+end
+
+def fun_l20_n750()
+ fun_l21_n809
+end
+
+def fun_l20_n751()
+ fun_l21_n570
+end
+
+def fun_l20_n752()
+ fun_l21_n522
+end
+
+def fun_l20_n753()
+ fun_l21_n167
+end
+
+def fun_l20_n754()
+ fun_l21_n610
+end
+
+def fun_l20_n755()
+ fun_l21_n72
+end
+
+def fun_l20_n756()
+ fun_l21_n146
+end
+
+def fun_l20_n757()
+ fun_l21_n916
+end
+
+def fun_l20_n758()
+ fun_l21_n163
+end
+
+def fun_l20_n759()
+ fun_l21_n279
+end
+
+def fun_l20_n760()
+ fun_l21_n677
+end
+
+def fun_l20_n761()
+ fun_l21_n876
+end
+
+def fun_l20_n762()
+ fun_l21_n333
+end
+
+def fun_l20_n763()
+ fun_l21_n36
+end
+
+def fun_l20_n764()
+ fun_l21_n166
+end
+
+def fun_l20_n765()
+ fun_l21_n824
+end
+
+def fun_l20_n766()
+ fun_l21_n416
+end
+
+def fun_l20_n767()
+ fun_l21_n655
+end
+
+def fun_l20_n768()
+ fun_l21_n267
+end
+
+def fun_l20_n769()
+ fun_l21_n257
+end
+
+def fun_l20_n770()
+ fun_l21_n839
+end
+
+def fun_l20_n771()
+ fun_l21_n504
+end
+
+def fun_l20_n772()
+ fun_l21_n717
+end
+
+def fun_l20_n773()
+ fun_l21_n332
+end
+
+def fun_l20_n774()
+ fun_l21_n949
+end
+
+def fun_l20_n775()
+ fun_l21_n226
+end
+
+def fun_l20_n776()
+ fun_l21_n145
+end
+
+def fun_l20_n777()
+ fun_l21_n548
+end
+
+def fun_l20_n778()
+ fun_l21_n912
+end
+
+def fun_l20_n779()
+ fun_l21_n984
+end
+
+def fun_l20_n780()
+ fun_l21_n907
+end
+
+def fun_l20_n781()
+ fun_l21_n433
+end
+
+def fun_l20_n782()
+ fun_l21_n542
+end
+
+def fun_l20_n783()
+ fun_l21_n88
+end
+
+def fun_l20_n784()
+ fun_l21_n104
+end
+
+def fun_l20_n785()
+ fun_l21_n383
+end
+
+def fun_l20_n786()
+ fun_l21_n998
+end
+
+def fun_l20_n787()
+ fun_l21_n525
+end
+
+def fun_l20_n788()
+ fun_l21_n276
+end
+
+def fun_l20_n789()
+ fun_l21_n162
+end
+
+def fun_l20_n790()
+ fun_l21_n420
+end
+
+def fun_l20_n791()
+ fun_l21_n793
+end
+
+def fun_l20_n792()
+ fun_l21_n121
+end
+
+def fun_l20_n793()
+ fun_l21_n164
+end
+
+def fun_l20_n794()
+ fun_l21_n110
+end
+
+def fun_l20_n795()
+ fun_l21_n68
+end
+
+def fun_l20_n796()
+ fun_l21_n417
+end
+
+def fun_l20_n797()
+ fun_l21_n878
+end
+
+def fun_l20_n798()
+ fun_l21_n987
+end
+
+def fun_l20_n799()
+ fun_l21_n197
+end
+
+def fun_l20_n800()
+ fun_l21_n729
+end
+
+def fun_l20_n801()
+ fun_l21_n956
+end
+
+def fun_l20_n802()
+ fun_l21_n33
+end
+
+def fun_l20_n803()
+ fun_l21_n73
+end
+
+def fun_l20_n804()
+ fun_l21_n759
+end
+
+def fun_l20_n805()
+ fun_l21_n784
+end
+
+def fun_l20_n806()
+ fun_l21_n102
+end
+
+def fun_l20_n807()
+ fun_l21_n624
+end
+
+def fun_l20_n808()
+ fun_l21_n580
+end
+
+def fun_l20_n809()
+ fun_l21_n347
+end
+
+def fun_l20_n810()
+ fun_l21_n163
+end
+
+def fun_l20_n811()
+ fun_l21_n220
+end
+
+def fun_l20_n812()
+ fun_l21_n324
+end
+
+def fun_l20_n813()
+ fun_l21_n299
+end
+
+def fun_l20_n814()
+ fun_l21_n958
+end
+
+def fun_l20_n815()
+ fun_l21_n252
+end
+
+def fun_l20_n816()
+ fun_l21_n479
+end
+
+def fun_l20_n817()
+ fun_l21_n536
+end
+
+def fun_l20_n818()
+ fun_l21_n624
+end
+
+def fun_l20_n819()
+ fun_l21_n347
+end
+
+def fun_l20_n820()
+ fun_l21_n308
+end
+
+def fun_l20_n821()
+ fun_l21_n4
+end
+
+def fun_l20_n822()
+ fun_l21_n88
+end
+
+def fun_l20_n823()
+ fun_l21_n787
+end
+
+def fun_l20_n824()
+ fun_l21_n450
+end
+
+def fun_l20_n825()
+ fun_l21_n384
+end
+
+def fun_l20_n826()
+ fun_l21_n416
+end
+
+def fun_l20_n827()
+ fun_l21_n73
+end
+
+def fun_l20_n828()
+ fun_l21_n884
+end
+
+def fun_l20_n829()
+ fun_l21_n51
+end
+
+def fun_l20_n830()
+ fun_l21_n37
+end
+
+def fun_l20_n831()
+ fun_l21_n326
+end
+
+def fun_l20_n832()
+ fun_l21_n120
+end
+
+def fun_l20_n833()
+ fun_l21_n957
+end
+
+def fun_l20_n834()
+ fun_l21_n973
+end
+
+def fun_l20_n835()
+ fun_l21_n966
+end
+
+def fun_l20_n836()
+ fun_l21_n110
+end
+
+def fun_l20_n837()
+ fun_l21_n57
+end
+
+def fun_l20_n838()
+ fun_l21_n836
+end
+
+def fun_l20_n839()
+ fun_l21_n701
+end
+
+def fun_l20_n840()
+ fun_l21_n607
+end
+
+def fun_l20_n841()
+ fun_l21_n92
+end
+
+def fun_l20_n842()
+ fun_l21_n304
+end
+
+def fun_l20_n843()
+ fun_l21_n443
+end
+
+def fun_l20_n844()
+ fun_l21_n282
+end
+
+def fun_l20_n845()
+ fun_l21_n301
+end
+
+def fun_l20_n846()
+ fun_l21_n360
+end
+
+def fun_l20_n847()
+ fun_l21_n848
+end
+
+def fun_l20_n848()
+ fun_l21_n796
+end
+
+def fun_l20_n849()
+ fun_l21_n81
+end
+
+def fun_l20_n850()
+ fun_l21_n126
+end
+
+def fun_l20_n851()
+ fun_l21_n951
+end
+
+def fun_l20_n852()
+ fun_l21_n187
+end
+
+def fun_l20_n853()
+ fun_l21_n498
+end
+
+def fun_l20_n854()
+ fun_l21_n885
+end
+
+def fun_l20_n855()
+ fun_l21_n391
+end
+
+def fun_l20_n856()
+ fun_l21_n823
+end
+
+def fun_l20_n857()
+ fun_l21_n516
+end
+
+def fun_l20_n858()
+ fun_l21_n266
+end
+
+def fun_l20_n859()
+ fun_l21_n617
+end
+
+def fun_l20_n860()
+ fun_l21_n440
+end
+
+def fun_l20_n861()
+ fun_l21_n694
+end
+
+def fun_l20_n862()
+ fun_l21_n128
+end
+
+def fun_l20_n863()
+ fun_l21_n340
+end
+
+def fun_l20_n864()
+ fun_l21_n234
+end
+
+def fun_l20_n865()
+ fun_l21_n324
+end
+
+def fun_l20_n866()
+ fun_l21_n233
+end
+
+def fun_l20_n867()
+ fun_l21_n26
+end
+
+def fun_l20_n868()
+ fun_l21_n548
+end
+
+def fun_l20_n869()
+ fun_l21_n563
+end
+
+def fun_l20_n870()
+ fun_l21_n452
+end
+
+def fun_l20_n871()
+ fun_l21_n223
+end
+
+def fun_l20_n872()
+ fun_l21_n147
+end
+
+def fun_l20_n873()
+ fun_l21_n147
+end
+
+def fun_l20_n874()
+ fun_l21_n266
+end
+
+def fun_l20_n875()
+ fun_l21_n335
+end
+
+def fun_l20_n876()
+ fun_l21_n253
+end
+
+def fun_l20_n877()
+ fun_l21_n479
+end
+
+def fun_l20_n878()
+ fun_l21_n34
+end
+
+def fun_l20_n879()
+ fun_l21_n798
+end
+
+def fun_l20_n880()
+ fun_l21_n223
+end
+
+def fun_l20_n881()
+ fun_l21_n343
+end
+
+def fun_l20_n882()
+ fun_l21_n728
+end
+
+def fun_l20_n883()
+ fun_l21_n351
+end
+
+def fun_l20_n884()
+ fun_l21_n997
+end
+
+def fun_l20_n885()
+ fun_l21_n49
+end
+
+def fun_l20_n886()
+ fun_l21_n773
+end
+
+def fun_l20_n887()
+ fun_l21_n93
+end
+
+def fun_l20_n888()
+ fun_l21_n124
+end
+
+def fun_l20_n889()
+ fun_l21_n897
+end
+
+def fun_l20_n890()
+ fun_l21_n692
+end
+
+def fun_l20_n891()
+ fun_l21_n158
+end
+
+def fun_l20_n892()
+ fun_l21_n456
+end
+
+def fun_l20_n893()
+ fun_l21_n49
+end
+
+def fun_l20_n894()
+ fun_l21_n751
+end
+
+def fun_l20_n895()
+ fun_l21_n672
+end
+
+def fun_l20_n896()
+ fun_l21_n726
+end
+
+def fun_l20_n897()
+ fun_l21_n95
+end
+
+def fun_l20_n898()
+ fun_l21_n420
+end
+
+def fun_l20_n899()
+ fun_l21_n77
+end
+
+def fun_l20_n900()
+ fun_l21_n770
+end
+
+def fun_l20_n901()
+ fun_l21_n127
+end
+
+def fun_l20_n902()
+ fun_l21_n566
+end
+
+def fun_l20_n903()
+ fun_l21_n398
+end
+
+def fun_l20_n904()
+ fun_l21_n720
+end
+
+def fun_l20_n905()
+ fun_l21_n350
+end
+
+def fun_l20_n906()
+ fun_l21_n935
+end
+
+def fun_l20_n907()
+ fun_l21_n172
+end
+
+def fun_l20_n908()
+ fun_l21_n988
+end
+
+def fun_l20_n909()
+ fun_l21_n627
+end
+
+def fun_l20_n910()
+ fun_l21_n776
+end
+
+def fun_l20_n911()
+ fun_l21_n34
+end
+
+def fun_l20_n912()
+ fun_l21_n361
+end
+
+def fun_l20_n913()
+ fun_l21_n408
+end
+
+def fun_l20_n914()
+ fun_l21_n941
+end
+
+def fun_l20_n915()
+ fun_l21_n275
+end
+
+def fun_l20_n916()
+ fun_l21_n864
+end
+
+def fun_l20_n917()
+ fun_l21_n839
+end
+
+def fun_l20_n918()
+ fun_l21_n837
+end
+
+def fun_l20_n919()
+ fun_l21_n837
+end
+
+def fun_l20_n920()
+ fun_l21_n627
+end
+
+def fun_l20_n921()
+ fun_l21_n321
+end
+
+def fun_l20_n922()
+ fun_l21_n308
+end
+
+def fun_l20_n923()
+ fun_l21_n475
+end
+
+def fun_l20_n924()
+ fun_l21_n115
+end
+
+def fun_l20_n925()
+ fun_l21_n794
+end
+
+def fun_l20_n926()
+ fun_l21_n376
+end
+
+def fun_l20_n927()
+ fun_l21_n951
+end
+
+def fun_l20_n928()
+ fun_l21_n744
+end
+
+def fun_l20_n929()
+ fun_l21_n621
+end
+
+def fun_l20_n930()
+ fun_l21_n630
+end
+
+def fun_l20_n931()
+ fun_l21_n459
+end
+
+def fun_l20_n932()
+ fun_l21_n41
+end
+
+def fun_l20_n933()
+ fun_l21_n313
+end
+
+def fun_l20_n934()
+ fun_l21_n130
+end
+
+def fun_l20_n935()
+ fun_l21_n605
+end
+
+def fun_l20_n936()
+ fun_l21_n261
+end
+
+def fun_l20_n937()
+ fun_l21_n54
+end
+
+def fun_l20_n938()
+ fun_l21_n319
+end
+
+def fun_l20_n939()
+ fun_l21_n541
+end
+
+def fun_l20_n940()
+ fun_l21_n104
+end
+
+def fun_l20_n941()
+ fun_l21_n339
+end
+
+def fun_l20_n942()
+ fun_l21_n220
+end
+
+def fun_l20_n943()
+ fun_l21_n560
+end
+
+def fun_l20_n944()
+ fun_l21_n931
+end
+
+def fun_l20_n945()
+ fun_l21_n642
+end
+
+def fun_l20_n946()
+ fun_l21_n584
+end
+
+def fun_l20_n947()
+ fun_l21_n324
+end
+
+def fun_l20_n948()
+ fun_l21_n10
+end
+
+def fun_l20_n949()
+ fun_l21_n976
+end
+
+def fun_l20_n950()
+ fun_l21_n65
+end
+
+def fun_l20_n951()
+ fun_l21_n392
+end
+
+def fun_l20_n952()
+ fun_l21_n263
+end
+
+def fun_l20_n953()
+ fun_l21_n228
+end
+
+def fun_l20_n954()
+ fun_l21_n177
+end
+
+def fun_l20_n955()
+ fun_l21_n81
+end
+
+def fun_l20_n956()
+ fun_l21_n141
+end
+
+def fun_l20_n957()
+ fun_l21_n540
+end
+
+def fun_l20_n958()
+ fun_l21_n802
+end
+
+def fun_l20_n959()
+ fun_l21_n28
+end
+
+def fun_l20_n960()
+ fun_l21_n438
+end
+
+def fun_l20_n961()
+ fun_l21_n722
+end
+
+def fun_l20_n962()
+ fun_l21_n707
+end
+
+def fun_l20_n963()
+ fun_l21_n598
+end
+
+def fun_l20_n964()
+ fun_l21_n687
+end
+
+def fun_l20_n965()
+ fun_l21_n258
+end
+
+def fun_l20_n966()
+ fun_l21_n786
+end
+
+def fun_l20_n967()
+ fun_l21_n362
+end
+
+def fun_l20_n968()
+ fun_l21_n41
+end
+
+def fun_l20_n969()
+ fun_l21_n933
+end
+
+def fun_l20_n970()
+ fun_l21_n250
+end
+
+def fun_l20_n971()
+ fun_l21_n760
+end
+
+def fun_l20_n972()
+ fun_l21_n993
+end
+
+def fun_l20_n973()
+ fun_l21_n278
+end
+
+def fun_l20_n974()
+ fun_l21_n477
+end
+
+def fun_l20_n975()
+ fun_l21_n901
+end
+
+def fun_l20_n976()
+ fun_l21_n820
+end
+
+def fun_l20_n977()
+ fun_l21_n739
+end
+
+def fun_l20_n978()
+ fun_l21_n722
+end
+
+def fun_l20_n979()
+ fun_l21_n418
+end
+
+def fun_l20_n980()
+ fun_l21_n207
+end
+
+def fun_l20_n981()
+ fun_l21_n213
+end
+
+def fun_l20_n982()
+ fun_l21_n30
+end
+
+def fun_l20_n983()
+ fun_l21_n667
+end
+
+def fun_l20_n984()
+ fun_l21_n582
+end
+
+def fun_l20_n985()
+ fun_l21_n398
+end
+
+def fun_l20_n986()
+ fun_l21_n376
+end
+
+def fun_l20_n987()
+ fun_l21_n84
+end
+
+def fun_l20_n988()
+ fun_l21_n701
+end
+
+def fun_l20_n989()
+ fun_l21_n100
+end
+
+def fun_l20_n990()
+ fun_l21_n247
+end
+
+def fun_l20_n991()
+ fun_l21_n992
+end
+
+def fun_l20_n992()
+ fun_l21_n635
+end
+
+def fun_l20_n993()
+ fun_l21_n493
+end
+
+def fun_l20_n994()
+ fun_l21_n184
+end
+
+def fun_l20_n995()
+ fun_l21_n31
+end
+
+def fun_l20_n996()
+ fun_l21_n555
+end
+
+def fun_l20_n997()
+ fun_l21_n258
+end
+
+def fun_l20_n998()
+ fun_l21_n32
+end
+
+def fun_l20_n999()
+ fun_l21_n6
+end
+
+def fun_l21_n0()
+ fun_l22_n98
+end
+
+def fun_l21_n1()
+ fun_l22_n194
+end
+
+def fun_l21_n2()
+ fun_l22_n510
+end
+
+def fun_l21_n3()
+ fun_l22_n707
+end
+
+def fun_l21_n4()
+ fun_l22_n878
+end
+
+def fun_l21_n5()
+ fun_l22_n615
+end
+
+def fun_l21_n6()
+ fun_l22_n891
+end
+
+def fun_l21_n7()
+ fun_l22_n458
+end
+
+def fun_l21_n8()
+ fun_l22_n478
+end
+
+def fun_l21_n9()
+ fun_l22_n30
+end
+
+def fun_l21_n10()
+ fun_l22_n345
+end
+
+def fun_l21_n11()
+ fun_l22_n202
+end
+
+def fun_l21_n12()
+ fun_l22_n354
+end
+
+def fun_l21_n13()
+ fun_l22_n673
+end
+
+def fun_l21_n14()
+ fun_l22_n662
+end
+
+def fun_l21_n15()
+ fun_l22_n593
+end
+
+def fun_l21_n16()
+ fun_l22_n127
+end
+
+def fun_l21_n17()
+ fun_l22_n876
+end
+
+def fun_l21_n18()
+ fun_l22_n862
+end
+
+def fun_l21_n19()
+ fun_l22_n337
+end
+
+def fun_l21_n20()
+ fun_l22_n365
+end
+
+def fun_l21_n21()
+ fun_l22_n323
+end
+
+def fun_l21_n22()
+ fun_l22_n767
+end
+
+def fun_l21_n23()
+ fun_l22_n364
+end
+
+def fun_l21_n24()
+ fun_l22_n562
+end
+
+def fun_l21_n25()
+ fun_l22_n420
+end
+
+def fun_l21_n26()
+ fun_l22_n754
+end
+
+def fun_l21_n27()
+ fun_l22_n381
+end
+
+def fun_l21_n28()
+ fun_l22_n393
+end
+
+def fun_l21_n29()
+ fun_l22_n25
+end
+
+def fun_l21_n30()
+ fun_l22_n951
+end
+
+def fun_l21_n31()
+ fun_l22_n271
+end
+
+def fun_l21_n32()
+ fun_l22_n127
+end
+
+def fun_l21_n33()
+ fun_l22_n962
+end
+
+def fun_l21_n34()
+ fun_l22_n611
+end
+
+def fun_l21_n35()
+ fun_l22_n936
+end
+
+def fun_l21_n36()
+ fun_l22_n340
+end
+
+def fun_l21_n37()
+ fun_l22_n349
+end
+
+def fun_l21_n38()
+ fun_l22_n692
+end
+
+def fun_l21_n39()
+ fun_l22_n184
+end
+
+def fun_l21_n40()
+ fun_l22_n490
+end
+
+def fun_l21_n41()
+ fun_l22_n316
+end
+
+def fun_l21_n42()
+ fun_l22_n545
+end
+
+def fun_l21_n43()
+ fun_l22_n344
+end
+
+def fun_l21_n44()
+ fun_l22_n938
+end
+
+def fun_l21_n45()
+ fun_l22_n820
+end
+
+def fun_l21_n46()
+ fun_l22_n60
+end
+
+def fun_l21_n47()
+ fun_l22_n649
+end
+
+def fun_l21_n48()
+ fun_l22_n41
+end
+
+def fun_l21_n49()
+ fun_l22_n305
+end
+
+def fun_l21_n50()
+ fun_l22_n677
+end
+
+def fun_l21_n51()
+ fun_l22_n880
+end
+
+def fun_l21_n52()
+ fun_l22_n535
+end
+
+def fun_l21_n53()
+ fun_l22_n686
+end
+
+def fun_l21_n54()
+ fun_l22_n194
+end
+
+def fun_l21_n55()
+ fun_l22_n313
+end
+
+def fun_l21_n56()
+ fun_l22_n639
+end
+
+def fun_l21_n57()
+ fun_l22_n182
+end
+
+def fun_l21_n58()
+ fun_l22_n588
+end
+
+def fun_l21_n59()
+ fun_l22_n979
+end
+
+def fun_l21_n60()
+ fun_l22_n230
+end
+
+def fun_l21_n61()
+ fun_l22_n139
+end
+
+def fun_l21_n62()
+ fun_l22_n899
+end
+
+def fun_l21_n63()
+ fun_l22_n532
+end
+
+def fun_l21_n64()
+ fun_l22_n479
+end
+
+def fun_l21_n65()
+ fun_l22_n735
+end
+
+def fun_l21_n66()
+ fun_l22_n425
+end
+
+def fun_l21_n67()
+ fun_l22_n878
+end
+
+def fun_l21_n68()
+ fun_l22_n706
+end
+
+def fun_l21_n69()
+ fun_l22_n826
+end
+
+def fun_l21_n70()
+ fun_l22_n44
+end
+
+def fun_l21_n71()
+ fun_l22_n107
+end
+
+def fun_l21_n72()
+ fun_l22_n737
+end
+
+def fun_l21_n73()
+ fun_l22_n659
+end
+
+def fun_l21_n74()
+ fun_l22_n707
+end
+
+def fun_l21_n75()
+ fun_l22_n658
+end
+
+def fun_l21_n76()
+ fun_l22_n937
+end
+
+def fun_l21_n77()
+ fun_l22_n86
+end
+
+def fun_l21_n78()
+ fun_l22_n606
+end
+
+def fun_l21_n79()
+ fun_l22_n61
+end
+
+def fun_l21_n80()
+ fun_l22_n780
+end
+
+def fun_l21_n81()
+ fun_l22_n560
+end
+
+def fun_l21_n82()
+ fun_l22_n949
+end
+
+def fun_l21_n83()
+ fun_l22_n790
+end
+
+def fun_l21_n84()
+ fun_l22_n851
+end
+
+def fun_l21_n85()
+ fun_l22_n148
+end
+
+def fun_l21_n86()
+ fun_l22_n406
+end
+
+def fun_l21_n87()
+ fun_l22_n38
+end
+
+def fun_l21_n88()
+ fun_l22_n468
+end
+
+def fun_l21_n89()
+ fun_l22_n783
+end
+
+def fun_l21_n90()
+ fun_l22_n853
+end
+
+def fun_l21_n91()
+ fun_l22_n758
+end
+
+def fun_l21_n92()
+ fun_l22_n34
+end
+
+def fun_l21_n93()
+ fun_l22_n387
+end
+
+def fun_l21_n94()
+ fun_l22_n181
+end
+
+def fun_l21_n95()
+ fun_l22_n514
+end
+
+def fun_l21_n96()
+ fun_l22_n139
+end
+
+def fun_l21_n97()
+ fun_l22_n543
+end
+
+def fun_l21_n98()
+ fun_l22_n462
+end
+
+def fun_l21_n99()
+ fun_l22_n570
+end
+
+def fun_l21_n100()
+ fun_l22_n634
+end
+
+def fun_l21_n101()
+ fun_l22_n69
+end
+
+def fun_l21_n102()
+ fun_l22_n142
+end
+
+def fun_l21_n103()
+ fun_l22_n964
+end
+
+def fun_l21_n104()
+ fun_l22_n851
+end
+
+def fun_l21_n105()
+ fun_l22_n410
+end
+
+def fun_l21_n106()
+ fun_l22_n563
+end
+
+def fun_l21_n107()
+ fun_l22_n914
+end
+
+def fun_l21_n108()
+ fun_l22_n163
+end
+
+def fun_l21_n109()
+ fun_l22_n248
+end
+
+def fun_l21_n110()
+ fun_l22_n309
+end
+
+def fun_l21_n111()
+ fun_l22_n894
+end
+
+def fun_l21_n112()
+ fun_l22_n916
+end
+
+def fun_l21_n113()
+ fun_l22_n818
+end
+
+def fun_l21_n114()
+ fun_l22_n824
+end
+
+def fun_l21_n115()
+ fun_l22_n34
+end
+
+def fun_l21_n116()
+ fun_l22_n538
+end
+
+def fun_l21_n117()
+ fun_l22_n841
+end
+
+def fun_l21_n118()
+ fun_l22_n934
+end
+
+def fun_l21_n119()
+ fun_l22_n217
+end
+
+def fun_l21_n120()
+ fun_l22_n479
+end
+
+def fun_l21_n121()
+ fun_l22_n693
+end
+
+def fun_l21_n122()
+ fun_l22_n182
+end
+
+def fun_l21_n123()
+ fun_l22_n269
+end
+
+def fun_l21_n124()
+ fun_l22_n324
+end
+
+def fun_l21_n125()
+ fun_l22_n688
+end
+
+def fun_l21_n126()
+ fun_l22_n725
+end
+
+def fun_l21_n127()
+ fun_l22_n48
+end
+
+def fun_l21_n128()
+ fun_l22_n884
+end
+
+def fun_l21_n129()
+ fun_l22_n295
+end
+
+def fun_l21_n130()
+ fun_l22_n192
+end
+
+def fun_l21_n131()
+ fun_l22_n777
+end
+
+def fun_l21_n132()
+ fun_l22_n87
+end
+
+def fun_l21_n133()
+ fun_l22_n724
+end
+
+def fun_l21_n134()
+ fun_l22_n235
+end
+
+def fun_l21_n135()
+ fun_l22_n239
+end
+
+def fun_l21_n136()
+ fun_l22_n820
+end
+
+def fun_l21_n137()
+ fun_l22_n552
+end
+
+def fun_l21_n138()
+ fun_l22_n227
+end
+
+def fun_l21_n139()
+ fun_l22_n806
+end
+
+def fun_l21_n140()
+ fun_l22_n350
+end
+
+def fun_l21_n141()
+ fun_l22_n226
+end
+
+def fun_l21_n142()
+ fun_l22_n166
+end
+
+def fun_l21_n143()
+ fun_l22_n480
+end
+
+def fun_l21_n144()
+ fun_l22_n28
+end
+
+def fun_l21_n145()
+ fun_l22_n661
+end
+
+def fun_l21_n146()
+ fun_l22_n464
+end
+
+def fun_l21_n147()
+ fun_l22_n573
+end
+
+def fun_l21_n148()
+ fun_l22_n589
+end
+
+def fun_l21_n149()
+ fun_l22_n856
+end
+
+def fun_l21_n150()
+ fun_l22_n181
+end
+
+def fun_l21_n151()
+ fun_l22_n252
+end
+
+def fun_l21_n152()
+ fun_l22_n80
+end
+
+def fun_l21_n153()
+ fun_l22_n417
+end
+
+def fun_l21_n154()
+ fun_l22_n442
+end
+
+def fun_l21_n155()
+ fun_l22_n928
+end
+
+def fun_l21_n156()
+ fun_l22_n38
+end
+
+def fun_l21_n157()
+ fun_l22_n515
+end
+
+def fun_l21_n158()
+ fun_l22_n986
+end
+
+def fun_l21_n159()
+ fun_l22_n173
+end
+
+def fun_l21_n160()
+ fun_l22_n592
+end
+
+def fun_l21_n161()
+ fun_l22_n50
+end
+
+def fun_l21_n162()
+ fun_l22_n625
+end
+
+def fun_l21_n163()
+ fun_l22_n651
+end
+
+def fun_l21_n164()
+ fun_l22_n183
+end
+
+def fun_l21_n165()
+ fun_l22_n976
+end
+
+def fun_l21_n166()
+ fun_l22_n533
+end
+
+def fun_l21_n167()
+ fun_l22_n313
+end
+
+def fun_l21_n168()
+ fun_l22_n948
+end
+
+def fun_l21_n169()
+ fun_l22_n860
+end
+
+def fun_l21_n170()
+ fun_l22_n393
+end
+
+def fun_l21_n171()
+ fun_l22_n986
+end
+
+def fun_l21_n172()
+ fun_l22_n206
+end
+
+def fun_l21_n173()
+ fun_l22_n189
+end
+
+def fun_l21_n174()
+ fun_l22_n209
+end
+
+def fun_l21_n175()
+ fun_l22_n822
+end
+
+def fun_l21_n176()
+ fun_l22_n960
+end
+
+def fun_l21_n177()
+ fun_l22_n646
+end
+
+def fun_l21_n178()
+ fun_l22_n523
+end
+
+def fun_l21_n179()
+ fun_l22_n520
+end
+
+def fun_l21_n180()
+ fun_l22_n146
+end
+
+def fun_l21_n181()
+ fun_l22_n336
+end
+
+def fun_l21_n182()
+ fun_l22_n129
+end
+
+def fun_l21_n183()
+ fun_l22_n382
+end
+
+def fun_l21_n184()
+ fun_l22_n833
+end
+
+def fun_l21_n185()
+ fun_l22_n398
+end
+
+def fun_l21_n186()
+ fun_l22_n919
+end
+
+def fun_l21_n187()
+ fun_l22_n463
+end
+
+def fun_l21_n188()
+ fun_l22_n442
+end
+
+def fun_l21_n189()
+ fun_l22_n395
+end
+
+def fun_l21_n190()
+ fun_l22_n934
+end
+
+def fun_l21_n191()
+ fun_l22_n117
+end
+
+def fun_l21_n192()
+ fun_l22_n436
+end
+
+def fun_l21_n193()
+ fun_l22_n316
+end
+
+def fun_l21_n194()
+ fun_l22_n512
+end
+
+def fun_l21_n195()
+ fun_l22_n565
+end
+
+def fun_l21_n196()
+ fun_l22_n494
+end
+
+def fun_l21_n197()
+ fun_l22_n586
+end
+
+def fun_l21_n198()
+ fun_l22_n456
+end
+
+def fun_l21_n199()
+ fun_l22_n465
+end
+
+def fun_l21_n200()
+ fun_l22_n622
+end
+
+def fun_l21_n201()
+ fun_l22_n747
+end
+
+def fun_l21_n202()
+ fun_l22_n216
+end
+
+def fun_l21_n203()
+ fun_l22_n568
+end
+
+def fun_l21_n204()
+ fun_l22_n94
+end
+
+def fun_l21_n205()
+ fun_l22_n839
+end
+
+def fun_l21_n206()
+ fun_l22_n357
+end
+
+def fun_l21_n207()
+ fun_l22_n485
+end
+
+def fun_l21_n208()
+ fun_l22_n818
+end
+
+def fun_l21_n209()
+ fun_l22_n852
+end
+
+def fun_l21_n210()
+ fun_l22_n264
+end
+
+def fun_l21_n211()
+ fun_l22_n519
+end
+
+def fun_l21_n212()
+ fun_l22_n362
+end
+
+def fun_l21_n213()
+ fun_l22_n955
+end
+
+def fun_l21_n214()
+ fun_l22_n756
+end
+
+def fun_l21_n215()
+ fun_l22_n271
+end
+
+def fun_l21_n216()
+ fun_l22_n169
+end
+
+def fun_l21_n217()
+ fun_l22_n456
+end
+
+def fun_l21_n218()
+ fun_l22_n227
+end
+
+def fun_l21_n219()
+ fun_l22_n75
+end
+
+def fun_l21_n220()
+ fun_l22_n21
+end
+
+def fun_l21_n221()
+ fun_l22_n35
+end
+
+def fun_l21_n222()
+ fun_l22_n386
+end
+
+def fun_l21_n223()
+ fun_l22_n678
+end
+
+def fun_l21_n224()
+ fun_l22_n463
+end
+
+def fun_l21_n225()
+ fun_l22_n200
+end
+
+def fun_l21_n226()
+ fun_l22_n502
+end
+
+def fun_l21_n227()
+ fun_l22_n690
+end
+
+def fun_l21_n228()
+ fun_l22_n153
+end
+
+def fun_l21_n229()
+ fun_l22_n218
+end
+
+def fun_l21_n230()
+ fun_l22_n20
+end
+
+def fun_l21_n231()
+ fun_l22_n48
+end
+
+def fun_l21_n232()
+ fun_l22_n549
+end
+
+def fun_l21_n233()
+ fun_l22_n994
+end
+
+def fun_l21_n234()
+ fun_l22_n242
+end
+
+def fun_l21_n235()
+ fun_l22_n153
+end
+
+def fun_l21_n236()
+ fun_l22_n830
+end
+
+def fun_l21_n237()
+ fun_l22_n663
+end
+
+def fun_l21_n238()
+ fun_l22_n387
+end
+
+def fun_l21_n239()
+ fun_l22_n87
+end
+
+def fun_l21_n240()
+ fun_l22_n341
+end
+
+def fun_l21_n241()
+ fun_l22_n499
+end
+
+def fun_l21_n242()
+ fun_l22_n231
+end
+
+def fun_l21_n243()
+ fun_l22_n644
+end
+
+def fun_l21_n244()
+ fun_l22_n212
+end
+
+def fun_l21_n245()
+ fun_l22_n197
+end
+
+def fun_l21_n246()
+ fun_l22_n831
+end
+
+def fun_l21_n247()
+ fun_l22_n62
+end
+
+def fun_l21_n248()
+ fun_l22_n689
+end
+
+def fun_l21_n249()
+ fun_l22_n884
+end
+
+def fun_l21_n250()
+ fun_l22_n767
+end
+
+def fun_l21_n251()
+ fun_l22_n278
+end
+
+def fun_l21_n252()
+ fun_l22_n881
+end
+
+def fun_l21_n253()
+ fun_l22_n585
+end
+
+def fun_l21_n254()
+ fun_l22_n967
+end
+
+def fun_l21_n255()
+ fun_l22_n381
+end
+
+def fun_l21_n256()
+ fun_l22_n579
+end
+
+def fun_l21_n257()
+ fun_l22_n447
+end
+
+def fun_l21_n258()
+ fun_l22_n156
+end
+
+def fun_l21_n259()
+ fun_l22_n722
+end
+
+def fun_l21_n260()
+ fun_l22_n431
+end
+
+def fun_l21_n261()
+ fun_l22_n83
+end
+
+def fun_l21_n262()
+ fun_l22_n41
+end
+
+def fun_l21_n263()
+ fun_l22_n18
+end
+
+def fun_l21_n264()
+ fun_l22_n686
+end
+
+def fun_l21_n265()
+ fun_l22_n668
+end
+
+def fun_l21_n266()
+ fun_l22_n652
+end
+
+def fun_l21_n267()
+ fun_l22_n121
+end
+
+def fun_l21_n268()
+ fun_l22_n279
+end
+
+def fun_l21_n269()
+ fun_l22_n540
+end
+
+def fun_l21_n270()
+ fun_l22_n360
+end
+
+def fun_l21_n271()
+ fun_l22_n106
+end
+
+def fun_l21_n272()
+ fun_l22_n454
+end
+
+def fun_l21_n273()
+ fun_l22_n882
+end
+
+def fun_l21_n274()
+ fun_l22_n523
+end
+
+def fun_l21_n275()
+ fun_l22_n938
+end
+
+def fun_l21_n276()
+ fun_l22_n932
+end
+
+def fun_l21_n277()
+ fun_l22_n923
+end
+
+def fun_l21_n278()
+ fun_l22_n728
+end
+
+def fun_l21_n279()
+ fun_l22_n587
+end
+
+def fun_l21_n280()
+ fun_l22_n608
+end
+
+def fun_l21_n281()
+ fun_l22_n366
+end
+
+def fun_l21_n282()
+ fun_l22_n486
+end
+
+def fun_l21_n283()
+ fun_l22_n864
+end
+
+def fun_l21_n284()
+ fun_l22_n34
+end
+
+def fun_l21_n285()
+ fun_l22_n658
+end
+
+def fun_l21_n286()
+ fun_l22_n488
+end
+
+def fun_l21_n287()
+ fun_l22_n266
+end
+
+def fun_l21_n288()
+ fun_l22_n810
+end
+
+def fun_l21_n289()
+ fun_l22_n965
+end
+
+def fun_l21_n290()
+ fun_l22_n513
+end
+
+def fun_l21_n291()
+ fun_l22_n608
+end
+
+def fun_l21_n292()
+ fun_l22_n499
+end
+
+def fun_l21_n293()
+ fun_l22_n360
+end
+
+def fun_l21_n294()
+ fun_l22_n511
+end
+
+def fun_l21_n295()
+ fun_l22_n940
+end
+
+def fun_l21_n296()
+ fun_l22_n99
+end
+
+def fun_l21_n297()
+ fun_l22_n496
+end
+
+def fun_l21_n298()
+ fun_l22_n273
+end
+
+def fun_l21_n299()
+ fun_l22_n232
+end
+
+def fun_l21_n300()
+ fun_l22_n165
+end
+
+def fun_l21_n301()
+ fun_l22_n531
+end
+
+def fun_l21_n302()
+ fun_l22_n773
+end
+
+def fun_l21_n303()
+ fun_l22_n610
+end
+
+def fun_l21_n304()
+ fun_l22_n564
+end
+
+def fun_l21_n305()
+ fun_l22_n16
+end
+
+def fun_l21_n306()
+ fun_l22_n176
+end
+
+def fun_l21_n307()
+ fun_l22_n846
+end
+
+def fun_l21_n308()
+ fun_l22_n680
+end
+
+def fun_l21_n309()
+ fun_l22_n858
+end
+
+def fun_l21_n310()
+ fun_l22_n220
+end
+
+def fun_l21_n311()
+ fun_l22_n125
+end
+
+def fun_l21_n312()
+ fun_l22_n441
+end
+
+def fun_l21_n313()
+ fun_l22_n751
+end
+
+def fun_l21_n314()
+ fun_l22_n863
+end
+
+def fun_l21_n315()
+ fun_l22_n284
+end
+
+def fun_l21_n316()
+ fun_l22_n648
+end
+
+def fun_l21_n317()
+ fun_l22_n363
+end
+
+def fun_l21_n318()
+ fun_l22_n427
+end
+
+def fun_l21_n319()
+ fun_l22_n557
+end
+
+def fun_l21_n320()
+ fun_l22_n531
+end
+
+def fun_l21_n321()
+ fun_l22_n252
+end
+
+def fun_l21_n322()
+ fun_l22_n393
+end
+
+def fun_l21_n323()
+ fun_l22_n108
+end
+
+def fun_l21_n324()
+ fun_l22_n138
+end
+
+def fun_l21_n325()
+ fun_l22_n68
+end
+
+def fun_l21_n326()
+ fun_l22_n909
+end
+
+def fun_l21_n327()
+ fun_l22_n672
+end
+
+def fun_l21_n328()
+ fun_l22_n746
+end
+
+def fun_l21_n329()
+ fun_l22_n479
+end
+
+def fun_l21_n330()
+ fun_l22_n892
+end
+
+def fun_l21_n331()
+ fun_l22_n30
+end
+
+def fun_l21_n332()
+ fun_l22_n184
+end
+
+def fun_l21_n333()
+ fun_l22_n956
+end
+
+def fun_l21_n334()
+ fun_l22_n712
+end
+
+def fun_l21_n335()
+ fun_l22_n929
+end
+
+def fun_l21_n336()
+ fun_l22_n914
+end
+
+def fun_l21_n337()
+ fun_l22_n14
+end
+
+def fun_l21_n338()
+ fun_l22_n471
+end
+
+def fun_l21_n339()
+ fun_l22_n488
+end
+
+def fun_l21_n340()
+ fun_l22_n40
+end
+
+def fun_l21_n341()
+ fun_l22_n406
+end
+
+def fun_l21_n342()
+ fun_l22_n11
+end
+
+def fun_l21_n343()
+ fun_l22_n779
+end
+
+def fun_l21_n344()
+ fun_l22_n999
+end
+
+def fun_l21_n345()
+ fun_l22_n833
+end
+
+def fun_l21_n346()
+ fun_l22_n897
+end
+
+def fun_l21_n347()
+ fun_l22_n365
+end
+
+def fun_l21_n348()
+ fun_l22_n583
+end
+
+def fun_l21_n349()
+ fun_l22_n326
+end
+
+def fun_l21_n350()
+ fun_l22_n556
+end
+
+def fun_l21_n351()
+ fun_l22_n249
+end
+
+def fun_l21_n352()
+ fun_l22_n146
+end
+
+def fun_l21_n353()
+ fun_l22_n865
+end
+
+def fun_l21_n354()
+ fun_l22_n303
+end
+
+def fun_l21_n355()
+ fun_l22_n64
+end
+
+def fun_l21_n356()
+ fun_l22_n785
+end
+
+def fun_l21_n357()
+ fun_l22_n176
+end
+
+def fun_l21_n358()
+ fun_l22_n891
+end
+
+def fun_l21_n359()
+ fun_l22_n129
+end
+
+def fun_l21_n360()
+ fun_l22_n19
+end
+
+def fun_l21_n361()
+ fun_l22_n372
+end
+
+def fun_l21_n362()
+ fun_l22_n999
+end
+
+def fun_l21_n363()
+ fun_l22_n450
+end
+
+def fun_l21_n364()
+ fun_l22_n455
+end
+
+def fun_l21_n365()
+ fun_l22_n174
+end
+
+def fun_l21_n366()
+ fun_l22_n719
+end
+
+def fun_l21_n367()
+ fun_l22_n997
+end
+
+def fun_l21_n368()
+ fun_l22_n256
+end
+
+def fun_l21_n369()
+ fun_l22_n206
+end
+
+def fun_l21_n370()
+ fun_l22_n988
+end
+
+def fun_l21_n371()
+ fun_l22_n147
+end
+
+def fun_l21_n372()
+ fun_l22_n750
+end
+
+def fun_l21_n373()
+ fun_l22_n585
+end
+
+def fun_l21_n374()
+ fun_l22_n213
+end
+
+def fun_l21_n375()
+ fun_l22_n583
+end
+
+def fun_l21_n376()
+ fun_l22_n564
+end
+
+def fun_l21_n377()
+ fun_l22_n689
+end
+
+def fun_l21_n378()
+ fun_l22_n955
+end
+
+def fun_l21_n379()
+ fun_l22_n560
+end
+
+def fun_l21_n380()
+ fun_l22_n237
+end
+
+def fun_l21_n381()
+ fun_l22_n272
+end
+
+def fun_l21_n382()
+ fun_l22_n455
+end
+
+def fun_l21_n383()
+ fun_l22_n233
+end
+
+def fun_l21_n384()
+ fun_l22_n658
+end
+
+def fun_l21_n385()
+ fun_l22_n319
+end
+
+def fun_l21_n386()
+ fun_l22_n852
+end
+
+def fun_l21_n387()
+ fun_l22_n343
+end
+
+def fun_l21_n388()
+ fun_l22_n645
+end
+
+def fun_l21_n389()
+ fun_l22_n433
+end
+
+def fun_l21_n390()
+ fun_l22_n430
+end
+
+def fun_l21_n391()
+ fun_l22_n636
+end
+
+def fun_l21_n392()
+ fun_l22_n682
+end
+
+def fun_l21_n393()
+ fun_l22_n859
+end
+
+def fun_l21_n394()
+ fun_l22_n315
+end
+
+def fun_l21_n395()
+ fun_l22_n91
+end
+
+def fun_l21_n396()
+ fun_l22_n817
+end
+
+def fun_l21_n397()
+ fun_l22_n268
+end
+
+def fun_l21_n398()
+ fun_l22_n476
+end
+
+def fun_l21_n399()
+ fun_l22_n612
+end
+
+def fun_l21_n400()
+ fun_l22_n392
+end
+
+def fun_l21_n401()
+ fun_l22_n728
+end
+
+def fun_l21_n402()
+ fun_l22_n652
+end
+
+def fun_l21_n403()
+ fun_l22_n547
+end
+
+def fun_l21_n404()
+ fun_l22_n101
+end
+
+def fun_l21_n405()
+ fun_l22_n666
+end
+
+def fun_l21_n406()
+ fun_l22_n521
+end
+
+def fun_l21_n407()
+ fun_l22_n860
+end
+
+def fun_l21_n408()
+ fun_l22_n577
+end
+
+def fun_l21_n409()
+ fun_l22_n258
+end
+
+def fun_l21_n410()
+ fun_l22_n260
+end
+
+def fun_l21_n411()
+ fun_l22_n927
+end
+
+def fun_l21_n412()
+ fun_l22_n13
+end
+
+def fun_l21_n413()
+ fun_l22_n308
+end
+
+def fun_l21_n414()
+ fun_l22_n189
+end
+
+def fun_l21_n415()
+ fun_l22_n183
+end
+
+def fun_l21_n416()
+ fun_l22_n370
+end
+
+def fun_l21_n417()
+ fun_l22_n407
+end
+
+def fun_l21_n418()
+ fun_l22_n959
+end
+
+def fun_l21_n419()
+ fun_l22_n908
+end
+
+def fun_l21_n420()
+ fun_l22_n84
+end
+
+def fun_l21_n421()
+ fun_l22_n951
+end
+
+def fun_l21_n422()
+ fun_l22_n286
+end
+
+def fun_l21_n423()
+ fun_l22_n54
+end
+
+def fun_l21_n424()
+ fun_l22_n410
+end
+
+def fun_l21_n425()
+ fun_l22_n387
+end
+
+def fun_l21_n426()
+ fun_l22_n751
+end
+
+def fun_l21_n427()
+ fun_l22_n971
+end
+
+def fun_l21_n428()
+ fun_l22_n162
+end
+
+def fun_l21_n429()
+ fun_l22_n15
+end
+
+def fun_l21_n430()
+ fun_l22_n35
+end
+
+def fun_l21_n431()
+ fun_l22_n354
+end
+
+def fun_l21_n432()
+ fun_l22_n979
+end
+
+def fun_l21_n433()
+ fun_l22_n999
+end
+
+def fun_l21_n434()
+ fun_l22_n622
+end
+
+def fun_l21_n435()
+ fun_l22_n970
+end
+
+def fun_l21_n436()
+ fun_l22_n758
+end
+
+def fun_l21_n437()
+ fun_l22_n950
+end
+
+def fun_l21_n438()
+ fun_l22_n865
+end
+
+def fun_l21_n439()
+ fun_l22_n31
+end
+
+def fun_l21_n440()
+ fun_l22_n620
+end
+
+def fun_l21_n441()
+ fun_l22_n170
+end
+
+def fun_l21_n442()
+ fun_l22_n816
+end
+
+def fun_l21_n443()
+ fun_l22_n364
+end
+
+def fun_l21_n444()
+ fun_l22_n289
+end
+
+def fun_l21_n445()
+ fun_l22_n949
+end
+
+def fun_l21_n446()
+ fun_l22_n876
+end
+
+def fun_l21_n447()
+ fun_l22_n971
+end
+
+def fun_l21_n448()
+ fun_l22_n343
+end
+
+def fun_l21_n449()
+ fun_l22_n14
+end
+
+def fun_l21_n450()
+ fun_l22_n925
+end
+
+def fun_l21_n451()
+ fun_l22_n234
+end
+
+def fun_l21_n452()
+ fun_l22_n242
+end
+
+def fun_l21_n453()
+ fun_l22_n184
+end
+
+def fun_l21_n454()
+ fun_l22_n158
+end
+
+def fun_l21_n455()
+ fun_l22_n645
+end
+
+def fun_l21_n456()
+ fun_l22_n173
+end
+
+def fun_l21_n457()
+ fun_l22_n363
+end
+
+def fun_l21_n458()
+ fun_l22_n787
+end
+
+def fun_l21_n459()
+ fun_l22_n102
+end
+
+def fun_l21_n460()
+ fun_l22_n886
+end
+
+def fun_l21_n461()
+ fun_l22_n279
+end
+
+def fun_l21_n462()
+ fun_l22_n909
+end
+
+def fun_l21_n463()
+ fun_l22_n767
+end
+
+def fun_l21_n464()
+ fun_l22_n82
+end
+
+def fun_l21_n465()
+ fun_l22_n249
+end
+
+def fun_l21_n466()
+ fun_l22_n670
+end
+
+def fun_l21_n467()
+ fun_l22_n944
+end
+
+def fun_l21_n468()
+ fun_l22_n191
+end
+
+def fun_l21_n469()
+ fun_l22_n897
+end
+
+def fun_l21_n470()
+ fun_l22_n591
+end
+
+def fun_l21_n471()
+ fun_l22_n164
+end
+
+def fun_l21_n472()
+ fun_l22_n984
+end
+
+def fun_l21_n473()
+ fun_l22_n26
+end
+
+def fun_l21_n474()
+ fun_l22_n398
+end
+
+def fun_l21_n475()
+ fun_l22_n668
+end
+
+def fun_l21_n476()
+ fun_l22_n190
+end
+
+def fun_l21_n477()
+ fun_l22_n249
+end
+
+def fun_l21_n478()
+ fun_l22_n736
+end
+
+def fun_l21_n479()
+ fun_l22_n714
+end
+
+def fun_l21_n480()
+ fun_l22_n929
+end
+
+def fun_l21_n481()
+ fun_l22_n448
+end
+
+def fun_l21_n482()
+ fun_l22_n922
+end
+
+def fun_l21_n483()
+ fun_l22_n992
+end
+
+def fun_l21_n484()
+ fun_l22_n306
+end
+
+def fun_l21_n485()
+ fun_l22_n420
+end
+
+def fun_l21_n486()
+ fun_l22_n630
+end
+
+def fun_l21_n487()
+ fun_l22_n263
+end
+
+def fun_l21_n488()
+ fun_l22_n754
+end
+
+def fun_l21_n489()
+ fun_l22_n96
+end
+
+def fun_l21_n490()
+ fun_l22_n338
+end
+
+def fun_l21_n491()
+ fun_l22_n615
+end
+
+def fun_l21_n492()
+ fun_l22_n704
+end
+
+def fun_l21_n493()
+ fun_l22_n581
+end
+
+def fun_l21_n494()
+ fun_l22_n801
+end
+
+def fun_l21_n495()
+ fun_l22_n204
+end
+
+def fun_l21_n496()
+ fun_l22_n835
+end
+
+def fun_l21_n497()
+ fun_l22_n479
+end
+
+def fun_l21_n498()
+ fun_l22_n379
+end
+
+def fun_l21_n499()
+ fun_l22_n937
+end
+
+def fun_l21_n500()
+ fun_l22_n830
+end
+
+def fun_l21_n501()
+ fun_l22_n458
+end
+
+def fun_l21_n502()
+ fun_l22_n806
+end
+
+def fun_l21_n503()
+ fun_l22_n158
+end
+
+def fun_l21_n504()
+ fun_l22_n151
+end
+
+def fun_l21_n505()
+ fun_l22_n685
+end
+
+def fun_l21_n506()
+ fun_l22_n806
+end
+
+def fun_l21_n507()
+ fun_l22_n584
+end
+
+def fun_l21_n508()
+ fun_l22_n644
+end
+
+def fun_l21_n509()
+ fun_l22_n237
+end
+
+def fun_l21_n510()
+ fun_l22_n542
+end
+
+def fun_l21_n511()
+ fun_l22_n450
+end
+
+def fun_l21_n512()
+ fun_l22_n385
+end
+
+def fun_l21_n513()
+ fun_l22_n321
+end
+
+def fun_l21_n514()
+ fun_l22_n548
+end
+
+def fun_l21_n515()
+ fun_l22_n519
+end
+
+def fun_l21_n516()
+ fun_l22_n309
+end
+
+def fun_l21_n517()
+ fun_l22_n4
+end
+
+def fun_l21_n518()
+ fun_l22_n930
+end
+
+def fun_l21_n519()
+ fun_l22_n245
+end
+
+def fun_l21_n520()
+ fun_l22_n568
+end
+
+def fun_l21_n521()
+ fun_l22_n527
+end
+
+def fun_l21_n522()
+ fun_l22_n650
+end
+
+def fun_l21_n523()
+ fun_l22_n391
+end
+
+def fun_l21_n524()
+ fun_l22_n749
+end
+
+def fun_l21_n525()
+ fun_l22_n810
+end
+
+def fun_l21_n526()
+ fun_l22_n615
+end
+
+def fun_l21_n527()
+ fun_l22_n702
+end
+
+def fun_l21_n528()
+ fun_l22_n62
+end
+
+def fun_l21_n529()
+ fun_l22_n316
+end
+
+def fun_l21_n530()
+ fun_l22_n201
+end
+
+def fun_l21_n531()
+ fun_l22_n447
+end
+
+def fun_l21_n532()
+ fun_l22_n506
+end
+
+def fun_l21_n533()
+ fun_l22_n900
+end
+
+def fun_l21_n534()
+ fun_l22_n652
+end
+
+def fun_l21_n535()
+ fun_l22_n493
+end
+
+def fun_l21_n536()
+ fun_l22_n803
+end
+
+def fun_l21_n537()
+ fun_l22_n263
+end
+
+def fun_l21_n538()
+ fun_l22_n303
+end
+
+def fun_l21_n539()
+ fun_l22_n17
+end
+
+def fun_l21_n540()
+ fun_l22_n900
+end
+
+def fun_l21_n541()
+ fun_l22_n917
+end
+
+def fun_l21_n542()
+ fun_l22_n789
+end
+
+def fun_l21_n543()
+ fun_l22_n668
+end
+
+def fun_l21_n544()
+ fun_l22_n335
+end
+
+def fun_l21_n545()
+ fun_l22_n560
+end
+
+def fun_l21_n546()
+ fun_l22_n705
+end
+
+def fun_l21_n547()
+ fun_l22_n159
+end
+
+def fun_l21_n548()
+ fun_l22_n874
+end
+
+def fun_l21_n549()
+ fun_l22_n809
+end
+
+def fun_l21_n550()
+ fun_l22_n726
+end
+
+def fun_l21_n551()
+ fun_l22_n27
+end
+
+def fun_l21_n552()
+ fun_l22_n63
+end
+
+def fun_l21_n553()
+ fun_l22_n642
+end
+
+def fun_l21_n554()
+ fun_l22_n694
+end
+
+def fun_l21_n555()
+ fun_l22_n432
+end
+
+def fun_l21_n556()
+ fun_l22_n439
+end
+
+def fun_l21_n557()
+ fun_l22_n876
+end
+
+def fun_l21_n558()
+ fun_l22_n998
+end
+
+def fun_l21_n559()
+ fun_l22_n703
+end
+
+def fun_l21_n560()
+ fun_l22_n785
+end
+
+def fun_l21_n561()
+ fun_l22_n543
+end
+
+def fun_l21_n562()
+ fun_l22_n286
+end
+
+def fun_l21_n563()
+ fun_l22_n771
+end
+
+def fun_l21_n564()
+ fun_l22_n447
+end
+
+def fun_l21_n565()
+ fun_l22_n955
+end
+
+def fun_l21_n566()
+ fun_l22_n603
+end
+
+def fun_l21_n567()
+ fun_l22_n258
+end
+
+def fun_l21_n568()
+ fun_l22_n936
+end
+
+def fun_l21_n569()
+ fun_l22_n524
+end
+
+def fun_l21_n570()
+ fun_l22_n205
+end
+
+def fun_l21_n571()
+ fun_l22_n41
+end
+
+def fun_l21_n572()
+ fun_l22_n589
+end
+
+def fun_l21_n573()
+ fun_l22_n519
+end
+
+def fun_l21_n574()
+ fun_l22_n500
+end
+
+def fun_l21_n575()
+ fun_l22_n307
+end
+
+def fun_l21_n576()
+ fun_l22_n598
+end
+
+def fun_l21_n577()
+ fun_l22_n698
+end
+
+def fun_l21_n578()
+ fun_l22_n200
+end
+
+def fun_l21_n579()
+ fun_l22_n657
+end
+
+def fun_l21_n580()
+ fun_l22_n353
+end
+
+def fun_l21_n581()
+ fun_l22_n553
+end
+
+def fun_l21_n582()
+ fun_l22_n490
+end
+
+def fun_l21_n583()
+ fun_l22_n112
+end
+
+def fun_l21_n584()
+ fun_l22_n626
+end
+
+def fun_l21_n585()
+ fun_l22_n815
+end
+
+def fun_l21_n586()
+ fun_l22_n792
+end
+
+def fun_l21_n587()
+ fun_l22_n295
+end
+
+def fun_l21_n588()
+ fun_l22_n201
+end
+
+def fun_l21_n589()
+ fun_l22_n248
+end
+
+def fun_l21_n590()
+ fun_l22_n295
+end
+
+def fun_l21_n591()
+ fun_l22_n708
+end
+
+def fun_l21_n592()
+ fun_l22_n507
+end
+
+def fun_l21_n593()
+ fun_l22_n177
+end
+
+def fun_l21_n594()
+ fun_l22_n467
+end
+
+def fun_l21_n595()
+ fun_l22_n113
+end
+
+def fun_l21_n596()
+ fun_l22_n390
+end
+
+def fun_l21_n597()
+ fun_l22_n348
+end
+
+def fun_l21_n598()
+ fun_l22_n545
+end
+
+def fun_l21_n599()
+ fun_l22_n695
+end
+
+def fun_l21_n600()
+ fun_l22_n170
+end
+
+def fun_l21_n601()
+ fun_l22_n978
+end
+
+def fun_l21_n602()
+ fun_l22_n70
+end
+
+def fun_l21_n603()
+ fun_l22_n161
+end
+
+def fun_l21_n604()
+ fun_l22_n33
+end
+
+def fun_l21_n605()
+ fun_l22_n275
+end
+
+def fun_l21_n606()
+ fun_l22_n738
+end
+
+def fun_l21_n607()
+ fun_l22_n152
+end
+
+def fun_l21_n608()
+ fun_l22_n380
+end
+
+def fun_l21_n609()
+ fun_l22_n903
+end
+
+def fun_l21_n610()
+ fun_l22_n274
+end
+
+def fun_l21_n611()
+ fun_l22_n100
+end
+
+def fun_l21_n612()
+ fun_l22_n206
+end
+
+def fun_l21_n613()
+ fun_l22_n225
+end
+
+def fun_l21_n614()
+ fun_l22_n627
+end
+
+def fun_l21_n615()
+ fun_l22_n332
+end
+
+def fun_l21_n616()
+ fun_l22_n312
+end
+
+def fun_l21_n617()
+ fun_l22_n379
+end
+
+def fun_l21_n618()
+ fun_l22_n889
+end
+
+def fun_l21_n619()
+ fun_l22_n399
+end
+
+def fun_l21_n620()
+ fun_l22_n212
+end
+
+def fun_l21_n621()
+ fun_l22_n289
+end
+
+def fun_l21_n622()
+ fun_l22_n161
+end
+
+def fun_l21_n623()
+ fun_l22_n764
+end
+
+def fun_l21_n624()
+ fun_l22_n165
+end
+
+def fun_l21_n625()
+ fun_l22_n768
+end
+
+def fun_l21_n626()
+ fun_l22_n596
+end
+
+def fun_l21_n627()
+ fun_l22_n506
+end
+
+def fun_l21_n628()
+ fun_l22_n523
+end
+
+def fun_l21_n629()
+ fun_l22_n261
+end
+
+def fun_l21_n630()
+ fun_l22_n683
+end
+
+def fun_l21_n631()
+ fun_l22_n518
+end
+
+def fun_l21_n632()
+ fun_l22_n813
+end
+
+def fun_l21_n633()
+ fun_l22_n949
+end
+
+def fun_l21_n634()
+ fun_l22_n856
+end
+
+def fun_l21_n635()
+ fun_l22_n250
+end
+
+def fun_l21_n636()
+ fun_l22_n840
+end
+
+def fun_l21_n637()
+ fun_l22_n763
+end
+
+def fun_l21_n638()
+ fun_l22_n40
+end
+
+def fun_l21_n639()
+ fun_l22_n13
+end
+
+def fun_l21_n640()
+ fun_l22_n789
+end
+
+def fun_l21_n641()
+ fun_l22_n517
+end
+
+def fun_l21_n642()
+ fun_l22_n366
+end
+
+def fun_l21_n643()
+ fun_l22_n155
+end
+
+def fun_l21_n644()
+ fun_l22_n370
+end
+
+def fun_l21_n645()
+ fun_l22_n633
+end
+
+def fun_l21_n646()
+ fun_l22_n996
+end
+
+def fun_l21_n647()
+ fun_l22_n943
+end
+
+def fun_l21_n648()
+ fun_l22_n81
+end
+
+def fun_l21_n649()
+ fun_l22_n161
+end
+
+def fun_l21_n650()
+ fun_l22_n346
+end
+
+def fun_l21_n651()
+ fun_l22_n338
+end
+
+def fun_l21_n652()
+ fun_l22_n989
+end
+
+def fun_l21_n653()
+ fun_l22_n727
+end
+
+def fun_l21_n654()
+ fun_l22_n261
+end
+
+def fun_l21_n655()
+ fun_l22_n975
+end
+
+def fun_l21_n656()
+ fun_l22_n635
+end
+
+def fun_l21_n657()
+ fun_l22_n622
+end
+
+def fun_l21_n658()
+ fun_l22_n519
+end
+
+def fun_l21_n659()
+ fun_l22_n619
+end
+
+def fun_l21_n660()
+ fun_l22_n489
+end
+
+def fun_l21_n661()
+ fun_l22_n876
+end
+
+def fun_l21_n662()
+ fun_l22_n261
+end
+
+def fun_l21_n663()
+ fun_l22_n96
+end
+
+def fun_l21_n664()
+ fun_l22_n984
+end
+
+def fun_l21_n665()
+ fun_l22_n367
+end
+
+def fun_l21_n666()
+ fun_l22_n100
+end
+
+def fun_l21_n667()
+ fun_l22_n555
+end
+
+def fun_l21_n668()
+ fun_l22_n438
+end
+
+def fun_l21_n669()
+ fun_l22_n141
+end
+
+def fun_l21_n670()
+ fun_l22_n240
+end
+
+def fun_l21_n671()
+ fun_l22_n185
+end
+
+def fun_l21_n672()
+ fun_l22_n199
+end
+
+def fun_l21_n673()
+ fun_l22_n166
+end
+
+def fun_l21_n674()
+ fun_l22_n322
+end
+
+def fun_l21_n675()
+ fun_l22_n811
+end
+
+def fun_l21_n676()
+ fun_l22_n18
+end
+
+def fun_l21_n677()
+ fun_l22_n800
+end
+
+def fun_l21_n678()
+ fun_l22_n729
+end
+
+def fun_l21_n679()
+ fun_l22_n862
+end
+
+def fun_l21_n680()
+ fun_l22_n911
+end
+
+def fun_l21_n681()
+ fun_l22_n342
+end
+
+def fun_l21_n682()
+ fun_l22_n635
+end
+
+def fun_l21_n683()
+ fun_l22_n814
+end
+
+def fun_l21_n684()
+ fun_l22_n786
+end
+
+def fun_l21_n685()
+ fun_l22_n598
+end
+
+def fun_l21_n686()
+ fun_l22_n622
+end
+
+def fun_l21_n687()
+ fun_l22_n847
+end
+
+def fun_l21_n688()
+ fun_l22_n94
+end
+
+def fun_l21_n689()
+ fun_l22_n683
+end
+
+def fun_l21_n690()
+ fun_l22_n260
+end
+
+def fun_l21_n691()
+ fun_l22_n684
+end
+
+def fun_l21_n692()
+ fun_l22_n923
+end
+
+def fun_l21_n693()
+ fun_l22_n124
+end
+
+def fun_l21_n694()
+ fun_l22_n641
+end
+
+def fun_l21_n695()
+ fun_l22_n62
+end
+
+def fun_l21_n696()
+ fun_l22_n394
+end
+
+def fun_l21_n697()
+ fun_l22_n336
+end
+
+def fun_l21_n698()
+ fun_l22_n896
+end
+
+def fun_l21_n699()
+ fun_l22_n451
+end
+
+def fun_l21_n700()
+ fun_l22_n519
+end
+
+def fun_l21_n701()
+ fun_l22_n207
+end
+
+def fun_l21_n702()
+ fun_l22_n690
+end
+
+def fun_l21_n703()
+ fun_l22_n901
+end
+
+def fun_l21_n704()
+ fun_l22_n722
+end
+
+def fun_l21_n705()
+ fun_l22_n446
+end
+
+def fun_l21_n706()
+ fun_l22_n292
+end
+
+def fun_l21_n707()
+ fun_l22_n678
+end
+
+def fun_l21_n708()
+ fun_l22_n77
+end
+
+def fun_l21_n709()
+ fun_l22_n564
+end
+
+def fun_l21_n710()
+ fun_l22_n253
+end
+
+def fun_l21_n711()
+ fun_l22_n342
+end
+
+def fun_l21_n712()
+ fun_l22_n841
+end
+
+def fun_l21_n713()
+ fun_l22_n981
+end
+
+def fun_l21_n714()
+ fun_l22_n130
+end
+
+def fun_l21_n715()
+ fun_l22_n11
+end
+
+def fun_l21_n716()
+ fun_l22_n320
+end
+
+def fun_l21_n717()
+ fun_l22_n653
+end
+
+def fun_l21_n718()
+ fun_l22_n46
+end
+
+def fun_l21_n719()
+ fun_l22_n500
+end
+
+def fun_l21_n720()
+ fun_l22_n694
+end
+
+def fun_l21_n721()
+ fun_l22_n422
+end
+
+def fun_l21_n722()
+ fun_l22_n354
+end
+
+def fun_l21_n723()
+ fun_l22_n951
+end
+
+def fun_l21_n724()
+ fun_l22_n835
+end
+
+def fun_l21_n725()
+ fun_l22_n138
+end
+
+def fun_l21_n726()
+ fun_l22_n416
+end
+
+def fun_l21_n727()
+ fun_l22_n798
+end
+
+def fun_l21_n728()
+ fun_l22_n941
+end
+
+def fun_l21_n729()
+ fun_l22_n522
+end
+
+def fun_l21_n730()
+ fun_l22_n183
+end
+
+def fun_l21_n731()
+ fun_l22_n538
+end
+
+def fun_l21_n732()
+ fun_l22_n422
+end
+
+def fun_l21_n733()
+ fun_l22_n692
+end
+
+def fun_l21_n734()
+ fun_l22_n272
+end
+
+def fun_l21_n735()
+ fun_l22_n434
+end
+
+def fun_l21_n736()
+ fun_l22_n876
+end
+
+def fun_l21_n737()
+ fun_l22_n685
+end
+
+def fun_l21_n738()
+ fun_l22_n338
+end
+
+def fun_l21_n739()
+ fun_l22_n835
+end
+
+def fun_l21_n740()
+ fun_l22_n307
+end
+
+def fun_l21_n741()
+ fun_l22_n270
+end
+
+def fun_l21_n742()
+ fun_l22_n626
+end
+
+def fun_l21_n743()
+ fun_l22_n92
+end
+
+def fun_l21_n744()
+ fun_l22_n532
+end
+
+def fun_l21_n745()
+ fun_l22_n508
+end
+
+def fun_l21_n746()
+ fun_l22_n866
+end
+
+def fun_l21_n747()
+ fun_l22_n474
+end
+
+def fun_l21_n748()
+ fun_l22_n697
+end
+
+def fun_l21_n749()
+ fun_l22_n952
+end
+
+def fun_l21_n750()
+ fun_l22_n835
+end
+
+def fun_l21_n751()
+ fun_l22_n21
+end
+
+def fun_l21_n752()
+ fun_l22_n386
+end
+
+def fun_l21_n753()
+ fun_l22_n55
+end
+
+def fun_l21_n754()
+ fun_l22_n727
+end
+
+def fun_l21_n755()
+ fun_l22_n944
+end
+
+def fun_l21_n756()
+ fun_l22_n850
+end
+
+def fun_l21_n757()
+ fun_l22_n305
+end
+
+def fun_l21_n758()
+ fun_l22_n502
+end
+
+def fun_l21_n759()
+ fun_l22_n544
+end
+
+def fun_l21_n760()
+ fun_l22_n308
+end
+
+def fun_l21_n761()
+ fun_l22_n3
+end
+
+def fun_l21_n762()
+ fun_l22_n724
+end
+
+def fun_l21_n763()
+ fun_l22_n87
+end
+
+def fun_l21_n764()
+ fun_l22_n683
+end
+
+def fun_l21_n765()
+ fun_l22_n597
+end
+
+def fun_l21_n766()
+ fun_l22_n641
+end
+
+def fun_l21_n767()
+ fun_l22_n614
+end
+
+def fun_l21_n768()
+ fun_l22_n668
+end
+
+def fun_l21_n769()
+ fun_l22_n320
+end
+
+def fun_l21_n770()
+ fun_l22_n923
+end
+
+def fun_l21_n771()
+ fun_l22_n762
+end
+
+def fun_l21_n772()
+ fun_l22_n545
+end
+
+def fun_l21_n773()
+ fun_l22_n692
+end
+
+def fun_l21_n774()
+ fun_l22_n237
+end
+
+def fun_l21_n775()
+ fun_l22_n373
+end
+
+def fun_l21_n776()
+ fun_l22_n44
+end
+
+def fun_l21_n777()
+ fun_l22_n78
+end
+
+def fun_l21_n778()
+ fun_l22_n42
+end
+
+def fun_l21_n779()
+ fun_l22_n133
+end
+
+def fun_l21_n780()
+ fun_l22_n428
+end
+
+def fun_l21_n781()
+ fun_l22_n689
+end
+
+def fun_l21_n782()
+ fun_l22_n903
+end
+
+def fun_l21_n783()
+ fun_l22_n758
+end
+
+def fun_l21_n784()
+ fun_l22_n762
+end
+
+def fun_l21_n785()
+ fun_l22_n516
+end
+
+def fun_l21_n786()
+ fun_l22_n466
+end
+
+def fun_l21_n787()
+ fun_l22_n373
+end
+
+def fun_l21_n788()
+ fun_l22_n390
+end
+
+def fun_l21_n789()
+ fun_l22_n109
+end
+
+def fun_l21_n790()
+ fun_l22_n865
+end
+
+def fun_l21_n791()
+ fun_l22_n112
+end
+
+def fun_l21_n792()
+ fun_l22_n865
+end
+
+def fun_l21_n793()
+ fun_l22_n645
+end
+
+def fun_l21_n794()
+ fun_l22_n621
+end
+
+def fun_l21_n795()
+ fun_l22_n758
+end
+
+def fun_l21_n796()
+ fun_l22_n519
+end
+
+def fun_l21_n797()
+ fun_l22_n104
+end
+
+def fun_l21_n798()
+ fun_l22_n79
+end
+
+def fun_l21_n799()
+ fun_l22_n840
+end
+
+def fun_l21_n800()
+ fun_l22_n613
+end
+
+def fun_l21_n801()
+ fun_l22_n982
+end
+
+def fun_l21_n802()
+ fun_l22_n484
+end
+
+def fun_l21_n803()
+ fun_l22_n321
+end
+
+def fun_l21_n804()
+ fun_l22_n445
+end
+
+def fun_l21_n805()
+ fun_l22_n857
+end
+
+def fun_l21_n806()
+ fun_l22_n811
+end
+
+def fun_l21_n807()
+ fun_l22_n763
+end
+
+def fun_l21_n808()
+ fun_l22_n40
+end
+
+def fun_l21_n809()
+ fun_l22_n376
+end
+
+def fun_l21_n810()
+ fun_l22_n111
+end
+
+def fun_l21_n811()
+ fun_l22_n318
+end
+
+def fun_l21_n812()
+ fun_l22_n455
+end
+
+def fun_l21_n813()
+ fun_l22_n860
+end
+
+def fun_l21_n814()
+ fun_l22_n185
+end
+
+def fun_l21_n815()
+ fun_l22_n932
+end
+
+def fun_l21_n816()
+ fun_l22_n673
+end
+
+def fun_l21_n817()
+ fun_l22_n413
+end
+
+def fun_l21_n818()
+ fun_l22_n927
+end
+
+def fun_l21_n819()
+ fun_l22_n827
+end
+
+def fun_l21_n820()
+ fun_l22_n572
+end
+
+def fun_l21_n821()
+ fun_l22_n682
+end
+
+def fun_l21_n822()
+ fun_l22_n810
+end
+
+def fun_l21_n823()
+ fun_l22_n492
+end
+
+def fun_l21_n824()
+ fun_l22_n677
+end
+
+def fun_l21_n825()
+ fun_l22_n658
+end
+
+def fun_l21_n826()
+ fun_l22_n584
+end
+
+def fun_l21_n827()
+ fun_l22_n360
+end
+
+def fun_l21_n828()
+ fun_l22_n677
+end
+
+def fun_l21_n829()
+ fun_l22_n669
+end
+
+def fun_l21_n830()
+ fun_l22_n209
+end
+
+def fun_l21_n831()
+ fun_l22_n526
+end
+
+def fun_l21_n832()
+ fun_l22_n820
+end
+
+def fun_l21_n833()
+ fun_l22_n81
+end
+
+def fun_l21_n834()
+ fun_l22_n140
+end
+
+def fun_l21_n835()
+ fun_l22_n407
+end
+
+def fun_l21_n836()
+ fun_l22_n705
+end
+
+def fun_l21_n837()
+ fun_l22_n785
+end
+
+def fun_l21_n838()
+ fun_l22_n13
+end
+
+def fun_l21_n839()
+ fun_l22_n490
+end
+
+def fun_l21_n840()
+ fun_l22_n835
+end
+
+def fun_l21_n841()
+ fun_l22_n410
+end
+
+def fun_l21_n842()
+ fun_l22_n411
+end
+
+def fun_l21_n843()
+ fun_l22_n315
+end
+
+def fun_l21_n844()
+ fun_l22_n830
+end
+
+def fun_l21_n845()
+ fun_l22_n417
+end
+
+def fun_l21_n846()
+ fun_l22_n66
+end
+
+def fun_l21_n847()
+ fun_l22_n484
+end
+
+def fun_l21_n848()
+ fun_l22_n398
+end
+
+def fun_l21_n849()
+ fun_l22_n191
+end
+
+def fun_l21_n850()
+ fun_l22_n939
+end
+
+def fun_l21_n851()
+ fun_l22_n233
+end
+
+def fun_l21_n852()
+ fun_l22_n554
+end
+
+def fun_l21_n853()
+ fun_l22_n205
+end
+
+def fun_l21_n854()
+ fun_l22_n86
+end
+
+def fun_l21_n855()
+ fun_l22_n396
+end
+
+def fun_l21_n856()
+ fun_l22_n815
+end
+
+def fun_l21_n857()
+ fun_l22_n286
+end
+
+def fun_l21_n858()
+ fun_l22_n874
+end
+
+def fun_l21_n859()
+ fun_l22_n274
+end
+
+def fun_l21_n860()
+ fun_l22_n517
+end
+
+def fun_l21_n861()
+ fun_l22_n295
+end
+
+def fun_l21_n862()
+ fun_l22_n576
+end
+
+def fun_l21_n863()
+ fun_l22_n745
+end
+
+def fun_l21_n864()
+ fun_l22_n842
+end
+
+def fun_l21_n865()
+ fun_l22_n180
+end
+
+def fun_l21_n866()
+ fun_l22_n817
+end
+
+def fun_l21_n867()
+ fun_l22_n663
+end
+
+def fun_l21_n868()
+ fun_l22_n298
+end
+
+def fun_l21_n869()
+ fun_l22_n328
+end
+
+def fun_l21_n870()
+ fun_l22_n863
+end
+
+def fun_l21_n871()
+ fun_l22_n669
+end
+
+def fun_l21_n872()
+ fun_l22_n494
+end
+
+def fun_l21_n873()
+ fun_l22_n483
+end
+
+def fun_l21_n874()
+ fun_l22_n977
+end
+
+def fun_l21_n875()
+ fun_l22_n797
+end
+
+def fun_l21_n876()
+ fun_l22_n258
+end
+
+def fun_l21_n877()
+ fun_l22_n701
+end
+
+def fun_l21_n878()
+ fun_l22_n791
+end
+
+def fun_l21_n879()
+ fun_l22_n201
+end
+
+def fun_l21_n880()
+ fun_l22_n994
+end
+
+def fun_l21_n881()
+ fun_l22_n678
+end
+
+def fun_l21_n882()
+ fun_l22_n653
+end
+
+def fun_l21_n883()
+ fun_l22_n339
+end
+
+def fun_l21_n884()
+ fun_l22_n701
+end
+
+def fun_l21_n885()
+ fun_l22_n188
+end
+
+def fun_l21_n886()
+ fun_l22_n607
+end
+
+def fun_l21_n887()
+ fun_l22_n108
+end
+
+def fun_l21_n888()
+ fun_l22_n190
+end
+
+def fun_l21_n889()
+ fun_l22_n581
+end
+
+def fun_l21_n890()
+ fun_l22_n283
+end
+
+def fun_l21_n891()
+ fun_l22_n743
+end
+
+def fun_l21_n892()
+ fun_l22_n861
+end
+
+def fun_l21_n893()
+ fun_l22_n998
+end
+
+def fun_l21_n894()
+ fun_l22_n752
+end
+
+def fun_l21_n895()
+ fun_l22_n762
+end
+
+def fun_l21_n896()
+ fun_l22_n41
+end
+
+def fun_l21_n897()
+ fun_l22_n820
+end
+
+def fun_l21_n898()
+ fun_l22_n510
+end
+
+def fun_l21_n899()
+ fun_l22_n974
+end
+
+def fun_l21_n900()
+ fun_l22_n524
+end
+
+def fun_l21_n901()
+ fun_l22_n771
+end
+
+def fun_l21_n902()
+ fun_l22_n376
+end
+
+def fun_l21_n903()
+ fun_l22_n684
+end
+
+def fun_l21_n904()
+ fun_l22_n595
+end
+
+def fun_l21_n905()
+ fun_l22_n934
+end
+
+def fun_l21_n906()
+ fun_l22_n228
+end
+
+def fun_l21_n907()
+ fun_l22_n685
+end
+
+def fun_l21_n908()
+ fun_l22_n549
+end
+
+def fun_l21_n909()
+ fun_l22_n374
+end
+
+def fun_l21_n910()
+ fun_l22_n934
+end
+
+def fun_l21_n911()
+ fun_l22_n660
+end
+
+def fun_l21_n912()
+ fun_l22_n756
+end
+
+def fun_l21_n913()
+ fun_l22_n32
+end
+
+def fun_l21_n914()
+ fun_l22_n660
+end
+
+def fun_l21_n915()
+ fun_l22_n52
+end
+
+def fun_l21_n916()
+ fun_l22_n750
+end
+
+def fun_l21_n917()
+ fun_l22_n239
+end
+
+def fun_l21_n918()
+ fun_l22_n290
+end
+
+def fun_l21_n919()
+ fun_l22_n914
+end
+
+def fun_l21_n920()
+ fun_l22_n257
+end
+
+def fun_l21_n921()
+ fun_l22_n307
+end
+
+def fun_l21_n922()
+ fun_l22_n949
+end
+
+def fun_l21_n923()
+ fun_l22_n344
+end
+
+def fun_l21_n924()
+ fun_l22_n479
+end
+
+def fun_l21_n925()
+ fun_l22_n306
+end
+
+def fun_l21_n926()
+ fun_l22_n361
+end
+
+def fun_l21_n927()
+ fun_l22_n429
+end
+
+def fun_l21_n928()
+ fun_l22_n145
+end
+
+def fun_l21_n929()
+ fun_l22_n874
+end
+
+def fun_l21_n930()
+ fun_l22_n127
+end
+
+def fun_l21_n931()
+ fun_l22_n909
+end
+
+def fun_l21_n932()
+ fun_l22_n784
+end
+
+def fun_l21_n933()
+ fun_l22_n966
+end
+
+def fun_l21_n934()
+ fun_l22_n789
+end
+
+def fun_l21_n935()
+ fun_l22_n787
+end
+
+def fun_l21_n936()
+ fun_l22_n325
+end
+
+def fun_l21_n937()
+ fun_l22_n666
+end
+
+def fun_l21_n938()
+ fun_l22_n630
+end
+
+def fun_l21_n939()
+ fun_l22_n321
+end
+
+def fun_l21_n940()
+ fun_l22_n634
+end
+
+def fun_l21_n941()
+ fun_l22_n991
+end
+
+def fun_l21_n942()
+ fun_l22_n978
+end
+
+def fun_l21_n943()
+ fun_l22_n583
+end
+
+def fun_l21_n944()
+ fun_l22_n835
+end
+
+def fun_l21_n945()
+ fun_l22_n968
+end
+
+def fun_l21_n946()
+ fun_l22_n88
+end
+
+def fun_l21_n947()
+ fun_l22_n484
+end
+
+def fun_l21_n948()
+ fun_l22_n82
+end
+
+def fun_l21_n949()
+ fun_l22_n343
+end
+
+def fun_l21_n950()
+ fun_l22_n369
+end
+
+def fun_l21_n951()
+ fun_l22_n565
+end
+
+def fun_l21_n952()
+ fun_l22_n307
+end
+
+def fun_l21_n953()
+ fun_l22_n573
+end
+
+def fun_l21_n954()
+ fun_l22_n363
+end
+
+def fun_l21_n955()
+ fun_l22_n853
+end
+
+def fun_l21_n956()
+ fun_l22_n132
+end
+
+def fun_l21_n957()
+ fun_l22_n13
+end
+
+def fun_l21_n958()
+ fun_l22_n819
+end
+
+def fun_l21_n959()
+ fun_l22_n124
+end
+
+def fun_l21_n960()
+ fun_l22_n898
+end
+
+def fun_l21_n961()
+ fun_l22_n942
+end
+
+def fun_l21_n962()
+ fun_l22_n917
+end
+
+def fun_l21_n963()
+ fun_l22_n199
+end
+
+def fun_l21_n964()
+ fun_l22_n651
+end
+
+def fun_l21_n965()
+ fun_l22_n80
+end
+
+def fun_l21_n966()
+ fun_l22_n415
+end
+
+def fun_l21_n967()
+ fun_l22_n230
+end
+
+def fun_l21_n968()
+ fun_l22_n929
+end
+
+def fun_l21_n969()
+ fun_l22_n889
+end
+
+def fun_l21_n970()
+ fun_l22_n620
+end
+
+def fun_l21_n971()
+ fun_l22_n588
+end
+
+def fun_l21_n972()
+ fun_l22_n284
+end
+
+def fun_l21_n973()
+ fun_l22_n767
+end
+
+def fun_l21_n974()
+ fun_l22_n568
+end
+
+def fun_l21_n975()
+ fun_l22_n687
+end
+
+def fun_l21_n976()
+ fun_l22_n640
+end
+
+def fun_l21_n977()
+ fun_l22_n739
+end
+
+def fun_l21_n978()
+ fun_l22_n81
+end
+
+def fun_l21_n979()
+ fun_l22_n216
+end
+
+def fun_l21_n980()
+ fun_l22_n347
+end
+
+def fun_l21_n981()
+ fun_l22_n228
+end
+
+def fun_l21_n982()
+ fun_l22_n947
+end
+
+def fun_l21_n983()
+ fun_l22_n563
+end
+
+def fun_l21_n984()
+ fun_l22_n839
+end
+
+def fun_l21_n985()
+ fun_l22_n759
+end
+
+def fun_l21_n986()
+ fun_l22_n138
+end
+
+def fun_l21_n987()
+ fun_l22_n269
+end
+
+def fun_l21_n988()
+ fun_l22_n239
+end
+
+def fun_l21_n989()
+ fun_l22_n254
+end
+
+def fun_l21_n990()
+ fun_l22_n802
+end
+
+def fun_l21_n991()
+ fun_l22_n368
+end
+
+def fun_l21_n992()
+ fun_l22_n854
+end
+
+def fun_l21_n993()
+ fun_l22_n463
+end
+
+def fun_l21_n994()
+ fun_l22_n722
+end
+
+def fun_l21_n995()
+ fun_l22_n770
+end
+
+def fun_l21_n996()
+ fun_l22_n635
+end
+
+def fun_l21_n997()
+ fun_l22_n207
+end
+
+def fun_l21_n998()
+ fun_l22_n271
+end
+
+def fun_l21_n999()
+ fun_l22_n815
+end
+
+def fun_l22_n0()
+ fun_l23_n781
+end
+
+def fun_l22_n1()
+ fun_l23_n330
+end
+
+def fun_l22_n2()
+ fun_l23_n493
+end
+
+def fun_l22_n3()
+ fun_l23_n513
+end
+
+def fun_l22_n4()
+ fun_l23_n515
+end
+
+def fun_l22_n5()
+ fun_l23_n746
+end
+
+def fun_l22_n6()
+ fun_l23_n739
+end
+
+def fun_l22_n7()
+ fun_l23_n270
+end
+
+def fun_l22_n8()
+ fun_l23_n918
+end
+
+def fun_l22_n9()
+ fun_l23_n425
+end
+
+def fun_l22_n10()
+ fun_l23_n361
+end
+
+def fun_l22_n11()
+ fun_l23_n696
+end
+
+def fun_l22_n12()
+ fun_l23_n344
+end
+
+def fun_l22_n13()
+ fun_l23_n446
+end
+
+def fun_l22_n14()
+ fun_l23_n487
+end
+
+def fun_l22_n15()
+ fun_l23_n94
+end
+
+def fun_l22_n16()
+ fun_l23_n206
+end
+
+def fun_l22_n17()
+ fun_l23_n10
+end
+
+def fun_l22_n18()
+ fun_l23_n221
+end
+
+def fun_l22_n19()
+ fun_l23_n185
+end
+
+def fun_l22_n20()
+ fun_l23_n869
+end
+
+def fun_l22_n21()
+ fun_l23_n788
+end
+
+def fun_l22_n22()
+ fun_l23_n173
+end
+
+def fun_l22_n23()
+ fun_l23_n73
+end
+
+def fun_l22_n24()
+ fun_l23_n486
+end
+
+def fun_l22_n25()
+ fun_l23_n631
+end
+
+def fun_l22_n26()
+ fun_l23_n849
+end
+
+def fun_l22_n27()
+ fun_l23_n429
+end
+
+def fun_l22_n28()
+ fun_l23_n365
+end
+
+def fun_l22_n29()
+ fun_l23_n429
+end
+
+def fun_l22_n30()
+ fun_l23_n411
+end
+
+def fun_l22_n31()
+ fun_l23_n229
+end
+
+def fun_l22_n32()
+ fun_l23_n921
+end
+
+def fun_l22_n33()
+ fun_l23_n705
+end
+
+def fun_l22_n34()
+ fun_l23_n660
+end
+
+def fun_l22_n35()
+ fun_l23_n264
+end
+
+def fun_l22_n36()
+ fun_l23_n395
+end
+
+def fun_l22_n37()
+ fun_l23_n722
+end
+
+def fun_l22_n38()
+ fun_l23_n402
+end
+
+def fun_l22_n39()
+ fun_l23_n686
+end
+
+def fun_l22_n40()
+ fun_l23_n833
+end
+
+def fun_l22_n41()
+ fun_l23_n573
+end
+
+def fun_l22_n42()
+ fun_l23_n299
+end
+
+def fun_l22_n43()
+ fun_l23_n397
+end
+
+def fun_l22_n44()
+ fun_l23_n387
+end
+
+def fun_l22_n45()
+ fun_l23_n385
+end
+
+def fun_l22_n46()
+ fun_l23_n341
+end
+
+def fun_l22_n47()
+ fun_l23_n862
+end
+
+def fun_l22_n48()
+ fun_l23_n109
+end
+
+def fun_l22_n49()
+ fun_l23_n583
+end
+
+def fun_l22_n50()
+ fun_l23_n126
+end
+
+def fun_l22_n51()
+ fun_l23_n563
+end
+
+def fun_l22_n52()
+ fun_l23_n947
+end
+
+def fun_l22_n53()
+ fun_l23_n329
+end
+
+def fun_l22_n54()
+ fun_l23_n903
+end
+
+def fun_l22_n55()
+ fun_l23_n11
+end
+
+def fun_l22_n56()
+ fun_l23_n520
+end
+
+def fun_l22_n57()
+ fun_l23_n815
+end
+
+def fun_l22_n58()
+ fun_l23_n224
+end
+
+def fun_l22_n59()
+ fun_l23_n144
+end
+
+def fun_l22_n60()
+ fun_l23_n513
+end
+
+def fun_l22_n61()
+ fun_l23_n572
+end
+
+def fun_l22_n62()
+ fun_l23_n33
+end
+
+def fun_l22_n63()
+ fun_l23_n39
+end
+
+def fun_l22_n64()
+ fun_l23_n360
+end
+
+def fun_l22_n65()
+ fun_l23_n6
+end
+
+def fun_l22_n66()
+ fun_l23_n244
+end
+
+def fun_l22_n67()
+ fun_l23_n425
+end
+
+def fun_l22_n68()
+ fun_l23_n472
+end
+
+def fun_l22_n69()
+ fun_l23_n88
+end
+
+def fun_l22_n70()
+ fun_l23_n888
+end
+
+def fun_l22_n71()
+ fun_l23_n215
+end
+
+def fun_l22_n72()
+ fun_l23_n408
+end
+
+def fun_l22_n73()
+ fun_l23_n753
+end
+
+def fun_l22_n74()
+ fun_l23_n4
+end
+
+def fun_l22_n75()
+ fun_l23_n623
+end
+
+def fun_l22_n76()
+ fun_l23_n602
+end
+
+def fun_l22_n77()
+ fun_l23_n430
+end
+
+def fun_l22_n78()
+ fun_l23_n223
+end
+
+def fun_l22_n79()
+ fun_l23_n631
+end
+
+def fun_l22_n80()
+ fun_l23_n931
+end
+
+def fun_l22_n81()
+ fun_l23_n84
+end
+
+def fun_l22_n82()
+ fun_l23_n541
+end
+
+def fun_l22_n83()
+ fun_l23_n329
+end
+
+def fun_l22_n84()
+ fun_l23_n174
+end
+
+def fun_l22_n85()
+ fun_l23_n649
+end
+
+def fun_l22_n86()
+ fun_l23_n503
+end
+
+def fun_l22_n87()
+ fun_l23_n336
+end
+
+def fun_l22_n88()
+ fun_l23_n126
+end
+
+def fun_l22_n89()
+ fun_l23_n556
+end
+
+def fun_l22_n90()
+ fun_l23_n793
+end
+
+def fun_l22_n91()
+ fun_l23_n276
+end
+
+def fun_l22_n92()
+ fun_l23_n374
+end
+
+def fun_l22_n93()
+ fun_l23_n638
+end
+
+def fun_l22_n94()
+ fun_l23_n614
+end
+
+def fun_l22_n95()
+ fun_l23_n851
+end
+
+def fun_l22_n96()
+ fun_l23_n422
+end
+
+def fun_l22_n97()
+ fun_l23_n716
+end
+
+def fun_l22_n98()
+ fun_l23_n521
+end
+
+def fun_l22_n99()
+ fun_l23_n484
+end
+
+def fun_l22_n100()
+ fun_l23_n155
+end
+
+def fun_l22_n101()
+ fun_l23_n863
+end
+
+def fun_l22_n102()
+ fun_l23_n5
+end
+
+def fun_l22_n103()
+ fun_l23_n667
+end
+
+def fun_l22_n104()
+ fun_l23_n633
+end
+
+def fun_l22_n105()
+ fun_l23_n392
+end
+
+def fun_l22_n106()
+ fun_l23_n859
+end
+
+def fun_l22_n107()
+ fun_l23_n930
+end
+
+def fun_l22_n108()
+ fun_l23_n858
+end
+
+def fun_l22_n109()
+ fun_l23_n266
+end
+
+def fun_l22_n110()
+ fun_l23_n567
+end
+
+def fun_l22_n111()
+ fun_l23_n116
+end
+
+def fun_l22_n112()
+ fun_l23_n221
+end
+
+def fun_l22_n113()
+ fun_l23_n650
+end
+
+def fun_l22_n114()
+ fun_l23_n309
+end
+
+def fun_l22_n115()
+ fun_l23_n290
+end
+
+def fun_l22_n116()
+ fun_l23_n305
+end
+
+def fun_l22_n117()
+ fun_l23_n655
+end
+
+def fun_l22_n118()
+ fun_l23_n390
+end
+
+def fun_l22_n119()
+ fun_l23_n561
+end
+
+def fun_l22_n120()
+ fun_l23_n977
+end
+
+def fun_l22_n121()
+ fun_l23_n920
+end
+
+def fun_l22_n122()
+ fun_l23_n662
+end
+
+def fun_l22_n123()
+ fun_l23_n453
+end
+
+def fun_l22_n124()
+ fun_l23_n331
+end
+
+def fun_l22_n125()
+ fun_l23_n135
+end
+
+def fun_l22_n126()
+ fun_l23_n822
+end
+
+def fun_l22_n127()
+ fun_l23_n726
+end
+
+def fun_l22_n128()
+ fun_l23_n93
+end
+
+def fun_l22_n129()
+ fun_l23_n309
+end
+
+def fun_l22_n130()
+ fun_l23_n303
+end
+
+def fun_l22_n131()
+ fun_l23_n907
+end
+
+def fun_l22_n132()
+ fun_l23_n616
+end
+
+def fun_l22_n133()
+ fun_l23_n266
+end
+
+def fun_l22_n134()
+ fun_l23_n920
+end
+
+def fun_l22_n135()
+ fun_l23_n972
+end
+
+def fun_l22_n136()
+ fun_l23_n510
+end
+
+def fun_l22_n137()
+ fun_l23_n40
+end
+
+def fun_l22_n138()
+ fun_l23_n598
+end
+
+def fun_l22_n139()
+ fun_l23_n491
+end
+
+def fun_l22_n140()
+ fun_l23_n590
+end
+
+def fun_l22_n141()
+ fun_l23_n400
+end
+
+def fun_l22_n142()
+ fun_l23_n47
+end
+
+def fun_l22_n143()
+ fun_l23_n669
+end
+
+def fun_l22_n144()
+ fun_l23_n471
+end
+
+def fun_l22_n145()
+ fun_l23_n749
+end
+
+def fun_l22_n146()
+ fun_l23_n5
+end
+
+def fun_l22_n147()
+ fun_l23_n895
+end
+
+def fun_l22_n148()
+ fun_l23_n92
+end
+
+def fun_l22_n149()
+ fun_l23_n940
+end
+
+def fun_l22_n150()
+ fun_l23_n254
+end
+
+def fun_l22_n151()
+ fun_l23_n521
+end
+
+def fun_l22_n152()
+ fun_l23_n482
+end
+
+def fun_l22_n153()
+ fun_l23_n576
+end
+
+def fun_l22_n154()
+ fun_l23_n657
+end
+
+def fun_l22_n155()
+ fun_l23_n897
+end
+
+def fun_l22_n156()
+ fun_l23_n679
+end
+
+def fun_l22_n157()
+ fun_l23_n894
+end
+
+def fun_l22_n158()
+ fun_l23_n496
+end
+
+def fun_l22_n159()
+ fun_l23_n575
+end
+
+def fun_l22_n160()
+ fun_l23_n751
+end
+
+def fun_l22_n161()
+ fun_l23_n357
+end
+
+def fun_l22_n162()
+ fun_l23_n665
+end
+
+def fun_l22_n163()
+ fun_l23_n653
+end
+
+def fun_l22_n164()
+ fun_l23_n904
+end
+
+def fun_l22_n165()
+ fun_l23_n127
+end
+
+def fun_l22_n166()
+ fun_l23_n737
+end
+
+def fun_l22_n167()
+ fun_l23_n710
+end
+
+def fun_l22_n168()
+ fun_l23_n285
+end
+
+def fun_l22_n169()
+ fun_l23_n804
+end
+
+def fun_l22_n170()
+ fun_l23_n766
+end
+
+def fun_l22_n171()
+ fun_l23_n442
+end
+
+def fun_l22_n172()
+ fun_l23_n392
+end
+
+def fun_l22_n173()
+ fun_l23_n512
+end
+
+def fun_l22_n174()
+ fun_l23_n752
+end
+
+def fun_l22_n175()
+ fun_l23_n856
+end
+
+def fun_l22_n176()
+ fun_l23_n840
+end
+
+def fun_l22_n177()
+ fun_l23_n445
+end
+
+def fun_l22_n178()
+ fun_l23_n483
+end
+
+def fun_l22_n179()
+ fun_l23_n676
+end
+
+def fun_l22_n180()
+ fun_l23_n619
+end
+
+def fun_l22_n181()
+ fun_l23_n132
+end
+
+def fun_l22_n182()
+ fun_l23_n600
+end
+
+def fun_l22_n183()
+ fun_l23_n399
+end
+
+def fun_l22_n184()
+ fun_l23_n199
+end
+
+def fun_l22_n185()
+ fun_l23_n152
+end
+
+def fun_l22_n186()
+ fun_l23_n848
+end
+
+def fun_l22_n187()
+ fun_l23_n50
+end
+
+def fun_l22_n188()
+ fun_l23_n524
+end
+
+def fun_l22_n189()
+ fun_l23_n472
+end
+
+def fun_l22_n190()
+ fun_l23_n146
+end
+
+def fun_l22_n191()
+ fun_l23_n115
+end
+
+def fun_l22_n192()
+ fun_l23_n701
+end
+
+def fun_l22_n193()
+ fun_l23_n916
+end
+
+def fun_l22_n194()
+ fun_l23_n362
+end
+
+def fun_l22_n195()
+ fun_l23_n546
+end
+
+def fun_l22_n196()
+ fun_l23_n983
+end
+
+def fun_l22_n197()
+ fun_l23_n898
+end
+
+def fun_l22_n198()
+ fun_l23_n93
+end
+
+def fun_l22_n199()
+ fun_l23_n587
+end
+
+def fun_l22_n200()
+ fun_l23_n84
+end
+
+def fun_l22_n201()
+ fun_l23_n919
+end
+
+def fun_l22_n202()
+ fun_l23_n813
+end
+
+def fun_l22_n203()
+ fun_l23_n481
+end
+
+def fun_l22_n204()
+ fun_l23_n806
+end
+
+def fun_l22_n205()
+ fun_l23_n329
+end
+
+def fun_l22_n206()
+ fun_l23_n873
+end
+
+def fun_l22_n207()
+ fun_l23_n922
+end
+
+def fun_l22_n208()
+ fun_l23_n125
+end
+
+def fun_l22_n209()
+ fun_l23_n861
+end
+
+def fun_l22_n210()
+ fun_l23_n50
+end
+
+def fun_l22_n211()
+ fun_l23_n737
+end
+
+def fun_l22_n212()
+ fun_l23_n55
+end
+
+def fun_l22_n213()
+ fun_l23_n594
+end
+
+def fun_l22_n214()
+ fun_l23_n786
+end
+
+def fun_l22_n215()
+ fun_l23_n33
+end
+
+def fun_l22_n216()
+ fun_l23_n332
+end
+
+def fun_l22_n217()
+ fun_l23_n72
+end
+
+def fun_l22_n218()
+ fun_l23_n619
+end
+
+def fun_l22_n219()
+ fun_l23_n994
+end
+
+def fun_l22_n220()
+ fun_l23_n94
+end
+
+def fun_l22_n221()
+ fun_l23_n562
+end
+
+def fun_l22_n222()
+ fun_l23_n742
+end
+
+def fun_l22_n223()
+ fun_l23_n397
+end
+
+def fun_l22_n224()
+ fun_l23_n641
+end
+
+def fun_l22_n225()
+ fun_l23_n233
+end
+
+def fun_l22_n226()
+ fun_l23_n876
+end
+
+def fun_l22_n227()
+ fun_l23_n13
+end
+
+def fun_l22_n228()
+ fun_l23_n524
+end
+
+def fun_l22_n229()
+ fun_l23_n738
+end
+
+def fun_l22_n230()
+ fun_l23_n34
+end
+
+def fun_l22_n231()
+ fun_l23_n391
+end
+
+def fun_l22_n232()
+ fun_l23_n930
+end
+
+def fun_l22_n233()
+ fun_l23_n714
+end
+
+def fun_l22_n234()
+ fun_l23_n755
+end
+
+def fun_l22_n235()
+ fun_l23_n826
+end
+
+def fun_l22_n236()
+ fun_l23_n797
+end
+
+def fun_l22_n237()
+ fun_l23_n890
+end
+
+def fun_l22_n238()
+ fun_l23_n586
+end
+
+def fun_l22_n239()
+ fun_l23_n924
+end
+
+def fun_l22_n240()
+ fun_l23_n704
+end
+
+def fun_l22_n241()
+ fun_l23_n547
+end
+
+def fun_l22_n242()
+ fun_l23_n581
+end
+
+def fun_l22_n243()
+ fun_l23_n402
+end
+
+def fun_l22_n244()
+ fun_l23_n719
+end
+
+def fun_l22_n245()
+ fun_l23_n471
+end
+
+def fun_l22_n246()
+ fun_l23_n750
+end
+
+def fun_l22_n247()
+ fun_l23_n33
+end
+
+def fun_l22_n248()
+ fun_l23_n304
+end
+
+def fun_l22_n249()
+ fun_l23_n847
+end
+
+def fun_l22_n250()
+ fun_l23_n814
+end
+
+def fun_l22_n251()
+ fun_l23_n724
+end
+
+def fun_l22_n252()
+ fun_l23_n105
+end
+
+def fun_l22_n253()
+ fun_l23_n863
+end
+
+def fun_l22_n254()
+ fun_l23_n282
+end
+
+def fun_l22_n255()
+ fun_l23_n586
+end
+
+def fun_l22_n256()
+ fun_l23_n524
+end
+
+def fun_l22_n257()
+ fun_l23_n772
+end
+
+def fun_l22_n258()
+ fun_l23_n641
+end
+
+def fun_l22_n259()
+ fun_l23_n962
+end
+
+def fun_l22_n260()
+ fun_l23_n737
+end
+
+def fun_l22_n261()
+ fun_l23_n941
+end
+
+def fun_l22_n262()
+ fun_l23_n432
+end
+
+def fun_l22_n263()
+ fun_l23_n400
+end
+
+def fun_l22_n264()
+ fun_l23_n19
+end
+
+def fun_l22_n265()
+ fun_l23_n485
+end
+
+def fun_l22_n266()
+ fun_l23_n210
+end
+
+def fun_l22_n267()
+ fun_l23_n961
+end
+
+def fun_l22_n268()
+ fun_l23_n953
+end
+
+def fun_l22_n269()
+ fun_l23_n987
+end
+
+def fun_l22_n270()
+ fun_l23_n855
+end
+
+def fun_l22_n271()
+ fun_l23_n789
+end
+
+def fun_l22_n272()
+ fun_l23_n708
+end
+
+def fun_l22_n273()
+ fun_l23_n645
+end
+
+def fun_l22_n274()
+ fun_l23_n924
+end
+
+def fun_l22_n275()
+ fun_l23_n496
+end
+
+def fun_l22_n276()
+ fun_l23_n763
+end
+
+def fun_l22_n277()
+ fun_l23_n937
+end
+
+def fun_l22_n278()
+ fun_l23_n679
+end
+
+def fun_l22_n279()
+ fun_l23_n678
+end
+
+def fun_l22_n280()
+ fun_l23_n756
+end
+
+def fun_l22_n281()
+ fun_l23_n198
+end
+
+def fun_l22_n282()
+ fun_l23_n377
+end
+
+def fun_l22_n283()
+ fun_l23_n352
+end
+
+def fun_l22_n284()
+ fun_l23_n211
+end
+
+def fun_l22_n285()
+ fun_l23_n137
+end
+
+def fun_l22_n286()
+ fun_l23_n257
+end
+
+def fun_l22_n287()
+ fun_l23_n878
+end
+
+def fun_l22_n288()
+ fun_l23_n182
+end
+
+def fun_l22_n289()
+ fun_l23_n969
+end
+
+def fun_l22_n290()
+ fun_l23_n622
+end
+
+def fun_l22_n291()
+ fun_l23_n473
+end
+
+def fun_l22_n292()
+ fun_l23_n767
+end
+
+def fun_l22_n293()
+ fun_l23_n496
+end
+
+def fun_l22_n294()
+ fun_l23_n463
+end
+
+def fun_l22_n295()
+ fun_l23_n600
+end
+
+def fun_l22_n296()
+ fun_l23_n262
+end
+
+def fun_l22_n297()
+ fun_l23_n353
+end
+
+def fun_l22_n298()
+ fun_l23_n235
+end
+
+def fun_l22_n299()
+ fun_l23_n680
+end
+
+def fun_l22_n300()
+ fun_l23_n169
+end
+
+def fun_l22_n301()
+ fun_l23_n764
+end
+
+def fun_l22_n302()
+ fun_l23_n105
+end
+
+def fun_l22_n303()
+ fun_l23_n616
+end
+
+def fun_l22_n304()
+ fun_l23_n143
+end
+
+def fun_l22_n305()
+ fun_l23_n612
+end
+
+def fun_l22_n306()
+ fun_l23_n30
+end
+
+def fun_l22_n307()
+ fun_l23_n946
+end
+
+def fun_l22_n308()
+ fun_l23_n590
+end
+
+def fun_l22_n309()
+ fun_l23_n374
+end
+
+def fun_l22_n310()
+ fun_l23_n640
+end
+
+def fun_l22_n311()
+ fun_l23_n156
+end
+
+def fun_l22_n312()
+ fun_l23_n689
+end
+
+def fun_l22_n313()
+ fun_l23_n684
+end
+
+def fun_l22_n314()
+ fun_l23_n915
+end
+
+def fun_l22_n315()
+ fun_l23_n536
+end
+
+def fun_l22_n316()
+ fun_l23_n408
+end
+
+def fun_l22_n317()
+ fun_l23_n644
+end
+
+def fun_l22_n318()
+ fun_l23_n401
+end
+
+def fun_l22_n319()
+ fun_l23_n312
+end
+
+def fun_l22_n320()
+ fun_l23_n280
+end
+
+def fun_l22_n321()
+ fun_l23_n901
+end
+
+def fun_l22_n322()
+ fun_l23_n411
+end
+
+def fun_l22_n323()
+ fun_l23_n709
+end
+
+def fun_l22_n324()
+ fun_l23_n829
+end
+
+def fun_l22_n325()
+ fun_l23_n353
+end
+
+def fun_l22_n326()
+ fun_l23_n408
+end
+
+def fun_l22_n327()
+ fun_l23_n786
+end
+
+def fun_l22_n328()
+ fun_l23_n980
+end
+
+def fun_l22_n329()
+ fun_l23_n60
+end
+
+def fun_l22_n330()
+ fun_l23_n367
+end
+
+def fun_l22_n331()
+ fun_l23_n617
+end
+
+def fun_l22_n332()
+ fun_l23_n155
+end
+
+def fun_l22_n333()
+ fun_l23_n537
+end
+
+def fun_l22_n334()
+ fun_l23_n759
+end
+
+def fun_l22_n335()
+ fun_l23_n998
+end
+
+def fun_l22_n336()
+ fun_l23_n361
+end
+
+def fun_l22_n337()
+ fun_l23_n64
+end
+
+def fun_l22_n338()
+ fun_l23_n992
+end
+
+def fun_l22_n339()
+ fun_l23_n312
+end
+
+def fun_l22_n340()
+ fun_l23_n91
+end
+
+def fun_l22_n341()
+ fun_l23_n73
+end
+
+def fun_l22_n342()
+ fun_l23_n443
+end
+
+def fun_l22_n343()
+ fun_l23_n453
+end
+
+def fun_l22_n344()
+ fun_l23_n723
+end
+
+def fun_l22_n345()
+ fun_l23_n429
+end
+
+def fun_l22_n346()
+ fun_l23_n437
+end
+
+def fun_l22_n347()
+ fun_l23_n406
+end
+
+def fun_l22_n348()
+ fun_l23_n110
+end
+
+def fun_l22_n349()
+ fun_l23_n862
+end
+
+def fun_l22_n350()
+ fun_l23_n247
+end
+
+def fun_l22_n351()
+ fun_l23_n367
+end
+
+def fun_l22_n352()
+ fun_l23_n401
+end
+
+def fun_l22_n353()
+ fun_l23_n245
+end
+
+def fun_l22_n354()
+ fun_l23_n777
+end
+
+def fun_l22_n355()
+ fun_l23_n362
+end
+
+def fun_l22_n356()
+ fun_l23_n703
+end
+
+def fun_l22_n357()
+ fun_l23_n627
+end
+
+def fun_l22_n358()
+ fun_l23_n542
+end
+
+def fun_l22_n359()
+ fun_l23_n830
+end
+
+def fun_l22_n360()
+ fun_l23_n508
+end
+
+def fun_l22_n361()
+ fun_l23_n814
+end
+
+def fun_l22_n362()
+ fun_l23_n147
+end
+
+def fun_l22_n363()
+ fun_l23_n581
+end
+
+def fun_l22_n364()
+ fun_l23_n394
+end
+
+def fun_l22_n365()
+ fun_l23_n366
+end
+
+def fun_l22_n366()
+ fun_l23_n723
+end
+
+def fun_l22_n367()
+ fun_l23_n544
+end
+
+def fun_l22_n368()
+ fun_l23_n231
+end
+
+def fun_l22_n369()
+ fun_l23_n727
+end
+
+def fun_l22_n370()
+ fun_l23_n459
+end
+
+def fun_l22_n371()
+ fun_l23_n290
+end
+
+def fun_l22_n372()
+ fun_l23_n901
+end
+
+def fun_l22_n373()
+ fun_l23_n738
+end
+
+def fun_l22_n374()
+ fun_l23_n733
+end
+
+def fun_l22_n375()
+ fun_l23_n85
+end
+
+def fun_l22_n376()
+ fun_l23_n469
+end
+
+def fun_l22_n377()
+ fun_l23_n599
+end
+
+def fun_l22_n378()
+ fun_l23_n78
+end
+
+def fun_l22_n379()
+ fun_l23_n499
+end
+
+def fun_l22_n380()
+ fun_l23_n527
+end
+
+def fun_l22_n381()
+ fun_l23_n185
+end
+
+def fun_l22_n382()
+ fun_l23_n93
+end
+
+def fun_l22_n383()
+ fun_l23_n233
+end
+
+def fun_l22_n384()
+ fun_l23_n292
+end
+
+def fun_l22_n385()
+ fun_l23_n716
+end
+
+def fun_l22_n386()
+ fun_l23_n81
+end
+
+def fun_l22_n387()
+ fun_l23_n740
+end
+
+def fun_l22_n388()
+ fun_l23_n351
+end
+
+def fun_l22_n389()
+ fun_l23_n488
+end
+
+def fun_l22_n390()
+ fun_l23_n631
+end
+
+def fun_l22_n391()
+ fun_l23_n477
+end
+
+def fun_l22_n392()
+ fun_l23_n541
+end
+
+def fun_l22_n393()
+ fun_l23_n816
+end
+
+def fun_l22_n394()
+ fun_l23_n737
+end
+
+def fun_l22_n395()
+ fun_l23_n839
+end
+
+def fun_l22_n396()
+ fun_l23_n249
+end
+
+def fun_l22_n397()
+ fun_l23_n472
+end
+
+def fun_l22_n398()
+ fun_l23_n150
+end
+
+def fun_l22_n399()
+ fun_l23_n13
+end
+
+def fun_l22_n400()
+ fun_l23_n476
+end
+
+def fun_l22_n401()
+ fun_l23_n373
+end
+
+def fun_l22_n402()
+ fun_l23_n879
+end
+
+def fun_l22_n403()
+ fun_l23_n140
+end
+
+def fun_l22_n404()
+ fun_l23_n662
+end
+
+def fun_l22_n405()
+ fun_l23_n935
+end
+
+def fun_l22_n406()
+ fun_l23_n113
+end
+
+def fun_l22_n407()
+ fun_l23_n731
+end
+
+def fun_l22_n408()
+ fun_l23_n488
+end
+
+def fun_l22_n409()
+ fun_l23_n35
+end
+
+def fun_l22_n410()
+ fun_l23_n872
+end
+
+def fun_l22_n411()
+ fun_l23_n651
+end
+
+def fun_l22_n412()
+ fun_l23_n53
+end
+
+def fun_l22_n413()
+ fun_l23_n329
+end
+
+def fun_l22_n414()
+ fun_l23_n215
+end
+
+def fun_l22_n415()
+ fun_l23_n125
+end
+
+def fun_l22_n416()
+ fun_l23_n722
+end
+
+def fun_l22_n417()
+ fun_l23_n102
+end
+
+def fun_l22_n418()
+ fun_l23_n648
+end
+
+def fun_l22_n419()
+ fun_l23_n122
+end
+
+def fun_l22_n420()
+ fun_l23_n998
+end
+
+def fun_l22_n421()
+ fun_l23_n730
+end
+
+def fun_l22_n422()
+ fun_l23_n148
+end
+
+def fun_l22_n423()
+ fun_l23_n773
+end
+
+def fun_l22_n424()
+ fun_l23_n737
+end
+
+def fun_l22_n425()
+ fun_l23_n383
+end
+
+def fun_l22_n426()
+ fun_l23_n423
+end
+
+def fun_l22_n427()
+ fun_l23_n655
+end
+
+def fun_l22_n428()
+ fun_l23_n573
+end
+
+def fun_l22_n429()
+ fun_l23_n717
+end
+
+def fun_l22_n430()
+ fun_l23_n617
+end
+
+def fun_l22_n431()
+ fun_l23_n575
+end
+
+def fun_l22_n432()
+ fun_l23_n62
+end
+
+def fun_l22_n433()
+ fun_l23_n31
+end
+
+def fun_l22_n434()
+ fun_l23_n812
+end
+
+def fun_l22_n435()
+ fun_l23_n332
+end
+
+def fun_l22_n436()
+ fun_l23_n380
+end
+
+def fun_l22_n437()
+ fun_l23_n5
+end
+
+def fun_l22_n438()
+ fun_l23_n668
+end
+
+def fun_l22_n439()
+ fun_l23_n439
+end
+
+def fun_l22_n440()
+ fun_l23_n878
+end
+
+def fun_l22_n441()
+ fun_l23_n974
+end
+
+def fun_l22_n442()
+ fun_l23_n919
+end
+
+def fun_l22_n443()
+ fun_l23_n597
+end
+
+def fun_l22_n444()
+ fun_l23_n894
+end
+
+def fun_l22_n445()
+ fun_l23_n791
+end
+
+def fun_l22_n446()
+ fun_l23_n999
+end
+
+def fun_l22_n447()
+ fun_l23_n427
+end
+
+def fun_l22_n448()
+ fun_l23_n109
+end
+
+def fun_l22_n449()
+ fun_l23_n151
+end
+
+def fun_l22_n450()
+ fun_l23_n870
+end
+
+def fun_l22_n451()
+ fun_l23_n624
+end
+
+def fun_l22_n452()
+ fun_l23_n336
+end
+
+def fun_l22_n453()
+ fun_l23_n891
+end
+
+def fun_l22_n454()
+ fun_l23_n433
+end
+
+def fun_l22_n455()
+ fun_l23_n392
+end
+
+def fun_l22_n456()
+ fun_l23_n593
+end
+
+def fun_l22_n457()
+ fun_l23_n852
+end
+
+def fun_l22_n458()
+ fun_l23_n675
+end
+
+def fun_l22_n459()
+ fun_l23_n589
+end
+
+def fun_l22_n460()
+ fun_l23_n348
+end
+
+def fun_l22_n461()
+ fun_l23_n137
+end
+
+def fun_l22_n462()
+ fun_l23_n551
+end
+
+def fun_l22_n463()
+ fun_l23_n236
+end
+
+def fun_l22_n464()
+ fun_l23_n266
+end
+
+def fun_l22_n465()
+ fun_l23_n622
+end
+
+def fun_l22_n466()
+ fun_l23_n174
+end
+
+def fun_l22_n467()
+ fun_l23_n79
+end
+
+def fun_l22_n468()
+ fun_l23_n189
+end
+
+def fun_l22_n469()
+ fun_l23_n746
+end
+
+def fun_l22_n470()
+ fun_l23_n917
+end
+
+def fun_l22_n471()
+ fun_l23_n344
+end
+
+def fun_l22_n472()
+ fun_l23_n410
+end
+
+def fun_l22_n473()
+ fun_l23_n844
+end
+
+def fun_l22_n474()
+ fun_l23_n998
+end
+
+def fun_l22_n475()
+ fun_l23_n969
+end
+
+def fun_l22_n476()
+ fun_l23_n853
+end
+
+def fun_l22_n477()
+ fun_l23_n691
+end
+
+def fun_l22_n478()
+ fun_l23_n147
+end
+
+def fun_l22_n479()
+ fun_l23_n983
+end
+
+def fun_l22_n480()
+ fun_l23_n384
+end
+
+def fun_l22_n481()
+ fun_l23_n624
+end
+
+def fun_l22_n482()
+ fun_l23_n852
+end
+
+def fun_l22_n483()
+ fun_l23_n403
+end
+
+def fun_l22_n484()
+ fun_l23_n878
+end
+
+def fun_l22_n485()
+ fun_l23_n998
+end
+
+def fun_l22_n486()
+ fun_l23_n435
+end
+
+def fun_l22_n487()
+ fun_l23_n637
+end
+
+def fun_l22_n488()
+ fun_l23_n283
+end
+
+def fun_l22_n489()
+ fun_l23_n444
+end
+
+def fun_l22_n490()
+ fun_l23_n121
+end
+
+def fun_l22_n491()
+ fun_l23_n478
+end
+
+def fun_l22_n492()
+ fun_l23_n856
+end
+
+def fun_l22_n493()
+ fun_l23_n209
+end
+
+def fun_l22_n494()
+ fun_l23_n752
+end
+
+def fun_l22_n495()
+ fun_l23_n146
+end
+
+def fun_l22_n496()
+ fun_l23_n986
+end
+
+def fun_l22_n497()
+ fun_l23_n912
+end
+
+def fun_l22_n498()
+ fun_l23_n302
+end
+
+def fun_l22_n499()
+ fun_l23_n813
+end
+
+def fun_l22_n500()
+ fun_l23_n140
+end
+
+def fun_l22_n501()
+ fun_l23_n968
+end
+
+def fun_l22_n502()
+ fun_l23_n125
+end
+
+def fun_l22_n503()
+ fun_l23_n595
+end
+
+def fun_l22_n504()
+ fun_l23_n95
+end
+
+def fun_l22_n505()
+ fun_l23_n571
+end
+
+def fun_l22_n506()
+ fun_l23_n639
+end
+
+def fun_l22_n507()
+ fun_l23_n481
+end
+
+def fun_l22_n508()
+ fun_l23_n538
+end
+
+def fun_l22_n509()
+ fun_l23_n469
+end
+
+def fun_l22_n510()
+ fun_l23_n563
+end
+
+def fun_l22_n511()
+ fun_l23_n839
+end
+
+def fun_l22_n512()
+ fun_l23_n764
+end
+
+def fun_l22_n513()
+ fun_l23_n960
+end
+
+def fun_l22_n514()
+ fun_l23_n125
+end
+
+def fun_l22_n515()
+ fun_l23_n776
+end
+
+def fun_l22_n516()
+ fun_l23_n78
+end
+
+def fun_l22_n517()
+ fun_l23_n681
+end
+
+def fun_l22_n518()
+ fun_l23_n959
+end
+
+def fun_l22_n519()
+ fun_l23_n565
+end
+
+def fun_l22_n520()
+ fun_l23_n889
+end
+
+def fun_l22_n521()
+ fun_l23_n377
+end
+
+def fun_l22_n522()
+ fun_l23_n744
+end
+
+def fun_l22_n523()
+ fun_l23_n848
+end
+
+def fun_l22_n524()
+ fun_l23_n223
+end
+
+def fun_l22_n525()
+ fun_l23_n81
+end
+
+def fun_l22_n526()
+ fun_l23_n764
+end
+
+def fun_l22_n527()
+ fun_l23_n667
+end
+
+def fun_l22_n528()
+ fun_l23_n657
+end
+
+def fun_l22_n529()
+ fun_l23_n343
+end
+
+def fun_l22_n530()
+ fun_l23_n526
+end
+
+def fun_l22_n531()
+ fun_l23_n570
+end
+
+def fun_l22_n532()
+ fun_l23_n3
+end
+
+def fun_l22_n533()
+ fun_l23_n501
+end
+
+def fun_l22_n534()
+ fun_l23_n571
+end
+
+def fun_l22_n535()
+ fun_l23_n245
+end
+
+def fun_l22_n536()
+ fun_l23_n834
+end
+
+def fun_l22_n537()
+ fun_l23_n454
+end
+
+def fun_l22_n538()
+ fun_l23_n163
+end
+
+def fun_l22_n539()
+ fun_l23_n598
+end
+
+def fun_l22_n540()
+ fun_l23_n277
+end
+
+def fun_l22_n541()
+ fun_l23_n482
+end
+
+def fun_l22_n542()
+ fun_l23_n202
+end
+
+def fun_l22_n543()
+ fun_l23_n525
+end
+
+def fun_l22_n544()
+ fun_l23_n971
+end
+
+def fun_l22_n545()
+ fun_l23_n258
+end
+
+def fun_l22_n546()
+ fun_l23_n220
+end
+
+def fun_l22_n547()
+ fun_l23_n762
+end
+
+def fun_l22_n548()
+ fun_l23_n431
+end
+
+def fun_l22_n549()
+ fun_l23_n171
+end
+
+def fun_l22_n550()
+ fun_l23_n633
+end
+
+def fun_l22_n551()
+ fun_l23_n275
+end
+
+def fun_l22_n552()
+ fun_l23_n665
+end
+
+def fun_l22_n553()
+ fun_l23_n266
+end
+
+def fun_l22_n554()
+ fun_l23_n440
+end
+
+def fun_l22_n555()
+ fun_l23_n463
+end
+
+def fun_l22_n556()
+ fun_l23_n2
+end
+
+def fun_l22_n557()
+ fun_l23_n536
+end
+
+def fun_l22_n558()
+ fun_l23_n323
+end
+
+def fun_l22_n559()
+ fun_l23_n838
+end
+
+def fun_l22_n560()
+ fun_l23_n431
+end
+
+def fun_l22_n561()
+ fun_l23_n920
+end
+
+def fun_l22_n562()
+ fun_l23_n250
+end
+
+def fun_l22_n563()
+ fun_l23_n871
+end
+
+def fun_l22_n564()
+ fun_l23_n324
+end
+
+def fun_l22_n565()
+ fun_l23_n454
+end
+
+def fun_l22_n566()
+ fun_l23_n308
+end
+
+def fun_l22_n567()
+ fun_l23_n629
+end
+
+def fun_l22_n568()
+ fun_l23_n791
+end
+
+def fun_l22_n569()
+ fun_l23_n55
+end
+
+def fun_l22_n570()
+ fun_l23_n791
+end
+
+def fun_l22_n571()
+ fun_l23_n674
+end
+
+def fun_l22_n572()
+ fun_l23_n749
+end
+
+def fun_l22_n573()
+ fun_l23_n106
+end
+
+def fun_l22_n574()
+ fun_l23_n931
+end
+
+def fun_l22_n575()
+ fun_l23_n165
+end
+
+def fun_l22_n576()
+ fun_l23_n649
+end
+
+def fun_l22_n577()
+ fun_l23_n99
+end
+
+def fun_l22_n578()
+ fun_l23_n609
+end
+
+def fun_l22_n579()
+ fun_l23_n165
+end
+
+def fun_l22_n580()
+ fun_l23_n530
+end
+
+def fun_l22_n581()
+ fun_l23_n545
+end
+
+def fun_l22_n582()
+ fun_l23_n453
+end
+
+def fun_l22_n583()
+ fun_l23_n128
+end
+
+def fun_l22_n584()
+ fun_l23_n200
+end
+
+def fun_l22_n585()
+ fun_l23_n712
+end
+
+def fun_l22_n586()
+ fun_l23_n668
+end
+
+def fun_l22_n587()
+ fun_l23_n903
+end
+
+def fun_l22_n588()
+ fun_l23_n704
+end
+
+def fun_l22_n589()
+ fun_l23_n864
+end
+
+def fun_l22_n590()
+ fun_l23_n98
+end
+
+def fun_l22_n591()
+ fun_l23_n674
+end
+
+def fun_l22_n592()
+ fun_l23_n577
+end
+
+def fun_l22_n593()
+ fun_l23_n969
+end
+
+def fun_l22_n594()
+ fun_l23_n634
+end
+
+def fun_l22_n595()
+ fun_l23_n111
+end
+
+def fun_l22_n596()
+ fun_l23_n866
+end
+
+def fun_l22_n597()
+ fun_l23_n353
+end
+
+def fun_l22_n598()
+ fun_l23_n223
+end
+
+def fun_l22_n599()
+ fun_l23_n229
+end
+
+def fun_l22_n600()
+ fun_l23_n958
+end
+
+def fun_l22_n601()
+ fun_l23_n802
+end
+
+def fun_l22_n602()
+ fun_l23_n124
+end
+
+def fun_l22_n603()
+ fun_l23_n945
+end
+
+def fun_l22_n604()
+ fun_l23_n911
+end
+
+def fun_l22_n605()
+ fun_l23_n410
+end
+
+def fun_l22_n606()
+ fun_l23_n754
+end
+
+def fun_l22_n607()
+ fun_l23_n429
+end
+
+def fun_l22_n608()
+ fun_l23_n529
+end
+
+def fun_l22_n609()
+ fun_l23_n15
+end
+
+def fun_l22_n610()
+ fun_l23_n634
+end
+
+def fun_l22_n611()
+ fun_l23_n608
+end
+
+def fun_l22_n612()
+ fun_l23_n509
+end
+
+def fun_l22_n613()
+ fun_l23_n352
+end
+
+def fun_l22_n614()
+ fun_l23_n706
+end
+
+def fun_l22_n615()
+ fun_l23_n172
+end
+
+def fun_l22_n616()
+ fun_l23_n268
+end
+
+def fun_l22_n617()
+ fun_l23_n275
+end
+
+def fun_l22_n618()
+ fun_l23_n265
+end
+
+def fun_l22_n619()
+ fun_l23_n101
+end
+
+def fun_l22_n620()
+ fun_l23_n402
+end
+
+def fun_l22_n621()
+ fun_l23_n953
+end
+
+def fun_l22_n622()
+ fun_l23_n682
+end
+
+def fun_l22_n623()
+ fun_l23_n745
+end
+
+def fun_l22_n624()
+ fun_l23_n343
+end
+
+def fun_l22_n625()
+ fun_l23_n147
+end
+
+def fun_l22_n626()
+ fun_l23_n39
+end
+
+def fun_l22_n627()
+ fun_l23_n483
+end
+
+def fun_l22_n628()
+ fun_l23_n787
+end
+
+def fun_l22_n629()
+ fun_l23_n643
+end
+
+def fun_l22_n630()
+ fun_l23_n40
+end
+
+def fun_l22_n631()
+ fun_l23_n834
+end
+
+def fun_l22_n632()
+ fun_l23_n220
+end
+
+def fun_l22_n633()
+ fun_l23_n293
+end
+
+def fun_l22_n634()
+ fun_l23_n144
+end
+
+def fun_l22_n635()
+ fun_l23_n602
+end
+
+def fun_l22_n636()
+ fun_l23_n248
+end
+
+def fun_l22_n637()
+ fun_l23_n524
+end
+
+def fun_l22_n638()
+ fun_l23_n639
+end
+
+def fun_l22_n639()
+ fun_l23_n217
+end
+
+def fun_l22_n640()
+ fun_l23_n193
+end
+
+def fun_l22_n641()
+ fun_l23_n158
+end
+
+def fun_l22_n642()
+ fun_l23_n894
+end
+
+def fun_l22_n643()
+ fun_l23_n189
+end
+
+def fun_l22_n644()
+ fun_l23_n877
+end
+
+def fun_l22_n645()
+ fun_l23_n299
+end
+
+def fun_l22_n646()
+ fun_l23_n71
+end
+
+def fun_l22_n647()
+ fun_l23_n290
+end
+
+def fun_l22_n648()
+ fun_l23_n557
+end
+
+def fun_l22_n649()
+ fun_l23_n151
+end
+
+def fun_l22_n650()
+ fun_l23_n297
+end
+
+def fun_l22_n651()
+ fun_l23_n991
+end
+
+def fun_l22_n652()
+ fun_l23_n11
+end
+
+def fun_l22_n653()
+ fun_l23_n465
+end
+
+def fun_l22_n654()
+ fun_l23_n802
+end
+
+def fun_l22_n655()
+ fun_l23_n778
+end
+
+def fun_l22_n656()
+ fun_l23_n877
+end
+
+def fun_l22_n657()
+ fun_l23_n773
+end
+
+def fun_l22_n658()
+ fun_l23_n385
+end
+
+def fun_l22_n659()
+ fun_l23_n151
+end
+
+def fun_l22_n660()
+ fun_l23_n553
+end
+
+def fun_l22_n661()
+ fun_l23_n626
+end
+
+def fun_l22_n662()
+ fun_l23_n715
+end
+
+def fun_l22_n663()
+ fun_l23_n675
+end
+
+def fun_l22_n664()
+ fun_l23_n884
+end
+
+def fun_l22_n665()
+ fun_l23_n875
+end
+
+def fun_l22_n666()
+ fun_l23_n510
+end
+
+def fun_l22_n667()
+ fun_l23_n727
+end
+
+def fun_l22_n668()
+ fun_l23_n530
+end
+
+def fun_l22_n669()
+ fun_l23_n869
+end
+
+def fun_l22_n670()
+ fun_l23_n385
+end
+
+def fun_l22_n671()
+ fun_l23_n66
+end
+
+def fun_l22_n672()
+ fun_l23_n335
+end
+
+def fun_l22_n673()
+ fun_l23_n287
+end
+
+def fun_l22_n674()
+ fun_l23_n426
+end
+
+def fun_l22_n675()
+ fun_l23_n657
+end
+
+def fun_l22_n676()
+ fun_l23_n411
+end
+
+def fun_l22_n677()
+ fun_l23_n982
+end
+
+def fun_l22_n678()
+ fun_l23_n747
+end
+
+def fun_l22_n679()
+ fun_l23_n305
+end
+
+def fun_l22_n680()
+ fun_l23_n767
+end
+
+def fun_l22_n681()
+ fun_l23_n177
+end
+
+def fun_l22_n682()
+ fun_l23_n115
+end
+
+def fun_l22_n683()
+ fun_l23_n625
+end
+
+def fun_l22_n684()
+ fun_l23_n154
+end
+
+def fun_l22_n685()
+ fun_l23_n871
+end
+
+def fun_l22_n686()
+ fun_l23_n921
+end
+
+def fun_l22_n687()
+ fun_l23_n194
+end
+
+def fun_l22_n688()
+ fun_l23_n12
+end
+
+def fun_l22_n689()
+ fun_l23_n464
+end
+
+def fun_l22_n690()
+ fun_l23_n44
+end
+
+def fun_l22_n691()
+ fun_l23_n265
+end
+
+def fun_l22_n692()
+ fun_l23_n256
+end
+
+def fun_l22_n693()
+ fun_l23_n937
+end
+
+def fun_l22_n694()
+ fun_l23_n656
+end
+
+def fun_l22_n695()
+ fun_l23_n986
+end
+
+def fun_l22_n696()
+ fun_l23_n774
+end
+
+def fun_l22_n697()
+ fun_l23_n907
+end
+
+def fun_l22_n698()
+ fun_l23_n763
+end
+
+def fun_l22_n699()
+ fun_l23_n290
+end
+
+def fun_l22_n700()
+ fun_l23_n121
+end
+
+def fun_l22_n701()
+ fun_l23_n605
+end
+
+def fun_l22_n702()
+ fun_l23_n415
+end
+
+def fun_l22_n703()
+ fun_l23_n431
+end
+
+def fun_l22_n704()
+ fun_l23_n65
+end
+
+def fun_l22_n705()
+ fun_l23_n997
+end
+
+def fun_l22_n706()
+ fun_l23_n859
+end
+
+def fun_l22_n707()
+ fun_l23_n768
+end
+
+def fun_l22_n708()
+ fun_l23_n570
+end
+
+def fun_l22_n709()
+ fun_l23_n458
+end
+
+def fun_l22_n710()
+ fun_l23_n964
+end
+
+def fun_l22_n711()
+ fun_l23_n484
+end
+
+def fun_l22_n712()
+ fun_l23_n440
+end
+
+def fun_l22_n713()
+ fun_l23_n133
+end
+
+def fun_l22_n714()
+ fun_l23_n789
+end
+
+def fun_l22_n715()
+ fun_l23_n176
+end
+
+def fun_l22_n716()
+ fun_l23_n380
+end
+
+def fun_l22_n717()
+ fun_l23_n115
+end
+
+def fun_l22_n718()
+ fun_l23_n652
+end
+
+def fun_l22_n719()
+ fun_l23_n210
+end
+
+def fun_l22_n720()
+ fun_l23_n347
+end
+
+def fun_l22_n721()
+ fun_l23_n72
+end
+
+def fun_l22_n722()
+ fun_l23_n426
+end
+
+def fun_l22_n723()
+ fun_l23_n123
+end
+
+def fun_l22_n724()
+ fun_l23_n321
+end
+
+def fun_l22_n725()
+ fun_l23_n582
+end
+
+def fun_l22_n726()
+ fun_l23_n434
+end
+
+def fun_l22_n727()
+ fun_l23_n543
+end
+
+def fun_l22_n728()
+ fun_l23_n794
+end
+
+def fun_l22_n729()
+ fun_l23_n474
+end
+
+def fun_l22_n730()
+ fun_l23_n412
+end
+
+def fun_l22_n731()
+ fun_l23_n898
+end
+
+def fun_l22_n732()
+ fun_l23_n833
+end
+
+def fun_l22_n733()
+ fun_l23_n77
+end
+
+def fun_l22_n734()
+ fun_l23_n728
+end
+
+def fun_l22_n735()
+ fun_l23_n397
+end
+
+def fun_l22_n736()
+ fun_l23_n40
+end
+
+def fun_l22_n737()
+ fun_l23_n501
+end
+
+def fun_l22_n738()
+ fun_l23_n817
+end
+
+def fun_l22_n739()
+ fun_l23_n792
+end
+
+def fun_l22_n740()
+ fun_l23_n435
+end
+
+def fun_l22_n741()
+ fun_l23_n264
+end
+
+def fun_l22_n742()
+ fun_l23_n285
+end
+
+def fun_l22_n743()
+ fun_l23_n756
+end
+
+def fun_l22_n744()
+ fun_l23_n836
+end
+
+def fun_l22_n745()
+ fun_l23_n179
+end
+
+def fun_l22_n746()
+ fun_l23_n375
+end
+
+def fun_l22_n747()
+ fun_l23_n631
+end
+
+def fun_l22_n748()
+ fun_l23_n232
+end
+
+def fun_l22_n749()
+ fun_l23_n215
+end
+
+def fun_l22_n750()
+ fun_l23_n118
+end
+
+def fun_l22_n751()
+ fun_l23_n721
+end
+
+def fun_l22_n752()
+ fun_l23_n378
+end
+
+def fun_l22_n753()
+ fun_l23_n613
+end
+
+def fun_l22_n754()
+ fun_l23_n368
+end
+
+def fun_l22_n755()
+ fun_l23_n748
+end
+
+def fun_l22_n756()
+ fun_l23_n0
+end
+
+def fun_l22_n757()
+ fun_l23_n90
+end
+
+def fun_l22_n758()
+ fun_l23_n895
+end
+
+def fun_l22_n759()
+ fun_l23_n0
+end
+
+def fun_l22_n760()
+ fun_l23_n486
+end
+
+def fun_l22_n761()
+ fun_l23_n568
+end
+
+def fun_l22_n762()
+ fun_l23_n525
+end
+
+def fun_l22_n763()
+ fun_l23_n106
+end
+
+def fun_l22_n764()
+ fun_l23_n607
+end
+
+def fun_l22_n765()
+ fun_l23_n729
+end
+
+def fun_l22_n766()
+ fun_l23_n781
+end
+
+def fun_l22_n767()
+ fun_l23_n79
+end
+
+def fun_l22_n768()
+ fun_l23_n313
+end
+
+def fun_l22_n769()
+ fun_l23_n764
+end
+
+def fun_l22_n770()
+ fun_l23_n348
+end
+
+def fun_l22_n771()
+ fun_l23_n809
+end
+
+def fun_l22_n772()
+ fun_l23_n891
+end
+
+def fun_l22_n773()
+ fun_l23_n806
+end
+
+def fun_l22_n774()
+ fun_l23_n173
+end
+
+def fun_l22_n775()
+ fun_l23_n960
+end
+
+def fun_l22_n776()
+ fun_l23_n186
+end
+
+def fun_l22_n777()
+ fun_l23_n863
+end
+
+def fun_l22_n778()
+ fun_l23_n860
+end
+
+def fun_l22_n779()
+ fun_l23_n122
+end
+
+def fun_l22_n780()
+ fun_l23_n114
+end
+
+def fun_l22_n781()
+ fun_l23_n910
+end
+
+def fun_l22_n782()
+ fun_l23_n20
+end
+
+def fun_l22_n783()
+ fun_l23_n384
+end
+
+def fun_l22_n784()
+ fun_l23_n56
+end
+
+def fun_l22_n785()
+ fun_l23_n833
+end
+
+def fun_l22_n786()
+ fun_l23_n31
+end
+
+def fun_l22_n787()
+ fun_l23_n679
+end
+
+def fun_l22_n788()
+ fun_l23_n8
+end
+
+def fun_l22_n789()
+ fun_l23_n425
+end
+
+def fun_l22_n790()
+ fun_l23_n615
+end
+
+def fun_l22_n791()
+ fun_l23_n220
+end
+
+def fun_l22_n792()
+ fun_l23_n977
+end
+
+def fun_l22_n793()
+ fun_l23_n913
+end
+
+def fun_l22_n794()
+ fun_l23_n714
+end
+
+def fun_l22_n795()
+ fun_l23_n885
+end
+
+def fun_l22_n796()
+ fun_l23_n289
+end
+
+def fun_l22_n797()
+ fun_l23_n205
+end
+
+def fun_l22_n798()
+ fun_l23_n826
+end
+
+def fun_l22_n799()
+ fun_l23_n335
+end
+
+def fun_l22_n800()
+ fun_l23_n754
+end
+
+def fun_l22_n801()
+ fun_l23_n588
+end
+
+def fun_l22_n802()
+ fun_l23_n689
+end
+
+def fun_l22_n803()
+ fun_l23_n731
+end
+
+def fun_l22_n804()
+ fun_l23_n962
+end
+
+def fun_l22_n805()
+ fun_l23_n283
+end
+
+def fun_l22_n806()
+ fun_l23_n692
+end
+
+def fun_l22_n807()
+ fun_l23_n554
+end
+
+def fun_l22_n808()
+ fun_l23_n365
+end
+
+def fun_l22_n809()
+ fun_l23_n684
+end
+
+def fun_l22_n810()
+ fun_l23_n848
+end
+
+def fun_l22_n811()
+ fun_l23_n283
+end
+
+def fun_l22_n812()
+ fun_l23_n378
+end
+
+def fun_l22_n813()
+ fun_l23_n83
+end
+
+def fun_l22_n814()
+ fun_l23_n260
+end
+
+def fun_l22_n815()
+ fun_l23_n382
+end
+
+def fun_l22_n816()
+ fun_l23_n701
+end
+
+def fun_l22_n817()
+ fun_l23_n177
+end
+
+def fun_l22_n818()
+ fun_l23_n703
+end
+
+def fun_l22_n819()
+ fun_l23_n105
+end
+
+def fun_l22_n820()
+ fun_l23_n874
+end
+
+def fun_l22_n821()
+ fun_l23_n952
+end
+
+def fun_l22_n822()
+ fun_l23_n37
+end
+
+def fun_l22_n823()
+ fun_l23_n478
+end
+
+def fun_l22_n824()
+ fun_l23_n164
+end
+
+def fun_l22_n825()
+ fun_l23_n505
+end
+
+def fun_l22_n826()
+ fun_l23_n353
+end
+
+def fun_l22_n827()
+ fun_l23_n799
+end
+
+def fun_l22_n828()
+ fun_l23_n330
+end
+
+def fun_l22_n829()
+ fun_l23_n979
+end
+
+def fun_l22_n830()
+ fun_l23_n842
+end
+
+def fun_l22_n831()
+ fun_l23_n912
+end
+
+def fun_l22_n832()
+ fun_l23_n579
+end
+
+def fun_l22_n833()
+ fun_l23_n123
+end
+
+def fun_l22_n834()
+ fun_l23_n864
+end
+
+def fun_l22_n835()
+ fun_l23_n369
+end
+
+def fun_l22_n836()
+ fun_l23_n145
+end
+
+def fun_l22_n837()
+ fun_l23_n414
+end
+
+def fun_l22_n838()
+ fun_l23_n261
+end
+
+def fun_l22_n839()
+ fun_l23_n88
+end
+
+def fun_l22_n840()
+ fun_l23_n427
+end
+
+def fun_l22_n841()
+ fun_l23_n847
+end
+
+def fun_l22_n842()
+ fun_l23_n734
+end
+
+def fun_l22_n843()
+ fun_l23_n895
+end
+
+def fun_l22_n844()
+ fun_l23_n765
+end
+
+def fun_l22_n845()
+ fun_l23_n647
+end
+
+def fun_l22_n846()
+ fun_l23_n862
+end
+
+def fun_l22_n847()
+ fun_l23_n360
+end
+
+def fun_l22_n848()
+ fun_l23_n922
+end
+
+def fun_l22_n849()
+ fun_l23_n914
+end
+
+def fun_l22_n850()
+ fun_l23_n408
+end
+
+def fun_l22_n851()
+ fun_l23_n248
+end
+
+def fun_l22_n852()
+ fun_l23_n812
+end
+
+def fun_l22_n853()
+ fun_l23_n288
+end
+
+def fun_l22_n854()
+ fun_l23_n885
+end
+
+def fun_l22_n855()
+ fun_l23_n164
+end
+
+def fun_l22_n856()
+ fun_l23_n231
+end
+
+def fun_l22_n857()
+ fun_l23_n428
+end
+
+def fun_l22_n858()
+ fun_l23_n527
+end
+
+def fun_l22_n859()
+ fun_l23_n419
+end
+
+def fun_l22_n860()
+ fun_l23_n348
+end
+
+def fun_l22_n861()
+ fun_l23_n580
+end
+
+def fun_l22_n862()
+ fun_l23_n437
+end
+
+def fun_l22_n863()
+ fun_l23_n486
+end
+
+def fun_l22_n864()
+ fun_l23_n2
+end
+
+def fun_l22_n865()
+ fun_l23_n733
+end
+
+def fun_l22_n866()
+ fun_l23_n50
+end
+
+def fun_l22_n867()
+ fun_l23_n391
+end
+
+def fun_l22_n868()
+ fun_l23_n451
+end
+
+def fun_l22_n869()
+ fun_l23_n86
+end
+
+def fun_l22_n870()
+ fun_l23_n426
+end
+
+def fun_l22_n871()
+ fun_l23_n279
+end
+
+def fun_l22_n872()
+ fun_l23_n41
+end
+
+def fun_l22_n873()
+ fun_l23_n241
+end
+
+def fun_l22_n874()
+ fun_l23_n601
+end
+
+def fun_l22_n875()
+ fun_l23_n187
+end
+
+def fun_l22_n876()
+ fun_l23_n98
+end
+
+def fun_l22_n877()
+ fun_l23_n145
+end
+
+def fun_l22_n878()
+ fun_l23_n327
+end
+
+def fun_l22_n879()
+ fun_l23_n928
+end
+
+def fun_l22_n880()
+ fun_l23_n666
+end
+
+def fun_l22_n881()
+ fun_l23_n152
+end
+
+def fun_l22_n882()
+ fun_l23_n930
+end
+
+def fun_l22_n883()
+ fun_l23_n842
+end
+
+def fun_l22_n884()
+ fun_l23_n865
+end
+
+def fun_l22_n885()
+ fun_l23_n16
+end
+
+def fun_l22_n886()
+ fun_l23_n402
+end
+
+def fun_l22_n887()
+ fun_l23_n711
+end
+
+def fun_l22_n888()
+ fun_l23_n206
+end
+
+def fun_l22_n889()
+ fun_l23_n991
+end
+
+def fun_l22_n890()
+ fun_l23_n852
+end
+
+def fun_l22_n891()
+ fun_l23_n602
+end
+
+def fun_l22_n892()
+ fun_l23_n998
+end
+
+def fun_l22_n893()
+ fun_l23_n740
+end
+
+def fun_l22_n894()
+ fun_l23_n643
+end
+
+def fun_l22_n895()
+ fun_l23_n872
+end
+
+def fun_l22_n896()
+ fun_l23_n689
+end
+
+def fun_l22_n897()
+ fun_l23_n119
+end
+
+def fun_l22_n898()
+ fun_l23_n230
+end
+
+def fun_l22_n899()
+ fun_l23_n345
+end
+
+def fun_l22_n900()
+ fun_l23_n805
+end
+
+def fun_l22_n901()
+ fun_l23_n850
+end
+
+def fun_l22_n902()
+ fun_l23_n930
+end
+
+def fun_l22_n903()
+ fun_l23_n652
+end
+
+def fun_l22_n904()
+ fun_l23_n772
+end
+
+def fun_l22_n905()
+ fun_l23_n219
+end
+
+def fun_l22_n906()
+ fun_l23_n592
+end
+
+def fun_l22_n907()
+ fun_l23_n177
+end
+
+def fun_l22_n908()
+ fun_l23_n552
+end
+
+def fun_l22_n909()
+ fun_l23_n334
+end
+
+def fun_l22_n910()
+ fun_l23_n764
+end
+
+def fun_l22_n911()
+ fun_l23_n482
+end
+
+def fun_l22_n912()
+ fun_l23_n73
+end
+
+def fun_l22_n913()
+ fun_l23_n854
+end
+
+def fun_l22_n914()
+ fun_l23_n215
+end
+
+def fun_l22_n915()
+ fun_l23_n736
+end
+
+def fun_l22_n916()
+ fun_l23_n91
+end
+
+def fun_l22_n917()
+ fun_l23_n506
+end
+
+def fun_l22_n918()
+ fun_l23_n775
+end
+
+def fun_l22_n919()
+ fun_l23_n171
+end
+
+def fun_l22_n920()
+ fun_l23_n414
+end
+
+def fun_l22_n921()
+ fun_l23_n185
+end
+
+def fun_l22_n922()
+ fun_l23_n190
+end
+
+def fun_l22_n923()
+ fun_l23_n696
+end
+
+def fun_l22_n924()
+ fun_l23_n175
+end
+
+def fun_l22_n925()
+ fun_l23_n29
+end
+
+def fun_l22_n926()
+ fun_l23_n729
+end
+
+def fun_l22_n927()
+ fun_l23_n279
+end
+
+def fun_l22_n928()
+ fun_l23_n2
+end
+
+def fun_l22_n929()
+ fun_l23_n44
+end
+
+def fun_l22_n930()
+ fun_l23_n399
+end
+
+def fun_l22_n931()
+ fun_l23_n957
+end
+
+def fun_l22_n932()
+ fun_l23_n513
+end
+
+def fun_l22_n933()
+ fun_l23_n607
+end
+
+def fun_l22_n934()
+ fun_l23_n488
+end
+
+def fun_l22_n935()
+ fun_l23_n308
+end
+
+def fun_l22_n936()
+ fun_l23_n959
+end
+
+def fun_l22_n937()
+ fun_l23_n373
+end
+
+def fun_l22_n938()
+ fun_l23_n759
+end
+
+def fun_l22_n939()
+ fun_l23_n985
+end
+
+def fun_l22_n940()
+ fun_l23_n971
+end
+
+def fun_l22_n941()
+ fun_l23_n493
+end
+
+def fun_l22_n942()
+ fun_l23_n884
+end
+
+def fun_l22_n943()
+ fun_l23_n636
+end
+
+def fun_l22_n944()
+ fun_l23_n423
+end
+
+def fun_l22_n945()
+ fun_l23_n406
+end
+
+def fun_l22_n946()
+ fun_l23_n92
+end
+
+def fun_l22_n947()
+ fun_l23_n11
+end
+
+def fun_l22_n948()
+ fun_l23_n112
+end
+
+def fun_l22_n949()
+ fun_l23_n489
+end
+
+def fun_l22_n950()
+ fun_l23_n829
+end
+
+def fun_l22_n951()
+ fun_l23_n438
+end
+
+def fun_l22_n952()
+ fun_l23_n622
+end
+
+def fun_l22_n953()
+ fun_l23_n133
+end
+
+def fun_l22_n954()
+ fun_l23_n734
+end
+
+def fun_l22_n955()
+ fun_l23_n745
+end
+
+def fun_l22_n956()
+ fun_l23_n743
+end
+
+def fun_l22_n957()
+ fun_l23_n299
+end
+
+def fun_l22_n958()
+ fun_l23_n952
+end
+
+def fun_l22_n959()
+ fun_l23_n841
+end
+
+def fun_l22_n960()
+ fun_l23_n317
+end
+
+def fun_l22_n961()
+ fun_l23_n506
+end
+
+def fun_l22_n962()
+ fun_l23_n823
+end
+
+def fun_l22_n963()
+ fun_l23_n330
+end
+
+def fun_l22_n964()
+ fun_l23_n899
+end
+
+def fun_l22_n965()
+ fun_l23_n994
+end
+
+def fun_l22_n966()
+ fun_l23_n625
+end
+
+def fun_l22_n967()
+ fun_l23_n74
+end
+
+def fun_l22_n968()
+ fun_l23_n911
+end
+
+def fun_l22_n969()
+ fun_l23_n215
+end
+
+def fun_l22_n970()
+ fun_l23_n845
+end
+
+def fun_l22_n971()
+ fun_l23_n813
+end
+
+def fun_l22_n972()
+ fun_l23_n784
+end
+
+def fun_l22_n973()
+ fun_l23_n727
+end
+
+def fun_l22_n974()
+ fun_l23_n62
+end
+
+def fun_l22_n975()
+ fun_l23_n790
+end
+
+def fun_l22_n976()
+ fun_l23_n918
+end
+
+def fun_l22_n977()
+ fun_l23_n658
+end
+
+def fun_l22_n978()
+ fun_l23_n621
+end
+
+def fun_l22_n979()
+ fun_l23_n731
+end
+
+def fun_l22_n980()
+ fun_l23_n728
+end
+
+def fun_l22_n981()
+ fun_l23_n558
+end
+
+def fun_l22_n982()
+ fun_l23_n501
+end
+
+def fun_l22_n983()
+ fun_l23_n794
+end
+
+def fun_l22_n984()
+ fun_l23_n162
+end
+
+def fun_l22_n985()
+ fun_l23_n700
+end
+
+def fun_l22_n986()
+ fun_l23_n875
+end
+
+def fun_l22_n987()
+ fun_l23_n58
+end
+
+def fun_l22_n988()
+ fun_l23_n55
+end
+
+def fun_l22_n989()
+ fun_l23_n491
+end
+
+def fun_l22_n990()
+ fun_l23_n613
+end
+
+def fun_l22_n991()
+ fun_l23_n587
+end
+
+def fun_l22_n992()
+ fun_l23_n311
+end
+
+def fun_l22_n993()
+ fun_l23_n305
+end
+
+def fun_l22_n994()
+ fun_l23_n348
+end
+
+def fun_l22_n995()
+ fun_l23_n679
+end
+
+def fun_l22_n996()
+ fun_l23_n245
+end
+
+def fun_l22_n997()
+ fun_l23_n419
+end
+
+def fun_l22_n998()
+ fun_l23_n456
+end
+
+def fun_l22_n999()
+ fun_l23_n146
+end
+
+def fun_l23_n0()
+ fun_l24_n409
+end
+
+def fun_l23_n1()
+ fun_l24_n825
+end
+
+def fun_l23_n2()
+ fun_l24_n349
+end
+
+def fun_l23_n3()
+ fun_l24_n560
+end
+
+def fun_l23_n4()
+ fun_l24_n949
+end
+
+def fun_l23_n5()
+ fun_l24_n108
+end
+
+def fun_l23_n6()
+ fun_l24_n149
+end
+
+def fun_l23_n7()
+ fun_l24_n224
+end
+
+def fun_l23_n8()
+ fun_l24_n418
+end
+
+def fun_l23_n9()
+ fun_l24_n819
+end
+
+def fun_l23_n10()
+ fun_l24_n269
+end
+
+def fun_l23_n11()
+ fun_l24_n158
+end
+
+def fun_l23_n12()
+ fun_l24_n487
+end
+
+def fun_l23_n13()
+ fun_l24_n561
+end
+
+def fun_l23_n14()
+ fun_l24_n292
+end
+
+def fun_l23_n15()
+ fun_l24_n996
+end
+
+def fun_l23_n16()
+ fun_l24_n399
+end
+
+def fun_l23_n17()
+ fun_l24_n585
+end
+
+def fun_l23_n18()
+ fun_l24_n691
+end
+
+def fun_l23_n19()
+ fun_l24_n884
+end
+
+def fun_l23_n20()
+ fun_l24_n933
+end
+
+def fun_l23_n21()
+ fun_l24_n139
+end
+
+def fun_l23_n22()
+ fun_l24_n770
+end
+
+def fun_l23_n23()
+ fun_l24_n894
+end
+
+def fun_l23_n24()
+ fun_l24_n418
+end
+
+def fun_l23_n25()
+ fun_l24_n695
+end
+
+def fun_l23_n26()
+ fun_l24_n800
+end
+
+def fun_l23_n27()
+ fun_l24_n580
+end
+
+def fun_l23_n28()
+ fun_l24_n1
+end
+
+def fun_l23_n29()
+ fun_l24_n121
+end
+
+def fun_l23_n30()
+ fun_l24_n757
+end
+
+def fun_l23_n31()
+ fun_l24_n461
+end
+
+def fun_l23_n32()
+ fun_l24_n534
+end
+
+def fun_l23_n33()
+ fun_l24_n795
+end
+
+def fun_l23_n34()
+ fun_l24_n286
+end
+
+def fun_l23_n35()
+ fun_l24_n200
+end
+
+def fun_l23_n36()
+ fun_l24_n513
+end
+
+def fun_l23_n37()
+ fun_l24_n340
+end
+
+def fun_l23_n38()
+ fun_l24_n385
+end
+
+def fun_l23_n39()
+ fun_l24_n432
+end
+
+def fun_l23_n40()
+ fun_l24_n990
+end
+
+def fun_l23_n41()
+ fun_l24_n966
+end
+
+def fun_l23_n42()
+ fun_l24_n237
+end
+
+def fun_l23_n43()
+ fun_l24_n249
+end
+
+def fun_l23_n44()
+ fun_l24_n182
+end
+
+def fun_l23_n45()
+ fun_l24_n718
+end
+
+def fun_l23_n46()
+ fun_l24_n902
+end
+
+def fun_l23_n47()
+ fun_l24_n963
+end
+
+def fun_l23_n48()
+ fun_l24_n337
+end
+
+def fun_l23_n49()
+ fun_l24_n615
+end
+
+def fun_l23_n50()
+ fun_l24_n729
+end
+
+def fun_l23_n51()
+ fun_l24_n240
+end
+
+def fun_l23_n52()
+ fun_l24_n309
+end
+
+def fun_l23_n53()
+ fun_l24_n697
+end
+
+def fun_l23_n54()
+ fun_l24_n260
+end
+
+def fun_l23_n55()
+ fun_l24_n11
+end
+
+def fun_l23_n56()
+ fun_l24_n630
+end
+
+def fun_l23_n57()
+ fun_l24_n983
+end
+
+def fun_l23_n58()
+ fun_l24_n678
+end
+
+def fun_l23_n59()
+ fun_l24_n95
+end
+
+def fun_l23_n60()
+ fun_l24_n63
+end
+
+def fun_l23_n61()
+ fun_l24_n43
+end
+
+def fun_l23_n62()
+ fun_l24_n679
+end
+
+def fun_l23_n63()
+ fun_l24_n671
+end
+
+def fun_l23_n64()
+ fun_l24_n377
+end
+
+def fun_l23_n65()
+ fun_l24_n939
+end
+
+def fun_l23_n66()
+ fun_l24_n3
+end
+
+def fun_l23_n67()
+ fun_l24_n230
+end
+
+def fun_l23_n68()
+ fun_l24_n622
+end
+
+def fun_l23_n69()
+ fun_l24_n339
+end
+
+def fun_l23_n70()
+ fun_l24_n736
+end
+
+def fun_l23_n71()
+ fun_l24_n116
+end
+
+def fun_l23_n72()
+ fun_l24_n373
+end
+
+def fun_l23_n73()
+ fun_l24_n891
+end
+
+def fun_l23_n74()
+ fun_l24_n954
+end
+
+def fun_l23_n75()
+ fun_l24_n967
+end
+
+def fun_l23_n76()
+ fun_l24_n205
+end
+
+def fun_l23_n77()
+ fun_l24_n802
+end
+
+def fun_l23_n78()
+ fun_l24_n480
+end
+
+def fun_l23_n79()
+ fun_l24_n935
+end
+
+def fun_l23_n80()
+ fun_l24_n84
+end
+
+def fun_l23_n81()
+ fun_l24_n40
+end
+
+def fun_l23_n82()
+ fun_l24_n559
+end
+
+def fun_l23_n83()
+ fun_l24_n16
+end
+
+def fun_l23_n84()
+ fun_l24_n494
+end
+
+def fun_l23_n85()
+ fun_l24_n580
+end
+
+def fun_l23_n86()
+ fun_l24_n72
+end
+
+def fun_l23_n87()
+ fun_l24_n33
+end
+
+def fun_l23_n88()
+ fun_l24_n742
+end
+
+def fun_l23_n89()
+ fun_l24_n10
+end
+
+def fun_l23_n90()
+ fun_l24_n33
+end
+
+def fun_l23_n91()
+ fun_l24_n306
+end
+
+def fun_l23_n92()
+ fun_l24_n960
+end
+
+def fun_l23_n93()
+ fun_l24_n573
+end
+
+def fun_l23_n94()
+ fun_l24_n145
+end
+
+def fun_l23_n95()
+ fun_l24_n730
+end
+
+def fun_l23_n96()
+ fun_l24_n703
+end
+
+def fun_l23_n97()
+ fun_l24_n772
+end
+
+def fun_l23_n98()
+ fun_l24_n664
+end
+
+def fun_l23_n99()
+ fun_l24_n582
+end
+
+def fun_l23_n100()
+ fun_l24_n144
+end
+
+def fun_l23_n101()
+ fun_l24_n950
+end
+
+def fun_l23_n102()
+ fun_l24_n449
+end
+
+def fun_l23_n103()
+ fun_l24_n416
+end
+
+def fun_l23_n104()
+ fun_l24_n453
+end
+
+def fun_l23_n105()
+ fun_l24_n159
+end
+
+def fun_l23_n106()
+ fun_l24_n483
+end
+
+def fun_l23_n107()
+ fun_l24_n69
+end
+
+def fun_l23_n108()
+ fun_l24_n142
+end
+
+def fun_l23_n109()
+ fun_l24_n968
+end
+
+def fun_l23_n110()
+ fun_l24_n760
+end
+
+def fun_l23_n111()
+ fun_l24_n600
+end
+
+def fun_l23_n112()
+ fun_l24_n821
+end
+
+def fun_l23_n113()
+ fun_l24_n527
+end
+
+def fun_l23_n114()
+ fun_l24_n661
+end
+
+def fun_l23_n115()
+ fun_l24_n15
+end
+
+def fun_l23_n116()
+ fun_l24_n807
+end
+
+def fun_l23_n117()
+ fun_l24_n143
+end
+
+def fun_l23_n118()
+ fun_l24_n962
+end
+
+def fun_l23_n119()
+ fun_l24_n83
+end
+
+def fun_l23_n120()
+ fun_l24_n755
+end
+
+def fun_l23_n121()
+ fun_l24_n645
+end
+
+def fun_l23_n122()
+ fun_l24_n479
+end
+
+def fun_l23_n123()
+ fun_l24_n639
+end
+
+def fun_l23_n124()
+ fun_l24_n528
+end
+
+def fun_l23_n125()
+ fun_l24_n782
+end
+
+def fun_l23_n126()
+ fun_l24_n200
+end
+
+def fun_l23_n127()
+ fun_l24_n60
+end
+
+def fun_l23_n128()
+ fun_l24_n396
+end
+
+def fun_l23_n129()
+ fun_l24_n600
+end
+
+def fun_l23_n130()
+ fun_l24_n397
+end
+
+def fun_l23_n131()
+ fun_l24_n921
+end
+
+def fun_l23_n132()
+ fun_l24_n979
+end
+
+def fun_l23_n133()
+ fun_l24_n849
+end
+
+def fun_l23_n134()
+ fun_l24_n302
+end
+
+def fun_l23_n135()
+ fun_l24_n77
+end
+
+def fun_l23_n136()
+ fun_l24_n249
+end
+
+def fun_l23_n137()
+ fun_l24_n912
+end
+
+def fun_l23_n138()
+ fun_l24_n661
+end
+
+def fun_l23_n139()
+ fun_l24_n500
+end
+
+def fun_l23_n140()
+ fun_l24_n590
+end
+
+def fun_l23_n141()
+ fun_l24_n942
+end
+
+def fun_l23_n142()
+ fun_l24_n299
+end
+
+def fun_l23_n143()
+ fun_l24_n272
+end
+
+def fun_l23_n144()
+ fun_l24_n747
+end
+
+def fun_l23_n145()
+ fun_l24_n88
+end
+
+def fun_l23_n146()
+ fun_l24_n524
+end
+
+def fun_l23_n147()
+ fun_l24_n931
+end
+
+def fun_l23_n148()
+ fun_l24_n712
+end
+
+def fun_l23_n149()
+ fun_l24_n661
+end
+
+def fun_l23_n150()
+ fun_l24_n426
+end
+
+def fun_l23_n151()
+ fun_l24_n693
+end
+
+def fun_l23_n152()
+ fun_l24_n585
+end
+
+def fun_l23_n153()
+ fun_l24_n451
+end
+
+def fun_l23_n154()
+ fun_l24_n333
+end
+
+def fun_l23_n155()
+ fun_l24_n792
+end
+
+def fun_l23_n156()
+ fun_l24_n840
+end
+
+def fun_l23_n157()
+ fun_l24_n643
+end
+
+def fun_l23_n158()
+ fun_l24_n120
+end
+
+def fun_l23_n159()
+ fun_l24_n86
+end
+
+def fun_l23_n160()
+ fun_l24_n352
+end
+
+def fun_l23_n161()
+ fun_l24_n761
+end
+
+def fun_l23_n162()
+ fun_l24_n412
+end
+
+def fun_l23_n163()
+ fun_l24_n156
+end
+
+def fun_l23_n164()
+ fun_l24_n909
+end
+
+def fun_l23_n165()
+ fun_l24_n394
+end
+
+def fun_l23_n166()
+ fun_l24_n973
+end
+
+def fun_l23_n167()
+ fun_l24_n31
+end
+
+def fun_l23_n168()
+ fun_l24_n545
+end
+
+def fun_l23_n169()
+ fun_l24_n180
+end
+
+def fun_l23_n170()
+ fun_l24_n446
+end
+
+def fun_l23_n171()
+ fun_l24_n965
+end
+
+def fun_l23_n172()
+ fun_l24_n102
+end
+
+def fun_l23_n173()
+ fun_l24_n161
+end
+
+def fun_l23_n174()
+ fun_l24_n571
+end
+
+def fun_l23_n175()
+ fun_l24_n451
+end
+
+def fun_l23_n176()
+ fun_l24_n947
+end
+
+def fun_l23_n177()
+ fun_l24_n906
+end
+
+def fun_l23_n178()
+ fun_l24_n356
+end
+
+def fun_l23_n179()
+ fun_l24_n84
+end
+
+def fun_l23_n180()
+ fun_l24_n798
+end
+
+def fun_l23_n181()
+ fun_l24_n500
+end
+
+def fun_l23_n182()
+ fun_l24_n419
+end
+
+def fun_l23_n183()
+ fun_l24_n797
+end
+
+def fun_l23_n184()
+ fun_l24_n459
+end
+
+def fun_l23_n185()
+ fun_l24_n795
+end
+
+def fun_l23_n186()
+ fun_l24_n478
+end
+
+def fun_l23_n187()
+ fun_l24_n742
+end
+
+def fun_l23_n188()
+ fun_l24_n262
+end
+
+def fun_l23_n189()
+ fun_l24_n37
+end
+
+def fun_l23_n190()
+ fun_l24_n340
+end
+
+def fun_l23_n191()
+ fun_l24_n314
+end
+
+def fun_l23_n192()
+ fun_l24_n595
+end
+
+def fun_l23_n193()
+ fun_l24_n769
+end
+
+def fun_l23_n194()
+ fun_l24_n637
+end
+
+def fun_l23_n195()
+ fun_l24_n377
+end
+
+def fun_l23_n196()
+ fun_l24_n77
+end
+
+def fun_l23_n197()
+ fun_l24_n486
+end
+
+def fun_l23_n198()
+ fun_l24_n992
+end
+
+def fun_l23_n199()
+ fun_l24_n546
+end
+
+def fun_l23_n200()
+ fun_l24_n386
+end
+
+def fun_l23_n201()
+ fun_l24_n301
+end
+
+def fun_l23_n202()
+ fun_l24_n867
+end
+
+def fun_l23_n203()
+ fun_l24_n948
+end
+
+def fun_l23_n204()
+ fun_l24_n163
+end
+
+def fun_l23_n205()
+ fun_l24_n618
+end
+
+def fun_l23_n206()
+ fun_l24_n560
+end
+
+def fun_l23_n207()
+ fun_l24_n147
+end
+
+def fun_l23_n208()
+ fun_l24_n474
+end
+
+def fun_l23_n209()
+ fun_l24_n99
+end
+
+def fun_l23_n210()
+ fun_l24_n994
+end
+
+def fun_l23_n211()
+ fun_l24_n594
+end
+
+def fun_l23_n212()
+ fun_l24_n101
+end
+
+def fun_l23_n213()
+ fun_l24_n510
+end
+
+def fun_l23_n214()
+ fun_l24_n965
+end
+
+def fun_l23_n215()
+ fun_l24_n460
+end
+
+def fun_l23_n216()
+ fun_l24_n455
+end
+
+def fun_l23_n217()
+ fun_l24_n783
+end
+
+def fun_l23_n218()
+ fun_l24_n466
+end
+
+def fun_l23_n219()
+ fun_l24_n60
+end
+
+def fun_l23_n220()
+ fun_l24_n486
+end
+
+def fun_l23_n221()
+ fun_l24_n819
+end
+
+def fun_l23_n222()
+ fun_l24_n909
+end
+
+def fun_l23_n223()
+ fun_l24_n446
+end
+
+def fun_l23_n224()
+ fun_l24_n80
+end
+
+def fun_l23_n225()
+ fun_l24_n276
+end
+
+def fun_l23_n226()
+ fun_l24_n638
+end
+
+def fun_l23_n227()
+ fun_l24_n200
+end
+
+def fun_l23_n228()
+ fun_l24_n665
+end
+
+def fun_l23_n229()
+ fun_l24_n814
+end
+
+def fun_l23_n230()
+ fun_l24_n214
+end
+
+def fun_l23_n231()
+ fun_l24_n719
+end
+
+def fun_l23_n232()
+ fun_l24_n62
+end
+
+def fun_l23_n233()
+ fun_l24_n523
+end
+
+def fun_l23_n234()
+ fun_l24_n470
+end
+
+def fun_l23_n235()
+ fun_l24_n338
+end
+
+def fun_l23_n236()
+ fun_l24_n929
+end
+
+def fun_l23_n237()
+ fun_l24_n982
+end
+
+def fun_l23_n238()
+ fun_l24_n391
+end
+
+def fun_l23_n239()
+ fun_l24_n631
+end
+
+def fun_l23_n240()
+ fun_l24_n473
+end
+
+def fun_l23_n241()
+ fun_l24_n25
+end
+
+def fun_l23_n242()
+ fun_l24_n720
+end
+
+def fun_l23_n243()
+ fun_l24_n139
+end
+
+def fun_l23_n244()
+ fun_l24_n859
+end
+
+def fun_l23_n245()
+ fun_l24_n154
+end
+
+def fun_l23_n246()
+ fun_l24_n272
+end
+
+def fun_l23_n247()
+ fun_l24_n248
+end
+
+def fun_l23_n248()
+ fun_l24_n719
+end
+
+def fun_l23_n249()
+ fun_l24_n436
+end
+
+def fun_l23_n250()
+ fun_l24_n935
+end
+
+def fun_l23_n251()
+ fun_l24_n513
+end
+
+def fun_l23_n252()
+ fun_l24_n0
+end
+
+def fun_l23_n253()
+ fun_l24_n104
+end
+
+def fun_l23_n254()
+ fun_l24_n551
+end
+
+def fun_l23_n255()
+ fun_l24_n317
+end
+
+def fun_l23_n256()
+ fun_l24_n225
+end
+
+def fun_l23_n257()
+ fun_l24_n685
+end
+
+def fun_l23_n258()
+ fun_l24_n647
+end
+
+def fun_l23_n259()
+ fun_l24_n489
+end
+
+def fun_l23_n260()
+ fun_l24_n252
+end
+
+def fun_l23_n261()
+ fun_l24_n333
+end
+
+def fun_l23_n262()
+ fun_l24_n179
+end
+
+def fun_l23_n263()
+ fun_l24_n68
+end
+
+def fun_l23_n264()
+ fun_l24_n119
+end
+
+def fun_l23_n265()
+ fun_l24_n840
+end
+
+def fun_l23_n266()
+ fun_l24_n683
+end
+
+def fun_l23_n267()
+ fun_l24_n897
+end
+
+def fun_l23_n268()
+ fun_l24_n323
+end
+
+def fun_l23_n269()
+ fun_l24_n667
+end
+
+def fun_l23_n270()
+ fun_l24_n538
+end
+
+def fun_l23_n271()
+ fun_l24_n597
+end
+
+def fun_l23_n272()
+ fun_l24_n582
+end
+
+def fun_l23_n273()
+ fun_l24_n19
+end
+
+def fun_l23_n274()
+ fun_l24_n331
+end
+
+def fun_l23_n275()
+ fun_l24_n528
+end
+
+def fun_l23_n276()
+ fun_l24_n766
+end
+
+def fun_l23_n277()
+ fun_l24_n742
+end
+
+def fun_l23_n278()
+ fun_l24_n318
+end
+
+def fun_l23_n279()
+ fun_l24_n143
+end
+
+def fun_l23_n280()
+ fun_l24_n910
+end
+
+def fun_l23_n281()
+ fun_l24_n953
+end
+
+def fun_l23_n282()
+ fun_l24_n655
+end
+
+def fun_l23_n283()
+ fun_l24_n804
+end
+
+def fun_l23_n284()
+ fun_l24_n539
+end
+
+def fun_l23_n285()
+ fun_l24_n697
+end
+
+def fun_l23_n286()
+ fun_l24_n258
+end
+
+def fun_l23_n287()
+ fun_l24_n194
+end
+
+def fun_l23_n288()
+ fun_l24_n420
+end
+
+def fun_l23_n289()
+ fun_l24_n253
+end
+
+def fun_l23_n290()
+ fun_l24_n858
+end
+
+def fun_l23_n291()
+ fun_l24_n831
+end
+
+def fun_l23_n292()
+ fun_l24_n798
+end
+
+def fun_l23_n293()
+ fun_l24_n662
+end
+
+def fun_l23_n294()
+ fun_l24_n900
+end
+
+def fun_l23_n295()
+ fun_l24_n408
+end
+
+def fun_l23_n296()
+ fun_l24_n151
+end
+
+def fun_l23_n297()
+ fun_l24_n660
+end
+
+def fun_l23_n298()
+ fun_l24_n233
+end
+
+def fun_l23_n299()
+ fun_l24_n412
+end
+
+def fun_l23_n300()
+ fun_l24_n347
+end
+
+def fun_l23_n301()
+ fun_l24_n360
+end
+
+def fun_l23_n302()
+ fun_l24_n150
+end
+
+def fun_l23_n303()
+ fun_l24_n995
+end
+
+def fun_l23_n304()
+ fun_l24_n623
+end
+
+def fun_l23_n305()
+ fun_l24_n404
+end
+
+def fun_l23_n306()
+ fun_l24_n898
+end
+
+def fun_l23_n307()
+ fun_l24_n736
+end
+
+def fun_l23_n308()
+ fun_l24_n301
+end
+
+def fun_l23_n309()
+ fun_l24_n929
+end
+
+def fun_l23_n310()
+ fun_l24_n795
+end
+
+def fun_l23_n311()
+ fun_l24_n434
+end
+
+def fun_l23_n312()
+ fun_l24_n796
+end
+
+def fun_l23_n313()
+ fun_l24_n71
+end
+
+def fun_l23_n314()
+ fun_l24_n294
+end
+
+def fun_l23_n315()
+ fun_l24_n540
+end
+
+def fun_l23_n316()
+ fun_l24_n137
+end
+
+def fun_l23_n317()
+ fun_l24_n523
+end
+
+def fun_l23_n318()
+ fun_l24_n472
+end
+
+def fun_l23_n319()
+ fun_l24_n141
+end
+
+def fun_l23_n320()
+ fun_l24_n552
+end
+
+def fun_l23_n321()
+ fun_l24_n587
+end
+
+def fun_l23_n322()
+ fun_l24_n308
+end
+
+def fun_l23_n323()
+ fun_l24_n929
+end
+
+def fun_l23_n324()
+ fun_l24_n944
+end
+
+def fun_l23_n325()
+ fun_l24_n472
+end
+
+def fun_l23_n326()
+ fun_l24_n450
+end
+
+def fun_l23_n327()
+ fun_l24_n376
+end
+
+def fun_l23_n328()
+ fun_l24_n70
+end
+
+def fun_l23_n329()
+ fun_l24_n486
+end
+
+def fun_l23_n330()
+ fun_l24_n391
+end
+
+def fun_l23_n331()
+ fun_l24_n133
+end
+
+def fun_l23_n332()
+ fun_l24_n31
+end
+
+def fun_l23_n333()
+ fun_l24_n462
+end
+
+def fun_l23_n334()
+ fun_l24_n521
+end
+
+def fun_l23_n335()
+ fun_l24_n706
+end
+
+def fun_l23_n336()
+ fun_l24_n511
+end
+
+def fun_l23_n337()
+ fun_l24_n932
+end
+
+def fun_l23_n338()
+ fun_l24_n133
+end
+
+def fun_l23_n339()
+ fun_l24_n296
+end
+
+def fun_l23_n340()
+ fun_l24_n591
+end
+
+def fun_l23_n341()
+ fun_l24_n581
+end
+
+def fun_l23_n342()
+ fun_l24_n41
+end
+
+def fun_l23_n343()
+ fun_l24_n256
+end
+
+def fun_l23_n344()
+ fun_l24_n772
+end
+
+def fun_l23_n345()
+ fun_l24_n642
+end
+
+def fun_l23_n346()
+ fun_l24_n110
+end
+
+def fun_l23_n347()
+ fun_l24_n987
+end
+
+def fun_l23_n348()
+ fun_l24_n33
+end
+
+def fun_l23_n349()
+ fun_l24_n913
+end
+
+def fun_l23_n350()
+ fun_l24_n581
+end
+
+def fun_l23_n351()
+ fun_l24_n594
+end
+
+def fun_l23_n352()
+ fun_l24_n484
+end
+
+def fun_l23_n353()
+ fun_l24_n969
+end
+
+def fun_l23_n354()
+ fun_l24_n966
+end
+
+def fun_l23_n355()
+ fun_l24_n122
+end
+
+def fun_l23_n356()
+ fun_l24_n907
+end
+
+def fun_l23_n357()
+ fun_l24_n980
+end
+
+def fun_l23_n358()
+ fun_l24_n557
+end
+
+def fun_l23_n359()
+ fun_l24_n216
+end
+
+def fun_l23_n360()
+ fun_l24_n936
+end
+
+def fun_l23_n361()
+ fun_l24_n476
+end
+
+def fun_l23_n362()
+ fun_l24_n154
+end
+
+def fun_l23_n363()
+ fun_l24_n785
+end
+
+def fun_l23_n364()
+ fun_l24_n967
+end
+
+def fun_l23_n365()
+ fun_l24_n697
+end
+
+def fun_l23_n366()
+ fun_l24_n610
+end
+
+def fun_l23_n367()
+ fun_l24_n415
+end
+
+def fun_l23_n368()
+ fun_l24_n432
+end
+
+def fun_l23_n369()
+ fun_l24_n505
+end
+
+def fun_l23_n370()
+ fun_l24_n581
+end
+
+def fun_l23_n371()
+ fun_l24_n350
+end
+
+def fun_l23_n372()
+ fun_l24_n202
+end
+
+def fun_l23_n373()
+ fun_l24_n757
+end
+
+def fun_l23_n374()
+ fun_l24_n336
+end
+
+def fun_l23_n375()
+ fun_l24_n323
+end
+
+def fun_l23_n376()
+ fun_l24_n670
+end
+
+def fun_l23_n377()
+ fun_l24_n535
+end
+
+def fun_l23_n378()
+ fun_l24_n901
+end
+
+def fun_l23_n379()
+ fun_l24_n218
+end
+
+def fun_l23_n380()
+ fun_l24_n733
+end
+
+def fun_l23_n381()
+ fun_l24_n820
+end
+
+def fun_l23_n382()
+ fun_l24_n229
+end
+
+def fun_l23_n383()
+ fun_l24_n49
+end
+
+def fun_l23_n384()
+ fun_l24_n469
+end
+
+def fun_l23_n385()
+ fun_l24_n904
+end
+
+def fun_l23_n386()
+ fun_l24_n652
+end
+
+def fun_l23_n387()
+ fun_l24_n863
+end
+
+def fun_l23_n388()
+ fun_l24_n356
+end
+
+def fun_l23_n389()
+ fun_l24_n558
+end
+
+def fun_l23_n390()
+ fun_l24_n263
+end
+
+def fun_l23_n391()
+ fun_l24_n593
+end
+
+def fun_l23_n392()
+ fun_l24_n882
+end
+
+def fun_l23_n393()
+ fun_l24_n128
+end
+
+def fun_l23_n394()
+ fun_l24_n855
+end
+
+def fun_l23_n395()
+ fun_l24_n269
+end
+
+def fun_l23_n396()
+ fun_l24_n858
+end
+
+def fun_l23_n397()
+ fun_l24_n34
+end
+
+def fun_l23_n398()
+ fun_l24_n447
+end
+
+def fun_l23_n399()
+ fun_l24_n323
+end
+
+def fun_l23_n400()
+ fun_l24_n624
+end
+
+def fun_l23_n401()
+ fun_l24_n397
+end
+
+def fun_l23_n402()
+ fun_l24_n755
+end
+
+def fun_l23_n403()
+ fun_l24_n477
+end
+
+def fun_l23_n404()
+ fun_l24_n396
+end
+
+def fun_l23_n405()
+ fun_l24_n177
+end
+
+def fun_l23_n406()
+ fun_l24_n964
+end
+
+def fun_l23_n407()
+ fun_l24_n640
+end
+
+def fun_l23_n408()
+ fun_l24_n82
+end
+
+def fun_l23_n409()
+ fun_l24_n224
+end
+
+def fun_l23_n410()
+ fun_l24_n750
+end
+
+def fun_l23_n411()
+ fun_l24_n301
+end
+
+def fun_l23_n412()
+ fun_l24_n32
+end
+
+def fun_l23_n413()
+ fun_l24_n839
+end
+
+def fun_l23_n414()
+ fun_l24_n724
+end
+
+def fun_l23_n415()
+ fun_l24_n663
+end
+
+def fun_l23_n416()
+ fun_l24_n682
+end
+
+def fun_l23_n417()
+ fun_l24_n409
+end
+
+def fun_l23_n418()
+ fun_l24_n769
+end
+
+def fun_l23_n419()
+ fun_l24_n538
+end
+
+def fun_l23_n420()
+ fun_l24_n558
+end
+
+def fun_l23_n421()
+ fun_l24_n524
+end
+
+def fun_l23_n422()
+ fun_l24_n464
+end
+
+def fun_l23_n423()
+ fun_l24_n889
+end
+
+def fun_l23_n424()
+ fun_l24_n656
+end
+
+def fun_l23_n425()
+ fun_l24_n805
+end
+
+def fun_l23_n426()
+ fun_l24_n428
+end
+
+def fun_l23_n427()
+ fun_l24_n793
+end
+
+def fun_l23_n428()
+ fun_l24_n192
+end
+
+def fun_l23_n429()
+ fun_l24_n443
+end
+
+def fun_l23_n430()
+ fun_l24_n481
+end
+
+def fun_l23_n431()
+ fun_l24_n203
+end
+
+def fun_l23_n432()
+ fun_l24_n607
+end
+
+def fun_l23_n433()
+ fun_l24_n871
+end
+
+def fun_l23_n434()
+ fun_l24_n436
+end
+
+def fun_l23_n435()
+ fun_l24_n376
+end
+
+def fun_l23_n436()
+ fun_l24_n936
+end
+
+def fun_l23_n437()
+ fun_l24_n153
+end
+
+def fun_l23_n438()
+ fun_l24_n994
+end
+
+def fun_l23_n439()
+ fun_l24_n777
+end
+
+def fun_l23_n440()
+ fun_l24_n341
+end
+
+def fun_l23_n441()
+ fun_l24_n50
+end
+
+def fun_l23_n442()
+ fun_l24_n1
+end
+
+def fun_l23_n443()
+ fun_l24_n320
+end
+
+def fun_l23_n444()
+ fun_l24_n116
+end
+
+def fun_l23_n445()
+ fun_l24_n202
+end
+
+def fun_l23_n446()
+ fun_l24_n433
+end
+
+def fun_l23_n447()
+ fun_l24_n151
+end
+
+def fun_l23_n448()
+ fun_l24_n581
+end
+
+def fun_l23_n449()
+ fun_l24_n498
+end
+
+def fun_l23_n450()
+ fun_l24_n575
+end
+
+def fun_l23_n451()
+ fun_l24_n161
+end
+
+def fun_l23_n452()
+ fun_l24_n78
+end
+
+def fun_l23_n453()
+ fun_l24_n863
+end
+
+def fun_l23_n454()
+ fun_l24_n269
+end
+
+def fun_l23_n455()
+ fun_l24_n956
+end
+
+def fun_l23_n456()
+ fun_l24_n485
+end
+
+def fun_l23_n457()
+ fun_l24_n106
+end
+
+def fun_l23_n458()
+ fun_l24_n641
+end
+
+def fun_l23_n459()
+ fun_l24_n434
+end
+
+def fun_l23_n460()
+ fun_l24_n308
+end
+
+def fun_l23_n461()
+ fun_l24_n192
+end
+
+def fun_l23_n462()
+ fun_l24_n401
+end
+
+def fun_l23_n463()
+ fun_l24_n62
+end
+
+def fun_l23_n464()
+ fun_l24_n38
+end
+
+def fun_l23_n465()
+ fun_l24_n732
+end
+
+def fun_l23_n466()
+ fun_l24_n143
+end
+
+def fun_l23_n467()
+ fun_l24_n799
+end
+
+def fun_l23_n468()
+ fun_l24_n486
+end
+
+def fun_l23_n469()
+ fun_l24_n161
+end
+
+def fun_l23_n470()
+ fun_l24_n838
+end
+
+def fun_l23_n471()
+ fun_l24_n526
+end
+
+def fun_l23_n472()
+ fun_l24_n421
+end
+
+def fun_l23_n473()
+ fun_l24_n967
+end
+
+def fun_l23_n474()
+ fun_l24_n822
+end
+
+def fun_l23_n475()
+ fun_l24_n939
+end
+
+def fun_l23_n476()
+ fun_l24_n36
+end
+
+def fun_l23_n477()
+ fun_l24_n539
+end
+
+def fun_l23_n478()
+ fun_l24_n759
+end
+
+def fun_l23_n479()
+ fun_l24_n979
+end
+
+def fun_l23_n480()
+ fun_l24_n685
+end
+
+def fun_l23_n481()
+ fun_l24_n548
+end
+
+def fun_l23_n482()
+ fun_l24_n348
+end
+
+def fun_l23_n483()
+ fun_l24_n922
+end
+
+def fun_l23_n484()
+ fun_l24_n185
+end
+
+def fun_l23_n485()
+ fun_l24_n138
+end
+
+def fun_l23_n486()
+ fun_l24_n678
+end
+
+def fun_l23_n487()
+ fun_l24_n44
+end
+
+def fun_l23_n488()
+ fun_l24_n820
+end
+
+def fun_l23_n489()
+ fun_l24_n447
+end
+
+def fun_l23_n490()
+ fun_l24_n455
+end
+
+def fun_l23_n491()
+ fun_l24_n145
+end
+
+def fun_l23_n492()
+ fun_l24_n441
+end
+
+def fun_l23_n493()
+ fun_l24_n354
+end
+
+def fun_l23_n494()
+ fun_l24_n324
+end
+
+def fun_l23_n495()
+ fun_l24_n231
+end
+
+def fun_l23_n496()
+ fun_l24_n775
+end
+
+def fun_l23_n497()
+ fun_l24_n815
+end
+
+def fun_l23_n498()
+ fun_l24_n491
+end
+
+def fun_l23_n499()
+ fun_l24_n437
+end
+
+def fun_l23_n500()
+ fun_l24_n112
+end
+
+def fun_l23_n501()
+ fun_l24_n174
+end
+
+def fun_l23_n502()
+ fun_l24_n683
+end
+
+def fun_l23_n503()
+ fun_l24_n243
+end
+
+def fun_l23_n504()
+ fun_l24_n236
+end
+
+def fun_l23_n505()
+ fun_l24_n106
+end
+
+def fun_l23_n506()
+ fun_l24_n781
+end
+
+def fun_l23_n507()
+ fun_l24_n427
+end
+
+def fun_l23_n508()
+ fun_l24_n410
+end
+
+def fun_l23_n509()
+ fun_l24_n903
+end
+
+def fun_l23_n510()
+ fun_l24_n40
+end
+
+def fun_l23_n511()
+ fun_l24_n559
+end
+
+def fun_l23_n512()
+ fun_l24_n152
+end
+
+def fun_l23_n513()
+ fun_l24_n175
+end
+
+def fun_l23_n514()
+ fun_l24_n305
+end
+
+def fun_l23_n515()
+ fun_l24_n814
+end
+
+def fun_l23_n516()
+ fun_l24_n676
+end
+
+def fun_l23_n517()
+ fun_l24_n448
+end
+
+def fun_l23_n518()
+ fun_l24_n573
+end
+
+def fun_l23_n519()
+ fun_l24_n66
+end
+
+def fun_l23_n520()
+ fun_l24_n893
+end
+
+def fun_l23_n521()
+ fun_l24_n460
+end
+
+def fun_l23_n522()
+ fun_l24_n238
+end
+
+def fun_l23_n523()
+ fun_l24_n200
+end
+
+def fun_l23_n524()
+ fun_l24_n61
+end
+
+def fun_l23_n525()
+ fun_l24_n365
+end
+
+def fun_l23_n526()
+ fun_l24_n360
+end
+
+def fun_l23_n527()
+ fun_l24_n17
+end
+
+def fun_l23_n528()
+ fun_l24_n594
+end
+
+def fun_l23_n529()
+ fun_l24_n494
+end
+
+def fun_l23_n530()
+ fun_l24_n188
+end
+
+def fun_l23_n531()
+ fun_l24_n288
+end
+
+def fun_l23_n532()
+ fun_l24_n348
+end
+
+def fun_l23_n533()
+ fun_l24_n254
+end
+
+def fun_l23_n534()
+ fun_l24_n457
+end
+
+def fun_l23_n535()
+ fun_l24_n742
+end
+
+def fun_l23_n536()
+ fun_l24_n28
+end
+
+def fun_l23_n537()
+ fun_l24_n856
+end
+
+def fun_l23_n538()
+ fun_l24_n345
+end
+
+def fun_l23_n539()
+ fun_l24_n455
+end
+
+def fun_l23_n540()
+ fun_l24_n39
+end
+
+def fun_l23_n541()
+ fun_l24_n667
+end
+
+def fun_l23_n542()
+ fun_l24_n555
+end
+
+def fun_l23_n543()
+ fun_l24_n983
+end
+
+def fun_l23_n544()
+ fun_l24_n71
+end
+
+def fun_l23_n545()
+ fun_l24_n733
+end
+
+def fun_l23_n546()
+ fun_l24_n889
+end
+
+def fun_l23_n547()
+ fun_l24_n152
+end
+
+def fun_l23_n548()
+ fun_l24_n998
+end
+
+def fun_l23_n549()
+ fun_l24_n519
+end
+
+def fun_l23_n550()
+ fun_l24_n723
+end
+
+def fun_l23_n551()
+ fun_l24_n931
+end
+
+def fun_l23_n552()
+ fun_l24_n866
+end
+
+def fun_l23_n553()
+ fun_l24_n598
+end
+
+def fun_l23_n554()
+ fun_l24_n522
+end
+
+def fun_l23_n555()
+ fun_l24_n317
+end
+
+def fun_l23_n556()
+ fun_l24_n712
+end
+
+def fun_l23_n557()
+ fun_l24_n381
+end
+
+def fun_l23_n558()
+ fun_l24_n167
+end
+
+def fun_l23_n559()
+ fun_l24_n136
+end
+
+def fun_l23_n560()
+ fun_l24_n136
+end
+
+def fun_l23_n561()
+ fun_l24_n422
+end
+
+def fun_l23_n562()
+ fun_l24_n75
+end
+
+def fun_l23_n563()
+ fun_l24_n609
+end
+
+def fun_l23_n564()
+ fun_l24_n324
+end
+
+def fun_l23_n565()
+ fun_l24_n49
+end
+
+def fun_l23_n566()
+ fun_l24_n312
+end
+
+def fun_l23_n567()
+ fun_l24_n514
+end
+
+def fun_l23_n568()
+ fun_l24_n773
+end
+
+def fun_l23_n569()
+ fun_l24_n386
+end
+
+def fun_l23_n570()
+ fun_l24_n688
+end
+
+def fun_l23_n571()
+ fun_l24_n857
+end
+
+def fun_l23_n572()
+ fun_l24_n821
+end
+
+def fun_l23_n573()
+ fun_l24_n986
+end
+
+def fun_l23_n574()
+ fun_l24_n785
+end
+
+def fun_l23_n575()
+ fun_l24_n226
+end
+
+def fun_l23_n576()
+ fun_l24_n527
+end
+
+def fun_l23_n577()
+ fun_l24_n703
+end
+
+def fun_l23_n578()
+ fun_l24_n908
+end
+
+def fun_l23_n579()
+ fun_l24_n794
+end
+
+def fun_l23_n580()
+ fun_l24_n521
+end
+
+def fun_l23_n581()
+ fun_l24_n519
+end
+
+def fun_l23_n582()
+ fun_l24_n474
+end
+
+def fun_l23_n583()
+ fun_l24_n980
+end
+
+def fun_l23_n584()
+ fun_l24_n564
+end
+
+def fun_l23_n585()
+ fun_l24_n599
+end
+
+def fun_l23_n586()
+ fun_l24_n730
+end
+
+def fun_l23_n587()
+ fun_l24_n132
+end
+
+def fun_l23_n588()
+ fun_l24_n54
+end
+
+def fun_l23_n589()
+ fun_l24_n725
+end
+
+def fun_l23_n590()
+ fun_l24_n24
+end
+
+def fun_l23_n591()
+ fun_l24_n879
+end
+
+def fun_l23_n592()
+ fun_l24_n857
+end
+
+def fun_l23_n593()
+ fun_l24_n468
+end
+
+def fun_l23_n594()
+ fun_l24_n299
+end
+
+def fun_l23_n595()
+ fun_l24_n62
+end
+
+def fun_l23_n596()
+ fun_l24_n415
+end
+
+def fun_l23_n597()
+ fun_l24_n440
+end
+
+def fun_l23_n598()
+ fun_l24_n550
+end
+
+def fun_l23_n599()
+ fun_l24_n636
+end
+
+def fun_l23_n600()
+ fun_l24_n905
+end
+
+def fun_l23_n601()
+ fun_l24_n147
+end
+
+def fun_l23_n602()
+ fun_l24_n882
+end
+
+def fun_l23_n603()
+ fun_l24_n410
+end
+
+def fun_l23_n604()
+ fun_l24_n963
+end
+
+def fun_l23_n605()
+ fun_l24_n749
+end
+
+def fun_l23_n606()
+ fun_l24_n318
+end
+
+def fun_l23_n607()
+ fun_l24_n177
+end
+
+def fun_l23_n608()
+ fun_l24_n138
+end
+
+def fun_l23_n609()
+ fun_l24_n142
+end
+
+def fun_l23_n610()
+ fun_l24_n671
+end
+
+def fun_l23_n611()
+ fun_l24_n702
+end
+
+def fun_l23_n612()
+ fun_l24_n715
+end
+
+def fun_l23_n613()
+ fun_l24_n356
+end
+
+def fun_l23_n614()
+ fun_l24_n719
+end
+
+def fun_l23_n615()
+ fun_l24_n496
+end
+
+def fun_l23_n616()
+ fun_l24_n131
+end
+
+def fun_l23_n617()
+ fun_l24_n614
+end
+
+def fun_l23_n618()
+ fun_l24_n508
+end
+
+def fun_l23_n619()
+ fun_l24_n848
+end
+
+def fun_l23_n620()
+ fun_l24_n119
+end
+
+def fun_l23_n621()
+ fun_l24_n372
+end
+
+def fun_l23_n622()
+ fun_l24_n672
+end
+
+def fun_l23_n623()
+ fun_l24_n248
+end
+
+def fun_l23_n624()
+ fun_l24_n425
+end
+
+def fun_l23_n625()
+ fun_l24_n875
+end
+
+def fun_l23_n626()
+ fun_l24_n371
+end
+
+def fun_l23_n627()
+ fun_l24_n362
+end
+
+def fun_l23_n628()
+ fun_l24_n139
+end
+
+def fun_l23_n629()
+ fun_l24_n540
+end
+
+def fun_l23_n630()
+ fun_l24_n979
+end
+
+def fun_l23_n631()
+ fun_l24_n243
+end
+
+def fun_l23_n632()
+ fun_l24_n799
+end
+
+def fun_l23_n633()
+ fun_l24_n711
+end
+
+def fun_l23_n634()
+ fun_l24_n834
+end
+
+def fun_l23_n635()
+ fun_l24_n173
+end
+
+def fun_l23_n636()
+ fun_l24_n465
+end
+
+def fun_l23_n637()
+ fun_l24_n986
+end
+
+def fun_l23_n638()
+ fun_l24_n24
+end
+
+def fun_l23_n639()
+ fun_l24_n925
+end
+
+def fun_l23_n640()
+ fun_l24_n829
+end
+
+def fun_l23_n641()
+ fun_l24_n361
+end
+
+def fun_l23_n642()
+ fun_l24_n884
+end
+
+def fun_l23_n643()
+ fun_l24_n132
+end
+
+def fun_l23_n644()
+ fun_l24_n277
+end
+
+def fun_l23_n645()
+ fun_l24_n616
+end
+
+def fun_l23_n646()
+ fun_l24_n122
+end
+
+def fun_l23_n647()
+ fun_l24_n194
+end
+
+def fun_l23_n648()
+ fun_l24_n678
+end
+
+def fun_l23_n649()
+ fun_l24_n119
+end
+
+def fun_l23_n650()
+ fun_l24_n430
+end
+
+def fun_l23_n651()
+ fun_l24_n46
+end
+
+def fun_l23_n652()
+ fun_l24_n653
+end
+
+def fun_l23_n653()
+ fun_l24_n279
+end
+
+def fun_l23_n654()
+ fun_l24_n943
+end
+
+def fun_l23_n655()
+ fun_l24_n480
+end
+
+def fun_l23_n656()
+ fun_l24_n81
+end
+
+def fun_l23_n657()
+ fun_l24_n782
+end
+
+def fun_l23_n658()
+ fun_l24_n986
+end
+
+def fun_l23_n659()
+ fun_l24_n951
+end
+
+def fun_l23_n660()
+ fun_l24_n918
+end
+
+def fun_l23_n661()
+ fun_l24_n524
+end
+
+def fun_l23_n662()
+ fun_l24_n949
+end
+
+def fun_l23_n663()
+ fun_l24_n688
+end
+
+def fun_l23_n664()
+ fun_l24_n606
+end
+
+def fun_l23_n665()
+ fun_l24_n358
+end
+
+def fun_l23_n666()
+ fun_l24_n948
+end
+
+def fun_l23_n667()
+ fun_l24_n254
+end
+
+def fun_l23_n668()
+ fun_l24_n410
+end
+
+def fun_l23_n669()
+ fun_l24_n612
+end
+
+def fun_l23_n670()
+ fun_l24_n693
+end
+
+def fun_l23_n671()
+ fun_l24_n454
+end
+
+def fun_l23_n672()
+ fun_l24_n182
+end
+
+def fun_l23_n673()
+ fun_l24_n556
+end
+
+def fun_l23_n674()
+ fun_l24_n994
+end
+
+def fun_l23_n675()
+ fun_l24_n927
+end
+
+def fun_l23_n676()
+ fun_l24_n624
+end
+
+def fun_l23_n677()
+ fun_l24_n149
+end
+
+def fun_l23_n678()
+ fun_l24_n561
+end
+
+def fun_l23_n679()
+ fun_l24_n250
+end
+
+def fun_l23_n680()
+ fun_l24_n69
+end
+
+def fun_l23_n681()
+ fun_l24_n599
+end
+
+def fun_l23_n682()
+ fun_l24_n145
+end
+
+def fun_l23_n683()
+ fun_l24_n785
+end
+
+def fun_l23_n684()
+ fun_l24_n181
+end
+
+def fun_l23_n685()
+ fun_l24_n646
+end
+
+def fun_l23_n686()
+ fun_l24_n109
+end
+
+def fun_l23_n687()
+ fun_l24_n316
+end
+
+def fun_l23_n688()
+ fun_l24_n816
+end
+
+def fun_l23_n689()
+ fun_l24_n302
+end
+
+def fun_l23_n690()
+ fun_l24_n976
+end
+
+def fun_l23_n691()
+ fun_l24_n508
+end
+
+def fun_l23_n692()
+ fun_l24_n158
+end
+
+def fun_l23_n693()
+ fun_l24_n110
+end
+
+def fun_l23_n694()
+ fun_l24_n581
+end
+
+def fun_l23_n695()
+ fun_l24_n375
+end
+
+def fun_l23_n696()
+ fun_l24_n121
+end
+
+def fun_l23_n697()
+ fun_l24_n920
+end
+
+def fun_l23_n698()
+ fun_l24_n827
+end
+
+def fun_l23_n699()
+ fun_l24_n757
+end
+
+def fun_l23_n700()
+ fun_l24_n932
+end
+
+def fun_l23_n701()
+ fun_l24_n249
+end
+
+def fun_l23_n702()
+ fun_l24_n375
+end
+
+def fun_l23_n703()
+ fun_l24_n976
+end
+
+def fun_l23_n704()
+ fun_l24_n903
+end
+
+def fun_l23_n705()
+ fun_l24_n326
+end
+
+def fun_l23_n706()
+ fun_l24_n732
+end
+
+def fun_l23_n707()
+ fun_l24_n150
+end
+
+def fun_l23_n708()
+ fun_l24_n849
+end
+
+def fun_l23_n709()
+ fun_l24_n341
+end
+
+def fun_l23_n710()
+ fun_l24_n194
+end
+
+def fun_l23_n711()
+ fun_l24_n773
+end
+
+def fun_l23_n712()
+ fun_l24_n665
+end
+
+def fun_l23_n713()
+ fun_l24_n467
+end
+
+def fun_l23_n714()
+ fun_l24_n554
+end
+
+def fun_l23_n715()
+ fun_l24_n160
+end
+
+def fun_l23_n716()
+ fun_l24_n65
+end
+
+def fun_l23_n717()
+ fun_l24_n155
+end
+
+def fun_l23_n718()
+ fun_l24_n930
+end
+
+def fun_l23_n719()
+ fun_l24_n13
+end
+
+def fun_l23_n720()
+ fun_l24_n756
+end
+
+def fun_l23_n721()
+ fun_l24_n174
+end
+
+def fun_l23_n722()
+ fun_l24_n675
+end
+
+def fun_l23_n723()
+ fun_l24_n847
+end
+
+def fun_l23_n724()
+ fun_l24_n277
+end
+
+def fun_l23_n725()
+ fun_l24_n580
+end
+
+def fun_l23_n726()
+ fun_l24_n65
+end
+
+def fun_l23_n727()
+ fun_l24_n507
+end
+
+def fun_l23_n728()
+ fun_l24_n325
+end
+
+def fun_l23_n729()
+ fun_l24_n642
+end
+
+def fun_l23_n730()
+ fun_l24_n607
+end
+
+def fun_l23_n731()
+ fun_l24_n683
+end
+
+def fun_l23_n732()
+ fun_l24_n139
+end
+
+def fun_l23_n733()
+ fun_l24_n719
+end
+
+def fun_l23_n734()
+ fun_l24_n768
+end
+
+def fun_l23_n735()
+ fun_l24_n927
+end
+
+def fun_l23_n736()
+ fun_l24_n346
+end
+
+def fun_l23_n737()
+ fun_l24_n457
+end
+
+def fun_l23_n738()
+ fun_l24_n347
+end
+
+def fun_l23_n739()
+ fun_l24_n26
+end
+
+def fun_l23_n740()
+ fun_l24_n696
+end
+
+def fun_l23_n741()
+ fun_l24_n177
+end
+
+def fun_l23_n742()
+ fun_l24_n414
+end
+
+def fun_l23_n743()
+ fun_l24_n937
+end
+
+def fun_l23_n744()
+ fun_l24_n576
+end
+
+def fun_l23_n745()
+ fun_l24_n560
+end
+
+def fun_l23_n746()
+ fun_l24_n398
+end
+
+def fun_l23_n747()
+ fun_l24_n476
+end
+
+def fun_l23_n748()
+ fun_l24_n758
+end
+
+def fun_l23_n749()
+ fun_l24_n955
+end
+
+def fun_l23_n750()
+ fun_l24_n130
+end
+
+def fun_l23_n751()
+ fun_l24_n673
+end
+
+def fun_l23_n752()
+ fun_l24_n269
+end
+
+def fun_l23_n753()
+ fun_l24_n917
+end
+
+def fun_l23_n754()
+ fun_l24_n738
+end
+
+def fun_l23_n755()
+ fun_l24_n238
+end
+
+def fun_l23_n756()
+ fun_l24_n910
+end
+
+def fun_l23_n757()
+ fun_l24_n912
+end
+
+def fun_l23_n758()
+ fun_l24_n288
+end
+
+def fun_l23_n759()
+ fun_l24_n206
+end
+
+def fun_l23_n760()
+ fun_l24_n519
+end
+
+def fun_l23_n761()
+ fun_l24_n365
+end
+
+def fun_l23_n762()
+ fun_l24_n493
+end
+
+def fun_l23_n763()
+ fun_l24_n222
+end
+
+def fun_l23_n764()
+ fun_l24_n933
+end
+
+def fun_l23_n765()
+ fun_l24_n164
+end
+
+def fun_l23_n766()
+ fun_l24_n606
+end
+
+def fun_l23_n767()
+ fun_l24_n494
+end
+
+def fun_l23_n768()
+ fun_l24_n869
+end
+
+def fun_l23_n769()
+ fun_l24_n339
+end
+
+def fun_l23_n770()
+ fun_l24_n55
+end
+
+def fun_l23_n771()
+ fun_l24_n149
+end
+
+def fun_l23_n772()
+ fun_l24_n926
+end
+
+def fun_l23_n773()
+ fun_l24_n884
+end
+
+def fun_l23_n774()
+ fun_l24_n599
+end
+
+def fun_l23_n775()
+ fun_l24_n74
+end
+
+def fun_l23_n776()
+ fun_l24_n633
+end
+
+def fun_l23_n777()
+ fun_l24_n859
+end
+
+def fun_l23_n778()
+ fun_l24_n895
+end
+
+def fun_l23_n779()
+ fun_l24_n559
+end
+
+def fun_l23_n780()
+ fun_l24_n712
+end
+
+def fun_l23_n781()
+ fun_l24_n275
+end
+
+def fun_l23_n782()
+ fun_l24_n485
+end
+
+def fun_l23_n783()
+ fun_l24_n958
+end
+
+def fun_l23_n784()
+ fun_l24_n905
+end
+
+def fun_l23_n785()
+ fun_l24_n761
+end
+
+def fun_l23_n786()
+ fun_l24_n869
+end
+
+def fun_l23_n787()
+ fun_l24_n542
+end
+
+def fun_l23_n788()
+ fun_l24_n676
+end
+
+def fun_l23_n789()
+ fun_l24_n708
+end
+
+def fun_l23_n790()
+ fun_l24_n298
+end
+
+def fun_l23_n791()
+ fun_l24_n362
+end
+
+def fun_l23_n792()
+ fun_l24_n938
+end
+
+def fun_l23_n793()
+ fun_l24_n414
+end
+
+def fun_l23_n794()
+ fun_l24_n376
+end
+
+def fun_l23_n795()
+ fun_l24_n530
+end
+
+def fun_l23_n796()
+ fun_l24_n1
+end
+
+def fun_l23_n797()
+ fun_l24_n333
+end
+
+def fun_l23_n798()
+ fun_l24_n750
+end
+
+def fun_l23_n799()
+ fun_l24_n254
+end
+
+def fun_l23_n800()
+ fun_l24_n278
+end
+
+def fun_l23_n801()
+ fun_l24_n314
+end
+
+def fun_l23_n802()
+ fun_l24_n275
+end
+
+def fun_l23_n803()
+ fun_l24_n848
+end
+
+def fun_l23_n804()
+ fun_l24_n883
+end
+
+def fun_l23_n805()
+ fun_l24_n483
+end
+
+def fun_l23_n806()
+ fun_l24_n706
+end
+
+def fun_l23_n807()
+ fun_l24_n622
+end
+
+def fun_l23_n808()
+ fun_l24_n551
+end
+
+def fun_l23_n809()
+ fun_l24_n680
+end
+
+def fun_l23_n810()
+ fun_l24_n426
+end
+
+def fun_l23_n811()
+ fun_l24_n418
+end
+
+def fun_l23_n812()
+ fun_l24_n163
+end
+
+def fun_l23_n813()
+ fun_l24_n309
+end
+
+def fun_l23_n814()
+ fun_l24_n308
+end
+
+def fun_l23_n815()
+ fun_l24_n992
+end
+
+def fun_l23_n816()
+ fun_l24_n863
+end
+
+def fun_l23_n817()
+ fun_l24_n58
+end
+
+def fun_l23_n818()
+ fun_l24_n995
+end
+
+def fun_l23_n819()
+ fun_l24_n158
+end
+
+def fun_l23_n820()
+ fun_l24_n568
+end
+
+def fun_l23_n821()
+ fun_l24_n595
+end
+
+def fun_l23_n822()
+ fun_l24_n121
+end
+
+def fun_l23_n823()
+ fun_l24_n395
+end
+
+def fun_l23_n824()
+ fun_l24_n322
+end
+
+def fun_l23_n825()
+ fun_l24_n178
+end
+
+def fun_l23_n826()
+ fun_l24_n470
+end
+
+def fun_l23_n827()
+ fun_l24_n243
+end
+
+def fun_l23_n828()
+ fun_l24_n970
+end
+
+def fun_l23_n829()
+ fun_l24_n41
+end
+
+def fun_l23_n830()
+ fun_l24_n468
+end
+
+def fun_l23_n831()
+ fun_l24_n457
+end
+
+def fun_l23_n832()
+ fun_l24_n104
+end
+
+def fun_l23_n833()
+ fun_l24_n735
+end
+
+def fun_l23_n834()
+ fun_l24_n935
+end
+
+def fun_l23_n835()
+ fun_l24_n693
+end
+
+def fun_l23_n836()
+ fun_l24_n937
+end
+
+def fun_l23_n837()
+ fun_l24_n720
+end
+
+def fun_l23_n838()
+ fun_l24_n969
+end
+
+def fun_l23_n839()
+ fun_l24_n251
+end
+
+def fun_l23_n840()
+ fun_l24_n120
+end
+
+def fun_l23_n841()
+ fun_l24_n24
+end
+
+def fun_l23_n842()
+ fun_l24_n692
+end
+
+def fun_l23_n843()
+ fun_l24_n663
+end
+
+def fun_l23_n844()
+ fun_l24_n84
+end
+
+def fun_l23_n845()
+ fun_l24_n612
+end
+
+def fun_l23_n846()
+ fun_l24_n169
+end
+
+def fun_l23_n847()
+ fun_l24_n708
+end
+
+def fun_l23_n848()
+ fun_l24_n825
+end
+
+def fun_l23_n849()
+ fun_l24_n821
+end
+
+def fun_l23_n850()
+ fun_l24_n593
+end
+
+def fun_l23_n851()
+ fun_l24_n788
+end
+
+def fun_l23_n852()
+ fun_l24_n757
+end
+
+def fun_l23_n853()
+ fun_l24_n104
+end
+
+def fun_l23_n854()
+ fun_l24_n370
+end
+
+def fun_l23_n855()
+ fun_l24_n925
+end
+
+def fun_l23_n856()
+ fun_l24_n312
+end
+
+def fun_l23_n857()
+ fun_l24_n262
+end
+
+def fun_l23_n858()
+ fun_l24_n459
+end
+
+def fun_l23_n859()
+ fun_l24_n296
+end
+
+def fun_l23_n860()
+ fun_l24_n37
+end
+
+def fun_l23_n861()
+ fun_l24_n865
+end
+
+def fun_l23_n862()
+ fun_l24_n435
+end
+
+def fun_l23_n863()
+ fun_l24_n6
+end
+
+def fun_l23_n864()
+ fun_l24_n589
+end
+
+def fun_l23_n865()
+ fun_l24_n247
+end
+
+def fun_l23_n866()
+ fun_l24_n889
+end
+
+def fun_l23_n867()
+ fun_l24_n461
+end
+
+def fun_l23_n868()
+ fun_l24_n949
+end
+
+def fun_l23_n869()
+ fun_l24_n951
+end
+
+def fun_l23_n870()
+ fun_l24_n214
+end
+
+def fun_l23_n871()
+ fun_l24_n44
+end
+
+def fun_l23_n872()
+ fun_l24_n241
+end
+
+def fun_l23_n873()
+ fun_l24_n643
+end
+
+def fun_l23_n874()
+ fun_l24_n918
+end
+
+def fun_l23_n875()
+ fun_l24_n940
+end
+
+def fun_l23_n876()
+ fun_l24_n642
+end
+
+def fun_l23_n877()
+ fun_l24_n859
+end
+
+def fun_l23_n878()
+ fun_l24_n535
+end
+
+def fun_l23_n879()
+ fun_l24_n956
+end
+
+def fun_l23_n880()
+ fun_l24_n212
+end
+
+def fun_l23_n881()
+ fun_l24_n691
+end
+
+def fun_l23_n882()
+ fun_l24_n306
+end
+
+def fun_l23_n883()
+ fun_l24_n769
+end
+
+def fun_l23_n884()
+ fun_l24_n194
+end
+
+def fun_l23_n885()
+ fun_l24_n46
+end
+
+def fun_l23_n886()
+ fun_l24_n409
+end
+
+def fun_l23_n887()
+ fun_l24_n799
+end
+
+def fun_l23_n888()
+ fun_l24_n367
+end
+
+def fun_l23_n889()
+ fun_l24_n454
+end
+
+def fun_l23_n890()
+ fun_l24_n405
+end
+
+def fun_l23_n891()
+ fun_l24_n547
+end
+
+def fun_l23_n892()
+ fun_l24_n998
+end
+
+def fun_l23_n893()
+ fun_l24_n942
+end
+
+def fun_l23_n894()
+ fun_l24_n937
+end
+
+def fun_l23_n895()
+ fun_l24_n33
+end
+
+def fun_l23_n896()
+ fun_l24_n354
+end
+
+def fun_l23_n897()
+ fun_l24_n1
+end
+
+def fun_l23_n898()
+ fun_l24_n142
+end
+
+def fun_l23_n899()
+ fun_l24_n514
+end
+
+def fun_l23_n900()
+ fun_l24_n869
+end
+
+def fun_l23_n901()
+ fun_l24_n126
+end
+
+def fun_l23_n902()
+ fun_l24_n713
+end
+
+def fun_l23_n903()
+ fun_l24_n568
+end
+
+def fun_l23_n904()
+ fun_l24_n433
+end
+
+def fun_l23_n905()
+ fun_l24_n864
+end
+
+def fun_l23_n906()
+ fun_l24_n129
+end
+
+def fun_l23_n907()
+ fun_l24_n255
+end
+
+def fun_l23_n908()
+ fun_l24_n896
+end
+
+def fun_l23_n909()
+ fun_l24_n997
+end
+
+def fun_l23_n910()
+ fun_l24_n849
+end
+
+def fun_l23_n911()
+ fun_l24_n120
+end
+
+def fun_l23_n912()
+ fun_l24_n165
+end
+
+def fun_l23_n913()
+ fun_l24_n637
+end
+
+def fun_l23_n914()
+ fun_l24_n624
+end
+
+def fun_l23_n915()
+ fun_l24_n120
+end
+
+def fun_l23_n916()
+ fun_l24_n637
+end
+
+def fun_l23_n917()
+ fun_l24_n863
+end
+
+def fun_l23_n918()
+ fun_l24_n202
+end
+
+def fun_l23_n919()
+ fun_l24_n844
+end
+
+def fun_l23_n920()
+ fun_l24_n226
+end
+
+def fun_l23_n921()
+ fun_l24_n726
+end
+
+def fun_l23_n922()
+ fun_l24_n277
+end
+
+def fun_l23_n923()
+ fun_l24_n375
+end
+
+def fun_l23_n924()
+ fun_l24_n601
+end
+
+def fun_l23_n925()
+ fun_l24_n118
+end
+
+def fun_l23_n926()
+ fun_l24_n661
+end
+
+def fun_l23_n927()
+ fun_l24_n360
+end
+
+def fun_l23_n928()
+ fun_l24_n627
+end
+
+def fun_l23_n929()
+ fun_l24_n238
+end
+
+def fun_l23_n930()
+ fun_l24_n372
+end
+
+def fun_l23_n931()
+ fun_l24_n768
+end
+
+def fun_l23_n932()
+ fun_l24_n848
+end
+
+def fun_l23_n933()
+ fun_l24_n540
+end
+
+def fun_l23_n934()
+ fun_l24_n848
+end
+
+def fun_l23_n935()
+ fun_l24_n688
+end
+
+def fun_l23_n936()
+ fun_l24_n9
+end
+
+def fun_l23_n937()
+ fun_l24_n362
+end
+
+def fun_l23_n938()
+ fun_l24_n151
+end
+
+def fun_l23_n939()
+ fun_l24_n79
+end
+
+def fun_l23_n940()
+ fun_l24_n673
+end
+
+def fun_l23_n941()
+ fun_l24_n575
+end
+
+def fun_l23_n942()
+ fun_l24_n368
+end
+
+def fun_l23_n943()
+ fun_l24_n264
+end
+
+def fun_l23_n944()
+ fun_l24_n502
+end
+
+def fun_l23_n945()
+ fun_l24_n483
+end
+
+def fun_l23_n946()
+ fun_l24_n623
+end
+
+def fun_l23_n947()
+ fun_l24_n445
+end
+
+def fun_l23_n948()
+ fun_l24_n560
+end
+
+def fun_l23_n949()
+ fun_l24_n152
+end
+
+def fun_l23_n950()
+ fun_l24_n211
+end
+
+def fun_l23_n951()
+ fun_l24_n777
+end
+
+def fun_l23_n952()
+ fun_l24_n623
+end
+
+def fun_l23_n953()
+ fun_l24_n410
+end
+
+def fun_l23_n954()
+ fun_l24_n456
+end
+
+def fun_l23_n955()
+ fun_l24_n35
+end
+
+def fun_l23_n956()
+ fun_l24_n134
+end
+
+def fun_l23_n957()
+ fun_l24_n768
+end
+
+def fun_l23_n958()
+ fun_l24_n827
+end
+
+def fun_l23_n959()
+ fun_l24_n8
+end
+
+def fun_l23_n960()
+ fun_l24_n339
+end
+
+def fun_l23_n961()
+ fun_l24_n580
+end
+
+def fun_l23_n962()
+ fun_l24_n570
+end
+
+def fun_l23_n963()
+ fun_l24_n308
+end
+
+def fun_l23_n964()
+ fun_l24_n531
+end
+
+def fun_l23_n965()
+ fun_l24_n378
+end
+
+def fun_l23_n966()
+ fun_l24_n632
+end
+
+def fun_l23_n967()
+ fun_l24_n465
+end
+
+def fun_l23_n968()
+ fun_l24_n318
+end
+
+def fun_l23_n969()
+ fun_l24_n36
+end
+
+def fun_l23_n970()
+ fun_l24_n408
+end
+
+def fun_l23_n971()
+ fun_l24_n225
+end
+
+def fun_l23_n972()
+ fun_l24_n105
+end
+
+def fun_l23_n973()
+ fun_l24_n736
+end
+
+def fun_l23_n974()
+ fun_l24_n735
+end
+
+def fun_l23_n975()
+ fun_l24_n811
+end
+
+def fun_l23_n976()
+ fun_l24_n495
+end
+
+def fun_l23_n977()
+ fun_l24_n563
+end
+
+def fun_l23_n978()
+ fun_l24_n511
+end
+
+def fun_l23_n979()
+ fun_l24_n158
+end
+
+def fun_l23_n980()
+ fun_l24_n222
+end
+
+def fun_l23_n981()
+ fun_l24_n568
+end
+
+def fun_l23_n982()
+ fun_l24_n936
+end
+
+def fun_l23_n983()
+ fun_l24_n932
+end
+
+def fun_l23_n984()
+ fun_l24_n872
+end
+
+def fun_l23_n985()
+ fun_l24_n70
+end
+
+def fun_l23_n986()
+ fun_l24_n602
+end
+
+def fun_l23_n987()
+ fun_l24_n364
+end
+
+def fun_l23_n988()
+ fun_l24_n904
+end
+
+def fun_l23_n989()
+ fun_l24_n98
+end
+
+def fun_l23_n990()
+ fun_l24_n907
+end
+
+def fun_l23_n991()
+ fun_l24_n435
+end
+
+def fun_l23_n992()
+ fun_l24_n24
+end
+
+def fun_l23_n993()
+ fun_l24_n790
+end
+
+def fun_l23_n994()
+ fun_l24_n249
+end
+
+def fun_l23_n995()
+ fun_l24_n12
+end
+
+def fun_l23_n996()
+ fun_l24_n956
+end
+
+def fun_l23_n997()
+ fun_l24_n539
+end
+
+def fun_l23_n998()
+ fun_l24_n935
+end
+
+def fun_l23_n999()
+ fun_l24_n964
+end
+
+def fun_l24_n0()
+ fun_l25_n193
+end
+
+def fun_l24_n1()
+ fun_l25_n802
+end
+
+def fun_l24_n2()
+ fun_l25_n936
+end
+
+def fun_l24_n3()
+ fun_l25_n672
+end
+
+def fun_l24_n4()
+ fun_l25_n506
+end
+
+def fun_l24_n5()
+ fun_l25_n598
+end
+
+def fun_l24_n6()
+ fun_l25_n368
+end
+
+def fun_l24_n7()
+ fun_l25_n4
+end
+
+def fun_l24_n8()
+ fun_l25_n396
+end
+
+def fun_l24_n9()
+ fun_l25_n772
+end
+
+def fun_l24_n10()
+ fun_l25_n986
+end
+
+def fun_l24_n11()
+ fun_l25_n182
+end
+
+def fun_l24_n12()
+ fun_l25_n663
+end
+
+def fun_l24_n13()
+ fun_l25_n460
+end
+
+def fun_l24_n14()
+ fun_l25_n78
+end
+
+def fun_l24_n15()
+ fun_l25_n590
+end
+
+def fun_l24_n16()
+ fun_l25_n205
+end
+
+def fun_l24_n17()
+ fun_l25_n848
+end
+
+def fun_l24_n18()
+ fun_l25_n270
+end
+
+def fun_l24_n19()
+ fun_l25_n491
+end
+
+def fun_l24_n20()
+ fun_l25_n740
+end
+
+def fun_l24_n21()
+ fun_l25_n800
+end
+
+def fun_l24_n22()
+ fun_l25_n859
+end
+
+def fun_l24_n23()
+ fun_l25_n300
+end
+
+def fun_l24_n24()
+ fun_l25_n705
+end
+
+def fun_l24_n25()
+ fun_l25_n917
+end
+
+def fun_l24_n26()
+ fun_l25_n890
+end
+
+def fun_l24_n27()
+ fun_l25_n700
+end
+
+def fun_l24_n28()
+ fun_l25_n448
+end
+
+def fun_l24_n29()
+ fun_l25_n774
+end
+
+def fun_l24_n30()
+ fun_l25_n13
+end
+
+def fun_l24_n31()
+ fun_l25_n427
+end
+
+def fun_l24_n32()
+ fun_l25_n159
+end
+
+def fun_l24_n33()
+ fun_l25_n180
+end
+
+def fun_l24_n34()
+ fun_l25_n721
+end
+
+def fun_l24_n35()
+ fun_l25_n539
+end
+
+def fun_l24_n36()
+ fun_l25_n808
+end
+
+def fun_l24_n37()
+ fun_l25_n123
+end
+
+def fun_l24_n38()
+ fun_l25_n428
+end
+
+def fun_l24_n39()
+ fun_l25_n678
+end
+
+def fun_l24_n40()
+ fun_l25_n821
+end
+
+def fun_l24_n41()
+ fun_l25_n170
+end
+
+def fun_l24_n42()
+ fun_l25_n115
+end
+
+def fun_l24_n43()
+ fun_l25_n72
+end
+
+def fun_l24_n44()
+ fun_l25_n280
+end
+
+def fun_l24_n45()
+ fun_l25_n950
+end
+
+def fun_l24_n46()
+ fun_l25_n572
+end
+
+def fun_l24_n47()
+ fun_l25_n125
+end
+
+def fun_l24_n48()
+ fun_l25_n607
+end
+
+def fun_l24_n49()
+ fun_l25_n704
+end
+
+def fun_l24_n50()
+ fun_l25_n125
+end
+
+def fun_l24_n51()
+ fun_l25_n179
+end
+
+def fun_l24_n52()
+ fun_l25_n77
+end
+
+def fun_l24_n53()
+ fun_l25_n247
+end
+
+def fun_l24_n54()
+ fun_l25_n828
+end
+
+def fun_l24_n55()
+ fun_l25_n461
+end
+
+def fun_l24_n56()
+ fun_l25_n686
+end
+
+def fun_l24_n57()
+ fun_l25_n222
+end
+
+def fun_l24_n58()
+ fun_l25_n394
+end
+
+def fun_l24_n59()
+ fun_l25_n535
+end
+
+def fun_l24_n60()
+ fun_l25_n199
+end
+
+def fun_l24_n61()
+ fun_l25_n543
+end
+
+def fun_l24_n62()
+ fun_l25_n304
+end
+
+def fun_l24_n63()
+ fun_l25_n520
+end
+
+def fun_l24_n64()
+ fun_l25_n167
+end
+
+def fun_l24_n65()
+ fun_l25_n604
+end
+
+def fun_l24_n66()
+ fun_l25_n685
+end
+
+def fun_l24_n67()
+ fun_l25_n134
+end
+
+def fun_l24_n68()
+ fun_l25_n913
+end
+
+def fun_l24_n69()
+ fun_l25_n899
+end
+
+def fun_l24_n70()
+ fun_l25_n872
+end
+
+def fun_l24_n71()
+ fun_l25_n466
+end
+
+def fun_l24_n72()
+ fun_l25_n352
+end
+
+def fun_l24_n73()
+ fun_l25_n624
+end
+
+def fun_l24_n74()
+ fun_l25_n464
+end
+
+def fun_l24_n75()
+ fun_l25_n513
+end
+
+def fun_l24_n76()
+ fun_l25_n310
+end
+
+def fun_l24_n77()
+ fun_l25_n129
+end
+
+def fun_l24_n78()
+ fun_l25_n770
+end
+
+def fun_l24_n79()
+ fun_l25_n96
+end
+
+def fun_l24_n80()
+ fun_l25_n519
+end
+
+def fun_l24_n81()
+ fun_l25_n495
+end
+
+def fun_l24_n82()
+ fun_l25_n789
+end
+
+def fun_l24_n83()
+ fun_l25_n676
+end
+
+def fun_l24_n84()
+ fun_l25_n877
+end
+
+def fun_l24_n85()
+ fun_l25_n17
+end
+
+def fun_l24_n86()
+ fun_l25_n428
+end
+
+def fun_l24_n87()
+ fun_l25_n282
+end
+
+def fun_l24_n88()
+ fun_l25_n313
+end
+
+def fun_l24_n89()
+ fun_l25_n638
+end
+
+def fun_l24_n90()
+ fun_l25_n543
+end
+
+def fun_l24_n91()
+ fun_l25_n63
+end
+
+def fun_l24_n92()
+ fun_l25_n398
+end
+
+def fun_l24_n93()
+ fun_l25_n726
+end
+
+def fun_l24_n94()
+ fun_l25_n645
+end
+
+def fun_l24_n95()
+ fun_l25_n163
+end
+
+def fun_l24_n96()
+ fun_l25_n228
+end
+
+def fun_l24_n97()
+ fun_l25_n346
+end
+
+def fun_l24_n98()
+ fun_l25_n56
+end
+
+def fun_l24_n99()
+ fun_l25_n258
+end
+
+def fun_l24_n100()
+ fun_l25_n730
+end
+
+def fun_l24_n101()
+ fun_l25_n216
+end
+
+def fun_l24_n102()
+ fun_l25_n370
+end
+
+def fun_l24_n103()
+ fun_l25_n17
+end
+
+def fun_l24_n104()
+ fun_l25_n892
+end
+
+def fun_l24_n105()
+ fun_l25_n977
+end
+
+def fun_l24_n106()
+ fun_l25_n285
+end
+
+def fun_l24_n107()
+ fun_l25_n922
+end
+
+def fun_l24_n108()
+ fun_l25_n62
+end
+
+def fun_l24_n109()
+ fun_l25_n103
+end
+
+def fun_l24_n110()
+ fun_l25_n644
+end
+
+def fun_l24_n111()
+ fun_l25_n467
+end
+
+def fun_l24_n112()
+ fun_l25_n543
+end
+
+def fun_l24_n113()
+ fun_l25_n180
+end
+
+def fun_l24_n114()
+ fun_l25_n186
+end
+
+def fun_l24_n115()
+ fun_l25_n685
+end
+
+def fun_l24_n116()
+ fun_l25_n754
+end
+
+def fun_l24_n117()
+ fun_l25_n842
+end
+
+def fun_l24_n118()
+ fun_l25_n759
+end
+
+def fun_l24_n119()
+ fun_l25_n372
+end
+
+def fun_l24_n120()
+ fun_l25_n874
+end
+
+def fun_l24_n121()
+ fun_l25_n332
+end
+
+def fun_l24_n122()
+ fun_l25_n91
+end
+
+def fun_l24_n123()
+ fun_l25_n229
+end
+
+def fun_l24_n124()
+ fun_l25_n485
+end
+
+def fun_l24_n125()
+ fun_l25_n322
+end
+
+def fun_l24_n126()
+ fun_l25_n750
+end
+
+def fun_l24_n127()
+ fun_l25_n466
+end
+
+def fun_l24_n128()
+ fun_l25_n936
+end
+
+def fun_l24_n129()
+ fun_l25_n172
+end
+
+def fun_l24_n130()
+ fun_l25_n389
+end
+
+def fun_l24_n131()
+ fun_l25_n789
+end
+
+def fun_l24_n132()
+ fun_l25_n165
+end
+
+def fun_l24_n133()
+ fun_l25_n756
+end
+
+def fun_l24_n134()
+ fun_l25_n1
+end
+
+def fun_l24_n135()
+ fun_l25_n362
+end
+
+def fun_l24_n136()
+ fun_l25_n323
+end
+
+def fun_l24_n137()
+ fun_l25_n656
+end
+
+def fun_l24_n138()
+ fun_l25_n463
+end
+
+def fun_l24_n139()
+ fun_l25_n392
+end
+
+def fun_l24_n140()
+ fun_l25_n43
+end
+
+def fun_l24_n141()
+ fun_l25_n788
+end
+
+def fun_l24_n142()
+ fun_l25_n212
+end
+
+def fun_l24_n143()
+ fun_l25_n597
+end
+
+def fun_l24_n144()
+ fun_l25_n885
+end
+
+def fun_l24_n145()
+ fun_l25_n470
+end
+
+def fun_l24_n146()
+ fun_l25_n945
+end
+
+def fun_l24_n147()
+ fun_l25_n884
+end
+
+def fun_l24_n148()
+ fun_l25_n492
+end
+
+def fun_l24_n149()
+ fun_l25_n466
+end
+
+def fun_l24_n150()
+ fun_l25_n548
+end
+
+def fun_l24_n151()
+ fun_l25_n574
+end
+
+def fun_l24_n152()
+ fun_l25_n920
+end
+
+def fun_l24_n153()
+ fun_l25_n530
+end
+
+def fun_l24_n154()
+ fun_l25_n90
+end
+
+def fun_l24_n155()
+ fun_l25_n531
+end
+
+def fun_l24_n156()
+ fun_l25_n848
+end
+
+def fun_l24_n157()
+ fun_l25_n116
+end
+
+def fun_l24_n158()
+ fun_l25_n25
+end
+
+def fun_l24_n159()
+ fun_l25_n432
+end
+
+def fun_l24_n160()
+ fun_l25_n978
+end
+
+def fun_l24_n161()
+ fun_l25_n383
+end
+
+def fun_l24_n162()
+ fun_l25_n678
+end
+
+def fun_l24_n163()
+ fun_l25_n785
+end
+
+def fun_l24_n164()
+ fun_l25_n504
+end
+
+def fun_l24_n165()
+ fun_l25_n682
+end
+
+def fun_l24_n166()
+ fun_l25_n649
+end
+
+def fun_l24_n167()
+ fun_l25_n498
+end
+
+def fun_l24_n168()
+ fun_l25_n805
+end
+
+def fun_l24_n169()
+ fun_l25_n215
+end
+
+def fun_l24_n170()
+ fun_l25_n444
+end
+
+def fun_l24_n171()
+ fun_l25_n585
+end
+
+def fun_l24_n172()
+ fun_l25_n22
+end
+
+def fun_l24_n173()
+ fun_l25_n214
+end
+
+def fun_l24_n174()
+ fun_l25_n942
+end
+
+def fun_l24_n175()
+ fun_l25_n763
+end
+
+def fun_l24_n176()
+ fun_l25_n852
+end
+
+def fun_l24_n177()
+ fun_l25_n591
+end
+
+def fun_l24_n178()
+ fun_l25_n498
+end
+
+def fun_l24_n179()
+ fun_l25_n111
+end
+
+def fun_l24_n180()
+ fun_l25_n286
+end
+
+def fun_l24_n181()
+ fun_l25_n808
+end
+
+def fun_l24_n182()
+ fun_l25_n402
+end
+
+def fun_l24_n183()
+ fun_l25_n222
+end
+
+def fun_l24_n184()
+ fun_l25_n646
+end
+
+def fun_l24_n185()
+ fun_l25_n550
+end
+
+def fun_l24_n186()
+ fun_l25_n284
+end
+
+def fun_l24_n187()
+ fun_l25_n832
+end
+
+def fun_l24_n188()
+ fun_l25_n554
+end
+
+def fun_l24_n189()
+ fun_l25_n982
+end
+
+def fun_l24_n190()
+ fun_l25_n10
+end
+
+def fun_l24_n191()
+ fun_l25_n843
+end
+
+def fun_l24_n192()
+ fun_l25_n126
+end
+
+def fun_l24_n193()
+ fun_l25_n332
+end
+
+def fun_l24_n194()
+ fun_l25_n145
+end
+
+def fun_l24_n195()
+ fun_l25_n657
+end
+
+def fun_l24_n196()
+ fun_l25_n636
+end
+
+def fun_l24_n197()
+ fun_l25_n875
+end
+
+def fun_l24_n198()
+ fun_l25_n160
+end
+
+def fun_l24_n199()
+ fun_l25_n682
+end
+
+def fun_l24_n200()
+ fun_l25_n556
+end
+
+def fun_l24_n201()
+ fun_l25_n154
+end
+
+def fun_l24_n202()
+ fun_l25_n105
+end
+
+def fun_l24_n203()
+ fun_l25_n958
+end
+
+def fun_l24_n204()
+ fun_l25_n998
+end
+
+def fun_l24_n205()
+ fun_l25_n356
+end
+
+def fun_l24_n206()
+ fun_l25_n531
+end
+
+def fun_l24_n207()
+ fun_l25_n62
+end
+
+def fun_l24_n208()
+ fun_l25_n320
+end
+
+def fun_l24_n209()
+ fun_l25_n725
+end
+
+def fun_l24_n210()
+ fun_l25_n790
+end
+
+def fun_l24_n211()
+ fun_l25_n740
+end
+
+def fun_l24_n212()
+ fun_l25_n73
+end
+
+def fun_l24_n213()
+ fun_l25_n949
+end
+
+def fun_l24_n214()
+ fun_l25_n526
+end
+
+def fun_l24_n215()
+ fun_l25_n881
+end
+
+def fun_l24_n216()
+ fun_l25_n43
+end
+
+def fun_l24_n217()
+ fun_l25_n284
+end
+
+def fun_l24_n218()
+ fun_l25_n252
+end
+
+def fun_l24_n219()
+ fun_l25_n973
+end
+
+def fun_l24_n220()
+ fun_l25_n264
+end
+
+def fun_l24_n221()
+ fun_l25_n55
+end
+
+def fun_l24_n222()
+ fun_l25_n731
+end
+
+def fun_l24_n223()
+ fun_l25_n274
+end
+
+def fun_l24_n224()
+ fun_l25_n748
+end
+
+def fun_l24_n225()
+ fun_l25_n990
+end
+
+def fun_l24_n226()
+ fun_l25_n243
+end
+
+def fun_l24_n227()
+ fun_l25_n607
+end
+
+def fun_l24_n228()
+ fun_l25_n352
+end
+
+def fun_l24_n229()
+ fun_l25_n238
+end
+
+def fun_l24_n230()
+ fun_l25_n252
+end
+
+def fun_l24_n231()
+ fun_l25_n534
+end
+
+def fun_l24_n232()
+ fun_l25_n330
+end
+
+def fun_l24_n233()
+ fun_l25_n915
+end
+
+def fun_l24_n234()
+ fun_l25_n106
+end
+
+def fun_l24_n235()
+ fun_l25_n59
+end
+
+def fun_l24_n236()
+ fun_l25_n829
+end
+
+def fun_l24_n237()
+ fun_l25_n563
+end
+
+def fun_l24_n238()
+ fun_l25_n334
+end
+
+def fun_l24_n239()
+ fun_l25_n828
+end
+
+def fun_l24_n240()
+ fun_l25_n530
+end
+
+def fun_l24_n241()
+ fun_l25_n831
+end
+
+def fun_l24_n242()
+ fun_l25_n922
+end
+
+def fun_l24_n243()
+ fun_l25_n822
+end
+
+def fun_l24_n244()
+ fun_l25_n369
+end
+
+def fun_l24_n245()
+ fun_l25_n977
+end
+
+def fun_l24_n246()
+ fun_l25_n797
+end
+
+def fun_l24_n247()
+ fun_l25_n883
+end
+
+def fun_l24_n248()
+ fun_l25_n964
+end
+
+def fun_l24_n249()
+ fun_l25_n490
+end
+
+def fun_l24_n250()
+ fun_l25_n903
+end
+
+def fun_l24_n251()
+ fun_l25_n154
+end
+
+def fun_l24_n252()
+ fun_l25_n74
+end
+
+def fun_l24_n253()
+ fun_l25_n955
+end
+
+def fun_l24_n254()
+ fun_l25_n709
+end
+
+def fun_l24_n255()
+ fun_l25_n154
+end
+
+def fun_l24_n256()
+ fun_l25_n940
+end
+
+def fun_l24_n257()
+ fun_l25_n33
+end
+
+def fun_l24_n258()
+ fun_l25_n450
+end
+
+def fun_l24_n259()
+ fun_l25_n592
+end
+
+def fun_l24_n260()
+ fun_l25_n430
+end
+
+def fun_l24_n261()
+ fun_l25_n650
+end
+
+def fun_l24_n262()
+ fun_l25_n891
+end
+
+def fun_l24_n263()
+ fun_l25_n803
+end
+
+def fun_l24_n264()
+ fun_l25_n622
+end
+
+def fun_l24_n265()
+ fun_l25_n401
+end
+
+def fun_l24_n266()
+ fun_l25_n493
+end
+
+def fun_l24_n267()
+ fun_l25_n240
+end
+
+def fun_l24_n268()
+ fun_l25_n654
+end
+
+def fun_l24_n269()
+ fun_l25_n839
+end
+
+def fun_l24_n270()
+ fun_l25_n889
+end
+
+def fun_l24_n271()
+ fun_l25_n770
+end
+
+def fun_l24_n272()
+ fun_l25_n860
+end
+
+def fun_l24_n273()
+ fun_l25_n634
+end
+
+def fun_l24_n274()
+ fun_l25_n365
+end
+
+def fun_l24_n275()
+ fun_l25_n321
+end
+
+def fun_l24_n276()
+ fun_l25_n628
+end
+
+def fun_l24_n277()
+ fun_l25_n669
+end
+
+def fun_l24_n278()
+ fun_l25_n815
+end
+
+def fun_l24_n279()
+ fun_l25_n647
+end
+
+def fun_l24_n280()
+ fun_l25_n920
+end
+
+def fun_l24_n281()
+ fun_l25_n620
+end
+
+def fun_l24_n282()
+ fun_l25_n609
+end
+
+def fun_l24_n283()
+ fun_l25_n45
+end
+
+def fun_l24_n284()
+ fun_l25_n632
+end
+
+def fun_l24_n285()
+ fun_l25_n961
+end
+
+def fun_l24_n286()
+ fun_l25_n261
+end
+
+def fun_l24_n287()
+ fun_l25_n348
+end
+
+def fun_l24_n288()
+ fun_l25_n687
+end
+
+def fun_l24_n289()
+ fun_l25_n359
+end
+
+def fun_l24_n290()
+ fun_l25_n306
+end
+
+def fun_l24_n291()
+ fun_l25_n487
+end
+
+def fun_l24_n292()
+ fun_l25_n59
+end
+
+def fun_l24_n293()
+ fun_l25_n353
+end
+
+def fun_l24_n294()
+ fun_l25_n553
+end
+
+def fun_l24_n295()
+ fun_l25_n704
+end
+
+def fun_l24_n296()
+ fun_l25_n691
+end
+
+def fun_l24_n297()
+ fun_l25_n332
+end
+
+def fun_l24_n298()
+ fun_l25_n665
+end
+
+def fun_l24_n299()
+ fun_l25_n407
+end
+
+def fun_l24_n300()
+ fun_l25_n182
+end
+
+def fun_l24_n301()
+ fun_l25_n716
+end
+
+def fun_l24_n302()
+ fun_l25_n55
+end
+
+def fun_l24_n303()
+ fun_l25_n946
+end
+
+def fun_l24_n304()
+ fun_l25_n448
+end
+
+def fun_l24_n305()
+ fun_l25_n959
+end
+
+def fun_l24_n306()
+ fun_l25_n23
+end
+
+def fun_l24_n307()
+ fun_l25_n327
+end
+
+def fun_l24_n308()
+ fun_l25_n317
+end
+
+def fun_l24_n309()
+ fun_l25_n2
+end
+
+def fun_l24_n310()
+ fun_l25_n168
+end
+
+def fun_l24_n311()
+ fun_l25_n171
+end
+
+def fun_l24_n312()
+ fun_l25_n138
+end
+
+def fun_l24_n313()
+ fun_l25_n974
+end
+
+def fun_l24_n314()
+ fun_l25_n981
+end
+
+def fun_l24_n315()
+ fun_l25_n382
+end
+
+def fun_l24_n316()
+ fun_l25_n590
+end
+
+def fun_l24_n317()
+ fun_l25_n613
+end
+
+def fun_l24_n318()
+ fun_l25_n119
+end
+
+def fun_l24_n319()
+ fun_l25_n431
+end
+
+def fun_l24_n320()
+ fun_l25_n595
+end
+
+def fun_l24_n321()
+ fun_l25_n406
+end
+
+def fun_l24_n322()
+ fun_l25_n771
+end
+
+def fun_l24_n323()
+ fun_l25_n693
+end
+
+def fun_l24_n324()
+ fun_l25_n442
+end
+
+def fun_l24_n325()
+ fun_l25_n164
+end
+
+def fun_l24_n326()
+ fun_l25_n630
+end
+
+def fun_l24_n327()
+ fun_l25_n31
+end
+
+def fun_l24_n328()
+ fun_l25_n422
+end
+
+def fun_l24_n329()
+ fun_l25_n204
+end
+
+def fun_l24_n330()
+ fun_l25_n304
+end
+
+def fun_l24_n331()
+ fun_l25_n398
+end
+
+def fun_l24_n332()
+ fun_l25_n903
+end
+
+def fun_l24_n333()
+ fun_l25_n841
+end
+
+def fun_l24_n334()
+ fun_l25_n662
+end
+
+def fun_l24_n335()
+ fun_l25_n247
+end
+
+def fun_l24_n336()
+ fun_l25_n348
+end
+
+def fun_l24_n337()
+ fun_l25_n378
+end
+
+def fun_l24_n338()
+ fun_l25_n197
+end
+
+def fun_l24_n339()
+ fun_l25_n897
+end
+
+def fun_l24_n340()
+ fun_l25_n792
+end
+
+def fun_l24_n341()
+ fun_l25_n655
+end
+
+def fun_l24_n342()
+ fun_l25_n352
+end
+
+def fun_l24_n343()
+ fun_l25_n853
+end
+
+def fun_l24_n344()
+ fun_l25_n202
+end
+
+def fun_l24_n345()
+ fun_l25_n420
+end
+
+def fun_l24_n346()
+ fun_l25_n146
+end
+
+def fun_l24_n347()
+ fun_l25_n766
+end
+
+def fun_l24_n348()
+ fun_l25_n245
+end
+
+def fun_l24_n349()
+ fun_l25_n772
+end
+
+def fun_l24_n350()
+ fun_l25_n789
+end
+
+def fun_l24_n351()
+ fun_l25_n180
+end
+
+def fun_l24_n352()
+ fun_l25_n982
+end
+
+def fun_l24_n353()
+ fun_l25_n837
+end
+
+def fun_l24_n354()
+ fun_l25_n515
+end
+
+def fun_l24_n355()
+ fun_l25_n688
+end
+
+def fun_l24_n356()
+ fun_l25_n85
+end
+
+def fun_l24_n357()
+ fun_l25_n918
+end
+
+def fun_l24_n358()
+ fun_l25_n104
+end
+
+def fun_l24_n359()
+ fun_l25_n797
+end
+
+def fun_l24_n360()
+ fun_l25_n488
+end
+
+def fun_l24_n361()
+ fun_l25_n970
+end
+
+def fun_l24_n362()
+ fun_l25_n82
+end
+
+def fun_l24_n363()
+ fun_l25_n815
+end
+
+def fun_l24_n364()
+ fun_l25_n81
+end
+
+def fun_l24_n365()
+ fun_l25_n70
+end
+
+def fun_l24_n366()
+ fun_l25_n686
+end
+
+def fun_l24_n367()
+ fun_l25_n8
+end
+
+def fun_l24_n368()
+ fun_l25_n835
+end
+
+def fun_l24_n369()
+ fun_l25_n473
+end
+
+def fun_l24_n370()
+ fun_l25_n637
+end
+
+def fun_l24_n371()
+ fun_l25_n314
+end
+
+def fun_l24_n372()
+ fun_l25_n857
+end
+
+def fun_l24_n373()
+ fun_l25_n496
+end
+
+def fun_l24_n374()
+ fun_l25_n182
+end
+
+def fun_l24_n375()
+ fun_l25_n730
+end
+
+def fun_l24_n376()
+ fun_l25_n370
+end
+
+def fun_l24_n377()
+ fun_l25_n289
+end
+
+def fun_l24_n378()
+ fun_l25_n12
+end
+
+def fun_l24_n379()
+ fun_l25_n73
+end
+
+def fun_l24_n380()
+ fun_l25_n514
+end
+
+def fun_l24_n381()
+ fun_l25_n947
+end
+
+def fun_l24_n382()
+ fun_l25_n368
+end
+
+def fun_l24_n383()
+ fun_l25_n997
+end
+
+def fun_l24_n384()
+ fun_l25_n542
+end
+
+def fun_l24_n385()
+ fun_l25_n564
+end
+
+def fun_l24_n386()
+ fun_l25_n213
+end
+
+def fun_l24_n387()
+ fun_l25_n748
+end
+
+def fun_l24_n388()
+ fun_l25_n147
+end
+
+def fun_l24_n389()
+ fun_l25_n437
+end
+
+def fun_l24_n390()
+ fun_l25_n844
+end
+
+def fun_l24_n391()
+ fun_l25_n747
+end
+
+def fun_l24_n392()
+ fun_l25_n68
+end
+
+def fun_l24_n393()
+ fun_l25_n746
+end
+
+def fun_l24_n394()
+ fun_l25_n816
+end
+
+def fun_l24_n395()
+ fun_l25_n865
+end
+
+def fun_l24_n396()
+ fun_l25_n235
+end
+
+def fun_l24_n397()
+ fun_l25_n961
+end
+
+def fun_l24_n398()
+ fun_l25_n8
+end
+
+def fun_l24_n399()
+ fun_l25_n741
+end
+
+def fun_l24_n400()
+ fun_l25_n639
+end
+
+def fun_l24_n401()
+ fun_l25_n419
+end
+
+def fun_l24_n402()
+ fun_l25_n381
+end
+
+def fun_l24_n403()
+ fun_l25_n674
+end
+
+def fun_l24_n404()
+ fun_l25_n238
+end
+
+def fun_l24_n405()
+ fun_l25_n75
+end
+
+def fun_l24_n406()
+ fun_l25_n10
+end
+
+def fun_l24_n407()
+ fun_l25_n672
+end
+
+def fun_l24_n408()
+ fun_l25_n154
+end
+
+def fun_l24_n409()
+ fun_l25_n844
+end
+
+def fun_l24_n410()
+ fun_l25_n578
+end
+
+def fun_l24_n411()
+ fun_l25_n535
+end
+
+def fun_l24_n412()
+ fun_l25_n742
+end
+
+def fun_l24_n413()
+ fun_l25_n587
+end
+
+def fun_l24_n414()
+ fun_l25_n967
+end
+
+def fun_l24_n415()
+ fun_l25_n290
+end
+
+def fun_l24_n416()
+ fun_l25_n958
+end
+
+def fun_l24_n417()
+ fun_l25_n19
+end
+
+def fun_l24_n418()
+ fun_l25_n983
+end
+
+def fun_l24_n419()
+ fun_l25_n206
+end
+
+def fun_l24_n420()
+ fun_l25_n317
+end
+
+def fun_l24_n421()
+ fun_l25_n847
+end
+
+def fun_l24_n422()
+ fun_l25_n409
+end
+
+def fun_l24_n423()
+ fun_l25_n584
+end
+
+def fun_l24_n424()
+ fun_l25_n667
+end
+
+def fun_l24_n425()
+ fun_l25_n559
+end
+
+def fun_l24_n426()
+ fun_l25_n503
+end
+
+def fun_l24_n427()
+ fun_l25_n775
+end
+
+def fun_l24_n428()
+ fun_l25_n828
+end
+
+def fun_l24_n429()
+ fun_l25_n375
+end
+
+def fun_l24_n430()
+ fun_l25_n342
+end
+
+def fun_l24_n431()
+ fun_l25_n382
+end
+
+def fun_l24_n432()
+ fun_l25_n978
+end
+
+def fun_l24_n433()
+ fun_l25_n290
+end
+
+def fun_l24_n434()
+ fun_l25_n367
+end
+
+def fun_l24_n435()
+ fun_l25_n485
+end
+
+def fun_l24_n436()
+ fun_l25_n299
+end
+
+def fun_l24_n437()
+ fun_l25_n343
+end
+
+def fun_l24_n438()
+ fun_l25_n620
+end
+
+def fun_l24_n439()
+ fun_l25_n627
+end
+
+def fun_l24_n440()
+ fun_l25_n955
+end
+
+def fun_l24_n441()
+ fun_l25_n330
+end
+
+def fun_l24_n442()
+ fun_l25_n37
+end
+
+def fun_l24_n443()
+ fun_l25_n437
+end
+
+def fun_l24_n444()
+ fun_l25_n879
+end
+
+def fun_l24_n445()
+ fun_l25_n532
+end
+
+def fun_l24_n446()
+ fun_l25_n701
+end
+
+def fun_l24_n447()
+ fun_l25_n936
+end
+
+def fun_l24_n448()
+ fun_l25_n503
+end
+
+def fun_l24_n449()
+ fun_l25_n275
+end
+
+def fun_l24_n450()
+ fun_l25_n77
+end
+
+def fun_l24_n451()
+ fun_l25_n265
+end
+
+def fun_l24_n452()
+ fun_l25_n727
+end
+
+def fun_l24_n453()
+ fun_l25_n547
+end
+
+def fun_l24_n454()
+ fun_l25_n796
+end
+
+def fun_l24_n455()
+ fun_l25_n18
+end
+
+def fun_l24_n456()
+ fun_l25_n328
+end
+
+def fun_l24_n457()
+ fun_l25_n672
+end
+
+def fun_l24_n458()
+ fun_l25_n803
+end
+
+def fun_l24_n459()
+ fun_l25_n590
+end
+
+def fun_l24_n460()
+ fun_l25_n798
+end
+
+def fun_l24_n461()
+ fun_l25_n823
+end
+
+def fun_l24_n462()
+ fun_l25_n258
+end
+
+def fun_l24_n463()
+ fun_l25_n569
+end
+
+def fun_l24_n464()
+ fun_l25_n541
+end
+
+def fun_l24_n465()
+ fun_l25_n313
+end
+
+def fun_l24_n466()
+ fun_l25_n994
+end
+
+def fun_l24_n467()
+ fun_l25_n925
+end
+
+def fun_l24_n468()
+ fun_l25_n277
+end
+
+def fun_l24_n469()
+ fun_l25_n862
+end
+
+def fun_l24_n470()
+ fun_l25_n241
+end
+
+def fun_l24_n471()
+ fun_l25_n203
+end
+
+def fun_l24_n472()
+ fun_l25_n950
+end
+
+def fun_l24_n473()
+ fun_l25_n774
+end
+
+def fun_l24_n474()
+ fun_l25_n699
+end
+
+def fun_l24_n475()
+ fun_l25_n415
+end
+
+def fun_l24_n476()
+ fun_l25_n100
+end
+
+def fun_l24_n477()
+ fun_l25_n97
+end
+
+def fun_l24_n478()
+ fun_l25_n439
+end
+
+def fun_l24_n479()
+ fun_l25_n276
+end
+
+def fun_l24_n480()
+ fun_l25_n761
+end
+
+def fun_l24_n481()
+ fun_l25_n980
+end
+
+def fun_l24_n482()
+ fun_l25_n927
+end
+
+def fun_l24_n483()
+ fun_l25_n276
+end
+
+def fun_l24_n484()
+ fun_l25_n402
+end
+
+def fun_l24_n485()
+ fun_l25_n169
+end
+
+def fun_l24_n486()
+ fun_l25_n928
+end
+
+def fun_l24_n487()
+ fun_l25_n931
+end
+
+def fun_l24_n488()
+ fun_l25_n807
+end
+
+def fun_l24_n489()
+ fun_l25_n258
+end
+
+def fun_l24_n490()
+ fun_l25_n385
+end
+
+def fun_l24_n491()
+ fun_l25_n846
+end
+
+def fun_l24_n492()
+ fun_l25_n872
+end
+
+def fun_l24_n493()
+ fun_l25_n169
+end
+
+def fun_l24_n494()
+ fun_l25_n77
+end
+
+def fun_l24_n495()
+ fun_l25_n775
+end
+
+def fun_l24_n496()
+ fun_l25_n744
+end
+
+def fun_l24_n497()
+ fun_l25_n666
+end
+
+def fun_l24_n498()
+ fun_l25_n607
+end
+
+def fun_l24_n499()
+ fun_l25_n603
+end
+
+def fun_l24_n500()
+ fun_l25_n821
+end
+
+def fun_l24_n501()
+ fun_l25_n83
+end
+
+def fun_l24_n502()
+ fun_l25_n331
+end
+
+def fun_l24_n503()
+ fun_l25_n20
+end
+
+def fun_l24_n504()
+ fun_l25_n115
+end
+
+def fun_l24_n505()
+ fun_l25_n437
+end
+
+def fun_l24_n506()
+ fun_l25_n679
+end
+
+def fun_l24_n507()
+ fun_l25_n424
+end
+
+def fun_l24_n508()
+ fun_l25_n745
+end
+
+def fun_l24_n509()
+ fun_l25_n389
+end
+
+def fun_l24_n510()
+ fun_l25_n762
+end
+
+def fun_l24_n511()
+ fun_l25_n289
+end
+
+def fun_l24_n512()
+ fun_l25_n944
+end
+
+def fun_l24_n513()
+ fun_l25_n601
+end
+
+def fun_l24_n514()
+ fun_l25_n660
+end
+
+def fun_l24_n515()
+ fun_l25_n975
+end
+
+def fun_l24_n516()
+ fun_l25_n815
+end
+
+def fun_l24_n517()
+ fun_l25_n208
+end
+
+def fun_l24_n518()
+ fun_l25_n736
+end
+
+def fun_l24_n519()
+ fun_l25_n189
+end
+
+def fun_l24_n520()
+ fun_l25_n490
+end
+
+def fun_l24_n521()
+ fun_l25_n452
+end
+
+def fun_l24_n522()
+ fun_l25_n96
+end
+
+def fun_l24_n523()
+ fun_l25_n772
+end
+
+def fun_l24_n524()
+ fun_l25_n930
+end
+
+def fun_l24_n525()
+ fun_l25_n322
+end
+
+def fun_l24_n526()
+ fun_l25_n419
+end
+
+def fun_l24_n527()
+ fun_l25_n997
+end
+
+def fun_l24_n528()
+ fun_l25_n475
+end
+
+def fun_l24_n529()
+ fun_l25_n511
+end
+
+def fun_l24_n530()
+ fun_l25_n909
+end
+
+def fun_l24_n531()
+ fun_l25_n33
+end
+
+def fun_l24_n532()
+ fun_l25_n923
+end
+
+def fun_l24_n533()
+ fun_l25_n201
+end
+
+def fun_l24_n534()
+ fun_l25_n444
+end
+
+def fun_l24_n535()
+ fun_l25_n327
+end
+
+def fun_l24_n536()
+ fun_l25_n982
+end
+
+def fun_l24_n537()
+ fun_l25_n969
+end
+
+def fun_l24_n538()
+ fun_l25_n514
+end
+
+def fun_l24_n539()
+ fun_l25_n707
+end
+
+def fun_l24_n540()
+ fun_l25_n571
+end
+
+def fun_l24_n541()
+ fun_l25_n407
+end
+
+def fun_l24_n542()
+ fun_l25_n848
+end
+
+def fun_l24_n543()
+ fun_l25_n457
+end
+
+def fun_l24_n544()
+ fun_l25_n374
+end
+
+def fun_l24_n545()
+ fun_l25_n875
+end
+
+def fun_l24_n546()
+ fun_l25_n166
+end
+
+def fun_l24_n547()
+ fun_l25_n951
+end
+
+def fun_l24_n548()
+ fun_l25_n213
+end
+
+def fun_l24_n549()
+ fun_l25_n148
+end
+
+def fun_l24_n550()
+ fun_l25_n479
+end
+
+def fun_l24_n551()
+ fun_l25_n130
+end
+
+def fun_l24_n552()
+ fun_l25_n823
+end
+
+def fun_l24_n553()
+ fun_l25_n507
+end
+
+def fun_l24_n554()
+ fun_l25_n227
+end
+
+def fun_l24_n555()
+ fun_l25_n811
+end
+
+def fun_l24_n556()
+ fun_l25_n203
+end
+
+def fun_l24_n557()
+ fun_l25_n626
+end
+
+def fun_l24_n558()
+ fun_l25_n965
+end
+
+def fun_l24_n559()
+ fun_l25_n871
+end
+
+def fun_l24_n560()
+ fun_l25_n752
+end
+
+def fun_l24_n561()
+ fun_l25_n89
+end
+
+def fun_l24_n562()
+ fun_l25_n970
+end
+
+def fun_l24_n563()
+ fun_l25_n956
+end
+
+def fun_l24_n564()
+ fun_l25_n871
+end
+
+def fun_l24_n565()
+ fun_l25_n610
+end
+
+def fun_l24_n566()
+ fun_l25_n43
+end
+
+def fun_l24_n567()
+ fun_l25_n176
+end
+
+def fun_l24_n568()
+ fun_l25_n10
+end
+
+def fun_l24_n569()
+ fun_l25_n798
+end
+
+def fun_l24_n570()
+ fun_l25_n141
+end
+
+def fun_l24_n571()
+ fun_l25_n205
+end
+
+def fun_l24_n572()
+ fun_l25_n870
+end
+
+def fun_l24_n573()
+ fun_l25_n324
+end
+
+def fun_l24_n574()
+ fun_l25_n765
+end
+
+def fun_l24_n575()
+ fun_l25_n775
+end
+
+def fun_l24_n576()
+ fun_l25_n232
+end
+
+def fun_l24_n577()
+ fun_l25_n36
+end
+
+def fun_l24_n578()
+ fun_l25_n260
+end
+
+def fun_l24_n579()
+ fun_l25_n84
+end
+
+def fun_l24_n580()
+ fun_l25_n279
+end
+
+def fun_l24_n581()
+ fun_l25_n292
+end
+
+def fun_l24_n582()
+ fun_l25_n472
+end
+
+def fun_l24_n583()
+ fun_l25_n630
+end
+
+def fun_l24_n584()
+ fun_l25_n695
+end
+
+def fun_l24_n585()
+ fun_l25_n974
+end
+
+def fun_l24_n586()
+ fun_l25_n263
+end
+
+def fun_l24_n587()
+ fun_l25_n959
+end
+
+def fun_l24_n588()
+ fun_l25_n76
+end
+
+def fun_l24_n589()
+ fun_l25_n897
+end
+
+def fun_l24_n590()
+ fun_l25_n416
+end
+
+def fun_l24_n591()
+ fun_l25_n225
+end
+
+def fun_l24_n592()
+ fun_l25_n194
+end
+
+def fun_l24_n593()
+ fun_l25_n338
+end
+
+def fun_l24_n594()
+ fun_l25_n565
+end
+
+def fun_l24_n595()
+ fun_l25_n301
+end
+
+def fun_l24_n596()
+ fun_l25_n101
+end
+
+def fun_l24_n597()
+ fun_l25_n876
+end
+
+def fun_l24_n598()
+ fun_l25_n127
+end
+
+def fun_l24_n599()
+ fun_l25_n608
+end
+
+def fun_l24_n600()
+ fun_l25_n45
+end
+
+def fun_l24_n601()
+ fun_l25_n833
+end
+
+def fun_l24_n602()
+ fun_l25_n43
+end
+
+def fun_l24_n603()
+ fun_l25_n136
+end
+
+def fun_l24_n604()
+ fun_l25_n916
+end
+
+def fun_l24_n605()
+ fun_l25_n686
+end
+
+def fun_l24_n606()
+ fun_l25_n574
+end
+
+def fun_l24_n607()
+ fun_l25_n164
+end
+
+def fun_l24_n608()
+ fun_l25_n983
+end
+
+def fun_l24_n609()
+ fun_l25_n883
+end
+
+def fun_l24_n610()
+ fun_l25_n957
+end
+
+def fun_l24_n611()
+ fun_l25_n592
+end
+
+def fun_l24_n612()
+ fun_l25_n684
+end
+
+def fun_l24_n613()
+ fun_l25_n333
+end
+
+def fun_l24_n614()
+ fun_l25_n465
+end
+
+def fun_l24_n615()
+ fun_l25_n297
+end
+
+def fun_l24_n616()
+ fun_l25_n738
+end
+
+def fun_l24_n617()
+ fun_l25_n953
+end
+
+def fun_l24_n618()
+ fun_l25_n27
+end
+
+def fun_l24_n619()
+ fun_l25_n577
+end
+
+def fun_l24_n620()
+ fun_l25_n595
+end
+
+def fun_l24_n621()
+ fun_l25_n408
+end
+
+def fun_l24_n622()
+ fun_l25_n161
+end
+
+def fun_l24_n623()
+ fun_l25_n263
+end
+
+def fun_l24_n624()
+ fun_l25_n557
+end
+
+def fun_l24_n625()
+ fun_l25_n708
+end
+
+def fun_l24_n626()
+ fun_l25_n879
+end
+
+def fun_l24_n627()
+ fun_l25_n235
+end
+
+def fun_l24_n628()
+ fun_l25_n551
+end
+
+def fun_l24_n629()
+ fun_l25_n46
+end
+
+def fun_l24_n630()
+ fun_l25_n718
+end
+
+def fun_l24_n631()
+ fun_l25_n419
+end
+
+def fun_l24_n632()
+ fun_l25_n370
+end
+
+def fun_l24_n633()
+ fun_l25_n322
+end
+
+def fun_l24_n634()
+ fun_l25_n912
+end
+
+def fun_l24_n635()
+ fun_l25_n445
+end
+
+def fun_l24_n636()
+ fun_l25_n850
+end
+
+def fun_l24_n637()
+ fun_l25_n233
+end
+
+def fun_l24_n638()
+ fun_l25_n230
+end
+
+def fun_l24_n639()
+ fun_l25_n188
+end
+
+def fun_l24_n640()
+ fun_l25_n267
+end
+
+def fun_l24_n641()
+ fun_l25_n840
+end
+
+def fun_l24_n642()
+ fun_l25_n786
+end
+
+def fun_l24_n643()
+ fun_l25_n737
+end
+
+def fun_l24_n644()
+ fun_l25_n725
+end
+
+def fun_l24_n645()
+ fun_l25_n200
+end
+
+def fun_l24_n646()
+ fun_l25_n173
+end
+
+def fun_l24_n647()
+ fun_l25_n50
+end
+
+def fun_l24_n648()
+ fun_l25_n460
+end
+
+def fun_l24_n649()
+ fun_l25_n959
+end
+
+def fun_l24_n650()
+ fun_l25_n397
+end
+
+def fun_l24_n651()
+ fun_l25_n108
+end
+
+def fun_l24_n652()
+ fun_l25_n426
+end
+
+def fun_l24_n653()
+ fun_l25_n208
+end
+
+def fun_l24_n654()
+ fun_l25_n989
+end
+
+def fun_l24_n655()
+ fun_l25_n73
+end
+
+def fun_l24_n656()
+ fun_l25_n710
+end
+
+def fun_l24_n657()
+ fun_l25_n707
+end
+
+def fun_l24_n658()
+ fun_l25_n276
+end
+
+def fun_l24_n659()
+ fun_l25_n920
+end
+
+def fun_l24_n660()
+ fun_l25_n735
+end
+
+def fun_l24_n661()
+ fun_l25_n937
+end
+
+def fun_l24_n662()
+ fun_l25_n544
+end
+
+def fun_l24_n663()
+ fun_l25_n663
+end
+
+def fun_l24_n664()
+ fun_l25_n571
+end
+
+def fun_l24_n665()
+ fun_l25_n682
+end
+
+def fun_l24_n666()
+ fun_l25_n79
+end
+
+def fun_l24_n667()
+ fun_l25_n759
+end
+
+def fun_l24_n668()
+ fun_l25_n128
+end
+
+def fun_l24_n669()
+ fun_l25_n895
+end
+
+def fun_l24_n670()
+ fun_l25_n258
+end
+
+def fun_l24_n671()
+ fun_l25_n12
+end
+
+def fun_l24_n672()
+ fun_l25_n397
+end
+
+def fun_l24_n673()
+ fun_l25_n967
+end
+
+def fun_l24_n674()
+ fun_l25_n960
+end
+
+def fun_l24_n675()
+ fun_l25_n867
+end
+
+def fun_l24_n676()
+ fun_l25_n438
+end
+
+def fun_l24_n677()
+ fun_l25_n692
+end
+
+def fun_l24_n678()
+ fun_l25_n161
+end
+
+def fun_l24_n679()
+ fun_l25_n122
+end
+
+def fun_l24_n680()
+ fun_l25_n344
+end
+
+def fun_l24_n681()
+ fun_l25_n285
+end
+
+def fun_l24_n682()
+ fun_l25_n838
+end
+
+def fun_l24_n683()
+ fun_l25_n80
+end
+
+def fun_l24_n684()
+ fun_l25_n81
+end
+
+def fun_l24_n685()
+ fun_l25_n811
+end
+
+def fun_l24_n686()
+ fun_l25_n998
+end
+
+def fun_l24_n687()
+ fun_l25_n739
+end
+
+def fun_l24_n688()
+ fun_l25_n660
+end
+
+def fun_l24_n689()
+ fun_l25_n965
+end
+
+def fun_l24_n690()
+ fun_l25_n124
+end
+
+def fun_l24_n691()
+ fun_l25_n879
+end
+
+def fun_l24_n692()
+ fun_l25_n669
+end
+
+def fun_l24_n693()
+ fun_l25_n428
+end
+
+def fun_l24_n694()
+ fun_l25_n143
+end
+
+def fun_l24_n695()
+ fun_l25_n103
+end
+
+def fun_l24_n696()
+ fun_l25_n738
+end
+
+def fun_l24_n697()
+ fun_l25_n188
+end
+
+def fun_l24_n698()
+ fun_l25_n657
+end
+
+def fun_l24_n699()
+ fun_l25_n258
+end
+
+def fun_l24_n700()
+ fun_l25_n878
+end
+
+def fun_l24_n701()
+ fun_l25_n927
+end
+
+def fun_l24_n702()
+ fun_l25_n9
+end
+
+def fun_l24_n703()
+ fun_l25_n41
+end
+
+def fun_l24_n704()
+ fun_l25_n925
+end
+
+def fun_l24_n705()
+ fun_l25_n473
+end
+
+def fun_l24_n706()
+ fun_l25_n321
+end
+
+def fun_l24_n707()
+ fun_l25_n778
+end
+
+def fun_l24_n708()
+ fun_l25_n951
+end
+
+def fun_l24_n709()
+ fun_l25_n91
+end
+
+def fun_l24_n710()
+ fun_l25_n297
+end
+
+def fun_l24_n711()
+ fun_l25_n185
+end
+
+def fun_l24_n712()
+ fun_l25_n822
+end
+
+def fun_l24_n713()
+ fun_l25_n817
+end
+
+def fun_l24_n714()
+ fun_l25_n558
+end
+
+def fun_l24_n715()
+ fun_l25_n15
+end
+
+def fun_l24_n716()
+ fun_l25_n106
+end
+
+def fun_l24_n717()
+ fun_l25_n173
+end
+
+def fun_l24_n718()
+ fun_l25_n565
+end
+
+def fun_l24_n719()
+ fun_l25_n832
+end
+
+def fun_l24_n720()
+ fun_l25_n798
+end
+
+def fun_l24_n721()
+ fun_l25_n333
+end
+
+def fun_l24_n722()
+ fun_l25_n631
+end
+
+def fun_l24_n723()
+ fun_l25_n135
+end
+
+def fun_l24_n724()
+ fun_l25_n826
+end
+
+def fun_l24_n725()
+ fun_l25_n878
+end
+
+def fun_l24_n726()
+ fun_l25_n612
+end
+
+def fun_l24_n727()
+ fun_l25_n302
+end
+
+def fun_l24_n728()
+ fun_l25_n636
+end
+
+def fun_l24_n729()
+ fun_l25_n308
+end
+
+def fun_l24_n730()
+ fun_l25_n633
+end
+
+def fun_l24_n731()
+ fun_l25_n596
+end
+
+def fun_l24_n732()
+ fun_l25_n948
+end
+
+def fun_l24_n733()
+ fun_l25_n93
+end
+
+def fun_l24_n734()
+ fun_l25_n175
+end
+
+def fun_l24_n735()
+ fun_l25_n590
+end
+
+def fun_l24_n736()
+ fun_l25_n168
+end
+
+def fun_l24_n737()
+ fun_l25_n861
+end
+
+def fun_l24_n738()
+ fun_l25_n890
+end
+
+def fun_l24_n739()
+ fun_l25_n355
+end
+
+def fun_l24_n740()
+ fun_l25_n166
+end
+
+def fun_l24_n741()
+ fun_l25_n397
+end
+
+def fun_l24_n742()
+ fun_l25_n665
+end
+
+def fun_l24_n743()
+ fun_l25_n436
+end
+
+def fun_l24_n744()
+ fun_l25_n274
+end
+
+def fun_l24_n745()
+ fun_l25_n44
+end
+
+def fun_l24_n746()
+ fun_l25_n765
+end
+
+def fun_l24_n747()
+ fun_l25_n916
+end
+
+def fun_l24_n748()
+ fun_l25_n735
+end
+
+def fun_l24_n749()
+ fun_l25_n745
+end
+
+def fun_l24_n750()
+ fun_l25_n813
+end
+
+def fun_l24_n751()
+ fun_l25_n26
+end
+
+def fun_l24_n752()
+ fun_l25_n223
+end
+
+def fun_l24_n753()
+ fun_l25_n256
+end
+
+def fun_l24_n754()
+ fun_l25_n852
+end
+
+def fun_l24_n755()
+ fun_l25_n400
+end
+
+def fun_l24_n756()
+ fun_l25_n973
+end
+
+def fun_l24_n757()
+ fun_l25_n900
+end
+
+def fun_l24_n758()
+ fun_l25_n884
+end
+
+def fun_l24_n759()
+ fun_l25_n171
+end
+
+def fun_l24_n760()
+ fun_l25_n155
+end
+
+def fun_l24_n761()
+ fun_l25_n310
+end
+
+def fun_l24_n762()
+ fun_l25_n706
+end
+
+def fun_l24_n763()
+ fun_l25_n324
+end
+
+def fun_l24_n764()
+ fun_l25_n260
+end
+
+def fun_l24_n765()
+ fun_l25_n247
+end
+
+def fun_l24_n766()
+ fun_l25_n750
+end
+
+def fun_l24_n767()
+ fun_l25_n236
+end
+
+def fun_l24_n768()
+ fun_l25_n956
+end
+
+def fun_l24_n769()
+ fun_l25_n736
+end
+
+def fun_l24_n770()
+ fun_l25_n510
+end
+
+def fun_l24_n771()
+ fun_l25_n101
+end
+
+def fun_l24_n772()
+ fun_l25_n189
+end
+
+def fun_l24_n773()
+ fun_l25_n391
+end
+
+def fun_l24_n774()
+ fun_l25_n212
+end
+
+def fun_l24_n775()
+ fun_l25_n500
+end
+
+def fun_l24_n776()
+ fun_l25_n95
+end
+
+def fun_l24_n777()
+ fun_l25_n30
+end
+
+def fun_l24_n778()
+ fun_l25_n99
+end
+
+def fun_l24_n779()
+ fun_l25_n427
+end
+
+def fun_l24_n780()
+ fun_l25_n659
+end
+
+def fun_l24_n781()
+ fun_l25_n665
+end
+
+def fun_l24_n782()
+ fun_l25_n992
+end
+
+def fun_l24_n783()
+ fun_l25_n180
+end
+
+def fun_l24_n784()
+ fun_l25_n546
+end
+
+def fun_l24_n785()
+ fun_l25_n618
+end
+
+def fun_l24_n786()
+ fun_l25_n615
+end
+
+def fun_l24_n787()
+ fun_l25_n126
+end
+
+def fun_l24_n788()
+ fun_l25_n383
+end
+
+def fun_l24_n789()
+ fun_l25_n429
+end
+
+def fun_l24_n790()
+ fun_l25_n95
+end
+
+def fun_l24_n791()
+ fun_l25_n47
+end
+
+def fun_l24_n792()
+ fun_l25_n582
+end
+
+def fun_l24_n793()
+ fun_l25_n209
+end
+
+def fun_l24_n794()
+ fun_l25_n925
+end
+
+def fun_l24_n795()
+ fun_l25_n746
+end
+
+def fun_l24_n796()
+ fun_l25_n330
+end
+
+def fun_l24_n797()
+ fun_l25_n964
+end
+
+def fun_l24_n798()
+ fun_l25_n241
+end
+
+def fun_l24_n799()
+ fun_l25_n136
+end
+
+def fun_l24_n800()
+ fun_l25_n10
+end
+
+def fun_l24_n801()
+ fun_l25_n255
+end
+
+def fun_l24_n802()
+ fun_l25_n481
+end
+
+def fun_l24_n803()
+ fun_l25_n697
+end
+
+def fun_l24_n804()
+ fun_l25_n275
+end
+
+def fun_l24_n805()
+ fun_l25_n389
+end
+
+def fun_l24_n806()
+ fun_l25_n540
+end
+
+def fun_l24_n807()
+ fun_l25_n182
+end
+
+def fun_l24_n808()
+ fun_l25_n894
+end
+
+def fun_l24_n809()
+ fun_l25_n339
+end
+
+def fun_l24_n810()
+ fun_l25_n409
+end
+
+def fun_l24_n811()
+ fun_l25_n106
+end
+
+def fun_l24_n812()
+ fun_l25_n297
+end
+
+def fun_l24_n813()
+ fun_l25_n477
+end
+
+def fun_l24_n814()
+ fun_l25_n431
+end
+
+def fun_l24_n815()
+ fun_l25_n507
+end
+
+def fun_l24_n816()
+ fun_l25_n311
+end
+
+def fun_l24_n817()
+ fun_l25_n350
+end
+
+def fun_l24_n818()
+ fun_l25_n486
+end
+
+def fun_l24_n819()
+ fun_l25_n872
+end
+
+def fun_l24_n820()
+ fun_l25_n21
+end
+
+def fun_l24_n821()
+ fun_l25_n108
+end
+
+def fun_l24_n822()
+ fun_l25_n383
+end
+
+def fun_l24_n823()
+ fun_l25_n389
+end
+
+def fun_l24_n824()
+ fun_l25_n901
+end
+
+def fun_l24_n825()
+ fun_l25_n94
+end
+
+def fun_l24_n826()
+ fun_l25_n122
+end
+
+def fun_l24_n827()
+ fun_l25_n399
+end
+
+def fun_l24_n828()
+ fun_l25_n424
+end
+
+def fun_l24_n829()
+ fun_l25_n59
+end
+
+def fun_l24_n830()
+ fun_l25_n477
+end
+
+def fun_l24_n831()
+ fun_l25_n766
+end
+
+def fun_l24_n832()
+ fun_l25_n340
+end
+
+def fun_l24_n833()
+ fun_l25_n925
+end
+
+def fun_l24_n834()
+ fun_l25_n993
+end
+
+def fun_l24_n835()
+ fun_l25_n444
+end
+
+def fun_l24_n836()
+ fun_l25_n580
+end
+
+def fun_l24_n837()
+ fun_l25_n997
+end
+
+def fun_l24_n838()
+ fun_l25_n651
+end
+
+def fun_l24_n839()
+ fun_l25_n991
+end
+
+def fun_l24_n840()
+ fun_l25_n850
+end
+
+def fun_l24_n841()
+ fun_l25_n563
+end
+
+def fun_l24_n842()
+ fun_l25_n175
+end
+
+def fun_l24_n843()
+ fun_l25_n77
+end
+
+def fun_l24_n844()
+ fun_l25_n300
+end
+
+def fun_l24_n845()
+ fun_l25_n510
+end
+
+def fun_l24_n846()
+ fun_l25_n871
+end
+
+def fun_l24_n847()
+ fun_l25_n437
+end
+
+def fun_l24_n848()
+ fun_l25_n609
+end
+
+def fun_l24_n849()
+ fun_l25_n505
+end
+
+def fun_l24_n850()
+ fun_l25_n989
+end
+
+def fun_l24_n851()
+ fun_l25_n595
+end
+
+def fun_l24_n852()
+ fun_l25_n917
+end
+
+def fun_l24_n853()
+ fun_l25_n39
+end
+
+def fun_l24_n854()
+ fun_l25_n795
+end
+
+def fun_l24_n855()
+ fun_l25_n242
+end
+
+def fun_l24_n856()
+ fun_l25_n220
+end
+
+def fun_l24_n857()
+ fun_l25_n537
+end
+
+def fun_l24_n858()
+ fun_l25_n790
+end
+
+def fun_l24_n859()
+ fun_l25_n160
+end
+
+def fun_l24_n860()
+ fun_l25_n685
+end
+
+def fun_l24_n861()
+ fun_l25_n665
+end
+
+def fun_l24_n862()
+ fun_l25_n448
+end
+
+def fun_l24_n863()
+ fun_l25_n75
+end
+
+def fun_l24_n864()
+ fun_l25_n293
+end
+
+def fun_l24_n865()
+ fun_l25_n721
+end
+
+def fun_l24_n866()
+ fun_l25_n113
+end
+
+def fun_l24_n867()
+ fun_l25_n565
+end
+
+def fun_l24_n868()
+ fun_l25_n95
+end
+
+def fun_l24_n869()
+ fun_l25_n373
+end
+
+def fun_l24_n870()
+ fun_l25_n351
+end
+
+def fun_l24_n871()
+ fun_l25_n151
+end
+
+def fun_l24_n872()
+ fun_l25_n489
+end
+
+def fun_l24_n873()
+ fun_l25_n882
+end
+
+def fun_l24_n874()
+ fun_l25_n415
+end
+
+def fun_l24_n875()
+ fun_l25_n237
+end
+
+def fun_l24_n876()
+ fun_l25_n59
+end
+
+def fun_l24_n877()
+ fun_l25_n747
+end
+
+def fun_l24_n878()
+ fun_l25_n897
+end
+
+def fun_l24_n879()
+ fun_l25_n746
+end
+
+def fun_l24_n880()
+ fun_l25_n695
+end
+
+def fun_l24_n881()
+ fun_l25_n924
+end
+
+def fun_l24_n882()
+ fun_l25_n933
+end
+
+def fun_l24_n883()
+ fun_l25_n702
+end
+
+def fun_l24_n884()
+ fun_l25_n107
+end
+
+def fun_l24_n885()
+ fun_l25_n333
+end
+
+def fun_l24_n886()
+ fun_l25_n536
+end
+
+def fun_l24_n887()
+ fun_l25_n908
+end
+
+def fun_l24_n888()
+ fun_l25_n84
+end
+
+def fun_l24_n889()
+ fun_l25_n622
+end
+
+def fun_l24_n890()
+ fun_l25_n466
+end
+
+def fun_l24_n891()
+ fun_l25_n344
+end
+
+def fun_l24_n892()
+ fun_l25_n271
+end
+
+def fun_l24_n893()
+ fun_l25_n461
+end
+
+def fun_l24_n894()
+ fun_l25_n297
+end
+
+def fun_l24_n895()
+ fun_l25_n415
+end
+
+def fun_l24_n896()
+ fun_l25_n419
+end
+
+def fun_l24_n897()
+ fun_l25_n374
+end
+
+def fun_l24_n898()
+ fun_l25_n976
+end
+
+def fun_l24_n899()
+ fun_l25_n888
+end
+
+def fun_l24_n900()
+ fun_l25_n540
+end
+
+def fun_l24_n901()
+ fun_l25_n491
+end
+
+def fun_l24_n902()
+ fun_l25_n178
+end
+
+def fun_l24_n903()
+ fun_l25_n197
+end
+
+def fun_l24_n904()
+ fun_l25_n474
+end
+
+def fun_l24_n905()
+ fun_l25_n371
+end
+
+def fun_l24_n906()
+ fun_l25_n960
+end
+
+def fun_l24_n907()
+ fun_l25_n808
+end
+
+def fun_l24_n908()
+ fun_l25_n89
+end
+
+def fun_l24_n909()
+ fun_l25_n892
+end
+
+def fun_l24_n910()
+ fun_l25_n457
+end
+
+def fun_l24_n911()
+ fun_l25_n105
+end
+
+def fun_l24_n912()
+ fun_l25_n787
+end
+
+def fun_l24_n913()
+ fun_l25_n554
+end
+
+def fun_l24_n914()
+ fun_l25_n615
+end
+
+def fun_l24_n915()
+ fun_l25_n61
+end
+
+def fun_l24_n916()
+ fun_l25_n162
+end
+
+def fun_l24_n917()
+ fun_l25_n354
+end
+
+def fun_l24_n918()
+ fun_l25_n388
+end
+
+def fun_l24_n919()
+ fun_l25_n660
+end
+
+def fun_l24_n920()
+ fun_l25_n705
+end
+
+def fun_l24_n921()
+ fun_l25_n990
+end
+
+def fun_l24_n922()
+ fun_l25_n725
+end
+
+def fun_l24_n923()
+ fun_l25_n800
+end
+
+def fun_l24_n924()
+ fun_l25_n368
+end
+
+def fun_l24_n925()
+ fun_l25_n986
+end
+
+def fun_l24_n926()
+ fun_l25_n509
+end
+
+def fun_l24_n927()
+ fun_l25_n706
+end
+
+def fun_l24_n928()
+ fun_l25_n777
+end
+
+def fun_l24_n929()
+ fun_l25_n223
+end
+
+def fun_l24_n930()
+ fun_l25_n972
+end
+
+def fun_l24_n931()
+ fun_l25_n868
+end
+
+def fun_l24_n932()
+ fun_l25_n170
+end
+
+def fun_l24_n933()
+ fun_l25_n176
+end
+
+def fun_l24_n934()
+ fun_l25_n667
+end
+
+def fun_l24_n935()
+ fun_l25_n312
+end
+
+def fun_l24_n936()
+ fun_l25_n680
+end
+
+def fun_l24_n937()
+ fun_l25_n183
+end
+
+def fun_l24_n938()
+ fun_l25_n880
+end
+
+def fun_l24_n939()
+ fun_l25_n634
+end
+
+def fun_l24_n940()
+ fun_l25_n716
+end
+
+def fun_l24_n941()
+ fun_l25_n16
+end
+
+def fun_l24_n942()
+ fun_l25_n227
+end
+
+def fun_l24_n943()
+ fun_l25_n423
+end
+
+def fun_l24_n944()
+ fun_l25_n268
+end
+
+def fun_l24_n945()
+ fun_l25_n947
+end
+
+def fun_l24_n946()
+ fun_l25_n675
+end
+
+def fun_l24_n947()
+ fun_l25_n575
+end
+
+def fun_l24_n948()
+ fun_l25_n280
+end
+
+def fun_l24_n949()
+ fun_l25_n698
+end
+
+def fun_l24_n950()
+ fun_l25_n769
+end
+
+def fun_l24_n951()
+ fun_l25_n225
+end
+
+def fun_l24_n952()
+ fun_l25_n171
+end
+
+def fun_l24_n953()
+ fun_l25_n464
+end
+
+def fun_l24_n954()
+ fun_l25_n662
+end
+
+def fun_l24_n955()
+ fun_l25_n621
+end
+
+def fun_l24_n956()
+ fun_l25_n391
+end
+
+def fun_l24_n957()
+ fun_l25_n340
+end
+
+def fun_l24_n958()
+ fun_l25_n634
+end
+
+def fun_l24_n959()
+ fun_l25_n31
+end
+
+def fun_l24_n960()
+ fun_l25_n132
+end
+
+def fun_l24_n961()
+ fun_l25_n867
+end
+
+def fun_l24_n962()
+ fun_l25_n946
+end
+
+def fun_l24_n963()
+ fun_l25_n339
+end
+
+def fun_l24_n964()
+ fun_l25_n497
+end
+
+def fun_l24_n965()
+ fun_l25_n289
+end
+
+def fun_l24_n966()
+ fun_l25_n842
+end
+
+def fun_l24_n967()
+ fun_l25_n583
+end
+
+def fun_l24_n968()
+ fun_l25_n52
+end
+
+def fun_l24_n969()
+ fun_l25_n177
+end
+
+def fun_l24_n970()
+ fun_l25_n935
+end
+
+def fun_l24_n971()
+ fun_l25_n963
+end
+
+def fun_l24_n972()
+ fun_l25_n779
+end
+
+def fun_l24_n973()
+ fun_l25_n457
+end
+
+def fun_l24_n974()
+ fun_l25_n480
+end
+
+def fun_l24_n975()
+ fun_l25_n333
+end
+
+def fun_l24_n976()
+ fun_l25_n191
+end
+
+def fun_l24_n977()
+ fun_l25_n670
+end
+
+def fun_l24_n978()
+ fun_l25_n822
+end
+
+def fun_l24_n979()
+ fun_l25_n302
+end
+
+def fun_l24_n980()
+ fun_l25_n272
+end
+
+def fun_l24_n981()
+ fun_l25_n467
+end
+
+def fun_l24_n982()
+ fun_l25_n209
+end
+
+def fun_l24_n983()
+ fun_l25_n603
+end
+
+def fun_l24_n984()
+ fun_l25_n134
+end
+
+def fun_l24_n985()
+ fun_l25_n639
+end
+
+def fun_l24_n986()
+ fun_l25_n843
+end
+
+def fun_l24_n987()
+ fun_l25_n576
+end
+
+def fun_l24_n988()
+ fun_l25_n7
+end
+
+def fun_l24_n989()
+ fun_l25_n93
+end
+
+def fun_l24_n990()
+ fun_l25_n351
+end
+
+def fun_l24_n991()
+ fun_l25_n932
+end
+
+def fun_l24_n992()
+ fun_l25_n987
+end
+
+def fun_l24_n993()
+ fun_l25_n796
+end
+
+def fun_l24_n994()
+ fun_l25_n202
+end
+
+def fun_l24_n995()
+ fun_l25_n125
+end
+
+def fun_l24_n996()
+ fun_l25_n404
+end
+
+def fun_l24_n997()
+ fun_l25_n750
+end
+
+def fun_l24_n998()
+ fun_l25_n50
+end
+
+def fun_l24_n999()
+ fun_l25_n71
+end
+
+def fun_l25_n0()
+ fun_l26_n73
+end
+
+def fun_l25_n1()
+ fun_l26_n572
+end
+
+def fun_l25_n2()
+ fun_l26_n639
+end
+
+def fun_l25_n3()
+ fun_l26_n292
+end
+
+def fun_l25_n4()
+ fun_l26_n865
+end
+
+def fun_l25_n5()
+ fun_l26_n618
+end
+
+def fun_l25_n6()
+ fun_l26_n84
+end
+
+def fun_l25_n7()
+ fun_l26_n351
+end
+
+def fun_l25_n8()
+ fun_l26_n534
+end
+
+def fun_l25_n9()
+ fun_l26_n483
+end
+
+def fun_l25_n10()
+ fun_l26_n589
+end
+
+def fun_l25_n11()
+ fun_l26_n450
+end
+
+def fun_l25_n12()
+ fun_l26_n948
+end
+
+def fun_l25_n13()
+ fun_l26_n819
+end
+
+def fun_l25_n14()
+ fun_l26_n845
+end
+
+def fun_l25_n15()
+ fun_l26_n544
+end
+
+def fun_l25_n16()
+ fun_l26_n254
+end
+
+def fun_l25_n17()
+ fun_l26_n71
+end
+
+def fun_l25_n18()
+ fun_l26_n640
+end
+
+def fun_l25_n19()
+ fun_l26_n885
+end
+
+def fun_l25_n20()
+ fun_l26_n725
+end
+
+def fun_l25_n21()
+ fun_l26_n798
+end
+
+def fun_l25_n22()
+ fun_l26_n838
+end
+
+def fun_l25_n23()
+ fun_l26_n835
+end
+
+def fun_l25_n24()
+ fun_l26_n170
+end
+
+def fun_l25_n25()
+ fun_l26_n3
+end
+
+def fun_l25_n26()
+ fun_l26_n910
+end
+
+def fun_l25_n27()
+ fun_l26_n575
+end
+
+def fun_l25_n28()
+ fun_l26_n834
+end
+
+def fun_l25_n29()
+ fun_l26_n767
+end
+
+def fun_l25_n30()
+ fun_l26_n375
+end
+
+def fun_l25_n31()
+ fun_l26_n781
+end
+
+def fun_l25_n32()
+ fun_l26_n173
+end
+
+def fun_l25_n33()
+ fun_l26_n382
+end
+
+def fun_l25_n34()
+ fun_l26_n974
+end
+
+def fun_l25_n35()
+ fun_l26_n14
+end
+
+def fun_l25_n36()
+ fun_l26_n730
+end
+
+def fun_l25_n37()
+ fun_l26_n253
+end
+
+def fun_l25_n38()
+ fun_l26_n405
+end
+
+def fun_l25_n39()
+ fun_l26_n903
+end
+
+def fun_l25_n40()
+ fun_l26_n621
+end
+
+def fun_l25_n41()
+ fun_l26_n309
+end
+
+def fun_l25_n42()
+ fun_l26_n572
+end
+
+def fun_l25_n43()
+ fun_l26_n857
+end
+
+def fun_l25_n44()
+ fun_l26_n769
+end
+
+def fun_l25_n45()
+ fun_l26_n371
+end
+
+def fun_l25_n46()
+ fun_l26_n866
+end
+
+def fun_l25_n47()
+ fun_l26_n279
+end
+
+def fun_l25_n48()
+ fun_l26_n360
+end
+
+def fun_l25_n49()
+ fun_l26_n80
+end
+
+def fun_l25_n50()
+ fun_l26_n101
+end
+
+def fun_l25_n51()
+ fun_l26_n32
+end
+
+def fun_l25_n52()
+ fun_l26_n815
+end
+
+def fun_l25_n53()
+ fun_l26_n599
+end
+
+def fun_l25_n54()
+ fun_l26_n999
+end
+
+def fun_l25_n55()
+ fun_l26_n264
+end
+
+def fun_l25_n56()
+ fun_l26_n941
+end
+
+def fun_l25_n57()
+ fun_l26_n735
+end
+
+def fun_l25_n58()
+ fun_l26_n563
+end
+
+def fun_l25_n59()
+ fun_l26_n439
+end
+
+def fun_l25_n60()
+ fun_l26_n326
+end
+
+def fun_l25_n61()
+ fun_l26_n577
+end
+
+def fun_l25_n62()
+ fun_l26_n174
+end
+
+def fun_l25_n63()
+ fun_l26_n839
+end
+
+def fun_l25_n64()
+ fun_l26_n238
+end
+
+def fun_l25_n65()
+ fun_l26_n953
+end
+
+def fun_l25_n66()
+ fun_l26_n940
+end
+
+def fun_l25_n67()
+ fun_l26_n349
+end
+
+def fun_l25_n68()
+ fun_l26_n675
+end
+
+def fun_l25_n69()
+ fun_l26_n376
+end
+
+def fun_l25_n70()
+ fun_l26_n653
+end
+
+def fun_l25_n71()
+ fun_l26_n377
+end
+
+def fun_l25_n72()
+ fun_l26_n977
+end
+
+def fun_l25_n73()
+ fun_l26_n487
+end
+
+def fun_l25_n74()
+ fun_l26_n722
+end
+
+def fun_l25_n75()
+ fun_l26_n18
+end
+
+def fun_l25_n76()
+ fun_l26_n539
+end
+
+def fun_l25_n77()
+ fun_l26_n825
+end
+
+def fun_l25_n78()
+ fun_l26_n990
+end
+
+def fun_l25_n79()
+ fun_l26_n554
+end
+
+def fun_l25_n80()
+ fun_l26_n715
+end
+
+def fun_l25_n81()
+ fun_l26_n67
+end
+
+def fun_l25_n82()
+ fun_l26_n143
+end
+
+def fun_l25_n83()
+ fun_l26_n99
+end
+
+def fun_l25_n84()
+ fun_l26_n703
+end
+
+def fun_l25_n85()
+ fun_l26_n277
+end
+
+def fun_l25_n86()
+ fun_l26_n283
+end
+
+def fun_l25_n87()
+ fun_l26_n74
+end
+
+def fun_l25_n88()
+ fun_l26_n680
+end
+
+def fun_l25_n89()
+ fun_l26_n269
+end
+
+def fun_l25_n90()
+ fun_l26_n255
+end
+
+def fun_l25_n91()
+ fun_l26_n974
+end
+
+def fun_l25_n92()
+ fun_l26_n109
+end
+
+def fun_l25_n93()
+ fun_l26_n672
+end
+
+def fun_l25_n94()
+ fun_l26_n418
+end
+
+def fun_l25_n95()
+ fun_l26_n75
+end
+
+def fun_l25_n96()
+ fun_l26_n500
+end
+
+def fun_l25_n97()
+ fun_l26_n286
+end
+
+def fun_l25_n98()
+ fun_l26_n890
+end
+
+def fun_l25_n99()
+ fun_l26_n161
+end
+
+def fun_l25_n100()
+ fun_l26_n16
+end
+
+def fun_l25_n101()
+ fun_l26_n742
+end
+
+def fun_l25_n102()
+ fun_l26_n592
+end
+
+def fun_l25_n103()
+ fun_l26_n600
+end
+
+def fun_l25_n104()
+ fun_l26_n665
+end
+
+def fun_l25_n105()
+ fun_l26_n721
+end
+
+def fun_l25_n106()
+ fun_l26_n461
+end
+
+def fun_l25_n107()
+ fun_l26_n818
+end
+
+def fun_l25_n108()
+ fun_l26_n132
+end
+
+def fun_l25_n109()
+ fun_l26_n245
+end
+
+def fun_l25_n110()
+ fun_l26_n511
+end
+
+def fun_l25_n111()
+ fun_l26_n386
+end
+
+def fun_l25_n112()
+ fun_l26_n77
+end
+
+def fun_l25_n113()
+ fun_l26_n329
+end
+
+def fun_l25_n114()
+ fun_l26_n157
+end
+
+def fun_l25_n115()
+ fun_l26_n220
+end
+
+def fun_l25_n116()
+ fun_l26_n880
+end
+
+def fun_l25_n117()
+ fun_l26_n799
+end
+
+def fun_l25_n118()
+ fun_l26_n879
+end
+
+def fun_l25_n119()
+ fun_l26_n639
+end
+
+def fun_l25_n120()
+ fun_l26_n257
+end
+
+def fun_l25_n121()
+ fun_l26_n921
+end
+
+def fun_l25_n122()
+ fun_l26_n115
+end
+
+def fun_l25_n123()
+ fun_l26_n569
+end
+
+def fun_l25_n124()
+ fun_l26_n504
+end
+
+def fun_l25_n125()
+ fun_l26_n962
+end
+
+def fun_l25_n126()
+ fun_l26_n854
+end
+
+def fun_l25_n127()
+ fun_l26_n619
+end
+
+def fun_l25_n128()
+ fun_l26_n657
+end
+
+def fun_l25_n129()
+ fun_l26_n389
+end
+
+def fun_l25_n130()
+ fun_l26_n515
+end
+
+def fun_l25_n131()
+ fun_l26_n253
+end
+
+def fun_l25_n132()
+ fun_l26_n311
+end
+
+def fun_l25_n133()
+ fun_l26_n587
+end
+
+def fun_l25_n134()
+ fun_l26_n802
+end
+
+def fun_l25_n135()
+ fun_l26_n29
+end
+
+def fun_l25_n136()
+ fun_l26_n324
+end
+
+def fun_l25_n137()
+ fun_l26_n892
+end
+
+def fun_l25_n138()
+ fun_l26_n871
+end
+
+def fun_l25_n139()
+ fun_l26_n748
+end
+
+def fun_l25_n140()
+ fun_l26_n7
+end
+
+def fun_l25_n141()
+ fun_l26_n77
+end
+
+def fun_l25_n142()
+ fun_l26_n948
+end
+
+def fun_l25_n143()
+ fun_l26_n624
+end
+
+def fun_l25_n144()
+ fun_l26_n908
+end
+
+def fun_l25_n145()
+ fun_l26_n362
+end
+
+def fun_l25_n146()
+ fun_l26_n653
+end
+
+def fun_l25_n147()
+ fun_l26_n806
+end
+
+def fun_l25_n148()
+ fun_l26_n959
+end
+
+def fun_l25_n149()
+ fun_l26_n677
+end
+
+def fun_l25_n150()
+ fun_l26_n697
+end
+
+def fun_l25_n151()
+ fun_l26_n12
+end
+
+def fun_l25_n152()
+ fun_l26_n67
+end
+
+def fun_l25_n153()
+ fun_l26_n451
+end
+
+def fun_l25_n154()
+ fun_l26_n887
+end
+
+def fun_l25_n155()
+ fun_l26_n908
+end
+
+def fun_l25_n156()
+ fun_l26_n382
+end
+
+def fun_l25_n157()
+ fun_l26_n977
+end
+
+def fun_l25_n158()
+ fun_l26_n62
+end
+
+def fun_l25_n159()
+ fun_l26_n307
+end
+
+def fun_l25_n160()
+ fun_l26_n583
+end
+
+def fun_l25_n161()
+ fun_l26_n291
+end
+
+def fun_l25_n162()
+ fun_l26_n736
+end
+
+def fun_l25_n163()
+ fun_l26_n954
+end
+
+def fun_l25_n164()
+ fun_l26_n414
+end
+
+def fun_l25_n165()
+ fun_l26_n945
+end
+
+def fun_l25_n166()
+ fun_l26_n947
+end
+
+def fun_l25_n167()
+ fun_l26_n639
+end
+
+def fun_l25_n168()
+ fun_l26_n875
+end
+
+def fun_l25_n169()
+ fun_l26_n994
+end
+
+def fun_l25_n170()
+ fun_l26_n855
+end
+
+def fun_l25_n171()
+ fun_l26_n539
+end
+
+def fun_l25_n172()
+ fun_l26_n108
+end
+
+def fun_l25_n173()
+ fun_l26_n806
+end
+
+def fun_l25_n174()
+ fun_l26_n838
+end
+
+def fun_l25_n175()
+ fun_l26_n688
+end
+
+def fun_l25_n176()
+ fun_l26_n696
+end
+
+def fun_l25_n177()
+ fun_l26_n979
+end
+
+def fun_l25_n178()
+ fun_l26_n261
+end
+
+def fun_l25_n179()
+ fun_l26_n266
+end
+
+def fun_l25_n180()
+ fun_l26_n907
+end
+
+def fun_l25_n181()
+ fun_l26_n622
+end
+
+def fun_l25_n182()
+ fun_l26_n42
+end
+
+def fun_l25_n183()
+ fun_l26_n840
+end
+
+def fun_l25_n184()
+ fun_l26_n125
+end
+
+def fun_l25_n185()
+ fun_l26_n402
+end
+
+def fun_l25_n186()
+ fun_l26_n401
+end
+
+def fun_l25_n187()
+ fun_l26_n410
+end
+
+def fun_l25_n188()
+ fun_l26_n552
+end
+
+def fun_l25_n189()
+ fun_l26_n528
+end
+
+def fun_l25_n190()
+ fun_l26_n171
+end
+
+def fun_l25_n191()
+ fun_l26_n787
+end
+
+def fun_l25_n192()
+ fun_l26_n453
+end
+
+def fun_l25_n193()
+ fun_l26_n107
+end
+
+def fun_l25_n194()
+ fun_l26_n171
+end
+
+def fun_l25_n195()
+ fun_l26_n159
+end
+
+def fun_l25_n196()
+ fun_l26_n801
+end
+
+def fun_l25_n197()
+ fun_l26_n569
+end
+
+def fun_l25_n198()
+ fun_l26_n899
+end
+
+def fun_l25_n199()
+ fun_l26_n434
+end
+
+def fun_l25_n200()
+ fun_l26_n943
+end
+
+def fun_l25_n201()
+ fun_l26_n455
+end
+
+def fun_l25_n202()
+ fun_l26_n239
+end
+
+def fun_l25_n203()
+ fun_l26_n892
+end
+
+def fun_l25_n204()
+ fun_l26_n332
+end
+
+def fun_l25_n205()
+ fun_l26_n95
+end
+
+def fun_l25_n206()
+ fun_l26_n735
+end
+
+def fun_l25_n207()
+ fun_l26_n517
+end
+
+def fun_l25_n208()
+ fun_l26_n41
+end
+
+def fun_l25_n209()
+ fun_l26_n827
+end
+
+def fun_l25_n210()
+ fun_l26_n557
+end
+
+def fun_l25_n211()
+ fun_l26_n184
+end
+
+def fun_l25_n212()
+ fun_l26_n123
+end
+
+def fun_l25_n213()
+ fun_l26_n476
+end
+
+def fun_l25_n214()
+ fun_l26_n346
+end
+
+def fun_l25_n215()
+ fun_l26_n720
+end
+
+def fun_l25_n216()
+ fun_l26_n905
+end
+
+def fun_l25_n217()
+ fun_l26_n911
+end
+
+def fun_l25_n218()
+ fun_l26_n317
+end
+
+def fun_l25_n219()
+ fun_l26_n930
+end
+
+def fun_l25_n220()
+ fun_l26_n539
+end
+
+def fun_l25_n221()
+ fun_l26_n173
+end
+
+def fun_l25_n222()
+ fun_l26_n441
+end
+
+def fun_l25_n223()
+ fun_l26_n345
+end
+
+def fun_l25_n224()
+ fun_l26_n463
+end
+
+def fun_l25_n225()
+ fun_l26_n568
+end
+
+def fun_l25_n226()
+ fun_l26_n783
+end
+
+def fun_l25_n227()
+ fun_l26_n359
+end
+
+def fun_l25_n228()
+ fun_l26_n523
+end
+
+def fun_l25_n229()
+ fun_l26_n895
+end
+
+def fun_l25_n230()
+ fun_l26_n159
+end
+
+def fun_l25_n231()
+ fun_l26_n259
+end
+
+def fun_l25_n232()
+ fun_l26_n373
+end
+
+def fun_l25_n233()
+ fun_l26_n471
+end
+
+def fun_l25_n234()
+ fun_l26_n448
+end
+
+def fun_l25_n235()
+ fun_l26_n139
+end
+
+def fun_l25_n236()
+ fun_l26_n795
+end
+
+def fun_l25_n237()
+ fun_l26_n492
+end
+
+def fun_l25_n238()
+ fun_l26_n292
+end
+
+def fun_l25_n239()
+ fun_l26_n253
+end
+
+def fun_l25_n240()
+ fun_l26_n870
+end
+
+def fun_l25_n241()
+ fun_l26_n504
+end
+
+def fun_l25_n242()
+ fun_l26_n315
+end
+
+def fun_l25_n243()
+ fun_l26_n542
+end
+
+def fun_l25_n244()
+ fun_l26_n368
+end
+
+def fun_l25_n245()
+ fun_l26_n954
+end
+
+def fun_l25_n246()
+ fun_l26_n589
+end
+
+def fun_l25_n247()
+ fun_l26_n102
+end
+
+def fun_l25_n248()
+ fun_l26_n839
+end
+
+def fun_l25_n249()
+ fun_l26_n493
+end
+
+def fun_l25_n250()
+ fun_l26_n90
+end
+
+def fun_l25_n251()
+ fun_l26_n974
+end
+
+def fun_l25_n252()
+ fun_l26_n878
+end
+
+def fun_l25_n253()
+ fun_l26_n205
+end
+
+def fun_l25_n254()
+ fun_l26_n485
+end
+
+def fun_l25_n255()
+ fun_l26_n976
+end
+
+def fun_l25_n256()
+ fun_l26_n397
+end
+
+def fun_l25_n257()
+ fun_l26_n593
+end
+
+def fun_l25_n258()
+ fun_l26_n925
+end
+
+def fun_l25_n259()
+ fun_l26_n223
+end
+
+def fun_l25_n260()
+ fun_l26_n491
+end
+
+def fun_l25_n261()
+ fun_l26_n441
+end
+
+def fun_l25_n262()
+ fun_l26_n472
+end
+
+def fun_l25_n263()
+ fun_l26_n357
+end
+
+def fun_l25_n264()
+ fun_l26_n90
+end
+
+def fun_l25_n265()
+ fun_l26_n124
+end
+
+def fun_l25_n266()
+ fun_l26_n607
+end
+
+def fun_l25_n267()
+ fun_l26_n484
+end
+
+def fun_l25_n268()
+ fun_l26_n448
+end
+
+def fun_l25_n269()
+ fun_l26_n456
+end
+
+def fun_l25_n270()
+ fun_l26_n108
+end
+
+def fun_l25_n271()
+ fun_l26_n268
+end
+
+def fun_l25_n272()
+ fun_l26_n250
+end
+
+def fun_l25_n273()
+ fun_l26_n354
+end
+
+def fun_l25_n274()
+ fun_l26_n234
+end
+
+def fun_l25_n275()
+ fun_l26_n833
+end
+
+def fun_l25_n276()
+ fun_l26_n404
+end
+
+def fun_l25_n277()
+ fun_l26_n296
+end
+
+def fun_l25_n278()
+ fun_l26_n640
+end
+
+def fun_l25_n279()
+ fun_l26_n633
+end
+
+def fun_l25_n280()
+ fun_l26_n119
+end
+
+def fun_l25_n281()
+ fun_l26_n272
+end
+
+def fun_l25_n282()
+ fun_l26_n4
+end
+
+def fun_l25_n283()
+ fun_l26_n217
+end
+
+def fun_l25_n284()
+ fun_l26_n923
+end
+
+def fun_l25_n285()
+ fun_l26_n911
+end
+
+def fun_l25_n286()
+ fun_l26_n332
+end
+
+def fun_l25_n287()
+ fun_l26_n83
+end
+
+def fun_l25_n288()
+ fun_l26_n396
+end
+
+def fun_l25_n289()
+ fun_l26_n423
+end
+
+def fun_l25_n290()
+ fun_l26_n182
+end
+
+def fun_l25_n291()
+ fun_l26_n69
+end
+
+def fun_l25_n292()
+ fun_l26_n348
+end
+
+def fun_l25_n293()
+ fun_l26_n85
+end
+
+def fun_l25_n294()
+ fun_l26_n727
+end
+
+def fun_l25_n295()
+ fun_l26_n488
+end
+
+def fun_l25_n296()
+ fun_l26_n629
+end
+
+def fun_l25_n297()
+ fun_l26_n92
+end
+
+def fun_l25_n298()
+ fun_l26_n737
+end
+
+def fun_l25_n299()
+ fun_l26_n68
+end
+
+def fun_l25_n300()
+ fun_l26_n148
+end
+
+def fun_l25_n301()
+ fun_l26_n292
+end
+
+def fun_l25_n302()
+ fun_l26_n836
+end
+
+def fun_l25_n303()
+ fun_l26_n992
+end
+
+def fun_l25_n304()
+ fun_l26_n894
+end
+
+def fun_l25_n305()
+ fun_l26_n850
+end
+
+def fun_l25_n306()
+ fun_l26_n63
+end
+
+def fun_l25_n307()
+ fun_l26_n321
+end
+
+def fun_l25_n308()
+ fun_l26_n497
+end
+
+def fun_l25_n309()
+ fun_l26_n757
+end
+
+def fun_l25_n310()
+ fun_l26_n331
+end
+
+def fun_l25_n311()
+ fun_l26_n522
+end
+
+def fun_l25_n312()
+ fun_l26_n815
+end
+
+def fun_l25_n313()
+ fun_l26_n545
+end
+
+def fun_l25_n314()
+ fun_l26_n78
+end
+
+def fun_l25_n315()
+ fun_l26_n474
+end
+
+def fun_l25_n316()
+ fun_l26_n329
+end
+
+def fun_l25_n317()
+ fun_l26_n19
+end
+
+def fun_l25_n318()
+ fun_l26_n85
+end
+
+def fun_l25_n319()
+ fun_l26_n548
+end
+
+def fun_l25_n320()
+ fun_l26_n435
+end
+
+def fun_l25_n321()
+ fun_l26_n607
+end
+
+def fun_l25_n322()
+ fun_l26_n610
+end
+
+def fun_l25_n323()
+ fun_l26_n218
+end
+
+def fun_l25_n324()
+ fun_l26_n664
+end
+
+def fun_l25_n325()
+ fun_l26_n869
+end
+
+def fun_l25_n326()
+ fun_l26_n110
+end
+
+def fun_l25_n327()
+ fun_l26_n811
+end
+
+def fun_l25_n328()
+ fun_l26_n70
+end
+
+def fun_l25_n329()
+ fun_l26_n852
+end
+
+def fun_l25_n330()
+ fun_l26_n772
+end
+
+def fun_l25_n331()
+ fun_l26_n367
+end
+
+def fun_l25_n332()
+ fun_l26_n34
+end
+
+def fun_l25_n333()
+ fun_l26_n470
+end
+
+def fun_l25_n334()
+ fun_l26_n962
+end
+
+def fun_l25_n335()
+ fun_l26_n957
+end
+
+def fun_l25_n336()
+ fun_l26_n608
+end
+
+def fun_l25_n337()
+ fun_l26_n632
+end
+
+def fun_l25_n338()
+ fun_l26_n960
+end
+
+def fun_l25_n339()
+ fun_l26_n584
+end
+
+def fun_l25_n340()
+ fun_l26_n500
+end
+
+def fun_l25_n341()
+ fun_l26_n317
+end
+
+def fun_l25_n342()
+ fun_l26_n772
+end
+
+def fun_l25_n343()
+ fun_l26_n741
+end
+
+def fun_l25_n344()
+ fun_l26_n584
+end
+
+def fun_l25_n345()
+ fun_l26_n221
+end
+
+def fun_l25_n346()
+ fun_l26_n809
+end
+
+def fun_l25_n347()
+ fun_l26_n28
+end
+
+def fun_l25_n348()
+ fun_l26_n111
+end
+
+def fun_l25_n349()
+ fun_l26_n499
+end
+
+def fun_l25_n350()
+ fun_l26_n35
+end
+
+def fun_l25_n351()
+ fun_l26_n885
+end
+
+def fun_l25_n352()
+ fun_l26_n516
+end
+
+def fun_l25_n353()
+ fun_l26_n394
+end
+
+def fun_l25_n354()
+ fun_l26_n792
+end
+
+def fun_l25_n355()
+ fun_l26_n741
+end
+
+def fun_l25_n356()
+ fun_l26_n851
+end
+
+def fun_l25_n357()
+ fun_l26_n483
+end
+
+def fun_l25_n358()
+ fun_l26_n464
+end
+
+def fun_l25_n359()
+ fun_l26_n886
+end
+
+def fun_l25_n360()
+ fun_l26_n479
+end
+
+def fun_l25_n361()
+ fun_l26_n31
+end
+
+def fun_l25_n362()
+ fun_l26_n154
+end
+
+def fun_l25_n363()
+ fun_l26_n178
+end
+
+def fun_l25_n364()
+ fun_l26_n390
+end
+
+def fun_l25_n365()
+ fun_l26_n597
+end
+
+def fun_l25_n366()
+ fun_l26_n85
+end
+
+def fun_l25_n367()
+ fun_l26_n614
+end
+
+def fun_l25_n368()
+ fun_l26_n796
+end
+
+def fun_l25_n369()
+ fun_l26_n627
+end
+
+def fun_l25_n370()
+ fun_l26_n581
+end
+
+def fun_l25_n371()
+ fun_l26_n63
+end
+
+def fun_l25_n372()
+ fun_l26_n708
+end
+
+def fun_l25_n373()
+ fun_l26_n858
+end
+
+def fun_l25_n374()
+ fun_l26_n143
+end
+
+def fun_l25_n375()
+ fun_l26_n742
+end
+
+def fun_l25_n376()
+ fun_l26_n54
+end
+
+def fun_l25_n377()
+ fun_l26_n299
+end
+
+def fun_l25_n378()
+ fun_l26_n465
+end
+
+def fun_l25_n379()
+ fun_l26_n207
+end
+
+def fun_l25_n380()
+ fun_l26_n3
+end
+
+def fun_l25_n381()
+ fun_l26_n648
+end
+
+def fun_l25_n382()
+ fun_l26_n7
+end
+
+def fun_l25_n383()
+ fun_l26_n586
+end
+
+def fun_l25_n384()
+ fun_l26_n884
+end
+
+def fun_l25_n385()
+ fun_l26_n731
+end
+
+def fun_l25_n386()
+ fun_l26_n60
+end
+
+def fun_l25_n387()
+ fun_l26_n600
+end
+
+def fun_l25_n388()
+ fun_l26_n162
+end
+
+def fun_l25_n389()
+ fun_l26_n229
+end
+
+def fun_l25_n390()
+ fun_l26_n60
+end
+
+def fun_l25_n391()
+ fun_l26_n617
+end
+
+def fun_l25_n392()
+ fun_l26_n823
+end
+
+def fun_l25_n393()
+ fun_l26_n546
+end
+
+def fun_l25_n394()
+ fun_l26_n783
+end
+
+def fun_l25_n395()
+ fun_l26_n616
+end
+
+def fun_l25_n396()
+ fun_l26_n131
+end
+
+def fun_l25_n397()
+ fun_l26_n744
+end
+
+def fun_l25_n398()
+ fun_l26_n344
+end
+
+def fun_l25_n399()
+ fun_l26_n529
+end
+
+def fun_l25_n400()
+ fun_l26_n314
+end
+
+def fun_l25_n401()
+ fun_l26_n571
+end
+
+def fun_l25_n402()
+ fun_l26_n329
+end
+
+def fun_l25_n403()
+ fun_l26_n334
+end
+
+def fun_l25_n404()
+ fun_l26_n232
+end
+
+def fun_l25_n405()
+ fun_l26_n864
+end
+
+def fun_l25_n406()
+ fun_l26_n882
+end
+
+def fun_l25_n407()
+ fun_l26_n153
+end
+
+def fun_l25_n408()
+ fun_l26_n770
+end
+
+def fun_l25_n409()
+ fun_l26_n199
+end
+
+def fun_l25_n410()
+ fun_l26_n799
+end
+
+def fun_l25_n411()
+ fun_l26_n306
+end
+
+def fun_l25_n412()
+ fun_l26_n957
+end
+
+def fun_l25_n413()
+ fun_l26_n519
+end
+
+def fun_l25_n414()
+ fun_l26_n445
+end
+
+def fun_l25_n415()
+ fun_l26_n272
+end
+
+def fun_l25_n416()
+ fun_l26_n119
+end
+
+def fun_l25_n417()
+ fun_l26_n143
+end
+
+def fun_l25_n418()
+ fun_l26_n964
+end
+
+def fun_l25_n419()
+ fun_l26_n574
+end
+
+def fun_l25_n420()
+ fun_l26_n215
+end
+
+def fun_l25_n421()
+ fun_l26_n144
+end
+
+def fun_l25_n422()
+ fun_l26_n345
+end
+
+def fun_l25_n423()
+ fun_l26_n121
+end
+
+def fun_l25_n424()
+ fun_l26_n77
+end
+
+def fun_l25_n425()
+ fun_l26_n112
+end
+
+def fun_l25_n426()
+ fun_l26_n992
+end
+
+def fun_l25_n427()
+ fun_l26_n320
+end
+
+def fun_l25_n428()
+ fun_l26_n980
+end
+
+def fun_l25_n429()
+ fun_l26_n442
+end
+
+def fun_l25_n430()
+ fun_l26_n422
+end
+
+def fun_l25_n431()
+ fun_l26_n164
+end
+
+def fun_l25_n432()
+ fun_l26_n778
+end
+
+def fun_l25_n433()
+ fun_l26_n330
+end
+
+def fun_l25_n434()
+ fun_l26_n535
+end
+
+def fun_l25_n435()
+ fun_l26_n149
+end
+
+def fun_l25_n436()
+ fun_l26_n411
+end
+
+def fun_l25_n437()
+ fun_l26_n465
+end
+
+def fun_l25_n438()
+ fun_l26_n231
+end
+
+def fun_l25_n439()
+ fun_l26_n542
+end
+
+def fun_l25_n440()
+ fun_l26_n720
+end
+
+def fun_l25_n441()
+ fun_l26_n883
+end
+
+def fun_l25_n442()
+ fun_l26_n258
+end
+
+def fun_l25_n443()
+ fun_l26_n633
+end
+
+def fun_l25_n444()
+ fun_l26_n715
+end
+
+def fun_l25_n445()
+ fun_l26_n844
+end
+
+def fun_l25_n446()
+ fun_l26_n837
+end
+
+def fun_l25_n447()
+ fun_l26_n161
+end
+
+def fun_l25_n448()
+ fun_l26_n389
+end
+
+def fun_l25_n449()
+ fun_l26_n246
+end
+
+def fun_l25_n450()
+ fun_l26_n570
+end
+
+def fun_l25_n451()
+ fun_l26_n678
+end
+
+def fun_l25_n452()
+ fun_l26_n243
+end
+
+def fun_l25_n453()
+ fun_l26_n430
+end
+
+def fun_l25_n454()
+ fun_l26_n193
+end
+
+def fun_l25_n455()
+ fun_l26_n666
+end
+
+def fun_l25_n456()
+ fun_l26_n881
+end
+
+def fun_l25_n457()
+ fun_l26_n989
+end
+
+def fun_l25_n458()
+ fun_l26_n450
+end
+
+def fun_l25_n459()
+ fun_l26_n675
+end
+
+def fun_l25_n460()
+ fun_l26_n315
+end
+
+def fun_l25_n461()
+ fun_l26_n40
+end
+
+def fun_l25_n462()
+ fun_l26_n639
+end
+
+def fun_l25_n463()
+ fun_l26_n380
+end
+
+def fun_l25_n464()
+ fun_l26_n680
+end
+
+def fun_l25_n465()
+ fun_l26_n54
+end
+
+def fun_l25_n466()
+ fun_l26_n37
+end
+
+def fun_l25_n467()
+ fun_l26_n910
+end
+
+def fun_l25_n468()
+ fun_l26_n50
+end
+
+def fun_l25_n469()
+ fun_l26_n925
+end
+
+def fun_l25_n470()
+ fun_l26_n385
+end
+
+def fun_l25_n471()
+ fun_l26_n860
+end
+
+def fun_l25_n472()
+ fun_l26_n547
+end
+
+def fun_l25_n473()
+ fun_l26_n31
+end
+
+def fun_l25_n474()
+ fun_l26_n338
+end
+
+def fun_l25_n475()
+ fun_l26_n706
+end
+
+def fun_l25_n476()
+ fun_l26_n81
+end
+
+def fun_l25_n477()
+ fun_l26_n532
+end
+
+def fun_l25_n478()
+ fun_l26_n781
+end
+
+def fun_l25_n479()
+ fun_l26_n588
+end
+
+def fun_l25_n480()
+ fun_l26_n658
+end
+
+def fun_l25_n481()
+ fun_l26_n344
+end
+
+def fun_l25_n482()
+ fun_l26_n914
+end
+
+def fun_l25_n483()
+ fun_l26_n319
+end
+
+def fun_l25_n484()
+ fun_l26_n138
+end
+
+def fun_l25_n485()
+ fun_l26_n927
+end
+
+def fun_l25_n486()
+ fun_l26_n409
+end
+
+def fun_l25_n487()
+ fun_l26_n721
+end
+
+def fun_l25_n488()
+ fun_l26_n197
+end
+
+def fun_l25_n489()
+ fun_l26_n654
+end
+
+def fun_l25_n490()
+ fun_l26_n298
+end
+
+def fun_l25_n491()
+ fun_l26_n763
+end
+
+def fun_l25_n492()
+ fun_l26_n729
+end
+
+def fun_l25_n493()
+ fun_l26_n532
+end
+
+def fun_l25_n494()
+ fun_l26_n508
+end
+
+def fun_l25_n495()
+ fun_l26_n725
+end
+
+def fun_l25_n496()
+ fun_l26_n665
+end
+
+def fun_l25_n497()
+ fun_l26_n21
+end
+
+def fun_l25_n498()
+ fun_l26_n314
+end
+
+def fun_l25_n499()
+ fun_l26_n823
+end
+
+def fun_l25_n500()
+ fun_l26_n983
+end
+
+def fun_l25_n501()
+ fun_l26_n477
+end
+
+def fun_l25_n502()
+ fun_l26_n502
+end
+
+def fun_l25_n503()
+ fun_l26_n731
+end
+
+def fun_l25_n504()
+ fun_l26_n427
+end
+
+def fun_l25_n505()
+ fun_l26_n949
+end
+
+def fun_l25_n506()
+ fun_l26_n566
+end
+
+def fun_l25_n507()
+ fun_l26_n407
+end
+
+def fun_l25_n508()
+ fun_l26_n427
+end
+
+def fun_l25_n509()
+ fun_l26_n423
+end
+
+def fun_l25_n510()
+ fun_l26_n394
+end
+
+def fun_l25_n511()
+ fun_l26_n584
+end
+
+def fun_l25_n512()
+ fun_l26_n35
+end
+
+def fun_l25_n513()
+ fun_l26_n89
+end
+
+def fun_l25_n514()
+ fun_l26_n369
+end
+
+def fun_l25_n515()
+ fun_l26_n483
+end
+
+def fun_l25_n516()
+ fun_l26_n897
+end
+
+def fun_l25_n517()
+ fun_l26_n39
+end
+
+def fun_l25_n518()
+ fun_l26_n904
+end
+
+def fun_l25_n519()
+ fun_l26_n264
+end
+
+def fun_l25_n520()
+ fun_l26_n806
+end
+
+def fun_l25_n521()
+ fun_l26_n206
+end
+
+def fun_l25_n522()
+ fun_l26_n417
+end
+
+def fun_l25_n523()
+ fun_l26_n235
+end
+
+def fun_l25_n524()
+ fun_l26_n192
+end
+
+def fun_l25_n525()
+ fun_l26_n62
+end
+
+def fun_l25_n526()
+ fun_l26_n295
+end
+
+def fun_l25_n527()
+ fun_l26_n998
+end
+
+def fun_l25_n528()
+ fun_l26_n898
+end
+
+def fun_l25_n529()
+ fun_l26_n705
+end
+
+def fun_l25_n530()
+ fun_l26_n571
+end
+
+def fun_l25_n531()
+ fun_l26_n883
+end
+
+def fun_l25_n532()
+ fun_l26_n198
+end
+
+def fun_l25_n533()
+ fun_l26_n893
+end
+
+def fun_l25_n534()
+ fun_l26_n849
+end
+
+def fun_l25_n535()
+ fun_l26_n540
+end
+
+def fun_l25_n536()
+ fun_l26_n509
+end
+
+def fun_l25_n537()
+ fun_l26_n889
+end
+
+def fun_l25_n538()
+ fun_l26_n981
+end
+
+def fun_l25_n539()
+ fun_l26_n477
+end
+
+def fun_l25_n540()
+ fun_l26_n908
+end
+
+def fun_l25_n541()
+ fun_l26_n455
+end
+
+def fun_l25_n542()
+ fun_l26_n547
+end
+
+def fun_l25_n543()
+ fun_l26_n487
+end
+
+def fun_l25_n544()
+ fun_l26_n365
+end
+
+def fun_l25_n545()
+ fun_l26_n853
+end
+
+def fun_l25_n546()
+ fun_l26_n591
+end
+
+def fun_l25_n547()
+ fun_l26_n298
+end
+
+def fun_l25_n548()
+ fun_l26_n529
+end
+
+def fun_l25_n549()
+ fun_l26_n191
+end
+
+def fun_l25_n550()
+ fun_l26_n118
+end
+
+def fun_l25_n551()
+ fun_l26_n82
+end
+
+def fun_l25_n552()
+ fun_l26_n874
+end
+
+def fun_l25_n553()
+ fun_l26_n924
+end
+
+def fun_l25_n554()
+ fun_l26_n683
+end
+
+def fun_l25_n555()
+ fun_l26_n163
+end
+
+def fun_l25_n556()
+ fun_l26_n935
+end
+
+def fun_l25_n557()
+ fun_l26_n657
+end
+
+def fun_l25_n558()
+ fun_l26_n17
+end
+
+def fun_l25_n559()
+ fun_l26_n578
+end
+
+def fun_l25_n560()
+ fun_l26_n105
+end
+
+def fun_l25_n561()
+ fun_l26_n280
+end
+
+def fun_l25_n562()
+ fun_l26_n130
+end
+
+def fun_l25_n563()
+ fun_l26_n824
+end
+
+def fun_l25_n564()
+ fun_l26_n376
+end
+
+def fun_l25_n565()
+ fun_l26_n942
+end
+
+def fun_l25_n566()
+ fun_l26_n771
+end
+
+def fun_l25_n567()
+ fun_l26_n245
+end
+
+def fun_l25_n568()
+ fun_l26_n361
+end
+
+def fun_l25_n569()
+ fun_l26_n328
+end
+
+def fun_l25_n570()
+ fun_l26_n718
+end
+
+def fun_l25_n571()
+ fun_l26_n918
+end
+
+def fun_l25_n572()
+ fun_l26_n592
+end
+
+def fun_l25_n573()
+ fun_l26_n690
+end
+
+def fun_l25_n574()
+ fun_l26_n689
+end
+
+def fun_l25_n575()
+ fun_l26_n571
+end
+
+def fun_l25_n576()
+ fun_l26_n106
+end
+
+def fun_l25_n577()
+ fun_l26_n917
+end
+
+def fun_l25_n578()
+ fun_l26_n954
+end
+
+def fun_l25_n579()
+ fun_l26_n842
+end
+
+def fun_l25_n580()
+ fun_l26_n277
+end
+
+def fun_l25_n581()
+ fun_l26_n511
+end
+
+def fun_l25_n582()
+ fun_l26_n834
+end
+
+def fun_l25_n583()
+ fun_l26_n992
+end
+
+def fun_l25_n584()
+ fun_l26_n711
+end
+
+def fun_l25_n585()
+ fun_l26_n366
+end
+
+def fun_l25_n586()
+ fun_l26_n960
+end
+
+def fun_l25_n587()
+ fun_l26_n229
+end
+
+def fun_l25_n588()
+ fun_l26_n208
+end
+
+def fun_l25_n589()
+ fun_l26_n758
+end
+
+def fun_l25_n590()
+ fun_l26_n98
+end
+
+def fun_l25_n591()
+ fun_l26_n452
+end
+
+def fun_l25_n592()
+ fun_l26_n526
+end
+
+def fun_l25_n593()
+ fun_l26_n92
+end
+
+def fun_l25_n594()
+ fun_l26_n108
+end
+
+def fun_l25_n595()
+ fun_l26_n250
+end
+
+def fun_l25_n596()
+ fun_l26_n186
+end
+
+def fun_l25_n597()
+ fun_l26_n603
+end
+
+def fun_l25_n598()
+ fun_l26_n828
+end
+
+def fun_l25_n599()
+ fun_l26_n610
+end
+
+def fun_l25_n600()
+ fun_l26_n280
+end
+
+def fun_l25_n601()
+ fun_l26_n158
+end
+
+def fun_l25_n602()
+ fun_l26_n386
+end
+
+def fun_l25_n603()
+ fun_l26_n869
+end
+
+def fun_l25_n604()
+ fun_l26_n483
+end
+
+def fun_l25_n605()
+ fun_l26_n682
+end
+
+def fun_l25_n606()
+ fun_l26_n175
+end
+
+def fun_l25_n607()
+ fun_l26_n991
+end
+
+def fun_l25_n608()
+ fun_l26_n165
+end
+
+def fun_l25_n609()
+ fun_l26_n303
+end
+
+def fun_l25_n610()
+ fun_l26_n812
+end
+
+def fun_l25_n611()
+ fun_l26_n563
+end
+
+def fun_l25_n612()
+ fun_l26_n635
+end
+
+def fun_l25_n613()
+ fun_l26_n256
+end
+
+def fun_l25_n614()
+ fun_l26_n96
+end
+
+def fun_l25_n615()
+ fun_l26_n8
+end
+
+def fun_l25_n616()
+ fun_l26_n963
+end
+
+def fun_l25_n617()
+ fun_l26_n860
+end
+
+def fun_l25_n618()
+ fun_l26_n316
+end
+
+def fun_l25_n619()
+ fun_l26_n388
+end
+
+def fun_l25_n620()
+ fun_l26_n427
+end
+
+def fun_l25_n621()
+ fun_l26_n519
+end
+
+def fun_l25_n622()
+ fun_l26_n780
+end
+
+def fun_l25_n623()
+ fun_l26_n142
+end
+
+def fun_l25_n624()
+ fun_l26_n271
+end
+
+def fun_l25_n625()
+ fun_l26_n617
+end
+
+def fun_l25_n626()
+ fun_l26_n968
+end
+
+def fun_l25_n627()
+ fun_l26_n880
+end
+
+def fun_l25_n628()
+ fun_l26_n831
+end
+
+def fun_l25_n629()
+ fun_l26_n616
+end
+
+def fun_l25_n630()
+ fun_l26_n213
+end
+
+def fun_l25_n631()
+ fun_l26_n91
+end
+
+def fun_l25_n632()
+ fun_l26_n295
+end
+
+def fun_l25_n633()
+ fun_l26_n314
+end
+
+def fun_l25_n634()
+ fun_l26_n174
+end
+
+def fun_l25_n635()
+ fun_l26_n668
+end
+
+def fun_l25_n636()
+ fun_l26_n962
+end
+
+def fun_l25_n637()
+ fun_l26_n1
+end
+
+def fun_l25_n638()
+ fun_l26_n361
+end
+
+def fun_l25_n639()
+ fun_l26_n947
+end
+
+def fun_l25_n640()
+ fun_l26_n381
+end
+
+def fun_l25_n641()
+ fun_l26_n388
+end
+
+def fun_l25_n642()
+ fun_l26_n5
+end
+
+def fun_l25_n643()
+ fun_l26_n759
+end
+
+def fun_l25_n644()
+ fun_l26_n454
+end
+
+def fun_l25_n645()
+ fun_l26_n596
+end
+
+def fun_l25_n646()
+ fun_l26_n639
+end
+
+def fun_l25_n647()
+ fun_l26_n156
+end
+
+def fun_l25_n648()
+ fun_l26_n395
+end
+
+def fun_l25_n649()
+ fun_l26_n424
+end
+
+def fun_l25_n650()
+ fun_l26_n21
+end
+
+def fun_l25_n651()
+ fun_l26_n285
+end
+
+def fun_l25_n652()
+ fun_l26_n72
+end
+
+def fun_l25_n653()
+ fun_l26_n25
+end
+
+def fun_l25_n654()
+ fun_l26_n381
+end
+
+def fun_l25_n655()
+ fun_l26_n166
+end
+
+def fun_l25_n656()
+ fun_l26_n850
+end
+
+def fun_l25_n657()
+ fun_l26_n794
+end
+
+def fun_l25_n658()
+ fun_l26_n674
+end
+
+def fun_l25_n659()
+ fun_l26_n934
+end
+
+def fun_l25_n660()
+ fun_l26_n164
+end
+
+def fun_l25_n661()
+ fun_l26_n325
+end
+
+def fun_l25_n662()
+ fun_l26_n514
+end
+
+def fun_l25_n663()
+ fun_l26_n489
+end
+
+def fun_l25_n664()
+ fun_l26_n268
+end
+
+def fun_l25_n665()
+ fun_l26_n4
+end
+
+def fun_l25_n666()
+ fun_l26_n330
+end
+
+def fun_l25_n667()
+ fun_l26_n749
+end
+
+def fun_l25_n668()
+ fun_l26_n324
+end
+
+def fun_l25_n669()
+ fun_l26_n228
+end
+
+def fun_l25_n670()
+ fun_l26_n740
+end
+
+def fun_l25_n671()
+ fun_l26_n240
+end
+
+def fun_l25_n672()
+ fun_l26_n145
+end
+
+def fun_l25_n673()
+ fun_l26_n170
+end
+
+def fun_l25_n674()
+ fun_l26_n222
+end
+
+def fun_l25_n675()
+ fun_l26_n680
+end
+
+def fun_l25_n676()
+ fun_l26_n115
+end
+
+def fun_l25_n677()
+ fun_l26_n359
+end
+
+def fun_l25_n678()
+ fun_l26_n482
+end
+
+def fun_l25_n679()
+ fun_l26_n251
+end
+
+def fun_l25_n680()
+ fun_l26_n95
+end
+
+def fun_l25_n681()
+ fun_l26_n587
+end
+
+def fun_l25_n682()
+ fun_l26_n689
+end
+
+def fun_l25_n683()
+ fun_l26_n317
+end
+
+def fun_l25_n684()
+ fun_l26_n913
+end
+
+def fun_l25_n685()
+ fun_l26_n943
+end
+
+def fun_l25_n686()
+ fun_l26_n770
+end
+
+def fun_l25_n687()
+ fun_l26_n204
+end
+
+def fun_l25_n688()
+ fun_l26_n690
+end
+
+def fun_l25_n689()
+ fun_l26_n745
+end
+
+def fun_l25_n690()
+ fun_l26_n640
+end
+
+def fun_l25_n691()
+ fun_l26_n34
+end
+
+def fun_l25_n692()
+ fun_l26_n296
+end
+
+def fun_l25_n693()
+ fun_l26_n900
+end
+
+def fun_l25_n694()
+ fun_l26_n619
+end
+
+def fun_l25_n695()
+ fun_l26_n81
+end
+
+def fun_l25_n696()
+ fun_l26_n748
+end
+
+def fun_l25_n697()
+ fun_l26_n395
+end
+
+def fun_l25_n698()
+ fun_l26_n518
+end
+
+def fun_l25_n699()
+ fun_l26_n338
+end
+
+def fun_l25_n700()
+ fun_l26_n238
+end
+
+def fun_l25_n701()
+ fun_l26_n445
+end
+
+def fun_l25_n702()
+ fun_l26_n732
+end
+
+def fun_l25_n703()
+ fun_l26_n378
+end
+
+def fun_l25_n704()
+ fun_l26_n858
+end
+
+def fun_l25_n705()
+ fun_l26_n944
+end
+
+def fun_l25_n706()
+ fun_l26_n543
+end
+
+def fun_l25_n707()
+ fun_l26_n750
+end
+
+def fun_l25_n708()
+ fun_l26_n191
+end
+
+def fun_l25_n709()
+ fun_l26_n483
+end
+
+def fun_l25_n710()
+ fun_l26_n614
+end
+
+def fun_l25_n711()
+ fun_l26_n944
+end
+
+def fun_l25_n712()
+ fun_l26_n375
+end
+
+def fun_l25_n713()
+ fun_l26_n464
+end
+
+def fun_l25_n714()
+ fun_l26_n429
+end
+
+def fun_l25_n715()
+ fun_l26_n251
+end
+
+def fun_l25_n716()
+ fun_l26_n401
+end
+
+def fun_l25_n717()
+ fun_l26_n230
+end
+
+def fun_l25_n718()
+ fun_l26_n855
+end
+
+def fun_l25_n719()
+ fun_l26_n63
+end
+
+def fun_l25_n720()
+ fun_l26_n453
+end
+
+def fun_l25_n721()
+ fun_l26_n698
+end
+
+def fun_l25_n722()
+ fun_l26_n691
+end
+
+def fun_l25_n723()
+ fun_l26_n949
+end
+
+def fun_l25_n724()
+ fun_l26_n838
+end
+
+def fun_l25_n725()
+ fun_l26_n962
+end
+
+def fun_l25_n726()
+ fun_l26_n159
+end
+
+def fun_l25_n727()
+ fun_l26_n958
+end
+
+def fun_l25_n728()
+ fun_l26_n915
+end
+
+def fun_l25_n729()
+ fun_l26_n925
+end
+
+def fun_l25_n730()
+ fun_l26_n841
+end
+
+def fun_l25_n731()
+ fun_l26_n710
+end
+
+def fun_l25_n732()
+ fun_l26_n606
+end
+
+def fun_l25_n733()
+ fun_l26_n502
+end
+
+def fun_l25_n734()
+ fun_l26_n275
+end
+
+def fun_l25_n735()
+ fun_l26_n2
+end
+
+def fun_l25_n736()
+ fun_l26_n912
+end
+
+def fun_l25_n737()
+ fun_l26_n908
+end
+
+def fun_l25_n738()
+ fun_l26_n599
+end
+
+def fun_l25_n739()
+ fun_l26_n586
+end
+
+def fun_l25_n740()
+ fun_l26_n675
+end
+
+def fun_l25_n741()
+ fun_l26_n33
+end
+
+def fun_l25_n742()
+ fun_l26_n94
+end
+
+def fun_l25_n743()
+ fun_l26_n512
+end
+
+def fun_l25_n744()
+ fun_l26_n38
+end
+
+def fun_l25_n745()
+ fun_l26_n479
+end
+
+def fun_l25_n746()
+ fun_l26_n191
+end
+
+def fun_l25_n747()
+ fun_l26_n520
+end
+
+def fun_l25_n748()
+ fun_l26_n800
+end
+
+def fun_l25_n749()
+ fun_l26_n401
+end
+
+def fun_l25_n750()
+ fun_l26_n355
+end
+
+def fun_l25_n751()
+ fun_l26_n622
+end
+
+def fun_l25_n752()
+ fun_l26_n48
+end
+
+def fun_l25_n753()
+ fun_l26_n620
+end
+
+def fun_l25_n754()
+ fun_l26_n932
+end
+
+def fun_l25_n755()
+ fun_l26_n204
+end
+
+def fun_l25_n756()
+ fun_l26_n875
+end
+
+def fun_l25_n757()
+ fun_l26_n458
+end
+
+def fun_l25_n758()
+ fun_l26_n364
+end
+
+def fun_l25_n759()
+ fun_l26_n621
+end
+
+def fun_l25_n760()
+ fun_l26_n800
+end
+
+def fun_l25_n761()
+ fun_l26_n297
+end
+
+def fun_l25_n762()
+ fun_l26_n262
+end
+
+def fun_l25_n763()
+ fun_l26_n810
+end
+
+def fun_l25_n764()
+ fun_l26_n518
+end
+
+def fun_l25_n765()
+ fun_l26_n192
+end
+
+def fun_l25_n766()
+ fun_l26_n733
+end
+
+def fun_l25_n767()
+ fun_l26_n410
+end
+
+def fun_l25_n768()
+ fun_l26_n161
+end
+
+def fun_l25_n769()
+ fun_l26_n546
+end
+
+def fun_l25_n770()
+ fun_l26_n863
+end
+
+def fun_l25_n771()
+ fun_l26_n442
+end
+
+def fun_l25_n772()
+ fun_l26_n733
+end
+
+def fun_l25_n773()
+ fun_l26_n340
+end
+
+def fun_l25_n774()
+ fun_l26_n371
+end
+
+def fun_l25_n775()
+ fun_l26_n253
+end
+
+def fun_l25_n776()
+ fun_l26_n607
+end
+
+def fun_l25_n777()
+ fun_l26_n859
+end
+
+def fun_l25_n778()
+ fun_l26_n142
+end
+
+def fun_l25_n779()
+ fun_l26_n504
+end
+
+def fun_l25_n780()
+ fun_l26_n145
+end
+
+def fun_l25_n781()
+ fun_l26_n561
+end
+
+def fun_l25_n782()
+ fun_l26_n442
+end
+
+def fun_l25_n783()
+ fun_l26_n70
+end
+
+def fun_l25_n784()
+ fun_l26_n233
+end
+
+def fun_l25_n785()
+ fun_l26_n680
+end
+
+def fun_l25_n786()
+ fun_l26_n195
+end
+
+def fun_l25_n787()
+ fun_l26_n760
+end
+
+def fun_l25_n788()
+ fun_l26_n951
+end
+
+def fun_l25_n789()
+ fun_l26_n247
+end
+
+def fun_l25_n790()
+ fun_l26_n58
+end
+
+def fun_l25_n791()
+ fun_l26_n926
+end
+
+def fun_l25_n792()
+ fun_l26_n424
+end
+
+def fun_l25_n793()
+ fun_l26_n404
+end
+
+def fun_l25_n794()
+ fun_l26_n98
+end
+
+def fun_l25_n795()
+ fun_l26_n568
+end
+
+def fun_l25_n796()
+ fun_l26_n665
+end
+
+def fun_l25_n797()
+ fun_l26_n138
+end
+
+def fun_l25_n798()
+ fun_l26_n362
+end
+
+def fun_l25_n799()
+ fun_l26_n366
+end
+
+def fun_l25_n800()
+ fun_l26_n667
+end
+
+def fun_l25_n801()
+ fun_l26_n171
+end
+
+def fun_l25_n802()
+ fun_l26_n620
+end
+
+def fun_l25_n803()
+ fun_l26_n88
+end
+
+def fun_l25_n804()
+ fun_l26_n60
+end
+
+def fun_l25_n805()
+ fun_l26_n411
+end
+
+def fun_l25_n806()
+ fun_l26_n994
+end
+
+def fun_l25_n807()
+ fun_l26_n341
+end
+
+def fun_l25_n808()
+ fun_l26_n364
+end
+
+def fun_l25_n809()
+ fun_l26_n253
+end
+
+def fun_l25_n810()
+ fun_l26_n689
+end
+
+def fun_l25_n811()
+ fun_l26_n325
+end
+
+def fun_l25_n812()
+ fun_l26_n573
+end
+
+def fun_l25_n813()
+ fun_l26_n122
+end
+
+def fun_l25_n814()
+ fun_l26_n487
+end
+
+def fun_l25_n815()
+ fun_l26_n461
+end
+
+def fun_l25_n816()
+ fun_l26_n851
+end
+
+def fun_l25_n817()
+ fun_l26_n322
+end
+
+def fun_l25_n818()
+ fun_l26_n472
+end
+
+def fun_l25_n819()
+ fun_l26_n773
+end
+
+def fun_l25_n820()
+ fun_l26_n801
+end
+
+def fun_l25_n821()
+ fun_l26_n454
+end
+
+def fun_l25_n822()
+ fun_l26_n179
+end
+
+def fun_l25_n823()
+ fun_l26_n207
+end
+
+def fun_l25_n824()
+ fun_l26_n464
+end
+
+def fun_l25_n825()
+ fun_l26_n188
+end
+
+def fun_l25_n826()
+ fun_l26_n831
+end
+
+def fun_l25_n827()
+ fun_l26_n918
+end
+
+def fun_l25_n828()
+ fun_l26_n336
+end
+
+def fun_l25_n829()
+ fun_l26_n960
+end
+
+def fun_l25_n830()
+ fun_l26_n767
+end
+
+def fun_l25_n831()
+ fun_l26_n149
+end
+
+def fun_l25_n832()
+ fun_l26_n454
+end
+
+def fun_l25_n833()
+ fun_l26_n756
+end
+
+def fun_l25_n834()
+ fun_l26_n937
+end
+
+def fun_l25_n835()
+ fun_l26_n841
+end
+
+def fun_l25_n836()
+ fun_l26_n210
+end
+
+def fun_l25_n837()
+ fun_l26_n633
+end
+
+def fun_l25_n838()
+ fun_l26_n665
+end
+
+def fun_l25_n839()
+ fun_l26_n502
+end
+
+def fun_l25_n840()
+ fun_l26_n38
+end
+
+def fun_l25_n841()
+ fun_l26_n487
+end
+
+def fun_l25_n842()
+ fun_l26_n101
+end
+
+def fun_l25_n843()
+ fun_l26_n522
+end
+
+def fun_l25_n844()
+ fun_l26_n501
+end
+
+def fun_l25_n845()
+ fun_l26_n759
+end
+
+def fun_l25_n846()
+ fun_l26_n161
+end
+
+def fun_l25_n847()
+ fun_l26_n823
+end
+
+def fun_l25_n848()
+ fun_l26_n687
+end
+
+def fun_l25_n849()
+ fun_l26_n41
+end
+
+def fun_l25_n850()
+ fun_l26_n580
+end
+
+def fun_l25_n851()
+ fun_l26_n728
+end
+
+def fun_l25_n852()
+ fun_l26_n464
+end
+
+def fun_l25_n853()
+ fun_l26_n846
+end
+
+def fun_l25_n854()
+ fun_l26_n708
+end
+
+def fun_l25_n855()
+ fun_l26_n847
+end
+
+def fun_l25_n856()
+ fun_l26_n295
+end
+
+def fun_l25_n857()
+ fun_l26_n569
+end
+
+def fun_l25_n858()
+ fun_l26_n367
+end
+
+def fun_l25_n859()
+ fun_l26_n937
+end
+
+def fun_l25_n860()
+ fun_l26_n116
+end
+
+def fun_l25_n861()
+ fun_l26_n889
+end
+
+def fun_l25_n862()
+ fun_l26_n392
+end
+
+def fun_l25_n863()
+ fun_l26_n70
+end
+
+def fun_l25_n864()
+ fun_l26_n82
+end
+
+def fun_l25_n865()
+ fun_l26_n4
+end
+
+def fun_l25_n866()
+ fun_l26_n286
+end
+
+def fun_l25_n867()
+ fun_l26_n594
+end
+
+def fun_l25_n868()
+ fun_l26_n917
+end
+
+def fun_l25_n869()
+ fun_l26_n385
+end
+
+def fun_l25_n870()
+ fun_l26_n149
+end
+
+def fun_l25_n871()
+ fun_l26_n893
+end
+
+def fun_l25_n872()
+ fun_l26_n832
+end
+
+def fun_l25_n873()
+ fun_l26_n962
+end
+
+def fun_l25_n874()
+ fun_l26_n196
+end
+
+def fun_l25_n875()
+ fun_l26_n841
+end
+
+def fun_l25_n876()
+ fun_l26_n334
+end
+
+def fun_l25_n877()
+ fun_l26_n680
+end
+
+def fun_l25_n878()
+ fun_l26_n858
+end
+
+def fun_l25_n879()
+ fun_l26_n530
+end
+
+def fun_l25_n880()
+ fun_l26_n331
+end
+
+def fun_l25_n881()
+ fun_l26_n287
+end
+
+def fun_l25_n882()
+ fun_l26_n995
+end
+
+def fun_l25_n883()
+ fun_l26_n663
+end
+
+def fun_l25_n884()
+ fun_l26_n352
+end
+
+def fun_l25_n885()
+ fun_l26_n787
+end
+
+def fun_l25_n886()
+ fun_l26_n176
+end
+
+def fun_l25_n887()
+ fun_l26_n303
+end
+
+def fun_l25_n888()
+ fun_l26_n610
+end
+
+def fun_l25_n889()
+ fun_l26_n860
+end
+
+def fun_l25_n890()
+ fun_l26_n35
+end
+
+def fun_l25_n891()
+ fun_l26_n599
+end
+
+def fun_l25_n892()
+ fun_l26_n334
+end
+
+def fun_l25_n893()
+ fun_l26_n904
+end
+
+def fun_l25_n894()
+ fun_l26_n999
+end
+
+def fun_l25_n895()
+ fun_l26_n394
+end
+
+def fun_l25_n896()
+ fun_l26_n901
+end
+
+def fun_l25_n897()
+ fun_l26_n348
+end
+
+def fun_l25_n898()
+ fun_l26_n59
+end
+
+def fun_l25_n899()
+ fun_l26_n67
+end
+
+def fun_l25_n900()
+ fun_l26_n887
+end
+
+def fun_l25_n901()
+ fun_l26_n27
+end
+
+def fun_l25_n902()
+ fun_l26_n635
+end
+
+def fun_l25_n903()
+ fun_l26_n627
+end
+
+def fun_l25_n904()
+ fun_l26_n47
+end
+
+def fun_l25_n905()
+ fun_l26_n256
+end
+
+def fun_l25_n906()
+ fun_l26_n498
+end
+
+def fun_l25_n907()
+ fun_l26_n831
+end
+
+def fun_l25_n908()
+ fun_l26_n723
+end
+
+def fun_l25_n909()
+ fun_l26_n29
+end
+
+def fun_l25_n910()
+ fun_l26_n842
+end
+
+def fun_l25_n911()
+ fun_l26_n762
+end
+
+def fun_l25_n912()
+ fun_l26_n706
+end
+
+def fun_l25_n913()
+ fun_l26_n472
+end
+
+def fun_l25_n914()
+ fun_l26_n825
+end
+
+def fun_l25_n915()
+ fun_l26_n210
+end
+
+def fun_l25_n916()
+ fun_l26_n682
+end
+
+def fun_l25_n917()
+ fun_l26_n793
+end
+
+def fun_l25_n918()
+ fun_l26_n768
+end
+
+def fun_l25_n919()
+ fun_l26_n631
+end
+
+def fun_l25_n920()
+ fun_l26_n188
+end
+
+def fun_l25_n921()
+ fun_l26_n115
+end
+
+def fun_l25_n922()
+ fun_l26_n587
+end
+
+def fun_l25_n923()
+ fun_l26_n998
+end
+
+def fun_l25_n924()
+ fun_l26_n439
+end
+
+def fun_l25_n925()
+ fun_l26_n306
+end
+
+def fun_l25_n926()
+ fun_l26_n810
+end
+
+def fun_l25_n927()
+ fun_l26_n183
+end
+
+def fun_l25_n928()
+ fun_l26_n868
+end
+
+def fun_l25_n929()
+ fun_l26_n733
+end
+
+def fun_l25_n930()
+ fun_l26_n931
+end
+
+def fun_l25_n931()
+ fun_l26_n747
+end
+
+def fun_l25_n932()
+ fun_l26_n126
+end
+
+def fun_l25_n933()
+ fun_l26_n299
+end
+
+def fun_l25_n934()
+ fun_l26_n994
+end
+
+def fun_l25_n935()
+ fun_l26_n76
+end
+
+def fun_l25_n936()
+ fun_l26_n606
+end
+
+def fun_l25_n937()
+ fun_l26_n874
+end
+
+def fun_l25_n938()
+ fun_l26_n333
+end
+
+def fun_l25_n939()
+ fun_l26_n601
+end
+
+def fun_l25_n940()
+ fun_l26_n503
+end
+
+def fun_l25_n941()
+ fun_l26_n819
+end
+
+def fun_l25_n942()
+ fun_l26_n414
+end
+
+def fun_l25_n943()
+ fun_l26_n839
+end
+
+def fun_l25_n944()
+ fun_l26_n655
+end
+
+def fun_l25_n945()
+ fun_l26_n61
+end
+
+def fun_l25_n946()
+ fun_l26_n368
+end
+
+def fun_l25_n947()
+ fun_l26_n481
+end
+
+def fun_l25_n948()
+ fun_l26_n674
+end
+
+def fun_l25_n949()
+ fun_l26_n755
+end
+
+def fun_l25_n950()
+ fun_l26_n940
+end
+
+def fun_l25_n951()
+ fun_l26_n918
+end
+
+def fun_l25_n952()
+ fun_l26_n833
+end
+
+def fun_l25_n953()
+ fun_l26_n81
+end
+
+def fun_l25_n954()
+ fun_l26_n12
+end
+
+def fun_l25_n955()
+ fun_l26_n598
+end
+
+def fun_l25_n956()
+ fun_l26_n10
+end
+
+def fun_l25_n957()
+ fun_l26_n552
+end
+
+def fun_l25_n958()
+ fun_l26_n536
+end
+
+def fun_l25_n959()
+ fun_l26_n291
+end
+
+def fun_l25_n960()
+ fun_l26_n535
+end
+
+def fun_l25_n961()
+ fun_l26_n593
+end
+
+def fun_l25_n962()
+ fun_l26_n834
+end
+
+def fun_l25_n963()
+ fun_l26_n527
+end
+
+def fun_l25_n964()
+ fun_l26_n403
+end
+
+def fun_l25_n965()
+ fun_l26_n246
+end
+
+def fun_l25_n966()
+ fun_l26_n278
+end
+
+def fun_l25_n967()
+ fun_l26_n948
+end
+
+def fun_l25_n968()
+ fun_l26_n989
+end
+
+def fun_l25_n969()
+ fun_l26_n312
+end
+
+def fun_l25_n970()
+ fun_l26_n674
+end
+
+def fun_l25_n971()
+ fun_l26_n592
+end
+
+def fun_l25_n972()
+ fun_l26_n413
+end
+
+def fun_l25_n973()
+ fun_l26_n774
+end
+
+def fun_l25_n974()
+ fun_l26_n148
+end
+
+def fun_l25_n975()
+ fun_l26_n437
+end
+
+def fun_l25_n976()
+ fun_l26_n749
+end
+
+def fun_l25_n977()
+ fun_l26_n938
+end
+
+def fun_l25_n978()
+ fun_l26_n662
+end
+
+def fun_l25_n979()
+ fun_l26_n327
+end
+
+def fun_l25_n980()
+ fun_l26_n665
+end
+
+def fun_l25_n981()
+ fun_l26_n516
+end
+
+def fun_l25_n982()
+ fun_l26_n27
+end
+
+def fun_l25_n983()
+ fun_l26_n624
+end
+
+def fun_l25_n984()
+ fun_l26_n451
+end
+
+def fun_l25_n985()
+ fun_l26_n120
+end
+
+def fun_l25_n986()
+ fun_l26_n220
+end
+
+def fun_l25_n987()
+ fun_l26_n201
+end
+
+def fun_l25_n988()
+ fun_l26_n67
+end
+
+def fun_l25_n989()
+ fun_l26_n484
+end
+
+def fun_l25_n990()
+ fun_l26_n98
+end
+
+def fun_l25_n991()
+ fun_l26_n133
+end
+
+def fun_l25_n992()
+ fun_l26_n642
+end
+
+def fun_l25_n993()
+ fun_l26_n933
+end
+
+def fun_l25_n994()
+ fun_l26_n410
+end
+
+def fun_l25_n995()
+ fun_l26_n415
+end
+
+def fun_l25_n996()
+ fun_l26_n513
+end
+
+def fun_l25_n997()
+ fun_l26_n41
+end
+
+def fun_l25_n998()
+ fun_l26_n517
+end
+
+def fun_l25_n999()
+ fun_l26_n485
+end
+
+def fun_l26_n0()
+ fun_l27_n229
+end
+
+def fun_l26_n1()
+ fun_l27_n178
+end
+
+def fun_l26_n2()
+ fun_l27_n76
+end
+
+def fun_l26_n3()
+ fun_l27_n247
+end
+
+def fun_l26_n4()
+ fun_l27_n564
+end
+
+def fun_l26_n5()
+ fun_l27_n204
+end
+
+def fun_l26_n6()
+ fun_l27_n196
+end
+
+def fun_l26_n7()
+ fun_l27_n57
+end
+
+def fun_l26_n8()
+ fun_l27_n836
+end
+
+def fun_l26_n9()
+ fun_l27_n195
+end
+
+def fun_l26_n10()
+ fun_l27_n149
+end
+
+def fun_l26_n11()
+ fun_l27_n784
+end
+
+def fun_l26_n12()
+ fun_l27_n242
+end
+
+def fun_l26_n13()
+ fun_l27_n771
+end
+
+def fun_l26_n14()
+ fun_l27_n263
+end
+
+def fun_l26_n15()
+ fun_l27_n486
+end
+
+def fun_l26_n16()
+ fun_l27_n351
+end
+
+def fun_l26_n17()
+ fun_l27_n612
+end
+
+def fun_l26_n18()
+ fun_l27_n61
+end
+
+def fun_l26_n19()
+ fun_l27_n119
+end
+
+def fun_l26_n20()
+ fun_l27_n419
+end
+
+def fun_l26_n21()
+ fun_l27_n265
+end
+
+def fun_l26_n22()
+ fun_l27_n70
+end
+
+def fun_l26_n23()
+ fun_l27_n868
+end
+
+def fun_l26_n24()
+ fun_l27_n969
+end
+
+def fun_l26_n25()
+ fun_l27_n355
+end
+
+def fun_l26_n26()
+ fun_l27_n558
+end
+
+def fun_l26_n27()
+ fun_l27_n522
+end
+
+def fun_l26_n28()
+ fun_l27_n704
+end
+
+def fun_l26_n29()
+ fun_l27_n196
+end
+
+def fun_l26_n30()
+ fun_l27_n834
+end
+
+def fun_l26_n31()
+ fun_l27_n187
+end
+
+def fun_l26_n32()
+ fun_l27_n324
+end
+
+def fun_l26_n33()
+ fun_l27_n233
+end
+
+def fun_l26_n34()
+ fun_l27_n559
+end
+
+def fun_l26_n35()
+ fun_l27_n331
+end
+
+def fun_l26_n36()
+ fun_l27_n71
+end
+
+def fun_l26_n37()
+ fun_l27_n572
+end
+
+def fun_l26_n38()
+ fun_l27_n918
+end
+
+def fun_l26_n39()
+ fun_l27_n866
+end
+
+def fun_l26_n40()
+ fun_l27_n909
+end
+
+def fun_l26_n41()
+ fun_l27_n861
+end
+
+def fun_l26_n42()
+ fun_l27_n440
+end
+
+def fun_l26_n43()
+ fun_l27_n213
+end
+
+def fun_l26_n44()
+ fun_l27_n675
+end
+
+def fun_l26_n45()
+ fun_l27_n490
+end
+
+def fun_l26_n46()
+ fun_l27_n579
+end
+
+def fun_l26_n47()
+ fun_l27_n25
+end
+
+def fun_l26_n48()
+ fun_l27_n180
+end
+
+def fun_l26_n49()
+ fun_l27_n346
+end
+
+def fun_l26_n50()
+ fun_l27_n761
+end
+
+def fun_l26_n51()
+ fun_l27_n336
+end
+
+def fun_l26_n52()
+ fun_l27_n124
+end
+
+def fun_l26_n53()
+ fun_l27_n485
+end
+
+def fun_l26_n54()
+ fun_l27_n24
+end
+
+def fun_l26_n55()
+ fun_l27_n666
+end
+
+def fun_l26_n56()
+ fun_l27_n957
+end
+
+def fun_l26_n57()
+ fun_l27_n790
+end
+
+def fun_l26_n58()
+ fun_l27_n475
+end
+
+def fun_l26_n59()
+ fun_l27_n915
+end
+
+def fun_l26_n60()
+ fun_l27_n313
+end
+
+def fun_l26_n61()
+ fun_l27_n148
+end
+
+def fun_l26_n62()
+ fun_l27_n185
+end
+
+def fun_l26_n63()
+ fun_l27_n468
+end
+
+def fun_l26_n64()
+ fun_l27_n549
+end
+
+def fun_l26_n65()
+ fun_l27_n29
+end
+
+def fun_l26_n66()
+ fun_l27_n601
+end
+
+def fun_l26_n67()
+ fun_l27_n3
+end
+
+def fun_l26_n68()
+ fun_l27_n363
+end
+
+def fun_l26_n69()
+ fun_l27_n721
+end
+
+def fun_l26_n70()
+ fun_l27_n76
+end
+
+def fun_l26_n71()
+ fun_l27_n265
+end
+
+def fun_l26_n72()
+ fun_l27_n771
+end
+
+def fun_l26_n73()
+ fun_l27_n660
+end
+
+def fun_l26_n74()
+ fun_l27_n714
+end
+
+def fun_l26_n75()
+ fun_l27_n495
+end
+
+def fun_l26_n76()
+ fun_l27_n133
+end
+
+def fun_l26_n77()
+ fun_l27_n753
+end
+
+def fun_l26_n78()
+ fun_l27_n999
+end
+
+def fun_l26_n79()
+ fun_l27_n527
+end
+
+def fun_l26_n80()
+ fun_l27_n767
+end
+
+def fun_l26_n81()
+ fun_l27_n444
+end
+
+def fun_l26_n82()
+ fun_l27_n160
+end
+
+def fun_l26_n83()
+ fun_l27_n799
+end
+
+def fun_l26_n84()
+ fun_l27_n631
+end
+
+def fun_l26_n85()
+ fun_l27_n480
+end
+
+def fun_l26_n86()
+ fun_l27_n800
+end
+
+def fun_l26_n87()
+ fun_l27_n168
+end
+
+def fun_l26_n88()
+ fun_l27_n191
+end
+
+def fun_l26_n89()
+ fun_l27_n832
+end
+
+def fun_l26_n90()
+ fun_l27_n522
+end
+
+def fun_l26_n91()
+ fun_l27_n747
+end
+
+def fun_l26_n92()
+ fun_l27_n50
+end
+
+def fun_l26_n93()
+ fun_l27_n472
+end
+
+def fun_l26_n94()
+ fun_l27_n778
+end
+
+def fun_l26_n95()
+ fun_l27_n130
+end
+
+def fun_l26_n96()
+ fun_l27_n735
+end
+
+def fun_l26_n97()
+ fun_l27_n130
+end
+
+def fun_l26_n98()
+ fun_l27_n95
+end
+
+def fun_l26_n99()
+ fun_l27_n171
+end
+
+def fun_l26_n100()
+ fun_l27_n121
+end
+
+def fun_l26_n101()
+ fun_l27_n789
+end
+
+def fun_l26_n102()
+ fun_l27_n124
+end
+
+def fun_l26_n103()
+ fun_l27_n836
+end
+
+def fun_l26_n104()
+ fun_l27_n785
+end
+
+def fun_l26_n105()
+ fun_l27_n586
+end
+
+def fun_l26_n106()
+ fun_l27_n220
+end
+
+def fun_l26_n107()
+ fun_l27_n783
+end
+
+def fun_l26_n108()
+ fun_l27_n239
+end
+
+def fun_l26_n109()
+ fun_l27_n838
+end
+
+def fun_l26_n110()
+ fun_l27_n563
+end
+
+def fun_l26_n111()
+ fun_l27_n955
+end
+
+def fun_l26_n112()
+ fun_l27_n889
+end
+
+def fun_l26_n113()
+ fun_l27_n967
+end
+
+def fun_l26_n114()
+ fun_l27_n19
+end
+
+def fun_l26_n115()
+ fun_l27_n637
+end
+
+def fun_l26_n116()
+ fun_l27_n914
+end
+
+def fun_l26_n117()
+ fun_l27_n684
+end
+
+def fun_l26_n118()
+ fun_l27_n352
+end
+
+def fun_l26_n119()
+ fun_l27_n698
+end
+
+def fun_l26_n120()
+ fun_l27_n669
+end
+
+def fun_l26_n121()
+ fun_l27_n52
+end
+
+def fun_l26_n122()
+ fun_l27_n485
+end
+
+def fun_l26_n123()
+ fun_l27_n468
+end
+
+def fun_l26_n124()
+ fun_l27_n340
+end
+
+def fun_l26_n125()
+ fun_l27_n414
+end
+
+def fun_l26_n126()
+ fun_l27_n994
+end
+
+def fun_l26_n127()
+ fun_l27_n601
+end
+
+def fun_l26_n128()
+ fun_l27_n679
+end
+
+def fun_l26_n129()
+ fun_l27_n720
+end
+
+def fun_l26_n130()
+ fun_l27_n66
+end
+
+def fun_l26_n131()
+ fun_l27_n921
+end
+
+def fun_l26_n132()
+ fun_l27_n385
+end
+
+def fun_l26_n133()
+ fun_l27_n88
+end
+
+def fun_l26_n134()
+ fun_l27_n164
+end
+
+def fun_l26_n135()
+ fun_l27_n269
+end
+
+def fun_l26_n136()
+ fun_l27_n371
+end
+
+def fun_l26_n137()
+ fun_l27_n786
+end
+
+def fun_l26_n138()
+ fun_l27_n464
+end
+
+def fun_l26_n139()
+ fun_l27_n96
+end
+
+def fun_l26_n140()
+ fun_l27_n494
+end
+
+def fun_l26_n141()
+ fun_l27_n341
+end
+
+def fun_l26_n142()
+ fun_l27_n646
+end
+
+def fun_l26_n143()
+ fun_l27_n959
+end
+
+def fun_l26_n144()
+ fun_l27_n645
+end
+
+def fun_l26_n145()
+ fun_l27_n825
+end
+
+def fun_l26_n146()
+ fun_l27_n416
+end
+
+def fun_l26_n147()
+ fun_l27_n994
+end
+
+def fun_l26_n148()
+ fun_l27_n875
+end
+
+def fun_l26_n149()
+ fun_l27_n406
+end
+
+def fun_l26_n150()
+ fun_l27_n857
+end
+
+def fun_l26_n151()
+ fun_l27_n348
+end
+
+def fun_l26_n152()
+ fun_l27_n611
+end
+
+def fun_l26_n153()
+ fun_l27_n831
+end
+
+def fun_l26_n154()
+ fun_l27_n412
+end
+
+def fun_l26_n155()
+ fun_l27_n530
+end
+
+def fun_l26_n156()
+ fun_l27_n892
+end
+
+def fun_l26_n157()
+ fun_l27_n70
+end
+
+def fun_l26_n158()
+ fun_l27_n756
+end
+
+def fun_l26_n159()
+ fun_l27_n587
+end
+
+def fun_l26_n160()
+ fun_l27_n796
+end
+
+def fun_l26_n161()
+ fun_l27_n470
+end
+
+def fun_l26_n162()
+ fun_l27_n290
+end
+
+def fun_l26_n163()
+ fun_l27_n723
+end
+
+def fun_l26_n164()
+ fun_l27_n660
+end
+
+def fun_l26_n165()
+ fun_l27_n0
+end
+
+def fun_l26_n166()
+ fun_l27_n223
+end
+
+def fun_l26_n167()
+ fun_l27_n341
+end
+
+def fun_l26_n168()
+ fun_l27_n128
+end
+
+def fun_l26_n169()
+ fun_l27_n367
+end
+
+def fun_l26_n170()
+ fun_l27_n487
+end
+
+def fun_l26_n171()
+ fun_l27_n574
+end
+
+def fun_l26_n172()
+ fun_l27_n437
+end
+
+def fun_l26_n173()
+ fun_l27_n182
+end
+
+def fun_l26_n174()
+ fun_l27_n607
+end
+
+def fun_l26_n175()
+ fun_l27_n252
+end
+
+def fun_l26_n176()
+ fun_l27_n996
+end
+
+def fun_l26_n177()
+ fun_l27_n904
+end
+
+def fun_l26_n178()
+ fun_l27_n505
+end
+
+def fun_l26_n179()
+ fun_l27_n425
+end
+
+def fun_l26_n180()
+ fun_l27_n610
+end
+
+def fun_l26_n181()
+ fun_l27_n734
+end
+
+def fun_l26_n182()
+ fun_l27_n427
+end
+
+def fun_l26_n183()
+ fun_l27_n918
+end
+
+def fun_l26_n184()
+ fun_l27_n376
+end
+
+def fun_l26_n185()
+ fun_l27_n445
+end
+
+def fun_l26_n186()
+ fun_l27_n227
+end
+
+def fun_l26_n187()
+ fun_l27_n129
+end
+
+def fun_l26_n188()
+ fun_l27_n139
+end
+
+def fun_l26_n189()
+ fun_l27_n142
+end
+
+def fun_l26_n190()
+ fun_l27_n388
+end
+
+def fun_l26_n191()
+ fun_l27_n24
+end
+
+def fun_l26_n192()
+ fun_l27_n369
+end
+
+def fun_l26_n193()
+ fun_l27_n984
+end
+
+def fun_l26_n194()
+ fun_l27_n342
+end
+
+def fun_l26_n195()
+ fun_l27_n722
+end
+
+def fun_l26_n196()
+ fun_l27_n846
+end
+
+def fun_l26_n197()
+ fun_l27_n59
+end
+
+def fun_l26_n198()
+ fun_l27_n471
+end
+
+def fun_l26_n199()
+ fun_l27_n626
+end
+
+def fun_l26_n200()
+ fun_l27_n973
+end
+
+def fun_l26_n201()
+ fun_l27_n525
+end
+
+def fun_l26_n202()
+ fun_l27_n412
+end
+
+def fun_l26_n203()
+ fun_l27_n284
+end
+
+def fun_l26_n204()
+ fun_l27_n383
+end
+
+def fun_l26_n205()
+ fun_l27_n414
+end
+
+def fun_l26_n206()
+ fun_l27_n448
+end
+
+def fun_l26_n207()
+ fun_l27_n795
+end
+
+def fun_l26_n208()
+ fun_l27_n708
+end
+
+def fun_l26_n209()
+ fun_l27_n318
+end
+
+def fun_l26_n210()
+ fun_l27_n284
+end
+
+def fun_l26_n211()
+ fun_l27_n100
+end
+
+def fun_l26_n212()
+ fun_l27_n702
+end
+
+def fun_l26_n213()
+ fun_l27_n611
+end
+
+def fun_l26_n214()
+ fun_l27_n106
+end
+
+def fun_l26_n215()
+ fun_l27_n667
+end
+
+def fun_l26_n216()
+ fun_l27_n822
+end
+
+def fun_l26_n217()
+ fun_l27_n502
+end
+
+def fun_l26_n218()
+ fun_l27_n284
+end
+
+def fun_l26_n219()
+ fun_l27_n472
+end
+
+def fun_l26_n220()
+ fun_l27_n907
+end
+
+def fun_l26_n221()
+ fun_l27_n115
+end
+
+def fun_l26_n222()
+ fun_l27_n6
+end
+
+def fun_l26_n223()
+ fun_l27_n872
+end
+
+def fun_l26_n224()
+ fun_l27_n145
+end
+
+def fun_l26_n225()
+ fun_l27_n63
+end
+
+def fun_l26_n226()
+ fun_l27_n295
+end
+
+def fun_l26_n227()
+ fun_l27_n160
+end
+
+def fun_l26_n228()
+ fun_l27_n72
+end
+
+def fun_l26_n229()
+ fun_l27_n750
+end
+
+def fun_l26_n230()
+ fun_l27_n386
+end
+
+def fun_l26_n231()
+ fun_l27_n110
+end
+
+def fun_l26_n232()
+ fun_l27_n497
+end
+
+def fun_l26_n233()
+ fun_l27_n586
+end
+
+def fun_l26_n234()
+ fun_l27_n435
+end
+
+def fun_l26_n235()
+ fun_l27_n849
+end
+
+def fun_l26_n236()
+ fun_l27_n47
+end
+
+def fun_l26_n237()
+ fun_l27_n673
+end
+
+def fun_l26_n238()
+ fun_l27_n435
+end
+
+def fun_l26_n239()
+ fun_l27_n295
+end
+
+def fun_l26_n240()
+ fun_l27_n466
+end
+
+def fun_l26_n241()
+ fun_l27_n76
+end
+
+def fun_l26_n242()
+ fun_l27_n679
+end
+
+def fun_l26_n243()
+ fun_l27_n772
+end
+
+def fun_l26_n244()
+ fun_l27_n137
+end
+
+def fun_l26_n245()
+ fun_l27_n582
+end
+
+def fun_l26_n246()
+ fun_l27_n344
+end
+
+def fun_l26_n247()
+ fun_l27_n944
+end
+
+def fun_l26_n248()
+ fun_l27_n657
+end
+
+def fun_l26_n249()
+ fun_l27_n354
+end
+
+def fun_l26_n250()
+ fun_l27_n467
+end
+
+def fun_l26_n251()
+ fun_l27_n436
+end
+
+def fun_l26_n252()
+ fun_l27_n923
+end
+
+def fun_l26_n253()
+ fun_l27_n252
+end
+
+def fun_l26_n254()
+ fun_l27_n404
+end
+
+def fun_l26_n255()
+ fun_l27_n421
+end
+
+def fun_l26_n256()
+ fun_l27_n422
+end
+
+def fun_l26_n257()
+ fun_l27_n787
+end
+
+def fun_l26_n258()
+ fun_l27_n173
+end
+
+def fun_l26_n259()
+ fun_l27_n930
+end
+
+def fun_l26_n260()
+ fun_l27_n625
+end
+
+def fun_l26_n261()
+ fun_l27_n18
+end
+
+def fun_l26_n262()
+ fun_l27_n763
+end
+
+def fun_l26_n263()
+ fun_l27_n641
+end
+
+def fun_l26_n264()
+ fun_l27_n114
+end
+
+def fun_l26_n265()
+ fun_l27_n556
+end
+
+def fun_l26_n266()
+ fun_l27_n127
+end
+
+def fun_l26_n267()
+ fun_l27_n229
+end
+
+def fun_l26_n268()
+ fun_l27_n901
+end
+
+def fun_l26_n269()
+ fun_l27_n234
+end
+
+def fun_l26_n270()
+ fun_l27_n444
+end
+
+def fun_l26_n271()
+ fun_l27_n156
+end
+
+def fun_l26_n272()
+ fun_l27_n35
+end
+
+def fun_l26_n273()
+ fun_l27_n725
+end
+
+def fun_l26_n274()
+ fun_l27_n983
+end
+
+def fun_l26_n275()
+ fun_l27_n845
+end
+
+def fun_l26_n276()
+ fun_l27_n324
+end
+
+def fun_l26_n277()
+ fun_l27_n813
+end
+
+def fun_l26_n278()
+ fun_l27_n331
+end
+
+def fun_l26_n279()
+ fun_l27_n66
+end
+
+def fun_l26_n280()
+ fun_l27_n471
+end
+
+def fun_l26_n281()
+ fun_l27_n635
+end
+
+def fun_l26_n282()
+ fun_l27_n180
+end
+
+def fun_l26_n283()
+ fun_l27_n563
+end
+
+def fun_l26_n284()
+ fun_l27_n199
+end
+
+def fun_l26_n285()
+ fun_l27_n238
+end
+
+def fun_l26_n286()
+ fun_l27_n789
+end
+
+def fun_l26_n287()
+ fun_l27_n413
+end
+
+def fun_l26_n288()
+ fun_l27_n358
+end
+
+def fun_l26_n289()
+ fun_l27_n923
+end
+
+def fun_l26_n290()
+ fun_l27_n443
+end
+
+def fun_l26_n291()
+ fun_l27_n706
+end
+
+def fun_l26_n292()
+ fun_l27_n752
+end
+
+def fun_l26_n293()
+ fun_l27_n231
+end
+
+def fun_l26_n294()
+ fun_l27_n185
+end
+
+def fun_l26_n295()
+ fun_l27_n604
+end
+
+def fun_l26_n296()
+ fun_l27_n10
+end
+
+def fun_l26_n297()
+ fun_l27_n758
+end
+
+def fun_l26_n298()
+ fun_l27_n417
+end
+
+def fun_l26_n299()
+ fun_l27_n303
+end
+
+def fun_l26_n300()
+ fun_l27_n524
+end
+
+def fun_l26_n301()
+ fun_l27_n198
+end
+
+def fun_l26_n302()
+ fun_l27_n127
+end
+
+def fun_l26_n303()
+ fun_l27_n971
+end
+
+def fun_l26_n304()
+ fun_l27_n4
+end
+
+def fun_l26_n305()
+ fun_l27_n333
+end
+
+def fun_l26_n306()
+ fun_l27_n782
+end
+
+def fun_l26_n307()
+ fun_l27_n158
+end
+
+def fun_l26_n308()
+ fun_l27_n414
+end
+
+def fun_l26_n309()
+ fun_l27_n730
+end
+
+def fun_l26_n310()
+ fun_l27_n912
+end
+
+def fun_l26_n311()
+ fun_l27_n343
+end
+
+def fun_l26_n312()
+ fun_l27_n885
+end
+
+def fun_l26_n313()
+ fun_l27_n682
+end
+
+def fun_l26_n314()
+ fun_l27_n126
+end
+
+def fun_l26_n315()
+ fun_l27_n680
+end
+
+def fun_l26_n316()
+ fun_l27_n884
+end
+
+def fun_l26_n317()
+ fun_l27_n483
+end
+
+def fun_l26_n318()
+ fun_l27_n601
+end
+
+def fun_l26_n319()
+ fun_l27_n265
+end
+
+def fun_l26_n320()
+ fun_l27_n109
+end
+
+def fun_l26_n321()
+ fun_l27_n436
+end
+
+def fun_l26_n322()
+ fun_l27_n209
+end
+
+def fun_l26_n323()
+ fun_l27_n669
+end
+
+def fun_l26_n324()
+ fun_l27_n680
+end
+
+def fun_l26_n325()
+ fun_l27_n844
+end
+
+def fun_l26_n326()
+ fun_l27_n729
+end
+
+def fun_l26_n327()
+ fun_l27_n882
+end
+
+def fun_l26_n328()
+ fun_l27_n99
+end
+
+def fun_l26_n329()
+ fun_l27_n586
+end
+
+def fun_l26_n330()
+ fun_l27_n328
+end
+
+def fun_l26_n331()
+ fun_l27_n694
+end
+
+def fun_l26_n332()
+ fun_l27_n259
+end
+
+def fun_l26_n333()
+ fun_l27_n364
+end
+
+def fun_l26_n334()
+ fun_l27_n944
+end
+
+def fun_l26_n335()
+ fun_l27_n483
+end
+
+def fun_l26_n336()
+ fun_l27_n570
+end
+
+def fun_l26_n337()
+ fun_l27_n348
+end
+
+def fun_l26_n338()
+ fun_l27_n565
+end
+
+def fun_l26_n339()
+ fun_l27_n402
+end
+
+def fun_l26_n340()
+ fun_l27_n890
+end
+
+def fun_l26_n341()
+ fun_l27_n486
+end
+
+def fun_l26_n342()
+ fun_l27_n387
+end
+
+def fun_l26_n343()
+ fun_l27_n239
+end
+
+def fun_l26_n344()
+ fun_l27_n433
+end
+
+def fun_l26_n345()
+ fun_l27_n918
+end
+
+def fun_l26_n346()
+ fun_l27_n524
+end
+
+def fun_l26_n347()
+ fun_l27_n475
+end
+
+def fun_l26_n348()
+ fun_l27_n749
+end
+
+def fun_l26_n349()
+ fun_l27_n61
+end
+
+def fun_l26_n350()
+ fun_l27_n735
+end
+
+def fun_l26_n351()
+ fun_l27_n582
+end
+
+def fun_l26_n352()
+ fun_l27_n519
+end
+
+def fun_l26_n353()
+ fun_l27_n234
+end
+
+def fun_l26_n354()
+ fun_l27_n868
+end
+
+def fun_l26_n355()
+ fun_l27_n109
+end
+
+def fun_l26_n356()
+ fun_l27_n898
+end
+
+def fun_l26_n357()
+ fun_l27_n541
+end
+
+def fun_l26_n358()
+ fun_l27_n328
+end
+
+def fun_l26_n359()
+ fun_l27_n954
+end
+
+def fun_l26_n360()
+ fun_l27_n219
+end
+
+def fun_l26_n361()
+ fun_l27_n776
+end
+
+def fun_l26_n362()
+ fun_l27_n402
+end
+
+def fun_l26_n363()
+ fun_l27_n169
+end
+
+def fun_l26_n364()
+ fun_l27_n395
+end
+
+def fun_l26_n365()
+ fun_l27_n852
+end
+
+def fun_l26_n366()
+ fun_l27_n668
+end
+
+def fun_l26_n367()
+ fun_l27_n0
+end
+
+def fun_l26_n368()
+ fun_l27_n660
+end
+
+def fun_l26_n369()
+ fun_l27_n703
+end
+
+def fun_l26_n370()
+ fun_l27_n946
+end
+
+def fun_l26_n371()
+ fun_l27_n522
+end
+
+def fun_l26_n372()
+ fun_l27_n57
+end
+
+def fun_l26_n373()
+ fun_l27_n228
+end
+
+def fun_l26_n374()
+ fun_l27_n25
+end
+
+def fun_l26_n375()
+ fun_l27_n433
+end
+
+def fun_l26_n376()
+ fun_l27_n557
+end
+
+def fun_l26_n377()
+ fun_l27_n542
+end
+
+def fun_l26_n378()
+ fun_l27_n341
+end
+
+def fun_l26_n379()
+ fun_l27_n28
+end
+
+def fun_l26_n380()
+ fun_l27_n591
+end
+
+def fun_l26_n381()
+ fun_l27_n139
+end
+
+def fun_l26_n382()
+ fun_l27_n303
+end
+
+def fun_l26_n383()
+ fun_l27_n369
+end
+
+def fun_l26_n384()
+ fun_l27_n124
+end
+
+def fun_l26_n385()
+ fun_l27_n459
+end
+
+def fun_l26_n386()
+ fun_l27_n338
+end
+
+def fun_l26_n387()
+ fun_l27_n246
+end
+
+def fun_l26_n388()
+ fun_l27_n248
+end
+
+def fun_l26_n389()
+ fun_l27_n182
+end
+
+def fun_l26_n390()
+ fun_l27_n176
+end
+
+def fun_l26_n391()
+ fun_l27_n307
+end
+
+def fun_l26_n392()
+ fun_l27_n782
+end
+
+def fun_l26_n393()
+ fun_l27_n576
+end
+
+def fun_l26_n394()
+ fun_l27_n777
+end
+
+def fun_l26_n395()
+ fun_l27_n962
+end
+
+def fun_l26_n396()
+ fun_l27_n993
+end
+
+def fun_l26_n397()
+ fun_l27_n592
+end
+
+def fun_l26_n398()
+ fun_l27_n710
+end
+
+def fun_l26_n399()
+ fun_l27_n644
+end
+
+def fun_l26_n400()
+ fun_l27_n11
+end
+
+def fun_l26_n401()
+ fun_l27_n774
+end
+
+def fun_l26_n402()
+ fun_l27_n190
+end
+
+def fun_l26_n403()
+ fun_l27_n15
+end
+
+def fun_l26_n404()
+ fun_l27_n47
+end
+
+def fun_l26_n405()
+ fun_l27_n802
+end
+
+def fun_l26_n406()
+ fun_l27_n659
+end
+
+def fun_l26_n407()
+ fun_l27_n295
+end
+
+def fun_l26_n408()
+ fun_l27_n120
+end
+
+def fun_l26_n409()
+ fun_l27_n438
+end
+
+def fun_l26_n410()
+ fun_l27_n443
+end
+
+def fun_l26_n411()
+ fun_l27_n860
+end
+
+def fun_l26_n412()
+ fun_l27_n285
+end
+
+def fun_l26_n413()
+ fun_l27_n457
+end
+
+def fun_l26_n414()
+ fun_l27_n942
+end
+
+def fun_l26_n415()
+ fun_l27_n425
+end
+
+def fun_l26_n416()
+ fun_l27_n54
+end
+
+def fun_l26_n417()
+ fun_l27_n675
+end
+
+def fun_l26_n418()
+ fun_l27_n739
+end
+
+def fun_l26_n419()
+ fun_l27_n709
+end
+
+def fun_l26_n420()
+ fun_l27_n643
+end
+
+def fun_l26_n421()
+ fun_l27_n473
+end
+
+def fun_l26_n422()
+ fun_l27_n452
+end
+
+def fun_l26_n423()
+ fun_l27_n942
+end
+
+def fun_l26_n424()
+ fun_l27_n270
+end
+
+def fun_l26_n425()
+ fun_l27_n711
+end
+
+def fun_l26_n426()
+ fun_l27_n27
+end
+
+def fun_l26_n427()
+ fun_l27_n120
+end
+
+def fun_l26_n428()
+ fun_l27_n565
+end
+
+def fun_l26_n429()
+ fun_l27_n182
+end
+
+def fun_l26_n430()
+ fun_l27_n641
+end
+
+def fun_l26_n431()
+ fun_l27_n227
+end
+
+def fun_l26_n432()
+ fun_l27_n59
+end
+
+def fun_l26_n433()
+ fun_l27_n599
+end
+
+def fun_l26_n434()
+ fun_l27_n448
+end
+
+def fun_l26_n435()
+ fun_l27_n562
+end
+
+def fun_l26_n436()
+ fun_l27_n201
+end
+
+def fun_l26_n437()
+ fun_l27_n929
+end
+
+def fun_l26_n438()
+ fun_l27_n275
+end
+
+def fun_l26_n439()
+ fun_l27_n339
+end
+
+def fun_l26_n440()
+ fun_l27_n519
+end
+
+def fun_l26_n441()
+ fun_l27_n98
+end
+
+def fun_l26_n442()
+ fun_l27_n581
+end
+
+def fun_l26_n443()
+ fun_l27_n840
+end
+
+def fun_l26_n444()
+ fun_l27_n904
+end
+
+def fun_l26_n445()
+ fun_l27_n468
+end
+
+def fun_l26_n446()
+ fun_l27_n6
+end
+
+def fun_l26_n447()
+ fun_l27_n877
+end
+
+def fun_l26_n448()
+ fun_l27_n609
+end
+
+def fun_l26_n449()
+ fun_l27_n218
+end
+
+def fun_l26_n450()
+ fun_l27_n869
+end
+
+def fun_l26_n451()
+ fun_l27_n184
+end
+
+def fun_l26_n452()
+ fun_l27_n7
+end
+
+def fun_l26_n453()
+ fun_l27_n647
+end
+
+def fun_l26_n454()
+ fun_l27_n470
+end
+
+def fun_l26_n455()
+ fun_l27_n547
+end
+
+def fun_l26_n456()
+ fun_l27_n277
+end
+
+def fun_l26_n457()
+ fun_l27_n302
+end
+
+def fun_l26_n458()
+ fun_l27_n355
+end
+
+def fun_l26_n459()
+ fun_l27_n805
+end
+
+def fun_l26_n460()
+ fun_l27_n201
+end
+
+def fun_l26_n461()
+ fun_l27_n16
+end
+
+def fun_l26_n462()
+ fun_l27_n156
+end
+
+def fun_l26_n463()
+ fun_l27_n219
+end
+
+def fun_l26_n464()
+ fun_l27_n507
+end
+
+def fun_l26_n465()
+ fun_l27_n527
+end
+
+def fun_l26_n466()
+ fun_l27_n307
+end
+
+def fun_l26_n467()
+ fun_l27_n654
+end
+
+def fun_l26_n468()
+ fun_l27_n699
+end
+
+def fun_l26_n469()
+ fun_l27_n772
+end
+
+def fun_l26_n470()
+ fun_l27_n761
+end
+
+def fun_l26_n471()
+ fun_l27_n736
+end
+
+def fun_l26_n472()
+ fun_l27_n104
+end
+
+def fun_l26_n473()
+ fun_l27_n720
+end
+
+def fun_l26_n474()
+ fun_l27_n418
+end
+
+def fun_l26_n475()
+ fun_l27_n403
+end
+
+def fun_l26_n476()
+ fun_l27_n625
+end
+
+def fun_l26_n477()
+ fun_l27_n541
+end
+
+def fun_l26_n478()
+ fun_l27_n441
+end
+
+def fun_l26_n479()
+ fun_l27_n287
+end
+
+def fun_l26_n480()
+ fun_l27_n746
+end
+
+def fun_l26_n481()
+ fun_l27_n205
+end
+
+def fun_l26_n482()
+ fun_l27_n771
+end
+
+def fun_l26_n483()
+ fun_l27_n778
+end
+
+def fun_l26_n484()
+ fun_l27_n284
+end
+
+def fun_l26_n485()
+ fun_l27_n475
+end
+
+def fun_l26_n486()
+ fun_l27_n449
+end
+
+def fun_l26_n487()
+ fun_l27_n485
+end
+
+def fun_l26_n488()
+ fun_l27_n124
+end
+
+def fun_l26_n489()
+ fun_l27_n4
+end
+
+def fun_l26_n490()
+ fun_l27_n270
+end
+
+def fun_l26_n491()
+ fun_l27_n596
+end
+
+def fun_l26_n492()
+ fun_l27_n279
+end
+
+def fun_l26_n493()
+ fun_l27_n226
+end
+
+def fun_l26_n494()
+ fun_l27_n718
+end
+
+def fun_l26_n495()
+ fun_l27_n324
+end
+
+def fun_l26_n496()
+ fun_l27_n430
+end
+
+def fun_l26_n497()
+ fun_l27_n196
+end
+
+def fun_l26_n498()
+ fun_l27_n509
+end
+
+def fun_l26_n499()
+ fun_l27_n282
+end
+
+def fun_l26_n500()
+ fun_l27_n61
+end
+
+def fun_l26_n501()
+ fun_l27_n995
+end
+
+def fun_l26_n502()
+ fun_l27_n75
+end
+
+def fun_l26_n503()
+ fun_l27_n158
+end
+
+def fun_l26_n504()
+ fun_l27_n551
+end
+
+def fun_l26_n505()
+ fun_l27_n936
+end
+
+def fun_l26_n506()
+ fun_l27_n23
+end
+
+def fun_l26_n507()
+ fun_l27_n799
+end
+
+def fun_l26_n508()
+ fun_l27_n25
+end
+
+def fun_l26_n509()
+ fun_l27_n533
+end
+
+def fun_l26_n510()
+ fun_l27_n325
+end
+
+def fun_l26_n511()
+ fun_l27_n375
+end
+
+def fun_l26_n512()
+ fun_l27_n18
+end
+
+def fun_l26_n513()
+ fun_l27_n497
+end
+
+def fun_l26_n514()
+ fun_l27_n51
+end
+
+def fun_l26_n515()
+ fun_l27_n680
+end
+
+def fun_l26_n516()
+ fun_l27_n152
+end
+
+def fun_l26_n517()
+ fun_l27_n495
+end
+
+def fun_l26_n518()
+ fun_l27_n956
+end
+
+def fun_l26_n519()
+ fun_l27_n187
+end
+
+def fun_l26_n520()
+ fun_l27_n292
+end
+
+def fun_l26_n521()
+ fun_l27_n663
+end
+
+def fun_l26_n522()
+ fun_l27_n178
+end
+
+def fun_l26_n523()
+ fun_l27_n323
+end
+
+def fun_l26_n524()
+ fun_l27_n222
+end
+
+def fun_l26_n525()
+ fun_l27_n652
+end
+
+def fun_l26_n526()
+ fun_l27_n519
+end
+
+def fun_l26_n527()
+ fun_l27_n102
+end
+
+def fun_l26_n528()
+ fun_l27_n361
+end
+
+def fun_l26_n529()
+ fun_l27_n201
+end
+
+def fun_l26_n530()
+ fun_l27_n129
+end
+
+def fun_l26_n531()
+ fun_l27_n438
+end
+
+def fun_l26_n532()
+ fun_l27_n387
+end
+
+def fun_l26_n533()
+ fun_l27_n641
+end
+
+def fun_l26_n534()
+ fun_l27_n111
+end
+
+def fun_l26_n535()
+ fun_l27_n548
+end
+
+def fun_l26_n536()
+ fun_l27_n446
+end
+
+def fun_l26_n537()
+ fun_l27_n302
+end
+
+def fun_l26_n538()
+ fun_l27_n438
+end
+
+def fun_l26_n539()
+ fun_l27_n816
+end
+
+def fun_l26_n540()
+ fun_l27_n759
+end
+
+def fun_l26_n541()
+ fun_l27_n318
+end
+
+def fun_l26_n542()
+ fun_l27_n895
+end
+
+def fun_l26_n543()
+ fun_l27_n309
+end
+
+def fun_l26_n544()
+ fun_l27_n35
+end
+
+def fun_l26_n545()
+ fun_l27_n785
+end
+
+def fun_l26_n546()
+ fun_l27_n846
+end
+
+def fun_l26_n547()
+ fun_l27_n191
+end
+
+def fun_l26_n548()
+ fun_l27_n414
+end
+
+def fun_l26_n549()
+ fun_l27_n251
+end
+
+def fun_l26_n550()
+ fun_l27_n982
+end
+
+def fun_l26_n551()
+ fun_l27_n516
+end
+
+def fun_l26_n552()
+ fun_l27_n724
+end
+
+def fun_l26_n553()
+ fun_l27_n473
+end
+
+def fun_l26_n554()
+ fun_l27_n808
+end
+
+def fun_l26_n555()
+ fun_l27_n617
+end
+
+def fun_l26_n556()
+ fun_l27_n306
+end
+
+def fun_l26_n557()
+ fun_l27_n701
+end
+
+def fun_l26_n558()
+ fun_l27_n941
+end
+
+def fun_l26_n559()
+ fun_l27_n60
+end
+
+def fun_l26_n560()
+ fun_l27_n132
+end
+
+def fun_l26_n561()
+ fun_l27_n685
+end
+
+def fun_l26_n562()
+ fun_l27_n619
+end
+
+def fun_l26_n563()
+ fun_l27_n407
+end
+
+def fun_l26_n564()
+ fun_l27_n29
+end
+
+def fun_l26_n565()
+ fun_l27_n53
+end
+
+def fun_l26_n566()
+ fun_l27_n267
+end
+
+def fun_l26_n567()
+ fun_l27_n79
+end
+
+def fun_l26_n568()
+ fun_l27_n170
+end
+
+def fun_l26_n569()
+ fun_l27_n469
+end
+
+def fun_l26_n570()
+ fun_l27_n67
+end
+
+def fun_l26_n571()
+ fun_l27_n794
+end
+
+def fun_l26_n572()
+ fun_l27_n641
+end
+
+def fun_l26_n573()
+ fun_l27_n224
+end
+
+def fun_l26_n574()
+ fun_l27_n415
+end
+
+def fun_l26_n575()
+ fun_l27_n235
+end
+
+def fun_l26_n576()
+ fun_l27_n425
+end
+
+def fun_l26_n577()
+ fun_l27_n335
+end
+
+def fun_l26_n578()
+ fun_l27_n251
+end
+
+def fun_l26_n579()
+ fun_l27_n421
+end
+
+def fun_l26_n580()
+ fun_l27_n20
+end
+
+def fun_l26_n581()
+ fun_l27_n795
+end
+
+def fun_l26_n582()
+ fun_l27_n831
+end
+
+def fun_l26_n583()
+ fun_l27_n666
+end
+
+def fun_l26_n584()
+ fun_l27_n664
+end
+
+def fun_l26_n585()
+ fun_l27_n383
+end
+
+def fun_l26_n586()
+ fun_l27_n587
+end
+
+def fun_l26_n587()
+ fun_l27_n515
+end
+
+def fun_l26_n588()
+ fun_l27_n410
+end
+
+def fun_l26_n589()
+ fun_l27_n379
+end
+
+def fun_l26_n590()
+ fun_l27_n467
+end
+
+def fun_l26_n591()
+ fun_l27_n557
+end
+
+def fun_l26_n592()
+ fun_l27_n444
+end
+
+def fun_l26_n593()
+ fun_l27_n629
+end
+
+def fun_l26_n594()
+ fun_l27_n55
+end
+
+def fun_l26_n595()
+ fun_l27_n581
+end
+
+def fun_l26_n596()
+ fun_l27_n106
+end
+
+def fun_l26_n597()
+ fun_l27_n896
+end
+
+def fun_l26_n598()
+ fun_l27_n180
+end
+
+def fun_l26_n599()
+ fun_l27_n471
+end
+
+def fun_l26_n600()
+ fun_l27_n28
+end
+
+def fun_l26_n601()
+ fun_l27_n195
+end
+
+def fun_l26_n602()
+ fun_l27_n562
+end
+
+def fun_l26_n603()
+ fun_l27_n367
+end
+
+def fun_l26_n604()
+ fun_l27_n609
+end
+
+def fun_l26_n605()
+ fun_l27_n699
+end
+
+def fun_l26_n606()
+ fun_l27_n300
+end
+
+def fun_l26_n607()
+ fun_l27_n28
+end
+
+def fun_l26_n608()
+ fun_l27_n362
+end
+
+def fun_l26_n609()
+ fun_l27_n188
+end
+
+def fun_l26_n610()
+ fun_l27_n320
+end
+
+def fun_l26_n611()
+ fun_l27_n974
+end
+
+def fun_l26_n612()
+ fun_l27_n226
+end
+
+def fun_l26_n613()
+ fun_l27_n723
+end
+
+def fun_l26_n614()
+ fun_l27_n406
+end
+
+def fun_l26_n615()
+ fun_l27_n60
+end
+
+def fun_l26_n616()
+ fun_l27_n921
+end
+
+def fun_l26_n617()
+ fun_l27_n141
+end
+
+def fun_l26_n618()
+ fun_l27_n781
+end
+
+def fun_l26_n619()
+ fun_l27_n279
+end
+
+def fun_l26_n620()
+ fun_l27_n159
+end
+
+def fun_l26_n621()
+ fun_l27_n396
+end
+
+def fun_l26_n622()
+ fun_l27_n365
+end
+
+def fun_l26_n623()
+ fun_l27_n128
+end
+
+def fun_l26_n624()
+ fun_l27_n143
+end
+
+def fun_l26_n625()
+ fun_l27_n553
+end
+
+def fun_l26_n626()
+ fun_l27_n695
+end
+
+def fun_l26_n627()
+ fun_l27_n526
+end
+
+def fun_l26_n628()
+ fun_l27_n623
+end
+
+def fun_l26_n629()
+ fun_l27_n589
+end
+
+def fun_l26_n630()
+ fun_l27_n328
+end
+
+def fun_l26_n631()
+ fun_l27_n959
+end
+
+def fun_l26_n632()
+ fun_l27_n586
+end
+
+def fun_l26_n633()
+ fun_l27_n163
+end
+
+def fun_l26_n634()
+ fun_l27_n821
+end
+
+def fun_l26_n635()
+ fun_l27_n981
+end
+
+def fun_l26_n636()
+ fun_l27_n221
+end
+
+def fun_l26_n637()
+ fun_l27_n752
+end
+
+def fun_l26_n638()
+ fun_l27_n252
+end
+
+def fun_l26_n639()
+ fun_l27_n74
+end
+
+def fun_l26_n640()
+ fun_l27_n694
+end
+
+def fun_l26_n641()
+ fun_l27_n761
+end
+
+def fun_l26_n642()
+ fun_l27_n877
+end
+
+def fun_l26_n643()
+ fun_l27_n480
+end
+
+def fun_l26_n644()
+ fun_l27_n627
+end
+
+def fun_l26_n645()
+ fun_l27_n586
+end
+
+def fun_l26_n646()
+ fun_l27_n820
+end
+
+def fun_l26_n647()
+ fun_l27_n485
+end
+
+def fun_l26_n648()
+ fun_l27_n230
+end
+
+def fun_l26_n649()
+ fun_l27_n698
+end
+
+def fun_l26_n650()
+ fun_l27_n700
+end
+
+def fun_l26_n651()
+ fun_l27_n536
+end
+
+def fun_l26_n652()
+ fun_l27_n343
+end
+
+def fun_l26_n653()
+ fun_l27_n453
+end
+
+def fun_l26_n654()
+ fun_l27_n780
+end
+
+def fun_l26_n655()
+ fun_l27_n402
+end
+
+def fun_l26_n656()
+ fun_l27_n749
+end
+
+def fun_l26_n657()
+ fun_l27_n248
+end
+
+def fun_l26_n658()
+ fun_l27_n326
+end
+
+def fun_l26_n659()
+ fun_l27_n819
+end
+
+def fun_l26_n660()
+ fun_l27_n968
+end
+
+def fun_l26_n661()
+ fun_l27_n123
+end
+
+def fun_l26_n662()
+ fun_l27_n467
+end
+
+def fun_l26_n663()
+ fun_l27_n855
+end
+
+def fun_l26_n664()
+ fun_l27_n861
+end
+
+def fun_l26_n665()
+ fun_l27_n335
+end
+
+def fun_l26_n666()
+ fun_l27_n805
+end
+
+def fun_l26_n667()
+ fun_l27_n284
+end
+
+def fun_l26_n668()
+ fun_l27_n283
+end
+
+def fun_l26_n669()
+ fun_l27_n471
+end
+
+def fun_l26_n670()
+ fun_l27_n479
+end
+
+def fun_l26_n671()
+ fun_l27_n938
+end
+
+def fun_l26_n672()
+ fun_l27_n288
+end
+
+def fun_l26_n673()
+ fun_l27_n0
+end
+
+def fun_l26_n674()
+ fun_l27_n856
+end
+
+def fun_l26_n675()
+ fun_l27_n490
+end
+
+def fun_l26_n676()
+ fun_l27_n88
+end
+
+def fun_l26_n677()
+ fun_l27_n584
+end
+
+def fun_l26_n678()
+ fun_l27_n138
+end
+
+def fun_l26_n679()
+ fun_l27_n998
+end
+
+def fun_l26_n680()
+ fun_l27_n259
+end
+
+def fun_l26_n681()
+ fun_l27_n913
+end
+
+def fun_l26_n682()
+ fun_l27_n697
+end
+
+def fun_l26_n683()
+ fun_l27_n102
+end
+
+def fun_l26_n684()
+ fun_l27_n726
+end
+
+def fun_l26_n685()
+ fun_l27_n655
+end
+
+def fun_l26_n686()
+ fun_l27_n264
+end
+
+def fun_l26_n687()
+ fun_l27_n603
+end
+
+def fun_l26_n688()
+ fun_l27_n331
+end
+
+def fun_l26_n689()
+ fun_l27_n760
+end
+
+def fun_l26_n690()
+ fun_l27_n105
+end
+
+def fun_l26_n691()
+ fun_l27_n554
+end
+
+def fun_l26_n692()
+ fun_l27_n287
+end
+
+def fun_l26_n693()
+ fun_l27_n592
+end
+
+def fun_l26_n694()
+ fun_l27_n22
+end
+
+def fun_l26_n695()
+ fun_l27_n794
+end
+
+def fun_l26_n696()
+ fun_l27_n196
+end
+
+def fun_l26_n697()
+ fun_l27_n848
+end
+
+def fun_l26_n698()
+ fun_l27_n589
+end
+
+def fun_l26_n699()
+ fun_l27_n267
+end
+
+def fun_l26_n700()
+ fun_l27_n562
+end
+
+def fun_l26_n701()
+ fun_l27_n563
+end
+
+def fun_l26_n702()
+ fun_l27_n909
+end
+
+def fun_l26_n703()
+ fun_l27_n92
+end
+
+def fun_l26_n704()
+ fun_l27_n140
+end
+
+def fun_l26_n705()
+ fun_l27_n330
+end
+
+def fun_l26_n706()
+ fun_l27_n734
+end
+
+def fun_l26_n707()
+ fun_l27_n994
+end
+
+def fun_l26_n708()
+ fun_l27_n414
+end
+
+def fun_l26_n709()
+ fun_l27_n931
+end
+
+def fun_l26_n710()
+ fun_l27_n82
+end
+
+def fun_l26_n711()
+ fun_l27_n341
+end
+
+def fun_l26_n712()
+ fun_l27_n9
+end
+
+def fun_l26_n713()
+ fun_l27_n868
+end
+
+def fun_l26_n714()
+ fun_l27_n249
+end
+
+def fun_l26_n715()
+ fun_l27_n393
+end
+
+def fun_l26_n716()
+ fun_l27_n835
+end
+
+def fun_l26_n717()
+ fun_l27_n975
+end
+
+def fun_l26_n718()
+ fun_l27_n110
+end
+
+def fun_l26_n719()
+ fun_l27_n700
+end
+
+def fun_l26_n720()
+ fun_l27_n396
+end
+
+def fun_l26_n721()
+ fun_l27_n973
+end
+
+def fun_l26_n722()
+ fun_l27_n898
+end
+
+def fun_l26_n723()
+ fun_l27_n418
+end
+
+def fun_l26_n724()
+ fun_l27_n342
+end
+
+def fun_l26_n725()
+ fun_l27_n783
+end
+
+def fun_l26_n726()
+ fun_l27_n86
+end
+
+def fun_l26_n727()
+ fun_l27_n556
+end
+
+def fun_l26_n728()
+ fun_l27_n777
+end
+
+def fun_l26_n729()
+ fun_l27_n729
+end
+
+def fun_l26_n730()
+ fun_l27_n156
+end
+
+def fun_l26_n731()
+ fun_l27_n458
+end
+
+def fun_l26_n732()
+ fun_l27_n580
+end
+
+def fun_l26_n733()
+ fun_l27_n764
+end
+
+def fun_l26_n734()
+ fun_l27_n295
+end
+
+def fun_l26_n735()
+ fun_l27_n850
+end
+
+def fun_l26_n736()
+ fun_l27_n881
+end
+
+def fun_l26_n737()
+ fun_l27_n416
+end
+
+def fun_l26_n738()
+ fun_l27_n996
+end
+
+def fun_l26_n739()
+ fun_l27_n347
+end
+
+def fun_l26_n740()
+ fun_l27_n607
+end
+
+def fun_l26_n741()
+ fun_l27_n749
+end
+
+def fun_l26_n742()
+ fun_l27_n564
+end
+
+def fun_l26_n743()
+ fun_l27_n217
+end
+
+def fun_l26_n744()
+ fun_l27_n375
+end
+
+def fun_l26_n745()
+ fun_l27_n487
+end
+
+def fun_l26_n746()
+ fun_l27_n86
+end
+
+def fun_l26_n747()
+ fun_l27_n765
+end
+
+def fun_l26_n748()
+ fun_l27_n569
+end
+
+def fun_l26_n749()
+ fun_l27_n461
+end
+
+def fun_l26_n750()
+ fun_l27_n633
+end
+
+def fun_l26_n751()
+ fun_l27_n89
+end
+
+def fun_l26_n752()
+ fun_l27_n841
+end
+
+def fun_l26_n753()
+ fun_l27_n499
+end
+
+def fun_l26_n754()
+ fun_l27_n947
+end
+
+def fun_l26_n755()
+ fun_l27_n690
+end
+
+def fun_l26_n756()
+ fun_l27_n531
+end
+
+def fun_l26_n757()
+ fun_l27_n766
+end
+
+def fun_l26_n758()
+ fun_l27_n853
+end
+
+def fun_l26_n759()
+ fun_l27_n65
+end
+
+def fun_l26_n760()
+ fun_l27_n884
+end
+
+def fun_l26_n761()
+ fun_l27_n235
+end
+
+def fun_l26_n762()
+ fun_l27_n39
+end
+
+def fun_l26_n763()
+ fun_l27_n868
+end
+
+def fun_l26_n764()
+ fun_l27_n202
+end
+
+def fun_l26_n765()
+ fun_l27_n360
+end
+
+def fun_l26_n766()
+ fun_l27_n450
+end
+
+def fun_l26_n767()
+ fun_l27_n590
+end
+
+def fun_l26_n768()
+ fun_l27_n635
+end
+
+def fun_l26_n769()
+ fun_l27_n314
+end
+
+def fun_l26_n770()
+ fun_l27_n68
+end
+
+def fun_l26_n771()
+ fun_l27_n858
+end
+
+def fun_l26_n772()
+ fun_l27_n51
+end
+
+def fun_l26_n773()
+ fun_l27_n524
+end
+
+def fun_l26_n774()
+ fun_l27_n13
+end
+
+def fun_l26_n775()
+ fun_l27_n451
+end
+
+def fun_l26_n776()
+ fun_l27_n682
+end
+
+def fun_l26_n777()
+ fun_l27_n736
+end
+
+def fun_l26_n778()
+ fun_l27_n250
+end
+
+def fun_l26_n779()
+ fun_l27_n810
+end
+
+def fun_l26_n780()
+ fun_l27_n979
+end
+
+def fun_l26_n781()
+ fun_l27_n102
+end
+
+def fun_l26_n782()
+ fun_l27_n955
+end
+
+def fun_l26_n783()
+ fun_l27_n610
+end
+
+def fun_l26_n784()
+ fun_l27_n301
+end
+
+def fun_l26_n785()
+ fun_l27_n389
+end
+
+def fun_l26_n786()
+ fun_l27_n754
+end
+
+def fun_l26_n787()
+ fun_l27_n717
+end
+
+def fun_l26_n788()
+ fun_l27_n77
+end
+
+def fun_l26_n789()
+ fun_l27_n401
+end
+
+def fun_l26_n790()
+ fun_l27_n430
+end
+
+def fun_l26_n791()
+ fun_l27_n310
+end
+
+def fun_l26_n792()
+ fun_l27_n839
+end
+
+def fun_l26_n793()
+ fun_l27_n682
+end
+
+def fun_l26_n794()
+ fun_l27_n648
+end
+
+def fun_l26_n795()
+ fun_l27_n281
+end
+
+def fun_l26_n796()
+ fun_l27_n749
+end
+
+def fun_l26_n797()
+ fun_l27_n502
+end
+
+def fun_l26_n798()
+ fun_l27_n201
+end
+
+def fun_l26_n799()
+ fun_l27_n851
+end
+
+def fun_l26_n800()
+ fun_l27_n249
+end
+
+def fun_l26_n801()
+ fun_l27_n119
+end
+
+def fun_l26_n802()
+ fun_l27_n519
+end
+
+def fun_l26_n803()
+ fun_l27_n157
+end
+
+def fun_l26_n804()
+ fun_l27_n53
+end
+
+def fun_l26_n805()
+ fun_l27_n765
+end
+
+def fun_l26_n806()
+ fun_l27_n48
+end
+
+def fun_l26_n807()
+ fun_l27_n127
+end
+
+def fun_l26_n808()
+ fun_l27_n418
+end
+
+def fun_l26_n809()
+ fun_l27_n650
+end
+
+def fun_l26_n810()
+ fun_l27_n918
+end
+
+def fun_l26_n811()
+ fun_l27_n878
+end
+
+def fun_l26_n812()
+ fun_l27_n244
+end
+
+def fun_l26_n813()
+ fun_l27_n611
+end
+
+def fun_l26_n814()
+ fun_l27_n82
+end
+
+def fun_l26_n815()
+ fun_l27_n6
+end
+
+def fun_l26_n816()
+ fun_l27_n486
+end
+
+def fun_l26_n817()
+ fun_l27_n711
+end
+
+def fun_l26_n818()
+ fun_l27_n792
+end
+
+def fun_l26_n819()
+ fun_l27_n974
+end
+
+def fun_l26_n820()
+ fun_l27_n480
+end
+
+def fun_l26_n821()
+ fun_l27_n460
+end
+
+def fun_l26_n822()
+ fun_l27_n520
+end
+
+def fun_l26_n823()
+ fun_l27_n803
+end
+
+def fun_l26_n824()
+ fun_l27_n734
+end
+
+def fun_l26_n825()
+ fun_l27_n336
+end
+
+def fun_l26_n826()
+ fun_l27_n657
+end
+
+def fun_l26_n827()
+ fun_l27_n20
+end
+
+def fun_l26_n828()
+ fun_l27_n83
+end
+
+def fun_l26_n829()
+ fun_l27_n452
+end
+
+def fun_l26_n830()
+ fun_l27_n973
+end
+
+def fun_l26_n831()
+ fun_l27_n79
+end
+
+def fun_l26_n832()
+ fun_l27_n327
+end
+
+def fun_l26_n833()
+ fun_l27_n36
+end
+
+def fun_l26_n834()
+ fun_l27_n186
+end
+
+def fun_l26_n835()
+ fun_l27_n946
+end
+
+def fun_l26_n836()
+ fun_l27_n776
+end
+
+def fun_l26_n837()
+ fun_l27_n33
+end
+
+def fun_l26_n838()
+ fun_l27_n966
+end
+
+def fun_l26_n839()
+ fun_l27_n961
+end
+
+def fun_l26_n840()
+ fun_l27_n181
+end
+
+def fun_l26_n841()
+ fun_l27_n103
+end
+
+def fun_l26_n842()
+ fun_l27_n500
+end
+
+def fun_l26_n843()
+ fun_l27_n359
+end
+
+def fun_l26_n844()
+ fun_l27_n316
+end
+
+def fun_l26_n845()
+ fun_l27_n921
+end
+
+def fun_l26_n846()
+ fun_l27_n745
+end
+
+def fun_l26_n847()
+ fun_l27_n555
+end
+
+def fun_l26_n848()
+ fun_l27_n306
+end
+
+def fun_l26_n849()
+ fun_l27_n462
+end
+
+def fun_l26_n850()
+ fun_l27_n369
+end
+
+def fun_l26_n851()
+ fun_l27_n489
+end
+
+def fun_l26_n852()
+ fun_l27_n276
+end
+
+def fun_l26_n853()
+ fun_l27_n509
+end
+
+def fun_l26_n854()
+ fun_l27_n524
+end
+
+def fun_l26_n855()
+ fun_l27_n421
+end
+
+def fun_l26_n856()
+ fun_l27_n845
+end
+
+def fun_l26_n857()
+ fun_l27_n600
+end
+
+def fun_l26_n858()
+ fun_l27_n961
+end
+
+def fun_l26_n859()
+ fun_l27_n506
+end
+
+def fun_l26_n860()
+ fun_l27_n106
+end
+
+def fun_l26_n861()
+ fun_l27_n525
+end
+
+def fun_l26_n862()
+ fun_l27_n515
+end
+
+def fun_l26_n863()
+ fun_l27_n506
+end
+
+def fun_l26_n864()
+ fun_l27_n283
+end
+
+def fun_l26_n865()
+ fun_l27_n189
+end
+
+def fun_l26_n866()
+ fun_l27_n181
+end
+
+def fun_l26_n867()
+ fun_l27_n338
+end
+
+def fun_l26_n868()
+ fun_l27_n965
+end
+
+def fun_l26_n869()
+ fun_l27_n219
+end
+
+def fun_l26_n870()
+ fun_l27_n604
+end
+
+def fun_l26_n871()
+ fun_l27_n211
+end
+
+def fun_l26_n872()
+ fun_l27_n225
+end
+
+def fun_l26_n873()
+ fun_l27_n776
+end
+
+def fun_l26_n874()
+ fun_l27_n723
+end
+
+def fun_l26_n875()
+ fun_l27_n653
+end
+
+def fun_l26_n876()
+ fun_l27_n157
+end
+
+def fun_l26_n877()
+ fun_l27_n321
+end
+
+def fun_l26_n878()
+ fun_l27_n684
+end
+
+def fun_l26_n879()
+ fun_l27_n270
+end
+
+def fun_l26_n880()
+ fun_l27_n575
+end
+
+def fun_l26_n881()
+ fun_l27_n201
+end
+
+def fun_l26_n882()
+ fun_l27_n772
+end
+
+def fun_l26_n883()
+ fun_l27_n610
+end
+
+def fun_l26_n884()
+ fun_l27_n117
+end
+
+def fun_l26_n885()
+ fun_l27_n706
+end
+
+def fun_l26_n886()
+ fun_l27_n245
+end
+
+def fun_l26_n887()
+ fun_l27_n173
+end
+
+def fun_l26_n888()
+ fun_l27_n679
+end
+
+def fun_l26_n889()
+ fun_l27_n725
+end
+
+def fun_l26_n890()
+ fun_l27_n481
+end
+
+def fun_l26_n891()
+ fun_l27_n632
+end
+
+def fun_l26_n892()
+ fun_l27_n20
+end
+
+def fun_l26_n893()
+ fun_l27_n649
+end
+
+def fun_l26_n894()
+ fun_l27_n560
+end
+
+def fun_l26_n895()
+ fun_l27_n861
+end
+
+def fun_l26_n896()
+ fun_l27_n565
+end
+
+def fun_l26_n897()
+ fun_l27_n864
+end
+
+def fun_l26_n898()
+ fun_l27_n590
+end
+
+def fun_l26_n899()
+ fun_l27_n413
+end
+
+def fun_l26_n900()
+ fun_l27_n833
+end
+
+def fun_l26_n901()
+ fun_l27_n948
+end
+
+def fun_l26_n902()
+ fun_l27_n946
+end
+
+def fun_l26_n903()
+ fun_l27_n211
+end
+
+def fun_l26_n904()
+ fun_l27_n367
+end
+
+def fun_l26_n905()
+ fun_l27_n893
+end
+
+def fun_l26_n906()
+ fun_l27_n710
+end
+
+def fun_l26_n907()
+ fun_l27_n655
+end
+
+def fun_l26_n908()
+ fun_l27_n830
+end
+
+def fun_l26_n909()
+ fun_l27_n649
+end
+
+def fun_l26_n910()
+ fun_l27_n195
+end
+
+def fun_l26_n911()
+ fun_l27_n474
+end
+
+def fun_l26_n912()
+ fun_l27_n362
+end
+
+def fun_l26_n913()
+ fun_l27_n199
+end
+
+def fun_l26_n914()
+ fun_l27_n426
+end
+
+def fun_l26_n915()
+ fun_l27_n123
+end
+
+def fun_l26_n916()
+ fun_l27_n734
+end
+
+def fun_l26_n917()
+ fun_l27_n646
+end
+
+def fun_l26_n918()
+ fun_l27_n603
+end
+
+def fun_l26_n919()
+ fun_l27_n907
+end
+
+def fun_l26_n920()
+ fun_l27_n500
+end
+
+def fun_l26_n921()
+ fun_l27_n30
+end
+
+def fun_l26_n922()
+ fun_l27_n393
+end
+
+def fun_l26_n923()
+ fun_l27_n981
+end
+
+def fun_l26_n924()
+ fun_l27_n318
+end
+
+def fun_l26_n925()
+ fun_l27_n979
+end
+
+def fun_l26_n926()
+ fun_l27_n439
+end
+
+def fun_l26_n927()
+ fun_l27_n398
+end
+
+def fun_l26_n928()
+ fun_l27_n301
+end
+
+def fun_l26_n929()
+ fun_l27_n778
+end
+
+def fun_l26_n930()
+ fun_l27_n318
+end
+
+def fun_l26_n931()
+ fun_l27_n835
+end
+
+def fun_l26_n932()
+ fun_l27_n90
+end
+
+def fun_l26_n933()
+ fun_l27_n321
+end
+
+def fun_l26_n934()
+ fun_l27_n600
+end
+
+def fun_l26_n935()
+ fun_l27_n731
+end
+
+def fun_l26_n936()
+ fun_l27_n318
+end
+
+def fun_l26_n937()
+ fun_l27_n229
+end
+
+def fun_l26_n938()
+ fun_l27_n997
+end
+
+def fun_l26_n939()
+ fun_l27_n105
+end
+
+def fun_l26_n940()
+ fun_l27_n122
+end
+
+def fun_l26_n941()
+ fun_l27_n680
+end
+
+def fun_l26_n942()
+ fun_l27_n814
+end
+
+def fun_l26_n943()
+ fun_l27_n350
+end
+
+def fun_l26_n944()
+ fun_l27_n363
+end
+
+def fun_l26_n945()
+ fun_l27_n82
+end
+
+def fun_l26_n946()
+ fun_l27_n82
+end
+
+def fun_l26_n947()
+ fun_l27_n638
+end
+
+def fun_l26_n948()
+ fun_l27_n677
+end
+
+def fun_l26_n949()
+ fun_l27_n931
+end
+
+def fun_l26_n950()
+ fun_l27_n151
+end
+
+def fun_l26_n951()
+ fun_l27_n862
+end
+
+def fun_l26_n952()
+ fun_l27_n984
+end
+
+def fun_l26_n953()
+ fun_l27_n471
+end
+
+def fun_l26_n954()
+ fun_l27_n859
+end
+
+def fun_l26_n955()
+ fun_l27_n127
+end
+
+def fun_l26_n956()
+ fun_l27_n963
+end
+
+def fun_l26_n957()
+ fun_l27_n859
+end
+
+def fun_l26_n958()
+ fun_l27_n900
+end
+
+def fun_l26_n959()
+ fun_l27_n957
+end
+
+def fun_l26_n960()
+ fun_l27_n443
+end
+
+def fun_l26_n961()
+ fun_l27_n826
+end
+
+def fun_l26_n962()
+ fun_l27_n303
+end
+
+def fun_l26_n963()
+ fun_l27_n766
+end
+
+def fun_l26_n964()
+ fun_l27_n420
+end
+
+def fun_l26_n965()
+ fun_l27_n873
+end
+
+def fun_l26_n966()
+ fun_l27_n285
+end
+
+def fun_l26_n967()
+ fun_l27_n490
+end
+
+def fun_l26_n968()
+ fun_l27_n46
+end
+
+def fun_l26_n969()
+ fun_l27_n451
+end
+
+def fun_l26_n970()
+ fun_l27_n157
+end
+
+def fun_l26_n971()
+ fun_l27_n981
+end
+
+def fun_l26_n972()
+ fun_l27_n969
+end
+
+def fun_l26_n973()
+ fun_l27_n644
+end
+
+def fun_l26_n974()
+ fun_l27_n753
+end
+
+def fun_l26_n975()
+ fun_l27_n306
+end
+
+def fun_l26_n976()
+ fun_l27_n617
+end
+
+def fun_l26_n977()
+ fun_l27_n258
+end
+
+def fun_l26_n978()
+ fun_l27_n511
+end
+
+def fun_l26_n979()
+ fun_l27_n267
+end
+
+def fun_l26_n980()
+ fun_l27_n42
+end
+
+def fun_l26_n981()
+ fun_l27_n153
+end
+
+def fun_l26_n982()
+ fun_l27_n77
+end
+
+def fun_l26_n983()
+ fun_l27_n658
+end
+
+def fun_l26_n984()
+ fun_l27_n605
+end
+
+def fun_l26_n985()
+ fun_l27_n40
+end
+
+def fun_l26_n986()
+ fun_l27_n375
+end
+
+def fun_l26_n987()
+ fun_l27_n273
+end
+
+def fun_l26_n988()
+ fun_l27_n290
+end
+
+def fun_l26_n989()
+ fun_l27_n507
+end
+
+def fun_l26_n990()
+ fun_l27_n537
+end
+
+def fun_l26_n991()
+ fun_l27_n373
+end
+
+def fun_l26_n992()
+ fun_l27_n39
+end
+
+def fun_l26_n993()
+ fun_l27_n356
+end
+
+def fun_l26_n994()
+ fun_l27_n875
+end
+
+def fun_l26_n995()
+ fun_l27_n112
+end
+
+def fun_l26_n996()
+ fun_l27_n209
+end
+
+def fun_l26_n997()
+ fun_l27_n690
+end
+
+def fun_l26_n998()
+ fun_l27_n19
+end
+
+def fun_l26_n999()
+ fun_l27_n962
+end
+
+def fun_l27_n0()
+ fun_l28_n602
+end
+
+def fun_l27_n1()
+ fun_l28_n911
+end
+
+def fun_l27_n2()
+ fun_l28_n797
+end
+
+def fun_l27_n3()
+ fun_l28_n261
+end
+
+def fun_l27_n4()
+ fun_l28_n172
+end
+
+def fun_l27_n5()
+ fun_l28_n430
+end
+
+def fun_l27_n6()
+ fun_l28_n397
+end
+
+def fun_l27_n7()
+ fun_l28_n388
+end
+
+def fun_l27_n8()
+ fun_l28_n218
+end
+
+def fun_l27_n9()
+ fun_l28_n71
+end
+
+def fun_l27_n10()
+ fun_l28_n424
+end
+
+def fun_l27_n11()
+ fun_l28_n454
+end
+
+def fun_l27_n12()
+ fun_l28_n388
+end
+
+def fun_l27_n13()
+ fun_l28_n909
+end
+
+def fun_l27_n14()
+ fun_l28_n655
+end
+
+def fun_l27_n15()
+ fun_l28_n355
+end
+
+def fun_l27_n16()
+ fun_l28_n319
+end
+
+def fun_l27_n17()
+ fun_l28_n137
+end
+
+def fun_l27_n18()
+ fun_l28_n929
+end
+
+def fun_l27_n19()
+ fun_l28_n887
+end
+
+def fun_l27_n20()
+ fun_l28_n571
+end
+
+def fun_l27_n21()
+ fun_l28_n480
+end
+
+def fun_l27_n22()
+ fun_l28_n431
+end
+
+def fun_l27_n23()
+ fun_l28_n918
+end
+
+def fun_l27_n24()
+ fun_l28_n673
+end
+
+def fun_l27_n25()
+ fun_l28_n550
+end
+
+def fun_l27_n26()
+ fun_l28_n256
+end
+
+def fun_l27_n27()
+ fun_l28_n624
+end
+
+def fun_l27_n28()
+ fun_l28_n245
+end
+
+def fun_l27_n29()
+ fun_l28_n303
+end
+
+def fun_l27_n30()
+ fun_l28_n260
+end
+
+def fun_l27_n31()
+ fun_l28_n174
+end
+
+def fun_l27_n32()
+ fun_l28_n147
+end
+
+def fun_l27_n33()
+ fun_l28_n590
+end
+
+def fun_l27_n34()
+ fun_l28_n691
+end
+
+def fun_l27_n35()
+ fun_l28_n739
+end
+
+def fun_l27_n36()
+ fun_l28_n530
+end
+
+def fun_l27_n37()
+ fun_l28_n20
+end
+
+def fun_l27_n38()
+ fun_l28_n147
+end
+
+def fun_l27_n39()
+ fun_l28_n362
+end
+
+def fun_l27_n40()
+ fun_l28_n250
+end
+
+def fun_l27_n41()
+ fun_l28_n579
+end
+
+def fun_l27_n42()
+ fun_l28_n557
+end
+
+def fun_l27_n43()
+ fun_l28_n639
+end
+
+def fun_l27_n44()
+ fun_l28_n309
+end
+
+def fun_l27_n45()
+ fun_l28_n213
+end
+
+def fun_l27_n46()
+ fun_l28_n178
+end
+
+def fun_l27_n47()
+ fun_l28_n974
+end
+
+def fun_l27_n48()
+ fun_l28_n500
+end
+
+def fun_l27_n49()
+ fun_l28_n814
+end
+
+def fun_l27_n50()
+ fun_l28_n930
+end
+
+def fun_l27_n51()
+ fun_l28_n329
+end
+
+def fun_l27_n52()
+ fun_l28_n385
+end
+
+def fun_l27_n53()
+ fun_l28_n214
+end
+
+def fun_l27_n54()
+ fun_l28_n934
+end
+
+def fun_l27_n55()
+ fun_l28_n645
+end
+
+def fun_l27_n56()
+ fun_l28_n311
+end
+
+def fun_l27_n57()
+ fun_l28_n15
+end
+
+def fun_l27_n58()
+ fun_l28_n499
+end
+
+def fun_l27_n59()
+ fun_l28_n919
+end
+
+def fun_l27_n60()
+ fun_l28_n659
+end
+
+def fun_l27_n61()
+ fun_l28_n921
+end
+
+def fun_l27_n62()
+ fun_l28_n306
+end
+
+def fun_l27_n63()
+ fun_l28_n128
+end
+
+def fun_l27_n64()
+ fun_l28_n871
+end
+
+def fun_l27_n65()
+ fun_l28_n434
+end
+
+def fun_l27_n66()
+ fun_l28_n775
+end
+
+def fun_l27_n67()
+ fun_l28_n311
+end
+
+def fun_l27_n68()
+ fun_l28_n959
+end
+
+def fun_l27_n69()
+ fun_l28_n648
+end
+
+def fun_l27_n70()
+ fun_l28_n893
+end
+
+def fun_l27_n71()
+ fun_l28_n669
+end
+
+def fun_l27_n72()
+ fun_l28_n121
+end
+
+def fun_l27_n73()
+ fun_l28_n102
+end
+
+def fun_l27_n74()
+ fun_l28_n887
+end
+
+def fun_l27_n75()
+ fun_l28_n326
+end
+
+def fun_l27_n76()
+ fun_l28_n48
+end
+
+def fun_l27_n77()
+ fun_l28_n636
+end
+
+def fun_l27_n78()
+ fun_l28_n804
+end
+
+def fun_l27_n79()
+ fun_l28_n838
+end
+
+def fun_l27_n80()
+ fun_l28_n859
+end
+
+def fun_l27_n81()
+ fun_l28_n683
+end
+
+def fun_l27_n82()
+ fun_l28_n752
+end
+
+def fun_l27_n83()
+ fun_l28_n244
+end
+
+def fun_l27_n84()
+ fun_l28_n727
+end
+
+def fun_l27_n85()
+ fun_l28_n818
+end
+
+def fun_l27_n86()
+ fun_l28_n451
+end
+
+def fun_l27_n87()
+ fun_l28_n9
+end
+
+def fun_l27_n88()
+ fun_l28_n738
+end
+
+def fun_l27_n89()
+ fun_l28_n589
+end
+
+def fun_l27_n90()
+ fun_l28_n140
+end
+
+def fun_l27_n91()
+ fun_l28_n615
+end
+
+def fun_l27_n92()
+ fun_l28_n973
+end
+
+def fun_l27_n93()
+ fun_l28_n668
+end
+
+def fun_l27_n94()
+ fun_l28_n299
+end
+
+def fun_l27_n95()
+ fun_l28_n358
+end
+
+def fun_l27_n96()
+ fun_l28_n319
+end
+
+def fun_l27_n97()
+ fun_l28_n165
+end
+
+def fun_l27_n98()
+ fun_l28_n67
+end
+
+def fun_l27_n99()
+ fun_l28_n494
+end
+
+def fun_l27_n100()
+ fun_l28_n107
+end
+
+def fun_l27_n101()
+ fun_l28_n985
+end
+
+def fun_l27_n102()
+ fun_l28_n239
+end
+
+def fun_l27_n103()
+ fun_l28_n64
+end
+
+def fun_l27_n104()
+ fun_l28_n676
+end
+
+def fun_l27_n105()
+ fun_l28_n852
+end
+
+def fun_l27_n106()
+ fun_l28_n668
+end
+
+def fun_l27_n107()
+ fun_l28_n523
+end
+
+def fun_l27_n108()
+ fun_l28_n15
+end
+
+def fun_l27_n109()
+ fun_l28_n619
+end
+
+def fun_l27_n110()
+ fun_l28_n440
+end
+
+def fun_l27_n111()
+ fun_l28_n792
+end
+
+def fun_l27_n112()
+ fun_l28_n771
+end
+
+def fun_l27_n113()
+ fun_l28_n263
+end
+
+def fun_l27_n114()
+ fun_l28_n180
+end
+
+def fun_l27_n115()
+ fun_l28_n615
+end
+
+def fun_l27_n116()
+ fun_l28_n319
+end
+
+def fun_l27_n117()
+ fun_l28_n970
+end
+
+def fun_l27_n118()
+ fun_l28_n946
+end
+
+def fun_l27_n119()
+ fun_l28_n121
+end
+
+def fun_l27_n120()
+ fun_l28_n655
+end
+
+def fun_l27_n121()
+ fun_l28_n68
+end
+
+def fun_l27_n122()
+ fun_l28_n406
+end
+
+def fun_l27_n123()
+ fun_l28_n535
+end
+
+def fun_l27_n124()
+ fun_l28_n951
+end
+
+def fun_l27_n125()
+ fun_l28_n366
+end
+
+def fun_l27_n126()
+ fun_l28_n192
+end
+
+def fun_l27_n127()
+ fun_l28_n106
+end
+
+def fun_l27_n128()
+ fun_l28_n21
+end
+
+def fun_l27_n129()
+ fun_l28_n339
+end
+
+def fun_l27_n130()
+ fun_l28_n824
+end
+
+def fun_l27_n131()
+ fun_l28_n921
+end
+
+def fun_l27_n132()
+ fun_l28_n678
+end
+
+def fun_l27_n133()
+ fun_l28_n925
+end
+
+def fun_l27_n134()
+ fun_l28_n55
+end
+
+def fun_l27_n135()
+ fun_l28_n726
+end
+
+def fun_l27_n136()
+ fun_l28_n110
+end
+
+def fun_l27_n137()
+ fun_l28_n559
+end
+
+def fun_l27_n138()
+ fun_l28_n879
+end
+
+def fun_l27_n139()
+ fun_l28_n332
+end
+
+def fun_l27_n140()
+ fun_l28_n167
+end
+
+def fun_l27_n141()
+ fun_l28_n123
+end
+
+def fun_l27_n142()
+ fun_l28_n707
+end
+
+def fun_l27_n143()
+ fun_l28_n423
+end
+
+def fun_l27_n144()
+ fun_l28_n659
+end
+
+def fun_l27_n145()
+ fun_l28_n322
+end
+
+def fun_l27_n146()
+ fun_l28_n227
+end
+
+def fun_l27_n147()
+ fun_l28_n679
+end
+
+def fun_l27_n148()
+ fun_l28_n376
+end
+
+def fun_l27_n149()
+ fun_l28_n327
+end
+
+def fun_l27_n150()
+ fun_l28_n328
+end
+
+def fun_l27_n151()
+ fun_l28_n408
+end
+
+def fun_l27_n152()
+ fun_l28_n141
+end
+
+def fun_l27_n153()
+ fun_l28_n728
+end
+
+def fun_l27_n154()
+ fun_l28_n207
+end
+
+def fun_l27_n155()
+ fun_l28_n836
+end
+
+def fun_l27_n156()
+ fun_l28_n71
+end
+
+def fun_l27_n157()
+ fun_l28_n390
+end
+
+def fun_l27_n158()
+ fun_l28_n277
+end
+
+def fun_l27_n159()
+ fun_l28_n960
+end
+
+def fun_l27_n160()
+ fun_l28_n705
+end
+
+def fun_l27_n161()
+ fun_l28_n445
+end
+
+def fun_l27_n162()
+ fun_l28_n570
+end
+
+def fun_l27_n163()
+ fun_l28_n878
+end
+
+def fun_l27_n164()
+ fun_l28_n714
+end
+
+def fun_l27_n165()
+ fun_l28_n933
+end
+
+def fun_l27_n166()
+ fun_l28_n480
+end
+
+def fun_l27_n167()
+ fun_l28_n308
+end
+
+def fun_l27_n168()
+ fun_l28_n604
+end
+
+def fun_l27_n169()
+ fun_l28_n892
+end
+
+def fun_l27_n170()
+ fun_l28_n901
+end
+
+def fun_l27_n171()
+ fun_l28_n524
+end
+
+def fun_l27_n172()
+ fun_l28_n533
+end
+
+def fun_l27_n173()
+ fun_l28_n761
+end
+
+def fun_l27_n174()
+ fun_l28_n97
+end
+
+def fun_l27_n175()
+ fun_l28_n944
+end
+
+def fun_l27_n176()
+ fun_l28_n627
+end
+
+def fun_l27_n177()
+ fun_l28_n720
+end
+
+def fun_l27_n178()
+ fun_l28_n366
+end
+
+def fun_l27_n179()
+ fun_l28_n353
+end
+
+def fun_l27_n180()
+ fun_l28_n441
+end
+
+def fun_l27_n181()
+ fun_l28_n682
+end
+
+def fun_l27_n182()
+ fun_l28_n581
+end
+
+def fun_l27_n183()
+ fun_l28_n974
+end
+
+def fun_l27_n184()
+ fun_l28_n522
+end
+
+def fun_l27_n185()
+ fun_l28_n702
+end
+
+def fun_l27_n186()
+ fun_l28_n941
+end
+
+def fun_l27_n187()
+ fun_l28_n665
+end
+
+def fun_l27_n188()
+ fun_l28_n148
+end
+
+def fun_l27_n189()
+ fun_l28_n91
+end
+
+def fun_l27_n190()
+ fun_l28_n679
+end
+
+def fun_l27_n191()
+ fun_l28_n929
+end
+
+def fun_l27_n192()
+ fun_l28_n828
+end
+
+def fun_l27_n193()
+ fun_l28_n872
+end
+
+def fun_l27_n194()
+ fun_l28_n152
+end
+
+def fun_l27_n195()
+ fun_l28_n593
+end
+
+def fun_l27_n196()
+ fun_l28_n438
+end
+
+def fun_l27_n197()
+ fun_l28_n390
+end
+
+def fun_l27_n198()
+ fun_l28_n354
+end
+
+def fun_l27_n199()
+ fun_l28_n547
+end
+
+def fun_l27_n200()
+ fun_l28_n249
+end
+
+def fun_l27_n201()
+ fun_l28_n562
+end
+
+def fun_l27_n202()
+ fun_l28_n571
+end
+
+def fun_l27_n203()
+ fun_l28_n763
+end
+
+def fun_l27_n204()
+ fun_l28_n961
+end
+
+def fun_l27_n205()
+ fun_l28_n368
+end
+
+def fun_l27_n206()
+ fun_l28_n219
+end
+
+def fun_l27_n207()
+ fun_l28_n414
+end
+
+def fun_l27_n208()
+ fun_l28_n130
+end
+
+def fun_l27_n209()
+ fun_l28_n911
+end
+
+def fun_l27_n210()
+ fun_l28_n94
+end
+
+def fun_l27_n211()
+ fun_l28_n966
+end
+
+def fun_l27_n212()
+ fun_l28_n271
+end
+
+def fun_l27_n213()
+ fun_l28_n372
+end
+
+def fun_l27_n214()
+ fun_l28_n845
+end
+
+def fun_l27_n215()
+ fun_l28_n924
+end
+
+def fun_l27_n216()
+ fun_l28_n220
+end
+
+def fun_l27_n217()
+ fun_l28_n653
+end
+
+def fun_l27_n218()
+ fun_l28_n960
+end
+
+def fun_l27_n219()
+ fun_l28_n343
+end
+
+def fun_l27_n220()
+ fun_l28_n255
+end
+
+def fun_l27_n221()
+ fun_l28_n206
+end
+
+def fun_l27_n222()
+ fun_l28_n190
+end
+
+def fun_l27_n223()
+ fun_l28_n753
+end
+
+def fun_l27_n224()
+ fun_l28_n530
+end
+
+def fun_l27_n225()
+ fun_l28_n198
+end
+
+def fun_l27_n226()
+ fun_l28_n604
+end
+
+def fun_l27_n227()
+ fun_l28_n685
+end
+
+def fun_l27_n228()
+ fun_l28_n268
+end
+
+def fun_l27_n229()
+ fun_l28_n344
+end
+
+def fun_l27_n230()
+ fun_l28_n850
+end
+
+def fun_l27_n231()
+ fun_l28_n612
+end
+
+def fun_l27_n232()
+ fun_l28_n598
+end
+
+def fun_l27_n233()
+ fun_l28_n766
+end
+
+def fun_l27_n234()
+ fun_l28_n994
+end
+
+def fun_l27_n235()
+ fun_l28_n566
+end
+
+def fun_l27_n236()
+ fun_l28_n306
+end
+
+def fun_l27_n237()
+ fun_l28_n592
+end
+
+def fun_l27_n238()
+ fun_l28_n814
+end
+
+def fun_l27_n239()
+ fun_l28_n319
+end
+
+def fun_l27_n240()
+ fun_l28_n619
+end
+
+def fun_l27_n241()
+ fun_l28_n631
+end
+
+def fun_l27_n242()
+ fun_l28_n240
+end
+
+def fun_l27_n243()
+ fun_l28_n714
+end
+
+def fun_l27_n244()
+ fun_l28_n651
+end
+
+def fun_l27_n245()
+ fun_l28_n760
+end
+
+def fun_l27_n246()
+ fun_l28_n925
+end
+
+def fun_l27_n247()
+ fun_l28_n537
+end
+
+def fun_l27_n248()
+ fun_l28_n541
+end
+
+def fun_l27_n249()
+ fun_l28_n963
+end
+
+def fun_l27_n250()
+ fun_l28_n630
+end
+
+def fun_l27_n251()
+ fun_l28_n124
+end
+
+def fun_l27_n252()
+ fun_l28_n894
+end
+
+def fun_l27_n253()
+ fun_l28_n307
+end
+
+def fun_l27_n254()
+ fun_l28_n485
+end
+
+def fun_l27_n255()
+ fun_l28_n272
+end
+
+def fun_l27_n256()
+ fun_l28_n994
+end
+
+def fun_l27_n257()
+ fun_l28_n48
+end
+
+def fun_l27_n258()
+ fun_l28_n374
+end
+
+def fun_l27_n259()
+ fun_l28_n508
+end
+
+def fun_l27_n260()
+ fun_l28_n936
+end
+
+def fun_l27_n261()
+ fun_l28_n43
+end
+
+def fun_l27_n262()
+ fun_l28_n297
+end
+
+def fun_l27_n263()
+ fun_l28_n205
+end
+
+def fun_l27_n264()
+ fun_l28_n234
+end
+
+def fun_l27_n265()
+ fun_l28_n560
+end
+
+def fun_l27_n266()
+ fun_l28_n124
+end
+
+def fun_l27_n267()
+ fun_l28_n912
+end
+
+def fun_l27_n268()
+ fun_l28_n545
+end
+
+def fun_l27_n269()
+ fun_l28_n266
+end
+
+def fun_l27_n270()
+ fun_l28_n917
+end
+
+def fun_l27_n271()
+ fun_l28_n971
+end
+
+def fun_l27_n272()
+ fun_l28_n305
+end
+
+def fun_l27_n273()
+ fun_l28_n158
+end
+
+def fun_l27_n274()
+ fun_l28_n241
+end
+
+def fun_l27_n275()
+ fun_l28_n667
+end
+
+def fun_l27_n276()
+ fun_l28_n857
+end
+
+def fun_l27_n277()
+ fun_l28_n207
+end
+
+def fun_l27_n278()
+ fun_l28_n258
+end
+
+def fun_l27_n279()
+ fun_l28_n410
+end
+
+def fun_l27_n280()
+ fun_l28_n868
+end
+
+def fun_l27_n281()
+ fun_l28_n976
+end
+
+def fun_l27_n282()
+ fun_l28_n519
+end
+
+def fun_l27_n283()
+ fun_l28_n165
+end
+
+def fun_l27_n284()
+ fun_l28_n790
+end
+
+def fun_l27_n285()
+ fun_l28_n825
+end
+
+def fun_l27_n286()
+ fun_l28_n844
+end
+
+def fun_l27_n287()
+ fun_l28_n450
+end
+
+def fun_l27_n288()
+ fun_l28_n913
+end
+
+def fun_l27_n289()
+ fun_l28_n418
+end
+
+def fun_l27_n290()
+ fun_l28_n63
+end
+
+def fun_l27_n291()
+ fun_l28_n306
+end
+
+def fun_l27_n292()
+ fun_l28_n233
+end
+
+def fun_l27_n293()
+ fun_l28_n274
+end
+
+def fun_l27_n294()
+ fun_l28_n292
+end
+
+def fun_l27_n295()
+ fun_l28_n504
+end
+
+def fun_l27_n296()
+ fun_l28_n769
+end
+
+def fun_l27_n297()
+ fun_l28_n404
+end
+
+def fun_l27_n298()
+ fun_l28_n782
+end
+
+def fun_l27_n299()
+ fun_l28_n788
+end
+
+def fun_l27_n300()
+ fun_l28_n727
+end
+
+def fun_l27_n301()
+ fun_l28_n187
+end
+
+def fun_l27_n302()
+ fun_l28_n568
+end
+
+def fun_l27_n303()
+ fun_l28_n195
+end
+
+def fun_l27_n304()
+ fun_l28_n696
+end
+
+def fun_l27_n305()
+ fun_l28_n293
+end
+
+def fun_l27_n306()
+ fun_l28_n722
+end
+
+def fun_l27_n307()
+ fun_l28_n911
+end
+
+def fun_l27_n308()
+ fun_l28_n827
+end
+
+def fun_l27_n309()
+ fun_l28_n767
+end
+
+def fun_l27_n310()
+ fun_l28_n423
+end
+
+def fun_l27_n311()
+ fun_l28_n60
+end
+
+def fun_l27_n312()
+ fun_l28_n466
+end
+
+def fun_l27_n313()
+ fun_l28_n270
+end
+
+def fun_l27_n314()
+ fun_l28_n993
+end
+
+def fun_l27_n315()
+ fun_l28_n231
+end
+
+def fun_l27_n316()
+ fun_l28_n514
+end
+
+def fun_l27_n317()
+ fun_l28_n57
+end
+
+def fun_l27_n318()
+ fun_l28_n646
+end
+
+def fun_l27_n319()
+ fun_l28_n17
+end
+
+def fun_l27_n320()
+ fun_l28_n964
+end
+
+def fun_l27_n321()
+ fun_l28_n1
+end
+
+def fun_l27_n322()
+ fun_l28_n956
+end
+
+def fun_l27_n323()
+ fun_l28_n273
+end
+
+def fun_l27_n324()
+ fun_l28_n370
+end
+
+def fun_l27_n325()
+ fun_l28_n81
+end
+
+def fun_l27_n326()
+ fun_l28_n765
+end
+
+def fun_l27_n327()
+ fun_l28_n506
+end
+
+def fun_l27_n328()
+ fun_l28_n327
+end
+
+def fun_l27_n329()
+ fun_l28_n362
+end
+
+def fun_l27_n330()
+ fun_l28_n852
+end
+
+def fun_l27_n331()
+ fun_l28_n876
+end
+
+def fun_l27_n332()
+ fun_l28_n531
+end
+
+def fun_l27_n333()
+ fun_l28_n426
+end
+
+def fun_l27_n334()
+ fun_l28_n295
+end
+
+def fun_l27_n335()
+ fun_l28_n929
+end
+
+def fun_l27_n336()
+ fun_l28_n693
+end
+
+def fun_l27_n337()
+ fun_l28_n724
+end
+
+def fun_l27_n338()
+ fun_l28_n784
+end
+
+def fun_l27_n339()
+ fun_l28_n752
+end
+
+def fun_l27_n340()
+ fun_l28_n809
+end
+
+def fun_l27_n341()
+ fun_l28_n269
+end
+
+def fun_l27_n342()
+ fun_l28_n33
+end
+
+def fun_l27_n343()
+ fun_l28_n778
+end
+
+def fun_l27_n344()
+ fun_l28_n974
+end
+
+def fun_l27_n345()
+ fun_l28_n843
+end
+
+def fun_l27_n346()
+ fun_l28_n86
+end
+
+def fun_l27_n347()
+ fun_l28_n594
+end
+
+def fun_l27_n348()
+ fun_l28_n111
+end
+
+def fun_l27_n349()
+ fun_l28_n317
+end
+
+def fun_l27_n350()
+ fun_l28_n238
+end
+
+def fun_l27_n351()
+ fun_l28_n447
+end
+
+def fun_l27_n352()
+ fun_l28_n954
+end
+
+def fun_l27_n353()
+ fun_l28_n846
+end
+
+def fun_l27_n354()
+ fun_l28_n124
+end
+
+def fun_l27_n355()
+ fun_l28_n445
+end
+
+def fun_l27_n356()
+ fun_l28_n957
+end
+
+def fun_l27_n357()
+ fun_l28_n365
+end
+
+def fun_l27_n358()
+ fun_l28_n136
+end
+
+def fun_l27_n359()
+ fun_l28_n372
+end
+
+def fun_l27_n360()
+ fun_l28_n487
+end
+
+def fun_l27_n361()
+ fun_l28_n493
+end
+
+def fun_l27_n362()
+ fun_l28_n905
+end
+
+def fun_l27_n363()
+ fun_l28_n146
+end
+
+def fun_l27_n364()
+ fun_l28_n523
+end
+
+def fun_l27_n365()
+ fun_l28_n876
+end
+
+def fun_l27_n366()
+ fun_l28_n67
+end
+
+def fun_l27_n367()
+ fun_l28_n746
+end
+
+def fun_l27_n368()
+ fun_l28_n264
+end
+
+def fun_l27_n369()
+ fun_l28_n470
+end
+
+def fun_l27_n370()
+ fun_l28_n240
+end
+
+def fun_l27_n371()
+ fun_l28_n928
+end
+
+def fun_l27_n372()
+ fun_l28_n574
+end
+
+def fun_l27_n373()
+ fun_l28_n756
+end
+
+def fun_l27_n374()
+ fun_l28_n244
+end
+
+def fun_l27_n375()
+ fun_l28_n46
+end
+
+def fun_l27_n376()
+ fun_l28_n940
+end
+
+def fun_l27_n377()
+ fun_l28_n430
+end
+
+def fun_l27_n378()
+ fun_l28_n879
+end
+
+def fun_l27_n379()
+ fun_l28_n560
+end
+
+def fun_l27_n380()
+ fun_l28_n231
+end
+
+def fun_l27_n381()
+ fun_l28_n283
+end
+
+def fun_l27_n382()
+ fun_l28_n438
+end
+
+def fun_l27_n383()
+ fun_l28_n207
+end
+
+def fun_l27_n384()
+ fun_l28_n185
+end
+
+def fun_l27_n385()
+ fun_l28_n40
+end
+
+def fun_l27_n386()
+ fun_l28_n572
+end
+
+def fun_l27_n387()
+ fun_l28_n975
+end
+
+def fun_l27_n388()
+ fun_l28_n117
+end
+
+def fun_l27_n389()
+ fun_l28_n329
+end
+
+def fun_l27_n390()
+ fun_l28_n311
+end
+
+def fun_l27_n391()
+ fun_l28_n653
+end
+
+def fun_l27_n392()
+ fun_l28_n522
+end
+
+def fun_l27_n393()
+ fun_l28_n452
+end
+
+def fun_l27_n394()
+ fun_l28_n137
+end
+
+def fun_l27_n395()
+ fun_l28_n606
+end
+
+def fun_l27_n396()
+ fun_l28_n901
+end
+
+def fun_l27_n397()
+ fun_l28_n434
+end
+
+def fun_l27_n398()
+ fun_l28_n863
+end
+
+def fun_l27_n399()
+ fun_l28_n117
+end
+
+def fun_l27_n400()
+ fun_l28_n473
+end
+
+def fun_l27_n401()
+ fun_l28_n638
+end
+
+def fun_l27_n402()
+ fun_l28_n71
+end
+
+def fun_l27_n403()
+ fun_l28_n423
+end
+
+def fun_l27_n404()
+ fun_l28_n362
+end
+
+def fun_l27_n405()
+ fun_l28_n537
+end
+
+def fun_l27_n406()
+ fun_l28_n975
+end
+
+def fun_l27_n407()
+ fun_l28_n424
+end
+
+def fun_l27_n408()
+ fun_l28_n613
+end
+
+def fun_l27_n409()
+ fun_l28_n606
+end
+
+def fun_l27_n410()
+ fun_l28_n782
+end
+
+def fun_l27_n411()
+ fun_l28_n445
+end
+
+def fun_l27_n412()
+ fun_l28_n362
+end
+
+def fun_l27_n413()
+ fun_l28_n837
+end
+
+def fun_l27_n414()
+ fun_l28_n335
+end
+
+def fun_l27_n415()
+ fun_l28_n258
+end
+
+def fun_l27_n416()
+ fun_l28_n832
+end
+
+def fun_l27_n417()
+ fun_l28_n102
+end
+
+def fun_l27_n418()
+ fun_l28_n202
+end
+
+def fun_l27_n419()
+ fun_l28_n624
+end
+
+def fun_l27_n420()
+ fun_l28_n118
+end
+
+def fun_l27_n421()
+ fun_l28_n247
+end
+
+def fun_l27_n422()
+ fun_l28_n768
+end
+
+def fun_l27_n423()
+ fun_l28_n879
+end
+
+def fun_l27_n424()
+ fun_l28_n650
+end
+
+def fun_l27_n425()
+ fun_l28_n545
+end
+
+def fun_l27_n426()
+ fun_l28_n854
+end
+
+def fun_l27_n427()
+ fun_l28_n722
+end
+
+def fun_l27_n428()
+ fun_l28_n637
+end
+
+def fun_l27_n429()
+ fun_l28_n295
+end
+
+def fun_l27_n430()
+ fun_l28_n504
+end
+
+def fun_l27_n431()
+ fun_l28_n939
+end
+
+def fun_l27_n432()
+ fun_l28_n52
+end
+
+def fun_l27_n433()
+ fun_l28_n613
+end
+
+def fun_l27_n434()
+ fun_l28_n165
+end
+
+def fun_l27_n435()
+ fun_l28_n948
+end
+
+def fun_l27_n436()
+ fun_l28_n995
+end
+
+def fun_l27_n437()
+ fun_l28_n572
+end
+
+def fun_l27_n438()
+ fun_l28_n919
+end
+
+def fun_l27_n439()
+ fun_l28_n843
+end
+
+def fun_l27_n440()
+ fun_l28_n826
+end
+
+def fun_l27_n441()
+ fun_l28_n328
+end
+
+def fun_l27_n442()
+ fun_l28_n330
+end
+
+def fun_l27_n443()
+ fun_l28_n819
+end
+
+def fun_l27_n444()
+ fun_l28_n949
+end
+
+def fun_l27_n445()
+ fun_l28_n505
+end
+
+def fun_l27_n446()
+ fun_l28_n306
+end
+
+def fun_l27_n447()
+ fun_l28_n731
+end
+
+def fun_l27_n448()
+ fun_l28_n232
+end
+
+def fun_l27_n449()
+ fun_l28_n251
+end
+
+def fun_l27_n450()
+ fun_l28_n807
+end
+
+def fun_l27_n451()
+ fun_l28_n808
+end
+
+def fun_l27_n452()
+ fun_l28_n672
+end
+
+def fun_l27_n453()
+ fun_l28_n0
+end
+
+def fun_l27_n454()
+ fun_l28_n659
+end
+
+def fun_l27_n455()
+ fun_l28_n955
+end
+
+def fun_l27_n456()
+ fun_l28_n314
+end
+
+def fun_l27_n457()
+ fun_l28_n539
+end
+
+def fun_l27_n458()
+ fun_l28_n394
+end
+
+def fun_l27_n459()
+ fun_l28_n48
+end
+
+def fun_l27_n460()
+ fun_l28_n434
+end
+
+def fun_l27_n461()
+ fun_l28_n54
+end
+
+def fun_l27_n462()
+ fun_l28_n108
+end
+
+def fun_l27_n463()
+ fun_l28_n80
+end
+
+def fun_l27_n464()
+ fun_l28_n255
+end
+
+def fun_l27_n465()
+ fun_l28_n273
+end
+
+def fun_l27_n466()
+ fun_l28_n227
+end
+
+def fun_l27_n467()
+ fun_l28_n764
+end
+
+def fun_l27_n468()
+ fun_l28_n210
+end
+
+def fun_l27_n469()
+ fun_l28_n68
+end
+
+def fun_l27_n470()
+ fun_l28_n178
+end
+
+def fun_l27_n471()
+ fun_l28_n500
+end
+
+def fun_l27_n472()
+ fun_l28_n374
+end
+
+def fun_l27_n473()
+ fun_l28_n98
+end
+
+def fun_l27_n474()
+ fun_l28_n232
+end
+
+def fun_l27_n475()
+ fun_l28_n35
+end
+
+def fun_l27_n476()
+ fun_l28_n483
+end
+
+def fun_l27_n477()
+ fun_l28_n282
+end
+
+def fun_l27_n478()
+ fun_l28_n512
+end
+
+def fun_l27_n479()
+ fun_l28_n755
+end
+
+def fun_l27_n480()
+ fun_l28_n299
+end
+
+def fun_l27_n481()
+ fun_l28_n899
+end
+
+def fun_l27_n482()
+ fun_l28_n872
+end
+
+def fun_l27_n483()
+ fun_l28_n558
+end
+
+def fun_l27_n484()
+ fun_l28_n700
+end
+
+def fun_l27_n485()
+ fun_l28_n949
+end
+
+def fun_l27_n486()
+ fun_l28_n272
+end
+
+def fun_l27_n487()
+ fun_l28_n808
+end
+
+def fun_l27_n488()
+ fun_l28_n36
+end
+
+def fun_l27_n489()
+ fun_l28_n698
+end
+
+def fun_l27_n490()
+ fun_l28_n386
+end
+
+def fun_l27_n491()
+ fun_l28_n745
+end
+
+def fun_l27_n492()
+ fun_l28_n26
+end
+
+def fun_l27_n493()
+ fun_l28_n148
+end
+
+def fun_l27_n494()
+ fun_l28_n300
+end
+
+def fun_l27_n495()
+ fun_l28_n292
+end
+
+def fun_l27_n496()
+ fun_l28_n892
+end
+
+def fun_l27_n497()
+ fun_l28_n824
+end
+
+def fun_l27_n498()
+ fun_l28_n89
+end
+
+def fun_l27_n499()
+ fun_l28_n248
+end
+
+def fun_l27_n500()
+ fun_l28_n19
+end
+
+def fun_l27_n501()
+ fun_l28_n600
+end
+
+def fun_l27_n502()
+ fun_l28_n210
+end
+
+def fun_l27_n503()
+ fun_l28_n27
+end
+
+def fun_l27_n504()
+ fun_l28_n866
+end
+
+def fun_l27_n505()
+ fun_l28_n231
+end
+
+def fun_l27_n506()
+ fun_l28_n622
+end
+
+def fun_l27_n507()
+ fun_l28_n381
+end
+
+def fun_l27_n508()
+ fun_l28_n997
+end
+
+def fun_l27_n509()
+ fun_l28_n799
+end
+
+def fun_l27_n510()
+ fun_l28_n18
+end
+
+def fun_l27_n511()
+ fun_l28_n60
+end
+
+def fun_l27_n512()
+ fun_l28_n287
+end
+
+def fun_l27_n513()
+ fun_l28_n478
+end
+
+def fun_l27_n514()
+ fun_l28_n562
+end
+
+def fun_l27_n515()
+ fun_l28_n779
+end
+
+def fun_l27_n516()
+ fun_l28_n585
+end
+
+def fun_l27_n517()
+ fun_l28_n464
+end
+
+def fun_l27_n518()
+ fun_l28_n304
+end
+
+def fun_l27_n519()
+ fun_l28_n189
+end
+
+def fun_l27_n520()
+ fun_l28_n959
+end
+
+def fun_l27_n521()
+ fun_l28_n5
+end
+
+def fun_l27_n522()
+ fun_l28_n866
+end
+
+def fun_l27_n523()
+ fun_l28_n14
+end
+
+def fun_l27_n524()
+ fun_l28_n644
+end
+
+def fun_l27_n525()
+ fun_l28_n725
+end
+
+def fun_l27_n526()
+ fun_l28_n18
+end
+
+def fun_l27_n527()
+ fun_l28_n9
+end
+
+def fun_l27_n528()
+ fun_l28_n0
+end
+
+def fun_l27_n529()
+ fun_l28_n154
+end
+
+def fun_l27_n530()
+ fun_l28_n313
+end
+
+def fun_l27_n531()
+ fun_l28_n478
+end
+
+def fun_l27_n532()
+ fun_l28_n139
+end
+
+def fun_l27_n533()
+ fun_l28_n913
+end
+
+def fun_l27_n534()
+ fun_l28_n113
+end
+
+def fun_l27_n535()
+ fun_l28_n685
+end
+
+def fun_l27_n536()
+ fun_l28_n275
+end
+
+def fun_l27_n537()
+ fun_l28_n556
+end
+
+def fun_l27_n538()
+ fun_l28_n276
+end
+
+def fun_l27_n539()
+ fun_l28_n283
+end
+
+def fun_l27_n540()
+ fun_l28_n694
+end
+
+def fun_l27_n541()
+ fun_l28_n396
+end
+
+def fun_l27_n542()
+ fun_l28_n181
+end
+
+def fun_l27_n543()
+ fun_l28_n231
+end
+
+def fun_l27_n544()
+ fun_l28_n228
+end
+
+def fun_l27_n545()
+ fun_l28_n958
+end
+
+def fun_l27_n546()
+ fun_l28_n91
+end
+
+def fun_l27_n547()
+ fun_l28_n878
+end
+
+def fun_l27_n548()
+ fun_l28_n180
+end
+
+def fun_l27_n549()
+ fun_l28_n13
+end
+
+def fun_l27_n550()
+ fun_l28_n161
+end
+
+def fun_l27_n551()
+ fun_l28_n603
+end
+
+def fun_l27_n552()
+ fun_l28_n101
+end
+
+def fun_l27_n553()
+ fun_l28_n825
+end
+
+def fun_l27_n554()
+ fun_l28_n370
+end
+
+def fun_l27_n555()
+ fun_l28_n983
+end
+
+def fun_l27_n556()
+ fun_l28_n888
+end
+
+def fun_l27_n557()
+ fun_l28_n610
+end
+
+def fun_l27_n558()
+ fun_l28_n630
+end
+
+def fun_l27_n559()
+ fun_l28_n345
+end
+
+def fun_l27_n560()
+ fun_l28_n376
+end
+
+def fun_l27_n561()
+ fun_l28_n409
+end
+
+def fun_l27_n562()
+ fun_l28_n717
+end
+
+def fun_l27_n563()
+ fun_l28_n66
+end
+
+def fun_l27_n564()
+ fun_l28_n228
+end
+
+def fun_l27_n565()
+ fun_l28_n485
+end
+
+def fun_l27_n566()
+ fun_l28_n252
+end
+
+def fun_l27_n567()
+ fun_l28_n444
+end
+
+def fun_l27_n568()
+ fun_l28_n253
+end
+
+def fun_l27_n569()
+ fun_l28_n839
+end
+
+def fun_l27_n570()
+ fun_l28_n216
+end
+
+def fun_l27_n571()
+ fun_l28_n797
+end
+
+def fun_l27_n572()
+ fun_l28_n127
+end
+
+def fun_l27_n573()
+ fun_l28_n335
+end
+
+def fun_l27_n574()
+ fun_l28_n141
+end
+
+def fun_l27_n575()
+ fun_l28_n536
+end
+
+def fun_l27_n576()
+ fun_l28_n463
+end
+
+def fun_l27_n577()
+ fun_l28_n925
+end
+
+def fun_l27_n578()
+ fun_l28_n707
+end
+
+def fun_l27_n579()
+ fun_l28_n530
+end
+
+def fun_l27_n580()
+ fun_l28_n678
+end
+
+def fun_l27_n581()
+ fun_l28_n234
+end
+
+def fun_l27_n582()
+ fun_l28_n803
+end
+
+def fun_l27_n583()
+ fun_l28_n530
+end
+
+def fun_l27_n584()
+ fun_l28_n131
+end
+
+def fun_l27_n585()
+ fun_l28_n512
+end
+
+def fun_l27_n586()
+ fun_l28_n550
+end
+
+def fun_l27_n587()
+ fun_l28_n528
+end
+
+def fun_l27_n588()
+ fun_l28_n214
+end
+
+def fun_l27_n589()
+ fun_l28_n801
+end
+
+def fun_l27_n590()
+ fun_l28_n69
+end
+
+def fun_l27_n591()
+ fun_l28_n519
+end
+
+def fun_l27_n592()
+ fun_l28_n909
+end
+
+def fun_l27_n593()
+ fun_l28_n981
+end
+
+def fun_l27_n594()
+ fun_l28_n108
+end
+
+def fun_l27_n595()
+ fun_l28_n762
+end
+
+def fun_l27_n596()
+ fun_l28_n838
+end
+
+def fun_l27_n597()
+ fun_l28_n311
+end
+
+def fun_l27_n598()
+ fun_l28_n428
+end
+
+def fun_l27_n599()
+ fun_l28_n111
+end
+
+def fun_l27_n600()
+ fun_l28_n600
+end
+
+def fun_l27_n601()
+ fun_l28_n996
+end
+
+def fun_l27_n602()
+ fun_l28_n439
+end
+
+def fun_l27_n603()
+ fun_l28_n379
+end
+
+def fun_l27_n604()
+ fun_l28_n959
+end
+
+def fun_l27_n605()
+ fun_l28_n287
+end
+
+def fun_l27_n606()
+ fun_l28_n893
+end
+
+def fun_l27_n607()
+ fun_l28_n384
+end
+
+def fun_l27_n608()
+ fun_l28_n815
+end
+
+def fun_l27_n609()
+ fun_l28_n733
+end
+
+def fun_l27_n610()
+ fun_l28_n875
+end
+
+def fun_l27_n611()
+ fun_l28_n343
+end
+
+def fun_l27_n612()
+ fun_l28_n605
+end
+
+def fun_l27_n613()
+ fun_l28_n968
+end
+
+def fun_l27_n614()
+ fun_l28_n703
+end
+
+def fun_l27_n615()
+ fun_l28_n50
+end
+
+def fun_l27_n616()
+ fun_l28_n807
+end
+
+def fun_l27_n617()
+ fun_l28_n261
+end
+
+def fun_l27_n618()
+ fun_l28_n887
+end
+
+def fun_l27_n619()
+ fun_l28_n165
+end
+
+def fun_l27_n620()
+ fun_l28_n62
+end
+
+def fun_l27_n621()
+ fun_l28_n437
+end
+
+def fun_l27_n622()
+ fun_l28_n267
+end
+
+def fun_l27_n623()
+ fun_l28_n739
+end
+
+def fun_l27_n624()
+ fun_l28_n624
+end
+
+def fun_l27_n625()
+ fun_l28_n845
+end
+
+def fun_l27_n626()
+ fun_l28_n844
+end
+
+def fun_l27_n627()
+ fun_l28_n541
+end
+
+def fun_l27_n628()
+ fun_l28_n175
+end
+
+def fun_l27_n629()
+ fun_l28_n295
+end
+
+def fun_l27_n630()
+ fun_l28_n600
+end
+
+def fun_l27_n631()
+ fun_l28_n250
+end
+
+def fun_l27_n632()
+ fun_l28_n167
+end
+
+def fun_l27_n633()
+ fun_l28_n7
+end
+
+def fun_l27_n634()
+ fun_l28_n75
+end
+
+def fun_l27_n635()
+ fun_l28_n208
+end
+
+def fun_l27_n636()
+ fun_l28_n53
+end
+
+def fun_l27_n637()
+ fun_l28_n132
+end
+
+def fun_l27_n638()
+ fun_l28_n859
+end
+
+def fun_l27_n639()
+ fun_l28_n925
+end
+
+def fun_l27_n640()
+ fun_l28_n34
+end
+
+def fun_l27_n641()
+ fun_l28_n226
+end
+
+def fun_l27_n642()
+ fun_l28_n916
+end
+
+def fun_l27_n643()
+ fun_l28_n893
+end
+
+def fun_l27_n644()
+ fun_l28_n100
+end
+
+def fun_l27_n645()
+ fun_l28_n526
+end
+
+def fun_l27_n646()
+ fun_l28_n113
+end
+
+def fun_l27_n647()
+ fun_l28_n786
+end
+
+def fun_l27_n648()
+ fun_l28_n995
+end
+
+def fun_l27_n649()
+ fun_l28_n968
+end
+
+def fun_l27_n650()
+ fun_l28_n705
+end
+
+def fun_l27_n651()
+ fun_l28_n581
+end
+
+def fun_l27_n652()
+ fun_l28_n112
+end
+
+def fun_l27_n653()
+ fun_l28_n475
+end
+
+def fun_l27_n654()
+ fun_l28_n264
+end
+
+def fun_l27_n655()
+ fun_l28_n44
+end
+
+def fun_l27_n656()
+ fun_l28_n302
+end
+
+def fun_l27_n657()
+ fun_l28_n830
+end
+
+def fun_l27_n658()
+ fun_l28_n551
+end
+
+def fun_l27_n659()
+ fun_l28_n811
+end
+
+def fun_l27_n660()
+ fun_l28_n476
+end
+
+def fun_l27_n661()
+ fun_l28_n547
+end
+
+def fun_l27_n662()
+ fun_l28_n709
+end
+
+def fun_l27_n663()
+ fun_l28_n435
+end
+
+def fun_l27_n664()
+ fun_l28_n727
+end
+
+def fun_l27_n665()
+ fun_l28_n630
+end
+
+def fun_l27_n666()
+ fun_l28_n514
+end
+
+def fun_l27_n667()
+ fun_l28_n939
+end
+
+def fun_l27_n668()
+ fun_l28_n198
+end
+
+def fun_l27_n669()
+ fun_l28_n165
+end
+
+def fun_l27_n670()
+ fun_l28_n415
+end
+
+def fun_l27_n671()
+ fun_l28_n316
+end
+
+def fun_l27_n672()
+ fun_l28_n602
+end
+
+def fun_l27_n673()
+ fun_l28_n776
+end
+
+def fun_l27_n674()
+ fun_l28_n681
+end
+
+def fun_l27_n675()
+ fun_l28_n131
+end
+
+def fun_l27_n676()
+ fun_l28_n812
+end
+
+def fun_l27_n677()
+ fun_l28_n666
+end
+
+def fun_l27_n678()
+ fun_l28_n209
+end
+
+def fun_l27_n679()
+ fun_l28_n953
+end
+
+def fun_l27_n680()
+ fun_l28_n797
+end
+
+def fun_l27_n681()
+ fun_l28_n317
+end
+
+def fun_l27_n682()
+ fun_l28_n43
+end
+
+def fun_l27_n683()
+ fun_l28_n673
+end
+
+def fun_l27_n684()
+ fun_l28_n701
+end
+
+def fun_l27_n685()
+ fun_l28_n961
+end
+
+def fun_l27_n686()
+ fun_l28_n684
+end
+
+def fun_l27_n687()
+ fun_l28_n677
+end
+
+def fun_l27_n688()
+ fun_l28_n213
+end
+
+def fun_l27_n689()
+ fun_l28_n22
+end
+
+def fun_l27_n690()
+ fun_l28_n296
+end
+
+def fun_l27_n691()
+ fun_l28_n235
+end
+
+def fun_l27_n692()
+ fun_l28_n148
+end
+
+def fun_l27_n693()
+ fun_l28_n756
+end
+
+def fun_l27_n694()
+ fun_l28_n989
+end
+
+def fun_l27_n695()
+ fun_l28_n993
+end
+
+def fun_l27_n696()
+ fun_l28_n646
+end
+
+def fun_l27_n697()
+ fun_l28_n860
+end
+
+def fun_l27_n698()
+ fun_l28_n872
+end
+
+def fun_l27_n699()
+ fun_l28_n122
+end
+
+def fun_l27_n700()
+ fun_l28_n678
+end
+
+def fun_l27_n701()
+ fun_l28_n480
+end
+
+def fun_l27_n702()
+ fun_l28_n888
+end
+
+def fun_l27_n703()
+ fun_l28_n60
+end
+
+def fun_l27_n704()
+ fun_l28_n15
+end
+
+def fun_l27_n705()
+ fun_l28_n529
+end
+
+def fun_l27_n706()
+ fun_l28_n137
+end
+
+def fun_l27_n707()
+ fun_l28_n643
+end
+
+def fun_l27_n708()
+ fun_l28_n432
+end
+
+def fun_l27_n709()
+ fun_l28_n446
+end
+
+def fun_l27_n710()
+ fun_l28_n170
+end
+
+def fun_l27_n711()
+ fun_l28_n507
+end
+
+def fun_l27_n712()
+ fun_l28_n650
+end
+
+def fun_l27_n713()
+ fun_l28_n952
+end
+
+def fun_l27_n714()
+ fun_l28_n629
+end
+
+def fun_l27_n715()
+ fun_l28_n578
+end
+
+def fun_l27_n716()
+ fun_l28_n754
+end
+
+def fun_l27_n717()
+ fun_l28_n431
+end
+
+def fun_l27_n718()
+ fun_l28_n340
+end
+
+def fun_l27_n719()
+ fun_l28_n580
+end
+
+def fun_l27_n720()
+ fun_l28_n976
+end
+
+def fun_l27_n721()
+ fun_l28_n830
+end
+
+def fun_l27_n722()
+ fun_l28_n746
+end
+
+def fun_l27_n723()
+ fun_l28_n139
+end
+
+def fun_l27_n724()
+ fun_l28_n152
+end
+
+def fun_l27_n725()
+ fun_l28_n956
+end
+
+def fun_l27_n726()
+ fun_l28_n152
+end
+
+def fun_l27_n727()
+ fun_l28_n252
+end
+
+def fun_l27_n728()
+ fun_l28_n856
+end
+
+def fun_l27_n729()
+ fun_l28_n862
+end
+
+def fun_l27_n730()
+ fun_l28_n261
+end
+
+def fun_l27_n731()
+ fun_l28_n28
+end
+
+def fun_l27_n732()
+ fun_l28_n873
+end
+
+def fun_l27_n733()
+ fun_l28_n989
+end
+
+def fun_l27_n734()
+ fun_l28_n657
+end
+
+def fun_l27_n735()
+ fun_l28_n259
+end
+
+def fun_l27_n736()
+ fun_l28_n1
+end
+
+def fun_l27_n737()
+ fun_l28_n964
+end
+
+def fun_l27_n738()
+ fun_l28_n215
+end
+
+def fun_l27_n739()
+ fun_l28_n939
+end
+
+def fun_l27_n740()
+ fun_l28_n644
+end
+
+def fun_l27_n741()
+ fun_l28_n335
+end
+
+def fun_l27_n742()
+ fun_l28_n844
+end
+
+def fun_l27_n743()
+ fun_l28_n493
+end
+
+def fun_l27_n744()
+ fun_l28_n25
+end
+
+def fun_l27_n745()
+ fun_l28_n690
+end
+
+def fun_l27_n746()
+ fun_l28_n561
+end
+
+def fun_l27_n747()
+ fun_l28_n682
+end
+
+def fun_l27_n748()
+ fun_l28_n476
+end
+
+def fun_l27_n749()
+ fun_l28_n626
+end
+
+def fun_l27_n750()
+ fun_l28_n607
+end
+
+def fun_l27_n751()
+ fun_l28_n655
+end
+
+def fun_l27_n752()
+ fun_l28_n481
+end
+
+def fun_l27_n753()
+ fun_l28_n634
+end
+
+def fun_l27_n754()
+ fun_l28_n971
+end
+
+def fun_l27_n755()
+ fun_l28_n372
+end
+
+def fun_l27_n756()
+ fun_l28_n701
+end
+
+def fun_l27_n757()
+ fun_l28_n383
+end
+
+def fun_l27_n758()
+ fun_l28_n295
+end
+
+def fun_l27_n759()
+ fun_l28_n58
+end
+
+def fun_l27_n760()
+ fun_l28_n870
+end
+
+def fun_l27_n761()
+ fun_l28_n902
+end
+
+def fun_l27_n762()
+ fun_l28_n352
+end
+
+def fun_l27_n763()
+ fun_l28_n421
+end
+
+def fun_l27_n764()
+ fun_l28_n870
+end
+
+def fun_l27_n765()
+ fun_l28_n604
+end
+
+def fun_l27_n766()
+ fun_l28_n615
+end
+
+def fun_l27_n767()
+ fun_l28_n644
+end
+
+def fun_l27_n768()
+ fun_l28_n304
+end
+
+def fun_l27_n769()
+ fun_l28_n87
+end
+
+def fun_l27_n770()
+ fun_l28_n40
+end
+
+def fun_l27_n771()
+ fun_l28_n80
+end
+
+def fun_l27_n772()
+ fun_l28_n62
+end
+
+def fun_l27_n773()
+ fun_l28_n912
+end
+
+def fun_l27_n774()
+ fun_l28_n808
+end
+
+def fun_l27_n775()
+ fun_l28_n978
+end
+
+def fun_l27_n776()
+ fun_l28_n499
+end
+
+def fun_l27_n777()
+ fun_l28_n299
+end
+
+def fun_l27_n778()
+ fun_l28_n852
+end
+
+def fun_l27_n779()
+ fun_l28_n126
+end
+
+def fun_l27_n780()
+ fun_l28_n578
+end
+
+def fun_l27_n781()
+ fun_l28_n177
+end
+
+def fun_l27_n782()
+ fun_l28_n621
+end
+
+def fun_l27_n783()
+ fun_l28_n833
+end
+
+def fun_l27_n784()
+ fun_l28_n991
+end
+
+def fun_l27_n785()
+ fun_l28_n419
+end
+
+def fun_l27_n786()
+ fun_l28_n723
+end
+
+def fun_l27_n787()
+ fun_l28_n915
+end
+
+def fun_l27_n788()
+ fun_l28_n73
+end
+
+def fun_l27_n789()
+ fun_l28_n725
+end
+
+def fun_l27_n790()
+ fun_l28_n883
+end
+
+def fun_l27_n791()
+ fun_l28_n469
+end
+
+def fun_l27_n792()
+ fun_l28_n524
+end
+
+def fun_l27_n793()
+ fun_l28_n813
+end
+
+def fun_l27_n794()
+ fun_l28_n8
+end
+
+def fun_l27_n795()
+ fun_l28_n776
+end
+
+def fun_l27_n796()
+ fun_l28_n328
+end
+
+def fun_l27_n797()
+ fun_l28_n324
+end
+
+def fun_l27_n798()
+ fun_l28_n428
+end
+
+def fun_l27_n799()
+ fun_l28_n806
+end
+
+def fun_l27_n800()
+ fun_l28_n397
+end
+
+def fun_l27_n801()
+ fun_l28_n680
+end
+
+def fun_l27_n802()
+ fun_l28_n18
+end
+
+def fun_l27_n803()
+ fun_l28_n955
+end
+
+def fun_l27_n804()
+ fun_l28_n566
+end
+
+def fun_l27_n805()
+ fun_l28_n824
+end
+
+def fun_l27_n806()
+ fun_l28_n860
+end
+
+def fun_l27_n807()
+ fun_l28_n411
+end
+
+def fun_l27_n808()
+ fun_l28_n925
+end
+
+def fun_l27_n809()
+ fun_l28_n394
+end
+
+def fun_l27_n810()
+ fun_l28_n70
+end
+
+def fun_l27_n811()
+ fun_l28_n672
+end
+
+def fun_l27_n812()
+ fun_l28_n53
+end
+
+def fun_l27_n813()
+ fun_l28_n574
+end
+
+def fun_l27_n814()
+ fun_l28_n407
+end
+
+def fun_l27_n815()
+ fun_l28_n86
+end
+
+def fun_l27_n816()
+ fun_l28_n611
+end
+
+def fun_l27_n817()
+ fun_l28_n950
+end
+
+def fun_l27_n818()
+ fun_l28_n595
+end
+
+def fun_l27_n819()
+ fun_l28_n411
+end
+
+def fun_l27_n820()
+ fun_l28_n286
+end
+
+def fun_l27_n821()
+ fun_l28_n683
+end
+
+def fun_l27_n822()
+ fun_l28_n706
+end
+
+def fun_l27_n823()
+ fun_l28_n587
+end
+
+def fun_l27_n824()
+ fun_l28_n908
+end
+
+def fun_l27_n825()
+ fun_l28_n641
+end
+
+def fun_l27_n826()
+ fun_l28_n792
+end
+
+def fun_l27_n827()
+ fun_l28_n714
+end
+
+def fun_l27_n828()
+ fun_l28_n594
+end
+
+def fun_l27_n829()
+ fun_l28_n154
+end
+
+def fun_l27_n830()
+ fun_l28_n102
+end
+
+def fun_l27_n831()
+ fun_l28_n819
+end
+
+def fun_l27_n832()
+ fun_l28_n285
+end
+
+def fun_l27_n833()
+ fun_l28_n665
+end
+
+def fun_l27_n834()
+ fun_l28_n896
+end
+
+def fun_l27_n835()
+ fun_l28_n495
+end
+
+def fun_l27_n836()
+ fun_l28_n284
+end
+
+def fun_l27_n837()
+ fun_l28_n747
+end
+
+def fun_l27_n838()
+ fun_l28_n388
+end
+
+def fun_l27_n839()
+ fun_l28_n274
+end
+
+def fun_l27_n840()
+ fun_l28_n236
+end
+
+def fun_l27_n841()
+ fun_l28_n336
+end
+
+def fun_l27_n842()
+ fun_l28_n805
+end
+
+def fun_l27_n843()
+ fun_l28_n196
+end
+
+def fun_l27_n844()
+ fun_l28_n772
+end
+
+def fun_l27_n845()
+ fun_l28_n679
+end
+
+def fun_l27_n846()
+ fun_l28_n703
+end
+
+def fun_l27_n847()
+ fun_l28_n743
+end
+
+def fun_l27_n848()
+ fun_l28_n941
+end
+
+def fun_l27_n849()
+ fun_l28_n903
+end
+
+def fun_l27_n850()
+ fun_l28_n149
+end
+
+def fun_l27_n851()
+ fun_l28_n924
+end
+
+def fun_l27_n852()
+ fun_l28_n638
+end
+
+def fun_l27_n853()
+ fun_l28_n480
+end
+
+def fun_l27_n854()
+ fun_l28_n580
+end
+
+def fun_l27_n855()
+ fun_l28_n184
+end
+
+def fun_l27_n856()
+ fun_l28_n757
+end
+
+def fun_l27_n857()
+ fun_l28_n233
+end
+
+def fun_l27_n858()
+ fun_l28_n315
+end
+
+def fun_l27_n859()
+ fun_l28_n182
+end
+
+def fun_l27_n860()
+ fun_l28_n696
+end
+
+def fun_l27_n861()
+ fun_l28_n155
+end
+
+def fun_l27_n862()
+ fun_l28_n648
+end
+
+def fun_l27_n863()
+ fun_l28_n148
+end
+
+def fun_l27_n864()
+ fun_l28_n40
+end
+
+def fun_l27_n865()
+ fun_l28_n665
+end
+
+def fun_l27_n866()
+ fun_l28_n646
+end
+
+def fun_l27_n867()
+ fun_l28_n158
+end
+
+def fun_l27_n868()
+ fun_l28_n159
+end
+
+def fun_l27_n869()
+ fun_l28_n617
+end
+
+def fun_l27_n870()
+ fun_l28_n637
+end
+
+def fun_l27_n871()
+ fun_l28_n234
+end
+
+def fun_l27_n872()
+ fun_l28_n591
+end
+
+def fun_l27_n873()
+ fun_l28_n207
+end
+
+def fun_l27_n874()
+ fun_l28_n136
+end
+
+def fun_l27_n875()
+ fun_l28_n565
+end
+
+def fun_l27_n876()
+ fun_l28_n152
+end
+
+def fun_l27_n877()
+ fun_l28_n309
+end
+
+def fun_l27_n878()
+ fun_l28_n275
+end
+
+def fun_l27_n879()
+ fun_l28_n355
+end
+
+def fun_l27_n880()
+ fun_l28_n441
+end
+
+def fun_l27_n881()
+ fun_l28_n427
+end
+
+def fun_l27_n882()
+ fun_l28_n249
+end
+
+def fun_l27_n883()
+ fun_l28_n764
+end
+
+def fun_l27_n884()
+ fun_l28_n183
+end
+
+def fun_l27_n885()
+ fun_l28_n302
+end
+
+def fun_l27_n886()
+ fun_l28_n857
+end
+
+def fun_l27_n887()
+ fun_l28_n73
+end
+
+def fun_l27_n888()
+ fun_l28_n702
+end
+
+def fun_l27_n889()
+ fun_l28_n430
+end
+
+def fun_l27_n890()
+ fun_l28_n57
+end
+
+def fun_l27_n891()
+ fun_l28_n994
+end
+
+def fun_l27_n892()
+ fun_l28_n951
+end
+
+def fun_l27_n893()
+ fun_l28_n268
+end
+
+def fun_l27_n894()
+ fun_l28_n629
+end
+
+def fun_l27_n895()
+ fun_l28_n505
+end
+
+def fun_l27_n896()
+ fun_l28_n790
+end
+
+def fun_l27_n897()
+ fun_l28_n213
+end
+
+def fun_l27_n898()
+ fun_l28_n133
+end
+
+def fun_l27_n899()
+ fun_l28_n472
+end
+
+def fun_l27_n900()
+ fun_l28_n212
+end
+
+def fun_l27_n901()
+ fun_l28_n386
+end
+
+def fun_l27_n902()
+ fun_l28_n405
+end
+
+def fun_l27_n903()
+ fun_l28_n807
+end
+
+def fun_l27_n904()
+ fun_l28_n76
+end
+
+def fun_l27_n905()
+ fun_l28_n295
+end
+
+def fun_l27_n906()
+ fun_l28_n860
+end
+
+def fun_l27_n907()
+ fun_l28_n185
+end
+
+def fun_l27_n908()
+ fun_l28_n762
+end
+
+def fun_l27_n909()
+ fun_l28_n493
+end
+
+def fun_l27_n910()
+ fun_l28_n309
+end
+
+def fun_l27_n911()
+ fun_l28_n920
+end
+
+def fun_l27_n912()
+ fun_l28_n284
+end
+
+def fun_l27_n913()
+ fun_l28_n355
+end
+
+def fun_l27_n914()
+ fun_l28_n177
+end
+
+def fun_l27_n915()
+ fun_l28_n901
+end
+
+def fun_l27_n916()
+ fun_l28_n858
+end
+
+def fun_l27_n917()
+ fun_l28_n337
+end
+
+def fun_l27_n918()
+ fun_l28_n872
+end
+
+def fun_l27_n919()
+ fun_l28_n550
+end
+
+def fun_l27_n920()
+ fun_l28_n458
+end
+
+def fun_l27_n921()
+ fun_l28_n739
+end
+
+def fun_l27_n922()
+ fun_l28_n394
+end
+
+def fun_l27_n923()
+ fun_l28_n695
+end
+
+def fun_l27_n924()
+ fun_l28_n455
+end
+
+def fun_l27_n925()
+ fun_l28_n958
+end
+
+def fun_l27_n926()
+ fun_l28_n395
+end
+
+def fun_l27_n927()
+ fun_l28_n645
+end
+
+def fun_l27_n928()
+ fun_l28_n668
+end
+
+def fun_l27_n929()
+ fun_l28_n880
+end
+
+def fun_l27_n930()
+ fun_l28_n743
+end
+
+def fun_l27_n931()
+ fun_l28_n411
+end
+
+def fun_l27_n932()
+ fun_l28_n457
+end
+
+def fun_l27_n933()
+ fun_l28_n852
+end
+
+def fun_l27_n934()
+ fun_l28_n3
+end
+
+def fun_l27_n935()
+ fun_l28_n637
+end
+
+def fun_l27_n936()
+ fun_l28_n35
+end
+
+def fun_l27_n937()
+ fun_l28_n671
+end
+
+def fun_l27_n938()
+ fun_l28_n996
+end
+
+def fun_l27_n939()
+ fun_l28_n545
+end
+
+def fun_l27_n940()
+ fun_l28_n714
+end
+
+def fun_l27_n941()
+ fun_l28_n527
+end
+
+def fun_l27_n942()
+ fun_l28_n272
+end
+
+def fun_l27_n943()
+ fun_l28_n62
+end
+
+def fun_l27_n944()
+ fun_l28_n206
+end
+
+def fun_l27_n945()
+ fun_l28_n115
+end
+
+def fun_l27_n946()
+ fun_l28_n654
+end
+
+def fun_l27_n947()
+ fun_l28_n218
+end
+
+def fun_l27_n948()
+ fun_l28_n315
+end
+
+def fun_l27_n949()
+ fun_l28_n656
+end
+
+def fun_l27_n950()
+ fun_l28_n901
+end
+
+def fun_l27_n951()
+ fun_l28_n60
+end
+
+def fun_l27_n952()
+ fun_l28_n886
+end
+
+def fun_l27_n953()
+ fun_l28_n888
+end
+
+def fun_l27_n954()
+ fun_l28_n640
+end
+
+def fun_l27_n955()
+ fun_l28_n766
+end
+
+def fun_l27_n956()
+ fun_l28_n506
+end
+
+def fun_l27_n957()
+ fun_l28_n757
+end
+
+def fun_l27_n958()
+ fun_l28_n204
+end
+
+def fun_l27_n959()
+ fun_l28_n531
+end
+
+def fun_l27_n960()
+ fun_l28_n982
+end
+
+def fun_l27_n961()
+ fun_l28_n762
+end
+
+def fun_l27_n962()
+ fun_l28_n701
+end
+
+def fun_l27_n963()
+ fun_l28_n866
+end
+
+def fun_l27_n964()
+ fun_l28_n488
+end
+
+def fun_l27_n965()
+ fun_l28_n793
+end
+
+def fun_l27_n966()
+ fun_l28_n969
+end
+
+def fun_l27_n967()
+ fun_l28_n35
+end
+
+def fun_l27_n968()
+ fun_l28_n54
+end
+
+def fun_l27_n969()
+ fun_l28_n746
+end
+
+def fun_l27_n970()
+ fun_l28_n437
+end
+
+def fun_l27_n971()
+ fun_l28_n601
+end
+
+def fun_l27_n972()
+ fun_l28_n477
+end
+
+def fun_l27_n973()
+ fun_l28_n854
+end
+
+def fun_l27_n974()
+ fun_l28_n76
+end
+
+def fun_l27_n975()
+ fun_l28_n145
+end
+
+def fun_l27_n976()
+ fun_l28_n156
+end
+
+def fun_l27_n977()
+ fun_l28_n719
+end
+
+def fun_l27_n978()
+ fun_l28_n389
+end
+
+def fun_l27_n979()
+ fun_l28_n482
+end
+
+def fun_l27_n980()
+ fun_l28_n369
+end
+
+def fun_l27_n981()
+ fun_l28_n42
+end
+
+def fun_l27_n982()
+ fun_l28_n975
+end
+
+def fun_l27_n983()
+ fun_l28_n995
+end
+
+def fun_l27_n984()
+ fun_l28_n880
+end
+
+def fun_l27_n985()
+ fun_l28_n688
+end
+
+def fun_l27_n986()
+ fun_l28_n796
+end
+
+def fun_l27_n987()
+ fun_l28_n291
+end
+
+def fun_l27_n988()
+ fun_l28_n158
+end
+
+def fun_l27_n989()
+ fun_l28_n389
+end
+
+def fun_l27_n990()
+ fun_l28_n582
+end
+
+def fun_l27_n991()
+ fun_l28_n108
+end
+
+def fun_l27_n992()
+ fun_l28_n280
+end
+
+def fun_l27_n993()
+ fun_l28_n842
+end
+
+def fun_l27_n994()
+ fun_l28_n637
+end
+
+def fun_l27_n995()
+ fun_l28_n934
+end
+
+def fun_l27_n996()
+ fun_l28_n451
+end
+
+def fun_l27_n997()
+ fun_l28_n22
+end
+
+def fun_l27_n998()
+ fun_l28_n733
+end
+
+def fun_l27_n999()
+ fun_l28_n984
+end
+
+def fun_l28_n0()
+ fun_l29_n189
+end
+
+def fun_l28_n1()
+ fun_l29_n12
+end
+
+def fun_l28_n2()
+ fun_l29_n850
+end
+
+def fun_l28_n3()
+ fun_l29_n360
+end
+
+def fun_l28_n4()
+ fun_l29_n510
+end
+
+def fun_l28_n5()
+ fun_l29_n541
+end
+
+def fun_l28_n6()
+ fun_l29_n913
+end
+
+def fun_l28_n7()
+ fun_l29_n652
+end
+
+def fun_l28_n8()
+ fun_l29_n378
+end
+
+def fun_l28_n9()
+ fun_l29_n476
+end
+
+def fun_l28_n10()
+ fun_l29_n644
+end
+
+def fun_l28_n11()
+ fun_l29_n484
+end
+
+def fun_l28_n12()
+ fun_l29_n52
+end
+
+def fun_l28_n13()
+ fun_l29_n294
+end
+
+def fun_l28_n14()
+ fun_l29_n387
+end
+
+def fun_l28_n15()
+ fun_l29_n331
+end
+
+def fun_l28_n16()
+ fun_l29_n578
+end
+
+def fun_l28_n17()
+ fun_l29_n783
+end
+
+def fun_l28_n18()
+ fun_l29_n838
+end
+
+def fun_l28_n19()
+ fun_l29_n5
+end
+
+def fun_l28_n20()
+ fun_l29_n909
+end
+
+def fun_l28_n21()
+ fun_l29_n671
+end
+
+def fun_l28_n22()
+ fun_l29_n626
+end
+
+def fun_l28_n23()
+ fun_l29_n685
+end
+
+def fun_l28_n24()
+ fun_l29_n22
+end
+
+def fun_l28_n25()
+ fun_l29_n925
+end
+
+def fun_l28_n26()
+ fun_l29_n816
+end
+
+def fun_l28_n27()
+ fun_l29_n714
+end
+
+def fun_l28_n28()
+ fun_l29_n863
+end
+
+def fun_l28_n29()
+ fun_l29_n475
+end
+
+def fun_l28_n30()
+ fun_l29_n83
+end
+
+def fun_l28_n31()
+ fun_l29_n854
+end
+
+def fun_l28_n32()
+ fun_l29_n616
+end
+
+def fun_l28_n33()
+ fun_l29_n574
+end
+
+def fun_l28_n34()
+ fun_l29_n745
+end
+
+def fun_l28_n35()
+ fun_l29_n921
+end
+
+def fun_l28_n36()
+ fun_l29_n639
+end
+
+def fun_l28_n37()
+ fun_l29_n695
+end
+
+def fun_l28_n38()
+ fun_l29_n527
+end
+
+def fun_l28_n39()
+ fun_l29_n691
+end
+
+def fun_l28_n40()
+ fun_l29_n409
+end
+
+def fun_l28_n41()
+ fun_l29_n788
+end
+
+def fun_l28_n42()
+ fun_l29_n671
+end
+
+def fun_l28_n43()
+ fun_l29_n855
+end
+
+def fun_l28_n44()
+ fun_l29_n364
+end
+
+def fun_l28_n45()
+ fun_l29_n231
+end
+
+def fun_l28_n46()
+ fun_l29_n852
+end
+
+def fun_l28_n47()
+ fun_l29_n596
+end
+
+def fun_l28_n48()
+ fun_l29_n804
+end
+
+def fun_l28_n49()
+ fun_l29_n513
+end
+
+def fun_l28_n50()
+ fun_l29_n498
+end
+
+def fun_l28_n51()
+ fun_l29_n548
+end
+
+def fun_l28_n52()
+ fun_l29_n641
+end
+
+def fun_l28_n53()
+ fun_l29_n784
+end
+
+def fun_l28_n54()
+ fun_l29_n803
+end
+
+def fun_l28_n55()
+ fun_l29_n384
+end
+
+def fun_l28_n56()
+ fun_l29_n304
+end
+
+def fun_l28_n57()
+ fun_l29_n894
+end
+
+def fun_l28_n58()
+ fun_l29_n233
+end
+
+def fun_l28_n59()
+ fun_l29_n344
+end
+
+def fun_l28_n60()
+ fun_l29_n652
+end
+
+def fun_l28_n61()
+ fun_l29_n912
+end
+
+def fun_l28_n62()
+ fun_l29_n266
+end
+
+def fun_l28_n63()
+ fun_l29_n228
+end
+
+def fun_l28_n64()
+ fun_l29_n31
+end
+
+def fun_l28_n65()
+ fun_l29_n679
+end
+
+def fun_l28_n66()
+ fun_l29_n902
+end
+
+def fun_l28_n67()
+ fun_l29_n907
+end
+
+def fun_l28_n68()
+ fun_l29_n830
+end
+
+def fun_l28_n69()
+ fun_l29_n849
+end
+
+def fun_l28_n70()
+ fun_l29_n551
+end
+
+def fun_l28_n71()
+ fun_l29_n586
+end
+
+def fun_l28_n72()
+ fun_l29_n126
+end
+
+def fun_l28_n73()
+ fun_l29_n75
+end
+
+def fun_l28_n74()
+ fun_l29_n706
+end
+
+def fun_l28_n75()
+ fun_l29_n82
+end
+
+def fun_l28_n76()
+ fun_l29_n194
+end
+
+def fun_l28_n77()
+ fun_l29_n761
+end
+
+def fun_l28_n78()
+ fun_l29_n439
+end
+
+def fun_l28_n79()
+ fun_l29_n53
+end
+
+def fun_l28_n80()
+ fun_l29_n889
+end
+
+def fun_l28_n81()
+ fun_l29_n743
+end
+
+def fun_l28_n82()
+ fun_l29_n545
+end
+
+def fun_l28_n83()
+ fun_l29_n88
+end
+
+def fun_l28_n84()
+ fun_l29_n697
+end
+
+def fun_l28_n85()
+ fun_l29_n160
+end
+
+def fun_l28_n86()
+ fun_l29_n895
+end
+
+def fun_l28_n87()
+ fun_l29_n475
+end
+
+def fun_l28_n88()
+ fun_l29_n330
+end
+
+def fun_l28_n89()
+ fun_l29_n464
+end
+
+def fun_l28_n90()
+ fun_l29_n772
+end
+
+def fun_l28_n91()
+ fun_l29_n241
+end
+
+def fun_l28_n92()
+ fun_l29_n838
+end
+
+def fun_l28_n93()
+ fun_l29_n322
+end
+
+def fun_l28_n94()
+ fun_l29_n328
+end
+
+def fun_l28_n95()
+ fun_l29_n475
+end
+
+def fun_l28_n96()
+ fun_l29_n523
+end
+
+def fun_l28_n97()
+ fun_l29_n621
+end
+
+def fun_l28_n98()
+ fun_l29_n646
+end
+
+def fun_l28_n99()
+ fun_l29_n803
+end
+
+def fun_l28_n100()
+ fun_l29_n121
+end
+
+def fun_l28_n101()
+ fun_l29_n432
+end
+
+def fun_l28_n102()
+ fun_l29_n14
+end
+
+def fun_l28_n103()
+ fun_l29_n358
+end
+
+def fun_l28_n104()
+ fun_l29_n257
+end
+
+def fun_l28_n105()
+ fun_l29_n985
+end
+
+def fun_l28_n106()
+ fun_l29_n392
+end
+
+def fun_l28_n107()
+ fun_l29_n11
+end
+
+def fun_l28_n108()
+ fun_l29_n254
+end
+
+def fun_l28_n109()
+ fun_l29_n17
+end
+
+def fun_l28_n110()
+ fun_l29_n146
+end
+
+def fun_l28_n111()
+ fun_l29_n20
+end
+
+def fun_l28_n112()
+ fun_l29_n189
+end
+
+def fun_l28_n113()
+ fun_l29_n838
+end
+
+def fun_l28_n114()
+ fun_l29_n251
+end
+
+def fun_l28_n115()
+ fun_l29_n331
+end
+
+def fun_l28_n116()
+ fun_l29_n816
+end
+
+def fun_l28_n117()
+ fun_l29_n338
+end
+
+def fun_l28_n118()
+ fun_l29_n745
+end
+
+def fun_l28_n119()
+ fun_l29_n301
+end
+
+def fun_l28_n120()
+ fun_l29_n647
+end
+
+def fun_l28_n121()
+ fun_l29_n71
+end
+
+def fun_l28_n122()
+ fun_l29_n371
+end
+
+def fun_l28_n123()
+ fun_l29_n586
+end
+
+def fun_l28_n124()
+ fun_l29_n868
+end
+
+def fun_l28_n125()
+ fun_l29_n519
+end
+
+def fun_l28_n126()
+ fun_l29_n877
+end
+
+def fun_l28_n127()
+ fun_l29_n716
+end
+
+def fun_l28_n128()
+ fun_l29_n184
+end
+
+def fun_l28_n129()
+ fun_l29_n797
+end
+
+def fun_l28_n130()
+ fun_l29_n801
+end
+
+def fun_l28_n131()
+ fun_l29_n278
+end
+
+def fun_l28_n132()
+ fun_l29_n562
+end
+
+def fun_l28_n133()
+ fun_l29_n999
+end
+
+def fun_l28_n134()
+ fun_l29_n128
+end
+
+def fun_l28_n135()
+ fun_l29_n134
+end
+
+def fun_l28_n136()
+ fun_l29_n62
+end
+
+def fun_l28_n137()
+ fun_l29_n923
+end
+
+def fun_l28_n138()
+ fun_l29_n870
+end
+
+def fun_l28_n139()
+ fun_l29_n279
+end
+
+def fun_l28_n140()
+ fun_l29_n971
+end
+
+def fun_l28_n141()
+ fun_l29_n843
+end
+
+def fun_l28_n142()
+ fun_l29_n537
+end
+
+def fun_l28_n143()
+ fun_l29_n584
+end
+
+def fun_l28_n144()
+ fun_l29_n961
+end
+
+def fun_l28_n145()
+ fun_l29_n383
+end
+
+def fun_l28_n146()
+ fun_l29_n44
+end
+
+def fun_l28_n147()
+ fun_l29_n291
+end
+
+def fun_l28_n148()
+ fun_l29_n639
+end
+
+def fun_l28_n149()
+ fun_l29_n751
+end
+
+def fun_l28_n150()
+ fun_l29_n504
+end
+
+def fun_l28_n151()
+ fun_l29_n884
+end
+
+def fun_l28_n152()
+ fun_l29_n505
+end
+
+def fun_l28_n153()
+ fun_l29_n932
+end
+
+def fun_l28_n154()
+ fun_l29_n414
+end
+
+def fun_l28_n155()
+ fun_l29_n121
+end
+
+def fun_l28_n156()
+ fun_l29_n313
+end
+
+def fun_l28_n157()
+ fun_l29_n620
+end
+
+def fun_l28_n158()
+ fun_l29_n412
+end
+
+def fun_l28_n159()
+ fun_l29_n119
+end
+
+def fun_l28_n160()
+ fun_l29_n431
+end
+
+def fun_l28_n161()
+ fun_l29_n943
+end
+
+def fun_l28_n162()
+ fun_l29_n499
+end
+
+def fun_l28_n163()
+ fun_l29_n494
+end
+
+def fun_l28_n164()
+ fun_l29_n716
+end
+
+def fun_l28_n165()
+ fun_l29_n558
+end
+
+def fun_l28_n166()
+ fun_l29_n864
+end
+
+def fun_l28_n167()
+ fun_l29_n13
+end
+
+def fun_l28_n168()
+ fun_l29_n165
+end
+
+def fun_l28_n169()
+ fun_l29_n129
+end
+
+def fun_l28_n170()
+ fun_l29_n478
+end
+
+def fun_l28_n171()
+ fun_l29_n124
+end
+
+def fun_l28_n172()
+ fun_l29_n945
+end
+
+def fun_l28_n173()
+ fun_l29_n574
+end
+
+def fun_l28_n174()
+ fun_l29_n916
+end
+
+def fun_l28_n175()
+ fun_l29_n213
+end
+
+def fun_l28_n176()
+ fun_l29_n68
+end
+
+def fun_l28_n177()
+ fun_l29_n66
+end
+
+def fun_l28_n178()
+ fun_l29_n979
+end
+
+def fun_l28_n179()
+ fun_l29_n909
+end
+
+def fun_l28_n180()
+ fun_l29_n509
+end
+
+def fun_l28_n181()
+ fun_l29_n663
+end
+
+def fun_l28_n182()
+ fun_l29_n407
+end
+
+def fun_l28_n183()
+ fun_l29_n692
+end
+
+def fun_l28_n184()
+ fun_l29_n569
+end
+
+def fun_l28_n185()
+ fun_l29_n950
+end
+
+def fun_l28_n186()
+ fun_l29_n266
+end
+
+def fun_l28_n187()
+ fun_l29_n48
+end
+
+def fun_l28_n188()
+ fun_l29_n244
+end
+
+def fun_l28_n189()
+ fun_l29_n428
+end
+
+def fun_l28_n190()
+ fun_l29_n893
+end
+
+def fun_l28_n191()
+ fun_l29_n581
+end
+
+def fun_l28_n192()
+ fun_l29_n210
+end
+
+def fun_l28_n193()
+ fun_l29_n81
+end
+
+def fun_l28_n194()
+ fun_l29_n295
+end
+
+def fun_l28_n195()
+ fun_l29_n471
+end
+
+def fun_l28_n196()
+ fun_l29_n967
+end
+
+def fun_l28_n197()
+ fun_l29_n318
+end
+
+def fun_l28_n198()
+ fun_l29_n15
+end
+
+def fun_l28_n199()
+ fun_l29_n696
+end
+
+def fun_l28_n200()
+ fun_l29_n702
+end
+
+def fun_l28_n201()
+ fun_l29_n737
+end
+
+def fun_l28_n202()
+ fun_l29_n776
+end
+
+def fun_l28_n203()
+ fun_l29_n623
+end
+
+def fun_l28_n204()
+ fun_l29_n537
+end
+
+def fun_l28_n205()
+ fun_l29_n353
+end
+
+def fun_l28_n206()
+ fun_l29_n156
+end
+
+def fun_l28_n207()
+ fun_l29_n690
+end
+
+def fun_l28_n208()
+ fun_l29_n408
+end
+
+def fun_l28_n209()
+ fun_l29_n388
+end
+
+def fun_l28_n210()
+ fun_l29_n721
+end
+
+def fun_l28_n211()
+ fun_l29_n46
+end
+
+def fun_l28_n212()
+ fun_l29_n238
+end
+
+def fun_l28_n213()
+ fun_l29_n722
+end
+
+def fun_l28_n214()
+ fun_l29_n827
+end
+
+def fun_l28_n215()
+ fun_l29_n496
+end
+
+def fun_l28_n216()
+ fun_l29_n10
+end
+
+def fun_l28_n217()
+ fun_l29_n689
+end
+
+def fun_l28_n218()
+ fun_l29_n962
+end
+
+def fun_l28_n219()
+ fun_l29_n364
+end
+
+def fun_l28_n220()
+ fun_l29_n92
+end
+
+def fun_l28_n221()
+ fun_l29_n246
+end
+
+def fun_l28_n222()
+ fun_l29_n624
+end
+
+def fun_l28_n223()
+ fun_l29_n482
+end
+
+def fun_l28_n224()
+ fun_l29_n992
+end
+
+def fun_l28_n225()
+ fun_l29_n746
+end
+
+def fun_l28_n226()
+ fun_l29_n44
+end
+
+def fun_l28_n227()
+ fun_l29_n389
+end
+
+def fun_l28_n228()
+ fun_l29_n278
+end
+
+def fun_l28_n229()
+ fun_l29_n336
+end
+
+def fun_l28_n230()
+ fun_l29_n415
+end
+
+def fun_l28_n231()
+ fun_l29_n670
+end
+
+def fun_l28_n232()
+ fun_l29_n132
+end
+
+def fun_l28_n233()
+ fun_l29_n669
+end
+
+def fun_l28_n234()
+ fun_l29_n815
+end
+
+def fun_l28_n235()
+ fun_l29_n642
+end
+
+def fun_l28_n236()
+ fun_l29_n59
+end
+
+def fun_l28_n237()
+ fun_l29_n175
+end
+
+def fun_l28_n238()
+ fun_l29_n862
+end
+
+def fun_l28_n239()
+ fun_l29_n570
+end
+
+def fun_l28_n240()
+ fun_l29_n65
+end
+
+def fun_l28_n241()
+ fun_l29_n286
+end
+
+def fun_l28_n242()
+ fun_l29_n467
+end
+
+def fun_l28_n243()
+ fun_l29_n580
+end
+
+def fun_l28_n244()
+ fun_l29_n195
+end
+
+def fun_l28_n245()
+ fun_l29_n571
+end
+
+def fun_l28_n246()
+ fun_l29_n987
+end
+
+def fun_l28_n247()
+ fun_l29_n87
+end
+
+def fun_l28_n248()
+ fun_l29_n331
+end
+
+def fun_l28_n249()
+ fun_l29_n405
+end
+
+def fun_l28_n250()
+ fun_l29_n142
+end
+
+def fun_l28_n251()
+ fun_l29_n652
+end
+
+def fun_l28_n252()
+ fun_l29_n788
+end
+
+def fun_l28_n253()
+ fun_l29_n591
+end
+
+def fun_l28_n254()
+ fun_l29_n613
+end
+
+def fun_l28_n255()
+ fun_l29_n171
+end
+
+def fun_l28_n256()
+ fun_l29_n836
+end
+
+def fun_l28_n257()
+ fun_l29_n420
+end
+
+def fun_l28_n258()
+ fun_l29_n326
+end
+
+def fun_l28_n259()
+ fun_l29_n790
+end
+
+def fun_l28_n260()
+ fun_l29_n515
+end
+
+def fun_l28_n261()
+ fun_l29_n650
+end
+
+def fun_l28_n262()
+ fun_l29_n388
+end
+
+def fun_l28_n263()
+ fun_l29_n56
+end
+
+def fun_l28_n264()
+ fun_l29_n288
+end
+
+def fun_l28_n265()
+ fun_l29_n187
+end
+
+def fun_l28_n266()
+ fun_l29_n461
+end
+
+def fun_l28_n267()
+ fun_l29_n194
+end
+
+def fun_l28_n268()
+ fun_l29_n870
+end
+
+def fun_l28_n269()
+ fun_l29_n425
+end
+
+def fun_l28_n270()
+ fun_l29_n731
+end
+
+def fun_l28_n271()
+ fun_l29_n763
+end
+
+def fun_l28_n272()
+ fun_l29_n128
+end
+
+def fun_l28_n273()
+ fun_l29_n693
+end
+
+def fun_l28_n274()
+ fun_l29_n775
+end
+
+def fun_l28_n275()
+ fun_l29_n769
+end
+
+def fun_l28_n276()
+ fun_l29_n491
+end
+
+def fun_l28_n277()
+ fun_l29_n799
+end
+
+def fun_l28_n278()
+ fun_l29_n506
+end
+
+def fun_l28_n279()
+ fun_l29_n607
+end
+
+def fun_l28_n280()
+ fun_l29_n988
+end
+
+def fun_l28_n281()
+ fun_l29_n290
+end
+
+def fun_l28_n282()
+ fun_l29_n389
+end
+
+def fun_l28_n283()
+ fun_l29_n133
+end
+
+def fun_l28_n284()
+ fun_l29_n631
+end
+
+def fun_l28_n285()
+ fun_l29_n285
+end
+
+def fun_l28_n286()
+ fun_l29_n537
+end
+
+def fun_l28_n287()
+ fun_l29_n911
+end
+
+def fun_l28_n288()
+ fun_l29_n297
+end
+
+def fun_l28_n289()
+ fun_l29_n585
+end
+
+def fun_l28_n290()
+ fun_l29_n535
+end
+
+def fun_l28_n291()
+ fun_l29_n570
+end
+
+def fun_l28_n292()
+ fun_l29_n19
+end
+
+def fun_l28_n293()
+ fun_l29_n444
+end
+
+def fun_l28_n294()
+ fun_l29_n44
+end
+
+def fun_l28_n295()
+ fun_l29_n252
+end
+
+def fun_l28_n296()
+ fun_l29_n623
+end
+
+def fun_l28_n297()
+ fun_l29_n398
+end
+
+def fun_l28_n298()
+ fun_l29_n716
+end
+
+def fun_l28_n299()
+ fun_l29_n607
+end
+
+def fun_l28_n300()
+ fun_l29_n105
+end
+
+def fun_l28_n301()
+ fun_l29_n438
+end
+
+def fun_l28_n302()
+ fun_l29_n308
+end
+
+def fun_l28_n303()
+ fun_l29_n301
+end
+
+def fun_l28_n304()
+ fun_l29_n577
+end
+
+def fun_l28_n305()
+ fun_l29_n537
+end
+
+def fun_l28_n306()
+ fun_l29_n375
+end
+
+def fun_l28_n307()
+ fun_l29_n211
+end
+
+def fun_l28_n308()
+ fun_l29_n227
+end
+
+def fun_l28_n309()
+ fun_l29_n275
+end
+
+def fun_l28_n310()
+ fun_l29_n122
+end
+
+def fun_l28_n311()
+ fun_l29_n983
+end
+
+def fun_l28_n312()
+ fun_l29_n844
+end
+
+def fun_l28_n313()
+ fun_l29_n865
+end
+
+def fun_l28_n314()
+ fun_l29_n27
+end
+
+def fun_l28_n315()
+ fun_l29_n933
+end
+
+def fun_l28_n316()
+ fun_l29_n89
+end
+
+def fun_l28_n317()
+ fun_l29_n11
+end
+
+def fun_l28_n318()
+ fun_l29_n107
+end
+
+def fun_l28_n319()
+ fun_l29_n604
+end
+
+def fun_l28_n320()
+ fun_l29_n768
+end
+
+def fun_l28_n321()
+ fun_l29_n638
+end
+
+def fun_l28_n322()
+ fun_l29_n513
+end
+
+def fun_l28_n323()
+ fun_l29_n61
+end
+
+def fun_l28_n324()
+ fun_l29_n776
+end
+
+def fun_l28_n325()
+ fun_l29_n377
+end
+
+def fun_l28_n326()
+ fun_l29_n768
+end
+
+def fun_l28_n327()
+ fun_l29_n573
+end
+
+def fun_l28_n328()
+ fun_l29_n719
+end
+
+def fun_l28_n329()
+ fun_l29_n878
+end
+
+def fun_l28_n330()
+ fun_l29_n995
+end
+
+def fun_l28_n331()
+ fun_l29_n32
+end
+
+def fun_l28_n332()
+ fun_l29_n647
+end
+
+def fun_l28_n333()
+ fun_l29_n570
+end
+
+def fun_l28_n334()
+ fun_l29_n194
+end
+
+def fun_l28_n335()
+ fun_l29_n182
+end
+
+def fun_l28_n336()
+ fun_l29_n463
+end
+
+def fun_l28_n337()
+ fun_l29_n677
+end
+
+def fun_l28_n338()
+ fun_l29_n524
+end
+
+def fun_l28_n339()
+ fun_l29_n221
+end
+
+def fun_l28_n340()
+ fun_l29_n120
+end
+
+def fun_l28_n341()
+ fun_l29_n633
+end
+
+def fun_l28_n342()
+ fun_l29_n428
+end
+
+def fun_l28_n343()
+ fun_l29_n510
+end
+
+def fun_l28_n344()
+ fun_l29_n576
+end
+
+def fun_l28_n345()
+ fun_l29_n423
+end
+
+def fun_l28_n346()
+ fun_l29_n412
+end
+
+def fun_l28_n347()
+ fun_l29_n315
+end
+
+def fun_l28_n348()
+ fun_l29_n809
+end
+
+def fun_l28_n349()
+ fun_l29_n195
+end
+
+def fun_l28_n350()
+ fun_l29_n724
+end
+
+def fun_l28_n351()
+ fun_l29_n438
+end
+
+def fun_l28_n352()
+ fun_l29_n229
+end
+
+def fun_l28_n353()
+ fun_l29_n113
+end
+
+def fun_l28_n354()
+ fun_l29_n58
+end
+
+def fun_l28_n355()
+ fun_l29_n105
+end
+
+def fun_l28_n356()
+ fun_l29_n371
+end
+
+def fun_l28_n357()
+ fun_l29_n397
+end
+
+def fun_l28_n358()
+ fun_l29_n441
+end
+
+def fun_l28_n359()
+ fun_l29_n765
+end
+
+def fun_l28_n360()
+ fun_l29_n752
+end
+
+def fun_l28_n361()
+ fun_l29_n255
+end
+
+def fun_l28_n362()
+ fun_l29_n981
+end
+
+def fun_l28_n363()
+ fun_l29_n612
+end
+
+def fun_l28_n364()
+ fun_l29_n268
+end
+
+def fun_l28_n365()
+ fun_l29_n573
+end
+
+def fun_l28_n366()
+ fun_l29_n202
+end
+
+def fun_l28_n367()
+ fun_l29_n477
+end
+
+def fun_l28_n368()
+ fun_l29_n353
+end
+
+def fun_l28_n369()
+ fun_l29_n244
+end
+
+def fun_l28_n370()
+ fun_l29_n348
+end
+
+def fun_l28_n371()
+ fun_l29_n96
+end
+
+def fun_l28_n372()
+ fun_l29_n421
+end
+
+def fun_l28_n373()
+ fun_l29_n685
+end
+
+def fun_l28_n374()
+ fun_l29_n408
+end
+
+def fun_l28_n375()
+ fun_l29_n971
+end
+
+def fun_l28_n376()
+ fun_l29_n372
+end
+
+def fun_l28_n377()
+ fun_l29_n852
+end
+
+def fun_l28_n378()
+ fun_l29_n872
+end
+
+def fun_l28_n379()
+ fun_l29_n981
+end
+
+def fun_l28_n380()
+ fun_l29_n939
+end
+
+def fun_l28_n381()
+ fun_l29_n13
+end
+
+def fun_l28_n382()
+ fun_l29_n381
+end
+
+def fun_l28_n383()
+ fun_l29_n291
+end
+
+def fun_l28_n384()
+ fun_l29_n465
+end
+
+def fun_l28_n385()
+ fun_l29_n309
+end
+
+def fun_l28_n386()
+ fun_l29_n53
+end
+
+def fun_l28_n387()
+ fun_l29_n525
+end
+
+def fun_l28_n388()
+ fun_l29_n756
+end
+
+def fun_l28_n389()
+ fun_l29_n347
+end
+
+def fun_l28_n390()
+ fun_l29_n517
+end
+
+def fun_l28_n391()
+ fun_l29_n275
+end
+
+def fun_l28_n392()
+ fun_l29_n973
+end
+
+def fun_l28_n393()
+ fun_l29_n538
+end
+
+def fun_l28_n394()
+ fun_l29_n429
+end
+
+def fun_l28_n395()
+ fun_l29_n219
+end
+
+def fun_l28_n396()
+ fun_l29_n823
+end
+
+def fun_l28_n397()
+ fun_l29_n676
+end
+
+def fun_l28_n398()
+ fun_l29_n319
+end
+
+def fun_l28_n399()
+ fun_l29_n784
+end
+
+def fun_l28_n400()
+ fun_l29_n741
+end
+
+def fun_l28_n401()
+ fun_l29_n876
+end
+
+def fun_l28_n402()
+ fun_l29_n648
+end
+
+def fun_l28_n403()
+ fun_l29_n231
+end
+
+def fun_l28_n404()
+ fun_l29_n459
+end
+
+def fun_l28_n405()
+ fun_l29_n350
+end
+
+def fun_l28_n406()
+ fun_l29_n398
+end
+
+def fun_l28_n407()
+ fun_l29_n692
+end
+
+def fun_l28_n408()
+ fun_l29_n91
+end
+
+def fun_l28_n409()
+ fun_l29_n120
+end
+
+def fun_l28_n410()
+ fun_l29_n337
+end
+
+def fun_l28_n411()
+ fun_l29_n963
+end
+
+def fun_l28_n412()
+ fun_l29_n16
+end
+
+def fun_l28_n413()
+ fun_l29_n956
+end
+
+def fun_l28_n414()
+ fun_l29_n255
+end
+
+def fun_l28_n415()
+ fun_l29_n309
+end
+
+def fun_l28_n416()
+ fun_l29_n430
+end
+
+def fun_l28_n417()
+ fun_l29_n374
+end
+
+def fun_l28_n418()
+ fun_l29_n559
+end
+
+def fun_l28_n419()
+ fun_l29_n393
+end
+
+def fun_l28_n420()
+ fun_l29_n547
+end
+
+def fun_l28_n421()
+ fun_l29_n500
+end
+
+def fun_l28_n422()
+ fun_l29_n771
+end
+
+def fun_l28_n423()
+ fun_l29_n429
+end
+
+def fun_l28_n424()
+ fun_l29_n839
+end
+
+def fun_l28_n425()
+ fun_l29_n871
+end
+
+def fun_l28_n426()
+ fun_l29_n333
+end
+
+def fun_l28_n427()
+ fun_l29_n652
+end
+
+def fun_l28_n428()
+ fun_l29_n87
+end
+
+def fun_l28_n429()
+ fun_l29_n472
+end
+
+def fun_l28_n430()
+ fun_l29_n911
+end
+
+def fun_l28_n431()
+ fun_l29_n305
+end
+
+def fun_l28_n432()
+ fun_l29_n569
+end
+
+def fun_l28_n433()
+ fun_l29_n869
+end
+
+def fun_l28_n434()
+ fun_l29_n203
+end
+
+def fun_l28_n435()
+ fun_l29_n804
+end
+
+def fun_l28_n436()
+ fun_l29_n878
+end
+
+def fun_l28_n437()
+ fun_l29_n984
+end
+
+def fun_l28_n438()
+ fun_l29_n990
+end
+
+def fun_l28_n439()
+ fun_l29_n860
+end
+
+def fun_l28_n440()
+ fun_l29_n866
+end
+
+def fun_l28_n441()
+ fun_l29_n625
+end
+
+def fun_l28_n442()
+ fun_l29_n534
+end
+
+def fun_l28_n443()
+ fun_l29_n232
+end
+
+def fun_l28_n444()
+ fun_l29_n447
+end
+
+def fun_l28_n445()
+ fun_l29_n958
+end
+
+def fun_l28_n446()
+ fun_l29_n343
+end
+
+def fun_l28_n447()
+ fun_l29_n128
+end
+
+def fun_l28_n448()
+ fun_l29_n760
+end
+
+def fun_l28_n449()
+ fun_l29_n204
+end
+
+def fun_l28_n450()
+ fun_l29_n912
+end
+
+def fun_l28_n451()
+ fun_l29_n395
+end
+
+def fun_l28_n452()
+ fun_l29_n721
+end
+
+def fun_l28_n453()
+ fun_l29_n699
+end
+
+def fun_l28_n454()
+ fun_l29_n950
+end
+
+def fun_l28_n455()
+ fun_l29_n436
+end
+
+def fun_l28_n456()
+ fun_l29_n431
+end
+
+def fun_l28_n457()
+ fun_l29_n644
+end
+
+def fun_l28_n458()
+ fun_l29_n638
+end
+
+def fun_l28_n459()
+ fun_l29_n967
+end
+
+def fun_l28_n460()
+ fun_l29_n83
+end
+
+def fun_l28_n461()
+ fun_l29_n141
+end
+
+def fun_l28_n462()
+ fun_l29_n37
+end
+
+def fun_l28_n463()
+ fun_l29_n485
+end
+
+def fun_l28_n464()
+ fun_l29_n826
+end
+
+def fun_l28_n465()
+ fun_l29_n774
+end
+
+def fun_l28_n466()
+ fun_l29_n561
+end
+
+def fun_l28_n467()
+ fun_l29_n809
+end
+
+def fun_l28_n468()
+ fun_l29_n298
+end
+
+def fun_l28_n469()
+ fun_l29_n367
+end
+
+def fun_l28_n470()
+ fun_l29_n517
+end
+
+def fun_l28_n471()
+ fun_l29_n30
+end
+
+def fun_l28_n472()
+ fun_l29_n970
+end
+
+def fun_l28_n473()
+ fun_l29_n686
+end
+
+def fun_l28_n474()
+ fun_l29_n183
+end
+
+def fun_l28_n475()
+ fun_l29_n176
+end
+
+def fun_l28_n476()
+ fun_l29_n87
+end
+
+def fun_l28_n477()
+ fun_l29_n81
+end
+
+def fun_l28_n478()
+ fun_l29_n836
+end
+
+def fun_l28_n479()
+ fun_l29_n898
+end
+
+def fun_l28_n480()
+ fun_l29_n49
+end
+
+def fun_l28_n481()
+ fun_l29_n468
+end
+
+def fun_l28_n482()
+ fun_l29_n314
+end
+
+def fun_l28_n483()
+ fun_l29_n242
+end
+
+def fun_l28_n484()
+ fun_l29_n647
+end
+
+def fun_l28_n485()
+ fun_l29_n167
+end
+
+def fun_l28_n486()
+ fun_l29_n245
+end
+
+def fun_l28_n487()
+ fun_l29_n723
+end
+
+def fun_l28_n488()
+ fun_l29_n576
+end
+
+def fun_l28_n489()
+ fun_l29_n481
+end
+
+def fun_l28_n490()
+ fun_l29_n154
+end
+
+def fun_l28_n491()
+ fun_l29_n271
+end
+
+def fun_l28_n492()
+ fun_l29_n671
+end
+
+def fun_l28_n493()
+ fun_l29_n70
+end
+
+def fun_l28_n494()
+ fun_l29_n14
+end
+
+def fun_l28_n495()
+ fun_l29_n108
+end
+
+def fun_l28_n496()
+ fun_l29_n464
+end
+
+def fun_l28_n497()
+ fun_l29_n7
+end
+
+def fun_l28_n498()
+ fun_l29_n372
+end
+
+def fun_l28_n499()
+ fun_l29_n202
+end
+
+def fun_l28_n500()
+ fun_l29_n208
+end
+
+def fun_l28_n501()
+ fun_l29_n640
+end
+
+def fun_l28_n502()
+ fun_l29_n977
+end
+
+def fun_l28_n503()
+ fun_l29_n287
+end
+
+def fun_l28_n504()
+ fun_l29_n905
+end
+
+def fun_l28_n505()
+ fun_l29_n847
+end
+
+def fun_l28_n506()
+ fun_l29_n18
+end
+
+def fun_l28_n507()
+ fun_l29_n889
+end
+
+def fun_l28_n508()
+ fun_l29_n527
+end
+
+def fun_l28_n509()
+ fun_l29_n137
+end
+
+def fun_l28_n510()
+ fun_l29_n256
+end
+
+def fun_l28_n511()
+ fun_l29_n449
+end
+
+def fun_l28_n512()
+ fun_l29_n252
+end
+
+def fun_l28_n513()
+ fun_l29_n42
+end
+
+def fun_l28_n514()
+ fun_l29_n398
+end
+
+def fun_l28_n515()
+ fun_l29_n655
+end
+
+def fun_l28_n516()
+ fun_l29_n208
+end
+
+def fun_l28_n517()
+ fun_l29_n883
+end
+
+def fun_l28_n518()
+ fun_l29_n401
+end
+
+def fun_l28_n519()
+ fun_l29_n825
+end
+
+def fun_l28_n520()
+ fun_l29_n380
+end
+
+def fun_l28_n521()
+ fun_l29_n277
+end
+
+def fun_l28_n522()
+ fun_l29_n165
+end
+
+def fun_l28_n523()
+ fun_l29_n373
+end
+
+def fun_l28_n524()
+ fun_l29_n378
+end
+
+def fun_l28_n525()
+ fun_l29_n70
+end
+
+def fun_l28_n526()
+ fun_l29_n975
+end
+
+def fun_l28_n527()
+ fun_l29_n34
+end
+
+def fun_l28_n528()
+ fun_l29_n346
+end
+
+def fun_l28_n529()
+ fun_l29_n322
+end
+
+def fun_l28_n530()
+ fun_l29_n429
+end
+
+def fun_l28_n531()
+ fun_l29_n20
+end
+
+def fun_l28_n532()
+ fun_l29_n155
+end
+
+def fun_l28_n533()
+ fun_l29_n896
+end
+
+def fun_l28_n534()
+ fun_l29_n860
+end
+
+def fun_l28_n535()
+ fun_l29_n602
+end
+
+def fun_l28_n536()
+ fun_l29_n573
+end
+
+def fun_l28_n537()
+ fun_l29_n448
+end
+
+def fun_l28_n538()
+ fun_l29_n637
+end
+
+def fun_l28_n539()
+ fun_l29_n890
+end
+
+def fun_l28_n540()
+ fun_l29_n200
+end
+
+def fun_l28_n541()
+ fun_l29_n405
+end
+
+def fun_l28_n542()
+ fun_l29_n656
+end
+
+def fun_l28_n543()
+ fun_l29_n974
+end
+
+def fun_l28_n544()
+ fun_l29_n711
+end
+
+def fun_l28_n545()
+ fun_l29_n206
+end
+
+def fun_l28_n546()
+ fun_l29_n677
+end
+
+def fun_l28_n547()
+ fun_l29_n125
+end
+
+def fun_l28_n548()
+ fun_l29_n576
+end
+
+def fun_l28_n549()
+ fun_l29_n923
+end
+
+def fun_l28_n550()
+ fun_l29_n86
+end
+
+def fun_l28_n551()
+ fun_l29_n827
+end
+
+def fun_l28_n552()
+ fun_l29_n76
+end
+
+def fun_l28_n553()
+ fun_l29_n143
+end
+
+def fun_l28_n554()
+ fun_l29_n435
+end
+
+def fun_l28_n555()
+ fun_l29_n75
+end
+
+def fun_l28_n556()
+ fun_l29_n23
+end
+
+def fun_l28_n557()
+ fun_l29_n658
+end
+
+def fun_l28_n558()
+ fun_l29_n814
+end
+
+def fun_l28_n559()
+ fun_l29_n833
+end
+
+def fun_l28_n560()
+ fun_l29_n101
+end
+
+def fun_l28_n561()
+ fun_l29_n513
+end
+
+def fun_l28_n562()
+ fun_l29_n43
+end
+
+def fun_l28_n563()
+ fun_l29_n576
+end
+
+def fun_l28_n564()
+ fun_l29_n131
+end
+
+def fun_l28_n565()
+ fun_l29_n920
+end
+
+def fun_l28_n566()
+ fun_l29_n299
+end
+
+def fun_l28_n567()
+ fun_l29_n216
+end
+
+def fun_l28_n568()
+ fun_l29_n547
+end
+
+def fun_l28_n569()
+ fun_l29_n728
+end
+
+def fun_l28_n570()
+ fun_l29_n349
+end
+
+def fun_l28_n571()
+ fun_l29_n927
+end
+
+def fun_l28_n572()
+ fun_l29_n328
+end
+
+def fun_l28_n573()
+ fun_l29_n790
+end
+
+def fun_l28_n574()
+ fun_l29_n397
+end
+
+def fun_l28_n575()
+ fun_l29_n423
+end
+
+def fun_l28_n576()
+ fun_l29_n867
+end
+
+def fun_l28_n577()
+ fun_l29_n529
+end
+
+def fun_l28_n578()
+ fun_l29_n825
+end
+
+def fun_l28_n579()
+ fun_l29_n51
+end
+
+def fun_l28_n580()
+ fun_l29_n482
+end
+
+def fun_l28_n581()
+ fun_l29_n395
+end
+
+def fun_l28_n582()
+ fun_l29_n771
+end
+
+def fun_l28_n583()
+ fun_l29_n118
+end
+
+def fun_l28_n584()
+ fun_l29_n348
+end
+
+def fun_l28_n585()
+ fun_l29_n895
+end
+
+def fun_l28_n586()
+ fun_l29_n956
+end
+
+def fun_l28_n587()
+ fun_l29_n251
+end
+
+def fun_l28_n588()
+ fun_l29_n216
+end
+
+def fun_l28_n589()
+ fun_l29_n837
+end
+
+def fun_l28_n590()
+ fun_l29_n956
+end
+
+def fun_l28_n591()
+ fun_l29_n309
+end
+
+def fun_l28_n592()
+ fun_l29_n706
+end
+
+def fun_l28_n593()
+ fun_l29_n58
+end
+
+def fun_l28_n594()
+ fun_l29_n244
+end
+
+def fun_l28_n595()
+ fun_l29_n281
+end
+
+def fun_l28_n596()
+ fun_l29_n748
+end
+
+def fun_l28_n597()
+ fun_l29_n109
+end
+
+def fun_l28_n598()
+ fun_l29_n730
+end
+
+def fun_l28_n599()
+ fun_l29_n590
+end
+
+def fun_l28_n600()
+ fun_l29_n331
+end
+
+def fun_l28_n601()
+ fun_l29_n700
+end
+
+def fun_l28_n602()
+ fun_l29_n606
+end
+
+def fun_l28_n603()
+ fun_l29_n331
+end
+
+def fun_l28_n604()
+ fun_l29_n695
+end
+
+def fun_l28_n605()
+ fun_l29_n355
+end
+
+def fun_l28_n606()
+ fun_l29_n449
+end
+
+def fun_l28_n607()
+ fun_l29_n728
+end
+
+def fun_l28_n608()
+ fun_l29_n248
+end
+
+def fun_l28_n609()
+ fun_l29_n949
+end
+
+def fun_l28_n610()
+ fun_l29_n473
+end
+
+def fun_l28_n611()
+ fun_l29_n244
+end
+
+def fun_l28_n612()
+ fun_l29_n790
+end
+
+def fun_l28_n613()
+ fun_l29_n983
+end
+
+def fun_l28_n614()
+ fun_l29_n76
+end
+
+def fun_l28_n615()
+ fun_l29_n792
+end
+
+def fun_l28_n616()
+ fun_l29_n195
+end
+
+def fun_l28_n617()
+ fun_l29_n559
+end
+
+def fun_l28_n618()
+ fun_l29_n269
+end
+
+def fun_l28_n619()
+ fun_l29_n152
+end
+
+def fun_l28_n620()
+ fun_l29_n507
+end
+
+def fun_l28_n621()
+ fun_l29_n165
+end
+
+def fun_l28_n622()
+ fun_l29_n779
+end
+
+def fun_l28_n623()
+ fun_l29_n182
+end
+
+def fun_l28_n624()
+ fun_l29_n76
+end
+
+def fun_l28_n625()
+ fun_l29_n585
+end
+
+def fun_l28_n626()
+ fun_l29_n943
+end
+
+def fun_l28_n627()
+ fun_l29_n25
+end
+
+def fun_l28_n628()
+ fun_l29_n200
+end
+
+def fun_l28_n629()
+ fun_l29_n590
+end
+
+def fun_l28_n630()
+ fun_l29_n631
+end
+
+def fun_l28_n631()
+ fun_l29_n610
+end
+
+def fun_l28_n632()
+ fun_l29_n197
+end
+
+def fun_l28_n633()
+ fun_l29_n608
+end
+
+def fun_l28_n634()
+ fun_l29_n585
+end
+
+def fun_l28_n635()
+ fun_l29_n987
+end
+
+def fun_l28_n636()
+ fun_l29_n440
+end
+
+def fun_l28_n637()
+ fun_l29_n808
+end
+
+def fun_l28_n638()
+ fun_l29_n208
+end
+
+def fun_l28_n639()
+ fun_l29_n382
+end
+
+def fun_l28_n640()
+ fun_l29_n631
+end
+
+def fun_l28_n641()
+ fun_l29_n107
+end
+
+def fun_l28_n642()
+ fun_l29_n682
+end
+
+def fun_l28_n643()
+ fun_l29_n57
+end
+
+def fun_l28_n644()
+ fun_l29_n375
+end
+
+def fun_l28_n645()
+ fun_l29_n855
+end
+
+def fun_l28_n646()
+ fun_l29_n200
+end
+
+def fun_l28_n647()
+ fun_l29_n820
+end
+
+def fun_l28_n648()
+ fun_l29_n363
+end
+
+def fun_l28_n649()
+ fun_l29_n991
+end
+
+def fun_l28_n650()
+ fun_l29_n342
+end
+
+def fun_l28_n651()
+ fun_l29_n740
+end
+
+def fun_l28_n652()
+ fun_l29_n646
+end
+
+def fun_l28_n653()
+ fun_l29_n743
+end
+
+def fun_l28_n654()
+ fun_l29_n438
+end
+
+def fun_l28_n655()
+ fun_l29_n198
+end
+
+def fun_l28_n656()
+ fun_l29_n45
+end
+
+def fun_l28_n657()
+ fun_l29_n54
+end
+
+def fun_l28_n658()
+ fun_l29_n5
+end
+
+def fun_l28_n659()
+ fun_l29_n30
+end
+
+def fun_l28_n660()
+ fun_l29_n77
+end
+
+def fun_l28_n661()
+ fun_l29_n231
+end
+
+def fun_l28_n662()
+ fun_l29_n515
+end
+
+def fun_l28_n663()
+ fun_l29_n327
+end
+
+def fun_l28_n664()
+ fun_l29_n188
+end
+
+def fun_l28_n665()
+ fun_l29_n976
+end
+
+def fun_l28_n666()
+ fun_l29_n482
+end
+
+def fun_l28_n667()
+ fun_l29_n106
+end
+
+def fun_l28_n668()
+ fun_l29_n339
+end
+
+def fun_l28_n669()
+ fun_l29_n445
+end
+
+def fun_l28_n670()
+ fun_l29_n708
+end
+
+def fun_l28_n671()
+ fun_l29_n846
+end
+
+def fun_l28_n672()
+ fun_l29_n142
+end
+
+def fun_l28_n673()
+ fun_l29_n567
+end
+
+def fun_l28_n674()
+ fun_l29_n875
+end
+
+def fun_l28_n675()
+ fun_l29_n107
+end
+
+def fun_l28_n676()
+ fun_l29_n243
+end
+
+def fun_l28_n677()
+ fun_l29_n580
+end
+
+def fun_l28_n678()
+ fun_l29_n75
+end
+
+def fun_l28_n679()
+ fun_l29_n230
+end
+
+def fun_l28_n680()
+ fun_l29_n72
+end
+
+def fun_l28_n681()
+ fun_l29_n429
+end
+
+def fun_l28_n682()
+ fun_l29_n816
+end
+
+def fun_l28_n683()
+ fun_l29_n896
+end
+
+def fun_l28_n684()
+ fun_l29_n933
+end
+
+def fun_l28_n685()
+ fun_l29_n432
+end
+
+def fun_l28_n686()
+ fun_l29_n547
+end
+
+def fun_l28_n687()
+ fun_l29_n670
+end
+
+def fun_l28_n688()
+ fun_l29_n952
+end
+
+def fun_l28_n689()
+ fun_l29_n137
+end
+
+def fun_l28_n690()
+ fun_l29_n532
+end
+
+def fun_l28_n691()
+ fun_l29_n608
+end
+
+def fun_l28_n692()
+ fun_l29_n264
+end
+
+def fun_l28_n693()
+ fun_l29_n220
+end
+
+def fun_l28_n694()
+ fun_l29_n499
+end
+
+def fun_l28_n695()
+ fun_l29_n244
+end
+
+def fun_l28_n696()
+ fun_l29_n952
+end
+
+def fun_l28_n697()
+ fun_l29_n700
+end
+
+def fun_l28_n698()
+ fun_l29_n415
+end
+
+def fun_l28_n699()
+ fun_l29_n712
+end
+
+def fun_l28_n700()
+ fun_l29_n209
+end
+
+def fun_l28_n701()
+ fun_l29_n759
+end
+
+def fun_l28_n702()
+ fun_l29_n786
+end
+
+def fun_l28_n703()
+ fun_l29_n858
+end
+
+def fun_l28_n704()
+ fun_l29_n328
+end
+
+def fun_l28_n705()
+ fun_l29_n201
+end
+
+def fun_l28_n706()
+ fun_l29_n317
+end
+
+def fun_l28_n707()
+ fun_l29_n335
+end
+
+def fun_l28_n708()
+ fun_l29_n483
+end
+
+def fun_l28_n709()
+ fun_l29_n1
+end
+
+def fun_l28_n710()
+ fun_l29_n962
+end
+
+def fun_l28_n711()
+ fun_l29_n158
+end
+
+def fun_l28_n712()
+ fun_l29_n591
+end
+
+def fun_l28_n713()
+ fun_l29_n849
+end
+
+def fun_l28_n714()
+ fun_l29_n149
+end
+
+def fun_l28_n715()
+ fun_l29_n653
+end
+
+def fun_l28_n716()
+ fun_l29_n173
+end
+
+def fun_l28_n717()
+ fun_l29_n21
+end
+
+def fun_l28_n718()
+ fun_l29_n384
+end
+
+def fun_l28_n719()
+ fun_l29_n601
+end
+
+def fun_l28_n720()
+ fun_l29_n388
+end
+
+def fun_l28_n721()
+ fun_l29_n866
+end
+
+def fun_l28_n722()
+ fun_l29_n261
+end
+
+def fun_l28_n723()
+ fun_l29_n412
+end
+
+def fun_l28_n724()
+ fun_l29_n77
+end
+
+def fun_l28_n725()
+ fun_l29_n395
+end
+
+def fun_l28_n726()
+ fun_l29_n863
+end
+
+def fun_l28_n727()
+ fun_l29_n780
+end
+
+def fun_l28_n728()
+ fun_l29_n400
+end
+
+def fun_l28_n729()
+ fun_l29_n495
+end
+
+def fun_l28_n730()
+ fun_l29_n813
+end
+
+def fun_l28_n731()
+ fun_l29_n330
+end
+
+def fun_l28_n732()
+ fun_l29_n479
+end
+
+def fun_l28_n733()
+ fun_l29_n446
+end
+
+def fun_l28_n734()
+ fun_l29_n354
+end
+
+def fun_l28_n735()
+ fun_l29_n88
+end
+
+def fun_l28_n736()
+ fun_l29_n296
+end
+
+def fun_l28_n737()
+ fun_l29_n457
+end
+
+def fun_l28_n738()
+ fun_l29_n611
+end
+
+def fun_l28_n739()
+ fun_l29_n412
+end
+
+def fun_l28_n740()
+ fun_l29_n290
+end
+
+def fun_l28_n741()
+ fun_l29_n935
+end
+
+def fun_l28_n742()
+ fun_l29_n833
+end
+
+def fun_l28_n743()
+ fun_l29_n296
+end
+
+def fun_l28_n744()
+ fun_l29_n249
+end
+
+def fun_l28_n745()
+ fun_l29_n567
+end
+
+def fun_l28_n746()
+ fun_l29_n707
+end
+
+def fun_l28_n747()
+ fun_l29_n633
+end
+
+def fun_l28_n748()
+ fun_l29_n303
+end
+
+def fun_l28_n749()
+ fun_l29_n971
+end
+
+def fun_l28_n750()
+ fun_l29_n784
+end
+
+def fun_l28_n751()
+ fun_l29_n88
+end
+
+def fun_l28_n752()
+ fun_l29_n782
+end
+
+def fun_l28_n753()
+ fun_l29_n322
+end
+
+def fun_l28_n754()
+ fun_l29_n362
+end
+
+def fun_l28_n755()
+ fun_l29_n894
+end
+
+def fun_l28_n756()
+ fun_l29_n848
+end
+
+def fun_l28_n757()
+ fun_l29_n617
+end
+
+def fun_l28_n758()
+ fun_l29_n103
+end
+
+def fun_l28_n759()
+ fun_l29_n625
+end
+
+def fun_l28_n760()
+ fun_l29_n592
+end
+
+def fun_l28_n761()
+ fun_l29_n597
+end
+
+def fun_l28_n762()
+ fun_l29_n118
+end
+
+def fun_l28_n763()
+ fun_l29_n366
+end
+
+def fun_l28_n764()
+ fun_l29_n609
+end
+
+def fun_l28_n765()
+ fun_l29_n710
+end
+
+def fun_l28_n766()
+ fun_l29_n563
+end
+
+def fun_l28_n767()
+ fun_l29_n324
+end
+
+def fun_l28_n768()
+ fun_l29_n783
+end
+
+def fun_l28_n769()
+ fun_l29_n512
+end
+
+def fun_l28_n770()
+ fun_l29_n0
+end
+
+def fun_l28_n771()
+ fun_l29_n60
+end
+
+def fun_l28_n772()
+ fun_l29_n18
+end
+
+def fun_l28_n773()
+ fun_l29_n741
+end
+
+def fun_l28_n774()
+ fun_l29_n862
+end
+
+def fun_l28_n775()
+ fun_l29_n183
+end
+
+def fun_l28_n776()
+ fun_l29_n148
+end
+
+def fun_l28_n777()
+ fun_l29_n703
+end
+
+def fun_l28_n778()
+ fun_l29_n251
+end
+
+def fun_l28_n779()
+ fun_l29_n84
+end
+
+def fun_l28_n780()
+ fun_l29_n85
+end
+
+def fun_l28_n781()
+ fun_l29_n632
+end
+
+def fun_l28_n782()
+ fun_l29_n28
+end
+
+def fun_l28_n783()
+ fun_l29_n123
+end
+
+def fun_l28_n784()
+ fun_l29_n66
+end
+
+def fun_l28_n785()
+ fun_l29_n266
+end
+
+def fun_l28_n786()
+ fun_l29_n860
+end
+
+def fun_l28_n787()
+ fun_l29_n769
+end
+
+def fun_l28_n788()
+ fun_l29_n921
+end
+
+def fun_l28_n789()
+ fun_l29_n513
+end
+
+def fun_l28_n790()
+ fun_l29_n455
+end
+
+def fun_l28_n791()
+ fun_l29_n589
+end
+
+def fun_l28_n792()
+ fun_l29_n557
+end
+
+def fun_l28_n793()
+ fun_l29_n827
+end
+
+def fun_l28_n794()
+ fun_l29_n561
+end
+
+def fun_l28_n795()
+ fun_l29_n891
+end
+
+def fun_l28_n796()
+ fun_l29_n938
+end
+
+def fun_l28_n797()
+ fun_l29_n157
+end
+
+def fun_l28_n798()
+ fun_l29_n691
+end
+
+def fun_l28_n799()
+ fun_l29_n20
+end
+
+def fun_l28_n800()
+ fun_l29_n737
+end
+
+def fun_l28_n801()
+ fun_l29_n675
+end
+
+def fun_l28_n802()
+ fun_l29_n385
+end
+
+def fun_l28_n803()
+ fun_l29_n206
+end
+
+def fun_l28_n804()
+ fun_l29_n366
+end
+
+def fun_l28_n805()
+ fun_l29_n107
+end
+
+def fun_l28_n806()
+ fun_l29_n425
+end
+
+def fun_l28_n807()
+ fun_l29_n371
+end
+
+def fun_l28_n808()
+ fun_l29_n241
+end
+
+def fun_l28_n809()
+ fun_l29_n168
+end
+
+def fun_l28_n810()
+ fun_l29_n201
+end
+
+def fun_l28_n811()
+ fun_l29_n600
+end
+
+def fun_l28_n812()
+ fun_l29_n251
+end
+
+def fun_l28_n813()
+ fun_l29_n10
+end
+
+def fun_l28_n814()
+ fun_l29_n428
+end
+
+def fun_l28_n815()
+ fun_l29_n850
+end
+
+def fun_l28_n816()
+ fun_l29_n276
+end
+
+def fun_l28_n817()
+ fun_l29_n196
+end
+
+def fun_l28_n818()
+ fun_l29_n623
+end
+
+def fun_l28_n819()
+ fun_l29_n441
+end
+
+def fun_l28_n820()
+ fun_l29_n724
+end
+
+def fun_l28_n821()
+ fun_l29_n958
+end
+
+def fun_l28_n822()
+ fun_l29_n449
+end
+
+def fun_l28_n823()
+ fun_l29_n408
+end
+
+def fun_l28_n824()
+ fun_l29_n74
+end
+
+def fun_l28_n825()
+ fun_l29_n124
+end
+
+def fun_l28_n826()
+ fun_l29_n991
+end
+
+def fun_l28_n827()
+ fun_l29_n576
+end
+
+def fun_l28_n828()
+ fun_l29_n743
+end
+
+def fun_l28_n829()
+ fun_l29_n343
+end
+
+def fun_l28_n830()
+ fun_l29_n376
+end
+
+def fun_l28_n831()
+ fun_l29_n216
+end
+
+def fun_l28_n832()
+ fun_l29_n358
+end
+
+def fun_l28_n833()
+ fun_l29_n567
+end
+
+def fun_l28_n834()
+ fun_l29_n415
+end
+
+def fun_l28_n835()
+ fun_l29_n984
+end
+
+def fun_l28_n836()
+ fun_l29_n367
+end
+
+def fun_l28_n837()
+ fun_l29_n299
+end
+
+def fun_l28_n838()
+ fun_l29_n718
+end
+
+def fun_l28_n839()
+ fun_l29_n241
+end
+
+def fun_l28_n840()
+ fun_l29_n736
+end
+
+def fun_l28_n841()
+ fun_l29_n582
+end
+
+def fun_l28_n842()
+ fun_l29_n994
+end
+
+def fun_l28_n843()
+ fun_l29_n301
+end
+
+def fun_l28_n844()
+ fun_l29_n597
+end
+
+def fun_l28_n845()
+ fun_l29_n141
+end
+
+def fun_l28_n846()
+ fun_l29_n37
+end
+
+def fun_l28_n847()
+ fun_l29_n216
+end
+
+def fun_l28_n848()
+ fun_l29_n286
+end
+
+def fun_l28_n849()
+ fun_l29_n607
+end
+
+def fun_l28_n850()
+ fun_l29_n503
+end
+
+def fun_l28_n851()
+ fun_l29_n321
+end
+
+def fun_l28_n852()
+ fun_l29_n179
+end
+
+def fun_l28_n853()
+ fun_l29_n802
+end
+
+def fun_l28_n854()
+ fun_l29_n742
+end
+
+def fun_l28_n855()
+ fun_l29_n300
+end
+
+def fun_l28_n856()
+ fun_l29_n453
+end
+
+def fun_l28_n857()
+ fun_l29_n520
+end
+
+def fun_l28_n858()
+ fun_l29_n911
+end
+
+def fun_l28_n859()
+ fun_l29_n209
+end
+
+def fun_l28_n860()
+ fun_l29_n921
+end
+
+def fun_l28_n861()
+ fun_l29_n653
+end
+
+def fun_l28_n862()
+ fun_l29_n347
+end
+
+def fun_l28_n863()
+ fun_l29_n733
+end
+
+def fun_l28_n864()
+ fun_l29_n824
+end
+
+def fun_l28_n865()
+ fun_l29_n497
+end
+
+def fun_l28_n866()
+ fun_l29_n256
+end
+
+def fun_l28_n867()
+ fun_l29_n884
+end
+
+def fun_l28_n868()
+ fun_l29_n937
+end
+
+def fun_l28_n869()
+ fun_l29_n894
+end
+
+def fun_l28_n870()
+ fun_l29_n258
+end
+
+def fun_l28_n871()
+ fun_l29_n45
+end
+
+def fun_l28_n872()
+ fun_l29_n640
+end
+
+def fun_l28_n873()
+ fun_l29_n909
+end
+
+def fun_l28_n874()
+ fun_l29_n586
+end
+
+def fun_l28_n875()
+ fun_l29_n600
+end
+
+def fun_l28_n876()
+ fun_l29_n636
+end
+
+def fun_l28_n877()
+ fun_l29_n972
+end
+
+def fun_l28_n878()
+ fun_l29_n627
+end
+
+def fun_l28_n879()
+ fun_l29_n381
+end
+
+def fun_l28_n880()
+ fun_l29_n664
+end
+
+def fun_l28_n881()
+ fun_l29_n350
+end
+
+def fun_l28_n882()
+ fun_l29_n611
+end
+
+def fun_l28_n883()
+ fun_l29_n355
+end
+
+def fun_l28_n884()
+ fun_l29_n945
+end
+
+def fun_l28_n885()
+ fun_l29_n462
+end
+
+def fun_l28_n886()
+ fun_l29_n723
+end
+
+def fun_l28_n887()
+ fun_l29_n500
+end
+
+def fun_l28_n888()
+ fun_l29_n166
+end
+
+def fun_l28_n889()
+ fun_l29_n779
+end
+
+def fun_l28_n890()
+ fun_l29_n151
+end
+
+def fun_l28_n891()
+ fun_l29_n757
+end
+
+def fun_l28_n892()
+ fun_l29_n782
+end
+
+def fun_l28_n893()
+ fun_l29_n108
+end
+
+def fun_l28_n894()
+ fun_l29_n122
+end
+
+def fun_l28_n895()
+ fun_l29_n815
+end
+
+def fun_l28_n896()
+ fun_l29_n742
+end
+
+def fun_l28_n897()
+ fun_l29_n861
+end
+
+def fun_l28_n898()
+ fun_l29_n738
+end
+
+def fun_l28_n899()
+ fun_l29_n765
+end
+
+def fun_l28_n900()
+ fun_l29_n648
+end
+
+def fun_l28_n901()
+ fun_l29_n923
+end
+
+def fun_l28_n902()
+ fun_l29_n269
+end
+
+def fun_l28_n903()
+ fun_l29_n626
+end
+
+def fun_l28_n904()
+ fun_l29_n100
+end
+
+def fun_l28_n905()
+ fun_l29_n587
+end
+
+def fun_l28_n906()
+ fun_l29_n841
+end
+
+def fun_l28_n907()
+ fun_l29_n239
+end
+
+def fun_l28_n908()
+ fun_l29_n87
+end
+
+def fun_l28_n909()
+ fun_l29_n765
+end
+
+def fun_l28_n910()
+ fun_l29_n216
+end
+
+def fun_l28_n911()
+ fun_l29_n110
+end
+
+def fun_l28_n912()
+ fun_l29_n96
+end
+
+def fun_l28_n913()
+ fun_l29_n946
+end
+
+def fun_l28_n914()
+ fun_l29_n762
+end
+
+def fun_l28_n915()
+ fun_l29_n697
+end
+
+def fun_l28_n916()
+ fun_l29_n44
+end
+
+def fun_l28_n917()
+ fun_l29_n257
+end
+
+def fun_l28_n918()
+ fun_l29_n195
+end
+
+def fun_l28_n919()
+ fun_l29_n886
+end
+
+def fun_l28_n920()
+ fun_l29_n432
+end
+
+def fun_l28_n921()
+ fun_l29_n746
+end
+
+def fun_l28_n922()
+ fun_l29_n756
+end
+
+def fun_l28_n923()
+ fun_l29_n33
+end
+
+def fun_l28_n924()
+ fun_l29_n720
+end
+
+def fun_l28_n925()
+ fun_l29_n629
+end
+
+def fun_l28_n926()
+ fun_l29_n144
+end
+
+def fun_l28_n927()
+ fun_l29_n225
+end
+
+def fun_l28_n928()
+ fun_l29_n556
+end
+
+def fun_l28_n929()
+ fun_l29_n436
+end
+
+def fun_l28_n930()
+ fun_l29_n380
+end
+
+def fun_l28_n931()
+ fun_l29_n478
+end
+
+def fun_l28_n932()
+ fun_l29_n949
+end
+
+def fun_l28_n933()
+ fun_l29_n811
+end
+
+def fun_l28_n934()
+ fun_l29_n589
+end
+
+def fun_l28_n935()
+ fun_l29_n961
+end
+
+def fun_l28_n936()
+ fun_l29_n413
+end
+
+def fun_l28_n937()
+ fun_l29_n941
+end
+
+def fun_l28_n938()
+ fun_l29_n507
+end
+
+def fun_l28_n939()
+ fun_l29_n364
+end
+
+def fun_l28_n940()
+ fun_l29_n100
+end
+
+def fun_l28_n941()
+ fun_l29_n254
+end
+
+def fun_l28_n942()
+ fun_l29_n272
+end
+
+def fun_l28_n943()
+ fun_l29_n420
+end
+
+def fun_l28_n944()
+ fun_l29_n132
+end
+
+def fun_l28_n945()
+ fun_l29_n907
+end
+
+def fun_l28_n946()
+ fun_l29_n784
+end
+
+def fun_l28_n947()
+ fun_l29_n938
+end
+
+def fun_l28_n948()
+ fun_l29_n780
+end
+
+def fun_l28_n949()
+ fun_l29_n584
+end
+
+def fun_l28_n950()
+ fun_l29_n258
+end
+
+def fun_l28_n951()
+ fun_l29_n754
+end
+
+def fun_l28_n952()
+ fun_l29_n582
+end
+
+def fun_l28_n953()
+ fun_l29_n278
+end
+
+def fun_l28_n954()
+ fun_l29_n870
+end
+
+def fun_l28_n955()
+ fun_l29_n664
+end
+
+def fun_l28_n956()
+ fun_l29_n375
+end
+
+def fun_l28_n957()
+ fun_l29_n613
+end
+
+def fun_l28_n958()
+ fun_l29_n530
+end
+
+def fun_l28_n959()
+ fun_l29_n933
+end
+
+def fun_l28_n960()
+ fun_l29_n298
+end
+
+def fun_l28_n961()
+ fun_l29_n507
+end
+
+def fun_l28_n962()
+ fun_l29_n526
+end
+
+def fun_l28_n963()
+ fun_l29_n508
+end
+
+def fun_l28_n964()
+ fun_l29_n227
+end
+
+def fun_l28_n965()
+ fun_l29_n999
+end
+
+def fun_l28_n966()
+ fun_l29_n489
+end
+
+def fun_l28_n967()
+ fun_l29_n789
+end
+
+def fun_l28_n968()
+ fun_l29_n304
+end
+
+def fun_l28_n969()
+ fun_l29_n343
+end
+
+def fun_l28_n970()
+ fun_l29_n560
+end
+
+def fun_l28_n971()
+ fun_l29_n610
+end
+
+def fun_l28_n972()
+ fun_l29_n606
+end
+
+def fun_l28_n973()
+ fun_l29_n592
+end
+
+def fun_l28_n974()
+ fun_l29_n135
+end
+
+def fun_l28_n975()
+ fun_l29_n513
+end
+
+def fun_l28_n976()
+ fun_l29_n522
+end
+
+def fun_l28_n977()
+ fun_l29_n323
+end
+
+def fun_l28_n978()
+ fun_l29_n26
+end
+
+def fun_l28_n979()
+ fun_l29_n737
+end
+
+def fun_l28_n980()
+ fun_l29_n705
+end
+
+def fun_l28_n981()
+ fun_l29_n405
+end
+
+def fun_l28_n982()
+ fun_l29_n891
+end
+
+def fun_l28_n983()
+ fun_l29_n155
+end
+
+def fun_l28_n984()
+ fun_l29_n814
+end
+
+def fun_l28_n985()
+ fun_l29_n70
+end
+
+def fun_l28_n986()
+ fun_l29_n940
+end
+
+def fun_l28_n987()
+ fun_l29_n427
+end
+
+def fun_l28_n988()
+ fun_l29_n478
+end
+
+def fun_l28_n989()
+ fun_l29_n432
+end
+
+def fun_l28_n990()
+ fun_l29_n320
+end
+
+def fun_l28_n991()
+ fun_l29_n422
+end
+
+def fun_l28_n992()
+ fun_l29_n917
+end
+
+def fun_l28_n993()
+ fun_l29_n391
+end
+
+def fun_l28_n994()
+ fun_l29_n950
+end
+
+def fun_l28_n995()
+ fun_l29_n635
+end
+
+def fun_l28_n996()
+ fun_l29_n392
+end
+
+def fun_l28_n997()
+ fun_l29_n311
+end
+
+def fun_l28_n998()
+ fun_l29_n320
+end
+
+def fun_l28_n999()
+ fun_l29_n916
+end
+
+def fun_l29_n0()
+ inc
+end
+
+def fun_l29_n1()
+ inc
+end
+
+def fun_l29_n2()
+ inc
+end
+
+def fun_l29_n3()
+ inc
+end
+
+def fun_l29_n4()
+ inc
+end
+
+def fun_l29_n5()
+ inc
+end
+
+def fun_l29_n6()
+ inc
+end
+
+def fun_l29_n7()
+ inc
+end
+
+def fun_l29_n8()
+ inc
+end
+
+def fun_l29_n9()
+ inc
+end
+
+def fun_l29_n10()
+ inc
+end
+
+def fun_l29_n11()
+ inc
+end
+
+def fun_l29_n12()
+ inc
+end
+
+def fun_l29_n13()
+ inc
+end
+
+def fun_l29_n14()
+ inc
+end
+
+def fun_l29_n15()
+ inc
+end
+
+def fun_l29_n16()
+ inc
+end
+
+def fun_l29_n17()
+ inc
+end
+
+def fun_l29_n18()
+ inc
+end
+
+def fun_l29_n19()
+ inc
+end
+
+def fun_l29_n20()
+ inc
+end
+
+def fun_l29_n21()
+ inc
+end
+
+def fun_l29_n22()
+ inc
+end
+
+def fun_l29_n23()
+ inc
+end
+
+def fun_l29_n24()
+ inc
+end
+
+def fun_l29_n25()
+ inc
+end
+
+def fun_l29_n26()
+ inc
+end
+
+def fun_l29_n27()
+ inc
+end
+
+def fun_l29_n28()
+ inc
+end
+
+def fun_l29_n29()
+ inc
+end
+
+def fun_l29_n30()
+ inc
+end
+
+def fun_l29_n31()
+ inc
+end
+
+def fun_l29_n32()
+ inc
+end
+
+def fun_l29_n33()
+ inc
+end
+
+def fun_l29_n34()
+ inc
+end
+
+def fun_l29_n35()
+ inc
+end
+
+def fun_l29_n36()
+ inc
+end
+
+def fun_l29_n37()
+ inc
+end
+
+def fun_l29_n38()
+ inc
+end
+
+def fun_l29_n39()
+ inc
+end
+
+def fun_l29_n40()
+ inc
+end
+
+def fun_l29_n41()
+ inc
+end
+
+def fun_l29_n42()
+ inc
+end
+
+def fun_l29_n43()
+ inc
+end
+
+def fun_l29_n44()
+ inc
+end
+
+def fun_l29_n45()
+ inc
+end
+
+def fun_l29_n46()
+ inc
+end
+
+def fun_l29_n47()
+ inc
+end
+
+def fun_l29_n48()
+ inc
+end
+
+def fun_l29_n49()
+ inc
+end
+
+def fun_l29_n50()
+ inc
+end
+
+def fun_l29_n51()
+ inc
+end
+
+def fun_l29_n52()
+ inc
+end
+
+def fun_l29_n53()
+ inc
+end
+
+def fun_l29_n54()
+ inc
+end
+
+def fun_l29_n55()
+ inc
+end
+
+def fun_l29_n56()
+ inc
+end
+
+def fun_l29_n57()
+ inc
+end
+
+def fun_l29_n58()
+ inc
+end
+
+def fun_l29_n59()
+ inc
+end
+
+def fun_l29_n60()
+ inc
+end
+
+def fun_l29_n61()
+ inc
+end
+
+def fun_l29_n62()
+ inc
+end
+
+def fun_l29_n63()
+ inc
+end
+
+def fun_l29_n64()
+ inc
+end
+
+def fun_l29_n65()
+ inc
+end
+
+def fun_l29_n66()
+ inc
+end
+
+def fun_l29_n67()
+ inc
+end
+
+def fun_l29_n68()
+ inc
+end
+
+def fun_l29_n69()
+ inc
+end
+
+def fun_l29_n70()
+ inc
+end
+
+def fun_l29_n71()
+ inc
+end
+
+def fun_l29_n72()
+ inc
+end
+
+def fun_l29_n73()
+ inc
+end
+
+def fun_l29_n74()
+ inc
+end
+
+def fun_l29_n75()
+ inc
+end
+
+def fun_l29_n76()
+ inc
+end
+
+def fun_l29_n77()
+ inc
+end
+
+def fun_l29_n78()
+ inc
+end
+
+def fun_l29_n79()
+ inc
+end
+
+def fun_l29_n80()
+ inc
+end
+
+def fun_l29_n81()
+ inc
+end
+
+def fun_l29_n82()
+ inc
+end
+
+def fun_l29_n83()
+ inc
+end
+
+def fun_l29_n84()
+ inc
+end
+
+def fun_l29_n85()
+ inc
+end
+
+def fun_l29_n86()
+ inc
+end
+
+def fun_l29_n87()
+ inc
+end
+
+def fun_l29_n88()
+ inc
+end
+
+def fun_l29_n89()
+ inc
+end
+
+def fun_l29_n90()
+ inc
+end
+
+def fun_l29_n91()
+ inc
+end
+
+def fun_l29_n92()
+ inc
+end
+
+def fun_l29_n93()
+ inc
+end
+
+def fun_l29_n94()
+ inc
+end
+
+def fun_l29_n95()
+ inc
+end
+
+def fun_l29_n96()
+ inc
+end
+
+def fun_l29_n97()
+ inc
+end
+
+def fun_l29_n98()
+ inc
+end
+
+def fun_l29_n99()
+ inc
+end
+
+def fun_l29_n100()
+ inc
+end
+
+def fun_l29_n101()
+ inc
+end
+
+def fun_l29_n102()
+ inc
+end
+
+def fun_l29_n103()
+ inc
+end
+
+def fun_l29_n104()
+ inc
+end
+
+def fun_l29_n105()
+ inc
+end
+
+def fun_l29_n106()
+ inc
+end
+
+def fun_l29_n107()
+ inc
+end
+
+def fun_l29_n108()
+ inc
+end
+
+def fun_l29_n109()
+ inc
+end
+
+def fun_l29_n110()
+ inc
+end
+
+def fun_l29_n111()
+ inc
+end
+
+def fun_l29_n112()
+ inc
+end
+
+def fun_l29_n113()
+ inc
+end
+
+def fun_l29_n114()
+ inc
+end
+
+def fun_l29_n115()
+ inc
+end
+
+def fun_l29_n116()
+ inc
+end
+
+def fun_l29_n117()
+ inc
+end
+
+def fun_l29_n118()
+ inc
+end
+
+def fun_l29_n119()
+ inc
+end
+
+def fun_l29_n120()
+ inc
+end
+
+def fun_l29_n121()
+ inc
+end
+
+def fun_l29_n122()
+ inc
+end
+
+def fun_l29_n123()
+ inc
+end
+
+def fun_l29_n124()
+ inc
+end
+
+def fun_l29_n125()
+ inc
+end
+
+def fun_l29_n126()
+ inc
+end
+
+def fun_l29_n127()
+ inc
+end
+
+def fun_l29_n128()
+ inc
+end
+
+def fun_l29_n129()
+ inc
+end
+
+def fun_l29_n130()
+ inc
+end
+
+def fun_l29_n131()
+ inc
+end
+
+def fun_l29_n132()
+ inc
+end
+
+def fun_l29_n133()
+ inc
+end
+
+def fun_l29_n134()
+ inc
+end
+
+def fun_l29_n135()
+ inc
+end
+
+def fun_l29_n136()
+ inc
+end
+
+def fun_l29_n137()
+ inc
+end
+
+def fun_l29_n138()
+ inc
+end
+
+def fun_l29_n139()
+ inc
+end
+
+def fun_l29_n140()
+ inc
+end
+
+def fun_l29_n141()
+ inc
+end
+
+def fun_l29_n142()
+ inc
+end
+
+def fun_l29_n143()
+ inc
+end
+
+def fun_l29_n144()
+ inc
+end
+
+def fun_l29_n145()
+ inc
+end
+
+def fun_l29_n146()
+ inc
+end
+
+def fun_l29_n147()
+ inc
+end
+
+def fun_l29_n148()
+ inc
+end
+
+def fun_l29_n149()
+ inc
+end
+
+def fun_l29_n150()
+ inc
+end
+
+def fun_l29_n151()
+ inc
+end
+
+def fun_l29_n152()
+ inc
+end
+
+def fun_l29_n153()
+ inc
+end
+
+def fun_l29_n154()
+ inc
+end
+
+def fun_l29_n155()
+ inc
+end
+
+def fun_l29_n156()
+ inc
+end
+
+def fun_l29_n157()
+ inc
+end
+
+def fun_l29_n158()
+ inc
+end
+
+def fun_l29_n159()
+ inc
+end
+
+def fun_l29_n160()
+ inc
+end
+
+def fun_l29_n161()
+ inc
+end
+
+def fun_l29_n162()
+ inc
+end
+
+def fun_l29_n163()
+ inc
+end
+
+def fun_l29_n164()
+ inc
+end
+
+def fun_l29_n165()
+ inc
+end
+
+def fun_l29_n166()
+ inc
+end
+
+def fun_l29_n167()
+ inc
+end
+
+def fun_l29_n168()
+ inc
+end
+
+def fun_l29_n169()
+ inc
+end
+
+def fun_l29_n170()
+ inc
+end
+
+def fun_l29_n171()
+ inc
+end
+
+def fun_l29_n172()
+ inc
+end
+
+def fun_l29_n173()
+ inc
+end
+
+def fun_l29_n174()
+ inc
+end
+
+def fun_l29_n175()
+ inc
+end
+
+def fun_l29_n176()
+ inc
+end
+
+def fun_l29_n177()
+ inc
+end
+
+def fun_l29_n178()
+ inc
+end
+
+def fun_l29_n179()
+ inc
+end
+
+def fun_l29_n180()
+ inc
+end
+
+def fun_l29_n181()
+ inc
+end
+
+def fun_l29_n182()
+ inc
+end
+
+def fun_l29_n183()
+ inc
+end
+
+def fun_l29_n184()
+ inc
+end
+
+def fun_l29_n185()
+ inc
+end
+
+def fun_l29_n186()
+ inc
+end
+
+def fun_l29_n187()
+ inc
+end
+
+def fun_l29_n188()
+ inc
+end
+
+def fun_l29_n189()
+ inc
+end
+
+def fun_l29_n190()
+ inc
+end
+
+def fun_l29_n191()
+ inc
+end
+
+def fun_l29_n192()
+ inc
+end
+
+def fun_l29_n193()
+ inc
+end
+
+def fun_l29_n194()
+ inc
+end
+
+def fun_l29_n195()
+ inc
+end
+
+def fun_l29_n196()
+ inc
+end
+
+def fun_l29_n197()
+ inc
+end
+
+def fun_l29_n198()
+ inc
+end
+
+def fun_l29_n199()
+ inc
+end
+
+def fun_l29_n200()
+ inc
+end
+
+def fun_l29_n201()
+ inc
+end
+
+def fun_l29_n202()
+ inc
+end
+
+def fun_l29_n203()
+ inc
+end
+
+def fun_l29_n204()
+ inc
+end
+
+def fun_l29_n205()
+ inc
+end
+
+def fun_l29_n206()
+ inc
+end
+
+def fun_l29_n207()
+ inc
+end
+
+def fun_l29_n208()
+ inc
+end
+
+def fun_l29_n209()
+ inc
+end
+
+def fun_l29_n210()
+ inc
+end
+
+def fun_l29_n211()
+ inc
+end
+
+def fun_l29_n212()
+ inc
+end
+
+def fun_l29_n213()
+ inc
+end
+
+def fun_l29_n214()
+ inc
+end
+
+def fun_l29_n215()
+ inc
+end
+
+def fun_l29_n216()
+ inc
+end
+
+def fun_l29_n217()
+ inc
+end
+
+def fun_l29_n218()
+ inc
+end
+
+def fun_l29_n219()
+ inc
+end
+
+def fun_l29_n220()
+ inc
+end
+
+def fun_l29_n221()
+ inc
+end
+
+def fun_l29_n222()
+ inc
+end
+
+def fun_l29_n223()
+ inc
+end
+
+def fun_l29_n224()
+ inc
+end
+
+def fun_l29_n225()
+ inc
+end
+
+def fun_l29_n226()
+ inc
+end
+
+def fun_l29_n227()
+ inc
+end
+
+def fun_l29_n228()
+ inc
+end
+
+def fun_l29_n229()
+ inc
+end
+
+def fun_l29_n230()
+ inc
+end
+
+def fun_l29_n231()
+ inc
+end
+
+def fun_l29_n232()
+ inc
+end
+
+def fun_l29_n233()
+ inc
+end
+
+def fun_l29_n234()
+ inc
+end
+
+def fun_l29_n235()
+ inc
+end
+
+def fun_l29_n236()
+ inc
+end
+
+def fun_l29_n237()
+ inc
+end
+
+def fun_l29_n238()
+ inc
+end
+
+def fun_l29_n239()
+ inc
+end
+
+def fun_l29_n240()
+ inc
+end
+
+def fun_l29_n241()
+ inc
+end
+
+def fun_l29_n242()
+ inc
+end
+
+def fun_l29_n243()
+ inc
+end
+
+def fun_l29_n244()
+ inc
+end
+
+def fun_l29_n245()
+ inc
+end
+
+def fun_l29_n246()
+ inc
+end
+
+def fun_l29_n247()
+ inc
+end
+
+def fun_l29_n248()
+ inc
+end
+
+def fun_l29_n249()
+ inc
+end
+
+def fun_l29_n250()
+ inc
+end
+
+def fun_l29_n251()
+ inc
+end
+
+def fun_l29_n252()
+ inc
+end
+
+def fun_l29_n253()
+ inc
+end
+
+def fun_l29_n254()
+ inc
+end
+
+def fun_l29_n255()
+ inc
+end
+
+def fun_l29_n256()
+ inc
+end
+
+def fun_l29_n257()
+ inc
+end
+
+def fun_l29_n258()
+ inc
+end
+
+def fun_l29_n259()
+ inc
+end
+
+def fun_l29_n260()
+ inc
+end
+
+def fun_l29_n261()
+ inc
+end
+
+def fun_l29_n262()
+ inc
+end
+
+def fun_l29_n263()
+ inc
+end
+
+def fun_l29_n264()
+ inc
+end
+
+def fun_l29_n265()
+ inc
+end
+
+def fun_l29_n266()
+ inc
+end
+
+def fun_l29_n267()
+ inc
+end
+
+def fun_l29_n268()
+ inc
+end
+
+def fun_l29_n269()
+ inc
+end
+
+def fun_l29_n270()
+ inc
+end
+
+def fun_l29_n271()
+ inc
+end
+
+def fun_l29_n272()
+ inc
+end
+
+def fun_l29_n273()
+ inc
+end
+
+def fun_l29_n274()
+ inc
+end
+
+def fun_l29_n275()
+ inc
+end
+
+def fun_l29_n276()
+ inc
+end
+
+def fun_l29_n277()
+ inc
+end
+
+def fun_l29_n278()
+ inc
+end
+
+def fun_l29_n279()
+ inc
+end
+
+def fun_l29_n280()
+ inc
+end
+
+def fun_l29_n281()
+ inc
+end
+
+def fun_l29_n282()
+ inc
+end
+
+def fun_l29_n283()
+ inc
+end
+
+def fun_l29_n284()
+ inc
+end
+
+def fun_l29_n285()
+ inc
+end
+
+def fun_l29_n286()
+ inc
+end
+
+def fun_l29_n287()
+ inc
+end
+
+def fun_l29_n288()
+ inc
+end
+
+def fun_l29_n289()
+ inc
+end
+
+def fun_l29_n290()
+ inc
+end
+
+def fun_l29_n291()
+ inc
+end
+
+def fun_l29_n292()
+ inc
+end
+
+def fun_l29_n293()
+ inc
+end
+
+def fun_l29_n294()
+ inc
+end
+
+def fun_l29_n295()
+ inc
+end
+
+def fun_l29_n296()
+ inc
+end
+
+def fun_l29_n297()
+ inc
+end
+
+def fun_l29_n298()
+ inc
+end
+
+def fun_l29_n299()
+ inc
+end
+
+def fun_l29_n300()
+ inc
+end
+
+def fun_l29_n301()
+ inc
+end
+
+def fun_l29_n302()
+ inc
+end
+
+def fun_l29_n303()
+ inc
+end
+
+def fun_l29_n304()
+ inc
+end
+
+def fun_l29_n305()
+ inc
+end
+
+def fun_l29_n306()
+ inc
+end
+
+def fun_l29_n307()
+ inc
+end
+
+def fun_l29_n308()
+ inc
+end
+
+def fun_l29_n309()
+ inc
+end
+
+def fun_l29_n310()
+ inc
+end
+
+def fun_l29_n311()
+ inc
+end
+
+def fun_l29_n312()
+ inc
+end
+
+def fun_l29_n313()
+ inc
+end
+
+def fun_l29_n314()
+ inc
+end
+
+def fun_l29_n315()
+ inc
+end
+
+def fun_l29_n316()
+ inc
+end
+
+def fun_l29_n317()
+ inc
+end
+
+def fun_l29_n318()
+ inc
+end
+
+def fun_l29_n319()
+ inc
+end
+
+def fun_l29_n320()
+ inc
+end
+
+def fun_l29_n321()
+ inc
+end
+
+def fun_l29_n322()
+ inc
+end
+
+def fun_l29_n323()
+ inc
+end
+
+def fun_l29_n324()
+ inc
+end
+
+def fun_l29_n325()
+ inc
+end
+
+def fun_l29_n326()
+ inc
+end
+
+def fun_l29_n327()
+ inc
+end
+
+def fun_l29_n328()
+ inc
+end
+
+def fun_l29_n329()
+ inc
+end
+
+def fun_l29_n330()
+ inc
+end
+
+def fun_l29_n331()
+ inc
+end
+
+def fun_l29_n332()
+ inc
+end
+
+def fun_l29_n333()
+ inc
+end
+
+def fun_l29_n334()
+ inc
+end
+
+def fun_l29_n335()
+ inc
+end
+
+def fun_l29_n336()
+ inc
+end
+
+def fun_l29_n337()
+ inc
+end
+
+def fun_l29_n338()
+ inc
+end
+
+def fun_l29_n339()
+ inc
+end
+
+def fun_l29_n340()
+ inc
+end
+
+def fun_l29_n341()
+ inc
+end
+
+def fun_l29_n342()
+ inc
+end
+
+def fun_l29_n343()
+ inc
+end
+
+def fun_l29_n344()
+ inc
+end
+
+def fun_l29_n345()
+ inc
+end
+
+def fun_l29_n346()
+ inc
+end
+
+def fun_l29_n347()
+ inc
+end
+
+def fun_l29_n348()
+ inc
+end
+
+def fun_l29_n349()
+ inc
+end
+
+def fun_l29_n350()
+ inc
+end
+
+def fun_l29_n351()
+ inc
+end
+
+def fun_l29_n352()
+ inc
+end
+
+def fun_l29_n353()
+ inc
+end
+
+def fun_l29_n354()
+ inc
+end
+
+def fun_l29_n355()
+ inc
+end
+
+def fun_l29_n356()
+ inc
+end
+
+def fun_l29_n357()
+ inc
+end
+
+def fun_l29_n358()
+ inc
+end
+
+def fun_l29_n359()
+ inc
+end
+
+def fun_l29_n360()
+ inc
+end
+
+def fun_l29_n361()
+ inc
+end
+
+def fun_l29_n362()
+ inc
+end
+
+def fun_l29_n363()
+ inc
+end
+
+def fun_l29_n364()
+ inc
+end
+
+def fun_l29_n365()
+ inc
+end
+
+def fun_l29_n366()
+ inc
+end
+
+def fun_l29_n367()
+ inc
+end
+
+def fun_l29_n368()
+ inc
+end
+
+def fun_l29_n369()
+ inc
+end
+
+def fun_l29_n370()
+ inc
+end
+
+def fun_l29_n371()
+ inc
+end
+
+def fun_l29_n372()
+ inc
+end
+
+def fun_l29_n373()
+ inc
+end
+
+def fun_l29_n374()
+ inc
+end
+
+def fun_l29_n375()
+ inc
+end
+
+def fun_l29_n376()
+ inc
+end
+
+def fun_l29_n377()
+ inc
+end
+
+def fun_l29_n378()
+ inc
+end
+
+def fun_l29_n379()
+ inc
+end
+
+def fun_l29_n380()
+ inc
+end
+
+def fun_l29_n381()
+ inc
+end
+
+def fun_l29_n382()
+ inc
+end
+
+def fun_l29_n383()
+ inc
+end
+
+def fun_l29_n384()
+ inc
+end
+
+def fun_l29_n385()
+ inc
+end
+
+def fun_l29_n386()
+ inc
+end
+
+def fun_l29_n387()
+ inc
+end
+
+def fun_l29_n388()
+ inc
+end
+
+def fun_l29_n389()
+ inc
+end
+
+def fun_l29_n390()
+ inc
+end
+
+def fun_l29_n391()
+ inc
+end
+
+def fun_l29_n392()
+ inc
+end
+
+def fun_l29_n393()
+ inc
+end
+
+def fun_l29_n394()
+ inc
+end
+
+def fun_l29_n395()
+ inc
+end
+
+def fun_l29_n396()
+ inc
+end
+
+def fun_l29_n397()
+ inc
+end
+
+def fun_l29_n398()
+ inc
+end
+
+def fun_l29_n399()
+ inc
+end
+
+def fun_l29_n400()
+ inc
+end
+
+def fun_l29_n401()
+ inc
+end
+
+def fun_l29_n402()
+ inc
+end
+
+def fun_l29_n403()
+ inc
+end
+
+def fun_l29_n404()
+ inc
+end
+
+def fun_l29_n405()
+ inc
+end
+
+def fun_l29_n406()
+ inc
+end
+
+def fun_l29_n407()
+ inc
+end
+
+def fun_l29_n408()
+ inc
+end
+
+def fun_l29_n409()
+ inc
+end
+
+def fun_l29_n410()
+ inc
+end
+
+def fun_l29_n411()
+ inc
+end
+
+def fun_l29_n412()
+ inc
+end
+
+def fun_l29_n413()
+ inc
+end
+
+def fun_l29_n414()
+ inc
+end
+
+def fun_l29_n415()
+ inc
+end
+
+def fun_l29_n416()
+ inc
+end
+
+def fun_l29_n417()
+ inc
+end
+
+def fun_l29_n418()
+ inc
+end
+
+def fun_l29_n419()
+ inc
+end
+
+def fun_l29_n420()
+ inc
+end
+
+def fun_l29_n421()
+ inc
+end
+
+def fun_l29_n422()
+ inc
+end
+
+def fun_l29_n423()
+ inc
+end
+
+def fun_l29_n424()
+ inc
+end
+
+def fun_l29_n425()
+ inc
+end
+
+def fun_l29_n426()
+ inc
+end
+
+def fun_l29_n427()
+ inc
+end
+
+def fun_l29_n428()
+ inc
+end
+
+def fun_l29_n429()
+ inc
+end
+
+def fun_l29_n430()
+ inc
+end
+
+def fun_l29_n431()
+ inc
+end
+
+def fun_l29_n432()
+ inc
+end
+
+def fun_l29_n433()
+ inc
+end
+
+def fun_l29_n434()
+ inc
+end
+
+def fun_l29_n435()
+ inc
+end
+
+def fun_l29_n436()
+ inc
+end
+
+def fun_l29_n437()
+ inc
+end
+
+def fun_l29_n438()
+ inc
+end
+
+def fun_l29_n439()
+ inc
+end
+
+def fun_l29_n440()
+ inc
+end
+
+def fun_l29_n441()
+ inc
+end
+
+def fun_l29_n442()
+ inc
+end
+
+def fun_l29_n443()
+ inc
+end
+
+def fun_l29_n444()
+ inc
+end
+
+def fun_l29_n445()
+ inc
+end
+
+def fun_l29_n446()
+ inc
+end
+
+def fun_l29_n447()
+ inc
+end
+
+def fun_l29_n448()
+ inc
+end
+
+def fun_l29_n449()
+ inc
+end
+
+def fun_l29_n450()
+ inc
+end
+
+def fun_l29_n451()
+ inc
+end
+
+def fun_l29_n452()
+ inc
+end
+
+def fun_l29_n453()
+ inc
+end
+
+def fun_l29_n454()
+ inc
+end
+
+def fun_l29_n455()
+ inc
+end
+
+def fun_l29_n456()
+ inc
+end
+
+def fun_l29_n457()
+ inc
+end
+
+def fun_l29_n458()
+ inc
+end
+
+def fun_l29_n459()
+ inc
+end
+
+def fun_l29_n460()
+ inc
+end
+
+def fun_l29_n461()
+ inc
+end
+
+def fun_l29_n462()
+ inc
+end
+
+def fun_l29_n463()
+ inc
+end
+
+def fun_l29_n464()
+ inc
+end
+
+def fun_l29_n465()
+ inc
+end
+
+def fun_l29_n466()
+ inc
+end
+
+def fun_l29_n467()
+ inc
+end
+
+def fun_l29_n468()
+ inc
+end
+
+def fun_l29_n469()
+ inc
+end
+
+def fun_l29_n470()
+ inc
+end
+
+def fun_l29_n471()
+ inc
+end
+
+def fun_l29_n472()
+ inc
+end
+
+def fun_l29_n473()
+ inc
+end
+
+def fun_l29_n474()
+ inc
+end
+
+def fun_l29_n475()
+ inc
+end
+
+def fun_l29_n476()
+ inc
+end
+
+def fun_l29_n477()
+ inc
+end
+
+def fun_l29_n478()
+ inc
+end
+
+def fun_l29_n479()
+ inc
+end
+
+def fun_l29_n480()
+ inc
+end
+
+def fun_l29_n481()
+ inc
+end
+
+def fun_l29_n482()
+ inc
+end
+
+def fun_l29_n483()
+ inc
+end
+
+def fun_l29_n484()
+ inc
+end
+
+def fun_l29_n485()
+ inc
+end
+
+def fun_l29_n486()
+ inc
+end
+
+def fun_l29_n487()
+ inc
+end
+
+def fun_l29_n488()
+ inc
+end
+
+def fun_l29_n489()
+ inc
+end
+
+def fun_l29_n490()
+ inc
+end
+
+def fun_l29_n491()
+ inc
+end
+
+def fun_l29_n492()
+ inc
+end
+
+def fun_l29_n493()
+ inc
+end
+
+def fun_l29_n494()
+ inc
+end
+
+def fun_l29_n495()
+ inc
+end
+
+def fun_l29_n496()
+ inc
+end
+
+def fun_l29_n497()
+ inc
+end
+
+def fun_l29_n498()
+ inc
+end
+
+def fun_l29_n499()
+ inc
+end
+
+def fun_l29_n500()
+ inc
+end
+
+def fun_l29_n501()
+ inc
+end
+
+def fun_l29_n502()
+ inc
+end
+
+def fun_l29_n503()
+ inc
+end
+
+def fun_l29_n504()
+ inc
+end
+
+def fun_l29_n505()
+ inc
+end
+
+def fun_l29_n506()
+ inc
+end
+
+def fun_l29_n507()
+ inc
+end
+
+def fun_l29_n508()
+ inc
+end
+
+def fun_l29_n509()
+ inc
+end
+
+def fun_l29_n510()
+ inc
+end
+
+def fun_l29_n511()
+ inc
+end
+
+def fun_l29_n512()
+ inc
+end
+
+def fun_l29_n513()
+ inc
+end
+
+def fun_l29_n514()
+ inc
+end
+
+def fun_l29_n515()
+ inc
+end
+
+def fun_l29_n516()
+ inc
+end
+
+def fun_l29_n517()
+ inc
+end
+
+def fun_l29_n518()
+ inc
+end
+
+def fun_l29_n519()
+ inc
+end
+
+def fun_l29_n520()
+ inc
+end
+
+def fun_l29_n521()
+ inc
+end
+
+def fun_l29_n522()
+ inc
+end
+
+def fun_l29_n523()
+ inc
+end
+
+def fun_l29_n524()
+ inc
+end
+
+def fun_l29_n525()
+ inc
+end
+
+def fun_l29_n526()
+ inc
+end
+
+def fun_l29_n527()
+ inc
+end
+
+def fun_l29_n528()
+ inc
+end
+
+def fun_l29_n529()
+ inc
+end
+
+def fun_l29_n530()
+ inc
+end
+
+def fun_l29_n531()
+ inc
+end
+
+def fun_l29_n532()
+ inc
+end
+
+def fun_l29_n533()
+ inc
+end
+
+def fun_l29_n534()
+ inc
+end
+
+def fun_l29_n535()
+ inc
+end
+
+def fun_l29_n536()
+ inc
+end
+
+def fun_l29_n537()
+ inc
+end
+
+def fun_l29_n538()
+ inc
+end
+
+def fun_l29_n539()
+ inc
+end
+
+def fun_l29_n540()
+ inc
+end
+
+def fun_l29_n541()
+ inc
+end
+
+def fun_l29_n542()
+ inc
+end
+
+def fun_l29_n543()
+ inc
+end
+
+def fun_l29_n544()
+ inc
+end
+
+def fun_l29_n545()
+ inc
+end
+
+def fun_l29_n546()
+ inc
+end
+
+def fun_l29_n547()
+ inc
+end
+
+def fun_l29_n548()
+ inc
+end
+
+def fun_l29_n549()
+ inc
+end
+
+def fun_l29_n550()
+ inc
+end
+
+def fun_l29_n551()
+ inc
+end
+
+def fun_l29_n552()
+ inc
+end
+
+def fun_l29_n553()
+ inc
+end
+
+def fun_l29_n554()
+ inc
+end
+
+def fun_l29_n555()
+ inc
+end
+
+def fun_l29_n556()
+ inc
+end
+
+def fun_l29_n557()
+ inc
+end
+
+def fun_l29_n558()
+ inc
+end
+
+def fun_l29_n559()
+ inc
+end
+
+def fun_l29_n560()
+ inc
+end
+
+def fun_l29_n561()
+ inc
+end
+
+def fun_l29_n562()
+ inc
+end
+
+def fun_l29_n563()
+ inc
+end
+
+def fun_l29_n564()
+ inc
+end
+
+def fun_l29_n565()
+ inc
+end
+
+def fun_l29_n566()
+ inc
+end
+
+def fun_l29_n567()
+ inc
+end
+
+def fun_l29_n568()
+ inc
+end
+
+def fun_l29_n569()
+ inc
+end
+
+def fun_l29_n570()
+ inc
+end
+
+def fun_l29_n571()
+ inc
+end
+
+def fun_l29_n572()
+ inc
+end
+
+def fun_l29_n573()
+ inc
+end
+
+def fun_l29_n574()
+ inc
+end
+
+def fun_l29_n575()
+ inc
+end
+
+def fun_l29_n576()
+ inc
+end
+
+def fun_l29_n577()
+ inc
+end
+
+def fun_l29_n578()
+ inc
+end
+
+def fun_l29_n579()
+ inc
+end
+
+def fun_l29_n580()
+ inc
+end
+
+def fun_l29_n581()
+ inc
+end
+
+def fun_l29_n582()
+ inc
+end
+
+def fun_l29_n583()
+ inc
+end
+
+def fun_l29_n584()
+ inc
+end
+
+def fun_l29_n585()
+ inc
+end
+
+def fun_l29_n586()
+ inc
+end
+
+def fun_l29_n587()
+ inc
+end
+
+def fun_l29_n588()
+ inc
+end
+
+def fun_l29_n589()
+ inc
+end
+
+def fun_l29_n590()
+ inc
+end
+
+def fun_l29_n591()
+ inc
+end
+
+def fun_l29_n592()
+ inc
+end
+
+def fun_l29_n593()
+ inc
+end
+
+def fun_l29_n594()
+ inc
+end
+
+def fun_l29_n595()
+ inc
+end
+
+def fun_l29_n596()
+ inc
+end
+
+def fun_l29_n597()
+ inc
+end
+
+def fun_l29_n598()
+ inc
+end
+
+def fun_l29_n599()
+ inc
+end
+
+def fun_l29_n600()
+ inc
+end
+
+def fun_l29_n601()
+ inc
+end
+
+def fun_l29_n602()
+ inc
+end
+
+def fun_l29_n603()
+ inc
+end
+
+def fun_l29_n604()
+ inc
+end
+
+def fun_l29_n605()
+ inc
+end
+
+def fun_l29_n606()
+ inc
+end
+
+def fun_l29_n607()
+ inc
+end
+
+def fun_l29_n608()
+ inc
+end
+
+def fun_l29_n609()
+ inc
+end
+
+def fun_l29_n610()
+ inc
+end
+
+def fun_l29_n611()
+ inc
+end
+
+def fun_l29_n612()
+ inc
+end
+
+def fun_l29_n613()
+ inc
+end
+
+def fun_l29_n614()
+ inc
+end
+
+def fun_l29_n615()
+ inc
+end
+
+def fun_l29_n616()
+ inc
+end
+
+def fun_l29_n617()
+ inc
+end
+
+def fun_l29_n618()
+ inc
+end
+
+def fun_l29_n619()
+ inc
+end
+
+def fun_l29_n620()
+ inc
+end
+
+def fun_l29_n621()
+ inc
+end
+
+def fun_l29_n622()
+ inc
+end
+
+def fun_l29_n623()
+ inc
+end
+
+def fun_l29_n624()
+ inc
+end
+
+def fun_l29_n625()
+ inc
+end
+
+def fun_l29_n626()
+ inc
+end
+
+def fun_l29_n627()
+ inc
+end
+
+def fun_l29_n628()
+ inc
+end
+
+def fun_l29_n629()
+ inc
+end
+
+def fun_l29_n630()
+ inc
+end
+
+def fun_l29_n631()
+ inc
+end
+
+def fun_l29_n632()
+ inc
+end
+
+def fun_l29_n633()
+ inc
+end
+
+def fun_l29_n634()
+ inc
+end
+
+def fun_l29_n635()
+ inc
+end
+
+def fun_l29_n636()
+ inc
+end
+
+def fun_l29_n637()
+ inc
+end
+
+def fun_l29_n638()
+ inc
+end
+
+def fun_l29_n639()
+ inc
+end
+
+def fun_l29_n640()
+ inc
+end
+
+def fun_l29_n641()
+ inc
+end
+
+def fun_l29_n642()
+ inc
+end
+
+def fun_l29_n643()
+ inc
+end
+
+def fun_l29_n644()
+ inc
+end
+
+def fun_l29_n645()
+ inc
+end
+
+def fun_l29_n646()
+ inc
+end
+
+def fun_l29_n647()
+ inc
+end
+
+def fun_l29_n648()
+ inc
+end
+
+def fun_l29_n649()
+ inc
+end
+
+def fun_l29_n650()
+ inc
+end
+
+def fun_l29_n651()
+ inc
+end
+
+def fun_l29_n652()
+ inc
+end
+
+def fun_l29_n653()
+ inc
+end
+
+def fun_l29_n654()
+ inc
+end
+
+def fun_l29_n655()
+ inc
+end
+
+def fun_l29_n656()
+ inc
+end
+
+def fun_l29_n657()
+ inc
+end
+
+def fun_l29_n658()
+ inc
+end
+
+def fun_l29_n659()
+ inc
+end
+
+def fun_l29_n660()
+ inc
+end
+
+def fun_l29_n661()
+ inc
+end
+
+def fun_l29_n662()
+ inc
+end
+
+def fun_l29_n663()
+ inc
+end
+
+def fun_l29_n664()
+ inc
+end
+
+def fun_l29_n665()
+ inc
+end
+
+def fun_l29_n666()
+ inc
+end
+
+def fun_l29_n667()
+ inc
+end
+
+def fun_l29_n668()
+ inc
+end
+
+def fun_l29_n669()
+ inc
+end
+
+def fun_l29_n670()
+ inc
+end
+
+def fun_l29_n671()
+ inc
+end
+
+def fun_l29_n672()
+ inc
+end
+
+def fun_l29_n673()
+ inc
+end
+
+def fun_l29_n674()
+ inc
+end
+
+def fun_l29_n675()
+ inc
+end
+
+def fun_l29_n676()
+ inc
+end
+
+def fun_l29_n677()
+ inc
+end
+
+def fun_l29_n678()
+ inc
+end
+
+def fun_l29_n679()
+ inc
+end
+
+def fun_l29_n680()
+ inc
+end
+
+def fun_l29_n681()
+ inc
+end
+
+def fun_l29_n682()
+ inc
+end
+
+def fun_l29_n683()
+ inc
+end
+
+def fun_l29_n684()
+ inc
+end
+
+def fun_l29_n685()
+ inc
+end
+
+def fun_l29_n686()
+ inc
+end
+
+def fun_l29_n687()
+ inc
+end
+
+def fun_l29_n688()
+ inc
+end
+
+def fun_l29_n689()
+ inc
+end
+
+def fun_l29_n690()
+ inc
+end
+
+def fun_l29_n691()
+ inc
+end
+
+def fun_l29_n692()
+ inc
+end
+
+def fun_l29_n693()
+ inc
+end
+
+def fun_l29_n694()
+ inc
+end
+
+def fun_l29_n695()
+ inc
+end
+
+def fun_l29_n696()
+ inc
+end
+
+def fun_l29_n697()
+ inc
+end
+
+def fun_l29_n698()
+ inc
+end
+
+def fun_l29_n699()
+ inc
+end
+
+def fun_l29_n700()
+ inc
+end
+
+def fun_l29_n701()
+ inc
+end
+
+def fun_l29_n702()
+ inc
+end
+
+def fun_l29_n703()
+ inc
+end
+
+def fun_l29_n704()
+ inc
+end
+
+def fun_l29_n705()
+ inc
+end
+
+def fun_l29_n706()
+ inc
+end
+
+def fun_l29_n707()
+ inc
+end
+
+def fun_l29_n708()
+ inc
+end
+
+def fun_l29_n709()
+ inc
+end
+
+def fun_l29_n710()
+ inc
+end
+
+def fun_l29_n711()
+ inc
+end
+
+def fun_l29_n712()
+ inc
+end
+
+def fun_l29_n713()
+ inc
+end
+
+def fun_l29_n714()
+ inc
+end
+
+def fun_l29_n715()
+ inc
+end
+
+def fun_l29_n716()
+ inc
+end
+
+def fun_l29_n717()
+ inc
+end
+
+def fun_l29_n718()
+ inc
+end
+
+def fun_l29_n719()
+ inc
+end
+
+def fun_l29_n720()
+ inc
+end
+
+def fun_l29_n721()
+ inc
+end
+
+def fun_l29_n722()
+ inc
+end
+
+def fun_l29_n723()
+ inc
+end
+
+def fun_l29_n724()
+ inc
+end
+
+def fun_l29_n725()
+ inc
+end
+
+def fun_l29_n726()
+ inc
+end
+
+def fun_l29_n727()
+ inc
+end
+
+def fun_l29_n728()
+ inc
+end
+
+def fun_l29_n729()
+ inc
+end
+
+def fun_l29_n730()
+ inc
+end
+
+def fun_l29_n731()
+ inc
+end
+
+def fun_l29_n732()
+ inc
+end
+
+def fun_l29_n733()
+ inc
+end
+
+def fun_l29_n734()
+ inc
+end
+
+def fun_l29_n735()
+ inc
+end
+
+def fun_l29_n736()
+ inc
+end
+
+def fun_l29_n737()
+ inc
+end
+
+def fun_l29_n738()
+ inc
+end
+
+def fun_l29_n739()
+ inc
+end
+
+def fun_l29_n740()
+ inc
+end
+
+def fun_l29_n741()
+ inc
+end
+
+def fun_l29_n742()
+ inc
+end
+
+def fun_l29_n743()
+ inc
+end
+
+def fun_l29_n744()
+ inc
+end
+
+def fun_l29_n745()
+ inc
+end
+
+def fun_l29_n746()
+ inc
+end
+
+def fun_l29_n747()
+ inc
+end
+
+def fun_l29_n748()
+ inc
+end
+
+def fun_l29_n749()
+ inc
+end
+
+def fun_l29_n750()
+ inc
+end
+
+def fun_l29_n751()
+ inc
+end
+
+def fun_l29_n752()
+ inc
+end
+
+def fun_l29_n753()
+ inc
+end
+
+def fun_l29_n754()
+ inc
+end
+
+def fun_l29_n755()
+ inc
+end
+
+def fun_l29_n756()
+ inc
+end
+
+def fun_l29_n757()
+ inc
+end
+
+def fun_l29_n758()
+ inc
+end
+
+def fun_l29_n759()
+ inc
+end
+
+def fun_l29_n760()
+ inc
+end
+
+def fun_l29_n761()
+ inc
+end
+
+def fun_l29_n762()
+ inc
+end
+
+def fun_l29_n763()
+ inc
+end
+
+def fun_l29_n764()
+ inc
+end
+
+def fun_l29_n765()
+ inc
+end
+
+def fun_l29_n766()
+ inc
+end
+
+def fun_l29_n767()
+ inc
+end
+
+def fun_l29_n768()
+ inc
+end
+
+def fun_l29_n769()
+ inc
+end
+
+def fun_l29_n770()
+ inc
+end
+
+def fun_l29_n771()
+ inc
+end
+
+def fun_l29_n772()
+ inc
+end
+
+def fun_l29_n773()
+ inc
+end
+
+def fun_l29_n774()
+ inc
+end
+
+def fun_l29_n775()
+ inc
+end
+
+def fun_l29_n776()
+ inc
+end
+
+def fun_l29_n777()
+ inc
+end
+
+def fun_l29_n778()
+ inc
+end
+
+def fun_l29_n779()
+ inc
+end
+
+def fun_l29_n780()
+ inc
+end
+
+def fun_l29_n781()
+ inc
+end
+
+def fun_l29_n782()
+ inc
+end
+
+def fun_l29_n783()
+ inc
+end
+
+def fun_l29_n784()
+ inc
+end
+
+def fun_l29_n785()
+ inc
+end
+
+def fun_l29_n786()
+ inc
+end
+
+def fun_l29_n787()
+ inc
+end
+
+def fun_l29_n788()
+ inc
+end
+
+def fun_l29_n789()
+ inc
+end
+
+def fun_l29_n790()
+ inc
+end
+
+def fun_l29_n791()
+ inc
+end
+
+def fun_l29_n792()
+ inc
+end
+
+def fun_l29_n793()
+ inc
+end
+
+def fun_l29_n794()
+ inc
+end
+
+def fun_l29_n795()
+ inc
+end
+
+def fun_l29_n796()
+ inc
+end
+
+def fun_l29_n797()
+ inc
+end
+
+def fun_l29_n798()
+ inc
+end
+
+def fun_l29_n799()
+ inc
+end
+
+def fun_l29_n800()
+ inc
+end
+
+def fun_l29_n801()
+ inc
+end
+
+def fun_l29_n802()
+ inc
+end
+
+def fun_l29_n803()
+ inc
+end
+
+def fun_l29_n804()
+ inc
+end
+
+def fun_l29_n805()
+ inc
+end
+
+def fun_l29_n806()
+ inc
+end
+
+def fun_l29_n807()
+ inc
+end
+
+def fun_l29_n808()
+ inc
+end
+
+def fun_l29_n809()
+ inc
+end
+
+def fun_l29_n810()
+ inc
+end
+
+def fun_l29_n811()
+ inc
+end
+
+def fun_l29_n812()
+ inc
+end
+
+def fun_l29_n813()
+ inc
+end
+
+def fun_l29_n814()
+ inc
+end
+
+def fun_l29_n815()
+ inc
+end
+
+def fun_l29_n816()
+ inc
+end
+
+def fun_l29_n817()
+ inc
+end
+
+def fun_l29_n818()
+ inc
+end
+
+def fun_l29_n819()
+ inc
+end
+
+def fun_l29_n820()
+ inc
+end
+
+def fun_l29_n821()
+ inc
+end
+
+def fun_l29_n822()
+ inc
+end
+
+def fun_l29_n823()
+ inc
+end
+
+def fun_l29_n824()
+ inc
+end
+
+def fun_l29_n825()
+ inc
+end
+
+def fun_l29_n826()
+ inc
+end
+
+def fun_l29_n827()
+ inc
+end
+
+def fun_l29_n828()
+ inc
+end
+
+def fun_l29_n829()
+ inc
+end
+
+def fun_l29_n830()
+ inc
+end
+
+def fun_l29_n831()
+ inc
+end
+
+def fun_l29_n832()
+ inc
+end
+
+def fun_l29_n833()
+ inc
+end
+
+def fun_l29_n834()
+ inc
+end
+
+def fun_l29_n835()
+ inc
+end
+
+def fun_l29_n836()
+ inc
+end
+
+def fun_l29_n837()
+ inc
+end
+
+def fun_l29_n838()
+ inc
+end
+
+def fun_l29_n839()
+ inc
+end
+
+def fun_l29_n840()
+ inc
+end
+
+def fun_l29_n841()
+ inc
+end
+
+def fun_l29_n842()
+ inc
+end
+
+def fun_l29_n843()
+ inc
+end
+
+def fun_l29_n844()
+ inc
+end
+
+def fun_l29_n845()
+ inc
+end
+
+def fun_l29_n846()
+ inc
+end
+
+def fun_l29_n847()
+ inc
+end
+
+def fun_l29_n848()
+ inc
+end
+
+def fun_l29_n849()
+ inc
+end
+
+def fun_l29_n850()
+ inc
+end
+
+def fun_l29_n851()
+ inc
+end
+
+def fun_l29_n852()
+ inc
+end
+
+def fun_l29_n853()
+ inc
+end
+
+def fun_l29_n854()
+ inc
+end
+
+def fun_l29_n855()
+ inc
+end
+
+def fun_l29_n856()
+ inc
+end
+
+def fun_l29_n857()
+ inc
+end
+
+def fun_l29_n858()
+ inc
+end
+
+def fun_l29_n859()
+ inc
+end
+
+def fun_l29_n860()
+ inc
+end
+
+def fun_l29_n861()
+ inc
+end
+
+def fun_l29_n862()
+ inc
+end
+
+def fun_l29_n863()
+ inc
+end
+
+def fun_l29_n864()
+ inc
+end
+
+def fun_l29_n865()
+ inc
+end
+
+def fun_l29_n866()
+ inc
+end
+
+def fun_l29_n867()
+ inc
+end
+
+def fun_l29_n868()
+ inc
+end
+
+def fun_l29_n869()
+ inc
+end
+
+def fun_l29_n870()
+ inc
+end
+
+def fun_l29_n871()
+ inc
+end
+
+def fun_l29_n872()
+ inc
+end
+
+def fun_l29_n873()
+ inc
+end
+
+def fun_l29_n874()
+ inc
+end
+
+def fun_l29_n875()
+ inc
+end
+
+def fun_l29_n876()
+ inc
+end
+
+def fun_l29_n877()
+ inc
+end
+
+def fun_l29_n878()
+ inc
+end
+
+def fun_l29_n879()
+ inc
+end
+
+def fun_l29_n880()
+ inc
+end
+
+def fun_l29_n881()
+ inc
+end
+
+def fun_l29_n882()
+ inc
+end
+
+def fun_l29_n883()
+ inc
+end
+
+def fun_l29_n884()
+ inc
+end
+
+def fun_l29_n885()
+ inc
+end
+
+def fun_l29_n886()
+ inc
+end
+
+def fun_l29_n887()
+ inc
+end
+
+def fun_l29_n888()
+ inc
+end
+
+def fun_l29_n889()
+ inc
+end
+
+def fun_l29_n890()
+ inc
+end
+
+def fun_l29_n891()
+ inc
+end
+
+def fun_l29_n892()
+ inc
+end
+
+def fun_l29_n893()
+ inc
+end
+
+def fun_l29_n894()
+ inc
+end
+
+def fun_l29_n895()
+ inc
+end
+
+def fun_l29_n896()
+ inc
+end
+
+def fun_l29_n897()
+ inc
+end
+
+def fun_l29_n898()
+ inc
+end
+
+def fun_l29_n899()
+ inc
+end
+
+def fun_l29_n900()
+ inc
+end
+
+def fun_l29_n901()
+ inc
+end
+
+def fun_l29_n902()
+ inc
+end
+
+def fun_l29_n903()
+ inc
+end
+
+def fun_l29_n904()
+ inc
+end
+
+def fun_l29_n905()
+ inc
+end
+
+def fun_l29_n906()
+ inc
+end
+
+def fun_l29_n907()
+ inc
+end
+
+def fun_l29_n908()
+ inc
+end
+
+def fun_l29_n909()
+ inc
+end
+
+def fun_l29_n910()
+ inc
+end
+
+def fun_l29_n911()
+ inc
+end
+
+def fun_l29_n912()
+ inc
+end
+
+def fun_l29_n913()
+ inc
+end
+
+def fun_l29_n914()
+ inc
+end
+
+def fun_l29_n915()
+ inc
+end
+
+def fun_l29_n916()
+ inc
+end
+
+def fun_l29_n917()
+ inc
+end
+
+def fun_l29_n918()
+ inc
+end
+
+def fun_l29_n919()
+ inc
+end
+
+def fun_l29_n920()
+ inc
+end
+
+def fun_l29_n921()
+ inc
+end
+
+def fun_l29_n922()
+ inc
+end
+
+def fun_l29_n923()
+ inc
+end
+
+def fun_l29_n924()
+ inc
+end
+
+def fun_l29_n925()
+ inc
+end
+
+def fun_l29_n926()
+ inc
+end
+
+def fun_l29_n927()
+ inc
+end
+
+def fun_l29_n928()
+ inc
+end
+
+def fun_l29_n929()
+ inc
+end
+
+def fun_l29_n930()
+ inc
+end
+
+def fun_l29_n931()
+ inc
+end
+
+def fun_l29_n932()
+ inc
+end
+
+def fun_l29_n933()
+ inc
+end
+
+def fun_l29_n934()
+ inc
+end
+
+def fun_l29_n935()
+ inc
+end
+
+def fun_l29_n936()
+ inc
+end
+
+def fun_l29_n937()
+ inc
+end
+
+def fun_l29_n938()
+ inc
+end
+
+def fun_l29_n939()
+ inc
+end
+
+def fun_l29_n940()
+ inc
+end
+
+def fun_l29_n941()
+ inc
+end
+
+def fun_l29_n942()
+ inc
+end
+
+def fun_l29_n943()
+ inc
+end
+
+def fun_l29_n944()
+ inc
+end
+
+def fun_l29_n945()
+ inc
+end
+
+def fun_l29_n946()
+ inc
+end
+
+def fun_l29_n947()
+ inc
+end
+
+def fun_l29_n948()
+ inc
+end
+
+def fun_l29_n949()
+ inc
+end
+
+def fun_l29_n950()
+ inc
+end
+
+def fun_l29_n951()
+ inc
+end
+
+def fun_l29_n952()
+ inc
+end
+
+def fun_l29_n953()
+ inc
+end
+
+def fun_l29_n954()
+ inc
+end
+
+def fun_l29_n955()
+ inc
+end
+
+def fun_l29_n956()
+ inc
+end
+
+def fun_l29_n957()
+ inc
+end
+
+def fun_l29_n958()
+ inc
+end
+
+def fun_l29_n959()
+ inc
+end
+
+def fun_l29_n960()
+ inc
+end
+
+def fun_l29_n961()
+ inc
+end
+
+def fun_l29_n962()
+ inc
+end
+
+def fun_l29_n963()
+ inc
+end
+
+def fun_l29_n964()
+ inc
+end
+
+def fun_l29_n965()
+ inc
+end
+
+def fun_l29_n966()
+ inc
+end
+
+def fun_l29_n967()
+ inc
+end
+
+def fun_l29_n968()
+ inc
+end
+
+def fun_l29_n969()
+ inc
+end
+
+def fun_l29_n970()
+ inc
+end
+
+def fun_l29_n971()
+ inc
+end
+
+def fun_l29_n972()
+ inc
+end
+
+def fun_l29_n973()
+ inc
+end
+
+def fun_l29_n974()
+ inc
+end
+
+def fun_l29_n975()
+ inc
+end
+
+def fun_l29_n976()
+ inc
+end
+
+def fun_l29_n977()
+ inc
+end
+
+def fun_l29_n978()
+ inc
+end
+
+def fun_l29_n979()
+ inc
+end
+
+def fun_l29_n980()
+ inc
+end
+
+def fun_l29_n981()
+ inc
+end
+
+def fun_l29_n982()
+ inc
+end
+
+def fun_l29_n983()
+ inc
+end
+
+def fun_l29_n984()
+ inc
+end
+
+def fun_l29_n985()
+ inc
+end
+
+def fun_l29_n986()
+ inc
+end
+
+def fun_l29_n987()
+ inc
+end
+
+def fun_l29_n988()
+ inc
+end
+
+def fun_l29_n989()
+ inc
+end
+
+def fun_l29_n990()
+ inc
+end
+
+def fun_l29_n991()
+ inc
+end
+
+def fun_l29_n992()
+ inc
+end
+
+def fun_l29_n993()
+ inc
+end
+
+def fun_l29_n994()
+ inc
+end
+
+def fun_l29_n995()
+ inc
+end
+
+def fun_l29_n996()
+ inc
+end
+
+def fun_l29_n997()
+ inc
+end
+
+def fun_l29_n998()
+ inc
+end
+
+def fun_l29_n999()
+ inc
+end
+
+@a = 0
+@b = 0
+@c = 0
+@d = 0
+@count = 0
+def inc()
+ @count += 1
+end
+1000.times do
+ fun_l0_n0
+ fun_l0_n1
+ fun_l0_n2
+ fun_l0_n3
+ fun_l0_n4
+ fun_l0_n5
+ fun_l0_n6
+ fun_l0_n7
+ fun_l0_n8
+ fun_l0_n9
+ fun_l0_n10
+ fun_l0_n11
+ fun_l0_n12
+ fun_l0_n13
+ fun_l0_n14
+ fun_l0_n15
+ fun_l0_n16
+ fun_l0_n17
+ fun_l0_n18
+ fun_l0_n19
+ fun_l0_n20
+ fun_l0_n21
+ fun_l0_n22
+ fun_l0_n23
+ fun_l0_n24
+ fun_l0_n25
+ fun_l0_n26
+ fun_l0_n27
+ fun_l0_n28
+ fun_l0_n29
+ fun_l0_n30
+ fun_l0_n31
+ fun_l0_n32
+ fun_l0_n33
+ fun_l0_n34
+ fun_l0_n35
+ fun_l0_n36
+ fun_l0_n37
+ fun_l0_n38
+ fun_l0_n39
+ fun_l0_n40
+ fun_l0_n41
+ fun_l0_n42
+ fun_l0_n43
+ fun_l0_n44
+ fun_l0_n45
+ fun_l0_n46
+ fun_l0_n47
+ fun_l0_n48
+ fun_l0_n49
+ fun_l0_n50
+ fun_l0_n51
+ fun_l0_n52
+ fun_l0_n53
+ fun_l0_n54
+ fun_l0_n55
+ fun_l0_n56
+ fun_l0_n57
+ fun_l0_n58
+ fun_l0_n59
+ fun_l0_n60
+ fun_l0_n61
+ fun_l0_n62
+ fun_l0_n63
+ fun_l0_n64
+ fun_l0_n65
+ fun_l0_n66
+ fun_l0_n67
+ fun_l0_n68
+ fun_l0_n69
+ fun_l0_n70
+ fun_l0_n71
+ fun_l0_n72
+ fun_l0_n73
+ fun_l0_n74
+ fun_l0_n75
+ fun_l0_n76
+ fun_l0_n77
+ fun_l0_n78
+ fun_l0_n79
+ fun_l0_n80
+ fun_l0_n81
+ fun_l0_n82
+ fun_l0_n83
+ fun_l0_n84
+ fun_l0_n85
+ fun_l0_n86
+ fun_l0_n87
+ fun_l0_n88
+ fun_l0_n89
+ fun_l0_n90
+ fun_l0_n91
+ fun_l0_n92
+ fun_l0_n93
+ fun_l0_n94
+ fun_l0_n95
+ fun_l0_n96
+ fun_l0_n97
+ fun_l0_n98
+ fun_l0_n99
+ fun_l0_n100
+ fun_l0_n101
+ fun_l0_n102
+ fun_l0_n103
+ fun_l0_n104
+ fun_l0_n105
+ fun_l0_n106
+ fun_l0_n107
+ fun_l0_n108
+ fun_l0_n109
+ fun_l0_n110
+ fun_l0_n111
+ fun_l0_n112
+ fun_l0_n113
+ fun_l0_n114
+ fun_l0_n115
+ fun_l0_n116
+ fun_l0_n117
+ fun_l0_n118
+ fun_l0_n119
+ fun_l0_n120
+ fun_l0_n121
+ fun_l0_n122
+ fun_l0_n123
+ fun_l0_n124
+ fun_l0_n125
+ fun_l0_n126
+ fun_l0_n127
+ fun_l0_n128
+ fun_l0_n129
+ fun_l0_n130
+ fun_l0_n131
+ fun_l0_n132
+ fun_l0_n133
+ fun_l0_n134
+ fun_l0_n135
+ fun_l0_n136
+ fun_l0_n137
+ fun_l0_n138
+ fun_l0_n139
+ fun_l0_n140
+ fun_l0_n141
+ fun_l0_n142
+ fun_l0_n143
+ fun_l0_n144
+ fun_l0_n145
+ fun_l0_n146
+ fun_l0_n147
+ fun_l0_n148
+ fun_l0_n149
+ fun_l0_n150
+ fun_l0_n151
+ fun_l0_n152
+ fun_l0_n153
+ fun_l0_n154
+ fun_l0_n155
+ fun_l0_n156
+ fun_l0_n157
+ fun_l0_n158
+ fun_l0_n159
+ fun_l0_n160
+ fun_l0_n161
+ fun_l0_n162
+ fun_l0_n163
+ fun_l0_n164
+ fun_l0_n165
+ fun_l0_n166
+ fun_l0_n167
+ fun_l0_n168
+ fun_l0_n169
+ fun_l0_n170
+ fun_l0_n171
+ fun_l0_n172
+ fun_l0_n173
+ fun_l0_n174
+ fun_l0_n175
+ fun_l0_n176
+ fun_l0_n177
+ fun_l0_n178
+ fun_l0_n179
+ fun_l0_n180
+ fun_l0_n181
+ fun_l0_n182
+ fun_l0_n183
+ fun_l0_n184
+ fun_l0_n185
+ fun_l0_n186
+ fun_l0_n187
+ fun_l0_n188
+ fun_l0_n189
+ fun_l0_n190
+ fun_l0_n191
+ fun_l0_n192
+ fun_l0_n193
+ fun_l0_n194
+ fun_l0_n195
+ fun_l0_n196
+ fun_l0_n197
+ fun_l0_n198
+ fun_l0_n199
+ fun_l0_n200
+ fun_l0_n201
+ fun_l0_n202
+ fun_l0_n203
+ fun_l0_n204
+ fun_l0_n205
+ fun_l0_n206
+ fun_l0_n207
+ fun_l0_n208
+ fun_l0_n209
+ fun_l0_n210
+ fun_l0_n211
+ fun_l0_n212
+ fun_l0_n213
+ fun_l0_n214
+ fun_l0_n215
+ fun_l0_n216
+ fun_l0_n217
+ fun_l0_n218
+ fun_l0_n219
+ fun_l0_n220
+ fun_l0_n221
+ fun_l0_n222
+ fun_l0_n223
+ fun_l0_n224
+ fun_l0_n225
+ fun_l0_n226
+ fun_l0_n227
+ fun_l0_n228
+ fun_l0_n229
+ fun_l0_n230
+ fun_l0_n231
+ fun_l0_n232
+ fun_l0_n233
+ fun_l0_n234
+ fun_l0_n235
+ fun_l0_n236
+ fun_l0_n237
+ fun_l0_n238
+ fun_l0_n239
+ fun_l0_n240
+ fun_l0_n241
+ fun_l0_n242
+ fun_l0_n243
+ fun_l0_n244
+ fun_l0_n245
+ fun_l0_n246
+ fun_l0_n247
+ fun_l0_n248
+ fun_l0_n249
+ fun_l0_n250
+ fun_l0_n251
+ fun_l0_n252
+ fun_l0_n253
+ fun_l0_n254
+ fun_l0_n255
+ fun_l0_n256
+ fun_l0_n257
+ fun_l0_n258
+ fun_l0_n259
+ fun_l0_n260
+ fun_l0_n261
+ fun_l0_n262
+ fun_l0_n263
+ fun_l0_n264
+ fun_l0_n265
+ fun_l0_n266
+ fun_l0_n267
+ fun_l0_n268
+ fun_l0_n269
+ fun_l0_n270
+ fun_l0_n271
+ fun_l0_n272
+ fun_l0_n273
+ fun_l0_n274
+ fun_l0_n275
+ fun_l0_n276
+ fun_l0_n277
+ fun_l0_n278
+ fun_l0_n279
+ fun_l0_n280
+ fun_l0_n281
+ fun_l0_n282
+ fun_l0_n283
+ fun_l0_n284
+ fun_l0_n285
+ fun_l0_n286
+ fun_l0_n287
+ fun_l0_n288
+ fun_l0_n289
+ fun_l0_n290
+ fun_l0_n291
+ fun_l0_n292
+ fun_l0_n293
+ fun_l0_n294
+ fun_l0_n295
+ fun_l0_n296
+ fun_l0_n297
+ fun_l0_n298
+ fun_l0_n299
+ fun_l0_n300
+ fun_l0_n301
+ fun_l0_n302
+ fun_l0_n303
+ fun_l0_n304
+ fun_l0_n305
+ fun_l0_n306
+ fun_l0_n307
+ fun_l0_n308
+ fun_l0_n309
+ fun_l0_n310
+ fun_l0_n311
+ fun_l0_n312
+ fun_l0_n313
+ fun_l0_n314
+ fun_l0_n315
+ fun_l0_n316
+ fun_l0_n317
+ fun_l0_n318
+ fun_l0_n319
+ fun_l0_n320
+ fun_l0_n321
+ fun_l0_n322
+ fun_l0_n323
+ fun_l0_n324
+ fun_l0_n325
+ fun_l0_n326
+ fun_l0_n327
+ fun_l0_n328
+ fun_l0_n329
+ fun_l0_n330
+ fun_l0_n331
+ fun_l0_n332
+ fun_l0_n333
+ fun_l0_n334
+ fun_l0_n335
+ fun_l0_n336
+ fun_l0_n337
+ fun_l0_n338
+ fun_l0_n339
+ fun_l0_n340
+ fun_l0_n341
+ fun_l0_n342
+ fun_l0_n343
+ fun_l0_n344
+ fun_l0_n345
+ fun_l0_n346
+ fun_l0_n347
+ fun_l0_n348
+ fun_l0_n349
+ fun_l0_n350
+ fun_l0_n351
+ fun_l0_n352
+ fun_l0_n353
+ fun_l0_n354
+ fun_l0_n355
+ fun_l0_n356
+ fun_l0_n357
+ fun_l0_n358
+ fun_l0_n359
+ fun_l0_n360
+ fun_l0_n361
+ fun_l0_n362
+ fun_l0_n363
+ fun_l0_n364
+ fun_l0_n365
+ fun_l0_n366
+ fun_l0_n367
+ fun_l0_n368
+ fun_l0_n369
+ fun_l0_n370
+ fun_l0_n371
+ fun_l0_n372
+ fun_l0_n373
+ fun_l0_n374
+ fun_l0_n375
+ fun_l0_n376
+ fun_l0_n377
+ fun_l0_n378
+ fun_l0_n379
+ fun_l0_n380
+ fun_l0_n381
+ fun_l0_n382
+ fun_l0_n383
+ fun_l0_n384
+ fun_l0_n385
+ fun_l0_n386
+ fun_l0_n387
+ fun_l0_n388
+ fun_l0_n389
+ fun_l0_n390
+ fun_l0_n391
+ fun_l0_n392
+ fun_l0_n393
+ fun_l0_n394
+ fun_l0_n395
+ fun_l0_n396
+ fun_l0_n397
+ fun_l0_n398
+ fun_l0_n399
+ fun_l0_n400
+ fun_l0_n401
+ fun_l0_n402
+ fun_l0_n403
+ fun_l0_n404
+ fun_l0_n405
+ fun_l0_n406
+ fun_l0_n407
+ fun_l0_n408
+ fun_l0_n409
+ fun_l0_n410
+ fun_l0_n411
+ fun_l0_n412
+ fun_l0_n413
+ fun_l0_n414
+ fun_l0_n415
+ fun_l0_n416
+ fun_l0_n417
+ fun_l0_n418
+ fun_l0_n419
+ fun_l0_n420
+ fun_l0_n421
+ fun_l0_n422
+ fun_l0_n423
+ fun_l0_n424
+ fun_l0_n425
+ fun_l0_n426
+ fun_l0_n427
+ fun_l0_n428
+ fun_l0_n429
+ fun_l0_n430
+ fun_l0_n431
+ fun_l0_n432
+ fun_l0_n433
+ fun_l0_n434
+ fun_l0_n435
+ fun_l0_n436
+ fun_l0_n437
+ fun_l0_n438
+ fun_l0_n439
+ fun_l0_n440
+ fun_l0_n441
+ fun_l0_n442
+ fun_l0_n443
+ fun_l0_n444
+ fun_l0_n445
+ fun_l0_n446
+ fun_l0_n447
+ fun_l0_n448
+ fun_l0_n449
+ fun_l0_n450
+ fun_l0_n451
+ fun_l0_n452
+ fun_l0_n453
+ fun_l0_n454
+ fun_l0_n455
+ fun_l0_n456
+ fun_l0_n457
+ fun_l0_n458
+ fun_l0_n459
+ fun_l0_n460
+ fun_l0_n461
+ fun_l0_n462
+ fun_l0_n463
+ fun_l0_n464
+ fun_l0_n465
+ fun_l0_n466
+ fun_l0_n467
+ fun_l0_n468
+ fun_l0_n469
+ fun_l0_n470
+ fun_l0_n471
+ fun_l0_n472
+ fun_l0_n473
+ fun_l0_n474
+ fun_l0_n475
+ fun_l0_n476
+ fun_l0_n477
+ fun_l0_n478
+ fun_l0_n479
+ fun_l0_n480
+ fun_l0_n481
+ fun_l0_n482
+ fun_l0_n483
+ fun_l0_n484
+ fun_l0_n485
+ fun_l0_n486
+ fun_l0_n487
+ fun_l0_n488
+ fun_l0_n489
+ fun_l0_n490
+ fun_l0_n491
+ fun_l0_n492
+ fun_l0_n493
+ fun_l0_n494
+ fun_l0_n495
+ fun_l0_n496
+ fun_l0_n497
+ fun_l0_n498
+ fun_l0_n499
+ fun_l0_n500
+ fun_l0_n501
+ fun_l0_n502
+ fun_l0_n503
+ fun_l0_n504
+ fun_l0_n505
+ fun_l0_n506
+ fun_l0_n507
+ fun_l0_n508
+ fun_l0_n509
+ fun_l0_n510
+ fun_l0_n511
+ fun_l0_n512
+ fun_l0_n513
+ fun_l0_n514
+ fun_l0_n515
+ fun_l0_n516
+ fun_l0_n517
+ fun_l0_n518
+ fun_l0_n519
+ fun_l0_n520
+ fun_l0_n521
+ fun_l0_n522
+ fun_l0_n523
+ fun_l0_n524
+ fun_l0_n525
+ fun_l0_n526
+ fun_l0_n527
+ fun_l0_n528
+ fun_l0_n529
+ fun_l0_n530
+ fun_l0_n531
+ fun_l0_n532
+ fun_l0_n533
+ fun_l0_n534
+ fun_l0_n535
+ fun_l0_n536
+ fun_l0_n537
+ fun_l0_n538
+ fun_l0_n539
+ fun_l0_n540
+ fun_l0_n541
+ fun_l0_n542
+ fun_l0_n543
+ fun_l0_n544
+ fun_l0_n545
+ fun_l0_n546
+ fun_l0_n547
+ fun_l0_n548
+ fun_l0_n549
+ fun_l0_n550
+ fun_l0_n551
+ fun_l0_n552
+ fun_l0_n553
+ fun_l0_n554
+ fun_l0_n555
+ fun_l0_n556
+ fun_l0_n557
+ fun_l0_n558
+ fun_l0_n559
+ fun_l0_n560
+ fun_l0_n561
+ fun_l0_n562
+ fun_l0_n563
+ fun_l0_n564
+ fun_l0_n565
+ fun_l0_n566
+ fun_l0_n567
+ fun_l0_n568
+ fun_l0_n569
+ fun_l0_n570
+ fun_l0_n571
+ fun_l0_n572
+ fun_l0_n573
+ fun_l0_n574
+ fun_l0_n575
+ fun_l0_n576
+ fun_l0_n577
+ fun_l0_n578
+ fun_l0_n579
+ fun_l0_n580
+ fun_l0_n581
+ fun_l0_n582
+ fun_l0_n583
+ fun_l0_n584
+ fun_l0_n585
+ fun_l0_n586
+ fun_l0_n587
+ fun_l0_n588
+ fun_l0_n589
+ fun_l0_n590
+ fun_l0_n591
+ fun_l0_n592
+ fun_l0_n593
+ fun_l0_n594
+ fun_l0_n595
+ fun_l0_n596
+ fun_l0_n597
+ fun_l0_n598
+ fun_l0_n599
+ fun_l0_n600
+ fun_l0_n601
+ fun_l0_n602
+ fun_l0_n603
+ fun_l0_n604
+ fun_l0_n605
+ fun_l0_n606
+ fun_l0_n607
+ fun_l0_n608
+ fun_l0_n609
+ fun_l0_n610
+ fun_l0_n611
+ fun_l0_n612
+ fun_l0_n613
+ fun_l0_n614
+ fun_l0_n615
+ fun_l0_n616
+ fun_l0_n617
+ fun_l0_n618
+ fun_l0_n619
+ fun_l0_n620
+ fun_l0_n621
+ fun_l0_n622
+ fun_l0_n623
+ fun_l0_n624
+ fun_l0_n625
+ fun_l0_n626
+ fun_l0_n627
+ fun_l0_n628
+ fun_l0_n629
+ fun_l0_n630
+ fun_l0_n631
+ fun_l0_n632
+ fun_l0_n633
+ fun_l0_n634
+ fun_l0_n635
+ fun_l0_n636
+ fun_l0_n637
+ fun_l0_n638
+ fun_l0_n639
+ fun_l0_n640
+ fun_l0_n641
+ fun_l0_n642
+ fun_l0_n643
+ fun_l0_n644
+ fun_l0_n645
+ fun_l0_n646
+ fun_l0_n647
+ fun_l0_n648
+ fun_l0_n649
+ fun_l0_n650
+ fun_l0_n651
+ fun_l0_n652
+ fun_l0_n653
+ fun_l0_n654
+ fun_l0_n655
+ fun_l0_n656
+ fun_l0_n657
+ fun_l0_n658
+ fun_l0_n659
+ fun_l0_n660
+ fun_l0_n661
+ fun_l0_n662
+ fun_l0_n663
+ fun_l0_n664
+ fun_l0_n665
+ fun_l0_n666
+ fun_l0_n667
+ fun_l0_n668
+ fun_l0_n669
+ fun_l0_n670
+ fun_l0_n671
+ fun_l0_n672
+ fun_l0_n673
+ fun_l0_n674
+ fun_l0_n675
+ fun_l0_n676
+ fun_l0_n677
+ fun_l0_n678
+ fun_l0_n679
+ fun_l0_n680
+ fun_l0_n681
+ fun_l0_n682
+ fun_l0_n683
+ fun_l0_n684
+ fun_l0_n685
+ fun_l0_n686
+ fun_l0_n687
+ fun_l0_n688
+ fun_l0_n689
+ fun_l0_n690
+ fun_l0_n691
+ fun_l0_n692
+ fun_l0_n693
+ fun_l0_n694
+ fun_l0_n695
+ fun_l0_n696
+ fun_l0_n697
+ fun_l0_n698
+ fun_l0_n699
+ fun_l0_n700
+ fun_l0_n701
+ fun_l0_n702
+ fun_l0_n703
+ fun_l0_n704
+ fun_l0_n705
+ fun_l0_n706
+ fun_l0_n707
+ fun_l0_n708
+ fun_l0_n709
+ fun_l0_n710
+ fun_l0_n711
+ fun_l0_n712
+ fun_l0_n713
+ fun_l0_n714
+ fun_l0_n715
+ fun_l0_n716
+ fun_l0_n717
+ fun_l0_n718
+ fun_l0_n719
+ fun_l0_n720
+ fun_l0_n721
+ fun_l0_n722
+ fun_l0_n723
+ fun_l0_n724
+ fun_l0_n725
+ fun_l0_n726
+ fun_l0_n727
+ fun_l0_n728
+ fun_l0_n729
+ fun_l0_n730
+ fun_l0_n731
+ fun_l0_n732
+ fun_l0_n733
+ fun_l0_n734
+ fun_l0_n735
+ fun_l0_n736
+ fun_l0_n737
+ fun_l0_n738
+ fun_l0_n739
+ fun_l0_n740
+ fun_l0_n741
+ fun_l0_n742
+ fun_l0_n743
+ fun_l0_n744
+ fun_l0_n745
+ fun_l0_n746
+ fun_l0_n747
+ fun_l0_n748
+ fun_l0_n749
+ fun_l0_n750
+ fun_l0_n751
+ fun_l0_n752
+ fun_l0_n753
+ fun_l0_n754
+ fun_l0_n755
+ fun_l0_n756
+ fun_l0_n757
+ fun_l0_n758
+ fun_l0_n759
+ fun_l0_n760
+ fun_l0_n761
+ fun_l0_n762
+ fun_l0_n763
+ fun_l0_n764
+ fun_l0_n765
+ fun_l0_n766
+ fun_l0_n767
+ fun_l0_n768
+ fun_l0_n769
+ fun_l0_n770
+ fun_l0_n771
+ fun_l0_n772
+ fun_l0_n773
+ fun_l0_n774
+ fun_l0_n775
+ fun_l0_n776
+ fun_l0_n777
+ fun_l0_n778
+ fun_l0_n779
+ fun_l0_n780
+ fun_l0_n781
+ fun_l0_n782
+ fun_l0_n783
+ fun_l0_n784
+ fun_l0_n785
+ fun_l0_n786
+ fun_l0_n787
+ fun_l0_n788
+ fun_l0_n789
+ fun_l0_n790
+ fun_l0_n791
+ fun_l0_n792
+ fun_l0_n793
+ fun_l0_n794
+ fun_l0_n795
+ fun_l0_n796
+ fun_l0_n797
+ fun_l0_n798
+ fun_l0_n799
+ fun_l0_n800
+ fun_l0_n801
+ fun_l0_n802
+ fun_l0_n803
+ fun_l0_n804
+ fun_l0_n805
+ fun_l0_n806
+ fun_l0_n807
+ fun_l0_n808
+ fun_l0_n809
+ fun_l0_n810
+ fun_l0_n811
+ fun_l0_n812
+ fun_l0_n813
+ fun_l0_n814
+ fun_l0_n815
+ fun_l0_n816
+ fun_l0_n817
+ fun_l0_n818
+ fun_l0_n819
+ fun_l0_n820
+ fun_l0_n821
+ fun_l0_n822
+ fun_l0_n823
+ fun_l0_n824
+ fun_l0_n825
+ fun_l0_n826
+ fun_l0_n827
+ fun_l0_n828
+ fun_l0_n829
+ fun_l0_n830
+ fun_l0_n831
+ fun_l0_n832
+ fun_l0_n833
+ fun_l0_n834
+ fun_l0_n835
+ fun_l0_n836
+ fun_l0_n837
+ fun_l0_n838
+ fun_l0_n839
+ fun_l0_n840
+ fun_l0_n841
+ fun_l0_n842
+ fun_l0_n843
+ fun_l0_n844
+ fun_l0_n845
+ fun_l0_n846
+ fun_l0_n847
+ fun_l0_n848
+ fun_l0_n849
+ fun_l0_n850
+ fun_l0_n851
+ fun_l0_n852
+ fun_l0_n853
+ fun_l0_n854
+ fun_l0_n855
+ fun_l0_n856
+ fun_l0_n857
+ fun_l0_n858
+ fun_l0_n859
+ fun_l0_n860
+ fun_l0_n861
+ fun_l0_n862
+ fun_l0_n863
+ fun_l0_n864
+ fun_l0_n865
+ fun_l0_n866
+ fun_l0_n867
+ fun_l0_n868
+ fun_l0_n869
+ fun_l0_n870
+ fun_l0_n871
+ fun_l0_n872
+ fun_l0_n873
+ fun_l0_n874
+ fun_l0_n875
+ fun_l0_n876
+ fun_l0_n877
+ fun_l0_n878
+ fun_l0_n879
+ fun_l0_n880
+ fun_l0_n881
+ fun_l0_n882
+ fun_l0_n883
+ fun_l0_n884
+ fun_l0_n885
+ fun_l0_n886
+ fun_l0_n887
+ fun_l0_n888
+ fun_l0_n889
+ fun_l0_n890
+ fun_l0_n891
+ fun_l0_n892
+ fun_l0_n893
+ fun_l0_n894
+ fun_l0_n895
+ fun_l0_n896
+ fun_l0_n897
+ fun_l0_n898
+ fun_l0_n899
+ fun_l0_n900
+ fun_l0_n901
+ fun_l0_n902
+ fun_l0_n903
+ fun_l0_n904
+ fun_l0_n905
+ fun_l0_n906
+ fun_l0_n907
+ fun_l0_n908
+ fun_l0_n909
+ fun_l0_n910
+ fun_l0_n911
+ fun_l0_n912
+ fun_l0_n913
+ fun_l0_n914
+ fun_l0_n915
+ fun_l0_n916
+ fun_l0_n917
+ fun_l0_n918
+ fun_l0_n919
+ fun_l0_n920
+ fun_l0_n921
+ fun_l0_n922
+ fun_l0_n923
+ fun_l0_n924
+ fun_l0_n925
+ fun_l0_n926
+ fun_l0_n927
+ fun_l0_n928
+ fun_l0_n929
+ fun_l0_n930
+ fun_l0_n931
+ fun_l0_n932
+ fun_l0_n933
+ fun_l0_n934
+ fun_l0_n935
+ fun_l0_n936
+ fun_l0_n937
+ fun_l0_n938
+ fun_l0_n939
+ fun_l0_n940
+ fun_l0_n941
+ fun_l0_n942
+ fun_l0_n943
+ fun_l0_n944
+ fun_l0_n945
+ fun_l0_n946
+ fun_l0_n947
+ fun_l0_n948
+ fun_l0_n949
+ fun_l0_n950
+ fun_l0_n951
+ fun_l0_n952
+ fun_l0_n953
+ fun_l0_n954
+ fun_l0_n955
+ fun_l0_n956
+ fun_l0_n957
+ fun_l0_n958
+ fun_l0_n959
+ fun_l0_n960
+ fun_l0_n961
+ fun_l0_n962
+ fun_l0_n963
+ fun_l0_n964
+ fun_l0_n965
+ fun_l0_n966
+ fun_l0_n967
+ fun_l0_n968
+ fun_l0_n969
+ fun_l0_n970
+ fun_l0_n971
+ fun_l0_n972
+ fun_l0_n973
+ fun_l0_n974
+ fun_l0_n975
+ fun_l0_n976
+ fun_l0_n977
+ fun_l0_n978
+ fun_l0_n979
+ fun_l0_n980
+ fun_l0_n981
+ fun_l0_n982
+ fun_l0_n983
+ fun_l0_n984
+ fun_l0_n985
+ fun_l0_n986
+ fun_l0_n987
+ fun_l0_n988
+ fun_l0_n989
+ fun_l0_n990
+ fun_l0_n991
+ fun_l0_n992
+ fun_l0_n993
+ fun_l0_n994
+ fun_l0_n995
+ fun_l0_n996
+ fun_l0_n997
+ fun_l0_n998
+ fun_l0_n999
+end
+
+@count
+
+}
diff --git a/bootstraptest/test_yjit_rust_port.rb b/bootstraptest/test_yjit_rust_port.rb
new file mode 100644
index 0000000000..2dbcebc03a
--- /dev/null
+++ b/bootstraptest/test_yjit_rust_port.rb
@@ -0,0 +1,422 @@
+# Simple tests that we know we can pass
+# To keep track of what we got working during the Rust port
+# And avoid breaking/losing functionality
+#
+# Say "Thread" here to dodge WASM CI check. We use ractors here
+# which WASM doesn't support and it only greps for "Thread".
+
+# Test for opt_mod
+assert_equal '2', %q{
+ def mod(a, b)
+ a % b
+ end
+
+ mod(7, 5)
+ mod(7, 5)
+}
+
+# Test for opt_mult
+assert_equal '12', %q{
+ def mult(a, b)
+ a * b
+ end
+
+ mult(6, 2)
+ mult(6, 2)
+}
+
+# Test for opt_div
+assert_equal '3', %q{
+ def div(a, b)
+ a / b
+ end
+
+ div(6, 2)
+ div(6, 2)
+}
+
+assert_equal '5', %q{
+ def plus(a, b)
+ a + b
+ end
+
+ plus(3, 2)
+}
+
+assert_equal '1', %q{
+ def foo(a, b)
+ a - b
+ end
+
+ foo(3, 2)
+}
+
+assert_equal 'true', %q{
+ def foo(a, b)
+ a < b
+ end
+
+ foo(2, 3)
+}
+
+# Bitwise left shift
+assert_equal '4', %q{
+ def foo(a, b)
+ 1 << 2
+ end
+
+ foo(1, 2)
+}
+
+assert_equal '-7', %q{
+ def foo(a, b)
+ -7
+ end
+
+ foo(1, 2)
+}
+
+# Putstring
+assert_equal 'foo', %q{
+ def foo(a, b)
+ "foo"
+ end
+
+ foo(1, 2)
+}
+
+assert_equal '-6', %q{
+ def foo(a, b)
+ a + -7
+ end
+
+ foo(1, 2)
+}
+
+assert_equal 'true', %q{
+ def foo(a, b)
+ a == b
+ end
+
+ foo(3, 3)
+}
+
+assert_equal 'true', %q{
+ def foo(a, b)
+ a < b
+ end
+
+ foo(3, 5)
+}
+
+assert_equal '777', %q{
+ def foo(a)
+ if a
+ 777
+ else
+ 333
+ end
+ end
+
+ foo(true)
+}
+
+assert_equal '5', %q{
+ def foo(a, b)
+ while a < b
+ a += 1
+ end
+ a
+ end
+
+ foo(1, 5)
+}
+
+# opt_aref
+assert_equal '2', %q{
+ def foo(a, b)
+ a[b]
+ end
+
+ foo([0, 1, 2], 2)
+}
+
+# Simple function calls with 0, 1, 2 arguments
+assert_equal '-2', %q{
+ def bar()
+ -2
+ end
+
+ def foo(a, b)
+ bar()
+ end
+
+ foo(3, 2)
+}
+assert_equal '2', %q{
+ def bar(a)
+ a
+ end
+
+ def foo(a, b)
+ bar(b)
+ end
+
+ foo(3, 2)
+}
+assert_equal '1', %q{
+ def bar(a, b)
+ a - b
+ end
+
+ def foo(a, b)
+ bar(a, b)
+ end
+
+ foo(3, 2)
+}
+
+# Regression test for assembler bug
+assert_equal '1', %q{
+ def check_index(index)
+ if 0x40000000 < index
+ return -1
+ end
+ 1
+ end
+
+ check_index 2
+}
+
+# Setivar test
+assert_equal '2', %q{
+ class Klass
+ attr_accessor :a
+
+ def set()
+ @a = 2
+ end
+
+ def get()
+ @a
+ end
+ end
+
+ o = Klass.new
+ o.set()
+ o.a
+}
+
+# Regression for putobject bug
+assert_equal '1.5', %q{
+ def foo(x)
+ x
+ end
+
+ def bar
+ foo(1.5)
+ end
+
+ bar()
+}
+
+# Getivar with an extended ivar table
+assert_equal '3', %q{
+ class Foo
+ def initialize
+ @x1 = 1
+ @x2 = 1
+ @x3 = 1
+ @x4 = 3
+ end
+
+ def bar
+ @x4
+ end
+ end
+
+ f = Foo.new
+ f.bar
+}
+
+assert_equal 'true', %q{
+ x = [[false, true]]
+ for i, j in x
+ ;
+ end
+ j
+}
+
+# Regression for getivar
+assert_equal '[nil]', %q{
+ [TrueClass].each do |klass|
+ klass.class_eval("def foo = @foo")
+ end
+
+ [true].map do |instance|
+ instance.foo
+ end
+}
+
+# Regression for send
+assert_equal 'ok', %q{
+ def bar(baz: 2)
+ baz
+ end
+
+ def foo
+ bar(1, baz: 123)
+ end
+
+ begin
+ foo
+ foo
+ rescue ArgumentError => e
+ print "ok"
+ end
+}
+
+# Array access regression test
+assert_equal '[0, 1, 2, 3, 4, 5]', %q{
+ def expandarray_useless_splat
+ arr = [0, 1, 2, 3, 4, 5]
+ a, * = arr
+ end
+
+ expandarray_useless_splat
+}
+
+# Make sure we're correctly reading RStruct's as.ary union for embedded RStructs
+assert_equal '3,12', %q{
+ pt_struct = Struct.new(:x, :y)
+ p = pt_struct.new(3, 12)
+ def pt_inspect(pt)
+ "#{pt.x},#{pt.y}"
+ end
+
+ # Make sure pt_inspect is JITted
+ 10.times { pt_inspect(p) }
+
+ # Make sure it's returning '3,12' instead of e.g. '3,false'
+ pt_inspect(p)
+}
+
+assert_equal '2', %q{
+ def foo(s)
+ s.foo
+ end
+
+ S = Struct.new(:foo)
+ foo(S.new(1))
+ foo(S.new(2))
+}
+
+# Try to compile new method while OOM
+assert_equal 'ok', %q{
+ def foo
+ :ok
+ end
+
+ RubyVM::YJIT.simulate_oom! if defined?(RubyVM::YJIT)
+
+ foo
+}
+
+# test hitting a branch stub when out of memory
+assert_equal 'ok', %q{
+ def nimai(jita)
+ if jita
+ :ng
+ else
+ :ok
+ end
+ end
+
+ nimai(true)
+ nimai(true)
+
+ RubyVM::YJIT.simulate_oom! if defined?(RubyVM::YJIT)
+
+ nimai(false)
+}
+
+# Ractor.current returns a current ractor
+assert_equal 'Ractor', %q{
+ Ractor.current.class
+}
+
+# Ractor.new returns new Ractor
+assert_equal 'Ractor', %q{
+ Ractor.new{}.class
+}
+
+# Ractor.allocate is not supported
+assert_equal "[:ok, :ok]", %q{
+ rs = []
+ begin
+ Ractor.allocate
+ rescue => e
+ rs << :ok if e.message == 'allocator undefined for Ractor'
+ end
+
+ begin
+ Ractor.new{}.dup
+ rescue
+ rs << :ok if e.message == 'allocator undefined for Ractor'
+ end
+
+ rs
+}
+
+# A return value of a Ractor block will be a message from the Ractor.
+assert_equal 'ok', %q{
+ # join
+ r = Ractor.new do
+ 'ok'
+ end
+ r.value
+}
+
+# Passed arguments to Ractor.new will be a block parameter
+# The values are passed with Ractor-communication pass.
+assert_equal 'ok', %q{
+ # ping-pong with arg
+ r = Ractor.new 'ok' do |msg|
+ msg
+ end
+ r.value
+}
+
+# Pass multiple arguments to Ractor.new
+assert_equal 'ok', %q{
+ # ping-pong with two args
+ r = Ractor.new 'ping', 'pong' do |msg, msg2|
+ [msg, msg2]
+ end
+ 'ok' if r.value == ['ping', 'pong']
+}
+
+# Ractor#send passes an object with copy to a Ractor
+# and Ractor.receive in the Ractor block can receive the passed value.
+assert_equal 'ok', %q{
+ r = Ractor.new do
+ msg = Ractor.receive
+ end
+ r.send 'ok'
+ r.value
+}
+
+assert_equal '[1, 2, 3]', %q{
+ def foo(arr)
+ arr << 1
+ arr << 2
+ arr << 3
+ arr
+ end
+
+ def bar()
+ foo([])
+ end
+
+ bar()
+}
diff --git a/box.c b/box.c
new file mode 100644
index 0000000000..830172cdd5
--- /dev/null
+++ b/box.c
@@ -0,0 +1,1220 @@
+/* indent-tabs-mode: nil */
+
+#include "eval_intern.h"
+#include "internal.h"
+#include "internal/box.h"
+#include "internal/class.h"
+#include "internal/eval.h"
+#include "internal/error.h"
+#include "internal/file.h"
+#include "internal/gc.h"
+#include "internal/hash.h"
+#include "internal/io.h"
+#include "internal/load.h"
+#include "internal/st.h"
+#include "internal/variable.h"
+#include "iseq.h"
+#include "ruby/internal/globals.h"
+#include "ruby/util.h"
+#include "vm_core.h"
+#include "darray.h"
+
+#include <stdio.h>
+
+#ifdef HAVE_SYS_SENDFILE_H
+# include <sys/sendfile.h>
+#endif
+#ifdef HAVE_COPYFILE_H
+#include <copyfile.h>
+#endif
+
+VALUE rb_cBox = 0;
+VALUE rb_cBoxEntry = 0;
+VALUE rb_mBoxLoader = 0;
+
+static rb_box_t root_box[1]; /* Initialize in initialize_root_box() */
+static rb_box_t *main_box;
+static char *tmp_dir;
+static bool tmp_dir_has_dirsep;
+
+#define BOX_TMP_PREFIX "_ruby_box_"
+
+#ifndef MAXPATHLEN
+# define MAXPATHLEN 1024
+#endif
+
+#if defined(_WIN32)
+# define DIRSEP "\\"
+#else
+# define DIRSEP "/"
+#endif
+
+bool ruby_box_enabled = false; // extern
+bool ruby_box_init_done = false; // extern
+bool ruby_box_crashed = false; // extern, changed only in vm.c
+
+VALUE rb_resolve_feature_path(VALUE klass, VALUE fname);
+static VALUE rb_box_inspect(VALUE obj);
+static void cleanup_all_local_extensions(VALUE libmap);
+
+void
+rb_box_init_done(void)
+{
+ ruby_box_init_done = true;
+}
+
+const rb_box_t *
+rb_root_box(void)
+{
+ return root_box;
+}
+
+const rb_box_t *
+rb_main_box(void)
+{
+ return main_box;
+}
+
+const rb_box_t *
+rb_current_box(void)
+{
+ /*
+ * If RUBY_BOX is not set, the root box is the only available one.
+ *
+ * Until the main_box is not initialized, the root box is
+ * the only valid box.
+ * This early return is to avoid accessing EC before its setup.
+ */
+ if (!main_box)
+ return root_box;
+
+ return rb_vm_current_box(GET_EC());
+}
+
+const rb_box_t *
+rb_loading_box(void)
+{
+ if (!main_box)
+ return root_box;
+
+ return rb_vm_loading_box(GET_EC());
+}
+
+const rb_box_t *
+rb_current_box_in_crash_report(void)
+{
+ if (ruby_box_crashed)
+ return NULL;
+ return rb_current_box();
+}
+
+static long box_id_counter = 0;
+
+static long
+box_generate_id(void)
+{
+ long id;
+ RB_VM_LOCKING() {
+ id = ++box_id_counter;
+ }
+ return id;
+}
+
+static VALUE
+box_main_to_s(VALUE obj)
+{
+ return rb_str_new2("main");
+}
+
+static void
+box_entry_initialize(rb_box_t *box)
+{
+ const rb_box_t *root = rb_root_box();
+
+ // These will be updated immediately
+ box->box_object = 0;
+ box->box_id = 0;
+
+ box->top_self = rb_obj_alloc(rb_cObject);
+ rb_define_singleton_method(box->top_self, "to_s", box_main_to_s, 0);
+ rb_define_alias(rb_singleton_class(box->top_self), "inspect", "to_s");
+ box->load_path = rb_ary_dup(root->load_path);
+ box->expanded_load_path = rb_ary_dup(root->expanded_load_path);
+ box->load_path_snapshot = rb_ary_new();
+ box->load_path_check_cache = 0;
+ box->loaded_features = rb_ary_dup(root->loaded_features);
+ box->loaded_features_snapshot = rb_ary_new();
+ box->loaded_features_index = st_init_numtable();
+ box->loaded_features_realpaths = rb_hash_dup(root->loaded_features_realpaths);
+ box->loaded_features_realpath_map = rb_hash_dup(root->loaded_features_realpath_map);
+ box->loading_table = st_init_strtable();
+ box->ruby_dln_libmap = rb_hash_new_with_size(0);
+ box->gvar_tbl = rb_hash_new_with_size(0);
+ box->classext_cow_classes = st_init_numtable();
+
+ box->is_user = true;
+ box->is_optional = true;
+}
+
+void
+rb_box_gc_update_references(void *ptr)
+{
+ rb_box_t *box = (rb_box_t *)ptr;
+ if (!box) return;
+
+ if (box->box_object)
+ box->box_object = rb_gc_location(box->box_object);
+ if (box->top_self)
+ box->top_self = rb_gc_location(box->top_self);
+ box->load_path = rb_gc_location(box->load_path);
+ box->expanded_load_path = rb_gc_location(box->expanded_load_path);
+ box->load_path_snapshot = rb_gc_location(box->load_path_snapshot);
+ if (box->load_path_check_cache) {
+ box->load_path_check_cache = rb_gc_location(box->load_path_check_cache);
+ }
+ box->loaded_features = rb_gc_location(box->loaded_features);
+ box->loaded_features_snapshot = rb_gc_location(box->loaded_features_snapshot);
+ box->loaded_features_realpaths = rb_gc_location(box->loaded_features_realpaths);
+ box->loaded_features_realpath_map = rb_gc_location(box->loaded_features_realpath_map);
+ box->ruby_dln_libmap = rb_gc_location(box->ruby_dln_libmap);
+ box->gvar_tbl = rb_gc_location(box->gvar_tbl);
+}
+
+void
+rb_box_entry_mark(void *ptr)
+{
+ const rb_box_t *box = (rb_box_t *)ptr;
+ if (!box) return;
+
+ rb_gc_mark(box->box_object);
+ rb_gc_mark(box->top_self);
+ rb_gc_mark(box->load_path);
+ rb_gc_mark(box->expanded_load_path);
+ rb_gc_mark(box->load_path_snapshot);
+ rb_gc_mark(box->load_path_check_cache);
+ rb_gc_mark(box->loaded_features);
+ rb_gc_mark(box->loaded_features_snapshot);
+ rb_gc_mark(box->loaded_features_realpaths);
+ rb_gc_mark(box->loaded_features_realpath_map);
+ if (box->loading_table) {
+ rb_mark_tbl(box->loading_table);
+ }
+ rb_gc_mark(box->ruby_dln_libmap);
+ rb_gc_mark(box->gvar_tbl);
+ if (box->classext_cow_classes) {
+ rb_mark_tbl(box->classext_cow_classes);
+ }
+}
+
+static int
+free_loading_table_entry(st_data_t key, st_data_t value, st_data_t arg)
+{
+ xfree((char *)key);
+ return ST_DELETE;
+}
+
+static int
+free_loaded_feature_index_i(st_data_t key, st_data_t value, st_data_t arg)
+{
+ if (!FIXNUM_P(value)) {
+ rb_darray_free((void *)value);
+ }
+ return ST_CONTINUE;
+}
+
+static void
+box_root_free(void *ptr)
+{
+ rb_box_t *box = (rb_box_t *)ptr;
+ if (box->loading_table) {
+ st_foreach(box->loading_table, free_loading_table_entry, 0);
+ st_free_table(box->loading_table);
+ box->loading_table = 0;
+ }
+
+ if (box->loaded_features_index) {
+ st_foreach(box->loaded_features_index, free_loaded_feature_index_i, 0);
+ st_free_table(box->loaded_features_index);
+ }
+}
+
+static int
+free_classext_for_box(st_data_t _key, st_data_t obj_value, st_data_t box_arg)
+{
+ rb_classext_t *ext;
+ VALUE obj = (VALUE)obj_value;
+ const rb_box_t *box = (const rb_box_t *)box_arg;
+
+ if (RB_TYPE_P(obj, T_CLASS) || RB_TYPE_P(obj, T_MODULE)) {
+ ext = rb_class_unlink_classext(obj, box);
+ rb_class_classext_free(obj, ext, false);
+ }
+ else if (RB_TYPE_P(obj, T_ICLASS)) {
+ ext = rb_class_unlink_classext(obj, box);
+ rb_iclass_classext_free(obj, ext, false);
+ }
+ else {
+ rb_bug("Invalid type of object in classext_cow_classes: %s", rb_type_str(BUILTIN_TYPE(obj)));
+ }
+ return ST_CONTINUE;
+}
+
+static void
+box_entry_free(void *ptr)
+{
+ const rb_box_t *box = (const rb_box_t *)ptr;
+
+ if (box->classext_cow_classes) {
+ st_foreach(box->classext_cow_classes, free_classext_for_box, (st_data_t)box);
+ }
+
+ cleanup_all_local_extensions(box->ruby_dln_libmap);
+
+ box_root_free(ptr);
+ xfree(ptr);
+}
+
+static size_t
+box_entry_memsize(const void *ptr)
+{
+ size_t size = sizeof(rb_box_t);
+ const rb_box_t *box = (const rb_box_t *)ptr;
+ if (box->loaded_features_index) {
+ size += rb_st_memsize(box->loaded_features_index);
+ }
+ if (box->loading_table) {
+ size += rb_st_memsize(box->loading_table);
+ }
+ return size;
+}
+
+static const rb_data_type_t rb_box_data_type = {
+ "Ruby::Box::Entry",
+ {
+ rb_box_entry_mark,
+ box_entry_free,
+ box_entry_memsize,
+ rb_box_gc_update_references,
+ },
+ 0, 0, RUBY_TYPED_FREE_IMMEDIATELY // TODO: enable RUBY_TYPED_WB_PROTECTED when inserting write barriers
+};
+
+static const rb_data_type_t rb_root_box_data_type = {
+ "Ruby::Box::Root",
+ {
+ rb_box_entry_mark,
+ box_root_free,
+ box_entry_memsize,
+ rb_box_gc_update_references,
+ },
+ &rb_box_data_type, 0, RUBY_TYPED_FREE_IMMEDIATELY // TODO: enable RUBY_TYPED_WB_PROTECTED when inserting write barriers
+};
+
+VALUE
+rb_box_entry_alloc(VALUE klass)
+{
+ rb_box_t *entry;
+ VALUE obj = TypedData_Make_Struct(klass, rb_box_t, &rb_box_data_type, entry);
+ box_entry_initialize(entry);
+ return obj;
+}
+
+static rb_box_t *
+get_box_struct_internal(VALUE entry)
+{
+ rb_box_t *sval;
+ TypedData_Get_Struct(entry, rb_box_t, &rb_box_data_type, sval);
+ return sval;
+}
+
+rb_box_t *
+rb_get_box_t(VALUE box)
+{
+ VALUE entry;
+ ID id_box_entry;
+
+ VM_ASSERT(box);
+
+ if (NIL_P(box))
+ return root_box;
+
+ VM_ASSERT(BOX_OBJ_P(box));
+
+ CONST_ID(id_box_entry, "__box_entry__");
+ entry = rb_attr_get(box, id_box_entry);
+ return get_box_struct_internal(entry);
+}
+
+VALUE
+rb_get_box_object(rb_box_t *box)
+{
+ VM_ASSERT(box && box->box_object);
+ return box->box_object;
+}
+
+/*
+ * call-seq:
+ * Ruby::Box.new -> new_box
+ *
+ * Returns a new Ruby::Box object.
+ */
+static VALUE
+box_initialize(VALUE box_value)
+{
+ rb_box_t *box;
+ rb_classext_t *object_classext;
+ VALUE entry;
+ ID id_box_entry;
+ CONST_ID(id_box_entry, "__box_entry__");
+
+ if (!rb_box_available()) {
+ rb_raise(rb_eRuntimeError, "Ruby Box is disabled. Set RUBY_BOX=1 environment variable to use Ruby::Box.");
+ }
+
+ entry = rb_class_new_instance_pass_kw(0, NULL, rb_cBoxEntry);
+ box = get_box_struct_internal(entry);
+
+ box->box_object = box_value;
+ box->box_id = box_generate_id();
+ rb_define_singleton_method(box->load_path, "resolve_feature_path", rb_resolve_feature_path, 1);
+
+ // Set the Ruby::Box object unique/consistent from any boxes to have just single
+ // constant table from any view of every (including main) box.
+ // If a code in the box adds a constant, the constant will be visible even from root/main.
+ RCLASS_SET_PRIME_CLASSEXT_WRITABLE(box_value, true);
+
+ // Get a clean constant table of Object even by writable one
+ // because ns was just created, so it has not touched any constants yet.
+ object_classext = RCLASS_EXT_WRITABLE_IN_BOX(rb_cObject, box);
+ RCLASS_SET_CONST_TBL(box_value, RCLASSEXT_CONST_TBL(object_classext), true);
+
+ rb_ivar_set(box_value, id_box_entry, entry);
+
+ return box_value;
+}
+
+/*
+ * call-seq:
+ * Ruby::Box.enabled? -> true or false
+ *
+ * Returns +true+ if Ruby::Box is enabled.
+ */
+static VALUE
+rb_box_s_getenabled(VALUE recv)
+{
+ return RBOOL(rb_box_available());
+}
+
+/*
+ * call-seq:
+ * Ruby::Box.current -> box, nil or false
+ *
+ * Returns the current box.
+ * Returns +nil+ if Ruby Box is not enabled.
+ */
+static VALUE
+rb_box_s_current(VALUE recv)
+{
+ const rb_box_t *box;
+
+ if (!rb_box_available())
+ return Qnil;
+
+ box = rb_vm_current_box(GET_EC());
+ VM_ASSERT(box && box->box_object);
+ return box->box_object;
+}
+
+/*
+ * call-seq:
+ * load_path -> array
+ *
+ * Returns box local load path.
+ */
+static VALUE
+rb_box_load_path(VALUE box)
+{
+ VM_ASSERT(BOX_OBJ_P(box));
+ return rb_get_box_t(box)->load_path;
+}
+
+#ifdef _WIN32
+UINT rb_w32_system_tmpdir(WCHAR *path, UINT len);
+#endif
+
+/* Copied from mjit.c Ruby 3.0.3 */
+static char *
+system_default_tmpdir(void)
+{
+ // c.f. ext/etc/etc.c:etc_systmpdir()
+#ifdef _WIN32
+ WCHAR tmppath[_MAX_PATH];
+ UINT len = rb_w32_system_tmpdir(tmppath, numberof(tmppath));
+ if (len) {
+ int blen = WideCharToMultiByte(CP_UTF8, 0, tmppath, len, NULL, 0, NULL, NULL);
+ char *tmpdir = xmalloc(blen + 1);
+ WideCharToMultiByte(CP_UTF8, 0, tmppath, len, tmpdir, blen, NULL, NULL);
+ tmpdir[blen] = '\0';
+ return tmpdir;
+ }
+#elif defined _CS_DARWIN_USER_TEMP_DIR
+ char path[MAXPATHLEN];
+ size_t len = confstr(_CS_DARWIN_USER_TEMP_DIR, path, sizeof(path));
+ if (len > 0) {
+ char *tmpdir = xmalloc(len);
+ if (len > sizeof(path)) {
+ confstr(_CS_DARWIN_USER_TEMP_DIR, tmpdir, len);
+ }
+ else {
+ memcpy(tmpdir, path, len);
+ }
+ return tmpdir;
+ }
+#endif
+ return 0;
+}
+
+static int
+check_tmpdir(const char *dir)
+{
+ struct stat st;
+
+ if (!dir) return FALSE;
+ if (stat(dir, &st)) return FALSE;
+#ifndef S_ISDIR
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif
+ if (!S_ISDIR(st.st_mode)) return FALSE;
+#ifndef _WIN32
+# ifndef S_IWOTH
+# define S_IWOTH 002
+# endif
+ if (st.st_mode & S_IWOTH) {
+# ifdef S_ISVTX
+ if (!(st.st_mode & S_ISVTX)) return FALSE;
+# else
+ return FALSE;
+# endif
+ }
+ if (access(dir, W_OK)) return FALSE;
+#endif
+ return TRUE;
+}
+
+static char *
+system_tmpdir(void)
+{
+ char *tmpdir;
+# define RETURN_ENV(name) \
+ if (check_tmpdir(tmpdir = getenv(name))) return ruby_strdup(tmpdir)
+ RETURN_ENV("TMPDIR");
+ RETURN_ENV("TMP");
+ tmpdir = system_default_tmpdir();
+ if (check_tmpdir(tmpdir)) return tmpdir;
+ return ruby_strdup("/tmp");
+# undef RETURN_ENV
+}
+
+/* end of copy */
+
+static int
+sprint_ext_filename(char *str, size_t size, long box_id, const char *prefix, const char *basename)
+{
+ if (tmp_dir_has_dirsep) {
+ return snprintf(str, size, "%s%sp%"PRI_PIDT_PREFIX"u_%ld_%s", tmp_dir, prefix, getpid(), box_id, basename);
+ }
+ return snprintf(str, size, "%s%s%sp%"PRI_PIDT_PREFIX"u_%ld_%s", tmp_dir, DIRSEP, prefix, getpid(), box_id, basename);
+}
+
+enum copy_error_type {
+ COPY_ERROR_NONE,
+ COPY_ERROR_SRC_OPEN,
+ COPY_ERROR_DST_OPEN,
+ COPY_ERROR_SRC_READ,
+ COPY_ERROR_DST_WRITE,
+ COPY_ERROR_SRC_STAT,
+ COPY_ERROR_DST_CHMOD,
+ COPY_ERROR_SYSERR
+};
+
+static const char *
+copy_ext_file_error(char *message, size_t size, int copy_retvalue)
+{
+#ifdef _WIN32
+ int error = GetLastError();
+ char *p = message;
+ size_t len = snprintf(message, size, "%d: ", error);
+
+#define format_message(sublang) FormatMessage(\
+ FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, \
+ NULL, error, MAKELANGID(LANG_NEUTRAL, (sublang)), \
+ message + len, size - len, NULL)
+ if (format_message(SUBLANG_ENGLISH_US) == 0)
+ format_message(SUBLANG_DEFAULT);
+ for (p = message + len; *p; p++) {
+ if (*p == '\n' || *p == '\r')
+ *p = ' ';
+ }
+#else
+ switch (copy_retvalue) {
+ case COPY_ERROR_SRC_OPEN:
+ strlcpy(message, "can't open the extension path", size);
+ break;
+ case COPY_ERROR_DST_OPEN:
+ strlcpy(message, "can't open the file to write", size);
+ break;
+ case COPY_ERROR_SRC_READ:
+ strlcpy(message, "failed to read the extension path", size);
+ break;
+ case COPY_ERROR_DST_WRITE:
+ strlcpy(message, "failed to write the extension path", size);
+ break;
+ case COPY_ERROR_SRC_STAT:
+ strlcpy(message, "failed to stat the extension path to copy permissions", size);
+ break;
+ case COPY_ERROR_DST_CHMOD:
+ strlcpy(message, "failed to set permissions to the copied extension path", size);
+ break;
+ case COPY_ERROR_SYSERR:
+ strlcpy(message, strerror(errno), size);
+ break;
+ case COPY_ERROR_NONE: /* shouldn't be called */
+ default:
+ rb_bug("unknown return value of copy_ext_file: %d", copy_retvalue);
+ }
+#endif
+ return message;
+}
+
+#ifndef _WIN32
+static enum copy_error_type
+copy_stream(int src_fd, int dst_fd)
+{
+ char buffer[1024];
+ ssize_t rsize;
+
+ while ((rsize = read(src_fd, buffer, sizeof(buffer))) != 0) {
+ if (rsize < 0) return COPY_ERROR_SRC_READ;
+ for (size_t written = 0; written < (size_t)rsize;) {
+ ssize_t wsize = write(dst_fd, buffer+written, rsize-written);
+ if (wsize < 0) return COPY_ERROR_DST_WRITE;
+ written += (size_t)wsize;
+ }
+ }
+ return COPY_ERROR_NONE;
+}
+#endif
+
+static enum copy_error_type
+copy_ext_file(const char *src_path, const char *dst_path)
+{
+#if defined(_WIN32)
+ WCHAR *w_src = rb_w32_mbstr_to_wstr(CP_UTF8, src_path, -1, NULL);
+ WCHAR *w_dst = rb_w32_mbstr_to_wstr(CP_UTF8, dst_path, -1, NULL);
+ if (!w_src || !w_dst) {
+ free(w_src);
+ free(w_dst);
+ rb_memerror();
+ }
+
+ enum copy_error_type rvalue = CopyFileW(w_src, w_dst, TRUE) ?
+ COPY_ERROR_NONE : COPY_ERROR_SYSERR;
+ free(w_src);
+ free(w_dst);
+ return rvalue;
+#else
+# ifdef O_BINARY
+ const int bin = O_BINARY;
+# else
+ const int bin = 0;
+# endif
+# ifdef O_CLOEXEC
+ const int cloexec = O_CLOEXEC;
+# else
+ const int cloexec = 0;
+# endif
+ const int src_fd = open(src_path, O_RDONLY|cloexec|bin);
+ if (src_fd < 0) return COPY_ERROR_SRC_OPEN;
+ if (!cloexec) rb_maygvl_fd_fix_cloexec(src_fd);
+
+ struct stat src_st;
+ if (fstat(src_fd, &src_st)) {
+ close(src_fd);
+ return COPY_ERROR_SRC_STAT;
+ }
+
+ const int dst_fd = open(dst_path, O_WRONLY|O_CREAT|O_EXCL|cloexec|bin, S_IRWXU);
+ if (dst_fd < 0) {
+ close(src_fd);
+ return COPY_ERROR_DST_OPEN;
+ }
+ if (!cloexec) rb_maygvl_fd_fix_cloexec(dst_fd);
+
+ enum copy_error_type ret = COPY_ERROR_NONE;
+
+ if (fchmod(dst_fd, src_st.st_mode & 0777)) {
+ ret = COPY_ERROR_DST_CHMOD;
+ goto done;
+ }
+
+ const size_t count_max = (SIZE_MAX >> 1) + 1;
+ (void)count_max;
+
+# ifdef HAVE_COPY_FILE_RANGE
+ for (;;) {
+ ssize_t written = copy_file_range(src_fd, NULL, dst_fd, NULL, count_max, 0);
+ if (written == 0) goto done;
+ if (written < 0) break;
+ }
+# endif
+# ifdef HAVE_FCOPYFILE
+ if (fcopyfile(src_fd, dst_fd, NULL, COPYFILE_DATA) == 0) {
+ goto done;
+ }
+# endif
+# ifdef USE_SENDFILE
+ for (;;) {
+ ssize_t written = sendfile(src_fd, dst_fd, NULL count_max);
+ if (written == 0) goto done;
+ if (written < 0) break;
+ }
+# endif
+ ret = copy_stream(src_fd, dst_fd);
+
+ done:
+ close(src_fd);
+ if (dst_fd >= 0) close(dst_fd);
+ if (ret != COPY_ERROR_NONE) unlink(dst_path);
+ return ret;
+#endif
+}
+
+#if defined __CYGWIN__ || defined DOSISH
+#define isdirsep(x) ((x) == '/' || (x) == '\\')
+#else
+#define isdirsep(x) ((x) == '/')
+#endif
+
+#define IS_SOEXT(e) (strcmp((e), ".so") == 0 || strcmp((e), ".o") == 0)
+#define IS_DLEXT(e) (strcmp((e), DLEXT) == 0)
+
+static void
+fname_without_suffix(const char *fname, char *rvalue, size_t rsize)
+{
+ size_t len = strlen(fname);
+ const char *pos;
+ for (pos = fname + len; pos > fname; pos--) {
+ if (IS_SOEXT(pos) || IS_DLEXT(pos)) {
+ len = pos - fname;
+ break;
+ }
+ if (fname + len - pos > DLEXT_MAXLEN) break;
+ }
+ if (len > rsize - 1) len = rsize - 1;
+ memcpy(rvalue, fname, len);
+ rvalue[len] = '\0';
+}
+
+static void
+escaped_basename(const char *path, const char *fname, char *rvalue, size_t rsize)
+{
+ char *pos;
+ const char *leaf = path, *found;
+ // `leaf + 1` looks uncomfortable (when leaf == path), but fname must not be the top-dir itself
+ while ((found = strstr(leaf + 1, fname)) != NULL) {
+ leaf = found; // find the last occurrence for the path like /etc/my-crazy-lib-dir/etc.so
+ }
+ strlcpy(rvalue, leaf, rsize);
+ for (pos = rvalue; *pos; pos++) {
+ if (isdirsep(*pos)) {
+ *pos = '+';
+ }
+ }
+}
+
+static void
+box_ext_cleanup_mark(void *p)
+{
+ rb_gc_mark((VALUE)p);
+}
+
+static void
+box_ext_cleanup_free(void *p)
+{
+ VALUE path = (VALUE)p;
+ unlink(RSTRING_PTR(path));
+}
+
+static const rb_data_type_t box_ext_cleanup_type = {
+ "box_ext_cleanup",
+ {box_ext_cleanup_mark, box_ext_cleanup_free},
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY,
+};
+
+void
+rb_box_cleanup_local_extension(VALUE cleanup)
+{
+ void *p = DATA_PTR(cleanup);
+ DATA_PTR(cleanup) = NULL;
+#ifndef _WIN32
+ if (p) box_ext_cleanup_free(p);
+#endif
+ (void)p;
+}
+
+static int
+cleanup_local_extension_i(VALUE key, VALUE value, VALUE arg)
+{
+#if defined(_WIN32)
+ HMODULE h = (HMODULE)NUM2PTR(value);
+ WCHAR module_path[MAXPATHLEN];
+ DWORD len = GetModuleFileNameW(h, module_path, numberof(module_path));
+
+ FreeLibrary(h);
+ if (len > 0 && len < numberof(module_path)) DeleteFileW(module_path);
+#endif
+ return ST_DELETE;
+}
+
+static void
+cleanup_all_local_extensions(VALUE libmap)
+{
+ rb_hash_foreach(libmap, cleanup_local_extension_i, 0);
+}
+
+VALUE
+rb_box_local_extension(VALUE box_value, VALUE fname, VALUE path, VALUE *cleanup)
+{
+ char ext_path[MAXPATHLEN], fname2[MAXPATHLEN], basename[MAXPATHLEN];
+ int wrote;
+ const char *src_path = RSTRING_PTR(path), *fname_ptr = RSTRING_PTR(fname);
+ rb_box_t *box = rb_get_box_t(box_value);
+
+ fname_without_suffix(fname_ptr, fname2, sizeof(fname2));
+ escaped_basename(src_path, fname2, basename, sizeof(basename));
+
+ wrote = sprint_ext_filename(ext_path, sizeof(ext_path), box->box_id, BOX_TMP_PREFIX, basename);
+ if (wrote >= (int)sizeof(ext_path)) {
+ rb_bug("Extension file path in the box was too long");
+ }
+ VALUE new_path = rb_str_new_cstr(ext_path);
+ *cleanup = TypedData_Wrap_Struct(0, &box_ext_cleanup_type, NULL);
+ enum copy_error_type copy_error = copy_ext_file(src_path, ext_path);
+ if (copy_error) {
+ char message[1024];
+ copy_ext_file_error(message, sizeof(message), copy_error);
+ rb_raise(rb_eLoadError, "can't prepare the extension file for Ruby Box (%s from %"PRIsVALUE"): %s", ext_path, path, message);
+ }
+ DATA_PTR(*cleanup) = (void *)new_path;
+ return new_path;
+}
+
+static VALUE
+rb_box_load(int argc, VALUE *argv, VALUE box)
+{
+ VALUE fname, wrap;
+ rb_scan_args(argc, argv, "11", &fname, &wrap);
+
+ rb_vm_frame_flag_set_box_require(GET_EC());
+
+ VALUE args = rb_ary_new_from_args(2, fname, wrap);
+ return rb_load_entrypoint(args);
+}
+
+static VALUE
+rb_box_require(VALUE box, VALUE fname)
+{
+ rb_vm_frame_flag_set_box_require(GET_EC());
+
+ return rb_require_string(fname);
+}
+
+static VALUE
+rb_box_require_relative(VALUE box, VALUE fname)
+{
+ rb_vm_frame_flag_set_box_require(GET_EC());
+
+ return rb_require_relative_entrypoint(fname);
+}
+
+static void
+initialize_root_box(void)
+{
+ rb_vm_t *vm = GET_VM();
+ rb_box_t *root = (rb_box_t *)rb_root_box();
+
+ root->load_path = rb_ary_new();
+ root->expanded_load_path = rb_ary_hidden_new(0);
+ root->load_path_snapshot = rb_ary_hidden_new(0);
+ root->load_path_check_cache = 0;
+ rb_define_singleton_method(root->load_path, "resolve_feature_path", rb_resolve_feature_path, 1);
+
+ root->loaded_features = rb_ary_new();
+ root->loaded_features_snapshot = rb_ary_hidden_new(0);
+ root->loaded_features_index = st_init_numtable();
+ root->loaded_features_realpaths = rb_hash_new();
+ rb_obj_hide(root->loaded_features_realpaths);
+ root->loaded_features_realpath_map = rb_hash_new();
+ rb_obj_hide(root->loaded_features_realpath_map);
+
+ root->ruby_dln_libmap = rb_hash_new_with_size(0);
+ root->gvar_tbl = rb_hash_new_with_size(0);
+ root->classext_cow_classes = NULL; // classext CoW never happen on the root box
+
+ vm->root_box = root;
+
+ if (rb_box_available()) {
+ VALUE root_box, entry;
+ ID id_box_entry;
+ CONST_ID(id_box_entry, "__box_entry__");
+
+ root_box = rb_obj_alloc(rb_cBox);
+ RCLASS_SET_PRIME_CLASSEXT_WRITABLE(root_box, true);
+ RCLASS_SET_CONST_TBL(root_box, RCLASSEXT_CONST_TBL(RCLASS_EXT_PRIME(rb_cObject)), true);
+
+ root->box_id = box_generate_id();
+ root->box_object = root_box;
+
+ entry = TypedData_Wrap_Struct(rb_cBoxEntry, &rb_root_box_data_type, root);
+ rb_ivar_set(root_box, id_box_entry, entry);
+ }
+ else {
+ root->box_id = 1;
+ root->box_object = Qnil;
+ }
+}
+
+static VALUE
+rb_box_eval(VALUE box_value, VALUE str)
+{
+ const rb_iseq_t *iseq;
+ const rb_box_t *box;
+
+ StringValue(str);
+
+ iseq = rb_iseq_compile_iseq(str, rb_str_new_cstr("eval"));
+ VM_ASSERT(iseq);
+
+ box = (const rb_box_t *)rb_get_box_t(box_value);
+
+ return rb_iseq_eval(iseq, box);
+}
+
+static int box_experimental_warned = 0;
+
+RUBY_EXTERN const char ruby_api_version_name[];
+
+void
+rb_initialize_main_box(void)
+{
+ rb_box_t *box;
+ VALUE main_box_value;
+ rb_vm_t *vm = GET_VM();
+
+ VM_ASSERT(rb_box_available());
+
+ if (!box_experimental_warned) {
+ rb_category_warn(RB_WARN_CATEGORY_EXPERIMENTAL,
+ "Ruby::Box is experimental, and the behavior may change in the future!\n"
+ "See https://docs.ruby-lang.org/en/%s/Ruby/Box.html for known issues, etc.",
+ ruby_api_version_name);
+ box_experimental_warned = 1;
+ }
+
+ main_box_value = rb_class_new_instance(0, NULL, rb_cBox);
+ VM_ASSERT(BOX_OBJ_P(main_box_value));
+ box = rb_get_box_t(main_box_value);
+ box->box_object = main_box_value;
+ box->is_user = true;
+ box->is_optional = false;
+
+ rb_const_set(rb_cBox, rb_intern("MAIN"), main_box_value);
+
+ vm->main_box = main_box = box;
+
+ // create the writable classext of ::Object explicitly to finalize the set of visible top-level constants
+ RCLASS_EXT_WRITABLE_IN_BOX(rb_cObject, box);
+}
+
+static VALUE
+rb_box_inspect(VALUE obj)
+{
+ rb_box_t *box;
+ VALUE r;
+ if (obj == Qfalse) {
+ r = rb_str_new_cstr("#<Ruby::Box:root>");
+ return r;
+ }
+ box = rb_get_box_t(obj);
+ r = rb_str_new_cstr("#<Ruby::Box:");
+ rb_str_concat(r, rb_funcall(LONG2NUM(box->box_id), rb_intern("to_s"), 0));
+ if (BOX_ROOT_P(box)) {
+ rb_str_cat_cstr(r, ",root");
+ }
+ if (BOX_USER_P(box)) {
+ rb_str_cat_cstr(r, ",user");
+ }
+ if (BOX_MAIN_P(box)) {
+ rb_str_cat_cstr(r, ",main");
+ }
+ else if (BOX_OPTIONAL_P(box)) {
+ rb_str_cat_cstr(r, ",optional");
+ }
+ rb_str_cat_cstr(r, ">");
+ return r;
+}
+
+static VALUE
+rb_box_loading_func(int argc, VALUE *argv, VALUE _self)
+{
+ rb_vm_frame_flag_set_box_require(GET_EC());
+ return rb_call_super(argc, argv);
+}
+
+static void
+box_define_loader_method(const char *name)
+{
+ rb_define_private_method(rb_mBoxLoader, name, rb_box_loading_func, -1);
+ rb_define_singleton_method(rb_mBoxLoader, name, rb_box_loading_func, -1);
+}
+
+void
+Init_root_box(void)
+{
+ root_box->loading_table = st_init_strtable();
+}
+
+void
+Init_enable_box(void)
+{
+ const char *env = getenv("RUBY_BOX");
+ if (env && strlen(env) == 1 && env[0] == '1') {
+ ruby_box_enabled = true;
+ }
+ else {
+ ruby_box_init_done = true;
+ }
+}
+
+/* :nodoc: */
+static VALUE
+rb_box_s_root(VALUE recv)
+{
+ return root_box->box_object;
+}
+
+/* :nodoc: */
+static VALUE
+rb_box_s_main(VALUE recv)
+{
+ return main_box->box_object;
+}
+
+/* :nodoc: */
+static VALUE
+rb_box_root_p(VALUE box_value)
+{
+ const rb_box_t *box = (const rb_box_t *)rb_get_box_t(box_value);
+ return RBOOL(BOX_ROOT_P(box));
+}
+
+/* :nodoc: */
+static VALUE
+rb_box_main_p(VALUE box_value)
+{
+ const rb_box_t *box = (const rb_box_t *)rb_get_box_t(box_value);
+ return RBOOL(BOX_MAIN_P(box));
+}
+
+#if RUBY_DEBUG
+
+static const char *
+classname(VALUE klass)
+{
+ VALUE p;
+ if (!klass) {
+ return "Qfalse";
+ }
+ p = RCLASSEXT_CLASSPATH(RCLASS_EXT_PRIME(klass));
+ if (RTEST(p))
+ return RSTRING_PTR(p);
+ if (RB_TYPE_P(klass, T_CLASS) || RB_TYPE_P(klass, T_MODULE) || RB_TYPE_P(klass, T_ICLASS))
+ return "AnyClassValue";
+ return "NonClassValue";
+}
+
+static enum rb_id_table_iterator_result
+dump_classext_methods_i(ID mid, VALUE _val, void *data)
+{
+ VALUE ary = (VALUE)data;
+ rb_ary_push(ary, rb_id2str(mid));
+ return ID_TABLE_CONTINUE;
+}
+
+static enum rb_id_table_iterator_result
+dump_classext_constants_i(ID mid, VALUE _val, void *data)
+{
+ VALUE ary = (VALUE)data;
+ rb_ary_push(ary, rb_id2str(mid));
+ return ID_TABLE_CONTINUE;
+}
+
+static void
+dump_classext_i(rb_classext_t *ext, bool is_prime, VALUE _recv, void *data)
+{
+ char buf[4096];
+ struct rb_id_table *tbl;
+ VALUE ary, res = (VALUE)data;
+
+ snprintf(buf, 4096, "Ruby::Box %ld:%s classext %p\n",
+ RCLASSEXT_BOX(ext)->box_id, is_prime ? " prime" : "", (void *)ext);
+ rb_str_cat_cstr(res, buf);
+
+ snprintf(buf, 2048, " Super: %s\n", classname(RCLASSEXT_SUPER(ext)));
+ rb_str_cat_cstr(res, buf);
+
+ tbl = RCLASSEXT_M_TBL(ext);
+ if (tbl) {
+ ary = rb_ary_new_capa((long)rb_id_table_size(tbl));
+ rb_id_table_foreach(RCLASSEXT_M_TBL(ext), dump_classext_methods_i, (void *)ary);
+ rb_ary_sort_bang(ary);
+ snprintf(buf, 4096, " Methods(%ld): ", RARRAY_LEN(ary));
+ rb_str_cat_cstr(res, buf);
+ rb_str_concat(res, rb_ary_join(ary, rb_str_new_cstr(",")));
+ rb_str_cat_cstr(res, "\n");
+ }
+ else {
+ rb_str_cat_cstr(res, " Methods(0): .\n");
+ }
+
+ tbl = RCLASSEXT_CONST_TBL(ext);
+ if (tbl) {
+ ary = rb_ary_new_capa((long)rb_id_table_size(tbl));
+ rb_id_table_foreach(tbl, dump_classext_constants_i, (void *)ary);
+ rb_ary_sort_bang(ary);
+ snprintf(buf, 4096, " Constants(%ld): ", RARRAY_LEN(ary));
+ rb_str_cat_cstr(res, buf);
+ rb_str_concat(res, rb_ary_join(ary, rb_str_new_cstr(",")));
+ rb_str_cat_cstr(res, "\n");
+ }
+ else {
+ rb_str_cat_cstr(res, " Constants(0): .\n");
+ }
+}
+
+/* :nodoc: */
+static VALUE
+rb_f_dump_classext(VALUE recv, VALUE klass)
+{
+ /*
+ * The desired output String value is:
+ * Class: 0x88800932 (String) [singleton]
+ * Prime classext box(2,main), readable(t), writable(f)
+ * Non-prime classexts: 3
+ * Box 2: prime classext 0x88800933
+ * Super: Object
+ * Methods(43): aaaaa, bbbb, cccc, dddd, eeeee, ffff, gggg, hhhhh, ...
+ * Constants(12): FOO, Bar, ...
+ * Box 5: classext 0x88800934
+ * Super: Object
+ * Methods(43): aaaaa, bbbb, cccc, dddd, eeeee, ffff, gggg, hhhhh, ...
+ * Constants(12): FOO, Bar, ...
+ */
+ char buf[2048];
+ VALUE res;
+ const rb_classext_t *ext;
+ const rb_box_t *box;
+ st_table *classext_tbl;
+
+ if (!(RB_TYPE_P(klass, T_CLASS) || RB_TYPE_P(klass, T_MODULE))) {
+ snprintf(buf, 2048, "Non-class/module value: %p (%s)\n", (void *)klass, rb_type_str(BUILTIN_TYPE(klass)));
+ return rb_str_new_cstr(buf);
+ }
+
+ if (RB_TYPE_P(klass, T_CLASS)) {
+ snprintf(buf, 2048, "Class: %p (%s)%s\n",
+ (void *)klass, classname(klass), RCLASS_SINGLETON_P(klass) ? " [singleton]" : "");
+ }
+ else {
+ snprintf(buf, 2048, "Module: %p (%s)\n", (void *)klass, classname(klass));
+ }
+ res = rb_str_new_cstr(buf);
+
+ ext = RCLASS_EXT_PRIME(klass);
+ box = RCLASSEXT_BOX(ext);
+ snprintf(buf, 2048, "Prime classext box(%ld,%s), readable(%s), writable(%s)\n",
+ box->box_id,
+ BOX_ROOT_P(box) ? "root" : (BOX_MAIN_P(box) ? "main" : "optional"),
+ RCLASS_PRIME_CLASSEXT_READABLE_P(klass) ? "t" : "f",
+ RCLASS_PRIME_CLASSEXT_WRITABLE_P(klass) ? "t" : "f");
+ rb_str_cat_cstr(res, buf);
+
+ classext_tbl = RCLASS_CLASSEXT_TBL(klass);
+ if (!classext_tbl) {
+ rb_str_cat_cstr(res, "Non-prime classexts: 0\n");
+ }
+ else {
+ snprintf(buf, 2048, "Non-prime classexts: %zu\n", st_table_size(classext_tbl));
+ rb_str_cat_cstr(res, buf);
+ }
+
+ rb_class_classext_foreach(klass, dump_classext_i, (void *)res);
+
+ return res;
+}
+
+#endif /* RUBY_DEBUG */
+
+/*
+ * Document-class: Ruby::Box
+ *
+ * :markup: markdown
+ * :include: doc/language/box.md
+ */
+void
+Init_Box(void)
+{
+ tmp_dir = system_tmpdir();
+ tmp_dir_has_dirsep = (strcmp(tmp_dir + (strlen(tmp_dir) - strlen(DIRSEP)), DIRSEP) == 0);
+
+ VALUE mRuby = rb_define_module("Ruby");
+
+ rb_cBox = rb_define_class_under(mRuby, "Box", rb_cModule);
+ rb_define_method(rb_cBox, "initialize", box_initialize, 0);
+
+ /* :nodoc: */
+ rb_cBoxEntry = rb_define_class_under(rb_cBox, "Entry", rb_cObject);
+ rb_define_alloc_func(rb_cBoxEntry, rb_box_entry_alloc);
+
+ initialize_root_box();
+
+ /* :nodoc: */
+ rb_mBoxLoader = rb_define_module_under(rb_cBox, "Loader");
+ box_define_loader_method("require");
+ box_define_loader_method("require_relative");
+ box_define_loader_method("load");
+
+ if (rb_box_available()) {
+ rb_include_module(rb_cObject, rb_mBoxLoader);
+
+ rb_define_singleton_method(rb_cBox, "root", rb_box_s_root, 0);
+ rb_define_singleton_method(rb_cBox, "main", rb_box_s_main, 0);
+ rb_define_method(rb_cBox, "root?", rb_box_root_p, 0);
+ rb_define_method(rb_cBox, "main?", rb_box_main_p, 0);
+
+#if RUBY_DEBUG
+ rb_define_global_function("dump_classext", rb_f_dump_classext, 1);
+#endif
+ }
+
+ rb_define_singleton_method(rb_cBox, "enabled?", rb_box_s_getenabled, 0);
+ rb_define_singleton_method(rb_cBox, "current", rb_box_s_current, 0);
+
+ rb_define_method(rb_cBox, "load_path", rb_box_load_path, 0);
+ rb_define_method(rb_cBox, "load", rb_box_load, -1);
+ rb_define_method(rb_cBox, "require", rb_box_require, 1);
+ rb_define_method(rb_cBox, "require_relative", rb_box_require_relative, 1);
+ rb_define_method(rb_cBox, "eval", rb_box_eval, 1);
+
+ rb_define_method(rb_cBox, "inspect", rb_box_inspect, 0);
+}
diff --git a/builtin.c b/builtin.c
new file mode 100644
index 0000000000..6cc9790466
--- /dev/null
+++ b/builtin.c
@@ -0,0 +1,87 @@
+#include "internal.h"
+#include "vm_core.h"
+#include "iseq.h"
+#include "builtin.h"
+
+#include "builtin_binary.rbbin"
+
+#ifndef BUILTIN_BINARY_SIZE
+
+#define BUILTIN_LOADED(feature_name, iseq) ((void)0)
+#include "mini_builtin.c"
+
+#else
+
+static const unsigned char *
+bin4feature(const struct builtin_binary *bb, const char *feature, size_t *psize)
+{
+ *psize = bb->bin_size;
+ return strcmp(bb->feature, feature) ? NULL : bb->bin;
+}
+
+static const unsigned char*
+builtin_lookup(const char *feature, size_t *psize)
+{
+ static int index = 0;
+ const unsigned char *bin = bin4feature(&builtin_binary[index++], feature, psize);
+
+ // usually, `builtin_binary` order is loading order at miniruby.
+ for (const struct builtin_binary *bb = &builtin_binary[0]; bb->feature &&! bin; bb++) {
+ bin = bin4feature(bb++, feature, psize);
+ }
+ return bin;
+}
+
+static void
+load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table)
+{
+ // search binary
+ size_t size;
+ const unsigned char *bin = builtin_lookup(feature_name, &size);
+ if (! bin) {
+ rb_bug("builtin_lookup: can not find %s", feature_name);
+ }
+
+ // load binary
+ rb_vm_t *vm = GET_VM();
+ if (vm->builtin_function_table != NULL) rb_bug("vm->builtin_function_table should be NULL.");
+ vm->builtin_function_table = table;
+ const rb_iseq_t *iseq = rb_iseq_ibf_load_bytes((const char *)bin, size);
+ ASSUME(iseq); // otherwise an exception should have raised
+ vm->builtin_function_table = NULL;
+
+ // exec
+ rb_iseq_eval(rb_iseq_check(iseq), rb_root_box()); // builtin functions are loaded in the root box
+}
+
+void
+rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table)
+{
+ load_with_builtin_functions(feature_name, table);
+}
+
+#endif
+
+void
+rb_free_loaded_builtin_table(void)
+{
+ // do nothing
+}
+
+void
+Init_builtin(void)
+{
+ // nothing
+}
+
+void
+Init_builtin_features(void)
+{
+
+#ifdef BUILTIN_BINARY_SIZE
+
+ load_with_builtin_functions("gem_prelude", NULL);
+
+#endif
+
+}
diff --git a/builtin.h b/builtin.h
new file mode 100644
index 0000000000..fd1c4c307f
--- /dev/null
+++ b/builtin.h
@@ -0,0 +1,125 @@
+#ifndef BUILTIN_H_INCLUDED
+#define BUILTIN_H_INCLUDED
+
+// invoke
+
+struct rb_builtin_function {
+ // for invocation
+ const void * const func_ptr;
+ const int argc;
+
+ // for load
+ const int index;
+ const char * const name;
+};
+
+#define RB_BUILTIN_FUNCTION(_i, _name, _fname, _arity) {\
+ .name = _i < 0 ? NULL : #_name, \
+ .func_ptr = (void *)(uintptr_t)_fname, \
+ .argc = _arity, \
+ .index = _i, \
+}
+
+void rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table);
+
+#ifndef rb_execution_context_t
+typedef struct rb_execution_context_struct rb_execution_context_t;
+#define rb_execution_context_t rb_execution_context_t
+#endif
+
+/* The following code is generated by the following Ruby script:
+
+typedef = proc {|i, args|
+ "typedef VALUE (*rb_builtin_arity#{i}_function_type)(rb_execution_context_t *ec, VALUE self#{args});"
+}
+puts typedef[0, ""]
+(1..15).each {|i|
+ puts typedef[i, ",\n " + (0...i).map{"VALUE"}.join(", ")]
+}
+16.times{|i|
+ puts "static inline void rb_builtin_function_check_arity#{i}(rb_builtin_arity#{i}_function_type f){}"
+}
+*/
+
+typedef VALUE (*rb_builtin_arity0_function_type)(rb_execution_context_t *ec, VALUE self);
+typedef VALUE (*rb_builtin_arity1_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE);
+typedef VALUE (*rb_builtin_arity2_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity3_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity4_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity5_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE, VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity6_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity7_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity8_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity9_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity10_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity11_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity12_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity13_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity14_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
+typedef VALUE (*rb_builtin_arity15_function_type)(rb_execution_context_t *ec, VALUE self,
+ VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
+static inline void rb_builtin_function_check_arity0(rb_builtin_arity0_function_type f){}
+static inline void rb_builtin_function_check_arity1(rb_builtin_arity1_function_type f){}
+static inline void rb_builtin_function_check_arity2(rb_builtin_arity2_function_type f){}
+static inline void rb_builtin_function_check_arity3(rb_builtin_arity3_function_type f){}
+static inline void rb_builtin_function_check_arity4(rb_builtin_arity4_function_type f){}
+static inline void rb_builtin_function_check_arity5(rb_builtin_arity5_function_type f){}
+static inline void rb_builtin_function_check_arity6(rb_builtin_arity6_function_type f){}
+static inline void rb_builtin_function_check_arity7(rb_builtin_arity7_function_type f){}
+static inline void rb_builtin_function_check_arity8(rb_builtin_arity8_function_type f){}
+static inline void rb_builtin_function_check_arity9(rb_builtin_arity9_function_type f){}
+static inline void rb_builtin_function_check_arity10(rb_builtin_arity10_function_type f){}
+static inline void rb_builtin_function_check_arity11(rb_builtin_arity11_function_type f){}
+static inline void rb_builtin_function_check_arity12(rb_builtin_arity12_function_type f){}
+static inline void rb_builtin_function_check_arity13(rb_builtin_arity13_function_type f){}
+static inline void rb_builtin_function_check_arity14(rb_builtin_arity14_function_type f){}
+static inline void rb_builtin_function_check_arity15(rb_builtin_arity15_function_type f){}
+
+PUREFUNC(VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index));
+VALUE rb_vm_lvar_exposed(rb_execution_context_t *ec, int index);
+
+// __builtin_inline!
+
+PUREFUNC(static inline VALUE rb_vm_lvar(rb_execution_context_t *ec, int index));
+
+static inline VALUE
+rb_vm_lvar(rb_execution_context_t *ec, int index)
+{
+#if defined(VM_CORE_H_EC_DEFINED) && VM_CORE_H_EC_DEFINED
+ return ec->cfp->ep[index];
+#else
+ return rb_vm_lvar_exposed(ec, index);
+#endif
+}
+
+static inline VALUE
+rb_builtin_basic_definition_p(rb_execution_context_t *ec, VALUE klass, VALUE id_sym)
+{
+ return rb_method_basic_definition_p(klass, rb_sym2id(id_sym)) ? Qtrue : Qfalse;
+}
+
+#define LOCAL_PTR(local) local ## __ptr
+
+// dump/load
+
+struct builtin_binary {
+ const char *feature; // feature name
+ const unsigned char *bin; // binary by ISeq#to_binary
+ size_t bin_size;
+};
+
+#endif // BUILTIN_H_INCLUDED
diff --git a/ccan/build_assert/build_assert.h b/ccan/build_assert/build_assert.h
index a04d1d4709..b846849241 100644
--- a/ccan/build_assert/build_assert.h
+++ b/ccan/build_assert/build_assert.h
@@ -3,7 +3,7 @@
#define CCAN_BUILD_ASSERT_H
/**
- * BUILD_ASSERT - assert a build-time dependency.
+ * CCAN_BUILD_ASSERT - assert a build-time dependency.
* @cond: the compile-time condition which must be true.
*
* Your compile will fail if the condition isn't true, or can't be evaluated
@@ -15,15 +15,15 @@
* static char *foo_to_char(struct foo *foo)
* {
* // This code needs string to be at start of foo.
- * BUILD_ASSERT(offsetof(struct foo, string) == 0);
+ * CCAN_BUILD_ASSERT(offsetof(struct foo, string) == 0);
* return (char *)foo;
* }
*/
-#define BUILD_ASSERT(cond) \
+#define CCAN_BUILD_ASSERT(cond) \
do { (void) sizeof(char [1 - 2*!(cond)]); } while(0)
/**
- * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression.
+ * CCAN_BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression.
* @cond: the compile-time condition which must be true.
*
* Your compile will fail if the condition isn't true, or can't be evaluated
@@ -32,9 +32,9 @@
* Example:
* #define foo_to_char(foo) \
* ((char *)(foo) \
- * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0))
+ * + CCAN_BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0))
*/
-#define BUILD_ASSERT_OR_ZERO(cond) \
+#define CCAN_BUILD_ASSERT_OR_ZERO(cond) \
(sizeof(char [1 - 2*!(cond)]) - 1)
#endif /* CCAN_BUILD_ASSERT_H */
diff --git a/ccan/check_type/check_type.h b/ccan/check_type/check_type.h
index 1f77a535e4..659e1a5a83 100644
--- a/ccan/check_type/check_type.h
+++ b/ccan/check_type/check_type.h
@@ -3,7 +3,7 @@
#define CCAN_CHECK_TYPE_H
/**
- * check_type - issue a warning or build failure if type is not correct.
+ * ccan_check_type - issue a warning or build failure if type is not correct.
* @expr: the expression whose type we should check (not evaluated).
* @type: the exact type we expect the expression to be.
*
@@ -11,7 +11,7 @@
* argument is of the expected type. No type promotion of the expression is
* done: an unsigned int is not the same as an int!
*
- * check_type() always evaluates to 0.
+ * ccan_check_type() always evaluates to 0.
*
* If your compiler does not support typeof, then the best we can do is fail
* to compile if the sizes of the types are unequal (a less complete check).
@@ -19,11 +19,11 @@
* Example:
* // They should always pass a 64-bit value to _set_some_value!
* #define set_some_value(expr) \
- * _set_some_value((check_type((expr), uint64_t), (expr)))
+ * _set_some_value((ccan_check_type((expr), uint64_t), (expr)))
*/
/**
- * check_types_match - issue a warning or build failure if types are not same.
+ * ccan_check_types_match - issue a warning or build failure if types are not same.
* @expr1: the first expression (not evaluated).
* @expr2: the second expression (not evaluated).
*
@@ -31,7 +31,7 @@
* arguments are of identical types. No type promotion of the expressions is
* done: an unsigned int is not the same as an int!
*
- * check_types_match() always evaluates to 0.
+ * ccan_check_types_match() always evaluates to 0.
*
* If your compiler does not support typeof, then the best we can do is fail
* to compile if the sizes of the types are unequal (a less complete check).
@@ -39,25 +39,25 @@
* Example:
* // Do subtraction to get to enclosing type, but make sure that
* // pointer is of correct type for that member.
- * #define container_of(mbr_ptr, encl_type, mbr) \
- * (check_types_match((mbr_ptr), &((encl_type *)0)->mbr), \
+ * #define ccan_container_of(mbr_ptr, encl_type, mbr) \
+ * (ccan_check_types_match((mbr_ptr), &((encl_type *)0)->mbr), \
* ((encl_type *) \
* ((char *)(mbr_ptr) - offsetof(enclosing_type, mbr))))
*/
-#if HAVE_TYPEOF
-#define check_type(expr, type) \
+#if defined(HAVE_TYPEOF) && HAVE_TYPEOF
+#define ccan_check_type(expr, type) \
((typeof(expr) *)0 != (type *)0)
-#define check_types_match(expr1, expr2) \
+#define ccan_check_types_match(expr1, expr2) \
((typeof(expr1) *)0 != (typeof(expr2) *)0)
#else
#include "ccan/build_assert/build_assert.h"
/* Without typeof, we can only test the sizes. */
-#define check_type(expr, type) \
- BUILD_ASSERT_OR_ZERO(sizeof(expr) == sizeof(type))
+#define ccan_check_type(expr, type) \
+ CCAN_BUILD_ASSERT_OR_ZERO(sizeof(expr) == sizeof(type))
-#define check_types_match(expr1, expr2) \
- BUILD_ASSERT_OR_ZERO(sizeof(expr1) == sizeof(expr2))
+#define ccan_check_types_match(expr1, expr2) \
+ CCAN_BUILD_ASSERT_OR_ZERO(sizeof(expr1) == sizeof(expr2))
#endif /* HAVE_TYPEOF */
#endif /* CCAN_CHECK_TYPE_H */
diff --git a/ccan/container_of/container_of.h b/ccan/container_of/container_of.h
index ae3e1fc81f..872bb6ea6e 100644
--- a/ccan/container_of/container_of.h
+++ b/ccan/container_of/container_of.h
@@ -4,7 +4,7 @@
#include "ccan/check_type/check_type.h"
/**
- * container_of - get pointer to enclosing structure
+ * ccan_container_of - get pointer to enclosing structure
* @member_ptr: pointer to the structure member
* @containing_type: the type this member is within
* @member: the name of this member within the structure.
@@ -24,18 +24,18 @@
*
* static struct info *foo_to_info(struct foo *foo)
* {
- * return container_of(foo, struct info, my_foo);
+ * return ccan_container_of(foo, struct info, my_foo);
* }
*/
-#define container_of(member_ptr, containing_type, member) \
+#define ccan_container_of(member_ptr, containing_type, member) \
((containing_type *) \
((char *)(member_ptr) \
- - container_off(containing_type, member)) \
- + check_types_match(*(member_ptr), ((containing_type *)0)->member))
+ - ccan_container_off(containing_type, member)) \
+ + ccan_check_types_match(*(member_ptr), ((containing_type *)0)->member))
/**
- * container_of_or_null - get pointer to enclosing structure, or NULL
+ * ccan_container_of_or_null - get pointer to enclosing structure, or NULL
* @member_ptr: pointer to the structure member
* @containing_type: the type this member is within
* @member: the name of this member within the structure.
@@ -56,21 +56,21 @@
*
* static struct info *foo_to_info_allowing_null(struct foo *foo)
* {
- * return container_of_or_null(foo, struct info, my_foo);
+ * return ccan_container_of_or_null(foo, struct info, my_foo);
* }
*/
static inline char *container_of_or_null_(void *member_ptr, size_t offset)
{
return member_ptr ? (char *)member_ptr - offset : NULL;
}
-#define container_of_or_null(member_ptr, containing_type, member) \
+#define ccan_container_of_or_null(member_ptr, containing_type, member) \
((containing_type *) \
- container_of_or_null_(member_ptr, \
- container_off(containing_type, member)) \
- + check_types_match(*(member_ptr), ((containing_type *)0)->member))
+ ccan_container_of_or_null_(member_ptr, \
+ ccan_container_off(containing_type, member)) \
+ + ccan_check_types_match(*(member_ptr), ((containing_type *)0)->member))
/**
- * container_off - get offset to enclosing structure
+ * ccan_container_off - get offset to enclosing structure
* @containing_type: the type this member is within
* @member: the name of this member within the structure.
*
@@ -89,15 +89,15 @@ static inline char *container_of_or_null_(void *member_ptr, size_t offset)
*
* static struct info *foo_to_info(struct foo *foo)
* {
- * size_t off = container_off(struct info, my_foo);
+ * size_t off = ccan_container_off(struct info, my_foo);
* return (void *)((char *)foo - off);
* }
*/
-#define container_off(containing_type, member) \
+#define ccan_container_off(containing_type, member) \
offsetof(containing_type, member)
/**
- * container_of_var - get pointer to enclosing structure using a variable
+ * ccan_container_of_var - get pointer to enclosing structure using a variable
* @member_ptr: pointer to the structure member
* @container_var: a pointer of same type as this member's container
* @member: the name of this member within the structure.
@@ -108,21 +108,21 @@ static inline char *container_of_or_null_(void *member_ptr, size_t offset)
* Example:
* static struct info *foo_to_i(struct foo *foo)
* {
- * struct info *i = container_of_var(foo, i, my_foo);
+ * struct info *i = ccan_container_of_var(foo, i, my_foo);
* return i;
* }
*/
-#if HAVE_TYPEOF
-#define container_of_var(member_ptr, container_var, member) \
- container_of(member_ptr, typeof(*container_var), member)
+#if defined(HAVE_TYPEOF) && HAVE_TYPEOF
+#define ccan_container_of_var(member_ptr, container_var, member) \
+ ccan_container_of(member_ptr, typeof(*container_var), member)
#else
-#define container_of_var(member_ptr, container_var, member) \
+#define ccan_container_of_var(member_ptr, container_var, member) \
((void *)((char *)(member_ptr) - \
- container_off_var(container_var, member)))
+ ccan_container_off_var(container_var, member)))
#endif
/**
- * container_off_var - get offset of a field in enclosing structure
+ * ccan_container_off_var - get offset of a field in enclosing structure
* @container_var: a pointer to a container structure
* @member: the name of a member within the structure.
*
@@ -131,11 +131,11 @@ static inline char *container_of_or_null_(void *member_ptr, size_t offset)
* structure memory layout.
*
*/
-#if HAVE_TYPEOF
-#define container_off_var(var, member) \
- container_off(typeof(*var), member)
+#if defined(HAVE_TYPEOF) && HAVE_TYPEOF
+#define ccan_container_off_var(var, member) \
+ ccan_container_off(typeof(*var), member)
#else
-#define container_off_var(var, member) \
+#define ccan_container_off_var(var, member) \
((const char *)&(var)->member - (const char *)(var))
#endif
diff --git a/ccan/list/list.h b/ccan/list/list.h
index ca9f9f1f7f..bf692a6937 100644
--- a/ccan/list/list.h
+++ b/ccan/list/list.h
@@ -7,7 +7,7 @@
#include "ccan/check_type/check_type.h"
/**
- * struct list_node - an entry in a doubly-linked list
+ * struct ccan_list_node - an entry in a doubly-linked list
* @next: next entry (self if empty)
* @prev: previous entry (self if empty)
*
@@ -16,209 +16,209 @@
* struct child {
* const char *name;
* // Linked list of all us children.
- * struct list_node list;
+ * struct ccan_list_node list;
* };
*/
-struct list_node
+struct ccan_list_node
{
- struct list_node *next, *prev;
+ struct ccan_list_node *next, *prev;
};
/**
- * struct list_head - the head of a doubly-linked list
- * @h: the list_head (containing next and prev pointers)
+ * struct ccan_list_head - the head of a doubly-linked list
+ * @h: the ccan_list_head (containing next and prev pointers)
*
* This is used as the head of a linked list.
* Example:
* struct parent {
* const char *name;
- * struct list_head children;
+ * struct ccan_list_head children;
* unsigned int num_children;
* };
*/
-struct list_head
+struct ccan_list_head
{
- struct list_node n;
+ struct ccan_list_node n;
};
-#define LIST_LOC __FILE__ ":" stringify(__LINE__)
-#define list_debug(h, loc) ((void)loc, h)
-#define list_debug_node(n, loc) ((void)loc, n)
+#define CCAN_LIST_LOC __FILE__ ":" ccan_stringify(__LINE__)
+#define ccan_list_debug(h, loc) ((void)loc, h)
+#define ccan_list_debug_node(n, loc) ((void)loc, n)
/**
- * LIST_HEAD_INIT - initializer for an empty list_head
+ * CCAN_LIST_HEAD_INIT - initializer for an empty ccan_list_head
* @name: the name of the list.
*
* Explicit initializer for an empty list.
*
* See also:
- * LIST_HEAD, list_head_init()
+ * CCAN_LIST_HEAD, ccan_list_head_init()
*
* Example:
- * static struct list_head my_list = LIST_HEAD_INIT(my_list);
+ * static struct ccan_list_head my_list = CCAN_LIST_HEAD_INIT(my_list);
*/
-#define LIST_HEAD_INIT(name) { { &name.n, &name.n } }
+#define CCAN_LIST_HEAD_INIT(name) { { &(name).n, &(name).n } }
/**
- * LIST_HEAD - define and initialize an empty list_head
+ * CCAN_LIST_HEAD - define and initialize an empty ccan_list_head
* @name: the name of the list.
*
- * The LIST_HEAD macro defines a list_head and initializes it to an empty
- * list. It can be prepended by "static" to define a static list_head.
+ * The CCAN_LIST_HEAD macro defines a ccan_list_head and initializes it to an empty
+ * list. It can be prepended by "static" to define a static ccan_list_head.
*
* See also:
- * LIST_HEAD_INIT, list_head_init()
+ * CCAN_LIST_HEAD_INIT, ccan_list_head_init()
*
* Example:
- * static LIST_HEAD(my_global_list);
+ * static CCAN_LIST_HEAD(my_global_list);
*/
-#define LIST_HEAD(name) \
- struct list_head name = LIST_HEAD_INIT(name)
+#define CCAN_LIST_HEAD(name) \
+ struct ccan_list_head name = CCAN_LIST_HEAD_INIT(name)
/**
- * list_head_init - initialize a list_head
- * @h: the list_head to set to the empty list
+ * ccan_list_head_init - initialize a ccan_list_head
+ * @h: the ccan_list_head to set to the empty list
*
* Example:
* ...
* struct parent *parent = malloc(sizeof(*parent));
*
- * list_head_init(&parent->children);
+ * ccan_list_head_init(&parent->children);
* parent->num_children = 0;
*/
-static inline void list_head_init(struct list_head *h)
+static inline void ccan_list_head_init(struct ccan_list_head *h)
{
h->n.next = h->n.prev = &h->n;
}
/**
- * list_node_init - initialize a list_node
- * @n: the list_node to link to itself.
+ * ccan_list_node_init - initialize a ccan_list_node
+ * @n: the ccan_list_node to link to itself.
*
- * You don't need to use this normally! But it lets you list_del(@n)
+ * You don't need to use this normally! But it lets you ccan_list_del(@n)
* safely.
*/
-static inline void list_node_init(struct list_node *n)
+static inline void ccan_list_node_init(struct ccan_list_node *n)
{
n->next = n->prev = n;
}
/**
- * list_add_after - add an entry after an existing node in a linked list
- * @h: the list_head to add the node to (for debugging)
- * @p: the existing list_node to add the node after
- * @n: the new list_node to add to the list.
+ * ccan_list_add_after - add an entry after an existing node in a linked list
+ * @h: the ccan_list_head to add the node to (for debugging)
+ * @p: the existing ccan_list_node to add the node after
+ * @n: the new ccan_list_node to add to the list.
*
- * The existing list_node must already be a member of the list.
- * The new list_node does not need to be initialized; it will be overwritten.
+ * The existing ccan_list_node must already be a member of the list.
+ * The new ccan_list_node does not need to be initialized; it will be overwritten.
*
* Example:
* struct child c1, c2, c3;
- * LIST_HEAD(h);
+ * CCAN_LIST_HEAD(h);
*
- * list_add_tail(&h, &c1.list);
- * list_add_tail(&h, &c3.list);
- * list_add_after(&h, &c1.list, &c2.list);
+ * ccan_list_add_tail(&h, &c1.list);
+ * ccan_list_add_tail(&h, &c3.list);
+ * ccan_list_add_after(&h, &c1.list, &c2.list);
*/
-#define list_add_after(h, p, n) list_add_after_(h, p, n, LIST_LOC)
-static inline void list_add_after_(struct list_head *h,
- struct list_node *p,
- struct list_node *n,
+#define ccan_list_add_after(h, p, n) ccan_list_add_after_(h, p, n, CCAN_LIST_LOC)
+static inline void ccan_list_add_after_(struct ccan_list_head *h,
+ struct ccan_list_node *p,
+ struct ccan_list_node *n,
const char *abortstr)
{
n->next = p->next;
n->prev = p;
p->next->prev = n;
p->next = n;
- (void)list_debug(h, abortstr);
+ (void)ccan_list_debug(h, abortstr);
}
/**
- * list_add - add an entry at the start of a linked list.
- * @h: the list_head to add the node to
- * @n: the list_node to add to the list.
+ * ccan_list_add - add an entry at the start of a linked list.
+ * @h: the ccan_list_head to add the node to
+ * @n: the ccan_list_node to add to the list.
*
- * The list_node does not need to be initialized; it will be overwritten.
+ * The ccan_list_node does not need to be initialized; it will be overwritten.
* Example:
* struct child *child = malloc(sizeof(*child));
*
* child->name = "marvin";
- * list_add(&parent->children, &child->list);
+ * ccan_list_add(&parent->children, &child->list);
* parent->num_children++;
*/
-#define list_add(h, n) list_add_(h, n, LIST_LOC)
-static inline void list_add_(struct list_head *h,
- struct list_node *n,
+#define ccan_list_add(h, n) ccan_list_add_(h, n, CCAN_LIST_LOC)
+static inline void ccan_list_add_(struct ccan_list_head *h,
+ struct ccan_list_node *n,
const char *abortstr)
{
- list_add_after_(h, &h->n, n, abortstr);
+ ccan_list_add_after_(h, &h->n, n, abortstr);
}
/**
- * list_add_before - add an entry before an existing node in a linked list
- * @h: the list_head to add the node to (for debugging)
- * @p: the existing list_node to add the node before
- * @n: the new list_node to add to the list.
+ * ccan_list_add_before - add an entry before an existing node in a linked list
+ * @h: the ccan_list_head to add the node to (for debugging)
+ * @p: the existing ccan_list_node to add the node before
+ * @n: the new ccan_list_node to add to the list.
*
- * The existing list_node must already be a member of the list.
- * The new list_node does not need to be initialized; it will be overwritten.
+ * The existing ccan_list_node must already be a member of the list.
+ * The new ccan_list_node does not need to be initialized; it will be overwritten.
*
* Example:
- * list_head_init(&h);
- * list_add_tail(&h, &c1.list);
- * list_add_tail(&h, &c3.list);
- * list_add_before(&h, &c3.list, &c2.list);
- */
-#define list_add_before(h, p, n) list_add_before_(h, p, n, LIST_LOC)
-static inline void list_add_before_(struct list_head *h,
- struct list_node *p,
- struct list_node *n,
+ * ccan_list_head_init(&h);
+ * ccan_list_add_tail(&h, &c1.list);
+ * ccan_list_add_tail(&h, &c3.list);
+ * ccan_list_add_before(&h, &c3.list, &c2.list);
+ */
+#define ccan_list_add_before(h, p, n) ccan_list_add_before_(h, p, n, CCAN_LIST_LOC)
+static inline void ccan_list_add_before_(struct ccan_list_head *h,
+ struct ccan_list_node *p,
+ struct ccan_list_node *n,
const char *abortstr)
{
n->next = p;
n->prev = p->prev;
p->prev->next = n;
p->prev = n;
- (void)list_debug(h, abortstr);
+ (void)ccan_list_debug(h, abortstr);
}
/**
- * list_add_tail - add an entry at the end of a linked list.
- * @h: the list_head to add the node to
- * @n: the list_node to add to the list.
+ * ccan_list_add_tail - add an entry at the end of a linked list.
+ * @h: the ccan_list_head to add the node to
+ * @n: the ccan_list_node to add to the list.
*
- * The list_node does not need to be initialized; it will be overwritten.
+ * The ccan_list_node does not need to be initialized; it will be overwritten.
* Example:
- * list_add_tail(&parent->children, &child->list);
+ * ccan_list_add_tail(&parent->children, &child->list);
* parent->num_children++;
*/
-#define list_add_tail(h, n) list_add_tail_(h, n, LIST_LOC)
-static inline void list_add_tail_(struct list_head *h,
- struct list_node *n,
+#define ccan_list_add_tail(h, n) ccan_list_add_tail_(h, n, CCAN_LIST_LOC)
+static inline void ccan_list_add_tail_(struct ccan_list_head *h,
+ struct ccan_list_node *n,
const char *abortstr)
{
- list_add_before_(h, &h->n, n, abortstr);
+ ccan_list_add_before_(h, &h->n, n, abortstr);
}
/**
- * list_empty - is a list empty?
- * @h: the list_head
+ * ccan_list_empty - is a list empty?
+ * @h: the ccan_list_head
*
* If the list is empty, returns true.
*
* Example:
- * assert(list_empty(&parent->children) == (parent->num_children == 0));
+ * assert(ccan_list_empty(&parent->children) == (parent->num_children == 0));
*/
-#define list_empty(h) list_empty_(h, LIST_LOC)
-static inline int list_empty_(const struct list_head *h, const char* abortstr)
+#define ccan_list_empty(h) ccan_list_empty_(h, CCAN_LIST_LOC)
+static inline int ccan_list_empty_(const struct ccan_list_head *h, const char* abortstr)
{
- (void)list_debug(h, abortstr);
+ (void)ccan_list_debug(h, abortstr);
return h->n.next == &h->n;
}
/**
- * list_empty_nodebug - is a list empty (and don't perform debug checks)?
- * @h: the list_head
+ * ccan_list_empty_nodebug - is a list empty (and don't perform debug checks)?
+ * @h: the ccan_list_head
*
* If the list is empty, returns true.
* This differs from list_empty() in that if CCAN_LIST_DEBUG is set it
@@ -226,35 +226,50 @@ static inline int list_empty_(const struct list_head *h, const char* abortstr)
* know what you're doing.
*
* Example:
- * assert(list_empty_nodebug(&parent->children) == (parent->num_children == 0));
+ * assert(ccan_list_empty_nodebug(&parent->children) == (parent->num_children == 0));
*/
#ifndef CCAN_LIST_DEBUG
-#define list_empty_nodebug(h) list_empty(h)
+#define ccan_list_empty_nodebug(h) ccan_list_empty(h)
#else
-static inline int list_empty_nodebug(const struct list_head *h)
+static inline int ccan_list_empty_nodebug(const struct ccan_list_head *h)
{
return h->n.next == &h->n;
}
#endif
/**
- * list_del - delete an entry from an (unknown) linked list.
- * @n: the list_node to delete from the list.
+ * ccan_list_empty_nocheck - is a list empty?
+ * @h: the ccan_list_head
+ *
+ * If the list is empty, returns true. This doesn't perform any
+ * debug check for list consistency, so it can be called without
+ * locks, racing with the list being modified. This is ok for
+ * checks where an incorrect result is not an issue (optimized
+ * bail out path for example).
+ */
+static inline bool ccan_list_empty_nocheck(const struct ccan_list_head *h)
+{
+ return h->n.next == &h->n;
+}
+
+/**
+ * ccan_list_del - delete an entry from an (unknown) linked list.
+ * @n: the ccan_list_node to delete from the list.
*
* Note that this leaves @n in an undefined state; it can be added to
* another list, but not deleted again.
*
* See also:
- * list_del_from(), list_del_init()
+ * ccan_list_del_from(), ccan_list_del_init()
*
* Example:
- * list_del(&child->list);
+ * ccan_list_del(&child->list);
* parent->num_children--;
*/
-#define list_del(n) list_del_(n, LIST_LOC)
-static inline void list_del_(struct list_node *n, const char* abortstr)
+#define ccan_list_del(n) ccan_list_del_(n, CCAN_LIST_LOC)
+static inline void ccan_list_del_(struct ccan_list_node *n, const char* abortstr)
{
- (void)list_debug_node(n, abortstr);
+ (void)ccan_list_debug_node(n, abortstr);
n->next->prev = n->prev;
n->prev->next = n->next;
#ifdef CCAN_LIST_DEBUG
@@ -264,80 +279,80 @@ static inline void list_del_(struct list_node *n, const char* abortstr)
}
/**
- * list_del_init - delete a node, and reset it so it can be deleted again.
- * @n: the list_node to be deleted.
+ * ccan_list_del_init - delete a node, and reset it so it can be deleted again.
+ * @n: the ccan_list_node to be deleted.
*
- * list_del(@n) or list_del_init() again after this will be safe,
+ * ccan_list_del(@n) or ccan_list_del_init() again after this will be safe,
* which can be useful in some cases.
*
* See also:
- * list_del_from(), list_del()
+ * ccan_list_del_from(), ccan_list_del()
*
* Example:
- * list_del_init(&child->list);
+ * ccan_list_del_init(&child->list);
* parent->num_children--;
*/
-#define list_del_init(n) list_del_init_(n, LIST_LOC)
-static inline void list_del_init_(struct list_node *n, const char *abortstr)
+#define ccan_list_del_init(n) ccan_list_del_init_(n, CCAN_LIST_LOC)
+static inline void ccan_list_del_init_(struct ccan_list_node *n, const char *abortstr)
{
- list_del_(n, abortstr);
- list_node_init(n);
+ ccan_list_del_(n, abortstr);
+ ccan_list_node_init(n);
}
/**
- * list_del_from - delete an entry from a known linked list.
- * @h: the list_head the node is in.
- * @n: the list_node to delete from the list.
+ * ccan_list_del_from - delete an entry from a known linked list.
+ * @h: the ccan_list_head the node is in.
+ * @n: the ccan_list_node to delete from the list.
*
* This explicitly indicates which list a node is expected to be in,
* which is better documentation and can catch more bugs.
*
- * See also: list_del()
+ * See also: ccan_list_del()
*
* Example:
- * list_del_from(&parent->children, &child->list);
+ * ccan_list_del_from(&parent->children, &child->list);
* parent->num_children--;
*/
-static inline void list_del_from(struct list_head *h, struct list_node *n)
+static inline void ccan_list_del_from(struct ccan_list_head *h, struct ccan_list_node *n)
{
#ifdef CCAN_LIST_DEBUG
{
/* Thorough check: make sure it was in list! */
- struct list_node *i;
+ struct ccan_list_node *i;
for (i = h->n.next; i != n; i = i->next)
assert(i != &h->n);
}
#endif /* CCAN_LIST_DEBUG */
/* Quick test that catches a surprising number of bugs. */
- assert(!list_empty(h));
- list_del(n);
+ assert(!ccan_list_empty(h));
+ ccan_list_del(n);
}
/**
- * list_swap - swap out an entry from an (unknown) linked list for a new one.
- * @o: the list_node to replace from the list.
- * @n: the list_node to insert in place of the old one.
+ * ccan_list_swap - swap out an entry from an (unknown) linked list for a new one.
+ * @o: the ccan_list_node to replace from the list.
+ * @n: the ccan_list_node to insert in place of the old one.
*
* Note that this leaves @o in an undefined state; it can be added to
* another list, but not deleted/swapped again.
*
* See also:
- * list_del()
+ * ccan_list_del()
*
* Example:
* struct child x1, x2;
- * LIST_HEAD(xh);
+ * CCAN_LIST_HEAD(xh);
*
- * list_add(&xh, &x1.list);
- * list_swap(&x1.list, &x2.list);
+ * ccan_list_add(&xh, &x1.list);
+ * ccan_list_swap(&x1.list, &x2.list);
*/
-#define list_swap(o, n) list_swap_(o, n, LIST_LOC)
-static inline void list_swap_(struct list_node *o,
- struct list_node *n,
+#define ccan_list_swap(o, n) ccan_list_swap_(o, n, CCAN_LIST_LOC)
+static inline void ccan_list_swap_(struct ccan_list_node *o,
+ struct ccan_list_node *n,
const char* abortstr)
{
- (void)list_debug_node(o, abortstr);
+ (void)ccan_list_debug_node(o, abortstr);
*n = *o;
n->next->prev = n;
n->prev->next = n;
@@ -348,135 +363,135 @@ static inline void list_swap_(struct list_node *o,
}
/**
- * list_entry - convert a list_node back into the structure containing it.
- * @n: the list_node
+ * ccan_list_entry - convert a ccan_list_node back into the structure containing it.
+ * @n: the ccan_list_node
* @type: the type of the entry
- * @member: the list_node member of the type
+ * @member: the ccan_list_node member of the type
*
* Example:
* // First list entry is children.next; convert back to child.
- * child = list_entry(parent->children.n.next, struct child, list);
+ * child = ccan_list_entry(parent->children.n.next, struct child, list);
*
* See Also:
- * list_top(), list_for_each()
+ * ccan_list_top(), ccan_list_for_each()
*/
-#define list_entry(n, type, member) container_of(n, type, member)
+#define ccan_list_entry(n, type, member) ccan_container_of(n, type, member)
/**
- * list_top - get the first entry in a list
- * @h: the list_head
+ * ccan_list_top - get the first entry in a list
+ * @h: the ccan_list_head
* @type: the type of the entry
- * @member: the list_node member of the type
+ * @member: the ccan_list_node member of the type
*
* If the list is empty, returns NULL.
*
* Example:
* struct child *first;
- * first = list_top(&parent->children, struct child, list);
+ * first = ccan_list_top(&parent->children, struct child, list);
* if (!first)
* printf("Empty list!\n");
*/
-#define list_top(h, type, member) \
- ((type *)list_top_((h), list_off_(type, member)))
+#define ccan_list_top(h, type, member) \
+ ((type *)ccan_list_top_((h), ccan_list_off_(type, member)))
-static inline const void *list_top_(const struct list_head *h, size_t off)
+static inline const void *ccan_list_top_(const struct ccan_list_head *h, size_t off)
{
- if (list_empty(h))
+ if (ccan_list_empty(h))
return NULL;
return (const char *)h->n.next - off;
}
/**
- * list_pop - remove the first entry in a list
- * @h: the list_head
+ * ccan_list_pop - remove the first entry in a list
+ * @h: the ccan_list_head
* @type: the type of the entry
- * @member: the list_node member of the type
+ * @member: the ccan_list_node member of the type
*
* If the list is empty, returns NULL.
*
* Example:
* struct child *one;
- * one = list_pop(&parent->children, struct child, list);
+ * one = ccan_list_pop(&parent->children, struct child, list);
* if (!one)
* printf("Empty list!\n");
*/
-#define list_pop(h, type, member) \
- ((type *)list_pop_((h), list_off_(type, member)))
+#define ccan_list_pop(h, type, member) \
+ ((type *)ccan_list_pop_((h), ccan_list_off_(type, member)))
-static inline const void *list_pop_(const struct list_head *h, size_t off)
+static inline const void *ccan_list_pop_(const struct ccan_list_head *h, size_t off)
{
- struct list_node *n;
+ struct ccan_list_node *n;
- if (list_empty(h))
+ if (ccan_list_empty(h))
return NULL;
n = h->n.next;
- list_del(n);
+ ccan_list_del(n);
return (const char *)n - off;
}
/**
- * list_tail - get the last entry in a list
- * @h: the list_head
+ * ccan_list_tail - get the last entry in a list
+ * @h: the ccan_list_head
* @type: the type of the entry
- * @member: the list_node member of the type
+ * @member: the ccan_list_node member of the type
*
* If the list is empty, returns NULL.
*
* Example:
* struct child *last;
- * last = list_tail(&parent->children, struct child, list);
+ * last = ccan_list_tail(&parent->children, struct child, list);
* if (!last)
* printf("Empty list!\n");
*/
-#define list_tail(h, type, member) \
- ((type *)list_tail_((h), list_off_(type, member)))
+#define ccan_list_tail(h, type, member) \
+ ((type *)ccan_list_tail_((h), ccan_list_off_(type, member)))
-static inline const void *list_tail_(const struct list_head *h, size_t off)
+static inline const void *ccan_list_tail_(const struct ccan_list_head *h, size_t off)
{
- if (list_empty(h))
+ if (ccan_list_empty(h))
return NULL;
return (const char *)h->n.prev - off;
}
/**
- * list_for_each - iterate through a list.
- * @h: the list_head (warning: evaluated multiple times!)
- * @i: the structure containing the list_node
- * @member: the list_node member of the structure
+ * ccan_list_for_each - iterate through a list.
+ * @h: the ccan_list_head (warning: evaluated multiple times!)
+ * @i: the structure containing the ccan_list_node
+ * @member: the ccan_list_node member of the structure
*
* This is a convenient wrapper to iterate @i over the entire list. It's
* a for loop, so you can break and continue as normal.
*
* Example:
- * list_for_each(&parent->children, child, list)
+ * ccan_list_for_each(&parent->children, child, list)
* printf("Name: %s\n", child->name);
*/
-#define list_for_each(h, i, member) \
- list_for_each_off(h, i, list_off_var_(i, member))
+#define ccan_list_for_each(h, i, member) \
+ ccan_list_for_each_off(h, i, ccan_list_off_var_(i, member))
/**
- * list_for_each_rev - iterate through a list backwards.
- * @h: the list_head
- * @i: the structure containing the list_node
- * @member: the list_node member of the structure
+ * ccan_list_for_each_rev - iterate through a list backwards.
+ * @h: the ccan_list_head
+ * @i: the structure containing the ccan_list_node
+ * @member: the ccan_list_node member of the structure
*
* This is a convenient wrapper to iterate @i over the entire list. It's
* a for loop, so you can break and continue as normal.
*
* Example:
- * list_for_each_rev(&parent->children, child, list)
+ * ccan_list_for_each_rev(&parent->children, child, list)
* printf("Name: %s\n", child->name);
*/
-#define list_for_each_rev(h, i, member) \
- list_for_each_rev_off(h, i, list_off_var_(i, member))
+#define ccan_list_for_each_rev(h, i, member) \
+ ccan_list_for_each_rev_off(h, i, ccan_list_off_var_(i, member))
/**
- * list_for_each_rev_safe - iterate through a list backwards,
+ * ccan_list_for_each_rev_safe - iterate through a list backwards,
* maybe during deletion
- * @h: the list_head
- * @i: the structure containing the list_node
- * @nxt: the structure containing the list_node
- * @member: the list_node member of the structure
+ * @h: the ccan_list_head
+ * @i: the structure containing the ccan_list_node
+ * @nxt: the structure containing the ccan_list_node
+ * @member: the ccan_list_node member of the structure
*
* This is a convenient wrapper to iterate @i over the entire list backwards.
* It's a for loop, so you can break and continue as normal. The extra
@@ -485,74 +500,74 @@ static inline const void *list_tail_(const struct list_head *h, size_t off)
*
* Example:
* struct child *next;
- * list_for_each_rev_safe(&parent->children, child, next, list) {
+ * ccan_list_for_each_rev_safe(&parent->children, child, next, list) {
* printf("Name: %s\n", child->name);
* }
*/
-#define list_for_each_rev_safe(h, i, nxt, member) \
- list_for_each_rev_safe_off(h, i, nxt, list_off_var_(i, member))
+#define ccan_list_for_each_rev_safe(h, i, nxt, member) \
+ ccan_list_for_each_rev_safe_off(h, i, nxt, ccan_list_off_var_(i, member))
/**
- * list_for_each_safe - iterate through a list, maybe during deletion
- * @h: the list_head
- * @i: the structure containing the list_node
- * @nxt: the structure containing the list_node
- * @member: the list_node member of the structure
+ * ccan_list_for_each_safe - iterate through a list, maybe during deletion
+ * @h: the ccan_list_head
+ * @i: the structure containing the ccan_list_node
+ * @nxt: the structure containing the ccan_list_node
+ * @member: the ccan_list_node member of the structure
*
* This is a convenient wrapper to iterate @i over the entire list. It's
* a for loop, so you can break and continue as normal. The extra variable
* @nxt is used to hold the next element, so you can delete @i from the list.
*
* Example:
- * list_for_each_safe(&parent->children, child, next, list) {
- * list_del(&child->list);
+ * ccan_list_for_each_safe(&parent->children, child, next, list) {
+ * ccan_list_del(&child->list);
* parent->num_children--;
* }
*/
-#define list_for_each_safe(h, i, nxt, member) \
- list_for_each_safe_off(h, i, nxt, list_off_var_(i, member))
+#define ccan_list_for_each_safe(h, i, nxt, member) \
+ ccan_list_for_each_safe_off(h, i, nxt, ccan_list_off_var_(i, member))
/**
- * list_next - get the next entry in a list
- * @h: the list_head
+ * ccan_list_next - get the next entry in a list
+ * @h: the ccan_list_head
* @i: a pointer to an entry in the list.
- * @member: the list_node member of the structure
+ * @member: the ccan_list_node member of the structure
*
* If @i was the last entry in the list, returns NULL.
*
* Example:
* struct child *second;
- * second = list_next(&parent->children, first, list);
+ * second = ccan_list_next(&parent->children, first, list);
* if (!second)
* printf("No second child!\n");
*/
-#define list_next(h, i, member) \
- ((list_typeof(i))list_entry_or_null(list_debug(h, \
- __FILE__ ":" stringify(__LINE__)), \
+#define ccan_list_next(h, i, member) \
+ ((ccan_list_typeof(i))ccan_list_entry_or_null(ccan_list_debug(h, \
+ __FILE__ ":" ccan_stringify(__LINE__)), \
(i)->member.next, \
- list_off_var_((i), member)))
+ ccan_list_off_var_((i), member)))
/**
- * list_prev - get the previous entry in a list
- * @h: the list_head
+ * ccan_list_prev - get the previous entry in a list
+ * @h: the ccan_list_head
* @i: a pointer to an entry in the list.
- * @member: the list_node member of the structure
+ * @member: the ccan_list_node member of the structure
*
* If @i was the first entry in the list, returns NULL.
*
* Example:
- * first = list_prev(&parent->children, second, list);
+ * first = ccan_list_prev(&parent->children, second, list);
* if (!first)
* printf("Can't go back to first child?!\n");
*/
-#define list_prev(h, i, member) \
- ((list_typeof(i))list_entry_or_null(list_debug(h, \
- __FILE__ ":" stringify(__LINE__)), \
+#define ccan_list_prev(h, i, member) \
+ ((ccan_list_typeof(i))ccan_list_entry_or_null(ccan_list_debug(h, \
+ __FILE__ ":" ccan_stringify(__LINE__)), \
(i)->member.prev, \
- list_off_var_((i), member)))
+ ccan_list_off_var_((i), member)))
/**
- * list_append_list - empty one list onto the end of another.
+ * ccan_list_append_list - empty one list onto the end of another.
* @to: the list to append into
* @from: the list to empty.
*
@@ -560,20 +575,20 @@ static inline const void *list_tail_(const struct list_head *h, size_t off)
* @to. After this @from will be empty.
*
* Example:
- * struct list_head adopter;
+ * struct ccan_list_head adopter;
*
- * list_append_list(&adopter, &parent->children);
- * assert(list_empty(&parent->children));
+ * ccan_list_append_list(&adopter, &parent->children);
+ * assert(ccan_list_empty(&parent->children));
* parent->num_children = 0;
*/
-#define list_append_list(t, f) list_append_list_(t, f, \
- __FILE__ ":" stringify(__LINE__))
-static inline void list_append_list_(struct list_head *to,
- struct list_head *from,
+#define ccan_list_append_list(t, f) ccan_list_append_list_(t, f, \
+ __FILE__ ":" ccan_stringify(__LINE__))
+static inline void ccan_list_append_list_(struct ccan_list_head *to,
+ struct ccan_list_head *from,
const char *abortstr)
{
- struct list_node *from_tail = list_debug(from, abortstr)->n.prev;
- struct list_node *to_tail = list_debug(to, abortstr)->n.prev;
+ struct ccan_list_node *from_tail = ccan_list_debug(from, abortstr)->n.prev;
+ struct ccan_list_node *to_tail = ccan_list_debug(to, abortstr)->n.prev;
/* Sew in head and entire list. */
to->n.prev = from_tail;
@@ -582,12 +597,12 @@ static inline void list_append_list_(struct list_head *to,
from->n.prev = to_tail;
/* Now remove head. */
- list_del(&from->n);
- list_head_init(from);
+ ccan_list_del(&from->n);
+ ccan_list_head_init(from);
}
/**
- * list_prepend_list - empty one list into the start of another.
+ * ccan_list_prepend_list - empty one list into the start of another.
* @to: the list to prepend into
* @from: the list to empty.
*
@@ -595,17 +610,17 @@ static inline void list_append_list_(struct list_head *to,
* of @to. After this @from will be empty.
*
* Example:
- * list_prepend_list(&adopter, &parent->children);
- * assert(list_empty(&parent->children));
+ * ccan_list_prepend_list(&adopter, &parent->children);
+ * assert(ccan_list_empty(&parent->children));
* parent->num_children = 0;
*/
-#define list_prepend_list(t, f) list_prepend_list_(t, f, LIST_LOC)
-static inline void list_prepend_list_(struct list_head *to,
- struct list_head *from,
+#define ccan_list_prepend_list(t, f) ccan_list_prepend_list_(t, f, CCAN_LIST_LOC)
+static inline void ccan_list_prepend_list_(struct ccan_list_head *to,
+ struct ccan_list_head *from,
const char *abortstr)
{
- struct list_node *from_tail = list_debug(from, abortstr)->n.prev;
- struct list_node *to_head = list_debug(to, abortstr)->n.next;
+ struct ccan_list_node *from_tail = ccan_list_debug(from, abortstr)->n.prev;
+ struct ccan_list_node *to_head = ccan_list_debug(to, abortstr)->n.next;
/* Sew in head and entire list. */
to->n.next = &from->n;
@@ -614,160 +629,163 @@ static inline void list_prepend_list_(struct list_head *to,
from_tail->next = to_head;
/* Now remove head. */
- list_del(&from->n);
- list_head_init(from);
+ ccan_list_del(&from->n);
+ ccan_list_head_init(from);
}
/* internal macros, do not use directly */
-#define list_for_each_off_dir_(h, i, off, dir) \
- for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \
+#define ccan_list_for_each_off_dir_(h, i, off, dir) \
+ for (i = 0, \
+ i = ccan_list_node_to_off_(ccan_list_debug(h, CCAN_LIST_LOC)->n.dir, \
(off)); \
- list_node_from_off_((void *)i, (off)) != &(h)->n; \
- i = list_node_to_off_(list_node_from_off_((void *)i, (off))->dir, \
+ ccan_list_node_from_off_((void *)i, (off)) != &(h)->n; \
+ i = ccan_list_node_to_off_(ccan_list_node_from_off_((void *)i, (off))->dir, \
(off)))
-#define list_for_each_safe_off_dir_(h, i, nxt, off, dir) \
- for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \
+#define ccan_list_for_each_safe_off_dir_(h, i, nxt, off, dir) \
+ for (i = 0, \
+ i = ccan_list_node_to_off_(ccan_list_debug(h, CCAN_LIST_LOC)->n.dir, \
(off)), \
- nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \
+ nxt = ccan_list_node_to_off_(ccan_list_node_from_off_(i, (off))->dir, \
(off)); \
- list_node_from_off_(i, (off)) != &(h)->n; \
+ ccan_list_node_from_off_(i, (off)) != &(h)->n; \
i = nxt, \
- nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \
+ nxt = ccan_list_node_to_off_(ccan_list_node_from_off_(i, (off))->dir, \
(off)))
/**
- * list_for_each_off - iterate through a list of memory regions.
- * @h: the list_head
- * @i: the pointer to a memory region wich contains list node data.
+ * ccan_list_for_each_off - iterate through a list of memory regions.
+ * @h: the ccan_list_head
+ * @i: the pointer to a memory region which contains list node data.
* @off: offset(relative to @i) at which list node data resides.
*
* This is a low-level wrapper to iterate @i over the entire list, used to
- * implement all oher, more high-level, for-each constructs. It's a for loop,
+ * implement all other, more high-level, for-each constructs. It's a for loop,
* so you can break and continue as normal.
*
* WARNING! Being the low-level macro that it is, this wrapper doesn't know
- * nor care about the type of @i. The only assumtion made is that @i points
+ * nor care about the type of @i. The only assumption made is that @i points
* to a chunk of memory that at some @offset, relative to @i, contains a
- * properly filled `struct node_list' which in turn contains pointers to
- * memory chunks and it's turtles all the way down. Whith all that in mind
+ * properly filled `struct ccan_list_node' which in turn contains pointers to
+ * memory chunks and it's turtles all the way down. With all that in mind
* remember that given the wrong pointer/offset couple this macro will
- * happilly churn all you memory untill SEGFAULT stops it, in other words
+ * happily churn all you memory until SEGFAULT stops it, in other words
* caveat emptor.
*
* It is worth mentioning that one of legitimate use-cases for that wrapper
- * is operation on opaque types with known offset for `struct list_node'
+ * is operation on opaque types with known offset for `struct ccan_list_node'
* member(preferably 0), because it allows you not to disclose the type of
* @i.
*
* Example:
- * list_for_each_off(&parent->children, child,
+ * ccan_list_for_each_off(&parent->children, child,
* offsetof(struct child, list))
* printf("Name: %s\n", child->name);
*/
-#define list_for_each_off(h, i, off) \
- list_for_each_off_dir_((h),(i),(off),next)
+#define ccan_list_for_each_off(h, i, off) \
+ ccan_list_for_each_off_dir_((h),(i),(off),next)
/**
- * list_for_each_rev_off - iterate through a list of memory regions backwards
- * @h: the list_head
- * @i: the pointer to a memory region wich contains list node data.
+ * ccan_list_for_each_rev_off - iterate through a list of memory regions backwards
+ * @h: the ccan_list_head
+ * @i: the pointer to a memory region which contains list node data.
* @off: offset(relative to @i) at which list node data resides.
*
- * See list_for_each_off for details
+ * See ccan_list_for_each_off for details
*/
-#define list_for_each_rev_off(h, i, off) \
- list_for_each_off_dir_((h),(i),(off),prev)
+#define ccan_list_for_each_rev_off(h, i, off) \
+ ccan_list_for_each_off_dir_((h),(i),(off),prev)
/**
- * list_for_each_safe_off - iterate through a list of memory regions, maybe
+ * ccan_list_for_each_safe_off - iterate through a list of memory regions, maybe
* during deletion
- * @h: the list_head
- * @i: the pointer to a memory region wich contains list node data.
- * @nxt: the structure containing the list_node
+ * @h: the ccan_list_head
+ * @i: the pointer to a memory region which contains list node data.
+ * @nxt: the structure containing the ccan_list_node
* @off: offset(relative to @i) at which list node data resides.
*
- * For details see `list_for_each_off' and `list_for_each_safe'
+ * For details see `ccan_list_for_each_off' and `ccan_list_for_each_safe'
* descriptions.
*
* Example:
- * list_for_each_safe_off(&parent->children, child,
+ * ccan_list_for_each_safe_off(&parent->children, child,
* next, offsetof(struct child, list))
* printf("Name: %s\n", child->name);
*/
-#define list_for_each_safe_off(h, i, nxt, off) \
- list_for_each_safe_off_dir_((h),(i),(nxt),(off),next)
+#define ccan_list_for_each_safe_off(h, i, nxt, off) \
+ ccan_list_for_each_safe_off_dir_((h),(i),(nxt),(off),next)
/**
- * list_for_each_rev_safe_off - iterate backwards through a list of
+ * ccan_list_for_each_rev_safe_off - iterate backwards through a list of
* memory regions, maybe during deletion
- * @h: the list_head
- * @i: the pointer to a memory region wich contains list node data.
- * @nxt: the structure containing the list_node
+ * @h: the ccan_list_head
+ * @i: the pointer to a memory region which contains list node data.
+ * @nxt: the structure containing the ccan_list_node
* @off: offset(relative to @i) at which list node data resides.
*
- * For details see `list_for_each_rev_off' and `list_for_each_rev_safe'
+ * For details see `ccan_list_for_each_rev_off' and `ccan_list_for_each_rev_safe'
* descriptions.
*
* Example:
- * list_for_each_rev_safe_off(&parent->children, child,
+ * ccan_list_for_each_rev_safe_off(&parent->children, child,
* next, offsetof(struct child, list))
* printf("Name: %s\n", child->name);
*/
-#define list_for_each_rev_safe_off(h, i, nxt, off) \
- list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev)
+#define ccan_list_for_each_rev_safe_off(h, i, nxt, off) \
+ ccan_list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev)
/* Other -off variants. */
-#define list_entry_off(n, type, off) \
- ((type *)list_node_from_off_((n), (off)))
+#define ccan_list_entry_off(n, type, off) \
+ ((type *)ccan_list_node_from_off_((n), (off)))
-#define list_head_off(h, type, off) \
- ((type *)list_head_off((h), (off)))
+#define ccan_list_head_off(h, type, off) \
+ ((type *)ccan_list_head_off((h), (off)))
-#define list_tail_off(h, type, off) \
- ((type *)list_tail_((h), (off)))
+#define ccan_list_tail_off(h, type, off) \
+ ((type *)ccan_list_tail_((h), (off)))
-#define list_add_off(h, n, off) \
- list_add((h), list_node_from_off_((n), (off)))
+#define ccan_list_add_off(h, n, off) \
+ ccan_list_add((h), ccan_list_node_from_off_((n), (off)))
-#define list_del_off(n, off) \
- list_del(list_node_from_off_((n), (off)))
+#define ccan_list_del_off(n, off) \
+ ccan_list_del(ccan_list_node_from_off_((n), (off)))
-#define list_del_from_off(h, n, off) \
- list_del_from(h, list_node_from_off_((n), (off)))
+#define ccan_list_del_from_off(h, n, off) \
+ ccan_list_del_from(h, ccan_list_node_from_off_((n), (off)))
/* Offset helper functions so we only single-evaluate. */
-static inline void *list_node_to_off_(struct list_node *node, size_t off)
+static inline void *ccan_list_node_to_off_(struct ccan_list_node *node, size_t off)
{
return (void *)((char *)node - off);
}
-static inline struct list_node *list_node_from_off_(void *ptr, size_t off)
+static inline struct ccan_list_node *ccan_list_node_from_off_(void *ptr, size_t off)
{
- return (struct list_node *)((char *)ptr + off);
+ return (struct ccan_list_node *)((char *)ptr + off);
}
-/* Get the offset of the member, but make sure it's a list_node. */
-#define list_off_(type, member) \
- (container_off(type, member) + \
- check_type(((type *)0)->member, struct list_node))
+/* Get the offset of the member, but make sure it's a ccan_list_node. */
+#define ccan_list_off_(type, member) \
+ (ccan_container_off(type, member) + \
+ ccan_check_type(((type *)0)->member, struct ccan_list_node))
-#define list_off_var_(var, member) \
- (container_off_var(var, member) + \
- check_type(var->member, struct list_node))
+#define ccan_list_off_var_(var, member) \
+ (ccan_container_off_var(var, member) + \
+ ccan_check_type(var->member, struct ccan_list_node))
-#if HAVE_TYPEOF
-#define list_typeof(var) typeof(var)
+#if defined(HAVE_TYPEOF) && HAVE_TYPEOF
+#define ccan_list_typeof(var) typeof(var)
#else
-#define list_typeof(var) void *
+#define ccan_list_typeof(var) void *
#endif
/* Returns member, or NULL if at end of list. */
-static inline void *list_entry_or_null(const struct list_head *h,
- const struct list_node *n,
+static inline void *ccan_list_entry_or_null(const struct ccan_list_head *h,
+ const struct ccan_list_node *n,
size_t off)
{
if (n == &h->n)
return NULL;
return (char *)n - off;
}
+
#endif /* CCAN_LIST_H */
diff --git a/ccan/str/str.h b/ccan/str/str.h
index 9a9da9cd3f..6d4cf62423 100644
--- a/ccan/str/str.h
+++ b/ccan/str/str.h
@@ -2,15 +2,16 @@
#ifndef CCAN_STR_H
#define CCAN_STR_H
/**
- * stringify - Turn expression into a string literal
+ * ccan_stringify - Turn expression into a string literal
* @expr: any C expression
*
* Example:
* #define PRINT_COND_IF_FALSE(cond) \
- * ((cond) || printf("%s is false!", stringify(cond)))
+ * ((cond) || printf("%s is false!", ccan_stringify(cond)))
*/
-#define stringify(expr) stringify_1(expr)
+#define stringify(expr) ccan_stringify_1(expr)
+#define ccan_stringify(expr) ccan_stringify_1(expr)
/* Double-indirection required to stringify expansions */
-#define stringify_1(expr) #expr
+#define ccan_stringify_1(expr) #expr
#endif /* CCAN_STR_H */
diff --git a/class.c b/class.c
index b4eaabc250..9c1bd86dc3 100644
--- a/class.c
+++ b/class.c
@@ -10,252 +10,994 @@
**********************************************************************/
/*!
- * \defgroup class Classes and their hierarchy.
- * \par Terminology
- * - class: same as in Ruby.
- * - singleton class: class for a particular object
- * - eigenclass: = singleton class
- * - metaclass: class of a class. metaclass is a kind of singleton class.
- * - metametaclass: class of a metaclass.
- * - meta^(n)-class: class of a meta^(n-1)-class.
- * - attached object: A singleton class knows its unique instance.
- * The instance is called the attached object for the singleton class.
+ * \addtogroup class
* \{
*/
+#include "ruby/internal/config.h"
+#include <ctype.h>
+
+#include "constant.h"
+#include "debug_counter.h"
+#include "id_table.h"
#include "internal.h"
+#include "internal/box.h"
+#include "internal/class.h"
+#include "internal/eval.h"
+#include "internal/hash.h"
+#include "internal/object.h"
+#include "internal/string.h"
+#include "internal/variable.h"
#include "ruby/st.h"
-#include "constant.h"
#include "vm_core.h"
-#include "id_table.h"
-#include <ctype.h>
+#include "ruby/ractor.h"
+#include "yjit.h"
+#include "zjit.h"
+
+/* Flags of T_CLASS
+ *
+ * 0: RCLASS_IS_ROOT
+ * The class has been added to the VM roots. Will always be marked and pinned.
+ * This is done for classes defined from C to allow storing them in global variables.
+ * 1: RUBY_FL_SINGLETON
+ * This class is a singleton class.
+ * 2: RCLASS_PRIME_CLASSEXT_PRIME_WRITABLE
+ * This class's prime classext is the only classext and writable from any boxes.
+ * If unset, the prime classext is writable only from the root box.
+ * 3: RCLASS_IS_INITIALIZED
+ * Class has been initialized.
+ * 4: RCLASS_BOXABLE
+ * Is a builtin class that may be boxed. It larger than a normal class.
+ */
-#define id_attached id__attached__
+/* Flags of T_ICLASS
+ *
+ * 2: RCLASS_PRIME_CLASSEXT_PRIME_WRITABLE
+ * This module's prime classext is the only classext and writable from any boxes.
+ * If unset, the prime classext is writable only from the root box.
+ * 4: RCLASS_BOXABLE
+ * Is a builtin class that may be boxed. It larger than a normal class.
+ */
+
+/* Flags of T_MODULE
+ *
+ * 0: RCLASS_IS_ROOT
+ * The class has been added to the VM roots. Will always be marked and pinned.
+ * This is done for classes defined from C to allow storing them in global variables.
+ * 1: <reserved>
+ * Ensures that RUBY_FL_SINGLETON is never set on a T_MODULE. See `rb_class_real`.
+ * 2: RCLASS_PRIME_CLASSEXT_PRIME_WRITABLE
+ * This module's prime classext is the only classext and writable from any boxes.
+ * If unset, the prime classext is writable only from the root box.
+ * 3: RCLASS_IS_INITIALIZED
+ * Module has been initialized.
+ * 4: RCLASS_BOXABLE
+ * Is a builtin class that may be boxed. It larger than a normal class.
+ * 5: RMODULE_IS_REFINEMENT
+ * Module is used for refinements.
+ */
+
+#define METACLASS_OF(k) RBASIC(k)->klass
+#define SET_METACLASS_OF(k, cls) RBASIC_SET_CLASS(k, cls)
+
+static enum rb_id_table_iterator_result
+cvar_table_free_i(VALUE value, void *ctx)
+{
+ xfree((void *)value);
+ return ID_TABLE_CONTINUE;
+}
+
+rb_classext_t *
+rb_class_unlink_classext(VALUE klass, const rb_box_t *box)
+{
+ st_data_t ext;
+ st_data_t key = (st_data_t)box->box_object;
+ VALUE obj_id = rb_obj_id(klass);
+ st_delete(box->classext_cow_classes, &obj_id, 0);
+ st_delete(RCLASS_CLASSEXT_TBL(klass), &key, &ext);
+ return (rb_classext_t *)ext;
+}
void
-rb_class_subclass_add(VALUE super, VALUE klass)
+rb_class_classext_free(VALUE klass, rb_classext_t *ext, bool is_prime)
{
- rb_subclass_entry_t *entry, *head;
+ struct rb_id_table *tbl;
+
+ rb_id_table_free(RCLASSEXT_M_TBL(ext));
+
+ if (!RCLASSEXT_SHARED_CONST_TBL(ext) && (tbl = RCLASSEXT_CONST_TBL(ext)) != NULL) {
+ rb_free_const_table(tbl);
+ }
+
+ if ((tbl = RCLASSEXT_CVC_TBL(ext)) != NULL) {
+ rb_id_table_foreach_values(tbl, cvar_table_free_i, NULL);
+ rb_id_table_free(tbl);
+ }
+
+ rb_class_classext_free_subclasses(ext, klass, false);
+
+ if (RCLASSEXT_SUPERCLASSES_WITH_SELF(ext)) {
+ RUBY_ASSERT(is_prime); // superclasses should only be used on prime
+ xfree(RCLASSEXT_SUPERCLASSES(ext));
+ }
+
+ if (!is_prime) { // the prime classext will be freed with RClass
+ xfree(ext);
+ }
+}
+
+void
+rb_iclass_classext_free(VALUE klass, rb_classext_t *ext, bool is_prime)
+{
+ if (RCLASSEXT_ICLASS_IS_ORIGIN(ext) && !RCLASSEXT_ICLASS_ORIGIN_SHARED_MTBL(ext)) {
+ /* Method table is not shared for origin iclasses of classes */
+ rb_id_table_free(RCLASSEXT_M_TBL(ext));
+ }
- if (super && super != Qundef) {
- entry = ALLOC(rb_subclass_entry_t);
- entry->klass = klass;
- entry->next = NULL;
+ if (RCLASSEXT_CALLABLE_M_TBL(ext) != NULL) {
+ rb_id_table_free(RCLASSEXT_CALLABLE_M_TBL(ext));
+ }
- head = RCLASS_EXT(super)->subclasses;
- if (head) {
- entry->next = head;
- RCLASS_EXT(head->klass)->parent_subclasses = &entry->next;
- }
+ rb_class_classext_free_subclasses(ext, klass, false);
- RCLASS_EXT(super)->subclasses = entry;
- RCLASS_EXT(klass)->parent_subclasses = &RCLASS_EXT(super)->subclasses;
+ if (!is_prime) { // the prime classext will be freed with RClass
+ xfree(ext);
}
}
static void
-rb_module_add_to_subclasses_list(VALUE module, VALUE iclass)
+iclass_free_orphan_classext(VALUE klass, rb_classext_t *ext)
{
- rb_subclass_entry_t *entry, *head;
+ if (RCLASSEXT_ICLASS_IS_ORIGIN(ext) && !RCLASSEXT_ICLASS_ORIGIN_SHARED_MTBL(ext)) {
+ /* Method table is not shared for origin iclasses of classes */
+ rb_id_table_free(RCLASSEXT_M_TBL(ext));
+ }
- entry = ALLOC(rb_subclass_entry_t);
- entry->klass = iclass;
- entry->next = NULL;
+ if (RCLASSEXT_CALLABLE_M_TBL(ext) != NULL) {
+ rb_id_table_free(RCLASSEXT_CALLABLE_M_TBL(ext));
+ }
+
+ rb_class_classext_free_subclasses(ext, klass, true); // replacing this classext with a newer one
+
+ xfree(ext);
+}
+
+struct rb_class_set_box_classext_args {
+ VALUE obj;
+ rb_classext_t *ext;
+};
- head = RCLASS_EXT(module)->subclasses;
- if (head) {
- entry->next = head;
- RCLASS_EXT(head->klass)->module_subclasses = &entry->next;
+static int
+set_box_classext_update(st_data_t *key_ptr, st_data_t *val_ptr, st_data_t a, int existing)
+{
+ struct rb_class_set_box_classext_args *args = (struct rb_class_set_box_classext_args *)a;
+
+ if (existing) {
+ if (LIKELY(BUILTIN_TYPE(args->obj) == T_ICLASS)) {
+ iclass_free_orphan_classext(args->obj, (rb_classext_t *)*val_ptr);
+ }
+ else {
+ rb_bug("Updating existing classext for non-iclass never happen");
+ }
}
- RCLASS_EXT(module)->subclasses = entry;
- RCLASS_EXT(iclass)->module_subclasses = &RCLASS_EXT(module)->subclasses;
+ *val_ptr = (st_data_t)args->ext;
+
+ return ST_CONTINUE;
}
void
-rb_class_remove_from_super_subclasses(VALUE klass)
+rb_class_set_box_classext(VALUE obj, const rb_box_t *box, rb_classext_t *ext)
+{
+ struct rb_class_set_box_classext_args args = {
+ .obj = obj,
+ .ext = ext,
+ };
+
+ VM_ASSERT(BOX_USER_P(box));
+
+ st_update(RCLASS_CLASSEXT_TBL(obj), (st_data_t)box->box_object, set_box_classext_update, (st_data_t)&args);
+ st_insert(box->classext_cow_classes, (st_data_t)rb_obj_id(obj), obj);
+
+ // FIXME: This is done here because this is the first time the objects in
+ // the classext are exposed via this class. It's likely that if GC
+ // compaction occurred between the VALUEs being copied in and this
+ // writebarrier trigger the values will be stale.
+ rb_gc_writebarrier_remember(obj);
+}
+
+RUBY_EXTERN rb_serial_t ruby_vm_global_cvar_state;
+
+struct duplicate_id_tbl_data {
+ struct rb_id_table *tbl;
+ VALUE klass;
+};
+
+static enum rb_id_table_iterator_result
+duplicate_classext_id_table_i(ID key, VALUE value, void *data)
{
- rb_subclass_entry_t *entry;
+ struct rb_id_table *tbl = (struct rb_id_table *)data;
+ rb_id_table_insert(tbl, key, value);
+ return ID_TABLE_CONTINUE;
+}
+
+static enum rb_id_table_iterator_result
+duplicate_classext_m_tbl_i(ID key, VALUE value, void *data)
+{
+ struct duplicate_id_tbl_data *arg = (struct duplicate_id_tbl_data *)data;
+ rb_method_entry_t *me = (rb_method_entry_t *)value;
+ rb_method_table_insert0(arg->klass, arg->tbl, key, me, false);
+ return ID_TABLE_CONTINUE;
+}
+
+static struct rb_id_table *
+duplicate_classext_m_tbl(struct rb_id_table *orig, VALUE klass, bool init_missing)
+{
+ struct rb_id_table *tbl;
+ if (!orig) {
+ if (init_missing)
+ return rb_id_table_create(0);
+ else
+ return NULL;
+ }
+ tbl = rb_id_table_create(rb_id_table_size(orig));
+ struct duplicate_id_tbl_data data = {
+ .tbl = tbl,
+ .klass = klass,
+ };
+ rb_id_table_foreach(orig, duplicate_classext_m_tbl_i, &data);
+ return tbl;
+}
- if (RCLASS_EXT(klass)->parent_subclasses) {
- entry = *RCLASS_EXT(klass)->parent_subclasses;
+static struct rb_id_table *
+duplicate_classext_id_table(struct rb_id_table *orig, bool init_missing)
+{
+ struct rb_id_table *tbl;
- *RCLASS_EXT(klass)->parent_subclasses = entry->next;
- if (entry->next) {
- RCLASS_EXT(entry->next->klass)->parent_subclasses = RCLASS_EXT(klass)->parent_subclasses;
- }
- xfree(entry);
+ if (!orig) {
+ if (init_missing)
+ return rb_id_table_create(0);
+ else
+ return NULL;
}
+ tbl = rb_id_table_create(rb_id_table_size(orig));
+ rb_id_table_foreach(orig, duplicate_classext_id_table_i, tbl);
+ return tbl;
+}
+
+static rb_const_entry_t *
+duplicate_classext_const_entry(rb_const_entry_t *src, VALUE klass)
+{
+ // See also: setup_const_entry (variable.c)
+ rb_const_entry_t *dst = ZALLOC(rb_const_entry_t);
+
+ dst->flag = src->flag;
+ dst->line = src->line;
+ RB_OBJ_WRITE(klass, &dst->value, src->value);
+ RB_OBJ_WRITE(klass, &dst->file, src->file);
- RCLASS_EXT(klass)->parent_subclasses = NULL;
+ return dst;
}
-void
-rb_class_remove_from_module_subclasses(VALUE klass)
+static enum rb_id_table_iterator_result
+duplicate_classext_const_tbl_i(ID key, VALUE value, void *data)
+{
+ struct duplicate_id_tbl_data *arg = (struct duplicate_id_tbl_data *)data;
+ rb_const_entry_t *entry = duplicate_classext_const_entry((rb_const_entry_t *)value, arg->klass);
+
+ rb_id_table_insert(arg->tbl, key, (VALUE)entry);
+
+ return ID_TABLE_CONTINUE;
+}
+
+static struct rb_id_table *
+duplicate_classext_const_tbl(struct rb_id_table *src, VALUE klass)
{
- rb_subclass_entry_t *entry;
+ struct rb_id_table *dst;
- if (RCLASS_EXT(klass)->module_subclasses) {
- entry = *RCLASS_EXT(klass)->module_subclasses;
- *RCLASS_EXT(klass)->module_subclasses = entry->next;
+ if (!src)
+ return NULL;
- if (entry->next) {
- RCLASS_EXT(entry->next->klass)->module_subclasses = RCLASS_EXT(klass)->module_subclasses;
- }
+ dst = rb_id_table_create(rb_id_table_size(src));
- xfree(entry);
+ struct duplicate_id_tbl_data data = {
+ .tbl = dst,
+ .klass = klass,
+ };
+ rb_id_table_foreach(src, duplicate_classext_const_tbl_i, (void *)&data);
+
+ return dst;
+}
+
+static VALUE
+box_subclasses_tbl_key(const rb_box_t *box)
+{
+ if (!box){
+ return 0;
}
+ return (VALUE)box->box_id;
+}
- RCLASS_EXT(klass)->module_subclasses = NULL;
+static void
+duplicate_classext_subclasses(rb_classext_t *orig, rb_classext_t *copy)
+{
+ rb_subclass_anchor_t *anchor, *orig_anchor;
+ rb_subclass_entry_t *head, *cur, *cdr, *entry, *first = NULL;
+ rb_box_subclasses_t *box_subclasses;
+ struct st_table *tbl;
+
+ if (RCLASSEXT_SUBCLASSES(orig)) {
+ orig_anchor = RCLASSEXT_SUBCLASSES(orig);
+ box_subclasses = orig_anchor->box_subclasses;
+ tbl = ((rb_box_subclasses_t *)box_subclasses)->tbl;
+
+ anchor = ZALLOC(rb_subclass_anchor_t);
+ anchor->box_subclasses = rb_box_subclasses_ref_inc(box_subclasses);
+
+ head = ZALLOC(rb_subclass_entry_t);
+ anchor->head = head;
+
+ RCLASSEXT_SUBCLASSES(copy) = anchor;
+
+ cur = head;
+ entry = orig_anchor->head;
+ RUBY_ASSERT(!entry->klass);
+ // The head entry has NULL klass always. See rb_class_foreach_subclass().
+ entry = entry->next;
+ while (entry) {
+ if (rb_objspace_garbage_object_p(entry->klass)) {
+ entry = entry->next;
+ continue;
+ }
+ cdr = ZALLOC(rb_subclass_entry_t);
+ cdr->klass = entry->klass;
+ cdr->prev = cur;
+ cur->next = cdr;
+ if (!first) {
+ VALUE box_id = box_subclasses_tbl_key(RCLASSEXT_BOX(copy));
+ first = cdr;
+ st_insert(tbl, box_id, (st_data_t)first);
+ }
+ cur = cdr;
+ entry = entry->next;
+ }
+ }
+
+ if (RCLASSEXT_BOX_SUPER_SUBCLASSES(orig))
+ RCLASSEXT_BOX_SUPER_SUBCLASSES(copy) = rb_box_subclasses_ref_inc(RCLASSEXT_BOX_SUPER_SUBCLASSES(orig));
+ if (RCLASSEXT_BOX_MODULE_SUBCLASSES(orig))
+ RCLASSEXT_BOX_MODULE_SUBCLASSES(copy) = rb_box_subclasses_ref_inc(RCLASSEXT_BOX_MODULE_SUBCLASSES(orig));
+}
+
+static void
+class_duplicate_iclass_classext(VALUE iclass, rb_classext_t *mod_ext, const rb_box_t *box)
+{
+ RUBY_ASSERT(RB_TYPE_P(iclass, T_ICLASS));
+
+ rb_classext_t *src = RCLASS_EXT_PRIME(iclass);
+ rb_classext_t *ext = RCLASS_EXT_TABLE_LOOKUP_INTERNAL(iclass, box);
+ int first_set = 0;
+
+ if (ext) {
+ // iclass classext for the ns is only for cc/callable_m_tbl if it's created earlier than module's one
+ rb_invalidate_method_caches(RCLASSEXT_CALLABLE_M_TBL(ext), RCLASSEXT_CC_TBL(ext));
+ }
+
+ ext = ZALLOC(rb_classext_t);
+
+ RCLASSEXT_BOX(ext) = box;
+
+ RCLASSEXT_SUPER(ext) = RCLASSEXT_SUPER(src);
+
+ // See also: rb_include_class_new()
+ if (RCLASSEXT_ICLASS_IS_ORIGIN(src) && !RCLASSEXT_ICLASS_ORIGIN_SHARED_MTBL(src)) {
+ RCLASSEXT_M_TBL(ext) = duplicate_classext_m_tbl(RCLASSEXT_M_TBL(src), iclass, true);
+ }
+ else {
+ RCLASSEXT_M_TBL(ext) = RCLASSEXT_M_TBL(mod_ext);
+ }
+
+ RCLASSEXT_CONST_TBL(ext) = RCLASSEXT_CONST_TBL(mod_ext);
+ RCLASSEXT_CVC_TBL(ext) = RCLASSEXT_CVC_TBL(mod_ext);
+
+ // Those are cache and should be recreated when methods are called
+ // RCLASSEXT_CALLABLE_M_TBL(ext) = NULL;
+ // RCLASSEXT_CC_TBL(ext) = NULL;
+
+ // subclasses, box_super_subclasses_tbl, box_module_subclasses_tbl
+ duplicate_classext_subclasses(src, ext);
+
+ RCLASSEXT_SET_ORIGIN(ext, iclass, RCLASSEXT_ORIGIN(src));
+ RCLASSEXT_ICLASS_IS_ORIGIN(ext) = RCLASSEXT_ICLASS_IS_ORIGIN(src);
+ RCLASSEXT_ICLASS_ORIGIN_SHARED_MTBL(ext) = RCLASSEXT_ICLASS_ORIGIN_SHARED_MTBL(src);
+
+ RCLASSEXT_SET_INCLUDER(ext, iclass, RCLASSEXT_INCLUDER(src));
+
+ VM_ASSERT(FL_TEST_RAW(iclass, RCLASS_BOXABLE));
+
+ first_set = RCLASS_SET_BOX_CLASSEXT(iclass, box, ext);
+ if (first_set) {
+ RCLASS_SET_PRIME_CLASSEXT_WRITABLE(iclass, false);
+ }
+}
+
+rb_classext_t *
+rb_class_duplicate_classext(rb_classext_t *orig, VALUE klass, const rb_box_t *box)
+{
+ VM_ASSERT(RB_TYPE_P(klass, T_CLASS) || RB_TYPE_P(klass, T_MODULE) || RB_TYPE_P(klass, T_ICLASS));
+
+ rb_classext_t *ext = ZALLOC(rb_classext_t);
+ bool dup_iclass = RB_TYPE_P(klass, T_MODULE) ? true : false;
+
+ RCLASSEXT_BOX(ext) = box;
+
+ RCLASSEXT_SUPER(ext) = RCLASSEXT_SUPER(orig);
+
+ RCLASSEXT_M_TBL(ext) = duplicate_classext_m_tbl(RCLASSEXT_M_TBL(orig), klass, dup_iclass);
+ RCLASSEXT_ICLASS_IS_ORIGIN(ext) = true;
+ RCLASSEXT_ICLASS_ORIGIN_SHARED_MTBL(ext) = false;
+
+ if (orig->fields_obj) {
+ RB_OBJ_WRITE(klass, &ext->fields_obj, rb_imemo_fields_clone(orig->fields_obj));
+ }
+
+ if (RCLASSEXT_SHARED_CONST_TBL(orig)) {
+ RCLASSEXT_CONST_TBL(ext) = RCLASSEXT_CONST_TBL(orig);
+ RCLASSEXT_SHARED_CONST_TBL(ext) = true;
+ }
+ else {
+ RCLASSEXT_CONST_TBL(ext) = duplicate_classext_const_tbl(RCLASSEXT_CONST_TBL(orig), klass);
+ RCLASSEXT_SHARED_CONST_TBL(ext) = false;
+ }
+ /*
+ * callable_m_tbl is for `super` chain, and entries will be created when the super chain is called.
+ * so initially, it can be NULL and let it be created lazily.
+ * RCLASSEXT_CALLABLE_M_TBL(ext) = NULL;
+ *
+ * cc_tbl is for method inline cache, and method calls from different boxes never occur on
+ * the same code, so the copied classext should have a different cc_tbl from the prime one.
+ * RCLASSEXT_CC_TBL(copy) = NULL
+ */
+
+ RCLASSEXT_CVC_TBL(ext) = duplicate_classext_id_table(RCLASSEXT_CVC_TBL(orig), dup_iclass);
+
+ // subclasses, subclasses_index
+ duplicate_classext_subclasses(orig, ext);
+
+ RCLASSEXT_SET_ORIGIN(ext, klass, RCLASSEXT_ORIGIN(orig));
+ /*
+ * Members not copied to box's classext values
+ * * refined_class
+ * * as.class.allocator / as.singleton_class.attached_object
+ * * includer
+ * * max IV count
+ * * variation count
+ */
+ RCLASSEXT_PERMANENT_CLASSPATH(ext) = RCLASSEXT_PERMANENT_CLASSPATH(orig);
+ RCLASSEXT_CLONED(ext) = RCLASSEXT_CLONED(orig);
+ RCLASSEXT_CLASSPATH(ext) = RCLASSEXT_CLASSPATH(orig);
+
+ /* For the usual T_CLASS/T_MODULE, iclass flags are always false */
+
+ if (dup_iclass) {
+ VALUE iclass;
+ /*
+ * ICLASS has the same m_tbl/const_tbl/cvc_tbl with the included module.
+ * So the module's classext is copied, its tables should be also referred
+ * by the ICLASS's classext for the box.
+ */
+ rb_subclass_anchor_t *anchor = RCLASSEXT_SUBCLASSES(ext);
+ rb_subclass_entry_t *subclass_entry = anchor->head;
+ while (subclass_entry) {
+ if (subclass_entry->klass && RB_TYPE_P(subclass_entry->klass, T_ICLASS)) {
+ iclass = subclass_entry->klass;
+ VM_ASSERT(RB_TYPE_P(iclass, T_ICLASS));
+ if (RBASIC_CLASS(iclass) == klass) {
+ // Is the subclass an ICLASS including this module into another class
+ // If so we need to re-associate it under our box with the new ext
+ VM_ASSERT(FL_TEST_RAW(iclass, RCLASS_BOXABLE));
+ class_duplicate_iclass_classext(iclass, ext, box);
+ }
+ }
+ subclass_entry = subclass_entry->next;
+ }
+ }
+
+ return ext;
}
void
-rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE arg)
+rb_class_ensure_writable(VALUE klass)
{
- rb_subclass_entry_t *cur = RCLASS_EXT(klass)->subclasses;
+ VM_ASSERT(RB_TYPE_P(klass, T_CLASS) || RB_TYPE_P(klass, T_MODULE) || RB_TYPE_P(klass, T_ICLASS));
+ RCLASS_EXT_WRITABLE(klass);
+}
- /* do not be tempted to simplify this loop into a for loop, the order of
- operations is important here if `f` modifies the linked list */
- while (cur) {
- VALUE curklass = cur->klass;
- cur = cur->next;
- f(curklass, arg);
+struct class_classext_foreach_arg {
+ rb_class_classext_foreach_callback_func *func;
+ void * callback_arg;
+};
+
+static int
+class_classext_foreach_i(st_data_t key, st_data_t value, st_data_t arg)
+{
+ struct class_classext_foreach_arg *foreach_arg = (struct class_classext_foreach_arg *)arg;
+ rb_class_classext_foreach_callback_func *func = foreach_arg->func;
+ func((rb_classext_t *)value, false, (VALUE)key, foreach_arg->callback_arg);
+ return ST_CONTINUE;
+}
+
+void
+rb_class_classext_foreach(VALUE klass, rb_class_classext_foreach_callback_func *func, void *arg)
+{
+ st_table *tbl = RCLASS_CLASSEXT_TBL(klass);
+ struct class_classext_foreach_arg foreach_arg;
+ if (tbl) {
+ foreach_arg.func = func;
+ foreach_arg.callback_arg = arg;
+ rb_st_foreach(tbl, class_classext_foreach_i, (st_data_t)&foreach_arg);
}
+ func(RCLASS_EXT_PRIME(klass), true, (VALUE)NULL, arg);
+}
+
+VALUE
+rb_class_super_of(VALUE klass)
+{
+ return RCLASS_SUPER(klass);
+}
+
+VALUE
+rb_class_singleton_p(VALUE klass)
+{
+ return RCLASS_SINGLETON_P(klass);
+}
+
+unsigned char
+rb_class_variation_count(VALUE klass)
+{
+ return RCLASS_VARIATION_COUNT(klass);
}
static void
-class_detach_subclasses(VALUE klass, VALUE arg)
+push_subclass_entry_to_list(VALUE super, VALUE klass, bool is_module)
{
- rb_class_remove_from_super_subclasses(klass);
+ rb_subclass_entry_t *entry, *head;
+ rb_subclass_anchor_t *anchor;
+ rb_box_subclasses_t *box_subclasses;
+ struct st_table *tbl;
+ const rb_box_t *box = rb_current_box();
+
+ entry = ZALLOC(rb_subclass_entry_t);
+ entry->klass = klass;
+
+ RB_VM_LOCKING() {
+ anchor = RCLASS_WRITABLE_SUBCLASSES(super);
+ VM_ASSERT(anchor);
+ box_subclasses = (rb_box_subclasses_t *)anchor->box_subclasses;
+ VM_ASSERT(box_subclasses);
+ tbl = box_subclasses->tbl;
+ VM_ASSERT(tbl);
+
+ head = anchor->head;
+ if (head->next) {
+ head->next->prev = entry;
+ entry->next = head->next;
+ }
+ head->next = entry;
+ entry->prev = head;
+ st_insert(tbl, box_subclasses_tbl_key(box), (st_data_t)entry);
+ }
+
+ if (is_module) {
+ RCLASS_WRITE_BOX_MODULE_SUBCLASSES(klass, anchor->box_subclasses);
+ }
+ else {
+ RCLASS_WRITE_BOX_SUPER_SUBCLASSES(klass, anchor->box_subclasses);
+ }
}
void
-rb_class_detach_subclasses(VALUE klass)
+rb_class_subclass_add(VALUE super, VALUE klass)
{
- rb_class_foreach_subclass(klass, class_detach_subclasses, Qnil);
+ if (super && !UNDEF_P(super)) {
+ push_subclass_entry_to_list(super, klass, false);
+ }
}
static void
-class_detach_module_subclasses(VALUE klass, VALUE arg)
+rb_module_add_to_subclasses_list(VALUE module, VALUE iclass)
+{
+ if (module && !UNDEF_P(module)) {
+ push_subclass_entry_to_list(module, iclass, true);
+ }
+}
+
+static struct rb_subclass_entry *
+class_get_subclasses_for_ns(struct st_table *tbl, VALUE box_id)
+{
+ st_data_t value;
+ if (st_lookup(tbl, (st_data_t)box_id, &value)) {
+ return (struct rb_subclass_entry *)value;
+ }
+ return NULL;
+}
+
+static int
+remove_class_from_subclasses_replace_first_entry(st_data_t *key, st_data_t *value, st_data_t arg, int existing)
{
- rb_class_remove_from_module_subclasses(klass);
+ *value = arg;
+ return ST_CONTINUE;
+}
+
+static void
+remove_class_from_subclasses(struct st_table *tbl, VALUE box_id, VALUE klass)
+{
+ rb_subclass_entry_t *entry = class_get_subclasses_for_ns(tbl, box_id);
+ bool first_entry = true;
+ while (entry) {
+ if (entry->klass == klass) {
+ rb_subclass_entry_t *prev = entry->prev, *next = entry->next;
+
+ if (prev) {
+ prev->next = next;
+ }
+ if (next) {
+ next->prev = prev;
+ }
+
+ if (first_entry) {
+ if (next) {
+ st_update(tbl, box_id, remove_class_from_subclasses_replace_first_entry, (st_data_t)next);
+ }
+ else {
+ // no subclass entries in this ns after the deletion
+ st_delete(tbl, &box_id, NULL);
+ }
+ }
+
+ xfree(entry);
+
+ break;
+ }
+ else if (first_entry) {
+ first_entry = false;
+ }
+ entry = entry->next;
+ }
}
void
-rb_class_detach_module_subclasses(VALUE klass)
+rb_class_remove_from_super_subclasses(VALUE klass)
{
- rb_class_foreach_subclass(klass, class_detach_module_subclasses, Qnil);
+ rb_classext_t *ext = RCLASS_EXT_WRITABLE(klass);
+ rb_box_subclasses_t *box_subclasses = RCLASSEXT_BOX_SUPER_SUBCLASSES(ext);
+
+ if (!box_subclasses) return;
+ remove_class_from_subclasses(box_subclasses->tbl, box_subclasses_tbl_key(RCLASSEXT_BOX(ext)), klass);
+ rb_box_subclasses_ref_dec(box_subclasses);
+ RCLASSEXT_BOX_SUPER_SUBCLASSES(ext) = 0;
+}
+
+void
+rb_class_classext_free_subclasses(rb_classext_t *ext, VALUE klass, bool replacing)
+{
+ rb_subclass_anchor_t *anchor = RCLASSEXT_SUBCLASSES(ext);
+ struct st_table *tbl = anchor->box_subclasses->tbl;
+ VALUE box_id = box_subclasses_tbl_key(RCLASSEXT_BOX(ext));
+ rb_subclass_entry_t *next, *entry = anchor->head;
+
+ while (entry) {
+ next = entry->next;
+ xfree(entry);
+ entry = next;
+ }
+ VM_ASSERT(
+ rb_box_subclasses_ref_count(anchor->box_subclasses) > 0,
+ "box_subclasses refcount (%p) %ld", anchor->box_subclasses, rb_box_subclasses_ref_count(anchor->box_subclasses));
+ st_delete(tbl, &box_id, NULL);
+ rb_box_subclasses_ref_dec(anchor->box_subclasses);
+ xfree(anchor);
+
+ if (RCLASSEXT_BOX_SUPER_SUBCLASSES(ext)) {
+ rb_box_subclasses_t *box_sub = RCLASSEXT_BOX_SUPER_SUBCLASSES(ext);
+ if (!replacing) remove_class_from_subclasses(box_sub->tbl, box_id, klass);
+ rb_box_subclasses_ref_dec(box_sub);
+ }
+ if (RCLASSEXT_BOX_MODULE_SUBCLASSES(ext)) {
+ rb_box_subclasses_t *box_sub = RCLASSEXT_BOX_MODULE_SUBCLASSES(ext);
+ if (!replacing) remove_class_from_subclasses(box_sub->tbl, box_id, klass);
+ rb_box_subclasses_ref_dec(box_sub);
+ }
+}
+
+void
+rb_class_foreach_subclass(VALUE klass, void (*f)(VALUE, VALUE), VALUE arg)
+{
+ rb_subclass_entry_t *tmp;
+ rb_subclass_entry_t *cur = RCLASS_SUBCLASSES_FIRST(klass);
+ /* do not be tempted to simplify this loop into a for loop, the order of
+ operations is important here if `f` modifies the linked list */
+ while (cur) {
+ VALUE curklass = cur->klass;
+ tmp = cur->next;
+ // do not trigger GC during f, otherwise the cur will become
+ // a dangling pointer if the subclass is collected
+ f(curklass, arg);
+ cur = tmp;
+ }
+}
+
+static void
+class_detach_subclasses(VALUE klass, VALUE arg)
+{
+ rb_class_remove_from_super_subclasses(klass);
+}
+
+static void
+class_switch_superclass(VALUE super, VALUE klass)
+{
+ RB_VM_LOCKING() {
+ class_detach_subclasses(klass, Qnil);
+ rb_class_subclass_add(super, klass);
+ }
}
/**
- * Allocates a struct RClass for a new class.
+ * Allocates a struct RClass for a new class, iclass, or module.
*
- * \param flags initial value for basic.flags of the returned class.
- * \param klass the class of the returned class.
- * \return an uninitialized Class object.
- * \pre \p klass must refer \c Class class or an ancestor of Class.
- * \pre \code (flags | T_CLASS) != 0 \endcode
- * \post the returned class can safely be \c #initialize 'd.
+ * @param type The type of the RClass (T_CLASS, T_ICLASS, or T_MODULE)
+ * @param klass value for basic.klass of the returned object.
+ * @return an uninitialized Class/IClass/Module object.
+ * @pre `klass` must refer to a class or module
*
- * \note this function is not Class#allocate.
+ * @note this function is not Class#allocate.
*/
static VALUE
-class_alloc(VALUE flags, VALUE klass)
+class_alloc0(enum ruby_value_type type, VALUE klass, bool boxable)
{
- NEWOBJ_OF(obj, struct RClass, klass, (flags & T_MASK) | FL_PROMOTED1 /* start from age == 2 */ | (RGENGC_WB_PROTECTED_CLASS ? FL_WB_PROTECTED : 0));
- obj->ptr = ZALLOC(rb_classext_t);
+ rb_box_subclasses_t *box_subclasses;
+ rb_subclass_anchor_t *anchor;
+ const rb_box_t *box = rb_current_box();
+
+ if (!ruby_box_init_done) {
+ boxable = true;
+ }
+
+ size_t alloc_size = sizeof(struct RClass_and_rb_classext_t);
+ if (boxable) {
+ alloc_size = sizeof(struct RClass_boxable);
+ }
+
+ // class_alloc is supposed to return a new object that is not promoted yet.
+ // So, we need to avoid GC after NEWOBJ_OF.
+ // To achieve that, we allocate subclass lists before NEWOBJ_OF.
+ //
+ // TODO: Note that this could cause memory leak.
+ // If NEWOBJ_OF fails with out of memory, these buffers will leak.
+ box_subclasses = ZALLOC(rb_box_subclasses_t);
+ box_subclasses->refcount = 1;
+ box_subclasses->tbl = st_init_numtable();
+ anchor = ZALLOC(rb_subclass_anchor_t);
+ anchor->box_subclasses = box_subclasses;
+ anchor->head = ZALLOC(rb_subclass_entry_t);
+
+ RUBY_ASSERT(type == T_CLASS || type == T_ICLASS || type == T_MODULE);
+
+ VALUE flags = type | FL_SHAREABLE;
+ if (RGENGC_WB_PROTECTED_CLASS) flags |= FL_WB_PROTECTED;
+ if (boxable) flags |= RCLASS_BOXABLE;
+
+ NEWOBJ_OF(obj, struct RClass, klass, flags, alloc_size, 0);
+
+ obj->object_id = 0;
+
+ memset(RCLASS_EXT_PRIME(obj), 0, sizeof(rb_classext_t));
+
/* ZALLOC
- RCLASS_IV_TBL(obj) = 0;
RCLASS_CONST_TBL(obj) = 0;
RCLASS_M_TBL(obj) = 0;
- RCLASS_IV_INDEX_TBL(obj) = 0;
+ RCLASS_FIELDS(obj) = 0;
RCLASS_SET_SUPER((VALUE)obj, 0);
- RCLASS_EXT(obj)->subclasses = NULL;
- RCLASS_EXT(obj)->parent_subclasses = NULL;
- RCLASS_EXT(obj)->module_subclasses = NULL;
*/
+
+ if (boxable) {
+ ((struct RClass_boxable *)obj)->box_classext_tbl = NULL;
+ }
+
+ RCLASS_PRIME_BOX((VALUE)obj) = box;
+ // Classes/Modules defined in user boxes are
+ // writable directly because it exists only in a box.
+ RCLASS_SET_PRIME_CLASSEXT_WRITABLE((VALUE)obj, !boxable || BOX_USER_P(box));
+
RCLASS_SET_ORIGIN((VALUE)obj, (VALUE)obj);
- RCLASS_SERIAL(obj) = rb_next_class_serial();
- RCLASS_REFINED_CLASS(obj) = Qnil;
- RCLASS_EXT(obj)->allocator = 0;
+ RCLASS_SET_REFINED_CLASS((VALUE)obj, Qnil);
+
+ RCLASS_SET_SUBCLASSES((VALUE)obj, anchor);
return (VALUE)obj;
}
+static VALUE
+class_alloc(enum ruby_value_type type, VALUE klass)
+{
+ bool boxable = rb_box_available() && BOX_ROOT_P(rb_current_box());
+ return class_alloc0(type, klass, boxable);
+}
+
+static VALUE
+class_associate_super(VALUE klass, VALUE super, bool init)
+{
+ if (super && !UNDEF_P(super)) {
+ class_switch_superclass(super, klass);
+ }
+ if (init) {
+ RCLASS_SET_SUPER(klass, super);
+ }
+ else {
+ RCLASS_WRITE_SUPER(klass, super);
+ }
+ rb_class_update_superclasses(klass);
+ return super;
+}
+
+VALUE
+rb_class_set_super(VALUE klass, VALUE super)
+{
+ return class_associate_super(klass, super, false);
+}
+
static void
-RCLASS_M_TBL_INIT(VALUE c)
+class_initialize_method_table(VALUE c)
{
- RCLASS_M_TBL(c) = rb_id_table_create(0);
+ // initialize the prime classext m_tbl
+ RCLASS_SET_M_TBL(c, rb_id_table_create(0));
}
-/*!
+static void
+class_clear_method_table(VALUE c)
+{
+ RCLASS_WRITE_M_TBL(c, rb_id_table_create(0));
+}
+
+static VALUE
+class_boot_boxable(VALUE super, bool boxable)
+{
+ VALUE klass = class_alloc0(T_CLASS, rb_cClass, boxable);
+
+ // initialize method table prior to class_associate_super()
+ // because class_associate_super() may cause GC and promote klass
+ class_initialize_method_table(klass);
+
+ class_associate_super(klass, super, true);
+ if (super && !UNDEF_P(super)) {
+ rb_class_set_initialized(klass);
+ }
+
+ return (VALUE)klass;
+}
+
+/**
* A utility function that wraps class_alloc.
*
* allocates a class and initializes safely.
- * \param super a class from which the new class derives.
- * \return a class object.
- * \pre \a super must be a class.
- * \post the metaclass of the new class is Class.
+ * @param super a class from which the new class derives.
+ * @return a class object.
+ * @pre `super` must be a class.
+ * @post the metaclass of the new class is Class.
*/
VALUE
rb_class_boot(VALUE super)
{
- VALUE klass = class_alloc(T_CLASS, rb_cClass);
+ return class_boot_boxable(super, false);
+}
+
+static VALUE *
+class_superclasses_including_self(VALUE klass)
+{
+ if (RCLASS_SUPERCLASSES_WITH_SELF_P(klass))
+ return RCLASS_SUPERCLASSES(klass);
- RCLASS_SET_SUPER(klass, super);
- RCLASS_M_TBL_INIT(klass);
+ size_t depth = RCLASS_SUPERCLASS_DEPTH(klass);
+ VALUE *superclasses = xmalloc(sizeof(VALUE) * (depth + 1));
+ if (depth > 0)
+ memcpy(superclasses, RCLASS_SUPERCLASSES(klass), sizeof(VALUE) * depth);
+ superclasses[depth] = klass;
- OBJ_INFECT(klass, super);
- return (VALUE)klass;
+ return superclasses;
}
+void
+rb_class_update_superclasses(VALUE klass)
+{
+ VALUE *superclasses;
+ size_t super_depth;
+ VALUE super = RCLASS_SUPER(klass);
+
+ if (!RB_TYPE_P(klass, T_CLASS)) return;
+ if (UNDEF_P(super)) return;
+
+ // If the superclass array is already built
+ if (RCLASS_SUPERCLASSES(klass))
+ return;
+
+ // find the proper superclass
+ while (super != Qfalse && !RB_TYPE_P(super, T_CLASS)) {
+ super = RCLASS_SUPER(super);
+ }
+
+ // For BasicObject and uninitialized classes, depth=0 and ary=NULL
+ if (super == Qfalse)
+ return;
+
+ // Sometimes superclasses are set before the full ancestry tree is built
+ // This happens during metaclass construction
+ if (super != rb_cBasicObject && !RCLASS_SUPERCLASS_DEPTH(super)) {
+ rb_class_update_superclasses(super);
+
+ // If it is still unset we need to try later
+ if (!RCLASS_SUPERCLASS_DEPTH(super))
+ return;
+ }
+
+ super_depth = RCLASS_SUPERCLASS_DEPTH(super);
+ if (RCLASS_SUPERCLASSES_WITH_SELF_P(super)) {
+ superclasses = RCLASS_SUPERCLASSES(super);
+ }
+ else {
+ superclasses = class_superclasses_including_self(super);
+ RCLASS_WRITE_SUPERCLASSES(super, super_depth, superclasses, true);
+ }
+
+ size_t depth = super_depth == RCLASS_MAX_SUPERCLASS_DEPTH ? super_depth : super_depth + 1;
+ RCLASS_WRITE_SUPERCLASSES(klass, depth, superclasses, false);
+}
-/*!
- * Ensures a class can be derived from super.
- *
- * \param super a reference to an object.
- * \exception TypeError if \a super is not a Class or \a super is a singleton class.
- */
void
rb_check_inheritable(VALUE super)
{
if (!RB_TYPE_P(super, T_CLASS)) {
- rb_raise(rb_eTypeError, "superclass must be a Class (%"PRIsVALUE" given)",
- rb_obj_class(super));
+ rb_raise(rb_eTypeError, "superclass must be an instance of Class (given an instance of %"PRIsVALUE")",
+ rb_obj_class(super));
}
- if (RBASIC(super)->flags & FL_SINGLETON) {
- rb_raise(rb_eTypeError, "can't make subclass of singleton class");
+ if (RCLASS_SINGLETON_P(super)) {
+ rb_raise(rb_eTypeError, "can't make subclass of singleton class");
}
if (super == rb_cClass) {
- rb_raise(rb_eTypeError, "can't make subclass of Class");
+ rb_raise(rb_eTypeError, "can't make subclass of Class");
}
}
-
-/*!
- * Creates a new class.
- * \param super a class from which the new class derives.
- * \exception TypeError \a super is not inheritable.
- * \exception TypeError \a super is the Class class.
- */
VALUE
rb_class_new(VALUE super)
{
Check_Type(super, T_CLASS);
rb_check_inheritable(super);
- return rb_class_boot(super);
+ VALUE klass = rb_class_boot(super);
+
+ if (super != rb_cObject && super != rb_cBasicObject) {
+ RCLASS_SET_MAX_IV_COUNT(klass, RCLASS_MAX_IV_COUNT(super));
+ }
+
+ RUBY_ASSERT(getenv("RUBY_BOX") || RCLASS_PRIME_CLASSEXT_WRITABLE_P(klass));
+
+ return klass;
+}
+
+VALUE
+rb_class_s_alloc(VALUE klass)
+{
+ return rb_class_boot(0);
}
static void
clone_method(VALUE old_klass, VALUE new_klass, ID mid, const rb_method_entry_t *me)
{
if (me->def->type == VM_METHOD_TYPE_ISEQ) {
- rb_cref_t *new_cref;
- rb_vm_rewrite_cref(me->def->body.iseq.cref, old_klass, new_klass, &new_cref);
- rb_add_method_iseq(new_klass, mid, me->def->body.iseq.iseqptr, new_cref, METHOD_ENTRY_VISI(me));
+ rb_cref_t *new_cref = rb_vm_rewrite_cref(me->def->body.iseq.cref, old_klass, new_klass);
+ rb_add_method_iseq(new_klass, mid, me->def->body.iseq.iseqptr, new_cref, METHOD_ENTRY_VISI(me));
}
else {
- rb_method_entry_set(new_klass, mid, me, METHOD_ENTRY_VISI(me));
+ rb_method_entry_set(new_klass, mid, me, METHOD_ENTRY_VISI(me));
}
}
@@ -299,13 +1041,89 @@ static void
class_init_copy_check(VALUE clone, VALUE orig)
{
if (orig == rb_cBasicObject) {
- rb_raise(rb_eTypeError, "can't copy the root class");
+ rb_raise(rb_eTypeError, "can't copy the root class");
+ }
+ if (RCLASS_INITIALIZED_P(clone)) {
+ rb_raise(rb_eTypeError, "already initialized class");
+ }
+ if (RCLASS_SINGLETON_P(orig)) {
+ rb_raise(rb_eTypeError, "can't copy singleton class");
+ }
+}
+
+struct cvc_table_copy_ctx {
+ VALUE clone;
+ struct rb_id_table * new_table;
+};
+
+static enum rb_id_table_iterator_result
+cvc_table_copy(ID id, VALUE val, void *data)
+{
+ struct cvc_table_copy_ctx *ctx = (struct cvc_table_copy_ctx *)data;
+ struct rb_cvar_class_tbl_entry * orig_entry;
+ orig_entry = (struct rb_cvar_class_tbl_entry *)val;
+
+ struct rb_cvar_class_tbl_entry *ent;
+
+ ent = ALLOC(struct rb_cvar_class_tbl_entry);
+ ent->class_value = ctx->clone;
+ ent->cref = orig_entry->cref;
+ ent->global_cvar_state = orig_entry->global_cvar_state;
+ rb_id_table_insert(ctx->new_table, id, (VALUE)ent);
+
+ RB_OBJ_WRITTEN(ctx->clone, Qundef, ent->cref);
+
+ return ID_TABLE_CONTINUE;
+}
+
+static void
+copy_tables(VALUE clone, VALUE orig)
+{
+ if (RCLASS_CONST_TBL(clone)) {
+ rb_free_const_table(RCLASS_CONST_TBL(clone));
+ RCLASS_WRITE_CONST_TBL(clone, 0, false);
+ }
+ if (RCLASS_CVC_TBL(orig)) {
+ struct rb_id_table *rb_cvc_tbl = RCLASS_CVC_TBL(orig);
+ struct rb_id_table *rb_cvc_tbl_dup = rb_id_table_create(rb_id_table_size(rb_cvc_tbl));
+
+ struct cvc_table_copy_ctx ctx;
+ ctx.clone = clone;
+ ctx.new_table = rb_cvc_tbl_dup;
+ rb_id_table_foreach(rb_cvc_tbl, cvc_table_copy, &ctx);
+ RCLASS_WRITE_CVC_TBL(clone, rb_cvc_tbl_dup);
}
- if (RCLASS_SUPER(clone) != 0 || clone == rb_cBasicObject) {
- rb_raise(rb_eTypeError, "already initialized class");
+ rb_id_table_free(RCLASS_M_TBL(clone));
+ RCLASS_WRITE_M_TBL(clone, 0);
+ if (!RB_TYPE_P(clone, T_ICLASS)) {
+ rb_fields_tbl_copy(clone, orig);
}
- if (FL_TEST(orig, FL_SINGLETON)) {
- rb_raise(rb_eTypeError, "can't copy singleton class");
+ if (RCLASS_CONST_TBL(orig)) {
+ struct clone_const_arg arg;
+ struct rb_id_table *const_tbl;
+ struct rb_id_table *orig_tbl = RCLASS_CONST_TBL(orig);
+ arg.tbl = const_tbl = rb_id_table_create(rb_id_table_size(orig_tbl));
+ arg.klass = clone;
+ rb_id_table_foreach(orig_tbl, clone_const_i, &arg);
+ RCLASS_WRITE_CONST_TBL(clone, const_tbl, false);
+ }
+}
+
+static bool ensure_origin(VALUE klass);
+
+void
+rb_class_set_initialized(VALUE klass)
+{
+ RUBY_ASSERT(RB_TYPE_P(klass, T_CLASS) || RB_TYPE_P(klass, T_MODULE));
+ FL_SET_RAW(klass, RCLASS_IS_INITIALIZED);
+ /* no more re-initialization */
+}
+
+void
+rb_module_check_initializable(VALUE mod)
+{
+ if (RCLASS_INITIALIZED_P(mod)) {
+ rb_raise(rb_eTypeError, "already initialized module");
}
}
@@ -313,49 +1131,115 @@ class_init_copy_check(VALUE clone, VALUE orig)
VALUE
rb_mod_init_copy(VALUE clone, VALUE orig)
{
- if (RB_TYPE_P(clone, T_CLASS)) {
- class_init_copy_check(clone, orig);
+ /* Only class or module is valid here, but other classes may enter here and
+ * only hit an exception on the OBJ_INIT_COPY checks
+ */
+ switch (BUILTIN_TYPE(clone)) {
+ case T_CLASS:
+ class_init_copy_check(clone, orig);
+ break;
+ case T_MODULE:
+ rb_module_check_initializable(clone);
+ break;
+ default:
+ break;
}
if (!OBJ_INIT_COPY(clone, orig)) return clone;
- if (!FL_TEST(CLASS_OF(clone), FL_SINGLETON)) {
- RBASIC_SET_CLASS(clone, rb_singleton_class_clone(orig));
- rb_singleton_class_attached(RBASIC(clone)->klass, (VALUE)clone);
- }
- RCLASS_SET_SUPER(clone, RCLASS_SUPER(orig));
- RCLASS_EXT(clone)->allocator = RCLASS_EXT(orig)->allocator;
- if (RCLASS_IV_TBL(clone)) {
- st_free_table(RCLASS_IV_TBL(clone));
- RCLASS_IV_TBL(clone) = 0;
+
+ RUBY_ASSERT(RB_TYPE_P(orig, T_CLASS) || RB_TYPE_P(orig, T_MODULE));
+ RUBY_ASSERT(BUILTIN_TYPE(clone) == BUILTIN_TYPE(orig));
+
+ rb_class_set_initialized(clone);
+
+ /* cloned flag is refer at constant inline cache
+ * see vm_get_const_key_cref() in vm_insnhelper.c
+ */
+ RCLASS_SET_CLONED(clone, true);
+ RCLASS_SET_CLONED(orig, true);
+
+ if (!RCLASS_SINGLETON_P(CLASS_OF(clone))) {
+ RBASIC_SET_CLASS(clone, rb_singleton_class_clone(orig));
+ rb_singleton_class_attached(METACLASS_OF(clone), (VALUE)clone);
}
- if (RCLASS_CONST_TBL(clone)) {
- rb_free_const_table(RCLASS_CONST_TBL(clone));
- RCLASS_CONST_TBL(clone) = 0;
+ if (BUILTIN_TYPE(clone) == T_CLASS) {
+ RCLASS_SET_ALLOCATOR(clone, RCLASS_ALLOCATOR(orig));
}
- RCLASS_M_TBL(clone) = 0;
- if (RCLASS_IV_TBL(orig)) {
- st_data_t id;
-
- RCLASS_IV_TBL(clone) = rb_st_copy(clone, RCLASS_IV_TBL(orig));
- CONST_ID(id, "__tmp_classpath__");
- st_delete(RCLASS_IV_TBL(clone), &id, 0);
- CONST_ID(id, "__classpath__");
- st_delete(RCLASS_IV_TBL(clone), &id, 0);
- CONST_ID(id, "__classid__");
- st_delete(RCLASS_IV_TBL(clone), &id, 0);
+ copy_tables(clone, orig);
+ if (RCLASS_M_TBL(orig)) {
+ struct clone_method_arg arg;
+ arg.old_klass = orig;
+ arg.new_klass = clone;
+ class_initialize_method_table(clone);
+ rb_id_table_foreach(RCLASS_M_TBL(orig), clone_method_i, &arg);
}
- if (RCLASS_CONST_TBL(orig)) {
- struct clone_const_arg arg;
- arg.tbl = RCLASS_CONST_TBL(clone) = rb_id_table_create(0);
- arg.klass = clone;
- rb_id_table_foreach(RCLASS_CONST_TBL(orig), clone_const_i, &arg);
+ if (RCLASS_ORIGIN(orig) == orig) {
+ rb_class_set_super(clone, RCLASS_SUPER(orig));
}
- if (RCLASS_M_TBL(orig)) {
- struct clone_method_arg arg;
- arg.old_klass = orig;
- arg.new_klass = clone;
- RCLASS_M_TBL_INIT(clone);
- rb_id_table_foreach(RCLASS_M_TBL(orig), clone_method_i, &arg);
+ else {
+ VALUE p = RCLASS_SUPER(orig);
+ VALUE orig_origin = RCLASS_ORIGIN(orig);
+ VALUE prev_clone_p = clone;
+ VALUE origin_stack = rb_ary_hidden_new(2);
+ VALUE origin[2];
+ VALUE clone_p = 0;
+ long origin_len;
+ int add_subclass;
+ VALUE clone_origin;
+
+ ensure_origin(clone);
+ clone_origin = RCLASS_ORIGIN(clone);
+
+ while (p && p != orig_origin) {
+ if (BUILTIN_TYPE(p) != T_ICLASS) {
+ rb_bug("non iclass between module/class and origin");
+ }
+ clone_p = class_alloc(T_ICLASS, METACLASS_OF(p));
+ RCLASS_SET_M_TBL(clone_p, RCLASS_M_TBL(p));
+ rb_class_set_super(prev_clone_p, clone_p);
+ prev_clone_p = clone_p;
+ RCLASS_SET_CONST_TBL(clone_p, RCLASS_CONST_TBL(p), false);
+ if (RB_TYPE_P(clone, T_CLASS)) {
+ RCLASS_SET_INCLUDER(clone_p, clone);
+ }
+ add_subclass = TRUE;
+ if (p != RCLASS_ORIGIN(p)) {
+ origin[0] = clone_p;
+ origin[1] = RCLASS_ORIGIN(p);
+ rb_ary_cat(origin_stack, origin, 2);
+ }
+ else if ((origin_len = RARRAY_LEN(origin_stack)) > 1 &&
+ RARRAY_AREF(origin_stack, origin_len - 1) == p) {
+ RCLASS_WRITE_ORIGIN(RARRAY_AREF(origin_stack, (origin_len -= 2)), clone_p);
+ RICLASS_WRITE_ORIGIN_SHARED_MTBL(clone_p);
+ rb_ary_resize(origin_stack, origin_len);
+ add_subclass = FALSE;
+ }
+ if (add_subclass) {
+ rb_module_add_to_subclasses_list(METACLASS_OF(p), clone_p);
+ }
+ p = RCLASS_SUPER(p);
+ }
+
+ if (p == orig_origin) {
+ if (clone_p) {
+ rb_class_set_super(clone_p, clone_origin);
+ rb_class_set_super(clone_origin, RCLASS_SUPER(orig_origin));
+ }
+ copy_tables(clone_origin, orig_origin);
+ if (RCLASS_M_TBL(orig_origin)) {
+ struct clone_method_arg arg;
+ arg.old_klass = orig;
+ arg.new_klass = clone;
+ class_initialize_method_table(clone_origin);
+ rb_id_table_foreach(RCLASS_M_TBL(orig_origin), clone_method_i, &arg);
+ }
+ }
+ else {
+ rb_bug("no origin for class that has origin");
+ }
+
+ rb_class_update_superclasses(clone);
}
return clone;
@@ -367,72 +1251,77 @@ rb_singleton_class_clone(VALUE obj)
return rb_singleton_class_clone_and_attach(obj, Qundef);
}
+// Clone and return the singleton class of `obj` if it has been created and is attached to `obj`.
VALUE
rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach)
{
- const VALUE klass = RBASIC(obj)->klass;
+ const VALUE klass = METACLASS_OF(obj);
- if (!FL_TEST(klass, FL_SINGLETON))
- return klass;
+ // Note that `rb_singleton_class()` can create situations where `klass` is
+ // attached to an object other than `obj`. In which case `obj` does not have
+ // a material singleton class attached yet and there is no singleton class
+ // to clone.
+ if (!(RCLASS_SINGLETON_P(klass) && RCLASS_ATTACHED_OBJECT(klass) == obj)) {
+ // nothing to clone
+ return klass;
+ }
else {
- /* copy singleton(unnamed) class */
- VALUE clone = class_alloc(RBASIC(klass)->flags, 0);
-
- if (BUILTIN_TYPE(obj) == T_CLASS) {
- RBASIC_SET_CLASS(clone, clone);
- }
- else {
- RBASIC_SET_CLASS(clone, rb_singleton_class_clone(klass));
- }
-
- RCLASS_SET_SUPER(clone, RCLASS_SUPER(klass));
- RCLASS_EXT(clone)->allocator = RCLASS_EXT(klass)->allocator;
- if (RCLASS_IV_TBL(klass)) {
- RCLASS_IV_TBL(clone) = rb_st_copy(clone, RCLASS_IV_TBL(klass));
- }
- if (RCLASS_CONST_TBL(klass)) {
- struct clone_const_arg arg;
- arg.tbl = RCLASS_CONST_TBL(clone) = rb_id_table_create(0);
- arg.klass = clone;
- rb_id_table_foreach(RCLASS_CONST_TBL(klass), clone_const_i, &arg);
- }
- if (attach != Qundef) {
- rb_singleton_class_attached(clone, attach);
- }
- RCLASS_M_TBL_INIT(clone);
- {
- struct clone_method_arg arg;
- arg.old_klass = klass;
- arg.new_klass = clone;
- rb_id_table_foreach(RCLASS_M_TBL(klass), clone_method_i, &arg);
- }
- rb_singleton_class_attached(RBASIC(clone)->klass, clone);
- FL_SET(clone, FL_SINGLETON);
-
- return clone;
+ /* copy singleton(unnamed) class */
+ bool klass_of_clone_is_new;
+ RUBY_ASSERT(RB_TYPE_P(klass, T_CLASS));
+ VALUE clone = class_alloc(T_CLASS, 0);
+
+ if (BUILTIN_TYPE(obj) == T_CLASS) {
+ klass_of_clone_is_new = true;
+ RBASIC_SET_CLASS(clone, clone);
+ }
+ else {
+ VALUE klass_metaclass_clone = rb_singleton_class_clone(klass);
+ // When `METACLASS_OF(klass) == klass_metaclass_clone`, it means the
+ // recursive call did not clone `METACLASS_OF(klass)`.
+ klass_of_clone_is_new = (METACLASS_OF(klass) != klass_metaclass_clone);
+ RBASIC_SET_CLASS(clone, klass_metaclass_clone);
+ }
+
+ // initialize method table before any GC chance
+ class_initialize_method_table(clone);
+
+ rb_class_set_super(clone, RCLASS_SUPER(klass));
+ rb_fields_tbl_copy(clone, klass);
+ if (RCLASS_CONST_TBL(klass)) {
+ struct clone_const_arg arg;
+ struct rb_id_table *table;
+ arg.tbl = table = rb_id_table_create(rb_id_table_size(RCLASS_CONST_TBL(klass)));
+ arg.klass = clone;
+ rb_id_table_foreach(RCLASS_CONST_TBL(klass), clone_const_i, &arg);
+ RCLASS_SET_CONST_TBL(clone, table, false);
+ }
+ if (!UNDEF_P(attach)) {
+ rb_singleton_class_attached(clone, attach);
+ }
+ {
+ struct clone_method_arg arg;
+ arg.old_klass = klass;
+ arg.new_klass = clone;
+ rb_id_table_foreach(RCLASS_M_TBL(klass), clone_method_i, &arg);
+ }
+ if (klass_of_clone_is_new) {
+ rb_singleton_class_attached(METACLASS_OF(clone), clone);
+ }
+ FL_SET(clone, FL_SINGLETON);
+
+ return clone;
}
}
-/*!
- * Attach a object to a singleton class.
- * @pre \a klass is the singleton class of \a obj.
- */
void
rb_singleton_class_attached(VALUE klass, VALUE obj)
{
- if (FL_TEST(klass, FL_SINGLETON)) {
- if (!RCLASS_IV_TBL(klass)) {
- RCLASS_IV_TBL(klass) = st_init_numtable();
- }
- rb_class_ivar_set(klass, id_attached, obj);
+ if (RCLASS_SINGLETON_P(klass)) {
+ RCLASS_SET_ATTACHED_OBJECT(klass, obj);
}
}
-
-
-#define METACLASS_OF(k) RBASIC(k)->klass
-#define SET_METACLASS_OF(k, cls) RBASIC_SET_CLASS(k, cls)
-
/*!
* whether k is a meta^(n)-class of Class class
* @retval 1 if \a k is a meta^(n)-class of Class class (n >= 0)
@@ -443,17 +1332,17 @@ rb_singleton_class_attached(VALUE klass, VALUE obj)
static int
rb_singleton_class_has_metaclass_p(VALUE sklass)
{
- return rb_attr_get(METACLASS_OF(sklass), id_attached) == sklass;
+ return RCLASS_ATTACHED_OBJECT(METACLASS_OF(sklass)) == sklass;
}
int
rb_singleton_class_internal_p(VALUE sklass)
{
- return (RB_TYPE_P(rb_attr_get(sklass, id_attached), T_CLASS) &&
- !rb_singleton_class_has_metaclass_p(sklass));
+ return (RB_TYPE_P(RCLASS_ATTACHED_OBJECT(sklass), T_CLASS) &&
+ !rb_singleton_class_has_metaclass_p(sklass));
}
-/*!
+/**
* whether k has a metaclass
* @retval 1 if \a k has a metaclass
* @retval 0 otherwise
@@ -462,69 +1351,73 @@ rb_singleton_class_internal_p(VALUE sklass)
(FL_TEST(METACLASS_OF(k), FL_SINGLETON) && \
rb_singleton_class_has_metaclass_p(k))
-/*!
- * ensures \a klass belongs to its own eigenclass.
- * @return the eigenclass of \a klass
- * @post \a klass belongs to the returned eigenclass.
- * i.e. the attached object of the eigenclass is \a klass.
+/**
+ * ensures `klass` belongs to its own eigenclass.
+ * @return the eigenclass of `klass`
+ * @post `klass` belongs to the returned eigenclass.
+ * i.e. the attached object of the eigenclass is `klass`.
* @note this macro creates a new eigenclass if necessary.
*/
#define ENSURE_EIGENCLASS(klass) \
(HAVE_METACLASS_P(klass) ? METACLASS_OF(klass) : make_metaclass(klass))
-/*!
- * Creates a metaclass of \a klass
- * \param klass a class
- * \return created metaclass for the class
- * \pre \a klass is a Class object
- * \pre \a klass has no singleton class.
- * \post the class of \a klass is the returned class.
- * \post the returned class is meta^(n+1)-class when \a klass is a meta^(n)-klass for n >= 0
+/**
+ * Creates a metaclass of `klass`
+ * @param klass a class
+ * @return created metaclass for the class
+ * @pre `klass` is a Class object
+ * @pre `klass` has no singleton class.
+ * @post the class of `klass` is the returned class.
+ * @post the returned class is meta^(n+1)-class when `klass` is a meta^(n)-klass for n >= 0
*/
static inline VALUE
make_metaclass(VALUE klass)
{
VALUE super;
- VALUE metaclass = rb_class_boot(Qundef);
+ VALUE metaclass = class_boot_boxable(Qundef, FL_TEST_RAW(klass, RCLASS_BOXABLE));
FL_SET(metaclass, FL_SINGLETON);
rb_singleton_class_attached(metaclass, klass);
if (META_CLASS_OF_CLASS_CLASS_P(klass)) {
- SET_METACLASS_OF(klass, metaclass);
- SET_METACLASS_OF(metaclass, metaclass);
+ SET_METACLASS_OF(klass, metaclass);
+ SET_METACLASS_OF(metaclass, metaclass);
}
else {
- VALUE tmp = METACLASS_OF(klass); /* for a meta^(n)-class klass, tmp is meta^(n)-class of Class class */
- SET_METACLASS_OF(klass, metaclass);
- SET_METACLASS_OF(metaclass, ENSURE_EIGENCLASS(tmp));
+ VALUE tmp = METACLASS_OF(klass); /* for a meta^(n)-class klass, tmp is meta^(n)-class of Class class */
+ SET_METACLASS_OF(klass, metaclass);
+ SET_METACLASS_OF(metaclass, ENSURE_EIGENCLASS(tmp));
}
super = RCLASS_SUPER(klass);
while (RB_TYPE_P(super, T_ICLASS)) super = RCLASS_SUPER(super);
- RCLASS_SET_SUPER(metaclass, super ? ENSURE_EIGENCLASS(super) : rb_cClass);
+ class_associate_super(metaclass, super ? ENSURE_EIGENCLASS(super) : rb_cClass, true);
+ rb_class_set_initialized(klass);
- OBJ_INFECT(metaclass, RCLASS_SUPER(metaclass));
+ // Full class ancestry may not have been filled until we reach here.
+ rb_class_update_superclasses(METACLASS_OF(metaclass));
return metaclass;
}
-/*!
- * Creates a singleton class for \a obj.
- * \pre \a obj must not a immediate nor a special const.
- * \pre \a obj must not a Class object.
- * \pre \a obj has no singleton class.
+/**
+ * Creates a singleton class for `obj`.
+ * @pre `obj` must not be an immediate nor a special const.
+ * @pre `obj` must not be a Class object.
+ * @pre `obj` has no singleton class.
*/
static inline VALUE
make_singleton_class(VALUE obj)
{
- VALUE orig_class = RBASIC(obj)->klass;
- VALUE klass = rb_class_boot(orig_class);
+ VALUE orig_class = METACLASS_OF(obj);
+ VALUE klass = class_boot_boxable(orig_class, FL_TEST_RAW(orig_class, RCLASS_BOXABLE));
FL_SET(klass, FL_SINGLETON);
RBASIC_SET_CLASS(obj, klass);
rb_singleton_class_attached(klass, obj);
+ rb_yjit_invalidate_no_singleton_class(orig_class);
+ rb_zjit_invalidate_no_singleton_class(orig_class);
SET_METACLASS_OF(klass, METACLASS_OF(rb_class_real(orig_class)));
return klass;
@@ -537,63 +1430,135 @@ boot_defclass(const char *name, VALUE super)
VALUE obj = rb_class_boot(super);
ID id = rb_intern(name);
- rb_name_class(obj, id);
rb_const_set((rb_cObject ? rb_cObject : obj), id, obj);
+ rb_vm_register_global_object(obj);
return obj;
}
+/***********************************************************************
+ *
+ * Document-class: Refinement
+ *
+ * Refinement is a class of the +self+ (current context) inside +refine+
+ * statement. It allows to import methods from other modules, see #import_methods.
+ */
+
+#if 0 /* for RDoc */
+/*
+ * Document-method: Refinement#import_methods
+ *
+ * call-seq:
+ * import_methods(module, ...) -> self
+ *
+ * Imports methods from modules. Unlike Module#include,
+ * Refinement#import_methods copies methods and adds them into the refinement,
+ * so the refinement is activated in the imported methods.
+ *
+ * Note that due to method copying, only methods defined in Ruby code can be imported.
+ *
+ * module StrUtils
+ * def indent(level)
+ * ' ' * level + self
+ * end
+ * end
+ *
+ * module M
+ * refine String do
+ * import_methods StrUtils
+ * end
+ * end
+ *
+ * using M
+ * "foo".indent(3)
+ * #=> " foo"
+ *
+ * module M
+ * refine String do
+ * import_methods Enumerable
+ * # Can't import method which is not defined with Ruby code: Enumerable#drop
+ * end
+ * end
+ *
+ */
+
+static VALUE
+refinement_import_methods(int argc, VALUE *argv, VALUE refinement)
+{
+}
+# endif
+
+/*!
+ *--
+ * \private
+ * Initializes the world of objects and classes.
+ *
+ * At first, the function bootstraps the class hierarchy.
+ * It initializes the most fundamental classes and their metaclasses.
+ * - \c BasicObject
+ * - \c Object
+ * - \c Module
+ * - \c Class
+ * After the bootstrap step, the class hierarchy becomes as the following
+ * diagram.
+ *
+ * \image html boottime-classes.png
+ *
+ * Then, the function defines classes, modules and methods as usual.
+ * \ingroup class
+ *++
+ */
+
void
Init_class_hierarchy(void)
{
rb_cBasicObject = boot_defclass("BasicObject", 0);
rb_cObject = boot_defclass("Object", rb_cBasicObject);
+ rb_vm_register_global_object(rb_cObject);
/* resolve class name ASAP for order-independence */
- rb_class_name(rb_cObject);
+ rb_set_class_path_string(rb_cObject, rb_cObject, rb_fstring_lit("Object"));
rb_cModule = boot_defclass("Module", rb_cObject);
rb_cClass = boot_defclass("Class", rb_cModule);
+ rb_cRefinement = boot_defclass("Refinement", rb_cModule);
+
+#if 0 /* for RDoc */
+ // we pretend it to be public, otherwise RDoc will ignore it
+ rb_define_method(rb_cRefinement, "import_methods", refinement_import_methods, -1);
+#endif
rb_const_set(rb_cObject, rb_intern_const("BasicObject"), rb_cBasicObject);
RBASIC_SET_CLASS(rb_cClass, rb_cClass);
RBASIC_SET_CLASS(rb_cModule, rb_cClass);
RBASIC_SET_CLASS(rb_cObject, rb_cClass);
+ RBASIC_SET_CLASS(rb_cRefinement, rb_cClass);
RBASIC_SET_CLASS(rb_cBasicObject, rb_cClass);
+
+ ENSURE_EIGENCLASS(rb_cRefinement);
}
-/*!
- * \internal
+/**
+ * @internal
* Creates a new *singleton class* for an object.
*
- * \pre \a obj has no singleton class.
- * \note DO NOT USE the function in an extension libraries. Use \ref rb_singleton_class.
- * \param obj An object.
- * \param unused ignored.
- * \return The singleton class of the object.
+ * @pre `obj` has no singleton class.
+ * @note DO NOT USE the function in an extension libraries. Use @ref rb_singleton_class.
+ * @param obj An object.
+ * @param unused ignored.
+ * @return The singleton class of the object.
*/
VALUE
rb_make_metaclass(VALUE obj, VALUE unused)
{
if (BUILTIN_TYPE(obj) == T_CLASS) {
- return make_metaclass(obj);
+ return make_metaclass(obj);
}
else {
- return make_singleton_class(obj);
+ return make_singleton_class(obj);
}
}
-
-/*!
- * Defines a new class.
- * \param id ignored
- * \param super A class from which the new class will derive. NULL means \c Object class.
- * \return the created class
- * \throw TypeError if super is not a \c Class object.
- *
- * \note the returned class will not be associated with \a id.
- * You must explicitly set a class name if necessary.
- */
VALUE
rb_define_class_id(ID id, VALUE super)
{
@@ -601,19 +1566,19 @@ rb_define_class_id(ID id, VALUE super)
if (!super) super = rb_cObject;
klass = rb_class_new(super);
- rb_make_metaclass(klass, RBASIC(super)->klass);
+ rb_make_metaclass(klass, METACLASS_OF(super));
return klass;
}
-/*!
+/**
* Calls Class#inherited.
- * \param super A class which will be called #inherited.
+ * @param super A class which will be called #inherited.
* NULL means Object class.
- * \param klass A Class object which derived from \a super
- * \return the value \c Class#inherited's returns
- * \pre Each of \a super and \a klass must be a \c Class object.
+ * @param klass A Class object which derived from `super`
+ * @return the value `Class#inherited` returns
+ * @pre Each of `super` and `klass` must be a `Class` object.
*/
VALUE
rb_class_inherited(VALUE super, VALUE klass)
@@ -624,162 +1589,137 @@ rb_class_inherited(VALUE super, VALUE klass)
return rb_funcall(super, inherited, 1, klass);
}
-
-
-/*!
- * Defines a top-level class.
- * \param name name of the class
- * \param super a class from which the new class will derive.
- * NULL means \c Object class.
- * \return the created class
- * \throw TypeError if the constant name \a name is already taken but
- * the constant is not a \c Class.
- * \throw NameError if the class is already defined but the class can not
- * be reopened because its superclass is not \a super.
- * \post top-level constant named \a name refers the returned class.
- *
- * \note if a class named \a name is already defined and its superclass is
- * \a super, the function just returns the defined class.
- */
VALUE
rb_define_class(const char *name, VALUE super)
{
VALUE klass;
- ID id;
+ ID id = rb_intern(name);
- id = rb_intern(name);
if (rb_const_defined(rb_cObject, id)) {
- klass = rb_const_get(rb_cObject, id);
- if (!RB_TYPE_P(klass, T_CLASS)) {
- rb_raise(rb_eTypeError, "%s is not a class (%"PRIsVALUE")",
- name, rb_obj_class(klass));
- }
- if (rb_class_real(RCLASS_SUPER(klass)) != super) {
- rb_raise(rb_eTypeError, "superclass mismatch for class %s", name);
- }
- return klass;
+ klass = rb_const_get(rb_cObject, id);
+ if (!RB_TYPE_P(klass, T_CLASS)) {
+ rb_raise(rb_eTypeError, "%s is not a class (%"PRIsVALUE")",
+ name, rb_obj_class(klass));
+ }
+ if (rb_class_real(RCLASS_SUPER(klass)) != super) {
+ rb_raise(rb_eTypeError, "superclass mismatch for class %s", name);
+ }
+
+ /* Class may have been defined in Ruby and not pin-rooted */
+ rb_vm_register_global_object(klass);
+ return klass;
}
if (!super) {
- rb_warn("no super class for `%s', Object assumed", name);
+ rb_raise(rb_eArgError, "no super class for '%s'", name);
}
klass = rb_define_class_id(id, super);
- rb_vm_add_root_module(id, klass);
- rb_name_class(klass, id);
+ rb_vm_register_global_object(klass);
rb_const_set(rb_cObject, id, klass);
rb_class_inherited(super, klass);
return klass;
}
-
-/*!
- * Defines a class under the namespace of \a outer.
- * \param outer a class which contains the new class.
- * \param name name of the new class
- * \param super a class from which the new class will derive.
- * NULL means \c Object class.
- * \return the created class
- * \throw TypeError if the constant name \a name is already taken but
- * the constant is not a \c Class.
- * \throw TypeError if the class is already defined but the class can not
- * be reopened because its superclass is not \a super.
- * \post top-level constant named \a name refers the returned class.
- *
- * \note if a class named \a name is already defined and its superclass is
- * \a super, the function just returns the defined class.
- */
VALUE
rb_define_class_under(VALUE outer, const char *name, VALUE super)
{
return rb_define_class_id_under(outer, rb_intern(name), super);
}
-
-/*!
- * Defines a class under the namespace of \a outer.
- * \param outer a class which contains the new class.
- * \param id name of the new class
- * \param super a class from which the new class will derive.
- * NULL means \c Object class.
- * \return the created class
- * \throw TypeError if the constant name \a name is already taken but
- * the constant is not a \c Class.
- * \throw TypeError if the class is already defined but the class can not
- * be reopened because its superclass is not \a super.
- * \post top-level constant named \a name refers the returned class.
- *
- * \note if a class named \a name is already defined and its superclass is
- * \a super, the function just returns the defined class.
- */
VALUE
-rb_define_class_id_under(VALUE outer, ID id, VALUE super)
+rb_define_class_id_under_no_pin(VALUE outer, ID id, VALUE super)
{
VALUE klass;
if (rb_const_defined_at(outer, id)) {
- klass = rb_const_get_at(outer, id);
- if (!RB_TYPE_P(klass, T_CLASS)) {
- rb_raise(rb_eTypeError, "%"PRIsVALUE"::%"PRIsVALUE" is not a class"
- " (%"PRIsVALUE")",
- outer, rb_id2str(id), rb_obj_class(klass));
- }
- if (rb_class_real(RCLASS_SUPER(klass)) != super) {
- rb_raise(rb_eTypeError, "superclass mismatch for class "
- "%"PRIsVALUE"::%"PRIsVALUE""
- " (%"PRIsVALUE" is given but was %"PRIsVALUE")",
- outer, rb_id2str(id), RCLASS_SUPER(klass), super);
- }
- return klass;
+ klass = rb_const_get_at(outer, id);
+ if (!RB_TYPE_P(klass, T_CLASS)) {
+ rb_raise(rb_eTypeError, "%"PRIsVALUE"::%"PRIsVALUE" is not a class"
+ " (%"PRIsVALUE")",
+ outer, rb_id2str(id), rb_obj_class(klass));
+ }
+ if (rb_class_real(RCLASS_SUPER(klass)) != super) {
+ rb_raise(rb_eTypeError, "superclass mismatch for class "
+ "%"PRIsVALUE"::%"PRIsVALUE""
+ " (%"PRIsVALUE" is given but was %"PRIsVALUE")",
+ outer, rb_id2str(id), RCLASS_SUPER(klass), super);
+ }
+
+ return klass;
}
if (!super) {
- rb_warn("no super class for `%"PRIsVALUE"::%"PRIsVALUE"', Object assumed",
- rb_class_path(outer), rb_id2str(id));
+ rb_raise(rb_eArgError, "no super class for '%"PRIsVALUE"::%"PRIsVALUE"'",
+ rb_class_path(outer), rb_id2str(id));
}
klass = rb_define_class_id(id, super);
rb_set_class_path_string(klass, outer, rb_id2str(id));
rb_const_set(outer, id, klass);
rb_class_inherited(super, klass);
- rb_gc_register_mark_object(klass);
return klass;
}
VALUE
-rb_module_new(void)
+rb_define_class_id_under(VALUE outer, ID id, VALUE super)
+{
+ VALUE klass = rb_define_class_id_under_no_pin(outer, id, super);
+ rb_vm_register_global_object(klass);
+ return klass;
+}
+
+VALUE
+rb_module_s_alloc(VALUE klass)
+{
+ VALUE mod = class_alloc(T_MODULE, klass);
+ class_initialize_method_table(mod);
+ return mod;
+}
+
+static inline VALUE
+module_new(VALUE klass)
{
- VALUE mdl = class_alloc(T_MODULE, rb_cModule);
- RCLASS_M_TBL_INIT(mdl);
+ VALUE mdl = class_alloc(T_MODULE, klass);
+ class_initialize_method_table(mdl);
return (VALUE)mdl;
}
VALUE
-rb_define_module_id(ID id)
+rb_module_new(void)
{
- VALUE mdl;
+ return module_new(rb_cModule);
+}
- mdl = rb_module_new();
- rb_name_class(mdl, id);
+VALUE
+rb_refinement_new(void)
+{
+ return module_new(rb_cRefinement);
+}
- return mdl;
+// Kept for compatibility. Use rb_module_new() instead.
+VALUE
+rb_define_module_id(ID id)
+{
+ return rb_module_new();
}
VALUE
rb_define_module(const char *name)
{
VALUE module;
- ID id;
+ ID id = rb_intern(name);
- id = rb_intern(name);
if (rb_const_defined(rb_cObject, id)) {
- module = rb_const_get(rb_cObject, id);
- if (!RB_TYPE_P(module, T_MODULE)) {
- rb_raise(rb_eTypeError, "%s is not a module (%"PRIsVALUE")",
- name, rb_obj_class(module));
- }
- return module;
- }
- module = rb_define_module_id(id);
- rb_vm_add_root_module(id, module);
+ module = rb_const_get(rb_cObject, id);
+ if (!RB_TYPE_P(module, T_MODULE)) {
+ rb_raise(rb_eTypeError, "%s is not a module (%"PRIsVALUE")",
+ name, rb_obj_class(module));
+ }
+ /* Module may have been defined in Ruby and not pin-rooted */
+ rb_vm_register_global_object(module);
+ return module;
+ }
+ module = rb_module_new();
+ rb_vm_register_global_object(module);
rb_const_set(rb_cObject, id, module);
return module;
@@ -797,18 +1737,20 @@ rb_define_module_id_under(VALUE outer, ID id)
VALUE module;
if (rb_const_defined_at(outer, id)) {
- module = rb_const_get_at(outer, id);
- if (!RB_TYPE_P(module, T_MODULE)) {
- rb_raise(rb_eTypeError, "%"PRIsVALUE"::%"PRIsVALUE" is not a module"
- " (%"PRIsVALUE")",
- outer, rb_id2str(id), rb_obj_class(module));
- }
- return module;
- }
- module = rb_define_module_id(id);
+ module = rb_const_get_at(outer, id);
+ if (!RB_TYPE_P(module, T_MODULE)) {
+ rb_raise(rb_eTypeError, "%"PRIsVALUE"::%"PRIsVALUE" is not a module"
+ " (%"PRIsVALUE")",
+ outer, rb_id2str(id), rb_obj_class(module));
+ }
+ /* Module may have been defined in Ruby and not pin-rooted */
+ rb_vm_register_global_object(module);
+ return module;
+ }
+ module = rb_module_new();
rb_const_set(outer, id, module);
rb_set_class_path_string(module, outer, rb_id2str(id));
- rb_gc_register_mark_object(module);
+ rb_vm_register_global_object(module);
return module;
}
@@ -818,52 +1760,79 @@ rb_include_class_new(VALUE module, VALUE super)
{
VALUE klass = class_alloc(T_ICLASS, rb_cClass);
+ RCLASS_SET_M_TBL(klass, RCLASS_WRITABLE_M_TBL(module));
+
+ RCLASS_SET_ORIGIN(klass, klass);
if (BUILTIN_TYPE(module) == T_ICLASS) {
- module = RBASIC(module)->klass;
+ module = METACLASS_OF(module);
}
- if (!RCLASS_IV_TBL(module)) {
- RCLASS_IV_TBL(module) = st_init_numtable();
+ RUBY_ASSERT(!RB_TYPE_P(module, T_ICLASS));
+ if (RCLASS_WRITABLE_CONST_TBL(module)) {
+ RCLASS_SET_CONST_TBL(klass, RCLASS_WRITABLE_CONST_TBL(module), true);
}
- if (!RCLASS_CONST_TBL(module)) {
- RCLASS_CONST_TBL(module) = rb_id_table_create(0);
+ else {
+ RCLASS_WRITE_CONST_TBL(module, rb_id_table_create(0), false);
+ RCLASS_SET_CONST_TBL(klass, RCLASS_WRITABLE_CONST_TBL(module), true);
}
- RCLASS_IV_TBL(klass) = RCLASS_IV_TBL(module);
- RCLASS_CONST_TBL(klass) = RCLASS_CONST_TBL(module);
- RCLASS_M_TBL(OBJ_WB_UNPROTECT(klass)) =
- RCLASS_M_TBL(OBJ_WB_UNPROTECT(RCLASS_ORIGIN(module))); /* TODO: unprotected? */
+ RCLASS_SET_CVC_TBL(klass, RCLASS_WRITABLE_CVC_TBL(module));
- RCLASS_SET_SUPER(klass, super);
- if (RB_TYPE_P(module, T_ICLASS)) {
- RBASIC_SET_CLASS(klass, RBASIC(module)->klass);
- }
- else {
- RBASIC_SET_CLASS(klass, module);
- }
- OBJ_INFECT(klass, module);
- OBJ_INFECT(klass, super);
+ class_associate_super(klass, super, true);
+ RBASIC_SET_CLASS(klass, module);
return (VALUE)klass;
}
static int include_modules_at(const VALUE klass, VALUE c, VALUE module, int search_super);
+static void
+ensure_includable(VALUE klass, VALUE module)
+{
+ rb_class_modify_check(klass);
+ Check_Type(module, T_MODULE);
+ rb_class_set_initialized(module);
+ if (!NIL_P(rb_refinement_module_get_refined_class(module))) {
+ rb_raise(rb_eArgError, "refinement module is not allowed");
+ }
+}
+
void
rb_include_module(VALUE klass, VALUE module)
{
int changed = 0;
- rb_frozen_class_p(klass);
-
- if (!RB_TYPE_P(module, T_MODULE)) {
- Check_Type(module, T_MODULE);
- }
-
- OBJ_INFECT(klass, module);
+ ensure_includable(klass, module);
changed = include_modules_at(klass, RCLASS_ORIGIN(klass), module, TRUE);
if (changed < 0)
- rb_raise(rb_eArgError, "cyclic include detected");
+ rb_raise(rb_eArgError, "cyclic include detected");
+
+ if (RB_TYPE_P(klass, T_MODULE)) {
+ rb_subclass_entry_t *iclass = RCLASS_SUBCLASSES_FIRST(klass);
+ while (iclass) {
+ int do_include = 1;
+ VALUE check_class = iclass->klass;
+ /* During lazy sweeping, iclass->klass could be a dead object that
+ * has not yet been swept. */
+ if (!rb_objspace_garbage_object_p(check_class)) {
+ while (check_class) {
+ RUBY_ASSERT(!rb_objspace_garbage_object_p(check_class));
+
+ if (RB_TYPE_P(check_class, T_ICLASS) &&
+ (METACLASS_OF(check_class) == module)) {
+ do_include = 0;
+ }
+ check_class = RCLASS_SUPER(check_class);
+ }
+
+ if (do_include) {
+ include_modules_at(iclass->klass, RCLASS_ORIGIN(iclass->klass), module, TRUE);
+ }
+ }
+
+ iclass = iclass->next;
+ }
+ }
}
static enum rb_id_table_iterator_result
@@ -873,124 +1842,251 @@ add_refined_method_entry_i(ID key, VALUE value, void *data)
return ID_TABLE_CONTINUE;
}
-static int
-include_modules_at(const VALUE klass, VALUE c, VALUE module, int search_super)
+static enum rb_id_table_iterator_result
+clear_module_cache_i(ID id, VALUE val, void *data)
+{
+ VALUE klass = (VALUE)data;
+ rb_clear_method_cache(klass, id);
+ return ID_TABLE_CONTINUE;
+}
+
+static bool
+module_in_super_chain(const VALUE klass, VALUE module)
{
- VALUE p, iclass;
- int method_changed = 0, constant_changed = 0;
struct rb_id_table *const klass_m_tbl = RCLASS_M_TBL(RCLASS_ORIGIN(klass));
+ if (klass_m_tbl) {
+ while (module) {
+ if (klass_m_tbl == RCLASS_M_TBL(module))
+ return true;
+ module = RCLASS_SUPER(module);
+ }
+ }
+ return false;
+}
+
+// For each ID key in the class constant table, we're going to clear the VM's
+// inline constant caches associated with it.
+static enum rb_id_table_iterator_result
+clear_constant_cache_i(ID id, VALUE value, void *data)
+{
+ rb_clear_constant_cache_for_id(id);
+ return ID_TABLE_CONTINUE;
+}
+
+static int
+do_include_modules_at(const VALUE klass, VALUE c, VALUE module, int search_super, bool check_cyclic)
+{
+ VALUE p, iclass, origin_stack = 0;
+ int method_changed = 0;
+ long origin_len;
+ VALUE klass_origin = RCLASS_ORIGIN(klass);
+ VALUE original_klass = klass;
+
+ if (check_cyclic && module_in_super_chain(klass, module))
+ return -1;
while (module) {
- int superclass_seen = FALSE;
- struct rb_id_table *tbl;
-
- if (RCLASS_ORIGIN(module) != module)
- goto skip;
- if (klass_m_tbl && klass_m_tbl == RCLASS_M_TBL(module))
- return -1;
- /* ignore if the module included already in superclasses */
- for (p = RCLASS_SUPER(klass); p; p = RCLASS_SUPER(p)) {
- int type = BUILTIN_TYPE(p);
- if (type == T_ICLASS) {
- if (RCLASS_M_TBL(p) == RCLASS_M_TBL(module)) {
- if (!superclass_seen) {
- c = p; /* move insertion point */
- }
- goto skip;
- }
- }
- else if (type == T_CLASS) {
- if (!search_super) break;
- superclass_seen = TRUE;
- }
- }
- iclass = rb_include_class_new(module, RCLASS_SUPER(c));
- c = RCLASS_SET_SUPER(c, iclass);
-
- {
- VALUE m = module;
- if (BUILTIN_TYPE(m) == T_ICLASS) m = RBASIC(m)->klass;
- rb_module_add_to_subclasses_list(m, iclass);
- }
-
- if (FL_TEST(klass, RMODULE_IS_REFINEMENT)) {
- VALUE refined_class =
- rb_refinement_module_get_refined_class(klass);
-
- rb_id_table_foreach(RMODULE_M_TBL(module), add_refined_method_entry_i, (void *)refined_class);
- FL_SET(c, RMODULE_INCLUDED_INTO_REFINEMENT);
- }
-
- tbl = RMODULE_M_TBL(module);
- if (tbl && rb_id_table_size(tbl)) method_changed = 1;
-
- tbl = RMODULE_CONST_TBL(module);
- if (tbl && rb_id_table_size(tbl)) constant_changed = 1;
+ int c_seen = FALSE;
+ int superclass_seen = FALSE;
+ struct rb_id_table *tbl;
+
+ if (klass == c) {
+ c_seen = TRUE;
+ }
+ if (klass_origin != c || search_super) {
+ /* ignore if the module included already in superclasses for include,
+ * ignore if the module included before origin class for prepend
+ */
+ for (p = RCLASS_SUPER(klass); p; p = RCLASS_SUPER(p)) {
+ int type = BUILTIN_TYPE(p);
+ if (klass_origin == p && !search_super)
+ break;
+ if (c == p)
+ c_seen = TRUE;
+ if (type == T_ICLASS) {
+ if (RCLASS_M_TBL(p) == RCLASS_M_TBL(module)) {
+ if (!superclass_seen && c_seen) {
+ c = p; /* move insertion point */
+ }
+ goto skip;
+ }
+ }
+ else if (type == T_CLASS) {
+ superclass_seen = TRUE;
+ }
+ }
+ }
+
+ VALUE super_class = RCLASS_SUPER(c);
+
+ // invalidate inline method cache
+ RB_DEBUG_COUNTER_INC(cvar_include_invalidate);
+ ruby_vm_global_cvar_state++;
+ tbl = RCLASS_M_TBL(module);
+ if (tbl && rb_id_table_size(tbl)) {
+ if (search_super) { // include
+ if (super_class && !RB_TYPE_P(super_class, T_MODULE)) {
+ rb_id_table_foreach(tbl, clear_module_cache_i, (void *)super_class);
+ }
+ }
+ else { // prepend
+ if (!RB_TYPE_P(original_klass, T_MODULE)) {
+ rb_id_table_foreach(tbl, clear_module_cache_i, (void *)original_klass);
+ }
+ }
+ method_changed = 1;
+ }
+
+ // setup T_ICLASS for the include/prepend module
+ iclass = rb_include_class_new(module, super_class);
+ c = rb_class_set_super(c, iclass);
+ RCLASS_SET_INCLUDER(iclass, klass);
+ if (module != RCLASS_ORIGIN(module)) {
+ if (!origin_stack) origin_stack = rb_ary_hidden_new(2);
+ VALUE origin[2] = {iclass, RCLASS_ORIGIN(module)};
+ rb_ary_cat(origin_stack, origin, 2);
+ }
+ else if (origin_stack && (origin_len = RARRAY_LEN(origin_stack)) > 1 &&
+ RARRAY_AREF(origin_stack, origin_len - 1) == module) {
+ RCLASS_WRITE_ORIGIN(RARRAY_AREF(origin_stack, (origin_len -= 2)), iclass);
+ RICLASS_WRITE_ORIGIN_SHARED_MTBL(iclass);
+ rb_ary_resize(origin_stack, origin_len);
+ }
+
+ VALUE m = module;
+ if (BUILTIN_TYPE(m) == T_ICLASS) m = METACLASS_OF(m);
+ rb_module_add_to_subclasses_list(m, iclass);
+
+ if (BUILTIN_TYPE(klass) == T_MODULE && FL_TEST(klass, RMODULE_IS_REFINEMENT)) {
+ VALUE refined_class =
+ rb_refinement_module_get_refined_class(klass);
+
+ rb_id_table_foreach(RCLASS_M_TBL(module), add_refined_method_entry_i, (void *)refined_class);
+ RUBY_ASSERT(BUILTIN_TYPE(c) == T_MODULE);
+ }
+
+ tbl = RCLASS_CONST_TBL(module);
+ if (tbl && rb_id_table_size(tbl))
+ rb_id_table_foreach(tbl, clear_constant_cache_i, NULL);
skip:
- module = RCLASS_SUPER(module);
+ module = RCLASS_SUPER(module);
}
- if (method_changed) rb_clear_method_cache_by_class(klass);
- if (constant_changed) rb_clear_constant_cache();
-
return method_changed;
}
+static int
+include_modules_at(const VALUE klass, VALUE c, VALUE module, int search_super)
+{
+ return do_include_modules_at(klass, c, module, search_super, true);
+}
+
static enum rb_id_table_iterator_result
move_refined_method(ID key, VALUE value, void *data)
{
- rb_method_entry_t *me = (rb_method_entry_t *) value;
- VALUE klass = (VALUE)data;
- struct rb_id_table *tbl = RCLASS_M_TBL(klass);
+ rb_method_entry_t *me = (rb_method_entry_t *)value;
if (me->def->type == VM_METHOD_TYPE_REFINED) {
- if (me->def->body.refined.orig_me) {
- const rb_method_entry_t *orig_me = me->def->body.refined.orig_me, *new_me;
- RB_OBJ_WRITE(me, &me->def->body.refined.orig_me, NULL);
- new_me = rb_method_entry_clone(me);
- rb_id_table_insert(tbl, key, (VALUE)new_me);
- RB_OBJ_WRITTEN(klass, Qundef, new_me);
- rb_method_entry_copy(me, orig_me);
- return ID_TABLE_CONTINUE;
- }
- else {
- rb_id_table_insert(tbl, key, (VALUE)me);
- return ID_TABLE_DELETE;
- }
+ VALUE klass = (VALUE)data;
+ struct rb_id_table *tbl = RCLASS_WRITABLE_M_TBL(klass);
+
+ if (me->def->body.refined.orig_me) {
+ const rb_method_entry_t *orig_me = me->def->body.refined.orig_me, *new_me;
+ RB_OBJ_WRITE(me, &me->def->body.refined.orig_me, NULL);
+ new_me = rb_method_entry_clone(me);
+ rb_method_table_insert(klass, tbl, key, new_me);
+ rb_method_entry_copy(me, orig_me);
+ return ID_TABLE_CONTINUE;
+ }
+ else {
+ rb_method_table_insert(klass, tbl, key, me);
+ return ID_TABLE_DELETE;
+ }
}
else {
- return ID_TABLE_CONTINUE;
+ return ID_TABLE_CONTINUE;
}
}
-void
-rb_prepend_module(VALUE klass, VALUE module)
+static enum rb_id_table_iterator_result
+cache_clear_refined_method(ID key, VALUE value, void *data)
{
- VALUE origin;
- int changed = 0;
-
- rb_frozen_class_p(klass);
+ rb_method_entry_t *me = (rb_method_entry_t *) value;
- Check_Type(module, T_MODULE);
+ if (me->def->type == VM_METHOD_TYPE_REFINED && me->def->body.refined.orig_me) {
+ VALUE klass = (VALUE)data;
+ rb_clear_method_cache(klass, me->called_id);
+ }
+ // Refined method entries without an orig_me is going to stay in the method
+ // table of klass, like before the move, so no need to clear the cache.
- OBJ_INFECT(klass, module);
+ return ID_TABLE_CONTINUE;
+}
- origin = RCLASS_ORIGIN(klass);
+static bool
+ensure_origin(VALUE klass)
+{
+ VALUE origin = RCLASS_ORIGIN(klass);
if (origin == klass) {
- origin = class_alloc(T_ICLASS, klass);
- OBJ_WB_UNPROTECT(origin); /* TODO: conservative shading. Need more survey. */
- RCLASS_SET_SUPER(origin, RCLASS_SUPER(klass));
- RCLASS_SET_SUPER(klass, origin);
- RCLASS_SET_ORIGIN(klass, origin);
- RCLASS_M_TBL(origin) = RCLASS_M_TBL(klass);
- RCLASS_M_TBL_INIT(klass);
- rb_id_table_foreach(RCLASS_M_TBL(origin), move_refined_method, (void *)klass);
- }
- changed = include_modules_at(klass, klass, module, FALSE);
- if (changed < 0)
- rb_raise(rb_eArgError, "cyclic prepend detected");
+ origin = class_alloc(T_ICLASS, klass);
+ RCLASS_SET_M_TBL(origin, RCLASS_M_TBL(klass));
+ rb_class_set_super(origin, RCLASS_SUPER(klass));
+ rb_class_set_super(klass, origin); // writes origin into RCLASS_SUPER(klass)
+ RCLASS_WRITE_ORIGIN(klass, origin);
+
+ // RCLASS_WRITE_ORIGIN marks origin as an origin, so this is the first
+ // point that it sees M_TBL and may mark it
+ rb_gc_writebarrier_remember(origin);
+
+ class_clear_method_table(klass);
+ rb_id_table_foreach(RCLASS_M_TBL(origin), cache_clear_refined_method, (void *)klass);
+ rb_id_table_foreach(RCLASS_M_TBL(origin), move_refined_method, (void *)klass);
+ return true;
+ }
+ return false;
+}
+
+void
+rb_prepend_module(VALUE klass, VALUE module)
+{
+ int changed;
+ bool klass_had_no_origin;
+
+ ensure_includable(klass, module);
+ if (module_in_super_chain(klass, module))
+ rb_raise(rb_eArgError, "cyclic prepend detected");
+
+ klass_had_no_origin = ensure_origin(klass);
+ changed = do_include_modules_at(klass, klass, module, FALSE, false);
+ RUBY_ASSERT(changed >= 0); // already checked for cyclic prepend above
if (changed) {
- rb_vm_check_redefinition_by_prepend(klass);
+ rb_vm_check_redefinition_by_prepend(klass);
+ }
+ if (RB_TYPE_P(klass, T_MODULE)) {
+ rb_subclass_entry_t *iclass = RCLASS_SUBCLASSES_FIRST(klass);
+ VALUE klass_origin = RCLASS_ORIGIN(klass);
+ struct rb_id_table *klass_m_tbl = RCLASS_M_TBL(klass);
+ struct rb_id_table *klass_origin_m_tbl = RCLASS_M_TBL(klass_origin);
+ while (iclass) {
+ /* During lazy sweeping, iclass->klass could be a dead object that
+ * has not yet been swept. */
+ if (!rb_objspace_garbage_object_p(iclass->klass)) {
+ const VALUE subclass = iclass->klass;
+ if (klass_had_no_origin && klass_origin_m_tbl == RCLASS_M_TBL(subclass)) {
+ // backfill an origin iclass to handle refinements and future prepends
+ rb_id_table_foreach(RCLASS_M_TBL(subclass), clear_module_cache_i, (void *)subclass);
+ RCLASS_WRITE_M_TBL(subclass, klass_m_tbl);
+ VALUE origin = rb_include_class_new(klass_origin, RCLASS_SUPER(subclass));
+ rb_class_set_super(subclass, origin);
+ RCLASS_SET_INCLUDER(origin, RCLASS_INCLUDER(subclass));
+ RCLASS_WRITE_ORIGIN(subclass, origin);
+ RICLASS_SET_ORIGIN_SHARED_MTBL(origin);
+ }
+ include_modules_at(subclass, subclass, module, FALSE);
+ }
+
+ iclass = iclass->next;
+ }
}
}
@@ -998,17 +2094,22 @@ rb_prepend_module(VALUE klass, VALUE module)
* call-seq:
* mod.included_modules -> array
*
- * Returns the list of modules included in <i>mod</i>.
+ * Returns the list of modules included or prepended in <i>mod</i>
+ * or one of <i>mod</i>'s ancestors.
+ *
+ * module Sub
+ * end
*
* module Mixin
+ * prepend Sub
* end
*
* module Outer
* include Mixin
* end
*
- * Mixin.included_modules #=> []
- * Outer.included_modules #=> [Mixin]
+ * Mixin.included_modules #=> [Sub]
+ * Outer.included_modules #=> [Sub, Mixin]
*/
VALUE
@@ -1019,11 +2120,11 @@ rb_mod_included_modules(VALUE mod)
VALUE origin = RCLASS_ORIGIN(mod);
for (p = RCLASS_SUPER(mod); p; p = RCLASS_SUPER(p)) {
- if (p != origin && BUILTIN_TYPE(p) == T_ICLASS) {
- VALUE m = RBASIC(p)->klass;
- if (RB_TYPE_P(m, T_MODULE))
- rb_ary_push(ary, m);
- }
+ if (p != origin && RCLASS_ORIGIN(p) == p && BUILTIN_TYPE(p) == T_ICLASS) {
+ VALUE m = METACLASS_OF(p);
+ if (RB_TYPE_P(m, T_MODULE))
+ rb_ary_push(ary, m);
+ }
}
return ary;
}
@@ -1032,8 +2133,8 @@ rb_mod_included_modules(VALUE mod)
* call-seq:
* mod.include?(module) -> true or false
*
- * Returns <code>true</code> if <i>module</i> is included in
- * <i>mod</i> or one of <i>mod</i>'s ancestors.
+ * Returns <code>true</code> if <i>module</i> is included
+ * or prepended in <i>mod</i> or one of <i>mod</i>'s ancestors.
*
* module A
* end
@@ -1054,9 +2155,9 @@ rb_mod_include_p(VALUE mod, VALUE mod2)
Check_Type(mod2, T_MODULE);
for (p = RCLASS_SUPER(mod); p; p = RCLASS_SUPER(p)) {
- if (BUILTIN_TYPE(p) == T_ICLASS) {
- if (RBASIC(p)->klass == mod2) return Qtrue;
- }
+ if (BUILTIN_TYPE(p) == T_ICLASS && !RICLASS_IS_ORIGIN_P(p)) {
+ if (METACLASS_OF(p) == mod2) return Qtrue;
+ }
}
return Qfalse;
}
@@ -1083,58 +2184,200 @@ VALUE
rb_mod_ancestors(VALUE mod)
{
VALUE p, ary = rb_ary_new();
+ VALUE refined_class = Qnil;
+ if (BUILTIN_TYPE(mod) == T_MODULE && FL_TEST(mod, RMODULE_IS_REFINEMENT)) {
+ refined_class = rb_refinement_module_get_refined_class(mod);
+ }
for (p = mod; p; p = RCLASS_SUPER(p)) {
- if (BUILTIN_TYPE(p) == T_ICLASS) {
- rb_ary_push(ary, RBASIC(p)->klass);
- }
- else if (p == RCLASS_ORIGIN(p)) {
- rb_ary_push(ary, p);
- }
+ if (p == refined_class) break;
+ if (p != RCLASS_ORIGIN(p)) continue;
+ if (BUILTIN_TYPE(p) == T_ICLASS) {
+ rb_ary_push(ary, METACLASS_OF(p));
+ }
+ else {
+ rb_ary_push(ary, p);
+ }
}
return ary;
}
-static int
-ins_methods_push(ID name, rb_method_visibility_t visi, VALUE ary, rb_method_visibility_t expected_visi)
+struct subclass_traverse_data
+{
+ VALUE buffer;
+ long count;
+ long maxcount;
+ bool immediate_only;
+};
+
+static void
+class_descendants_recursive(VALUE klass, VALUE v)
+{
+ struct subclass_traverse_data *data = (struct subclass_traverse_data *) v;
+
+ if (BUILTIN_TYPE(klass) == T_CLASS && !RCLASS_SINGLETON_P(klass)) {
+ if (data->buffer && data->count < data->maxcount && !rb_objspace_garbage_object_p(klass)) {
+ // assumes that this does not cause GC as long as the length does not exceed the capacity
+ rb_ary_push(data->buffer, klass);
+ }
+ data->count++;
+ if (!data->immediate_only) {
+ rb_class_foreach_subclass(klass, class_descendants_recursive, v);
+ }
+ }
+ else {
+ rb_class_foreach_subclass(klass, class_descendants_recursive, v);
+ }
+}
+
+static VALUE
+class_descendants(VALUE klass, bool immediate_only)
{
- if (visi == METHOD_VISI_UNDEF) return ST_CONTINUE;
+ struct subclass_traverse_data data = { Qfalse, 0, -1, immediate_only };
+
+ // estimate the count of subclasses
+ rb_class_foreach_subclass(klass, class_descendants_recursive, (VALUE) &data);
- switch (expected_visi) {
+ // the following allocation may cause GC which may change the number of subclasses
+ data.buffer = rb_ary_new_capa(data.count);
+ data.maxcount = data.count;
+ data.count = 0;
+
+ size_t gc_count = rb_gc_count();
+
+ // enumerate subclasses
+ rb_class_foreach_subclass(klass, class_descendants_recursive, (VALUE) &data);
+
+ if (gc_count != rb_gc_count()) {
+ rb_bug("GC must not occur during the subclass iteration of Class#descendants");
+ }
+
+ return data.buffer;
+}
+
+/*
+ * call-seq:
+ * subclasses -> array
+ *
+ * Returns an array of classes where the receiver is the
+ * direct superclass of the class, excluding singleton classes.
+ * The order of the returned array is not defined.
+ *
+ * class A; end
+ * class B < A; end
+ * class C < B; end
+ * class D < A; end
+ *
+ * A.subclasses #=> [D, B]
+ * B.subclasses #=> [C]
+ * C.subclasses #=> []
+ *
+ * Anonymous subclasses (not associated with a constant) are
+ * returned, too:
+ *
+ * c = Class.new(A)
+ * A.subclasses # => [#<Class:0x00007f003c77bd78>, D, B]
+ *
+ * Note that the parent does not hold references to subclasses
+ * and doesn't prevent them from being garbage collected. This
+ * means that the subclass might disappear when all references
+ * to it are dropped:
+ *
+ * # drop the reference to subclass, it can be garbage-collected now
+ * c = nil
+ *
+ * A.subclasses
+ * # It can be
+ * # => [#<Class:0x00007f003c77bd78>, D, B]
+ * # ...or just
+ * # => [D, B]
+ * # ...depending on whether garbage collector was run
+ */
+
+VALUE
+rb_class_subclasses(VALUE klass)
+{
+ return class_descendants(klass, true);
+}
+
+/*
+ * call-seq:
+ * attached_object -> object
+ *
+ * Returns the object for which the receiver is the singleton class.
+ *
+ * Raises an TypeError if the class is not a singleton class.
+ *
+ * class Foo; end
+ *
+ * Foo.singleton_class.attached_object #=> Foo
+ * Foo.attached_object #=> TypeError: `Foo' is not a singleton class
+ * Foo.new.singleton_class.attached_object #=> #<Foo:0x000000010491a370>
+ * TrueClass.attached_object #=> TypeError: `TrueClass' is not a singleton class
+ * NilClass.attached_object #=> TypeError: `NilClass' is not a singleton class
+ */
+
+VALUE
+rb_class_attached_object(VALUE klass)
+{
+ if (!RCLASS_SINGLETON_P(klass)) {
+ rb_raise(rb_eTypeError, "'%"PRIsVALUE"' is not a singleton class", klass);
+ }
+
+ return RCLASS_ATTACHED_OBJECT(klass);
+}
+
+static void
+ins_methods_push(st_data_t name, st_data_t ary)
+{
+ rb_ary_push((VALUE)ary, ID2SYM((ID)name));
+}
+
+static int
+ins_methods_i(st_data_t name, st_data_t type, st_data_t ary)
+{
+ switch ((rb_method_visibility_t)type) {
case METHOD_VISI_UNDEF:
- if (visi != METHOD_VISI_PRIVATE) rb_ary_push(ary, ID2SYM(name));
- break;
case METHOD_VISI_PRIVATE:
- case METHOD_VISI_PROTECTED:
- case METHOD_VISI_PUBLIC:
- if (visi == expected_visi) rb_ary_push(ary, ID2SYM(name));
- break;
+ break;
+ default: /* everything but private */
+ ins_methods_push(name, ary);
+ break;
}
return ST_CONTINUE;
}
static int
-ins_methods_i(st_data_t name, st_data_t type, st_data_t ary)
+ins_methods_type_i(st_data_t name, st_data_t type, st_data_t ary, rb_method_visibility_t visi)
{
- return ins_methods_push((ID)name, (rb_method_visibility_t)type, (VALUE)ary, METHOD_VISI_UNDEF); /* everything but private */
+ if ((rb_method_visibility_t)type == visi) {
+ ins_methods_push(name, ary);
+ }
+ return ST_CONTINUE;
}
static int
ins_methods_prot_i(st_data_t name, st_data_t type, st_data_t ary)
{
- return ins_methods_push((ID)name, (rb_method_visibility_t)type, (VALUE)ary, METHOD_VISI_PROTECTED);
+ return ins_methods_type_i(name, type, ary, METHOD_VISI_PROTECTED);
}
static int
ins_methods_priv_i(st_data_t name, st_data_t type, st_data_t ary)
{
- return ins_methods_push((ID)name, (rb_method_visibility_t)type, (VALUE)ary, METHOD_VISI_PRIVATE);
+ return ins_methods_type_i(name, type, ary, METHOD_VISI_PRIVATE);
}
static int
ins_methods_pub_i(st_data_t name, st_data_t type, st_data_t ary)
{
- return ins_methods_push((ID)name, (rb_method_visibility_t)type, (VALUE)ary, METHOD_VISI_PUBLIC);
+ return ins_methods_type_i(name, type, ary, METHOD_VISI_PUBLIC);
+}
+
+static int
+ins_methods_undef_i(st_data_t name, st_data_t type, st_data_t ary)
+{
+ return ins_methods_type_i(name, type, ary, METHOD_VISI_UNDEF);
}
struct method_entry_arg {
@@ -1150,53 +2393,70 @@ method_entry_i(ID key, VALUE value, void *data)
rb_method_visibility_t type;
if (me->def->type == VM_METHOD_TYPE_REFINED) {
- VALUE owner = me->owner;
- me = rb_resolve_refined_method(Qnil, me);
- if (!me) return ID_TABLE_CONTINUE;
- if (!arg->recur && me->owner != owner) return ID_TABLE_CONTINUE;
- }
- if (!st_lookup(arg->list, key, 0)) {
- if (UNDEFINED_METHOD_ENTRY_P(me)) {
- type = METHOD_VISI_UNDEF; /* none */
- }
- else {
- type = METHOD_ENTRY_VISI(me);
- }
- st_add_direct(arg->list, key, (st_data_t)type);
+ VALUE owner = me->owner;
+ me = rb_resolve_refined_method(Qnil, me);
+ if (!me) return ID_TABLE_CONTINUE;
+ if (!arg->recur && me->owner != owner) return ID_TABLE_CONTINUE;
+ }
+ if (!st_is_member(arg->list, key)) {
+ if (UNDEFINED_METHOD_ENTRY_P(me)) {
+ type = METHOD_VISI_UNDEF; /* none */
+ }
+ else {
+ type = METHOD_ENTRY_VISI(me);
+ RUBY_ASSERT(type != METHOD_VISI_UNDEF);
+ }
+ st_add_direct(arg->list, key, (st_data_t)type);
}
return ID_TABLE_CONTINUE;
}
+static void
+add_instance_method_list(VALUE mod, struct method_entry_arg *me_arg)
+{
+ struct rb_id_table *m_tbl = RCLASS_M_TBL(mod);
+ if (!m_tbl) return;
+ rb_id_table_foreach(m_tbl, method_entry_i, me_arg);
+}
+
+static bool
+particular_class_p(VALUE mod)
+{
+ if (!mod) return false;
+ if (RCLASS_SINGLETON_P(mod)) return true;
+ if (BUILTIN_TYPE(mod) == T_ICLASS) return true;
+ return false;
+}
+
static VALUE
class_instance_method_list(int argc, const VALUE *argv, VALUE mod, int obj, int (*func) (st_data_t, st_data_t, st_data_t))
{
VALUE ary;
- int recur, prepended = 0;
+ int recur = TRUE, prepended = 0;
struct method_entry_arg me_arg;
- if (argc == 0) {
- recur = TRUE;
- }
- else {
- VALUE r;
- rb_scan_args(argc, argv, "01", &r);
- recur = RTEST(r);
+ if (rb_check_arity(argc, 0, 1)) recur = RTEST(argv[0]);
+
+ me_arg.list = st_init_numtable();
+ me_arg.recur = recur;
+
+ if (obj) {
+ for (; particular_class_p(mod); mod = RCLASS_SUPER(mod)) {
+ add_instance_method_list(mod, &me_arg);
+ }
}
if (!recur && RCLASS_ORIGIN(mod) != mod) {
- mod = RCLASS_ORIGIN(mod);
- prepended = 1;
+ mod = RCLASS_ORIGIN(mod);
+ prepended = 1;
}
- me_arg.list = st_init_numtable();
- me_arg.recur = recur;
for (; mod; mod = RCLASS_SUPER(mod)) {
- if (RCLASS_M_TBL(mod)) rb_id_table_foreach(RCLASS_M_TBL(mod), method_entry_i, &me_arg);
- if (BUILTIN_TYPE(mod) == T_ICLASS && !prepended) continue;
- if (obj && FL_TEST(mod, FL_SINGLETON)) continue;
- if (!recur) break;
+ add_instance_method_list(mod, &me_arg);
+ if (BUILTIN_TYPE(mod) == T_ICLASS && !prepended) continue;
+ if (!recur) break;
}
- ary = rb_ary_new();
+ ary = rb_ary_new2(me_arg.list->num_entries);
st_foreach(me_arg.list, func, ary);
st_free_table(me_arg.list);
@@ -1228,6 +2488,15 @@ class_instance_method_list(int argc, const VALUE *argv, VALUE mod, int obj, int
* B.instance_methods(true).include?(:method1) #=> true
* C.instance_methods(false) #=> [:method3]
* C.instance_methods.include?(:method2) #=> true
+ *
+ * Note that method visibility changes in the current class, as well as aliases,
+ * are considered as methods of the current class by this method:
+ *
+ * class C < B
+ * alias method4 method2
+ * protected :method2
+ * end
+ * C.instance_methods(false).sort #=> [:method2, :method3, :method4]
*/
VALUE
@@ -1291,13 +2560,28 @@ rb_class_public_instance_methods(int argc, const VALUE *argv, VALUE mod)
/*
* call-seq:
+ * mod.undefined_instance_methods -> array
+ *
+ * Returns a list of the undefined instance methods defined in <i>mod</i>.
+ * The undefined methods of any ancestors are not included.
+ */
+
+VALUE
+rb_class_undefined_instance_methods(VALUE mod)
+{
+ VALUE include_super = Qfalse;
+ return class_instance_method_list(1, &include_super, mod, 0, ins_methods_undef_i);
+}
+
+/*
+ * call-seq:
* obj.methods(regular=true) -> array
*
* Returns a list of the names of public and protected methods of
* <i>obj</i>. This will include all the methods accessible in
* <i>obj</i>'s ancestors.
* If the optional parameter is <code>false</code>, it
- * returns an array of <i>obj<i>'s public and protected singleton methods,
+ * returns an array of <i>obj</i>'s public and protected singleton methods,
* the array will not include methods in modules included in <i>obj</i>.
*
* class Klass
@@ -1324,7 +2608,7 @@ rb_obj_methods(int argc, const VALUE *argv, VALUE obj)
{
rb_check_arity(argc, 0, 1);
if (argc > 0 && !RTEST(argv[0])) {
- return rb_obj_singleton_methods(argc, argv, obj);
+ return rb_obj_singleton_methods(argc, argv, obj);
}
return class_instance_method_list(argc, argv, CLASS_OF(obj), 1, ins_methods_i);
}
@@ -1410,31 +2694,30 @@ rb_obj_public_methods(int argc, const VALUE *argv, VALUE obj)
VALUE
rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj)
{
- VALUE recur, ary, klass, origin;
+ VALUE ary, klass, origin;
struct method_entry_arg me_arg;
struct rb_id_table *mtbl;
+ int recur = TRUE;
- if (argc == 0) {
- recur = Qtrue;
- }
- else {
- rb_scan_args(argc, argv, "01", &recur);
+ if (rb_check_arity(argc, 0, 1)) recur = RTEST(argv[0]);
+ if (RCLASS_SINGLETON_P(obj)) {
+ rb_singleton_class(obj);
}
klass = CLASS_OF(obj);
origin = RCLASS_ORIGIN(klass);
me_arg.list = st_init_numtable();
- me_arg.recur = RTEST(recur);
- if (klass && FL_TEST(klass, FL_SINGLETON)) {
- if ((mtbl = RCLASS_M_TBL(origin)) != 0) rb_id_table_foreach(mtbl, method_entry_i, &me_arg);
- klass = RCLASS_SUPER(klass);
- }
- if (RTEST(recur)) {
- while (klass && (FL_TEST(klass, FL_SINGLETON) || RB_TYPE_P(klass, T_ICLASS))) {
- if (klass != origin && (mtbl = RCLASS_M_TBL(klass)) != 0) rb_id_table_foreach(mtbl, method_entry_i, &me_arg);
- klass = RCLASS_SUPER(klass);
- }
- }
- ary = rb_ary_new();
+ me_arg.recur = recur;
+ if (klass && RCLASS_SINGLETON_P(klass)) {
+ if ((mtbl = RCLASS_M_TBL(origin)) != 0) rb_id_table_foreach(mtbl, method_entry_i, &me_arg);
+ klass = RCLASS_SUPER(klass);
+ }
+ if (recur) {
+ while (klass && (RCLASS_SINGLETON_P(klass) || RB_TYPE_P(klass, T_ICLASS))) {
+ if (klass != origin && (mtbl = RCLASS_M_TBL(klass)) != 0) rb_id_table_foreach(mtbl, method_entry_i, &me_arg);
+ klass = RCLASS_SUPER(klass);
+ }
+ }
+ ary = rb_ary_new2(me_arg.list->num_entries);
st_foreach(me_arg.list, ins_methods_i, ary);
st_free_table(me_arg.list);
@@ -1445,77 +2728,40 @@ rb_obj_singleton_methods(int argc, const VALUE *argv, VALUE obj)
* \}
*/
/*!
- * \defgroup defmethod Defining methods
- * There are some APIs to define a method from C.
- * These API takes a C function as a method body.
- *
- * \par Method body functions
- * Method body functions must return a VALUE and
- * can be one of the following form:
- * <dl>
- * <dt>Fixed number of parameters</dt>
- * <dd>
- * This form is a normal C function, excepting it takes
- * a receiver object as the first argument.
- *
- * \code
- * static VALUE my_method(VALUE self, VALUE x, VALUE y);
- * \endcode
- * </dd>
- * <dt>argc and argv style</dt>
- * <dd>
- * This form takes three parameters: \a argc, \a argv and \a self.
- * \a self is the receiver. \a argc is the number of arguments.
- * \a argv is a pointer to an array of the arguments.
- *
- * \code
- * static VALUE my_method(int argc, VALUE *argv, VALUE self);
- * \endcode
- * </dd>
- * <dt>Ruby array style</dt>
- * <dd>
- * This form takes two parameters: self and args.
- * \a self is the receiver. \a args is an Array object which
- * contains the arguments.
- *
- * \code
- * static VALUE my_method(VALUE self, VALUE args);
- * \endcode
- * </dd>
- *
- * \par Number of parameters
- * Method defining APIs takes the number of parameters which the
- * method will takes. This number is called \a argc.
- * \a argc can be:
- * <dl>
- * <dt>zero or positive number</dt>
- * <dd>This means the method body function takes a fixed number of parameters</dd>
- * <dt>-1</dt>
- * <dd>This means the method body function is "argc and argv" style.</dd>
- * <dt>-2</dt>
- * <dd>This means the method body function is "self and args" style.</dd>
- * </dl>
+ * \addtogroup defmethod
* \{
*/
+#ifdef rb_define_method_id
+#undef rb_define_method_id
+#endif
void
rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(ANYARGS), int argc)
{
rb_add_method_cfunc(klass, mid, func, argc, METHOD_VISI_PUBLIC);
}
+#ifdef rb_define_method
+#undef rb_define_method
+#endif
void
rb_define_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc)
{
rb_add_method_cfunc(klass, rb_intern(name), func, argc, METHOD_VISI_PUBLIC);
}
+#ifdef rb_define_protected_method
+#undef rb_define_protected_method
+#endif
void
rb_define_protected_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc)
{
rb_add_method_cfunc(klass, rb_intern(name), func, argc, METHOD_VISI_PROTECTED);
}
+#ifdef rb_define_private_method
+#undef rb_define_private_method
+#endif
void
rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc)
{
@@ -1528,6 +2774,23 @@ rb_undef_method(VALUE klass, const char *name)
rb_add_method(klass, rb_intern(name), VM_METHOD_TYPE_UNDEF, 0, METHOD_VISI_UNDEF);
}
+static enum rb_id_table_iterator_result
+undef_method_i(ID name, VALUE value, void *data)
+{
+ VALUE klass = (VALUE)data;
+ rb_add_method(klass, name, VM_METHOD_TYPE_UNDEF, 0, METHOD_VISI_UNDEF);
+ return ID_TABLE_CONTINUE;
+}
+
+void
+rb_undef_methods_from(VALUE klass, VALUE super)
+{
+ struct rb_id_table *mtbl = RCLASS_M_TBL(super);
+ if (mtbl) {
+ rb_id_table_foreach(mtbl, undef_method_i, (void *)klass);
+ }
+}
+
/*!
* \}
*/
@@ -1536,19 +2799,15 @@ rb_undef_method(VALUE klass, const char *name)
* \{
*/
-#define SPECIAL_SINGLETON(x,c) do {\
- if (obj == (x)) {\
- return (c);\
- }\
-} while (0)
-
static inline VALUE
special_singleton_class_of(VALUE obj)
{
- SPECIAL_SINGLETON(Qnil, rb_cNilClass);
- SPECIAL_SINGLETON(Qfalse, rb_cFalseClass);
- SPECIAL_SINGLETON(Qtrue, rb_cTrueClass);
- return Qnil;
+ switch (obj) {
+ case Qnil: return rb_cNilClass;
+ case Qfalse: return rb_cFalseClass;
+ case Qtrue: return rb_cTrueClass;
+ default: return Qnil;
+ }
}
VALUE
@@ -1557,50 +2816,64 @@ rb_special_singleton_class(VALUE obj)
return special_singleton_class_of(obj);
}
-/*!
- * \internal
- * Returns the singleton class of \a obj. Creates it if necessary.
+/**
+ * @internal
+ * Returns the singleton class of `obj`. Creates it if necessary.
*
- * \note DO NOT expose the returned singleton class to
+ * @note DO NOT expose the returned singleton class to
* outside of class.c.
- * Use \ref rb_singleton_class instead for
+ * Use @ref rb_singleton_class instead for
* consistency of the metaclass hierarchy.
*/
static VALUE
-singleton_class_of(VALUE obj)
+singleton_class_of(VALUE obj, bool ensure_eigenclass)
{
VALUE klass;
- if (FIXNUM_P(obj) || FLONUM_P(obj) || STATIC_SYM_P(obj)) {
- no_singleton:
- rb_raise(rb_eTypeError, "can't define singleton");
+ switch (TYPE(obj)) {
+ case T_FIXNUM:
+ case T_BIGNUM:
+ case T_FLOAT:
+ case T_SYMBOL:
+ rb_raise(rb_eTypeError, "can't define singleton");
+
+ case T_FALSE:
+ case T_TRUE:
+ case T_NIL:
+ klass = special_singleton_class_of(obj);
+ if (NIL_P(klass))
+ rb_bug("unknown immediate %p", (void *)obj);
+ return klass;
+
+ case T_STRING:
+ if (CHILLED_STRING_P(obj)) {
+ CHILLED_STRING_MUTATED(obj);
+ }
+ else if (FL_TEST_RAW(obj, RSTRING_FSTR)) {
+ rb_raise(rb_eTypeError, "can't define singleton");
+ }
+ }
+
+ bool needs_lock = rb_multi_ractor_p() && rb_ractor_shareable_p(obj);
+ unsigned int lev;
+ if (needs_lock) {
+ RB_VM_LOCK_ENTER_LEV(&lev);
+ }
+ {
+ klass = METACLASS_OF(obj);
+ if (!(RCLASS_SINGLETON_P(klass) &&
+ RCLASS_ATTACHED_OBJECT(klass) == obj)) {
+ klass = rb_make_metaclass(obj, klass);
+ }
+ RB_FL_SET_RAW(klass, RB_OBJ_FROZEN_RAW(obj));
+ if (ensure_eigenclass && RB_TYPE_P(obj, T_CLASS)) {
+ /* ensures an exposed class belongs to its own eigenclass */
+ (void)ENSURE_EIGENCLASS(klass);
+ }
+ }
+ if (needs_lock) {
+ RB_VM_LOCK_LEAVE_LEV(&lev);
}
- if (SPECIAL_CONST_P(obj)) {
- klass = special_singleton_class_of(obj);
- if (NIL_P(klass))
- rb_bug("unknown immediate %p", (void *)obj);
- return klass;
- }
- else {
- switch (BUILTIN_TYPE(obj)) {
- case T_FLOAT: case T_BIGNUM: case T_SYMBOL:
- goto no_singleton;
- }
- }
-
- klass = RBASIC(obj)->klass;
- if (!(FL_TEST(klass, FL_SINGLETON) &&
- rb_ivar_get(klass, id_attached) == obj)) {
- klass = rb_make_metaclass(obj, klass);
- }
-
- if (OBJ_TAINTED(obj)) {
- OBJ_TAINT(klass);
- }
- else {
- FL_UNSET(klass, FL_TAINT);
- }
- if (OBJ_FROZEN(obj)) OBJ_FREEZE_RAW(klass);
return klass;
}
@@ -1609,21 +2882,22 @@ void
rb_freeze_singleton_class(VALUE x)
{
/* should not propagate to meta-meta-class, and so on */
- if (!(RBASIC(x)->flags & FL_SINGLETON)) {
- VALUE klass = RBASIC_CLASS(x);
- if (klass && (klass = RCLASS_ORIGIN(klass)) != 0 &&
- FL_TEST(klass, (FL_SINGLETON|FL_FREEZE)) == FL_SINGLETON) {
- OBJ_FREEZE_RAW(klass);
- }
+ if (!RCLASS_SINGLETON_P(x)) {
+ VALUE klass = RBASIC_CLASS(x);
+ if (klass && // no class when hidden from ObjectSpace
+ FL_TEST_RAW(klass, FL_SINGLETON) &&
+ !OBJ_FROZEN_RAW(klass)) {
+ OBJ_FREEZE(klass);
+ }
}
}
-/*!
- * Returns the singleton class of \a obj, or nil if obj is not a
+/**
+ * Returns the singleton class of `obj`, or nil if obj is not a
* singleton object.
*
- * \param obj an arbitrary object.
- * \return the singleton class or nil.
+ * @param obj an arbitrary object.
+ * @return the singleton class or nil.
*/
VALUE
rb_singleton_class_get(VALUE obj)
@@ -1631,40 +2905,18 @@ rb_singleton_class_get(VALUE obj)
VALUE klass;
if (SPECIAL_CONST_P(obj)) {
- return rb_special_singleton_class(obj);
+ return rb_special_singleton_class(obj);
}
- klass = RBASIC(obj)->klass;
- if (!FL_TEST(klass, FL_SINGLETON)) return Qnil;
- if (rb_ivar_get(klass, id_attached) != obj) return Qnil;
+ klass = METACLASS_OF(obj);
+ if (!RCLASS_SINGLETON_P(klass)) return Qnil;
+ if (RCLASS_ATTACHED_OBJECT(klass) != obj) return Qnil;
return klass;
}
-/*!
- * Returns the singleton class of \a obj. Creates it if necessary.
- *
- * \param obj an arbitrary object.
- * \throw TypeError if \a obj is a Fixnum or a Symbol.
- * \return the singleton class.
- *
- * \post \a obj has its own singleton class.
- * \post if \a obj is a class,
- * the returned singleton class also has its own
- * singleton class in order to keep consistency of the
- * inheritance structure of metaclasses.
- * \note a new singleton class will be created
- * if \a obj does not have it.
- * \note the singleton classes for nil, true and false are:
- * NilClass, TrueClass and FalseClass.
- */
VALUE
rb_singleton_class(VALUE obj)
{
- VALUE klass = singleton_class_of(obj);
-
- /* ensures an exposed class belongs to its own eigenclass */
- if (RB_TYPE_P(obj, T_CLASS)) (void)ENSURE_EIGENCLASS(klass);
-
- return klass;
+ return singleton_class_of(obj, true);
}
/*!
@@ -1676,28 +2928,18 @@ rb_singleton_class(VALUE obj)
* \{
*/
-/*!
- * Defines a singleton method for \a obj.
- * \param obj an arbitrary object
- * \param name name of the singleton method
- * \param func the method body
- * \param argc the number of parameters, or -1 or -2. see \ref defmethod.
- */
+#ifdef rb_define_singleton_method
+#undef rb_define_singleton_method
+#endif
void
rb_define_singleton_method(VALUE obj, const char *name, VALUE (*func)(ANYARGS), int argc)
{
- rb_define_method(singleton_class_of(obj), name, func, argc);
+ rb_define_method(singleton_class_of(obj, false), name, func, argc);
}
-
-
-/*!
- * Defines a module function for \a module.
- * \param module an module or a class.
- * \param name name of the function
- * \param func the method body
- * \param argc the number of parameters, or -1 or -2. see \ref defmethod.
- */
+#ifdef rb_define_module_function
+#undef rb_define_module_function
+#endif
void
rb_define_module_function(VALUE module, const char *name, VALUE (*func)(ANYARGS), int argc)
{
@@ -1705,206 +2947,43 @@ rb_define_module_function(VALUE module, const char *name, VALUE (*func)(ANYARGS)
rb_define_singleton_method(module, name, func, argc);
}
-
-/*!
- * Defines a global function
- * \param name name of the function
- * \param func the method body
- * \param argc the number of parameters, or -1 or -2. see \ref defmethod.
- */
+#ifdef rb_define_global_function
+#undef rb_define_global_function
+#endif
void
rb_define_global_function(const char *name, VALUE (*func)(ANYARGS), int argc)
{
rb_define_module_function(rb_mKernel, name, func, argc);
}
-
-/*!
- * Defines an alias of a method.
- * \param klass the class which the original method belongs to
- * \param name1 a new name for the method
- * \param name2 the original name of the method
- */
void
rb_define_alias(VALUE klass, const char *name1, const char *name2)
{
rb_alias(klass, rb_intern(name1), rb_intern(name2));
}
-/*!
- * Defines (a) public accessor method(s) for an attribute.
- * \param klass the class which the attribute will belongs to
- * \param name name of the attribute
- * \param read a getter method for the attribute will be defined if \a read is non-zero.
- * \param write a setter method for the attribute will be defined if \a write is non-zero.
- */
void
rb_define_attr(VALUE klass, const char *name, int read, int write)
{
rb_attr(klass, rb_intern(name), read, write, FALSE);
}
-int
-rb_obj_basic_to_s_p(VALUE obj)
-{
- const rb_method_entry_t *me = rb_method_entry(CLASS_OF(obj), rb_intern("to_s"));
- if (me && me->def && me->def->type == VM_METHOD_TYPE_CFUNC &&
- me->def->body.cfunc.func == rb_any_to_s)
- return 1;
- return 0;
-}
-
-#include <stdarg.h>
-
-int
-rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...)
-{
- int i;
- const char *p = fmt;
- VALUE *var;
- va_list vargs;
- int f_var = 0, f_hash = 0, f_block = 0;
- int n_lead = 0, n_opt = 0, n_trail = 0, n_mand;
- int argi = 0;
- VALUE hash = Qnil;
-
- if (ISDIGIT(*p)) {
- n_lead = *p - '0';
- p++;
- if (ISDIGIT(*p)) {
- n_opt = *p - '0';
- p++;
- if (ISDIGIT(*p)) {
- n_trail = *p - '0';
- p++;
- goto block_arg;
- }
- }
- }
- if (*p == '*') {
- f_var = 1;
- p++;
- if (ISDIGIT(*p)) {
- n_trail = *p - '0';
- p++;
- }
- }
- block_arg:
- if (*p == ':') {
- f_hash = 1;
- p++;
- }
- if (*p == '&') {
- f_block = 1;
- p++;
- }
- if (*p != '\0') {
- rb_fatal("bad scan arg format: %s", fmt);
- }
- n_mand = n_lead + n_trail;
-
- if (argc < n_mand)
- goto argc_error;
-
- va_start(vargs, fmt);
-
- /* capture an option hash - phase 1: pop */
- if (f_hash && n_mand < argc) {
- VALUE last = argv[argc - 1];
-
- if (NIL_P(last)) {
- /* nil is taken as an empty option hash only if it is not
- ambiguous; i.e. '*' is not specified and arguments are
- given more than sufficient */
- if (!f_var && n_mand + n_opt < argc)
- argc--;
- }
- else {
- hash = rb_check_hash_type(last);
- if (!NIL_P(hash)) {
- VALUE opts = rb_extract_keywords(&hash);
- if (!hash) argc--;
- hash = opts ? opts : Qnil;
- }
- }
- }
- /* capture leading mandatory arguments */
- for (i = n_lead; i-- > 0; ) {
- var = va_arg(vargs, VALUE *);
- if (var) *var = argv[argi];
- argi++;
- }
- /* capture optional arguments */
- for (i = n_opt; i-- > 0; ) {
- var = va_arg(vargs, VALUE *);
- if (argi < argc - n_trail) {
- if (var) *var = argv[argi];
- argi++;
- }
- else {
- if (var) *var = Qnil;
- }
- }
- /* capture variable length arguments */
- if (f_var) {
- int n_var = argc - argi - n_trail;
-
- var = va_arg(vargs, VALUE *);
- if (0 < n_var) {
- if (var) *var = rb_ary_new4(n_var, &argv[argi]);
- argi += n_var;
- }
- else {
- if (var) *var = rb_ary_new();
- }
- }
- /* capture trailing mandatory arguments */
- for (i = n_trail; i-- > 0; ) {
- var = va_arg(vargs, VALUE *);
- if (var) *var = argv[argi];
- argi++;
- }
- /* capture an option hash - phase 2: assignment */
- if (f_hash) {
- var = va_arg(vargs, VALUE *);
- if (var) *var = hash;
- }
- /* capture iterator block */
- if (f_block) {
- var = va_arg(vargs, VALUE *);
- if (rb_block_given_p()) {
- *var = rb_block_proc();
- }
- else {
- *var = Qnil;
- }
- }
- va_end(vargs);
-
- if (argi < argc) {
- argc_error:
- rb_error_arity(argc, n_mand, f_var ? UNLIMITED_ARGUMENTS : n_mand + n_opt);
- }
-
- return argc;
-}
-
VALUE
rb_keyword_error_new(const char *error, VALUE keys)
{
- const char *msg = "";
- VALUE error_message;
+ long i = 0, len = RARRAY_LEN(keys);
+ VALUE error_message = rb_sprintf("%s keyword%.*s", error, len > 1, "s");
- if (RARRAY_LEN(keys) == 1) {
- keys = RARRAY_AREF(keys, 0);
- }
- else {
- keys = rb_ary_join(keys, rb_usascii_str_new2(", "));
- msg = "s";
+ if (len > 0) {
+ rb_str_cat_cstr(error_message, ": ");
+ while (1) {
+ const VALUE k = RARRAY_AREF(keys, i);
+ rb_str_append(error_message, rb_inspect(k));
+ if (++i >= len) break;
+ rb_str_cat_cstr(error_message, ", ");
+ }
}
- error_message = rb_sprintf("%s keyword%s: %"PRIsVALUE, error, msg, keys);
-
return rb_exc_new_str(rb_eArgError, error_message);
}
@@ -1919,23 +2998,19 @@ NORETURN(static void unknown_keyword_error(VALUE hash, const ID *table, int keyw
static void
unknown_keyword_error(VALUE hash, const ID *table, int keywords)
{
- st_table *tbl = rb_hash_tbl_raw(hash);
- VALUE keys;
int i;
for (i = 0; i < keywords; i++) {
- st_data_t key = ID2SYM(table[i]);
- st_delete(tbl, &key, NULL);
+ st_data_t key = ID2SYM(table[i]);
+ rb_hash_stlike_delete(hash, &key, NULL);
}
- keys = rb_funcallv(hash, rb_intern("keys"), 0, 0);
- if (!RB_TYPE_P(keys, T_ARRAY)) rb_raise(rb_eArgError, "unknown keyword");
- rb_keyword_error("unknown", keys);
+ rb_keyword_error("unknown", rb_hash_keys(hash));
}
+
static int
separate_symbol(st_data_t key, st_data_t value, st_data_t arg)
{
VALUE *kwdhash = (VALUE *)arg;
-
if (!SYMBOL_P(key)) kwdhash++;
if (!*kwdhash) *kwdhash = rb_hash_new();
rb_hash_aset(*kwdhash, (VALUE)key, (VALUE)value);
@@ -1949,11 +3024,14 @@ rb_extract_keywords(VALUE *orighash)
VALUE hash = *orighash;
if (RHASH_EMPTY_P(hash)) {
- *orighash = 0;
- return hash;
+ *orighash = 0;
+ return hash;
}
- st_foreach(rb_hash_tbl_raw(hash), separate_symbol, (st_data_t)&parthash);
+ rb_hash_foreach(hash, separate_symbol, (st_data_t)&parthash);
*orighash = parthash[1];
+ if (parthash[1] && RBASIC_CLASS(hash) != rb_cHash) {
+ RBASIC_SET_CLASS(parthash[1], RBASIC_CLASS(hash));
+ }
return parthash[0];
}
@@ -1967,60 +3045,230 @@ rb_get_kwargs(VALUE keyword_hash, const ID *table, int required, int optional, V
#define extract_kwarg(keyword, val) \
(key = (st_data_t)(keyword), values ? \
- st_delete(rb_hash_tbl_raw(keyword_hash), &key, (val)) : \
- st_lookup(rb_hash_tbl_raw(keyword_hash), key, (val)))
+ (rb_hash_stlike_delete(keyword_hash, &key, &(val)) || ((val) = Qundef, 0)) : \
+ rb_hash_stlike_lookup(keyword_hash, key, NULL))
if (NIL_P(keyword_hash)) keyword_hash = 0;
if (optional < 0) {
- rest = 1;
- optional = -1-optional;
- }
- if (values) {
- for (j = 0; j < required + optional; j++) {
- values[j] = Qundef;
- }
+ rest = 1;
+ optional = -1-optional;
}
if (required) {
- for (; i < required; i++) {
- VALUE keyword = ID2SYM(table[i]);
- if (keyword_hash) {
- st_data_t val;
- if (extract_kwarg(keyword, &val)) {
- if (values) values[i] = (VALUE)val;
- continue;
- }
- }
- if (NIL_P(missing)) missing = rb_ary_tmp_new(1);
- rb_ary_push(missing, keyword);
- }
- if (!NIL_P(missing)) {
- rb_keyword_error("missing", missing);
- }
+ for (; i < required; i++) {
+ VALUE keyword = ID2SYM(table[i]);
+ if (keyword_hash) {
+ if (extract_kwarg(keyword, values[i])) {
+ continue;
+ }
+ }
+ if (NIL_P(missing)) missing = rb_ary_hidden_new(1);
+ rb_ary_push(missing, keyword);
+ }
+ if (!NIL_P(missing)) {
+ rb_keyword_error("missing", missing);
+ }
}
j = i;
if (optional && keyword_hash) {
- for (i = 0; i < optional; i++) {
- st_data_t val;
- if (extract_kwarg(ID2SYM(table[required+i]), &val)) {
- if (values) values[required+i] = (VALUE)val;
- j++;
- }
- }
+ for (i = 0; i < optional; i++) {
+ if (extract_kwarg(ID2SYM(table[required+i]), values[required+i])) {
+ j++;
+ }
+ }
}
if (!rest && keyword_hash) {
- if (RHASH_SIZE(keyword_hash) > (unsigned int)j) {
- unknown_keyword_error(keyword_hash, table, required+optional);
- }
+ if (RHASH_SIZE(keyword_hash) > (unsigned int)(values ? 0 : j)) {
+ unknown_keyword_error(keyword_hash, table, required+optional);
+ }
+ }
+ if (values && !keyword_hash) {
+ for (i = 0; i < required + optional; i++) {
+ values[i] = Qundef;
+ }
}
return j;
#undef extract_kwarg
}
+struct rb_scan_args_t {
+ int kw_flag;
+ int n_lead;
+ int n_opt;
+ int n_trail;
+ bool f_var;
+ bool f_hash;
+ bool f_block;
+};
+
+static void
+rb_scan_args_parse(int kw_flag, const char *fmt, struct rb_scan_args_t *arg)
+{
+ const char *p = fmt;
+
+ memset(arg, 0, sizeof(*arg));
+ arg->kw_flag = kw_flag;
+
+ if (ISDIGIT(*p)) {
+ arg->n_lead = *p - '0';
+ p++;
+ if (ISDIGIT(*p)) {
+ arg->n_opt = *p - '0';
+ p++;
+ }
+ }
+ if (*p == '*') {
+ arg->f_var = 1;
+ p++;
+ }
+ if (ISDIGIT(*p)) {
+ arg->n_trail = *p - '0';
+ p++;
+ }
+ if (*p == ':') {
+ arg->f_hash = 1;
+ p++;
+ }
+ if (*p == '&') {
+ arg->f_block = 1;
+ p++;
+ }
+ if (*p != '\0') {
+ rb_fatal("bad scan arg format: %s", fmt);
+ }
+}
+
+static int
+rb_scan_args_assign(const struct rb_scan_args_t *arg, int argc, const VALUE *const argv, va_list vargs)
+{
+ int i, argi = 0;
+ VALUE *var, hash = Qnil;
+#define rb_scan_args_next_param() va_arg(vargs, VALUE *)
+ const int kw_flag = arg->kw_flag;
+ const int n_lead = arg->n_lead;
+ const int n_opt = arg->n_opt;
+ const int n_trail = arg->n_trail;
+ const int n_mand = n_lead + n_trail;
+ const bool f_var = arg->f_var;
+ const bool f_hash = arg->f_hash;
+ const bool f_block = arg->f_block;
+
+ /* capture an option hash - phase 1: pop from the argv */
+ if (f_hash && argc > 0) {
+ VALUE last = argv[argc - 1];
+ if (rb_scan_args_keyword_p(kw_flag, last)) {
+ hash = rb_hash_dup(last);
+ argc--;
+ }
+ }
+
+ if (argc < n_mand) {
+ goto argc_error;
+ }
+
+ /* capture leading mandatory arguments */
+ for (i = 0; i < n_lead; i++) {
+ var = rb_scan_args_next_param();
+ if (var) *var = argv[argi];
+ argi++;
+ }
+ /* capture optional arguments */
+ for (i = 0; i < n_opt; i++) {
+ var = rb_scan_args_next_param();
+ if (argi < argc - n_trail) {
+ if (var) *var = argv[argi];
+ argi++;
+ }
+ else {
+ if (var) *var = Qnil;
+ }
+ }
+ /* capture variable length arguments */
+ if (f_var) {
+ int n_var = argc - argi - n_trail;
+
+ var = rb_scan_args_next_param();
+ if (0 < n_var) {
+ if (var) *var = rb_ary_new_from_values(n_var, &argv[argi]);
+ argi += n_var;
+ }
+ else {
+ if (var) *var = rb_ary_new();
+ }
+ }
+ /* capture trailing mandatory arguments */
+ for (i = 0; i < n_trail; i++) {
+ var = rb_scan_args_next_param();
+ if (var) *var = argv[argi];
+ argi++;
+ }
+ /* capture an option hash - phase 2: assignment */
+ if (f_hash) {
+ var = rb_scan_args_next_param();
+ if (var) *var = hash;
+ }
+ /* capture iterator block */
+ if (f_block) {
+ var = rb_scan_args_next_param();
+ if (rb_block_given_p()) {
+ *var = rb_block_proc();
+ }
+ else {
+ *var = Qnil;
+ }
+ }
+
+ if (argi == argc) {
+ return argc;
+ }
+
+ argc_error:
+ return -(argc + 1);
+#undef rb_scan_args_next_param
+}
+
+static int
+rb_scan_args_result(const struct rb_scan_args_t *const arg, int argc)
+{
+ const int n_lead = arg->n_lead;
+ const int n_opt = arg->n_opt;
+ const int n_trail = arg->n_trail;
+ const int n_mand = n_lead + n_trail;
+ const bool f_var = arg->f_var;
+
+ if (argc >= 0) {
+ return argc;
+ }
+
+ argc = -argc - 1;
+ rb_error_arity(argc, n_mand, f_var ? UNLIMITED_ARGUMENTS : n_mand + n_opt);
+ UNREACHABLE_RETURN(-1);
+}
+
+#undef rb_scan_args
+int
+rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...)
+{
+ va_list vargs;
+ struct rb_scan_args_t arg;
+ rb_scan_args_parse(RB_SCAN_ARGS_PASS_CALLED_KEYWORDS, fmt, &arg);
+ va_start(vargs,fmt);
+ argc = rb_scan_args_assign(&arg, argc, argv, vargs);
+ va_end(vargs);
+ return rb_scan_args_result(&arg, argc);
+}
+
+#undef rb_scan_args_kw
int
-rb_class_has_methods(VALUE c)
+rb_scan_args_kw(int kw_flag, int argc, const VALUE *argv, const char *fmt, ...)
{
- return rb_id_table_size(RCLASS_M_TBL(c)) == 0 ? FALSE : TRUE;
+ va_list vargs;
+ struct rb_scan_args_t arg;
+ rb_scan_args_parse(kw_flag, fmt, &arg);
+ va_start(vargs,fmt);
+ argc = rb_scan_args_assign(&arg, argc, argv, vargs);
+ va_end(vargs);
+ return rb_scan_args_result(&arg, argc);
}
/*!
diff --git a/common.mk b/common.mk
index 94cb3ad198..8891b65ed9 100644
--- a/common.mk
+++ b/common.mk
@@ -1,62 +1,133 @@
+# -*- mode: makefile-gmake; indent-tabs-mode: t -*-
+# This fragment can be used with nmake.exe and with bsdmake.
+# Avoid features specific to GNU Make.
+
bin: $(PROGRAM) $(WPROGRAM)
lib: $(LIBRUBY)
dll: $(LIBRUBY_SO)
-.SUFFIXES: .inc .h .c .y .i .$(DTRACE_EXT)
+.SUFFIXES: .rbinc .rbbin .rb .inc .h .c .y .i .$(ASMEXT) .$(DTRACE_EXT)
# V=0 quiet, V=1 verbose. other values don't work.
V = 0
+V0 = $(V:0=)
Q1 = $(V:1=)
Q = $(Q1:0=@)
ECHO0 = $(ECHO1:0=echo)
ECHO = @$(ECHO0)
-UNICODE_VERSION = 8.0.0
+mflags = $(MFLAGS)
+gnumake_recursive =
+sequential = $(gnumake:yes=-sequential)
+enable_shared = $(ENABLE_SHARED:no=)
+
+UNICODE_VERSION = 17.0.0
+UNICODE_EMOJI_VERSION_0 = $(UNICODE_VERSION)///
+UNICODE_EMOJI_VERSION_1 = $(UNICODE_EMOJI_VERSION_0:.0///=)
+UNICODE_EMOJI_VERSION = $(UNICODE_EMOJI_VERSION_1:///=)
+UNICODE_BETA = NO
+
+### set the following environment variable or uncomment the line if
+### the Unicode data files should be updated completely on every update ('make up',...).
+# ALWAYS_UPDATE_UNICODE = yes
+UNICODE_DATA_DIR = enc/unicode/data/$(UNICODE_VERSION)/ucd
+UNICODE_SRC_DATA_DIR = $(srcdir)/$(UNICODE_DATA_DIR)
+UNICODE_SRC_EMOJI_DATA_DIR = $(srcdir)/enc/unicode/data/emoji/$(UNICODE_EMOJI_VERSION)
+UNICODE_HDR_DIR = $(srcdir)/enc/unicode/$(UNICODE_VERSION)
+UNICODE_DATA_HEADERS = \
+ $(UNICODE_HDR_DIR)/casefold.h \
+ $(UNICODE_HDR_DIR)/name2ctype.h \
+ $(empty)
RUBY_RELEASE_DATE = $(RUBY_RELEASE_YEAR)-$(RUBY_RELEASE_MONTH)-$(RUBY_RELEASE_DAY)
RUBYLIB = $(PATH_SEPARATOR)
RUBYOPT = -
RUN_OPTS = --disable-gems
+GIT_IN_SRC = $(GIT) -C $(srcdir)
+GIT_LOG = $(GIT_IN_SRC) log --no-show-signature
+GIT_LOG_FORMAT = $(GIT_LOG) "--pretty=format:"
+
+# GITPULLOPTIONS = --no-tags
+
+PRISM_SRCDIR = $(srcdir)/prism
+INCFLAGS = -I. -I$(arch_hdrdir) -I$(ext_hdrdir) -I$(hdrdir) -I$(srcdir) -I$(PRISM_SRCDIR) -I$(UNICODE_HDR_DIR) $(incflags)
+
GEM_HOME =
GEM_PATH =
GEM_VENDOR =
-SPEC_GIT_BASE = git://github.com/ruby
-MSPEC_GIT_URL = $(SPEC_GIT_BASE)/mspec.git
-RUBYSPEC_GIT_URL = $(SPEC_GIT_BASE)/spec.git
-
-SIMPLECOV_GIT_URL = git://github.com/colszowka/simplecov.git
-SIMPLECOV_GIT_REF = v0.10.0
-SIMPLECOV_HTML_GIT_URL = git://github.com/colszowka/simplecov-html.git
-SIMPLECOV_HTML_GIT_REF = v0.10.0
-DOCLIE_GIT_URL = git://github.com/ms-ati/docile.git
-DOCLIE_GIT_REF = v1.1.5
+BENCHMARK_DRIVER_GIT_URL = https://github.com/benchmark-driver/benchmark-driver
+BENCHMARK_DRIVER_GIT_REF = v0.16.3
STATIC_RUBY = static-ruby
+TIMESTAMPDIR = $(EXTOUT)/.timestamp
+RUBYCOMMONDIR = $(EXTOUT)/common
EXTCONF = extconf.rb
LIBRUBY_EXTS = ./.libruby-with-ext.time
REVISION_H = ./.revision.time
-PLATFORM_D = ./$(PLATFORM_DIR)/.time
-ENC_TRANS_D = ./enc/trans/.time
+PLATFORM_D = $(TIMESTAMPDIR)/.$(PLATFORM_DIR).time
+ENC_TRANS_D = $(TIMESTAMPDIR)/.enc-trans.time
+RDOC = $(XRUBY) "$(tooldir)/rdoc-srcdir"
RDOCOUT = $(EXTOUT)/rdoc
HTMLOUT = $(EXTOUT)/html
CAPIOUT = doc/capi
+INSTALL_DOC_OPTS = --rdoc-output="$(RDOCOUT)" --html-output="$(HTMLOUT)"
+RDOC_GEN_OPTS = --no-force-update \
+ $(empty)
INITOBJS = dmyext.$(OBJEXT) dmyenc.$(OBJEXT)
NORMALMAINOBJ = main.$(OBJEXT)
MAINOBJ = $(NORMALMAINOBJ)
DLDOBJS = $(INITOBJS)
EXTSOLIBS =
-MINIOBJS = $(ARCHMINIOBJS) miniinit.$(OBJEXT) dmyext.$(OBJEXT) miniprelude.$(OBJEXT)
+MINIOBJS = $(ARCHMINIOBJS) miniinit.$(OBJEXT)
ENC_MK = enc.mk
-
-COMMONOBJS = array.$(OBJEXT) \
+MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \
+ RUBY="$(BOOTSTRAPRUBY)" MINIRUBY="$(BOOTSTRAPRUBY)" $(mflags)
+
+PRISM_BUILD_DIR = prism
+
+PRISM_FILES = prism/api_node.$(OBJEXT) \
+ prism/api_pack.$(OBJEXT) \
+ prism/diagnostic.$(OBJEXT) \
+ prism/encoding.$(OBJEXT) \
+ prism/extension.$(OBJEXT) \
+ prism/node.$(OBJEXT) \
+ prism/options.$(OBJEXT) \
+ prism/pack.$(OBJEXT) \
+ prism/prettyprint.$(OBJEXT) \
+ prism/regexp.$(OBJEXT) \
+ prism/serialize.$(OBJEXT) \
+ prism/static_literals.$(OBJEXT) \
+ prism/token_type.$(OBJEXT) \
+ prism/util/pm_buffer.$(OBJEXT) \
+ prism/util/pm_char.$(OBJEXT) \
+ prism/util/pm_constant_pool.$(OBJEXT) \
+ prism/util/pm_integer.$(OBJEXT) \
+ prism/util/pm_list.$(OBJEXT) \
+ prism/util/pm_memchr.$(OBJEXT) \
+ prism/util/pm_newline_list.$(OBJEXT) \
+ prism/util/pm_string.$(OBJEXT) \
+ prism/util/pm_strncasecmp.$(OBJEXT) \
+ prism/util/pm_strpbrk.$(OBJEXT) \
+ prism/prism.$(OBJEXT) \
+ prism_init.$(OBJEXT)
+
+COMMONOBJS = \
+ array.$(OBJEXT) \
+ ast.$(OBJEXT) \
bignum.$(OBJEXT) \
+ box.$(OBJEXT) \
class.$(OBJEXT) \
compar.$(OBJEXT) \
+ compile.$(OBJEXT) \
complex.$(OBJEXT) \
+ concurrent_set.$(OBJEXT) \
+ cont.$(OBJEXT) \
+ debug.$(OBJEXT) \
+ debug_counter.$(OBJEXT) \
dir.$(OBJEXT) \
dln_find.$(OBJEXT) \
encoding.$(OBJEXT) \
@@ -64,21 +135,29 @@ COMMONOBJS = array.$(OBJEXT) \
enumerator.$(OBJEXT) \
error.$(OBJEXT) \
eval.$(OBJEXT) \
- load.$(OBJEXT) \
- proc.$(OBJEXT) \
file.$(OBJEXT) \
gc.$(OBJEXT) \
hash.$(OBJEXT) \
+ imemo.$(OBJEXT) \
inits.$(OBJEXT) \
io.$(OBJEXT) \
+ io_buffer.$(OBJEXT) \
+ iseq.$(OBJEXT) \
+ load.$(OBJEXT) \
marshal.$(OBJEXT) \
math.$(OBJEXT) \
+ memory_view.$(OBJEXT) \
node.$(OBJEXT) \
+ node_dump.$(OBJEXT) \
numeric.$(OBJEXT) \
object.$(OBJEXT) \
pack.$(OBJEXT) \
+ pathname.$(OBJEXT) \
parse.$(OBJEXT) \
+ parser_st.$(OBJEXT) \
+ proc.$(OBJEXT) \
process.$(OBJEXT) \
+ ractor.$(OBJEXT) \
random.$(OBJEXT) \
range.$(OBJEXT) \
rational.$(OBJEXT) \
@@ -90,7 +169,10 @@ COMMONOBJS = array.$(OBJEXT) \
regparse.$(OBJEXT) \
regsyntax.$(OBJEXT) \
ruby.$(OBJEXT) \
- safe.$(OBJEXT) \
+ ruby_parser.$(OBJEXT) \
+ scheduler.$(OBJEXT) \
+ set.$(OBJEXT) \
+ shape.$(OBJEXT) \
signal.$(OBJEXT) \
sprintf.$(OBJEXT) \
st.$(OBJEXT) \
@@ -98,74 +180,108 @@ COMMONOBJS = array.$(OBJEXT) \
string.$(OBJEXT) \
struct.$(OBJEXT) \
symbol.$(OBJEXT) \
+ thread.$(OBJEXT) \
time.$(OBJEXT) \
transcode.$(OBJEXT) \
util.$(OBJEXT) \
variable.$(OBJEXT) \
version.$(OBJEXT) \
- compile.$(OBJEXT) \
- debug.$(OBJEXT) \
- iseq.$(OBJEXT) \
vm.$(OBJEXT) \
- vm_dump.$(OBJEXT) \
vm_backtrace.$(OBJEXT) \
+ vm_dump.$(OBJEXT) \
+ vm_sync.$(OBJEXT) \
vm_trace.$(OBJEXT) \
- thread.$(OBJEXT) \
- cont.$(OBJEXT) \
+ weakmap.$(OBJEXT) \
+ $(PRISM_FILES) \
+ $(YJIT_OBJ) \
+ $(ZJIT_OBJ) \
+ $(JIT_OBJ) \
+ $(RUST_LIBOBJ) \
+ $(COROUTINE_OBJ) \
$(DTRACE_OBJ) \
$(BUILTIN_ENCOBJS) \
$(BUILTIN_TRANSOBJS) \
$(MISSING)
+$(PRISM_FILES): $(PRISM_BUILD_DIR)/.time $(PRISM_BUILD_DIR)/util/.time
+
+$(PRISM_BUILD_DIR)/.time $(PRISM_BUILD_DIR)/util/.time:
+ $(Q) $(MAKEDIRS) $(@D)
+ @$(NULLCMD) > $@
+
EXPORTOBJS = $(DLNOBJ) \
localeinit.$(OBJEXT) \
loadpath.$(OBJEXT) \
$(COMMONOBJS)
-OBJS = $(EXPORTOBJS) prelude.$(OBJEXT)
-ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(INITOBJS)
+OBJS = $(EXPORTOBJS) builtin.$(OBJEXT)
+ALLOBJS = $(OBJS) $(MINIOBJS) $(INITOBJS) $(MAINOBJ)
-GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT)
+GOLFOBJS = goruby.$(OBJEXT)
DEFAULT_PRELUDES = $(GEM_PRELUDE)
-PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(srcdir)/enc/prelude.rb $(DEFAULT_PRELUDES)
-GEM_PRELUDE = $(srcdir)/gem_prelude.rb
-PRELUDES = {$(srcdir)}prelude.c {$(srcdir)}miniprelude.c
-GOLFPRELUDES = {$(srcdir)}golf_prelude.c
+PRELUDE_SCRIPTS = $(DEFAULT_PRELUDES)
+GEM_PRELUDE =
+PRELUDES = {$(srcdir)}miniprelude.c
+GOLFPRELUDES = golf_prelude.rbbin
SCRIPT_ARGS = --dest-dir="$(DESTDIR)" \
--extout="$(EXTOUT)" \
+ --ext-build-dir="./ext" \
--mflags="$(MFLAGS)" \
--make-flags="$(MAKEFLAGS)"
EXTMK_ARGS = $(SCRIPT_ARGS) --extension $(EXTS) --extstatic $(EXTSTATIC) \
--make-flags="V=$(V) MINIRUBY='$(MINIRUBY)'" \
--gnumake=$(gnumake) --extflags="$(EXTLDFLAGS)" \
--
-INSTRUBY = $(SUDO) $(RUNRUBY) -r./$(arch)-fake $(srcdir)/tool/rbinstall.rb
+INSTRUBY = $(SUDO) $(INSTRUBY_ENV) $(RUNRUBY) -r./$(arch)-fake $(tooldir)/rbinstall.rb
INSTRUBY_ARGS = $(SCRIPT_ARGS) \
--data-mode=$(INSTALL_DATA_MODE) \
--prog-mode=$(INSTALL_PROG_MODE) \
--installed-list $(INSTALLED_LIST) \
- --mantype="$(MANTYPE)"
+ --mantype="$(MANTYPE)" \
+ $(INSTRUBY_OPTS)
INSTALL_PROG_MODE = 0755
INSTALL_DATA_MODE = 0644
-PRE_LIBRUBY_UPDATE = $(MINIRUBY) -e 'ARGV[1] or File.unlink(ARGV[0]) rescue nil' -- \
- $(LIBRUBY_EXTS) $(LIBRUBY_SO_UPDATE)
-
+BOOTSTRAPRUBY_COMMAND = $(BOOTSTRAPRUBY) $(BOOTSTRAPRUBY_OPT)
TESTSDIR = $(srcdir)/test
-TEST_EXCLUDES = --excludes=$(TESTSDIR)/excludes -x /memory_leak/
-EXCLUDE_TESTFRAMEWORK = -x /testunit/ -x /minitest/
+TOOL_TESTSDIR = $(tooldir)/test
+TEST_EXCLUDES = --excludes-dir=$(TESTSDIR)/.excludes --name=!/memory_leak/
TESTWORKDIR = testwork
TESTOPTS = $(RUBY_TESTOPTS)
TESTRUN_SCRIPT = $(srcdir)/test.rb
-COMPILE_PRELUDE = $(srcdir)/tool/generic_erb.rb $(srcdir)/template/prelude.c.tmpl
+COMPILE_PRELUDE = $(tooldir)/generic_erb.rb $(srcdir)/template/prelude.c.tmpl \
+ $(tooldir)/ruby_vm/helpers/c_escape.rb
+
+SHOWFLAGS = $(no_silence:no=showflags)
+
+MAKE_LINK = $(MINIRUBY) -rfileutils -e "include FileUtils::Verbose" \
+ -e "src, dest = ARGV" \
+ -e "exit if File.identical?(src, dest) or cmp(src, dest) rescue nil" \
+ -e "def noraise; yield; rescue; rescue NotImplementedError; end" \
+ -e "noraise {ln_sf('../'*dest.count('/')+src, dest)} or" \
+ -e "noraise {ln(src, dest)} or" \
+ -e "cp(src, dest)"
+
+# For release builds
+YJIT_RUSTC_ARGS = --crate-name=yjit \
+ $(JIT_RUST_FLAGS) \
+ $(RUSTC_FLAGS) \
+ --edition=2021 \
+ '--out-dir=$(CARGO_TARGET_DIR)/release/' \
+ '$(top_srcdir)/yjit/src/lib.rs'
-SHOWFLAGS = showflags
+ZJIT_RUSTC_ARGS = --crate-name=zjit \
+ $(JIT_RUST_FLAGS) \
+ $(RUSTC_FLAGS) \
+ --edition=2024 \
+ '--out-dir=$(CARGO_TARGET_DIR)/release/' \
+ '$(top_srcdir)/zjit/src/lib.rs'
-all: $(SHOWFLAGS) main docs
+all: $(SHOWFLAGS) main
main: $(SHOWFLAGS) exts $(ENCSTATIC:static=lib)encs
@$(NULLCMD)
@@ -174,6 +290,7 @@ main: $(SHOWFLAGS) exts $(ENCSTATIC:static=lib)encs
exts enc trans: $(SHOWFLAGS)
showflags:
$(MESSAGE_BEGIN) \
+ " BASERUBY = $(BASERUBY)" \
" CC = $(CC)" \
" LD = $(LD)" \
" LDSHARED = $(LDSHARED)" \
@@ -182,6 +299,13 @@ showflags:
" CPPFLAGS = $(CPPFLAGS)" \
" DLDFLAGS = $(DLDFLAGS)" \
" SOLIBS = $(SOLIBS)" \
+ " LANG = $(LANG)" \
+ " LC_ALL = $(LC_ALL)" \
+ " LC_CTYPE = $(LC_CTYPE)" \
+ " MFLAGS = $(MFLAGS)" \
+ " RUSTC = $(RUSTC)" \
+ " YJIT_RUSTC_ARGS = $(YJIT_RUSTC_ARGS)" \
+ " ZJIT_RUSTC_ARGS = $(ZJIT_RUSTC_ARGS)" \
$(MESSAGE_END)
-@$(CC_VERSION)
@@ -191,82 +315,119 @@ showconfig:
$(configure_args) \
$(ECHO_END)
+EXTS_NOTE = -f $(EXTS_MK) $(mflags) RUBY="$(MINIRUBY)" top_srcdir="$(srcdir)" note
+
exts: build-ext
EXTS_MK = exts.mk
-$(EXTS_MK): $(MKFILES) all-incs $(PREP) $(RBCONFIG) $(LIBRUBY)
+$(EXTS_MK): ext/configure-ext.mk $(srcdir)/template/exts.mk.tmpl \
+ $(TIMESTAMPDIR)/$(arch)/.time $(TIMESTAMPDIR)/.RUBYCOMMONDIR.time
+ $(Q)$(MAKE) -f ext/configure-ext.mk $(mflags) V=$(V) EXTSTATIC=$(EXTSTATIC) \
+ gnumake=$(gnumake) MINIRUBY="$(MINIRUBY)" \
+ EXTLDFLAGS="$(EXTLDFLAGS)" srcdir="$(srcdir)"
$(ECHO) generating makefile $@
- $(Q)$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --command-output=$(EXTS_MK) $(EXTMK_ARGS) configure
+ $(Q)$(MINIRUBY) $(tooldir)/generic_erb.rb -o $@ -c \
+ $(srcdir)/template/exts.mk.tmpl --gnumake=$(gnumake) --configure-exts=ext/configure-ext.mk
+
+ext/configure-ext.mk: $(PREP) all-incs $(MKFILES) $(RBCONFIG) $(LIBRUBY) \
+ $(srcdir)/template/configure-ext.mk.tmpl
+ $(ECHO) generating makefiles $@
+ $(Q)$(MAKEDIRS) $(@D)
+ $(Q)$(MINIRUBY) $(tooldir)/generic_erb.rb -o $@ -c \
+ $(srcdir)/template/$(@F).tmpl --srcdir="$(srcdir)" \
+ --miniruby="$(MINIRUBY)" --script-args='$(SCRIPT_ARGS)'
configure-ext: $(EXTS_MK)
build-ext: $(EXTS_MK)
- $(Q)$(MAKE) -f $(EXTS_MK) $(MFLAGS) libdir="$(libdir)" LIBRUBY_EXTS=$(LIBRUBY_EXTS) \
- ENCOBJS="$(ENCOBJS)" UPDATE_LIBRARIES=no $(EXTSTATIC)
+ $(Q)$(MAKE) -f $(EXTS_MK) $(mflags) libdir="$(libdir)" LIBRUBY_EXTS=$(LIBRUBY_EXTS) \
+ EXTENCS="$(ENCOBJS)" BASERUBY="$(BASERUBY)" MINIRUBY="$(MINIRUBY)" \
+ $(EXTSTATIC)
+ $(Q)$(MAKE) $(EXTS_NOTE)
+
+exts-note: $(EXTS_MK)
+ $(Q)$(MAKE) $(EXTS_NOTE)
+
+ext/extinit.c: $(srcdir)/template/extinit.c.tmpl $(PREP)
+ $(MAKEDIRS) $(@D)
+ $(Q)$(MINIRUBY) $(tooldir)/generic_erb.rb -o $@ -c \
+ $(srcdir)/template/extinit.c.tmpl $(EXTINITS)
prog: program wprogram
+programs: $(PROGRAM) $(WPROGRAM) $(arch)-fake.rb
$(PREP): $(MKFILES)
-miniruby$(EXEEXT): config.status $(ALLOBJS) $(ARCHFILE)
+miniruby$(EXEEXT): config.status $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(ARCHFILE)
objs: $(ALLOBJS)
GORUBY = go$(RUBY_INSTALL_NAME)
-golf: $(LIBRUBY) $(GOLFOBJS) PHONY
- $(Q) $(MAKE) $(MFLAGS) MAINOBJ="$(GOLFOBJS)" PROGRAM=$(GORUBY)$(EXEEXT) program
+GOLF = $(GORUBY)
+golf: $(GOLF)
+$(GOLF): $(LIBRUBY) $(GOLFOBJS) PHONY
+ $(Q) $(MAKE) $(mflags) \
+ GOLF=_dummy_golf_target_to_avoid_conflict_just_in_case_ \
+ MAINOBJ=goruby.$(OBJEXT) \
+ PROGRAM=$(GORUBY)$(EXEEXT) \
+ V=$(V) \
+ program
capi: $(CAPIOUT)/.timestamp PHONY
$(CAPIOUT)/.timestamp: Doxyfile $(PREP)
$(Q) $(MAKEDIRS) "$(@D)"
$(ECHO) generating capi
-$(Q) $(DOXYGEN) -b
- $(Q) $(MINIRUBY) -e 'File.open(ARGV[0], "w"){|f| f.puts(Time.now)}' "$@"
+ $(Q) $(MINIRUBY) -e 'File.open(ARGV[0], "w"){'"|f|"' f.puts(Time.now)}' "$@"
-Doxyfile: $(srcdir)/template/Doxyfile.tmpl $(PREP) $(srcdir)/tool/generic_erb.rb $(RBCONFIG)
+Doxyfile: $(srcdir)/template/Doxyfile.tmpl $(PREP) $(tooldir)/generic_erb.rb $(RBCONFIG)
$(ECHO) generating $@
- $(Q) $(MINIRUBY) $(srcdir)/tool/generic_erb.rb -o $@ $(srcdir)/template/Doxyfile.tmpl \
+ $(Q) $(MINIRUBY) $(tooldir)/generic_erb.rb -o $@ $(srcdir)/template/Doxyfile.tmpl \
--srcdir="$(srcdir)" --miniruby="$(MINIRUBY)"
-program: $(SHOWFLAGS) $(PROGRAM)
-wprogram: $(SHOWFLAGS) $(WPROGRAM)
+program: $(SHOWFLAGS) $(DOT_WAIT) $(PROGRAM)
+wprogram: $(SHOWFLAGS) $(DOT_WAIT) $(WPROGRAM)
mini: PHONY miniruby$(EXEEXT)
$(PROGRAM) $(WPROGRAM): $(LIBRUBY) $(MAINOBJ) $(OBJS) $(EXTOBJS) $(SETUP) $(PREP)
$(LIBRUBY_A): $(LIBRUBY_A_OBJS) $(MAINOBJ) $(INITOBJS) $(ARCHFILE)
-$(LIBRUBY_SO): $(OBJS) $(DLDOBJS) $(LIBRUBY_A) $(PREP) $(LIBRUBY_SO_UPDATE) $(BUILTIN_ENCOBJS)
+$(LIBRUBY_SO): $(OBJS) $(DLDOBJS) $(LIBRUBY_A) $(PREP) $(BUILTIN_ENCOBJS)
$(LIBRUBY_EXTS):
- @exit > $@
+ @$(NULLCMD) > $@
$(STATIC_RUBY)$(EXEEXT): $(MAINOBJ) $(DLDOBJS) $(EXTOBJS) $(LIBRUBY_A)
$(Q)$(RM) $@
- $(PURIFY) $(CC) $(MAINOBJ) $(DLDOBJS) $(EXTOBJS) $(LIBRUBY_A) $(MAINLIBS) $(EXTLIBS) $(LIBS) $(OUTFLAG)$@ $(LDFLAGS) $(XLDFLAGS)
+ $(PURIFY) $(CC) $(MAINOBJ) $(DLDOBJS) $(LIBRUBY_A) $(MAINLIBS) $(EXTLIBS) $(LIBS) $(OUTFLAG)$@ $(LDFLAGS) $(XLDFLAGS)
ruby.imp: $(COMMONOBJS)
- $(Q)$(NM) -Pgp $(COMMONOBJS) | \
- awk 'BEGIN{print "#!"}; $$2~/^[BDT]$$/&&$$1!~/^(Init_|ruby_static_id_|.*_threadptr_|\.)/{print $$1}' | \
+ $(Q){ \
+ $(NM) -Pgp $(COMMONOBJS) | \
+ awk 'BEGIN{print "#!"}; $$2~/^[A-TV-Z]$$/&&$$1!~/^$(SYMBOL_PREFIX)(Init_|InitVM_|ruby_static_id_|.*_threadptr_|rb_ec_)|^\./{print $$1}'; \
+ } | \
sort -u -o $@
install: install-$(INSTALLDOC)
-docs: $(DOCTARGETS)
+docs: srcs-doc $(DOCTARGETS)
pkgconfig-data: $(ruby_pc)
$(ruby_pc): $(srcdir)/template/ruby.pc.in config.status
-install-all: docs pre-install-all do-install-all post-install-all
-pre-install-all:: all pre-install-local pre-install-ext pre-install-doc
-do-install-all: pre-install-all
- $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=all --rdoc-output="$(RDOCOUT)"
-post-install-all:: post-install-local post-install-ext post-install-doc
+INSTALL_ALL = all
+
+install-all: pre-install-all do-install-all post-install-all
+pre-install-all:: all pre-install-local pre-install-ext pre-install-gem pre-install-doc
+do-install-all: pre-install-all $(DOT_WAIT) docs
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=$(INSTALL_ALL) $(INSTALL_DOC_OPTS)
+post-install-all:: post-install-local post-install-ext post-install-gem post-install-doc
@$(NULLCMD)
install-nodoc: pre-install-nodoc do-install-nodoc post-install-nodoc
-pre-install-nodoc:: pre-install-local pre-install-ext
+pre-install-nodoc:: pre-install-local pre-install-ext pre-install-gem
do-install-nodoc: main pre-install-nodoc
- $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS)
-post-install-nodoc:: post-install-local post-install-ext
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=$(INSTALL_ALL) --exclude=doc
+post-install-nodoc:: post-install-local post-install-ext post-install-gem
install-local: pre-install-local do-install-local post-install-local
pre-install-local:: pre-install-bin pre-install-lib pre-install-man
@@ -340,12 +501,12 @@ what-where-all: no-install-all
no-install-all: pre-no-install-all dont-install-all post-no-install-all
pre-no-install-all:: pre-no-install-local pre-no-install-ext pre-no-install-doc
dont-install-all: $(PROGRAM)
- $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=all --rdoc-output="$(RDOCOUT)"
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=$(INSTALL_ALL) $(INSTALL_DOC_OPTS)
post-no-install-all:: post-no-install-local post-no-install-ext post-no-install-doc
@$(NULLCMD)
uninstall: $(INSTALLED_LIST) sudo-precheck
- $(Q)$(SUDO) $(MINIRUBY) $(srcdir)/tool/rbuninstall.rb --destdir=$(DESTDIR) $(INSTALLED_LIST)
+ $(Q)$(SUDO) $(MINIRUBY) $(tooldir)/rbuninstall.rb --destdir=$(DESTDIR) $(INSTALLED_LIST)
reinstall: all uninstall install
@@ -353,7 +514,7 @@ what-where-nodoc: no-install-nodoc
no-install-nodoc: pre-no-install-nodoc dont-install-nodoc post-no-install-nodoc
pre-no-install-nodoc:: pre-no-install-local pre-no-install-ext
dont-install-nodoc: $(PREP)
- $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --exclude=doc
post-no-install-nodoc:: post-no-install-local post-no-install-ext
what-where-local: no-install-local
@@ -427,28 +588,48 @@ post-no-install-man::
install-doc: rdoc pre-install-doc do-install-doc post-install-doc
pre-install-doc:: install-prereq
do-install-doc: $(PROGRAM) pre-install-doc
- $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=rdoc --rdoc-output="$(RDOCOUT)"
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=rdoc $(INSTALL_DOC_OPTS)
post-install-doc::
@$(NULLCMD)
install-gem: pre-install-gem do-install-gem post-install-gem
-pre-install-gem:: pre-install-bin pre-install-lib pre-install-man
+pre-install-gem:: prepare-gems pre-install-bin pre-install-lib pre-install-man
do-install-gem: $(PROGRAM) pre-install-gem
$(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=gem
post-install-gem::
@$(NULLCMD)
-rdoc: PHONY main
+install-dbg: pre-install-dbg do-install-dbg post-install-dbg
+pre-install-dbg::
+do-install-dbg: $(PROGRAM) pre-install-dbg
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=dbg
+post-install-dbg::
+ @$(NULLCMD)
+
+srcs-doc: prepare-gems
+
+rdoc: PHONY main srcs-doc
@echo Generating RDoc documentation
- $(Q) $(XRUBY) "$(srcdir)/bin/rdoc" --root "$(srcdir)" --page-dir "$(srcdir)/doc" --encoding=UTF-8 --no-force-update --all --ri --op "$(RDOCOUT)" --debug $(RDOCFLAGS) "$(srcdir)"
+ $(Q) $(RDOC) --ri --op "$(RDOCOUT)" $(RDOC_GEN_OPTS) $(RDOCFLAGS) .
-html: PHONY main
+html: PHONY main srcs-doc
@echo Generating RDoc HTML files
- $(Q) $(XRUBY) "$(srcdir)/bin/rdoc" --root "$(srcdir)" --page-dir "$(srcdir)/doc" --encoding=UTF-8 --no-force-update --all --op "$(HTMLOUT)" --debug $(RDOCFLAGS) "$(srcdir)"
+ $(Q) $(RDOC) --op "$(HTMLOUT)" $(RDOC_GEN_OPTS) $(RDOCFLAGS) .
+
+RDOC_COVERAGE_EXCLUDES = -x ^ext/json -x ^ext/openssl -x ^ext/psych \
+ -x ^lib/bundler -x ^lib/rubygems \
+ -x ^lib/did_you_mean -x ^lib/error_highlight -x ^lib/syntax_suggest
-rdoc-coverage: PHONY main
+rdoc-coverage: PHONY main srcs-doc
@echo Generating RDoc coverage report
- $(Q) $(XRUBY) "$(srcdir)/bin/rdoc" --root "$(srcdir)" --encoding=UTF-8 --all --quiet -C $(RDOCFLAGS) "$(srcdir)"
+ $(Q) $(RDOC) --quiet -C $(RDOCFLAGS) $(RDOC_COVERAGE_EXCLUDES) .
+
+undocumented: PHONY main srcs-doc
+ $(Q) $(RDOC) --quiet -C $(RDOCFLAGS) $(RDOC_COVERAGE_EXCLUDES) . | \
+ sed -n \
+ -e '/^ *# in file /{' -e 's///;N;s/\n/: /p' -e '}' \
+ -e 's/^ *\(.*[^ ]\) *# in file \(.*\)/\2: \1/p' | \
+ sort -t: -k1,1 -k2n,2
RDOCBENCHOUT=/tmp/rdocbench
@@ -466,7 +647,7 @@ what-where-doc: no-install-doc
no-install-doc: pre-no-install-doc dont-install-doc post-no-install-doc
pre-no-install-doc:: install-prereq
dont-install-doc:: $(PREP)
- $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=rdoc --rdoc-output="$(RDOCOUT)"
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=rdoc $(INSTALL_DOC_OPTS)
post-no-install-doc::
@$(NULLCMD)
@@ -477,17 +658,27 @@ install-prereq: $(CLEAR_INSTALLED_LIST) yes-fake sudo-precheck PHONY
clear-installed-list: PHONY
@> $(INSTALLED_LIST) set MAKE="$(MAKE)"
-clean: clean-ext clean-enc clean-golf clean-rdoc clean-capi clean-extout clean-local clean-platform
+clean: clean-ext clean-enc clean-golf clean-docs clean-extout clean-modular-gc clean-local clean-platform clean-spec
clean-local:: clean-runnable
- $(Q)$(RM) $(OBJS) $(MINIOBJS) $(MAINOBJ) $(LIBRUBY_A) $(LIBRUBY_SO) $(LIBRUBY) $(LIBRUBY_ALIASES)
+ $(Q)$(RM) $(ALLOBJS) $(LIBRUBY_A) $(LIBRUBY_SO) $(LIBRUBY) $(LIBRUBY_ALIASES)
$(Q)$(RM) $(PROGRAM) $(WPROGRAM) miniruby$(EXEEXT) dmyext.$(OBJEXT) dmyenc.$(OBJEXT) $(ARCHFILE) .*.time
- $(Q)$(RM) y.tab.c y.output encdb.h transdb.h config.log rbconfig.rb $(ruby_pc) probes.h probes.$(OBJEXT) probes.stamp ruby-glommed.$(OBJEXT)
- $(Q)$(RM) GNUmakefile.old Makefile.old $(arch)-fake.rb bisect.sh $(ENC_TRANS_D)
- -$(Q) $(RMDIR) enc/jis enc/trans enc 2> $(NULL) || exit 0
-clean-runnable:: PHONY
- $(Q)$(CHDIR) bin 2>$(NULL) && $(RM) $(PROGRAM) $(WPROGRAM) $(GORUBY)$(EXEEXT) bin/*.$(DLEXT) 2>$(NULL) || exit 0
- $(Q)$(CHDIR) lib 2>$(NULL) && $(RM) $(LIBRUBY_A) $(LIBRUBY) $(LIBRUBY_ALIASES) $(RUBY_BASE_NAME)/$(RUBY_PROGRAM_VERSION) $(RUBY_BASE_NAME)/vendor_ruby 2>$(NULL) || exit 0
- $(Q)$(RMDIR) lib/$(RUBY_BASE_NAME) lib bin 2>$(NULL) || exit 0
+ $(Q)$(RM) y.tab.c y.output encdb.h transdb.h config.log rbconfig.rb $(ruby_pc) $(COROUTINE_H:/Context.h=/.time)
+ $(Q)$(RM) probes.h probes.$(OBJEXT) probes.stamp ruby-glommed.$(OBJEXT) ruby.imp ChangeLog $(STATIC_RUBY)$(EXEEXT)
+ $(Q)$(RM) GNUmakefile.old Makefile.old $(arch)-fake.rb bisect.sh $(ENC_TRANS_D) builtin_binary.rbbin
+ $(Q)$(RM) $(PRISM_BUILD_DIR)/.time $(PRISM_BUILD_DIR)/*/.time yjit_exit_locations.dump
+ -$(Q)$(RMALL) target
+ -$(Q) $(RMDIR) enc/jis enc/trans enc $(COROUTINE_H:/Context.h=) coroutine target \
+ $(PRISM_BUILD_DIR)/*/ $(PRISM_BUILD_DIR) tmp \
+ 2> $(NULL) || $(NULLCMD)
+
+bin/clean-runnable:: PHONY
+ $(Q)$(CHDIR) bin 2>$(NULL) && $(RM) $(PROGRAM) $(WPROGRAM) $(GORUBY)$(EXEEXT) bin/*.$(DLEXT) 2>$(NULL) || $(NULLCMD)
+lib/clean-runnable:: PHONY
+ $(Q)$(CHDIR) lib 2>$(NULL) && $(RM) $(LIBRUBY_A) $(LIBRUBY) $(LIBRUBY_ALIASES) $(RUBY_BASE_NAME)/$(ruby_version) $(RUBY_BASE_NAME)/vendor_ruby 2>$(NULL) || $(NULLCMD)
+clean-runnable:: bin/clean-runnable lib/clean-runnable PHONY
+ $(Q)$(RMDIR) lib/$(RUBY_BASE_NAME) lib bin 2>$(NULL) || $(NULLCMD)
+ -$(Q)$(RM) $(EXTOUT)/$(arch)/rbconfig.rb $(EXTOUT)/common/$(arch)
+ -$(Q)$(RMALL) exe/
clean-ext:: PHONY
clean-golf: PHONY
$(Q)$(RM) $(GORUBY)$(EXEEXT) $(GOLFOBJS)
@@ -496,40 +687,89 @@ clean-html: PHONY
clean-capi: PHONY
clean-platform: PHONY
clean-extout: PHONY
- -$(Q)$(RMDIR) $(EXTOUT)/$(arch) $(EXTOUT) 2> $(NULL) || exit 0
+ -$(Q)$(RMDIR) $(EXTOUT)/$(arch) $(RUBYCOMMONDIR) $(EXTOUT) 2> $(NULL) || $(NULLCMD)
clean-docs: clean-rdoc clean-html clean-capi
+clean-spec: PHONY
+clean-rubyspec: clean-spec
-distclean: distclean-ext distclean-enc distclean-golf distclean-extout distclean-local distclean-platform
+distclean: distclean-ext distclean-enc distclean-golf distclean-docs distclean-extout distclean-modular-gc distclean-local distclean-platform distclean-spec
distclean-local:: clean-local
- $(Q)$(RM) $(MKFILES) yasmdata.rb *.inc $(PRELUDES)
+ $(Q)$(RM) $(MKFILES) *.inc $(PRELUDES) *.rbinc *.rbbin
$(Q)$(RM) config.cache config.status config.status.lineno
$(Q)$(RM) *~ *.bak *.stackdump core *.core gmon.out $(PREP)
-$(Q)$(RMALL) $(srcdir)/autom4te.cache
-distclean-ext:: PHONY
+distclean-local:: distclean-srcs-local
+distclean-ext:: distclean-srcs-ext
distclean-golf: clean-golf
-distclean-rdoc: PHONY
-distclean-html: PHONY
-distclean-capi: PHONY
+distclean-rdoc: clean-rdoc
+distclean-html: clean-html
+distclean-capi: clean-capi
+distclean-docs: clean-docs
distclean-extout: clean-extout
distclean-platform: clean-platform
+distclean-spec: clean-spec
+distclean-rubyspec: distclean-spec
realclean:: realclean-ext realclean-local realclean-enc realclean-golf realclean-extout
-realclean-local:: distclean-local
+realclean-local:: distclean-local realclean-srcs-local
+
+clean-srcs:: clean-srcs-local clean-srcs-ext
+distclean-srcs:: distclean-srcs-local distclean-srcs-ext
+realclean-srcs:: realclean-srcs-local realclean-srcs-ext
+
+clean-srcs-local::
$(Q)$(RM) parse.c parse.h lex.c enc/trans/newline.c revision.h
- $(Q)$(RM) id.c id.h probes.dmyh
- $(Q)$(CHDIR) $(srcdir) && $(exec) $(RM) parse.c parse.h lex.c enc/trans/newline.c $(PRELUDES) revision.h
- $(Q)$(CHDIR) $(srcdir) && $(exec) $(RM) id.c id.h probes.dmyh
- $(Q)$(CHDIR) $(srcdir) && $(exec) $(RM) configure aclocal.m4 tool/config.guess tool/config.sub gems/*.gem
+ $(Q)$(RM) id.c id.h probes.dmyh probes.h
+ $(Q)$(RM) encdb.h transdb.h verconf.h ruby-runner.h
+
+distclean-srcs-local:: clean-srcs-local
+
+realclean-srcs-local:: distclean-srcs-local
+ $(Q)$(CHDIR) $(srcdir) && $(RM) \
+ parse.c parse.h lex.c enc/trans/newline.c $(PRELUDES) revision.h \
+ id.c id.h probes.dmyh configure aclocal.m4 tool/config.guess tool/config.sub \
+ $(PRISM_SRCDIR)/srcs.mk gems/*.gem \
+ || $(NULLCMD)
+
+clean-srcs-ext::
+distclean-srcs-ext:: clean-srcs-ext
+realclean-srcs-ext:: distclean-srcs-ext
+
realclean-ext:: PHONY
realclean-golf: distclean-golf
$(Q)$(RM) $(GOLFPRELUDES)
-realclean-capi: PHONY
+realclean-rdoc: distclean-rdoc
+realclean-html: distclean-html
+realclean-capi: distclean-capi
+realclean-docs: distclean-docs
realclean-extout: distclean-extout
+realclean-platform: distclean-platform
+realclean-spec: distclean-spec
+realclean-rubyspec: realclean-spec
+
+clean-ext:: ext/clean .bundle/clean timestamp/clean
+distclean-ext:: ext/distclean .bundle/distclean timestamp/distclean
+realclean-ext:: ext/realclean .bundle/realclean timestamp/realclean
-clean-ext distclean-ext realclean-ext::
- $(Q)$(RM) $(EXTS_MK)
- $(Q)$(RM) $(EXTOUT)/.timestamp/.*.time
- $(Q)$(RMDIR) $(EXTOUT)/.timestamp 2> $(NULL) || exit 0
+ext/clean.mk ext/distclean.mk ext/realclean.mk::
+ext/clean:: ext/clean.mk
+ext/distclean:: ext/distclean.mk
+ext/realclean:: ext/realclean.mk
+
+timestamp/clean:: ext/clean .bundle/clean
+timestamp/distclean:: ext/distclean .bundle/distclean
+timestamp/realclean:: ext/realclean .bundle/realclean
+
+timestamp/clean timestamp/distclean timestamp/realclean::
+ $(Q)$(RM) $(TIMESTAMPDIR)/.*.time $(TIMESTAMPDIR)/$(arch)/.time
+ $(Q)$(RMDIRS) $(TIMESTAMPDIR)/$(arch) $(TIMESTAMPDIR) 2> $(NULL) || $(NULLCMD)
+
+clean-ext::
+ -$(Q)$(RM) ext/extinit.$(OBJEXT)
+
+distclean-ext realclean-ext::
+ -$(Q)$(RM) $(EXTS_MK) ext/extinit.* ext/configure-ext.mk
+ -$(Q)$(RMDIR) ext 2> $(NULL) || $(NULLCMD)
clean-enc distclean-enc realclean-enc: PHONY
@@ -537,7 +777,7 @@ clean-enc: clean-enc.d
clean-enc.d: PHONY
$(Q)$(RM) $(ENC_TRANS_D)
- -$(Q) $(RMDIR) enc/jis enc/trans enc 2> $(NULL) || exit 0
+ -$(Q) $(RMDIR) enc/jis enc/trans enc 2> $(NULL) || $(NULLCMD)
clean-rdoc distclean-rdoc realclean-rdoc:
@echo $(@:-rdoc=ing) rdoc
@@ -551,110 +791,213 @@ clean-capi distclean-capi realclean-capi:
@echo $(@:-capi=ing) capi
$(Q)$(RMALL) $(CAPIOUT)
-clean-platform:
+clean-platform distclean-platform realclean-platform:
$(Q) $(RM) $(PLATFORM_D)
- -$(Q) $(RMDIR) $(PLATFORM_DIR) 2> $(NULL) || exit 0
+ -$(Q) $(RMDIR) $(PLATFORM_DIR) $(TIMESTAMPDIR) 2> $(NULL) || $(NULLCMD)
-check: main test test-testframework test-almost
+RUBYSPEC_CAPIEXT = spec/ruby/optional/capi/ext
+RUBYSPEC_CAPIEXT_SRCDIR = $(srcdir)/$(RUBYSPEC_CAPIEXT)
+RUBYSPEC_CAPIEXT_DEPS = $(RUBYSPEC_CAPIEXT_SRCDIR)/rubyspec.h $(RUBY_H_INCLUDES) {$(VPATH)}internal/abi.h $(LIBRUBY)
+RUBYSPEC_CAPIEXT_BUILD = $(enable_shared:yes=rubyspec-capiext)
+
+rubyspec-capiext: build-ext $(DOT_WAIT)
+# make-dependent rules should be included after this and built after build-ext.
+
+clean-spec: PHONY
+ -$(Q) $(RM) $(RUBYSPEC_CAPIEXT)/*.$(OBJEXT) $(RUBYSPEC_CAPIEXT)/*.$(DLEXT)
+ -$(Q) $(RMDIRS) $(RUBYSPEC_CAPIEXT) 2> $(NULL) || $(NULLCMD)
+ -$(Q) $(RMALL) rubyspec_temp
+
+check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all
$(ECHO) check succeeded
+ -$(Q) : : "run only on sh"; \
+ if [ x"$(GIT)" != x ] && $(CHDIR) "$(srcdir)" && \
+ b=`$(GIT) symbolic-ref --short HEAD 2>&1` && \
+ u=`$(GIT) branch --list --format='%(upstream:short)' $$b`; then \
+ set -x; $(GIT) --no-pager log --format=oneline -G '^ *# *include *("|<ruby)' $$u..HEAD --; \
+ fi
check-ruby: test test-ruby
fake: $(CROSS_COMPILING)-fake
yes-fake: $(arch)-fake.rb $(RBCONFIG) PHONY
no-fake -fake: PHONY
-# really doesn't depend on .o, just ensure newer than headers which
-# version.o depends on.
-$(arch)-fake.rb: $(srcdir)/template/fake.rb.in $(srcdir)/tool/generic_erb.rb version.$(OBJEXT) miniruby$(EXEEXT)
+$(HAVE_BASERUBY:no=)$(arch)-fake.rb: miniruby$(EXEEXT)
+
+# actually depending on other headers more.
+$(arch:noarch=ignore)-fake.rb: $(top_srcdir)/revision.h $(top_srcdir)/version.h $(srcdir)/version.c
+$(arch:noarch=ignore)-fake.rb: {$(VPATH)}id.h {$(VPATH)}vm_opts.h $(REVISION_H)
+
+$(arch:noarch=ignore)-fake.rb: $(srcdir)/template/fake.rb.in $(tooldir)/generic_erb.rb
$(ECHO) generating $@
- $(Q) $(CPP) $(warnflags) $(XCFLAGS) $(CPPFLAGS) "$(srcdir)/version.c" | \
- $(BOOTSTRAPRUBY) "$(srcdir)/tool/generic_erb.rb" -o $@ "$(srcdir)/template/fake.rb.in" \
- i=- srcdir="$(srcdir)" BASERUBY="$(BASERUBY)"
+ $(Q) $(CPP) -DRUBY_EXPORT $(INCFLAGS) $(CPPFLAGS) "$(srcdir)/version.c" | \
+ $(BOOTSTRAPRUBY) "$(tooldir)/generic_erb.rb" -o $@ "$(srcdir)/template/fake.rb.in" \
+ i=- srcdir="$(srcdir)" BASERUBY="$(BASERUBY)" \
+ LIBPATHENV="$(LIBPATHENV)" PRELOADENV="$(PRELOADENV)" LIBRUBY_SO="$(LIBRUBY_SO)"
+
+noarch-fake.rb: # prerequisite of yes-fake
+ $(Q) exit > $@
+# runner: BASERUBY, target: miniruby
btest: $(TEST_RUNNABLE)-btest
no-btest: PHONY
-yes-btest: fake miniruby$(EXEEXT) PHONY
- $(Q)$(exec) $(BOOTSTRAPRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(BTESTRUBY) $(RUN_OPTS)" $(OPTS) $(TESTOPTS)
+yes-btest: yes-fake miniruby$(EXEEXT) PHONY
+ $(ACTIONS_GROUP)
+ $(Q)$(gnumake_recursive)$(exec) $(BOOTSTRAPRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(BTESTRUBY) $(RUN_OPTS)" $(OPTS) $(TESTOPTS) $(BTESTS)
+ $(ACTIONS_ENDGROUP)
+# runner: ruby, target: ruby
btest-ruby: $(TEST_RUNNABLE)-btest-ruby
no-btest-ruby: PHONY
yes-btest-ruby: prog PHONY
- $(Q)$(exec) $(RUNRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(PROGRAM) -I$(srcdir)/lib $(RUN_OPTS)" -q $(OPTS) $(TESTOPTS)
+ $(ACTIONS_GROUP)
+ $(Q)$(gnumake_recursive)$(exec) $(RUNRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(PROGRAM) -I$(srcdir)/lib $(RUN_OPTS)" $(OPTS) $(TESTOPTS) $(BTESTS)
+ $(ACTIONS_ENDGROUP)
+
+# runner: BASERUBY, target: ruby
+btest-bruby: prog PHONY
+ $(ACTIONS_GROUP)
+ $(Q)$(gnumake_recursive)$(exec) $(BOOTSTRAPRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(PROGRAM) -I$(srcdir)/lib $(RUN_OPTS)" $(OPTS) $(TESTOPTS) $(BTESTS)
+ $(ACTIONS_ENDGROUP)
+
+rtest: yes-fake miniruby$(EXEEXT) PHONY
+ $(ACTIONS_GROUP)
+ $(Q)$(exec) $(BOOTSTRAPRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(BTESTRUBY) $(RUN_OPTS)" --sets=ractor -v
+ $(ACTIONS_ENDGROUP)
test-basic: $(TEST_RUNNABLE)-test-basic
no-test-basic: PHONY
yes-test-basic: prog PHONY
+ $(ACTIONS_GROUP)
$(Q)$(exec) $(RUNRUBY) "$(srcdir)/basictest/runner.rb" --run-opt=$(RUN_OPTS) $(OPTS) $(TESTOPTS)
+ $(ACTIONS_ENDGROUP)
test-knownbugs: test-knownbug
test-knownbug: $(TEST_RUNNABLE)-test-knownbug
no-test-knownbug: PHONY
yes-test-knownbug: prog PHONY
+ $(ACTIONS_GROUP)
-$(exec) $(RUNRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(PROGRAM) $(RUN_OPTS)" $(OPTS) $(TESTOPTS) $(srcdir)/KNOWNBUGS.rb
+ $(ACTIONS_ENDGROUP)
test-testframework: $(TEST_RUNNABLE)-test-testframework
yes-test-testframework: prog PHONY
- $(Q)$(exec) $(RUNRUBY) "$(srcdir)/test/runner.rb" --ruby="$(RUNRUBY)" $(TESTOPTS) testunit minitest
+ $(ACTIONS_GROUP)
+ $(gnumake_recursive)$(Q)$(exec) $(RUNRUBY) "$(TOOL_TESTSDIR)/runner.rb" --ruby="$(RUNRUBY)" $(TESTOPTS) testunit
+ $(ACTIONS_ENDGROUP)
no-test-testframework: PHONY
-test-sample: test-basic # backword compatibility for mswin-build
-test: btest-ruby test-knownbug test-basic
+test-tool: $(TEST_RUNNABLE)-test-tool
+yes-test-tool: prog PHONY
+ $(ACTIONS_GROUP)
+ $(gnumake_recursive)$(Q)$(exec) $(RUNRUBY) "$(TOOL_TESTSDIR)/runner.rb" --ruby="$(RUNRUBY)" $(TESTOPTS) $(TESTS)
+ $(ACTIONS_ENDGROUP)
+no-test-tool: PHONY
+
+test-sample: test-basic # backward compatibility for mswin-build
+test-short: btest-ruby $(DOT_WAIT) test-knownbug $(DOT_WAIT) test-basic
+test: test-short
+
+# Separate to skip updating encs and exts by `make -o test-precheck`
+# for GNU make.
+test-precheck: $(ENCSTATIC:static=lib)encs $(RUBYSPEC_CAPIEXT_BUILD) exts PHONY $(DOT_WAIT)
+yes-test-all-precheck: programs $(DOT_WAIT) test-precheck
+
+PRECHECK_TEST_ALL = yes-test-all-precheck
# $ make test-all TESTOPTS="--help" displays more detail
# for example, make test-all TESTOPTS="-j2 -v -n test-name -- test-file-name"
test-all: $(TEST_RUNNABLE)-test-all
-yes-test-all: prog PHONY
- $(Q)$(exec) $(RUNRUBY) "$(srcdir)/test/runner.rb" --ruby="$(RUNRUBY)" $(TEST_EXCLUDES) $(TESTOPTS) $(TESTS)
+yes-test-all: $(PRECHECK_TEST_ALL)
+ $(ACTIONS_GROUP)
+ $(gnumake_recursive)$(Q)$(exec) $(RUNRUBY) -r$(tooldir)/lib/_tmpdir \
+ "$(TESTSDIR)/runner.rb" --ruby="$(RUNRUBY)" \
+ $(TEST_EXCLUDES) $(TESTOPTS) $(TESTS)
+ $(ACTIONS_ENDGROUP)
TESTS_BUILD = mkmf
no-test-all: PHONY
- $(MINIRUBY) -I"$(srcdir)/lib" "$(srcdir)/test/runner.rb" $(TESTOPTS) $(TESTS_BUILD)
+ $(ACTIONS_GROUP)
+ $(gnumake_recursive)$(MINIRUBY) -I"$(srcdir)/lib" -r$(tooldir)/lib/_tmpdir \
+ "$(TESTSDIR)/runner.rb" $(TESTOPTS) $(TESTS_BUILD)
+ $(ACTIONS_ENDGROUP)
-test-almost: $(TEST_RUNNABLE)-test-almost
-yes-test-almost: prog PHONY
- $(Q)$(exec) $(RUNRUBY) "$(srcdir)/test/runner.rb" --ruby="$(RUNRUBY)" $(TEST_EXCLUDES) $(TESTOPTS) $(EXCLUDE_TESTFRAMEWORK) $(TESTS)
-no-test-almost: PHONY
+test-almost: test-all
+yes-test-almost: yes-test-all
+no-test-almost: no-test-all
test-ruby: $(TEST_RUNNABLE)-test-ruby
no-test-ruby: PHONY
yes-test-ruby: prog encs PHONY
- $(RUNRUBY) "$(srcdir)/test/runner.rb" $(TEST_EXCLUDES) $(TESTOPTS) -- ruby -ext-
+ $(gnumake_recursive)$(RUNRUBY) "$(TESTSDIR)/runner.rb" $(TEST_EXCLUDES) $(TESTOPTS) -- ruby -ext-
extconf: $(PREP)
$(Q) $(MAKEDIRS) "$(EXTCONFDIR)"
$(RUNRUBY) -C "$(EXTCONFDIR)" $(EXTCONF) $(EXTCONFARGS)
-$(RBCONFIG): $(srcdir)/tool/mkconfig.rb config.status $(srcdir)/version.h
- $(Q)$(BOOTSTRAPRUBY) $(srcdir)/tool/mkconfig.rb -timestamp=$@ \
+rbconfig.rb: $(RBCONFIG)
+
+$(HAVE_BASERUBY:no=)$(RBCONFIG)$(HAVE_BASERUBY:no=): $(PREP)
+$(RBCONFIG): $(tooldir)/mkconfig.rb config.status $(srcdir)/version.h $(srcdir)/common.mk
+ $(Q)$(BOOTSTRAPRUBY) -n \
+ -e 'BEGIN{version=ARGV.shift;mis=ARGV.dup}' \
+ -e 'END{abort "UNICODE version mismatch: #{mis}" unless mis.empty?}' \
+ -e '(mis.delete(ARGF.path); ARGF.close) if /ONIG_UNICODE_VERSION_STRING +"#{Regexp.quote(version)}"/o' \
+ $(UNICODE_VERSION) $(UNICODE_DATA_HEADERS)
+ $(Q)$(BOOTSTRAPRUBY) $(tooldir)/mkconfig.rb \
-arch=$(arch) -version=$(RUBY_PROGRAM_VERSION) \
-install_name=$(RUBY_INSTALL_NAME) \
- -so_name=$(RUBY_SO_NAME) rbconfig.rb
+ -so_name=$(RUBY_SO_NAME) \
+ -unicode_version=$(UNICODE_VERSION) \
+ -unicode_emoji_version=$(UNICODE_EMOJI_VERSION) \
+ > rbconfig.tmp
+ $(IFCHANGE) "--timestamp=$@" rbconfig.rb rbconfig.tmp
-test-rubyspec-precheck:
+test-rubyspec: test-spec
+yes-test-rubyspec: yes-test-spec
-test-rubyspec: test-rubyspec-precheck $(arch)-fake.rb
- $(RUNRUBY) -r./$(arch)-fake $(srcdir)/spec/mspec/bin/mspec run -B $(srcdir)/spec/default.mspec $(MSPECOPT)
+yes-test-spec-precheck: yes-test-all-precheck yes-fake
+
+test-spec: $(TEST_RUNNABLE)-test-spec
+yes-test-spec: yes-test-spec-precheck
+ $(ACTIONS_GROUP)
+ $(gnumake_recursive)$(Q) \
+ $(RUNRUBY) -r./$(arch)-fake -r$(tooldir)/lib/_tmpdir \
+ $(srcdir)/spec/mspec/bin/mspec run -B $(srcdir)/spec/default.mspec $(MSPECOPT) $(SPECOPTS)
+ $(ACTIONS_ENDGROUP)
+no-test-spec:
+
+check: $(DOT_WAIT) test-spec
RUNNABLE = $(LIBRUBY_RELATIVE:no=un)-runnable
-runnable: $(RUNNABLE) prog $(srcdir)/tool/mkrunnable.rb PHONY
- $(Q) $(MINIRUBY) $(srcdir)/tool/mkrunnable.rb -v $(EXTOUT)
+runnable: $(RUNNABLE)
+runnable-golf: golf
+runnable $(enable_shared:yes=runnable-golf): prog $(tooldir)/mkrunnable.rb PHONY
+ $(Q) $(MINIRUBY) $(tooldir)/mkrunnable.rb -v $(EXTOUT)
yes-runnable: PHONY
+hello: $(TEST_RUNNABLE)-hello
+yes-hello: runnable-golf
+ ./$(enable_shared:yes=bin/)$(GORUBY) -veh
+no-hello: runnable-golf
+ $(ECHO) Run ./$(enable_shared:yes=bin/)$(GORUBY) -veh
+
encs: enc trans
libencs: libenc libtrans
encs enc trans libencs libenc libtrans: $(SHOWFLAGS) $(ENC_MK) $(LIBRUBY) $(PREP) PHONY
$(ECHO) making $@
- $(Q) $(MAKE) -f $(ENC_MK) V="$(V)" \
- RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" \
- $(MFLAGS) $@
+ $(Q) $(MAKE) $(MAKE_ENC) $@
libenc enc: {$(VPATH)}encdb.h
libtrans trans: {$(VPATH)}transdb.h
+ENC_HEADERS = $(srcdir)/enc/jis/props.h
+# Use MINIRUBY which loads fake.rb for cross compiling
$(ENC_MK): $(srcdir)/enc/make_encmake.rb $(srcdir)/enc/Makefile.in $(srcdir)/enc/depend \
- $(srcdir)/enc/encinit.c.erb $(srcdir)/lib/mkmf.rb $(RBCONFIG) fake
+ $(srcdir)/enc/encinit.c.erb $(ENC_HEADERS) $(srcdir)/lib/mkmf.rb $(RBCONFIG) $(HAVE_BASERUBY)-fake
$(ECHO) generating $@
- $(Q) $(MINIRUBY) $(srcdir)/enc/make_encmake.rb --builtin-encs="$(BUILTIN_ENCOBJS)" --builtin-transes="$(BUILTIN_TRANSOBJS)" --module$(ENCSTATIC) $(ENCS) $@
+ $(Q) $(BOOTSTRAPRUBY_COMMAND) $(srcdir)/enc/make_encmake.rb \
+ --builtin-encs="$(BUILTIN_ENCOBJS)" --builtin-transes="$(BUILTIN_TRANSOBJS)" --module$(ENCSTATIC) $(ENCS) $@
.PRECIOUS: $(MKFILES)
@@ -662,94 +1005,129 @@ $(ENC_MK): $(srcdir)/enc/make_encmake.rb $(srcdir)/enc/Makefile.in $(srcdir)/enc
.PHONY: test install install-nodoc install-doc dist
.PHONY: loadpath golf capi rdoc install-prereq clear-installed-list
.PHONY: clean clean-ext clean-local clean-enc clean-golf clean-rdoc clean-html clean-extout
+.PHONY: clean-srcs clean-srcs-local clean-srcs-ext
.PHONY: distclean distclean-ext distclean-local distclean-enc distclean-golf distclean-extout
+.PHONY: distclean-srcs distclean-srcs-local distclean-srcs-ext
.PHONY: realclean realclean-ext realclean-local realclean-enc realclean-golf realclean-extout
-.PHONY: check test test-all btest btest-ruby test-basic test-knownbug
-.PHONY: run runruby parse benchmark benchmark-each tbench gdb gdb-ruby
-.PHONY: update-mspec update-rubyspec test-rubyspec
+.PHONY: realclean-srcs realclean-srcs-local realclean-srcs-ext
+.PHONY: exam check test test-short test-all btest btest-ruby test-basic test-knownbug
+.PHONY: run runruby parse benchmark gdb gdb-ruby
+.PHONY: update-mspec update-rubyspec test-rubyspec test-spec
+.PHONY: touch-unicode-files
PHONY:
-{$(VPATH)}parse.c: {$(VPATH)}parse.y $(srcdir)/tool/ytab.sed {$(VPATH)}id.h
+{$(VPATH)}parse.c: {$(VPATH)}parse.y {$(VPATH)}id.h
{$(VPATH)}parse.h: {$(VPATH)}parse.c
{$(srcdir)}.y.c:
$(ECHO) generating $@
- $(Q)$(BASERUBY) $(srcdir)/tool/id2token.rb --path-separator=.$(PATH_SEPARATOR)./ --vpath=$(VPATH) id.h $(SRC_FILE) > parse.tmp.y
- $(Q)$(YACC) -d $(YFLAGS) -o y.tab.c parse.tmp.y
- $(Q)$(RM) parse.tmp.y
- $(Q)sed -f $(srcdir)/tool/ytab.sed -e "/^#/s!parse\.tmp\.[iy]!parse.y!" -e "/^#/s!y\.tab\.c!$@!" y.tab.c > $@.new
- $(Q)$(MV) $@.new $@
- $(Q)sed -e "/^#line.*y\.tab\.h/d;/^#line.*parse.*\.y/d" y.tab.h > $(@:.c=.h)
- $(Q)$(RM) y.tab.c y.tab.h
+ $(Q)$(BASERUBY) $(tooldir)/id2token.rb $(SRC_FILE) | \
+ $(LRAMA) $(YFLAGS) -o$@ -H$*.h - parse.y
$(PLATFORM_D):
- $(Q) $(MAKEDIRS) $(PLATFORM_DIR)
- @exit > $@
+ $(Q) $(MAKEDIRS) $(PLATFORM_DIR) $(@D)
+ @$(NULLCMD) > $@
+
+exe/$(PROGRAM): $(TIMESTAMPDIR)/$(arch)/.time
+exe/$(PROGRAM): ruby-runner.c ruby-runner.h exe/.time $(PREP) {$(VPATH)}config.h
+ $(Q) $(CC) $(CFLAGS) $(INCFLAGS) $(CPPFLAGS) -DRUBY_INSTALL_NAME=$(@F) $(COUTFLAG)ruby-runner.$(OBJEXT) -c $(CSRCFLAG)$(srcdir)/ruby-runner.c
+ $(Q) $(PURIFY) $(CC) $(CFLAGS) $(LDFLAGS) $(OUTFLAG)$@ ruby-runner.$(OBJEXT) $(LIBS)
+ $(Q) $(POSTLINK)
+ $(Q) $(BOOTSTRAPRUBY) \
+ -e 'prog, dest, inst = ARGV; dest += "/ruby"' \
+ -e 'exit unless prog==inst' \
+ -e 'unless prog=="ruby"' \
+ -e ' begin File.unlink(dest); rescue Errno::ENOENT; end' \
+ -e ' File.symlink(prog, dest)' \
+ -e 'end' \
+ $(@F) $(@D) $(RUBY_INSTALL_NAME)$(EXEEXT)
+ $(Q) $(BOOTSTRAPRUBY) -r$(srcdir)/lib/fileutils \
+ -e 'FileUtils::Verbose.ln_sr(*ARGV, force: true)' rbconfig.rb $(EXTOUT)/$(arch)
+
+exe/.time:
+ $(Q) $(MAKEDIRS) $(@D)
+ @$(NULLCMD) > $@
$(BUILTIN_ENCOBJS) $(BUILTIN_TRANSOBJS): $(ENC_TRANS_D)
$(ENC_TRANS_D):
- $(Q) $(MAKEDIRS) enc/trans
- @exit > $@
+ $(Q) $(MAKEDIRS) enc/trans $(@D)
+ @$(NULLCMD) > $@
+
+$(TIMESTAMPDIR)/$(arch)/.time:
+ $(Q)$(MAKEDIRS) $(@D) $(EXTOUT)/$(arch)
+ @$(NULLCMD) > $@
+
+$(TIMESTAMPDIR)/.RUBYCOMMONDIR.time:
+ $(Q)$(MAKEDIRS) $(@D) $(RUBYCOMMONDIR)
+ @$(NULLCMD) > $@
###
CCAN_DIR = {$(VPATH)}ccan
RUBY_H_INCLUDES = {$(VPATH)}ruby.h {$(VPATH)}config.h {$(VPATH)}defines.h \
{$(VPATH)}intern.h {$(VPATH)}missing.h {$(VPATH)}st.h \
- {$(VPATH)}subst.h
+ {$(VPATH)}assert.h {$(VPATH)}subst.h
###
acosh.$(OBJEXT): {$(VPATH)}acosh.c
alloca.$(OBJEXT): {$(VPATH)}alloca.c {$(VPATH)}config.h
-crypt.$(OBJEXT): {$(VPATH)}crypt.c
-dup2.$(OBJEXT): {$(VPATH)}dup2.c
+cbrt.$(OBJEXT): {$(VPATH)}cbrt.c
+close.$(OBJEXT): {$(VPATH)}close.c
+crypt.$(OBJEXT): {$(VPATH)}crypt.c {$(VPATH)}crypt.h {$(VPATH)}missing/des_tables.c
erf.$(OBJEXT): {$(VPATH)}erf.c
explicit_bzero.$(OBJEXT): {$(VPATH)}explicit_bzero.c
-finite.$(OBJEXT): {$(VPATH)}finite.c
+ffs.$(OBJEXT): {$(VPATH)}ffs.c
flock.$(OBJEXT): {$(VPATH)}flock.c
+hypot.$(OBJEXT): {$(VPATH)}hypot.c
+langinfo.$(OBJEXT): {$(VPATH)}langinfo.c
+lgamma_r.$(OBJEXT): {$(VPATH)}lgamma_r.c
memcmp.$(OBJEXT): {$(VPATH)}memcmp.c
memmove.$(OBJEXT): {$(VPATH)}memmove.c
-mkdir.$(OBJEXT): {$(VPATH)}mkdir.c
+nan.$(OBJEXT): {$(VPATH)}nan.c
+nextafter.$(OBJEXT): {$(VPATH)}nextafter.c
+procstat_vm.$(OBJEXT): {$(VPATH)}procstat_vm.c
setproctitle.$(OBJEXT): {$(VPATH)}setproctitle.c
strchr.$(OBJEXT): {$(VPATH)}strchr.c
-strdup.$(OBJEXT): {$(VPATH)}strdup.c
strerror.$(OBJEXT): {$(VPATH)}strerror.c
strlcat.$(OBJEXT): {$(VPATH)}strlcat.c
strlcpy.$(OBJEXT): {$(VPATH)}strlcpy.c
strstr.$(OBJEXT): {$(VPATH)}strstr.c
-strtod.$(OBJEXT): {$(VPATH)}strtod.c
-strtol.$(OBJEXT): {$(VPATH)}strtol.c
-nt.$(OBJEXT): {$(VPATH)}nt.c
-ia64.$(OBJEXT): {$(VPATH)}ia64.s
- $(CC) $(CFLAGS) -c $<
+tgamma.$(OBJEXT): {$(VPATH)}tgamma.c
+
+.coroutine_obj $(COROUTINE_OBJ): \
+ {$(VPATH)}$(COROUTINE_SRC) \
+ $(COROUTINE_H:/Context.h=/.time)
+$(COROUTINE_H:/Context.h=/.time):
+ $(Q) $(MAKEDIRS) $(@D)
+ @$(NULLCMD) > $@
###
# dependencies for generated C sources.
parse.$(OBJEXT): {$(VPATH)}parse.c
miniprelude.$(OBJEXT): {$(VPATH)}miniprelude.c
-prelude.$(OBJEXT): {$(VPATH)}prelude.c
# dependencies for optional sources.
-compile.$(OBJEXT): {$(VPATH)}opt_sc.inc {$(VPATH)}optunifs.inc
+compile.$(OBJEXT): {$(VPATH)}optunifs.inc
win32/win32.$(OBJEXT): {$(VPATH)}win32/win32.c {$(VPATH)}win32/file.h \
{$(VPATH)}dln.h {$(VPATH)}dln_find.c {$(VPATH)}encindex.h \
- {$(VPATH)}internal.h {$(VPATH)}util.h $(RUBY_H_INCLUDES) $(PLATFORM_D)
+ {$(VPATH)}internal.h {$(VPATH)}util.h $(RUBY_H_INCLUDES) \
+ {$(VPATH)}vm.h $(PLATFORM_D)
win32/file.$(OBJEXT): {$(VPATH)}win32/file.c {$(VPATH)}win32/file.h \
$(RUBY_H_INCLUDES) $(PLATFORM_D)
-$(NEWLINE_C): $(srcdir)/enc/trans/newline.trans $(srcdir)/tool/transcode-tblgen.rb
+$(NEWLINE_C): $(srcdir)/enc/trans/newline.trans $(tooldir)/transcode-tblgen.rb
$(Q) $(MAKEDIRS) $(@D)
- $(Q) $(BASERUBY) "$(srcdir)/tool/transcode-tblgen.rb" -vo $@ $(srcdir)/enc/trans/newline.trans
+ $(Q) $(BASERUBY) "$(tooldir)/transcode-tblgen.rb" -vo $@ $(srcdir)/enc/trans/newline.trans
enc/trans/newline.$(OBJEXT): $(NEWLINE_C)
-verconf.h: $(srcdir)/template/verconf.h.tmpl $(srcdir)/tool/generic_erb.rb
+verconf.h: $(srcdir)/template/verconf.h.tmpl $(tooldir)/generic_erb.rb $(RBCONFIG)
$(ECHO) creating $@
- $(Q) $(BOOTSTRAPRUBY) "$(srcdir)/tool/generic_erb.rb" -o $@ $(srcdir)/template/verconf.h.tmpl
+ $(Q) $(BOOTSTRAPRUBY) "$(tooldir)/generic_erb.rb" -o $@ $(srcdir)/template/verconf.h.tmpl
ruby-glommed.$(OBJEXT): $(OBJS)
@@ -757,35 +1135,83 @@ $(OBJS): {$(VPATH)}config.h {$(VPATH)}missing.h
INSNS2VMOPT = --srcdir="$(srcdir)"
-{$(VPATH)}minsns.inc: $(srcdir)/template/minsns.inc.tmpl
-
-{$(VPATH)}opt_sc.inc: $(srcdir)/template/opt_sc.inc.tmpl
-
-{$(VPATH)}optinsn.inc: $(srcdir)/template/optinsn.inc.tmpl
-
-{$(VPATH)}optunifs.inc: $(srcdir)/template/optunifs.inc.tmpl
-
-{$(VPATH)}insns.inc: $(srcdir)/template/insns.inc.tmpl
-
-{$(VPATH)}insns_info.inc: $(srcdir)/template/insns_info.inc.tmpl
-
-{$(VPATH)}vmtc.inc: $(srcdir)/template/vmtc.inc.tmpl
-
-{$(VPATH)}vm.inc: $(srcdir)/template/vm.inc.tmpl
-
-common-srcs: {$(VPATH)}parse.c {$(VPATH)}lex.c {$(VPATH)}enc/trans/newline.c {$(VPATH)}id.c \
- srcs-lib srcs-ext
-
-srcs: common-srcs srcs-enc
-
-EXT_SRCS = $(srcdir)/ext/ripper/ripper.c \
+srcs_vpath = {$(VPATH)}
+
+inc_common_headers = $(tooldir)/ruby_vm/views/_copyright.erb $(tooldir)/ruby_vm/views/_notice.erb
+$(srcs_vpath)optinsn.inc: $(tooldir)/ruby_vm/views/optinsn.inc.erb $(inc_common_headers)
+$(srcs_vpath)optunifs.inc: $(tooldir)/ruby_vm/views/optunifs.inc.erb $(inc_common_headers)
+$(srcs_vpath)insns.inc: $(tooldir)/ruby_vm/views/insns.inc.erb $(inc_common_headers)
+$(srcs_vpath)insns_info.inc: $(tooldir)/ruby_vm/views/insns_info.inc.erb $(inc_common_headers) \
+ $(tooldir)/ruby_vm/views/_insn_type_chars.erb $(tooldir)/ruby_vm/views/_insn_name_info.erb \
+ $(tooldir)/ruby_vm/views/_insn_len_info.erb $(tooldir)/ruby_vm/views/_insn_operand_info.erb \
+ $(tooldir)/ruby_vm/views/_attributes.erb $(tooldir)/ruby_vm/views/_comptime_insn_stack_increase.erb \
+ $(tooldir)/ruby_vm/views/_zjit_helpers.erb $(tooldir)/ruby_vm/views/_insn_leaf_info.erb
+$(srcs_vpath)vmtc.inc: $(tooldir)/ruby_vm/views/vmtc.inc.erb $(inc_common_headers)
+$(srcs_vpath)vm.inc: $(tooldir)/ruby_vm/views/vm.inc.erb $(inc_common_headers) \
+ $(tooldir)/ruby_vm/views/_insn_entry.erb $(tooldir)/ruby_vm/views/_trace_instruction.erb \
+ $(tooldir)/ruby_vm/views/_zjit_instruction.erb
+
+BUILTIN_RB_SRCS = \
+ $(srcdir)/ast.rb \
+ $(srcdir)/dir.rb \
+ $(srcdir)/gc.rb \
+ $(srcdir)/numeric.rb \
+ $(srcdir)/io.rb \
+ $(srcdir)/marshal.rb \
+ $(srcdir)/pack.rb \
+ $(srcdir)/trace_point.rb \
+ $(srcdir)/warning.rb \
+ $(srcdir)/array.rb \
+ $(srcdir)/hash.rb \
+ $(srcdir)/kernel.rb \
+ $(srcdir)/pathname_builtin.rb \
+ $(srcdir)/ractor.rb \
+ $(srcdir)/symbol.rb \
+ $(srcdir)/timev.rb \
+ $(srcdir)/thread_sync.rb \
+ $(srcdir)/nilclass.rb \
+ $(srcdir)/prelude.rb \
+ $(srcdir)/gem_prelude.rb \
+ $(srcdir)/jit_hook.rb \
+ $(srcdir)/jit_undef.rb \
+ $(srcdir)/yjit.rb \
+ $(srcdir)/zjit.rb \
+ $(empty)
+BUILTIN_RB_INCS = $(BUILTIN_RB_SRCS:.rb=.rbinc)
+
+common-srcs: $(srcs_vpath)parse.c $(srcs_vpath)lex.c $(srcs_vpath)enc/trans/newline.c $(srcs_vpath)id.c \
+ $(BUILTIN_RB_INCS) \
+ srcs-lib srcs-ext incs preludes
+
+missing-srcs: $(srcdir)/missing/des_tables.c
+
+srcs: common-srcs missing-srcs srcs-enc srcs-doc
+
+RIPPER_SRCS = $(srcdir)/ext/ripper/ripper.c \
+ $(srcdir)/ext/ripper/ripper_init.c \
+ $(srcdir)/ext/ripper/eventids1.h \
+ $(srcdir)/ext/ripper/eventids1.c \
+ $(srcdir)/ext/ripper/eventids2table.c \
+ # RIPPER_SRCS
+
+EXT_SRCS = ripper_srcs \
$(srcdir)/ext/rbconfig/sizeof/sizes.c \
+ $(srcdir)/ext/rbconfig/sizeof/limits.c \
$(srcdir)/ext/socket/constdefs.c \
+ $(srcdir)/ext/etc/constdefs.h \
# EXT_SRCS
srcs-ext: $(EXT_SRCS)
+realclean-srcs-ext::
+ $(Q)$(RM) $(EXT_SRCS)
+
+EXTRA_SRCS = \
+ $(srcdir)/ext/date/zonetab.h \
+ $(empty)
-srcs-extra: $(srcdir)/ext/json/parser/parser.c
+srcs-extra: $(EXTRA_SRCS)
+realclean-srcs-extra::
+ $(Q)$(RM) $(EXTRA_SRCS)
LIB_SRCS = $(srcdir)/lib/unicode_normalize/tables.rb
@@ -793,156 +1219,190 @@ srcs-lib: $(LIB_SRCS)
srcs-enc: $(ENC_MK)
$(ECHO) making srcs under enc
- $(Q) $(MAKE) -f $(ENC_MK) RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(MFLAGS) srcs
+ $(Q) $(MAKE) $(MAKE_ENC) srcs
-all-incs: incs {$(VPATH)}encdb.h {$(VPATH)}transdb.h
+all-incs: incs {$(VPATH)}encdb.h {$(VPATH)}transdb.h {$(VPATH)}probes.h
incs: $(INSNS) {$(VPATH)}node_name.inc {$(VPATH)}known_errors.inc \
{$(VPATH)}vm_call_iseq_optimized.inc $(srcdir)/revision.h \
- $(REVISION_H) enc/unicode/name2ctype.h enc/jis/props.h \
+ $(REVISION_H) \
+ $(UNICODE_DATA_HEADERS) $(ENC_HEADERS) \
{$(VPATH)}id.h {$(VPATH)}probes.dmyh
insns: $(INSNS)
-id.h: $(srcdir)/tool/generic_erb.rb $(srcdir)/template/id.h.tmpl $(srcdir)/defs/id.def
+id.h: $(tooldir)/generic_erb.rb $(srcdir)/template/id.h.tmpl $(srcdir)/defs/id.def
$(ECHO) generating $@
- $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb --output=$@ \
+ $(Q) $(BASERUBY) $(tooldir)/generic_erb.rb --output=$@ \
$(srcdir)/template/id.h.tmpl
-id.c: $(srcdir)/tool/generic_erb.rb $(srcdir)/template/id.c.tmpl $(srcdir)/defs/id.def
+id.c: $(tooldir)/generic_erb.rb $(srcdir)/template/id.c.tmpl $(srcdir)/defs/id.def
$(ECHO) generating $@
- $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb --output=$@ \
+ $(Q) $(BASERUBY) $(tooldir)/generic_erb.rb --output=$@ \
$(srcdir)/template/id.c.tmpl
-node_name.inc: {$(VPATH)}node.h
+node_name.inc: $(tooldir)/node_name.rb $(srcdir)/rubyparser.h
$(ECHO) generating $@
- $(Q) $(BASERUBY) -n $(srcdir)/tool/node_name.rb < $? > $@
+ $(Q) $(BASERUBY) -n $(tooldir)/node_name.rb < $(srcdir)/rubyparser.h > $@
-encdb.h: $(PREP) $(srcdir)/tool/generic_erb.rb $(srcdir)/template/encdb.h.tmpl
+encdb.h: $(RBCONFIG) $(tooldir)/generic_erb.rb $(srcdir)/template/encdb.h.tmpl
$(ECHO) generating $@
- $(Q) $(MINIRUBY) $(srcdir)/tool/generic_erb.rb -c -o $@ $(srcdir)/template/encdb.h.tmpl $(srcdir)/enc enc
+ $(Q) $(BOOTSTRAPRUBY) $(tooldir)/generic_erb.rb -c -o $@ $(srcdir)/template/encdb.h.tmpl $(srcdir)/enc enc
-transdb.h: $(PREP) srcs-enc $(srcdir)/tool/generic_erb.rb $(srcdir)/template/transdb.h.tmpl
+transdb.h: $(RBCONFIG) srcs-enc $(tooldir)/generic_erb.rb $(srcdir)/template/transdb.h.tmpl
$(ECHO) generating $@
- $(Q) $(MINIRUBY) $(srcdir)/tool/generic_erb.rb -c -o $@ $(srcdir)/template/transdb.h.tmpl $(srcdir)/enc/trans enc/trans
+ $(Q) $(BOOTSTRAPRUBY) $(tooldir)/generic_erb.rb -c -o $@ $(srcdir)/template/transdb.h.tmpl $(srcdir)/enc/trans enc/trans
enc/encinit.c: $(ENC_MK) $(srcdir)/enc/encinit.c.erb
known_errors.inc: $(srcdir)/template/known_errors.inc.tmpl $(srcdir)/defs/known_errors.def
$(ECHO) generating $@
- $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb -c -o $@ $(srcdir)/template/known_errors.inc.tmpl $(srcdir)/defs/known_errors.def
+ $(Q) $(BASERUBY) $(tooldir)/generic_erb.rb -c -o $@ $(srcdir)/template/known_errors.inc.tmpl $(srcdir)/defs/known_errors.def
-vm_call_iseq_optimized.inc: $(srcdir)/tool/mk_call_iseq_optimized.rb
+vm_call_iseq_optimized.inc: $(srcdir)/template/call_iseq_optimized.inc.tmpl
$(ECHO) generating $@
- $(Q) $(BASERUBY) $(srcdir)/tool/mk_call_iseq_optimized.rb > $@
+ $(Q) $(BASERUBY) $(tooldir)/generic_erb.rb -c -o $@ $(srcdir)/template/call_iseq_optimized.inc.tmpl
-$(MINIPRELUDE_C): $(COMPILE_PRELUDE)
+$(MINIPRELUDE_C): $(COMPILE_PRELUDE) $(BUILTIN_RB_SRCS)
$(ECHO) generating $@
- $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -o $@ \
- $(srcdir)/template/prelude.c.tmpl
+ $(Q) $(BASERUBY) $(tooldir)/generic_erb.rb -I$(srcdir) -o $@ \
+ $(srcdir)/template/prelude.c.tmpl $(BUILTIN_RB_SRCS)
-$(PRELUDE_C): $(COMPILE_PRELUDE) \
- {$(srcdir)}lib/rubygems/defaults.rb \
- {$(srcdir)}lib/rubygems/core_ext/kernel_gem.rb \
- $(PRELUDE_SCRIPTS) $(LIB_SRCS)
- $(ECHO) generating $@
- $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -c -o $@ \
- $(srcdir)/template/prelude.c.tmpl $(PRELUDE_SCRIPTS)
+golf_prelude.rbbin: {$(srcdir)}golf_prelude.rb $(tooldir)/mk_rbbin.rb $(PREP)
-{$(VPATH)}golf_prelude.c: $(COMPILE_PRELUDE) {$(srcdir)}golf_prelude.rb
- $(ECHO) generating $@
- $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb -I$(srcdir) -c -o $@ \
- $(srcdir)/template/prelude.c.tmpl golf_prelude.rb
+MAINCPPFLAGS = $(ENABLE_DEBUG_ENV:yes=-DRUBY_DEBUG_ENV=1)
+
+$(MAINOBJ): $(srcdir)/$(MAINSRC)
+ $(ECHO) compiling $(srcdir)/$(MAINSRC)
+ $(Q) $(CC) $(MAINCPPFLAGS) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(srcdir)/$(MAINSRC)
-{$(VPATH)}probes.dmyh: {$(srcdir)}probes.d $(srcdir)/tool/gen_dummy_probes.rb
+{$(VPATH)}probes.dmyh: {$(srcdir)}probes.d $(tooldir)/gen_dummy_probes.rb
probes.dmyh:
- $(BASERUBY) $(srcdir)/tool/gen_dummy_probes.rb $(srcdir)/probes.d > $@
+ $(BASERUBY) $(tooldir)/gen_dummy_probes.rb $(srcdir)/probes.d > $@
probes.h: {$(VPATH)}probes.$(DTRACE_EXT)
prereq: incs srcs preludes PHONY
-preludes: {$(VPATH)}prelude.c
preludes: {$(VPATH)}miniprelude.c
-preludes: {$(srcdir)}golf_prelude.c
-$(srcdir)/revision.h:
- @exit > $@
+{$(srcdir)}.rb.rbbin:
+ $(ECHO) making $@
+ $(Q) $(MINIRUBY) $(tooldir)/mk_rbbin.rb $(SRC_FILE) > $(OS_DEST_FILE)
+
+{$(srcdir)}.rb.rbinc:
+ $(ECHO) making $@
+ $(Q) $(BASERUBY) $(tooldir)/mk_builtin_loader.rb $(SRC_FILE)
+
+$(BUILTIN_BINARY:yes=built)in_binary.rbbin: $(PREP) $(BUILTIN_RB_SRCS) $(srcdir)/template/builtin_binary.rbbin.tmpl
+ $(Q) $(MINIRUBY) $(tooldir)/generic_erb.rb -o $@ \
+ $(srcdir)/template/builtin_binary.rbbin.tmpl
+ -$(Q) sha256sum $@ 2> $(NULL) || $(NULLCMD)
-$(REVISION_H): $(srcdir)/version.h $(srcdir)/ChangeLog $(srcdir)/tool/file2lastrev.rb $(REVISION_FORCE)
- -$(Q) $(BASERUBY) $(srcdir)/tool/file2lastrev.rb --revision.h "$(srcdir)" > revision.tmp
- $(Q)$(IFCHANGE) "--timestamp=$@" "$(srcdir)/revision.h" revision.tmp
+$(BUILTIN_BINARY:no=builtin)_binary.rbbin:
+ $(Q) echo> $@ // empty $(@F)
-$(srcdir)/ext/ripper/ripper.c: $(srcdir)/parse.y id.h
+$(BUILTIN_RB_INCS): $(top_srcdir)/tool/mk_builtin_loader.rb
+
+$(srcdir)/revision.h$(no_baseruby:no=~disabled~): $(REVISION_H)
+
+$(REVISION_H)$(no_baseruby:no=~disabled~):
+ $(Q) $(BASERUBY) $(tooldir)/file2lastrev.rb -q --revision.h --srcdir="$(srcdir)" --output=revision.h --timestamp=$@
+$(REVISION_H)$(yes_baseruby:yes=~disabled~):
+ $(Q) exit > $@
+
+# uncommon.mk: $(REVISION_H)
+# $(MKFILES): $(REVISION_H)
+
+# $(common_mk_includes) is set by config.status or GNUmakefile
+common_mk__$(gnumake:yes=artifact)_ = uncommon.mk
+common_mk_$(gnumake)_artifact_ = $(MKFILES)
+$(common_mk__artifact_): $(srcdir)/common.mk $(common_mk_includes)
+
+ripper_srcs: $(RIPPER_SRCS)
+
+$(RIPPER_SRCS): $(srcdir)/parse.y $(srcdir)/defs/id.def
+$(RIPPER_SRCS): $(srcdir)/ext/ripper/depend $(srcdir)/ext/ripper/extconf.rb
+$(RIPPER_SRCS): $(srcdir)/ext/ripper/tools/preproc.rb $(srcdir)/ext/ripper/tools/dsl.rb
+$(RIPPER_SRCS): $(srcdir)/ext/ripper/ripper_init.c.tmpl $(srcdir)/ext/ripper/eventids2.c
$(ECHO) generating $@
$(Q) $(CHDIR) $(@D) && \
- sed /AUTOGENERATED/q depend | \
- $(exec) $(MAKE) -f - $(MFLAGS) \
- Q=$(Q) ECHO=$(ECHO) RM="$(RM)" top_srcdir=../.. srcdir=. VPATH="$(PWD)" \
- RUBY="$(BASERUBY)" PATH_SEPARATOR="$(PATH_SEPARATOR)"
+ $(CAT_DEPEND) depend | \
+ $(exec) $(MAKE) -f - $(mflags) \
+ Q=$(Q) ECHO=$(ECHO) RM="$(RM1)" top_srcdir=../.. srcdir=. VPATH=../.. \
+ RUBY="$(BASERUBY)" BASERUBY="$(BASERUBY)" PATH_SEPARATOR="$(PATH_SEPARATOR)" LANG=C
-$(srcdir)/ext/json/parser/parser.c: $(srcdir)/ext/json/parser/parser.rl
+$(srcdir)/ext/date/zonetab.h: $(srcdir)/ext/date/zonetab.list $(srcdir)/ext/date/prereq.mk
$(ECHO) generating $@
- $(Q) $(CHDIR) $(@D) && $(exec) $(MAKE) -f prereq.mk $(MFLAGS) \
- Q=$(Q) ECHO=$(ECHO) top_srcdir=../../.. srcdir=. VPATH=../../.. BASERUBY="$(BASERUBY)"
+ $(Q) $(CHDIR) $(@D) && $(exec) $(MAKE) -f prereq.mk $(mflags) \
+ Q=$(Q) ECHO=$(ECHO) top_srcdir=../.. srcdir=. VPATH=../.. BASERUBY="$(BASERUBY)"
$(srcdir)/ext/rbconfig/sizeof/sizes.c: $(srcdir)/ext/rbconfig/sizeof/depend \
- $(srcdir)/tool/generic_erb.rb $(srcdir)/template/sizes.c.tmpl $(srcdir)/configure.in
+ $(tooldir)/generic_erb.rb $(srcdir)/template/sizes.c.tmpl $(srcdir)/configure.ac
$(ECHO) generating $@
$(Q) $(CHDIR) $(@D) && \
- sed '/AUTOGENERATED/q;s#{.*}##' depend | \
- $(exec) $(MAKE) -f - $(MFLAGS) \
- Q=$(Q) ECHO=$(ECHO) top_srcdir=../../.. srcdir=. VPATH=../../.. RUBY="$(BASERUBY)"
+ $(CAT_DEPEND) depend | \
+ $(exec) $(MAKE) -f - $(mflags) \
+ Q=$(Q) ECHO=$(ECHO) top_srcdir=../../.. srcdir=. VPATH=../../.. RUBY="$(BASERUBY)" $(@F)
-$(srcdir)/ext/socket/constdefs.c: $(srcdir)/ext/socket/depend
+$(srcdir)/ext/rbconfig/sizeof/limits.c: $(srcdir)/ext/rbconfig/sizeof/depend \
+ $(tooldir)/generic_erb.rb $(srcdir)/template/limits.c.tmpl
+ $(ECHO) generating $@
$(Q) $(CHDIR) $(@D) && \
- sed -n "/^constdefs/,/^$$/p" depend | \
- $(exec) $(MAKE) -f - $(MFLAGS) constdefs.h constdefs.c \
- Q=$(Q) ECHO=$(ECHO) top_srcdir=../../.. srcdir=. VPATH=../../.. RUBY="$(BASERUBY)"
+ $(CAT_DEPEND) depend | \
+ $(exec) $(MAKE) -f - $(mflags) \
+ Q=$(Q) ECHO=$(ECHO) top_srcdir=../../.. srcdir=. VPATH=../../.. RUBY="$(BASERUBY)" $(@F)
+
+$(srcdir)/ext/socket/constdefs.c: $(srcdir)/ext/socket/depend $(srcdir)/ext/socket/mkconstants.rb
+ $(Q) $(CHDIR) $(@D) && \
+ $(CAT_DEPEND) depend | \
+ $(exec) $(MAKE) -f - $(mflags) \
+ Q=$(Q) ECHO=$(ECHO) top_srcdir=../.. srcdir=. VPATH=../.. RUBY="$(BASERUBY)"
+
+$(srcdir)/ext/etc/constdefs.h: $(srcdir)/ext/etc/depend
+ $(Q) $(CHDIR) $(@D) && \
+ $(CAT_DEPEND) depend | \
+ $(exec) $(MAKE) -f - $(mflags) \
+ Q=$(Q) ECHO=$(ECHO) top_srcdir=../.. srcdir=. VPATH=../.. RUBY="$(BASERUBY)"
##
-run: fake miniruby$(EXEEXT) PHONY
- $(BTESTRUBY) $(TESTRUN_SCRIPT) $(RUNOPT)
+run: yes-fake miniruby$(EXEEXT) PHONY
+ $(BTESTRUBY) $(RUNOPT0) $(TESTRUN_SCRIPT) $(RUNOPT)
runruby: $(PROGRAM) PHONY
- $(RUNRUBY) $(TESTRUN_SCRIPT)
+ RUBY_ON_BUG='gdb -x $(srcdir)/.gdbinit -p' $(RUNRUBY) $(RUNOPT0) $(TESTRUN_SCRIPT) $(RUNOPT)
-parse: fake miniruby$(EXEEXT) PHONY
- $(BTESTRUBY) $(srcdir)/tool/parse.rb $(TESTRUN_SCRIPT)
+runirb: $(PROGRAM) update-default-gemspecs
+ RUBY_ON_BUG='gdb -x $(srcdir)/.gdbinit -p' $(RUNRUBY) $(RUNOPT0) -rrubygems -r irb -e 'IRB.start("make runirb")' $(RUNOPT)
+
+parse: yes-fake miniruby$(EXEEXT) PHONY
+ $(BTESTRUBY) --dump=parsetree_with_comment,insns $(TESTRUN_SCRIPT)
bisect: PHONY
- $(srcdir)/tool/bisect.sh miniruby $(srcdir)
+ $(tooldir)/bisect.sh miniruby $(srcdir)
bisect-ruby: PHONY
- $(srcdir)/tool/bisect.sh ruby $(srcdir)
+ $(tooldir)/bisect.sh ruby $(srcdir)
COMPARE_RUBY = $(BASERUBY)
+BENCH_RUBY = $(RUNRUBY)
+BENCH_OPTS = --output=markdown --output-compare -v
ITEM =
+ARGS = $$(find $(srcdir)/benchmark -maxdepth 1 -name '$(ITEM)' -o -name '*$(ITEM)*.yml' -o -name '*$(ITEM)*.rb' | sort)
OPTS =
-# You can pass several options through OPTS environment variable.
-# $ make benchmark OPTS="--help" displays more detail.
-# for example,
-# $ make benchmark COMPARE_RUBY="ruby-trunk" OPTS="-e ruby-2.2.2"
-# This command compares trunk and built-ruby and 2.2.2
-benchmark: $(PROGRAM) PHONY
- $(BASERUBY) $(srcdir)/benchmark/driver.rb -v \
- --executables="$(COMPARE_RUBY); built-ruby::$(RUNRUBY)" \
- --pattern='bm_' --directory=$(srcdir)/benchmark $(OPTS)
-
-benchmark-each: $(PROGRAM) PHONY
- $(BASERUBY) $(srcdir)/benchmark/driver.rb -v \
- --executables="$(COMPARE_RUBY); built-ruby::$(RUNRUBY)" \
- --pattern=$(ITEM) --directory=$(srcdir)/benchmark $(OPTS)
-
-tbench: $(PROGRAM) PHONY
- $(BASERUBY) $(srcdir)/benchmark/driver.rb -v \
- --executables="$(COMPARE_RUBY); built-ruby::$(RUNRUBY)" \
- --pattern='bmx_' --directory=$(srcdir)/benchmark $(OPTS)
+# See benchmark/README.md for details.
+benchmark: miniruby$(EXEEXT) update-benchmark-driver PHONY
+ $(BASERUBY) -rrubygems -I$(srcdir)/benchmark/lib $(srcdir)/benchmark/benchmark-driver/exe/benchmark-driver \
+ --executables="compare-ruby::$(COMPARE_RUBY) -I$(EXTOUT)/common --disable-gem" \
+ --executables="built-ruby::$(BENCH_RUBY) --disable-gem" \
+ $(BENCH_OPTS) $(ARGS) $(OPTS)
run.gdb:
echo set breakpoint pending on > run.gdb
+ echo b rb_assert_failure >> run.gdb
+ echo b rb_bug >> run.gdb
echo b ruby_debug_breakpoint >> run.gdb
echo '# handle SIGINT nostop' >> run.gdb
echo '# handle SIGPIPE nostop' >> run.gdb
@@ -955,93 +1415,437 @@ run.gdb:
echo ' quit' >> run.gdb
echo end >> run.gdb
+GDB = gdb
gdb: miniruby$(EXEEXT) run.gdb PHONY
- gdb -x run.gdb --quiet --args $(MINIRUBY) $(TESTRUN_SCRIPT)
+ $(GDB) -x run.gdb --quiet --args $(MINIRUBY) $(RUNOPT0) $(TESTRUN_SCRIPT) $(RUNOPT)
gdb-ruby: $(PROGRAM) run.gdb PHONY
- $(Q) $(RUNRUBY_COMMAND) $(RUNRUBY_DEBUGGER) -- $(TESTRUN_SCRIPT)
+ $(Q) $(RUNRUBY_COMMAND) $(RUNRUBY_DEBUGGER) -- $(RUNOPT0) $(TESTRUN_SCRIPT) $(RUNOPT)
+
+LLDB_INIT = command script import -r $(srcdir)/misc/lldb_cruby.py
+lldb: miniruby$(EXEEXT) PHONY
+ lldb -o '$(LLDB_INIT)' miniruby$(EXEEXT) -- $(RUNOPT0) $(TESTRUN_SCRIPT) $(RUNOPT)
+
+lldb-ruby: $(PROGRAM) PHONY
+ lldb $(enable_shared:yes=-o 'target modules add ${LIBRUBY_SO}') -o '$(LLDB_INIT)' $(PROGRAM) -- $(RUNOPT0) $(TESTRUN_SCRIPT) $(RUNOPT)
+
+DISTPKGS = gzip,zip,all
+PKGSDIR = tmp
dist:
- $(BASERUBY) $(srcdir)/tool/make-snapshot -srcdir=$(srcdir) tmp $(RELNAME)
+ $(BASERUBY) $(V0:1=-v) $(tooldir)/make-snapshot \
+ -srcdir=$(srcdir) -packages=$(DISTPKGS) \
+ -unicode-version=$(UNICODE_VERSION) \
+ $(DISTOPTS) $(PKGSDIR) $(RELNAME)
up:: update-remote
-up::
- -$(Q)$(MAKE) $(MFLAGS) Q=$(Q) REVISION_FORCE=PHONY "$(REVISION_H)"
+up$(DOT_WAIT)::
+ -$(Q)$(MAKE) $(mflags) Q=$(Q) REVISION_FORCE=PHONY ALWAYS_UPDATE_UNICODE= after-update
-up::
- -$(Q)$(MAKE) $(MFLAGS) Q=$(Q) after-update
+yes::
+no::
+after-update:: common-srcs
+after-update:: $(REVISION_H)
after-update:: extract-extlibs
+after-update:: extract-gems
+
+update-src::
+ $(Q) $(RM) $(REVISION_H) revision.h "$(srcdir)/$(REVISION_H)" "$(srcdir)/revision.h"
+ $(Q) exit > "$(srcdir)/revision.h"
+
+update-remote:: update-src update-download
+update-download:: $(ALWAYS_UPDATE_UNICODE:yes=update-unicode)
+update-download:: update-gems
+update-download:: download-extlibs
-update-remote:: update-src update-rubyspec update-download
-update-download:: update-unicode update-gems download-extlibs
+update-mspec:
+update-rubyspec:
update-config_files: PHONY
- $(Q) $(BASERUBY) -C "$(srcdir)/tool" \
- ../tool/downloader.rb -e gnu \
+ $(Q) $(BASERUBY) -C "$(srcdir)" tool/downloader.rb -d tool --cache-dir=$(CACHE_DIR) -e gnu \
config.guess config.sub
-update-gems: PHONY
+update-coverage: main PHONY
+ $(XRUBY) -C "$(srcdir)" bin/gem install --no-document \
+ --install-dir .bundle --conservative "simplecov"
+
+refresh-gems: update-bundled_gems prepare-gems
+# can't recall exactly, but `make` somewhere (not GNU or nmake)
+# couldn't handle spaces in replacement strings; i.e.,
+# `$(HAVE_BASERUBY:yes=word word ...)` didn't work.
+prepare-gems: $(HAVE_BASERUBY:yes=update-gems) $(HAVE_BASERUBY:yes=extract-gems)
+extract-gems: $(HAVE_BASERUBY:yes=update-gems) $(HAVE_BASERUBY:yes=outdate-bundled-gems)
+update-gems: $(HAVE_BASERUBY:yes=outdate-bundled-gems)
+
+split_option = -F"\s+|$(HASH_SIGN).*"
+
+update-gems$(sequential): PHONY
$(ECHO) Downloading bundled gem files...
- $(Q) $(BASERUBY) -C "$(srcdir)/gems" \
- -I../tool -rdownloader -answ \
+ $(Q) $(BASERUBY) -C "$(srcdir)" \
+ -I./tool -rdownloader $(split_option) -answ \
-e 'gem, ver = *$$F' \
- -e 'old = Dir.glob("#{gem}-*.gem")' \
+ -e 'next if !ver' \
+ -e 'old = Dir.glob("gems/#{gem}-*.gem")' \
-e 'gem = "#{gem}-#{ver}.gem"' \
- -e 'Downloader::RubyGems.download(gem, nil, nil) and' \
- -e 'File.unlink(*(old-[gem]))' \
- bundled_gems
+ -e 'Downloader::RubyGems.download(gem, "gems", nil) and' \
+ -e '(old.delete("gems/#{gem}"); !old.empty?) and' \
+ -e 'File.unlink(*old) and' \
+ -e 'FileUtils.rm_rf(old.map{'"|n|"'n.chomp(".gem")})' \
+ gems/bundled_gems
-extract-gems: PHONY
+extract-gems$(sequential): PHONY
$(ECHO) Extracting bundled gem files...
- $(Q) $(RUNRUBY) -C "$(srcdir)/gems" \
- -I../tool -rgem-unpack -answ \
- -e 'gem, ver = *$$F' \
- -e 'Gem.unpack("#{gem}-#{ver}.gem")' \
- bundled_gems
+ $(Q) $(BASERUBY) -C "$(srcdir)" \
+ -Itool/lib -rfileutils -rbundled_gem $(split_option) -answ \
+ -e 'BEGIN {d = ".bundle/gems"}' \
+ -e 'gem, ver, _, rev = *$$F' \
+ -e 'next if !ver' \
+ -e 'g = "#{gem}-#{ver}"' \
+ -e 'unless File.directory?("#{d}/#{g}")' \
+ -e 'if rev and File.exist?(gs = "gems/src/#{gem}/#{gem}.gemspec")' \
+ -e 'BundledGem.build(gs, ver, "gems")' \
+ -e 'end' \
+ -e 'BundledGem.unpack("gems/#{g}.gem", ".bundle")' \
+ -e 'end' \
+ gems/bundled_gems
+
+extract-gems$(sequential): $(HAVE_GIT:yes=clone-bundled-gems-src)
+
+flush-gems: outdate-bundled-gems
+outdate-bundled-gems: PHONY
+ $(Q) $(BASERUBY) $(tooldir)/$@.rb --make="$(MAKE)" --mflags="$(MFLAGS)" \
+ --ruby-platform=$(arch) --ruby-version=$(ruby_version) \
+ "$(srcdir)"
update-bundled_gems: PHONY
$(Q) $(RUNRUBY) -rrubygems \
- -pla \
- -e '$$_=Gem::SpecFetcher.fetcher.detect(:latest) {|s|' \
- -e 'break "#{s.name} #{s.version}" if s.platform=="ruby"&&s.name==$$F[0]' \
- -e '}' \
+ $(tooldir)/update-bundled_gems.rb \
"$(srcdir)/gems/bundled_gems" | \
- "$(srcdir)/tool/ifchange" "$(srcdir)/gems/bundled_gems" -
-
-### set the following environment variable or uncomment the line if
-### the Unicode data files should be updated completely on every update ('make up',...).
-# ALWAYS_UPDATE_UNICODE = yes
-
-UNICODE_FILES = $(srcdir)/enc/unicode/data/$(UNICODE_VERSION)/UnicodeData.txt \
- $(srcdir)/enc/unicode/data/$(UNICODE_VERSION)/CompositionExclusions.txt \
- $(srcdir)/enc/unicode/data/$(UNICODE_VERSION)/NormalizationTest.txt \
- $(srcdir)/enc/unicode/data/$(UNICODE_VERSION)/CaseFolding.txt
-
-update-unicode: $(UNICODE_FILES)
-
-$(UNICODE_FILES):
- $(ECHO) Downloading Unicode $(UNICODE_VERSION) data files...
- $(Q) $(MAKEDIRS) "$(srcdir)/enc/unicode/data/$(UNICODE_VERSION)"
- $(Q) $(BASERUBY) -C "$(srcdir)" tool/downloader.rb \
- -d enc/unicode/data/$(UNICODE_VERSION) \
- -p $(UNICODE_VERSION)/ucd \
- -e $(ALWAYS_UPDATE_UNICODE:yes=-a) unicode \
- $(UNICODE_FILES)
-
-$(srcdir)/$(HAVE_BASERUBY:yes=lib/unicode_normalize/tables.rb): \
- $(srcdir)/.unicode-tables.time
-
-$(srcdir)/.unicode-tables.time: $(srcdir)/tool/generic_erb.rb \
- $(UNICODE_FILES) \
- $(srcdir)/template/unicode_norm_gen.tmpl
- $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb \
- -c -t$@ -o $(srcdir)/lib/unicode_normalize/tables.rb \
+ $(IFCHANGE) "$(srcdir)/gems/bundled_gems" -
+ $(GIT_IN_SRC) diff --no-ext-diff --ignore-submodules --exit-code || \
+ $(GIT_IN_SRC) commit -m "Update bundled_gems" gems/bundled_gems
+
+PRECHECK_BUNDLED_GEMS = yes
+test-bundled-gems-precheck: $(TEST_RUNNABLE)-test-bundled-gems-precheck
+yes-test-bundled-gems-precheck: $(PRECHECK_BUNDLED_GEMS:yes=main)
+no-test-bundled-gems-precheck:
+
+update-default-gemspecs: $(TEST_RUNNABLE)-update-default-gemspecs
+no-update-default-gemspecs:
+yes-update-default-gemspecs: $(PRECHECK_BUNDLED_GEMS:yes=main)
+ @$(MAKEDIRS) $(srcdir)/.bundle/specifications
+ @$(XRUBY) -W0 -C "$(srcdir)" -rrubygems \
+ -e "destdir = ARGV.shift" \
+ -e "ARGV.each do |basedir|" \
+ -e "Dir.glob(basedir+'/**/*.gemspec') do |g|" \
+ -e "dir, base = File.split(g)" \
+ -e "spec = Dir.chdir(dir) {Gem::Specification.load(base)} ||" \
+ -e "Gem::Specification.load(g)" \
+ -e "unless spec" \
+ -e "puts %[Ignoring #{g}]" \
+ -e "next" \
+ -e "end" \
+ -e "spec.files.clear" \
+ -e "spec.extensions.clear" \
+ -e "File.binwrite(File.join(destdir, spec.full_name+'.gemspec'), spec.to_ruby)" \
+ -e "end" \
+ -e "end" \
+ -- .bundle/specifications lib ext
+
+install-for-test-bundled-gems: $(TEST_RUNNABLE)-install-for-test-bundled-gems
+no-install-for-test-bundled-gems: no-update-default-gemspecs
+yes-install-for-test-bundled-gems: yes-update-default-gemspecs
+ $(XRUBY) -C "$(srcdir)" -r./tool/lib/gem_env.rb bin/gem \
+ install --no-document --conservative \
+ "hoe" "json-schema:5.1.0" "test-unit-rr" "simplecov" "simplecov-html" "simplecov-json" "rspec" "zeitwerk" \
+ "sinatra" "rack" "tilt" "mustermann" "base64" "compact_index" "rack-test" "logger" "kpeg" "tracer" "minitest-mock"
+
+test-bundled-gems-fetch: yes-test-bundled-gems-fetch
+yes-test-bundled-gems-fetch: clone-bundled-gems-src
+clone-bundled-gems-src: PHONY
+ $(Q) $(BASERUBY) -C $(srcdir) tool/fetch-bundled_gems.rb BUNDLED_GEMS="$(BUNDLED_GEMS)" gems/src gems/bundled_gems
+no-test-bundled-gems-fetch:
+
+test-bundled-gems-prepare: $(TEST_RUNNABLE)-test-bundled-gems-prepare
+no-test-bundled-gems-prepare: no-test-bundled-gems-precheck no-test-bundled-gems-fetch
+Preparing-test-bundled-gems:
+ $(ACTIONS_GROUP)
+yes-test-bundled-gems-prepare: Preparing-test-bundled-gems $(DOT_WAIT)
+ $(ACTIONS_ENDGROUP)
+yes-test-bundled-gems-prepare: yes-test-bundled-gems-precheck $(DOT_WAIT)
+yes-test-bundled-gems-prepare: yes-install-for-test-bundled-gems $(DOT_WAIT)
+yes-test-bundled-gems-prepare: yes-test-bundled-gems-fetch $(DOT_WAIT)
+yes-test-bundled-gems-precheck: Preparing-test-bundled-gems
+yes-install-for-test-bundled-gems: Preparing-test-bundled-gems
+yes-test-bundled-gems-fetch: Preparing-test-bundled-gems
+
+PREPARE_BUNDLED_GEMS = test-bundled-gems-prepare
+test-bundled-gems: $(TEST_RUNNABLE)-test-bundled-gems $(DOT_WAIT) $(TEST_RUNNABLE)-test-bundled-gems-spec
+yes-test-bundled-gems: test-bundled-gems-run
+no-test-bundled-gems:
+
+bundled_gems_spec-run: install-for-test-bundled-gems
+ $(XRUBY) -C $(srcdir) .bundle/bin/rspec spec/bundled_gems_spec.rb
+
+# Override this to allow failure of specific gems on CI
+# TEST_BUNDLED_GEMS_ALLOW_FAILURES =
+
+BUNDLED_GEMS =
+test-bundled-gems-run: $(TEST_RUNNABLE)-test-bundled-gems-run
+yes-test-bundled-gems-run: $(PREPARE_BUNDLED_GEMS)
+ $(gnumake_recursive)$(Q) $(XRUBY) $(tooldir)/test-bundled-gems.rb $(BUNDLED_GEMS)
+no-test-bundled-gems-run: $(PREPARE_BUNDLED_GEMS)
+
+test-bundled-gems-spec: $(TEST_RUNNABLE)-test-bundled-gems-spec
+yes-test-bundled-gems-spec: yes-test-spec-precheck $(PREPARE_BUNDLED_GEMS)
+ $(ACTIONS_GROUP)
+ $(gnumake_recursive)$(Q) \
+ $(RUNRUBY) -r./$(arch)-fake -r$(tooldir)/lib/_tmpdir \
+ $(srcdir)/spec/mspec/bin/mspec run --env BUNDLED_GEMS=$(BUNDLED_GEMS) -B $(srcdir)/spec/bundled_gems.mspec \
+ $(MSPECOPT) $(SPECOPTS)
+ $(ACTIONS_ENDGROUP)
+no-test-bundled-gems-spec:
+
+
+test-syntax-suggest:
+
+check: $(DOT_WAIT) $(PREPARE_SYNTAX_SUGGEST) test-syntax-suggest
+
+RAKER = $(XRUBY) -I$(srcdir)/gems/lib$(PATH_SEPARATOR)$(srcdir)/.bundle/lib \
+ -rrubygems $(srcdir)/.bundle/bin/rake
+rake:
+ $(RAKER) $(RAKE_OPTS) $(RAKE)
+
+test-bundler-precheck: $(TEST_RUNNABLE)-test-bundler-precheck
+no-test-bundler-precheck:
+yes-test-bundler-precheck: main $(arch)-fake.rb
+yes-test-bundler-parallel-precheck: yes-test-bundler-precheck
+
+test-bundler-prepare: $(TEST_RUNNABLE)-test-bundler-prepare
+no-test-bundler-prepare: no-test-bundler-precheck
+yes-test-bundler-prepare: yes-test-bundler-precheck
+ $(ACTIONS_GROUP)
+ $(XRUBY) -C $(srcdir) -Ilib -r./tool/lib/bundle_env.rb \
+ spec/bin/bundle install --quiet --gemfile=tool/bundler/dev_gems.rb
+ $(ACTIONS_ENDGROUP)
+
+RSPECOPTS = -r formatter_overrides
+BUNDLER_SPECS =
+PREPARE_BUNDLER = $(TEST_RUNNABLE)-test-bundler-prepare
+test-bundler: $(TEST_RUNNABLE)-test-bundler
+yes-test-bundler: $(PREPARE_BUNDLER)
+ $(gnumake_recursive)$(XRUBY) \
+ -r./$(arch)-fake \
+ -C $(srcdir) -Ispec/bundler -Ispec/lib spec/bin/rspec \
+ -r spec_helper $(RSPECOPTS) spec/bundler/$(BUNDLER_SPECS)
+no-test-bundler:
+
+PARALLELRSPECOPTS = --runtime-log $(srcdir)/tmp/parallel_runtime_rspec.log
+test-bundler-parallel: $(TEST_RUNNABLE)-test-bundler-parallel
+yes-test-bundler-parallel: $(PREPARE_BUNDLER)
+ $(gnumake_recursive)$(XRUBY) \
+ -r./$(arch)-fake \
+ -I$(srcdir)/spec/bundler \
+ -e "ruby = ENV['RUBY']" \
+ -e "ARGV[-1] = File.expand_path(ARGV[-1])" \
+ -e "ENV['RSPEC_EXECUTABLE'] = ruby + ARGV.shift" \
+ -e "load ARGV.shift" \
+ " -C $(srcdir) -Ispec/bundler -Ispec/lib .bundle/bin/rspec -r spec_helper" \
+ $(srcdir)/spec/bin/parallel_rspec $(RSPECOPTS) \
+ $(PARALLELRSPECOPTS) $(srcdir)/spec/bundler/$(BUNDLER_SPECS)
+no-test-bundler-parallel:
+
+# The annocheck supports ELF format binaries compiled for any OS and for any
+# architecture. It is designed to be independent of the host OS and the
+# architecture. The test-annocheck.sh requires docker or podman.
+test-annocheck: $(PROGRAM) $(LIBRUBY_SO)
+ $(tooldir)/test-annocheck.sh $(PROGRAM) $(LIBRUBY_SO)
+
+GEM = up
+sync-default-gems:
+ $(Q) $(XRUBY) -C "$(srcdir)" tool/sync_default_gems.rb $(GEM)
+
+UNICODE_FILES = $(UNICODE_SRC_DATA_DIR)/UnicodeData.txt \
+ $(UNICODE_SRC_DATA_DIR)/CompositionExclusions.txt \
+ $(UNICODE_SRC_DATA_DIR)/NormalizationTest.txt \
+ $(UNICODE_SRC_DATA_DIR)/CaseFolding.txt \
+ $(UNICODE_SRC_DATA_DIR)/SpecialCasing.txt \
+ $(empty)
+
+UNICODE_PROPERTY_FILES = \
+ $(UNICODE_SRC_DATA_DIR)/Blocks.txt \
+ $(UNICODE_SRC_DATA_DIR)/DerivedAge.txt \
+ $(UNICODE_SRC_DATA_DIR)/DerivedCoreProperties.txt \
+ $(UNICODE_SRC_DATA_DIR)/PropList.txt \
+ $(UNICODE_SRC_DATA_DIR)/PropertyAliases.txt \
+ $(UNICODE_SRC_DATA_DIR)/PropertyValueAliases.txt \
+ $(UNICODE_SRC_DATA_DIR)/Scripts.txt \
+ $(empty)
+
+UNICODE_AUXILIARY_FILES = \
+ $(UNICODE_SRC_DATA_DIR)/auxiliary/GraphemeBreakProperty.txt \
+ $(UNICODE_SRC_DATA_DIR)/auxiliary/GraphemeBreakTest.txt \
+ $(empty)
+
+UNICODE_UCD_EMOJI_FILES = \
+ $(UNICODE_SRC_DATA_DIR)/emoji/emoji-data.txt \
+ $(UNICODE_SRC_DATA_DIR)/emoji/emoji-variation-sequences.txt \
+ $(empty)
+
+UNICODE_EMOJI_FILES = \
+ $(UNICODE_SRC_EMOJI_DATA_DIR)/emoji-sequences.txt \
+ $(UNICODE_SRC_EMOJI_DATA_DIR)/emoji-test.txt \
+ $(UNICODE_SRC_EMOJI_DATA_DIR)/emoji-zwj-sequences.txt \
+ $(empty)
+
+update-unicode: $(UNICODE_FILES) $(UNICODE_PROPERTY_FILES) \
+ $(UNICODE_AUXILIARY_FILES) $(UNICODE_UCD_EMOJI_FILES) $(UNICODE_EMOJI_FILES)
+
+CACHE_DIR = $(srcdir)/.downloaded-cache
+UNICODE_DOWNLOADER_ALWAYS_UPDATE = $(ALWAYS_UPDATE_UNICODE:yes=--always)
+UNICODE_DOWNLOADER = \
+ $(BASERUBY) $(tooldir)/downloader.rb \
+ --cache-dir=$(CACHE_DIR) \
+ --exist $(UNICODE_DOWNLOADER_ALWAYS_UPDATE:no=) \
+ unicode --unicode-beta=$(UNICODE_BETA)
+UNICODE_DOWNLOAD = \
+ $(UNICODE_DOWNLOADER) \
+ -d $(UNICODE_SRC_DATA_DIR) \
+ -p $(UNICODE_VERSION)/ucd
+UNICODE_AUXILIARY_DOWNLOAD = \
+ $(UNICODE_DOWNLOADER) \
+ -d $(UNICODE_SRC_DATA_DIR)/auxiliary \
+ -p $(UNICODE_VERSION)/ucd/auxiliary
+UNICODE_UCD_EMOJI_DOWNLOAD = \
+ $(UNICODE_DOWNLOADER) \
+ -d $(UNICODE_SRC_DATA_DIR)/emoji \
+ -p $(UNICODE_VERSION)/ucd/emoji
+UNICODE_EMOJI_DOWNLOAD = \
+ $(UNICODE_DOWNLOADER) \
+ -d $(UNICODE_SRC_EMOJI_DATA_DIR) \
+ -p $(UNICODE_VERSION)/emoji
+
+update-unicode-files:
+ $(ECHO) Downloading Unicode $(UNICODE_VERSION) data and property files...
+ $(Q) $(MAKEDIRS) "$(UNICODE_SRC_DATA_DIR)"
+ $(Q) $(UNICODE_DOWNLOAD) $(UNICODE_FILES) $(UNICODE_PROPERTY_FILES)
+
+update-unicode-auxiliary-files:
+ $(ECHO) Downloading Unicode $(UNICODE_VERSION) auxiliary files...
+ $(Q) $(MAKEDIRS) "$(UNICODE_SRC_DATA_DIR)/auxiliary"
+ $(Q) $(UNICODE_AUXILIARY_DOWNLOAD) $(UNICODE_AUXILIARY_FILES)
+
+update-unicode-ucd-emoji-files:
+ $(ECHO) Downloading Unicode UCD emoji $(UNICODE_EMOJI_VERSION) files...
+ $(Q) $(MAKEDIRS) "$(UNICODE_SRC_DATA_DIR)/emoji"
+ $(Q) $(UNICODE_UCD_EMOJI_DOWNLOAD) $(UNICODE_UCD_EMOJI_FILES)
+
+update-unicode-emoji-files:
+ $(ECHO) Downloading Unicode emoji $(UNICODE_EMOJI_VERSION) files...
+ $(Q) $(MAKEDIRS) "$(UNICODE_SRC_EMOJI_DATA_DIR)"
+ $(Q) $(UNICODE_EMOJI_DOWNLOAD) $(UNICODE_EMOJI_FILES)
+
+$(UNICODE_FILES) $(UNICODE_PROPERTY_FILES):
+ $(ECHO) Downloading Unicode $(UNICODE_VERSION) data and property files...
+ $(Q) $(MAKEDIRS) "$(UNICODE_SRC_DATA_DIR)"
+ $(Q) $(UNICODE_DOWNLOAD) $@
+
+$(UNICODE_AUXILIARY_FILES):
+ $(ECHO) Downloading Unicode $(UNICODE_VERSION) auxiliary files...
+ $(Q) $(MAKEDIRS) "$(UNICODE_SRC_DATA_DIR)/auxiliary"
+ $(Q) $(UNICODE_AUXILIARY_DOWNLOAD) $@
+
+$(UNICODE_UCD_EMOJI_FILES):
+ $(ECHO) Downloading Unicode UCD emoji $(UNICODE_EMOJI_VERSION) files...
+ $(Q) $(MAKEDIRS) "$(UNICODE_SRC_DATA_DIR)/emoji"
+ $(Q) $(UNICODE_UCD_EMOJI_DOWNLOAD) $@
+
+$(UNICODE_EMOJI_FILES):
+ $(ECHO) Downloading Unicode emoji $(UNICODE_EMOJI_VERSION) files...
+ $(Q) $(MAKEDIRS) "$(UNICODE_SRC_EMOJI_DATA_DIR)"
+ $(Q) $(UNICODE_EMOJI_DOWNLOAD) $@
+
+$(srcdir)/lib/unicode_normalize/$(HAVE_BASERUBY:yes=tables.rb): \
+ $(UNICODE_SRC_DATA_DIR)/.unicode-tables.time
+
+$(UNICODE_SRC_DATA_DIR)/$(ALWAYS_UPDATE_UNICODE:yes=.unicode-tables.time): \
+ $(UNICODE_FILES) $(UNICODE_PROPERTY_FILES) \
+ $(UNICODE_AUXILIARY_FILES) $(UNICODE_UCD_EMOJI_FILES) $(UNICODE_EMOJI_FILES)
+
+touch-unicode-files:
+ $(MAKEDIRS) $(UNICODE_SRC_DATA_DIR)
+ $(Q) $(TOUCH) $(UNICODE_SRC_DATA_DIR)/.unicode-tables.time $(UNICODE_DATA_HEADERS)
+
+UNICODE_TABLES_DATA_FILES = \
+ $(UNICODE_SRC_DATA_DIR)/UnicodeData.txt \
+ $(UNICODE_SRC_DATA_DIR)/CompositionExclusions.txt \
+ $(empty)
+
+UNICODE_TABLES_DEPENDENTS_1 = none$(ALWAYS_UPDATE_UNICODE)
+UNICODE_TABLES_DEPENDENTS = $(UNICODE_TABLES_DEPENDENTS_1:noneyes=force)
+UNICODE_TABLES_TIMESTAMP = yes
+$(UNICODE_SRC_DATA_DIR)/.unicode-tables.$(UNICODE_TABLES_DEPENDENTS:none=time):
+ $(Q) $(MAKEDIRS) $(@D)
+ $(Q) exit > $(@) || $(NULLCMD)
+$(UNICODE_SRC_DATA_DIR)/.unicode-tables.$(UNICODE_TABLES_DEPENDENTS:force=time): \
+ $(tooldir)/generic_erb.rb \
+ $(srcdir)/template/unicode_norm_gen.tmpl \
+ $(UNICODE_TABLES_DATA_FILES) \
+ $(order_only) \
+ $(UNICODE_SRC_DATA_DIR)
+ $(Q) $(BASERUBY) $(tooldir)/generic_erb.rb \
+ -c $(UNICODE_TABLES_TIMESTAMP:yes=-t$@) \
+ -o $(srcdir)/lib/unicode_normalize/tables.rb \
-I $(srcdir) \
$(srcdir)/template/unicode_norm_gen.tmpl \
- enc/unicode/data/$(UNICODE_VERSION) lib/unicode_normalize
+ $(UNICODE_DATA_DIR) lib/unicode_normalize
+
+$(UNICODE_SRC_DATA_DIR):
+ $(gnumake_recursive)$(Q) $(MAKEDIRS) $@
+
+$(UNICODE_HDR_DIR)/$(ALWAYS_UPDATE_UNICODE:yes=name2ctype.h): \
+ $(tooldir)/enc-unicode.rb \
+ $(UNICODE_SRC_DATA_DIR)/UnicodeData.txt \
+ $(UNICODE_AUXILIARY_FILES) \
+ $(UNICODE_PROPERTY_FILES) \
+ $(UNICODE_UCD_EMOJI_FILES) \
+ $(UNICODE_EMOJI_FILES)
+
+$(UNICODE_HDR_DIR)/name2ctype.h:
+ $(MAKEDIRS) $(@D)
+ $(BOOTSTRAPRUBY) $(tooldir)/enc-unicode.rb --header \
+ $(UNICODE_SRC_DATA_DIR) $(UNICODE_SRC_EMOJI_DATA_DIR) > $@.new
+ $(MV) $@.new $@
+
+srcs-doc: $(srcdir)/doc/language/regexp/unicode_properties.rdoc
+$(srcdir)/doc/language/regexp/$(ALWAYS_UPDATE_UNICODE:yes=unicode_properties.rdoc): \
+ $(UNICODE_HDR_DIR)/name2ctype.h $(UNICODE_PROPERTY_FILES)
+
+$(srcdir)/doc/language/regexp/unicode_properties.rdoc:
+ $(Q) $(BOOTSTRAPRUBY) $(tooldir)/generic_erb.rb -c -o $@ \
+ $(srcdir)/template/unicode_properties.rdoc.tmpl \
+ $(UNICODE_SRC_DATA_DIR) $(UNICODE_HDR_DIR)/name2ctype.h || \
+ $(TOUCH) $@
+
+# the next non-comment line was:
+# $(UNICODE_HDR_DIR)/casefold.h: $(tooldir)/enc-case-folding.rb \
+# but was changed to make sure CI works on systems that don't have gperf
+unicode-up: $(UNICODE_DATA_HEADERS)
+
+$(UNICODE_HDR_DIR)/$(ALWAYS_UPDATE_UNICODE:yes=casefold.h): \
+ $(tooldir)/enc-case-folding.rb \
+ $(UNICODE_SRC_DATA_DIR)/UnicodeData.txt \
+ $(UNICODE_SRC_DATA_DIR)/SpecialCasing.txt \
+ $(UNICODE_SRC_DATA_DIR)/CaseFolding.txt
+
+$(UNICODE_HDR_DIR)/casefold.h:
+ $(MAKEDIRS) $(@D)
+ $(Q) $(BASERUBY) $(tooldir)/enc-case-folding.rb \
+ --output-file=$@ \
+ --mapping-data-directory=$(UNICODE_SRC_DATA_DIR)
download-extlibs:
$(Q) $(BASERUBY) -C $(srcdir) -w tool/extlibs.rb --download ext
@@ -1057,6 +1861,9 @@ clean-gems:
CLEAN_CACHE = clean-extlibs
+prepare-package: prereq after-update
+clean-cache: $(CLEAN_CACHE)
+
info: info-program info-libruby_a info-libruby_so info-arch
info-program: PHONY
@echo PROGRAM=$(PROGRAM)
@@ -1067,1494 +1874,127 @@ info-libruby_so: PHONY
info-arch: PHONY
@echo arch=$(arch)
-change: PHONY
- $(BASERUBY) -C "$(srcdir)" ./tool/change_maker.rb $(CHANGES) > change.log
+exam: check
+exam: $(DOT_WAIT) test-bundler-parallel
+exam: $(DOT_WAIT) bundled_gems_spec-run
+exam: $(DOT_WAIT) test-bundled-gems
-exam: check test-rubyspec
-
-love: sudo-precheck up all test install check
+love: sudo-precheck up all test exam install
@echo love is all you need
-yes-test-all: sudo-precheck
+great: exam
+
+yes-test-all no-test-all: sudo-precheck
sudo-precheck: PHONY
@$(SUDO) echo > $(NULL)
update-man-date: PHONY
- -$(Q) $(BASERUBY) -I"$(srcdir)/tool" -rvcs -i -p \
+ -$(Q) $(BASERUBY) -I"$(tooldir)/lib" -rvcs -i -p \
-e 'BEGIN{@vcs=VCS.detect(ARGV.shift)}' \
-e '$$_.sub!(/^(\.Dd ).*/){$$1+@vcs.modified(ARGF.path).strftime("%B %d, %Y")}' \
"$(srcdir)" "$(srcdir)"/man/*.1
+.PHONY: ChangeLog
+ChangeLog:
+ $(ECHO) Generating $@
+ -$(Q) $(BASERUBY) -I"$(tooldir)/lib" -rvcs \
+ -e 'VCS.detect(ARGV[0]).export_changelog(path: ARGV[1])' \
+ "$(srcdir)" $@
+
+# CAUTION: If using GNU make 3 which does not support `.WAIT`, this
+# recipe with multiple jobs makes build and `git reset` run
+# simultaneously, and will cause inconsistent results. Run with `-j1`
+# or update GNU make.
+nightly: yesterday $(DOT_WAIT) install
+ $(NULLCMD)
+
+# Rewind to the last commit "yesterday". "Yesterday" means here the
+# period where `RUBY_RELEASE_DATE` is the day before the date to be
+# generated now. In short, the yesterday in JST-9 time zone.
+yesterday: rewindable
+
+rewindable:
+ $(GIT_IN_SRC) status --porcelain
+ $(GIT_IN_SRC) diff --quiet
+
+HELP_EXTRA_TASKS = ""
+
+gc/Makefile:
+ $(MAKEDIRS) $(@D)
+ $(MESSAGE_BEGIN) \
+ "all:" \
+ " @echo You must specify MODULAR_GC with the GC to build" \
+ " @exit 1" \
+ $(MESSAGE_END) > $@
+gc/distclean gc/realclean::
+ -$(Q) $(RM) gc/Makefile
+
+modular-gc-precheck:
+modular-gc: probes.h gc/Makefile
+ $(Q) $(RUNRUBY) $(srcdir)/ext/extmk.rb \
+ $(SCRIPT_ARGS) \
+ --make='$(MAKE)' --make-flags="V=$(V) MINIRUBY='$(MINIRUBY)'" \
+ --gnumake=$(gnumake) --extflags="$(EXTLDFLAGS)" \
+ --ext-build-dir=gc --command-output=gc/$(MODULAR_GC)/exts.mk -- \
+ configure gc/$(MODULAR_GC)
+ $(CHDIR) gc/$(MODULAR_GC) && $(exec) $(MAKE) TARGET_SO_DIR=./
+install-modular-gc: modular-gc modular-gc-precheck
+ $(Q) $(MAKEDIRS) $(modular_gc_dir)
+ $(CP) gc/$(MODULAR_GC)/librubygc.$(MODULAR_GC).$(DLEXT) $(modular_gc_dir)
+
+clean-modular-gc: gc/clean
+distclean-modular-gc: gc/distclean
+realclean-modular-gc: gc/realclean
+distclean-modular-gc realclean-modular-gc:
+ -$(Q) $(RMDIR) gc
+
help: PHONY
$(MESSAGE_BEGIN) \
" Makefile of Ruby" \
"" \
"targets:" \
- " all (default): builds all of below" \
- " miniruby: builds only miniruby" \
- " encs: builds encodings" \
- " exts: builds extensions" \
- " main: builds encodings, extensions and ruby" \
- " docs: builds documents" \
- " run: runs test.rb by miniruby" \
- " runruby: runs test.rb by ruby you just built" \
- " gdb: runs test.rb by miniruby under gdb" \
- " gdb-ruby: runs test.rb by ruby under gdb" \
- " check: equals make test test-all" \
- " exam: equals make check test-rubyspec" \
- " test: ruby core tests" \
- " test-all: all ruby tests [TESTOPTS=-j4 TESTS=\"<test files>\"]" \
- " test-rubyspec: run the Ruby spec suite" \
- " up: update local copy and autogenerated files" \
- " update-rubyspec: update local copy of the Ruby spec suite" \
- " benchmark: benchmark this ruby and COMPARE_RUBY." \
- " gcbench: gc benchmark [GCBENCH_ITEM=<item_name>]" \
- " gcbench-rdoc: gc benchmark with GCBENCH_ITEM=rdoc" \
- " install: install all ruby distributions" \
- " install-nodoc: install without rdoc" \
- " install-cross: install cross compiling stuff" \
- " clean: clean for tarball" \
- " distclean: clean for repository" \
- " change: make change log template" \
- " golf: for golfers" \
- "" \
+ " all (default): builds all of below" \
+ " miniruby: builds only miniruby" \
+ " encs: builds encodings" \
+ " exts: builds extensions" \
+ " main: builds encodings, extensions and ruby" \
+ " docs: builds documents" \
+ " install-capi: builds C API documents" \
+ " run: runs test.rb by miniruby" \
+ " runruby: runs test.rb by ruby you just built" \
+ " gdb: runs test.rb by miniruby under gdb" \
+ " gdb-ruby: runs test.rb by ruby under gdb" \
+ " runirb: starts irb on built ruby (not installed ruby)" \
+ " exam: equals make check test-bundler-parallel test-bundled-gems" \
+ " check: equals make test test-tool test-all test-spec test-syntax-suggest" \
+ " test: ruby core tests [BTESTS=<bootstraptest files>]" \
+ " test-all: all ruby tests [TESTOPTS=-j4 TESTS=<test files>]" \
+ " test-spec: run the Ruby spec suite [SPECOPTS=<specs, opts>]" \
+ " test-bundler: run the Bundler spec" \
+ " test-bundler-parallel: run the Bundler spec with parallel" \
+ " test-syntax-suggest: run the SyntaxSuggest spec" \
+ " test-bundled-gems: run the test suite of bundled gems [BUNDLED_GEMS=<gems>]" \
+ " test-tool: tests under the tool/test" \
+ " update-gems: download files of the bundled gems" \
+ " update-bundled_gems: update the latest version of bundled gems" \
+ " sync-default-gems: sync default gems from upstream [GEM=<gem_name git_ref>]" \
+ " up: update local copy and autogenerated files" \
+ " benchmark: benchmark this ruby and COMPARE_RUBY." \
+ " gcbench: gc benchmark [GCBENCH_ITEM=<item_name>]" \
+ " install: install all ruby distributions" \
+ " install-nodoc: install without rdoc" \
+ " install-cross: install cross compiling stuff" \
+ " clean: clean up to the state before build" \
+ " distclean: clean up to the state before configure" \
+ " golf: build goruby for golfers" \
+ $(HELP_EXTRA_TASKS) \
"see DeveloperHowto for more detail: " \
- " https://bugs.ruby-lang.org/projects/ruby/wiki/DeveloperHowto" \
+ " https://github.com/ruby/ruby/wiki/Developer-How-To" \
$(MESSAGE_END)
-# AUTOGENERATED DEPENDENCIES START
-addr2line.$(OBJEXT): {$(VPATH)}addr2line.c
-addr2line.$(OBJEXT): {$(VPATH)}addr2line.h
-addr2line.$(OBJEXT): {$(VPATH)}config.h
-addr2line.$(OBJEXT): {$(VPATH)}missing.h
-array.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-array.$(OBJEXT): $(top_srcdir)/include/ruby.h
-array.$(OBJEXT): {$(VPATH)}array.c
-array.$(OBJEXT): {$(VPATH)}config.h
-array.$(OBJEXT): {$(VPATH)}defines.h
-array.$(OBJEXT): {$(VPATH)}encoding.h
-array.$(OBJEXT): {$(VPATH)}id.h
-array.$(OBJEXT): {$(VPATH)}intern.h
-array.$(OBJEXT): {$(VPATH)}internal.h
-array.$(OBJEXT): {$(VPATH)}io.h
-array.$(OBJEXT): {$(VPATH)}missing.h
-array.$(OBJEXT): {$(VPATH)}oniguruma.h
-array.$(OBJEXT): {$(VPATH)}probes.h
-array.$(OBJEXT): {$(VPATH)}ruby_assert.h
-array.$(OBJEXT): {$(VPATH)}st.h
-array.$(OBJEXT): {$(VPATH)}subst.h
-array.$(OBJEXT): {$(VPATH)}util.h
-array.$(OBJEXT): {$(VPATH)}vm_opts.h
-bignum.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-bignum.$(OBJEXT): $(top_srcdir)/include/ruby.h
-bignum.$(OBJEXT): {$(VPATH)}bignum.c
-bignum.$(OBJEXT): {$(VPATH)}config.h
-bignum.$(OBJEXT): {$(VPATH)}defines.h
-bignum.$(OBJEXT): {$(VPATH)}encoding.h
-bignum.$(OBJEXT): {$(VPATH)}intern.h
-bignum.$(OBJEXT): {$(VPATH)}internal.h
-bignum.$(OBJEXT): {$(VPATH)}io.h
-bignum.$(OBJEXT): {$(VPATH)}missing.h
-bignum.$(OBJEXT): {$(VPATH)}oniguruma.h
-bignum.$(OBJEXT): {$(VPATH)}ruby_assert.h
-bignum.$(OBJEXT): {$(VPATH)}st.h
-bignum.$(OBJEXT): {$(VPATH)}subst.h
-bignum.$(OBJEXT): {$(VPATH)}thread.h
-bignum.$(OBJEXT): {$(VPATH)}util.h
-class.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-class.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-class.$(OBJEXT): $(CCAN_DIR)/list/list.h
-class.$(OBJEXT): $(CCAN_DIR)/str/str.h
-class.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-class.$(OBJEXT): $(top_srcdir)/include/ruby.h
-class.$(OBJEXT): {$(VPATH)}class.c
-class.$(OBJEXT): {$(VPATH)}config.h
-class.$(OBJEXT): {$(VPATH)}constant.h
-class.$(OBJEXT): {$(VPATH)}defines.h
-class.$(OBJEXT): {$(VPATH)}encoding.h
-class.$(OBJEXT): {$(VPATH)}id.h
-class.$(OBJEXT): {$(VPATH)}id_table.h
-class.$(OBJEXT): {$(VPATH)}intern.h
-class.$(OBJEXT): {$(VPATH)}internal.h
-class.$(OBJEXT): {$(VPATH)}io.h
-class.$(OBJEXT): {$(VPATH)}method.h
-class.$(OBJEXT): {$(VPATH)}missing.h
-class.$(OBJEXT): {$(VPATH)}node.h
-class.$(OBJEXT): {$(VPATH)}oniguruma.h
-class.$(OBJEXT): {$(VPATH)}ruby_assert.h
-class.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-class.$(OBJEXT): {$(VPATH)}st.h
-class.$(OBJEXT): {$(VPATH)}subst.h
-class.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-class.$(OBJEXT): {$(VPATH)}thread_native.h
-class.$(OBJEXT): {$(VPATH)}vm_core.h
-class.$(OBJEXT): {$(VPATH)}vm_debug.h
-class.$(OBJEXT): {$(VPATH)}vm_opts.h
-compar.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-compar.$(OBJEXT): {$(VPATH)}compar.c
-compar.$(OBJEXT): {$(VPATH)}config.h
-compar.$(OBJEXT): {$(VPATH)}defines.h
-compar.$(OBJEXT): {$(VPATH)}intern.h
-compar.$(OBJEXT): {$(VPATH)}missing.h
-compar.$(OBJEXT): {$(VPATH)}st.h
-compar.$(OBJEXT): {$(VPATH)}subst.h
-compile.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-compile.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-compile.$(OBJEXT): $(CCAN_DIR)/list/list.h
-compile.$(OBJEXT): $(CCAN_DIR)/str/str.h
-compile.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-compile.$(OBJEXT): $(top_srcdir)/include/ruby.h
-compile.$(OBJEXT): {$(VPATH)}compile.c
-compile.$(OBJEXT): {$(VPATH)}config.h
-compile.$(OBJEXT): {$(VPATH)}defines.h
-compile.$(OBJEXT): {$(VPATH)}encindex.h
-compile.$(OBJEXT): {$(VPATH)}encoding.h
-compile.$(OBJEXT): {$(VPATH)}gc.h
-compile.$(OBJEXT): {$(VPATH)}id.h
-compile.$(OBJEXT): {$(VPATH)}insns.inc
-compile.$(OBJEXT): {$(VPATH)}insns_info.inc
-compile.$(OBJEXT): {$(VPATH)}intern.h
-compile.$(OBJEXT): {$(VPATH)}internal.h
-compile.$(OBJEXT): {$(VPATH)}io.h
-compile.$(OBJEXT): {$(VPATH)}iseq.h
-compile.$(OBJEXT): {$(VPATH)}method.h
-compile.$(OBJEXT): {$(VPATH)}missing.h
-compile.$(OBJEXT): {$(VPATH)}node.h
-compile.$(OBJEXT): {$(VPATH)}oniguruma.h
-compile.$(OBJEXT): {$(VPATH)}optinsn.inc
-compile.$(OBJEXT): {$(VPATH)}re.h
-compile.$(OBJEXT): {$(VPATH)}ruby_assert.h
-compile.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-compile.$(OBJEXT): {$(VPATH)}st.h
-compile.$(OBJEXT): {$(VPATH)}subst.h
-compile.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-compile.$(OBJEXT): {$(VPATH)}thread_native.h
-compile.$(OBJEXT): {$(VPATH)}vm_core.h
-compile.$(OBJEXT): {$(VPATH)}vm_debug.h
-compile.$(OBJEXT): {$(VPATH)}vm_opts.h
-complex.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-complex.$(OBJEXT): $(top_srcdir)/include/ruby.h
-complex.$(OBJEXT): {$(VPATH)}complex.c
-complex.$(OBJEXT): {$(VPATH)}config.h
-complex.$(OBJEXT): {$(VPATH)}defines.h
-complex.$(OBJEXT): {$(VPATH)}encoding.h
-complex.$(OBJEXT): {$(VPATH)}intern.h
-complex.$(OBJEXT): {$(VPATH)}internal.h
-complex.$(OBJEXT): {$(VPATH)}io.h
-complex.$(OBJEXT): {$(VPATH)}missing.h
-complex.$(OBJEXT): {$(VPATH)}oniguruma.h
-complex.$(OBJEXT): {$(VPATH)}ruby_assert.h
-complex.$(OBJEXT): {$(VPATH)}st.h
-complex.$(OBJEXT): {$(VPATH)}subst.h
-cont.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-cont.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-cont.$(OBJEXT): $(CCAN_DIR)/list/list.h
-cont.$(OBJEXT): $(CCAN_DIR)/str/str.h
-cont.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-cont.$(OBJEXT): $(top_srcdir)/include/ruby.h
-cont.$(OBJEXT): {$(VPATH)}config.h
-cont.$(OBJEXT): {$(VPATH)}cont.c
-cont.$(OBJEXT): {$(VPATH)}defines.h
-cont.$(OBJEXT): {$(VPATH)}encoding.h
-cont.$(OBJEXT): {$(VPATH)}eval_intern.h
-cont.$(OBJEXT): {$(VPATH)}gc.h
-cont.$(OBJEXT): {$(VPATH)}id.h
-cont.$(OBJEXT): {$(VPATH)}intern.h
-cont.$(OBJEXT): {$(VPATH)}internal.h
-cont.$(OBJEXT): {$(VPATH)}io.h
-cont.$(OBJEXT): {$(VPATH)}method.h
-cont.$(OBJEXT): {$(VPATH)}missing.h
-cont.$(OBJEXT): {$(VPATH)}node.h
-cont.$(OBJEXT): {$(VPATH)}oniguruma.h
-cont.$(OBJEXT): {$(VPATH)}ruby_assert.h
-cont.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-cont.$(OBJEXT): {$(VPATH)}st.h
-cont.$(OBJEXT): {$(VPATH)}subst.h
-cont.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-cont.$(OBJEXT): {$(VPATH)}thread_native.h
-cont.$(OBJEXT): {$(VPATH)}vm_core.h
-cont.$(OBJEXT): {$(VPATH)}vm_debug.h
-cont.$(OBJEXT): {$(VPATH)}vm_opts.h
-debug.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-debug.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-debug.$(OBJEXT): $(CCAN_DIR)/list/list.h
-debug.$(OBJEXT): $(CCAN_DIR)/str/str.h
-debug.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-debug.$(OBJEXT): $(top_srcdir)/include/ruby.h
-debug.$(OBJEXT): {$(VPATH)}config.h
-debug.$(OBJEXT): {$(VPATH)}debug.c
-debug.$(OBJEXT): {$(VPATH)}defines.h
-debug.$(OBJEXT): {$(VPATH)}encoding.h
-debug.$(OBJEXT): {$(VPATH)}eval_intern.h
-debug.$(OBJEXT): {$(VPATH)}id.h
-debug.$(OBJEXT): {$(VPATH)}intern.h
-debug.$(OBJEXT): {$(VPATH)}internal.h
-debug.$(OBJEXT): {$(VPATH)}io.h
-debug.$(OBJEXT): {$(VPATH)}method.h
-debug.$(OBJEXT): {$(VPATH)}missing.h
-debug.$(OBJEXT): {$(VPATH)}node.h
-debug.$(OBJEXT): {$(VPATH)}oniguruma.h
-debug.$(OBJEXT): {$(VPATH)}ruby_assert.h
-debug.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-debug.$(OBJEXT): {$(VPATH)}st.h
-debug.$(OBJEXT): {$(VPATH)}subst.h
-debug.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-debug.$(OBJEXT): {$(VPATH)}thread_native.h
-debug.$(OBJEXT): {$(VPATH)}util.h
-debug.$(OBJEXT): {$(VPATH)}vm_core.h
-debug.$(OBJEXT): {$(VPATH)}vm_debug.h
-debug.$(OBJEXT): {$(VPATH)}vm_opts.h
-dir.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-dir.$(OBJEXT): $(top_srcdir)/include/ruby.h
-dir.$(OBJEXT): {$(VPATH)}config.h
-dir.$(OBJEXT): {$(VPATH)}defines.h
-dir.$(OBJEXT): {$(VPATH)}dir.c
-dir.$(OBJEXT): {$(VPATH)}encindex.h
-dir.$(OBJEXT): {$(VPATH)}encoding.h
-dir.$(OBJEXT): {$(VPATH)}intern.h
-dir.$(OBJEXT): {$(VPATH)}internal.h
-dir.$(OBJEXT): {$(VPATH)}io.h
-dir.$(OBJEXT): {$(VPATH)}missing.h
-dir.$(OBJEXT): {$(VPATH)}oniguruma.h
-dir.$(OBJEXT): {$(VPATH)}st.h
-dir.$(OBJEXT): {$(VPATH)}subst.h
-dir.$(OBJEXT): {$(VPATH)}util.h
-dln.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-dln.$(OBJEXT): {$(VPATH)}config.h
-dln.$(OBJEXT): {$(VPATH)}defines.h
-dln.$(OBJEXT): {$(VPATH)}dln.c
-dln.$(OBJEXT): {$(VPATH)}dln.h
-dln.$(OBJEXT): {$(VPATH)}intern.h
-dln.$(OBJEXT): {$(VPATH)}missing.h
-dln.$(OBJEXT): {$(VPATH)}st.h
-dln.$(OBJEXT): {$(VPATH)}subst.h
-dln_find.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-dln_find.$(OBJEXT): {$(VPATH)}config.h
-dln_find.$(OBJEXT): {$(VPATH)}defines.h
-dln_find.$(OBJEXT): {$(VPATH)}dln.h
-dln_find.$(OBJEXT): {$(VPATH)}dln_find.c
-dln_find.$(OBJEXT): {$(VPATH)}intern.h
-dln_find.$(OBJEXT): {$(VPATH)}missing.h
-dln_find.$(OBJEXT): {$(VPATH)}st.h
-dln_find.$(OBJEXT): {$(VPATH)}subst.h
-dmydln.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-dmydln.$(OBJEXT): {$(VPATH)}config.h
-dmydln.$(OBJEXT): {$(VPATH)}defines.h
-dmydln.$(OBJEXT): {$(VPATH)}dmydln.c
-dmydln.$(OBJEXT): {$(VPATH)}intern.h
-dmydln.$(OBJEXT): {$(VPATH)}missing.h
-dmydln.$(OBJEXT): {$(VPATH)}st.h
-dmydln.$(OBJEXT): {$(VPATH)}subst.h
-dmyenc.$(OBJEXT): {$(VPATH)}dmyenc.c
-dmyext.$(OBJEXT): {$(VPATH)}dmyext.c
-enc/ascii.$(OBJEXT): {$(VPATH)}config.h
-enc/ascii.$(OBJEXT): {$(VPATH)}defines.h
-enc/ascii.$(OBJEXT): {$(VPATH)}enc/ascii.c
-enc/ascii.$(OBJEXT): {$(VPATH)}encindex.h
-enc/ascii.$(OBJEXT): {$(VPATH)}missing.h
-enc/ascii.$(OBJEXT): {$(VPATH)}oniguruma.h
-enc/ascii.$(OBJEXT): {$(VPATH)}regenc.h
-enc/trans/newline.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-enc/trans/newline.$(OBJEXT): {$(VPATH)}config.h
-enc/trans/newline.$(OBJEXT): {$(VPATH)}defines.h
-enc/trans/newline.$(OBJEXT): {$(VPATH)}enc/trans/newline.c
-enc/trans/newline.$(OBJEXT): {$(VPATH)}intern.h
-enc/trans/newline.$(OBJEXT): {$(VPATH)}missing.h
-enc/trans/newline.$(OBJEXT): {$(VPATH)}st.h
-enc/trans/newline.$(OBJEXT): {$(VPATH)}subst.h
-enc/trans/newline.$(OBJEXT): {$(VPATH)}transcode_data.h
-enc/unicode.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-enc/unicode.$(OBJEXT): {$(VPATH)}config.h
-enc/unicode.$(OBJEXT): {$(VPATH)}defines.h
-enc/unicode.$(OBJEXT): {$(VPATH)}enc/unicode.c
-enc/unicode.$(OBJEXT): {$(VPATH)}enc/unicode/casefold.h
-enc/unicode.$(OBJEXT): {$(VPATH)}enc/unicode/name2ctype.h
-enc/unicode.$(OBJEXT): {$(VPATH)}intern.h
-enc/unicode.$(OBJEXT): {$(VPATH)}missing.h
-enc/unicode.$(OBJEXT): {$(VPATH)}oniguruma.h
-enc/unicode.$(OBJEXT): {$(VPATH)}regenc.h
-enc/unicode.$(OBJEXT): {$(VPATH)}regint.h
-enc/unicode.$(OBJEXT): {$(VPATH)}st.h
-enc/unicode.$(OBJEXT): {$(VPATH)}subst.h
-enc/us_ascii.$(OBJEXT): {$(VPATH)}config.h
-enc/us_ascii.$(OBJEXT): {$(VPATH)}defines.h
-enc/us_ascii.$(OBJEXT): {$(VPATH)}enc/us_ascii.c
-enc/us_ascii.$(OBJEXT): {$(VPATH)}encindex.h
-enc/us_ascii.$(OBJEXT): {$(VPATH)}missing.h
-enc/us_ascii.$(OBJEXT): {$(VPATH)}oniguruma.h
-enc/us_ascii.$(OBJEXT): {$(VPATH)}regenc.h
-enc/utf_8.$(OBJEXT): {$(VPATH)}config.h
-enc/utf_8.$(OBJEXT): {$(VPATH)}defines.h
-enc/utf_8.$(OBJEXT): {$(VPATH)}enc/utf_8.c
-enc/utf_8.$(OBJEXT): {$(VPATH)}encindex.h
-enc/utf_8.$(OBJEXT): {$(VPATH)}missing.h
-enc/utf_8.$(OBJEXT): {$(VPATH)}oniguruma.h
-enc/utf_8.$(OBJEXT): {$(VPATH)}regenc.h
-encoding.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-encoding.$(OBJEXT): $(top_srcdir)/include/ruby.h
-encoding.$(OBJEXT): {$(VPATH)}config.h
-encoding.$(OBJEXT): {$(VPATH)}defines.h
-encoding.$(OBJEXT): {$(VPATH)}encindex.h
-encoding.$(OBJEXT): {$(VPATH)}encoding.c
-encoding.$(OBJEXT): {$(VPATH)}encoding.h
-encoding.$(OBJEXT): {$(VPATH)}intern.h
-encoding.$(OBJEXT): {$(VPATH)}internal.h
-encoding.$(OBJEXT): {$(VPATH)}io.h
-encoding.$(OBJEXT): {$(VPATH)}missing.h
-encoding.$(OBJEXT): {$(VPATH)}oniguruma.h
-encoding.$(OBJEXT): {$(VPATH)}regenc.h
-encoding.$(OBJEXT): {$(VPATH)}ruby_assert.h
-encoding.$(OBJEXT): {$(VPATH)}st.h
-encoding.$(OBJEXT): {$(VPATH)}subst.h
-encoding.$(OBJEXT): {$(VPATH)}util.h
-enum.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-enum.$(OBJEXT): $(top_srcdir)/include/ruby.h
-enum.$(OBJEXT): {$(VPATH)}config.h
-enum.$(OBJEXT): {$(VPATH)}defines.h
-enum.$(OBJEXT): {$(VPATH)}encoding.h
-enum.$(OBJEXT): {$(VPATH)}enum.c
-enum.$(OBJEXT): {$(VPATH)}id.h
-enum.$(OBJEXT): {$(VPATH)}intern.h
-enum.$(OBJEXT): {$(VPATH)}internal.h
-enum.$(OBJEXT): {$(VPATH)}io.h
-enum.$(OBJEXT): {$(VPATH)}missing.h
-enum.$(OBJEXT): {$(VPATH)}oniguruma.h
-enum.$(OBJEXT): {$(VPATH)}st.h
-enum.$(OBJEXT): {$(VPATH)}subst.h
-enum.$(OBJEXT): {$(VPATH)}util.h
-enumerator.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-enumerator.$(OBJEXT): $(top_srcdir)/include/ruby.h
-enumerator.$(OBJEXT): {$(VPATH)}config.h
-enumerator.$(OBJEXT): {$(VPATH)}defines.h
-enumerator.$(OBJEXT): {$(VPATH)}encoding.h
-enumerator.$(OBJEXT): {$(VPATH)}enumerator.c
-enumerator.$(OBJEXT): {$(VPATH)}intern.h
-enumerator.$(OBJEXT): {$(VPATH)}internal.h
-enumerator.$(OBJEXT): {$(VPATH)}io.h
-enumerator.$(OBJEXT): {$(VPATH)}missing.h
-enumerator.$(OBJEXT): {$(VPATH)}oniguruma.h
-enumerator.$(OBJEXT): {$(VPATH)}st.h
-enumerator.$(OBJEXT): {$(VPATH)}subst.h
-error.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-error.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-error.$(OBJEXT): $(CCAN_DIR)/list/list.h
-error.$(OBJEXT): $(CCAN_DIR)/str/str.h
-error.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-error.$(OBJEXT): $(top_srcdir)/include/ruby.h
-error.$(OBJEXT): {$(VPATH)}config.h
-error.$(OBJEXT): {$(VPATH)}defines.h
-error.$(OBJEXT): {$(VPATH)}encoding.h
-error.$(OBJEXT): {$(VPATH)}error.c
-error.$(OBJEXT): {$(VPATH)}id.h
-error.$(OBJEXT): {$(VPATH)}intern.h
-error.$(OBJEXT): {$(VPATH)}internal.h
-error.$(OBJEXT): {$(VPATH)}io.h
-error.$(OBJEXT): {$(VPATH)}known_errors.inc
-error.$(OBJEXT): {$(VPATH)}method.h
-error.$(OBJEXT): {$(VPATH)}missing.h
-error.$(OBJEXT): {$(VPATH)}node.h
-error.$(OBJEXT): {$(VPATH)}oniguruma.h
-error.$(OBJEXT): {$(VPATH)}ruby_assert.h
-error.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-error.$(OBJEXT): {$(VPATH)}st.h
-error.$(OBJEXT): {$(VPATH)}subst.h
-error.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-error.$(OBJEXT): {$(VPATH)}thread_native.h
-error.$(OBJEXT): {$(VPATH)}vm_core.h
-error.$(OBJEXT): {$(VPATH)}vm_debug.h
-error.$(OBJEXT): {$(VPATH)}vm_opts.h
-eval.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-eval.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-eval.$(OBJEXT): $(CCAN_DIR)/list/list.h
-eval.$(OBJEXT): $(CCAN_DIR)/str/str.h
-eval.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-eval.$(OBJEXT): $(top_srcdir)/include/ruby.h
-eval.$(OBJEXT): {$(VPATH)}config.h
-eval.$(OBJEXT): {$(VPATH)}defines.h
-eval.$(OBJEXT): {$(VPATH)}encoding.h
-eval.$(OBJEXT): {$(VPATH)}eval.c
-eval.$(OBJEXT): {$(VPATH)}eval_error.c
-eval.$(OBJEXT): {$(VPATH)}eval_intern.h
-eval.$(OBJEXT): {$(VPATH)}eval_jump.c
-eval.$(OBJEXT): {$(VPATH)}gc.h
-eval.$(OBJEXT): {$(VPATH)}id.h
-eval.$(OBJEXT): {$(VPATH)}intern.h
-eval.$(OBJEXT): {$(VPATH)}internal.h
-eval.$(OBJEXT): {$(VPATH)}io.h
-eval.$(OBJEXT): {$(VPATH)}iseq.h
-eval.$(OBJEXT): {$(VPATH)}method.h
-eval.$(OBJEXT): {$(VPATH)}missing.h
-eval.$(OBJEXT): {$(VPATH)}node.h
-eval.$(OBJEXT): {$(VPATH)}oniguruma.h
-eval.$(OBJEXT): {$(VPATH)}probes.h
-eval.$(OBJEXT): {$(VPATH)}probes_helper.h
-eval.$(OBJEXT): {$(VPATH)}ruby_assert.h
-eval.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-eval.$(OBJEXT): {$(VPATH)}st.h
-eval.$(OBJEXT): {$(VPATH)}subst.h
-eval.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-eval.$(OBJEXT): {$(VPATH)}thread_native.h
-eval.$(OBJEXT): {$(VPATH)}vm.h
-eval.$(OBJEXT): {$(VPATH)}vm_core.h
-eval.$(OBJEXT): {$(VPATH)}vm_debug.h
-eval.$(OBJEXT): {$(VPATH)}vm_opts.h
-file.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-file.$(OBJEXT): $(top_srcdir)/include/ruby.h
-file.$(OBJEXT): {$(VPATH)}config.h
-file.$(OBJEXT): {$(VPATH)}defines.h
-file.$(OBJEXT): {$(VPATH)}dln.h
-file.$(OBJEXT): {$(VPATH)}encindex.h
-file.$(OBJEXT): {$(VPATH)}encoding.h
-file.$(OBJEXT): {$(VPATH)}file.c
-file.$(OBJEXT): {$(VPATH)}intern.h
-file.$(OBJEXT): {$(VPATH)}internal.h
-file.$(OBJEXT): {$(VPATH)}io.h
-file.$(OBJEXT): {$(VPATH)}missing.h
-file.$(OBJEXT): {$(VPATH)}oniguruma.h
-file.$(OBJEXT): {$(VPATH)}st.h
-file.$(OBJEXT): {$(VPATH)}subst.h
-file.$(OBJEXT): {$(VPATH)}util.h
-gc.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-gc.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-gc.$(OBJEXT): $(CCAN_DIR)/list/list.h
-gc.$(OBJEXT): $(CCAN_DIR)/str/str.h
-gc.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-gc.$(OBJEXT): $(top_srcdir)/include/ruby.h
-gc.$(OBJEXT): {$(VPATH)}config.h
-gc.$(OBJEXT): {$(VPATH)}constant.h
-gc.$(OBJEXT): {$(VPATH)}debug.h
-gc.$(OBJEXT): {$(VPATH)}defines.h
-gc.$(OBJEXT): {$(VPATH)}encoding.h
-gc.$(OBJEXT): {$(VPATH)}eval_intern.h
-gc.$(OBJEXT): {$(VPATH)}gc.c
-gc.$(OBJEXT): {$(VPATH)}gc.h
-gc.$(OBJEXT): {$(VPATH)}id.h
-gc.$(OBJEXT): {$(VPATH)}id_table.h
-gc.$(OBJEXT): {$(VPATH)}intern.h
-gc.$(OBJEXT): {$(VPATH)}internal.h
-gc.$(OBJEXT): {$(VPATH)}io.h
-gc.$(OBJEXT): {$(VPATH)}method.h
-gc.$(OBJEXT): {$(VPATH)}missing.h
-gc.$(OBJEXT): {$(VPATH)}node.h
-gc.$(OBJEXT): {$(VPATH)}oniguruma.h
-gc.$(OBJEXT): {$(VPATH)}probes.h
-gc.$(OBJEXT): {$(VPATH)}re.h
-gc.$(OBJEXT): {$(VPATH)}regenc.h
-gc.$(OBJEXT): {$(VPATH)}regex.h
-gc.$(OBJEXT): {$(VPATH)}regint.h
-gc.$(OBJEXT): {$(VPATH)}ruby_assert.h
-gc.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-gc.$(OBJEXT): {$(VPATH)}st.h
-gc.$(OBJEXT): {$(VPATH)}subst.h
-gc.$(OBJEXT): {$(VPATH)}thread.h
-gc.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-gc.$(OBJEXT): {$(VPATH)}thread_native.h
-gc.$(OBJEXT): {$(VPATH)}util.h
-gc.$(OBJEXT): {$(VPATH)}vm_core.h
-gc.$(OBJEXT): {$(VPATH)}vm_debug.h
-gc.$(OBJEXT): {$(VPATH)}vm_opts.h
-golf_prelude.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-golf_prelude.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-golf_prelude.$(OBJEXT): $(CCAN_DIR)/list/list.h
-golf_prelude.$(OBJEXT): $(CCAN_DIR)/str/str.h
-golf_prelude.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-golf_prelude.$(OBJEXT): $(top_srcdir)/include/ruby.h
-golf_prelude.$(OBJEXT): {$(VPATH)}config.h
-golf_prelude.$(OBJEXT): {$(VPATH)}defines.h
-golf_prelude.$(OBJEXT): {$(VPATH)}encoding.h
-golf_prelude.$(OBJEXT): {$(VPATH)}golf_prelude.c
-golf_prelude.$(OBJEXT): {$(VPATH)}id.h
-golf_prelude.$(OBJEXT): {$(VPATH)}intern.h
-golf_prelude.$(OBJEXT): {$(VPATH)}internal.h
-golf_prelude.$(OBJEXT): {$(VPATH)}io.h
-golf_prelude.$(OBJEXT): {$(VPATH)}method.h
-golf_prelude.$(OBJEXT): {$(VPATH)}missing.h
-golf_prelude.$(OBJEXT): {$(VPATH)}node.h
-golf_prelude.$(OBJEXT): {$(VPATH)}oniguruma.h
-golf_prelude.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-golf_prelude.$(OBJEXT): {$(VPATH)}st.h
-golf_prelude.$(OBJEXT): {$(VPATH)}subst.h
-golf_prelude.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-golf_prelude.$(OBJEXT): {$(VPATH)}thread_native.h
-golf_prelude.$(OBJEXT): {$(VPATH)}vm_core.h
-golf_prelude.$(OBJEXT): {$(VPATH)}vm_debug.h
-golf_prelude.$(OBJEXT): {$(VPATH)}vm_opts.h
-goruby.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-goruby.$(OBJEXT): $(top_srcdir)/include/ruby.h
-goruby.$(OBJEXT): {$(VPATH)}config.h
-goruby.$(OBJEXT): {$(VPATH)}defines.h
-goruby.$(OBJEXT): {$(VPATH)}goruby.c
-goruby.$(OBJEXT): {$(VPATH)}intern.h
-goruby.$(OBJEXT): {$(VPATH)}main.c
-goruby.$(OBJEXT): {$(VPATH)}missing.h
-goruby.$(OBJEXT): {$(VPATH)}node.h
-goruby.$(OBJEXT): {$(VPATH)}st.h
-goruby.$(OBJEXT): {$(VPATH)}subst.h
-goruby.$(OBJEXT): {$(VPATH)}vm_debug.h
-hash.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-hash.$(OBJEXT): $(top_srcdir)/include/ruby.h
-hash.$(OBJEXT): {$(VPATH)}config.h
-hash.$(OBJEXT): {$(VPATH)}defines.h
-hash.$(OBJEXT): {$(VPATH)}encoding.h
-hash.$(OBJEXT): {$(VPATH)}hash.c
-hash.$(OBJEXT): {$(VPATH)}id.h
-hash.$(OBJEXT): {$(VPATH)}intern.h
-hash.$(OBJEXT): {$(VPATH)}internal.h
-hash.$(OBJEXT): {$(VPATH)}io.h
-hash.$(OBJEXT): {$(VPATH)}missing.h
-hash.$(OBJEXT): {$(VPATH)}oniguruma.h
-hash.$(OBJEXT): {$(VPATH)}probes.h
-hash.$(OBJEXT): {$(VPATH)}st.h
-hash.$(OBJEXT): {$(VPATH)}subst.h
-hash.$(OBJEXT): {$(VPATH)}symbol.h
-hash.$(OBJEXT): {$(VPATH)}util.h
-hash.$(OBJEXT): {$(VPATH)}vm_opts.h
-inits.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-inits.$(OBJEXT): $(top_srcdir)/include/ruby.h
-inits.$(OBJEXT): {$(VPATH)}config.h
-inits.$(OBJEXT): {$(VPATH)}defines.h
-inits.$(OBJEXT): {$(VPATH)}encoding.h
-inits.$(OBJEXT): {$(VPATH)}inits.c
-inits.$(OBJEXT): {$(VPATH)}intern.h
-inits.$(OBJEXT): {$(VPATH)}internal.h
-inits.$(OBJEXT): {$(VPATH)}io.h
-inits.$(OBJEXT): {$(VPATH)}missing.h
-inits.$(OBJEXT): {$(VPATH)}oniguruma.h
-inits.$(OBJEXT): {$(VPATH)}st.h
-inits.$(OBJEXT): {$(VPATH)}subst.h
-io.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-io.$(OBJEXT): $(top_srcdir)/include/ruby.h
-io.$(OBJEXT): {$(VPATH)}config.h
-io.$(OBJEXT): {$(VPATH)}defines.h
-io.$(OBJEXT): {$(VPATH)}dln.h
-io.$(OBJEXT): {$(VPATH)}encindex.h
-io.$(OBJEXT): {$(VPATH)}encoding.h
-io.$(OBJEXT): {$(VPATH)}id.h
-io.$(OBJEXT): {$(VPATH)}intern.h
-io.$(OBJEXT): {$(VPATH)}internal.h
-io.$(OBJEXT): {$(VPATH)}io.c
-io.$(OBJEXT): {$(VPATH)}io.h
-io.$(OBJEXT): {$(VPATH)}missing.h
-io.$(OBJEXT): {$(VPATH)}oniguruma.h
-io.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-io.$(OBJEXT): {$(VPATH)}st.h
-io.$(OBJEXT): {$(VPATH)}subst.h
-io.$(OBJEXT): {$(VPATH)}thread.h
-io.$(OBJEXT): {$(VPATH)}util.h
-iseq.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-iseq.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-iseq.$(OBJEXT): $(CCAN_DIR)/list/list.h
-iseq.$(OBJEXT): $(CCAN_DIR)/str/str.h
-iseq.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-iseq.$(OBJEXT): $(top_srcdir)/include/ruby.h
-iseq.$(OBJEXT): {$(VPATH)}config.h
-iseq.$(OBJEXT): {$(VPATH)}defines.h
-iseq.$(OBJEXT): {$(VPATH)}encoding.h
-iseq.$(OBJEXT): {$(VPATH)}eval_intern.h
-iseq.$(OBJEXT): {$(VPATH)}gc.h
-iseq.$(OBJEXT): {$(VPATH)}id.h
-iseq.$(OBJEXT): {$(VPATH)}insns.inc
-iseq.$(OBJEXT): {$(VPATH)}insns_info.inc
-iseq.$(OBJEXT): {$(VPATH)}intern.h
-iseq.$(OBJEXT): {$(VPATH)}internal.h
-iseq.$(OBJEXT): {$(VPATH)}io.h
-iseq.$(OBJEXT): {$(VPATH)}iseq.c
-iseq.$(OBJEXT): {$(VPATH)}iseq.h
-iseq.$(OBJEXT): {$(VPATH)}method.h
-iseq.$(OBJEXT): {$(VPATH)}missing.h
-iseq.$(OBJEXT): {$(VPATH)}node.h
-iseq.$(OBJEXT): {$(VPATH)}node_name.inc
-iseq.$(OBJEXT): {$(VPATH)}oniguruma.h
-iseq.$(OBJEXT): {$(VPATH)}ruby_assert.h
-iseq.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-iseq.$(OBJEXT): {$(VPATH)}st.h
-iseq.$(OBJEXT): {$(VPATH)}subst.h
-iseq.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-iseq.$(OBJEXT): {$(VPATH)}thread_native.h
-iseq.$(OBJEXT): {$(VPATH)}util.h
-iseq.$(OBJEXT): {$(VPATH)}vm_core.h
-iseq.$(OBJEXT): {$(VPATH)}vm_debug.h
-iseq.$(OBJEXT): {$(VPATH)}vm_opts.h
-load.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-load.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-load.$(OBJEXT): $(CCAN_DIR)/list/list.h
-load.$(OBJEXT): $(CCAN_DIR)/str/str.h
-load.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-load.$(OBJEXT): $(top_srcdir)/include/ruby.h
-load.$(OBJEXT): {$(VPATH)}config.h
-load.$(OBJEXT): {$(VPATH)}defines.h
-load.$(OBJEXT): {$(VPATH)}dln.h
-load.$(OBJEXT): {$(VPATH)}encoding.h
-load.$(OBJEXT): {$(VPATH)}eval_intern.h
-load.$(OBJEXT): {$(VPATH)}id.h
-load.$(OBJEXT): {$(VPATH)}intern.h
-load.$(OBJEXT): {$(VPATH)}internal.h
-load.$(OBJEXT): {$(VPATH)}io.h
-load.$(OBJEXT): {$(VPATH)}load.c
-load.$(OBJEXT): {$(VPATH)}method.h
-load.$(OBJEXT): {$(VPATH)}missing.h
-load.$(OBJEXT): {$(VPATH)}node.h
-load.$(OBJEXT): {$(VPATH)}oniguruma.h
-load.$(OBJEXT): {$(VPATH)}probes.h
-load.$(OBJEXT): {$(VPATH)}ruby_assert.h
-load.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-load.$(OBJEXT): {$(VPATH)}st.h
-load.$(OBJEXT): {$(VPATH)}subst.h
-load.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-load.$(OBJEXT): {$(VPATH)}thread_native.h
-load.$(OBJEXT): {$(VPATH)}util.h
-load.$(OBJEXT): {$(VPATH)}vm_core.h
-load.$(OBJEXT): {$(VPATH)}vm_debug.h
-load.$(OBJEXT): {$(VPATH)}vm_opts.h
-loadpath.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-loadpath.$(OBJEXT): $(hdrdir)/ruby/version.h
-loadpath.$(OBJEXT): $(top_srcdir)/version.h
-loadpath.$(OBJEXT): {$(VPATH)}config.h
-loadpath.$(OBJEXT): {$(VPATH)}defines.h
-loadpath.$(OBJEXT): {$(VPATH)}intern.h
-loadpath.$(OBJEXT): {$(VPATH)}loadpath.c
-loadpath.$(OBJEXT): {$(VPATH)}missing.h
-loadpath.$(OBJEXT): {$(VPATH)}ruby_assert.h
-loadpath.$(OBJEXT): {$(VPATH)}st.h
-loadpath.$(OBJEXT): {$(VPATH)}subst.h
-loadpath.$(OBJEXT): {$(VPATH)}verconf.h
-localeinit.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-localeinit.$(OBJEXT): $(top_srcdir)/include/ruby.h
-localeinit.$(OBJEXT): {$(VPATH)}config.h
-localeinit.$(OBJEXT): {$(VPATH)}defines.h
-localeinit.$(OBJEXT): {$(VPATH)}encindex.h
-localeinit.$(OBJEXT): {$(VPATH)}encoding.h
-localeinit.$(OBJEXT): {$(VPATH)}intern.h
-localeinit.$(OBJEXT): {$(VPATH)}internal.h
-localeinit.$(OBJEXT): {$(VPATH)}io.h
-localeinit.$(OBJEXT): {$(VPATH)}localeinit.c
-localeinit.$(OBJEXT): {$(VPATH)}missing.h
-localeinit.$(OBJEXT): {$(VPATH)}oniguruma.h
-localeinit.$(OBJEXT): {$(VPATH)}st.h
-localeinit.$(OBJEXT): {$(VPATH)}subst.h
-main.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-main.$(OBJEXT): $(top_srcdir)/include/ruby.h
-main.$(OBJEXT): {$(VPATH)}config.h
-main.$(OBJEXT): {$(VPATH)}defines.h
-main.$(OBJEXT): {$(VPATH)}intern.h
-main.$(OBJEXT): {$(VPATH)}main.c
-main.$(OBJEXT): {$(VPATH)}missing.h
-main.$(OBJEXT): {$(VPATH)}node.h
-main.$(OBJEXT): {$(VPATH)}st.h
-main.$(OBJEXT): {$(VPATH)}subst.h
-main.$(OBJEXT): {$(VPATH)}vm_debug.h
-marshal.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-marshal.$(OBJEXT): $(top_srcdir)/include/ruby.h
-marshal.$(OBJEXT): {$(VPATH)}config.h
-marshal.$(OBJEXT): {$(VPATH)}defines.h
-marshal.$(OBJEXT): {$(VPATH)}encindex.h
-marshal.$(OBJEXT): {$(VPATH)}encoding.h
-marshal.$(OBJEXT): {$(VPATH)}id_table.h
-marshal.$(OBJEXT): {$(VPATH)}intern.h
-marshal.$(OBJEXT): {$(VPATH)}internal.h
-marshal.$(OBJEXT): {$(VPATH)}io.h
-marshal.$(OBJEXT): {$(VPATH)}marshal.c
-marshal.$(OBJEXT): {$(VPATH)}missing.h
-marshal.$(OBJEXT): {$(VPATH)}oniguruma.h
-marshal.$(OBJEXT): {$(VPATH)}st.h
-marshal.$(OBJEXT): {$(VPATH)}subst.h
-marshal.$(OBJEXT): {$(VPATH)}util.h
-math.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-math.$(OBJEXT): $(top_srcdir)/include/ruby.h
-math.$(OBJEXT): {$(VPATH)}config.h
-math.$(OBJEXT): {$(VPATH)}defines.h
-math.$(OBJEXT): {$(VPATH)}encoding.h
-math.$(OBJEXT): {$(VPATH)}intern.h
-math.$(OBJEXT): {$(VPATH)}internal.h
-math.$(OBJEXT): {$(VPATH)}io.h
-math.$(OBJEXT): {$(VPATH)}math.c
-math.$(OBJEXT): {$(VPATH)}missing.h
-math.$(OBJEXT): {$(VPATH)}oniguruma.h
-math.$(OBJEXT): {$(VPATH)}st.h
-math.$(OBJEXT): {$(VPATH)}subst.h
-miniinit.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-miniinit.$(OBJEXT): {$(VPATH)}config.h
-miniinit.$(OBJEXT): {$(VPATH)}defines.h
-miniinit.$(OBJEXT): {$(VPATH)}encoding.h
-miniinit.$(OBJEXT): {$(VPATH)}intern.h
-miniinit.$(OBJEXT): {$(VPATH)}miniinit.c
-miniinit.$(OBJEXT): {$(VPATH)}missing.h
-miniinit.$(OBJEXT): {$(VPATH)}oniguruma.h
-miniinit.$(OBJEXT): {$(VPATH)}st.h
-miniinit.$(OBJEXT): {$(VPATH)}subst.h
-miniprelude.$(OBJEXT): {$(VPATH)}miniprelude.c
-node.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-node.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-node.$(OBJEXT): $(CCAN_DIR)/list/list.h
-node.$(OBJEXT): $(CCAN_DIR)/str/str.h
-node.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-node.$(OBJEXT): $(top_srcdir)/include/ruby.h
-node.$(OBJEXT): {$(VPATH)}config.h
-node.$(OBJEXT): {$(VPATH)}defines.h
-node.$(OBJEXT): {$(VPATH)}encoding.h
-node.$(OBJEXT): {$(VPATH)}id.h
-node.$(OBJEXT): {$(VPATH)}intern.h
-node.$(OBJEXT): {$(VPATH)}internal.h
-node.$(OBJEXT): {$(VPATH)}io.h
-node.$(OBJEXT): {$(VPATH)}method.h
-node.$(OBJEXT): {$(VPATH)}missing.h
-node.$(OBJEXT): {$(VPATH)}node.c
-node.$(OBJEXT): {$(VPATH)}node.h
-node.$(OBJEXT): {$(VPATH)}oniguruma.h
-node.$(OBJEXT): {$(VPATH)}ruby_assert.h
-node.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-node.$(OBJEXT): {$(VPATH)}st.h
-node.$(OBJEXT): {$(VPATH)}subst.h
-node.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-node.$(OBJEXT): {$(VPATH)}thread_native.h
-node.$(OBJEXT): {$(VPATH)}vm_core.h
-node.$(OBJEXT): {$(VPATH)}vm_debug.h
-node.$(OBJEXT): {$(VPATH)}vm_opts.h
-numeric.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-numeric.$(OBJEXT): $(top_srcdir)/include/ruby.h
-numeric.$(OBJEXT): {$(VPATH)}config.h
-numeric.$(OBJEXT): {$(VPATH)}defines.h
-numeric.$(OBJEXT): {$(VPATH)}encoding.h
-numeric.$(OBJEXT): {$(VPATH)}id.h
-numeric.$(OBJEXT): {$(VPATH)}intern.h
-numeric.$(OBJEXT): {$(VPATH)}internal.h
-numeric.$(OBJEXT): {$(VPATH)}io.h
-numeric.$(OBJEXT): {$(VPATH)}missing.h
-numeric.$(OBJEXT): {$(VPATH)}numeric.c
-numeric.$(OBJEXT): {$(VPATH)}oniguruma.h
-numeric.$(OBJEXT): {$(VPATH)}st.h
-numeric.$(OBJEXT): {$(VPATH)}subst.h
-numeric.$(OBJEXT): {$(VPATH)}util.h
-object.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-object.$(OBJEXT): $(top_srcdir)/include/ruby.h
-object.$(OBJEXT): {$(VPATH)}config.h
-object.$(OBJEXT): {$(VPATH)}constant.h
-object.$(OBJEXT): {$(VPATH)}defines.h
-object.$(OBJEXT): {$(VPATH)}encoding.h
-object.$(OBJEXT): {$(VPATH)}id.h
-object.$(OBJEXT): {$(VPATH)}intern.h
-object.$(OBJEXT): {$(VPATH)}internal.h
-object.$(OBJEXT): {$(VPATH)}io.h
-object.$(OBJEXT): {$(VPATH)}missing.h
-object.$(OBJEXT): {$(VPATH)}object.c
-object.$(OBJEXT): {$(VPATH)}oniguruma.h
-object.$(OBJEXT): {$(VPATH)}probes.h
-object.$(OBJEXT): {$(VPATH)}st.h
-object.$(OBJEXT): {$(VPATH)}subst.h
-object.$(OBJEXT): {$(VPATH)}util.h
-object.$(OBJEXT): {$(VPATH)}vm_opts.h
-pack.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-pack.$(OBJEXT): $(top_srcdir)/include/ruby.h
-pack.$(OBJEXT): {$(VPATH)}config.h
-pack.$(OBJEXT): {$(VPATH)}defines.h
-pack.$(OBJEXT): {$(VPATH)}encoding.h
-pack.$(OBJEXT): {$(VPATH)}intern.h
-pack.$(OBJEXT): {$(VPATH)}internal.h
-pack.$(OBJEXT): {$(VPATH)}io.h
-pack.$(OBJEXT): {$(VPATH)}missing.h
-pack.$(OBJEXT): {$(VPATH)}oniguruma.h
-pack.$(OBJEXT): {$(VPATH)}pack.c
-pack.$(OBJEXT): {$(VPATH)}st.h
-pack.$(OBJEXT): {$(VPATH)}subst.h
-parse.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-parse.$(OBJEXT): $(top_srcdir)/include/ruby.h
-parse.$(OBJEXT): {$(VPATH)}config.h
-parse.$(OBJEXT): {$(VPATH)}defines.h
-parse.$(OBJEXT): {$(VPATH)}defs/keywords
-parse.$(OBJEXT): {$(VPATH)}encoding.h
-parse.$(OBJEXT): {$(VPATH)}id.h
-parse.$(OBJEXT): {$(VPATH)}intern.h
-parse.$(OBJEXT): {$(VPATH)}internal.h
-parse.$(OBJEXT): {$(VPATH)}io.h
-parse.$(OBJEXT): {$(VPATH)}lex.c
-parse.$(OBJEXT): {$(VPATH)}missing.h
-parse.$(OBJEXT): {$(VPATH)}node.h
-parse.$(OBJEXT): {$(VPATH)}oniguruma.h
-parse.$(OBJEXT): {$(VPATH)}parse.c
-parse.$(OBJEXT): {$(VPATH)}parse.h
-parse.$(OBJEXT): {$(VPATH)}parse.y
-parse.$(OBJEXT): {$(VPATH)}probes.h
-parse.$(OBJEXT): {$(VPATH)}regenc.h
-parse.$(OBJEXT): {$(VPATH)}regex.h
-parse.$(OBJEXT): {$(VPATH)}st.h
-parse.$(OBJEXT): {$(VPATH)}subst.h
-parse.$(OBJEXT): {$(VPATH)}symbol.h
-parse.$(OBJEXT): {$(VPATH)}util.h
-parse.$(OBJEXT): {$(VPATH)}vm_opts.h
-prelude.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-prelude.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-prelude.$(OBJEXT): $(CCAN_DIR)/list/list.h
-prelude.$(OBJEXT): $(CCAN_DIR)/str/str.h
-prelude.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-prelude.$(OBJEXT): $(top_srcdir)/include/ruby.h
-prelude.$(OBJEXT): {$(VPATH)}config.h
-prelude.$(OBJEXT): {$(VPATH)}defines.h
-prelude.$(OBJEXT): {$(VPATH)}encoding.h
-prelude.$(OBJEXT): {$(VPATH)}id.h
-prelude.$(OBJEXT): {$(VPATH)}intern.h
-prelude.$(OBJEXT): {$(VPATH)}internal.h
-prelude.$(OBJEXT): {$(VPATH)}io.h
-prelude.$(OBJEXT): {$(VPATH)}method.h
-prelude.$(OBJEXT): {$(VPATH)}missing.h
-prelude.$(OBJEXT): {$(VPATH)}node.h
-prelude.$(OBJEXT): {$(VPATH)}oniguruma.h
-prelude.$(OBJEXT): {$(VPATH)}prelude.c
-prelude.$(OBJEXT): {$(VPATH)}ruby_assert.h
-prelude.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-prelude.$(OBJEXT): {$(VPATH)}st.h
-prelude.$(OBJEXT): {$(VPATH)}subst.h
-prelude.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-prelude.$(OBJEXT): {$(VPATH)}thread_native.h
-prelude.$(OBJEXT): {$(VPATH)}vm_core.h
-prelude.$(OBJEXT): {$(VPATH)}vm_debug.h
-prelude.$(OBJEXT): {$(VPATH)}vm_opts.h
-proc.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-proc.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-proc.$(OBJEXT): $(CCAN_DIR)/list/list.h
-proc.$(OBJEXT): $(CCAN_DIR)/str/str.h
-proc.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-proc.$(OBJEXT): $(top_srcdir)/include/ruby.h
-proc.$(OBJEXT): {$(VPATH)}config.h
-proc.$(OBJEXT): {$(VPATH)}defines.h
-proc.$(OBJEXT): {$(VPATH)}encoding.h
-proc.$(OBJEXT): {$(VPATH)}eval_intern.h
-proc.$(OBJEXT): {$(VPATH)}gc.h
-proc.$(OBJEXT): {$(VPATH)}id.h
-proc.$(OBJEXT): {$(VPATH)}intern.h
-proc.$(OBJEXT): {$(VPATH)}internal.h
-proc.$(OBJEXT): {$(VPATH)}io.h
-proc.$(OBJEXT): {$(VPATH)}iseq.h
-proc.$(OBJEXT): {$(VPATH)}method.h
-proc.$(OBJEXT): {$(VPATH)}missing.h
-proc.$(OBJEXT): {$(VPATH)}node.h
-proc.$(OBJEXT): {$(VPATH)}oniguruma.h
-proc.$(OBJEXT): {$(VPATH)}proc.c
-proc.$(OBJEXT): {$(VPATH)}ruby_assert.h
-proc.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-proc.$(OBJEXT): {$(VPATH)}st.h
-proc.$(OBJEXT): {$(VPATH)}subst.h
-proc.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-proc.$(OBJEXT): {$(VPATH)}thread_native.h
-proc.$(OBJEXT): {$(VPATH)}vm_core.h
-proc.$(OBJEXT): {$(VPATH)}vm_debug.h
-proc.$(OBJEXT): {$(VPATH)}vm_opts.h
-process.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-process.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-process.$(OBJEXT): $(CCAN_DIR)/list/list.h
-process.$(OBJEXT): $(CCAN_DIR)/str/str.h
-process.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-process.$(OBJEXT): $(top_srcdir)/include/ruby.h
-process.$(OBJEXT): {$(VPATH)}config.h
-process.$(OBJEXT): {$(VPATH)}defines.h
-process.$(OBJEXT): {$(VPATH)}dln.h
-process.$(OBJEXT): {$(VPATH)}encoding.h
-process.$(OBJEXT): {$(VPATH)}id.h
-process.$(OBJEXT): {$(VPATH)}intern.h
-process.$(OBJEXT): {$(VPATH)}internal.h
-process.$(OBJEXT): {$(VPATH)}io.h
-process.$(OBJEXT): {$(VPATH)}method.h
-process.$(OBJEXT): {$(VPATH)}missing.h
-process.$(OBJEXT): {$(VPATH)}node.h
-process.$(OBJEXT): {$(VPATH)}oniguruma.h
-process.$(OBJEXT): {$(VPATH)}process.c
-process.$(OBJEXT): {$(VPATH)}ruby_assert.h
-process.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-process.$(OBJEXT): {$(VPATH)}st.h
-process.$(OBJEXT): {$(VPATH)}subst.h
-process.$(OBJEXT): {$(VPATH)}thread.h
-process.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-process.$(OBJEXT): {$(VPATH)}thread_native.h
-process.$(OBJEXT): {$(VPATH)}util.h
-process.$(OBJEXT): {$(VPATH)}vm_core.h
-process.$(OBJEXT): {$(VPATH)}vm_debug.h
-process.$(OBJEXT): {$(VPATH)}vm_opts.h
-random.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-random.$(OBJEXT): $(top_srcdir)/include/ruby.h
-random.$(OBJEXT): {$(VPATH)}config.h
-random.$(OBJEXT): {$(VPATH)}defines.h
-random.$(OBJEXT): {$(VPATH)}encoding.h
-random.$(OBJEXT): {$(VPATH)}intern.h
-random.$(OBJEXT): {$(VPATH)}internal.h
-random.$(OBJEXT): {$(VPATH)}io.h
-random.$(OBJEXT): {$(VPATH)}missing.h
-random.$(OBJEXT): {$(VPATH)}oniguruma.h
-random.$(OBJEXT): {$(VPATH)}random.c
-random.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-random.$(OBJEXT): {$(VPATH)}siphash.c
-random.$(OBJEXT): {$(VPATH)}siphash.h
-random.$(OBJEXT): {$(VPATH)}st.h
-random.$(OBJEXT): {$(VPATH)}subst.h
-range.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-range.$(OBJEXT): $(top_srcdir)/include/ruby.h
-range.$(OBJEXT): {$(VPATH)}config.h
-range.$(OBJEXT): {$(VPATH)}defines.h
-range.$(OBJEXT): {$(VPATH)}encoding.h
-range.$(OBJEXT): {$(VPATH)}id.h
-range.$(OBJEXT): {$(VPATH)}intern.h
-range.$(OBJEXT): {$(VPATH)}internal.h
-range.$(OBJEXT): {$(VPATH)}io.h
-range.$(OBJEXT): {$(VPATH)}missing.h
-range.$(OBJEXT): {$(VPATH)}oniguruma.h
-range.$(OBJEXT): {$(VPATH)}range.c
-range.$(OBJEXT): {$(VPATH)}st.h
-range.$(OBJEXT): {$(VPATH)}subst.h
-rational.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-rational.$(OBJEXT): $(top_srcdir)/include/ruby.h
-rational.$(OBJEXT): {$(VPATH)}config.h
-rational.$(OBJEXT): {$(VPATH)}defines.h
-rational.$(OBJEXT): {$(VPATH)}encoding.h
-rational.$(OBJEXT): {$(VPATH)}intern.h
-rational.$(OBJEXT): {$(VPATH)}internal.h
-rational.$(OBJEXT): {$(VPATH)}io.h
-rational.$(OBJEXT): {$(VPATH)}missing.h
-rational.$(OBJEXT): {$(VPATH)}oniguruma.h
-rational.$(OBJEXT): {$(VPATH)}rational.c
-rational.$(OBJEXT): {$(VPATH)}ruby_assert.h
-rational.$(OBJEXT): {$(VPATH)}st.h
-rational.$(OBJEXT): {$(VPATH)}subst.h
-re.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-re.$(OBJEXT): $(top_srcdir)/include/ruby.h
-re.$(OBJEXT): {$(VPATH)}config.h
-re.$(OBJEXT): {$(VPATH)}defines.h
-re.$(OBJEXT): {$(VPATH)}encindex.h
-re.$(OBJEXT): {$(VPATH)}encoding.h
-re.$(OBJEXT): {$(VPATH)}intern.h
-re.$(OBJEXT): {$(VPATH)}internal.h
-re.$(OBJEXT): {$(VPATH)}io.h
-re.$(OBJEXT): {$(VPATH)}missing.h
-re.$(OBJEXT): {$(VPATH)}oniguruma.h
-re.$(OBJEXT): {$(VPATH)}re.c
-re.$(OBJEXT): {$(VPATH)}re.h
-re.$(OBJEXT): {$(VPATH)}regenc.h
-re.$(OBJEXT): {$(VPATH)}regex.h
-re.$(OBJEXT): {$(VPATH)}regint.h
-re.$(OBJEXT): {$(VPATH)}st.h
-re.$(OBJEXT): {$(VPATH)}subst.h
-re.$(OBJEXT): {$(VPATH)}util.h
-regcomp.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-regcomp.$(OBJEXT): {$(VPATH)}config.h
-regcomp.$(OBJEXT): {$(VPATH)}defines.h
-regcomp.$(OBJEXT): {$(VPATH)}intern.h
-regcomp.$(OBJEXT): {$(VPATH)}missing.h
-regcomp.$(OBJEXT): {$(VPATH)}oniguruma.h
-regcomp.$(OBJEXT): {$(VPATH)}regcomp.c
-regcomp.$(OBJEXT): {$(VPATH)}regenc.h
-regcomp.$(OBJEXT): {$(VPATH)}regint.h
-regcomp.$(OBJEXT): {$(VPATH)}regparse.h
-regcomp.$(OBJEXT): {$(VPATH)}st.h
-regcomp.$(OBJEXT): {$(VPATH)}subst.h
-regenc.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-regenc.$(OBJEXT): {$(VPATH)}config.h
-regenc.$(OBJEXT): {$(VPATH)}defines.h
-regenc.$(OBJEXT): {$(VPATH)}intern.h
-regenc.$(OBJEXT): {$(VPATH)}missing.h
-regenc.$(OBJEXT): {$(VPATH)}oniguruma.h
-regenc.$(OBJEXT): {$(VPATH)}regenc.c
-regenc.$(OBJEXT): {$(VPATH)}regenc.h
-regenc.$(OBJEXT): {$(VPATH)}regint.h
-regenc.$(OBJEXT): {$(VPATH)}st.h
-regenc.$(OBJEXT): {$(VPATH)}subst.h
-regerror.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-regerror.$(OBJEXT): {$(VPATH)}config.h
-regerror.$(OBJEXT): {$(VPATH)}defines.h
-regerror.$(OBJEXT): {$(VPATH)}intern.h
-regerror.$(OBJEXT): {$(VPATH)}missing.h
-regerror.$(OBJEXT): {$(VPATH)}oniguruma.h
-regerror.$(OBJEXT): {$(VPATH)}regenc.h
-regerror.$(OBJEXT): {$(VPATH)}regerror.c
-regerror.$(OBJEXT): {$(VPATH)}regint.h
-regerror.$(OBJEXT): {$(VPATH)}st.h
-regerror.$(OBJEXT): {$(VPATH)}subst.h
-regexec.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-regexec.$(OBJEXT): {$(VPATH)}config.h
-regexec.$(OBJEXT): {$(VPATH)}defines.h
-regexec.$(OBJEXT): {$(VPATH)}intern.h
-regexec.$(OBJEXT): {$(VPATH)}missing.h
-regexec.$(OBJEXT): {$(VPATH)}oniguruma.h
-regexec.$(OBJEXT): {$(VPATH)}regenc.h
-regexec.$(OBJEXT): {$(VPATH)}regexec.c
-regexec.$(OBJEXT): {$(VPATH)}regint.h
-regexec.$(OBJEXT): {$(VPATH)}st.h
-regexec.$(OBJEXT): {$(VPATH)}subst.h
-regparse.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-regparse.$(OBJEXT): {$(VPATH)}config.h
-regparse.$(OBJEXT): {$(VPATH)}defines.h
-regparse.$(OBJEXT): {$(VPATH)}intern.h
-regparse.$(OBJEXT): {$(VPATH)}missing.h
-regparse.$(OBJEXT): {$(VPATH)}oniguruma.h
-regparse.$(OBJEXT): {$(VPATH)}regenc.h
-regparse.$(OBJEXT): {$(VPATH)}regint.h
-regparse.$(OBJEXT): {$(VPATH)}regparse.c
-regparse.$(OBJEXT): {$(VPATH)}regparse.h
-regparse.$(OBJEXT): {$(VPATH)}st.h
-regparse.$(OBJEXT): {$(VPATH)}subst.h
-regsyntax.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-regsyntax.$(OBJEXT): {$(VPATH)}config.h
-regsyntax.$(OBJEXT): {$(VPATH)}defines.h
-regsyntax.$(OBJEXT): {$(VPATH)}intern.h
-regsyntax.$(OBJEXT): {$(VPATH)}missing.h
-regsyntax.$(OBJEXT): {$(VPATH)}oniguruma.h
-regsyntax.$(OBJEXT): {$(VPATH)}regenc.h
-regsyntax.$(OBJEXT): {$(VPATH)}regint.h
-regsyntax.$(OBJEXT): {$(VPATH)}regsyntax.c
-regsyntax.$(OBJEXT): {$(VPATH)}st.h
-regsyntax.$(OBJEXT): {$(VPATH)}subst.h
-ruby.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-ruby.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-ruby.$(OBJEXT): $(CCAN_DIR)/list/list.h
-ruby.$(OBJEXT): $(CCAN_DIR)/str/str.h
-ruby.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-ruby.$(OBJEXT): $(top_srcdir)/include/ruby.h
-ruby.$(OBJEXT): {$(VPATH)}config.h
-ruby.$(OBJEXT): {$(VPATH)}defines.h
-ruby.$(OBJEXT): {$(VPATH)}dln.h
-ruby.$(OBJEXT): {$(VPATH)}encoding.h
-ruby.$(OBJEXT): {$(VPATH)}eval_intern.h
-ruby.$(OBJEXT): {$(VPATH)}id.h
-ruby.$(OBJEXT): {$(VPATH)}intern.h
-ruby.$(OBJEXT): {$(VPATH)}internal.h
-ruby.$(OBJEXT): {$(VPATH)}io.h
-ruby.$(OBJEXT): {$(VPATH)}method.h
-ruby.$(OBJEXT): {$(VPATH)}missing.h
-ruby.$(OBJEXT): {$(VPATH)}node.h
-ruby.$(OBJEXT): {$(VPATH)}oniguruma.h
-ruby.$(OBJEXT): {$(VPATH)}ruby.c
-ruby.$(OBJEXT): {$(VPATH)}ruby_assert.h
-ruby.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-ruby.$(OBJEXT): {$(VPATH)}st.h
-ruby.$(OBJEXT): {$(VPATH)}subst.h
-ruby.$(OBJEXT): {$(VPATH)}thread.h
-ruby.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-ruby.$(OBJEXT): {$(VPATH)}thread_native.h
-ruby.$(OBJEXT): {$(VPATH)}util.h
-ruby.$(OBJEXT): {$(VPATH)}vm_core.h
-ruby.$(OBJEXT): {$(VPATH)}vm_debug.h
-ruby.$(OBJEXT): {$(VPATH)}vm_opts.h
-safe.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-safe.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-safe.$(OBJEXT): $(CCAN_DIR)/list/list.h
-safe.$(OBJEXT): $(CCAN_DIR)/str/str.h
-safe.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-safe.$(OBJEXT): $(top_srcdir)/include/ruby.h
-safe.$(OBJEXT): {$(VPATH)}config.h
-safe.$(OBJEXT): {$(VPATH)}defines.h
-safe.$(OBJEXT): {$(VPATH)}encoding.h
-safe.$(OBJEXT): {$(VPATH)}id.h
-safe.$(OBJEXT): {$(VPATH)}intern.h
-safe.$(OBJEXT): {$(VPATH)}internal.h
-safe.$(OBJEXT): {$(VPATH)}io.h
-safe.$(OBJEXT): {$(VPATH)}method.h
-safe.$(OBJEXT): {$(VPATH)}missing.h
-safe.$(OBJEXT): {$(VPATH)}node.h
-safe.$(OBJEXT): {$(VPATH)}oniguruma.h
-safe.$(OBJEXT): {$(VPATH)}ruby_assert.h
-safe.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-safe.$(OBJEXT): {$(VPATH)}safe.c
-safe.$(OBJEXT): {$(VPATH)}st.h
-safe.$(OBJEXT): {$(VPATH)}subst.h
-safe.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-safe.$(OBJEXT): {$(VPATH)}thread_native.h
-safe.$(OBJEXT): {$(VPATH)}vm_core.h
-safe.$(OBJEXT): {$(VPATH)}vm_debug.h
-safe.$(OBJEXT): {$(VPATH)}vm_opts.h
-setproctitle.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-setproctitle.$(OBJEXT): $(top_srcdir)/include/ruby.h
-setproctitle.$(OBJEXT): {$(VPATH)}config.h
-setproctitle.$(OBJEXT): {$(VPATH)}defines.h
-setproctitle.$(OBJEXT): {$(VPATH)}intern.h
-setproctitle.$(OBJEXT): {$(VPATH)}missing.h
-setproctitle.$(OBJEXT): {$(VPATH)}setproctitle.c
-setproctitle.$(OBJEXT): {$(VPATH)}st.h
-setproctitle.$(OBJEXT): {$(VPATH)}subst.h
-setproctitle.$(OBJEXT): {$(VPATH)}util.h
-signal.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-signal.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-signal.$(OBJEXT): $(CCAN_DIR)/list/list.h
-signal.$(OBJEXT): $(CCAN_DIR)/str/str.h
-signal.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-signal.$(OBJEXT): $(top_srcdir)/include/ruby.h
-signal.$(OBJEXT): {$(VPATH)}config.h
-signal.$(OBJEXT): {$(VPATH)}defines.h
-signal.$(OBJEXT): {$(VPATH)}encoding.h
-signal.$(OBJEXT): {$(VPATH)}eval_intern.h
-signal.$(OBJEXT): {$(VPATH)}id.h
-signal.$(OBJEXT): {$(VPATH)}intern.h
-signal.$(OBJEXT): {$(VPATH)}internal.h
-signal.$(OBJEXT): {$(VPATH)}io.h
-signal.$(OBJEXT): {$(VPATH)}method.h
-signal.$(OBJEXT): {$(VPATH)}missing.h
-signal.$(OBJEXT): {$(VPATH)}node.h
-signal.$(OBJEXT): {$(VPATH)}oniguruma.h
-signal.$(OBJEXT): {$(VPATH)}ruby_assert.h
-signal.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-signal.$(OBJEXT): {$(VPATH)}signal.c
-signal.$(OBJEXT): {$(VPATH)}st.h
-signal.$(OBJEXT): {$(VPATH)}subst.h
-signal.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-signal.$(OBJEXT): {$(VPATH)}thread_native.h
-signal.$(OBJEXT): {$(VPATH)}vm_core.h
-signal.$(OBJEXT): {$(VPATH)}vm_debug.h
-signal.$(OBJEXT): {$(VPATH)}vm_opts.h
-sprintf.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-sprintf.$(OBJEXT): $(top_srcdir)/include/ruby.h
-sprintf.$(OBJEXT): {$(VPATH)}config.h
-sprintf.$(OBJEXT): {$(VPATH)}defines.h
-sprintf.$(OBJEXT): {$(VPATH)}encoding.h
-sprintf.$(OBJEXT): {$(VPATH)}id.h
-sprintf.$(OBJEXT): {$(VPATH)}intern.h
-sprintf.$(OBJEXT): {$(VPATH)}internal.h
-sprintf.$(OBJEXT): {$(VPATH)}io.h
-sprintf.$(OBJEXT): {$(VPATH)}missing.h
-sprintf.$(OBJEXT): {$(VPATH)}oniguruma.h
-sprintf.$(OBJEXT): {$(VPATH)}re.h
-sprintf.$(OBJEXT): {$(VPATH)}regex.h
-sprintf.$(OBJEXT): {$(VPATH)}sprintf.c
-sprintf.$(OBJEXT): {$(VPATH)}st.h
-sprintf.$(OBJEXT): {$(VPATH)}subst.h
-sprintf.$(OBJEXT): {$(VPATH)}vsnprintf.c
-st.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-st.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-st.$(OBJEXT): $(CCAN_DIR)/list/list.h
-st.$(OBJEXT): $(CCAN_DIR)/str/str.h
-st.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-st.$(OBJEXT): $(top_srcdir)/include/ruby.h
-st.$(OBJEXT): {$(VPATH)}config.h
-st.$(OBJEXT): {$(VPATH)}defines.h
-st.$(OBJEXT): {$(VPATH)}encoding.h
-st.$(OBJEXT): {$(VPATH)}intern.h
-st.$(OBJEXT): {$(VPATH)}internal.h
-st.$(OBJEXT): {$(VPATH)}io.h
-st.$(OBJEXT): {$(VPATH)}missing.h
-st.$(OBJEXT): {$(VPATH)}oniguruma.h
-st.$(OBJEXT): {$(VPATH)}st.c
-st.$(OBJEXT): {$(VPATH)}st.h
-st.$(OBJEXT): {$(VPATH)}subst.h
-strftime.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-strftime.$(OBJEXT): {$(VPATH)}config.h
-strftime.$(OBJEXT): {$(VPATH)}defines.h
-strftime.$(OBJEXT): {$(VPATH)}encoding.h
-strftime.$(OBJEXT): {$(VPATH)}intern.h
-strftime.$(OBJEXT): {$(VPATH)}missing.h
-strftime.$(OBJEXT): {$(VPATH)}oniguruma.h
-strftime.$(OBJEXT): {$(VPATH)}st.h
-strftime.$(OBJEXT): {$(VPATH)}strftime.c
-strftime.$(OBJEXT): {$(VPATH)}subst.h
-strftime.$(OBJEXT): {$(VPATH)}timev.h
-string.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-string.$(OBJEXT): $(top_srcdir)/include/ruby.h
-string.$(OBJEXT): {$(VPATH)}config.h
-string.$(OBJEXT): {$(VPATH)}defines.h
-string.$(OBJEXT): {$(VPATH)}encindex.h
-string.$(OBJEXT): {$(VPATH)}encoding.h
-string.$(OBJEXT): {$(VPATH)}gc.h
-string.$(OBJEXT): {$(VPATH)}id.h
-string.$(OBJEXT): {$(VPATH)}intern.h
-string.$(OBJEXT): {$(VPATH)}internal.h
-string.$(OBJEXT): {$(VPATH)}io.h
-string.$(OBJEXT): {$(VPATH)}missing.h
-string.$(OBJEXT): {$(VPATH)}oniguruma.h
-string.$(OBJEXT): {$(VPATH)}probes.h
-string.$(OBJEXT): {$(VPATH)}re.h
-string.$(OBJEXT): {$(VPATH)}regex.h
-string.$(OBJEXT): {$(VPATH)}ruby_assert.h
-string.$(OBJEXT): {$(VPATH)}st.h
-string.$(OBJEXT): {$(VPATH)}string.c
-string.$(OBJEXT): {$(VPATH)}subst.h
-string.$(OBJEXT): {$(VPATH)}vm_opts.h
-strlcat.$(OBJEXT): {$(VPATH)}config.h
-strlcat.$(OBJEXT): {$(VPATH)}missing.h
-strlcat.$(OBJEXT): {$(VPATH)}strlcat.c
-strlcpy.$(OBJEXT): {$(VPATH)}config.h
-strlcpy.$(OBJEXT): {$(VPATH)}missing.h
-strlcpy.$(OBJEXT): {$(VPATH)}strlcpy.c
-struct.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-struct.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-struct.$(OBJEXT): $(CCAN_DIR)/list/list.h
-struct.$(OBJEXT): $(CCAN_DIR)/str/str.h
-struct.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-struct.$(OBJEXT): $(top_srcdir)/include/ruby.h
-struct.$(OBJEXT): {$(VPATH)}config.h
-struct.$(OBJEXT): {$(VPATH)}defines.h
-struct.$(OBJEXT): {$(VPATH)}encoding.h
-struct.$(OBJEXT): {$(VPATH)}id.h
-struct.$(OBJEXT): {$(VPATH)}intern.h
-struct.$(OBJEXT): {$(VPATH)}internal.h
-struct.$(OBJEXT): {$(VPATH)}io.h
-struct.$(OBJEXT): {$(VPATH)}method.h
-struct.$(OBJEXT): {$(VPATH)}missing.h
-struct.$(OBJEXT): {$(VPATH)}node.h
-struct.$(OBJEXT): {$(VPATH)}oniguruma.h
-struct.$(OBJEXT): {$(VPATH)}ruby_assert.h
-struct.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-struct.$(OBJEXT): {$(VPATH)}st.h
-struct.$(OBJEXT): {$(VPATH)}struct.c
-struct.$(OBJEXT): {$(VPATH)}subst.h
-struct.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-struct.$(OBJEXT): {$(VPATH)}thread_native.h
-struct.$(OBJEXT): {$(VPATH)}vm_core.h
-struct.$(OBJEXT): {$(VPATH)}vm_debug.h
-struct.$(OBJEXT): {$(VPATH)}vm_opts.h
-symbol.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-symbol.$(OBJEXT): $(top_srcdir)/include/ruby.h
-symbol.$(OBJEXT): {$(VPATH)}config.h
-symbol.$(OBJEXT): {$(VPATH)}defines.h
-symbol.$(OBJEXT): {$(VPATH)}encoding.h
-symbol.$(OBJEXT): {$(VPATH)}gc.h
-symbol.$(OBJEXT): {$(VPATH)}id.c
-symbol.$(OBJEXT): {$(VPATH)}id.h
-symbol.$(OBJEXT): {$(VPATH)}id_table.c
-symbol.$(OBJEXT): {$(VPATH)}id_table.h
-symbol.$(OBJEXT): {$(VPATH)}intern.h
-symbol.$(OBJEXT): {$(VPATH)}internal.h
-symbol.$(OBJEXT): {$(VPATH)}io.h
-symbol.$(OBJEXT): {$(VPATH)}missing.h
-symbol.$(OBJEXT): {$(VPATH)}oniguruma.h
-symbol.$(OBJEXT): {$(VPATH)}probes.h
-symbol.$(OBJEXT): {$(VPATH)}ruby_assert.h
-symbol.$(OBJEXT): {$(VPATH)}st.h
-symbol.$(OBJEXT): {$(VPATH)}subst.h
-symbol.$(OBJEXT): {$(VPATH)}symbol.c
-symbol.$(OBJEXT): {$(VPATH)}symbol.h
-symbol.$(OBJEXT): {$(VPATH)}vm_opts.h
-thread.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-thread.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-thread.$(OBJEXT): $(CCAN_DIR)/list/list.h
-thread.$(OBJEXT): $(CCAN_DIR)/str/str.h
-thread.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-thread.$(OBJEXT): $(top_srcdir)/include/ruby.h
-thread.$(OBJEXT): {$(VPATH)}config.h
-thread.$(OBJEXT): {$(VPATH)}defines.h
-thread.$(OBJEXT): {$(VPATH)}encoding.h
-thread.$(OBJEXT): {$(VPATH)}eval_intern.h
-thread.$(OBJEXT): {$(VPATH)}gc.h
-thread.$(OBJEXT): {$(VPATH)}id.h
-thread.$(OBJEXT): {$(VPATH)}intern.h
-thread.$(OBJEXT): {$(VPATH)}internal.h
-thread.$(OBJEXT): {$(VPATH)}io.h
-thread.$(OBJEXT): {$(VPATH)}method.h
-thread.$(OBJEXT): {$(VPATH)}missing.h
-thread.$(OBJEXT): {$(VPATH)}node.h
-thread.$(OBJEXT): {$(VPATH)}oniguruma.h
-thread.$(OBJEXT): {$(VPATH)}ruby_assert.h
-thread.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-thread.$(OBJEXT): {$(VPATH)}st.h
-thread.$(OBJEXT): {$(VPATH)}subst.h
-thread.$(OBJEXT): {$(VPATH)}thread.c
-thread.$(OBJEXT): {$(VPATH)}thread.h
-thread.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).c
-thread.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-thread.$(OBJEXT): {$(VPATH)}thread_native.h
-thread.$(OBJEXT): {$(VPATH)}thread_sync.c
-thread.$(OBJEXT): {$(VPATH)}timev.h
-thread.$(OBJEXT): {$(VPATH)}vm_core.h
-thread.$(OBJEXT): {$(VPATH)}vm_debug.h
-thread.$(OBJEXT): {$(VPATH)}vm_opts.h
-time.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-time.$(OBJEXT): $(top_srcdir)/include/ruby.h
-time.$(OBJEXT): {$(VPATH)}config.h
-time.$(OBJEXT): {$(VPATH)}defines.h
-time.$(OBJEXT): {$(VPATH)}encoding.h
-time.$(OBJEXT): {$(VPATH)}intern.h
-time.$(OBJEXT): {$(VPATH)}internal.h
-time.$(OBJEXT): {$(VPATH)}io.h
-time.$(OBJEXT): {$(VPATH)}missing.h
-time.$(OBJEXT): {$(VPATH)}oniguruma.h
-time.$(OBJEXT): {$(VPATH)}st.h
-time.$(OBJEXT): {$(VPATH)}subst.h
-time.$(OBJEXT): {$(VPATH)}time.c
-time.$(OBJEXT): {$(VPATH)}timev.h
-transcode.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-transcode.$(OBJEXT): $(top_srcdir)/include/ruby.h
-transcode.$(OBJEXT): {$(VPATH)}config.h
-transcode.$(OBJEXT): {$(VPATH)}defines.h
-transcode.$(OBJEXT): {$(VPATH)}encoding.h
-transcode.$(OBJEXT): {$(VPATH)}intern.h
-transcode.$(OBJEXT): {$(VPATH)}internal.h
-transcode.$(OBJEXT): {$(VPATH)}io.h
-transcode.$(OBJEXT): {$(VPATH)}missing.h
-transcode.$(OBJEXT): {$(VPATH)}oniguruma.h
-transcode.$(OBJEXT): {$(VPATH)}st.h
-transcode.$(OBJEXT): {$(VPATH)}subst.h
-transcode.$(OBJEXT): {$(VPATH)}transcode.c
-transcode.$(OBJEXT): {$(VPATH)}transcode_data.h
-util.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-util.$(OBJEXT): $(top_srcdir)/include/ruby.h
-util.$(OBJEXT): {$(VPATH)}config.h
-util.$(OBJEXT): {$(VPATH)}defines.h
-util.$(OBJEXT): {$(VPATH)}encoding.h
-util.$(OBJEXT): {$(VPATH)}intern.h
-util.$(OBJEXT): {$(VPATH)}internal.h
-util.$(OBJEXT): {$(VPATH)}io.h
-util.$(OBJEXT): {$(VPATH)}missing.h
-util.$(OBJEXT): {$(VPATH)}oniguruma.h
-util.$(OBJEXT): {$(VPATH)}st.h
-util.$(OBJEXT): {$(VPATH)}subst.h
-util.$(OBJEXT): {$(VPATH)}util.c
-util.$(OBJEXT): {$(VPATH)}util.h
-variable.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-variable.$(OBJEXT): $(top_srcdir)/include/ruby.h
-variable.$(OBJEXT): {$(VPATH)}config.h
-variable.$(OBJEXT): {$(VPATH)}constant.h
-variable.$(OBJEXT): {$(VPATH)}defines.h
-variable.$(OBJEXT): {$(VPATH)}encoding.h
-variable.$(OBJEXT): {$(VPATH)}id.h
-variable.$(OBJEXT): {$(VPATH)}intern.h
-variable.$(OBJEXT): {$(VPATH)}internal.h
-variable.$(OBJEXT): {$(VPATH)}io.h
-variable.$(OBJEXT): {$(VPATH)}missing.h
-variable.$(OBJEXT): {$(VPATH)}oniguruma.h
-variable.$(OBJEXT): {$(VPATH)}st.h
-variable.$(OBJEXT): {$(VPATH)}subst.h
-variable.$(OBJEXT): {$(VPATH)}util.h
-variable.$(OBJEXT): {$(VPATH)}variable.c
-version.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-version.$(OBJEXT): $(hdrdir)/ruby/version.h
-version.$(OBJEXT): $(top_srcdir)/revision.h
-version.$(OBJEXT): $(top_srcdir)/version.h
-version.$(OBJEXT): {$(VPATH)}config.h
-version.$(OBJEXT): {$(VPATH)}defines.h
-version.$(OBJEXT): {$(VPATH)}intern.h
-version.$(OBJEXT): {$(VPATH)}missing.h
-version.$(OBJEXT): {$(VPATH)}st.h
-version.$(OBJEXT): {$(VPATH)}subst.h
-version.$(OBJEXT): {$(VPATH)}version.c
-vm.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-vm.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-vm.$(OBJEXT): $(CCAN_DIR)/list/list.h
-vm.$(OBJEXT): $(CCAN_DIR)/str/str.h
-vm.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-vm.$(OBJEXT): $(top_srcdir)/include/ruby.h
-vm.$(OBJEXT): {$(VPATH)}config.h
-vm.$(OBJEXT): {$(VPATH)}constant.h
-vm.$(OBJEXT): {$(VPATH)}defines.h
-vm.$(OBJEXT): {$(VPATH)}encoding.h
-vm.$(OBJEXT): {$(VPATH)}eval_intern.h
-vm.$(OBJEXT): {$(VPATH)}gc.h
-vm.$(OBJEXT): {$(VPATH)}id.h
-vm.$(OBJEXT): {$(VPATH)}id_table.h
-vm.$(OBJEXT): {$(VPATH)}insns.def
-vm.$(OBJEXT): {$(VPATH)}insns.inc
-vm.$(OBJEXT): {$(VPATH)}intern.h
-vm.$(OBJEXT): {$(VPATH)}internal.h
-vm.$(OBJEXT): {$(VPATH)}io.h
-vm.$(OBJEXT): {$(VPATH)}iseq.h
-vm.$(OBJEXT): {$(VPATH)}method.h
-vm.$(OBJEXT): {$(VPATH)}missing.h
-vm.$(OBJEXT): {$(VPATH)}node.h
-vm.$(OBJEXT): {$(VPATH)}oniguruma.h
-vm.$(OBJEXT): {$(VPATH)}probes.h
-vm.$(OBJEXT): {$(VPATH)}probes_helper.h
-vm.$(OBJEXT): {$(VPATH)}ruby_assert.h
-vm.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-vm.$(OBJEXT): {$(VPATH)}st.h
-vm.$(OBJEXT): {$(VPATH)}subst.h
-vm.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-vm.$(OBJEXT): {$(VPATH)}thread_native.h
-vm.$(OBJEXT): {$(VPATH)}vm.c
-vm.$(OBJEXT): {$(VPATH)}vm.h
-vm.$(OBJEXT): {$(VPATH)}vm.inc
-vm.$(OBJEXT): {$(VPATH)}vm_args.c
-vm.$(OBJEXT): {$(VPATH)}vm_call_iseq_optimized.inc
-vm.$(OBJEXT): {$(VPATH)}vm_core.h
-vm.$(OBJEXT): {$(VPATH)}vm_debug.h
-vm.$(OBJEXT): {$(VPATH)}vm_eval.c
-vm.$(OBJEXT): {$(VPATH)}vm_exec.c
-vm.$(OBJEXT): {$(VPATH)}vm_exec.h
-vm.$(OBJEXT): {$(VPATH)}vm_insnhelper.c
-vm.$(OBJEXT): {$(VPATH)}vm_insnhelper.h
-vm.$(OBJEXT): {$(VPATH)}vm_method.c
-vm.$(OBJEXT): {$(VPATH)}vm_opts.h
-vm.$(OBJEXT): {$(VPATH)}vmtc.inc
-vm_backtrace.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-vm_backtrace.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-vm_backtrace.$(OBJEXT): $(CCAN_DIR)/list/list.h
-vm_backtrace.$(OBJEXT): $(CCAN_DIR)/str/str.h
-vm_backtrace.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-vm_backtrace.$(OBJEXT): $(top_srcdir)/include/ruby.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}config.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}debug.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}defines.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}encoding.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}eval_intern.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}id.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}intern.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}internal.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}io.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}iseq.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}method.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}missing.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}node.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}oniguruma.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}ruby_assert.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}st.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}subst.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-vm_backtrace.$(OBJEXT): {$(VPATH)}thread_native.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}vm_backtrace.c
-vm_backtrace.$(OBJEXT): {$(VPATH)}vm_core.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}vm_debug.h
-vm_backtrace.$(OBJEXT): {$(VPATH)}vm_opts.h
-vm_call.$(OBJEXT): $(top_srcdir)/include/ruby.h
-vm_call.$(OBJEXT): {$(VPATH)}vm_call_iseq_optimized.inc
-vm_call.$(OBJEXT): {$(VPATH)}vm_core.h
-vm_dump.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-vm_dump.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-vm_dump.$(OBJEXT): $(CCAN_DIR)/list/list.h
-vm_dump.$(OBJEXT): $(CCAN_DIR)/str/str.h
-vm_dump.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-vm_dump.$(OBJEXT): $(top_srcdir)/include/ruby.h
-vm_dump.$(OBJEXT): {$(VPATH)}addr2line.h
-vm_dump.$(OBJEXT): {$(VPATH)}config.h
-vm_dump.$(OBJEXT): {$(VPATH)}defines.h
-vm_dump.$(OBJEXT): {$(VPATH)}encoding.h
-vm_dump.$(OBJEXT): {$(VPATH)}id.h
-vm_dump.$(OBJEXT): {$(VPATH)}intern.h
-vm_dump.$(OBJEXT): {$(VPATH)}internal.h
-vm_dump.$(OBJEXT): {$(VPATH)}io.h
-vm_dump.$(OBJEXT): {$(VPATH)}iseq.h
-vm_dump.$(OBJEXT): {$(VPATH)}method.h
-vm_dump.$(OBJEXT): {$(VPATH)}missing.h
-vm_dump.$(OBJEXT): {$(VPATH)}node.h
-vm_dump.$(OBJEXT): {$(VPATH)}oniguruma.h
-vm_dump.$(OBJEXT): {$(VPATH)}ruby_assert.h
-vm_dump.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-vm_dump.$(OBJEXT): {$(VPATH)}st.h
-vm_dump.$(OBJEXT): {$(VPATH)}subst.h
-vm_dump.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-vm_dump.$(OBJEXT): {$(VPATH)}thread_native.h
-vm_dump.$(OBJEXT): {$(VPATH)}vm_core.h
-vm_dump.$(OBJEXT): {$(VPATH)}vm_debug.h
-vm_dump.$(OBJEXT): {$(VPATH)}vm_dump.c
-vm_dump.$(OBJEXT): {$(VPATH)}vm_opts.h
-vm_trace.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-vm_trace.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-vm_trace.$(OBJEXT): $(CCAN_DIR)/list/list.h
-vm_trace.$(OBJEXT): $(CCAN_DIR)/str/str.h
-vm_trace.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-vm_trace.$(OBJEXT): $(top_srcdir)/include/ruby.h
-vm_trace.$(OBJEXT): {$(VPATH)}config.h
-vm_trace.$(OBJEXT): {$(VPATH)}debug.h
-vm_trace.$(OBJEXT): {$(VPATH)}defines.h
-vm_trace.$(OBJEXT): {$(VPATH)}encoding.h
-vm_trace.$(OBJEXT): {$(VPATH)}eval_intern.h
-vm_trace.$(OBJEXT): {$(VPATH)}id.h
-vm_trace.$(OBJEXT): {$(VPATH)}intern.h
-vm_trace.$(OBJEXT): {$(VPATH)}internal.h
-vm_trace.$(OBJEXT): {$(VPATH)}io.h
-vm_trace.$(OBJEXT): {$(VPATH)}method.h
-vm_trace.$(OBJEXT): {$(VPATH)}missing.h
-vm_trace.$(OBJEXT): {$(VPATH)}node.h
-vm_trace.$(OBJEXT): {$(VPATH)}oniguruma.h
-vm_trace.$(OBJEXT): {$(VPATH)}ruby_assert.h
-vm_trace.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-vm_trace.$(OBJEXT): {$(VPATH)}st.h
-vm_trace.$(OBJEXT): {$(VPATH)}subst.h
-vm_trace.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-vm_trace.$(OBJEXT): {$(VPATH)}thread_native.h
-vm_trace.$(OBJEXT): {$(VPATH)}vm_core.h
-vm_trace.$(OBJEXT): {$(VPATH)}vm_debug.h
-vm_trace.$(OBJEXT): {$(VPATH)}vm_opts.h
-vm_trace.$(OBJEXT): {$(VPATH)}vm_trace.c
-# AUTOGENERATED DEPENDENCIES END
+$(CROSS_COMPILING:yes=)builtin.$(OBJEXT): {$(VPATH)}mini_builtin.c
+$(CROSS_COMPILING:yes=)builtin.$(OBJEXT): {$(VPATH)}miniprelude.c
+
+!include $(srcdir)/prism/srcs.mk
+!include $(srcdir)/depend
diff --git a/compar.c b/compar.c
index b040641651..142cb12a0c 100644
--- a/compar.c
+++ b/compar.c
@@ -9,11 +9,20 @@
**********************************************************************/
+#include "id.h"
+#include "internal.h"
+#include "internal/compar.h"
+#include "internal/error.h"
+#include "internal/vm.h"
#include "ruby/ruby.h"
VALUE rb_mComparable;
-static ID cmp;
+static VALUE
+rb_cmp(VALUE x, VALUE y)
+{
+ return rb_funcallv(x, idCmp, 1, &y);
+}
void
rb_cmperr(VALUE x, VALUE y)
@@ -21,32 +30,32 @@ rb_cmperr(VALUE x, VALUE y)
VALUE classname;
if (SPECIAL_CONST_P(y) || BUILTIN_TYPE(y) == T_FLOAT) {
- classname = rb_inspect(y);
+ classname = rb_inspect(y);
}
else {
- classname = rb_obj_class(y);
+ classname = rb_obj_class(y);
}
rb_raise(rb_eArgError, "comparison of %"PRIsVALUE" with %"PRIsVALUE" failed",
- rb_obj_class(x), classname);
+ rb_obj_class(x), classname);
}
static VALUE
invcmp_recursive(VALUE x, VALUE y, int recursive)
{
if (recursive) return Qnil;
- return rb_check_funcall(y, cmp, 1, &x);
+ return rb_cmp(y, x);
}
VALUE
rb_invcmp(VALUE x, VALUE y)
{
VALUE invcmp = rb_exec_recursive(invcmp_recursive, x, y);
- if (invcmp == Qundef || NIL_P(invcmp)) {
- return Qnil;
+ if (NIL_OR_UNDEF_P(invcmp)) {
+ return Qnil;
}
else {
- int result = -rb_cmpint(invcmp, x, y);
- return INT2FIX(result);
+ int result = -rb_cmpint(invcmp, x, y);
+ return INT2FIX(result);
}
}
@@ -54,7 +63,7 @@ static VALUE
cmp_eq_recursive(VALUE arg1, VALUE arg2, int recursive)
{
if (recursive) return Qnil;
- return rb_funcallv(arg1, cmp, 1, &arg2);
+ return rb_cmp(arg1, arg2);
}
/*
@@ -75,85 +84,95 @@ cmp_equal(VALUE x, VALUE y)
c = rb_exec_recursive_paired_outer(cmp_eq_recursive, x, y, y);
if (NIL_P(c)) return Qfalse;
- if (rb_cmpint(c, x, y) == 0) return Qtrue;
- return Qfalse;
+ return RBOOL(rb_cmpint(c, x, y) == 0);
+}
+
+static int
+cmpint(VALUE x, VALUE y)
+{
+ return rb_cmpint(rb_cmp(x, y), x, y);
}
/*
* call-seq:
- * obj > other -> true or false
+ * self > other -> true or false
*
- * Compares two objects based on the receiver's <code><=></code>
- * method, returning true if it returns 1.
+ * Returns whether +self+ is "greater than" +other+;
+ * equivalent to <tt>(self <=> other) > 0</tt>:
+ *
+ * 'foo' > 'foo' # => false
+ * 'food' > 'foo' # => true
*/
static VALUE
cmp_gt(VALUE x, VALUE y)
{
- VALUE c = rb_funcall(x, cmp, 1, y);
-
- if (rb_cmpint(c, x, y) > 0) return Qtrue;
- return Qfalse;
+ return RBOOL(cmpint(x, y) > 0);
}
/*
* call-seq:
- * obj >= other -> true or false
+ * self >= other -> true or false
+ *
+ * Returns whether +self+ is "greater than or equal to" +other+;
+ * equivalent to <tt>(self <=> other) >= 0</tt>:
+ *
+ * 'food' >= 'foo' # => true
+ * 'foo' >= 'foo' # => true
+ * 'foo' >= 'food' # => false
*
- * Compares two objects based on the receiver's <code><=></code>
- * method, returning true if it returns 0 or 1.
*/
static VALUE
cmp_ge(VALUE x, VALUE y)
{
- VALUE c = rb_funcall(x, cmp, 1, y);
-
- if (rb_cmpint(c, x, y) >= 0) return Qtrue;
- return Qfalse;
+ return RBOOL(cmpint(x, y) >= 0);
}
/*
* call-seq:
- * obj < other -> true or false
+ * self < other -> true or false
+ *
+ * Returns whether +self+ is "less than" +other+;
+ * equivalent to <tt>(self <=> other) < 0</tt>:
+ *
+ * 'foo' < 'foo' # => false
+ * 'foo' < 'food' # => true
*
- * Compares two objects based on the receiver's <code><=></code>
- * method, returning true if it returns -1.
*/
static VALUE
cmp_lt(VALUE x, VALUE y)
{
- VALUE c = rb_funcall(x, cmp, 1, y);
-
- if (rb_cmpint(c, x, y) < 0) return Qtrue;
- return Qfalse;
+ return RBOOL(cmpint(x, y) < 0);
}
/*
* call-seq:
- * obj <= other -> true or false
+ * self <= other -> true or false
+ *
+ * Returns whether +self+ is "less than or equal to" +other+;
+ * equivalent to <tt>(self <=> other) <= 0</tt>:
+ *
+ * 'foo' <= 'foo' # => true
+ * 'foo' <= 'food' # => true
+ * 'food' <= 'foo' # => false
*
- * Compares two objects based on the receiver's <code><=></code>
- * method, returning true if it returns -1 or 0.
*/
static VALUE
cmp_le(VALUE x, VALUE y)
{
- VALUE c = rb_funcall(x, cmp, 1, y);
-
- if (rb_cmpint(c, x, y) <= 0) return Qtrue;
- return Qfalse;
+ return RBOOL(cmpint(x, y) <= 0);
}
/*
* call-seq:
* obj.between?(min, max) -> true or false
*
- * Returns <code>false</code> if <i>obj</i> <code><=></code>
- * <i>min</i> is less than zero or if <i>anObject</i> <code><=></code>
- * <i>max</i> is greater than zero, <code>true</code> otherwise.
+ * Returns <code>false</code> if _obj_ <code><=></code> _min_ is less
+ * than zero or if _obj_ <code><=></code> _max_ is greater than zero,
+ * <code>true</code> otherwise.
*
* 3.between?(1, 5) #=> true
* 6.between?(1, 5) #=> false
@@ -165,56 +184,151 @@ cmp_le(VALUE x, VALUE y)
static VALUE
cmp_between(VALUE x, VALUE min, VALUE max)
{
- if (RTEST(cmp_lt(x, min))) return Qfalse;
- if (RTEST(cmp_gt(x, max))) return Qfalse;
- return Qtrue;
+ return RBOOL((cmpint(x, min) >= 0 && cmpint(x, max) <= 0));
+}
+
+/*
+ * call-seq:
+ * obj.clamp(min, max) -> obj
+ * obj.clamp(range) -> obj
+ *
+ * In <code>(min, max)</code> form, returns _min_ if _obj_
+ * <code><=></code> _min_ is less than zero, _max_ if _obj_
+ * <code><=></code> _max_ is greater than zero, and _obj_
+ * otherwise.
+ *
+ * 12.clamp(0, 100) #=> 12
+ * 523.clamp(0, 100) #=> 100
+ * -3.123.clamp(0, 100) #=> 0
+ *
+ * 'd'.clamp('a', 'f') #=> 'd'
+ * 'z'.clamp('a', 'f') #=> 'f'
+ *
+ * If _min_ is +nil+, it is considered smaller than _obj_,
+ * and if _max_ is +nil+, it is considered greater than _obj_.
+ *
+ * -20.clamp(0, nil) #=> 0
+ * 523.clamp(nil, 100) #=> 100
+ *
+ * In <code>(range)</code> form, returns _range.begin_ if _obj_
+ * <code><=></code> _range.begin_ is less than zero, _range.end_
+ * if _obj_ <code><=></code> _range.end_ is greater than zero, and
+ * _obj_ otherwise.
+ *
+ * 12.clamp(0..100) #=> 12
+ * 523.clamp(0..100) #=> 100
+ * -3.123.clamp(0..100) #=> 0
+ *
+ * 'd'.clamp('a'..'f') #=> 'd'
+ * 'z'.clamp('a'..'f') #=> 'f'
+ *
+ * If _range.begin_ is +nil+, it is considered smaller than _obj_,
+ * and if _range.end_ is +nil+, it is considered greater than
+ * _obj_.
+ *
+ * -20.clamp(0..) #=> 0
+ * 523.clamp(..100) #=> 100
+ *
+ * When _range.end_ is excluded and not +nil+, an exception is
+ * raised.
+ *
+ * 100.clamp(0...100) # ArgumentError
+ */
+
+static VALUE
+cmp_clamp(int argc, VALUE *argv, VALUE x)
+{
+ VALUE min, max;
+ int c, excl = 0;
+
+ if (rb_scan_args(argc, argv, "11", &min, &max) == 1) {
+ VALUE range = min;
+ if (!rb_range_values(range, &min, &max, &excl)) {
+ rb_raise(rb_eTypeError, "wrong argument type %s (expected Range)",
+ rb_builtin_class_name(range));
+ }
+ if (!NIL_P(max)) {
+ if (excl) rb_raise(rb_eArgError, "cannot clamp with an exclusive range");
+ }
+ }
+ if (!NIL_P(min) && !NIL_P(max) && cmpint(min, max) > 0) {
+ rb_raise(rb_eArgError, "min argument must be less than or equal to max argument");
+ }
+
+ if (!NIL_P(min)) {
+ c = cmpint(x, min);
+ if (c == 0) return x;
+ if (c < 0) return min;
+ }
+ if (!NIL_P(max)) {
+ c = cmpint(x, max);
+ if (c > 0) return max;
+ }
+ return x;
}
/*
- * The <code>Comparable</code> mixin is used by classes whose objects
- * may be ordered. The class must define the <code><=></code> operator,
- * which compares the receiver against another object, returning -1, 0,
- * or +1 depending on whether the receiver is less than, equal to, or
- * greater than the other object. If the other object is not comparable
- * then the <code><=></code> operator should return nil.
- * <code>Comparable</code> uses
- * <code><=></code> to implement the conventional comparison operators
- * (<code><</code>, <code><=</code>, <code>==</code>, <code>>=</code>,
- * and <code>></code>) and the method <code>between?</code>.
- *
- * class SizeMatters
+ * The Comparable mixin is used by classes whose objects may be
+ * ordered. The class must define the <code><=></code> operator,
+ * which compares the receiver against another object, returning a
+ * value less than 0, returning 0, or returning a value greater than 0,
+ * depending on whether the receiver is less than, equal to,
+ * or greater than the other object. If the other object is not
+ * comparable then the <code><=></code> operator should return +nil+.
+ * Comparable uses <code><=></code> to implement the conventional
+ * comparison operators (<code><</code>, <code><=</code>,
+ * <code>==</code>, <code>>=</code>, and <code>></code>) and the
+ * method <code>between?</code>.
+ *
+ * class StringSorter
* include Comparable
+ *
* attr :str
* def <=>(other)
* str.size <=> other.str.size
* end
+ *
* def initialize(str)
* @str = str
* end
+ *
* def inspect
* @str
* end
* end
*
- * s1 = SizeMatters.new("Z")
- * s2 = SizeMatters.new("YY")
- * s3 = SizeMatters.new("XXX")
- * s4 = SizeMatters.new("WWWW")
- * s5 = SizeMatters.new("VVVVV")
+ * s1 = StringSorter.new("Z")
+ * s2 = StringSorter.new("YY")
+ * s3 = StringSorter.new("XXX")
+ * s4 = StringSorter.new("WWWW")
+ * s5 = StringSorter.new("VVVVV")
*
* s1 < s2 #=> true
* s4.between?(s1, s3) #=> false
* s4.between?(s3, s5) #=> true
* [ s3, s2, s5, s4, s1 ].sort #=> [Z, YY, XXX, WWWW, VVVVV]
*
+ * == What's Here
+ *
+ * Module \Comparable provides these methods, all of which use method <tt>#<=></tt>:
+ *
+ * - #<: Returns whether +self+ is less than the given object.
+ * - #<=: Returns whether +self+ is less than or equal to the given object.
+ * - #==: Returns whether +self+ is equal to the given object.
+ * - #>: Returns whether +self+ is greater than the given object.
+ * - #>=: Returns whether +self+ is greater than or equal to the given object.
+ * - #between?: Returns +true+ if +self+ is between two given objects.
+ * - #clamp: For given objects +min+ and +max+, or range <tt>(min..max)</tt>, returns:
+ *
+ * - +min+ if <tt>(self <=> min) < 0</tt>.
+ * - +max+ if <tt>(self <=> max) > 0</tt>.
+ * - +self+ otherwise.
+ *
*/
void
Init_Comparable(void)
{
-#undef rb_intern
-#define rb_intern(str) rb_intern_const(str)
-
rb_mComparable = rb_define_module("Comparable");
rb_define_method(rb_mComparable, "==", cmp_equal, 1);
rb_define_method(rb_mComparable, ">", cmp_gt, 1);
@@ -222,6 +336,5 @@ Init_Comparable(void)
rb_define_method(rb_mComparable, "<", cmp_lt, 1);
rb_define_method(rb_mComparable, "<=", cmp_le, 1);
rb_define_method(rb_mComparable, "between?", cmp_between, 2);
-
- cmp = rb_intern("<=>");
+ rb_define_method(rb_mComparable, "clamp", cmp_clamp, -1);
}
diff --git a/compile.c b/compile.c
index aee1b4ed93..b7d6b07090 100644
--- a/compile.c
+++ b/compile.c
@@ -9,34 +9,54 @@
**********************************************************************/
-#include "internal.h"
-#include "ruby/re.h"
-#include "encindex.h"
+#include "ruby/internal/config.h"
#include <math.h>
-#define USE_INSN_STACK_INCREASE 1
-#include "vm_core.h"
-#include "iseq.h"
-#include "insns.inc"
-#include "insns_info.inc"
-#include "gc.h"
-
#ifdef HAVE_DLADDR
# include <dlfcn.h>
#endif
-#undef RUBY_UNTYPED_DATA_WARNING
-#define RUBY_UNTYPED_DATA_WARNING 0
+#include "encindex.h"
+#include "id_table.h"
+#include "internal.h"
+#include "internal/array.h"
+#include "internal/compile.h"
+#include "internal/complex.h"
+#include "internal/encoding.h"
+#include "internal/error.h"
+#include "internal/gc.h"
+#include "internal/hash.h"
+#include "internal/io.h"
+#include "internal/numeric.h"
+#include "internal/object.h"
+#include "internal/rational.h"
+#include "internal/re.h"
+#include "internal/ruby_parser.h"
+#include "internal/symbol.h"
+#include "internal/thread.h"
+#include "internal/variable.h"
+#include "iseq.h"
+#include "ruby/ractor.h"
+#include "ruby/re.h"
+#include "ruby/util.h"
+#include "vm_core.h"
+#include "vm_callinfo.h"
+#include "vm_debug.h"
+#include "yjit.h"
+
+#include "builtin.h"
+#include "insns.inc"
+#include "insns_info.inc"
#define FIXNUM_INC(n, i) ((n)+(INT2FIX(i)&~FIXNUM_FLAG))
-#define FIXNUM_OR(n, i) ((n)|INT2FIX(i))
typedef struct iseq_link_element {
enum {
- ISEQ_ELEMENT_NONE,
- ISEQ_ELEMENT_LABEL,
- ISEQ_ELEMENT_INSN,
- ISEQ_ELEMENT_ADJUST
+ ISEQ_ELEMENT_ANCHOR,
+ ISEQ_ELEMENT_LABEL,
+ ISEQ_ELEMENT_INSN,
+ ISEQ_ELEMENT_ADJUST,
+ ISEQ_ELEMENT_TRACE,
} type;
struct iseq_link_element *next;
struct iseq_link_element *prev;
@@ -47,23 +67,36 @@ typedef struct iseq_link_anchor {
LINK_ELEMENT *last;
} LINK_ANCHOR;
+typedef enum {
+ LABEL_RESCUE_NONE,
+ LABEL_RESCUE_BEG,
+ LABEL_RESCUE_END,
+ LABEL_RESCUE_TYPE_MAX
+} LABEL_RESCUE_TYPE;
+
typedef struct iseq_label_data {
LINK_ELEMENT link;
int label_no;
int position;
int sc_state;
- int set;
int sp;
int refcnt;
+ unsigned int set: 1;
+ unsigned int rescued: 2;
+ unsigned int unremovable: 1;
} LABEL;
typedef struct iseq_insn_data {
LINK_ELEMENT link;
enum ruby_vminsn_type insn_id;
- unsigned int line_no;
int operand_size;
int sc_state;
VALUE *operands;
+ struct {
+ int line_no;
+ int node_id;
+ rb_event_flag_t events;
+ } insn_info;
} INSN;
typedef struct iseq_adjust_data {
@@ -72,6 +105,12 @@ typedef struct iseq_adjust_data {
int line_no;
} ADJUST;
+typedef struct iseq_trace_data {
+ LINK_ELEMENT link;
+ rb_event_flag_t event;
+ long data;
+} TRACE;
+
struct ensure_range {
LABEL *begin;
LABEL *end;
@@ -79,11 +118,13 @@ struct ensure_range {
};
struct iseq_compile_data_ensure_node_stack {
- NODE *ensure_node;
+ const void *ensure_node;
struct iseq_compile_data_ensure_node_stack *prev;
struct ensure_range *erange;
};
+const ID rb_iseq_shared_exc_local_tbl[] = {idERROR_INFO};
+
/**
* debug function(macro) interface depend on CPDEBUG
* if it is less than 0, runtime option is in effect.
@@ -134,35 +175,24 @@ struct iseq_compile_data_ensure_node_stack {
#define debug_node_start(node) ((void) \
(compile_debug_print_indent(1) && \
- (ruby_debug_print_node(1, CPDEBUG, "", (NODE *)(node)), gl_node_level)), \
+ (ruby_debug_print_node(1, CPDEBUG, "", (const NODE *)(node)), gl_node_level)), \
gl_node_level++)
#define debug_node_end() gl_node_level --
#else
-static inline ID
-r_id(ID id)
-{
- return id;
-}
-
-static inline VALUE
-r_value(VALUE value)
-{
- return value;
-}
-
-#define debugi(header, id) r_id(id)
-#define debugp(header, value) r_value(value)
-#define debugp_verbose(header, value) r_value(value)
-#define debugp_verbose_node(header, value) r_value(value)
-#define debugp_param(header, value) r_value(value)
+#define debugi(header, id) ((void)0)
+#define debugp(header, value) ((void)0)
+#define debugp_verbose(header, value) ((void)0)
+#define debugp_verbose_node(header, value) ((void)0)
+#define debugp_param(header, value) ((void)0)
#define debug_node_start(node) ((void)0)
#define debug_node_end() ((void)0)
#endif
#if CPDEBUG > 1 || CPDEBUG < 0
+#undef printf
#define printf ruby_debug_printf
#define debugs if (compile_debug_print_indent(1)) ruby_debug_printf
#define debug_compile(msg, v) ((void)(compile_debug_print_indent(1) && fputs((msg), stderr)), (v))
@@ -171,12 +201,11 @@ r_value(VALUE value)
#define debug_compile(msg, v) (v)
#endif
+#define LVAR_ERRINFO (1)
/* create new label */
#define NEW_LABEL(l) new_label_body(iseq, (l))
-
-#define iseq_path(iseq) ((iseq)->body->location.path)
-#define iseq_absolute_path(iseq) ((iseq)->body->location.absolute_path)
+#define LABEL_FORMAT "<L%03d>"
#define NEW_ISEQ(node, name, type, line_no) \
new_child_iseq(iseq, (node), rb_fstring(name), 0, (type), (line_no))
@@ -184,75 +213,89 @@ r_value(VALUE value)
#define NEW_CHILD_ISEQ(node, name, type, line_no) \
new_child_iseq(iseq, (node), rb_fstring(name), iseq, (type), (line_no))
+#define NEW_CHILD_ISEQ_WITH_CALLBACK(callback_func, name, type, line_no) \
+ new_child_iseq_with_callback(iseq, (callback_func), (name), iseq, (type), (line_no))
+
/* add instructions */
#define ADD_SEQ(seq1, seq2) \
APPEND_LIST((seq1), (seq2))
/* add an instruction */
-#define ADD_INSN(seq, line, insn) \
- ADD_ELEM((seq), (LINK_ELEMENT *) new_insn_body(iseq, (line), BIN(insn), 0))
+#define ADD_INSN(seq, line_node, insn) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) new_insn_body(iseq, nd_line(line_node), nd_node_id(line_node), BIN(insn), 0))
-/* insert an instruction before prev */
-#define INSERT_BEFORE_INSN(prev, line, insn) \
- INSERT_ELEM_PREV(&(prev)->link, (LINK_ELEMENT *) new_insn_body(iseq, (line), BIN(insn), 0))
+/* add an instruction with the given line number and node id */
+#define ADD_SYNTHETIC_INSN(seq, line_no, node_id, insn) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) new_insn_body(iseq, (line_no), (node_id), BIN(insn), 0))
+
+/* insert an instruction before next */
+#define INSERT_BEFORE_INSN(next, line_no, node_id, insn) \
+ ELEM_INSERT_PREV(&(next)->link, (LINK_ELEMENT *) new_insn_body(iseq, line_no, node_id, BIN(insn), 0))
+
+/* insert an instruction after prev */
+#define INSERT_AFTER_INSN(prev, line_no, node_id, insn) \
+ ELEM_INSERT_NEXT(&(prev)->link, (LINK_ELEMENT *) new_insn_body(iseq, line_no, node_id, BIN(insn), 0))
/* add an instruction with some operands (1, 2, 3, 5) */
-#define ADD_INSN1(seq, line, insn, op1) \
+#define ADD_INSN1(seq, line_node, insn, op1) \
ADD_ELEM((seq), (LINK_ELEMENT *) \
- new_insn_body(iseq, (line), BIN(insn), 1, (VALUE)(op1)))
+ new_insn_body(iseq, nd_line(line_node), nd_node_id(line_node), BIN(insn), 1, (VALUE)(op1)))
-/* insert an instruction with some operands (1, 2, 3, 5) before prev */
-#define INSERT_BEFORE_INSN1(prev, line, insn, op1) \
- INSERT_ELEM_PREV(&(prev)->link, (LINK_ELEMENT *) \
- new_insn_body(iseq, (line), BIN(insn), 1, (VALUE)(op1)))
+/* insert an instruction with some operands (1, 2, 3, 5) before next */
+#define INSERT_BEFORE_INSN1(next, line_no, node_id, insn, op1) \
+ ELEM_INSERT_PREV(&(next)->link, (LINK_ELEMENT *) \
+ new_insn_body(iseq, line_no, node_id, BIN(insn), 1, (VALUE)(op1)))
+
+/* insert an instruction with some operands (1, 2, 3, 5) after prev */
+#define INSERT_AFTER_INSN1(prev, line_no, node_id, insn, op1) \
+ ELEM_INSERT_NEXT(&(prev)->link, (LINK_ELEMENT *) \
+ new_insn_body(iseq, line_no, node_id, BIN(insn), 1, (VALUE)(op1)))
#define LABEL_REF(label) ((label)->refcnt++)
/* add an instruction with label operand (alias of ADD_INSN1) */
-#define ADD_INSNL(seq, line, insn, label) (ADD_INSN1(seq, line, insn, label), LABEL_REF(label))
+#define ADD_INSNL(seq, line_node, insn, label) (ADD_INSN1(seq, line_node, insn, label), LABEL_REF(label))
-#define ADD_INSN2(seq, line, insn, op1, op2) \
+#define ADD_INSN2(seq, line_node, insn, op1, op2) \
ADD_ELEM((seq), (LINK_ELEMENT *) \
- new_insn_body(iseq, (line), BIN(insn), 2, (VALUE)(op1), (VALUE)(op2)))
+ new_insn_body(iseq, nd_line(line_node), nd_node_id(line_node), BIN(insn), 2, (VALUE)(op1), (VALUE)(op2)))
-#define ADD_INSN3(seq, line, insn, op1, op2, op3) \
+#define ADD_INSN3(seq, line_node, insn, op1, op2, op3) \
ADD_ELEM((seq), (LINK_ELEMENT *) \
- new_insn_body(iseq, (line), BIN(insn), 3, (VALUE)(op1), (VALUE)(op2), (VALUE)(op3)))
+ new_insn_body(iseq, nd_line(line_node), nd_node_id(line_node), BIN(insn), 3, (VALUE)(op1), (VALUE)(op2), (VALUE)(op3)))
/* Specific Insn factory */
-#define ADD_SEND(seq, line, id, argc) \
- ADD_SEND_R((seq), (line), (id), (argc), NULL, (VALUE)INT2FIX(0), NULL)
+#define ADD_SEND(seq, line_node, id, argc) \
+ ADD_SEND_R((seq), (line_node), (id), (argc), NULL, (VALUE)INT2FIX(0), NULL)
+
+#define ADD_SEND_WITH_FLAG(seq, line_node, id, argc, flag) \
+ ADD_SEND_R((seq), (line_node), (id), (argc), NULL, (VALUE)(flag), NULL)
-#define ADD_SEND_WITH_FLAG(seq, line, id, argc, flag) \
- ADD_SEND_R((seq), (line), (id), (argc), NULL, (VALUE)(flag), NULL)
+#define ADD_SEND_WITH_BLOCK(seq, line_node, id, argc, block) \
+ ADD_SEND_R((seq), (line_node), (id), (argc), (block), (VALUE)INT2FIX(0), NULL)
-#define ADD_SEND_WITH_BLOCK(seq, line, id, argc, block) \
- ADD_SEND_R((seq), (line), (id), (argc), (block), (VALUE)INT2FIX(0), NULL)
+#define ADD_CALL_RECEIVER(seq, line_node) \
+ ADD_INSN((seq), (line_node), putself)
-#define ADD_CALL_RECEIVER(seq, line) \
- ADD_INSN((seq), (line), putself)
+#define ADD_CALL(seq, line_node, id, argc) \
+ ADD_SEND_R((seq), (line_node), (id), (argc), NULL, (VALUE)INT2FIX(VM_CALL_FCALL), NULL)
-#define ADD_CALL(seq, line, id, argc) \
- ADD_SEND_R((seq), (line), (id), (argc), NULL, (VALUE)INT2FIX(VM_CALL_FCALL), NULL)
+#define ADD_CALL_WITH_BLOCK(seq, line_node, id, argc, block) \
+ ADD_SEND_R((seq), (line_node), (id), (argc), (block), (VALUE)INT2FIX(VM_CALL_FCALL), NULL)
-#define ADD_CALL_WITH_BLOCK(seq, line, id, argc, block) \
- ADD_SEND_R((seq), (line), (id), (argc), (block), (VALUE)INT2FIX(VM_CALL_FCALL), NULL)
+#define ADD_SEND_R(seq, line_node, id, argc, block, flag, keywords) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) new_insn_send(iseq, nd_line(line_node), nd_node_id(line_node), (id), (VALUE)(argc), (block), (VALUE)(flag), (keywords)))
-#define ADD_SEND_R(seq, line, id, argc, block, flag, keywords) \
- ADD_ELEM((seq), (LINK_ELEMENT *) new_insn_send(iseq, (line), (id), (VALUE)(argc), (block), (VALUE)(flag), (keywords)))
+#define ADD_TRACE(seq, event) \
+ ADD_ELEM((seq), (LINK_ELEMENT *)new_trace_body(iseq, (event), 0))
+#define ADD_TRACE_WITH_DATA(seq, event, data) \
+ ADD_ELEM((seq), (LINK_ELEMENT *)new_trace_body(iseq, (event), (data)))
-#define ADD_TRACE(seq, line, event) \
- do { \
- if ((event) == RUBY_EVENT_LINE && ISEQ_COVERAGE(iseq) && \
- (line) != ISEQ_COMPILE_DATA(iseq)->last_coverable_line) { \
- RARRAY_ASET(ISEQ_COVERAGE(iseq), (line) - 1, INT2FIX(0)); \
- ISEQ_COMPILE_DATA(iseq)->last_coverable_line = (line); \
- ADD_INSN1((seq), (line), trace, INT2FIX(RUBY_EVENT_COVERAGE)); \
- } \
- if (ISEQ_COMPILE_DATA(iseq)->option->trace_instruction) { \
- ADD_INSN1((seq), (line), trace, INT2FIX(event)); \
- } \
- } while (0)
+static void iseq_add_getlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, const NODE *const line_node, int idx, int level);
+static void iseq_add_setlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, const NODE *const line_node, int idx, int level);
+
+#define ADD_GETLOCAL(seq, line_node, idx, level) iseq_add_getlocal(iseq, (seq), (line_node), (idx), (level))
+#define ADD_SETLOCAL(seq, line_node, idx, level) iseq_add_setlocal(iseq, (seq), (line_node), (idx), (level))
/* add label */
#define ADD_LABEL(seq, label) \
@@ -261,19 +304,23 @@ r_value(VALUE value)
#define APPEND_LABEL(seq, before, label) \
APPEND_ELEM((seq), (before), (LINK_ELEMENT *) (label))
-#define ADD_ADJUST(seq, line, label) \
- ADD_ELEM((seq), (LINK_ELEMENT *) new_adjust_body(iseq, (label), (line)))
+#define ADD_ADJUST(seq, line_node, label) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) new_adjust_body(iseq, (label), nd_line(line_node)))
#define ADD_ADJUST_RESTORE(seq, label) \
ADD_ELEM((seq), (LINK_ELEMENT *) new_adjust_body(iseq, (label), -1))
+#define LABEL_UNREMOVABLE(label) \
+ ((label) ? (LABEL_REF(label), (label)->unremovable=1) : 0)
#define ADD_CATCH_ENTRY(type, ls, le, iseqv, lc) do { \
VALUE _e = rb_ary_new3(5, (type), \
- (VALUE)(ls) | 1, (VALUE)(le) | 1, \
- (VALUE)(iseqv), (VALUE)(lc) | 1); \
- if (ls) LABEL_REF(ls); \
- if (le) LABEL_REF(le); \
- if (lc) LABEL_REF(lc); \
+ (VALUE)(ls) | 1, (VALUE)(le) | 1, \
+ (VALUE)(iseqv), (VALUE)(lc) | 1); \
+ LABEL_UNREMOVABLE(ls); \
+ LABEL_REF(le); \
+ LABEL_REF(lc); \
+ if (NIL_P(ISEQ_COMPILE_DATA(iseq)->catch_table_ary)) \
+ RB_OBJ_WRITE(iseq, &ISEQ_COMPILE_DATA(iseq)->catch_table_ary, rb_ary_hidden_new(3)); \
rb_ary_push(ISEQ_COMPILE_DATA(iseq)->catch_table_ary, freeze_hide_obj(_e)); \
} while (0)
@@ -283,19 +330,19 @@ r_value(VALUE value)
iseq_compile_each(iseq, (anchor), (node), 0)))
/* compile node, this node's value will be popped */
-#define COMPILE_POPED(anchor, desc, node) \
+#define COMPILE_POPPED(anchor, desc, node) \
(debug_compile("== " desc "\n", \
iseq_compile_each(iseq, (anchor), (node), 1)))
-/* compile node, which is popped when 'poped' is true */
-#define COMPILE_(anchor, desc, node, poped) \
+/* compile node, which is popped when 'popped' is true */
+#define COMPILE_(anchor, desc, node, popped) \
(debug_compile("== " desc "\n", \
- iseq_compile_each(iseq, (anchor), (node), (poped))))
+ iseq_compile_each(iseq, (anchor), (node), (popped))))
-#define COMPILE_RECV(anchor, desc, node) \
+#define COMPILE_RECV(anchor, desc, node, recv) \
(private_recv_p(node) ? \
- (ADD_INSN(anchor, nd_line(node), putself), VM_CALL_FCALL) : \
- (COMPILE(anchor, desc, node->nd_recv), 0))
+ (ADD_INSN(anchor, node, putself), VM_CALL_FCALL) : \
+ COMPILE(anchor, desc, recv) ? 0 : -1)
#define OPERAND_AT(insn, idx) \
(((INSN*)(insn))->operands[(idx)])
@@ -303,81 +350,98 @@ r_value(VALUE value)
#define INSN_OF(insn) \
(((INSN*)(insn))->insn_id)
-/* error */
-typedef void (*compile_error_func)(VALUE, int, const char *, ...);
+#define IS_INSN(link) ((link)->type == ISEQ_ELEMENT_INSN)
+#define IS_LABEL(link) ((link)->type == ISEQ_ELEMENT_LABEL)
+#define IS_ADJUST(link) ((link)->type == ISEQ_ELEMENT_ADJUST)
+#define IS_TRACE(link) ((link)->type == ISEQ_ELEMENT_TRACE)
+#define IS_INSN_ID(iobj, insn) (INSN_OF(iobj) == BIN(insn))
+#define IS_NEXT_INSN_ID(link, insn) \
+ ((link)->next && IS_INSN((link)->next) && IS_INSN_ID((link)->next, insn))
+/* error */
+#if CPDEBUG > 0
+RBIMPL_ATTR_NORETURN()
+#endif
+RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 3, 4)
static void
-append_compile_error(VALUE file, int line, const char *fmt, ...)
+append_compile_error(const rb_iseq_t *iseq, int line, const char *fmt, ...)
{
- VALUE err_info = rb_errinfo();
- VALUE str = rb_attr_get(err_info, idMesg);
+ VALUE err_info = ISEQ_COMPILE_DATA(iseq)->err_info;
+ VALUE file = rb_iseq_path(iseq);
+ VALUE err = err_info == Qtrue ? Qfalse : err_info;
va_list args;
- if (RSTRING_LEN(str)) rb_str_cat2(str, "\n");
- if (file) {
- rb_str_concat(str, file);
- if (line) rb_str_catf(str, ":%d", line);
- rb_str_cat2(str, ": ");
- }
va_start(args, fmt);
- rb_str_vcatf(str, fmt, args);
+ err = rb_syntax_error_append(err, file, line, -1, NULL, fmt, args);
va_end(args);
+ if (NIL_P(err_info)) {
+ RB_OBJ_WRITE(iseq, &ISEQ_COMPILE_DATA(iseq)->err_info, err);
+ rb_set_errinfo(err);
+ }
+ else if (!err_info) {
+ RB_OBJ_WRITE(iseq, &ISEQ_COMPILE_DATA(iseq)->err_info, Qtrue);
+ }
+ if (compile_debug) {
+ if (SPECIAL_CONST_P(err)) err = rb_eSyntaxError;
+ rb_exc_fatal(err);
+ }
}
-NOINLINE(static compile_error_func prepare_compile_error(rb_iseq_t *iseq));
-
-static compile_error_func
-prepare_compile_error(rb_iseq_t *iseq)
+#if 0
+static void
+compile_bug(rb_iseq_t *iseq, int line, const char *fmt, ...)
{
- VALUE err_info = ISEQ_COMPILE_DATA(iseq)->err_info;
- if (compile_debug) return rb_compile_bug_str;
- if (NIL_P(err_info)) {
- err_info = rb_exc_new_cstr(rb_eSyntaxError, "");
- RB_OBJ_WRITE(iseq, &ISEQ_COMPILE_DATA(iseq)->err_info, err_info);
- }
- rb_set_errinfo(err_info);
- return append_compile_error;
+ va_list args;
+ va_start(args, fmt);
+ rb_report_bug_valist(rb_iseq_path(iseq), line, fmt, args);
+ va_end(args);
+ abort();
}
+#endif
-#define COMPILE_ERROR prepare_compile_error(iseq)
+#define COMPILE_ERROR append_compile_error
-#define ERROR_ARGS_AT(n) ruby_sourcefile_string, nd_line(n),
+#define ERROR_ARGS_AT(n) iseq, nd_line(n),
#define ERROR_ARGS ERROR_ARGS_AT(node)
-#define EXPECT_NODE(prefix, node, ndtype) \
+#define EXPECT_NODE(prefix, node, ndtype, errval) \
do { \
- NODE *error_node = (node); \
+ const NODE *error_node = (node); \
enum node_type error_type = nd_type(error_node); \
if (error_type != (ndtype)) { \
- rb_compile_bug_str(ERROR_ARGS_AT(error_node) \
- prefix ": " #ndtype " is expected, but %s", \
- ruby_node_name(error_type)); \
+ COMPILE_ERROR(ERROR_ARGS_AT(error_node) \
+ prefix ": " #ndtype " is expected, but %s", \
+ ruby_node_name(error_type)); \
+ return errval; \
} \
} while (0)
-#define EXPECT_NODE_NONULL(prefix, parent, ndtype) \
+#define EXPECT_NODE_NONULL(prefix, parent, ndtype, errval) \
do { \
- rb_compile_bug_str(ERROR_ARGS_AT(parent) \
- prefix ": must be " #ndtype ", but 0"); \
+ COMPILE_ERROR(ERROR_ARGS_AT(parent) \
+ prefix ": must be " #ndtype ", but 0"); \
+ return errval; \
} while (0)
-#define UNKNOWN_NODE(prefix, node) \
+#define UNKNOWN_NODE(prefix, node, errval) \
do { \
- NODE *error_node = (node); \
- rb_compile_bug_str(ERROR_ARGS_AT(error_node) prefix ": unknown node (%s)", \
- ruby_node_name(nd_type(error_node))); \
+ const NODE *error_node = (node); \
+ COMPILE_ERROR(ERROR_ARGS_AT(error_node) prefix ": unknown node (%s)", \
+ ruby_node_name(nd_type(error_node))); \
+ return errval; \
} while (0)
#define COMPILE_OK 1
#define COMPILE_NG 0
+#define CHECK(sub) if (!(sub)) {BEFORE_RETURN;return COMPILE_NG;}
+#define NO_CHECK(sub) (void)(sub)
+#define BEFORE_RETURN
-/* leave name uninitialized so that compiler warn if INIT_ANCHOR is
- * missing */
#define DECL_ANCHOR(name) \
- LINK_ANCHOR *name, name##_body__ = {{0,},}
+ LINK_ANCHOR name[1] = {{{ISEQ_ELEMENT_ANCHOR,},&name[0].anchor}}
#define INIT_ANCHOR(name) \
- (name##_body__.last = &name##_body__.anchor, name = &name##_body__)
+ ((name->last = &name->anchor)->next = NULL) /* re-initialize */
static inline VALUE
freeze_hide_obj(VALUE obj)
@@ -405,35 +469,42 @@ freeze_hide_obj(VALUE obj)
#define gl_node_level ISEQ_COMPILE_DATA(iseq)->node_level
#endif
-static void dump_disasm_list(LINK_ELEMENT *elem);
+static void dump_disasm_list_with_cursor(const LINK_ELEMENT *link, const LINK_ELEMENT *curr, const LABEL *dest);
+static void dump_disasm_list(const LINK_ELEMENT *elem);
static int insn_data_length(INSN *iobj);
static int calc_sp_depth(int depth, INSN *iobj);
-static INSN *new_insn_body(rb_iseq_t *iseq, int line_no, enum ruby_vminsn_type insn_id, int argc, ...);
+static INSN *new_insn_body(rb_iseq_t *iseq, int line_no, int node_id, enum ruby_vminsn_type insn_id, int argc, ...);
static LABEL *new_label_body(rb_iseq_t *iseq, long line);
static ADJUST *new_adjust_body(rb_iseq_t *iseq, LABEL *label, int line);
+static TRACE *new_trace_body(rb_iseq_t *iseq, rb_event_flag_t event, long data);
-static int iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *anchor, NODE * n, int);
-static int iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *anchor);
-static int iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *anchor);
-static int iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *anchor);
-static int iseq_set_local_table(rb_iseq_t *iseq, const ID *tbl);
+static int iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *anchor, const NODE *n, int);
+static int iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *const anchor);
+static int iseq_setup_insn(rb_iseq_t *iseq, LINK_ANCHOR *const anchor);
+static int iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *const anchor);
+static int iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *const anchor);
+
+static int iseq_set_local_table(rb_iseq_t *iseq, const rb_ast_id_table_t *tbl, const NODE *const node_args);
static int iseq_set_exception_local_table(rb_iseq_t *iseq);
-static int iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *anchor, NODE * node);
+static int iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *const anchor, const NODE *const node);
-static int iseq_set_sequence_stackcaching(rb_iseq_t *iseq, LINK_ANCHOR *anchor);
-static int iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor);
+static int iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor);
static int iseq_set_exception_table(rb_iseq_t *iseq);
static int iseq_set_optargs_table(rb_iseq_t *iseq);
+static int iseq_set_parameters_lvar_state(const rb_iseq_t *iseq);
+
+static int compile_defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE needstr, bool ignore);
+static int compile_hash(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int method_call_keywords, int popped);
/*
* To make Array to LinkedList, use link_anchor
*/
static void
-verify_list(ISEQ_ARG_DECLARE const char *info, LINK_ANCHOR *anchor)
+verify_list(ISEQ_ARG_DECLARE const char *info, LINK_ANCHOR *const anchor)
{
#if CPDEBUG
int flag = 0;
@@ -444,19 +515,19 @@ verify_list(ISEQ_ARG_DECLARE const char *info, LINK_ANCHOR *anchor)
list = anchor->anchor.next;
plist = &anchor->anchor;
while (list) {
- if (plist != list->prev) {
- flag += 1;
- }
- plist = list;
- list = list->next;
+ if (plist != list->prev) {
+ flag += 1;
+ }
+ plist = list;
+ list = list->next;
}
if (anchor->last != plist && anchor->last != 0) {
- flag |= 0x70000;
+ flag |= 0x70000;
}
if (flag != 0) {
- rb_bug("list verify error: %08x (%s)", flag, info);
+ rb_bug("list verify error: %08x (%s)", flag, info);
}
#endif
}
@@ -464,11 +535,47 @@ verify_list(ISEQ_ARG_DECLARE const char *info, LINK_ANCHOR *anchor)
#define verify_list(info, anchor) verify_list(iseq, (info), (anchor))
#endif
+static void
+verify_call_cache(rb_iseq_t *iseq)
+{
+#if CPDEBUG
+ VALUE *original = rb_iseq_original_iseq(iseq);
+ size_t i = 0;
+ while (i < ISEQ_BODY(iseq)->iseq_size) {
+ VALUE insn = original[i];
+ const char *types = insn_op_types(insn);
+
+ for (int j=0; types[j]; j++) {
+ if (types[j] == TS_CALLDATA) {
+ struct rb_call_data *cd = (struct rb_call_data *)original[i+j+1];
+ const struct rb_callinfo *ci = cd->ci;
+ const struct rb_callcache *cc = cd->cc;
+ if (cc != vm_cc_empty()) {
+ vm_ci_dump(ci);
+ rb_bug("call cache is not initialized by vm_cc_empty()");
+ }
+ }
+ }
+ i += insn_len(insn);
+ }
+
+ for (unsigned int i=0; i<ISEQ_BODY(iseq)->ci_size; i++) {
+ struct rb_call_data *cd = &ISEQ_BODY(iseq)->call_data[i];
+ const struct rb_callinfo *ci = cd->ci;
+ const struct rb_callcache *cc = cd->cc;
+ if (cc != NULL && cc != vm_cc_empty()) {
+ vm_ci_dump(ci);
+ rb_bug("call cache is not initialized by vm_cc_empty()");
+ }
+ }
+#endif
+}
+
/*
* elem1, elem2 => elem1, elem2, elem
*/
static void
-ADD_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *elem)
+ADD_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *const anchor, LINK_ELEMENT *elem)
{
elem->prev = anchor->last;
anchor->last->next = elem;
@@ -480,7 +587,7 @@ ADD_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *elem)
* elem1, before, elem2 => elem1, before, elem, elem2
*/
static void
-APPEND_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *before, LINK_ELEMENT *elem)
+APPEND_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *const anchor, LINK_ELEMENT *before, LINK_ELEMENT *elem)
{
elem->prev = before;
elem->next = before->next;
@@ -495,37 +602,114 @@ APPEND_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *before, LINK_ELE
#endif
static int
-iseq_add_mark_object(const rb_iseq_t *iseq, VALUE v)
+branch_coverage_valid_p(rb_iseq_t *iseq, int first_line)
+{
+ if (!ISEQ_COVERAGE(iseq)) return 0;
+ if (!ISEQ_BRANCH_COVERAGE(iseq)) return 0;
+ if (first_line <= 0) return 0;
+ return 1;
+}
+
+static VALUE
+setup_branch(const rb_code_location_t *loc, const char *type, VALUE structure, VALUE key)
{
- if (!SPECIAL_CONST_P(v)) {
- rb_iseq_add_mark_object(iseq, v);
+ const int first_lineno = loc->beg_pos.lineno, first_column = loc->beg_pos.column;
+ const int last_lineno = loc->end_pos.lineno, last_column = loc->end_pos.column;
+ VALUE branch = rb_ary_hidden_new(6);
+
+ rb_hash_aset(structure, key, branch);
+ rb_ary_push(branch, ID2SYM(rb_intern(type)));
+ rb_ary_push(branch, INT2FIX(first_lineno));
+ rb_ary_push(branch, INT2FIX(first_column));
+ rb_ary_push(branch, INT2FIX(last_lineno));
+ rb_ary_push(branch, INT2FIX(last_column));
+ return branch;
+}
+
+static VALUE
+decl_branch_base(rb_iseq_t *iseq, VALUE key, const rb_code_location_t *loc, const char *type)
+{
+ if (!branch_coverage_valid_p(iseq, loc->beg_pos.lineno)) return Qundef;
+
+ /*
+ * if !structure[node]
+ * structure[node] = [type, first_lineno, first_column, last_lineno, last_column, branches = {}]
+ * else
+ * branches = structure[node][5]
+ * end
+ */
+
+ VALUE structure = RARRAY_AREF(ISEQ_BRANCH_COVERAGE(iseq), 0);
+ VALUE branch_base = rb_hash_aref(structure, key);
+ VALUE branches;
+
+ if (NIL_P(branch_base)) {
+ branch_base = setup_branch(loc, type, structure, key);
+ branches = rb_hash_new();
+ rb_obj_hide(branches);
+ rb_ary_push(branch_base, branches);
}
- return COMPILE_OK;
+ else {
+ branches = RARRAY_AREF(branch_base, 5);
+ }
+
+ return branches;
}
-#define ruby_sourcefile_string (iseq->body->location.path)
-#define ruby_sourcefile RSTRING_PTR(iseq->body->location.path)
+static NODE
+generate_dummy_line_node(int lineno, int node_id)
+{
+ NODE dummy = { 0 };
+ nd_set_line(&dummy, lineno);
+ nd_set_node_id(&dummy, node_id);
+ return dummy;
+}
-static int
-iseq_add_mark_object_compile_time(const rb_iseq_t *iseq, VALUE v)
+static void
+add_trace_branch_coverage(rb_iseq_t *iseq, LINK_ANCHOR *const seq, const rb_code_location_t *loc, int node_id, int branch_id, const char *type, VALUE branches)
{
- if (!SPECIAL_CONST_P(v)) {
- rb_ary_push(ISEQ_COMPILE_DATA(iseq)->mark_ary, v);
+ if (!branch_coverage_valid_p(iseq, loc->beg_pos.lineno)) return;
+
+ /*
+ * if !branches[branch_id]
+ * branches[branch_id] = [type, first_lineno, first_column, last_lineno, last_column, counter_idx]
+ * else
+ * counter_idx= branches[branch_id][5]
+ * end
+ */
+
+ VALUE key = INT2FIX(branch_id);
+ VALUE branch = rb_hash_aref(branches, key);
+ long counter_idx;
+
+ if (NIL_P(branch)) {
+ branch = setup_branch(loc, type, branches, key);
+ VALUE counters = RARRAY_AREF(ISEQ_BRANCH_COVERAGE(iseq), 1);
+ counter_idx = RARRAY_LEN(counters);
+ rb_ary_push(branch, LONG2FIX(counter_idx));
+ rb_ary_push(counters, INT2FIX(0));
}
- return COMPILE_OK;
+ else {
+ counter_idx = FIX2LONG(RARRAY_AREF(branch, 5));
+ }
+
+ ADD_TRACE_WITH_DATA(seq, RUBY_EVENT_COVERAGE_BRANCH, counter_idx);
+ ADD_SYNTHETIC_INSN(seq, loc->end_pos.lineno, node_id, nop);
}
+#define ISEQ_LAST_LINE(iseq) (ISEQ_COMPILE_DATA(iseq)->last_line)
+
static int
validate_label(st_data_t name, st_data_t label, st_data_t arg)
{
rb_iseq_t *iseq = (rb_iseq_t *)arg;
LABEL *lobj = (LABEL *)label;
if (!lobj->link.next) {
- do {
- COMPILE_ERROR(ruby_sourcefile_string, lobj->position,
- "%"PRIsVALUE": undefined label",
- rb_id2str((ID)name));
- } while (0);
+ do {
+ COMPILE_ERROR(iseq, lobj->position,
+ "%"PRIsVALUE": undefined label",
+ rb_sym2str((VALUE)name));
+ } while (0);
}
return ST_CONTINUE;
}
@@ -535,147 +719,286 @@ validate_labels(rb_iseq_t *iseq, st_table *labels_table)
{
st_foreach(labels_table, validate_label, (st_data_t)iseq);
st_free_table(labels_table);
- if (!NIL_P(ISEQ_COMPILE_DATA(iseq)->err_info)) {
- rb_exc_raise(ISEQ_COMPILE_DATA(iseq)->err_info);
+}
+
+static NODE *
+get_nd_recv(const NODE *node)
+{
+ switch (nd_type(node)) {
+ case NODE_CALL:
+ return RNODE_CALL(node)->nd_recv;
+ case NODE_OPCALL:
+ return RNODE_OPCALL(node)->nd_recv;
+ case NODE_FCALL:
+ return 0;
+ case NODE_QCALL:
+ return RNODE_QCALL(node)->nd_recv;
+ case NODE_VCALL:
+ return 0;
+ case NODE_ATTRASGN:
+ return RNODE_ATTRASGN(node)->nd_recv;
+ case NODE_OP_ASGN1:
+ return RNODE_OP_ASGN1(node)->nd_recv;
+ case NODE_OP_ASGN2:
+ return RNODE_OP_ASGN2(node)->nd_recv;
+ default:
+ rb_bug("unexpected node: %s", ruby_node_name(nd_type(node)));
+ }
+}
+
+static ID
+get_node_call_nd_mid(const NODE *node)
+{
+ switch (nd_type(node)) {
+ case NODE_CALL:
+ return RNODE_CALL(node)->nd_mid;
+ case NODE_OPCALL:
+ return RNODE_OPCALL(node)->nd_mid;
+ case NODE_FCALL:
+ return RNODE_FCALL(node)->nd_mid;
+ case NODE_QCALL:
+ return RNODE_QCALL(node)->nd_mid;
+ case NODE_VCALL:
+ return RNODE_VCALL(node)->nd_mid;
+ case NODE_ATTRASGN:
+ return RNODE_ATTRASGN(node)->nd_mid;
+ default:
+ rb_bug("unexpected node: %s", ruby_node_name(nd_type(node)));
}
}
+static NODE *
+get_nd_args(const NODE *node)
+{
+ switch (nd_type(node)) {
+ case NODE_CALL:
+ return RNODE_CALL(node)->nd_args;
+ case NODE_OPCALL:
+ return RNODE_OPCALL(node)->nd_args;
+ case NODE_FCALL:
+ return RNODE_FCALL(node)->nd_args;
+ case NODE_QCALL:
+ return RNODE_QCALL(node)->nd_args;
+ case NODE_VCALL:
+ return 0;
+ case NODE_ATTRASGN:
+ return RNODE_ATTRASGN(node)->nd_args;
+ default:
+ rb_bug("unexpected node: %s", ruby_node_name(nd_type(node)));
+ }
+}
+
+static ID
+get_node_colon_nd_mid(const NODE *node)
+{
+ switch (nd_type(node)) {
+ case NODE_COLON2:
+ return RNODE_COLON2(node)->nd_mid;
+ case NODE_COLON3:
+ return RNODE_COLON3(node)->nd_mid;
+ default:
+ rb_bug("unexpected node: %s", ruby_node_name(nd_type(node)));
+ }
+}
+
+static ID
+get_nd_vid(const NODE *node)
+{
+ switch (nd_type(node)) {
+ case NODE_LASGN:
+ return RNODE_LASGN(node)->nd_vid;
+ case NODE_DASGN:
+ return RNODE_DASGN(node)->nd_vid;
+ case NODE_IASGN:
+ return RNODE_IASGN(node)->nd_vid;
+ case NODE_CVASGN:
+ return RNODE_CVASGN(node)->nd_vid;
+ default:
+ rb_bug("unexpected node: %s", ruby_node_name(nd_type(node)));
+ }
+}
+
+static NODE *
+get_nd_value(const NODE *node)
+{
+ switch (nd_type(node)) {
+ case NODE_LASGN:
+ return RNODE_LASGN(node)->nd_value;
+ case NODE_DASGN:
+ return RNODE_DASGN(node)->nd_value;
+ default:
+ rb_bug("unexpected node: %s", ruby_node_name(nd_type(node)));
+ }
+}
+
+static VALUE
+get_string_value(const NODE *node)
+{
+ switch (nd_type(node)) {
+ case NODE_STR:
+ return RB_OBJ_SET_SHAREABLE(rb_node_str_string_val(node));
+ case NODE_FILE:
+ return RB_OBJ_SET_SHAREABLE(rb_node_file_path_val(node));
+ default:
+ rb_bug("unexpected node: %s", ruby_node_name(nd_type(node)));
+ }
+}
+
+VALUE
+rb_iseq_compile_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_callback_callback_func * ifunc)
+{
+ DECL_ANCHOR(ret);
+ INIT_ANCHOR(ret);
+
+ (*ifunc->func)(iseq, ret, ifunc->data);
+
+ ADD_SYNTHETIC_INSN(ret, ISEQ_COMPILE_DATA(iseq)->last_line, -1, leave);
+
+ CHECK(iseq_setup_insn(iseq, ret));
+ return iseq_setup(iseq, ret);
+}
+
+static bool drop_unreachable_return(LINK_ANCHOR *ret);
+
VALUE
-rb_iseq_compile_node(rb_iseq_t *iseq, NODE *node)
+rb_iseq_compile_node(rb_iseq_t *iseq, const NODE *node)
{
DECL_ANCHOR(ret);
INIT_ANCHOR(ret);
if (node == 0) {
- COMPILE(ret, "nil", node);
- iseq_set_local_table(iseq, 0);
- }
- else if (nd_type(node) == NODE_SCOPE) {
- /* iseq type of top, method, class, block */
- iseq_set_local_table(iseq, node->nd_tbl);
- iseq_set_arguments(iseq, ret, node->nd_args);
-
- switch (iseq->body->type) {
- case ISEQ_TYPE_BLOCK:
- {
- LABEL *start = ISEQ_COMPILE_DATA(iseq)->start_label = NEW_LABEL(0);
- LABEL *end = ISEQ_COMPILE_DATA(iseq)->end_label = NEW_LABEL(0);
-
- ADD_TRACE(ret, FIX2INT(iseq->body->location.first_lineno), RUBY_EVENT_B_CALL);
- ADD_LABEL(ret, start);
- COMPILE(ret, "block body", node->nd_body);
- ADD_LABEL(ret, end);
- ADD_TRACE(ret, nd_line(node), RUBY_EVENT_B_RETURN);
-
- /* wide range catch handler must put at last */
- ADD_CATCH_ENTRY(CATCH_TYPE_REDO, start, end, 0, start);
- ADD_CATCH_ENTRY(CATCH_TYPE_NEXT, start, end, 0, end);
- break;
- }
- case ISEQ_TYPE_CLASS:
- {
- ADD_TRACE(ret, FIX2INT(iseq->body->location.first_lineno), RUBY_EVENT_CLASS);
- COMPILE(ret, "scoped node", node->nd_body);
- ADD_TRACE(ret, nd_line(node), RUBY_EVENT_END);
- break;
- }
- case ISEQ_TYPE_METHOD:
- {
- ADD_TRACE(ret, FIX2INT(iseq->body->location.first_lineno), RUBY_EVENT_CALL);
- COMPILE(ret, "scoped node", node->nd_body);
- ADD_TRACE(ret, nd_line(node), RUBY_EVENT_RETURN);
- break;
- }
- default: {
- COMPILE(ret, "scoped node", node->nd_body);
- break;
- }
- }
- }
- else if (RB_TYPE_P((VALUE)node, T_IMEMO)) {
- const struct vm_ifunc *ifunc = (struct vm_ifunc *)node;
- /* user callback */
- (*ifunc->func)(iseq, ret, ifunc->data);
+ NO_CHECK(COMPILE(ret, "nil", node));
+ iseq_set_local_table(iseq, 0, 0);
+ }
+ /* assume node is T_NODE */
+ else if (nd_type_p(node, NODE_SCOPE)) {
+ /* iseq type of top, method, class, block */
+ iseq_set_local_table(iseq, RNODE_SCOPE(node)->nd_tbl, (NODE *)RNODE_SCOPE(node)->nd_args);
+ iseq_set_arguments(iseq, ret, (NODE *)RNODE_SCOPE(node)->nd_args);
+ iseq_set_parameters_lvar_state(iseq);
+
+ switch (ISEQ_BODY(iseq)->type) {
+ case ISEQ_TYPE_BLOCK:
+ {
+ LABEL *start = ISEQ_COMPILE_DATA(iseq)->start_label = NEW_LABEL(0);
+ LABEL *end = ISEQ_COMPILE_DATA(iseq)->end_label = NEW_LABEL(0);
+
+ start->rescued = LABEL_RESCUE_BEG;
+ end->rescued = LABEL_RESCUE_END;
+
+ ADD_TRACE(ret, RUBY_EVENT_B_CALL);
+ ADD_SYNTHETIC_INSN(ret, ISEQ_BODY(iseq)->location.first_lineno, -1, nop);
+ ADD_LABEL(ret, start);
+ CHECK(COMPILE(ret, "block body", RNODE_SCOPE(node)->nd_body));
+ ADD_LABEL(ret, end);
+ ADD_TRACE(ret, RUBY_EVENT_B_RETURN);
+ ISEQ_COMPILE_DATA(iseq)->last_line = ISEQ_BODY(iseq)->location.code_location.end_pos.lineno;
+
+ /* wide range catch handler must put at last */
+ ADD_CATCH_ENTRY(CATCH_TYPE_REDO, start, end, NULL, start);
+ ADD_CATCH_ENTRY(CATCH_TYPE_NEXT, start, end, NULL, end);
+ break;
+ }
+ case ISEQ_TYPE_CLASS:
+ {
+ ADD_TRACE(ret, RUBY_EVENT_CLASS);
+ CHECK(COMPILE(ret, "scoped node", RNODE_SCOPE(node)->nd_body));
+ ADD_TRACE(ret, RUBY_EVENT_END);
+ ISEQ_COMPILE_DATA(iseq)->last_line = nd_line(node);
+ break;
+ }
+ case ISEQ_TYPE_METHOD:
+ {
+ ISEQ_COMPILE_DATA(iseq)->root_node = RNODE_SCOPE(node)->nd_body;
+ ADD_TRACE(ret, RUBY_EVENT_CALL);
+ CHECK(COMPILE(ret, "scoped node", RNODE_SCOPE(node)->nd_body));
+ ISEQ_COMPILE_DATA(iseq)->root_node = RNODE_SCOPE(node)->nd_body;
+ ADD_TRACE(ret, RUBY_EVENT_RETURN);
+ ISEQ_COMPILE_DATA(iseq)->last_line = nd_line(node);
+ break;
+ }
+ default: {
+ CHECK(COMPILE(ret, "scoped node", RNODE_SCOPE(node)->nd_body));
+ break;
+ }
+ }
}
else {
- switch (iseq->body->type) {
- case ISEQ_TYPE_METHOD:
- case ISEQ_TYPE_CLASS:
- case ISEQ_TYPE_BLOCK:
- case ISEQ_TYPE_EVAL:
- case ISEQ_TYPE_MAIN:
- case ISEQ_TYPE_TOP:
- COMPILE_ERROR(ERROR_ARGS "compile/should not be reached: %s:%d",
- __FILE__, __LINE__);
- return COMPILE_NG;
- case ISEQ_TYPE_RESCUE:
- iseq_set_exception_local_table(iseq);
- COMPILE(ret, "rescue", node);
- break;
- case ISEQ_TYPE_ENSURE:
- iseq_set_exception_local_table(iseq);
- COMPILE_POPED(ret, "ensure", node);
- break;
- case ISEQ_TYPE_DEFINED_GUARD:
- iseq_set_exception_local_table(iseq);
- COMPILE(ret, "defined guard", node);
- break;
- default:
- rb_compile_bug_str(ERROR_ARGS "unknown scope");
- }
- }
-
- if (iseq->body->type == ISEQ_TYPE_RESCUE || iseq->body->type == ISEQ_TYPE_ENSURE) {
- ADD_INSN2(ret, 0, getlocal, INT2FIX(2), INT2FIX(0));
- ADD_INSN1(ret, 0, throw, INT2FIX(0) /* continue throw */ );
- }
- else {
- ADD_INSN(ret, ISEQ_COMPILE_DATA(iseq)->last_line, leave);
- }
-
-#if SUPPORT_JOKE
+ const char *m;
+#define INVALID_ISEQ_TYPE(type) \
+ ISEQ_TYPE_##type: m = #type; goto invalid_iseq_type
+ switch (ISEQ_BODY(iseq)->type) {
+ case INVALID_ISEQ_TYPE(METHOD);
+ case INVALID_ISEQ_TYPE(CLASS);
+ case INVALID_ISEQ_TYPE(BLOCK);
+ case INVALID_ISEQ_TYPE(EVAL);
+ case INVALID_ISEQ_TYPE(MAIN);
+ case INVALID_ISEQ_TYPE(TOP);
+#undef INVALID_ISEQ_TYPE /* invalid iseq types end */
+ case ISEQ_TYPE_RESCUE:
+ iseq_set_exception_local_table(iseq);
+ CHECK(COMPILE(ret, "rescue", node));
+ break;
+ case ISEQ_TYPE_ENSURE:
+ iseq_set_exception_local_table(iseq);
+ CHECK(COMPILE_POPPED(ret, "ensure", node));
+ break;
+ case ISEQ_TYPE_PLAIN:
+ CHECK(COMPILE(ret, "ensure", node));
+ break;
+ default:
+ COMPILE_ERROR(ERROR_ARGS "unknown scope: %d", ISEQ_BODY(iseq)->type);
+ return COMPILE_NG;
+ invalid_iseq_type:
+ COMPILE_ERROR(ERROR_ARGS "compile/ISEQ_TYPE_%s should not be reached", m);
+ return COMPILE_NG;
+ }
+ }
+
+ if (ISEQ_BODY(iseq)->type == ISEQ_TYPE_RESCUE || ISEQ_BODY(iseq)->type == ISEQ_TYPE_ENSURE) {
+ NODE dummy_line_node = generate_dummy_line_node(0, -1);
+ ADD_GETLOCAL(ret, &dummy_line_node, LVAR_ERRINFO, 0);
+ ADD_INSN1(ret, &dummy_line_node, throw, INT2FIX(0) /* continue throw */ );
+ }
+ else if (!drop_unreachable_return(ret)) {
+ ADD_SYNTHETIC_INSN(ret, ISEQ_COMPILE_DATA(iseq)->last_line, -1, leave);
+ }
+
+#if OPT_SUPPORT_JOKE
if (ISEQ_COMPILE_DATA(iseq)->labels_table) {
- st_table *labels_table = ISEQ_COMPILE_DATA(iseq)->labels_table;
- ISEQ_COMPILE_DATA(iseq)->labels_table = 0;
- validate_labels(iseq, labels_table);
+ st_table *labels_table = ISEQ_COMPILE_DATA(iseq)->labels_table;
+ ISEQ_COMPILE_DATA(iseq)->labels_table = 0;
+ validate_labels(iseq, labels_table);
}
#endif
+ CHECK(iseq_setup_insn(iseq, ret));
return iseq_setup(iseq, ret);
}
-int
+static int
rb_iseq_translate_threaded_code(rb_iseq_t *iseq)
{
#if OPT_DIRECT_THREADED_CODE || OPT_CALL_THREADED_CODE
const void * const *table = rb_vm_get_insns_address_table();
unsigned int i;
- VALUE *encoded = (VALUE *)iseq->body->iseq_encoded;
+ VALUE *encoded = (VALUE *)ISEQ_BODY(iseq)->iseq_encoded;
- for (i = 0; i < iseq->body->iseq_size; /* */ ) {
- int insn = (int)iseq->body->iseq_encoded[i];
- int len = insn_len(insn);
- encoded[i] = (VALUE)table[insn];
- i += len;
+ for (i = 0; i < ISEQ_BODY(iseq)->iseq_size; /* */ ) {
+ int insn = (int)ISEQ_BODY(iseq)->iseq_encoded[i];
+ int len = insn_len(insn);
+ encoded[i] = (VALUE)table[insn];
+ i += len;
}
+ FL_SET((VALUE)iseq, ISEQ_TRANSLATED);
#endif
- return COMPILE_OK;
-}
-#if OPT_DIRECT_THREADED_CODE || OPT_CALL_THREADED_CODE
-static int
-rb_vm_insn_addr2insn(const void *addr) /* cold path */
-{
- int insn;
- const void * const *table = rb_vm_get_insns_address_table();
+#if USE_YJIT
+ rb_yjit_live_iseq_count++;
+ rb_yjit_iseq_alloc_count++;
+#endif
- for (insn = 0; insn < VM_INSTRUCTION_SIZE; insn++) {
- if (table[insn] == addr) {
- return insn;
- }
- }
- rb_bug("rb_vm_insn_addr2insn: invalid insn address: %p", addr);
+ return COMPILE_OK;
}
-#endif
VALUE *
rb_iseq_original_iseq(const rb_iseq_t *iseq) /* cold path */
@@ -683,20 +1006,20 @@ rb_iseq_original_iseq(const rb_iseq_t *iseq) /* cold path */
VALUE *original_code;
if (ISEQ_ORIGINAL_ISEQ(iseq)) return ISEQ_ORIGINAL_ISEQ(iseq);
- original_code = ISEQ_ORIGINAL_ISEQ_ALLOC(iseq, iseq->body->iseq_size);
- MEMCPY(original_code, iseq->body->iseq_encoded, VALUE, iseq->body->iseq_size);
+ original_code = ISEQ_ORIGINAL_ISEQ_ALLOC(iseq, ISEQ_BODY(iseq)->iseq_size);
+ MEMCPY(original_code, ISEQ_BODY(iseq)->iseq_encoded, VALUE, ISEQ_BODY(iseq)->iseq_size);
#if OPT_DIRECT_THREADED_CODE || OPT_CALL_THREADED_CODE
{
- unsigned int i;
+ unsigned int i;
- for (i = 0; i < iseq->body->iseq_size; /* */ ) {
- const void *addr = (const void *)original_code[i];
- const int insn = rb_vm_insn_addr2insn(addr);
+ for (i = 0; i < ISEQ_BODY(iseq)->iseq_size; /* */ ) {
+ const void *addr = (const void *)original_code[i];
+ const int insn = rb_vm_insn_addr2insn(addr);
- original_code[i] = insn;
- i += insn_len(insn);
- }
+ original_code[i] = insn;
+ i += insn_len(insn);
+ }
}
#endif
return original_code;
@@ -716,6 +1039,16 @@ rb_iseq_original_iseq(const rb_iseq_t *iseq) /* cold path */
#define STRICT_ALIGNMENT
#endif
+/*
+ * Some OpenBSD platforms (including sparc64) require strict alignment.
+ */
+#if defined(__OpenBSD__)
+ #include <sys/endian.h>
+ #ifdef __STRICT_ALIGNMENT
+ #define STRICT_ALIGNMENT
+ #endif
+#endif
+
#ifdef STRICT_ALIGNMENT
#if defined(HAVE_TRUE_LONG_LONG) && SIZEOF_LONG_LONG > SIZEOF_VALUE
#define ALIGNMENT_SIZE SIZEOF_LONG_LONG
@@ -756,11 +1089,10 @@ calc_padding(void *ptr, size_t size)
#endif /* STRICT_ALIGNMENT */
static void *
-compile_data_alloc(rb_iseq_t *iseq, size_t size)
+compile_data_alloc_with_arena(struct iseq_compile_data_storage **arena, size_t size)
{
void *ptr = 0;
- struct iseq_compile_data_storage *storage =
- ISEQ_COMPILE_DATA(iseq)->storage_current;
+ struct iseq_compile_data_storage *storage = *arena;
#ifdef STRICT_ALIGNMENT
size_t padding = calc_padding((void *)&storage->buff[storage->pos], size);
#else
@@ -769,18 +1101,18 @@ compile_data_alloc(rb_iseq_t *iseq, size_t size)
if (size >= INT_MAX - padding) rb_memerror();
if (storage->pos + size + padding > storage->size) {
- unsigned int alloc_size = storage->size;
-
- while (alloc_size < size + PADDING_SIZE_MAX) {
- if (alloc_size >= INT_MAX / 2) rb_memerror();
- alloc_size *= 2;
- }
- storage->next = (void *)ALLOC_N(char, alloc_size +
- SIZEOF_ISEQ_COMPILE_DATA_STORAGE);
- storage = ISEQ_COMPILE_DATA(iseq)->storage_current = storage->next;
- storage->next = 0;
- storage->pos = 0;
- storage->size = alloc_size;
+ unsigned int alloc_size = storage->size;
+
+ while (alloc_size < size + PADDING_SIZE_MAX) {
+ if (alloc_size >= INT_MAX / 2) rb_memerror();
+ alloc_size *= 2;
+ }
+ storage->next = (void *)ALLOC_N(char, alloc_size +
+ offsetof(struct iseq_compile_data_storage, buff));
+ storage = *arena = storage->next;
+ storage->next = 0;
+ storage->pos = 0;
+ storage->size = alloc_size;
#ifdef STRICT_ALIGNMENT
padding = calc_padding((void *)&storage->buff[storage->pos], size);
#endif /* STRICT_ALIGNMENT */
@@ -795,10 +1127,34 @@ compile_data_alloc(rb_iseq_t *iseq, size_t size)
return ptr;
}
+static void *
+compile_data_alloc(rb_iseq_t *iseq, size_t size)
+{
+ struct iseq_compile_data_storage ** arena = &ISEQ_COMPILE_DATA(iseq)->node.storage_current;
+ return compile_data_alloc_with_arena(arena, size);
+}
+
+static inline void *
+compile_data_alloc2(rb_iseq_t *iseq, size_t x, size_t y)
+{
+ size_t size = rb_size_mul_or_raise(x, y, rb_eRuntimeError);
+ return compile_data_alloc(iseq, size);
+}
+
+static inline void *
+compile_data_calloc2(rb_iseq_t *iseq, size_t x, size_t y)
+{
+ size_t size = rb_size_mul_or_raise(x, y, rb_eRuntimeError);
+ void *p = compile_data_alloc(iseq, size);
+ memset(p, 0, size);
+ return p;
+}
+
static INSN *
compile_data_alloc_insn(rb_iseq_t *iseq)
{
- return (INSN *)compile_data_alloc(iseq, sizeof(INSN));
+ struct iseq_compile_data_storage ** arena = &ISEQ_COMPILE_DATA(iseq)->insn.storage_current;
+ return (INSN *)compile_data_alloc_with_arena(arena, sizeof(INSN));
}
static LABEL *
@@ -813,17 +1169,23 @@ compile_data_alloc_adjust(rb_iseq_t *iseq)
return (ADJUST *)compile_data_alloc(iseq, sizeof(ADJUST));
}
+static TRACE *
+compile_data_alloc_trace(rb_iseq_t *iseq)
+{
+ return (TRACE *)compile_data_alloc(iseq, sizeof(TRACE));
+}
+
/*
* elem1, elemX => elem1, elem2, elemX
*/
static void
-INSERT_ELEM_NEXT(LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
+ELEM_INSERT_NEXT(LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
{
elem2->next = elem1->next;
elem2->prev = elem1;
elem1->next = elem2;
if (elem2->next) {
- elem2->next->prev = elem2;
+ elem2->next->prev = elem2;
}
}
@@ -831,13 +1193,13 @@ INSERT_ELEM_NEXT(LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
* elem1, elemX => elemX, elem2, elem1
*/
static void
-INSERT_ELEM_PREV(LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
+ELEM_INSERT_PREV(LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
{
elem2->prev = elem1->prev;
elem2->next = elem1;
elem1->prev = elem2;
if (elem2->prev) {
- elem2->prev->next = elem2;
+ elem2->prev->next = elem2;
}
}
@@ -845,136 +1207,142 @@ INSERT_ELEM_PREV(LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
* elemX, elem1, elemY => elemX, elem2, elemY
*/
static void
-REPLACE_ELEM(LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
+ELEM_REPLACE(LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
{
elem2->prev = elem1->prev;
elem2->next = elem1->next;
if (elem1->prev) {
- elem1->prev->next = elem2;
+ elem1->prev->next = elem2;
}
if (elem1->next) {
- elem1->next->prev = elem2;
+ elem1->next->prev = elem2;
}
}
static void
-REMOVE_ELEM(LINK_ELEMENT *elem)
+ELEM_REMOVE(LINK_ELEMENT *elem)
{
elem->prev->next = elem->next;
if (elem->next) {
- elem->next->prev = elem->prev;
+ elem->next->prev = elem->prev;
}
}
static LINK_ELEMENT *
-FIRST_ELEMENT(LINK_ANCHOR *anchor)
+FIRST_ELEMENT(const LINK_ANCHOR *const anchor)
{
return anchor->anchor.next;
}
static LINK_ELEMENT *
-LAST_ELEMENT(LINK_ANCHOR *anchor)
+LAST_ELEMENT(LINK_ANCHOR *const anchor)
{
return anchor->last;
}
static LINK_ELEMENT *
-POP_ELEMENT(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor)
+ELEM_FIRST_INSN(LINK_ELEMENT *elem)
{
- LINK_ELEMENT *elem = anchor->last;
- anchor->last = anchor->last->prev;
- anchor->last->next = 0;
- verify_list("pop", anchor);
- return elem;
+ while (elem) {
+ switch (elem->type) {
+ case ISEQ_ELEMENT_INSN:
+ case ISEQ_ELEMENT_ADJUST:
+ return elem;
+ default:
+ elem = elem->next;
+ }
+ }
+ return NULL;
}
-#if CPDEBUG < 0
-#define POP_ELEMENT(anchor) POP_ELEMENT(iseq, (anchor))
-#endif
static int
-LIST_SIZE_ZERO(LINK_ANCHOR *anchor)
+LIST_INSN_SIZE_ONE(const LINK_ANCHOR *const anchor)
{
- if (anchor->anchor.next == 0) {
- return 1;
+ LINK_ELEMENT *first_insn = ELEM_FIRST_INSN(FIRST_ELEMENT(anchor));
+ if (first_insn != NULL &&
+ ELEM_FIRST_INSN(first_insn->next) == NULL) {
+ return TRUE;
}
else {
- return 0;
+ return FALSE;
}
}
-/*
- * anc1: e1, e2, e3
- * anc2: e4, e5
- *#=>
- * anc1: e1, e2, e3, e4, e5
- * anc2: e4, e5 (broken)
- */
-static void
-APPEND_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR *anc1, LINK_ANCHOR *anc2)
+static int
+LIST_INSN_SIZE_ZERO(const LINK_ANCHOR *const anchor)
{
- if (anc2->anchor.next) {
- anc1->last->next = anc2->anchor.next;
- anc2->anchor.next->prev = anc1->last;
- anc1->last = anc2->last;
+ if (ELEM_FIRST_INSN(FIRST_ELEMENT(anchor)) == NULL) {
+ return TRUE;
+ }
+ else {
+ return FALSE;
}
- verify_list("append", anc1);
}
-#if CPDEBUG < 0
-#define APPEND_LIST(anc1, anc2) APPEND_LIST(iseq, (anc1), (anc2))
-#endif
/*
* anc1: e1, e2, e3
* anc2: e4, e5
*#=>
- * anc1: e4, e5, e1, e2, e3
+ * anc1: e1, e2, e3, e4, e5
* anc2: e4, e5 (broken)
*/
static void
-INSERT_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR *anc1, LINK_ANCHOR *anc2)
+APPEND_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR *const anc1, LINK_ANCHOR *const anc2)
{
if (anc2->anchor.next) {
- LINK_ELEMENT *first = anc1->anchor.next;
- anc1->anchor.next = anc2->anchor.next;
- anc1->anchor.next->prev = &anc1->anchor;
- anc2->last->next = first;
- if (first) {
- first->prev = anc2->last;
- }
- else {
- anc1->last = anc2->last;
- }
+ /* LINK_ANCHOR must not loop */
+ RUBY_ASSERT(anc2->last != &anc2->anchor);
+ anc1->last->next = anc2->anchor.next;
+ anc2->anchor.next->prev = anc1->last;
+ anc1->last = anc2->last;
+ }
+ else {
+ RUBY_ASSERT(anc2->last == &anc2->anchor);
}
-
verify_list("append", anc1);
}
#if CPDEBUG < 0
-#define INSERT_LIST(anc1, anc2) INSERT_LIST(iseq, (anc1), (anc2))
+#define APPEND_LIST(anc1, anc2) APPEND_LIST(iseq, (anc1), (anc2))
#endif
#if CPDEBUG && 0
static void
-debug_list(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor)
+debug_list(ISEQ_ARG_DECLARE LINK_ANCHOR *const anchor, LINK_ELEMENT *cur)
{
LINK_ELEMENT *list = FIRST_ELEMENT(anchor);
printf("----\n");
- printf("anch: %p, frst: %p, last: %p\n", &anchor->anchor,
- anchor->anchor.next, anchor->last);
+ printf("anch: %p, frst: %p, last: %p\n", (void *)&anchor->anchor,
+ (void *)anchor->anchor.next, (void *)anchor->last);
while (list) {
- printf("curr: %p, next: %p, prev: %p, type: %d\n", list, list->next,
- list->prev, FIX2INT(list->type));
- list = list->next;
+ printf("curr: %p, next: %p, prev: %p, type: %d\n", (void *)list, (void *)list->next,
+ (void *)list->prev, (int)list->type);
+ list = list->next;
}
printf("----\n");
- dump_disasm_list(anchor->anchor.next);
+ dump_disasm_list_with_cursor(anchor->anchor.next, cur, 0);
verify_list("debug list", anchor);
}
#if CPDEBUG < 0
-#define debug_list(anc) debug_list(iseq, (anc))
+#define debug_list(anc, cur) debug_list(iseq, (anc), (cur))
#endif
+#else
+#define debug_list(anc, cur) ((void)0)
#endif
+static TRACE *
+new_trace_body(rb_iseq_t *iseq, rb_event_flag_t event, long data)
+{
+ TRACE *trace = compile_data_alloc_trace(iseq);
+
+ trace->link.type = ISEQ_ELEMENT_TRACE;
+ trace->link.next = NULL;
+ trace->event = event;
+ trace->data = data;
+
+ return trace;
+}
+
static LABEL *
new_label_body(rb_iseq_t *iseq, long line)
{
@@ -987,6 +1355,10 @@ new_label_body(rb_iseq_t *iseq, long line)
labelobj->sc_state = 0;
labelobj->sp = -1;
labelobj->refcnt = 0;
+ labelobj->set = 0;
+ labelobj->rescued = LABEL_RESCUE_NONE;
+ labelobj->unremovable = 0;
+ labelobj->position = -1;
return labelobj;
}
@@ -998,130 +1370,311 @@ new_adjust_body(rb_iseq_t *iseq, LABEL *label, int line)
adjust->link.next = 0;
adjust->label = label;
adjust->line_no = line;
- if (label) LABEL_REF(label);
+ LABEL_UNREMOVABLE(label);
return adjust;
}
+static void
+iseq_insn_each_markable_object(INSN *insn, void (*func)(VALUE *, VALUE), VALUE data)
+{
+ const char *types = insn_op_types(insn->insn_id);
+ for (int j = 0; types[j]; j++) {
+ char type = types[j];
+ switch (type) {
+ case TS_CDHASH:
+ case TS_ISEQ:
+ case TS_VALUE:
+ case TS_IC: // constant path array
+ case TS_CALLDATA: // ci is stored.
+ func(&OPERAND_AT(insn, j), data);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+static void
+iseq_insn_each_object_write_barrier(VALUE * obj, VALUE iseq)
+{
+ RB_OBJ_WRITTEN(iseq, Qundef, *obj);
+ RUBY_ASSERT(SPECIAL_CONST_P(*obj) ||
+ RBASIC_CLASS(*obj) == 0 || // hidden
+ RB_OBJ_SHAREABLE_P(*obj));
+}
+
static INSN *
-new_insn_core(rb_iseq_t *iseq, int line_no,
- int insn_id, int argc, VALUE *argv)
+new_insn_core(rb_iseq_t *iseq, int line_no, int node_id, int insn_id, int argc, VALUE *argv)
{
INSN *iobj = compile_data_alloc_insn(iseq);
- /* printf("insn_id: %d, line: %d\n", insn_id, line_no); */
+
+ /* printf("insn_id: %d, line: %d\n", insn_id, nd_line(line_node)); */
iobj->link.type = ISEQ_ELEMENT_INSN;
iobj->link.next = 0;
iobj->insn_id = insn_id;
- iobj->line_no = line_no;
+ iobj->insn_info.line_no = line_no;
+ iobj->insn_info.node_id = node_id;
+ iobj->insn_info.events = 0;
iobj->operands = argv;
iobj->operand_size = argc;
iobj->sc_state = 0;
+
+ iseq_insn_each_markable_object(iobj, iseq_insn_each_object_write_barrier, (VALUE)iseq);
+
return iobj;
}
static INSN *
-new_insn_body(rb_iseq_t *iseq, int line_no, enum ruby_vminsn_type insn_id, int argc, ...)
+new_insn_body(rb_iseq_t *iseq, int line_no, int node_id, enum ruby_vminsn_type insn_id, int argc, ...)
{
VALUE *operands = 0;
va_list argv;
if (argc > 0) {
- int i;
- va_init_list(argv, argc);
- operands = (VALUE *)compile_data_alloc(iseq, sizeof(VALUE) * argc);
- for (i = 0; i < argc; i++) {
- VALUE v = va_arg(argv, VALUE);
- operands[i] = v;
- }
- va_end(argv);
+ int i;
+ va_start(argv, argc);
+ operands = compile_data_alloc2(iseq, sizeof(VALUE), argc);
+ for (i = 0; i < argc; i++) {
+ VALUE v = va_arg(argv, VALUE);
+ operands[i] = v;
+ }
+ va_end(argv);
}
- return new_insn_core(iseq, line_no, insn_id, argc, operands);
+ return new_insn_core(iseq, line_no, node_id, insn_id, argc, operands);
}
-static struct rb_call_info *
-new_callinfo(rb_iseq_t *iseq, ID mid, int argc, unsigned int flag, struct rb_call_info_kw_arg *kw_arg, int has_blockiseq)
+static INSN *
+insn_replace_with_operands(rb_iseq_t *iseq, INSN *iobj, enum ruby_vminsn_type insn_id, int argc, ...)
{
- size_t size = kw_arg != NULL ? sizeof(struct rb_call_info_with_kwarg) : sizeof(struct rb_call_info);
- struct rb_call_info *ci = (struct rb_call_info *)compile_data_alloc(iseq, size);
- struct rb_call_info_with_kwarg *ci_kw = (struct rb_call_info_with_kwarg *)ci;
+ VALUE *operands = 0;
+ va_list argv;
+ if (argc > 0) {
+ int i;
+ va_start(argv, argc);
+ operands = compile_data_alloc2(iseq, sizeof(VALUE), argc);
+ for (i = 0; i < argc; i++) {
+ VALUE v = va_arg(argv, VALUE);
+ operands[i] = v;
+ }
+ va_end(argv);
+ }
+
+ iobj->insn_id = insn_id;
+ iobj->operand_size = argc;
+ iobj->operands = operands;
+ iseq_insn_each_markable_object(iobj, iseq_insn_each_object_write_barrier, (VALUE)iseq);
- ci->mid = mid;
- ci->flag = flag;
- ci->orig_argc = argc;
+ return iobj;
+}
+
+static const struct rb_callinfo *
+new_callinfo(rb_iseq_t *iseq, ID mid, int argc, unsigned int flag, struct rb_callinfo_kwarg *kw_arg, int has_blockiseq)
+{
+ VM_ASSERT(argc >= 0);
if (kw_arg) {
- ci->flag |= VM_CALL_KWARG;
- ci_kw->kw_arg = kw_arg;
- ci->orig_argc += kw_arg->keyword_len;
- iseq->body->ci_kw_size++;
- }
- else {
- iseq->body->ci_size++;
+ flag |= VM_CALL_KWARG;
+ argc += kw_arg->keyword_len;
}
- if (!(ci->flag & (VM_CALL_ARGS_SPLAT | VM_CALL_ARGS_BLOCKARG)) &&
- kw_arg == NULL && !has_blockiseq) {
- ci->flag |= VM_CALL_ARGS_SIMPLE;
+ if (!(flag & (VM_CALL_ARGS_SPLAT | VM_CALL_ARGS_BLOCKARG | VM_CALL_KWARG | VM_CALL_KW_SPLAT | VM_CALL_FORWARDING))
+ && !has_blockiseq) {
+ flag |= VM_CALL_ARGS_SIMPLE;
}
+
+ ISEQ_BODY(iseq)->ci_size++;
+ const struct rb_callinfo *ci = vm_ci_new(mid, flag, argc, kw_arg);
+ RB_OBJ_WRITTEN(iseq, Qundef, ci);
return ci;
}
static INSN *
-new_insn_send(rb_iseq_t *iseq, int line_no, ID id, VALUE argc, const rb_iseq_t *blockiseq, VALUE flag, struct rb_call_info_kw_arg *keywords)
+new_insn_send(rb_iseq_t *iseq, int line_no, int node_id, ID id, VALUE argc, const rb_iseq_t *blockiseq, VALUE flag, struct rb_callinfo_kwarg *keywords)
{
- VALUE *operands = (VALUE *)compile_data_alloc(iseq, sizeof(VALUE) * 3);
- operands[0] = (VALUE)new_callinfo(iseq, id, FIX2INT(argc), FIX2INT(flag), keywords, blockiseq != NULL);
- operands[1] = Qfalse; /* cache */
- operands[2] = (VALUE)blockiseq;
- return new_insn_core(iseq, line_no, BIN(send), 3, operands);
+ VALUE *operands = compile_data_calloc2(iseq, sizeof(VALUE), 2);
+ VALUE ci = (VALUE)new_callinfo(iseq, id, FIX2INT(argc), FIX2INT(flag), keywords, blockiseq != NULL);
+ operands[0] = ci;
+ operands[1] = (VALUE)blockiseq;
+ if (blockiseq) {
+ RB_OBJ_WRITTEN(iseq, Qundef, blockiseq);
+ }
+
+ INSN *insn;
+
+ if (vm_ci_flag((struct rb_callinfo *)ci) & VM_CALL_FORWARDING) {
+ insn = new_insn_core(iseq, line_no, node_id, BIN(sendforward), 2, operands);
+ }
+ else {
+ insn = new_insn_core(iseq, line_no, node_id, BIN(send), 2, operands);
+ }
+
+ RB_OBJ_WRITTEN(iseq, Qundef, ci);
+ RB_GC_GUARD(ci);
+ return insn;
}
static rb_iseq_t *
-new_child_iseq(rb_iseq_t *iseq, NODE *node,
- VALUE name, const rb_iseq_t *parent, enum iseq_type type, int line_no)
+new_child_iseq(rb_iseq_t *iseq, const NODE *const node,
+ VALUE name, const rb_iseq_t *parent, enum rb_iseq_type type, int line_no)
{
rb_iseq_t *ret_iseq;
+ VALUE ast_value = rb_ruby_ast_new(node);
debugs("[new_child_iseq]> ---------------------------------------\n");
- ret_iseq = rb_iseq_new_with_opt(node, name,
- iseq_path(iseq), iseq_absolute_path(iseq),
- INT2FIX(line_no), parent, type, ISEQ_COMPILE_DATA(iseq)->option);
+ int isolated_depth = ISEQ_COMPILE_DATA(iseq)->isolated_depth;
+ ret_iseq = rb_iseq_new_with_opt(ast_value, name,
+ rb_iseq_path(iseq), rb_iseq_realpath(iseq),
+ line_no, parent,
+ isolated_depth ? isolated_depth + 1 : 0,
+ type, ISEQ_COMPILE_DATA(iseq)->option,
+ ISEQ_BODY(iseq)->variable.script_lines);
debugs("[new_child_iseq]< ---------------------------------------\n");
- iseq_add_mark_object(iseq, (VALUE)ret_iseq);
return ret_iseq;
}
+static rb_iseq_t *
+new_child_iseq_with_callback(rb_iseq_t *iseq, const struct rb_iseq_new_with_callback_callback_func *ifunc,
+ VALUE name, const rb_iseq_t *parent, enum rb_iseq_type type, int line_no)
+{
+ rb_iseq_t *ret_iseq;
+
+ debugs("[new_child_iseq_with_callback]> ---------------------------------------\n");
+ ret_iseq = rb_iseq_new_with_callback(ifunc, name,
+ rb_iseq_path(iseq), rb_iseq_realpath(iseq),
+ line_no, parent, type, ISEQ_COMPILE_DATA(iseq)->option);
+ debugs("[new_child_iseq_with_callback]< ---------------------------------------\n");
+ return ret_iseq;
+}
+
+static void
+set_catch_except_p(rb_iseq_t *iseq)
+{
+ RUBY_ASSERT(ISEQ_COMPILE_DATA(iseq));
+ ISEQ_COMPILE_DATA(iseq)->catch_except_p = true;
+ if (ISEQ_BODY(iseq)->parent_iseq != NULL) {
+ if (ISEQ_COMPILE_DATA(ISEQ_BODY(iseq)->parent_iseq)) {
+ set_catch_except_p((rb_iseq_t *) ISEQ_BODY(iseq)->parent_iseq);
+ }
+ }
+}
+
+/* Set body->catch_except_p to true if the ISeq may catch an exception. If it is false,
+ JIT-ed code may be optimized. If we are extremely conservative, we should set true
+ if catch table exists. But we want to optimize while loop, which always has catch
+ table entries for break/next/redo.
+
+ So this function sets true for limited ISeqs with break/next/redo catch table entries
+ whose child ISeq would really raise an exception. */
+static void
+update_catch_except_flags(rb_iseq_t *iseq, struct rb_iseq_constant_body *body)
+{
+ unsigned int pos;
+ size_t i;
+ int insn;
+ const struct iseq_catch_table *ct = body->catch_table;
+
+ /* This assumes that a block has parent_iseq which may catch an exception from the block, and that
+ BREAK/NEXT/REDO catch table entries are used only when `throw` insn is used in the block. */
+ pos = 0;
+ while (pos < body->iseq_size) {
+ insn = rb_vm_insn_decode(body->iseq_encoded[pos]);
+ if (insn == BIN(throw)) {
+ set_catch_except_p(iseq);
+ break;
+ }
+ pos += insn_len(insn);
+ }
+
+ if (ct == NULL)
+ return;
+
+ for (i = 0; i < ct->size; i++) {
+ const struct iseq_catch_table_entry *entry =
+ UNALIGNED_MEMBER_PTR(ct, entries[i]);
+ if (entry->type != CATCH_TYPE_BREAK
+ && entry->type != CATCH_TYPE_NEXT
+ && entry->type != CATCH_TYPE_REDO) {
+ RUBY_ASSERT(ISEQ_COMPILE_DATA(iseq));
+ ISEQ_COMPILE_DATA(iseq)->catch_except_p = true;
+ break;
+ }
+ }
+}
+
+static void
+iseq_insert_nop_between_end_and_cont(rb_iseq_t *iseq)
+{
+ VALUE catch_table_ary = ISEQ_COMPILE_DATA(iseq)->catch_table_ary;
+ if (NIL_P(catch_table_ary)) return;
+ unsigned int i, tlen = (unsigned int)RARRAY_LEN(catch_table_ary);
+ const VALUE *tptr = RARRAY_CONST_PTR(catch_table_ary);
+ for (i = 0; i < tlen; i++) {
+ const VALUE *ptr = RARRAY_CONST_PTR(tptr[i]);
+ LINK_ELEMENT *end = (LINK_ELEMENT *)(ptr[2] & ~1);
+ LINK_ELEMENT *cont = (LINK_ELEMENT *)(ptr[4] & ~1);
+ LINK_ELEMENT *e;
+
+ enum rb_catch_type ct = (enum rb_catch_type)(ptr[0] & 0xffff);
+
+ if (ct != CATCH_TYPE_BREAK
+ && ct != CATCH_TYPE_NEXT
+ && ct != CATCH_TYPE_REDO) {
+
+ for (e = end; e && (IS_LABEL(e) || IS_TRACE(e)); e = e->next) {
+ if (e == cont) {
+ INSN *nop = new_insn_core(iseq, 0, -1, BIN(nop), 0, 0);
+ ELEM_INSERT_NEXT(end, &nop->link);
+ break;
+ }
+ }
+ }
+ }
+
+ RB_GC_GUARD(catch_table_ary);
+}
+
static int
-iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
+iseq_setup_insn(rb_iseq_t *iseq, LINK_ANCHOR *const anchor)
{
+ if (RTEST(ISEQ_COMPILE_DATA(iseq)->err_info))
+ return COMPILE_NG;
+
/* debugs("[compile step 2] (iseq_array_to_linkedlist)\n"); */
if (compile_debug > 5)
- dump_disasm_list(FIRST_ELEMENT(anchor));
+ dump_disasm_list(FIRST_ELEMENT(anchor));
debugs("[compile step 3.1 (iseq_optimize)]\n");
iseq_optimize(iseq, anchor);
if (compile_debug > 5)
- dump_disasm_list(FIRST_ELEMENT(anchor));
+ dump_disasm_list(FIRST_ELEMENT(anchor));
if (ISEQ_COMPILE_DATA(iseq)->option->instructions_unification) {
- debugs("[compile step 3.2 (iseq_insns_unification)]\n");
- iseq_insns_unification(iseq, anchor);
- if (compile_debug > 5)
- dump_disasm_list(FIRST_ELEMENT(anchor));
+ debugs("[compile step 3.2 (iseq_insns_unification)]\n");
+ iseq_insns_unification(iseq, anchor);
+ if (compile_debug > 5)
+ dump_disasm_list(FIRST_ELEMENT(anchor));
}
- if (ISEQ_COMPILE_DATA(iseq)->option->stack_caching) {
- debugs("[compile step 3.3 (iseq_set_sequence_stackcaching)]\n");
- iseq_set_sequence_stackcaching(iseq, anchor);
- if (compile_debug > 5)
- dump_disasm_list(FIRST_ELEMENT(anchor));
- }
+ debugs("[compile step 3.4 (iseq_insert_nop_between_end_and_cont)]\n");
+ iseq_insert_nop_between_end_and_cont(iseq);
+ if (compile_debug > 5)
+ dump_disasm_list(FIRST_ELEMENT(anchor));
+
+ return COMPILE_OK;
+}
+
+static int
+iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *const anchor)
+{
+ if (RTEST(ISEQ_COMPILE_DATA(iseq)->err_info))
+ return COMPILE_NG;
debugs("[compile step 4.1 (iseq_set_sequence)]\n");
if (!iseq_set_sequence(iseq, anchor)) return COMPILE_NG;
if (compile_debug > 5)
- dump_disasm_list(FIRST_ELEMENT(anchor));
+ dump_disasm_list(FIRST_ELEMENT(anchor));
debugs("[compile step 4.2 (iseq_set_exception_table)]\n");
if (!iseq_set_exception_table(iseq)) return COMPILE_NG;
@@ -1132,10 +1685,29 @@ iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
debugs("[compile step 5 (iseq_translate_threaded_code)] \n");
if (!rb_iseq_translate_threaded_code(iseq)) return COMPILE_NG;
+ debugs("[compile step 6 (update_catch_except_flags)] \n");
+ RUBY_ASSERT(ISEQ_COMPILE_DATA(iseq));
+ update_catch_except_flags(iseq, ISEQ_BODY(iseq));
+
+ debugs("[compile step 6.1 (remove unused catch tables)] \n");
+ RUBY_ASSERT(ISEQ_COMPILE_DATA(iseq));
+ if (!ISEQ_COMPILE_DATA(iseq)->catch_except_p && ISEQ_BODY(iseq)->catch_table) {
+ xfree(ISEQ_BODY(iseq)->catch_table);
+ ISEQ_BODY(iseq)->catch_table = NULL;
+ }
+
+#if VM_INSN_INFO_TABLE_IMPL == 2
+ if (ISEQ_BODY(iseq)->insns_info.succ_index_table == NULL) {
+ debugs("[compile step 7 (rb_iseq_insns_info_encode_positions)] \n");
+ rb_iseq_insns_info_encode_positions(iseq);
+ }
+#endif
+
if (compile_debug > 1) {
- VALUE str = rb_iseq_disasm(iseq);
- printf("%s\n", StringValueCStr(str));
+ VALUE str = rb_iseq_disasm(iseq);
+ printf("%s\n", StringValueCStr(str));
}
+ verify_call_cache(iseq);
debugs("[compile step: finish]\n");
return COMPILE_OK;
@@ -1144,17 +1716,9 @@ iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
static int
iseq_set_exception_local_table(rb_iseq_t *iseq)
{
- /* TODO: every id table is same -> share it.
- * Current problem is iseq_free().
- */
- ID id_dollar_bang;
- ID *ids = (ID *)ALLOC_N(ID, 1);
-
- CONST_ID(id_dollar_bang, "#$!");
- iseq->body->local_table_size = 1;
- iseq->body->local_size = iseq->body->local_table_size + 1;
- ids[0] = id_dollar_bang;
- iseq->body->local_table = ids;
+ ISEQ_BODY(iseq)->local_table_size = numberof(rb_iseq_shared_exc_local_tbl);
+ ISEQ_BODY(iseq)->local_table = rb_iseq_shared_exc_local_tbl;
+ ISEQ_BODY(iseq)->lvar_states = NULL; // $! is read-only, so don't need lvar_states
return COMPILE_OK;
}
@@ -1162,9 +1726,9 @@ static int
get_lvar_level(const rb_iseq_t *iseq)
{
int lev = 0;
- while (iseq != iseq->body->local_iseq) {
- lev++;
- iseq = iseq->body->parent_iseq;
+ while (iseq != ISEQ_BODY(iseq)->local_iseq) {
+ lev++;
+ iseq = ISEQ_BODY(iseq)->parent_iseq;
}
return lev;
}
@@ -1174,10 +1738,10 @@ get_dyna_var_idx_at_raw(const rb_iseq_t *iseq, ID id)
{
unsigned int i;
- for (i = 0; i < iseq->body->local_table_size; i++) {
- if (iseq->body->local_table[i] == id) {
- return (int)i;
- }
+ for (i = 0; i < ISEQ_BODY(iseq)->local_table_size; i++) {
+ if (ISEQ_BODY(iseq)->local_table[i] == id) {
+ return (int)i;
+ }
}
return -1;
}
@@ -1185,10 +1749,11 @@ get_dyna_var_idx_at_raw(const rb_iseq_t *iseq, ID id)
static int
get_local_var_idx(const rb_iseq_t *iseq, ID id)
{
- int idx = get_dyna_var_idx_at_raw(iseq->body->local_iseq, id);
+ int idx = get_dyna_var_idx_at_raw(ISEQ_BODY(iseq)->local_iseq, id);
if (idx < 0) {
- rb_bug("get_local_var_idx: %d", idx);
+ COMPILE_ERROR(iseq, ISEQ_LAST_LINE(iseq),
+ "get_local_var_idx: %d", idx);
}
return idx;
@@ -1198,311 +1763,594 @@ static int
get_dyna_var_idx(const rb_iseq_t *iseq, ID id, int *level, int *ls)
{
int lv = 0, idx = -1;
+ const rb_iseq_t *const topmost_iseq = iseq;
while (iseq) {
- idx = get_dyna_var_idx_at_raw(iseq, id);
- if (idx >= 0) {
- break;
- }
- iseq = iseq->body->parent_iseq;
- lv++;
+ idx = get_dyna_var_idx_at_raw(iseq, id);
+ if (idx >= 0) {
+ break;
+ }
+ iseq = ISEQ_BODY(iseq)->parent_iseq;
+ lv++;
}
if (idx < 0) {
- rb_bug("get_dyna_var_idx: -1");
+ COMPILE_ERROR(topmost_iseq, ISEQ_LAST_LINE(topmost_iseq),
+ "get_dyna_var_idx: -1");
}
*level = lv;
- *ls = iseq->body->local_size;
+ *ls = ISEQ_BODY(iseq)->local_table_size;
return idx;
}
+static int
+iseq_local_block_param_p(const rb_iseq_t *iseq, unsigned int idx, unsigned int level)
+{
+ const struct rb_iseq_constant_body *body;
+ while (level > 0) {
+ iseq = ISEQ_BODY(iseq)->parent_iseq;
+ level--;
+ }
+ body = ISEQ_BODY(iseq);
+ if (body->local_iseq == iseq && /* local variables */
+ body->param.flags.has_block &&
+ body->local_table_size - body->param.block_start == idx) {
+ return TRUE;
+ }
+ else {
+ return FALSE;
+ }
+}
+
+static int
+iseq_block_param_id_p(const rb_iseq_t *iseq, ID id, int *pidx, int *plevel)
+{
+ int level, ls;
+ int idx = get_dyna_var_idx(iseq, id, &level, &ls);
+ if (iseq_local_block_param_p(iseq, ls - idx, level)) {
+ *pidx = ls - idx;
+ *plevel = level;
+ return TRUE;
+ }
+ else {
+ return FALSE;
+ }
+}
+
static void
-iseq_calc_param_size(rb_iseq_t *iseq)
+access_outer_variables(const rb_iseq_t *iseq, int level, ID id, bool write)
+{
+ int isolated_depth = ISEQ_COMPILE_DATA(iseq)->isolated_depth;
+
+ if (isolated_depth && level >= isolated_depth) {
+ if (id == rb_intern("yield")) {
+ COMPILE_ERROR(iseq, ISEQ_LAST_LINE(iseq), "can not yield from isolated Proc");
+ }
+ else {
+ COMPILE_ERROR(iseq, ISEQ_LAST_LINE(iseq), "can not access variable '%s' from isolated Proc", rb_id2name(id));
+ }
+ }
+
+ for (int i=0; i<level; i++) {
+ VALUE val;
+ struct rb_id_table *ovs = ISEQ_BODY(iseq)->outer_variables;
+
+ if (!ovs) {
+ ovs = ISEQ_BODY(iseq)->outer_variables = rb_id_table_create(8);
+ }
+
+ if (rb_id_table_lookup(ISEQ_BODY(iseq)->outer_variables, id, &val)) {
+ if (write && !val) {
+ rb_id_table_insert(ISEQ_BODY(iseq)->outer_variables, id, Qtrue);
+ }
+ }
+ else {
+ rb_id_table_insert(ISEQ_BODY(iseq)->outer_variables, id, RBOOL(write));
+ }
+
+ iseq = ISEQ_BODY(iseq)->parent_iseq;
+ }
+}
+
+static ID
+iseq_lvar_id(const rb_iseq_t *iseq, int idx, int level)
+{
+ for (int i=0; i<level; i++) {
+ iseq = ISEQ_BODY(iseq)->parent_iseq;
+ }
+
+ ID id = ISEQ_BODY(iseq)->local_table[ISEQ_BODY(iseq)->local_table_size - idx];
+ // fprintf(stderr, "idx:%d level:%d ID:%s\n", idx, level, rb_id2name(id));
+ return id;
+}
+
+static void
+update_lvar_state(const rb_iseq_t *iseq, int level, int idx)
+{
+ for (int i=0; i<level; i++) {
+ iseq = ISEQ_BODY(iseq)->parent_iseq;
+ }
+
+ enum lvar_state *states = ISEQ_BODY(iseq)->lvar_states;
+ int table_idx = ISEQ_BODY(iseq)->local_table_size - idx;
+ switch (states[table_idx]) {
+ case lvar_uninitialized:
+ states[table_idx] = lvar_initialized;
+ break;
+ case lvar_initialized:
+ states[table_idx] = lvar_reassigned;
+ break;
+ case lvar_reassigned:
+ /* nothing */
+ break;
+ default:
+ rb_bug("unreachable");
+ }
+}
+
+static int
+iseq_set_parameters_lvar_state(const rb_iseq_t *iseq)
+{
+ for (unsigned int i=0; i<ISEQ_BODY(iseq)->param.size; i++) {
+ ISEQ_BODY(iseq)->lvar_states[i] = lvar_initialized;
+ }
+
+ int lead_num = ISEQ_BODY(iseq)->param.lead_num;
+ int opt_num = ISEQ_BODY(iseq)->param.opt_num;
+ for (int i=0; i<opt_num; i++) {
+ ISEQ_BODY(iseq)->lvar_states[lead_num + i] = lvar_uninitialized;
+ }
+
+ return COMPILE_OK;
+}
+
+static void
+iseq_add_getlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, const NODE *const line_node, int idx, int level)
{
- if (iseq->body->param.flags.has_opt ||
- iseq->body->param.flags.has_post ||
- iseq->body->param.flags.has_rest ||
- iseq->body->param.flags.has_block ||
- iseq->body->param.flags.has_kw ||
- iseq->body->param.flags.has_kwrest) {
-
- if (iseq->body->param.flags.has_block) {
- iseq->body->param.size = iseq->body->param.block_start + 1;
- }
- else if (iseq->body->param.flags.has_kwrest) {
- iseq->body->param.size = iseq->body->param.keyword->rest_start + 1;
- }
- else if (iseq->body->param.flags.has_kw) {
- iseq->body->param.size = iseq->body->param.keyword->bits_start + 1;
- }
- else if (iseq->body->param.flags.has_post) {
- iseq->body->param.size = iseq->body->param.post_start + iseq->body->param.post_num;
- }
- else if (iseq->body->param.flags.has_rest) {
- iseq->body->param.size = iseq->body->param.rest_start + 1;
- }
- else if (iseq->body->param.flags.has_opt) {
- iseq->body->param.size = iseq->body->param.lead_num + iseq->body->param.opt_num;
- }
- else {
- rb_bug("unreachable");
- }
+ if (iseq_local_block_param_p(iseq, idx, level)) {
+ ADD_INSN2(seq, line_node, getblockparam, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level));
}
else {
- iseq->body->param.size = iseq->body->param.lead_num;
+ ADD_INSN2(seq, line_node, getlocal, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level));
}
+ if (level > 0) access_outer_variables(iseq, level, iseq_lvar_id(iseq, idx, level), Qfalse);
}
static void
-iseq_set_arguments_keywords(rb_iseq_t *iseq, LINK_ANCHOR *optargs, const struct rb_args_info *args)
+iseq_add_setlocal(rb_iseq_t *iseq, LINK_ANCHOR *const seq, const NODE *const line_node, int idx, int level)
{
- NODE *node = args->kw_args;
+ if (iseq_local_block_param_p(iseq, idx, level)) {
+ ADD_INSN2(seq, line_node, setblockparam, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level));
+ }
+ else {
+ ADD_INSN2(seq, line_node, setlocal, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level));
+ }
+ update_lvar_state(iseq, level, idx);
+ if (level > 0) access_outer_variables(iseq, level, iseq_lvar_id(iseq, idx, level), Qtrue);
+}
+
+
+
+static void
+iseq_calc_param_size(rb_iseq_t *iseq)
+{
+ struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
+ if (body->param.flags.has_opt ||
+ body->param.flags.has_post ||
+ body->param.flags.has_rest ||
+ body->param.flags.has_block ||
+ body->param.flags.has_kw ||
+ body->param.flags.has_kwrest) {
+
+ if (body->param.flags.has_block) {
+ body->param.size = body->param.block_start + 1;
+ }
+ else if (body->param.flags.has_kwrest) {
+ body->param.size = body->param.keyword->rest_start + 1;
+ }
+ else if (body->param.flags.has_kw) {
+ body->param.size = body->param.keyword->bits_start + 1;
+ }
+ else if (body->param.flags.has_post) {
+ body->param.size = body->param.post_start + body->param.post_num;
+ }
+ else if (body->param.flags.has_rest) {
+ body->param.size = body->param.rest_start + 1;
+ }
+ else if (body->param.flags.has_opt) {
+ body->param.size = body->param.lead_num + body->param.opt_num;
+ }
+ else {
+ UNREACHABLE;
+ }
+ }
+ else {
+ body->param.size = body->param.lead_num;
+ }
+}
+
+static int
+iseq_set_arguments_keywords(rb_iseq_t *iseq, LINK_ANCHOR *const optargs,
+ const struct rb_args_info *args, int arg_size)
+{
+ const rb_node_kw_arg_t *node = args->kw_args;
+ struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
struct rb_iseq_param_keyword *keyword;
- const VALUE default_values = rb_ary_tmp_new(1);
+ const VALUE default_values = rb_ary_hidden_new(1);
const VALUE complex_mark = rb_str_tmp_new(0);
int kw = 0, rkw = 0, di = 0, i;
- iseq->body->param.flags.has_kw = TRUE;
- iseq->body->param.keyword = keyword = ZALLOC_N(struct rb_iseq_param_keyword, 1);
- keyword->bits_start = get_dyna_var_idx_at_raw(iseq, args->kw_rest_arg->nd_vid);
+ body->param.flags.has_kw = TRUE;
+ body->param.keyword = keyword = ZALLOC_N(struct rb_iseq_param_keyword, 1);
+
+ while (node) {
+ kw++;
+ node = node->nd_next;
+ }
+ arg_size += kw;
+ keyword->bits_start = arg_size++;
+ node = args->kw_args;
while (node) {
- NODE *val_node = node->nd_body->nd_value;
- VALUE dv;
-
- if (val_node == (NODE *)-1) {
- ++rkw;
- }
- else {
- switch (nd_type(val_node)) {
- case NODE_LIT:
- dv = val_node->nd_lit;
- iseq_add_mark_object(iseq, dv);
- break;
- case NODE_NIL:
- dv = Qnil;
- break;
- case NODE_TRUE:
- dv = Qtrue;
- break;
- case NODE_FALSE:
- dv = Qfalse;
- break;
- default:
- COMPILE_POPED(optargs, "kwarg", node); /* nd_type(node) == NODE_KW_ARG */
- dv = complex_mark;
- }
-
- keyword->num = ++di;
- rb_ary_push(default_values, dv);
- }
-
- kw++;
- node = node->nd_next;
+ const NODE *val_node = get_nd_value(node->nd_body);
+ VALUE dv;
+
+ if (val_node == NODE_SPECIAL_REQUIRED_KEYWORD) {
+ ++rkw;
+ }
+ else {
+ switch (nd_type(val_node)) {
+ case NODE_SYM:
+ dv = rb_node_sym_string_val(val_node);
+ break;
+ case NODE_REGX:
+ dv = rb_node_regx_string_val(val_node);
+ break;
+ case NODE_LINE:
+ dv = rb_node_line_lineno_val(val_node);
+ break;
+ case NODE_INTEGER:
+ dv = rb_node_integer_literal_val(val_node);
+ break;
+ case NODE_FLOAT:
+ dv = rb_node_float_literal_val(val_node);
+ break;
+ case NODE_RATIONAL:
+ dv = rb_node_rational_literal_val(val_node);
+ break;
+ case NODE_IMAGINARY:
+ dv = rb_node_imaginary_literal_val(val_node);
+ break;
+ case NODE_ENCODING:
+ dv = rb_node_encoding_val(val_node);
+ break;
+ case NODE_NIL:
+ dv = Qnil;
+ break;
+ case NODE_TRUE:
+ dv = Qtrue;
+ break;
+ case NODE_FALSE:
+ dv = Qfalse;
+ break;
+ default:
+ NO_CHECK(COMPILE_POPPED(optargs, "kwarg", RNODE(node))); /* nd_type_p(node, NODE_KW_ARG) */
+ dv = complex_mark;
+ }
+
+ keyword->num = ++di;
+ rb_ary_push(default_values, dv);
+ }
+
+ node = node->nd_next;
}
keyword->num = kw;
- if (args->kw_rest_arg->nd_cflag != 0) {
- keyword->rest_start = get_dyna_var_idx_at_raw(iseq, args->kw_rest_arg->nd_cflag);
- iseq->body->param.flags.has_kwrest = TRUE;
+ if (RNODE_DVAR(args->kw_rest_arg)->nd_vid != 0) {
+ ID kw_id = ISEQ_BODY(iseq)->local_table[arg_size];
+ keyword->rest_start = arg_size++;
+ body->param.flags.has_kwrest = TRUE;
+
+ if (kw_id == idPow) body->param.flags.anon_kwrest = TRUE;
}
keyword->required_num = rkw;
- keyword->table = &iseq->body->local_table[keyword->bits_start - keyword->num];
+ keyword->table = &body->local_table[keyword->bits_start - keyword->num];
- {
- VALUE *dvs = ALLOC_N(VALUE, RARRAY_LEN(default_values));
+ if (RARRAY_LEN(default_values)) {
+ VALUE *dvs = ALLOC_N(VALUE, RARRAY_LEN(default_values));
- for (i = 0; i < RARRAY_LEN(default_values); i++) {
- VALUE dv = RARRAY_AREF(default_values, i);
- if (dv == complex_mark) dv = Qundef;
- dvs[i] = dv;
- }
+ for (i = 0; i < RARRAY_LEN(default_values); i++) {
+ VALUE dv = RARRAY_AREF(default_values, i);
+ if (dv == complex_mark) dv = Qundef;
+ if (!SPECIAL_CONST_P(dv)) rb_ractor_make_shareable(dv);
+ RB_OBJ_WRITE(iseq, &dvs[i], dv);
+ }
- keyword->default_values = dvs;
+ keyword->default_values = dvs;
+ }
+ return arg_size;
+}
+
+static void
+iseq_set_use_block(rb_iseq_t *iseq)
+{
+ struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
+ if (!body->param.flags.use_block) {
+ body->param.flags.use_block = 1;
+
+ rb_vm_t *vm = GET_VM();
+
+ if (!rb_warning_category_enabled_p(RB_WARN_CATEGORY_STRICT_UNUSED_BLOCK)) {
+ st_data_t key = (st_data_t)rb_intern_str(body->location.label); // String -> ID
+ set_insert(vm->unused_block_warning_table, key);
+ }
}
}
static int
-iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args)
+iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *const optargs, const NODE *const node_args)
{
debugs("iseq_set_arguments: %s\n", node_args ? "" : "0");
if (node_args) {
- struct rb_args_info *args = node_args->nd_ainfo;
- ID rest_id = 0;
- int last_comma = 0;
- ID block_id = 0;
-
- EXPECT_NODE("iseq_set_arguments", node_args, NODE_ARGS);
-
- iseq->body->param.lead_num = (int)args->pre_args_num;
- if (iseq->body->param.lead_num > 0) iseq->body->param.flags.has_lead = TRUE;
- debugs(" - argc: %d\n", iseq->body->param.lead_num);
-
- rest_id = args->rest_arg;
- if (rest_id == 1) {
- last_comma = 1;
- rest_id = 0;
- }
- block_id = args->block_arg;
-
- if (args->first_post_arg) {
- iseq->body->param.post_start = get_dyna_var_idx_at_raw(iseq, args->first_post_arg);
- iseq->body->param.post_num = args->post_args_num;
- iseq->body->param.flags.has_post = TRUE;
- }
-
- if (args->opt_args) {
- NODE *node = args->opt_args;
- LABEL *label;
- VALUE labels = rb_ary_tmp_new(1);
- VALUE *opt_table;
- int i = 0, j;
-
- while (node) {
- label = NEW_LABEL(nd_line(node));
- rb_ary_push(labels, (VALUE)label | 1);
- ADD_LABEL(optargs, label);
- COMPILE_POPED(optargs, "optarg", node->nd_body);
- node = node->nd_next;
- i += 1;
- }
-
- /* last label */
- label = NEW_LABEL(nd_line(node_args));
- rb_ary_push(labels, (VALUE)label | 1);
- ADD_LABEL(optargs, label);
-
- opt_table = ALLOC_N(VALUE, i+1);
-
- MEMCPY(opt_table, RARRAY_CONST_PTR(labels), VALUE, i+1);
- for (j = 0; j < i+1; j++) {
- opt_table[j] &= ~1;
- }
- rb_ary_clear(labels);
-
- iseq->body->param.flags.has_opt = TRUE;
- iseq->body->param.opt_num = i;
- iseq->body->param.opt_table = opt_table;
- }
-
- if (args->kw_args) {
- iseq_set_arguments_keywords(iseq, optargs, args);
- }
- else if (args->kw_rest_arg) {
- struct rb_iseq_param_keyword *keyword = ZALLOC_N(struct rb_iseq_param_keyword, 1);
- keyword->rest_start = get_dyna_var_idx_at_raw(iseq, args->kw_rest_arg->nd_vid);
- iseq->body->param.keyword = keyword;
- iseq->body->param.flags.has_kwrest = TRUE;
- }
-
- if (args->pre_init) { /* m_init */
- COMPILE_POPED(optargs, "init arguments (m)", args->pre_init);
- }
- if (args->post_init) { /* p_init */
- COMPILE_POPED(optargs, "init arguments (p)", args->post_init);
- }
-
- if (rest_id) {
- iseq->body->param.rest_start = get_dyna_var_idx_at_raw(iseq, rest_id);
- iseq->body->param.flags.has_rest = TRUE;
- assert(iseq->body->param.rest_start != -1);
-
- if (iseq->body->param.post_start == 0) { /* TODO: why that? */
- iseq->body->param.post_start = iseq->body->param.rest_start + 1;
- }
- }
-
- if (block_id) {
- iseq->body->param.block_start = get_dyna_var_idx_at_raw(iseq, block_id);
- iseq->body->param.flags.has_block = TRUE;
- }
-
- iseq_calc_param_size(iseq);
-
- if (iseq->body->type == ISEQ_TYPE_BLOCK) {
- if (iseq->body->param.flags.has_opt == FALSE &&
- iseq->body->param.flags.has_post == FALSE &&
- iseq->body->param.flags.has_rest == FALSE &&
- iseq->body->param.flags.has_kw == FALSE &&
- iseq->body->param.flags.has_kwrest == FALSE) {
-
- if (iseq->body->param.lead_num == 1 && last_comma == 0) {
- /* {|a|} */
- iseq->body->param.flags.ambiguous_param0 = TRUE;
- }
- }
- }
+ struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
+ struct rb_args_info *args = &RNODE_ARGS(node_args)->nd_ainfo;
+ ID rest_id = 0;
+ int last_comma = 0;
+ ID block_id = 0;
+ int arg_size;
+
+ EXPECT_NODE("iseq_set_arguments", node_args, NODE_ARGS, COMPILE_NG);
+
+ body->param.lead_num = arg_size = (int)args->pre_args_num;
+ if (body->param.lead_num > 0) body->param.flags.has_lead = TRUE;
+ debugs(" - argc: %d\n", body->param.lead_num);
+
+ rest_id = args->rest_arg;
+ if (rest_id == NODE_SPECIAL_EXCESSIVE_COMMA) {
+ last_comma = 1;
+ rest_id = 0;
+ }
+ block_id = args->block_arg;
+
+ bool optimized_forward = (args->forwarding && args->pre_args_num == 0 && !args->opt_args);
+
+ if (optimized_forward) {
+ rest_id = 0;
+ block_id = 0;
+ }
+
+ if (args->opt_args) {
+ const rb_node_opt_arg_t *node = args->opt_args;
+ LABEL *label;
+ VALUE labels = rb_ary_hidden_new(1);
+ VALUE *opt_table;
+ int i = 0, j;
+
+ while (node) {
+ label = NEW_LABEL(nd_line(RNODE(node)));
+ rb_ary_push(labels, (VALUE)label | 1);
+ ADD_LABEL(optargs, label);
+ NO_CHECK(COMPILE_POPPED(optargs, "optarg", node->nd_body));
+ node = node->nd_next;
+ i += 1;
+ }
+
+ /* last label */
+ label = NEW_LABEL(nd_line(node_args));
+ rb_ary_push(labels, (VALUE)label | 1);
+ ADD_LABEL(optargs, label);
+
+ opt_table = ALLOC_N(VALUE, i+1);
+
+ MEMCPY(opt_table, RARRAY_CONST_PTR(labels), VALUE, i+1);
+ for (j = 0; j < i+1; j++) {
+ opt_table[j] &= ~1;
+ }
+ rb_ary_clear(labels);
+
+ body->param.flags.has_opt = TRUE;
+ body->param.opt_num = i;
+ body->param.opt_table = opt_table;
+ arg_size += i;
+ }
+
+ if (rest_id) {
+ body->param.rest_start = arg_size++;
+ body->param.flags.has_rest = TRUE;
+ if (rest_id == '*') body->param.flags.anon_rest = TRUE;
+ RUBY_ASSERT(body->param.rest_start != -1);
+ }
+
+ if (args->first_post_arg) {
+ body->param.post_start = arg_size;
+ body->param.post_num = args->post_args_num;
+ body->param.flags.has_post = TRUE;
+ arg_size += args->post_args_num;
+
+ if (body->param.flags.has_rest) { /* TODO: why that? */
+ body->param.post_start = body->param.rest_start + 1;
+ }
+ }
+
+ if (args->kw_args) {
+ arg_size = iseq_set_arguments_keywords(iseq, optargs, args, arg_size);
+ }
+ else if (args->kw_rest_arg && !optimized_forward) {
+ ID kw_id = ISEQ_BODY(iseq)->local_table[arg_size];
+ struct rb_iseq_param_keyword *keyword = ZALLOC_N(struct rb_iseq_param_keyword, 1);
+ keyword->rest_start = arg_size++;
+ body->param.keyword = keyword;
+ body->param.flags.has_kwrest = TRUE;
+
+ static ID anon_kwrest = 0;
+ if (!anon_kwrest) anon_kwrest = rb_intern("**");
+ if (kw_id == anon_kwrest) body->param.flags.anon_kwrest = TRUE;
+ }
+ else if (args->no_kwarg) {
+ body->param.flags.accepts_no_kwarg = TRUE;
+ }
+
+ if (block_id) {
+ body->param.block_start = arg_size++;
+ body->param.flags.has_block = TRUE;
+ iseq_set_use_block(iseq);
+ }
+
+ // Only optimize specifically methods like this: `foo(...)`
+ if (optimized_forward) {
+ body->param.flags.use_block = 1;
+ body->param.flags.forwardable = TRUE;
+ arg_size = 1;
+ }
+
+ iseq_calc_param_size(iseq);
+ body->param.size = arg_size;
+
+ if (args->pre_init) { /* m_init */
+ NO_CHECK(COMPILE_POPPED(optargs, "init arguments (m)", args->pre_init));
+ }
+ if (args->post_init) { /* p_init */
+ NO_CHECK(COMPILE_POPPED(optargs, "init arguments (p)", args->post_init));
+ }
+
+ if (body->type == ISEQ_TYPE_BLOCK) {
+ if (body->param.flags.has_opt == FALSE &&
+ body->param.flags.has_post == FALSE &&
+ body->param.flags.has_rest == FALSE &&
+ body->param.flags.has_kw == FALSE &&
+ body->param.flags.has_kwrest == FALSE) {
+
+ if (body->param.lead_num == 1 && last_comma == 0) {
+ /* {|a|} */
+ body->param.flags.ambiguous_param0 = TRUE;
+ }
+ }
+ }
}
return COMPILE_OK;
}
static int
-iseq_set_local_table(rb_iseq_t *iseq, const ID *tbl)
+iseq_set_local_table(rb_iseq_t *iseq, const rb_ast_id_table_t *tbl, const NODE *const node_args)
{
- int size;
+ unsigned int size = tbl ? tbl->size : 0;
+ unsigned int offset = 0;
- if (tbl) {
- size = (int)*tbl;
- tbl++;
- }
- else {
- size = 0;
+ if (node_args) {
+ struct rb_args_info *args = &RNODE_ARGS(node_args)->nd_ainfo;
+
+ // If we have a function that only has `...` as the parameter,
+ // then its local table should only be `...`
+ // FIXME: I think this should be fixed in the AST rather than special case here.
+ if (args->forwarding && args->pre_args_num == 0 && !args->opt_args) {
+ CHECK(size >= 3);
+ size -= 3;
+ offset += 3;
+ }
}
if (size > 0) {
- ID *ids = (ID *)ALLOC_N(ID, size);
- MEMCPY(ids, tbl, ID, size);
- iseq->body->local_table = ids;
- }
+ ID *ids = ALLOC_N(ID, size);
+ MEMCPY(ids, tbl->ids + offset, ID, size);
+ ISEQ_BODY(iseq)->local_table = ids;
- iseq->body->local_size = iseq->body->local_table_size = size;
- iseq->body->local_size += 1;
- /*
- if (lfp == dfp ) { // top, class, method
- dfp[-1]: svar
- else { // block
- dfp[-1]: cref
- }
- */
+ enum lvar_state *states = ALLOC_N(enum lvar_state, size);
+ // fprintf(stderr, "iseq:%p states:%p size:%d\n", iseq, states, (int)size);
+ for (unsigned int i=0; i<size; i++) {
+ states[i] = lvar_uninitialized;
+ // fprintf(stderr, "id:%s\n", rb_id2name(ISEQ_BODY(iseq)->local_table[i]));
+ }
+ ISEQ_BODY(iseq)->lvar_states = states;
+ }
+ ISEQ_BODY(iseq)->local_table_size = size;
- debugs("iseq_set_local_table: %d, %d\n", iseq->body->local_size, iseq->body->local_table_size);
+ debugs("iseq_set_local_table: %u\n", ISEQ_BODY(iseq)->local_table_size);
return COMPILE_OK;
}
-static int
-cdhash_cmp(VALUE val, VALUE lit)
+int
+rb_iseq_cdhash_cmp(VALUE val, VALUE lit)
{
- if (val == lit) return 0;
- if (SPECIAL_CONST_P(lit)) {
- return val != lit;
+ int tval, tlit;
+
+ if (val == lit) {
+ return 0;
}
- if (SPECIAL_CONST_P(val) || BUILTIN_TYPE(val) != BUILTIN_TYPE(lit)) {
- return -1;
+ else if ((tlit = OBJ_BUILTIN_TYPE(lit)) == -1) {
+ return val != lit;
}
- if (BUILTIN_TYPE(lit) == T_STRING) {
- return rb_str_hash_cmp(lit, val);
+ else if ((tval = OBJ_BUILTIN_TYPE(val)) == -1) {
+ return -1;
}
- return !rb_eql(lit, val);
-}
+ else if (tlit != tval) {
+ return -1;
+ }
+ else if (tlit == T_SYMBOL) {
+ return val != lit;
+ }
+ else if (tlit == T_STRING) {
+ return rb_str_hash_cmp(lit, val);
+ }
+ else if (tlit == T_BIGNUM) {
+ long x = FIX2LONG(rb_big_cmp(lit, val));
-static st_index_t
-cdhash_hash(VALUE a)
-{
- if (SPECIAL_CONST_P(a)) return (st_index_t)a;
- if (RB_TYPE_P(a, T_STRING)) return rb_str_hash(a);
- {
- VALUE hval = rb_hash(a);
- return (st_index_t)FIX2LONG(hval);
+ /* Given lit and val are both Bignum, x must be -1, 0, 1.
+ * There is no need to call rb_fix2int here. */
+ RUBY_ASSERT((x == 1) || (x == 0) || (x == -1));
+ return (int)x;
+ }
+ else if (tlit == T_FLOAT) {
+ return rb_float_cmp(lit, val);
+ }
+ else if (tlit == T_RATIONAL) {
+ const struct RRational *rat1 = RRATIONAL(val);
+ const struct RRational *rat2 = RRATIONAL(lit);
+ return rb_iseq_cdhash_cmp(rat1->num, rat2->num) || rb_iseq_cdhash_cmp(rat1->den, rat2->den);
+ }
+ else if (tlit == T_COMPLEX) {
+ const struct RComplex *comp1 = RCOMPLEX(val);
+ const struct RComplex *comp2 = RCOMPLEX(lit);
+ return rb_iseq_cdhash_cmp(comp1->real, comp2->real) || rb_iseq_cdhash_cmp(comp1->imag, comp2->imag);
+ }
+ else if (tlit == T_REGEXP) {
+ return rb_reg_equal(val, lit) ? 0 : -1;
+ }
+ else {
+ UNREACHABLE_RETURN(-1);
+ }
+}
+
+st_index_t
+rb_iseq_cdhash_hash(VALUE a)
+{
+ switch (OBJ_BUILTIN_TYPE(a)) {
+ case -1:
+ case T_SYMBOL:
+ return (st_index_t)a;
+ case T_STRING:
+ return rb_str_hash(a);
+ case T_BIGNUM:
+ return FIX2LONG(rb_big_hash(a));
+ case T_FLOAT:
+ return rb_dbl_long_hash(RFLOAT_VALUE(a));
+ case T_RATIONAL:
+ return rb_rational_hash(a);
+ case T_COMPLEX:
+ return rb_complex_hash(a);
+ case T_REGEXP:
+ return NUM2LONG(rb_reg_hash(a));
+ default:
+ UNREACHABLE_RETURN(0);
}
}
static const struct st_hash_type cdhash_type = {
- cdhash_cmp,
- cdhash_hash,
+ rb_iseq_cdhash_cmp,
+ rb_iseq_cdhash_hash,
};
struct cdhash_set_label_struct {
@@ -1512,7 +2360,7 @@ struct cdhash_set_label_struct {
};
static int
-cdhash_set_label_i(VALUE key, VALUE val, void *ptr)
+cdhash_set_label_i(VALUE key, VALUE val, VALUE ptr)
{
struct cdhash_set_label_struct *data = (struct cdhash_set_label_struct *)ptr;
LABEL *lobj = (LABEL *)(val & ~1);
@@ -1520,290 +2368,578 @@ cdhash_set_label_i(VALUE key, VALUE val, void *ptr)
return ST_CONTINUE;
}
+
+static inline VALUE
+get_ivar_ic_value(rb_iseq_t *iseq,ID id)
+{
+ return INT2FIX(ISEQ_BODY(iseq)->ivc_size++);
+}
+
+static inline VALUE
+get_cvar_ic_value(rb_iseq_t *iseq,ID id)
+{
+ VALUE val;
+ struct rb_id_table *tbl = ISEQ_COMPILE_DATA(iseq)->ivar_cache_table;
+ if (tbl) {
+ if (rb_id_table_lookup(tbl,id,&val)) {
+ return val;
+ }
+ }
+ else {
+ tbl = rb_id_table_create(1);
+ ISEQ_COMPILE_DATA(iseq)->ivar_cache_table = tbl;
+ }
+ val = INT2FIX(ISEQ_BODY(iseq)->icvarc_size++);
+ rb_id_table_insert(tbl,id,val);
+ return val;
+}
+
+#define BADINSN_DUMP(anchor, list, dest) \
+ dump_disasm_list_with_cursor(FIRST_ELEMENT(anchor), list, dest)
+
+#define BADINSN_ERROR \
+ (xfree(generated_iseq), \
+ xfree(insns_info), \
+ BADINSN_DUMP(anchor, list, NULL), \
+ COMPILE_ERROR)
+
+static int
+fix_sp_depth(rb_iseq_t *iseq, LINK_ANCHOR *const anchor)
+{
+ int stack_max = 0, sp = 0, line = 0;
+ LINK_ELEMENT *list;
+
+ for (list = FIRST_ELEMENT(anchor); list; list = list->next) {
+ if (IS_LABEL(list)) {
+ LABEL *lobj = (LABEL *)list;
+ lobj->set = TRUE;
+ }
+ }
+
+ for (list = FIRST_ELEMENT(anchor); list; list = list->next) {
+ switch (list->type) {
+ case ISEQ_ELEMENT_INSN:
+ {
+ int j, len, insn;
+ const char *types;
+ VALUE *operands;
+ INSN *iobj = (INSN *)list;
+
+ /* update sp */
+ sp = calc_sp_depth(sp, iobj);
+ if (sp < 0) {
+ BADINSN_DUMP(anchor, list, NULL);
+ COMPILE_ERROR(iseq, iobj->insn_info.line_no,
+ "argument stack underflow (%d)", sp);
+ return -1;
+ }
+ if (sp > stack_max) {
+ stack_max = sp;
+ }
+
+ line = iobj->insn_info.line_no;
+ /* fprintf(stderr, "insn: %-16s, sp: %d\n", insn_name(iobj->insn_id), sp); */
+ operands = iobj->operands;
+ insn = iobj->insn_id;
+ types = insn_op_types(insn);
+ len = insn_len(insn);
+
+ /* operand check */
+ if (iobj->operand_size != len - 1) {
+ /* printf("operand size miss! (%d, %d)\n", iobj->operand_size, len); */
+ BADINSN_DUMP(anchor, list, NULL);
+ COMPILE_ERROR(iseq, iobj->insn_info.line_no,
+ "operand size miss! (%d for %d)",
+ iobj->operand_size, len - 1);
+ return -1;
+ }
+
+ for (j = 0; types[j]; j++) {
+ if (types[j] == TS_OFFSET) {
+ /* label(destination position) */
+ LABEL *lobj = (LABEL *)operands[j];
+ if (!lobj->set) {
+ BADINSN_DUMP(anchor, list, NULL);
+ COMPILE_ERROR(iseq, iobj->insn_info.line_no,
+ "unknown label: "LABEL_FORMAT, lobj->label_no);
+ return -1;
+ }
+ if (lobj->sp == -1) {
+ lobj->sp = sp;
+ }
+ else if (lobj->sp != sp) {
+ debugs("%s:%d: sp inconsistency found but ignored (" LABEL_FORMAT " sp: %d, calculated sp: %d)\n",
+ RSTRING_PTR(rb_iseq_path(iseq)), line,
+ lobj->label_no, lobj->sp, sp);
+ }
+ }
+ }
+ break;
+ }
+ case ISEQ_ELEMENT_LABEL:
+ {
+ LABEL *lobj = (LABEL *)list;
+ if (lobj->sp == -1) {
+ lobj->sp = sp;
+ }
+ else {
+ if (lobj->sp != sp) {
+ debugs("%s:%d: sp inconsistency found but ignored (" LABEL_FORMAT " sp: %d, calculated sp: %d)\n",
+ RSTRING_PTR(rb_iseq_path(iseq)), line,
+ lobj->label_no, lobj->sp, sp);
+ }
+ sp = lobj->sp;
+ }
+ break;
+ }
+ case ISEQ_ELEMENT_TRACE:
+ {
+ /* ignore */
+ break;
+ }
+ case ISEQ_ELEMENT_ADJUST:
+ {
+ ADJUST *adjust = (ADJUST *)list;
+ int orig_sp = sp;
+
+ sp = adjust->label ? adjust->label->sp : 0;
+ if (adjust->line_no != -1 && orig_sp - sp < 0) {
+ BADINSN_DUMP(anchor, list, NULL);
+ COMPILE_ERROR(iseq, adjust->line_no,
+ "iseq_set_sequence: adjust bug %d < %d",
+ orig_sp, sp);
+ return -1;
+ }
+ break;
+ }
+ default:
+ BADINSN_DUMP(anchor, list, NULL);
+ COMPILE_ERROR(iseq, line, "unknown list type: %d", list->type);
+ return -1;
+ }
+ }
+ return stack_max;
+}
+
+static int
+add_insn_info(struct iseq_insn_info_entry *insns_info, unsigned int *positions,
+ int insns_info_index, int code_index, const INSN *iobj)
+{
+ if (insns_info_index == 0 ||
+ insns_info[insns_info_index-1].line_no != iobj->insn_info.line_no ||
+#ifdef USE_ISEQ_NODE_ID
+ insns_info[insns_info_index-1].node_id != iobj->insn_info.node_id ||
+#endif
+ insns_info[insns_info_index-1].events != iobj->insn_info.events) {
+ insns_info[insns_info_index].line_no = iobj->insn_info.line_no;
+#ifdef USE_ISEQ_NODE_ID
+ insns_info[insns_info_index].node_id = iobj->insn_info.node_id;
+#endif
+ insns_info[insns_info_index].events = iobj->insn_info.events;
+ positions[insns_info_index] = code_index;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static int
+add_adjust_info(struct iseq_insn_info_entry *insns_info, unsigned int *positions,
+ int insns_info_index, int code_index, const ADJUST *adjust)
+{
+ insns_info[insns_info_index].line_no = adjust->line_no;
+ insns_info[insns_info_index].node_id = -1;
+ insns_info[insns_info_index].events = 0;
+ positions[insns_info_index] = code_index;
+ return TRUE;
+}
+
+static ID *
+array_to_idlist(VALUE arr)
+{
+ RUBY_ASSERT(RB_TYPE_P(arr, T_ARRAY));
+ long size = RARRAY_LEN(arr);
+ ID *ids = (ID *)ALLOC_N(ID, size + 1);
+ for (long i = 0; i < size; i++) {
+ VALUE sym = RARRAY_AREF(arr, i);
+ ids[i] = SYM2ID(sym);
+ }
+ ids[size] = 0;
+ return ids;
+}
+
+static VALUE
+idlist_to_array(const ID *ids)
+{
+ VALUE arr = rb_ary_new();
+ while (*ids) {
+ rb_ary_push(arr, ID2SYM(*ids++));
+ }
+ return arr;
+}
+
/**
ruby insn object list -> raw instruction sequence
*/
static int
-iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
+iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor)
{
- struct iseq_line_info_entry *line_info_table;
- unsigned int last_line = 0;
+ struct iseq_insn_info_entry *insns_info;
+ struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
+ unsigned int *positions;
LINK_ELEMENT *list;
VALUE *generated_iseq;
+ rb_event_flag_t events = 0;
+ long data = 0;
- int insn_num, code_index, line_info_index, sp, stack_max = 0, line = 0;
+ int insn_num, code_index, insns_info_index, sp = 0;
+ int stack_max = fix_sp_depth(iseq, anchor);
+
+ if (stack_max < 0) return COMPILE_NG;
/* fix label position */
- list = FIRST_ELEMENT(anchor);
insn_num = code_index = 0;
- while (list) {
- switch (list->type) {
- case ISEQ_ELEMENT_INSN:
- {
- INSN *iobj = (INSN *)list;
- line = iobj->line_no;
- code_index += insn_data_length(iobj);
- insn_num++;
- break;
- }
- case ISEQ_ELEMENT_LABEL:
- {
- LABEL *lobj = (LABEL *)list;
- lobj->position = code_index;
- lobj->set = TRUE;
- break;
- }
- case ISEQ_ELEMENT_NONE:
- {
- /* ignore */
- break;
- }
- case ISEQ_ELEMENT_ADJUST:
- {
- ADJUST *adjust = (ADJUST *)list;
- if (adjust->line_no != -1) {
- code_index += 2 /* insn + 1 operand */;
- insn_num++;
- }
- break;
- }
- default:
- dump_disasm_list(FIRST_ELEMENT(anchor));
- dump_disasm_list(list);
- COMPILE_ERROR(ruby_sourcefile_string, line, "error: set_sequence");
- return COMPILE_NG;
- }
- list = list->next;
+ for (list = FIRST_ELEMENT(anchor); list; list = list->next) {
+ switch (list->type) {
+ case ISEQ_ELEMENT_INSN:
+ {
+ INSN *iobj = (INSN *)list;
+ /* update sp */
+ sp = calc_sp_depth(sp, iobj);
+ insn_num++;
+ events = iobj->insn_info.events |= events;
+ if (ISEQ_COVERAGE(iseq)) {
+ if (ISEQ_LINE_COVERAGE(iseq) && (events & RUBY_EVENT_COVERAGE_LINE) &&
+ !(rb_get_coverage_mode() & COVERAGE_TARGET_ONESHOT_LINES)) {
+ int line = iobj->insn_info.line_no - 1;
+ if (line >= 0 && line < RARRAY_LEN(ISEQ_LINE_COVERAGE(iseq))) {
+ RARRAY_ASET(ISEQ_LINE_COVERAGE(iseq), line, INT2FIX(0));
+ }
+ }
+ if (ISEQ_BRANCH_COVERAGE(iseq) && (events & RUBY_EVENT_COVERAGE_BRANCH)) {
+ while (RARRAY_LEN(ISEQ_PC2BRANCHINDEX(iseq)) <= code_index) {
+ rb_ary_push(ISEQ_PC2BRANCHINDEX(iseq), Qnil);
+ }
+ RARRAY_ASET(ISEQ_PC2BRANCHINDEX(iseq), code_index, INT2FIX(data));
+ }
+ }
+ code_index += insn_data_length(iobj);
+ events = 0;
+ data = 0;
+ break;
+ }
+ case ISEQ_ELEMENT_LABEL:
+ {
+ LABEL *lobj = (LABEL *)list;
+ lobj->position = code_index;
+ if (lobj->sp != sp) {
+ debugs("%s: sp inconsistency found but ignored (" LABEL_FORMAT " sp: %d, calculated sp: %d)\n",
+ RSTRING_PTR(rb_iseq_path(iseq)),
+ lobj->label_no, lobj->sp, sp);
+ }
+ sp = lobj->sp;
+ break;
+ }
+ case ISEQ_ELEMENT_TRACE:
+ {
+ TRACE *trace = (TRACE *)list;
+ events |= trace->event;
+ if (trace->event & RUBY_EVENT_COVERAGE_BRANCH) data = trace->data;
+ break;
+ }
+ case ISEQ_ELEMENT_ADJUST:
+ {
+ ADJUST *adjust = (ADJUST *)list;
+ if (adjust->line_no != -1) {
+ int orig_sp = sp;
+ sp = adjust->label ? adjust->label->sp : 0;
+ if (orig_sp - sp > 0) {
+ if (orig_sp - sp > 1) code_index++; /* 1 operand */
+ code_index++; /* insn */
+ insn_num++;
+ }
+ }
+ break;
+ }
+ default: break;
+ }
}
/* make instruction sequence */
generated_iseq = ALLOC_N(VALUE, code_index);
- line_info_table = ALLOC_N(struct iseq_line_info_entry, insn_num);
- iseq->body->is_entries = ZALLOC_N(union iseq_inline_storage_entry, iseq->body->is_size);
- iseq->body->ci_entries = (struct rb_call_info *)ruby_xmalloc(sizeof(struct rb_call_info) * iseq->body->ci_size +
- sizeof(struct rb_call_info_with_kwarg) * iseq->body->ci_kw_size);
- iseq->body->cc_entries = ZALLOC_N(struct rb_call_cache, iseq->body->ci_size + iseq->body->ci_kw_size);
+ insns_info = ALLOC_N(struct iseq_insn_info_entry, insn_num);
+ positions = ALLOC_N(unsigned int, insn_num);
+ if (ISEQ_IS_SIZE(body)) {
+ body->is_entries = ZALLOC_N(union iseq_inline_storage_entry, ISEQ_IS_SIZE(body));
+ }
+ else {
+ body->is_entries = NULL;
+ }
+
+ if (body->ci_size) {
+ body->call_data = ZALLOC_N(struct rb_call_data, body->ci_size);
+ }
+ else {
+ body->call_data = NULL;
+ }
+ ISEQ_COMPILE_DATA(iseq)->ci_index = 0;
+
+ // Calculate the bitmask buffer size.
+ // Round the generated_iseq size up to the nearest multiple
+ // of the number of bits in an unsigned long.
+
+ // Allocate enough room for the bitmask list
+ iseq_bits_t * mark_offset_bits;
+ int code_size = code_index;
- ISEQ_COMPILE_DATA(iseq)->ci_index = ISEQ_COMPILE_DATA(iseq)->ci_kw_index = 0;
+ bool needs_bitmap = false;
+
+ if (ISEQ_MBITS_BUFLEN(code_index) == 1) {
+ mark_offset_bits = &ISEQ_COMPILE_DATA(iseq)->mark_bits.single;
+ ISEQ_COMPILE_DATA(iseq)->is_single_mark_bit = true;
+ }
+ else {
+ mark_offset_bits = ZALLOC_N(iseq_bits_t, ISEQ_MBITS_BUFLEN(code_index));
+ ISEQ_COMPILE_DATA(iseq)->mark_bits.list = mark_offset_bits;
+ ISEQ_COMPILE_DATA(iseq)->is_single_mark_bit = false;
+ }
+
+ ISEQ_COMPILE_DATA(iseq)->iseq_encoded = (void *)generated_iseq;
+ ISEQ_COMPILE_DATA(iseq)->iseq_size = code_index;
list = FIRST_ELEMENT(anchor);
- line_info_index = code_index = sp = 0;
+ insns_info_index = code_index = sp = 0;
while (list) {
- switch (list->type) {
- case ISEQ_ELEMENT_INSN:
- {
- int j, len, insn;
- const char *types;
- VALUE *operands;
- INSN *iobj = (INSN *)list;
-
- /* update sp */
- sp = calc_sp_depth(sp, iobj);
- if (sp > stack_max) {
- stack_max = sp;
- }
-
- /* fprintf(stderr, "insn: %-16s, sp: %d\n", insn_name(iobj->insn_id), sp); */
- operands = iobj->operands;
- insn = iobj->insn_id;
- generated_iseq[code_index] = insn;
- types = insn_op_types(insn);
- len = insn_len(insn);
-
- /* operand check */
- if (iobj->operand_size != len - 1) {
- /* printf("operand size miss! (%d, %d)\n", iobj->operand_size, len); */
- dump_disasm_list(list);
- xfree(generated_iseq);
- xfree(line_info_table);
- COMPILE_ERROR(ruby_sourcefile_string, iobj->line_no,
- "operand size miss! (%d for %d)",
- iobj->operand_size, len - 1);
- return COMPILE_NG;
- }
-
- for (j = 0; types[j]; j++) {
- char type = types[j];
- /* printf("--> [%c - (%d-%d)]\n", type, k, j); */
- switch (type) {
- case TS_OFFSET:
- {
- /* label(destination position) */
- LABEL *lobj = (LABEL *)operands[j];
- if (!lobj->set) {
- COMPILE_ERROR(ruby_sourcefile_string, iobj->line_no,
- "unknown label");
- return COMPILE_NG;
- }
- if (lobj->sp == -1) {
- lobj->sp = sp;
- }
- generated_iseq[code_index + 1 + j] = lobj->position - (code_index + len);
- break;
- }
- case TS_CDHASH:
- {
- VALUE map = operands[j];
- struct cdhash_set_label_struct data;
+ switch (list->type) {
+ case ISEQ_ELEMENT_INSN:
+ {
+ int j, len, insn;
+ const char *types;
+ VALUE *operands;
+ INSN *iobj = (INSN *)list;
+
+ /* update sp */
+ sp = calc_sp_depth(sp, iobj);
+ /* fprintf(stderr, "insn: %-16s, sp: %d\n", insn_name(iobj->insn_id), sp); */
+ operands = iobj->operands;
+ insn = iobj->insn_id;
+ generated_iseq[code_index] = insn;
+ types = insn_op_types(insn);
+ len = insn_len(insn);
+
+ for (j = 0; types[j]; j++) {
+ char type = types[j];
+
+ /* printf("--> [%c - (%d-%d)]\n", type, k, j); */
+ switch (type) {
+ case TS_OFFSET:
+ {
+ /* label(destination position) */
+ LABEL *lobj = (LABEL *)operands[j];
+ generated_iseq[code_index + 1 + j] = lobj->position - (code_index + len);
+ break;
+ }
+ case TS_CDHASH:
+ {
+ VALUE map = operands[j];
+ struct cdhash_set_label_struct data;
data.hash = map;
data.pos = code_index;
data.len = len;
- rb_hash_foreach(map, cdhash_set_label_i, (VALUE)&data);
-
- rb_hash_rehash(map);
- freeze_hide_obj(map);
- generated_iseq[code_index + 1 + j] = map;
- break;
- }
- case TS_LINDEX:
- case TS_NUM: /* ulong */
- generated_iseq[code_index + 1 + j] = FIX2INT(operands[j]);
- break;
- case TS_ISEQ: /* iseq */
- {
- VALUE v = operands[j];
- generated_iseq[code_index + 1 + j] = v;
- break;
- }
- case TS_VALUE: /* VALUE */
- {
- VALUE v = operands[j];
- generated_iseq[code_index + 1 + j] = v;
- /* to mark ruby object */
- iseq_add_mark_object(iseq, v);
- break;
- }
- case TS_IC: /* inline cache */
- {
- unsigned int ic_index = FIX2UINT(operands[j]);
- IC ic = (IC)&iseq->body->is_entries[ic_index];
- if (UNLIKELY(ic_index >= iseq->body->is_size)) {
- rb_bug("iseq_set_sequence: ic_index overflow: index: %d, size: %d", ic_index, iseq->body->is_size);
- }
- generated_iseq[code_index + 1 + j] = (VALUE)ic;
- break;
- }
- case TS_CALLINFO: /* call info */
- {
- struct rb_call_info *base_ci = (struct rb_call_info *)operands[j];
- struct rb_call_info *ci;
-
- if (base_ci->flag & VM_CALL_KWARG) {
- struct rb_call_info_with_kwarg *ci_kw_entries = (struct rb_call_info_with_kwarg *)&iseq->body->ci_entries[iseq->body->ci_size];
- struct rb_call_info_with_kwarg *ci_kw = &ci_kw_entries[ISEQ_COMPILE_DATA(iseq)->ci_kw_index++];
- *ci_kw = *((struct rb_call_info_with_kwarg *)base_ci);
- ci = (struct rb_call_info *)ci_kw;
- assert(ISEQ_COMPILE_DATA(iseq)->ci_kw_index <= iseq->body->ci_kw_size);
- }
- else {
- ci = &iseq->body->ci_entries[ISEQ_COMPILE_DATA(iseq)->ci_index++];
- *ci = *base_ci;
- assert(ISEQ_COMPILE_DATA(iseq)->ci_index <= iseq->body->ci_size);
- }
-
- generated_iseq[code_index + 1 + j] = (VALUE)ci;
- break;
- }
- case TS_CALLCACHE:
- {
- struct rb_call_cache *cc = &iseq->body->cc_entries[ISEQ_COMPILE_DATA(iseq)->ci_index + ISEQ_COMPILE_DATA(iseq)->ci_kw_index - 1];
- generated_iseq[code_index + 1 + j] = (VALUE)cc;
- break;
- }
- case TS_ID: /* ID */
- generated_iseq[code_index + 1 + j] = SYM2ID(operands[j]);
- break;
- case TS_GENTRY:
- {
- struct rb_global_entry *entry =
- (struct rb_global_entry *)(operands[j] & (~1));
- generated_iseq[code_index + 1 + j] = (VALUE)entry;
- }
- break;
- case TS_FUNCPTR:
- generated_iseq[code_index + 1 + j] = operands[j];
- break;
- default:
- xfree(generated_iseq);
- xfree(line_info_table);
- COMPILE_ERROR(ruby_sourcefile_string, iobj->line_no,
- "unknown operand type: %c", type);
- return COMPILE_NG;
- }
- }
- if (last_line != iobj->line_no) {
- line_info_table[line_info_index].line_no = last_line = iobj->line_no;
- line_info_table[line_info_index].position = code_index;
- line_info_index++;
- }
- code_index += len;
- break;
- }
- case ISEQ_ELEMENT_LABEL:
- {
- LABEL *lobj = (LABEL *)list;
- if (lobj->sp == -1) {
- lobj->sp = sp;
- }
- else {
- sp = lobj->sp;
- }
- break;
- }
- case ISEQ_ELEMENT_ADJUST:
- {
- ADJUST *adjust = (ADJUST *)list;
- int orig_sp = sp;
-
- if (adjust->label) {
- sp = adjust->label->sp;
- }
- else {
- sp = 0;
- }
-
- if (adjust->line_no != -1) {
- if (orig_sp - sp > 0) {
- if (last_line != (unsigned int)adjust->line_no) {
- line_info_table[line_info_index].line_no = last_line = adjust->line_no;
- line_info_table[line_info_index].position = code_index;
- line_info_index++;
- }
- generated_iseq[code_index++] = BIN(adjuststack);
- generated_iseq[code_index++] = orig_sp - sp;
- }
- else if (orig_sp - sp == 0) {
- /* jump to next insn */
- if (last_line != (unsigned int)adjust->line_no) {
- line_info_table[line_info_index].line_no = last_line = adjust->line_no;
- line_info_table[line_info_index].position = code_index;
- line_info_index++;
- }
- generated_iseq[code_index++] = BIN(nop);
- generated_iseq[code_index++] = BIN(nop);
- }
- else {
- rb_compile_bug_str(ruby_sourcefile_string, adjust->line_no,
- "iseq_set_sequence: adjust bug %d < %d", orig_sp, sp);
- }
- }
- break;
- }
- default:
- /* ignore */
- break;
- }
- list = list->next;
- }
-
- iseq->body->iseq_encoded = (void *)generated_iseq;
- iseq->body->iseq_size = code_index;
- iseq->body->stack_max = stack_max;
-
- REALLOC_N(line_info_table, struct iseq_line_info_entry, line_info_index);
- iseq->body->line_info_table = line_info_table;
- iseq->body->line_info_size = line_info_index;
+ rb_hash_foreach(map, cdhash_set_label_i, (VALUE)&data);
+
+ rb_hash_rehash(map);
+ freeze_hide_obj(map);
+ rb_ractor_make_shareable(map);
+ generated_iseq[code_index + 1 + j] = map;
+ ISEQ_MBITS_SET(mark_offset_bits, code_index + 1 + j);
+ RB_OBJ_WRITTEN(iseq, Qundef, map);
+ needs_bitmap = true;
+ break;
+ }
+ case TS_LINDEX:
+ case TS_NUM: /* ulong */
+ generated_iseq[code_index + 1 + j] = FIX2INT(operands[j]);
+ break;
+ case TS_ISEQ: /* iseq */
+ case TS_VALUE: /* VALUE */
+ {
+ VALUE v = operands[j];
+ generated_iseq[code_index + 1 + j] = v;
+ /* to mark ruby object */
+ if (!SPECIAL_CONST_P(v)) {
+ RB_OBJ_WRITTEN(iseq, Qundef, v);
+ ISEQ_MBITS_SET(mark_offset_bits, code_index + 1 + j);
+ needs_bitmap = true;
+ }
+ break;
+ }
+ /* [ TS_IVC | TS_ICVARC | TS_ISE | TS_IC ] */
+ case TS_IC: /* inline cache: constants */
+ {
+ unsigned int ic_index = ISEQ_COMPILE_DATA(iseq)->ic_index++;
+ IC ic = &ISEQ_IS_ENTRY_START(body, type)[ic_index].ic_cache;
+ if (UNLIKELY(ic_index >= body->ic_size)) {
+ BADINSN_DUMP(anchor, &iobj->link, 0);
+ COMPILE_ERROR(iseq, iobj->insn_info.line_no,
+ "iseq_set_sequence: ic_index overflow: index: %d, size: %d",
+ ic_index, ISEQ_IS_SIZE(body));
+ }
+
+ ic->segments = array_to_idlist(operands[j]);
+
+ generated_iseq[code_index + 1 + j] = (VALUE)ic;
+ }
+ break;
+ case TS_IVC: /* inline ivar cache */
+ {
+ unsigned int ic_index = FIX2UINT(operands[j]);
+
+ IVC cache = ((IVC)&body->is_entries[ic_index]);
+
+ if (insn == BIN(setinstancevariable)) {
+ cache->iv_set_name = SYM2ID(operands[j - 1]);
+ }
+ else {
+ cache->iv_set_name = 0;
+ }
+
+ vm_ic_attr_index_initialize(cache, INVALID_SHAPE_ID);
+ }
+ case TS_ISE: /* inline storage entry: `once` insn */
+ case TS_ICVARC: /* inline cvar cache */
+ {
+ unsigned int ic_index = FIX2UINT(operands[j]);
+ IC ic = &ISEQ_IS_ENTRY_START(body, type)[ic_index].ic_cache;
+ if (UNLIKELY(ic_index >= ISEQ_IS_SIZE(body))) {
+ BADINSN_DUMP(anchor, &iobj->link, 0);
+ COMPILE_ERROR(iseq, iobj->insn_info.line_no,
+ "iseq_set_sequence: ic_index overflow: index: %d, size: %d",
+ ic_index, ISEQ_IS_SIZE(body));
+ }
+ generated_iseq[code_index + 1 + j] = (VALUE)ic;
+
+ break;
+ }
+ case TS_CALLDATA:
+ {
+ const struct rb_callinfo *source_ci = (const struct rb_callinfo *)operands[j];
+ RUBY_ASSERT(ISEQ_COMPILE_DATA(iseq)->ci_index <= body->ci_size);
+ struct rb_call_data *cd = &body->call_data[ISEQ_COMPILE_DATA(iseq)->ci_index++];
+ cd->ci = source_ci;
+ cd->cc = vm_cc_empty();
+ generated_iseq[code_index + 1 + j] = (VALUE)cd;
+ break;
+ }
+ case TS_ID: /* ID */
+ generated_iseq[code_index + 1 + j] = SYM2ID(operands[j]);
+ break;
+ case TS_FUNCPTR:
+ generated_iseq[code_index + 1 + j] = operands[j];
+ break;
+ case TS_BUILTIN:
+ generated_iseq[code_index + 1 + j] = operands[j];
+ break;
+ default:
+ BADINSN_ERROR(iseq, iobj->insn_info.line_no,
+ "unknown operand type: %c", type);
+ return COMPILE_NG;
+ }
+ }
+ if (add_insn_info(insns_info, positions, insns_info_index, code_index, iobj)) insns_info_index++;
+ code_index += len;
+ break;
+ }
+ case ISEQ_ELEMENT_LABEL:
+ {
+ LABEL *lobj = (LABEL *)list;
+ if (lobj->sp != sp) {
+ debugs("%s: sp inconsistency found but ignored (" LABEL_FORMAT " sp: %d, calculated sp: %d)\n",
+ RSTRING_PTR(rb_iseq_path(iseq)),
+ lobj->label_no, lobj->sp, sp);
+ }
+ sp = lobj->sp;
+ break;
+ }
+ case ISEQ_ELEMENT_ADJUST:
+ {
+ ADJUST *adjust = (ADJUST *)list;
+ int orig_sp = sp;
+
+ if (adjust->label) {
+ sp = adjust->label->sp;
+ }
+ else {
+ sp = 0;
+ }
+
+ if (adjust->line_no != -1) {
+ const int diff = orig_sp - sp;
+ if (diff > 0) {
+ if (insns_info_index == 0) {
+ COMPILE_ERROR(iseq, adjust->line_no,
+ "iseq_set_sequence: adjust bug (ISEQ_ELEMENT_ADJUST must not be the first in iseq)");
+ }
+ if (add_adjust_info(insns_info, positions, insns_info_index, code_index, adjust)) insns_info_index++;
+ }
+ if (diff > 1) {
+ generated_iseq[code_index++] = BIN(adjuststack);
+ generated_iseq[code_index++] = orig_sp - sp;
+ }
+ else if (diff == 1) {
+ generated_iseq[code_index++] = BIN(pop);
+ }
+ else if (diff < 0) {
+ int label_no = adjust->label ? adjust->label->label_no : -1;
+ xfree(generated_iseq);
+ xfree(insns_info);
+ xfree(positions);
+ if (ISEQ_MBITS_BUFLEN(code_size) > 1) {
+ xfree(mark_offset_bits);
+ }
+ debug_list(anchor, list);
+ COMPILE_ERROR(iseq, adjust->line_no,
+ "iseq_set_sequence: adjust bug to %d %d < %d",
+ label_no, orig_sp, sp);
+ return COMPILE_NG;
+ }
+ }
+ break;
+ }
+ default:
+ /* ignore */
+ break;
+ }
+ list = list->next;
+ }
+
+ body->iseq_encoded = (void *)generated_iseq;
+ body->iseq_size = code_index;
+ body->stack_max = stack_max;
+
+ if (ISEQ_COMPILE_DATA(iseq)->is_single_mark_bit) {
+ body->mark_bits.single = ISEQ_COMPILE_DATA(iseq)->mark_bits.single;
+ }
+ else {
+ if (needs_bitmap) {
+ body->mark_bits.list = mark_offset_bits;
+ }
+ else {
+ body->mark_bits.list = NULL;
+ ISEQ_COMPILE_DATA(iseq)->mark_bits.list = NULL;
+ ruby_xfree(mark_offset_bits);
+ }
+ }
+
+ /* get rid of memory leak when REALLOC failed */
+ body->insns_info.body = insns_info;
+ body->insns_info.positions = positions;
+
+ REALLOC_N(insns_info, struct iseq_insn_info_entry, insns_info_index);
+ body->insns_info.body = insns_info;
+ REALLOC_N(positions, unsigned int, insns_info_index);
+ body->insns_info.positions = positions;
+ body->insns_info.size = insns_info_index;
return COMPILE_OK;
}
@@ -1827,49 +2963,54 @@ iseq_set_exception_table(rb_iseq_t *iseq)
unsigned int tlen, i;
struct iseq_catch_table_entry *entry;
- tlen = (int)RARRAY_LEN(ISEQ_COMPILE_DATA(iseq)->catch_table_ary);
- tptr = RARRAY_CONST_PTR(ISEQ_COMPILE_DATA(iseq)->catch_table_ary);
+ ISEQ_BODY(iseq)->catch_table = NULL;
+
+ VALUE catch_table_ary = ISEQ_COMPILE_DATA(iseq)->catch_table_ary;
+ if (NIL_P(catch_table_ary)) return COMPILE_OK;
+ tlen = (int)RARRAY_LEN(catch_table_ary);
+ tptr = RARRAY_CONST_PTR(catch_table_ary);
if (tlen > 0) {
- struct iseq_catch_table *table = xmalloc(iseq_catch_table_bytes(tlen));
- table->size = tlen;
-
- for (i = 0; i < table->size; i++) {
- ptr = RARRAY_CONST_PTR(tptr[i]);
- entry = &table->entries[i];
- entry->type = (enum catch_type)(ptr[0] & 0xffff);
- entry->start = label_get_position((LABEL *)(ptr[1] & ~1));
- entry->end = label_get_position((LABEL *)(ptr[2] & ~1));
- entry->iseq = (rb_iseq_t *)ptr[3];
-
- /* register iseq as mark object */
- if (entry->iseq != 0) {
- iseq_add_mark_object(iseq, (VALUE)entry->iseq);
- }
-
- /* stack depth */
- if (ptr[4]) {
- LABEL *lobj = (LABEL *)(ptr[4] & ~1);
- entry->cont = label_get_position(lobj);
- entry->sp = label_get_sp(lobj);
-
- /* TODO: Dirty Hack! Fix me */
- if (entry->type == CATCH_TYPE_RESCUE ||
- entry->type == CATCH_TYPE_BREAK ||
- entry->type == CATCH_TYPE_NEXT) {
- entry->sp--;
- }
- }
- else {
- entry->cont = 0;
- }
- }
- iseq->body->catch_table = table;
- RB_OBJ_WRITE(iseq, &ISEQ_COMPILE_DATA(iseq)->catch_table_ary, 0); /* free */
- }
- else {
- iseq->body->catch_table = NULL;
- }
+ struct iseq_catch_table *table = xmalloc(iseq_catch_table_bytes(tlen));
+ table->size = tlen;
+
+ for (i = 0; i < table->size; i++) {
+ int pos;
+ ptr = RARRAY_CONST_PTR(tptr[i]);
+ entry = UNALIGNED_MEMBER_PTR(table, entries[i]);
+ entry->type = (enum rb_catch_type)(ptr[0] & 0xffff);
+ pos = label_get_position((LABEL *)(ptr[1] & ~1));
+ RUBY_ASSERT(pos >= 0);
+ entry->start = (unsigned int)pos;
+ pos = label_get_position((LABEL *)(ptr[2] & ~1));
+ RUBY_ASSERT(pos >= 0);
+ entry->end = (unsigned int)pos;
+ entry->iseq = (rb_iseq_t *)ptr[3];
+ RB_OBJ_WRITTEN(iseq, Qundef, entry->iseq);
+
+ /* stack depth */
+ if (ptr[4]) {
+ LABEL *lobj = (LABEL *)(ptr[4] & ~1);
+ entry->cont = label_get_position(lobj);
+ entry->sp = label_get_sp(lobj);
+
+ /* TODO: Dirty Hack! Fix me */
+ if (entry->type == CATCH_TYPE_RESCUE ||
+ entry->type == CATCH_TYPE_BREAK ||
+ entry->type == CATCH_TYPE_NEXT) {
+ RUBY_ASSERT(entry->sp > 0);
+ entry->sp--;
+ }
+ }
+ else {
+ entry->cont = 0;
+ }
+ }
+ ISEQ_BODY(iseq)->catch_table = table;
+ RB_OBJ_WRITE(iseq, &ISEQ_COMPILE_DATA(iseq)->catch_table_ary, 0); /* free */
+ }
+
+ RB_GC_GUARD(catch_table_ary);
return COMPILE_OK;
}
@@ -1887,12 +3028,12 @@ static int
iseq_set_optargs_table(rb_iseq_t *iseq)
{
int i;
- VALUE *opt_table = (VALUE *)iseq->body->param.opt_table;
+ VALUE *opt_table = (VALUE *)ISEQ_BODY(iseq)->param.opt_table;
- if (iseq->body->param.flags.has_opt) {
- for (i = 0; i < iseq->body->param.opt_num + 1; i++) {
- opt_table[i] = label_get_position((LABEL *)opt_table[i]);
- }
+ if (ISEQ_BODY(iseq)->param.flags.has_opt) {
+ for (i = 0; i < ISEQ_BODY(iseq)->param.opt_num + 1; i++) {
+ opt_table[i] = label_get_position((LABEL *)opt_table[i]);
+ }
}
return COMPILE_OK;
}
@@ -1902,13 +3043,31 @@ get_destination_insn(INSN *iobj)
{
LABEL *lobj = (LABEL *)OPERAND_AT(iobj, 0);
LINK_ELEMENT *list;
+ rb_event_flag_t events = 0;
list = lobj->link.next;
while (list) {
- if (list->type == ISEQ_ELEMENT_INSN || list->type == ISEQ_ELEMENT_ADJUST) {
- break;
- }
- list = list->next;
+ switch (list->type) {
+ case ISEQ_ELEMENT_INSN:
+ case ISEQ_ELEMENT_ADJUST:
+ goto found;
+ case ISEQ_ELEMENT_LABEL:
+ /* ignore */
+ break;
+ case ISEQ_ELEMENT_TRACE:
+ {
+ TRACE *trace = (TRACE *)list;
+ events |= trace->event;
+ }
+ break;
+ default: break;
+ }
+ list = list->next;
+ }
+ found:
+ if (list && IS_INSN(list)) {
+ INSN *iobj = (INSN *)list;
+ iobj->insn_info.events |= events;
}
return list;
}
@@ -1919,10 +3078,10 @@ get_next_insn(INSN *iobj)
LINK_ELEMENT *list = iobj->link.next;
while (list) {
- if (list->type == ISEQ_ELEMENT_INSN || list->type == ISEQ_ELEMENT_ADJUST) {
- return list;
- }
- list = list->next;
+ if (IS_INSN(list) || IS_ADJUST(list)) {
+ return list;
+ }
+ list = list->next;
}
return 0;
}
@@ -1933,10 +3092,10 @@ get_prev_insn(INSN *iobj)
LINK_ELEMENT *list = iobj->link.prev;
while (list) {
- if (list->type == ISEQ_ELEMENT_INSN || list->type == ISEQ_ELEMENT_ADJUST) {
- return list;
- }
- list = list->prev;
+ if (IS_INSN(list) || IS_ADJUST(list)) {
+ return list;
+ }
+ list = list->prev;
}
return 0;
}
@@ -1946,336 +3105,1104 @@ unref_destination(INSN *iobj, int pos)
{
LABEL *lobj = (LABEL *)OPERAND_AT(iobj, pos);
--lobj->refcnt;
- if (!lobj->refcnt) REMOVE_ELEM(&lobj->link);
+ if (!lobj->refcnt) ELEM_REMOVE(&lobj->link);
}
-static void
+static bool
replace_destination(INSN *dobj, INSN *nobj)
{
VALUE n = OPERAND_AT(nobj, 0);
LABEL *dl = (LABEL *)OPERAND_AT(dobj, 0);
LABEL *nl = (LABEL *)n;
+ if (dl == nl) return false;
--dl->refcnt;
++nl->refcnt;
OPERAND_AT(dobj, 0) = n;
- if (!dl->refcnt) REMOVE_ELEM(&dl->link);
+ if (!dl->refcnt) ELEM_REMOVE(&dl->link);
+ return true;
+}
+
+static LABEL*
+find_destination(INSN *i)
+{
+ int pos, len = insn_len(i->insn_id);
+ for (pos = 0; pos < len; ++pos) {
+ if (insn_op_types(i->insn_id)[pos] == TS_OFFSET) {
+ return (LABEL *)OPERAND_AT(i, pos);
+ }
+ }
+ return 0;
}
static int
remove_unreachable_chunk(rb_iseq_t *iseq, LINK_ELEMENT *i)
{
- int removed = 0;
- while (i) {
- if (i->type == ISEQ_ELEMENT_INSN) {
- struct rb_iseq_constant_body *body = iseq->body;
- VALUE insn = INSN_OF(i);
- int pos, len = insn_len(insn);
- for (pos = 0; pos < len; ++pos) {
- switch (insn_op_types(insn)[pos]) {
- case TS_OFFSET:
- unref_destination((INSN *)i, pos);
- break;
- case TS_CALLINFO:
- if (((struct rb_call_info *)OPERAND_AT(i, pos))->flag & VM_CALL_KWARG)
- --(body->ci_kw_size);
- else
- --(body->ci_size);
- break;
- }
- }
- }
- else if (i->type == ISEQ_ELEMENT_LABEL) {
- if (((LABEL *)i)->refcnt > 0) break;
- }
- else break;
- REMOVE_ELEM(i);
- removed = 1;
- i = i->next;
- }
- return removed;
+ LINK_ELEMENT *first = i, *end;
+ int *unref_counts = 0, nlabels = ISEQ_COMPILE_DATA(iseq)->label_no;
+
+ if (!i) return 0;
+ unref_counts = ALLOCA_N(int, nlabels);
+ MEMZERO(unref_counts, int, nlabels);
+ end = i;
+ do {
+ LABEL *lab;
+ if (IS_INSN(i)) {
+ if (IS_INSN_ID(i, leave)) {
+ end = i;
+ break;
+ }
+ else if ((lab = find_destination((INSN *)i)) != 0) {
+ unref_counts[lab->label_no]++;
+ }
+ }
+ else if (IS_LABEL(i)) {
+ lab = (LABEL *)i;
+ if (lab->unremovable) return 0;
+ if (lab->refcnt > unref_counts[lab->label_no]) {
+ if (i == first) return 0;
+ break;
+ }
+ continue;
+ }
+ else if (IS_TRACE(i)) {
+ /* do nothing */
+ }
+ else if (IS_ADJUST(i)) {
+ return 0;
+ }
+ end = i;
+ } while ((i = i->next) != 0);
+ i = first;
+ do {
+ if (IS_INSN(i)) {
+ struct rb_iseq_constant_body *body = ISEQ_BODY(iseq);
+ VALUE insn = INSN_OF(i);
+ int pos, len = insn_len(insn);
+ for (pos = 0; pos < len; ++pos) {
+ switch (insn_op_types(insn)[pos]) {
+ case TS_OFFSET:
+ unref_destination((INSN *)i, pos);
+ break;
+ case TS_CALLDATA:
+ --(body->ci_size);
+ break;
+ }
+ }
+ }
+ ELEM_REMOVE(i);
+ } while ((i != end) && (i = i->next) != 0);
+ return 1;
}
static int
+iseq_pop_newarray(rb_iseq_t *iseq, INSN *iobj)
+{
+ switch (OPERAND_AT(iobj, 0)) {
+ case INT2FIX(0): /* empty array */
+ ELEM_REMOVE(&iobj->link);
+ return TRUE;
+ case INT2FIX(1): /* single element array */
+ ELEM_REMOVE(&iobj->link);
+ return FALSE;
+ default:
+ iobj->insn_id = BIN(adjuststack);
+ return TRUE;
+ }
+}
+
+static int
+is_frozen_putstring(INSN *insn, VALUE *op)
+{
+ if (IS_INSN_ID(insn, putstring) || IS_INSN_ID(insn, putchilledstring)) {
+ *op = OPERAND_AT(insn, 0);
+ return 1;
+ }
+ else if (IS_INSN_ID(insn, putobject)) { /* frozen_string_literal */
+ *op = OPERAND_AT(insn, 0);
+ return RB_TYPE_P(*op, T_STRING);
+ }
+ return 0;
+}
+
+static int
+insn_has_label_before(LINK_ELEMENT *elem)
+{
+ LINK_ELEMENT *prev = elem->prev;
+ while (prev) {
+ if (prev->type == ISEQ_ELEMENT_LABEL) {
+ LABEL *label = (LABEL *)prev;
+ if (label->refcnt > 0) {
+ return 1;
+ }
+ }
+ else if (prev->type == ISEQ_ELEMENT_INSN) {
+ break;
+ }
+ prev = prev->prev;
+ }
+ return 0;
+}
+
+static int
+optimize_checktype(rb_iseq_t *iseq, INSN *iobj)
+{
+ /*
+ * putobject obj
+ * dup
+ * checktype T_XXX
+ * branchif l1
+ * l2:
+ * ...
+ * l1:
+ *
+ * => obj is a T_XXX
+ *
+ * putobject obj (T_XXX)
+ * jump L1
+ * L1:
+ *
+ * => obj is not a T_XXX
+ *
+ * putobject obj (T_XXX)
+ * jump L2
+ * L2:
+ */
+ int line, node_id;
+ INSN *niobj, *ciobj, *dup = 0;
+ LABEL *dest = 0;
+ VALUE type;
+
+ switch (INSN_OF(iobj)) {
+ case BIN(putstring):
+ case BIN(putchilledstring):
+ type = INT2FIX(T_STRING);
+ break;
+ case BIN(putnil):
+ type = INT2FIX(T_NIL);
+ break;
+ case BIN(putobject):
+ type = INT2FIX(TYPE(OPERAND_AT(iobj, 0)));
+ break;
+ default: return FALSE;
+ }
+
+ ciobj = (INSN *)get_next_insn(iobj);
+ if (IS_INSN_ID(ciobj, jump)) {
+ ciobj = (INSN *)get_next_insn((INSN*)OPERAND_AT(ciobj, 0));
+ }
+ if (IS_INSN_ID(ciobj, dup)) {
+ ciobj = (INSN *)get_next_insn(dup = ciobj);
+ }
+ if (!ciobj || !IS_INSN_ID(ciobj, checktype)) return FALSE;
+ niobj = (INSN *)get_next_insn(ciobj);
+ if (!niobj) {
+ /* TODO: putobject true/false */
+ return FALSE;
+ }
+ switch (INSN_OF(niobj)) {
+ case BIN(branchif):
+ if (OPERAND_AT(ciobj, 0) == type) {
+ dest = (LABEL *)OPERAND_AT(niobj, 0);
+ }
+ break;
+ case BIN(branchunless):
+ if (OPERAND_AT(ciobj, 0) != type) {
+ dest = (LABEL *)OPERAND_AT(niobj, 0);
+ }
+ break;
+ default:
+ return FALSE;
+ }
+ line = ciobj->insn_info.line_no;
+ node_id = ciobj->insn_info.node_id;
+ if (!dest) {
+ if (niobj->link.next && IS_LABEL(niobj->link.next)) {
+ dest = (LABEL *)niobj->link.next; /* reuse label */
+ }
+ else {
+ dest = NEW_LABEL(line);
+ ELEM_INSERT_NEXT(&niobj->link, &dest->link);
+ }
+ }
+ INSERT_AFTER_INSN1(iobj, line, node_id, jump, dest);
+ LABEL_REF(dest);
+ if (!dup) INSERT_AFTER_INSN(iobj, line, node_id, pop);
+ return TRUE;
+}
+
+static const struct rb_callinfo *
+ci_flag_set(const rb_iseq_t *iseq, const struct rb_callinfo *ci, unsigned int add)
+{
+ const struct rb_callinfo *nci = vm_ci_new(vm_ci_mid(ci),
+ vm_ci_flag(ci) | add,
+ vm_ci_argc(ci),
+ vm_ci_kwarg(ci));
+ RB_OBJ_WRITTEN(iseq, ci, nci);
+ return nci;
+}
+
+static const struct rb_callinfo *
+ci_argc_set(const rb_iseq_t *iseq, const struct rb_callinfo *ci, int argc)
+{
+ const struct rb_callinfo *nci = vm_ci_new(vm_ci_mid(ci),
+ vm_ci_flag(ci),
+ argc,
+ vm_ci_kwarg(ci));
+ RB_OBJ_WRITTEN(iseq, ci, nci);
+ return nci;
+}
+
+#define vm_ci_simple(ci) (vm_ci_flag(ci) & VM_CALL_ARGS_SIMPLE)
+
+static int
iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcallopt)
{
- INSN *iobj = (INSN *)list;
+ INSN *const iobj = (INSN *)list;
+
again:
- if (iobj->insn_id == BIN(jump)) {
- INSN *niobj, *diobj, *piobj;
- /*
- * useless jump elimination:
- * jump LABEL1
- * ...
- * LABEL1:
- * jump LABEL2
- *
- * => in this case, first jump instruction should jump to
- * LABEL2 directly
- */
- diobj = (INSN *)get_destination_insn(iobj);
- niobj = (INSN *)get_next_insn(iobj);
-
- if (diobj == niobj) {
- /*
- * jump LABEL
- * LABEL:
- * =>
- * LABEL:
- */
- unref_destination(iobj, 0);
- REMOVE_ELEM(&iobj->link);
- }
- else if (iobj != diobj && diobj->insn_id == BIN(jump) &&
- OPERAND_AT(iobj, 0) != OPERAND_AT(diobj, 0)) {
- replace_destination(iobj, diobj);
- remove_unreachable_chunk(iseq, iobj->link.next);
- goto again;
- }
- else if (diobj->insn_id == BIN(leave)) {
- /*
- * jump LABEL
- * ...
- * LABEL:
- * leave
- * =>
- * leave
- * ...
- * LABEL:
- * leave
- */
- INSN *eiobj = new_insn_core(iseq, iobj->line_no, BIN(leave),
- diobj->operand_size, diobj->operands);
- INSN *popiobj = new_insn_core(iseq, iobj->line_no,
- BIN(pop), 0, 0);
- /* replace */
- unref_destination(iobj, 0);
- REPLACE_ELEM((LINK_ELEMENT *)iobj, (LINK_ELEMENT *)eiobj);
- INSERT_ELEM_NEXT((LINK_ELEMENT *)eiobj, (LINK_ELEMENT *)popiobj);
- iobj = eiobj;
- goto again;
- }
- /*
- * useless jump elimination (if/unless destination):
- * if L1
- * jump L2
- * L1:
- * ...
- * L2:
- *
- * ==>
- * unless L2
- * L1:
- * ...
- * L2:
- */
- else if ((piobj = (INSN *)get_prev_insn(iobj)) != 0 &&
- (piobj->insn_id == BIN(branchif) ||
- piobj->insn_id == BIN(branchunless))) {
- if (niobj == (INSN *)get_destination_insn(piobj)) {
- piobj->insn_id = (piobj->insn_id == BIN(branchif))
- ? BIN(branchunless) : BIN(branchif);
- replace_destination(piobj, iobj);
- REMOVE_ELEM(&iobj->link);
- }
- }
- else if (remove_unreachable_chunk(iseq, iobj->link.next)) {
- goto again;
- }
- }
-
- if (iobj->insn_id == BIN(leave)) {
- remove_unreachable_chunk(iseq, iobj->link.next);
- }
-
- if (iobj->insn_id == BIN(branchif) ||
- iobj->insn_id == BIN(branchnil) ||
- iobj->insn_id == BIN(branchunless)) {
- /*
- * if L1
- * ...
- * L1:
- * jump L2
- * =>
- * if L2
- */
- INSN *nobj = (INSN *)get_destination_insn(iobj);
- INSN *pobj = (INSN *)iobj->link.prev;
- int prev_dup = 0;
- if (pobj) {
- if (pobj->link.type != ISEQ_ELEMENT_INSN)
- pobj = 0;
- else if (pobj->insn_id == BIN(dup))
- prev_dup = 1;
- }
-
- for (;;) {
- if (nobj->insn_id == BIN(jump)) {
- replace_destination(iobj, nobj);
- }
- else if (prev_dup && nobj->insn_id == BIN(dup) &&
- !!(nobj = (INSN *)nobj->link.next) &&
- /* basic blocks, with no labels in the middle */
- nobj->insn_id == iobj->insn_id) {
- /*
- * dup
- * if L1
- * ...
- * L1:
- * dup
- * if L2
- * =>
- * dup
- * if L2
- * ...
- * L1:
- * dup
- * if L2
- */
- replace_destination(iobj, nobj);
- }
- else if (pobj) {
- /*
- * putnil
- * if L1
- * =>
- * # nothing
- *
- * putobject true
- * if L1
- * =>
- * jump L1
- *
- * putstring ".."
- * if L1
- * =>
- * jump L1
- *
- * putstring ".."
- * dup
- * if L1
- * =>
- * putstring ".."
- * jump L1
- *
- */
- int cond;
- if (prev_dup && pobj->link.prev->type == ISEQ_ELEMENT_INSN) {
- pobj = (INSN *)pobj->link.prev;
- }
- if (pobj->insn_id == BIN(putobject)) {
- cond = (iobj->insn_id == BIN(branchif) ?
- OPERAND_AT(pobj, 0) != Qfalse :
- iobj->insn_id == BIN(branchunless) ?
- OPERAND_AT(pobj, 0) == Qfalse :
- FALSE);
- }
- else if (pobj->insn_id == BIN(putstring)) {
- cond = iobj->insn_id == BIN(branchif);
- }
- else if (pobj->insn_id == BIN(putnil)) {
- cond = iobj->insn_id != BIN(branchif);
- }
- else break;
- REMOVE_ELEM(iobj->link.prev);
- if (cond) {
- iobj->insn_id = BIN(jump);
- goto again;
- }
- else {
- unref_destination(iobj, 0);
- REMOVE_ELEM(&iobj->link);
- }
- break;
- }
- else break;
- nobj = (INSN *)get_destination_insn(nobj);
- }
- }
-
- if (iobj->insn_id == BIN(pop)) {
- /*
- * putself / putnil / putobject obj / putstring "..."
- * pop
- * =>
- * # do nothing
- */
- LINK_ELEMENT *prev = iobj->link.prev;
- if (prev->type == ISEQ_ELEMENT_INSN) {
- enum ruby_vminsn_type previ = ((INSN *)prev)->insn_id;
- if (previ == BIN(putobject) || previ == BIN(putnil) ||
- previ == BIN(putself) || previ == BIN(putstring)) {
- /* just push operand or static value and pop soon, no
- * side effects */
- REMOVE_ELEM(prev);
- REMOVE_ELEM(&iobj->link);
- }
- }
+ optimize_checktype(iseq, iobj);
+
+ if (IS_INSN_ID(iobj, jump)) {
+ INSN *niobj, *diobj, *piobj;
+ diobj = (INSN *)get_destination_insn(iobj);
+ niobj = (INSN *)get_next_insn(iobj);
+
+ if (diobj == niobj) {
+ /*
+ * jump LABEL
+ * LABEL:
+ * =>
+ * LABEL:
+ */
+ unref_destination(iobj, 0);
+ ELEM_REMOVE(&iobj->link);
+ return COMPILE_OK;
+ }
+ else if (iobj != diobj && IS_INSN(&diobj->link) &&
+ IS_INSN_ID(diobj, jump) &&
+ OPERAND_AT(iobj, 0) != OPERAND_AT(diobj, 0) &&
+ diobj->insn_info.events == 0) {
+ /*
+ * useless jump elimination:
+ * jump LABEL1
+ * ...
+ * LABEL1:
+ * jump LABEL2
+ *
+ * => in this case, first jump instruction should jump to
+ * LABEL2 directly
+ */
+ if (replace_destination(iobj, diobj)) {
+ remove_unreachable_chunk(iseq, iobj->link.next);
+ goto again;
+ }
+ }
+ else if (IS_INSN_ID(diobj, leave)) {
+ /*
+ * jump LABEL
+ * ...
+ * LABEL:
+ * leave
+ * =>
+ * leave
+ * ...
+ * LABEL:
+ * leave
+ */
+ /* replace */
+ unref_destination(iobj, 0);
+ iobj->insn_id = BIN(leave);
+ iobj->operand_size = 0;
+ iobj->insn_info = diobj->insn_info;
+ goto again;
+ }
+ else if (IS_INSN(iobj->link.prev) &&
+ (piobj = (INSN *)iobj->link.prev) &&
+ (IS_INSN_ID(piobj, branchif) ||
+ IS_INSN_ID(piobj, branchunless))) {
+ INSN *pdiobj = (INSN *)get_destination_insn(piobj);
+ if (niobj == pdiobj) {
+ int refcnt = IS_LABEL(piobj->link.next) ?
+ ((LABEL *)piobj->link.next)->refcnt : 0;
+ /*
+ * useless jump elimination (if/unless destination):
+ * if L1
+ * jump L2
+ * L1:
+ * ...
+ * L2:
+ *
+ * ==>
+ * unless L2
+ * L1:
+ * ...
+ * L2:
+ */
+ piobj->insn_id = (IS_INSN_ID(piobj, branchif))
+ ? BIN(branchunless) : BIN(branchif);
+ if (replace_destination(piobj, iobj) && refcnt <= 1) {
+ ELEM_REMOVE(&iobj->link);
+ }
+ else {
+ /* TODO: replace other branch destinations too */
+ }
+ return COMPILE_OK;
+ }
+ else if (diobj == pdiobj) {
+ /*
+ * useless jump elimination (if/unless before jump):
+ * L1:
+ * ...
+ * if L1
+ * jump L1
+ *
+ * ==>
+ * L1:
+ * ...
+ * pop
+ * jump L1
+ */
+ INSN *popiobj = new_insn_core(iseq, iobj->insn_info.line_no, iobj->insn_info.node_id, BIN(pop), 0, 0);
+ ELEM_REPLACE(&piobj->link, &popiobj->link);
+ }
+ }
+ if (remove_unreachable_chunk(iseq, iobj->link.next)) {
+ goto again;
+ }
+ }
+
+ /*
+ * putstring "beg"
+ * putstring "end"
+ * newrange excl
+ *
+ * ==>
+ *
+ * putobject "beg".."end"
+ */
+ if (IS_INSN_ID(iobj, newrange)) {
+ INSN *const range = iobj;
+ INSN *beg, *end;
+ VALUE str_beg, str_end;
+
+ if ((end = (INSN *)get_prev_insn(range)) != 0 &&
+ is_frozen_putstring(end, &str_end) &&
+ (beg = (INSN *)get_prev_insn(end)) != 0 &&
+ is_frozen_putstring(beg, &str_beg) &&
+ !(insn_has_label_before(&beg->link) || insn_has_label_before(&end->link))) {
+ int excl = FIX2INT(OPERAND_AT(range, 0));
+ VALUE lit_range = RB_OBJ_SET_SHAREABLE(rb_range_new(str_beg, str_end, excl));
+
+ ELEM_REMOVE(&beg->link);
+ ELEM_REMOVE(&end->link);
+ range->insn_id = BIN(putobject);
+ OPERAND_AT(range, 0) = lit_range;
+ RB_OBJ_WRITTEN(iseq, Qundef, lit_range);
+ }
+ }
+
+ if (IS_INSN_ID(iobj, leave)) {
+ remove_unreachable_chunk(iseq, iobj->link.next);
+ }
+
+ /*
+ * ...
+ * duparray [...]
+ * concatarray | concattoarray
+ * =>
+ * ...
+ * putobject [...]
+ * concatarray | concattoarray
+ */
+ if (IS_INSN_ID(iobj, duparray)) {
+ LINK_ELEMENT *next = iobj->link.next;
+ if (IS_INSN(next) && (IS_INSN_ID(next, concatarray) || IS_INSN_ID(next, concattoarray))) {
+ iobj->insn_id = BIN(putobject);
+ }
+ }
+
+ /*
+ * duparray [...]
+ * send <calldata!mid:freeze, argc:0, ARGS_SIMPLE>, nil
+ * =>
+ * opt_ary_freeze [...], <calldata!mid:freeze, argc:0, ARGS_SIMPLE>
+ */
+ if (IS_INSN_ID(iobj, duparray)) {
+ LINK_ELEMENT *next = iobj->link.next;
+ if (IS_INSN(next) && (IS_INSN_ID(next, send))) {
+ const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(next, 0);
+ const rb_iseq_t *blockiseq = (rb_iseq_t *)OPERAND_AT(next, 1);
+
+ if (vm_ci_simple(ci) && vm_ci_argc(ci) == 0 && blockiseq == NULL && vm_ci_mid(ci) == idFreeze) {
+ VALUE ary = iobj->operands[0];
+ rb_obj_reveal(ary, rb_cArray);
+
+ insn_replace_with_operands(iseq, iobj, BIN(opt_ary_freeze), 2, ary, (VALUE)ci);
+ ELEM_REMOVE(next);
+ }
+ }
+ }
+
+ /*
+ * duphash {...}
+ * send <calldata!mid:freeze, argc:0, ARGS_SIMPLE>, nil
+ * =>
+ * opt_hash_freeze {...}, <calldata!mid:freeze, argc:0, ARGS_SIMPLE>
+ */
+ if (IS_INSN_ID(iobj, duphash)) {
+ LINK_ELEMENT *next = iobj->link.next;
+ if (IS_INSN(next) && (IS_INSN_ID(next, send))) {
+ const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(next, 0);
+ const rb_iseq_t *blockiseq = (rb_iseq_t *)OPERAND_AT(next, 1);
+
+ if (vm_ci_simple(ci) && vm_ci_argc(ci) == 0 && blockiseq == NULL && vm_ci_mid(ci) == idFreeze) {
+ VALUE hash = iobj->operands[0];
+ rb_obj_reveal(hash, rb_cHash);
+ RB_OBJ_SET_SHAREABLE(hash);
+
+ insn_replace_with_operands(iseq, iobj, BIN(opt_hash_freeze), 2, hash, (VALUE)ci);
+ ELEM_REMOVE(next);
+ }
+ }
+ }
+
+ /*
+ * newarray 0
+ * send <calldata!mid:freeze, argc:0, ARGS_SIMPLE>, nil
+ * =>
+ * opt_ary_freeze [], <calldata!mid:freeze, argc:0, ARGS_SIMPLE>
+ */
+ if (IS_INSN_ID(iobj, newarray) && iobj->operands[0] == INT2FIX(0)) {
+ LINK_ELEMENT *next = iobj->link.next;
+ if (IS_INSN(next) && (IS_INSN_ID(next, send))) {
+ const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(next, 0);
+ const rb_iseq_t *blockiseq = (rb_iseq_t *)OPERAND_AT(next, 1);
+
+ if (vm_ci_simple(ci) && vm_ci_argc(ci) == 0 && blockiseq == NULL && vm_ci_mid(ci) == idFreeze) {
+ insn_replace_with_operands(iseq, iobj, BIN(opt_ary_freeze), 2, rb_cArray_empty_frozen, (VALUE)ci);
+ ELEM_REMOVE(next);
+ }
+ }
+ }
+
+ /*
+ * newhash 0
+ * send <calldata!mid:freeze, argc:0, ARGS_SIMPLE>, nil
+ * =>
+ * opt_hash_freeze {}, <calldata!mid:freeze, argc:0, ARGS_SIMPLE>
+ */
+ if (IS_INSN_ID(iobj, newhash) && iobj->operands[0] == INT2FIX(0)) {
+ LINK_ELEMENT *next = iobj->link.next;
+ if (IS_INSN(next) && (IS_INSN_ID(next, send))) {
+ const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(next, 0);
+ const rb_iseq_t *blockiseq = (rb_iseq_t *)OPERAND_AT(next, 1);
+
+ if (vm_ci_simple(ci) && vm_ci_argc(ci) == 0 && blockiseq == NULL && vm_ci_mid(ci) == idFreeze) {
+ insn_replace_with_operands(iseq, iobj, BIN(opt_hash_freeze), 2, rb_cHash_empty_frozen, (VALUE)ci);
+ ELEM_REMOVE(next);
+ }
+ }
+ }
+
+ if (IS_INSN_ID(iobj, branchif) ||
+ IS_INSN_ID(iobj, branchnil) ||
+ IS_INSN_ID(iobj, branchunless)) {
+ /*
+ * if L1
+ * ...
+ * L1:
+ * jump L2
+ * =>
+ * if L2
+ */
+ INSN *nobj = (INSN *)get_destination_insn(iobj);
+
+ /* This is super nasty hack!!!
+ *
+ * This jump-jump optimization may ignore event flags of the jump
+ * instruction being skipped. Actually, Line 2 TracePoint event
+ * is never fired in the following code:
+ *
+ * 1: raise if 1 == 2
+ * 2: while true
+ * 3: break
+ * 4: end
+ *
+ * This is critical for coverage measurement. [Bug #15980]
+ *
+ * This is a stopgap measure: stop the jump-jump optimization if
+ * coverage measurement is enabled and if the skipped instruction
+ * has any event flag.
+ *
+ * Note that, still, TracePoint Line event does not occur on Line 2.
+ * This should be fixed in future.
+ */
+ int stop_optimization =
+ ISEQ_COVERAGE(iseq) && ISEQ_LINE_COVERAGE(iseq) &&
+ nobj->link.type == ISEQ_ELEMENT_INSN &&
+ nobj->insn_info.events;
+ if (!stop_optimization) {
+ INSN *pobj = (INSN *)iobj->link.prev;
+ int prev_dup = 0;
+ if (pobj) {
+ if (!IS_INSN(&pobj->link))
+ pobj = 0;
+ else if (IS_INSN_ID(pobj, dup))
+ prev_dup = 1;
+ }
+
+ for (;;) {
+ if (IS_INSN(&nobj->link) && IS_INSN_ID(nobj, jump)) {
+ if (!replace_destination(iobj, nobj)) break;
+ }
+ else if (prev_dup && IS_INSN_ID(nobj, dup) &&
+ !!(nobj = (INSN *)nobj->link.next) &&
+ /* basic blocks, with no labels in the middle */
+ nobj->insn_id == iobj->insn_id) {
+ /*
+ * dup
+ * if L1
+ * ...
+ * L1:
+ * dup
+ * if L2
+ * =>
+ * dup
+ * if L2
+ * ...
+ * L1:
+ * dup
+ * if L2
+ */
+ if (!replace_destination(iobj, nobj)) break;
+ }
+ else if (pobj) {
+ /*
+ * putnil
+ * if L1
+ * =>
+ * # nothing
+ *
+ * putobject true
+ * if L1
+ * =>
+ * jump L1
+ *
+ * putstring ".."
+ * if L1
+ * =>
+ * jump L1
+ *
+ * putstring ".."
+ * dup
+ * if L1
+ * =>
+ * putstring ".."
+ * jump L1
+ *
+ */
+ int cond;
+ if (prev_dup && IS_INSN(pobj->link.prev)) {
+ pobj = (INSN *)pobj->link.prev;
+ }
+ if (IS_INSN_ID(pobj, putobject)) {
+ cond = (IS_INSN_ID(iobj, branchif) ?
+ OPERAND_AT(pobj, 0) != Qfalse :
+ IS_INSN_ID(iobj, branchunless) ?
+ OPERAND_AT(pobj, 0) == Qfalse :
+ FALSE);
+ }
+ else if (IS_INSN_ID(pobj, putstring) ||
+ IS_INSN_ID(pobj, duparray) ||
+ IS_INSN_ID(pobj, newarray)) {
+ cond = IS_INSN_ID(iobj, branchif);
+ }
+ else if (IS_INSN_ID(pobj, putnil)) {
+ cond = !IS_INSN_ID(iobj, branchif);
+ }
+ else break;
+ if (prev_dup || !IS_INSN_ID(pobj, newarray)) {
+ ELEM_REMOVE(iobj->link.prev);
+ }
+ else if (!iseq_pop_newarray(iseq, pobj)) {
+ pobj = new_insn_core(iseq, pobj->insn_info.line_no, pobj->insn_info.node_id, BIN(pop), 0, NULL);
+ ELEM_INSERT_PREV(&iobj->link, &pobj->link);
+ }
+ if (cond) {
+ if (prev_dup) {
+ pobj = new_insn_core(iseq, pobj->insn_info.line_no, pobj->insn_info.node_id, BIN(putnil), 0, NULL);
+ ELEM_INSERT_NEXT(&iobj->link, &pobj->link);
+ }
+ iobj->insn_id = BIN(jump);
+ goto again;
+ }
+ else {
+ unref_destination(iobj, 0);
+ ELEM_REMOVE(&iobj->link);
+ }
+ break;
+ }
+ else break;
+ nobj = (INSN *)get_destination_insn(nobj);
+ }
+ }
+ }
+
+ if (IS_INSN_ID(iobj, pop)) {
+ /*
+ * putself / putnil / putobject obj / putstring "..."
+ * pop
+ * =>
+ * # do nothing
+ */
+ LINK_ELEMENT *prev = iobj->link.prev;
+ if (IS_INSN(prev)) {
+ enum ruby_vminsn_type previ = ((INSN *)prev)->insn_id;
+ if (previ == BIN(putobject) || previ == BIN(putnil) ||
+ previ == BIN(putself) || previ == BIN(putstring) ||
+ previ == BIN(putchilledstring) ||
+ previ == BIN(dup) ||
+ previ == BIN(getlocal) ||
+ previ == BIN(getblockparam) ||
+ previ == BIN(getblockparamproxy) ||
+ previ == BIN(getinstancevariable) ||
+ previ == BIN(duparray)) {
+ /* just push operand or static value and pop soon, no
+ * side effects */
+ ELEM_REMOVE(prev);
+ ELEM_REMOVE(&iobj->link);
+ }
+ else if (previ == BIN(newarray) && iseq_pop_newarray(iseq, (INSN*)prev)) {
+ ELEM_REMOVE(&iobj->link);
+ }
+ else if (previ == BIN(concatarray)) {
+ INSN *piobj = (INSN *)prev;
+ INSERT_BEFORE_INSN1(piobj, piobj->insn_info.line_no, piobj->insn_info.node_id, splatarray, Qfalse);
+ INSN_OF(piobj) = BIN(pop);
+ }
+ else if (previ == BIN(concatstrings)) {
+ if (OPERAND_AT(prev, 0) == INT2FIX(1)) {
+ ELEM_REMOVE(prev);
+ }
+ else {
+ ELEM_REMOVE(&iobj->link);
+ INSN_OF(prev) = BIN(adjuststack);
+ }
+ }
+ }
+ }
+
+ if (IS_INSN_ID(iobj, newarray) ||
+ IS_INSN_ID(iobj, duparray) ||
+ IS_INSN_ID(iobj, concatarray) ||
+ IS_INSN_ID(iobj, splatarray) ||
+ 0) {
+ /*
+ * newarray N
+ * splatarray
+ * =>
+ * newarray N
+ * newarray always puts an array
+ */
+ LINK_ELEMENT *next = iobj->link.next;
+ if (IS_INSN(next) && IS_INSN_ID(next, splatarray)) {
+ /* remove splatarray following always-array insn */
+ ELEM_REMOVE(next);
+ }
+ }
+
+ if (IS_INSN_ID(iobj, newarray)) {
+ LINK_ELEMENT *next = iobj->link.next;
+ if (IS_INSN(next) && IS_INSN_ID(next, expandarray) &&
+ OPERAND_AT(next, 1) == INT2FIX(0)) {
+ VALUE op1, op2;
+ op1 = OPERAND_AT(iobj, 0);
+ op2 = OPERAND_AT(next, 0);
+ ELEM_REMOVE(next);
+
+ if (op1 == op2) {
+ /*
+ * newarray 2
+ * expandarray 2, 0
+ * =>
+ * swap
+ */
+ if (op1 == INT2FIX(2)) {
+ INSN_OF(iobj) = BIN(swap);
+ iobj->operand_size = 0;
+ }
+ /*
+ * newarray X
+ * expandarray X, 0
+ * =>
+ * opt_reverse X
+ */
+ else {
+ INSN_OF(iobj) = BIN(opt_reverse);
+ }
+ }
+ else {
+ long diff = FIX2LONG(op1) - FIX2LONG(op2);
+ INSN_OF(iobj) = BIN(opt_reverse);
+ OPERAND_AT(iobj, 0) = OPERAND_AT(next, 0);
+
+ if (op1 > op2) {
+ /* X > Y
+ * newarray X
+ * expandarray Y, 0
+ * =>
+ * pop * (Y-X)
+ * opt_reverse Y
+ */
+ for (; diff > 0; diff--) {
+ INSERT_BEFORE_INSN(iobj, iobj->insn_info.line_no, iobj->insn_info.node_id, pop);
+ }
+ }
+ else { /* (op1 < op2) */
+ /* X < Y
+ * newarray X
+ * expandarray Y, 0
+ * =>
+ * putnil * (Y-X)
+ * opt_reverse Y
+ */
+ for (; diff < 0; diff++) {
+ INSERT_BEFORE_INSN(iobj, iobj->insn_info.line_no, iobj->insn_info.node_id, putnil);
+ }
+ }
+ }
+ }
+ }
+
+ if (IS_INSN_ID(iobj, duparray)) {
+ LINK_ELEMENT *next = iobj->link.next;
+ /*
+ * duparray obj
+ * expandarray X, 0
+ * =>
+ * putobject obj
+ * expandarray X, 0
+ */
+ if (IS_INSN(next) && IS_INSN_ID(next, expandarray)) {
+ INSN_OF(iobj) = BIN(putobject);
+ }
+ }
+
+ if (IS_INSN_ID(iobj, anytostring)) {
+ LINK_ELEMENT *next = iobj->link.next;
+ /*
+ * anytostring
+ * concatstrings 1
+ * =>
+ * anytostring
+ */
+ if (IS_INSN(next) && IS_INSN_ID(next, concatstrings) &&
+ OPERAND_AT(next, 0) == INT2FIX(1)) {
+ ELEM_REMOVE(next);
+ }
+ }
+
+ if (IS_INSN_ID(iobj, putstring) || IS_INSN_ID(iobj, putchilledstring) ||
+ (IS_INSN_ID(iobj, putobject) && RB_TYPE_P(OPERAND_AT(iobj, 0), T_STRING))) {
+ /*
+ * putstring ""
+ * concatstrings N
+ * =>
+ * concatstrings N-1
+ */
+ if (IS_NEXT_INSN_ID(&iobj->link, concatstrings) &&
+ RSTRING_LEN(OPERAND_AT(iobj, 0)) == 0) {
+ INSN *next = (INSN *)iobj->link.next;
+ if ((OPERAND_AT(next, 0) = FIXNUM_INC(OPERAND_AT(next, 0), -1)) == INT2FIX(1)) {
+ ELEM_REMOVE(&next->link);
+ }
+ ELEM_REMOVE(&iobj->link);
+ }
+ if (IS_NEXT_INSN_ID(&iobj->link, toregexp)) {
+ INSN *next = (INSN *)iobj->link.next;
+ if (OPERAND_AT(next, 1) == INT2FIX(1)) {
+ VALUE src = OPERAND_AT(iobj, 0);
+ int opt = (int)FIX2LONG(OPERAND_AT(next, 0));
+ VALUE path = rb_iseq_path(iseq);
+ int line = iobj->insn_info.line_no;
+ VALUE errinfo = rb_errinfo();
+ VALUE re = rb_reg_compile(src, opt, RSTRING_PTR(path), line);
+ if (NIL_P(re)) {
+ VALUE message = rb_attr_get(rb_errinfo(), idMesg);
+ rb_set_errinfo(errinfo);
+ COMPILE_ERROR(iseq, line, "%" PRIsVALUE, message);
+ }
+ else {
+ RB_OBJ_SET_SHAREABLE(re);
+ }
+ RB_OBJ_WRITE(iseq, &OPERAND_AT(iobj, 0), re);
+ ELEM_REMOVE(iobj->link.next);
+ }
+ }
+ }
+
+ if (IS_INSN_ID(iobj, concatstrings)) {
+ /*
+ * concatstrings N
+ * concatstrings M
+ * =>
+ * concatstrings N+M-1
+ */
+ LINK_ELEMENT *next = iobj->link.next;
+ INSN *jump = 0;
+ if (IS_INSN(next) && IS_INSN_ID(next, jump))
+ next = get_destination_insn(jump = (INSN *)next);
+ if (IS_INSN(next) && IS_INSN_ID(next, concatstrings)) {
+ int n = FIX2INT(OPERAND_AT(iobj, 0)) + FIX2INT(OPERAND_AT(next, 0)) - 1;
+ OPERAND_AT(iobj, 0) = INT2FIX(n);
+ if (jump) {
+ LABEL *label = ((LABEL *)OPERAND_AT(jump, 0));
+ if (!--label->refcnt) {
+ ELEM_REMOVE(&label->link);
+ }
+ else {
+ label = NEW_LABEL(0);
+ OPERAND_AT(jump, 0) = (VALUE)label;
+ }
+ label->refcnt++;
+ ELEM_INSERT_NEXT(next, &label->link);
+ CHECK(iseq_peephole_optimize(iseq, get_next_insn(jump), do_tailcallopt));
+ }
+ else {
+ ELEM_REMOVE(next);
+ }
+ }
}
if (do_tailcallopt &&
- (iobj->insn_id == BIN(send) ||
- iobj->insn_id == BIN(opt_aref_with) ||
- iobj->insn_id == BIN(opt_aset_with) ||
- iobj->insn_id == BIN(invokesuper))) {
- /*
- * send ...
- * leave
- * =>
- * send ..., ... | VM_CALL_TAILCALL, ...
- * leave # unreachable
- */
- INSN *piobj = NULL;
- if (iobj->link.next) {
- LINK_ELEMENT *next = iobj->link.next;
- do {
- if (next->type != ISEQ_ELEMENT_INSN) {
- next = next->next;
- continue;
- }
- switch (INSN_OF(next)) {
- case BIN(nop):
- /*case BIN(trace):*/
- next = next->next;
- break;
- case BIN(leave):
- piobj = iobj;
- default:
- next = NULL;
- break;
- }
- } while (next);
- }
-
- if (piobj) {
- struct rb_call_info *ci = (struct rb_call_info *)piobj->operands[0];
- if (piobj->insn_id == BIN(send) || piobj->insn_id == BIN(invokesuper)) {
- if (piobj->operands[2] == 0) { /* no blockiseq */
- ci->flag |= VM_CALL_TAILCALL;
- }
- }
- else {
- ci->flag |= VM_CALL_TAILCALL;
- }
- }
+ (IS_INSN_ID(iobj, send) ||
+ IS_INSN_ID(iobj, invokesuper))) {
+ /*
+ * send ...
+ * leave
+ * =>
+ * send ..., ... | VM_CALL_TAILCALL, ...
+ * leave # unreachable
+ */
+ INSN *piobj = NULL;
+ if (iobj->link.next) {
+ LINK_ELEMENT *next = iobj->link.next;
+ do {
+ if (!IS_INSN(next)) {
+ next = next->next;
+ continue;
+ }
+ switch (INSN_OF(next)) {
+ case BIN(nop):
+ next = next->next;
+ break;
+ case BIN(jump):
+ /* if cond
+ * return tailcall
+ * end
+ */
+ next = get_destination_insn((INSN *)next);
+ break;
+ case BIN(leave):
+ piobj = iobj;
+ /* fall through */
+ default:
+ next = NULL;
+ break;
+ }
+ } while (next);
+ }
+
+ if (piobj) {
+ const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(piobj, 0);
+ if (IS_INSN_ID(piobj, send) ||
+ IS_INSN_ID(piobj, invokesuper)) {
+ if (OPERAND_AT(piobj, 1) == 0) { /* no blockiseq */
+ ci = ci_flag_set(iseq, ci, VM_CALL_TAILCALL);
+ OPERAND_AT(piobj, 0) = (VALUE)ci;
+ RB_OBJ_WRITTEN(iseq, Qundef, ci);
+ }
+ }
+ else {
+ ci = ci_flag_set(iseq, ci, VM_CALL_TAILCALL);
+ OPERAND_AT(piobj, 0) = (VALUE)ci;
+ RB_OBJ_WRITTEN(iseq, Qundef, ci);
+ }
+ }
+ }
+
+ if (IS_INSN_ID(iobj, dup)) {
+ if (IS_NEXT_INSN_ID(&iobj->link, setlocal)) {
+ LINK_ELEMENT *set1 = iobj->link.next, *set2 = NULL;
+
+ /*
+ * dup
+ * setlocal x, y
+ * setlocal x, y
+ * =>
+ * dup
+ * setlocal x, y
+ */
+ if (IS_NEXT_INSN_ID(set1, setlocal)) {
+ set2 = set1->next;
+ if (OPERAND_AT(set1, 0) == OPERAND_AT(set2, 0) &&
+ OPERAND_AT(set1, 1) == OPERAND_AT(set2, 1)) {
+ ELEM_REMOVE(set1);
+ ELEM_REMOVE(&iobj->link);
+ }
+ }
+
+ /*
+ * dup
+ * setlocal x, y
+ * dup
+ * setlocal x, y
+ * =>
+ * dup
+ * setlocal x, y
+ */
+ else if (IS_NEXT_INSN_ID(set1, dup) &&
+ IS_NEXT_INSN_ID(set1->next, setlocal)) {
+ set2 = set1->next->next;
+ if (OPERAND_AT(set1, 0) == OPERAND_AT(set2, 0) &&
+ OPERAND_AT(set1, 1) == OPERAND_AT(set2, 1)) {
+ ELEM_REMOVE(set1->next);
+ ELEM_REMOVE(set2);
+ }
+ }
+ }
+ }
+
+ /*
+ * getlocal x, y
+ * dup
+ * setlocal x, y
+ * =>
+ * dup
+ */
+ if (IS_INSN_ID(iobj, getlocal)) {
+ LINK_ELEMENT *niobj = &iobj->link;
+ if (IS_NEXT_INSN_ID(niobj, dup)) {
+ niobj = niobj->next;
+ }
+ if (IS_NEXT_INSN_ID(niobj, setlocal)) {
+ LINK_ELEMENT *set1 = niobj->next;
+ if (OPERAND_AT(iobj, 0) == OPERAND_AT(set1, 0) &&
+ OPERAND_AT(iobj, 1) == OPERAND_AT(set1, 1)) {
+ ELEM_REMOVE(set1);
+ ELEM_REMOVE(niobj);
+ }
+ }
}
+
+ /*
+ * opt_invokebuiltin_delegate
+ * trace
+ * leave
+ * =>
+ * opt_invokebuiltin_delegate_leave
+ * trace
+ * leave
+ */
+ if (IS_INSN_ID(iobj, opt_invokebuiltin_delegate)) {
+ if (IS_TRACE(iobj->link.next)) {
+ if (IS_NEXT_INSN_ID(iobj->link.next, leave)) {
+ iobj->insn_id = BIN(opt_invokebuiltin_delegate_leave);
+ const struct rb_builtin_function *bf = (const struct rb_builtin_function *)iobj->operands[0];
+ if (iobj == (INSN *)list && bf->argc == 0 && (ISEQ_BODY(iseq)->builtin_attrs & BUILTIN_ATTR_LEAF)) {
+ ISEQ_BODY(iseq)->builtin_attrs |= BUILTIN_ATTR_SINGLE_NOARG_LEAF;
+ }
+ }
+ }
+ }
+
+ /*
+ * getblockparam
+ * branchif / branchunless
+ * =>
+ * getblockparamproxy
+ * branchif / branchunless
+ */
+ if (IS_INSN_ID(iobj, getblockparam)) {
+ if (IS_NEXT_INSN_ID(&iobj->link, branchif) || IS_NEXT_INSN_ID(&iobj->link, branchunless)) {
+ iobj->insn_id = BIN(getblockparamproxy);
+ }
+ }
+
+ if (IS_INSN_ID(iobj, splatarray) && OPERAND_AT(iobj, 0) == false) {
+ LINK_ELEMENT *niobj = &iobj->link;
+ if (IS_NEXT_INSN_ID(niobj, duphash)) {
+ niobj = niobj->next;
+ LINK_ELEMENT *siobj;
+ unsigned int set_flags = 0, unset_flags = 0;
+
+ /*
+ * Eliminate hash allocation for f(*a, kw: 1)
+ *
+ * splatarray false
+ * duphash
+ * send ARGS_SPLAT|KW_SPLAT|KW_SPLAT_MUT and not ARGS_BLOCKARG
+ * =>
+ * splatarray false
+ * putobject
+ * send ARGS_SPLAT|KW_SPLAT
+ */
+ if (IS_NEXT_INSN_ID(niobj, send)) {
+ siobj = niobj->next;
+ set_flags = VM_CALL_ARGS_SPLAT|VM_CALL_KW_SPLAT|VM_CALL_KW_SPLAT_MUT;
+ unset_flags = VM_CALL_ARGS_BLOCKARG;
+ }
+ /*
+ * Eliminate hash allocation for f(*a, kw: 1, &{arg,lvar,@iv})
+ *
+ * splatarray false
+ * duphash
+ * getlocal / getinstancevariable / getblockparamproxy
+ * send ARGS_SPLAT|KW_SPLAT|KW_SPLAT_MUT|ARGS_BLOCKARG
+ * =>
+ * splatarray false
+ * putobject
+ * getlocal / getinstancevariable / getblockparamproxy
+ * send ARGS_SPLAT|KW_SPLAT|ARGS_BLOCKARG
+ */
+ else if ((IS_NEXT_INSN_ID(niobj, getlocal) || IS_NEXT_INSN_ID(niobj, getinstancevariable) ||
+ IS_NEXT_INSN_ID(niobj, getblockparamproxy)) && (IS_NEXT_INSN_ID(niobj->next, send))) {
+ siobj = niobj->next->next;
+ set_flags = VM_CALL_ARGS_SPLAT|VM_CALL_KW_SPLAT|VM_CALL_KW_SPLAT_MUT|VM_CALL_ARGS_BLOCKARG;
+ }
+
+ if (set_flags) {
+ const struct rb_callinfo *ci = (const struct rb_callinfo *)OPERAND_AT(siobj, 0);
+ unsigned int flags = vm_ci_flag(ci);
+ if ((flags & set_flags) == set_flags && !(flags & unset_flags)) {
+ ((INSN*)niobj)->insn_id = BIN(putobject);
+ RB_OBJ_WRITE(iseq, &OPERAND_AT(niobj, 0), RB_OBJ_SET_SHAREABLE(rb_hash_freeze(rb_hash_resurrect(OPERAND_AT(niobj, 0)))));
+
+ const struct rb_callinfo *nci = vm_ci_new(vm_ci_mid(ci),
+ flags & ~VM_CALL_KW_SPLAT_MUT, vm_ci_argc(ci), vm_ci_kwarg(ci));
+ RB_OBJ_WRITTEN(iseq, ci, nci);
+ OPERAND_AT(siobj, 0) = (VALUE)nci;
+ }
+ }
+ }
+ }
+
return COMPILE_OK;
}
static int
insn_set_specialized_instruction(rb_iseq_t *iseq, INSN *iobj, int insn_id)
{
- iobj->insn_id = insn_id;
- iobj->operand_size = insn_len(insn_id) - 1;
-
if (insn_id == BIN(opt_neq)) {
- VALUE *old_operands = iobj->operands;
- iobj->operand_size = 4;
- iobj->operands = (VALUE *)compile_data_alloc(iseq, iobj->operand_size * sizeof(VALUE));
- iobj->operands[0] = old_operands[0];
- iobj->operands[1] = Qfalse; /* CALL_CACHE */
- iobj->operands[2] = (VALUE)new_callinfo(iseq, idEq, 1, 0, NULL, FALSE);
- iobj->operands[3] = Qfalse; /* CALL_CACHE */
+ VALUE original_ci = iobj->operands[0];
+ VALUE new_ci = (VALUE)new_callinfo(iseq, idEq, 1, 0, NULL, FALSE);
+ insn_replace_with_operands(iseq, iobj, insn_id, 2, new_ci, original_ci);
+ }
+ else {
+ iobj->insn_id = insn_id;
+ iobj->operand_size = insn_len(insn_id) - 1;
}
+ iobj->insn_info.events |= RUBY_EVENT_C_CALL | RUBY_EVENT_C_RETURN;
return COMPILE_OK;
}
@@ -2283,80 +4210,299 @@ insn_set_specialized_instruction(rb_iseq_t *iseq, INSN *iobj, int insn_id)
static int
iseq_specialized_instruction(rb_iseq_t *iseq, INSN *iobj)
{
- if (iobj->insn_id == BIN(send)) {
- struct rb_call_info *ci = (struct rb_call_info *)OPERAND_AT(iobj, 0);
- const rb_iseq_t *blockiseq = (rb_iseq_t *)OPERAND_AT(iobj, 2);
+ if (IS_INSN_ID(iobj, newarray) && iobj->link.next &&
+ IS_INSN(iobj->link.next)) {
+ /*
+ * [a, b, ...].max/min -> a, b, c, opt_newarray_send max/min
+ */
+ INSN *niobj = (INSN *)iobj->link.next;
+ if (IS_INSN_ID(niobj, send)) {
+ const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(niobj, 0);
+ if (vm_ci_simple(ci) && vm_ci_argc(ci) == 0) {
+ VALUE method = INT2FIX(0);
+ switch (vm_ci_mid(ci)) {
+ case idMax:
+ method = INT2FIX(VM_OPT_NEWARRAY_SEND_MAX);
+ break;
+ case idMin:
+ method = INT2FIX(VM_OPT_NEWARRAY_SEND_MIN);
+ break;
+ case idHash:
+ method = INT2FIX(VM_OPT_NEWARRAY_SEND_HASH);
+ break;
+ }
+
+ if (method != INT2FIX(0)) {
+ VALUE num = iobj->operands[0];
+ insn_replace_with_operands(iseq, iobj, BIN(opt_newarray_send), 2, num, method);
+ ELEM_REMOVE(&niobj->link);
+ return COMPILE_OK;
+ }
+ }
+ }
+ else if ((IS_INSN_ID(niobj, putstring) || IS_INSN_ID(niobj, putchilledstring) ||
+ (IS_INSN_ID(niobj, putobject) && RB_TYPE_P(OPERAND_AT(niobj, 0), T_STRING))) &&
+ IS_NEXT_INSN_ID(&niobj->link, send)) {
+ const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT((INSN *)niobj->link.next, 0);
+ if (vm_ci_simple(ci) && vm_ci_argc(ci) == 1 && vm_ci_mid(ci) == idPack) {
+ VALUE num = iobj->operands[0];
+ insn_replace_with_operands(iseq, iobj, BIN(opt_newarray_send), 2, FIXNUM_INC(num, 1), INT2FIX(VM_OPT_NEWARRAY_SEND_PACK));
+ ELEM_REMOVE(&iobj->link);
+ ELEM_REMOVE(niobj->link.next);
+ ELEM_INSERT_NEXT(&niobj->link, &iobj->link);
+ return COMPILE_OK;
+ }
+ }
+ // newarray n, putchilledstring "E", getlocal b, send :pack with {buffer: b}
+ // -> putchilledstring "E", getlocal b, opt_newarray_send n+2, :pack, :buffer
+ else if ((IS_INSN_ID(niobj, putstring) || IS_INSN_ID(niobj, putchilledstring) ||
+ (IS_INSN_ID(niobj, putobject) && RB_TYPE_P(OPERAND_AT(niobj, 0), T_STRING))) &&
+ IS_NEXT_INSN_ID(&niobj->link, getlocal) &&
+ (niobj->link.next && IS_NEXT_INSN_ID(niobj->link.next, send))) {
+ const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT((INSN *)(niobj->link.next)->next, 0);
+ const struct rb_callinfo_kwarg *kwarg = vm_ci_kwarg(ci);
+ if (vm_ci_mid(ci) == idPack && vm_ci_argc(ci) == 2 &&
+ (kwarg && kwarg->keyword_len == 1 && kwarg->keywords[0] == rb_id2sym(idBuffer))) {
+ VALUE num = iobj->operands[0];
+ insn_replace_with_operands(iseq, iobj, BIN(opt_newarray_send), 2, FIXNUM_INC(num, 2), INT2FIX(VM_OPT_NEWARRAY_SEND_PACK_BUFFER));
+ // Remove the "send" insn.
+ ELEM_REMOVE((niobj->link.next)->next);
+ // Remove the modified insn from its original "newarray" position...
+ ELEM_REMOVE(&iobj->link);
+ // and insert it after the buffer insn.
+ ELEM_INSERT_NEXT(niobj->link.next, &iobj->link);
+ return COMPILE_OK;
+ }
+ }
+
+ // Break the "else if" chain since some prior checks abort after sub-ifs.
+ // We already found "newarray". To match `[...].include?(arg)` we look for
+ // the instruction(s) representing the argument followed by a "send".
+ if ((IS_INSN_ID(niobj, putstring) || IS_INSN_ID(niobj, putchilledstring) ||
+ IS_INSN_ID(niobj, putobject) ||
+ IS_INSN_ID(niobj, putself) ||
+ IS_INSN_ID(niobj, getlocal) ||
+ IS_INSN_ID(niobj, getinstancevariable)) &&
+ IS_NEXT_INSN_ID(&niobj->link, send)) {
+
+ LINK_ELEMENT *sendobj = &(niobj->link); // Below we call ->next;
+ const struct rb_callinfo *ci;
+ // Allow any number (0 or more) of simple method calls on the argument
+ // (as in `[...].include?(arg.method1.method2)`.
+ do {
+ sendobj = sendobj->next;
+ ci = (struct rb_callinfo *)OPERAND_AT(sendobj, 0);
+ } while (vm_ci_simple(ci) && vm_ci_argc(ci) == 0 && IS_NEXT_INSN_ID(sendobj, send));
+
+ // If this send is for .include? with one arg we can do our opt.
+ if (vm_ci_simple(ci) && vm_ci_argc(ci) == 1 && vm_ci_mid(ci) == idIncludeP) {
+ VALUE num = iobj->operands[0];
+ INSN *sendins = (INSN *)sendobj;
+ insn_replace_with_operands(iseq, sendins, BIN(opt_newarray_send), 2, FIXNUM_INC(num, 1), INT2FIX(VM_OPT_NEWARRAY_SEND_INCLUDE_P));
+ // Remove the original "newarray" insn.
+ ELEM_REMOVE(&iobj->link);
+ return COMPILE_OK;
+ }
+ }
+ }
+
+ /*
+ * duparray [...]
+ * some insn for the arg...
+ * send <calldata!mid:include?, argc:1, ARGS_SIMPLE>, nil
+ * =>
+ * arg insn...
+ * opt_duparray_send [...], :include?, 1
+ */
+ if (IS_INSN_ID(iobj, duparray) && iobj->link.next && IS_INSN(iobj->link.next)) {
+ INSN *niobj = (INSN *)iobj->link.next;
+ if ((IS_INSN_ID(niobj, getlocal) ||
+ IS_INSN_ID(niobj, getinstancevariable) ||
+ IS_INSN_ID(niobj, putself)) &&
+ IS_NEXT_INSN_ID(&niobj->link, send)) {
+
+ LINK_ELEMENT *sendobj = &(niobj->link); // Below we call ->next;
+ const struct rb_callinfo *ci;
+ // Allow any number (0 or more) of simple method calls on the argument
+ // (as in `[...].include?(arg.method1.method2)`.
+ do {
+ sendobj = sendobj->next;
+ ci = (struct rb_callinfo *)OPERAND_AT(sendobj, 0);
+ } while (vm_ci_simple(ci) && vm_ci_argc(ci) == 0 && IS_NEXT_INSN_ID(sendobj, send));
+
+ if (vm_ci_simple(ci) && vm_ci_argc(ci) == 1 && vm_ci_mid(ci) == idIncludeP) {
+ // Move the array arg from duparray to opt_duparray_send.
+ VALUE ary = iobj->operands[0];
+ rb_obj_reveal(ary, rb_cArray);
+
+ INSN *sendins = (INSN *)sendobj;
+ insn_replace_with_operands(iseq, sendins, BIN(opt_duparray_send), 3, ary, rb_id2sym(idIncludeP), INT2FIX(1));
+
+ // Remove the duparray insn.
+ ELEM_REMOVE(&iobj->link);
+ return COMPILE_OK;
+ }
+ }
+ }
+
+
+ if (IS_INSN_ID(iobj, send)) {
+ const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(iobj, 0);
+ const rb_iseq_t *blockiseq = (rb_iseq_t *)OPERAND_AT(iobj, 1);
#define SP_INSN(opt) insn_set_specialized_instruction(iseq, iobj, BIN(opt_##opt))
- if (ci->flag & VM_CALL_ARGS_SIMPLE) {
- switch (ci->orig_argc) {
- case 0:
- switch (ci->mid) {
- case idLength: SP_INSN(length); return COMPILE_OK;
- case idSize: SP_INSN(size); return COMPILE_OK;
- case idEmptyP: SP_INSN(empty_p);return COMPILE_OK;
- case idSucc: SP_INSN(succ); return COMPILE_OK;
- case idNot: SP_INSN(not); return COMPILE_OK;
- }
- break;
- case 1:
- switch (ci->mid) {
- case idPLUS: SP_INSN(plus); return COMPILE_OK;
- case idMINUS: SP_INSN(minus); return COMPILE_OK;
- case idMULT: SP_INSN(mult); return COMPILE_OK;
- case idDIV: SP_INSN(div); return COMPILE_OK;
- case idMOD: SP_INSN(mod); return COMPILE_OK;
- case idEq: SP_INSN(eq); return COMPILE_OK;
- case idNeq: SP_INSN(neq); return COMPILE_OK;
- case idLT: SP_INSN(lt); return COMPILE_OK;
- case idLE: SP_INSN(le); return COMPILE_OK;
- case idGT: SP_INSN(gt); return COMPILE_OK;
- case idGE: SP_INSN(ge); return COMPILE_OK;
- case idLTLT: SP_INSN(ltlt); return COMPILE_OK;
- case idAREF: SP_INSN(aref); return COMPILE_OK;
- }
- break;
- case 2:
- switch (ci->mid) {
- case idASET: SP_INSN(aset); return COMPILE_OK;
- }
- break;
- }
- }
-
- if ((ci->flag & VM_CALL_ARGS_BLOCKARG) == 0 && blockiseq == NULL) {
- iobj->insn_id = BIN(opt_send_without_block);
- iobj->operand_size = insn_len(iobj->insn_id) - 1;
- }
+ if (vm_ci_simple(ci)) {
+ switch (vm_ci_argc(ci)) {
+ case 0:
+ switch (vm_ci_mid(ci)) {
+ case idLength: SP_INSN(length); return COMPILE_OK;
+ case idSize: SP_INSN(size); return COMPILE_OK;
+ case idEmptyP: SP_INSN(empty_p);return COMPILE_OK;
+ case idNilP: SP_INSN(nil_p); return COMPILE_OK;
+ case idSucc: SP_INSN(succ); return COMPILE_OK;
+ case idNot: SP_INSN(not); return COMPILE_OK;
+ }
+ break;
+ case 1:
+ switch (vm_ci_mid(ci)) {
+ case idPLUS: SP_INSN(plus); return COMPILE_OK;
+ case idMINUS: SP_INSN(minus); return COMPILE_OK;
+ case idMULT: SP_INSN(mult); return COMPILE_OK;
+ case idDIV: SP_INSN(div); return COMPILE_OK;
+ case idMOD: SP_INSN(mod); return COMPILE_OK;
+ case idEq: SP_INSN(eq); return COMPILE_OK;
+ case idNeq: SP_INSN(neq); return COMPILE_OK;
+ case idEqTilde:SP_INSN(regexpmatch2);return COMPILE_OK;
+ case idLT: SP_INSN(lt); return COMPILE_OK;
+ case idLE: SP_INSN(le); return COMPILE_OK;
+ case idGT: SP_INSN(gt); return COMPILE_OK;
+ case idGE: SP_INSN(ge); return COMPILE_OK;
+ case idLTLT: SP_INSN(ltlt); return COMPILE_OK;
+ case idAREF: SP_INSN(aref); return COMPILE_OK;
+ case idAnd: SP_INSN(and); return COMPILE_OK;
+ case idOr: SP_INSN(or); return COMPILE_OK;
+ }
+ break;
+ case 2:
+ switch (vm_ci_mid(ci)) {
+ case idASET: SP_INSN(aset); return COMPILE_OK;
+ }
+ break;
+ }
+ }
+
+ if ((vm_ci_flag(ci) & (VM_CALL_ARGS_BLOCKARG | VM_CALL_FORWARDING)) == 0 && blockiseq == NULL) {
+ iobj->insn_id = BIN(opt_send_without_block);
+ iobj->operand_size = insn_len(iobj->insn_id) - 1;
+ }
}
#undef SP_INSN
return COMPILE_OK;
}
+static inline int
+tailcallable_p(rb_iseq_t *iseq)
+{
+ switch (ISEQ_BODY(iseq)->type) {
+ case ISEQ_TYPE_TOP:
+ case ISEQ_TYPE_EVAL:
+ case ISEQ_TYPE_MAIN:
+ /* not tail callable because cfp will be over popped */
+ case ISEQ_TYPE_RESCUE:
+ case ISEQ_TYPE_ENSURE:
+ /* rescue block can't tail call because of errinfo */
+ return FALSE;
+ default:
+ return TRUE;
+ }
+}
+
static int
-iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
+iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *const anchor)
{
LINK_ELEMENT *list;
const int do_peepholeopt = ISEQ_COMPILE_DATA(iseq)->option->peephole_optimization;
- const int do_tailcallopt = ISEQ_COMPILE_DATA(iseq)->option->tailcall_optimization;
+ const int do_tailcallopt = tailcallable_p(iseq) &&
+ ISEQ_COMPILE_DATA(iseq)->option->tailcall_optimization;
const int do_si = ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction;
const int do_ou = ISEQ_COMPILE_DATA(iseq)->option->operands_unification;
+ int rescue_level = 0;
+ int tailcallopt = do_tailcallopt;
+
list = FIRST_ELEMENT(anchor);
+ int do_block_optimization = 0;
+ LABEL * block_loop_label = NULL;
+
+ // If we're optimizing a block
+ if (ISEQ_BODY(iseq)->type == ISEQ_TYPE_BLOCK) {
+ do_block_optimization = 1;
+
+ // If the block starts with a nop and a label,
+ // record the label so we can detect if it's a jump target
+ LINK_ELEMENT * le = FIRST_ELEMENT(anchor)->next;
+ if (IS_INSN(le) && IS_INSN_ID((INSN *)le, nop) && IS_LABEL(le->next)) {
+ block_loop_label = (LABEL *)le->next;
+ }
+ }
+
while (list) {
- if (list->type == ISEQ_ELEMENT_INSN) {
- if (do_peepholeopt) {
- iseq_peephole_optimize(iseq, list, do_tailcallopt);
- }
- if (do_si) {
- iseq_specialized_instruction(iseq, (INSN *)list);
- }
- if (do_ou) {
- insn_operands_unification((INSN *)list);
- }
- }
- list = list->next;
+ if (IS_INSN(list)) {
+ if (do_peepholeopt) {
+ iseq_peephole_optimize(iseq, list, tailcallopt);
+ }
+ if (do_si) {
+ iseq_specialized_instruction(iseq, (INSN *)list);
+ }
+ if (do_ou) {
+ insn_operands_unification((INSN *)list);
+ }
+
+ if (do_block_optimization) {
+ INSN * item = (INSN *)list;
+ // Give up if there is a throw
+ if (IS_INSN_ID(item, throw)) {
+ do_block_optimization = 0;
+ }
+ else {
+ // If the instruction has a jump target, check if the
+ // jump target is the block loop label
+ const char *types = insn_op_types(item->insn_id);
+ for (int j = 0; types[j]; j++) {
+ if (types[j] == TS_OFFSET) {
+ // If the jump target is equal to the block loop
+ // label, then we can't do the optimization because
+ // the leading `nop` instruction fires the block
+ // entry tracepoint
+ LABEL * target = (LABEL *)OPERAND_AT(item, j);
+ if (target == block_loop_label) {
+ do_block_optimization = 0;
+ }
+ }
+ }
+ }
+ }
+ }
+ if (IS_LABEL(list)) {
+ switch (((LABEL *)list)->rescued) {
+ case LABEL_RESCUE_BEG:
+ rescue_level++;
+ tailcallopt = FALSE;
+ break;
+ case LABEL_RESCUE_END:
+ if (!--rescue_level) tailcallopt = do_tailcallopt;
+ break;
+ }
+ }
+ list = list->next;
+ }
+
+ if (do_block_optimization) {
+ LINK_ELEMENT * le = FIRST_ELEMENT(anchor)->next;
+ if (IS_INSN(le) && IS_INSN_ID((INSN *)le, nop)) {
+ ELEM_REMOVE(le);
+ }
}
return COMPILE_OK;
}
@@ -2364,7 +4510,7 @@ iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
#if OPT_INSTRUCTIONS_UNIFICATION
static INSN *
new_unified_insn(rb_iseq_t *iseq,
- int insn_id, int size, LINK_ELEMENT *seq_list)
+ int insn_id, int size, LINK_ELEMENT *seq_list)
{
INSN *iobj = 0;
LINK_ELEMENT *list = seq_list;
@@ -2374,26 +4520,25 @@ new_unified_insn(rb_iseq_t *iseq,
/* count argc */
for (i = 0; i < size; i++) {
- iobj = (INSN *)list;
- argc += iobj->operand_size;
- list = list->next;
+ iobj = (INSN *)list;
+ argc += iobj->operand_size;
+ list = list->next;
}
if (argc > 0) {
- ptr = operands =
- (VALUE *)compile_data_alloc(iseq, sizeof(VALUE) * argc);
+ ptr = operands = compile_data_alloc2(iseq, sizeof(VALUE), argc);
}
/* copy operands */
list = seq_list;
for (i = 0; i < size; i++) {
- iobj = (INSN *)list;
- MEMCPY(ptr, iobj->operands, VALUE, iobj->operand_size);
- ptr += iobj->operand_size;
- list = list->next;
+ iobj = (INSN *)list;
+ MEMCPY(ptr, iobj->operands, VALUE, iobj->operand_size);
+ ptr += iobj->operand_size;
+ list = list->next;
}
- return new_insn_core(iseq, iobj->line_no, insn_id, argc, operands);
+ return new_insn_core(iseq, iobj->insn_info.line_no, iobj->insn_info.node_id, insn_id, argc, operands);
}
#endif
@@ -2403,7 +4548,7 @@ new_unified_insn(rb_iseq_t *iseq,
* It's future work (if compile time was bottle neck).
*/
static int
-iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
+iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *const anchor)
{
#if OPT_INSTRUCTIONS_UNIFICATION
LINK_ELEMENT *list;
@@ -2413,1007 +4558,1775 @@ iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
list = FIRST_ELEMENT(anchor);
while (list) {
- if (list->type == ISEQ_ELEMENT_INSN) {
- iobj = (INSN *)list;
- id = iobj->insn_id;
- if (unified_insns_data[id] != 0) {
- const int *const *entry = unified_insns_data[id];
- for (j = 1; j < (intptr_t)entry[0]; j++) {
- const int *unified = entry[j];
- LINK_ELEMENT *li = list->next;
- for (k = 2; k < unified[1]; k++) {
- if (li->type != ISEQ_ELEMENT_INSN ||
- ((INSN *)li)->insn_id != unified[k]) {
- goto miss;
- }
- li = li->next;
- }
- /* matched */
- niobj =
- new_unified_insn(iseq, unified[0], unified[1] - 1,
- list);
-
- /* insert to list */
- niobj->link.prev = (LINK_ELEMENT *)iobj->link.prev;
- niobj->link.next = li;
- if (li) {
- li->prev = (LINK_ELEMENT *)niobj;
- }
-
- list->prev->next = (LINK_ELEMENT *)niobj;
- list = (LINK_ELEMENT *)niobj;
- break;
- miss:;
- }
- }
- }
- list = list->next;
+ if (IS_INSN(list)) {
+ iobj = (INSN *)list;
+ id = iobj->insn_id;
+ if (unified_insns_data[id] != 0) {
+ const int *const *entry = unified_insns_data[id];
+ for (j = 1; j < (intptr_t)entry[0]; j++) {
+ const int *unified = entry[j];
+ LINK_ELEMENT *li = list->next;
+ for (k = 2; k < unified[1]; k++) {
+ if (!IS_INSN(li) ||
+ ((INSN *)li)->insn_id != unified[k]) {
+ goto miss;
+ }
+ li = li->next;
+ }
+ /* matched */
+ niobj =
+ new_unified_insn(iseq, unified[0], unified[1] - 1,
+ list);
+
+ /* insert to list */
+ niobj->link.prev = (LINK_ELEMENT *)iobj->link.prev;
+ niobj->link.next = li;
+ if (li) {
+ li->prev = (LINK_ELEMENT *)niobj;
+ }
+
+ list->prev->next = (LINK_ELEMENT *)niobj;
+ list = (LINK_ELEMENT *)niobj;
+ break;
+ miss:;
+ }
+ }
+ }
+ list = list->next;
}
#endif
return COMPILE_OK;
}
-#if OPT_STACK_CACHING
-
-#define SC_INSN(insn, stat) sc_insn_info[(insn)][(stat)]
-#define SC_NEXT(insn) sc_insn_next[(insn)]
-
-#include "opt_sc.inc"
-
static int
-insn_set_sc_state(rb_iseq_t *iseq, INSN *iobj, int state)
+all_string_result_p(const NODE *node)
{
- int nstate;
- int insn_id;
-
- insn_id = iobj->insn_id;
- iobj->insn_id = SC_INSN(insn_id, state);
- nstate = SC_NEXT(iobj->insn_id);
-
- if (insn_id == BIN(jump) ||
- insn_id == BIN(branchif) || insn_id == BIN(branchunless)) {
- LABEL *lobj = (LABEL *)OPERAND_AT(iobj, 0);
-
- if (lobj->sc_state != 0) {
- if (lobj->sc_state != nstate) {
- dump_disasm_list((LINK_ELEMENT *)iobj);
- dump_disasm_list((LINK_ELEMENT *)lobj);
- printf("\n-- %d, %d\n", lobj->sc_state, nstate);
- COMPILE_ERROR(ruby_sourcefile_string, iobj->line_no,
- "insn_set_sc_state error\n");
- return COMPILE_NG;
- }
- }
- else {
- lobj->sc_state = nstate;
- }
- if (insn_id == BIN(jump)) {
- nstate = SCS_XX;
- }
- }
- else if (insn_id == BIN(leave)) {
- nstate = SCS_XX;
+ if (!node) return FALSE;
+ switch (nd_type(node)) {
+ case NODE_STR: case NODE_DSTR: case NODE_FILE:
+ return TRUE;
+ case NODE_IF: case NODE_UNLESS:
+ if (!RNODE_IF(node)->nd_body || !RNODE_IF(node)->nd_else) return FALSE;
+ if (all_string_result_p(RNODE_IF(node)->nd_body))
+ return all_string_result_p(RNODE_IF(node)->nd_else);
+ return FALSE;
+ case NODE_AND: case NODE_OR:
+ if (!RNODE_AND(node)->nd_2nd)
+ return all_string_result_p(RNODE_AND(node)->nd_1st);
+ if (!all_string_result_p(RNODE_AND(node)->nd_1st))
+ return FALSE;
+ return all_string_result_p(RNODE_AND(node)->nd_2nd);
+ default:
+ return FALSE;
}
-
- return nstate;
}
+struct dstr_ctxt {
+ rb_iseq_t *const iseq;
+ LINK_ANCHOR *const ret;
+ VALUE lit;
+ const NODE *lit_node;
+ int cnt;
+ int dregx;
+};
+
static int
-label_set_sc_state(LABEL *lobj, int state)
+append_dstr_fragment(struct dstr_ctxt *args, const NODE *const node, rb_parser_string_t *str)
{
- if (lobj->sc_state != 0) {
- if (lobj->sc_state != state) {
- state = lobj->sc_state;
- }
+ VALUE s = rb_str_new_mutable_parser_string(str);
+ if (args->dregx) {
+ VALUE error = rb_reg_check_preprocess(s);
+ if (!NIL_P(error)) {
+ COMPILE_ERROR(args->iseq, nd_line(node), "%" PRIsVALUE, error);
+ return COMPILE_NG;
+ }
+ }
+ if (NIL_P(args->lit)) {
+ args->lit = s;
+ args->lit_node = node;
}
else {
- lobj->sc_state = state;
+ rb_str_buf_append(args->lit, s);
}
-
- return state;
+ return COMPILE_OK;
}
-
-#endif
+static void
+flush_dstr_fragment(struct dstr_ctxt *args)
+{
+ if (!NIL_P(args->lit)) {
+ rb_iseq_t *iseq = args->iseq;
+ VALUE lit = args->lit;
+ args->lit = Qnil;
+ lit = rb_fstring(lit);
+ ADD_INSN1(args->ret, args->lit_node, putobject, lit);
+ RB_OBJ_WRITTEN(args->iseq, Qundef, lit);
+ args->cnt++;
+ }
+}
static int
-iseq_set_sequence_stackcaching(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
+compile_dstr_fragments_0(struct dstr_ctxt *args, const NODE *const node)
{
-#if OPT_STACK_CACHING
- LINK_ELEMENT *list;
- int state, insn_id;
+ const struct RNode_LIST *list = RNODE_DSTR(node)->nd_next;
+ rb_parser_string_t *str = RNODE_DSTR(node)->string;
- /* initialize */
- state = SCS_XX;
- list = FIRST_ELEMENT(anchor);
- /* dump_disasm_list(list); */
+ if (str) {
+ CHECK(append_dstr_fragment(args, node, str));
+ }
- /* for each list element */
while (list) {
- redo_point:
- switch (list->type) {
- case ISEQ_ELEMENT_INSN:
- {
- INSN *iobj = (INSN *)list;
- insn_id = iobj->insn_id;
-
- /* dump_disasm_list(list); */
-
- switch (insn_id) {
- case BIN(nop):
- {
- /* exception merge point */
- if (state != SCS_AX) {
- INSN *rpobj =
- new_insn_body(iseq, 0, BIN(reput), 0);
-
- /* replace this insn */
- REPLACE_ELEM(list, (LINK_ELEMENT *)rpobj);
- list = (LINK_ELEMENT *)rpobj;
- goto redo_point;
- }
- break;
- }
- case BIN(swap):
- {
- if (state == SCS_AB || state == SCS_BA) {
- state = (state == SCS_AB ? SCS_BA : SCS_AB);
-
- REMOVE_ELEM(list);
- list = list->next;
- goto redo_point;
- }
- break;
- }
- case BIN(pop):
- {
- switch (state) {
- case SCS_AX:
- case SCS_BX:
- state = SCS_XX;
- break;
- case SCS_AB:
- state = SCS_AX;
- break;
- case SCS_BA:
- state = SCS_BX;
- break;
- case SCS_XX:
- goto normal_insn;
- default:
- COMPILE_ERROR(ruby_sourcefile_string, iobj->line_no,
- "unreachable");
- return COMPILE_NG;
- }
- /* remove useless pop */
- REMOVE_ELEM(list);
- list = list->next;
- goto redo_point;
- }
- default:;
- /* none */
- } /* end of switch */
- normal_insn:
- state = insn_set_sc_state(iseq, iobj, state);
- break;
- }
- case ISEQ_ELEMENT_LABEL:
- {
- LABEL *lobj;
- lobj = (LABEL *)list;
-
- state = label_set_sc_state(lobj, state);
- }
- default:
- break;
- }
- list = list->next;
+ const NODE *const head = list->nd_head;
+ if (nd_type_p(head, NODE_STR)) {
+ CHECK(append_dstr_fragment(args, node, RNODE_STR(head)->string));
+ }
+ else if (nd_type_p(head, NODE_DSTR)) {
+ CHECK(compile_dstr_fragments_0(args, head));
+ }
+ else {
+ flush_dstr_fragment(args);
+ rb_iseq_t *iseq = args->iseq;
+ CHECK(COMPILE(args->ret, "each string", head));
+ args->cnt++;
+ }
+ list = (struct RNode_LIST *)list->nd_next;
}
-#endif
return COMPILE_OK;
}
static int
-compile_dstr_fragments(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int *cntp)
+compile_dstr_fragments(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int *cntp, int dregx)
{
- NODE *list = node->nd_next;
- VALUE lit = node->nd_lit;
- LINK_ELEMENT *first_lit = 0;
- int cnt = 0;
+ struct dstr_ctxt args = {
+ .iseq = iseq, .ret = ret,
+ .lit = Qnil, .lit_node = NULL,
+ .cnt = 0, .dregx = dregx,
+ };
+ CHECK(compile_dstr_fragments_0(&args, node));
+ flush_dstr_fragment(&args);
- debugp_param("nd_lit", lit);
- if (!NIL_P(lit)) {
- cnt++;
- if (!RB_TYPE_P(lit, T_STRING)) {
- rb_compile_bug_str(ERROR_ARGS "dstr: must be string: %s",
- rb_builtin_type_name(TYPE(lit)));
- }
- lit = node->nd_lit = rb_fstring(lit);
- ADD_INSN1(ret, nd_line(node), putobject, lit);
- if (RSTRING_LEN(lit) == 0) first_lit = LAST_ELEMENT(ret);
- }
+ *cntp = args.cnt;
- while (list) {
- node = list->nd_head;
- if (nd_type(node) == NODE_STR) {
- node->nd_lit = rb_fstring(node->nd_lit);
- ADD_INSN1(ret, nd_line(node), putobject, node->nd_lit);
- lit = Qnil;
- }
- else {
- COMPILE(ret, "each string", node);
- }
- cnt++;
- list = list->nd_next;
- }
- if (NIL_P(lit) && first_lit) {
- REMOVE_ELEM(first_lit);
- --cnt;
- }
- *cntp = cnt;
+ return COMPILE_OK;
+}
+static int
+compile_block(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int popped)
+{
+ while (node && nd_type_p(node, NODE_BLOCK)) {
+ CHECK(COMPILE_(ret, "BLOCK body", RNODE_BLOCK(node)->nd_head,
+ (RNODE_BLOCK(node)->nd_next ? 1 : popped)));
+ node = RNODE_BLOCK(node)->nd_next;
+ }
+ if (node) {
+ CHECK(COMPILE_(ret, "BLOCK next", RNODE_BLOCK(node)->nd_next, popped));
+ }
return COMPILE_OK;
}
static int
-compile_dstr(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node)
+compile_dstr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node)
{
int cnt;
- compile_dstr_fragments(iseq, ret, node, &cnt);
- ADD_INSN1(ret, nd_line(node), concatstrings, INT2FIX(cnt));
+ if (!RNODE_DSTR(node)->nd_next) {
+ VALUE lit = rb_node_dstr_string_val(node);
+ ADD_INSN1(ret, node, putstring, lit);
+ RB_OBJ_SET_SHAREABLE(lit);
+ RB_OBJ_WRITTEN(iseq, Qundef, lit);
+ }
+ else {
+ CHECK(compile_dstr_fragments(iseq, ret, node, &cnt, FALSE));
+ ADD_INSN1(ret, node, concatstrings, INT2FIX(cnt));
+ }
return COMPILE_OK;
}
static int
-compile_dregx(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node)
+compile_dregx(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
{
int cnt;
- compile_dstr_fragments(iseq, ret, node, &cnt);
- ADD_INSN2(ret, nd_line(node), toregexp, INT2FIX(node->nd_cflag), INT2FIX(cnt));
+ int cflag = (int)RNODE_DREGX(node)->as.nd_cflag;
+
+ if (!RNODE_DREGX(node)->nd_next) {
+ if (!popped) {
+ VALUE src = rb_node_dregx_string_val(node);
+ VALUE match = rb_reg_compile(src, cflag, NULL, 0);
+ RB_OBJ_SET_SHAREABLE(match);
+ ADD_INSN1(ret, node, putobject, match);
+ RB_OBJ_WRITTEN(iseq, Qundef, match);
+ }
+ return COMPILE_OK;
+ }
+
+ CHECK(compile_dstr_fragments(iseq, ret, node, &cnt, TRUE));
+ ADD_INSN2(ret, node, toregexp, INT2FIX(cflag), INT2FIX(cnt));
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+
return COMPILE_OK;
}
static int
-compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * cond,
- LABEL *then_label, LABEL *else_label)
+compile_flip_flop(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int again,
+ LABEL *then_label, LABEL *else_label)
+{
+ const int line = nd_line(node);
+ LABEL *lend = NEW_LABEL(line);
+ rb_num_t cnt = ISEQ_FLIP_CNT_INCREMENT(ISEQ_BODY(iseq)->local_iseq)
+ + VM_SVAR_FLIPFLOP_START;
+ VALUE key = INT2FIX(cnt);
+
+ ADD_INSN2(ret, node, getspecial, key, INT2FIX(0));
+ ADD_INSNL(ret, node, branchif, lend);
+
+ /* *flip == 0 */
+ CHECK(COMPILE(ret, "flip2 beg", RNODE_FLIP2(node)->nd_beg));
+ ADD_INSNL(ret, node, branchunless, else_label);
+ ADD_INSN1(ret, node, putobject, Qtrue);
+ ADD_INSN1(ret, node, setspecial, key);
+ if (!again) {
+ ADD_INSNL(ret, node, jump, then_label);
+ }
+
+ /* *flip == 1 */
+ ADD_LABEL(ret, lend);
+ CHECK(COMPILE(ret, "flip2 end", RNODE_FLIP2(node)->nd_end));
+ ADD_INSNL(ret, node, branchunless, then_label);
+ ADD_INSN1(ret, node, putobject, Qfalse);
+ ADD_INSN1(ret, node, setspecial, key);
+ ADD_INSNL(ret, node, jump, then_label);
+
+ return COMPILE_OK;
+}
+
+static int
+compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *ret, const NODE *cond,
+ LABEL *then_label, LABEL *else_label);
+
+#define COMPILE_SINGLE 2
+static int
+compile_logical(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *cond,
+ LABEL *then_label, LABEL *else_label)
{
+ DECL_ANCHOR(seq);
+ INIT_ANCHOR(seq);
+ LABEL *label = NEW_LABEL(nd_line(cond));
+ if (!then_label) then_label = label;
+ else if (!else_label) else_label = label;
+
+ CHECK(compile_branch_condition(iseq, seq, cond, then_label, else_label));
+
+ if (LIST_INSN_SIZE_ONE(seq)) {
+ INSN *insn = (INSN *)ELEM_FIRST_INSN(FIRST_ELEMENT(seq));
+ if (insn->insn_id == BIN(jump) && (LABEL *)(insn->operands[0]) == label)
+ return COMPILE_OK;
+ }
+ if (!label->refcnt) {
+ return COMPILE_SINGLE;
+ }
+ ADD_LABEL(seq, label);
+ ADD_SEQ(ret, seq);
+ return COMPILE_OK;
+}
+
+static int
+compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *ret, const NODE *cond,
+ LABEL *then_label, LABEL *else_label)
+{
+ int ok;
+ DECL_ANCHOR(ignore);
+
+ again:
switch (nd_type(cond)) {
case NODE_AND:
- {
- LABEL *label = NEW_LABEL(nd_line(cond));
- compile_branch_condition(iseq, ret, cond->nd_1st, label,
- else_label);
- ADD_LABEL(ret, label);
- compile_branch_condition(iseq, ret, cond->nd_2nd, then_label,
- else_label);
- break;
- }
+ CHECK(ok = compile_logical(iseq, ret, RNODE_AND(cond)->nd_1st, NULL, else_label));
+ cond = RNODE_AND(cond)->nd_2nd;
+ if (ok == COMPILE_SINGLE) {
+ INIT_ANCHOR(ignore);
+ ret = ignore;
+ then_label = NEW_LABEL(nd_line(cond));
+ }
+ goto again;
case NODE_OR:
- {
- LABEL *label = NEW_LABEL(nd_line(cond));
- compile_branch_condition(iseq, ret, cond->nd_1st, then_label,
- label);
- ADD_LABEL(ret, label);
- compile_branch_condition(iseq, ret, cond->nd_2nd, then_label,
- else_label);
- break;
- }
- case NODE_LIT: /* NODE_LIT is always not true */
+ CHECK(ok = compile_logical(iseq, ret, RNODE_OR(cond)->nd_1st, then_label, NULL));
+ cond = RNODE_OR(cond)->nd_2nd;
+ if (ok == COMPILE_SINGLE) {
+ INIT_ANCHOR(ignore);
+ ret = ignore;
+ else_label = NEW_LABEL(nd_line(cond));
+ }
+ goto again;
+ case NODE_SYM:
+ case NODE_LINE:
+ case NODE_FILE:
+ case NODE_ENCODING:
+ case NODE_INTEGER: /* NODE_INTEGER is always true */
+ case NODE_FLOAT: /* NODE_FLOAT is always true */
+ case NODE_RATIONAL: /* NODE_RATIONAL is always true */
+ case NODE_IMAGINARY: /* NODE_IMAGINARY is always true */
case NODE_TRUE:
case NODE_STR:
- /* printf("useless condition eliminate (%s)\n", ruby_node_name(nd_type(cond))); */
- ADD_INSNL(ret, nd_line(cond), jump, then_label);
- break;
+ case NODE_REGX:
+ case NODE_ZLIST:
+ case NODE_LAMBDA:
+ /* printf("useless condition eliminate (%s)\n", ruby_node_name(nd_type(cond))); */
+ ADD_INSNL(ret, cond, jump, then_label);
+ return COMPILE_OK;
case NODE_FALSE:
case NODE_NIL:
- /* printf("useless condition eliminate (%s)\n", ruby_node_name(nd_type(cond))); */
- ADD_INSNL(ret, nd_line(cond), jump, else_label);
- break;
+ /* printf("useless condition eliminate (%s)\n", ruby_node_name(nd_type(cond))); */
+ ADD_INSNL(ret, cond, jump, else_label);
+ return COMPILE_OK;
+ case NODE_LIST:
+ case NODE_ARGSCAT:
+ case NODE_DREGX:
+ case NODE_DSTR:
+ CHECK(COMPILE_POPPED(ret, "branch condition", cond));
+ ADD_INSNL(ret, cond, jump, then_label);
+ return COMPILE_OK;
+ case NODE_FLIP2:
+ CHECK(compile_flip_flop(iseq, ret, cond, TRUE, then_label, else_label));
+ return COMPILE_OK;
+ case NODE_FLIP3:
+ CHECK(compile_flip_flop(iseq, ret, cond, FALSE, then_label, else_label));
+ return COMPILE_OK;
+ case NODE_DEFINED:
+ CHECK(compile_defined_expr(iseq, ret, cond, Qfalse, ret == ignore));
+ break;
default:
- COMPILE(ret, "branch condition", cond);
- ADD_INSNL(ret, nd_line(cond), branchunless, else_label);
- ADD_INSNL(ret, nd_line(cond), jump, then_label);
- break;
- }
+ {
+ DECL_ANCHOR(cond_seq);
+ INIT_ANCHOR(cond_seq);
+
+ CHECK(COMPILE(cond_seq, "branch condition", cond));
+
+ if (LIST_INSN_SIZE_ONE(cond_seq)) {
+ INSN *insn = (INSN *)ELEM_FIRST_INSN(FIRST_ELEMENT(cond_seq));
+ if (insn->insn_id == BIN(putobject)) {
+ if (RTEST(insn->operands[0])) {
+ ADD_INSNL(ret, cond, jump, then_label);
+ // maybe unreachable
+ return COMPILE_OK;
+ }
+ else {
+ ADD_INSNL(ret, cond, jump, else_label);
+ return COMPILE_OK;
+ }
+ }
+ }
+ ADD_SEQ(ret, cond_seq);
+ }
+ break;
+ }
+
+ ADD_INSNL(ret, cond, branchunless, else_label);
+ ADD_INSNL(ret, cond, jump, then_label);
return COMPILE_OK;
}
+#define HASH_BRACE 1
+
static int
-compile_array_keyword_arg(rb_iseq_t *iseq, LINK_ANCHOR *ret, const NODE * const root_node, struct rb_call_info_kw_arg ** const kw_arg_ptr)
+keyword_node_p(const NODE *const node)
{
- if (kw_arg_ptr == NULL) return FALSE;
-
- if (nd_type(root_node) == NODE_HASH && root_node->nd_head && nd_type(root_node->nd_head) == NODE_ARRAY) {
- NODE *node = root_node->nd_head;
+ return nd_type_p(node, NODE_HASH) && (RNODE_HASH(node)->nd_brace & HASH_BRACE) != HASH_BRACE;
+}
- while (node) {
- NODE *key_node = node->nd_head;
+static VALUE
+get_symbol_value(rb_iseq_t *iseq, const NODE *node)
+{
+ switch (nd_type(node)) {
+ case NODE_SYM:
+ return rb_node_sym_string_val(node);
+ default:
+ UNKNOWN_NODE("get_symbol_value", node, Qnil);
+ }
+}
- assert(nd_type(node) == NODE_ARRAY);
- if (key_node && nd_type(key_node) == NODE_LIT && RB_TYPE_P(key_node->nd_lit, T_SYMBOL)) {
- /* can be keywords */
- }
- else {
- return FALSE;
- }
- node = node->nd_next; /* skip value node */
- node = node->nd_next;
- }
+static VALUE
+node_hash_unique_key_index(rb_iseq_t *iseq, rb_node_hash_t *node_hash, int *count_ptr)
+{
+ NODE *node = node_hash->nd_head;
+ VALUE hash = rb_hash_new();
+ VALUE ary = rb_ary_new();
- /* may be keywords */
- node = root_node->nd_head;
- {
- int len = (int)node->nd_alen / 2;
- struct rb_call_info_kw_arg *kw_arg = (struct rb_call_info_kw_arg *)ruby_xmalloc(sizeof(struct rb_call_info_kw_arg) + sizeof(VALUE) * (len - 1));
- VALUE *keywords = kw_arg->keywords;
- int i = 0;
- kw_arg->keyword_len = len;
+ for (int i = 0; node != NULL; i++, node = RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_next) {
+ VALUE key = get_symbol_value(iseq, RNODE_LIST(node)->nd_head);
+ VALUE idx = rb_hash_aref(hash, key);
+ if (!NIL_P(idx)) {
+ rb_ary_store(ary, FIX2INT(idx), Qfalse);
+ (*count_ptr)--;
+ }
+ rb_hash_aset(hash, key, INT2FIX(i));
+ rb_ary_store(ary, i, Qtrue);
+ (*count_ptr)++;
+ }
- *kw_arg_ptr = kw_arg;
+ return ary;
+}
- for (i=0; node != NULL; i++, node = node->nd_next->nd_next) {
- NODE *key_node = node->nd_head;
- NODE *val_node = node->nd_next->nd_head;
- keywords[i] = key_node->nd_lit;
- COMPILE(ret, "keyword values", val_node);
- }
- assert(i == len);
- return TRUE;
- }
+static int
+compile_keyword_arg(rb_iseq_t *iseq, LINK_ANCHOR *const ret,
+ const NODE *const root_node,
+ struct rb_callinfo_kwarg **const kw_arg_ptr,
+ unsigned int *flag)
+{
+ RUBY_ASSERT(nd_type_p(root_node, NODE_HASH));
+ RUBY_ASSERT(kw_arg_ptr != NULL);
+ RUBY_ASSERT(flag != NULL);
+
+ if (RNODE_HASH(root_node)->nd_head && nd_type_p(RNODE_HASH(root_node)->nd_head, NODE_LIST)) {
+ const NODE *node = RNODE_HASH(root_node)->nd_head;
+ int seen_nodes = 0;
+
+ while (node) {
+ const NODE *key_node = RNODE_LIST(node)->nd_head;
+ seen_nodes++;
+
+ RUBY_ASSERT(nd_type_p(node, NODE_LIST));
+ if (key_node && nd_type_p(key_node, NODE_SYM)) {
+ /* can be keywords */
+ }
+ else {
+ if (flag) {
+ *flag |= VM_CALL_KW_SPLAT;
+ if (seen_nodes > 1 || RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_next) {
+ /* A new hash will be created for the keyword arguments
+ * in this case, so mark the method as passing mutable
+ * keyword splat.
+ */
+ *flag |= VM_CALL_KW_SPLAT_MUT;
+ }
+ }
+ return FALSE;
+ }
+ node = RNODE_LIST(node)->nd_next; /* skip value node */
+ node = RNODE_LIST(node)->nd_next;
+ }
+
+ /* may be keywords */
+ node = RNODE_HASH(root_node)->nd_head;
+ {
+ int len = 0;
+ VALUE key_index = node_hash_unique_key_index(iseq, RNODE_HASH(root_node), &len);
+ struct rb_callinfo_kwarg *kw_arg =
+ rb_xmalloc_mul_add(len, sizeof(VALUE), sizeof(struct rb_callinfo_kwarg));
+ VALUE *keywords = kw_arg->keywords;
+ int i = 0;
+ int j = 0;
+ kw_arg->references = 0;
+ kw_arg->keyword_len = len;
+
+ *kw_arg_ptr = kw_arg;
+
+ for (i=0; node != NULL; i++, node = RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_next) {
+ const NODE *key_node = RNODE_LIST(node)->nd_head;
+ const NODE *val_node = RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_head;
+ int popped = TRUE;
+ if (rb_ary_entry(key_index, i)) {
+ keywords[j] = get_symbol_value(iseq, key_node);
+ j++;
+ popped = FALSE;
+ }
+ NO_CHECK(COMPILE_(ret, "keyword values", val_node, popped));
+ }
+ RUBY_ASSERT(j == len);
+ return TRUE;
+ }
}
return FALSE;
}
-enum compile_array_type_t {
- COMPILE_ARRAY_TYPE_ARRAY,
- COMPILE_ARRAY_TYPE_HASH,
- COMPILE_ARRAY_TYPE_ARGS
-};
-
static int
-compile_array_(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE* node_root,
- enum compile_array_type_t type, struct rb_call_info_kw_arg **keywords_ptr, int poped)
+compile_args(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, NODE **kwnode_ptr)
{
- NODE *node = node_root;
- int line = (int)nd_line(node);
int len = 0;
- if (nd_type(node) == NODE_ZARRAY) {
- if (!poped) {
- switch (type) {
- case COMPILE_ARRAY_TYPE_ARRAY: ADD_INSN1(ret, line, newarray, INT2FIX(0)); break;
- case COMPILE_ARRAY_TYPE_HASH: ADD_INSN1(ret, line, newhash, INT2FIX(0)); break;
- case COMPILE_ARRAY_TYPE_ARGS: /* do nothing */ break;
- }
- }
- }
- else {
- int opt_p = 1;
- int first = 1, i;
-
- while (node) {
- NODE *start_node = node, *end_node;
- NODE *kw = 0;
- const int max = 0x100;
- DECL_ANCHOR(anchor);
- INIT_ANCHOR(anchor);
-
- for (i=0; i<max && node; i++, len++, node = node->nd_next) {
- if (CPDEBUG > 0) {
- EXPECT_NODE("compile_array", node, NODE_ARRAY);
- }
-
- if (type != COMPILE_ARRAY_TYPE_ARRAY && !node->nd_head) {
- kw = node->nd_next;
- node = 0;
- if (kw) {
- opt_p = 0;
- node = kw->nd_next;
- kw = kw->nd_head;
- }
- break;
- }
- if (opt_p && nd_type(node->nd_head) != NODE_LIT) {
- opt_p = 0;
- }
-
- if (type == COMPILE_ARRAY_TYPE_ARGS && node->nd_next == NULL /* last node */ && compile_array_keyword_arg(iseq, anchor, node->nd_head, keywords_ptr)) {
- len--;
- }
- else {
- COMPILE_(anchor, "array element", node->nd_head, poped);
- }
- }
-
- if (opt_p && type != COMPILE_ARRAY_TYPE_ARGS) {
- if (!poped) {
- VALUE ary = rb_ary_tmp_new(i);
-
- end_node = node;
- node = start_node;
-
- while (node != end_node) {
- rb_ary_push(ary, node->nd_head->nd_lit);
- node = node->nd_next;
- }
- while (node && nd_type(node->nd_head) == NODE_LIT &&
- node->nd_next && nd_type(node->nd_next->nd_head) == NODE_LIT) {
- rb_ary_push(ary, node->nd_head->nd_lit);
- node = node->nd_next;
- rb_ary_push(ary, node->nd_head->nd_lit);
- node = node->nd_next;
- len++;
- }
-
- OBJ_FREEZE(ary);
-
- iseq_add_mark_object_compile_time(iseq, ary);
-
- if (first) {
- first = 0;
- if (type == COMPILE_ARRAY_TYPE_ARRAY) {
- ADD_INSN1(ret, line, duparray, ary);
- }
- else { /* COMPILE_ARRAY_TYPE_HASH */
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
- ADD_INSN1(ret, line, putobject, ary);
- ADD_SEND(ret, line, id_core_hash_from_ary, INT2FIX(1));
- }
- }
- else {
- if (type == COMPILE_ARRAY_TYPE_ARRAY) {
- ADD_INSN1(ret, line, putobject, ary);
- ADD_INSN(ret, line, concatarray);
- }
- else {
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
- ADD_INSN1(ret, line, putobject, ary);
- ADD_SEND(ret, line, id_core_hash_merge_ary, INT2FIX(1));
- }
- }
- }
- }
- else {
- if (!poped) {
- switch (type) {
- case COMPILE_ARRAY_TYPE_ARRAY:
- ADD_INSN1(anchor, line, newarray, INT2FIX(i));
-
- if (first) {
- first = 0;
- }
- else {
- ADD_INSN(anchor, line, concatarray);
- }
-
- APPEND_LIST(ret, anchor);
- break;
- case COMPILE_ARRAY_TYPE_HASH:
- if (i > 0) {
- if (first) {
- ADD_INSN1(anchor, line, newhash, INT2FIX(i));
- APPEND_LIST(ret, anchor);
- }
- else {
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
- ADD_INSN(ret, line, swap);
- APPEND_LIST(ret, anchor);
- ADD_SEND(ret, line, id_core_hash_merge_ptr, INT2FIX(i + 1));
- }
- }
- if (kw) {
- VALUE nhash = (i > 0 || !first) ? INT2FIX(2) : INT2FIX(1);
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
- if (i > 0 || !first) ADD_INSN(ret, line, swap);
- COMPILE(ret, "keyword splat", kw);
- ADD_SEND(ret, line, id_core_hash_merge_kwd, nhash);
- if (nhash == INT2FIX(1)) ADD_SEND(ret, line, rb_intern("dup"), INT2FIX(0));
- }
- first = 0;
- break;
- case COMPILE_ARRAY_TYPE_ARGS:
- APPEND_LIST(ret, anchor);
- break;
- }
- }
- else {
- /* poped */
- APPEND_LIST(ret, anchor);
- }
- }
- }
+ for (; node; len++, node = RNODE_LIST(node)->nd_next) {
+ if (CPDEBUG > 0) {
+ EXPECT_NODE("compile_args", node, NODE_LIST, -1);
+ }
+
+ if (RNODE_LIST(node)->nd_next == NULL && keyword_node_p(RNODE_LIST(node)->nd_head)) { /* last node is kwnode */
+ *kwnode_ptr = RNODE_LIST(node)->nd_head;
+ }
+ else {
+ RUBY_ASSERT(!keyword_node_p(RNODE_LIST(node)->nd_head));
+ NO_CHECK(COMPILE_(ret, "array element", RNODE_LIST(node)->nd_head, FALSE));
+ }
}
+
return len;
}
-static VALUE
-compile_array(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE* node_root, enum compile_array_type_t type)
+static inline bool
+frozen_string_literal_p(const rb_iseq_t *iseq)
{
- return compile_array_(iseq, ret, node_root, type, NULL, 0);
+ return ISEQ_COMPILE_DATA(iseq)->option->frozen_string_literal > 0;
}
-static VALUE
-case_when_optimizable_literal(NODE * node)
+static inline bool
+static_literal_node_p(const NODE *node, const rb_iseq_t *iseq, bool hash_key)
+{
+ switch (nd_type(node)) {
+ case NODE_SYM:
+ case NODE_REGX:
+ case NODE_LINE:
+ case NODE_ENCODING:
+ case NODE_INTEGER:
+ case NODE_FLOAT:
+ case NODE_RATIONAL:
+ case NODE_IMAGINARY:
+ case NODE_NIL:
+ case NODE_TRUE:
+ case NODE_FALSE:
+ return TRUE;
+ case NODE_STR:
+ case NODE_FILE:
+ return hash_key || frozen_string_literal_p(iseq);
+ default:
+ return FALSE;
+ }
+}
+
+static inline VALUE
+static_literal_value(const NODE *node, rb_iseq_t *iseq)
+{
+ switch (nd_type(node)) {
+ case NODE_INTEGER:
+ {
+ VALUE lit = rb_node_integer_literal_val(node);
+ if (!SPECIAL_CONST_P(lit)) RB_OBJ_SET_SHAREABLE(lit);
+ return lit;
+ }
+ case NODE_FLOAT:
+ {
+ VALUE lit = rb_node_float_literal_val(node);
+ if (!SPECIAL_CONST_P(lit)) RB_OBJ_SET_SHAREABLE(lit);
+ return lit;
+ }
+ case NODE_RATIONAL:
+ return rb_ractor_make_shareable(rb_node_rational_literal_val(node));
+ case NODE_IMAGINARY:
+ return rb_ractor_make_shareable(rb_node_imaginary_literal_val(node));
+ case NODE_NIL:
+ return Qnil;
+ case NODE_TRUE:
+ return Qtrue;
+ case NODE_FALSE:
+ return Qfalse;
+ case NODE_SYM:
+ return rb_node_sym_string_val(node);
+ case NODE_REGX:
+ return RB_OBJ_SET_SHAREABLE(rb_node_regx_string_val(node));
+ case NODE_LINE:
+ return rb_node_line_lineno_val(node);
+ case NODE_ENCODING:
+ return rb_node_encoding_val(node);
+ case NODE_FILE:
+ case NODE_STR:
+ if (ISEQ_COMPILE_DATA(iseq)->option->debug_frozen_string_literal || RTEST(ruby_debug)) {
+ VALUE lit = get_string_value(node);
+ VALUE str = rb_str_with_debug_created_info(lit, rb_iseq_path(iseq), (int)nd_line(node));
+ RB_OBJ_SET_SHAREABLE(str);
+ return str;
+ }
+ else {
+ return get_string_value(node);
+ }
+ default:
+ rb_bug("unexpected node: %s", ruby_node_name(nd_type(node)));
+ }
+}
+
+static int
+compile_array(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int popped, bool first_chunk)
+{
+ const NODE *line_node = node;
+
+ if (nd_type_p(node, NODE_ZLIST)) {
+ if (!popped) {
+ ADD_INSN1(ret, line_node, newarray, INT2FIX(0));
+ }
+ return 0;
+ }
+
+ EXPECT_NODE("compile_array", node, NODE_LIST, -1);
+
+ if (popped) {
+ for (; node; node = RNODE_LIST(node)->nd_next) {
+ NO_CHECK(COMPILE_(ret, "array element", RNODE_LIST(node)->nd_head, popped));
+ }
+ return 1;
+ }
+
+ /* Compilation of an array literal.
+ * The following code is essentially the same as:
+ *
+ * for (int count = 0; node; count++; node->nd_next) {
+ * compile(node->nd_head);
+ * }
+ * ADD_INSN(newarray, count);
+ *
+ * However, there are three points.
+ *
+ * - The code above causes stack overflow for a big string literal.
+ * The following limits the stack length up to max_stack_len.
+ *
+ * [x1,x2,...,x10000] =>
+ * push x1 ; push x2 ; ...; push x256; newarray 256;
+ * push x257; push x258; ...; push x512; pushtoarray 256;
+ * push x513; push x514; ...; push x768; pushtoarray 256;
+ * ...
+ *
+ * - Long subarray can be optimized by pre-allocating a hidden array.
+ *
+ * [1,2,3,...,100] =>
+ * duparray [1,2,3,...,100]
+ *
+ * [x, 1,2,3,...,100, z] =>
+ * push x; newarray 1;
+ * putobject [1,2,3,...,100] (<- hidden array); concattoarray;
+ * push z; pushtoarray 1;
+ *
+ * - If the last element is a keyword, pushtoarraykwsplat should be emitted
+ * to only push it onto the array if it is not empty
+ * (Note: a keyword is NODE_HASH which is not static_literal_node_p.)
+ *
+ * [1,2,3,**kw] =>
+ * putobject 1; putobject 2; putobject 3; newarray 3; ...; pushtoarraykwsplat kw
+ */
+
+ const int max_stack_len = 0x100;
+ const int min_tmp_ary_len = 0x40;
+ int stack_len = 0;
+
+ /* Either create a new array, or push to the existing array */
+#define FLUSH_CHUNK \
+ if (stack_len) { \
+ if (first_chunk) ADD_INSN1(ret, line_node, newarray, INT2FIX(stack_len)); \
+ else ADD_INSN1(ret, line_node, pushtoarray, INT2FIX(stack_len)); \
+ first_chunk = FALSE; \
+ stack_len = 0; \
+ }
+
+ while (node) {
+ int count = 1;
+
+ /* pre-allocation check (this branch can be omittable) */
+ if (static_literal_node_p(RNODE_LIST(node)->nd_head, iseq, false)) {
+ /* count the elements that are optimizable */
+ const NODE *node_tmp = RNODE_LIST(node)->nd_next;
+ for (; node_tmp && static_literal_node_p(RNODE_LIST(node_tmp)->nd_head, iseq, false); node_tmp = RNODE_LIST(node_tmp)->nd_next)
+ count++;
+
+ if ((first_chunk && stack_len == 0 && !node_tmp) || count >= min_tmp_ary_len) {
+ /* The literal contains only optimizable elements, or the subarray is long enough */
+ VALUE ary = rb_ary_hidden_new(count);
+
+ /* Create a hidden array */
+ for (; count; count--, node = RNODE_LIST(node)->nd_next)
+ rb_ary_push(ary, static_literal_value(RNODE_LIST(node)->nd_head, iseq));
+ RB_OBJ_SET_FROZEN_SHAREABLE(ary);
+
+ /* Emit optimized code */
+ FLUSH_CHUNK;
+ if (first_chunk) {
+ ADD_INSN1(ret, line_node, duparray, ary);
+ first_chunk = FALSE;
+ }
+ else {
+ ADD_INSN1(ret, line_node, putobject, ary);
+ ADD_INSN(ret, line_node, concattoarray);
+ }
+ RB_OBJ_SET_SHAREABLE(ary);
+ RB_OBJ_WRITTEN(iseq, Qundef, ary);
+ }
+ }
+
+ /* Base case: Compile "count" elements */
+ for (; count; count--, node = RNODE_LIST(node)->nd_next) {
+ if (CPDEBUG > 0) {
+ EXPECT_NODE("compile_array", node, NODE_LIST, -1);
+ }
+
+ if (!RNODE_LIST(node)->nd_next && keyword_node_p(RNODE_LIST(node)->nd_head)) {
+ /* Create array or push existing non-keyword elements onto array */
+ if (stack_len == 0 && first_chunk) {
+ ADD_INSN1(ret, line_node, newarray, INT2FIX(0));
+ }
+ else {
+ FLUSH_CHUNK;
+ }
+ NO_CHECK(COMPILE_(ret, "array element", RNODE_LIST(node)->nd_head, 0));
+ ADD_INSN(ret, line_node, pushtoarraykwsplat);
+ return 1;
+ }
+ else {
+ NO_CHECK(COMPILE_(ret, "array element", RNODE_LIST(node)->nd_head, 0));
+ stack_len++;
+ }
+
+ /* If there are many pushed elements, flush them to avoid stack overflow */
+ if (stack_len >= max_stack_len) FLUSH_CHUNK;
+ }
+ }
+
+ FLUSH_CHUNK;
+#undef FLUSH_CHUNK
+ return 1;
+}
+
+static inline int
+static_literal_node_pair_p(const NODE *node, const rb_iseq_t *iseq)
+{
+ return RNODE_LIST(node)->nd_head && static_literal_node_p(RNODE_LIST(node)->nd_head, iseq, true) && static_literal_node_p(RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_head, iseq, false);
+}
+
+static int
+compile_hash(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int method_call_keywords, int popped)
+{
+ const NODE *line_node = node;
+
+ node = RNODE_HASH(node)->nd_head;
+
+ if (!node || nd_type_p(node, NODE_ZLIST)) {
+ if (!popped) {
+ ADD_INSN1(ret, line_node, newhash, INT2FIX(0));
+ }
+ return 0;
+ }
+
+ EXPECT_NODE("compile_hash", node, NODE_LIST, -1);
+
+ if (popped) {
+ for (; node; node = RNODE_LIST(node)->nd_next) {
+ NO_CHECK(COMPILE_(ret, "hash element", RNODE_LIST(node)->nd_head, popped));
+ }
+ return 1;
+ }
+
+ /* Compilation of a hash literal (or keyword arguments).
+ * This is very similar to compile_array, but there are some differences:
+ *
+ * - It contains key-value pairs. So we need to take every two elements.
+ * We can assume that the length is always even.
+ *
+ * - Merging is done by a method call (id_core_hash_merge_ptr).
+ * Sometimes we need to insert the receiver, so "anchor" is needed.
+ * In addition, a method call is much slower than concatarray.
+ * So it pays only when the subsequence is really long.
+ * (min_tmp_hash_len must be much larger than min_tmp_ary_len.)
+ *
+ * - We need to handle keyword splat: **kw.
+ * For **kw, the key part (node->nd_head) is NULL, and the value part
+ * (node->nd_next->nd_head) is "kw".
+ * The code is a bit difficult to avoid hash allocation for **{}.
+ */
+
+ const int max_stack_len = 0x100;
+ const int min_tmp_hash_len = 0x800;
+ int stack_len = 0;
+ int first_chunk = 1;
+ DECL_ANCHOR(anchor);
+ INIT_ANCHOR(anchor);
+
+ /* Convert pushed elements to a hash, and merge if needed */
+#define FLUSH_CHUNK() \
+ if (stack_len) { \
+ if (first_chunk) { \
+ APPEND_LIST(ret, anchor); \
+ ADD_INSN1(ret, line_node, newhash, INT2FIX(stack_len)); \
+ } \
+ else { \
+ ADD_INSN1(ret, line_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); \
+ ADD_INSN(ret, line_node, swap); \
+ APPEND_LIST(ret, anchor); \
+ ADD_SEND(ret, line_node, id_core_hash_merge_ptr, INT2FIX(stack_len + 1)); \
+ } \
+ INIT_ANCHOR(anchor); \
+ first_chunk = stack_len = 0; \
+ }
+
+ while (node) {
+ int count = 1;
+
+ /* pre-allocation check (this branch can be omittable) */
+ if (static_literal_node_pair_p(node, iseq)) {
+ /* count the elements that are optimizable */
+ const NODE *node_tmp = RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_next;
+ for (; node_tmp && static_literal_node_pair_p(node_tmp, iseq); node_tmp = RNODE_LIST(RNODE_LIST(node_tmp)->nd_next)->nd_next)
+ count++;
+
+ if ((first_chunk && stack_len == 0 && !node_tmp) || count >= min_tmp_hash_len) {
+ /* The literal contains only optimizable elements, or the subsequence is long enough */
+ VALUE ary = rb_ary_hidden_new(count);
+
+ /* Create a hidden hash */
+ for (; count; count--, node = RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_next) {
+ VALUE elem[2];
+ elem[0] = static_literal_value(RNODE_LIST(node)->nd_head, iseq);
+ if (!RB_SPECIAL_CONST_P(elem[0])) RB_OBJ_SET_FROZEN_SHAREABLE(elem[0]);
+ elem[1] = static_literal_value(RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_head, iseq);
+ if (!RB_SPECIAL_CONST_P(elem[1])) RB_OBJ_SET_FROZEN_SHAREABLE(elem[1]);
+ rb_ary_cat(ary, elem, 2);
+ }
+ VALUE hash = rb_hash_new_with_size(RARRAY_LEN(ary) / 2);
+ rb_hash_bulk_insert(RARRAY_LEN(ary), RARRAY_CONST_PTR(ary), hash);
+ hash = RB_OBJ_SET_FROZEN_SHAREABLE(rb_obj_hide(hash));
+
+ /* Emit optimized code */
+ FLUSH_CHUNK();
+ if (first_chunk) {
+ ADD_INSN1(ret, line_node, duphash, hash);
+ first_chunk = 0;
+ }
+ else {
+ ADD_INSN1(ret, line_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN(ret, line_node, swap);
+
+ ADD_INSN1(ret, line_node, putobject, hash);
+
+ ADD_SEND(ret, line_node, id_core_hash_merge_kwd, INT2FIX(2));
+ }
+ RB_OBJ_WRITTEN(iseq, Qundef, hash);
+ }
+ }
+
+ /* Base case: Compile "count" elements */
+ for (; count; count--, node = RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_next) {
+
+ if (CPDEBUG > 0) {
+ EXPECT_NODE("compile_hash", node, NODE_LIST, -1);
+ }
+
+ if (RNODE_LIST(node)->nd_head) {
+ /* Normal key-value pair */
+ NO_CHECK(COMPILE_(anchor, "hash key element", RNODE_LIST(node)->nd_head, 0));
+ NO_CHECK(COMPILE_(anchor, "hash value element", RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_head, 0));
+ stack_len += 2;
+
+ /* If there are many pushed elements, flush them to avoid stack overflow */
+ if (stack_len >= max_stack_len) FLUSH_CHUNK();
+ }
+ else {
+ /* kwsplat case: foo(..., **kw, ...) */
+ FLUSH_CHUNK();
+
+ const NODE *kw = RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_head;
+ int empty_kw = nd_type_p(kw, NODE_HASH) && (!RNODE_HASH(kw)->nd_head); /* foo( ..., **{}, ...) */
+ int first_kw = first_chunk && stack_len == 0; /* foo(1,2,3, **kw, ...) */
+ int last_kw = !RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_next; /* foo( ..., **kw) */
+ int only_kw = last_kw && first_kw; /* foo(1,2,3, **kw) */
+
+ empty_kw = empty_kw || nd_type_p(kw, NODE_NIL); /* foo( ..., **nil, ...) */
+ if (empty_kw) {
+ if (only_kw && method_call_keywords) {
+ /* **{} appears at the only keyword argument in method call,
+ * so it won't be modified.
+ * kw is a special NODE_LIT that contains a special empty hash,
+ * so this emits: putobject {}.
+ * This is only done for method calls and not for literal hashes,
+ * because literal hashes should always result in a new hash.
+ */
+ NO_CHECK(COMPILE(ret, "keyword splat", kw));
+ }
+ else if (first_kw) {
+ /* **{} appears as the first keyword argument, so it may be modified.
+ * We need to create a fresh hash object.
+ */
+ ADD_INSN1(ret, line_node, newhash, INT2FIX(0));
+ }
+ /* Any empty keyword splats that are not the first can be ignored.
+ * since merging an empty hash into the existing hash is the same
+ * as not merging it. */
+ }
+ else {
+ if (only_kw && method_call_keywords) {
+ /* **kw is only keyword argument in method call.
+ * Use directly. This will be not be flagged as mutable.
+ * This is only done for method calls and not for literal hashes,
+ * because literal hashes should always result in a new hash.
+ */
+ NO_CHECK(COMPILE(ret, "keyword splat", kw));
+ }
+ else {
+ /* There is more than one keyword argument, or this is not a method
+ * call. In that case, we need to add an empty hash (if first keyword),
+ * or merge the hash to the accumulated hash (if not the first keyword).
+ */
+ ADD_INSN1(ret, line_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ if (first_kw) ADD_INSN1(ret, line_node, newhash, INT2FIX(0));
+ else ADD_INSN(ret, line_node, swap);
+
+ NO_CHECK(COMPILE(ret, "keyword splat", kw));
+
+ ADD_SEND(ret, line_node, id_core_hash_merge_kwd, INT2FIX(2));
+ }
+ }
+
+ first_chunk = 0;
+ }
+ }
+ }
+
+ FLUSH_CHUNK();
+#undef FLUSH_CHUNK
+ return 1;
+}
+
+VALUE
+rb_node_case_when_optimizable_literal(const NODE *const node)
{
switch (nd_type(node)) {
- case NODE_LIT: {
- VALUE v = node->nd_lit;
- double ival;
- if (RB_TYPE_P(v, T_FLOAT) &&
- modf(RFLOAT_VALUE(v), &ival) == 0.0) {
- return FIXABLE(ival) ? LONG2FIX((long)ival) : rb_dbl2big(ival);
- }
- if (SYMBOL_P(v) || rb_obj_is_kind_of(v, rb_cNumeric)) {
- return v;
- }
- break;
+ case NODE_INTEGER:
+ return rb_node_integer_literal_val(node);
+ case NODE_FLOAT: {
+ VALUE v = rb_node_float_literal_val(node);
+ double ival;
+
+ if (modf(RFLOAT_VALUE(v), &ival) == 0.0) {
+ return FIXABLE(ival) ? LONG2FIX((long)ival) : rb_dbl2big(ival);
+ }
+ return v;
}
+ case NODE_RATIONAL:
+ case NODE_IMAGINARY:
+ return Qundef;
case NODE_NIL:
- return Qnil;
+ return Qnil;
case NODE_TRUE:
- return Qtrue;
+ return Qtrue;
case NODE_FALSE:
- return Qfalse;
+ return Qfalse;
+ case NODE_SYM:
+ return rb_node_sym_string_val(node);
+ case NODE_LINE:
+ return rb_node_line_lineno_val(node);
case NODE_STR:
- return node->nd_lit = rb_fstring(node->nd_lit);
+ return rb_node_str_string_val(node);
+ case NODE_FILE:
+ return rb_node_file_path_val(node);
}
return Qundef;
}
static int
-when_vals(rb_iseq_t *iseq, LINK_ANCHOR *cond_seq, NODE *vals, LABEL *l1, int only_special_literals, VALUE literals)
+when_vals(rb_iseq_t *iseq, LINK_ANCHOR *const cond_seq, const NODE *vals,
+ LABEL *l1, int only_special_literals, VALUE literals)
{
while (vals) {
- NODE* val = vals->nd_head;
- VALUE lit = case_when_optimizable_literal(val);
-
- if (lit == Qundef) {
- only_special_literals = 0;
- }
- else {
- if (rb_hash_lookup(literals, lit) != Qnil) {
- rb_compile_warning(ruby_sourcefile, nd_line(val),
- "duplicated when clause is ignored");
- }
- else {
- rb_hash_aset(literals, lit, (VALUE)(l1) | 1);
- }
- }
-
- ADD_INSN(cond_seq, nd_line(val), dup); /* dup target */
-
- if (nd_type(val) == NODE_STR) {
- val->nd_lit = rb_fstring(val->nd_lit);
- debugp_param("nd_lit", val->nd_lit);
- ADD_INSN1(cond_seq, nd_line(val), putobject, val->nd_lit);
- }
- else {
- COMPILE(cond_seq, "when cond", val);
- }
-
- ADD_INSN1(cond_seq, nd_line(vals), checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE));
- ADD_INSNL(cond_seq, nd_line(val), branchif, l1);
- vals = vals->nd_next;
+ const NODE *val = RNODE_LIST(vals)->nd_head;
+ VALUE lit = rb_node_case_when_optimizable_literal(val);
+
+ if (UNDEF_P(lit)) {
+ only_special_literals = 0;
+ }
+ else if (NIL_P(rb_hash_lookup(literals, lit))) {
+ rb_hash_aset(literals, lit, (VALUE)(l1) | 1);
+ }
+
+ if (nd_type_p(val, NODE_STR) || nd_type_p(val, NODE_FILE)) {
+ debugp_param("nd_lit", get_string_value(val));
+ lit = get_string_value(val);
+ ADD_INSN1(cond_seq, val, putobject, lit);
+ RB_OBJ_WRITTEN(iseq, Qundef, lit);
+ }
+ else {
+ if (!COMPILE(cond_seq, "when cond", val)) return -1;
+ }
+
+ // Emit pattern === target
+ ADD_INSN1(cond_seq, vals, topn, INT2FIX(1));
+ ADD_CALL(cond_seq, vals, idEqq, INT2FIX(1));
+ ADD_INSNL(cond_seq, val, branchif, l1);
+ vals = RNODE_LIST(vals)->nd_next;
}
return only_special_literals;
}
static int
-compile_massign_lhs(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node)
+when_splat_vals(rb_iseq_t *iseq, LINK_ANCHOR *const cond_seq, const NODE *vals,
+ LABEL *l1, int only_special_literals, VALUE literals)
+{
+ const NODE *line_node = vals;
+
+ switch (nd_type(vals)) {
+ case NODE_LIST:
+ if (when_vals(iseq, cond_seq, vals, l1, only_special_literals, literals) < 0)
+ return COMPILE_NG;
+ break;
+ case NODE_SPLAT:
+ ADD_INSN (cond_seq, line_node, dup);
+ CHECK(COMPILE(cond_seq, "when splat", RNODE_SPLAT(vals)->nd_head));
+ ADD_INSN1(cond_seq, line_node, splatarray, Qfalse);
+ ADD_INSN1(cond_seq, line_node, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE | VM_CHECKMATCH_ARRAY));
+ ADD_INSNL(cond_seq, line_node, branchif, l1);
+ break;
+ case NODE_ARGSCAT:
+ CHECK(when_splat_vals(iseq, cond_seq, RNODE_ARGSCAT(vals)->nd_head, l1, only_special_literals, literals));
+ CHECK(when_splat_vals(iseq, cond_seq, RNODE_ARGSCAT(vals)->nd_body, l1, only_special_literals, literals));
+ break;
+ case NODE_ARGSPUSH:
+ CHECK(when_splat_vals(iseq, cond_seq, RNODE_ARGSPUSH(vals)->nd_head, l1, only_special_literals, literals));
+ ADD_INSN (cond_seq, line_node, dup);
+ CHECK(COMPILE(cond_seq, "when argspush body", RNODE_ARGSPUSH(vals)->nd_body));
+ ADD_INSN1(cond_seq, line_node, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE));
+ ADD_INSNL(cond_seq, line_node, branchif, l1);
+ break;
+ default:
+ ADD_INSN (cond_seq, line_node, dup);
+ CHECK(COMPILE(cond_seq, "when val", vals));
+ ADD_INSN1(cond_seq, line_node, splatarray, Qfalse);
+ ADD_INSN1(cond_seq, line_node, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE | VM_CHECKMATCH_ARRAY));
+ ADD_INSNL(cond_seq, line_node, branchif, l1);
+ break;
+ }
+ return COMPILE_OK;
+}
+
+/* Multiple Assignment Handling
+ *
+ * In order to handle evaluation of multiple assignment such that the left hand side
+ * is evaluated before the right hand side, we need to process the left hand side
+ * and see if there are any attributes that need to be assigned, or constants set
+ * on explicit objects. If so, we add instructions to evaluate the receiver of
+ * any assigned attributes or constants before we process the right hand side.
+ *
+ * For a multiple assignment such as:
+ *
+ * l1.m1, l2[0] = r3, r4
+ *
+ * We start off evaluating l1 and l2, then we evaluate r3 and r4, then we
+ * assign the result of r3 to l1.m1, and then the result of r4 to l2.m2.
+ * On the VM stack, this looks like:
+ *
+ * self # putself
+ * l1 # send
+ * l1, self # putself
+ * l1, l2 # send
+ * l1, l2, 0 # putobject 0
+ * l1, l2, 0, [r3, r4] # after evaluation of RHS
+ * l1, l2, 0, [r3, r4], r4, r3 # expandarray
+ * l1, l2, 0, [r3, r4], r4, r3, l1 # topn 5
+ * l1, l2, 0, [r3, r4], r4, l1, r3 # swap
+ * l1, l2, 0, [r3, r4], r4, m1= # send
+ * l1, l2, 0, [r3, r4], r4 # pop
+ * l1, l2, 0, [r3, r4], r4, l2 # topn 3
+ * l1, l2, 0, [r3, r4], r4, l2, 0 # topn 3
+ * l1, l2, 0, [r3, r4], r4, l2, 0, r4 # topn 2
+ * l1, l2, 0, [r3, r4], r4, []= # send
+ * l1, l2, 0, [r3, r4], r4 # pop
+ * l1, l2, 0, [r3, r4] # pop
+ * [r3, r4], l2, 0, [r3, r4] # setn 3
+ * [r3, r4], l2, 0 # pop
+ * [r3, r4], l2 # pop
+ * [r3, r4] # pop
+ *
+ * This is made more complex when you have to handle splats, post args,
+ * and arbitrary levels of nesting. You need to keep track of the total
+ * number of attributes to set, and for each attribute, how many entries
+ * are on the stack before the final attribute, in order to correctly
+ * calculate the topn value to use to get the receiver of the attribute
+ * setter method.
+ *
+ * A brief description of the VM stack for simple multiple assignment
+ * with no splat (rhs_array will not be present if the return value of
+ * the multiple assignment is not needed):
+ *
+ * lhs_attr1, lhs_attr2, ..., rhs_array, ..., rhs_arg2, rhs_arg1
+ *
+ * For multiple assignment with splats, while processing the part before
+ * the splat (splat+post here is an array of the splat and the post arguments):
+ *
+ * lhs_attr1, lhs_attr2, ..., rhs_array, splat+post, ..., rhs_arg2, rhs_arg1
+ *
+ * When processing the splat and post arguments:
+ *
+ * lhs_attr1, lhs_attr2, ..., rhs_array, ..., post_arg2, post_arg1, splat
+ *
+ * When processing nested multiple assignment, existing values on the stack
+ * are kept. So for:
+ *
+ * (l1.m1, l2.m2), l3.m3, l4* = [r1, r2], r3, r4
+ *
+ * The stack layout would be the following before processing the nested
+ * multiple assignment:
+ *
+ * l1, l2, [[r1, r2], r3, r4], [r4], r3, [r1, r2]
+ *
+ * In order to handle this correctly, we need to keep track of the nesting
+ * level for each attribute assignment, as well as the attribute number
+ * (left hand side attributes are processed left to right) and number of
+ * arguments to pass to the setter method. struct masgn_lhs_node tracks
+ * this information.
+ *
+ * We also need to track information for the entire multiple assignment, such
+ * as the total number of arguments, and the current nesting level, to
+ * handle both nested multiple assignment as well as cases where the
+ * rhs is not needed. We also need to keep track of all attribute
+ * assignments in this, which we do using a linked listed. struct masgn_state
+ * tracks this information.
+ */
+
+struct masgn_lhs_node {
+ INSN *before_insn;
+ struct masgn_lhs_node *next;
+ const NODE *line_node;
+ int argn;
+ int num_args;
+ int lhs_pos;
+};
+
+struct masgn_state {
+ struct masgn_lhs_node *first_memo;
+ struct masgn_lhs_node *last_memo;
+ int lhs_level;
+ int num_args;
+ bool nested;
+};
+
+static int
+add_masgn_lhs_node(struct masgn_state *state, int lhs_pos, const NODE *line_node, int argc, INSN *before_insn)
+{
+ if (!state) {
+ rb_bug("no masgn_state");
+ }
+
+ struct masgn_lhs_node *memo;
+ memo = malloc(sizeof(struct masgn_lhs_node));
+ if (!memo) {
+ return COMPILE_NG;
+ }
+
+ memo->before_insn = before_insn;
+ memo->line_node = line_node;
+ memo->argn = state->num_args + 1;
+ memo->num_args = argc;
+ state->num_args += argc;
+ memo->lhs_pos = lhs_pos;
+ memo->next = NULL;
+ if (!state->first_memo) {
+ state->first_memo = memo;
+ }
+ else {
+ state->last_memo->next = memo;
+ }
+ state->last_memo = memo;
+
+ return COMPILE_OK;
+}
+
+static int compile_massign0(rb_iseq_t *iseq, LINK_ANCHOR *const pre, LINK_ANCHOR *const rhs, LINK_ANCHOR *const lhs, LINK_ANCHOR *const post, const NODE *const node, struct masgn_state *state, int popped);
+
+static int
+compile_massign_lhs(rb_iseq_t *iseq, LINK_ANCHOR *const pre, LINK_ANCHOR *const rhs, LINK_ANCHOR *const lhs, LINK_ANCHOR *const post, const NODE *const node, struct masgn_state *state, int lhs_pos)
{
switch (nd_type(node)) {
case NODE_ATTRASGN: {
- INSN *iobj;
- struct rb_call_info *ci;
- VALUE dupidx;
- int line = nd_line(node);
-
- COMPILE_POPED(ret, "masgn lhs (NODE_ATTRASGN)", node);
-
- iobj = (INSN *)get_prev_insn((INSN *)LAST_ELEMENT(ret)); /* send insn */
- ci = (struct rb_call_info *)iobj->operands[0];
- ci->orig_argc += 1;
- dupidx = INT2FIX(ci->orig_argc);
-
- INSERT_BEFORE_INSN1(iobj, line, topn, dupidx);
- if (ci->flag & VM_CALL_ARGS_SPLAT) {
- --ci->orig_argc;
- INSERT_BEFORE_INSN1(iobj, line, newarray, INT2FIX(1));
- INSERT_BEFORE_INSN(iobj, line, concatarray);
- }
- ADD_INSN(ret, line, pop); /* result */
- break;
+ INSN *iobj;
+ const NODE *line_node = node;
+
+ CHECK(COMPILE_POPPED(pre, "masgn lhs (NODE_ATTRASGN)", node));
+
+ bool safenav_call = false;
+ LINK_ELEMENT *insn_element = LAST_ELEMENT(pre);
+ iobj = (INSN *)get_prev_insn((INSN *)insn_element); /* send insn */
+ ASSUME(iobj);
+ ELEM_REMOVE(insn_element);
+ if (!IS_INSN_ID(iobj, send)) {
+ safenav_call = true;
+ iobj = (INSN *)get_prev_insn(iobj);
+ ELEM_INSERT_NEXT(&iobj->link, insn_element);
+ }
+ (pre->last = iobj->link.prev)->next = 0;
+
+ const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(iobj, 0);
+ int argc = vm_ci_argc(ci) + 1;
+ ci = ci_argc_set(iseq, ci, argc);
+ OPERAND_AT(iobj, 0) = (VALUE)ci;
+ RB_OBJ_WRITTEN(iseq, Qundef, ci);
+
+ if (argc == 1) {
+ ADD_INSN(lhs, line_node, swap);
+ }
+ else {
+ ADD_INSN1(lhs, line_node, topn, INT2FIX(argc));
+ }
+
+ if (!add_masgn_lhs_node(state, lhs_pos, line_node, argc, (INSN *)LAST_ELEMENT(lhs))) {
+ return COMPILE_NG;
+ }
+
+ iobj->link.prev = lhs->last;
+ lhs->last->next = &iobj->link;
+ for (lhs->last = &iobj->link; lhs->last->next; lhs->last = lhs->last->next);
+ if (vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT) {
+ int argc = vm_ci_argc(ci);
+ bool dupsplat = false;
+ ci = ci_argc_set(iseq, ci, argc - 1);
+ if (!(vm_ci_flag(ci) & VM_CALL_ARGS_SPLAT_MUT)) {
+ /* Given h[*a], _ = ary
+ * setup_args sets VM_CALL_ARGS_SPLAT and not VM_CALL_ARGS_SPLAT_MUT
+ * `a` must be dupped, because it will be appended with ary[0]
+ * Since you are dupping `a`, you can set VM_CALL_ARGS_SPLAT_MUT
+ */
+ dupsplat = true;
+ ci = ci_flag_set(iseq, ci, VM_CALL_ARGS_SPLAT_MUT);
+ }
+ OPERAND_AT(iobj, 0) = (VALUE)ci;
+ RB_OBJ_WRITTEN(iseq, Qundef, iobj);
+
+ /* Given: h[*a], h[*b, 1] = ary
+ * h[*a] uses splatarray false and does not set VM_CALL_ARGS_SPLAT_MUT,
+ * so this uses splatarray true on a to dup it before using pushtoarray
+ * h[*b, 1] uses splatarray true and sets VM_CALL_ARGS_SPLAT_MUT,
+ * so you can use pushtoarray directly
+ */
+ int line_no = nd_line(line_node);
+ int node_id = nd_node_id(line_node);
+
+ if (dupsplat) {
+ INSERT_BEFORE_INSN(iobj, line_no, node_id, swap);
+ INSERT_BEFORE_INSN1(iobj, line_no, node_id, splatarray, Qtrue);
+ INSERT_BEFORE_INSN(iobj, line_no, node_id, swap);
+ }
+ INSERT_BEFORE_INSN1(iobj, line_no, node_id, pushtoarray, INT2FIX(1));
+ }
+ if (!safenav_call) {
+ ADD_INSN(lhs, line_node, pop);
+ if (argc != 1) {
+ ADD_INSN(lhs, line_node, pop);
+ }
+ }
+ for (int i=0; i < argc; i++) {
+ ADD_INSN(post, line_node, pop);
+ }
+ break;
}
case NODE_MASGN: {
- DECL_ANCHOR(anchor);
- INIT_ANCHOR(anchor);
- COMPILE_POPED(anchor, "nest masgn lhs", node);
- REMOVE_ELEM(FIRST_ELEMENT(anchor));
- ADD_SEQ(ret, anchor);
- break;
+ DECL_ANCHOR(nest_rhs);
+ INIT_ANCHOR(nest_rhs);
+ DECL_ANCHOR(nest_lhs);
+ INIT_ANCHOR(nest_lhs);
+
+ int prev_level = state->lhs_level;
+ bool prev_nested = state->nested;
+ state->nested = 1;
+ state->lhs_level = lhs_pos - 1;
+ CHECK(compile_massign0(iseq, pre, nest_rhs, nest_lhs, post, node, state, 1));
+ state->lhs_level = prev_level;
+ state->nested = prev_nested;
+
+ ADD_SEQ(lhs, nest_rhs);
+ ADD_SEQ(lhs, nest_lhs);
+ break;
}
+ case NODE_CDECL:
+ if (!RNODE_CDECL(node)->nd_vid) {
+ /* Special handling only needed for expr::C, not for C */
+ INSN *iobj;
+
+ CHECK(COMPILE_POPPED(pre, "masgn lhs (NODE_CDECL)", node));
+
+ LINK_ELEMENT *insn_element = LAST_ELEMENT(pre);
+ iobj = (INSN *)insn_element; /* setconstant insn */
+ ELEM_REMOVE((LINK_ELEMENT *)get_prev_insn((INSN *)get_prev_insn(iobj)));
+ ELEM_REMOVE((LINK_ELEMENT *)get_prev_insn(iobj));
+ ELEM_REMOVE(insn_element);
+ pre->last = iobj->link.prev;
+ ADD_ELEM(lhs, (LINK_ELEMENT *)iobj);
+
+ if (!add_masgn_lhs_node(state, lhs_pos, node, 1, (INSN *)LAST_ELEMENT(lhs))) {
+ return COMPILE_NG;
+ }
+
+ ADD_INSN(post, node, pop);
+ break;
+ }
+ /* Fallthrough */
default: {
- DECL_ANCHOR(anchor);
- INIT_ANCHOR(anchor);
- COMPILE_POPED(anchor, "masgn lhs", node);
- REMOVE_ELEM(FIRST_ELEMENT(anchor));
- ADD_SEQ(ret, anchor);
+ DECL_ANCHOR(anchor);
+ INIT_ANCHOR(anchor);
+ CHECK(COMPILE_POPPED(anchor, "masgn lhs", node));
+ ELEM_REMOVE(FIRST_ELEMENT(anchor));
+ ADD_SEQ(lhs, anchor);
}
}
return COMPILE_OK;
}
-static void
-compile_massign_opt_lhs(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *lhsn)
+static int
+compile_massign_opt_lhs(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *lhsn)
{
if (lhsn) {
- compile_massign_opt_lhs(iseq, ret, lhsn->nd_next);
- compile_massign_lhs(iseq, ret, lhsn->nd_head);
+ CHECK(compile_massign_opt_lhs(iseq, ret, RNODE_LIST(lhsn)->nd_next));
+ CHECK(compile_massign_lhs(iseq, ret, ret, ret, ret, RNODE_LIST(lhsn)->nd_head, NULL, 0));
}
+ return COMPILE_OK;
}
static int
-compile_massign_opt(rb_iseq_t *iseq, LINK_ANCHOR *ret,
- NODE *rhsn, NODE *orig_lhsn)
+compile_massign_opt(rb_iseq_t *iseq, LINK_ANCHOR *const ret,
+ const NODE *rhsn, const NODE *orig_lhsn)
{
VALUE mem[64];
const int memsize = numberof(mem);
int memindex = 0;
int llen = 0, rlen = 0;
int i;
- NODE *lhsn = orig_lhsn;
+ const NODE *lhsn = orig_lhsn;
#define MEMORY(v) { \
int i; \
if (memindex == memsize) return 0; \
for (i=0; i<memindex; i++) { \
- if (mem[i] == (v)) return 0; \
+ if (mem[i] == (v)) return 0; \
} \
mem[memindex++] = (v); \
}
- if (rhsn == 0 || nd_type(rhsn) != NODE_ARRAY) {
- return 0;
+ if (rhsn == 0 || !nd_type_p(rhsn, NODE_LIST)) {
+ return 0;
}
while (lhsn) {
- NODE *ln = lhsn->nd_head;
- switch (nd_type(ln)) {
- case NODE_LASGN:
- MEMORY(ln->nd_vid);
- break;
- case NODE_DASGN:
- case NODE_DASGN_CURR:
- case NODE_IASGN:
- case NODE_IASGN2:
- case NODE_CVASGN:
- MEMORY(ln->nd_vid);
- break;
- default:
- return 0;
- }
- lhsn = lhsn->nd_next;
- llen++;
+ const NODE *ln = RNODE_LIST(lhsn)->nd_head;
+ switch (nd_type(ln)) {
+ case NODE_LASGN:
+ case NODE_DASGN:
+ case NODE_IASGN:
+ case NODE_CVASGN:
+ MEMORY(get_nd_vid(ln));
+ break;
+ default:
+ return 0;
+ }
+ lhsn = RNODE_LIST(lhsn)->nd_next;
+ llen++;
}
while (rhsn) {
- if (llen <= rlen) {
- COMPILE_POPED(ret, "masgn val (popped)", rhsn->nd_head);
- }
- else {
- COMPILE(ret, "masgn val", rhsn->nd_head);
- }
- rhsn = rhsn->nd_next;
- rlen++;
+ if (llen <= rlen) {
+ NO_CHECK(COMPILE_POPPED(ret, "masgn val (popped)", RNODE_LIST(rhsn)->nd_head));
+ }
+ else {
+ NO_CHECK(COMPILE(ret, "masgn val", RNODE_LIST(rhsn)->nd_head));
+ }
+ rhsn = RNODE_LIST(rhsn)->nd_next;
+ rlen++;
}
if (llen > rlen) {
- for (i=0; i<llen-rlen; i++) {
- ADD_INSN(ret, nd_line(orig_lhsn), putnil);
- }
+ for (i=0; i<llen-rlen; i++) {
+ ADD_INSN(ret, orig_lhsn, putnil);
+ }
}
compile_massign_opt_lhs(iseq, ret, orig_lhsn);
return 1;
}
-static void
-adjust_stack(rb_iseq_t *iseq, LINK_ANCHOR *ret, int line, int rlen, int llen)
-{
- if (rlen < llen) {
- do {ADD_INSN(ret, line, putnil);} while (++rlen < llen);
- }
- else if (rlen > llen) {
- do {ADD_INSN(ret, line, pop);} while (--rlen > llen);
- }
-}
-
-static int
-compile_massign(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int poped)
-{
- NODE *rhsn = node->nd_value;
- NODE *splatn = node->nd_args;
- NODE *lhsn = node->nd_head;
- int lhs_splat = (splatn && (VALUE)splatn != (VALUE)-1) ? 1 : 0;
-
- if (!poped || splatn || !compile_massign_opt(iseq, ret, rhsn, lhsn)) {
- int llen = 0;
- int expand = 1;
- DECL_ANCHOR(lhsseq);
-
- INIT_ANCHOR(lhsseq);
-
- while (lhsn) {
- compile_massign_lhs(iseq, lhsseq, lhsn->nd_head);
- llen += 1;
- lhsn = lhsn->nd_next;
- }
-
- COMPILE(ret, "normal masgn rhs", rhsn);
-
- if (!poped) {
- ADD_INSN(ret, nd_line(node), dup);
- }
- else if (!lhs_splat) {
- INSN *last = (INSN*)ret->last;
- if (last->link.type == ISEQ_ELEMENT_INSN &&
- last->insn_id == BIN(newarray) &&
- last->operand_size == 1) {
- int rlen = FIX2INT(OPERAND_AT(last, 0));
- /* special case: assign to aset or attrset */
- if (llen == 2) {
- POP_ELEMENT(ret);
- adjust_stack(iseq, ret, nd_line(node), rlen, llen);
- ADD_INSN(ret, nd_line(node), swap);
- expand = 0;
- }
- else if (llen > 2 && llen != rlen) {
- POP_ELEMENT(ret);
- adjust_stack(iseq, ret, nd_line(node), rlen, llen);
- ADD_INSN1(ret, nd_line(node), reverse, INT2FIX(llen));
- expand = 0;
- }
- else if (llen > 2) {
- last->insn_id = BIN(reverse);
- expand = 0;
- }
- }
- }
- if (expand) {
- ADD_INSN2(ret, nd_line(node), expandarray,
- INT2FIX(llen), INT2FIX(lhs_splat));
- }
- ADD_SEQ(ret, lhsseq);
-
- if (lhs_splat) {
- if (nd_type(splatn) == NODE_POSTARG) {
- /*a, b, *r, p1, p2 */
- NODE *postn = splatn->nd_2nd;
- NODE *restn = splatn->nd_1st;
- int num = (int)postn->nd_alen;
- int flag = 0x02 | (((VALUE)restn == (VALUE)-1) ? 0x00 : 0x01);
-
- ADD_INSN2(ret, nd_line(splatn), expandarray,
- INT2FIX(num), INT2FIX(flag));
-
- if ((VALUE)restn != (VALUE)-1) {
- compile_massign_lhs(iseq, ret, restn);
- }
- while (postn) {
- compile_massign_lhs(iseq, ret, postn->nd_head);
- postn = postn->nd_next;
- }
- }
- else {
- /* a, b, *r */
- compile_massign_lhs(iseq, ret, splatn);
- }
- }
+static int
+compile_massign0(rb_iseq_t *iseq, LINK_ANCHOR *const pre, LINK_ANCHOR *const rhs, LINK_ANCHOR *const lhs, LINK_ANCHOR *const post, const NODE *const node, struct masgn_state *state, int popped)
+{
+ const NODE *rhsn = RNODE_MASGN(node)->nd_value;
+ const NODE *splatn = RNODE_MASGN(node)->nd_args;
+ const NODE *lhsn = RNODE_MASGN(node)->nd_head;
+ const NODE *lhsn_count = lhsn;
+ int lhs_splat = (splatn && NODE_NAMED_REST_P(splatn)) ? 1 : 0;
+
+ int llen = 0;
+ int lpos = 0;
+
+ while (lhsn_count) {
+ llen++;
+ lhsn_count = RNODE_LIST(lhsn_count)->nd_next;
+ }
+ while (lhsn) {
+ CHECK(compile_massign_lhs(iseq, pre, rhs, lhs, post, RNODE_LIST(lhsn)->nd_head, state, (llen - lpos) + lhs_splat + state->lhs_level));
+ lpos++;
+ lhsn = RNODE_LIST(lhsn)->nd_next;
+ }
+
+ if (lhs_splat) {
+ if (nd_type_p(splatn, NODE_POSTARG)) {
+ /*a, b, *r, p1, p2 */
+ const NODE *postn = RNODE_POSTARG(splatn)->nd_2nd;
+ const NODE *restn = RNODE_POSTARG(splatn)->nd_1st;
+ int plen = (int)RNODE_LIST(postn)->as.nd_alen;
+ int ppos = 0;
+ int flag = 0x02 | (NODE_NAMED_REST_P(restn) ? 0x01 : 0x00);
+
+ ADD_INSN2(lhs, splatn, expandarray, INT2FIX(plen), INT2FIX(flag));
+
+ if (NODE_NAMED_REST_P(restn)) {
+ CHECK(compile_massign_lhs(iseq, pre, rhs, lhs, post, restn, state, 1 + plen + state->lhs_level));
+ }
+ while (postn) {
+ CHECK(compile_massign_lhs(iseq, pre, rhs, lhs, post, RNODE_LIST(postn)->nd_head, state, (plen - ppos) + state->lhs_level));
+ ppos++;
+ postn = RNODE_LIST(postn)->nd_next;
+ }
+ }
+ else {
+ /* a, b, *r */
+ CHECK(compile_massign_lhs(iseq, pre, rhs, lhs, post, splatn, state, 1 + state->lhs_level));
+ }
+ }
+
+ if (!state->nested) {
+ NO_CHECK(COMPILE(rhs, "normal masgn rhs", rhsn));
+ }
+
+ if (!popped) {
+ ADD_INSN(rhs, node, dup);
}
+ ADD_INSN2(rhs, node, expandarray, INT2FIX(llen), INT2FIX(lhs_splat));
return COMPILE_OK;
}
static int
-compile_colon2(rb_iseq_t *iseq, NODE * node,
- LINK_ANCHOR *pref, LINK_ANCHOR *body)
+compile_massign(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ if (!popped || RNODE_MASGN(node)->nd_args || !compile_massign_opt(iseq, ret, RNODE_MASGN(node)->nd_value, RNODE_MASGN(node)->nd_head)) {
+ struct masgn_state state;
+ state.lhs_level = popped ? 0 : 1;
+ state.nested = 0;
+ state.num_args = 0;
+ state.first_memo = NULL;
+ state.last_memo = NULL;
+
+ DECL_ANCHOR(pre);
+ INIT_ANCHOR(pre);
+ DECL_ANCHOR(rhs);
+ INIT_ANCHOR(rhs);
+ DECL_ANCHOR(lhs);
+ INIT_ANCHOR(lhs);
+ DECL_ANCHOR(post);
+ INIT_ANCHOR(post);
+ int ok = compile_massign0(iseq, pre, rhs, lhs, post, node, &state, popped);
+
+ struct masgn_lhs_node *memo = state.first_memo, *tmp_memo;
+ while (memo) {
+ VALUE topn_arg = INT2FIX((state.num_args - memo->argn) + memo->lhs_pos);
+ for (int i = 0; i < memo->num_args; i++) {
+ INSERT_BEFORE_INSN1(memo->before_insn, nd_line(memo->line_node), nd_node_id(memo->line_node), topn, topn_arg);
+ }
+ tmp_memo = memo->next;
+ free(memo);
+ memo = tmp_memo;
+ }
+ CHECK(ok);
+
+ ADD_SEQ(ret, pre);
+ ADD_SEQ(ret, rhs);
+ ADD_SEQ(ret, lhs);
+ if (!popped && state.num_args >= 1) {
+ /* make sure rhs array is returned before popping */
+ ADD_INSN1(ret, node, setn, INT2FIX(state.num_args));
+ }
+ ADD_SEQ(ret, post);
+ }
+ return COMPILE_OK;
+}
+
+static VALUE
+collect_const_segments(rb_iseq_t *iseq, const NODE *node)
+{
+ VALUE arr = rb_ary_new();
+ for (;;) {
+ switch (nd_type(node)) {
+ case NODE_CONST:
+ rb_ary_unshift(arr, ID2SYM(RNODE_CONST(node)->nd_vid));
+ RB_OBJ_SET_SHAREABLE(arr);
+ return arr;
+ case NODE_COLON3:
+ rb_ary_unshift(arr, ID2SYM(RNODE_COLON3(node)->nd_mid));
+ rb_ary_unshift(arr, ID2SYM(idNULL));
+ RB_OBJ_SET_SHAREABLE(arr);
+ return arr;
+ case NODE_COLON2:
+ rb_ary_unshift(arr, ID2SYM(RNODE_COLON2(node)->nd_mid));
+ node = RNODE_COLON2(node)->nd_head;
+ break;
+ default:
+ return Qfalse;
+ }
+ }
+}
+
+static int
+compile_const_prefix(rb_iseq_t *iseq, const NODE *const node,
+ LINK_ANCHOR *const pref, LINK_ANCHOR *const body)
{
switch (nd_type(node)) {
case NODE_CONST:
- debugi("compile_colon2 - colon", node->nd_vid);
- ADD_INSN1(body, nd_line(node), getconstant, ID2SYM(node->nd_vid));
- break;
+ debugi("compile_const_prefix - colon", RNODE_CONST(node)->nd_vid);
+ ADD_INSN1(body, node, putobject, Qtrue);
+ ADD_INSN1(body, node, getconstant, ID2SYM(RNODE_CONST(node)->nd_vid));
+ break;
case NODE_COLON3:
- debugi("compile_colon2 - colon3", node->nd_mid);
- ADD_INSN(body, nd_line(node), pop);
- ADD_INSN1(body, nd_line(node), putobject, rb_cObject);
- ADD_INSN1(body, nd_line(node), getconstant, ID2SYM(node->nd_mid));
- break;
+ debugi("compile_const_prefix - colon3", RNODE_COLON3(node)->nd_mid);
+ ADD_INSN(body, node, pop);
+ ADD_INSN1(body, node, putobject, rb_cObject);
+ ADD_INSN1(body, node, putobject, Qtrue);
+ ADD_INSN1(body, node, getconstant, ID2SYM(RNODE_COLON3(node)->nd_mid));
+ break;
case NODE_COLON2:
- compile_colon2(iseq, node->nd_head, pref, body);
- debugi("compile_colon2 - colon2", node->nd_mid);
- ADD_INSN1(body, nd_line(node), getconstant, ID2SYM(node->nd_mid));
- break;
+ CHECK(compile_const_prefix(iseq, RNODE_COLON2(node)->nd_head, pref, body));
+ debugi("compile_const_prefix - colon2", RNODE_COLON2(node)->nd_mid);
+ ADD_INSN1(body, node, putobject, Qfalse);
+ ADD_INSN1(body, node, getconstant, ID2SYM(RNODE_COLON2(node)->nd_mid));
+ break;
default:
- COMPILE(pref, "const colon2 prefix", node);
- break;
+ CHECK(COMPILE(pref, "const colon2 prefix", node));
+ break;
}
return COMPILE_OK;
}
-static VALUE
-compile_cpath(LINK_ANCHOR *ret, rb_iseq_t *iseq, NODE *cpath)
+static int
+compile_cpath(LINK_ANCHOR *const ret, rb_iseq_t *iseq, const NODE *cpath)
{
- if (nd_type(cpath) == NODE_COLON3) {
- /* toplevel class ::Foo */
- ADD_INSN1(ret, nd_line(cpath), putobject, rb_cObject);
- return Qfalse;
+ if (nd_type_p(cpath, NODE_COLON3)) {
+ /* toplevel class ::Foo */
+ ADD_INSN1(ret, cpath, putobject, rb_cObject);
+ return VM_DEFINECLASS_FLAG_SCOPED;
}
- else if (cpath->nd_head) {
- /* Bar::Foo */
- COMPILE(ret, "nd_else->nd_head", cpath->nd_head);
- return Qfalse;
+ else if (nd_type_p(cpath, NODE_COLON2) && RNODE_COLON2(cpath)->nd_head) {
+ /* Bar::Foo */
+ NO_CHECK(COMPILE(ret, "nd_else->nd_head", RNODE_COLON2(cpath)->nd_head));
+ return VM_DEFINECLASS_FLAG_SCOPED;
}
else {
- /* class at cbase Foo */
- ADD_INSN1(ret, nd_line(cpath), putspecialobject,
- INT2FIX(VM_SPECIAL_OBJECT_CONST_BASE));
- return Qtrue;
+ /* class at cbase Foo */
+ ADD_INSN1(ret, cpath, putspecialobject,
+ INT2FIX(VM_SPECIAL_OBJECT_CONST_BASE));
+ return 0;
}
}
-#define private_recv_p(node) (nd_type((node)->nd_recv) == NODE_SELF)
+static inline int
+private_recv_p(const NODE *node)
+{
+ NODE *recv = get_nd_recv(node);
+ if (recv && nd_type_p(recv, NODE_SELF)) {
+ return RNODE_SELF(recv)->nd_state != 0;
+ }
+ return 0;
+}
+
+static void
+defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret,
+ const NODE *const node, LABEL **lfinish, VALUE needstr, bool ignore);
-#define defined_expr defined_expr0
static int
-defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *ret,
- NODE *node, LABEL **lfinish, VALUE needstr)
+compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, const enum node_type type, const NODE *const line_node, int popped, bool assume_receiver);
+
+static void
+defined_expr0(rb_iseq_t *iseq, LINK_ANCHOR *const ret,
+ const NODE *const node, LABEL **lfinish, VALUE needstr,
+ bool keep_result)
{
- enum defined_type expr_type = 0;
+ enum defined_type expr_type = DEFINED_NOT_DEFINED;
enum node_type type;
+ const int line = nd_line(node);
+ const NODE *line_node = node;
switch (type = nd_type(node)) {
- /* easy literals */
+ /* easy literals */
case NODE_NIL:
- expr_type = DEFINED_NIL;
- break;
+ expr_type = DEFINED_NIL;
+ break;
case NODE_SELF:
- expr_type = DEFINED_SELF;
- break;
+ expr_type = DEFINED_SELF;
+ break;
case NODE_TRUE:
- expr_type = DEFINED_TRUE;
- break;
+ expr_type = DEFINED_TRUE;
+ break;
case NODE_FALSE:
- expr_type = DEFINED_FALSE;
- break;
-
- case NODE_ARRAY:{
- NODE *vals = node;
-
- do {
- defined_expr(iseq, ret, vals->nd_head, lfinish, Qfalse);
-
- if (!lfinish[1]) {
- lfinish[1] = NEW_LABEL(nd_line(node));
- }
- ADD_INSNL(ret, nd_line(node), branchunless, lfinish[1]);
- } while ((vals = vals->nd_next) != NULL);
+ expr_type = DEFINED_FALSE;
+ break;
+
+ case NODE_HASH:
+ case NODE_LIST:{
+ const NODE *vals = (nd_type(node) == NODE_HASH) ? RNODE_HASH(node)->nd_head : node;
+
+ if (vals) {
+ do {
+ if (RNODE_LIST(vals)->nd_head) {
+ defined_expr0(iseq, ret, RNODE_LIST(vals)->nd_head, lfinish, Qfalse, false);
+
+ if (!lfinish[1]) {
+ lfinish[1] = NEW_LABEL(line);
+ }
+ ADD_INSNL(ret, line_node, branchunless, lfinish[1]);
+ }
+ } while ((vals = RNODE_LIST(vals)->nd_next) != NULL);
+ }
}
+ /* fall through */
case NODE_STR:
- case NODE_LIT:
- case NODE_ZARRAY:
+ case NODE_SYM:
+ case NODE_REGX:
+ case NODE_LINE:
+ case NODE_FILE:
+ case NODE_ENCODING:
+ case NODE_INTEGER:
+ case NODE_FLOAT:
+ case NODE_RATIONAL:
+ case NODE_IMAGINARY:
+ case NODE_ZLIST:
case NODE_AND:
case NODE_OR:
default:
- expr_type = DEFINED_EXPR;
- break;
-
- /* variables */
+ expr_type = DEFINED_EXPR;
+ break;
+
+ case NODE_SPLAT:
+ defined_expr0(iseq, ret, RNODE_LIST(node)->nd_head, lfinish, Qfalse, false);
+ if (!lfinish[1]) {
+ lfinish[1] = NEW_LABEL(line);
+ }
+ ADD_INSNL(ret, line_node, branchunless, lfinish[1]);
+ expr_type = DEFINED_EXPR;
+ break;
+
+ /* variables */
case NODE_LVAR:
case NODE_DVAR:
- expr_type = DEFINED_LVAR;
- break;
+ expr_type = DEFINED_LVAR;
+ break;
+#define PUSH_VAL(type) (needstr == Qfalse ? Qtrue : rb_iseq_defined_string(type))
case NODE_IVAR:
- ADD_INSN(ret, nd_line(node), putnil);
- ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_IVAR),
- ID2SYM(node->nd_vid), needstr);
- return 1;
+ ADD_INSN3(ret, line_node, definedivar,
+ ID2SYM(RNODE_IVAR(node)->nd_vid), get_ivar_ic_value(iseq,RNODE_IVAR(node)->nd_vid), PUSH_VAL(DEFINED_IVAR));
+ return;
case NODE_GVAR:
- ADD_INSN(ret, nd_line(node), putnil);
- ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_GVAR),
- ID2SYM(node->nd_entry->id), needstr);
- return 1;
+ ADD_INSN(ret, line_node, putnil);
+ ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_GVAR),
+ ID2SYM(RNODE_GVAR(node)->nd_vid), PUSH_VAL(DEFINED_GVAR));
+ return;
case NODE_CVAR:
- ADD_INSN(ret, nd_line(node), putnil);
- ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_CVAR),
- ID2SYM(node->nd_vid), needstr);
- return 1;
+ ADD_INSN(ret, line_node, putnil);
+ ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_CVAR),
+ ID2SYM(RNODE_CVAR(node)->nd_vid), PUSH_VAL(DEFINED_CVAR));
+ return;
case NODE_CONST:
- ADD_INSN(ret, nd_line(node), putnil);
- ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_CONST),
- ID2SYM(node->nd_vid), needstr);
- return 1;
+ ADD_INSN(ret, line_node, putnil);
+ ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_CONST),
+ ID2SYM(RNODE_CONST(node)->nd_vid), PUSH_VAL(DEFINED_CONST));
+ return;
case NODE_COLON2:
- if (!lfinish[1]) {
- lfinish[1] = NEW_LABEL(nd_line(node));
- }
- defined_expr(iseq, ret, node->nd_head, lfinish, Qfalse);
- ADD_INSNL(ret, nd_line(node), branchunless, lfinish[1]);
-
- if (rb_is_const_id(node->nd_mid)) {
- COMPILE(ret, "defined/colon2#nd_head", node->nd_head);
- ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_CONST),
- ID2SYM(node->nd_mid), needstr);
- }
- else {
- COMPILE(ret, "defined/colon2#nd_head", node->nd_head);
- ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_METHOD),
- ID2SYM(node->nd_mid), needstr);
- }
- return 1;
+ if (!lfinish[1]) {
+ lfinish[1] = NEW_LABEL(line);
+ }
+ defined_expr0(iseq, ret, RNODE_COLON2(node)->nd_head, lfinish, Qfalse, false);
+ ADD_INSNL(ret, line_node, branchunless, lfinish[1]);
+ NO_CHECK(COMPILE(ret, "defined/colon2#nd_head", RNODE_COLON2(node)->nd_head));
+
+ if (rb_is_const_id(RNODE_COLON2(node)->nd_mid)) {
+ ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_CONST_FROM),
+ ID2SYM(RNODE_COLON2(node)->nd_mid), PUSH_VAL(DEFINED_CONST));
+ }
+ else {
+ ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_METHOD),
+ ID2SYM(RNODE_COLON2(node)->nd_mid), PUSH_VAL(DEFINED_METHOD));
+ }
+ return;
case NODE_COLON3:
- ADD_INSN1(ret, nd_line(node), putobject, rb_cObject);
- ADD_INSN3(ret, nd_line(node), defined,
- INT2FIX(DEFINED_CONST), ID2SYM(node->nd_mid), needstr);
- return 1;
+ ADD_INSN1(ret, line_node, putobject, rb_cObject);
+ ADD_INSN3(ret, line_node, defined,
+ INT2FIX(DEFINED_CONST_FROM), ID2SYM(RNODE_COLON3(node)->nd_mid), PUSH_VAL(DEFINED_CONST));
+ return;
- /* method dispatch */
+ /* method dispatch */
case NODE_CALL:
+ case NODE_OPCALL:
case NODE_VCALL:
case NODE_FCALL:
case NODE_ATTRASGN:{
- const int explicit_receiver =
- (type == NODE_CALL ||
- (type == NODE_ATTRASGN && !private_recv_p(node)));
-
- if (!lfinish[1]) {
- lfinish[1] = NEW_LABEL(nd_line(node));
- }
- if (node->nd_args) {
- defined_expr(iseq, ret, node->nd_args, lfinish, Qfalse);
- ADD_INSNL(ret, nd_line(node), branchunless, lfinish[1]);
- }
- if (explicit_receiver) {
- defined_expr(iseq, ret, node->nd_recv, lfinish, Qfalse);
- ADD_INSNL(ret, nd_line(node), branchunless, lfinish[1]);
- COMPILE(ret, "defined/recv", node->nd_recv);
- ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_METHOD),
- ID2SYM(node->nd_mid), needstr);
- }
- else {
- ADD_INSN(ret, nd_line(node), putself);
- ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_FUNC),
- ID2SYM(node->nd_mid), needstr);
- }
- return 1;
+ const int explicit_receiver =
+ (type == NODE_CALL || type == NODE_OPCALL ||
+ (type == NODE_ATTRASGN && !private_recv_p(node)));
+
+ if (get_nd_args(node) || explicit_receiver) {
+ if (!lfinish[1]) {
+ lfinish[1] = NEW_LABEL(line);
+ }
+ if (!lfinish[2]) {
+ lfinish[2] = NEW_LABEL(line);
+ }
+ }
+ if (get_nd_args(node)) {
+ defined_expr0(iseq, ret, get_nd_args(node), lfinish, Qfalse, false);
+ ADD_INSNL(ret, line_node, branchunless, lfinish[1]);
+ }
+ if (explicit_receiver) {
+ defined_expr0(iseq, ret, get_nd_recv(node), lfinish, Qfalse, true);
+ switch (nd_type(get_nd_recv(node))) {
+ case NODE_CALL:
+ case NODE_OPCALL:
+ case NODE_VCALL:
+ case NODE_FCALL:
+ case NODE_ATTRASGN:
+ ADD_INSNL(ret, line_node, branchunless, lfinish[2]);
+ compile_call(iseq, ret, get_nd_recv(node), nd_type(get_nd_recv(node)), line_node, 0, true);
+ break;
+ default:
+ ADD_INSNL(ret, line_node, branchunless, lfinish[1]);
+ NO_CHECK(COMPILE(ret, "defined/recv", get_nd_recv(node)));
+ break;
+ }
+ if (keep_result) {
+ ADD_INSN(ret, line_node, dup);
+ }
+ ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_METHOD),
+ ID2SYM(get_node_call_nd_mid(node)), PUSH_VAL(DEFINED_METHOD));
+ }
+ else {
+ ADD_INSN(ret, line_node, putself);
+ if (keep_result) {
+ ADD_INSN(ret, line_node, dup);
+ }
+ ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_FUNC),
+ ID2SYM(get_node_call_nd_mid(node)), PUSH_VAL(DEFINED_METHOD));
+ }
+ return;
}
case NODE_YIELD:
- ADD_INSN(ret, nd_line(node), putnil);
- ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_YIELD), 0,
- needstr);
- return 1;
+ ADD_INSN(ret, line_node, putnil);
+ ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_YIELD), 0,
+ PUSH_VAL(DEFINED_YIELD));
+ iseq_set_use_block(ISEQ_BODY(iseq)->local_iseq);
+ return;
case NODE_BACK_REF:
case NODE_NTH_REF:
- ADD_INSN(ret, nd_line(node), putnil);
- ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_REF),
- INT2FIX((node->nd_nth << 1) | (type == NODE_BACK_REF)),
- needstr);
- return 1;
+ ADD_INSN(ret, line_node, putnil);
+ ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_REF),
+ INT2FIX((RNODE_BACK_REF(node)->nd_nth << 1) | (type == NODE_BACK_REF)),
+ PUSH_VAL(DEFINED_GVAR));
+ return;
case NODE_SUPER:
case NODE_ZSUPER:
- ADD_INSN(ret, nd_line(node), putnil);
- ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_ZSUPER), 0,
- needstr);
- return 1;
+ ADD_INSN(ret, line_node, putnil);
+ ADD_INSN3(ret, line_node, defined, INT2FIX(DEFINED_ZSUPER), 0,
+ PUSH_VAL(DEFINED_ZSUPER));
+ return;
+#undef PUSH_VAL
case NODE_OP_ASGN1:
case NODE_OP_ASGN2:
case NODE_OP_ASGN_OR:
@@ -3421,50 +6334,88 @@ defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *ret,
case NODE_MASGN:
case NODE_LASGN:
case NODE_DASGN:
- case NODE_DASGN_CURR:
case NODE_GASGN:
case NODE_IASGN:
case NODE_CDECL:
- case NODE_CVDECL:
case NODE_CVASGN:
- expr_type = DEFINED_ASGN;
- break;
+ case NODE_OP_CDECL:
+ expr_type = DEFINED_ASGN;
+ break;
}
- if (expr_type) {
- if (needstr != Qfalse) {
- VALUE str = rb_iseq_defined_string(expr_type);
- ADD_INSN1(ret, nd_line(node), putobject, str);
- }
- else {
- ADD_INSN1(ret, nd_line(node), putobject, Qtrue);
- }
- return 1;
+ RUBY_ASSERT(expr_type != DEFINED_NOT_DEFINED);
+
+ if (needstr != Qfalse) {
+ VALUE str = rb_iseq_defined_string(expr_type);
+ ADD_INSN1(ret, line_node, putobject, str);
+ }
+ else {
+ ADD_INSN1(ret, line_node, putobject, Qtrue);
}
- return 0;
}
-#undef defined_expr
-static int
-defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *ret,
- NODE *node, LABEL **lfinish, VALUE needstr)
+static void
+build_defined_rescue_iseq(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const void *unused)
+{
+ ADD_SYNTHETIC_INSN(ret, 0, -1, putnil);
+ iseq_set_exception_local_table(iseq);
+}
+
+static void
+defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret,
+ const NODE *const node, LABEL **lfinish, VALUE needstr, bool ignore)
{
LINK_ELEMENT *lcur = ret->last;
- int done = defined_expr0(iseq, ret, node, lfinish, needstr);
+ defined_expr0(iseq, ret, node, lfinish, needstr, false);
if (lfinish[1]) {
- int line = nd_line(node);
- LABEL *lstart = NEW_LABEL(line);
- LABEL *lend = NEW_LABEL(line);
- const rb_iseq_t *rescue = NEW_CHILD_ISEQ(NEW_NIL(),
- rb_str_concat(rb_str_new2
- ("defined guard in "),
- iseq->body->location.label),
- ISEQ_TYPE_DEFINED_GUARD, 0);
- APPEND_LABEL(ret, lcur, lstart);
- ADD_LABEL(ret, lend);
- ADD_CATCH_ENTRY(CATCH_TYPE_RESCUE, lstart, lend, rescue, lfinish[1]);
+ int line = nd_line(node);
+ LABEL *lstart = NEW_LABEL(line);
+ LABEL *lend = NEW_LABEL(line);
+ const rb_iseq_t *rescue;
+ struct rb_iseq_new_with_callback_callback_func *ifunc =
+ rb_iseq_new_with_callback_new_callback(build_defined_rescue_iseq, NULL);
+ rescue = NEW_CHILD_ISEQ_WITH_CALLBACK(ifunc,
+ rb_str_concat(rb_str_new2("defined guard in "),
+ ISEQ_BODY(iseq)->location.label),
+ ISEQ_TYPE_RESCUE, 0);
+ lstart->rescued = LABEL_RESCUE_BEG;
+ lend->rescued = LABEL_RESCUE_END;
+ APPEND_LABEL(ret, lcur, lstart);
+ ADD_LABEL(ret, lend);
+ if (!ignore) {
+ ADD_CATCH_ENTRY(CATCH_TYPE_RESCUE, lstart, lend, rescue, lfinish[1]);
+ }
+ }
+}
+
+static int
+compile_defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE needstr, bool ignore)
+{
+ const int line = nd_line(node);
+ const NODE *line_node = node;
+ if (!RNODE_DEFINED(node)->nd_head) {
+ VALUE str = rb_iseq_defined_string(DEFINED_NIL);
+ ADD_INSN1(ret, line_node, putobject, str);
}
- return done;
+ else {
+ LABEL *lfinish[3];
+ LINK_ELEMENT *last = ret->last;
+ lfinish[0] = NEW_LABEL(line);
+ lfinish[1] = 0;
+ lfinish[2] = 0;
+ defined_expr(iseq, ret, RNODE_DEFINED(node)->nd_head, lfinish, needstr, ignore);
+ if (lfinish[1]) {
+ ELEM_INSERT_NEXT(last, &new_insn_body(iseq, nd_line(line_node), nd_node_id(line_node), BIN(putnil), 0)->link);
+ ADD_INSN(ret, line_node, swap);
+ if (lfinish[2]) {
+ ADD_LABEL(ret, lfinish[2]);
+ }
+ ADD_INSN(ret, line_node, pop);
+ ADD_LABEL(ret, lfinish[1]);
+ }
+ ADD_LABEL(ret, lfinish[0]);
+ }
+ return COMPILE_OK;
}
static VALUE
@@ -3473,27 +6424,27 @@ make_name_for_block(const rb_iseq_t *orig_iseq)
int level = 1;
const rb_iseq_t *iseq = orig_iseq;
- if (orig_iseq->body->parent_iseq != 0) {
- while (orig_iseq->body->local_iseq != iseq) {
- if (iseq->body->type == ISEQ_TYPE_BLOCK) {
- level++;
- }
- iseq = iseq->body->parent_iseq;
- }
+ if (ISEQ_BODY(orig_iseq)->parent_iseq != 0) {
+ while (ISEQ_BODY(orig_iseq)->local_iseq != iseq) {
+ if (ISEQ_BODY(iseq)->type == ISEQ_TYPE_BLOCK) {
+ level++;
+ }
+ iseq = ISEQ_BODY(iseq)->parent_iseq;
+ }
}
if (level == 1) {
- return rb_sprintf("block in %"PRIsVALUE, iseq->body->location.label);
+ return rb_sprintf("block in %"PRIsVALUE, ISEQ_BODY(iseq)->location.label);
}
else {
- return rb_sprintf("block (%d levels) in %"PRIsVALUE, level, iseq->body->location.label);
+ return rb_sprintf("block (%d levels) in %"PRIsVALUE, level, ISEQ_BODY(iseq)->location.label);
}
}
static void
push_ensure_entry(rb_iseq_t *iseq,
- struct iseq_compile_data_ensure_node_stack *enl,
- struct ensure_range *er, NODE *node)
+ struct iseq_compile_data_ensure_node_stack *enl,
+ struct ensure_range *er, const void *const node)
{
enl->ensure_node = node;
enl->prev = ISEQ_COMPILE_DATA(iseq)->ensure_node_stack; /* prev */
@@ -3503,13 +6454,13 @@ push_ensure_entry(rb_iseq_t *iseq,
static void
add_ensure_range(rb_iseq_t *iseq, struct ensure_range *erange,
- LABEL *lstart, LABEL *lend)
+ LABEL *lstart, LABEL *lend)
{
struct ensure_range *ne =
- compile_data_alloc(iseq, sizeof(struct ensure_range));
+ compile_data_alloc(iseq, sizeof(struct ensure_range));
while (erange->next != 0) {
- erange = erange->next;
+ erange = erange->next;
}
ne->next = 0;
ne->begin = lend;
@@ -3519,2471 +6470,5127 @@ add_ensure_range(rb_iseq_t *iseq, struct ensure_range *erange,
erange->next = ne;
}
+static bool
+can_add_ensure_iseq(const rb_iseq_t *iseq)
+{
+ struct iseq_compile_data_ensure_node_stack *e;
+ if (ISEQ_COMPILE_DATA(iseq)->in_rescue && (e = ISEQ_COMPILE_DATA(iseq)->ensure_node_stack) != NULL) {
+ while (e) {
+ if (e->ensure_node) return false;
+ e = e->prev;
+ }
+ }
+ return true;
+}
+
static void
-add_ensure_iseq(LINK_ANCHOR *ret, rb_iseq_t *iseq, int is_return)
+add_ensure_iseq(LINK_ANCHOR *const ret, rb_iseq_t *iseq, int is_return)
{
+ RUBY_ASSERT(can_add_ensure_iseq(iseq));
+
struct iseq_compile_data_ensure_node_stack *enlp =
- ISEQ_COMPILE_DATA(iseq)->ensure_node_stack;
+ ISEQ_COMPILE_DATA(iseq)->ensure_node_stack;
struct iseq_compile_data_ensure_node_stack *prev_enlp = enlp;
DECL_ANCHOR(ensure);
INIT_ANCHOR(ensure);
while (enlp) {
- if (enlp->erange != 0) {
- DECL_ANCHOR(ensure_part);
- LABEL *lstart = NEW_LABEL(0);
- LABEL *lend = NEW_LABEL(0);
- INIT_ANCHOR(ensure_part);
-
- add_ensure_range(iseq, enlp->erange, lstart, lend);
-
- ISEQ_COMPILE_DATA(iseq)->ensure_node_stack = enlp->prev;
- ADD_LABEL(ensure_part, lstart);
- COMPILE_POPED(ensure_part, "ensure part", enlp->ensure_node);
- ADD_LABEL(ensure_part, lend);
- ADD_SEQ(ensure, ensure_part);
- }
- else {
- if (!is_return) {
- break;
- }
- }
- enlp = enlp->prev;
+ if (enlp->erange != NULL) {
+ DECL_ANCHOR(ensure_part);
+ LABEL *lstart = NEW_LABEL(0);
+ LABEL *lend = NEW_LABEL(0);
+ INIT_ANCHOR(ensure_part);
+
+ add_ensure_range(iseq, enlp->erange, lstart, lend);
+
+ ISEQ_COMPILE_DATA(iseq)->ensure_node_stack = enlp->prev;
+ ADD_LABEL(ensure_part, lstart);
+ NO_CHECK(COMPILE_POPPED(ensure_part, "ensure part", enlp->ensure_node));
+ ADD_LABEL(ensure_part, lend);
+ ADD_SEQ(ensure, ensure_part);
+ }
+ else {
+ if (!is_return) {
+ break;
+ }
+ }
+ enlp = enlp->prev;
}
ISEQ_COMPILE_DATA(iseq)->ensure_node_stack = prev_enlp;
ADD_SEQ(ret, ensure);
}
-static VALUE
-setup_args(rb_iseq_t *iseq, LINK_ANCHOR *args, NODE *argn, unsigned int *flag, struct rb_call_info_kw_arg **keywords)
+#if RUBY_DEBUG
+static int
+check_keyword(const NODE *node)
{
- VALUE argc = INT2FIX(0);
- int nsplat = 0;
- DECL_ANCHOR(arg_block);
- DECL_ANCHOR(args_splat);
+ /* This check is essentially a code clone of compile_keyword_arg. */
- INIT_ANCHOR(arg_block);
- INIT_ANCHOR(args_splat);
- if (argn && nd_type(argn) == NODE_BLOCK_PASS) {
- COMPILE(arg_block, "block", argn->nd_body);
- *flag |= VM_CALL_ARGS_BLOCKARG;
- argn = argn->nd_head;
+ if (nd_type_p(node, NODE_LIST)) {
+ while (RNODE_LIST(node)->nd_next) {
+ node = RNODE_LIST(node)->nd_next;
+ }
+ node = RNODE_LIST(node)->nd_head;
}
- setup_argn:
- if (argn) {
- switch (nd_type(argn)) {
- case NODE_SPLAT: {
- COMPILE(args, "args (splat)", argn->nd_head);
- ADD_INSN1(args, nd_line(argn), splatarray, Qfalse);
- argc = INT2FIX(1);
- nsplat++;
- *flag |= VM_CALL_ARGS_SPLAT;
- break;
- }
- case NODE_ARGSCAT:
- case NODE_ARGSPUSH: {
- int next_is_array = (nd_type(argn->nd_head) == NODE_ARRAY);
- DECL_ANCHOR(tmp);
-
- INIT_ANCHOR(tmp);
- COMPILE(tmp, "args (cat: splat)", argn->nd_body);
- if (nd_type(argn) == NODE_ARGSCAT) {
- ADD_INSN1(tmp, nd_line(argn), splatarray, Qfalse);
- }
- else {
- ADD_INSN1(tmp, nd_line(argn), newarray, INT2FIX(1));
- }
- INSERT_LIST(args_splat, tmp);
- nsplat++;
- *flag |= VM_CALL_ARGS_SPLAT;
-
- if (next_is_array) {
- argc = INT2FIX(compile_array(iseq, args, argn->nd_head, COMPILE_ARRAY_TYPE_ARGS) + 1);
- }
- else {
- argn = argn->nd_head;
- goto setup_argn;
- }
- break;
- }
- case NODE_ARRAY:
- {
- argc = INT2FIX(compile_array_(iseq, args, argn, COMPILE_ARRAY_TYPE_ARGS, keywords, FALSE));
- break;
- }
- default: {
- UNKNOWN_NODE("setup_arg", argn);
- }
- }
- }
-
- if (nsplat > 1) {
- int i;
- for (i=1; i<nsplat; i++) {
- ADD_INSN(args_splat, nd_line(args), concatarray);
- }
- }
-
- if (!LIST_SIZE_ZERO(args_splat)) {
- ADD_SEQ(args, args_splat);
- }
-
- if (*flag & VM_CALL_ARGS_BLOCKARG) {
- ADD_SEQ(args, arg_block);
- }
- return argc;
+ return keyword_node_p(node);
+}
+#endif
+
+static bool
+keyword_node_single_splat_p(NODE *kwnode)
+{
+ RUBY_ASSERT(keyword_node_p(kwnode));
+
+ NODE *node = RNODE_HASH(kwnode)->nd_head;
+ return RNODE_LIST(node)->nd_head == NULL &&
+ RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_next == NULL;
+}
+
+static void
+compile_single_keyword_splat_mutable(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn,
+ NODE *kwnode, unsigned int *flag_ptr)
+{
+ *flag_ptr |= VM_CALL_KW_SPLAT_MUT;
+ ADD_INSN1(args, argn, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(args, argn, newhash, INT2FIX(0));
+ compile_hash(iseq, args, kwnode, TRUE, FALSE);
+ ADD_SEND(args, argn, id_core_hash_merge_kwd, INT2FIX(2));
+}
+
+#define SPLATARRAY_FALSE 0
+#define SPLATARRAY_TRUE 1
+#define DUP_SINGLE_KW_SPLAT 2
+
+static int
+setup_args_core(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn,
+ unsigned int *dup_rest, unsigned int *flag_ptr, struct rb_callinfo_kwarg **kwarg_ptr)
+{
+ if (!argn) return 0;
+
+ NODE *kwnode = NULL;
+
+ switch (nd_type(argn)) {
+ case NODE_LIST: {
+ // f(x, y, z)
+ int len = compile_args(iseq, args, argn, &kwnode);
+ RUBY_ASSERT(flag_ptr == NULL || (*flag_ptr & VM_CALL_ARGS_SPLAT) == 0);
+
+ if (kwnode) {
+ if (compile_keyword_arg(iseq, args, kwnode, kwarg_ptr, flag_ptr)) {
+ len -= 1;
+ }
+ else {
+ if (keyword_node_single_splat_p(kwnode) && (*dup_rest & DUP_SINGLE_KW_SPLAT)) {
+ compile_single_keyword_splat_mutable(iseq, args, argn, kwnode, flag_ptr);
+ }
+ else {
+ compile_hash(iseq, args, kwnode, TRUE, FALSE);
+ }
+ }
+ }
+
+ return len;
+ }
+ case NODE_SPLAT: {
+ // f(*a)
+ NO_CHECK(COMPILE(args, "args (splat)", RNODE_SPLAT(argn)->nd_head));
+ ADD_INSN1(args, argn, splatarray, RBOOL(*dup_rest & SPLATARRAY_TRUE));
+ if (*dup_rest & SPLATARRAY_TRUE) *dup_rest &= ~SPLATARRAY_TRUE;
+ if (flag_ptr) *flag_ptr |= VM_CALL_ARGS_SPLAT;
+ RUBY_ASSERT(flag_ptr == NULL || (*flag_ptr & VM_CALL_KW_SPLAT) == 0);
+ return 1;
+ }
+ case NODE_ARGSCAT: {
+ if (flag_ptr) *flag_ptr |= VM_CALL_ARGS_SPLAT;
+ int argc = setup_args_core(iseq, args, RNODE_ARGSCAT(argn)->nd_head, dup_rest, NULL, NULL);
+ bool args_pushed = false;
+
+ if (nd_type_p(RNODE_ARGSCAT(argn)->nd_body, NODE_LIST)) {
+ int rest_len = compile_args(iseq, args, RNODE_ARGSCAT(argn)->nd_body, &kwnode);
+ if (kwnode) rest_len--;
+ ADD_INSN1(args, argn, pushtoarray, INT2FIX(rest_len));
+ args_pushed = true;
+ }
+ else {
+ RUBY_ASSERT(!check_keyword(RNODE_ARGSCAT(argn)->nd_body));
+ NO_CHECK(COMPILE(args, "args (cat: splat)", RNODE_ARGSCAT(argn)->nd_body));
+ }
+
+ if (nd_type_p(RNODE_ARGSCAT(argn)->nd_head, NODE_LIST)) {
+ ADD_INSN1(args, argn, splatarray, RBOOL(*dup_rest & SPLATARRAY_TRUE));
+ if (*dup_rest & SPLATARRAY_TRUE) *dup_rest &= ~SPLATARRAY_TRUE;
+ argc += 1;
+ }
+ else if (!args_pushed) {
+ ADD_INSN(args, argn, concattoarray);
+ }
+
+ // f(..., *a, ..., k1:1, ...) #=> f(..., *[*a, ...], **{k1:1, ...})
+ if (kwnode) {
+ // kwsplat
+ *flag_ptr |= VM_CALL_KW_SPLAT;
+ compile_hash(iseq, args, kwnode, TRUE, FALSE);
+ argc += 1;
+ }
+
+ return argc;
+ }
+ case NODE_ARGSPUSH: {
+ if (flag_ptr) *flag_ptr |= VM_CALL_ARGS_SPLAT;
+ int argc = setup_args_core(iseq, args, RNODE_ARGSPUSH(argn)->nd_head, dup_rest, NULL, NULL);
+
+ if (nd_type_p(RNODE_ARGSPUSH(argn)->nd_body, NODE_LIST)) {
+ int rest_len = compile_args(iseq, args, RNODE_ARGSPUSH(argn)->nd_body, &kwnode);
+ if (kwnode) rest_len--;
+ ADD_INSN1(args, argn, newarray, INT2FIX(rest_len));
+ ADD_INSN1(args, argn, pushtoarray, INT2FIX(1));
+ }
+ else {
+ if (keyword_node_p(RNODE_ARGSPUSH(argn)->nd_body)) {
+ kwnode = RNODE_ARGSPUSH(argn)->nd_body;
+ }
+ else {
+ NO_CHECK(COMPILE(args, "args (cat: splat)", RNODE_ARGSPUSH(argn)->nd_body));
+ ADD_INSN1(args, argn, pushtoarray, INT2FIX(1));
+ }
+ }
+
+ if (kwnode) {
+ // f(*a, k:1)
+ *flag_ptr |= VM_CALL_KW_SPLAT;
+ if (!keyword_node_single_splat_p(kwnode)) {
+ *flag_ptr |= VM_CALL_KW_SPLAT_MUT;
+ compile_hash(iseq, args, kwnode, TRUE, FALSE);
+ }
+ else if (*dup_rest & DUP_SINGLE_KW_SPLAT) {
+ compile_single_keyword_splat_mutable(iseq, args, argn, kwnode, flag_ptr);
+ }
+ else {
+ compile_hash(iseq, args, kwnode, TRUE, FALSE);
+ }
+ argc += 1;
+ }
+
+ return argc;
+ }
+ default: {
+ UNKNOWN_NODE("setup_arg", argn, Qnil);
+ }
+ }
+}
+
+static void
+setup_args_splat_mut(unsigned int *flag, int dup_rest, int initial_dup_rest)
+{
+ if ((*flag & VM_CALL_ARGS_SPLAT) && dup_rest != initial_dup_rest) {
+ *flag |= VM_CALL_ARGS_SPLAT_MUT;
+ }
+}
+
+static bool
+setup_args_dup_rest_p(const NODE *argn)
+{
+ switch(nd_type(argn)) {
+ case NODE_LVAR:
+ case NODE_DVAR:
+ case NODE_GVAR:
+ case NODE_IVAR:
+ case NODE_CVAR:
+ case NODE_CONST:
+ case NODE_COLON3:
+ case NODE_INTEGER:
+ case NODE_FLOAT:
+ case NODE_RATIONAL:
+ case NODE_IMAGINARY:
+ case NODE_STR:
+ case NODE_SYM:
+ case NODE_REGX:
+ case NODE_SELF:
+ case NODE_NIL:
+ case NODE_TRUE:
+ case NODE_FALSE:
+ case NODE_LAMBDA:
+ case NODE_NTH_REF:
+ case NODE_BACK_REF:
+ return false;
+ case NODE_COLON2:
+ return setup_args_dup_rest_p(RNODE_COLON2(argn)->nd_head);
+ case NODE_LIST:
+ while (argn) {
+ if (setup_args_dup_rest_p(RNODE_LIST(argn)->nd_head)) {
+ return true;
+ }
+ argn = RNODE_LIST(argn)->nd_next;
+ }
+ return false;
+ default:
+ return true;
+ }
}
static VALUE
-build_postexe_iseq(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *body)
+setup_args(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn,
+ unsigned int *flag, struct rb_callinfo_kwarg **keywords)
+{
+ VALUE ret;
+ unsigned int dup_rest = SPLATARRAY_TRUE, initial_dup_rest;
+
+ if (argn) {
+ const NODE *check_arg = nd_type_p(argn, NODE_BLOCK_PASS) ?
+ RNODE_BLOCK_PASS(argn)->nd_head : argn;
+
+ if (check_arg) {
+ switch(nd_type(check_arg)) {
+ case(NODE_SPLAT):
+ // avoid caller side array allocation for f(*arg)
+ dup_rest = SPLATARRAY_FALSE;
+ break;
+ case(NODE_ARGSCAT):
+ // avoid caller side array allocation for f(1, *arg)
+ dup_rest = !nd_type_p(RNODE_ARGSCAT(check_arg)->nd_head, NODE_LIST);
+ break;
+ case(NODE_ARGSPUSH):
+ // avoid caller side array allocation for f(*arg, **hash) and f(1, *arg, **hash)
+ dup_rest = !((nd_type_p(RNODE_ARGSPUSH(check_arg)->nd_head, NODE_SPLAT) ||
+ (nd_type_p(RNODE_ARGSPUSH(check_arg)->nd_head, NODE_ARGSCAT) &&
+ nd_type_p(RNODE_ARGSCAT(RNODE_ARGSPUSH(check_arg)->nd_head)->nd_head, NODE_LIST))) &&
+ nd_type_p(RNODE_ARGSPUSH(check_arg)->nd_body, NODE_HASH) &&
+ !RNODE_HASH(RNODE_ARGSPUSH(check_arg)->nd_body)->nd_brace);
+
+ if (dup_rest == SPLATARRAY_FALSE) {
+ // require allocation for keyword key/value/splat that may modify splatted argument
+ NODE *node = RNODE_HASH(RNODE_ARGSPUSH(check_arg)->nd_body)->nd_head;
+ while (node) {
+ NODE *key_node = RNODE_LIST(node)->nd_head;
+ if (key_node && setup_args_dup_rest_p(key_node)) {
+ dup_rest = SPLATARRAY_TRUE;
+ break;
+ }
+
+ node = RNODE_LIST(node)->nd_next;
+ NODE *value_node = RNODE_LIST(node)->nd_head;
+ if (setup_args_dup_rest_p(value_node)) {
+ dup_rest = SPLATARRAY_TRUE;
+ break;
+ }
+
+ node = RNODE_LIST(node)->nd_next;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (check_arg != argn && setup_args_dup_rest_p(RNODE_BLOCK_PASS(argn)->nd_body)) {
+ // for block pass that may modify splatted argument, dup rest and kwrest if given
+ dup_rest = SPLATARRAY_TRUE | DUP_SINGLE_KW_SPLAT;
+ }
+ }
+ initial_dup_rest = dup_rest;
+
+ if (argn && nd_type_p(argn, NODE_BLOCK_PASS)) {
+ DECL_ANCHOR(arg_block);
+ INIT_ANCHOR(arg_block);
+
+ if (RNODE_BLOCK_PASS(argn)->forwarding && ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq)->param.flags.forwardable) {
+ int idx = ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq)->local_table_size;// - get_local_var_idx(iseq, idDot3);
+
+ RUBY_ASSERT(nd_type_p(RNODE_BLOCK_PASS(argn)->nd_head, NODE_ARGSPUSH));
+ const NODE * arg_node =
+ RNODE_ARGSPUSH(RNODE_BLOCK_PASS(argn)->nd_head)->nd_head;
+
+ int argc = 0;
+
+ // Only compile leading args:
+ // foo(x, y, ...)
+ // ^^^^
+ if (nd_type_p(arg_node, NODE_ARGSCAT)) {
+ argc += setup_args_core(iseq, args, RNODE_ARGSCAT(arg_node)->nd_head, &dup_rest, flag, keywords);
+ }
+
+ *flag |= VM_CALL_FORWARDING;
+
+ ADD_GETLOCAL(args, argn, idx, get_lvar_level(iseq));
+ setup_args_splat_mut(flag, dup_rest, initial_dup_rest);
+ return INT2FIX(argc);
+ }
+ else {
+ *flag |= VM_CALL_ARGS_BLOCKARG;
+
+ NO_CHECK(COMPILE(arg_block, "block", RNODE_BLOCK_PASS(argn)->nd_body));
+ }
+
+ if (LIST_INSN_SIZE_ONE(arg_block)) {
+ LINK_ELEMENT *elem = FIRST_ELEMENT(arg_block);
+ if (IS_INSN(elem)) {
+ INSN *iobj = (INSN *)elem;
+ if (iobj->insn_id == BIN(getblockparam)) {
+ iobj->insn_id = BIN(getblockparamproxy);
+ }
+ }
+ }
+ ret = INT2FIX(setup_args_core(iseq, args, RNODE_BLOCK_PASS(argn)->nd_head, &dup_rest, flag, keywords));
+ ADD_SEQ(args, arg_block);
+ }
+ else {
+ ret = INT2FIX(setup_args_core(iseq, args, argn, &dup_rest, flag, keywords));
+ }
+ setup_args_splat_mut(flag, dup_rest, initial_dup_rest);
+ return ret;
+}
+
+static void
+build_postexe_iseq(rb_iseq_t *iseq, LINK_ANCHOR *ret, const void *ptr)
{
+ const NODE *body = ptr;
int line = nd_line(body);
VALUE argc = INT2FIX(0);
- const rb_iseq_t *block = NEW_CHILD_ISEQ(body, make_name_for_block(iseq->body->parent_iseq), ISEQ_TYPE_BLOCK, line);
+ const rb_iseq_t *block = NEW_CHILD_ISEQ(body, make_name_for_block(ISEQ_BODY(iseq)->parent_iseq), ISEQ_TYPE_BLOCK, line);
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
- ADD_CALL_WITH_BLOCK(ret, line, id_core_set_postexe, argc, block);
- iseq_set_local_table(iseq, 0);
- return Qnil;
+ ADD_INSN1(ret, body, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_CALL_WITH_BLOCK(ret, body, id_core_set_postexe, argc, block);
+ RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)block);
+ iseq_set_local_table(iseq, 0, 0);
}
-/**
- compile each node
+static void
+compile_named_capture_assign(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node)
+{
+ const NODE *vars;
+ LINK_ELEMENT *last;
+ int line = nd_line(node);
+ const NODE *line_node = node;
+ LABEL *fail_label = NEW_LABEL(line), *end_label = NEW_LABEL(line);
+
+#if !(defined(NAMED_CAPTURE_BY_SVAR) && NAMED_CAPTURE_BY_SVAR-0)
+ ADD_INSN1(ret, line_node, getglobal, ID2SYM(idBACKREF));
+#else
+ ADD_INSN2(ret, line_node, getspecial, INT2FIX(1) /* '~' */, INT2FIX(0));
+#endif
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSNL(ret, line_node, branchunless, fail_label);
+
+ for (vars = node; vars; vars = RNODE_BLOCK(vars)->nd_next) {
+ INSN *cap;
+ if (RNODE_BLOCK(vars)->nd_next) {
+ ADD_INSN(ret, line_node, dup);
+ }
+ last = ret->last;
+ NO_CHECK(COMPILE_POPPED(ret, "capture", RNODE_BLOCK(vars)->nd_head));
+ last = last->next; /* putobject :var */
+ cap = new_insn_send(iseq, nd_line(line_node), nd_node_id(line_node), idAREF, INT2FIX(1),
+ NULL, INT2FIX(0), NULL);
+ ELEM_INSERT_PREV(last->next, (LINK_ELEMENT *)cap);
+#if !defined(NAMED_CAPTURE_SINGLE_OPT) || NAMED_CAPTURE_SINGLE_OPT-0
+ if (!RNODE_BLOCK(vars)->nd_next && vars == node) {
+ /* only one name */
+ DECL_ANCHOR(nom);
+
+ INIT_ANCHOR(nom);
+ ADD_INSNL(nom, line_node, jump, end_label);
+ ADD_LABEL(nom, fail_label);
+# if 0 /* $~ must be MatchData or nil */
+ ADD_INSN(nom, line_node, pop);
+ ADD_INSN(nom, line_node, putnil);
+# endif
+ ADD_LABEL(nom, end_label);
+ (nom->last->next = cap->link.next)->prev = nom->last;
+ (cap->link.next = nom->anchor.next)->prev = &cap->link;
+ return;
+ }
+#endif
+ }
+ ADD_INSNL(ret, line_node, jump, end_label);
+ ADD_LABEL(ret, fail_label);
+ ADD_INSN(ret, line_node, pop);
+ for (vars = node; vars; vars = RNODE_BLOCK(vars)->nd_next) {
+ last = ret->last;
+ NO_CHECK(COMPILE_POPPED(ret, "capture", RNODE_BLOCK(vars)->nd_head));
+ last = last->next; /* putobject :var */
+ ((INSN*)last)->insn_id = BIN(putnil);
+ ((INSN*)last)->operand_size = 0;
+ }
+ ADD_LABEL(ret, end_label);
+}
- self: InstructionSequence
- node: Ruby compiled node
- poped: This node will be poped
- */
static int
-iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
+optimizable_range_item_p(const NODE *n)
+{
+ if (!n) return FALSE;
+ switch (nd_type(n)) {
+ case NODE_LINE:
+ return TRUE;
+ case NODE_INTEGER:
+ return TRUE;
+ case NODE_NIL:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+static VALUE
+optimized_range_item(const NODE *n)
+{
+ switch (nd_type(n)) {
+ case NODE_LINE:
+ return rb_node_line_lineno_val(n);
+ case NODE_INTEGER:
+ return rb_node_integer_literal_val(n);
+ case NODE_FLOAT:
+ return rb_node_float_literal_val(n);
+ case NODE_RATIONAL:
+ return rb_node_rational_literal_val(n);
+ case NODE_IMAGINARY:
+ return rb_node_imaginary_literal_val(n);
+ case NODE_NIL:
+ return Qnil;
+ default:
+ rb_bug("unexpected node: %s", ruby_node_name(nd_type(n)));
+ }
+}
+
+static int
+compile_if(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped, const enum node_type type)
{
- enum node_type type;
- LINK_ELEMENT *saved_last_element = 0;
- int line;
+ const NODE *const node_body = type == NODE_IF ? RNODE_IF(node)->nd_body : RNODE_UNLESS(node)->nd_else;
+ const NODE *const node_else = type == NODE_IF ? RNODE_IF(node)->nd_else : RNODE_UNLESS(node)->nd_body;
- if (node == 0) {
- if (!poped) {
- debugs("node: NODE_NIL(implicit)\n");
- ADD_INSN(ret, ISEQ_COMPILE_DATA(iseq)->last_line, putnil);
- }
- return COMPILE_OK;
+ const int line = nd_line(node);
+ const NODE *line_node = node;
+ DECL_ANCHOR(cond_seq);
+ LABEL *then_label, *else_label, *end_label;
+ VALUE branches = Qfalse;
+
+ INIT_ANCHOR(cond_seq);
+ then_label = NEW_LABEL(line);
+ else_label = NEW_LABEL(line);
+ end_label = 0;
+
+ NODE *cond = RNODE_IF(node)->nd_cond;
+ if (nd_type(cond) == NODE_BLOCK) {
+ cond = RNODE_BLOCK(cond)->nd_head;
}
- line = (int)nd_line(node);
+ CHECK(compile_branch_condition(iseq, cond_seq, cond, then_label, else_label));
+ ADD_SEQ(ret, cond_seq);
- if (ISEQ_COMPILE_DATA(iseq)->last_line == line) {
- /* ignore */
+ if (then_label->refcnt && else_label->refcnt) {
+ branches = decl_branch_base(iseq, PTR2NUM(node), nd_code_loc(node), type == NODE_IF ? "if" : "unless");
}
- else {
- if (node->flags & NODE_FL_NEWLINE) {
- ISEQ_COMPILE_DATA(iseq)->last_line = line;
- ADD_TRACE(ret, line, RUBY_EVENT_LINE);
- saved_last_element = ret->last;
- }
+
+ if (then_label->refcnt) {
+ ADD_LABEL(ret, then_label);
+
+ DECL_ANCHOR(then_seq);
+ INIT_ANCHOR(then_seq);
+ CHECK(COMPILE_(then_seq, "then", node_body, popped));
+
+ if (else_label->refcnt) {
+ const NODE *const coverage_node = node_body ? node_body : node;
+ add_trace_branch_coverage(
+ iseq,
+ ret,
+ nd_code_loc(coverage_node),
+ nd_node_id(coverage_node),
+ 0,
+ type == NODE_IF ? "then" : "else",
+ branches);
+ end_label = NEW_LABEL(line);
+ ADD_INSNL(then_seq, line_node, jump, end_label);
+ if (!popped) {
+ ADD_INSN(then_seq, line_node, pop);
+ }
+ }
+ ADD_SEQ(ret, then_seq);
}
- debug_node_start(node);
+ if (else_label->refcnt) {
+ ADD_LABEL(ret, else_label);
- type = nd_type(node);
+ DECL_ANCHOR(else_seq);
+ INIT_ANCHOR(else_seq);
+ CHECK(COMPILE_(else_seq, "else", node_else, popped));
- switch (type) {
- case NODE_BLOCK:{
- while (node && nd_type(node) == NODE_BLOCK) {
- COMPILE_(ret, "BLOCK body", node->nd_head,
- (node->nd_next == 0 && poped == 0) ? 0 : 1);
- node = node->nd_next;
- }
- if (node) {
- COMPILE_(ret, "BLOCK next", node->nd_next, poped);
- }
- break;
- }
- case NODE_IF:{
- DECL_ANCHOR(cond_seq);
- DECL_ANCHOR(then_seq);
- DECL_ANCHOR(else_seq);
- LABEL *then_label, *else_label, *end_label;
+ if (then_label->refcnt) {
+ const NODE *const coverage_node = node_else ? node_else : node;
+ add_trace_branch_coverage(
+ iseq,
+ ret,
+ nd_code_loc(coverage_node),
+ nd_node_id(coverage_node),
+ 1,
+ type == NODE_IF ? "else" : "then",
+ branches);
+ }
+ ADD_SEQ(ret, else_seq);
+ }
- INIT_ANCHOR(cond_seq);
- INIT_ANCHOR(then_seq);
- INIT_ANCHOR(else_seq);
- then_label = NEW_LABEL(line);
- else_label = NEW_LABEL(line);
- end_label = NEW_LABEL(line);
+ if (end_label) {
+ ADD_LABEL(ret, end_label);
+ }
- compile_branch_condition(iseq, cond_seq, node->nd_cond,
- then_label, else_label);
- COMPILE_(then_seq, "then", node->nd_body, poped);
- COMPILE_(else_seq, "else", node->nd_else, poped);
+ return COMPILE_OK;
+}
- ADD_SEQ(ret, cond_seq);
+static int
+compile_case(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_node, int popped)
+{
+ const NODE *vals;
+ const NODE *node = orig_node;
+ LABEL *endlabel, *elselabel;
+ DECL_ANCHOR(head);
+ DECL_ANCHOR(body_seq);
+ DECL_ANCHOR(cond_seq);
+ int only_special_literals = 1;
+ VALUE literals = rb_hash_new();
+ int line;
+ enum node_type type;
+ const NODE *line_node;
+ VALUE branches = Qfalse;
+ int branch_id = 0;
- ADD_LABEL(ret, then_label);
- ADD_SEQ(ret, then_seq);
- ADD_INSNL(ret, line, jump, end_label);
+ INIT_ANCHOR(head);
+ INIT_ANCHOR(body_seq);
+ INIT_ANCHOR(cond_seq);
- ADD_LABEL(ret, else_label);
- ADD_SEQ(ret, else_seq);
+ RHASH_TBL_RAW(literals)->type = &cdhash_type;
- ADD_LABEL(ret, end_label);
+ CHECK(COMPILE(head, "case base", RNODE_CASE(node)->nd_head));
+
+ branches = decl_branch_base(iseq, PTR2NUM(node), nd_code_loc(node), "case");
+
+ node = RNODE_CASE(node)->nd_body;
+ EXPECT_NODE("NODE_CASE", node, NODE_WHEN, COMPILE_NG);
+ type = nd_type(node);
+ line = nd_line(node);
+ line_node = node;
+
+ endlabel = NEW_LABEL(line);
+ elselabel = NEW_LABEL(line);
+
+ ADD_SEQ(ret, head); /* case VAL */
+
+ while (type == NODE_WHEN) {
+ LABEL *l1;
+
+ l1 = NEW_LABEL(line);
+ ADD_LABEL(body_seq, l1);
+ ADD_INSN(body_seq, line_node, pop);
+
+ const NODE *const coverage_node = RNODE_WHEN(node)->nd_body ? RNODE_WHEN(node)->nd_body : node;
+ add_trace_branch_coverage(
+ iseq,
+ body_seq,
+ nd_code_loc(coverage_node),
+ nd_node_id(coverage_node),
+ branch_id++,
+ "when",
+ branches);
+
+ CHECK(COMPILE_(body_seq, "when body", RNODE_WHEN(node)->nd_body, popped));
+ ADD_INSNL(body_seq, line_node, jump, endlabel);
+
+ vals = RNODE_WHEN(node)->nd_head;
+ if (vals) {
+ switch (nd_type(vals)) {
+ case NODE_LIST:
+ only_special_literals = when_vals(iseq, cond_seq, vals, l1, only_special_literals, literals);
+ if (only_special_literals < 0) return COMPILE_NG;
+ break;
+ case NODE_SPLAT:
+ case NODE_ARGSCAT:
+ case NODE_ARGSPUSH:
+ only_special_literals = 0;
+ CHECK(when_splat_vals(iseq, cond_seq, vals, l1, only_special_literals, literals));
+ break;
+ default:
+ UNKNOWN_NODE("NODE_CASE", vals, COMPILE_NG);
+ }
+ }
+ else {
+ EXPECT_NODE_NONULL("NODE_CASE", node, NODE_LIST, COMPILE_NG);
+ }
+
+ node = RNODE_WHEN(node)->nd_next;
+ if (!node) {
+ break;
+ }
+ type = nd_type(node);
+ line = nd_line(node);
+ line_node = node;
+ }
+ /* else */
+ if (node) {
+ ADD_LABEL(cond_seq, elselabel);
+ ADD_INSN(cond_seq, line_node, pop);
+ add_trace_branch_coverage(iseq, cond_seq, nd_code_loc(node), nd_node_id(node), branch_id, "else", branches);
+ CHECK(COMPILE_(cond_seq, "else", node, popped));
+ ADD_INSNL(cond_seq, line_node, jump, endlabel);
+ }
+ else {
+ debugs("== else (implicit)\n");
+ ADD_LABEL(cond_seq, elselabel);
+ ADD_INSN(cond_seq, orig_node, pop);
+ add_trace_branch_coverage(iseq, cond_seq, nd_code_loc(orig_node), nd_node_id(orig_node), branch_id, "else", branches);
+ if (!popped) {
+ ADD_INSN(cond_seq, orig_node, putnil);
+ }
+ ADD_INSNL(cond_seq, orig_node, jump, endlabel);
+ }
+
+ if (only_special_literals && ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction) {
+ ADD_INSN(ret, orig_node, dup);
+ rb_obj_hide(literals);
+ ADD_INSN2(ret, orig_node, opt_case_dispatch, literals, elselabel);
+ RB_OBJ_WRITTEN(iseq, Qundef, literals);
+ LABEL_REF(elselabel);
+ }
+
+ ADD_SEQ(ret, cond_seq);
+ ADD_SEQ(ret, body_seq);
+ ADD_LABEL(ret, endlabel);
+ return COMPILE_OK;
+}
+
+static int
+compile_case2(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_node, int popped)
+{
+ const NODE *vals;
+ const NODE *val;
+ const NODE *node = RNODE_CASE2(orig_node)->nd_body;
+ LABEL *endlabel;
+ DECL_ANCHOR(body_seq);
+ VALUE branches = Qfalse;
+ int branch_id = 0;
+
+ branches = decl_branch_base(iseq, PTR2NUM(orig_node), nd_code_loc(orig_node), "case");
+
+ INIT_ANCHOR(body_seq);
+ endlabel = NEW_LABEL(nd_line(node));
+
+ while (node && nd_type_p(node, NODE_WHEN)) {
+ const int line = nd_line(node);
+ LABEL *l1 = NEW_LABEL(line);
+ ADD_LABEL(body_seq, l1);
+
+ const NODE *const coverage_node = RNODE_WHEN(node)->nd_body ? RNODE_WHEN(node)->nd_body : node;
+ add_trace_branch_coverage(
+ iseq,
+ body_seq,
+ nd_code_loc(coverage_node),
+ nd_node_id(coverage_node),
+ branch_id++,
+ "when",
+ branches);
+
+ CHECK(COMPILE_(body_seq, "when", RNODE_WHEN(node)->nd_body, popped));
+ ADD_INSNL(body_seq, node, jump, endlabel);
+
+ vals = RNODE_WHEN(node)->nd_head;
+ if (!vals) {
+ EXPECT_NODE_NONULL("NODE_WHEN", node, NODE_LIST, COMPILE_NG);
+ }
+ switch (nd_type(vals)) {
+ case NODE_LIST:
+ while (vals) {
+ LABEL *lnext;
+ val = RNODE_LIST(vals)->nd_head;
+ lnext = NEW_LABEL(nd_line(val));
+ debug_compile("== when2\n", (void)0);
+ CHECK(compile_branch_condition(iseq, ret, val, l1, lnext));
+ ADD_LABEL(ret, lnext);
+ vals = RNODE_LIST(vals)->nd_next;
+ }
+ break;
+ case NODE_SPLAT:
+ case NODE_ARGSCAT:
+ case NODE_ARGSPUSH:
+ ADD_INSN(ret, vals, putnil);
+ CHECK(COMPILE(ret, "when2/cond splat", vals));
+ ADD_INSN1(ret, vals, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_WHEN | VM_CHECKMATCH_ARRAY));
+ ADD_INSNL(ret, vals, branchif, l1);
+ break;
+ default:
+ UNKNOWN_NODE("NODE_WHEN", vals, COMPILE_NG);
+ }
+ node = RNODE_WHEN(node)->nd_next;
+ }
+ /* else */
+ const NODE *const coverage_node = node ? node : orig_node;
+ add_trace_branch_coverage(
+ iseq,
+ ret,
+ nd_code_loc(coverage_node),
+ nd_node_id(coverage_node),
+ branch_id,
+ "else",
+ branches);
+ CHECK(COMPILE_(ret, "else", node, popped));
+ ADD_INSNL(ret, orig_node, jump, endlabel);
+
+ ADD_SEQ(ret, body_seq);
+ ADD_LABEL(ret, endlabel);
+ return COMPILE_OK;
+}
+
+static int iseq_compile_pattern_match(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, LABEL *unmatched, bool in_single_pattern, bool in_alt_pattern, int base_index, bool use_deconstructed_cache);
+
+static int iseq_compile_pattern_constant(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, LABEL *match_failed, bool in_single_pattern, int base_index);
+static int iseq_compile_array_deconstruct(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, LABEL *deconstruct, LABEL *deconstructed, LABEL *match_failed, LABEL *type_error, bool in_single_pattern, int base_index, bool use_deconstructed_cache);
+static int iseq_compile_pattern_set_general_errmsg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE errmsg, int base_index);
+static int iseq_compile_pattern_set_length_errmsg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE errmsg, VALUE pattern_length, int base_index);
+static int iseq_compile_pattern_set_eqq_errmsg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int base_index);
+
+#define CASE3_BI_OFFSET_DECONSTRUCTED_CACHE 0
+#define CASE3_BI_OFFSET_ERROR_STRING 1
+#define CASE3_BI_OFFSET_KEY_ERROR_P 2
+#define CASE3_BI_OFFSET_KEY_ERROR_MATCHEE 3
+#define CASE3_BI_OFFSET_KEY_ERROR_KEY 4
+
+static int
+iseq_compile_pattern_each(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, LABEL *matched, LABEL *unmatched, bool in_single_pattern, bool in_alt_pattern, int base_index, bool use_deconstructed_cache)
+{
+ const int line = nd_line(node);
+ const NODE *line_node = node;
- break;
+ switch (nd_type(node)) {
+ case NODE_ARYPTN: {
+ /*
+ * if pattern.use_rest_num?
+ * rest_num = 0
+ * end
+ * if pattern.has_constant_node?
+ * unless pattern.constant === obj
+ * goto match_failed
+ * end
+ * end
+ * unless obj.respond_to?(:deconstruct)
+ * goto match_failed
+ * end
+ * d = obj.deconstruct
+ * unless Array === d
+ * goto type_error
+ * end
+ * min_argc = pattern.pre_args_num + pattern.post_args_num
+ * if pattern.has_rest_arg?
+ * unless d.length >= min_argc
+ * goto match_failed
+ * end
+ * else
+ * unless d.length == min_argc
+ * goto match_failed
+ * end
+ * end
+ * pattern.pre_args_num.each do |i|
+ * unless pattern.pre_args[i].match?(d[i])
+ * goto match_failed
+ * end
+ * end
+ * if pattern.use_rest_num?
+ * rest_num = d.length - min_argc
+ * if pattern.has_rest_arg? && pattern.has_rest_arg_id # not `*`, but `*rest`
+ * unless pattern.rest_arg.match?(d[pattern.pre_args_num, rest_num])
+ * goto match_failed
+ * end
+ * end
+ * end
+ * pattern.post_args_num.each do |i|
+ * j = pattern.pre_args_num + i
+ * j += rest_num
+ * unless pattern.post_args[i].match?(d[j])
+ * goto match_failed
+ * end
+ * end
+ * goto matched
+ * type_error:
+ * FrozenCore.raise TypeError
+ * match_failed:
+ * goto unmatched
+ */
+ const NODE *args = RNODE_ARYPTN(node)->pre_args;
+ const int pre_args_num = RNODE_ARYPTN(node)->pre_args ? rb_long2int(RNODE_LIST(RNODE_ARYPTN(node)->pre_args)->as.nd_alen) : 0;
+ const int post_args_num = RNODE_ARYPTN(node)->post_args ? rb_long2int(RNODE_LIST(RNODE_ARYPTN(node)->post_args)->as.nd_alen) : 0;
+
+ const int min_argc = pre_args_num + post_args_num;
+ const int use_rest_num = RNODE_ARYPTN(node)->rest_arg && (NODE_NAMED_REST_P(RNODE_ARYPTN(node)->rest_arg) ||
+ (!NODE_NAMED_REST_P(RNODE_ARYPTN(node)->rest_arg) && post_args_num > 0));
+
+ LABEL *match_failed, *type_error, *deconstruct, *deconstructed;
+ int i;
+ match_failed = NEW_LABEL(line);
+ type_error = NEW_LABEL(line);
+ deconstruct = NEW_LABEL(line);
+ deconstructed = NEW_LABEL(line);
+
+ if (use_rest_num) {
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(0)); /* allocate stack for rest_num */
+ ADD_INSN(ret, line_node, swap);
+ if (base_index) {
+ base_index++;
+ }
+ }
+
+ CHECK(iseq_compile_pattern_constant(iseq, ret, node, match_failed, in_single_pattern, base_index));
+
+ CHECK(iseq_compile_array_deconstruct(iseq, ret, node, deconstruct, deconstructed, match_failed, type_error, in_single_pattern, base_index, use_deconstructed_cache));
+
+ ADD_INSN(ret, line_node, dup);
+ ADD_SEND(ret, line_node, idLength, INT2FIX(0));
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(min_argc));
+ ADD_SEND(ret, line_node, RNODE_ARYPTN(node)->rest_arg ? idGE : idEq, INT2FIX(1)); // (1)
+ if (in_single_pattern) {
+ CHECK(iseq_compile_pattern_set_length_errmsg(iseq, ret, node,
+ RNODE_ARYPTN(node)->rest_arg ? rb_fstring_lit("%p length mismatch (given %p, expected %p+)") :
+ rb_fstring_lit("%p length mismatch (given %p, expected %p)"),
+ INT2FIX(min_argc), base_index + 1 /* (1) */));
+ }
+ ADD_INSNL(ret, line_node, branchunless, match_failed);
+
+ for (i = 0; i < pre_args_num; i++) {
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(i));
+ ADD_SEND(ret, line_node, idAREF, INT2FIX(1)); // (2)
+ CHECK(iseq_compile_pattern_match(iseq, ret, RNODE_LIST(args)->nd_head, match_failed, in_single_pattern, in_alt_pattern, base_index + 1 /* (2) */, false));
+ args = RNODE_LIST(args)->nd_next;
+ }
+
+ if (RNODE_ARYPTN(node)->rest_arg) {
+ if (NODE_NAMED_REST_P(RNODE_ARYPTN(node)->rest_arg)) {
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(pre_args_num));
+ ADD_INSN1(ret, line_node, topn, INT2FIX(1));
+ ADD_SEND(ret, line_node, idLength, INT2FIX(0));
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(min_argc));
+ ADD_SEND(ret, line_node, idMINUS, INT2FIX(1));
+ ADD_INSN1(ret, line_node, setn, INT2FIX(4));
+ ADD_SEND(ret, line_node, idAREF, INT2FIX(2)); // (3)
+
+ CHECK(iseq_compile_pattern_match(iseq, ret, RNODE_ARYPTN(node)->rest_arg, match_failed, in_single_pattern, in_alt_pattern, base_index + 1 /* (3) */, false));
+ }
+ else {
+ if (post_args_num > 0) {
+ ADD_INSN(ret, line_node, dup);
+ ADD_SEND(ret, line_node, idLength, INT2FIX(0));
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(min_argc));
+ ADD_SEND(ret, line_node, idMINUS, INT2FIX(1));
+ ADD_INSN1(ret, line_node, setn, INT2FIX(2));
+ ADD_INSN(ret, line_node, pop);
+ }
+ }
+ }
+
+ args = RNODE_ARYPTN(node)->post_args;
+ for (i = 0; i < post_args_num; i++) {
+ ADD_INSN(ret, line_node, dup);
+
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(pre_args_num + i));
+ ADD_INSN1(ret, line_node, topn, INT2FIX(3));
+ ADD_SEND(ret, line_node, idPLUS, INT2FIX(1));
+
+ ADD_SEND(ret, line_node, idAREF, INT2FIX(1)); // (4)
+ CHECK(iseq_compile_pattern_match(iseq, ret, RNODE_LIST(args)->nd_head, match_failed, in_single_pattern, in_alt_pattern, base_index + 1 /* (4) */, false));
+ args = RNODE_LIST(args)->nd_next;
+ }
+
+ ADD_INSN(ret, line_node, pop);
+ if (use_rest_num) {
+ ADD_INSN(ret, line_node, pop);
+ }
+ ADD_INSNL(ret, line_node, jump, matched);
+ ADD_INSN(ret, line_node, putnil);
+ if (use_rest_num) {
+ ADD_INSN(ret, line_node, putnil);
+ }
+
+ ADD_LABEL(ret, type_error);
+ ADD_INSN1(ret, line_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line_node, putobject, rb_eTypeError);
+ ADD_INSN1(ret, line_node, putobject, rb_fstring_lit("deconstruct must return Array"));
+ ADD_SEND(ret, line_node, id_core_raise, INT2FIX(2));
+ ADD_INSN(ret, line_node, pop);
+
+ ADD_LABEL(ret, match_failed);
+ ADD_INSN(ret, line_node, pop);
+ if (use_rest_num) {
+ ADD_INSN(ret, line_node, pop);
+ }
+ ADD_INSNL(ret, line_node, jump, unmatched);
+
+ break;
}
- case NODE_CASE:{
- NODE *vals;
- NODE *tempnode = node;
- LABEL *endlabel, *elselabel;
- DECL_ANCHOR(head);
- DECL_ANCHOR(body_seq);
- DECL_ANCHOR(cond_seq);
- int only_special_literals = 1;
- VALUE literals = rb_hash_new();
-
- INIT_ANCHOR(head);
- INIT_ANCHOR(body_seq);
- INIT_ANCHOR(cond_seq);
-
- rb_hash_tbl_raw(literals)->type = &cdhash_type;
-
- if (node->nd_head == 0) {
- COMPILE_(ret, "when", node->nd_body, poped);
- break;
- }
- COMPILE(head, "case base", node->nd_head);
-
- node = node->nd_body;
- type = nd_type(node);
- line = nd_line(node);
-
- if (type != NODE_WHEN) {
- COMPILE_ERROR(ERROR_ARGS "NODE_CASE: unexpected node. must be NODE_WHEN, but %s", ruby_node_name(type));
- debug_node_end();
- return COMPILE_NG;
- }
-
- endlabel = NEW_LABEL(line);
- elselabel = NEW_LABEL(line);
-
- ADD_SEQ(ret, head); /* case VAL */
-
- while (type == NODE_WHEN) {
- LABEL *l1;
-
- l1 = NEW_LABEL(line);
- ADD_LABEL(body_seq, l1);
- ADD_INSN(body_seq, line, pop);
- COMPILE_(body_seq, "when body", node->nd_body, poped);
- ADD_INSNL(body_seq, line, jump, endlabel);
-
- vals = node->nd_head;
- if (vals) {
- switch (nd_type(vals)) {
- case NODE_ARRAY:
- only_special_literals = when_vals(iseq, cond_seq, vals, l1, only_special_literals, literals);
- break;
- case NODE_SPLAT:
- case NODE_ARGSCAT:
- case NODE_ARGSPUSH:
- only_special_literals = 0;
- ADD_INSN (cond_seq, nd_line(vals), dup);
- COMPILE(cond_seq, "when/cond splat", vals);
- ADD_INSN1(cond_seq, nd_line(vals), checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE | VM_CHECKMATCH_ARRAY));
- ADD_INSNL(cond_seq, nd_line(vals), branchif, l1);
- break;
- default:
- UNKNOWN_NODE("NODE_CASE", vals);
- }
- }
- else {
- EXPECT_NODE_NONULL("NODE_CASE", node, NODE_ARRAY);
- }
-
- node = node->nd_next;
- if (!node) {
- break;
- }
- type = nd_type(node);
- line = nd_line(node);
- }
- /* else */
- if (node) {
- ADD_LABEL(cond_seq, elselabel);
- ADD_INSN(cond_seq, line, pop);
- COMPILE_(cond_seq, "else", node, poped);
- ADD_INSNL(cond_seq, line, jump, endlabel);
- }
- else {
- debugs("== else (implicit)\n");
- ADD_LABEL(cond_seq, elselabel);
- ADD_INSN(cond_seq, nd_line(tempnode), pop);
- if (!poped) {
- ADD_INSN(cond_seq, nd_line(tempnode), putnil);
- }
- ADD_INSNL(cond_seq, nd_line(tempnode), jump, endlabel);
- }
-
- if (only_special_literals) {
- iseq_add_mark_object(iseq, literals);
-
- ADD_INSN(ret, nd_line(tempnode), dup);
- ADD_INSN2(ret, nd_line(tempnode), opt_case_dispatch, literals, elselabel);
- LABEL_REF(elselabel);
- }
-
- ADD_SEQ(ret, cond_seq);
- ADD_SEQ(ret, body_seq);
- ADD_LABEL(ret, endlabel);
- break;
+ case NODE_FNDPTN: {
+ /*
+ * if pattern.has_constant_node?
+ * unless pattern.constant === obj
+ * goto match_failed
+ * end
+ * end
+ * unless obj.respond_to?(:deconstruct)
+ * goto match_failed
+ * end
+ * d = obj.deconstruct
+ * unless Array === d
+ * goto type_error
+ * end
+ * unless d.length >= pattern.args_num
+ * goto match_failed
+ * end
+ *
+ * begin
+ * len = d.length
+ * limit = d.length - pattern.args_num
+ * i = 0
+ * while i <= limit
+ * if pattern.args_num.times.all? {|j| pattern.args[j].match?(d[i+j]) }
+ * if pattern.has_pre_rest_arg_id
+ * unless pattern.pre_rest_arg.match?(d[0, i])
+ * goto find_failed
+ * end
+ * end
+ * if pattern.has_post_rest_arg_id
+ * unless pattern.post_rest_arg.match?(d[i+pattern.args_num, len])
+ * goto find_failed
+ * end
+ * end
+ * goto find_succeeded
+ * end
+ * i+=1
+ * end
+ * find_failed:
+ * goto match_failed
+ * find_succeeded:
+ * end
+ *
+ * goto matched
+ * type_error:
+ * FrozenCore.raise TypeError
+ * match_failed:
+ * goto unmatched
+ */
+ const NODE *args = RNODE_FNDPTN(node)->args;
+ const int args_num = RNODE_FNDPTN(node)->args ? rb_long2int(RNODE_LIST(RNODE_FNDPTN(node)->args)->as.nd_alen) : 0;
+
+ LABEL *match_failed, *type_error, *deconstruct, *deconstructed;
+ match_failed = NEW_LABEL(line);
+ type_error = NEW_LABEL(line);
+ deconstruct = NEW_LABEL(line);
+ deconstructed = NEW_LABEL(line);
+
+ CHECK(iseq_compile_pattern_constant(iseq, ret, node, match_failed, in_single_pattern, base_index));
+
+ CHECK(iseq_compile_array_deconstruct(iseq, ret, node, deconstruct, deconstructed, match_failed, type_error, in_single_pattern, base_index, use_deconstructed_cache));
+
+ ADD_INSN(ret, line_node, dup);
+ ADD_SEND(ret, line_node, idLength, INT2FIX(0));
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(args_num));
+ ADD_SEND(ret, line_node, idGE, INT2FIX(1)); // (1)
+ if (in_single_pattern) {
+ CHECK(iseq_compile_pattern_set_length_errmsg(iseq, ret, node, rb_fstring_lit("%p length mismatch (given %p, expected %p+)"), INT2FIX(args_num), base_index + 1 /* (1) */));
+ }
+ ADD_INSNL(ret, line_node, branchunless, match_failed);
+
+ {
+ LABEL *while_begin = NEW_LABEL(nd_line(node));
+ LABEL *next_loop = NEW_LABEL(nd_line(node));
+ LABEL *find_succeeded = NEW_LABEL(line);
+ LABEL *find_failed = NEW_LABEL(nd_line(node));
+ int j;
+
+ ADD_INSN(ret, line_node, dup); /* allocate stack for len */
+ ADD_SEND(ret, line_node, idLength, INT2FIX(0)); // (2)
+
+ ADD_INSN(ret, line_node, dup); /* allocate stack for limit */
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(args_num));
+ ADD_SEND(ret, line_node, idMINUS, INT2FIX(1)); // (3)
+
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(0)); /* allocate stack for i */ // (4)
+
+ ADD_LABEL(ret, while_begin);
+
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSN1(ret, line_node, topn, INT2FIX(2));
+ ADD_SEND(ret, line_node, idLE, INT2FIX(1));
+ ADD_INSNL(ret, line_node, branchunless, find_failed);
+
+ for (j = 0; j < args_num; j++) {
+ ADD_INSN1(ret, line_node, topn, INT2FIX(3));
+ ADD_INSN1(ret, line_node, topn, INT2FIX(1));
+ if (j != 0) {
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(j));
+ ADD_SEND(ret, line_node, idPLUS, INT2FIX(1));
+ }
+ ADD_SEND(ret, line_node, idAREF, INT2FIX(1)); // (5)
+
+ CHECK(iseq_compile_pattern_match(iseq, ret, RNODE_LIST(args)->nd_head, next_loop, in_single_pattern, in_alt_pattern, base_index + 4 /* (2), (3), (4), (5) */, false));
+ args = RNODE_LIST(args)->nd_next;
+ }
+
+ if (NODE_NAMED_REST_P(RNODE_FNDPTN(node)->pre_rest_arg)) {
+ ADD_INSN1(ret, line_node, topn, INT2FIX(3));
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(0));
+ ADD_INSN1(ret, line_node, topn, INT2FIX(2));
+ ADD_SEND(ret, line_node, idAREF, INT2FIX(2)); // (6)
+ CHECK(iseq_compile_pattern_match(iseq, ret, RNODE_FNDPTN(node)->pre_rest_arg, find_failed, in_single_pattern, in_alt_pattern, base_index + 4 /* (2), (3), (4), (6) */, false));
+ }
+ if (NODE_NAMED_REST_P(RNODE_FNDPTN(node)->post_rest_arg)) {
+ ADD_INSN1(ret, line_node, topn, INT2FIX(3));
+ ADD_INSN1(ret, line_node, topn, INT2FIX(1));
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(args_num));
+ ADD_SEND(ret, line_node, idPLUS, INT2FIX(1));
+ ADD_INSN1(ret, line_node, topn, INT2FIX(3));
+ ADD_SEND(ret, line_node, idAREF, INT2FIX(2)); // (7)
+ CHECK(iseq_compile_pattern_match(iseq, ret, RNODE_FNDPTN(node)->post_rest_arg, find_failed, in_single_pattern, in_alt_pattern, base_index + 4 /* (2), (3),(4), (7) */, false));
+ }
+ ADD_INSNL(ret, line_node, jump, find_succeeded);
+
+ ADD_LABEL(ret, next_loop);
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(1));
+ ADD_SEND(ret, line_node, idPLUS, INT2FIX(1));
+ ADD_INSNL(ret, line_node, jump, while_begin);
+
+ ADD_LABEL(ret, find_failed);
+ ADD_INSN1(ret, line_node, adjuststack, INT2FIX(3));
+ if (in_single_pattern) {
+ ADD_INSN1(ret, line_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line_node, putobject, rb_fstring_lit("%p does not match to find pattern"));
+ ADD_INSN1(ret, line_node, topn, INT2FIX(2));
+ ADD_SEND(ret, line_node, id_core_sprintf, INT2FIX(2)); // (8)
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_ERROR_STRING + 1 /* (8) */)); // (9)
+
+ ADD_INSN1(ret, line_node, putobject, Qfalse);
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_KEY_ERROR_P + 2 /* (8), (9) */));
+
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSN(ret, line_node, pop);
+ }
+ ADD_INSNL(ret, line_node, jump, match_failed);
+ ADD_INSN1(ret, line_node, dupn, INT2FIX(3));
+
+ ADD_LABEL(ret, find_succeeded);
+ ADD_INSN1(ret, line_node, adjuststack, INT2FIX(3));
+ }
+
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSNL(ret, line_node, jump, matched);
+ ADD_INSN(ret, line_node, putnil);
+
+ ADD_LABEL(ret, type_error);
+ ADD_INSN1(ret, line_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line_node, putobject, rb_eTypeError);
+ ADD_INSN1(ret, line_node, putobject, rb_fstring_lit("deconstruct must return Array"));
+ ADD_SEND(ret, line_node, id_core_raise, INT2FIX(2));
+ ADD_INSN(ret, line_node, pop);
+
+ ADD_LABEL(ret, match_failed);
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSNL(ret, line_node, jump, unmatched);
+
+ break;
}
- case NODE_WHEN:{
- NODE *vals;
- NODE *val;
- NODE *orig_node = node;
- LABEL *endlabel;
- DECL_ANCHOR(body_seq);
-
- INIT_ANCHOR(body_seq);
- endlabel = NEW_LABEL(line);
-
- while (node && nd_type(node) == NODE_WHEN) {
- LABEL *l1 = NEW_LABEL(line = nd_line(node));
- ADD_LABEL(body_seq, l1);
- COMPILE_(body_seq, "when", node->nd_body, poped);
- ADD_INSNL(body_seq, line, jump, endlabel);
-
- vals = node->nd_head;
- if (!vals) {
- rb_compile_bug_str(ERROR_ARGS "NODE_WHEN: must be NODE_ARRAY, but 0");
- }
- switch (nd_type(vals)) {
- case NODE_ARRAY:
- while (vals) {
- val = vals->nd_head;
- COMPILE(ret, "when2", val);
- ADD_INSNL(ret, nd_line(val), branchif, l1);
- vals = vals->nd_next;
- }
- break;
- case NODE_SPLAT:
- case NODE_ARGSCAT:
- case NODE_ARGSPUSH:
- ADD_INSN(ret, nd_line(vals), putnil);
- COMPILE(ret, "when2/cond splat", vals);
- ADD_INSN1(ret, nd_line(vals), checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_WHEN | VM_CHECKMATCH_ARRAY));
- ADD_INSNL(ret, nd_line(vals), branchif, l1);
- break;
- default:
- UNKNOWN_NODE("NODE_WHEN", vals);
- }
- node = node->nd_next;
- }
- /* else */
- COMPILE_(ret, "else", node, poped);
- ADD_INSNL(ret, nd_line(orig_node), jump, endlabel);
-
- ADD_SEQ(ret, body_seq);
- ADD_LABEL(ret, endlabel);
-
- break;
+ case NODE_HSHPTN: {
+ /*
+ * keys = nil
+ * if pattern.has_kw_args_node? && !pattern.has_kw_rest_arg_node?
+ * keys = pattern.kw_args_node.keys
+ * end
+ * if pattern.has_constant_node?
+ * unless pattern.constant === obj
+ * goto match_failed
+ * end
+ * end
+ * unless obj.respond_to?(:deconstruct_keys)
+ * goto match_failed
+ * end
+ * d = obj.deconstruct_keys(keys)
+ * unless Hash === d
+ * goto type_error
+ * end
+ * if pattern.has_kw_rest_arg_node?
+ * d = d.dup
+ * end
+ * if pattern.has_kw_args_node?
+ * pattern.kw_args_node.each |k,|
+ * unless d.key?(k)
+ * goto match_failed
+ * end
+ * end
+ * pattern.kw_args_node.each |k, pat|
+ * if pattern.has_kw_rest_arg_node?
+ * unless pat.match?(d.delete(k))
+ * goto match_failed
+ * end
+ * else
+ * unless pat.match?(d[k])
+ * goto match_failed
+ * end
+ * end
+ * end
+ * else
+ * unless d.empty?
+ * goto match_failed
+ * end
+ * end
+ * if pattern.has_kw_rest_arg_node?
+ * if pattern.no_rest_keyword?
+ * unless d.empty?
+ * goto match_failed
+ * end
+ * else
+ * unless pattern.kw_rest_arg_node.match?(d)
+ * goto match_failed
+ * end
+ * end
+ * end
+ * goto matched
+ * type_error:
+ * FrozenCore.raise TypeError
+ * match_failed:
+ * goto unmatched
+ */
+ LABEL *match_failed, *type_error;
+ VALUE keys = Qnil;
+
+ match_failed = NEW_LABEL(line);
+ type_error = NEW_LABEL(line);
+
+ if (RNODE_HSHPTN(node)->nd_pkwargs && !RNODE_HSHPTN(node)->nd_pkwrestarg) {
+ const NODE *kw_args = RNODE_HASH(RNODE_HSHPTN(node)->nd_pkwargs)->nd_head;
+ keys = rb_ary_new_capa(kw_args ? RNODE_LIST(kw_args)->as.nd_alen/2 : 0);
+ while (kw_args) {
+ rb_ary_push(keys, get_symbol_value(iseq, RNODE_LIST(kw_args)->nd_head));
+ kw_args = RNODE_LIST(RNODE_LIST(kw_args)->nd_next)->nd_next;
+ }
+ }
+
+ CHECK(iseq_compile_pattern_constant(iseq, ret, node, match_failed, in_single_pattern, base_index));
+
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSN1(ret, line_node, putobject, ID2SYM(rb_intern("deconstruct_keys")));
+ ADD_SEND(ret, line_node, idRespond_to, INT2FIX(1)); // (1)
+ if (in_single_pattern) {
+ CHECK(iseq_compile_pattern_set_general_errmsg(iseq, ret, node, rb_fstring_lit("%p does not respond to #deconstruct_keys"), base_index + 1 /* (1) */));
+ }
+ ADD_INSNL(ret, line_node, branchunless, match_failed);
+
+ if (NIL_P(keys)) {
+ ADD_INSN(ret, line_node, putnil);
+ }
+ else {
+ RB_OBJ_SET_FROZEN_SHAREABLE(keys);
+ ADD_INSN1(ret, line_node, duparray, keys);
+ RB_OBJ_WRITTEN(iseq, Qundef, rb_obj_hide(keys));
+ }
+ ADD_SEND(ret, line_node, rb_intern("deconstruct_keys"), INT2FIX(1)); // (2)
+
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSN1(ret, line_node, checktype, INT2FIX(T_HASH));
+ ADD_INSNL(ret, line_node, branchunless, type_error);
+
+ if (RNODE_HSHPTN(node)->nd_pkwrestarg) {
+ ADD_SEND(ret, line_node, rb_intern("dup"), INT2FIX(0));
+ }
+
+ if (RNODE_HSHPTN(node)->nd_pkwargs) {
+ int i;
+ int keys_num;
+ const NODE *args;
+ args = RNODE_HASH(RNODE_HSHPTN(node)->nd_pkwargs)->nd_head;
+ if (args) {
+ DECL_ANCHOR(match_values);
+ INIT_ANCHOR(match_values);
+ keys_num = rb_long2int(RNODE_LIST(args)->as.nd_alen) / 2;
+ for (i = 0; i < keys_num; i++) {
+ NODE *key_node = RNODE_LIST(args)->nd_head;
+ NODE *value_node = RNODE_LIST(RNODE_LIST(args)->nd_next)->nd_head;
+ VALUE key = get_symbol_value(iseq, key_node);
+
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSN1(ret, line_node, putobject, key);
+ ADD_SEND(ret, line_node, rb_intern("key?"), INT2FIX(1)); // (3)
+ if (in_single_pattern) {
+ LABEL *match_succeeded;
+ match_succeeded = NEW_LABEL(line);
+
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSNL(ret, line_node, branchif, match_succeeded);
+
+ VALUE str = rb_str_freeze(rb_sprintf("key not found: %+"PRIsVALUE, key));
+ ADD_INSN1(ret, line_node, putobject, RB_OBJ_SET_SHAREABLE(str)); // (4)
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_ERROR_STRING + 2 /* (3), (4) */));
+ ADD_INSN1(ret, line_node, putobject, Qtrue); // (5)
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_KEY_ERROR_P + 3 /* (3), (4), (5) */));
+ ADD_INSN1(ret, line_node, topn, INT2FIX(3)); // (6)
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_KEY_ERROR_MATCHEE + 4 /* (3), (4), (5), (6) */));
+ ADD_INSN1(ret, line_node, putobject, key); // (7)
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_KEY_ERROR_KEY + 5 /* (3), (4), (5), (6), (7) */));
+
+ ADD_INSN1(ret, line_node, adjuststack, INT2FIX(4));
+
+ ADD_LABEL(ret, match_succeeded);
+ }
+ ADD_INSNL(ret, line_node, branchunless, match_failed);
+
+ ADD_INSN(match_values, line_node, dup);
+ ADD_INSN1(match_values, line_node, putobject, key);
+ ADD_SEND(match_values, line_node, RNODE_HSHPTN(node)->nd_pkwrestarg ? rb_intern("delete") : idAREF, INT2FIX(1)); // (8)
+ CHECK(iseq_compile_pattern_match(iseq, match_values, value_node, match_failed, in_single_pattern, in_alt_pattern, base_index + 1 /* (8) */, false));
+ args = RNODE_LIST(RNODE_LIST(args)->nd_next)->nd_next;
+ }
+ ADD_SEQ(ret, match_values);
+ }
+ }
+ else {
+ ADD_INSN(ret, line_node, dup);
+ ADD_SEND(ret, line_node, idEmptyP, INT2FIX(0)); // (9)
+ if (in_single_pattern) {
+ CHECK(iseq_compile_pattern_set_general_errmsg(iseq, ret, node, rb_fstring_lit("%p is not empty"), base_index + 1 /* (9) */));
+ }
+ ADD_INSNL(ret, line_node, branchunless, match_failed);
+ }
+
+ if (RNODE_HSHPTN(node)->nd_pkwrestarg) {
+ if (RNODE_HSHPTN(node)->nd_pkwrestarg == NODE_SPECIAL_NO_REST_KEYWORD) {
+ ADD_INSN(ret, line_node, dup);
+ ADD_SEND(ret, line_node, idEmptyP, INT2FIX(0)); // (10)
+ if (in_single_pattern) {
+ CHECK(iseq_compile_pattern_set_general_errmsg(iseq, ret, node, rb_fstring_lit("rest of %p is not empty"), base_index + 1 /* (10) */));
+ }
+ ADD_INSNL(ret, line_node, branchunless, match_failed);
+ }
+ else {
+ ADD_INSN(ret, line_node, dup); // (11)
+ CHECK(iseq_compile_pattern_match(iseq, ret, RNODE_HSHPTN(node)->nd_pkwrestarg, match_failed, in_single_pattern, in_alt_pattern, base_index + 1 /* (11) */, false));
+ }
+ }
+
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSNL(ret, line_node, jump, matched);
+ ADD_INSN(ret, line_node, putnil);
+
+ ADD_LABEL(ret, type_error);
+ ADD_INSN1(ret, line_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line_node, putobject, rb_eTypeError);
+ ADD_INSN1(ret, line_node, putobject, rb_fstring_lit("deconstruct_keys must return Hash"));
+ ADD_SEND(ret, line_node, id_core_raise, INT2FIX(2));
+ ADD_INSN(ret, line_node, pop);
+
+ ADD_LABEL(ret, match_failed);
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSNL(ret, line_node, jump, unmatched);
+ break;
}
- case NODE_OPT_N:
- case NODE_WHILE:
- case NODE_UNTIL:{
- LABEL *prev_start_label = ISEQ_COMPILE_DATA(iseq)->start_label;
- LABEL *prev_end_label = ISEQ_COMPILE_DATA(iseq)->end_label;
- LABEL *prev_redo_label = ISEQ_COMPILE_DATA(iseq)->redo_label;
- int prev_loopval_popped = ISEQ_COMPILE_DATA(iseq)->loopval_popped;
-
- struct iseq_compile_data_ensure_node_stack enl;
-
- LABEL *next_label = ISEQ_COMPILE_DATA(iseq)->start_label = NEW_LABEL(line); /* next */
- LABEL *redo_label = ISEQ_COMPILE_DATA(iseq)->redo_label = NEW_LABEL(line); /* redo */
- LABEL *break_label = ISEQ_COMPILE_DATA(iseq)->end_label = NEW_LABEL(line); /* break */
- LABEL *end_label = NEW_LABEL(line);
- LABEL *adjust_label = NEW_LABEL(line);
-
- LABEL *next_catch_label = NEW_LABEL(line);
- LABEL *tmp_label = NULL;
-
- ISEQ_COMPILE_DATA(iseq)->loopval_popped = 0;
- push_ensure_entry(iseq, &enl, 0, 0);
-
- if (type == NODE_OPT_N || node->nd_state == 1) {
- ADD_INSNL(ret, line, jump, next_label);
- }
- else {
- tmp_label = NEW_LABEL(line);
- ADD_INSNL(ret, line, jump, tmp_label);
- }
- ADD_LABEL(ret, adjust_label);
- ADD_INSN(ret, line, putnil);
- ADD_LABEL(ret, next_catch_label);
- ADD_INSN(ret, line, pop);
- ADD_INSNL(ret, line, jump, next_label);
- if (tmp_label) ADD_LABEL(ret, tmp_label);
-
- ADD_LABEL(ret, redo_label);
- COMPILE_POPED(ret, "while body", node->nd_body);
- ADD_LABEL(ret, next_label); /* next */
-
- if (type == NODE_WHILE) {
- compile_branch_condition(iseq, ret, node->nd_cond,
- redo_label, end_label);
- }
- else if (type == NODE_UNTIL) {
- /* until */
- compile_branch_condition(iseq, ret, node->nd_cond,
- end_label, redo_label);
- }
- else {
- ADD_CALL_RECEIVER(ret, line);
- ADD_CALL(ret, line, idGets, INT2FIX(0));
- ADD_INSNL(ret, line, branchif, redo_label);
- /* opt_n */
- }
-
- ADD_LABEL(ret, end_label);
- ADD_ADJUST_RESTORE(ret, adjust_label);
-
- if (node->nd_state == Qundef) {
- /* ADD_INSN(ret, line, putundef); */
- rb_compile_bug_str(ERROR_ARGS "unsupported: putundef");
- }
- else {
- ADD_INSN(ret, line, putnil);
- }
-
- ADD_LABEL(ret, break_label); /* break */
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
-
- ADD_CATCH_ENTRY(CATCH_TYPE_BREAK, redo_label, break_label,
- 0, break_label);
- ADD_CATCH_ENTRY(CATCH_TYPE_NEXT, redo_label, break_label, 0,
- next_catch_label);
- ADD_CATCH_ENTRY(CATCH_TYPE_REDO, redo_label, break_label, 0,
- ISEQ_COMPILE_DATA(iseq)->redo_label);
-
- ISEQ_COMPILE_DATA(iseq)->start_label = prev_start_label;
- ISEQ_COMPILE_DATA(iseq)->end_label = prev_end_label;
- ISEQ_COMPILE_DATA(iseq)->redo_label = prev_redo_label;
- ISEQ_COMPILE_DATA(iseq)->loopval_popped = prev_loopval_popped;
- ISEQ_COMPILE_DATA(iseq)->ensure_node_stack = ISEQ_COMPILE_DATA(iseq)->ensure_node_stack->prev;
- break;
+ case NODE_SYM:
+ case NODE_REGX:
+ case NODE_LINE:
+ case NODE_INTEGER:
+ case NODE_FLOAT:
+ case NODE_RATIONAL:
+ case NODE_IMAGINARY:
+ case NODE_FILE:
+ case NODE_ENCODING:
+ case NODE_STR:
+ case NODE_XSTR:
+ case NODE_DSTR:
+ case NODE_DSYM:
+ case NODE_DREGX:
+ case NODE_LIST:
+ case NODE_ZLIST:
+ case NODE_LAMBDA:
+ case NODE_DOT2:
+ case NODE_DOT3:
+ case NODE_CONST:
+ case NODE_LVAR:
+ case NODE_DVAR:
+ case NODE_IVAR:
+ case NODE_CVAR:
+ case NODE_GVAR:
+ case NODE_TRUE:
+ case NODE_FALSE:
+ case NODE_SELF:
+ case NODE_NIL:
+ case NODE_COLON2:
+ case NODE_COLON3:
+ case NODE_BEGIN:
+ case NODE_BLOCK:
+ case NODE_ONCE:
+ CHECK(COMPILE(ret, "case in literal", node)); // (1)
+ if (in_single_pattern) {
+ ADD_INSN1(ret, line_node, dupn, INT2FIX(2));
+ }
+ ADD_INSN1(ret, line_node, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE)); // (2)
+ if (in_single_pattern) {
+ CHECK(iseq_compile_pattern_set_eqq_errmsg(iseq, ret, node, base_index + 2 /* (1), (2) */));
+ }
+ ADD_INSNL(ret, line_node, branchif, matched);
+ ADD_INSNL(ret, line_node, jump, unmatched);
+ break;
+ case NODE_LASGN: {
+ struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
+ ID id = RNODE_LASGN(node)->nd_vid;
+ int idx = ISEQ_BODY(body->local_iseq)->local_table_size - get_local_var_idx(iseq, id);
+
+ if (in_alt_pattern) {
+ const char *name = rb_id2name(id);
+ if (name && strlen(name) > 0 && name[0] != '_') {
+ COMPILE_ERROR(ERROR_ARGS "illegal variable in alternative pattern (%"PRIsVALUE")",
+ rb_id2str(id));
+ return COMPILE_NG;
+ }
+ }
+
+ ADD_SETLOCAL(ret, line_node, idx, get_lvar_level(iseq));
+ ADD_INSNL(ret, line_node, jump, matched);
+ break;
}
- case NODE_FOR:
- if (node->nd_var) {
- /* massign to var in "for"
- * args.length == 1 && Array === (tmp = args[0]) ? tmp : args
- */
- NODE *var = node->nd_var;
- LABEL *not_single = NEW_LABEL(nd_line(var));
- LABEL *not_ary = NEW_LABEL(nd_line(var));
- COMPILE(ret, "for var", var);
- ADD_INSN(ret, line, dup);
- ADD_CALL(ret, line, idLength, INT2FIX(0));
- ADD_INSN1(ret, line, putobject, INT2FIX(1));
- ADD_CALL(ret, line, idEq, INT2FIX(1));
- ADD_INSNL(ret, line, branchunless, not_single);
- ADD_INSN(ret, line, dup);
- ADD_INSN1(ret, line, putobject, INT2FIX(0));
- ADD_CALL(ret, line, idAREF, INT2FIX(1));
- ADD_INSN1(ret, line, putobject, rb_cArray);
- ADD_INSN1(ret, line, topn, INT2FIX(1));
- ADD_CALL(ret, line, idEqq, INT2FIX(1));
- ADD_INSNL(ret, line, branchunless, not_ary);
- ADD_INSN(ret, line, swap);
- ADD_LABEL(ret, not_ary);
- ADD_INSN(ret, line, pop);
- ADD_LABEL(ret, not_single);
- break;
- }
- case NODE_ITER:{
- const rb_iseq_t *prevblock = ISEQ_COMPILE_DATA(iseq)->current_block;
- LABEL *retry_label = NEW_LABEL(line);
- LABEL *retry_end_l = NEW_LABEL(line);
-
- ADD_LABEL(ret, retry_label);
- if (nd_type(node) == NODE_FOR) {
- COMPILE(ret, "iter caller (for)", node->nd_iter);
-
- ISEQ_COMPILE_DATA(iseq)->current_block = NEW_CHILD_ISEQ(node->nd_body, make_name_for_block(iseq),
- ISEQ_TYPE_BLOCK, line);
- ADD_SEND_WITH_BLOCK(ret, line, idEach, INT2FIX(0), ISEQ_COMPILE_DATA(iseq)->current_block);
- }
- else {
- ISEQ_COMPILE_DATA(iseq)->current_block = NEW_CHILD_ISEQ(node->nd_body, make_name_for_block(iseq),
- ISEQ_TYPE_BLOCK, line);
- COMPILE(ret, "iter caller", node->nd_iter);
- }
- ADD_LABEL(ret, retry_end_l);
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
-
- ISEQ_COMPILE_DATA(iseq)->current_block = prevblock;
-
- ADD_CATCH_ENTRY(CATCH_TYPE_BREAK, retry_label, retry_end_l, 0, retry_end_l);
-
- break;
+ case NODE_DASGN: {
+ int idx, lv, ls;
+ ID id = RNODE_DASGN(node)->nd_vid;
+
+ idx = get_dyna_var_idx(iseq, id, &lv, &ls);
+
+ if (in_alt_pattern) {
+ const char *name = rb_id2name(id);
+ if (name && strlen(name) > 0 && name[0] != '_') {
+ COMPILE_ERROR(ERROR_ARGS "illegal variable in alternative pattern (%"PRIsVALUE")",
+ rb_id2str(id));
+ return COMPILE_NG;
+ }
+ }
+
+ if (idx < 0) {
+ COMPILE_ERROR(ERROR_ARGS "NODE_DASGN: unknown id (%"PRIsVALUE")",
+ rb_id2str(id));
+ return COMPILE_NG;
+ }
+ ADD_SETLOCAL(ret, line_node, ls - idx, lv);
+ ADD_INSNL(ret, line_node, jump, matched);
+ break;
+ }
+ case NODE_IF:
+ case NODE_UNLESS: {
+ LABEL *match_failed;
+ match_failed = unmatched;
+ CHECK(iseq_compile_pattern_match(iseq, ret, RNODE_IF(node)->nd_body, unmatched, in_single_pattern, in_alt_pattern, base_index, use_deconstructed_cache));
+ CHECK(COMPILE(ret, "case in if", RNODE_IF(node)->nd_cond));
+ if (in_single_pattern) {
+ LABEL *match_succeeded;
+ match_succeeded = NEW_LABEL(line);
+
+ ADD_INSN(ret, line_node, dup);
+ if (nd_type_p(node, NODE_IF)) {
+ ADD_INSNL(ret, line_node, branchif, match_succeeded);
+ }
+ else {
+ ADD_INSNL(ret, line_node, branchunless, match_succeeded);
+ }
+
+ ADD_INSN1(ret, line_node, putobject, rb_fstring_lit("guard clause does not return true")); // (1)
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_ERROR_STRING + 1 /* (1) */)); // (2)
+ ADD_INSN1(ret, line_node, putobject, Qfalse);
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_KEY_ERROR_P + 2 /* (1), (2) */));
+
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSN(ret, line_node, pop);
+
+ ADD_LABEL(ret, match_succeeded);
+ }
+ if (nd_type_p(node, NODE_IF)) {
+ ADD_INSNL(ret, line_node, branchunless, match_failed);
+ }
+ else {
+ ADD_INSNL(ret, line_node, branchif, match_failed);
+ }
+ ADD_INSNL(ret, line_node, jump, matched);
+ break;
}
- case NODE_BREAK:{
- unsigned long level = 0;
-
- if (ISEQ_COMPILE_DATA(iseq)->redo_label != 0) {
- /* while/until */
- LABEL *splabel = NEW_LABEL(0);
- ADD_LABEL(ret, splabel);
- ADD_ADJUST(ret, line, ISEQ_COMPILE_DATA(iseq)->redo_label);
- COMPILE_(ret, "break val (while/until)", node->nd_stts, ISEQ_COMPILE_DATA(iseq)->loopval_popped);
- add_ensure_iseq(ret, iseq, 0);
- ADD_INSNL(ret, line, jump, ISEQ_COMPILE_DATA(iseq)->end_label);
- ADD_ADJUST_RESTORE(ret, splabel);
-
- if (!poped) {
- ADD_INSN(ret, line, putnil);
- }
- }
- else if (iseq->body->type == ISEQ_TYPE_BLOCK) {
- break_by_insn:
- /* escape from block */
- COMPILE(ret, "break val (block)", node->nd_stts);
- ADD_INSN1(ret, line, throw, INT2FIX(level | TAG_BREAK));
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- }
- else if (iseq->body->type == ISEQ_TYPE_EVAL) {
- break_in_eval:
- COMPILE_ERROR(ERROR_ARGS "Can't escape from eval with break");
- debug_node_end();
- return COMPILE_NG;
- }
- else {
- const rb_iseq_t *ip = iseq->body->parent_iseq;
-
- while (ip) {
- if (!ISEQ_COMPILE_DATA(ip)) {
- ip = 0;
- break;
- }
-
- level++;
- if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) {
- level = VM_THROW_NO_ESCAPE_FLAG;
- goto break_by_insn;
- }
- else if (ip->body->type == ISEQ_TYPE_BLOCK) {
- level <<= VM_THROW_LEVEL_SHIFT;
- goto break_by_insn;
- }
- else if (ip->body->type == ISEQ_TYPE_EVAL) {
- goto break_in_eval;
- }
-
- ip = ip->body->parent_iseq;
- }
- COMPILE_ERROR(ERROR_ARGS "Invalid break");
- debug_node_end();
- return COMPILE_NG;
- }
- break;
+ case NODE_HASH: {
+ NODE *n;
+ LABEL *match_failed;
+ match_failed = NEW_LABEL(line);
+
+ n = RNODE_HASH(node)->nd_head;
+ if (! (nd_type_p(n, NODE_LIST) && RNODE_LIST(n)->as.nd_alen == 2)) {
+ COMPILE_ERROR(ERROR_ARGS "unexpected node");
+ return COMPILE_NG;
+ }
+
+ ADD_INSN(ret, line_node, dup); // (1)
+ CHECK(iseq_compile_pattern_match(iseq, ret, RNODE_LIST(n)->nd_head, match_failed, in_single_pattern, in_alt_pattern, base_index + 1 /* (1) */, use_deconstructed_cache));
+ CHECK(iseq_compile_pattern_each(iseq, ret, RNODE_LIST(RNODE_LIST(n)->nd_next)->nd_head, matched, match_failed, in_single_pattern, in_alt_pattern, base_index, false));
+ ADD_INSN(ret, line_node, putnil);
+
+ ADD_LABEL(ret, match_failed);
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSNL(ret, line_node, jump, unmatched);
+ break;
}
- case NODE_NEXT:{
- unsigned long level = 0;
-
- if (ISEQ_COMPILE_DATA(iseq)->redo_label != 0) {
- LABEL *splabel = NEW_LABEL(0);
- debugs("next in while loop\n");
- ADD_LABEL(ret, splabel);
- COMPILE(ret, "next val/valid syntax?", node->nd_stts);
- add_ensure_iseq(ret, iseq, 0);
- ADD_ADJUST(ret, line, ISEQ_COMPILE_DATA(iseq)->redo_label);
- ADD_INSNL(ret, line, jump, ISEQ_COMPILE_DATA(iseq)->start_label);
- ADD_ADJUST_RESTORE(ret, splabel);
- if (!poped) {
- ADD_INSN(ret, line, putnil);
- }
- }
- else if (ISEQ_COMPILE_DATA(iseq)->end_label) {
- LABEL *splabel = NEW_LABEL(0);
- debugs("next in block\n");
- ADD_LABEL(ret, splabel);
- ADD_ADJUST(ret, line, ISEQ_COMPILE_DATA(iseq)->start_label);
- COMPILE(ret, "next val", node->nd_stts);
- add_ensure_iseq(ret, iseq, 0);
- ADD_INSNL(ret, line, jump, ISEQ_COMPILE_DATA(iseq)->end_label);
- ADD_ADJUST_RESTORE(ret, splabel);
-
- if (!poped) {
- ADD_INSN(ret, line, putnil);
- }
- }
- else if (iseq->body->type == ISEQ_TYPE_EVAL) {
- next_in_eval:
- COMPILE_ERROR(ERROR_ARGS "Can't escape from eval with next");
- }
- else {
- const rb_iseq_t *ip = iseq;
-
- while (ip) {
- if (!ISEQ_COMPILE_DATA(ip)) {
- ip = 0;
- break;
- }
-
- level = VM_THROW_NO_ESCAPE_FLAG;
- if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) {
- /* while loop */
- break;
- }
- else if (ip->body->type == ISEQ_TYPE_BLOCK) {
- break;
- }
- else if (ip->body->type == ISEQ_TYPE_EVAL) {
- goto next_in_eval;
- }
-
- ip = ip->body->parent_iseq;
- }
- if (ip != 0) {
- COMPILE(ret, "next val", node->nd_stts);
- ADD_INSN1(ret, line, throw, INT2FIX(level | TAG_NEXT));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- }
- else {
- COMPILE_ERROR(ERROR_ARGS "Invalid next");
- }
- }
- break;
+ case NODE_OR: {
+ LABEL *match_succeeded, *fin;
+ match_succeeded = NEW_LABEL(line);
+ fin = NEW_LABEL(line);
+
+ ADD_INSN(ret, line_node, dup); // (1)
+ CHECK(iseq_compile_pattern_each(iseq, ret, RNODE_OR(node)->nd_1st, match_succeeded, fin, in_single_pattern, true, base_index + 1 /* (1) */, use_deconstructed_cache));
+ ADD_LABEL(ret, match_succeeded);
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSNL(ret, line_node, jump, matched);
+ ADD_INSN(ret, line_node, putnil);
+ ADD_LABEL(ret, fin);
+ CHECK(iseq_compile_pattern_each(iseq, ret, RNODE_OR(node)->nd_2nd, matched, unmatched, in_single_pattern, true, base_index, use_deconstructed_cache));
+ break;
}
- case NODE_REDO:{
- if (ISEQ_COMPILE_DATA(iseq)->redo_label) {
- LABEL *splabel = NEW_LABEL(0);
- debugs("redo in while");
- ADD_LABEL(ret, splabel);
- ADD_ADJUST(ret, line, ISEQ_COMPILE_DATA(iseq)->redo_label);
- add_ensure_iseq(ret, iseq, 0);
- ADD_INSNL(ret, line, jump, ISEQ_COMPILE_DATA(iseq)->redo_label);
- ADD_ADJUST_RESTORE(ret, splabel);
- if (!poped) {
- ADD_INSN(ret, line, putnil);
- }
- }
- else if (iseq->body->type == ISEQ_TYPE_EVAL) {
- redo_in_eval:
- COMPILE_ERROR(ERROR_ARGS "Can't escape from eval with redo");
- }
- else if (ISEQ_COMPILE_DATA(iseq)->start_label) {
- LABEL *splabel = NEW_LABEL(0);
-
- debugs("redo in block");
- ADD_LABEL(ret, splabel);
- add_ensure_iseq(ret, iseq, 0);
- ADD_ADJUST(ret, line, ISEQ_COMPILE_DATA(iseq)->start_label);
- ADD_INSNL(ret, line, jump, ISEQ_COMPILE_DATA(iseq)->start_label);
- ADD_ADJUST_RESTORE(ret, splabel);
-
- if (!poped) {
- ADD_INSN(ret, line, putnil);
- }
- }
- else {
- const rb_iseq_t *ip = iseq;
- const unsigned long level = VM_THROW_NO_ESCAPE_FLAG;
-
- while (ip) {
- if (!ISEQ_COMPILE_DATA(ip)) {
- ip = 0;
- break;
- }
-
- if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) {
- break;
- }
- else if (ip->body->type == ISEQ_TYPE_BLOCK) {
- break;
- }
- else if (ip->body->type == ISEQ_TYPE_EVAL) {
- goto redo_in_eval;
- }
-
- ip = ip->body->parent_iseq;
- }
- if (ip != 0) {
- ADD_INSN(ret, line, putnil);
- ADD_INSN1(ret, line, throw, INT2FIX(level | TAG_REDO));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- }
- else {
- COMPILE_ERROR(ERROR_ARGS "Invalid redo");
- }
- }
- break;
+ default:
+ UNKNOWN_NODE("NODE_IN", node, COMPILE_NG);
+ }
+ return COMPILE_OK;
+}
+
+static int
+iseq_compile_pattern_match(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, LABEL *unmatched, bool in_single_pattern, bool in_alt_pattern, int base_index, bool use_deconstructed_cache)
+{
+ LABEL *fin = NEW_LABEL(nd_line(node));
+ CHECK(iseq_compile_pattern_each(iseq, ret, node, fin, unmatched, in_single_pattern, in_alt_pattern, base_index, use_deconstructed_cache));
+ ADD_LABEL(ret, fin);
+ return COMPILE_OK;
+}
+
+static int
+iseq_compile_pattern_constant(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, LABEL *match_failed, bool in_single_pattern, int base_index)
+{
+ const NODE *line_node = node;
+
+ if (RNODE_ARYPTN(node)->nd_pconst) {
+ ADD_INSN(ret, line_node, dup); // (1)
+ CHECK(COMPILE(ret, "constant", RNODE_ARYPTN(node)->nd_pconst)); // (2)
+ if (in_single_pattern) {
+ ADD_INSN1(ret, line_node, dupn, INT2FIX(2));
+ }
+ ADD_INSN1(ret, line_node, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE)); // (3)
+ if (in_single_pattern) {
+ CHECK(iseq_compile_pattern_set_eqq_errmsg(iseq, ret, node, base_index + 3 /* (1), (2), (3) */));
+ }
+ ADD_INSNL(ret, line_node, branchunless, match_failed);
+ }
+ return COMPILE_OK;
+}
+
+
+static int
+iseq_compile_array_deconstruct(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, LABEL *deconstruct, LABEL *deconstructed, LABEL *match_failed, LABEL *type_error, bool in_single_pattern, int base_index, bool use_deconstructed_cache)
+{
+ const NODE *line_node = node;
+
+ // NOTE: this optimization allows us to re-use the #deconstruct value
+ // (or its absence).
+ if (use_deconstructed_cache) {
+ // If value is nil then we haven't tried to deconstruct
+ ADD_INSN1(ret, line_node, topn, INT2FIX(base_index + CASE3_BI_OFFSET_DECONSTRUCTED_CACHE));
+ ADD_INSNL(ret, line_node, branchnil, deconstruct);
+
+ // If false then the value is not deconstructable
+ ADD_INSN1(ret, line_node, topn, INT2FIX(base_index + CASE3_BI_OFFSET_DECONSTRUCTED_CACHE));
+ ADD_INSNL(ret, line_node, branchunless, match_failed);
+
+ // Drop value, add deconstructed to the stack and jump
+ ADD_INSN(ret, line_node, pop); // (1)
+ ADD_INSN1(ret, line_node, topn, INT2FIX(base_index + CASE3_BI_OFFSET_DECONSTRUCTED_CACHE - 1 /* (1) */));
+ ADD_INSNL(ret, line_node, jump, deconstructed);
+ }
+ else {
+ ADD_INSNL(ret, line_node, jump, deconstruct);
+ }
+
+ ADD_LABEL(ret, deconstruct);
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSN1(ret, line_node, putobject, ID2SYM(rb_intern("deconstruct")));
+ ADD_SEND(ret, line_node, idRespond_to, INT2FIX(1)); // (2)
+
+ // Cache the result of respond_to? (in case it's false is stays there, if true - it's overwritten after #deconstruct)
+ if (use_deconstructed_cache) {
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_DECONSTRUCTED_CACHE + 1 /* (2) */));
+ }
+
+ if (in_single_pattern) {
+ CHECK(iseq_compile_pattern_set_general_errmsg(iseq, ret, node, rb_fstring_lit("%p does not respond to #deconstruct"), base_index + 1 /* (2) */));
+ }
+
+ ADD_INSNL(ret, line_node, branchunless, match_failed);
+
+ ADD_SEND(ret, line_node, rb_intern("deconstruct"), INT2FIX(0));
+
+ // Cache the result (if it's cacheable - currently, only top-level array patterns)
+ if (use_deconstructed_cache) {
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_DECONSTRUCTED_CACHE));
+ }
+
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSN1(ret, line_node, checktype, INT2FIX(T_ARRAY));
+ ADD_INSNL(ret, line_node, branchunless, type_error);
+
+ ADD_LABEL(ret, deconstructed);
+
+ return COMPILE_OK;
+}
+
+static int
+iseq_compile_pattern_set_general_errmsg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE errmsg, int base_index)
+{
+ /*
+ * if match_succeeded?
+ * goto match_succeeded
+ * end
+ * error_string = FrozenCore.sprintf(errmsg, matchee)
+ * key_error_p = false
+ * match_succeeded:
+ */
+ const int line = nd_line(node);
+ const NODE *line_node = node;
+ LABEL *match_succeeded = NEW_LABEL(line);
+
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSNL(ret, line_node, branchif, match_succeeded);
+
+ ADD_INSN1(ret, line_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line_node, putobject, errmsg);
+ ADD_INSN1(ret, line_node, topn, INT2FIX(3));
+ ADD_SEND(ret, line_node, id_core_sprintf, INT2FIX(2)); // (1)
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_ERROR_STRING + 1 /* (1) */)); // (2)
+
+ ADD_INSN1(ret, line_node, putobject, Qfalse);
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_KEY_ERROR_P + 2 /* (1), (2) */));
+
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSN(ret, line_node, pop);
+ ADD_LABEL(ret, match_succeeded);
+
+ return COMPILE_OK;
+}
+
+static int
+iseq_compile_pattern_set_length_errmsg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE errmsg, VALUE pattern_length, int base_index)
+{
+ /*
+ * if match_succeeded?
+ * goto match_succeeded
+ * end
+ * error_string = FrozenCore.sprintf(errmsg, matchee, matchee.length, pat.length)
+ * key_error_p = false
+ * match_succeeded:
+ */
+ const int line = nd_line(node);
+ const NODE *line_node = node;
+ LABEL *match_succeeded = NEW_LABEL(line);
+
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSNL(ret, line_node, branchif, match_succeeded);
+
+ ADD_INSN1(ret, line_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line_node, putobject, errmsg);
+ ADD_INSN1(ret, line_node, topn, INT2FIX(3));
+ ADD_INSN(ret, line_node, dup);
+ ADD_SEND(ret, line_node, idLength, INT2FIX(0));
+ ADD_INSN1(ret, line_node, putobject, pattern_length);
+ ADD_SEND(ret, line_node, id_core_sprintf, INT2FIX(4)); // (1)
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_ERROR_STRING + 1 /* (1) */)); // (2)
+
+ ADD_INSN1(ret, line_node, putobject, Qfalse);
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_KEY_ERROR_P + 2/* (1), (2) */));
+
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSN(ret, line_node, pop);
+ ADD_LABEL(ret, match_succeeded);
+
+ return COMPILE_OK;
+}
+
+static int
+iseq_compile_pattern_set_eqq_errmsg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int base_index)
+{
+ /*
+ * if match_succeeded?
+ * goto match_succeeded
+ * end
+ * error_string = FrozenCore.sprintf("%p === %p does not return true", pat, matchee)
+ * key_error_p = false
+ * match_succeeded:
+ */
+ const int line = nd_line(node);
+ const NODE *line_node = node;
+ LABEL *match_succeeded = NEW_LABEL(line);
+
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSNL(ret, line_node, branchif, match_succeeded);
+
+ ADD_INSN1(ret, line_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line_node, putobject, rb_fstring_lit("%p === %p does not return true"));
+ ADD_INSN1(ret, line_node, topn, INT2FIX(3));
+ ADD_INSN1(ret, line_node, topn, INT2FIX(5));
+ ADD_SEND(ret, line_node, id_core_sprintf, INT2FIX(3)); // (1)
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_ERROR_STRING + 1 /* (1) */)); // (2)
+
+ ADD_INSN1(ret, line_node, putobject, Qfalse);
+ ADD_INSN1(ret, line_node, setn, INT2FIX(base_index + CASE3_BI_OFFSET_KEY_ERROR_P + 2 /* (1), (2) */));
+
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSN(ret, line_node, pop);
+
+ ADD_LABEL(ret, match_succeeded);
+ ADD_INSN1(ret, line_node, setn, INT2FIX(2));
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSN(ret, line_node, pop);
+
+ return COMPILE_OK;
+}
+
+static int
+compile_case3(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_node, int popped)
+{
+ const NODE *pattern;
+ const NODE *node = orig_node;
+ LABEL *endlabel, *elselabel;
+ DECL_ANCHOR(head);
+ DECL_ANCHOR(body_seq);
+ DECL_ANCHOR(cond_seq);
+ int line;
+ enum node_type type;
+ const NODE *line_node;
+ VALUE branches = 0;
+ int branch_id = 0;
+ bool single_pattern;
+
+ INIT_ANCHOR(head);
+ INIT_ANCHOR(body_seq);
+ INIT_ANCHOR(cond_seq);
+
+ branches = decl_branch_base(iseq, PTR2NUM(node), nd_code_loc(node), "case");
+
+ node = RNODE_CASE3(node)->nd_body;
+ EXPECT_NODE("NODE_CASE3", node, NODE_IN, COMPILE_NG);
+ type = nd_type(node);
+ line = nd_line(node);
+ line_node = node;
+ single_pattern = !RNODE_IN(node)->nd_next;
+
+ endlabel = NEW_LABEL(line);
+ elselabel = NEW_LABEL(line);
+
+ if (single_pattern) {
+ /* allocate stack for ... */
+ ADD_INSN(head, line_node, putnil); /* key_error_key */
+ ADD_INSN(head, line_node, putnil); /* key_error_matchee */
+ ADD_INSN1(head, line_node, putobject, Qfalse); /* key_error_p */
+ ADD_INSN(head, line_node, putnil); /* error_string */
+ }
+ ADD_INSN(head, line_node, putnil); /* allocate stack for cached #deconstruct value */
+
+ CHECK(COMPILE(head, "case base", RNODE_CASE3(orig_node)->nd_head));
+
+ ADD_SEQ(ret, head); /* case VAL */
+
+ while (type == NODE_IN) {
+ LABEL *l1;
+
+ if (branch_id) {
+ ADD_INSN(body_seq, line_node, putnil);
+ }
+ l1 = NEW_LABEL(line);
+ ADD_LABEL(body_seq, l1);
+ ADD_INSN1(body_seq, line_node, adjuststack, INT2FIX(single_pattern ? 6 : 2));
+
+ const NODE *const coverage_node = RNODE_IN(node)->nd_body ? RNODE_IN(node)->nd_body : node;
+ add_trace_branch_coverage(
+ iseq,
+ body_seq,
+ nd_code_loc(coverage_node),
+ nd_node_id(coverage_node),
+ branch_id++,
+ "in",
+ branches);
+
+ CHECK(COMPILE_(body_seq, "in body", RNODE_IN(node)->nd_body, popped));
+ ADD_INSNL(body_seq, line_node, jump, endlabel);
+
+ pattern = RNODE_IN(node)->nd_head;
+ if (pattern) {
+ int pat_line = nd_line(pattern);
+ LABEL *next_pat = NEW_LABEL(pat_line);
+ ADD_INSN (cond_seq, pattern, dup); /* dup case VAL */
+ // NOTE: set base_index (it's "under" the matchee value, so it's position is 2)
+ CHECK(iseq_compile_pattern_each(iseq, cond_seq, pattern, l1, next_pat, single_pattern, false, 2, true));
+ ADD_LABEL(cond_seq, next_pat);
+ LABEL_UNREMOVABLE(next_pat);
+ }
+ else {
+ COMPILE_ERROR(ERROR_ARGS "unexpected node");
+ return COMPILE_NG;
+ }
+
+ node = RNODE_IN(node)->nd_next;
+ if (!node) {
+ break;
+ }
+ type = nd_type(node);
+ line = nd_line(node);
+ line_node = node;
+ }
+ /* else */
+ if (node) {
+ ADD_LABEL(cond_seq, elselabel);
+ ADD_INSN(cond_seq, line_node, pop);
+ ADD_INSN(cond_seq, line_node, pop); /* discard cached #deconstruct value */
+ add_trace_branch_coverage(iseq, cond_seq, nd_code_loc(node), nd_node_id(node), branch_id, "else", branches);
+ CHECK(COMPILE_(cond_seq, "else", node, popped));
+ ADD_INSNL(cond_seq, line_node, jump, endlabel);
+ ADD_INSN(cond_seq, line_node, putnil);
+ if (popped) {
+ ADD_INSN(cond_seq, line_node, putnil);
+ }
+ }
+ else {
+ debugs("== else (implicit)\n");
+ ADD_LABEL(cond_seq, elselabel);
+ add_trace_branch_coverage(iseq, cond_seq, nd_code_loc(orig_node), nd_node_id(orig_node), branch_id, "else", branches);
+ ADD_INSN1(cond_seq, orig_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+
+ if (single_pattern) {
+ /*
+ * if key_error_p
+ * FrozenCore.raise NoMatchingPatternKeyError.new(FrozenCore.sprintf("%p: %s", case_val, error_string), matchee: key_error_matchee, key: key_error_key)
+ * else
+ * FrozenCore.raise NoMatchingPatternError, FrozenCore.sprintf("%p: %s", case_val, error_string)
+ * end
+ */
+ LABEL *key_error, *fin;
+ struct rb_callinfo_kwarg *kw_arg;
+
+ key_error = NEW_LABEL(line);
+ fin = NEW_LABEL(line);
+
+ kw_arg = rb_xmalloc_mul_add(2, sizeof(VALUE), sizeof(struct rb_callinfo_kwarg));
+ kw_arg->references = 0;
+ kw_arg->keyword_len = 2;
+ kw_arg->keywords[0] = ID2SYM(rb_intern("matchee"));
+ kw_arg->keywords[1] = ID2SYM(rb_intern("key"));
+
+ ADD_INSN1(cond_seq, orig_node, topn, INT2FIX(CASE3_BI_OFFSET_KEY_ERROR_P + 2));
+ ADD_INSNL(cond_seq, orig_node, branchif, key_error);
+ ADD_INSN1(cond_seq, orig_node, putobject, rb_eNoMatchingPatternError);
+ ADD_INSN1(cond_seq, orig_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(cond_seq, orig_node, putobject, rb_fstring_lit("%p: %s"));
+ ADD_INSN1(cond_seq, orig_node, topn, INT2FIX(4)); /* case VAL */
+ ADD_INSN1(cond_seq, orig_node, topn, INT2FIX(CASE3_BI_OFFSET_ERROR_STRING + 6));
+ ADD_SEND(cond_seq, orig_node, id_core_sprintf, INT2FIX(3));
+ ADD_SEND(cond_seq, orig_node, id_core_raise, INT2FIX(2));
+ ADD_INSNL(cond_seq, orig_node, jump, fin);
+
+ ADD_LABEL(cond_seq, key_error);
+ ADD_INSN1(cond_seq, orig_node, putobject, rb_eNoMatchingPatternKeyError);
+ ADD_INSN1(cond_seq, orig_node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(cond_seq, orig_node, putobject, rb_fstring_lit("%p: %s"));
+ ADD_INSN1(cond_seq, orig_node, topn, INT2FIX(4)); /* case VAL */
+ ADD_INSN1(cond_seq, orig_node, topn, INT2FIX(CASE3_BI_OFFSET_ERROR_STRING + 6));
+ ADD_SEND(cond_seq, orig_node, id_core_sprintf, INT2FIX(3));
+ ADD_INSN1(cond_seq, orig_node, topn, INT2FIX(CASE3_BI_OFFSET_KEY_ERROR_MATCHEE + 4));
+ ADD_INSN1(cond_seq, orig_node, topn, INT2FIX(CASE3_BI_OFFSET_KEY_ERROR_KEY + 5));
+ ADD_SEND_R(cond_seq, orig_node, rb_intern("new"), INT2FIX(1), NULL, INT2FIX(VM_CALL_KWARG), kw_arg);
+ ADD_SEND(cond_seq, orig_node, id_core_raise, INT2FIX(1));
+
+ ADD_LABEL(cond_seq, fin);
+ }
+ else {
+ ADD_INSN1(cond_seq, orig_node, putobject, rb_eNoMatchingPatternError);
+ ADD_INSN1(cond_seq, orig_node, topn, INT2FIX(2));
+ ADD_SEND(cond_seq, orig_node, id_core_raise, INT2FIX(2));
+ }
+ ADD_INSN1(cond_seq, orig_node, adjuststack, INT2FIX(single_pattern ? 7 : 3));
+ if (!popped) {
+ ADD_INSN(cond_seq, orig_node, putnil);
+ }
+ ADD_INSNL(cond_seq, orig_node, jump, endlabel);
+ ADD_INSN1(cond_seq, orig_node, dupn, INT2FIX(single_pattern ? 5 : 1));
+ if (popped) {
+ ADD_INSN(cond_seq, line_node, putnil);
+ }
+ }
+
+ ADD_SEQ(ret, cond_seq);
+ ADD_SEQ(ret, body_seq);
+ ADD_LABEL(ret, endlabel);
+ return COMPILE_OK;
+}
+
+#undef CASE3_BI_OFFSET_DECONSTRUCTED_CACHE
+#undef CASE3_BI_OFFSET_ERROR_STRING
+#undef CASE3_BI_OFFSET_KEY_ERROR_P
+#undef CASE3_BI_OFFSET_KEY_ERROR_MATCHEE
+#undef CASE3_BI_OFFSET_KEY_ERROR_KEY
+
+static int
+compile_loop(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped, const enum node_type type)
+{
+ const int line = (int)nd_line(node);
+ const NODE *line_node = node;
+
+ LABEL *prev_start_label = ISEQ_COMPILE_DATA(iseq)->start_label;
+ LABEL *prev_end_label = ISEQ_COMPILE_DATA(iseq)->end_label;
+ LABEL *prev_redo_label = ISEQ_COMPILE_DATA(iseq)->redo_label;
+ int prev_loopval_popped = ISEQ_COMPILE_DATA(iseq)->loopval_popped;
+ VALUE branches = Qfalse;
+
+ struct iseq_compile_data_ensure_node_stack enl;
+
+ LABEL *next_label = ISEQ_COMPILE_DATA(iseq)->start_label = NEW_LABEL(line); /* next */
+ LABEL *redo_label = ISEQ_COMPILE_DATA(iseq)->redo_label = NEW_LABEL(line); /* redo */
+ LABEL *break_label = ISEQ_COMPILE_DATA(iseq)->end_label = NEW_LABEL(line); /* break */
+ LABEL *end_label = NEW_LABEL(line);
+ LABEL *adjust_label = NEW_LABEL(line);
+
+ LABEL *next_catch_label = NEW_LABEL(line);
+ LABEL *tmp_label = NULL;
+
+ ISEQ_COMPILE_DATA(iseq)->loopval_popped = 0;
+ push_ensure_entry(iseq, &enl, NULL, NULL);
+
+ if (RNODE_WHILE(node)->nd_state == 1) {
+ ADD_INSNL(ret, line_node, jump, next_label);
+ }
+ else {
+ tmp_label = NEW_LABEL(line);
+ ADD_INSNL(ret, line_node, jump, tmp_label);
+ }
+ ADD_LABEL(ret, adjust_label);
+ ADD_INSN(ret, line_node, putnil);
+ ADD_LABEL(ret, next_catch_label);
+ ADD_INSN(ret, line_node, pop);
+ ADD_INSNL(ret, line_node, jump, next_label);
+ if (tmp_label) ADD_LABEL(ret, tmp_label);
+
+ ADD_LABEL(ret, redo_label);
+ branches = decl_branch_base(iseq, PTR2NUM(node), nd_code_loc(node), type == NODE_WHILE ? "while" : "until");
+
+ const NODE *const coverage_node = RNODE_WHILE(node)->nd_body ? RNODE_WHILE(node)->nd_body : node;
+ add_trace_branch_coverage(
+ iseq,
+ ret,
+ nd_code_loc(coverage_node),
+ nd_node_id(coverage_node),
+ 0,
+ "body",
+ branches);
+
+ CHECK(COMPILE_POPPED(ret, "while body", RNODE_WHILE(node)->nd_body));
+ ADD_LABEL(ret, next_label); /* next */
+
+ if (type == NODE_WHILE) {
+ CHECK(compile_branch_condition(iseq, ret, RNODE_WHILE(node)->nd_cond,
+ redo_label, end_label));
+ }
+ else {
+ /* until */
+ CHECK(compile_branch_condition(iseq, ret, RNODE_WHILE(node)->nd_cond,
+ end_label, redo_label));
+ }
+
+ ADD_LABEL(ret, end_label);
+ ADD_ADJUST_RESTORE(ret, adjust_label);
+
+ if (UNDEF_P(RNODE_WHILE(node)->nd_state)) {
+ /* ADD_INSN(ret, line_node, putundef); */
+ COMPILE_ERROR(ERROR_ARGS "unsupported: putundef");
+ return COMPILE_NG;
+ }
+ else {
+ ADD_INSN(ret, line_node, putnil);
+ }
+
+ ADD_LABEL(ret, break_label); /* break */
+
+ if (popped) {
+ ADD_INSN(ret, line_node, pop);
+ }
+
+ ADD_CATCH_ENTRY(CATCH_TYPE_BREAK, redo_label, break_label, NULL,
+ break_label);
+ ADD_CATCH_ENTRY(CATCH_TYPE_NEXT, redo_label, break_label, NULL,
+ next_catch_label);
+ ADD_CATCH_ENTRY(CATCH_TYPE_REDO, redo_label, break_label, NULL,
+ ISEQ_COMPILE_DATA(iseq)->redo_label);
+
+ ISEQ_COMPILE_DATA(iseq)->start_label = prev_start_label;
+ ISEQ_COMPILE_DATA(iseq)->end_label = prev_end_label;
+ ISEQ_COMPILE_DATA(iseq)->redo_label = prev_redo_label;
+ ISEQ_COMPILE_DATA(iseq)->loopval_popped = prev_loopval_popped;
+ ISEQ_COMPILE_DATA(iseq)->ensure_node_stack = ISEQ_COMPILE_DATA(iseq)->ensure_node_stack->prev;
+ return COMPILE_OK;
+}
+
+static int
+compile_iter(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const int line = nd_line(node);
+ const NODE *line_node = node;
+ const rb_iseq_t *prevblock = ISEQ_COMPILE_DATA(iseq)->current_block;
+ LABEL *retry_label = NEW_LABEL(line);
+ LABEL *retry_end_l = NEW_LABEL(line);
+ const rb_iseq_t *child_iseq;
+
+ ADD_LABEL(ret, retry_label);
+ if (nd_type_p(node, NODE_FOR)) {
+ CHECK(COMPILE(ret, "iter caller (for)", RNODE_FOR(node)->nd_iter));
+
+ ISEQ_COMPILE_DATA(iseq)->current_block = child_iseq =
+ NEW_CHILD_ISEQ(RNODE_FOR(node)->nd_body, make_name_for_block(iseq),
+ ISEQ_TYPE_BLOCK, line);
+ ADD_SEND_WITH_BLOCK(ret, line_node, idEach, INT2FIX(0), child_iseq);
+ }
+ else {
+ ISEQ_COMPILE_DATA(iseq)->current_block = child_iseq =
+ NEW_CHILD_ISEQ(RNODE_ITER(node)->nd_body, make_name_for_block(iseq),
+ ISEQ_TYPE_BLOCK, line);
+ CHECK(COMPILE(ret, "iter caller", RNODE_ITER(node)->nd_iter));
+ }
+
+ {
+ // We need to put the label "retry_end_l" immediately after the last "send" instruction.
+ // This because vm_throw checks if the break cont is equal to the index of next insn of the "send".
+ // (Otherwise, it is considered "break from proc-closure". See "TAG_BREAK" handling in "vm_throw_start".)
+ //
+ // Normally, "send" instruction is at the last.
+ // However, qcall under branch coverage measurement adds some instructions after the "send".
+ //
+ // Note that "invokesuper", "invokesuperforward" appears instead of "send".
+ INSN *iobj;
+ LINK_ELEMENT *last_elem = LAST_ELEMENT(ret);
+ iobj = IS_INSN(last_elem) ? (INSN*) last_elem : (INSN*) get_prev_insn((INSN*) last_elem);
+ while (!IS_INSN_ID(iobj, send) && !IS_INSN_ID(iobj, invokesuper) && !IS_INSN_ID(iobj, sendforward) && !IS_INSN_ID(iobj, invokesuperforward)) {
+ iobj = (INSN*) get_prev_insn(iobj);
+ }
+ ELEM_INSERT_NEXT(&iobj->link, (LINK_ELEMENT*) retry_end_l);
+
+ // LINK_ANCHOR has a pointer to the last element, but ELEM_INSERT_NEXT does not update it
+ // even if we add an insn to the last of LINK_ANCHOR. So this updates it manually.
+ if (&iobj->link == LAST_ELEMENT(ret)) {
+ ret->last = (LINK_ELEMENT*) retry_end_l;
+ }
+ }
+
+ if (popped) {
+ ADD_INSN(ret, line_node, pop);
+ }
+
+ ISEQ_COMPILE_DATA(iseq)->current_block = prevblock;
+
+ ADD_CATCH_ENTRY(CATCH_TYPE_BREAK, retry_label, retry_end_l, child_iseq, retry_end_l);
+ return COMPILE_OK;
+}
+
+static int
+compile_for_masgn(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ /* massign to var in "for"
+ * (args.length == 1 && Array.try_convert(args[0])) || args
+ */
+ const NODE *line_node = node;
+ const NODE *var = RNODE_FOR_MASGN(node)->nd_var;
+ LABEL *not_single = NEW_LABEL(nd_line(var));
+ LABEL *not_ary = NEW_LABEL(nd_line(var));
+ CHECK(COMPILE(ret, "for var", var));
+ ADD_INSN(ret, line_node, dup);
+ ADD_CALL(ret, line_node, idLength, INT2FIX(0));
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(1));
+ ADD_CALL(ret, line_node, idEq, INT2FIX(1));
+ ADD_INSNL(ret, line_node, branchunless, not_single);
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSN1(ret, line_node, putobject, INT2FIX(0));
+ ADD_CALL(ret, line_node, idAREF, INT2FIX(1));
+ ADD_INSN1(ret, line_node, putobject, rb_cArray);
+ ADD_INSN(ret, line_node, swap);
+ ADD_CALL(ret, line_node, rb_intern("try_convert"), INT2FIX(1));
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSNL(ret, line_node, branchunless, not_ary);
+ ADD_INSN(ret, line_node, swap);
+ ADD_LABEL(ret, not_ary);
+ ADD_INSN(ret, line_node, pop);
+ ADD_LABEL(ret, not_single);
+ return COMPILE_OK;
+}
+
+static int
+compile_break(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const NODE *line_node = node;
+ unsigned long throw_flag = 0;
+
+ if (ISEQ_COMPILE_DATA(iseq)->redo_label != 0 && can_add_ensure_iseq(iseq)) {
+ /* while/until */
+ LABEL *splabel = NEW_LABEL(0);
+ ADD_LABEL(ret, splabel);
+ ADD_ADJUST(ret, line_node, ISEQ_COMPILE_DATA(iseq)->redo_label);
+ CHECK(COMPILE_(ret, "break val (while/until)", RNODE_BREAK(node)->nd_stts,
+ ISEQ_COMPILE_DATA(iseq)->loopval_popped));
+ add_ensure_iseq(ret, iseq, 0);
+ ADD_INSNL(ret, line_node, jump, ISEQ_COMPILE_DATA(iseq)->end_label);
+ ADD_ADJUST_RESTORE(ret, splabel);
+
+ if (!popped) {
+ ADD_INSN(ret, line_node, putnil);
+ }
+ }
+ else {
+ const rb_iseq_t *ip = iseq;
+
+ while (ip) {
+ if (!ISEQ_COMPILE_DATA(ip)) {
+ ip = 0;
+ break;
+ }
+
+ if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) {
+ throw_flag = VM_THROW_NO_ESCAPE_FLAG;
+ }
+ else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_BLOCK) {
+ throw_flag = 0;
+ }
+ else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_EVAL) {
+ COMPILE_ERROR(ERROR_ARGS "Can't escape from eval with break");
+ return COMPILE_NG;
+ }
+ else {
+ ip = ISEQ_BODY(ip)->parent_iseq;
+ continue;
+ }
+
+ /* escape from block */
+ CHECK(COMPILE(ret, "break val (block)", RNODE_BREAK(node)->nd_stts));
+ ADD_INSN1(ret, line_node, throw, INT2FIX(throw_flag | TAG_BREAK));
+ if (popped) {
+ ADD_INSN(ret, line_node, pop);
+ }
+ return COMPILE_OK;
+ }
+ COMPILE_ERROR(ERROR_ARGS "Invalid break");
+ return COMPILE_NG;
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_next(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const NODE *line_node = node;
+ unsigned long throw_flag = 0;
+
+ if (ISEQ_COMPILE_DATA(iseq)->redo_label != 0 && can_add_ensure_iseq(iseq)) {
+ LABEL *splabel = NEW_LABEL(0);
+ debugs("next in while loop\n");
+ ADD_LABEL(ret, splabel);
+ CHECK(COMPILE(ret, "next val/valid syntax?", RNODE_NEXT(node)->nd_stts));
+ add_ensure_iseq(ret, iseq, 0);
+ ADD_ADJUST(ret, line_node, ISEQ_COMPILE_DATA(iseq)->redo_label);
+ ADD_INSNL(ret, line_node, jump, ISEQ_COMPILE_DATA(iseq)->start_label);
+ ADD_ADJUST_RESTORE(ret, splabel);
+ if (!popped) {
+ ADD_INSN(ret, line_node, putnil);
+ }
+ }
+ else if (ISEQ_COMPILE_DATA(iseq)->end_label && can_add_ensure_iseq(iseq)) {
+ LABEL *splabel = NEW_LABEL(0);
+ debugs("next in block\n");
+ ADD_LABEL(ret, splabel);
+ ADD_ADJUST(ret, line_node, ISEQ_COMPILE_DATA(iseq)->start_label);
+ CHECK(COMPILE(ret, "next val", RNODE_NEXT(node)->nd_stts));
+ add_ensure_iseq(ret, iseq, 0);
+ ADD_INSNL(ret, line_node, jump, ISEQ_COMPILE_DATA(iseq)->end_label);
+ ADD_ADJUST_RESTORE(ret, splabel);
+
+ if (!popped) {
+ ADD_INSN(ret, line_node, putnil);
+ }
+ }
+ else {
+ const rb_iseq_t *ip = iseq;
+
+ while (ip) {
+ if (!ISEQ_COMPILE_DATA(ip)) {
+ ip = 0;
+ break;
+ }
+
+ throw_flag = VM_THROW_NO_ESCAPE_FLAG;
+ if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) {
+ /* while loop */
+ break;
+ }
+ else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_BLOCK) {
+ break;
+ }
+ else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_EVAL) {
+ COMPILE_ERROR(ERROR_ARGS "Can't escape from eval with next");
+ return COMPILE_NG;
+ }
+
+ ip = ISEQ_BODY(ip)->parent_iseq;
+ }
+ if (ip != 0) {
+ CHECK(COMPILE(ret, "next val", RNODE_NEXT(node)->nd_stts));
+ ADD_INSN1(ret, line_node, throw, INT2FIX(throw_flag | TAG_NEXT));
+
+ if (popped) {
+ ADD_INSN(ret, line_node, pop);
+ }
+ }
+ else {
+ COMPILE_ERROR(ERROR_ARGS "Invalid next");
+ return COMPILE_NG;
+ }
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_redo(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const NODE *line_node = node;
+
+ if (ISEQ_COMPILE_DATA(iseq)->redo_label && can_add_ensure_iseq(iseq)) {
+ LABEL *splabel = NEW_LABEL(0);
+ debugs("redo in while");
+ ADD_LABEL(ret, splabel);
+ ADD_ADJUST(ret, line_node, ISEQ_COMPILE_DATA(iseq)->redo_label);
+ add_ensure_iseq(ret, iseq, 0);
+ ADD_INSNL(ret, line_node, jump, ISEQ_COMPILE_DATA(iseq)->redo_label);
+ ADD_ADJUST_RESTORE(ret, splabel);
+ if (!popped) {
+ ADD_INSN(ret, line_node, putnil);
+ }
+ }
+ else if (ISEQ_BODY(iseq)->type != ISEQ_TYPE_EVAL && ISEQ_COMPILE_DATA(iseq)->start_label && can_add_ensure_iseq(iseq)) {
+ LABEL *splabel = NEW_LABEL(0);
+
+ debugs("redo in block");
+ ADD_LABEL(ret, splabel);
+ add_ensure_iseq(ret, iseq, 0);
+ ADD_ADJUST(ret, line_node, ISEQ_COMPILE_DATA(iseq)->start_label);
+ ADD_INSNL(ret, line_node, jump, ISEQ_COMPILE_DATA(iseq)->start_label);
+ ADD_ADJUST_RESTORE(ret, splabel);
+
+ if (!popped) {
+ ADD_INSN(ret, line_node, putnil);
+ }
+ }
+ else {
+ const rb_iseq_t *ip = iseq;
+
+ while (ip) {
+ if (!ISEQ_COMPILE_DATA(ip)) {
+ ip = 0;
+ break;
+ }
+
+ if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) {
+ break;
+ }
+ else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_BLOCK) {
+ break;
+ }
+ else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_EVAL) {
+ COMPILE_ERROR(ERROR_ARGS "Can't escape from eval with redo");
+ return COMPILE_NG;
+ }
+
+ ip = ISEQ_BODY(ip)->parent_iseq;
+ }
+ if (ip != 0) {
+ ADD_INSN(ret, line_node, putnil);
+ ADD_INSN1(ret, line_node, throw, INT2FIX(VM_THROW_NO_ESCAPE_FLAG | TAG_REDO));
+
+ if (popped) {
+ ADD_INSN(ret, line_node, pop);
+ }
+ }
+ else {
+ COMPILE_ERROR(ERROR_ARGS "Invalid redo");
+ return COMPILE_NG;
+ }
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_retry(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const NODE *line_node = node;
+
+ if (ISEQ_BODY(iseq)->type == ISEQ_TYPE_RESCUE) {
+ ADD_INSN(ret, line_node, putnil);
+ ADD_INSN1(ret, line_node, throw, INT2FIX(TAG_RETRY));
+
+ if (popped) {
+ ADD_INSN(ret, line_node, pop);
+ }
+ }
+ else {
+ COMPILE_ERROR(ERROR_ARGS "Invalid retry");
+ return COMPILE_NG;
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_rescue(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const int line = nd_line(node);
+ const NODE *line_node = node;
+ LABEL *lstart = NEW_LABEL(line);
+ LABEL *lend = NEW_LABEL(line);
+ LABEL *lcont = NEW_LABEL(line);
+ const rb_iseq_t *rescue = NEW_CHILD_ISEQ(RNODE_RESCUE(node)->nd_resq,
+ rb_str_concat(rb_str_new2("rescue in "),
+ ISEQ_BODY(iseq)->location.label),
+ ISEQ_TYPE_RESCUE, line);
+
+ lstart->rescued = LABEL_RESCUE_BEG;
+ lend->rescued = LABEL_RESCUE_END;
+ ADD_LABEL(ret, lstart);
+
+ bool prev_in_rescue = ISEQ_COMPILE_DATA(iseq)->in_rescue;
+ ISEQ_COMPILE_DATA(iseq)->in_rescue = true;
+ {
+ CHECK(COMPILE(ret, "rescue head", RNODE_RESCUE(node)->nd_head));
+ }
+ ISEQ_COMPILE_DATA(iseq)->in_rescue = prev_in_rescue;
+
+ ADD_LABEL(ret, lend);
+ if (RNODE_RESCUE(node)->nd_else) {
+ ADD_INSN(ret, line_node, pop);
+ CHECK(COMPILE(ret, "rescue else", RNODE_RESCUE(node)->nd_else));
+ }
+ ADD_INSN(ret, line_node, nop);
+ ADD_LABEL(ret, lcont);
+
+ if (popped) {
+ ADD_INSN(ret, line_node, pop);
+ }
+
+ /* register catch entry */
+ ADD_CATCH_ENTRY(CATCH_TYPE_RESCUE, lstart, lend, rescue, lcont);
+ ADD_CATCH_ENTRY(CATCH_TYPE_RETRY, lend, lcont, NULL, lstart);
+ return COMPILE_OK;
+}
+
+static int
+compile_resbody(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const int line = nd_line(node);
+ const NODE *line_node = node;
+ const NODE *resq = node;
+ const NODE *narg;
+ LABEL *label_miss, *label_hit;
+
+ while (resq) {
+ label_miss = NEW_LABEL(line);
+ label_hit = NEW_LABEL(line);
+
+ narg = RNODE_RESBODY(resq)->nd_args;
+ if (narg) {
+ switch (nd_type(narg)) {
+ case NODE_LIST:
+ while (narg) {
+ ADD_GETLOCAL(ret, line_node, LVAR_ERRINFO, 0);
+ CHECK(COMPILE(ret, "rescue arg", RNODE_LIST(narg)->nd_head));
+ ADD_INSN1(ret, line_node, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE));
+ ADD_INSNL(ret, line_node, branchif, label_hit);
+ narg = RNODE_LIST(narg)->nd_next;
+ }
+ break;
+ case NODE_SPLAT:
+ case NODE_ARGSCAT:
+ case NODE_ARGSPUSH:
+ ADD_GETLOCAL(ret, line_node, LVAR_ERRINFO, 0);
+ CHECK(COMPILE(ret, "rescue/cond splat", narg));
+ ADD_INSN1(ret, line_node, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE | VM_CHECKMATCH_ARRAY));
+ ADD_INSNL(ret, line_node, branchif, label_hit);
+ break;
+ default:
+ UNKNOWN_NODE("NODE_RESBODY", narg, COMPILE_NG);
+ }
+ }
+ else {
+ ADD_GETLOCAL(ret, line_node, LVAR_ERRINFO, 0);
+ ADD_INSN1(ret, line_node, putobject, rb_eStandardError);
+ ADD_INSN1(ret, line_node, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE));
+ ADD_INSNL(ret, line_node, branchif, label_hit);
+ }
+ ADD_INSNL(ret, line_node, jump, label_miss);
+ ADD_LABEL(ret, label_hit);
+ ADD_TRACE(ret, RUBY_EVENT_RESCUE);
+
+ if (RNODE_RESBODY(resq)->nd_exc_var) {
+ CHECK(COMPILE_POPPED(ret, "resbody exc_var", RNODE_RESBODY(resq)->nd_exc_var));
+ }
+
+ if (nd_type(RNODE_RESBODY(resq)->nd_body) == NODE_BEGIN && RNODE_BEGIN(RNODE_RESBODY(resq)->nd_body)->nd_body == NULL && !RNODE_RESBODY(resq)->nd_exc_var) {
+ // empty body
+ ADD_SYNTHETIC_INSN(ret, nd_line(RNODE_RESBODY(resq)->nd_body), -1, putnil);
+ }
+ else {
+ CHECK(COMPILE(ret, "resbody body", RNODE_RESBODY(resq)->nd_body));
+ }
+
+ if (ISEQ_COMPILE_DATA(iseq)->option->tailcall_optimization) {
+ ADD_INSN(ret, line_node, nop);
+ }
+ ADD_INSN(ret, line_node, leave);
+ ADD_LABEL(ret, label_miss);
+ resq = RNODE_RESBODY(resq)->nd_next;
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_ensure(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const int line = nd_line(RNODE_ENSURE(node)->nd_ensr);
+ const NODE *line_node = node;
+ DECL_ANCHOR(ensr);
+ const rb_iseq_t *ensure = NEW_CHILD_ISEQ(RNODE_ENSURE(node)->nd_ensr,
+ rb_str_concat(rb_str_new2 ("ensure in "), ISEQ_BODY(iseq)->location.label),
+ ISEQ_TYPE_ENSURE, line);
+ LABEL *lstart = NEW_LABEL(line);
+ LABEL *lend = NEW_LABEL(line);
+ LABEL *lcont = NEW_LABEL(line);
+ LINK_ELEMENT *last;
+ int last_leave = 0;
+ struct ensure_range er;
+ struct iseq_compile_data_ensure_node_stack enl;
+ struct ensure_range *erange;
+
+ INIT_ANCHOR(ensr);
+ CHECK(COMPILE_POPPED(ensr, "ensure ensr", RNODE_ENSURE(node)->nd_ensr));
+ last = ensr->last;
+ last_leave = last && IS_INSN(last) && IS_INSN_ID(last, leave);
+
+ er.begin = lstart;
+ er.end = lend;
+ er.next = 0;
+ push_ensure_entry(iseq, &enl, &er, RNODE_ENSURE(node)->nd_ensr);
+
+ ADD_LABEL(ret, lstart);
+ CHECK(COMPILE_(ret, "ensure head", RNODE_ENSURE(node)->nd_head, (popped | last_leave)));
+ ADD_LABEL(ret, lend);
+ ADD_SEQ(ret, ensr);
+ if (!popped && last_leave) ADD_INSN(ret, line_node, putnil);
+ ADD_LABEL(ret, lcont);
+ if (last_leave) ADD_INSN(ret, line_node, pop);
+
+ erange = ISEQ_COMPILE_DATA(iseq)->ensure_node_stack->erange;
+ if (lstart->link.next != &lend->link) {
+ while (erange) {
+ ADD_CATCH_ENTRY(CATCH_TYPE_ENSURE, erange->begin, erange->end,
+ ensure, lcont);
+ erange = erange->next;
+ }
+ }
+
+ ISEQ_COMPILE_DATA(iseq)->ensure_node_stack = enl.prev;
+ return COMPILE_OK;
+}
+
+static int
+compile_return(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const NODE *line_node = node;
+
+ if (iseq) {
+ enum rb_iseq_type type = ISEQ_BODY(iseq)->type;
+ const rb_iseq_t *is = iseq;
+ enum rb_iseq_type t = type;
+ const NODE *retval = RNODE_RETURN(node)->nd_stts;
+ LABEL *splabel = 0;
+
+ while (t == ISEQ_TYPE_RESCUE || t == ISEQ_TYPE_ENSURE) {
+ if (!(is = ISEQ_BODY(is)->parent_iseq)) break;
+ t = ISEQ_BODY(is)->type;
+ }
+ switch (t) {
+ case ISEQ_TYPE_TOP:
+ case ISEQ_TYPE_MAIN:
+ if (retval) {
+ rb_warn("argument of top-level return is ignored");
+ }
+ if (is == iseq) {
+ /* plain top-level, leave directly */
+ type = ISEQ_TYPE_METHOD;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (type == ISEQ_TYPE_METHOD) {
+ splabel = NEW_LABEL(0);
+ ADD_LABEL(ret, splabel);
+ ADD_ADJUST(ret, line_node, 0);
+ }
+
+ CHECK(COMPILE(ret, "return nd_stts (return val)", retval));
+
+ if (type == ISEQ_TYPE_METHOD && can_add_ensure_iseq(iseq)) {
+ add_ensure_iseq(ret, iseq, 1);
+ ADD_TRACE(ret, RUBY_EVENT_RETURN);
+ ADD_INSN(ret, line_node, leave);
+ ADD_ADJUST_RESTORE(ret, splabel);
+
+ if (!popped) {
+ ADD_INSN(ret, line_node, putnil);
+ }
+ }
+ else {
+ ADD_INSN1(ret, line_node, throw, INT2FIX(TAG_RETURN));
+ if (popped) {
+ ADD_INSN(ret, line_node, pop);
+ }
+ }
+ }
+ return COMPILE_OK;
+}
+
+static bool
+drop_unreachable_return(LINK_ANCHOR *ret)
+{
+ LINK_ELEMENT *i = ret->last, *last;
+ if (!i) return false;
+ if (IS_TRACE(i)) i = i->prev;
+ if (!IS_INSN(i) || !IS_INSN_ID(i, putnil)) return false;
+ last = i = i->prev;
+ if (IS_ADJUST(i)) i = i->prev;
+ if (!IS_INSN(i)) return false;
+ switch (INSN_OF(i)) {
+ case BIN(leave):
+ case BIN(jump):
+ break;
+ default:
+ return false;
+ }
+ (ret->last = last->prev)->next = NULL;
+ return true;
+}
+
+static int
+compile_evstr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ CHECK(COMPILE_(ret, "nd_body", node, popped));
+
+ if (!popped && !all_string_result_p(node)) {
+ const NODE *line_node = node;
+ const unsigned int flag = VM_CALL_FCALL;
+
+ // Note, this dup could be removed if we are willing to change anytostring. It pops
+ // two VALUEs off the stack when it could work by replacing the top most VALUE.
+ ADD_INSN(ret, line_node, dup);
+ ADD_INSN1(ret, line_node, objtostring, new_callinfo(iseq, idTo_s, 0, flag, NULL, FALSE));
+ ADD_INSN(ret, line_node, anytostring);
+ }
+ return COMPILE_OK;
+}
+
+static void
+compile_lvar(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *line_node, ID id)
+{
+ int idx = ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq)->local_table_size - get_local_var_idx(iseq, id);
+
+ debugs("id: %s idx: %d\n", rb_id2name(id), idx);
+ ADD_GETLOCAL(ret, line_node, idx, get_lvar_level(iseq));
+}
+
+static LABEL *
+qcall_branch_start(rb_iseq_t *iseq, LINK_ANCHOR *const recv, VALUE *branches, const NODE *node, const NODE *line_node)
+{
+ LABEL *else_label = NEW_LABEL(nd_line(line_node));
+ VALUE br = 0;
+
+ br = decl_branch_base(iseq, PTR2NUM(node), nd_code_loc(node), "&.");
+ *branches = br;
+ ADD_INSN(recv, line_node, dup);
+ ADD_INSNL(recv, line_node, branchnil, else_label);
+ add_trace_branch_coverage(iseq, recv, nd_code_loc(node), nd_node_id(node), 0, "then", br);
+ return else_label;
+}
+
+static void
+qcall_branch_end(rb_iseq_t *iseq, LINK_ANCHOR *const ret, LABEL *else_label, VALUE branches, const NODE *node, const NODE *line_node)
+{
+ LABEL *end_label;
+ if (!else_label) return;
+ end_label = NEW_LABEL(nd_line(line_node));
+ ADD_INSNL(ret, line_node, jump, end_label);
+ ADD_LABEL(ret, else_label);
+ add_trace_branch_coverage(iseq, ret, nd_code_loc(node), nd_node_id(node), 1, "else", branches);
+ ADD_LABEL(ret, end_label);
+}
+
+static int
+compile_call_precheck_freeze(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, const NODE *line_node, int popped)
+{
+ /* optimization shortcut
+ * "literal".freeze -> opt_str_freeze("literal")
+ */
+ if (get_nd_recv(node) &&
+ (nd_type_p(get_nd_recv(node), NODE_STR) || nd_type_p(get_nd_recv(node), NODE_FILE)) &&
+ (get_node_call_nd_mid(node) == idFreeze || get_node_call_nd_mid(node) == idUMinus) &&
+ get_nd_args(node) == NULL &&
+ ISEQ_COMPILE_DATA(iseq)->current_block == NULL &&
+ ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction) {
+ VALUE str = get_string_value(get_nd_recv(node));
+ if (get_node_call_nd_mid(node) == idUMinus) {
+ ADD_INSN2(ret, line_node, opt_str_uminus, str,
+ new_callinfo(iseq, idUMinus, 0, 0, NULL, FALSE));
+ }
+ else {
+ ADD_INSN2(ret, line_node, opt_str_freeze, str,
+ new_callinfo(iseq, idFreeze, 0, 0, NULL, FALSE));
+ }
+ RB_OBJ_WRITTEN(iseq, Qundef, str);
+ if (popped) {
+ ADD_INSN(ret, line_node, pop);
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static int
+iseq_has_builtin_function_table(const rb_iseq_t *iseq)
+{
+ return ISEQ_COMPILE_DATA(iseq)->builtin_function_table != NULL;
+}
+
+static const struct rb_builtin_function *
+iseq_builtin_function_lookup(const rb_iseq_t *iseq, const char *name)
+{
+ int i;
+ const struct rb_builtin_function *table = ISEQ_COMPILE_DATA(iseq)->builtin_function_table;
+ for (i=0; table[i].index != -1; i++) {
+ if (strcmp(table[i].name, name) == 0) {
+ return &table[i];
+ }
+ }
+ return NULL;
+}
+
+static const char *
+iseq_builtin_function_name(const enum node_type type, const NODE *recv, ID mid)
+{
+ const char *name = rb_id2name(mid);
+ static const char prefix[] = "__builtin_";
+ const size_t prefix_len = sizeof(prefix) - 1;
+
+ switch (type) {
+ case NODE_CALL:
+ if (recv) {
+ switch (nd_type(recv)) {
+ case NODE_VCALL:
+ if (RNODE_VCALL(recv)->nd_mid == rb_intern("__builtin")) {
+ return name;
+ }
+ break;
+ case NODE_CONST:
+ if (RNODE_CONST(recv)->nd_vid == rb_intern("Primitive")) {
+ return name;
+ }
+ break;
+ default: break;
+ }
+ }
+ break;
+ case NODE_VCALL:
+ case NODE_FCALL:
+ if (UNLIKELY(strncmp(prefix, name, prefix_len) == 0)) {
+ return &name[prefix_len];
+ }
+ break;
+ default: break;
+ }
+ return NULL;
+}
+
+static int
+delegate_call_p(const rb_iseq_t *iseq, unsigned int argc, const LINK_ANCHOR *args, unsigned int *pstart_index)
+{
+
+ if (argc == 0) {
+ *pstart_index = 0;
+ return TRUE;
+ }
+ else if (argc <= ISEQ_BODY(iseq)->local_table_size) {
+ unsigned int start=0;
+
+ // local_table: [p1, p2, p3, l1, l2, l3]
+ // arguments: [p3, l1, l2] -> 2
+ for (start = 0;
+ argc + start <= ISEQ_BODY(iseq)->local_table_size;
+ start++) {
+ const LINK_ELEMENT *elem = FIRST_ELEMENT(args);
+
+ for (unsigned int i=start; i-start<argc; i++) {
+ if (IS_INSN(elem) &&
+ INSN_OF(elem) == BIN(getlocal)) {
+ int local_index = FIX2INT(OPERAND_AT(elem, 0));
+ int local_level = FIX2INT(OPERAND_AT(elem, 1));
+
+ if (local_level == 0) {
+ unsigned int index = ISEQ_BODY(iseq)->local_table_size - (local_index - VM_ENV_DATA_SIZE + 1);
+ if (0) { // for debug
+ fprintf(stderr, "lvar:%s (%d), id:%s (%d) local_index:%d, local_size:%d\n",
+ rb_id2name(ISEQ_BODY(iseq)->local_table[i]), i,
+ rb_id2name(ISEQ_BODY(iseq)->local_table[index]), index,
+ local_index, (int)ISEQ_BODY(iseq)->local_table_size);
+ }
+ if (i == index) {
+ elem = elem->next;
+ continue; /* for */
+ }
+ else {
+ goto next;
+ }
+ }
+ else {
+ goto fail; // level != 0 is unsupported
+ }
+ }
+ else {
+ goto fail; // insn is not a getlocal
+ }
+ }
+ goto success;
+ next:;
+ }
+ fail:
+ return FALSE;
+ success:
+ *pstart_index = start;
+ return TRUE;
+ }
+ else {
+ return FALSE;
+ }
+}
+
+// Compile Primitive.attr! :leaf, ...
+static int
+compile_builtin_attr(rb_iseq_t *iseq, const NODE *node)
+{
+ VALUE symbol;
+ VALUE string;
+ if (!node) goto no_arg;
+ while (node) {
+ if (!nd_type_p(node, NODE_LIST)) goto bad_arg;
+ const NODE *next = RNODE_LIST(node)->nd_next;
+
+ node = RNODE_LIST(node)->nd_head;
+ if (!node) goto no_arg;
+ switch (nd_type(node)) {
+ case NODE_SYM:
+ symbol = rb_node_sym_string_val(node);
+ break;
+ default:
+ goto bad_arg;
+ }
+
+ if (!SYMBOL_P(symbol)) goto non_symbol_arg;
+
+ string = rb_sym2str(symbol);
+ if (strcmp(RSTRING_PTR(string), "leaf") == 0) {
+ ISEQ_BODY(iseq)->builtin_attrs |= BUILTIN_ATTR_LEAF;
+ }
+ else if (strcmp(RSTRING_PTR(string), "inline_block") == 0) {
+ ISEQ_BODY(iseq)->builtin_attrs |= BUILTIN_ATTR_INLINE_BLOCK;
+ }
+ else if (strcmp(RSTRING_PTR(string), "use_block") == 0) {
+ iseq_set_use_block(iseq);
+ }
+ else if (strcmp(RSTRING_PTR(string), "c_trace") == 0) {
+ // Let the iseq act like a C method in backtraces
+ ISEQ_BODY(iseq)->builtin_attrs |= BUILTIN_ATTR_C_TRACE;
+ }
+ else {
+ goto unknown_arg;
+ }
+ node = next;
+ }
+ return COMPILE_OK;
+ no_arg:
+ COMPILE_ERROR(ERROR_ARGS "attr!: no argument");
+ return COMPILE_NG;
+ non_symbol_arg:
+ COMPILE_ERROR(ERROR_ARGS "non symbol argument to attr!: %s", rb_builtin_class_name(symbol));
+ return COMPILE_NG;
+ unknown_arg:
+ COMPILE_ERROR(ERROR_ARGS "unknown argument to attr!: %s", RSTRING_PTR(string));
+ return COMPILE_NG;
+ bad_arg:
+ UNKNOWN_NODE("attr!", node, COMPILE_NG);
+}
+
+static int
+compile_builtin_arg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, const NODE *line_node, int popped)
+{
+ VALUE name;
+
+ if (!node) goto no_arg;
+ if (!nd_type_p(node, NODE_LIST)) goto bad_arg;
+ if (RNODE_LIST(node)->nd_next) goto too_many_arg;
+ node = RNODE_LIST(node)->nd_head;
+ if (!node) goto no_arg;
+ switch (nd_type(node)) {
+ case NODE_SYM:
+ name = rb_node_sym_string_val(node);
+ break;
+ default:
+ goto bad_arg;
+ }
+ if (!SYMBOL_P(name)) goto non_symbol_arg;
+ if (!popped) {
+ compile_lvar(iseq, ret, line_node, SYM2ID(name));
+ }
+ return COMPILE_OK;
+ no_arg:
+ COMPILE_ERROR(ERROR_ARGS "arg!: no argument");
+ return COMPILE_NG;
+ too_many_arg:
+ COMPILE_ERROR(ERROR_ARGS "arg!: too many argument");
+ return COMPILE_NG;
+ non_symbol_arg:
+ COMPILE_ERROR(ERROR_ARGS "non symbol argument to arg!: %s",
+ rb_builtin_class_name(name));
+ return COMPILE_NG;
+ bad_arg:
+ UNKNOWN_NODE("arg!", node, COMPILE_NG);
+}
+
+static NODE *
+mandatory_node(const rb_iseq_t *iseq, const NODE *cond_node)
+{
+ const NODE *node = ISEQ_COMPILE_DATA(iseq)->root_node;
+ if (nd_type(node) == NODE_IF && RNODE_IF(node)->nd_cond == cond_node) {
+ return RNODE_IF(node)->nd_body;
+ }
+ else {
+ rb_bug("mandatory_node: can't find mandatory node");
+ }
+}
+
+static int
+compile_builtin_mandatory_only_method(rb_iseq_t *iseq, const NODE *node, const NODE *line_node)
+{
+ // arguments
+ struct rb_args_info args = {
+ .pre_args_num = ISEQ_BODY(iseq)->param.lead_num,
+ };
+ rb_node_args_t args_node;
+ rb_node_init(RNODE(&args_node), NODE_ARGS);
+ args_node.nd_ainfo = args;
+
+ // local table without non-mandatory parameters
+ const int skip_local_size = ISEQ_BODY(iseq)->param.size - ISEQ_BODY(iseq)->param.lead_num;
+ const int table_size = ISEQ_BODY(iseq)->local_table_size - skip_local_size;
+
+ VALUE idtmp = 0;
+ rb_ast_id_table_t *tbl = ALLOCV(idtmp, sizeof(rb_ast_id_table_t) + table_size * sizeof(ID));
+ tbl->size = table_size;
+
+ int i;
+
+ // lead parameters
+ for (i=0; i<ISEQ_BODY(iseq)->param.lead_num; i++) {
+ tbl->ids[i] = ISEQ_BODY(iseq)->local_table[i];
+ }
+ // local variables
+ for (; i<table_size; i++) {
+ tbl->ids[i] = ISEQ_BODY(iseq)->local_table[i + skip_local_size];
+ }
+
+ rb_node_scope_t scope_node;
+ rb_node_init(RNODE(&scope_node), NODE_SCOPE);
+ scope_node.nd_tbl = tbl;
+ scope_node.nd_body = mandatory_node(iseq, node);
+ scope_node.nd_parent = NULL;
+ scope_node.nd_args = &args_node;
+
+ VALUE ast_value = rb_ruby_ast_new(RNODE(&scope_node));
+
+ const rb_iseq_t *mandatory_only_iseq =
+ rb_iseq_new_with_opt(ast_value, rb_iseq_base_label(iseq),
+ rb_iseq_path(iseq), rb_iseq_realpath(iseq),
+ nd_line(line_node), NULL, 0,
+ ISEQ_TYPE_METHOD, ISEQ_COMPILE_DATA(iseq)->option,
+ ISEQ_BODY(iseq)->variable.script_lines);
+ RB_OBJ_WRITE(iseq, &ISEQ_BODY(iseq)->mandatory_only_iseq, (VALUE)mandatory_only_iseq);
+
+ ALLOCV_END(idtmp);
+ return COMPILE_OK;
+}
+
+static int
+compile_builtin_function_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, const NODE *line_node, int popped,
+ const rb_iseq_t *parent_block, LINK_ANCHOR *args, const char *builtin_func)
+{
+ NODE *args_node = get_nd_args(node);
+
+ if (parent_block != NULL) {
+ COMPILE_ERROR(ERROR_ARGS_AT(line_node) "should not call builtins here.");
+ return COMPILE_NG;
+ }
+ else {
+# define BUILTIN_INLINE_PREFIX "_bi"
+ char inline_func[sizeof(BUILTIN_INLINE_PREFIX) + DECIMAL_SIZE_OF(int)];
+ bool cconst = false;
+ retry:;
+ const struct rb_builtin_function *bf = iseq_builtin_function_lookup(iseq, builtin_func);
+
+ if (bf == NULL) {
+ if (strcmp("cstmt!", builtin_func) == 0 ||
+ strcmp("cexpr!", builtin_func) == 0) {
+ // ok
+ }
+ else if (strcmp("cconst!", builtin_func) == 0) {
+ cconst = true;
+ }
+ else if (strcmp("cinit!", builtin_func) == 0) {
+ // ignore
+ return COMPILE_OK;
+ }
+ else if (strcmp("attr!", builtin_func) == 0) {
+ return compile_builtin_attr(iseq, args_node);
+ }
+ else if (strcmp("arg!", builtin_func) == 0) {
+ return compile_builtin_arg(iseq, ret, args_node, line_node, popped);
+ }
+ else if (strcmp("mandatory_only?", builtin_func) == 0) {
+ if (popped) {
+ rb_bug("mandatory_only? should be in if condition");
+ }
+ else if (!LIST_INSN_SIZE_ZERO(ret)) {
+ rb_bug("mandatory_only? should be put on top");
+ }
+
+ ADD_INSN1(ret, line_node, putobject, Qfalse);
+ return compile_builtin_mandatory_only_method(iseq, node, line_node);
+ }
+ else if (1) {
+ rb_bug("can't find builtin function:%s", builtin_func);
+ }
+ else {
+ COMPILE_ERROR(ERROR_ARGS "can't find builtin function:%s", builtin_func);
+ return COMPILE_NG;
+ }
+
+ int inline_index = nd_line(node);
+ snprintf(inline_func, sizeof(inline_func), BUILTIN_INLINE_PREFIX "%d", inline_index);
+ builtin_func = inline_func;
+ args_node = NULL;
+ goto retry;
+ }
+
+ if (cconst) {
+ typedef VALUE(*builtin_func0)(void *, VALUE);
+ VALUE const_val = (*(builtin_func0)(uintptr_t)bf->func_ptr)(NULL, Qnil);
+ ADD_INSN1(ret, line_node, putobject, const_val);
+ return COMPILE_OK;
+ }
+
+ // fprintf(stderr, "func_name:%s -> %p\n", builtin_func, bf->func_ptr);
+
+ unsigned int flag = 0;
+ struct rb_callinfo_kwarg *keywords = NULL;
+ VALUE argc = setup_args(iseq, args, args_node, &flag, &keywords);
+
+ if (FIX2INT(argc) != bf->argc) {
+ COMPILE_ERROR(ERROR_ARGS "argc is not match for builtin function:%s (expect %d but %d)",
+ builtin_func, bf->argc, FIX2INT(argc));
+ return COMPILE_NG;
+ }
+
+ unsigned int start_index;
+ if (delegate_call_p(iseq, FIX2INT(argc), args, &start_index)) {
+ ADD_INSN2(ret, line_node, opt_invokebuiltin_delegate, bf, INT2FIX(start_index));
+ }
+ else {
+ ADD_SEQ(ret, args);
+ ADD_INSN1(ret, line_node, invokebuiltin, bf);
+ }
+
+ if (popped) ADD_INSN(ret, line_node, pop);
+ return COMPILE_OK;
+ }
+}
+
+static int
+compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, const enum node_type type, const NODE *const line_node, int popped, bool assume_receiver)
+{
+ /* call: obj.method(...)
+ * fcall: func(...)
+ * vcall: func
+ */
+ DECL_ANCHOR(recv);
+ DECL_ANCHOR(args);
+ ID mid = get_node_call_nd_mid(node);
+ VALUE argc;
+ unsigned int flag = 0;
+ struct rb_callinfo_kwarg *keywords = NULL;
+ const rb_iseq_t *parent_block = ISEQ_COMPILE_DATA(iseq)->current_block;
+ LABEL *else_label = NULL;
+ VALUE branches = Qfalse;
+
+ ISEQ_COMPILE_DATA(iseq)->current_block = NULL;
+
+ INIT_ANCHOR(recv);
+ INIT_ANCHOR(args);
+
+#if OPT_SUPPORT_JOKE
+ if (nd_type_p(node, NODE_VCALL)) {
+ ID id_bitblt;
+ ID id_answer;
+
+ CONST_ID(id_bitblt, "bitblt");
+ CONST_ID(id_answer, "the_answer_to_life_the_universe_and_everything");
+
+ if (mid == id_bitblt) {
+ ADD_INSN(ret, line_node, bitblt);
+ return COMPILE_OK;
+ }
+ else if (mid == id_answer) {
+ ADD_INSN(ret, line_node, answer);
+ return COMPILE_OK;
+ }
+ }
+ /* only joke */
+ {
+ ID goto_id;
+ ID label_id;
+
+ CONST_ID(goto_id, "__goto__");
+ CONST_ID(label_id, "__label__");
+
+ if (nd_type_p(node, NODE_FCALL) &&
+ (mid == goto_id || mid == label_id)) {
+ LABEL *label;
+ st_data_t data;
+ st_table *labels_table = ISEQ_COMPILE_DATA(iseq)->labels_table;
+ VALUE label_name;
+
+ if (!labels_table) {
+ labels_table = st_init_numtable();
+ ISEQ_COMPILE_DATA(iseq)->labels_table = labels_table;
+ }
+ {
+ COMPILE_ERROR(ERROR_ARGS "invalid goto/label format");
+ return COMPILE_NG;
+ }
+
+ if (mid == goto_id) {
+ ADD_INSNL(ret, line_node, jump, label);
+ }
+ else {
+ ADD_LABEL(ret, label);
+ }
+ return COMPILE_OK;
+ }
+ }
+#endif
+
+ const char *builtin_func;
+ if (UNLIKELY(iseq_has_builtin_function_table(iseq)) &&
+ (builtin_func = iseq_builtin_function_name(type, get_nd_recv(node), mid)) != NULL) {
+ return compile_builtin_function_call(iseq, ret, node, line_node, popped, parent_block, args, builtin_func);
+ }
+
+ /* receiver */
+ if (!assume_receiver) {
+ if (type == NODE_CALL || type == NODE_OPCALL || type == NODE_QCALL) {
+ int idx, level;
+
+ if (mid == idCall &&
+ nd_type_p(get_nd_recv(node), NODE_LVAR) &&
+ iseq_block_param_id_p(iseq, RNODE_LVAR(get_nd_recv(node))->nd_vid, &idx, &level)) {
+ ADD_INSN2(recv, get_nd_recv(node), getblockparamproxy, INT2FIX(idx + VM_ENV_DATA_SIZE - 1), INT2FIX(level));
+ }
+ else if (private_recv_p(node)) {
+ ADD_INSN(recv, node, putself);
+ flag |= VM_CALL_FCALL;
+ }
+ else {
+ CHECK(COMPILE(recv, "recv", get_nd_recv(node)));
+ }
+
+ if (type == NODE_QCALL) {
+ else_label = qcall_branch_start(iseq, recv, &branches, node, line_node);
+ }
+ }
+ else if (type == NODE_FCALL || type == NODE_VCALL) {
+ ADD_CALL_RECEIVER(recv, line_node);
+ }
+ }
+
+ /* args */
+ if (type != NODE_VCALL) {
+ argc = setup_args(iseq, args, get_nd_args(node), &flag, &keywords);
+ CHECK(!NIL_P(argc));
+ }
+ else {
+ argc = INT2FIX(0);
+ }
+
+ ADD_SEQ(ret, recv);
+
+ bool inline_new = ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction &&
+ mid == rb_intern("new") &&
+ parent_block == NULL &&
+ !(flag & VM_CALL_ARGS_BLOCKARG);
+
+ if (inline_new) {
+ ADD_INSN(ret, node, putnil);
+ ADD_INSN(ret, node, swap);
+ }
+
+ ADD_SEQ(ret, args);
+
+ debugp_param("call args argc", argc);
+ debugp_param("call method", ID2SYM(mid));
+
+ switch ((int)type) {
+ case NODE_VCALL:
+ flag |= VM_CALL_VCALL;
+ /* VCALL is funcall, so fall through */
+ case NODE_FCALL:
+ flag |= VM_CALL_FCALL;
+ }
+
+ if ((flag & VM_CALL_ARGS_BLOCKARG) && (flag & VM_CALL_KW_SPLAT) && !(flag & VM_CALL_KW_SPLAT_MUT)) {
+ ADD_INSN(ret, line_node, splatkw);
+ }
+
+ LABEL *not_basic_new = NEW_LABEL(nd_line(node));
+ LABEL *not_basic_new_finish = NEW_LABEL(nd_line(node));
+
+ if (inline_new) {
+ // Jump unless the receiver uses the "basic" implementation of "new"
+ VALUE ci;
+ if (flag & VM_CALL_FORWARDING) {
+ ci = (VALUE)new_callinfo(iseq, mid, NUM2INT(argc) + 1, flag, keywords, 0);
+ }
+ else {
+ ci = (VALUE)new_callinfo(iseq, mid, NUM2INT(argc), flag, keywords, 0);
+ }
+ ADD_INSN2(ret, node, opt_new, ci, not_basic_new);
+ LABEL_REF(not_basic_new);
+
+ // optimized path
+ ADD_SEND_R(ret, line_node, rb_intern("initialize"), argc, parent_block, INT2FIX(flag | VM_CALL_FCALL), keywords);
+ ADD_INSNL(ret, line_node, jump, not_basic_new_finish);
+
+ ADD_LABEL(ret, not_basic_new);
+ // Fall back to normal send
+ ADD_SEND_R(ret, line_node, mid, argc, parent_block, INT2FIX(flag), keywords);
+ ADD_INSN(ret, line_node, swap);
+
+ ADD_LABEL(ret, not_basic_new_finish);
+ ADD_INSN(ret, line_node, pop);
+ }
+ else {
+ ADD_SEND_R(ret, line_node, mid, argc, parent_block, INT2FIX(flag), keywords);
+ }
+
+ qcall_branch_end(iseq, ret, else_label, branches, node, line_node);
+ if (popped) {
+ ADD_INSN(ret, line_node, pop);
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_op_asgn1(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const int line = nd_line(node);
+ VALUE argc;
+ unsigned int flag = 0;
+ int asgnflag = 0;
+ ID id = RNODE_OP_ASGN1(node)->nd_mid;
+
+ /*
+ * a[x] (op)= y
+ *
+ * nil # nil
+ * eval a # nil a
+ * eval x # nil a x
+ * dupn 2 # nil a x a x
+ * send :[] # nil a x a[x]
+ * eval y # nil a x a[x] y
+ * send op # nil a x ret
+ * setn 3 # ret a x ret
+ * send []= # ret ?
+ * pop # ret
+ */
+
+ /*
+ * nd_recv[nd_args->nd_body] (nd_mid)= nd_args->nd_head;
+ * NODE_OP_ASGN nd_recv
+ * nd_args->nd_head
+ * nd_args->nd_body
+ * nd_mid
+ */
+
+ if (!popped) {
+ ADD_INSN(ret, node, putnil);
+ }
+ asgnflag = COMPILE_RECV(ret, "NODE_OP_ASGN1 recv", node, RNODE_OP_ASGN1(node)->nd_recv);
+ CHECK(asgnflag != -1);
+ switch (nd_type(RNODE_OP_ASGN1(node)->nd_index)) {
+ case NODE_ZLIST:
+ argc = INT2FIX(0);
+ break;
+ default:
+ argc = setup_args(iseq, ret, RNODE_OP_ASGN1(node)->nd_index, &flag, NULL);
+ CHECK(!NIL_P(argc));
+ }
+ int dup_argn = FIX2INT(argc) + 1;
+ ADD_INSN1(ret, node, dupn, INT2FIX(dup_argn));
+ flag |= asgnflag;
+ ADD_SEND_R(ret, node, idAREF, argc, NULL, INT2FIX(flag & ~VM_CALL_ARGS_SPLAT_MUT), NULL);
+
+ if (id == idOROP || id == idANDOP) {
+ /* a[x] ||= y or a[x] &&= y
+
+ unless/if a[x]
+ a[x]= y
+ else
+ nil
+ end
+ */
+ LABEL *label = NEW_LABEL(line);
+ LABEL *lfin = NEW_LABEL(line);
+
+ ADD_INSN(ret, node, dup);
+ if (id == idOROP) {
+ ADD_INSNL(ret, node, branchif, label);
+ }
+ else { /* idANDOP */
+ ADD_INSNL(ret, node, branchunless, label);
+ }
+ ADD_INSN(ret, node, pop);
+
+ CHECK(COMPILE(ret, "NODE_OP_ASGN1 nd_rvalue: ", RNODE_OP_ASGN1(node)->nd_rvalue));
+ if (!popped) {
+ ADD_INSN1(ret, node, setn, INT2FIX(dup_argn+1));
+ }
+ if (flag & VM_CALL_ARGS_SPLAT) {
+ if (!(flag & VM_CALL_ARGS_SPLAT_MUT)) {
+ ADD_INSN(ret, node, swap);
+ ADD_INSN1(ret, node, splatarray, Qtrue);
+ ADD_INSN(ret, node, swap);
+ flag |= VM_CALL_ARGS_SPLAT_MUT;
+ }
+ ADD_INSN1(ret, node, pushtoarray, INT2FIX(1));
+ ADD_SEND_R(ret, node, idASET, argc, NULL, INT2FIX(flag), NULL);
+ }
+ else {
+ ADD_SEND_R(ret, node, idASET, FIXNUM_INC(argc, 1), NULL, INT2FIX(flag), NULL);
+ }
+ ADD_INSN(ret, node, pop);
+ ADD_INSNL(ret, node, jump, lfin);
+ ADD_LABEL(ret, label);
+ if (!popped) {
+ ADD_INSN1(ret, node, setn, INT2FIX(dup_argn+1));
+ }
+ ADD_INSN1(ret, node, adjuststack, INT2FIX(dup_argn+1));
+ ADD_LABEL(ret, lfin);
+ }
+ else {
+ CHECK(COMPILE(ret, "NODE_OP_ASGN1 nd_rvalue: ", RNODE_OP_ASGN1(node)->nd_rvalue));
+ ADD_SEND(ret, node, id, INT2FIX(1));
+ if (!popped) {
+ ADD_INSN1(ret, node, setn, INT2FIX(dup_argn+1));
+ }
+ if (flag & VM_CALL_ARGS_SPLAT) {
+ if (flag & VM_CALL_KW_SPLAT) {
+ ADD_INSN1(ret, node, topn, INT2FIX(2));
+ if (!(flag & VM_CALL_ARGS_SPLAT_MUT)) {
+ ADD_INSN1(ret, node, splatarray, Qtrue);
+ flag |= VM_CALL_ARGS_SPLAT_MUT;
+ }
+ ADD_INSN(ret, node, swap);
+ ADD_INSN1(ret, node, pushtoarray, INT2FIX(1));
+ ADD_INSN1(ret, node, setn, INT2FIX(2));
+ ADD_INSN(ret, node, pop);
+ }
+ else {
+ if (!(flag & VM_CALL_ARGS_SPLAT_MUT)) {
+ ADD_INSN(ret, node, swap);
+ ADD_INSN1(ret, node, splatarray, Qtrue);
+ ADD_INSN(ret, node, swap);
+ flag |= VM_CALL_ARGS_SPLAT_MUT;
+ }
+ ADD_INSN1(ret, node, pushtoarray, INT2FIX(1));
+ }
+ ADD_SEND_R(ret, node, idASET, argc, NULL, INT2FIX(flag), NULL);
+ }
+ else {
+ ADD_SEND_R(ret, node, idASET, FIXNUM_INC(argc, 1), NULL, INT2FIX(flag), NULL);
+ }
+ ADD_INSN(ret, node, pop);
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_op_asgn2(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const int line = nd_line(node);
+ ID atype = RNODE_OP_ASGN2(node)->nd_mid;
+ ID vid = RNODE_OP_ASGN2(node)->nd_vid, aid = rb_id_attrset(vid);
+ int asgnflag;
+ LABEL *lfin = NEW_LABEL(line);
+ LABEL *lcfin = NEW_LABEL(line);
+ LABEL *lskip = 0;
+ /*
+ class C; attr_accessor :c; end
+ r = C.new
+ r.a &&= v # asgn2
+
+ eval r # r
+ dup # r r
+ eval r.a # r o
+
+ # or
+ dup # r o o
+ if lcfin # r o
+ pop # r
+ eval v # r v
+ swap # v r
+ topn 1 # v r v
+ send a= # v ?
+ jump lfin # v ?
+
+ lcfin: # r o
+ swap # o r
+
+ lfin: # o ?
+ pop # o
+
+ # or (popped)
+ if lcfin # r
+ eval v # r v
+ send a= # ?
+ jump lfin # ?
+
+ lcfin: # r
+
+ lfin: # ?
+ pop #
+
+ # and
+ dup # r o o
+ unless lcfin
+ pop # r
+ eval v # r v
+ swap # v r
+ topn 1 # v r v
+ send a= # v ?
+ jump lfin # v ?
+
+ # others
+ eval v # r o v
+ send ?? # r w
+ send a= # w
+
+ */
+
+ asgnflag = COMPILE_RECV(ret, "NODE_OP_ASGN2#recv", node, RNODE_OP_ASGN2(node)->nd_recv);
+ CHECK(asgnflag != -1);
+ if (RNODE_OP_ASGN2(node)->nd_aid) {
+ lskip = NEW_LABEL(line);
+ ADD_INSN(ret, node, dup);
+ ADD_INSNL(ret, node, branchnil, lskip);
+ }
+ ADD_INSN(ret, node, dup);
+ ADD_SEND_WITH_FLAG(ret, node, vid, INT2FIX(0), INT2FIX(asgnflag));
+
+ if (atype == idOROP || atype == idANDOP) {
+ if (!popped) {
+ ADD_INSN(ret, node, dup);
+ }
+ if (atype == idOROP) {
+ ADD_INSNL(ret, node, branchif, lcfin);
+ }
+ else { /* idANDOP */
+ ADD_INSNL(ret, node, branchunless, lcfin);
+ }
+ if (!popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ CHECK(COMPILE(ret, "NODE_OP_ASGN2 val", RNODE_OP_ASGN2(node)->nd_value));
+ if (!popped) {
+ ADD_INSN(ret, node, swap);
+ ADD_INSN1(ret, node, topn, INT2FIX(1));
+ }
+ ADD_SEND_WITH_FLAG(ret, node, aid, INT2FIX(1), INT2FIX(asgnflag));
+ ADD_INSNL(ret, node, jump, lfin);
+
+ ADD_LABEL(ret, lcfin);
+ if (!popped) {
+ ADD_INSN(ret, node, swap);
+ }
+
+ ADD_LABEL(ret, lfin);
+ }
+ else {
+ CHECK(COMPILE(ret, "NODE_OP_ASGN2 val", RNODE_OP_ASGN2(node)->nd_value));
+ ADD_SEND(ret, node, atype, INT2FIX(1));
+ if (!popped) {
+ ADD_INSN(ret, node, swap);
+ ADD_INSN1(ret, node, topn, INT2FIX(1));
+ }
+ ADD_SEND_WITH_FLAG(ret, node, aid, INT2FIX(1), INT2FIX(asgnflag));
+ }
+ if (lskip && popped) {
+ ADD_LABEL(ret, lskip);
+ }
+ ADD_INSN(ret, node, pop);
+ if (lskip && !popped) {
+ ADD_LABEL(ret, lskip);
+ }
+ return COMPILE_OK;
+}
+
+static int compile_shareable_constant_value(rb_iseq_t *iseq, LINK_ANCHOR *ret, enum rb_parser_shareability shareable, const NODE *lhs, const NODE *value);
+
+static int
+compile_op_cdecl(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const int line = nd_line(node);
+ LABEL *lfin = 0;
+ LABEL *lassign = 0;
+ ID mid;
+
+ switch (nd_type(RNODE_OP_CDECL(node)->nd_head)) {
+ case NODE_COLON3:
+ ADD_INSN1(ret, node, putobject, rb_cObject);
+ break;
+ case NODE_COLON2:
+ CHECK(COMPILE(ret, "NODE_OP_CDECL/colon2#nd_head", RNODE_COLON2(RNODE_OP_CDECL(node)->nd_head)->nd_head));
+ break;
+ default:
+ COMPILE_ERROR(ERROR_ARGS "%s: invalid node in NODE_OP_CDECL",
+ ruby_node_name(nd_type(RNODE_OP_CDECL(node)->nd_head)));
+ return COMPILE_NG;
+ }
+ mid = get_node_colon_nd_mid(RNODE_OP_CDECL(node)->nd_head);
+ /* cref */
+ if (RNODE_OP_CDECL(node)->nd_aid == idOROP) {
+ lassign = NEW_LABEL(line);
+ ADD_INSN(ret, node, dup); /* cref cref */
+ ADD_INSN3(ret, node, defined, INT2FIX(DEFINED_CONST_FROM),
+ ID2SYM(mid), Qtrue); /* cref bool */
+ ADD_INSNL(ret, node, branchunless, lassign); /* cref */
+ }
+ ADD_INSN(ret, node, dup); /* cref cref */
+ ADD_INSN1(ret, node, putobject, Qtrue);
+ ADD_INSN1(ret, node, getconstant, ID2SYM(mid)); /* cref obj */
+
+ if (RNODE_OP_CDECL(node)->nd_aid == idOROP || RNODE_OP_CDECL(node)->nd_aid == idANDOP) {
+ lfin = NEW_LABEL(line);
+ if (!popped) ADD_INSN(ret, node, dup); /* cref [obj] obj */
+ if (RNODE_OP_CDECL(node)->nd_aid == idOROP)
+ ADD_INSNL(ret, node, branchif, lfin);
+ else /* idANDOP */
+ ADD_INSNL(ret, node, branchunless, lfin);
+ /* cref [obj] */
+ if (!popped) ADD_INSN(ret, node, pop); /* cref */
+ if (lassign) ADD_LABEL(ret, lassign);
+ CHECK(compile_shareable_constant_value(iseq, ret, RNODE_OP_CDECL(node)->shareability, RNODE_OP_CDECL(node)->nd_head, RNODE_OP_CDECL(node)->nd_value));
+ /* cref value */
+ if (popped)
+ ADD_INSN1(ret, node, topn, INT2FIX(1)); /* cref value cref */
+ else {
+ ADD_INSN1(ret, node, dupn, INT2FIX(2)); /* cref value cref value */
+ ADD_INSN(ret, node, swap); /* cref value value cref */
+ }
+ ADD_INSN1(ret, node, setconstant, ID2SYM(mid)); /* cref [value] */
+ ADD_LABEL(ret, lfin); /* cref [value] */
+ if (!popped) ADD_INSN(ret, node, swap); /* [value] cref */
+ ADD_INSN(ret, node, pop); /* [value] */
+ }
+ else {
+ CHECK(compile_shareable_constant_value(iseq, ret, RNODE_OP_CDECL(node)->shareability, RNODE_OP_CDECL(node)->nd_head, RNODE_OP_CDECL(node)->nd_value));
+ /* cref obj value */
+ ADD_CALL(ret, node, RNODE_OP_CDECL(node)->nd_aid, INT2FIX(1));
+ /* cref value */
+ ADD_INSN(ret, node, swap); /* value cref */
+ if (!popped) {
+ ADD_INSN1(ret, node, topn, INT2FIX(1)); /* value cref value */
+ ADD_INSN(ret, node, swap); /* value value cref */
+ }
+ ADD_INSN1(ret, node, setconstant, ID2SYM(mid));
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_op_log(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped, const enum node_type type)
+{
+ const int line = nd_line(node);
+ LABEL *lfin = NEW_LABEL(line);
+ LABEL *lassign;
+
+ if (type == NODE_OP_ASGN_OR && !nd_type_p(RNODE_OP_ASGN_OR(node)->nd_head, NODE_IVAR)) {
+ LABEL *lfinish[2];
+ lfinish[0] = lfin;
+ lfinish[1] = 0;
+ defined_expr(iseq, ret, RNODE_OP_ASGN_OR(node)->nd_head, lfinish, Qfalse, false);
+ lassign = lfinish[1];
+ if (!lassign) {
+ lassign = NEW_LABEL(line);
+ }
+ ADD_INSNL(ret, node, branchunless, lassign);
+ }
+ else {
+ lassign = NEW_LABEL(line);
+ }
+
+ CHECK(COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_head", RNODE_OP_ASGN_OR(node)->nd_head));
+
+ if (!popped) {
+ ADD_INSN(ret, node, dup);
+ }
+
+ if (type == NODE_OP_ASGN_AND) {
+ ADD_INSNL(ret, node, branchunless, lfin);
+ }
+ else {
+ ADD_INSNL(ret, node, branchif, lfin);
+ }
+
+ if (!popped) {
+ ADD_INSN(ret, node, pop);
+ }
+
+ ADD_LABEL(ret, lassign);
+ CHECK(COMPILE_(ret, "NODE_OP_ASGN_AND/OR#nd_value", RNODE_OP_ASGN_OR(node)->nd_value, popped));
+ ADD_LABEL(ret, lfin);
+ return COMPILE_OK;
+}
+
+static int
+compile_super(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped, const enum node_type type)
+{
+ struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
+ DECL_ANCHOR(args);
+ int argc;
+ unsigned int flag = 0;
+ struct rb_callinfo_kwarg *keywords = NULL;
+ const rb_iseq_t *parent_block = ISEQ_COMPILE_DATA(iseq)->current_block;
+ int use_block = 1;
+
+ INIT_ANCHOR(args);
+ ISEQ_COMPILE_DATA(iseq)->current_block = NULL;
+
+ if (type == NODE_SUPER) {
+ VALUE vargc = setup_args(iseq, args, RNODE_SUPER(node)->nd_args, &flag, &keywords);
+ CHECK(!NIL_P(vargc));
+ argc = FIX2INT(vargc);
+ if ((flag & VM_CALL_ARGS_BLOCKARG) && (flag & VM_CALL_KW_SPLAT) && !(flag & VM_CALL_KW_SPLAT_MUT)) {
+ ADD_INSN(args, node, splatkw);
+ }
+
+ if (flag & VM_CALL_ARGS_BLOCKARG) {
+ use_block = 0;
+ }
+ }
+ else {
+ /* NODE_ZSUPER */
+ int i;
+ const rb_iseq_t *liseq = body->local_iseq;
+ const struct rb_iseq_constant_body *const local_body = ISEQ_BODY(liseq);
+ const struct rb_iseq_param_keyword *const local_kwd = local_body->param.keyword;
+ int lvar_level = get_lvar_level(iseq);
+
+ argc = local_body->param.lead_num;
+
+ /* normal arguments */
+ for (i = 0; i < local_body->param.lead_num; i++) {
+ int idx = local_body->local_table_size - i;
+ ADD_GETLOCAL(args, node, idx, lvar_level);
+ }
+
+ /* forward ... */
+ if (local_body->param.flags.forwardable) {
+ flag |= VM_CALL_FORWARDING;
+ int idx = local_body->local_table_size - get_local_var_idx(liseq, idDot3);
+ ADD_GETLOCAL(args, node, idx, lvar_level);
+ }
+
+ if (local_body->param.flags.has_opt) {
+ /* optional arguments */
+ int j;
+ for (j = 0; j < local_body->param.opt_num; j++) {
+ int idx = local_body->local_table_size - (i + j);
+ ADD_GETLOCAL(args, node, idx, lvar_level);
+ }
+ i += j;
+ argc = i;
+ }
+ if (local_body->param.flags.has_rest) {
+ /* rest argument */
+ int idx = local_body->local_table_size - local_body->param.rest_start;
+ ADD_GETLOCAL(args, node, idx, lvar_level);
+ ADD_INSN1(args, node, splatarray, RBOOL(local_body->param.flags.has_post));
+
+ argc = local_body->param.rest_start + 1;
+ flag |= VM_CALL_ARGS_SPLAT;
+ }
+ if (local_body->param.flags.has_post) {
+ /* post arguments */
+ int post_len = local_body->param.post_num;
+ int post_start = local_body->param.post_start;
+
+ if (local_body->param.flags.has_rest) {
+ int j;
+ for (j=0; j<post_len; j++) {
+ int idx = local_body->local_table_size - (post_start + j);
+ ADD_GETLOCAL(args, node, idx, lvar_level);
+ }
+ ADD_INSN1(args, node, pushtoarray, INT2FIX(j));
+ flag |= VM_CALL_ARGS_SPLAT_MUT;
+ /* argc is settled at above */
+ }
+ else {
+ int j;
+ for (j=0; j<post_len; j++) {
+ int idx = local_body->local_table_size - (post_start + j);
+ ADD_GETLOCAL(args, node, idx, lvar_level);
+ }
+ argc = post_len + post_start;
+ }
+ }
+
+ if (local_body->param.flags.has_kw) { /* TODO: support keywords */
+ int local_size = local_body->local_table_size;
+ argc++;
+
+ ADD_INSN1(args, node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+
+ if (local_body->param.flags.has_kwrest) {
+ int idx = local_body->local_table_size - local_kwd->rest_start;
+ ADD_GETLOCAL(args, node, idx, lvar_level);
+ RUBY_ASSERT(local_kwd->num > 0);
+ ADD_SEND (args, node, rb_intern("dup"), INT2FIX(0));
+ }
+ else {
+ ADD_INSN1(args, node, newhash, INT2FIX(0));
+ }
+ for (i = 0; i < local_kwd->num; ++i) {
+ ID id = local_kwd->table[i];
+ int idx = local_size - get_local_var_idx(liseq, id);
+ ADD_INSN1(args, node, putobject, ID2SYM(id));
+ ADD_GETLOCAL(args, node, idx, lvar_level);
+ }
+ ADD_SEND(args, node, id_core_hash_merge_ptr, INT2FIX(i * 2 + 1));
+ flag |= VM_CALL_KW_SPLAT| VM_CALL_KW_SPLAT_MUT;
+ }
+ else if (local_body->param.flags.has_kwrest) {
+ int idx = local_body->local_table_size - local_kwd->rest_start;
+ ADD_GETLOCAL(args, node, idx, lvar_level);
+ argc++;
+ flag |= VM_CALL_KW_SPLAT;
+ }
+ }
+
+ if (use_block && parent_block == NULL) {
+ iseq_set_use_block(ISEQ_BODY(iseq)->local_iseq);
+ }
+
+ flag |= VM_CALL_SUPER | VM_CALL_FCALL;
+ if (type == NODE_ZSUPER) flag |= VM_CALL_ZSUPER;
+ ADD_INSN(ret, node, putself);
+ ADD_SEQ(ret, args);
+
+ const struct rb_callinfo * ci = new_callinfo(iseq, 0, argc, flag, keywords, parent_block != NULL);
+
+ if (vm_ci_flag(ci) & VM_CALL_FORWARDING) {
+ ADD_INSN2(ret, node, invokesuperforward, ci, parent_block);
+ }
+ else {
+ ADD_INSN2(ret, node, invokesuper, ci, parent_block);
+ }
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_yield(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ DECL_ANCHOR(args);
+ VALUE argc;
+ unsigned int flag = 0;
+ struct rb_callinfo_kwarg *keywords = NULL;
+
+ INIT_ANCHOR(args);
+
+ switch (ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq)->type) {
+ case ISEQ_TYPE_TOP:
+ case ISEQ_TYPE_MAIN:
+ case ISEQ_TYPE_CLASS:
+ COMPILE_ERROR(ERROR_ARGS "Invalid yield");
+ return COMPILE_NG;
+ default: /* valid */;
+ }
+
+ if (RNODE_YIELD(node)->nd_head) {
+ argc = setup_args(iseq, args, RNODE_YIELD(node)->nd_head, &flag, &keywords);
+ CHECK(!NIL_P(argc));
+ }
+ else {
+ argc = INT2FIX(0);
+ }
+
+ ADD_SEQ(ret, args);
+ ADD_INSN1(ret, node, invokeblock, new_callinfo(iseq, 0, FIX2INT(argc), flag, keywords, FALSE));
+ iseq_set_use_block(ISEQ_BODY(iseq)->local_iseq);
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+
+ int level = 0;
+ const rb_iseq_t *tmp_iseq = iseq;
+ for (; tmp_iseq != ISEQ_BODY(iseq)->local_iseq; level++ ) {
+ tmp_iseq = ISEQ_BODY(tmp_iseq)->parent_iseq;
+ }
+ if (level > 0) access_outer_variables(iseq, level, rb_intern("yield"), true);
+
+ return COMPILE_OK;
+}
+
+static int
+compile_match(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped, const enum node_type type)
+{
+ DECL_ANCHOR(recv);
+ DECL_ANCHOR(val);
+
+ INIT_ANCHOR(recv);
+ INIT_ANCHOR(val);
+ switch ((int)type) {
+ case NODE_MATCH:
+ {
+ VALUE re = rb_node_regx_string_val(node);
+ RB_OBJ_SET_FROZEN_SHAREABLE(re);
+ ADD_INSN1(recv, node, putobject, re);
+ ADD_INSN2(val, node, getspecial, INT2FIX(0),
+ INT2FIX(0));
+ }
+ break;
+ case NODE_MATCH2:
+ CHECK(COMPILE(recv, "receiver", RNODE_MATCH2(node)->nd_recv));
+ CHECK(COMPILE(val, "value", RNODE_MATCH2(node)->nd_value));
+ break;
+ case NODE_MATCH3:
+ CHECK(COMPILE(recv, "receiver", RNODE_MATCH3(node)->nd_value));
+ CHECK(COMPILE(val, "value", RNODE_MATCH3(node)->nd_recv));
+ break;
+ }
+
+ ADD_SEQ(ret, recv);
+ ADD_SEQ(ret, val);
+ ADD_SEND(ret, node, idEqTilde, INT2FIX(1));
+
+ if (nd_type_p(node, NODE_MATCH2) && RNODE_MATCH2(node)->nd_args) {
+ compile_named_capture_assign(iseq, ret, RNODE_MATCH2(node)->nd_args);
+ }
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_colon2(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ if (rb_is_const_id(RNODE_COLON2(node)->nd_mid)) {
+ /* constant */
+ VALUE segments;
+ if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache &&
+ (segments = collect_const_segments(iseq, node))) {
+ ISEQ_BODY(iseq)->ic_size++;
+ ADD_INSN1(ret, node, opt_getconstant_path, segments);
+ RB_OBJ_WRITTEN(iseq, Qundef, segments);
+ }
+ else {
+ /* constant */
+ DECL_ANCHOR(pref);
+ DECL_ANCHOR(body);
+
+ INIT_ANCHOR(pref);
+ INIT_ANCHOR(body);
+ CHECK(compile_const_prefix(iseq, node, pref, body));
+ if (LIST_INSN_SIZE_ZERO(pref)) {
+ ADD_INSN(ret, node, putnil);
+ ADD_SEQ(ret, body);
+ }
+ else {
+ ADD_SEQ(ret, pref);
+ ADD_SEQ(ret, body);
+ }
+ }
+ }
+ else {
+ /* function call */
+ ADD_CALL_RECEIVER(ret, node);
+ CHECK(COMPILE(ret, "colon2#nd_head", RNODE_COLON2(node)->nd_head));
+ ADD_CALL(ret, node, RNODE_COLON2(node)->nd_mid, INT2FIX(1));
+ }
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_colon3(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ debugi("colon3#nd_mid", RNODE_COLON3(node)->nd_mid);
+
+ /* add cache insn */
+ if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) {
+ ISEQ_BODY(iseq)->ic_size++;
+ VALUE segments = rb_ary_new_from_args(2, ID2SYM(idNULL), ID2SYM(RNODE_COLON3(node)->nd_mid));
+ RB_OBJ_SET_FROZEN_SHAREABLE(segments);
+ ADD_INSN1(ret, node, opt_getconstant_path, segments);
+ RB_OBJ_WRITTEN(iseq, Qundef, segments);
+ }
+ else {
+ ADD_INSN1(ret, node, putobject, rb_cObject);
+ ADD_INSN1(ret, node, putobject, Qtrue);
+ ADD_INSN1(ret, node, getconstant, ID2SYM(RNODE_COLON3(node)->nd_mid));
+ }
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_dots(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped, const int excl)
+{
+ VALUE flag = INT2FIX(excl);
+ const NODE *b = RNODE_DOT2(node)->nd_beg;
+ const NODE *e = RNODE_DOT2(node)->nd_end;
+
+ if (optimizable_range_item_p(b) && optimizable_range_item_p(e)) {
+ if (!popped) {
+ VALUE bv = optimized_range_item(b);
+ VALUE ev = optimized_range_item(e);
+ VALUE val = rb_range_new(bv, ev, excl);
+ rb_ractor_make_shareable(rb_obj_freeze(val));
+ ADD_INSN1(ret, node, putobject, val);
+ RB_OBJ_WRITTEN(iseq, Qundef, val);
+ }
+ }
+ else {
+ CHECK(COMPILE_(ret, "min", b, popped));
+ CHECK(COMPILE_(ret, "max", e, popped));
+ if (!popped) {
+ ADD_INSN1(ret, node, newrange, flag);
+ }
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_errinfo(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ if (!popped) {
+ if (ISEQ_BODY(iseq)->type == ISEQ_TYPE_RESCUE) {
+ ADD_GETLOCAL(ret, node, LVAR_ERRINFO, 0);
+ }
+ else {
+ const rb_iseq_t *ip = iseq;
+ int level = 0;
+ while (ip) {
+ if (ISEQ_BODY(ip)->type == ISEQ_TYPE_RESCUE) {
+ break;
+ }
+ ip = ISEQ_BODY(ip)->parent_iseq;
+ level++;
+ }
+ if (ip) {
+ ADD_GETLOCAL(ret, node, LVAR_ERRINFO, level);
+ }
+ else {
+ ADD_INSN(ret, node, putnil);
+ }
+ }
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_kw_arg(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
+ LABEL *end_label = NEW_LABEL(nd_line(node));
+ const NODE *default_value = get_nd_value(RNODE_KW_ARG(node)->nd_body);
+
+ if (default_value == NODE_SPECIAL_REQUIRED_KEYWORD) {
+ /* required argument. do nothing */
+ COMPILE_ERROR(ERROR_ARGS "unreachable");
+ return COMPILE_NG;
+ }
+ else if (nd_type_p(default_value, NODE_SYM) ||
+ nd_type_p(default_value, NODE_REGX) ||
+ nd_type_p(default_value, NODE_LINE) ||
+ nd_type_p(default_value, NODE_INTEGER) ||
+ nd_type_p(default_value, NODE_FLOAT) ||
+ nd_type_p(default_value, NODE_RATIONAL) ||
+ nd_type_p(default_value, NODE_IMAGINARY) ||
+ nd_type_p(default_value, NODE_NIL) ||
+ nd_type_p(default_value, NODE_TRUE) ||
+ nd_type_p(default_value, NODE_FALSE)) {
+ COMPILE_ERROR(ERROR_ARGS "unreachable");
+ return COMPILE_NG;
+ }
+ else {
+ /* if keywordcheck(_kw_bits, nth_keyword)
+ * kw = default_value
+ * end
+ */
+ int kw_bits_idx = body->local_table_size - body->param.keyword->bits_start;
+ int keyword_idx = body->param.keyword->num;
+
+ ADD_INSN2(ret, node, checkkeyword, INT2FIX(kw_bits_idx + VM_ENV_DATA_SIZE - 1), INT2FIX(keyword_idx));
+ ADD_INSNL(ret, node, branchif, end_label);
+ CHECK(COMPILE_POPPED(ret, "keyword default argument", RNODE_KW_ARG(node)->nd_body));
+ ADD_LABEL(ret, end_label);
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_attrasgn(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ DECL_ANCHOR(recv);
+ DECL_ANCHOR(args);
+ unsigned int flag = 0;
+ ID mid = RNODE_ATTRASGN(node)->nd_mid;
+ VALUE argc;
+ LABEL *else_label = NULL;
+ VALUE branches = Qfalse;
+
+ INIT_ANCHOR(recv);
+ INIT_ANCHOR(args);
+ argc = setup_args(iseq, args, RNODE_ATTRASGN(node)->nd_args, &flag, NULL);
+ CHECK(!NIL_P(argc));
+
+ int asgnflag = COMPILE_RECV(recv, "recv", node, RNODE_ATTRASGN(node)->nd_recv);
+ CHECK(asgnflag != -1);
+ flag |= (unsigned int)asgnflag;
+
+ debugp_param("argc", argc);
+ debugp_param("nd_mid", ID2SYM(mid));
+
+ if (!rb_is_attrset_id(mid)) {
+ /* safe nav attr */
+ mid = rb_id_attrset(mid);
+ else_label = qcall_branch_start(iseq, recv, &branches, node, node);
+ }
+ if (!popped) {
+ ADD_INSN(ret, node, putnil);
+ ADD_SEQ(ret, recv);
+ ADD_SEQ(ret, args);
+
+ if (flag & VM_CALL_ARGS_SPLAT) {
+ ADD_INSN(ret, node, dup);
+ ADD_INSN1(ret, node, putobject, INT2FIX(-1));
+ ADD_SEND_WITH_FLAG(ret, node, idAREF, INT2FIX(1), INT2FIX(asgnflag));
+ ADD_INSN1(ret, node, setn, FIXNUM_INC(argc, 2));
+ ADD_INSN (ret, node, pop);
+ }
+ else {
+ ADD_INSN1(ret, node, setn, FIXNUM_INC(argc, 1));
+ }
+ }
+ else {
+ ADD_SEQ(ret, recv);
+ ADD_SEQ(ret, args);
+ }
+ ADD_SEND_WITH_FLAG(ret, node, mid, argc, INT2FIX(flag));
+ qcall_branch_end(iseq, ret, else_label, branches, node, node);
+ ADD_INSN(ret, node, pop);
+ return COMPILE_OK;
+}
+
+static int
+compile_make_shareable_node(rb_iseq_t *iseq, LINK_ANCHOR *ret, LINK_ANCHOR *sub, const NODE *value, bool copy)
+{
+ ADD_INSN1(ret, value, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_SEQ(ret, sub);
+
+ if (copy) {
+ /*
+ * NEW_CALL(fcore, rb_intern("make_shareable_copy"),
+ * NEW_LIST(value, loc), loc);
+ */
+ ADD_SEND_WITH_FLAG(ret, value, rb_intern("make_shareable_copy"), INT2FIX(1), INT2FIX(VM_CALL_ARGS_SIMPLE));
+ }
+ else {
+ /*
+ * NEW_CALL(fcore, rb_intern("make_shareable"),
+ * NEW_LIST(value, loc), loc);
+ */
+ ADD_SEND_WITH_FLAG(ret, value, rb_intern("make_shareable"), INT2FIX(1), INT2FIX(VM_CALL_ARGS_SIMPLE));
+ }
+
+ return COMPILE_OK;
+}
+
+static VALUE
+node_const_decl_val(const NODE *node)
+{
+ VALUE path;
+ switch (nd_type(node)) {
+ case NODE_CDECL:
+ if (RNODE_CDECL(node)->nd_vid) {
+ path = rb_id2str(RNODE_CDECL(node)->nd_vid);
+ goto end;
+ }
+ else {
+ node = RNODE_CDECL(node)->nd_else;
+ }
+ break;
+ case NODE_COLON2:
+ break;
+ case NODE_COLON3:
+ // ::Const
+ path = rb_str_new_cstr("::");
+ rb_str_append(path, rb_id2str(RNODE_COLON3(node)->nd_mid));
+ goto end;
+ default:
+ rb_bug("unexpected node: %s", ruby_node_name(nd_type(node)));
+ UNREACHABLE_RETURN(0);
+ }
+
+ path = rb_ary_new();
+ if (node) {
+ for (; node && nd_type_p(node, NODE_COLON2); node = RNODE_COLON2(node)->nd_head) {
+ rb_ary_push(path, rb_id2str(RNODE_COLON2(node)->nd_mid));
+ }
+ if (node && nd_type_p(node, NODE_CONST)) {
+ // Const::Name
+ rb_ary_push(path, rb_id2str(RNODE_CONST(node)->nd_vid));
+ }
+ else if (node && nd_type_p(node, NODE_COLON3)) {
+ // ::Const::Name
+ rb_ary_push(path, rb_id2str(RNODE_COLON3(node)->nd_mid));
+ rb_ary_push(path, rb_str_new(0, 0));
+ }
+ else {
+ // expression::Name
+ rb_ary_push(path, rb_str_new_cstr("..."));
+ }
+ path = rb_ary_join(rb_ary_reverse(path), rb_str_new_cstr("::"));
+ }
+ end:
+ path = rb_fstring(path);
+ return path;
+}
+
+static VALUE
+const_decl_path(NODE *dest)
+{
+ VALUE path = Qnil;
+ if (!nd_type_p(dest, NODE_CALL)) {
+ path = node_const_decl_val(dest);
+ }
+ return path;
+}
+
+static int
+compile_ensure_shareable_node(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *dest, const NODE *value)
+{
+ /*
+ *. RubyVM::FrozenCore.ensure_shareable(value, const_decl_path(dest))
+ */
+ VALUE path = const_decl_path(dest);
+ ADD_INSN1(ret, value, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ CHECK(COMPILE(ret, "compile_ensure_shareable_node", value));
+ ADD_INSN1(ret, value, putobject, path);
+ RB_OBJ_WRITTEN(iseq, Qundef, path);
+ ADD_SEND_WITH_FLAG(ret, value, rb_intern("ensure_shareable"), INT2FIX(2), INT2FIX(VM_CALL_ARGS_SIMPLE));
+
+ return COMPILE_OK;
+}
+
+#ifndef SHAREABLE_BARE_EXPRESSION
+#define SHAREABLE_BARE_EXPRESSION 1
+#endif
+
+static int
+compile_shareable_literal_constant(rb_iseq_t *iseq, LINK_ANCHOR *ret, enum rb_parser_shareability shareable, NODE *dest, const NODE *node, size_t level, VALUE *value_p, int *shareable_literal_p)
+{
+# define compile_shareable_literal_constant_next(node, anchor, value_p, shareable_literal_p) \
+ compile_shareable_literal_constant(iseq, anchor, shareable, dest, node, level+1, value_p, shareable_literal_p)
+ VALUE lit = Qnil;
+ DECL_ANCHOR(anchor);
+
+ enum node_type type = node ? nd_type(node) : NODE_NIL;
+ switch (type) {
+ case NODE_TRUE:
+ *value_p = Qtrue;
+ goto compile;
+ case NODE_FALSE:
+ *value_p = Qfalse;
+ goto compile;
+ case NODE_NIL:
+ *value_p = Qnil;
+ goto compile;
+ case NODE_SYM:
+ *value_p = rb_node_sym_string_val(node);
+ goto compile;
+ case NODE_REGX:
+ *value_p = rb_node_regx_string_val(node);
+ goto compile;
+ case NODE_LINE:
+ *value_p = rb_node_line_lineno_val(node);
+ goto compile;
+ case NODE_INTEGER:
+ *value_p = rb_node_integer_literal_val(node);
+ goto compile;
+ case NODE_FLOAT:
+ *value_p = rb_node_float_literal_val(node);
+ goto compile;
+ case NODE_RATIONAL:
+ *value_p = rb_node_rational_literal_val(node);
+ goto compile;
+ case NODE_IMAGINARY:
+ *value_p = rb_node_imaginary_literal_val(node);
+ goto compile;
+ case NODE_ENCODING:
+ *value_p = rb_node_encoding_val(node);
+
+ compile:
+ CHECK(COMPILE(ret, "shareable_literal_constant", node));
+ *shareable_literal_p = 1;
+ return COMPILE_OK;
+
+ case NODE_DSTR:
+ CHECK(COMPILE(ret, "shareable_literal_constant", node));
+ if (shareable == rb_parser_shareable_literal) {
+ /*
+ * NEW_CALL(node, idUMinus, 0, loc);
+ *
+ * -"#{var}"
+ */
+ ADD_SEND_WITH_FLAG(ret, node, idUMinus, INT2FIX(0), INT2FIX(VM_CALL_ARGS_SIMPLE));
+ }
+ *value_p = Qundef;
+ *shareable_literal_p = 1;
+ return COMPILE_OK;
+
+ case NODE_STR:{
+ VALUE lit = rb_node_str_string_val(node);
+ ADD_INSN1(ret, node, putobject, lit);
+ RB_OBJ_WRITTEN(iseq, Qundef, lit);
+ *value_p = lit;
+ *shareable_literal_p = 1;
+
+ return COMPILE_OK;
}
- case NODE_RETRY:{
- if (iseq->body->type == ISEQ_TYPE_RESCUE) {
- ADD_INSN(ret, line, putnil);
- ADD_INSN1(ret, line, throw, INT2FIX(TAG_RETRY));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- }
- else {
- COMPILE_ERROR(ERROR_ARGS "Invalid retry");
- }
- break;
+
+ case NODE_FILE:{
+ VALUE lit = rb_node_file_path_val(node);
+ ADD_INSN1(ret, node, putobject, lit);
+ RB_OBJ_WRITTEN(iseq, Qundef, lit);
+ *value_p = lit;
+ *shareable_literal_p = 1;
+
+ return COMPILE_OK;
}
- case NODE_BEGIN:{
- COMPILE_(ret, "NODE_BEGIN", node->nd_body, poped);
- break;
+
+ case NODE_ZLIST:{
+ VALUE lit = rb_ary_new();
+ OBJ_FREEZE(lit);
+ ADD_INSN1(ret, node, putobject, lit);
+ RB_OBJ_WRITTEN(iseq, Qundef, lit);
+ *value_p = lit;
+ *shareable_literal_p = 1;
+
+ return COMPILE_OK;
}
- case NODE_RESCUE:{
- LABEL *lstart = NEW_LABEL(line);
- LABEL *lend = NEW_LABEL(line);
- LABEL *lcont = NEW_LABEL(line);
- const rb_iseq_t *rescue = NEW_CHILD_ISEQ(node->nd_resq,
- rb_str_concat(rb_str_new2("rescue in "), iseq->body->location.label),
- ISEQ_TYPE_RESCUE, line);
-
- ADD_LABEL(ret, lstart);
- COMPILE(ret, "rescue head", node->nd_head);
- ADD_LABEL(ret, lend);
- if (node->nd_else) {
- ADD_INSN(ret, line, pop);
- COMPILE(ret, "rescue else", node->nd_else);
- }
- ADD_INSN(ret, line, nop);
- ADD_LABEL(ret, lcont);
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
-
- /* register catch entry */
- ADD_CATCH_ENTRY(CATCH_TYPE_RESCUE, lstart, lend, rescue, lcont);
- ADD_CATCH_ENTRY(CATCH_TYPE_RETRY, lend, lcont, 0, lstart);
- break;
+
+ case NODE_LIST:{
+ INIT_ANCHOR(anchor);
+ lit = rb_ary_new();
+ for (NODE *n = (NODE *)node; n; n = RNODE_LIST(n)->nd_next) {
+ VALUE val;
+ int shareable_literal_p2;
+ NODE *elt = RNODE_LIST(n)->nd_head;
+ if (elt) {
+ CHECK(compile_shareable_literal_constant_next(elt, anchor, &val, &shareable_literal_p2));
+ if (shareable_literal_p2) {
+ /* noop */
+ }
+ else if (RTEST(lit)) {
+ rb_ary_clear(lit);
+ lit = Qfalse;
+ }
+ }
+ if (RTEST(lit)) {
+ if (!UNDEF_P(val)) {
+ rb_ary_push(lit, val);
+ }
+ else {
+ rb_ary_clear(lit);
+ lit = Qnil; /* make shareable at runtime */
+ }
+ }
+ }
+ break;
}
- case NODE_RESBODY:{
- NODE *resq = node;
- NODE *narg;
- LABEL *label_miss, *label_hit;
-
- while (resq) {
- label_miss = NEW_LABEL(line);
- label_hit = NEW_LABEL(line);
-
- narg = resq->nd_args;
- if (narg) {
- switch (nd_type(narg)) {
- case NODE_ARRAY:
- while (narg) {
- ADD_INSN2(ret, line, getlocal, INT2FIX(2), INT2FIX(0));
- COMPILE(ret, "rescue arg", narg->nd_head);
- ADD_INSN1(ret, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE));
- ADD_INSNL(ret, line, branchif, label_hit);
- narg = narg->nd_next;
- }
- break;
- case NODE_SPLAT:
- case NODE_ARGSCAT:
- case NODE_ARGSPUSH:
- ADD_INSN2(ret, line, getlocal, INT2FIX(2), INT2FIX(0));
- COMPILE(ret, "rescue/cond splat", narg);
- ADD_INSN1(ret, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE | VM_CHECKMATCH_ARRAY));
- ADD_INSNL(ret, line, branchif, label_hit);
- break;
- default:
- UNKNOWN_NODE("NODE_RESBODY", narg);
- }
- }
- else {
- ADD_INSN2(ret, line, getlocal, INT2FIX(2), INT2FIX(0));
- ADD_INSN1(ret, line, putobject, rb_eStandardError);
- ADD_INSN1(ret, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE));
- ADD_INSNL(ret, line, branchif, label_hit);
- }
- ADD_INSNL(ret, line, jump, label_miss);
- ADD_LABEL(ret, label_hit);
- COMPILE(ret, "resbody body", resq->nd_body);
- if (ISEQ_COMPILE_DATA(iseq)->option->tailcall_optimization) {
- ADD_INSN(ret, line, nop);
- }
- ADD_INSN(ret, line, leave);
- ADD_LABEL(ret, label_miss);
- resq = resq->nd_head;
- }
- break;
+ case NODE_HASH:{
+ if (!RNODE_HASH(node)->nd_brace) {
+ *value_p = Qundef;
+ *shareable_literal_p = 0;
+ return COMPILE_OK;
+ }
+ for (NODE *n = RNODE_HASH(node)->nd_head; n; n = RNODE_LIST(RNODE_LIST(n)->nd_next)->nd_next) {
+ if (!RNODE_LIST(n)->nd_head) {
+ // If the hash node have a keyword splat, fall back to the default case.
+ goto compile_shareable;
+ }
+ }
+
+ INIT_ANCHOR(anchor);
+ lit = rb_hash_new();
+ for (NODE *n = RNODE_HASH(node)->nd_head; n; n = RNODE_LIST(RNODE_LIST(n)->nd_next)->nd_next) {
+ VALUE key_val = 0;
+ VALUE value_val = 0;
+ int shareable_literal_p2;
+ NODE *key = RNODE_LIST(n)->nd_head;
+ NODE *val = RNODE_LIST(RNODE_LIST(n)->nd_next)->nd_head;
+ CHECK(compile_shareable_literal_constant_next(key, anchor, &key_val, &shareable_literal_p2));
+ if (shareable_literal_p2) {
+ /* noop */
+ }
+ else if (RTEST(lit)) {
+ rb_hash_clear(lit);
+ lit = Qfalse;
+ }
+ CHECK(compile_shareable_literal_constant_next(val, anchor, &value_val, &shareable_literal_p2));
+ if (shareable_literal_p2) {
+ /* noop */
+ }
+ else if (RTEST(lit)) {
+ rb_hash_clear(lit);
+ lit = Qfalse;
+ }
+ if (RTEST(lit)) {
+ if (!UNDEF_P(key_val) && !UNDEF_P(value_val)) {
+ rb_hash_aset(lit, key_val, value_val);
+ }
+ else {
+ rb_hash_clear(lit);
+ lit = Qnil; /* make shareable at runtime */
+ }
+ }
+ }
+ break;
}
- case NODE_ENSURE:{
- DECL_ANCHOR(ensr);
- const rb_iseq_t *ensure = NEW_CHILD_ISEQ(node->nd_ensr,
- rb_str_concat(rb_str_new2 ("ensure in "), iseq->body->location.label),
- ISEQ_TYPE_ENSURE, line);
- LABEL *lstart = NEW_LABEL(line);
- LABEL *lend = NEW_LABEL(line);
- LABEL *lcont = NEW_LABEL(line);
- struct ensure_range er;
- struct iseq_compile_data_ensure_node_stack enl;
- struct ensure_range *erange;
-
- INIT_ANCHOR(ensr);
- COMPILE_POPED(ensr, "ensure ensr", node->nd_ensr);
-
- er.begin = lstart;
- er.end = lend;
- er.next = 0;
- push_ensure_entry(iseq, &enl, &er, node->nd_ensr);
-
- ADD_LABEL(ret, lstart);
- COMPILE_(ret, "ensure head", node->nd_head, poped);
- ADD_LABEL(ret, lend);
- if (ensr->anchor.next == 0) {
- ADD_INSN(ret, line, nop);
- }
- else {
- ADD_SEQ(ret, ensr);
- }
- ADD_LABEL(ret, lcont);
-
- erange = ISEQ_COMPILE_DATA(iseq)->ensure_node_stack->erange;
- while (erange) {
- ADD_CATCH_ENTRY(CATCH_TYPE_ENSURE, erange->begin, erange->end,
- ensure, lcont);
- erange = erange->next;
- }
-
- ISEQ_COMPILE_DATA(iseq)->ensure_node_stack = enl.prev;
- break;
+
+ default:
+
+ compile_shareable:
+ if (shareable == rb_parser_shareable_literal &&
+ (SHAREABLE_BARE_EXPRESSION || level > 0)) {
+ CHECK(compile_ensure_shareable_node(iseq, ret, dest, node));
+ *value_p = Qundef;
+ *shareable_literal_p = 1;
+ return COMPILE_OK;
+ }
+ CHECK(COMPILE(ret, "shareable_literal_constant", node));
+ *value_p = Qundef;
+ *shareable_literal_p = 0;
+ return COMPILE_OK;
+ }
+
+ /* Array or Hash that does not have keyword splat */
+ if (!lit) {
+ if (nd_type(node) == NODE_LIST) {
+ ADD_INSN1(anchor, node, newarray, INT2FIX(RNODE_LIST(node)->as.nd_alen));
+ }
+ else if (nd_type(node) == NODE_HASH) {
+ int len = (int)RNODE_LIST(RNODE_HASH(node)->nd_head)->as.nd_alen;
+ ADD_INSN1(anchor, node, newhash, INT2FIX(len));
+ }
+ *value_p = Qundef;
+ *shareable_literal_p = 0;
+ ADD_SEQ(ret, anchor);
+ return COMPILE_OK;
+ }
+ if (NIL_P(lit)) {
+ // if shareable_literal, all elements should have been ensured
+ // as shareable
+ if (nd_type(node) == NODE_LIST) {
+ ADD_INSN1(anchor, node, newarray, INT2FIX(RNODE_LIST(node)->as.nd_alen));
+ }
+ else if (nd_type(node) == NODE_HASH) {
+ int len = (int)RNODE_LIST(RNODE_HASH(node)->nd_head)->as.nd_alen;
+ ADD_INSN1(anchor, node, newhash, INT2FIX(len));
+ }
+ CHECK(compile_make_shareable_node(iseq, ret, anchor, node, false));
+ *value_p = Qundef;
+ *shareable_literal_p = 1;
+ }
+ else {
+ VALUE val = rb_ractor_make_shareable(lit);
+ ADD_INSN1(ret, node, putobject, val);
+ RB_OBJ_WRITTEN(iseq, Qundef, val);
+ *value_p = val;
+ *shareable_literal_p = 1;
+ }
+
+ return COMPILE_OK;
+}
+
+static int
+compile_shareable_constant_value(rb_iseq_t *iseq, LINK_ANCHOR *ret, enum rb_parser_shareability shareable, const NODE *lhs, const NODE *value)
+{
+ int literal_p = 0;
+ VALUE val;
+ DECL_ANCHOR(anchor);
+ INIT_ANCHOR(anchor);
+
+ switch (shareable) {
+ case rb_parser_shareable_none:
+ CHECK(COMPILE(ret, "compile_shareable_constant_value", value));
+ return COMPILE_OK;
+
+ case rb_parser_shareable_literal:
+ CHECK(compile_shareable_literal_constant(iseq, anchor, shareable, (NODE *)lhs, value, 0, &val, &literal_p));
+ ADD_SEQ(ret, anchor);
+ return COMPILE_OK;
+
+ case rb_parser_shareable_copy:
+ case rb_parser_shareable_everything:
+ CHECK(compile_shareable_literal_constant(iseq, anchor, shareable, (NODE *)lhs, value, 0, &val, &literal_p));
+ if (!literal_p) {
+ CHECK(compile_make_shareable_node(iseq, ret, anchor, value, shareable == rb_parser_shareable_copy));
+ }
+ else {
+ ADD_SEQ(ret, anchor);
+ }
+ return COMPILE_OK;
+ default:
+ rb_bug("unexpected rb_parser_shareability: %d", shareable);
+ }
+}
+
+static int iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped);
+/**
+ compile each node
+
+ self: InstructionSequence
+ node: Ruby compiled node
+ popped: This node will be popped
+ */
+static int
+iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, const NODE *node, int popped)
+{
+ if (node == 0) {
+ if (!popped) {
+ int lineno = ISEQ_COMPILE_DATA(iseq)->last_line;
+ if (lineno == 0) lineno = FIX2INT(rb_iseq_first_lineno(iseq));
+ debugs("node: NODE_NIL(implicit)\n");
+ ADD_SYNTHETIC_INSN(ret, lineno, -1, putnil);
+ }
+ return COMPILE_OK;
+ }
+ return iseq_compile_each0(iseq, ret, node, popped);
+}
+
+static int
+iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int popped)
+{
+ const int line = (int)nd_line(node);
+ const enum node_type type = nd_type(node);
+ struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
+
+ if (ISEQ_COMPILE_DATA(iseq)->last_line == line) {
+ /* ignore */
+ }
+ else {
+ if (nd_fl_newline(node)) {
+ int event = RUBY_EVENT_LINE;
+ ISEQ_COMPILE_DATA(iseq)->last_line = line;
+ if (line > 0 && ISEQ_COVERAGE(iseq) && ISEQ_LINE_COVERAGE(iseq)) {
+ event |= RUBY_EVENT_COVERAGE_LINE;
+ }
+ ADD_TRACE(ret, event);
+ }
+ }
+
+ debug_node_start(node);
+#undef BEFORE_RETURN
+#define BEFORE_RETURN debug_node_end()
+
+ switch (type) {
+ case NODE_BLOCK:
+ CHECK(compile_block(iseq, ret, node, popped));
+ break;
+ case NODE_IF:
+ case NODE_UNLESS:
+ CHECK(compile_if(iseq, ret, node, popped, type));
+ break;
+ case NODE_CASE:
+ CHECK(compile_case(iseq, ret, node, popped));
+ break;
+ case NODE_CASE2:
+ CHECK(compile_case2(iseq, ret, node, popped));
+ break;
+ case NODE_CASE3:
+ CHECK(compile_case3(iseq, ret, node, popped));
+ break;
+ case NODE_WHILE:
+ case NODE_UNTIL:
+ CHECK(compile_loop(iseq, ret, node, popped, type));
+ break;
+ case NODE_FOR:
+ case NODE_ITER:
+ CHECK(compile_iter(iseq, ret, node, popped));
+ break;
+ case NODE_FOR_MASGN:
+ CHECK(compile_for_masgn(iseq, ret, node, popped));
+ break;
+ case NODE_BREAK:
+ CHECK(compile_break(iseq, ret, node, popped));
+ break;
+ case NODE_NEXT:
+ CHECK(compile_next(iseq, ret, node, popped));
+ break;
+ case NODE_REDO:
+ CHECK(compile_redo(iseq, ret, node, popped));
+ break;
+ case NODE_RETRY:
+ CHECK(compile_retry(iseq, ret, node, popped));
+ break;
+ case NODE_BEGIN:{
+ CHECK(COMPILE_(ret, "NODE_BEGIN", RNODE_BEGIN(node)->nd_body, popped));
+ break;
}
+ case NODE_RESCUE:
+ CHECK(compile_rescue(iseq, ret, node, popped));
+ break;
+ case NODE_RESBODY:
+ CHECK(compile_resbody(iseq, ret, node, popped));
+ break;
+ case NODE_ENSURE:
+ CHECK(compile_ensure(iseq, ret, node, popped));
+ break;
case NODE_AND:
case NODE_OR:{
- LABEL *end_label = NEW_LABEL(line);
- COMPILE(ret, "nd_1st", node->nd_1st);
- if (!poped) {
- ADD_INSN(ret, line, dup);
- }
- if (type == NODE_AND) {
- ADD_INSNL(ret, line, branchunless, end_label);
- }
- else {
- ADD_INSNL(ret, line, branchif, end_label);
- }
- if (!poped) {
- ADD_INSN(ret, line, pop);
- }
- COMPILE_(ret, "nd_2nd", node->nd_2nd, poped);
- ADD_LABEL(ret, end_label);
- break;
+ LABEL *end_label = NEW_LABEL(line);
+ CHECK(COMPILE(ret, "nd_1st", RNODE_OR(node)->nd_1st));
+ if (!popped) {
+ ADD_INSN(ret, node, dup);
+ }
+ if (type == NODE_AND) {
+ ADD_INSNL(ret, node, branchunless, end_label);
+ }
+ else {
+ ADD_INSNL(ret, node, branchif, end_label);
+ }
+ if (!popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ CHECK(COMPILE_(ret, "nd_2nd", RNODE_OR(node)->nd_2nd, popped));
+ ADD_LABEL(ret, end_label);
+ break;
}
case NODE_MASGN:{
- compile_massign(iseq, ret, node, poped);
- break;
+ compile_massign(iseq, ret, node, popped);
+ break;
}
case NODE_LASGN:{
- ID id = node->nd_vid;
- int idx = iseq->body->local_iseq->body->local_size - get_local_var_idx(iseq, id);
-
- debugs("lvar: %"PRIsVALUE" idx: %d\n", rb_id2str(id), idx);
- COMPILE(ret, "rvalue", node->nd_value);
+ ID id = RNODE_LASGN(node)->nd_vid;
+ int idx = ISEQ_BODY(body->local_iseq)->local_table_size - get_local_var_idx(iseq, id);
- if (!poped) {
- ADD_INSN(ret, line, dup);
- }
- ADD_INSN2(ret, line, setlocal, INT2FIX(idx), INT2FIX(get_lvar_level(iseq)));
+ debugs("lvar: %s idx: %d\n", rb_id2name(id), idx);
+ CHECK(COMPILE(ret, "rvalue", RNODE_LASGN(node)->nd_value));
- break;
+ if (!popped) {
+ ADD_INSN(ret, node, dup);
+ }
+ ADD_SETLOCAL(ret, node, idx, get_lvar_level(iseq));
+ break;
}
- case NODE_DASGN:
- case NODE_DASGN_CURR:{
- int idx, lv, ls;
- COMPILE(ret, "dvalue", node->nd_value);
- debugi("dassn id", rb_id2str(node->nd_vid) ? node->nd_vid : '*');
-
- if (!poped) {
- ADD_INSN(ret, line, dup);
- }
-
- idx = get_dyna_var_idx(iseq, node->nd_vid, &lv, &ls);
-
- if (idx < 0) {
- rb_compile_bug_str(ERROR_ARGS "NODE_DASGN(_CURR): unknown id (%"PRIsVALUE")", rb_id2str(node->nd_vid));
- }
-
- ADD_INSN2(ret, line, setlocal, INT2FIX(ls - idx), INT2FIX(lv));
- break;
+ case NODE_DASGN: {
+ int idx, lv, ls;
+ ID id = RNODE_DASGN(node)->nd_vid;
+ CHECK(COMPILE(ret, "dvalue", RNODE_DASGN(node)->nd_value));
+ debugi("dassn id", rb_id2str(id) ? id : '*');
+
+ if (!popped) {
+ ADD_INSN(ret, node, dup);
+ }
+
+ idx = get_dyna_var_idx(iseq, id, &lv, &ls);
+
+ if (idx < 0) {
+ COMPILE_ERROR(ERROR_ARGS "NODE_DASGN: unknown id (%"PRIsVALUE")",
+ rb_id2str(id));
+ goto ng;
+ }
+ ADD_SETLOCAL(ret, node, ls - idx, lv);
+ break;
}
case NODE_GASGN:{
- COMPILE(ret, "lvalue", node->nd_value);
-
- if (!poped) {
- ADD_INSN(ret, line, dup);
- }
- ADD_INSN1(ret, line, setglobal,
- ((VALUE)node->nd_entry | 1));
- break;
+ CHECK(COMPILE(ret, "lvalue", RNODE_GASGN(node)->nd_value));
+
+ if (!popped) {
+ ADD_INSN(ret, node, dup);
+ }
+ ADD_INSN1(ret, node, setglobal, ID2SYM(RNODE_GASGN(node)->nd_vid));
+ break;
}
- case NODE_IASGN:
- case NODE_IASGN2:{
- COMPILE(ret, "lvalue", node->nd_value);
- if (!poped) {
- ADD_INSN(ret, line, dup);
- }
- ADD_INSN2(ret, line, setinstancevariable,
- ID2SYM(node->nd_vid), INT2FIX(iseq->body->is_size++));
- break;
+ case NODE_IASGN:{
+ CHECK(COMPILE(ret, "lvalue", RNODE_IASGN(node)->nd_value));
+ if (!popped) {
+ ADD_INSN(ret, node, dup);
+ }
+ ADD_INSN2(ret, node, setinstancevariable,
+ ID2SYM(RNODE_IASGN(node)->nd_vid),
+ get_ivar_ic_value(iseq,RNODE_IASGN(node)->nd_vid));
+ break;
}
case NODE_CDECL:{
- COMPILE(ret, "lvalue", node->nd_value);
-
- if (!poped) {
- ADD_INSN(ret, line, dup);
- }
-
- if (node->nd_vid) {
- ADD_INSN1(ret, line, putspecialobject,
- INT2FIX(VM_SPECIAL_OBJECT_CONST_BASE));
- ADD_INSN1(ret, line, setconstant, ID2SYM(node->nd_vid));
- }
- else {
- compile_cpath(ret, iseq, node->nd_else);
- ADD_INSN1(ret, line, setconstant, ID2SYM(node->nd_else->nd_mid));
- }
- break;
+ if (RNODE_CDECL(node)->nd_vid) {
+ CHECK(compile_shareable_constant_value(iseq, ret, RNODE_CDECL(node)->shareability, node, RNODE_CDECL(node)->nd_value));
+
+ if (!popped) {
+ ADD_INSN(ret, node, dup);
+ }
+
+ ADD_INSN1(ret, node, putspecialobject,
+ INT2FIX(VM_SPECIAL_OBJECT_CONST_BASE));
+ ADD_INSN1(ret, node, setconstant, ID2SYM(RNODE_CDECL(node)->nd_vid));
+ }
+ else {
+ compile_cpath(ret, iseq, RNODE_CDECL(node)->nd_else);
+ CHECK(compile_shareable_constant_value(iseq, ret, RNODE_CDECL(node)->shareability, node, RNODE_CDECL(node)->nd_value));
+ ADD_INSN(ret, node, swap);
+
+ if (!popped) {
+ ADD_INSN1(ret, node, topn, INT2FIX(1));
+ ADD_INSN(ret, node, swap);
+ }
+
+ ADD_INSN1(ret, node, setconstant, ID2SYM(get_node_colon_nd_mid(RNODE_CDECL(node)->nd_else)));
+ }
+ break;
}
case NODE_CVASGN:{
- COMPILE(ret, "cvasgn val", node->nd_value);
- if (!poped) {
- ADD_INSN(ret, line, dup);
- }
- ADD_INSN1(ret, line, setclassvariable,
- ID2SYM(node->nd_vid));
- break;
- }
- case NODE_OP_ASGN1: {
- DECL_ANCHOR(args);
- VALUE argc;
- unsigned int flag = 0;
- unsigned int asgnflag = 0;
- ID id = node->nd_mid;
- int boff = 0;
-
- /*
- * a[x] (op)= y
- *
- * nil # nil
- * eval a # nil a
- * eval x # nil a x
- * dupn 2 # nil a x a x
- * send :[] # nil a x a[x]
- * eval y # nil a x a[x] y
- * send op # nil a x ret
- * setn 3 # ret a x ret
- * send []= # ret ?
- * pop # ret
- */
-
- /*
- * nd_recv[nd_args->nd_body] (nd_mid)= nd_args->nd_head;
- * NODE_OP_ASGN nd_recv
- * nd_args->nd_head
- * nd_args->nd_body
- * nd_mid
- */
-
- if (!poped) {
- ADD_INSN(ret, line, putnil);
- }
- asgnflag = COMPILE_RECV(ret, "NODE_OP_ASGN1 recv", node);
- switch (nd_type(node->nd_args->nd_head)) {
- case NODE_ZARRAY:
- argc = INT2FIX(0);
- break;
- case NODE_BLOCK_PASS:
- boff = 1;
- default:
- INIT_ANCHOR(args);
- argc = setup_args(iseq, args, node->nd_args->nd_head, &flag, NULL);
- ADD_SEQ(ret, args);
- }
- ADD_INSN1(ret, line, dupn, FIXNUM_INC(argc, 1 + boff));
- ADD_SEND_WITH_FLAG(ret, line, idAREF, argc, INT2FIX(flag));
- flag |= asgnflag;
-
- if (id == 0 || id == 1) {
- /* 0: or, 1: and
- a[x] ||= y
-
- unless/if a[x]
- a[x]= y
- else
- nil
- end
- */
- LABEL *label = NEW_LABEL(line);
- LABEL *lfin = NEW_LABEL(line);
-
- ADD_INSN(ret, line, dup);
- if (id == 0) {
- /* or */
- ADD_INSNL(ret, line, branchif, label);
- }
- else {
- /* and */
- ADD_INSNL(ret, line, branchunless, label);
- }
- ADD_INSN(ret, line, pop);
-
- COMPILE(ret, "NODE_OP_ASGN1 args->body: ", node->nd_args->nd_body);
- if (!poped) {
- ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 2+boff));
- }
- if (flag & VM_CALL_ARGS_SPLAT) {
- ADD_INSN1(ret, line, newarray, INT2FIX(1));
- if (boff > 0) {
- ADD_INSN1(ret, line, dupn, INT2FIX(3));
- ADD_INSN(ret, line, swap);
- ADD_INSN(ret, line, pop);
- }
- ADD_INSN(ret, line, concatarray);
- if (boff > 0) {
- ADD_INSN1(ret, line, setn, INT2FIX(3));
- ADD_INSN(ret, line, pop);
- ADD_INSN(ret, line, pop);
- }
- ADD_SEND_WITH_FLAG(ret, line, idASET, argc, INT2FIX(flag));
- }
- else {
- if (boff > 0)
- ADD_INSN(ret, line, swap);
- ADD_SEND_WITH_FLAG(ret, line, idASET, FIXNUM_INC(argc, 1), INT2FIX(flag));
- }
- ADD_INSN(ret, line, pop);
- ADD_INSNL(ret, line, jump, lfin);
- ADD_LABEL(ret, label);
- if (!poped) {
- ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 2+boff));
- }
- ADD_INSN1(ret, line, adjuststack, FIXNUM_INC(argc, 2+boff));
- ADD_LABEL(ret, lfin);
- }
- else {
- COMPILE(ret, "NODE_OP_ASGN1 args->body: ", node->nd_args->nd_body);
- ADD_SEND(ret, line, id, INT2FIX(1));
- if (!poped) {
- ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 2+boff));
- }
- if (flag & VM_CALL_ARGS_SPLAT) {
- ADD_INSN1(ret, line, newarray, INT2FIX(1));
- if (boff > 0) {
- ADD_INSN1(ret, line, dupn, INT2FIX(3));
- ADD_INSN(ret, line, swap);
- ADD_INSN(ret, line, pop);
- }
- ADD_INSN(ret, line, concatarray);
- if (boff > 0) {
- ADD_INSN1(ret, line, setn, INT2FIX(3));
- ADD_INSN(ret, line, pop);
- ADD_INSN(ret, line, pop);
- }
- ADD_SEND_WITH_FLAG(ret, line, idASET, argc, INT2FIX(flag));
- }
- else {
- if (boff > 0)
- ADD_INSN(ret, line, swap);
- ADD_SEND_WITH_FLAG(ret, line, idASET, FIXNUM_INC(argc, 1), INT2FIX(flag));
- }
- ADD_INSN(ret, line, pop);
- }
-
- break;
- }
- case NODE_OP_ASGN2:{
- ID atype = node->nd_next->nd_mid;
- ID vid = node->nd_next->nd_vid, aid = rb_id_attrset(vid);
- VALUE asgnflag;
- LABEL *lfin = NEW_LABEL(line);
- LABEL *lcfin = NEW_LABEL(line);
- LABEL *lskip = 0;
- /*
- class C; attr_accessor :c; end
- r = C.new
- r.a &&= v # asgn2
-
- eval r # r
- dup # r r
- eval r.a # r o
-
- # or
- dup # r o o
- if lcfin # r o
- pop # r
- eval v # r v
- swap # v r
- topn 1 # v r v
- send a= # v ?
- jump lfin # v ?
-
- lcfin: # r o
- swap # o r
-
- lfin: # o ?
- pop # o
-
- # and
- dup # r o o
- unless lcfin
- pop # r
- eval v # r v
- swap # v r
- topn 1 # v r v
- send a= # v ?
- jump lfin # v ?
-
- # others
- eval v # r o v
- send ?? # r w
- send a= # w
-
- */
-
- asgnflag = COMPILE_RECV(ret, "NODE_OP_ASGN2#recv", node);
- if (node->nd_next->nd_aid) {
- lskip = NEW_LABEL(line);
- ADD_INSN(ret, line, dup);
- ADD_INSNL(ret, line, branchnil, lskip);
- }
- ADD_INSN(ret, line, dup);
- ADD_SEND(ret, line, vid, INT2FIX(0));
-
- if (atype == 0 || atype == 1) { /* 0: OR or 1: AND */
- ADD_INSN(ret, line, dup);
- if (atype == 0) {
- ADD_INSNL(ret, line, branchif, lcfin);
- }
- else {
- ADD_INSNL(ret, line, branchunless, lcfin);
- }
- ADD_INSN(ret, line, pop);
- COMPILE(ret, "NODE_OP_ASGN2 val", node->nd_value);
- ADD_INSN(ret, line, swap);
- ADD_INSN1(ret, line, topn, INT2FIX(1));
- ADD_SEND_WITH_FLAG(ret, line, aid, INT2FIX(1), INT2FIX(asgnflag));
- ADD_INSNL(ret, line, jump, lfin);
-
- ADD_LABEL(ret, lcfin);
- ADD_INSN(ret, line, swap);
-
- ADD_LABEL(ret, lfin);
- ADD_INSN(ret, line, pop);
- if (lskip) {
- ADD_LABEL(ret, lskip);
- }
- if (poped) {
- /* we can apply more optimize */
- ADD_INSN(ret, line, pop);
- }
- }
- else {
- COMPILE(ret, "NODE_OP_ASGN2 val", node->nd_value);
- ADD_SEND(ret, line, atype, INT2FIX(1));
- if (!poped) {
- ADD_INSN(ret, line, swap);
- ADD_INSN1(ret, line, topn, INT2FIX(1));
- }
- ADD_SEND_WITH_FLAG(ret, line, aid, INT2FIX(1), INT2FIX(asgnflag));
- ADD_INSN(ret, line, pop);
- if (lskip) {
- ADD_LABEL(ret, lskip);
- }
- }
- break;
- }
- case NODE_OP_CDECL: {
- LABEL *lfin = 0;
- LABEL *lassign = 0;
- ID mid;
-
- switch (nd_type(node->nd_head)) {
- case NODE_COLON3:
- ADD_INSN1(ret, line, putobject, rb_cObject);
- break;
- case NODE_COLON2:
- COMPILE(ret, "NODE_OP_CDECL/colon2#nd_head", node->nd_head->nd_head);
- break;
- default:
- COMPILE_ERROR(ERROR_ARGS "%s: invalid node in NODE_OP_CDECL",
- ruby_node_name(nd_type(node->nd_head)));
- debug_node_end();
- return COMPILE_NG;
- }
- mid = node->nd_head->nd_mid;
- /* cref */
- if (node->nd_aid == 0) {
- lassign = NEW_LABEL(line);
- ADD_INSN(ret, line, dup); /* cref cref */
- ADD_INSN3(ret, line, defined, INT2FIX(DEFINED_CONST),
- ID2SYM(mid), Qfalse); /* cref bool */
- ADD_INSNL(ret, line, branchunless, lassign); /* cref */
- }
- ADD_INSN(ret, line, dup); /* cref cref */
- ADD_INSN1(ret, line, getconstant, ID2SYM(mid)); /* cref obj */
-
- if (node->nd_aid == 0 || node->nd_aid == 1) {
- lfin = NEW_LABEL(line);
- if (!poped) ADD_INSN(ret, line, dup); /* cref [obj] obj */
- if (node->nd_aid == 0)
- ADD_INSNL(ret, line, branchif, lfin);
- else
- ADD_INSNL(ret, line, branchunless, lfin);
- /* cref [obj] */
- if (!poped) ADD_INSN(ret, line, pop); /* cref */
- if (lassign) ADD_LABEL(ret, lassign);
- COMPILE(ret, "NODE_OP_CDECL#nd_value", node->nd_value);
- /* cref value */
- if (poped)
- ADD_INSN1(ret, line, topn, INT2FIX(1)); /* cref value cref */
- else {
- ADD_INSN1(ret, line, dupn, INT2FIX(2)); /* cref value cref value */
- ADD_INSN(ret, line, swap); /* cref value value cref */
- }
- ADD_INSN1(ret, line, setconstant, ID2SYM(mid)); /* cref [value] */
- ADD_LABEL(ret, lfin); /* cref [value] */
- if (!poped) ADD_INSN(ret, line, swap); /* [value] cref */
- ADD_INSN(ret, line, pop); /* [value] */
- }
- else {
- COMPILE(ret, "NODE_OP_CDECL#nd_value", node->nd_value);
- /* cref obj value */
- ADD_CALL(ret, line, node->nd_aid, INT2FIX(1));
- /* cref value */
- ADD_INSN(ret, line, swap); /* value cref */
- if (!poped) {
- ADD_INSN1(ret, line, topn, INT2FIX(1)); /* value cref value */
- ADD_INSN(ret, line, swap); /* value value cref */
- }
- ADD_INSN1(ret, line, setconstant, ID2SYM(mid));
- }
- break;
+ CHECK(COMPILE(ret, "cvasgn val", RNODE_CVASGN(node)->nd_value));
+ if (!popped) {
+ ADD_INSN(ret, node, dup);
+ }
+ ADD_INSN2(ret, node, setclassvariable,
+ ID2SYM(RNODE_CVASGN(node)->nd_vid),
+ get_cvar_ic_value(iseq, RNODE_CVASGN(node)->nd_vid));
+ break;
}
+ case NODE_OP_ASGN1:
+ CHECK(compile_op_asgn1(iseq, ret, node, popped));
+ break;
+ case NODE_OP_ASGN2:
+ CHECK(compile_op_asgn2(iseq, ret, node, popped));
+ break;
+ case NODE_OP_CDECL:
+ CHECK(compile_op_cdecl(iseq, ret, node, popped));
+ break;
case NODE_OP_ASGN_AND:
- case NODE_OP_ASGN_OR:{
- LABEL *lfin = NEW_LABEL(line);
- LABEL *lassign;
-
- if (nd_type(node) == NODE_OP_ASGN_OR) {
- LABEL *lfinish[2];
- lfinish[0] = lfin;
- lfinish[1] = 0;
- defined_expr(iseq, ret, node->nd_head, lfinish, Qfalse);
- lassign = lfinish[1];
- if (!lassign) {
- lassign = NEW_LABEL(line);
- }
- ADD_INSNL(ret, line, branchunless, lassign);
- }
- else {
- lassign = NEW_LABEL(line);
- }
-
- COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_head", node->nd_head);
- ADD_INSN(ret, line, dup);
-
- if (nd_type(node) == NODE_OP_ASGN_AND) {
- ADD_INSNL(ret, line, branchunless, lfin);
- }
- else {
- ADD_INSNL(ret, line, branchif, lfin);
- }
-
- ADD_INSN(ret, line, pop);
- ADD_LABEL(ret, lassign);
- COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_value", node->nd_value);
- ADD_LABEL(ret, lfin);
-
- if (poped) {
- /* we can apply more optimize */
- ADD_INSN(ret, line, pop);
- }
- break;
- }
- case NODE_CALL:
- /* optimization shortcut
- * "literal".freeze -> opt_str_freeze("literal")
- */
- if (node->nd_recv && nd_type(node->nd_recv) == NODE_STR &&
- node->nd_mid == idFreeze && node->nd_args == NULL &&
- ISEQ_COMPILE_DATA(iseq)->current_block == NULL &&
- ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction) {
- VALUE str = rb_fstring(node->nd_recv->nd_lit);
- iseq_add_mark_object(iseq, str);
- ADD_INSN1(ret, line, opt_str_freeze, str);
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
- }
- /* optimization shortcut
- * obj["literal"] -> opt_aref_with(obj, "literal")
- */
- if (node->nd_mid == idAREF && !private_recv_p(node) && node->nd_args &&
- nd_type(node->nd_args) == NODE_ARRAY && node->nd_args->nd_alen == 1 &&
- nd_type(node->nd_args->nd_head) == NODE_STR &&
- ISEQ_COMPILE_DATA(iseq)->current_block == NULL &&
- ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction) {
- VALUE str = rb_fstring(node->nd_args->nd_head->nd_lit);
- node->nd_args->nd_head->nd_lit = str;
- COMPILE(ret, "recv", node->nd_recv);
- ADD_INSN3(ret, line, opt_aref_with,
- new_callinfo(iseq, idAREF, 1, 0, NULL, FALSE),
- NULL/* CALL_CACHE */, str);
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
- }
- case NODE_QCALL:
- case NODE_FCALL:
- case NODE_VCALL:{ /* VCALL: variable or call */
- /*
- call: obj.method(...)
- fcall: func(...)
- vcall: func
- */
- DECL_ANCHOR(recv);
- DECL_ANCHOR(args);
- LABEL *lskip = 0;
- ID mid = node->nd_mid;
- VALUE argc;
- unsigned int flag = 0;
- struct rb_call_info_kw_arg *keywords = NULL;
- const rb_iseq_t *parent_block = ISEQ_COMPILE_DATA(iseq)->current_block;
- ISEQ_COMPILE_DATA(iseq)->current_block = NULL;
-
- INIT_ANCHOR(recv);
- INIT_ANCHOR(args);
-#if SUPPORT_JOKE
- if (nd_type(node) == NODE_VCALL) {
- ID id_bitblt;
- ID id_answer;
-
- CONST_ID(id_bitblt, "bitblt");
- CONST_ID(id_answer, "the_answer_to_life_the_universe_and_everything");
-
- if (mid == id_bitblt) {
- ADD_INSN(ret, line, bitblt);
- break;
- }
- else if (mid == id_answer) {
- ADD_INSN(ret, line, answer);
- break;
- }
- }
- /* only joke */
- {
- ID goto_id;
- ID label_id;
-
- CONST_ID(goto_id, "__goto__");
- CONST_ID(label_id, "__label__");
-
- if (nd_type(node) == NODE_FCALL &&
- (mid == goto_id || mid == label_id)) {
- LABEL *label;
- st_data_t data;
- st_table *labels_table = ISEQ_COMPILE_DATA(iseq)->labels_table;
- ID label_name;
-
- if (!labels_table) {
- labels_table = st_init_numtable();
- ISEQ_COMPILE_DATA(iseq)->labels_table = labels_table;
- }
- if (nd_type(node->nd_args->nd_head) == NODE_LIT &&
- SYMBOL_P(node->nd_args->nd_head->nd_lit)) {
-
- label_name = SYM2ID(node->nd_args->nd_head->nd_lit);
- if (!st_lookup(labels_table, (st_data_t)label_name, &data)) {
- label = NEW_LABEL(line);
- label->position = line;
- st_insert(labels_table, (st_data_t)label_name, (st_data_t)label);
- }
- else {
- label = (LABEL *)data;
- }
- }
- else {
- COMPILE_ERROR(ERROR_ARGS "invalid goto/label format");
- }
-
-
- if (mid == goto_id) {
- ADD_INSNL(ret, line, jump, label);
- }
- else {
- ADD_LABEL(ret, label);
- }
- break;
- }
- }
-#endif
- /* receiver */
- if (type == NODE_CALL || type == NODE_QCALL) {
- COMPILE(recv, "recv", node->nd_recv);
- if (type == NODE_QCALL) {
- lskip = NEW_LABEL(line);
- ADD_INSN(recv, line, dup);
- ADD_INSNL(recv, line, branchnil, lskip);
- }
- }
- else if (type == NODE_FCALL || type == NODE_VCALL) {
- ADD_CALL_RECEIVER(recv, line);
- }
-
- /* args */
- if (nd_type(node) != NODE_VCALL) {
- argc = setup_args(iseq, args, node->nd_args, &flag, &keywords);
- }
- else {
- argc = INT2FIX(0);
- }
-
- ADD_SEQ(ret, recv);
- ADD_SEQ(ret, args);
-
- debugp_param("call args argc", argc);
- debugp_param("call method", ID2SYM(mid));
-
- switch (nd_type(node)) {
- case NODE_VCALL:
- flag |= VM_CALL_VCALL;
- /* VCALL is funcall, so fall through */
- case NODE_FCALL:
- flag |= VM_CALL_FCALL;
- }
-
- ADD_SEND_R(ret, line, mid, argc, parent_block, INT2FIX(flag), keywords);
-
- if (lskip) {
- ADD_LABEL(ret, lskip);
- }
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
- }
+ case NODE_OP_ASGN_OR:
+ CHECK(compile_op_log(iseq, ret, node, popped, type));
+ break;
+ case NODE_CALL: /* obj.foo */
+ case NODE_OPCALL: /* foo[] */
+ if (compile_call_precheck_freeze(iseq, ret, node, node, popped) == TRUE) {
+ break;
+ }
+ case NODE_QCALL: /* obj&.foo */
+ case NODE_FCALL: /* foo() */
+ case NODE_VCALL: /* foo (variable or call) */
+ if (compile_call(iseq, ret, node, type, node, popped, false) == COMPILE_NG) {
+ goto ng;
+ }
+ break;
case NODE_SUPER:
- case NODE_ZSUPER:{
- DECL_ANCHOR(args);
- int argc;
- unsigned int flag = 0;
- struct rb_call_info_kw_arg *keywords = NULL;
- const rb_iseq_t *parent_block = ISEQ_COMPILE_DATA(iseq)->current_block;
-
- INIT_ANCHOR(args);
- ISEQ_COMPILE_DATA(iseq)->current_block = NULL;
- if (nd_type(node) == NODE_SUPER) {
- VALUE vargc = setup_args(iseq, args, node->nd_args, &flag, &keywords);
- argc = FIX2INT(vargc);
- }
- else {
- /* NODE_ZSUPER */
- int i;
- const rb_iseq_t *liseq = iseq->body->local_iseq;
- int lvar_level = get_lvar_level(iseq);
-
- argc = liseq->body->param.lead_num;
-
- /* normal arguments */
- for (i = 0; i < liseq->body->param.lead_num; i++) {
- int idx = liseq->body->local_size - i;
- ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
- }
-
- if (liseq->body->param.flags.has_opt) {
- /* optional arguments */
- int j;
- for (j = 0; j < liseq->body->param.opt_num; j++) {
- int idx = liseq->body->local_size - (i + j);
- ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
- }
- i += j;
- argc = i;
- }
- if (liseq->body->param.flags.has_rest) {
- /* rest argument */
- int idx = liseq->body->local_size - liseq->body->param.rest_start;
- ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
- argc = liseq->body->param.rest_start + 1;
- flag |= VM_CALL_ARGS_SPLAT;
- }
- if (liseq->body->param.flags.has_post) {
- /* post arguments */
- int post_len = liseq->body->param.post_num;
- int post_start = liseq->body->param.post_start;
-
- if (liseq->body->param.flags.has_rest) {
- int j;
- for (j=0; j<post_len; j++) {
- int idx = liseq->body->local_size - (post_start + j);
- ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
- }
- ADD_INSN1(args, line, newarray, INT2FIX(j));
- ADD_INSN (args, line, concatarray);
- /* argc is settled at above */
- }
- else {
- int j;
- for (j=0; j<post_len; j++) {
- int idx = liseq->body->local_size - (post_start + j);
- ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
- }
- argc = post_len + post_start;
- }
- }
-
- if (liseq->body->param.flags.has_kw) { /* TODO: support keywords */
- int local_size = liseq->body->local_size;
- argc++;
-
- ADD_INSN1(args, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
-
- if (liseq->body->param.flags.has_kwrest) {
- ADD_INSN2(args, line, getlocal, INT2FIX(liseq->body->local_size - liseq->body->param.keyword->rest_start), INT2FIX(lvar_level));
- ADD_SEND (args, line, rb_intern("dup"), INT2FIX(0));
- }
- else {
- ADD_INSN1(args, line, newhash, INT2FIX(0));
- }
- for (i = 0; i < liseq->body->param.keyword->num; ++i) {
- ID id = liseq->body->param.keyword->table[i];
- int idx = local_size - get_local_var_idx(liseq, id);
- ADD_INSN1(args, line, putobject, ID2SYM(id));
- ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
- }
- ADD_SEND(args, line, id_core_hash_merge_ptr, INT2FIX(i * 2 + 1));
- if (liseq->body->param.flags.has_rest) {
- ADD_INSN1(args, line, newarray, INT2FIX(1));
- ADD_INSN (args, line, concatarray);
- --argc;
- }
- }
- else if (liseq->body->param.flags.has_kwrest) {
- ADD_INSN2(args, line, getlocal, INT2FIX(liseq->body->local_size - liseq->body->param.keyword->rest_start), INT2FIX(lvar_level));
- ADD_SEND (args, line, rb_intern("dup"), INT2FIX(0));
- if (liseq->body->param.flags.has_rest) {
- ADD_INSN1(args, line, newarray, INT2FIX(1));
- ADD_INSN (args, line, concatarray);
- }
- else {
- argc++;
- }
- }
- }
-
- /* dummy receiver */
- ADD_INSN1(ret, line, putobject, nd_type(node) == NODE_ZSUPER ? Qfalse : Qtrue);
- ADD_SEQ(ret, args);
- ADD_INSN3(ret, line, invokesuper,
- new_callinfo(iseq, 0, argc, flag | VM_CALL_SUPER | VM_CALL_FCALL, keywords, parent_block != NULL),
- Qnil, /* CALL_CACHE */
- parent_block);
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
- }
- case NODE_ARRAY:{
- compile_array_(iseq, ret, node, COMPILE_ARRAY_TYPE_ARRAY, NULL, poped);
- break;
- }
- case NODE_ZARRAY:{
- if (!poped) {
- ADD_INSN1(ret, line, newarray, INT2FIX(0));
- }
- break;
- }
- case NODE_VALUES:{
- NODE *n = node;
- while (n) {
- COMPILE(ret, "values item", n->nd_head);
- n = n->nd_next;
- }
- ADD_INSN1(ret, line, newarray, INT2FIX(node->nd_alen));
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
- }
- case NODE_HASH:{
- DECL_ANCHOR(list);
- int type = node->nd_head ? nd_type(node->nd_head) : NODE_ZARRAY;
-
- INIT_ANCHOR(list);
- switch (type) {
- case NODE_ARRAY:
- compile_array(iseq, list, node->nd_head, COMPILE_ARRAY_TYPE_HASH);
- ADD_SEQ(ret, list);
- break;
-
- case NODE_ZARRAY:
- ADD_INSN1(ret, line, newhash, INT2FIX(0));
- break;
-
- default:
- rb_compile_bug_str(ERROR_ARGS_AT(node->nd_head) "can't make hash with this node: %s",
- ruby_node_name(type));
- }
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
- }
- case NODE_RETURN:{
- rb_iseq_t *is = iseq;
-
- if (is) {
- if (is->body->type == ISEQ_TYPE_TOP) {
- COMPILE_ERROR(ERROR_ARGS "Invalid return");
- }
- else {
- LABEL *splabel = 0;
-
- if (is->body->type == ISEQ_TYPE_METHOD) {
- splabel = NEW_LABEL(0);
- ADD_LABEL(ret, splabel);
- ADD_ADJUST(ret, line, 0);
- }
-
- COMPILE(ret, "return nd_stts (return val)", node->nd_stts);
-
- if (is->body->type == ISEQ_TYPE_METHOD) {
- add_ensure_iseq(ret, iseq, 1);
- ADD_TRACE(ret, line, RUBY_EVENT_RETURN);
- ADD_INSN(ret, line, leave);
- ADD_ADJUST_RESTORE(ret, splabel);
-
- if (!poped) {
- ADD_INSN(ret, line, putnil);
- }
- }
- else {
- ADD_INSN1(ret, line, throw, INT2FIX(TAG_RETURN));
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- }
- }
- }
- break;
+ case NODE_ZSUPER:
+ CHECK(compile_super(iseq, ret, node, popped, type));
+ break;
+ case NODE_LIST:{
+ CHECK(compile_array(iseq, ret, node, popped, TRUE) >= 0);
+ break;
}
- case NODE_YIELD:{
- DECL_ANCHOR(args);
- VALUE argc;
- unsigned int flag = 0;
- struct rb_call_info_kw_arg *keywords = NULL;
-
- INIT_ANCHOR(args);
- if (iseq->body->type == ISEQ_TYPE_TOP) {
- COMPILE_ERROR(ERROR_ARGS "Invalid yield");
- debug_node_end();
- return COMPILE_NG;
- }
-
- if (node->nd_head) {
- argc = setup_args(iseq, args, node->nd_head, &flag, &keywords);
- }
- else {
- argc = INT2FIX(0);
- }
-
- ADD_SEQ(ret, args);
- ADD_INSN1(ret, line, invokeblock, new_callinfo(iseq, 0, FIX2INT(argc), flag, keywords, FALSE));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ case NODE_ZLIST:{
+ if (!popped) {
+ ADD_INSN1(ret, node, newarray, INT2FIX(0));
+ }
+ break;
}
+ case NODE_HASH:
+ CHECK(compile_hash(iseq, ret, node, FALSE, popped) >= 0);
+ break;
+ case NODE_RETURN:
+ CHECK(compile_return(iseq, ret, node, popped));
+ break;
+ case NODE_YIELD:
+ CHECK(compile_yield(iseq, ret, node, popped));
+ break;
case NODE_LVAR:{
- if (!poped) {
- ID id = node->nd_vid;
- int idx = iseq->body->local_iseq->body->local_size - get_local_var_idx(iseq, id);
-
- debugs("id: %"PRIsVALUE" idx: %d\n", rb_id2str(id), idx);
- ADD_INSN2(ret, line, getlocal, INT2FIX(idx), INT2FIX(get_lvar_level(iseq)));
- }
- break;
+ if (!popped) {
+ compile_lvar(iseq, ret, node, RNODE_LVAR(node)->nd_vid);
+ }
+ break;
}
case NODE_DVAR:{
- int lv, idx, ls;
- debugi("nd_vid", node->nd_vid);
- if (!poped) {
- idx = get_dyna_var_idx(iseq, node->nd_vid, &lv, &ls);
- if (idx < 0) {
- rb_compile_bug_str(ERROR_ARGS "unknown dvar (%"PRIsVALUE")", rb_id2str(node->nd_vid));
- }
- ADD_INSN2(ret, line, getlocal, INT2FIX(ls - idx), INT2FIX(lv));
- }
- break;
+ int lv, idx, ls;
+ debugi("nd_vid", RNODE_DVAR(node)->nd_vid);
+ if (!popped) {
+ idx = get_dyna_var_idx(iseq, RNODE_DVAR(node)->nd_vid, &lv, &ls);
+ if (idx < 0) {
+ COMPILE_ERROR(ERROR_ARGS "unknown dvar (%"PRIsVALUE")",
+ rb_id2str(RNODE_DVAR(node)->nd_vid));
+ goto ng;
+ }
+ ADD_GETLOCAL(ret, node, ls - idx, lv);
+ }
+ break;
}
case NODE_GVAR:{
- ADD_INSN1(ret, line, getglobal,
- ((VALUE)node->nd_entry | 1));
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ ADD_INSN1(ret, node, getglobal, ID2SYM(RNODE_GVAR(node)->nd_vid));
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
case NODE_IVAR:{
- debugi("nd_vid", node->nd_vid);
- if (!poped) {
- ADD_INSN2(ret, line, getinstancevariable,
- ID2SYM(node->nd_vid), INT2FIX(iseq->body->is_size++));
- }
- break;
+ debugi("nd_vid", RNODE_IVAR(node)->nd_vid);
+ if (!popped) {
+ ADD_INSN2(ret, node, getinstancevariable,
+ ID2SYM(RNODE_IVAR(node)->nd_vid),
+ get_ivar_ic_value(iseq, RNODE_IVAR(node)->nd_vid));
+ }
+ break;
}
case NODE_CONST:{
- debugi("nd_vid", node->nd_vid);
-
- if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) {
- LABEL *lend = NEW_LABEL(line);
- int ic_index = iseq->body->is_size++;
-
- ADD_INSN2(ret, line, getinlinecache, lend, INT2FIX(ic_index));
- ADD_INSN1(ret, line, getconstant, ID2SYM(node->nd_vid));
- ADD_INSN1(ret, line, setinlinecache, INT2FIX(ic_index));
- ADD_LABEL(ret, lend);
- }
- else {
- ADD_INSN(ret, line, putnil);
- ADD_INSN1(ret, line, getconstant, ID2SYM(node->nd_vid));
- }
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ debugi("nd_vid", RNODE_CONST(node)->nd_vid);
+
+ if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) {
+ body->ic_size++;
+ VALUE segments = rb_ary_new_from_args(1, ID2SYM(RNODE_CONST(node)->nd_vid));
+ RB_OBJ_SET_FROZEN_SHAREABLE(segments);
+ ADD_INSN1(ret, node, opt_getconstant_path, segments);
+ RB_OBJ_WRITTEN(iseq, Qundef, segments);
+ }
+ else {
+ ADD_INSN(ret, node, putnil);
+ ADD_INSN1(ret, node, putobject, Qtrue);
+ ADD_INSN1(ret, node, getconstant, ID2SYM(RNODE_CONST(node)->nd_vid));
+ }
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
case NODE_CVAR:{
- if (!poped) {
- ADD_INSN1(ret, line, getclassvariable,
- ID2SYM(node->nd_vid));
- }
- break;
+ if (!popped) {
+ ADD_INSN2(ret, node, getclassvariable,
+ ID2SYM(RNODE_CVAR(node)->nd_vid),
+ get_cvar_ic_value(iseq, RNODE_CVAR(node)->nd_vid));
+ }
+ break;
}
case NODE_NTH_REF:{
- if (!poped) {
- if (!node->nd_nth) {
- ADD_INSN(ret, line, putnil);
- break;
- }
- ADD_INSN2(ret, line, getspecial, INT2FIX(1) /* '~' */,
- INT2FIX(node->nd_nth << 1));
- }
- break;
+ if (!popped) {
+ if (!RNODE_NTH_REF(node)->nd_nth) {
+ ADD_INSN(ret, node, putnil);
+ break;
+ }
+ ADD_INSN2(ret, node, getspecial, INT2FIX(1) /* '~' */,
+ INT2FIX(RNODE_NTH_REF(node)->nd_nth << 1));
+ }
+ break;
}
case NODE_BACK_REF:{
- if (!poped) {
- ADD_INSN2(ret, line, getspecial, INT2FIX(1) /* '~' */,
- INT2FIX(0x01 | (node->nd_nth << 1)));
- }
- break;
+ if (!popped) {
+ ADD_INSN2(ret, node, getspecial, INT2FIX(1) /* '~' */,
+ INT2FIX(0x01 | (RNODE_BACK_REF(node)->nd_nth << 1)));
+ }
+ break;
}
case NODE_MATCH:
case NODE_MATCH2:
- case NODE_MATCH3:{
- DECL_ANCHOR(recv);
- DECL_ANCHOR(val);
-
- INIT_ANCHOR(recv);
- INIT_ANCHOR(val);
- switch (nd_type(node)) {
- case NODE_MATCH:
- ADD_INSN1(recv, line, putobject, node->nd_lit);
- ADD_INSN2(val, line, getspecial, INT2FIX(0),
- INT2FIX(0));
- break;
- case NODE_MATCH2:
- COMPILE(recv, "receiver", node->nd_recv);
- COMPILE(val, "value", node->nd_value);
- break;
- case NODE_MATCH3:
- COMPILE(recv, "receiver", node->nd_value);
- COMPILE(val, "value", node->nd_recv);
- break;
- }
-
- if (ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction) {
- /* TODO: detect by node */
- if (recv->last == recv->anchor.next &&
- INSN_OF(recv->last) == BIN(putobject) &&
- nd_type(node) == NODE_MATCH2) {
- ADD_SEQ(ret, val);
- ADD_INSN1(ret, line, opt_regexpmatch1,
- OPERAND_AT(recv->last, 0));
- }
- else {
- ADD_SEQ(ret, recv);
- ADD_SEQ(ret, val);
- ADD_INSN2(ret, line, opt_regexpmatch2, new_callinfo(iseq, idEqTilde, 1, 0, NULL, FALSE), Qnil);
- }
- }
- else {
- ADD_SEQ(ret, recv);
- ADD_SEQ(ret, val);
- ADD_SEND(ret, line, idEqTilde, INT2FIX(1));
- }
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ case NODE_MATCH3:
+ CHECK(compile_match(iseq, ret, node, popped, type));
+ break;
+ case NODE_SYM:{
+ if (!popped) {
+ ADD_INSN1(ret, node, putobject, rb_node_sym_string_val(node));
+ }
+ break;
+ }
+ case NODE_LINE:{
+ if (!popped) {
+ ADD_INSN1(ret, node, putobject, rb_node_line_lineno_val(node));
+ }
+ break;
}
- case NODE_LIT:{
- debugp_param("lit", node->nd_lit);
- if (!poped) {
- ADD_INSN1(ret, line, putobject, node->nd_lit);
- }
- break;
+ case NODE_ENCODING:{
+ if (!popped) {
+ ADD_INSN1(ret, node, putobject, rb_node_encoding_val(node));
+ }
+ break;
}
+ case NODE_INTEGER:{
+ VALUE lit = rb_node_integer_literal_val(node);
+ if (!SPECIAL_CONST_P(lit)) RB_OBJ_SET_SHAREABLE(lit);
+ debugp_param("integer", lit);
+ if (!popped) {
+ ADD_INSN1(ret, node, putobject, lit);
+ RB_OBJ_WRITTEN(iseq, Qundef, lit);
+ }
+ break;
+ }
+ case NODE_FLOAT:{
+ VALUE lit = rb_node_float_literal_val(node);
+ if (!SPECIAL_CONST_P(lit)) RB_OBJ_SET_SHAREABLE(lit);
+ debugp_param("float", lit);
+ if (!popped) {
+ ADD_INSN1(ret, node, putobject, lit);
+ RB_OBJ_WRITTEN(iseq, Qundef, lit);
+ }
+ break;
+ }
+ case NODE_RATIONAL:{
+ VALUE lit = rb_node_rational_literal_val(node);
+ rb_ractor_make_shareable(lit);
+ debugp_param("rational", lit);
+ if (!popped) {
+ ADD_INSN1(ret, node, putobject, lit);
+ RB_OBJ_WRITTEN(iseq, Qundef, lit);
+ }
+ break;
+ }
+ case NODE_IMAGINARY:{
+ VALUE lit = rb_node_imaginary_literal_val(node);
+ rb_ractor_make_shareable(lit);
+ debugp_param("imaginary", lit);
+ if (!popped) {
+ ADD_INSN1(ret, node, putobject, lit);
+ RB_OBJ_WRITTEN(iseq, Qundef, lit);
+ }
+ break;
+ }
+ case NODE_FILE:
case NODE_STR:{
- debugp_param("nd_lit", node->nd_lit);
- if (!poped) {
- node->nd_lit = rb_fstring(node->nd_lit);
- if (!ISEQ_COMPILE_DATA(iseq)->option->frozen_string_literal) {
- ADD_INSN1(ret, line, putstring, node->nd_lit);
- }
- else {
- if (ISEQ_COMPILE_DATA(iseq)->option->debug_frozen_string_literal || RTEST(ruby_debug)) {
- VALUE debug_info = rb_ary_new_from_args(2, iseq->body->location.path, INT2FIX(line));
- VALUE str = rb_str_dup(node->nd_lit);
- rb_ivar_set(str, id_debug_created_info, rb_obj_freeze(debug_info));
- ADD_INSN1(ret, line, putobject, rb_obj_freeze(str));
- iseq_add_mark_object_compile_time(iseq, str);
- }
- else {
- ADD_INSN1(ret, line, putobject, node->nd_lit);
- }
- }
- }
- break;
+ debugp_param("nd_lit", get_string_value(node));
+ if (!popped) {
+ VALUE lit = get_string_value(node);
+ const rb_compile_option_t *option = ISEQ_COMPILE_DATA(iseq)->option;
+ if ((option->debug_frozen_string_literal || RTEST(ruby_debug)) &&
+ option->frozen_string_literal != ISEQ_FROZEN_STRING_LITERAL_DISABLED) {
+ lit = rb_str_with_debug_created_info(lit, rb_iseq_path(iseq), line);
+ RB_OBJ_SET_SHAREABLE(lit);
+ }
+ switch (option->frozen_string_literal) {
+ case ISEQ_FROZEN_STRING_LITERAL_UNSET:
+ ADD_INSN1(ret, node, putchilledstring, lit);
+ break;
+ case ISEQ_FROZEN_STRING_LITERAL_DISABLED:
+ ADD_INSN1(ret, node, putstring, lit);
+ break;
+ case ISEQ_FROZEN_STRING_LITERAL_ENABLED:
+ ADD_INSN1(ret, node, putobject, lit);
+ break;
+ default:
+ rb_bug("invalid frozen_string_literal");
+ }
+ RB_OBJ_WRITTEN(iseq, Qundef, lit);
+ }
+ break;
}
case NODE_DSTR:{
- compile_dstr(iseq, ret, node);
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- else {
- if (ISEQ_COMPILE_DATA(iseq)->option->frozen_string_literal) {
- VALUE debug_info = Qnil;
- if (ISEQ_COMPILE_DATA(iseq)->option->debug_frozen_string_literal || RTEST(ruby_debug)) {
- debug_info = rb_ary_new_from_args(2, iseq->body->location.path, INT2FIX(line));
- iseq_add_mark_object_compile_time(iseq, rb_obj_freeze(debug_info));
- }
- ADD_INSN1(ret, line, freezestring, debug_info);
- }
- }
- break;
+ compile_dstr(iseq, ret, node);
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
case NODE_XSTR:{
- node->nd_lit = rb_fstring(node->nd_lit);
- ADD_CALL_RECEIVER(ret, line);
- ADD_INSN1(ret, line, putobject, node->nd_lit);
- ADD_CALL(ret, line, idBackquote, INT2FIX(1));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ ADD_CALL_RECEIVER(ret, node);
+ VALUE str = rb_node_str_string_val(node);
+ ADD_INSN1(ret, node, putobject, str);
+ RB_OBJ_WRITTEN(iseq, Qundef, str);
+ ADD_CALL(ret, node, idBackquote, INT2FIX(1));
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
case NODE_DXSTR:{
- ADD_CALL_RECEIVER(ret, line);
- compile_dstr(iseq, ret, node);
- ADD_CALL(ret, line, idBackquote, INT2FIX(1));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ ADD_CALL_RECEIVER(ret, node);
+ compile_dstr(iseq, ret, node);
+ ADD_CALL(ret, node, idBackquote, INT2FIX(1));
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
- case NODE_EVSTR:{
- COMPILE(ret, "nd_body", node->nd_body);
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- else {
- ADD_INSN(ret, line, tostring);
- }
- break;
+ case NODE_EVSTR:
+ CHECK(compile_evstr(iseq, ret, RNODE_EVSTR(node)->nd_body, popped));
+ break;
+ case NODE_REGX:{
+ if (!popped) {
+ VALUE lit = rb_node_regx_string_val(node);
+ RB_OBJ_SET_SHAREABLE(lit);
+ ADD_INSN1(ret, node, putobject, lit);
+ RB_OBJ_WRITTEN(iseq, Qundef, lit);
+ }
+ break;
}
- case NODE_DREGX:{
- compile_dregx(iseq, ret, node);
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
- }
- case NODE_DREGX_ONCE:{
- int ic_index = iseq->body->is_size++;
- NODE *dregx_node = NEW_NODE(NODE_DREGX, node->u1.value, node->u2.value, node->u3.value);
- NODE *block_node = NEW_NODE(NODE_SCOPE, 0, dregx_node, 0);
- const rb_iseq_t * block_iseq = NEW_CHILD_ISEQ(block_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, line);
-
- ADD_INSN2(ret, line, once, block_iseq, INT2FIX(ic_index));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ case NODE_DREGX:
+ compile_dregx(iseq, ret, node, popped);
+ break;
+ case NODE_ONCE:{
+ int ic_index = body->ise_size++;
+ const rb_iseq_t *block_iseq;
+ block_iseq = NEW_CHILD_ISEQ(RNODE_ONCE(node)->nd_body, make_name_for_block(iseq), ISEQ_TYPE_PLAIN, line);
+
+ ADD_INSN2(ret, node, once, block_iseq, INT2FIX(ic_index));
+ RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)block_iseq);
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
case NODE_ARGSCAT:{
- if (poped) {
- COMPILE(ret, "argscat head", node->nd_head);
- ADD_INSN1(ret, line, splatarray, Qfalse);
- ADD_INSN(ret, line, pop);
- COMPILE(ret, "argscat body", node->nd_body);
- ADD_INSN1(ret, line, splatarray, Qfalse);
- ADD_INSN(ret, line, pop);
- }
- else {
- COMPILE(ret, "argscat head", node->nd_head);
- COMPILE(ret, "argscat body", node->nd_body);
- ADD_INSN(ret, line, concatarray);
- }
- break;
+ if (popped) {
+ CHECK(COMPILE(ret, "argscat head", RNODE_ARGSCAT(node)->nd_head));
+ ADD_INSN1(ret, node, splatarray, Qfalse);
+ ADD_INSN(ret, node, pop);
+ CHECK(COMPILE(ret, "argscat body", RNODE_ARGSCAT(node)->nd_body));
+ ADD_INSN1(ret, node, splatarray, Qfalse);
+ ADD_INSN(ret, node, pop);
+ }
+ else {
+ CHECK(COMPILE(ret, "argscat head", RNODE_ARGSCAT(node)->nd_head));
+ const NODE *body_node = RNODE_ARGSCAT(node)->nd_body;
+ if (nd_type_p(body_node, NODE_LIST)) {
+ CHECK(compile_array(iseq, ret, body_node, popped, FALSE) >= 0);
+ }
+ else {
+ CHECK(COMPILE(ret, "argscat body", body_node));
+ ADD_INSN(ret, node, concattoarray);
+ }
+ }
+ break;
}
case NODE_ARGSPUSH:{
- if (poped) {
- COMPILE(ret, "arsgpush head", node->nd_head);
- ADD_INSN1(ret, line, splatarray, Qfalse);
- ADD_INSN(ret, line, pop);
- COMPILE_(ret, "argspush body", node->nd_body, poped);
- }
- else {
- COMPILE(ret, "arsgpush head", node->nd_head);
- COMPILE_(ret, "argspush body", node->nd_body, poped);
- ADD_INSN1(ret, line, newarray, INT2FIX(1));
- ADD_INSN(ret, line, concatarray);
- }
- break;
+ if (popped) {
+ CHECK(COMPILE(ret, "argspush head", RNODE_ARGSPUSH(node)->nd_head));
+ ADD_INSN1(ret, node, splatarray, Qfalse);
+ ADD_INSN(ret, node, pop);
+ CHECK(COMPILE_(ret, "argspush body", RNODE_ARGSPUSH(node)->nd_body, popped));
+ }
+ else {
+ CHECK(COMPILE(ret, "argspush head", RNODE_ARGSPUSH(node)->nd_head));
+ const NODE *body_node = RNODE_ARGSPUSH(node)->nd_body;
+ if (keyword_node_p(body_node)) {
+ CHECK(COMPILE_(ret, "array element", body_node, FALSE));
+ ADD_INSN(ret, node, pushtoarraykwsplat);
+ }
+ else if (static_literal_node_p(body_node, iseq, false)) {
+ ADD_INSN1(ret, body_node, putobject, static_literal_value(body_node, iseq));
+ ADD_INSN1(ret, node, pushtoarray, INT2FIX(1));
+ }
+ else {
+ CHECK(COMPILE_(ret, "array element", body_node, FALSE));
+ ADD_INSN1(ret, node, pushtoarray, INT2FIX(1));
+ }
+ }
+ break;
}
case NODE_SPLAT:{
- COMPILE(ret, "splat", node->nd_head);
- ADD_INSN1(ret, line, splatarray, Qtrue);
+ CHECK(COMPILE(ret, "splat", RNODE_SPLAT(node)->nd_head));
+ ADD_INSN1(ret, node, splatarray, Qtrue);
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
case NODE_DEFN:{
- const rb_iseq_t *method_iseq = NEW_ISEQ(node->nd_defn,
- rb_id2str(node->nd_mid),
- ISEQ_TYPE_METHOD, line);
+ ID mid = RNODE_DEFN(node)->nd_mid;
+ const rb_iseq_t *method_iseq = NEW_ISEQ(RNODE_DEFN(node)->nd_defn,
+ rb_id2str(mid),
+ ISEQ_TYPE_METHOD, line);
- debugp_param("defn/iseq", rb_iseqw_new(method_iseq));
+ debugp_param("defn/iseq", rb_iseqw_new(method_iseq));
+ ADD_INSN2(ret, node, definemethod, ID2SYM(mid), method_iseq);
+ RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)method_iseq);
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
- ADD_INSN1(ret, line, putobject, ID2SYM(node->nd_mid));
- ADD_INSN1(ret, line, putiseq, method_iseq);
- ADD_SEND (ret, line, id_core_define_method, INT2FIX(2));
+ if (!popped) {
+ ADD_INSN1(ret, node, putobject, ID2SYM(mid));
+ }
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
-
- break;
+ break;
}
case NODE_DEFS:{
- const rb_iseq_t * singleton_method = NEW_ISEQ(node->nd_defn,
- rb_id2str(node->nd_mid),
- ISEQ_TYPE_METHOD, line);
-
- debugp_param("defs/iseq", rb_iseqw_new(singleton_method));
-
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
- COMPILE(ret, "defs: recv", node->nd_recv);
- ADD_INSN1(ret, line, putobject, ID2SYM(node->nd_mid));
- ADD_INSN1(ret, line, putiseq, singleton_method);
- ADD_SEND (ret, line, id_core_define_singleton_method, INT2FIX(3));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ ID mid = RNODE_DEFS(node)->nd_mid;
+ const rb_iseq_t * singleton_method_iseq = NEW_ISEQ(RNODE_DEFS(node)->nd_defn,
+ rb_id2str(mid),
+ ISEQ_TYPE_METHOD, line);
+
+ debugp_param("defs/iseq", rb_iseqw_new(singleton_method_iseq));
+ CHECK(COMPILE(ret, "defs: recv", RNODE_DEFS(node)->nd_recv));
+ ADD_INSN2(ret, node, definesmethod, ID2SYM(mid), singleton_method_iseq);
+ RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)singleton_method_iseq);
+
+ if (!popped) {
+ ADD_INSN1(ret, node, putobject, ID2SYM(mid));
+ }
+ break;
}
case NODE_ALIAS:{
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CBASE));
- COMPILE(ret, "alias arg1", node->u1.node);
- COMPILE(ret, "alias arg2", node->u2.node);
- ADD_SEND(ret, line, id_core_set_method_alias, INT2FIX(3));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ ADD_INSN1(ret, node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CBASE));
+ CHECK(COMPILE(ret, "alias arg1", RNODE_ALIAS(node)->nd_1st));
+ CHECK(COMPILE(ret, "alias arg2", RNODE_ALIAS(node)->nd_2nd));
+ ADD_SEND(ret, node, id_core_set_method_alias, INT2FIX(3));
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
case NODE_VALIAS:{
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
- ADD_INSN1(ret, line, putobject, ID2SYM(node->u1.id));
- ADD_INSN1(ret, line, putobject, ID2SYM(node->u2.id));
- ADD_SEND(ret, line, id_core_set_variable_alias, INT2FIX(2));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ ADD_INSN1(ret, node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, node, putobject, ID2SYM(RNODE_VALIAS(node)->nd_alias));
+ ADD_INSN1(ret, node, putobject, ID2SYM(RNODE_VALIAS(node)->nd_orig));
+ ADD_SEND(ret, node, id_core_set_variable_alias, INT2FIX(2));
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
case NODE_UNDEF:{
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CBASE));
- COMPILE(ret, "undef arg", node->u2.node);
- ADD_SEND(ret, line, id_core_undef_method, INT2FIX(2));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ const rb_parser_ary_t *ary = RNODE_UNDEF(node)->nd_undefs;
+
+ for (long i = 0; i < ary->len; i++) {
+ ADD_INSN1(ret, node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CBASE));
+ CHECK(COMPILE(ret, "undef arg", ary->data[i]));
+ ADD_SEND(ret, node, id_core_undef_method, INT2FIX(2));
+
+ if (i < ary->len - 1) {
+ ADD_INSN(ret, node, pop);
+ }
+ }
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
case NODE_CLASS:{
- const rb_iseq_t *class_iseq = NEW_CHILD_ISEQ(node->nd_body,
- rb_sprintf("<class:%"PRIsVALUE">", rb_id2str(node->nd_cpath->nd_mid)),
- ISEQ_TYPE_CLASS, line);
- VALUE noscope = compile_cpath(ret, iseq, node->nd_cpath);
- int flags = VM_DEFINECLASS_TYPE_CLASS;
-
- if (!noscope) flags |= VM_DEFINECLASS_FLAG_SCOPED;
- if (node->nd_super) flags |= VM_DEFINECLASS_FLAG_HAS_SUPERCLASS;
- COMPILE(ret, "super", node->nd_super);
- ADD_INSN3(ret, line, defineclass, ID2SYM(node->nd_cpath->nd_mid), class_iseq, INT2FIX(flags));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ const rb_iseq_t *class_iseq = NEW_CHILD_ISEQ(RNODE_CLASS(node)->nd_body,
+ rb_str_freeze(rb_sprintf("<class:%"PRIsVALUE">", rb_id2str(get_node_colon_nd_mid(RNODE_CLASS(node)->nd_cpath)))),
+ ISEQ_TYPE_CLASS, line);
+ const int flags = VM_DEFINECLASS_TYPE_CLASS |
+ (RNODE_CLASS(node)->nd_super ? VM_DEFINECLASS_FLAG_HAS_SUPERCLASS : 0) |
+ compile_cpath(ret, iseq, RNODE_CLASS(node)->nd_cpath);
+
+ CHECK(COMPILE(ret, "super", RNODE_CLASS(node)->nd_super));
+ ADD_INSN3(ret, node, defineclass, ID2SYM(get_node_colon_nd_mid(RNODE_CLASS(node)->nd_cpath)), class_iseq, INT2FIX(flags));
+ RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)class_iseq);
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
case NODE_MODULE:{
- const rb_iseq_t *module_iseq = NEW_CHILD_ISEQ(node->nd_body,
- rb_sprintf("<module:%"PRIsVALUE">", rb_id2str(node->nd_cpath->nd_mid)),
- ISEQ_TYPE_CLASS, line);
- VALUE noscope = compile_cpath(ret, iseq, node->nd_cpath);
- int flags = VM_DEFINECLASS_TYPE_MODULE;
-
- if (!noscope) flags |= VM_DEFINECLASS_FLAG_SCOPED;
- ADD_INSN (ret, line, putnil); /* dummy */
- ADD_INSN3(ret, line, defineclass, ID2SYM(node->nd_cpath->nd_mid), module_iseq, INT2FIX(flags));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ const rb_iseq_t *module_iseq = NEW_CHILD_ISEQ(RNODE_MODULE(node)->nd_body,
+ rb_str_freeze(rb_sprintf("<module:%"PRIsVALUE">", rb_id2str(get_node_colon_nd_mid(RNODE_MODULE(node)->nd_cpath)))),
+ ISEQ_TYPE_CLASS, line);
+ const int flags = VM_DEFINECLASS_TYPE_MODULE |
+ compile_cpath(ret, iseq, RNODE_MODULE(node)->nd_cpath);
+
+ ADD_INSN (ret, node, putnil); /* dummy */
+ ADD_INSN3(ret, node, defineclass, ID2SYM(get_node_colon_nd_mid(RNODE_MODULE(node)->nd_cpath)), module_iseq, INT2FIX(flags));
+ RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)module_iseq);
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
case NODE_SCLASS:{
- ID singletonclass;
- const rb_iseq_t *singleton_class = NEW_ISEQ(node->nd_body, rb_str_new2("singleton class"),
- ISEQ_TYPE_CLASS, line);
-
- COMPILE(ret, "sclass#recv", node->nd_recv);
- ADD_INSN (ret, line, putnil);
- CONST_ID(singletonclass, "singletonclass");
- ADD_INSN3(ret, line, defineclass,
- ID2SYM(singletonclass), singleton_class,
- INT2FIX(VM_DEFINECLASS_TYPE_SINGLETON_CLASS));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
- }
- case NODE_COLON2:{
- if (rb_is_const_id(node->nd_mid)) {
- /* constant */
- LABEL *lend = NEW_LABEL(line);
- int ic_index = iseq->body->is_size++;
-
- DECL_ANCHOR(pref);
- DECL_ANCHOR(body);
-
- INIT_ANCHOR(pref);
- INIT_ANCHOR(body);
- compile_colon2(iseq, node, pref, body);
- if (LIST_SIZE_ZERO(pref)) {
- if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) {
- ADD_INSN2(ret, line, getinlinecache, lend, INT2FIX(ic_index));
- }
- else {
- ADD_INSN(ret, line, putnil);
- }
-
- ADD_SEQ(ret, body);
-
- if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) {
- ADD_INSN1(ret, line, setinlinecache, INT2FIX(ic_index));
- ADD_LABEL(ret, lend);
- }
- }
- else {
- ADD_SEQ(ret, pref);
- ADD_SEQ(ret, body);
- }
- }
- else {
- /* function call */
- ADD_CALL_RECEIVER(ret, line);
- COMPILE(ret, "colon2#nd_head", node->nd_head);
- ADD_CALL(ret, line, node->nd_mid, INT2FIX(1));
- }
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
- }
- case NODE_COLON3:{
- LABEL *lend = NEW_LABEL(line);
- int ic_index = iseq->body->is_size++;
-
- debugi("colon3#nd_mid", node->nd_mid);
-
- /* add cache insn */
- if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) {
- ADD_INSN2(ret, line, getinlinecache, lend, INT2FIX(ic_index));
- ADD_INSN(ret, line, pop);
- }
-
- ADD_INSN1(ret, line, putobject, rb_cObject);
- ADD_INSN1(ret, line, getconstant, ID2SYM(node->nd_mid));
-
- if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache) {
- ADD_INSN1(ret, line, setinlinecache, INT2FIX(ic_index));
- ADD_LABEL(ret, lend);
- }
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ ID singletonclass;
+ const rb_iseq_t *singleton_class = NEW_ISEQ(RNODE_SCLASS(node)->nd_body, rb_fstring_lit("singleton class"),
+ ISEQ_TYPE_CLASS, line);
+
+ CHECK(COMPILE(ret, "sclass#recv", RNODE_SCLASS(node)->nd_recv));
+ ADD_INSN (ret, node, putnil);
+ CONST_ID(singletonclass, "singletonclass");
+ ADD_INSN3(ret, node, defineclass,
+ ID2SYM(singletonclass), singleton_class,
+ INT2FIX(VM_DEFINECLASS_TYPE_SINGLETON_CLASS));
+ RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)singleton_class);
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
+ case NODE_COLON2:
+ CHECK(compile_colon2(iseq, ret, node, popped));
+ break;
+ case NODE_COLON3:
+ CHECK(compile_colon3(iseq, ret, node, popped));
+ break;
case NODE_DOT2:
- case NODE_DOT3:{
- VALUE flag = type == NODE_DOT2 ? INT2FIX(0) : INT2FIX(1);
- COMPILE(ret, "min", (NODE *) node->nd_beg);
- COMPILE(ret, "max", (NODE *) node->nd_end);
- if (poped) {
- ADD_INSN(ret, line, pop);
- ADD_INSN(ret, line, pop);
- }
- else {
- ADD_INSN1(ret, line, newrange, flag);
- }
- break;
- }
+ CHECK(compile_dots(iseq, ret, node, popped, FALSE));
+ break;
+ case NODE_DOT3:
+ CHECK(compile_dots(iseq, ret, node, popped, TRUE));
+ break;
case NODE_FLIP2:
case NODE_FLIP3:{
- LABEL *lend = NEW_LABEL(line);
- LABEL *lfin = NEW_LABEL(line);
- LABEL *ltrue = NEW_LABEL(line);
- rb_iseq_t *local_iseq = iseq->body->local_iseq;
- rb_num_t cnt;
- VALUE key;
-
- cnt = ISEQ_FLIP_CNT_INCREMENT(local_iseq) + VM_SVAR_FLIPFLOP_START;
- key = INT2FIX(cnt);
-
- ADD_INSN2(ret, line, getspecial, key, INT2FIX(0));
- ADD_INSNL(ret, line, branchif, lend);
-
- /* *flip == 0 */
- COMPILE(ret, "flip2 beg", node->nd_beg);
- ADD_INSN(ret, line, dup);
- ADD_INSNL(ret, line, branchunless, lfin);
- if (nd_type(node) == NODE_FLIP3) {
- ADD_INSN(ret, line, dup);
- ADD_INSN1(ret, line, setspecial, key);
- ADD_INSNL(ret, line, jump, lfin);
- }
- else {
- ADD_INSN1(ret, line, setspecial, key);
- }
-
- /* *flip == 1 */
- ADD_LABEL(ret, lend);
- COMPILE(ret, "flip2 end", node->nd_end);
- ADD_INSNL(ret, line, branchunless, ltrue);
- ADD_INSN1(ret, line, putobject, Qfalse);
- ADD_INSN1(ret, line, setspecial, key);
-
- ADD_LABEL(ret, ltrue);
- ADD_INSN1(ret, line, putobject, Qtrue);
-
- ADD_LABEL(ret, lfin);
- break;
+ LABEL *lend = NEW_LABEL(line);
+ LABEL *ltrue = NEW_LABEL(line);
+ LABEL *lfalse = NEW_LABEL(line);
+ CHECK(compile_flip_flop(iseq, ret, node, type == NODE_FLIP2,
+ ltrue, lfalse));
+ ADD_LABEL(ret, ltrue);
+ ADD_INSN1(ret, node, putobject, Qtrue);
+ ADD_INSNL(ret, node, jump, lend);
+ ADD_LABEL(ret, lfalse);
+ ADD_INSN1(ret, node, putobject, Qfalse);
+ ADD_LABEL(ret, lend);
+ break;
}
case NODE_SELF:{
- if (!poped) {
- ADD_INSN(ret, line, putself);
- }
- break;
+ if (!popped) {
+ ADD_INSN(ret, node, putself);
+ }
+ break;
}
case NODE_NIL:{
- if (!poped) {
- ADD_INSN(ret, line, putnil);
- }
- break;
+ if (!popped) {
+ ADD_INSN(ret, node, putnil);
+ }
+ break;
}
case NODE_TRUE:{
- if (!poped) {
- ADD_INSN1(ret, line, putobject, Qtrue);
- }
- break;
+ if (!popped) {
+ ADD_INSN1(ret, node, putobject, Qtrue);
+ }
+ break;
}
case NODE_FALSE:{
- if (!poped) {
- ADD_INSN1(ret, line, putobject, Qfalse);
- }
- break;
- }
- case NODE_ERRINFO:{
- if (!poped) {
- if (iseq->body->type == ISEQ_TYPE_RESCUE) {
- ADD_INSN2(ret, line, getlocal, INT2FIX(2), INT2FIX(0));
- }
- else {
- const rb_iseq_t *ip = iseq;
- int level = 0;
- while (ip) {
- if (ip->body->type == ISEQ_TYPE_RESCUE) {
- break;
- }
- ip = ip->body->parent_iseq;
- level++;
- }
- if (ip) {
- ADD_INSN2(ret, line, getlocal, INT2FIX(2), INT2FIX(level));
- }
- else {
- ADD_INSN(ret, line, putnil);
- }
- }
- }
- break;
- }
- case NODE_DEFINED:{
- if (poped) break;
- if (!node->nd_head) {
- VALUE str = rb_iseq_defined_string(DEFINED_NIL);
- ADD_INSN1(ret, nd_line(node), putobject, str);
- }
- else {
- LABEL *lfinish[2];
- lfinish[0] = NEW_LABEL(line);
- lfinish[1] = 0;
- ADD_INSN(ret, line, putnil);
- defined_expr(iseq, ret, node->nd_head, lfinish, Qtrue);
- ADD_INSN(ret, line, swap);
- ADD_INSN(ret, line, pop);
- if (lfinish[1]) {
- ADD_LABEL(ret, lfinish[1]);
- }
- ADD_LABEL(ret, lfinish[0]);
- }
- break;
+ if (!popped) {
+ ADD_INSN1(ret, node, putobject, Qfalse);
+ }
+ break;
}
+ case NODE_ERRINFO:
+ CHECK(compile_errinfo(iseq, ret, node, popped));
+ break;
+ case NODE_DEFINED:
+ if (!popped) {
+ CHECK(compile_defined_expr(iseq, ret, node, Qtrue, false));
+ }
+ break;
case NODE_POSTEXE:{
- /* compiled to:
- * ONCE{ rb_mRubyVMFrozenCore::core#set_postexe{ ... } }
- */
- int is_index = iseq->body->is_size++;
- const rb_iseq_t *once_iseq = NEW_CHILD_ISEQ((NODE *)IFUNC_NEW(build_postexe_iseq, node->nd_body, 0),
- make_name_for_block(iseq), ISEQ_TYPE_BLOCK, line);
-
- ADD_INSN2(ret, line, once, once_iseq, INT2FIX(is_index));
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ /* compiled to:
+ * ONCE{ rb_mRubyVMFrozenCore::core#set_postexe{ ... } }
+ */
+ int is_index = body->ise_size++;
+ struct rb_iseq_new_with_callback_callback_func *ifunc =
+ rb_iseq_new_with_callback_new_callback(build_postexe_iseq, RNODE_POSTEXE(node)->nd_body);
+ const rb_iseq_t *once_iseq =
+ NEW_CHILD_ISEQ_WITH_CALLBACK(ifunc, rb_fstring(make_name_for_block(iseq)), ISEQ_TYPE_BLOCK, line);
+
+ ADD_INSN2(ret, node, once, once_iseq, INT2FIX(is_index));
+ RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)once_iseq);
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
case NODE_KW_ARG:
- {
- LABEL *end_label = NEW_LABEL(nd_line(node));
- NODE *default_value = node->nd_body->nd_value;
-
- if (default_value == (NODE *)-1) {
- /* required argument. do nothing */
- rb_compile_bug_str(ERROR_ARGS "unreachable");
- }
- else if (nd_type(default_value) == NODE_LIT ||
- nd_type(default_value) == NODE_NIL ||
- nd_type(default_value) == NODE_TRUE ||
- nd_type(default_value) == NODE_FALSE) {
- rb_compile_bug_str(ERROR_ARGS "unreachable");
- }
- else {
- /* if keywordcheck(_kw_bits, nth_keyword)
- * kw = default_value
- * end
- */
- int kw_bits_idx = iseq->body->local_size - iseq->body->param.keyword->bits_start;
- int keyword_idx = iseq->body->param.keyword->num;
-
- ADD_INSN2(ret, line, checkkeyword, INT2FIX(kw_bits_idx), INT2FIX(keyword_idx));
- ADD_INSNL(ret, line, branchif, end_label);
- COMPILE_POPED(ret, "keyword default argument", node->nd_body);
- ADD_LABEL(ret, end_label);
- }
-
- break;
- }
+ CHECK(compile_kw_arg(iseq, ret, node, popped));
+ break;
case NODE_DSYM:{
- compile_dstr(iseq, ret, node);
- if (!poped) {
- ADD_SEND(ret, line, idIntern, INT2FIX(0));
- }
- else {
- ADD_INSN(ret, line, pop);
- }
- break;
- }
- case NODE_ATTRASGN:{
- DECL_ANCHOR(recv);
- DECL_ANCHOR(args);
- unsigned int flag = 0;
- ID mid = node->nd_mid;
- LABEL *lskip = 0;
- VALUE argc;
-
- /* optimization shortcut
- * obj["literal"] = value -> opt_aset_with(obj, "literal", value)
- */
- if (mid == idASET && !private_recv_p(node) && node->nd_args &&
- nd_type(node->nd_args) == NODE_ARRAY && node->nd_args->nd_alen == 2 &&
- nd_type(node->nd_args->nd_head) == NODE_STR &&
- ISEQ_COMPILE_DATA(iseq)->current_block == NULL &&
- ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction)
- {
- VALUE str = rb_fstring(node->nd_args->nd_head->nd_lit);
- node->nd_args->nd_head->nd_lit = str;
- iseq_add_mark_object(iseq, str);
- COMPILE(ret, "recv", node->nd_recv);
- COMPILE(ret, "value", node->nd_args->nd_next->nd_head);
- if (!poped) {
- ADD_INSN(ret, line, swap);
- ADD_INSN1(ret, line, topn, INT2FIX(1));
- }
- ADD_INSN3(ret, line, opt_aset_with,
- new_callinfo(iseq, idASET, 2, 0, NULL, FALSE),
- NULL/* CALL_CACHE */, str);
- ADD_INSN(ret, line, pop);
- break;
- }
-
- INIT_ANCHOR(recv);
- INIT_ANCHOR(args);
- argc = setup_args(iseq, args, node->nd_args, &flag, NULL);
-
- flag |= COMPILE_RECV(recv, "recv", node);
-
- debugp_param("argc", argc);
- debugp_param("nd_mid", ID2SYM(mid));
-
- if (!rb_is_attrset_id(mid)) {
- /* safe nav attr */
- mid = rb_id_attrset(mid);
- ADD_INSN(recv, line, dup);
- lskip = NEW_LABEL(line);
- ADD_INSNL(recv, line, branchnil, lskip);
- }
- if (!poped) {
- ADD_INSN(ret, line, putnil);
- ADD_SEQ(ret, recv);
- ADD_SEQ(ret, args);
-
- if (flag & VM_CALL_ARGS_BLOCKARG) {
- ADD_INSN1(ret, line, topn, INT2FIX(1));
- if (flag & VM_CALL_ARGS_SPLAT) {
- ADD_INSN1(ret, line, putobject, INT2FIX(-1));
- ADD_SEND(ret, line, idAREF, INT2FIX(1));
- }
- ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 3));
- ADD_INSN (ret, line, pop);
- }
- else if (flag & VM_CALL_ARGS_SPLAT) {
- ADD_INSN(ret, line, dup);
- ADD_INSN1(ret, line, putobject, INT2FIX(-1));
- ADD_SEND(ret, line, idAREF, INT2FIX(1));
- ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 2));
- ADD_INSN (ret, line, pop);
- }
- else {
- ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 1));
- }
- }
- else {
- ADD_SEQ(ret, recv);
- ADD_SEQ(ret, args);
- }
- ADD_SEND_WITH_FLAG(ret, line, mid, argc, INT2FIX(flag));
- if (lskip) ADD_LABEL(ret, lskip);
- ADD_INSN(ret, line, pop);
-
- break;
- }
- case NODE_PRELUDE:{
- const rb_compile_option_t *orig_opt = ISEQ_COMPILE_DATA(iseq)->option;
- if (node->nd_orig) {
- rb_compile_option_t new_opt = *orig_opt;
- rb_iseq_make_compile_option(&new_opt, node->nd_orig);
- ISEQ_COMPILE_DATA(iseq)->option = &new_opt;
- }
- COMPILE_POPED(ret, "prelude", node->nd_head);
- COMPILE_(ret, "body", node->nd_body, poped);
- ISEQ_COMPILE_DATA(iseq)->option = orig_opt;
- break;
+ compile_dstr(iseq, ret, node);
+ if (!popped) {
+ ADD_INSN(ret, node, intern);
+ }
+ else {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
+ case NODE_ATTRASGN:
+ CHECK(compile_attrasgn(iseq, ret, node, popped));
+ break;
case NODE_LAMBDA:{
- /* compile same as lambda{...} */
- const rb_iseq_t *block = NEW_CHILD_ISEQ(node->nd_body, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, line);
- VALUE argc = INT2FIX(0);
-
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
- ADD_CALL_WITH_BLOCK(ret, line, idLambda, argc, block);
-
- if (poped) {
- ADD_INSN(ret, line, pop);
- }
- break;
+ /* compile same as lambda{...} */
+ const rb_iseq_t *block = NEW_CHILD_ISEQ(RNODE_LAMBDA(node)->nd_body, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, line);
+ VALUE argc = INT2FIX(0);
+
+ ADD_INSN1(ret, node, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_CALL_WITH_BLOCK(ret, node, idLambda, argc, block);
+ RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)block);
+
+ if (popped) {
+ ADD_INSN(ret, node, pop);
+ }
+ break;
}
default:
- UNKNOWN_NODE("iseq_compile_each", node);
- return COMPILE_NG;
- }
-
- /* check & remove redundant trace(line) */
- if (saved_last_element && ret /* ret can be 0 when error */ &&
- ret->last == saved_last_element &&
- ((INSN *)saved_last_element)->insn_id == BIN(trace)) {
- POP_ELEMENT(ret);
+ UNKNOWN_NODE("iseq_compile_each", node, COMPILE_NG);
+ ng:
+ debug_node_end();
+ return COMPILE_NG;
}
debug_node_end();
@@ -6003,22 +11610,23 @@ insn_data_length(INSN *iobj)
static int
calc_sp_depth(int depth, INSN *insn)
{
- return insn_stack_increase(depth, insn->insn_id, insn->operands);
+ return comptime_insn_stack_increase(depth, insn->insn_id, insn->operands);
}
static VALUE
opobj_inspect(VALUE obj)
{
- struct RBasic *r = (struct RBasic *) obj;
- if (!SPECIAL_CONST_P(r) && r->klass == 0) {
- switch (BUILTIN_TYPE(r)) {
- case T_STRING:
- obj = rb_str_new_cstr(RSTRING_PTR(obj));
- break;
- case T_ARRAY:
- obj = rb_ary_dup(obj);
- break;
- }
+ if (!SPECIAL_CONST_P(obj) && !RBASIC_CLASS(obj)) {
+ switch (BUILTIN_TYPE(obj)) {
+ case T_STRING:
+ obj = rb_str_new_cstr(RSTRING_PTR(obj));
+ break;
+ case T_ARRAY:
+ obj = rb_ary_dup(obj);
+ break;
+ default:
+ break;
+ }
}
return rb_inspect(obj);
}
@@ -6031,94 +11639,104 @@ insn_data_to_s_detail(INSN *iobj)
VALUE str = rb_sprintf("%-20s ", insn_name(iobj->insn_id));
if (iobj->operands) {
- const char *types = insn_op_types(iobj->insn_id);
- int j;
-
- for (j = 0; types[j]; j++) {
- char type = types[j];
-
- switch (type) {
- case TS_OFFSET: /* label(destination position) */
- {
- LABEL *lobj = (LABEL *)OPERAND_AT(iobj, j);
- rb_str_catf(str, "<L%03d>", lobj->label_no);
- break;
- }
- break;
- case TS_ISEQ: /* iseq */
- {
- rb_iseq_t *iseq = (rb_iseq_t *)OPERAND_AT(iobj, j);
- VALUE val = Qnil;
- if (0 && iseq) { /* TODO: invalidate now */
- val = (VALUE)iseq;
- }
- rb_str_concat(str, opobj_inspect(val));
- }
- break;
- case TS_LINDEX:
- case TS_NUM: /* ulong */
- case TS_VALUE: /* VALUE */
- {
- VALUE v = OPERAND_AT(iobj, j);
- rb_str_concat(str, opobj_inspect(v));
- break;
- }
- case TS_ID: /* ID */
- rb_str_concat(str, opobj_inspect(OPERAND_AT(iobj, j)));
- break;
- case TS_GENTRY:
- {
- struct rb_global_entry *entry = (struct rb_global_entry *)
- (OPERAND_AT(iobj, j) & (~1));
- rb_str_append(str, rb_id2str(entry->id));
- break;
- }
- case TS_IC: /* inline cache */
- rb_str_catf(str, "<ic:%d>", FIX2INT(OPERAND_AT(iobj, j)));
- break;
- case TS_CALLINFO: /* call info */
- {
- struct rb_call_info *ci = (struct rb_call_info *)OPERAND_AT(iobj, j);
- rb_str_cat2(str, "<callinfo:");
- if (ci->mid) rb_str_catf(str, "%"PRIsVALUE, rb_id2str(ci->mid));
- rb_str_catf(str, ", %d>", ci->orig_argc);
- break;
- }
- case TS_CALLCACHE: /* call cache */
- {
- rb_str_catf(str, "<call cache>");
- break;
- }
- case TS_CDHASH: /* case/when condition cache */
- rb_str_cat2(str, "<ch>");
- break;
- case TS_FUNCPTR:
- {
- rb_insn_func_t func = (rb_insn_func_t)OPERAND_AT(iobj, j);
+ const char *types = insn_op_types(iobj->insn_id);
+ int j;
+
+ for (j = 0; types[j]; j++) {
+ char type = types[j];
+
+ switch (type) {
+ case TS_OFFSET: /* label(destination position) */
+ {
+ LABEL *lobj = (LABEL *)OPERAND_AT(iobj, j);
+ rb_str_catf(str, LABEL_FORMAT, lobj->label_no);
+ break;
+ }
+ break;
+ case TS_ISEQ: /* iseq */
+ {
+ rb_iseq_t *iseq = (rb_iseq_t *)OPERAND_AT(iobj, j);
+ VALUE val = Qnil;
+ if (0 && iseq) { /* TODO: invalidate now */
+ val = (VALUE)iseq;
+ }
+ rb_str_concat(str, opobj_inspect(val));
+ }
+ break;
+ case TS_LINDEX:
+ case TS_NUM: /* ulong */
+ case TS_VALUE: /* VALUE */
+ {
+ VALUE v = OPERAND_AT(iobj, j);
+ if (!CLASS_OF(v))
+ rb_str_cat2(str, "<hidden>");
+ else {
+ rb_str_concat(str, opobj_inspect(v));
+ }
+ break;
+ }
+ case TS_ID: /* ID */
+ rb_str_concat(str, opobj_inspect(OPERAND_AT(iobj, j)));
+ break;
+ case TS_IC: /* inline cache */
+ rb_str_concat(str, opobj_inspect(OPERAND_AT(iobj, j)));
+ break;
+ case TS_IVC: /* inline ivar cache */
+ rb_str_catf(str, "<ivc:%d>", FIX2INT(OPERAND_AT(iobj, j)));
+ break;
+ case TS_ICVARC: /* inline cvar cache */
+ rb_str_catf(str, "<icvarc:%d>", FIX2INT(OPERAND_AT(iobj, j)));
+ break;
+ case TS_ISE: /* inline storage entry */
+ rb_str_catf(str, "<ise:%d>", FIX2INT(OPERAND_AT(iobj, j)));
+ break;
+ case TS_CALLDATA: /* we store these as call infos at compile time */
+ {
+ const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(iobj, j);
+ rb_str_cat2(str, "<calldata:");
+ if (vm_ci_mid(ci)) rb_str_catf(str, "%"PRIsVALUE, rb_id2str(vm_ci_mid(ci)));
+ rb_str_catf(str, ", %d>", vm_ci_argc(ci));
+ break;
+ }
+ case TS_CDHASH: /* case/when condition cache */
+ rb_str_cat2(str, "<ch>");
+ break;
+ case TS_FUNCPTR:
+ {
+ void *func = (void *)OPERAND_AT(iobj, j);
#ifdef HAVE_DLADDR
- Dl_info info;
- if (dladdr(func, &info) && info.dli_sname) {
- rb_str_cat2(str, info.dli_sname);
- break;
- }
+ Dl_info info;
+ if (dladdr(func, &info) && info.dli_sname) {
+ rb_str_cat2(str, info.dli_sname);
+ break;
+ }
#endif
- rb_str_catf(str, "<%p>", func);
- }
- break;
- default:{
- rb_raise(rb_eSyntaxError, "unknown operand type: %c", type);
- }
- }
- if (types[j + 1]) {
- rb_str_cat2(str, ", ");
- }
- }
+ rb_str_catf(str, "<%p>", func);
+ }
+ break;
+ case TS_BUILTIN:
+ rb_str_cat2(str, "<TS_BUILTIN>");
+ break;
+ default:{
+ rb_raise(rb_eSyntaxError, "unknown operand type: %c", type);
+ }
+ }
+ if (types[j + 1]) {
+ rb_str_cat2(str, ", ");
+ }
+ }
}
return str;
}
static void
-dump_disasm_list(struct iseq_link_element *link)
+dump_disasm_list(const LINK_ELEMENT *link)
+{
+ dump_disasm_list_with_cursor(link, NULL, NULL);
+}
+
+static void
+dump_disasm_list_with_cursor(const LINK_ELEMENT *link, const LINK_ELEMENT *curr, const LABEL *dest)
{
int pos = 0;
INSN *iobj;
@@ -6128,57 +11746,66 @@ dump_disasm_list(struct iseq_link_element *link)
printf("-- raw disasm--------\n");
while (link) {
- switch (link->type) {
- case ISEQ_ELEMENT_INSN:
- {
- iobj = (INSN *)link;
- str = insn_data_to_s_detail(iobj);
- printf("%04d %-65s(%4u)\n", pos, StringValueCStr(str), iobj->line_no);
- pos += insn_data_length(iobj);
- break;
- }
- case ISEQ_ELEMENT_LABEL:
- {
- lobj = (LABEL *)link;
- printf("<L%03d>\n", lobj->label_no);
- break;
- }
- case ISEQ_ELEMENT_NONE:
- {
- printf("[none]\n");
- break;
- }
- case ISEQ_ELEMENT_ADJUST:
- {
- ADJUST *adjust = (ADJUST *)link;
- printf("adjust: [label: %d]\n", adjust->label ? adjust->label->label_no : -1);
- break;
- }
- default:
- /* ignore */
- rb_raise(rb_eSyntaxError, "dump_disasm_list error: %ld\n", FIX2LONG(link->type));
- }
- link = link->next;
+ if (curr) printf(curr == link ? "*" : " ");
+ switch (link->type) {
+ case ISEQ_ELEMENT_INSN:
+ {
+ iobj = (INSN *)link;
+ str = insn_data_to_s_detail(iobj);
+ printf(" %04d %-65s(%4u)\n", pos, StringValueCStr(str), iobj->insn_info.line_no);
+ pos += insn_data_length(iobj);
+ break;
+ }
+ case ISEQ_ELEMENT_LABEL:
+ {
+ lobj = (LABEL *)link;
+ printf(LABEL_FORMAT" [sp: %d, unremovable: %d, refcnt: %d]%s\n", lobj->label_no, lobj->sp, lobj->unremovable, lobj->refcnt,
+ dest == lobj ? " <---" : "");
+ break;
+ }
+ case ISEQ_ELEMENT_TRACE:
+ {
+ TRACE *trace = (TRACE *)link;
+ printf(" trace: %0x\n", trace->event);
+ break;
+ }
+ case ISEQ_ELEMENT_ADJUST:
+ {
+ ADJUST *adjust = (ADJUST *)link;
+ printf(" adjust: [label: %d]\n", adjust->label ? adjust->label->label_no : -1);
+ break;
+ }
+ default:
+ /* ignore */
+ rb_raise(rb_eSyntaxError, "dump_disasm_list error: %d\n", (int)link->type);
+ }
+ link = link->next;
}
printf("---------------------\n");
fflush(stdout);
}
+int
+rb_insn_len(VALUE insn)
+{
+ return insn_len(insn);
+}
+
const char *
rb_insns_name(int i)
{
- return insn_name_info[i];
+ return insn_name(i);
}
VALUE
rb_insns_name_array(void)
{
- VALUE ary = rb_ary_new();
+ VALUE ary = rb_ary_new_capa(VM_INSTRUCTION_SIZE);
int i;
- for (i = 0; i < numberof(insn_name_info); i++) {
- rb_ary_push(ary, rb_fstring(rb_str_new2(insn_name_info[i])));
+ for (i = 0; i < VM_INSTRUCTION_SIZE; i++) {
+ rb_ary_push(ary, rb_fstring_cstr(insn_name(i)));
}
- return rb_obj_freeze(ary);
+ return rb_ary_freeze(ary);
}
static LABEL *
@@ -6186,14 +11813,14 @@ register_label(rb_iseq_t *iseq, struct st_table *labels_table, VALUE obj)
{
LABEL *label = 0;
st_data_t tmp;
- obj = rb_convert_type(obj, T_SYMBOL, "Symbol", "to_sym");
+ obj = rb_to_symbol_type(obj);
if (st_lookup(labels_table, obj, &tmp) == 0) {
- label = NEW_LABEL(0);
- st_insert(labels_table, obj, (st_data_t)label);
+ label = NEW_LABEL(0);
+ st_insert(labels_table, obj, (st_data_t)label);
}
else {
- label = (LABEL *)tmp;
+ label = (LABEL *)tmp;
}
LABEL_REF(label);
return label;
@@ -6202,18 +11829,16 @@ register_label(rb_iseq_t *iseq, struct st_table *labels_table, VALUE obj)
static VALUE
get_exception_sym2type(VALUE sym)
{
-#undef rb_intern
-#define rb_intern(str) rb_intern_const(str)
static VALUE symRescue, symEnsure, symRetry;
static VALUE symBreak, symRedo, symNext;
if (symRescue == 0) {
- symRescue = ID2SYM(rb_intern("rescue"));
- symEnsure = ID2SYM(rb_intern("ensure"));
- symRetry = ID2SYM(rb_intern("retry"));
- symBreak = ID2SYM(rb_intern("break"));
- symRedo = ID2SYM(rb_intern("redo"));
- symNext = ID2SYM(rb_intern("next"));
+ symRescue = ID2SYM(rb_intern_const("rescue"));
+ symEnsure = ID2SYM(rb_intern_const("ensure"));
+ symRetry = ID2SYM(rb_intern_const("retry"));
+ symBreak = ID2SYM(rb_intern_const("break"));
+ symRedo = ID2SYM(rb_intern_const("redo"));
+ symNext = ID2SYM(rb_intern_const("next"));
}
if (sym == symRescue) return CATCH_TYPE_RESCUE;
@@ -6228,41 +11853,45 @@ get_exception_sym2type(VALUE sym)
static int
iseq_build_from_ary_exception(rb_iseq_t *iseq, struct st_table *labels_table,
- VALUE exception)
+ VALUE exception)
{
int i;
for (i=0; i<RARRAY_LEN(exception); i++) {
- const rb_iseq_t *eiseq;
- VALUE v, type;
- const VALUE *ptr;
- LABEL *lstart, *lend, *lcont;
- unsigned int sp;
-
- v = rb_convert_type(RARRAY_AREF(exception, i), T_ARRAY,
- "Array", "to_ary");
- if (RARRAY_LEN(v) != 6) {
- rb_raise(rb_eSyntaxError, "wrong exception entry");
- }
- ptr = RARRAY_CONST_PTR(v);
- type = get_exception_sym2type(ptr[0]);
- if (ptr[1] == Qnil) {
- eiseq = NULL;
- }
- else {
- eiseq = rb_iseqw_to_iseq(rb_iseq_load(ptr[1], (VALUE)iseq, Qnil));
- }
-
- lstart = register_label(iseq, labels_table, ptr[2]);
- lend = register_label(iseq, labels_table, ptr[3]);
- lcont = register_label(iseq, labels_table, ptr[4]);
- sp = NUM2UINT(ptr[5]);
-
- (void)sp;
-
- ADD_CATCH_ENTRY(type, lstart, lend, eiseq, lcont);
-
- RB_GC_GUARD(v);
+ const rb_iseq_t *eiseq;
+ VALUE v, type;
+ LABEL *lstart, *lend, *lcont;
+ unsigned int sp;
+
+ v = rb_to_array_type(RARRAY_AREF(exception, i));
+ if (RARRAY_LEN(v) != 6) {
+ rb_raise(rb_eSyntaxError, "wrong exception entry");
+ }
+ type = get_exception_sym2type(RARRAY_AREF(v, 0));
+ if (NIL_P(RARRAY_AREF(v, 1))) {
+ eiseq = NULL;
+ }
+ else {
+ eiseq = rb_iseqw_to_iseq(rb_iseq_load(RARRAY_AREF(v, 1), (VALUE)iseq, Qnil));
+ }
+
+ lstart = register_label(iseq, labels_table, RARRAY_AREF(v, 2));
+ lend = register_label(iseq, labels_table, RARRAY_AREF(v, 3));
+ lcont = register_label(iseq, labels_table, RARRAY_AREF(v, 4));
+ sp = NUM2UINT(RARRAY_AREF(v, 5));
+
+ /* TODO: Dirty Hack! Fix me */
+ if (type == CATCH_TYPE_RESCUE ||
+ type == CATCH_TYPE_BREAK ||
+ type == CATCH_TYPE_NEXT) {
+ ++sp;
+ }
+
+ lcont->sp = sp;
+
+ ADD_CATCH_ENTRY(type, lstart, lend, eiseq, lcont);
+
+ RB_GC_GUARD(v);
}
return COMPILE_OK;
}
@@ -6272,10 +11901,10 @@ insn_make_insn_table(void)
{
struct st_table *table;
int i;
- table = st_init_numtable();
+ table = st_init_numtable_with_size(VM_INSTRUCTION_SIZE);
for (i=0; i<VM_INSTRUCTION_SIZE; i++) {
- st_insert(table, ID2SYM(rb_intern(insn_name(i))), i);
+ st_insert(table, ID2SYM(rb_intern_const(insn_name(i))), i);
}
return table;
@@ -6288,17 +11917,16 @@ iseq_build_load_iseq(const rb_iseq_t *iseq, VALUE op)
const rb_iseq_t *loaded_iseq;
if (RB_TYPE_P(op, T_ARRAY)) {
- iseqw = rb_iseq_load(op, (VALUE)iseq, Qnil);
+ iseqw = rb_iseq_load(op, (VALUE)iseq, Qnil);
}
else if (CLASS_OF(op) == rb_cISeq) {
- iseqw = op;
+ iseqw = op;
}
else {
- rb_raise(rb_eSyntaxError, "ISEQ is required");
+ rb_raise(rb_eSyntaxError, "ISEQ is required");
}
loaded_iseq = rb_iseqw_to_iseq(iseqw);
- iseq_add_mark_object(iseq, (VALUE)loaded_iseq);
return loaded_iseq;
}
@@ -6308,46 +11936,64 @@ iseq_build_callinfo_from_hash(rb_iseq_t *iseq, VALUE op)
ID mid = 0;
int orig_argc = 0;
unsigned int flag = 0;
- struct rb_call_info_kw_arg *kw_arg = 0;
+ struct rb_callinfo_kwarg *kw_arg = 0;
if (!NIL_P(op)) {
- VALUE vmid = rb_hash_aref(op, ID2SYM(rb_intern("mid")));
- VALUE vflag = rb_hash_aref(op, ID2SYM(rb_intern("flag")));
- VALUE vorig_argc = rb_hash_aref(op, ID2SYM(rb_intern("orig_argc")));
- VALUE vkw_arg = rb_hash_aref(op, ID2SYM(rb_intern("kw_arg")));
-
- if (!NIL_P(vmid)) mid = SYM2ID(vmid);
- if (!NIL_P(vflag)) flag = NUM2UINT(vflag);
- if (!NIL_P(vorig_argc)) orig_argc = FIX2INT(vorig_argc);
-
- if (!NIL_P(vkw_arg)) {
- int i;
- int len = RARRAY_LENINT(vkw_arg);
- size_t n = rb_call_info_kw_arg_bytes(len);
-
- kw_arg = xmalloc(n);
- kw_arg->keyword_len = len;
- for (i = 0; i < len; i++) {
- VALUE kw = RARRAY_AREF(vkw_arg, i);
- SYM2ID(kw); /* make immortal */
- kw_arg->keywords[i] = kw;
- }
- }
- }
-
- return (VALUE)new_callinfo(iseq, mid, orig_argc, flag, kw_arg, (flag & VM_CALL_ARGS_SIMPLE) == 0);
+ VALUE vmid = rb_hash_aref(op, ID2SYM(rb_intern_const("mid")));
+ VALUE vflag = rb_hash_aref(op, ID2SYM(rb_intern_const("flag")));
+ VALUE vorig_argc = rb_hash_aref(op, ID2SYM(rb_intern_const("orig_argc")));
+ VALUE vkw_arg = rb_hash_aref(op, ID2SYM(rb_intern_const("kw_arg")));
+
+ if (!NIL_P(vmid)) mid = SYM2ID(vmid);
+ if (!NIL_P(vflag)) flag = NUM2UINT(vflag);
+ if (!NIL_P(vorig_argc)) orig_argc = FIX2INT(vorig_argc);
+
+ if (!NIL_P(vkw_arg)) {
+ int i;
+ int len = RARRAY_LENINT(vkw_arg);
+ size_t n = rb_callinfo_kwarg_bytes(len);
+
+ kw_arg = xmalloc(n);
+ kw_arg->references = 0;
+ kw_arg->keyword_len = len;
+ for (i = 0; i < len; i++) {
+ VALUE kw = RARRAY_AREF(vkw_arg, i);
+ SYM2ID(kw); /* make immortal */
+ kw_arg->keywords[i] = kw;
+ }
+ }
+ }
+
+ const struct rb_callinfo *ci = new_callinfo(iseq, mid, orig_argc, flag, kw_arg, (flag & VM_CALL_ARGS_SIMPLE) == 0);
+ RB_OBJ_WRITTEN(iseq, Qundef, ci);
+ return (VALUE)ci;
+}
+
+static rb_event_flag_t
+event_name_to_flag(VALUE sym)
+{
+#define CHECK_EVENT(ev) if (sym == ID2SYM(rb_intern_const(#ev))) return ev;
+ CHECK_EVENT(RUBY_EVENT_LINE);
+ CHECK_EVENT(RUBY_EVENT_CLASS);
+ CHECK_EVENT(RUBY_EVENT_END);
+ CHECK_EVENT(RUBY_EVENT_CALL);
+ CHECK_EVENT(RUBY_EVENT_RETURN);
+ CHECK_EVENT(RUBY_EVENT_B_CALL);
+ CHECK_EVENT(RUBY_EVENT_B_RETURN);
+ CHECK_EVENT(RUBY_EVENT_RESCUE);
+#undef CHECK_EVENT
+ return RUBY_EVENT_NONE;
}
static int
-iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *anchor,
- VALUE body, VALUE labels_wrapper)
+iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *const anchor,
+ VALUE body, VALUE node_ids, VALUE labels_wrapper)
{
/* TODO: body should be frozen */
- const VALUE *ptr = RARRAY_CONST_PTR(body);
long i, len = RARRAY_LEN(body);
- struct st_table *labels_table = DATA_PTR(labels_wrapper);
+ struct st_table *labels_table = RTYPEDDATA_DATA(labels_wrapper);
int j;
- int line_no = 0;
+ int line_no = 0, node_id = -1, insn_idx = 0;
int ret = COMPILE_OK;
/*
@@ -6356,154 +12002,195 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *anchor,
static struct st_table *insn_table;
if (insn_table == 0) {
- insn_table = insn_make_insn_table();
+ insn_table = insn_make_insn_table();
}
for (i=0; i<len; i++) {
- VALUE obj = ptr[i];
-
- if (SYMBOL_P(obj)) {
- LABEL *label = register_label(iseq, labels_table, obj);
- ADD_LABEL(anchor, label);
- }
- else if (FIXNUM_P(obj)) {
- line_no = NUM2INT(obj);
- }
- else if (RB_TYPE_P(obj, T_ARRAY)) {
- VALUE *argv = 0;
- int argc = RARRAY_LENINT(obj) - 1;
- st_data_t insn_id;
- VALUE insn;
-
- insn = (argc < 0) ? Qnil : RARRAY_AREF(obj, 0);
- if (st_lookup(insn_table, (st_data_t)insn, &insn_id) == 0) {
- /* TODO: exception */
- COMPILE_ERROR(ruby_sourcefile_string, line_no,
- "unknown instruction: %+"PRIsVALUE, insn);
- ret = COMPILE_NG;
- break;
- }
-
- if (argc != insn_len((VALUE)insn_id)-1) {
- COMPILE_ERROR(ruby_sourcefile_string, line_no,
- "operand size mismatch");
- ret = COMPILE_NG;
- break;
- }
-
- if (argc > 0) {
- argv = compile_data_alloc(iseq, sizeof(VALUE) * argc);
- for (j=0; j<argc; j++) {
- VALUE op = rb_ary_entry(obj, j+1);
- switch (insn_op_type((VALUE)insn_id, j)) {
- case TS_OFFSET: {
- LABEL *label = register_label(iseq, labels_table, op);
- argv[j] = (VALUE)label;
- break;
- }
- case TS_LINDEX:
- case TS_NUM:
- (void)NUM2INT(op);
- argv[j] = op;
- break;
- case TS_VALUE:
- argv[j] = op;
- iseq_add_mark_object(iseq, op);
- break;
- case TS_ISEQ:
- {
- if (op != Qnil) {
- argv[j] = (VALUE)iseq_build_load_iseq(iseq, op);
- }
- else {
- argv[j] = 0;
- }
- }
- break;
- case TS_GENTRY:
- op = rb_convert_type(op, T_SYMBOL, "Symbol", "to_sym");
- argv[j] = (VALUE)rb_global_entry(SYM2ID(op));
- break;
- case TS_IC:
- argv[j] = op;
- if (NUM2UINT(op) >= iseq->body->is_size) {
- iseq->body->is_size = NUM2INT(op) + 1;
- }
- break;
- case TS_CALLINFO:
- argv[j] = iseq_build_callinfo_from_hash(iseq, op);
- break;
- case TS_CALLCACHE:
- argv[j] = Qfalse;
- break;
- case TS_ID:
- argv[j] = rb_convert_type(op, T_SYMBOL,
- "Symbol", "to_sym");
- break;
- case TS_CDHASH:
- {
- int i;
- VALUE map = rb_hash_new();
-
- rb_hash_tbl_raw(map)->type = &cdhash_type;
- op = rb_convert_type(op, T_ARRAY, "Array", "to_ary");
- for (i=0; i<RARRAY_LEN(op); i+=2) {
- VALUE key = RARRAY_AREF(op, i);
- VALUE sym = RARRAY_AREF(op, i+1);
- LABEL *label =
- register_label(iseq, labels_table, sym);
- rb_hash_aset(map, key, (VALUE)label | 1);
- }
- RB_GC_GUARD(op);
- argv[j] = map;
- rb_iseq_add_mark_object(iseq, map);
- }
- break;
- case TS_FUNCPTR:
- {
+ VALUE obj = RARRAY_AREF(body, i);
+
+ if (SYMBOL_P(obj)) {
+ rb_event_flag_t event;
+ if ((event = event_name_to_flag(obj)) != RUBY_EVENT_NONE) {
+ ADD_TRACE(anchor, event);
+ }
+ else {
+ LABEL *label = register_label(iseq, labels_table, obj);
+ ADD_LABEL(anchor, label);
+ }
+ }
+ else if (FIXNUM_P(obj)) {
+ line_no = NUM2INT(obj);
+ }
+ else if (RB_TYPE_P(obj, T_ARRAY)) {
+ VALUE *argv = 0;
+ int argc = RARRAY_LENINT(obj) - 1;
+ st_data_t insn_id;
+ VALUE insn;
+
+ if (node_ids) {
+ node_id = NUM2INT(rb_ary_entry(node_ids, insn_idx++));
+ }
+
+ insn = (argc < 0) ? Qnil : RARRAY_AREF(obj, 0);
+ if (st_lookup(insn_table, (st_data_t)insn, &insn_id) == 0) {
+ /* TODO: exception */
+ COMPILE_ERROR(iseq, line_no,
+ "unknown instruction: %+"PRIsVALUE, insn);
+ ret = COMPILE_NG;
+ break;
+ }
+
+ if (argc != insn_len((VALUE)insn_id)-1) {
+ COMPILE_ERROR(iseq, line_no,
+ "operand size mismatch");
+ ret = COMPILE_NG;
+ break;
+ }
+
+ if (argc > 0) {
+ argv = compile_data_calloc2(iseq, sizeof(VALUE), argc);
+
+ // add element before operand setup to make GC root
+ ADD_ELEM(anchor,
+ (LINK_ELEMENT*)new_insn_core(iseq, line_no, node_id,
+ (enum ruby_vminsn_type)insn_id, argc, argv));
+
+ for (j=0; j<argc; j++) {
+ VALUE op = rb_ary_entry(obj, j+1);
+ switch (insn_op_type((VALUE)insn_id, j)) {
+ case TS_OFFSET: {
+ LABEL *label = register_label(iseq, labels_table, op);
+ argv[j] = (VALUE)label;
+ break;
+ }
+ case TS_LINDEX:
+ case TS_NUM:
+ (void)NUM2INT(op);
+ argv[j] = op;
+ break;
+ case TS_VALUE:
+ argv[j] = op;
+ RB_OBJ_WRITTEN(iseq, Qundef, op);
+ break;
+ case TS_ISEQ:
+ {
+ if (op != Qnil) {
+ VALUE v = (VALUE)iseq_build_load_iseq(iseq, op);
+ argv[j] = v;
+ RB_OBJ_WRITTEN(iseq, Qundef, v);
+ }
+ else {
+ argv[j] = 0;
+ }
+ }
+ break;
+ case TS_ISE:
+ argv[j] = op;
+ if (NUM2UINT(op) >= ISEQ_BODY(iseq)->ise_size) {
+ ISEQ_BODY(iseq)->ise_size = NUM2INT(op) + 1;
+ }
+ break;
+ case TS_IC:
+ {
+ VALUE segments = rb_ary_new();
+ op = rb_to_array_type(op);
+
+ for (int i = 0; i < RARRAY_LEN(op); i++) {
+ VALUE sym = RARRAY_AREF(op, i);
+ sym = rb_to_symbol_type(sym);
+ rb_ary_push(segments, sym);
+ }
+
+ RB_GC_GUARD(op);
+ argv[j] = segments;
+ RB_OBJ_WRITTEN(iseq, Qundef, segments);
+ ISEQ_BODY(iseq)->ic_size++;
+ }
+ break;
+ case TS_IVC: /* inline ivar cache */
+ argv[j] = op;
+ if (NUM2UINT(op) >= ISEQ_BODY(iseq)->ivc_size) {
+ ISEQ_BODY(iseq)->ivc_size = NUM2INT(op) + 1;
+ }
+ break;
+ case TS_ICVARC: /* inline cvar cache */
+ argv[j] = op;
+ if (NUM2UINT(op) >= ISEQ_BODY(iseq)->icvarc_size) {
+ ISEQ_BODY(iseq)->icvarc_size = NUM2INT(op) + 1;
+ }
+ break;
+ case TS_CALLDATA:
+ argv[j] = iseq_build_callinfo_from_hash(iseq, op);
+ break;
+ case TS_ID:
+ argv[j] = rb_to_symbol_type(op);
+ break;
+ case TS_CDHASH:
+ {
+ int i;
+ VALUE map = rb_hash_new_with_size(RARRAY_LEN(op)/2);
+
+ RHASH_TBL_RAW(map)->type = &cdhash_type;
+ op = rb_to_array_type(op);
+ for (i=0; i<RARRAY_LEN(op); i+=2) {
+ VALUE key = RARRAY_AREF(op, i);
+ VALUE sym = RARRAY_AREF(op, i+1);
+ LABEL *label =
+ register_label(iseq, labels_table, sym);
+ rb_hash_aset(map, key, (VALUE)label | 1);
+ }
+ RB_GC_GUARD(op);
+ RB_OBJ_SET_SHAREABLE(rb_obj_hide(map)); // allow mutation while compiling
+ argv[j] = map;
+ RB_OBJ_WRITTEN(iseq, Qundef, map);
+ }
+ break;
+ case TS_FUNCPTR:
+ {
#if SIZEOF_VALUE <= SIZEOF_LONG
- long funcptr = NUM2LONG(op);
+ long funcptr = NUM2LONG(op);
#else
- LONG_LONG funcptr = NUM2LL(op);
+ LONG_LONG funcptr = NUM2LL(op);
#endif
- argv[j] = (VALUE)funcptr;
- }
- break;
- default:
- rb_raise(rb_eSyntaxError, "unknown operand: %c", insn_op_type((VALUE)insn_id, j));
- }
- }
- }
- ADD_ELEM(anchor,
- (LINK_ELEMENT*)new_insn_core(iseq, line_no,
- (enum ruby_vminsn_type)insn_id, argc, argv));
- }
- else {
- rb_raise(rb_eTypeError, "unexpected object for instruction");
- }
- }
- DATA_PTR(labels_wrapper) = 0;
+ argv[j] = (VALUE)funcptr;
+ }
+ break;
+ default:
+ rb_raise(rb_eSyntaxError, "unknown operand: %c", insn_op_type((VALUE)insn_id, j));
+ }
+ }
+ }
+ else {
+ ADD_ELEM(anchor,
+ (LINK_ELEMENT*)new_insn_core(iseq, line_no, node_id,
+ (enum ruby_vminsn_type)insn_id, argc, NULL));
+ }
+ }
+ else {
+ rb_raise(rb_eTypeError, "unexpected object for instruction");
+ }
+ }
+ RTYPEDDATA_DATA(labels_wrapper) = 0;
+ RB_GC_GUARD(labels_wrapper);
validate_labels(iseq, labels_table);
if (!ret) return ret;
return iseq_setup(iseq, anchor);
}
-#define CHECK_ARRAY(v) rb_convert_type((v), T_ARRAY, "Array", "to_ary")
-#define CHECK_SYMBOL(v) rb_convert_type((v), T_SYMBOL, "Symbol", "to_sym")
+#define CHECK_ARRAY(v) rb_to_array_type(v)
+#define CHECK_SYMBOL(v) rb_to_symbol_type(v)
static int
int_param(int *dst, VALUE param, VALUE sym)
{
VALUE val = rb_hash_aref(param, sym);
- switch (TYPE(val)) {
- case T_NIL:
- return FALSE;
- case T_FIXNUM:
- *dst = FIX2INT(val);
- return TRUE;
- default:
- rb_raise(rb_eTypeError, "invalid %+"PRIsVALUE" Fixnum: %+"PRIsVALUE,
- sym, val);
+ if (FIXNUM_P(val)) {
+ *dst = FIX2INT(val);
+ return TRUE;
+ }
+ else if (!NIL_P(val)) {
+ rb_raise(rb_eTypeError, "invalid %+"PRIsVALUE" Fixnum: %+"PRIsVALUE,
+ sym, val);
}
return FALSE;
}
@@ -6519,52 +12206,56 @@ iseq_build_kw(rb_iseq_t *iseq, VALUE params, VALUE keywords)
ID *ids;
struct rb_iseq_param_keyword *keyword = ZALLOC(struct rb_iseq_param_keyword);
- iseq->body->param.flags.has_kw = TRUE;
+ ISEQ_BODY(iseq)->param.flags.has_kw = TRUE;
keyword->num = len;
-#define SYM(s) ID2SYM(rb_intern(#s))
+#define SYM(s) ID2SYM(rb_intern_const(#s))
(void)int_param(&keyword->bits_start, params, SYM(kwbits));
i = keyword->bits_start - keyword->num;
- ids = (VALUE *)&iseq->body->local_table[i];
+ ids = (ID *)&ISEQ_BODY(iseq)->local_table[i];
#undef SYM
/* required args */
for (i = 0; i < len; i++) {
- VALUE val = RARRAY_AREF(keywords, i);
+ VALUE val = RARRAY_AREF(keywords, i);
- if (!SYMBOL_P(val)) {
- goto default_values;
- }
- ids[i] = SYM2ID(val);
- keyword->required_num++;
+ if (!SYMBOL_P(val)) {
+ goto default_values;
+ }
+ ids[i] = SYM2ID(val);
+ keyword->required_num++;
}
default_values: /* note: we intentionally preserve `i' from previous loop */
default_len = len - i;
if (default_len == 0) {
- return keyword;
+ keyword->table = ids;
+ return keyword;
+ }
+ else if (default_len < 0) {
+ UNREACHABLE;
}
- dvs = ALLOC_N(VALUE, default_len);
+ dvs = ALLOC_N(VALUE, (unsigned int)default_len);
for (j = 0; i < len; i++, j++) {
- key = RARRAY_AREF(keywords, i);
- CHECK_ARRAY(key);
-
- switch (RARRAY_LEN(key)) {
- case 1:
- sym = RARRAY_AREF(key, 0);
- default_val = Qundef;
- break;
- case 2:
- sym = RARRAY_AREF(key, 0);
- default_val = RARRAY_AREF(key, 1);
- break;
- default:
- rb_raise(rb_eTypeError, "keyword default has unsupported len %+"PRIsVALUE, key);
- }
- ids[i] = SYM2ID(sym);
- dvs[j] = default_val;
+ key = RARRAY_AREF(keywords, i);
+ CHECK_ARRAY(key);
+
+ switch (RARRAY_LEN(key)) {
+ case 1:
+ sym = RARRAY_AREF(key, 0);
+ default_val = Qundef;
+ break;
+ case 2:
+ sym = RARRAY_AREF(key, 0);
+ default_val = RARRAY_AREF(key, 1);
+ break;
+ default:
+ rb_raise(rb_eTypeError, "keyword default has unsupported len %+"PRIsVALUE, key);
+ }
+ ids[i] = SYM2ID(sym);
+ RB_OBJ_WRITE(iseq, &dvs[j], default_val);
}
keyword->table = ids;
@@ -6573,97 +12264,156 @@ iseq_build_kw(rb_iseq_t *iseq, VALUE params, VALUE keywords)
return keyword;
}
+static void
+iseq_insn_each_object_mark_and_move(VALUE * obj, VALUE _)
+{
+ rb_gc_mark_and_move(obj);
+}
+
+void
+rb_iseq_mark_and_move_insn_storage(struct iseq_compile_data_storage *storage)
+{
+ INSN *iobj = 0;
+ size_t size = sizeof(INSN);
+ unsigned int pos = 0;
+
+ while (storage) {
+#ifdef STRICT_ALIGNMENT
+ size_t padding = calc_padding((void *)&storage->buff[pos], size);
+#else
+ const size_t padding = 0; /* expected to be optimized by compiler */
+#endif /* STRICT_ALIGNMENT */
+ size_t offset = pos + size + padding;
+ if (offset > storage->size || offset > storage->pos) {
+ pos = 0;
+ storage = storage->next;
+ }
+ else {
+#ifdef STRICT_ALIGNMENT
+ pos += (int)padding;
+#endif /* STRICT_ALIGNMENT */
+
+ iobj = (INSN *)&storage->buff[pos];
+
+ if (iobj->operands) {
+ iseq_insn_each_markable_object(iobj, iseq_insn_each_object_mark_and_move, (VALUE)0);
+ }
+ pos += (int)size;
+ }
+ }
+}
+
+static const rb_data_type_t labels_wrapper_type = {
+ .wrap_struct_name = "compiler/labels_wrapper",
+ .function = {
+ .dmark = (RUBY_DATA_FUNC)rb_mark_set,
+ .dfree = (RUBY_DATA_FUNC)st_free_table,
+ },
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
+};
+
void
rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc, VALUE locals, VALUE params,
- VALUE exception, VALUE body)
+ VALUE exception, VALUE body)
{
-#define SYM(s) ID2SYM(rb_intern(#s))
+#define SYM(s) ID2SYM(rb_intern_const(#s))
int i, len;
+ unsigned int arg_size, local_size, stack_max;
ID *tbl;
struct st_table *labels_table = st_init_numtable();
- VALUE labels_wrapper = Data_Wrap_Struct(0, 0, st_free_table, labels_table);
+ VALUE labels_wrapper = TypedData_Wrap_Struct(0, &labels_wrapper_type, labels_table);
VALUE arg_opt_labels = rb_hash_aref(params, SYM(opt));
VALUE keywords = rb_hash_aref(params, SYM(keyword));
- VALUE sym_arg_rest = ID2SYM(rb_intern("#arg_rest"));
+ VALUE sym_arg_rest = ID2SYM(rb_intern_const("#arg_rest"));
DECL_ANCHOR(anchor);
INIT_ANCHOR(anchor);
len = RARRAY_LENINT(locals);
- iseq->body->local_table_size = len;
- iseq->body->local_table = tbl = len > 0 ? (ID *)ALLOC_N(ID, iseq->body->local_table_size) : NULL;
- iseq->body->local_size = iseq->body->local_table_size + 1;
+ ISEQ_BODY(iseq)->local_table_size = len;
+ ISEQ_BODY(iseq)->local_table = tbl = len > 0 ? (ID *)ALLOC_N(ID, ISEQ_BODY(iseq)->local_table_size) : NULL;
for (i = 0; i < len; i++) {
- VALUE lv = RARRAY_AREF(locals, i);
+ VALUE lv = RARRAY_AREF(locals, i);
- if (sym_arg_rest == lv) {
- tbl[i] = 0;
- }
- else {
- tbl[i] = FIXNUM_P(lv) ? (ID)FIX2LONG(lv) : SYM2ID(CHECK_SYMBOL(lv));
- }
+ if (sym_arg_rest == lv) {
+ tbl[i] = 0;
+ }
+ else {
+ tbl[i] = FIXNUM_P(lv) ? (ID)FIX2LONG(lv) : SYM2ID(CHECK_SYMBOL(lv));
+ }
}
- /*
- * we currently ignore misc params,
- * local_size, stack_size and param.size are all calculated
- */
-
-#define INT_PARAM(F) int_param(&iseq->body->param.F, params, SYM(F))
+#define INT_PARAM(F) int_param(&ISEQ_BODY(iseq)->param.F, params, SYM(F))
if (INT_PARAM(lead_num)) {
- iseq->body->param.flags.has_lead = TRUE;
+ ISEQ_BODY(iseq)->param.flags.has_lead = TRUE;
}
- if (INT_PARAM(post_num)) iseq->body->param.flags.has_post = TRUE;
- if (INT_PARAM(post_start)) iseq->body->param.flags.has_post = TRUE;
- if (INT_PARAM(rest_start)) iseq->body->param.flags.has_rest = TRUE;
- if (INT_PARAM(block_start)) iseq->body->param.flags.has_block = TRUE;
+ if (INT_PARAM(post_num)) ISEQ_BODY(iseq)->param.flags.has_post = TRUE;
+ if (INT_PARAM(post_start)) ISEQ_BODY(iseq)->param.flags.has_post = TRUE;
+ if (INT_PARAM(rest_start)) ISEQ_BODY(iseq)->param.flags.has_rest = TRUE;
+ if (INT_PARAM(block_start)) ISEQ_BODY(iseq)->param.flags.has_block = TRUE;
+#undef INT_PARAM
+ {
+#define INT_PARAM(F) F = (int_param(&x, misc, SYM(F)) ? (unsigned int)x : 0)
+ int x;
+ INT_PARAM(arg_size);
+ INT_PARAM(local_size);
+ INT_PARAM(stack_max);
#undef INT_PARAM
+ }
- switch (TYPE(arg_opt_labels)) {
- case T_ARRAY:
- len = RARRAY_LENINT(arg_opt_labels);
- iseq->body->param.flags.has_opt = !!(len - 1 >= 0);
-
- if (iseq->body->param.flags.has_opt) {
- VALUE *opt_table = ALLOC_N(VALUE, len);
-
- for (i = 0; i < len; i++) {
- VALUE ent = RARRAY_AREF(arg_opt_labels, i);
- LABEL *label = register_label(iseq, labels_table, ent);
- opt_table[i] = (VALUE)label;
- }
-
- iseq->body->param.opt_num = len - 1;
- iseq->body->param.opt_table = opt_table;
- }
- case T_NIL:
- break;
- default:
- rb_raise(rb_eTypeError, ":opt param is not an array: %+"PRIsVALUE,
- arg_opt_labels);
+ VALUE node_ids = Qfalse;
+#ifdef USE_ISEQ_NODE_ID
+ node_ids = rb_hash_aref(misc, ID2SYM(rb_intern("node_ids")));
+ if (!RB_TYPE_P(node_ids, T_ARRAY)) {
+ rb_raise(rb_eTypeError, "node_ids is not an array");
}
+#endif
- switch (TYPE(keywords)) {
- case T_ARRAY:
- iseq->body->param.keyword = iseq_build_kw(iseq, params, keywords);
- case T_NIL:
- break;
- default:
- rb_raise(rb_eTypeError, ":keywords param is not an array: %+"PRIsVALUE,
- keywords);
+ if (RB_TYPE_P(arg_opt_labels, T_ARRAY)) {
+ len = RARRAY_LENINT(arg_opt_labels);
+ ISEQ_BODY(iseq)->param.flags.has_opt = !!(len - 1 >= 0);
+
+ if (ISEQ_BODY(iseq)->param.flags.has_opt) {
+ VALUE *opt_table = ALLOC_N(VALUE, len);
+
+ for (i = 0; i < len; i++) {
+ VALUE ent = RARRAY_AREF(arg_opt_labels, i);
+ LABEL *label = register_label(iseq, labels_table, ent);
+ opt_table[i] = (VALUE)label;
+ }
+
+ ISEQ_BODY(iseq)->param.opt_num = len - 1;
+ ISEQ_BODY(iseq)->param.opt_table = opt_table;
+ }
+ }
+ else if (!NIL_P(arg_opt_labels)) {
+ rb_raise(rb_eTypeError, ":opt param is not an array: %+"PRIsVALUE,
+ arg_opt_labels);
+ }
+
+ if (RB_TYPE_P(keywords, T_ARRAY)) {
+ ISEQ_BODY(iseq)->param.keyword = iseq_build_kw(iseq, params, keywords);
+ }
+ else if (!NIL_P(keywords)) {
+ rb_raise(rb_eTypeError, ":keywords param is not an array: %+"PRIsVALUE,
+ keywords);
}
if (Qtrue == rb_hash_aref(params, SYM(ambiguous_param0))) {
- iseq->body->param.flags.ambiguous_param0 = TRUE;
+ ISEQ_BODY(iseq)->param.flags.ambiguous_param0 = TRUE;
+ }
+
+ if (Qtrue == rb_hash_aref(params, SYM(use_block))) {
+ ISEQ_BODY(iseq)->param.flags.use_block = TRUE;
}
if (int_param(&i, params, SYM(kwrest))) {
- struct rb_iseq_param_keyword *keyword = (struct rb_iseq_param_keyword *)iseq->body->param.keyword;
- if (keyword == NULL) {
- iseq->body->param.keyword = keyword = ZALLOC(struct rb_iseq_param_keyword);
- }
- keyword->rest_start = i;
- iseq->body->param.flags.has_kwrest = TRUE;
+ struct rb_iseq_param_keyword *keyword = (struct rb_iseq_param_keyword *)ISEQ_BODY(iseq)->param.keyword;
+ if (keyword == NULL) {
+ ISEQ_BODY(iseq)->param.keyword = keyword = ZALLOC(struct rb_iseq_param_keyword);
+ }
+ keyword->rest_start = i;
+ ISEQ_BODY(iseq)->param.flags.has_kwrest = TRUE;
}
#undef SYM
iseq_calc_param_size(iseq);
@@ -6672,248 +12422,280 @@ rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE misc, VALUE locals, VALUE params,
iseq_build_from_ary_exception(iseq, labels_table, exception);
/* body */
- iseq_build_from_ary_body(iseq, anchor, body, labels_wrapper);
+ iseq_build_from_ary_body(iseq, anchor, body, node_ids, labels_wrapper);
+
+ ISEQ_BODY(iseq)->param.size = arg_size;
+ ISEQ_BODY(iseq)->local_table_size = local_size;
+ ISEQ_BODY(iseq)->stack_max = stack_max;
}
/* for parser */
int
-rb_dvar_defined(ID id)
-{
- rb_thread_t *th = GET_THREAD();
- const rb_iseq_t *iseq;
-
- if (th->base_block && (iseq = th->base_block->iseq)) {
- while (iseq->body->type == ISEQ_TYPE_BLOCK ||
- iseq->body->type == ISEQ_TYPE_RESCUE ||
- iseq->body->type == ISEQ_TYPE_ENSURE ||
- iseq->body->type == ISEQ_TYPE_EVAL ||
- iseq->body->type == ISEQ_TYPE_MAIN
- ) {
- unsigned int i;
-
- for (i = 0; i < iseq->body->local_table_size; i++) {
- if (iseq->body->local_table[i] == id) {
- return 1;
- }
- }
- iseq = iseq->body->parent_iseq;
- }
+rb_dvar_defined(ID id, const rb_iseq_t *iseq)
+{
+ if (iseq) {
+ const struct rb_iseq_constant_body *body = ISEQ_BODY(iseq);
+ while (body->type == ISEQ_TYPE_BLOCK ||
+ body->type == ISEQ_TYPE_RESCUE ||
+ body->type == ISEQ_TYPE_ENSURE ||
+ body->type == ISEQ_TYPE_EVAL ||
+ body->type == ISEQ_TYPE_MAIN
+ ) {
+ unsigned int i;
+
+ for (i = 0; i < body->local_table_size; i++) {
+ if (body->local_table[i] == id) {
+ return 1;
+ }
+ }
+ iseq = body->parent_iseq;
+ body = ISEQ_BODY(iseq);
+ }
}
return 0;
}
int
-rb_local_defined(ID id)
+rb_local_defined(ID id, const rb_iseq_t *iseq)
{
- rb_thread_t *th = GET_THREAD();
- const rb_iseq_t *iseq;
+ if (iseq) {
+ unsigned int i;
+ const struct rb_iseq_constant_body *const body = ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq);
- if (th->base_block && th->base_block->iseq) {
- unsigned int i;
- iseq = th->base_block->iseq->body->local_iseq;
-
- for (i=0; i<iseq->body->local_table_size; i++) {
- if (iseq->body->local_table[i] == id) {
- return 1;
- }
- }
+ for (i=0; i<body->local_table_size; i++) {
+ if (body->local_table[i] == id) {
+ return 1;
+ }
+ }
}
return 0;
}
-int
-rb_parse_in_eval(void)
-{
- return GET_THREAD()->parse_in_eval > 0;
-}
+/* ISeq binary format */
-int
-rb_parse_in_main(void)
-{
- return GET_THREAD()->parse_in_eval < 0;
-}
+#ifndef IBF_ISEQ_DEBUG
+#define IBF_ISEQ_DEBUG 0
+#endif
-static int
-caller_location(VALUE *path, VALUE *absolute_path)
-{
- const rb_thread_t *const th = GET_THREAD();
- const rb_control_frame_t *const cfp =
- rb_vm_get_ruby_level_next_cfp(th, th->cfp);
+#ifndef IBF_ISEQ_ENABLE_LOCAL_BUFFER
+#define IBF_ISEQ_ENABLE_LOCAL_BUFFER 0
+#endif
- if (cfp) {
- int line = rb_vm_get_sourceline(cfp);
- *path = cfp->iseq->body->location.path;
- *absolute_path = cfp->iseq->body->location.absolute_path;
- return line;
- }
- else {
- *path = rb_fstring_cstr("<compiled>");
- *absolute_path = *path;
- return 1;
- }
-}
+typedef uint32_t ibf_offset_t;
+#define IBF_OFFSET(ptr) ((ibf_offset_t)(VALUE)(ptr))
-typedef struct {
- VALUE arg;
- rb_insn_func_t func;
- int line;
-} accessor_args;
+#define IBF_MAJOR_VERSION ISEQ_MAJOR_VERSION
+#ifdef RUBY_DEVEL
+#define IBF_DEVEL_VERSION 5
+#define IBF_MINOR_VERSION (ISEQ_MINOR_VERSION * 10000 + IBF_DEVEL_VERSION)
+#else
+#define IBF_MINOR_VERSION ISEQ_MINOR_VERSION
+#endif
-static const rb_iseq_t *
-method_for_self(VALUE name, VALUE arg, rb_insn_func_t func,
- VALUE (*build)(rb_iseq_t *, LINK_ANCHOR *, VALUE))
-{
- VALUE path, absolute_path;
- accessor_args acc;
+static const char IBF_ENDIAN_MARK =
+#ifdef WORDS_BIGENDIAN
+ 'b'
+#else
+ 'l'
+#endif
+ ;
- acc.arg = arg;
- acc.func = func;
- acc.line = caller_location(&path, &absolute_path);
- return rb_iseq_new_with_opt((NODE *)IFUNC_NEW(build, (VALUE)&acc, 0),
- rb_sym2str(name), path, absolute_path,
- INT2FIX(acc.line), 0, ISEQ_TYPE_METHOD, 0);
-}
+struct ibf_header {
+ char magic[4]; /* YARB */
+ uint32_t major_version;
+ uint32_t minor_version;
+ uint32_t size;
+ uint32_t extra_size;
-static VALUE
-for_self_aref(rb_iseq_t *iseq, LINK_ANCHOR *ret, VALUE a)
-{
- const accessor_args *const args = (void *)a;
- const int line = args->line;
+ uint32_t iseq_list_size;
+ uint32_t global_object_list_size;
+ ibf_offset_t iseq_list_offset;
+ ibf_offset_t global_object_list_offset;
+ uint8_t endian;
+ uint8_t wordsize; /* assume no 2048-bit CPU */
+};
- iseq_set_local_table(iseq, 0);
- iseq->body->param.lead_num = 0;
- iseq->body->param.size = 0;
+struct ibf_dump_buffer {
+ VALUE str;
+ st_table *obj_table; /* obj -> obj number */
+};
- ADD_INSN1(ret, line, putobject, args->arg);
- ADD_INSN1(ret, line, opt_call_c_function, (VALUE)args->func);
- return Qnil;
-}
+struct ibf_dump {
+ st_table *iseq_table; /* iseq -> iseq number */
+ struct ibf_dump_buffer global_buffer;
+ struct ibf_dump_buffer *current_buffer;
+};
-static VALUE
-for_self_aset(rb_iseq_t *iseq, LINK_ANCHOR *ret, VALUE a)
-{
- const accessor_args *const args = (void *)a;
- const int line = args->line;
- static const ID vars[] = {1, idUScore};
+struct ibf_load_buffer {
+ const char *buff;
+ ibf_offset_t size;
- iseq_set_local_table(iseq, vars);
- iseq->body->param.lead_num = 1;
- iseq->body->param.size = 1;
+ VALUE obj_list; /* [obj0, ...] */
+ unsigned int obj_list_size;
+ ibf_offset_t obj_list_offset;
+};
- ADD_INSN2(ret, line, getlocal, INT2FIX(numberof(vars)-0), INT2FIX(0));
- ADD_INSN1(ret, line, putobject, args->arg);
- ADD_INSN1(ret, line, opt_call_c_function, (VALUE)args->func);
- ADD_INSN(ret, line, pop);
- return Qnil;
-}
+struct ibf_load {
+ const struct ibf_header *header;
+ VALUE iseq_list; /* [iseq0, ...] */
+ struct ibf_load_buffer global_buffer;
+ VALUE loader_obj;
+ rb_iseq_t *iseq;
+ VALUE str;
+ struct ibf_load_buffer *current_buffer;
+};
-/*
- * func (index) -> (value)
- */
-const rb_iseq_t *
-rb_method_for_self_aref(VALUE name, VALUE arg, rb_insn_func_t func)
-{
- return method_for_self(name, arg, func, for_self_aref);
-}
+struct pinned_list {
+ long size;
+ VALUE buffer[1];
+};
-/*
- * func (index, value) -> (index, value)
- */
-const rb_iseq_t *
-rb_method_for_self_aset(VALUE name, VALUE arg, rb_insn_func_t func)
+static void
+pinned_list_mark(void *ptr)
{
- return method_for_self(name, arg, func, for_self_aset);
+ long i;
+ struct pinned_list *list = (struct pinned_list *)ptr;
+ for (i = 0; i < list->size; i++) {
+ if (list->buffer[i]) {
+ rb_gc_mark(list->buffer[i]);
+ }
+ }
}
-/* ISeq binary format */
+static const rb_data_type_t pinned_list_type = {
+ "pinned_list",
+ {
+ pinned_list_mark,
+ RUBY_DEFAULT_FREE,
+ NULL, // No external memory to report,
+ },
+ 0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
+};
-typedef unsigned int ibf_offset_t;
-#define IBF_OFFSET(ptr) ((ibf_offset_t)(VALUE)(ptr))
+static VALUE
+pinned_list_fetch(VALUE list, long offset)
+{
+ struct pinned_list * ptr;
-struct ibf_header {
- char magic[4]; /* YARB */
- unsigned int major_version;
- unsigned int minor_version;
- unsigned int size;
- unsigned int extra_size;
+ TypedData_Get_Struct(list, struct pinned_list, &pinned_list_type, ptr);
- unsigned int iseq_list_size;
- unsigned int id_list_size;
- unsigned int object_list_size;
+ if (offset >= ptr->size) {
+ rb_raise(rb_eIndexError, "object index out of range: %ld", offset);
+ }
- ibf_offset_t iseq_list_offset;
- ibf_offset_t id_list_offset;
- ibf_offset_t object_list_offset;
-};
+ return ptr->buffer[offset];
+}
-struct ibf_id_entry {
- enum {
- ibf_id_enc_ascii,
- ibf_id_enc_utf8,
- ibf_id_enc_other
- } enc : 2;
- char body[1];
-};
+static void
+pinned_list_store(VALUE list, long offset, VALUE object)
+{
+ struct pinned_list * ptr;
-struct ibf_dump {
- VALUE str;
- VALUE iseq_list; /* [iseq0 offset, ...] */
- VALUE obj_list; /* [objs] */
- st_table *iseq_table; /* iseq -> iseq number */
- st_table *id_table; /* id -> id number */
-};
+ TypedData_Get_Struct(list, struct pinned_list, &pinned_list_type, ptr);
-rb_iseq_t * iseq_alloc(void);
+ if (offset >= ptr->size) {
+ rb_raise(rb_eIndexError, "object index out of range: %ld", offset);
+ }
-struct ibf_load {
- const char *buff;
- const struct ibf_header *header;
- ID *id_list; /* [id0, ...] */
- VALUE iseq_list; /* [iseq0, ...] */
- VALUE obj_list; /* [obj0, ...] */
- VALUE loader_obj;
- VALUE str;
- rb_iseq_t *iseq;
-};
+ RB_OBJ_WRITE(list, &ptr->buffer[offset], object);
+}
+
+static VALUE
+pinned_list_new(long size)
+{
+ size_t memsize = offsetof(struct pinned_list, buffer) + size * sizeof(VALUE);
+ VALUE obj_list = rb_data_typed_object_zalloc(0, memsize, &pinned_list_type);
+ struct pinned_list * ptr = RTYPEDDATA_GET_DATA(obj_list);
+ ptr->size = size;
+ return obj_list;
+}
static ibf_offset_t
ibf_dump_pos(struct ibf_dump *dump)
{
- return (unsigned int)rb_str_strlen(dump->str);
+ long pos = RSTRING_LEN(dump->current_buffer->str);
+#if SIZEOF_LONG > SIZEOF_INT
+ if (pos >= UINT_MAX) {
+ rb_raise(rb_eRuntimeError, "dump size exceeds");
+ }
+#endif
+ return (unsigned int)pos;
+}
+
+static void
+ibf_dump_align(struct ibf_dump *dump, size_t align)
+{
+ ibf_offset_t pos = ibf_dump_pos(dump);
+ if (pos % align) {
+ static const char padding[sizeof(VALUE)];
+ size_t size = align - ((size_t)pos % align);
+#if SIZEOF_LONG > SIZEOF_INT
+ if (pos + size >= UINT_MAX) {
+ rb_raise(rb_eRuntimeError, "dump size exceeds");
+ }
+#endif
+ for (; size > sizeof(padding); size -= sizeof(padding)) {
+ rb_str_cat(dump->current_buffer->str, padding, sizeof(padding));
+ }
+ rb_str_cat(dump->current_buffer->str, padding, size);
+ }
}
static ibf_offset_t
ibf_dump_write(struct ibf_dump *dump, const void *buff, unsigned long size)
{
ibf_offset_t pos = ibf_dump_pos(dump);
- rb_str_cat(dump->str, (const char *)buff, size);
- /* TODO: overflow check */
+#if SIZEOF_LONG > SIZEOF_INT
+ /* ensure the resulting dump does not exceed UINT_MAX */
+ if (size >= UINT_MAX || pos + size >= UINT_MAX) {
+ rb_raise(rb_eRuntimeError, "dump size exceeds");
+ }
+#endif
+ rb_str_cat(dump->current_buffer->str, (const char *)buff, size);
return pos;
}
+static ibf_offset_t
+ibf_dump_write_byte(struct ibf_dump *dump, unsigned char byte)
+{
+ return ibf_dump_write(dump, &byte, sizeof(unsigned char));
+}
+
static void
ibf_dump_overwrite(struct ibf_dump *dump, void *buff, unsigned int size, long offset)
{
- VALUE str = dump->str;
+ VALUE str = dump->current_buffer->str;
char *ptr = RSTRING_PTR(str);
if ((unsigned long)(size + offset) > (unsigned long)RSTRING_LEN(str))
- rb_bug("ibf_dump_overwrite: overflow");
+ rb_bug("ibf_dump_overwrite: overflow");
memcpy(ptr + offset, buff, size);
}
+static const void *
+ibf_load_ptr(const struct ibf_load *load, ibf_offset_t *offset, int size)
+{
+ ibf_offset_t beg = *offset;
+ *offset += size;
+ return load->current_buffer->buff + beg;
+}
+
static void *
-ibf_load_alloc(const struct ibf_load *load, ibf_offset_t offset, int size)
+ibf_load_alloc(const struct ibf_load *load, ibf_offset_t offset, size_t x, size_t y)
{
- void *buff = ruby_xmalloc(size);
- memcpy(buff, load->buff + offset, size);
+ void *buff = ruby_xmalloc2(x, y);
+ size_t size = x * y;
+ memcpy(buff, load->current_buffer->buff + offset, size);
return buff;
}
-#define IBF_W(b, type, n) (type *)(VALUE)ibf_dump_write(dump, (b), sizeof(type) * (n))
+#define IBF_W_ALIGN(type) (RUBY_ALIGNOF(type) > 1 ? ibf_dump_align(dump, RUBY_ALIGNOF(type)) : (void)0)
+
+#define IBF_W(b, type, n) (IBF_W_ALIGN(type), (type *)(VALUE)IBF_WP(b, type, n))
#define IBF_WV(variable) ibf_dump_write(dump, &(variable), sizeof(variable))
#define IBF_WP(b, type, n) ibf_dump_write(dump, (b), sizeof(type) * (n))
-#define IBF_R(val, type, n) (type *)ibf_load_alloc(load, IBF_OFFSET(val), sizeof(type) * (n))
+#define IBF_R(val, type, n) (type *)ibf_load_alloc(load, IBF_OFFSET(val), sizeof(type), (n))
+#define IBF_ZERO(variable) memset(&(variable), 0, sizeof(variable))
static int
ibf_table_lookup(struct st_table *table, st_data_t key)
@@ -6921,21 +12703,21 @@ ibf_table_lookup(struct st_table *table, st_data_t key)
st_data_t val;
if (st_lookup(table, key, &val)) {
- return (int)val;
+ return (int)val;
}
else {
- return -1;
+ return -1;
}
}
static int
-ibf_table_index(struct st_table *table, st_data_t key)
+ibf_table_find_or_insert(struct st_table *table, st_data_t key)
{
int index = ibf_table_lookup(table, key);
if (index < 0) { /* not found */
- index = (int)table->num_entries;
- st_insert(table, key, (st_data_t)index);
+ index = (int)table->num_entries;
+ st_insert(table, key, (st_data_t)index);
}
return index;
@@ -6943,464 +12725,1009 @@ ibf_table_index(struct st_table *table, st_data_t key)
/* dump/load generic */
+static void ibf_dump_object_list(struct ibf_dump *dump, ibf_offset_t *obj_list_offset, unsigned int *obj_list_size);
+
static VALUE ibf_load_object(const struct ibf_load *load, VALUE object_index);
static rb_iseq_t *ibf_load_iseq(const struct ibf_load *load, const rb_iseq_t *index_iseq);
+static st_table *
+ibf_dump_object_table_new(void)
+{
+ st_table *obj_table = st_init_numtable(); /* need free */
+ st_insert(obj_table, (st_data_t)Qnil, (st_data_t)0); /* 0th is nil */
+
+ return obj_table;
+}
+
static VALUE
ibf_dump_object(struct ibf_dump *dump, VALUE obj)
{
- long index = RARRAY_LEN(dump->obj_list);
- long i;
- for (i=0; i<index; i++) {
- if (RARRAY_AREF(dump->obj_list, i) == obj) return (VALUE)i; /* dedup */
- }
- rb_ary_push(dump->obj_list, obj);
- return (VALUE)index;
+ return ibf_table_find_or_insert(dump->current_buffer->obj_table, (st_data_t)obj);
}
static VALUE
ibf_dump_id(struct ibf_dump *dump, ID id)
{
- return (VALUE)ibf_table_index(dump->id_table, (st_data_t)id);
+ if (id == 0 || rb_id2name(id) == NULL) {
+ return 0;
+ }
+ return ibf_dump_object(dump, rb_id2sym(id));
}
static ID
ibf_load_id(const struct ibf_load *load, const ID id_index)
{
- ID id;
-
if (id_index == 0) {
- id = 0;
+ return 0;
}
- else {
- id = load->id_list[(long)id_index];
-
- if (id == 0) {
- long *indices = (long *)(load->buff + load->header->id_list_offset);
- VALUE str = ibf_load_object(load, indices[id_index]);
- id = NIL_P(str) ? 0 : rb_intern_str(str); /* str == nil -> internal junk id */
- load->id_list[(long)id_index] = id;
- }
+ VALUE sym = ibf_load_object(load, id_index);
+ if (rb_integer_type_p(sym)) {
+ /* Load hidden local variables as indexes */
+ return NUM2ULONG(sym);
}
-
- return id;
+ return rb_sym2id(sym);
}
/* dump/load: code */
-static VALUE
-ibf_dump_callinfo(struct ibf_dump *dump, const struct rb_call_info *ci)
-{
- return (ci->flag & VM_CALL_KWARG) ? Qtrue : Qfalse;
-}
-
static ibf_offset_t ibf_dump_iseq_each(struct ibf_dump *dump, const rb_iseq_t *iseq);
-static rb_iseq_t *
+static int
ibf_dump_iseq(struct ibf_dump *dump, const rb_iseq_t *iseq)
{
if (iseq == NULL) {
- return (rb_iseq_t *)-1;
+ return -1;
}
else {
- int iseq_index = ibf_table_lookup(dump->iseq_table, (st_data_t)iseq);
- if (iseq_index < 0) {
- iseq_index = ibf_table_index(dump->iseq_table, (st_data_t)iseq);
- rb_ary_store(dump->iseq_list, iseq_index, LONG2NUM(ibf_dump_iseq_each(dump, rb_iseq_check(iseq))));
- }
- return (rb_iseq_t *)(VALUE)iseq_index;
+ return ibf_table_find_or_insert(dump->iseq_table, (st_data_t)iseq);
}
}
-static VALUE
-ibf_dump_gentry(struct ibf_dump *dump, const struct rb_global_entry *entry)
+static unsigned char
+ibf_load_byte(const struct ibf_load *load, ibf_offset_t *offset)
{
- return (VALUE)ibf_dump_id(dump, entry->id);
+ if (*offset >= load->current_buffer->size) { rb_raise(rb_eRuntimeError, "invalid bytecode"); }
+ return (unsigned char)load->current_buffer->buff[(*offset)++];
+}
+
+/*
+ * Small uint serialization
+ * 0x00000000_00000000 - 0x00000000_0000007f: 1byte | XXXX XXX1 |
+ * 0x00000000_00000080 - 0x00000000_00003fff: 2byte | XXXX XX10 | XXXX XXXX |
+ * 0x00000000_00004000 - 0x00000000_001fffff: 3byte | XXXX X100 | XXXX XXXX | XXXX XXXX |
+ * 0x00000000_00020000 - 0x00000000_0fffffff: 4byte | XXXX 1000 | XXXX XXXX | XXXX XXXX | XXXX XXXX |
+ * ...
+ * 0x00010000_00000000 - 0x00ffffff_ffffffff: 8byte | 1000 0000 | XXXX XXXX | XXXX XXXX | XXXX XXXX | XXXX XXXX | XXXX XXXX | XXXX XXXX | XXXX XXXX |
+ * 0x01000000_00000000 - 0xffffffff_ffffffff: 9byte | 0000 0000 | XXXX XXXX | XXXX XXXX | XXXX XXXX | XXXX XXXX | XXXX XXXX | XXXX XXXX | XXXX XXXX | XXXX XXXX |
+ */
+static void
+ibf_dump_write_small_value(struct ibf_dump *dump, VALUE x)
+{
+ if (sizeof(VALUE) > 8 || CHAR_BIT != 8) {
+ ibf_dump_write(dump, &x, sizeof(VALUE));
+ return;
+ }
+
+ enum { max_byte_length = sizeof(VALUE) + 1 };
+
+ unsigned char bytes[max_byte_length];
+ ibf_offset_t n;
+
+ for (n = 0; n < sizeof(VALUE) && (x >> (7 - n)); n++, x >>= 8) {
+ bytes[max_byte_length - 1 - n] = (unsigned char)x;
+ }
+
+ x <<= 1;
+ x |= 1;
+ x <<= n;
+ bytes[max_byte_length - 1 - n] = (unsigned char)x;
+ n++;
+
+ ibf_dump_write(dump, bytes + max_byte_length - n, n);
}
static VALUE
-ibf_load_gentry(const struct ibf_load *load, const struct rb_global_entry *entry)
+ibf_load_small_value(const struct ibf_load *load, ibf_offset_t *offset)
+{
+ if (sizeof(VALUE) > 8 || CHAR_BIT != 8) {
+ union { char s[sizeof(VALUE)]; VALUE v; } x;
+
+ memcpy(x.s, load->current_buffer->buff + *offset, sizeof(VALUE));
+ *offset += sizeof(VALUE);
+
+ return x.v;
+ }
+
+ enum { max_byte_length = sizeof(VALUE) + 1 };
+
+ const unsigned char *buffer = (const unsigned char *)load->current_buffer->buff;
+ const unsigned char c = buffer[*offset];
+
+ ibf_offset_t n =
+ c & 1 ? 1 :
+ c == 0 ? 9 : ntz_int32(c) + 1;
+ VALUE x = (VALUE)c >> n;
+
+ if (*offset + n > load->current_buffer->size) {
+ rb_raise(rb_eRuntimeError, "invalid byte sequence");
+ }
+
+ ibf_offset_t i;
+ for (i = 1; i < n; i++) {
+ x <<= 8;
+ x |= (VALUE)buffer[*offset + i];
+ }
+
+ *offset += n;
+ return x;
+}
+
+static void
+ibf_dump_builtin(struct ibf_dump *dump, const struct rb_builtin_function *bf)
{
- ID gid = ibf_load_id(load, (ID)(VALUE)entry);
- return (VALUE)rb_global_entry(gid);
+ // short: index
+ // short: name.length
+ // bytes: name
+ // // omit argc (only verify with name)
+ ibf_dump_write_small_value(dump, (VALUE)bf->index);
+
+ size_t len = strlen(bf->name);
+ ibf_dump_write_small_value(dump, (VALUE)len);
+ ibf_dump_write(dump, bf->name, len);
}
-static VALUE *
+static const struct rb_builtin_function *
+ibf_load_builtin(const struct ibf_load *load, ibf_offset_t *offset)
+{
+ int i = (int)ibf_load_small_value(load, offset);
+ int len = (int)ibf_load_small_value(load, offset);
+ const char *name = (char *)ibf_load_ptr(load, offset, len);
+
+ if (0) {
+ fprintf(stderr, "%.*s!!\n", len, name);
+ }
+
+ const struct rb_builtin_function *table = GET_VM()->builtin_function_table;
+ if (table == NULL) rb_raise(rb_eArgError, "builtin function table is not provided");
+ if (strncmp(table[i].name, name, len) != 0) {
+ rb_raise(rb_eArgError, "builtin function index (%d) mismatch (expect %s but %s)", i, name, table[i].name);
+ }
+ // fprintf(stderr, "load-builtin: name:%s(%d)\n", table[i].name, table[i].argc);
+
+ return &table[i];
+}
+
+static ibf_offset_t
ibf_dump_code(struct ibf_dump *dump, const rb_iseq_t *iseq)
{
- const int iseq_size = iseq->body->iseq_size;
+ const struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
+ const int iseq_size = body->iseq_size;
int code_index;
- VALUE *code;
const VALUE *orig_code = rb_iseq_original_iseq(iseq);
- code = ALLOCA_N(VALUE, iseq_size);
+ ibf_offset_t offset = ibf_dump_pos(dump);
for (code_index=0; code_index<iseq_size;) {
- const VALUE insn = orig_code[code_index];
- const char *types = insn_op_types(insn);
- int op_index;
-
- code[code_index++] = (VALUE)insn;
-
- for (op_index=0; types[op_index]; op_index++, code_index++) {
- VALUE op = orig_code[code_index];
- switch (types[op_index]) {
- case TS_CDHASH:
- case TS_VALUE:
- code[code_index] = ibf_dump_object(dump, op);
- break;
- case TS_ISEQ:
- code[code_index] = (VALUE)ibf_dump_iseq(dump, (const rb_iseq_t *)op);
- break;
- case TS_IC:
- {
- unsigned int i;
- for (i=0; i<iseq->body->is_size; i++) {
- if (op == (VALUE)&iseq->body->is_entries[i]) {
- break;
- }
- }
- code[code_index] = i;
- }
- break;
- case TS_CALLINFO:
- code[code_index] = ibf_dump_callinfo(dump, (const struct rb_call_info *)op);
- break;
- case TS_CALLCACHE:
- code[code_index] = 0;
- break;
- case TS_ID:
- code[code_index] = ibf_dump_id(dump, (ID)op);
- break;
- case TS_GENTRY:
- code[code_index] = ibf_dump_gentry(dump, (const struct rb_global_entry *)op);
- break;
- case TS_FUNCPTR:
- rb_raise(rb_eRuntimeError, "TS_FUNCPTR is not supported");
- break;
- default:
- code[code_index] = op;
- break;
- }
- }
- assert(insn_len(insn) == op_index+1);
- }
-
- return IBF_W(code, VALUE, iseq_size);
+ const VALUE insn = orig_code[code_index++];
+ const char *types = insn_op_types(insn);
+ int op_index;
+
+ /* opcode */
+ if (insn >= 0x100) { rb_raise(rb_eRuntimeError, "invalid instruction"); }
+ ibf_dump_write_small_value(dump, insn);
+
+ /* operands */
+ for (op_index=0; types[op_index]; op_index++, code_index++) {
+ VALUE op = orig_code[code_index];
+ VALUE wv;
+
+ switch (types[op_index]) {
+ case TS_CDHASH:
+ case TS_VALUE:
+ wv = ibf_dump_object(dump, op);
+ break;
+ case TS_ISEQ:
+ wv = (VALUE)ibf_dump_iseq(dump, (const rb_iseq_t *)op);
+ break;
+ case TS_IC:
+ {
+ IC ic = (IC)op;
+ VALUE arr = idlist_to_array(ic->segments);
+ wv = ibf_dump_object(dump, arr);
+ }
+ break;
+ case TS_ISE:
+ case TS_IVC:
+ case TS_ICVARC:
+ {
+ union iseq_inline_storage_entry *is = (union iseq_inline_storage_entry *)op;
+ wv = is - ISEQ_IS_ENTRY_START(body, types[op_index]);
+ }
+ break;
+ case TS_CALLDATA:
+ {
+ goto skip_wv;
+ }
+ case TS_ID:
+ wv = ibf_dump_id(dump, (ID)op);
+ break;
+ case TS_FUNCPTR:
+ rb_raise(rb_eRuntimeError, "TS_FUNCPTR is not supported");
+ goto skip_wv;
+ case TS_BUILTIN:
+ ibf_dump_builtin(dump, (const struct rb_builtin_function *)op);
+ goto skip_wv;
+ default:
+ wv = op;
+ break;
+ }
+ ibf_dump_write_small_value(dump, wv);
+ skip_wv:;
+ }
+ RUBY_ASSERT(insn_len(insn) == op_index+1);
+ }
+
+ return offset;
}
static VALUE *
-ibf_load_code(const struct ibf_load *load, const rb_iseq_t *iseq, const struct rb_iseq_constant_body *body)
+ibf_load_code(const struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t bytecode_offset, ibf_offset_t bytecode_size, unsigned int iseq_size)
{
- const int iseq_size = body->iseq_size;
- int code_index;
- VALUE *code = IBF_R(body->iseq_encoded, VALUE, iseq_size);
+ VALUE iseqv = (VALUE)iseq;
+ unsigned int code_index;
+ ibf_offset_t reading_pos = bytecode_offset;
+ VALUE *code = ALLOC_N(VALUE, iseq_size);
- struct rb_call_info *ci_entries = iseq->body->ci_entries;
- struct rb_call_info_with_kwarg *ci_kw_entries = (struct rb_call_info_with_kwarg *)&iseq->body->ci_entries[iseq->body->ci_size];
- struct rb_call_cache *cc_entries = iseq->body->cc_entries;
- union iseq_inline_storage_entry *is_entries = iseq->body->is_entries;
+ struct rb_iseq_constant_body *load_body = ISEQ_BODY(iseq);
+ struct rb_call_data *cd_entries = load_body->call_data;
+ int ic_index = 0;
- for (code_index=0; code_index<iseq_size;) {
- const VALUE insn = code[code_index++];
- const char *types = insn_op_types(insn);
- int op_index;
-
- for (op_index=0; types[op_index]; op_index++, code_index++) {
- VALUE op = code[code_index];
-
- switch (types[op_index]) {
- case TS_CDHASH:
- case TS_VALUE:
- code[code_index] = ibf_load_object(load, op);
- break;
- case TS_ISEQ:
- code[code_index] = (VALUE)ibf_load_iseq(load, (const rb_iseq_t *)op);
- break;
- case TS_IC:
- code[code_index] = (VALUE)&is_entries[(int)op];
- break;
- case TS_CALLINFO:
- code[code_index] = op ? (VALUE)ci_kw_entries++ : (VALUE)ci_entries++; /* op is Qtrue (kw) or Qfalse (!kw) */
- break;
- case TS_CALLCACHE:
- code[code_index] = (VALUE)cc_entries++;
- break;
- case TS_ID:
- code[code_index] = ibf_load_id(load, (ID)op);
- break;
- case TS_GENTRY:
- code[code_index] = ibf_load_gentry(load, (const struct rb_global_entry *)op);
- break;
- case TS_FUNCPTR:
- rb_raise(rb_eRuntimeError, "TS_FUNCPTR is not supported");
- break;
- default:
- /* code[code_index] = op; */
- break;
- }
- }
- assert(insn_len(insn) == op_index+1);
- };
+ load_body->iseq_encoded = code;
+ load_body->iseq_size = 0;
+
+ iseq_bits_t * mark_offset_bits;
+
+ iseq_bits_t tmp[1] = {0};
+ if (ISEQ_MBITS_BUFLEN(iseq_size) == 1) {
+ mark_offset_bits = tmp;
+ }
+ else {
+ mark_offset_bits = ZALLOC_N(iseq_bits_t, ISEQ_MBITS_BUFLEN(iseq_size));
+ }
+ bool needs_bitmap = false;
+
+ for (code_index=0; code_index<iseq_size;) {
+ /* opcode */
+ const VALUE insn = code[code_index] = ibf_load_small_value(load, &reading_pos);
+ const char *types = insn_op_types(insn);
+ int op_index;
+
+ code_index++;
+
+ /* operands */
+ for (op_index=0; types[op_index]; op_index++, code_index++) {
+ const char operand_type = types[op_index];
+ switch (operand_type) {
+ case TS_VALUE:
+ {
+ VALUE op = ibf_load_small_value(load, &reading_pos);
+ VALUE v = ibf_load_object(load, op);
+ code[code_index] = v;
+ if (!SPECIAL_CONST_P(v)) {
+ RB_OBJ_WRITTEN(iseqv, Qundef, v);
+ ISEQ_MBITS_SET(mark_offset_bits, code_index);
+ needs_bitmap = true;
+ }
+ break;
+ }
+ case TS_CDHASH:
+ {
+ VALUE op = ibf_load_small_value(load, &reading_pos);
+ VALUE v = ibf_load_object(load, op);
+ v = rb_hash_dup(v); // hash dumped as frozen
+ RHASH_TBL_RAW(v)->type = &cdhash_type;
+ rb_hash_rehash(v); // hash function changed
+ RB_OBJ_SET_SHAREABLE(freeze_hide_obj(v));
+
+ // Overwrite the existing hash in the object list. This
+ // is to keep the object alive during load time.
+ // [Bug #17984] [ruby-core:104259]
+ pinned_list_store(load->current_buffer->obj_list, (long)op, v);
+
+ code[code_index] = v;
+ ISEQ_MBITS_SET(mark_offset_bits, code_index);
+ RB_OBJ_WRITTEN(iseqv, Qundef, v);
+ needs_bitmap = true;
+ break;
+ }
+ case TS_ISEQ:
+ {
+ VALUE op = (VALUE)ibf_load_small_value(load, &reading_pos);
+ VALUE v = (VALUE)ibf_load_iseq(load, (const rb_iseq_t *)op);
+ code[code_index] = v;
+ if (!SPECIAL_CONST_P(v)) {
+ RB_OBJ_WRITTEN(iseqv, Qundef, v);
+ ISEQ_MBITS_SET(mark_offset_bits, code_index);
+ needs_bitmap = true;
+ }
+ break;
+ }
+ case TS_IC:
+ {
+ VALUE op = ibf_load_small_value(load, &reading_pos);
+ VALUE arr = ibf_load_object(load, op);
+
+ IC ic = &ISEQ_IS_IC_ENTRY(load_body, ic_index++);
+ ic->segments = array_to_idlist(arr);
+
+ code[code_index] = (VALUE)ic;
+ }
+ break;
+ case TS_ISE:
+ case TS_ICVARC:
+ case TS_IVC:
+ {
+ unsigned int op = (unsigned int)ibf_load_small_value(load, &reading_pos);
+
+ ISE ic = ISEQ_IS_ENTRY_START(load_body, operand_type) + op;
+ code[code_index] = (VALUE)ic;
+
+ if (operand_type == TS_IVC) {
+ IVC cache = (IVC)ic;
+
+ if (insn == BIN(setinstancevariable)) {
+ ID iv_name = (ID)code[code_index - 1];
+ cache->iv_set_name = iv_name;
+ }
+ else {
+ cache->iv_set_name = 0;
+ }
+
+ vm_ic_attr_index_initialize(cache, INVALID_SHAPE_ID);
+ }
+
+ }
+ break;
+ case TS_CALLDATA:
+ {
+ code[code_index] = (VALUE)cd_entries++;
+ }
+ break;
+ case TS_ID:
+ {
+ VALUE op = ibf_load_small_value(load, &reading_pos);
+ code[code_index] = ibf_load_id(load, (ID)(VALUE)op);
+ }
+ break;
+ case TS_FUNCPTR:
+ rb_raise(rb_eRuntimeError, "TS_FUNCPTR is not supported");
+ break;
+ case TS_BUILTIN:
+ code[code_index] = (VALUE)ibf_load_builtin(load, &reading_pos);
+ break;
+ default:
+ code[code_index] = ibf_load_small_value(load, &reading_pos);
+ continue;
+ }
+ }
+ if (insn_len(insn) != op_index+1) {
+ rb_raise(rb_eRuntimeError, "operand size mismatch");
+ }
+ }
+
+ load_body->iseq_size = code_index;
+
+ if (ISEQ_MBITS_BUFLEN(load_body->iseq_size) == 1) {
+ load_body->mark_bits.single = mark_offset_bits[0];
+ }
+ else {
+ if (needs_bitmap) {
+ load_body->mark_bits.list = mark_offset_bits;
+ }
+ else {
+ load_body->mark_bits.list = 0;
+ ruby_xfree(mark_offset_bits);
+ }
+ }
+ RUBY_ASSERT(code_index == iseq_size);
+ RUBY_ASSERT(reading_pos == bytecode_offset + bytecode_size);
return code;
}
-static VALUE *
+static ibf_offset_t
ibf_dump_param_opt_table(struct ibf_dump *dump, const rb_iseq_t *iseq)
{
- int opt_num = iseq->body->param.opt_num;
+ int opt_num = ISEQ_BODY(iseq)->param.opt_num;
if (opt_num > 0) {
- return IBF_W(iseq->body->param.opt_table, VALUE, opt_num + 1);
+ IBF_W_ALIGN(VALUE);
+ return ibf_dump_write(dump, ISEQ_BODY(iseq)->param.opt_table, sizeof(VALUE) * (opt_num + 1));
}
else {
- return NULL;
+ return ibf_dump_pos(dump);
}
}
static VALUE *
-ibf_load_param_opt_table(const struct ibf_load *load, const struct rb_iseq_constant_body *body)
+ibf_load_param_opt_table(const struct ibf_load *load, ibf_offset_t opt_table_offset, int opt_num)
{
- int opt_num = body->param.opt_num;
-
if (opt_num > 0) {
- ibf_offset_t offset = IBF_OFFSET(body->param.opt_table);
- VALUE *table = ALLOC_N(VALUE, opt_num+1);
- MEMCPY(table, load->buff + offset, VALUE, opt_num+1);
- return table;
+ VALUE *table = ALLOC_N(VALUE, opt_num+1);
+ MEMCPY(table, load->current_buffer->buff + opt_table_offset, VALUE, opt_num+1);
+ return table;
}
else {
- return NULL;
+ return NULL;
}
}
-static struct rb_iseq_param_keyword *
+static ibf_offset_t
ibf_dump_param_keyword(struct ibf_dump *dump, const rb_iseq_t *iseq)
{
- const struct rb_iseq_param_keyword *kw = iseq->body->param.keyword;
+ const struct rb_iseq_param_keyword *kw = ISEQ_BODY(iseq)->param.keyword;
if (kw) {
- struct rb_iseq_param_keyword dump_kw = *kw;
- int dv_num = kw->num - kw->required_num;
- ID *ids = kw->num > 0 ? ALLOCA_N(ID, kw->num) : NULL;
- VALUE *dvs = dv_num > 0 ? ALLOCA_N(VALUE, dv_num) : NULL;
- int i;
+ struct rb_iseq_param_keyword dump_kw = *kw;
+ int dv_num = kw->num - kw->required_num;
+ ID *ids = kw->num > 0 ? ALLOCA_N(ID, kw->num) : NULL;
+ VALUE *dvs = dv_num > 0 ? ALLOCA_N(VALUE, dv_num) : NULL;
+ int i;
- for (i=0; i<kw->num; i++) ids[i] = (ID)ibf_dump_id(dump, kw->table[i]);
- for (i=0; i<dv_num; i++) dvs[i] = (VALUE)ibf_dump_object(dump, kw->default_values[i]);
+ for (i=0; i<kw->num; i++) ids[i] = (ID)ibf_dump_id(dump, kw->table[i]);
+ for (i=0; i<dv_num; i++) dvs[i] = (VALUE)ibf_dump_object(dump, kw->default_values[i]);
- dump_kw.table = IBF_W(ids, ID, kw->num);
- dump_kw.default_values = IBF_W(dvs, VALUE, dv_num);
- return IBF_W(&dump_kw, struct rb_iseq_param_keyword, 1);
+ dump_kw.table = IBF_W(ids, ID, kw->num);
+ dump_kw.default_values = IBF_W(dvs, VALUE, dv_num);
+ IBF_W_ALIGN(struct rb_iseq_param_keyword);
+ return ibf_dump_write(dump, &dump_kw, sizeof(struct rb_iseq_param_keyword) * 1);
}
else {
- return NULL;
+ return 0;
}
}
static const struct rb_iseq_param_keyword *
-ibf_load_param_keyword(const struct ibf_load *load, const struct rb_iseq_constant_body *body)
-{
- if (body->param.keyword) {
- struct rb_iseq_param_keyword *kw = IBF_R(body->param.keyword, struct rb_iseq_param_keyword, 1);
- ID *ids = IBF_R(kw->table, ID, kw->num);
- int dv_num = kw->num - kw->required_num;
- VALUE *dvs = IBF_R(kw->default_values, VALUE, dv_num);
- int i;
-
- for (i=0; i<kw->num; i++) {
- ids[i] = ibf_load_id(load, ids[i]);
- }
- for (i=0; i<dv_num; i++) {
- dvs[i] = ibf_load_object(load, dvs[i]);
- }
-
- kw->table = ids;
- kw->default_values = dvs;
- return kw;
+ibf_load_param_keyword(const struct ibf_load *load, ibf_offset_t param_keyword_offset)
+{
+ if (param_keyword_offset) {
+ struct rb_iseq_param_keyword *kw = IBF_R(param_keyword_offset, struct rb_iseq_param_keyword, 1);
+ int dv_num = kw->num - kw->required_num;
+ VALUE *dvs = dv_num ? IBF_R(kw->default_values, VALUE, dv_num) : NULL;
+
+ int i;
+ for (i=0; i<dv_num; i++) {
+ dvs[i] = ibf_load_object(load, dvs[i]);
+ }
+
+ // Will be set once the local table is loaded.
+ kw->table = NULL;
+
+ kw->default_values = dvs;
+ return kw;
}
else {
- return NULL;
+ return NULL;
}
}
-static struct iseq_line_info_entry *
-ibf_dump_line_info_table(struct ibf_dump *dump, const rb_iseq_t *iseq)
+static ibf_offset_t
+ibf_dump_insns_info_body(struct ibf_dump *dump, const rb_iseq_t *iseq)
{
- return IBF_W(iseq->body->line_info_table, struct iseq_line_info_entry, iseq->body->line_info_size);
+ ibf_offset_t offset = ibf_dump_pos(dump);
+ const struct iseq_insn_info_entry *entries = ISEQ_BODY(iseq)->insns_info.body;
+
+ unsigned int i;
+ for (i = 0; i < ISEQ_BODY(iseq)->insns_info.size; i++) {
+ ibf_dump_write_small_value(dump, entries[i].line_no);
+#ifdef USE_ISEQ_NODE_ID
+ ibf_dump_write_small_value(dump, entries[i].node_id);
+#endif
+ ibf_dump_write_small_value(dump, entries[i].events);
+ }
+
+ return offset;
}
-static struct iseq_line_info_entry *
-ibf_load_line_info_table(const struct ibf_load *load, const struct rb_iseq_constant_body *body)
+static struct iseq_insn_info_entry *
+ibf_load_insns_info_body(const struct ibf_load *load, ibf_offset_t body_offset, unsigned int size)
{
- return IBF_R(body->line_info_table, struct iseq_line_info_entry, body->line_info_size);
+ ibf_offset_t reading_pos = body_offset;
+ struct iseq_insn_info_entry *entries = ALLOC_N(struct iseq_insn_info_entry, size);
+
+ unsigned int i;
+ for (i = 0; i < size; i++) {
+ entries[i].line_no = (int)ibf_load_small_value(load, &reading_pos);
+#ifdef USE_ISEQ_NODE_ID
+ entries[i].node_id = (int)ibf_load_small_value(load, &reading_pos);
+#endif
+ entries[i].events = (rb_event_flag_t)ibf_load_small_value(load, &reading_pos);
+ }
+
+ return entries;
}
-static ID *
+static ibf_offset_t
+ibf_dump_insns_info_positions(struct ibf_dump *dump, const unsigned int *positions, unsigned int size)
+{
+ ibf_offset_t offset = ibf_dump_pos(dump);
+
+ unsigned int last = 0;
+ unsigned int i;
+ for (i = 0; i < size; i++) {
+ ibf_dump_write_small_value(dump, positions[i] - last);
+ last = positions[i];
+ }
+
+ return offset;
+}
+
+static unsigned int *
+ibf_load_insns_info_positions(const struct ibf_load *load, ibf_offset_t positions_offset, unsigned int size)
+{
+ ibf_offset_t reading_pos = positions_offset;
+ unsigned int *positions = ALLOC_N(unsigned int, size);
+
+ unsigned int last = 0;
+ unsigned int i;
+ for (i = 0; i < size; i++) {
+ positions[i] = last + (unsigned int)ibf_load_small_value(load, &reading_pos);
+ last = positions[i];
+ }
+
+ return positions;
+}
+
+static ibf_offset_t
ibf_dump_local_table(struct ibf_dump *dump, const rb_iseq_t *iseq)
{
- const int size = iseq->body->local_size - 1;
+ const struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
+ const int size = body->local_table_size;
ID *table = ALLOCA_N(ID, size);
int i;
for (i=0; i<size; i++) {
- table[i] = ibf_dump_id(dump, iseq->body->local_table[i]);
+ VALUE v = ibf_dump_id(dump, body->local_table[i]);
+ if (v == 0) {
+ /* Dump hidden local variables as indexes, so load_from_binary will work with them */
+ v = ibf_dump_object(dump, ULONG2NUM(body->local_table[i]));
+ }
+ table[i] = v;
}
- return IBF_W(table, ID, size);
+ IBF_W_ALIGN(ID);
+ return ibf_dump_write(dump, table, sizeof(ID) * size);
}
-static ID *
-ibf_load_local_table(const struct ibf_load *load, const struct rb_iseq_constant_body *body)
+static const ID *
+ibf_load_local_table(const struct ibf_load *load, ibf_offset_t local_table_offset, int size)
{
- const int size = body->local_size - 1;
-
if (size > 0) {
- ID *table = IBF_R(body->local_table, ID, size);
- int i;
+ ID *table = IBF_R(local_table_offset, ID, size);
+ int i;
+
+ for (i=0; i<size; i++) {
+ table[i] = ibf_load_id(load, table[i]);
+ }
- for (i=0; i<size; i++) {
- table[i] = ibf_load_id(load, table[i]);
- }
- return table;
+ if (size == 1 && table[0] == idERROR_INFO) {
+ xfree(table);
+ return rb_iseq_shared_exc_local_tbl;
+ }
+ else {
+ return table;
+ }
}
else {
- return NULL;
+ return NULL;
}
}
-static struct iseq_catch_table *
+static ibf_offset_t
+ibf_dump_lvar_states(struct ibf_dump *dump, const rb_iseq_t *iseq)
+{
+ const struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
+ const int size = body->local_table_size;
+ IBF_W_ALIGN(enum lvar_state);
+ return ibf_dump_write(dump, body->lvar_states, sizeof(enum lvar_state) * (body->lvar_states ? size : 0));
+}
+
+static enum lvar_state *
+ibf_load_lvar_states(const struct ibf_load *load, ibf_offset_t lvar_states_offset, int size, const ID *local_table)
+{
+ if (local_table == rb_iseq_shared_exc_local_tbl ||
+ size <= 0) {
+ return NULL;
+ }
+ else {
+ enum lvar_state *states = IBF_R(lvar_states_offset, enum lvar_state, size);
+ return states;
+ }
+}
+
+static ibf_offset_t
ibf_dump_catch_table(struct ibf_dump *dump, const rb_iseq_t *iseq)
{
- const struct iseq_catch_table *table = iseq->body->catch_table;
+ const struct iseq_catch_table *table = ISEQ_BODY(iseq)->catch_table;
if (table) {
- int byte_size = iseq_catch_table_bytes(iseq->body->catch_table->size);
- struct iseq_catch_table *dump_table = (struct iseq_catch_table *)ALLOCA_N(char, byte_size);
- unsigned int i;
- dump_table->size = table->size;
- for (i=0; i<table->size; i++) {
- dump_table->entries[i] = table->entries[i];
- dump_table->entries[i].iseq = ibf_dump_iseq(dump, table->entries[i].iseq);
- }
- return (struct iseq_catch_table *)(VALUE)ibf_dump_write(dump, dump_table, byte_size);
+ int *iseq_indices = ALLOCA_N(int, table->size);
+ unsigned int i;
+
+ for (i=0; i<table->size; i++) {
+ iseq_indices[i] = ibf_dump_iseq(dump, table->entries[i].iseq);
+ }
+
+ const ibf_offset_t offset = ibf_dump_pos(dump);
+
+ for (i=0; i<table->size; i++) {
+ ibf_dump_write_small_value(dump, iseq_indices[i]);
+ ibf_dump_write_small_value(dump, table->entries[i].type);
+ ibf_dump_write_small_value(dump, table->entries[i].start);
+ ibf_dump_write_small_value(dump, table->entries[i].end);
+ ibf_dump_write_small_value(dump, table->entries[i].cont);
+ ibf_dump_write_small_value(dump, table->entries[i].sp);
+ }
+ return offset;
}
else {
- return NULL;
+ return ibf_dump_pos(dump);
}
}
-static struct iseq_catch_table *
-ibf_load_catch_table(const struct ibf_load *load, const struct rb_iseq_constant_body *body)
+static void
+ibf_load_catch_table(const struct ibf_load *load, ibf_offset_t catch_table_offset, unsigned int size, const rb_iseq_t *parent_iseq)
{
- if (body->catch_table) {
- struct iseq_catch_table *table;
- unsigned int i;
- unsigned int size;
- size = *(unsigned int *)(load->buff + IBF_OFFSET(body->catch_table));
- table = ibf_load_alloc(load, IBF_OFFSET(body->catch_table), iseq_catch_table_bytes(size));
- for (i=0; i<size; i++) {
- table->entries[i].iseq = ibf_load_iseq(load, table->entries[i].iseq);
- }
- return table;
+ if (size) {
+ struct iseq_catch_table *table = ruby_xcalloc(1, iseq_catch_table_bytes(size));
+ table->size = size;
+ ISEQ_BODY(parent_iseq)->catch_table = table;
+
+ ibf_offset_t reading_pos = catch_table_offset;
+
+ unsigned int i;
+ for (i=0; i<table->size; i++) {
+ int iseq_index = (int)ibf_load_small_value(load, &reading_pos);
+ table->entries[i].type = (enum rb_catch_type)ibf_load_small_value(load, &reading_pos);
+ table->entries[i].start = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ table->entries[i].end = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ table->entries[i].cont = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ table->entries[i].sp = (unsigned int)ibf_load_small_value(load, &reading_pos);
+
+ rb_iseq_t *catch_iseq = (rb_iseq_t *)ibf_load_iseq(load, (const rb_iseq_t *)(VALUE)iseq_index);
+ RB_OBJ_WRITE(parent_iseq, UNALIGNED_MEMBER_PTR(&table->entries[i], iseq), catch_iseq);
+ }
}
else {
- return NULL;
+ ISEQ_BODY(parent_iseq)->catch_table = NULL;
}
}
-static struct rb_call_info *
+static ibf_offset_t
ibf_dump_ci_entries(struct ibf_dump *dump, const rb_iseq_t *iseq)
{
- const unsigned int ci_size = iseq->body->ci_size;
- const unsigned int ci_kw_size = iseq->body->ci_kw_size;
- const struct rb_call_info *ci_entries = iseq->body->ci_entries;
- struct rb_call_info *dump_ci_entries;
- struct rb_call_info_with_kwarg *dump_ci_kw_entries;
- int byte_size = ci_size * sizeof(struct rb_call_info) +
- ci_kw_size * sizeof(struct rb_call_info_with_kwarg);
+ const struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq);
+ const unsigned int ci_size = body->ci_size;
+ const struct rb_call_data *cds = body->call_data;
+
+ ibf_offset_t offset = ibf_dump_pos(dump);
+
unsigned int i;
- dump_ci_entries = (struct rb_call_info *)ALLOCA_N(char, byte_size);
- dump_ci_kw_entries = (struct rb_call_info_with_kwarg *)&dump_ci_entries[ci_size];
- memcpy(dump_ci_entries, ci_entries, byte_size);
+ for (i = 0; i < ci_size; i++) {
+ const struct rb_callinfo *ci = cds[i].ci;
+ if (ci != NULL) {
+ ibf_dump_write_small_value(dump, ibf_dump_id(dump, vm_ci_mid(ci)));
+ ibf_dump_write_small_value(dump, vm_ci_flag(ci));
+ ibf_dump_write_small_value(dump, vm_ci_argc(ci));
+
+ const struct rb_callinfo_kwarg *kwarg = vm_ci_kwarg(ci);
+ if (kwarg) {
+ int len = kwarg->keyword_len;
+ ibf_dump_write_small_value(dump, len);
+ for (int j=0; j<len; j++) {
+ VALUE keyword = ibf_dump_object(dump, kwarg->keywords[j]);
+ ibf_dump_write_small_value(dump, keyword);
+ }
+ }
+ else {
+ ibf_dump_write_small_value(dump, 0);
+ }
+ }
+ else {
+ // TODO: truncate NULL ci from call_data.
+ ibf_dump_write_small_value(dump, (VALUE)-1);
+ }
+ }
+
+ return offset;
+}
+
+struct outer_variable_pair {
+ ID id;
+ VALUE name;
+ VALUE val;
+};
+
+struct outer_variable_list {
+ size_t num;
+ struct outer_variable_pair pairs[1];
+};
- for (i=0; i<ci_size; i++) { /* conver ID for each ci */
- dump_ci_entries[i].mid = ibf_dump_id(dump, dump_ci_entries[i].mid);
- }
- for (i=0; i<ci_kw_size; i++) {
- const struct rb_call_info_kw_arg *kw_arg = dump_ci_kw_entries[i].kw_arg;
- int j;
- VALUE *keywords = ALLOCA_N(VALUE, kw_arg->keyword_len);
- for (j=0; j<kw_arg->keyword_len; j++) {
- keywords[j] = (VALUE)ibf_dump_object(dump, kw_arg->keywords[j]); /* kw_arg->keywords[n] is Symbol */
- }
- dump_ci_kw_entries[i].kw_arg = (struct rb_call_info_kw_arg *)(VALUE)ibf_dump_write(dump, &kw_arg->keyword_len, sizeof(int));
- ibf_dump_write(dump, keywords, sizeof(VALUE) * kw_arg->keyword_len);
+static enum rb_id_table_iterator_result
+store_outer_variable(ID id, VALUE val, void *dump)
+{
+ struct outer_variable_list *ovlist = dump;
+ struct outer_variable_pair *pair = &ovlist->pairs[ovlist->num++];
+ pair->id = id;
+ pair->name = rb_id2str(id);
+ pair->val = val;
+ return ID_TABLE_CONTINUE;
+}
- dump_ci_kw_entries[i].ci.mid = ibf_dump_id(dump, dump_ci_kw_entries[i].ci.mid);
+static int
+outer_variable_cmp(const void *a, const void *b, void *arg)
+{
+ const struct outer_variable_pair *ap = (const struct outer_variable_pair *)a;
+ const struct outer_variable_pair *bp = (const struct outer_variable_pair *)b;
+
+ if (!ap->name) {
+ return -1;
+ }
+ else if (!bp->name) {
+ return 1;
}
- return (struct rb_call_info *)(VALUE)ibf_dump_write(dump, dump_ci_entries, byte_size);
+
+ return rb_str_cmp(ap->name, bp->name);
}
-static struct rb_call_info *
-ibf_load_ci_entries(const struct ibf_load *load, const struct rb_iseq_constant_body *body)
+static ibf_offset_t
+ibf_dump_outer_variables(struct ibf_dump *dump, const rb_iseq_t *iseq)
+{
+ struct rb_id_table * ovs = ISEQ_BODY(iseq)->outer_variables;
+
+ ibf_offset_t offset = ibf_dump_pos(dump);
+
+ size_t size = ovs ? rb_id_table_size(ovs) : 0;
+ ibf_dump_write_small_value(dump, (VALUE)size);
+ if (size > 0) {
+ VALUE buff;
+ size_t buffsize =
+ rb_size_mul_add_or_raise(sizeof(struct outer_variable_pair), size,
+ offsetof(struct outer_variable_list, pairs),
+ rb_eArgError);
+ struct outer_variable_list *ovlist = RB_ALLOCV(buff, buffsize);
+ ovlist->num = 0;
+ rb_id_table_foreach(ovs, store_outer_variable, ovlist);
+ ruby_qsort(ovlist->pairs, size, sizeof(struct outer_variable_pair), outer_variable_cmp, NULL);
+ for (size_t i = 0; i < size; ++i) {
+ ID id = ovlist->pairs[i].id;
+ ID val = ovlist->pairs[i].val;
+ ibf_dump_write_small_value(dump, ibf_dump_id(dump, id));
+ ibf_dump_write_small_value(dump, val);
+ }
+ }
+
+ return offset;
+}
+
+/* note that we dump out rb_call_info but load back rb_call_data */
+static void
+ibf_load_ci_entries(const struct ibf_load *load,
+ ibf_offset_t ci_entries_offset,
+ unsigned int ci_size,
+ struct rb_call_data **cd_ptr)
{
+ if (!ci_size) {
+ *cd_ptr = NULL;
+ return;
+ }
+
+ ibf_offset_t reading_pos = ci_entries_offset;
+
unsigned int i;
- const unsigned int ci_size = body->ci_size;
- const unsigned int ci_kw_size = body->ci_kw_size;
- struct rb_call_info *ci_entries = ibf_load_alloc(load, IBF_OFFSET(body->ci_entries),
- sizeof(struct rb_call_info) * body->ci_size +
- sizeof(struct rb_call_info_with_kwarg) * body->ci_kw_size);
- struct rb_call_info_with_kwarg *ci_kw_entries = (struct rb_call_info_with_kwarg *)&ci_entries[ci_size];
- for (i=0; i<ci_size; i++) {
- ci_entries[i].mid = ibf_load_id(load, ci_entries[i].mid);
+ struct rb_call_data *cds = ZALLOC_N(struct rb_call_data, ci_size);
+ *cd_ptr = cds;
+
+ for (i = 0; i < ci_size; i++) {
+ VALUE mid_index = ibf_load_small_value(load, &reading_pos);
+ if (mid_index != (VALUE)-1) {
+ ID mid = ibf_load_id(load, mid_index);
+ unsigned int flag = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ unsigned int argc = (unsigned int)ibf_load_small_value(load, &reading_pos);
+
+ struct rb_callinfo_kwarg *kwarg = NULL;
+ int kwlen = (int)ibf_load_small_value(load, &reading_pos);
+ if (kwlen > 0) {
+ kwarg = rb_xmalloc_mul_add(kwlen, sizeof(VALUE), sizeof(struct rb_callinfo_kwarg));
+ kwarg->references = 0;
+ kwarg->keyword_len = kwlen;
+ for (int j=0; j<kwlen; j++) {
+ VALUE keyword = ibf_load_small_value(load, &reading_pos);
+ kwarg->keywords[j] = ibf_load_object(load, keyword);
+ }
+ }
+
+ cds[i].ci = vm_ci_new(mid, flag, argc, kwarg);
+ RB_OBJ_WRITTEN(load->iseq, Qundef, cds[i].ci);
+ cds[i].cc = vm_cc_empty();
+ }
+ else {
+ // NULL ci
+ cds[i].ci = NULL;
+ cds[i].cc = NULL;
+ }
+ }
+}
+
+static struct rb_id_table *
+ibf_load_outer_variables(const struct ibf_load * load, ibf_offset_t outer_variables_offset)
+{
+ ibf_offset_t reading_pos = outer_variables_offset;
+
+ struct rb_id_table *tbl = NULL;
+
+ size_t table_size = (size_t)ibf_load_small_value(load, &reading_pos);
+
+ if (table_size > 0) {
+ tbl = rb_id_table_create(table_size);
}
- for (i=0; i<ci_kw_size; i++) {
- int j;
- ibf_offset_t kw_arg_offset = IBF_OFFSET(ci_kw_entries[i].kw_arg);
- const int keyword_len = *(int *)(load->buff + kw_arg_offset);
- const VALUE *keywords = (VALUE *)(load->buff + kw_arg_offset + sizeof(int));
- struct rb_call_info_kw_arg *kw_arg = ruby_xmalloc(sizeof(struct rb_call_info_kw_arg) + sizeof(VALUE) * (keyword_len - 1));
- kw_arg->keyword_len = keyword_len;
- for (j=0; j<kw_arg->keyword_len; j++) {
- kw_arg->keywords[j] = (VALUE)ibf_load_object(load, keywords[j]);
- }
- ci_kw_entries[i].kw_arg = kw_arg;
- ci_kw_entries[i].ci.mid = ibf_load_id(load, ci_kw_entries[i].ci.mid);
+
+ for (size_t i = 0; i < table_size; i++) {
+ ID key = ibf_load_id(load, (ID)ibf_load_small_value(load, &reading_pos));
+ VALUE value = ibf_load_small_value(load, &reading_pos);
+ if (!key) key = rb_make_temporary_id(i);
+ rb_id_table_insert(tbl, key, value);
}
- return ci_entries;
+ return tbl;
}
static ibf_offset_t
ibf_dump_iseq_each(struct ibf_dump *dump, const rb_iseq_t *iseq)
{
- struct rb_iseq_constant_body dump_body;
- dump_body = *iseq->body;
+ RUBY_ASSERT(dump->current_buffer == &dump->global_buffer);
+
+ unsigned int *positions;
+
+ const struct rb_iseq_constant_body *body = ISEQ_BODY(iseq);
- dump_body.location.path = ibf_dump_object(dump, dump_body.location.path);
- dump_body.location.absolute_path = ibf_dump_object(dump, dump_body.location.absolute_path);
- dump_body.location.base_label = ibf_dump_object(dump, dump_body.location.base_label);
- dump_body.location.label = ibf_dump_object(dump, dump_body.location.label);
+ const VALUE location_pathobj_index = ibf_dump_object(dump, body->location.pathobj); /* TODO: freeze */
+ const VALUE location_base_label_index = ibf_dump_object(dump, body->location.base_label);
+ const VALUE location_label_index = ibf_dump_object(dump, body->location.label);
- dump_body.iseq_encoded = ibf_dump_code(dump, iseq);
- dump_body.param.opt_table = ibf_dump_param_opt_table(dump, iseq);
- dump_body.param.keyword = ibf_dump_param_keyword(dump, iseq);
- dump_body.line_info_table = ibf_dump_line_info_table(dump, iseq);
- dump_body.local_table = ibf_dump_local_table(dump, iseq);
- dump_body.catch_table = ibf_dump_catch_table(dump, iseq);
- dump_body.parent_iseq = ibf_dump_iseq(dump, iseq->body->parent_iseq);
- dump_body.local_iseq = ibf_dump_iseq(dump, iseq->body->local_iseq);
- dump_body.is_entries = NULL;
- dump_body.ci_entries = ibf_dump_ci_entries(dump, iseq);
- dump_body.cc_entries = NULL;
- dump_body.mark_ary = ISEQ_FLIP_CNT(iseq);
+#if IBF_ISEQ_ENABLE_LOCAL_BUFFER
+ ibf_offset_t iseq_start = ibf_dump_pos(dump);
- return ibf_dump_write(dump, &dump_body, sizeof(dump_body));
+ struct ibf_dump_buffer *saved_buffer = dump->current_buffer;
+ struct ibf_dump_buffer buffer;
+ buffer.str = rb_str_new(0, 0);
+ buffer.obj_table = ibf_dump_object_table_new();
+ dump->current_buffer = &buffer;
+#endif
+
+ const ibf_offset_t bytecode_offset = ibf_dump_code(dump, iseq);
+ const ibf_offset_t bytecode_size = ibf_dump_pos(dump) - bytecode_offset;
+ const ibf_offset_t param_opt_table_offset = ibf_dump_param_opt_table(dump, iseq);
+ const ibf_offset_t param_keyword_offset = ibf_dump_param_keyword(dump, iseq);
+ const ibf_offset_t insns_info_body_offset = ibf_dump_insns_info_body(dump, iseq);
+
+ positions = rb_iseq_insns_info_decode_positions(ISEQ_BODY(iseq));
+ const ibf_offset_t insns_info_positions_offset = ibf_dump_insns_info_positions(dump, positions, body->insns_info.size);
+ ruby_xfree(positions);
+
+ const ibf_offset_t local_table_offset = ibf_dump_local_table(dump, iseq);
+ const ibf_offset_t lvar_states_offset = ibf_dump_lvar_states(dump, iseq);
+ const unsigned int catch_table_size = body->catch_table ? body->catch_table->size : 0;
+ const ibf_offset_t catch_table_offset = ibf_dump_catch_table(dump, iseq);
+ const int parent_iseq_index = ibf_dump_iseq(dump, ISEQ_BODY(iseq)->parent_iseq);
+ const int local_iseq_index = ibf_dump_iseq(dump, ISEQ_BODY(iseq)->local_iseq);
+ const int mandatory_only_iseq_index = ibf_dump_iseq(dump, ISEQ_BODY(iseq)->mandatory_only_iseq);
+ const ibf_offset_t ci_entries_offset = ibf_dump_ci_entries(dump, iseq);
+ const ibf_offset_t outer_variables_offset = ibf_dump_outer_variables(dump, iseq);
+
+#if IBF_ISEQ_ENABLE_LOCAL_BUFFER
+ ibf_offset_t local_obj_list_offset;
+ unsigned int local_obj_list_size;
+
+ ibf_dump_object_list(dump, &local_obj_list_offset, &local_obj_list_size);
+#endif
+
+ ibf_offset_t body_offset = ibf_dump_pos(dump);
+
+ /* dump the constant body */
+ unsigned int param_flags =
+ (body->param.flags.has_lead << 0) |
+ (body->param.flags.has_opt << 1) |
+ (body->param.flags.has_rest << 2) |
+ (body->param.flags.has_post << 3) |
+ (body->param.flags.has_kw << 4) |
+ (body->param.flags.has_kwrest << 5) |
+ (body->param.flags.has_block << 6) |
+ (body->param.flags.ambiguous_param0 << 7) |
+ (body->param.flags.accepts_no_kwarg << 8) |
+ (body->param.flags.ruby2_keywords << 9) |
+ (body->param.flags.anon_rest << 10) |
+ (body->param.flags.anon_kwrest << 11) |
+ (body->param.flags.use_block << 12) |
+ (body->param.flags.forwardable << 13) ;
+
+#if IBF_ISEQ_ENABLE_LOCAL_BUFFER
+# define IBF_BODY_OFFSET(x) (x)
+#else
+# define IBF_BODY_OFFSET(x) (body_offset - (x))
+#endif
+
+ ibf_dump_write_small_value(dump, body->type);
+ ibf_dump_write_small_value(dump, body->iseq_size);
+ ibf_dump_write_small_value(dump, IBF_BODY_OFFSET(bytecode_offset));
+ ibf_dump_write_small_value(dump, bytecode_size);
+ ibf_dump_write_small_value(dump, param_flags);
+ ibf_dump_write_small_value(dump, body->param.size);
+ ibf_dump_write_small_value(dump, body->param.lead_num);
+ ibf_dump_write_small_value(dump, body->param.opt_num);
+ ibf_dump_write_small_value(dump, body->param.rest_start);
+ ibf_dump_write_small_value(dump, body->param.post_start);
+ ibf_dump_write_small_value(dump, body->param.post_num);
+ ibf_dump_write_small_value(dump, body->param.block_start);
+ ibf_dump_write_small_value(dump, IBF_BODY_OFFSET(param_opt_table_offset));
+ ibf_dump_write_small_value(dump, param_keyword_offset);
+ ibf_dump_write_small_value(dump, location_pathobj_index);
+ ibf_dump_write_small_value(dump, location_base_label_index);
+ ibf_dump_write_small_value(dump, location_label_index);
+ ibf_dump_write_small_value(dump, body->location.first_lineno);
+ ibf_dump_write_small_value(dump, body->location.node_id);
+ ibf_dump_write_small_value(dump, body->location.code_location.beg_pos.lineno);
+ ibf_dump_write_small_value(dump, body->location.code_location.beg_pos.column);
+ ibf_dump_write_small_value(dump, body->location.code_location.end_pos.lineno);
+ ibf_dump_write_small_value(dump, body->location.code_location.end_pos.column);
+ ibf_dump_write_small_value(dump, IBF_BODY_OFFSET(insns_info_body_offset));
+ ibf_dump_write_small_value(dump, IBF_BODY_OFFSET(insns_info_positions_offset));
+ ibf_dump_write_small_value(dump, body->insns_info.size);
+ ibf_dump_write_small_value(dump, IBF_BODY_OFFSET(local_table_offset));
+ ibf_dump_write_small_value(dump, IBF_BODY_OFFSET(lvar_states_offset));
+ ibf_dump_write_small_value(dump, catch_table_size);
+ ibf_dump_write_small_value(dump, IBF_BODY_OFFSET(catch_table_offset));
+ ibf_dump_write_small_value(dump, parent_iseq_index);
+ ibf_dump_write_small_value(dump, local_iseq_index);
+ ibf_dump_write_small_value(dump, mandatory_only_iseq_index);
+ ibf_dump_write_small_value(dump, IBF_BODY_OFFSET(ci_entries_offset));
+ ibf_dump_write_small_value(dump, IBF_BODY_OFFSET(outer_variables_offset));
+ ibf_dump_write_small_value(dump, body->variable.flip_count);
+ ibf_dump_write_small_value(dump, body->local_table_size);
+ ibf_dump_write_small_value(dump, body->ivc_size);
+ ibf_dump_write_small_value(dump, body->icvarc_size);
+ ibf_dump_write_small_value(dump, body->ise_size);
+ ibf_dump_write_small_value(dump, body->ic_size);
+ ibf_dump_write_small_value(dump, body->ci_size);
+ ibf_dump_write_small_value(dump, body->stack_max);
+ ibf_dump_write_small_value(dump, body->builtin_attrs);
+ ibf_dump_write_small_value(dump, body->prism ? 1 : 0);
+
+#undef IBF_BODY_OFFSET
+
+#if IBF_ISEQ_ENABLE_LOCAL_BUFFER
+ ibf_offset_t iseq_length_bytes = ibf_dump_pos(dump);
+
+ dump->current_buffer = saved_buffer;
+ ibf_dump_write(dump, RSTRING_PTR(buffer.str), iseq_length_bytes);
+
+ ibf_offset_t offset = ibf_dump_pos(dump);
+ ibf_dump_write_small_value(dump, iseq_start);
+ ibf_dump_write_small_value(dump, iseq_length_bytes);
+ ibf_dump_write_small_value(dump, body_offset);
+
+ ibf_dump_write_small_value(dump, local_obj_list_offset);
+ ibf_dump_write_small_value(dump, local_obj_list_size);
+
+ st_free_table(buffer.obj_table); // TODO: this leaks in case of exception
+
+ return offset;
+#else
+ return body_offset;
+#endif
}
static VALUE
@@ -7408,110 +13735,269 @@ ibf_load_location_str(const struct ibf_load *load, VALUE str_index)
{
VALUE str = ibf_load_object(load, str_index);
if (str != Qnil) {
- str = rb_fstring(str);
+ str = rb_fstring(str);
}
return str;
}
static void
-ibf_load_iseq_each(const struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t offset)
-{
- struct rb_iseq_constant_body *load_body = iseq->body = ZALLOC(struct rb_iseq_constant_body);
- const struct rb_iseq_constant_body *body = (struct rb_iseq_constant_body *)(load->buff + offset);
-
- /* memcpy(load_body, load->buff + offset, sizeof(*load_body)); */
- load_body->type = body->type;
- load_body->stack_max = body->stack_max;
- load_body->local_size = body->local_size;
- load_body->iseq_size = body->iseq_size;
- load_body->param = body->param;
- load_body->local_table_size = body->local_table_size;
- load_body->is_size = body->is_size;
- load_body->ci_size = body->ci_size;
- load_body->ci_kw_size = body->ci_kw_size;
- load_body->line_info_size = body->line_info_size;
-
- RB_OBJ_WRITE(iseq, &load_body->mark_ary, iseq_mark_ary_create((int)body->mark_ary));
-
- RB_OBJ_WRITE(iseq, &load_body->location.path, ibf_load_location_str(load, body->location.path));
- RB_OBJ_WRITE(iseq, &load_body->location.absolute_path, ibf_load_location_str(load, body->location.absolute_path));
- RB_OBJ_WRITE(iseq, &load_body->location.base_label, ibf_load_location_str(load, body->location.base_label));
- RB_OBJ_WRITE(iseq, &load_body->location.label, ibf_load_location_str(load, body->location.label));
- load_body->location.first_lineno = body->location.first_lineno;
-
- load_body->is_entries = ZALLOC_N(union iseq_inline_storage_entry, body->is_size);
- load_body->ci_entries = ibf_load_ci_entries(load, body);
- load_body->cc_entries = ZALLOC_N(struct rb_call_cache, body->ci_size + body->ci_kw_size);
- load_body->param.opt_table = ibf_load_param_opt_table(load, body);
- load_body->param.keyword = ibf_load_param_keyword(load, body);
- load_body->line_info_table = ibf_load_line_info_table(load, body);
- load_body->local_table = ibf_load_local_table(load, body);
- load_body->catch_table = ibf_load_catch_table(load, body);
- load_body->parent_iseq = ibf_load_iseq(load, body->parent_iseq);
- load_body->local_iseq = ibf_load_iseq(load, body->local_iseq);
-
- load_body->iseq_encoded = ibf_load_code(load, iseq, body);
+ibf_load_iseq_each(struct ibf_load *load, rb_iseq_t *iseq, ibf_offset_t offset)
+{
+ struct rb_iseq_constant_body *load_body = ISEQ_BODY(iseq) = rb_iseq_constant_body_alloc();
- rb_iseq_translate_threaded_code(iseq);
-}
+ ibf_offset_t reading_pos = offset;
+#if IBF_ISEQ_ENABLE_LOCAL_BUFFER
+ struct ibf_load_buffer *saved_buffer = load->current_buffer;
+ load->current_buffer = &load->global_buffer;
-static void
-ibf_dump_iseq_list(struct ibf_dump *dump, struct ibf_header *header)
-{
- const long size = RARRAY_LEN(dump->iseq_list);
- ibf_offset_t *list = ALLOCA_N(ibf_offset_t, size);
- long i;
+ const ibf_offset_t iseq_start = (ibf_offset_t)ibf_load_small_value(load, &reading_pos);
+ const ibf_offset_t iseq_length_bytes = (ibf_offset_t)ibf_load_small_value(load, &reading_pos);
+ const ibf_offset_t body_offset = (ibf_offset_t)ibf_load_small_value(load, &reading_pos);
- for (i=0; i<size; i++) {
- list[i] = (ibf_offset_t)NUM2LONG(rb_ary_entry(dump->iseq_list, i));
+ struct ibf_load_buffer buffer;
+ buffer.buff = load->global_buffer.buff + iseq_start;
+ buffer.size = iseq_length_bytes;
+ buffer.obj_list_offset = (ibf_offset_t)ibf_load_small_value(load, &reading_pos);
+ buffer.obj_list_size = (ibf_offset_t)ibf_load_small_value(load, &reading_pos);
+ buffer.obj_list = pinned_list_new(buffer.obj_list_size);
+
+ load->current_buffer = &buffer;
+ reading_pos = body_offset;
+#endif
+
+#if IBF_ISEQ_ENABLE_LOCAL_BUFFER
+# define IBF_BODY_OFFSET(x) (x)
+#else
+# define IBF_BODY_OFFSET(x) (offset - (x))
+#endif
+
+ const unsigned int type = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ const unsigned int iseq_size = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ const ibf_offset_t bytecode_offset = (ibf_offset_t)IBF_BODY_OFFSET(ibf_load_small_value(load, &reading_pos));
+ const ibf_offset_t bytecode_size = (ibf_offset_t)ibf_load_small_value(load, &reading_pos);
+ const unsigned int param_flags = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ const unsigned int param_size = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ const int param_lead_num = (int)ibf_load_small_value(load, &reading_pos);
+ const int param_opt_num = (int)ibf_load_small_value(load, &reading_pos);
+ const int param_rest_start = (int)ibf_load_small_value(load, &reading_pos);
+ const int param_post_start = (int)ibf_load_small_value(load, &reading_pos);
+ const int param_post_num = (int)ibf_load_small_value(load, &reading_pos);
+ const int param_block_start = (int)ibf_load_small_value(load, &reading_pos);
+ const ibf_offset_t param_opt_table_offset = (ibf_offset_t)IBF_BODY_OFFSET(ibf_load_small_value(load, &reading_pos));
+ const ibf_offset_t param_keyword_offset = (ibf_offset_t)ibf_load_small_value(load, &reading_pos);
+ const VALUE location_pathobj_index = ibf_load_small_value(load, &reading_pos);
+ const VALUE location_base_label_index = ibf_load_small_value(load, &reading_pos);
+ const VALUE location_label_index = ibf_load_small_value(load, &reading_pos);
+ const int location_first_lineno = (int)ibf_load_small_value(load, &reading_pos);
+ const int location_node_id = (int)ibf_load_small_value(load, &reading_pos);
+ const int location_code_location_beg_pos_lineno = (int)ibf_load_small_value(load, &reading_pos);
+ const int location_code_location_beg_pos_column = (int)ibf_load_small_value(load, &reading_pos);
+ const int location_code_location_end_pos_lineno = (int)ibf_load_small_value(load, &reading_pos);
+ const int location_code_location_end_pos_column = (int)ibf_load_small_value(load, &reading_pos);
+ const ibf_offset_t insns_info_body_offset = (ibf_offset_t)IBF_BODY_OFFSET(ibf_load_small_value(load, &reading_pos));
+ const ibf_offset_t insns_info_positions_offset = (ibf_offset_t)IBF_BODY_OFFSET(ibf_load_small_value(load, &reading_pos));
+ const unsigned int insns_info_size = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ const ibf_offset_t local_table_offset = (ibf_offset_t)IBF_BODY_OFFSET(ibf_load_small_value(load, &reading_pos));
+ const ibf_offset_t lvar_states_offset = (ibf_offset_t)IBF_BODY_OFFSET(ibf_load_small_value(load, &reading_pos));
+ const unsigned int catch_table_size = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ const ibf_offset_t catch_table_offset = (ibf_offset_t)IBF_BODY_OFFSET(ibf_load_small_value(load, &reading_pos));
+ const int parent_iseq_index = (int)ibf_load_small_value(load, &reading_pos);
+ const int local_iseq_index = (int)ibf_load_small_value(load, &reading_pos);
+ const int mandatory_only_iseq_index = (int)ibf_load_small_value(load, &reading_pos);
+ const ibf_offset_t ci_entries_offset = (ibf_offset_t)IBF_BODY_OFFSET(ibf_load_small_value(load, &reading_pos));
+ const ibf_offset_t outer_variables_offset = (ibf_offset_t)IBF_BODY_OFFSET(ibf_load_small_value(load, &reading_pos));
+ const rb_snum_t variable_flip_count = (rb_snum_t)ibf_load_small_value(load, &reading_pos);
+ const unsigned int local_table_size = (unsigned int)ibf_load_small_value(load, &reading_pos);
+
+ const unsigned int ivc_size = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ const unsigned int icvarc_size = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ const unsigned int ise_size = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ const unsigned int ic_size = (unsigned int)ibf_load_small_value(load, &reading_pos);
+
+ const unsigned int ci_size = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ const unsigned int stack_max = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ const unsigned int builtin_attrs = (unsigned int)ibf_load_small_value(load, &reading_pos);
+ const bool prism = (bool)ibf_load_small_value(load, &reading_pos);
+
+ // setup fname and dummy frame
+ VALUE path = ibf_load_object(load, location_pathobj_index);
+ {
+ VALUE realpath = Qnil;
+
+ if (RB_TYPE_P(path, T_STRING)) {
+ realpath = path = rb_fstring(path);
+ }
+ else if (RB_TYPE_P(path, T_ARRAY)) {
+ VALUE pathobj = path;
+ if (RARRAY_LEN(pathobj) != 2) {
+ rb_raise(rb_eRuntimeError, "path object size mismatch");
+ }
+ path = rb_fstring(RARRAY_AREF(pathobj, 0));
+ realpath = RARRAY_AREF(pathobj, 1);
+ if (!NIL_P(realpath)) {
+ if (!RB_TYPE_P(realpath, T_STRING)) {
+ rb_raise(rb_eArgError, "unexpected realpath %"PRIxVALUE
+ "(%x), path=%+"PRIsVALUE,
+ realpath, TYPE(realpath), path);
+ }
+ realpath = rb_fstring(realpath);
+ }
+ }
+ else {
+ rb_raise(rb_eRuntimeError, "unexpected path object");
+ }
+ rb_iseq_pathobj_set(iseq, path, realpath);
+ }
+
+ // push dummy frame
+ rb_execution_context_t *ec = GET_EC();
+ VALUE dummy_frame = rb_vm_push_frame_fname(ec, path);
+
+#undef IBF_BODY_OFFSET
+
+ load_body->type = type;
+ load_body->stack_max = stack_max;
+ load_body->param.flags.has_lead = (param_flags >> 0) & 1;
+ load_body->param.flags.has_opt = (param_flags >> 1) & 1;
+ load_body->param.flags.has_rest = (param_flags >> 2) & 1;
+ load_body->param.flags.has_post = (param_flags >> 3) & 1;
+ load_body->param.flags.has_kw = FALSE;
+ load_body->param.flags.has_kwrest = (param_flags >> 5) & 1;
+ load_body->param.flags.has_block = (param_flags >> 6) & 1;
+ load_body->param.flags.ambiguous_param0 = (param_flags >> 7) & 1;
+ load_body->param.flags.accepts_no_kwarg = (param_flags >> 8) & 1;
+ load_body->param.flags.ruby2_keywords = (param_flags >> 9) & 1;
+ load_body->param.flags.anon_rest = (param_flags >> 10) & 1;
+ load_body->param.flags.anon_kwrest = (param_flags >> 11) & 1;
+ load_body->param.flags.use_block = (param_flags >> 12) & 1;
+ load_body->param.flags.forwardable = (param_flags >> 13) & 1;
+ load_body->param.size = param_size;
+ load_body->param.lead_num = param_lead_num;
+ load_body->param.opt_num = param_opt_num;
+ load_body->param.rest_start = param_rest_start;
+ load_body->param.post_start = param_post_start;
+ load_body->param.post_num = param_post_num;
+ load_body->param.block_start = param_block_start;
+ load_body->local_table_size = local_table_size;
+ load_body->ci_size = ci_size;
+ load_body->insns_info.size = insns_info_size;
+
+ ISEQ_COVERAGE_SET(iseq, Qnil);
+ ISEQ_ORIGINAL_ISEQ_CLEAR(iseq);
+ load_body->variable.flip_count = variable_flip_count;
+ load_body->variable.script_lines = Qnil;
+
+ load_body->location.first_lineno = location_first_lineno;
+ load_body->location.node_id = location_node_id;
+ load_body->location.code_location.beg_pos.lineno = location_code_location_beg_pos_lineno;
+ load_body->location.code_location.beg_pos.column = location_code_location_beg_pos_column;
+ load_body->location.code_location.end_pos.lineno = location_code_location_end_pos_lineno;
+ load_body->location.code_location.end_pos.column = location_code_location_end_pos_column;
+ load_body->builtin_attrs = builtin_attrs;
+ load_body->prism = prism;
+
+ load_body->ivc_size = ivc_size;
+ load_body->icvarc_size = icvarc_size;
+ load_body->ise_size = ise_size;
+ load_body->ic_size = ic_size;
+
+ if (ISEQ_IS_SIZE(load_body)) {
+ load_body->is_entries = ZALLOC_N(union iseq_inline_storage_entry, ISEQ_IS_SIZE(load_body));
}
+ else {
+ load_body->is_entries = NULL;
+ }
+ ibf_load_ci_entries(load, ci_entries_offset, ci_size, &load_body->call_data);
+ load_body->outer_variables = ibf_load_outer_variables(load, outer_variables_offset);
+ load_body->param.opt_table = ibf_load_param_opt_table(load, param_opt_table_offset, param_opt_num);
+ load_body->param.keyword = ibf_load_param_keyword(load, param_keyword_offset);
+ load_body->param.flags.has_kw = (param_flags >> 4) & 1;
+ load_body->insns_info.body = ibf_load_insns_info_body(load, insns_info_body_offset, insns_info_size);
+ load_body->insns_info.positions = ibf_load_insns_info_positions(load, insns_info_positions_offset, insns_info_size);
+ load_body->local_table = ibf_load_local_table(load, local_table_offset, local_table_size);
+ load_body->lvar_states = ibf_load_lvar_states(load, lvar_states_offset, local_table_size, load_body->local_table);
+ ibf_load_catch_table(load, catch_table_offset, catch_table_size, iseq);
+
+ const rb_iseq_t *parent_iseq = ibf_load_iseq(load, (const rb_iseq_t *)(VALUE)parent_iseq_index);
+ const rb_iseq_t *local_iseq = ibf_load_iseq(load, (const rb_iseq_t *)(VALUE)local_iseq_index);
+ const rb_iseq_t *mandatory_only_iseq = ibf_load_iseq(load, (const rb_iseq_t *)(VALUE)mandatory_only_iseq_index);
+
+ RB_OBJ_WRITE(iseq, &load_body->parent_iseq, parent_iseq);
+ RB_OBJ_WRITE(iseq, &load_body->local_iseq, local_iseq);
+ RB_OBJ_WRITE(iseq, &load_body->mandatory_only_iseq, mandatory_only_iseq);
+
+ // This must be done after the local table is loaded.
+ if (load_body->param.keyword != NULL) {
+ RUBY_ASSERT(load_body->local_table);
+ struct rb_iseq_param_keyword *keyword = (struct rb_iseq_param_keyword *) load_body->param.keyword;
+ keyword->table = &load_body->local_table[keyword->bits_start - keyword->num];
+ }
+
+ ibf_load_code(load, iseq, bytecode_offset, bytecode_size, iseq_size);
+#if VM_INSN_INFO_TABLE_IMPL == 2
+ rb_iseq_insns_info_encode_positions(iseq);
+#endif
- header->iseq_list_offset = ibf_dump_write(dump, list, sizeof(ibf_offset_t) * size);
- header->iseq_list_size = (unsigned int)size;
+ rb_iseq_translate_threaded_code(iseq);
+
+#if IBF_ISEQ_ENABLE_LOCAL_BUFFER
+ load->current_buffer = &load->global_buffer;
+#endif
+
+ RB_OBJ_WRITE(iseq, &load_body->location.base_label, ibf_load_location_str(load, location_base_label_index));
+ RB_OBJ_WRITE(iseq, &load_body->location.label, ibf_load_location_str(load, location_label_index));
+
+#if IBF_ISEQ_ENABLE_LOCAL_BUFFER
+ load->current_buffer = saved_buffer;
+#endif
+ verify_call_cache(iseq);
+
+ RB_GC_GUARD(dummy_frame);
+ rb_vm_pop_frame_no_int(ec);
}
-struct ibf_dump_id_list_i_arg {
+struct ibf_dump_iseq_list_arg
+{
struct ibf_dump *dump;
- long *list;
- int current_i;
+ VALUE offset_list;
};
static int
-ibf_dump_id_list_i(st_data_t key, st_data_t val, st_data_t ptr)
+ibf_dump_iseq_list_i(st_data_t key, st_data_t val, st_data_t ptr)
{
- struct ibf_dump_id_list_i_arg *arg = (struct ibf_dump_id_list_i_arg *)ptr;
- int i = (int)val;
- ID id = (ID)key;
- assert(arg->current_i == i);
- arg->current_i++;
+ const rb_iseq_t *iseq = (const rb_iseq_t *)key;
+ struct ibf_dump_iseq_list_arg *args = (struct ibf_dump_iseq_list_arg *)ptr;
- if (rb_id2name(id)) {
- arg->list[i] = (long)ibf_dump_object(arg->dump, rb_id2str(id));
- }
- else {
- arg->list[i] = 0;
- }
+ ibf_offset_t offset = ibf_dump_iseq_each(args->dump, iseq);
+ rb_ary_push(args->offset_list, UINT2NUM(offset));
return ST_CONTINUE;
}
static void
-ibf_dump_id_list(struct ibf_dump *dump, struct ibf_header *header)
+ibf_dump_iseq_list(struct ibf_dump *dump, struct ibf_header *header)
{
- const long size = dump->id_table->num_entries;
- struct ibf_dump_id_list_i_arg arg;
- arg.list = ALLOCA_N(long, size);
- arg.dump = dump;
- arg.current_i = 0;
+ VALUE offset_list = rb_ary_hidden_new(dump->iseq_table->num_entries);
- st_foreach(dump->id_table, ibf_dump_id_list_i, (st_data_t)&arg);
+ struct ibf_dump_iseq_list_arg args;
+ args.dump = dump;
+ args.offset_list = offset_list;
- header->id_list_offset = ibf_dump_write(dump, arg.list, sizeof(long) * size);
- header->id_list_size = (unsigned int)size;
-}
+ st_foreach(dump->iseq_table, ibf_dump_iseq_list_i, (st_data_t)&args);
-#define IBF_OBJECT_INTERNAL FL_PROMOTED0
+ st_index_t i;
+ st_index_t size = dump->iseq_table->num_entries;
+ ibf_offset_t *offsets = ALLOCA_N(ibf_offset_t, size);
+
+ for (i = 0; i < size; i++) {
+ offsets[i] = NUM2UINT(RARRAY_AREF(offset_list, i));
+ }
+
+ ibf_dump_align(dump, sizeof(ibf_offset_t));
+ header->iseq_list_offset = ibf_dump_write(dump, offsets, sizeof(ibf_offset_t) * size);
+ header->iseq_list_size = (unsigned int)size;
+}
/*
* Binary format
@@ -7529,13 +14015,10 @@ struct ibf_object_header {
enum ibf_object_class_index {
IBF_OBJECT_CLASS_OBJECT,
IBF_OBJECT_CLASS_ARRAY,
- IBF_OBJECT_CLASS_STANDARD_ERROR
-};
-
-struct ibf_object_string {
- long encindex;
- long len;
- char ptr[1];
+ IBF_OBJECT_CLASS_STANDARD_ERROR,
+ IBF_OBJECT_CLASS_NO_MATCHING_PATTERN_ERROR,
+ IBF_OBJECT_CLASS_TYPE_ERROR,
+ IBF_OBJECT_CLASS_NO_MATCHING_PATTERN_KEY_ERROR,
};
struct ibf_object_regexp {
@@ -7543,14 +14026,9 @@ struct ibf_object_regexp {
char option;
};
-struct ibf_object_array {
- long len;
- long ary[1];
-};
-
struct ibf_object_hash {
long len;
- long keyval[1];
+ long keyval[FLEX_ARY_LEN];
};
struct ibf_object_struct_range {
@@ -7563,11 +14041,11 @@ struct ibf_object_struct_range {
struct ibf_object_bignum {
ssize_t slen;
- BDIGIT digits[1];
+ BDIGIT digits[FLEX_ARY_LEN];
};
enum ibf_object_data_type {
- IBF_OBJECT_DATA_ENCODING
+ IBF_OBJECT_DATA_ENCODING,
};
struct ibf_object_complex_rational {
@@ -7578,21 +14056,41 @@ struct ibf_object_symbol {
long str;
};
-#define IBF_OBJHEADER(offset) (struct ibf_object_header *)(load->buff + (offset))
-#define IBF_OBJBODY(type, offset) (type *)(load->buff + sizeof(struct ibf_object_header) + (offset))
+#define IBF_ALIGNED_OFFSET(align, offset) /* offset > 0 */ \
+ ((((offset) - 1) / (align) + 1) * (align))
+/* No cast, since it's UB to create an unaligned pointer.
+ * Leave as void* for use with memcpy in those cases.
+ * We align the offset, but the buffer pointer is only VALUE aligned,
+ * so the returned pointer may be unaligned for `type` .*/
+#define IBF_OBJBODY(type, offset) \
+ ibf_load_check_offset(load, IBF_ALIGNED_OFFSET(RUBY_ALIGNOF(type), offset))
+
+static const void *
+ibf_load_check_offset(const struct ibf_load *load, size_t offset)
+{
+ if (offset >= load->current_buffer->size) {
+ rb_raise(rb_eIndexError, "object offset out of range: %"PRIdSIZE, offset);
+ }
+ return load->current_buffer->buff + offset;
+}
+
+NORETURN(static void ibf_dump_object_unsupported(struct ibf_dump *dump, VALUE obj));
static void
ibf_dump_object_unsupported(struct ibf_dump *dump, VALUE obj)
{
- rb_obj_info_dump(obj);
- rb_bug("ibf_dump_object_unsupported: unsupported");
+ char buff[0x100];
+ rb_raw_obj_info(buff, sizeof(buff), obj);
+ rb_raise(rb_eNotImpError, "ibf_dump_object_unsupported: %s", buff);
}
+NORETURN(static VALUE ibf_load_object_unsupported(const struct ibf_load *load, const struct ibf_object_header *header, ibf_offset_t offset));
+
static VALUE
ibf_load_object_unsupported(const struct ibf_load *load, const struct ibf_object_header *header, ibf_offset_t offset)
{
- rb_bug("unsupported");
- return Qnil;
+ rb_raise(rb_eArgError, "unsupported");
+ UNREACHABLE_RETURN(Qnil);
}
static void
@@ -7600,38 +14098,52 @@ ibf_dump_object_class(struct ibf_dump *dump, VALUE obj)
{
enum ibf_object_class_index cindex;
if (obj == rb_cObject) {
- cindex = IBF_OBJECT_CLASS_OBJECT;
+ cindex = IBF_OBJECT_CLASS_OBJECT;
}
else if (obj == rb_cArray) {
- cindex = IBF_OBJECT_CLASS_ARRAY;
+ cindex = IBF_OBJECT_CLASS_ARRAY;
}
else if (obj == rb_eStandardError) {
- cindex = IBF_OBJECT_CLASS_STANDARD_ERROR;
+ cindex = IBF_OBJECT_CLASS_STANDARD_ERROR;
+ }
+ else if (obj == rb_eNoMatchingPatternError) {
+ cindex = IBF_OBJECT_CLASS_NO_MATCHING_PATTERN_ERROR;
+ }
+ else if (obj == rb_eTypeError) {
+ cindex = IBF_OBJECT_CLASS_TYPE_ERROR;
+ }
+ else if (obj == rb_eNoMatchingPatternKeyError) {
+ cindex = IBF_OBJECT_CLASS_NO_MATCHING_PATTERN_KEY_ERROR;
}
else {
- rb_obj_info_dump(obj);
- rb_p(obj);
- rb_bug("unsupported class");
+ rb_obj_info_dump(obj);
+ rb_p(obj);
+ rb_bug("unsupported class");
}
- ibf_dump_write(dump, &cindex, sizeof(cindex));
+ ibf_dump_write_small_value(dump, (VALUE)cindex);
}
static VALUE
ibf_load_object_class(const struct ibf_load *load, const struct ibf_object_header *header, ibf_offset_t offset)
{
- enum ibf_object_class_index *cindexp = IBF_OBJBODY(enum ibf_object_class_index, offset);
- enum ibf_object_class_index cindex = *cindexp;
+ enum ibf_object_class_index cindex = (enum ibf_object_class_index)ibf_load_small_value(load, &offset);
switch (cindex) {
case IBF_OBJECT_CLASS_OBJECT:
- return rb_cObject;
+ return rb_cObject;
case IBF_OBJECT_CLASS_ARRAY:
- return rb_cArray;
+ return rb_cArray;
case IBF_OBJECT_CLASS_STANDARD_ERROR:
- return rb_eStandardError;
+ return rb_eStandardError;
+ case IBF_OBJECT_CLASS_NO_MATCHING_PATTERN_ERROR:
+ return rb_eNoMatchingPatternError;
+ case IBF_OBJECT_CLASS_TYPE_ERROR:
+ return rb_eTypeError;
+ case IBF_OBJECT_CLASS_NO_MATCHING_PATTERN_KEY_ERROR:
+ return rb_eNoMatchingPatternKeyError;
}
- rb_bug("ibf_load_object_class: unknown class (%d)", (int)cindex);
+ rb_raise(rb_eArgError, "ibf_load_object_class: unknown class (%d)", (int)cindex);
}
@@ -7639,14 +14151,18 @@ static void
ibf_dump_object_float(struct ibf_dump *dump, VALUE obj)
{
double dbl = RFLOAT_VALUE(obj);
- ibf_dump_write(dump, &dbl, sizeof(dbl));
+ (void)IBF_W(&dbl, double, 1);
}
static VALUE
ibf_load_object_float(const struct ibf_load *load, const struct ibf_object_header *header, ibf_offset_t offset)
{
- double *dblp = IBF_OBJBODY(double, offset);
- return DBL2NUM(*dblp);
+ double d;
+ /* Avoid unaligned VFP load on ARMv7; IBF payload may be unaligned (C99 6.3.2.3 p7). */
+ memcpy(&d, IBF_OBJBODY(double, offset), sizeof(d));
+ VALUE f = DBL2NUM(d);
+ if (!FLONUM_P(f)) RB_OBJ_SET_SHAREABLE(f);
+ return f;
}
static void
@@ -7657,54 +14173,67 @@ ibf_dump_object_string(struct ibf_dump *dump, VALUE obj)
const char *ptr = RSTRING_PTR(obj);
if (encindex > RUBY_ENCINDEX_BUILTIN_MAX) {
- rb_encoding *enc = rb_enc_from_index((int)encindex);
- const char *enc_name = rb_enc_name(enc);
- encindex = RUBY_ENCINDEX_BUILTIN_MAX + ibf_dump_object(dump, rb_str_new2(enc_name));
+ rb_encoding *enc = rb_enc_from_index((int)encindex);
+ const char *enc_name = rb_enc_name(enc);
+ encindex = RUBY_ENCINDEX_BUILTIN_MAX + ibf_dump_object(dump, rb_str_new2(enc_name));
}
- IBF_WV(encindex);
- IBF_WV(len);
+ ibf_dump_write_small_value(dump, encindex);
+ ibf_dump_write_small_value(dump, len);
IBF_WP(ptr, char, len);
}
static VALUE
ibf_load_object_string(const struct ibf_load *load, const struct ibf_object_header *header, ibf_offset_t offset)
{
- const struct ibf_object_string *string = IBF_OBJBODY(struct ibf_object_string, offset);
- VALUE str = rb_str_new(string->ptr, string->len);
- int encindex = (int)string->encindex;
+ ibf_offset_t reading_pos = offset;
+
+ int encindex = (int)ibf_load_small_value(load, &reading_pos);
+ const long len = (long)ibf_load_small_value(load, &reading_pos);
+ const char *ptr = load->current_buffer->buff + reading_pos;
if (encindex > RUBY_ENCINDEX_BUILTIN_MAX) {
- VALUE enc_name_str = ibf_load_object(load, encindex - RUBY_ENCINDEX_BUILTIN_MAX);
- encindex = rb_enc_find_index(RSTRING_PTR(enc_name_str));
+ VALUE enc_name_str = ibf_load_object(load, encindex - RUBY_ENCINDEX_BUILTIN_MAX);
+ encindex = rb_enc_find_index(RSTRING_PTR(enc_name_str));
}
- rb_enc_associate_index(str, encindex);
- if (header->internal) rb_obj_hide(str);
- if (header->frozen) str = rb_fstring(str);
+ VALUE str;
+ if (header->frozen && !header->internal) {
+ str = rb_enc_literal_str(ptr, len, rb_enc_from_index(encindex));
+ }
+ else {
+ str = rb_enc_str_new(ptr, len, rb_enc_from_index(encindex));
+ if (header->internal) rb_obj_hide(str);
+ if (header->frozen) str = rb_fstring(str);
+ }
return str;
}
static void
ibf_dump_object_regexp(struct ibf_dump *dump, VALUE obj)
{
+ VALUE srcstr = RREGEXP_SRC(obj);
struct ibf_object_regexp regexp;
- regexp.srcstr = RREGEXP_SRC(obj);
regexp.option = (char)rb_reg_options(obj);
- regexp.srcstr = (long)ibf_dump_object(dump, regexp.srcstr);
- IBF_WV(regexp);
+ regexp.srcstr = (long)ibf_dump_object(dump, srcstr);
+
+ ibf_dump_write_byte(dump, (unsigned char)regexp.option);
+ ibf_dump_write_small_value(dump, regexp.srcstr);
}
static VALUE
ibf_load_object_regexp(const struct ibf_load *load, const struct ibf_object_header *header, ibf_offset_t offset)
{
- const struct ibf_object_regexp *regexp = IBF_OBJBODY(struct ibf_object_regexp, offset);
- VALUE srcstr = ibf_load_object(load, regexp->srcstr);
- VALUE reg = rb_reg_compile(srcstr, (int)regexp->option, NULL, 0);
+ struct ibf_object_regexp regexp;
+ regexp.option = ibf_load_byte(load, &offset);
+ regexp.srcstr = ibf_load_small_value(load, &offset);
+
+ VALUE srcstr = ibf_load_object(load, regexp.srcstr);
+ VALUE reg = rb_reg_compile(srcstr, (int)regexp.option, NULL, 0);
if (header->internal) rb_obj_hide(reg);
- if (header->frozen) rb_obj_freeze(reg);
+ if (header->frozen) RB_OBJ_SET_SHAREABLE(rb_obj_freeze(reg));
return reg;
}
@@ -7712,27 +14241,33 @@ ibf_load_object_regexp(const struct ibf_load *load, const struct ibf_object_head
static void
ibf_dump_object_array(struct ibf_dump *dump, VALUE obj)
{
- long i, len = (int)RARRAY_LEN(obj);
- IBF_WV(len);
+ long i, len = RARRAY_LEN(obj);
+ ibf_dump_write_small_value(dump, len);
for (i=0; i<len; i++) {
- long index = (long)ibf_dump_object(dump, RARRAY_AREF(obj, i));
- IBF_WV(index);
+ long index = (long)ibf_dump_object(dump, RARRAY_AREF(obj, i));
+ ibf_dump_write_small_value(dump, index);
}
}
static VALUE
ibf_load_object_array(const struct ibf_load *load, const struct ibf_object_header *header, ibf_offset_t offset)
{
- const struct ibf_object_array *array = IBF_OBJBODY(struct ibf_object_array, offset);
- VALUE ary = rb_ary_new_capa(array->len);
+ ibf_offset_t reading_pos = offset;
+
+ const long len = (long)ibf_load_small_value(load, &reading_pos);
+
+ VALUE ary = header->internal ? rb_ary_hidden_new(len) : rb_ary_new_capa(len);
int i;
- for (i=0; i<array->len; i++) {
- rb_ary_push(ary, ibf_load_object(load, array->ary[i]));
+ for (i=0; i<len; i++) {
+ const VALUE index = ibf_load_small_value(load, &reading_pos);
+ rb_ary_push(ary, ibf_load_object(load, index));
}
- if (header->internal) rb_obj_hide(ary);
- if (header->frozen) rb_obj_freeze(ary);
+ if (header->frozen) {
+ rb_ary_freeze(ary);
+ rb_ractor_make_shareable(ary); // TODO: check elements
+ }
return ary;
}
@@ -7741,10 +14276,12 @@ static int
ibf_dump_object_hash_i(st_data_t key, st_data_t val, st_data_t ptr)
{
struct ibf_dump *dump = (struct ibf_dump *)ptr;
- long key_index = (long)ibf_dump_object(dump, (VALUE)key);
- long val_index = (long)ibf_dump_object(dump, (VALUE)val);
- IBF_WV(key_index);
- IBF_WV(val_index);
+
+ VALUE key_index = ibf_dump_object(dump, (VALUE)key);
+ VALUE val_index = ibf_dump_object(dump, (VALUE)val);
+
+ ibf_dump_write_small_value(dump, key_index);
+ ibf_dump_write_small_value(dump, val_index);
return ST_CONTINUE;
}
@@ -7752,26 +14289,32 @@ static void
ibf_dump_object_hash(struct ibf_dump *dump, VALUE obj)
{
long len = RHASH_SIZE(obj);
- IBF_WV(len);
- if (len > 0) st_foreach(RHASH(obj)->ntbl, ibf_dump_object_hash_i, (st_data_t)dump);
+ ibf_dump_write_small_value(dump, (VALUE)len);
+
+ if (len > 0) rb_hash_foreach(obj, ibf_dump_object_hash_i, (VALUE)dump);
}
static VALUE
ibf_load_object_hash(const struct ibf_load *load, const struct ibf_object_header *header, ibf_offset_t offset)
{
- const struct ibf_object_hash *hash = IBF_OBJBODY(struct ibf_object_hash, offset);
- VALUE obj = rb_hash_new();
+ long len = (long)ibf_load_small_value(load, &offset);
+ VALUE obj = rb_hash_new_with_size(len);
int i;
- for (i=0; i<hash->len; i++) {
- VALUE key = ibf_load_object(load, hash->keyval[i*2 ]);
- VALUE val = ibf_load_object(load, hash->keyval[i*2+1]);
- rb_hash_aset(obj, key, val);
+ for (i = 0; i < len; i++) {
+ VALUE key_index = ibf_load_small_value(load, &offset);
+ VALUE val_index = ibf_load_small_value(load, &offset);
+
+ VALUE key = ibf_load_object(load, key_index);
+ VALUE val = ibf_load_object(load, val_index);
+ rb_hash_aset(obj, key, val);
}
rb_hash_rehash(obj);
if (header->internal) rb_obj_hide(obj);
- if (header->frozen) rb_obj_freeze(obj);
+ if (header->frozen) {
+ RB_OBJ_SET_FROZEN_SHAREABLE(obj);
+ }
return obj;
}
@@ -7780,19 +14323,22 @@ static void
ibf_dump_object_struct(struct ibf_dump *dump, VALUE obj)
{
if (rb_obj_is_kind_of(obj, rb_cRange)) {
- struct ibf_object_struct_range range;
- VALUE beg, end;
- range.len = 3;
- range.class_index = 0;
+ struct ibf_object_struct_range range;
+ VALUE beg, end;
+ IBF_ZERO(range);
+ range.len = 3;
+ range.class_index = 0;
- rb_range_values(obj, &beg, &end, &range.excl);
- range.beg = (long)ibf_dump_object(dump, beg);
- range.end = (long)ibf_dump_object(dump, end);
+ rb_range_values(obj, &beg, &end, &range.excl);
+ range.beg = (long)ibf_dump_object(dump, beg);
+ range.end = (long)ibf_dump_object(dump, end);
- IBF_WV(range);
+ IBF_W_ALIGN(struct ibf_object_struct_range);
+ IBF_WV(range);
}
else {
- rb_bug("ibf_dump_object_struct: unsupported class");
+ rb_raise(rb_eNotImpError, "ibf_dump_object_struct: unsupported class %"PRIsVALUE,
+ rb_class_name(CLASS_OF(obj)));
}
}
@@ -7804,7 +14350,7 @@ ibf_load_object_struct(const struct ibf_load *load, const struct ibf_object_head
VALUE end = ibf_load_object(load, range->end);
VALUE obj = rb_range_new(beg, end, range->excl);
if (header->internal) rb_obj_hide(obj);
- if (header->frozen) rb_obj_freeze(obj);
+ if (header->frozen) RB_OBJ_SET_FROZEN_SHAREABLE(obj);
return obj;
}
@@ -7815,7 +14361,7 @@ ibf_dump_object_bignum(struct ibf_dump *dump, VALUE obj)
ssize_t slen = BIGNUM_SIGN(obj) > 0 ? len : len * -1;
BDIGIT *d = BIGNUM_DIGITS(obj);
- IBF_WV(slen);
+ (void)IBF_W(&slen, ssize_t, 1);
IBF_WP(d, BDIGIT, len);
}
@@ -7825,10 +14371,14 @@ ibf_load_object_bignum(const struct ibf_load *load, const struct ibf_object_head
const struct ibf_object_bignum *bignum = IBF_OBJBODY(struct ibf_object_bignum, offset);
int sign = bignum->slen > 0;
ssize_t len = sign > 0 ? bignum->slen : -1 * bignum->slen;
- VALUE obj = rb_integer_unpack(bignum->digits, len * 2, 2, 0,
- INTEGER_PACK_LITTLE_ENDIAN | (sign == 0 ? INTEGER_PACK_NEGATIVE : 0));
+ const int big_unpack_flags = /* c.f. rb_big_unpack() */
+ INTEGER_PACK_LSWORD_FIRST |
+ INTEGER_PACK_NATIVE_BYTE_ORDER;
+ VALUE obj = rb_integer_unpack(bignum->digits, len, sizeof(BDIGIT), 0,
+ big_unpack_flags |
+ (sign == 0 ? INTEGER_PACK_NEGATIVE : 0));
if (header->internal) rb_obj_hide(obj);
- if (header->frozen) rb_obj_freeze(obj);
+ if (header->frozen) RB_OBJ_SET_FROZEN_SHAREABLE(obj);
return obj;
}
@@ -7836,32 +14386,34 @@ static void
ibf_dump_object_data(struct ibf_dump *dump, VALUE obj)
{
if (rb_data_is_encoding(obj)) {
- rb_encoding *enc = rb_to_encoding(obj);
- const char *name = rb_enc_name(enc);
- enum ibf_object_data_type type = IBF_OBJECT_DATA_ENCODING;
- long len = strlen(name) + 1;
- IBF_WV(type);
- IBF_WV(len);
- IBF_WP(name, char, strlen(name) + 1);
+ rb_encoding *enc = rb_to_encoding(obj);
+ const char *name = rb_enc_name(enc);
+ long len = strlen(name) + 1;
+ long data[2];
+ data[0] = IBF_OBJECT_DATA_ENCODING;
+ data[1] = len;
+ (void)IBF_W(data, long, 2);
+ IBF_WP(name, char, len);
}
else {
- ibf_dump_object_unsupported(dump, obj);
+ ibf_dump_object_unsupported(dump, obj);
}
}
static VALUE
ibf_load_object_data(const struct ibf_load *load, const struct ibf_object_header *header, ibf_offset_t offset)
{
- const enum ibf_object_data_type *typep = IBF_OBJBODY(enum ibf_object_data_type, offset);
- /* const long *lenp = IBF_OBJBODY(long, offset + sizeof(enum ibf_object_data_type)); */
- const char *data = IBF_OBJBODY(char, offset + sizeof(enum ibf_object_data_type) + sizeof(long));
+ const long *body = IBF_OBJBODY(long, offset);
+ const enum ibf_object_data_type type = (enum ibf_object_data_type)body[0];
+ /* const long len = body[1]; */
+ const char *data = (const char *)&body[2];
- switch (*typep) {
+ switch (type) {
case IBF_OBJECT_DATA_ENCODING:
- {
- VALUE encobj = rb_enc_from_encoding(rb_enc_find(data));
- return encobj;
- }
+ {
+ VALUE encobj = rb_enc_from_encoding(rb_enc_find(data));
+ return encobj;
+ }
}
return ibf_load_object_unsupported(load, header, offset);
@@ -7870,11 +14422,11 @@ ibf_load_object_data(const struct ibf_load *load, const struct ibf_object_header
static void
ibf_dump_object_complex_rational(struct ibf_dump *dump, VALUE obj)
{
- long real = (long)ibf_dump_object(dump, RCOMPLEX(obj)->real);
- long imag = (long)ibf_dump_object(dump, RCOMPLEX(obj)->imag);
+ long data[2];
+ data[0] = (long)ibf_dump_object(dump, RCOMPLEX(obj)->real);
+ data[1] = (long)ibf_dump_object(dump, RCOMPLEX(obj)->imag);
- IBF_WV(real);
- IBF_WV(imag);
+ (void)IBF_W(data, long, 2);
}
static VALUE
@@ -7887,30 +14439,36 @@ ibf_load_object_complex_rational(const struct ibf_load *load, const struct ibf_o
rb_complex_new(a, b) : rb_rational_new(a, b);
if (header->internal) rb_obj_hide(obj);
- if (header->frozen) rb_obj_freeze(obj);
+ if (header->frozen) rb_ractor_make_shareable(rb_obj_freeze(obj));
return obj;
}
static void
ibf_dump_object_symbol(struct ibf_dump *dump, VALUE obj)
{
- VALUE str = rb_sym2str(obj);
- long str_index = (long)ibf_dump_object(dump, str);
- IBF_WV(str_index);
+ ibf_dump_object_string(dump, rb_sym2str(obj));
}
static VALUE
ibf_load_object_symbol(const struct ibf_load *load, const struct ibf_object_header *header, ibf_offset_t offset)
{
- /* const struct ibf_object_header *header = IBF_OBJHEADER(offset); */
- const struct ibf_object_symbol *symbol = IBF_OBJBODY(struct ibf_object_symbol, offset);
- VALUE str = ibf_load_object(load, symbol->str);
- ID id = rb_intern_str(str);
+ ibf_offset_t reading_pos = offset;
+
+ int encindex = (int)ibf_load_small_value(load, &reading_pos);
+ const long len = (long)ibf_load_small_value(load, &reading_pos);
+ const char *ptr = load->current_buffer->buff + reading_pos;
+
+ if (encindex > RUBY_ENCINDEX_BUILTIN_MAX) {
+ VALUE enc_name_str = ibf_load_object(load, encindex - RUBY_ENCINDEX_BUILTIN_MAX);
+ encindex = rb_enc_find_index(RSTRING_PTR(enc_name_str));
+ }
+
+ ID id = rb_intern3(ptr, len, rb_enc_from_index(encindex));
return ID2SYM(id);
}
typedef void (*ibf_dump_object_function)(struct ibf_dump *dump, VALUE obj);
-static ibf_dump_object_function dump_object_functions[RUBY_T_MASK+1] = {
+static const ibf_dump_object_function dump_object_functions[RUBY_T_MASK+1] = {
ibf_dump_object_unsupported, /* T_NONE */
ibf_dump_object_unsupported, /* T_OBJECT */
ibf_dump_object_class, /* T_CLASS */
@@ -7942,42 +14500,68 @@ static ibf_dump_object_function dump_object_functions[RUBY_T_MASK+1] = {
ibf_dump_object_unsupported, /* T_ICLASS 0x1c */
ibf_dump_object_unsupported, /* T_ZOMBIE 0x1d */
ibf_dump_object_unsupported, /* 0x1e */
- ibf_dump_object_unsupported /* 0x1f */
+ ibf_dump_object_unsupported, /* 0x1f */
};
+static void
+ibf_dump_object_object_header(struct ibf_dump *dump, const struct ibf_object_header header)
+{
+ unsigned char byte =
+ (header.type << 0) |
+ (header.special_const << 5) |
+ (header.frozen << 6) |
+ (header.internal << 7);
+
+ IBF_WV(byte);
+}
+
+static struct ibf_object_header
+ibf_load_object_object_header(const struct ibf_load *load, ibf_offset_t *offset)
+{
+ unsigned char byte = ibf_load_byte(load, offset);
+
+ struct ibf_object_header header;
+ header.type = (byte >> 0) & 0x1f;
+ header.special_const = (byte >> 5) & 0x01;
+ header.frozen = (byte >> 6) & 0x01;
+ header.internal = (byte >> 7) & 0x01;
+
+ return header;
+}
+
static ibf_offset_t
-lbf_dump_object_object(struct ibf_dump *dump, VALUE obj)
+ibf_dump_object_object(struct ibf_dump *dump, VALUE obj)
{
struct ibf_object_header obj_header;
- ibf_offset_t current_offset = ibf_dump_pos(dump);
+ ibf_offset_t current_offset;
+ IBF_ZERO(obj_header);
obj_header.type = TYPE(obj);
- if (SPECIAL_CONST_P(obj)) {
- if (RB_TYPE_P(obj, T_SYMBOL) ||
- RB_TYPE_P(obj, T_FLOAT)) {
- obj_header.internal = FALSE;
- goto dump_object;
- }
- obj_header.special_const = TRUE;
- obj_header.frozen = TRUE;
- obj_header.internal = TRUE;
- IBF_WV(obj_header);
- IBF_WV(obj);
+ IBF_W_ALIGN(ibf_offset_t);
+ current_offset = ibf_dump_pos(dump);
+
+ if (SPECIAL_CONST_P(obj) &&
+ ! (SYMBOL_P(obj) ||
+ RB_FLOAT_TYPE_P(obj))) {
+ obj_header.special_const = TRUE;
+ obj_header.frozen = TRUE;
+ obj_header.internal = TRUE;
+ ibf_dump_object_object_header(dump, obj_header);
+ ibf_dump_write_small_value(dump, obj);
}
else {
- obj_header.internal = (RBASIC_CLASS(obj) == 0) ? TRUE : FALSE;
- dump_object:
- obj_header.special_const = FALSE;
- obj_header.frozen = FL_TEST(obj, FL_FREEZE) ? TRUE : FALSE;
- IBF_WV(obj_header);
- (*dump_object_functions[obj_header.type])(dump, obj);
+ obj_header.internal = SPECIAL_CONST_P(obj) ? FALSE : (RBASIC_CLASS(obj) == 0) ? TRUE : FALSE;
+ obj_header.special_const = FALSE;
+ obj_header.frozen = OBJ_FROZEN(obj) ? TRUE : FALSE;
+ ibf_dump_object_object_header(dump, obj_header);
+ (*dump_object_functions[obj_header.type])(dump, obj);
}
return current_offset;
}
-typedef VALUE (*ibf_load_object_function)(const struct ibf_load *load, const struct ibf_object_header *header, ibf_offset_t);
-static ibf_load_object_function load_object_functions[RUBY_T_MASK+1] = {
+typedef VALUE (*ibf_load_object_function)(const struct ibf_load *load, const struct ibf_object_header *header, ibf_offset_t offset);
+static const ibf_load_object_function load_object_functions[RUBY_T_MASK+1] = {
ibf_load_object_unsupported, /* T_NONE */
ibf_load_object_unsupported, /* T_OBJECT */
ibf_load_object_class, /* T_CLASS */
@@ -8009,164 +14593,195 @@ static ibf_load_object_function load_object_functions[RUBY_T_MASK+1] = {
ibf_load_object_unsupported, /* T_ICLASS 0x1c */
ibf_load_object_unsupported, /* T_ZOMBIE 0x1d */
ibf_load_object_unsupported, /* 0x1e */
- ibf_load_object_unsupported /* 0x1f */
+ ibf_load_object_unsupported, /* 0x1f */
};
static VALUE
ibf_load_object(const struct ibf_load *load, VALUE object_index)
{
if (object_index == 0) {
- return Qnil;
- }
- else if (object_index >= load->header->object_list_size) {
- rb_raise(rb_eIndexError, "object index out of range: %"PRIdVALUE, object_index);
+ return Qnil;
}
else {
- VALUE obj = rb_ary_entry(load->obj_list, (long)object_index);
- if (obj == Qnil) { /* TODO: avoid multiple Qnil load */
- ibf_offset_t *offsets = (ibf_offset_t *)(load->header->object_list_offset + load->buff);
- ibf_offset_t offset = offsets[object_index];
- const struct ibf_object_header *header = IBF_OBJHEADER(offset);
+ VALUE obj = pinned_list_fetch(load->current_buffer->obj_list, (long)object_index);
+ if (!obj) {
+ ibf_offset_t *offsets = (ibf_offset_t *)(load->current_buffer->obj_list_offset + load->current_buffer->buff);
+ ibf_offset_t offset = offsets[object_index];
+ const struct ibf_object_header header = ibf_load_object_object_header(load, &offset);
+
+#if IBF_ISEQ_DEBUG
+ fprintf(stderr, "ibf_load_object: list=%#x offsets=%p offset=%#x\n",
+ load->current_buffer->obj_list_offset, (void *)offsets, offset);
+ fprintf(stderr, "ibf_load_object: type=%#x special=%d frozen=%d internal=%d\n",
+ header.type, header.special_const, header.frozen, header.internal);
+#endif
+ if (offset >= load->current_buffer->size) {
+ rb_raise(rb_eIndexError, "object offset out of range: %u", offset);
+ }
+
+ if (header.special_const) {
+ ibf_offset_t reading_pos = offset;
+
+ obj = ibf_load_small_value(load, &reading_pos);
+ }
+ else {
+ obj = (*load_object_functions[header.type])(load, &header, offset);
+ }
+
+ pinned_list_store(load->current_buffer->obj_list, (long)object_index, obj);
+ }
+#if IBF_ISEQ_DEBUG
+ fprintf(stderr, "ibf_load_object: index=%#"PRIxVALUE" obj=%#"PRIxVALUE"\n",
+ object_index, obj);
+#endif
+ return obj;
+ }
+}
- if (header->special_const) {
- VALUE *vp = IBF_OBJBODY(VALUE, offset);
- obj = *vp;
- }
- else {
- obj = (*load_object_functions[header->type])(load, header, offset);
- }
+struct ibf_dump_object_list_arg
+{
+ struct ibf_dump *dump;
+ VALUE offset_list;
+};
- rb_ary_store(load->obj_list, (long)object_index, obj);
- }
- iseq_add_mark_object(load->iseq, obj);
- return obj;
- }
+static int
+ibf_dump_object_list_i(st_data_t key, st_data_t val, st_data_t ptr)
+{
+ VALUE obj = (VALUE)key;
+ struct ibf_dump_object_list_arg *args = (struct ibf_dump_object_list_arg *)ptr;
+
+ ibf_offset_t offset = ibf_dump_object_object(args->dump, obj);
+ rb_ary_push(args->offset_list, UINT2NUM(offset));
+
+ return ST_CONTINUE;
}
static void
-ibf_dump_object_list(struct ibf_dump *dump, struct ibf_header *header)
+ibf_dump_object_list(struct ibf_dump *dump, ibf_offset_t *obj_list_offset, unsigned int *obj_list_size)
{
- VALUE list = rb_ary_tmp_new(RARRAY_LEN(dump->obj_list));
- int i, size;
+ st_table *obj_table = dump->current_buffer->obj_table;
+ VALUE offset_list = rb_ary_hidden_new(obj_table->num_entries);
- for (i=0; i<RARRAY_LEN(dump->obj_list); i++) {
- VALUE obj = RARRAY_AREF(dump->obj_list, i);
- ibf_offset_t offset = lbf_dump_object_object(dump, obj);
- rb_ary_push(list, UINT2NUM(offset));
- }
- size = i;
- header->object_list_offset = ibf_dump_pos(dump);
+ struct ibf_dump_object_list_arg args;
+ args.dump = dump;
+ args.offset_list = offset_list;
+
+ st_foreach(obj_table, ibf_dump_object_list_i, (st_data_t)&args);
+
+ IBF_W_ALIGN(ibf_offset_t);
+ *obj_list_offset = ibf_dump_pos(dump);
+
+ st_index_t size = obj_table->num_entries;
+ st_index_t i;
for (i=0; i<size; i++) {
- ibf_offset_t offset = NUM2UINT(RARRAY_AREF(list, i));
- IBF_WV(offset);
+ ibf_offset_t offset = NUM2UINT(RARRAY_AREF(offset_list, i));
+ IBF_WV(offset);
}
- header->object_list_size = size;
+ *obj_list_size = (unsigned int)size;
}
static void
ibf_dump_mark(void *ptr)
{
struct ibf_dump *dump = (struct ibf_dump *)ptr;
- rb_gc_mark(dump->str);
- rb_gc_mark(dump->iseq_list);
- rb_gc_mark(dump->obj_list);
+ rb_gc_mark(dump->global_buffer.str);
+
+ rb_mark_set(dump->global_buffer.obj_table);
+ rb_mark_set(dump->iseq_table);
}
static void
ibf_dump_free(void *ptr)
{
struct ibf_dump *dump = (struct ibf_dump *)ptr;
- if (dump->iseq_table) {
- st_free_table(dump->iseq_table);
- dump->iseq_table = 0;
+ if (dump->global_buffer.obj_table) {
+ st_free_table(dump->global_buffer.obj_table);
+ dump->global_buffer.obj_table = 0;
}
- if (dump->id_table) {
- st_free_table(dump->id_table);
- dump->id_table = 0;
+ if (dump->iseq_table) {
+ st_free_table(dump->iseq_table);
+ dump->iseq_table = 0;
}
- ruby_xfree(dump);
}
static size_t
ibf_dump_memsize(const void *ptr)
{
struct ibf_dump *dump = (struct ibf_dump *)ptr;
- size_t size = sizeof(*dump);
+ size_t size = 0;
if (dump->iseq_table) size += st_memsize(dump->iseq_table);
- if (dump->id_table) size += st_memsize(dump->id_table);
+ if (dump->global_buffer.obj_table) size += st_memsize(dump->global_buffer.obj_table);
return size;
}
static const rb_data_type_t ibf_dump_type = {
"ibf_dump",
{ibf_dump_mark, ibf_dump_free, ibf_dump_memsize,},
- 0, 0, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY
+ 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
};
static void
ibf_dump_setup(struct ibf_dump *dump, VALUE dumper_obj)
{
- RB_OBJ_WRITE(dumper_obj, &dump->str, rb_str_new(0, 0));
- RB_OBJ_WRITE(dumper_obj, &dump->iseq_list, rb_ary_tmp_new(0));
- RB_OBJ_WRITE(dumper_obj, &dump->obj_list, rb_ary_tmp_new(1));
- rb_ary_push(dump->obj_list, Qnil); /* 0th is nil */
+ dump->global_buffer.obj_table = NULL; // GC may run before a value is assigned
+ dump->iseq_table = NULL;
+
+ RB_OBJ_WRITE(dumper_obj, &dump->global_buffer.str, rb_str_new(0, 0));
+ dump->global_buffer.obj_table = ibf_dump_object_table_new();
dump->iseq_table = st_init_numtable(); /* need free */
- dump->id_table = st_init_numtable(); /* need free */
- ibf_table_index(dump->id_table, 0); /* id_index:0 is 0 */
+ dump->current_buffer = &dump->global_buffer;
}
VALUE
-iseq_ibf_dump(const rb_iseq_t *iseq, VALUE opt)
+rb_iseq_ibf_dump(const rb_iseq_t *iseq, VALUE opt)
{
struct ibf_dump *dump;
struct ibf_header header = {{0}};
VALUE dump_obj;
VALUE str;
- if (iseq->body->parent_iseq != NULL ||
- iseq->body->local_iseq != iseq) {
- rb_raise(rb_eRuntimeError, "should be top of iseq");
+ if (ISEQ_BODY(iseq)->parent_iseq != NULL ||
+ ISEQ_BODY(iseq)->local_iseq != iseq) {
+ rb_raise(rb_eRuntimeError, "should be top of iseq");
}
if (RTEST(ISEQ_COVERAGE(iseq))) {
- rb_raise(rb_eRuntimeError, "should not compile with coverage");
+ rb_raise(rb_eRuntimeError, "should not compile with coverage");
}
dump_obj = TypedData_Make_Struct(0, struct ibf_dump, &ibf_dump_type, dump);
ibf_dump_setup(dump, dump_obj);
ibf_dump_write(dump, &header, sizeof(header));
- ibf_dump_write(dump, RUBY_PLATFORM, strlen(RUBY_PLATFORM) + 1);
ibf_dump_iseq(dump, iseq);
header.magic[0] = 'Y'; /* YARB */
header.magic[1] = 'A';
header.magic[2] = 'R';
header.magic[3] = 'B';
- header.major_version = ISEQ_MAJOR_VERSION;
- header.minor_version = ISEQ_MINOR_VERSION;
+ header.major_version = IBF_MAJOR_VERSION;
+ header.minor_version = IBF_MINOR_VERSION;
+ header.endian = IBF_ENDIAN_MARK;
+ header.wordsize = (uint8_t)SIZEOF_VALUE;
ibf_dump_iseq_list(dump, &header);
- ibf_dump_id_list(dump, &header);
- ibf_dump_object_list(dump, &header);
+ ibf_dump_object_list(dump, &header.global_object_list_offset, &header.global_object_list_size);
header.size = ibf_dump_pos(dump);
if (RTEST(opt)) {
- VALUE opt_str = opt;
- const char *ptr = StringValuePtr(opt_str);
- header.extra_size = RSTRING_LENINT(opt_str);
- ibf_dump_write(dump, ptr, header.extra_size);
+ VALUE opt_str = opt;
+ const char *ptr = StringValuePtr(opt_str);
+ header.extra_size = RSTRING_LENINT(opt_str);
+ ibf_dump_write(dump, ptr, header.extra_size);
}
else {
- header.extra_size = 0;
+ header.extra_size = 0;
}
ibf_dump_overwrite(dump, &header, sizeof(header), 0);
- str = dump->str;
- ibf_dump_free(dump);
- DATA_PTR(dump_obj) = NULL;
+ str = dump->global_buffer.str;
RB_GC_GUARD(dump_obj);
return str;
}
@@ -8174,18 +14789,25 @@ iseq_ibf_dump(const rb_iseq_t *iseq, VALUE opt)
static const ibf_offset_t *
ibf_iseq_list(const struct ibf_load *load)
{
- return (ibf_offset_t *)(load->buff + load->header->iseq_list_offset);
+ return (const ibf_offset_t *)(load->global_buffer.buff + load->header->iseq_list_offset);
}
void
-ibf_load_iseq_complete(rb_iseq_t *iseq)
+rb_ibf_load_iseq_complete(rb_iseq_t *iseq)
{
struct ibf_load *load = RTYPEDDATA_DATA(iseq->aux.loader.obj);
rb_iseq_t *prev_src_iseq = load->iseq;
+ ibf_offset_t offset = ibf_iseq_list(load)[iseq->aux.loader.index];
load->iseq = iseq;
- ibf_load_iseq_each(load, iseq, ibf_iseq_list(load)[iseq->aux.loader.index]);
- ISEQ_COMPILE_DATA(iseq) = NULL;
- FL_UNSET(iseq, ISEQ_NOT_LOADED_YET);
+#if IBF_ISEQ_DEBUG
+ fprintf(stderr, "rb_ibf_load_iseq_complete: index=%#x offset=%#x size=%#x\n",
+ iseq->aux.loader.index, offset,
+ load->header->size);
+#endif
+ ibf_load_iseq_each(load, iseq, offset);
+ ISEQ_COMPILE_DATA_CLEAR(iseq);
+ FL_UNSET((VALUE)iseq, ISEQ_NOT_LOADED_YET);
+ rb_iseq_init_trace(iseq);
load->iseq = prev_src_iseq;
}
@@ -8193,7 +14815,7 @@ ibf_load_iseq_complete(rb_iseq_t *iseq)
const rb_iseq_t *
rb_iseq_complete(const rb_iseq_t *iseq)
{
- ibf_load_iseq_complete((rb_iseq_t *)iseq);
+ rb_ibf_load_iseq_complete((rb_iseq_t *)iseq);
return iseq;
}
#endif
@@ -8203,93 +14825,132 @@ ibf_load_iseq(const struct ibf_load *load, const rb_iseq_t *index_iseq)
{
int iseq_index = (int)(VALUE)index_iseq;
+#if IBF_ISEQ_DEBUG
+ fprintf(stderr, "ibf_load_iseq: index_iseq=%p iseq_list=%p\n",
+ (void *)index_iseq, (void *)load->iseq_list);
+#endif
if (iseq_index == -1) {
- return NULL;
+ return NULL;
}
else {
- VALUE iseqv = rb_ary_entry(load->iseq_list, iseq_index);
+ VALUE iseqv = pinned_list_fetch(load->iseq_list, iseq_index);
- if (iseqv != Qnil) {
- return (rb_iseq_t *)iseqv;
- }
- else {
- rb_iseq_t *iseq = iseq_imemo_alloc();
- FL_SET(iseq, ISEQ_NOT_LOADED_YET);
- iseq->aux.loader.obj = load->loader_obj;
- iseq->aux.loader.index = iseq_index;
- rb_ary_store(load->iseq_list, iseq_index, (VALUE)iseq);
+#if IBF_ISEQ_DEBUG
+ fprintf(stderr, "ibf_load_iseq: iseqv=%p\n", (void *)iseqv);
+#endif
+ if (iseqv) {
+ return (rb_iseq_t *)iseqv;
+ }
+ else {
+ rb_iseq_t *iseq = iseq_imemo_alloc();
+#if IBF_ISEQ_DEBUG
+ fprintf(stderr, "ibf_load_iseq: new iseq=%p\n", (void *)iseq);
+#endif
+ FL_SET((VALUE)iseq, ISEQ_NOT_LOADED_YET);
+ iseq->aux.loader.obj = load->loader_obj;
+ iseq->aux.loader.index = iseq_index;
+#if IBF_ISEQ_DEBUG
+ fprintf(stderr, "ibf_load_iseq: iseq=%p loader_obj=%p index=%d\n",
+ (void *)iseq, (void *)load->loader_obj, iseq_index);
+#endif
+ pinned_list_store(load->iseq_list, iseq_index, (VALUE)iseq);
-#if !USE_LAZY_LOAD
- ibf_load_iseq_complete(iseq);
-#endif /* !USE_LAZY_LOAD */
+ if (!USE_LAZY_LOAD || GET_VM()->builtin_function_table) {
+#if IBF_ISEQ_DEBUG
+ fprintf(stderr, "ibf_load_iseq: loading iseq=%p\n", (void *)iseq);
+#endif
+ rb_ibf_load_iseq_complete(iseq);
+ }
- if (load->iseq) {
- iseq_add_mark_object(load->iseq, (VALUE)iseq);
- }
- return iseq;
- }
+#if IBF_ISEQ_DEBUG
+ fprintf(stderr, "ibf_load_iseq: iseq=%p loaded %p\n",
+ (void *)iseq, (void *)load->iseq);
+#endif
+ return iseq;
+ }
}
}
static void
-ibf_load_setup(struct ibf_load *load, VALUE loader_obj, VALUE str)
+ibf_load_setup_bytes(struct ibf_load *load, VALUE loader_obj, const char *bytes, size_t size)
{
- rb_check_safe_obj(str);
-
- if (RSTRING_LENINT(str) < (int)sizeof(struct ibf_header)) {
- rb_raise(rb_eRuntimeError, "broken binary format");
- }
- RB_OBJ_WRITE(loader_obj, &load->str, str);
+ struct ibf_header *header = (struct ibf_header *)bytes;
load->loader_obj = loader_obj;
- load->buff = StringValuePtr(str);
- load->header = (struct ibf_header *)load->buff;
- RB_OBJ_WRITE(loader_obj, &load->iseq_list, rb_ary_tmp_new(0));
- RB_OBJ_WRITE(loader_obj, &load->obj_list, rb_ary_tmp_new(0));
- load->id_list = ZALLOC_N(ID, load->header->id_list_size);
+ load->global_buffer.buff = bytes;
+ load->header = header;
+ load->global_buffer.size = header->size;
+ load->global_buffer.obj_list_offset = header->global_object_list_offset;
+ load->global_buffer.obj_list_size = header->global_object_list_size;
+ RB_OBJ_WRITE(loader_obj, &load->iseq_list, pinned_list_new(header->iseq_list_size));
+ RB_OBJ_WRITE(loader_obj, &load->global_buffer.obj_list, pinned_list_new(load->global_buffer.obj_list_size));
load->iseq = NULL;
- if (RSTRING_LENINT(str) < (int)load->header->size) {
- rb_raise(rb_eRuntimeError, "broken binary format");
+ load->current_buffer = &load->global_buffer;
+
+ if (size < header->size) {
+ rb_raise(rb_eRuntimeError, "broken binary format");
}
- if (strncmp(load->header->magic, "YARB", 4) != 0) {
- rb_raise(rb_eRuntimeError, "unknown binary format");
+ if (strncmp(header->magic, "YARB", 4) != 0) {
+ rb_raise(rb_eRuntimeError, "unknown binary format");
}
- if (load->header->major_version != ISEQ_MAJOR_VERSION ||
- load->header->minor_version != ISEQ_MINOR_VERSION) {
- rb_raise(rb_eRuntimeError, "unmatched version file (%u.%u for %u.%u)",
- load->header->major_version, load->header->minor_version, ISEQ_MAJOR_VERSION, ISEQ_MINOR_VERSION);
+ if (header->major_version != IBF_MAJOR_VERSION ||
+ header->minor_version != IBF_MINOR_VERSION) {
+ rb_raise(rb_eRuntimeError, "unmatched version file (%u.%u for %u.%u)",
+ header->major_version, header->minor_version, IBF_MAJOR_VERSION, IBF_MINOR_VERSION);
}
- if (strcmp(load->buff + sizeof(struct ibf_header), RUBY_PLATFORM) != 0) {
- rb_raise(rb_eRuntimeError, "unmatched platform");
+ if (header->endian != IBF_ENDIAN_MARK) {
+ rb_raise(rb_eRuntimeError, "unmatched endian: %c", header->endian);
+ }
+ if (header->wordsize != SIZEOF_VALUE) {
+ rb_raise(rb_eRuntimeError, "unmatched word size: %d", header->wordsize);
+ }
+ if (header->iseq_list_offset % RUBY_ALIGNOF(ibf_offset_t)) {
+ rb_raise(rb_eArgError, "unaligned iseq list offset: %u",
+ header->iseq_list_offset);
+ }
+ if (load->global_buffer.obj_list_offset % RUBY_ALIGNOF(ibf_offset_t)) {
+ rb_raise(rb_eArgError, "unaligned object list offset: %u",
+ load->global_buffer.obj_list_offset);
}
}
static void
-ibf_loader_mark(void *ptr)
+ibf_load_setup(struct ibf_load *load, VALUE loader_obj, VALUE str)
{
- if (ptr) {
- struct ibf_load *load = (struct ibf_load *)ptr;
- rb_gc_mark(load->str);
- rb_gc_mark(load->iseq_list);
- rb_gc_mark(load->obj_list);
+ StringValue(str);
+
+ if (RSTRING_LENINT(str) < (int)sizeof(struct ibf_header)) {
+ rb_raise(rb_eRuntimeError, "broken binary format");
+ }
+
+ if (USE_LAZY_LOAD) {
+ str = rb_str_new(RSTRING_PTR(str), RSTRING_LEN(str));
}
+
+ ibf_load_setup_bytes(load, loader_obj, RSTRING_PTR(str), RSTRING_LEN(str));
+ RB_OBJ_WRITE(loader_obj, &load->str, str);
+}
+
+static void
+ibf_loader_mark(void *ptr)
+{
+ struct ibf_load *load = (struct ibf_load *)ptr;
+ rb_gc_mark(load->str);
+ rb_gc_mark(load->iseq_list);
+ rb_gc_mark(load->global_buffer.obj_list);
}
static void
ibf_loader_free(void *ptr)
{
- if (ptr) {
- struct ibf_load *load = (struct ibf_load *)ptr;
- ruby_xfree(load->id_list);
- ruby_xfree(load);
- }
+ struct ibf_load *load = (struct ibf_load *)ptr;
+ ruby_xfree(load);
}
static size_t
ibf_loader_memsize(const void *ptr)
{
- struct ibf_load *load = (struct ibf_load *)ptr;
- return sizeof(struct ibf_load) + load->header->id_list_size * sizeof(ID);
+ return sizeof(struct ibf_load);
}
static const rb_data_type_t ibf_load_type = {
@@ -8299,10 +14960,10 @@ static const rb_data_type_t ibf_load_type = {
};
const rb_iseq_t *
-iseq_ibf_load(VALUE str)
+rb_iseq_ibf_load(VALUE str)
{
struct ibf_load *load;
- const rb_iseq_t *iseq;
+ rb_iseq_t *iseq;
VALUE loader_obj = TypedData_Make_Struct(0, struct ibf_load, &ibf_load_type, load);
ibf_load_setup(load, loader_obj, str);
@@ -8312,16 +14973,31 @@ iseq_ibf_load(VALUE str)
return iseq;
}
+const rb_iseq_t *
+rb_iseq_ibf_load_bytes(const char *bytes, size_t size)
+{
+ struct ibf_load *load;
+ rb_iseq_t *iseq;
+ VALUE loader_obj = TypedData_Make_Struct(0, struct ibf_load, &ibf_load_type, load);
+
+ ibf_load_setup_bytes(load, loader_obj, bytes, size);
+ iseq = ibf_load_iseq(load, 0);
+
+ RB_GC_GUARD(loader_obj);
+ return iseq;
+}
+
VALUE
-iseq_ibf_load_extra_data(VALUE str)
+rb_iseq_ibf_load_extra_data(VALUE str)
{
struct ibf_load *load;
VALUE loader_obj = TypedData_Make_Struct(0, struct ibf_load, &ibf_load_type, load);
VALUE extra_str;
ibf_load_setup(load, loader_obj, str);
- extra_str = rb_str_new(load->buff + load->header->size, load->header->extra_size);
+ extra_str = rb_str_new(load->global_buffer.buff + load->header->size, load->header->extra_size);
RB_GC_GUARD(loader_obj);
return extra_str;
}
+#include "prism_compile.c"
diff --git a/complex.c b/complex.c
index fc2cd0e783..85d724f273 100644
--- a/complex.c
+++ b/complex.c
@@ -5,45 +5,51 @@
which is written in ruby.
*/
-#include "ruby/config.h"
+#include "ruby/internal/config.h"
+
#if defined _MSC_VER
/* Microsoft Visual C does not define M_PI and others by default */
# define _USE_MATH_DEFINES 1
#endif
+
+#include <ctype.h>
#include <math.h>
-#include "internal.h"
-#define NDEBUG
+#include "id.h"
+#include "internal.h"
+#include "internal/array.h"
+#include "internal/class.h"
+#include "internal/complex.h"
+#include "internal/math.h"
+#include "internal/numeric.h"
+#include "internal/object.h"
+#include "internal/rational.h"
+#include "internal/string.h"
#include "ruby_assert.h"
#define ZERO INT2FIX(0)
#define ONE INT2FIX(1)
#define TWO INT2FIX(2)
+#if USE_FLONUM
#define RFLOAT_0 DBL2NUM(0)
-#if defined(HAVE_SIGNBIT) && defined(__GNUC__) && defined(__sun) && \
- !defined(signbit)
-extern int signbit(double);
+#else
+static VALUE RFLOAT_0;
#endif
VALUE rb_cComplex;
-static VALUE nucomp_abs(VALUE self);
-static VALUE nucomp_arg(VALUE self);
-
-static ID id_abs, id_arg, id_convert,
- id_denominator, id_eqeq_p, id_expt, id_fdiv,
- id_negate, id_numerator, id_quo,
- id_real_p, id_to_f, id_to_i, id_to_r,
- id_i_real, id_i_imag;
-
-#define f_boolcast(x) ((x) ? Qtrue : Qfalse)
-
-#define binop(n,op) \
-inline static VALUE \
-f_##n(VALUE x, VALUE y)\
-{\
- return rb_funcall(x, (op), 1, y);\
-}
+static ID id_abs, id_arg,
+ id_denominator, id_numerator,
+ id_real_p, id_i_real, id_i_imag,
+ id_finite_p, id_infinite_p, id_rationalize,
+ id_PI;
+#define id_to_i idTo_i
+#define id_to_r idTo_r
+#define id_negate idUMinus
+#define id_expt idPow
+#define id_to_f idTo_f
+#define id_quo idQuo
+#define id_fdiv idFdiv
#define fun1(n) \
inline static VALUE \
@@ -59,31 +65,32 @@ f_##n(VALUE x, VALUE y)\
return rb_funcall(x, id_##n, 1, y);\
}
-#define math1(n) \
-inline static VALUE \
-m_##n(VALUE x)\
-{\
- return rb_funcall(rb_mMath, id_##n, 1, x);\
-}
-
-#define math2(n) \
-inline static VALUE \
-m_##n(VALUE x, VALUE y)\
-{\
- return rb_funcall(rb_mMath, id_##n, 2, x, y);\
-}
-
#define PRESERVE_SIGNEDZERO
inline static VALUE
f_add(VALUE x, VALUE y)
{
-#ifndef PRESERVE_SIGNEDZERO
- if (FIXNUM_P(y) && FIX2LONG(y) == 0)
- return x;
- else if (FIXNUM_P(x) && FIX2LONG(x) == 0)
- return y;
-#endif
+ if (RB_INTEGER_TYPE_P(x) &&
+ LIKELY(rb_method_basic_definition_p(rb_cInteger, idPLUS))) {
+ if (FIXNUM_ZERO_P(x))
+ return y;
+ if (FIXNUM_ZERO_P(y))
+ return x;
+ return rb_int_plus(x, y);
+ }
+ else if (RB_FLOAT_TYPE_P(x) &&
+ LIKELY(rb_method_basic_definition_p(rb_cFloat, idPLUS))) {
+ if (FIXNUM_ZERO_P(y))
+ return x;
+ return rb_float_plus(x, y);
+ }
+ else if (RB_TYPE_P(x, T_RATIONAL) &&
+ LIKELY(rb_method_basic_definition_p(rb_cRational, idPLUS))) {
+ if (FIXNUM_ZERO_P(y))
+ return x;
+ return rb_rational_plus(x, y);
+ }
+
return rb_funcall(x, '+', 1, y);
}
@@ -91,200 +98,306 @@ inline static VALUE
f_div(VALUE x, VALUE y)
{
if (FIXNUM_P(y) && FIX2LONG(y) == 1)
- return x;
+ return x;
return rb_funcall(x, '/', 1, y);
}
-inline static VALUE
+inline static int
f_gt_p(VALUE x, VALUE y)
{
- if (FIXNUM_P(x) && FIXNUM_P(y))
- return f_boolcast(FIX2LONG(x) > FIX2LONG(y));
- return rb_funcall(x, '>', 1, y);
+ if (RB_INTEGER_TYPE_P(x)) {
+ if (FIXNUM_P(x) && FIXNUM_P(y))
+ return (SIGNED_VALUE)x > (SIGNED_VALUE)y;
+ return RTEST(rb_int_gt(x, y));
+ }
+ else if (RB_FLOAT_TYPE_P(x))
+ return RTEST(rb_float_gt(x, y));
+ else if (RB_TYPE_P(x, T_RATIONAL)) {
+ int const cmp = rb_cmpint(rb_rational_cmp(x, y), x, y);
+ return cmp > 0;
+ }
+ return RTEST(rb_funcall(x, '>', 1, y));
}
inline static VALUE
f_mul(VALUE x, VALUE y)
{
-#ifndef PRESERVE_SIGNEDZERO
- if (FIXNUM_P(y)) {
- long iy = FIX2LONG(y);
- if (iy == 0) {
- if (FIXNUM_P(x) || RB_TYPE_P(x, T_BIGNUM))
- return ZERO;
- }
- else if (iy == 1)
- return x;
- }
- else if (FIXNUM_P(x)) {
- long ix = FIX2LONG(x);
- if (ix == 0) {
- if (FIXNUM_P(y) || RB_TYPE_P(y, T_BIGNUM))
- return ZERO;
- }
- else if (ix == 1)
- return y;
+ if (RB_INTEGER_TYPE_P(x) &&
+ LIKELY(rb_method_basic_definition_p(rb_cInteger, idMULT))) {
+ if (FIXNUM_ZERO_P(y))
+ return ZERO;
+ if (FIXNUM_ZERO_P(x) && RB_INTEGER_TYPE_P(y))
+ return ZERO;
+ if (x == ONE) return y;
+ if (y == ONE) return x;
+ return rb_int_mul(x, y);
+ }
+ else if (RB_FLOAT_TYPE_P(x) &&
+ LIKELY(rb_method_basic_definition_p(rb_cFloat, idMULT))) {
+ if (y == ONE) return x;
+ return rb_float_mul(x, y);
+ }
+ else if (RB_TYPE_P(x, T_RATIONAL) &&
+ LIKELY(rb_method_basic_definition_p(rb_cRational, idMULT))) {
+ if (y == ONE) return x;
+ return rb_rational_mul(x, y);
+ }
+ else if (LIKELY(rb_method_basic_definition_p(CLASS_OF(x), idMULT))) {
+ if (y == ONE) return x;
}
-#endif
return rb_funcall(x, '*', 1, y);
}
inline static VALUE
f_sub(VALUE x, VALUE y)
{
-#ifndef PRESERVE_SIGNEDZERO
- if (FIXNUM_P(y) && FIX2LONG(y) == 0)
- return x;
-#endif
+ if (FIXNUM_ZERO_P(y) &&
+ LIKELY(rb_method_basic_definition_p(CLASS_OF(x), idMINUS))) {
+ return x;
+ }
return rb_funcall(x, '-', 1, y);
}
-fun1(abs)
-fun1(arg)
-fun1(denominator)
-fun1(negate)
-fun1(numerator)
-fun1(real_p)
+inline static VALUE
+f_abs(VALUE x)
+{
+ if (RB_INTEGER_TYPE_P(x)) {
+ return rb_int_abs(x);
+ }
+ else if (RB_FLOAT_TYPE_P(x)) {
+ return rb_float_abs(x);
+ }
+ else if (RB_TYPE_P(x, T_RATIONAL)) {
+ return rb_rational_abs(x);
+ }
+ else if (RB_TYPE_P(x, T_COMPLEX)) {
+ return rb_complex_abs(x);
+ }
+ return rb_funcall(x, id_abs, 0);
+}
+
+static VALUE numeric_arg(VALUE self);
+static VALUE float_arg(VALUE self);
+
+inline static VALUE
+f_arg(VALUE x)
+{
+ if (RB_INTEGER_TYPE_P(x)) {
+ return numeric_arg(x);
+ }
+ else if (RB_FLOAT_TYPE_P(x)) {
+ return float_arg(x);
+ }
+ else if (RB_TYPE_P(x, T_RATIONAL)) {
+ return numeric_arg(x);
+ }
+ else if (RB_TYPE_P(x, T_COMPLEX)) {
+ return rb_complex_arg(x);
+ }
+ return rb_funcall(x, id_arg, 0);
+}
+
+inline static VALUE
+f_numerator(VALUE x)
+{
+ if (RB_TYPE_P(x, T_RATIONAL)) {
+ return RRATIONAL(x)->num;
+ }
+ if (RB_FLOAT_TYPE_P(x)) {
+ return rb_float_numerator(x);
+ }
+ return x;
+}
+
+inline static VALUE
+f_denominator(VALUE x)
+{
+ if (RB_TYPE_P(x, T_RATIONAL)) {
+ return RRATIONAL(x)->den;
+ }
+ if (RB_FLOAT_TYPE_P(x)) {
+ return rb_float_denominator(x);
+ }
+ return INT2FIX(1);
+}
+
+inline static VALUE
+f_negate(VALUE x)
+{
+ if (RB_INTEGER_TYPE_P(x)) {
+ return rb_int_uminus(x);
+ }
+ else if (RB_FLOAT_TYPE_P(x)) {
+ return rb_float_uminus(x);
+ }
+ else if (RB_TYPE_P(x, T_RATIONAL)) {
+ return rb_rational_uminus(x);
+ }
+ else if (RB_TYPE_P(x, T_COMPLEX)) {
+ return rb_complex_uminus(x);
+ }
+ return rb_funcall(x, id_negate, 0);
+}
+
+static bool nucomp_real_p(VALUE self);
+
+static inline bool
+f_real_p(VALUE x)
+{
+ if (RB_INTEGER_TYPE_P(x)) {
+ return true;
+ }
+ else if (RB_FLOAT_TYPE_P(x)) {
+ return true;
+ }
+ else if (RB_TYPE_P(x, T_RATIONAL)) {
+ return true;
+ }
+ else if (RB_TYPE_P(x, T_COMPLEX)) {
+ return nucomp_real_p(x);
+ }
+ return rb_funcall(x, id_real_p, 0);
+}
inline static VALUE
f_to_i(VALUE x)
{
if (RB_TYPE_P(x, T_STRING))
- return rb_str_to_inum(x, 10, 0);
+ return rb_str_to_inum(x, 10, 0);
return rb_funcall(x, id_to_i, 0);
}
+
inline static VALUE
f_to_f(VALUE x)
{
if (RB_TYPE_P(x, T_STRING))
- return DBL2NUM(rb_str_to_dbl(x, 0));
+ return DBL2NUM(rb_str_to_dbl(x, 0));
return rb_funcall(x, id_to_f, 0);
}
fun1(to_r)
-inline static VALUE
+inline static int
f_eqeq_p(VALUE x, VALUE y)
{
if (FIXNUM_P(x) && FIXNUM_P(y))
- return f_boolcast(FIX2LONG(x) == FIX2LONG(y));
- return rb_funcall(x, id_eqeq_p, 1, y);
+ return x == y;
+ else if (RB_FLOAT_TYPE_P(x) || RB_FLOAT_TYPE_P(y))
+ return NUM2DBL(x) == NUM2DBL(y);
+ return (int)rb_equal(x, y);
}
fun2(expt)
fun2(fdiv)
-fun2(quo)
-inline static VALUE
+static VALUE
+f_quo(VALUE x, VALUE y)
+{
+ if (RB_INTEGER_TYPE_P(x))
+ return rb_numeric_quo(x, y);
+ if (RB_FLOAT_TYPE_P(x))
+ return rb_float_div(x, y);
+ if (RB_TYPE_P(x, T_RATIONAL))
+ return rb_numeric_quo(x, y);
+
+ return rb_funcallv(x, id_quo, 1, &y);
+}
+
+inline static int
f_negative_p(VALUE x)
{
- if (FIXNUM_P(x))
- return f_boolcast(FIX2LONG(x) < 0);
- return rb_funcall(x, '<', 1, ZERO);
+ if (RB_INTEGER_TYPE_P(x))
+ return INT_NEGATIVE_P(x);
+ else if (RB_FLOAT_TYPE_P(x))
+ return RFLOAT_VALUE(x) < 0.0;
+ else if (RB_TYPE_P(x, T_RATIONAL))
+ return INT_NEGATIVE_P(RRATIONAL(x)->num);
+ return rb_num_negative_p(x);
}
#define f_positive_p(x) (!f_negative_p(x))
-inline static VALUE
+inline static bool
f_zero_p(VALUE x)
{
- if (RB_TYPE_P(x, T_FIXNUM)) {
- return f_boolcast(FIX2LONG(x) == 0);
+ if (RB_FLOAT_TYPE_P(x)) {
+ return FLOAT_ZERO_P(x);
}
- else if (RB_TYPE_P(x, T_BIGNUM)) {
- return Qfalse;
+ else if (RB_INTEGER_TYPE_P(x)) {
+ return FIXNUM_ZERO_P(x);
}
else if (RB_TYPE_P(x, T_RATIONAL)) {
- VALUE num = RRATIONAL(x)->num;
-
- return f_boolcast(FIXNUM_P(num) && FIX2LONG(num) == 0);
+ const VALUE num = RRATIONAL(x)->num;
+ return FIXNUM_ZERO_P(num);
}
- return rb_funcall(x, id_eqeq_p, 1, ZERO);
+ return rb_equal(x, ZERO) != 0;
}
#define f_nonzero_p(x) (!f_zero_p(x))
-inline static VALUE
-f_one_p(VALUE x)
+static inline bool
+always_finite_type_p(VALUE x)
+{
+ if (FIXNUM_P(x)) return true;
+ if (FLONUM_P(x)) return true; /* Infinity can't be a flonum */
+ return (RB_INTEGER_TYPE_P(x) || RB_TYPE_P(x, T_RATIONAL));
+}
+
+inline static int
+f_finite_p(VALUE x)
{
- if (RB_TYPE_P(x, T_FIXNUM)) {
- return f_boolcast(FIX2LONG(x) == 1);
+ if (always_finite_type_p(x)) {
+ return TRUE;
}
- else if (RB_TYPE_P(x, T_BIGNUM)) {
- return Qfalse;
+ else if (RB_FLOAT_TYPE_P(x)) {
+ return isfinite(RFLOAT_VALUE(x));
}
- else if (RB_TYPE_P(x, T_RATIONAL)) {
- VALUE num = RRATIONAL(x)->num;
- VALUE den = RRATIONAL(x)->den;
+ return RTEST(rb_funcallv(x, id_finite_p, 0, 0));
+}
- return f_boolcast(FIXNUM_P(num) && FIX2LONG(num) == 1 &&
- FIXNUM_P(den) && FIX2LONG(den) == 1);
+inline static int
+f_infinite_p(VALUE x)
+{
+ if (always_finite_type_p(x)) {
+ return FALSE;
+ }
+ else if (RB_FLOAT_TYPE_P(x)) {
+ return isinf(RFLOAT_VALUE(x));
}
- return rb_funcall(x, id_eqeq_p, 1, ONE);
+ return RTEST(rb_funcallv(x, id_infinite_p, 0, 0));
}
-inline static VALUE
+inline static int
f_kind_of_p(VALUE x, VALUE c)
{
- return rb_obj_is_kind_of(x, c);
+ return (int)rb_obj_is_kind_of(x, c);
}
-inline static VALUE
+inline static int
k_numeric_p(VALUE x)
{
return f_kind_of_p(x, rb_cNumeric);
}
-inline static VALUE
-k_fixnum_p(VALUE x)
-{
- return f_kind_of_p(x, rb_cFixnum);
-}
-
-inline static VALUE
-k_bignum_p(VALUE x)
-{
- return f_kind_of_p(x, rb_cBignum);
-}
-
-inline static VALUE
-k_float_p(VALUE x)
-{
- return f_kind_of_p(x, rb_cFloat);
-}
-
-inline static VALUE
-k_rational_p(VALUE x)
-{
- return f_kind_of_p(x, rb_cRational);
-}
-
-inline static VALUE
-k_complex_p(VALUE x)
-{
- return f_kind_of_p(x, rb_cComplex);
-}
-
-#define k_exact_p(x) (!k_float_p(x))
+#define k_exact_p(x) (!RB_FLOAT_TYPE_P(x))
#define k_exact_zero_p(x) (k_exact_p(x) && f_zero_p(x))
#define get_dat1(x) \
- struct RComplex *dat;\
- dat = ((struct RComplex *)(x))
+ struct RComplex *dat = RCOMPLEX(x)
#define get_dat2(x,y) \
- struct RComplex *adat, *bdat;\
- adat = ((struct RComplex *)(x));\
- bdat = ((struct RComplex *)(y))
+ struct RComplex *adat = RCOMPLEX(x), *bdat = RCOMPLEX(y)
inline static VALUE
nucomp_s_new_internal(VALUE klass, VALUE real, VALUE imag)
{
- NEWOBJ_OF(obj, struct RComplex, klass, T_COMPLEX | (RGENGC_WB_PROTECTED_COMPLEX ? FL_WB_PROTECTED : 0));
+ NEWOBJ_OF(obj, struct RComplex, klass,
+ T_COMPLEX | (RGENGC_WB_PROTECTED_COMPLEX ? FL_WB_PROTECTED : 0), sizeof(struct RComplex), 0);
RCOMPLEX_SET_REAL(obj, real);
RCOMPLEX_SET_IMAG(obj, imag);
+ OBJ_FREEZE((VALUE)obj);
return (VALUE)obj;
}
@@ -295,119 +408,86 @@ nucomp_s_alloc(VALUE klass)
return nucomp_s_new_internal(klass, ZERO, ZERO);
}
-#if 0
-static VALUE
-nucomp_s_new_bang(int argc, VALUE *argv, VALUE klass)
-{
- VALUE real, imag;
-
- switch (rb_scan_args(argc, argv, "11", &real, &imag)) {
- case 1:
- if (!k_numeric_p(real))
- real = f_to_i(real);
- imag = ZERO;
- break;
- default:
- if (!k_numeric_p(real))
- real = f_to_i(real);
- if (!k_numeric_p(imag))
- imag = f_to_i(imag);
- break;
- }
-
- return nucomp_s_new_internal(klass, real, imag);
-}
-#endif
-
inline static VALUE
f_complex_new_bang1(VALUE klass, VALUE x)
{
- assert(!k_complex_p(x));
+ RUBY_ASSERT(!RB_TYPE_P(x, T_COMPLEX));
return nucomp_s_new_internal(klass, x, ZERO);
}
inline static VALUE
f_complex_new_bang2(VALUE klass, VALUE x, VALUE y)
{
- assert(!k_complex_p(x));
- assert(!k_complex_p(y));
+ RUBY_ASSERT(!RB_TYPE_P(x, T_COMPLEX));
+ RUBY_ASSERT(!RB_TYPE_P(y, T_COMPLEX));
return nucomp_s_new_internal(klass, x, y);
}
-#ifdef CANONICALIZATION_FOR_MATHN
-#define CANON
-#endif
-
-#ifdef CANON
-static int canonicalization = 0;
-
-RUBY_FUNC_EXPORTED void
-nucomp_canonicalization(int f)
-{
- canonicalization = f;
-}
-#else
-#define canonicalization 0
-#endif
-
-inline static void
+WARN_UNUSED_RESULT(inline static VALUE nucomp_real_check(VALUE num));
+inline static VALUE
nucomp_real_check(VALUE num)
{
- if (!RB_TYPE_P(num, T_FIXNUM) &&
- !RB_TYPE_P(num, T_BIGNUM) &&
- !RB_TYPE_P(num, T_FLOAT) &&
- !RB_TYPE_P(num, T_RATIONAL)) {
- if (!k_numeric_p(num) || !f_real_p(num))
- rb_raise(rb_eTypeError, "not a real");
+ if (!RB_INTEGER_TYPE_P(num) &&
+ !RB_FLOAT_TYPE_P(num) &&
+ !RB_TYPE_P(num, T_RATIONAL)) {
+ if (RB_TYPE_P(num, T_COMPLEX) && nucomp_real_p(num)) {
+ VALUE real = RCOMPLEX(num)->real;
+ RUBY_ASSERT(!RB_TYPE_P(real, T_COMPLEX));
+ return real;
+ }
+ if (!k_numeric_p(num) || !f_real_p(num))
+ rb_raise(rb_eTypeError, "not a real");
}
+ return num;
}
inline static VALUE
nucomp_s_canonicalize_internal(VALUE klass, VALUE real, VALUE imag)
{
-#ifdef CANON
-#define CL_CANON
-#ifdef CL_CANON
- if (k_exact_zero_p(imag) && canonicalization)
- return real;
-#else
- if (f_zero_p(imag) && canonicalization)
- return real;
-#endif
-#endif
- if (f_real_p(real) && f_real_p(imag))
- return nucomp_s_new_internal(klass, real, imag);
- else if (f_real_p(real)) {
- get_dat1(imag);
+ int complex_r, complex_i;
+ complex_r = RB_TYPE_P(real, T_COMPLEX);
+ complex_i = RB_TYPE_P(imag, T_COMPLEX);
+ if (!complex_r && !complex_i) {
+ return nucomp_s_new_internal(klass, real, imag);
+ }
+ else if (!complex_r) {
+ get_dat1(imag);
- return nucomp_s_new_internal(klass,
- f_sub(real, dat->imag),
- f_add(ZERO, dat->real));
+ return nucomp_s_new_internal(klass,
+ f_sub(real, dat->imag),
+ f_add(ZERO, dat->real));
}
- else if (f_real_p(imag)) {
- get_dat1(real);
+ else if (!complex_i) {
+ get_dat1(real);
- return nucomp_s_new_internal(klass,
- dat->real,
- f_add(dat->imag, imag));
+ return nucomp_s_new_internal(klass,
+ dat->real,
+ f_add(dat->imag, imag));
}
else {
- get_dat2(real, imag);
+ get_dat2(real, imag);
- return nucomp_s_new_internal(klass,
- f_sub(adat->real, bdat->imag),
- f_add(adat->imag, bdat->real));
+ return nucomp_s_new_internal(klass,
+ f_sub(adat->real, bdat->imag),
+ f_add(adat->imag, bdat->real));
}
}
/*
* call-seq:
- * Complex.rect(real[, imag]) -> complex
- * Complex.rectangular(real[, imag]) -> complex
+ * Complex.rect(real, imag = 0) -> complex
*
- * Returns a complex object which denotes the given rectangular form.
+ * Returns a new \Complex object formed from the arguments,
+ * each of which must be an instance of Numeric,
+ * or an instance of one of its subclasses:
+ * \Complex, Float, Integer, Rational;
+ * see {Rectangular Coordinates}[rdoc-ref:Complex@Rectangular+Coordinates]:
*
- * Complex.rectangular(1, 2) #=> (1+2i)
+ * Complex.rect(3) # => (3+0i)
+ * Complex.rect(3, Math::PI) # => (3+3.141592653589793i)
+ * Complex.rect(-3, -Math::PI) # => (-3-3.141592653589793i)
+ *
+ * \Complex.rectangular is an alias for \Complex.rect.
*/
static VALUE
nucomp_s_new(int argc, VALUE *argv, VALUE klass)
@@ -416,62 +496,99 @@ nucomp_s_new(int argc, VALUE *argv, VALUE klass)
switch (rb_scan_args(argc, argv, "11", &real, &imag)) {
case 1:
- nucomp_real_check(real);
- imag = ZERO;
- break;
+ real = nucomp_real_check(real);
+ imag = ZERO;
+ break;
default:
- nucomp_real_check(real);
- nucomp_real_check(imag);
- break;
+ real = nucomp_real_check(real);
+ imag = nucomp_real_check(imag);
+ break;
}
- return nucomp_s_canonicalize_internal(klass, real, imag);
+ return nucomp_s_new_internal(klass, real, imag);
}
inline static VALUE
f_complex_new2(VALUE klass, VALUE x, VALUE y)
{
- assert(!k_complex_p(x));
+ if (RB_TYPE_P(x, T_COMPLEX)) {
+ get_dat1(x);
+ x = dat->real;
+ y = f_add(dat->imag, y);
+ }
return nucomp_s_canonicalize_internal(klass, x, y);
}
+static VALUE nucomp_convert(VALUE klass, VALUE a1, VALUE a2, int raise);
+static VALUE nucomp_s_convert(int argc, VALUE *argv, VALUE klass);
+
/*
* call-seq:
- * Complex(x[, y]) -> numeric
- *
- * Returns x+i*y;
- *
- * Complex(1, 2) #=> (1+2i)
- * Complex('1+2i') #=> (1+2i)
- * Complex(nil) #=> TypeError
- * Complex(1, nil) #=> TypeError
- *
- * Syntax of string form:
- *
- * string form = extra spaces , complex , extra spaces ;
- * complex = real part | [ sign ] , imaginary part
- * | real part , sign , imaginary part
- * | rational , "@" , rational ;
- * real part = rational ;
- * imaginary part = imaginary unit | unsigned rational , imaginary unit ;
- * rational = [ sign ] , unsigned rational ;
- * unsigned rational = numerator | numerator , "/" , denominator ;
- * numerator = integer part | fractional part | integer part , fractional part ;
- * denominator = digits ;
- * integer part = digits ;
- * fractional part = "." , digits , [ ( "e" | "E" ) , [ sign ] , digits ] ;
- * imaginary unit = "i" | "I" | "j" | "J" ;
- * sign = "-" | "+" ;
- * digits = digit , { digit | "_" , digit };
- * digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
- * extra spaces = ? \s* ? ;
- *
- * See String#to_c.
+ * Complex(real, imag = 0, exception: true) -> complex or nil
+ * Complex(s, exception: true) -> complex or nil
+ *
+ * Returns a new \Complex object if the arguments are valid;
+ * otherwise raises an exception if +exception+ is +true+;
+ * otherwise returns +nil+.
+ *
+ * With Numeric arguments +real+ and +imag+,
+ * returns <tt>Complex.rect(real, imag)</tt> if the arguments are valid.
+ *
+ * With string argument +s+, returns a new \Complex object if the argument is valid;
+ * the string may have:
+ *
+ * - One or two numeric substrings,
+ * each of which specifies a Complex, Float, Integer, Numeric, or Rational value,
+ * specifying {rectangular coordinates}[rdoc-ref:Complex@Rectangular+Coordinates]:
+ *
+ * - Sign-separated real and imaginary numeric substrings
+ * (with trailing character <tt>'i'</tt>):
+ *
+ * Complex('1+2i') # => (1+2i)
+ * Complex('+1+2i') # => (1+2i)
+ * Complex('+1-2i') # => (1-2i)
+ * Complex('-1+2i') # => (-1+2i)
+ * Complex('-1-2i') # => (-1-2i)
+ *
+ * - Real-only numeric string (without trailing character <tt>'i'</tt>):
+ *
+ * Complex('1') # => (1+0i)
+ * Complex('+1') # => (1+0i)
+ * Complex('-1') # => (-1+0i)
+ *
+ * - Imaginary-only numeric string (with trailing character <tt>'i'</tt>):
+ *
+ * Complex('1i') # => (0+1i)
+ * Complex('+1i') # => (0+1i)
+ * Complex('-1i') # => (0-1i)
+ *
+ * - At-sign separated real and imaginary rational substrings,
+ * each of which specifies a Rational value,
+ * specifying {polar coordinates}[rdoc-ref:Complex@Polar+Coordinates]:
+ *
+ * Complex('1/2@3/4') # => (0.36584443443691045+0.34081938001166706i)
+ * Complex('+1/2@+3/4') # => (0.36584443443691045+0.34081938001166706i)
+ * Complex('+1/2@-3/4') # => (0.36584443443691045-0.34081938001166706i)
+ * Complex('-1/2@+3/4') # => (-0.36584443443691045-0.34081938001166706i)
+ * Complex('-1/2@-3/4') # => (-0.36584443443691045+0.34081938001166706i)
+ *
*/
static VALUE
nucomp_f_complex(int argc, VALUE *argv, VALUE klass)
{
- return rb_funcall2(rb_cComplex, id_convert, argc, argv);
+ VALUE a1, a2, opts = Qnil;
+ int raise = TRUE;
+
+ if (rb_scan_args(argc, argv, "11:", &a1, &a2, &opts) == 1) {
+ a2 = Qundef;
+ }
+ if (!NIL_P(opts)) {
+ raise = rb_opts_exception_p(opts, raise);
+ }
+ if (argc > 0 && CLASS_OF(a1) == rb_cComplex && UNDEF_P(a2)) {
+ return a1;
+ }
+ return nucomp_convert(rb_cComplex, a1, a2, raise);
}
#define imp1(n) \
@@ -481,20 +598,9 @@ m_##n##_bang(VALUE x)\
return rb_math_##n(x);\
}
-#define imp2(n) \
-inline static VALUE \
-m_##n##_bang(VALUE x, VALUE y)\
-{\
- return rb_math_##n(x, y);\
-}
-
-imp2(atan2)
imp1(cos)
imp1(cosh)
imp1(exp)
-imp2(hypot)
-
-#define m_hypot(x,y) m_hypot_bang((x),(y))
static VALUE
m_log_bang(VALUE x)
@@ -508,142 +614,161 @@ imp1(sinh)
static VALUE
m_cos(VALUE x)
{
- if (f_real_p(x))
- return m_cos_bang(x);
+ if (!RB_TYPE_P(x, T_COMPLEX))
+ return m_cos_bang(x);
{
- get_dat1(x);
- return f_complex_new2(rb_cComplex,
- f_mul(m_cos_bang(dat->real),
- m_cosh_bang(dat->imag)),
- f_mul(f_negate(m_sin_bang(dat->real)),
- m_sinh_bang(dat->imag)));
+ get_dat1(x);
+ return f_complex_new2(rb_cComplex,
+ f_mul(m_cos_bang(dat->real),
+ m_cosh_bang(dat->imag)),
+ f_mul(f_negate(m_sin_bang(dat->real)),
+ m_sinh_bang(dat->imag)));
}
}
static VALUE
m_sin(VALUE x)
{
- if (f_real_p(x))
- return m_sin_bang(x);
+ if (!RB_TYPE_P(x, T_COMPLEX))
+ return m_sin_bang(x);
{
- get_dat1(x);
- return f_complex_new2(rb_cComplex,
- f_mul(m_sin_bang(dat->real),
- m_cosh_bang(dat->imag)),
- f_mul(m_cos_bang(dat->real),
- m_sinh_bang(dat->imag)));
+ get_dat1(x);
+ return f_complex_new2(rb_cComplex,
+ f_mul(m_sin_bang(dat->real),
+ m_cosh_bang(dat->imag)),
+ f_mul(m_cos_bang(dat->real),
+ m_sinh_bang(dat->imag)));
}
}
-#if 0
-imp1(sqrt)
-
static VALUE
-m_sqrt(VALUE x)
+f_complex_polar_real(VALUE klass, VALUE x, VALUE y)
{
- if (f_real_p(x)) {
- if (f_positive_p(x))
- return m_sqrt_bang(x);
- return f_complex_new2(rb_cComplex, ZERO, m_sqrt_bang(f_negate(x)));
+ if (f_zero_p(x) || f_zero_p(y)) {
+ return nucomp_s_new_internal(klass, x, RFLOAT_0);
}
- else {
- get_dat1(x);
-
- if (f_negative_p(dat->imag))
- return f_conj(m_sqrt(f_conj(x)));
- else {
- VALUE a = f_abs(x);
- return f_complex_new2(rb_cComplex,
- m_sqrt_bang(f_div(f_add(a, dat->real), TWO)),
- m_sqrt_bang(f_div(f_sub(a, dat->real), TWO)));
- }
+ if (RB_FLOAT_TYPE_P(y)) {
+ const double arg = RFLOAT_VALUE(y);
+ if (arg == M_PI) {
+ x = f_negate(x);
+ y = RFLOAT_0;
+ }
+ else if (arg == M_PI_2) {
+ y = x;
+ x = RFLOAT_0;
+ }
+ else if (arg == M_PI_2+M_PI) {
+ y = f_negate(x);
+ x = RFLOAT_0;
+ }
+ else if (RB_FLOAT_TYPE_P(x)) {
+ const double abs = RFLOAT_VALUE(x);
+ const double real = abs * cos(arg), imag = abs * sin(arg);
+ x = DBL2NUM(real);
+ y = DBL2NUM(imag);
+ }
+ else {
+ const double ax = sin(arg), ay = cos(arg);
+ y = f_mul(x, DBL2NUM(ax));
+ x = f_mul(x, DBL2NUM(ay));
+ }
+ return nucomp_s_new_internal(klass, x, y);
}
+ return nucomp_s_canonicalize_internal(klass,
+ f_mul(x, m_cos(y)),
+ f_mul(x, m_sin(y)));
}
-#endif
static VALUE
f_complex_polar(VALUE klass, VALUE x, VALUE y)
{
- assert(!k_complex_p(x));
- assert(!k_complex_p(y));
- if (f_zero_p(x) || f_zero_p(y)) {
- if (canonicalization) return x;
- return nucomp_s_new_internal(klass, x, RFLOAT_0);
+ x = nucomp_real_check(x);
+ y = nucomp_real_check(y);
+ return f_complex_polar_real(klass, x, y);
+}
+
+#ifdef HAVE___COSPI
+# define cospi(x) __cospi(x)
+#else
+# define cospi(x) cos((x) * M_PI)
+#endif
+#ifdef HAVE___SINPI
+# define sinpi(x) __sinpi(x)
+#else
+# define sinpi(x) sin((x) * M_PI)
+#endif
+/* returns a Complex or Float of ang*PI-rotated abs */
+VALUE
+rb_dbl_complex_new_polar_pi(double abs, double ang)
+{
+ double fi;
+ const double fr = modf(ang, &fi);
+ int pos = fr == +0.5;
+
+ if (pos || fr == -0.5) {
+ if ((modf(fi / 2.0, &fi) != fr) ^ pos) abs = -abs;
+ return rb_complex_new(RFLOAT_0, DBL2NUM(abs));
}
- if (RB_FLOAT_TYPE_P(y)) {
- const double arg = RFLOAT_VALUE(y);
- if (arg == M_PI) {
- x = f_negate(x);
- if (canonicalization) return x;
- y = RFLOAT_0;
- }
- else if (arg == M_PI_2) {
- y = x;
- x = RFLOAT_0;
- }
- else if (arg == M_PI_2+M_PI) {
- y = f_negate(x);
- x = RFLOAT_0;
- }
- else if (RB_FLOAT_TYPE_P(x)) {
- const double abs = RFLOAT_VALUE(x);
- const double real = abs * cos(arg), imag = abs * sin(arg);
- x = DBL2NUM(real);
- if (canonicalization && imag == 0.0) return x;
- y = DBL2NUM(imag);
- }
- else {
- y = f_mul(x, DBL2NUM(sin(arg)));
- x = f_mul(x, DBL2NUM(cos(arg)));
- if (canonicalization && f_zero_p(y)) return x;
- }
- return nucomp_s_new_internal(klass, x, y);
+ else if (fr == 0.0) {
+ if (modf(fi / 2.0, &fi) != 0.0) abs = -abs;
+ return DBL2NUM(abs);
+ }
+ else {
+ const double real = abs * cospi(ang), imag = abs * sinpi(ang);
+ return rb_complex_new(DBL2NUM(real), DBL2NUM(imag));
}
- return nucomp_s_canonicalize_internal(klass,
- f_mul(x, m_cos(y)),
- f_mul(x, m_sin(y)));
}
/*
* call-seq:
- * Complex.polar(abs[, arg]) -> complex
+ * Complex.polar(abs, arg = 0) -> complex
*
- * Returns a complex object which denotes the given polar form.
+ * Returns a new \Complex object formed from the arguments,
+ * each of which must be an instance of Numeric,
+ * or an instance of one of its subclasses:
+ * \Complex, Float, Integer, Rational.
+ * Argument +arg+ is given in radians;
+ * see {Polar Coordinates}[rdoc-ref:Complex@Polar+Coordinates]:
+ *
+ * Complex.polar(3) # => (3+0i)
+ * Complex.polar(3, 2.0) # => (-1.2484405096414273+2.727892280477045i)
+ * Complex.polar(-3, -2.0) # => (1.2484405096414273+2.727892280477045i)
*
- * Complex.polar(3, 0) #=> (3.0+0.0i)
- * Complex.polar(3, Math::PI/2) #=> (1.836909530733566e-16+3.0i)
- * Complex.polar(3, Math::PI) #=> (-3.0+3.673819061467132e-16i)
- * Complex.polar(3, -Math::PI/2) #=> (1.836909530733566e-16-3.0i)
*/
static VALUE
nucomp_s_polar(int argc, VALUE *argv, VALUE klass)
{
VALUE abs, arg;
- switch (rb_scan_args(argc, argv, "11", &abs, &arg)) {
- case 1:
- nucomp_real_check(abs);
- if (canonicalization) return abs;
- return nucomp_s_new_internal(klass, abs, ZERO);
- default:
- nucomp_real_check(abs);
- nucomp_real_check(arg);
- break;
+ argc = rb_scan_args(argc, argv, "11", &abs, &arg);
+ abs = nucomp_real_check(abs);
+ if (argc == 2) {
+ arg = nucomp_real_check(arg);
+ }
+ else {
+ arg = ZERO;
}
- return f_complex_polar(klass, abs, arg);
+ return f_complex_polar_real(klass, abs, arg);
}
/*
* call-seq:
- * cmp.real -> real
+ * real -> numeric
+ *
+ * Returns the real value for +self+:
*
- * Returns the real part.
+ * Complex.rect(7).real # => 7
+ * Complex.rect(9, -4).real # => 9
+ *
+ * If +self+ was created with
+ * {polar coordinates}[rdoc-ref:Complex@Polar+Coordinates], the returned value
+ * is computed, and may be inexact:
+ *
+ * Complex.polar(1, Math::PI/4).real # => 0.7071067811865476 # Square root of 2.
*
- * Complex(7).real #=> 7
- * Complex(9, -4).real #=> 9
*/
-static VALUE
-nucomp_real(VALUE self)
+VALUE
+rb_complex_real(VALUE self)
{
get_dat1(self);
return dat->real;
@@ -651,16 +776,22 @@ nucomp_real(VALUE self)
/*
* call-seq:
- * cmp.imag -> real
- * cmp.imaginary -> real
+ * imag -> numeric
*
- * Returns the imaginary part.
+ * Returns the imaginary value for +self+:
+ *
+ * Complex.rect(7).imag # => 0
+ * Complex.rect(9, -4).imag # => -4
+ *
+ * If +self+ was created with
+ * {polar coordinates}[rdoc-ref:Complex@Polar+Coordinates], the returned value
+ * is computed, and may be inexact:
+ *
+ * Complex.polar(1, Math::PI/4).imag # => 0.7071067811865476 # Square root of 2.
*
- * Complex(7).imaginary #=> 0
- * Complex(9, -4).imaginary #=> -4
*/
-static VALUE
-nucomp_imag(VALUE self)
+VALUE
+rb_complex_imag(VALUE self)
{
get_dat1(self);
return dat->imag;
@@ -668,185 +799,198 @@ nucomp_imag(VALUE self)
/*
* call-seq:
- * -cmp -> complex
+ * -self -> complex
+ *
+ * Returns +self+, negated, which is the negation of each of its parts:
*
- * Returns negation of the value.
+ * -Complex.rect(1, 2) # => (-1-2i)
+ * -Complex.rect(-1, -2) # => (1+2i)
*
- * -Complex(1, 2) #=> (-1-2i)
*/
-static VALUE
-nucomp_negate(VALUE self)
+VALUE
+rb_complex_uminus(VALUE self)
{
- get_dat1(self);
- return f_complex_new2(CLASS_OF(self),
- f_negate(dat->real), f_negate(dat->imag));
+ get_dat1(self);
+ return f_complex_new2(CLASS_OF(self),
+ f_negate(dat->real), f_negate(dat->imag));
}
-inline static VALUE
-f_addsub(VALUE self, VALUE other,
- VALUE (*func)(VALUE, VALUE), ID id)
+/*
+ * call-seq:
+ * self + other -> numeric
+ *
+ * Returns the sum of +self+ and +other+:
+ *
+ * Complex(1, 2) + 0 # => (1+2i)
+ * Complex(1, 2) + 1 # => (2+2i)
+ * Complex(1, 2) + -1 # => (0+2i)
+ *
+ * Complex(1, 2) + 1.0 # => (2.0+2i)
+ *
+ * Complex(1, 2) + Complex(2, 1) # => (3+3i)
+ * Complex(1, 2) + Complex(2.0, 1.0) # => (3.0+3.0i)
+ *
+ * Complex(1, 2) + Rational(1, 1) # => ((2/1)+2i)
+ * Complex(1, 2) + Rational(1, 2) # => ((3/2)+2i)
+ *
+ * For a computation involving Floats, the result may be inexact (see Float#+):
+ *
+ * Complex(1, 2) + 3.14 # => (4.140000000000001+2i)
+ */
+VALUE
+rb_complex_plus(VALUE self, VALUE other)
{
- if (k_complex_p(other)) {
- VALUE real, imag;
+ if (RB_TYPE_P(other, T_COMPLEX)) {
+ VALUE real, imag;
- get_dat2(self, other);
+ get_dat2(self, other);
- real = (*func)(adat->real, bdat->real);
- imag = (*func)(adat->imag, bdat->imag);
+ real = f_add(adat->real, bdat->real);
+ imag = f_add(adat->imag, bdat->imag);
- return f_complex_new2(CLASS_OF(self), real, imag);
+ return f_complex_new2(CLASS_OF(self), real, imag);
}
if (k_numeric_p(other) && f_real_p(other)) {
- get_dat1(self);
+ get_dat1(self);
- return f_complex_new2(CLASS_OF(self),
- (*func)(dat->real, other), dat->imag);
+ return f_complex_new2(CLASS_OF(self),
+ f_add(dat->real, other), dat->imag);
}
- return rb_num_coerce_bin(self, other, id);
+ return rb_num_coerce_bin(self, other, '+');
}
/*
* call-seq:
- * cmp + numeric -> complex
+ * self - other -> complex
+ *
+ * Returns the difference of +self+ and +other+:
*
- * Performs addition.
+ * Complex.rect(2, 3) - Complex.rect(2, 3) # => (0+0i)
+ * Complex.rect(900) - Complex.rect(1) # => (899+0i)
+ * Complex.rect(-2, 9) - Complex.rect(-9, 2) # => (7+7i)
+ * Complex.rect(9, 8) - 4 # => (5+8i)
+ * Complex.rect(20, 9) - 9.8 # => (10.2+9i)
*
- * Complex(2, 3) + Complex(2, 3) #=> (4+6i)
- * Complex(900) + Complex(1) #=> (901+0i)
- * Complex(-2, 9) + Complex(-9, 2) #=> (-11+11i)
- * Complex(9, 8) + 4 #=> (13+8i)
- * Complex(20, 9) + 9.8 #=> (29.8+9i)
*/
VALUE
-rb_nucomp_add(VALUE self, VALUE other)
+rb_complex_minus(VALUE self, VALUE other)
{
- return f_addsub(self, other, f_add, '+');
-}
-#define nucomp_add rb_nucomp_add
+ if (RB_TYPE_P(other, T_COMPLEX)) {
+ VALUE real, imag;
-/*
- * call-seq:
- * cmp - numeric -> complex
- *
- * Performs subtraction.
- *
- * Complex(2, 3) - Complex(2, 3) #=> (0+0i)
- * Complex(900) - Complex(1) #=> (899+0i)
- * Complex(-2, 9) - Complex(-9, 2) #=> (7+7i)
- * Complex(9, 8) - 4 #=> (5+8i)
- * Complex(20, 9) - 9.8 #=> (10.2+9i)
- */
-static VALUE
-nucomp_sub(VALUE self, VALUE other)
-{
- return f_addsub(self, other, f_sub, '-');
+ get_dat2(self, other);
+
+ real = f_sub(adat->real, bdat->real);
+ imag = f_sub(adat->imag, bdat->imag);
+
+ return f_complex_new2(CLASS_OF(self), real, imag);
+ }
+ if (k_numeric_p(other) && f_real_p(other)) {
+ get_dat1(self);
+
+ return f_complex_new2(CLASS_OF(self),
+ f_sub(dat->real, other), dat->imag);
+ }
+ return rb_num_coerce_bin(self, other, '-');
}
static VALUE
-safe_mul(VALUE a, VALUE b, int az, int bz)
+safe_mul(VALUE a, VALUE b, bool az, bool bz)
{
double v;
if (!az && bz && RB_FLOAT_TYPE_P(a) && (v = RFLOAT_VALUE(a), !isnan(v))) {
- a = signbit(v) ? DBL2NUM(-1.0) : DBL2NUM(1.0);
+ a = signbit(v) ? DBL2NUM(-1.0) : DBL2NUM(1.0);
}
if (!bz && az && RB_FLOAT_TYPE_P(b) && (v = RFLOAT_VALUE(b), !isnan(v))) {
- b = signbit(v) ? DBL2NUM(-1.0) : DBL2NUM(1.0);
+ b = signbit(v) ? DBL2NUM(-1.0) : DBL2NUM(1.0);
}
return f_mul(a, b);
}
+static void
+comp_mul(VALUE areal, VALUE aimag, VALUE breal, VALUE bimag, VALUE *real, VALUE *imag)
+{
+ bool arzero = f_zero_p(areal);
+ bool aizero = f_zero_p(aimag);
+ bool brzero = f_zero_p(breal);
+ bool bizero = f_zero_p(bimag);
+ *real = f_sub(safe_mul(areal, breal, arzero, brzero),
+ safe_mul(aimag, bimag, aizero, bizero));
+ *imag = f_add(safe_mul(areal, bimag, arzero, bizero),
+ safe_mul(aimag, breal, aizero, brzero));
+}
+
/*
* call-seq:
- * cmp * numeric -> complex
+ * self * other -> numeric
*
- * Performs multiplication.
+ * Returns the numeric product of +self+ and +other+:
+ *
+ * Complex.rect(9, 8) * 4 # => (36+32i)
+ * Complex.rect(20, 9) * 9.8 # => (196.0+88.2i)
+ * Complex.rect(2, 3) * Complex.rect(2, 3) # => (-5+12i)
+ * Complex.rect(900) * Complex.rect(1) # => (900+0i)
+ * Complex.rect(-2, 9) * Complex.rect(-9, 2) # => (0-85i)
+ * Complex.rect(9, 8) * Rational(2, 3) # => ((6/1)+(16/3)*i)
*
- * Complex(2, 3) * Complex(2, 3) #=> (-5+12i)
- * Complex(900) * Complex(1) #=> (900+0i)
- * Complex(-2, 9) * Complex(-9, 2) #=> (0-85i)
- * Complex(9, 8) * 4 #=> (36+32i)
- * Complex(20, 9) * 9.8 #=> (196.0+88.2i)
*/
VALUE
-rb_nucomp_mul(VALUE self, VALUE other)
+rb_complex_mul(VALUE self, VALUE other)
{
- if (k_complex_p(other)) {
- VALUE real, imag;
- VALUE areal, aimag, breal, bimag;
- int arzero, aizero, brzero, bizero;
-
- get_dat2(self, other);
+ if (RB_TYPE_P(other, T_COMPLEX)) {
+ VALUE real, imag;
+ get_dat2(self, other);
- arzero = !!f_zero_p(areal = adat->real);
- aizero = !!f_zero_p(aimag = adat->imag);
- brzero = !!f_zero_p(breal = bdat->real);
- bizero = !!f_zero_p(bimag = bdat->imag);
- real = f_sub(safe_mul(areal, breal, arzero, brzero),
- safe_mul(aimag, bimag, aizero, bizero));
- imag = f_add(safe_mul(areal, bimag, arzero, bizero),
- safe_mul(aimag, breal, aizero, brzero));
+ comp_mul(adat->real, adat->imag, bdat->real, bdat->imag, &real, &imag);
- return f_complex_new2(CLASS_OF(self), real, imag);
+ return f_complex_new2(CLASS_OF(self), real, imag);
}
if (k_numeric_p(other) && f_real_p(other)) {
- get_dat1(self);
+ get_dat1(self);
- return f_complex_new2(CLASS_OF(self),
- f_mul(dat->real, other),
- f_mul(dat->imag, other));
+ return f_complex_new2(CLASS_OF(self),
+ f_mul(dat->real, other),
+ f_mul(dat->imag, other));
}
return rb_num_coerce_bin(self, other, '*');
}
-#define nucomp_mul rb_nucomp_mul
inline static VALUE
f_divide(VALUE self, VALUE other,
- VALUE (*func)(VALUE, VALUE), ID id)
-{
- if (k_complex_p(other)) {
- int flo;
- get_dat2(self, other);
-
- flo = (k_float_p(adat->real) || k_float_p(adat->imag) ||
- k_float_p(bdat->real) || k_float_p(bdat->imag));
-
- if (f_gt_p(f_abs(bdat->real), f_abs(bdat->imag))) {
- VALUE r, n;
-
- r = (*func)(bdat->imag, bdat->real);
- n = f_mul(bdat->real, f_add(ONE, f_mul(r, r)));
- if (flo)
- return f_complex_new2(CLASS_OF(self),
- (*func)(self, n),
- (*func)(f_negate(f_mul(self, r)), n));
- return f_complex_new2(CLASS_OF(self),
- (*func)(f_add(adat->real,
- f_mul(adat->imag, r)), n),
- (*func)(f_sub(adat->imag,
- f_mul(adat->real, r)), n));
- }
- else {
- VALUE r, n;
-
- r = (*func)(bdat->real, bdat->imag);
- n = f_mul(bdat->imag, f_add(ONE, f_mul(r, r)));
- if (flo)
- return f_complex_new2(CLASS_OF(self),
- (*func)(f_mul(self, r), n),
- (*func)(f_negate(self), n));
- return f_complex_new2(CLASS_OF(self),
- (*func)(f_add(f_mul(adat->real, r),
- adat->imag), n),
- (*func)(f_sub(f_mul(adat->imag, r),
- adat->real), n));
- }
+ VALUE (*func)(VALUE, VALUE), ID id)
+{
+ if (RB_TYPE_P(other, T_COMPLEX)) {
+ VALUE r, n, x, y;
+ int flo;
+ get_dat2(self, other);
+
+ flo = (RB_FLOAT_TYPE_P(adat->real) || RB_FLOAT_TYPE_P(adat->imag) ||
+ RB_FLOAT_TYPE_P(bdat->real) || RB_FLOAT_TYPE_P(bdat->imag));
+
+ if (f_gt_p(f_abs(bdat->real), f_abs(bdat->imag))) {
+ r = (*func)(bdat->imag, bdat->real);
+ n = f_mul(bdat->real, f_add(ONE, f_mul(r, r)));
+ x = (*func)(f_add(adat->real, f_mul(adat->imag, r)), n);
+ y = (*func)(f_sub(adat->imag, f_mul(adat->real, r)), n);
+ }
+ else {
+ r = (*func)(bdat->real, bdat->imag);
+ n = f_mul(bdat->imag, f_add(ONE, f_mul(r, r)));
+ x = (*func)(f_add(f_mul(adat->real, r), adat->imag), n);
+ y = (*func)(f_sub(f_mul(adat->imag, r), adat->real), n);
+ }
+ if (!flo) {
+ x = rb_rational_canonicalize(x);
+ y = rb_rational_canonicalize(y);
+ }
+ return f_complex_new2(CLASS_OF(self), x, y);
}
if (k_numeric_p(other) && f_real_p(other)) {
- get_dat1(self);
-
- return f_complex_new2(CLASS_OF(self),
- (*func)(dat->real, other),
- (*func)(dat->imag, other));
+ VALUE x, y;
+ get_dat1(self);
+ x = rb_rational_canonicalize((*func)(dat->real, other));
+ y = rb_rational_canonicalize((*func)(dat->imag, other));
+ return f_complex_new2(CLASS_OF(self), x, y);
}
return rb_num_coerce_bin(self, other, id);
}
@@ -855,32 +999,33 @@ f_divide(VALUE self, VALUE other,
/*
* call-seq:
- * cmp / numeric -> complex
- * cmp.quo(numeric) -> complex
+ * self / other -> complex
+ *
+ * Returns the quotient of +self+ and +other+:
*
- * Performs division.
+ * Complex.rect(2, 3) / Complex.rect(2, 3) # => (1+0i)
+ * Complex.rect(900) / Complex.rect(1) # => (900+0i)
+ * Complex.rect(-2, 9) / Complex.rect(-9, 2) # => ((36/85)-(77/85)*i)
+ * Complex.rect(9, 8) / 4 # => ((9/4)+2i)
+ * Complex.rect(20, 9) / 9.8 # => (2.0408163265306123+0.9183673469387754i)
*
- * Complex(2, 3) / Complex(2, 3) #=> ((1/1)+(0/1)*i)
- * Complex(900) / Complex(1) #=> ((900/1)+(0/1)*i)
- * Complex(-2, 9) / Complex(-9, 2) #=> ((36/85)-(77/85)*i)
- * Complex(9, 8) / 4 #=> ((9/4)+(2/1)*i)
- * Complex(20, 9) / 9.8 #=> (2.0408163265306123+0.9183673469387754i)
*/
-static VALUE
-nucomp_div(VALUE self, VALUE other)
+VALUE
+rb_complex_div(VALUE self, VALUE other)
{
return f_divide(self, other, f_quo, id_quo);
}
-#define nucomp_quo nucomp_div
+#define nucomp_quo rb_complex_div
/*
* call-seq:
- * cmp.fdiv(numeric) -> complex
+ * fdiv(numeric) -> new_complex
*
- * Performs division as each part is a float, never returns a float.
+ * Returns <tt>Complex.rect(self.real/numeric, self.imag/numeric)</tt>:
+ *
+ * Complex.rect(11, 22).fdiv(3) # => (3.6666666666666665+7.333333333333333i)
*
- * Complex(11, 22).fdiv(3) #=> (3.6666666666666665+7.333333333333333i)
*/
static VALUE
nucomp_fdiv(VALUE self, VALUE other)
@@ -894,209 +1039,394 @@ f_reciprocal(VALUE x)
return f_quo(ONE, x);
}
-/*
- * call-seq:
- * cmp ** numeric -> complex
- *
- * Performs exponentiation.
- *
- * Complex('i') ** 2 #=> (-1+0i)
- * Complex(-8) ** Rational(1, 3) #=> (1.0000000000000002+1.7320508075688772i)
- */
static VALUE
-nucomp_expt(VALUE self, VALUE other)
+zero_for(VALUE x)
{
- if (k_numeric_p(other) && k_exact_zero_p(other))
- return f_complex_new_bang1(CLASS_OF(self), ONE);
-
- if (k_rational_p(other) && f_one_p(f_denominator(other)))
- other = f_numerator(other); /* c14n */
+ if (RB_FLOAT_TYPE_P(x))
+ return DBL2NUM(0);
+ if (RB_TYPE_P(x, T_RATIONAL))
+ return rb_rational_new(INT2FIX(0), INT2FIX(1));
- if (k_complex_p(other)) {
- get_dat1(other);
+ return INT2FIX(0);
+}
- if (k_exact_zero_p(dat->imag))
- other = dat->real; /* c14n */
+static VALUE
+complex_pow_for_special_angle(VALUE self, VALUE other)
+{
+ if (!rb_integer_type_p(other)) {
+ return Qundef;
}
- if (k_complex_p(other)) {
- VALUE r, theta, nr, ntheta;
-
- get_dat1(other);
-
- r = f_abs(self);
- theta = f_arg(self);
-
- nr = m_exp_bang(f_sub(f_mul(dat->real, m_log_bang(r)),
- f_mul(dat->imag, theta)));
- ntheta = f_add(f_mul(theta, dat->real),
- f_mul(dat->imag, m_log_bang(r)));
- return f_complex_polar(CLASS_OF(self), nr, ntheta);
+ get_dat1(self);
+ VALUE x = Qundef;
+ int dir;
+ if (f_zero_p(dat->imag)) {
+ x = dat->real;
+ dir = 0;
+ }
+ else if (f_zero_p(dat->real)) {
+ x = dat->imag;
+ dir = 2;
+ }
+ else if (f_eqeq_p(dat->real, dat->imag)) {
+ x = dat->real;
+ dir = 1;
+ }
+ else if (f_eqeq_p(dat->real, f_negate(dat->imag))) {
+ x = dat->imag;
+ dir = 3;
+ }
+ else {
+ dir = 0;
}
- if (k_fixnum_p(other)) {
- if (f_gt_p(other, ZERO)) {
- VALUE x, z;
- long n;
- x = self;
- z = x;
- n = FIX2LONG(other) - 1;
+ if (UNDEF_P(x)) return x;
- while (n) {
- long q, r;
+ if (f_negative_p(x)) {
+ x = f_negate(x);
+ dir += 4;
+ }
- while (1) {
- get_dat1(x);
+ VALUE zx;
+ if (dir % 2 == 0) {
+ zx = rb_num_pow(x, other);
+ }
+ else {
+ zx = rb_num_pow(
+ rb_funcall(rb_int_mul(TWO, x), '*', 1, x),
+ rb_int_div(other, TWO)
+ );
+ if (rb_int_odd_p(other)) {
+ zx = rb_funcall(zx, '*', 1, x);
+ }
+ }
+ static const int dirs[][2] = {
+ {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}
+ };
+ int z_dir = FIX2INT(rb_int_modulo(rb_int_mul(INT2FIX(dir), other), INT2FIX(8)));
- q = n / 2;
- r = n % 2;
+ VALUE zr = Qfalse, zi = Qfalse;
+ switch (dirs[z_dir][0]) {
+ case 0: zr = zero_for(zx); break;
+ case 1: zr = zx; break;
+ case -1: zr = f_negate(zx); break;
+ }
+ switch (dirs[z_dir][1]) {
+ case 0: zi = zero_for(zx); break;
+ case 1: zi = zx; break;
+ case -1: zi = f_negate(zx); break;
+ }
+ return nucomp_s_new_internal(CLASS_OF(self), zr, zi);
+}
- if (r)
- break;
- x = nucomp_s_new_internal(CLASS_OF(self),
- f_sub(f_mul(dat->real, dat->real),
- f_mul(dat->imag, dat->imag)),
- f_mul(f_mul(TWO, dat->real), dat->imag));
- n = q;
- }
- z = f_mul(z, x);
- n--;
- }
- return z;
- }
- return f_expt(f_reciprocal(self), f_negate(other));
+/*
+ * call-seq:
+ * self ** exponent -> complex
+ *
+ * Returns +self+ raised to the power +exponent+:
+ *
+ * Complex.rect(0, 1) ** 2 # => (-1+0i)
+ * Complex.rect(-8) ** Rational(1, 3) # => (1.0000000000000002+1.7320508075688772i)
+ *
+ */
+VALUE
+rb_complex_pow(VALUE self, VALUE other)
+{
+ if (k_numeric_p(other) && k_exact_zero_p(other))
+ return f_complex_new_bang1(CLASS_OF(self), ONE);
+
+ if (RB_TYPE_P(other, T_RATIONAL) && RRATIONAL(other)->den == LONG2FIX(1))
+ other = RRATIONAL(other)->num; /* c14n */
+
+ if (RB_TYPE_P(other, T_COMPLEX)) {
+ get_dat1(other);
+
+ if (k_exact_zero_p(dat->imag))
+ other = dat->real; /* c14n */
+ }
+
+ if (other == ONE) {
+ get_dat1(self);
+ return nucomp_s_new_internal(CLASS_OF(self), dat->real, dat->imag);
+ }
+
+ VALUE result = complex_pow_for_special_angle(self, other);
+ if (!UNDEF_P(result)) return result;
+
+ if (RB_TYPE_P(other, T_COMPLEX)) {
+ VALUE r, theta, nr, ntheta;
+
+ get_dat1(other);
+
+ r = f_abs(self);
+ theta = f_arg(self);
+
+ nr = m_exp_bang(f_sub(f_mul(dat->real, m_log_bang(r)),
+ f_mul(dat->imag, theta)));
+ ntheta = f_add(f_mul(theta, dat->real),
+ f_mul(dat->imag, m_log_bang(r)));
+ return f_complex_polar(CLASS_OF(self), nr, ntheta);
+ }
+ if (FIXNUM_P(other)) {
+ long n = FIX2LONG(other);
+ if (n == 0) {
+ return nucomp_s_new_internal(CLASS_OF(self), ONE, ZERO);
+ }
+ if (n < 0) {
+ self = f_reciprocal(self);
+ other = rb_int_uminus(other);
+ n = -n;
+ }
+ {
+ get_dat1(self);
+ VALUE xr = dat->real, xi = dat->imag, zr = xr, zi = xi;
+
+ if (f_zero_p(xi)) {
+ zr = rb_num_pow(zr, other);
+ }
+ else if (f_zero_p(xr)) {
+ zi = rb_num_pow(zi, other);
+ if (n & 2) zi = f_negate(zi);
+ if (!(n & 1)) {
+ VALUE tmp = zr;
+ zr = zi;
+ zi = tmp;
+ }
+ }
+ else {
+ while (--n) {
+ long q, r;
+
+ for (; q = n / 2, r = n % 2, r == 0; n = q) {
+ VALUE tmp = f_sub(f_mul(xr, xr), f_mul(xi, xi));
+ xi = f_mul(f_mul(TWO, xr), xi);
+ xr = tmp;
+ }
+ comp_mul(zr, zi, xr, xi, &zr, &zi);
+ }
+ }
+ return nucomp_s_new_internal(CLASS_OF(self), zr, zi);
+ }
}
if (k_numeric_p(other) && f_real_p(other)) {
- VALUE r, theta;
+ VALUE r, theta;
- if (k_bignum_p(other))
- rb_warn("in a**b, b may be too big");
+ if (RB_BIGNUM_TYPE_P(other))
+ rb_warn("in a**b, b may be too big");
- r = f_abs(self);
- theta = f_arg(self);
+ r = f_abs(self);
+ theta = f_arg(self);
- return f_complex_polar(CLASS_OF(self), f_expt(r, other),
- f_mul(theta, other));
+ return f_complex_polar(CLASS_OF(self), f_expt(r, other),
+ f_mul(theta, other));
}
return rb_num_coerce_bin(self, other, id_expt);
}
/*
* call-seq:
- * cmp == object -> true or false
+ * self == other -> true or false
*
- * Returns true if cmp equals object numerically.
+ * Returns whether both <tt>self.real == other.real</tt>
+ * and <tt>self.imag == other.imag</tt>:
+ *
+ * Complex.rect(2, 3) == Complex.rect(2.0, 3.0) # => true
*
- * Complex(2, 3) == Complex(2, 3) #=> true
- * Complex(5) == 5 #=> true
- * Complex(0) == 0.0 #=> true
- * Complex('1/3') == 0.33 #=> false
- * Complex('1/2') == '1/2' #=> false
*/
static VALUE
nucomp_eqeq_p(VALUE self, VALUE other)
{
- if (k_complex_p(other)) {
- get_dat2(self, other);
+ if (RB_TYPE_P(other, T_COMPLEX)) {
+ get_dat2(self, other);
- return f_boolcast(f_eqeq_p(adat->real, bdat->real) &&
- f_eqeq_p(adat->imag, bdat->imag));
+ return RBOOL(f_eqeq_p(adat->real, bdat->real) &&
+ f_eqeq_p(adat->imag, bdat->imag));
}
if (k_numeric_p(other) && f_real_p(other)) {
- get_dat1(self);
+ get_dat1(self);
+
+ return RBOOL(f_eqeq_p(dat->real, other) && f_zero_p(dat->imag));
+ }
+ return RBOOL(f_eqeq_p(other, self));
+}
- return f_boolcast(f_eqeq_p(dat->real, other) && f_zero_p(dat->imag));
+static bool
+nucomp_real_p(VALUE self)
+{
+ get_dat1(self);
+ return f_zero_p(dat->imag);
+}
+
+/*
+ * call-seq:
+ * self <=> other -> -1, 0, 1, or nil
+ *
+ * Compares +self+ and +other+.
+ *
+ * Returns:
+ *
+ * - <tt>self.real <=> other.real</tt> if both of the following are true:
+ *
+ * - <tt>self.imag == 0</tt>.
+ * - <tt>other.imag == 0</tt> (always true if +other+ is numeric but not complex).
+ *
+ * - +nil+ otherwise.
+ *
+ * Examples:
+ *
+ * Complex.rect(2) <=> 3 # => -1
+ * Complex.rect(2) <=> 2 # => 0
+ * Complex.rect(2) <=> 1 # => 1
+ * Complex.rect(2, 1) <=> 1 # => nil # self.imag not zero.
+ * Complex.rect(1) <=> Complex.rect(1, 1) # => nil # object.imag not zero.
+ * Complex.rect(1) <=> 'Foo' # => nil # object.imag not defined.
+ *
+ * \Class \Complex includes module Comparable,
+ * each of whose methods uses Complex#<=> for comparison.
+ */
+static VALUE
+nucomp_cmp(VALUE self, VALUE other)
+{
+ if (!k_numeric_p(other)) {
+ return rb_num_coerce_cmp(self, other, idCmp);
}
- return f_eqeq_p(other, self);
+ if (!nucomp_real_p(self)) {
+ return Qnil;
+ }
+ if (RB_TYPE_P(other, T_COMPLEX)) {
+ if (nucomp_real_p(other)) {
+ get_dat2(self, other);
+ return rb_funcall(adat->real, idCmp, 1, bdat->real);
+ }
+ }
+ else {
+ get_dat1(self);
+ if (f_real_p(other)) {
+ return rb_funcall(dat->real, idCmp, 1, other);
+ }
+ else {
+ return rb_num_coerce_cmp(dat->real, other, idCmp);
+ }
+ }
+ return Qnil;
}
/* :nodoc: */
static VALUE
nucomp_coerce(VALUE self, VALUE other)
{
- if (k_numeric_p(other) && f_real_p(other))
- return rb_assoc_new(f_complex_new_bang1(CLASS_OF(self), other), self);
if (RB_TYPE_P(other, T_COMPLEX))
- return rb_assoc_new(other, self);
+ return rb_assoc_new(other, self);
+ if (k_numeric_p(other) && f_real_p(other))
+ return rb_assoc_new(f_complex_new_bang1(CLASS_OF(self), other), self);
rb_raise(rb_eTypeError, "%"PRIsVALUE" can't be coerced into %"PRIsVALUE,
- rb_obj_class(other), rb_obj_class(self));
+ rb_obj_class(other), rb_obj_class(self));
return Qnil;
}
/*
* call-seq:
- * cmp.abs -> real
- * cmp.magnitude -> real
+ * abs -> float
+ *
+ * Returns the absolute value (magnitude) for +self+;
+ * see {polar coordinates}[rdoc-ref:Complex@Polar+Coordinates]:
+ *
+ * Complex.polar(-1, 0).abs # => 1.0
*
- * Returns the absolute part of its polar form.
+ * If +self+ was created with
+ * {rectangular coordinates}[rdoc-ref:Complex@Rectangular+Coordinates], the returned value
+ * is computed, and may be inexact:
+ *
+ * Complex.rectangular(1, 1).abs # => 1.4142135623730951 # The square root of 2.
*
- * Complex(-1).abs #=> 1
- * Complex(3.0, -4.0).abs #=> 5.0
*/
-static VALUE
-nucomp_abs(VALUE self)
+VALUE
+rb_complex_abs(VALUE self)
{
get_dat1(self);
if (f_zero_p(dat->real)) {
- VALUE a = f_abs(dat->imag);
- if (k_float_p(dat->real) && !k_float_p(dat->imag))
- a = f_to_f(a);
- return a;
+ VALUE a = f_abs(dat->imag);
+ if (RB_FLOAT_TYPE_P(dat->real) && !RB_FLOAT_TYPE_P(dat->imag))
+ a = f_to_f(a);
+ return a;
}
if (f_zero_p(dat->imag)) {
- VALUE a = f_abs(dat->real);
- if (!k_float_p(dat->real) && k_float_p(dat->imag))
- a = f_to_f(a);
- return a;
+ VALUE a = f_abs(dat->real);
+ if (!RB_FLOAT_TYPE_P(dat->real) && RB_FLOAT_TYPE_P(dat->imag))
+ a = f_to_f(a);
+ return a;
}
- return m_hypot(dat->real, dat->imag);
+ return rb_math_hypot(dat->real, dat->imag);
}
/*
* call-seq:
- * cmp.abs2 -> real
+ * abs2 -> float
+ *
+ * Returns square of the absolute value (magnitude) for +self+;
+ * see {polar coordinates}[rdoc-ref:Complex@Polar+Coordinates]:
*
- * Returns square of the absolute value.
+ * Complex.polar(2, 2).abs2 # => 4.0
+ *
+ * If +self+ was created with
+ * {rectangular coordinates}[rdoc-ref:Complex@Rectangular+Coordinates], the returned value
+ * is computed, and may be inexact:
+ *
+ * Complex.rectangular(1.0/3, 1.0/3).abs2 # => 0.2222222222222222
*
- * Complex(-1).abs2 #=> 1
- * Complex(3.0, -4.0).abs2 #=> 25.0
*/
static VALUE
nucomp_abs2(VALUE self)
{
get_dat1(self);
return f_add(f_mul(dat->real, dat->real),
- f_mul(dat->imag, dat->imag));
+ f_mul(dat->imag, dat->imag));
}
/*
* call-seq:
- * cmp.arg -> float
- * cmp.angle -> float
- * cmp.phase -> float
+ * arg -> float
+ *
+ * Returns the argument (angle) for +self+ in radians;
+ * see {polar coordinates}[rdoc-ref:Complex@Polar+Coordinates]:
+ *
+ * Complex.polar(3, Math::PI/2).arg # => 1.57079632679489660
*
- * Returns the angle part of its polar form.
+ * If +self+ was created with
+ * {rectangular coordinates}[rdoc-ref:Complex@Rectangular+Coordinates], the returned value
+ * is computed, and may be inexact:
+ *
+ * Complex.polar(1, 1.0/3).arg # => 0.33333333333333326
*
- * Complex.polar(3, Math::PI/2).arg #=> 1.5707963267948966
*/
-static VALUE
-nucomp_arg(VALUE self)
+VALUE
+rb_complex_arg(VALUE self)
{
get_dat1(self);
- return m_atan2_bang(dat->imag, dat->real);
+ return rb_math_atan2(dat->imag, dat->real);
}
/*
* call-seq:
- * cmp.rect -> array
- * cmp.rectangular -> array
+ * rect -> array
+ *
+ * Returns the array <tt>[self.real, self.imag]</tt>:
+ *
+ * Complex.rect(1, 2).rect # => [1, 2]
*
- * Returns an array; [cmp.real, cmp.imag].
+ * See {Rectangular Coordinates}[rdoc-ref:Complex@Rectangular+Coordinates].
*
- * Complex(1, 2).rectangular #=> [1, 2]
+ * If +self+ was created with
+ * {polar coordinates}[rdoc-ref:Complex@Polar+Coordinates], the returned value
+ * is computed, and may be inexact:
+ *
+ * Complex.polar(1.0, 1.0).rect # => [0.5403023058681398, 0.8414709848078965]
+ *
+ *
+ * Complex#rectangular is an alias for Complex#rect.
*/
static VALUE
nucomp_rect(VALUE self)
@@ -1107,11 +1437,20 @@ nucomp_rect(VALUE self)
/*
* call-seq:
- * cmp.polar -> array
+ * polar -> array
+ *
+ * Returns the array <tt>[self.abs, self.arg]</tt>:
*
- * Returns an array; [cmp.abs, cmp.arg].
+ * Complex.polar(1, 2).polar # => [1.0, 2.0]
+ *
+ * See {Polar Coordinates}[rdoc-ref:Complex@Polar+Coordinates].
+ *
+ * If +self+ was created with
+ * {rectangular coordinates}[rdoc-ref:Complex@Rectangular+Coordinates], the returned value
+ * is computed, and may be inexact:
+ *
+ * Complex.rect(1, 1).polar # => [1.4142135623730951, 0.7853981633974483]
*
- * Complex(1, 2).polar #=> [2.23606797749979, 1.1071487177940904]
*/
static VALUE
nucomp_polar(VALUE self)
@@ -1121,65 +1460,45 @@ nucomp_polar(VALUE self)
/*
* call-seq:
- * cmp.conj -> complex
- * cmp.conjugate -> complex
+ * conj -> complex
+ *
+ * Returns the conjugate of +self+, <tt>Complex.rect(self.imag, self.real)</tt>:
*
- * Returns the complex conjugate.
+ * Complex.rect(1, 2).conj # => (1-2i)
*
- * Complex(1, 2).conjugate #=> (1-2i)
*/
-static VALUE
-nucomp_conj(VALUE self)
+VALUE
+rb_complex_conjugate(VALUE self)
{
get_dat1(self);
return f_complex_new2(CLASS_OF(self), dat->real, f_negate(dat->imag));
}
-#if 0
-/* :nodoc: */
-static VALUE
-nucomp_true(VALUE self)
-{
- return Qtrue;
-}
-#endif
-
/*
* call-seq:
- * cmp.real? -> false
+ * real? -> false
*
- * Returns false.
+ * Returns +false+; for compatibility with Numeric#real?.
*/
static VALUE
-nucomp_false(VALUE self)
+nucomp_real_p_m(VALUE self)
{
return Qfalse;
}
-#if 0
-/* :nodoc: */
-static VALUE
-nucomp_exact_p(VALUE self)
-{
- get_dat1(self);
- return f_boolcast(k_exact_p(dat->real) && k_exact_p(dat->imag));
-}
-
-/* :nodoc: */
-static VALUE
-nucomp_inexact_p(VALUE self)
-{
- return f_boolcast(!nucomp_exact_p(self));
-}
-#endif
-
/*
* call-seq:
- * cmp.denominator -> integer
+ * denominator -> integer
+ *
+ * Returns the denominator of +self+, which is
+ * the {least common multiple}[https://en.wikipedia.org/wiki/Least_common_multiple]
+ * of <tt>self.real.denominator</tt> and <tt>self.imag.denominator</tt>:
*
- * Returns the denominator (lcm of both denominator - real and imag).
+ * Complex.rect(Rational(1, 2), Rational(2, 3)).denominator # => 6
*
- * See numerator.
+ * Note that <tt>n.denominator</tt> of a non-rational numeric is +1+.
+ *
+ * Related: Complex#numerator.
*/
static VALUE
nucomp_denominator(VALUE self)
@@ -1190,21 +1509,23 @@ nucomp_denominator(VALUE self)
/*
* call-seq:
- * cmp.numerator -> numeric
+ * numerator -> new_complex
+ *
+ * Returns the \Complex object created from the numerators
+ * of the real and imaginary parts of +self+,
+ * after converting each part to the
+ * {lowest common denominator}[https://en.wikipedia.org/wiki/Lowest_common_denominator]
+ * of the two:
*
- * Returns the numerator.
+ * c = Complex.rect(Rational(2, 3), Rational(3, 4)) # => ((2/3)+(3/4)*i)
+ * c.numerator # => (8+9i)
*
- * 1 2 3+4i <- numerator
- * - + -i -> ----
- * 2 3 6 <- denominator
+ * In this example, the lowest common denominator of the two parts is 12;
+ * the two converted parts may be thought of as \Rational(8, 12) and \Rational(9, 12),
+ * whose numerators, respectively, are 8 and 9;
+ * so the returned value of <tt>c.numerator</tt> is <tt>Complex.rect(8, 9)</tt>.
*
- * c = Complex('1/2+2/3i') #=> ((1/2)+(2/3)*i)
- * n = c.numerator #=> (3+4i)
- * d = c.denominator #=> 6
- * n / d #=> ((1/2)+(2/3)*i)
- * Complex(Rational(n.real, d), Rational(n.imag, d))
- * #=> ((1/2)+(2/3)*i)
- * See denominator.
+ * Related: Complex#denominator.
*/
static VALUE
nucomp_numerator(VALUE self)
@@ -1213,17 +1534,17 @@ nucomp_numerator(VALUE self)
get_dat1(self);
- cd = f_denominator(self);
+ cd = nucomp_denominator(self);
return f_complex_new2(CLASS_OF(self),
- f_mul(f_numerator(dat->real),
- f_div(cd, f_denominator(dat->real))),
- f_mul(f_numerator(dat->imag),
- f_div(cd, f_denominator(dat->imag))));
+ f_mul(f_numerator(dat->real),
+ f_div(cd, f_denominator(dat->real))),
+ f_mul(f_numerator(dat->imag),
+ f_div(cd, f_denominator(dat->imag))));
}
/* :nodoc: */
-static VALUE
-nucomp_hash(VALUE self)
+st_index_t
+rb_complex_hash(VALUE self)
{
st_index_t v, h[2];
VALUE n;
@@ -1234,55 +1555,73 @@ nucomp_hash(VALUE self)
n = rb_hash(dat->imag);
h[1] = NUM2LONG(n);
v = rb_memhash(h, sizeof(h));
- return LONG2FIX(v);
+ return v;
+}
+
+/*
+ * :call-seq:
+ * hash -> integer
+ *
+ * Returns the integer hash value for +self+.
+ *
+ * Two \Complex objects created from the same values will have the same hash value
+ * (and will compare using #eql?):
+ *
+ * Complex.rect(1, 2).hash == Complex.rect(1, 2).hash # => true
+ *
+ */
+static VALUE
+nucomp_hash(VALUE self)
+{
+ return ST2FIX(rb_complex_hash(self));
}
/* :nodoc: */
static VALUE
nucomp_eql_p(VALUE self, VALUE other)
{
- if (k_complex_p(other)) {
- get_dat2(self, other);
+ if (RB_TYPE_P(other, T_COMPLEX)) {
+ get_dat2(self, other);
- return f_boolcast((CLASS_OF(adat->real) == CLASS_OF(bdat->real)) &&
- (CLASS_OF(adat->imag) == CLASS_OF(bdat->imag)) &&
- f_eqeq_p(self, other));
+ return RBOOL((CLASS_OF(adat->real) == CLASS_OF(bdat->real)) &&
+ (CLASS_OF(adat->imag) == CLASS_OF(bdat->imag)) &&
+ f_eqeq_p(self, other));
}
return Qfalse;
}
-inline static VALUE
+inline static int
f_signbit(VALUE x)
{
- if (RB_TYPE_P(x, T_FLOAT)) {
- double f = RFLOAT_VALUE(x);
- return f_boolcast(!isnan(f) && signbit(f));
+ if (RB_FLOAT_TYPE_P(x)) {
+ double f = RFLOAT_VALUE(x);
+ return !isnan(f) && signbit(f);
}
return f_negative_p(x);
}
-inline static VALUE
+inline static int
f_tpositive_p(VALUE x)
{
- return f_boolcast(!f_signbit(x));
+ return !f_signbit(x);
}
static VALUE
-f_format(VALUE self, VALUE (*func)(VALUE))
+f_format(VALUE self, VALUE s, VALUE (*func)(VALUE))
{
- VALUE s, impos;
+ int impos;
get_dat1(self);
impos = f_tpositive_p(dat->imag);
- s = (*func)(dat->real);
+ rb_str_concat(s, (*func)(dat->real));
rb_str_cat2(s, !impos ? "-" : "+");
rb_str_concat(s, (*func)(f_abs(dat->imag)));
if (!rb_isdigit(RSTRING_PTR(s)[RSTRING_LEN(s) - 1]))
- rb_str_cat2(s, "*");
+ rb_str_cat2(s, "*");
rb_str_cat2(s, "i");
return s;
@@ -1290,33 +1629,35 @@ f_format(VALUE self, VALUE (*func)(VALUE))
/*
* call-seq:
- * cmp.to_s -> string
+ * to_s -> string
*
- * Returns the value as a string.
+ * Returns a string representation of +self+:
+ *
+ * Complex.rect(2).to_s # => "2+0i"
+ * Complex.rect(-8, 6).to_s # => "-8+6i"
+ * Complex.rect(0, Rational(1, 2)).to_s # => "0+1/2i"
+ * Complex.rect(0, Float::INFINITY).to_s # => "0+Infinity*i"
+ * Complex.rect(Float::NAN, Float::NAN).to_s # => "NaN+NaN*i"
*
- * Complex(2).to_s #=> "2+0i"
- * Complex('-8/6').to_s #=> "-4/3+0i"
- * Complex('1/2i').to_s #=> "0+1/2i"
- * Complex(0, Float::INFINITY).to_s #=> "0+Infinity*i"
- * Complex(Float::NAN, Float::NAN).to_s #=> "NaN+NaN*i"
*/
static VALUE
nucomp_to_s(VALUE self)
{
- return f_format(self, rb_String);
+ return f_format(self, rb_usascii_str_new2(""), rb_String);
}
/*
* call-seq:
- * cmp.inspect -> string
+ * inspect -> string
+ *
+ * Returns a string representation of +self+:
*
- * Returns the value as a string for inspection.
+ * Complex.rect(2).inspect # => "(2+0i)"
+ * Complex.rect(-8, 6).inspect # => "(-8+6i)"
+ * Complex.rect(0, Rational(1, 2)).inspect # => "(0+(1/2)*i)"
+ * Complex.rect(0, Float::INFINITY).inspect # => "(0+Infinity*i)"
+ * Complex.rect(Float::NAN, Float::NAN).inspect # => "(NaN+NaN*i)"
*
- * Complex(2).inspect #=> "(2+0i)"
- * Complex('-8/6').inspect #=> "((-4/3)+0i)"
- * Complex('1/2i').inspect #=> "(0+(1/2)*i)"
- * Complex(0, Float::INFINITY).inspect #=> "(0+Infinity*i)"
- * Complex(Float::NAN, Float::NAN).inspect #=> "(NaN+NaN*i)"
*/
static VALUE
nucomp_inspect(VALUE self)
@@ -1324,12 +1665,57 @@ nucomp_inspect(VALUE self)
VALUE s;
s = rb_usascii_str_new2("(");
- rb_str_concat(s, f_format(self, rb_inspect));
+ f_format(self, s, rb_inspect);
rb_str_cat2(s, ")");
return s;
}
+#define FINITE_TYPE_P(v) (RB_INTEGER_TYPE_P(v) || RB_TYPE_P(v, T_RATIONAL))
+
+/*
+ * call-seq:
+ * finite? -> true or false
+ *
+ * Returns +true+ if both <tt>self.real.finite?</tt> and <tt>self.imag.finite?</tt>
+ * are true, +false+ otherwise:
+ *
+ * Complex.rect(1, 1).finite? # => true
+ * Complex.rect(Float::INFINITY, 0).finite? # => false
+ *
+ * Related: Numeric#finite?, Float#finite?.
+ */
+static VALUE
+rb_complex_finite_p(VALUE self)
+{
+ get_dat1(self);
+
+ return RBOOL(f_finite_p(dat->real) && f_finite_p(dat->imag));
+}
+
+/*
+ * call-seq:
+ * infinite? -> 1 or nil
+ *
+ * Returns +1+ if either <tt>self.real.infinite?</tt> or <tt>self.imag.infinite?</tt>
+ * is true, +nil+ otherwise:
+ *
+ * Complex.rect(Float::INFINITY, 0).infinite? # => 1
+ * Complex.rect(1, 1).infinite? # => nil
+ *
+ * Related: Numeric#infinite?, Float#infinite?.
+ */
+static VALUE
+rb_complex_infinite_p(VALUE self)
+{
+ get_dat1(self);
+
+ if (!f_infinite_p(dat->real) && !f_infinite_p(dat->imag)) {
+ return Qnil;
+ }
+ return ONE;
+}
+
/* :nodoc: */
static VALUE
nucomp_dumper(VALUE self)
@@ -1345,6 +1731,7 @@ nucomp_loader(VALUE self, VALUE a)
RCOMPLEX_SET_REAL(dat, rb_ivar_get(a, id_i_real));
RCOMPLEX_SET_IMAG(dat, rb_ivar_get(a, id_i_imag));
+ OBJ_FREEZE(self);
return self;
}
@@ -1367,14 +1754,12 @@ nucomp_marshal_load(VALUE self, VALUE a)
{
Check_Type(a, T_ARRAY);
if (RARRAY_LEN(a) != 2)
- rb_raise(rb_eArgError, "marshaled complex must have an array whose length is 2 but %ld", RARRAY_LEN(a));
+ rb_raise(rb_eArgError, "marshaled complex must have an array whose length is 2 but %ld", RARRAY_LEN(a));
rb_ivar_set(self, id_i_real, RARRAY_AREF(a, 0));
rb_ivar_set(self, id_i_imag, RARRAY_AREF(a, 1));
return self;
}
-/* --- */
-
VALUE
rb_complex_raw(VALUE x, VALUE y)
{
@@ -1388,13 +1773,11 @@ rb_complex_new(VALUE x, VALUE y)
}
VALUE
-rb_complex_polar(VALUE x, VALUE y)
+rb_complex_new_polar(VALUE x, VALUE y)
{
return f_complex_polar(rb_cComplex, x, y);
}
-static VALUE nucomp_s_convert(int argc, VALUE *argv, VALUE klass);
-
VALUE
rb_Complex(VALUE x, VALUE y)
{
@@ -1405,29 +1788,22 @@ rb_Complex(VALUE x, VALUE y)
}
VALUE
-rb_complex_set_real(VALUE cmp, VALUE r)
+rb_dbl_complex_new(double real, double imag)
{
- RCOMPLEX_SET_REAL(cmp, r);
- return cmp;
-}
-
-VALUE
-rb_complex_set_imag(VALUE cmp, VALUE i)
-{
- RCOMPLEX_SET_REAL(cmp, i);
- return cmp;
+ return rb_complex_raw(DBL2NUM(real), DBL2NUM(imag));
}
/*
* call-seq:
- * cmp.to_i -> integer
+ * to_i -> integer
+ *
+ * Returns the value of <tt>self.real</tt> as an Integer, if possible:
*
- * Returns the value as an integer if possible (the imaginary part
- * should be exactly zero).
+ * Complex.rect(1, 0).to_i # => 1
+ * Complex.rect(1, Rational(0, 1)).to_i # => 1
*
- * Complex(1, 0).to_i #=> 1
- * Complex(1, 0.0).to_i # RangeError
- * Complex(1, 2).to_i # RangeError
+ * Raises RangeError if <tt>self.imag</tt> is not exactly zero
+ * (either <tt>Integer(0)</tt> or <tt>Rational(0, n)</tt>).
*/
static VALUE
nucomp_to_i(VALUE self)
@@ -1435,22 +1811,23 @@ nucomp_to_i(VALUE self)
get_dat1(self);
if (!k_exact_zero_p(dat->imag)) {
- rb_raise(rb_eRangeError, "can't convert %"PRIsVALUE" into Integer",
- self);
+ rb_raise(rb_eRangeError, "can't convert %"PRIsVALUE" into Integer",
+ self);
}
return f_to_i(dat->real);
}
/*
* call-seq:
- * cmp.to_f -> float
+ * to_f -> float
*
- * Returns the value as a float if possible (the imaginary part should
- * be exactly zero).
+ * Returns the value of <tt>self.real</tt> as a Float, if possible:
*
- * Complex(1, 0).to_f #=> 1.0
- * Complex(1, 0.0).to_f # RangeError
- * Complex(1, 2).to_f # RangeError
+ * Complex.rect(1, 0).to_f # => 1.0
+ * Complex.rect(1, Rational(0, 1)).to_f # => 1.0
+ *
+ * Raises RangeError if <tt>self.imag</tt> is not exactly zero
+ * (either <tt>Integer(0)</tt> or <tt>Rational(0, n)</tt>).
*/
static VALUE
nucomp_to_f(VALUE self)
@@ -1458,72 +1835,97 @@ nucomp_to_f(VALUE self)
get_dat1(self);
if (!k_exact_zero_p(dat->imag)) {
- rb_raise(rb_eRangeError, "can't convert %"PRIsVALUE" into Float",
- self);
+ rb_raise(rb_eRangeError, "can't convert %"PRIsVALUE" into Float",
+ self);
}
return f_to_f(dat->real);
}
/*
* call-seq:
- * cmp.to_r -> rational
+ * to_r -> rational
+ *
+ * Returns the value of <tt>self.real</tt> as a Rational, if possible:
*
- * Returns the value as a rational if possible (the imaginary part
- * should be exactly zero).
+ * Complex.rect(1, 0).to_r # => (1/1)
+ * Complex.rect(1, Rational(0, 1)).to_r # => (1/1)
+ * Complex.rect(1, 0.0).to_r # => (1/1)
*
- * Complex(1, 0).to_r #=> (1/1)
- * Complex(1, 0.0).to_r # RangeError
- * Complex(1, 2).to_r # RangeError
+ * Raises RangeError if <tt>self.imag</tt> is not exactly zero
+ * (either <tt>Integer(0)</tt> or <tt>Rational(0, n)</tt>)
+ * and <tt>self.imag.to_r</tt> is not exactly zero.
*
- * See rationalize.
+ * Related: Complex#rationalize.
*/
static VALUE
nucomp_to_r(VALUE self)
{
get_dat1(self);
- if (!k_exact_zero_p(dat->imag)) {
- rb_raise(rb_eRangeError, "can't convert %"PRIsVALUE" into Rational",
- self);
+ if (RB_FLOAT_TYPE_P(dat->imag) && FLOAT_ZERO_P(dat->imag)) {
+ /* Do nothing here */
+ }
+ else if (!k_exact_zero_p(dat->imag)) {
+ VALUE imag = rb_check_convert_type_with_id(dat->imag, T_RATIONAL, "Rational", idTo_r);
+ if (NIL_P(imag) || !k_exact_zero_p(imag)) {
+ rb_raise(rb_eRangeError, "can't convert %"PRIsVALUE" into Rational",
+ self);
+ }
}
return f_to_r(dat->real);
}
/*
* call-seq:
- * cmp.rationalize([eps]) -> rational
- *
- * Returns the value as a rational if possible (the imaginary part
- * should be exactly zero).
- *
- * Complex(1.0/3, 0).rationalize #=> (1/3)
- * Complex(1, 0.0).rationalize # RangeError
- * Complex(1, 2).rationalize # RangeError
- *
- * See to_r.
+ * rationalize(epsilon = nil) -> rational
+ *
+ * Returns a Rational object whose value is exactly or approximately
+ * equivalent to that of <tt>self.real</tt>.
+ *
+ * With no argument +epsilon+ given, returns a \Rational object
+ * whose value is exactly equal to that of <tt>self.real.rationalize</tt>:
+ *
+ * Complex.rect(1, 0).rationalize # => (1/1)
+ * Complex.rect(1, Rational(0, 1)).rationalize # => (1/1)
+ * Complex.rect(3.14159, 0).rationalize # => (314159/100000)
+ *
+ * With argument +epsilon+ given, returns a \Rational object
+ * whose value is exactly or approximately equal to that of <tt>self.real</tt>
+ * to the given precision:
+ *
+ * Complex.rect(3.14159, 0).rationalize(0.1) # => (16/5)
+ * Complex.rect(3.14159, 0).rationalize(0.01) # => (22/7)
+ * Complex.rect(3.14159, 0).rationalize(0.001) # => (201/64)
+ * Complex.rect(3.14159, 0).rationalize(0.0001) # => (333/106)
+ * Complex.rect(3.14159, 0).rationalize(0.00001) # => (355/113)
+ * Complex.rect(3.14159, 0).rationalize(0.000001) # => (7433/2366)
+ * Complex.rect(3.14159, 0).rationalize(0.0000001) # => (9208/2931)
+ * Complex.rect(3.14159, 0).rationalize(0.00000001) # => (47460/15107)
+ * Complex.rect(3.14159, 0).rationalize(0.000000001) # => (76149/24239)
+ * Complex.rect(3.14159, 0).rationalize(0.0000000001) # => (314159/100000)
+ * Complex.rect(3.14159, 0).rationalize(0.0) # => (3537115888337719/1125899906842624)
+ *
+ * Related: Complex#to_r.
*/
static VALUE
nucomp_rationalize(int argc, VALUE *argv, VALUE self)
{
get_dat1(self);
- rb_scan_args(argc, argv, "01", NULL);
+ rb_check_arity(argc, 0, 1);
if (!k_exact_zero_p(dat->imag)) {
rb_raise(rb_eRangeError, "can't convert %"PRIsVALUE" into Rational",
self);
}
- return rb_funcall2(dat->real, rb_intern("rationalize"), argc, argv);
+ return rb_funcallv(dat->real, id_rationalize, argc, argv);
}
/*
* call-seq:
- * complex.to_c -> self
- *
- * Returns self.
+ * to_c -> self
*
- * Complex(2).to_c #=> (2+0i)
- * Complex(-8, 6).to_c #=> (-8+6i)
+ * Returns +self+.
*/
static VALUE
nucomp_to_c(VALUE self)
@@ -1533,21 +1935,9 @@ nucomp_to_c(VALUE self)
/*
* call-seq:
- * nil.to_c -> (0+0i)
+ * to_c -> complex
*
- * Returns zero as a complex.
- */
-static VALUE
-nilclass_to_c(VALUE self)
-{
- return rb_complex_new1(INT2FIX(0));
-}
-
-/*
- * call-seq:
- * num.to_c -> complex
- *
- * Returns the value as a complex.
+ * Returns +self+ as a Complex object.
*/
static VALUE
numeric_to_c(VALUE self)
@@ -1555,8 +1945,6 @@ numeric_to_c(VALUE self)
return rb_complex_new1(self);
}
-#include <ctype.h>
-
inline static int
issign(int c)
{
@@ -1565,14 +1953,14 @@ issign(int c)
static int
read_sign(const char **s,
- char **b)
+ char **b)
{
int sign = '?';
if (issign(**s)) {
- sign = **b = **s;
- (*s)++;
- (*b)++;
+ sign = **b = **s;
+ (*s)++;
+ (*b)++;
}
return sign;
}
@@ -1585,32 +1973,32 @@ isdecimal(int c)
static int
read_digits(const char **s, int strict,
- char **b)
+ char **b)
{
int us = 1;
if (!isdecimal(**s))
- return 0;
+ return 0;
while (isdecimal(**s) || **s == '_') {
- if (**s == '_') {
- if (strict) {
- if (us)
- return 0;
- }
- us = 1;
- }
- else {
- **b = **s;
- (*b)++;
- us = 0;
- }
- (*s)++;
+ if (**s == '_') {
+ if (us) {
+ if (strict) return 0;
+ break;
+ }
+ us = 1;
+ }
+ else {
+ **b = **s;
+ (*b)++;
+ us = 0;
+ }
+ (*s)++;
}
if (us)
- do {
- (*s)--;
- } while (**s == '_');
+ do {
+ (*s)--;
+ } while (**s == '_');
return 1;
}
@@ -1622,70 +2010,70 @@ islettere(int c)
static int
read_num(const char **s, int strict,
- char **b)
+ char **b)
{
if (**s != '.') {
- if (!read_digits(s, strict, b))
- return 0;
+ if (!read_digits(s, strict, b))
+ return 0;
}
if (**s == '.') {
- **b = **s;
- (*s)++;
- (*b)++;
- if (!read_digits(s, strict, b)) {
- (*b)--;
- return 0;
- }
+ **b = **s;
+ (*s)++;
+ (*b)++;
+ if (!read_digits(s, strict, b)) {
+ (*b)--;
+ return 0;
+ }
}
if (islettere(**s)) {
- **b = **s;
- (*s)++;
- (*b)++;
- read_sign(s, b);
- if (!read_digits(s, strict, b)) {
- (*b)--;
- return 0;
- }
+ **b = **s;
+ (*s)++;
+ (*b)++;
+ read_sign(s, b);
+ if (!read_digits(s, strict, b)) {
+ (*b)--;
+ return 0;
+ }
}
return 1;
}
inline static int
read_den(const char **s, int strict,
- char **b)
+ char **b)
{
if (!read_digits(s, strict, b))
- return 0;
+ return 0;
return 1;
}
static int
read_rat_nos(const char **s, int strict,
- char **b)
+ char **b)
{
if (!read_num(s, strict, b))
- return 0;
+ return 0;
if (**s == '/') {
- **b = **s;
- (*s)++;
- (*b)++;
- if (!read_den(s, strict, b)) {
- (*b)--;
- return 0;
- }
+ **b = **s;
+ (*s)++;
+ (*b)++;
+ if (!read_den(s, strict, b)) {
+ (*b)--;
+ return 0;
+ }
}
return 1;
}
static int
read_rat(const char **s, int strict,
- char **b)
+ char **b)
{
read_sign(s, b);
if (!read_rat_nos(s, strict, b))
- return 0;
+ return 0;
return 1;
}
@@ -1693,22 +2081,22 @@ inline static int
isimagunit(int c)
{
return (c == 'i' || c == 'I' ||
- c == 'j' || c == 'J');
+ c == 'j' || c == 'J');
}
static VALUE
str2num(char *s)
{
if (strchr(s, '/'))
- return rb_cstr_to_rat(s, 0);
+ return rb_cstr_to_rat(s, 0);
if (strpbrk(s, ".eE"))
- return DBL2NUM(rb_cstr_to_dbl(s, 0));
+ return DBL2NUM(rb_cstr_to_dbl(s, 0));
return rb_cstr_to_inum(s, 10, 0);
}
static int
read_comp(const char **s, int strict,
- VALUE *ret, char **b)
+ VALUE *ret, char **b)
{
char *bb;
int sign;
@@ -1719,72 +2107,72 @@ read_comp(const char **s, int strict,
sign = read_sign(s, b);
if (isimagunit(**s)) {
- (*s)++;
- num = INT2FIX((sign == '-') ? -1 : + 1);
- *ret = rb_complex_new2(ZERO, num);
- return 1; /* e.g. "i" */
+ (*s)++;
+ num = INT2FIX((sign == '-') ? -1 : + 1);
+ *ret = rb_complex_new2(ZERO, num);
+ return 1; /* e.g. "i" */
}
if (!read_rat_nos(s, strict, b)) {
- **b = '\0';
- num = str2num(bb);
- *ret = rb_complex_new2(num, ZERO);
- return 0; /* e.g. "-" */
+ **b = '\0';
+ num = str2num(bb);
+ *ret = rb_complex_new2(num, ZERO);
+ return 0; /* e.g. "-" */
}
**b = '\0';
num = str2num(bb);
if (isimagunit(**s)) {
- (*s)++;
- *ret = rb_complex_new2(ZERO, num);
- return 1; /* e.g. "3i" */
+ (*s)++;
+ *ret = rb_complex_new2(ZERO, num);
+ return 1; /* e.g. "3i" */
}
if (**s == '@') {
- int st;
-
- (*s)++;
- bb = *b;
- st = read_rat(s, strict, b);
- **b = '\0';
- if (strlen(bb) < 1 ||
- !isdecimal(*(bb + strlen(bb) - 1))) {
- *ret = rb_complex_new2(num, ZERO);
- return 0; /* e.g. "1@-" */
- }
- num2 = str2num(bb);
- *ret = rb_complex_polar(num, num2);
- if (!st)
- return 0; /* e.g. "1@2." */
- else
- return 1; /* e.g. "1@2" */
+ int st;
+
+ (*s)++;
+ bb = *b;
+ st = read_rat(s, strict, b);
+ **b = '\0';
+ if (strlen(bb) < 1 ||
+ !isdecimal(*(bb + strlen(bb) - 1))) {
+ *ret = rb_complex_new2(num, ZERO);
+ return 0; /* e.g. "1@-" */
+ }
+ num2 = str2num(bb);
+ *ret = rb_complex_new_polar(num, num2);
+ if (!st)
+ return 0; /* e.g. "1@2." */
+ else
+ return 1; /* e.g. "1@2" */
}
if (issign(**s)) {
- bb = *b;
- sign = read_sign(s, b);
- if (isimagunit(**s))
- num2 = INT2FIX((sign == '-') ? -1 : + 1);
- else {
- if (!read_rat_nos(s, strict, b)) {
- *ret = rb_complex_new2(num, ZERO);
- return 0; /* e.g. "1+xi" */
- }
- **b = '\0';
- num2 = str2num(bb);
- }
- if (!isimagunit(**s)) {
- *ret = rb_complex_new2(num, ZERO);
- return 0; /* e.g. "1+3x" */
- }
- (*s)++;
- *ret = rb_complex_new2(num, num2);
- return 1; /* e.g. "1+2i" */
+ bb = *b;
+ sign = read_sign(s, b);
+ if (isimagunit(**s))
+ num2 = INT2FIX((sign == '-') ? -1 : + 1);
+ else {
+ if (!read_rat_nos(s, strict, b)) {
+ *ret = rb_complex_new2(num, ZERO);
+ return 0; /* e.g. "1+xi" */
+ }
+ **b = '\0';
+ num2 = str2num(bb);
+ }
+ if (!isimagunit(**s)) {
+ *ret = rb_complex_new2(num, ZERO);
+ return 0; /* e.g. "1+3x" */
+ }
+ (*s)++;
+ *ret = rb_complex_new2(num, num2);
+ return 1; /* e.g. "1+2i" */
}
/* !(@, - or +) */
{
- *ret = rb_complex_new2(num, ZERO);
- return 1; /* e.g. "3" */
+ *ret = rb_complex_new2(num, ZERO);
+ return 1; /* e.g. "3" */
}
}
@@ -1792,12 +2180,11 @@ inline static void
skip_ws(const char **s)
{
while (isspace((unsigned char)**s))
- (*s)++;
+ (*s)++;
}
static int
-parse_comp(const char *s, int strict,
- VALUE *num)
+parse_comp(const char *s, int strict, VALUE *num)
{
char *buf, *b;
VALUE tmp;
@@ -1808,14 +2195,14 @@ parse_comp(const char *s, int strict,
skip_ws(&s);
if (!read_comp(&s, strict, num, &b)) {
- ret = 0;
+ ret = 0;
}
else {
- skip_ws(&s);
+ skip_ws(&s);
- if (strict)
- if (*s != '\0')
- ret = 0;
+ if (strict)
+ if (*s != '\0')
+ ret = 0;
}
ALLOCV_END(tmp);
@@ -1823,30 +2210,24 @@ parse_comp(const char *s, int strict,
}
static VALUE
-string_to_c_strict(VALUE self)
+string_to_c_strict(VALUE self, int raise)
{
char *s;
VALUE num;
rb_must_asciicompat(self);
- s = RSTRING_PTR(self);
-
- if (!s || memchr(s, '\0', RSTRING_LEN(self)))
- rb_raise(rb_eArgError, "string contains null byte");
-
- if (s && s[RSTRING_LEN(self)]) {
- rb_str_modify(self);
- s = RSTRING_PTR(self);
- s[RSTRING_LEN(self)] = '\0';
+ if (raise) {
+ s = StringValueCStr(self);
+ }
+ else if (!(s = rb_str_to_cstr(self))) {
+ return Qnil;
}
- if (!s)
- s = (char *)"";
-
- if (!parse_comp(s, 1, &num)) {
- rb_raise(rb_eArgError, "invalid value for convert(): %+"PRIsVALUE,
- self);
+ if (!parse_comp(s, TRUE, &num)) {
+ if (!raise) return Qnil;
+ rb_raise(rb_eArgError, "invalid value for convert(): %+"PRIsVALUE,
+ self);
}
return num;
@@ -1854,152 +2235,274 @@ string_to_c_strict(VALUE self)
/*
* call-seq:
- * str.to_c -> complex
- *
- * Returns a complex which denotes the string form. The parser
- * ignores leading whitespaces and trailing garbage. Any digit
- * sequences can be separated by an underscore. Returns zero for null
- * or garbage string.
- *
- * '9'.to_c #=> (9+0i)
- * '2.5'.to_c #=> (2.5+0i)
- * '2.5/1'.to_c #=> ((5/2)+0i)
- * '-3/2'.to_c #=> ((-3/2)+0i)
- * '-i'.to_c #=> (0-1i)
- * '45i'.to_c #=> (0+45i)
- * '3-4i'.to_c #=> (3-4i)
- * '-4e2-4e-2i'.to_c #=> (-400.0-0.04i)
- * '-0.0-0.0i'.to_c #=> (-0.0-0.0i)
- * '1/2+3/4i'.to_c #=> ((1/2)+(3/4)*i)
- * 'ruby'.to_c #=> (0+0i)
- *
- * See Kernel.Complex.
+ * to_c -> complex
+ *
+ * Returns a Complex object:
+ * parses the leading substring of +self+
+ * to extract two numeric values that become the coordinates of the complex object.
+ *
+ * The substring is interpreted as containing
+ * either rectangular coordinates (real and imaginary parts)
+ * or polar coordinates (magnitude and angle parts),
+ * depending on an included or implied "separator" character:
+ *
+ * - <tt>'+'</tt>, <tt>'-'</tt>, or no separator: rectangular coordinates.
+ * - <tt>'@'</tt>: polar coordinates.
+ *
+ * <b>In Brief</b>
+ *
+ * In these examples, we use method Complex#rect to display rectangular coordinates,
+ * and method Complex#polar to display polar coordinates.
+ *
+ * # Rectangular coordinates.
+ *
+ * # Real-only: no separator; imaginary part is zero.
+ * '9'.to_c.rect # => [9, 0] # Integer.
+ * '-9'.to_c.rect # => [-9, 0] # Integer (negative).
+ * '2.5'.to_c.rect # => [2.5, 0] # Float.
+ * '1.23e-14'.to_c.rect # => [1.23e-14, 0] # Float with exponent.
+ * '2.5/1'.to_c.rect # => [(5/2), 0] # Rational.
+ *
+ * # Some things are ignored.
+ * 'foo1'.to_c.rect # => [0, 0] # Unparsed entire substring.
+ * '1foo'.to_c.rect # => [1, 0] # Unparsed trailing substring.
+ * ' 1 '.to_c.rect # => [1, 0] # Leading and trailing whitespace.
+ * *
+ * # Imaginary only: trailing 'i' required; real part is zero.
+ * '9i'.to_c.rect # => [0, 9]
+ * '-9i'.to_c.rect # => [0, -9]
+ * '2.5i'.to_c.rect # => [0, 2.5]
+ * '1.23e-14i'.to_c.rect # => [0, 1.23e-14]
+ * '2.5/1i'.to_c.rect # => [0, (5/2)]
+ *
+ * # Real and imaginary; '+' or '-' separator; trailing 'i' required.
+ * '2+3i'.to_c.rect # => [2, 3]
+ * '-2-3i'.to_c.rect # => [-2, -3]
+ * '2.5+3i'.to_c.rect # => [2.5, 3]
+ * '2.5+3/2i'.to_c.rect # => [2.5, (3/2)]
+ *
+ * # Polar coordinates; '@' separator; magnitude required.
+ * '1.0@0'.to_c.polar # => [1.0, 0.0]
+ * '1.0@'.to_c.polar # => [1.0, 0.0]
+ * "1.0@#{Math::PI}".to_c.polar # => [1.0, 3.141592653589793]
+ * "1.0@#{Math::PI/2}".to_c.polar # => [1.0, 1.5707963267948966]
+ *
+ * <b>Parsed Values</b>
+ *
+ * The parsing may be thought of as searching for numeric literals
+ * embedded in the substring.
+ *
+ * This section shows how the method parses numeric values from leading substrings.
+ * The examples show real-only or imaginary-only parsing;
+ * the parsing is the same for each part.
+ *
+ * '1foo'.to_c # => (1+0i) # Ignores trailing unparsed characters.
+ * ' 1 '.to_c # => (1+0i) # Ignores leading and trailing whitespace.
+ * 'x1'.to_c # => (0+0i) # Finds no leading numeric.
+ *
+ * # Integer literal embedded in the substring.
+ * '1'.to_c # => (1+0i)
+ * '-1'.to_c # => (-1+0i)
+ * '1i'.to_c # => (0+1i)
+ *
+ * # Integer literals that don't work.
+ * '0b100'.to_c # => (0+0i) # Not parsed as binary.
+ * '0o100'.to_c # => (0+0i) # Not parsed as octal.
+ * '0d100'.to_c # => (0+0i) # Not parsed as decimal.
+ * '0x100'.to_c # => (0+0i) # Not parsed as hexadecimal.
+ * '010'.to_c # => (10+0i) # Not parsed as octal.
+ *
+ * # Float literals:
+ * '3.14'.to_c # => (3.14+0i)
+ * '3.14i'.to_c # => (0+3.14i)
+ * '1.23e4'.to_c # => (12300.0+0i)
+ * '1.23e+4'.to_c # => (12300.0+0i)
+ * '1.23e-4'.to_c # => (0.000123+0i)
+ *
+ * # Rational literals:
+ * '1/2'.to_c # => ((1/2)+0i)
+ * '-1/2'.to_c # => ((-1/2)+0i)
+ * '1/2r'.to_c # => ((1/2)+0i)
+ * '-1/2r'.to_c # => ((-1/2)+0i)
+ *
+ * <b>Rectangular Coordinates</b>
+ *
+ * With separator <tt>'+'</tt> or <tt>'-'</tt>,
+ * or with no separator,
+ * interprets the values as rectangular coordinates: real and imaginary.
+ *
+ * With no separator, assigns a single value to either the real or the imaginary part:
+ *
+ * ''.to_c # => (0+0i) # Defaults to zero.
+ * '1'.to_c # => (1+0i) # Real (no trailing 'i').
+ * '1i'.to_c # => (0+1i) # Imaginary (trailing 'i').
+ * 'i'.to_c # => (0+1i) # Special case (imaginary 1).
+ *
+ * With separator <tt>'+'</tt>, both parts positive (or zero):
+ *
+ * # Without trailing 'i'.
+ * '+'.to_c # => (0+0i) # No values: defaults to zero.
+ * '+1'.to_c # => (1+0i) # Value after '+': real only.
+ * '1+'.to_c # => (1+0i) # Value before '+': real only.
+ * '2+1'.to_c # => (2+0i) # Values before and after '+': real and imaginary.
+ * # With trailing 'i'.
+ * '+1i'.to_c # => (0+1i) # Value after '+': imaginary only.
+ * '2+i'.to_c # => (2+1i) # Value before '+': real and imaginary 1.
+ * '2+1i'.to_c # => (2+1i) # Values before and after '+': real and imaginary.
+ *
+ * With separator <tt>'-'</tt>, negative imaginary part:
+ *
+ * # Without trailing 'i'.
+ * '-'.to_c # => (0+0i) # No values: defaults to zero.
+ * '-1'.to_c # => (-1+0i) # Value after '-': negative real, zero imaginary.
+ * '1-'.to_c # => (1+0i) # Value before '-': positive real, zero imaginary.
+ * '2-1'.to_c # => (2+0i) # Values before and after '-': positive real, zero imaginary.
+ * # With trailing 'i'.
+ * '-1i'.to_c # => (0-1i) # Value after '-': negative real, zero imaginary.
+ * '2-i'.to_c # => (2-1i) # Value before '-': positive real, negative imaginary.
+ * '2-1i'.to_c # => (2-1i) # Values before and after '-': positive real, negative imaginary.
+ *
+ * Note that the suffixed character <tt>'i'</tt>
+ * may instead be one of <tt>'I'</tt>, <tt>'j'</tt>, or <tt>'J'</tt>,
+ * with the same effect.
+ *
+ * <b>Polar Coordinates</b>
+ *
+ * With separator <tt>'@'</tt>)
+ * interprets the values as polar coordinates: magnitude and angle.
+ *
+ * '2@'.to_c.polar # => [2, 0.0] # Value before '@': magnitude only.
+ * # Values before and after '@': magnitude and angle.
+ * '2@1'.to_c.polar # => [2.0, 1.0]
+ * "1.0@#{Math::PI/2}".to_c # => (0.0+1i)
+ * "1.0@#{Math::PI}".to_c # => (-1+0.0i)
+ * # Magnitude not given: defaults to zero.
+ * '@'.to_c.polar # => [0, 0.0]
+ * '@1'.to_c.polar # => [0, 0.0]
+ *
+ * '1.0@0'.to_c # => (1+0.0i)
+ *
+ * Note that in all cases, the suffixed character <tt>'i'</tt>
+ * may instead be one of <tt>'I'</tt>, <tt>'j'</tt>, <tt>'J'</tt>,
+ * with the same effect.
+ *
+ * See {Converting to Non-String}[rdoc-ref:String@Converting+to+Non--5CString].
*/
static VALUE
string_to_c(VALUE self)
{
- char *s;
VALUE num;
rb_must_asciicompat(self);
- s = RSTRING_PTR(self);
-
- if (s && s[RSTRING_LEN(self)]) {
- rb_str_modify(self);
- s = RSTRING_PTR(self);
- s[RSTRING_LEN(self)] = '\0';
- }
-
- if (!s)
- s = (char *)"";
-
- (void)parse_comp(s, 0, &num);
+ (void)parse_comp(rb_str_fill_terminator(self, 1), FALSE, &num);
return num;
}
static VALUE
-nucomp_s_convert(int argc, VALUE *argv, VALUE klass)
+to_complex(VALUE val)
{
- VALUE a1, a2, backref;
-
- rb_scan_args(argc, argv, "11", &a1, &a2);
-
- if (NIL_P(a1) || (argc == 2 && NIL_P(a2)))
- rb_raise(rb_eTypeError, "can't convert nil into Complex");
+ return rb_convert_type(val, T_COMPLEX, "Complex", "to_c");
+}
- backref = rb_backref_get();
- rb_match_busy(backref);
+static VALUE
+nucomp_convert(VALUE klass, VALUE a1, VALUE a2, int raise)
+{
+ if (NIL_P(a1) || NIL_P(a2)) {
+ if (!raise) return Qnil;
+ rb_raise(rb_eTypeError, "can't convert nil into Complex");
+ }
if (RB_TYPE_P(a1, T_STRING)) {
- a1 = string_to_c_strict(a1);
+ a1 = string_to_c_strict(a1, raise);
+ if (NIL_P(a1)) return Qnil;
}
if (RB_TYPE_P(a2, T_STRING)) {
- a2 = string_to_c_strict(a2);
+ a2 = string_to_c_strict(a2, raise);
+ if (NIL_P(a2)) return Qnil;
}
- rb_backref_set(backref);
-
if (RB_TYPE_P(a1, T_COMPLEX)) {
- {
- get_dat1(a1);
+ {
+ get_dat1(a1);
- if (k_exact_zero_p(dat->imag))
- a1 = dat->real;
- }
+ if (k_exact_zero_p(dat->imag))
+ a1 = dat->real;
+ }
}
if (RB_TYPE_P(a2, T_COMPLEX)) {
- {
- get_dat1(a2);
+ {
+ get_dat1(a2);
- if (k_exact_zero_p(dat->imag))
- a2 = dat->real;
- }
+ if (k_exact_zero_p(dat->imag))
+ a2 = dat->real;
+ }
}
if (RB_TYPE_P(a1, T_COMPLEX)) {
- if (argc == 1 || (k_exact_zero_p(a2)))
- return a1;
- }
-
- if (argc == 1) {
- if (k_numeric_p(a1) && !f_real_p(a1))
- return a1;
- /* should raise exception for consistency */
- if (!k_numeric_p(a1))
- return rb_convert_type(a1, T_COMPLEX, "Complex", "to_c");
+ if (UNDEF_P(a2) || (k_exact_zero_p(a2)))
+ return a1;
+ }
+
+ if (UNDEF_P(a2)) {
+ if (k_numeric_p(a1) && !f_real_p(a1))
+ return a1;
+ /* should raise exception for consistency */
+ if (!k_numeric_p(a1)) {
+ if (!raise) {
+ a1 = rb_protect(to_complex, a1, NULL);
+ rb_set_errinfo(Qnil);
+ return a1;
+ }
+ return to_complex(a1);
+ }
}
else {
- if ((k_numeric_p(a1) && k_numeric_p(a2)) &&
- (!f_real_p(a1) || !f_real_p(a2)))
- return f_add(a1,
- f_mul(a2,
- f_complex_new_bang2(rb_cComplex, ZERO, ONE)));
+ if ((k_numeric_p(a1) && k_numeric_p(a2)) &&
+ (!f_real_p(a1) || !f_real_p(a2)))
+ return f_add(a1,
+ f_mul(a2,
+ f_complex_new_bang2(rb_cComplex, ZERO, ONE)));
}
{
- VALUE argv2[2];
- argv2[0] = a1;
- argv2[1] = a2;
- return nucomp_s_new(argc, argv2, klass);
+ int argc;
+ VALUE argv2[2];
+ argv2[0] = a1;
+ if (UNDEF_P(a2)) {
+ argv2[1] = Qnil;
+ argc = 1;
+ }
+ else {
+ if (!raise && !RB_INTEGER_TYPE_P(a2) && !RB_FLOAT_TYPE_P(a2) && !RB_TYPE_P(a2, T_RATIONAL))
+ return Qnil;
+ argv2[1] = a2;
+ argc = 2;
+ }
+ return nucomp_s_new(argc, argv2, klass);
}
}
-/* --- */
-
-/*
- * call-seq:
- * num.real -> self
- *
- * Returns self.
- */
static VALUE
-numeric_real(VALUE self)
+nucomp_s_convert(int argc, VALUE *argv, VALUE klass)
{
- return self;
-}
+ VALUE a1, a2;
-/*
- * call-seq:
- * num.imag -> 0
- * num.imaginary -> 0
- *
- * Returns zero.
- */
-static VALUE
-numeric_imag(VALUE self)
-{
- return INT2FIX(0);
+ if (rb_scan_args(argc, argv, "11", &a1, &a2) == 1) {
+ a2 = Qundef;
+ }
+
+ return nucomp_convert(klass, a1, a2, TRUE);
}
/*
* call-seq:
- * num.abs2 -> real
+ * abs2 -> real
*
- * Returns square of self.
+ * Returns the square of +self+.
*/
static VALUE
numeric_abs2(VALUE self)
@@ -2007,30 +2510,25 @@ numeric_abs2(VALUE self)
return f_mul(self, self);
}
-#define id_PI rb_intern("PI")
-
/*
* call-seq:
- * num.arg -> 0 or float
- * num.angle -> 0 or float
- * num.phase -> 0 or float
+ * arg -> 0 or Math::PI
*
- * Returns 0 if the value is positive, pi otherwise.
+ * Returns zero if +self+ is positive, Math::PI otherwise.
*/
static VALUE
numeric_arg(VALUE self)
{
if (f_positive_p(self))
- return INT2FIX(0);
- return rb_const_get(rb_mMath, id_PI);
+ return INT2FIX(0);
+ return DBL2NUM(M_PI);
}
/*
* call-seq:
- * num.rect -> array
- * num.rectangular -> array
+ * rect -> array
*
- * Returns an array; [num, 0].
+ * Returns array <tt>[self, 0]</tt>.
*/
static VALUE
numeric_rect(VALUE self)
@@ -2040,117 +2538,205 @@ numeric_rect(VALUE self)
/*
* call-seq:
- * num.polar -> array
+ * polar -> array
*
- * Returns an array; [num.abs, num.arg].
+ * Returns array <tt>[self.abs, self.arg]</tt>.
*/
static VALUE
numeric_polar(VALUE self)
{
- return rb_assoc_new(f_abs(self), f_arg(self));
-}
+ VALUE abs, arg;
-/*
- * call-seq:
- * num.conj -> self
- * num.conjugate -> self
- *
- * Returns self.
- */
-static VALUE
-numeric_conj(VALUE self)
-{
- return self;
+ if (RB_INTEGER_TYPE_P(self)) {
+ abs = rb_int_abs(self);
+ arg = numeric_arg(self);
+ }
+ else if (RB_FLOAT_TYPE_P(self)) {
+ abs = rb_float_abs(self);
+ arg = float_arg(self);
+ }
+ else if (RB_TYPE_P(self, T_RATIONAL)) {
+ abs = rb_rational_abs(self);
+ arg = numeric_arg(self);
+ }
+ else {
+ abs = f_abs(self);
+ arg = f_arg(self);
+ }
+ return rb_assoc_new(abs, arg);
}
/*
* call-seq:
- * flo.arg -> 0 or float
- * flo.angle -> 0 or float
- * flo.phase -> 0 or float
+ * arg -> 0 or Math::PI
*
- * Returns 0 if the value is positive, pi otherwise.
+ * Returns 0 if +self+ is positive, Math::PI otherwise.
*/
static VALUE
float_arg(VALUE self)
{
if (isnan(RFLOAT_VALUE(self)))
- return self;
+ return self;
if (f_tpositive_p(self))
- return INT2FIX(0);
+ return INT2FIX(0);
return rb_const_get(rb_mMath, id_PI);
}
/*
- * A complex number can be represented as a paired real number with
- * imaginary unit; a+bi. Where a is real part, b is imaginary part
- * and i is imaginary unit. Real a equals complex a+0i
- * mathematically.
+ * A \Complex object houses a pair of values,
+ * given when the object is created as either <i>rectangular coordinates</i>
+ * or <i>polar coordinates</i>.
+ *
+ * == Rectangular Coordinates
+ *
+ * The rectangular coordinates of a complex number
+ * are called the _real_ and _imaginary_ parts;
+ * see {Complex number definition}[https://en.wikipedia.org/wiki/Complex_number#Definition_and_basic_operations].
+ *
+ * You can create a \Complex object from rectangular coordinates with:
+ *
+ * - A {complex literal}[rdoc-ref:syntax/literals.rdoc@Complex+Literals].
+ * - Method Complex.rect.
+ * - Method Kernel#Complex, either with numeric arguments or with certain string arguments.
+ * - Method String#to_c, for certain strings.
+ *
+ * Note that each of the stored parts may be a an instance one of the classes
+ * Complex, Float, Integer, or Rational;
+ * they may be retrieved:
+ *
+ * - Separately, with methods Complex#real and Complex#imaginary.
+ * - Together, with method Complex#rect.
+ *
+ * The corresponding (computed) polar values may be retrieved:
+ *
+ * - Separately, with methods Complex#abs and Complex#arg.
+ * - Together, with method Complex#polar.
*
- * Complex object can be created as literal, and also by using
- * Kernel#Complex, Complex::rect, Complex::polar or to_c method.
+ * == Polar Coordinates
*
- * 2+1i #=> (2+1i)
- * Complex(1) #=> (1+0i)
- * Complex(2, 3) #=> (2+3i)
- * Complex.polar(2, 3) #=> (-1.9799849932008908+0.2822400161197344i)
- * 3.to_c #=> (3+0i)
+ * The polar coordinates of a complex number
+ * are called the _absolute_ and _argument_ parts;
+ * see {Complex polar plane}[https://en.wikipedia.org/wiki/Complex_number#Polar_form].
*
- * You can also create complex object from floating-point numbers or
- * strings.
+ * In this class, the argument part
+ * in expressed {radians}[https://en.wikipedia.org/wiki/Radian]
+ * (not {degrees}[https://en.wikipedia.org/wiki/Degree_(angle)]).
*
- * Complex(0.3) #=> (0.3+0i)
- * Complex('0.3-0.5i') #=> (0.3-0.5i)
- * Complex('2/3+3/4i') #=> ((2/3)+(3/4)*i)
- * Complex('1@2') #=> (-0.4161468365471424+0.9092974268256817i)
+ * You can create a \Complex object from polar coordinates with:
*
- * 0.3.to_c #=> (0.3+0i)
- * '0.3-0.5i'.to_c #=> (0.3-0.5i)
- * '2/3+3/4i'.to_c #=> ((2/3)+(3/4)*i)
- * '1@2'.to_c #=> (-0.4161468365471424+0.9092974268256817i)
+ * - Method Complex.polar.
+ * - Method Kernel#Complex, with certain string arguments.
+ * - Method String#to_c, for certain strings.
*
- * A complex object is either an exact or an inexact number.
+ * Note that each of the stored parts may be a an instance one of the classes
+ * Complex, Float, Integer, or Rational;
+ * they may be retrieved:
+ *
+ * - Separately, with methods Complex#abs and Complex#arg.
+ * - Together, with method Complex#polar.
+ *
+ * The corresponding (computed) rectangular values may be retrieved:
+ *
+ * - Separately, with methods Complex#real and Complex#imag.
+ * - Together, with method Complex#rect.
+ *
+ * == What's Here
+ *
+ * First, what's elsewhere:
+ *
+ * - Class \Complex inherits (directly or indirectly)
+ * from classes {Numeric}[rdoc-ref:Numeric@What-27s+Here]
+ * and {Object}[rdoc-ref:Object@What-27s+Here].
+ * - Includes (indirectly) module {Comparable}[rdoc-ref:Comparable@What-27s+Here].
+ *
+ * Here, class \Complex has methods for:
+ *
+ * === Creating \Complex Objects
+ *
+ * - ::polar: Returns a new \Complex object based on given polar coordinates.
+ * - ::rect (and its alias ::rectangular):
+ * Returns a new \Complex object based on given rectangular coordinates.
+ *
+ * === Querying
+ *
+ * - #abs (and its alias #magnitude): Returns the absolute value for +self+.
+ * - #arg (and its aliases #angle and #phase):
+ * Returns the argument (angle) for +self+ in radians.
+ * - #denominator: Returns the denominator of +self+.
+ * - #finite?: Returns whether both +self.real+ and +self.image+ are finite.
+ * - #hash: Returns the integer hash value for +self+.
+ * - #imag (and its alias #imaginary): Returns the imaginary value for +self+.
+ * - #infinite?: Returns whether +self.real+ or +self.image+ is infinite.
+ * - #numerator: Returns the numerator of +self+.
+ * - #polar: Returns the array <tt>[self.abs, self.arg]</tt>.
+ * - #inspect: Returns a string representation of +self+.
+ * - #real: Returns the real value for +self+.
+ * - #real?: Returns +false+; for compatibility with Numeric#real?.
+ * - #rect (and its alias #rectangular):
+ * Returns the array <tt>[self.real, self.imag]</tt>.
+ *
+ * === Comparing
+ *
+ * - #<=>: Returns whether +self+ is less than, equal to, or greater than the given argument.
+ * - #==: Returns whether +self+ is equal to the given argument.
+ *
+ * === Converting
+ *
+ * - #rationalize: Returns a Rational object whose value is exactly
+ * or approximately equivalent to that of <tt>self.real</tt>.
+ * - #to_c: Returns +self+.
+ * - #to_d: Returns the value as a BigDecimal object.
+ * - #to_f: Returns the value of <tt>self.real</tt> as a Float, if possible.
+ * - #to_i: Returns the value of <tt>self.real</tt> as an Integer, if possible.
+ * - #to_r: Returns the value of <tt>self.real</tt> as a Rational, if possible.
+ * - #to_s: Returns a string representation of +self+.
+ *
+ * === Performing Complex Arithmetic
+ *
+ * - #*: Returns the product of +self+ and the given numeric.
+ * - #**: Returns +self+ raised to power of the given numeric.
+ * - #+: Returns the sum of +self+ and the given numeric.
+ * - #-: Returns the difference of +self+ and the given numeric.
+ * - #-@: Returns the negation of +self+.
+ * - #/: Returns the quotient of +self+ and the given numeric.
+ * - #abs2: Returns square of the absolute value (magnitude) for +self+.
+ * - #conj (and its alias #conjugate): Returns the conjugate of +self+.
+ * - #fdiv: Returns <tt>Complex.rect(self.real/numeric, self.imag/numeric)</tt>.
+ *
+ * === Working with JSON
+ *
+ * - ::json_create: Returns a new \Complex object,
+ * deserialized from the given serialized hash.
+ * - #as_json: Returns a serialized hash constructed from +self+.
+ * - #to_json: Returns a JSON string representing +self+.
+ *
+ * These methods are provided by the {JSON gem}[https://github.com/ruby/json]. To make these methods available:
+ *
+ * require 'json/add/complex'
*
- * Complex(1, 1) / 2 #=> ((1/2)+(1/2)*i)
- * Complex(1, 1) / 2.0 #=> (0.5+0.5i)
*/
void
Init_Complex(void)
{
VALUE compat;
-#undef rb_intern
-#define rb_intern(str) rb_intern_const(str)
-
- assert(fprintf(stderr, "assert() is now active\n"));
-
- id_abs = rb_intern("abs");
- id_arg = rb_intern("arg");
- id_convert = rb_intern("convert");
- id_denominator = rb_intern("denominator");
- id_eqeq_p = rb_intern("==");
- id_expt = rb_intern("**");
- id_fdiv = rb_intern("fdiv");
- id_negate = rb_intern("-@");
- id_numerator = rb_intern("numerator");
- id_quo = rb_intern("quo");
- id_real_p = rb_intern("real?");
- id_to_f = rb_intern("to_f");
- id_to_i = rb_intern("to_i");
- id_to_r = rb_intern("to_r");
- id_i_real = rb_intern("@real");
- id_i_imag = rb_intern("@image"); /* @image, not @imag */
+ id_abs = rb_intern_const("abs");
+ id_arg = rb_intern_const("arg");
+ id_denominator = rb_intern_const("denominator");
+ id_numerator = rb_intern_const("numerator");
+ id_real_p = rb_intern_const("real?");
+ id_i_real = rb_intern_const("@real");
+ id_i_imag = rb_intern_const("@image"); /* @image, not @imag */
+ id_finite_p = rb_intern_const("finite?");
+ id_infinite_p = rb_intern_const("infinite?");
+ id_rationalize = rb_intern_const("rationalize");
+ id_PI = rb_intern_const("PI");
rb_cComplex = rb_define_class("Complex", rb_cNumeric);
rb_define_alloc_func(rb_cComplex, nucomp_s_alloc);
rb_undef_method(CLASS_OF(rb_cComplex), "allocate");
-#if 0
- rb_define_private_method(CLASS_OF(rb_cComplex), "new!", nucomp_s_new_bang, -1);
- rb_define_private_method(CLASS_OF(rb_cComplex), "new", nucomp_s_new, -1);
-#else
rb_undef_method(CLASS_OF(rb_cComplex), "new");
-#endif
rb_define_singleton_method(rb_cComplex, "rectangular", nucomp_s_new, -1);
rb_define_singleton_method(rb_cComplex, "rect", nucomp_s_new, -1);
@@ -2158,13 +2744,8 @@ Init_Complex(void)
rb_define_global_function("Complex", nucomp_f_complex, -1);
+ rb_undef_methods_from(rb_cComplex, RCLASS_ORIGIN(rb_mComparable));
rb_undef_method(rb_cComplex, "%");
- rb_undef_method(rb_cComplex, "<");
- rb_undef_method(rb_cComplex, "<=");
- rb_undef_method(rb_cComplex, "<=>");
- rb_undef_method(rb_cComplex, ">");
- rb_undef_method(rb_cComplex, ">=");
- rb_undef_method(rb_cComplex, "between?");
rb_undef_method(rb_cComplex, "div");
rb_undef_method(rb_cComplex, "divmod");
rb_undef_method(rb_cComplex, "floor");
@@ -2176,43 +2757,36 @@ Init_Complex(void)
rb_undef_method(rb_cComplex, "truncate");
rb_undef_method(rb_cComplex, "i");
- rb_define_method(rb_cComplex, "real", nucomp_real, 0);
- rb_define_method(rb_cComplex, "imaginary", nucomp_imag, 0);
- rb_define_method(rb_cComplex, "imag", nucomp_imag, 0);
+ rb_define_method(rb_cComplex, "real", rb_complex_real, 0);
+ rb_define_method(rb_cComplex, "imaginary", rb_complex_imag, 0);
+ rb_define_method(rb_cComplex, "imag", rb_complex_imag, 0);
- rb_define_method(rb_cComplex, "-@", nucomp_negate, 0);
- rb_define_method(rb_cComplex, "+", nucomp_add, 1);
- rb_define_method(rb_cComplex, "-", nucomp_sub, 1);
- rb_define_method(rb_cComplex, "*", nucomp_mul, 1);
- rb_define_method(rb_cComplex, "/", nucomp_div, 1);
+ rb_define_method(rb_cComplex, "-@", rb_complex_uminus, 0);
+ rb_define_method(rb_cComplex, "+", rb_complex_plus, 1);
+ rb_define_method(rb_cComplex, "-", rb_complex_minus, 1);
+ rb_define_method(rb_cComplex, "*", rb_complex_mul, 1);
+ rb_define_method(rb_cComplex, "/", rb_complex_div, 1);
rb_define_method(rb_cComplex, "quo", nucomp_quo, 1);
rb_define_method(rb_cComplex, "fdiv", nucomp_fdiv, 1);
- rb_define_method(rb_cComplex, "**", nucomp_expt, 1);
+ rb_define_method(rb_cComplex, "**", rb_complex_pow, 1);
rb_define_method(rb_cComplex, "==", nucomp_eqeq_p, 1);
+ rb_define_method(rb_cComplex, "<=>", nucomp_cmp, 1);
rb_define_method(rb_cComplex, "coerce", nucomp_coerce, 1);
- rb_define_method(rb_cComplex, "abs", nucomp_abs, 0);
- rb_define_method(rb_cComplex, "magnitude", nucomp_abs, 0);
+ rb_define_method(rb_cComplex, "abs", rb_complex_abs, 0);
+ rb_define_method(rb_cComplex, "magnitude", rb_complex_abs, 0);
rb_define_method(rb_cComplex, "abs2", nucomp_abs2, 0);
- rb_define_method(rb_cComplex, "arg", nucomp_arg, 0);
- rb_define_method(rb_cComplex, "angle", nucomp_arg, 0);
- rb_define_method(rb_cComplex, "phase", nucomp_arg, 0);
+ rb_define_method(rb_cComplex, "arg", rb_complex_arg, 0);
+ rb_define_method(rb_cComplex, "angle", rb_complex_arg, 0);
+ rb_define_method(rb_cComplex, "phase", rb_complex_arg, 0);
rb_define_method(rb_cComplex, "rectangular", nucomp_rect, 0);
rb_define_method(rb_cComplex, "rect", nucomp_rect, 0);
rb_define_method(rb_cComplex, "polar", nucomp_polar, 0);
- rb_define_method(rb_cComplex, "conjugate", nucomp_conj, 0);
- rb_define_method(rb_cComplex, "conj", nucomp_conj, 0);
-#if 0
- rb_define_method(rb_cComplex, "~", nucomp_conj, 0); /* gcc */
-#endif
+ rb_define_method(rb_cComplex, "conjugate", rb_complex_conjugate, 0);
+ rb_define_method(rb_cComplex, "conj", rb_complex_conjugate, 0);
- rb_define_method(rb_cComplex, "real?", nucomp_false, 0);
-#if 0
- rb_define_method(rb_cComplex, "complex?", nucomp_true, 0);
- rb_define_method(rb_cComplex, "exact?", nucomp_exact_p, 0);
- rb_define_method(rb_cComplex, "inexact?", nucomp_inexact_p, 0);
-#endif
+ rb_define_method(rb_cComplex, "real?", nucomp_real_p_m, 0);
rb_define_method(rb_cComplex, "numerator", nucomp_numerator, 0);
rb_define_method(rb_cComplex, "denominator", nucomp_denominator, 0);
@@ -2226,30 +2800,26 @@ Init_Complex(void)
rb_undef_method(rb_cComplex, "positive?");
rb_undef_method(rb_cComplex, "negative?");
+ rb_define_method(rb_cComplex, "finite?", rb_complex_finite_p, 0);
+ rb_define_method(rb_cComplex, "infinite?", rb_complex_infinite_p, 0);
+
rb_define_private_method(rb_cComplex, "marshal_dump", nucomp_marshal_dump, 0);
- compat = rb_define_class_under(rb_cComplex, "compatible", rb_cObject); /* :nodoc: */
+ /* :nodoc: */
+ compat = rb_define_class_under(rb_cComplex, "compatible", rb_cObject);
rb_define_private_method(compat, "marshal_load", nucomp_marshal_load, 1);
rb_marshal_define_compat(rb_cComplex, compat, nucomp_dumper, nucomp_loader);
- /* --- */
-
rb_define_method(rb_cComplex, "to_i", nucomp_to_i, 0);
rb_define_method(rb_cComplex, "to_f", nucomp_to_f, 0);
rb_define_method(rb_cComplex, "to_r", nucomp_to_r, 0);
rb_define_method(rb_cComplex, "rationalize", nucomp_rationalize, -1);
rb_define_method(rb_cComplex, "to_c", nucomp_to_c, 0);
- rb_define_method(rb_cNilClass, "to_c", nilclass_to_c, 0);
rb_define_method(rb_cNumeric, "to_c", numeric_to_c, 0);
rb_define_method(rb_cString, "to_c", string_to_c, 0);
rb_define_private_method(CLASS_OF(rb_cComplex), "convert", nucomp_s_convert, -1);
- /* --- */
-
- rb_define_method(rb_cNumeric, "real", numeric_real, 0);
- rb_define_method(rb_cNumeric, "imaginary", numeric_imag, 0);
- rb_define_method(rb_cNumeric, "imag", numeric_imag, 0);
rb_define_method(rb_cNumeric, "abs2", numeric_abs2, 0);
rb_define_method(rb_cNumeric, "arg", numeric_arg, 0);
rb_define_method(rb_cNumeric, "angle", numeric_arg, 0);
@@ -2257,24 +2827,24 @@ Init_Complex(void)
rb_define_method(rb_cNumeric, "rectangular", numeric_rect, 0);
rb_define_method(rb_cNumeric, "rect", numeric_rect, 0);
rb_define_method(rb_cNumeric, "polar", numeric_polar, 0);
- rb_define_method(rb_cNumeric, "conjugate", numeric_conj, 0);
- rb_define_method(rb_cNumeric, "conj", numeric_conj, 0);
rb_define_method(rb_cFloat, "arg", float_arg, 0);
rb_define_method(rb_cFloat, "angle", float_arg, 0);
rb_define_method(rb_cFloat, "phase", float_arg, 0);
/*
- * The imaginary unit.
+ * Equivalent
+ * to <tt>Complex.rect(0, 1)</tt>:
+ *
+ * Complex::I # => (0+1i)
+ *
*/
rb_define_const(rb_cComplex, "I",
- f_complex_new_bang2(rb_cComplex, ZERO, ONE));
+ f_complex_new_bang2(rb_cComplex, ZERO, ONE));
+
+#if !USE_FLONUM
+ rb_vm_register_global_object(RFLOAT_0 = DBL2NUM(0.0));
+#endif
rb_provide("complex.so"); /* for backward compatibility */
}
-
-/*
-Local variables:
-c-file-style: "ruby"
-End:
-*/
diff --git a/concurrent_set.c b/concurrent_set.c
new file mode 100644
index 0000000000..234b6408b6
--- /dev/null
+++ b/concurrent_set.c
@@ -0,0 +1,513 @@
+#include "internal.h"
+#include "internal/gc.h"
+#include "internal/concurrent_set.h"
+#include "ruby/atomic.h"
+#include "vm_sync.h"
+
+#define CONCURRENT_SET_CONTINUATION_BIT ((VALUE)1 << (sizeof(VALUE) * CHAR_BIT - 1))
+#define CONCURRENT_SET_HASH_MASK (~CONCURRENT_SET_CONTINUATION_BIT)
+
+enum concurrent_set_special_values {
+ CONCURRENT_SET_EMPTY,
+ CONCURRENT_SET_DELETED,
+ CONCURRENT_SET_MOVED,
+ CONCURRENT_SET_SPECIAL_VALUE_COUNT
+};
+
+struct concurrent_set_entry {
+ VALUE hash;
+ VALUE key;
+};
+
+struct concurrent_set {
+ rb_atomic_t size;
+ unsigned int capacity;
+ unsigned int deleted_entries;
+ const struct rb_concurrent_set_funcs *funcs;
+ struct concurrent_set_entry *entries;
+};
+
+static void
+concurrent_set_mark_continuation(struct concurrent_set_entry *entry, VALUE curr_hash_and_flags)
+{
+ if (curr_hash_and_flags & CONCURRENT_SET_CONTINUATION_BIT) return;
+
+ RUBY_ASSERT((curr_hash_and_flags & CONCURRENT_SET_HASH_MASK) != 0);
+
+ VALUE new_hash = curr_hash_and_flags | CONCURRENT_SET_CONTINUATION_BIT;
+ VALUE prev_hash = rbimpl_atomic_value_cas(&entry->hash, curr_hash_and_flags, new_hash, RBIMPL_ATOMIC_RELEASE, RBIMPL_ATOMIC_RELAXED);
+
+ // At the moment we only expect to be racing concurrently against another
+ // thread also setting the continuation bit.
+ // In the future if deletion is concurrent this will need adjusting
+ RUBY_ASSERT(prev_hash == curr_hash_and_flags || prev_hash == new_hash);
+ (void)prev_hash;
+}
+
+static VALUE
+concurrent_set_hash(const struct concurrent_set *set, VALUE key)
+{
+ VALUE hash = set->funcs->hash(key);
+ hash &= CONCURRENT_SET_HASH_MASK;
+ if (hash == 0) {
+ hash ^= CONCURRENT_SET_HASH_MASK;
+ }
+ RUBY_ASSERT(hash != 0);
+ RUBY_ASSERT(!(hash & CONCURRENT_SET_CONTINUATION_BIT));
+ return hash;
+}
+
+static void
+concurrent_set_free(void *ptr)
+{
+ struct concurrent_set *set = ptr;
+ xfree(set->entries);
+}
+
+static size_t
+concurrent_set_size(const void *ptr)
+{
+ const struct concurrent_set *set = ptr;
+ return sizeof(struct concurrent_set) +
+ (set->capacity * sizeof(struct concurrent_set_entry));
+}
+
+/* Hack: Though it would be trivial, we're intentionally avoiding WB-protecting
+ * this object. This prevents the object from aging and ensures it can always be
+ * collected in a minor GC.
+ * Longer term this deserves a better way to reclaim memory promptly.
+ */
+static void
+concurrent_set_mark(void *ptr)
+{
+ (void)ptr;
+}
+
+static const rb_data_type_t concurrent_set_type = {
+ .wrap_struct_name = "VM/concurrent_set",
+ .function = {
+ .dmark = concurrent_set_mark,
+ .dfree = concurrent_set_free,
+ .dsize = concurrent_set_size,
+ },
+ /* Hack: NOT WB_PROTECTED on purpose (see above) */
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
+};
+
+VALUE
+rb_concurrent_set_new(const struct rb_concurrent_set_funcs *funcs, int capacity)
+{
+ struct concurrent_set *set;
+ VALUE obj = TypedData_Make_Struct(0, struct concurrent_set, &concurrent_set_type, set);
+ set->funcs = funcs;
+ set->entries = ZALLOC_N(struct concurrent_set_entry, capacity);
+ set->capacity = capacity;
+ return obj;
+}
+
+rb_atomic_t
+rb_concurrent_set_size(VALUE set_obj)
+{
+ struct concurrent_set *set = RTYPEDDATA_GET_DATA(set_obj);
+
+ return RUBY_ATOMIC_LOAD(set->size);
+}
+
+struct concurrent_set_probe {
+ int idx;
+ int d;
+ int mask;
+};
+
+static int
+concurrent_set_probe_start(struct concurrent_set_probe *probe, struct concurrent_set *set, VALUE hash)
+{
+ RUBY_ASSERT((set->capacity & (set->capacity - 1)) == 0);
+ probe->d = 0;
+ probe->mask = set->capacity - 1;
+ probe->idx = hash & probe->mask;
+ return probe->idx;
+}
+
+static int
+concurrent_set_probe_next(struct concurrent_set_probe *probe)
+{
+ probe->d++;
+ probe->idx = (probe->idx + probe->d) & probe->mask;
+ return probe->idx;
+}
+
+static void
+concurrent_set_try_resize_without_locking(VALUE old_set_obj, VALUE *set_obj_ptr)
+{
+ // Check if another thread has already resized.
+ if (rbimpl_atomic_value_load(set_obj_ptr, RBIMPL_ATOMIC_ACQUIRE) != old_set_obj) {
+ return;
+ }
+
+ struct concurrent_set *old_set = RTYPEDDATA_GET_DATA(old_set_obj);
+
+ // This may overcount by up to the number of threads concurrently attempting to insert
+ // GC may also happen between now and the set being rebuilt
+ int expected_size = rbimpl_atomic_load(&old_set->size, RBIMPL_ATOMIC_RELAXED) - old_set->deleted_entries;
+
+ // NOTE: new capacity must make sense with load factor, don't change one without checking the other.
+ struct concurrent_set_entry *old_entries = old_set->entries;
+ int old_capacity = old_set->capacity;
+ int new_capacity = old_capacity * 2;
+ if (new_capacity > expected_size * 8) {
+ new_capacity = old_capacity / 2;
+ }
+ else if (new_capacity > expected_size * 4) {
+ new_capacity = old_capacity;
+ }
+
+ // May cause GC and therefore deletes, so must happen first.
+ VALUE new_set_obj = rb_concurrent_set_new(old_set->funcs, new_capacity);
+ struct concurrent_set *new_set = RTYPEDDATA_GET_DATA(new_set_obj);
+
+ for (int i = 0; i < old_capacity; i++) {
+ struct concurrent_set_entry *old_entry = &old_entries[i];
+ VALUE key = rbimpl_atomic_value_exchange(&old_entry->key, CONCURRENT_SET_MOVED, RBIMPL_ATOMIC_ACQUIRE);
+ RUBY_ASSERT(key != CONCURRENT_SET_MOVED);
+
+ if (key < CONCURRENT_SET_SPECIAL_VALUE_COUNT) continue;
+ if (!RB_SPECIAL_CONST_P(key) && rb_objspace_garbage_object_p(key)) continue;
+
+ VALUE hash = rbimpl_atomic_value_load(&old_entry->hash, RBIMPL_ATOMIC_RELAXED) & CONCURRENT_SET_HASH_MASK;
+ RUBY_ASSERT(hash != 0);
+ RUBY_ASSERT(hash == concurrent_set_hash(old_set, key));
+
+ // Insert key into new_set.
+ struct concurrent_set_probe probe;
+ int idx = concurrent_set_probe_start(&probe, new_set, hash);
+
+ while (true) {
+ struct concurrent_set_entry *entry = &new_set->entries[idx];
+
+ if (entry->hash == CONCURRENT_SET_EMPTY) {
+ RUBY_ASSERT(entry->key == CONCURRENT_SET_EMPTY);
+
+ new_set->size++;
+ RUBY_ASSERT(new_set->size <= new_set->capacity / 2);
+
+ entry->key = key;
+ entry->hash = hash;
+ break;
+ }
+
+ RUBY_ASSERT(entry->key >= CONCURRENT_SET_SPECIAL_VALUE_COUNT);
+ entry->hash |= CONCURRENT_SET_CONTINUATION_BIT;
+ idx = concurrent_set_probe_next(&probe);
+ }
+ }
+
+ rbimpl_atomic_value_store(set_obj_ptr, new_set_obj, RBIMPL_ATOMIC_RELEASE);
+
+ RB_GC_GUARD(old_set_obj);
+}
+
+static void
+concurrent_set_try_resize(VALUE old_set_obj, VALUE *set_obj_ptr)
+{
+ RB_VM_LOCKING() {
+ concurrent_set_try_resize_without_locking(old_set_obj, set_obj_ptr);
+ }
+}
+
+VALUE
+rb_concurrent_set_find(VALUE *set_obj_ptr, VALUE key)
+{
+ RUBY_ASSERT(key >= CONCURRENT_SET_SPECIAL_VALUE_COUNT);
+
+ VALUE set_obj;
+ VALUE hash = 0;
+ struct concurrent_set *set;
+ struct concurrent_set_probe probe;
+ int idx;
+
+ retry:
+ set_obj = rbimpl_atomic_value_load(set_obj_ptr, RBIMPL_ATOMIC_ACQUIRE);
+ RUBY_ASSERT(set_obj);
+ set = RTYPEDDATA_GET_DATA(set_obj);
+
+ if (hash == 0) {
+ // We don't need to recompute the hash on every retry because it should
+ // never change.
+ hash = concurrent_set_hash(set, key);
+ }
+ RUBY_ASSERT(hash == concurrent_set_hash(set, key));
+
+ idx = concurrent_set_probe_start(&probe, set, hash);
+
+ while (true) {
+ struct concurrent_set_entry *entry = &set->entries[idx];
+ VALUE curr_hash_and_flags = rbimpl_atomic_value_load(&entry->hash, RBIMPL_ATOMIC_ACQUIRE);
+ VALUE curr_hash = curr_hash_and_flags & CONCURRENT_SET_HASH_MASK;
+ bool continuation = curr_hash_and_flags & CONCURRENT_SET_CONTINUATION_BIT;
+
+ if (curr_hash_and_flags == CONCURRENT_SET_EMPTY) {
+ return 0;
+ }
+
+ if (curr_hash != hash) {
+ if (!continuation) {
+ return 0;
+ }
+ idx = concurrent_set_probe_next(&probe);
+ continue;
+ }
+
+ VALUE curr_key = rbimpl_atomic_value_load(&entry->key, RBIMPL_ATOMIC_ACQUIRE);
+
+ switch (curr_key) {
+ case CONCURRENT_SET_EMPTY:
+ // In-progress insert: hash written but key not yet
+ break;
+ case CONCURRENT_SET_DELETED:
+ break;
+ case CONCURRENT_SET_MOVED:
+ // Wait
+ RB_VM_LOCKING();
+
+ goto retry;
+ default: {
+ if (UNLIKELY(!RB_SPECIAL_CONST_P(curr_key) && rb_objspace_garbage_object_p(curr_key))) {
+ // This is a weakref set, so after marking but before sweeping is complete we may find a matching garbage object.
+ // Skip it and let the GC pass clean it up
+ break;
+ }
+
+ if (set->funcs->cmp(key, curr_key)) {
+ // We've found a match.
+ RB_GC_GUARD(set_obj);
+ return curr_key;
+ }
+
+ if (!continuation) {
+ return 0;
+ }
+
+ break;
+ }
+ }
+
+ idx = concurrent_set_probe_next(&probe);
+ }
+}
+
+VALUE
+rb_concurrent_set_find_or_insert(VALUE *set_obj_ptr, VALUE key, void *data)
+{
+ RUBY_ASSERT(key >= CONCURRENT_SET_SPECIAL_VALUE_COUNT);
+
+ // First attempt to find
+ {
+ VALUE result = rb_concurrent_set_find(set_obj_ptr, key);
+ if (result) return result;
+ }
+
+ // First time we need to call create, and store the hash
+ VALUE set_obj = rbimpl_atomic_value_load(set_obj_ptr, RBIMPL_ATOMIC_ACQUIRE);
+ RUBY_ASSERT(set_obj);
+
+ struct concurrent_set *set = RTYPEDDATA_GET_DATA(set_obj);
+ key = set->funcs->create(key, data);
+ VALUE hash = concurrent_set_hash(set, key);
+
+ struct concurrent_set_probe probe;
+ int idx;
+
+ goto start_search;
+
+retry:
+ // On retries we only need to load the hash object
+ set_obj = rbimpl_atomic_value_load(set_obj_ptr, RBIMPL_ATOMIC_ACQUIRE);
+ RUBY_ASSERT(set_obj);
+ set = RTYPEDDATA_GET_DATA(set_obj);
+
+ RUBY_ASSERT(hash == concurrent_set_hash(set, key));
+
+start_search:
+ idx = concurrent_set_probe_start(&probe, set, hash);
+
+ while (true) {
+ struct concurrent_set_entry *entry = &set->entries[idx];
+ VALUE curr_hash_and_flags = rbimpl_atomic_value_load(&entry->hash, RBIMPL_ATOMIC_ACQUIRE);
+ VALUE curr_hash = curr_hash_and_flags & CONCURRENT_SET_HASH_MASK;
+ bool continuation = curr_hash_and_flags & CONCURRENT_SET_CONTINUATION_BIT;
+
+ if (curr_hash_and_flags == CONCURRENT_SET_EMPTY) {
+ // Reserve this slot for our hash value
+ curr_hash_and_flags = rbimpl_atomic_value_cas(&entry->hash, CONCURRENT_SET_EMPTY, hash, RBIMPL_ATOMIC_RELEASE, RBIMPL_ATOMIC_RELAXED);
+ if (curr_hash_and_flags != CONCURRENT_SET_EMPTY) {
+ // Lost race, retry same slot to check winner's hash
+ continue;
+ }
+
+ // CAS succeeded, so these are the values stored
+ curr_hash_and_flags = hash;
+ curr_hash = hash;
+
+ // Fall through to try to claim key
+ }
+
+ if (curr_hash != hash) {
+ goto probe_next;
+ }
+
+ VALUE curr_key = rbimpl_atomic_value_load(&entry->key, RBIMPL_ATOMIC_ACQUIRE);
+
+ switch (curr_key) {
+ case CONCURRENT_SET_EMPTY: {
+ rb_atomic_t prev_size = rbimpl_atomic_fetch_add(&set->size, 1, RBIMPL_ATOMIC_RELAXED);
+
+ // Load_factor reached at 75% full. ex: prev_size: 32, capacity: 64, load_factor: 50%.
+ bool load_factor_reached = (uint64_t)(prev_size * 4) >= (uint64_t)(set->capacity * 3);
+
+ if (UNLIKELY(load_factor_reached)) {
+ concurrent_set_try_resize(set_obj, set_obj_ptr);
+ goto retry;
+ }
+
+ VALUE prev_key = rbimpl_atomic_value_cas(&entry->key, CONCURRENT_SET_EMPTY, key, RBIMPL_ATOMIC_RELEASE, RBIMPL_ATOMIC_RELAXED);
+ if (prev_key == CONCURRENT_SET_EMPTY) {
+ RUBY_ASSERT(rb_concurrent_set_find(set_obj_ptr, key) == key);
+ RB_GC_GUARD(set_obj);
+ return key;
+ }
+ else {
+ // Entry was not inserted.
+ rbimpl_atomic_sub(&set->size, 1, RBIMPL_ATOMIC_RELAXED);
+
+ // Another thread won the race, try again at the same location.
+ continue;
+ }
+ }
+ case CONCURRENT_SET_DELETED:
+ break;
+ case CONCURRENT_SET_MOVED:
+ // Wait
+ RB_VM_LOCKING();
+ goto retry;
+ default:
+ // We're never GC during our search
+ // If the continuation bit wasn't set at the start of our search,
+ // any concurrent find with the same hash value would also look at
+ // this location and try to swap curr_key
+ if (UNLIKELY(!RB_SPECIAL_CONST_P(curr_key) && rb_objspace_garbage_object_p(curr_key))) {
+ if (continuation) {
+ goto probe_next;
+ }
+ rbimpl_atomic_value_cas(&entry->key, curr_key, CONCURRENT_SET_EMPTY, RBIMPL_ATOMIC_RELEASE, RBIMPL_ATOMIC_RELAXED);
+ continue;
+ }
+
+ if (set->funcs->cmp(key, curr_key)) {
+ // We've found a live match.
+ RB_GC_GUARD(set_obj);
+
+ // We created key using set->funcs->create, but we didn't end
+ // up inserting it into the set. Free it here to prevent memory
+ // leaks.
+ if (set->funcs->free) set->funcs->free(key);
+
+ return curr_key;
+ }
+ break;
+ }
+
+ probe_next:
+ RUBY_ASSERT(curr_hash_and_flags != CONCURRENT_SET_EMPTY);
+ concurrent_set_mark_continuation(entry, curr_hash_and_flags);
+ idx = concurrent_set_probe_next(&probe);
+ }
+}
+
+static void
+concurrent_set_delete_entry_locked(struct concurrent_set *set, struct concurrent_set_entry *entry)
+{
+ ASSERT_vm_locking_with_barrier();
+
+ if (entry->hash & CONCURRENT_SET_CONTINUATION_BIT) {
+ entry->hash = CONCURRENT_SET_CONTINUATION_BIT;
+ entry->key = CONCURRENT_SET_DELETED;
+ set->deleted_entries++;
+ }
+ else {
+ entry->hash = CONCURRENT_SET_EMPTY;
+ entry->key = CONCURRENT_SET_EMPTY;
+ set->size--;
+ }
+}
+
+VALUE
+rb_concurrent_set_delete_by_identity(VALUE set_obj, VALUE key)
+{
+ ASSERT_vm_locking_with_barrier();
+
+ struct concurrent_set *set = RTYPEDDATA_GET_DATA(set_obj);
+
+ VALUE hash = concurrent_set_hash(set, key);
+
+ struct concurrent_set_probe probe;
+ int idx = concurrent_set_probe_start(&probe, set, hash);
+
+ while (true) {
+ struct concurrent_set_entry *entry = &set->entries[idx];
+ VALUE curr_key = entry->key;
+
+ switch (curr_key) {
+ case CONCURRENT_SET_EMPTY:
+ // We didn't find our entry to delete.
+ return 0;
+ case CONCURRENT_SET_DELETED:
+ break;
+ case CONCURRENT_SET_MOVED:
+ rb_bug("rb_concurrent_set_delete_by_identity: moved entry");
+ break;
+ default:
+ if (key == curr_key) {
+ RUBY_ASSERT((entry->hash & CONCURRENT_SET_HASH_MASK) == hash);
+ concurrent_set_delete_entry_locked(set, entry);
+ return curr_key;
+ }
+ break;
+ }
+
+ idx = concurrent_set_probe_next(&probe);
+ }
+}
+
+void
+rb_concurrent_set_foreach_with_replace(VALUE set_obj, int (*callback)(VALUE *key, void *data), void *data)
+{
+ ASSERT_vm_locking_with_barrier();
+
+ struct concurrent_set *set = RTYPEDDATA_GET_DATA(set_obj);
+
+ for (unsigned int i = 0; i < set->capacity; i++) {
+ struct concurrent_set_entry *entry = &set->entries[i];
+ VALUE key = entry->key;
+
+ switch (key) {
+ case CONCURRENT_SET_EMPTY:
+ case CONCURRENT_SET_DELETED:
+ continue;
+ case CONCURRENT_SET_MOVED:
+ rb_bug("rb_concurrent_set_foreach_with_replace: moved entry");
+ break;
+ default: {
+ int ret = callback(&entry->key, data);
+ switch (ret) {
+ case ST_STOP:
+ return;
+ case ST_DELETE:
+ concurrent_set_delete_entry_locked(set, entry);
+ break;
+ }
+ break;
+ }
+ }
+ }
+}
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000000..4e7367804d
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,4861 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT
+{
+AC_CONFIG_AUX_DIR(tool)
+
+AC_PREREQ(2.67)
+
+tooldir="$srcdir/tool"
+
+AC_DISABLE_OPTION_CHECKING
+
+m4_define([RUBY_M4_INCLUDED], [])dnl
+AC_DEFUN([RUBY_M4_INCLUDE], [m4_include([tool/m4/$1])dnl
+ m4_append([RUBY_M4_INCLUDED], [ \
+ $(tooldir)/m4/$1])dnl
+])
+RUBY_M4_INCLUDE([_colorize_result_prepare.m4])dnl
+RUBY_M4_INCLUDE([ac_msg_result.m4])dnl
+RUBY_M4_INCLUDE([colorize_result.m4])dnl
+RUBY_M4_INCLUDE([ruby_append_option.m4])dnl
+RUBY_M4_INCLUDE([ruby_append_options.m4])dnl
+RUBY_M4_INCLUDE([ruby_check_builtin_func.m4])dnl
+RUBY_M4_INCLUDE([ruby_check_builtin_overflow.m4])dnl
+RUBY_M4_INCLUDE([ruby_check_builtin_setjmp.m4])dnl
+RUBY_M4_INCLUDE([ruby_check_header.m4])dnl
+RUBY_M4_INCLUDE([ruby_check_printf_prefix.m4])dnl
+RUBY_M4_INCLUDE([ruby_check_setjmp.m4])dnl
+RUBY_M4_INCLUDE([ruby_check_signedness.m4])dnl
+RUBY_M4_INCLUDE([ruby_check_sizeof.m4])dnl
+RUBY_M4_INCLUDE([ruby_check_sysconf.m4])dnl
+RUBY_M4_INCLUDE([ruby_cppoutfile.m4])dnl
+RUBY_M4_INCLUDE([ruby_decl_attribute.m4])dnl
+RUBY_M4_INCLUDE([ruby_default_arch.m4])dnl
+RUBY_M4_INCLUDE([ruby_define_if.m4])dnl
+RUBY_M4_INCLUDE([ruby_defint.m4])dnl
+RUBY_M4_INCLUDE([ruby_dtrace_available.m4])dnl
+RUBY_M4_INCLUDE([ruby_dtrace_postprocess.m4])dnl
+RUBY_M4_INCLUDE([ruby_func_attribute.m4])dnl
+RUBY_M4_INCLUDE([ruby_mingw32.m4])dnl
+RUBY_M4_INCLUDE([ruby_prepend_option.m4])dnl
+RUBY_M4_INCLUDE([ruby_prog_gnu_ld.m4])dnl
+RUBY_M4_INCLUDE([ruby_prog_makedirs.m4])dnl
+RUBY_M4_INCLUDE([ruby_replace_funcs.m4])dnl
+RUBY_M4_INCLUDE([ruby_replace_type.m4])dnl
+RUBY_M4_INCLUDE([ruby_require_funcs.m4])dnl
+RUBY_M4_INCLUDE([ruby_rm_recursive.m4])dnl
+RUBY_M4_INCLUDE([ruby_setjmp_type.m4])dnl
+RUBY_M4_INCLUDE([ruby_modular_gc.m4])dnl
+RUBY_M4_INCLUDE([ruby_stack_grow_direction.m4])dnl
+RUBY_M4_INCLUDE([ruby_thread.m4])dnl
+RUBY_M4_INCLUDE([ruby_try_cflags.m4])dnl
+RUBY_M4_INCLUDE([ruby_try_cxxflags.m4])dnl
+RUBY_M4_INCLUDE([ruby_try_ldflags.m4])dnl
+RUBY_M4_INCLUDE([ruby_universal_arch.m4])dnl
+RUBY_M4_INCLUDE([ruby_wasm_tools.m4])dnl
+RUBY_M4_INCLUDE([ruby_werror_flag.m4])dnl
+
+AS_IF([test "x${GITHUB_ACTIONS}" = xtrue],
+[AC_REQUIRE([_COLORIZE_RESULT_PREPARE])dnl
+dnl 93(bright yellow) is copied from .github/workflows/mingw.yml
+ begin_group() { AS_ECHO(["::group::@<:@93m$[]1@<:@m"]);}
+ end_group() { AS_ECHO(["::endgroup::"]);}
+],
+[dnl
+ begin_group() { :;}
+ end_group() { :;}
+])
+
+AC_ARG_VAR([cflags], [additional CFLAGS (ignored when CFLAGS is given)])dnl
+AC_ARG_VAR([cppflags], [additional CPPFLAGS (ignored when CPPFLAGS is given)])dnl
+AC_ARG_VAR([cxxflags], [additional CXXFLAGS (ignored when CXXFLAGS is given)])dnl
+AC_ARG_VAR([rustc_flags], [additional RUSTC_FLAGS])dnl
+
+[begin]_group "environment section" && {
+HAVE_BASERUBY=yes
+BASERUBY_VERSION=
+AC_ARG_WITH(baseruby,
+ AS_HELP_STRING([--with-baseruby=RUBY], [use RUBY as baseruby; RUBY is the pathname of ruby]),
+ [AS_CASE(["$withval"],
+ [*ruby*],[BASERUBY=$withval],
+ [no],[HAVE_BASERUBY=no],
+ [AC_MSG_ERROR(need ruby)])
+ ],
+ [
+ AC_PATH_PROG([BASERUBY], [ruby], [false])
+ HAVE_BASERUBY=
+ ])
+AS_IF([test "$HAVE_BASERUBY" = no], [
+ # --without-baseruby
+], [error=`RUBYOPT=- $BASERUBY --disable=gems "${tooldir}/missing-baseruby.bat" --verbose 2>&1`], [
+ HAVE_BASERUBY=yes
+], [test "$HAVE_BASERUBY" = ""], [ # no --with-baseruby option
+ AC_MSG_WARN($error) # just warn and continue
+ HAVE_BASERUBY=no
+], [ # the ruby given by --with-baseruby is too old
+ AC_MSG_ERROR($error) # bail out
+])
+AS_IF([test "${HAVE_BASERUBY:=no}" != no], [
+ AS_CASE(["$build_os"], [mingw*], [
+ # Can MSys shell run a command with a drive letter?
+ RUBYOPT=- `cygpath -ma "$BASERUBY"` --disable=gems -e exit 2>/dev/null || HAVE_BASERUBY=no
+ ])
+ RUBY_APPEND_OPTION(BASERUBY, "--disable=gems")
+ BASERUBY_VERSION=`$BASERUBY -v`
+ $BASERUBY -C "$srcdir" tool/downloader.rb -d tool -e gnu config.guess config.sub >&AS_MESSAGE_FD
+])
+AS_IF([test "$HAVE_BASERUBY" = no], [
+ AS_IF([test "$cross_compiling" = yes], [AC_MSG_ERROR([executable host ruby is required for cross-compiling])])
+ BASERUBY=${tooldir}/missing-baseruby.bat
+])
+AC_SUBST(BASERUBY)
+AC_SUBST(HAVE_BASERUBY)
+
+: ${GIT=git}
+HAVE_GIT=yes
+AC_ARG_WITH(git,
+ AS_HELP_STRING([--without-git], [never use git]),
+ [AS_CASE([$withval],
+ [no], [HAVE_GIT=no],
+ [yes], [],
+ [GIT=$withval])])
+{
+ test x"$HAVE_GIT" = xyes &&
+ command -v "$GIT" > /dev/null &&
+ # `git -C`: 1.8.5
+ # `git log --no-show-signature`: 2.10.0
+ AS_CASE([`$GIT -C . --version 2> /dev/null | sed 's/.* //'`],
+ [0.*|1.*|2.@<:@0-9@:>@.*], [false],
+ [true])
+} || HAVE_GIT=no GIT=never-use
+AC_SUBST(GIT)
+AC_SUBST(HAVE_GIT)
+
+eval `sed -n -e ['s/^@%:@define RUBY_[A-Z_]*VERSION_\([A-Z][A-Z][A-Z_0-9]*\) \([0-9][0-9]*\)$/\1=\2/p'] \
+ -e ['s/^@%:@define \(RUBY_ABI_VERSION\) \([0-9][0-9]*\).*/\1=\2/p'] \
+ -e ['s/^@%:@define \(RUBY_PATCHLEVEL\) \(.*\)/\1=\2/p'] \
+ $srcdir/include/ruby/internal/abi.h \
+ $srcdir/include/ruby/version.h $srcdir/version.h`
+for v in MAJOR MINOR TEENY; do
+ AS_IF([eval "test \"\$$v\" = ''"], [
+ AC_MSG_ERROR(could not determine $v number from version.h)
+ ])
+done
+AC_SUBST(MAJOR)
+AC_SUBST(MINOR)
+AC_SUBST(TEENY)
+AC_SUBST(RUBY_API_VERSION, '$(MAJOR).$(MINOR)')
+AC_SUBST(RUBY_PROGRAM_VERSION, '$(MAJOR).$(MINOR).$(TEENY)')
+AS_CASE([$RUBY_PATCHLEVEL], [-*], [
+ AC_DEFINE_UNQUOTED(RUBY_ABI_VERSION, [${RUBY_ABI_VERSION}])
+], [RUBY_ABI_VERSION=])
+
+AS_IF([test "$program_prefix" = NONE], [
+ program_prefix=
+])
+AS_IF([test "$prefix" -ef .], [
+ AC_MSG_ERROR(--prefix cannot be the current working directory.)
+])
+RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"`
+RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"`
+AC_SUBST(RUBY_BASE_NAME)
+AC_SUBST(RUBYW_BASE_NAME)
+AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version}')
+
+dnl checks for alternative programs
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+AC_SUBST(config_target, $target)
+AS_CASE(["$target_cpu-$target_os"],
+ [aarch64-darwin*], [
+ target_cpu=arm64
+ AS_CASE(["$target_vendor"], [unknown], [
+ target_vendor=apple
+ target=${target%%-unknown-*}-apple-${target@%:@*-unknown-}
+ ])
+ target="arm64-${target@%:@aarch64-}"
+ AS_IF([test -n "$target_alias"], [target_alias="arm64-${target_alias@%:@aarch64-}"])
+ ])
+
+AC_ARG_PROGRAM
+RUBY_RM_RECURSIVE
+AC_ARG_WITH(gcc,
+ AS_HELP_STRING([--without-gcc], [never use gcc]),
+ [
+ AS_CASE([$withval],
+ [no], [: ${CC=cc}],
+ [yes], [: ${CC=gcc}],
+ [CC=$withval])])
+dnl If the user switches compilers, we can't believe the cache
+AS_IF([test ! -z "$ac_cv_prog_CC" -a ! -z "$CC" -a "$CC" != "$ac_cv_prog_CC"], [
+ AC_MSG_ERROR(cached CC is different -- throw away $cache_file
+(it is also a good idea to do 'make clean' before compiling))
+])
+
+RUBY_WASM_TOOLS
+
+AS_CASE(["${build_os}"],
+[linux*|cygwin*|msys*], [
+ # Naruse prefers GCC on Linux
+ AC_CHECK_TOOLS([CC], [gcc clang cc])
+],
+[solaris*], [
+ # Clang on Solaris is largely untested.
+ # https://bugs.ruby-lang.org/issues/17949
+ AC_CHECK_TOOLS([CC], [cc gcc])
+], [
+ # OpenBSD wants to prefer cc over gcc.
+ # See https://github.com/ruby/ruby/pull/2443
+ AC_CHECK_TOOLS([CC], [cl.exe clang cc gcc c99 /usr/ucb/cc])
+])
+
+AC_ARG_VAR([AR], [Archiver command])
+AC_ARG_VAR([AS], [Assembler command])
+AC_ARG_VAR([CC], [C compiler command])
+AC_ARG_VAR([CXX], [C++ compiler command])
+AC_ARG_VAR([LD], [Linker command])
+AC_ARG_VAR([NM], [Symbol list command])
+AC_ARG_VAR([OBJCOPY], [Objcopy command])
+AC_ARG_VAR([OBJDUMP], [Objdump command])
+AC_ARG_VAR([RANLIB], [Ranlib command])
+AC_ARG_VAR([STRIP], [Strip command])
+
+# We don't want to bother things like `ccache gcc`, `clang -shared-libgcc`, ...
+set rb_dummy ${CC}
+rb_CC=$2
+AC_DEFUN([RUBY_CHECK_PROG_FOR_CC], [
+ rb_prog=`echo "${rb_CC}" | sed ["s:$2\([^/]*\)$:$3\1:"]`
+ AC_CHECK_PROG([$1], [$rb_prog], [$rb_prog])
+])
+AS_CASE(["/${rb_CC} "],
+[*@<:@\ /@:>@"cc "*], [
+ # Don't try g++/clang++ when CC=cc
+ AC_CHECK_PROGS([CXX], [cl.exe CC c++])
+],
+[*icc*], [
+ # Intel C++ has interprocedural optimizations. It tends to come with its
+ # own linker etc.
+ RUBY_CHECK_PROG_FOR_CC([AR], [icc], [xiar])
+ RUBY_CHECK_PROG_FOR_CC([CXX], [icc], [icpc])
+ RUBY_CHECK_PROG_FOR_CC([LD], [icc], [xild])
+],
+[*gcc*], [
+ # Ditto for GCC.
+ RUBY_CHECK_PROG_FOR_CC([LD], [gcc], [ld])
+ RUBY_CHECK_PROG_FOR_CC([AR], [gcc], [gcc-ar])
+ RUBY_CHECK_PROG_FOR_CC([CXX], [gcc], [g++])
+ RUBY_CHECK_PROG_FOR_CC([NM], [gcc], [gcc-nm])
+ RUBY_CHECK_PROG_FOR_CC([RANLIB], [gcc], [gcc-ranlib])
+],
+[*clang*], [
+ # Ditto for LLVM. Note however that llvm-as is a LLVM-IR to LLVM bitcode
+ # assembler that does not target your machine native binary.
+
+ # Xcode has its own version tools that may be incompatible with
+ # genuine LLVM tools, use the tools in the same directory.
+
+ AS_IF([$rb_CC -E -dM -xc - < /dev/null | grep -F __apple_build_version__ > /dev/null],
+ [llvm_prefix=], [llvm_prefix=llvm-])
+ # AC_PREPROC_IFELSE cannot be used before AC_USE_SYSTEM_EXTENSIONS
+
+ RUBY_CHECK_PROG_FOR_CC([LD], [clang], [ld]) # ... maybe try lld ?
+ RUBY_CHECK_PROG_FOR_CC([AR], [clang], [${llvm_prefix}ar])
+# RUBY_CHECK_PROG_FOR_CC([AS], [clang], [${llvm_prefix}as])
+ RUBY_CHECK_PROG_FOR_CC([CXX], [clang], [clang++])
+ RUBY_CHECK_PROG_FOR_CC([NM], [clang], [${llvm_prefix}nm])
+ RUBY_CHECK_PROG_FOR_CC([OBJCOPY], [clang], [${llvm_prefix}objcopy])
+ RUBY_CHECK_PROG_FOR_CC([OBJDUMP], [clang], [${llvm_prefix}objdump])
+ RUBY_CHECK_PROG_FOR_CC([RANLIB], [clang], [${llvm_prefix}ranlib])
+ RUBY_CHECK_PROG_FOR_CC([STRIP], [clang], [${llvm_prefix}strip])
+])
+AS_UNSET(rb_CC)
+AS_UNSET(rb_dummy)
+
+AS_CASE(["${build_os}"],
+[solaris*], [
+ AC_PATH_TOOL([LD], [ld], [/usr/ccs/bin/ld], [/usr/ccs/bin:$PATH])
+],
+[aix*], [
+ AC_PATH_TOOL([NM], [nm], [/usr/ccs/bin/nm], [/usr/ccs/bin:$PATH])
+])
+AS_CASE(["${target_os}"],
+[cygwin*|msys*|mingw*|darwin*], [
+ ac_ct_OBJCOPY=":"
+ ac_cv_prog_OBJCOPY=":"
+ ac_cv_prog_ac_ct_OBJCOPY=":"
+])
+
+rb_test_CFLAGS=${CFLAGS+yes}
+rb_test_CXXFLAGS=${CXXFLAGS+yes}
+
+# BSD's ports and MacPorts prefix GNU binutils with 'g'
+
+dnl Seems necessarily in order to add -std=gnu99 option for gcc 4.9.
+m4_version_prereq([2.70], [AC_PROG_CC], [AC_PROG_CC_C99])
+
+AC_PROG_CXX
+AC_PROG_CPP
+AC_PROG_RANLIB
+AC_CHECK_TOOLS([AR], [gar ar])
+AC_CHECK_TOOLS([AS], [gas as])
+AC_CHECK_TOOLS([LD], [gld ld]) # ... try gold ?
+AC_CHECK_TOOLS([NM], [gnm nm])
+AC_CHECK_TOOLS([OBJCOPY], [gobjcopy objcopy], [:])
+AC_CHECK_TOOLS([OBJDUMP], [gobjdump objdump])
+AC_CHECK_TOOLS([STRIP], [gstrip strip], [:])
+
+FIRSTMAKEFILE=""
+
+# nm errors with Rust's LLVM bitcode when Rust uses a newer LLVM version than nm.
+# In case we're working with llvm-nm, tell it to not worry about the bitcode.
+AS_IF([${NM} --help 2>&1 | grep -q 'llvm-bc'], [NM="$NM --no-llvm-bc"])
+
+AS_IF([test ! $rb_test_CFLAGS], [AS_UNSET(CFLAGS)]); AS_UNSET(rb_test_CFLAGS)
+AS_IF([test ! $rb_test_CXXFLAGS], [AS_UNSET(CXXFLAGS)]); AS_UNSET(rb_save_CXXFLAGS)
+
+AS_IF([test "${CXX}" = "g++" -a -z "${GXX}"], [
+ # AC_PROG_CXX sets $CXX to "g++" when it purposefully finds that there is
+ # _no_ g++. This brain-damaged design must be worked around. Thankfully,
+ # similar thing doesn't happen for AC_PROG_CC.
+ rb_there_is_in_fact_no_gplusplus_but_autoconf_is_cheating_us=true
+])
+
+test x"$target_alias" = x &&
+target_os=`echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'`
+ac_install_sh='' # unusable for extension libraries.
+
+AC_ARG_WITH(os-version-style,
+ AS_HELP_STRING([--with-os-version-style=TYPE],
+ [OS version number for target and target_os [[full]]]
+ [(full|teeny|minor+0|minor|major+0|major|none)]),
+ [os_version_style=$withval],
+ [os_version_style=full
+ AS_CASE($target_os, [[*[0-9].*]],
+ [AS_CASE([`/usr/bin/ruby -e 'puts RUBY_PLATFORM' 2>/dev/null`],
+ [[*-*[0-9].*.0]], [os_version_style=minor+0],
+ [[*-*[0-9].*.*]], [os_version_style=full],
+ [[*-*[0-9].0] ], [os_version_style=major+0],
+ [[*-*[0-9].*] ], [os_version_style=minor],
+ [[*-*[0-9]] ], [os_version_style=major],
+ )])
+ ])
+os_version_style_transform=
+AS_CASE("${os_version_style}",
+ [full|teeny], [],
+ [minor+0], [os_version_style_transform=['s/\([0-9]\.[0-9][0-9]*\)\.[0-9][.0-9]*$/\1.0/']],
+ [minor], [os_version_style_transform=['s/\([0-9]\.[0-9][0-9]*\)\.[0-9][.0-9]*$/\1/']],
+ [major+0], [os_version_style_transform=['s/\([0-9]\)\.[0-9][.0-9]*$/\1.0/']],
+ [major], [os_version_style_transform=['s/\([0-9]\)\.[0-9][.0-9]*$/\1/']],
+ [none], [os_version_style_transform=['s/[0-9]*\.[0-9][.0-9]*$//']],
+ [AC_MSG_ERROR(unknown --with-os-version-style: $withval)])
+AS_IF([test -z "$target_alias" -a -n "$os_version_style_transform"],
+ [
+ target=`echo ${target} | sed "$os_version_style_transform"`
+ target_os=`echo ${target_os} | sed "$os_version_style_transform"`
+ ])
+
+AC_ARG_WITH(arch,
+ AS_HELP_STRING([--with-arch=ARCHS],
+ [build an Apple/NeXT Multi Architecture Binary (MAB);
+ ARCHS is a comma-delimited list of architectures for
+ which to build; if this option is disabled or omitted
+ entirely, then the package will be built only for the
+ target platform]),
+ [target_archs="$withval"], [unset target_archs])
+
+AC_ARG_ENABLE(load-relative,
+ AS_HELP_STRING([--enable-load-relative], [resolve load paths at run time]),
+ [load_relative=$enableval])
+
+# checks for UNIX variants that set C preprocessor variables
+AC_USE_SYSTEM_EXTENSIONS
+
+dnl Checks for programs.
+
+cflagspat=
+test -z "$optflags" ||
+ cflagspat="$cflagspat;s|"`eval echo '"'"${optflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g'
+test -z "$debugflags" ||
+ cflagspat="$cflagspat;s|"`eval echo '"'"${debugflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g'
+test -z "$warnflags" ||
+ cflagspat="$cflagspat;s|"`eval echo '"'"${warnflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g'
+AS_IF([test -z "${CFLAGS+set}"], [
+ cflags=`echo " $cflags " | sed "$cflagspat;s/^ *//;s/ *$//"`
+ orig_cflags="$cflags"
+ cflags='${hardenflags} '"$cflags "'${optflags} ${debugflags} ${warnflags}'
+])
+dnl AS_IF([test -z "${CXXFLAGS+set}"], [
+dnl cxxflags=`echo " $cxxflags " | sed "$cflagspat;s/^ *//;s/ *$//"`
+dnl orig_cxxflags="$cxxflags"
+dnl cxxflags="$cxxflags "'${optflags} ${debugflags} ${warnflags}'
+dnl ])
+
+AS_CASE(["$host_os:$build_os"],
+[darwin*:darwin*], [
+ # Following Apple deployed clang are broken
+ # clang version 1.0 (http://llvm.org/svn/llvm-project/cfe/tags/Apple/clang-23 exported)
+ # Apple clang version 2.0 (tags/Apple/clang-137) (based on LLVM 2.9svn)
+ # Apple clang version 2.1 (tags/Apple/clang-163.7.1) (based on LLVM 3.0svn)
+ AC_PREPROC_IFELSE(
+ [AC_LANG_PROGRAM([
+ @%:@if defined __APPLE_CC__ && defined __clang_major__ && __clang_major__ < 3
+ @%:@error premature clang
+ @%:@endif
+ ])],
+ [],
+ [AC_MSG_ERROR([clang version 3.0 or later is required])])
+])
+
+AS_CASE(["$target_os"],
+[darwin*], [
+ AC_MSG_CHECKING(if minimum required OS X version is supported)
+ AC_PREPROC_IFELSE([AC_LANG_SOURCE([[@%:@include <AvailabilityMacros.h>
+ @%:@if MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_5
+ @%:@error pre OS X 10.5
+ [!<===== pre OS X 10.5 =====>]
+ @%:@endif
+ ]])],
+ [AC_MSG_RESULT(yes)],
+ [AC_MSG_RESULT(no)
+ AC_MSG_ERROR([Unsupported OS X version is required])])
+])
+
+RUBY_MINGW32
+AC_SUBST(GCC)
+AC_SUBST(LD)
+AS_IF([test "$GCC" = yes], [
+ linker_flag=-Wl,
+ : ${optflags=-O3}
+ gcc_major=`echo =__GNUC__ | $CC -E -xc - | sed '/^=/!d;s///'`
+ gcc_minor=`echo =__GNUC_MINOR__ | $CC -E -xc - | sed '/^=/!d;s///'`
+ test -n "$gcc_major" || gcc_major=0
+ test -n "$gcc_minor" || gcc_minor=0
+ icc_version=`echo =__ICC | $CC -E -xc - | sed '/^=/!d;s///;/^__ICC/d'`
+ test -n "$icc_version" || icc_version=0
+ # RUBY_APPEND_OPTIONS(XCFLAGS, ["-include ruby/config.h" "-include ruby/missing.h"])
+
+ AS_IF([test "$gcc_major" -lt 4], [
+ AC_MSG_ERROR([too old GCC: $gcc_major.$gcc_minor])
+ ])
+], [
+ linker_flag=
+])
+
+RUBY_PROG_GNU_LD
+RUBY_CPPOUTFILE
+
+: ${OUTFLAG='-o '}
+: ${COUTFLAG=${OUTFLAG}}
+: ${CSRCFLAG=''}
+AC_SUBST(OUTFLAG)
+AC_SUBST(COUTFLAG)
+AC_SUBST(CSRCFLAG)
+
+AS_CASE(["$build_os"],
+ [darwin*], [
+ # gcc 13 warns duplicate -l options, which are added by the
+ # default spec.
+ # Xcode linker warns for deprecated architecture and wrongly
+ # installed TBD files.
+ AC_MSG_CHECKING(for $CC linker warning)
+ suppress_ld_waring=no
+ echo 'int main(void) {return 0;}' > conftest.c
+ AS_IF([$CC -framework Foundation -o conftest conftest.c 2>&1 |
+ grep \
+ -e '^ld: warning: ignoring duplicate libraries:' \
+ -e '^ld: warning: text-based stub file' \
+ -e '^ld: warning: -multiply_defined is obsolete' \
+ >/dev/null], [
+ suppress_ld_waring=yes
+ ])
+ rm -fr conftest*
+ test $suppress_ld_waring = yes && warnflags="${warnflags:+${warnflags} }-Wl,-w"
+ AC_MSG_RESULT($suppress_ld_waring)
+ ])
+AS_CASE(["$target_os"],
+ [wasi*], [
+ # Clang linker automatically uses wasm-opt with -O if it found.
+ # https://github.com/llvm/llvm-project/blob/812828984c10857a4cd260eb638c52a4411f9143/clang/lib/Driver/ToolChains/WebAssembly.cpp#L95-L118
+ # However optimization before asyncify causes misoptimization,
+ # so wrap clang to insert our fake wasm-opt, which does nothing, in PATH.
+ CC_WRAPPER=`cd -P "${tooldir}" && pwd`/wasm-clangw
+ CC="$CC_WRAPPER $CC"
+
+ FIRSTMAKEFILE=GNUmakefile:wasm/GNUmakefile.in
+ ])
+
+cc_version=
+for option in --version -v -V -qversion; do
+ cc_version_message=`$CC $option 2>&1`
+ cc_version_status=$?
+ AS_CASE($cc_version_status, [0], [:], [continue])
+ AS_CASE($cc_version_message, [*Warning*], [continue])
+ cc_version='$(CC) '$option
+ break
+done
+AC_SUBST(CC_VERSION, $cc_version)
+AC_SUBST(CC_VERSION_MESSAGE, $cc_version_message)
+
+: ${DLDFLAGS="$LDFLAGS"}
+
+RUBY_UNIVERSAL_ARCH
+AS_IF([test "$target_cpu" != "$host_cpu" -a "$GCC" = yes -a "${universal_binary:-no}" = no], [
+ RUBY_DEFAULT_ARCH($target_cpu)
+])
+host_os=$target_os
+host_vendor=$target_vendor
+host_cpu=$target_cpu
+host=$target
+host_alias=$target_alias
+
+AC_CACHE_CHECK([for $AR flags], [rb_cv_arflags], [
+ AS_IF([$AR rcD conftest.a > /dev/null 2>&1 && rm conftest.a],
+ [rb_cv_arflags=rcD], [rb_cv_arflags=rcu])
+])
+AC_SUBST(ARFLAGS, ["$rb_cv_arflags "])
+
+AS_CASE(["$target_os"],
+[cygwin*|msys*|mingw*], [
+ AC_CHECK_TOOL(WINDRES, windres)
+ AC_CHECK_TOOL(DLLWRAP, dllwrap)
+ target=`echo $target | sed "s/^$target_cpu-/-/"`
+ target_alias=`echo $target_alias | sed "s/^$target_cpu-/-/"`
+ target_cpu=`echo $target_cpu | sed s/i.86/i386/`
+ AS_CASE(["$target"], [-*], [ target="$target_cpu${target}"])
+ AS_CASE(["$target_alias"], [-*], [ target_alias="$target_cpu${target_alias}"])
+ # cygwin/GNUmakefile.in is not exclusively for cygwin.
+ FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in
+ AS_CASE(["$target_os"],
+ [mingw*], [
+ test "$rb_cv_msvcrt" = "" && unset rb_cv_msvcrt
+ AC_CACHE_CHECK(for mingw32 runtime DLL, rb_cv_msvcrt, [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <stdio.h>]],
+ [[FILE* volatile f = stdin; return 0;]])],
+ [rb_cv_msvcrt=`$OBJDUMP -p conftest$ac_exeext |
+ tr A-Z a-z |
+ sed -n '/^[[ ]]*dll name: \(msvc.*\)\.dll$/{s//\1/p;q;};
+ /^[[ ]]*dll name: \(ucrtbase\|api-ms-win-crt-.*\)\.dll$/{s//ucrt/p;q;}'`],
+ [rb_cv_msvcrt=msvcrt])
+ test "$rb_cv_msvcrt" = "" && rb_cv_msvcrt=msvcrt])
+ RT_VER=`echo "$rb_cv_msvcrt" | tr -cd [0-9]`
+ test "$RT_VER" = "" && RT_VER=60
+ test "$rb_cv_msvcrt" = "ucrt" && RT_VER=140
+ AC_DEFINE_UNQUOTED(RUBY_MSVCRT_VERSION, $RT_VER)
+ sysconfdir=
+ ])
+ rb_cv_binary_elf=no
+ : ${enable_shared=yes}
+ ],
+[hiuxmpp*], [AC_DEFINE(__HIUX_MPP__)]) # by TOYODA Eizi <toyoda@npd.kishou.go.jp>
+
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_INSTALL
+
+AS_CASE(["$target_os"],[openbsd*],[
+ ac_cv_path_mkdir="mkdir"
+])
+
+RUBY_PROG_MAKEDIRS
+
+AC_CHECK_PROG([DTRACE], [${ac_tool_prefix}dtrace], [${ac_tool_prefix}dtrace])
+AS_IF([test "$cross_compiling:$ac_cv_prog_DTRACE" = no: -a -n "$ac_tool_prefix"], [
+ AC_CHECK_PROG([DTRACE], [dtrace], [dtrace])
+])
+
+AC_CHECK_PROGS(DOT, dot)
+AC_CHECK_PROGS(DOXYGEN, doxygen)
+
+tool_warned=$ac_tool_warned ac_tool_warned=no
+AC_CHECK_TOOL(PKG_CONFIG, pkg-config)
+ac_tool_warned=$tool_warned
+AS_IF([test -z "$PKG_CONFIG"], [],
+["$PKG_CONFIG" --print-errors --version > /dev/null 2>&1], [],
+[
+ unset ac_cv_prog_PKG_CONFIG
+ PKG_CONFIG=
+ AC_MSG_WARN([$PKG_CONFIG does not work; ignore])
+])
+
+AC_MSG_CHECKING([whether it is Android])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@ifndef __ANDROID__
+ @%:@error Not android
+ @%:@endif
+]], [[]])],
+[
+ AC_MSG_RESULT(yes)
+ target_os=${target_os}-android
+ AS_IF([test "x$cross_compiling" = xno], [
+ AC_MSG_CHECKING([for Android API version])
+ # hacky workaround: https://github.com/termux/termux-packages/issues/6176
+ rb_android_api=`getprop ro.build.version.sdk`
+ AC_MSG_RESULT($rb_android_api)
+ RUBY_APPEND_OPTIONS(CPPFLAGS, -D__ANDROID_API__=$rb_android_api -Wno-macro-redefined)
+ ])
+],
+[AC_MSG_RESULT(no)])
+
+AC_SUBST(RM, ['rm -f'])
+AC_SUBST(CP, ['cp'])
+RMDIRS='$(top_srcdir)/tool/rmdirs'
+RMDIR=rmdir
+mkdir "rmdirs_$$_test" "rmdirs_$$_test/a"
+rmdir --ignore-fail-on-non-empty "rmdirs_$$_test" 2>/dev/null &&
+RMDIR='rmdir --ignore-fail-on-non-empty'
+$RMDIR -p "rmdirs_$$_test/a" 2>/dev/null &&
+{ test -d "rmdirs_$$_test" || RMDIRS="$RMDIR -p"; }
+rmdir "rmdirs_$$_test/a" "rmdirs_$$_test" 2>/dev/null
+AC_SUBST(RMDIR)
+AC_SUBST(RMDIRS)
+AC_SUBST(RMALL, ['rm -fr'])
+
+AC_MSG_CHECKING([for cd using physical directory])
+rm -fr conf$$.dir
+mkdir conf$$.dir &&
+(cd conf$$.dir && mkdir src build && cd src &&
+$as_ln_s ../build . > /dev/null 2>&1 && cd build &&
+for chdir in 'cd -P' 'PWD= cd'; do
+ /bin/sh -c "$chdir ../src && echo '$chdir' > cdcmd" 2> /dev/null && break
+done)
+AS_IF([test -f conf$$.dir/src/cdcmd], [
+ read CHDIR < conf$$.dir/src/cdcmd 2> /dev/null
+], [
+ CHDIR=cd
+])
+rm -fr conf$$.dir
+AC_MSG_RESULT([$CHDIR])
+AC_SUBST(CHDIR)
+
+AS_CASE(["$FIRSTMAKEFILE"], [*GNUmakefile:*], [gnumake=yes], [
+ AC_MSG_CHECKING([if ${MAKE-make} is GNU make])
+ mkdir conftest.dir
+ echo "all:; @echo yes" > conftest.dir/GNUmakefile
+ echo "all:; @echo no" > conftest.dir/Makefile
+ gnumake=`(cd conftest.dir; ${MAKE-make})`
+ rm -fr conftest.dir
+ AS_CASE(["$gnumake"],
+ [*yes*], [
+ FIRSTMAKEFILE=GNUmakefile:template/GNUmakefile.in
+ gnumake=yes],
+ [
+ gnumake=no])
+ AC_MSG_RESULT($gnumake)
+])
+}
+
+[begin]_group "compiler section" && {
+RUBY_WERROR_FLAG([
+ AC_MSG_CHECKING([whether CFLAGS is valid])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
+ [AC_MSG_RESULT(yes)],
+ [
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([something wrong with CFLAGS="$CFLAGS"])
+ ]
+ )
+
+ AC_MSG_CHECKING([whether LDFLAGS is valid])
+ {
+ mkdir tmp.$$.try_link &&
+ cd tmp.$$.try_link &&
+ cp ../confdefs.h . &&
+ echo '<?xml?><plist><dict><key>CFBundleIdentifier</key><string></string></dict></plist>' > Info.plist &&
+ :
+ } || AC_MSG_ERROR([failed to make temporary directory])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
+ [AC_MSG_RESULT(yes)],
+ [
+ cd .. && rm -fr tmp.$$.try_link
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([something wrong with LDFLAGS="$LDFLAGS"])
+ ]
+ )
+ cd .. && rm -fr tmp.$$.try_link
+])
+
+: "rpath" && {
+ AC_CACHE_CHECK(whether ELF binaries are produced, rb_cv_binary_elf,
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[
+ AS_CASE(["`head -1 conftest$EXEEXT | tr -dc '\177ELF' | tr '\177' .`"],
+ [.ELF*], [rb_cv_binary_elf=yes], [rb_cv_binary_elf=no])],
+ [rb_cv_binary_elf=no])])
+
+ rpathflag=''
+ AS_IF([test x"${RPATHFLAG=}" = x], [
+ AS_CASE(["$target_os"],
+ [aix*], [rpathflag='-blibpath:'],
+ [for rpathflag in "-rpath " -R; do
+ AS_CASE("$rpathflag",
+ [*" "], [AS_CASE(["${linker_flag}"],
+ [*,], [rpathflag=`echo "$rpathflag" | tr ' ' ,`])])
+ rpathflag="${linker_flag}${rpathflag}"
+ RUBY_TRY_LDFLAGS([${rpathflag}.], [], [rpathflag=])
+ AS_IF([test "x${rpathflag}" != x], [break])
+ done])
+ ], [
+ rpathflag=`echo "$RPATHFLAG" | sed 's/%.*//'`
+ ])
+
+ AC_ARG_ENABLE(rpath,
+ AS_HELP_STRING([--enable-rpath], [embed run path into extension libraries.
+ enabled by default on ELF platforms]),
+ [enable_rpath=$enableval], [enable_rpath="$rb_cv_binary_elf"])
+
+ AS_IF([test "$enable_rpath:${RPATHFLAG}" = yes:], [
+ RPATHFLAG="${rpathflag:+${rpathflag}%1\$-s}"
+ ])
+ AS_CASE([${RPATHFLAG}],[*'%1$'*],[: ${LIBPATHFLAG='-L%1$-s'}],[: ${LIBPATHFLAG='-L%s'}])
+}
+
+RUBY_TRY_LDFLAGS(-fdeclspec, [fdeclspec=yes], [fdeclspec=no])
+AS_IF([test "$fdeclspec" = yes], [
+ RUBY_APPEND_OPTIONS(CFLAGS, -fdeclspec)
+ RUBY_APPEND_OPTIONS(cflags, -fdeclspec)
+ RUBY_APPEND_OPTIONS(orig_cflags, -fdeclspec)
+])
+RUBY_TRY_CXXFLAGS(-fdeclspec, [fdeclspec=yes], [fdeclspec=no])
+AS_IF([test "$fdeclspec" = yes], [
+ RUBY_APPEND_OPTIONS(CXXFLAGS, -fdeclspec)
+])
+
+AC_ARG_ENABLE(devel,
+ AS_HELP_STRING([--enable-devel], [enable development build]),
+ [RUBY_DEVEL=$enableval],
+ [AS_IF([test "x${RUBY_DEVEL-no}" != xyes], [RUBY_DEVEL=])]
+)dnl
+AC_SUBST(RUBY_DEVEL)
+particular_werror_flags=${RUBY_DEVEL:-no}
+AC_ARG_ENABLE(werror,
+ AS_HELP_STRING([--disable-werror],
+ [don't make warnings into errors
+ even if a compiler support -Werror feature
+ [[disabled by default unless development version]]]),
+ [particular_werror_flags=$enableval])
+
+rb_cv_warnflags="$warnflags"
+AS_CASE(["$GCC:${warnflags+set}:${extra_warnflags:+set}:"],
+[yes::*|yes:*:set:], [# GCC && (!warnflags || extra_warnflags)
+ AS_IF([test $gcc_major -le 6], [
+ extra_warnflags="$extra_warnflags -Wno-maybe-uninitialized"
+ ])
+ AS_CASE([ $CFLAGS ], [*" -save-temps="*|*" -save-temps "*], [], [
+ extra_warnflags="$extra_warnflags -Werror=misleading-indentation"
+ ])
+
+ # ICC doesn't support -Werror=
+ AS_IF([test $icc_version -gt 0], [
+ particular_werror_flags=no
+ ])
+ for wflag in \
+ -Werror=extra-tokens \
+ -Werror=deprecated-declarations \
+ -Werror=division-by-zero -Werror=div-by-zero \
+ -Werror=duplicated-cond \
+ -Werror=implicit-function-declaration \
+ -Werror=implicit-int \
+ -Werror=pointer-arith \
+ -Werror=shorten-64-to-32 \
+ -Werror=write-strings \
+ -Werror=old-style-definition \
+ -Wimplicit-fallthrough=0 \
+ -Wmissing-noreturn \
+ -Wno-cast-function-type \
+ -Wno-constant-logical-operand \
+ -Wno-long-long \
+ -Wno-missing-field-initializers \
+ -Wno-overlength-strings \
+ -Wno-packed-bitfield-compat \
+ -Wno-parentheses-equality \
+ -Wno-self-assign \
+ -Wno-tautological-compare \
+ -Wno-unused-parameter \
+ -Wno-unused-value \
+ -Wsuggest-attribute=format \
+ -Wsuggest-attribute=noreturn \
+ -Wunused-variable \
+ -diag-disable=175,188,1684,2259,2312 \
+ $extra_warnflags \
+ ; do
+ AS_IF([test "$particular_werror_flags" != yes], [
+ wflag=`echo x$wflag | sed 's/^x-Werror=/-W/;s/^x//'`
+ ])
+ ok=no
+ RUBY_TRY_CFLAGS($wflag, [
+ RUBY_APPEND_OPTIONS(warnflags, $wflag)
+ ok=yes
+ ])
+ AS_CASE([$ok:$wflag], [no:-Werror=*], [
+ wflag=`echo x$wflag | sed 's/^x-Werror=/-W/'`
+ RUBY_TRY_CFLAGS($wflag, [
+ RUBY_APPEND_OPTIONS(warnflags, $wflag)
+ particular_werror_flags=no
+ ])
+ ])
+ done
+ AS_IF([test "$particular_werror_flags" = "yes"], [
+ wflag=-Werror=undef
+ ], [
+ wflag=-Wundef
+ ])
+ RUBY_TRY_CFLAGS($wflag, [
+ RUBY_APPEND_OPTIONS(warnflags, $wflag)
+ ], [], [
+ @%:@if !defined(RUBY_CONFIG_TEST_NEVER_DEFINED_SYMBOL)
+ @%:@elif RUBY_CONFIG_TEST_NEVER_DEFINED_SYMBOL
+ @%:@endif
+ ])
+ AS_CASE([" $warnflags "],[*" -Wno-missing-field-initializers "*], [wflag="-Wall -Wextra"],
+ [wflag=-Wall])
+ RUBY_TRY_CFLAGS($wflag, [warnflags="$wflag${warnflags+ $warnflags}"])
+ # Disable warnflags while conftest. -Werror=* flags might make bad OS capability guess.
+ rb_cv_warnflags="$warnflags"
+ warnflags=
+])
+RUBY_TRY_CFLAGS(-Qunused-arguments, [RUBY_APPEND_OPTIONS(rb_cv_wsuppress_flags, -Qunused-arguments)])
+AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([
+@%:@if !(defined(__SUNPRO_C)||defined(__SUNPRO_CC))
+@%:@error not sunpro
+@%:@endif],[])], [
+ for e in \
+ E_STATEMENT_NOT_REACHED \
+ E_INIT_SIGN_EXTEND \
+ E_INIT_DOES_NOT_FIT \
+ E_INITIALIZATION_TYPE_MISMATCH
+ do
+ RUBY_TRY_CFLAGS([-erroff=${e}], [
+ RUBY_APPEND_OPTIONS(rb_cv_warnflags, [-erroff=${e}])
+ ])
+ done
+])
+
+AC_ARG_WITH(compress-debug-sections,
+ AS_HELP_STRING([--with-compress-debug-sections=type],
+ [enable debug section compression]),
+ [compress_debug_sections=$withval], [compress_debug_sections=])
+
+AS_IF([test "$GCC" = yes], [
+ # -D_FORTIFY_SOURCE
+ # When defined _FORTIFY_SOURCE, glibc enables some additional sanity
+ # argument check. The performance drop is very little and Ubuntu enables
+ # _FORTIFY_SOURCE=2 by default. So, let's support it for protecting us from
+ # a mistake of silly C extensions.
+
+ # TODO: check if link succeeds with _FORTIFY_SOURCE=2.
+ AS_CASE(["$target_os"],
+ [mingw*], [
+ fortify_source=no
+ ])
+ AC_ARG_ENABLE(fortify_source,
+ AS_HELP_STRING([--disable-fortify-source],
+ [disable -D_FORTIFY_SOURCE=2 option, which causes link error on mingw]),
+ [fortify_source=$enableval])
+ AS_IF([test "x$fortify_source" != xno], [
+ RUBY_TRY_CFLAGS([$optflags -D_FORTIFY_SOURCE=2],
+ [RUBY_PREPEND_OPTION(hardenflags, -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2)], [],
+ [@%:@include <stdio.h>])
+ ])
+
+ # -fstack-protector
+ AS_CASE(["$target_os"],
+ [emscripten*|wasi*], [
+ stack_protector=no
+ ])
+ AS_IF([test -z "${stack_protector+set}"], [
+ AS_FOR(option, opt, [-fstack-protector-strong -fstack-protector], [
+ RUBY_TRY_CFLAGS(option, [stack_protector=yes])
+ AS_IF([test "x$stack_protector" = xyes], [
+ RUBY_TRY_LDFLAGS(option, [], [stack_protector=])
+ ])
+ AS_IF([test "x$stack_protector" = xyes], [stack_protector=option; break])
+ ])
+ ])
+ AC_MSG_CHECKING([for -fstack-protector])
+ AC_MSG_RESULT(["$stack_protector"])
+ AS_CASE(["$stack_protector"], [-*], [
+ RUBY_PREPEND_OPTION(hardenflags, $stack_protector)
+ RUBY_APPEND_OPTION(XLDFLAGS, $stack_protector)
+ RUBY_APPEND_OPTION(LDFLAGS, $stack_protector)
+ ])
+
+ # aarch64 branch protection
+ AS_CASE(["$target_cpu"], [aarch64|arm64], [
+ # LLVM libunwind is not actually capable of unwinding code compiled with pointer
+ # authentication unless it's built without LIBUNWIND_ENABLE_CROSS_UNWINDING (see
+ # https://github.com/llvm/llvm-project/blob/8e35c86977ce5529a9387657321ac9fefcdae5b5/libunwind/src/DwarfInstructions.hpp#L294)
+ # It seems that macOS ships LLVM compiled this way.
+ # Detect this and disable automatic insertion of pac-ret flags in that case, since we assume
+ # that reliable backtraces are more important than hardening flags.
+ AC_MSG_CHECKING([for a broken LLVM libunwind that cannot unwind code with RA signing])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@include <libunwind.h>
+ int foo = UNW_ECROSSRASIGNING;
+ ]])],
+ # If compilation succeeds, that means we a) had libunwind, and b) it was NOT native only
+ [rb_cv_libunwind_broken_ra_signing=yes],
+ # if compilation fails, that means we either a) do not have libunwind, or b) have it in
+ # native only mode (which is good!)
+ [rb_cv_libunwind_broken_ra_signing=no]
+ )
+ AC_MSG_RESULT(["$rb_cv_libunwind_broken_ra_signing"])
+ AS_IF([test "x$rb_cv_libunwind_broken_ra_signing" = "xno"], [
+ AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [
+ # Try these flags in the _prepended_ position - i.e. we want to try building a program
+ # with CFLAGS="-mbranch-protection=pac-ret $CFLAGS". If the builder has provided different
+ # branch protection flags in CFLAGS, we don't want to overwrite those. We just want to
+ # find some branch protection flags which work if none were provided.
+ RUBY_TRY_CFLAGS_PREPEND(option, [branch_protection=yes], [branch_protection=no])
+ AS_IF([test "x$branch_protection" = xyes], [
+ # _prepend_ the options to CFLAGS, so that user-provided flags will overwrite them.
+ # These CFLAGS are used during the configure script to compile further test programs;
+ # however, $harden_flags is prepended separately to CFLAGS at the end of the script.
+ RUBY_PREPEND_OPTION(hardenflags, $opt)
+ break
+ ])
+ ])
+ ])
+ ])
+
+ AS_CASE("${compress_debug_sections:-zlib}",
+ [none|no], [], [
+ RUBY_TRY_LDFLAGS(${linker_flag}--compress-debug-sections=${compress_debug_sections:-zlib},
+ [compress_debug_sections=${compress_debug_sections:-zlib}],
+ [compress_debug_sections=no])
+ ])
+ AS_IF([test "x$compress_debug_sections" != xno], [
+ RUBY_APPEND_OPTION(DLDFLAGS, ${linker_flag}--compress-debug-sections=$compress_debug_sections)
+ ])
+
+ AS_CASE(["$target_os"],[mingw*], [
+ # On Windows platforms, system provided headers are VC++
+ # optimized. That is, C++ habits are often contaminated into
+ # various headers. Most frequent situation is the use of //
+ # comments. We bypass ANSI C mode for them. Otherwise
+ # extension libs cannot include those headers.
+
+ # Since math.h in some mingw64 wrongly declares frexp and modf
+ # to be pure, the variables pointed by the second arguments are
+ # considered uninitialized unexpectedly.
+ AC_CACHE_CHECK([whether frexp and modf are broken],
+ rb_cv_mingw64_broken_frexp_modf,
+ [
+ save_CFLAGS="$CFLAGS"
+ AS_IF([test "$particular_werror_flags" = "yes"], [
+ CFLAGS="$CFLAGS -Werror=uninitialized"
+ ], [
+ CFLAGS="$CFLAGS -Werror -Wuninitialized"
+ ])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>
+ int foo(double x)
+ {
+ int exp;
+ frexp(x, &exp);
+ return exp;
+ }]], [[if (foo(0.0)) return 1;]])],
+ [rb_cv_mingw64_broken_frexp_modf=no],
+ [rb_cv_mingw64_broken_frexp_modf=yes])
+ CFLAGS="$save_CFLAGS"
+ ])
+ AS_IF([test "$rb_cv_mingw64_broken_frexp_modf" = yes], [
+ AC_DEFINE(RUBY_MINGW64_BROKEN_FREXP_MODF)
+ ])
+ ],
+ [cygwin*|msys*|darwin*|netbsd*], [
+ # need lgamma_r()
+ ])
+
+ # suppress annoying -Wstrict-overflow warnings
+ RUBY_TRY_CFLAGS(-fno-strict-overflow, [RUBY_APPEND_OPTION(XCFLAGS, -fno-strict-overflow)])
+
+ test "${debugflags+set}" || {RUBY_TRY_LDFLAGS(-ggdb3, [debugflags=-ggdb3])}
+ test "${debugflags+set}" || {RUBY_TRY_LDFLAGS(-ggdb, [debugflags=-ggdb])}
+ test "${debugflags+set}" || {RUBY_TRY_LDFLAGS(-g3, [debugflags=-g3])}
+])
+test $ac_cv_prog_cc_g = yes && : ${debugflags=-g}
+
+AS_IF([test "$GCC" = ""], [
+ AS_CASE(["$target_os"],[aix*],[warnflags="$warnflags -qinfo=por" rb_cv_warnflags="$rb_cv_warnflags -qinfo=por"])
+])
+AS_IF([test "$GCC" = yes], [
+ RUBY_TRY_CFLAGS(-fvisibility=hidden, [visibility_option=yes], [visibility_option=no])
+ AC_SUBST(WERRORFLAG, "-Werror")
+ AS_IF([test "$visibility_option" = yes], [
+ RUBY_APPEND_OPTION(XCFLAGS, -fvisibility=hidden)
+ AC_DEFINE(RUBY_SYMBOL_EXPORT_BEGIN, [_Pragma("GCC visibility push(default)")])
+ AC_DEFINE(RUBY_SYMBOL_EXPORT_END, [_Pragma("GCC visibility pop")])
+ ], [
+ RUBY_TRY_LDFLAGS([-Wl,-unexported_symbol,_Init_*], [visibility_option=ld], [visibility_option=no])
+ ])
+])
+
+AS_IF([test "$GCC" = yes], [
+ # optflags
+
+ AS_CASE(["$target_os"], [mingw*], [
+ RUBY_TRY_CFLAGS(-fno-omit-frame-pointer, [optflags="${optflags+$optflags }-fno-omit-frame-pointer"])
+ RUBY_TRY_CFLAGS(-static-libgcc, [static_libgcc=yes], [static_libgcc=no])
+ AS_IF([test "$static_libgcc" = yes], [
+ RUBY_APPEND_OPTION(EXTLDFLAGS, -static-libgcc)
+ ])
+ ])
+
+ # disable fast-math
+ for oflag in -fno-fast-math; do
+ RUBY_TRY_CFLAGS($oflag, [RUBY_APPEND_OPTION(optflags, $oflag)])
+ done
+ for oflag in -fexcess-precision=standard -fp-model\ precise; do
+ RUBY_TRY_CFLAGS($oflag, [RUBY_APPEND_OPTION(XCFLAGS, $oflag)])
+ done
+])
+
+AS_CASE(["$target_cpu"], [[i[3-6]86*]], [
+ AC_CACHE_CHECK([for __sync_val_compare_and_swap], [rb_cv_gcc_compiler_cas], [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[unsigned long atomic_var;]],
+ [[__sync_val_compare_and_swap(&atomic_var, 0, 1);]])],
+ [rb_cv_gcc_compiler_cas=yes],
+ [
+ save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -march=i486"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[unsigned long atomic_var;]],
+ [[__sync_val_compare_and_swap(&atomic_var, 0, 1);]])],
+ [rb_cv_gcc_compiler_cas=i486],
+ [rb_cv_gcc_compiler_cas=no])
+ CFLAGS="$save_CFLAGS"
+ ])
+ ])
+ AS_IF([test "$rb_cv_gcc_compiler_cas" = i486], [ARCH_FLAG="-march=i486"])
+])
+
+OPT_DIR=
+AC_ARG_WITH([gmp-dir],
+ AS_HELP_STRING([--with-gmp-dir=DIR],
+ [specify the prefix directory where gmp is installed]),
+ [OPT_DIR="${OPT_DIR:+$OPT_DIR$PATH_SEPARATOR}$withval"], [])
+AC_ARG_WITH([gmp],
+ [AS_HELP_STRING([--without-gmp],
+ [disable GNU GMP to accelerate Bignum operations])],
+ [], [with_gmp=yes])
+
+AC_ARG_WITH(opt-dir,
+ AS_HELP_STRING([--with-opt-dir=DIR-LIST],
+ [add optional headers and libraries directories separated by $PATH_SEPARATOR]),
+ [OPT_DIR="${OPT_DIR:+$OPT_DIR$PATH_SEPARATOR}$withval"], [])
+
+AS_IF([test "x$OPT_DIR" != x], [
+ save_IFS="$IFS" IFS="$PATH_SEPARATOR" val= PWD=
+ for dir in $OPT_DIR; do
+ test -z "$dir" && continue
+ dir=`eval $CHDIR '"$dir"' 2>/dev/null && pwd` || continue
+ val="${val:+$val$PATH_SEPARATOR}$dir"
+ done
+ IFS="$save_IFS" OPT_DIR="$val"
+ unset PWD
+ unset save_IFS
+ val=`IFS="$PATH_SEPARATOR"
+ for dir in $OPT_DIR; do
+ echo x ${LIBPATHFLAG} ${RPATHFLAG} |
+ sed "s/^x *//;s${IFS}"'%1\\$-s'"${IFS}${dir}/lib${IFS}g;s${IFS}%s${IFS}${dir}/lib${IFS}g"
+ done | tr '\012' ' ' | sed 's/ *$//'`
+ LDFLAGS="${LDFLAGS:+$LDFLAGS }$val"
+ DLDFLAGS="${DLDFLAGS:+$DLDFLAGS }$val"
+ LDFLAGS_OPTDIR="$val"
+ INCFLAGS="${INCFLAGS:+$INCFLAGS }"`echo "$OPT_DIR" | tr "${PATH_SEPARATOR}" '\012' |
+ sed '/^$/d;s|^|-I|;s|$|/include|' | tr '\012' ' ' | sed 's/ *$//'`
+])
+AC_SUBST(incflags, "$INCFLAGS")
+
+test -z "${ac_env_CFLAGS_set}" -a -n "${cflags+set}" && eval CFLAGS="\"$cflags $ARCH_FLAG\""
+test -z "${ac_env_CXXFLAGS_set}" -a -n "${cxxflags+set}" && eval CXXFLAGS="\"$cxxflags $ARCH_FLAG\""
+
+
+AC_CACHE_CHECK([whether compiler has statement and declarations in expressions],
+ rb_cv_have_stmt_and_decl_in_expr,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[ __extension__ ({ int a = 0; a; }); ]])],
+ [rb_cv_have_stmt_and_decl_in_expr=yes],
+ [rb_cv_have_stmt_and_decl_in_expr=no])])
+AS_IF([test "$rb_cv_have_stmt_and_decl_in_expr" = yes], [
+ AC_DEFINE(HAVE_STMT_AND_DECL_IN_EXPR)
+])
+}
+
+[begin]_group "header and library section" && {
+AC_ARG_WITH(winnt-ver,
+ AS_HELP_STRING([--with-winnt-ver=0xXXXX], [target Windows NT version (default to 0x0600)]),
+ [with_winnt_ver="$withval"], [with_winnt_ver="0x0600"])
+AS_CASE(["$target_os"],
+[mingw*], [
+ RUBY_APPEND_OPTION(CPPFLAGS, -D_WIN32_WINNT=$with_winnt_ver)
+ RUBY_APPEND_OPTION(CPPFLAGS, -D__MINGW_USE_VC2005_COMPAT)
+])
+
+RUBY_THREAD
+
+dnl Checks for libraries.
+AS_CASE(["$target_os"],[*bsd*|dragonfly*],[],[ac_cv_func_daemon=no])
+
+AS_CASE(["$target_os"], [*android*], [
+ AS_CASE(["$target_cpu"], [arm*], [
+ ac_cv_func___builtin_setjmp=no
+ ])
+])
+
+AS_UNSET(ORIG_LIBS)
+POSTLINK=:
+AC_SUBST(POSTLINK)
+cleanlibs=
+AC_SUBST(cleanlibs)
+AS_CASE(["$target_os"],
+[nextstep*], [ ],
+[openstep*], [ ],
+[rhapsody*], [ ],
+[darwin*], [
+ ORIG_LIBS="$LIBS"
+ RUBY_PREPEND_OPTION(LIBS, -lobjc)
+ RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT)
+ AC_CACHE_CHECK([whether syscall(2) is deprecated], rb_cv_syscall_deprecated,
+ [RUBY_WERROR_FLAG([
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <unistd.h>]],
+ [[if (syscall(0)) return 1;]])],
+ [rb_cv_syscall_deprecated=no],
+ [rb_cv_syscall_deprecated=yes])])])
+ AS_IF([test $rb_cv_syscall_deprecated = yes], [
+ ac_cv_func___syscall=no
+ ac_cv_func_syscall=no
+ ac_cv_header_sys_syscall_h=no
+ ac_cv_header_syscall_h=no
+ ])
+ ac_cv_func_getcontext=no
+ ac_cv_func_setcontext=no
+ ac_cv_type_getgroups=gid_t # getgroups() on Rosetta fills garbage
+ ac_cv_lib_crypt_crypt=no
+ ac_cv_func_fdatasync=no # Mac OS X wrongly reports it has fdatasync()
+ ac_cv_func_vfork=no
+ AS_IF([test $gcc_major -eq 4 -a $gcc_minor -lt 3], [
+ ac_cv_func___builtin_setjmp=no
+ ])
+ AC_CACHE_CHECK(for broken crypt with 8bit chars, rb_cv_broken_crypt,
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+void
+broken_crypt(const char *salt, const char *buf1, const char *buf2)
+{
+#if 0
+ printf("%.2x%.2x: %s -> %s\n", (unsigned char)salt[0], (unsigned char)salt[1],
+ buf1+2, buf2+2);
+#endif
+}
+
+int
+main()
+{
+ int i;
+ char salt[2], buf[256], *s;
+ for (i = 0; i < 128*128; i++) {
+ salt[0] = 0x80 | (i & 0x7f);
+ salt[1] = 0x80 | (i >> 7);
+ strcpy(buf, crypt("", salt));
+ if (strcmp(buf, s = crypt("", salt))) {
+ broken_crypt(salt, buf, s);
+ return 1;
+ }
+ }
+ salt[0] = salt[1] = ' ';
+ strcpy(buf, crypt("", salt));
+ salt[0] = salt[1] = 0x80 | ' ';
+ if (strcmp(buf, s = crypt("", salt))) {
+ broken_crypt(salt, buf, s);
+ return 1;
+ }
+ return 0;
+}
+]])],
+ rb_cv_broken_crypt=no,
+ rb_cv_broken_crypt=yes,
+ rb_cv_broken_crypt=yes)])
+ AS_IF([test "$rb_cv_broken_crypt" = yes], [
+ AC_DEFINE(BROKEN_CRYPT, 1)
+ ])
+ POSTLINK=""
+ AC_CHECK_PROGS(codesign, codesign)
+ dsymutils=
+ AS_CASE("$CC_NO_WRAPPER", [gcc*-1[[3-9]]], [
+ dsymutils=${CC_NO_WRAPPER@%:@gcc}
+ dsymutils=dsymutil${dsymutils%-1*}
+ dsymutils="$dsymutils-19 $dsymutils-18 $dsymutils-17"
+ ])
+ AC_CHECK_PROGS(dsymutil, $dsymutils dsymutil)
+ AS_IF([test -n "$codesign"], [
+ POSTLINK="{ test -z '\$(RUBY_CODESIGN)' || $codesign -s '\$(RUBY_CODESIGN)' \$@; }${POSTLINK:+; $POSTLINK}"
+ ])
+ AS_IF([test -n "$dsymutil"], [
+ POSTLINK="$dsymutil \$@ 2>/dev/null${POSTLINK:+; $POSTLINK}"
+ ])
+ AC_CHECK_HEADERS(crt_externs.h, [], [], [
+ #include <crt_externs.h>
+ ])
+ cleanlibs='$(TARGET_SO:=.dSYM)'
+ ],
+[solaris*], [ LIBS="-lm $LIBS"
+ ac_cv_func_vfork=no
+ AC_MSG_CHECKING(whether _XOPEN_SOURCE is already given)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>
+ #ifndef _XOPEN_SOURCE
+ #error _XOPEN_SOURCE is not defined
+ #endif
+ ]], [[]])],
+ [given_xopen_source=yes], [given_xopen_source=no])
+ AC_MSG_RESULT($given_xopen_source)
+ AS_IF([test $given_xopen_source = no], [
+ AC_MSG_CHECKING(appropriate _XOPEN_SOURCE value to define)
+ define_xopen_source=""
+ for tmp_xpg in 7 6 5; do
+ AS_IF([test x"$define_xopen_source" != x], [
+ break
+ ])
+ RUBY_WERROR_FLAG([AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #define _XOPEN_SOURCE ${tmp_xpg}00
+ #include <unistd.h>
+ #ifndef _XPG${tmp_xpg}
+ #error _XPG${tmp_xpg} should be defined by _XOPEN_SOURCE=${tmp_xpg}00
+ #endif
+ ]], [[]])],
+ [define_xopen_source=${tmp_xpg}00], [])
+ ])
+ done
+ AS_IF([test x"$define_xopen_source" = x], [
+ define_xopen_source=no
+ ])
+ AC_MSG_RESULT($define_xopen_source)
+ AS_IF([test x"$define_xopen_source" != xno], [
+ RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE=$define_xopen_source)
+ # _XOPEN_SOURCE should not be defined for C++ on Solaris.
+ RUBY_APPEND_OPTIONS(CXXFLAGS, -U_XOPEN_SOURCE)
+ ])
+ ])
+ AC_CHECK_TYPES([caddr_t],[],[],[@%:@include <sys/types.h>])
+ AC_CACHE_CHECK([whether madvise declaration is needed], rb_cv_madvice_prototype_using_caddr_t,
+ [RUBY_WERROR_FLAG([AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@include <sys/unistd.h>
+ @%:@include <sys/mman.h>
+ @%:@include <sys/types.h>
+ extern int madvise(caddr_t, size_t, int);
+ ]], [[]])],
+ [rb_cv_madvice_prototype_using_caddr_t=yes], [rb_cv_madvice_prototype_using_caddr_t=no])
+ ])
+ ])
+ AS_IF([test $rb_cv_madvice_prototype_using_caddr_t = yes], [AC_DEFINE(NEED_MADVICE_PROTOTYPE_USING_CADDR_T, 1)])
+ ],
+[haiku*], [
+ LIBS="$LIBS" # m lib is include in root
+ ],
+[cygwin*|msys*], [
+ ac_cv_header_langinfo_h=yes
+ RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE -D_GNU_SOURCE)
+ AC_CHECK_FUNCS(cygwin_conv_path)
+ AC_LIBOBJ([langinfo])
+ ],
+[mingw*], [ LIBS="-lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi -lbcrypt $LIBS"
+ ac_cv_header_pwd_h=no
+ ac_cv_header_utime_h=no
+ ac_cv_header_sys_ioctl_h=no
+ ac_cv_header_sys_param_h=no
+ ac_cv_header_sys_resource_h=no
+ ac_cv_header_sys_select_h=no
+ ac_cv_header_sys_time_h=no
+ ac_cv_header_sys_times_h=no
+ ac_cv_header_sys_socket_h=no
+ ac_cv_func_chown=yes
+ ac_cv_func_getegid=yes
+ ac_cv_func_geteuid=yes
+ ac_cv_func_getgid=yes
+ ac_cv_func_getuid=yes
+ ac_cv_func_execv=yes
+ ac_cv_func_lstat=yes
+ ac_cv_func_times=yes
+ ac_cv_func_waitpid=yes
+ ac_cv_func_fsync=yes
+ ac_cv_func_seekdir=yes
+ ac_cv_func_telldir=yes
+ ac_cv_func_lchown=yes
+ ac_cv_func_link=yes
+ ac_cv_func_readlink=yes
+ ac_cv_func_shutdown=yes
+ ac_cv_func_symlink=yes
+ ac_cv_func_clock_getres=yes
+ ac_cv_func_clock_gettime=yes
+ ac_cv_lib_crypt_crypt=no
+ ac_cv_func_getpgrp_void=no
+ ac_cv_func_memcmp_working=yes
+ ac_cv_lib_dl_dlopen=no
+ rb_cv_negative_time_t=yes
+ ac_cv_func_fcntl=yes
+ ac_cv_func_flock=yes
+ ac_cv_func_gmtime_r=yes
+ rb_cv_large_fd_select=yes
+ ac_cv_type_struct_timeval=yes
+ ac_cv_func_malloc_usable_size=no
+ ac_cv_type_off_t=yes
+ ac_cv_sizeof_off_t=8
+ AS_IF([test "$target_cpu" = x64], [
+ ac_cv_func___builtin_setjmp=yes
+ ac_cv_func_round=no
+ ac_cv_func_tgamma=no
+ ])
+ AC_CHECK_TYPE([NET_LUID], [], [],
+ [@%:@include <winsock2.h>
+ @%:@include <windows.h>
+ @%:@include <iphlpapi.h>])
+ AS_IF([test x"$ac_cv_type_NET_LUID" = xyes], [
+ AC_DEFINE(HAVE_TYPE_NET_LUID, 1)
+ ])
+ AC_CHECK_FUNCS(_gmtime64_s)
+ AC_CHECK_FUNCS(_wfreopen_s)
+ AC_LIBOBJ([langinfo])
+ ],
+[bsdi*], [ LIBS="-lm $LIBS"
+ AC_DEFINE(BROKEN_SETREUID, 1)
+ AC_DEFINE(BROKEN_SETREGID, 1)
+ ac_cv_sizeof_rlim_t=8],
+[freebsd*], [ LIBS="-lm $LIBS"
+ ac_cv_func_getpeername=no
+ ac_cv_func_getsockname=no
+ ac_cv_func_shutdown=no
+ ac_cv_func_close=no
+ ],
+[netbsd*], [ LIBS="-lm $LIBS"
+ ],
+[dragonfly*], [ LIBS="-lm $LIBS"
+ ],
+[aix*],[ LIBS="-lm $LIBS"
+ ac_cv_func_round=no
+ ac_cv_func___builtin_setjmp=no
+ ],
+[linux*],[ LIBS="-lm $LIBS"
+ # __builtin_longjmp in ppc64* Linux does not restore
+ # the TOC register (r2), which is problematic
+ # when a global exit happens from JITted .so code.
+ # __builtin_setjmp can have issues on arm64 linux (see [Bug #14480]).
+ AS_CASE(["$target_cpu"], [powerpc64*|arm64|aarch64], [
+ ac_cv_func___builtin_setjmp=no
+ ])
+ ],
+[emscripten*], [LIBS="-lm -lc $LIBS"
+ RUBY_APPEND_OPTIONS(LDFLAGS, "-sALLOW_MEMORY_GROWTH=1")
+ RUBY_APPEND_OPTIONS(LDFLAGS, "-sASYNCIFY")
+ RUBY_APPEND_OPTIONS(LDFLAGS, "-sFORCE_FILESYSTEM=1")
+ ac_cv_func_shutdown=no
+ ],
+[wasi*],[ LIBS="-lm -lwasi-emulated-mman -lwasi-emulated-signal -lwasi-emulated-getpid -lwasi-emulated-process-clocks $LIBS"
+ RUBY_APPEND_OPTIONS(CFLAGS, -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_GETPID -D_WASI_EMULATED_PROCESS_CLOCKS)
+ RUBY_APPEND_OPTIONS(CPPFLAGS, -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_GETPID -D_WASI_EMULATED_PROCESS_CLOCKS)
+ POSTLINK="\$(WASMOPT) --asyncify \$(wasmoptflags) -o \$@ \$@${POSTLINK:+; $POSTLINK}"
+ # wasi-libc's sys/socket.h is not compatible with -std=gnu99,
+ # so re-declare shutdown in include/ruby/missing.h
+ ac_cv_func_shutdown=no
+ ],
+[ LIBS="-lm $LIBS"])
+: ${ORIG_LIBS=$LIBS}
+
+AS_IF([test -n "${POSTLINK}"], [
+ # NOTE: A (part of) link commands used link shared extension libraries. If
+ # the first line of the value is empty, mkmf prepends default link steps.
+ LINK_SO="$LINK_SO
+\$(POSTLINK)"
+])
+
+AS_IF([test -n "${rb_there_is_in_fact_no_gplusplus_but_autoconf_is_cheating_us}"], [
+ AC_MSG_NOTICE([Test skipped due to lack of a C++ compiler.])
+],
+[test -n "${CXX}"], [
+ RUBY_WERROR_FLAG([
+ AC_MSG_CHECKING([whether CXXFLAGS is valid])
+ AC_LANG_PUSH(C++)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <cstdio>]], [[]])],
+ [AC_MSG_RESULT(yes)],[
+ AC_MSG_RESULT(no)
+ # The message mentions CXXFLAGS, but CPPFLAGS might also affects.
+ AC_MSG_WARN([something wrong with CXXFLAGS="$CXXFLAGS"])
+ CXX=false
+ ])
+ AC_LANG_POP(C++)
+ ])
+])
+
+AC_CHECK_LIB(crypt, crypt) # glibc (GNU/Linux, GNU/Hurd, GNU/kFreeBSD)
+AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV
+AC_CHECK_LIB(socket, shutdown) # SunOS/Solaris
+
+dnl Checks for header files.
+AC_HEADER_DIRENT
+dnl AC_HEADER_STDC has been checked in AC_USE_SYSTEM_EXTENSIONS
+AC_HEADER_STDBOOL
+AC_HEADER_SYS_WAIT
+
+AC_CHECK_HEADERS([afunix.h], [], [],
+[#ifdef _WIN32
+# include <winsock2.h>
+#endif
+])
+AC_CHECK_HEADERS(atomic.h)
+AC_CHECK_HEADERS(copyfile.h)
+AC_CHECK_HEADERS(direct.h)
+AC_CHECK_HEADERS(grp.h)
+AC_CHECK_HEADERS(fcntl.h)
+AC_CHECK_HEADERS(float.h)
+AC_CHECK_HEADERS(ieeefp.h)
+AC_CHECK_HEADERS(intrinsics.h)
+AC_CHECK_HEADERS(langinfo.h)
+AC_CHECK_HEADERS(limits.h)
+AC_CHECK_HEADERS(locale.h)
+AC_CHECK_HEADERS(malloc.h)
+AC_CHECK_HEADERS(malloc/malloc.h)
+AC_CHECK_HEADERS(malloc_np.h)
+AC_CHECK_HEADERS(net/socket.h)
+AC_CHECK_HEADERS(process.h)
+AC_CHECK_HEADERS(pwd.h)
+AC_CHECK_HEADERS(sanitizer/asan_interface.h)
+AC_CHECK_HEADERS(sanitizer/msan_interface.h)
+AC_CHECK_HEADERS(sanitizer/tsan_interface.h)
+AC_CHECK_HEADERS(setjmpex.h)
+AC_CHECK_HEADERS(stdalign.h)
+AC_CHECK_HEADERS(stdio.h)
+AC_CHECK_HEADERS(sys/attr.h)
+AC_CHECK_HEADERS(sys/eventfd.h)
+AC_CHECK_HEADERS(sys/fcntl.h)
+AC_CHECK_HEADERS(sys/file.h)
+AC_CHECK_HEADERS(sys/id.h)
+AC_CHECK_HEADERS(sys/ioctl.h)
+AC_CHECK_HEADERS(sys/mkdev.h)
+AC_CHECK_HEADERS(sys/param.h)
+AC_CHECK_HEADERS(sys/prctl.h)
+AC_CHECK_HEADERS(sys/random.h)
+AC_CHECK_HEADERS(sys/resource.h)
+AC_CHECK_HEADERS(sys/select.h)
+AC_CHECK_HEADERS(sys/sendfile.h)
+AC_CHECK_HEADERS(sys/socket.h)
+AC_CHECK_HEADERS(sys/syscall.h)
+AC_CHECK_HEADERS(sys/sysmacros.h)
+AC_CHECK_HEADERS(sys/time.h)
+AC_CHECK_HEADERS(sys/times.h)
+AC_CHECK_HEADERS(sys/uio.h)
+AC_CHECK_HEADERS(sys/utime.h)
+AC_CHECK_HEADERS(syscall.h)
+AC_CHECK_HEADERS(time.h)
+AC_CHECK_HEADERS(ucontext.h)
+AC_CHECK_HEADERS(utime.h)
+AC_CHECK_HEADERS(sys/epoll.h)
+AC_CHECK_HEADERS(sys/event.h)
+AC_CHECK_HEADERS(stdckdint.h)
+AC_CHECK_HEADERS(stdatomic.h)
+
+AS_CASE("$target_cpu", [x64|x86_64|[i[3-6]86*]], [
+ AC_CHECK_HEADERS(x86intrin.h)
+])
+RUBY_UNIVERSAL_CHECK_HEADER([x86_64, i386], x86intrin.h)
+
+AS_IF([test "x$with_gmp" != xno],
+ [RUBY_CHECK_HEADER(gmp.h)
+ AS_IF([test "x$ac_cv_header_gmp_h" != xno],
+ AC_SEARCH_LIBS([__gmpz_init], [gmp],
+ [AC_DEFINE(HAVE_LIBGMP, 1)]))])
+
+AC_ARG_WITH([jemalloc],
+ [AS_HELP_STRING([--with-jemalloc],[use jemalloc allocator])],
+ [with_jemalloc=$withval], [with_jemalloc=no])
+AS_IF([test "x$with_jemalloc" != xno],[
+ # find jemalloc header first
+ save_CPPFLAGS="${CPPFLAGS}"
+ CPPFLAGS="${INCFLAGS} ${CPPFLAGS}"
+ malloc_header=
+ AC_CHECK_HEADER(jemalloc/jemalloc.h, [malloc_header=jemalloc/jemalloc.h], [
+ AC_CHECK_HEADER(jemalloc.h, [malloc_header=jemalloc.h])
+ ])
+ AS_IF([test "$malloc_header" != ""], [
+ AC_DEFINE_UNQUOTED(RUBY_ALTERNATIVE_MALLOC_HEADER, [<$malloc_header>])
+ ])
+ save_LIBS="$LIBS"
+ AC_CACHE_CHECK([for jemalloc library], rb_cv_jemalloc_library, [
+ rb_cv_jemalloc_library=no
+ # try [with mangle, without mangle] x [no more additional
+ # libraries, adding jemalloc] combination, using the jemalloc
+ # header found above.
+ for mangle in '' mangle; do
+ for lib in '' -ljemalloc; do
+ LIBS="${lib:+$lib }$LIBS"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([${mangle:+@%:@define JEMALLOC_MANGLE 1}
+ @%:@include <stdio.h>
+ @%:@ifdef RUBY_ALTERNATIVE_MALLOC_HEADER
+ @%:@include RUBY_ALTERNATIVE_MALLOC_HEADER
+ @%:@else
+ extern const char *malloc_conf;
+ @%:@endif],
+ [/* access at runtime not to be optimized away */
+ if (malloc_conf) printf("malloc_conf=%s\n", malloc_conf);])],
+ [rb_cv_jemalloc_library="${lib:-none required}${mangle:+ with mangle}"])
+ LIBS="$save_LIBS"
+ test "${rb_cv_jemalloc_library}" = no || break 2
+ done
+ done
+ ])
+ CPPFLAGS="${save_CPPFLAGS}"
+ unset save_CPPFLAGS
+ with_jemalloc=${rb_cv_jemalloc_library}
+ AS_CASE(["$with_jemalloc"],
+ [no],
+ [AC_MSG_ERROR([jemalloc requested but not found])],
+ [-l*], [
+ set dummy $with_jemalloc
+ LIBS="$2 $LIBS"
+ DLDLIBS="$2${DLDLIBS:+ $DLDLIBS}" # probably needed also in extension libraries
+ ])
+ AS_CASE(["$with_jemalloc"],
+ [*" with mangle"], [
+ AC_DEFINE(JEMALLOC_MANGLE)
+ ])
+ AC_DEFINE(HAVE_MALLOC_CONF)
+ ac_cv_func_malloc_usable_size=yes
+]) # with_jemalloc
+
+dnl check for large file stuff
+mv confdefs.h confdefs1.h
+: > confdefs.h
+AC_SYS_LARGEFILE
+# On 32-bit Solaris, it is safe to define _LARGEFILE_SOURCE
+# which is not added by AC_SYS_LARGEFILE.
+AS_IF([test x"$enable_largefile" != xno], [
+ AS_CASE(["$target_os"], [solaris*], [
+ AC_MSG_CHECKING([whether _LARGEFILE_SOURCE should be defined])
+ AS_CASE(["${ac_cv_sys_file_offset_bits}:${ac_cv_sys_large_files}"],
+ ["64:"|"64:no"|"64:unknown"], [
+ # insert _LARGEFILE_SOURCE before _FILE_OFFSET_BITS line
+ # that is the same order as "getconf LFS_CFLAGS" output
+ mv confdefs.h largefile0.h
+ : > confdefs.h
+ AC_DEFINE(_LARGEFILE_SOURCE)
+ cat largefile0.h >> confdefs.h
+ rm largefile0.h
+ AC_MSG_RESULT([yes])
+ ], [AC_MSG_RESULT([no])])
+ ])
+])
+mv confdefs.h largefile.h
+mv confdefs1.h confdefs.h
+cat largefile.h >> confdefs.h
+
+AS_CASE(["$target_os"],
+ [aix*], [
+ AS_CASE(["$target_cpu:$ac_cv_sys_large_files"],
+ [ppc64:*|powerpc64:*], [],
+ [*:no|*:unknown], [],
+ [
+ # AIX currently does not support a 32-bit call to posix_fadvise()
+ # if _LARGE_FILES is defined.
+ ac_cv_func_posix_fadvise=no
+ ])
+ ])
+
+AC_C_BIGENDIAN([], [], [], [AC_DEFINE(AC_APPLE_UNIVERSAL_BUILD, 1)])
+AC_C_CONST
+AC_C_CHAR_UNSIGNED
+AC_C_INLINE
+AC_C_VOLATILE
+AC_C_TYPEOF
+AC_C_RESTRICT
+
+AS_CASE(":$ac_cv_c_const:$ac_cv_c_volatile:",
+ [*:no:*], [AC_MSG_ERROR(ANSI C-conforming const and volatile are mandatory)])
+
+AC_CHECK_TYPES([long long, off_t])
+
+AC_CACHE_CHECK([char bit], [rb_cv_char_bit],
+ [test "$universal_binary" = yes && cross_compiling=yes
+ AC_COMPUTE_INT([rb_cv_char_bit], [CHAR_BIT],
+ [AC_INCLUDES_DEFAULT([@%:@include <limits.h>])], [rb_cv_char_bit=8])
+ test "$universal_binary" = yes && cross_compiling=$real_cross_compiling])
+
+RUBY_CHECK_SIZEOF(int, [], [ILP])
+RUBY_CHECK_SIZEOF(short)
+RUBY_CHECK_SIZEOF(long, [int], [ILP LP])
+RUBY_CHECK_SIZEOF(long long)
+RUBY_CHECK_SIZEOF(__int64, [8], [ILP LP])
+RUBY_CHECK_SIZEOF(__int128, [16], [ILP LP])
+RUBY_CHECK_SIZEOF(off_t)
+RUBY_CHECK_SIZEOF(void*, [int long "long long"], [ILP LP LLP])
+RUBY_CHECK_SIZEOF(float)
+RUBY_CHECK_SIZEOF(double)
+RUBY_CHECK_SIZEOF(time_t, [long "long long"], [], [@%:@include <time.h>])
+RUBY_CHECK_SIZEOF(clock_t, [], [], [@%:@include <time.h>])
+AC_SUBST(X_BUILTIN_BINARY, yes)
+AS_IF([test "$cross_compiling" = yes],
+[dnl miniruby cannot run if cross compiling
+ X_BUILTIN_BINARY=no
+],
+[
+ AS_CASE([ac_cv_sizeof_voidp],
+ [[1-9]*], [dnl fixed value
+ ],
+ [
+ AC_CACHE_CHECK([word size], [rb_cv_word_size],
+ [for w in 4 8; do
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@if SIZEOF_VOIDP != ${w}
+ @%:@error SIZEOF_VOIDP
+ @%:@endif]])], [rb_cv_word_size=${w}; break])
+ done])
+ AS_IF([test -z $rb_cv_word_size], [X_BUILTIN_BINARY=no])
+ ])
+])
+
+AC_CACHE_CHECK(packed struct attribute, rb_cv_packed_struct,
+ [rb_cv_packed_struct=no
+ for mac in \
+ "__pragma(pack(push, 1)) x __pragma(pack(pop))" \
+ "x __attribute__((packed))" \
+ ; do
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@define PACKED_STRUCT(x) $mac
+ PACKED_STRUCT(struct { int a; });]], [[]])],
+ [rb_cv_packed_struct=$mac; break])
+ done])
+AS_IF([test "$rb_cv_packed_struct" != no], [
+ AC_DEFINE_UNQUOTED([RBIMPL_ATTR_PACKED_STRUCT_BEGIN()], [`echo " $rb_cv_packed_struct " | sed 's/ x .*//;s/^ *//'`])
+ AC_DEFINE_UNQUOTED([RBIMPL_ATTR_PACKED_STRUCT_END()], [`echo " $rb_cv_packed_struct " | sed 's/.* x //;s/ *$//'`])
+ RUBY_TRY_CFLAGS(-Wno-address-of-packed-member, [AC_DEFINE(USE_UNALIGNED_MEMBER_ACCESS)])
+])
+
+AS_IF([test "x$ac_cv_type_long_long" = xyes], [
+ RUBY_CHECK_PRINTF_PREFIX(long long, ll I64, LL)
+], [test "x$ac_cv_type___int64" = xyes], [
+ RUBY_CHECK_PRINTF_PREFIX(__int64, ll I64, LL)
+])
+
+RUBY_REPLACE_TYPE(pid_t, int, PIDT)
+RUBY_REPLACE_TYPE(uid_t, int, UIDT)
+RUBY_REPLACE_TYPE(gid_t, int, GIDT)
+RUBY_REPLACE_TYPE(time_t, [], TIMET, [@%:@include <time.h>])
+RUBY_REPLACE_TYPE(dev_t, [int long "long long"], DEVT)
+RUBY_REPLACE_TYPE(mode_t, ["unsigned short" "unsigned int" long], MODET, [@%:@include <sys/stat.h>])
+RUBY_REPLACE_TYPE(rlim_t, [int long "long long"], RLIM, [
+@%:@ifdef HAVE_SYS_TYPES_H
+@%:@include <sys/types.h>
+@%:@endif
+@%:@ifdef HAVE_SYS_TYPES_H
+@%:@include <sys/time.h>
+@%:@endif
+@%:@include <sys/resource.h>
+])
+RUBY_REPLACE_TYPE(off_t, [], OFFT)
+RUBY_REPLACE_TYPE(clockid_t, [], CLOCKID, [@%:@ifdef HAVE_TIME_H
+@%:@ include <time.h>
+@%:@endif
+@%:@ifdef HAVE_SYS_TIME_H
+@%:@ include <sys/time.h>
+@%:@endif])
+
+# __VA_ARGS__ is also tested in AC_PROG_CC_C99 since autoconf 2.60a (around
+# 2006). The check below is redundant and should always success. Remain not
+# deleted for backward compat.
+AC_CACHE_CHECK(for variable length macro, rb_cv_va_args_macro,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+int foo(const char*);
+@%:@define FOO(...) foo(@%:@__VA_ARGS__)
+]], [[FOO(1);FOO(1,2);FOO(1,2,3);]])],
+ rb_cv_va_args_macro=yes,
+ rb_cv_va_args_macro=no)])
+AS_IF([test "$rb_cv_va_args_macro" = yes], [
+ AC_DEFINE(HAVE_VA_ARGS_MACRO)
+])
+
+# We want C11's `_Alignof`. GCC (and alike) have `__alignof__`, which behave
+# slightly differently than the C11's. We cannot use `__alignof__` for our
+# purpose. The problem is, however, that old gcc and old clang had both
+# implemented `_Alignof` as a synonym of `__alignof__`. They are not what we
+# want. We have to check sanity.
+#
+# See also: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023
+# See also: https://bugs.llvm.org/show_bug.cgi?id=26547
+AC_CACHE_CHECK([if _Alignof() works], rb_cv_have__alignof,[
+ rb_cv_have__alignof=no
+ RUBY_WERROR_FLAG([
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@ifdef HAVE_STDALIGN_H
+ @%:@include <stdalign.h>
+ @%:@endif
+ @%:@ifdef STDC_HEADERS
+ @%:@include <stddef.h>
+ @%:@endif
+ @%:@ifndef __GNUC__
+ @%:@define __extension__
+ @%:@endif
+ ]], [[
+ typedef struct conftest_tag {
+ char _;
+ double d;
+ } T;
+ static int conftest_ary@<:@
+ offsetof(T, d) == __extension__ _Alignof(double)
+ ? 1 : -1
+ @:>@;
+ return conftest_ary@<:@0@:>@;
+ ]])],[
+ rb_cv_have__alignof=yes
+ ],[])
+ ])
+])
+AS_IF([test "$rb_cv_have__alignof" != no], [
+ AC_DEFINE(HAVE__ALIGNOF)
+])
+
+RUBY_FUNC_ATTRIBUTE(__const__, CONSTFUNC)
+RUBY_FUNC_ATTRIBUTE(__pure__, PUREFUNC)
+RUBY_FUNC_ATTRIBUTE(__noreturn__, NORETURN)
+RUBY_FUNC_ATTRIBUTE(__deprecated__, DEPRECATED)
+RUBY_FUNC_ATTRIBUTE(__deprecated__("by "@%:@n), DEPRECATED_BY(n,x), rb_cv_func_deprecated_by)
+RUBY_FUNC_ATTRIBUTE(__noinline__, NOINLINE)
+RUBY_FUNC_ATTRIBUTE(__always_inline__, ALWAYS_INLINE)
+RUBY_FUNC_ATTRIBUTE(__no_sanitize__(san), NO_SANITIZE(san, x), rb_cv_func_no_sanitize)
+RUBY_FUNC_ATTRIBUTE(__no_sanitize_address__, NO_SANITIZE_ADDRESS)
+RUBY_FUNC_ATTRIBUTE(__no_address_safety_analysis__, NO_ADDRESS_SAFETY_ANALYSIS)
+RUBY_FUNC_ATTRIBUTE(__warn_unused_result__, WARN_UNUSED_RESULT)
+RUBY_FUNC_ATTRIBUTE(__unused__, MAYBE_UNUSED)
+RUBY_FUNC_ATTRIBUTE(__error__ mesg, ERRORFUNC(mesg,x), rb_cv_func___error__)
+RUBY_FUNC_ATTRIBUTE(__warning__ mesg, WARNINGFUNC(mesg,x), rb_cv_func___warning__)
+RUBY_FUNC_ATTRIBUTE(__weak__, WEAK, rb_cv_func_weak)
+AS_IF([test "$rb_cv_func_weak" != x], [
+ AC_DEFINE(HAVE_FUNC_WEAK)
+])
+
+AC_CACHE_CHECK([for std::nullptr_t], rb_cv_CXX_nullptr, [
+ AC_LANG_PUSH([C++])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [@%:@include <cstddef>],
+ [static std::nullptr_t const *const conftest = nullptr;])],
+ [rb_cv_CXX_nullptr=yes],
+ [rb_cv_CXX_nullptr=no])
+ AC_LANG_POP()])
+AS_IF([test "$rb_cv_CXX_nullptr" != no],[AC_DEFINE(HAVE_NULLPTR)])
+
+if_i386=${universal_binary+[defined __i386__]}
+RUBY_FUNC_ATTRIBUTE(__stdcall__, FUNC_STDCALL, rb_cv_func_stdcall, ${if_i386})
+RUBY_FUNC_ATTRIBUTE(__cdecl__, FUNC_CDECL, rb_cv_func_cdecl, ${if_i386})
+RUBY_FUNC_ATTRIBUTE(__fastcall__, FUNC_FASTCALL, rb_cv_func_fastcall, ${if_i386})
+RUBY_FUNC_ATTRIBUTE(__optimize__("O0"), FUNC_UNOPTIMIZED, rb_cv_func_unoptimized)
+RUBY_FUNC_ATTRIBUTE(__optimize__("-Os","-fomit-frame-pointer"), FUNC_MINIMIZED, rb_cv_func_minimized)
+
+AS_IF([test "$GCC" = yes], [
+ AC_CACHE_CHECK([for function alias], [rb_cv_gcc_function_alias],
+ [rb_cv_gcc_function_alias=no
+ for a in alias weak,alias; do
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[void foo(void) {}
+ void bar(void) __attribute__(($a("foo")));]], [[bar()]])],
+ [rb_cv_gcc_function_alias=$a; break])
+ done])
+ AS_IF([test "$rb_cv_gcc_function_alias" != no], [
+ AC_DEFINE(HAVE_ATTRIBUTE_FUNCTION_ALIAS)
+ AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args)],
+ [type prot __attribute__(($rb_cv_gcc_function_alias(@%:@name)));])
+ AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION_VOID(prot, name, args)],
+ [RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)])
+ ])
+])
+
+{
+ AC_CACHE_CHECK([for __atomic builtins], [rb_cv_gcc_atomic_builtins], [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[unsigned int atomic_var;]],
+ [[
+ __atomic_exchange_n(&atomic_var, 0, __ATOMIC_SEQ_CST);
+ __atomic_exchange_n(&atomic_var, 1, __ATOMIC_SEQ_CST);
+ __atomic_fetch_add(&atomic_var, 1, __ATOMIC_SEQ_CST);
+ __atomic_fetch_sub(&atomic_var, 1, __ATOMIC_SEQ_CST);
+ __atomic_or_fetch(&atomic_var, 1, __ATOMIC_SEQ_CST);
+ ]])],
+ [rb_cv_gcc_atomic_builtins=yes],
+ [rb_cv_gcc_atomic_builtins=no])])
+ AS_IF([test "$rb_cv_gcc_atomic_builtins" = yes], [
+ AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS)
+ for lib in "" atomic; do
+ AS_IF([test "$lib" != ""], [
+ AC_CHECK_LIB([atomic], [__atomic_fetch_add_8])
+ unset rb_cv_gcc_atomic_builtins_64
+ ])
+ AC_CACHE_CHECK([for 64bit __atomic builtins${lib:+ with -l$lib}],
+ [rb_cv_gcc_atomic_builtins_64], [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <stdint.h>
+ uint64_t atomic_var;]],
+ [[
+ __atomic_load_n(&atomic_var, __ATOMIC_RELAXED);
+ __atomic_store_n(&atomic_var, 0, __ATOMIC_RELAXED);
+ ]])],
+ [rb_cv_gcc_atomic_builtins_64=yes],
+ [rb_cv_gcc_atomic_builtins_64=no])])
+ AS_IF([test "$rb_cv_gcc_atomic_builtins_64" = yes], [
+ AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS_64)
+ break
+ ])
+ done
+ ])
+
+ AC_CACHE_CHECK([for __sync builtins], [rb_cv_gcc_sync_builtins], [
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[unsigned int atomic_var;]],
+ [[
+ __sync_lock_test_and_set(&atomic_var, 0);
+ __sync_lock_test_and_set(&atomic_var, 1);
+ __sync_fetch_and_add(&atomic_var, 1);
+ __sync_fetch_and_sub(&atomic_var, 1);
+ __sync_or_and_fetch(&atomic_var, 1);
+ __sync_val_compare_and_swap(&atomic_var, 0, 1);
+ ]])],
+ [rb_cv_gcc_sync_builtins=yes],
+ [rb_cv_gcc_sync_builtins=no])])
+ AS_IF([test "$rb_cv_gcc_sync_builtins" = yes], [
+ AC_DEFINE(HAVE_GCC_SYNC_BUILTINS)
+ ])
+
+ AC_CACHE_CHECK(for __builtin_unreachable, rb_cv_func___builtin_unreachable,
+ [RUBY_WERROR_FLAG(
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[volatile int zero;]],
+ [[if (zero) __builtin_unreachable();]])],
+ [rb_cv_func___builtin_unreachable=yes],
+ [rb_cv_func___builtin_unreachable=no])
+ ])
+ ])
+ AS_IF([test "$rb_cv_func___builtin_unreachable" = yes], [
+ AC_DEFINE(HAVE___BUILTIN_UNREACHABLE)
+ ])
+
+ AC_CACHE_CHECK(for __assume, rb_cv_func___assume,
+ [RUBY_WERROR_FLAG([
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
+ [[__assume(1);]])],
+ [rb_cv_func___assume=yes],
+ [rb_cv_func___assume=no])
+ ])
+ ])
+ AS_IF([test "$rb_cv_func___assume" = yes], [
+ AC_DEFINE(HAVE___ASSUME)
+ ])
+}
+
+AC_CACHE_CHECK(for exported function attribute, rb_cv_func_exported, [
+rb_cv_func_exported=no
+RUBY_WERROR_FLAG([
+for mac in '__declspec(dllexport)' '__attribute__ ((__visibility__("default")))'; do
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@define RUBY_FUNC_EXPORTED $mac extern
+ RUBY_FUNC_EXPORTED void conftest_attribute_check(void);]], [[]])],
+ [rb_cv_func_exported="$mac"; break])
+done
+])])
+AS_IF([test "$rb_cv_func_exported" != no], [
+ AC_DEFINE_UNQUOTED(RUBY_FUNC_EXPORTED, [$rb_cv_func_exported extern])
+])
+RUBY_DECL_ATTRIBUTE([__nonnull__(n)], [RUBY_FUNC_NONNULL(n,x)], [rb_cv_func_nonnull],
+ [], [function], [
+@%:@define x int conftest_attribute_check(void *p)
+@%:@define n 1
+])
+
+RUBY_APPEND_OPTION(XCFLAGS, -DRUBY_EXPORT)
+
+AC_CACHE_CHECK(for function name string predefined identifier,
+ rb_cv_function_name_string,
+ [AS_CASE(["$target_os"],[openbsd*],[
+ rb_cv_function_name_string=__func__
+ ],[
+ rb_cv_function_name_string=no
+ RUBY_WERROR_FLAG([
+ for func in __func__ __FUNCTION__; do
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <stdio.h>]],
+ [[puts($func);]])],
+ [rb_cv_function_name_string=$func
+ break])
+ done
+ ])
+ ])]
+)
+AS_IF([test "$rb_cv_function_name_string" != no], [
+ AC_DEFINE_UNQUOTED(RUBY_FUNCTION_NAME_STRING, [$rb_cv_function_name_string])
+])
+
+AC_CACHE_CHECK(if enum over int is allowed, rb_cv_enum_over_int, [
+ rb_cv_enum_over_int=no
+ AS_IF([test "x$ac_cv_type_long_long" = xyes], [
+ type="unsigned long long" max="ULLONG_MAX"
+ ], [
+ type="unsigned long" max="ULONG_MAX"
+ ])
+ RUBY_WERROR_FLAG([
+ AC_COMPILE_IFELSE([
+ AC_LANG_BOOL_COMPILE_TRY([
+ @%:@include <limits.h>
+ enum {conftest_max = $max};
+ ], [
+ (conftest_max == $max) &&
+ (sizeof(conftest_max) == sizeof($type))
+ ]
+ )],
+ [rb_cv_enum_over_int=yes],
+ [rb_cv_enum_over_int=no]
+ )
+ ])
+])
+AS_IF([test $rb_cv_enum_over_int = yes], [
+ AC_DEFINE(ENUM_OVER_INT, 1)
+])
+
+dnl Check whether we need to define sys_nerr locally
+AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default
+@%:@include <errno.h>])
+
+AC_CHECK_DECLS([getenv])
+
+AS_CASE(["$target_cpu"],
+[alpha*|sh4|sh4el|sh4eb], [AS_CASE(["$target_os"::"$GCC"],
+ [*::yes], # gcc
+ [CFLAGS="-mieee $CFLAGS"],
+ [osf*], # ccc
+ [CFLAGS="-ieee $CFLAGS"],
+ )],
+[sparc*], [AC_LIBOBJ([sparc])])
+
+ac_cv_header_net_socket_h=${ac_cv_header_net_socket_h=no}
+AS_IF([test "$ac_cv_header_net_socket_h" = yes], [
+ ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=no}
+], [
+ ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=yes}
+])
+
+
+AC_TYPE_SIZE_T
+RUBY_CHECK_SIGNEDNESS(size_t, [AC_MSG_ERROR(size_t is signed)], [],
+ [@%:@include <sys/types.h>])
+RUBY_CHECK_SIZEOF(size_t, [int long void*], [], [@%:@include <sys/types.h>])
+RUBY_CHECK_SIZEOF(ptrdiff_t, size_t, [], [@%:@include <stddef.h>])
+RUBY_CHECK_SIZEOF(dev_t)
+RUBY_CHECK_PRINTF_PREFIX(size_t, z)
+RUBY_CHECK_PRINTF_PREFIX(ptrdiff_t, t)
+AC_CHECK_MEMBERS([struct stat.st_blksize])
+AC_CHECK_MEMBERS([struct stat.st_blocks])
+AC_CHECK_MEMBERS([struct stat.st_rdev])
+RUBY_CHECK_SIZEOF([struct stat.st_size], [off_t int long "long long"], [], [@%:@include <sys/stat.h>])
+AS_IF([test "$ac_cv_member_struct_stat_st_blocks" = yes], [
+ RUBY_CHECK_SIZEOF([struct stat.st_blocks], [off_t int long "long long"], [], [@%:@include <sys/stat.h>])
+])
+RUBY_CHECK_SIZEOF([struct stat.st_ino], [long "long long"], [], [@%:@include <sys/stat.h>])
+RUBY_CHECK_SIZEOF([struct stat.st_dev], [dev_t int long "long long"], [], [@%:@include <sys/stat.h>])
+AS_IF([test "$ac_cv_member_struct_stat_st_rdev" = yes], [
+ RUBY_CHECK_SIZEOF([struct stat.st_rdev], [dev_t int long "long long"], [], [@%:@include <sys/stat.h>])
+])
+AC_CHECK_MEMBERS([struct stat.st_atim])
+AC_CHECK_MEMBERS([struct stat.st_atimespec])
+AC_CHECK_MEMBERS([struct stat.st_atimensec])
+AC_CHECK_MEMBERS([struct stat.st_mtim])
+AC_CHECK_MEMBERS([struct stat.st_mtimespec])
+AC_CHECK_MEMBERS([struct stat.st_mtimensec])
+AC_CHECK_MEMBERS([struct stat.st_ctim])
+AC_CHECK_MEMBERS([struct stat.st_ctimespec])
+AC_CHECK_MEMBERS([struct stat.st_ctimensec])
+AC_CHECK_MEMBERS([struct stat.st_birthtimespec])
+AS_IF([test "x$ac_cv_member_struct_stat_st_birthtimespec" != xyes],
+ [AC_CHECK_MEMBERS([struct statx.stx_btime])])
+
+AC_CHECK_TYPES([struct timeval], [], [], [@%:@ifdef HAVE_TIME_H
+@%:@include <time.h>
+@%:@endif
+@%:@ifdef HAVE_SYS_TIME_H
+@%:@include <sys/time.h>
+@%:@endif])
+
+AS_IF([test "${ac_cv_type_struct_timeval}" = yes], [
+ RUBY_CHECK_SIZEOF([struct timeval.tv_sec], [time_t long "long long"], [],
+ [@%:@ifdef HAVE_TIME_H
+@%:@include <time.h>
+@%:@endif
+@%:@ifdef HAVE_SYS_TIME_H
+@%:@include <sys/time.h>
+@%:@endif])
+ AS_CASE(${ac_cv_sizeof_struct_timeval_tv_sec},
+ [SIZEOF_INT], [t=int],
+ [SIZEOF_LONG], [t=long],
+ [SIZEOF_LONG_LONG], [t=LONG_LONG],
+ [t=])
+ AS_IF([test "${t}" != ""], [
+ AC_DEFINE_UNQUOTED(TYPEOF_TIMEVAL_TV_SEC, [$t])
+ ])
+])
+
+AC_CHECK_TYPES([struct timespec], [], [], [@%:@ifdef HAVE_TIME_H
+@%:@include <time.h>
+@%:@endif
+@%:@ifdef HAVE_SYS_TIME_H
+@%:@include <sys/time.h>
+@%:@endif])
+
+AC_CHECK_TYPES([struct timezone], [], [], [@%:@ifdef HAVE_TIME_H
+@%:@ include <time.h>
+@%:@endif
+@%:@ifdef HAVE_SYS_TIME_H
+@%:@ include <sys/time.h>
+@%:@endif])
+
+AC_CACHE_VAL([rb_cv_large_fd_select],
+ [AC_CHECK_TYPE(fd_mask, [rb_cv_large_fd_select=yes], [rb_cv_large_fd_select=no], [AC_INCLUDES_DEFAULT([])
+@%:@ifdef HAVE_SYS_SELECT_H
+@%:@ include <sys/select.h>
+@%:@endif])])
+AS_IF([test "$rb_cv_large_fd_select" = yes], [
+ AC_DEFINE(HAVE_RB_FD_INIT, 1)
+])
+
+RUBY_DEFINT(int8_t, 1)
+RUBY_DEFINT(uint8_t, 1, unsigned)
+RUBY_DEFINT(int16_t, 2)
+RUBY_DEFINT(uint16_t, 2, unsigned)
+RUBY_DEFINT(int32_t, 4)
+RUBY_DEFINT(uint32_t, 4, unsigned)
+RUBY_DEFINT(int64_t, 8)
+RUBY_DEFINT(uint64_t, 8, unsigned)
+RUBY_DEFINT(int128_t, 16)
+RUBY_DEFINT(uint128_t, 16, unsigned)
+RUBY_DEFINT(intptr_t, void*)
+RUBY_DEFINT(uintptr_t, void*, unsigned)
+AS_IF([test "x$rb_cv_type_intptr_t" != xno], [
+ RUBY_CHECK_PRINTF_PREFIX(intptr_t, '' ll I64 l, PTR)
+])
+RUBY_DEFINT(ssize_t, size_t, [], [@%:@include <sys/types.h>]) dnl may differ from int, so not use AC_TYPE_SSIZE_T.
+AS_IF([test "x$rb_cv_type_int64_t" != xno], [
+ RUBY_CHECK_PRINTF_PREFIX(int64_t, ll I64 l, 64)
+])
+
+AC_CACHE_CHECK(for stack end address, rb_cv_stack_end_address,
+[rb_cv_stack_end_address=no
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(
+ [[extern void *__libc_stack_end;]],
+ [[if (!__libc_stack_end) return 1;]])],
+ [rb_cv_stack_end_address="__libc_stack_end"])
+])
+AS_IF([test $rb_cv_stack_end_address != no], [
+ AC_DEFINE_UNQUOTED(STACK_END_ADDRESS, $rb_cv_stack_end_address)
+])
+
+dnl Checks for library functions.
+AC_TYPE_GETGROUPS
+AS_CASE(["${target_cpu}-${target_os}:${target_archs}"],
+[powerpc*-darwin*], [
+ AC_LIBSOURCES(alloca.c)
+ AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])
+ AC_DEFINE(C_ALLOCA)
+ AC_DEFINE_UNQUOTED(alloca, alloca)
+ ],
+[universal-darwin*:*ppc*], [
+ AC_LIBSOURCES(alloca.c)
+ AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])
+ RUBY_DEFINE_IF([defined __POWERPC__], C_ALLOCA, 1) # Darwin defines __POWERPC__ for ppc and ppc64 both
+ RUBY_DEFINE_IF([defined __POWERPC__], alloca, alloca)
+ ],
+[
+ AC_FUNC_ALLOCA
+ ])
+AS_IF([test "x$ALLOCA" = "x"], [
+ AC_CACHE_CHECK([for dynamic size alloca], rb_cv_dynamic_alloca, [
+ for chk in ok __chkstk; do
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ @%:@ifdef HAVE_ALLOCA_H
+ @%:@include <alloca.h>
+ @%:@endif
+ void $chk() {}
+ int dynamic_alloca_test;
+ int dynamic_alloca_result;]],
+ [[dynamic_alloca_result = alloca(dynamic_alloca_test) != 0;]])],
+ [rb_cv_dynamic_alloca=$chk; break])
+ done])
+ AS_IF([test "x$rb_cv_dynamic_alloca" = "x__chkstk"], [
+ AC_DEFINE_UNQUOTED(RUBY_ALLOCA_CHKSTK, _$rb_cv_dynamic_alloca)
+ AS_CASE("$target_cpu",
+ [x64|x86_64], [
+ AC_SUBST([ALLOCA], [\${LIBOBJDIR}x86_64-chkstk.${ac_objext}])
+ ],)
+ ])
+])
+AC_FUNC_MEMCMP
+
+AS_CASE(["$target_os"],[freebsd*],[
+ AC_DEFINE(BROKEN_CLOSE)
+ AC_REPLACE_FUNCS(close)
+ ])
+
+# dup and dup2 are always available except for WASI
+AS_CASE(["$target_os"],
+ [wasi*], [],
+ [
+ RUBY_REQUIRE_FUNCS(dup dup2)
+ ]
+)
+
+AC_REPLACE_FUNCS(acosh)
+AC_REPLACE_FUNCS(cbrt)
+AC_REPLACE_FUNCS(crypt)
+AC_REPLACE_FUNCS(erf)
+AC_REPLACE_FUNCS(explicit_bzero)
+AC_REPLACE_FUNCS(ffs)
+AC_REPLACE_FUNCS(flock)
+AC_REPLACE_FUNCS(hypot)
+AC_REPLACE_FUNCS(lgamma_r)
+AC_REPLACE_FUNCS(memmove)
+AC_REPLACE_FUNCS(nan)
+AC_REPLACE_FUNCS(nextafter)
+AC_REPLACE_FUNCS(setproctitle)
+AC_REPLACE_FUNCS(strchr)
+AC_REPLACE_FUNCS(strerror)
+AC_REPLACE_FUNCS(strlcat)
+AC_REPLACE_FUNCS(strlcpy)
+AC_REPLACE_FUNCS(strstr)
+AC_REPLACE_FUNCS(tgamma)
+
+AC_DEFINE(HAVE_ISFINITE) # C99; backward compatibility
+
+# for missing/setproctitle.c
+AS_CASE(["$target_os"],
+[aix* | k*bsd*-gnu | kopensolaris*-gnu | linux* | darwin*], [AC_DEFINE(SPT_TYPE,SPT_REUSEARGV)],
+[])
+AC_CHECK_HEADERS(sys/pstat.h)
+
+
+AC_DEFINE(HAVE_SIGNBIT) # C99; backward compatibility
+
+AC_FUNC_FORK
+
+AC_CHECK_FUNCS(__syscall)
+AC_CHECK_FUNCS(_longjmp) # used for AC_ARG_WITH(setjmp-type)
+# we don't use _setjmp if _longjmp doesn't exist.
+test x$ac_cv_func__longjmp = xno && ac_cv_func__setjmp=no
+AC_CHECK_FUNCS(arc4random_buf)
+AC_CHECK_FUNCS(atan2l atan2f)
+AC_CHECK_DECLS(atomic_signal_fence, [], [], [@%:@include <stdatomic.h>])
+AC_CHECK_FUNCS(chmod)
+AC_CHECK_FUNCS(chown)
+AC_CHECK_FUNCS(chroot)
+AC_CHECK_FUNCS(chsize)
+AC_CHECK_FUNCS(clock_gettime)
+AC_CHECK_FUNCS(copy_file_range)
+AC_CHECK_FUNCS(cosh)
+AC_CHECK_FUNCS(crypt_r)
+AC_CHECK_FUNCS(daemon)
+AC_CHECK_FUNCS(dirfd)
+AC_CHECK_FUNCS(dl_iterate_phdr)
+AC_CHECK_FUNCS(dlopen)
+AC_CHECK_FUNCS(dladdr)
+AC_CHECK_FUNCS(dup3)
+AC_CHECK_FUNCS(eaccess)
+AC_CHECK_FUNCS(endgrent)
+AC_CHECK_FUNCS(eventfd)
+AC_CHECK_FUNCS(execl)
+AC_CHECK_FUNCS(execle)
+AC_CHECK_FUNCS(execv)
+AC_CHECK_FUNCS(execve)
+AC_CHECK_FUNCS(explicit_memset)
+AC_CHECK_FUNCS(fcopyfile)
+AC_CHECK_FUNCS(fchdir)
+AC_CHECK_FUNCS(fchmod)
+AC_CHECK_FUNCS(fchown)
+AC_CHECK_FUNCS(fcntl)
+AC_CHECK_FUNCS(fdatasync)
+AC_CHECK_FUNCS(fdopendir)
+AC_CHECK_FUNCS(fgetattrlist)
+AC_CHECK_FUNCS(fmod)
+AC_CHECK_FUNCS(fstatat)
+AC_CHECK_FUNCS(fsync)
+AC_CHECK_FUNCS(ftruncate)
+AC_CHECK_FUNCS(ftruncate64) # used for Win32 platform
+AC_CHECK_FUNCS(getattrlist)
+AC_CHECK_FUNCS(getcwd)
+AC_CHECK_FUNCS(getegid)
+AC_CHECK_FUNCS(getentropy)
+AC_CHECK_FUNCS(geteuid)
+AC_CHECK_FUNCS(getgid)
+AC_CHECK_FUNCS(getgidx)
+AC_CHECK_FUNCS(getgrnam)
+AC_CHECK_FUNCS(getgrnam_r)
+AC_CHECK_FUNCS(getgroups)
+AC_CHECK_FUNCS(getlogin)
+AC_CHECK_FUNCS(getlogin_r)
+AC_CHECK_FUNCS(getpgid)
+AC_CHECK_FUNCS(getpgrp)
+AC_CHECK_FUNCS(getppid)
+AC_CHECK_FUNCS(getpriority)
+AC_CHECK_FUNCS(getpwnam)
+AC_CHECK_FUNCS(getpwnam_r)
+AC_CHECK_FUNCS(getpwuid)
+AC_CHECK_FUNCS(getpwuid_r)
+AC_CHECK_FUNCS(getrandom)
+AC_CHECK_FUNCS(getresgid)
+AC_CHECK_FUNCS(getresuid)
+AC_CHECK_FUNCS(getrlimit)
+AC_CHECK_FUNCS(getsid)
+AC_CHECK_FUNCS(gettimeofday) # for making ac_cv_func_gettimeofday
+AC_CHECK_FUNCS(getuid)
+AC_CHECK_FUNCS(getuidx)
+AC_CHECK_FUNCS(gmtime_r)
+AC_CHECK_FUNCS(initgroups)
+AC_CHECK_FUNCS(ioctl)
+AC_CHECK_FUNCS(isfinite)
+AC_CHECK_FUNCS(issetugid)
+AC_CHECK_FUNCS(kill)
+AC_CHECK_FUNCS(killpg)
+AC_CHECK_FUNCS(lchmod)
+AC_CHECK_FUNCS(lchown)
+AC_CHECK_FUNCS(link)
+AC_CHECK_FUNCS(llabs)
+AC_CHECK_FUNCS(lockf)
+AC_CHECK_FUNCS(log2)
+AC_CHECK_FUNCS(lstat)
+AC_CHECK_FUNCS(lutimes)
+AC_CHECK_FUNCS(malloc_usable_size)
+AC_CHECK_FUNCS(malloc_size)
+AC_CHECK_FUNCS(malloc_trim)
+AC_CHECK_FUNCS(mblen)
+AC_CHECK_FUNCS(memalign)
+AC_CHECK_FUNCS(memset_s)
+AC_CHECK_FUNCS(writev)
+AC_CHECK_FUNCS(memrchr)
+AC_CHECK_FUNCS(memmem)
+AC_CHECK_FUNCS(mkfifo)
+AC_CHECK_FUNCS(mknod)
+AC_CHECK_FUNCS(mktime)
+AC_CHECK_FUNCS(mmap)
+AC_CHECK_FUNCS(mremap)
+AC_CHECK_FUNCS(openat)
+AC_CHECK_FUNCS(pclose)
+AC_CHECK_FUNCS(pipe)
+AC_CHECK_FUNCS(pipe2)
+AC_CHECK_FUNCS(poll)
+AC_CHECK_FUNCS(popen)
+AC_CHECK_FUNCS(posix_fadvise)
+AC_CHECK_FUNCS(posix_madvise)
+AC_CHECK_FUNCS(posix_memalign)
+AC_CHECK_FUNCS(ppoll)
+AC_CHECK_FUNCS(pread)
+AC_CHECK_FUNCS(pwrite)
+AC_CHECK_FUNCS(qsort_r)
+AC_CHECK_FUNCS(qsort_s)
+AC_CHECK_FUNCS(readlink)
+AC_CHECK_FUNCS(realpath)
+AC_CHECK_FUNCS(round)
+AC_CHECK_FUNCS(sched_getaffinity)
+AC_CHECK_FUNCS(seekdir)
+AC_CHECK_FUNCS(select_large_fdset)
+AC_CHECK_FUNCS(sendfile)
+AC_CHECK_FUNCS(setegid)
+AC_CHECK_FUNCS(setenv)
+AC_CHECK_FUNCS(seteuid)
+AC_CHECK_FUNCS(setgid)
+AC_CHECK_FUNCS(setgroups)
+AC_CHECK_FUNCS(setpgid)
+AC_CHECK_FUNCS(setpgrp)
+AC_CHECK_FUNCS(setregid)
+AC_CHECK_FUNCS(setresgid)
+AC_CHECK_FUNCS(setresuid)
+AC_CHECK_FUNCS(setreuid)
+AC_CHECK_FUNCS(setrgid)
+AC_CHECK_FUNCS(setrlimit)
+AC_CHECK_FUNCS(setruid)
+AC_CHECK_FUNCS(setsid)
+AC_CHECK_FUNCS(setuid)
+AC_CHECK_FUNCS(shutdown)
+AC_CHECK_FUNCS(sigaction)
+AC_CHECK_FUNCS(sigaltstack)
+AC_CHECK_FUNCS(sigprocmask)
+AC_CHECK_FUNCS(sinh)
+AC_CHECK_FUNCS(snprintf)
+AC_CHECK_FUNCS(spawnv)
+AC_CHECK_FUNCS(symlink)
+AC_CHECK_FUNCS(syscall)
+AC_CHECK_FUNCS(sysconf)
+AC_CHECK_FUNCS(system)
+AC_CHECK_FUNCS(tanh)
+AC_CHECK_FUNCS(telldir)
+AC_CHECK_FUNCS(timegm)
+AC_CHECK_FUNCS(times)
+AC_CHECK_FUNCS(truncate)
+AC_CHECK_FUNCS(truncate64) # used for Win32
+AC_CHECK_FUNCS(tzset)
+AC_CHECK_FUNCS(umask)
+AC_CHECK_FUNCS(unsetenv)
+AC_CHECK_FUNCS(utimensat)
+AC_CHECK_FUNCS(utimes)
+AC_CHECK_FUNCS(wait4)
+AC_CHECK_FUNCS(waitpid)
+AC_CHECK_FUNCS(__cospi)
+AC_CHECK_FUNCS(__sinpi)
+
+AS_IF([test "x$ac_cv_member_struct_statx_stx_btime" = xyes],
+ [AC_CHECK_FUNCS(statx)])
+
+AS_IF([test "$ac_cv_func_getcwd" = yes], [
+ AC_CACHE_CHECK(if getcwd allocates buffer if NULL is given, [rb_cv_getcwd_malloc],
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+@%:@include <stddef.h>
+@%:@include <stdio.h>
+@%:@ifdef HAVE_UNISTD_H
+@%:@include <unistd.h>
+@%:@endif
+@%:@ifndef EXIT_SUCCESS
+@%:@define EXIT_SUCCESS 0
+@%:@endif
+@%:@ifndef EXIT_FAILURE
+@%:@define EXIT_FAILURE 1
+@%:@endif
+
+int
+main(int argc, char **argv)
+{
+ if (!getcwd(NULL, 0)) return EXIT_FAILURE;
+ return EXIT_SUCCESS;
+}
+]])],
+ rb_cv_getcwd_malloc=yes,
+ rb_cv_getcwd_malloc=no,
+ AS_CASE($target_os,
+ [linux*|darwin*|*bsd|cygwin*|msys*|mingw*|mswin*],
+ [rb_cv_getcwd_malloc=yes],
+ [rb_cv_getcwd_malloc=no]))])
+ AS_IF([test "$rb_cv_getcwd_malloc" = no], [AC_DEFINE(NO_GETCWD_MALLOC, 1)])
+])
+
+AS_IF([test "$ac_cv_func_crypt_r" = yes],
+ [AC_CHECK_HEADERS(crypt.h)])
+AS_IF([test "$ac_cv_func_crypt_r:$ac_cv_header_crypt_h" = yes:yes],
+ [AC_CHECK_MEMBERS([struct crypt_data.initialized], [], [],
+ [AC_INCLUDES_DEFAULT([@%:@include <crypt.h>])])])
+
+RUBY_CHECK_BUILTIN_FUNC(__builtin_alloca_with_align, [__builtin_alloca_with_align(1, 4096)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_assume_aligned, [__builtin_assume_aligned((void*)32, 32)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_bswap16, [__builtin_bswap16(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_bswap32, [__builtin_bswap32(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_bswap64, [__builtin_bswap64(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_popcount, [__builtin_popcount(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_popcountll, [__builtin_popcountll(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_clz, [__builtin_clz(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_clzl, [__builtin_clzl(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_clzll, [__builtin_clzll(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_ctz, [__builtin_ctz(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_ctzll, [__builtin_ctzll(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_constant_p, [__builtin_constant_p(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_choose_expr, [
+ [int x[__extension__(__builtin_choose_expr(1, 1, -1))]];
+ [int y[__extension__(__builtin_choose_expr(0, -1, 1))]];
+ ])
+AS_IF([test x$rb_cv_builtin___builtin_choose_expr = xyes], [
+ RUBY_CHECK_BUILTIN_FUNC(__builtin_choose_expr_constant_p, [
+ [int x[__extension__(__builtin_choose_expr(__builtin_constant_p(1), 1, -1))]];
+ [int y[__extension__(__builtin_choose_expr(__builtin_constant_p(foo), -1, 1))]];
+ ])
+])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_types_compatible_p, [__builtin_types_compatible_p(int, int)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_trap, [__builtin_trap()])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_expect, [__builtin_expect(0, 0)])
+
+RUBY_CHECK_BUILTIN_OVERFLOW(add)
+RUBY_CHECK_BUILTIN_OVERFLOW(sub)
+RUBY_CHECK_BUILTIN_OVERFLOW(mul)
+
+AS_IF([test "$ac_cv_func_qsort_r" != no], [
+ AC_CACHE_CHECK(whether qsort_r is GNU version, rb_cv_gnu_qsort_r,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+@%:@include <stdlib.h>
+void (qsort_r)(void *base, size_t nmemb, size_t size,
+ int (*compar)(const void *, const void *, void *),
+ void *arg);
+]], [[ ]])],
+ [rb_cv_gnu_qsort_r=yes],
+ [rb_cv_gnu_qsort_r=no])
+ ])
+ AC_CACHE_CHECK(whether qsort_r is BSD version, rb_cv_bsd_qsort_r,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+@%:@include <stdlib.h>
+void (qsort_r)(void *base, size_t nmemb, size_t size,
+ void *arg, int (*compar)(void *, const void *, const void *));
+]], [[ ]])],
+ [rb_cv_bsd_qsort_r=yes],
+ [rb_cv_bsd_qsort_r=no])
+ ])
+ AS_CASE("$rb_cv_gnu_qsort_r:$rb_cv_bsd_qsort_r",
+ [yes:no], [
+ AC_DEFINE(HAVE_GNU_QSORT_R, 1)
+ ],
+ [no:yes], [
+ AC_DEFINE(HAVE_BSD_QSORT_R, 1)
+ ])
+])
+
+AC_CACHE_CHECK(whether atan2 handles Inf as C99, rb_cv_atan2_inf_c99, [
+ AS_IF([test $ac_cv_func_atan2f:$ac_cv_func_atan2l = yes:yes], [
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
+@%:@include <math.h>
+@%:@ifdef HAVE_UNISTD_H
+@%:@include <unistd.h>
+@%:@endif
+@%:@ifndef EXIT_SUCCESS
+@%:@define EXIT_SUCCESS 0
+@%:@endif
+@%:@ifndef EXIT_FAILURE
+@%:@define EXIT_FAILURE 1
+@%:@endif
+
+int
+main(int argc, char **argv)
+{
+ if (fabs(atan2(INFINITY, INFINITY) - M_PI_4) <= 0.01) return EXIT_SUCCESS;
+ return EXIT_FAILURE;
+}
+]])],
+ [rb_cv_atan2_inf_c99=yes],
+ [rb_cv_atan2_inf_c99=no],
+ [AS_CASE($target_os, [mingw*|mswin*], [rb_cv_atan2_inf_c99=no], [rb_cv_atan2_inf_c99=yes])]
+ )
+ ], [rb_cv_atan2_inf_c99=no])
+])
+AS_IF([test "x$rb_cv_atan2_inf_c99" = xyes], [AC_DEFINE(ATAN2_INF_C99)])
+
+# Some platform need -lrt for clock_gettime, but the other don't.
+AS_IF([test x"$ac_cv_func_clock_gettime" != xyes], [
+ # glibc 2.17 moves clock_* functions from librt to the main C library.
+ # https://sourceware.org/legacy-ml/libc-announce/2012/msg00001.html
+ AC_CHECK_LIB(rt, clock_gettime)
+ AS_IF([test x"$ac_cv_lib_rt_clock_gettime" = xyes], [
+ AC_DEFINE(HAVE_CLOCK_GETTIME, 1)
+ ])
+])
+AC_CHECK_FUNCS(clock_getres) # clock_getres should be tested after clock_gettime test including librt test.
+AC_CHECK_LIB([rt], [timer_create])
+AC_CHECK_LIB([rt], [timer_settime])
+AS_IF([test x"$ac_cv_lib_rt_timer_create" = xyes], [
+ AC_DEFINE(HAVE_TIMER_CREATE, 1)
+])
+AS_IF([test x"$ac_cv_lib_rt_timer_settime" = xyes], [
+ AC_DEFINE(HAVE_TIMER_SETTIME, 1)
+])
+
+AC_CACHE_CHECK(for unsetenv returns a value, rb_cv_unsetenv_return_value,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <stdlib.h>
+]], [[int v = unsetenv("foo");]])],
+ rb_cv_unsetenv_return_value=yes,
+ rb_cv_unsetenv_return_value=no)])
+AS_IF([test "$rb_cv_unsetenv_return_value" = no], [
+ AC_DEFINE(VOID_UNSETENV)
+])
+
+# End of setjmp check.
+
+AC_ARG_ENABLE(setreuid,
+ AS_HELP_STRING([--enable-setreuid], [use setreuid()/setregid() according to need even if obsolete]),
+ [use_setreuid=$enableval])
+AS_IF([test "$use_setreuid" = yes], [
+ AC_DEFINE(USE_SETREUID)
+ AC_DEFINE(USE_SETREGID)
+])
+AC_STRUCT_TIMEZONE
+AC_CACHE_CHECK(for struct tm.tm_gmtoff, rb_cv_member_struct_tm_tm_gmtoff,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+@%:@define _BSD_SOURCE
+@%:@define _DEFAULT_SOURCE
+@%:@include <time.h>
+ ]],
+ [[struct tm t; t.tm_gmtoff = 3600;]])],
+ [rb_cv_member_struct_tm_tm_gmtoff=yes],
+ [rb_cv_member_struct_tm_tm_gmtoff=no])])
+AS_IF([test "$rb_cv_member_struct_tm_tm_gmtoff" = yes], [
+ AC_DEFINE(HAVE_STRUCT_TM_TM_GMTOFF)
+])
+AC_CACHE_CHECK(for external int daylight, rb_cv_have_daylight,
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <time.h>
+ int i;]],
+ [[i = daylight;]])],
+ rb_cv_have_daylight=yes,
+ rb_cv_have_daylight=no)])
+AS_IF([test "$rb_cv_have_daylight" = yes], [
+ AC_DEFINE(HAVE_DAYLIGHT)
+])
+
+AC_CACHE_CHECK(for negative time_t for gmtime(3), rb_cv_negative_time_t,
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <stdlib.h>
+#include <time.h>
+
+void
+check(tm, y, m, d, h, s)
+ struct tm *tm;
+ int y, m, d, h, s;
+{
+ if (!tm ||
+ tm->tm_year != y ||
+ tm->tm_mon != m-1 ||
+ tm->tm_mday != d ||
+ tm->tm_hour != h ||
+ tm->tm_sec != s) {
+ exit(1);
+ }
+}
+
+int
+main()
+{
+ time_t t = -1;
+ struct tm *tm;
+
+ check(gmtime(&t), 69, 12, 31, 23, 59);
+ t = ~(time_t)0 << 31;
+ check(gmtime(&t), 1, 12, 13, 20, 52);
+ return 0;
+}
+]])],
+ rb_cv_negative_time_t=yes,
+ rb_cv_negative_time_t=no,
+ rb_cv_negative_time_t=yes)])
+AS_IF([test "$rb_cv_negative_time_t" = yes], [
+ AC_DEFINE(NEGATIVE_TIME_T)
+])
+
+# [ruby-dev:40910] overflow of time on FreeBSD
+# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=145341
+AC_CACHE_CHECK(for localtime(3) overflow correctly, rb_cv_localtime_overflow,
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <stdlib.h>
+#include <time.h>
+
+void
+check(time_t t1)
+{
+ struct tm *tm;
+ time_t t2;
+ tm = localtime(&t1);
+ if (!tm)
+ return; /* overflow detected. ok. */
+ t2 = mktime(tm);
+ if (t1 == t2)
+ return; /* round-trip. ok. */
+ exit(1);
+}
+
+int
+main()
+{
+ time_t t;
+ if (~(time_t)0 <= 0) {
+ t = (((time_t)1) << (sizeof(time_t) * 8 - 2));
+ t |= t - 1;
+ }
+ else {
+ t = ~(time_t)0;
+ }
+ check(t);
+ return 0;
+}
+]])],
+ rb_cv_localtime_overflow=yes,
+ rb_cv_localtime_overflow=no,
+ rb_cv_localtime_overflow=no)])
+AS_IF([test "$rb_cv_localtime_overflow" = no], [
+ AC_DEFINE(LOCALTIME_OVERFLOW_PROBLEM)
+])
+
+AS_IF([test "$ac_cv_func_sigprocmask" = yes && test "$ac_cv_func_sigaction" = yes], [
+ AC_DEFINE(POSIX_SIGNAL)
+], [
+ AC_CHECK_FUNCS(sigsetmask)
+ AC_CACHE_CHECK(for BSD signal semantics, rb_cv_bsd_signal,
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <signal.h>
+
+void
+sig_handler(dummy)
+ int dummy;
+{
+}
+
+int
+main()
+{
+ signal(SIGINT, sig_handler);
+ kill(getpid(), SIGINT);
+ kill(getpid(), SIGINT);
+ return 0;
+}
+]])],
+ rb_cv_bsd_signal=yes,
+ rb_cv_bsd_signal=no,
+ rb_cv_bsd_signal=$ac_cv_func_sigsetmask)])
+ AS_IF([test "$rb_cv_bsd_signal" = yes], [
+ AC_DEFINE(BSD_SIGNAL)
+ ])
+])
+
+AC_CHECK_TYPES([sig_t],[],[],[@%:@include <signal.h>])
+
+AS_IF([test "$ac_cv_func_getpgid" = no], [
+ # AC_FUNC_GETPGRP fails when cross-compiling with old autoconf.
+ # autoconf is changed between 2.52d and 2.52f?
+ # https://lists.gnu.org/archive/html/bug-gnu-utils/2001-09/msg00181.html
+ # "autoconf cleanup for AC_FUNC_GETPGRP and GETPGRP_VOID"
+AC_FUNC_GETPGRP
+])
+AS_IF([test "$ac_cv_func_setpgid:$ac_cv_func_setpgrp" = no:yes], [
+ # AC_FUNC_SETPGRP fails when cross-compiling. (until autoconf 2.69?)
+ # https://lists.gnu.org/archive/html/bug-autoconf/2013-02/msg00002.html
+ # "AC_FUNC_SETPGRP fails to work properly when cross-compiling"
+AC_FUNC_SETPGRP
+])
+
+AS_IF([test x"$ac_cv_func_dirfd" = xno], [
+ AS_CASE(["$target_os"],[solaris*],
+ [AC_CHECK_MEMBERS([DIR.d_fd, DIR.dd_fd],,,[
+#include <sys/types.h>
+#include <dirent.h>
+])])
+])
+
+AC_CACHE_CHECK(whether right shift preserve sign bit, rb_cv_rshift_sign,
+ [AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([], [(-1==(-1>>1))])],
+ rb_cv_rshift_sign=yes,
+ rb_cv_rshift_sign=no)])
+AS_IF([test "$rb_cv_rshift_sign" = yes], [
+ AC_DEFINE(RSHIFT(x,y), ((x)>>(int)(y)))
+], [
+ AC_DEFINE(RSHIFT(x,y), (((x)<0) ? ~((~(x))>>(int)(y)) : (x)>>(int)(y)))
+])
+
+AS_IF([test "$ac_cv_func_copy_file_range" = no], [
+ AC_CACHE_CHECK([for copy_file_range],
+ rb_cv_use_copy_file_range,
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#ifndef O_TMPFILE
+ #define O_TMPFILE __O_TMPFILE
+#endif
+
+int
+main()
+{
+#ifdef __NR_copy_file_range
+ int ret, fd_in, fd_out;
+ fd_in = open("/tmp", O_TMPFILE|O_RDWR, S_IRUSR);
+ fd_out = open("/tmp", O_TMPFILE|O_WRONLY, S_IWUSR);
+ ret = syscall(__NR_copy_file_range, fd_in, NULL, fd_out, NULL, 0, 0);
+ close(fd_in);
+ close(fd_out);
+ if (ret == -1) { return 1; }
+ return 0;
+#else
+ return 1;
+#endif
+}
+ ]])],
+ [rb_cv_use_copy_file_range=yes],
+ [rb_cv_use_copy_file_range=no],
+ [rb_cv_use_copy_file_range=no])])
+])
+AS_CASE(["$ac_cv_func_copy_file_range:$rb_cv_use_copy_file_range"], [*yes*], [
+ AC_DEFINE(USE_COPY_FILE_RANGE)
+])
+
+AS_CASE(["$ac_cv_func_gettimeofday:$ac_cv_func_clock_gettime"],
+[*yes*], [],
+[
+ AC_MSG_ERROR(clock_gettime() or gettimeofday() must exist)
+])
+
+AS_IF([test "$ac_cv_func_sysconf" = yes], [
+ RUBY_CHECK_SYSCONF(CLK_TCK)
+])
+
+AS_IF([test "${universal_binary-no}" = yes ], [
+ archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
+ save_CFLAGS="$CFLAGS" new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'`
+ save_LDFLAGS="$LDFLAGS" new_ldflags=`echo "$LDFLAGS" | sed "s|$archflagpat"'||'`
+ stack_dir=
+ for archs in ${universal_archnames}; do
+ archs=`echo $archs | sed 's/=.*//'`
+ CFLAGS="$new_cflags -arch $archs"
+ LDFLAGS="$new_ldflags -arch $archs"
+ RUBY_STACK_GROW_DIRECTION($archs, dir)
+ AS_IF([test x$stack_dir = x], [
+ stack_dir=$dir
+ ], [test x$stack_dir != x$dir], [
+ stack_dir=no
+ ])
+ done
+ CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS"
+ AS_IF([test x$stack_dir = xno], [
+ for archs in ${universal_archnames}; do
+ archs=`echo $archs | sed 's/=.*//'`
+ eval dir=\$[rb_cv_stack_grow_dir_]AS_TR_SH([$archs])
+ RUBY_DEFINE_IF([defined __${archs}__], STACK_GROW_DIRECTION, $dir)
+ done
+ ], [
+ AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $stack_dir)
+ ])
+], [
+ RUBY_STACK_GROW_DIRECTION($target_cpu, dir)
+ AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $dir)
+])
+
+AC_ARG_WITH(coroutine,
+ AS_HELP_STRING([--with-coroutine=IMPLEMENTATION], [specify the coroutine implementation to use]),
+ [coroutine_type=$withval], [coroutine_type=])
+AS_CASE([$coroutine_type], [yes|''], [
+ coroutine_type=
+ AS_CASE(["$target_cpu-$target_os"],
+ [universal-darwin*], [
+ coroutine_type=universal
+ ],
+ [x*64-darwin*], [
+ coroutine_type=amd64
+ ],
+ [arm64-darwin*], [
+ coroutine_type=arm64
+ ],
+ # Correct target name is powerpc*-, but Ruby seems to prefer ppc*-.
+ # Notice that Darwin PPC ABI differs from AIX and ELF.
+ # Adding PPC targets for AIX, *BSD and *Linux will require separate implementations.
+ [powerpc-darwin*|ppc-darwin*], [
+ coroutine_type=ppc
+ ],
+ [powerpc64-darwin*|ppc64-darwin*], [
+ coroutine_type=ppc64
+ ],
+ [x*64-linux*], [
+ AS_CASE(["$ac_cv_sizeof_voidp"],
+ [8], [ coroutine_type=amd64 ],
+ [4], [ coroutine_type=x86 ],
+ dnl unknown pointer size, bail out as no Context.h soon.
+ )
+ ],
+ [*86-linux*], [
+ coroutine_type=x86
+ ],
+ [x64-mingw*], [
+ coroutine_type=win64
+ ],
+ [*86-mingw*], [
+ coroutine_type=win32
+ ],
+ [aarch64-mingw*], [
+ coroutine_type=arm64
+ ],
+ [arm*-linux*], [
+ coroutine_type=arm32
+ ],
+ [aarch64-linux*], [
+ coroutine_type=arm64
+ ],
+ [powerpc64le-linux*], [
+ coroutine_type=ppc64le
+ ],
+ [riscv64-linux*], [
+ coroutine_type=riscv64
+ ],
+ [loongarch64-linux*], [
+ coroutine_type=loongarch64
+ ],
+ [x86_64-freebsd*], [
+ coroutine_type=amd64
+ ],
+ [i386-freebsd*], [
+ coroutine_type=x86
+ ],
+ [aarch64-freebsd*], [
+ coroutine_type=arm64
+ ],
+ [powerpc64-freebsd*], [
+ coroutine_type=ppc64le
+ ],
+ [powerpc64le-freebsd*], [
+ coroutine_type=ppc64le
+ ],
+ [x86_64-netbsd*], [
+ coroutine_type=amd64
+ ],
+ [i386-netbsd*], [
+ coroutine_type=x86
+ ],
+ [aarch64-netbsd*], [
+ coroutine_type=arm64
+ ],
+ [x86_64-openbsd*], [
+ coroutine_type=amd64
+ ],
+ [i386-openbsd*], [
+ coroutine_type=x86
+ ],
+ [aarch64-openbsd*], [
+ coroutine_type=arm64
+ ],
+ [riscv64-openbsd*], [
+ coroutine_type=riscv64
+ ],
+ [*-openbsd*], [
+ coroutine_type=pthread
+ ],
+ [x86_64-dragonfly*], [
+ coroutine_type=amd64
+ ],
+ [*-haiku*], [
+ coroutine_type=pthread
+ ],
+ [*-emscripten*], [
+ coroutine_type=emscripten
+ ],
+ [*-wasi*], [
+ coroutine_type=asyncify
+ ],
+ [
+ AC_CHECK_FUNCS([getcontext swapcontext makecontext],
+ [coroutine_type=ucontext],
+ [coroutine_type=pthread; break]
+ )
+ ]
+ )
+ AC_MSG_CHECKING(native coroutine implementation for ${target_cpu}-${target_os})
+ AC_MSG_RESULT(${coroutine_type})
+])
+COROUTINE_H=coroutine/$coroutine_type/Context.h
+AS_IF([test ! -f "$srcdir/$COROUTINE_H"],
+ [AC_MSG_ERROR('$coroutine_type' is not supported as coroutine)])
+COROUTINE_SRC=coroutine/$coroutine_type/Context.c
+AS_IF([test ! -f "$srcdir/$COROUTINE_SRC"],
+ [COROUTINE_SRC=coroutine/$coroutine_type/Context.'$(ASMEXT)'])
+AC_DEFINE_UNQUOTED(COROUTINE_H, ["$COROUTINE_H"])
+AC_SUBST(X_COROUTINE_H, [$COROUTINE_H])
+AC_SUBST(X_COROUTINE_SRC, [$COROUTINE_SRC])
+
+AS_IF([test "$THREAD_MODEL" = pthread], [
+ AC_CACHE_CHECK([whether pthread_t is scalar type], [rb_cv_scalar_pthread_t], [
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@include <pthread.h>
+ ]], [[
+ pthread_t thread_id;
+ thread_id = 0;
+ if (!thread_id) return 0;
+ ]])],[rb_cv_scalar_pthread_t=yes],[rb_cv_scalar_pthread_t=no])
+ ])
+ AS_IF([test x"$rb_cv_scalar_pthread_t" = xyes], [
+ : # RUBY_CHECK_SIZEOF(pthread_t, [void* int long], [], [@%:@include <pthread.h>])
+ ], [
+ AC_DEFINE(NON_SCALAR_THREAD_ID)
+ ])
+ AC_CHECK_FUNCS(sched_yield pthread_attr_setinheritsched \
+ pthread_attr_get_np pthread_attr_getstack pthread_attr_getguardsize \
+ pthread_get_stackaddr_np pthread_get_stacksize_np \
+ thr_stksegment pthread_stackseg_np pthread_getthrds_np \
+ pthread_condattr_setclock \
+ pthread_setname_np pthread_set_name_np)
+ AS_CASE(["$target_os"],[emscripten*],[ac_cv_func_pthread_sigmask=no],[AC_CHECK_FUNCS(pthread_sigmask)])
+ AS_CASE(["$target_os"],[aix*],[ac_cv_func_pthread_getattr_np=no],[AC_CHECK_FUNCS(pthread_getattr_np)])
+ set_current_thread_name=
+ AS_IF([test "$ac_cv_func_pthread_setname_np" = yes], [
+ AC_CACHE_CHECK([arguments of pthread_setname_np], [rb_cv_func_pthread_setname_np_arguments],
+ [rb_cv_func_pthread_setname_np_arguments=
+ # Linux,AIX, (pthread_self(), name)
+ # NetBSD (pthread_self(), \"%s\", name)
+ # Darwin (name)
+ for mac in \
+ "(pthread_self(), name)" \
+ "(pthread_self(), \"%s\", name)" \
+ "(name)" \
+ ; do
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@include <pthread.h>
+ @%:@ifdef HAVE_PTHREAD_NP_H
+ @%:@include <pthread_np.h>
+ @%:@endif
+ @%:@define SET_THREAD_NAME(name) pthread_setname_np${mac}
+ ]],
+ [[if (SET_THREAD_NAME("conftest")) return 1;]])],
+ [rb_cv_func_pthread_setname_np_arguments="${mac}"
+ break])
+ done
+ ]
+ )
+ AS_IF([test -n "${rb_cv_func_pthread_setname_np_arguments}"], [
+ set_current_thread_name="pthread_setname_np${rb_cv_func_pthread_setname_np_arguments}"
+ ])
+ ], [test "$ac_cv_func_pthread_set_name_np" = yes], [
+ set_current_thread_name="pthread_set_name_np(pthread_self(), name)"
+ ])
+ AS_IF([test -n "$set_current_thread_name"], [
+ AC_DEFINE_UNQUOTED(SET_CURRENT_THREAD_NAME(name), $set_current_thread_name)
+ AS_CASE([$set_current_thread_name],
+ [*'pthread_self()'*], [
+ set_another_thread_name=`echo "$set_current_thread_name" | sed 's/pthread_self()/thid/'`
+ AC_DEFINE_UNQUOTED(SET_ANOTHER_THREAD_NAME(thid,name), $set_another_thread_name)
+ ])
+ ])
+
+ AC_CACHE_CHECK([for thread-local storage specifier], [rb_cv_tls_specifier],
+ rb_cv_tls_specifier=none
+ RUBY_WERROR_FLAG([
+ for attr in \
+ _Thread_local \
+ __thread \
+ ; do
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[$attr int conftest;]])],
+ [rb_cv_tls_specifier=$attr; break])
+ done
+ ])
+ )
+ AS_IF([test x"${rb_cv_tls_specifier}" != xnone],
+ [AC_DEFINE_UNQUOTED(RB_THREAD_LOCAL_SPECIFIER, ${rb_cv_tls_specifier})]
+ )
+])
+
+AS_IF([test x"$ac_cv_header_ucontext_h" = xno], [
+ AC_CACHE_CHECK([if signal.h defines ucontext_t], [rb_cv_ucontext_in_signal_h],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <signal.h>]],
+ [[size_t size = sizeof(ucontext_t);]])],
+ [rb_cv_ucontext_in_signal_h=yes], [rb_cv_ucontext_in_signal_h=no])])
+ AS_IF([test x"$rb_cv_ucontext_in_signal_h" = xyes], [
+ AC_DEFINE_UNQUOTED(UCONTEXT_IN_SIGNAL_H, 1)
+ ])
+])
+AS_IF([test x"$ac_cv_header_ucontext_h" = xyes -o x"$rb_cv_ucontext_in_signal_h" = xyes], [
+ AC_CACHE_CHECK([if mcontext_t is a pointer], [rb_cv_mcontext_t_ptr],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@include <signal.h>
+ @%:@ifdef HAVE_UCONTEXT_H
+ @%:@include <ucontext.h>
+ @%:@endif
+ mcontext_t test(mcontext_t mc) {return mc+1;}
+ ]],
+ [[test(0);]])],
+ [rb_cv_mcontext_t_ptr=yes], [rb_cv_mcontext_t_ptr=no])])
+ AS_IF([test x"$rb_cv_mcontext_t_ptr" = xyes], [
+ AC_DEFINE_UNQUOTED(DEFINE_MCONTEXT_PTR(mc, uc), mcontext_t mc = (uc)->uc_mcontext)
+ ], [
+ AC_DEFINE_UNQUOTED(DEFINE_MCONTEXT_PTR(mc, uc), mcontext_t *mc = &(uc)->uc_mcontext)
+ ])
+ AS_IF([test x"$THREAD_MODEL" = xpthread], [
+ AC_CHECK_FUNCS(getcontext setcontext)
+ ])
+])
+
+AS_IF([test "$ac_cv_func_fork_works" = "yes" -a x"$THREAD_MODEL" = xpthread], [
+ AC_CACHE_CHECK([if fork works with pthread], rb_cv_fork_with_pthread,
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <stdlib.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <signal.h>
+#ifndef EXIT_SUCCESS
+#define EXIT_SUCCESS 0
+#endif
+#ifndef EXIT_FAILURE
+#define EXIT_FAILURE 1
+#endif
+
+void *
+thread_func(void *dmy)
+{
+ return dmy;
+}
+
+int
+use_threads(void)
+{
+ pthread_t tid;
+ if (pthread_create(&tid, 0, thread_func, 0) != 0) {
+ return -1;
+ }
+ if (pthread_join(tid, 0) != 0) {
+ return -1;
+ }
+ return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+ pid_t pid;
+ if (use_threads()) return EXIT_FAILURE;
+ pid = fork();
+
+ if (pid) {
+ int loc;
+ sleep(1);
+ if (waitpid(pid, &loc, WNOHANG) == 0) {
+ kill(pid, SIGKILL);
+ return EXIT_FAILURE;
+ }
+ if (!WIFEXITED(loc) || WEXITSTATUS(loc) != EXIT_SUCCESS)
+ return EXIT_FAILURE;
+ }
+ else {
+ if (use_threads()) return EXIT_FAILURE;
+ }
+
+ return EXIT_SUCCESS;
+}]])],
+ rb_cv_fork_with_pthread=yes,
+ rb_cv_fork_with_pthread=no,
+ rb_cv_fork_with_pthread=yes)])
+ test x$rb_cv_fork_with_pthread = xyes || AC_DEFINE(CANNOT_FORK_WITH_PTHREAD)
+])
+
+AC_CHECK_HEADERS([sys/user.h])
+AS_IF([test "x$ac_cv_func_mmap" = xyes], [
+ AC_CACHE_CHECK([whether PAGE_SIZE is compile-time const], rb_cv_const_page_size,
+ [malloc_headers=`sed -n '/MALLOC_HEADERS_BEGIN/,/MALLOC_HEADERS_END/p' ${srcdir}/gc.c`
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$malloc_headers
+ typedef char conftest_page[PAGE_SIZE];
+ ]], [[]])],
+ [rb_cv_const_page_size=yes],
+ [rb_cv_const_page_size=no])])
+])
+AS_IF([test "x$rb_cv_const_page_size" = xyes],
+ [AC_DEFINE(HAVE_CONST_PAGE_SIZE, 1)],
+ [AC_DEFINE(HAVE_CONST_PAGE_SIZE, 0)]
+)
+
+AS_IF([test "x$ac_cv_func_ioctl" = xyes], [
+ AC_CACHE_CHECK([ioctl request type], rb_cv_ioctl_request_type,
+ [rb_cv_ioctl_request_type=no
+ dnl corresponding NUM2IOCTLREQ needs to be defined
+ for type in "unsigned long:ULONG_MAX" int:INT_MAX; do
+ max=`echo $type | sed 's/.*://'`
+ type=`echo $type | sed 's/:.*//'`
+ RUBY_WERROR_FLAG([
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ @%:@include <limits.h>
+ @%:@include <sys/types.h>
+ @%:@if defined(HAVE_SYS_IOCTL_H) && !defined(_WIN32)
+ @%:@include <sys/ioctl.h>
+ @%:@endif
+ ]], [[
+ $type req = $max;
+ if (ioctl(0, req)) {/* do nothing*/};
+ ]])],
+ [rb_cv_ioctl_request_type="$type"])
+ ])
+ test "x$rb_cv_ioctl_request_type" = xno || break
+ done])
+ AS_CASE(["$rb_cv_ioctl_request_type"], [no|int], [],
+ ["unsigned long"], [
+ AC_DEFINE_UNQUOTED(IOCTL_REQ_TYPE, [$rb_cv_ioctl_request_type])
+ AC_DEFINE_UNQUOTED(NUM2IOCTLREQ(num), [NUM2ULONG(num)])
+ ])
+])
+
+}
+
+[begin]_group "runtime section" && {
+dnl whether use dln_a_out or not
+AC_ARG_WITH(dln-a-out,
+ AS_HELP_STRING([--with-dln-a-out], [dln_a_out is deprecated]),
+ [
+ AS_CASE([$withval],
+ [yes], [
+ AC_MSG_ERROR(dln_a_out no longer supported)
+ ])
+])
+
+AS_IF([test "$rb_cv_binary_elf" = yes], [
+ AC_DEFINE(USE_ELF)
+ AC_CHECK_HEADERS([elf.h elf_abi.h])
+ AS_IF([test $ac_cv_header_elf_h = yes -o $ac_cv_header_elf_abi_h = yes], [
+ AC_LIBOBJ([addr2line])
+ AC_CHECK_LIB([z], [uncompress])
+ ])
+])
+
+AC_CHECK_HEADERS([mach-o/loader.h])
+AS_IF([test "$ac_cv_header_mach_o_loader_h" = yes], [
+ AC_LIBOBJ([addr2line])
+])
+
+AS_CASE(["$target_os"],
+[linux* | gnu* | k*bsd*-gnu | bsdi* | kopensolaris*-gnu], [
+ AS_IF([test "$rb_cv_binary_elf" = no], [
+ AC_MSG_ERROR(Not ELF)
+ ], [
+ LDFLAGS="$LDFLAGS -rdynamic"
+ ])])
+LIBEXT=a
+
+AC_SUBST(DLDFLAGS)dnl
+AC_SUBST(ARCH_FLAG)dnl
+
+AC_SUBST(STATIC)dnl
+AC_SUBST(CCDLFLAGS)dnl
+AC_SUBST(LDSHARED)dnl
+AC_SUBST(LDSHAREDXX)dnl
+AC_SUBST(DLEXT)dnl
+AC_SUBST(LIBEXT)dnl
+AC_SUBST(ASMEXT, S)dnl
+
+STATIC=
+
+: "dlopen" && {
+ rb_cv_dlopen=unknown
+ AC_MSG_CHECKING(whether OS depend dynamic link works)
+ AS_IF([test "$GCC" = yes], [
+ AS_CASE(["$target_os"],
+ [darwin*], [
+ # The -fno-common is needed if we wish to embed the Ruby interpreter
+ # into a plugin module of some project (as opposed to embedding it
+ # within the project's application). The -I/usr/local/include is
+ # needed because CPP as discovered by configure (cc -E -traditional)
+ # fails to consult /usr/local/include by default. This causes
+ # mkmf.rb's have_header() to fail if the desired resource happens to be
+ # installed in the /usr/local tree.
+ RUBY_APPEND_OPTION(CCDLFLAGS, -fno-common)],
+ [bsdi*|cygwin*|msys*|mingw*|aix*|interix*], [ ],
+ [
+ RUBY_APPEND_OPTION(CCDLFLAGS, -fPIC)])
+ ], [
+ AS_CASE(["$target_os"],
+ [solaris*|irix*], [CCDLFLAGS="$CCDLFLAGS -KPIC"],
+ [sunos*], [CCDLFLAGS="$CCDLFLAGS -PIC"],
+ [esix*|uxpds*], [CCDLFLAGS="$CCDLFLAGS -KPIC"],
+ [: ${CCDLFLAGS=""}])
+ ])
+}
+
+EXTSTATIC=
+AC_SUBST(EXTSTATIC)dnl
+AC_ARG_WITH(static-linked-ext,
+ AS_HELP_STRING([--with-static-linked-ext], [link external modules statically]),
+ [AS_CASE([$withval],[yes],[STATIC=;EXTSTATIC=static],[no],[],[EXTSTATIC="$withval"])])
+AS_CASE([",$EXTSTATIC,"], [,static,|*,enc,*], [
+ ENCOBJS='enc/encinit.$(OBJEXT) enc/libenc.$(LIBEXT) enc/libtrans.$(LIBEXT)'
+ EXTOBJS='ext/extinit.$(OBJEXT)'
+ AC_DEFINE_UNQUOTED(EXTSTATIC, 1)
+ AC_SUBST(ENCSTATIC, static)
+], [
+ ENCOBJS='dmyenc.$(OBJEXT)'
+ EXTOBJS='dmyext.$(OBJEXT)'
+])
+AC_SUBST(ENCOBJS)
+AC_SUBST(EXTOBJS)
+
+: "rpath" && {
+ AS_CASE(["$target_os"],
+ [solaris*], [ AS_IF([test "$GCC" = yes], [
+ : ${LDSHARED='$(CC) -shared'}
+ AS_IF([test "$rb_cv_prog_gnu_ld" = yes], [
+ LDFLAGS="$LDFLAGS -Wl,-E"
+ ])
+ ], [
+ : ${LDSHARED='$(CC) -G'}
+ ])
+ AS_IF([test "$ac_cv_sizeof_voidp" = 8], [
+ : ${LIBPATHENV=LD_LIBRARY_PATH_64}
+ : ${PRELOADENV=LD_PRELOAD_64}
+ ], [
+ : ${LIBPATHENV=LD_LIBRARY_PATH_32}
+ : ${PRELOADENV=LD_PRELOAD_32}
+ ])
+ rb_cv_dlopen=yes],
+ [sunos*], [ : ${LDSHARED='$(LD) -assert nodefinitions'}
+ rb_cv_dlopen=yes],
+ [irix*], [ : ${LDSHARED='$(LD) -shared'}
+ rb_cv_dlopen=yes],
+ [sysv4*], [ : ${LDSHARED='$(LD) -G'}
+ rb_cv_dlopen=yes],
+ [nto-qnx*], [ : ${LDSHARED='$(CC) -shared'}
+ rb_cv_dlopen=yes],
+ [esix*|uxpds*], [ : ${LDSHARED='$(LD) -G'}
+ rb_cv_dlopen=yes],
+ [osf*], [ : ${LDSHARED='$(LD) -shared -expect_unresolved "*"'}
+ rb_cv_dlopen=yes],
+ [bsdi3*], [ AS_CASE(["$CC"],
+ [*shlicc*], [ : ${LDSHARED='$(CC) -r'}
+ rb_cv_dlopen=yes])],
+ [linux* | gnu* | k*bsd*-gnu | netbsd* | bsdi* | kopensolaris*-gnu | haiku*], [
+ : ${LDSHARED='$(CC) -shared'}
+ AS_IF([test "$rb_cv_binary_elf" = yes], [
+ LDFLAGS="$LDFLAGS -Wl,-export-dynamic"
+ ])
+ rb_cv_dlopen=yes],
+ [interix*], [ : ${LDSHARED='$(CC) -shared'}
+ XLDFLAGS="$XLDFLAGS -Wl,-E"
+ rb_cv_dlopen=yes],
+ [freebsd*|dragonfly*], [
+ : ${LDSHARED='$(CC) -shared'}
+ AS_IF([test "$rb_cv_binary_elf" = yes], [
+ LDFLAGS="$LDFLAGS -rdynamic"
+ DLDFLAGS="$DLDFLAGS "'-Wl,-soname,$@'
+ ], [
+ test "$GCC" = yes && test "$rb_cv_prog_gnu_ld" = yes || LDSHARED='$(LD) -Bshareable'
+ ])
+ rb_cv_dlopen=yes],
+ [openbsd*|mirbsd*], [ : ${LDSHARED='$(CC) -shared ${CCDLFLAGS}'}
+ AS_IF([test "$rb_cv_binary_elf" = yes], [
+ LDFLAGS="$LDFLAGS -Wl,-E"
+ ])
+ rb_cv_dlopen=yes],
+ [darwin*], [ : ${LDSHARED='$(CC) -dynamic -bundle'}
+ : ${DLDSHARED='$(CC) -dynamiclib'}
+ : ${LDFLAGS=""}
+ : ${LIBPATHENV=DYLD_LIBRARY_PATH}
+ : ${PRELOADENV=DYLD_INSERT_LIBRARIES}
+ AS_IF([test x"$enable_shared" = xyes], [
+ # Resolve symbols from libruby.dylib in $(LIBS) when --enable-shared
+ ], [test "x$EXTSTATIC" = x], [
+ # When building exts as bundles, a mach-o bundle needs to know its loader
+ # program to bind symbols from the ruby executable
+ EXTDLDFLAGS="-bundle_loader '\$(BUILTRUBY)'"
+ ])
+ rb_cv_dlopen=yes],
+ [aix*], [ : ${LDSHARED='$(CC)'}
+ AS_IF([test "$GCC" = yes], [
+ LDSHARED="$LDSHARED ${linker_flag}-G -shared"
+ ], [
+ LDSHARED="$LDSHARED ${linker_flag}-G"
+ ])
+ EXTDLDFLAGS='-e$(TARGET_ENTRY)'
+ XLDFLAGS="${linker_flag}"'-bE:$(ARCHFILE)'" ${linker_flag}-brtl"
+ XLDFLAGS="$XLDFLAGS ${linker_flag}-blibpath:${prefix}/lib:${LIBPATH:-/usr/lib:/lib}"
+ : ${ARCHFILE="ruby.imp"}
+ TRY_LINK='$(CC) -oconftest $(INCFLAGS) -I$(hdrdir) $(CPPFLAGS)'
+ TRY_LINK="$TRY_LINK"' $(CFLAGS) $(src) $(LIBPATH) $(LDFLAGS) $(LOCAL_LIBS) $(LIBS)'
+ : ${LIBPATHENV=LIBPATH}
+ : ${PRELOADENV=LDR_PRELOAD}
+ rb_cv_dlopen=yes],
+ [nto-qnx*], [ DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
+ : ${LDSHARED='$(LD) -Bshareable -x'}
+ LDFLAGS="$LDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
+ rb_cv_dlopen=yes],
+ [cygwin*|msys*|mingw*], [
+ : ${LDSHARED='$(CC) -shared'}
+ XLDFLAGS="$XLDFLAGS -Wl,--stack,0x00200000,--enable-auto-import"
+ DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import"
+ : ${LIBPATHENV=PATH}
+ : ${PRELOADENV=""}
+ rb_cv_dlopen=yes],
+ [hiuxmpp], [ : ${LDSHARED='$(LD) -r'}],
+ [atheos*], [ : ${LDSHARED='$(CC) -shared'}
+ rb_cv_dlopen=yes],
+ [wasi*], [ : ${LDSHARED='$(LD) -shared -Xlinker --export-dynamic'}],
+ [ : ${LDSHARED='$(LD)'}])
+ AC_MSG_RESULT($rb_cv_dlopen)
+}
+
+AS_IF([test "$rb_cv_dlopen" = yes], [
+ AS_CASE(["$target_os"],
+ [darwin*], [
+ AC_SUBST(ADDITIONAL_DLDFLAGS, "")
+ for flag in \
+ "-multiply_defined suppress" \
+ "-undefined dynamic_lookup" \
+ ; do
+ test "x${linker_flag}" = x || flag="${linker_flag}`echo ${flag} | tr ' ' ,`"
+ RUBY_TRY_LDFLAGS([$flag], [], [flag=])
+ AS_IF([test x"$flag" = x], [continue])
+
+ AC_MSG_CHECKING([whether $flag is accepted for bundle])
+ : > conftest.c
+ AS_IF([${LDSHARED%%'$(CC)'*}$CC${LDSHARED@%:@*'$(CC)'} -o conftest.bundle $flag conftest.c >/dev/null 2>conftest.err &&
+ test ! -s conftest.err], [
+ AC_MSG_RESULT([yes])
+ RUBY_APPEND_OPTIONS(DLDFLAGS, [$flag])
+ ], [
+ AC_MSG_RESULT([no])
+ RUBY_APPEND_OPTIONS(ADDITIONAL_DLDFLAGS, [$flag])
+ ])
+ rm -fr conftest.*
+ done
+ ])
+])
+
+AS_IF([test "${LDSHAREDXX}" = ""], [
+ AS_CASE(["${LDSHARED}"],
+ [*'$(CC)'*], [
+ LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\$(CC)/$(CXX)/'`
+ ],
+ [*'${CC}'*], [
+ LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\${CC}/${CXX}/'`
+ ],
+ [*$CC*], [
+ LDSHAREDXX=`echo "${LDSHARED}" | sed "s|$CC|$CXX|"`
+ ],
+ [ld" "*], [
+ ])
+])
+
+AC_SUBST(LINK_SO)
+AC_SUBST(LIBPATHFLAG)
+AC_SUBST(RPATHFLAG)
+AC_SUBST(LIBPATHENV, "${LIBPATHENV-LD_LIBRARY_PATH}")
+AC_SUBST(PRELOADENV, "${PRELOADENV-LD_PRELOAD}")
+AC_SUBST(TRY_LINK)
+
+AS_CASE(["$target_os"],
+[freebsd*], [
+ AC_CHECK_LIB([procstat], [procstat_open_sysctl])
+ AS_IF([test "x$ac_cv_lib_procstat_procstat_open_sysctl" = xyes], [
+ AC_CHECK_FUNCS(procstat_getvmmap)
+ ])
+ ])
+AS_CASE(["$target_cpu-$target_os"],
+[*-darwin*], [
+ AC_CHECK_HEADERS([libproc.h])
+ AC_CHECK_HEADERS([execinfo.h])
+ AS_IF([test "x$ac_cv_header_execinfo_h" = xyes], [
+ AC_CHECK_LIB([execinfo], [backtrace])
+ AC_CHECK_HEADERS([libunwind.h])
+
+ AC_CHECK_HEADERS([mach/task.h mach/mach_init.h mach/mach_port.h])
+ AS_IF([ test \
+ "x${ac_cv_header_mach_task_h}" = xyes -a \
+ "x${ac_cv_header_mach_mach_init_h}" = xyes -a \
+ "x${ac_cv_header_mach_mach_port_h}" = xyes \
+ ], [
+ AC_DEFINE([HAVE_MACH_TASK_EXCEPTION_PORTS], [1])
+ ])
+ ])],
+[*-freebsd*|x86_64-netbsd*], [
+ AC_CHECK_HEADERS([execinfo.h])
+ AS_IF([test "x$ac_cv_header_execinfo_h" = xyes], [
+ AC_CHECK_LIB([execinfo], [backtrace])
+ AC_CHECK_LIB([unwind], [unw_backtrace])
+ ])])
+AC_CHECK_FUNCS(backtrace)
+
+AS_IF([test "x$ac_cv_func_backtrace" = xyes], [
+ AC_CACHE_CHECK(for broken backtrace, rb_cv_broken_backtrace,
+ [AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <signal.h>
+#include <execinfo.h>
+
+]`grep '^@%:@ *define *RUBY_SIGALTSTACK_SIZE' ${srcdir}/signal.c`[
+#define TRACE_SIZE 256
+
+void sigsegv(int signum, siginfo_t *info, void *ctx){
+ void *trace[TRACE_SIZE];
+ int n = backtrace(trace, TRACE_SIZE);
+ if (n > 0) {
+ /*fprintf(stdout, "backtrace:%d\n",n);*/
+ } else {
+ _exit(EXIT_FAILURE);
+ }
+ _exit(EXIT_SUCCESS);
+}
+int
+main(void)
+{
+ volatile int *a = NULL;
+ stack_t ss;
+ struct sigaction sa;
+
+ ss.ss_sp = malloc(RUBY_SIGALTSTACK_SIZE);
+ if (ss.ss_sp == NULL) {
+ fprintf(stderr, "cannot allocate memory for sigaltstack\n");
+ return EXIT_FAILURE;
+ }
+ ss.ss_size = RUBY_SIGALTSTACK_SIZE;
+ ss.ss_flags = 0;
+ if (sigaltstack(&ss, NULL) == -1) {
+ fprintf(stderr, "sigaltstack failed\n");
+ return EXIT_FAILURE;
+ }
+ memset(&sa, 0, sizeof(struct sigaction));
+ sigemptyset(&sa.sa_mask);
+ sa.sa_sigaction = sigsegv;
+ sa.sa_flags |= SA_SIGINFO;
+ sa.sa_flags |= SA_ONSTACK;
+ sigaction(SIGSEGV, &sa, NULL);
+ a[0] = 1;
+ return EXIT_SUCCESS;
+}
+]])],
+ rb_cv_broken_backtrace=no,
+ rb_cv_broken_backtrace=yes,
+ rb_cv_broken_backtrace=no)])
+ AS_IF([test "$rb_cv_broken_backtrace" = yes], [
+ AC_DEFINE(BROKEN_BACKTRACE, 1)
+ ])
+])
+
+AC_ARG_WITH(valgrind,
+ AS_HELP_STRING([--without-valgrind],[disable valgrind memcheck support]),
+ [], with_valgrind=yes)
+AS_IF([test x$with_valgrind != xno],
+ [AC_CHECK_HEADERS(valgrind/memcheck.h)])
+
+: "dlext & soext" && {
+ AS_CASE(["$target_os"],
+ [darwin*], [
+ SOEXT=dylib
+ DLEXT=bundle],
+ [cygwin*|msys*|mingw*|*djgpp*], [
+ LOAD_RELATIVE=1
+ SOEXT=dll
+ DLEXT=so],
+ [
+ DLEXT=so])
+: ${SOEXT="${DLEXT}"}
+AC_SUBST(SOEXT)
+
+AS_IF([test "$rb_cv_dlopen:$load_relative" = yes:yes], [
+ AS_IF([test "$ac_cv_func_dladdr" = yes], [
+ LOAD_RELATIVE=1
+ ])
+])
+AS_IF([test x"$LOAD_RELATIVE" = x1], [
+ load_relative=yes
+], [
+ unset load_relative
+])
+
+len=2 # .rb
+n=`expr "$DLEXT" : '.*'`; test "$n" -gt "$len" && len=$n
+AC_DEFINE_UNQUOTED(DLEXT_MAXLEN, `expr $len + 1`)
+test ".$DLEXT" = "." || AC_DEFINE_UNQUOTED(DLEXT, ".$DLEXT")
+AC_SUBST(DLEXT)
+
+AC_DEFINE_UNQUOTED(SOEXT, ".$SOEXT")
+}
+
+: "strip" && {
+ AC_MSG_CHECKING([for $STRIP flags])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM], [AS_IF(
+ ["${STRIP}" -A -n conftest$ac_exeext 2>/dev/null], [
+ AC_MSG_RESULT([-A -n])
+ STRIP="${STRIP} -A -n"
+ ],
+ ["${STRIP}" -S -x conftest$ac_exeext 2>/dev/null], [
+ AC_MSG_RESULT([-S -x])
+ STRIP="${STRIP} -S -x"
+ ], [
+ AC_MSG_RESULT([none needed])
+ ])
+ ])
+}
+
+AC_ARG_WITH(ext,
+ AS_HELP_STRING([--with-ext=EXTS],
+ [pass to --with-ext option of extmk.rb]))
+AC_ARG_WITH(out-ext,
+ AS_HELP_STRING([--with-out-ext=EXTS],
+ [pass to --without-ext option of extmk.rb]))
+AC_ARG_WITH(setup,
+ AS_HELP_STRING([--with-setup=SETUP], [use extension libraries setup]),
+ [setup=$withval])
+AS_IF([test -n "$setup"], [
+ AS_IF([! test -f "ext/$setup" -o -f "$srcdir/ext/$setup"], [
+ AC_MSG_ERROR(Setup file $setup not found under ext or $srcdir/ext)
+ ])
+], [test -f "$srcdir/ext/Setup.$target_os"], [
+ setup="Setup.$target_os"
+], [
+ setup=
+ for file in "$srcdir"/ext/Setup.*; do
+ AS_CASE(["$file"], [*~|*.bak|*.orig|*.rej|*.tmp], [continue])
+ setup=`basename "$file"`
+ AS_CASE(["$target_os"], [`expr "$setup" : 'Setup.\(.*\)'`*], [break])
+ platform=`sed '/^option *platform */!d;s///;s/|/*|/g;q' "$file"`
+ AS_IF([test "x$platform" != x], [
+ eval "AS_CASE([\"\$target_os\"], [$platform*], [break])"
+ ])
+ setup=
+ done
+ : ${setup:=Setup}
+])
+AC_SUBST(setup)
+
+rubylibprefix='${libdir}/${RUBY_BASE_NAME}'
+AC_ARG_WITH(rubylibprefix,
+ AS_HELP_STRING([--with-rubylibprefix=DIR], [prefix for ruby libraries [[LIBDIR/RUBY_BASE_NAME]]]),
+ [AS_IF([test "x$withval" = xno], [
+ AC_MSG_ERROR([No ruby, No libprefix])
+ ])
+ rubylibprefix="$withval"])
+AC_SUBST(rubylibprefix)
+
+AS_IF([test x"${exec_prefix}" != xNONE], [
+ RUBY_EXEC_PREFIX="$exec_prefix"
+], [test x"$prefix" != xNONE], [
+ RUBY_EXEC_PREFIX="$prefix"
+], [
+ RUBY_EXEC_PREFIX=$ac_default_prefix
+])
+pat=`echo "${RUBY_EXEC_PREFIX}" | tr -c '\012' .`'\(.*\)'
+for var in bindir includedir libdir rubylibprefix; do
+ eval val='"$'$var'"'
+ AS_CASE(["$val"], ["${RUBY_EXEC_PREFIX}"*], [val='${exec_prefix}'"`expr \"$val\" : \"$pat\"`"])
+ eval $var='"$val"'
+done
+
+BTESTRUBY='$(MINIRUBY)'
+AS_IF([test x"$cross_compiling" = xyes], [
+ test x"$MINIRUBY" = x && MINIRUBY="${RUBY-$BASERUBY} -I${ac_abs_builddir-.} "-r'$(arch)-fake'
+ XRUBY_LIBDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["libdir"]']`
+ XRUBY_RUBYLIBDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["rubylibdir"]']`
+ XRUBY_RUBYHDRDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["rubyhdrdir"]']`
+ AC_SUBST(XRUBY_LIBDIR)
+ AC_SUBST(XRUBY_RUBYLIBDIR)
+ AC_SUBST(XRUBY_RUBYHDRDIR)
+ PREP='$(arch)-fake.rb'
+ AS_CASE(["$enable_shared:$EXTSTATIC:$target_os"], [no::darwin*], [
+ # darwin target requires miniruby for linking ext bundles
+ PREP="$PREP"' miniruby$(EXEEXT)'
+ ])
+ RUNRUBY_COMMAND='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`'
+ RUNRUBY='$(RUNRUBY_COMMAND)'
+ XRUBY='$(MINIRUBY)'
+ TEST_RUNNABLE=no
+ CROSS_COMPILING=yes
+ AC_DEFINE(CROSS_COMPILING, 1)
+], [
+ MINIRUBY='./miniruby$(EXEEXT) -I$(srcdir)/lib -I.'
+ MINIRUBY="$MINIRUBY"' -I$(EXTOUT)/common'
+ PREP='miniruby$(EXEEXT)'
+ RUNRUBY_COMMAND='$(MINIRUBY) $(tooldir)/runruby.rb --extout=$(EXTOUT) $(RUNRUBYOPT)'
+ RUNRUBY='$(RUNRUBY_COMMAND) --'
+ XRUBY='$(RUNRUBY)'
+ TEST_RUNNABLE=yes
+ CROSS_COMPILING=no
+])
+AC_SUBST(TEST_RUNNABLE)
+AC_SUBST(CROSS_COMPILING)
+AC_SUBST(MINIRUBY)
+AC_SUBST(BTESTRUBY)
+AC_SUBST(PREP)
+AC_SUBST(RUNRUBY_COMMAND)
+AC_SUBST(RUNRUBY)
+AC_SUBST(XRUBY)
+AC_SUBST(EXTOUT, [${EXTOUT=.ext}])
+
+LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a'
+LIBRUBY='$(LIBRUBY_A)'
+LIBRUBYARG_STATIC='-l$(RUBY_SO_NAME)-static'
+LIBRUBYARG='$(LIBRUBYARG_STATIC)'
+SOLIBS='$(MAINLIBS)'
+
+AS_CASE(["$target_os"],
+ [cygwin*|msys*|mingw*|haiku*|darwin*], [
+ : ${DLDLIBS=""}
+ ],
+ [
+ DLDLIBS="${DLDLIBS:+$DLDLIBS }-lc"
+ ])
+
+AC_ARG_ENABLE(multiarch,
+ AS_HELP_STRING([--enable-multiarch], [enable multiarch compatible directories]),
+ [multiarch=], [unset multiarch])
+AS_IF([test ${multiarch+set}], [
+ AC_DEFINE(ENABLE_MULTIARCH)
+])
+
+archlibdir='${libdir}/${arch}'
+sitearchlibdir='${libdir}/${sitearch}'
+archincludedir='${includedir}/${arch}'
+sitearchincludedir='${includedir}/${sitearch}'
+
+AC_ARG_WITH(soname,
+ AS_HELP_STRING([--with-soname=SONAME], [base name of shared library]),
+ [RUBY_SO_NAME=$withval],
+ [
+ AS_CASE(["$target_os"],
+ [darwin*], [
+ RUBY_SO_NAME='$(RUBY_BASE_NAME).$(RUBY_API_VERSION)'
+ ],
+ [cygwin*], [
+ RUBY_SO_NAME='$(RUBY_BASE_NAME)$(MAJOR)$(MINOR)0'
+ ],
+ [mingw*], [
+ RUBY_SO_NAME="${rb_cv_msvcrt}"'-$(RUBY_BASE_NAME)$(MAJOR)$(MINOR)0'
+ AS_IF([test x"${target_cpu}" != xi386 || test x"${rb_cv_msvcrt}" != xmsvcrt], [
+ RUBY_SO_NAME="${target_cpu}-${RUBY_SO_NAME}"
+ ])
+ ],
+ [RUBY_SO_NAME='$(RUBY_BASE_NAME)'])
+ ])
+
+LIBRUBY_LDSHARED=${DLDSHARED=${LDSHARED}}
+LIBRUBY_DLDFLAGS=$DLDFLAGS
+LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_PROGRAM_VERSION)'
+LIBRUBY_SONAME='lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_API_VERSION)'
+LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).$(SOEXT)'
+ENABLE_SHARED=no
+
+AC_ARG_ENABLE(shared,
+ AS_HELP_STRING([--enable-shared], [build a shared library for Ruby]),
+ [enable_shared=$enableval])
+libprefix=${multiarch+'$(archlibdir)'}${multiarch-'$(libdir)'}
+LIBRUBY_RELATIVE=${load_relative-no}
+AS_CASE("$enable_shared", [yes], [
+ LIBRUBY='$(LIBRUBY_SO)'
+ LIBRUBYARG_SHARED='-l$(RUBY_SO_NAME)'
+ LIBRUBYARG='$(LIBRUBYARG_SHARED)'
+ LIBRUBY_RELATIVE=no
+ test -z "$CCDLFLAGS" || CFLAGS="$CFLAGS $CCDLFLAGS"
+ ENABLE_SHARED=yes
+
+ # libdir can be overridden in config.site file (on OpenSUSE at least).
+ libdir_basename=lib
+ AS_IF([test "$bindir" = '${exec_prefix}/bin'], [
+ AS_CASE(["$libdir"], ['${exec_prefix}/'*], [libdir_basename=`basename "$libdir"`])
+ ])
+ AC_DEFINE_UNQUOTED(LIBDIR_BASENAME, ["${libdir_basename}"])
+ libdir_basename="${libdir_basename}"${multiarch+'/${arch}'}
+
+ # Debian bullseye reportedly has its ld(1) patched, which breaks
+ # --enable-shared --with-jemalloc combination. We might have to deal with
+ # the ld(1) change sooner or later, but in the meantime let us force it
+ # the old way.
+ #
+ # See https://github.com/ruby/ruby/pull/4627
+ RUBY_TRY_LDFLAGS([${linker_flag}--no-as-needed], [no_as_needed=yes], [no_as_needed=no])
+ AS_IF([test "$no_as_needed" = yes], [
+ RUBY_APPEND_OPTIONS(LDFLAGS, [${linker_flag}--no-as-needed])
+ ])
+
+ AS_CASE(["$target_os"],
+ [freebsd*|dragonfly*], [],
+ [
+ AS_IF([test "$GCC" = yes], [
+ RUBY_TRY_LDFLAGS([${linker_flag}--no-undefined], [no_undefined=yes], [no_undefined=no])
+ AS_IF([test "no_undefined" = yes], [
+ RUBY_APPEND_OPTION(EXTLDFLAGS, [${linker_flag}--no-undefined])
+ ])
+ ])
+ ])
+
+ relative_libprefix="/../${multiarch+../}${libdir_basename}"
+ AS_CASE(["$target_os"],
+ [sunos4*], [
+ LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)'
+ ],
+ [linux* | gnu* | k*bsd*-gnu | atheos* | kopensolaris*-gnu | haiku*], [
+ RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ['-Wl,-soname,$(LIBRUBY_SONAME)' "$LDFLAGS_OPTDIR"])
+ LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)'
+ AS_IF([test "$load_relative" = yes], [
+ libprefix="'\$\${ORIGIN}${relative_libprefix}'"
+ LIBRUBY_RPATHFLAGS="-Wl,-rpath,${libprefix}"
+ LIBRUBY_RELATIVE=yes
+ ])
+ ],
+ [freebsd*|dragonfly*], [
+ LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)$(MINOR)'
+ LIBRUBY_SONAME='$(LIBRUBY_SO)'
+ AS_IF([test "$rb_cv_binary_elf" != "yes" ], [
+ LIBRUBY_SO="$LIBRUBY_SO.\$(TEENY)"
+ LIBRUBY_ALIASES=''
+ ], [test "$load_relative" = yes], [
+ libprefix="'\$\$ORIGIN${relative_libprefix}'"
+ LIBRUBY_RPATHFLAGS="-Wl,-rpath,${libprefix}"
+ LIBRUBY_RELATIVE=yes
+ ])
+ ],
+ [netbsd*], [
+ LIBRUBY_SONAME='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)$(MINOR)'
+ LIBRUBY_SO="${LIBRUBY_SONAME}"'.$(TEENY)'
+ RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ['-Wl,-soname,$(LIBRUBY_SONAME)' "$LDFLAGS_OPTDIR"])
+ AS_IF([test "$rb_cv_binary_elf" = yes], [ # ELF platforms
+ LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)'
+ ], [ # a.out platforms
+ LIBRUBY_ALIASES=""
+ ])
+ ],
+ [openbsd*|mirbsd*], [
+ LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR).'`expr ${MINOR} \* 10 + ${TEENY}`
+ ],
+ [solaris*], [
+ LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)'
+ LIBRUBY_SONAME='lib$(RUBY_SO_NAME).$(SOEXT).$(RUBY_PROGRAM_VERSION)'
+ LIBRUBY_ALIASES='$(LIBRUBY_SONAME) lib$(RUBY_SO_NAME).$(SOEXT)'
+ RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ["${linker_flag}-h${linker_flag:+,}"'$(@F)'])
+ AS_IF([test "$load_relative" = yes], [
+ libprefix="'\$\$ORIGIN${relative_libprefix}'"
+ LIBRUBY_RPATHFLAGS="-R${libprefix}"
+ LIBRUBY_RELATIVE=yes
+ ], [
+ LIBRUBY_RPATHFLAGS='-R${libdir}'
+ ])
+ ],
+ [aix*], [
+ RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ["${linker_flag}-bnoentry" "$XLDFLAGS" "$LDFLAGS_OPTDIR"])
+ LIBRUBYARG_SHARED='-L${libdir} -l${RUBY_SO_NAME}'
+ LIBS="$LIBS -lm -lc"
+ ],
+ [darwin*], [
+ LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT)'
+ LIBRUBY_SONAME='$(LIBRUBY_SO)'
+ LIBRUBY_ALIASES='lib$(RUBY_INSTALL_NAME).$(SOEXT)'
+ AS_IF([test "$load_relative" = yes], [
+ libprefix="@executable_path${relative_libprefix}"
+ LIBRUBY_RELATIVE=yes
+ ])
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS -install_name ${libprefix}"'/$(LIBRUBY_SONAME)'
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-compatibility_version $(RUBY_API_VERSION)'
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-current_version $(RUBY_PROGRAM_VERSION)'
+ AS_IF([test "$visibility_option" = ld], [
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_Init_*'
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_InitVM_*'
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_ruby_static_id_*'
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,*_threadptr_*'
+ ])
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "' $(XLDFLAGS)'
+ ],
+ [interix*], [
+ LIBRUBYARG_SHARED='-L. -L${libdir} -l$(RUBY_SO_NAME)'
+ ],
+ [cygwin*|msys*|mingw*|mswin*], [
+ LIBRUBY_RELATIVE=yes
+ ])
+], [
+ LIBRUBYARG_SHARED=
+
+ # enable PIE if possible
+ AC_ARG_ENABLE(pie,
+ AS_HELP_STRING([--disable-pie], [disable PIE feature]),
+ [pie=$enableval], [pie=])
+ AS_IF([test "$GCC" = yes -a -z "$EXTSTATIC" -a "x$pie" != xno], [
+ RUBY_TRY_CFLAGS(-fPIE, [pie=yes], [pie=no])
+ AS_IF([test "$pie" = yes], [
+ # Use -fPIE when testing -pie. RUBY_TRY_LDFLAGS sets
+ # $save_CFLAGS internally, so set other name here.
+ save_CFLAGS_before_pie="$CFLAGS"
+ CFLAGS="$CFLAGS -fPIE"
+
+ # gcc need -pie but clang need -Wl,-pie.
+ for pie in -pie -Wl,-pie; do
+ RUBY_TRY_LDFLAGS([$pie], [], [pie=])
+ AS_IF([test "x$pie" != x], [
+ RUBY_APPEND_OPTION(XCFLAGS, -fPIE)
+ RUBY_APPEND_OPTION(XLDFLAGS, $pie)
+ break
+ ])
+ done
+ CFLAGS="$save_CFLAGS_before_pie"
+ ])
+ ])
+])
+AS_IF([test "$enable_rpath" = yes], [
+ AS_CASE(["${cross_compiling}${load_relative}"],
+ [*yes*], [rpathflag="${RPATHFLAG}"],
+ [rpathflag="$RPATHFLAG${LIBPATHFLAG:+${RPATHFLAG:+ }$LIBPATHFLAG}"])
+ rpathflag=`IFS="$PATH_SEPARATOR"
+ echo x "$rpathflag" |
+ sed "s/^x *//;s${IFS}"'%1\\$-s'"${IFS}${libprefix}${IFS}g;s${IFS}%s${IFS}${libprefix}${IFS}g"
+ `
+ LIBRUBY_RPATHFLAGS="${LIBRUBY_RPATHFLAGS:+$LIBRUBY_RPATHFLAGS }${rpathflag}"
+ LIBRUBYARG_SHARED="${LIBRUBY_RPATHFLAGS:+$LIBRUBY_RPATHFLAGS }$LIBRUBYARG_SHARED"
+ LIBRUBYARG_STATIC="${LIBRUBY_RPATHFLAGS:+$LIBRUBY_RPATHFLAGS }$LIBRUBYARG_STATIC"
+])
+AC_SUBST(LIBRUBY_RELATIVE)
+
+LDFLAGS="-L. $LDFLAGS"
+AC_SUBST(ARCHFILE)
+
+AS_IF([test "$EXEEXT" = .exe], [
+ EXECUTABLE_EXTS='".exe",".com",".cmd",".bat"'
+ AC_DEFINE_UNQUOTED(EXECUTABLE_EXTS, $EXECUTABLE_EXTS)
+ EXECUTABLE_EXTS=`echo $EXECUTABLE_EXTS | tr -d '"' | tr , ' '`
+ AC_SUBST(EXECUTABLE_EXTS)
+])
+
+AS_CASE("$cross_compiling:${LIBPATHENV}", [yes:* | no:], [], [
+ AC_MSG_CHECKING(whether wrapper for $LIBPATHENV is needed)
+ AS_IF([env ${LIBPATHENV}=/lib /bin/sh -c ': ${'${LIBPATHENV}'?}' 2>/dev/null],
+ [AC_MSG_RESULT(no)],
+ [AC_SUBST(XRUBY_LIBPATHENV_WRAPPER, 'exe/$(PROGRAM)')
+ AC_MSG_RESULT(yes)]
+ )
+])
+
+AC_ARG_ENABLE(dtrace,
+ AS_HELP_STRING([--enable-dtrace],
+ [enable DTrace for tracing inside ruby. enabled by default on systems having dtrace]),
+ [enable_dtrace=$enableval], [enable_dtrace=auto])
+
+LIBRUBY_A_OBJS='$(OBJS)'
+DTRACE_REBUILD=
+AS_CASE(["${enable_dtrace}"],
+[yes|auto], [
+ RUBY_DTRACE_AVAILABLE()
+], [
+ rb_cv_dtrace_available=no
+])
+AS_CASE(["$target_os"],[freebsd*],[
+ rb_cv_dtrace_available=no
+ ])
+AS_IF([test "${enable_dtrace}" = yes], [dnl
+ AS_IF([test -z "$DTRACE"], [dnl
+ AC_MSG_ERROR([dtrace(1) is missing])
+ ], [test "$cross_compiling" = yes], [dnl
+ AC_MSG_ERROR([--enable-dtrace, however, cross compiling])
+ ], [test "${rb_cv_dtrace_available}" = "no"], [dnl
+ AC_MSG_ERROR([--enable-dtrace, however, USDT is not available])
+ ])
+])
+AS_CASE([$rb_cv_dtrace_available],
+[yes*], [dnl
+ RUBY_DTRACE_POSTPROCESS()
+ AS_IF([test "$rb_cv_prog_dtrace_g" != no], [dnl
+ DTRACE_OBJ='probes.$(OBJEXT)'
+ ])
+ AS_IF([test "$rb_cv_prog_dtrace_g" = rebuild], [dnl
+ DTRACE_REBUILD=yes
+ LIBRUBY_A_OBJS='$(DTRACE_GLOMMED_OBJ)'
+ ])
+ AS_CASE("${target_os}", [freebsd*], [dnl
+ # FreeBSD's dtrace requires libelf
+ LIBS="-lelf $LIBS"
+ ])
+ DTRACE_EXT=d
+], [dnl
+ enable_dtrace=no
+ DTRACE_EXT=dmyh
+])
+AC_SUBST(DTRACE_EXT)
+AC_SUBST(DTRACE_OBJ)
+AC_SUBST(DTRACE_REBUILD)
+AC_SUBST(DTRACE_OPT)
+AC_SUBST(LIBRUBY_A_OBJS)
+
+AC_ARG_ENABLE(gcov,
+ AS_HELP_STRING([--enable-gcov], [enable coverage measurement by gcov]),
+ [gcov=yes])
+AS_IF([test x"$gcov" = xyes], [
+ CFLAGS="$CFLAGS -coverage -fprofile-update=atomic"
+ LDFLAGS="$LDFLAGS -coverage"
+])
+
+RUBY_SETJMP_TYPE
+RUBY_MODULAR_GC
+}
+
+[begin]_group "installation section" && {
+dnl build rdoc index if requested
+RDOCTARGET=""
+CAPITARGET=""
+AC_ARG_ENABLE(install-doc,
+ AS_HELP_STRING([--disable-install-doc], [do not install either rdoc indexes or C API documents during install]),
+ [install_doc=$enableval], [install_doc=yes])
+AC_ARG_WITH(rdoc,
+ AS_HELP_STRING([--with-rdoc=ri,html], [comma/space separated list of RDoc formats to install]),
+ [install_rdoc=`echo ,$withval, | sed 'y/,/ /;s/ ri / rdoc /;s/^ *//;s/ *$//'`], [
+AC_ARG_ENABLE(install-rdoc,
+ AS_HELP_STRING([--disable-install-rdoc], [do not install rdoc indexes during install]),
+ [install_rdoc=$enableval], [install_rdoc=yes])
+])
+AC_ARG_ENABLE(install-capi,
+ AS_HELP_STRING([--disable-install-capi], [do not install C API documents during install]),
+ [install_capi=$enableval], [install_capi=no])
+
+AS_IF([test "$install_doc" != no], [
+ AS_CASE(["$install_rdoc"],
+ [yes], [
+ RDOCTARGET="rdoc"
+ ],
+ [all], [
+ RDOCTARGET="rdoc html"
+ ],
+ [no|''], [
+ RDOCTARGET="nodoc"
+ ],
+ [
+ RDOCTARGET="$install_rdoc"
+ ])
+ AS_IF([test "$install_capi" != no -a -n "$DOXYGEN"], [
+ CAPITARGET="capi"
+ ], [
+ CAPITARGET="nodoc"
+ ])
+], [
+ RDOCTARGET="nodoc"
+ CAPITARGET="nodoc"
+])
+
+AC_SUBST(RDOCTARGET)
+AC_SUBST(CAPITARGET)
+
+AS_CASE(["$RDOCTARGET:$CAPITARGET"],[nodoc:nodoc],[INSTALLDOC=nodoc],[INSTALLDOC=all])
+AC_SUBST(INSTALLDOC)
+
+AC_ARG_ENABLE(install-static-library,
+ AS_HELP_STRING([--disable-install-static-library], [do not install static ruby library]),
+ [INSTALL_STATIC_LIBRARY=$enableval
+ AS_IF([test x"$enable_shared" = xno -a x"$INSTALL_STATIC_LIBRARY" = xno],
+ [AC_MSG_ERROR([must install either static or shared library])],
+ [])],
+ AS_IF([test x"$enable_shared" = xyes],
+ [INSTALL_STATIC_LIBRARY=no],
+ [INSTALL_STATIC_LIBRARY=yes]))
+AC_SUBST(INSTALL_STATIC_LIBRARY)
+}
+
+[begin]_group "JIT section" && {
+AC_CHECK_PROG(RUSTC, [rustc], [rustc], [no]) dnl no ac_tool_prefix
+
+dnl check if rustc is recent enough to build YJIT (rustc >= 1.58.0)
+JIT_RUSTC_OK=no
+JIT_TARGET_ARCH=
+AS_IF([test "$RUSTC" != "no"],
+ AC_MSG_CHECKING([whether ${RUSTC} works for YJIT])
+ AS_CASE(["$target_cpu"],
+ [arm64|aarch64], [JIT_TARGET_ARCH=aarch64],
+ [x86_64], [JIT_TARGET_ARCH=x86_64],
+ )
+ dnl Fails in case rustc target doesn't match ruby target.
+ dnl Can happen on Rosetta, for example.
+ AS_IF([echo "#[cfg(target_arch = \"$JIT_TARGET_ARCH\")] fn main() { let x = 1; format!(\"{x}\"); }" |
+ $RUSTC - --emit asm=/dev/null 2>/dev/null],
+ [JIT_RUSTC_OK=yes]
+ )
+ AC_MSG_RESULT($JIT_RUSTC_OK)
+)
+
+dnl check if we can build YJIT/ZJIT on this target platform
+dnl we can't easily cross-compile with rustc so we don't support that
+JIT_TARGET_OK=no
+AS_IF([test "$cross_compiling" = no],
+ AS_CASE(["$target_cpu-$target_os"],
+ [*android*], [
+ JIT_TARGET_OK=no
+ ],
+ [arm64-darwin*|aarch64-darwin*|x86_64-darwin*], [
+ JIT_TARGET_OK=yes
+ ],
+ [arm64-*linux*|aarch64-*linux*|x86_64-*linux*], [
+ JIT_TARGET_OK=yes
+ ],
+ [arm64-*bsd*|aarch64-*bsd*|x86_64-*bsd*], [
+ JIT_TARGET_OK=yes
+ ]
+ )
+)
+
+dnl build YJIT in release mode if rustc >= 1.58.0 is present and we are on a supported platform
+AC_ARG_ENABLE(yjit,
+ AS_HELP_STRING([--enable-yjit],
+ [enable in-process JIT compiler that requires Rust build tools. enabled by default on supported platforms if rustc 1.58.0+ is available]),
+ [YJIT_SUPPORT=$enableval],
+ [AS_CASE(["$JIT_TARGET_OK:$JIT_RUSTC_OK"],
+ [yes:yes], [
+ YJIT_SUPPORT=yes
+ ],
+ [YJIT_SUPPORT=no]
+ )]
+)
+
+dnl build ZJIT in release mode if rustc >= 1.85.0 is present and we are on a supported platform
+ZJIT_SUPPORT=no
+AC_ARG_ENABLE(zjit,
+ AS_HELP_STRING([--enable-zjit],
+ [enable experimental JIT compiler that requires Rust build tools. enabled by default on supported platforms if rustc 1.85.0+ is available]),
+ [ZJIT_SUPPORT=$enableval],
+ [AS_CASE(["$JIT_TARGET_OK"],
+ [yes], [
+ rb_zjit_build_possible=no
+ AC_MSG_CHECKING([prerequisites for ZJIT])dnl only checked when --enable-zjit is not specified
+ # Fails in case rustc target doesn't match ruby target. Can happen on Rosetta, for example.
+ # 1.85.0 is the first stable version that supports the 2024 edition.
+ AS_IF([test "$RUSTC" != "no" && echo "#[cfg(target_arch = \"$JIT_TARGET_ARCH\")] fn main() {}" |
+ $RUSTC - --edition=2024 --emit asm=/dev/null 2>/dev/null],
+ AS_IF([test "$gnumake" = "yes"], [
+ rb_zjit_build_possible=yes
+ ])
+ )
+ AC_MSG_RESULT($rb_zjit_build_possible)
+ ZJIT_SUPPORT=$rb_zjit_build_possible
+ ]
+ )]
+)
+
+CARGO_BUILD_ARGS=
+YJIT_LIBS=
+JIT_CARGO_SUPPORT=no
+AS_CASE(["${YJIT_SUPPORT}"],
+[yes|dev|stats|dev_nodebug], [
+ AS_IF([test x"$RUSTC" = "xno"],
+ AC_MSG_ERROR([rustc is required. Installation instructions available at https://www.rust-lang.org/tools/install])
+ )
+
+ AS_CASE(["${YJIT_SUPPORT}"],
+ [yes], [
+ ],
+ [dev], [
+ rb_cargo_features='disasm,runtime_checks'
+ JIT_CARGO_SUPPORT=dev
+ AC_DEFINE(RUBY_DEBUG, 1)
+ ],
+ [dev_nodebug], [
+ rb_cargo_features='disasm'
+ JIT_CARGO_SUPPORT=dev_nodebug
+ AC_DEFINE(YJIT_STATS, 1)
+ ],
+ [stats], [
+ JIT_CARGO_SUPPORT=stats
+ AC_DEFINE(YJIT_STATS, 1)
+ ])
+
+ YJIT_LIBS="target/release/libyjit.a"
+ RUST_LIB='$(YJIT_LIBS)'
+ YJIT_OBJ='yjit.$(OBJEXT)'
+ JIT_OBJ='jit.$(OBJEXT)'
+ AS_IF([test x"$YJIT_SUPPORT" != "xyes" ], [
+ AC_DEFINE_UNQUOTED(YJIT_SUPPORT, [$YJIT_SUPPORT])
+ ])
+ AC_DEFINE(USE_YJIT, 1)
+], [
+ AC_DEFINE(USE_YJIT, 0)
+])
+
+ZJIT_LIBS=
+AS_CASE(["${ZJIT_SUPPORT}"],
+[yes|dev|dev_nodebug|stats], [
+ AS_IF([test x"$RUSTC" = "xno"],
+ AC_MSG_ERROR([rustc is required. Installation instructions available at https://www.rust-lang.org/tools/install])
+ )
+
+ AS_CASE(["${ZJIT_SUPPORT}"],
+ [yes], [
+ ],
+ [dev], [
+ rb_cargo_features="$rb_cargo_features,disasm,runtime_checks"
+ JIT_CARGO_SUPPORT=dev
+ AC_DEFINE(RUBY_DEBUG, 1)
+ ],
+ [dev_nodebug], [
+ rb_cargo_features="$rb_cargo_features,disasm"
+ JIT_CARGO_SUPPORT=dev_nodebug
+ AC_DEFINE(ZJIT_STATS, 1)
+ ],
+ [stats], [
+ JIT_CARGO_SUPPORT=stats
+ AC_DEFINE(ZJIT_STATS, 1)
+ ])
+
+ ZJIT_LIBS="target/release/libzjit.a"
+ RUST_LIB='$(ZJIT_LIBS)'
+ ZJIT_OBJ='zjit.$(OBJEXT)'
+ JIT_OBJ='jit.$(OBJEXT)'
+ AS_IF([test x"$ZJIT_SUPPORT" != "xyes" ], [
+ AC_DEFINE_UNQUOTED(ZJIT_SUPPORT, [$ZJIT_SUPPORT])
+ ])
+ AC_DEFINE(USE_ZJIT, 1)
+], [
+ AC_DEFINE(USE_ZJIT, 0)
+])
+
+RUSTC_FLAGS='-g -C lto=thin -C opt-level=3 -C overflow-checks=on'
+AS_IF([test -n "${rustc_flags}"], [
+ RUSTC_FLAGS="${RUSTC_FLAGS} ${rustc_flags}"
+])
+
+JIT_RUST_FLAGS='--crate-type=staticlib --cfg feature=\"stats_allocator\"'
+RLIB_DIR=
+AS_CASE(["$JIT_CARGO_SUPPORT:$YJIT_SUPPORT:$ZJIT_SUPPORT"],
+[no:yes:yes], [ # release build of YJIT+ZJIT
+ YJIT_LIBS=
+ ZJIT_LIBS=
+ JIT_RUST_FLAGS="--crate-type=rlib"
+ RLIB_DIR="target/release"
+ RUST_LIB="target/release/libruby.a"
+],
+[no:*], [],
+[ # JIT_CARGO_SUPPORT not "no" -- cargo required.
+ AC_CHECK_TOOL(CARGO, [cargo], [no])
+ AS_IF([test x"$CARGO" = "xno"],
+ AC_MSG_ERROR([this build configuration requires cargo. Installation instructions available at https://www.rust-lang.org/tools/install]))
+
+ YJIT_LIBS=
+ ZJIT_LIBS=
+
+ # There's more processing below to get the feature set for the
+ # top-level crate, so capture at this point for feature set of
+ # just the zjit crate.
+ ZJIT_TEST_FEATURES="${rb_cargo_features}"
+
+ AS_IF([test x"${YJIT_SUPPORT}" != x"no"], [
+ rb_cargo_features="$rb_cargo_features,yjit"
+ ])
+ AS_IF([test x"${ZJIT_SUPPORT}" != x"no"], [
+ AC_SUBST(ZJIT_TEST_FEATURES)
+ rb_cargo_features="$rb_cargo_features,zjit"
+ ])
+ # if YJIT and ZJIT release mode
+ AS_IF([test "${YJIT_SUPPORT}:${ZJIT_SUPPORT}" = "yes:yes"], [
+ JIT_CARGO_SUPPORT=release
+ ])
+ CARGO_BUILD_ARGS="--profile ${JIT_CARGO_SUPPORT} --features ${rb_cargo_features}"
+ AS_IF([test "${JIT_CARGO_SUPPORT}" = "dev"], [
+ RUST_LIB="target/debug/libruby.a"
+ ], [
+ RUST_LIB="target/${JIT_CARGO_SUPPORT}/libruby.a"
+ ])
+])
+
+# In case either we're linking rust code
+AS_IF([test -n "$RUST_LIB"], [
+ AS_CASE(["$target_os"],[openbsd*],[
+ # Link libc++abi (which requires libpthread) for _Unwind_* functions needed by rust stdlib
+ LDFLAGS="$LDFLAGS -lpthread -lc++abi"
+ ])
+
+ # absolute path to stop the "target" dir in src dir from interfering through VPATH
+ RUST_LIB="$(pwd)/${RUST_LIB}"
+])
+
+dnl These variables end up in ::RbConfig::CONFIG
+AC_SUBST(RUSTC)dnl Rust compiler command
+AC_SUBST(JIT_RUST_FLAGS)dnl the common rustc flags for JIT crates such as zjit
+AC_SUBST(RUSTC_FLAGS)dnl user-configurable rustc compiler flags
+AC_SUBST(CARGO)dnl Cargo command for Rust builds
+AC_SUBST(CARGO_BUILD_ARGS)dnl for selecting Rust build profiles
+AC_SUBST(YJIT_SUPPORT)dnl what flavor of YJIT the Ruby build includes
+AC_SUBST(YJIT_LIBS)dnl the .a library of YJIT
+AC_SUBST(YJIT_OBJ)dnl for optionally building the C parts of YJIT
+AC_SUBST(ZJIT_SUPPORT)dnl what flavor of ZJIT the Ruby build includes
+AC_SUBST(ZJIT_LIBS)dnl path to the .a library of ZJIT
+AC_SUBST(ZJIT_OBJ)dnl for optionally building the C parts of ZJIT
+AC_SUBST(JIT_OBJ)dnl for optionally building C glue code for Rust FFI
+AC_SUBST(RUST_LIB)dnl path to the rust .a library that contains either or both JITs
+AC_SUBST(RLIB_DIR)dnl subpath of build directory for .rlib files
+AC_SUBST(JIT_CARGO_SUPPORT)dnl "no" or the cargo profile of the rust code
+}
+
+[begin]_group "build section" && {
+AC_CACHE_CHECK([for prefix of external symbols], rb_cv_symbol_prefix, [
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[extern void conftest_external(void) {}]], [[]])],[
+ rb_cv_symbol_prefix=`$NM conftest.$ac_objext |
+ sed -n ['/.*T[ ]\([^ ]*\)conftest_external.*/!d;s//\1/p;q']`
+ ],
+ [rb_cv_symbol_prefix=''])
+ test -n "$rb_cv_symbol_prefix" || rb_cv_symbol_prefix=NONE
+])
+SYMBOL_PREFIX="$rb_cv_symbol_prefix"
+test "x$SYMBOL_PREFIX" = xNONE && SYMBOL_PREFIX=''
+
+AS_IF([test x"$SOEXT" = xdll], [
+ # DLL on Windows is managed by win32/mkexports.rb
+], [test x"$enable_shared" = xyes], [
+ AC_CACHE_CHECK([for default symbols in empty shared library], rb_cv_symbols_in_emptylib, [
+ save_CC="$CC"
+ eval CC=\"`printf "%s" "${DLDSHARED}" | sed ['s/\$(CC)/${CC}/']`\"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM()],[
+ rb_cv_symbols_in_emptylib=`$NM -Pgp conftest$ac_exeext |
+ sed ["/ [A-TV-Z] .*/!d;s///;s/^${SYMBOL_PREFIX}//;/^main$/d"]`
+ ])
+ set dummy ${rb_cv_symbols_in_emptylib}
+ shift
+ rb_cv_symbols_in_emptylib="$*"
+ CC="$save_CC"
+ ])
+])
+AC_SUBST(XSYMBOLS_IN_EMPTYLIB, "${rb_cv_symbols_in_emptylib}")
+
+DLNOBJ=dln.o
+AC_ARG_ENABLE(dln,
+ AS_HELP_STRING([--disable-dln], [disable dynamic link feature]),
+ [test "$enableval" = yes || DLNOBJ=dmydln.o])
+AC_SUBST(DLNOBJ)
+MINIDLNOBJ=dmydln.o
+
+AS_CASE(["$target_os"],
+ [linux*], [
+ ],
+ [netbsd*], [
+ RUBY_APPEND_OPTION(CFLAGS, -pipe)
+ ],
+ [darwin*], [
+ RUBY_TRY_CFLAGS(-pipe, [pipe_opt=yes], [pipe_opt=no])
+ AS_IF([test $pipe_opt = yes], [RUBY_APPEND_OPTION(CFLAGS, -pipe)])
+ AC_MSG_CHECKING([whether Security framework is needed])
+ AC_COMPILE_IFELSE([
+ AC_LANG_BOOL_COMPILE_TRY([
+@%:@include <AvailabilityMacros.h>
+enum {
+ least = MAC_OS_X_VERSION_10_7, /* just fail if undefined */
+ required = MAC_OS_X_VERSION_MIN_REQUIRED,
+ upper /* bigger than MIN_REQUIRED, or */
+@%:@ifdef MAC_OS_X_VERSION_10_10
+ = MAC_OS_X_VERSION_10_10
+@%:@endif
+};],
+ [required >= least && required < upper])],
+ [dnl
+ AC_MSG_RESULT(yes)
+ RUBY_APPEND_OPTION(XLDFLAGS, [-framework Security])
+ RUBY_APPEND_OPTION(LIBRUBYARG_STATIC, [-framework Security])
+ ],dnl
+ [dnl
+ AC_MSG_RESULT(no)
+ ]dnl
+ )
+ RUBY_APPEND_OPTION(XLDFLAGS, [-framework CoreFoundation])
+ RUBY_APPEND_OPTION(LIBRUBYARG_STATIC, [-framework CoreFoundation])
+ ],
+ [osf*], [
+ AS_IF([test "$GCC" != "yes" ], [
+ # compile something small: taint.c is fine for this.
+ # the main point is the '-v' flag of 'cc'.
+ AS_CASE(["`cc -v -I. -c main.c -o /tmp/main.o 2>&1`"],
+ [*/gemc_cc*], [ # we have the new DEC GEM CC
+ CFLAGS="$CFLAGS -oldc"
+ ],
+ [ # we have the old MIPS CC
+ ])
+ # cleanup
+ rm -f /tmp/main.o
+ CFLAGS="$CFLAGS -std"
+ ])
+ ],
+ [cygwin*|msys*|mingw*], [
+ LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)'
+ AS_CASE(["$target_os"],
+ [cygwin*], [
+ AS_IF([test x"$enable_shared" = xyes], [
+ LIBRUBY_SO='cyg$(RUBY_SO_NAME)'.dll
+ LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)'
+ ])
+ ],
+ [mingw*], [
+ AS_IF([test x"$enable_shared" = xyes], [
+ LIBRUBY_SO='$(RUBY_SO_NAME)'.dll
+ LIBRUBY_SONAME=''
+ LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)'
+ ])
+ EXPORT_PREFIX=' '
+ EXTDLDFLAGS='$(DEFFILE)'
+ AC_LIBOBJ([win32/win32])
+ AC_LIBOBJ([win32/file])
+ COMMON_LIBS=m
+# COMMON_MACROS="WIN32_LEAN_AND_MEAN="
+ COMMON_HEADERS="winsock2.h windows.h"
+ PLATFORM_DIR=win32
+ ])
+ LIBRUBY_ALIASES=''
+ AS_IF([test x"$enable_shared" = xyes], [
+ LIBRUBY='lib$(RUBY_SO_NAME).dll.a'
+ ], [
+ LIBRUBY_SO=dummy
+ LIBRUBY='lib$(RUBY_SO_NAME).a'
+ LIBRUBYARG='-l$(RUBY_SO_NAME)'
+ ])
+ ],
+ [wasi*], [
+ AC_LIBOBJ([wasm/missing])
+ AC_LIBOBJ([wasm/runtime])
+ AC_LIBOBJ([wasm/fiber])
+ AC_LIBOBJ([wasm/machine])
+ AC_LIBOBJ([wasm/setjmp])
+ AC_LIBOBJ([wasm/machine_core])
+ AC_LIBOBJ([wasm/setjmp_core])
+ PLATFORM_DIR=wasm
+])
+
+MINIOBJS="$MINIDLNOBJ"
+
+AC_ARG_ENABLE(debug-env,
+ AS_HELP_STRING([--enable-debug-env], [enable RUBY_DEBUG environment variable]),
+ [AC_SUBST(ENABLE_DEBUG_ENV, yes)])
+
+AS_IF([test "$gnumake" = yes], [ NULLCMD=: ], [
+ AC_MSG_CHECKING([for safe null command for ${MAKE-make}])
+ mkdir conftest.dir
+ NULLCMD=
+ for cmd in : true; do
+ echo 'A=1' > conftest.dir/Makefile
+ echo 'B=$(A:1=@'$cmd')' >> conftest.dir/Makefile
+ echo 'all:; $B 1 2 3 4 5 6 7 8 9' >> conftest.dir/Makefile
+ AS_IF([(cd conftest.dir; ${MAKE-make} >/dev/null 2>/dev/null)], [
+ NULLCMD=$cmd
+ break
+ ])
+ done
+ rm -fr conftest.dir
+ AS_IF([test -z "$NULLCMD"], [
+ AC_MSG_ERROR(no candidate for safe null command)
+ ])
+ AC_MSG_RESULT($NULLCMD)
+])
+AC_SUBST(NULLCMD)
+
+AS_IF([test "${universal_binary-no}" = yes ], [
+ AC_CACHE_CHECK([for architecture macros], rb_cv_architecture_macros, [
+ mv confdefs.h confdefs1.h
+ : > confdefs.h
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@if defined __`echo ${universal_archnames} |
+ sed 's/=[^ ]*//g;s/ /__ || defined __/g'`__
+@%:@else
+@%:@error
+>>>>>><<<<<<
+@%:@endif]], [[]])],[
+ rb_cv_architecture_macros=yes
+ mv -f confdefs1.h confdefs.h
+], [
+ rb_cv_architecture_macros=no
+ archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
+ new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'`
+ for archs in ${universal_archnames}; do
+ cpu=${archs@%:@*=}
+ archs=${archs%=*}
+ CFLAGS="$new_cflags -arch $archs"
+ archs="__${archs}__"
+ AC_MSG_CHECKING([for macro ${archs} on ${cpu}])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@ifndef ${archs}
+@%:@error
+@%:@endif]], [[]])],
+ [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])])
+ done
+ mv -f confdefs1.h confdefs.h
+ AC_MSG_ERROR([failed])
+ ])])
+ AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available,
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <stdio.h>
+ const char arch[[]] = __ARCHITECTURE__;]], [[puts(arch);]])],
+ [rb_cv_architecture_available=yes], [rb_cv_architecture_available=no]))
+])
+}
+
+[end]_group
+
+MAINLIBS="$LIBS"
+LIBS=$ORIG_LIBS
+AS_IF([test -n "${LIBS}"], [
+ libspat=`echo "${LIBS}" | sed 's/[[][|.*$^]]/\\&/g;s/^ */ /;s/^ *$/ /'`
+ MAINFLAGS=`echo " $MAINLIBS " | sed "s|$libspat"'||;s/^ *//;s/ *$//'`
+])
+LIBRUBYARG_STATIC="${LIBRUBYARG_STATIC} \$(MAINLIBS)"
+CPPFLAGS="$CPPFLAGS "'$(DEFS)'
+test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}'
+AS_IF([test -n "${cflags+set}"], [
+ cflagspat=`eval echo '"'"${cflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/^ *$/ /'`
+ CFLAGS=`echo " $CFLAGS " | sed "s|$cflagspat"'|${cflags}|;s/^ *//;s/ *$//'`
+])
+AS_IF([test -n "${cxxflags+set}"], [
+ cxxflagspat=`eval echo '"'"${cxxflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/^ *$/ /'`
+ CXXFLAGS=`echo " $CXXFLAGS " | sed "s|$cxxflagspat"'|${cxxflags}|;s/^ *//;s/ *$//'`
+])
+AS_IF([test "${ARCH_FLAG}"], [
+ archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
+ CFLAGS=`echo "$CFLAGS" | sed "s| *$archflagpat"'||'`
+ CXXFLAGS=`echo "$CXXFLAGS" | sed "s| *$archflagpat"'||'`
+ LDFLAGS=`echo "$LDFLAGS" | sed "s| *$archflagpat"'||'`
+])
+AS_CASE([" $rb_cv_warnflags "], [*" -Wshorten-64-to-32 "*|*" -Werror=shorten-64-to-32 "*], [
+ voidp_ll=
+ AS_CASE([$ac_cv_sizeof_voidp],
+ [SIZEOF_LONG_LONG], [voidp_ll=true],
+ [@<:@0-9@:>@*], [
+ AS_IF([test $ac_cv_sizeof_voidp -gt $ac_cv_sizeof_long], [voidp_ll=true])
+ ])
+ AS_IF([test "$voidp_ll"], [
+ # Disable the shorten-64-to-32 warning for now, because it currently
+ # generates a lot of warnings on platforms where `sizeof(void*)` is
+ # larger than `sizeof(long)`.
+ #
+ # TODO: Replace `long` with `ptrdiff_t` or something in the all sources.
+ rb_cv_warnflags=`echo "$rb_cv_warnflags" |
+ sed -e 's/ -W\(shorten-64-to-32 \)/ -Wno-\1/' \
+ -e 's/ -Werror=\(shorten-64-to-32 \)/ -Wno-\1/'`
+ ])
+])
+rb_cv_warnflags=`echo "$rb_cv_warnflags" | sed 's/^ *//;s/ *$//'`
+warnflags="$rb_cv_warnflags"
+AC_SUBST(cppflags)dnl
+AC_SUBST(cflags, ['${hardenflags} '"${orig_cflags:+$orig_cflags }"' ${optflags} ${debugflags} ${warnflags}'])dnl
+AC_SUBST(cxxflags)dnl
+AC_SUBST(optflags)dnl
+AC_SUBST(debugflags)dnl
+AC_SUBST(warnflags)dnl
+AC_SUBST(strict_warnflags)dnl
+AC_SUBST(hardenflags)dnl
+AC_SUBST(XCFLAGS)dnl
+AC_SUBST(XLDFLAGS)dnl
+AC_SUBST(EXTLDFLAGS)dnl
+AC_SUBST(EXTDLDFLAGS)dnl
+AC_SUBST(LIBRUBY_LDSHARED)
+AC_SUBST(LIBRUBY_DLDFLAGS)
+AC_SUBST(RUBY_INSTALL_NAME)
+AC_SUBST(rubyw_install_name)
+AC_SUBST(RUBYW_INSTALL_NAME)
+AC_SUBST(RUBY_SO_NAME)
+AC_SUBST(LIBRUBY_A)
+AC_SUBST(LIBRUBY_SO)
+AC_SUBST(LIBRUBY_SONAME)
+AC_SUBST(LIBRUBY_ALIASES)
+AC_SUBST(LIBRUBY)
+AC_SUBST(LIBRUBYARG)
+AC_SUBST(LIBRUBYARG_STATIC)
+AC_SUBST(LIBRUBYARG_SHARED)
+AC_SUBST(SOLIBS)
+AC_SUBST(DLDLIBS)
+AC_SUBST(DLDSHARED)
+AC_SUBST(ENABLE_SHARED)
+AC_SUBST(MAINLIBS)
+AC_SUBST(COMMON_LIBS)
+AC_SUBST(COMMON_MACROS)
+AC_SUBST(COMMON_HEADERS)
+AC_SUBST(EXPORT_PREFIX)
+AC_SUBST(SYMBOL_PREFIX)
+AC_SUBST(MINIOBJS)
+AC_SUBST(THREAD_MODEL)
+AC_SUBST(COROUTINE_TYPE, ${coroutine_type})
+AC_SUBST(PLATFORM_DIR)
+
+firstmf=`echo $FIRSTMAKEFILE | sed 's/:.*//'`
+firsttmpl=`echo $FIRSTMAKEFILE | sed 's/.*://'`
+MAKEFILES="Makefile $firstmf"
+MAKEFILES="`echo $MAKEFILES`"
+AC_SUBST(MAKEFILES)
+
+ri_prefix=
+test "$program_prefix" != NONE &&
+ ri_prefix=$program_prefix
+
+ri_suffix=
+test "$program_suffix" != NONE &&
+ ri_suffix=$program_suffix
+
+RUBY_INSTALL_NAME="${ri_prefix}"'$(RUBY_BASE_NAME)'"${ri_suffix}"
+AS_CASE(["$target_os"],
+ [cygwin*|msys*|mingw*], [
+ RUBYW_INSTALL_NAME="${ri_prefix}"'$(RUBYW_BASE_NAME)'"${ri_suffix}"
+ rubyw_install_name='$(RUBYW_INSTALL_NAME)'
+ ])
+
+rubylibdir='${rubylibprefix}/${ruby_version}'
+rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'}
+
+rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'}
+AC_ARG_WITH(rubyarchprefix,
+ AS_HELP_STRING([--with-rubyarchprefix=DIR],
+ [prefix for architecture dependent ruby libraries [[RUBYLIBPREFIX/ARCH]]]),
+ [rubyarchprefix="$withval"])
+AC_SUBST(rubyarchprefix)
+
+rubysitearchprefix=${multiarch+'${sitearchlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${sitearch}'}
+AC_ARG_WITH(rubysitearchprefix,
+ AS_HELP_STRING([--with-rubysitearchprefix=DIR],
+ [prefix for architecture dependent site libraries [[RUBYLIBPREFIX/SITEARCH]]]),
+ [rubysitearchprefix="$withval"])
+AC_SUBST(rubysitearchprefix)
+
+RI_BASE_NAME=`echo ${RUBY_BASE_NAME} | sed 's/ruby/ri/'`
+ridir='${datarootdir}/${RI_BASE_NAME}'
+AC_ARG_WITH(ridir,
+ AS_HELP_STRING([--with-ridir=DIR], [ri documentation [[DATAROOTDIR/ri]]]),
+ [ridir=$withval])
+AC_SUBST(ridir)
+AC_SUBST(RI_BASE_NAME)
+
+AC_ARG_WITH(ruby-version,
+ AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|minor|STR)]),
+ [ruby_version=$withval],
+ [ruby_version=full])
+unset RUBY_LIB_VERSION
+unset RUBY_LIB_VERSION_STYLE
+AS_CASE(["$ruby_version"],
+ [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'],
+ [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */'])
+AS_IF([test ${RUBY_LIB_VERSION_STYLE+set}], [
+ {
+ echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
+ echo '@%:@include "confdefs.h"'
+ echo '#define STRINGIZE(x) x'
+ test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
+ echo '#include "version.h"'
+ echo 'ruby_version=RUBY_LIB_VERSION'
+ } > conftest.c
+ ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`"
+ eval $ruby_version
+], [test -z "${ruby_version}"], [
+ AC_MSG_ERROR([No ruby version, No place for bundled libraries])
+], [
+ RUBY_LIB_VERSION="${ruby_version}"
+])
+AC_SUBST(RUBY_LIB_VERSION_STYLE)
+AC_SUBST(RUBY_LIB_VERSION)
+
+AC_ARG_WITH(sitedir,
+ AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]),
+ [sitedir=$withval],
+ [sitedir='${rubylibprefix}/site_ruby'])
+sitelibdir='${sitedir}/${ruby_version}'
+
+AC_ARG_WITH(sitearchdir,
+ AS_HELP_STRING([--with-sitearchdir=DIR],
+ [architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]], "no" to disable site directory]),
+ [sitearchdir=$withval],
+ [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby/${ruby_version}'}${multiarch-'${sitelibdir}/${sitearch}'}])
+
+AC_ARG_WITH(vendordir,
+ AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]),
+ [vendordir=$withval],
+ [vendordir='${rubylibprefix}/vendor_ruby'])
+vendorlibdir='${vendordir}/${ruby_version}'
+
+AC_ARG_WITH(vendorarchdir,
+ AS_HELP_STRING([--with-vendorarchdir=DIR],
+ [architecture dependent vendor libraries in DIR [[VENDORDIR/SITEARCH]], "no" to disable vendor directory]),
+ [vendorarchdir=$withval],
+ [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}])
+
+AS_IF([test "${LOAD_RELATIVE+set}"], [
+ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
+ RUBY_EXEC_PREFIX=''
+])
+
+AC_SUBST(RUBY_EXEC_PREFIX)
+
+AC_SUBST(libdirname, ${multiarch+arch}libdir)
+AC_SUBST(archlibdir)dnl
+AC_SUBST(sitearchlibdir)dnl
+AC_SUBST(archincludedir)dnl
+AC_SUBST(sitearchincludedir)dnl
+AC_SUBST(arch)dnl
+AC_SUBST(sitearch)dnl
+AC_SUBST(ruby_version)dnl
+AC_SUBST(rubylibdir)dnl
+AC_SUBST(rubyarchdir)dnl
+AC_SUBST(sitedir)dnl
+AC_SUBST(sitelibdir)dnl
+AC_SUBST(sitearchdir)dnl
+AC_SUBST(vendordir)dnl
+AC_SUBST(vendorlibdir)dnl
+AC_SUBST(vendorarchdir)dnl
+
+AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl
+AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl
+
+AS_IF([test "${universal_binary-no}" = yes ], [
+ arch="universal-${target_os}"
+ AS_IF([test "${rb_cv_architecture_available}" = yes], [
+ AC_DEFINE_UNQUOTED(RUBY_PLATFORM_CPU, __ARCHITECTURE__)
+ ], [
+ for archs in ${universal_archnames}; do
+ cpu=`echo $archs | sed 's/.*=//'`
+ archs=`echo $archs | sed 's/=.*//'`
+ RUBY_DEFINE_IF([defined __${archs}__ &&! defined RUBY_PLATFORM_CPU], RUBY_PLATFORM_CPU, ["${cpu}"])
+ done
+ ])
+ ints='long int short'
+ test "$ac_cv_type_long_long" = yes && ints="'long long' $ints"
+ AC_SUBST(UNIVERSAL_ARCHNAMES, "${universal_archnames}")
+ AC_SUBST(UNIVERSAL_INTS, "${ints}")
+ AC_DEFINE_UNQUOTED(RUBY_PLATFORM_OS, "${target_os}")
+ AC_DEFINE_UNQUOTED(RUBY_ARCH, "universal-" RUBY_PLATFORM_OS)
+ AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "universal." RUBY_PLATFORM_CPU "-" RUBY_PLATFORM_OS)
+], [
+ AS_IF([test "${target_os}-${rb_cv_msvcrt}" = "mingw32-ucrt" ], [
+ arch="${target_cpu}-mingw-ucrt"
+ ], [
+ arch="${target_cpu}-${target_os}"
+ ])
+ AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "$arch")
+
+ AS_IF([test "$arch" = "s390x-linux"], [
+ AC_DEFINE_UNQUOTED(USE_MN_THREADS, 0)
+ ])
+])
+
+unset sitearch
+AS_CASE(["$target_os"],[mingw*],[sitearch="$target_cpu-$rb_cv_msvcrt"])
+: ${sitearch='${arch}'}
+
+AC_ARG_WITH(search-path,
+ AS_HELP_STRING([--with-search-path=DIR], [specify the additional search path]),
+ [search_path=$withval])
+AS_IF([test "$search_path" != ""], [
+ AC_SUBST(RUBY_SEARCH_PATH, $search_path)
+])
+
+AC_ARG_WITH(rubyhdrdir,
+ AS_HELP_STRING([--with-rubyhdrdir=DIR], [core headers in DIR [[INCLUDEDIR/RUBY_BASE_NAME-RUBY_VERSION]]]),
+ [rubyhdrdir=$withval],
+ [rubyhdrdir='${includedir}/${RUBY_VERSION_NAME}'])
+
+AC_ARG_WITH(rubyarchhdrdir,
+ AS_HELP_STRING([--with-rubyarchhdrdir=DIR],
+ [architecture dependent core headers in DIR [[$(rubyhdrdir)/$(arch)]]]),
+ [rubyarchhdrdir=$withval],
+ [rubyarchhdrdir=${multiarch+'${archincludedir}/${RUBY_VERSION_NAME}'}${multiarch-'${rubyhdrdir}/${arch}'}])
+
+AC_ARG_WITH(sitehdrdir,
+ AS_HELP_STRING([--with-sitehdrdir=DIR], [core site headers in DIR [[RUBYHDRDIR/site_ruby]]]),
+ [sitehdrdir=$withval],
+ [sitehdrdir='${rubyhdrdir}/site_ruby'])
+
+AC_ARG_WITH(sitearchhdrdir,
+ AS_HELP_STRING([--with-sitearchhdrdir=DIR],
+ [architecture dependent core site headers in DIR [[RUBYHDRDIR/site_ruby]]]),
+ [sitearchhdrdir=$withval],
+ [sitearchhdrdir=${multiarch+'${sitearchincludedir}/${RUBY_VERSION_NAME}/site_ruby'}${multiarch-'${sitehdrdir}/${sitearch}'}])
+
+AC_ARG_WITH(vendorhdrdir,
+ AS_HELP_STRING([--with-vendorhdrdir=DIR], [core vendor headers in DIR [[RUBYHDRDIR/vendor_ruby]]]),
+ [vendorhdrdir=$withval],
+ [vendorhdrdir='${rubyhdrdir}/vendor_ruby'])
+
+AC_ARG_WITH(vendorarchhdrdir,
+ AS_HELP_STRING([--with-vendorarchhdrdir=DIR],
+ [architecture dependent core vendor headers in DIR [[RUBYHDRDIR/vendor_ruby]]]),
+ [vendorarchhdrdir=$withval],
+ [vendorarchhdrdir=${multiarch+'${sitearchincludedir}/${RUBY_VERSION_NAME}/vendor_ruby'}${multiarch-'${vendorhdrdir}/${sitearch}'}])
+
+AC_SUBST(rubyhdrdir)dnl
+AC_SUBST(sitehdrdir)dnl
+AC_SUBST(vendorhdrdir)dnl
+AC_SUBST(rubyarchhdrdir)dnl
+AC_SUBST(sitearchhdrdir)dnl
+AC_SUBST(vendorarchhdrdir)dnl
+
+AC_ARG_WITH(mantype,
+ AS_HELP_STRING([--with-mantype=TYPE], [specify man page type; TYPE is one of man and doc]),
+ [
+ AS_CASE(["$withval"],
+ [man|man.gz|man.bz2|doc|doc.gz|doc.bz2], [MANTYPE=$withval],
+ [AC_MSG_ERROR(invalid man type: $withval)])
+ ])
+AS_IF([test -z "$MANTYPE"], [
+ dnl Looks for nroff with -mdoc support.
+ AC_CACHE_VAL([ac_cv_path_NROFF], [
+ AC_PATH_PROGS_FEATURE_CHECK([NROFF],
+ [nroff awf mandoc],
+ [$ac_path_NROFF -mdoc ${srcdir}/man/ruby.1 \
+ >/dev/null 2>&1 &&
+ ac_cv_path_NROFF=$ac_path_NROFF \
+ ac_path_NROFF_found=:],
+ [], ["/usr/bin:/usr/ucb"]
+ )
+ ])
+ AS_IF([test -n "$ac_cv_path_NROFF"], [
+ MANTYPE=doc
+ ], [
+ MANTYPE=man
+ ])
+])
+AC_SUBST(MANTYPE)
+
+MKMF_VERBOSE=0
+AC_ARG_ENABLE(mkmf-verbose,
+ AS_HELP_STRING([--enable-mkmf-verbose], [enable verbose in mkmf]),
+ [MKMF_VERBOSE=1],
+ [MKMF_VERBOSE=0])
+AC_SUBST(MKMF_VERBOSE)
+
+AC_ARG_ENABLE(rubygems,
+ AS_HELP_STRING([--disable-rubygems], [disable rubygems by default]),
+ [enable_rubygems="$enableval"], [enable_rubygems=yes])
+AS_IF([test x"$enable_rubygems" = xno], [
+ USE_RUBYGEMS=no
+], [
+ USE_RUBYGEMS=yes
+])
+AC_SUBST(USE_RUBYGEMS)
+
+m4_define(available_parsers, [parse.y, prism])
+AC_ARG_WITH(parser,
+ AS_HELP_STRING([--with-parser=PARSER],
+ [specify default parser; PARSER is one of ]m4_join([, ],available_parsers)),
+ [], [with_parser=prism])
+AS_CASE([$with_parser],
+m4_foreach(parser, [available_parsers],
+ parser[,][AC_DEFINE_UNQUOTED(RB_DEFAULT_PARSER, RB_DEFAULT_PARSER_[]AS_TR_CPP(parser)),])
+ [AC_MSG_ERROR([Unknown parser: $with_parser])]
+)
+
+arch_hdrdir="${EXTOUT}/include/${arch}/ruby"
+AS_MKDIR_P("${arch_hdrdir}")
+config_h="${arch_hdrdir}/config.h"
+guard=INCLUDE_RUBY_CONFIG_H
+{
+ echo "#ifndef $guard"
+ echo "#define $guard 1"
+ sed "/^@%:@define PACKAGE_/d;s/ *$//" confdefs.h
+ echo "#endif /* $guard */"
+} | tr -d '\015' |
+(
+ AS_IF([test "x$CONFIGURE_TTY" = xyes], [color=--color], [color=])
+ exec ${SHELL} ${tooldir}/ifchange $color "${config_h}" -
+) >&AS_MESSAGE_FD || AC_MSG_ERROR([failed to create ${config_h}])
+tr -d '\015' < largefile.h > confdefs.h
+rm largefile.h
+
+BUILTIN_ENCS=["`sed -n -e '/^BUILTIN_ENCS[ ]*=/{' \
+ -e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \
+ -e '}' "${srcdir}/enc/Makefile.in"`"]
+BUILTIN_ENCOBJS=
+for e in $BUILTIN_ENCS; do BUILTIN_ENCOBJS="$BUILTIN_ENCOBJS "`echo $e | sed 's/\.c$/.$(OBJEXT)/'`; done
+AC_SUBST(BUILTIN_ENCOBJS)
+
+BUILTIN_TRANSES=["`sed -n -e '/^BUILTIN_TRANSES[ ]*=/{' \
+ -e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \
+ -e '}' "${srcdir}/enc/Makefile.in"`"]
+BUILTIN_TRANSSRCS=
+BUILTIN_TRANSOBJS=
+for e in $BUILTIN_TRANSES; do
+ BUILTIN_TRANSSRCS="$BUILTIN_TRANSSRCS "`echo $e | sed 's/\.trans$/.c/'`
+ BUILTIN_TRANSOBJS="$BUILTIN_TRANSOBJS "`echo $e | sed 's/\.trans$/.$(OBJEXT)/'`
+done
+AC_SUBST(BUILTIN_TRANSSRCS)
+AC_SUBST(BUILTIN_TRANSOBJS)
+
+PACKAGE=$RUBY_BASE_NAME
+AC_SUBST(PACKAGE)
+AS_MESSAGE([$PACKAGE library version = $ruby_version])
+
+AS_IF([test x"$CC_WRAPPER" != x], [
+ CC='$(CC_WRAPPER) '"${CC@%:@$CC_WRAPPER }"
+ CPP='$(CC_WRAPPER) '"${CPP@%:@$CC_WRAPPER }"
+ XCC_WRAPPER="$CC_WRAPPER"
+])
+AC_SUBST(CC_WRAPPER, '')
+AC_SUBST(XCC_WRAPPER)
+
+AS_CASE([" $CPP "], [*" $CC "*], [CPP=`echo " $CPP " | sed "s| $CC |"' $(CC) |;s/^ *//;s/ *$//'`])
+
+AS_IF([test ! -f "$srcdir/revision.h"], [
+ AS_IF([test "x$HAVE_BASERUBY" = xyes], [
+ ${BASERUBY} -C "$srcdir" tool/file2lastrev.rb -q --revision.h > "$srcdir/revision.h"
+ ], [
+ touch "$srcdir/revision.h"
+ ])
+])
+
+AS_IF([test x"$firstmf" != x], [
+ AC_CONFIG_FILES($firstmf:$firsttmpl, [], [firstmf="$firstmf" firsttmpl="$firsttmpl"])
+])
+AC_CONFIG_FILES(Makefile:template/Makefile.in, [
+ tmpmk=confmk$$.tmp
+ {
+ AS_IF([test ${VCS+set}], [
+ :
+ ], [git_dir=`$GIT --work-tree="$srcdir" --git-dir="$srcdir/.git" rev-parse --git-dir 2>/dev/null`], [
+ VCS='$(GIT)'
+ ], [
+ VCS='echo cannot'
+ ])
+ AS_CASE("$VCS",
+ ['$(GIT)'|git], [VCSUP='$(VCS) pull --rebase $(GITPULLOPTIONS)'],
+ [VCSUP='$(VCS)'])
+ for f in "$srcdir/version.h" "$srcdir/revision.h"; do
+ test -f "$f" || continue
+ sed -n \
+ -e '[/^@%:@define \(RUBY_RELEASE_[A-Z]*\) \([0-9][0-9]*\)/]{' \
+ -e 's//\1 = \2/' \
+ -e '[s/ \([0-9]\)$/ 0\1/]' \
+ -e p \
+ -e '}' "$f"
+ done
+ sed '/^MISSING/s/\$U\././g;/^VCS *=/s#@VCS@#'"$VCS"'#;/^VCSUP *=/s#@VCSUP@#'"$VCSUP"'#' Makefile
+ echo; test x"$EXEEXT" = x || echo 'miniruby: miniruby$(EXEEXT)'
+ AS_IF([test "$gnumake" != yes], [
+ # extract NMake-style include list
+ set = `sed -n 's/^!include *//p' ${srcdir}/common.mk`
+ echo common_mk_includes "@S|@*" # generate the macro assignment
+ shift
+ common_mk_includes="`echo \"@S|@*\" | sed 's|\$(srcdir)|.|g'`"
+ (PWD= cd ${srcdir} && sed -f tool/prereq.status common.mk ${common_mk_includes})
+ AS_IF([test "$YJIT_SUPPORT" = yes], [
+ cat ${srcdir}/yjit/not_gmake.mk
+ echo ['$(MKFILES): ${srcdir}/yjit/not_gmake.mk']
+ ])
+ ], [
+ echo 'distclean-local::; @$(RM) GNUmakefile uncommon.mk'
+ ])
+
+ echo; echo '$(srcdir)/$(CONFIGURE):RUBY_M4_INCLUDED \
+ $(empty)'
+ } > $tmpmk && mv -f $tmpmk Makefile],
+[EXEEXT='$EXEEXT' MAKE='${MAKE-make}' gnumake='$gnumake' GIT='$GIT' YJIT_SUPPORT='$YJIT_SUPPORT'])
+
+AC_ARG_WITH([ruby-pc],
+ AS_HELP_STRING([--with-ruby-pc=FILENAME], [pc file basename]),
+ [ruby_pc="$withval"],
+ [ruby_pc="${RUBY_BASE_NAME}-${MAJOR}.${MINOR}.pc"])
+AC_SUBST(ruby_pc)
+AC_SUBST(exec, [exec])
+
+AC_ARG_WITH(destdir,
+ AS_HELP_STRING([--with-destdir=DESTDIR], [specify default directory to install]),
+ [DESTDIR="$withval"])
+AC_SUBST(DESTDIR)
+
+AS_IF([test "x$load_relative:$DESTDIR" = xyes:], [
+ AS_IF([test "x$prefix" = xNONE], [DESTDIR="$ac_default_prefix"], [DESTDIR="$prefix"])
+ prefix=/.
+])
+
+AC_OUTPUT
+}
+
+AS_IF([test "$silent" = yes], [], [
+AS_IF([${FOLD+:} false], [], [
+AS_IF([test "`echo abcdefg hijklmno | fold -s -w10 | sed 1d`" = hijklmno], [FOLD="fold"], [FOLD=])
+])
+fold_width=`expr $COLUMNS - 30 2>/dev/null` || fold_width=50
+AS_REQUIRE_SHELL_FN([config_summary],
+ [AS_FUNCTION_DESCRIBE([config_summary], [NAME, VAL], [configuration summary])],
+ [AS_IF([test -z "$2"], [], [
+ AS_ECHO_N([" * $1: "]) | dd bs=1 count=26 2>/dev/null
+ AS_IF([test "$FOLD"], [
+ echo "$2" | fold -s -w$fold_width |
+ sed '1!s/^/ /;$!s/$/\\/'
+ ], [echo "$2"])
+ ])]
+)
+
+AS_IF([test $install_doc = yes],
+ [DOCTARGETS=`echo " $RDOCTARGET $CAPITARGET " | sed 's/ nodoc //g;s/^ *//;s/ *$//'`],
+ [DOCTARGETS=no])
+echo "---"
+echo "Configuration summary for $RUBY_BASE_NAME version $MAJOR.$MINOR.$TEENY"
+echo ""
+config_summary "Installation prefix" "$prefix"
+config_summary "exec prefix" "$exec_prefix"
+config_summary "arch" "$arch"
+config_summary "site arch" "$sitearch"
+config_summary "RUBY_BASE_NAME" "$RUBY_BASE_NAME"
+config_summary "enable shared" "$enable_shared"
+config_summary "ruby lib prefix" "$rubylibprefix"
+config_summary "site libraries path" "$rubysitearchprefix"
+config_summary "vendor path" "$vendordir"
+config_summary "target OS" "$target_os"
+config_summary "compiler" "$CC"
+config_summary "with thread" "$THREAD_MODEL"
+config_summary "with coroutine" "$coroutine_type"
+config_summary "with modular GC" "$modular_gc_summary"
+config_summary "enable shared libs" "$ENABLE_SHARED"
+config_summary "dynamic library ext" "$DLEXT"
+config_summary "CFLAGS" "$cflags"
+config_summary "CPPFLAGS" "$cppflags"
+config_summary "LDFLAGS" "$LDFLAGS"
+config_summary "DLDFLAGS" "$DLDFLAGS"
+config_summary "optflags" "$optflags"
+config_summary "debugflags" "$debugflags"
+config_summary "warnflags" "$warnflags"
+config_summary "hardenflags" "$hardenflags"
+config_summary "strip command" "$STRIP"
+config_summary "install doc" "$DOCTARGETS"
+config_summary "YJIT support" "$YJIT_SUPPORT"
+config_summary "ZJIT support" "$ZJIT_SUPPORT"
+config_summary "RUSTC_FLAGS" "$RUSTC_FLAGS"
+config_summary "man page type" "$MANTYPE"
+config_summary "search path" "$search_path"
+config_summary "static-linked-ext" ${EXTSTATIC:+"yes"}
+config_summary "BASERUBY -v" "$BASERUBY_VERSION"
+echo ""
+echo "---"
+])
diff --git a/configure.in b/configure.in
deleted file mode 100644
index 4e66b374f9..0000000000
--- a/configure.in
+++ /dev/null
@@ -1,4483 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-AC_INIT()
-{
-AC_CONFIG_AUX_DIR(tool)
-
-AC_PREREQ(2.67)
-
-AC_DEFUN([RUBY_PREREQ_AC],
- [m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [$1]), [-1],
- AC_MSG_ERROR([Autoconf version ]$1[ or higher is required]$2))])
-
-AC_DISABLE_OPTION_CHECKING
-
-AC_ARG_VAR([cflags], [additional CFLAGS])
-AC_ARG_VAR([cppflags], [additional CPPFLAGS])
-AC_ARG_VAR([cxxflags], [additional CXXFLAGS])
-
-AC_DEFUN([RUBY_RM_RECURSIVE], [
-m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [2.70]), [-1], [
-# suppress error messages, rm: cannot remove 'conftest.dSYM', from
-# AC_EGREP_CPP with CFLAGS=-g on Darwin.
-#
-# TODO: remove this hack when AC_PREREQ() becomes 2.70 or later.
-AS_CASE([$build_os], [darwin*], [
-rm() {
- rm_recursive=''
- for arg do
- AS_CASE("$arg",
- [--*], [],
- [-*r*], [break],
- [conftest.*], [if test -d "$arg"; then rm_recursive=-r; break; fi],
- [])
- done
- command rm $rm_recursive "[$]@"
-}
-])])])
-
-{ # environment section
-
-AC_ARG_WITH(baseruby,
- AS_HELP_STRING([--with-baseruby=RUBY], [use RUBY as baseruby; RUBY is the pathname of ruby]),
- [
- AS_CASE(["$withval"],[*ruby*],[BASERUBY=$withval],[AC_MSG_ERROR(need ruby)])
- ],
- [
- AC_PATH_PROG([BASERUBY], [ruby], [false])
- ])
-if test "`RUBYOPT=- $BASERUBY -e 'print 42' 2>/dev/null`" = 42; then
- if test "`RUBYOPT=- $BASERUBY --disable=gems -e 'print 42' 2>/dev/null`" = 42; then
- BASERUBY="$BASERUBY --disable=gems"
- fi
- $BASERUBY -C "$srcdir/tool" downloader.rb -e gnu config.guess config.sub
- HAVE_BASERUBY=yes
-else
- BASERUBY="echo executable host ruby is required. use --with-baseruby option.; false"
- HAVE_BASERUBY=no
-fi
-AC_SUBST(BASERUBY)
-AC_SUBST(HAVE_BASERUBY)
-
-AC_DEFUN([RUBY_MINGW32],
-[AS_CASE(["$host_os"],
-[cygwin*], [
-AC_CACHE_CHECK(for mingw32 environment, rb_cv_mingw32,
-[AC_TRY_CPP([
-#ifndef __MINGW32__
-# error
-#endif
-], rb_cv_mingw32=yes,rb_cv_mingw32=no)
-rm -f conftest*])
-if test "$rb_cv_mingw32" = yes; then
- target_os="mingw32"
- : ${ac_tool_prefix:="`expr "$CC" : ['\(.*-\)g\?cc[^/]*$']`"}
-fi
-])
-AS_CASE(["$target_os"], [mingw*msvc], [
-target_os="`echo ${target_os} | sed 's/msvc$//'`"
-])
-AS_CASE(["$target_cpu-$target_os"], [x86_64-mingw*], [
-target_cpu=x64
-])
-])
-
-AC_DEFUN([RUBY_NACL],
-[
- AS_CASE(["${host_os}"],
-[nacl], [
- ac_cv_exeext=.nexe
- host_vendor=chromium
- ac_cv_host=chromium
- AC_MSG_CHECKING([wheather \$NACL_SDK_ROOT is set])
- if test x"${NACL_SDK_ROOT}" = x; then
- AC_MSG_RESULT([no])
- AC_MSG_ERROR([You need to set \$NACL_SDK_ROOT environment variable to build for NativeClient])
- fi
- AC_MSG_RESULT([yes])
-
- nacl_cv_build_variant=glibc
- AC_ARG_WITH(newlib,
- AS_HELP_STRING([--with-newlib], [uses newlib version of NativeClient SDK]),
- [AS_CASE([$withval],
- [no], [nacl_cv_build_variant=glibc],
- [yes], [nacl_cv_build_variant=newlib])])
-
- AS_CASE(["$target_cpu"],
- [x86_64], [nacl_cv_cpu_nick=x86
- nacl_cv_cpu_nick2=x86_64],
- [i?86], [nacl_cv_cpu_nick=x86
- nacl_cv_cpu_nick2=x86_32],
- [le32], [nacl_cv_cpu_nick=pnacl
- nacl_cv_cpu_nick2=pnacl
- ac_cv_exeext=.pexe],
- [nacl_cv_cpu_nick=$target_cpu])
- AS_CASE(["$build_os"],
- [linux*], [nacl_cv_os_nick=linux],
- [darwin*], [nacl_cv_os_nick=mac],
- [cygwin*|mingw*], [nacl_cv_os_nick=win],
- [nacl_cv_os_nick=$build_os])
-
- host="$host_cpu-chromium-$host_os-"
- ac_tool_prefix="$host_cpu-nacl-"
-
- AC_MSG_CHECKING([NativeClient toolchain])
- if test x"$nacl_cv_cpu_nick" = xpnacl; then
- NACL_TOOLCHAIN="${nacl_cv_os_nick}_pnacl"
- ac_tool_prefix=pnacl-
- elif test -d \
- "${NACL_SDK_ROOT}/toolchain/${nacl_cv_os_nick}_${nacl_cv_cpu_nick}_${nacl_cv_build_variant}"; then
- NACL_TOOLCHAIN="${nacl_cv_os_nick}_${nacl_cv_cpu_nick}_${nacl_cv_build_variant}"
- elif test -d \
- "${NACL_SDK_ROOT}/toolchain/${nacl_cv_os_nick}_x86_${nacl_cv_cpu_nick}/${nacl_cv_build_variant}"; then
- NACL_TOOLCHAIN="${nacl_cv_os_nick}_x86_${nacl_cv_cpu_nick}/${nacl_cv_build_variant}"
- else
- AS_CASE(
- ["${nacl_cv_build_variant}"],
- [glibc], [if test \
- -d "${NACL_SDK_ROOT}/toolchain/${nacl_cv_os_nick}_${nacl_cv_cpu_nick}_newlib" \
- -a -d "${NACL_SDK_ROOT}/toolchain/${nacl_cv_os_nick}_${nacl_cv_cpu_nick}"; then
- NACL_TOOLCHAIN="${nacl_cv_os_nick}_${nacl_cv_cpu_nick}"
- fi],
- [newlib], [ NACL_TOOLCHAIN="${nacl_cv_os_nick}_${nacl_cv_cpu_nick}" ])
- fi
- if test ! -e "${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/${ac_tool_prefix}gcc"; then
- if test "${build_cpu}" = i686 -a -e "${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/nacl-gcc"; then
- ac_tool_prefix=nacl-
- fi
- if test "${build_cpu}" = x86_64 -a -e "${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/nacl-gcc"; then
- ac_tool_prefix=nacl64-
- fi
- fi
- if test -z "${NACL_TOOLCHAIN}"; then
- AC_MSG_ERROR([Unrecognized --host and --build combination or NaCl SDK is not installed])
- fi
- AC_MSG_RESULT(${NACL_TOOLCHAIN})
-
- AC_MSG_CHECKING([path to SDK])
- if ! echo -- "${PATH}" | grep -F "${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/bin" > /dev/null; then
- PATH="${PATH}:${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/bin"
- fi
- AC_MSG_RESULT(${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/bin)
-
- RUBY_APPEND_OPTIONS(XCFLAGS, '-I$(NACL_SDK_ROOT)/include')
- if test x"${nacl_cv_cpu_nick}" = xpnacl; then
- RUBY_APPEND_OPTIONS(XCFLAGS, '-isystem $(NACL_SDK_ROOT)/include/pnacl')
- elif test x"${nacl_cv_build_variant}" = xnewlib; then
- RUBY_APPEND_OPTIONS(XCFLAGS, '-isystem $(NACL_SDK_ROOT)/include/newlib')
- fi
-
- AC_MSG_CHECKING([nacl library path])
- if test -d "${NACL_SDK_ROOT}/lib/${nacl_cv_build_variant}_${nacl_cv_cpu_nick2}/Release"; then
- nacl_cv_libpath="${nacl_cv_build_variant}_${nacl_cv_cpu_nick2}"
- elif test -d "${NACL_SDK_ROOT}/lib/${nacl_cv_cpu_nick2}/Release"; then
- nacl_cv_libpath="${nacl_cv_cpu_nick2}"
- else
- AC_MSG_ERROR([not found])
- fi
- AC_MSG_RESULT([${nacl_cv_libpath}])
- RUBY_APPEND_OPTIONS(XLDFLAGS, '-L$(NACL_SDK_ROOT)/'"lib/${nacl_cv_libpath}/Release")
-
- AC_SUBST(NACL_TOOLCHAIN)
- AC_SUBST(NACL_SDK_ROOT)
- AC_SUBST(NACL_SDK_VARIANT, "${nacl_cv_build_variant}")
- AC_SUBST(NACL_LIB_PATH, "${nacl_cv_libpath}")
- AC_CHECK_TOOLS(CC, [clang gcc])
- AC_CHECK_TOOLS(CXX, [clang++ g++])
-])])
-
-AC_DEFUN([RUBY_NACL_CHECK_PEPPER_TYPES],
-[AS_CASE(["${host_os}"],
-[nacl], [
- AC_CHECK_TYPES([struct PPB_Core, struct PPB_Messaging, struct PPB_Var,
- struct PPB_URLLoader, struct PPB_URLRequestInfo,
- struct PPB_URLResponseInfo, struct PPB_FileRef,
- struct PPP_Instance])
-])
-])
-
-AC_DEFUN([RUBY_CPPOUTFILE],
-[AC_CACHE_CHECK(whether ${CPP} accepts -o, rb_cv_cppoutfile,
-[save_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS='-o conftest-1.i'
-rb_cv_cppoutfile=no
-AC_TRY_CPP([test-for-cppout],
- [grep test-for-cppout conftest-1.i > /dev/null && rb_cv_cppoutfile=yes])
-CPPFLAGS="$save_CPPFLAGS"
-rm -f conftest*])
-if test "$rb_cv_cppoutfile" = yes; then
- CPPOUTFILE='-o conftest.i'
-elif test "$rb_cv_cppoutfile" = no; then
- CPPOUTFILE='> conftest.i'
-elif test -n "$rb_cv_cppoutfile"; then
- CPPOUTFILE="$rb_cv_cppoutfile"
-fi
-AC_SUBST(CPPOUTFILE)])
-
-AC_DEFUN([RUBY_PROG_GNU_LD],
-[AC_CACHE_CHECK(whether the linker is GNU ld, rb_cv_prog_gnu_ld,
-[if `$CC $CFLAGS $CPPFLAGS $LDFLAGS --print-prog-name=ld 2>&1` -v 2>&1 | grep "GNU ld" > /dev/null; then
- rb_cv_prog_gnu_ld=yes
-else
- rb_cv_prog_gnu_ld=no
-fi
-])
-GNU_LD=$rb_cv_prog_gnu_ld
-AC_SUBST(GNU_LD)])
-
-eval `sed -n ['s/^@%:@define RUBY_API_VERSION_\([A-Z][A-Z_0-9]*\) \([0-9][0-9]*\)/API_\1=\2/p'] $srcdir/include/ruby/version.h`
-RUBY_PROGRAM_VERSION=`sed -n 's/^@%:@define RUBY_VERSION "\(.*\)"/\1/p' $srcdir/version.h`
-MAJOR=`echo $RUBY_PROGRAM_VERSION | cut -d. -f1`
-MINOR=`echo $RUBY_PROGRAM_VERSION | cut -d. -f2`
-TEENY=`echo $RUBY_PROGRAM_VERSION | cut -d. -f3`
-for v in MAJOR MINOR TEENY; do
- if eval "test \"\$$v\" = ''"; then
- AC_MSG_ERROR(could not determine $v number from version.h)
- fi
-done
-AS_IF([test "$MAJOR.$MINOR" != "$API_MAJOR.$API_MINOR"], [
- AC_MSG_ERROR([API version $API_MAJOR.$API_MINOR differs from program version $MAJOR.$MINOR])
-])
-AC_SUBST(MAJOR)
-AC_SUBST(MINOR)
-AC_SUBST(TEENY)
-AC_SUBST(RUBY_PROGRAM_VERSION)
-RUBY_PATCHLEVEL=`sed -n 's/^#define RUBY_PATCHLEVEL //p' $srcdir/version.h`
-AC_DEFINE(CANONICALIZATION_FOR_MATHN)
-dnl checks for alternative programs
-AC_CANONICAL_BUILD
-RUBY_RM_RECURSIVE
-AC_ARG_WITH(gcc,
- AS_HELP_STRING([--without-gcc], [never use gcc]),
- [
- AS_CASE([$withval],
- [no], [: ${CC=cc}],
- [yes], [: ${CC=gcc}],
- [CC=$withval])])
-dnl If the user switches compilers, we can't believe the cache
-if test ! -z "$ac_cv_prog_CC" -a ! -z "$CC" -a "$CC" != "$ac_cv_prog_CC"
-then
- AC_MSG_ERROR(cached CC is different -- throw away $cache_file
-(it is also a good idea to do 'make clean' before compiling))
-fi
-AS_CASE(["$build_os"],
- [darwin1*.*], [
- AS_CASE(["x$CC"],
- [xgcc-4.2|x/usr/bin/gcc-4.2], [: ${CXX=g++-4.2}],
- [xgcc|x/usr/bin/gcc], [: ${CXX=g++}],
- [xcc|x/usr/bin/cc], [: ${CXX=c++}],
- [xicc], [: ${CXX=icpc}],
- [xclang|x/usr/bin/clang], [: ${CXX=clang++}])
- ])
-test -z "$CC" || ac_cv_prog_CC="$CC"
-test -z "$CXX" || ac_cv_prog_CXX="$CXX"
-
-if test "$program_prefix" = NONE; then
- program_prefix=
-fi
-if test "$prefix" -ef .; then
- AC_MSG_ERROR(--prefix cannot be the current working directory.)
-fi
-RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"`
-RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"`
-AC_SUBST(RUBY_BASE_NAME)
-AC_SUBST(RUBYW_BASE_NAME)
-AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version}')
-
-AC_CANONICAL_TARGET
-test x"$target_alias" = x &&
-target_os=`echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'`
-ac_install_sh='' # unusable for extension libraries.
-
-AC_ARG_WITH(os-version-style,
- AS_HELP_STRING([--with-os-version-style=TYPE],
- [OS version number for target and target_os [[full]]]
- [(full|teeny|minor+0|minor|major+0|major|none)]),
- [os_version_style=$withval],
- [os_version_style=full
- AS_CASE($target_os, [[*[0-9].*]],
- [AS_CASE([`/usr/bin/ruby -e 'puts RUBY_PLATFORM' 2>/dev/null`],
- [[*-*[0-9].*.0]], [os_version_style=minor+0],
- [[*-*[0-9].*.*]], [os_version_style=full],
- [[*-*[0-9].0] ], [os_version_style=major+0],
- [[*-*[0-9].*] ], [os_version_style=minor],
- [[*-*[0-9]] ], [os_version_style=major],
- )])
- ])
-os_version_style_transform=
-AS_CASE("${os_version_style}",
- [full|teeny], [],
- [minor+0], [os_version_style_transform=['s/\([0-9]\.[0-9][0-9]*\)\.[0-9][.0-9]*$/\1.0/']],
- [minor], [os_version_style_transform=['s/\([0-9]\.[0-9][0-9]*\)\.[0-9][.0-9]*$/\1/']],
- [major+0], [os_version_style_transform=['s/\([0-9]\)\.[0-9][.0-9]*$/\1.0/']],
- [major], [os_version_style_transform=['s/\([0-9]\)\.[0-9][.0-9]*$/\1/']],
- [none], [os_version_style_transform=['s/[0-9]\.[0-9][.0-9]*$//']],
- [AC_MSG_ERROR(unknown --with-os-version-style: $withval)])
-AS_IF([test -z "$target_alias" -a -n "$os_version_style_transform"],
- [
- target=`echo ${target} | sed "$os_version_style_transform"`
- target_os=`echo ${target_os} | sed "$os_version_style_transform"`
- ])
-
-AC_DEFUN([RUBY_APPEND_OPTION],
- [# RUBY_APPEND_OPTION($1)
- AS_CASE([" [$]{$1-} "],
- [*' $2 '*], [], [' '], [ $1="$2"], [ $1="[$]$1 $2"])])
-AC_DEFUN([RUBY_APPEND_OPTIONS],
- [# RUBY_APPEND_OPTIONS($1)
- for rb_opt in $2; do
- AS_CASE([" [$]{$1-} "],
- [*" [$]{rb_opt} "*], [], [' '], [ $1="[$]{rb_opt}"], [ $1="[$]$1 [$]{rb_opt}"])
- done])
-AC_DEFUN([RUBY_PREPEND_OPTION],
- [# RUBY_PREPEND_OPTION($1)
- AS_CASE([" [$]{$1-} "],
- [*' $2 '*], [], [' '], [ $1="$2"], [ $1="$2 [$]$1"])])
-AC_DEFUN([RUBY_PREPEND_OPTIONS],
- [# RUBY_PREPEND_OPTIONS($1)
- unset rb_opts; for rb_opt in $2; do
- AS_CASE([" [$]{rb_opts} [$]{$1-} "],
- [*" [$]{rb_opt} "*], [], [' '], [ $1="[$]{rb_opt}"], [ rb_opts="[$]{rb_opts}[$]{rb_opt} "])
- done
- $1="[$]{rb_opts}[$]$1"])
-
-AC_ARG_WITH(arch,
- AS_HELP_STRING([--with-arch=ARCHS],
- [build an Apple/NeXT Multi Architecture Binary (MAB);
- ARCHS is a comma-delimited list of architectures for
- which to build; if this option is disabled or omitted
- entirely, then the package will be built only for the
- target platform]),
- [target_archs="$withval"], [unset target_archs])
-
-AC_DEFUN([RUBY_DEFAULT_ARCH], [
-AC_MSG_CHECKING([arch option])
-AS_CASE([$1],
- [*64], [ARCH_FLAG=-m64],
- [[i[3-6]86]], [ARCH_FLAG=-m32],
- [AC_MSG_ERROR(unknown target architecture: $target_archs)]
- )
-AC_MSG_RESULT([$ARCH_FLAG])
-])
-
-AC_DEFUN([RUBY_UNIVERSAL_ARCH], [
-# RUBY_UNIVERSAL_ARCH begin
-ARCH_FLAG=`expr " $CXXFLAGS " : ['.* \(-m[0-9][0-9]*\) ']`
-test ${CXXFLAGS+set} && CXXFLAGS=`echo "$CXXFLAGS" | sed [-e 's/ *-arch *[^ ]*//g' -e 's/ *-m32//g' -e 's/ *-m64//g']`
-ARCH_FLAG=`expr " $CFLAGS " : ['.* \(-m[0-9][0-9]*\) ']`
-test ${CFLAGS+set} && CFLAGS=`echo "$CFLAGS" | sed [-e 's/ *-arch *[^ ]*//g' -e 's/ *-m32//g' -e 's/ *-m64//g']`
-test ${LDFLAGS+set} && LDFLAGS=`echo "$LDFLAGS" | sed [-e 's/ *-arch *[^ ]*//g' -e 's/ *-m32//g' -e 's/ *-m64//g']`
-unset universal_binary universal_archnames
-if test ${target_archs+set}; then
- AC_MSG_CHECKING([target architectures])
- target_archs=`echo $target_archs | tr , ' '`
- # /usr/lib/arch_tool -archify_list $TARGET_ARCHS
- for archs in $target_archs
- do
- AS_CASE([",$universal_binary,"],[*",$archs,"*], [],[
- cpu=`$SHELL "$ac_aux_dir/config.sub" "${archs}-${target_os}" 2>&1` || {
- AC_MSG_RESULT([failed])
- AC_MSG_ERROR([$cpu])
- }
- cpu=`echo $cpu | sed 's/-.*-.*//'`
- universal_binary="${universal_binary+$universal_binary,}$cpu"
- universal_archnames="${universal_archnames} ${archs}=${cpu}"
- ARCH_FLAG="${ARCH_FLAG+$ARCH_FLAG }-arch $archs"
- ])
- done
- target_archs="$universal_binary"
- unset universal_binary
- AS_CASE(["$target_archs"],
- [*,*], [universal_binary=yes],
- [unset universal_archnames])
- AC_MSG_RESULT([$target_archs])
-
- target=`echo $target | sed "s/^$target_cpu-/-/"`
- target_alias=`echo $target_alias | sed "s/^$target_cpu-/-/"`
- if test "${universal_binary-no}" = yes; then
- AC_SUBST(try_header,try_compile)
- target_cpu=universal
- real_cross_compiling=$cross_compiling
- else
- if test x"$target_cpu" != x"${target_archs}"; then
- echo 'int main(){return 0;}' > conftest.c
- if $CC $CFLAGS $ARCH_FLAG -o conftest conftest.c > /dev/null 2>&1; then
- rm -fr conftest.*
- else
- RUBY_DEFAULT_ARCH("$target_archs")
- fi
- fi
- target_cpu=${target_archs}
- fi
- AS_CASE(["$target"], [-*], [ target="$target_cpu${target}"])
- AS_CASE(["$target_alias"], [-*], [ target_alias="$target_cpu${target_alias}"])
-else
- if test x"$target_alias" = x; then
- AS_CASE(["$target_os"],
- [darwin*], [
- AC_MSG_CHECKING([for real target cpu])
- target=`echo $target | sed "s/^$target_cpu-/-/"`
- target_cpu=`$CC -E - 2>/dev/null <<EOF |
-#ifdef __x86_64__
-"processor-name=x86_64"
-#endif
-#ifdef __i386__
-"processor-name=i386"
-#endif
-#ifdef __ppc__
-"processor-name=powerpc"
-#endif
-#ifdef __ppc64__
-"processor-name=powerpc64"
-#endif
-EOF
- sed -n 's/^"processor-name=\(.*\)"/\1/p'`
- target="$target_cpu${target}"
- AC_MSG_RESULT([$target_cpu])
- ])
- fi
- target_archs="$target_cpu"
-fi
-if test "${target_archs}" != "${rb_cv_target_archs-${target_archs}}"; then
- AC_MSG_ERROR([target arch(s) has changed from ${rb_cv_target_archs-nothing} to ${target_archs}])
-else
- rb_cv_target_archs=${target_archs}
-fi
-if test "x${ARCH_FLAG}" != x; then
- CFLAGS="${CFLAGS:+$CFLAGS }${ARCH_FLAG}"
- LDFLAGS="${LDFLAGS:+$LDFLAGS }${ARCH_FLAG}"
-fi
-# RUBY_UNIVERSAL_ARCH end
-])
-
-AC_ARG_ENABLE(load-relative,
- AS_HELP_STRING([--enable-load-relative], [resolve load paths at run time]),
- [load_relative=$enableval])
-
-AC_ARG_PROGRAM
-
-dnl Checks for programs.
-
-cflagspat=
-test -z "$optflags" ||
- cflagspat="$cflagspat;s|"`eval echo '"'"${optflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g'
-test -z "$debugflags" ||
- cflagspat="$cflagspat;s|"`eval echo '"'"${debugflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g'
-test -z "warnflags" ||
- cflagspat="$cflagspat;s|"`eval echo '"'"${warnflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g'
-if test -z "${CFLAGS+set}"; then
- cflags=`echo " $cflags " | sed "$cflagspat;s/^ *//;s/ *$//"`
- orig_cflags="$cflags"
- cflags="$cflags "'${optflags} ${debugflags} ${warnflags}'
-fi
-if test -z "${CXXFLAGS+set}"; then
- cxxflags=`echo " $cxxflags " | sed "$cflagspat;s/^ *//;s/ *$//"`
- orig_cxxflags="$cxxflags"
- cxxflags="$cxxflags "'${optflags} ${debugflags} ${warnflags}'
-fi
-
-RUBY_NACL
-AS_CASE(["$host_os:$build_os"],
-[darwin*:darwin*], [
- AC_CHECK_TOOLS(CC, [clang gcc cc])
- # Following Apple deployed clang are broken
- # clang version 1.0 (http://llvm.org/svn/llvm-project/cfe/tags/Apple/clang-23 exported)
- # Apple clang version 2.0 (tags/Apple/clang-137) (based on LLVM 2.9svn)
- # Apple clang version 2.1 (tags/Apple/clang-163.7.1) (based on LLVM 3.0svn)
- if ! $CC -E -xc - <<SRC >/dev/null; then
- @%:@if defined __APPLE_CC__ && defined __clang_major__ && __clang_major__ < 3
- @%:@error premature clang
- @%:@endif
-SRC
- AC_MSG_ERROR([clang version 3.0 or later is required])
- fi
-])
-if test x"${build}" != x"${host}"; then
- AC_CHECK_TOOL(CC, gcc)
-fi
-
-AC_PROG_CC
-AC_PROG_CXX
-RUBY_MINGW32
-AC_PROG_GCC_TRADITIONAL
-AC_SUBST(GCC)
-AS_CASE(["$target_os"],
-[solaris*], [AC_PATH_TOOL([LD], [ld], [/usr/ccs/bin/ld], [/usr/ccs/bin:$PATH])],
-[AC_CHECK_TOOL([LD], [ld], [ld])])
-AC_SUBST(LD)
-if test "$GCC" = yes; then
- linker_flag=-Wl,
- : ${optflags=-O3}
- gcc_major=`echo =__GNUC__ | $CC -E -xc - | sed '/^=/!d;s///'`
- gcc_minor=`echo =__GNUC_MINOR__ | $CC -E -xc - | sed '/^=/!d;s///'`
- test -n "$gcc_major" || gcc_major=0
- test -n "$gcc_minor" || gcc_minor=0
- # RUBY_APPEND_OPTIONS(XCFLAGS, ["-include ruby/config.h" "-include ruby/missing.h"])
-else
- linker_flag=
-fi
-
-RUBY_PROG_GNU_LD
-RUBY_CPPOUTFILE
-
-: ${OUTFLAG='-o '}
-: ${COUTFLAG=${OUTFLAG}}
-AC_SUBST(OUTFLAG)
-AC_SUBST(COUTFLAG)
-
-cc_version=
-for option in --version -v -V -qversion; do
- cc_version_message=`$CC $option 2>&1`
- cc_version_status=$?
- AS_CASE($cc_version_status, [0], [:], [continue])
- AS_CASE($cc_version_message, [*Warning*], [continue])
- cc_version='$(CC) '$option
-done
-AC_SUBST(CC_VERSION, $cc_version)
-
-RUBY_UNIVERSAL_ARCH
-if test "$target_cpu" != "$host_cpu" -a "$GCC" = yes -a "$cross_compiling" = no -a "$universal_binary" = no; then
- RUBY_DEFAULT_ARCH("$target_cpu")
-fi
-
-AS_CASE(["$target_cpu-$target_os"], [[i[3-6]86*]], [
- AC_CACHE_CHECK([for __sync_val_compare_and_swap], [rb_cv_gcc_compiler_cas], [
- AC_TRY_LINK([unsigned long atomic_var;],
- [
- __sync_val_compare_and_swap(&atomic_var, 0, 1);
- ],
- [rb_cv_gcc_compiler_cas=yes],
- [rb_cv_gcc_compiler_cas=no])])
- if test "$rb_cv_gcc_compiler_cas" = no; then
- unset rb_cv_gcc_compiler_cas
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -march=i486"
- AC_CACHE_CHECK([for __sync_val_compare_and_swap with -march=i486], [rb_cv_gcc_compiler_cas], [
- AC_TRY_LINK([unsigned long atomic_var;],
- [
- __sync_val_compare_and_swap(&atomic_var, 0, 1);
- ],
- [rb_cv_gcc_compiler_cas=yes
- ARCH_FLAG="-march=i486"],
- [rb_cv_gcc_compiler_cas=no])])
- CFLAGS="$save_CFLAGS"
- fi])
-
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-AC_CHECK_TOOL(AR, ar)
-if test -z "$AR"; then
- AC_CHECK_PROGS(AR, aal, ar)
-fi
-
-AC_CHECK_TOOL(AS, as)
-ASFLAGS=$ASFLAGS
-AC_SUBST(ASFLAGS)
-
-AS_CASE(["$target_os"],[cygwin*|mingw*], [ac_cv_prog_ac_ct_OBJCOPY=":"])
-
-# BSD's ports and MacPorts prefix GNU binutils with 'g'
-AC_CHECK_TOOLS(OBJDUMP, [objdump gobjdump])
-AC_CHECK_TOOLS(OBJCOPY, [objcopy gobjcopy])
-
-AS_CASE(["$target_os"],
-[cygwin*|mingw*], [
- AC_CHECK_TOOL(WINDRES, windres)
- AC_CHECK_TOOL(DLLWRAP, dllwrap)
- target=`echo $target | sed "s/^$target_cpu-/-/"`
- target_alias=`echo $target_alias | sed "s/^$target_cpu-/-/"`
- target_cpu=`echo $target_cpu | sed s/i.86/i386/`
- AS_CASE(["$target"], [-*], [ target="$target_cpu${target}"])
- AS_CASE(["$target_alias"], [-*], [ target_alias="$target_cpu${target_alias}"])
- AS_CASE(["$target_os"],
- [mingw*], [
- test "$rb_cv_msvcrt" = "" && unset rb_cv_msvcrt
- AC_CACHE_CHECK(for mingw32 runtime DLL, rb_cv_msvcrt, [
- AC_TRY_LINK([@%:@include <stdio.h>],
- [FILE* volatile f = stdin; return 0;],
- [rb_cv_msvcrt=`$OBJDUMP -p conftest$ac_exeext |
- tr A-Z a-z |
- sed -n '/^[[ ]]*dll name: \(msvc.*\)\.dll$/{s//\1/p;q;}'`],
- [rb_cv_msvcrt=msvcrt])
- test "$rb_cv_msvcrt" = "" && rb_cv_msvcrt=msvcrt])
- RT_VER=`echo "$rb_cv_msvcrt" | tr -cd [0-9]`
- test "$RT_VER" = "" && RT_VER=60
- AC_DEFINE_UNQUOTED(RUBY_MSVCRT_VERSION, $RT_VER)
- ])
- : ${enable_shared=yes}
- ],
-[aix*], [AC_CHECK_TOOL(NM, nm, /usr/ccs/bin/nm, /usr/ccs/bin:$PATH)],
-[hiuxmpp*], [AC_DEFINE(__HIUX_MPP__)]) # by TOYODA Eizi <toyoda@npd.kishou.go.jp>
-AC_CHECK_TOOL(NM, nm)
-
-AC_PROG_LN_S
-AC_PROG_MAKE_SET
-AC_PROG_INSTALL
-AC_PROG_MKDIR_P
-if test "x$MKDIR_P" = "x -d"; then
- if test x"$as_mkdir_p" != xfalse; then
- MKDIR_P='mkdir -p'
- echo "use 'mkdir -p' as MKDIR_P"
- else
- AC_MSG_ERROR([mkdir -p is required])
- fi
-fi
-MAKEDIRS="$MKDIR_P"
-AC_SUBST(MAKEDIRS)
-
-AC_DEFUN([RUBY_DTRACE_AVAILABLE],
-[AC_CACHE_CHECK(whether dtrace USDT is available, rb_cv_dtrace_available,
-[
- echo "provider conftest{ probe fire(); };" > conftest_provider.d
- if $DTRACE -h -o conftest_provider.h -s conftest_provider.d >/dev/null 2>/dev/null; then
- AC_TRY_COMPILE([@%:@include "conftest_provider.h"], [CONFTEST_FIRE();], [
- # DTrace is available on the system
- rb_cv_dtrace_available=yes
- ], [rb_cv_dtrace_available=no])
- else
- # DTrace is not available while dtrace command exists
- # for example FreeBSD 8 or FreeBSD 9 without DTrace build option
- rb_cv_dtrace_available=no
- fi
- rm -f conftest.[co] conftest_provider.[dho]
-])
-])
-
-AC_DEFUN([RUBY_DTRACE_POSTPROCESS],
-[AC_CACHE_CHECK(whether $DTRACE needs post processing, rb_cv_prog_dtrace_g,
-[
- rb_cv_prog_dtrace_g=no
- if {
- cat >conftest_provider.d <<_PROBES &&
- provider conftest {
- probe fire();
- };
-_PROBES
- $DTRACE -h -o conftest_provider.h -s conftest_provider.d >/dev/null 2>/dev/null &&
- :
- }; then
- AC_TRY_COMPILE([@%:@include "conftest_provider.h"], [CONFTEST_FIRE();], [
- if {
- cp -p conftest.${ac_objext} conftest.${ac_objext}.save &&
- $DTRACE -G -s conftest_provider.d conftest.${ac_objext} 2>/dev/null &&
- :
- }; then
- if cmp -s conftest.o conftest.${ac_objext}.save; then
- rb_cv_prog_dtrace_g=yes
- else
- rb_cv_prog_dtrace_g=rebuild
- fi
- fi])
- fi
- rm -f conftest.[co] conftest_provider.[dho]
-])
-])
-
-AC_CHECK_PROG([DTRACE], [${ac_tool_prefix}dtrace], [${ac_tool_prefix}dtrace])
-if test "$cross_compiling:$ac_cv_prog_DTRACE" = no: -a -n "$ac_tool_prefix"; then
- AC_CHECK_PROG([DTRACE], [dtrace], [dtrace])
-fi
-
-AC_CHECK_PROGS(DOT, dot)
-AC_CHECK_PROGS(DOXYGEN, doxygen)
-AS_CASE(["${host_os}"], [nacl], [AC_PATH_PROG(PYTHON, python)])
-
-AC_CHECK_PROG(PKG_CONFIG, pkg-config, [pkg-config], [], [],
- [`"$as_dir/$ac_word$ac_exec_ext" --print-errors --version > /dev/null 2>&1 || echo "$as_dir/$ac_word$ac_exec_ext"`])
-
-# checks for UNIX variants that set C preprocessor variables
-AC_USE_SYSTEM_EXTENSIONS
-
-AC_SUBST(RM, ['rm -f'])
-AC_SUBST(CP, ['cp'])
-RMDIRS='$(top_srcdir)/tool/rmdirs'
-RMDIR=rmdir
-mkdir "rmdirs_$$_test" "rmdirs_$$_test/a"
-rmdir --ignore-fail-on-non-empty "rmdirs_$$_test" 2>/dev/null &&
-RMDIR='rmdir --ignore-fail-on-non-empty'
-$RMDIR -p "rmdirs_$$_test/a" 2>/dev/null &&
-{ test -d "rmdirs_$$_test" || RMDIRS="$RMDIR -p"; }
-rmdir "rmdirs_$$_test/a" "rmdirs_$$_test" 2>/dev/null
-AC_SUBST(RMDIR)
-AC_SUBST(RMDIRS)
-AC_SUBST(RMALL, ['rm -fr'])
-
-AC_MSG_CHECKING([for cd using physical directory])
-rm -fr conf$$.dir
-mkdir conf$$.dir &&
-(cd conf$$.dir && mkdir src build && cd src &&
-$as_ln_s ../build . > /dev/null 2>&1 && cd build &&
-for chdir in 'cd -P' 'PWD= cd'; do
- /bin/sh -c "$chdir ../src && echo '$chdir' > cdcmd" 2> /dev/null && break
-done)
-if test -f conf$$.dir/src/cdcmd; then
- read CHDIR < conf$$.dir/src/cdcmd 2> /dev/null
-else
- CHDIR=cd
-fi
-rm -fr conf$$.dir
-AC_MSG_RESULT([$CHDIR])
-AC_SUBST(CHDIR)
-
-}
-{ # compiler section
-
-AC_DEFUN([RUBY_WERROR_FLAG], [dnl
-save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS $rb_cv_warnflags"
-if test "${ac_c_werror_flag+set}"; then
- rb_c_werror_flag="$ac_c_werror_flag"
-else
- unset rb_c_werror_flag
-fi
-ac_c_werror_flag=yes
-$1
-CFLAGS="$save_CFLAGS"
-save_CFLAGS=
-if test "${rb_c_werror_flag+set}"; then
- ac_c_werror_flag="$rb_c_werror_flag"
-else
- unset ac_c_werror_flag
-fi])
-
-RUBY_WERROR_FLAG([
- AC_MSG_CHECKING([whether CFLAGS is valid])
- AC_TRY_COMPILE([], [],
- [AC_MSG_RESULT(yes)],
- [
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([something wrong with CFLAGS="$CFLAGS"])
- ]
- )
- AC_MSG_CHECKING([whether LDFLAGS is valid])
- {
- mkdir tmp.$$.try_link &&
- cd tmp.$$.try_link &&
- cp ../confdefs.h . &&
- echo '<?xml?><plist><dict><key>CFBundleIdentifier</key><string></string></dict></plist>' > Info.plist &&
- :
- } || AC_MSG_ERROR([faild to make temporary directory])
- AC_TRY_LINK([], [],
- [AC_MSG_RESULT(yes)],
- [
- cd .. && rm -fr tmp.$$.try_link
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([something wrong with LDFLAGS="$LDFLAGS"])
- ]
- )
- cd .. && rm -fr tmp.$$.try_link
-])
-
-AC_DEFUN([RUBY_TRY_CFLAGS], [
- AC_MSG_CHECKING([whether ]$1[ is accepted as CFLAGS])
- RUBY_WERROR_FLAG([
- CFLAGS="[$]CFLAGS $1"
- AC_TRY_COMPILE([$4], [$5],
- [$2
- AC_MSG_RESULT(yes)],
- [$3
- AC_MSG_RESULT(no)])
- ])
-])
-
-AC_DEFUN([RUBY_TRY_LDFLAGS], [
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="[$]LDFLAGS $1"
- AC_MSG_CHECKING([whether $1 is accepted as LDFLAGS])
- RUBY_WERROR_FLAG([
- AC_TRY_LINK([$4], [$5],
- [$2
- AC_MSG_RESULT(yes)],
- [$3
- AC_MSG_RESULT(no)])
- ])
- LDFLAGS="$save_LDFLAGS"
- save_LDFLAGS=
-])
-
-AS_CASE([$RUBY_PATCHLEVEL], [-*],
- [particular_werror_flags=yes], [particular_werror_flags=no])
-AC_ARG_ENABLE(werror,
- AS_HELP_STRING([--disable-werror],
- [don't make warnings into errors
- even if a compiler support -Werror feature
- [[disabled by default unless development version]]]),
- [particular_werror_flags=$enableval])
-
-rb_cv_warnflags="$warnflags"
-if test "$GCC:${warnflags+set}:no" = yes::no; then
- if test $gcc_major -ge 4; then
- extra_warning=-Werror=extra-tokens
- else
- extra_warning=
- fi
- if test $gcc_major -eq 5; then
- extra_warning="$extra_warning -Wno-maybe-uninitialized"
- fi
- for wflag in -Wno-unused-parameter -Wno-parentheses -Wno-long-long \
- -diag-disable=2259 \
- -Wno-missing-field-initializers \
- -Wno-tautological-compare \
- -Wno-parentheses-equality \
- -Wno-constant-logical-operand \
- -Wno-self-assign \
- -Wunused-variable \
- -Werror=pointer-arith \
- -Werror=write-strings \
- -Werror=declaration-after-statement \
- -Werror=shorten-64-to-32 \
- -Werror=implicit-function-declaration \
- -Werror=division-by-zero \
- -Werror=deprecated-declarations \
- -Wno-packed-bitfield-compat \
- $extra_warning \
- ; do
- if test "$particular_werror_flags" != yes; then
- wflag=`echo x$wflag | sed 's/^x-Werror=/-W/;s/^x//'`
- fi
- ok=no
- RUBY_TRY_CFLAGS($wflag, [
- RUBY_APPEND_OPTIONS(warnflags, $wflag)
- ok=yes
- ])
- AS_CASE([$ok:$wflag], [no:-Werror=*], [
- wflag=`echo x$wflag | sed 's/^x-Werror=/-W/'`
- RUBY_TRY_CFLAGS($wflag, [
- RUBY_APPEND_OPTIONS(warnflags, $wflag)
- particular_werror_flags=no
- ])
- ])
- done
- AS_CASE([" $warnflags "],[*" -Wno-missing-field-initializers "*], [wflag="-Wall -Wextra"],
- [wflag=-Wall])
- RUBY_TRY_CFLAGS($wflag, [warnflags="$wflag${warnflags+ $warnflags}"])
- # Disable warnflags while conftest. -Werror=* flags might make bad OS capability guess.
- rb_cv_warnflags="$warnflags"
- warnflags=
-fi
-RUBY_TRY_CFLAGS(-Qunused-arguments, [RUBY_APPEND_OPTIONS(rb_cv_wsuppress_flags, -Qunused-arguments)])
-
-for n in infinity nan; do
- m=AS_TR_CPP($n)
- AC_CACHE_CHECK([whether $m is available without C99 option], rb_cv_$n,
- [AC_COMPILE_IFELSE(
- [AC_LANG_BOOL_COMPILE_TRY(AC_INCLUDES_DEFAULT([@%:@include <math.h>
-@%:@ifndef $m
-@%:@error no $m
-@%:@endif
-]), [1])], [eval rb_cv_$n=yes], [eval rb_cv_$n=no])])
- if eval test '"$rb_cv_'$n'"' = yes; then
- AC_DEFINE_UNQUOTED([HAVE_]$m)
- fi
-done
-
-if test "$GCC" = yes; then
- # NaCl's glibc build generates undefined references to __memset_chk.
- # TODO(sbc): Remove this once NaCl's glibc is fixed.
- AS_CASE(["$target_os"], [nacl], [], [
- # -D_FORTIFY_SOURCE
- # When defined _FORTIFY_SOURCE, glibc enables some additional sanity
- # argument check. The performance drop is very little and Ubuntu enables
- # _FORTIFY_SOURCE=2 by default. So, let's support it for protecting us from
- # a mistake of silly C extensions.
- RUBY_TRY_CFLAGS(-D_FORTIFY_SOURCE=2, [RUBY_APPEND_OPTION(XCFLAGS, -D_FORTIFY_SOURCE=2)])
- ])
-
- # -fstack-protector
- AS_CASE(["$target_os"],
- [mingw*|nacl], [
- stack_protector=no
- ])
- if test -z "${stack_protector+set}"; then
- RUBY_TRY_CFLAGS(-fstack-protector, [stack_protector=yes], [stack_protector=no])
- if test "x$stack_protector" = xyes; then
- RUBY_TRY_LDFLAGS(-fstack-protector, [], [stack_protector=broken])
- fi
- fi
- if test "x$stack_protector" = xyes; then
- RUBY_APPEND_OPTION(XCFLAGS, -fstack-protector)
- RUBY_APPEND_OPTION(XLDFLAGS, -fstack-protector)
- RUBY_APPEND_OPTION(LDFLAGS, -fstack-protector)
- fi
-
- AS_CASE(["$target_os"],[mingw*], [
- # On Windows platforms, system provided headers are VC++
- # optimized. That is, C++ habits are often contaminated into
- # various headers. Most frequent situation is the use of //
- # comments. We bypass ANSI C mode for them. Otherwise
- # extension libs cannot include those headers.
- ],
- [cygwin*|darwin*|netbsd*|nacl], [
- # need lgamma_r(), finite()
- ],
- [
- # ANSI (no XCFLAGS because this is C only)
- for ansi_options in -std=iso9899:1999 "-ansi -std=iso9899:199409"; do
- RUBY_TRY_CFLAGS(${ansi_options}, [
- RUBY_APPEND_OPTIONS(warnflags, ${ansi_options})
- RUBY_APPEND_OPTIONS(strict_warnflags, ${ansi_options})
- ], [ansi_options=])
- test "x${ansi_options}" = x || break
- done
- ])
-
- # suppress annoying -Wstrict-overflow warnings
- RUBY_TRY_CFLAGS(-fno-strict-overflow, [RUBY_APPEND_OPTION(XCFLAGS, -fno-strict-overflow)])
-
- test "${debugflags+set}" || {RUBY_TRY_CFLAGS(-ggdb3, [debugflags=-ggdb3])}
- test "${debugflags+set}" || {RUBY_TRY_CFLAGS(-ggdb, [debugflags=-ggdb])}
- test "${debugflags+set}" || {RUBY_TRY_CFLAGS(-g3, [debugflags=-g3])}
-fi
-test $ac_cv_prog_cc_g = yes && : ${debugflags=-g}
-
-if test "$GCC" = ""; then
- AS_CASE(["$target_os"],[aix*],[warnflags="$warnflags -qinfo=por" rb_cv_warnflags="$rb_cv_warnflags -qinfo=por"])
-fi
-if test "$GCC" = yes; then
- if test "$gcc_major" -ge 4; then
- RUBY_TRY_CFLAGS(-fvisibility=hidden, [visibility_option=yes], [visibility_option=no])
- fi
- AC_SUBST(WERRORFLAG, "-Werror")
- if test "$visibility_option" = yes; then
- RUBY_APPEND_OPTION(XCFLAGS, -fvisibility=hidden)
- AC_DEFINE(RUBY_SYMBOL_EXPORT_BEGIN, [_Pragma("GCC visibility push(default)")])
- AC_DEFINE(RUBY_SYMBOL_EXPORT_END, [_Pragma("GCC visibility pop")])
- else
- RUBY_TRY_LDFLAGS([-Wl,-unexported_symbol,_Init_*], [visibility_option=ld], [visibility_option=no])
- fi
- test "$visibility_option" = no -o "$host_os" = nacl || OBJCOPY=:
-fi
-
-if test "$GCC" = yes; then
- # optflags
-
- AS_CASE(["$target_os"], [mingw*], [
- RUBY_TRY_CFLAGS(-fno-omit-frame-pointer, [optflags="${optflags+$optflags }-fno-omit-frame-pointer"])
- RUBY_TRY_CFLAGS(-static-libgcc, [static_libgcc=yes], [static_libgcc=no])
- if test "$static_libgcc" = yes; then
- RUBY_APPEND_OPTION(EXTLDFLAGS, -static-libgcc)
- fi
- ])
-
- # disable fast-math
- for oflag in -fno-fast-math -fp-model\ precise; do
- RUBY_TRY_CFLAGS($oflag, [RUBY_APPEND_OPTION(optflags, $oflag)])
- done
-fi
-
-AC_ARG_WITH(opt-dir,
- AS_HELP_STRING([--with-opt-dir=DIR-LIST],
- [add optional headers and libraries directories separated by $PATH_SEPARATOR]),
- [
- val=`echo "$PATH_SEPARATOR$withval" | sed "s|$PATH_SEPARATOR\([[^$PATH_SEPARATOR]*]\)| -I\1/include|g;s/^ //"`
- CPPFLAGS="$CPPFLAGS $val"
- val=`echo "$PATH_SEPARATOR$withval" | sed "s|$PATH_SEPARATOR\([[^$PATH_SEPARATOR]*]\)| -L\1/lib|g;s/^ //"`
- LDFLAGS="$LDFLAGS $val"
- LDFLAGS_OPTDIR="$val"
- OPT_DIR="$withval"
- ], [OPT_DIR=])
-
-test -z "${ac_env_CFLAGS_set}" -a -n "${cflags+set}" && eval CFLAGS="\"$cflags $ARCH_FLAG\""
-test -z "${ac_env_CXXFLAGS_set}" -a -n "${cxxflags+set}" && eval CXXFLAGS="\"$cxxflags $ARCH_FLAG\""
-
-}
-{ # header and library section
-
-AC_ARG_WITH(winnt-ver,
- AS_HELP_STRING([--with-winnt-ver=0xXXXX], [target Windows NT version (default to 0x0501)]),
- [with_winnt_ver="$withval"], [with_winnt_ver="0x0501"])
-AS_CASE(["$target_os"],
-[mingw*], [
- RUBY_APPEND_OPTION(CPPFLAGS, -D_WIN32_WINNT=$with_winnt_ver)
- RUBY_APPEND_OPTION(CPPFLAGS, -D__MINGW_USE_VC2005_COMPAT)
-])
-
-AS_CASE(["$target_os"],
-[freebsd*], [
- AC_CACHE_CHECK([whether pthread should be enabled by default],
- rb_cv_enable_pthread_default,
- [AC_TRY_CPP([
-#include <osreldate.h>
-#if __FreeBSD_version < 502102
-#error pthread should be disabled on this platform
-#endif
- ],
- rb_cv_enable_pthread_default=yes,
- rb_cv_enable_pthread_default=no)])
- enable_pthread=$rb_cv_enable_pthread_default
- ],
-[mingw*], [
- enable_pthread=no
- ],
-[
- enable_pthread=yes
- ])
-
-AC_ARG_ENABLE(pthread,
- AS_HELP_STRING([--enable-pthread], [obsolete, and ignored]))
-
-dnl Checks for libraries.
-AS_CASE(["$target_os"],[*bsd*|dragonfly*],[],[ac_cv_func_daemon=no])
-
-POSTLINK=:
-AC_SUBST(POSTLINK)
-AS_CASE(["$target_os"],
-[nextstep*], [ ],
-[openstep*], [ ],
-[rhapsody*], [ ],
-[darwin*], [ RUBY_PREPEND_OPTION(LIBS, -lobjc)
- RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT)
- AC_MSG_CHECKING(whether Mac OS X 10.5 or later)
- AC_TRY_CPP([#include <AvailabilityMacros.h>
- #if MAC_OS_X_VERSION_MAX_ALLOWED <= 1040
- #error pre OS X 10.4
- [!<===== pre OS X 10.4 =====>]
- #endif
- ],
- [macosx_10_5=yes], [macosx_10_5=no])
- AC_MSG_RESULT($macosx_10_5)
- if test $macosx_10_5 = yes; then
- ac_cv_func_getcontext=no
- ac_cv_func_setcontext=no
- else
- AC_DEFINE(BROKEN_SETREUID, 1)
- AC_DEFINE(BROKEN_SETREGID, 1)
- fi
- incs=`$CC -v -E -xc - < /dev/null 2>&1 | sed ['1,/^@%:@include </d;s/^ *//;s|[^./][^/]*/\.\./||g;/\/include$/!d;s||/lib|;/\/usr\/lib/d']`
- for d in `$CC -print-search-dirs | sed -e '/^libraries: */!d;s///' | tr : '\012' | fgrep -v /../ | sed -n 's|^\(/.*/lib\)/$|\1|p'`; do
- incs=`echo "$incs" | fgrep -v "$d"`
- done
- for d in $incs; do
- test -d "$d" && RUBY_APPEND_OPTIONS(LDFLAGS, "-L$d")
- done
- ac_cv_type_getgroups=gid_t # getgroups() on Rosetta fills garbage
- ac_cv_lib_crypt_crypt=no
- ac_cv_func_fdatasync=no # Mac OS X wrongly reports it has fdatasync()
- ac_cv_func_vfork=no
- if test $gcc_major -lt 4 -o \( $gcc_major -eq 4 -a $gcc_minor -lt 3 \); then
- ac_cv_func___builtin_setjmp=no
- fi
- AC_CACHE_CHECK(for broken crypt with 8bit chars, rb_cv_broken_crypt,
- [AC_TRY_RUN([
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-
-int
-main()
-{
- int i;
- for (i = 0; i < 128*128; i++) {
- char salt[2], buf[256], *s;
- salt[0] = 0x80 | (i & 0x7f);
- salt[1] = 0x80 | (i >> 7);
- strcpy(buf, crypt("", salt));
- if (strcmp(buf, s = crypt("", salt))) {
-#if 0
- printf("%.2x%.2x: %s -> %s\n", (unsigned char)salt[0], (unsigned char)salt[1],
- buf+2, s+2);
-#endif
- return 1;
- }
- }
- return 0;
-}
-],
- rb_cv_broken_crypt=no,
- rb_cv_broken_crypt=yes,
- rb_cv_broken_crypt=yes)])
- if test "$rb_cv_broken_crypt" = yes; then
- AC_DEFINE(BROKEN_CRYPT, 1)
- fi
- AC_CHECK_PROGS(codesign, codesign)
- if test -n "$codesign"; then
- POSTLINK="test -z '\$(RUBY_CODESIGN)' || $codesign -s '\$(RUBY_CODESIGN)' -f \$@"
- LINK_SO="$LINK_SO
-\$(POSTLINK)"
- fi
- AC_CHECK_HEADERS(crt_externs.h, [], [], [
- #include <crt_externs.h>
- ])
- ],
-[hpux*], [ LIBS="-lm $LIBS"
- ac_cv_c_inline=no],
-[solaris*], [ LIBS="-lm $LIBS"
- ac_cv_func_vfork=no
- AC_MSG_CHECKING(whether _XOPEN_SOURCE is already given)
- AC_TRY_COMPILE([#include <unistd.h>
- #ifndef _XOPEN_SOURCE
- #error _XOPEN_SOURCE is not defined
- #endif
- ], [],
- [given_xopen_source=yes], [given_xopen_source=no])
- AC_MSG_RESULT($given_xopen_source)
- if test $given_xopen_source = no; then
- # On Solaris, with gcc, -std=iso9899:1999 in $ansi_options
- # is often also needed in CPPFLAGS, because some feature
- # definitions vary depending on such standards options.
- AS_CASE(["${ansi_options}"],
- [*-std=iso9899:1999*], [
- RUBY_APPEND_OPTIONS(CPPFLAGS, ${ansi_options})
- ])
- AC_MSG_CHECKING(appropriate _XOPEN_SOURCE value to define)
- define_xopen_source=""
- for tmp_xpg in 7 6 5; do
- if test x"$define_xopen_source" != x; then
- break
- fi
- # Both AC_TRY_CPP and AC_TRY_COMPILE should pass
- # because some options may not be set to CPPFLAGS.
- AC_TRY_CPP([
- #define _XOPEN_SOURCE ${tmp_xpg}00
- #include <unistd.h>
- #ifndef _XPG${tmp_xpg}
- #error _XPG${tmp_xpg} should be defined by _XOPEN_SOURCE=${tmp_xpg}00
- #endif
- ], [
- AC_TRY_COMPILE([
- #define _XOPEN_SOURCE ${tmp_xpg}00
- #include <unistd.h>
- #ifndef _XPG${tmp_xpg}
- #error _XPG${tmp_xpg} should be defined by _XOPEN_SOURCE=${tmp_xpg}00
- #endif
- ], [],
- [define_xopen_source=${tmp_xpg}00], [])
- ], [])
- done
- if test x"$define_xopen_source" = x; then
- define_xopen_source=no
- fi
- AC_MSG_RESULT($define_xopen_source)
- if test x"$define_xopen_source" != xno; then
- RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE=$define_xopen_source)
- fi
- fi
- ],
-[haiku*], [
- LIBS="$LIBS" # m lib is include in root
- ],
-[cygwin*], [ ac_cv_header_langinfo_h=yes
- AC_CHECK_FUNCS(cygwin_conv_path)
- AC_LIBOBJ([langinfo])
- ],
-[mingw*], [ LIBS="-lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi $LIBS"
- ac_cv_header_a_out_h=no
- ac_cv_header_pwd_h=no
- ac_cv_header_utime_h=no
- ac_cv_header_sys_ioctl_h=no
- ac_cv_header_sys_param_h=no
- ac_cv_header_sys_resource_h=no
- ac_cv_header_sys_select_h=no
- ac_cv_header_sys_time_h=no
- ac_cv_header_sys_times_h=no
- ac_cv_header_sys_socket_h=no
- ac_cv_func_lstat=yes
- ac_cv_func_times=yes
- ac_cv_func_waitpid=yes
- ac_cv_func_fsync=yes
- ac_cv_func_seekdir=yes
- ac_cv_func_telldir=yes
- ac_cv_func_isinf=yes
- ac_cv_func_isnan=yes
- ac_cv_func_finite=yes
- ac_cv_func_lchown=yes
- ac_cv_func_link=yes
- ac_cv_func_readlink=yes
- ac_cv_func_symlink=yes
- ac_cv_lib_crypt_crypt=no
- ac_cv_func_getpgrp_void=no
- ac_cv_func_memcmp_working=yes
- ac_cv_lib_dl_dlopen=no
- rb_cv_binary_elf=no
- rb_cv_negative_time_t=no
- ac_cv_func_fcntl=yes
- ac_cv_func_flock=yes
- ac_cv_func_gmtime_r=yes
- rb_cv_large_fd_select=yes
- ac_cv_type_struct_timeval=yes
- ac_cv_func_clock_gettime=yes
- ac_cv_func_clock_getres=yes
- ac_cv_func_malloc_usable_size=no
- { test "$target_cpu" = x64 && ac_cv_func___builtin_setjmp=no; }
- AC_CHECK_TYPE([NET_LUID], [], [],
- [@%:@include <winsock2.h>
- @%:@include <iphlpapi.h>])
- if test x"$ac_cv_type_NET_LUID" = xyes; then
- AC_DEFINE(HAVE_TYPE_NET_LUID, 1)
- fi
- AC_CHECK_FUNCS(_gmtime64_s)
- AC_CHECK_FUNCS(_wfreopen_s)
- AC_LIBOBJ([langinfo])
- ],
-[bsdi*], [ LIBS="-lm $LIBS"
- AC_DEFINE(BROKEN_SETREUID, 1)
- AC_DEFINE(BROKEN_SETREGID, 1)
- ac_cv_sizeof_rlim_t=8],
-[freebsd*], [ LIBS="-lm $LIBS"
- ac_cv_func_getpeername=no
- ac_cv_func_getsockname=no
- ac_cv_func_shutdown=no
- ac_cv_func_close=no
- ],
-[netbsd*], [ LIBS="-lm $LIBS"
- ],
-[dragonfly*], [ LIBS="-lm $LIBS"
- # isinf() and isnan() are macros on DragonFly.
- ac_cv_func_isinf=yes
- ac_cv_func_isnan=yes
- ],
-[nacl], [
- LIBS="-lm $LIBS"
- if test "${nacl_cv_build_variant}" = "newlib"; then
- RUBY_APPEND_OPTION(CPPFLAGS, -DNACL_NEWLIB)
- else
- RUBY_APPEND_OPTION(XCFLAGS, -fPIC)
- fi
- ],
-[ LIBS="-lm $LIBS"])
-
-AC_CHECK_LIB(crypt, crypt) # glibc (GNU/Linux, GNU/Hurd, GNU/kFreeBSD)
-AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV
-AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX
-AC_CHECK_LIB(socket, shutdown) # SunOS/Solaris
-
-dnl Checks for header files.
-AC_HEADER_DIRENT
-dnl AC_HEADER_STDC has been checked in AC_USE_SYSTEM_EXTENSIONS
-AC_HEADER_STDBOOL
-AC_HEADER_SYS_WAIT
-
-AC_CHECK_HEADERS(a.out.h)
-AC_CHECK_HEADERS(atomic.h)
-AC_CHECK_HEADERS(direct.h)
-AC_CHECK_HEADERS(grp.h)
-AC_CHECK_HEADERS(fcntl.h)
-AC_CHECK_HEADERS(float.h)
-AC_CHECK_HEADERS(ieeefp.h)
-AC_CHECK_HEADERS(intrinsics.h)
-AC_CHECK_HEADERS(langinfo.h)
-AC_CHECK_HEADERS(limits.h)
-AC_CHECK_HEADERS(locale.h)
-AC_CHECK_HEADERS(malloc.h)
-AC_CHECK_HEADERS(malloc/malloc.h)
-AC_CHECK_HEADERS(malloc_np.h)
-AC_CHECK_HEADERS(net/socket.h)
-AC_CHECK_HEADERS(process.h)
-AC_CHECK_HEADERS(pwd.h)
-AC_CHECK_HEADERS(setjmpex.h)
-AC_CHECK_HEADERS(sys/attr.h)
-AC_CHECK_HEADERS(sys/fcntl.h)
-AC_CHECK_HEADERS(sys/file.h)
-AC_CHECK_HEADERS(sys/id.h)
-AC_CHECK_HEADERS(sys/ioctl.h)
-AC_CHECK_HEADERS(sys/mkdev.h)
-AC_CHECK_HEADERS(sys/param.h)
-AC_CHECK_HEADERS(sys/prctl.h)
-AC_CHECK_HEADERS(sys/resource.h)
-AC_CHECK_HEADERS(sys/select.h)
-AC_CHECK_HEADERS(sys/sendfile.h)
-AC_CHECK_HEADERS(sys/socket.h)
-AC_CHECK_HEADERS(sys/syscall.h)
-AC_CHECK_HEADERS(sys/time.h)
-AC_CHECK_HEADERS(sys/times.h)
-AC_CHECK_HEADERS(sys/uio.h)
-AC_CHECK_HEADERS(sys/utime.h)
-AC_CHECK_HEADERS(syscall.h)
-AC_CHECK_HEADERS(time.h)
-AC_CHECK_HEADERS(ucontext.h)
-AC_CHECK_HEADERS(utime.h)
-
-AC_ARG_WITH([gmp],
- [AS_HELP_STRING([--without-gmp],
- [disable GNU GMP to accelerate Bignum operations])],
- [],
- [with_gmp=yes])
-AS_IF([test "x$with_gmp" != xno],
- [AC_CHECK_HEADERS(gmp.h)
- AS_IF([test "x$ac_cv_header_gmp_h" != xno],
- AC_CHECK_LIB([gmp], [__gmpz_init]))
- with_gmp="$ac_cv_lib_gmp___gmpz_init"
- AS_IF([test -z "$with_gmp"], [with_gmp=no])])
-
-AC_ARG_WITH([jemalloc],
- [AS_HELP_STRING([--with-jemalloc],[use jemalloc allocator])],
- [with_jemalloc=$withval], [with_jemalloc=no])
-AS_IF([test "x$with_jemalloc" = xyes],[
- AC_CHECK_LIB([jemalloc], [malloc_conf], [], [with_jemalloc=no])
- AC_CHECK_HEADER(jemalloc/jemalloc.h, [
- AC_DEFINE(RUBY_ALTERNATIVE_MALLOC_HEADER, [<jemalloc/jemalloc.h>])
- ])
- AS_IF([test "x$with_jemalloc" = xno], [
- AC_CACHE_CHECK([for jemalloc with JEMALLOC_MANGLE], rb_cv_jemalloc_demangle,
- [AC_LINK_IFELSE([AC_LANG_PROGRAM([@%:@define JEMALLOC_MANGLE 1
- @%:@ifdef RUBY_ALTERNATIVE_MALLOC_HEADER
- @%:@include RUBY_ALTERNATIVE_MALLOC_HEADER
- @%:@else
- @%:@include <jemalloc.h>
- @%:@endif], [return !&malloc_conf])],
- [rb_cv_jemalloc_demangle=yes],
- [rb_cv_jemalloc_demangle=no])
- ])
- ])
- AS_IF([test "x$rb_cv_jemalloc_demangle" = xyes], [
- AC_DEFINE(JEMALLOC_MANGLE)
- with_jemalloc=yes
- ])
- AS_IF([test "x$with_jemalloc" = xyes],
- [
- ac_cv_func_malloc_usable_size=yes
- ],
- [AC_MSG_ERROR([jemalloc requested but not found])
- ])
-])
-
-dnl check for large file stuff
-mv confdefs.h confdefs1.h
-: > confdefs.h
-AC_SYS_LARGEFILE
-# On 32-bit Solaris, it is safe to define _LARGEFILE_SOURCE
-# which is not added by AC_SYS_LARGEFILE.
-if test x"$enable_largefile" != xno; then
- AS_CASE(["$target_os"], [solaris*], [
- AC_MSG_CHECKING([wheather _LARGEFILE_SOURCE should be defined])
- AS_CASE(["${ac_cv_sys_file_offset_bits}:${ac_cv_sys_large_files}"],
- ["64:"|"64:no"|"64:unknown"], [
- # insert _LARGEFILE_SOURCE before _FILE_OFFSET_BITS line
- # that is the same order as "getconf LFS_CFLAGS" output
- mv confdefs.h largefile0.h
- : > confdefs.h
- AC_DEFINE(_LARGEFILE_SOURCE)
- cat largefile0.h >> confdefs.h
- rm largefile0.h
- AC_MSG_RESULT([yes])
- ], [AC_MSG_RESULT([no])])
- ])
-fi
-mv confdefs.h largefile.h
-mv confdefs1.h confdefs.h
-cat largefile.h >> confdefs.h
-
-AS_CASE(["$target_os"],
- [mingw*], [ac_cv_type_off_t=yes;ac_cv_sizeof_off_t=8],
- [aix*], [
- AS_CASE(["$target_cpu:$ac_cv_sys_large_files"],
- [ppc64:*|powerpc64:*], [],
- [*:no|*:unknown], [],
- [
- # AIX currently does not support a 32-bit call to posix_fadvise()
- # if _LARGE_FILES is defined.
- ac_cv_func_posix_fadvise=no
- ])
- ])
-
-AC_C_BIGENDIAN
-AC_C_CONST
-AC_C_CHAR_UNSIGNED
-AC_C_INLINE
-AC_C_VOLATILE
-AC_C_TYPEOF
-
-AS_CASE(":$ac_cv_c_const:$ac_cv_c_volatile:",
- [*:no:*], [AC_MSG_ERROR(ANSI C-conforming const and volatile are mandatory)])
-
-AC_CHECK_TYPES([long long, off_t])
-
-AC_CACHE_CHECK([char bit], [rb_cv_char_bit],
- [test "$universal_binary" = yes && cross_compiling=yes
- AC_COMPUTE_INT([rb_cv_char_bit], [CHAR_BIT],
- [AC_INCLUDES_DEFAULT([@%:@include <limits.h>])], [rb_cv_char_bit=8])
- test "$universal_binary" = yes && cross_compiling=$real_cross_compiling])
-
-dnl RUBY_CHECK_SIZEOF [typename], [maybe same size types], [macros], [include]
-AC_DEFUN([RUBY_CHECK_SIZEOF],
-[m4_bmatch([$1], [\.], [], [if test "$universal_binary" = yes; then])
-AC_CACHE_CHECK([size of $1], [AS_TR_SH([ac_cv_sizeof_$1])], [
- unset AS_TR_SH(ac_cv_sizeof_$1)
- rbcv_var="
-typedef m4_bpatsubst([$1], [\..*]) ac__type_sizeof_;
-static ac__type_sizeof_ *rbcv_ptr;
-@%:@define AS_TR_CPP(SIZEOF_$1) sizeof((*rbcv_ptr)[]m4_bmatch([$1], [\.], .m4_bpatsubst([$1], [^[^.]*\.])))
-"
- m4_ifval([$2], [test -z "${AS_TR_SH(ac_cv_sizeof_$1)+set}" && {
- for t in $2; do
- AC_COMPILE_IFELSE(
- [AC_LANG_BOOL_COMPILE_TRY(AC_INCLUDES_DEFAULT([$4]
- [$rbcv_var]),
- [AS_TR_CPP(SIZEOF_$1) == sizeof($t)])], [
- AS_TR_SH(ac_cv_sizeof_$1)=AS_TR_CPP([SIZEOF_]$t)
- break])
- done
- }])
- unset cond
- m4_ifval([$3], [test -z "${AS_TR_SH(ac_cv_sizeof_$1)+set}" && {
- for s in 32 64 128; do
- for t in $3; do
- cond="${cond}
-@%:@${cond+el}if defined(__${t}${s}__) || defined(__${t}${s}) || defined(_${t}${s}) || defined(${t}${s})"
- hdr="AC_INCLUDES_DEFAULT([$4
-@%:@if defined(__${t}${s}__) || defined(__${t}${s}) || defined(_${t}${s}) || defined(${t}${s})
-@%:@ define AS_TR_CPP(HAVE_$1) 1
-@%:@else
-@%:@ define AS_TR_CPP(HAVE_$1) 0
-@%:@endif])"
- AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$hdr], [!AS_TR_CPP(HAVE_$1)])], [continue])
- AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$hdr]
- [$rbcv_var],
- [AS_TR_CPP(HAVE_$1) == (AS_TR_CPP(SIZEOF_$1) == ([$[s / rb_cv_char_bit]]))])],
- [AS_TR_SH(ac_cv_sizeof_$1)="${AS_TR_SH(ac_cv_sizeof_$1)+${AS_TR_SH(ac_cv_sizeof_$1)-} }${t}${s}"])
- done
- done
- }])
- m4_ifval([$2][$3],
- [test "${AS_TR_SH(ac_cv_sizeof_$1)@%:@SIZEOF_}" = "${AS_TR_SH(ac_cv_sizeof_$1)}" && ]){
- test "$universal_binary" = yes && cross_compiling=yes
- AC_COMPUTE_INT([t], AS_TR_CPP(SIZEOF_$1), [AC_INCLUDES_DEFAULT([$4])]
-[${cond+$cond
-@%:@else}
-$rbcv_var
-${cond+@%:@endif}
-@%:@ifndef AS_TR_CPP(SIZEOF_$1)
-@%:@define AS_TR_CPP(SIZEOF_$1) 0
-@%:@endif], [t=0])
- test "$universal_binary" = yes && cross_compiling=$real_cross_compiling
- if test ${t-0} != 0; then
- AS_TR_SH(ac_cv_sizeof_$1)="${AS_TR_SH(ac_cv_sizeof_$1)+${AS_TR_SH(ac_cv_sizeof_$1)-} }${t}"
- fi
- }
- : ${AS_TR_SH(ac_cv_sizeof_$1)=0}
-])
-{
- unset cond
- for t in ${AS_TR_SH(ac_cv_sizeof_$1)-}; do
- AS_CASE(["$t"],
- [[[0-9]*|SIZEOF_*]], [
- ${cond+echo "@%:@else"}
- echo "[@%:@define ]AS_TR_CPP(SIZEOF_$1) [$t]"
- break
- ],
- [
- s=`expr $t : ['.*[^0-9]\([0-9][0-9]*\)$']`
- echo "@%:@${cond+el}if defined(__${t}__) || defined(__${t}) || defined(_${t}) || defined($t)"
- echo "@%:@define AS_TR_CPP(SIZEOF_$1) [$[s / rb_cv_char_bit]]"
- cond=1
- ])
- done
- ${cond+echo "@%:@endif"}
-} >> confdefs.h
-m4_bmatch([$1], [\.], [], [else
-AC_CHECK_SIZEOF([$1], 0, [$4])
-fi])
-])
-
-RUBY_CHECK_SIZEOF(int, [], [ILP])
-RUBY_CHECK_SIZEOF(short)
-RUBY_CHECK_SIZEOF(long, [int], [ILP LP])
-RUBY_CHECK_SIZEOF(long long)
-RUBY_CHECK_SIZEOF(__int64)
-RUBY_CHECK_SIZEOF(off_t)
-RUBY_CHECK_SIZEOF(void*, [int long "long long"], [ILP LP LLP])
-RUBY_CHECK_SIZEOF(float)
-RUBY_CHECK_SIZEOF(double)
-RUBY_CHECK_SIZEOF(time_t, [long "long long"], [], [@%:@include <time.h>])
-RUBY_CHECK_SIZEOF(clock_t, [], [], [@%:@include <time.h>])
-
-AC_CACHE_CHECK(packed struct attribute, rb_cv_packed_struct,
- [rb_cv_packed_struct=no
- for mac in \
- "__pragma(pack(push, 1)) x __pragma(pack(pop))" \
- "x __attribute__((packed))" \
- ; do
- AC_TRY_COMPILE([@%:@define PACKED_STRUCT(x) $mac
- PACKED_STRUCT(struct { int a; });], [],
- [rb_cv_packed_struct=$mac; break])
- done])
-packed_struct_unaligned=x
-if test "$rb_cv_packed_struct" != no; then
- AC_DEFINE_UNQUOTED([PACKED_STRUCT(x)], [$rb_cv_packed_struct])
-else
- AC_DEFINE_UNQUOTED([PACKED_STRUCT(x)], x)
-fi
-AC_DEFINE_UNQUOTED(PACKED_STRUCT_UNALIGNED(x), $packed_struct_unaligned)
-
-AC_DEFUN([RUBY_CHECK_PRINTF_PREFIX], [
-AC_CACHE_CHECK([for printf prefix for $1], [rb_cv_pri_prefix_]AS_TR_SH($1),[
- [rb_cv_pri_prefix_]AS_TR_SH($1)=[NONE]
- RUBY_WERROR_FLAG(RUBY_APPEND_OPTIONS(CFLAGS, $rb_cv_wsuppress_flags)
- for pri in $2; do
- AC_TRY_COMPILE(
- [@%:@include <stdio.h>
- @%:@include <stddef.h>
- @%:@ifdef __GNUC__
- @%:@define PRINTF_ARGS(decl, string_index, first_to_check) \
- decl __attribute__((format(printf, string_index, first_to_check)))
- @%:@else
- @%:@define PRINTF_ARGS(decl, string_index, first_to_check) decl
- @%:@endif
- PRINTF_ARGS(void test_sprintf(const char*, ...), 1, 2);],
- [printf("%]${pri}[d", (]$1[)42);
- test_sprintf("%]${pri}[d", (]$1[)42);],
- [rb_cv_pri_prefix_]AS_TR_SH($1)[=[$pri]; break])
- done)])
-if test "[$rb_cv_pri_prefix_]AS_TR_SH($1)" != NONE; then
- AC_DEFINE_UNQUOTED([PRI_]m4_ifval($3,$3,AS_TR_CPP(m4_bpatsubst([$1],[_t$])))[_PREFIX],
- "[$rb_cv_pri_prefix_]AS_TR_SH($1)")
-fi
-])
-
-if test "x$ac_cv_type_long_long" = xyes; then
- RUBY_CHECK_PRINTF_PREFIX(long long, ll I64, LL)
-elif test "x$ac_cv_type___int64" = xyes; then
- RUBY_CHECK_PRINTF_PREFIX(__int64, ll I64, LL)
-fi
-
-dnl RUBY_CHECK_SIZEOF [typename] [if-signed] [if-unsigned] [included]
-AC_DEFUN([RUBY_CHECK_SIGNEDNESS], [dnl
- AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([$4])], [($1)-1 > 0])],
- [$3], [$2])])
-
-dnl RUBY_REPLACE_TYPE [typename] [default type] [macro type] [included]
-AC_DEFUN([RUBY_REPLACE_TYPE], [dnl
- AC_CHECK_TYPE([$1],
- [n="patsubst([$1],["],[\\"])"],
- [n="patsubst([$2],["],[\\"])"],
- [$4])
- AC_CACHE_CHECK([for convertible type of [$1]], rb_cv_[$1]_convertible, [
- u= t=
- AS_CASE(["$n "],
- [*" signed "*], [ ],
- [*" unsigned "*], [
- u=U],
- [RUBY_CHECK_SIGNEDNESS($n, [], [u=U], [$4])])
- if test x"$t" = x; then
- for t in "long long" long int short; do
- test -n "$u" && t="unsigned $t"
- AC_COMPILE_IFELSE(
- [AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([$4])]
- [typedef $n rbcv_conftest_target_type;
- typedef $t rbcv_conftest_replace_type;
- extern rbcv_conftest_target_type rbcv_conftest_var;
- extern rbcv_conftest_replace_type rbcv_conftest_var;
- extern rbcv_conftest_target_type rbcv_conftest_func(void);
- extern rbcv_conftest_replace_type rbcv_conftest_func(void);
- ], [sizeof(rbcv_conftest_target_type) == sizeof(rbcv_conftest_replace_type)])],
- [n="$t"; break])
- done
- fi
- AS_CASE([" $n "],
- [*" long long "*], [
- t=LL],
- [*" long "*], [
- t=LONG],
- [
- t=INT])
- rb_cv_[$1]_convertible=${u}${t}])
- if test "${AS_TR_SH(ac_cv_type_[$1])}" = "yes"; then
- n="$1"
- else
- AS_CASE(["${rb_cv_[$1]_convertible}"],
- [*LL], [n="long long"],
- [*LONG], [n="long"],
- [n="int"])
- AS_CASE(["${rb_cv_[$1]_convertible}"],
- [U*], [n="unsigned $n"])
- fi
- AS_CASE("${rb_cv_[$1]_convertible}", [U*], [u=+1], [u=-1])
- AC_DEFINE_UNQUOTED(rb_[$1], $n)
- AC_DEFINE_UNQUOTED([SIGNEDNESS_OF_]AS_TR_CPP($1), $u)
- AC_DEFINE_UNQUOTED([$3]2NUM[(v)], [${rb_cv_[$1]_convertible}2NUM(v)])
- AC_DEFINE_UNQUOTED(NUM2[$3][(v)], [NUM2${rb_cv_[$1]_convertible}(v)])
- AC_DEFINE_UNQUOTED(PRI_[$3]_PREFIX,
- [PRI_`echo ${rb_cv_[$1]_convertible} | sed ['s/^U//']`_PREFIX])
-])
-RUBY_REPLACE_TYPE(pid_t, int, PIDT)
-RUBY_REPLACE_TYPE(uid_t, int, UIDT)
-RUBY_REPLACE_TYPE(gid_t, int, GIDT)
-RUBY_REPLACE_TYPE(time_t, [], TIMET, [@%:@include <time.h>])
-RUBY_REPLACE_TYPE(dev_t, [int long "long long"], DEVT)
-RUBY_REPLACE_TYPE(mode_t, ["unsigned int" long], MODET, [@%:@include <sys/stat.h>])
-RUBY_REPLACE_TYPE(rlim_t, [int long "long long"], RLIM, [
-@%:@ifdef HAVE_SYS_TYPES_H
-@%:@include <sys/types.h>
-@%:@endif
-@%:@ifdef HAVE_SYS_TYPES_H
-@%:@include <sys/time.h>
-@%:@endif
-@%:@include <sys/resource.h>
-])
-RUBY_REPLACE_TYPE(off_t, [], OFFT)
-RUBY_REPLACE_TYPE(clockid_t, [], CLOCKID)
-
-AC_CACHE_CHECK(for prototypes, rb_cv_have_prototypes,
- [AC_TRY_COMPILE([int foo(int x) { return 0; }], [return foo(10);],
- rb_cv_have_prototypes=yes,
- rb_cv_have_prototypes=no)])
-if test "$rb_cv_have_prototypes" = yes; then
- AC_DEFINE(HAVE_PROTOTYPES)
-fi
-
-AC_CACHE_CHECK(token paste string, rb_cv_tokenpaste,
- [AC_TRY_COMPILE([@%:@define paste(a,b) a@%:@@%:@b],
- [int xy = 1; return paste(x,y);],
- rb_cv_tokenpaste=ansi,
- rb_cv_tokenpaste=knr)])
-if test "$rb_cv_tokenpaste" = ansi; then
- AC_DEFINE(TOKEN_PASTE(x,y),[x@%:@@%:@y])
-else
- AC_DEFINE(TOKEN_PASTE(x,y),[x/**/y])
-fi
-
-AC_CACHE_CHECK(stringization, rb_cv_stringization, [
- rb_cv_stringization=no
- for string in "#expr" '"expr"'; do
- AC_COMPILE_IFELSE([
- AC_LANG_BOOL_COMPILE_TRY([
-#define STRINGIZE0(expr) $string
-#define STRINGIZE(expr) STRINGIZE0(expr)
-#undef real_test_for_stringization
-#define test_for_stringization -.real_test_for_stringization.-
-const char stringized[[]] = STRINGIZE(test_for_stringization);
-], [sizeof(stringized) == 32])],
- [rb_cv_stringization="$string"; break],
- [rb_cv_stringization=no])
- done]
-)
-AC_DEFINE(STRINGIZE(expr),STRINGIZE0(expr))
-if test x"$rb_cv_stringization" != xno -a "$rb_cv_stringization" != "#expr"; then
- AC_DEFINE_UNQUOTED(STRINGIZE0(expr),$rb_cv_stringization)
- AC_DEFINE(OLD_FASHIONED_STRINGIZATION,1)
-fi
-
-AC_CACHE_CHECK([string literal concatenation],
- rb_cv_string_literal_concatenation, [
- AC_COMPILE_IFELSE([
- AC_LANG_BOOL_COMPILE_TRY([
-const char concatenated_literal[[]] = "literals" "to"
- "be" "concatenated.";
-], [sizeof(concatenated_literal) == 26])],
- [rb_cv_string_literal_concatenation=yes],
- [rb_cv_string_literal_concatenation=no])]
-)
-if test "$rb_cv_string_literal_concatenation" = no; then
- AC_DEFINE(NO_STRING_LITERAL_CONCATENATION,1)
-fi
-
-AC_CACHE_CHECK(for variable length prototypes and stdarg.h, rb_cv_stdarg,
- [AC_TRY_COMPILE([
-#include <stdarg.h>
-int foo(int x, ...) {
- va_list va;
- va_start(va, x);
- va_arg(va, int);
- va_arg(va, char *);
- va_arg(va, double);
- return 0;
-}
-], [return foo(10, "", 3.14);],
- rb_cv_stdarg=yes,
- rb_cv_stdarg=no)])
-if test "$rb_cv_stdarg" = yes; then
- AC_DEFINE(HAVE_STDARG_PROTOTYPES)
-fi
-
-AC_CACHE_CHECK(for variable length macro, rb_cv_va_args_macro,
- [AC_TRY_COMPILE([
-int foo(int x, ...);
-@%:@define FOO(a, ...) foo(a, @%:@@%:@__VA_ARGS__)
-], [FOO(1);FOO(1,2);FOO(1,2,3);],
- rb_cv_va_args_macro=yes,
- rb_cv_va_args_macro=no)])
-if test "$rb_cv_va_args_macro" = yes; then
- AC_DEFINE(HAVE_VA_ARGS_MACRO)
-fi
-
-AC_DEFUN([RUBY_DEFINE_IF], [dnl
- m4_ifval([$1], [AS_LITERAL_IF([$1], [], [test "X$1" = X || ])cat <<EOH >> confdefs.h
-@%:@if $1
-EOH
-])dnl
-AC_DEFINE_UNQUOTED($2, $3)dnl
- m4_ifval([$1], [AS_LITERAL_IF([$1], [], [test "X$1" = X || ])cat <<EOH >> confdefs.h
-@%:@endif /* $1 */
-EOH
-])dnl
-])dnl
-
-dnl RUBY_DECL_ATTRIBUTE(attrib, macroname, cachevar, condition, type, code)
-AC_DEFUN([RUBY_DECL_ATTRIBUTE], [dnl
-m4_ifval([$2], dnl
- [AS_VAR_PUSHDEF([attrib], m4_bpatsubst([$2], [(.*)], []))], dnl
- [AS_VAR_PUSHDEF([attrib], m4_toupper(m4_format(%.4s, [$5]))[_]AS_TR_CPP($1))] dnl
-)dnl
-m4_ifval([$3], dnl
- [AS_VAR_PUSHDEF([rbcv],[$3])], dnl
- [AS_VAR_PUSHDEF([rbcv],[rb_cv_]m4_format(%.4s, [$5])[_][$1])]dnl
-)dnl
-m4_pushdef([attrib_code],[m4_bpatsubst([$1],["],[\\"])])dnl
-m4_pushdef([attrib_params],[m4_bpatsubst([$2(x)],[^[^()]*(\([^()]*\)).*],[\1])])dnl
-m4_ifval([$4], [rbcv_cond=["$4"]; test "$rbcv_cond" || unset rbcv_cond])
-AC_CACHE_CHECK(for m4_ifval([$2],[m4_bpatsubst([$2], [(.*)], [])],[$1]) [$5] attribute, rbcv, dnl
-[rbcv=x
-RUBY_WERROR_FLAG([
-for mac in \
- "__attribute__ ((attrib_code)) x" \
- "x __attribute__ ((attrib_code))" \
- "__declspec(attrib_code) x" \
- x; do
- m4_ifval([$4],mac="$mac"${rbcv_cond+" /* only if $rbcv_cond */"})
- AC_TRY_COMPILE(
- m4_ifval([$4],${rbcv_cond+[@%:@if ]$rbcv_cond})
-[@%:@define ]attrib[](attrib_params)[ $mac]
-m4_ifval([$4],${rbcv_cond+[@%:@else]}
-${rbcv_cond+[@%:@define ]attrib[](attrib_params)[ x]}
-${rbcv_cond+[@%:@endif]})
-$6
- attrib[](attrib_params)[;], [],
- [rbcv="$mac"; break])
-done
-])])
-if test "$rbcv" != x; then
- RUBY_DEFINE_IF(m4_ifval([$4],[${rbcv_cond}]), attrib[](attrib_params)[], $rbcv)
-fi
-m4_ifval([$4], [unset rbcv_cond]) dnl
-m4_popdef([attrib_params])dnl
-m4_popdef([attrib_code])dnl
-AS_VAR_POPDEF([attrib])dnl
-AS_VAR_POPDEF([rbcv])dnl
-])
-
-dnl RUBY_FUNC_ATTRIBUTE(attrib, macroname, cachevar, condition)
-AC_DEFUN([RUBY_FUNC_ATTRIBUTE], [dnl
- RUBY_DECL_ATTRIBUTE([$1], [$2], [$3], [$4],
- [function], [@%:@define x void conftest_attribute_check(void)]
- )
-])
-
-dnl RUBY_TYPE_ATTRIBUTE(attrib, macroname, cachevar, condition)
-AC_DEFUN([RUBY_TYPE_ATTRIBUTE], [dnl
- RUBY_DECL_ATTRIBUTE([$1], [$2], [$3], [$4],
- [type], [
-@%:@define x struct conftest_attribute_check {int i;}
-@%:@define mesg ("")
-])
-])
-
-RUBY_FUNC_ATTRIBUTE(noreturn, NORETURN)
-RUBY_FUNC_ATTRIBUTE(deprecated, DEPRECATED)
-RUBY_FUNC_ATTRIBUTE(deprecated("by "@%:@n), DEPRECATED_BY(n,x), rb_cv_func_deprecated_by)
-RUBY_TYPE_ATTRIBUTE(deprecated mesg, DEPRECATED_TYPE(mesg,x), rb_cv_type_deprecated)
-RUBY_FUNC_ATTRIBUTE(noinline, NOINLINE)
-RUBY_FUNC_ATTRIBUTE(weak, WEAK, rb_cv_func_weak)
-if test "$rb_cv_func_weak" != x; then
- AC_DEFINE(HAVE_FUNC_WEAK)
-fi
-
-if_i386=${universal_binary+[defined __i386__]}
-RUBY_FUNC_ATTRIBUTE(stdcall, [], [], ${if_i386})
-RUBY_FUNC_ATTRIBUTE(cdecl, [], [], ${if_i386})
-RUBY_FUNC_ATTRIBUTE(fastcall, [], [], ${if_i386})
-RUBY_FUNC_ATTRIBUTE(optimize("O0"), FUNC_UNOPTIMIZED, rb_cv_func_unoptimized)
-RUBY_FUNC_ATTRIBUTE(optimize("-Os","-fomit-frame-pointer"), FUNC_MINIMIZED, rb_cv_func_minimized)
-
-if test "$GCC" = yes; then
- AC_CACHE_CHECK([for function alias], [rb_cv_gcc_function_alias],
- [rb_cv_gcc_function_alias=no
- for a in alias weak,alias; do
- AC_TRY_LINK([void foo(void) {}
- void bar(void) __attribute__(($a("foo")));], [bar()],
- [rb_cv_gcc_function_alias=$a; break])
- done])
- if test "$rb_cv_gcc_function_alias" != no; then
- AC_DEFINE(HAVE_ATTRIBUTE_FUNCTION_ALIAS)
- AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args)],
- [type prot __attribute__(($rb_cv_gcc_function_alias(@%:@name)));])
- AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION_VOID(prot, name, args)],
- [RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)])
- fi
-
- AC_CACHE_CHECK([for __atomic builtins], [rb_cv_gcc_atomic_builtins], [
- AC_TRY_LINK([unsigned char atomic_var;],
- [
- __atomic_exchange_n(&atomic_var, 0, __ATOMIC_SEQ_CST);
- __atomic_exchange_n(&atomic_var, 1, __ATOMIC_SEQ_CST);
- __atomic_fetch_add(&atomic_var, 1, __ATOMIC_SEQ_CST);
- __atomic_fetch_sub(&atomic_var, 1, __ATOMIC_SEQ_CST);
- __atomic_or_fetch(&atomic_var, 1, __ATOMIC_SEQ_CST);
- ],
- [rb_cv_gcc_atomic_builtins=yes],
- [rb_cv_gcc_atomic_builtins=no])])
- if test "$rb_cv_gcc_atomic_builtins" = yes; then
- AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS)
- fi
-
- AC_CACHE_CHECK([for __sync builtins], [rb_cv_gcc_sync_builtins], [
- AC_TRY_LINK([unsigned char atomic_var;],
- [
- __sync_lock_test_and_set(&atomic_var, 0);
- __sync_lock_test_and_set(&atomic_var, 1);
- __sync_fetch_and_add(&atomic_var, 1);
- __sync_fetch_and_sub(&atomic_var, 1);
- __sync_or_and_fetch(&atomic_var, 1);
- __sync_val_compare_and_swap(&atomic_var, 0, 1);
- ],
- [rb_cv_gcc_sync_builtins=yes],
- [rb_cv_gcc_sync_builtins=no])])
- if test "$rb_cv_gcc_sync_builtins" = yes; then
- AC_DEFINE(HAVE_GCC_SYNC_BUILTINS)
- fi
-
- AC_CACHE_CHECK(for __builtin_unreachable, rb_cv_func___builtin_unreachable,
- [RUBY_WERROR_FLAG(
- [AC_TRY_LINK([volatile int zero;],
- [if (zero) __builtin_unreachable();],
- [rb_cv_func___builtin_unreachable=yes],
- [rb_cv_func___builtin_unreachable=no])
- ])
- ])
- if test "$rb_cv_func___builtin_unreachable" = yes; then
- AC_DEFINE_UNQUOTED(UNREACHABLE, [__builtin_unreachable()])
- fi
-fi
-
-AC_CACHE_CHECK(for exported function attribute, rb_cv_func_exported, [
-rb_cv_func_exported=no
-RUBY_WERROR_FLAG([
-for mac in '__attribute__ ((visibility("default")))' '__declspec(dllexport)'; do
- AC_TRY_COMPILE([@%:@define RUBY_FUNC_EXPORTED $mac extern
- RUBY_FUNC_EXPORTED void conftest_attribute_check(void);], [],
- [rb_cv_func_exported="$mac"; break])
-done
-])])
-if test "$rb_cv_func_exported" != no; then
- AC_DEFINE_UNQUOTED(RUBY_FUNC_EXPORTED, [$rb_cv_func_exported extern])
-fi
-
-RUBY_APPEND_OPTION(XCFLAGS, -DRUBY_EXPORT)
-
-AC_CACHE_CHECK(for function name string predefined identifier,
- rb_cv_function_name_string,
- [rb_cv_function_name_string=no
- RUBY_WERROR_FLAG([
- for func in __func__ __FUNCTION__; do
- AC_TRY_LINK([@%:@include <stdio.h>],
- [puts($func);],
- [rb_cv_function_name_string=$func
- break])
- done
- ])]
-)
-if test "$rb_cv_function_name_string" != no; then
- AC_DEFINE_UNQUOTED(RUBY_FUNCTION_NAME_STRING, [$rb_cv_function_name_string])
-fi
-
-AC_CACHE_CHECK(if enum over int is allowed, rb_cv_enum_over_int, [
- rb_cv_enum_over_int=no
- if test "x$ac_cv_type_long_long" = xyes; then
- type="unsigned long long" max="ULLONG_MAX"
- else
- type="unsigned long" max="ULONG_MAX"
- fi
- RUBY_WERROR_FLAG([
- AC_COMPILE_IFELSE([
- AC_LANG_BOOL_COMPILE_TRY([
- @%:@include <limits.h>
- enum {conftest_max = $max};
- ], [
- (conftest_max == $max) &&
- (sizeof(conftest_max) == sizeof($type))
- ]
- )],
- [rb_cv_enum_over_int=yes],
- [rb_cv_enum_over_int=no]
- )
- ])
-])
-if test $rb_cv_enum_over_int = yes; then
- AC_DEFINE(ENUM_OVER_INT, 1)
-fi
-
-dnl Check whether we need to define sys_nerr locally
-AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default
-@%:@include <errno.h>])
-
-AC_CHECK_DECLS([getenv])
-
-AS_CASE(["$target_cpu"],
-[alpha*|sh4|sh4el|sh4eb], [AS_CASE(["$target_os"::"$GCC"],
- [*::yes], # gcc
- [CFLAGS="-mieee $CFLAGS"],
- [osf*], # ccc
- [CFLAGS="-ieee $CFLAGS"],
- )],
-[sparc*], [AC_LIBOBJ([sparc])])
-
-ac_cv_header_net_socket_h=${ac_cv_header_net_socket_h=no}
-if test "$ac_cv_header_net_socket_h" = yes; then
- ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=no}
-else
- ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=yes}
-fi
-
-
-AC_TYPE_SIZE_T
-RUBY_CHECK_SIGNEDNESS(size_t, [AC_MSG_ERROR(size_t is signed)], [],
- [@%:@include <sys/types.h>])
-RUBY_CHECK_SIZEOF(size_t, [int long void*], [], [@%:@include <sys/types.h>])
-RUBY_CHECK_SIZEOF(ptrdiff_t, size_t, [], [@%:@include <stddef.h>])
-RUBY_CHECK_PRINTF_PREFIX(size_t, z)
-RUBY_CHECK_PRINTF_PREFIX(ptrdiff_t, t)
-AC_STRUCT_ST_BLKSIZE
-AC_STRUCT_ST_BLOCKS
-AC_STRUCT_ST_RDEV
-RUBY_CHECK_SIZEOF([struct stat.st_size], [off_t int long "long long"], [], [@%:@include <sys/stat.h>])
-if test "$ac_cv_member_struct_stat_st_blocks" = yes; then
- RUBY_CHECK_SIZEOF([struct stat.st_blocks], [off_t int long "long long"], [], [@%:@include <sys/stat.h>])
-fi
-RUBY_CHECK_SIZEOF([struct stat.st_ino], [long "long long"], [], [@%:@include <sys/stat.h>])
-AC_CHECK_MEMBERS([struct stat.st_atim])
-AC_CHECK_MEMBERS([struct stat.st_atimespec])
-AC_CHECK_MEMBERS([struct stat.st_atimensec])
-AC_CHECK_MEMBERS([struct stat.st_mtim])
-AC_CHECK_MEMBERS([struct stat.st_mtimespec])
-AC_CHECK_MEMBERS([struct stat.st_mtimensec])
-AC_CHECK_MEMBERS([struct stat.st_ctim])
-AC_CHECK_MEMBERS([struct stat.st_ctimespec])
-AC_CHECK_MEMBERS([struct stat.st_ctimensec])
-AC_CHECK_MEMBERS([struct stat.st_birthtimespec])
-
-AC_CHECK_TYPES([struct timeval], [], [], [@%:@ifdef HAVE_TIME_H
-@%:@include <time.h>
-@%:@endif
-@%:@ifdef HAVE_SYS_TIME_H
-@%:@include <sys/time.h>
-@%:@endif])
-
-if test "${ac_cv_type_struct_timeval}" = yes; then
- RUBY_CHECK_SIZEOF([struct timeval.tv_sec], [time_t long "long long"], [],
- [@%:@ifdef HAVE_TIME_H
-@%:@include <time.h>
-@%:@endif
-@%:@ifdef HAVE_SYS_TIME_H
-@%:@include <sys/time.h>
-@%:@endif])
- AS_CASE(${ac_cv_sizeof_struct_timeval_tv_sec},
- [SIZEOF_INT], [t=int],
- [SIZEOF_LONG], [t=long],
- [SIZEOF_LONG_LONG], [t=LONG_LONG],
- [t=])
- if test "${t}" != ""; then
- AC_DEFINE_UNQUOTED(TYPEOF_TIMEVAL_TV_SEC, [$t])
- fi
-fi
-
-AC_CHECK_TYPES([struct timespec], [], [], [@%:@ifdef HAVE_TIME_H
-@%:@include <time.h>
-@%:@endif
-@%:@ifdef HAVE_SYS_TIME_H
-@%:@include <sys/time.h>
-@%:@endif])
-
-AC_CHECK_TYPES([struct timezone], [], [], [@%:@ifdef HAVE_TIME_H
-@%:@ include <time.h>
-@%:@endif
-@%:@ifdef HAVE_SYS_TIME_H
-@%:@ include <sys/time.h>
-@%:@endif])
-
-AC_CHECK_TYPES([clockid_t], [], [], [@%:@ifdef HAVE_TIME_H
-@%:@ include <time.h>
-@%:@endif
-@%:@ifdef HAVE_SYS_TIME_H
-@%:@ include <sys/time.h>
-@%:@endif])
-
-AC_CACHE_VAL([rb_cv_large_fd_select],
- [AC_CHECK_TYPE(fd_mask, [rb_cv_large_fd_select=yes], [rb_cv_large_fd_select=no])])
-if test "$rb_cv_large_fd_select" = yes; then
- AC_DEFINE(HAVE_RB_FD_INIT, 1)
-fi
-
-dnl RUBY_DEFINT TYPENAME, SIZE, [SIGNED-OR-UNSIGNED], [INCLUDES = DEFAULT-INCLUDES]
-AC_DEFUN([RUBY_DEFINT], [dnl
-AC_CACHE_CHECK([for $1], [rb_cv_type_$1],
-[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4])
-typedef $1 t; int s = sizeof(t) == 42;])],
- [rb_cv_type_$1=yes],
- [AS_CASE([m4_bmatch([$2], [^[1-9][0-9]*$], $2, [$ac_cv_sizeof_]AS_TR_SH($2))],
- ["1"], [ rb_cv_type_$1="m4_if([$3], [], [signed ], [$3 ])char"],
- ["$ac_cv_sizeof_short"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])short"],
- ["$ac_cv_sizeof_int"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])int"],
- ["$ac_cv_sizeof_long"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])long"],
- ["$ac_cv_sizeof_long_long"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])long long"],
- ["$ac_cv_sizeof___int64"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])__int64"],
- [ rb_cv_type_$1=no])])])
-if test "${rb_cv_type_$1}" != no; then
- AC_DEFINE([HAVE_]AS_TR_CPP($1), 1)
- if test "${rb_cv_type_$1}" = yes; then
- m4_bmatch([$2], [^[1-9][0-9]*$], [AC_CHECK_SIZEOF([$1], 0, [AC_INCLUDES_DEFAULT([$4])])],
- [RUBY_CHECK_SIZEOF([$1], [$2], [], [AC_INCLUDES_DEFAULT([$4])])])
- else
- AC_DEFINE_UNQUOTED($1, [$rb_cv_type_$1])
- AC_DEFINE_UNQUOTED([SIZEOF_]AS_TR_CPP($1), [SIZEOF_]AS_TR_CPP([$rb_cv_type_$1]))
- fi
-fi
-])
-
-RUBY_DEFINT(int8_t, 1)
-RUBY_DEFINT(uint8_t, 1, unsigned)
-RUBY_DEFINT(int16_t, 2)
-RUBY_DEFINT(uint16_t, 2, unsigned)
-RUBY_DEFINT(int32_t, 4)
-RUBY_DEFINT(uint32_t, 4, unsigned)
-RUBY_DEFINT(int64_t, 8)
-RUBY_DEFINT(uint64_t, 8, unsigned)
-RUBY_DEFINT(intptr_t, void*)
-RUBY_DEFINT(uintptr_t, void*, unsigned)
-RUBY_DEFINT(ssize_t, size_t, [], [@%:@include <sys/types.h>]) dnl may differ from int, so not use AC_TYPE_SSIZE_T.
-
-RUBY_NACL_CHECK_PEPPER_TYPES
-
-AC_CACHE_CHECK(for stack end address, rb_cv_stack_end_address,
-[rb_cv_stack_end_address=no
- AC_TRY_LINK(
- [extern void *__libc_stack_end;],
- [if (!__libc_stack_end) return 1;],
- [rb_cv_stack_end_address="__libc_stack_end"])
-])
-if test $rb_cv_stack_end_address != no; then
- AC_DEFINE_UNQUOTED(STACK_END_ADDRESS, $rb_cv_stack_end_address)
-fi
-
-# posix_memalign(memptr, alignment, size) implemented for OpenBSD 4.8 doesn't work if alignment > MALLOC_PAGESIZE.
-# [ruby-core:42158] https://bugs.ruby-lang.org/issues/5901
-# OpenBSD 5.2 fixed the problem. (src/lib/libc/stdlib/malloc.c:1.142)
-# MirOS #10semel has the problem but fixed in the repository. (src/lib/libc/stdlib/malloc.c:1.9)
-AS_CASE(["$target_os"],
-[openbsd*|mirbsd*], [
- AC_CACHE_CHECK(for heap align log on openbsd, rb_cv_page_size_log,
- [rb_cv_page_size_log=no
- for page_log in 12 13; do
- AC_TRY_RUN([
-#include <math.h>
-#include <unistd.h>
-
-int
-main() {
- if ((int)log2((double)sysconf(_SC_PAGESIZE)) != $page_log) return 1;
- return 0;
-}
- ],
- rb_cv_page_size_log="$page_log"; break)
- done])
- if test $rb_cv_page_size_log != no; then
- AC_DEFINE_UNQUOTED(HEAP_ALIGN_LOG, $rb_cv_page_size_log)
- else
- AC_DEFINE_UNQUOTED(HEAP_ALIGN_LOG, 12)
- fi
-])
-
-dnl Checks for library functions.
-AC_TYPE_GETGROUPS
-AC_TYPE_SIGNAL
-AS_CASE(["${target_cpu}-${target_os}:${target_archs}"],
-[powerpc-darwin*], [
- AC_LIBSOURCES(alloca.c)
- AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])
- AC_DEFINE(C_ALLOCA)
- AC_DEFINE_UNQUOTED(alloca, alloca)
- ],
-[universal-darwin*:*ppc*], [
- AC_LIBSOURCES(alloca.c)
- AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])
- RUBY_DEFINE_IF([defined __powerpc__], C_ALLOCA, 1)
- RUBY_DEFINE_IF([defined __powerpc__], alloca, alloca)
- ],
-[
- AC_FUNC_ALLOCA
- ])
-if test "x$ALLOCA" = "x"; then
- AC_CACHE_CHECK([for dynamic size alloca], rb_cv_dynamic_alloca, [
- for chk in ok __chkstk; do
- AC_TRY_LINK([
- @%:@ifdef HAVE_ALLOCA_H
- @%:@include <alloca.h>
- @%:@endif
- void $chk() {}
- int dynamic_alloca_test;
- int dynamic_alloca_result;],
- [dynamic_alloca_result = alloca(dynamic_alloca_test) != 0;],
- [rb_cv_dynamic_alloca=$chk; break])
- done])
- if test "x$rb_cv_dynamic_alloca" = "x__chkstk"; then
- AC_DEFINE_UNQUOTED(RUBY_ALLOCA_CHKSTK, _$rb_cv_dynamic_alloca)
- AS_CASE("$target_cpu",
- [x64|x86_64], [
- AC_SUBST([ALLOCA], [\${LIBOBJDIR}x86_64-chkstk.${ac_objext}])
- ],)
- fi
-fi
-AC_FUNC_MEMCMP
-
-# http://sources.redhat.com/ml/libc-hacker/2005-08/msg00008.html
-# Debian GNU/Linux Etch's libc6.1 2.3.6.ds1-13etch5 has this problem.
-# Debian GNU/Linux Lenny's libc6.1 2.7-10 has no problem.
-AC_CACHE_CHECK(for broken erfc of glibc-2.3.6 on IA64, rb_cv_broken_glibc_ia64_erfc,
- [AC_TRY_RUN([
-#include <math.h>
-int
-main()
-{
- erfc(10000.0);
- return 0;
-}
-],
- rb_cv_broken_glibc_ia64_erfc=no,
- rb_cv_broken_glibc_ia64_erfc=yes,
- rb_cv_broken_glibc_ia64_erfc=no)])
-AS_CASE([$rb_cv_broken_glibc_ia64_erfc],[yes],[ac_cv_func_erf=no])
-
-AS_CASE(["$target_os"],[freebsd*],[
- AC_DEFINE(BROKEN_CLOSE)
- AC_REPLACE_FUNCS(close)
- ])
-
-AC_REPLACE_FUNCS(acosh)
-AC_REPLACE_FUNCS(cbrt)
-AC_REPLACE_FUNCS(crypt)
-AC_REPLACE_FUNCS(dup2)
-AC_REPLACE_FUNCS(erf)
-AC_REPLACE_FUNCS(explicit_bzero)
-AC_REPLACE_FUNCS(ffs)
-AC_REPLACE_FUNCS(finite)
-AC_REPLACE_FUNCS(flock)
-AC_REPLACE_FUNCS(hypot)
-AC_REPLACE_FUNCS(isinf)
-AC_REPLACE_FUNCS(isnan)
-AC_REPLACE_FUNCS(lgamma_r)
-AC_REPLACE_FUNCS(memmove)
-AC_REPLACE_FUNCS(nextafter)
-AC_REPLACE_FUNCS(setproctitle)
-AC_REPLACE_FUNCS(strchr)
-AC_REPLACE_FUNCS(strerror)
-AC_REPLACE_FUNCS(strlcat)
-AC_REPLACE_FUNCS(strlcpy)
-AC_REPLACE_FUNCS(strstr)
-AC_REPLACE_FUNCS(tgamma)
-
-# for missing/setproctitle.c
-AS_CASE(["$target_os"],
-[aix* | k*bsd*-gnu | kopensolaris*-gnu | linux* | darwin*], [AC_DEFINE(SPT_TYPE,SPT_REUSEARGV)],
-[hpux*], [AC_DEFINE(SPT_TYPE,SPT_PSTAT) ],
-[])
-AC_CHECK_HEADERS(sys/pstat.h)
-
-
-AC_CACHE_CHECK(for signbit, rb_cv_have_signbit,
- [AC_TRY_LINK([
-#include <math.h>
-], [int v = signbit(-0.0);],
- rb_cv_have_signbit=yes,
- rb_cv_have_signbit=no)])
-if test "$rb_cv_have_signbit" = yes; then
- AC_DEFINE(HAVE_SIGNBIT)
-else
- AC_LIBOBJ([signbit])
-fi
-
-AC_CACHE_CHECK(for broken memmem, rb_cv_broken_memmem, [
- AC_TRY_RUN([
-@%:@include <string.h>
-
-int
-main(int argc, char **argv)
-{
- const char *str = "hogefugafoobar";
- const char *rs = "foo";
- const char *empty = "";
- char *p;
-
- p = memmem(str, strlen(str), rs, strlen(rs));
- if (p == str+8) {
- p = memmem(str, strlen(str), empty, strlen(empty));
- if (p == str)
- return 0;
- }
- return 1;
-}
- ],
- rb_cv_broken_memmem=no,
- rb_cv_broken_memmem=yes,
- rb_cv_broken_memmem=yes)
-])
-test x"$rb_cv_broken_memmem" = xyes && ac_cv_func_memmem=no
-
-AC_FUNC_FORK
-
-AC_CHECK_FUNCS(__syscall)
-AC_CHECK_FUNCS(_longjmp) # used for AC_ARG_WITH(setjmp-type)
-# we don't use _setjmp if _longjmp doesn't exist.
-test x$ac_cv_func__longjmp = xno && ac_cv_func__setjmp=no
-AC_CHECK_FUNCS(_setjmp) # used for AC_ARG_WITH(setjmp-type)
-AC_CHECK_FUNCS(_setjmpex) # used for AC_ARG_WITH(setjmp-type)
-AC_CHECK_FUNCS(atan2l atan2f)
-AC_CHECK_FUNCS(chroot)
-AC_CHECK_FUNCS(chsize)
-AC_CHECK_FUNCS(clock_gettime)
-AC_CHECK_FUNCS(cosh)
-AC_CHECK_FUNCS(daemon)
-AC_CHECK_FUNCS(dirfd)
-AC_CHECK_FUNCS(dl_iterate_phdr)
-AC_CHECK_FUNCS(dlopen)
-AC_CHECK_FUNCS(dladdr)
-AC_CHECK_FUNCS(dup)
-AC_CHECK_FUNCS(dup3)
-AC_CHECK_FUNCS(eaccess)
-AC_CHECK_FUNCS(endgrent)
-AC_CHECK_FUNCS(fchmod)
-AC_CHECK_FUNCS(fchown)
-AC_CHECK_FUNCS(fcntl)
-AC_CHECK_FUNCS(fdatasync)
-AC_CHECK_FUNCS(fgetattrlist)
-AC_CHECK_FUNCS(fmod)
-AC_CHECK_FUNCS(fsync)
-AC_CHECK_FUNCS(ftruncate)
-AC_CHECK_FUNCS(ftruncate64) # used for Win32 platform
-AC_CHECK_FUNCS(getattrlist)
-AC_CHECK_FUNCS(getcwd)
-AC_CHECK_FUNCS(getgidx)
-AC_CHECK_FUNCS(getgrnam)
-AC_CHECK_FUNCS(getgrnam_r)
-AC_CHECK_FUNCS(getgroups)
-AC_CHECK_FUNCS(getpgid)
-AC_CHECK_FUNCS(getpgrp)
-AC_CHECK_FUNCS(getpriority)
-AC_CHECK_FUNCS(getpwnam_r)
-AC_CHECK_FUNCS(getresgid)
-AC_CHECK_FUNCS(getresuid)
-AC_CHECK_FUNCS(getrlimit)
-AC_CHECK_FUNCS(getsid)
-AC_CHECK_FUNCS(gettimeofday) # for making ac_cv_func_gettimeofday
-AC_CHECK_FUNCS(getuidx)
-AC_CHECK_FUNCS(gmtime_r)
-AC_CHECK_FUNCS(initgroups)
-AC_CHECK_FUNCS(ioctl)
-AC_CHECK_FUNCS(isfinite)
-AC_CHECK_FUNCS(issetugid)
-AC_CHECK_FUNCS(killpg)
-AC_CHECK_FUNCS(lchmod)
-AC_CHECK_FUNCS(lchown)
-AC_CHECK_FUNCS(link)
-AC_CHECK_FUNCS(llabs)
-AC_CHECK_FUNCS(lockf)
-AC_CHECK_FUNCS(log2)
-AC_CHECK_FUNCS(lstat)
-AC_CHECK_FUNCS(malloc_usable_size)
-AC_CHECK_FUNCS(malloc_size)
-AC_CHECK_FUNCS(mblen)
-AC_CHECK_FUNCS(memalign)
-AC_CHECK_FUNCS(memset_s)
-AC_CHECK_FUNCS(writev)
-AC_CHECK_FUNCS(memrchr)
-AC_CHECK_FUNCS(memmem)
-AC_CHECK_FUNCS(mkfifo)
-AC_CHECK_FUNCS(mknod)
-AC_CHECK_FUNCS(mktime)
-AC_CHECK_FUNCS(pipe2)
-AC_CHECK_FUNCS(poll)
-AC_CHECK_FUNCS(posix_fadvise)
-AC_CHECK_FUNCS(posix_memalign)
-AC_CHECK_FUNCS(ppoll)
-AC_CHECK_FUNCS(pread)
-AC_CHECK_FUNCS(qsort_r)
-AC_CHECK_FUNCS(readlink)
-AC_CHECK_FUNCS(round)
-AC_CHECK_FUNCS(sched_getaffinity)
-AC_CHECK_FUNCS(seekdir)
-AC_CHECK_FUNCS(select_large_fdset)
-AC_CHECK_FUNCS(sendfile)
-AC_CHECK_FUNCS(setegid)
-AC_CHECK_FUNCS(setenv)
-AC_CHECK_FUNCS(seteuid)
-AC_CHECK_FUNCS(setgid)
-AC_CHECK_FUNCS(setgroups)
-AC_CHECK_FUNCS(setpgid)
-AC_CHECK_FUNCS(setpgrp)
-AC_CHECK_FUNCS(setregid)
-AC_CHECK_FUNCS(setresgid)
-AC_CHECK_FUNCS(setresuid)
-AC_CHECK_FUNCS(setreuid)
-AC_CHECK_FUNCS(setrgid)
-AC_CHECK_FUNCS(setrlimit)
-AC_CHECK_FUNCS(setruid)
-AC_CHECK_FUNCS(setsid)
-AC_CHECK_FUNCS(setuid)
-AC_CHECK_FUNCS(shutdown)
-AC_CHECK_FUNCS(sigaction)
-AC_CHECK_FUNCS(sigaltstack)
-AC_CHECK_FUNCS(sigprocmask)
-AC_CHECK_FUNCS(sinh)
-AC_CHECK_FUNCS(spawnv)
-AC_CHECK_FUNCS(symlink)
-AC_CHECK_FUNCS(syscall)
-AC_CHECK_FUNCS(sysconf)
-AC_CHECK_FUNCS(tanh)
-AC_CHECK_FUNCS(telldir)
-AC_CHECK_FUNCS(timegm)
-AC_CHECK_FUNCS(times)
-AC_CHECK_FUNCS(truncate)
-AC_CHECK_FUNCS(truncate64) # used for Win32
-AC_CHECK_FUNCS(unsetenv)
-AC_CHECK_FUNCS(utimensat)
-AC_CHECK_FUNCS(utimes)
-AC_CHECK_FUNCS(wait4)
-AC_CHECK_FUNCS(waitpid)
-
-AS_IF([test "$ac_cv_func_memset_s" = yes],
- [RUBY_DEFINE_IF([!defined __STDC_WANT_LIB_EXT1__], [__STDC_WANT_LIB_EXT1__], 1)])
-
-AS_IF([test "$ac_cv_func_getcwd" = yes], [
- AC_CACHE_CHECK(if getcwd allocates buffer if NULL is given, [rb_cv_getcwd_malloc],
- [AC_TRY_RUN([
-@%:@include <stddef.h>
-@%:@include <stdio.h>
-@%:@ifdef HAVE_UNISTD_H
-@%:@include <unistd.h>
-@%:@endif
-@%:@ifndef EXIT_SUCCESS
-@%:@define EXIT_SUCCESS 0
-@%:@endif
-@%:@ifndef EXIT_FAILURE
-@%:@define EXIT_FAILURE 1
-@%:@endif
-
-int
-main(int argc, char **argv)
-{
- if (!getcwd(NULL, 0)) return EXIT_FAILURE;
- return EXIT_SUCCESS;
-}
-],
- rb_cv_getcwd_malloc=yes,
- rb_cv_getcwd_malloc=no,
- AS_CASE($target_os,
- [linux*|darwin*|*bsd|cygwin*|mingw*|mswin*],
- [rb_cv_getcwd_malloc=yes],
- [rb_cv_getcwd_malloc=no]))])
- AS_IF([test "$rb_cv_getcwd_malloc" = no], [AC_DEFINE(NO_GETCWD_MALLOC, 1)])
-])
-
-AC_DEFUN([RUBY_CHECK_BUILTIN_FUNC], [dnl
-AC_CACHE_CHECK([for $1], AS_TR_SH(rb_cv_builtin_$1),
- [AC_LINK_IFELSE(
- [AC_LANG_PROGRAM([int foo;], [$2;])],
- [AS_TR_SH(rb_cv_builtin_$1)=yes],
- [AS_TR_SH(rb_cv_builtin_$1)=no])])
-if test "${AS_TR_SH(rb_cv_builtin_$1)}" != no; then
- AC_DEFINE(AS_TR_CPP(HAVE_BUILTIN_$1))
-fi])
-RUBY_CHECK_BUILTIN_FUNC(__builtin_bswap16, [__builtin_bswap16(0)])
-RUBY_CHECK_BUILTIN_FUNC(__builtin_bswap32, [__builtin_bswap32(0)])
-RUBY_CHECK_BUILTIN_FUNC(__builtin_bswap64, [__builtin_bswap64(0)])
-RUBY_CHECK_BUILTIN_FUNC(__builtin_clz, [__builtin_clz(0)])
-RUBY_CHECK_BUILTIN_FUNC(__builtin_clzl, [__builtin_clzl(0)])
-RUBY_CHECK_BUILTIN_FUNC(__builtin_clzll, [__builtin_clzll(0)])
-RUBY_CHECK_BUILTIN_FUNC(__builtin_choose_expr, [
- [int x[__extension__(__builtin_choose_expr(1, 1, -1))]];
- [int y[__extension__(__builtin_choose_expr(0, -1, 1))]];
- ])
-if test x$rb_cv_builtin___builtin_choose_expr = xyes; then
- RUBY_CHECK_BUILTIN_FUNC(__builtin_choose_expr_constant_p, [
- [int x[__extension__(__builtin_choose_expr(__builtin_constant_p(1), 1, -1))]];
- [int y[__extension__(__builtin_choose_expr(__builtin_constant_p(foo), -1, 1))]];
- ])
-fi
-RUBY_CHECK_BUILTIN_FUNC(__builtin_types_compatible_p, [__builtin_types_compatible_p(int, int)])
-
-if test "$ac_cv_func_qsort_r" != no; then
- AC_CACHE_CHECK(whether qsort_r is GNU version, rb_cv_gnu_qsort_r,
- [AC_TRY_COMPILE([
-@%:@include <stdlib.h>
-void qsort_r(void *base, size_t nmemb, size_t size,
- int (*compar)(const void *, const void *, void *),
- void *arg);
-],[ ],
- [rb_cv_gnu_qsort_r=yes],
- [rb_cv_gnu_qsort_r=no])
- ])
- AC_CACHE_CHECK(whether qsort_r is BSD version, rb_cv_bsd_qsort_r,
- [AC_TRY_COMPILE([
-@%:@include <stdlib.h>
-void qsort_r(void *base, size_t nmemb, size_t size,
- void *arg, int (*compar)(void *, const void *, const void *));
-],[ ],
- [rb_cv_bsd_qsort_r=yes],
- [rb_cv_bsd_qsort_r=no])
- ])
- AS_CASE("$rb_cv_gnu_qsort_r:$rb_cv_bsd_qsort_r",
- [yes:no], [
- AC_DEFINE(HAVE_GNU_QSORT_R, 1)
- ],
- [no:yes], [
- AC_DEFINE(HAVE_BSD_QSORT_R, 1)
- ])
-fi
-
-AC_CACHE_CHECK(whether atan2 handles Inf as C99, rb_cv_atan2_inf_c99, [
- AS_IF([test $ac_cv_func_atan2f:$ac_cv_func_atan2l = yes:yes], [
- AC_TRY_RUN([
-@%:@include <math.h>
-@%:@ifdef HAVE_UNISTD_H
-@%:@include <unistd.h>
-@%:@endif
-@%:@ifndef EXIT_SUCCESS
-@%:@define EXIT_SUCCESS 0
-@%:@endif
-@%:@ifndef EXIT_FAILURE
-@%:@define EXIT_FAILURE 1
-@%:@endif
-
-int
-main(int argc, char **argv)
-{
- if (fabs(atan2(INFINITY, INFINITY) - M_PI_4) <= 0.01) return EXIT_SUCCESS;
- return EXIT_FAILURE;
-}
-],
- [rb_cv_atan2_inf_c99=yes],
- [rb_cv_atan2_inf_c99=no],
- [AS_CASE($target_os, [mingw*|mswin*], [rb_cv_atan2_inf_c99=no], [rb_cv_atan2_inf_c99=yes])]
- )
- ], [rb_cv_atan2_inf_c99=no])
-])
-AS_IF([test "x$rb_cv_atan2_inf_c99" = xyes], [AC_DEFINE(ATAN2_INF_C99)])
-
-# Some platform need -lrt for clock_gettime, but the other don't.
-if test x"$ac_cv_func_clock_gettime" != xyes; then
- # glibc 2.17 moves clock_* functions from librt to the main C library.
- # http://sourceware.org/ml/libc-announce/2012/msg00001.html
- AC_CHECK_LIB(rt, clock_gettime)
- if test x"$ac_cv_lib_rt_clock_gettime" = xyes; then
- AC_DEFINE(HAVE_CLOCK_GETTIME, 1)
- fi
-fi
-AC_CHECK_FUNCS(clock_getres) # clock_getres should be tested after clock_gettime test including librt test.
-
-AC_CACHE_CHECK(for unsetenv returns a value, rb_cv_unsetenv_return_value,
- [AC_TRY_COMPILE([
-#include <stdlib.h>
-], [int v = unsetenv("foo");],
- rb_cv_unsetenv_return_value=yes,
- rb_cv_unsetenv_return_value=no)])
-if test "$rb_cv_unsetenv_return_value" = no; then
- AC_DEFINE(VOID_UNSETENV)
-fi
-
-# used for AC_ARG_WITH(setjmp-type)
-AC_CACHE_CHECK(for sigsetjmp as a macro or function, ac_cv_func_sigsetjmp,
- [AC_TRY_COMPILE([
-#include <setjmp.h>
-], [sigjmp_buf env; sigsetjmp(env,1);],
- ac_cv_func_sigsetjmp=yes,
- ac_cv_func_sigsetjmp=no)])
-
-AC_DEFUN([RUBY_CHECK_BUILTIN_SETJMP], [
-if test x"${ac_cv_func___builtin_setjmp}" = xyes; then
- unset ac_cv_func___builtin_setjmp
-fi
-AC_CACHE_CHECK(for __builtin_setjmp, ac_cv_func___builtin_setjmp,
- [
- ac_cv_func___builtin_setjmp=no
- for cast in "" "(void **)"; do
- RUBY_WERROR_FLAG(
- [AC_TRY_LINK([@%:@include <setjmp.h>
- @%:@include <stdio.h>
- jmp_buf jb;
- void t(void) {__builtin_longjmp($cast jb, 1);}
- int jump(void) {(void)(__builtin_setjmp($cast jb) ? 1 : 0); return 0;}],
- [
- void (*volatile f)(void) = t;
- if (!jump()) printf("%d\n", f != 0);
- ],
- [ac_cv_func___builtin_setjmp="yes with cast ($cast)"])
- ])
- test "$ac_cv_func___builtin_setjmp" = no || break
- done])
-])
-
-AC_DEFUN([RUBY_SETJMP_TYPE], [
-RUBY_CHECK_BUILTIN_SETJMP
-AC_MSG_CHECKING(for setjmp type)
-setjmp_suffix=
-AC_ARG_WITH(setjmp-type,
- AS_HELP_STRING([--with-setjmp-type], [select setjmp type]),
- [
- AS_CASE([$withval],
- [__builtin_setjmp], [setjmp=__builtin_setjmp],
- [_setjmp], [ setjmp_prefix=_],
- [sigsetjmp], [ setjmp_prefix=sig],
- [setjmp], [ setjmp_prefix=],
- [setjmpex], [ setjmp_prefix= setjmp_suffix=ex],
- [''], [ unset setjmp_prefix],
- [ AC_MSG_ERROR(invalid setjmp type: $withval)])], [unset setjmp_prefix])
-setjmp_cast=
-if test ${setjmp_prefix+set}; then
- if test "${setjmp_prefix}" && eval test '$ac_cv_func_'${setjmp_prefix}setjmp${setjmp_suffix} = no; then
- AC_MSG_ERROR(${setjmp_prefix}setjmp${setjmp_suffix} is not available)
- fi
-elif { AS_CASE("$ac_cv_func___builtin_setjmp", [yes*], [true], [false]) }; then
- setjmp_cast=`expr "$ac_cv_func___builtin_setjmp" : "yes with cast (\(.*\))"`
- setjmp_prefix=__builtin_
- setjmp_suffix=
-elif test "$ac_cv_header_setjmpex_h:$ac_cv_func__setjmpex" = yes:yes; then
- setjmp_prefix=
- setjmp_suffix=ex
-elif test "$ac_cv_func__setjmp" = yes; then
- setjmp_prefix=_
- setjmp_suffix=
-elif test "$ac_cv_func_sigsetjmp" = yes; then
- AS_CASE([$target_os],[solaris*|cygwin*],[setjmp_prefix=],[setjmp_prefix=sig])
- setjmp_suffix=
-else
- setjmp_prefix=
- setjmp_suffix=
-fi
-if test x$setjmp_prefix = xsig; then
- setjmp_sigmask=yes
-else
- unset setjmp_sigmask
-fi
-AC_MSG_RESULT(${setjmp_prefix}setjmp${setjmp_suffix}${setjmp_cast:+\($setjmp_cast\)})
-AC_DEFINE_UNQUOTED([RUBY_SETJMP(env)], [${setjmp_prefix}setjmp${setjmp_suffix}($setjmp_cast(env)${setjmp_sigmask+,0})])
-AC_DEFINE_UNQUOTED([RUBY_LONGJMP(env,val)], [${setjmp_prefix}longjmp($setjmp_cast(env),val)])
-AC_DEFINE_UNQUOTED(RUBY_JMP_BUF, ${setjmp_sigmask+${setjmp_prefix}}jmp_buf)
-])
-# End of setjmp check.
-
-AC_ARG_ENABLE(setreuid,
- AS_HELP_STRING([--enable-setreuid], [use setreuid()/setregid() according to need even if obsolete]),
- [use_setreuid=$enableval])
-if test "$use_setreuid" = yes; then
- AC_DEFINE(USE_SETREUID)
- AC_DEFINE(USE_SETREGID)
-fi
-AC_STRUCT_TIMEZONE
-AC_CACHE_CHECK(for struct tm.tm_gmtoff, rb_cv_member_struct_tm_tm_gmtoff,
- [AC_TRY_COMPILE([@%:@include <time.h>],
- [struct tm t; t.tm_gmtoff = 3600;],
- [rb_cv_member_struct_tm_tm_gmtoff=yes],
- [rb_cv_member_struct_tm_tm_gmtoff=no])])
-if test "$rb_cv_member_struct_tm_tm_gmtoff" = yes; then
- AC_DEFINE(HAVE_STRUCT_TM_TM_GMTOFF)
-fi
-AC_CACHE_CHECK(for external int daylight, rb_cv_have_daylight,
- [AC_TRY_LINK([#include <time.h>
- int i;],
- [i = daylight;],
- rb_cv_have_daylight=yes,
- rb_cv_have_daylight=no)])
-if test "$rb_cv_have_daylight" = yes; then
- AC_DEFINE(HAVE_DAYLIGHT)
-fi
-AC_DEFUN([RUBY_CHECK_VARTYPE], [dnl
-AC_CACHE_CHECK([for external $1], AS_TR_SH(rb_cv_var_$1),
- [AS_TR_SH(rb_cv_var_$1)=no
- AC_TRY_COMPILE([
-#ifndef _XOPEN_SOURCE
-#define _XOPEN_SOURCE 1
-#endif
-$2
-;
-const volatile void *volatile t;],
- [t = &(&$1)[0];],
- [for t in $3; do
- AC_TRY_COMPILE([
-#ifndef _XOPEN_SOURCE
-#define _XOPEN_SOURCE 1
-#endif
-$2
-;
-extern $t $1;
-const volatile void *volatile t;],
- [t = &(&$1)[0];],
- [AS_TR_SH(rb_cv_var_$1)=$t; break])
- done])])
-if test "${AS_TR_SH(rb_cv_var_$1)}" != no; then
- AC_DEFINE(AS_TR_CPP(HAVE_VAR_$1))
- AC_DEFINE_UNQUOTED(AS_TR_CPP(TYPEOF_VAR_$1), ${AS_TR_SH(rb_cv_var_$1)})
-fi])
-RUBY_CHECK_VARTYPE(timezone, [@%:@include <time.h>], [long int])
-RUBY_CHECK_VARTYPE(altzone, [@%:@include <time.h>], [long int])
-AC_CHECK_FUNCS(timezone)
-if test "$ac_cv_func_timezone" = yes; then
- AC_CACHE_CHECK([whether timezone requires zero arguments], rb_cv_func_timezone_void,
- [AC_TRY_COMPILE([@%:@include <time.h>],
- [(void)timezone(0, 0);],
- [rb_cv_func_timezone_void=no],
- [rb_cv_func_timezone_void=yes])]
- )
- if test $rb_cv_func_timezone_void = yes; then
- AC_DEFINE(TIMEZONE_VOID)
- fi
-fi
-
-AC_CACHE_CHECK(for negative time_t for gmtime(3), rb_cv_negative_time_t,
- [AC_TRY_RUN([
-#include <stdlib.h>
-#include <time.h>
-
-void
-check(tm, y, m, d, h, s)
- struct tm *tm;
- int y, m, d, h, s;
-{
- if (!tm ||
- tm->tm_year != y ||
- tm->tm_mon != m-1 ||
- tm->tm_mday != d ||
- tm->tm_hour != h ||
- tm->tm_sec != s) {
- exit(1);
- }
-}
-
-int
-main()
-{
- time_t t = -1;
- struct tm *tm;
-
- check(gmtime(&t), 69, 12, 31, 23, 59);
- t = ~(time_t)0 << 31;
- check(gmtime(&t), 1, 12, 13, 20, 52);
- return 0;
-}
-],
- rb_cv_negative_time_t=yes,
- rb_cv_negative_time_t=no,
- rb_cv_negative_time_t=yes)])
-if test "$rb_cv_negative_time_t" = yes; then
- AC_DEFINE(NEGATIVE_TIME_T)
-fi
-
-# [ruby-dev:40910] overflow of time on FreeBSD
-# http://www.freebsd.org/cgi/query-pr.cgi?pr=145341
-AC_CACHE_CHECK(for localtime(3) overflow correctly, rb_cv_localtime_overflow,
- [AC_TRY_RUN([
-#include <stdlib.h>
-#include <time.h>
-
-void
-check(time_t t1)
-{
- struct tm *tm;
- time_t t2;
- tm = localtime(&t1);
- if (!tm)
- return; /* overflow detected. ok. */
- t2 = mktime(tm);
- if (t1 == t2)
- return; /* round-trip. ok. */
- exit(1);
-}
-
-int
-main()
-{
- time_t t;
- if (~(time_t)0 <= 0) {
- t = (((time_t)1) << (sizeof(time_t) * 8 - 2));
- t |= t - 1;
- }
- else {
- t = ~(time_t)0;
- }
- check(t);
- return 0;
-}
-],
- rb_cv_localtime_overflow=yes,
- rb_cv_localtime_overflow=no,
- rb_cv_localtime_overflow=no)])
-if test "$rb_cv_localtime_overflow" = no; then
- AC_DEFINE(LOCALTIME_OVERFLOW_PROBLEM)
-fi
-
-if test "$ac_cv_func_sigprocmask" = yes && test "$ac_cv_func_sigaction" = yes; then
- AC_DEFINE(POSIX_SIGNAL)
-else
- AC_CHECK_FUNCS(sigsetmask)
- AC_CACHE_CHECK(for BSD signal semantics, rb_cv_bsd_signal,
- [AC_TRY_RUN([
-#include <stdio.h>
-#include <signal.h>
-
-void
-sig_handler(dummy)
- int dummy;
-{
-}
-
-int
-main()
-{
- signal(SIGINT, sig_handler);
- kill(getpid(), SIGINT);
- kill(getpid(), SIGINT);
- return 0;
-}
-],
- rb_cv_bsd_signal=yes,
- rb_cv_bsd_signal=no,
- rb_cv_bsd_signal=$ac_cv_func_sigsetmask)])
- if test "$rb_cv_bsd_signal" = yes; then
- AC_DEFINE(BSD_SIGNAL)
- fi
-fi
-
-if test "$ac_cv_func_getpgid" = no; then
- # AC_FUNC_GETPGRP fails when cross-compiling with old autoconf.
- # autoconf is changed between 2.52d and 2.52f?
- # http://lists.gnu.org/archive/html/bug-gnu-utils/2001-09/msg00181.html
- # "autoconf cleanup for AC_FUNC_GETPGRP and GETPGRP_VOID"
-AC_FUNC_GETPGRP
-fi
-if test "$ac_cv_func_setpgid:$ac_cv_func_setpgrp" = no:yes; then
- # AC_FUNC_SETPGRP fails when cross-compiling. (until autoconf 2.69?)
- # https://lists.gnu.org/archive/html/bug-autoconf/2013-02/msg00002.html
- # "AC_FUNC_SETPGRP fails to work properly when cross-compiling"
-AC_FUNC_SETPGRP
-fi
-
-if test x"$ac_cv_func_dirfd" = xno; then
- AS_CASE(["$target_os"],[solaris*],
- [AC_CHECK_MEMBERS([DIR.d_fd, DIR.dd_fd],,,[
-#include <sys/types.h>
-#include <dirent.h>
-])])
-fi
-
-if test x"$target_cpu" = xia64; then
- AC_LIBOBJ([ia64])
- AC_CACHE_CHECK(for __libc_ia64_register_backing_store_base,
- rb_cv___libc_ia64_register_backing_store_base,
- [rb_cv___libc_ia64_register_backing_store_base=no
- AC_TRY_LINK(
- [extern unsigned long __libc_ia64_register_backing_store_base;],
- [unsigned long p = __libc_ia64_register_backing_store_base;
- printf("%ld\n", p);],
- [rb_cv___libc_ia64_register_backing_store_base=yes])])
- if test $rb_cv___libc_ia64_register_backing_store_base = yes; then
- AC_DEFINE(HAVE___LIBC_IA64_REGISTER_BACKING_STORE_BASE)
- fi
-fi
-
-AC_CACHE_CHECK(whether right shift preserve sign bit, rb_cv_rshift_sign,
- [AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([], [(-1==(-1>>1))])],
- rb_cv_rshift_sign=yes,
- rb_cv_rshift_sign=no)])
-if test "$rb_cv_rshift_sign" = yes; then
- AC_DEFINE(RSHIFT(x,y), ((x)>>(int)(y)))
-else
- AC_DEFINE(RSHIFT(x,y), (((x)<0) ? ~((~(x))>>(int)(y)) : (x)>>(int)(y)))
-fi
-
-if test x"$ac_cv_func_gettimeofday" != xyes; then
- AC_MSG_ERROR(gettimeofday() must exist)
-fi
-
-if test "$ac_cv_func_sysconf" = yes; then
- AC_DEFUN([RUBY_CHECK_SYSCONF], [dnl
- AC_CACHE_CHECK([whether _SC_$1 is supported], rb_cv_have_sc_[]m4_tolower($1),
- [AC_TRY_COMPILE([#include <unistd.h>
- ],
- [_SC_$1 >= 0],
- rb_cv_have_sc_[]m4_tolower($1)=yes,
- rb_cv_have_sc_[]m4_tolower($1)=no)
- ])
- if test "$rb_cv_have_sc_[]m4_tolower($1)" = yes; then
- AC_DEFINE(HAVE__SC_$1)
- fi
- ])
- RUBY_CHECK_SYSCONF(CLK_TCK)
-fi
-
-AC_DEFUN([RUBY_STACK_GROW_DIRECTION], [
- AS_VAR_PUSHDEF([stack_grow_dir], [rb_cv_stack_grow_dir_$1])
- AC_CACHE_CHECK(stack growing direction on $1, stack_grow_dir, [
-AS_CASE(["$1"],
-[m68*|x86*|x64|i?86|ia64|ppc*|sparc*|alpha*], [ $2=-1],
-[hppa*], [ $2=+1],
-[
- AC_TRY_RUN([
-/* recurse to get rid of inlining */
-static int
-stack_growup_p(addr, n)
- volatile int *addr, n;
-{
- volatile int end;
- if (n > 0)
- return *addr = stack_growup_p(addr, n - 1);
- else
- return (&end > addr);
-}
-int main()
-{
- int x;
- return stack_growup_p(&x, 10);
-}
-], $2=-1, $2=+1, $2=0)
- ])
-eval stack_grow_dir=\$$2])
-eval $2=\$stack_grow_dir
-AS_VAR_POPDEF([stack_grow_dir])])
-if test "${universal_binary-no}" = yes ; then
- archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
- save_CFLAGS="$CFLAGS" new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'`
- save_LDFLAGS="$LDFLAGS" new_ldflags=`echo "$LDFLAGS" | sed "s|$archflagpat"'||'`
- stack_dir=
- for archs in ${universal_archnames}; do
- archs=`echo $archs | sed 's/=.*//'`
- CFLAGS="$new_cflags -arch $archs"
- LDFLAGS="$new_ldflags -arch $archs"
- RUBY_STACK_GROW_DIRECTION($archs, dir)
- if test x$stack_dir = x; then
- stack_dir=$dir
- elif test x$stack_dir != x$dir; then
- stack_dir=no
- fi
- done
- CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS"
- if test x$stack_dir = xno; then
- for archs in ${universal_archnames}; do
- archs=`echo $archs | sed 's/=.*//'`
- eval dir=\$[rb_cv_stack_grow_dir_]AS_TR_SH([$archs])
- RUBY_DEFINE_IF([defined __${archs}__], STACK_GROW_DIRECTION, $dir)
- done
- else
- AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $stack_dir)
- fi
-else
- RUBY_STACK_GROW_DIRECTION($target_cpu, dir)
- AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $dir)
-fi
-
-if test x"$enable_pthread" = xyes; then
- for pthread_lib in thr pthread pthreads c c_r root; do
- AC_CHECK_LIB($pthread_lib, pthread_kill,
- rb_with_pthread=yes, rb_with_pthread=no)
- if test "$rb_with_pthread" = "yes"; then break; fi
- done
- if test x"$rb_with_pthread" = xyes; then
- AC_DEFINE(_REENTRANT)
- AC_DEFINE(_THREAD_SAFE)
- AC_DEFINE(HAVE_LIBPTHREAD)
- AC_CHECK_HEADERS(pthread_np.h, [], [], [@%:@include <pthread.h>])
- AS_CASE([$pthread_lib],
- [c], [],
- [root], [],
- [c_r], [MAINLIBS="-pthread $MAINLIBS"],
- [AS_CASE(["$target_os"],
- [openbsd*|mirbsd*], [LIBS="-pthread $LIBS"],
- [LIBS="-l$pthread_lib $LIBS"])])
- else
- AC_MSG_WARN("Don't know how to find pthread library on your system -- thread support disabled")
- fi
- AC_CACHE_CHECK([whether pthread_t is scalar type], [rb_cv_scalar_pthread_t], [
- AC_TRY_COMPILE([
- @%:@include <pthread.h>
- ], [
- pthread_t thread_id;
- thread_id = 0;
- if (!thread_id) return 0;
- ], [rb_cv_scalar_pthread_t=yes], [rb_cv_scalar_pthread_t=no])
- ])
- if test x"$rb_cv_scalar_pthread_t" = xyes; then
- : # RUBY_CHECK_SIZEOF(pthread_t, [void* int long], [], [@%:@include <pthread.h>])
- else
- AC_DEFINE(NON_SCALAR_THREAD_ID)
- fi
- AC_CHECK_FUNCS(sched_yield pthread_attr_setinheritsched \
- pthread_attr_get_np pthread_attr_getstack\
- pthread_get_stackaddr_np pthread_get_stacksize_np \
- thr_stksegment pthread_stackseg_np pthread_getthrds_np \
- pthread_cond_init pthread_condattr_setclock pthread_condattr_init \
- pthread_sigmask pthread_setname_np pthread_set_name_np)
- AS_CASE(["$target_os"],[aix*],[ac_cv_func_pthread_getattr_np=no],[AC_CHECK_FUNCS(pthread_getattr_np)])
- if test "${host_os}" = "nacl"; then
- ac_cv_func_pthread_attr_init=no
- else
- AC_CHECK_FUNCS(pthread_attr_init)
- fi
- set_current_thread_name=
- if test "$ac_cv_func_pthread_setname_np" = yes; then
- AC_CACHE_CHECK([arguments of pthread_setname_np], [rb_cv_func_pthread_setname_np_arguments],
- [rb_cv_func_pthread_setname_np_arguments=
- # Linux,AIX, (pthread_self(), name)
- # NetBSD (pthread_self(), name, \"%s\")
- # Darwin (name)
- for mac in \
- "(pthread_self(), name)" \
- "(pthread_self(), name, \"%s\")" \
- "(name)" \
- ; do
- AC_TRY_COMPILE([
- @%:@include <pthread.h>
- @%:@ifdef HAVE_PTHREAD_NP_H
- @%:@include <pthread_np.h>
- @%:@endif
- @%:@define SET_THREAD_NAME(name) pthread_setname_np${mac}
- ],
- [if (SET_THREAD_NAME("conftest")) return 1;],
- [rb_cv_func_pthread_setname_np_arguments="${mac}"
- break])
- done
- ]
- )
- if test -n "${rb_cv_func_pthread_setname_np_arguments}"; then
- set_current_thread_name="pthread_setname_np${rb_cv_func_pthread_setname_np_arguments}"
- fi
- elif test "$ac_cv_func_pthread_set_name_np" = yes; then
- set_current_thread_name="pthread_set_name_np(pthread_self(), name)"
- fi
- AS_IF([test -n "$set_current_thread_name"], [
- AC_DEFINE_UNQUOTED(SET_CURRENT_THREAD_NAME(name), $set_current_thread_name)
- AS_CASE([$set_current_thread_name],
- [*'pthread_self()'*], [
- set_another_thread_name=`echo "$set_current_thread_name" | sed 's/pthread_self()/thid/'`
- AC_DEFINE_UNQUOTED(SET_ANOTHER_THREAD_NAME(thid,name), $set_another_thread_name)
- ])
- ])
-fi
-
-if test x"$ac_cv_header_ucontext_h" = xno; then
- AC_CACHE_CHECK([if signal.h defines ucontext_t], [rb_cv_ucontext_in_signal_h],
- [AC_TRY_COMPILE([@%:@include <signal.h>],
- [size_t size = sizeof(ucontext_t);],
- [rb_cv_ucontext_in_signal_h=yes], [rb_cv_ucontext_in_signal_h=no])])
- if test x"$rb_cv_ucontext_in_signal_h" = xyes; then
- AC_DEFINE_UNQUOTED(UCONTEXT_IN_SIGNAL_H, 1)
- fi
-fi
-if test x"$ac_cv_header_ucontext_h" = xyes -o x"$rb_cv_ucontext_in_signal_h" = xyes; then
- AC_CACHE_CHECK([if mcontext_t is a pointer], [rb_cv_mcontext_t_ptr],
- [AC_TRY_COMPILE([
- @%:@include <signal.h>
- @%:@ifdef HAVE_UCONTEXT_H
- @%:@include <ucontext.h>
- @%:@endif
- mcontext_t test(mcontext_t mc) {return mc+1;}
- ],
- [test(0);],
- [rb_cv_mcontext_t_ptr=yes], [rb_cv_mcontext_t_ptr=no])])
- if test x"$rb_cv_mcontext_t_ptr" = xyes; then
- AC_DEFINE_UNQUOTED(DEFINE_MCONTEXT_PTR(mc, uc), mcontext_t mc = (uc)->uc_mcontext)
- else
- AC_DEFINE_UNQUOTED(DEFINE_MCONTEXT_PTR(mc, uc), mcontext_t *mc = &(uc)->uc_mcontext)
- fi
- if test x"$rb_with_pthread" = xyes; then
- AC_CHECK_FUNCS(getcontext setcontext)
- fi
-fi
-
-if test "$ac_cv_func_fork_works" = "yes" -a "$rb_with_pthread" = "yes"; then
- AC_CACHE_CHECK([if fork works with pthread], rb_cv_fork_with_pthread,
- [AC_TRY_RUN([
-#include <stdlib.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <signal.h>
-#ifndef EXIT_SUCCESS
-#define EXIT_SUCCESS 0
-#endif
-#ifndef EXIT_FAILURE
-#define EXIT_FAILURE 1
-#endif
-
-void *
-thread_func(void *dmy)
-{
- return dmy;
-}
-
-int
-use_threads(void)
-{
- pthread_t tid;
- if (pthread_create(&tid, 0, thread_func, 0) != 0) {
- return -1;
- }
- if (pthread_join(tid, 0) != 0) {
- return -1;
- }
- return 0;
-}
-
-int
-main(int argc, char *argv[])
-{
- pid_t pid;
- if (use_threads()) return EXIT_FAILURE;
- pid = fork();
-
- if (pid) {
- int loc;
- sleep(1);
- if (waitpid(pid, &loc, WNOHANG) == 0) {
- kill(pid, SIGKILL);
- return EXIT_FAILURE;
- }
- if (!WIFEXITED(loc) || WEXITSTATUS(loc) != EXIT_SUCCESS)
- return EXIT_FAILURE;
- }
- else {
- if (use_threads()) return EXIT_FAILURE;
- }
-
- return EXIT_SUCCESS;
-}],
- rb_cv_fork_with_pthread=yes,
- rb_cv_fork_with_pthread=no,
- rb_cv_fork_with_pthread=yes)])
- test x$rb_cv_fork_with_pthread = xyes || AC_DEFINE(CANNOT_FORK_WITH_PTHREAD)
-fi
-
-
-}
-{ # runtime section
-
-dnl wheather use dln_a_out or not
-AC_ARG_WITH(dln-a-out,
- AS_HELP_STRING([--with-dln-a-out], [use dln_a_out if possible]),
- [
- AS_CASE([$withval],
- [yes], [
- if test "$enable_shared" = yes; then
- AC_MSG_ERROR(dln_a_out can not make shared library)
- fi
- with_dln_a_out=yes],
- [
- with_dln_a_out=no])], [with_dln_a_out=no])
-
-AC_CACHE_CHECK(whether ELF binaries are produced, rb_cv_binary_elf,
-[AC_TRY_LINK([],[], [
-AS_CASE(["`head -1 conftest$EXEEXT | tr -dc '\177ELF' | tr '\177' .`"],
-[.ELF*], [rb_cv_binary_elf=yes], [rb_cv_binary_elf=no])],
-rb_cv_binary_elf=no)])
-
-if test "$rb_cv_binary_elf" = yes; then
- AC_DEFINE(USE_ELF)
- if test "$with_dln_a_out" = yes; then
- AC_MSG_ERROR(dln_a_out does not work with ELF)
- fi
- AC_CHECK_HEADERS([elf.h elf_abi.h])
- if test $ac_cv_header_elf_h = yes -o $ac_cv_header_elf_abi_h = yes; then
- AC_LIBOBJ([addr2line])
- fi
-fi
-
-AS_CASE(["$target_os"],
-[linux* | gnu* | k*bsd*-gnu | bsdi* | kopensolaris*-gnu | nacl], [
- if test "$rb_cv_binary_elf" = no; then
- with_dln_a_out=yes
- else
- LDFLAGS="$LDFLAGS -rdynamic"
- fi])
-LIBEXT=a
-
-AC_SUBST(DLDFLAGS)dnl
-AC_SUBST(ARCH_FLAG)dnl
-
-AC_SUBST(STATIC)dnl
-AC_SUBST(CCDLFLAGS)dnl
-AC_SUBST(LDSHARED)dnl
-AC_SUBST(LDSHAREDXX)dnl
-AC_SUBST(DLEXT)dnl
-AC_SUBST(DLEXT2)dnl
-AC_SUBST(LIBEXT)dnl
-AC_SUBST(ASMEXT, S)dnl
-
-STATIC=
-: ${PATHFLAG=''}
-
-if test "$with_dln_a_out" != yes; then
- rb_cv_dlopen=unknown
- AC_MSG_CHECKING(whether OS depend dynamic link works)
- if test "$GCC" = yes; then
- AS_CASE(["$target_os"],
- [darwin*], [
- # The -fno-common is needed if we wish to embed the Ruby interpreter
- # into a plugin module of some project (as opposed to embedding it
- # within the project's application). The -I/usr/local/include is
- # needed because CPP as discovered by configure (cc -E -traditional)
- # fails to consult /usr/local/include by default. This causes
- # mkmf.rb's have_header() to fail if the desired resource happens to be
- # installed in the /usr/local tree.
- RUBY_APPEND_OPTION(CCDLFLAGS, -fno-common)],
- [bsdi*|cygwin*|mingw*|aix*|interix*], [ ],
- [
- RUBY_APPEND_OPTION(CCDLFLAGS, -fPIC)])
- else
- AS_CASE(["$target_os"],
- [hpux*], [CCDLFLAGS="$CCDLFLAGS +Z"],
- [solaris*|irix*], [CCDLFLAGS="$CCDLFLAGS -KPIC"],
- [sunos*], [CCDLFLAGS="$CCDLFLAGS -PIC"],
- [esix*|uxpds*], [CCDLFLAGS="$CCDLFLAGS -KPIC"],
- [: ${CCDLFLAGS=""}])
- fi
-
-
- AC_ARG_ENABLE(rpath,
- AS_HELP_STRING([--enable-rpath], [embed run path into extension libraries.
- enabled by default on ELF platforms]),
- [enable_rpath=$enableval], [enable_rpath="$rb_cv_binary_elf"])
-
- AS_CASE(["$target_os"],
- [hpux*], [ DLDFLAGS="$DLDFLAGS -E"
- : ${LDSHARED='$(LD) -b'}
- XLDFLAGS="$XLDFLAGS -Wl,-E"
- : ${LIBPATHENV=SHLIB_PATH}
- if test "$rb_cv_prog_gnu_ld" = no; then
- RPATHFLAG=' +b %1$-s'
- fi
- rb_cv_dlopen=yes],
- [solaris*], [ if test "$GCC" = yes; then
- : ${LDSHARED='$(CC) -shared'}
- if test "$rb_cv_prog_gnu_ld" = yes; then
- LDFLAGS="$LDFLAGS -Wl,-E"
- fi
- else
- : ${LDSHARED='$(CC) -G'}
- fi
- if test "$ac_cv_sizeof_voidp" = 8; then
- : ${LIBPATHENV=LD_LIBRARY_PATH_64}
- : ${PRELOADENV=LD_PRELOAD_64}
- else
- : ${LIBPATHENV=LD_LIBRARY_PATH_32}
- : ${PRELOADENV=LD_PRELOAD_32}
- fi
- rb_cv_dlopen=yes],
- [sunos*], [ : ${LDSHARED='$(LD) -assert nodefinitions'}
- rb_cv_dlopen=yes],
- [irix*], [ : ${LDSHARED='$(LD) -shared'}
- rb_cv_dlopen=yes],
- [sysv4*], [ : ${LDSHARED='$(LD) -G'}
- rb_cv_dlopen=yes],
- [nto-qnx*], [ : ${LDSHARED='$(CC) -shared'}
- rb_cv_dlopen=yes],
- [esix*|uxpds*], [ : ${LDSHARED='$(LD) -G'}
- rb_cv_dlopen=yes],
- [osf*], [ : ${LDSHARED='$(LD) -shared -expect_unresolved "*"'}
- rb_cv_dlopen=yes],
- [bsdi3*], [ AS_CASE(["$CC"],
- [*shlicc*], [ : ${LDSHARED='$(CC) -r'}
- rb_cv_dlopen=yes])],
- [linux* | gnu* | k*bsd*-gnu | netbsd* | bsdi* | kopensolaris*-gnu | haiku*], [
- : ${LDSHARED='$(CC) -shared'}
- if test "$rb_cv_binary_elf" = yes; then
- LDFLAGS="$LDFLAGS -Wl,-export-dynamic"
- fi
- rb_cv_dlopen=yes],
- [interix*], [ : ${LDSHARED='$(CC) -shared'}
- XLDFLAGS="$XLDFLAGS -Wl,-E"
- LIBPATHFLAG=" -L%1\$-s"
- rb_cv_dlopen=yes],
- [freebsd*|dragonfly*], [
- : ${LDSHARED='$(CC) -shared'}
- if test "$rb_cv_binary_elf" = yes; then
- LDFLAGS="$LDFLAGS -rdynamic"
- DLDFLAGS="$DLDFLAGS "'-Wl,-soname,$@'
- else
- test "$GCC" = yes && test "$rb_cv_prog_gnu_ld" = yes || LDSHARED='$(LD) -Bshareable'
- fi
- rb_cv_dlopen=yes],
- [openbsd*|mirbsd*], [ : ${LDSHARED='$(CC) -shared ${CCDLFLAGS}'}
- if test "$rb_cv_binary_elf" = yes; then
- LDFLAGS="$LDFLAGS -Wl,-E"
- fi
- rb_cv_dlopen=yes],
- [darwin*], [ : ${LDSHARED='$(CC) -dynamic -bundle'}
- : ${LDFLAGS=""}
- : ${LIBPATHENV=DYLD_LIBRARY_PATH}
- : ${PRELOADENV=DYLD_INSERT_LIBRARIES}
- rb_cv_dlopen=yes],
- [aix*], [ : ${LDSHARED='$(CC)'}
- LDSHARED="$LDSHARED ${linker_flag}-G"
- EXTDLDFLAGS='-e$(TARGET_ENTRY)'
- XLDFLAGS="${linker_flag}"'-bE:$(ARCHFILE)'" ${linker_flag}-brtl"
- XLDFLAGS="$XLDFLAGS ${linker_flag}-blibpath:${prefix}/lib:${LIBPATH:-/usr/lib:/lib}"
- : ${ARCHFILE="ruby.imp"}
- TRY_LINK='$(CC) $(LDFLAGS) -oconftest $(INCFLAGS) -I$(hdrdir) $(CPPFLAGS)'
- TRY_LINK="$TRY_LINK"' $(CFLAGS) $(src) $(LIBPATH) $(LOCAL_LIBS) $(LIBS)'
- : ${LIBPATHENV=LIBPATH}
- RPATHFLAG=" ${linker_flag}-blibpath:%1\$-s:${prefix}/lib:${LIBPATH:-/usr/lib:/lib}"
- rb_cv_dlopen=yes],
- [nto-qnx*], [ DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
- : ${LDSHARED='$(LD) -Bshareable -x'}
- LDFLAGS="$LDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
- rb_cv_dlopen=yes],
- [cygwin*|mingw*], [
- : ${LDSHARED='$(CC) -shared $(if $(filter-out -g -g0,$(debugflags)),,-s)'}
- XLDFLAGS="$XLDFLAGS -Wl,--stack,0x00200000,--enable-auto-import"
- DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import"
- : ${LIBPATHENV=""}
- : ${PRELOADENV=""}
- rb_cv_dlopen=yes],
- [hiuxmpp], [ : ${LDSHARED='$(LD) -r'}],
- [atheos*], [ : ${LDSHARED='$(CC) -shared'}
- rb_cv_dlopen=yes],
- [nacl], [ LDSHARED='$(CC) -shared' ],
- [ : ${LDSHARED='$(LD)'}])
- AC_MSG_RESULT($rb_cv_dlopen)
-
- if test "$rb_cv_dlopen" = yes; then
- AS_CASE(["$target_os"],
- [darwin*], [
- for flag in \
- "-undefined dynamic_lookup" \
- "-multiply_defined suppress" \
- ; do
- test "x${linker_flag}" = x || flag="${linker_flag}`echo ${flag} | tr ' ' ,`"
- RUBY_TRY_LDFLAGS([$flag], [], [flag=])
- if test "x$flag" != x; then
- RUBY_APPEND_OPTIONS(DLDFLAGS, [$flag])
- fi
- done
- ])
- fi
-
- if test "$enable_rpath" = yes; then
- if test x"${RPATHFLAG}" = x; then
- for rpathflag in -R "-rpath "; do
- AS_CASE("$rpathflag",
- [*" "], [AS_CASE(["${linker_flag}"],
- [*,], [rpathflag=`echo "$rpathflag" | tr ' ' ,`])])
- rpathflag="${linker_flag}${rpathflag}"
- RUBY_TRY_LDFLAGS([${rpathflag}.], [], [rpathflag=])
- if test "x${rpathflag}" != x; then
- RPATHFLAG=" ${rpathflag}%1\$-s"
- break
- fi
- done
- fi
- fi
-fi
-if test "${LDSHAREDXX}" = ""; then
- AS_CASE(["${LDSHARED}"],
- [*'$(CC)'*], [
- LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\$(CC)/$(CXX)/'`
- ],
- [*'${CC}'*], [
- LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\${CC}/${CXX}/'`
- ],
- [*$CC*], [
- LDSHAREDXX=`echo "${LDSHARED}" | sed "s|$CC|$CXX|"`
- ],
- [ld" "*], [
- ])
-fi
-AS_CASE([${RPATHFLAG}],[*'%1$'*],[: ${LIBPATHFLAG=' -L%1$-s'}],[: ${LIBPATHFLAG=' -L%s'}])
-
-AC_SUBST(LINK_SO)
-AC_SUBST(LIBPATHFLAG)
-AC_SUBST(RPATHFLAG)
-AC_SUBST(LIBPATHENV, "${LIBPATHENV-LD_LIBRARY_PATH}")
-AC_SUBST(PRELOADENV, "${PRELOADENV-LD_PRELOAD}")
-AC_SUBST(TRY_LINK)
-
-if test "x$OPT_DIR" != x; then
- pat=`echo "${LDFLAGS_OPTDIR}" | sed ['s/[][\\.*|]/\\\\&/']`
- LDFLAGS=`echo "${LDFLAGS}" | sed "s| ${pat}||"`
- val=`IFS="$PATH_SEPARATOR"
- for dir in $OPT_DIR; do
- echo x ${LIBPATHFLAG} ${RPATHFLAG} |
- sed "s/^x *//;s${IFS}"'%1\\$-s'"${IFS}${dir}/lib${IFS}g;s${IFS}%s${IFS}${dir}/lib${IFS}g"
- done | tr '\012' ' ' | sed 's/ *$//'`
- if test x"$val" != x; then
- test x"${LDFLAGS}" = x || LDFLAGS="$LDFLAGS "
- LDFLAGS="$LDFLAGS$val"
- test x"${DLDFLAGS}" = x || DLDFLAGS="$DLDFLAGS "
- DLDFLAGS="$DLDFLAGS$val"
- fi
- LDFLAGS_OPTDIR="$val"
-fi
-
-AS_CASE(["$target_os"],
-[freebsd*], [
- AC_CHECK_LIB([procstat], [procstat_open_sysctl])
- if test "x$ac_cv_lib_procstat_procstat_open_sysctl" = xyes; then
- AC_CHECK_FUNCS(procstat_getvmmap)
- fi
- ])
-AS_CASE(["$target_cpu-$target_os"],
-[*-darwin*], [
- AC_CHECK_HEADERS([execinfo.h])
- if test "x$ac_cv_header_execinfo_h" = xyes; then
- AC_CHECK_LIB([execinfo], [backtrace])
- AC_CHECK_HEADERS([libunwind.h])
- fi],
-[*-freebsd*|x86_64-netbsd*], [
- AC_CHECK_HEADERS([execinfo.h])
- if test "x$ac_cv_header_execinfo_h" = xyes; then
- AC_CHECK_LIB([execinfo], [backtrace])
- AC_CHECK_LIB([unwind], [unw_backtrace])
- fi])
-AC_CHECK_FUNCS(backtrace)
-
-if test "x$ac_cv_func_backtrace" = xyes; then
- AC_CACHE_CHECK(for broken backtrace, rb_cv_broken_backtrace,
- [AC_TRY_RUN([
-#include <unistd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include <signal.h>
-#include <execinfo.h>
-
-#define TRACE_SIZE 256
-
-void sigsegv(int signum, siginfo_t *info, void *ctx){
- void *trace[TRACE_SIZE];
- int n = backtrace(trace, TRACE_SIZE);
- if (n > 0) {
- /*fprintf(stdout, "backtrace:%d\n",n);*/
- } else {
- _exit(EXIT_FAILURE);
- }
- _exit(EXIT_SUCCESS);
-}
-int
-main(void)
-{
- volatile int *a = NULL;
- stack_t ss;
- ss.ss_sp = malloc(SIGSTKSZ);
- if (ss.ss_sp == NULL) {
- fprintf(stderr, "cannot allocate memory for sigaltstack\n");
- return EXIT_FAILURE;
- }
- ss.ss_size = SIGSTKSZ;
- ss.ss_flags = 0;
- if (sigaltstack(&ss, NULL) == -1) {
- fprintf(stderr, "sigaltstack failed\n");
- return EXIT_FAILURE;
- }
- struct sigaction sa;
- memset(&sa, 0, sizeof(struct sigaction));
- sigemptyset(&sa.sa_mask);
- sa.sa_sigaction = sigsegv;
- sa.sa_flags |= SA_SIGINFO;
- sa.sa_flags |= SA_ONSTACK;
- sigaction(SIGSEGV, &sa, NULL);
- a[0] = 1;
- return EXIT_SUCCESS;
-}
-],
- rb_cv_broken_backtrace=no,
- rb_cv_broken_backtrace=yes,
- rb_cv_broken_backtrace=no)])
- if test "$rb_cv_broken_backtrace" = yes; then
- AC_DEFINE(BROKEN_BACKTRACE, 1)
- fi
-fi
-
-AC_ARG_WITH(valgrind,
- AS_HELP_STRING([--without-valgrind],[disable valgrind memcheck support]),
- [], with_valgrind=yes)
-AS_IF([test x$with_valgrind != xno],
- [AC_CHECK_HEADERS(valgrind/memcheck.h)])
-
-dln_a_out_works=no
-if test "$ac_cv_header_a_out_h" = yes; then
- if test "$with_dln_a_out" = yes || test "$rb_cv_dlopen" = unknown; then
- cat confdefs.h > config.h
- AC_CACHE_CHECK(whether matz's dln works, rb_cv_dln_a_out,
- [AC_TRY_COMPILE([
-#define USE_DLN_A_OUT
-#include "dln.c"
-],
- [],
- rb_cv_dln_a_out=yes,
- rb_cv_dln_a_out=no)])
- if test "$rb_cv_dln_a_out" = yes; then
- dln_a_out_works=yes
- AC_DEFINE(USE_DLN_A_OUT)
- fi
- fi
-fi
-
-if test "$dln_a_out_works" = yes; then
- if test "$GCC" = yes; then
- STATIC=-static
- else
- STATIC=-Bstatic
- fi
- DLEXT=so
- CCDLFLAGS=
-else
- AS_CASE(["$target_os"],
- [hpux*], [
- DLEXT=sl],
- [darwin*], [
- RUBY_APPEND_OPTION(XLDFLAGS, [-Wl,-u,_objc_msgSend])
- DLEXT=bundle],
- [cygwin*|mingw*|*djgpp*], [
- LOAD_RELATIVE=1
- DLEXT=so],
- [
- DLEXT=so])
-fi
-if test "$rb_cv_dlopen:$load_relative" = yes:yes; then
- if test "$ac_cv_func_dladdr" = yes; then
- LOAD_RELATIVE=1
- fi
-fi
-if test x"$LOAD_RELATIVE" = x1; then
- load_relative=yes
-else
- unset load_relative
-fi
-
-len=2 # .rb
-n=`expr "$DLEXT" : '.*'`; test "$n" -gt "$len" && len=$n
-n=`expr "$DLEXT2" : '.*'`; test "$n" -gt "$len" && len=$n
-AC_DEFINE_UNQUOTED(DLEXT_MAXLEN, `expr $len + 1`)
-test ".$DLEXT" = "." || AC_DEFINE_UNQUOTED(DLEXT, ".$DLEXT")
-test ".$DLEXT2" = "." || AC_DEFINE_UNQUOTED(DLEXT2, ".$DLEXT2")
-AC_SUBST(DLEXT)
-
-if test "$with_dln_a_out" = yes; then
- STRIP=true
-else
- AC_CHECK_TOOL(STRIP, strip, :)dnl
-fi
-
-AS_CASE(["$target_os"],
- [linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu], [
- STRIP="$STRIP -S -x"],
- [darwin*], [
- STRIP="$STRIP -A -n"])
-
-AC_ARG_WITH(ext,
- AC_HELP_STRING([--with-ext=EXTS],
- [pass to --with-ext option of extmk.rb]))
-AC_ARG_WITH(out-ext,
- AC_HELP_STRING([--with-out-ext=EXTS],
- [pass to --without-ext option of extmk.rb]))
-EXTSTATIC=
-AC_SUBST(EXTSTATIC)dnl
-AC_ARG_WITH(static-linked-ext,
- AS_HELP_STRING([--with-static-linked-ext], [link external modules statically]),
- [AS_CASE([$withval],[yes],[STATIC=;EXTSTATIC=static],[no],[],[EXTSTATIC="$withval"])])
-AS_CASE([",$EXTSTATIC,"], [,static,|*,enc,*], [
- ENCOBJS='enc/encinit.$(OBJEXT) enc/libenc.$(LIBEXT) enc/libtrans.$(LIBEXT)'
- EXTOBJS='ext/extinit.$(OBJEXT)'
- AC_DEFINE_UNQUOTED(EXTSTATIC, 1)
- AC_SUBST(ENCSTATIC, static)
-], [
- ENCOBJS='dmyenc.$(OBJEXT)'
- EXTOBJS='dmyext.$(OBJEXT)'
-])
-AC_SUBST(ENCOBJS)
-AC_SUBST(EXTOBJS)
-
-AC_ARG_WITH(setup,
- AS_HELP_STRING([--with-setup=SETUP], [use extension libraries setup]),
- [setup=$withval])
-if test -n "$setup"; then
- if ! test -f "ext/$setup" -o -f "$srcdir/ext/$setup"; then
- AC_MSG_ERROR(Setup file $setup not found under ext or $srcdir/ext)
- fi
-elif test -f "$srcdir/ext/Setup.$target_os"; then
- setup="Setup.$target_os"
-else
- setup=
- for file in "$srcdir"/ext/Setup.*; do
- AS_CASE(["$file"], [*~|*.bak|*.orig|*.rej|*.tmp], [continue])
- setup=`basename "$file"`
- AS_CASE(["$target_os"], [`expr "$setup" : 'Setup.\(.*\)'`*], [break])
- platform=`sed '/^option *platform */!d;s///;s/|/*|/g;q' "$file"`
- if test "x$platform" != x; then
- eval "AS_CASE([\"\$target_os\"], [$platform*], [break])"
- fi
- setup=
- done
- : ${setup:=Setup}
-fi
-AC_SUBST(setup)
-
-rubylibprefix='${libdir}/${RUBY_BASE_NAME}'
-AC_ARG_WITH(rubylibprefix,
- AS_HELP_STRING([--with-rubylibprefix=DIR], [prefix for ruby libraries [[LIBDIR/RUBY_BASE_NAME]]]),
- [if test "x$withval" = xno; then
- AC_MSG_ERROR([No ruby, No libprefix])
- fi
- rubylibprefix="$withval"])
-AC_SUBST(rubylibprefix)
-
-if test x"${exec_prefix}" != xNONE; then
- RUBY_EXEC_PREFIX="$exec_prefix"
-elif test x"$prefix" != xNONE; then
- RUBY_EXEC_PREFIX="$prefix"
-else
- RUBY_EXEC_PREFIX=$ac_default_prefix
-fi
-pat=`echo "${RUBY_EXEC_PREFIX}" | tr -c '\012' .`'\(.*\)'
-for var in bindir libdir rubylibprefix; do
- eval val='"$'$var'"'
- AS_CASE(["$val"], ["${RUBY_EXEC_PREFIX}"*], [val='${exec_prefix}'"`expr \"$val\" : \"$pat\"`"])
- eval $var='"$val"'
-done
-
-BTESTRUBY='$(MINIRUBY)'
-if test x"$cross_compiling" = xyes; then
- test x"$MINIRUBY" = x && MINIRUBY="${RUBY-$BASERUBY} -I`$CHDIR .; pwd` "-r'$(arch)-fake'
- XRUBY_LIBDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["libdir"]']`
- XRUBY_RUBYLIBDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["rubylibdir"]']`
- XRUBY_RUBYHDRDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["rubyhdrdir"]']`
- AC_SUBST(XRUBY_LIBDIR)
- AC_SUBST(XRUBY_RUBYLIBDIR)
- AC_SUBST(XRUBY_RUBYHDRDIR)
- PREP='$(arch)-fake.rb'
- RUNRUBY_COMMAND='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`'
- RUNRUBY='$(RUNRUBY_COMMAND)'
- XRUBY='$(MINIRUBY)'
- BOOTSTRAPRUBY='$(BASERUBY)'
- TEST_RUNNABLE=no
- CROSS_COMPILING=yes
-
- if test "$host_os" = "nacl"; then
- if test "$build_cpu" = "$host_cpu" || test "${nacl_cv_cpu_nick}" = "x86" -a "$host_cpu" = "i686"; then
- nacl_cv_sel_ldr='`$(MINIRUBY) $(srcdir)/nacl/nacl-config.rb sel_ldr`'
- nacl_cv_irt_core='`$(MINIRUBY) $(srcdir)/nacl/nacl-config.rb irt_core`'
- nacl_cv_runnable_ld='`$(MINIRUBY) $(srcdir)/nacl/nacl-config.rb runnable_ld`'
- nacl_cv_host_lib='`$(MINIRUBY) $(srcdir)/nacl/nacl-config.rb host_lib`'
- TEST_RUNNABLE=yes
- BTESTRUBY="${nacl_cv_sel_ldr} -a -B ${nacl_cv_irt_core} -w 1:3 -w 2:4"
- BTESTRUBY="$BTESTRUBY -- ${nacl_cv_runnable_ld} --library-path ${nacl_cv_host_lib}"
- BTESTRUBY="$BTESTRUBY `pwd`/"'miniruby$(EXEEXT) -I`cd $(srcdir)/lib; pwd` -I.'
- BTESTRUBY="$BTESTRUBY"' -I$(EXTOUT)/common 3>&1 4>&2 1>/dev/null 2>/dev/null '
- fi
- fi
-else
- MINIRUBY='./miniruby$(EXEEXT) -I$(srcdir)/lib -I.'
- MINIRUBY="$MINIRUBY"' -I$(EXTOUT)/common'
- PREP='miniruby$(EXEEXT)'
- RUNRUBY_COMMAND='$(MINIRUBY) $(srcdir)/tool/runruby.rb --extout=$(EXTOUT) $(RUNRUBYOPT)'
- RUNRUBY='$(RUNRUBY_COMMAND) --'
- XRUBY='$(RUNRUBY)'
- BOOTSTRAPRUBY='$(MINIRUBY)'
- TEST_RUNNABLE=yes
- CROSS_COMPILING=no
-fi
-AC_SUBST(TEST_RUNNABLE)
-AC_SUBST(CROSS_COMPILING)
-AC_SUBST(MINIRUBY)
-AC_SUBST(BTESTRUBY)
-AC_SUBST(PREP)
-AC_SUBST(RUNRUBY_COMMAND)
-AC_SUBST(RUNRUBY)
-AC_SUBST(XRUBY)
-AC_SUBST(BOOTSTRAPRUBY)
-AC_SUBST(EXTOUT, [${EXTOUT=.ext}])
-
-FIRSTMAKEFILE=""
-LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a'
-LIBRUBY='$(LIBRUBY_A)'
-LIBRUBYARG_STATIC='-l$(RUBY_SO_NAME)-static'
-LIBRUBYARG='$(LIBRUBYARG_STATIC)'
-SOLIBS=
-
-AS_CASE(["$target_os"],
- [cygwin*|mingw*|haiku*|darwin*], [
- : ${DLDLIBS=""}
- ],
- [
- DLDLIBS="$DLDLIBS -lc"
- ])
-
-AC_ARG_ENABLE(multiarch,
- AS_HELP_STRING([--enable-multiarch], [enable multiarch compatible directories]),
- [multiarch=], [unset multiarch])
-if test ${multiarch+set}; then
- AC_DEFINE(ENABLE_MULTIARCH)
-fi
-
-archlibdir='${libdir}/${arch}'
-sitearchlibdir='${libdir}/${sitearch}'
-archincludedir='${includedir}/${arch}'
-sitearchincludedir='${includedir}/${sitearch}'
-
-AC_ARG_WITH(soname,
- AS_HELP_STRING([--with-soname=SONAME], [base name of shared library]),
- [RUBY_SO_NAME=$withval], [RUBY_SO_NAME='$(RUBY_BASE_NAME)'])
-
-LIBRUBY_LDSHARED=$LDSHARED
-LIBRUBY_DLDFLAGS=$DLDFLAGS
-LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(RUBY_PROGRAM_VERSION)'
-LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so'
-ENABLE_SHARED=no
-
-AC_ARG_ENABLE(shared,
- AS_HELP_STRING([--enable-shared], [build a shared library for Ruby]),
- [enable_shared=$enableval])
-libprefix=${multiarch+'$(archlibdir)'}${multiarch-'$(libdir)'}
-LIBRUBY_RELATIVE=${load_relative-no}
-AS_CASE("$enable_shared", [yes], [
- LIBRUBY='$(LIBRUBY_SO)'
- LIBRUBYARG_SHARED='-l$(RUBY_SO_NAME)'
- LIBRUBYARG='$(LIBRUBYARG_SHARED)'
- LIBRUBY_RELATIVE=no
- test -z "$CCDLFLAGS" || CFLAGS="$CFLAGS $CCDLFLAGS"
- ENABLE_SHARED=yes
- if test "$rb_cv_binary_elf" = yes; then
- SOLIBS='$(LIBS)'
- fi
-
- # libdir can be overridden in config.site file (on OpenSUSE at least).
- libdir_basename=lib
- if test "$bindir" = '${exec_prefix}/bin'; then
- AS_CASE(["$libdir"], ['${exec_prefix}/'*], [libdir_basename=`basename "$libdir"`])
- fi
- AC_DEFINE_UNQUOTED(LIBDIR_BASENAME, ["${libdir_basename}"])
- libdir_basename="${libdir_basename}"${multiarch+'/${arch}'}
-
- AS_CASE(["$target_os"],
- [freebsd*|dragonfly*], [],
- [
- if test "$GCC" = yes; then
- RUBY_TRY_LDFLAGS([${linker_flag}--no-undefined], [no_undefined=yes], [no_undefined=no])
- if test "no_undefined" = yes; then
- RUBY_APPEND_OPTION(EXTLDFLAGS, [${linker_flag}--no-undefined])
- fi
- fi
- ])
-
- AS_CASE(["$target_os"],
- [sunos4*], [
- LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'
- ],
- [linux* | gnu* | k*bsd*-gnu | atheos* | kopensolaris*-gnu | haiku*], [
- LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'" $LDFLAGS_OPTDIR"
- LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'
- if test "$load_relative" = yes; then
- libprefix="'\$\${ORIGIN}/../${libdir_basename}'"
- LIBRUBY_RPATHFLAGS="-Wl,-rpath,${libprefix}"
- LIBRUBY_RELATIVE=yes
- fi
- ],
- [freebsd*|dragonfly*], [
- SOLIBS='$(LIBS)'
- LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'
- if test "$rb_cv_binary_elf" != "yes" ; then
- LIBRUBY_SO="$LIBRUBY_SO.\$(TEENY)"
- LIBRUBY_ALIASES=''
- fi
- ],
- [netbsd*], [
- SOLIBS='$(LIBS)'
- LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR).$(TEENY)'
- LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'" $LDFLAGS_OPTDIR"
- if test "$rb_cv_binary_elf" = yes; then # ELF platforms
- LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR) lib$(RUBY_SO_NAME).so'
- else # a.out platforms
- LIBRUBY_ALIASES=""
- fi
- ],
- [openbsd*|mirbsd*], [
- SOLIBS='$(LIBS)'
- LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR).'`expr ${MINOR} \* 10 + ${TEENY}`
- ],
- [solaris*], [
- SOLIBS='$(LIBS)'
- LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)'
- LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(RUBY_PROGRAM_VERSION) lib$(RUBY_SO_NAME).so'
- if test "$GCC" = yes; then
- LIBRUBY_DLDFLAGS="$DLDFLAGS "'-Wl,-h,$(@F)'
- else
- LIBRUBY_DLDFLAGS="$DLDFLAGS "'-h $(@F)'
- fi
- XLDFLAGS="$XLDFLAGS "'-R${libdir}'
- ],
- [hpux*], [
- XLDFLAGS="$XLDFLAGS "'-Wl,+s,+b,$(libdir)'
- LIBRUBY_SO='lib$(RUBY_SO_NAME).sl.$(RUBY_PROGRAM_VERSION)'
- LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).sl'
- ],
- [aix*], [
- LIBRUBY_DLDFLAGS="${linker_flag}-bnoentry $XLDFLAGS $LDFLAGS_OPTDIR"
- LIBRUBYARG_SHARED='-L${libdir} -l${RUBY_SO_NAME}'
- SOLIBS='-lm -lc'
- ],
- [darwin*], [
- RUBY_SO_NAME="$RUBY_SO_NAME"'.$(RUBY_PROGRAM_VERSION)'
- LIBRUBY_LDSHARED='$(CC) -dynamiclib'
- if test "$load_relative" = yes; then
- libprefix="@executable_path/../${libdir_basename}"
- LIBRUBY_RELATIVE=yes
- fi
- LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-install_name '${libprefix}'/$(LIBRUBY_SO)'
- LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-current_version $(MAJOR).$(MINOR)'
- LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-compatibility_version $(RUBY_PROGRAM_VERSION)'
- if test "$visibility_option" = ld; then
- LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_Init_*'
- LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_ruby_static_id_*'
- LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,*_threadptr_*'
- fi
- LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "' $(XLDFLAGS)'
- LIBRUBY_SO='lib$(RUBY_SO_NAME).dylib'
- LIBRUBY_ALIASES='lib$(RUBY_BASE_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_INSTALL_NAME).dylib'
- SOLIBS='$(LIBS)'
- ],
- [interix*], [
- LIBRUBYARG_SHARED='-L. -L${libdir} -l$(RUBY_SO_NAME)'
- ],
- [mingw*|cygwin*|mswin*], [
- LIBRUBY_RELATIVE=yes
- ])
-], [
- LIBRUBYARG_SHARED=
-
- # enable PIE if possible
- AC_ARG_ENABLE(pie,
- AS_HELP_STRING([--disable-pie], [disable PIE feature]),
- [pie=$enableval], [pie=])
- AS_CASE(["$target_os"],
- [nacl], [
- # -pie implies -shared for NaCl.
- pie=no
- ])
- if test "$GCC" = yes -a -z "$EXTSTATIC" -a "x$pie" != xno; then
- RUBY_TRY_CFLAGS(-fPIE, [pie=yes], [pie=no])
- if test "$pie" = yes; then
- # Use -fPIE when testing -pie. RUBY_TRY_LDFLAGS sets
- # $save_CFLAGS internally, so set other name here.
- save_CFLAGS_before_pie="$CFLAGS"
- CFLAGS="$CFLAGS -fPIE"
-
- # gcc need -pie but clang need -Wl,-pie.
- for pie in -pie -Wl,-pie; do
- RUBY_TRY_LDFLAGS([$pie], [], [pie=])
- if test "x$pie" != x; then
- RUBY_APPEND_OPTION(XCFLAGS, -fPIE)
- RUBY_APPEND_OPTION(XLDFLAGS, $pie)
- break
- fi
- done
- CFLAGS="$save_CFLAGS_before_pie"
- fi
- fi
-])
-if test "$enable_rpath" = yes; then
- test -z "$LIBRUBY_RPATHFLAGS" || LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS "
- rpathflag="${RPATHFLAG}"
- AS_CASE(["${cross_compiling}${load_relative}"], [*yes*], [], [rpathflag="$RPATHFLAG$LIBPATHFLAG"])
- rpathflag=`IFS="$PATH_SEPARATOR"
- echo x "$rpathflag" |
- sed "s/^x *//;s${IFS}"'%1\\$-s'"${IFS}${libprefix}${IFS}g;s${IFS}%s${IFS}${libprefix}${IFS}g"
- `
- LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS${rpathflag}"
- LIBRUBYARG_SHARED="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_SHARED"
- LIBRUBYARG_STATIC="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_STATIC"
-fi
-AC_SUBST(LIBRUBY_RELATIVE)
-
-LDFLAGS="-L. $LDFLAGS"
-AC_SUBST(ARCHFILE)
-
-if test "$EXEEXT" = .exe; then
- EXECUTABLE_EXTS='".exe",".com",".cmd",".bat"'
- AC_DEFINE_UNQUOTED(EXECUTABLE_EXTS, $EXECUTABLE_EXTS)
- EXECUTABLE_EXTS=`echo $EXECUTABLE_EXTS | tr -d '"' | tr , ' '`
- AC_SUBST(EXECUTABLE_EXTS)
-fi
-
-AS_CASE("$cross_compiling:${LIBPATHENV}", [yes:* | no:], [], [
- AC_MSG_CHECKING(whether wrapper for $LIBPATHENV is needed)
- AS_IF([env ${LIBPATHENV}=/lib /bin/sh -c ': ${'${LIBPATHENV}'?}' 2>/dev/null],
- [AC_MSG_RESULT(no)],
- [PREP="$PREP"' ruby-runner$(EXEEXT)'
- AC_MSG_RESULT(yes)]
- )
-])
-
-AC_ARG_ENABLE(dtrace,
- AS_HELP_STRING([--enable-dtrace],
- [enable DTrace for tracing inside ruby. enabled by default on systems having dtrace]),
- [enable_dtrace=$enableval], [enable_dtrace=auto])
-
-if test "${enable_dtrace}" = "auto"; then
- if test x"$DTRACE" != x -a x"$cross_compiling" != xyes; then
- RUBY_DTRACE_AVAILABLE()
- enable_dtrace=$rb_cv_dtrace_available
- else
- enable_dtrace=no
- fi
-fi
-
-LIBRUBY_A_OBJS='$(OBJS)'
-DTRACE_REBUILD=
-if test "${enable_dtrace}" = "yes"; then
- if test -z "$DTRACE"; then
- AC_MSG_ERROR([dtrace(1) is missing])
- elif test "$cross_compiling" = yes; then
- AC_MSG_ERROR([--enable-dtrace, however, cross compiling])
- else
- RUBY_DTRACE_AVAILABLE()
- enable_dtrace=$rb_cv_dtrace_available
- if test "${enable_dtrace}" = "no"; then
- AC_MSG_ERROR([--enable-dtrace, however, USDT is not available])
- fi
- RUBY_DTRACE_POSTPROCESS()
- if test "$rb_cv_prog_dtrace_g" != 'no'; then
- DTRACE_OBJ='probes.$(OBJEXT)'
- fi
- if test "$rb_cv_prog_dtrace_g" = 'rebuild'; then
- DTRACE_REBUILD=yes
- LIBRUBY_A_OBJS='$(DTRACE_GLOMMED_OBJ)'
- fi
- AS_CASE("${target_os}", [freebsd*], [
- # FreeBSD's dtrace requires libelf
- LIBS="-lelf $LIBS"
- ])
- fi
- DTRACE_EXT=d
-else
- DTRACE_EXT=dmyh
-fi
-AC_SUBST(DTRACE_EXT)
-AC_SUBST(DTRACE_OBJ)
-AC_SUBST(DTRACE_REBUILD)
-AC_SUBST(LIBRUBY_A_OBJS)
-
-RUBY_SETJMP_TYPE
-}
-{ # build section
-
-dnl build rdoc index if requested
-RDOCTARGET=""
-CAPITARGET=""
-AC_ARG_ENABLE(install-doc,
- AS_HELP_STRING([--disable-install-doc], [do not install either rdoc indexes or C API documents during install]),
- [install_doc=$enableval], [install_doc=yes])
-AC_ARG_ENABLE(install-rdoc,
- AS_HELP_STRING([--disable-install-rdoc], [do not install rdoc indexes during install]),
- [install_rdoc=$enableval], [install_rdoc=yes])
-AC_ARG_ENABLE(install-capi,
- AS_HELP_STRING([--disable-install-capi], [do not install C API documents during install]),
- [install_capi=$enableval], [install_capi=no])
-
-if test "$install_doc" != no; then
- if test "$install_rdoc" != no; then
- RDOCTARGET="rdoc"
- else
- RDOCTARGET="nodoc"
- fi
- if test "$install_capi" != no -a -n "$DOXYGEN"; then
- CAPITARGET="capi"
- else
- CAPITARGET="nodoc"
- fi
-else
- RDOCTARGET="nodoc"
- CAPITARGET="nodoc"
-fi
-
-AC_SUBST(RDOCTARGET)
-AC_SUBST(CAPITARGET)
-
-AS_CASE(["$RDOCTARGET:$CAPITARGET"],[nodoc:nodoc],[INSTALLDOC=nodoc],[INSTALLDOC=all])
-AC_SUBST(INSTALLDOC)
-
-if test "$rb_with_pthread" = "yes"; then
- THREAD_MODEL=pthread
-fi
-AC_CACHE_CHECK([for prefix of external symbols], rb_cv_symbol_prefix, [
- AC_TRY_COMPILE([extern void conftest_external(void) {}], [], [
- rb_cv_symbol_prefix=`$NM conftest.$ac_objext |
- sed -n ['/.*T[ ]\([^ ]*\)conftest_external.*/!d;s//\1/p;q']`
- ],
- [rb_cv_symbol_prefix=''])
- test -n "$rb_cv_symbol_prefix" || rb_cv_symbol_prefix=NONE
-])
-SYMBOL_PREFIX="$rb_cv_symbol_prefix"
-test "x$SYMBOL_PREFIX" = xNONE && SYMBOL_PREFIX=''
-DLNOBJ=dln.o
-AC_ARG_ENABLE(dln,
- AC_HELP_STRING([--disable-dln], [disable dynamic link feature]),
- [test "$enableval" = yes || DLNOBJ=dmydln.o])
-AC_SUBST(DLNOBJ)
-MINIDLNOBJ=dmydln.o
-
-AS_CASE(["$target_os"],
- [linux*], [
- ],
- [netbsd*], [
- RUBY_APPEND_OPTION(CFLAGS, -pipe)
- ],
- [darwin*], [
- RUBY_APPEND_OPTION(CFLAGS, -pipe)
- RUBY_APPEND_OPTION(XLDFLAGS, [-framework CoreFoundation])
- RUBY_APPEND_OPTION(LIBRUBYARG_STATIC, [-framework CoreFoundation])
- ],
- [osf*], [
- if test "$GCC" != "yes" ; then
- # compile something small: taint.c is fine for this.
- # the main point is the '-v' flag of 'cc'.
- AS_CASE(["`cc -v -I. -c main.c -o /tmp/main.o 2>&1`"],
- [*/gemc_cc*], [ # we have the new DEC GEM CC
- CFLAGS="$CFLAGS -oldc"
- ],
- [ # we have the old MIPS CC
- ])
- # cleanup
- rm -f /tmp/main.o
- CFLAGS="$CFLAGS -std"
- fi
- ],
- [cygwin*|mingw*], [
- RUBY_SO_NAME="${RUBY_SO_NAME}"'$(MAJOR)$(MINOR)0'
- LIBRUBY_DLDFLAGS="${DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)'
- AS_CASE(["$target_os"],
- [cygwin*], [
- if test x"$enable_shared" = xyes; then
- LIBRUBY_SO='cyg$(RUBY_SO_NAME)'.dll
- LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)'
- fi
- ],
- [mingw*], [
- RUBY_SO_NAME="${rb_cv_msvcrt}-${RUBY_SO_NAME}"
- if test x"${target_cpu}" != xi386; then
- RUBY_SO_NAME="${target_cpu}-${RUBY_SO_NAME}"
- fi
- if test x"$enable_shared" = xyes; then
- LIBRUBY_SO='$(RUBY_SO_NAME)'.dll
- LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)'
- fi
- EXPORT_PREFIX=' '
- DLDFLAGS="${DLDFLAGS}"' $(DEFFILE)'
- AC_LIBOBJ([win32/win32])
- AC_LIBOBJ([win32/file])
- COMMON_LIBS=m
-# COMMON_MACROS="WIN32_LEAN_AND_MEAN="
- COMMON_HEADERS="winsock2.h windows.h"
- THREAD_MODEL=win32
- PLATFORM_DIR=win32
- ])
- LIBRUBY_ALIASES=''
- FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in
- SOLIBS='$(LIBS)'
- if test x"$enable_shared" = xyes; then
- LIBRUBY='lib$(RUBY_SO_NAME).dll.a'
- else
- LIBRUBY_SO=dummy
- LIBRUBY='lib$(RUBY_SO_NAME).a'
- LIBRUBYARG='-l$(RUBY_SO_NAME)'
- fi
- ],
- [hpux*], [
- AS_CASE(["$YACC"],[*yacc*], [
- XCFLAGS="$XCFLAGS -DYYMAXDEPTH=300"
- YACC="$YACC -Nl40000 -Nm40000"
- ])],
- [nacl], [
- FIRSTMAKEFILE=GNUmakefile:nacl/GNUmakefile.in
- ])
-
-AS_CASE(["$with_gmp: $SOLIBS "], [no:* | *' -lgmp '*|*' $(LIBS) '*], [],
- [SOLIBS="-lgmp $SOLIBS"])
-
-AS_CASE(["$with_jemalloc: $LIBS "], [no:* | *' -ljemalloc '*], [],
- [LIBS="-ljemalloc $LIBS"])
-
-MINIOBJS="$MINIDLNOBJ"
-
-AS_CASE(["$THREAD_MODEL"],
-[pthread], [AC_CHECK_HEADERS(pthread.h)],
-[win32], [],
-[""], [AC_MSG_ERROR(thread model is missing)],
- [AC_MSG_ERROR(unknown thread model $THREAD_MODEL)])
-
-AC_ARG_ENABLE(debug-env,
- AS_HELP_STRING([--enable-debug-env], [enable RUBY_DEBUG environment variable]),
- [AC_DEFINE(RUBY_DEBUG_ENV)])
-
-AS_CASE(["$FIRSTMAKEFILE"], [*GNUmakefile:*], [gnumake=yes], [
- AC_MSG_CHECKING([if ${MAKE-make} is GNU make])
- mkdir conftest.dir
- echo "all:; @echo yes" > conftest.dir/GNUmakefile
- echo "all:; @echo no" > conftest.dir/Makefile
- gnumake=`(cd conftest.dir; ${MAKE-make})`
- rm -fr conftest.dir
- AS_CASE(["$gnumake"],
- [*yes*], [
- FIRSTMAKEFILE=GNUmakefile:template/GNUmakefile.in
- gnumake=yes],
- [
- gnumake=no])
- AC_MSG_RESULT($gnumake)
-])
-AS_IF([test "$gnumake" = yes], [ NULLCMD=: ], [
- AC_MSG_CHECKING([for safe null command for ${MAKE-make}])
- mkdir conftest.dir
- NULLCMD=
- for cmd in : true; do
- echo 'A=1' > conftest.dir/Makefile
- echo 'B=$(A:1=@'$cmd')' >> conftest.dir/Makefile
- echo 'all:; $B 1 2 3 4 5 6 7 8 9' >> conftest.dir/Makefile
- if (cd conftest.dir; ${MAKE-make} >/dev/null 2>/dev/null); then
- NULLCMD=$cmd
- break
- fi
- done
- rm -fr conftest.dir
- if test -z "$NULLCMD"; then
- AC_MSG_ERROR(no candidate for safe null command)
- fi
- AC_MSG_RESULT($NULLCMD)
-])
-AC_SUBST(NULLCMD)
-
-if test "${universal_binary-no}" = yes ; then
- AC_CACHE_CHECK([for architecture macros], rb_cv_architecture_macros, [
- mv confdefs.h confdefs1.h
- : > confdefs.h
- AC_TRY_COMPILE([@%:@if defined __`echo ${universal_archnames} |
- sed 's/=[^ ]*//g;s/ /__ || defined __/g'`__
-@%:@else
-@%:@error
->>>>>><<<<<<
-@%:@endif], [],
-[
- rb_cv_architecture_macros=yes
- mv -f confdefs1.h confdefs.h
-], [
- rb_cv_architecture_macros=no
- archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
- new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'`
- for archs in ${universal_archnames}; do
- cpu=${archs@%:@*=}
- archs=${archs%=*}
- CFLAGS="$new_cflags -arch $archs"
- archs="__${archs}__"
- AC_MSG_CHECKING([for macro ${archs} on ${cpu}])
- AC_TRY_COMPILE([@%:@ifndef ${archs}
-@%:@error
-@%:@endif], [], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])])
- done
- mv -f confdefs1.h confdefs.h
- AC_MSG_ERROR([failed])
- ])])
- AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available,
- AC_TRY_COMPILE([@%:@include <stdio.h>
- const char arch[[]] = __ARCHITECTURE__;], [puts(arch);],
- [rb_cv_architecture_available=yes], [rb_cv_architecture_available=no]))
-fi
-
-CPPFLAGS="$CPPFLAGS "'$(DEFS)'
-test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}'
-if test -n "${cflags+set}"; then
- cflagspat=`eval echo '"'"${cflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/^ *$/ /'`
- CFLAGS=`echo " $CFLAGS " | sed "s|$cflagspat"'|${cflags}|;s/^ *//;s/ *$//'`
-fi
-if test -n "${cxxflags+set}"; then
- cxxflagspat=`eval echo '"'"${cxxflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/^ *$/ /'`
- CXXFLAGS=`echo " $CXXFLAGS " | sed "s|$cxxflagspat"'|${cxxflags}|;s/^ *//;s/ *$//'`
-fi
-if test "${ARCH_FLAG}"; then
- archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
- CFLAGS=`echo "$CFLAGS" | sed "s| *$archflagpat"'||'`
- CXXFLAGS=`echo "$CXXFLAGS" | sed "s| *$archflagpat"'||'`
- LDFLAGS=`echo "$LDFLAGS" | sed "s| *$archflagpat"'||'`
-fi
-warnflags="$rb_cv_warnflags"
-AC_SUBST(cppflags)dnl
-AC_SUBST(cflags, ["$orig_cflags "'${optflags} ${debugflags} ${warnflags}'])dnl
-AC_SUBST(cxxflags, ["$orig_cxxflags "'${optflags} ${debugflags} ${warnflags}'])dnl
-AC_SUBST(optflags)dnl
-AC_SUBST(debugflags)dnl
-AC_SUBST(warnflags)dnl
-AC_SUBST(strict_warnflags)dnl
-AC_SUBST(XCFLAGS)dnl
-AC_SUBST(XLDFLAGS)dnl
-AC_SUBST(EXTLDFLAGS)dnl
-AC_SUBST(EXTDLDFLAGS)dnl
-AC_SUBST(LIBRUBY_LDSHARED)
-AC_SUBST(LIBRUBY_DLDFLAGS)
-AC_SUBST(RUBY_INSTALL_NAME)
-AC_SUBST(rubyw_install_name)
-AC_SUBST(RUBYW_INSTALL_NAME)
-AC_SUBST(RUBY_SO_NAME)
-AC_SUBST(LIBRUBY_A)
-AC_SUBST(LIBRUBY_SO)
-AC_SUBST(LIBRUBY_ALIASES)
-AC_SUBST(LIBRUBY)
-AC_SUBST(LIBRUBYARG)
-AC_SUBST(LIBRUBYARG_STATIC)
-AC_SUBST(LIBRUBYARG_SHARED)
-AC_SUBST(SOLIBS)
-AC_SUBST(DLDLIBS)
-AC_SUBST(ENABLE_SHARED)
-AC_SUBST(MAINLIBS)
-AC_SUBST(COMMON_LIBS)
-AC_SUBST(COMMON_MACROS)
-AC_SUBST(COMMON_HEADERS)
-AC_SUBST(EXPORT_PREFIX)
-AC_SUBST(SYMBOL_PREFIX)
-AC_SUBST(MINIOBJS)
-AC_SUBST(THREAD_MODEL)
-AC_SUBST(PLATFORM_DIR)
-
-firstmf=`echo $FIRSTMAKEFILE | sed 's/:.*//'`
-firsttmpl=`echo $FIRSTMAKEFILE | sed 's/.*://'`
-MAKEFILES="Makefile $firstmf"
-MAKEFILES="`echo $MAKEFILES`"
-AC_SUBST(MAKEFILES)
-
-ri_prefix=
-test "$program_prefix" != NONE &&
- ri_prefix=$program_prefix
-
-ri_suffix=
-test "$program_suffix" != NONE &&
- ri_suffix=$program_suffix
-
-RUBY_INSTALL_NAME="${ri_prefix}"'$(RUBY_BASE_NAME)'"${ri_suffix}"
-AS_CASE(["$target_os"],
- [cygwin*|mingw*], [
- RUBYW_INSTALL_NAME="${ri_prefix}"'$(RUBYW_BASE_NAME)'"${ri_suffix}"
- rubyw_install_name='$(RUBYW_INSTALL_NAME)'
- ])
-
-rubylibdir='${rubylibprefix}/${ruby_version}'
-rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'}
-
-rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'}
-AC_ARG_WITH(rubyarchprefix,
- AS_HELP_STRING([--with-rubyarchprefix=DIR],
- [prefix for architecture dependent ruby libraries [[RUBYLIBPREFIX/ARCH]]]),
- [rubyarchprefix="$withval"])
-AC_SUBST(rubyarchprefix)
-
-rubysitearchprefix=${multiarch+'${sitearchlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${sitearch}'}
-AC_ARG_WITH(rubysitearchprefix,
- AS_HELP_STRING([--with-rubysitearchprefix=DIR],
- [prefix for architecture dependent site libraries [[RUBYLIBPREFIX/SITEARCH]]]),
- [rubysitearchprefix="$withval"])
-AC_SUBST(rubysitearchprefix)
-
-RI_BASE_NAME=`echo ${RUBY_BASE_NAME} | sed 's/ruby/ri/'`
-ridir='${datarootdir}/${RI_BASE_NAME}'
-AC_ARG_WITH(ridir,
- AS_HELP_STRING([--with-ridir=DIR], [ri documentation [[DATAROOTDIR/ri]]]),
- [ridir=$withval])
-AC_SUBST(ridir)
-AC_SUBST(RI_BASE_NAME)
-
-AC_ARG_WITH(ruby-version,
- AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|minor|STR)]),
- [ruby_version=$withval],
- [ruby_version=full])
-unset RUBY_LIB_VERSION
-unset RUBY_LIB_VERSION_STYLE
-AS_CASE(["$ruby_version"],
- [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'],
- [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */'])
-if test ${RUBY_LIB_VERSION_STYLE+set}; then
- {
- echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
- echo '#define STRINGIZE(x) x'
- test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
- echo '#include "verconf.h"'
- echo '#include "version.h"'
- echo 'ruby_version=RUBY_LIB_VERSION'
- } > conftest.c
- test -f verconf.h || > verconf.h
- ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`"
- eval $ruby_version
-elif test -z "${ruby_version}"; then
- AC_MSG_ERROR([No ruby version, No place for bundled libraries])
-else
- RUBY_LIB_VERSION="${ruby_version}"
-fi
-AC_SUBST(RUBY_LIB_VERSION_STYLE)
-AC_SUBST(RUBY_LIB_VERSION)
-
-AC_ARG_WITH(sitedir,
- AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]),
- [sitedir=$withval],
- [sitedir='${rubylibprefix}/site_ruby'])
-sitelibdir='${sitedir}/${ruby_version}'
-
-AC_ARG_WITH(sitearchdir,
- AS_HELP_STRING([--with-sitearchdir=DIR],
- [architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]], "no" to disable site directory]),
- [sitearchdir=$withval],
- [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby/${ruby_version}'}${multiarch-'${sitelibdir}/${sitearch}'}])
-
-AC_ARG_WITH(vendordir,
- AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]),
- [vendordir=$withval],
- [vendordir='${rubylibprefix}/vendor_ruby'])
-vendorlibdir='${vendordir}/${ruby_version}'
-
-AC_ARG_WITH(vendorarchdir,
- AS_HELP_STRING([--with-vendorarchdir=DIR],
- [architecture dependent vendor libraries in DIR [[VENDORDIR/SITEARCH]], "no" to disable vendor directory]),
- [vendorarchdir=$withval],
- [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}])
-
-if test "${LOAD_RELATIVE+set}"; then
- AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
- RUBY_EXEC_PREFIX=''
-fi
-
-AC_SUBST(RUBY_EXEC_PREFIX)
-
-AC_SUBST(libdirname, ${multiarch+arch}libdir)
-AC_SUBST(archlibdir)dnl
-AC_SUBST(sitearchlibdir)dnl
-AC_SUBST(archincludedir)dnl
-AC_SUBST(sitearchincludedir)dnl
-AC_SUBST(arch)dnl
-AC_SUBST(sitearch)dnl
-AC_SUBST(ruby_version)dnl
-AC_SUBST(rubylibdir)dnl
-AC_SUBST(rubyarchdir)dnl
-AC_SUBST(sitedir)dnl
-AC_SUBST(sitelibdir)dnl
-AC_SUBST(sitearchdir)dnl
-AC_SUBST(vendordir)dnl
-AC_SUBST(vendorlibdir)dnl
-AC_SUBST(vendorarchdir)dnl
-
-AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl
-AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl
-
-if test "${universal_binary-no}" = yes ; then
- arch="universal-${target_os}"
- if test "${rb_cv_architecture_available}" = yes; then
- AC_DEFINE_UNQUOTED(RUBY_PLATFORM_CPU, __ARCHITECTURE__)
- else
- for archs in ${universal_archnames}; do
- cpu=`echo $archs | sed 's/.*=//'`
- archs=`echo $archs | sed 's/=.*//'`
- RUBY_DEFINE_IF([defined __${archs}__], RUBY_PLATFORM_CPU, ["${cpu}"])
- done
- fi
- ints='long int short'
- test "$ac_cv_type_long_long" = yes && ints="'long long' $ints"
- AC_SUBST(UNIVERSAL_ARCHNAMES, "${universal_archnames}")
- AC_SUBST(UNIVERSAL_INTS, "${ints}")
- AC_DEFINE_UNQUOTED(RUBY_PLATFORM_OS, "${target_os}")
- AC_DEFINE_UNQUOTED(RUBY_ARCH, "universal-"RUBY_PLATFORM_OS)
- AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "universal."RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS)
-else
- arch="${target_cpu}-${target_os}"
- AS_CASE(["$arch"], [le32-nacl], [arch="pnacl"])
- AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "$arch")
-fi
-
-unset sitearch
-AS_CASE(["$target_os"],[mingw*],[sitearch="$target_cpu-$rb_cv_msvcrt"])
-: ${sitearch='${arch}'}
-
-AC_ARG_WITH(search-path,
- AS_HELP_STRING([--with-search-path=DIR], [specify the additional search path]),
- [search_path=$withval])
-if test "$search_path" != ""; then
- AC_SUBST(RUBY_SEARCH_PATH, $search_path)
-fi
-
-AC_ARG_WITH(rubyhdrdir,
- AS_HELP_STRING([--with-rubyhdrdir=DIR], [core headers in DIR [[INCLUDEDIR/RUBY_BASE_NAME-RUBY_VERSION]]]),
- [rubyhdrdir=$withval],
- [rubyhdrdir='${includedir}/${RUBY_VERSION_NAME}'])
-
-AC_ARG_WITH(rubyarchhdrdir,
- AS_HELP_STRING([--with-rubyarchhdrdir=DIR],
- [architecture dependent core headers in DIR [[$(rubyhdrdir)/$(arch)]]]),
- [rubyarchhdrdir=$withval],
- [rubyarchhdrdir=${multiarch+'${archincludedir}/${RUBY_VERSION_NAME}'}${multiarch-'${rubyhdrdir}/${arch}'}])
-
-AC_ARG_WITH(sitehdrdir,
- AS_HELP_STRING([--with-sitehdrdir=DIR], [core site headers in DIR [[RUBYHDRDIR/site_ruby]]]),
- [sitehdrdir=$withval],
- [sitehdrdir='${rubyhdrdir}/site_ruby'])
-
-AC_ARG_WITH(sitearchhdrdir,
- AS_HELP_STRING([--with-sitearchhdrdir=DIR],
- [architecture dependent core site headers in DIR [[RUBYHDRDIR/site_ruby]]]),
- [sitearchhdrdir=$withval],
- [sitearchhdrdir=${multiarch+'${sitearchincludedir}/${RUBY_VERSION_NAME}/site_ruby'}${multiarch-'${sitehdrdir}/${sitearch}'}])
-
-AC_ARG_WITH(vendorhdrdir,
- AS_HELP_STRING([--with-vendorhdrdir=DIR], [core vendor headers in DIR [[RUBYHDRDIR/vendor_ruby]]]),
- [vendorhdrdir=$withval],
- [vendorhdrdir='${rubyhdrdir}/vendor_ruby'])
-
-AC_ARG_WITH(vendorarchhdrdir,
- AS_HELP_STRING([--with-vendorarchhdrdir=DIR],
- [architecture dependent core vendor headers in DIR [[RUBYHDRDIR/vendor_ruby]]]),
- [vendorarchhdrdir=$withval],
- [vendorarchhdrdir=${multiarch+'${sitearchincludedir}/${RUBY_VERSION_NAME}/vendor_ruby'}${multiarch-'${vendorhdrdir}/${sitearch}'}])
-
-AC_SUBST(rubyhdrdir)dnl
-AC_SUBST(sitehdrdir)dnl
-AC_SUBST(vendorhdrdir)dnl
-AC_SUBST(rubyarchhdrdir)dnl
-AC_SUBST(sitearchhdrdir)dnl
-AC_SUBST(vendorarchhdrdir)dnl
-
-AC_ARG_WITH(mantype,
- AS_HELP_STRING([--with-mantype=TYPE], [specify man page type; TYPE is one of man and doc]),
- [
- AS_CASE(["$withval"],
- [man|man.gz|man.bz2|doc|doc.gz|doc.bz2], [MANTYPE=$withval],
- [AC_MSG_ERROR(invalid man type: $withval)])
- ])
-if test -z "$MANTYPE"; then
- AC_PATH_PROGS(NROFF, nroff awf, /bin/false, "/usr/bin:/usr/ucb")
- if ${NROFF} -mdoc ${srcdir}/man/ruby.1 >/dev/null 2>&1; then
- MANTYPE=doc
- else
- MANTYPE=man
- fi
-fi
-AC_SUBST(MANTYPE)
-
-AC_ARG_ENABLE(rubygems,
- AS_HELP_STRING([--disable-rubygems], [disable rubygems by default]),
- [enable_rubygems="$enableval"], [enable_rubygems=yes])
-if test x"$enable_rubygems" = xno; then
- AC_DEFINE(DISABLE_RUBYGEMS, 1)
- USE_RUBYGEMS=NO
-else
- USE_RUBYGEMS=YES
-fi
-AC_SUBST(USE_RUBYGEMS)
-
-arch_hdrdir="${EXTOUT}/include/${arch}/ruby"
-AS_MKDIR_P("${arch_hdrdir}")
-config_h="${arch_hdrdir}/config.h"
-guard=INCLUDE_RUBY_CONFIG_H
-{
- echo "#ifndef $guard"
- echo "#define $guard 1"
- grep -v "^#define PACKAGE_" confdefs.h
- echo "#endif /* $guard */"
-} | tr -d '\015' |
-(
- if test "x$CONFIGURE_TTY" = xyes; then color=--color; else color=; fi
- exec ${srcdir}/tool/ifchange $color "${config_h}" -
-)
-tr -d '\015' < largefile.h > confdefs.h
-rm largefile.h
-
-BUILTIN_ENCS=["`sed -n -e '/^BUILTIN_ENCS[ ]*=/{' \
- -e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \
- -e '}' "${srcdir}/enc/Makefile.in"`"]
-BUILTIN_ENCOBJS=
-for e in $BUILTIN_ENCS; do BUILTIN_ENCOBJS="$BUILTIN_ENCOBJS "`echo $e | sed 's/\.c$/.$(OBJEXT)/'`; done
-AC_SUBST(BUILTIN_ENCOBJS)
-
-BUILTIN_TRANSES=["`sed -n -e '/^BUILTIN_TRANSES[ ]*=/{' \
- -e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \
- -e '}' "${srcdir}/enc/Makefile.in"`"]
-BUILTIN_TRANSSRCS=
-BUILTIN_TRANSOBJS=
-for e in $BUILTIN_TRANSES; do
- BUILTIN_TRANSSRCS="$BUILTIN_TRANSSRCS "`echo $e | sed 's/\.trans$/.c/'`
- BUILTIN_TRANSOBJS="$BUILTIN_TRANSOBJS "`echo $e | sed 's/\.trans$/.$(OBJEXT)/'`
-done
-AC_SUBST(BUILTIN_TRANSSRCS)
-AC_SUBST(BUILTIN_TRANSOBJS)
-
-PACKAGE=$RUBY_BASE_NAME
-AC_SUBST(PACKAGE)
-AS_MESSAGE([$PACKAGE library version = $ruby_version])
-
-AS_CASE([" $CPP "], [*" $CC "*], [CPP=`echo " $CPP " | sed "s| $CC |"' $(CC) |;s/^ *//;s/ *$//'`])
-
-if test x"$firstmf" != x; then
- AC_CONFIG_FILES($firstmf:$firsttmpl, [], [firstmf="$firstmf" firsttmpl="$firsttmpl"])
-fi
-AC_CONFIG_FILES(Makefile, [
- tmpmk=confmk$$.tmp
- {
- if test ${VCS+set}; then
- :
- elif svn info "$srcdir" > /dev/null 2>&1; then
- VCS='svn'
- elif test -d "$srcdir/.git/svn"; then
- VCS='git svn'
- elif test -d "$srcdir/.git"; then
- VCS='git'
- else
- VCS='echo cannot'
- fi
- AS_CASE("$VCS",
- [svn], [VCSUP='$(VCS) up $(SVNUPOPTIONS)'],
- ["git svn"], [VCSUP='$(VCS) rebase $(GITSVNREBASEOPTIONS)'],
- [git], [VCSUP='$(VCS) pull $(GITPULLOPTIONS)'],
- [VCSUP='$(VCS)'])
- sed -n \
- -e '[/^@%:@define \(RUBY_RELEASE_[A-Z]*\) \([0-9][0-9]*\)/]{' \
- -e 's//\1 = \2/' \
- -e '[s/ \([0-9]\)$/ 0\1/]' \
- -e p \
- -e '}' "$srcdir/version.h"
- sed '/^MISSING/s/\$U\././g;/^VCS *=/s#@VCS@#'"$VCS"'#;/^VCSUP *=/s#@VCSUP@#'"$VCSUP"'#' Makefile
- echo; test x"$EXEEXT" = x || echo 'miniruby: miniruby$(EXEEXT)'
- if test "$gnumake" != yes; then
- echo ['$(MKFILES): $(srcdir)/common.mk']
- sed ['s/{\$([^(){}]*)[^{}]*}//g'] ${srcdir}/common.mk
- else
- echo 'distclean-local::; @$(RM) GNUmakefile uncommon.mk'
- fi
- } > $tmpmk && if ! grep '^ruby:' $tmpmk > /dev/null; then
- if test "${gnumake}" = yes; then
- tmpgmk=confgmk$$.tmp
- {
- echo "include $tmpmk"
- echo "-include uncommon.mk"
- } > $tmpgmk
- else
- tmpgmk=$tmpmk
- fi &&
- test -z "`${MAKE-make} -f $tmpgmk info-program | grep '^PROGRAM=ruby$'`" &&
- echo 'ruby: $(PROGRAM);' >> $tmpmk
- test "$tmpmk" = "$tmpgmk" || rm -f "$tmpgmk"
- fi && mv -f $tmpmk Makefile],
-[EXEEXT='$EXEEXT' gnumake='$gnumake'])
-
-AC_ARG_WITH([ruby-pc],
- AC_HELP_STRING([--with-ruby-pc=FILENAME], [pc file basename]),
- [ruby_pc="$withval"],
- [ruby_pc="${RUBY_BASE_NAME}-${MAJOR}.${MINOR}.pc"])
-AC_SUBST(ruby_pc)
-AC_SUBST(exec, [exec])
-
-AC_ARG_WITH(destdir,
- AS_HELP_STRING([--with-destdir=DESTDIR], [specify default directory to install]),
- [DESTDIR="$withval"])
-AC_SUBST(DESTDIR)
-
-AC_CONFIG_FILES($ruby_pc:template/ruby.pc.in,
- [
- if sed ['s/\$(\([A-Za-z_][A-Za-z0-9_]*\))/${\1}/g;s/@[A-Za-z_][A-Za-z0-9_]*@//'] $ruby_pc > ruby.tmp.pc &&
- {
- test -z "$PKG_CONFIG" ||
- PKG_CONFIG_PATH=. $PKG_CONFIG --print-errors ruby.tmp
- }
- then
- mv -f ruby.tmp.pc $ruby_pc
- else
- exit 1
- fi
- ],
- [ruby_pc='$ruby_pc' PKG_CONFIG='$PKG_CONFIG'])
-
-AC_OUTPUT
-}
-}
diff --git a/constant.h b/constant.h
index 76b59fa047..90a68d447a 100644
--- a/constant.h
+++ b/constant.h
@@ -1,3 +1,5 @@
+#ifndef CONSTANT_H
+#define CONSTANT_H
/**********************************************************************
constant.h -
@@ -8,8 +10,8 @@
Copyright (C) 2009 Yusuke Endoh
**********************************************************************/
-#ifndef CONSTANT_H
-#define CONSTANT_H
+#include "ruby/ruby.h"
+#include "id_table.h"
typedef enum {
CONST_DEPRECATED = 0x100,
@@ -31,20 +33,21 @@ typedef enum {
typedef struct rb_const_entry_struct {
rb_const_flag_t flag;
int line;
- const VALUE value; /* should be mark */
- const VALUE file; /* should be mark */
+ VALUE value; /* should be mark */
+ VALUE file; /* should be mark */
} rb_const_entry_t;
VALUE rb_mod_private_constant(int argc, const VALUE *argv, VALUE obj);
VALUE rb_mod_public_constant(int argc, const VALUE *argv, VALUE obj);
VALUE rb_mod_deprecate_constant(int argc, const VALUE *argv, VALUE obj);
void rb_free_const_table(struct rb_id_table *tbl);
-VALUE rb_public_const_get(VALUE klass, ID id);
+VALUE rb_const_source_location(VALUE, ID);
+
+int rb_autoloading_value(VALUE mod, ID id, VALUE *value, rb_const_flag_t *flag);
+rb_const_entry_t *rb_const_lookup(VALUE klass, ID id);
VALUE rb_public_const_get_at(VALUE klass, ID id);
VALUE rb_public_const_get_from(VALUE klass, ID id);
-int rb_public_const_defined(VALUE klass, ID id);
-int rb_public_const_defined_at(VALUE klass, ID id);
int rb_public_const_defined_from(VALUE klass, ID id);
-rb_const_entry_t *rb_const_lookup(VALUE klass, ID id);
+VALUE rb_const_source_location_at(VALUE, ID);
#endif /* CONSTANT_H */
diff --git a/cont.c b/cont.c
index 8ebd78f860..8af093a316 100644
--- a/cont.c
+++ b/cont.c
@@ -9,269 +9,1100 @@
**********************************************************************/
-#include "internal.h"
-#include "vm_core.h"
-#include "gc.h"
-#include "eval_intern.h"
-
-/* FIBER_USE_NATIVE enables Fiber performance improvement using system
- * dependent method such as make/setcontext on POSIX system or
- * CreateFiber() API on Windows.
- * This hack make Fiber context switch faster (x2 or more).
- * However, it decrease maximum number of Fiber. For example, on the
- * 32bit POSIX OS, ten or twenty thousands Fiber can be created.
- *
- * Details is reported in the paper "A Fast Fiber Implementation for Ruby 1.9"
- * in Proc. of 51th Programming Symposium, pp.21--28 (2010) (in Japanese).
- */
-
-#if !defined(FIBER_USE_NATIVE)
-# if defined(HAVE_GETCONTEXT) && defined(HAVE_SETCONTEXT)
-# if 0
-# elif defined(__NetBSD__)
-/* On our experience, NetBSD doesn't support using setcontext() and pthread
- * simultaneously. This is because pthread_self(), TLS and other information
- * are represented by stack pointer (higher bits of stack pointer).
- * TODO: check such constraint on configure.
- */
-# define FIBER_USE_NATIVE 0
-# elif defined(__sun)
-/* On Solaris because resuming any Fiber caused SEGV, for some reason.
- */
-# define FIBER_USE_NATIVE 0
-# elif defined(__ia64)
-/* At least, Linux/ia64's getcontext(3) doesn't save register window.
- */
-# define FIBER_USE_NATIVE 0
-# elif defined(__GNU__)
-/* GNU/Hurd doesn't fully support getcontext, setcontext, makecontext
- * and swapcontext functions. Disabling their usage till support is
- * implemented. More info at
- * http://darnassus.sceen.net/~hurd-web/open_issues/glibc/#getcontext
- */
-# define FIBER_USE_NATIVE 0
-# else
-# define FIBER_USE_NATIVE 1
-# endif
-# elif defined(_WIN32)
-# if _WIN32_WINNT >= 0x0400
-/* only when _WIN32_WINNT >= 0x0400 on Windows because Fiber APIs are
- * supported only such building (and running) environments.
- * [ruby-dev:41192]
- */
-# define FIBER_USE_NATIVE 1
-# endif
-# endif
-#endif
-#if !defined(FIBER_USE_NATIVE)
-#define FIBER_USE_NATIVE 0
-#endif
+#include "ruby/internal/config.h"
-#if FIBER_USE_NATIVE
#ifndef _WIN32
#include <unistd.h>
#include <sys/mman.h>
-#include <ucontext.h>
#endif
+
+// On Solaris, madvise() is NOT declared for SUS (XPG4v2) or later,
+// but MADV_* macros are defined when __EXTENSIONS__ is defined.
+#ifdef NEED_MADVICE_PROTOTYPE_USING_CADDR_T
+#include <sys/types.h>
+extern int madvise(caddr_t, size_t, int);
+#endif
+
+#include COROUTINE_H
+
+#include "eval_intern.h"
+#include "internal.h"
+#include "internal/cont.h"
+#include "internal/thread.h"
+#include "internal/error.h"
+#include "internal/eval.h"
+#include "internal/gc.h"
+#include "internal/proc.h"
+#include "internal/sanitizers.h"
+#include "internal/warnings.h"
+#include "ruby/fiber/scheduler.h"
+#include "yjit.h"
+#include "vm_core.h"
+#include "vm_sync.h"
+#include "id_table.h"
+#include "ractor_core.h"
+
+static const int DEBUG = 0;
+
#define RB_PAGE_SIZE (pagesize)
#define RB_PAGE_MASK (~(RB_PAGE_SIZE - 1))
static long pagesize;
-#endif /*FIBER_USE_NATIVE*/
+
+static const rb_data_type_t rb_cont_data_type;
+static const rb_data_type_t rb_fiber_data_type;
+static VALUE rb_cContinuation;
+static VALUE rb_cFiber;
+static VALUE rb_eFiberError;
+#ifdef RB_EXPERIMENTAL_FIBER_POOL
+static VALUE rb_cFiberPool;
+#endif
#define CAPTURE_JUST_VALID_VM_STACK 1
+// Defined in `coroutine/$arch/Context.h`:
+#ifdef COROUTINE_LIMITED_ADDRESS_SPACE
+#define FIBER_POOL_ALLOCATION_FREE
+#define FIBER_POOL_INITIAL_SIZE 8
+#define FIBER_POOL_ALLOCATION_MAXIMUM_SIZE 32
+#else
+#define FIBER_POOL_INITIAL_SIZE 32
+#define FIBER_POOL_ALLOCATION_MAXIMUM_SIZE 1024
+#endif
+#ifdef RB_EXPERIMENTAL_FIBER_POOL
+#define FIBER_POOL_ALLOCATION_FREE
+#endif
+
enum context_type {
CONTINUATION_CONTEXT = 0,
- FIBER_CONTEXT = 1,
- ROOT_FIBER_CONTEXT = 2
+ FIBER_CONTEXT = 1
+};
+
+struct cont_saved_vm_stack {
+ VALUE *ptr;
+#ifdef CAPTURE_JUST_VALID_VM_STACK
+ size_t slen; /* length of stack (head of ec->vm_stack) */
+ size_t clen; /* length of control frames (tail of ec->vm_stack) */
+#endif
+};
+
+struct fiber_pool;
+
+// Represents a single stack.
+struct fiber_pool_stack {
+ // A pointer to the memory allocation (lowest address) for the stack.
+ void * base;
+
+ // The current stack pointer, taking into account the direction of the stack.
+ void * current;
+
+ // The size of the stack excluding any guard pages.
+ size_t size;
+
+ // The available stack capacity w.r.t. the current stack offset.
+ size_t available;
+
+ // The pool this stack should be allocated from.
+ struct fiber_pool * pool;
+
+ // If the stack is allocated, the allocation it came from.
+ struct fiber_pool_allocation * allocation;
+};
+
+// A linked list of vacant (unused) stacks.
+// This structure is stored in the first page of a stack if it is not in use.
+// @sa fiber_pool_vacancy_pointer
+struct fiber_pool_vacancy {
+ // Details about the vacant stack:
+ struct fiber_pool_stack stack;
+
+ // The vacancy linked list.
+#ifdef FIBER_POOL_ALLOCATION_FREE
+ struct fiber_pool_vacancy * previous;
+#endif
+ struct fiber_pool_vacancy * next;
+};
+
+// Manages singly linked list of mapped regions of memory which contains 1 more more stack:
+//
+// base = +-------------------------------+-----------------------+ +
+// |VM Stack |VM Stack | | |
+// | | | | |
+// | | | | |
+// +-------------------------------+ | |
+// |Machine Stack |Machine Stack | | |
+// | | | | |
+// | | | | |
+// | | | . . . . | | size
+// | | | | |
+// | | | | |
+// | | | | |
+// | | | | |
+// | | | | |
+// +-------------------------------+ | |
+// |Guard Page |Guard Page | | |
+// +-------------------------------+-----------------------+ v
+//
+// +------------------------------------------------------->
+//
+// count
+//
+struct fiber_pool_allocation {
+ // A pointer to the memory mapped region.
+ void * base;
+
+ // The size of the individual stacks.
+ size_t size;
+
+ // The stride of individual stacks (including any guard pages or other accounting details).
+ size_t stride;
+
+ // The number of stacks that were allocated.
+ size_t count;
+
+#ifdef FIBER_POOL_ALLOCATION_FREE
+ // The number of stacks used in this allocation.
+ size_t used;
+#endif
+
+ struct fiber_pool * pool;
+
+ // The allocation linked list.
+#ifdef FIBER_POOL_ALLOCATION_FREE
+ struct fiber_pool_allocation * previous;
+#endif
+ struct fiber_pool_allocation * next;
+};
+
+// A fiber pool manages vacant stacks to reduce the overhead of creating fibers.
+struct fiber_pool {
+ // A singly-linked list of allocations which contain 1 or more stacks each.
+ struct fiber_pool_allocation * allocations;
+
+ // Free list that provides O(1) stack "allocation".
+ struct fiber_pool_vacancy * vacancies;
+
+ // The size of the stack allocations (excluding any guard page).
+ size_t size;
+
+ // The total number of stacks that have been allocated in this pool.
+ size_t count;
+
+ // The initial number of stacks to allocate.
+ size_t initial_count;
+
+ // Whether to madvise(free) the stack or not.
+ // If this value is set to 1, the stack will be madvise(free)ed
+ // (or equivalent), where possible, when it is returned to the pool.
+ int free_stacks;
+
+ // The number of stacks that have been used in this pool.
+ size_t used;
+
+ // The amount to allocate for the vm_stack.
+ size_t vm_stack_size;
};
+// Continuation contexts used by JITs
+struct rb_jit_cont {
+ rb_execution_context_t *ec; // continuation ec
+ struct rb_jit_cont *prev, *next; // used to form lists
+};
+
+// Doubly linked list for enumerating all on-stack ISEQs.
+static struct rb_jit_cont *first_jit_cont;
+
typedef struct rb_context_struct {
enum context_type type;
int argc;
+ int kw_splat;
VALUE self;
VALUE value;
- VALUE *vm_stack;
-#ifdef CAPTURE_JUST_VALID_VM_STACK
- size_t vm_stack_slen; /* length of stack (head of th->stack) */
- size_t vm_stack_clen; /* length of control frames (tail of th->stack) */
-#endif
+
+ struct cont_saved_vm_stack saved_vm_stack;
+
struct {
- VALUE *stack;
- VALUE *stack_src;
- size_t stack_size;
-#ifdef __ia64
- VALUE *register_stack;
- VALUE *register_stack_src;
- int register_stack_size;
-#endif
+ VALUE *stack;
+ VALUE *stack_src;
+ size_t stack_size;
} machine;
- rb_thread_t saved_thread; /* selected properties of GET_THREAD() (see cont_save_thread) */
+ rb_execution_context_t saved_ec;
rb_jmpbuf_t jmpbuf;
- rb_ensure_entry_t *ensure_array;
- rb_ensure_list_t *ensure_list;
+ struct rb_jit_cont *jit_cont; // Continuation contexts for JITs
} rb_context_t;
+/*
+ * Fiber status:
+ * [Fiber.new] ------> FIBER_CREATED ----> [Fiber#kill] --> |
+ * | [Fiber#resume] |
+ * v |
+ * +--> FIBER_RESUMED ----> [return] ------> |
+ * [Fiber#resume] | | [Fiber.yield/transfer] |
+ * [Fiber#transfer] | v |
+ * +--- FIBER_SUSPENDED --> [Fiber#kill] --> |
+ * |
+ * |
+ * FIBER_TERMINATED <-------------------+
+ */
enum fiber_status {
- CREATED,
- RUNNING,
- TERMINATED
+ FIBER_CREATED,
+ FIBER_RESUMED,
+ FIBER_SUSPENDED,
+ FIBER_TERMINATED
};
-#if FIBER_USE_NATIVE && !defined(_WIN32)
-#define MAX_MACHINE_STACK_CACHE 10
-static int machine_stack_cache_index = 0;
-typedef struct machine_stack_cache_struct {
- void *ptr;
- size_t size;
-} machine_stack_cache_t;
-static machine_stack_cache_t machine_stack_cache[MAX_MACHINE_STACK_CACHE];
-static machine_stack_cache_t terminated_machine_stack;
-#endif
+#define FIBER_CREATED_P(fiber) ((fiber)->status == FIBER_CREATED)
+#define FIBER_RESUMED_P(fiber) ((fiber)->status == FIBER_RESUMED)
+#define FIBER_SUSPENDED_P(fiber) ((fiber)->status == FIBER_SUSPENDED)
+#define FIBER_TERMINATED_P(fiber) ((fiber)->status == FIBER_TERMINATED)
+#define FIBER_RUNNABLE_P(fiber) (FIBER_CREATED_P(fiber) || FIBER_SUSPENDED_P(fiber))
struct rb_fiber_struct {
rb_context_t cont;
+ VALUE first_proc;
struct rb_fiber_struct *prev;
- enum fiber_status status;
- /* If a fiber invokes "transfer",
- * then this fiber can't "resume" any more after that.
- * You shouldn't mix "transfer" and "resume".
- */
- int transferred;
+ struct rb_fiber_struct *resuming_fiber;
+
+ BITFIELD(enum fiber_status, status, 2);
+ /* Whether the fiber is allowed to implicitly yield. */
+ unsigned int yielding : 1;
+ unsigned int blocking : 1;
+
+ unsigned int killed : 1;
+
+ struct coroutine_context context;
+ struct fiber_pool_stack stack;
+};
+
+static struct fiber_pool shared_fiber_pool = {NULL, NULL, 0, 0, 0, 0};
+
+void
+rb_free_shared_fiber_pool(void)
+{
+ struct fiber_pool_allocation *allocations = shared_fiber_pool.allocations;
+ while (allocations) {
+ struct fiber_pool_allocation *next = allocations->next;
+ xfree(allocations);
+ allocations = next;
+ }
+}
+
+static ID fiber_initialize_keywords[3] = {0};
+
+/*
+ * FreeBSD require a first (i.e. addr) argument of mmap(2) is not NULL
+ * if MAP_STACK is passed.
+ * https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=158755
+ */
+#if defined(MAP_STACK) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__)
+#define FIBER_STACK_FLAGS (MAP_PRIVATE | MAP_ANON | MAP_STACK)
+#else
+#define FIBER_STACK_FLAGS (MAP_PRIVATE | MAP_ANON)
+#endif
+
+#define ERRNOMSG strerror(errno)
+
+// Locates the stack vacancy details for the given stack.
+inline static struct fiber_pool_vacancy *
+fiber_pool_vacancy_pointer(void * base, size_t size)
+{
+ STACK_GROW_DIR_DETECTION;
+
+ return (struct fiber_pool_vacancy *)(
+ (char*)base + STACK_DIR_UPPER(0, size - RB_PAGE_SIZE)
+ );
+}
+
+#if defined(COROUTINE_SANITIZE_ADDRESS)
+// Compute the base pointer for a vacant stack, for the area which can be poisoned.
+inline static void *
+fiber_pool_stack_poison_base(struct fiber_pool_stack * stack)
+{
+ STACK_GROW_DIR_DETECTION;
+
+ return (char*)stack->base + STACK_DIR_UPPER(RB_PAGE_SIZE, 0);
+}
+
+// Compute the size of the vacant stack, for the area that can be poisoned.
+inline static size_t
+fiber_pool_stack_poison_size(struct fiber_pool_stack * stack)
+{
+ return stack->size - RB_PAGE_SIZE;
+}
+#endif
+
+// Reset the current stack pointer and available size of the given stack.
+inline static void
+fiber_pool_stack_reset(struct fiber_pool_stack * stack)
+{
+ STACK_GROW_DIR_DETECTION;
+
+ stack->current = (char*)stack->base + STACK_DIR_UPPER(0, stack->size);
+ stack->available = stack->size;
+}
+
+// A pointer to the base of the current unused portion of the stack.
+inline static void *
+fiber_pool_stack_base(struct fiber_pool_stack * stack)
+{
+ STACK_GROW_DIR_DETECTION;
+
+ VM_ASSERT(stack->current);
+
+ return STACK_DIR_UPPER(stack->current, (char*)stack->current - stack->available);
+}
+
+// Allocate some memory from the stack. Used to allocate vm_stack inline with machine stack.
+// @sa fiber_initialize_coroutine
+inline static void *
+fiber_pool_stack_alloca(struct fiber_pool_stack * stack, size_t offset)
+{
+ STACK_GROW_DIR_DETECTION;
+
+ if (DEBUG) fprintf(stderr, "fiber_pool_stack_alloca(%p): %"PRIuSIZE"/%"PRIuSIZE"\n", (void*)stack, offset, stack->available);
+ VM_ASSERT(stack->available >= offset);
+
+ // The pointer to the memory being allocated:
+ void * pointer = STACK_DIR_UPPER(stack->current, (char*)stack->current - offset);
+
+ // Move the stack pointer:
+ stack->current = STACK_DIR_UPPER((char*)stack->current + offset, (char*)stack->current - offset);
+ stack->available -= offset;
+
+ return pointer;
+}
+
+// Reset the current stack pointer and available size of the given stack.
+inline static void
+fiber_pool_vacancy_reset(struct fiber_pool_vacancy * vacancy)
+{
+ fiber_pool_stack_reset(&vacancy->stack);
+
+ // Consume one page of the stack because it's used for the vacancy list:
+ fiber_pool_stack_alloca(&vacancy->stack, RB_PAGE_SIZE);
+}
+
+inline static struct fiber_pool_vacancy *
+fiber_pool_vacancy_push(struct fiber_pool_vacancy * vacancy, struct fiber_pool_vacancy * head)
+{
+ vacancy->next = head;
+
+#ifdef FIBER_POOL_ALLOCATION_FREE
+ if (head) {
+ head->previous = vacancy;
+ vacancy->previous = NULL;
+ }
+#endif
+
+ return vacancy;
+}
+
+#ifdef FIBER_POOL_ALLOCATION_FREE
+static void
+fiber_pool_vacancy_remove(struct fiber_pool_vacancy * vacancy)
+{
+ if (vacancy->next) {
+ vacancy->next->previous = vacancy->previous;
+ }
+
+ if (vacancy->previous) {
+ vacancy->previous->next = vacancy->next;
+ }
+ else {
+ // It's the head of the list:
+ vacancy->stack.pool->vacancies = vacancy->next;
+ }
+}
+
+inline static struct fiber_pool_vacancy *
+fiber_pool_vacancy_pop(struct fiber_pool * pool)
+{
+ struct fiber_pool_vacancy * vacancy = pool->vacancies;
+
+ if (vacancy) {
+ fiber_pool_vacancy_remove(vacancy);
+ }
+
+ return vacancy;
+}
+#else
+inline static struct fiber_pool_vacancy *
+fiber_pool_vacancy_pop(struct fiber_pool * pool)
+{
+ struct fiber_pool_vacancy * vacancy = pool->vacancies;
+
+ if (vacancy) {
+ pool->vacancies = vacancy->next;
+ }
+
+ return vacancy;
+}
+#endif
+
+// Initialize the vacant stack. The [base, size] allocation should not include the guard page.
+// @param base The pointer to the lowest address of the allocated memory.
+// @param size The size of the allocated memory.
+inline static struct fiber_pool_vacancy *
+fiber_pool_vacancy_initialize(struct fiber_pool * fiber_pool, struct fiber_pool_vacancy * vacancies, void * base, size_t size)
+{
+ struct fiber_pool_vacancy * vacancy = fiber_pool_vacancy_pointer(base, size);
+
+ vacancy->stack.base = base;
+ vacancy->stack.size = size;
+
+ fiber_pool_vacancy_reset(vacancy);
+
+ vacancy->stack.pool = fiber_pool;
+
+ return fiber_pool_vacancy_push(vacancy, vacancies);
+}
+
+// Allocate a maximum of count stacks, size given by stride.
+// @param count the number of stacks to allocate / were allocated.
+// @param stride the size of the individual stacks.
+// @return [void *] the allocated memory or NULL if allocation failed.
+inline static void *
+fiber_pool_allocate_memory(size_t * count, size_t stride)
+{
+ // We use a divide-by-2 strategy to try and allocate memory. We are trying
+ // to allocate `count` stacks. In normal situation, this won't fail. But
+ // if we ran out of address space, or we are allocating more memory than
+ // the system would allow (e.g. overcommit * physical memory + swap), we
+ // divide count by two and try again. This condition should only be
+ // encountered in edge cases, but we handle it here gracefully.
+ while (*count > 1) {
+#if defined(_WIN32)
+ void * base = VirtualAlloc(0, (*count)*stride, MEM_COMMIT, PAGE_READWRITE);
+
+ if (!base) {
+ *count = (*count) >> 1;
+ }
+ else {
+ return base;
+ }
+#else
+ errno = 0;
+ size_t mmap_size = (*count)*stride;
+ void * base = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, FIBER_STACK_FLAGS, -1, 0);
+
+ if (base == MAP_FAILED) {
+ // If the allocation fails, count = count / 2, and try again.
+ *count = (*count) >> 1;
+ }
+ else {
+ ruby_annotate_mmap(base, mmap_size, "Ruby:fiber_pool_allocate_memory");
+#if defined(MADV_FREE_REUSE)
+ // On Mac MADV_FREE_REUSE is necessary for the task_info api
+ // to keep the accounting accurate as possible when a page is marked as reusable
+ // it can possibly not occurring at first call thus re-iterating if necessary.
+ while (madvise(base, mmap_size, MADV_FREE_REUSE) == -1 && errno == EAGAIN);
+#endif
+ return base;
+ }
+#endif
+ }
+
+ return NULL;
+}
+
+// Given an existing fiber pool, expand it by the specified number of stacks.
+// @param count the maximum number of stacks to allocate.
+// @return the allocated fiber pool.
+// @sa fiber_pool_allocation_free
+static struct fiber_pool_allocation *
+fiber_pool_expand(struct fiber_pool * fiber_pool, size_t count)
+{
+ struct fiber_pool_allocation * allocation;
+ RB_VM_LOCK_ENTER();
+ {
+ STACK_GROW_DIR_DETECTION;
+
+ size_t size = fiber_pool->size;
+ size_t stride = size + RB_PAGE_SIZE;
+
+ // Allocate the memory required for the stacks:
+ void * base = fiber_pool_allocate_memory(&count, stride);
+
+ if (base == NULL) {
+ rb_raise(rb_eFiberError, "can't alloc machine stack to fiber (%"PRIuSIZE" x %"PRIuSIZE" bytes): %s", count, size, ERRNOMSG);
+ }
+
+ struct fiber_pool_vacancy * vacancies = fiber_pool->vacancies;
+ allocation = RB_ALLOC(struct fiber_pool_allocation);
+
+ // Initialize fiber pool allocation:
+ allocation->base = base;
+ allocation->size = size;
+ allocation->stride = stride;
+ allocation->count = count;
+#ifdef FIBER_POOL_ALLOCATION_FREE
+ allocation->used = 0;
+#endif
+ allocation->pool = fiber_pool;
+
+ if (DEBUG) {
+ fprintf(stderr, "fiber_pool_expand(%"PRIuSIZE"): %p, %"PRIuSIZE"/%"PRIuSIZE" x [%"PRIuSIZE":%"PRIuSIZE"]\n",
+ count, (void*)fiber_pool, fiber_pool->used, fiber_pool->count, size, fiber_pool->vm_stack_size);
+ }
+
+ // Iterate over all stacks, initializing the vacancy list:
+ for (size_t i = 0; i < count; i += 1) {
+ void * base = (char*)allocation->base + (stride * i);
+ void * page = (char*)base + STACK_DIR_UPPER(size, 0);
+#if defined(_WIN32)
+ DWORD old_protect;
+
+ if (!VirtualProtect(page, RB_PAGE_SIZE, PAGE_READWRITE | PAGE_GUARD, &old_protect)) {
+ VirtualFree(allocation->base, 0, MEM_RELEASE);
+ rb_raise(rb_eFiberError, "can't set a guard page: %s", ERRNOMSG);
+ }
+#elif defined(__wasi__)
+ // wasi-libc's mprotect emulation doesn't support PROT_NONE.
+ (void)page;
+#else
+ if (mprotect(page, RB_PAGE_SIZE, PROT_NONE) < 0) {
+ munmap(allocation->base, count*stride);
+ rb_raise(rb_eFiberError, "can't set a guard page: %s", ERRNOMSG);
+ }
+#endif
+
+ vacancies = fiber_pool_vacancy_initialize(
+ fiber_pool, vacancies,
+ (char*)base + STACK_DIR_UPPER(0, RB_PAGE_SIZE),
+ size
+ );
+
+#ifdef FIBER_POOL_ALLOCATION_FREE
+ vacancies->stack.allocation = allocation;
+#endif
+ }
+
+ // Insert the allocation into the head of the pool:
+ allocation->next = fiber_pool->allocations;
+
+#ifdef FIBER_POOL_ALLOCATION_FREE
+ if (allocation->next) {
+ allocation->next->previous = allocation;
+ }
+
+ allocation->previous = NULL;
+#endif
+
+ fiber_pool->allocations = allocation;
+ fiber_pool->vacancies = vacancies;
+ fiber_pool->count += count;
+ }
+ RB_VM_LOCK_LEAVE();
+
+ return allocation;
+}
+
+// Initialize the specified fiber pool with the given number of stacks.
+// @param vm_stack_size The size of the vm stack to allocate.
+static void
+fiber_pool_initialize(struct fiber_pool * fiber_pool, size_t size, size_t count, size_t vm_stack_size)
+{
+ VM_ASSERT(vm_stack_size < size);
+
+ fiber_pool->allocations = NULL;
+ fiber_pool->vacancies = NULL;
+ fiber_pool->size = ((size / RB_PAGE_SIZE) + 1) * RB_PAGE_SIZE;
+ fiber_pool->count = 0;
+ fiber_pool->initial_count = count;
+ fiber_pool->free_stacks = 1;
+ fiber_pool->used = 0;
+
+ fiber_pool->vm_stack_size = vm_stack_size;
+
+ fiber_pool_expand(fiber_pool, count);
+}
+
+#ifdef FIBER_POOL_ALLOCATION_FREE
+// Free the list of fiber pool allocations.
+static void
+fiber_pool_allocation_free(struct fiber_pool_allocation * allocation)
+{
+ STACK_GROW_DIR_DETECTION;
+
+ VM_ASSERT(allocation->used == 0);
+
+ if (DEBUG) fprintf(stderr, "fiber_pool_allocation_free: %p base=%p count=%"PRIuSIZE"\n", (void*)allocation, allocation->base, allocation->count);
+
+ size_t i;
+ for (i = 0; i < allocation->count; i += 1) {
+ void * base = (char*)allocation->base + (allocation->stride * i) + STACK_DIR_UPPER(0, RB_PAGE_SIZE);
+
+ struct fiber_pool_vacancy * vacancy = fiber_pool_vacancy_pointer(base, allocation->size);
+
+ // Pop the vacant stack off the free list:
+ fiber_pool_vacancy_remove(vacancy);
+ }
-#if FIBER_USE_NATIVE
#ifdef _WIN32
- void *fib_handle;
+ VirtualFree(allocation->base, 0, MEM_RELEASE);
#else
- ucontext_t context;
- /* Because context.uc_stack.ss_sp and context.uc_stack.ss_size
- * are not necessarily valid after makecontext() or swapcontext(),
- * they are saved in these variables for later use.
+ munmap(allocation->base, allocation->stride * allocation->count);
+#endif
+
+ if (allocation->previous) {
+ allocation->previous->next = allocation->next;
+ }
+ else {
+ // We are the head of the list, so update the pool:
+ allocation->pool->allocations = allocation->next;
+ }
+
+ if (allocation->next) {
+ allocation->next->previous = allocation->previous;
+ }
+
+ allocation->pool->count -= allocation->count;
+
+ ruby_xfree(allocation);
+}
+#endif
+
+// Acquire a stack from the given fiber pool. If none are available, allocate more.
+static struct fiber_pool_stack
+fiber_pool_stack_acquire(struct fiber_pool * fiber_pool)
+{
+ struct fiber_pool_vacancy * vacancy ;
+ RB_VM_LOCK_ENTER();
+ {
+ vacancy = fiber_pool_vacancy_pop(fiber_pool);
+
+ if (DEBUG) fprintf(stderr, "fiber_pool_stack_acquire: %p used=%"PRIuSIZE"\n", (void*)fiber_pool->vacancies, fiber_pool->used);
+
+ if (!vacancy) {
+ const size_t maximum = FIBER_POOL_ALLOCATION_MAXIMUM_SIZE;
+ const size_t minimum = fiber_pool->initial_count;
+
+ size_t count = fiber_pool->count;
+ if (count > maximum) count = maximum;
+ if (count < minimum) count = minimum;
+
+ fiber_pool_expand(fiber_pool, count);
+
+ // The free list should now contain some stacks:
+ VM_ASSERT(fiber_pool->vacancies);
+
+ vacancy = fiber_pool_vacancy_pop(fiber_pool);
+ }
+
+ VM_ASSERT(vacancy);
+ VM_ASSERT(vacancy->stack.base);
+
+#if defined(COROUTINE_SANITIZE_ADDRESS)
+ __asan_unpoison_memory_region(fiber_pool_stack_poison_base(&vacancy->stack), fiber_pool_stack_poison_size(&vacancy->stack));
+#endif
+
+ // Take the top item from the free list:
+ fiber_pool->used += 1;
+
+#ifdef FIBER_POOL_ALLOCATION_FREE
+ vacancy->stack.allocation->used += 1;
+#endif
+
+ fiber_pool_stack_reset(&vacancy->stack);
+ }
+ RB_VM_LOCK_LEAVE();
+
+ return vacancy->stack;
+}
+
+// We advise the operating system that the stack memory pages are no longer being used.
+// This introduce some performance overhead but allows system to relaim memory when there is pressure.
+static inline void
+fiber_pool_stack_free(struct fiber_pool_stack * stack)
+{
+ void * base = fiber_pool_stack_base(stack);
+ size_t size = stack->available;
+
+ // If this is not true, the vacancy information will almost certainly be destroyed:
+ VM_ASSERT(size <= (stack->size - RB_PAGE_SIZE));
+
+ int advice = stack->pool->free_stacks >> 1;
+
+ if (DEBUG) fprintf(stderr, "fiber_pool_stack_free: %p+%"PRIuSIZE" [base=%p, size=%"PRIuSIZE"] advice=%d\n", base, size, stack->base, stack->size, advice);
+
+ // The pages being used by the stack can be returned back to the system.
+ // That doesn't change the page mapping, but it does allow the system to
+ // reclaim the physical memory.
+ // Since we no longer care about the data itself, we don't need to page
+ // out to disk, since that is costly. Not all systems support that, so
+ // we try our best to select the most efficient implementation.
+ // In addition, it's actually slightly desirable to not do anything here,
+ // but that results in higher memory usage.
+
+#ifdef __wasi__
+ // WebAssembly doesn't support madvise, so we just don't do anything.
+#elif VM_CHECK_MODE > 0 && defined(MADV_DONTNEED)
+ if (!advice) advice = MADV_DONTNEED;
+ // This immediately discards the pages and the memory is reset to zero.
+ madvise(base, size, advice);
+#elif defined(MADV_FREE_REUSABLE)
+ if (!advice) advice = MADV_FREE_REUSABLE;
+ // Darwin / macOS / iOS.
+ // Acknowledge the kernel down to the task info api we make this
+ // page reusable for future use.
+ // As for MADV_FREE_REUSABLE below we ensure in the rare occasions the task was not
+ // completed at the time of the call to re-iterate.
+ while (madvise(base, size, advice) == -1 && errno == EAGAIN);
+#elif defined(MADV_FREE)
+ if (!advice) advice = MADV_FREE;
+ // Recent Linux.
+ madvise(base, size, advice);
+#elif defined(MADV_DONTNEED)
+ if (!advice) advice = MADV_DONTNEED;
+ // Old Linux.
+ madvise(base, size, advice);
+#elif defined(POSIX_MADV_DONTNEED)
+ if (!advice) advice = POSIX_MADV_DONTNEED;
+ // Solaris?
+ posix_madvise(base, size, advice);
+#elif defined(_WIN32)
+ VirtualAlloc(base, size, MEM_RESET, PAGE_READWRITE);
+ // Not available in all versions of Windows.
+ //DiscardVirtualMemory(base, size);
+#endif
+
+#if defined(COROUTINE_SANITIZE_ADDRESS)
+ __asan_poison_memory_region(fiber_pool_stack_poison_base(stack), fiber_pool_stack_poison_size(stack));
+#endif
+}
+
+// Release and return a stack to the vacancy list.
+static void
+fiber_pool_stack_release(struct fiber_pool_stack * stack)
+{
+ struct fiber_pool * pool = stack->pool;
+ struct fiber_pool_vacancy * vacancy = fiber_pool_vacancy_pointer(stack->base, stack->size);
+
+ if (DEBUG) fprintf(stderr, "fiber_pool_stack_release: %p used=%"PRIuSIZE"\n", stack->base, stack->pool->used);
+
+ // Copy the stack details into the vacancy area:
+ vacancy->stack = *stack;
+ // After this point, be careful about updating/using state in stack, since it's copied to the vacancy area.
+
+ // Reset the stack pointers and reserve space for the vacancy data:
+ fiber_pool_vacancy_reset(vacancy);
+
+ // Push the vacancy into the vancancies list:
+ pool->vacancies = fiber_pool_vacancy_push(vacancy, pool->vacancies);
+ pool->used -= 1;
+
+#ifdef FIBER_POOL_ALLOCATION_FREE
+ struct fiber_pool_allocation * allocation = stack->allocation;
+
+ allocation->used -= 1;
+
+ // Release address space and/or dirty memory:
+ if (allocation->used == 0) {
+ fiber_pool_allocation_free(allocation);
+ }
+ else if (stack->pool->free_stacks) {
+ fiber_pool_stack_free(&vacancy->stack);
+ }
+#else
+ // This is entirely optional, but clears the dirty flag from the stack
+ // memory, so it won't get swapped to disk when there is memory pressure:
+ if (stack->pool->free_stacks) {
+ fiber_pool_stack_free(&vacancy->stack);
+ }
+#endif
+}
+
+static inline void
+ec_switch(rb_thread_t *th, rb_fiber_t *fiber)
+{
+ rb_execution_context_t *ec = &fiber->cont.saved_ec;
+#ifdef RUBY_ASAN_ENABLED
+ ec->machine.asan_fake_stack_handle = asan_get_thread_fake_stack_handle();
+#endif
+ rb_ractor_set_current_ec(th->ractor, th->ec = ec);
+ // ruby_current_execution_context_ptr = th->ec = ec;
+
+ /*
+ * timer-thread may set trap interrupt on previous th->ec at any time;
+ * ensure we do not delay (or lose) the trap interrupt handling.
*/
- void *ss_sp;
- size_t ss_size;
+ if (th->vm->ractor.main_thread == th &&
+ rb_signal_buff_size() > 0) {
+ RUBY_VM_SET_TRAP_INTERRUPT(ec);
+ }
+
+ VM_ASSERT(ec->fiber_ptr->cont.self == 0 || ec->vm_stack != NULL);
+}
+
+static inline void
+fiber_restore_thread(rb_thread_t *th, rb_fiber_t *fiber)
+{
+ ec_switch(th, fiber);
+ VM_ASSERT(th->ec->fiber_ptr == fiber);
+}
+
+#ifndef COROUTINE_DECL
+# define COROUTINE_DECL COROUTINE
#endif
+NORETURN(static COROUTINE_DECL fiber_entry(struct coroutine_context * from, struct coroutine_context * to));
+static COROUTINE
+fiber_entry(struct coroutine_context * from, struct coroutine_context * to)
+{
+ rb_fiber_t *fiber = to->argument;
+
+#if defined(COROUTINE_SANITIZE_ADDRESS)
+ // Address sanitizer will copy the previous stack base and stack size into
+ // the "from" fiber. `coroutine_initialize_main` doesn't generally know the
+ // stack bounds (base + size). Therefore, the main fiber `stack_base` and
+ // `stack_size` will be NULL/0. It's specifically important in that case to
+ // get the (base+size) of the previous fiber and save it, so that later when
+ // we return to the main coroutine, we don't supply (NULL, 0) to
+ // __sanitizer_start_switch_fiber which royally messes up the internal state
+ // of ASAN and causes (sometimes) the following message:
+ // "WARNING: ASan is ignoring requested __asan_handle_no_return"
+ __sanitizer_finish_switch_fiber(to->fake_stack, (const void**)&from->stack_base, &from->stack_size);
#endif
-};
-static const rb_data_type_t cont_data_type, fiber_data_type;
-static VALUE rb_cContinuation;
-static VALUE rb_cFiber;
-static VALUE rb_eFiberError;
+ rb_thread_t *thread = fiber->cont.saved_ec.thread_ptr;
+
+#ifdef COROUTINE_PTHREAD_CONTEXT
+ ruby_thread_set_native(thread);
+#endif
+
+ fiber_restore_thread(thread, fiber);
-#define GetContPtr(obj, ptr) \
- TypedData_Get_Struct((obj), rb_context_t, &cont_data_type, (ptr))
+ rb_fiber_start(fiber);
-#define GetFiberPtr(obj, ptr) do {\
- TypedData_Get_Struct((obj), rb_fiber_t, &fiber_data_type, (ptr)); \
- if (!(ptr)) rb_raise(rb_eFiberError, "uninitialized fiber"); \
-} while (0)
+#ifndef COROUTINE_PTHREAD_CONTEXT
+ VM_UNREACHABLE(fiber_entry);
+#endif
+}
+
+// Initialize a fiber's coroutine's machine stack and vm stack.
+static VALUE *
+fiber_initialize_coroutine(rb_fiber_t *fiber, size_t * vm_stack_size)
+{
+ struct fiber_pool * fiber_pool = fiber->stack.pool;
+ rb_execution_context_t *sec = &fiber->cont.saved_ec;
+ void * vm_stack = NULL;
+
+ VM_ASSERT(fiber_pool != NULL);
+
+ fiber->stack = fiber_pool_stack_acquire(fiber_pool);
+ vm_stack = fiber_pool_stack_alloca(&fiber->stack, fiber_pool->vm_stack_size);
+ *vm_stack_size = fiber_pool->vm_stack_size;
+
+ coroutine_initialize(&fiber->context, fiber_entry, fiber_pool_stack_base(&fiber->stack), fiber->stack.available);
+
+ // The stack for this execution context is the one we allocated:
+ sec->machine.stack_start = fiber->stack.current;
+ sec->machine.stack_maxsize = fiber->stack.available;
+
+ fiber->context.argument = (void*)fiber;
-NOINLINE(static VALUE cont_capture(volatile int *stat));
+ return vm_stack;
+}
+
+// Release the stack from the fiber, it's execution context, and return it to
+// the fiber pool.
+static void
+fiber_stack_release(rb_fiber_t * fiber)
+{
+ rb_execution_context_t *ec = &fiber->cont.saved_ec;
+
+ if (DEBUG) fprintf(stderr, "fiber_stack_release: %p, stack.base=%p\n", (void*)fiber, fiber->stack.base);
+
+ // Return the stack back to the fiber pool if it wasn't already:
+ if (fiber->stack.base) {
+ fiber_pool_stack_release(&fiber->stack);
+ fiber->stack.base = NULL;
+ }
+
+ // The stack is no longer associated with this execution context:
+ rb_ec_clear_vm_stack(ec);
+}
+
+static void
+fiber_stack_release_locked(rb_fiber_t *fiber)
+{
+ if (!ruby_vm_during_cleanup) {
+ // We can't try to acquire the VM lock here because MMTK calls free in its own native thread which has no ec.
+ // This assertion will fail on MMTK but we currently don't have CI for debug releases of MMTK, so we can assert for now.
+ ASSERT_vm_locking_with_barrier();
+ }
+ fiber_stack_release(fiber);
+}
+
+static const char *
+fiber_status_name(enum fiber_status s)
+{
+ switch (s) {
+ case FIBER_CREATED: return "created";
+ case FIBER_RESUMED: return "resumed";
+ case FIBER_SUSPENDED: return "suspended";
+ case FIBER_TERMINATED: return "terminated";
+ }
+ VM_UNREACHABLE(fiber_status_name);
+ return NULL;
+}
+
+static void
+fiber_verify(const rb_fiber_t *fiber)
+{
+#if VM_CHECK_MODE > 0
+ VM_ASSERT(fiber->cont.saved_ec.fiber_ptr == fiber);
+
+ switch (fiber->status) {
+ case FIBER_RESUMED:
+ if (fiber->cont.saved_ec.thread_ptr->self == 0) {
+ VM_ASSERT(fiber->cont.saved_ec.vm_stack != NULL);
+ }
+ break;
+ case FIBER_SUSPENDED:
+ VM_ASSERT(fiber->cont.saved_ec.vm_stack != NULL);
+ break;
+ case FIBER_CREATED:
+ case FIBER_TERMINATED:
+ /* TODO */
+ break;
+ default:
+ VM_UNREACHABLE(fiber_verify);
+ }
+#endif
+}
+
+inline static void
+fiber_status_set(rb_fiber_t *fiber, enum fiber_status s)
+{
+ // if (DEBUG) fprintf(stderr, "fiber: %p, status: %s -> %s\n", (void *)fiber, fiber_status_name(fiber->status), fiber_status_name(s));
+ VM_ASSERT(!FIBER_TERMINATED_P(fiber));
+ VM_ASSERT(fiber->status != s);
+ fiber_verify(fiber);
+ fiber->status = s;
+}
+
+static rb_context_t *
+cont_ptr(VALUE obj)
+{
+ rb_context_t *cont;
+
+ TypedData_Get_Struct(obj, rb_context_t, &rb_cont_data_type, cont);
+
+ return cont;
+}
+
+static rb_fiber_t *
+fiber_ptr(VALUE obj)
+{
+ rb_fiber_t *fiber;
+
+ TypedData_Get_Struct(obj, rb_fiber_t, &rb_fiber_data_type, fiber);
+ if (!fiber) rb_raise(rb_eFiberError, "uninitialized fiber");
+
+ return fiber;
+}
+
+NOINLINE(static VALUE cont_capture(volatile int *volatile stat));
#define THREAD_MUST_BE_RUNNING(th) do { \
- if (!(th)->tag) rb_raise(rb_eThreadError, "not running thread"); \
+ if (!(th)->ec->tag) rb_raise(rb_eThreadError, "not running thread"); \
} while (0)
+rb_thread_t*
+rb_fiber_threadptr(const rb_fiber_t *fiber)
+{
+ return fiber->cont.saved_ec.thread_ptr;
+}
+
+static VALUE
+cont_thread_value(const rb_context_t *cont)
+{
+ return cont->saved_ec.thread_ptr->self;
+}
+
+static void
+cont_compact(void *ptr)
+{
+ rb_context_t *cont = ptr;
+
+ if (cont->self) {
+ cont->self = rb_gc_location(cont->self);
+ }
+ cont->value = rb_gc_location(cont->value);
+ rb_execution_context_update(&cont->saved_ec);
+}
+
static void
cont_mark(void *ptr)
{
+ rb_context_t *cont = ptr;
+
RUBY_MARK_ENTER("cont");
- if (ptr) {
- rb_context_t *cont = ptr;
- rb_gc_mark(cont->value);
- rb_thread_mark(&cont->saved_thread);
- rb_gc_mark(cont->saved_thread.self);
+ if (cont->self) {
+ rb_gc_mark_movable(cont->self);
+ }
+ rb_gc_mark_movable(cont->value);
+
+ rb_execution_context_mark(&cont->saved_ec);
+ rb_gc_mark(cont_thread_value(cont));
- if (cont->vm_stack) {
+ if (cont->saved_vm_stack.ptr) {
#ifdef CAPTURE_JUST_VALID_VM_STACK
- rb_gc_mark_locations(cont->vm_stack,
- cont->vm_stack + cont->vm_stack_slen + cont->vm_stack_clen);
+ rb_gc_mark_locations(cont->saved_vm_stack.ptr,
+ cont->saved_vm_stack.ptr + cont->saved_vm_stack.slen + cont->saved_vm_stack.clen);
#else
- rb_gc_mark_locations(cont->vm_stack,
- cont->vm_stack, cont->saved_thread.stack_size);
+ rb_gc_mark_locations(cont->saved_vm_stack.ptr,
+ cont->saved_vm_stack.ptr, cont->saved_ec.stack_size);
#endif
- }
+ }
- if (cont->machine.stack) {
- if (cont->type == CONTINUATION_CONTEXT) {
- /* cont */
- rb_gc_mark_locations(cont->machine.stack,
- cont->machine.stack + cont->machine.stack_size);
- }
- else {
- /* fiber */
- rb_thread_t *th;
- rb_fiber_t *fib = (rb_fiber_t*)cont;
- GetThreadPtr(cont->saved_thread.self, th);
- if ((th->fiber != fib) && fib->status == RUNNING) {
- rb_gc_mark_locations(cont->machine.stack,
- cont->machine.stack + cont->machine.stack_size);
- }
- }
- }
-#ifdef __ia64
- if (cont->machine.register_stack) {
- rb_gc_mark_locations(cont->machine.register_stack,
- cont->machine.register_stack + cont->machine.register_stack_size);
- }
-#endif
+ if (cont->machine.stack) {
+ if (cont->type == CONTINUATION_CONTEXT) {
+ /* cont */
+ rb_gc_mark_locations(cont->machine.stack,
+ cont->machine.stack + cont->machine.stack_size);
+ }
+ else {
+ /* fiber machine context is marked as part of rb_execution_context_mark, no need to
+ * do anything here. */
+ }
}
+
RUBY_MARK_LEAVE("cont");
}
+#if 0
+static int
+fiber_is_root_p(const rb_fiber_t *fiber)
+{
+ return fiber == fiber->cont.saved_ec.thread_ptr->root_fiber;
+}
+#endif
+
+static void jit_cont_free(struct rb_jit_cont *cont);
+
static void
cont_free(void *ptr)
{
+ rb_context_t *cont = ptr;
+
RUBY_FREE_ENTER("cont");
- if (ptr) {
- rb_context_t *cont = ptr;
- RUBY_FREE_UNLESS_NULL(cont->saved_thread.stack);
-#if FIBER_USE_NATIVE
- if (cont->type == CONTINUATION_CONTEXT) {
- /* cont */
- ruby_xfree(cont->ensure_array);
- RUBY_FREE_UNLESS_NULL(cont->machine.stack);
- }
- else {
- /* fiber */
- rb_fiber_t *fib = (rb_fiber_t*)cont;
- const rb_thread_t *const th = GET_THREAD();
-#ifdef _WIN32
- if (th && th->fiber != fib && cont->type != ROOT_FIBER_CONTEXT) {
- /* don't delete root fiber handle */
- if (fib->fib_handle) {
- DeleteFiber(fib->fib_handle);
- }
- }
-#else /* not WIN32 */
- if (th && th->fiber != fib) {
- if (fib->ss_sp) {
- if (cont->type == ROOT_FIBER_CONTEXT) {
- rb_bug("Illegal root fiber parameter");
- }
- munmap((void*)fib->ss_sp, fib->ss_size);
- }
- }
- else {
- /* It may reached here when finalize */
- /* TODO examine whether it is a bug */
- /* rb_bug("cont_free: release self"); */
- }
-#endif
- }
-#else /* not FIBER_USE_NATIVE */
- ruby_xfree(cont->ensure_array);
- RUBY_FREE_UNLESS_NULL(cont->machine.stack);
-#endif
-#ifdef __ia64
- RUBY_FREE_UNLESS_NULL(cont->machine.register_stack);
-#endif
- RUBY_FREE_UNLESS_NULL(cont->vm_stack);
- /* free rb_cont_t or rb_fiber_t */
- ruby_xfree(ptr);
+ if (cont->type == CONTINUATION_CONTEXT) {
+ ruby_xfree(cont->saved_ec.vm_stack);
+ RUBY_FREE_UNLESS_NULL(cont->machine.stack);
+ }
+ else {
+ rb_fiber_t *fiber = (rb_fiber_t*)cont;
+ coroutine_destroy(&fiber->context);
+ fiber_stack_release_locked(fiber);
}
+
+ RUBY_FREE_UNLESS_NULL(cont->saved_vm_stack.ptr);
+
+ VM_ASSERT(cont->jit_cont != NULL);
+ jit_cont_free(cont->jit_cont);
+ /* free rb_cont_t or rb_fiber_t */
+ ruby_xfree(ptr);
RUBY_FREE_LEAVE("cont");
}
@@ -282,85 +1113,103 @@ cont_memsize(const void *ptr)
size_t size = 0;
size = sizeof(*cont);
- if (cont->vm_stack) {
+ if (cont->saved_vm_stack.ptr) {
#ifdef CAPTURE_JUST_VALID_VM_STACK
- size_t n = (cont->vm_stack_slen + cont->vm_stack_clen);
+ size_t n = (cont->saved_vm_stack.slen + cont->saved_vm_stack.clen);
#else
- size_t n = cont->saved_thread.stack_size;
+ size_t n = cont->saved_ec.vm_stack_size;
#endif
- size += n * sizeof(*cont->vm_stack);
+ size += n * sizeof(*cont->saved_vm_stack.ptr);
}
if (cont->machine.stack) {
- size += cont->machine.stack_size * sizeof(*cont->machine.stack);
- }
-#ifdef __ia64
- if (cont->machine.register_stack) {
- size += cont->machine.register_stack_size * sizeof(*cont->machine.register_stack);
+ size += cont->machine.stack_size * sizeof(*cont->machine.stack);
}
-#endif
+
return size;
}
void
-rb_fiber_mark_self(rb_fiber_t *fib)
+rb_fiber_update_self(rb_fiber_t *fiber)
+{
+ if (fiber->cont.self) {
+ fiber->cont.self = rb_gc_location(fiber->cont.self);
+ }
+ else {
+ rb_execution_context_update(&fiber->cont.saved_ec);
+ }
+}
+
+void
+rb_fiber_mark_self(const rb_fiber_t *fiber)
{
- if (fib)
- rb_gc_mark(fib->cont.self);
+ rb_gc_mark_movable(fiber->cont.self);
+}
+
+static void
+fiber_compact(void *ptr)
+{
+ rb_fiber_t *fiber = ptr;
+ fiber->first_proc = rb_gc_location(fiber->first_proc);
+
+ if (fiber->prev) rb_fiber_update_self(fiber->prev);
+
+ cont_compact(&fiber->cont);
+ fiber_verify(fiber);
}
static void
fiber_mark(void *ptr)
{
+ rb_fiber_t *fiber = ptr;
RUBY_MARK_ENTER("cont");
- if (ptr) {
- rb_fiber_t *fib = ptr;
- rb_fiber_mark_self(fib->prev);
- cont_mark(&fib->cont);
- }
+ fiber_verify(fiber);
+ rb_gc_mark_movable(fiber->first_proc);
+ if (fiber->prev) rb_fiber_mark_self(fiber->prev);
+ cont_mark(&fiber->cont);
RUBY_MARK_LEAVE("cont");
}
static void
fiber_free(void *ptr)
{
+ rb_fiber_t *fiber = ptr;
RUBY_FREE_ENTER("fiber");
- if (ptr) {
- rb_fiber_t *fib = ptr;
- if (fib->cont.type != ROOT_FIBER_CONTEXT &&
- fib->cont.saved_thread.local_storage) {
- st_free_table(fib->cont.saved_thread.local_storage);
- }
- cont_free(&fib->cont);
+ if (DEBUG) fprintf(stderr, "fiber_free: %p[%p]\n", (void *)fiber, fiber->stack.base);
+
+ if (fiber->cont.saved_ec.local_storage) {
+ rb_id_table_free(fiber->cont.saved_ec.local_storage);
}
+
+ cont_free(&fiber->cont);
RUBY_FREE_LEAVE("fiber");
}
static size_t
fiber_memsize(const void *ptr)
{
- const rb_fiber_t *fib = ptr;
- size_t size = 0;
+ const rb_fiber_t *fiber = ptr;
+ size_t size = sizeof(*fiber);
+ const rb_execution_context_t *saved_ec = &fiber->cont.saved_ec;
+ const rb_thread_t *th = rb_ec_thread_ptr(saved_ec);
- size = sizeof(*fib);
- if (fib->cont.type != ROOT_FIBER_CONTEXT &&
- fib->cont.saved_thread.local_storage != NULL) {
- size += st_memsize(fib->cont.saved_thread.local_storage);
+ /*
+ * vm.c::thread_memsize already counts th->ec->local_storage
+ */
+ if (saved_ec->local_storage && fiber != th->root_fiber) {
+ size += rb_id_table_memsize(saved_ec->local_storage);
+ size += rb_obj_memsize_of(saved_ec->storage);
}
- size += cont_memsize(&fib->cont);
+
+ size += cont_memsize(&fiber->cont);
return size;
}
VALUE
rb_obj_is_fiber(VALUE obj)
{
- if (rb_typeddata_is_kind_of(obj, &fiber_data_type)) {
- return Qtrue;
- }
- else {
- return Qfalse;
- }
+ return RBOOL(rb_typeddata_is_kind_of(obj, &rb_fiber_data_type));
}
static void
@@ -368,83 +1217,183 @@ cont_save_machine_stack(rb_thread_t *th, rb_context_t *cont)
{
size_t size;
- SET_MACHINE_STACK_END(&th->machine.stack_end);
-#ifdef __ia64
- th->machine.register_stack_end = rb_ia64_bsp();
-#endif
+ SET_MACHINE_STACK_END(&th->ec->machine.stack_end);
- if (th->machine.stack_start > th->machine.stack_end) {
- size = cont->machine.stack_size = th->machine.stack_start - th->machine.stack_end;
- cont->machine.stack_src = th->machine.stack_end;
+ if (th->ec->machine.stack_start > th->ec->machine.stack_end) {
+ size = cont->machine.stack_size = th->ec->machine.stack_start - th->ec->machine.stack_end;
+ cont->machine.stack_src = th->ec->machine.stack_end;
}
else {
- size = cont->machine.stack_size = th->machine.stack_end - th->machine.stack_start;
- cont->machine.stack_src = th->machine.stack_start;
+ size = cont->machine.stack_size = th->ec->machine.stack_end - th->ec->machine.stack_start;
+ cont->machine.stack_src = th->ec->machine.stack_start;
}
if (cont->machine.stack) {
- REALLOC_N(cont->machine.stack, VALUE, size);
+ REALLOC_N(cont->machine.stack, VALUE, size);
}
else {
- cont->machine.stack = ALLOC_N(VALUE, size);
+ cont->machine.stack = ALLOC_N(VALUE, size);
}
FLUSH_REGISTER_WINDOWS;
+ asan_unpoison_memory_region(cont->machine.stack_src, size, false);
MEMCPY(cont->machine.stack, cont->machine.stack_src, VALUE, size);
+}
-#ifdef __ia64
- rb_ia64_flushrs();
- size = cont->machine.register_stack_size = th->machine.register_stack_end - th->machine.register_stack_start;
- cont->machine.register_stack_src = th->machine.register_stack_start;
- if (cont->machine.register_stack) {
- REALLOC_N(cont->machine.register_stack, VALUE, size);
- }
- else {
- cont->machine.register_stack = ALLOC_N(VALUE, size);
- }
+static void
+cont_handle_weak_references(void *ptr)
+{
+ rb_context_t *cont = ptr;
- MEMCPY(cont->machine.register_stack, cont->machine.register_stack_src, VALUE, size);
-#endif
+ if (!cont) return;
+
+ if (!rb_gc_handle_weak_references_alive_p(cont->saved_ec.gen_fields_cache.obj) ||
+ !rb_gc_handle_weak_references_alive_p(cont->saved_ec.gen_fields_cache.fields_obj)) {
+ cont->saved_ec.gen_fields_cache.obj = Qundef;
+ cont->saved_ec.gen_fields_cache.fields_obj = Qundef;
+ }
}
-static const rb_data_type_t cont_data_type = {
+static const rb_data_type_t rb_cont_data_type = {
"continuation",
- {cont_mark, cont_free, cont_memsize,},
+ {cont_mark, cont_free, cont_memsize, cont_compact, cont_handle_weak_references},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
};
static inline void
cont_save_thread(rb_context_t *cont, rb_thread_t *th)
{
- rb_thread_t *sth = &cont->saved_thread;
+ rb_execution_context_t *sec = &cont->saved_ec;
+
+ VM_ASSERT(th->status == THREAD_RUNNABLE);
/* save thread context */
- sth->stack = th->stack;
- sth->stack_size = th->stack_size;
- sth->local_storage = th->local_storage;
- sth->cfp = th->cfp;
- sth->safe_level = th->safe_level;
- sth->raised_flag = th->raised_flag;
- sth->state = th->state;
- sth->status = th->status;
- sth->tag = th->tag;
- sth->protect_tag = th->protect_tag;
- sth->errinfo = th->errinfo;
- sth->first_proc = th->first_proc;
- sth->root_lep = th->root_lep;
- sth->root_svar = th->root_svar;
- sth->ensure_list = th->ensure_list;
-
- sth->trace_arg = th->trace_arg;
-
- /* saved_thread->machine.stack_(start|end) should be NULL */
+ *sec = *th->ec;
+
+ /* saved_ec->machine.stack_end should be NULL */
/* because it may happen GC afterward */
- sth->machine.stack_start = 0;
- sth->machine.stack_end = 0;
-#ifdef __ia64
- sth->machine.register_stack_start = 0;
- sth->machine.register_stack_end = 0;
+ sec->machine.stack_end = NULL;
+}
+
+static rb_nativethread_lock_t jit_cont_lock;
+
+// Register a new continuation with execution context `ec`. Return JIT info about
+// the continuation.
+static struct rb_jit_cont *
+jit_cont_new(rb_execution_context_t *ec)
+{
+ struct rb_jit_cont *cont;
+
+ // We need to use calloc instead of something like ZALLOC to avoid triggering GC here.
+ // When this function is called from rb_thread_alloc through rb_threadptr_root_fiber_setup,
+ // the thread is still being prepared and marking it causes SEGV.
+ cont = calloc(1, sizeof(struct rb_jit_cont));
+ if (cont == NULL)
+ rb_memerror();
+ cont->ec = ec;
+
+ rb_native_mutex_lock(&jit_cont_lock);
+ if (first_jit_cont == NULL) {
+ cont->next = cont->prev = NULL;
+ }
+ else {
+ cont->prev = NULL;
+ cont->next = first_jit_cont;
+ first_jit_cont->prev = cont;
+ }
+ first_jit_cont = cont;
+ rb_native_mutex_unlock(&jit_cont_lock);
+
+ return cont;
+}
+
+// Unregister continuation `cont`.
+static void
+jit_cont_free(struct rb_jit_cont *cont)
+{
+ if (!cont) return;
+
+ rb_native_mutex_lock(&jit_cont_lock);
+ if (cont == first_jit_cont) {
+ first_jit_cont = cont->next;
+ if (first_jit_cont != NULL)
+ first_jit_cont->prev = NULL;
+ }
+ else {
+ cont->prev->next = cont->next;
+ if (cont->next != NULL)
+ cont->next->prev = cont->prev;
+ }
+ rb_native_mutex_unlock(&jit_cont_lock);
+
+ free(cont);
+}
+
+// Call a given callback against all on-stack ISEQs.
+void
+rb_jit_cont_each_iseq(rb_iseq_callback callback, void *data)
+{
+ struct rb_jit_cont *cont;
+ for (cont = first_jit_cont; cont != NULL; cont = cont->next) {
+ if (cont->ec->vm_stack == NULL)
+ continue;
+
+ const rb_control_frame_t *cfp = cont->ec->cfp;
+ while (!RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(cont->ec, cfp)) {
+ if (cfp->pc && cfp->iseq && imemo_type((VALUE)cfp->iseq) == imemo_iseq) {
+ callback(cfp->iseq, data);
+ }
+ cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp);
+ }
+ }
+}
+
+#if USE_YJIT
+// Update the jit_return of all CFPs to leave_exit unless it's leave_exception or not set.
+// This prevents jit_exec_exception from jumping to the caller after invalidation.
+void
+rb_yjit_cancel_jit_return(void *leave_exit, void *leave_exception)
+{
+ struct rb_jit_cont *cont;
+ for (cont = first_jit_cont; cont != NULL; cont = cont->next) {
+ if (cont->ec->vm_stack == NULL)
+ continue;
+
+ const rb_control_frame_t *cfp = cont->ec->cfp;
+ while (!RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(cont->ec, cfp)) {
+ if (cfp->jit_return && cfp->jit_return != leave_exception) {
+ ((rb_control_frame_t *)cfp)->jit_return = leave_exit;
+ }
+ cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp);
+ }
+ }
+}
#endif
+
+// Finish working with jit_cont.
+void
+rb_jit_cont_finish(void)
+{
+ struct rb_jit_cont *cont, *next;
+ for (cont = first_jit_cont; cont != NULL; cont = next) {
+ next = cont->next;
+ free(cont); // Don't use xfree because it's allocated by calloc.
+ }
+ rb_native_mutex_destroy(&jit_cont_lock);
+}
+
+static void
+cont_init_jit_cont(rb_context_t *cont)
+{
+ VM_ASSERT(cont->jit_cont == NULL);
+ // We always allocate this since YJIT may be enabled later
+ cont->jit_cont = jit_cont_new(&(cont->saved_ec));
+}
+
+struct rb_execution_context_struct *
+rb_fiberptr_get_ec(struct rb_fiber_struct *fiber)
+{
+ return &fiber->cont.saved_ec;
}
static void
@@ -452,12 +1401,11 @@ cont_init(rb_context_t *cont, rb_thread_t *th)
{
/* save thread context */
cont_save_thread(cont, th);
- cont->saved_thread.self = th->self;
- cont->saved_thread.machine.stack_maxsize = th->machine.stack_maxsize;
- cont->saved_thread.fiber = th->fiber;
- cont->saved_thread.local_storage = 0;
- cont->saved_thread.local_storage_recursive_hash = Qnil;
- cont->saved_thread.local_storage_recursive_hash_for_trace = Qnil;
+ cont->saved_ec.thread_ptr = th;
+ cont->saved_ec.local_storage = NULL;
+ cont->saved_ec.local_storage_recursive_hash = Qnil;
+ cont->saved_ec.local_storage_recursive_hash_for_trace = Qnil;
+ cont_init_jit_cont(cont);
}
static rb_context_t *
@@ -468,280 +1416,257 @@ cont_new(VALUE klass)
rb_thread_t *th = GET_THREAD();
THREAD_MUST_BE_RUNNING(th);
- contval = TypedData_Make_Struct(klass, rb_context_t, &cont_data_type, cont);
+ contval = TypedData_Make_Struct(klass, rb_context_t, &rb_cont_data_type, cont);
+ rb_gc_declare_weak_references(contval);
cont->self = contval;
cont_init(cont, th);
return cont;
}
+VALUE
+rb_fiberptr_self(struct rb_fiber_struct *fiber)
+{
+ return fiber->cont.self;
+}
+
+unsigned int
+rb_fiberptr_blocking(struct rb_fiber_struct *fiber)
+{
+ return fiber->blocking;
+}
+
+// Initialize the jit_cont_lock
+void
+rb_jit_cont_init(void)
+{
+ rb_native_mutex_initialize(&jit_cont_lock);
+}
+
+#if 0
+void
+show_vm_stack(const rb_execution_context_t *ec)
+{
+ VALUE *p = ec->vm_stack;
+ while (p < ec->cfp->sp) {
+ fprintf(stderr, "%3d ", (int)(p - ec->vm_stack));
+ rb_obj_info_dump(*p);
+ p++;
+ }
+}
+
+void
+show_vm_pcs(const rb_control_frame_t *cfp,
+ const rb_control_frame_t *end_of_cfp)
+{
+ int i=0;
+ while (cfp != end_of_cfp) {
+ int pc = 0;
+ if (cfp->iseq) {
+ pc = cfp->pc - ISEQ_BODY(cfp->iseq)->iseq_encoded;
+ }
+ fprintf(stderr, "%2d pc: %d\n", i++, pc);
+ cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp);
+ }
+}
+#endif
+
static VALUE
-cont_capture(volatile int *stat)
+cont_capture(volatile int *volatile stat)
{
- rb_context_t *cont;
+ rb_context_t *volatile cont;
rb_thread_t *th = GET_THREAD();
volatile VALUE contval;
+ const rb_execution_context_t *ec = th->ec;
THREAD_MUST_BE_RUNNING(th);
- rb_vm_stack_to_heap(th);
+ rb_vm_stack_to_heap(th->ec);
cont = cont_new(rb_cContinuation);
contval = cont->self;
#ifdef CAPTURE_JUST_VALID_VM_STACK
- cont->vm_stack_slen = th->cfp->sp - th->stack;
- cont->vm_stack_clen = th->stack + th->stack_size - (VALUE*)th->cfp;
- cont->vm_stack = ALLOC_N(VALUE, cont->vm_stack_slen + cont->vm_stack_clen);
- MEMCPY(cont->vm_stack, th->stack, VALUE, cont->vm_stack_slen);
- MEMCPY(cont->vm_stack + cont->vm_stack_slen, (VALUE*)th->cfp, VALUE, cont->vm_stack_clen);
+ cont->saved_vm_stack.slen = ec->cfp->sp - ec->vm_stack;
+ cont->saved_vm_stack.clen = ec->vm_stack + ec->vm_stack_size - (VALUE*)ec->cfp;
+ cont->saved_vm_stack.ptr = ALLOC_N(VALUE, cont->saved_vm_stack.slen + cont->saved_vm_stack.clen);
+ MEMCPY(cont->saved_vm_stack.ptr,
+ ec->vm_stack,
+ VALUE, cont->saved_vm_stack.slen);
+ MEMCPY(cont->saved_vm_stack.ptr + cont->saved_vm_stack.slen,
+ (VALUE*)ec->cfp,
+ VALUE,
+ cont->saved_vm_stack.clen);
#else
- cont->vm_stack = ALLOC_N(VALUE, th->stack_size);
- MEMCPY(cont->vm_stack, th->stack, VALUE, th->stack_size);
+ cont->saved_vm_stack.ptr = ALLOC_N(VALUE, ec->vm_stack_size);
+ MEMCPY(cont->saved_vm_stack.ptr, ec->vm_stack, VALUE, ec->vm_stack_size);
#endif
- cont->saved_thread.stack = 0;
-
+ // At this point, `cfp` is valid but `vm_stack` should be cleared:
+ rb_ec_set_vm_stack(&cont->saved_ec, NULL, 0);
+ VM_ASSERT(cont->saved_ec.cfp != NULL);
cont_save_machine_stack(th, cont);
- /* backup ensure_list to array for search in another context */
- {
- rb_ensure_list_t *p;
- int size = 0;
- rb_ensure_entry_t *entry;
- for (p=th->ensure_list; p; p=p->next)
- size++;
- entry = cont->ensure_array = ALLOC_N(rb_ensure_entry_t,size+1);
- for (p=th->ensure_list; p; p=p->next) {
- if (!p->entry.marker)
- p->entry.marker = rb_ary_tmp_new(0); /* dummy object */
- *entry++ = p->entry;
- }
- entry->marker = 0;
- }
-
if (ruby_setjmp(cont->jmpbuf)) {
- VALUE value;
+ VALUE value;
- VAR_INITIALIZED(cont);
- value = cont->value;
- if (cont->argc == -1) rb_exc_raise(value);
- cont->value = Qnil;
- *stat = 1;
- return value;
+ VAR_INITIALIZED(cont);
+ value = cont->value;
+ if (cont->argc == -1) rb_exc_raise(value);
+ cont->value = Qnil;
+ *stat = 1;
+ return value;
}
else {
- *stat = 0;
- return contval;
+ *stat = 0;
+ return contval;
}
}
static inline void
cont_restore_thread(rb_context_t *cont)
{
- rb_thread_t *th = GET_THREAD(), *sth = &cont->saved_thread;
+ rb_thread_t *th = GET_THREAD();
/* restore thread context */
if (cont->type == CONTINUATION_CONTEXT) {
- /* continuation */
- rb_fiber_t *fib;
+ /* continuation */
+ rb_execution_context_t *sec = &cont->saved_ec;
+ rb_fiber_t *fiber = NULL;
+
+ if (sec->fiber_ptr != NULL) {
+ fiber = sec->fiber_ptr;
+ }
+ else if (th->root_fiber) {
+ fiber = th->root_fiber;
+ }
+
+ if (fiber && th->ec != &fiber->cont.saved_ec) {
+ ec_switch(th, fiber);
+ }
+
+ if (th->ec->trace_arg != sec->trace_arg) {
+ rb_raise(rb_eRuntimeError, "can't call across trace_func");
+ }
+
+#if defined(__wasm__) && !defined(__EMSCRIPTEN__)
+ if (th->ec->tag != sec->tag) {
+ /* find the lowest common ancestor tag of the current EC and the saved EC */
+
+ struct rb_vm_tag *lowest_common_ancestor = NULL;
+ size_t num_tags = 0;
+ size_t num_saved_tags = 0;
+ for (struct rb_vm_tag *tag = th->ec->tag; tag != NULL; tag = tag->prev) {
+ ++num_tags;
+ }
+ for (struct rb_vm_tag *tag = sec->tag; tag != NULL; tag = tag->prev) {
+ ++num_saved_tags;
+ }
- th->fiber = sth->fiber;
- fib = th->fiber ? th->fiber : th->root_fiber;
+ size_t min_tags = num_tags <= num_saved_tags ? num_tags : num_saved_tags;
- if (fib) {
- th->stack_size = fib->cont.saved_thread.stack_size;
- th->stack = fib->cont.saved_thread.stack;
- }
-#ifdef CAPTURE_JUST_VALID_VM_STACK
- MEMCPY(th->stack, cont->vm_stack, VALUE, cont->vm_stack_slen);
- MEMCPY(th->stack + sth->stack_size - cont->vm_stack_clen,
- cont->vm_stack + cont->vm_stack_slen, VALUE, cont->vm_stack_clen);
-#else
- MEMCPY(th->stack, cont->vm_stack, VALUE, sth->stack_size);
-#endif
- }
- else {
- /* fiber */
- th->stack = sth->stack;
- th->stack_size = sth->stack_size;
- th->local_storage = sth->local_storage;
- th->local_storage_recursive_hash = sth->local_storage_recursive_hash;
- th->local_storage_recursive_hash_for_trace = sth->local_storage_recursive_hash_for_trace;
- th->fiber = (rb_fiber_t*)cont;
- }
-
- th->cfp = sth->cfp;
- th->safe_level = sth->safe_level;
- th->raised_flag = sth->raised_flag;
- th->state = sth->state;
- th->status = sth->status;
- th->tag = sth->tag;
- th->protect_tag = sth->protect_tag;
- th->errinfo = sth->errinfo;
- th->first_proc = sth->first_proc;
- th->root_lep = sth->root_lep;
- th->root_svar = sth->root_svar;
- th->ensure_list = sth->ensure_list;
-
-}
-
-#if FIBER_USE_NATIVE
-#ifdef _WIN32
-static void
-fiber_set_stack_location(void)
-{
- rb_thread_t *th = GET_THREAD();
- VALUE *ptr;
+ struct rb_vm_tag *tag = th->ec->tag;
+ while (num_tags > min_tags) {
+ tag = tag->prev;
+ --num_tags;
+ }
- SET_MACHINE_STACK_END(&ptr);
- th->machine.stack_start = (void*)(((VALUE)ptr & RB_PAGE_MASK) + STACK_UPPER((void *)&ptr, 0, RB_PAGE_SIZE));
-}
+ struct rb_vm_tag *saved_tag = sec->tag;
+ while (num_saved_tags > min_tags) {
+ saved_tag = saved_tag->prev;
+ --num_saved_tags;
+ }
-static VOID CALLBACK
-fiber_entry(void *arg)
-{
- fiber_set_stack_location();
- rb_fiber_start();
-}
-#else /* _WIN32 */
+ while (min_tags > 0) {
+ if (tag == saved_tag) {
+ lowest_common_ancestor = tag;
+ break;
+ }
+ tag = tag->prev;
+ saved_tag = saved_tag->prev;
+ --min_tags;
+ }
-/*
- * FreeBSD require a first (i.e. addr) argument of mmap(2) is not NULL
- * if MAP_STACK is passed.
- * http://www.FreeBSD.org/cgi/query-pr.cgi?pr=158755
- */
-#if defined(MAP_STACK) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__)
-#define FIBER_STACK_FLAGS (MAP_PRIVATE | MAP_ANON | MAP_STACK)
+ /* free all the jump buffers between the current EC's tag and the lowest common ancestor tag */
+ for (struct rb_vm_tag *tag = th->ec->tag; tag != lowest_common_ancestor; tag = tag->prev) {
+ rb_vm_tag_jmpbuf_deinit(&tag->buf);
+ }
+ }
+#endif
+
+ /* copy vm stack */
+#ifdef CAPTURE_JUST_VALID_VM_STACK
+ MEMCPY(th->ec->vm_stack,
+ cont->saved_vm_stack.ptr,
+ VALUE, cont->saved_vm_stack.slen);
+ MEMCPY(th->ec->vm_stack + th->ec->vm_stack_size - cont->saved_vm_stack.clen,
+ cont->saved_vm_stack.ptr + cont->saved_vm_stack.slen,
+ VALUE, cont->saved_vm_stack.clen);
#else
-#define FIBER_STACK_FLAGS (MAP_PRIVATE | MAP_ANON)
+ MEMCPY(th->ec->vm_stack, cont->saved_vm_stack.ptr, VALUE, sec->vm_stack_size);
#endif
+ /* other members of ec */
-static char*
-fiber_machine_stack_alloc(size_t size)
-{
- char *ptr;
+ th->ec->cfp = sec->cfp;
+ th->ec->raised_flag = sec->raised_flag;
+ th->ec->tag = sec->tag;
+ th->ec->root_lep = sec->root_lep;
+ th->ec->root_svar = sec->root_svar;
+ th->ec->errinfo = sec->errinfo;
- if (machine_stack_cache_index > 0) {
- if (machine_stack_cache[machine_stack_cache_index - 1].size == (size / sizeof(VALUE))) {
- ptr = machine_stack_cache[machine_stack_cache_index - 1].ptr;
- machine_stack_cache_index--;
- machine_stack_cache[machine_stack_cache_index].ptr = NULL;
- machine_stack_cache[machine_stack_cache_index].size = 0;
- }
- else{
- /* TODO handle multiple machine stack size */
- rb_bug("machine_stack_cache size is not canonicalized");
- }
+ VM_ASSERT(th->ec->vm_stack != NULL);
}
else {
- void *page;
- STACK_GROW_DIR_DETECTION;
-
- errno = 0;
- ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, FIBER_STACK_FLAGS, -1, 0);
- if (ptr == MAP_FAILED) {
- rb_raise(rb_eFiberError, "can't alloc machine stack to fiber: %s", strerror(errno));
- }
-
- /* guard page setup */
- page = ptr + STACK_DIR_UPPER(size - RB_PAGE_SIZE, 0);
- if (mprotect(page, RB_PAGE_SIZE, PROT_NONE) < 0) {
- rb_raise(rb_eFiberError, "mprotect failed");
- }
+ /* fiber */
+ fiber_restore_thread(th, (rb_fiber_t*)cont);
}
-
- return ptr;
}
-#endif
+
+NOINLINE(static void fiber_setcontext(rb_fiber_t *new_fiber, rb_fiber_t *old_fiber));
static void
-fiber_initialize_machine_stack_context(rb_fiber_t *fib, size_t size)
+fiber_setcontext(rb_fiber_t *new_fiber, rb_fiber_t *old_fiber)
{
- rb_thread_t *sth = &fib->cont.saved_thread;
+ rb_thread_t *th = GET_THREAD();
-#ifdef _WIN32
-# if defined(_MSC_VER) && _MSC_VER <= 0x1200
-# define CreateFiberEx(cs, stacksize, flags, entry, param) \
- CreateFiber((stacksize), (entry), (param))
-# endif
- fib->fib_handle = CreateFiberEx(size - 1, size, 0, fiber_entry, NULL);
- if (!fib->fib_handle) {
- /* try to release unnecessary fibers & retry to create */
- rb_gc();
- fib->fib_handle = CreateFiberEx(size - 1, size, 0, fiber_entry, NULL);
- if (!fib->fib_handle) {
- rb_raise(rb_eFiberError, "can't create fiber");
- }
- }
- sth->machine.stack_maxsize = size;
-#else /* not WIN32 */
- ucontext_t *context = &fib->context;
- char *ptr;
- STACK_GROW_DIR_DETECTION;
+ /* save old_fiber's machine stack - to ensure efficient garbage collection */
+ if (!FIBER_TERMINATED_P(old_fiber)) {
+ STACK_GROW_DIR_DETECTION;
+ SET_MACHINE_STACK_END(&th->ec->machine.stack_end);
+ if (STACK_DIR_UPPER(0, 1)) {
+ old_fiber->cont.machine.stack_size = th->ec->machine.stack_start - th->ec->machine.stack_end;
+ old_fiber->cont.machine.stack = th->ec->machine.stack_end;
+ }
+ else {
+ old_fiber->cont.machine.stack_size = th->ec->machine.stack_end - th->ec->machine.stack_start;
+ old_fiber->cont.machine.stack = th->ec->machine.stack_start;
+ }
+ }
- getcontext(context);
- ptr = fiber_machine_stack_alloc(size);
- context->uc_link = NULL;
- context->uc_stack.ss_sp = ptr;
- context->uc_stack.ss_size = size;
- fib->ss_sp = ptr;
- fib->ss_size = size;
- makecontext(context, rb_fiber_start, 0);
- sth->machine.stack_start = (VALUE*)(ptr + STACK_DIR_UPPER(0, size));
- sth->machine.stack_maxsize = size - RB_PAGE_SIZE;
-#endif
-#ifdef __ia64
- sth->machine.register_stack_maxsize = sth->machine.stack_maxsize;
+ /* these values are used in rb_gc_mark_machine_context to mark the fiber's stack. */
+ old_fiber->cont.saved_ec.machine.stack_start = th->ec->machine.stack_start;
+ old_fiber->cont.saved_ec.machine.stack_end = FIBER_TERMINATED_P(old_fiber) ? NULL : th->ec->machine.stack_end;
+
+
+ // if (DEBUG) fprintf(stderr, "fiber_setcontext: %p[%p] -> %p[%p]\n", (void*)old_fiber, old_fiber->stack.base, (void*)new_fiber, new_fiber->stack.base);
+
+#if defined(COROUTINE_SANITIZE_ADDRESS)
+ __sanitizer_start_switch_fiber(FIBER_TERMINATED_P(old_fiber) ? NULL : &old_fiber->context.fake_stack, new_fiber->context.stack_base, new_fiber->context.stack_size);
#endif
-}
-NOINLINE(static void fiber_setcontext(rb_fiber_t *newfib, rb_fiber_t *oldfib));
+ /* swap machine context */
+ struct coroutine_context * from = coroutine_transfer(&old_fiber->context, &new_fiber->context);
-static void
-fiber_setcontext(rb_fiber_t *newfib, rb_fiber_t *oldfib)
-{
- rb_thread_t *th = GET_THREAD(), *sth = &newfib->cont.saved_thread;
+#if defined(COROUTINE_SANITIZE_ADDRESS)
+ __sanitizer_finish_switch_fiber(old_fiber->context.fake_stack, NULL, NULL);
+#endif
- if (newfib->status != RUNNING) {
- fiber_initialize_machine_stack_context(newfib, th->vm->default_params.fiber_machine_stack_size);
+ if (from == NULL) {
+ rb_syserr_fail(errno, "coroutine_transfer");
}
/* restore thread context */
- cont_restore_thread(&newfib->cont);
- th->machine.stack_maxsize = sth->machine.stack_maxsize;
- if (sth->machine.stack_end && (newfib != oldfib)) {
- rb_bug("fiber_setcontext: sth->machine.stack_end has non zero value");
- }
-
- /* save oldfib's machine stack */
- if (oldfib->status != TERMINATED) {
- STACK_GROW_DIR_DETECTION;
- SET_MACHINE_STACK_END(&th->machine.stack_end);
- if (STACK_DIR_UPPER(0, 1)) {
- oldfib->cont.machine.stack_size = th->machine.stack_start - th->machine.stack_end;
- oldfib->cont.machine.stack = th->machine.stack_end;
- }
- else {
- oldfib->cont.machine.stack_size = th->machine.stack_end - th->machine.stack_start;
- oldfib->cont.machine.stack = th->machine.stack_start;
- }
- }
- /* exchange machine_stack_start between oldfib and newfib */
- oldfib->cont.saved_thread.machine.stack_start = th->machine.stack_start;
- th->machine.stack_start = sth->machine.stack_start;
- /* oldfib->machine.stack_end should be NULL */
- oldfib->cont.saved_thread.machine.stack_end = 0;
-#ifndef _WIN32
- if (!newfib->context.uc_stack.ss_sp && th->root_fiber != newfib) {
- rb_bug("non_root_fiber->context.uc_stac.ss_sp should not be NULL");
- }
-#endif
+ fiber_restore_thread(th, old_fiber);
- /* swap machine context */
-#ifdef _WIN32
- SwitchToFiber(newfib->fib_handle);
-#else
- swapcontext(&oldfib->context, &newfib->context);
-#endif
+ // It's possible to get here, and new_fiber is already freed.
+ // if (DEBUG) fprintf(stderr, "fiber_setcontext: %p[%p] <- %p[%p]\n", (void*)old_fiber, old_fiber->stack.base, (void*)new_fiber, new_fiber->stack.base);
}
-#endif
NOINLINE(NORETURN(static void cont_restore_1(rb_context_t *)));
@@ -751,68 +1676,26 @@ cont_restore_1(rb_context_t *cont)
cont_restore_thread(cont);
/* restore machine stack */
-#ifdef _M_AMD64
+#if (defined(_M_AMD64) && !defined(__MINGW64__)) || defined(_M_ARM64)
{
- /* workaround for x64 SEH */
- jmp_buf buf;
- setjmp(buf);
- ((_JUMP_BUFFER*)(&cont->jmpbuf))->Frame =
- ((_JUMP_BUFFER*)(&buf))->Frame;
+ /* workaround for x64 and arm64 SEH on Windows */
+ jmp_buf buf;
+ setjmp(buf);
+ _JUMP_BUFFER *bp = (void*)&cont->jmpbuf;
+ bp->Frame = ((_JUMP_BUFFER*)((void*)&buf))->Frame;
}
#endif
if (cont->machine.stack_src) {
- FLUSH_REGISTER_WINDOWS;
- MEMCPY(cont->machine.stack_src, cont->machine.stack,
- VALUE, cont->machine.stack_size);
+ FLUSH_REGISTER_WINDOWS;
+ MEMCPY(cont->machine.stack_src, cont->machine.stack,
+ VALUE, cont->machine.stack_size);
}
-#ifdef __ia64
- if (cont->machine.register_stack_src) {
- MEMCPY(cont->machine.register_stack_src, cont->machine.register_stack,
- VALUE, cont->machine.register_stack_size);
- }
-#endif
-
ruby_longjmp(cont->jmpbuf, 1);
}
NORETURN(NOINLINE(static void cont_restore_0(rb_context_t *, VALUE *)));
-#ifdef __ia64
-#define C(a) rse_##a##0, rse_##a##1, rse_##a##2, rse_##a##3, rse_##a##4
-#define E(a) rse_##a##0= rse_##a##1= rse_##a##2= rse_##a##3= rse_##a##4
-static volatile int C(a), C(b), C(c), C(d), C(e);
-static volatile int C(f), C(g), C(h), C(i), C(j);
-static volatile int C(k), C(l), C(m), C(n), C(o);
-static volatile int C(p), C(q), C(r), C(s), C(t);
-#if 0
-{/* the above lines make cc-mode.el confused so much */}
-#endif
-int rb_dummy_false = 0;
-NORETURN(NOINLINE(static void register_stack_extend(rb_context_t *, VALUE *, VALUE *)));
-static void
-register_stack_extend(rb_context_t *cont, VALUE *vp, VALUE *curr_bsp)
-{
- if (rb_dummy_false) {
- /* use registers as much as possible */
- E(a) = E(b) = E(c) = E(d) = E(e) =
- E(f) = E(g) = E(h) = E(i) = E(j) =
- E(k) = E(l) = E(m) = E(n) = E(o) =
- E(p) = E(q) = E(r) = E(s) = E(t) = 0;
- E(a) = E(b) = E(c) = E(d) = E(e) =
- E(f) = E(g) = E(h) = E(i) = E(j) =
- E(k) = E(l) = E(m) = E(n) = E(o) =
- E(p) = E(q) = E(r) = E(s) = E(t) = 0;
- }
- if (curr_bsp < cont->machine.register_stack_src+cont->machine.register_stack_size) {
- register_stack_extend(cont, vp, (VALUE*)rb_ia64_bsp());
- }
- cont_restore_0(cont, vp);
-}
-#undef C
-#undef E
-#endif
-
static void
cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
{
@@ -822,48 +1705,49 @@ cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
#else
#define STACK_PAD_SIZE 1024
#endif
- VALUE space[STACK_PAD_SIZE];
+ VALUE space[STACK_PAD_SIZE];
#if !STACK_GROW_DIRECTION
- if (addr_in_prev_frame > &space[0]) {
- /* Stack grows downward */
+ if (addr_in_prev_frame > &space[0]) {
+ /* Stack grows downward */
#endif
#if STACK_GROW_DIRECTION <= 0
- volatile VALUE *const end = cont->machine.stack_src;
- if (&space[0] > end) {
+ volatile VALUE *const end = cont->machine.stack_src;
+ if (&space[0] > end) {
# ifdef HAVE_ALLOCA
- volatile VALUE *sp = ALLOCA_N(VALUE, &space[0] - end);
- space[0] = *sp;
+ volatile VALUE *sp = ALLOCA_N(VALUE, &space[0] - end);
+ // We need to make sure that the stack pointer is moved,
+ // but some compilers may remove the allocation by optimization.
+ // We hope that the following read/write will prevent such an optimization.
+ *sp = Qfalse;
+ space[0] = *sp;
# else
- cont_restore_0(cont, &space[0]);
+ cont_restore_0(cont, &space[0]);
# endif
- }
+ }
#endif
#if !STACK_GROW_DIRECTION
- }
- else {
- /* Stack grows upward */
+ }
+ else {
+ /* Stack grows upward */
#endif
#if STACK_GROW_DIRECTION >= 0
- volatile VALUE *const end = cont->machine.stack_src + cont->machine.stack_size;
- if (&space[STACK_PAD_SIZE] < end) {
+ volatile VALUE *const end = cont->machine.stack_src + cont->machine.stack_size;
+ if (&space[STACK_PAD_SIZE] < end) {
# ifdef HAVE_ALLOCA
- volatile VALUE *sp = ALLOCA_N(VALUE, end - &space[STACK_PAD_SIZE]);
- space[0] = *sp;
+ volatile VALUE *sp = ALLOCA_N(VALUE, end - &space[STACK_PAD_SIZE]);
+ space[0] = *sp;
# else
- cont_restore_0(cont, &space[STACK_PAD_SIZE-1]);
+ cont_restore_0(cont, &space[STACK_PAD_SIZE-1]);
# endif
- }
+ }
#endif
#if !STACK_GROW_DIRECTION
- }
+ }
#endif
}
cont_restore_1(cont);
}
-#ifdef __ia64
-#define cont_restore_0(cont, vp) register_stack_extend((cont), (vp), (VALUE*)rb_ia64_bsp())
-#endif
/*
* Document-class: Continuation
@@ -871,7 +1755,7 @@ cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
* Continuation objects are generated by Kernel#callcc,
* after having +require+d <i>continuation</i>. They hold
* a return address and execution context, allowing a nonlocal return
- * to the end of the <code>callcc</code> block from anywhere within a
+ * to the end of the #callcc block from anywhere within a
* program. Continuations are somewhat analogous to a structured
* version of C's <code>setjmp/longjmp</code> (although they contain
* more state, so you might consider them closer to threads).
@@ -915,7 +1799,7 @@ cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
* require "continuation"
* callcc {|cont|
* for i in 0..4
- * print "\n#{i}: "
+ * print "#{i}: "
* for j in i*5...(i+1)*5
* cont.call() if j == 17
* printf "%3d", j
@@ -955,110 +1839,48 @@ rb_callcc(VALUE self)
volatile VALUE val = cont_capture(&called);
if (called) {
- return val;
+ return val;
}
else {
- return rb_yield(val);
+ return rb_yield(val);
}
}
+#ifdef RUBY_ASAN_ENABLED
+/* callcc can't possibly work with ASAN; see bug #20273. Also this function
+ * definition below avoids a "defined and not used" warning. */
+MAYBE_UNUSED(static void notusing_callcc(void)) { rb_callcc(Qnil); }
+# define rb_callcc rb_f_notimplement
+#endif
+
static VALUE
make_passing_arg(int argc, const VALUE *argv)
{
switch (argc) {
+ case -1:
+ return argv[0];
case 0:
- return Qnil;
+ return Qnil;
case 1:
- return argv[0];
+ return argv[0];
default:
- return rb_ary_new4(argc, argv);
- }
-}
-
-/* CAUTION!! : Currently, error in rollback_func is not supported */
-/* same as rb_protect if set rollback_func to NULL */
-void
-ruby_register_rollback_func_for_ensure(VALUE (*ensure_func)(ANYARGS), VALUE (*rollback_func)(ANYARGS))
-{
- st_table **table_p = &GET_VM()->ensure_rollback_table;
- if (UNLIKELY(*table_p == NULL)) {
- *table_p = st_init_numtable();
+ return rb_ary_new4(argc, argv);
}
- st_insert(*table_p, (st_data_t)ensure_func, (st_data_t)rollback_func);
-}
-
-static inline VALUE
-lookup_rollback_func(VALUE (*ensure_func)(ANYARGS))
-{
- st_table *table = GET_VM()->ensure_rollback_table;
- st_data_t val;
- if (table && st_lookup(table, (st_data_t)ensure_func, &val))
- return (VALUE) val;
- return Qundef;
}
+typedef VALUE e_proc(VALUE);
-static inline void
-rollback_ensure_stack(VALUE self,rb_ensure_list_t *current,rb_ensure_entry_t *target)
-{
- rb_ensure_list_t *p;
- rb_ensure_entry_t *entry;
- size_t i;
- size_t cur_size;
- size_t target_size;
- size_t base_point;
- VALUE (*func)(ANYARGS);
-
- cur_size = 0;
- for (p=current; p; p=p->next)
- cur_size++;
- target_size = 0;
- for (entry=target; entry->marker; entry++)
- target_size++;
-
- /* search common stack point */
- p = current;
- base_point = cur_size;
- while (base_point) {
- if (target_size >= base_point &&
- p->entry.marker == target[target_size - base_point].marker)
- break;
- base_point --;
- p = p->next;
- }
-
- /* rollback function check */
- for (i=0; i < target_size - base_point; i++) {
- if (!lookup_rollback_func(target[i].e_proc)) {
- rb_raise(rb_eRuntimeError, "continuation called from out of critical rb_ensure scope");
- }
- }
- /* pop ensure stack */
- while (cur_size > base_point) {
- /* escape from ensure block */
- (*current->entry.e_proc)(current->entry.data2);
- current = current->next;
- cur_size--;
- }
- /* push ensure stack */
- while (i--) {
- func = (VALUE (*)(ANYARGS)) lookup_rollback_func(target[i].e_proc);
- if ((VALUE)func != Qundef) {
- (*func)(target[i].data2);
- }
- }
-}
+NORETURN(static VALUE rb_cont_call(int argc, VALUE *argv, VALUE contval));
/*
* call-seq:
* cont.call(args, ...)
* cont[args, ...]
*
- * Invokes the continuation. The program continues from the end of the
- * <code>callcc</code> block. If no arguments are given, the original
- * <code>callcc</code> returns <code>nil</code>. If one argument is
- * given, <code>callcc</code> returns it. Otherwise, an array
- * containing <i>args</i> is returned.
+ * Invokes the continuation. The program continues from the end of
+ * the #callcc block. If no arguments are given, the original #callcc
+ * returns +nil+. If one argument is given, #callcc returns
+ * it. Otherwise, an array containing <i>args</i> is returned.
*
* callcc {|cont| cont.call } #=> nil
* callcc {|cont| cont.call 1 } #=> 1
@@ -1068,31 +1890,23 @@ rollback_ensure_stack(VALUE self,rb_ensure_list_t *current,rb_ensure_entry_t *ta
static VALUE
rb_cont_call(int argc, VALUE *argv, VALUE contval)
{
- rb_context_t *cont;
+ rb_context_t *cont = cont_ptr(contval);
rb_thread_t *th = GET_THREAD();
- GetContPtr(contval, cont);
- if (cont->saved_thread.self != th->self) {
- rb_raise(rb_eRuntimeError, "continuation called across threads");
- }
- if (cont->saved_thread.protect_tag != th->protect_tag) {
- rb_raise(rb_eRuntimeError, "continuation called across stack rewinding barrier");
+ if (cont_thread_value(cont) != th->self) {
+ rb_raise(rb_eRuntimeError, "continuation called across threads");
}
- if (cont->saved_thread.fiber) {
- if (th->fiber != cont->saved_thread.fiber) {
- rb_raise(rb_eRuntimeError, "continuation called across fiber");
- }
+ if (cont->saved_ec.fiber_ptr) {
+ if (th->ec->fiber_ptr != cont->saved_ec.fiber_ptr) {
+ rb_raise(rb_eRuntimeError, "continuation called across fiber");
+ }
}
- rollback_ensure_stack(contval, th->ensure_list, cont->ensure_array);
cont->argc = argc;
cont->value = make_passing_arg(argc, argv);
- /* restore `tracing' context. see [Feature #4347] */
- th->trace_arg = cont->saved_thread.trace_arg;
-
cont_restore_0(cont, &contval);
- return Qnil; /* unreachable */
+ UNREACHABLE_RETURN(Qnil);
}
/*********/
@@ -1109,14 +1923,15 @@ rb_cont_call(int argc, VALUE *argv, VALUE contval)
* the programmer and not the VM.
*
* As opposed to other stackless light weight concurrency models, each fiber
- * comes with a small 4KB stack. This enables the fiber to be paused from deeply
- * nested function calls within the fiber block.
+ * comes with a stack. This enables the fiber to be paused from deeply
+ * nested function calls within the fiber block. See the ruby(1)
+ * manpage to configure the size of the fiber stack(s).
*
* When a fiber is created it will not run automatically. Rather it must
- * be explicitly asked to run using the <code>Fiber#resume</code> method.
+ * be explicitly asked to run using the Fiber#resume method.
* The code running inside the fiber can give up control by calling
- * <code>Fiber.yield</code> in which case it yields control back to caller
- * (the caller of the <code>Fiber#resume</code>).
+ * Fiber.yield in which case it yields control back to caller (the
+ * caller of the Fiber#resume).
*
* Upon yielding or termination the Fiber returns the value of the last
* executed expression
@@ -1138,10 +1953,10 @@ rb_cont_call(int argc, VALUE *argv, VALUE contval)
* 2
* FiberError: dead fiber called
*
- * The <code>Fiber#resume</code> method accepts an arbitrary number of
- * parameters, if it is the first call to <code>resume</code> then they
- * will be passed as block arguments. Otherwise they will be the return
- * value of the call to <code>Fiber.yield</code>
+ * The Fiber#resume method accepts an arbitrary number of parameters,
+ * if it is the first call to #resume then they will be passed as
+ * block arguments. Otherwise they will be the return value of the
+ * call to Fiber.yield
*
* Example:
*
@@ -1150,201 +1965,695 @@ rb_cont_call(int argc, VALUE *argv, VALUE contval)
* end
*
* puts fiber.resume 10
- * puts fiber.resume 14
- * puts fiber.resume 18
+ * puts fiber.resume 1_000_000
+ * puts fiber.resume "The fiber will be dead before I can cause trouble"
*
* <em>produces</em>
*
* 12
- * 14
+ * 1000000
* FiberError: dead fiber called
*
+ * == Non-blocking Fibers
+ *
+ * The concept of <em>non-blocking fiber</em> was introduced in Ruby 3.0.
+ * A non-blocking fiber, when reaching an operation that would normally block
+ * the fiber (like <code>sleep</code>, or wait for another process or I/O)
+ * will yield control to other fibers and allow the <em>scheduler</em> to
+ * handle blocking and waking up (resuming) this fiber when it can proceed.
+ *
+ * For a Fiber to behave as non-blocking, it need to be created in Fiber.new with
+ * <tt>blocking: false</tt> (which is the default), and Fiber.scheduler
+ * should be set with Fiber.set_scheduler. If Fiber.scheduler is not set in
+ * the current thread, blocking and non-blocking fibers' behavior is identical.
+ *
+ * Ruby doesn't provide a scheduler class: it is expected to be implemented by
+ * the user and correspond to Fiber::Scheduler.
+ *
+ * There is also Fiber.schedule method, which is expected to immediately perform
+ * the given block in a non-blocking manner. Its actual implementation is up to
+ * the scheduler.
+ *
*/
-static const rb_data_type_t fiber_data_type = {
+static void
+fiber_handle_weak_references(void *ptr)
+{
+ rb_fiber_t *fiber = ptr;
+
+ if (!fiber) return;
+
+ if (!rb_gc_handle_weak_references_alive_p(fiber->cont.saved_ec.gen_fields_cache.obj) ||
+ !rb_gc_handle_weak_references_alive_p(fiber->cont.saved_ec.gen_fields_cache.fields_obj)) {
+ fiber->cont.saved_ec.gen_fields_cache.obj = Qundef;
+ fiber->cont.saved_ec.gen_fields_cache.fields_obj = Qundef;
+ }
+}
+
+static const rb_data_type_t rb_fiber_data_type = {
"fiber",
- {fiber_mark, fiber_free, fiber_memsize,},
+ {fiber_mark, fiber_free, fiber_memsize, fiber_compact, fiber_handle_weak_references},
0, 0, RUBY_TYPED_FREE_IMMEDIATELY
};
static VALUE
fiber_alloc(VALUE klass)
{
- return TypedData_Wrap_Struct(klass, &fiber_data_type, 0);
+ VALUE obj = TypedData_Wrap_Struct(klass, &rb_fiber_data_type, 0);
+ rb_gc_declare_weak_references(obj);
+ return obj;
+}
+
+static rb_serial_t
+next_ec_serial(rb_ractor_t *cr)
+{
+ return cr->next_ec_serial++;
}
static rb_fiber_t*
-fiber_t_alloc(VALUE fibval)
+fiber_t_alloc(VALUE fiber_value, unsigned int blocking)
{
- rb_fiber_t *fib;
+ rb_fiber_t *fiber;
rb_thread_t *th = GET_THREAD();
- if (DATA_PTR(fibval) != 0) {
- rb_raise(rb_eRuntimeError, "cannot initialize twice");
+ if (DATA_PTR(fiber_value) != 0) {
+ rb_raise(rb_eRuntimeError, "cannot initialize twice");
}
THREAD_MUST_BE_RUNNING(th);
- fib = ZALLOC(rb_fiber_t);
- fib->cont.self = fibval;
- fib->cont.type = FIBER_CONTEXT;
- cont_init(&fib->cont, th);
- fib->prev = NULL;
- fib->status = CREATED;
+ fiber = ZALLOC(rb_fiber_t);
+ fiber->cont.self = fiber_value;
+ fiber->cont.type = FIBER_CONTEXT;
+ fiber->blocking = blocking;
+ fiber->killed = 0;
+ cont_init(&fiber->cont, th);
+
+ fiber->cont.saved_ec.fiber_ptr = fiber;
+ fiber->cont.saved_ec.serial = next_ec_serial(th->ractor);
+ rb_ec_clear_vm_stack(&fiber->cont.saved_ec);
+
+ fiber->prev = NULL;
+
+ /* fiber->status == 0 == CREATED
+ * So that we don't need to set status: fiber_status_set(fiber, FIBER_CREATED); */
+ VM_ASSERT(FIBER_CREATED_P(fiber));
+
+ DATA_PTR(fiber_value) = fiber;
+
+ return fiber;
+}
+
+static inline rb_fiber_t*
+fiber_current(void)
+{
+ rb_execution_context_t *ec = GET_EC();
+ return ec->fiber_ptr;
+}
+
+static inline VALUE
+current_fiber_storage(void)
+{
+ rb_execution_context_t *ec = GET_EC();
+ return ec->storage;
+}
+
+static inline VALUE
+inherit_fiber_storage(void)
+{
+ return rb_obj_dup(current_fiber_storage());
+}
- DATA_PTR(fibval) = fib;
+static inline void
+fiber_storage_set(struct rb_fiber_struct *fiber, VALUE storage)
+{
+ fiber->cont.saved_ec.storage = storage;
+}
+
+static inline VALUE
+fiber_storage_get(rb_fiber_t *fiber, int allocate)
+{
+ VALUE storage = fiber->cont.saved_ec.storage;
+ if (storage == Qnil && allocate) {
+ storage = rb_hash_new();
+ fiber_storage_set(fiber, storage);
+ }
+ return storage;
+}
- return fib;
+static void
+storage_access_must_be_from_same_fiber(VALUE self)
+{
+ rb_fiber_t *fiber = fiber_ptr(self);
+ rb_fiber_t *current = fiber_current();
+ if (fiber != current) {
+ rb_raise(rb_eArgError, "Fiber storage can only be accessed from the Fiber it belongs to");
+ }
}
+/**
+ * call-seq: fiber.storage -> hash (dup)
+ *
+ * Returns a copy of the storage hash for the fiber. The method can only be called on the
+ * Fiber.current.
+ */
static VALUE
-fiber_init(VALUE fibval, VALUE proc)
+rb_fiber_storage_get(VALUE self)
{
- rb_fiber_t *fib = fiber_t_alloc(fibval);
- rb_context_t *cont = &fib->cont;
- rb_thread_t *th = &cont->saved_thread;
- rb_thread_t *cth = GET_THREAD();
+ storage_access_must_be_from_same_fiber(self);
- /* initialize cont */
- cont->vm_stack = 0;
+ VALUE storage = fiber_storage_get(fiber_ptr(self), FALSE);
- th->stack = 0;
- th->stack_size = 0;
+ if (storage == Qnil) {
+ return Qnil;
+ }
+ else {
+ return rb_obj_dup(storage);
+ }
+}
- th->stack_size = cth->vm->default_params.fiber_vm_stack_size / sizeof(VALUE);
- th->stack = ALLOC_N(VALUE, th->stack_size);
+static int
+fiber_storage_validate_each(VALUE key, VALUE value, VALUE _argument)
+{
+ Check_Type(key, T_SYMBOL);
- th->cfp = (void *)(th->stack + th->stack_size);
- th->cfp--;
- th->cfp->pc = 0;
- th->cfp->sp = th->stack + 2;
-#if VM_DEBUG_BP_CHECK
- th->cfp->bp_check = 0;
-#endif
- th->cfp->ep = th->stack + 1;
- th->cfp->ep[ 0] = VM_ENVVAL_BLOCK_PTR(0);
- th->cfp->ep[-1] = 0;
- th->cfp->self = Qnil;
- th->cfp->flag = VM_FRAME_MAGIC_DUMMY | VM_FRAME_FLAG_FINISH;
- th->cfp->iseq = 0;
- th->cfp->proc = 0;
- th->cfp->block_iseq = 0;
- th->tag = 0;
- th->local_storage = st_init_numtable();
- th->local_storage_recursive_hash = Qnil;
- th->local_storage_recursive_hash_for_trace = Qnil;
-
- th->first_proc = proc;
-
-#if !FIBER_USE_NATIVE
- MEMCPY(&cont->jmpbuf, &cth->root_jmpbuf, rb_jmpbuf_t, 1);
-#endif
+ return ST_CONTINUE;
+}
+
+static void
+fiber_storage_validate(VALUE value)
+{
+ // nil is an allowed value and will be lazily initialized.
+ if (value == Qnil) return;
+
+ if (!RB_TYPE_P(value, T_HASH)) {
+ rb_raise(rb_eTypeError, "storage must be a hash");
+ }
+
+ if (RB_OBJ_FROZEN(value)) {
+ rb_raise(rb_eFrozenError, "storage must not be frozen");
+ }
+
+ rb_hash_foreach(value, fiber_storage_validate_each, Qundef);
+}
+
+/**
+ * call-seq: fiber.storage = hash
+ *
+ * Sets the storage hash for the fiber. This feature is experimental
+ * and may change in the future. The method can only be called on the
+ * Fiber.current.
+ *
+ * You should be careful about using this method as you may inadvertently clear
+ * important fiber-storage state. You should mostly prefer to assign specific
+ * keys in the storage using Fiber::[]=.
+ *
+ * You can also use <tt>Fiber.new(storage: nil)</tt> to create a fiber with an empty
+ * storage.
+ *
+ * Example:
+ *
+ * while request = request_queue.pop
+ * # Reset the per-request state:
+ * Fiber.current.storage = nil
+ * handle_request(request)
+ * end
+ */
+static VALUE
+rb_fiber_storage_set(VALUE self, VALUE value)
+{
+ if (rb_warning_category_enabled_p(RB_WARN_CATEGORY_EXPERIMENTAL)) {
+ rb_category_warn(RB_WARN_CATEGORY_EXPERIMENTAL,
+ "Fiber#storage= is experimental and may be removed in the future!");
+ }
- return fibval;
+ storage_access_must_be_from_same_fiber(self);
+ fiber_storage_validate(value);
+
+ fiber_ptr(self)->cont.saved_ec.storage = rb_obj_dup(value);
+ return value;
+}
+
+/**
+ * call-seq: Fiber[key] -> value
+ *
+ * Returns the value of the fiber storage variable identified by +key+.
+ *
+ * The +key+ must be a symbol, and the value is set by Fiber#[]= or
+ * Fiber#storage.
+ *
+ * See also Fiber::[]=.
+ */
+static VALUE
+rb_fiber_storage_aref(VALUE class, VALUE key)
+{
+ key = rb_to_symbol(key);
+
+ VALUE storage = fiber_storage_get(fiber_current(), FALSE);
+ if (storage == Qnil) return Qnil;
+
+ return rb_hash_aref(storage, key);
+}
+
+/**
+ * call-seq: Fiber[key] = value
+ *
+ * Assign +value+ to the fiber storage variable identified by +key+.
+ * The variable is created if it doesn't exist.
+ *
+ * +key+ must be a Symbol, otherwise a TypeError is raised.
+ *
+ * See also Fiber::[].
+ */
+static VALUE
+rb_fiber_storage_aset(VALUE class, VALUE key, VALUE value)
+{
+ key = rb_to_symbol(key);
+
+ VALUE storage = fiber_storage_get(fiber_current(), value != Qnil);
+ if (storage == Qnil) return Qnil;
+
+ if (value == Qnil) {
+ return rb_hash_delete(storage, key);
+ }
+ else {
+ return rb_hash_aset(storage, key, value);
+ }
+}
+
+static VALUE
+fiber_initialize(VALUE self, VALUE proc, struct fiber_pool * fiber_pool, unsigned int blocking, VALUE storage)
+{
+ if (storage == Qundef || storage == Qtrue) {
+ // The default, inherit storage (dup) from the current fiber:
+ storage = inherit_fiber_storage();
+ }
+ else /* nil, hash, etc. */ {
+ fiber_storage_validate(storage);
+ storage = rb_obj_dup(storage);
+ }
+
+ rb_fiber_t *fiber = fiber_t_alloc(self, blocking);
+
+ fiber->cont.saved_ec.storage = storage;
+ fiber->first_proc = proc;
+ fiber->stack.base = NULL;
+ fiber->stack.pool = fiber_pool;
+
+ return self;
+}
+
+static void
+fiber_prepare_stack(rb_fiber_t *fiber)
+{
+ rb_context_t *cont = &fiber->cont;
+ rb_execution_context_t *sec = &cont->saved_ec;
+
+ size_t vm_stack_size = 0;
+ VALUE *vm_stack = fiber_initialize_coroutine(fiber, &vm_stack_size);
+
+ /* initialize cont */
+ cont->saved_vm_stack.ptr = NULL;
+ rb_ec_initialize_vm_stack(sec, vm_stack, vm_stack_size / sizeof(VALUE));
+
+ sec->tag = NULL;
+ sec->local_storage = NULL;
+ sec->local_storage_recursive_hash = Qnil;
+ sec->local_storage_recursive_hash_for_trace = Qnil;
+}
+
+static struct fiber_pool *
+rb_fiber_pool_default(VALUE pool)
+{
+ return &shared_fiber_pool;
+}
+
+VALUE rb_fiber_inherit_storage(struct rb_execution_context_struct *ec, struct rb_fiber_struct *fiber)
+{
+ VALUE storage = rb_obj_dup(ec->storage);
+ fiber->cont.saved_ec.storage = storage;
+ return storage;
}
/* :nodoc: */
static VALUE
-rb_fiber_init(VALUE fibval)
+rb_fiber_initialize_kw(int argc, VALUE* argv, VALUE self, int kw_splat)
+{
+ VALUE pool = Qnil;
+ VALUE blocking = Qfalse;
+ VALUE storage = Qundef;
+
+ if (kw_splat != RB_NO_KEYWORDS) {
+ VALUE options = Qnil;
+ VALUE arguments[3] = {Qundef};
+
+ argc = rb_scan_args_kw(kw_splat, argc, argv, ":", &options);
+ rb_get_kwargs(options, fiber_initialize_keywords, 0, 3, arguments);
+
+ if (!UNDEF_P(arguments[0])) {
+ blocking = arguments[0];
+ }
+
+ if (!UNDEF_P(arguments[1])) {
+ pool = arguments[1];
+ }
+
+ storage = arguments[2];
+ }
+
+ return fiber_initialize(self, rb_block_proc(), rb_fiber_pool_default(pool), RTEST(blocking), storage);
+}
+
+/*
+ * call-seq:
+ * Fiber.new(blocking: false, storage: true) { |*args| ... } -> fiber
+ *
+ * Creates new Fiber. Initially, the fiber is not running and can be resumed
+ * with #resume. Arguments to the first #resume call will be passed to the
+ * block:
+ *
+ * f = Fiber.new do |initial|
+ * current = initial
+ * loop do
+ * puts "current: #{current.inspect}"
+ * current = Fiber.yield
+ * end
+ * end
+ * f.resume(100) # prints: current: 100
+ * f.resume(1, 2, 3) # prints: current: [1, 2, 3]
+ * f.resume # prints: current: nil
+ * # ... and so on ...
+ *
+ * If <tt>blocking: false</tt> is passed to <tt>Fiber.new</tt>, _and_ current
+ * thread has a Fiber.scheduler defined, the Fiber becomes non-blocking (see
+ * "Non-blocking Fibers" section in class docs).
+ *
+ * If the <tt>storage</tt> is unspecified, the default is to inherit a copy of
+ * the storage from the current fiber. This is the same as specifying
+ * <tt>storage: true</tt>.
+ *
+ * Fiber[:x] = 1
+ * Fiber.new do
+ * Fiber[:x] # => 1
+ * Fiber[:x] = 2
+ * end.resume
+ * Fiber[:x] # => 1
+ *
+ * If the given <tt>storage</tt> is <tt>nil</tt>, this function will lazy
+ * initialize the internal storage, which starts as an empty hash.
+ *
+ * Fiber[:x] = "Hello World"
+ * Fiber.new(storage: nil) do
+ * Fiber[:x] # nil
+ * end
+ *
+ * Otherwise, the given <tt>storage</tt> is used as the new fiber's storage,
+ * and it must be an instance of Hash.
+ *
+ * Explicitly using <tt>storage: true</tt> is currently experimental and may
+ * change in the future.
+ */
+static VALUE
+rb_fiber_initialize(int argc, VALUE* argv, VALUE self)
{
- return fiber_init(fibval, rb_block_proc());
+ return rb_fiber_initialize_kw(argc, argv, self, rb_keyword_given_p());
}
VALUE
-rb_fiber_new(VALUE (*func)(ANYARGS), VALUE obj)
+rb_fiber_new_storage(rb_block_call_func_t func, VALUE obj, VALUE storage)
+{
+ return fiber_initialize(fiber_alloc(rb_cFiber), rb_proc_new(func, obj), rb_fiber_pool_default(Qnil), 0, storage);
+}
+
+VALUE
+rb_fiber_new(rb_block_call_func_t func, VALUE obj)
+{
+ return rb_fiber_new_storage(func, obj, Qtrue);
+}
+
+static VALUE
+rb_fiber_s_schedule_kw(int argc, VALUE* argv, int kw_splat)
+{
+ rb_thread_t * th = GET_THREAD();
+ VALUE scheduler = th->scheduler;
+ VALUE fiber = Qnil;
+
+ if (scheduler != Qnil) {
+ fiber = rb_fiber_scheduler_fiber(scheduler, argc, argv, kw_splat);
+ }
+ else {
+ rb_raise(rb_eRuntimeError, "No scheduler is available!");
+ }
+
+ return fiber;
+}
+
+/*
+ * call-seq:
+ * Fiber.schedule { |*args| ... } -> fiber
+ *
+ * The method is <em>expected</em> to immediately run the provided block of code in a
+ * separate non-blocking fiber.
+ *
+ * puts "Go to sleep!"
+ *
+ * Fiber.set_scheduler(MyScheduler.new)
+ *
+ * Fiber.schedule do
+ * puts "Going to sleep"
+ * sleep(1)
+ * puts "I slept well"
+ * end
+ *
+ * puts "Wakey-wakey, sleepyhead"
+ *
+ * Assuming MyScheduler is properly implemented, this program will produce:
+ *
+ * Go to sleep!
+ * Going to sleep
+ * Wakey-wakey, sleepyhead
+ * ...1 sec pause here...
+ * I slept well
+ *
+ * ...e.g. on the first blocking operation inside the Fiber (<tt>sleep(1)</tt>),
+ * the control is yielded to the outside code (main fiber), and <em>at the end
+ * of that execution</em>, the scheduler takes care of properly resuming all the
+ * blocked fibers.
+ *
+ * Note that the behavior described above is how the method is <em>expected</em>
+ * to behave, actual behavior is up to the current scheduler's implementation of
+ * Fiber::Scheduler#fiber method. Ruby doesn't enforce this method to
+ * behave in any particular way.
+ *
+ * If the scheduler is not set, the method raises
+ * <tt>RuntimeError (No scheduler is available!)</tt>.
+ *
+ */
+static VALUE
+rb_fiber_s_schedule(int argc, VALUE *argv, VALUE obj)
+{
+ return rb_fiber_s_schedule_kw(argc, argv, rb_keyword_given_p());
+}
+
+/*
+ * call-seq:
+ * Fiber.scheduler -> obj or nil
+ *
+ * Returns the Fiber scheduler, that was last set for the current thread with Fiber.set_scheduler.
+ * Returns +nil+ if no scheduler is set (which is the default), and non-blocking fibers'
+ * behavior is the same as blocking.
+ * (see "Non-blocking fibers" section in class docs for details about the scheduler concept).
+ *
+ */
+static VALUE
+rb_fiber_s_scheduler(VALUE klass)
{
- return fiber_init(fiber_alloc(rb_cFiber), rb_proc_new(func, obj));
+ return rb_fiber_scheduler_get();
}
-static void rb_fiber_terminate(rb_fiber_t *fib);
+/*
+ * call-seq:
+ * Fiber.current_scheduler -> obj or nil
+ *
+ * Returns the Fiber scheduler, that was last set for the current thread with Fiber.set_scheduler
+ * if and only if the current fiber is non-blocking.
+ *
+ */
+static VALUE
+rb_fiber_current_scheduler(VALUE klass)
+{
+ return rb_fiber_scheduler_current();
+}
+
+/*
+ * call-seq:
+ * Fiber.set_scheduler(scheduler) -> scheduler
+ *
+ * Sets the Fiber scheduler for the current thread. If the scheduler is set, non-blocking
+ * fibers (created by Fiber.new with <tt>blocking: false</tt>, or by Fiber.schedule)
+ * call that scheduler's hook methods on potentially blocking operations, and the current
+ * thread will call scheduler's +close+ method on finalization (allowing the scheduler to
+ * properly manage all non-finished fibers).
+ *
+ * +scheduler+ can be an object of any class corresponding to Fiber::Scheduler. Its
+ * implementation is up to the user.
+ *
+ * See also the "Non-blocking fibers" section in class docs.
+ *
+ */
+static VALUE
+rb_fiber_set_scheduler(VALUE klass, VALUE scheduler)
+{
+ return rb_fiber_scheduler_set(scheduler);
+}
+
+NORETURN(static void rb_fiber_terminate(rb_fiber_t *fiber, int need_interrupt, VALUE err));
void
-rb_fiber_start(void)
+rb_fiber_start(rb_fiber_t *fiber)
{
- rb_thread_t *th = GET_THREAD();
- rb_fiber_t *fib = th->fiber;
+ rb_thread_t * volatile th = fiber->cont.saved_ec.thread_ptr;
+
rb_proc_t *proc;
- int state;
-
- TH_PUSH_TAG(th);
- if ((state = EXEC_TAG()) == 0) {
- rb_context_t *cont = &VAR_FROM_MEMORY(fib)->cont;
- int argc;
- const VALUE *argv, args = cont->value;
- GetProcPtr(cont->saved_thread.first_proc, proc);
- argv = (argc = cont->argc) > 1 ? RARRAY_CONST_PTR(args) : &args;
- cont->value = Qnil;
- th->errinfo = Qnil;
- th->root_lep = rb_vm_ep_local_ep(proc->block.ep);
- th->root_svar = Qfalse;
- fib->status = RUNNING;
-
- EXEC_EVENT_HOOK(th, RUBY_EVENT_FIBER_SWITCH, th->self, 0, 0, Qnil);
- cont->value = rb_vm_invoke_proc(th, proc, argc, argv, 0);
- }
- TH_POP_TAG();
+ enum ruby_tag_type state;
- if (state) {
- if (state == TAG_RAISE || state == TAG_FATAL) {
- rb_threadptr_pending_interrupt_enque(th, th->errinfo);
- }
- else {
- VALUE err = rb_vm_make_jump_tag_but_local_jump(state, th->errinfo);
- if (!NIL_P(err))
- rb_threadptr_pending_interrupt_enque(th, err);
- }
- RUBY_VM_SET_INTERRUPT(th);
+ VM_ASSERT(th->ec == GET_EC());
+ VM_ASSERT(FIBER_RESUMED_P(fiber));
+
+ if (fiber->blocking) {
+ th->blocking += 1;
+ }
+
+ EC_PUSH_TAG(th->ec);
+ if ((state = EC_EXEC_TAG()) == TAG_NONE) {
+ rb_context_t *cont = &VAR_FROM_MEMORY(fiber)->cont;
+ int argc;
+ const VALUE *argv, args = cont->value;
+ GetProcPtr(fiber->first_proc, proc);
+ argv = (argc = cont->argc) > 1 ? RARRAY_CONST_PTR(args) : &args;
+ cont->value = Qnil;
+ th->ec->errinfo = Qnil;
+ th->ec->root_lep = rb_vm_proc_local_ep(fiber->first_proc);
+ th->ec->root_svar = Qfalse;
+
+ EXEC_EVENT_HOOK(th->ec, RUBY_EVENT_FIBER_SWITCH, th->self, 0, 0, 0, Qnil);
+ cont->value = rb_vm_invoke_proc(th->ec, proc, argc, argv, cont->kw_splat, VM_BLOCK_HANDLER_NONE);
}
+ EC_POP_TAG();
- rb_fiber_terminate(fib);
- rb_bug("rb_fiber_start: unreachable");
+ int need_interrupt = TRUE;
+ VALUE err = Qfalse;
+ if (state) {
+ err = th->ec->errinfo;
+ VM_ASSERT(FIBER_RESUMED_P(fiber));
+
+ if (state == TAG_RAISE) {
+ // noop...
+ }
+ else if (state == TAG_FATAL && err == RUBY_FATAL_FIBER_KILLED) {
+ need_interrupt = FALSE;
+ err = Qfalse;
+ }
+ else if (state == TAG_FATAL) {
+ rb_threadptr_pending_interrupt_enque(th, err);
+ }
+ else {
+ err = rb_vm_make_jump_tag_but_local_jump(state, err);
+ }
+ }
+
+ rb_fiber_terminate(fiber, need_interrupt, err);
}
-static rb_fiber_t *
-root_fiber_alloc(rb_thread_t *th)
+// Set up a "root fiber", which is the fiber that every Ractor has.
+void
+rb_threadptr_root_fiber_setup(rb_thread_t *th)
{
- rb_fiber_t *fib;
- /* no need to allocate vm stack */
- fib = fiber_t_alloc(fiber_alloc(rb_cFiber));
- fib->cont.type = ROOT_FIBER_CONTEXT;
-#if FIBER_USE_NATIVE
-#ifdef _WIN32
- fib->fib_handle = ConvertThreadToFiber(0);
-#endif
-#endif
- fib->status = RUNNING;
+ rb_fiber_t *fiber = ruby_mimcalloc(1, sizeof(rb_fiber_t));
+ if (!fiber) {
+ rb_bug("%s", strerror(errno)); /* ... is it possible to call rb_bug here? */
+ }
+
+ fiber->cont.type = FIBER_CONTEXT;
+ fiber->cont.saved_ec.fiber_ptr = fiber;
+ fiber->cont.saved_ec.serial = next_ec_serial(th->ractor);
+ fiber->cont.saved_ec.thread_ptr = th;
+ fiber->blocking = 1;
+ fiber->killed = 0;
+ fiber_status_set(fiber, FIBER_RESUMED); /* skip CREATED */
+
+ coroutine_initialize_main(&fiber->context);
- return fib;
+ th->ec = &fiber->cont.saved_ec;
+
+ cont_init_jit_cont(&fiber->cont);
}
-static inline rb_fiber_t*
-fiber_current(void)
+void
+rb_root_fiber_obj_setup(rb_thread_t *th)
{
- rb_thread_t *th = GET_THREAD();
- if (th->fiber == 0) {
- /* save root */
- rb_fiber_t *fib = root_fiber_alloc(th);
- th->root_fiber = th->fiber = fib;
+ rb_fiber_t *fiber = th->ec->fiber_ptr;
+ VALUE fiber_value = fiber_alloc(rb_cFiber);
+ DATA_PTR(fiber_value) = fiber;
+ fiber->cont.self = fiber_value;
+}
+
+void
+rb_threadptr_root_fiber_release(rb_thread_t *th)
+{
+ if (th->root_fiber) {
+ /* ignore. A root fiber object will free th->ec */
+ }
+ else {
+ rb_execution_context_t *ec = rb_current_execution_context(false);
+
+ VM_ASSERT(th->ec->fiber_ptr->cont.type == FIBER_CONTEXT);
+ VM_ASSERT(th->ec->fiber_ptr->cont.self == 0);
+
+ if (ec && th->ec == ec) {
+ rb_ractor_set_current_ec(th->ractor, NULL);
+ }
+ fiber_free(th->ec->fiber_ptr);
+ th->ec = NULL;
}
- return th->fiber;
}
-static inline rb_fiber_t*
-return_fiber(void)
+void
+rb_threadptr_root_fiber_terminate(rb_thread_t *th)
{
- rb_fiber_t *fib = fiber_current();
- rb_fiber_t *prev = fib->prev;
+ rb_fiber_t *fiber = th->ec->fiber_ptr;
+
+ fiber->status = FIBER_TERMINATED;
- if (!prev) {
- rb_fiber_t *root_fiber = GET_THREAD()->root_fiber;
+ // The vm_stack is `alloca`ed on the thread stack, so it's gone too:
+ rb_ec_clear_vm_stack(th->ec);
+}
- if (root_fiber == fib) {
- rb_raise(rb_eFiberError, "can't yield from root fiber");
- }
- return root_fiber;
+static inline rb_fiber_t*
+return_fiber(bool terminate)
+{
+ rb_fiber_t *fiber = fiber_current();
+ rb_fiber_t *prev = fiber->prev;
+
+ if (prev) {
+ fiber->prev = NULL;
+ prev->resuming_fiber = NULL;
+ return prev;
}
else {
- fib->prev = NULL;
- return prev;
+ if (!terminate) {
+ rb_raise(rb_eFiberError, "attempt to yield on a not resumed fiber");
+ }
+
+ rb_thread_t *th = GET_THREAD();
+ rb_fiber_t *root_fiber = th->root_fiber;
+
+ VM_ASSERT(root_fiber != NULL);
+
+ // search resuming fiber
+ for (fiber = root_fiber; fiber->resuming_fiber; fiber = fiber->resuming_fiber) {
+ }
+
+ return fiber;
}
}
@@ -1354,180 +2663,338 @@ rb_fiber_current(void)
return fiber_current()->cont.self;
}
-static inline VALUE
-fiber_store(rb_fiber_t *next_fib, rb_thread_t *th)
+// Prepare to execute next_fiber on the given thread.
+static inline void
+fiber_store(rb_fiber_t *next_fiber, rb_thread_t *th)
{
- rb_fiber_t *fib;
+ rb_fiber_t *fiber = th->ec->fiber_ptr;
- if (th->fiber) {
- fib = th->fiber;
- cont_save_thread(&fib->cont, th);
- }
- else {
- /* create current fiber */
- fib = root_fiber_alloc(th);
- th->root_fiber = th->fiber = fib;
+ if (FIBER_CREATED_P(next_fiber)) {
+ fiber_prepare_stack(next_fiber);
}
-#if FIBER_USE_NATIVE
- fiber_setcontext(next_fib, fib);
- /* restored */
-#ifndef _WIN32
- if (terminated_machine_stack.ptr) {
- if (machine_stack_cache_index < MAX_MACHINE_STACK_CACHE) {
- machine_stack_cache[machine_stack_cache_index].ptr = terminated_machine_stack.ptr;
- machine_stack_cache[machine_stack_cache_index].size = terminated_machine_stack.size;
- machine_stack_cache_index++;
- }
- else {
- if (terminated_machine_stack.ptr != fib->cont.machine.stack) {
- munmap((void*)terminated_machine_stack.ptr, terminated_machine_stack.size * sizeof(VALUE));
- }
- else {
- rb_bug("terminated fiber resumed");
- }
- }
- terminated_machine_stack.ptr = NULL;
- terminated_machine_stack.size = 0;
- }
-#endif /* not _WIN32 */
- fib = th->fiber;
- if (fib->cont.argc == -1) rb_exc_raise(fib->cont.value);
- return fib->cont.value;
-
-#else /* FIBER_USE_NATIVE */
- cont_save_machine_stack(th, &fib->cont);
- if (ruby_setjmp(fib->cont.jmpbuf)) {
- /* restored */
- fib = th->fiber;
- if (fib->cont.argc == -1) rb_exc_raise(fib->cont.value);
- if (next_fib->cont.value == Qundef) {
- cont_restore_0(&next_fib->cont, &next_fib->cont.value);
- rb_bug("rb_fiber_resume: unreachable");
- }
- return fib->cont.value;
- }
- else {
- VALUE undef = Qundef;
- cont_restore_0(&next_fib->cont, &undef);
- rb_bug("rb_fiber_resume: unreachable");
+ VM_ASSERT(FIBER_RESUMED_P(fiber) || FIBER_TERMINATED_P(fiber));
+ VM_ASSERT(FIBER_RUNNABLE_P(next_fiber));
+
+ if (FIBER_RESUMED_P(fiber)) fiber_status_set(fiber, FIBER_SUSPENDED);
+
+ fiber_status_set(next_fiber, FIBER_RESUMED);
+ fiber_setcontext(next_fiber, fiber);
+}
+
+static void
+fiber_check_killed(rb_fiber_t *fiber)
+{
+ VM_ASSERT(fiber == fiber_current());
+
+ if (fiber->killed) {
+ rb_thread_t *thread = fiber->cont.saved_ec.thread_ptr;
+
+ thread->ec->errinfo = RUBY_FATAL_FIBER_KILLED;
+ EC_JUMP_TAG(thread->ec, RUBY_TAG_FATAL);
}
-#endif /* FIBER_USE_NATIVE */
}
static inline VALUE
-fiber_switch(rb_fiber_t *fib, int argc, const VALUE *argv, int is_resume)
+fiber_switch(rb_fiber_t *fiber, int argc, const VALUE *argv, int kw_splat, rb_fiber_t *resuming_fiber, bool yielding)
{
VALUE value;
- rb_context_t *cont = &fib->cont;
+ rb_context_t *cont = &fiber->cont;
rb_thread_t *th = GET_THREAD();
- if (th->fiber == fib) {
- /* ignore fiber context switch
- * because destination fiber is same as current fiber
- */
- return make_passing_arg(argc, argv);
+ /* make sure the root_fiber object is available */
+ if (th->root_fiber == NULL) {
+ th->root_fiber = th->ec->fiber_ptr;
}
- if (cont->saved_thread.self != th->self) {
- rb_raise(rb_eFiberError, "fiber called across threads");
+ if (th->ec->fiber_ptr == fiber) {
+ /* ignore fiber context switch
+ * because destination fiber is the same as current fiber
+ */
+ return make_passing_arg(argc, argv);
}
- else if (cont->saved_thread.protect_tag != th->protect_tag) {
- rb_raise(rb_eFiberError, "fiber called across stack rewinding barrier");
+
+ if (cont_thread_value(cont) != th->self) {
+ rb_raise(rb_eFiberError, "fiber called across threads");
}
- else if (fib->status == TERMINATED) {
- value = rb_exc_new2(rb_eFiberError, "dead fiber called");
- if (th->fiber->status != TERMINATED) rb_exc_raise(value);
+ if (FIBER_TERMINATED_P(fiber)) {
+ value = rb_exc_new2(rb_eFiberError, "dead fiber called");
- /* th->fiber is also dead => switch to root fiber */
- /* (this means we're being called from rb_fiber_terminate, */
- /* and the terminated fiber's return_fiber() is already dead) */
- cont = &th->root_fiber->cont;
- cont->argc = -1;
- cont->value = value;
-#if FIBER_USE_NATIVE
- fiber_setcontext(th->root_fiber, th->fiber);
-#else
- cont_restore_0(cont, &value);
-#endif
- /* unreachable */
+ if (!FIBER_TERMINATED_P(th->ec->fiber_ptr)) {
+ rb_exc_raise(value);
+ VM_UNREACHABLE(fiber_switch);
+ }
+ else {
+ /* th->ec->fiber_ptr is also dead => switch to root fiber */
+ /* (this means we're being called from rb_fiber_terminate, */
+ /* and the terminated fiber's return_fiber() is already dead) */
+ VM_ASSERT(FIBER_SUSPENDED_P(th->root_fiber));
+
+ cont = &th->root_fiber->cont;
+ cont->argc = -1;
+ cont->value = value;
+
+ fiber_setcontext(th->root_fiber, th->ec->fiber_ptr);
+
+ VM_UNREACHABLE(fiber_switch);
+ }
}
- if (is_resume) {
- fib->prev = fiber_current();
+ VM_ASSERT(FIBER_RUNNABLE_P(fiber));
+
+ rb_fiber_t *current_fiber = fiber_current();
+
+ VM_ASSERT(!current_fiber->resuming_fiber);
+
+ if (resuming_fiber) {
+ current_fiber->resuming_fiber = resuming_fiber;
+ fiber->prev = fiber_current();
+ fiber->yielding = 0;
}
- else {
- /* restore `tracing' context. see [Feature #4347] */
- th->trace_arg = cont->saved_thread.trace_arg;
+
+ VM_ASSERT(!current_fiber->yielding);
+ if (yielding) {
+ current_fiber->yielding = 1;
+ }
+
+ if (current_fiber->blocking) {
+ th->blocking -= 1;
}
cont->argc = argc;
+ cont->kw_splat = kw_splat;
cont->value = make_passing_arg(argc, argv);
- value = fiber_store(fib, th);
- RUBY_VM_CHECK_INTS(th);
+ fiber_store(fiber, th);
+
+ // We cannot free the stack until the pthread is joined:
+#ifndef COROUTINE_PTHREAD_CONTEXT
+ if (resuming_fiber && FIBER_TERMINATED_P(fiber)) {
+ RB_VM_LOCKING() {
+ fiber_stack_release(fiber);
+ }
+ }
+#endif
+
+ if (fiber_current()->blocking) {
+ th->blocking += 1;
+ }
+
+ RUBY_VM_CHECK_INTS(th->ec);
- EXEC_EVENT_HOOK(th, RUBY_EVENT_FIBER_SWITCH, th->self, 0, 0, Qnil);
+ EXEC_EVENT_HOOK(th->ec, RUBY_EVENT_FIBER_SWITCH, th->self, 0, 0, 0, Qnil);
+
+ current_fiber = th->ec->fiber_ptr;
+ value = current_fiber->cont.value;
+
+ fiber_check_killed(current_fiber);
+
+ if (current_fiber->cont.argc == -1) {
+ // Fiber#raise will trigger this path.
+ rb_exc_raise(value);
+ }
return value;
}
VALUE
-rb_fiber_transfer(VALUE fibval, int argc, const VALUE *argv)
+rb_fiber_transfer(VALUE fiber_value, int argc, const VALUE *argv)
{
- rb_fiber_t *fib;
- GetFiberPtr(fibval, fib);
- return fiber_switch(fib, argc, argv, 0);
+ return fiber_switch(fiber_ptr(fiber_value), argc, argv, RB_NO_KEYWORDS, NULL, false);
}
-static void
-rb_fiber_terminate(rb_fiber_t *fib)
-{
- VALUE value = fib->cont.value;
- fib->status = TERMINATED;
-#if FIBER_USE_NATIVE && !defined(_WIN32)
- /* Ruby must not switch to other thread until storing terminated_machine_stack */
- terminated_machine_stack.ptr = fib->ss_sp;
- terminated_machine_stack.size = fib->ss_size / sizeof(VALUE);
- fib->ss_sp = NULL;
- fib->context.uc_stack.ss_sp = NULL;
- fib->cont.machine.stack = NULL;
- fib->cont.machine.stack_size = 0;
-#endif
- fiber_switch(return_fiber(), 1, &value, 0);
+/*
+ * call-seq:
+ * fiber.blocking? -> true or false
+ *
+ * Returns +true+ if +fiber+ is blocking and +false+ otherwise.
+ * Fiber is non-blocking if it was created via passing <tt>blocking: false</tt>
+ * to Fiber.new, or via Fiber.schedule.
+ *
+ * Note that, even if the method returns +false+, the fiber behaves differently
+ * only if Fiber.scheduler is set in the current thread.
+ *
+ * See the "Non-blocking fibers" section in class docs for details.
+ *
+ */
+VALUE
+rb_fiber_blocking_p(VALUE fiber)
+{
+ return RBOOL(fiber_ptr(fiber)->blocking);
+}
+
+static VALUE
+fiber_blocking_yield(VALUE fiber_value)
+{
+ rb_fiber_t *fiber = fiber_ptr(fiber_value);
+ rb_thread_t * volatile th = fiber->cont.saved_ec.thread_ptr;
+
+ VM_ASSERT(fiber->blocking == 0);
+
+ // fiber->blocking is `unsigned int : 1`, so we use it as a boolean:
+ fiber->blocking = 1;
+
+ // Once the fiber is blocking, and current, we increment the thread blocking state:
+ th->blocking += 1;
+
+ return rb_yield(fiber_value);
}
+static VALUE
+fiber_blocking_ensure(VALUE fiber_value)
+{
+ rb_fiber_t *fiber = fiber_ptr(fiber_value);
+ rb_thread_t * volatile th = fiber->cont.saved_ec.thread_ptr;
+
+ // We are no longer blocking:
+ fiber->blocking = 0;
+ th->blocking -= 1;
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * Fiber.blocking{|fiber| ...} -> result
+ *
+ * Forces the fiber to be blocking for the duration of the block. Returns the
+ * result of the block.
+ *
+ * See the "Non-blocking fibers" section in class docs for details.
+ *
+ */
VALUE
-rb_fiber_resume(VALUE fibval, int argc, const VALUE *argv)
+rb_fiber_blocking(VALUE class)
+{
+ VALUE fiber_value = rb_fiber_current();
+ rb_fiber_t *fiber = fiber_ptr(fiber_value);
+
+ // If we are already blocking, this is essentially a no-op:
+ if (fiber->blocking) {
+ return rb_yield(fiber_value);
+ }
+ else {
+ return rb_ensure(fiber_blocking_yield, fiber_value, fiber_blocking_ensure, fiber_value);
+ }
+}
+
+/*
+ * call-seq:
+ * Fiber.blocking? -> false or 1
+ *
+ * Returns +false+ if the current fiber is non-blocking.
+ * Fiber is non-blocking if it was created via passing <tt>blocking: false</tt>
+ * to Fiber.new, or via Fiber.schedule.
+ *
+ * If the current Fiber is blocking, the method returns 1.
+ * Future developments may allow for situations where larger integers
+ * could be returned.
+ *
+ * Note that, even if the method returns +false+, Fiber behaves differently
+ * only if Fiber.scheduler is set in the current thread.
+ *
+ * See the "Non-blocking fibers" section in class docs for details.
+ *
+ */
+static VALUE
+rb_fiber_s_blocking_p(VALUE klass)
+{
+ rb_thread_t *thread = GET_THREAD();
+ unsigned blocking = thread->blocking;
+
+ if (blocking == 0)
+ return Qfalse;
+
+ return INT2NUM(blocking);
+}
+
+void
+rb_fiber_close(rb_fiber_t *fiber)
+{
+ fiber_status_set(fiber, FIBER_TERMINATED);
+ rb_ec_close(&fiber->cont.saved_ec);
+}
+
+static void
+rb_fiber_terminate(rb_fiber_t *fiber, int need_interrupt, VALUE error)
+{
+ VALUE value = fiber->cont.value;
+
+ VM_ASSERT(FIBER_RESUMED_P(fiber));
+ rb_fiber_close(fiber);
+
+ fiber->cont.machine.stack = NULL;
+ fiber->cont.machine.stack_size = 0;
+
+ rb_fiber_t *next_fiber = return_fiber(true);
+
+ if (need_interrupt) RUBY_VM_SET_INTERRUPT(&next_fiber->cont.saved_ec);
+
+ if (RTEST(error))
+ fiber_switch(next_fiber, -1, &error, RB_NO_KEYWORDS, NULL, false);
+ else
+ fiber_switch(next_fiber, 1, &value, RB_NO_KEYWORDS, NULL, false);
+ ruby_stop(0);
+}
+
+static VALUE
+fiber_resume_kw(rb_fiber_t *fiber, int argc, const VALUE *argv, int kw_splat)
{
- rb_fiber_t *fib;
- GetFiberPtr(fibval, fib);
+ rb_fiber_t *current_fiber = fiber_current();
- if (fib->prev != 0 || fib->cont.type == ROOT_FIBER_CONTEXT) {
- rb_raise(rb_eFiberError, "double resume");
+ if (argc == -1 && FIBER_CREATED_P(fiber)) {
+ rb_raise(rb_eFiberError, "cannot raise exception on unborn fiber");
+ }
+ else if (FIBER_TERMINATED_P(fiber)) {
+ rb_raise(rb_eFiberError, "attempt to resume a terminated fiber");
}
- if (fib->transferred != 0) {
- rb_raise(rb_eFiberError, "cannot resume transferred Fiber");
+ else if (fiber == current_fiber) {
+ rb_raise(rb_eFiberError, "attempt to resume the current fiber");
}
+ else if (fiber->prev != NULL) {
+ rb_raise(rb_eFiberError, "attempt to resume a resumed fiber (double resume)");
+ }
+ else if (fiber->resuming_fiber) {
+ rb_raise(rb_eFiberError, "attempt to resume a resuming fiber");
+ }
+ else if (fiber->prev == NULL &&
+ (!fiber->yielding && fiber->status != FIBER_CREATED)) {
+ rb_raise(rb_eFiberError, "attempt to resume a transferring fiber");
+ }
+
+ return fiber_switch(fiber, argc, argv, kw_splat, fiber, false);
+}
- return fiber_switch(fib, argc, argv, 1);
+VALUE
+rb_fiber_resume_kw(VALUE self, int argc, const VALUE *argv, int kw_splat)
+{
+ return fiber_resume_kw(fiber_ptr(self), argc, argv, kw_splat);
+}
+
+VALUE
+rb_fiber_resume(VALUE self, int argc, const VALUE *argv)
+{
+ return fiber_resume_kw(fiber_ptr(self), argc, argv, RB_NO_KEYWORDS);
+}
+
+VALUE
+rb_fiber_yield_kw(int argc, const VALUE *argv, int kw_splat)
+{
+ return fiber_switch(return_fiber(false), argc, argv, kw_splat, NULL, true);
}
VALUE
rb_fiber_yield(int argc, const VALUE *argv)
{
- return fiber_switch(return_fiber(), argc, argv, 0);
+ return fiber_switch(return_fiber(false), argc, argv, RB_NO_KEYWORDS, NULL, true);
}
void
-rb_fiber_reset_root_local_storage(VALUE thval)
+rb_fiber_reset_root_local_storage(rb_thread_t *th)
{
- rb_thread_t *th;
-
- GetThreadPtr(thval, th);
- if (th->root_fiber && th->root_fiber != th->fiber) {
- th->local_storage = th->root_fiber->cont.saved_thread.local_storage;
+ if (th->root_fiber && th->root_fiber != th->ec->fiber_ptr) {
+ th->ec->local_storage = th->root_fiber->cont.saved_ec.local_storage;
}
}
@@ -1537,36 +3004,110 @@ rb_fiber_reset_root_local_storage(VALUE thval)
*
* Returns true if the fiber can still be resumed (or transferred
* to). After finishing execution of the fiber block this method will
- * always return false. You need to <code>require 'fiber'</code>
- * before using this method.
+ * always return +false+.
*/
VALUE
-rb_fiber_alive_p(VALUE fibval)
+rb_fiber_alive_p(VALUE fiber_value)
{
- rb_fiber_t *fib;
- GetFiberPtr(fibval, fib);
- return fib->status != TERMINATED ? Qtrue : Qfalse;
+ return RBOOL(!FIBER_TERMINATED_P(fiber_ptr(fiber_value)));
}
/*
* call-seq:
* fiber.resume(args, ...) -> obj
*
- * Resumes the fiber from the point at which the last <code>Fiber.yield</code>
- * was called, or starts running it if it is the first call to
- * <code>resume</code>. Arguments passed to resume will be the value of
- * the <code>Fiber.yield</code> expression or will be passed as block
- * parameters to the fiber's block if this is the first <code>resume</code>.
+ * Resumes the fiber from the point at which the last Fiber.yield was
+ * called, or starts running it if it is the first call to
+ * #resume. Arguments passed to resume will be the value of the
+ * Fiber.yield expression or will be passed as block parameters to
+ * the fiber's block if this is the first #resume.
*
* Alternatively, when resume is called it evaluates to the arguments passed
- * to the next <code>Fiber.yield</code> statement inside the fiber's block
+ * to the next Fiber.yield statement inside the fiber's block
* or to the block value if it runs to completion without any
- * <code>Fiber.yield</code>
+ * Fiber.yield
+ */
+static VALUE
+rb_fiber_m_resume(int argc, VALUE *argv, VALUE fiber)
+{
+ return rb_fiber_resume_kw(fiber, argc, argv, rb_keyword_given_p());
+}
+
+/*
+ * call-seq:
+ * fiber.backtrace -> array
+ * fiber.backtrace(start) -> array
+ * fiber.backtrace(start, count) -> array
+ * fiber.backtrace(start..end) -> array
+ *
+ * Returns the current execution stack of the fiber. +start+, +count+ and +end+ allow
+ * to select only parts of the backtrace.
+ *
+ * def level3
+ * Fiber.yield
+ * end
+ *
+ * def level2
+ * level3
+ * end
+ *
+ * def level1
+ * level2
+ * end
+ *
+ * f = Fiber.new { level1 }
+ *
+ * # It is empty before the fiber started
+ * f.backtrace
+ * #=> []
+ *
+ * f.resume
+ *
+ * f.backtrace
+ * #=> ["test.rb:2:in `yield'", "test.rb:2:in `level3'", "test.rb:6:in `level2'", "test.rb:10:in `level1'", "test.rb:13:in `block in <main>'"]
+ * p f.backtrace(1) # start from the item 1
+ * #=> ["test.rb:2:in `level3'", "test.rb:6:in `level2'", "test.rb:10:in `level1'", "test.rb:13:in `block in <main>'"]
+ * p f.backtrace(2, 2) # start from item 2, take 2
+ * #=> ["test.rb:6:in `level2'", "test.rb:10:in `level1'"]
+ * p f.backtrace(1..3) # take items from 1 to 3
+ * #=> ["test.rb:2:in `level3'", "test.rb:6:in `level2'", "test.rb:10:in `level1'"]
+ *
+ * f.resume
+ *
+ * # It is nil after the fiber is finished
+ * f.backtrace
+ * #=> nil
+ *
+ */
+static VALUE
+rb_fiber_backtrace(int argc, VALUE *argv, VALUE fiber)
+{
+ return rb_vm_backtrace(argc, argv, &fiber_ptr(fiber)->cont.saved_ec);
+}
+
+/*
+ * call-seq:
+ * fiber.backtrace_locations -> array
+ * fiber.backtrace_locations(start) -> array
+ * fiber.backtrace_locations(start, count) -> array
+ * fiber.backtrace_locations(start..end) -> array
+ *
+ * Like #backtrace, but returns each line of the execution stack as a
+ * Thread::Backtrace::Location. Accepts the same arguments as #backtrace.
+ *
+ * f = Fiber.new { Fiber.yield }
+ * f.resume
+ * loc = f.backtrace_locations.first
+ * loc.label #=> "yield"
+ * loc.path #=> "test.rb"
+ * loc.lineno #=> 1
+ *
+ *
*/
static VALUE
-rb_fiber_m_resume(int argc, VALUE *argv, VALUE fib)
+rb_fiber_backtrace_locations(int argc, VALUE *argv, VALUE fiber)
{
- return rb_fiber_resume(fib, argc, argv);
+ return rb_vm_backtrace_locations(argc, argv, &fiber_ptr(fiber)->cont.saved_ec);
}
/*
@@ -1576,51 +3117,105 @@ rb_fiber_m_resume(int argc, VALUE *argv, VALUE fib)
* Transfer control to another fiber, resuming it from where it last
* stopped or starting it if it was not resumed before. The calling
* fiber will be suspended much like in a call to
- * <code>Fiber.yield</code>. You need to <code>require 'fiber'</code>
- * before using this method.
+ * Fiber.yield.
*
- * The fiber which receives the transfer call is treats it much like
+ * The fiber which receives the transfer call treats it much like
* a resume call. Arguments passed to transfer are treated like those
* passed to resume.
*
- * You cannot resume a fiber that transferred control to another one.
- * This will cause a double resume error. You need to transfer control
- * back to this fiber before it can yield and resume.
+ * The two style of control passing to and from fiber (one is #resume and
+ * Fiber::yield, another is #transfer to and from fiber) can't be freely
+ * mixed.
+ *
+ * * If the Fiber's lifecycle had started with transfer, it will never
+ * be able to yield or be resumed control passing, only
+ * finish or transfer back. (It still can resume other fibers that
+ * are allowed to be resumed.)
+ * * If the Fiber's lifecycle had started with resume, it can yield
+ * or transfer to another Fiber, but can receive control back only
+ * the way compatible with the way it was given away: if it had
+ * transferred, it only can be transferred back, and if it had
+ * yielded, it only can be resumed back. After that, it again can
+ * transfer or yield.
+ *
+ * If those rules are broken FiberError is raised.
+ *
+ * For an individual Fiber design, yield/resume is easier to use
+ * (the Fiber just gives away control, it doesn't need to think
+ * about who the control is given to), while transfer is more flexible
+ * for complex cases, allowing to build arbitrary graphs of Fibers
+ * dependent on each other.
+ *
*
* Example:
*
- * fiber1 = Fiber.new do
- * puts "In Fiber 1"
- * Fiber.yield
- * end
+ * manager = nil # For local var to be visible inside worker block
*
- * fiber2 = Fiber.new do
- * puts "In Fiber 2"
- * fiber1.transfer
- * puts "Never see this message"
- * end
+ * # This fiber would be started with transfer
+ * # It can't yield, and can't be resumed
+ * worker = Fiber.new { |work|
+ * puts "Worker: starts"
+ * puts "Worker: Performed #{work.inspect}, transferring back"
+ * # Fiber.yield # this would raise FiberError: attempt to yield on a not resumed fiber
+ * # manager.resume # this would raise FiberError: attempt to resume a resumed fiber (double resume)
+ * manager.transfer(work.capitalize)
+ * }
*
- * fiber3 = Fiber.new do
- * puts "In Fiber 3"
- * end
+ * # This fiber would be started with resume
+ * # It can yield or transfer, and can be transferred
+ * # back or resumed
+ * manager = Fiber.new {
+ * puts "Manager: starts"
+ * puts "Manager: transferring 'something' to worker"
+ * result = worker.transfer('something')
+ * puts "Manager: worker returned #{result.inspect}"
+ * # worker.resume # this would raise FiberError: attempt to resume a transferring fiber
+ * Fiber.yield # this is OK, the fiber transferred from and to, now it can yield
+ * puts "Manager: finished"
+ * }
*
- * fiber2.resume
- * fiber3.resume
+ * puts "Starting the manager"
+ * manager.resume
+ * puts "Resuming the manager"
+ * # manager.transfer # this would raise FiberError: attempt to transfer to a yielding fiber
+ * manager.resume
*
* <em>produces</em>
*
- * In fiber 2
- * In fiber 1
- * In fiber 3
+ * Starting the manager
+ * Manager: starts
+ * Manager: transferring 'something' to worker
+ * Worker: starts
+ * Worker: Performed "something", transferring back
+ * Manager: worker returned "Something"
+ * Resuming the manager
+ * Manager: finished
*
*/
static VALUE
-rb_fiber_m_transfer(int argc, VALUE *argv, VALUE fibval)
+rb_fiber_m_transfer(int argc, VALUE *argv, VALUE self)
+{
+ return rb_fiber_transfer_kw(self, argc, argv, rb_keyword_given_p());
+}
+
+static VALUE
+fiber_transfer_kw(rb_fiber_t *fiber, int argc, const VALUE *argv, int kw_splat)
+{
+ if (fiber->resuming_fiber) {
+ rb_raise(rb_eFiberError, "attempt to transfer to a resuming fiber");
+ }
+
+ if (fiber->yielding) {
+ rb_raise(rb_eFiberError, "attempt to transfer to a yielding fiber");
+ }
+
+ return fiber_switch(fiber, argc, argv, kw_splat, NULL, false);
+}
+
+VALUE
+rb_fiber_transfer_kw(VALUE self, int argc, const VALUE *argv, int kw_splat)
{
- rb_fiber_t *fib;
- GetFiberPtr(fibval, fib);
- fib->transferred = 1;
- return fiber_switch(fib, argc, argv, 0);
+ return fiber_transfer_kw(fiber_ptr(self), argc, argv, kw_splat);
}
/*
@@ -1629,22 +3224,126 @@ rb_fiber_m_transfer(int argc, VALUE *argv, VALUE fibval)
*
* Yields control back to the context that resumed the fiber, passing
* along any arguments that were passed to it. The fiber will resume
- * processing at this point when <code>resume</code> is called next.
- * Any arguments passed to the next <code>resume</code> will be the
- * value that this <code>Fiber.yield</code> expression evaluates to.
+ * processing at this point when #resume is called next.
+ * Any arguments passed to the next #resume will be the value that
+ * this Fiber.yield expression evaluates to.
*/
static VALUE
rb_fiber_s_yield(int argc, VALUE *argv, VALUE klass)
{
- return rb_fiber_yield(argc, argv);
+ return rb_fiber_yield_kw(argc, argv, rb_keyword_given_p());
+}
+
+static VALUE
+fiber_raise(rb_fiber_t *fiber, VALUE exception)
+{
+ if (fiber == fiber_current()) {
+ rb_exc_raise(exception);
+ }
+ else if (fiber->resuming_fiber) {
+ return fiber_raise(fiber->resuming_fiber, exception);
+ }
+ else if (FIBER_SUSPENDED_P(fiber) && !fiber->yielding) {
+ return fiber_transfer_kw(fiber, -1, &exception, RB_NO_KEYWORDS);
+ }
+ else {
+ return fiber_resume_kw(fiber, -1, &exception, RB_NO_KEYWORDS);
+ }
+}
+
+VALUE
+rb_fiber_raise(VALUE fiber, int argc, VALUE *argv)
+{
+ VALUE exception = rb_exception_setup(argc, argv);
+
+ return fiber_raise(fiber_ptr(fiber), exception);
}
/*
* call-seq:
- * Fiber.current() -> fiber
+ * raise(exception, message = exception.to_s, backtrace = nil, cause: $!)
+ * raise(message = nil, cause: $!)
+ *
+ * Raises an exception in the fiber at the point at which the last
+ * +Fiber.yield+ was called.
+ *
+ * f = Fiber.new {
+ * puts "Before the yield"
+ * Fiber.yield 1 # -- exception will be raised here
+ * puts "After the yield"
+ * }
*
- * Returns the current fiber. You need to <code>require 'fiber'</code>
- * before using this method. If you are not running in the context of
+ * p f.resume
+ * f.raise "Gotcha"
+ *
+ * Output
+ *
+ * Before the first yield
+ * 1
+ * t.rb:8:in 'Fiber.yield': Gotcha (RuntimeError)
+ * from t.rb:8:in 'block in <main>'
+ *
+ * If the fiber has not been started or has
+ * already run to completion, raises +FiberError+. If the fiber is
+ * yielding, it is resumed. If it is transferring, it is transferred into.
+ * But if it is resuming, raises +FiberError+.
+ *
+ * Raises +FiberError+ if called on a Fiber belonging to another +Thread+.
+ *
+ * See Kernel#raise for more information on arguments.
+ *
+ */
+static VALUE
+rb_fiber_m_raise(int argc, VALUE *argv, VALUE self)
+{
+ return rb_fiber_raise(self, argc, argv);
+}
+
+/*
+ * call-seq:
+ * fiber.kill -> nil
+ *
+ * Terminates the fiber by raising an uncatchable exception.
+ * It only terminates the given fiber and no other fiber, returning +nil+ to
+ * another fiber if that fiber was calling #resume or #transfer.
+ *
+ * <tt>Fiber#kill</tt> only interrupts another fiber when it is in Fiber.yield.
+ * If called on the current fiber then it raises that exception at the <tt>Fiber#kill</tt> call site.
+ *
+ * If the fiber has not been started, transition directly to the terminated state.
+ *
+ * If the fiber is already terminated, does nothing.
+ *
+ * Raises FiberError if called on a fiber belonging to another thread.
+ */
+static VALUE
+rb_fiber_m_kill(VALUE self)
+{
+ rb_fiber_t *fiber = fiber_ptr(self);
+
+ if (fiber->killed) return Qfalse;
+ fiber->killed = 1;
+
+ if (fiber->status == FIBER_CREATED) {
+ fiber->status = FIBER_TERMINATED;
+ }
+ else if (fiber->status != FIBER_TERMINATED) {
+ if (fiber_current() == fiber) {
+ fiber_check_killed(fiber);
+ }
+ else {
+ fiber_raise(fiber_ptr(self), Qnil);
+ }
+ }
+
+ return self;
+}
+
+/*
+ * call-seq:
+ * Fiber.current -> fiber
+ *
+ * Returns the current fiber. If you are not running in the context of
* a fiber this method will return the root fiber.
*/
static VALUE
@@ -1653,7 +3352,113 @@ rb_fiber_s_current(VALUE klass)
return rb_fiber_current();
}
+static VALUE
+fiber_to_s(VALUE fiber_value)
+{
+ const rb_fiber_t *fiber = fiber_ptr(fiber_value);
+ const rb_proc_t *proc;
+ char status_info[0x20];
+
+ if (fiber->resuming_fiber) {
+ snprintf(status_info, 0x20, " (%s by resuming)", fiber_status_name(fiber->status));
+ }
+ else {
+ snprintf(status_info, 0x20, " (%s)", fiber_status_name(fiber->status));
+ }
+
+ if (!rb_obj_is_proc(fiber->first_proc)) {
+ VALUE str = rb_any_to_s(fiber_value);
+ strlcat(status_info, ">", sizeof(status_info));
+ rb_str_set_len(str, RSTRING_LEN(str)-1);
+ rb_str_cat_cstr(str, status_info);
+ return str;
+ }
+ GetProcPtr(fiber->first_proc, proc);
+ return rb_block_to_s(fiber_value, &proc->block, status_info);
+}
+
+#ifdef HAVE_WORKING_FORK
+void
+rb_fiber_atfork(rb_thread_t *th)
+{
+ if (th->root_fiber) {
+ if (&th->root_fiber->cont.saved_ec != th->ec) {
+ th->root_fiber = th->ec->fiber_ptr;
+ }
+ th->root_fiber->prev = 0;
+ th->root_fiber->blocking = 1;
+ th->blocking = 1;
+ }
+}
+#endif
+
+#ifdef RB_EXPERIMENTAL_FIBER_POOL
+static void
+fiber_pool_free(void *ptr)
+{
+ struct fiber_pool * fiber_pool = ptr;
+ RUBY_FREE_ENTER("fiber_pool");
+
+ fiber_pool_allocation_free(fiber_pool->allocations);
+ ruby_xfree(fiber_pool);
+
+ RUBY_FREE_LEAVE("fiber_pool");
+}
+
+static size_t
+fiber_pool_memsize(const void *ptr)
+{
+ const struct fiber_pool * fiber_pool = ptr;
+ size_t size = sizeof(*fiber_pool);
+
+ size += fiber_pool->count * fiber_pool->size;
+
+ return size;
+}
+
+static const rb_data_type_t FiberPoolDataType = {
+ "fiber_pool",
+ {NULL, fiber_pool_free, fiber_pool_memsize,},
+ 0, 0, RUBY_TYPED_FREE_IMMEDIATELY
+};
+
+static VALUE
+fiber_pool_alloc(VALUE klass)
+{
+ struct fiber_pool *fiber_pool;
+
+ return TypedData_Make_Struct(klass, struct fiber_pool, &FiberPoolDataType, fiber_pool);
+}
+
+static VALUE
+rb_fiber_pool_initialize(int argc, VALUE* argv, VALUE self)
+{
+ rb_thread_t *th = GET_THREAD();
+ VALUE size = Qnil, count = Qnil, vm_stack_size = Qnil;
+ struct fiber_pool * fiber_pool = NULL;
+ // Maybe these should be keyword arguments.
+ rb_scan_args(argc, argv, "03", &size, &count, &vm_stack_size);
+
+ if (NIL_P(size)) {
+ size = SIZET2NUM(th->vm->default_params.fiber_machine_stack_size);
+ }
+
+ if (NIL_P(count)) {
+ count = INT2NUM(128);
+ }
+
+ if (NIL_P(vm_stack_size)) {
+ vm_stack_size = SIZET2NUM(th->vm->default_params.fiber_vm_stack_size);
+ }
+
+ TypedData_Get_Struct(self, struct fiber_pool, &FiberPoolDataType, fiber_pool);
+
+ fiber_pool_initialize(fiber_pool, NUM2SIZET(size), NUM2SIZET(count), NUM2SIZET(vm_stack_size));
+
+ return self;
+}
+#endif
/*
* Document-class: FiberError
@@ -1671,8 +3476,10 @@ rb_fiber_s_current(VALUE klass)
void
Init_Cont(void)
{
-#if FIBER_USE_NATIVE
rb_thread_t *th = GET_THREAD();
+ size_t vm_stack_size = th->vm->default_params.fiber_vm_stack_size;
+ size_t machine_stack_size = th->vm->default_params.fiber_machine_stack_size;
+ size_t stack_size = machine_stack_size + vm_stack_size;
#ifdef _WIN32
SYSTEM_INFO info;
@@ -1681,15 +3488,73 @@ Init_Cont(void)
#else /* not WIN32 */
pagesize = sysconf(_SC_PAGESIZE);
#endif
- SET_MACHINE_STACK_END(&th->machine.stack_end);
-#endif
+ SET_MACHINE_STACK_END(&th->ec->machine.stack_end);
+
+ fiber_pool_initialize(&shared_fiber_pool, stack_size, FIBER_POOL_INITIAL_SIZE, vm_stack_size);
+
+ fiber_initialize_keywords[0] = rb_intern_const("blocking");
+ fiber_initialize_keywords[1] = rb_intern_const("pool");
+ fiber_initialize_keywords[2] = rb_intern_const("storage");
+
+ const char *fiber_shared_fiber_pool_free_stacks = getenv("RUBY_SHARED_FIBER_POOL_FREE_STACKS");
+ if (fiber_shared_fiber_pool_free_stacks) {
+ shared_fiber_pool.free_stacks = atoi(fiber_shared_fiber_pool_free_stacks);
+
+ if (shared_fiber_pool.free_stacks < 0) {
+ rb_warn("Setting RUBY_SHARED_FIBER_POOL_FREE_STACKS to a negative value is not allowed.");
+ shared_fiber_pool.free_stacks = 0;
+ }
+
+ if (shared_fiber_pool.free_stacks > 1) {
+ rb_warn("Setting RUBY_SHARED_FIBER_POOL_FREE_STACKS to a value greater than 1 is operating system specific, and may cause crashes.");
+ }
+ }
rb_cFiber = rb_define_class("Fiber", rb_cObject);
rb_define_alloc_func(rb_cFiber, fiber_alloc);
rb_eFiberError = rb_define_class("FiberError", rb_eStandardError);
rb_define_singleton_method(rb_cFiber, "yield", rb_fiber_s_yield, -1);
- rb_define_method(rb_cFiber, "initialize", rb_fiber_init, 0);
+ rb_define_singleton_method(rb_cFiber, "current", rb_fiber_s_current, 0);
+ rb_define_singleton_method(rb_cFiber, "blocking", rb_fiber_blocking, 0);
+ rb_define_singleton_method(rb_cFiber, "[]", rb_fiber_storage_aref, 1);
+ rb_define_singleton_method(rb_cFiber, "[]=", rb_fiber_storage_aset, 2);
+
+ rb_define_method(rb_cFiber, "initialize", rb_fiber_initialize, -1);
+ rb_define_method(rb_cFiber, "blocking?", rb_fiber_blocking_p, 0);
+ rb_define_method(rb_cFiber, "storage", rb_fiber_storage_get, 0);
+ rb_define_method(rb_cFiber, "storage=", rb_fiber_storage_set, 1);
rb_define_method(rb_cFiber, "resume", rb_fiber_m_resume, -1);
+ rb_define_method(rb_cFiber, "raise", rb_fiber_m_raise, -1);
+ rb_define_method(rb_cFiber, "kill", rb_fiber_m_kill, 0);
+ rb_define_method(rb_cFiber, "backtrace", rb_fiber_backtrace, -1);
+ rb_define_method(rb_cFiber, "backtrace_locations", rb_fiber_backtrace_locations, -1);
+ rb_define_method(rb_cFiber, "to_s", fiber_to_s, 0);
+ rb_define_alias(rb_cFiber, "inspect", "to_s");
+ rb_define_method(rb_cFiber, "transfer", rb_fiber_m_transfer, -1);
+ rb_define_method(rb_cFiber, "alive?", rb_fiber_alive_p, 0);
+
+ rb_define_singleton_method(rb_cFiber, "blocking?", rb_fiber_s_blocking_p, 0);
+ rb_define_singleton_method(rb_cFiber, "scheduler", rb_fiber_s_scheduler, 0);
+ rb_define_singleton_method(rb_cFiber, "set_scheduler", rb_fiber_set_scheduler, 1);
+ rb_define_singleton_method(rb_cFiber, "current_scheduler", rb_fiber_current_scheduler, 0);
+
+ rb_define_singleton_method(rb_cFiber, "schedule", rb_fiber_s_schedule, -1);
+
+ rb_thread_t *current_thread = rb_current_thread();
+ RUBY_ASSERT(CLASS_OF(current_thread->ec->fiber_ptr->cont.self) == 0);
+ *(VALUE *)&((struct RBasic *)current_thread->ec->fiber_ptr->cont.self)->klass = rb_cFiber;
+
+#ifdef RB_EXPERIMENTAL_FIBER_POOL
+ /*
+ * Document-class: Fiber::Pool
+ * :nodoc: experimental
+ */
+ rb_cFiberPool = rb_define_class_under(rb_cFiber, "Pool", rb_cObject);
+ rb_define_alloc_func(rb_cFiberPool, fiber_pool_alloc);
+ rb_define_method(rb_cFiberPool, "initialize", rb_fiber_pool_initialize, -1);
+#endif
+
+ rb_provide("fiber.so");
}
RUBY_SYMBOL_EXPORT_BEGIN
@@ -1705,12 +3570,4 @@ ruby_Init_Continuation_body(void)
rb_define_global_function("callcc", rb_callcc, 0);
}
-void
-ruby_Init_Fiber_as_Coroutine(void)
-{
- rb_define_method(rb_cFiber, "transfer", rb_fiber_m_transfer, -1);
- rb_define_method(rb_cFiber, "alive?", rb_fiber_alive_p, 0);
- rb_define_singleton_method(rb_cFiber, "current", rb_fiber_s_current, 0);
-}
-
RUBY_SYMBOL_EXPORT_END
diff --git a/coroutine/amd64/Context.S b/coroutine/amd64/Context.S
new file mode 100644
index 0000000000..4b94d31f30
--- /dev/null
+++ b/coroutine/amd64/Context.S
@@ -0,0 +1,88 @@
+##
+## This file is part of the "Coroutine" project and released under the MIT License.
+##
+## Created by Samuel Williams on 10/5/2018.
+## Copyright, 2018, by Samuel Williams.
+##
+
+/* Important - do _not_ include <cet.h> in this file; doing so will
+ * cause an incorrect .note.gnu.property section to be emitted. We have
+ * one at the bottom of this file */
+
+#define TOKEN_PASTE(x,y) x##y
+
+.text
+
+.globl PREFIXED_SYMBOL(coroutine_transfer)
+PREFIXED_SYMBOL(coroutine_transfer):
+
+#if defined(__CET__) && (__CET__ & 0x01) != 0
+ /* IBT landing pad */
+ endbr64
+#endif
+
+ # Make space on the stack for 6 registers:
+ subq $48, %rsp
+
+ # Save caller state:
+ movq %rbp, 40(%rsp)
+ movq %rbx, 32(%rsp)
+ movq %r12, 24(%rsp)
+ movq %r13, 16(%rsp)
+ movq %r14, 8(%rsp)
+ movq %r15, (%rsp)
+
+ # Save caller stack pointer:
+ movq %rsp, (%rdi)
+
+ # Restore callee stack pointer:
+ movq (%rsi), %rsp
+
+ # Restore callee state
+ movq 40(%rsp), %rbp
+ movq 32(%rsp), %rbx
+ movq 24(%rsp), %r12
+ movq 16(%rsp), %r13
+ movq 8(%rsp), %r14
+ movq (%rsp), %r15
+
+ # Adjust stack pointer back:
+ addq $48, %rsp
+
+ # Put the first argument into the return value:
+ movq %rdi, %rax
+
+ # We pop the return address and jump to it
+ ret
+
+#if (defined(__linux__) || defined(__FreeBSD__)) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
+
+#if defined(__ELF__)
+
+#if defined(__CET__) && (__CET__ & 0x01) != 0
+# define IBT_FLAG 0x01
+#else
+# define IBT_FLAG 0x00
+#endif
+
+/* We do _NOT_ support CET shadow-stack. Do _not_ add the property for
+ * this to the Context.o object. If you require CET shadow-stack support,
+ * for now, consider building with --with-coroutine=ucontext */
+#define SHSTK_FLAG 0x00
+
+.pushsection .note.gnu.property, "a"
+.p2align 3
+.long 0x4 /* Name size ("GNU\0") */
+.long 0x10 /* Descriptor size */
+.long 0x5 /* Type: NT_GNU_PROPERTY_TYPE_0 */
+.asciz "GNU" /* Name */
+# Begin descriptor
+.long 0xc0000002 /* Property type: GNU_PROPERTY_X86_FEATURE_1_AND */
+.long 0x4 /* Property size */
+.long (IBT_FLAG | SHSTK_FLAG)
+.long 0x0 /* 8-byte alignment padding */
+/* End descriptor */
+.popsection
+#endif
diff --git a/coroutine/amd64/Context.h b/coroutine/amd64/Context.h
new file mode 100644
index 0000000000..65aa638304
--- /dev/null
+++ b/coroutine/amd64/Context.h
@@ -0,0 +1,85 @@
+#ifndef COROUTINE_AMD64_CONTEXT_H
+#define COROUTINE_AMD64_CONTEXT_H 1
+
+/*
+ * This file is part of the "Coroutine" project and released under the MIT License.
+ *
+ * Created by Samuel Williams on 10/5/2018.
+ * Copyright, 2018, by Samuel Williams.
+*/
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#define COROUTINE __attribute__((noreturn)) void
+
+enum {COROUTINE_REGISTERS = 6};
+
+#if defined(__SANITIZE_ADDRESS__)
+ #define COROUTINE_SANITIZE_ADDRESS
+#elif defined(__has_feature)
+ #if __has_feature(address_sanitizer)
+ #define COROUTINE_SANITIZE_ADDRESS
+ #endif
+#endif
+
+#if defined(COROUTINE_SANITIZE_ADDRESS)
+#include <sanitizer/common_interface_defs.h>
+#include <sanitizer/asan_interface.h>
+#endif
+
+struct coroutine_context
+{
+ void **stack_pointer;
+ void *argument;
+
+#if defined(COROUTINE_SANITIZE_ADDRESS)
+ void *fake_stack;
+ void *stack_base;
+ size_t stack_size;
+#endif
+};
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ context->stack_pointer = NULL;
+}
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+#if defined(COROUTINE_SANITIZE_ADDRESS)
+ context->fake_stack = NULL;
+ context->stack_base = stack;
+ context->stack_size = size;
+#endif
+
+ // Stack grows down. Force 16-byte alignment.
+ char * top = (char*)stack + size;
+ context->stack_pointer = (void**)((uintptr_t)top & ~0xF);
+
+ *--context->stack_pointer = NULL;
+ *--context->stack_pointer = (void*)(uintptr_t)start;
+
+ context->stack_pointer -= COROUTINE_REGISTERS;
+ memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS);
+}
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target);
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+ context->stack_pointer = NULL;
+}
+
+#endif /* COROUTINE_AMD64_CONTEXT_H */
diff --git a/coroutine/arm32/Context.S b/coroutine/arm32/Context.S
new file mode 100644
index 0000000000..945e4f82d5
--- /dev/null
+++ b/coroutine/arm32/Context.S
@@ -0,0 +1,32 @@
+##
+## This file is part of the "Coroutine" project and released under the MIT License.
+##
+## Created by Samuel Williams on 10/5/2018.
+## Copyright, 2018, by Samuel Williams.
+##
+
+#define TOKEN_PASTE(x,y) x##y
+
+.file "Context.S"
+.text
+.globl PREFIXED_SYMBOL(coroutine_transfer)
+.align 2
+.type PREFIXED_SYMBOL(coroutine_transfer),%function
+.syntax unified
+
+PREFIXED_SYMBOL(coroutine_transfer):
+ # Save caller state (8 registers + return address)
+ push {r4-r11,lr}
+
+ # Save caller stack pointer
+ str sp, [r0]
+
+ # Restore callee stack pointer
+ ldr sp, [r1]
+
+ # Restore callee state (8 registers program counter)
+ pop {r4-r11,pc}
+
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
diff --git a/coroutine/arm32/Context.h b/coroutine/arm32/Context.h
new file mode 100644
index 0000000000..7529dd2efc
--- /dev/null
+++ b/coroutine/arm32/Context.h
@@ -0,0 +1,59 @@
+#ifndef COROUTINE_ARM32_CONTEXT_H
+#define COROUTINE_ARM32_CONTEXT_H 1
+
+/*
+ * This file is part of the "Coroutine" project and released under the MIT License.
+ *
+ * Created by Samuel Williams on 10/5/2018.
+ * Copyright, 2018, by Samuel Williams.
+*/
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#define COROUTINE __attribute__((noreturn)) void
+#define COROUTINE_LIMITED_ADDRESS_SPACE
+
+enum {COROUTINE_REGISTERS = 8};
+
+struct coroutine_context
+{
+ void **stack_pointer;
+ void *argument;
+};
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ context->stack_pointer = NULL;
+}
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ // Stack grows down. Force 16-byte alignment.
+ char * top = (char*)stack + size;
+ context->stack_pointer = (void**)((uintptr_t)top & ~0xF);
+
+ *--context->stack_pointer = (void*)(uintptr_t)start;
+
+ context->stack_pointer -= COROUTINE_REGISTERS;
+ memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS);
+}
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target);
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+}
+
+#endif /* COROUTINE_ARM32_CONTEXT_H */
diff --git a/coroutine/arm64/Context.S b/coroutine/arm64/Context.S
new file mode 100644
index 0000000000..ce219c0c4d
--- /dev/null
+++ b/coroutine/arm64/Context.S
@@ -0,0 +1,160 @@
+##
+## This file is part of the "Coroutine" project and released under the MIT License.
+##
+## Created by Samuel Williams on 10/5/2018.
+## Copyright, 2018, by Samuel Williams.
+##
+
+#define TOKEN_PASTE(x,y) x##y
+
+#if defined(__APPLE__)
+#define x29 fp
+#define x30 lr
+.text
+.p2align 2
+#else
+.text
+.align 2
+#endif
+
+#if defined(__ARM_FEATURE_PAC_DEFAULT) && (__ARM_FEATURE_PAC_DEFAULT & 0x02) != 0
+# error "-mbranch-protection flag specified b-key but Context.S does not support this"
+#endif
+
+#if defined(_WIN32)
+## Add more space for certain TEB values on each stack
+#define TEB_OFFSET 0x20
+#else
+#define TEB_OFFSET 0x00
+#endif
+
+## NOTE(PAC): Use we HINT mnemonics instead of PAC mnemonics to
+## keep compatibility with those assemblers that don't support PAC.
+##
+## See "Providing protection for complex software" for more details about PAC/BTI
+## https://developer.arm.com/architectures/learn-the-architecture/providing-protection-for-complex-software
+
+.global PREFIXED_SYMBOL(coroutine_transfer)
+PREFIXED_SYMBOL(coroutine_transfer):
+
+#if defined(__ARM_FEATURE_PAC_DEFAULT) && (__ARM_FEATURE_PAC_DEFAULT != 0)
+ # paciasp (it also acts as BTI landing pad, so no need to insert BTI also)
+ hint #25
+#elif defined(__ARM_FEATURE_BTI_DEFAULT) && (__ARM_FEATURE_BTI_DEFAULT != 0)
+ # For the case PAC is not enabled but BTI is.
+ # bti c
+ hint #34
+#endif
+ # Make space on the stack for caller registers
+ sub sp, sp, 0xa0 + TEB_OFFSET
+
+ # Save caller registers
+ stp d8, d9, [sp, 0x00 + TEB_OFFSET]
+ stp d10, d11, [sp, 0x10 + TEB_OFFSET]
+ stp d12, d13, [sp, 0x20 + TEB_OFFSET]
+ stp d14, d15, [sp, 0x30 + TEB_OFFSET]
+ stp x19, x20, [sp, 0x40 + TEB_OFFSET]
+ stp x21, x22, [sp, 0x50 + TEB_OFFSET]
+ stp x23, x24, [sp, 0x60 + TEB_OFFSET]
+ stp x25, x26, [sp, 0x70 + TEB_OFFSET]
+ stp x27, x28, [sp, 0x80 + TEB_OFFSET]
+ stp x29, x30, [sp, 0x90 + TEB_OFFSET]
+
+#if defined(_WIN32)
+ # Save certain values from Thread Environment Block (TEB)
+ # x18 points to the TEB on Windows
+ # Read TeStackBase and TeStackLimit at ksarm64.h from TEB
+ ldp x5, x6, [x18, #0x08]
+ # Save them
+ stp x5, x6, [sp, #0x00]
+ # Read TeDeallocationStack at ksarm64.h from TEB
+ ldr x5, [x18, #0x1478]
+ # Read TeFiberData at ksarm64.h from TEB
+ ldr x6, [x18, #0x20]
+ # Save current fiber data and deallocation stack
+ stp x5, x6, [sp, #0x10]
+#endif
+
+ # Save stack pointer to x0 (first argument)
+ mov x2, sp
+ str x2, [x0, 0]
+
+ # Load stack pointer from x1 (second argument)
+ ldr x3, [x1, 0]
+ mov sp, x3
+
+#if defined(_WIN32)
+ # Restore stack base and limit
+ ldp x5, x6, [sp, #0x00]
+ # Write TeStackBase and TeStackLimit at ksarm64.h to TEB
+ stp x5, x6, [x18, #0x08]
+ # Restore fiber data and deallocation stack
+ ldp x5, x6, [sp, #0x10]
+ # Write TeDeallocationStack at ksarm64.h to TEB
+ str x5, [x18, #0x1478]
+ # Write TeFiberData at ksarm64.h to TEB
+ str x6, [x18, #0x20]
+#endif
+
+ # Restore caller registers
+ ldp d8, d9, [sp, 0x00 + TEB_OFFSET]
+ ldp d10, d11, [sp, 0x10 + TEB_OFFSET]
+ ldp d12, d13, [sp, 0x20 + TEB_OFFSET]
+ ldp d14, d15, [sp, 0x30 + TEB_OFFSET]
+ ldp x19, x20, [sp, 0x40 + TEB_OFFSET]
+ ldp x21, x22, [sp, 0x50 + TEB_OFFSET]
+ ldp x23, x24, [sp, 0x60 + TEB_OFFSET]
+ ldp x25, x26, [sp, 0x70 + TEB_OFFSET]
+ ldp x27, x28, [sp, 0x80 + TEB_OFFSET]
+ ldp x29, x30, [sp, 0x90 + TEB_OFFSET]
+
+ # Pop stack frame
+ add sp, sp, 0xa0 + TEB_OFFSET
+
+#if defined(__ARM_FEATURE_PAC_DEFAULT) && (__ARM_FEATURE_PAC_DEFAULT != 0)
+ # autiasp: Authenticate x30 (LR) with SP and key A
+ hint #29
+#endif
+
+ # Jump to return address (in x30)
+ ret
+
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
+
+#if (defined(__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT != 0) || (defined(__ARM_FEATURE_PAC_DEFAULT) && __ARM_FEATURE_PAC_DEFAULT != 0)
+#if defined(__ELF__)
+/* See "ELF for the Arm 64-bit Architecture (AArch64)"
+ https://github.com/ARM-software/abi-aa/blob/2023Q3/aaelf64/aaelf64.rst#program-property */
+# define GNU_PROPERTY_AARCH64_FEATURE_1_BTI (1<<0)
+# define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1<<1)
+
+# if defined(__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT != 0
+# define BTI_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_BTI
+# else
+# define BTI_FLAG 0
+# endif
+# if defined(__ARM_FEATURE_PAC_DEFAULT) && __ARM_FEATURE_PAC_DEFAULT != 0
+# define PAC_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_PAC
+# else
+# define PAC_FLAG 0
+# endif
+
+ # The note section format is described by Note Section in Chapter 5
+ # of "System V Application Binary Interface, Edition 4.1".
+ .pushsection .note.gnu.property, "a"
+ .p2align 3
+ .long 0x4 /* Name size ("GNU\0") */
+ .long 0x10 /* Descriptor size */
+ .long 0x5 /* Type: NT_GNU_PROPERTY_TYPE_0 */
+ .asciz "GNU" /* Name */
+ # Begin descriptor
+ .long 0xc0000000 /* Property type: GNU_PROPERTY_AARCH64_FEATURE_1_AND */
+ .long 0x4 /* Property size */
+ .long (BTI_FLAG|PAC_FLAG)
+ .long 0x0 /* 8-byte alignment padding */
+ # End descriptor
+ .popsection
+#endif
+#endif
diff --git a/coroutine/arm64/Context.asm b/coroutine/arm64/Context.asm
new file mode 100644
index 0000000000..866fa628e7
--- /dev/null
+++ b/coroutine/arm64/Context.asm
@@ -0,0 +1,81 @@
+ TTL coroutine/arm64/Context.asm
+
+ AREA |.drectve|, DRECTVE
+
+ EXPORT |coroutine_transfer|
+
+ AREA |.text$mn|, CODE, ARM64
+
+;; Add more space for certain TEB values on each stack
+TEB_OFFSET EQU 0x20
+
+;; Incomplete implementation
+coroutine_transfer PROC
+ ; Make space on the stack for caller registers
+ sub sp, sp, 0xa0 + TEB_OFFSET
+
+ ; Save caller registers
+ stp d8, d9, [sp, 0x00 + TEB_OFFSET]
+ stp d10, d11, [sp, 0x10 + TEB_OFFSET]
+ stp d12, d13, [sp, 0x20 + TEB_OFFSET]
+ stp d14, d15, [sp, 0x30 + TEB_OFFSET]
+ stp x19, x20, [sp, 0x40 + TEB_OFFSET]
+ stp x21, x22, [sp, 0x50 + TEB_OFFSET]
+ stp x23, x24, [sp, 0x60 + TEB_OFFSET]
+ stp x25, x26, [sp, 0x70 + TEB_OFFSET]
+ stp x27, x28, [sp, 0x80 + TEB_OFFSET]
+ stp x29, x30, [sp, 0x90 + TEB_OFFSET]
+
+ ;; Save certain values from Thread Environment Block (TEB) x18
+ ;; points to the TEB on Windows
+ ;; Read TeStackBase and TeStackLimit at ksarm64.h from TEB
+ ldp x5, x6, [x18, #0x08]
+ ;; Save them
+ stp x5, x6, [sp, #0x00]
+ ;; Read TeDeallocationStack at ksarm64.h from TEB
+ ldr x5, [x18, #0x1478]
+ ;; Read TeFiberData at ksarm64.h from TEB
+ ldr x6, [x18, #0x20]
+ ;; Save current fiber data and deallocation stack
+ stp x5, x6, [sp, #0x10]
+
+ ; Save stack pointer to x0 (first argument)
+ mov x2, sp
+ str x2, [x0, 0]
+
+ ; Load stack pointer from x1 (second argument)
+ ldr x3, [x1, 0]
+ mov sp, x3
+
+ ;; Restore stack base and limit
+ ldp x5, x6, [sp, #0x00]
+ ;; Write TeStackBase and TeStackLimit at ksarm64.h to TEB
+ stp x5, x6, [x18, #0x08]
+ ;; Restore fiber data and deallocation stack
+ ldp x5, x6, [sp, #0x10]
+ ;; Write TeDeallocationStack at ksarm64.h to TEB
+ str x5, [x18, #0x1478]
+ ;; Write TeFiberData at ksarm64.h to TEB
+ str x6, [x18, #0x20]
+
+ ; Restore caller registers
+ ldp d8, d9, [sp, 0x00 + TEB_OFFSET]
+ ldp d10, d11, [sp, 0x10 + TEB_OFFSET]
+ ldp d12, d13, [sp, 0x20 + TEB_OFFSET]
+ ldp d14, d15, [sp, 0x30 + TEB_OFFSET]
+ ldp x19, x20, [sp, 0x40 + TEB_OFFSET]
+ ldp x21, x22, [sp, 0x50 + TEB_OFFSET]
+ ldp x23, x24, [sp, 0x60 + TEB_OFFSET]
+ ldp x25, x26, [sp, 0x70 + TEB_OFFSET]
+ ldp x27, x28, [sp, 0x80 + TEB_OFFSET]
+ ldp x29, x30, [sp, 0x90 + TEB_OFFSET]
+
+ ; Pop stack frame
+ add sp, sp, 0xa0 + TEB_OFFSET
+
+ ; Jump to return address (in x30)
+ ret
+
+ endp
+
+ end
diff --git a/coroutine/arm64/Context.h b/coroutine/arm64/Context.h
new file mode 100644
index 0000000000..468e4155b2
--- /dev/null
+++ b/coroutine/arm64/Context.h
@@ -0,0 +1,118 @@
+#ifndef COROUTINE_ARM64_CONTEXT_H
+#define COROUTINE_ARM64_CONTEXT_H 1
+
+/*
+ * This file is part of the "Coroutine" project and released under the MIT License.
+ *
+ * Created by Samuel Williams on 10/5/2018.
+ * Copyright, 2018, by Samuel Williams.
+*/
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#if defined __GNUC__
+#define COROUTINE __attribute__((noreturn)) void
+#define COROUTINE_DECL COROUTINE
+#elif defined _MSC_VER
+#define COROUTINE __declspec(noreturn) void
+#define COROUTINE_DECL void
+#endif
+
+#if defined(_WIN32)
+#define TEB_OFFSET 0x20
+#else
+#define TEB_OFFSET 0x00
+#endif
+
+enum {COROUTINE_REGISTERS = (0xa0 + TEB_OFFSET) / 8};
+
+#if defined(__SANITIZE_ADDRESS__)
+ #define COROUTINE_SANITIZE_ADDRESS
+#elif defined(__has_feature)
+ #if __has_feature(address_sanitizer)
+ #define COROUTINE_SANITIZE_ADDRESS
+ #endif
+#endif
+
+#if defined(COROUTINE_SANITIZE_ADDRESS)
+#include <sanitizer/common_interface_defs.h>
+#include <sanitizer/asan_interface.h>
+#endif
+
+struct coroutine_context
+{
+ void **stack_pointer;
+ void *argument;
+
+#if defined(COROUTINE_SANITIZE_ADDRESS)
+ void *fake_stack;
+ void *stack_base;
+ size_t stack_size;
+#endif
+};
+
+typedef COROUTINE_DECL(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ context->stack_pointer = NULL;
+}
+
+static inline void *ptrauth_sign_instruction_addr(void *addr, void *modifier) {
+#if defined(__ARM_FEATURE_PAC_DEFAULT) && __ARM_FEATURE_PAC_DEFAULT != 0
+ // Sign the given instruction address with the given modifier and key A
+ register void *r17 __asm("r17") = addr;
+ register void *r16 __asm("r16") = modifier;
+ // Use HINT mnemonic instead of PACIA1716 for compatibility with older assemblers.
+ __asm ("hint #8;" : "+r"(r17) : "r"(r16));
+ addr = r17;
+#else
+ // No-op if PAC is not enabled
+#endif
+ return addr;
+}
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+#if defined(COROUTINE_SANITIZE_ADDRESS)
+ context->fake_stack = NULL;
+ context->stack_base = stack;
+ context->stack_size = size;
+#endif
+
+ // Stack grows down. Force 16-byte alignment.
+ char * top = (char*)stack + size;
+ top = (char *)((uintptr_t)top & ~0xF);
+ context->stack_pointer = (void**)top;
+
+ context->stack_pointer -= COROUTINE_REGISTERS;
+ memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS);
+
+ void *addr = (void*)(uintptr_t)start;
+ context->stack_pointer[(0x98 + TEB_OFFSET) / 8] = ptrauth_sign_instruction_addr(addr, (void*)top);
+#if defined(_WIN32)
+ // save top address of stack as base in TEB
+ context->stack_pointer[0x00 / 8] = (char*)stack + size;
+ // save botton address of stack as limit and deallocation stack in TEB
+ context->stack_pointer[0x08 / 8] = stack;
+ context->stack_pointer[0x10 / 8] = stack;
+#endif
+}
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target);
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+}
+
+#endif /* COROUTINE_ARM64_CONTEXT_H */
diff --git a/coroutine/asyncify/Context.c b/coroutine/asyncify/Context.c
new file mode 100644
index 0000000000..303e5f4429
--- /dev/null
+++ b/coroutine/asyncify/Context.c
@@ -0,0 +1,10 @@
+#include "Context.h"
+
+void coroutine_trampoline(void * _start, void * _context)
+{
+ coroutine_start start = (coroutine_start)_start;
+ struct coroutine_context * context = _context;
+ rb_wasm_set_stack_pointer(context->current_sp);
+
+ start(context->from, context);
+}
diff --git a/coroutine/asyncify/Context.h b/coroutine/asyncify/Context.h
new file mode 100644
index 0000000000..71791a4004
--- /dev/null
+++ b/coroutine/asyncify/Context.h
@@ -0,0 +1,93 @@
+#ifndef COROUTINE_ASYNCIFY_CONTEXT_H
+#define COROUTINE_ASYNCIFY_CONTEXT_H
+
+/*
+ This is a coroutine implementation based on Binaryen's Asyncify transformation for WebAssembly.
+
+ This implementation is built on low-level ucontext-like API in wasm/fiber.c
+ This file is an adapter for the common coroutine interface and for stack manipulation.
+ wasm/fiber.c doesn't take care of stack to avoid duplicate management with this adapter.
+
+ * See also: wasm/fiber.c
+*/
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdint.h>
+#include "wasm/asyncify.h"
+#include "wasm/machine.h"
+#include "wasm/fiber.h"
+
+#define COROUTINE void __attribute__((__noreturn__))
+
+static const int ASYNCIFY_CORO_DEBUG = 0;
+
+struct coroutine_context
+{
+ rb_wasm_fiber_context fc;
+ void *argument;
+ struct coroutine_context *from;
+
+ void *current_sp;
+ void *stack_base;
+ size_t size;
+};
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+COROUTINE coroutine_trampoline(void * _start, void * _context);
+
+static inline void coroutine_initialize_main(struct coroutine_context * context)
+{
+ if (ASYNCIFY_CORO_DEBUG) fprintf(stderr, "[%s] entry (context = %p)\n", __func__, context);
+ // NULL fiber entry means it's the main fiber, and handled specially.
+ rb_wasm_init_context(&context->fc, NULL, NULL, NULL);
+ // mark the main fiber has already started
+ context->fc.is_started = true;
+}
+
+static inline void coroutine_initialize(struct coroutine_context *context, coroutine_start start, void *stack, size_t size)
+{
+ // Linear stack pointer must be always aligned down to 16 bytes.
+ // https://github.com/WebAssembly/tool-conventions/blob/c74267a5897c1bdc9aa60adeaf41816387d3cd12/BasicCABI.md#the-linear-stack
+ uintptr_t sp = ((uintptr_t)stack + size) & ~0xF;
+ if (ASYNCIFY_CORO_DEBUG) fprintf(stderr, "[%s] entry (context = %p, stack = %p ... %p)\n", __func__, context, stack, (char *)sp);
+ rb_wasm_init_context(&context->fc, coroutine_trampoline, start, context);
+ // record the initial stack pointer position to restore it after resumption
+ context->current_sp = (char *)sp;
+ context->stack_base = stack;
+ context->size = size;
+}
+
+static inline struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target)
+{
+ if (ASYNCIFY_CORO_DEBUG) fprintf(stderr, "[%s] entry (current = %p, target = %p)\n", __func__, current, target);
+ struct coroutine_context * previous = target->from;
+
+ target->from = current;
+ if (ASYNCIFY_CORO_DEBUG) fprintf(stderr, "[%s] current->current_sp = %p -> %p\n", __func__, current->current_sp, rb_wasm_get_stack_pointer());
+ // record the current stack pointer position to restore it after resumption
+ current->current_sp = rb_wasm_get_stack_pointer();
+
+ // suspend the current coroutine and resume another coroutine
+
+ rb_wasm_swapcontext(&current->fc, &target->fc);
+
+ // after the original coroutine resumed
+
+ rb_wasm_set_stack_pointer(current->current_sp);
+
+ target->from = previous;
+
+ return target;
+}
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+ if (ASYNCIFY_CORO_DEBUG) fprintf(stderr, "[%s] entry (context = %p)\n", __func__, context);
+ context->stack_base = NULL;
+ context->size = 0;
+ context->from = NULL;
+}
+
+#endif /* COROUTINE_ASYNCIFY_CONTEXT_H */
diff --git a/coroutine/emscripten/Context.c b/coroutine/emscripten/Context.c
new file mode 100644
index 0000000000..75c088daaa
--- /dev/null
+++ b/coroutine/emscripten/Context.c
@@ -0,0 +1,8 @@
+#include "Context.h"
+
+void coroutine_trampoline(void * _context)
+{
+ struct coroutine_context * context = _context;
+
+ context->entry_func(context->from, context);
+}
diff --git a/coroutine/emscripten/Context.h b/coroutine/emscripten/Context.h
new file mode 100644
index 0000000000..361e241685
--- /dev/null
+++ b/coroutine/emscripten/Context.h
@@ -0,0 +1,77 @@
+#ifndef COROUTINE_EMSCRIPTEN_CONTEXT_H
+#define COROUTINE_EMSCRIPTEN_CONTEXT_H 1
+
+/* An experimental coroutine wrapper for emscripten
+ * Contact on Yusuke Endoh if you encounter any problem about this
+ */
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <emscripten/fiber.h>
+
+#define COROUTINE __attribute__((noreturn)) void
+
+#if INTPTR_MAX <= INT32_MAX
+#define COROUTINE_LIMITED_ADDRESS_SPACE
+#endif
+
+struct coroutine_context;
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+struct coroutine_context
+{
+ emscripten_fiber_t state;
+ coroutine_start entry_func;
+ struct coroutine_context * from;
+ void *argument;
+};
+
+COROUTINE coroutine_trampoline(void * _context);
+
+#define MAIN_ASYNCIFY_STACK_SIZE 65536
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ static char asyncify_stack[MAIN_ASYNCIFY_STACK_SIZE];
+ emscripten_fiber_init_from_current_context(&context->state, asyncify_stack, MAIN_ASYNCIFY_STACK_SIZE);
+}
+#undef MAIN_ASYNCIFY_STACK_SIZE
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ uintptr_t addr = (uintptr_t)stack;
+ size_t offset = addr & 0xF;
+ void *c_stack = (void*)((addr + 0xF) & ~0xF);
+ size -= offset;
+ size_t c_stack_size = (size / 2) & ~0xF;
+ void *asyncify_stack = (void*)((uintptr_t)c_stack + c_stack_size);
+ size_t asyncify_stack_size = size - c_stack_size;
+ context->entry_func = start;
+
+ emscripten_fiber_init(&context->state, coroutine_trampoline, context, c_stack, c_stack_size, asyncify_stack, asyncify_stack_size);
+}
+
+static inline struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target)
+{
+ struct coroutine_context * previous = target->from;
+
+ target->from = current;
+ emscripten_fiber_swap(&current->state, &target->state);
+ target->from = previous;
+
+ return target;
+}
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+ context->from = NULL;
+}
+
+#endif /* COROUTINE_EMSCRIPTEN_CONTEXT_H */
diff --git a/coroutine/loongarch64/Context.S b/coroutine/loongarch64/Context.S
new file mode 100644
index 0000000000..6e10cd032b
--- /dev/null
+++ b/coroutine/loongarch64/Context.S
@@ -0,0 +1,72 @@
+#define TOKEN_PASTE(x,y) x##y
+
+.text
+.align 2
+
+.global PREFIXED_SYMBOL(coroutine_transfer)
+PREFIXED_SYMBOL(coroutine_transfer):
+
+ # Make space on the stack for caller registers
+ addi.d $sp, $sp, -0xa0
+
+ # Save caller registers
+ st.d $s0, $sp, 0x00
+ st.d $s1, $sp, 0x08
+ st.d $s2, $sp, 0x10
+ st.d $s3, $sp, 0x18
+ st.d $s4, $sp, 0x20
+ st.d $s5, $sp, 0x28
+ st.d $s6, $sp, 0x30
+ st.d $s7, $sp, 0x38
+ st.d $s8, $sp, 0x40
+ st.d $fp, $sp, 0x48
+ fst.d $fs0, $sp, 0x50
+ fst.d $fs1, $sp, 0x58
+ fst.d $fs2, $sp, 0x60
+ fst.d $fs3, $sp, 0x68
+ fst.d $fs4, $sp, 0x70
+ fst.d $fs5, $sp, 0x78
+ fst.d $fs6, $sp, 0x80
+ fst.d $fs7, $sp, 0x88
+
+ # Save return address
+ st.d $ra, $sp, 0x90
+
+ # Save stack pointer to a0 (first argument)
+ st.d $sp, $a0, 0x00
+
+ # Load stack pointer from a1 (second argument)
+ ld.d $sp, $a1, 0x00
+
+ # Restore caller registers
+ ld.d $s0, $sp, 0x00
+ ld.d $s1, $sp, 0x08
+ ld.d $s2, $sp, 0x10
+ ld.d $s3, $sp, 0x18
+ ld.d $s4, $sp, 0x20
+ ld.d $s5, $sp, 0x28
+ ld.d $s6, $sp, 0x30
+ ld.d $s7, $sp, 0x38
+ ld.d $s8, $sp, 0x40
+ ld.d $fp, $sp, 0x48
+ fld.d $fs0, $sp, 0x50
+ fld.d $fs1, $sp, 0x58
+ fld.d $fs2, $sp, 0x60
+ fld.d $fs3, $sp, 0x68
+ fld.d $fs4, $sp, 0x70
+ fld.d $fs5, $sp, 0x78
+ fld.d $fs6, $sp, 0x80
+ fld.d $fs7, $sp, 0x88
+
+ # Load return address
+ ld.d $ra, $sp, 0x90
+
+ # Pop stack frame
+ addi.d $sp, $sp, 0xa0
+
+ # Jump to return address
+ jr $ra
+
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
diff --git a/coroutine/loongarch64/Context.h b/coroutine/loongarch64/Context.h
new file mode 100644
index 0000000000..82b85b36e9
--- /dev/null
+++ b/coroutine/loongarch64/Context.h
@@ -0,0 +1,46 @@
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#define COROUTINE __attribute__((noreturn)) void
+
+enum {COROUTINE_REGISTERS = 0xa0 / 8};
+
+struct coroutine_context
+{
+ void **stack_pointer;
+ void *argument;
+};
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ context->stack_pointer = NULL;
+}
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ // Stack grows down. Force 16-byte alignment.
+ char * top = (char*)stack + size;
+ context->stack_pointer = (void**)((uintptr_t)top & ~0xF);
+
+ context->stack_pointer -= COROUTINE_REGISTERS;
+ memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS);
+
+ context->stack_pointer[0x90 / 8] = (void*)(uintptr_t)start;
+}
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target);
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+}
diff --git a/coroutine/ppc/Context.S b/coroutine/ppc/Context.S
new file mode 100644
index 0000000000..f44b2419b4
--- /dev/null
+++ b/coroutine/ppc/Context.S
@@ -0,0 +1,89 @@
+; Based on the code by Samuel Williams. Created by Sergey Fedorov on 04/06/2022.
+; Credits to Samuel Williams, Rei Odaira and Iain Sandoe. Errors, if any, are mine.
+; Some relevant examples: https://github.com/gcc-mirror/gcc/blob/master/libphobos/libdruntime/config/powerpc/switchcontext.S
+; https://github.com/gcc-mirror/gcc/blob/master/libgcc/config/rs6000/darwin-gpsave.S
+; https://www.ibm.com/docs/en/aix/7.2?topic=epilogs-saving-gprs-only
+; ppc32 version may be re-written compactly with stmw/lwm, but the code won't be faster, see: https://github.com/ruby/ruby/pull/5927#issuecomment-1139730541
+
+; Notice that this code is only for Darwin (macOS). Darwin ABI differs from AIX and ELF.
+; To add support for AIX, *BSD or *Linux, please make separate implementations.
+
+#define TOKEN_PASTE(x,y) x##y
+
+.machine ppc7400 ; = G4, Rosetta
+.text
+
+.globl PREFIXED_SYMBOL(coroutine_transfer)
+.align 2
+
+PREFIXED_SYMBOL(coroutine_transfer):
+ ; Make space on the stack for caller registers
+ ; (Should we rather use red zone? See libphobos example.)
+ subi r1,r1,80
+
+ ; Get LR
+ mflr r0
+
+ ; Save caller registers
+ stw r31,0(r1)
+ stw r30,4(r1)
+ stw r29,8(r1)
+ stw r28,12(r1)
+ stw r27,16(r1)
+ stw r26,20(r1)
+ stw r25,24(r1)
+ stw r24,28(r1)
+ stw r23,32(r1)
+ stw r22,36(r1)
+ stw r21,40(r1)
+ stw r20,44(r1)
+ stw r19,48(r1)
+ stw r18,52(r1)
+ stw r17,56(r1)
+ stw r16,60(r1)
+ stw r15,64(r1)
+ stw r14,68(r1)
+ stw r13,72(r1)
+
+ ; Save return address
+ ; Possibly should rather be saved into linkage area, see libphobos and IBM docs
+ stw r0,76(r1)
+
+ ; Save stack pointer to first argument
+ stw r1,0(r3)
+
+ ; Load stack pointer from second argument
+ lwz r1,0(r4)
+
+ ; Load return address
+ lwz r0,76(r1)
+
+ ; Restore caller registers
+ lwz r13,72(r1)
+ lwz r14,68(r1)
+ lwz r15,64(r1)
+ lwz r16,60(r1)
+ lwz r17,56(r1)
+ lwz r18,52(r1)
+ lwz r19,48(r1)
+ lwz r20,44(r1)
+ lwz r21,40(r1)
+ lwz r22,36(r1)
+ lwz r23,32(r1)
+ lwz r24,28(r1)
+ lwz r25,24(r1)
+ lwz r26,20(r1)
+ lwz r27,16(r1)
+ lwz r28,12(r1)
+ lwz r29,8(r1)
+ lwz r30,4(r1)
+ lwz r31,0(r1)
+
+ ; Set LR
+ mtlr r0
+
+ ; Pop stack frame
+ addi r1,r1,80
+
+ ; Jump to return address
+ blr
diff --git a/coroutine/ppc/Context.h b/coroutine/ppc/Context.h
new file mode 100644
index 0000000000..8035d08556
--- /dev/null
+++ b/coroutine/ppc/Context.h
@@ -0,0 +1,58 @@
+#ifndef COROUTINE_PPC_CONTEXT_H
+#define COROUTINE_PPC_CONTEXT_H 1
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#define COROUTINE __attribute__((noreturn)) void
+#define COROUTINE_LIMITED_ADDRESS_SPACE
+
+enum {
+ COROUTINE_REGISTERS =
+ 20 /* 19 general purpose registers (r13-r31) and 1 return address */
+ + 4 /* space for fiber_entry() to store the link register */
+};
+
+struct coroutine_context
+{
+ void **stack_pointer;
+ void *argument;
+};
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ context->stack_pointer = NULL;
+}
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ // Stack grows down. Force 16-byte alignment.
+ char * top = (char*)stack + size;
+ context->stack_pointer = (void**)((uintptr_t)top & ~0xF);
+
+ context->stack_pointer -= COROUTINE_REGISTERS;
+ memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS);
+
+ /* Skip a global prologue that sets the TOC register */
+ context->stack_pointer[19] = ((char*)start) + 8;
+}
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target);
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+ context->stack_pointer = NULL;
+}
+
+#endif /* COROUTINE_PPC_CONTEXT_H */
diff --git a/coroutine/ppc64/Context.S b/coroutine/ppc64/Context.S
new file mode 100644
index 0000000000..20a47c61c6
--- /dev/null
+++ b/coroutine/ppc64/Context.S
@@ -0,0 +1,88 @@
+; Based on the code by Samuel Williams. Created by Sergey Fedorov on 04/06/2022.
+; Credits to Samuel Williams, Rei Odaira and Iain Sandoe. Errors, if any, are mine.
+; Some relevant examples: https://github.com/gcc-mirror/gcc/blob/master/libphobos/libdruntime/config/powerpc/switchcontext.S
+; https://github.com/gcc-mirror/gcc/blob/master/libgcc/config/rs6000/darwin-gpsave.S
+; https://www.ibm.com/docs/en/aix/7.2?topic=epilogs-saving-gprs-only
+
+; Notice that this code is only for Darwin (macOS). Darwin ABI differs from AIX and ELF.
+; To add support for AIX, *BSD or *Linux, please make separate implementations.
+
+#define TOKEN_PASTE(x,y) x##y
+
+.machine ppc64 ; = G5
+.text
+
+.globl PREFIXED_SYMBOL(coroutine_transfer)
+.align 2
+
+PREFIXED_SYMBOL(coroutine_transfer):
+ ; Make space on the stack for caller registers
+ ; (Should we rather use red zone? See libphobos example.)
+ subi r1,r1,160
+
+ ; Get LR
+ mflr r0
+
+ ; Save caller registers
+ std r31,0(r1)
+ std r30,8(r1)
+ std r29,16(r1)
+ std r28,24(r1)
+ std r27,32(r1)
+ std r26,40(r1)
+ std r25,48(r1)
+ std r24,56(r1)
+ std r23,64(r1)
+ std r22,72(r1)
+ std r21,80(r1)
+ std r20,88(r1)
+ std r19,96(r1)
+ std r18,104(r1)
+ std r17,112(r1)
+ std r16,120(r1)
+ std r15,128(r1)
+ std r14,136(r1)
+ std r13,144(r1)
+
+ ; Save return address
+ ; Possibly should rather be saved into linkage area, see libphobos and IBM docs
+ std r0,152(r1)
+
+ ; Save stack pointer to first argument
+ std r1,0(r3)
+
+ ; Load stack pointer from second argument
+ ld r1,0(r4)
+
+ ; Load return address
+ ld r0,152(r1)
+
+ ; Restore caller registers
+ ld r13,144(r1)
+ ld r14,136(r1)
+ ld r15,128(r1)
+ ld r16,120(r1)
+ ld r17,112(r1)
+ ld r18,104(r1)
+ ld r19,96(r1)
+ ld r20,88(r1)
+ ld r21,80(r1)
+ ld r22,72(r1)
+ ld r23,64(r1)
+ ld r24,56(r1)
+ ld r25,48(r1)
+ ld r26,40(r1)
+ ld r27,32(r1)
+ ld r28,24(r1)
+ ld r29,16(r1)
+ ld r30,8(r1)
+ ld r31,0(r1)
+
+ ; Set LR
+ mtlr r0
+
+ ; Pop stack frame
+ addi r1,r1,160
+
+ ; Jump to return address
+ blr
diff --git a/coroutine/ppc64/Context.h b/coroutine/ppc64/Context.h
new file mode 100644
index 0000000000..085b475ed5
--- /dev/null
+++ b/coroutine/ppc64/Context.h
@@ -0,0 +1,57 @@
+#ifndef COROUTINE_PPC64_CONTEXT_H
+#define COROUTINE_PPC64_CONTEXT_H 1
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#define COROUTINE __attribute__((noreturn)) void
+
+enum {
+ COROUTINE_REGISTERS =
+ 20 /* 19 general purpose registers (r13-r31) and 1 return address */
+ + 4 /* space for fiber_entry() to store the link register */
+};
+
+struct coroutine_context
+{
+ void **stack_pointer;
+ void *argument;
+};
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ context->stack_pointer = NULL;
+}
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ // Stack grows down. Force 16-byte alignment.
+ char * top = (char*)stack + size;
+ context->stack_pointer = (void**)((uintptr_t)top & ~0xF);
+
+ context->stack_pointer -= COROUTINE_REGISTERS;
+ memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS);
+
+ /* Skip a global prologue that sets the TOC register */
+ context->stack_pointer[19] = ((char*)start) + 8;
+}
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target);
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+ context->stack_pointer = NULL;
+}
+
+#endif /* COROUTINE_PPC64_CONTEXT_H */
diff --git a/coroutine/ppc64le/Context.S b/coroutine/ppc64le/Context.S
new file mode 100644
index 0000000000..f7bcae2c3a
--- /dev/null
+++ b/coroutine/ppc64le/Context.S
@@ -0,0 +1,84 @@
+#define TOKEN_PASTE(x,y) x##y
+
+.text
+.align 2
+
+.globl PREFIXED_SYMBOL(coroutine_transfer)
+.type PREFIXED_SYMBOL(coroutine_transfer), @function
+PREFIXED_SYMBOL(coroutine_transfer):
+ # Make space on the stack for caller registers
+ addi 1,1,-160
+
+ # Save caller registers
+ std 14,0(1)
+ std 15,8(1)
+ std 16,16(1)
+ std 17,24(1)
+ std 18,32(1)
+ std 19,40(1)
+ std 20,48(1)
+ std 21,56(1)
+ std 22,64(1)
+ std 23,72(1)
+ std 24,80(1)
+ std 25,88(1)
+ std 26,96(1)
+ std 27,104(1)
+ std 28,112(1)
+ std 29,120(1)
+ std 30,128(1)
+ std 31,136(1)
+
+ # Save return address
+ mflr 0
+ std 0,144(1)
+
+ # Save caller special register
+ mfcr 0
+ std 0, 152(1)
+
+ # Save stack pointer to first argument
+ std 1,0(3)
+
+ # Load stack pointer from second argument
+ ld 1,0(4)
+
+ # Restore caller registers
+ ld 14,0(1)
+ ld 15,8(1)
+ ld 16,16(1)
+ ld 17,24(1)
+ ld 18,32(1)
+ ld 19,40(1)
+ ld 20,48(1)
+ ld 21,56(1)
+ ld 22,64(1)
+ ld 23,72(1)
+ ld 24,80(1)
+ ld 25,88(1)
+ ld 26,96(1)
+ ld 27,104(1)
+ ld 28,112(1)
+ ld 29,120(1)
+ ld 30,128(1)
+ ld 31,136(1)
+
+ # Load return address
+ ld 0,144(1)
+ mtlr 0
+
+ # Load special registers
+ ld 0,152(1)
+ # Restore cr register cr2, cr3 and cr4 (field index 3,4,5)
+ # (field index is 1-based, field 1 = cr0) using a mask (32|16|8 = 56)
+ mtcrf 56,0
+
+ # Pop stack frame
+ addi 1,1,160
+
+ # Jump to return address
+ blr
+
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
diff --git a/coroutine/ppc64le/Context.h b/coroutine/ppc64le/Context.h
new file mode 100644
index 0000000000..63ea9f19ff
--- /dev/null
+++ b/coroutine/ppc64le/Context.h
@@ -0,0 +1,57 @@
+#ifndef COROUTINE_PPC64LE_CONTEXT_H
+#define COROUTINE_PPC64LE_CONTEXT_H 1
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#define COROUTINE __attribute__((noreturn)) void
+
+enum {
+ COROUTINE_REGISTERS =
+ 20 /* 18 general purpose registers (r14-r31), 1 special register (cr) and 1 return address */
+ + 4 /* space for fiber_entry() to store the link register */
+};
+
+struct coroutine_context
+{
+ void **stack_pointer;
+ void *argument;
+};
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ context->stack_pointer = NULL;
+}
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ // Stack grows down. Force 16-byte alignment.
+ char * top = (char*)stack + size;
+ context->stack_pointer = (void**)((uintptr_t)top & ~0xF);
+
+ context->stack_pointer -= COROUTINE_REGISTERS;
+ memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS);
+
+ /* Skip a global prologue that sets the TOC register */
+ context->stack_pointer[18] = ((char*)start) + 8;
+}
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target);
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+ context->stack_pointer = NULL;
+}
+
+#endif /* COROUTINE_PPC64LE_CONTEXT_H */
diff --git a/coroutine/pthread/Context.c b/coroutine/pthread/Context.c
new file mode 100644
index 0000000000..38774cda0b
--- /dev/null
+++ b/coroutine/pthread/Context.c
@@ -0,0 +1,272 @@
+/*
+ * This file is part of the "Coroutine" project and released under the MIT License.
+ *
+ * Created by Samuel Williams on 24/6/2021.
+ * Copyright, 2021, by Samuel Williams.
+*/
+
+#include "Context.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+
+static const int DEBUG = 0;
+
+static
+int check(const char * message, int result) {
+ if (result) {
+ switch (result) {
+ case EDEADLK:
+ if (DEBUG) fprintf(stderr, "deadlock detected result=%d errno=%d\n", result, errno);
+ break;
+ default:
+ if (DEBUG) fprintf(stderr, "error detected result=%d errno=%d\n", result, errno);
+ perror(message);
+ }
+ }
+
+ assert(result == 0);
+
+ return result;
+}
+
+void coroutine_initialize_main(struct coroutine_context * context) {
+ context->id = pthread_self();
+
+ check("coroutine_initialize_main:pthread_cond_init",
+ pthread_cond_init(&context->schedule, NULL)
+ );
+
+ context->shared = (struct coroutine_shared*)malloc(sizeof(struct coroutine_shared));
+ assert(context->shared);
+
+ context->shared->main = context;
+ context->shared->count = 1;
+
+ if (DEBUG) {
+ pthread_mutexattr_t attr;
+ pthread_mutexattr_init(&attr);
+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK);
+
+ check("coroutine_initialize_main:pthread_mutex_init",
+ pthread_mutex_init(&context->shared->guard, &attr)
+ );
+ } else {
+ check("coroutine_initialize_main:pthread_mutex_init",
+ pthread_mutex_init(&context->shared->guard, NULL)
+ );
+ }
+}
+
+static
+void coroutine_release(struct coroutine_context *context) {
+ if (context->shared) {
+ size_t count = (context->shared->count -= 1);
+
+ if (count == 0) {
+ if (DEBUG) fprintf(stderr, "coroutine_release:pthread_mutex_destroy(%p)\n", &context->shared->guard);
+ pthread_mutex_destroy(&context->shared->guard);
+ free(context->shared);
+ }
+
+ context->shared = NULL;
+
+ if (DEBUG) fprintf(stderr, "coroutine_release:pthread_cond_destroy(%p)\n", &context->schedule);
+ pthread_cond_destroy(&context->schedule);
+ }
+}
+
+void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ // We will create the thread when we first transfer, but save the details now:
+ context->shared = NULL;
+ context->start = start;
+ context->stack = stack;
+ context->size = size;
+}
+
+static
+int is_locked(pthread_mutex_t * mutex) {
+ int result = pthread_mutex_trylock(mutex);
+
+ // If we could successfully lock the mutex:
+ if (result == 0) {
+ pthread_mutex_unlock(mutex);
+ // We could lock the mutex, so it wasn't locked:
+ return 0;
+ } else {
+ // Otherwise we couldn't lock it because it's already locked:
+ return 1;
+ }
+}
+
+static
+void coroutine_guard_unlock(void * _context)
+{
+ struct coroutine_context * context = _context;
+
+ if (DEBUG) fprintf(stderr, "coroutine_guard_unlock:pthread_mutex_unlock\n");
+
+ check("coroutine_guard_unlock:pthread_mutex_unlock",
+ pthread_mutex_unlock(&context->shared->guard)
+ );
+}
+
+static
+void coroutine_wait(struct coroutine_context *context)
+{
+ if (DEBUG) fprintf(stderr, "coroutine_wait:pthread_mutex_lock(guard=%p is_locked=%d)\n", &context->shared->guard, is_locked(&context->shared->guard));
+ check("coroutine_wait:pthread_mutex_lock",
+ pthread_mutex_lock(&context->shared->guard)
+ );
+
+ if (DEBUG) fprintf(stderr, "coroutine_wait:pthread_mutex_unlock(guard)\n");
+ pthread_mutex_unlock(&context->shared->guard);
+}
+
+static
+void coroutine_trampoline_cleanup(void *_context) {
+ struct coroutine_context * context = _context;
+ coroutine_release(context);
+}
+
+void * coroutine_trampoline(void * _context)
+{
+ struct coroutine_context * context = _context;
+ assert(context->shared);
+
+ pthread_cleanup_push(coroutine_trampoline_cleanup, context);
+
+ coroutine_wait(context);
+
+ context->start(context->from, context);
+
+ pthread_cleanup_pop(1);
+
+ return NULL;
+}
+
+static
+int coroutine_create_thread(struct coroutine_context *context)
+{
+ int result;
+
+ pthread_attr_t attr;
+ result = pthread_attr_init(&attr);
+ if (result != 0) {
+ return result;
+ }
+
+ result = pthread_attr_setstack(&attr, context->stack, (size_t)context->size);
+ if (result != 0) {
+ pthread_attr_destroy(&attr);
+ return result;
+ }
+
+ result = pthread_cond_init(&context->schedule, NULL);
+ if (result != 0) {
+ pthread_attr_destroy(&attr);
+ return result;
+ }
+
+ result = pthread_create(&context->id, &attr, coroutine_trampoline, context);
+ if (result != 0) {
+ pthread_attr_destroy(&attr);
+ if (DEBUG) fprintf(stderr, "coroutine_create_thread:pthread_cond_destroy(%p)\n", &context->schedule);
+ pthread_cond_destroy(&context->schedule);
+ return result;
+ }
+
+ context->shared->count += 1;
+
+ return result;
+}
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target)
+{
+ assert(current->shared);
+
+ struct coroutine_context * previous = target->from;
+ target->from = current;
+
+ if (DEBUG) fprintf(stderr, "coroutine_transfer:pthread_mutex_lock(guard=%p is_locked=%d)\n", &current->shared->guard, is_locked(&current->shared->guard));
+ pthread_mutex_lock(&current->shared->guard);
+ pthread_cleanup_push(coroutine_guard_unlock, current);
+
+ // First transfer:
+ if (target->shared == NULL) {
+ target->shared = current->shared;
+
+ if (DEBUG) fprintf(stderr, "coroutine_transfer:coroutine_create_thread...\n");
+ if (coroutine_create_thread(target)) {
+ if (DEBUG) fprintf(stderr, "coroutine_transfer:coroutine_create_thread failed\n");
+ target->shared = NULL;
+ target->from = previous;
+ return NULL;
+ }
+ } else {
+ if (DEBUG) fprintf(stderr, "coroutine_transfer:pthread_cond_signal(target)\n");
+ pthread_cond_signal(&target->schedule);
+ }
+
+ // A side effect of acting upon a cancellation request while in a condition wait is that the mutex is (in effect) re-acquired before calling the first cancellation cleanup handler. If cancelled, pthread_cond_wait immediately invokes cleanup handlers.
+ if (DEBUG) fprintf(stderr, "coroutine_transfer:pthread_cond_wait(schedule=%p, guard=%p, is_locked=%d)\n", &current->schedule, &current->shared->guard, is_locked(&current->shared->guard));
+ check("coroutine_transfer:pthread_cond_wait",
+ pthread_cond_wait(&current->schedule, &current->shared->guard)
+ );
+
+ if (DEBUG) fprintf(stderr, "coroutine_transfer:pthread_cleanup_pop\n");
+ pthread_cleanup_pop(1);
+
+#ifdef __FreeBSD__
+ // Apparently required for FreeBSD:
+ pthread_testcancel();
+#endif
+
+ target->from = previous;
+
+ return target;
+}
+
+static
+void coroutine_join(struct coroutine_context * context) {
+ if (DEBUG) fprintf(stderr, "coroutine_join:pthread_cancel\n");
+ int result = pthread_cancel(context->id);
+ if (result == -1 && errno == ESRCH) {
+ // The thread may be dead due to fork, so it cannot be joined and this doesn't represent a real error:
+ return;
+ }
+
+ check("coroutine_join:pthread_cancel", result);
+
+ if (DEBUG) fprintf(stderr, "coroutine_join:pthread_join\n");
+ check("coroutine_join:pthread_join",
+ pthread_join(context->id, NULL)
+ );
+
+ if (DEBUG) fprintf(stderr, "coroutine_join:pthread_join done\n");
+}
+
+void coroutine_destroy(struct coroutine_context * context)
+{
+ if (DEBUG) fprintf(stderr, "coroutine_destroy\n");
+
+ assert(context);
+
+ // We are already destroyed or never created:
+ if (context->shared == NULL) return;
+
+ if (context == context->shared->main) {
+ context->shared->main = NULL;
+ coroutine_release(context);
+ } else {
+ coroutine_join(context);
+ assert(context->shared == NULL);
+ }
+}
diff --git a/coroutine/pthread/Context.h b/coroutine/pthread/Context.h
new file mode 100644
index 0000000000..6d551ee9df
--- /dev/null
+++ b/coroutine/pthread/Context.h
@@ -0,0 +1,63 @@
+/*
+ * This file is part of the "Coroutine" project and released under the MIT License.
+ *
+ * Created by Samuel Williams on 24/6/2021.
+ * Copyright, 2021, by Samuel Williams.
+*/
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <pthread.h>
+
+#define COROUTINE void
+
+#define COROUTINE_PTHREAD_CONTEXT
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#if INTPTR_MAX <= INT32_MAX
+#define COROUTINE_LIMITED_ADDRESS_SPACE
+#endif
+#endif
+
+struct coroutine_context;
+
+struct coroutine_shared
+{
+ pthread_mutex_t guard;
+ struct coroutine_context * main;
+
+ size_t count;
+};
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+struct coroutine_context
+{
+ struct coroutine_shared * shared;
+
+ coroutine_start start;
+ void *argument;
+
+ void *stack;
+ size_t size;
+
+ pthread_t id;
+ pthread_cond_t schedule;
+ struct coroutine_context * from;
+};
+
+void coroutine_initialize_main(struct coroutine_context * context);
+
+void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+);
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target);
+
+void coroutine_destroy(struct coroutine_context * context);
diff --git a/coroutine/riscv64/Context.S b/coroutine/riscv64/Context.S
new file mode 100644
index 0000000000..8e7fc74ffc
--- /dev/null
+++ b/coroutine/riscv64/Context.S
@@ -0,0 +1,86 @@
+#define TOKEN_PASTE(x,y) x##y
+
+.text
+.align 2
+
+.global PREFIXED_SYMBOL(coroutine_transfer)
+PREFIXED_SYMBOL(coroutine_transfer):
+
+ # Make space on the stack for caller registers
+ addi sp, sp, -0xd0
+
+ # Save caller registers
+ sd s0, 0x00(sp)
+ sd s1, 0x08(sp)
+ sd s2, 0x10(sp)
+ sd s3, 0x18(sp)
+ sd s4, 0x20(sp)
+ sd s5, 0x28(sp)
+ sd s6, 0x30(sp)
+ sd s7, 0x38(sp)
+ sd s8, 0x40(sp)
+ sd s9, 0x48(sp)
+ sd s10, 0x50(sp)
+ sd s11, 0x58(sp)
+ fsd fs0, 0x60(sp)
+ fsd fs1, 0x68(sp)
+ fsd fs2, 0x70(sp)
+ fsd fs3, 0x78(sp)
+ fsd fs4, 0x80(sp)
+ fsd fs5, 0x88(sp)
+ fsd fs6, 0x90(sp)
+ fsd fs7, 0x98(sp)
+ fsd fs8, 0xa0(sp)
+ fsd fs9, 0xa8(sp)
+ fsd fs10, 0xb0(sp)
+ fsd fs11, 0xb8(sp)
+
+ # Save return address
+ sd ra, 0xc0(sp)
+
+ # Save stack pointer to a0 (first argument)
+ mv a2, sp
+ sd a2, (a0)
+
+ # Load stack pointer from a1 (second argument)
+ ld a3, (a1)
+ mv sp, a3
+
+ # Restore caller registers
+ ld s0, 0x00(sp)
+ ld s1, 0x08(sp)
+ ld s2, 0x10(sp)
+ ld s3, 0x18(sp)
+ ld s4, 0x20(sp)
+ ld s5, 0x28(sp)
+ ld s6, 0x30(sp)
+ ld s7, 0x38(sp)
+ ld s8, 0x40(sp)
+ ld s9, 0x48(sp)
+ ld s10, 0x50(sp)
+ ld s11, 0x58(sp)
+ fld fs0, 0x60(sp)
+ fld fs1, 0x68(sp)
+ fld fs2, 0x70(sp)
+ fld fs3, 0x78(sp)
+ fld fs4, 0x80(sp)
+ fld fs5, 0x88(sp)
+ fld fs6, 0x90(sp)
+ fld fs7, 0x98(sp)
+ fld fs8, 0xa0(sp)
+ fld fs9, 0xa8(sp)
+ fld fs10, 0xb0(sp)
+ fld fs11, 0xb8(sp)
+
+ # Load return address
+ ld ra, 0xc0(sp)
+
+ # Pop stack frame
+ addi sp, sp, 0xd0
+
+ # Jump to return address
+ ret
+
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
diff --git a/coroutine/riscv64/Context.h b/coroutine/riscv64/Context.h
new file mode 100644
index 0000000000..3660fb5577
--- /dev/null
+++ b/coroutine/riscv64/Context.h
@@ -0,0 +1,46 @@
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#define COROUTINE __attribute__((noreturn)) void
+
+enum {COROUTINE_REGISTERS = 0xd0 / 8};
+
+struct coroutine_context
+{
+ void **stack_pointer;
+ void *argument;
+};
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ context->stack_pointer = NULL;
+}
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ // Stack grows down. Force 16-byte alignment.
+ char * top = (char*)stack + size;
+ context->stack_pointer = (void**)((uintptr_t)top & ~0xF);
+
+ context->stack_pointer -= COROUTINE_REGISTERS;
+ memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS);
+
+ context->stack_pointer[0xc0 / 8] = (void*)(uintptr_t)start;
+}
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target);
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+}
diff --git a/coroutine/ucontext/Context.c b/coroutine/ucontext/Context.c
new file mode 100644
index 0000000000..5d728d554d
--- /dev/null
+++ b/coroutine/ucontext/Context.c
@@ -0,0 +1,23 @@
+/*
+ * This file is part of the "Coroutine" project and released under the MIT License.
+ *
+ * Created by Samuel Williams on 24/6/2019.
+ * Copyright, 2019, by Samuel Williams.
+*/
+
+/* According to Solaris' ucontext.h, makecontext, etc. are removed in SUSv4.
+ * To enable the prototype declarations, we need to define __EXTENSIONS__.
+ */
+#if defined(__sun) && !defined(__EXTENSIONS__)
+#define __EXTENSIONS__
+#endif
+
+#include "Context.h"
+
+void coroutine_trampoline(void * _start, void * _context)
+{
+ coroutine_start start = (coroutine_start)_start;
+ struct coroutine_context * context = _context;
+
+ start(context->from, context);
+}
diff --git a/coroutine/ucontext/Context.h b/coroutine/ucontext/Context.h
new file mode 100644
index 0000000000..d338d8de60
--- /dev/null
+++ b/coroutine/ucontext/Context.h
@@ -0,0 +1,79 @@
+#ifndef COROUTINE_UCONTEXT_CONTEXT_H
+#define COROUTINE_UCONTEXT_CONTEXT_H 1
+
+/*
+ * This file is part of the "Coroutine" project and released under the MIT License.
+ *
+ * Created by Samuel Williams on 24/6/2019.
+ * Copyright, 2019, by Samuel Williams.
+*/
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <ucontext.h>
+
+#define COROUTINE __attribute__((noreturn)) void
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#if INTPTR_MAX <= INT32_MAX
+#define COROUTINE_LIMITED_ADDRESS_SPACE
+#endif
+#endif
+
+struct coroutine_context
+{
+ ucontext_t state;
+ struct coroutine_context * from;
+ void *argument;
+};
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+COROUTINE coroutine_trampoline(void * _start, void * _context);
+
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ context->from = NULL;
+ getcontext(&context->state);
+}
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ coroutine_initialize_main(context);
+
+ context->state.uc_stack.ss_size = size;
+ // Despite what it's called, this is not actually a stack pointer. It points to the address of the stack allocation (the lowest address).
+ context->state.uc_stack.ss_sp = (char*)stack;
+ context->state.uc_stack.ss_flags = 0;
+ context->state.uc_link = NULL;
+
+ makecontext(&context->state, (void(*)(void))coroutine_trampoline, 2, (void*)start, (void*)context);
+}
+
+static inline struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target)
+{
+ struct coroutine_context * previous = target->from;
+
+ target->from = current;
+ swapcontext(&current->state, &target->state);
+ target->from = previous;
+
+ return target;
+}
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+ context->state.uc_stack.ss_sp = NULL;
+ context->state.uc_stack.ss_size = 0;
+ context->from = NULL;
+}
+
+#endif /* COROUTINE_UCONTEXT_CONTEXT_H */
diff --git a/coroutine/universal/Context.S b/coroutine/universal/Context.S
new file mode 100644
index 0000000000..11c80a7927
--- /dev/null
+++ b/coroutine/universal/Context.S
@@ -0,0 +1,16 @@
+#if 0
+#elif defined __x86_64__
+# include "coroutine/amd64/Context.S"
+#elif defined __i386__
+# include "coroutine/x86/Context.S"
+#elif defined __ppc__
+# include "coroutine/ppc/Context.S"
+#elif defined __ppc64__ && defined(WORDS_BIGENDIAN)
+# include "coroutine/ppc64/Context.S"
+#elif defined __ppc64__ && !defined(WORDS_BIGENDIAN)
+# include "coroutine/ppc64le/Context.S"
+#elif defined __arm64__
+# include "coroutine/arm64/Context.S"
+#else
+# error "Unsupported CPU"
+#endif
diff --git a/coroutine/universal/Context.h b/coroutine/universal/Context.h
new file mode 100644
index 0000000000..ec4d2f484a
--- /dev/null
+++ b/coroutine/universal/Context.h
@@ -0,0 +1,21 @@
+#ifndef COROUTINE_UNIVERSAL_CONTEXT_H
+#define COROUTINE_UNIVERSAL_CONTEXT_H 1
+
+#if 0
+#elif defined __x86_64__
+# include "coroutine/amd64/Context.h"
+#elif defined __i386__
+# include "coroutine/x86/Context.h"
+#elif defined __ppc__
+# include "coroutine/ppc/Context.h"
+#elif defined __ppc64__ && defined(WORDS_BIGENDIAN)
+# include "coroutine/ppc64/Context.h"
+#elif defined __ppc64__ && !defined(WORDS_BIGENDIAN)
+# include "coroutine/ppc64le/Context.h"
+#elif defined __arm64__
+# include "coroutine/arm64/Context.h"
+#else
+# error "Unsupported CPU"
+#endif
+
+#endif /* COROUTINE_UNIVERSAL_CONTEXT_H */
diff --git a/coroutine/win32/Context.S b/coroutine/win32/Context.S
new file mode 100644
index 0000000000..d14bf435e8
--- /dev/null
+++ b/coroutine/win32/Context.S
@@ -0,0 +1,47 @@
+##
+## This file is part of the "Coroutine" project and released under the MIT License.
+##
+## Created by Lars Kanis on 06/06/2019.
+##
+
+.text
+
+# Using fastcall is a big win (and it's the same as how x64 works).
+# In coroutine transfer, the arguments are passed in ecx and edx. We don't need
+# to touch these in order to pass them to the destination coroutine.
+
+.globl @coroutine_transfer@8
+@coroutine_transfer@8:
+ # Save the thread information block:
+ pushl %fs:0
+ pushl %fs:4
+ pushl %fs:8
+
+ # Save caller registers:
+ pushl %ebp
+ pushl %ebx
+ pushl %edi
+ pushl %esi
+
+ # Save caller stack pointer:
+ movl %esp, (%ecx)
+
+ # Restore callee stack pointer:
+ movl (%edx), %esp
+
+ # Restore callee stack:
+ popl %esi
+ popl %edi
+ popl %ebx
+ popl %ebp
+
+ # Restore the thread information block:
+ popl %fs:8
+ popl %fs:4
+ popl %fs:0
+
+ # Save the first argument as the return value:
+ movl %ecx, %eax
+
+ # Jump to the address on the stack:
+ ret
diff --git a/coroutine/win32/Context.asm b/coroutine/win32/Context.asm
new file mode 100644
index 0000000000..f8f431239b
--- /dev/null
+++ b/coroutine/win32/Context.asm
@@ -0,0 +1,55 @@
+;;
+;; This file is part of the "Coroutine" project and released under the MIT License.
+;;
+;; Created by Samuel Williams on 10/5/2018.
+;; Copyright, 2018, by Samuel Williams.
+;;
+
+.386
+.model flat
+
+.code
+
+assume fs:nothing
+
+; Using fastcall is a big win (and it's the same has how x64 works).
+; In coroutine transfer, the arguments are passed in ecx and edx. We don't need
+; to touch these in order to pass them to the destination coroutine.
+
+@coroutine_transfer@8 proc
+ ; Save the thread information block:
+ push fs:[0]
+ push fs:[4]
+ push fs:[8]
+
+ ; Save caller registers:
+ push ebp
+ push ebx
+ push edi
+ push esi
+
+ ; Save caller stack pointer:
+ mov dword ptr [ecx], esp
+
+ ; Restore callee stack pointer:
+ mov esp, dword ptr [edx]
+
+ ; Restore callee stack:
+ pop esi
+ pop edi
+ pop ebx
+ pop ebp
+
+ ; Restore the thread information block:
+ pop fs:[8]
+ pop fs:[4]
+ pop fs:[0]
+
+ ; Save the first argument as the return value:
+ mov eax, dword ptr ecx
+
+ ; Jump to the address on the stack:
+ ret
+@coroutine_transfer@8 endp
+
+end
diff --git a/coroutine/win32/Context.h b/coroutine/win32/Context.h
new file mode 100644
index 0000000000..c1c8fbcd13
--- /dev/null
+++ b/coroutine/win32/Context.h
@@ -0,0 +1,66 @@
+#ifndef COROUTINE_WIN32_CONTEXT_H
+#define COROUTINE_WIN32_CONTEXT_H 1
+
+/*
+ * This file is part of the "Coroutine" project and released under the MIT License.
+ *
+ * Created by Samuel Williams on 10/5/2018.
+ * Copyright, 2018, by Samuel Williams.
+*/
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#define COROUTINE __declspec(noreturn) void __fastcall
+#define COROUTINE_DECL void __fastcall
+#define COROUTINE_LIMITED_ADDRESS_SPACE
+
+/* This doesn't include thread information block */
+enum {COROUTINE_REGISTERS = 4};
+
+struct coroutine_context
+{
+ void **stack_pointer;
+ void *argument;
+};
+
+typedef void(__fastcall * coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ context->stack_pointer = NULL;
+}
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ // Stack grows down. Force 16-byte alignment.
+ char * top = (char*)stack + size;
+ context->stack_pointer = (void**)((uintptr_t)top & ~0xF);
+
+ *--context->stack_pointer = (void*)(uintptr_t)start;
+
+ /* Windows Thread Information Block */
+ *--context->stack_pointer = (void*)0xFFFFFFFF; /* fs:[0] */
+ *--context->stack_pointer = (void*)top; /* fs:[4] */
+ *--context->stack_pointer = (void*)stack; /* fs:[8] */
+
+ context->stack_pointer -= COROUTINE_REGISTERS;
+ memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS);
+}
+
+struct coroutine_context * __fastcall coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target);
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+}
+
+#endif /* COROUTINE_WIN32_CONTEXT_H */
diff --git a/coroutine/win64/Context.S b/coroutine/win64/Context.S
new file mode 100644
index 0000000000..e0ee38e006
--- /dev/null
+++ b/coroutine/win64/Context.S
@@ -0,0 +1,77 @@
+##
+## This file is part of the "Coroutine" project and released under the MIT License.
+##
+## Created by Samuel Williams on 4/11/2018.
+## Copyright, 2018, by Samuel Williams.
+##
+
+.text
+
+.globl coroutine_transfer
+coroutine_transfer:
+ # Save the thread information block:
+ pushq %gs:8
+ pushq %gs:16
+
+ # Save caller registers:
+ pushq %rbp
+ pushq %rbx
+ pushq %rdi
+ pushq %rsi
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+
+ movaps %xmm15, -168(%rsp)
+ movaps %xmm14, -152(%rsp)
+ movaps %xmm13, -136(%rsp)
+ movaps %xmm12, -120(%rsp)
+ movaps %xmm11, -104(%rsp)
+ movaps %xmm10, -88(%rsp)
+ movaps %xmm9, -72(%rsp)
+ movaps %xmm8, -56(%rsp)
+ movaps %xmm7, -40(%rsp)
+ movaps %xmm6, -24(%rsp)
+
+ # Save caller stack pointer:
+ mov %rsp, (%rcx)
+
+ # Restore callee stack pointer:
+ mov (%rdx), %rsp
+
+ movaps -24(%rsp), %xmm6
+ movaps -40(%rsp), %xmm7
+ movaps -56(%rsp), %xmm8
+ movaps -72(%rsp), %xmm9
+ movaps -88(%rsp), %xmm10
+ movaps -104(%rsp), %xmm11
+ movaps -120(%rsp), %xmm12
+ movaps -136(%rsp), %xmm13
+ movaps -152(%rsp), %xmm14
+ movaps -168(%rsp), %xmm15
+
+ # Restore callee stack:
+ popq %r15
+ popq %r14
+ popq %r13
+ popq %r12
+ popq %rsi
+ popq %rdi
+ popq %rbx
+ popq %rbp
+
+ # Restore the thread information block:
+ popq %gs:16
+ popq %gs:8
+
+ # Put the first argument into the return value:
+ mov %rcx, %rax
+
+ # We pop the return address and jump to it:
+ ret
+
+.globl coroutine_trampoline
+coroutine_trampoline:
+ # Do not remove this. This forces 16-byte alignment when entering the coroutine.
+ ret
diff --git a/coroutine/win64/Context.asm b/coroutine/win64/Context.asm
new file mode 100644
index 0000000000..8c4dea1c93
--- /dev/null
+++ b/coroutine/win64/Context.asm
@@ -0,0 +1,79 @@
+;;
+;; This file is part of the "Coroutine" project and released under the MIT License.
+;;
+;; Created by Samuel Williams on 10/5/2018.
+;; Copyright, 2018, by Samuel Williams.
+;;
+
+.code
+
+coroutine_transfer proc
+ ; Save the thread information block:
+ push qword ptr gs:[8]
+ push qword ptr gs:[16]
+
+ ; Save caller registers:
+ push rbp
+ push rbx
+ push rdi
+ push rsi
+ push r12
+ push r13
+ push r14
+ push r15
+
+ movaps [rsp - 24], xmm6
+ movaps [rsp - 40], xmm7
+ movaps [rsp - 56], xmm8
+ movaps [rsp - 72], xmm9
+ movaps [rsp - 88], xmm10
+ movaps [rsp - 104], xmm11
+ movaps [rsp - 120], xmm12
+ movaps [rsp - 136], xmm13
+ movaps [rsp - 152], xmm14
+ movaps [rsp - 168], xmm15
+
+ ; Save caller stack pointer:
+ mov [rcx], rsp
+
+ ; Restore callee stack pointer:
+ mov rsp, [rdx]
+
+ movaps xmm15, [rsp - 168]
+ movaps xmm14, [rsp - 152]
+ movaps xmm13, [rsp - 136]
+ movaps xmm12, [rsp - 120]
+ movaps xmm11, [rsp - 104]
+ movaps xmm10, [rsp - 88]
+ movaps xmm9, [rsp - 72]
+ movaps xmm8, [rsp - 56]
+ movaps xmm7, [rsp - 40]
+ movaps xmm6, [rsp - 24]
+
+ ; Restore callee stack:
+ pop r15
+ pop r14
+ pop r13
+ pop r12
+ pop rsi
+ pop rdi
+ pop rbx
+ pop rbp
+
+ ; Restore the thread information block:
+ pop qword ptr gs:[16]
+ pop qword ptr gs:[8]
+
+ ; Put the first argument into the return value:
+ mov rax, rcx
+
+ ; We pop the return address and jump to it:
+ ret
+coroutine_transfer endp
+
+coroutine_trampoline proc
+ ; Do not remove this. This forces 16-byte alignment when entering the coroutine.
+ ret
+coroutine_trampoline endp
+
+end
diff --git a/coroutine/win64/Context.h b/coroutine/win64/Context.h
new file mode 100644
index 0000000000..23b21b5c1c
--- /dev/null
+++ b/coroutine/win64/Context.h
@@ -0,0 +1,76 @@
+#ifndef COROUTINE_WIN64_CONTEXT_H
+#define COROUTINE_WIN64_CONTEXT_H 1
+
+/*
+ * This file is part of the "Coroutine" project and released under the MIT License.
+ *
+ * Created by Samuel Williams on 10/5/2018.
+ * Copyright, 2018, by Samuel Williams.
+*/
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#define COROUTINE __declspec(noreturn) void
+#define COROUTINE_DECL void
+
+enum {
+ COROUTINE_REGISTERS = 8,
+ COROUTINE_XMM_REGISTERS = 1+10*2,
+};
+
+struct coroutine_context
+{
+ void **stack_pointer;
+ void *argument;
+};
+
+typedef void(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self);
+
+void coroutine_trampoline(void);
+
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ context->stack_pointer = NULL;
+}
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ // Stack grows down. Force 16-byte alignment.
+ char * top = (char*)stack + size;
+ context->stack_pointer = (void**)((uintptr_t)top & ~0xF);
+
+ /* Win64 ABI requires space for arguments */
+ context->stack_pointer -= 4;
+
+ /* Return address */
+ *--context->stack_pointer = 0;
+ *--context->stack_pointer = (void*)(uintptr_t)start;
+ *--context->stack_pointer = (void*)coroutine_trampoline;
+
+ /* Windows Thread Information Block */
+ /* *--context->stack_pointer = 0; */ /* gs:[0x00] is not used */
+ *--context->stack_pointer = (void*)top; /* gs:[0x08] */
+ *--context->stack_pointer = (void*)stack; /* gs:[0x10] */
+
+ context->stack_pointer -= COROUTINE_REGISTERS;
+ memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS);
+ memset(context->stack_pointer - COROUTINE_XMM_REGISTERS, 0, sizeof(void*) * COROUTINE_XMM_REGISTERS);
+}
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target);
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+}
+
+#endif /* COROUTINE_WIN64_CONTEXT_H */
diff --git a/coroutine/x86/Context.S b/coroutine/x86/Context.S
new file mode 100644
index 0000000000..b04e71aa1c
--- /dev/null
+++ b/coroutine/x86/Context.S
@@ -0,0 +1,41 @@
+##
+## This file is part of the "Coroutine" project and released under the MIT License.
+##
+## Created by Samuel Williams on 3/11/2018.
+## Copyright, 2018, by Samuel Williams.
+##
+
+#define TOKEN_PASTE(x,y) x##y
+
+.text
+
+.globl PREFIXED_SYMBOL(coroutine_transfer)
+PREFIXED_SYMBOL(coroutine_transfer):
+
+ # Save caller registers
+ pushl %ebp
+ pushl %ebx
+ pushl %edi
+ pushl %esi
+
+ # Save caller stack pointer
+ movl %esp, (%ecx)
+
+ # Restore callee stack pointer
+ movl (%edx), %esp
+
+ # Restore callee stack
+ popl %esi
+ popl %edi
+ popl %ebx
+ popl %ebp
+
+ # Save the first argument as the return value
+ movl %ecx, %eax
+
+ # Jump to the address on the stack
+ ret
+
+#if (defined(__linux__) || defined(__FreeBSD__)) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
diff --git a/coroutine/x86/Context.h b/coroutine/x86/Context.h
new file mode 100644
index 0000000000..f33b338eab
--- /dev/null
+++ b/coroutine/x86/Context.h
@@ -0,0 +1,61 @@
+#ifndef COROUTINE_X86_CONTEXT_H
+#define COROUTINE_X86_CONTEXT_H 1
+
+/*
+ * This file is part of the "Coroutine" project and released under the MIT License.
+ *
+ * Created by Samuel Williams on 3/11/2018.
+ * Copyright, 2018, by Samuel Williams.
+*/
+
+#pragma once
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
+#define COROUTINE __attribute__((noreturn, fastcall)) void
+#define COROUTINE_LIMITED_ADDRESS_SPACE
+
+enum {COROUTINE_REGISTERS = 4};
+
+struct coroutine_context
+{
+ void **stack_pointer;
+ void *argument;
+};
+
+typedef COROUTINE(* coroutine_start)(struct coroutine_context *from, struct coroutine_context *self) __attribute__((fastcall));
+
+static inline void coroutine_initialize_main(struct coroutine_context * context) {
+ context->stack_pointer = NULL;
+}
+
+static inline void coroutine_initialize(
+ struct coroutine_context *context,
+ coroutine_start start,
+ void *stack,
+ size_t size
+) {
+ assert(start && stack && size >= 1024);
+
+ // Stack grows down. Force 16-byte alignment.
+ char * top = (char*)stack + size;
+ context->stack_pointer = (void**)((uintptr_t)top & ~0xF);
+
+ *--context->stack_pointer = NULL;
+ *--context->stack_pointer = (void*)(uintptr_t)start;
+
+ context->stack_pointer -= COROUTINE_REGISTERS;
+ memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS);
+}
+
+struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target) __attribute__((fastcall));
+
+static inline void coroutine_destroy(struct coroutine_context * context)
+{
+ context->stack_pointer = NULL;
+}
+
+#endif /* COROUTINE_X86_CONTEXT_H */
diff --git a/coverage/README b/coverage/README
index 7e4ff59e2a..a4c3dfcb03 100644
--- a/coverage/README
+++ b/coverage/README
@@ -4,7 +4,7 @@ The make task `update-coverage' retrieves simplecov for coverage report.
COVERAGE=1 make test-all TESTS=test/cgi
-it generate test coverage to coverage directory.
+it generates test coverage to coverage directory.
Limitation
@@ -13,5 +13,5 @@ Limitation
TODO
- * more reduce bundled simplecov(additional configuration, formatter, etc)
+ * more reduce bundled simplecov(additional configuration, formatter, etc.)
* measure rubyspec coverage
diff --git a/cygwin/GNUmakefile.in b/cygwin/GNUmakefile.in
index d02b476c6d..109baa747d 100644
--- a/cygwin/GNUmakefile.in
+++ b/cygwin/GNUmakefile.in
@@ -1,18 +1,26 @@
+gnumake = yes
+
include Makefile
-ENABLE_SHARED=@ENABLE_SHARED@
-DLLWRAP = @DLLWRAP@ --target=@target_os@ --driver-name="$(CC)"
-WINDRES = @WINDRES@ --preprocessor="$(CPP) -xc" -DRC_INVOKED
+MUNICODE_FLAG := $(if $(filter mingw%,$(target_os)),-municode)
+override EXE_LDFLAGS += $(MUNICODE_FLAG)
+
+DLLWRAP = @DLLWRAP@ --target=$(target_os) --driver-name="$(CC)"
+windres-cpp := $(CPP) -xc
+windres-cpp := --preprocessor=$(firstword $(windres-cpp)) \
+ $(addprefix --preprocessor-arg=,$(wordlist 2,$(words $(windres-cpp)),$(windres-cpp)))
+WINDRES = @WINDRES@ $(windres-cpp) -DRC_INVOKED
+STRIP = @STRIP@
-ifeq (@target_os@,cygwin)
+ifeq ($(target_os),cygwin)
DLL_BASE_NAME := $(LIBRUBY_SO:.dll=)
else
DLL_BASE_NAME := $(RUBY_SO_NAME)
DLLWRAP += -mno-cygwin
VPATH := $(VPATH):$(srcdir)/win32
- STUBPROGRAM = rubystub$(EXEEXT)
- IGNOREDPATTERNS = %~ .% %.orig %.rej \#%\#
- SCRIPTPROGRAMS = $(addsuffix $(EXEEXT),$(filter-out $(IGNOREDPATTERNS),$(notdir $(wildcard $(srcdir)/bin/*))))
+ ifneq ($(filter -flto%,$(LDFLAGS)),)
+ miniruby$(EXEEXT): XLDFLAGS += -Wno-maybe-uninitialized
+ endif
endif
ifneq ($(ENABLE_SHARED),yes)
@@ -30,48 +38,38 @@ endif
WPROGRAM = $(RUBYW_INSTALL_NAME)$(EXEEXT)
--include uncommon.mk
+include $(srcdir)/template/GNUmakefile.in
-SOLIBS := $(DLL_BASE_NAME).res.@OBJEXT@ $(SOLIBS)
+SOLIBS := $(DLL_BASE_NAME).res.$(OBJEXT) $(SOLIBS)
override EXTOBJS += $(if $(filter-out $(RUBYW_INSTALL_NAME),$(@:$(EXEEXT)=)),$(RUBY_INSTALL_NAME),$(@:$(EXEEXT)=)).res.$(OBJEXT)
RCFILES = $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(DLL_BASE_NAME).rc
RUBYDEF = $(DLL_BASE_NAME).def
+override LIBRUBY_FOR_LEAKED_GLOBALS := # DLL shows symbols from import library
ruby: $(PROGRAM)
rubyw: $(WPROGRAM)
-stub: $(STUBPROGRAM)
-scriptbin: $(SCRIPTPROGRAMS)
-
-%$(EXEEXT): bin/% $(STUBPROGRAM)
- $(ECHO) generating $@
- $(Q) { cat $(STUBPROGRAM); echo; sed -e '1{' -e '/^#!.*ruby/!i\' -e '#!/bin/ruby' -e '}' $<; } > $@
- $(Q) chmod +x $@
$(LIBRUBY): $(RUBY_EXP) $(LIBRUBY_SO)
-$(RUBY_EXP) $(LIBRUBY_SO): $(DLL_BASE_NAME).res.@OBJEXT@
+$(RUBY_EXP) $(LIBRUBY_SO): $(DLL_BASE_NAME).res.$(OBJEXT)
-%.res.@OBJEXT@: %.rc
+%.res.$(OBJEXT): %.rc
$(ECHO) compiling $@
$(Q) $(WINDRES) --include-dir . --include-dir $(<D) --include-dir $(srcdir)/win32 $< $@
-%.rc: $(RBCONFIG) $(srcdir)/revision.h $(srcdir)/win32/resource.rb
+%.rc: $(BOOTSTRAPRUBY_FAKE) $(RBCONFIG) $(srcdir)/revision.h $(srcdir)/win32/resource.rb
$(ECHO) generating $@
- $(Q) $(MINIRUBY) $(srcdir)/win32/resource.rb \
+ $(Q) $(BOOTSTRAPRUBY_COMMAND) $(srcdir)/win32/resource.rb \
-ruby_name=$(RUBY_INSTALL_NAME) -rubyw_name=$(RUBYW_INSTALL_NAME) \
-so_name=$(DLL_BASE_NAME) -output=$(*F) \
. $(icondirs) $(srcdir)/win32
-$(PROGRAM): $(RUBY_INSTALL_NAME).res.@OBJEXT@
-$(WPROGRAM): $(RUBYW_INSTALL_NAME).res.@OBJEXT@
+$(PROGRAM): $(RUBY_INSTALL_NAME).res.$(OBJEXT)
+$(WPROGRAM): $(RUBYW_INSTALL_NAME).res.$(OBJEXT)
@rm -f $@
$(ECHO) linking $@
- $(Q) $(PURIFY) $(CC) -mwindows -e $(SYMBOL_PREFIX)mainCRTStartup $(LDFLAGS) $(XLDFLAGS) \
+ $(Q) $(PURIFY) $(CC) $(MUNICODE_FLAG) -mwindows -e $(SYMBOL_PREFIX)mainCRTStartup $(LDFLAGS) $(XLDFLAGS) \
$(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@
-$(STUBPROGRAM): $(RUBY_INSTALL_NAME).res.@OBJEXT@ win32/stub.@OBJEXT@
- @rm -f $@
- $(ECHO) linking $@
- $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) \
- win32/stub.@OBJEXT@ $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@
+$(STUBPROGRAM): $(RUBY_INSTALL_NAME).res.$(OBJEXT)
$(RUBY_EXP): $(LIBRUBY_A)
$(ECHO) creating $@
@@ -83,28 +81,30 @@ $(RUBY_EXP): $(LIBRUBY_A)
GNUmakefile: $(srcdir)/cygwin/GNUmakefile.in
-ifeq (@target_os@,mingw32)
+ifeq ($(target_os),mingw32)
$(OBJS) $(MAINOBJ): win32.h
dir.$(OBJEXT) win32/win32.$(OBJEXT): win32/dir.h
file.$(OBJEXT) win32/win32.$(OBJEXT): win32/file.h
+
+MSYS2_ARG_CONV_EXCL_PARAM = --exclude=;--name=
+
+yes-test-ruby: export MSYS2_ARG_CONV_EXCL=$(MSYS2_ARG_CONV_EXCL_PARAM)
+yes-test-all: export MSYS2_ARG_CONV_EXCL=$(MSYS2_ARG_CONV_EXCL_PARAM)
+yes-test-almost: export MSYS2_ARG_CONV_EXCL=$(MSYS2_ARG_CONV_EXCL_PARAM)
+test/% spec/%/ spec/%_spec.rb: export MSYS2_ARG_CONV_EXCL=$(MSYS2_ARG_CONV_EXCL_PARAM)
+
+distclean-local::
+ $(RMDIR) win32
endif
$(LIBRUBY_SO): $(RUBYDEF)
-$(RUBYDEF): $(LIBRUBY_A) $(PREP) $(RBCONFIG)
+$(RUBYDEF): $(LIBRUBY_A) $(PREP) $(BOOTSTRAPRUBY_FAKE) $(RBCONFIG)
$(ECHO) generating $@
- $(Q) $(MINIRUBY) $(srcdir)/win32/mkexports.rb -output=$@ $(LIBRUBY_A)
+ $(Q) $(BOOTSTRAPRUBY_COMMAND) $(srcdir)/win32/mkexports.rb -output=$@ $(LIBRUBY_A)
clean-local::
@$(RM) $(RUBYDEF)
-
-ifeq (@target_os@,cygwin)
-cygwin-$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR)0.dll: $(LIBRUBY_A) $(RUBYDEF)
- $(ECHO) generating $@
- $(Q) @DLLWRAP@ -s --def=$(RUBYDEF) -o $@
-endif
-
-clean-local::
- @$(RM) $(RUBY_EXP) $(RCFILES:.rc=.res.@OBJEXT@)
+ @$(RM) $(RUBY_EXP) $(RCFILES:.rc=.res.$(OBJEXT))
@$(RM) $(RCFILES)
diff --git a/darray.h b/darray.h
new file mode 100644
index 0000000000..10fd5e4ccc
--- /dev/null
+++ b/darray.h
@@ -0,0 +1,296 @@
+#ifndef RUBY_DARRAY_H
+#define RUBY_DARRAY_H
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include "ruby/ruby.h"
+
+// Type for a dynamic array. Use to declare a dynamic array.
+// It is a pointer so it fits in st_table nicely. Designed
+// to be fairly type-safe.
+//
+// NULL is a valid empty dynamic array.
+//
+// Example:
+// rb_darray(char) char_array = NULL;
+// rb_darray_append(&char_array, 'e');
+// printf("pushed %c\n", *rb_darray_ref(char_array, 0));
+// rb_darray_free(char_array);
+//
+#define rb_darray(T) struct { rb_darray_meta_t meta; T data[]; } *
+
+// Copy an element out of the array. Warning: not bounds checked.
+//
+// T rb_darray_get(rb_darray(T) ary, size_t idx);
+//
+#define rb_darray_get(ary, idx) ((ary)->data[(idx)])
+
+// Assign to an element. Warning: not bounds checked.
+//
+// void rb_darray_set(rb_darray(T) ary, size_t idx, T element);
+//
+#define rb_darray_set(ary, idx, element) ((ary)->data[(idx)] = (element))
+
+// Get a pointer to an element. Warning: not bounds checked.
+//
+// T *rb_darray_ref(rb_darray(T) ary, size_t idx);
+//
+#define rb_darray_ref(ary, idx) (&((ary)->data[(idx)]))
+
+/* Copy a new element into the array. ptr_to_ary is evaluated multiple times.
+ *
+ * void rb_darray_append(rb_darray(T) *ptr_to_ary, T element);
+ */
+#define rb_darray_append(ptr_to_ary, element) \
+ rb_darray_append_impl(ptr_to_ary, element, rb_darray_realloc_mul_add)
+
+#define rb_darray_append_without_gc(ptr_to_ary, element) \
+ rb_darray_append_impl(ptr_to_ary, element, rb_darray_realloc_mul_add_without_gc)
+
+#define rb_darray_append_impl(ptr_to_ary, element, realloc_func) do { \
+ rb_darray_ensure_space((ptr_to_ary), \
+ sizeof(**(ptr_to_ary)), \
+ sizeof((*(ptr_to_ary))->data[0]), \
+ realloc_func); \
+ rb_darray_set(*(ptr_to_ary), \
+ (*(ptr_to_ary))->meta.size, \
+ (element)); \
+ (*(ptr_to_ary))->meta.size++; \
+} while (0)
+
+#define rb_darray_insert_without_gc(ptr_to_ary, idx, element) do { \
+ rb_darray_ensure_space((ptr_to_ary), \
+ sizeof(**(ptr_to_ary)), \
+ sizeof((*(ptr_to_ary))->data[0]), \
+ rb_darray_realloc_mul_add_without_gc); \
+ MEMMOVE( \
+ rb_darray_ref(*(ptr_to_ary), idx + 1), \
+ rb_darray_ref(*(ptr_to_ary), idx), \
+ (*(ptr_to_ary))->data[0], \
+ rb_darray_size(*(ptr_to_ary)) - idx); \
+ rb_darray_set(*(ptr_to_ary), idx, element); \
+ (*(ptr_to_ary))->meta.size++; \
+} while (0)
+
+/* Removes the element at idx and replaces it with the last element.
+ * ptr_to_ary and idx is evaluated multiple times.
+ * Warning: not bounds checked.
+ *
+ * void rb_darray_swap_remove(rb_darray(T) *ptr_to_ary, size_t idx);
+ */
+#define rb_darray_swap_remove(ptr_to_ary, idx) do { \
+ size_t _darray_size = rb_darray_size(*(ptr_to_ary)); \
+ if ((idx) != _darray_size - 1) { \
+ (*(ptr_to_ary))->data[idx] = (*(ptr_to_ary))->data[_darray_size - 1]; \
+ } \
+ (*(ptr_to_ary))->meta.size--; \
+} while (0)
+
+// Iterate over items of the array in a for loop
+//
+#define rb_darray_foreach(ary, idx_name, elem_ptr_var) \
+ for (size_t idx_name = 0; idx_name < rb_darray_size(ary) && ((elem_ptr_var) = rb_darray_ref(ary, idx_name)); ++idx_name)
+
+// Iterate over valid indices in the array in a for loop
+//
+#define rb_darray_for(ary, idx_name) \
+ for (size_t idx_name = 0; idx_name < rb_darray_size(ary); ++idx_name)
+
+/* Make a dynamic array of a certain size. All bytes backing the elements are set to zero.
+ * Return 1 on success and 0 on failure.
+ *
+ * Note that NULL is a valid empty dynamic array.
+ *
+ * void rb_darray_make(rb_darray(T) *ptr_to_ary, size_t size);
+ */
+#define rb_darray_make(ptr_to_ary, size) \
+ rb_darray_make_impl((ptr_to_ary), size, sizeof(**(ptr_to_ary)), \
+ sizeof((*(ptr_to_ary))->data[0]), rb_darray_calloc_mul_add)
+
+#define rb_darray_make_without_gc(ptr_to_ary, size) \
+ rb_darray_make_impl((ptr_to_ary), size, sizeof(**(ptr_to_ary)), \
+ sizeof((*(ptr_to_ary))->data[0]), rb_darray_calloc_mul_add_without_gc)
+
+/* Resize the darray to a new capacity. The new capacity must be greater than
+ * or equal to the size of the darray.
+ *
+ * void rb_darray_resize_capa(rb_darray(T) *ptr_to_ary, size_t capa);
+ */
+#define rb_darray_resize_capa_without_gc(ptr_to_ary, capa) \
+ rb_darray_resize_capa_impl((ptr_to_ary), capa, sizeof(**(ptr_to_ary)), \
+ sizeof((*(ptr_to_ary))->data[0]), rb_darray_realloc_mul_add_without_gc)
+
+#define rb_darray_data_ptr(ary) ((ary)->data)
+
+typedef struct rb_darray_meta {
+ size_t size;
+ size_t capa;
+} rb_darray_meta_t;
+
+/* Set the size of the array to zero without freeing the backing memory.
+ * Allows reusing the same array. */
+static inline void
+rb_darray_clear(void *ary)
+{
+ rb_darray_meta_t *meta = ary;
+ if (meta) {
+ meta->size = 0;
+ }
+}
+
+// Get the size of the dynamic array.
+//
+static inline size_t
+rb_darray_size(const void *ary)
+{
+ const rb_darray_meta_t *meta = ary;
+ return meta ? meta->size : 0;
+}
+
+/* Estimate of the amount of memory used by this darray.
+ * Useful for TypedData objects. */
+#define rb_darray_memsize(ary) (sizeof(*(ary)) + (rb_darray_size(ary) * sizeof((ary)->data[0])))
+
+static inline void
+rb_darray_pop(void *ary, size_t count)
+{
+ rb_darray_meta_t *meta = ary;
+ meta->size -= count;
+}
+
+// Get the capacity of the dynamic array.
+//
+static inline size_t
+rb_darray_capa(const void *ary)
+{
+ const rb_darray_meta_t *meta = ary;
+ return meta ? meta->capa : 0;
+}
+
+/* Free the dynamic array. */
+static inline void
+rb_darray_free(void *ary)
+{
+ xfree(ary);
+}
+
+static inline void
+rb_darray_free_without_gc(void *ary)
+{
+ free(ary);
+}
+
+/* Internal function. Like rb_xcalloc_mul_add. */
+static inline void *
+rb_darray_calloc_mul_add(size_t x, size_t y, size_t z)
+{
+ size_t size = rbimpl_size_add_or_raise(rbimpl_size_mul_or_raise(x, y), z);
+
+ void *ptr = xcalloc(1, size);
+ RUBY_ASSERT(ptr != NULL);
+
+ return ptr;
+}
+
+/* Internal function. Like rb_xcalloc_mul_add but does not trigger GC. */
+static inline void *
+rb_darray_calloc_mul_add_without_gc(size_t x, size_t y, size_t z)
+{
+ size_t size = rbimpl_size_add_or_raise(rbimpl_size_mul_or_raise(x, y), z);
+
+ void *ptr = calloc(1, size);
+ if (ptr == NULL) rb_bug("rb_darray_calloc_mul_add_without_gc: failed");
+
+ return ptr;
+}
+
+/* Internal function. Like rb_xrealloc_mul_add. */
+static inline void *
+rb_darray_realloc_mul_add(void *orig_ptr, size_t x, size_t y, size_t z)
+{
+ size_t size = rbimpl_size_add_or_raise(rbimpl_size_mul_or_raise(x, y), z);
+
+ void *ptr = xrealloc(orig_ptr, size);
+ RUBY_ASSERT(ptr != NULL);
+
+ return ptr;
+}
+
+/* Internal function. Like rb_xrealloc_mul_add but does not trigger GC. */
+static inline void *
+rb_darray_realloc_mul_add_without_gc(void *orig_ptr, size_t x, size_t y, size_t z)
+{
+ size_t size = rbimpl_size_add_or_raise(rbimpl_size_mul_or_raise(x, y), z);
+
+ void *ptr = realloc(orig_ptr, size);
+ if (ptr == NULL) rb_bug("rb_darray_realloc_mul_add_without_gc: failed");
+
+ return ptr;
+}
+
+/* Internal function. Resizes the capacity of a darray. The new capacity must
+ * be greater than or equal to the size of the darray. */
+static inline void
+rb_darray_resize_capa_impl(void *ptr_to_ary, size_t new_capa, size_t header_size, size_t element_size,
+ void *(*realloc_mul_add_impl)(void *, size_t, size_t, size_t))
+{
+ rb_darray_meta_t **ptr_to_ptr_to_meta = ptr_to_ary;
+ rb_darray_meta_t *meta = *ptr_to_ptr_to_meta;
+
+ rb_darray_meta_t *new_ary = realloc_mul_add_impl(meta, new_capa, element_size, header_size);
+
+ if (meta == NULL) {
+ /* First allocation. Initialize size. On subsequence allocations
+ * realloc takes care of carrying over the size. */
+ new_ary->size = 0;
+ }
+
+ RUBY_ASSERT(new_ary->size <= new_capa);
+
+ new_ary->capa = new_capa;
+
+ // We don't have access to the type of the dynamic array in function context.
+ // Write out result with memcpy to avoid strict aliasing issue.
+ memcpy(ptr_to_ary, &new_ary, sizeof(new_ary));
+}
+
+// Internal function
+// Ensure there is space for one more element.
+// Note: header_size can be bigger than sizeof(rb_darray_meta_t) when T is __int128_t, for example.
+static inline void
+rb_darray_ensure_space(void *ptr_to_ary, size_t header_size, size_t element_size,
+ void *(*realloc_mul_add_impl)(void *, size_t, size_t, size_t))
+{
+ rb_darray_meta_t **ptr_to_ptr_to_meta = ptr_to_ary;
+ rb_darray_meta_t *meta = *ptr_to_ptr_to_meta;
+ size_t current_capa = rb_darray_capa(meta);
+ if (rb_darray_size(meta) < current_capa) return;
+
+ // Double the capacity
+ size_t new_capa = current_capa == 0 ? 1 : current_capa * 2;
+
+ rb_darray_resize_capa_impl(ptr_to_ary, new_capa, header_size, element_size, realloc_mul_add_impl);
+}
+
+static inline void
+rb_darray_make_impl(void *ptr_to_ary, size_t array_size, size_t header_size, size_t element_size,
+ void *(*calloc_mul_add_impl)(size_t, size_t, size_t))
+{
+ rb_darray_meta_t **ptr_to_ptr_to_meta = ptr_to_ary;
+ if (array_size == 0) {
+ *ptr_to_ptr_to_meta = NULL;
+ return;
+ }
+
+ rb_darray_meta_t *meta = calloc_mul_add_impl(array_size, element_size, header_size);
+
+ meta->size = array_size;
+ meta->capa = array_size;
+
+ // We don't have access to the type of the dynamic array in function context.
+ // Write out result with memcpy to avoid strict aliasing issue.
+ memcpy(ptr_to_ary, &meta, sizeof(meta));
+}
+
+#endif /* RUBY_DARRAY_H */
diff --git a/debug.c b/debug.c
index a600259818..1a2c27a5be 100644
--- a/debug.c
+++ b/debug.c
@@ -9,13 +9,33 @@
**********************************************************************/
-#include "ruby/ruby.h"
+#include "ruby/internal/config.h"
+
+#include <stdio.h>
+
+#include "eval_intern.h"
+#include "encindex.h"
+#include "id.h"
+#include "internal/signal.h"
#include "ruby/encoding.h"
+#include "ruby/io.h"
+#include "ruby/ruby.h"
#include "ruby/util.h"
-#include "vm_debug.h"
-#include "eval_intern.h"
+#include "symbol.h"
#include "vm_core.h"
-#include "id.h"
+#include "vm_debug.h"
+#include "vm_callinfo.h"
+#include "ruby/thread_native.h"
+#include "ractor_core.h"
+
+/* This is the only place struct RIMemo is actually used */
+struct RIMemo {
+ VALUE flags;
+ VALUE v0;
+ VALUE v1;
+ VALUE v2;
+ VALUE v3;
+};
/* for gdb */
const union {
@@ -26,15 +46,49 @@ const union {
enum ruby_method_ids method_ids;
enum ruby_id_types id_types;
enum ruby_fl_type fl_types;
+ enum ruby_fl_ushift fl_ushift;
enum ruby_encoding_consts encoding_consts;
enum ruby_coderange_type enc_coderange_types;
enum ruby_econv_flag_type econv_flag_types;
+ rb_econv_result_t econv_result;
+ enum ruby_preserved_encindex encoding_index;
+ enum ruby_robject_flags robject_flags;
+ enum ruby_rmodule_flags rmodule_flags;
+ enum ruby_rstring_flags rstring_flags;
+ enum ruby_rarray_flags rarray_flags;
+ enum ruby_rarray_consts rarray_consts;
+ enum rbimpl_typeddata_flags rtypeddata_consts;
enum {
+ RUBY_FMODE_READABLE = FMODE_READABLE,
+ RUBY_FMODE_WRITABLE = FMODE_WRITABLE,
+ RUBY_FMODE_READWRITE = FMODE_READWRITE,
+ RUBY_FMODE_BINMODE = FMODE_BINMODE,
+ RUBY_FMODE_SYNC = FMODE_SYNC,
+ RUBY_FMODE_TTY = FMODE_TTY,
+ RUBY_FMODE_DUPLEX = FMODE_DUPLEX,
+ RUBY_FMODE_APPEND = FMODE_APPEND,
+ RUBY_FMODE_CREATE = FMODE_CREATE,
+ RUBY_FMODE_NOREVLOOKUP = 0x00000100,
+ RUBY_FMODE_TRUNC = FMODE_TRUNC,
+ RUBY_FMODE_TEXTMODE = FMODE_TEXTMODE,
+ RUBY_FMODE_EXTERNAL = 0x00010000,
+ RUBY_FMODE_SETENC_BY_BOM = FMODE_SETENC_BY_BOM,
+ RUBY_FMODE_UNIX = 0x00200000,
+ RUBY_FMODE_INET = 0x00400000,
+ RUBY_FMODE_INET6 = 0x00800000,
+
RUBY_NODE_TYPESHIFT = NODE_TYPESHIFT,
RUBY_NODE_TYPEMASK = NODE_TYPEMASK,
RUBY_NODE_LSHIFT = NODE_LSHIFT,
RUBY_NODE_FL_NEWLINE = NODE_FL_NEWLINE
} various;
+ union {
+ enum imemo_type types;
+ enum {RUBY_IMEMO_MASK = IMEMO_MASK} mask;
+ struct RIMemo *ptr;
+ } imemo;
+ struct RSymbol *symbol_ptr;
+ enum vm_call_flag_bits vm_call_flags;
} ruby_dummy_gdb_enums;
const SIGNED_VALUE RUBY_NODE_LMASK = NODE_LMASK;
@@ -43,9 +97,9 @@ int
ruby_debug_print_indent(int level, int debug_level, int indent_level)
{
if (level < debug_level) {
- fprintf(stderr, "%*s", indent_level, "");
- fflush(stderr);
- return TRUE;
+ fprintf(stderr, "%*s", indent_level, "");
+ fflush(stderr);
+ return TRUE;
}
return FALSE;
}
@@ -59,15 +113,17 @@ ruby_debug_printf(const char *format, ...)
va_end(ap);
}
+#include "internal/gc.h"
+
VALUE
ruby_debug_print_value(int level, int debug_level, const char *header, VALUE obj)
{
if (level < debug_level) {
- VALUE str;
- str = rb_inspect(obj);
- fprintf(stderr, "DBG> %s: %s\n", header,
- obj == (VALUE)(SIGNED_VALUE)-1 ? "" : StringValueCStr(str));
- fflush(stderr);
+ char buff[0x100];
+ rb_raw_obj_info(buff, 0x100, obj);
+
+ fprintf(stderr, "DBG> %s: %s\n", header, buff);
+ fflush(stderr);
}
return obj;
}
@@ -82,8 +138,8 @@ ID
ruby_debug_print_id(int level, int debug_level, const char *header, ID id)
{
if (level < debug_level) {
- fprintf(stderr, "DBG> %s: %s\n", header, rb_id2name(id));
- fflush(stderr);
+ fprintf(stderr, "DBG> %s: %s\n", header, rb_id2name(id));
+ fflush(stderr);
}
return id;
}
@@ -92,41 +148,583 @@ NODE *
ruby_debug_print_node(int level, int debug_level, const char *header, const NODE *node)
{
if (level < debug_level) {
- fprintf(stderr, "DBG> %s: %s (%u)\n", header,
- ruby_node_name(nd_type(node)), nd_line(node));
+ fprintf(stderr, "DBG> %s: %s (id: %d, line: %d, location: (%d,%d)-(%d,%d))\n",
+ header, ruby_node_name(nd_type(node)), nd_node_id(node), nd_line(node),
+ nd_first_lineno(node), nd_first_column(node),
+ nd_last_lineno(node), nd_last_column(node));
}
return (NODE *)node;
}
void
+ruby_debug_print_n(const NODE *node)
+{
+ ruby_debug_print_node(0, 1, "", node);
+}
+
+void
ruby_debug_breakpoint(void)
{
/* */
}
-static void
-set_debug_option(const char *str, int len, void *arg)
-{
-#if defined _WIN32 && RUBY_MSVCRT_VERSION >= 80
- extern int ruby_w32_rtc_error;
+#if defined _WIN32
+extern int ruby_w32_rtc_error;
+#endif
+#if defined _WIN32 || defined __CYGWIN__
+#include <windows.h>
+UINT ruby_w32_codepage[2];
#endif
+extern int ruby_rgengc_debug;
+extern int ruby_on_ci;
+
+int
+ruby_env_debug_option(const char *str, int len, void *arg)
+{
+ int ov;
+ size_t retlen;
+ unsigned long n;
+#define NAME_MATCH(name) (len == sizeof(name) - 1 && strncmp(str, (name), len) == 0)
#define SET_WHEN(name, var, val) do { \
- if (len == sizeof(name) - 1 && \
- strncmp(str, (name), len) == 0) { \
- (var) = (val); \
- return; \
- } \
+ if (NAME_MATCH(name)) { \
+ (var) = (val); \
+ return 1; \
+ } \
} while (0)
- SET_WHEN("gc_stress", *ruby_initial_gc_stress_ptr, Qtrue);
+#define NAME_MATCH_VALUE(name) \
+ ((size_t)len >= sizeof(name)-1 && \
+ strncmp(str, (name), sizeof(name)-1) == 0 && \
+ ((len == sizeof(name)-1 && !(len = 0)) || \
+ (str[sizeof(name)-1] == '=' && \
+ (str += sizeof(name), len -= sizeof(name), 1))))
+#define SET_UINT(val) do { \
+ n = ruby_scan_digits(str, len, 10, &retlen, &ov); \
+ if (!ov && retlen) { \
+ val = (unsigned int)n; \
+ } \
+ str += retlen; \
+ len -= retlen; \
+ } while (0)
+#define SET_UINT_LIST(name, vals, num) do { \
+ int i; \
+ for (i = 0; i < (num); ++i) { \
+ SET_UINT((vals)[i]); \
+ if (!len || *str != ':') break; \
+ ++str; \
+ --len; \
+ } \
+ if (len > 0) { \
+ fprintf(stderr, "ignored "name" option: '%.*s'\n", len, str); \
+ } \
+ } while (0)
+#define SET_WHEN_UINT(name, vals, num, req) \
+ if (NAME_MATCH_VALUE(name)) { \
+ if (!len) req; \
+ else SET_UINT_LIST(name, vals, num); \
+ return 1; \
+ }
+
+ if (NAME_MATCH("gc_stress")) {
+ rb_gc_initial_stress_set(Qtrue);
+ return 1;
+ }
SET_WHEN("core", ruby_enable_coredump, 1);
-#if defined _WIN32 && RUBY_MSVCRT_VERSION >= 80
+ SET_WHEN("ci", ruby_on_ci, 1);
+ SET_WHEN_UINT("rgengc", &ruby_rgengc_debug, 1, ruby_rgengc_debug = 1);
+#if defined _WIN32
SET_WHEN("rtc_error", ruby_w32_rtc_error, 1);
#endif
- fprintf(stderr, "unexpected debug option: %.*s\n", len, str);
+#if defined _WIN32 || defined __CYGWIN__
+ SET_WHEN_UINT("codepage", ruby_w32_codepage, numberof(ruby_w32_codepage),
+ fprintf(stderr, "missing codepage argument"));
+#endif
+ return 0;
}
+static void
+set_debug_option(const char *str, int len, void *arg)
+{
+ if (!ruby_env_debug_option(str, len, arg)) {
+ fprintf(stderr, "unexpected debug option: %.*s\n", len, str);
+ }
+}
+
+#if USE_RUBY_DEBUG_LOG
+static void setup_debug_log(void);
+#else
+#define setup_debug_log()
+#endif
+
void
ruby_set_debug_option(const char *str)
{
ruby_each_words(str, set_debug_option, 0);
+ setup_debug_log();
+}
+
+#if USE_RUBY_DEBUG_LOG
+
+// RUBY_DEBUG_LOG features
+// See vm_debug.h comments for details.
+
+#define MAX_DEBUG_LOG 0x1000
+#define MAX_DEBUG_LOG_MESSAGE_LEN 0x0200
+#define MAX_DEBUG_LOG_FILTER_LEN 0x0020
+#define MAX_DEBUG_LOG_FILTER_NUM 0x0010
+
+enum ruby_debug_log_mode ruby_debug_log_mode;
+
+struct debug_log_filter {
+ enum debug_log_filter_type {
+ dlf_all,
+ dlf_file, // "file:..."
+ dlf_func, // "func:..."
+ } type;
+ bool negative;
+ char str[MAX_DEBUG_LOG_FILTER_LEN];
+};
+
+static const char *dlf_type_names[] = {
+ "all",
+ "file",
+ "func",
+};
+
+#ifdef MAX_PATH
+#define DEBUG_LOG_MAX_PATH (MAX_PATH-1)
+#else
+#define DEBUG_LOG_MAX_PATH 255
+#endif
+
+static struct {
+ char *mem;
+ unsigned int cnt;
+ struct debug_log_filter filters[MAX_DEBUG_LOG_FILTER_NUM];
+ unsigned int filters_num;
+ bool show_pid;
+ rb_nativethread_lock_t lock;
+ char output_file[DEBUG_LOG_MAX_PATH+1];
+ FILE *output;
+} debug_log;
+
+static char *
+RUBY_DEBUG_LOG_MEM_ENTRY(unsigned int index)
+{
+ return &debug_log.mem[MAX_DEBUG_LOG_MESSAGE_LEN * index];
+}
+
+static enum debug_log_filter_type
+filter_type(const char *str, int *skiplen)
+{
+ if (strncmp(str, "file:", 5) == 0) {
+ *skiplen = 5;
+ return dlf_file;
+ }
+ else if(strncmp(str, "func:", 5) == 0) {
+ *skiplen = 5;
+ return dlf_func;
+ }
+ else {
+ *skiplen = 0;
+ return dlf_all;
+ }
+}
+
+static void
+setup_debug_log_filter(void)
+{
+ const char *filter_config = getenv("RUBY_DEBUG_LOG_FILTER");
+
+ if (filter_config && strlen(filter_config) > 0) {
+ unsigned int i;
+ for (i=0; i<MAX_DEBUG_LOG_FILTER_NUM && filter_config; i++) {
+ size_t len;
+ const char *str = filter_config;
+ const char *p;
+
+ if ((p = strchr(str, ',')) == NULL) {
+ len = strlen(str);
+ filter_config = NULL;
+ }
+ else {
+ len = p - str - 1; // 1 is ','
+ filter_config = p + 1;
+ }
+
+ // positive/negative
+ if (*str == '-') {
+ debug_log.filters[i].negative = true;
+ str++;
+ }
+ else if (*str == '+') {
+ // negative is false on default.
+ str++;
+ }
+
+ // type
+ int skiplen;
+ debug_log.filters[i].type = filter_type(str, &skiplen);
+ len -= skiplen;
+
+ if (len >= MAX_DEBUG_LOG_FILTER_LEN) {
+ fprintf(stderr, "too long: %s (max:%d)\n", str, MAX_DEBUG_LOG_FILTER_LEN - 1);
+ exit(1);
+ }
+
+ // body
+ strncpy(debug_log.filters[i].str, str + skiplen, len);
+ debug_log.filters[i].str[len] = 0;
+ }
+ debug_log.filters_num = i;
+
+ for (i=0; i<debug_log.filters_num; i++) {
+ fprintf(stderr, "RUBY_DEBUG_LOG_FILTER[%d]=%s (%s%s)\n", i,
+ debug_log.filters[i].str,
+ debug_log.filters[i].negative ? "-" : "",
+ dlf_type_names[debug_log.filters[i].type]);
+ }
+ }
+}
+
+static void
+setup_debug_log(void)
+{
+ // check RUBY_DEBUG_LOG
+ const char *log_config = getenv("RUBY_DEBUG_LOG");
+ if (log_config && strlen(log_config) > 0) {
+ if (strcmp(log_config, "mem") == 0) {
+ debug_log.mem = (char *)malloc(MAX_DEBUG_LOG * MAX_DEBUG_LOG_MESSAGE_LEN);
+ if (debug_log.mem == NULL) {
+ fprintf(stderr, "setup_debug_log failed (can't allocate memory)\n");
+ exit(1);
+ }
+ ruby_debug_log_mode |= ruby_debug_log_memory;
+ }
+ else if (strcmp(log_config, "stderr") == 0) {
+ ruby_debug_log_mode |= ruby_debug_log_stderr;
+ }
+ else {
+ ruby_debug_log_mode |= ruby_debug_log_file;
+
+ // pid extension with %p
+ unsigned long len = strlen(log_config);
+
+ for (unsigned long i=0, j=0; i<len; i++) {
+ const char c = log_config[i];
+
+ if (c == '%') {
+ i++;
+ switch (log_config[i]) {
+ case '%':
+ debug_log.output_file[j++] = '%';
+ break;
+ case 'p':
+ snprintf(debug_log.output_file + j, DEBUG_LOG_MAX_PATH - j, "%d", getpid());
+ j = strlen(debug_log.output_file);
+ break;
+ default:
+ fprintf(stderr, "can not parse RUBY_DEBUG_LOG filename: %s\n", log_config);
+ exit(1);
+ }
+ }
+ else {
+ debug_log.output_file[j++] = c;
+ }
+
+ if (j >= DEBUG_LOG_MAX_PATH) {
+ fprintf(stderr, "RUBY_DEBUG_LOG=%s is too long\n", log_config);
+ exit(1);
+ }
+ }
+
+ if ((debug_log.output = fopen(debug_log.output_file, "w")) == NULL) {
+ fprintf(stderr, "can not open %s for RUBY_DEBUG_LOG\n", log_config);
+ exit(1);
+ }
+ setvbuf(debug_log.output, NULL, _IONBF, 0);
+ }
+
+ fprintf(stderr, "RUBY_DEBUG_LOG=%s %s%s%s\n", log_config,
+ (ruby_debug_log_mode & ruby_debug_log_memory) ? "[mem]" : "",
+ (ruby_debug_log_mode & ruby_debug_log_stderr) ? "[stderr]" : "",
+ (ruby_debug_log_mode & ruby_debug_log_file) ? "[file]" : "");
+ if (debug_log.output_file[0]) {
+ fprintf(stderr, "RUBY_DEBUG_LOG filename=%s\n", debug_log.output_file);
+ }
+
+ rb_nativethread_lock_initialize(&debug_log.lock);
+
+ setup_debug_log_filter();
+
+ if (getenv("RUBY_DEBUG_LOG_PID")) {
+ debug_log.show_pid = true;
+ }
+ }
+}
+
+static bool
+check_filter(const char *str, const struct debug_log_filter *filter, bool *state)
+{
+ if (filter->negative) {
+ if (strstr(str, filter->str) == NULL) {
+ *state = true;
+ return false;
+ }
+ else {
+ *state = false;
+ return true;
+ }
+ }
+ else {
+ if (strstr(str, filter->str) != NULL) {
+ *state = true;
+ return true;
+ }
+ else {
+ *state = false;
+ return false;
+ }
+ }
+}
+
+//
+// RUBY_DEBUG_LOG_FILTER=-foo,-bar,baz,boo
+// returns true if
+// (func_name or file_name) doesn't contain foo
+// and
+// (func_name or file_name) doesn't contain bar
+// and
+// (func_name or file_name) contains baz or boo
+//
+// RUBY_DEBUG_LOG_FILTER=foo,bar,-baz,-boo
+// returns true if
+// (func_name or file_name) contains foo or bar
+// or
+// (func_name or file_name) doesn't contain baz and
+// (func_name or file_name) doesn't contain boo and
+//
+// You can specify "file:" (ex file:foo) or "func:" (ex func:foo)
+// prefixes to specify the filter for.
+//
+bool
+ruby_debug_log_filter(const char *func_name, const char *file_name)
+{
+ if (debug_log.filters_num > 0) {
+ bool state = false;
+
+ for (unsigned int i = 0; i<debug_log.filters_num; i++) {
+ const struct debug_log_filter *filter = &debug_log.filters[i];
+
+ switch (filter->type) {
+ case dlf_all:
+ if (check_filter(func_name, filter, &state)) return state;
+ if (check_filter(file_name, filter, &state)) return state;
+ break;
+ case dlf_func:
+ if (check_filter(func_name, filter, &state)) return state;
+ break;
+ case dlf_file:
+ if (check_filter(file_name, filter, &state)) return state;
+ break;
+ }
+ }
+ return state;
+ }
+ else {
+ return true;
+ }
+}
+
+static const char *
+pretty_filename(const char *path)
+{
+ // basename is one idea.
+ const char *s;
+ while ((s = strchr(path, '/')) != NULL) {
+ path = s+1;
+ }
+ return path;
+}
+
+#undef ruby_debug_log
+void
+ruby_debug_log(const char *file, int line, const char *func_name, const char *fmt, ...)
+{
+ char buff[MAX_DEBUG_LOG_MESSAGE_LEN] = {0};
+ int len = 0;
+ int r = 0;
+
+ if (debug_log.show_pid) {
+ r = snprintf(buff + len, MAX_DEBUG_LOG_MESSAGE_LEN, "pid:%d\t", getpid());
+ if (r < 0) rb_bug("ruby_debug_log returns %d", r);
+ len += r;
+ }
+
+ // message title
+ if (func_name && len < MAX_DEBUG_LOG_MESSAGE_LEN) {
+ r = snprintf(buff + len, MAX_DEBUG_LOG_MESSAGE_LEN, "%s\t", func_name);
+ if (r < 0) rb_bug("ruby_debug_log returns %d", r);
+ len += r;
+ }
+
+ // message
+ if (fmt && len < MAX_DEBUG_LOG_MESSAGE_LEN) {
+ va_list args;
+ va_start(args, fmt);
+ r = vsnprintf(buff + len, MAX_DEBUG_LOG_MESSAGE_LEN - len, fmt, args);
+ va_end(args);
+ if (r < 0) rb_bug("ruby_debug_log vsnprintf() returns %d", r);
+ len += r;
+ }
+
+ // optional information
+
+ // C location
+ if (file && len < MAX_DEBUG_LOG_MESSAGE_LEN) {
+ r = snprintf(buff + len, MAX_DEBUG_LOG_MESSAGE_LEN, "\t%s:%d", pretty_filename(file), line);
+ if (r < 0) rb_bug("ruby_debug_log returns %d", r);
+ len += r;
+ }
+
+ rb_execution_context_t *ec = rb_current_execution_context(false);
+
+ // Ruby location
+ int ruby_line;
+ const char *ruby_file = ec ? rb_source_location_cstr(&ruby_line) : NULL;
+
+ if (len < MAX_DEBUG_LOG_MESSAGE_LEN) {
+ if (ruby_file) {
+ r = snprintf(buff + len, MAX_DEBUG_LOG_MESSAGE_LEN - len, "\t%s:%d", pretty_filename(ruby_file), ruby_line);
+ }
+ else {
+ r = snprintf(buff + len, MAX_DEBUG_LOG_MESSAGE_LEN - len, "\t");
+ }
+ if (r < 0) rb_bug("ruby_debug_log returns %d", r);
+ len += r;
+ }
+
+#ifdef RUBY_NT_SERIAL
+ // native thread information
+ if (len < MAX_DEBUG_LOG_MESSAGE_LEN) {
+ r = snprintf(buff + len, MAX_DEBUG_LOG_MESSAGE_LEN - len, "\tnt:%d", ruby_nt_serial);
+ if (r < 0) rb_bug("ruby_debug_log returns %d", r);
+ len += r;
+ }
+#endif
+
+ if (ec) {
+ rb_thread_t *th = ec ? rb_ec_thread_ptr(ec) : NULL;
+
+ // ractor information
+ if (ruby_single_main_ractor == NULL) {
+ rb_ractor_t *cr = th ? th->ractor : NULL;
+ rb_vm_t *vm = GET_VM();
+
+ if (r && len < MAX_DEBUG_LOG_MESSAGE_LEN) {
+ r = snprintf(buff + len, MAX_DEBUG_LOG_MESSAGE_LEN - len, "\tr:#%d/%u (%u)",
+ cr ? (int)rb_ractor_id(cr) : -1, vm->ractor.cnt, vm->ractor.sched.running_cnt);
+
+ if (r < 0) rb_bug("ruby_debug_log returns %d", r);
+ len += r;
+ }
+ }
+
+ // thread information
+ if (th && r && len < MAX_DEBUG_LOG_MESSAGE_LEN) {
+ rb_execution_context_t *rec = th->ractor ? th->ractor->threads.running_ec : NULL;
+ const rb_thread_t *rth = rec ? rec->thread_ptr : NULL;
+ const rb_thread_t *sth = th->ractor ? th->ractor->threads.sched.running : NULL;
+
+ if (rth != th || sth != th) {
+ r = snprintf(buff + len, MAX_DEBUG_LOG_MESSAGE_LEN - len, "\tth:%u (rth:%d,sth:%d)",
+ rb_th_serial(th), rth ? (int)rb_th_serial(rth) : -1, sth ? (int)rb_th_serial(sth) : -1);
+ }
+ else {
+ r = snprintf(buff + len, MAX_DEBUG_LOG_MESSAGE_LEN - len, "\tth:%u", rb_th_serial(th));
+ }
+ if (r < 0) rb_bug("ruby_debug_log returns %d", r);
+ len += r;
+ }
+ }
+
+ rb_nativethread_lock_lock(&debug_log.lock);
+ {
+ unsigned int cnt = debug_log.cnt++;
+
+ if (ruby_debug_log_mode & ruby_debug_log_memory) {
+ unsigned int index = cnt % MAX_DEBUG_LOG;
+ char *dst = RUBY_DEBUG_LOG_MEM_ENTRY(index);
+ strncpy(dst, buff, MAX_DEBUG_LOG_MESSAGE_LEN);
+ }
+ if (ruby_debug_log_mode & ruby_debug_log_stderr) {
+ fprintf(stderr, "%4u: %s\n", cnt, buff);
+ }
+ if (ruby_debug_log_mode & ruby_debug_log_file) {
+ fprintf(debug_log.output, "%u\t%s\n", cnt, buff);
+ }
+ }
+ rb_nativethread_lock_unlock(&debug_log.lock);
+}
+
+// for debugger
+static void
+debug_log_dump(FILE *out, unsigned int n)
+{
+ if (ruby_debug_log_mode & ruby_debug_log_memory) {
+ unsigned int size = debug_log.cnt > MAX_DEBUG_LOG ? MAX_DEBUG_LOG : debug_log.cnt;
+ unsigned int current_index = debug_log.cnt % MAX_DEBUG_LOG;
+ if (n == 0) n = size;
+ if (n > size) n = size;
+
+ for (unsigned int i=0; i<n; i++) {
+ int index = current_index - size + i;
+ if (index < 0) index += MAX_DEBUG_LOG;
+ VM_ASSERT(index <= MAX_DEBUG_LOG);
+ const char *mesg = RUBY_DEBUG_LOG_MEM_ENTRY(index);
+ fprintf(out, "%4u: %s\n", debug_log.cnt - size + i, mesg);
+ }
+ }
+ else {
+ fprintf(stderr, "RUBY_DEBUG_LOG=mem is not specified.");
+ }
}
+
+// for debuggers
+
+void
+ruby_debug_log_print(unsigned int n)
+{
+ debug_log_dump(stderr, n);
+}
+
+void
+ruby_debug_log_dump(const char *fname, unsigned int n)
+{
+ FILE *fp = fopen(fname, "w");
+ if (fp == NULL) {
+ fprintf(stderr, "can't open %s. give up.\n", fname);
+ }
+ else {
+ debug_log_dump(fp, n);
+ fclose(fp);
+ }
+}
+
+#else
+
+#undef ruby_debug_log
+void
+ruby_debug_log(const char *file, int line, const char *func_name, const char *fmt, ...)
+{
+ va_list args;
+
+ fprintf(stderr, "[%s:%d] %s: ", file, line, func_name);
+
+ va_start(args, fmt);
+ vfprintf(stderr, fmt, args);
+ va_end(args);
+
+ fprintf(stderr, "\n");
+}
+
+#endif // #if USE_RUBY_DEBUG_LOG
diff --git a/debug_counter.c b/debug_counter.c
new file mode 100644
index 0000000000..3dcc4c6a3a
--- /dev/null
+++ b/debug_counter.c
@@ -0,0 +1,150 @@
+/**********************************************************************
+
+ debug_counter.c -
+
+ created at: Tue Feb 21 16:51:18 2017
+
+ Copyright (C) 2017 Koichi Sasada
+
+**********************************************************************/
+
+#include "debug_counter.h"
+#include "internal.h"
+#include <stdio.h>
+#include <locale.h>
+#include "ruby/thread_native.h"
+
+#if USE_DEBUG_COUNTER
+
+const char *const rb_debug_counter_names[] = {
+#define DEBUG_COUNTER_NAME_EMPTY "" /* Suppress -Wstring-concatenation */
+ DEBUG_COUNTER_NAME_EMPTY
+#undef DEBUG_COUNTER_NAME_EMPTY
+#define RB_DEBUG_COUNTER(name) #name,
+#include "debug_counter.h"
+#undef RB_DEBUG_COUNTER
+};
+
+size_t rb_debug_counter[numberof(rb_debug_counter_names)];
+void rb_debug_counter_add_atomic(enum rb_debug_counter_type type, int add);
+
+static rb_nativethread_lock_t debug_counter_lock;
+
+__attribute__((constructor))
+static void
+debug_counter_setup(void)
+{
+ rb_nativethread_lock_initialize(&debug_counter_lock);
+}
+
+void
+rb_debug_counter_add_atomic(enum rb_debug_counter_type type, int add)
+{
+ rb_nativethread_lock_lock(&debug_counter_lock);
+ {
+ rb_debug_counter[(int)type] += add;
+ }
+ rb_nativethread_lock_unlock(&debug_counter_lock);
+}
+
+static int debug_counter_disable_show_at_exit = 0;
+
+// note that this operation is not atomic.
+void
+ruby_debug_counter_reset(void)
+{
+ for (int i = 0; i < RB_DEBUG_COUNTER_MAX; i++) {
+ rb_debug_counter[i] = 0;
+ }
+}
+
+// note that this operation is not atomic.
+size_t
+ruby_debug_counter_get(const char **names_ptr, size_t *counters_ptr)
+{
+ int i;
+ if (names_ptr != NULL) {
+ for (i=0; i<RB_DEBUG_COUNTER_MAX; i++) {
+ names_ptr[i] = rb_debug_counter_names[i];
+ }
+ }
+ if (counters_ptr != NULL) {
+ for (i=0; i<RB_DEBUG_COUNTER_MAX; i++) {
+ counters_ptr[i] = rb_debug_counter[i];
+ }
+ }
+
+ return RB_DEBUG_COUNTER_MAX;
+}
+
+void
+ruby_debug_counter_show_at_exit(int enable)
+{
+ debug_counter_disable_show_at_exit = !enable;
+}
+
+void
+rb_debug_counter_show_results(const char *msg)
+{
+ const char *env = getenv("RUBY_DEBUG_COUNTER_DISABLE");
+
+ setlocale(LC_NUMERIC, "");
+
+ if (env == NULL || strcmp("1", env) != 0) {
+ int i;
+ fprintf(stderr, "[RUBY_DEBUG_COUNTER]\t%d %s\n", getpid(), msg);
+ for (i=0; i<RB_DEBUG_COUNTER_MAX; i++) {
+ fprintf(stderr, "[RUBY_DEBUG_COUNTER]\t%-30s\t%'14"PRIuSIZE"\n",
+ rb_debug_counter_names[i],
+ rb_debug_counter[i]);
+ }
+ }
+}
+
+VALUE
+rb_debug_counter_show(RB_UNUSED_VAR(VALUE klass))
+{
+ rb_debug_counter_show_results("show_debug_counters");
+ ruby_debug_counter_show_at_exit(FALSE);
+ return Qnil;
+}
+
+VALUE
+rb_debug_counter_reset(RB_UNUSED_VAR(VALUE klass))
+{
+ ruby_debug_counter_reset();
+ return Qnil;
+}
+
+__attribute__((destructor))
+static void
+debug_counter_show_results_at_exit(void)
+{
+ if (debug_counter_disable_show_at_exit == 0) {
+ rb_debug_counter_show_results("normal exit.");
+ }
+}
+
+#else
+
+void
+rb_debug_counter_show_results(const char *msg)
+{
+}
+
+size_t
+ruby_debug_counter_get(const char **names_ptr, size_t *counters_ptr)
+{
+ return 0;
+}
+void
+ruby_debug_counter_reset(void)
+{
+}
+
+void
+ruby_debug_counter_show_at_exit(int enable)
+{
+}
+
+#endif /* USE_DEBUG_COUNTER */
diff --git a/debug_counter.h b/debug_counter.h
new file mode 100644
index 0000000000..c8d8ed8f11
--- /dev/null
+++ b/debug_counter.h
@@ -0,0 +1,425 @@
+/**********************************************************************
+
+ debug_counter.h -
+
+ created at: Tue Feb 21 16:51:18 2017
+
+ Copyright (C) 2017 Koichi Sasada
+
+**********************************************************************/
+
+#ifndef USE_DEBUG_COUNTER
+#define USE_DEBUG_COUNTER 0
+#endif
+
+#ifdef RB_DEBUG_COUNTER
+
+// method cache (IMC: inline method cache)
+RB_DEBUG_COUNTER(mc_inline_hit) // IMC hit
+RB_DEBUG_COUNTER(mc_inline_miss_klass) // IMC miss by different class
+RB_DEBUG_COUNTER(mc_inline_miss_invalidated) // IMC miss by invalidated ME
+RB_DEBUG_COUNTER(mc_inline_miss_empty) // IMC miss because prev is empty slot
+RB_DEBUG_COUNTER(mc_inline_miss_same_cc) // IMC miss, but same CC
+RB_DEBUG_COUNTER(mc_inline_miss_same_cme) // IMC miss, but same CME
+RB_DEBUG_COUNTER(mc_inline_miss_same_def) // IMC miss, but same definition
+RB_DEBUG_COUNTER(mc_inline_miss_diff) // IMC miss, different methods
+
+RB_DEBUG_COUNTER(cvar_write_inline_hit) // cvar cache hit on write
+RB_DEBUG_COUNTER(cvar_read_inline_hit) // cvar cache hit on read
+RB_DEBUG_COUNTER(cvar_inline_miss) // miss inline cache
+RB_DEBUG_COUNTER(cvar_class_invalidate) // invalidate cvar cache when define a cvar that's defined on a subclass
+RB_DEBUG_COUNTER(cvar_include_invalidate) // invalidate cvar cache on module include or prepend
+
+RB_DEBUG_COUNTER(mc_cme_complement) // number of acquiring complement CME
+RB_DEBUG_COUNTER(mc_cme_complement_hit) // number of cache hit for complemented CME
+
+RB_DEBUG_COUNTER(mc_search) // count for method lookup in class tree
+RB_DEBUG_COUNTER(mc_search_notfound) // method lookup, but not found
+RB_DEBUG_COUNTER(mc_search_super) // total traversed classes
+
+// callinfo
+RB_DEBUG_COUNTER(ci_packed) // number of packed CI
+RB_DEBUG_COUNTER(ci_kw) // non-packed CI w/ keywords
+RB_DEBUG_COUNTER(ci_nokw) // non-packed CI w/o keywords
+RB_DEBUG_COUNTER(ci_runtime) // creating temporary CI
+
+// callcache
+RB_DEBUG_COUNTER(cc_new) // number of CC
+RB_DEBUG_COUNTER(cc_temp) // dummy CC (stack-allocated)
+RB_DEBUG_COUNTER(cc_found_in_ccs) // count for CC lookup success in CCS
+RB_DEBUG_COUNTER(cc_not_found_in_ccs) // count for CC lookup success in CCS
+
+RB_DEBUG_COUNTER(cc_ent_invalidate) // count for invalidating cc (cc->klass = Qundef)
+RB_DEBUG_COUNTER(cc_cme_invalidate) // count for invalidating CME
+
+RB_DEBUG_COUNTER(cc_invalidate_leaf) // count for invalidating klass if klass has no-subclasses
+RB_DEBUG_COUNTER(cc_invalidate_leaf_ccs) // corresponding CCS
+RB_DEBUG_COUNTER(cc_invalidate_leaf_callable) // complimented cache (no-subclasses)
+RB_DEBUG_COUNTER(cc_invalidate_tree) // count for invalidating klass if klass has subclasses
+RB_DEBUG_COUNTER(cc_invalidate_tree_cme) // cme if cme is found in this class or superclasses
+RB_DEBUG_COUNTER(cc_invalidate_tree_callable) // complimented cache (subclasses)
+RB_DEBUG_COUNTER(cc_invalidate_negative) // count for invalidating negative cache
+
+RB_DEBUG_COUNTER(ccs_free) // count for free'ing ccs
+RB_DEBUG_COUNTER(ccs_maxlen) // maximum length of ccs
+RB_DEBUG_COUNTER(ccs_found) // count for finding corresponding ccs on method lookup
+RB_DEBUG_COUNTER(ccs_not_found) // count for not found corresponding ccs on method lookup
+
+// vm_eval.c
+RB_DEBUG_COUNTER(call0_public)
+RB_DEBUG_COUNTER(call0_other)
+RB_DEBUG_COUNTER(gccct_hit)
+RB_DEBUG_COUNTER(gccct_miss)
+RB_DEBUG_COUNTER(gccct_null)
+
+// iseq
+RB_DEBUG_COUNTER(iseq_num) // number of total created iseq
+RB_DEBUG_COUNTER(iseq_cd_num) // number of total created cd (call_data)
+
+/*
+ * call cache fastpath usage
+ */
+RB_DEBUG_COUNTER(ccf_general)
+RB_DEBUG_COUNTER(ccf_iseq_setup)
+RB_DEBUG_COUNTER(ccf_iseq_setup_0start)
+RB_DEBUG_COUNTER(ccf_iseq_setup_tailcall_0start)
+RB_DEBUG_COUNTER(ccf_iseq_fix) /* several functions created with tool/mk_call_iseq_optimized.rb */
+RB_DEBUG_COUNTER(ccf_iseq_opt) /* has_opt == TRUE (has optional parameters), but other flags are FALSE */
+RB_DEBUG_COUNTER(ccf_iseq_kw1) /* vm_call_iseq_setup_kwparm_kwarg() */
+RB_DEBUG_COUNTER(ccf_iseq_kw2) /* vm_call_iseq_setup_kwparm_nokwarg() */
+RB_DEBUG_COUNTER(ccf_cfunc)
+RB_DEBUG_COUNTER(ccf_cfunc_with_frame)
+RB_DEBUG_COUNTER(ccf_ivar) /* attr_reader */
+RB_DEBUG_COUNTER(ccf_attrset) /* attr_writer */
+RB_DEBUG_COUNTER(ccf_method_missing)
+RB_DEBUG_COUNTER(ccf_zsuper)
+RB_DEBUG_COUNTER(ccf_bmethod)
+RB_DEBUG_COUNTER(ccf_opt_send)
+RB_DEBUG_COUNTER(ccf_opt_call)
+RB_DEBUG_COUNTER(ccf_opt_block_call)
+RB_DEBUG_COUNTER(ccf_opt_struct_aref)
+RB_DEBUG_COUNTER(ccf_opt_struct_aset)
+RB_DEBUG_COUNTER(ccf_super_method)
+RB_DEBUG_COUNTER(ccf_cfunc_other)
+RB_DEBUG_COUNTER(ccf_cfunc_only_splat)
+RB_DEBUG_COUNTER(ccf_cfunc_only_splat_kw)
+RB_DEBUG_COUNTER(ccf_iseq_bmethod)
+RB_DEBUG_COUNTER(ccf_noniseq_bmethod)
+RB_DEBUG_COUNTER(ccf_opt_send_complex)
+RB_DEBUG_COUNTER(ccf_opt_send_simple)
+
+/*
+ * control frame push counts.
+ *
+ * * frame_push: frame push counts.
+ * * frame_push_*: frame push counts per each type.
+ * * frame_R2R: Ruby frame to Ruby frame
+ * * frame_R2C: Ruby frame to C frame
+ * * frame_C2C: C frame to C frame
+ * * frame_C2R: C frame to Ruby frame
+ */
+RB_DEBUG_COUNTER(frame_push)
+RB_DEBUG_COUNTER(frame_push_method)
+RB_DEBUG_COUNTER(frame_push_block)
+RB_DEBUG_COUNTER(frame_push_class)
+RB_DEBUG_COUNTER(frame_push_top)
+RB_DEBUG_COUNTER(frame_push_cfunc)
+RB_DEBUG_COUNTER(frame_push_ifunc)
+RB_DEBUG_COUNTER(frame_push_eval)
+RB_DEBUG_COUNTER(frame_push_rescue)
+RB_DEBUG_COUNTER(frame_push_dummy)
+
+RB_DEBUG_COUNTER(frame_R2R)
+RB_DEBUG_COUNTER(frame_R2C)
+RB_DEBUG_COUNTER(frame_C2C)
+RB_DEBUG_COUNTER(frame_C2R)
+
+/* instance variable counts */
+RB_DEBUG_COUNTER(ivar_get_obj_hit) // Only T_OBJECT hits
+RB_DEBUG_COUNTER(ivar_get_obj_miss) // Only T_OBJECT misses
+RB_DEBUG_COUNTER(ivar_get_ic_hit) // All hits
+RB_DEBUG_COUNTER(ivar_get_ic_miss) // All misses
+RB_DEBUG_COUNTER(ivar_set_ic_hit) // All hits
+RB_DEBUG_COUNTER(ivar_set_obj_hit) // Only T_OBJECT hits
+RB_DEBUG_COUNTER(ivar_set_obj_miss) // Only T_OBJECT misses
+RB_DEBUG_COUNTER(ivar_set_ic_miss) // All misses
+RB_DEBUG_COUNTER(ivar_set_ic_miss_noobject) // Miss because non T_OBJECT
+RB_DEBUG_COUNTER(ivar_get_base) // Calls to `rb_ivar_get` (very slow path)
+RB_DEBUG_COUNTER(ivar_set_base) // Calls to `ivar_set` (very slow path)
+RB_DEBUG_COUNTER(ivar_get_ic_miss_set) // Misses on IV reads where the cache was wrong
+RB_DEBUG_COUNTER(ivar_get_cc_miss_set) // Misses on attr_reader where the cache was wrong
+RB_DEBUG_COUNTER(ivar_get_ic_miss_unset) // Misses on IV read where the cache wasn't set
+RB_DEBUG_COUNTER(ivar_get_cc_miss_unset) // Misses on attr_reader where the cache wasn't set
+
+/* local variable counts
+ *
+ * * lvar_get: total lvar get counts (VM insn)
+ * * lvar_get_dynamic: lvar get counts if accessing upper env (VM insn)
+ * * lvar_set*: same as "get"
+ * * lvar_set_slowpath: counts using vm_env_write_slowpath()
+ */
+RB_DEBUG_COUNTER(lvar_get)
+RB_DEBUG_COUNTER(lvar_get_dynamic)
+RB_DEBUG_COUNTER(lvar_set)
+RB_DEBUG_COUNTER(lvar_set_dynamic)
+RB_DEBUG_COUNTER(lvar_set_slowpath)
+
+/* GC counts:
+ *
+ * * count: simple count
+ * * _minor: minor gc
+ * * _major: major gc
+ * * other suffix is corresponding to last_gc_info or
+ * gc_profile_record_flag in gc.c.
+ */
+RB_DEBUG_COUNTER(gc_count)
+RB_DEBUG_COUNTER(gc_minor_newobj)
+RB_DEBUG_COUNTER(gc_minor_malloc)
+RB_DEBUG_COUNTER(gc_minor_method)
+RB_DEBUG_COUNTER(gc_minor_capi)
+RB_DEBUG_COUNTER(gc_minor_stress)
+RB_DEBUG_COUNTER(gc_major_nofree)
+RB_DEBUG_COUNTER(gc_major_oldgen)
+RB_DEBUG_COUNTER(gc_major_shady)
+RB_DEBUG_COUNTER(gc_major_force)
+RB_DEBUG_COUNTER(gc_major_oldmalloc)
+
+RB_DEBUG_COUNTER(gc_enter_start)
+RB_DEBUG_COUNTER(gc_enter_continue)
+RB_DEBUG_COUNTER(gc_enter_rest)
+RB_DEBUG_COUNTER(gc_enter_finalizer)
+
+RB_DEBUG_COUNTER(gc_isptr_trial)
+RB_DEBUG_COUNTER(gc_isptr_range)
+RB_DEBUG_COUNTER(gc_isptr_align)
+RB_DEBUG_COUNTER(gc_isptr_maybe)
+
+/* object allocation counts:
+ *
+ * * obj_newobj: newobj counts
+ * * obj_newobj_slowpath: newobj with slowpath counts
+ * * obj_newobj_wb_unprotected: newobj for wb_unprotected.
+ * * obj_free: obj_free() counts
+ * * obj_promote: promoted counts (oldgen)
+ * * obj_wb_unprotect: wb unprotect counts
+ *
+ * * obj_[type]_[attr]: *free'ed counts* for each type.
+ * Note that it is not a allocated counts.
+ * * [type]
+ * * _obj: T_OBJECT
+ * * _str: T_STRING
+ * * _ary: T_ARRAY
+ * * _xxx: T_XXX (hash, struct, ...)
+ *
+ * * [attr]
+ * * _ptr: R?? is not embed.
+ * * _embed: R?? is embed.
+ * * type specific attr.
+ * * str_shared: str is shared.
+ * * str_nofree: nofree
+ * * str_fstr: fstr
+ * * hash_empty: hash is empty
+ * * hash_1_4: has 1 to 4 entries
+ * * hash_5_8: has 5 to 8 entries
+ * * hash_g8: has n entries (n>8)
+ * * match_under4: has under 4 oniguruma regions allocated
+ * * match_ge4: has n regions allocated (4<=n<8)
+ * * match_ge8: has n regions allocated (8<=n)
+ * * data_empty: T_DATA but no memory free.
+ * * data_xfree: free'ed by xfree().
+ * * data_imm_free: free'ed immediately.
+ * * data_zombie: free'ed with zombie.
+ * * imemo_*: T_IMEMO with each type.
+ */
+RB_DEBUG_COUNTER(obj_newobj)
+RB_DEBUG_COUNTER(obj_newobj_slowpath)
+RB_DEBUG_COUNTER(obj_newobj_wb_unprotected)
+RB_DEBUG_COUNTER(obj_free)
+RB_DEBUG_COUNTER(obj_promote)
+RB_DEBUG_COUNTER(obj_wb_unprotect)
+
+RB_DEBUG_COUNTER(obj_obj_embed)
+RB_DEBUG_COUNTER(obj_obj_ptr)
+RB_DEBUG_COUNTER(obj_obj_too_complex)
+
+RB_DEBUG_COUNTER(obj_str_ptr)
+RB_DEBUG_COUNTER(obj_str_embed)
+RB_DEBUG_COUNTER(obj_str_shared)
+RB_DEBUG_COUNTER(obj_str_nofree)
+RB_DEBUG_COUNTER(obj_str_fstr)
+
+RB_DEBUG_COUNTER(obj_ary_embed)
+RB_DEBUG_COUNTER(obj_ary_ptr)
+RB_DEBUG_COUNTER(obj_ary_extracapa)
+/*
+ ary_shared_create: shared ary by Array#dup and so on.
+ ary_shared: finished in shard.
+ ary_shared_root_occupied: shared_root but has only 1 refcnt.
+ The number (ary_shared - ary_shared_root_occupied) is meaningful.
+ */
+RB_DEBUG_COUNTER(obj_ary_shared_create)
+RB_DEBUG_COUNTER(obj_ary_shared)
+RB_DEBUG_COUNTER(obj_ary_shared_root_occupied)
+
+RB_DEBUG_COUNTER(obj_hash_empty)
+RB_DEBUG_COUNTER(obj_hash_1)
+RB_DEBUG_COUNTER(obj_hash_2)
+RB_DEBUG_COUNTER(obj_hash_3)
+RB_DEBUG_COUNTER(obj_hash_4)
+RB_DEBUG_COUNTER(obj_hash_5_8)
+RB_DEBUG_COUNTER(obj_hash_g8)
+
+RB_DEBUG_COUNTER(obj_hash_null)
+RB_DEBUG_COUNTER(obj_hash_ar)
+RB_DEBUG_COUNTER(obj_hash_st)
+RB_DEBUG_COUNTER(obj_hash_force_convert)
+
+RB_DEBUG_COUNTER(obj_struct_embed)
+RB_DEBUG_COUNTER(obj_struct_ptr)
+
+RB_DEBUG_COUNTER(obj_data_empty)
+RB_DEBUG_COUNTER(obj_data_xfree)
+RB_DEBUG_COUNTER(obj_data_imm_free)
+RB_DEBUG_COUNTER(obj_data_zombie)
+
+RB_DEBUG_COUNTER(obj_match_under4)
+RB_DEBUG_COUNTER(obj_match_ge4)
+RB_DEBUG_COUNTER(obj_match_ge8)
+RB_DEBUG_COUNTER(obj_match_ptr)
+
+RB_DEBUG_COUNTER(obj_iclass_ptr)
+RB_DEBUG_COUNTER(obj_class_ptr)
+RB_DEBUG_COUNTER(obj_module_ptr)
+
+RB_DEBUG_COUNTER(obj_bignum_ptr)
+RB_DEBUG_COUNTER(obj_bignum_embed)
+RB_DEBUG_COUNTER(obj_float)
+RB_DEBUG_COUNTER(obj_complex)
+RB_DEBUG_COUNTER(obj_rational)
+
+RB_DEBUG_COUNTER(obj_regexp_ptr)
+RB_DEBUG_COUNTER(obj_file_ptr)
+RB_DEBUG_COUNTER(obj_symbol)
+
+RB_DEBUG_COUNTER(obj_imemo_ment)
+RB_DEBUG_COUNTER(obj_imemo_iseq)
+RB_DEBUG_COUNTER(obj_imemo_env)
+RB_DEBUG_COUNTER(obj_imemo_tmpbuf)
+RB_DEBUG_COUNTER(obj_imemo_cref)
+RB_DEBUG_COUNTER(obj_imemo_svar)
+RB_DEBUG_COUNTER(obj_imemo_throw_data)
+RB_DEBUG_COUNTER(obj_imemo_ifunc)
+RB_DEBUG_COUNTER(obj_imemo_memo)
+RB_DEBUG_COUNTER(obj_imemo_callinfo)
+RB_DEBUG_COUNTER(obj_imemo_callcache)
+RB_DEBUG_COUNTER(obj_imemo_constcache)
+RB_DEBUG_COUNTER(obj_imemo_fields)
+
+RB_DEBUG_COUNTER(opt_new_hit)
+RB_DEBUG_COUNTER(opt_new_miss)
+
+/* ar_table */
+RB_DEBUG_COUNTER(artable_hint_hit)
+RB_DEBUG_COUNTER(artable_hint_miss)
+RB_DEBUG_COUNTER(artable_hint_notfound)
+
+/* heap function counts
+ *
+ * * heap_xmalloc/realloc/xfree: call counts
+ */
+RB_DEBUG_COUNTER(heap_xmalloc)
+RB_DEBUG_COUNTER(heap_xrealloc)
+RB_DEBUG_COUNTER(heap_xfree)
+
+// VM sync
+RB_DEBUG_COUNTER(vm_sync_lock)
+RB_DEBUG_COUNTER(vm_sync_lock_enter)
+RB_DEBUG_COUNTER(vm_sync_lock_enter_nb)
+RB_DEBUG_COUNTER(vm_sync_lock_enter_cr)
+RB_DEBUG_COUNTER(vm_sync_barrier)
+
+/* load (not implemented yet) */
+/*
+RB_DEBUG_COUNTER(load_files)
+RB_DEBUG_COUNTER(load_path_is_not_realpath)
+*/
+#endif
+
+#ifndef RUBY_DEBUG_COUNTER_H
+#define RUBY_DEBUG_COUNTER_H 1
+
+#include "ruby/internal/config.h"
+#include <stddef.h> /* for size_t */
+#include "ruby/ruby.h" /* for VALUE */
+
+#if !defined(__GNUC__) && USE_DEBUG_COUNTER
+#error "USE_DEBUG_COUNTER is not supported by other than __GNUC__"
+#endif
+
+enum rb_debug_counter_type {
+#define RB_DEBUG_COUNTER(name) RB_DEBUG_COUNTER_##name,
+#include "debug_counter.h"
+ RB_DEBUG_COUNTER_MAX
+#undef RB_DEBUG_COUNTER
+};
+
+#if USE_DEBUG_COUNTER
+extern size_t rb_debug_counter[];
+RUBY_EXTERN struct rb_ractor_struct *ruby_single_main_ractor;
+RUBY_EXTERN void rb_debug_counter_add_atomic(enum rb_debug_counter_type type, int add);
+
+inline static int
+rb_debug_counter_add(enum rb_debug_counter_type type, int add, int cond)
+{
+ if (cond) {
+ if (ruby_single_main_ractor != NULL) {
+ rb_debug_counter[(int)type] += add;
+ }
+ else {
+ rb_debug_counter_add_atomic(type, add);
+ }
+ }
+ return cond;
+}
+
+inline static int
+rb_debug_counter_max(enum rb_debug_counter_type type, unsigned int num)
+{
+ // TODO: sync
+ if (rb_debug_counter[(int)type] < num) {
+ rb_debug_counter[(int)type] = num;
+ return 1;
+ }
+ else {
+ return 0;
+ }
+}
+
+VALUE rb_debug_counter_reset(VALUE klass);
+VALUE rb_debug_counter_show(VALUE klass);
+
+#define RB_DEBUG_COUNTER_INC(type) rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, 1)
+#define RB_DEBUG_COUNTER_INC_UNLESS(type, cond) (!rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, !(cond)))
+#define RB_DEBUG_COUNTER_INC_IF(type, cond) rb_debug_counter_add(RB_DEBUG_COUNTER_##type, 1, !!(cond))
+#define RB_DEBUG_COUNTER_ADD(type, num) rb_debug_counter_add(RB_DEBUG_COUNTER_##type, (num), 1)
+#define RB_DEBUG_COUNTER_SETMAX(type, num) rb_debug_counter_max(RB_DEBUG_COUNTER_##type, (unsigned int)(num))
+
+#else
+#define RB_DEBUG_COUNTER_INC(type) ((void)0)
+#define RB_DEBUG_COUNTER_INC_UNLESS(type, cond) (!!(cond))
+#define RB_DEBUG_COUNTER_INC_IF(type, cond) (!!(cond))
+#define RB_DEBUG_COUNTER_ADD(type, num) ((void)0)
+#define RB_DEBUG_COUNTER_SETMAX(type, num) 0
+#endif
+
+void rb_debug_counter_show_results(const char *msg);
+
+RUBY_SYMBOL_EXPORT_BEGIN
+
+size_t ruby_debug_counter_get(const char **names_ptr, size_t *counters_ptr);
+void ruby_debug_counter_reset(void);
+void ruby_debug_counter_show_at_exit(int enable);
+
+RUBY_SYMBOL_EXPORT_END
+
+#endif /* RUBY_DEBUG_COUNTER_H */
diff --git a/defs/gmake.mk b/defs/gmake.mk
index b5acb48576..f4b3d79990 100644
--- a/defs/gmake.mk
+++ b/defs/gmake.mk
@@ -1,18 +1,55 @@
-# -*- makefile-gmake -*-
-gnumake = yes
+# -*- mode: makefile-gmake; indent-tabs-mode: t -*-
-CHECK_TARGETS := exam love check%
-TEST_TARGETS := $(filter check test check% test% btest%,$(MAKECMDGOALS))
-TEST_TARGETS += $(subst check,test-all,$(patsubst check-%,test-%,$(TEST_TARGETS)))
-TEST_TARGETS := $(patsubst test-%,yes-test-%,$(patsubst btest-%,yes-btest-%,$(TEST_TARGETS)))
-TEST_DEPENDS := $(if $(TEST_TARGETS),$(filter all main exts,$(MAKECMDGOALS)))
-TEST_DEPENDS += $(if $(filter $(CHECK_TARGETS),$(MAKECMDGOALS)),main)
-TEST_DEPENDS += $(if $(filter main,$(TEST_DEPENDS)),$(if $(filter all,$(INSTALLDOC)),docs))
+reconfig config.status: export MAKE:=$(MAKE)
+export BASERUBY:=$(BASERUBY)
+export GIT
+override gnumake_recursive := $(if $(findstring n,$(firstword $(MFLAGS))),,+)
+override mflags := $(filter-out -j%,$(MFLAGS))
+MSPECOPT += $(if $(filter -j%,$(MFLAGS)),-j)
+nproc = $(subst -j,,$(filter -j%,$(MFLAGS)))
-ifneq ($(filter -O0 -Od,$(optflags)),)
-override XCFLAGS := $(filter-out -D_FORTIFY_SOURCE=%,$(XCFLAGS))
+ifeq ($(GITHUB_ACTIONS),true)
+# 93(bright yellow) is copied from .github/workflows/mingw.yml
+override ACTIONS_GROUP = @echo "::group::$(@:yes-%=%)"
+override ACTIONS_ENDGROUP = @echo "::endgroup::"
endif
+ifneq ($(filter darwin%,$(target_os)),)
+INSTRUBY_ENV += SDKROOT=
+endif
+INSTRUBY_ARGS += --gnumake
+
+ifeq ($(DOT_WAIT),)
+CHECK_TARGETS := great exam love check test check% test% btest%
+# expand test targets, and those dependents
+TEST_TARGETS := $(filter $(CHECK_TARGETS),$(MAKECMDGOALS))
+TEST_DEPENDS := $(filter-out commit $(TEST_TARGETS),$(MAKECMDGOALS))
+TEST_TARGETS := $(patsubst great,exam,$(TEST_TARGETS))
+TEST_DEPENDS := $(filter-out great $(TEST_TARGETS),$(TEST_DEPENDS))
+TEST_TARGETS := $(patsubst exam,test-bundled-gems test-bundler-parallel check,$(TEST_TARGETS))
+TEST_TARGETS := $(patsubst check,test-syntax-suggest test-spec test-all test-tool test-short,$(TEST_TARGETS))
+TEST_TARGETS := $(patsubst test-rubyspec,test-spec,$(TEST_TARGETS))
+TEST_DEPENDS := $(filter-out exam check test-spec $(TEST_TARGETS),$(TEST_DEPENDS))
+TEST_TARGETS := $(patsubst love,check,$(TEST_TARGETS))
+TEST_DEPENDS := $(filter-out love $(TEST_TARGETS),$(TEST_DEPENDS))
+TEST_TARGETS := $(patsubst test-almost,test-all,$(patsubst check-%,test test-%,$(TEST_TARGETS)))
+TEST_DEPENDS := $(filter-out test-all $(TEST_TARGETS),$(TEST_DEPENDS))
+TEST_TARGETS := $(patsubst test,test-short,$(TEST_TARGETS))
+TEST_DEPENDS := $(filter-out test $(TEST_TARGETS),$(TEST_DEPENDS))
+TEST_TARGETS := $(patsubst test-short,btest-ruby test-knownbug test-basic,$(TEST_TARGETS))
+TEST_TARGETS := $(patsubst test-basic,test-basic test-leaked-globals,$(TEST_TARGETS))
+TEST_TARGETS := $(patsubst test-bundled-gems,test-bundled-gems-spec test-bundled-gems-run,$(TEST_TARGETS))
+TEST_TARGETS := $(patsubst test-bundled-gems-run,test-bundled-gems-run $(PREPARE_BUNDLED_GEMS),$(TEST_TARGETS))
+TEST_TARGETS := $(patsubst test-bundled-gems-prepare,test-bundled-gems-prepare $(PRECHECK_BUNDLED_GEMS) test-bundled-gems-fetch,$(TEST_TARGETS))
+TEST_TARGETS := $(patsubst test-bundler-parallel,test-bundler-parallel $(PREPARE_BUNDLER),$(TEST_TARGETS))
+TEST_TARGETS := $(patsubst test-syntax-suggest,test-syntax-suggest $(PREPARE_SYNTAX_SUGGEST),$(TEST_TARGETS))
+TEST_DEPENDS := $(filter-out test-short $(TEST_TARGETS),$(TEST_DEPENDS))
+TEST_DEPENDS += $(if $(filter great exam love check,$(MAKECMDGOALS)),all exts)
+TEST_TARGETS := $(patsubst yes-%,%,$(filter-out no-%,$(TEST_TARGETS)))
+endif
+
+in-srcdir := $(if $(filter-out .,$(srcdir)),$(CHDIR) $(srcdir) &&)
+
ifeq ($(if $(filter all main exts enc trans libencs libenc libtrans \
prog program ruby ruby$(EXEEXT) \
wprogram rubyw rubyw$(EXEEXT) \
@@ -21,6 +58,13 @@ ifeq ($(if $(filter all main exts enc trans libencs libenc libtrans \
-include $(SHOWFLAGS)
endif
+ifeq ($(HAVE_BASERUBY):$(HAVE_GIT),yes:yes)
+override modified := $(shell $(BASERUBY) -C $(srcdir) tool/file2lastrev.rb --modified='%Y %m %d')
+override RUBY_RELEASE_YEAR := $(word 1,$(modified))
+override RUBY_RELEASE_MONTH := $(word 2,$(modified))
+override RUBY_RELEASE_DAY := $(word 3,$(modified))
+endif
+
ifneq ($(filter universal-%,$(arch)),)
define archcmd
%.$(1).S: %.c
@@ -40,21 +84,42 @@ $(foreach arch,$(filter -arch=%,$(subst -arch ,-arch=,$(ARCH_FLAG))),\
$(eval $(call archcmd,$(patsubst -arch=%,%,$(value arch)),$(patsubst -arch=%,-arch %,$(value arch)))))
endif
-ifneq ($(filter $(CHECK_TARGETS) test,$(MAKECMDGOALS)),)
-yes-test-basic: $(TEST_DEPENDS) yes-test-knownbug
-yes-test-knownbug: $(TEST_DEPENDS) yes-btest-ruby
-yes-btest-ruby: $(TEST_DEPENDS)
-endif
-ifneq ($(filter $(CHECK_TARGETS),$(MAKECMDGOALS)) $(filter yes-test-all,$(TEST_TARGETS)),)
-yes-test-testframework yes-test-almost yes-test-ruby: $(filter-out %test-all %test-ruby check%,$(TEST_TARGETS)) \
- yes-test-basic
-endif
-ifneq ($(filter $(CHECK_TARGETS),$(MAKECMDGOALS))$(if $(filter test-all,$(MAKECMDGOALS)),$(filter test-knownbug,$(MAKECMDGOALS))),)
-yes-test-testframework yes-test-almost yes-test-ruby: yes-test-knownbug
-yes-test-almost: yes-test-testframework
+ifeq ($(DOT_WAIT),)
+.PHONY: $(addprefix yes-,$(TEST_TARGETS))
+
+ifneq ($(filter-out btest%,$(TEST_TARGETS)),)
+$(addprefix yes-,$(TEST_TARGETS)): $(TEST_DEPENDS)
endif
-$(TEST_TARGETS): $(TEST_DEPENDS)
+ORDERED_TEST_TARGETS := $(filter $(TEST_TARGETS), \
+ btest-ruby test-knownbug test-leaked-globals test-basic \
+ test-testframework test-tool test-ruby test-all \
+ test-spec test-syntax-suggest-prepare test-syntax-suggest \
+ test-bundler-prepare test-bundler test-bundler-parallel \
+ test-bundled-gems-precheck test-bundled-gems-fetch \
+ test-bundled-gems-prepare test-bundled-gems-run \
+ test-bundled-gems-spec \
+ )
+
+# grep ^yes-test-.*-precheck: template/Makefile.in defs/gmake.mk common.mk
+test_prechecks := $(filter $(ORDERED_TEST_TARGETS),\
+ test-leaked-globals \
+ test-all \
+ test-spec \
+ test-syntax-suggest \
+ test-bundler \
+ test-bundler-parallel \
+ test-bundled-gems\
+ )
+prev_test := $(subst test-bundler-parallel,test-bundler,$(test_prechecks))
+prev_test := $(addsuffix -precheck,$(prev_test))
+first_test_prechecks := $(prev_test)
+
+$(foreach test,$(ORDERED_TEST_TARGETS), \
+ $(eval yes-$(value test): $(addprefix yes-,$(value prev_test))); \
+ $(eval no-$(value test): $(addprefix no-,$(value prev_test))); \
+ $(eval prev_test := $(value test)))
+endif
ifneq ($(if $(filter install,$(MAKECMDGOALS)),$(filter uninstall,$(MAKECMDGOALS))),)
install-targets := $(filter install uninstall,$(MAKECMDGOALS))
@@ -66,14 +131,494 @@ install-prereq: uninstall
uninstall sudo-precheck: all $(if $(filter all,$(INSTALLDOC)),docs)
endif
-ifneq ($(filter exam,$(MAKECMDGOALS)),)
-test-rubyspec: check
-yes-test-all no-test-all: test
-endif
-
ifneq ($(filter love,$(MAKECMDGOALS)),)
showflags: up
-sudo-precheck: test
+sudo-precheck: test yes-test-testframework no-test-testframework
install-prereq: sudo-precheck
yes-test-all no-test-all: install
endif
+yes-test-bundler-parallel: PARALLELRSPECOPTS += $(if $(nproc),-n$(shell expr $(nproc) + $(nproc) / 2))
+
+# Cross reference needs to parse all files at once
+love install reinstall: RDOCFLAGS = --force-update
+
+ifneq ($(if $(filter -flto%,$(CFLAGS)),$(subst darwin,,$(arch)),$(arch)),$(arch))
+override EXE_LDFLAGS = $(filter-out -g%,$(LDFLAGS))
+endif
+
+$(srcdir)/missing/des_tables.c: $(srcdir)/missing/crypt.c
+ifeq ($(if $(filter yes,$(CROSS_COMPILING)),,$(CC)),)
+ touch $@
+else
+ @$(ECHO) building make_des_table
+ $(CC) $(INCFLAGS) $(CPPFLAGS) -DDUMP $(EXE_LDFLAGS) $(XLDFLAGS) $(LIBS) -omake_des_table $(srcdir)/missing/crypt.c
+ @[ -x ./make_des_table ]
+ @$(ECHO) generating $@
+ $(Q) $(MAKEDIRS) $(@D)
+ $(Q) ./make_des_table > $@.new
+ $(Q) mv $@.new $@
+ $(Q) $(RMALL) make_des_table*
+endif
+
+config.status: $(wildcard config.cache)
+
+ifneq (ruby,$(PROGRAM))
+ruby: $(PROGRAM);
+endif
+
+STUBPROGRAM = rubystub$(EXEEXT)
+IGNOREDPATTERNS = %~ .% %.orig %.rej \#%\#
+SCRIPTBINDIR := $(if $(EXEEXT),,exec/)
+SCRIPTPROGRAMS = $(addprefix $(SCRIPTBINDIR),$(addsuffix $(EXEEXT),$(filter-out $(IGNOREDPATTERNS),$(notdir $(wildcard $(srcdir)/bin/*)))))
+
+stub: $(STUBPROGRAM)
+scriptbin: $(SCRIPTPROGRAMS)
+ifneq ($(STUBPROGRAM),rubystub)
+rubystub: $(STUBPROGRAM)
+endif
+
+$(SCRIPTPROGRAMS): $(STUBPROGRAM)
+
+$(STUBPROGRAM): rubystub.$(OBJEXT) $(LIBRUBY) $(MAINOBJ) $(OBJS) $(EXTOBJS) $(SETUP) $(PREP)
+
+rubystub$(EXEEXT):
+ @rm -f $@
+ $(ECHO) linking $@
+ $(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) rubystub.$(OBJEXT) $(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@
+ $(Q) $(POSTLINK)
+ $(if $(STRIP),$(Q) $(STRIP) $@)
+
+$(SCRIPTBINDIR)%$(EXEEXT): bin/% $(STUBPROGRAM) \
+ $(if $(SCRIPTBINDIR),$(TIMESTAMPDIR)/.exec.time)
+ $(ECHO) generating $@
+ $(Q) { cat $(STUBPROGRAM); echo; sed -e '1{' -e '/^#!.*ruby/!i\' -e '#!/bin/ruby' -e '}' $<; } > $@
+ $(Q) chmod +x $@
+ $(Q) $(POSTLINK)
+
+$(SCRIPTBINDIR):
+ $(Q) mkdir $@
+
+.PHONY: commit
+COMMIT_PREPARE := $(subst :,\:,$(filter-out commit do-commit,$(MAKECMDGOALS))) up
+
+commit: pre-commit $(DOT_WAIT) do-commit $(DOT_WAIT) post_commit
+pre-commit: $(COMMIT_PREPARE)
+do-commit: $(if $(DOT_WAIT),,pre-commit)
+ @$(BASERUBY) -C "$(srcdir)" -I./tool/lib -rvcs -e 'VCS.detect(".").commit'
+post-commit: $(if $(DOT_WAIT),,do-commit)
+ +$(Q) \
+ { \
+ $(in-srcdir) \
+ exec sed -f tool/prereq.status defs/gmake.mk template/Makefile.in common.mk depend; \
+ } | \
+ $(MAKE) $(mflags) Q=$(Q) ECHO=$(ECHO) \
+ top_srcdir="$(top_srcdir)" srcdir="$(srcdir)" srcs_vpath="" CHDIR="$(CHDIR)" \
+ BOOTSTRAPRUBY="$(BOOTSTRAPRUBY)" BOOTSTRAPRUBY_OPT="$(BOOTSTRAPRUBY_OPT)" \
+ MINIRUBY="$(BASERUBY)" BASERUBY="$(BASERUBY)" HAVE_BASERUBY="$(HAVE_BASERUBY)" \
+ VCSUP="" ENC_MK=.top-enc.mk REVISION_FORCE=PHONY CONFIGURE="$(CONFIGURE)" -f - \
+ update-src srcs all-incs
+
+GITHUB_RUBY_URL = https://github.com/ruby/ruby
+PR =
+
+COMMIT_GPG_SIGN = $(shell $(GIT_IN_SRC) config commit.gpgsign)
+REMOTE_GITHUB_URL = $(shell $(GIT_IN_SRC) config remote.github.url)
+COMMITS_NOTES = commits
+
+.PHONY: fetch-github
+fetch-github:
+ $(call fetch-github,$(PR))
+
+define fetch-github
+ $(if $(1),,\
+ echo "usage:"; echo " make $@ PR=1234"; \
+ exit 1; \
+ )
+ $(eval REMOTE_GITHUB_URL := $(REMOTE_GITHUB_URL))
+ $(if $(REMOTE_GITHUB_URL),,
+ echo adding $(GITHUB_RUBY_URL) as remote github
+ $(GIT_IN_SRC) remote add github $(GITHUB_RUBY_URL)
+ $(GIT_IN_SRC) config --add remote.github.fetch +refs/notes/$(COMMITS_NOTES):refs/notes/$(COMMITS_NOTES)
+ $(eval REMOTE_GITHUB_URL := $(GITHUB_RUBY_URL))
+ )
+ $(if $(shell $(GIT_IN_SRC) rev-parse "github/pull/$(1)/head" -- 2> /dev/null),
+ $(GIT_IN_SRC) branch -f "gh-$(1)" "github/pull/$(1)/head",
+ $(GIT_IN_SRC) fetch -f github "pull/$(1)/head:gh-$(1)"
+ )
+endef
+
+.PHONY: checkout-github
+checkout-github: fetch-github
+ $(GIT_IN_SRC) checkout "gh-$(PR)"
+
+.PHONY: update-github
+update-github: fetch-github
+ $(eval PULL_REQUEST_API := https://api.github.com/repos/ruby/ruby/pulls/$(PR))
+ $(eval PULL_REQUEST_FORK_BRANCH := $(shell \
+ curl -s $(if $(GITHUB_TOKEN),-H "Authorization: bearer $(GITHUB_TOKEN)") $(PULL_REQUEST_API) | \
+ $(BASERUBY) -rjson -e 'JSON.parse(STDIN.read)["head"].tap { |h| print "#{h["repo"]["full_name"]} #{h["ref"]}" }' \
+ ))
+ $(eval FORK_REPO := $(word 1,$(PULL_REQUEST_FORK_BRANCH)))
+ $(eval PR_BRANCH := $(word 2,$(PULL_REQUEST_FORK_BRANCH)))
+
+ $(eval GITHUB_UPDATE_WORKTREE := $(shell mktemp -d "$(srcdir)/gh-$(PR)-XXXXXX"))
+ $(GIT_IN_SRC) worktree add $(notdir $(GITHUB_UPDATE_WORKTREE)) "gh-$(PR)"
+ $(GIT) -C "$(GITHUB_UPDATE_WORKTREE)" merge master --no-edit
+ @$(BASERUBY) -e 'print "Are you sure to push this to PR=$(PR)? [Y/n]: "; exit(gets.chomp != "n")'
+ $(GIT_IN_SRC) remote add fork-$(PR) git@github.com:$(FORK_REPO).git
+ $(GIT) -C "$(GITHUB_UPDATE_WORKTREE)" push fork-$(PR) gh-$(PR):$(PR_BRANCH)
+ $(GIT_IN_SRC) remote rm fork-$(PR)
+ $(GIT_IN_SRC) worktree remove $(notdir $(GITHUB_UPDATE_WORKTREE))
+ $(GIT_IN_SRC) branch -D gh-$(PR)
+
+.PHONY: pull-github
+pull-github: fetch-github
+ $(call pull-github,$(PR))
+
+define pull-github
+ $(eval GITHUB_MERGE_BASE := $(shell $(GIT_LOG_FORMAT)%H -1)
+ $(eval GITHUB_MERGE_BRANCH := $(shell $(GIT_IN_SRC) symbolic-ref --short HEAD))
+ $(eval GITHUB_MERGE_WORKTREE := $(shell mktemp -d "$(srcdir)/gh-$(1)-XXXXXX"))
+ $(GIT_IN_SRC) worktree prune
+ $(GIT_IN_SRC) worktree add $(notdir $(GITHUB_MERGE_WORKTREE)) "gh-$(1)"
+ $(GIT) -C "$(GITHUB_MERGE_WORKTREE)" rebase $(GITHUB_MERGE_BRANCH)
+ $(eval COMMIT_GPG_SIGN := $(COMMIT_GPG_SIGN))
+ $(if $(filter true,$(COMMIT_GPG_SIGN)), \
+ $(GIT) -C "$(GITHUB_MERGE_WORKTREE)" rebase --exec "$(GIT) commit --amend --no-edit -S" "$(GITHUB_MERGE_BASE)"; \
+ )
+ $(GIT) -C "$(GITHUB_MERGE_WORKTREE)" rebase --exec "$(GIT) notes add --message 'Merged: $(GITHUB_RUBY_URL)/pull/$(1)'" "$(GITHUB_MERGE_BASE)"
+endef
+
+.PHONY: fetch-github-%
+fetch-github-%:
+ $(call fetch-github,$*)
+
+.PHONY: checkout-github-%
+checkout-github-%: fetch-github-%
+ $(GIT_IN_SRC) checkout "gh-$*"
+
+.PHONY: pr-% pull-github-%
+pr-% pull-github-%: fetch-github-%
+ $(call pull-github,$*)
+
+HELP_EXTRA_TASKS = \
+ " checkout-github: checkout GitHub Pull Request [PR=1234]" \
+ " pull-github: rebase GitHub Pull Request to new worktree [PR=1234]" \
+ " update-github: merge master branch and push it to Pull Request [PR=1234]" \
+ " tags: generate TAGS file" \
+ ""
+
+# 1. squeeze spaces
+# 2. strip and skip comment/empty lines
+# 3. "gem x.y.z URL xxxxxx" -> "gem|x.y.z|xxxxxx|URL"
+# 4. "gem x.y.z URL" -> "gem-x.y.z"
+bundled-gems := $(shell sed \
+ -e 's/[ ][ ]*/ /g' \
+ -e 's/^ //;s/\#.*//;s/ *$$//;/^$$/d' \
+ $(if $(filter yes,$(HAVE_GIT)), \
+ -e 's/^\(.*\) \(.*\) \(.*\) \(.*\)/\1|\2|\4|\3/' \
+ ) \
+ -e 's/ /-/;s/ .*//' \
+ $(srcdir)/gems/bundled_gems)
+
+bundled-gems-rev := $(filter-out $(subst |,,$(bundled-gems)),$(bundled-gems))
+bundled-gems := $(filter-out $(bundled-gems-rev),$(bundled-gems))
+
+# calls $(1) with name, version, revision, URL
+foreach-bundled-gems-rev = \
+ $(foreach g,$(bundled-gems-rev),$(call foreach-bundled-gems-rev-0,$(1),$(subst |, ,$(value g))))
+foreach-bundled-gems-rev-0 = \
+ $(call $(1),$(word 1,$(2)),$(word 2,$(2)),$(word 3,$(2)),$(word 4,$(2)))
+bundled-gem-gemfile = $(srcdir)/gems/$(1)-$(2).gem
+bundled-gem-gemspec = $(srcdir)/gems/src/$(1)/$(1).gemspec
+bundled-gem-extracted = $(srcdir)/.bundle/gems/$(1)-$(2)
+bundled-gem-revision = $(srcdir)/.bundle/.timestamp/$(1).revision
+
+update-gems: | $(patsubst %,$(srcdir)/gems/%.gem,$(bundled-gems))
+update-gems: | $(call foreach-bundled-gems-rev,bundled-gem-gemfile)
+update-gems: | $(call foreach-bundled-gems-rev,bundled-gem-gemspec)
+
+test-bundler-precheck: | $(srcdir)/.bundle/cache
+
+$(srcdir)/.bundle/cache:
+ $(MAKEDIRS) $(@D) $(CACHE_DIR)
+ $(LN_S) ../.downloaded-cache $@
+
+$(srcdir)/gems/%.gem:
+ $(ECHO) Downloading bundled gem $*...
+ $(Q) $(BASERUBY) -C "$(srcdir)" \
+ -I./tool -rdownloader \
+ -e 'gem = "$(@F)"' \
+ -e 'old = Dir.glob("gems/"+gem.sub(/-[^-]*$$/, "-*.gem"))' \
+ -e 'Downloader::RubyGems.download(gem, "gems", nil) and' \
+ -e '(old.delete("gems/#{gem}"); !old.empty?) and' \
+ -e 'File.unlink(*old) and' \
+ -e 'FileUtils.rm_rf(old.map{'"|n|"'n.chomp(".gem")})'
+
+extract-gems: | $(patsubst %,$(srcdir)/.bundle/gems/%,$(bundled-gems))
+extract-gems: | $(call foreach-bundled-gems-rev,bundled-gem-extracted)
+
+$(srcdir)/.bundle/gems/%: $(srcdir)/gems/%.gem | .bundle/gems
+ $(ECHO) Extracting bundle gem $*...
+ $(Q) $(BASERUBY) -C "$(srcdir)" \
+ -Itool/lib -rbundled_gem \
+ -e 'BundledGem.unpack("gems/$(@F).gem", ".bundle")'
+
+$(srcdir)/.bundle/.timestamp:
+ $(MAKEDIRS) $@
+
+define build-gem
+$(srcdir)/gems/src/$(1)/.git: | $(srcdir)/gems/src
+ $(ECHO) Cloning $(4)
+ $(Q) $(GIT) clone --depth=1 --no-tags $(4) $$(@D)
+
+$(bundled-gem-revision): \
+ $(if $(if $(wildcard $$(@)),$(filter $(3),$(shell cat $$(@)))),,PHONY) \
+ | $(srcdir)/.bundle/.timestamp $(srcdir)/gems/src/$(1)/.git
+ $(ECHO) Update $(1) to $(3)
+ $(Q) $(CHDIR) "$(srcdir)/gems/src/$(1)" && \
+ if [ `$(GIT) rev-parse HEAD` != $(3) ]; then \
+ $(GIT) fetch origin $(3) && \
+ $(GIT) checkout --detach $(3) && \
+ :; \
+ fi
+ echo $(3) | $(IFCHANGE) $$(@) -
+
+# The repository of minitest does not include minitest.gemspec because it uses hoe.
+# This creates a dummy gemspec.
+$(bundled-gem-gemspec): $(bundled-gem-revision) \
+ | $(srcdir)/gems/src/$(1)/.git
+ $(Q) $(BASERUBY) -I$(tooldir)/lib -rbundled_gem -e 'BundledGem.dummy_gemspec(*ARGV)' $$(@)
+
+$(bundled-gem-gemfile): $(bundled-gem-gemspec) $(bundled-gem-revision)
+ $(ECHO) Building $(1)@$(3) to $$(@)
+ $(Q) $(BASERUBY) -C "$(srcdir)" \
+ -Itool/lib -rbundled_gem \
+ -e 'BundledGem.build("gems/src/$(1)/$(1).gemspec", "$(2)", "gems", validation: false)'
+
+endef
+define build-gem-0
+$(eval $(call build-gem,$(1),$(2),$(3),$(4)))
+endef
+
+$(call foreach-bundled-gems-rev,build-gem-0)
+
+$(srcdir)/gems/src:
+ $(MAKEDIRS) $@
+
+$(srcdir)/.bundle/gems:
+ $(MAKEDIRS) $@
+
+ifneq ($(DOT_WAIT),)
+up:: $(DOT_WAIT) after-update
+endif
+
+ifneq ($(filter update-bundled_gems refresh-gems,$(MAKECMDGOALS)),)
+update-gems: update-bundled_gems
+endif
+
+.SECONDARY: update-unicode-files
+.SECONDARY: update-unicode-auxiliary-files
+.SECONDARY: update-unicode-ucd-emoji-files
+.SECONDARY: update-unicode-emoji-files
+
+ifneq ($(DOT_WAIT),)
+.NOTPARALLEL: update-unicode
+.NOTPARALLEL: update-unicode-files
+.NOTPARALLEL: update-unicode-auxiliary-files
+.NOTPARALLEL: update-unicode-ucd-emoji-files
+.NOTPARALLEL: update-unicode-emoji-files
+.NOTPARALLEL: $(UNICODE_FILES) $(UNICODE_PROPERTY_FILES)
+.NOTPARALLEL: $(UNICODE_AUXILIARY_FILES)
+.NOTPARALLEL: $(UNICODE_UCD_EMOJI_FILES) $(UNICODE_EMOJI_FILES)
+endif
+
+ifeq ($(HAVE_GIT),yes)
+REVISION_LATEST := $(shell $(GIT_LOG_FORMAT)%H -1 2>/dev/null)
+else
+REVISION_LATEST := update
+endif
+REVISION_IN_HEADER := $(shell sed '/^\#define RUBY_FULL_REVISION "\(.*\)"/!d;s//\1/;q' $(wildcard $(srcdir)/revision.h revision.h) /dev/null 2>/dev/null)
+ifeq ($(REVISION_IN_HEADER),)
+REVISION_IN_HEADER := none
+endif
+ifneq ($(REVISION_IN_HEADER),$(REVISION_LATEST))
+$(REVISION_H): PHONY
+endif
+
+include $(top_srcdir)/yjit/yjit.mk
+include $(top_srcdir)/zjit/zjit.mk
+include $(top_srcdir)/defs/jit.mk
+
+# Query on the generated rdoc
+#
+# $ make rdoc:Integer#+
+rdoc\:%: PHONY
+ $(Q)$(RUNRUBY) $(srcdir)/libexec/ri --no-standard-docs --doc-dir=$(RDOCOUT) $(patsubst rdoc:%,%,$@)
+
+test_%.rb test/%: programs PHONY
+ $(Q)$(exec) $(RUNRUBY) "$(TESTSDIR)/runner.rb" --ruby="$(RUNRUBY)" $(TEST_EXCLUDES) $(TESTOPTS) -- $(patsubst test/%,%,$@)
+
+spec/bundler/%: PHONY
+ $(Q)$(exec) $(XRUBY) -C $(srcdir) -Ispec/bundler .bundle/bin/rspec --require spec_helper $(RSPECOPTS) $@
+
+spec/bundler: test-bundler-parallel
+ $(Q)$(NULLCMD)
+
+# workaround to avoid matching non ruby files with "spec/%/" under GNU make 3.81
+spec/%_spec.c:
+ $(empty)
+$(srcdir)/$(RUBYSPEC_CAPIEXT)/rubyspec.h:
+ $(empty)
+
+benchmark/%: miniruby$(EXEEXT) update-benchmark-driver PHONY
+ $(Q)$(BASERUBY) -rrubygems -I$(srcdir)/benchmark/lib $(srcdir)/benchmark/benchmark-driver/exe/benchmark-driver \
+ --executables="compare-ruby::$(COMPARE_RUBY) -I$(EXTOUT)/common --disable-gem" \
+ --executables="built-ruby::$(BENCH_RUBY) --disable-gem" \
+ $(srcdir)/$@ $(BENCH_OPTS) $(OPTS)
+
+clean-local:: TARGET_SO = $(PROGRAM) $(WPROGRAM) $(LIBRUBY_SO) $(STATIC_RUBY) miniruby goruby
+clean-local::
+ -$(Q)$(RMALL) $(cleanlibs)
+
+clean-srcs-ext::
+ $(Q)$(RM) $(patsubst $(srcdir)/%,%,$(EXT_SRCS))
+
+clean-srcs-extra::
+ $(Q)$(RM) $(patsubst $(srcdir)/%,%,$(EXTRA_SRCS))
+
+ifneq ($(filter $(VCS),git),)
+update-src::
+ @$(BASERUBY) $(tooldir)/lib/colorize.rb pass "Latest commit hash = $(shell $(filter-out svn,$(VCS)) -C $(srcdir) rev-parse --short=10 HEAD)"
+endif
+
+# Update dependencies and commit the updates to the current branch.
+update-deps:
+ $(eval update_deps := $(shell date +update-deps-%Y%m%d))
+ $(eval deps_dir := $(shell mktemp -d)/$(update_deps))
+ $(eval GIT_DIR := $(shell $(GIT_IN_SRC) rev-parse --absolute-git-dir))
+ $(GIT) --git-dir=$(GIT_DIR) worktree add $(deps_dir)
+ cp $(tooldir)/config.guess $(tooldir)/config.sub $(deps_dir)/tool
+ [ -f config.status ] && cp config.status $(deps_dir)
+ cd $(deps_dir) && autoconf && \
+ exec ./configure -q -C --enable-load-relative --disable-install-doc --disable-rubygems 'optflags=-O0' 'debugflags=-save-temps=obj -g'
+ $(RUNRUBY) -C $(deps_dir) tool/update-deps --fix
+ $(GIT) -C $(deps_dir) diff --no-ext-diff --ignore-submodules --exit-code || \
+ $(GIT) -C $(deps_dir) commit --all --message='Update dependencies'
+ $(GIT) --git-dir=$(GIT_DIR) worktree remove $(deps_dir)
+ $(RMDIR) $(dir $(deps_dir))
+ $(GIT) --git-dir=$(GIT_DIR) merge --no-edit --ff-only $(update_deps)
+ $(GIT) --git-dir=$(GIT_DIR) branch --delete $(update_deps)
+
+fix-depends check-depends: all hello
+ $(BASERUBY) -C $(srcdir) tool/update-deps $(if $(filter fix-%,$@),--fix)
+
+# order-only-prerequisites doesn't work for $(RUBYSPEC_CAPIEXT)
+# because the same named directory exists in the source tree.
+$(RUBYSPEC_CAPIEXT)/%.$(DLEXT): $(srcdir)/$(RUBYSPEC_CAPIEXT)/%.c $(RUBYSPEC_CAPIEXT_DEPS) \
+ | build-ext
+ $(no_silence:no=$(ECHO) building $@)
+ $(Q) $(MAKEDIRS) $(@D)
+ $(Q) $(DLDSHARED) -L. $(XDLDFLAGS) $(XLDFLAGS) $(LDFLAGS) $(INCFLAGS) $(CPPFLAGS) $(OUTFLAG)$@ $< $(LIBRUBYARG)
+ifneq ($(POSTLINK),)
+ $(Q) $(POSTLINK)
+endif
+ $(Q) $(RMALL) $@.*
+
+RUBYSPEC_CAPIEXT_SO := $(patsubst %.c,$(RUBYSPEC_CAPIEXT)/%.$(DLEXT),$(notdir $(wildcard $(srcdir)/$(RUBYSPEC_CAPIEXT)/*.c)))
+rubyspec-capiext: $(RUBYSPEC_CAPIEXT_SO)
+ @ $(NULLCMD)
+
+spec/%/ spec/%_spec.rb: programs exts $(RUBYSPEC_CAPIEXT_BUILD) PHONY
+ +$(RUNRUBY) -r./$(arch)-fake $(srcdir)/spec/mspec/bin/mspec-run -B $(srcdir)/spec/default.mspec $(SPECOPTS) $(patsubst %,$(srcdir)/%,$@)
+
+ruby.pc: $(filter-out ruby.pc,$(ruby_pc))
+
+# `make matz`: bump up the MINOR;
+# Copying NEWS.md to doc/NEWS/, and empty the details in NEWS.md.
+#
+# `make matz NEW=x.y`: bump up to x.y.0;
+# Just update the version in the title of NEWS.md.
+
+matz: up
+matz-commit: OLD := $(MAJOR).$(MINOR).0
+ifdef NEW
+matz-commit: MAJOR := $(word 1,$(subst ., ,$(NEW)))
+matz-commit: MINOR := $(word 2,$(subst ., ,$(NEW)))
+matz-commit: $(DOT_WAIT) bump_news
+bump_news$(DOT_WAIT): up
+bump_headers$(DOT_WAIT): bump_news
+else
+matz-commit: MINOR := $(shell expr $(MINOR) + 1)
+matz-commit: $(DOT_WAIT) reset_news
+flush_news$(DOT_WAIT): up
+bump_headers$(DOT_WAIT): reset_news
+endif
+
+matz: $(DOT_WAIT) matz-commit
+matz-commit: bump_headers
+matz-commit: override NEW := $(MAJOR).$(MINOR).0
+matz-commit: files := include/ruby/version.h include/ruby/internal/abi.h
+matz-commit: message := Development of $(NEW) started.
+
+flush_news:
+ $(GIT_IN_SRC) mv -f NEWS.md doc/NEWS/NEWS-$(OLD).md
+ $(GIT_IN_SRC) commit -m "[DOC] Flush NEWS.md"
+
+.PHONY: flush_news reset_news bump_news bump_headers
+
+bump_headers:
+ sed -i~ \
+ -e "s/^\(#define RUBY_API_VERSION_MAJOR\) .*/\1 $(MAJOR)/" \
+ -e "s/^\(#define RUBY_API_VERSION_MINOR\) .*/\1 $(MINOR)/" \
+ -e "s/^\(#define RUBY_ABI_VERSION\) .*/\1 0/" \
+ $(files:%=$(srcdir)/%)
+
+reset_news: flush_news
+ $(BASERUBY) -C $(srcdir) -p -00 \
+ -e 'BEGIN {old, new = ARGV.shift(2); STDOUT.reopen(ARGV.shift)}' \
+ -e 'case $$.' \
+ -e 'when 1; $$_.sub!(/Ruby \K[0-9.]+/, new)' \
+ -e 'when 2; $$_.sub!(/\*\*\K[0-9.]+(?=\*\*)/, old)' \
+ -e 'end' \
+ -e 'next if /^[\[ *]/ =~ $$_' \
+ -e '$$_.sub!(/\n{2,}\z/, "\n\n")' \
+ $(OLD) $(NEW) NEWS.md doc/NEWS/NEWS-$(OLD).md
+
+bump_news:
+ $(BASERUBY) -C $(srcdir) -p -i \
+ -e 'BEGIN {new = ARGV.shift; print gets("").sub(/Ruby \K[0-9.]+/, new)}' \
+ $(NEW) NEWS.md
+
+matz: matz-commit matz-push
+
+matz-commit:
+ $(GIT_IN_SRC) add NEWS.md $(files)
+ $(GIT_IN_SRC) commit -m "$(message)"
+
+GIT_REMOTE_ORIGIN = origin
+
+matz-push: matz-commit
+ $(eval origin_url := $(shell $(GIT_IN_SRC) remote get-url $(GIT_REMOTE_ORIGIN)))
+ $(if $(origin_url),,@false)
+ $(eval last_commit := $(shell $(GIT_IN_SRC) log -n1 --format=%H --author=matz HEAD~..HEAD))
+ $(if $(last_commit),,$(ECHO) No matz commits 1>&2; false)
+ $(if $(filter 12-25 12-26,$(shell date +%m-%d)),,$(ECHO) Not the release date 1>&2; false)
+ $(ECHO) $$'\e[31m'Pushing to $$'\e[7m'$(GIT_REMOTE_ORIGIN)$$'\e[27m'" ($(origin_url))"$$'\e[m'
+ $(GIT_IN_SRC) push $(GIT_REMOTE_ORIGIN)
+
+tags:
+ $(MAKE) GIT="$(GIT)" -C "$(srcdir)" -f defs/tags.mk
+
+
+# ripper_srcs makes all sources at once. invoking this target multiple
+# times in parallel means all sources will be built for the number of
+# sources times respectively.
+ifneq ($(DOT_WAIT),)
+.NOTPARALLEL: ripper_srcs
+else
+ripper_src =
+$(foreach r,$(RIPPER_SRCS),$(eval $(value r): | $(value ripper_src))\
+ $(eval ripper_src := $(value r)))
+ripper_srcs: $(ripper_src)
+endif
diff --git a/defs/id.def b/defs/id.def
index 1ff0d9aa3d..cd3a8480a2 100644
--- a/defs/id.def
+++ b/defs/id.def
@@ -1,9 +1,15 @@
# -*- mode: ruby; coding: us-ascii -*-
firstline, predefined = __LINE__+1, %[\
+ max
+ min
+ hash
freeze
+ nil?
inspect
intern
object_id
+ __id__
+ const_added
const_missing
method_missing MethodMissing
method_added
@@ -21,7 +27,7 @@ firstline, predefined = __LINE__+1, %[\
lambda
send
__send__
- __attached__
+ __recursive_key__
initialize
initialize_copy
initialize_clone
@@ -36,16 +42,49 @@ firstline, predefined = __LINE__+1, %[\
to_a
to_s
to_i
+ to_f
+ to_r
bt
bt_locations
call
mesg
exception
+ locals
+ not NOT
+ and AND
+ or OR
+ div
+ divmod
+ fdiv
+ quo
+ name
+ nil
+ path
+ pack
+ buffer
+ include?
+ aborted
+ exited
_ UScore
+
+ # MUST be successive
+ _1 NUMPARAM_1
+ _2 NUMPARAM_2
+ _3 NUMPARAM_3
+ _4 NUMPARAM_4
+ _5 NUMPARAM_5
+ _6 NUMPARAM_6
+ _7 NUMPARAM_7
+ _8 NUMPARAM_8
+ _9 NUMPARAM_9
+ <it> ItImplicit
+ it It
+
"/*NULL*/" NULL
empty?
eql?
+ default
respond_to? Respond_to
respond_to_missing? Respond_to_missing
<IFUNC>
@@ -56,22 +95,29 @@ firstline, predefined = __LINE__+1, %[\
core#define_method
core#define_singleton_method
core#set_postexe
- core#hash_from_ary
- core#hash_merge_ary
core#hash_merge_ptr
core#hash_merge_kwd
+ core#raise
+ core#sprintf
- debug#created_info
+
+ $_ LASTLINE
+ $~ BACKREF
+ $! ERROR_INFO
+
+ Ruby
]
# VM ID OP Parser Token
token_ops = %[\
Dot2 .. DOT2
Dot3 ... DOT3
+ BDot2 .. BDOT2
+ BDot3 ... BDOT3
UPlus +@ UPLUS
UMinus -@ UMINUS
Pow ** POW
- DSTAR **
Cmp <=> CMP
PLUS +
MINUS -
@@ -88,13 +134,14 @@ token_ops = %[\
Eqq === EQQ
Neq != NEQ
Not !
+ And &
+ Or |
Backquote `
EqTilde =~ MATCH
NeqTilde !~ NMATCH
AREF []
ASET []=
COLON2 ::
- COLON3 ::
ANDOP &&
OROP ||
ANDDOT &.
@@ -106,6 +153,21 @@ class KeywordError < RuntimeError
end
end
+def id2varname(token, prefix = nil)
+ if /#/ =~ token
+ token = "_#{token.gsub(/\W+/, '_')}"
+ else
+ token = token.sub(/\?/, 'P')
+ token = prefix + token if prefix
+ token.sub!(/\A[a-z]/) {$&.upcase}
+ token.sub!(/\A\$/, "_G_")
+ token.sub!(/\A@@/, "_C_")
+ token.sub!(/\A@/, "_I_")
+ token.gsub!(/\W+/, "")
+ end
+ token
+end
+
predefined_ids = {}
preserved_ids = []
local_ids = []
@@ -121,16 +183,7 @@ predefined.split(/^/).each_with_index do |line, num|
line.sub!(/\s+#.*/, '')
name, token = line.split
next unless name
- token ||= name
- if /#/ =~ token
- token = "_#{token.gsub(/\W+/, '_')}"
- else
- token = token.sub(/\?/, 'P').sub(/\A[a-z]/) {$&.upcase}
- token.sub!(/\A\$/, "_G_")
- token.sub!(/\A@@/, "_C_")
- token.sub!(/\A@/, "_I_")
- token.gsub!(/\W+/, "")
- end
+ token = id2varname(token || name)
if name == '-'
preserved_ids << token
next
@@ -145,7 +198,7 @@ predefined.split(/^/).each_with_index do |line, num|
case name
when /\A[A-Z]\w*\z/; const_ids
when /\A(?!\d)\w+\z/; local_ids
- when /\A\$(?:\d+|(?!\d)\w+)\z/; global_ids
+ when /\A\$(?:\d+|(?!\d)\w+|\W)\z/; global_ids
when /\A@@(?!\d)\w+\z/; class_ids
when /\A@(?!\d)\w+\z/; instance_ids
when /\A((?!\d)\w+)=\z/; attrset_ids
@@ -153,13 +206,14 @@ predefined.split(/^/).each_with_index do |line, num|
end << token
predefined_ids[token] = name
end
+index = 127
token_ops.split(/^/).each do |line|
next if /^#/ =~ line
line.sub!(/\s+#.*/, '')
id, op, token = line.split
next unless id and op
token ||= (id unless /\A\W\z/ =~ op)
- token_op_ids << [id, op, token]
+ token_op_ids << [id, op, token, (index += 1 if token)]
end
{
"LOCAL" => local_ids,
@@ -171,4 +225,5 @@ end
:preserved => preserved_ids,
:predefined => predefined_ids,
:token_op => token_op_ids,
+ :last_token => index,
}
diff --git a/defs/jit.mk b/defs/jit.mk
new file mode 100644
index 0000000000..27b14e7a07
--- /dev/null
+++ b/defs/jit.mk
@@ -0,0 +1,96 @@
+# Make recipes that deal with the rust code of YJIT and ZJIT.
+#
+# $(gnumake_recursive) adds the '+' prefix to pass down GNU make's
+# jobserver resources to cargo/rustc as rust-lang.org recommends.
+# Without it, certain make version trigger a warning. It does not
+# add the prefix when `make --dry-run` so dry runs are indeed dry.
+
+ifneq ($(JIT_CARGO_SUPPORT),no)
+
+# Show Cargo progress when doing `make V=1`
+CARGO_VERBOSE_0 = -q
+CARGO_VERBOSE_1 =
+CARGO_VERBOSE = $(CARGO_VERBOSE_$(V))
+
+# Because of Cargo cache, if the actual binary is not changed from the
+# previous build, the mtime is preserved as the cached file.
+# This means the target is not updated actually, and it will need to
+# rebuild at the next build.
+RUST_LIB_TOUCH = touch $@
+
+# NOTE: MACOSX_DEPLOYMENT_TARGET to match `rustc --print deployment-target` to avoid the warning below.
+# ld: warning: object file (target/debug/libjit.a(<libcapstone object>)) was built for
+# newer macOS version (15.2) than being linked (15.0)
+# This limits us to an older set of macOS API in the rust code, but we don't use any.
+$(RUST_LIB): $(srcdir)/ruby.rs
+ $(Q)if [ '$(ZJIT_SUPPORT)' != no -a '$(YJIT_SUPPORT)' != no ]; then \
+ echo 'building YJIT and ZJIT ($(JIT_CARGO_SUPPORT:yes=release) mode)'; \
+ elif [ '$(ZJIT_SUPPORT)' != no ]; then \
+ echo 'building ZJIT ($(JIT_CARGO_SUPPORT) mode)'; \
+ elif [ '$(YJIT_SUPPORT)' != no ]; then \
+ echo 'building YJIT ($(JIT_CARGO_SUPPORT) mode)'; \
+ fi
+ $(gnumake_recursive)$(Q)CARGO_TARGET_DIR='$(CARGO_TARGET_DIR)' \
+ CARGO_TERM_PROGRESS_WHEN='never' \
+ MACOSX_DEPLOYMENT_TARGET=11.0 \
+ $(CARGO) $(CARGO_VERBOSE) build --manifest-path '$(top_srcdir)/Cargo.toml' $(CARGO_BUILD_ARGS)
+ $(RUST_LIB_TOUCH)
+else ifneq ($(strip $(RLIB_DIR)),) # combo build
+
+$(RUST_LIB): $(srcdir)/ruby.rs
+ $(ECHO) 'building $(@F)'
+ $(gnumake_recursive)$(Q) $(RUSTC) --edition=2024 \
+ $(RUSTC_FLAGS) \
+ '-L$(@D)' \
+ --extern=yjit \
+ --extern=zjit \
+ --crate-type=staticlib \
+ --cfg 'feature="yjit"' \
+ --cfg 'feature="zjit"' \
+ '--out-dir=$(@D)' \
+ '$(top_srcdir)/ruby.rs'
+
+# Absolute path to avoid VPATH ambiguity
+JIT_RLIB = $(TOP_BUILD_DIR)/$(RLIB_DIR)/libjit.rlib
+$(YJIT_RLIB): $(JIT_RLIB)
+$(ZJIT_RLIB): $(JIT_RLIB)
+$(JIT_RLIB):
+ $(ECHO) 'building $(@F)'
+ $(gnumake_recursive)$(Q) $(RUSTC) --crate-name=jit \
+ --edition=2024 \
+ $(JIT_RUST_FLAGS) \
+ $(RUSTC_FLAGS) \
+ '--out-dir=$(@D)' \
+ '$(top_srcdir)/jit/src/lib.rs'
+endif # ifneq ($(JIT_CARGO_SUPPORT),no)
+
+RUST_LIB_SYMBOLS = $(RUST_LIB:.a=).symbols
+$(RUST_LIBOBJ): $(RUST_LIB)
+ $(ECHO) 'partial linking $(RUST_LIB) into $@'
+ifneq ($(findstring darwin,$(target_os)),)
+ $(Q) $(CC) -nodefaultlibs -r -o $@ -exported_symbols_list $(RUST_LIB_SYMBOLS) $(RUST_LIB)
+else
+ $(Q) $(LD) -r -o $@ --whole-archive $(RUST_LIB)
+ -$(Q) $(OBJCOPY) --wildcard --keep-global-symbol='$(SYMBOL_PREFIX)rb_*' $(@)
+endif
+
+rust-libobj: $(RUST_LIBOBJ)
+rust-lib: $(RUST_LIB)
+
+# For Darwin only: a list of symbols that we want the glommed Rust static lib to export.
+# Unfortunately, using wildcard like '_rb_*' with -exported-symbol does not work, at least
+# not on version 820.1. Assume llvm-nm, so XCode 8.0 (from 2016) or newer.
+#
+# The -exported_symbols_list pulls out the right archive members. Symbols not listed
+# in the list are made private extern, which are in turn made local as we're using `ld -r`.
+# Note, section about -keep_private_externs in ld's man page hints at this behavior on which
+# we rely.
+ifneq ($(findstring darwin,$(target_os)),)
+$(RUST_LIB_SYMBOLS): $(RUST_LIB)
+ $(Q) $(tooldir)/darwin-ar $(NM) --defined-only --extern-only $(RUST_LIB) | \
+ sed -n -e 's/.* //' -e '/^$(SYMBOL_PREFIX)rb_/p' \
+ -e '/^$(SYMBOL_PREFIX)rust_eh_personality/p' \
+ > $@
+
+$(RUST_LIBOBJ): $(RUST_LIB_SYMBOLS)
+endif
diff --git a/defs/keywords b/defs/keywords
index 20044a420c..a1b1f4f60f 100644
--- a/defs/keywords
+++ b/defs/keywords
@@ -1,8 +1,8 @@
%{
-struct kwtable {int name, id[2], state;};
+struct kwtable {short name, id[2], state;};
const struct kwtable *rb_reserved_word(const char *, unsigned int);
#ifndef RIPPER
-static const struct kwtable *reserved_word(const char *, unsigned int);
+static const struct kwtable *reserved_word(register const char *str, register size_t len);
#define rb_reserved_word(str, len) reserved_word(str, len)
%}
@@ -13,7 +13,7 @@ __LINE__, {keyword__LINE__, keyword__LINE__}, EXPR_END
__FILE__, {keyword__FILE__, keyword__FILE__}, EXPR_END
BEGIN, {keyword_BEGIN, keyword_BEGIN}, EXPR_END
END, {keyword_END, keyword_END}, EXPR_END
-alias, {keyword_alias, keyword_alias}, EXPR_FNAME
+alias, {keyword_alias, keyword_alias}, EXPR_FNAME|EXPR_FITEM
and, {keyword_and, keyword_and}, EXPR_VALUE
begin, {keyword_begin, keyword_begin}, EXPR_BEG
break, {keyword_break, keyword_break}, EXPR_MID
@@ -43,7 +43,7 @@ self, {keyword_self, keyword_self}, EXPR_END
super, {keyword_super, keyword_super}, EXPR_ARG
then, {keyword_then, keyword_then}, EXPR_BEG
true, {keyword_true, keyword_true}, EXPR_END
-undef, {keyword_undef, keyword_undef}, EXPR_FNAME
+undef, {keyword_undef, keyword_undef}, EXPR_FNAME|EXPR_FITEM
unless, {keyword_unless, modifier_unless}, EXPR_VALUE
until, {keyword_until, modifier_until}, EXPR_VALUE
when, {keyword_when, keyword_when}, EXPR_VALUE
diff --git a/defs/known_errors.def b/defs/known_errors.def
index b9c490d3a2..23e9e53507 100644
--- a/defs/known_errors.def
+++ b/defs/known_errors.def
@@ -1,148 +1,157 @@
-EPERM
-ENOENT
-ESRCH
-EINTR
-EIO
-ENXIO
-E2BIG
-ENOEXEC
-EBADF
-ECHILD
-EAGAIN
-ENOMEM
-EACCES
-EFAULT
-ENOTBLK
-EBUSY
-EEXIST
-EXDEV
-ENODEV
-ENOTDIR
-EISDIR
-EINVAL
-ENFILE
-EMFILE
-ENOTTY
-ETXTBSY
-EFBIG
-ENOSPC
-ESPIPE
-EROFS
-EMLINK
-EPIPE
-EDOM
-ERANGE
-EDEADLK
-ENAMETOOLONG
-ENOLCK
-ENOSYS
-ENOTEMPTY
-ELOOP
-EWOULDBLOCK
-ENOMSG
-EIDRM
-ECHRNG
-EL2NSYNC
-EL3HLT
-EL3RST
-ELNRNG
-EUNATCH
-ENOCSI
-EL2HLT
-EBADE
-EBADR
-EXFULL
-ENOANO
-EBADRQC
-EBADSLT
-EDEADLOCK
-EBFONT
-ENOSTR
-ENODATA
-ETIME
-ENOSR
-ENONET
-ENOPKG
-EREMOTE
-ENOLINK
-EADV
-ESRMNT
-ECOMM
-EPROTO
-EMULTIHOP
-EDOTDOT
-EBADMSG
-EOVERFLOW
-ENOTUNIQ
-EBADFD
-EREMCHG
-ELIBACC
-ELIBBAD
-ELIBSCN
-ELIBMAX
-ELIBEXEC
-EILSEQ
-ERESTART
-ESTRPIPE
-EUSERS
-ENOTSOCK
-EDESTADDRREQ
-EMSGSIZE
-EPROTOTYPE
-ENOPROTOOPT
-EPROTONOSUPPORT
-ESOCKTNOSUPPORT
-EOPNOTSUPP
-EPFNOSUPPORT
-EAFNOSUPPORT
-EADDRINUSE
-EADDRNOTAVAIL
-ENETDOWN
-ENETUNREACH
-ENETRESET
-ECONNABORTED
-ECONNRESET
-ENOBUFS
-EISCONN
-ENOTCONN
-ESHUTDOWN
-ETOOMANYREFS
-ETIMEDOUT
-ECONNREFUSED
-EHOSTDOWN
-EHOSTUNREACH
-EALREADY
-EINPROGRESS
-ESTALE
-EUCLEAN
-ENOTNAM
-ENAVAIL
-EISNAM
-EREMOTEIO
-EDQUOT
-ECANCELED
-EKEYEXPIRED
-EKEYREJECTED
-EKEYREVOKED
-EMEDIUMTYPE
-ENOKEY
-ENOMEDIUM
-ENOTRECOVERABLE
-EOWNERDEAD
-ERFKILL
-EAUTH
-EBADRPC
-EDOOFUS
-EFTYPE
-ENEEDAUTH
-ENOATTR
-ENOTSUP
-EPROCLIM
-EPROCUNAVAIL
-EPROGMISMATCH
-EPROGUNAVAIL
-ERPCMISMATCH
-EIPSEC
-EHWPOISON
-ECAPMODE
-ENOTCAPABLE
+E2BIG Argument list too long
+EACCES Permission denied
+EADDRINUSE Address already in use
+EADDRNOTAVAIL Address not available
+EADV Advertise error
+EAFNOSUPPORT Address family not supported
+EAGAIN Resource temporarily unavailable, try again (may be the same value as EWOULDBLOCK)
+EALREADY Connection already in progress
+EAUTH Authentication error
+EBADARCH Bad CPU type in executable
+EBADE Bad exchange
+EBADEXEC Bad executable
+EBADF Bad file descriptor
+EBADFD File descriptor in bad state
+EBADMACHO Malformed Macho file
+EBADMSG Bad message
+EBADR Invalid request descriptor
+EBADRPC RPC struct is bad
+EBADRQC Invalid request code
+EBADSLT Invalid slot
+EBFONT Bad font file format
+EBUSY Device or resource busy
+ECANCELED Operation canceled
+ECAPMODE Not permitted in capability mode
+ECHILD No child processes
+ECHRNG Channel number out of range
+ECOMM Communication error on send
+ECONNABORTED Connection aborted
+ECONNREFUSED Connection refused
+ECONNRESET Connection reset
+EDEADLK Resource deadlock avoided
+EDEADLOCK File locking deadlock error
+EDESTADDRREQ Destination address required
+EDEVERR Device error; e.g., printer paper out
+EDOM Mathematics argument out of domain of function
+EDOOFUS Improper function use
+EDOTDOT RFS specific error
+EDQUOT Disk quota exceeded
+EEXIST File exists
+EFAULT Bad address
+EFBIG File too large
+EFTYPE Invalid file type or format
+EHOSTDOWN Host is down
+EHOSTUNREACH Host is unreachable
+EHWPOISON Memory page has hardware error
+EIDRM Identifier removed
+EILSEQ Invalid or incomplete multibyte or wide character
+EINPROGRESS Operation in progress
+EINTR Interrupted function call
+EINVAL Invalid argument
+EIO Input/output error
+EIPSEC IPsec processing failure
+EISCONN Socket is connected
+EISDIR Is a directory
+EISNAM Is a named file type
+EKEYEXPIRED Key has expired
+EKEYREJECTED Key was rejected by service
+EKEYREVOKED Key has been revoked
+EL2HLT Level 2 halted
+EL2NSYNC Level 2 not synchronized
+EL3HLT Level 3 halted
+EL3RST Level 3 reset
+ELIBACC Cannot access a needed shared library
+ELIBBAD Accessing a corrupted shared library
+ELIBEXEC Cannot exec a shared library directly
+ELIBMAX Attempting to link in too many shared libraries
+ELIBSCN .lib section in a.out corrupted
+ELNRNG Link number out of range
+ELOOP Too many levels of symbolic links
+EMEDIUMTYPE Wrong medium type
+EMFILE Too many open files
+EMLINK Too many links
+EMSGSIZE Message too long
+EMULTIHOP Multihop attempted
+ENAMETOOLONG Filename too long
+ENAVAIL No XENIX semaphores available
+ENEEDAUTH Need authenticator
+ENETDOWN Network is down
+ENETRESET Connection aborted by network
+ENETUNREACH Network unreachable
+ENFILE Too many open files in system
+ENOANO No anode
+ENOATTR Attribute not found
+ENOBUFS No buffer space available
+ENOCSI No CSI structure available
+ENODATA No data available
+ENODEV No such device
+ENOENT No such file or directory
+ENOEXEC Exec format error
+ENOKEY Required key not available
+ENOLCK No locks available
+ENOLINK Link has been severed
+ENOMEDIUM No medium found
+ENOMEM Not enough space/cannot allocate memory
+ENOMSG No message of the desired type
+ENONET Machine is not on the network
+ENOPKG Package not installed
+ENOPOLICY No such policy
+ENOPROTOOPT Protocol not available
+ENOSPC No space left on device
+ENOSR No STREAM resources
+ENOSTR Not a STREAM
+ENOSYS Functionality not implemented
+ENOTBLK Block device required
+ENOTCAPABLE Capabilities insufficient
+ENOTCONN The socket is not connected
+ENOTDIR Not a directory
+ENOTEMPTY Directory not empty
+ENOTNAM Not a XENIX named type file
+ENOTRECOVERABLE State not recoverable
+ENOTSOCK Not a socket
+ENOTSUP Operation not supported
+ENOTTY Inappropriate I/O control operation
+ENOTUNIQ Name not unique on network
+ENXIO No such device or address
+EOPNOTSUPP Operation not supported on socket
+EOVERFLOW Value too large to be stored in data type
+EOWNERDEAD Owner died
+EPERM Operation not permitted
+EPFNOSUPPORT Protocol family not supported
+EPIPE Broken pipe
+EPROCLIM Too many processes
+EPROCUNAVAIL Bad procedure for program
+EPROGMISMATCH Program version wrong
+EPROGUNAVAIL RPC program isn't available
+EPROTO Protocol error
+EPROTONOSUPPORT Protocol not supported
+EPROTOTYPE Protocol wrong type for socket
+EPWROFF Device power is off
+EQFULL Interface output queue is full
+ERANGE Result too large
+EREMCHG Remote address changed
+EREMOTE Object is remote
+EREMOTEIO Remote I/O error
+ERESTART Interrupted system call should be restarted
+ERFKILL Operation not possible due to RF-kill
+EROFS Read-only file system
+ERPCMISMATCH RPC version wrong
+ESHLIBVERS Shared library version mismatch
+ESHUTDOWN Cannot send after transport endpoint shutdown
+ESOCKTNOSUPPORT Socket type not supported
+ESPIPE Illegal seek
+ESRCH No such process
+ESRMNT Server mount error
+ESTALE Stale file handle
+ESTRPIPE Streams pipe error
+ETIME Timer expired
+ETIMEDOUT Connection timed out
+ETOOMANYREFS Too many references: cannot splice
+ETXTBSY Text file busy
+EUCLEAN Structure needs cleaning
+EUNATCH Protocol driver not attached
+EUSERS Too many users
+EWOULDBLOCK Operation would block
+EXDEV Invalid cross-device link
+EXFULL Exchange full
+ELAST Largest errno value
diff --git a/defs/lex.c.src b/defs/lex.c.src
index 20044a420c..a1b1f4f60f 100644
--- a/defs/lex.c.src
+++ b/defs/lex.c.src
@@ -1,8 +1,8 @@
%{
-struct kwtable {int name, id[2], state;};
+struct kwtable {short name, id[2], state;};
const struct kwtable *rb_reserved_word(const char *, unsigned int);
#ifndef RIPPER
-static const struct kwtable *reserved_word(const char *, unsigned int);
+static const struct kwtable *reserved_word(register const char *str, register size_t len);
#define rb_reserved_word(str, len) reserved_word(str, len)
%}
@@ -13,7 +13,7 @@ __LINE__, {keyword__LINE__, keyword__LINE__}, EXPR_END
__FILE__, {keyword__FILE__, keyword__FILE__}, EXPR_END
BEGIN, {keyword_BEGIN, keyword_BEGIN}, EXPR_END
END, {keyword_END, keyword_END}, EXPR_END
-alias, {keyword_alias, keyword_alias}, EXPR_FNAME
+alias, {keyword_alias, keyword_alias}, EXPR_FNAME|EXPR_FITEM
and, {keyword_and, keyword_and}, EXPR_VALUE
begin, {keyword_begin, keyword_begin}, EXPR_BEG
break, {keyword_break, keyword_break}, EXPR_MID
@@ -43,7 +43,7 @@ self, {keyword_self, keyword_self}, EXPR_END
super, {keyword_super, keyword_super}, EXPR_ARG
then, {keyword_then, keyword_then}, EXPR_BEG
true, {keyword_true, keyword_true}, EXPR_END
-undef, {keyword_undef, keyword_undef}, EXPR_FNAME
+undef, {keyword_undef, keyword_undef}, EXPR_FNAME|EXPR_FITEM
unless, {keyword_unless, modifier_unless}, EXPR_VALUE
until, {keyword_until, modifier_until}, EXPR_VALUE
when, {keyword_when, keyword_when}, EXPR_VALUE
diff --git a/defs/opt_insn_unif.def b/defs/opt_insn_unif.def
index 1ac613dbea..31ae2eb6a1 100644
--- a/defs/opt_insn_unif.def
+++ b/defs/opt_insn_unif.def
@@ -8,12 +8,10 @@ __END__
putobject putobject
putobject putstring
putobject setlocal
-putobject setdynamic
putstring putstring
putstring putobject
putstring setlocal
-putstring setdynamic
# putnil end
diff --git a/defs/separated_version.mk b/defs/separated_version.mk
new file mode 100644
index 0000000000..72ee093da7
--- /dev/null
+++ b/defs/separated_version.mk
@@ -0,0 +1,38 @@
+# ******** FOR DEVELEPERS ONLY ********
+# Separate version.o into a shared library which varies every
+# revisions, in order to make the rest shareable.
+
+include $(firstword $(wildcard GNUmakefile Makefile))
+
+ifneq ($(filter @executable_path/%,$(DLDFLAGS)),)
+RUBY_VERSION_SO = $(subst ruby,ruby_version,$(LIBRUBY_SO))
+RUBY_VERSION_DLDFLAGS := $(patsubst @executable_path/%/$(LIBRUBY_SO),@loader_path/$(RUBY_VERSION_SO),$(DLDFLAGS)) -exported_symbol=Init_version
+else ifneq ($(findstring -soname,$(DLDFLAGS)),)
+RUBY_VERSION_SO = $(subst ruby,ruby_version,$(LIBRUBY_SO))
+RUBY_VERSION_DLDFLAGS := $(subst ruby,ruby_version,$(DLDFLAGS)) -Wl,-rpath-link,'$${ORIGIN}'
+else
+ERROR
+endif
+
+ifneq ($(RUBY_VERSION_SO),)
+
+version.$(OBJEXT): XCFLAGS := $(subst -fvisibility=hidden,,$(XCFLAGS))
+
+MINIOBJS += version.$(OBJEXT)
+DLDOBJS += $(RUBY_VERSION_SO)
+LIBRUBYARG_SHARED := -lruby_version $(LIBRUBYARG_SHARED)
+$(LIBRUBY_SO): COMMONOBJS := $(filter-out version.$(OBJEXT),$(COMMONOBJS))
+$(LIBRUBY_A): COMMONOBJS := $(sort version.$(OBJEXT) $(COMMONOBJS))
+
+$(LIBRUBY_SO): $(RUBY_VERSION_SO)
+
+$(RUBY_VERSION_SO): version.$(OBJEXT)
+ $(ECHO) linking shared-library $@
+ $(LDSHARED) $(RUBY_VERSION_DLDFLAGS) version.$(OBJEXT) $(OUTFLAG)$@
+ -$(Q) $(MINIRUBY) -e 'ARGV.each{|link|' \
+ -e 'File.delete link rescue nil' \
+ -e 'File.symlink "$(RUBY_VERSION_SO)", link' \
+ -e '}' \
+ $(subst ruby,ruby_version,$(LIBRUBY_ALIASES)) || true
+
+endif
diff --git a/defs/tags.mk b/defs/tags.mk
new file mode 100644
index 0000000000..d29260c294
--- /dev/null
+++ b/defs/tags.mk
@@ -0,0 +1,18 @@
+# -*- mode: makefile-gmake; indent-tabs-mode: t -*-
+
+SRCS := $(shell $(GIT) ls-files \
+ *.[chy] *.def *.inc *.rb \
+ ccan/ coroutine/ include/ internal/ missing/ \
+ 'enc/**/*.[ch]' 'win32/**/*.[ch]' \
+ )
+
+TAGS: $(SRCS)
+ @echo updating $@
+ @tmp=$$(mktemp); \
+ trap 'rm -f "$$tmp"' 0; \
+ { \
+ $(GIT) grep -h --no-line-number -o '^ *# *define *RBIMPL_ATTR_[A-Z_]*(*' -- include | \
+ sed 's/^ *# *define *//;/_H$$/d;y/(/+/' | sort -u && \
+ echo 'NORETURN+'; \
+ } > "$$tmp" && \
+ ctags -e -I@"$$tmp" -h .def.inc --langmap=c:+.y.def.inc $(^)
diff --git a/depend b/depend
new file mode 100644
index 0000000000..7372902666
--- /dev/null
+++ b/depend
@@ -0,0 +1,20573 @@
+# AUTOGENERATED DEPENDENCIES START
+addr2line.$(OBJEXT): {$(VPATH)}addr2line.c
+addr2line.$(OBJEXT): {$(VPATH)}addr2line.h
+addr2line.$(OBJEXT): {$(VPATH)}assert.h
+addr2line.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+addr2line.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+addr2line.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+addr2line.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+addr2line.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+addr2line.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+addr2line.$(OBJEXT): {$(VPATH)}config.h
+addr2line.$(OBJEXT): {$(VPATH)}defines.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/assume.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/cast.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/config.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/dosish.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+addr2line.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+addr2line.$(OBJEXT): {$(VPATH)}missing.h
+array.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+array.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+array.$(OBJEXT): $(CCAN_DIR)/list/list.h
+array.$(OBJEXT): $(CCAN_DIR)/str/str.h
+array.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+array.$(OBJEXT): $(top_srcdir)/internal/array.h
+array.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+array.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+array.$(OBJEXT): $(top_srcdir)/internal/bits.h
+array.$(OBJEXT): $(top_srcdir)/internal/box.h
+array.$(OBJEXT): $(top_srcdir)/internal/class.h
+array.$(OBJEXT): $(top_srcdir)/internal/compar.h
+array.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+array.$(OBJEXT): $(top_srcdir)/internal/enum.h
+array.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+array.$(OBJEXT): $(top_srcdir)/internal/gc.h
+array.$(OBJEXT): $(top_srcdir)/internal/hash.h
+array.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+array.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+array.$(OBJEXT): $(top_srcdir)/internal/object.h
+array.$(OBJEXT): $(top_srcdir)/internal/proc.h
+array.$(OBJEXT): $(top_srcdir)/internal/rational.h
+array.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+array.$(OBJEXT): $(top_srcdir)/internal/serial.h
+array.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+array.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+array.$(OBJEXT): $(top_srcdir)/internal/variable.h
+array.$(OBJEXT): $(top_srcdir)/internal/vm.h
+array.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+array.$(OBJEXT): {$(VPATH)}array.c
+array.$(OBJEXT): {$(VPATH)}array.rbinc
+array.$(OBJEXT): {$(VPATH)}assert.h
+array.$(OBJEXT): {$(VPATH)}atomic.h
+array.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+array.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+array.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+array.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+array.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+array.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+array.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+array.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+array.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+array.$(OBJEXT): {$(VPATH)}builtin.h
+array.$(OBJEXT): {$(VPATH)}config.h
+array.$(OBJEXT): {$(VPATH)}constant.h
+array.$(OBJEXT): {$(VPATH)}debug_counter.h
+array.$(OBJEXT): {$(VPATH)}defines.h
+array.$(OBJEXT): {$(VPATH)}encoding.h
+array.$(OBJEXT): {$(VPATH)}id.h
+array.$(OBJEXT): {$(VPATH)}id_table.h
+array.$(OBJEXT): {$(VPATH)}intern.h
+array.$(OBJEXT): {$(VPATH)}internal.h
+array.$(OBJEXT): {$(VPATH)}internal/abi.h
+array.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+array.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+array.$(OBJEXT): {$(VPATH)}internal/assume.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+array.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+array.$(OBJEXT): {$(VPATH)}internal/cast.h
+array.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+array.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+array.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+array.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+array.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+array.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+array.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+array.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+array.$(OBJEXT): {$(VPATH)}internal/config.h
+array.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+array.$(OBJEXT): {$(VPATH)}internal/core.h
+array.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+array.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+array.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+array.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+array.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+array.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+array.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+array.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+array.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+array.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+array.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+array.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+array.$(OBJEXT): {$(VPATH)}internal/ctype.h
+array.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+array.$(OBJEXT): {$(VPATH)}internal/dosish.h
+array.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+array.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+array.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+array.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+array.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+array.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+array.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+array.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+array.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+array.$(OBJEXT): {$(VPATH)}internal/error.h
+array.$(OBJEXT): {$(VPATH)}internal/eval.h
+array.$(OBJEXT): {$(VPATH)}internal/event.h
+array.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+array.$(OBJEXT): {$(VPATH)}internal/gc.h
+array.$(OBJEXT): {$(VPATH)}internal/glob.h
+array.$(OBJEXT): {$(VPATH)}internal/globals.h
+array.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+array.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+array.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+array.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+array.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+array.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+array.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+array.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+array.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+array.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+array.$(OBJEXT): {$(VPATH)}internal/iterator.h
+array.$(OBJEXT): {$(VPATH)}internal/memory.h
+array.$(OBJEXT): {$(VPATH)}internal/method.h
+array.$(OBJEXT): {$(VPATH)}internal/module.h
+array.$(OBJEXT): {$(VPATH)}internal/newobj.h
+array.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+array.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+array.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+array.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+array.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+array.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+array.$(OBJEXT): {$(VPATH)}internal/symbol.h
+array.$(OBJEXT): {$(VPATH)}internal/value.h
+array.$(OBJEXT): {$(VPATH)}internal/value_type.h
+array.$(OBJEXT): {$(VPATH)}internal/variable.h
+array.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+array.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+array.$(OBJEXT): {$(VPATH)}method.h
+array.$(OBJEXT): {$(VPATH)}missing.h
+array.$(OBJEXT): {$(VPATH)}node.h
+array.$(OBJEXT): {$(VPATH)}onigmo.h
+array.$(OBJEXT): {$(VPATH)}oniguruma.h
+array.$(OBJEXT): {$(VPATH)}probes.dmyh
+array.$(OBJEXT): {$(VPATH)}probes.h
+array.$(OBJEXT): {$(VPATH)}ractor.h
+array.$(OBJEXT): {$(VPATH)}ruby_assert.h
+array.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+array.$(OBJEXT): {$(VPATH)}rubyparser.h
+array.$(OBJEXT): {$(VPATH)}shape.h
+array.$(OBJEXT): {$(VPATH)}st.h
+array.$(OBJEXT): {$(VPATH)}subst.h
+array.$(OBJEXT): {$(VPATH)}thread.h
+array.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+array.$(OBJEXT): {$(VPATH)}thread_native.h
+array.$(OBJEXT): {$(VPATH)}util.h
+array.$(OBJEXT): {$(VPATH)}vm_core.h
+array.$(OBJEXT): {$(VPATH)}vm_opts.h
+ast.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+ast.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+ast.$(OBJEXT): $(CCAN_DIR)/list/list.h
+ast.$(OBJEXT): $(CCAN_DIR)/str/str.h
+ast.$(OBJEXT): $(hdrdir)/ruby.h
+ast.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+ast.$(OBJEXT): $(top_srcdir)/internal/array.h
+ast.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+ast.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+ast.$(OBJEXT): $(top_srcdir)/internal/bits.h
+ast.$(OBJEXT): $(top_srcdir)/internal/box.h
+ast.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+ast.$(OBJEXT): $(top_srcdir)/internal/complex.h
+ast.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+ast.$(OBJEXT): $(top_srcdir)/internal/gc.h
+ast.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+ast.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+ast.$(OBJEXT): $(top_srcdir)/internal/parse.h
+ast.$(OBJEXT): $(top_srcdir)/internal/rational.h
+ast.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
+ast.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+ast.$(OBJEXT): $(top_srcdir)/internal/serial.h
+ast.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+ast.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+ast.$(OBJEXT): $(top_srcdir)/internal/struct.h
+ast.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+ast.$(OBJEXT): $(top_srcdir)/internal/variable.h
+ast.$(OBJEXT): $(top_srcdir)/internal/vm.h
+ast.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+ast.$(OBJEXT): $(top_srcdir)/prism/ast.h
+ast.$(OBJEXT): $(top_srcdir)/prism/defines.h
+ast.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+ast.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+ast.$(OBJEXT): $(top_srcdir)/prism/node.h
+ast.$(OBJEXT): $(top_srcdir)/prism/options.h
+ast.$(OBJEXT): $(top_srcdir)/prism/pack.h
+ast.$(OBJEXT): $(top_srcdir)/prism/parser.h
+ast.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+ast.$(OBJEXT): $(top_srcdir)/prism/prism.h
+ast.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+ast.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+ast.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+ast.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+ast.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+ast.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+ast.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+ast.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+ast.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+ast.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+ast.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+ast.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+ast.$(OBJEXT): $(top_srcdir)/prism/version.h
+ast.$(OBJEXT): {$(VPATH)}assert.h
+ast.$(OBJEXT): {$(VPATH)}ast.c
+ast.$(OBJEXT): {$(VPATH)}ast.rbinc
+ast.$(OBJEXT): {$(VPATH)}atomic.h
+ast.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+ast.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+ast.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+ast.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+ast.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+ast.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+ast.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+ast.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+ast.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+ast.$(OBJEXT): {$(VPATH)}builtin.h
+ast.$(OBJEXT): {$(VPATH)}config.h
+ast.$(OBJEXT): {$(VPATH)}constant.h
+ast.$(OBJEXT): {$(VPATH)}defines.h
+ast.$(OBJEXT): {$(VPATH)}encoding.h
+ast.$(OBJEXT): {$(VPATH)}id.h
+ast.$(OBJEXT): {$(VPATH)}id_table.h
+ast.$(OBJEXT): {$(VPATH)}intern.h
+ast.$(OBJEXT): {$(VPATH)}internal.h
+ast.$(OBJEXT): {$(VPATH)}internal/abi.h
+ast.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+ast.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+ast.$(OBJEXT): {$(VPATH)}internal/assume.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+ast.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+ast.$(OBJEXT): {$(VPATH)}internal/cast.h
+ast.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+ast.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+ast.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+ast.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+ast.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+ast.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+ast.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+ast.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+ast.$(OBJEXT): {$(VPATH)}internal/config.h
+ast.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+ast.$(OBJEXT): {$(VPATH)}internal/core.h
+ast.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+ast.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+ast.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+ast.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+ast.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+ast.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+ast.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+ast.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+ast.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+ast.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+ast.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+ast.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+ast.$(OBJEXT): {$(VPATH)}internal/ctype.h
+ast.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+ast.$(OBJEXT): {$(VPATH)}internal/dosish.h
+ast.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+ast.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+ast.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+ast.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+ast.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+ast.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+ast.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+ast.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+ast.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+ast.$(OBJEXT): {$(VPATH)}internal/error.h
+ast.$(OBJEXT): {$(VPATH)}internal/eval.h
+ast.$(OBJEXT): {$(VPATH)}internal/event.h
+ast.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+ast.$(OBJEXT): {$(VPATH)}internal/gc.h
+ast.$(OBJEXT): {$(VPATH)}internal/glob.h
+ast.$(OBJEXT): {$(VPATH)}internal/globals.h
+ast.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+ast.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+ast.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+ast.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+ast.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+ast.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+ast.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+ast.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+ast.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+ast.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+ast.$(OBJEXT): {$(VPATH)}internal/iterator.h
+ast.$(OBJEXT): {$(VPATH)}internal/memory.h
+ast.$(OBJEXT): {$(VPATH)}internal/method.h
+ast.$(OBJEXT): {$(VPATH)}internal/module.h
+ast.$(OBJEXT): {$(VPATH)}internal/newobj.h
+ast.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+ast.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+ast.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+ast.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+ast.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+ast.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+ast.$(OBJEXT): {$(VPATH)}internal/symbol.h
+ast.$(OBJEXT): {$(VPATH)}internal/value.h
+ast.$(OBJEXT): {$(VPATH)}internal/value_type.h
+ast.$(OBJEXT): {$(VPATH)}internal/variable.h
+ast.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+ast.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+ast.$(OBJEXT): {$(VPATH)}iseq.h
+ast.$(OBJEXT): {$(VPATH)}method.h
+ast.$(OBJEXT): {$(VPATH)}missing.h
+ast.$(OBJEXT): {$(VPATH)}node.h
+ast.$(OBJEXT): {$(VPATH)}onigmo.h
+ast.$(OBJEXT): {$(VPATH)}oniguruma.h
+ast.$(OBJEXT): {$(VPATH)}prism_compile.h
+ast.$(OBJEXT): {$(VPATH)}ruby_assert.h
+ast.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+ast.$(OBJEXT): {$(VPATH)}rubyparser.h
+ast.$(OBJEXT): {$(VPATH)}shape.h
+ast.$(OBJEXT): {$(VPATH)}st.h
+ast.$(OBJEXT): {$(VPATH)}subst.h
+ast.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+ast.$(OBJEXT): {$(VPATH)}thread_native.h
+ast.$(OBJEXT): {$(VPATH)}util.h
+ast.$(OBJEXT): {$(VPATH)}vm_core.h
+ast.$(OBJEXT): {$(VPATH)}vm_opts.h
+bignum.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+bignum.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+bignum.$(OBJEXT): $(CCAN_DIR)/list/list.h
+bignum.$(OBJEXT): $(CCAN_DIR)/str/str.h
+bignum.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/array.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/bits.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/box.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/class.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/complex.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/gc.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/object.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/serial.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/struct.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/variable.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/vm.h
+bignum.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+bignum.$(OBJEXT): {$(VPATH)}assert.h
+bignum.$(OBJEXT): {$(VPATH)}atomic.h
+bignum.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+bignum.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+bignum.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+bignum.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+bignum.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+bignum.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+bignum.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+bignum.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+bignum.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+bignum.$(OBJEXT): {$(VPATH)}bignum.c
+bignum.$(OBJEXT): {$(VPATH)}config.h
+bignum.$(OBJEXT): {$(VPATH)}constant.h
+bignum.$(OBJEXT): {$(VPATH)}defines.h
+bignum.$(OBJEXT): {$(VPATH)}encoding.h
+bignum.$(OBJEXT): {$(VPATH)}id.h
+bignum.$(OBJEXT): {$(VPATH)}id_table.h
+bignum.$(OBJEXT): {$(VPATH)}intern.h
+bignum.$(OBJEXT): {$(VPATH)}internal.h
+bignum.$(OBJEXT): {$(VPATH)}internal/abi.h
+bignum.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+bignum.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+bignum.$(OBJEXT): {$(VPATH)}internal/assume.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+bignum.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+bignum.$(OBJEXT): {$(VPATH)}internal/cast.h
+bignum.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+bignum.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+bignum.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+bignum.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+bignum.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+bignum.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+bignum.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+bignum.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+bignum.$(OBJEXT): {$(VPATH)}internal/config.h
+bignum.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+bignum.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+bignum.$(OBJEXT): {$(VPATH)}internal/ctype.h
+bignum.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+bignum.$(OBJEXT): {$(VPATH)}internal/dosish.h
+bignum.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+bignum.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+bignum.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+bignum.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+bignum.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+bignum.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+bignum.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+bignum.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+bignum.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+bignum.$(OBJEXT): {$(VPATH)}internal/error.h
+bignum.$(OBJEXT): {$(VPATH)}internal/eval.h
+bignum.$(OBJEXT): {$(VPATH)}internal/event.h
+bignum.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+bignum.$(OBJEXT): {$(VPATH)}internal/gc.h
+bignum.$(OBJEXT): {$(VPATH)}internal/glob.h
+bignum.$(OBJEXT): {$(VPATH)}internal/globals.h
+bignum.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+bignum.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+bignum.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+bignum.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+bignum.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+bignum.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+bignum.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+bignum.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+bignum.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+bignum.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+bignum.$(OBJEXT): {$(VPATH)}internal/iterator.h
+bignum.$(OBJEXT): {$(VPATH)}internal/memory.h
+bignum.$(OBJEXT): {$(VPATH)}internal/method.h
+bignum.$(OBJEXT): {$(VPATH)}internal/module.h
+bignum.$(OBJEXT): {$(VPATH)}internal/newobj.h
+bignum.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+bignum.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+bignum.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+bignum.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+bignum.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+bignum.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+bignum.$(OBJEXT): {$(VPATH)}internal/symbol.h
+bignum.$(OBJEXT): {$(VPATH)}internal/value.h
+bignum.$(OBJEXT): {$(VPATH)}internal/value_type.h
+bignum.$(OBJEXT): {$(VPATH)}internal/variable.h
+bignum.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+bignum.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+bignum.$(OBJEXT): {$(VPATH)}method.h
+bignum.$(OBJEXT): {$(VPATH)}missing.h
+bignum.$(OBJEXT): {$(VPATH)}node.h
+bignum.$(OBJEXT): {$(VPATH)}onigmo.h
+bignum.$(OBJEXT): {$(VPATH)}oniguruma.h
+bignum.$(OBJEXT): {$(VPATH)}ruby_assert.h
+bignum.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+bignum.$(OBJEXT): {$(VPATH)}rubyparser.h
+bignum.$(OBJEXT): {$(VPATH)}shape.h
+bignum.$(OBJEXT): {$(VPATH)}st.h
+bignum.$(OBJEXT): {$(VPATH)}subst.h
+bignum.$(OBJEXT): {$(VPATH)}thread.h
+bignum.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+bignum.$(OBJEXT): {$(VPATH)}thread_native.h
+bignum.$(OBJEXT): {$(VPATH)}util.h
+bignum.$(OBJEXT): {$(VPATH)}vm_core.h
+bignum.$(OBJEXT): {$(VPATH)}vm_opts.h
+box.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+box.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+box.$(OBJEXT): $(CCAN_DIR)/list/list.h
+box.$(OBJEXT): $(CCAN_DIR)/str/str.h
+box.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+box.$(OBJEXT): $(top_srcdir)/internal/array.h
+box.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+box.$(OBJEXT): $(top_srcdir)/internal/box.h
+box.$(OBJEXT): $(top_srcdir)/internal/class.h
+box.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+box.$(OBJEXT): $(top_srcdir)/internal/error.h
+box.$(OBJEXT): $(top_srcdir)/internal/eval.h
+box.$(OBJEXT): $(top_srcdir)/internal/file.h
+box.$(OBJEXT): $(top_srcdir)/internal/gc.h
+box.$(OBJEXT): $(top_srcdir)/internal/hash.h
+box.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+box.$(OBJEXT): $(top_srcdir)/internal/io.h
+box.$(OBJEXT): $(top_srcdir)/internal/load.h
+box.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+box.$(OBJEXT): $(top_srcdir)/internal/serial.h
+box.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+box.$(OBJEXT): $(top_srcdir)/internal/st.h
+box.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+box.$(OBJEXT): $(top_srcdir)/internal/string.h
+box.$(OBJEXT): $(top_srcdir)/internal/struct.h
+box.$(OBJEXT): $(top_srcdir)/internal/variable.h
+box.$(OBJEXT): $(top_srcdir)/internal/vm.h
+box.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+box.$(OBJEXT): $(top_srcdir)/prism/ast.h
+box.$(OBJEXT): $(top_srcdir)/prism/defines.h
+box.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+box.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+box.$(OBJEXT): $(top_srcdir)/prism/node.h
+box.$(OBJEXT): $(top_srcdir)/prism/options.h
+box.$(OBJEXT): $(top_srcdir)/prism/pack.h
+box.$(OBJEXT): $(top_srcdir)/prism/parser.h
+box.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+box.$(OBJEXT): $(top_srcdir)/prism/prism.h
+box.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+box.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+box.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+box.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+box.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+box.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+box.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+box.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+box.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+box.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+box.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+box.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+box.$(OBJEXT): $(top_srcdir)/prism/version.h
+box.$(OBJEXT): {$(VPATH)}assert.h
+box.$(OBJEXT): {$(VPATH)}atomic.h
+box.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+box.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+box.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+box.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+box.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+box.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+box.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+box.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+box.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+box.$(OBJEXT): {$(VPATH)}box.c
+box.$(OBJEXT): {$(VPATH)}config.h
+box.$(OBJEXT): {$(VPATH)}constant.h
+box.$(OBJEXT): {$(VPATH)}darray.h
+box.$(OBJEXT): {$(VPATH)}debug_counter.h
+box.$(OBJEXT): {$(VPATH)}defines.h
+box.$(OBJEXT): {$(VPATH)}encindex.h
+box.$(OBJEXT): {$(VPATH)}encoding.h
+box.$(OBJEXT): {$(VPATH)}eval_intern.h
+box.$(OBJEXT): {$(VPATH)}id.h
+box.$(OBJEXT): {$(VPATH)}id_table.h
+box.$(OBJEXT): {$(VPATH)}intern.h
+box.$(OBJEXT): {$(VPATH)}internal.h
+box.$(OBJEXT): {$(VPATH)}internal/abi.h
+box.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+box.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+box.$(OBJEXT): {$(VPATH)}internal/assume.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+box.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+box.$(OBJEXT): {$(VPATH)}internal/cast.h
+box.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+box.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+box.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+box.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+box.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+box.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+box.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+box.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+box.$(OBJEXT): {$(VPATH)}internal/config.h
+box.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+box.$(OBJEXT): {$(VPATH)}internal/core.h
+box.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+box.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+box.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+box.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+box.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+box.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+box.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+box.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+box.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+box.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+box.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+box.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+box.$(OBJEXT): {$(VPATH)}internal/ctype.h
+box.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+box.$(OBJEXT): {$(VPATH)}internal/dosish.h
+box.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+box.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+box.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+box.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+box.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+box.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+box.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+box.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+box.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+box.$(OBJEXT): {$(VPATH)}internal/error.h
+box.$(OBJEXT): {$(VPATH)}internal/eval.h
+box.$(OBJEXT): {$(VPATH)}internal/event.h
+box.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+box.$(OBJEXT): {$(VPATH)}internal/gc.h
+box.$(OBJEXT): {$(VPATH)}internal/glob.h
+box.$(OBJEXT): {$(VPATH)}internal/globals.h
+box.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+box.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+box.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+box.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+box.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+box.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+box.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+box.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+box.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+box.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+box.$(OBJEXT): {$(VPATH)}internal/iterator.h
+box.$(OBJEXT): {$(VPATH)}internal/memory.h
+box.$(OBJEXT): {$(VPATH)}internal/method.h
+box.$(OBJEXT): {$(VPATH)}internal/module.h
+box.$(OBJEXT): {$(VPATH)}internal/newobj.h
+box.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+box.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+box.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+box.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+box.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+box.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+box.$(OBJEXT): {$(VPATH)}internal/symbol.h
+box.$(OBJEXT): {$(VPATH)}internal/value.h
+box.$(OBJEXT): {$(VPATH)}internal/value_type.h
+box.$(OBJEXT): {$(VPATH)}internal/variable.h
+box.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+box.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+box.$(OBJEXT): {$(VPATH)}io.h
+box.$(OBJEXT): {$(VPATH)}iseq.h
+box.$(OBJEXT): {$(VPATH)}method.h
+box.$(OBJEXT): {$(VPATH)}missing.h
+box.$(OBJEXT): {$(VPATH)}node.h
+box.$(OBJEXT): {$(VPATH)}onigmo.h
+box.$(OBJEXT): {$(VPATH)}oniguruma.h
+box.$(OBJEXT): {$(VPATH)}prism/ast.h
+box.$(OBJEXT): {$(VPATH)}prism/diagnostic.h
+box.$(OBJEXT): {$(VPATH)}prism/version.h
+box.$(OBJEXT): {$(VPATH)}prism_compile.h
+box.$(OBJEXT): {$(VPATH)}ruby_assert.h
+box.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+box.$(OBJEXT): {$(VPATH)}rubyparser.h
+box.$(OBJEXT): {$(VPATH)}shape.h
+box.$(OBJEXT): {$(VPATH)}st.h
+box.$(OBJEXT): {$(VPATH)}subst.h
+box.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+box.$(OBJEXT): {$(VPATH)}thread_native.h
+box.$(OBJEXT): {$(VPATH)}util.h
+box.$(OBJEXT): {$(VPATH)}vm_core.h
+box.$(OBJEXT): {$(VPATH)}vm_debug.h
+box.$(OBJEXT): {$(VPATH)}vm_opts.h
+box.$(OBJEXT): {$(VPATH)}vm_sync.h
+builtin.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+builtin.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+builtin.$(OBJEXT): $(CCAN_DIR)/list/list.h
+builtin.$(OBJEXT): $(CCAN_DIR)/str/str.h
+builtin.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/array.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/box.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/gc.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/serial.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/struct.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/variable.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/vm.h
+builtin.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/ast.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/defines.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/node.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/options.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/pack.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/parser.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/prism.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+builtin.$(OBJEXT): $(top_srcdir)/prism/version.h
+builtin.$(OBJEXT): {$(VPATH)}assert.h
+builtin.$(OBJEXT): {$(VPATH)}atomic.h
+builtin.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+builtin.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+builtin.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+builtin.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+builtin.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+builtin.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+builtin.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+builtin.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+builtin.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+builtin.$(OBJEXT): {$(VPATH)}builtin.c
+builtin.$(OBJEXT): {$(VPATH)}builtin.h
+builtin.$(OBJEXT): {$(VPATH)}builtin_binary.rbbin
+builtin.$(OBJEXT): {$(VPATH)}config.h
+builtin.$(OBJEXT): {$(VPATH)}constant.h
+builtin.$(OBJEXT): {$(VPATH)}defines.h
+builtin.$(OBJEXT): {$(VPATH)}encoding.h
+builtin.$(OBJEXT): {$(VPATH)}id.h
+builtin.$(OBJEXT): {$(VPATH)}id_table.h
+builtin.$(OBJEXT): {$(VPATH)}intern.h
+builtin.$(OBJEXT): {$(VPATH)}internal.h
+builtin.$(OBJEXT): {$(VPATH)}internal/abi.h
+builtin.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+builtin.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+builtin.$(OBJEXT): {$(VPATH)}internal/assume.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+builtin.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+builtin.$(OBJEXT): {$(VPATH)}internal/cast.h
+builtin.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+builtin.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+builtin.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+builtin.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+builtin.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+builtin.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+builtin.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+builtin.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+builtin.$(OBJEXT): {$(VPATH)}internal/config.h
+builtin.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+builtin.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+builtin.$(OBJEXT): {$(VPATH)}internal/ctype.h
+builtin.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+builtin.$(OBJEXT): {$(VPATH)}internal/dosish.h
+builtin.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+builtin.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+builtin.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+builtin.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+builtin.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+builtin.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+builtin.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+builtin.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+builtin.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+builtin.$(OBJEXT): {$(VPATH)}internal/error.h
+builtin.$(OBJEXT): {$(VPATH)}internal/eval.h
+builtin.$(OBJEXT): {$(VPATH)}internal/event.h
+builtin.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+builtin.$(OBJEXT): {$(VPATH)}internal/gc.h
+builtin.$(OBJEXT): {$(VPATH)}internal/glob.h
+builtin.$(OBJEXT): {$(VPATH)}internal/globals.h
+builtin.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+builtin.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+builtin.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+builtin.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+builtin.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+builtin.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+builtin.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+builtin.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+builtin.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+builtin.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+builtin.$(OBJEXT): {$(VPATH)}internal/iterator.h
+builtin.$(OBJEXT): {$(VPATH)}internal/memory.h
+builtin.$(OBJEXT): {$(VPATH)}internal/method.h
+builtin.$(OBJEXT): {$(VPATH)}internal/module.h
+builtin.$(OBJEXT): {$(VPATH)}internal/newobj.h
+builtin.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+builtin.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+builtin.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+builtin.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+builtin.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+builtin.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+builtin.$(OBJEXT): {$(VPATH)}internal/symbol.h
+builtin.$(OBJEXT): {$(VPATH)}internal/value.h
+builtin.$(OBJEXT): {$(VPATH)}internal/value_type.h
+builtin.$(OBJEXT): {$(VPATH)}internal/variable.h
+builtin.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+builtin.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+builtin.$(OBJEXT): {$(VPATH)}iseq.h
+builtin.$(OBJEXT): {$(VPATH)}method.h
+builtin.$(OBJEXT): {$(VPATH)}missing.h
+builtin.$(OBJEXT): {$(VPATH)}node.h
+builtin.$(OBJEXT): {$(VPATH)}onigmo.h
+builtin.$(OBJEXT): {$(VPATH)}oniguruma.h
+builtin.$(OBJEXT): {$(VPATH)}prism_compile.h
+builtin.$(OBJEXT): {$(VPATH)}ruby_assert.h
+builtin.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+builtin.$(OBJEXT): {$(VPATH)}rubyparser.h
+builtin.$(OBJEXT): {$(VPATH)}shape.h
+builtin.$(OBJEXT): {$(VPATH)}st.h
+builtin.$(OBJEXT): {$(VPATH)}subst.h
+builtin.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+builtin.$(OBJEXT): {$(VPATH)}thread_native.h
+builtin.$(OBJEXT): {$(VPATH)}vm_core.h
+builtin.$(OBJEXT): {$(VPATH)}vm_opts.h
+class.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+class.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+class.$(OBJEXT): $(CCAN_DIR)/list/list.h
+class.$(OBJEXT): $(CCAN_DIR)/str/str.h
+class.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+class.$(OBJEXT): $(top_srcdir)/internal/array.h
+class.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+class.$(OBJEXT): $(top_srcdir)/internal/box.h
+class.$(OBJEXT): $(top_srcdir)/internal/class.h
+class.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+class.$(OBJEXT): $(top_srcdir)/internal/eval.h
+class.$(OBJEXT): $(top_srcdir)/internal/gc.h
+class.$(OBJEXT): $(top_srcdir)/internal/hash.h
+class.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+class.$(OBJEXT): $(top_srcdir)/internal/object.h
+class.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+class.$(OBJEXT): $(top_srcdir)/internal/serial.h
+class.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+class.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+class.$(OBJEXT): $(top_srcdir)/internal/string.h
+class.$(OBJEXT): $(top_srcdir)/internal/struct.h
+class.$(OBJEXT): $(top_srcdir)/internal/variable.h
+class.$(OBJEXT): $(top_srcdir)/internal/vm.h
+class.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+class.$(OBJEXT): {$(VPATH)}assert.h
+class.$(OBJEXT): {$(VPATH)}atomic.h
+class.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+class.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+class.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+class.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+class.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+class.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+class.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+class.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+class.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+class.$(OBJEXT): {$(VPATH)}class.c
+class.$(OBJEXT): {$(VPATH)}config.h
+class.$(OBJEXT): {$(VPATH)}constant.h
+class.$(OBJEXT): {$(VPATH)}debug_counter.h
+class.$(OBJEXT): {$(VPATH)}defines.h
+class.$(OBJEXT): {$(VPATH)}encindex.h
+class.$(OBJEXT): {$(VPATH)}encoding.h
+class.$(OBJEXT): {$(VPATH)}id.h
+class.$(OBJEXT): {$(VPATH)}id_table.h
+class.$(OBJEXT): {$(VPATH)}intern.h
+class.$(OBJEXT): {$(VPATH)}internal.h
+class.$(OBJEXT): {$(VPATH)}internal/abi.h
+class.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+class.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+class.$(OBJEXT): {$(VPATH)}internal/assume.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+class.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+class.$(OBJEXT): {$(VPATH)}internal/cast.h
+class.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+class.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+class.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+class.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+class.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+class.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+class.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+class.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+class.$(OBJEXT): {$(VPATH)}internal/config.h
+class.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+class.$(OBJEXT): {$(VPATH)}internal/core.h
+class.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+class.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+class.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+class.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+class.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+class.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+class.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+class.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+class.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+class.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+class.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+class.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+class.$(OBJEXT): {$(VPATH)}internal/ctype.h
+class.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+class.$(OBJEXT): {$(VPATH)}internal/dosish.h
+class.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+class.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+class.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+class.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+class.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+class.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+class.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+class.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+class.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+class.$(OBJEXT): {$(VPATH)}internal/error.h
+class.$(OBJEXT): {$(VPATH)}internal/eval.h
+class.$(OBJEXT): {$(VPATH)}internal/event.h
+class.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+class.$(OBJEXT): {$(VPATH)}internal/gc.h
+class.$(OBJEXT): {$(VPATH)}internal/glob.h
+class.$(OBJEXT): {$(VPATH)}internal/globals.h
+class.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+class.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+class.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+class.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+class.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+class.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+class.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+class.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+class.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+class.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+class.$(OBJEXT): {$(VPATH)}internal/iterator.h
+class.$(OBJEXT): {$(VPATH)}internal/memory.h
+class.$(OBJEXT): {$(VPATH)}internal/method.h
+class.$(OBJEXT): {$(VPATH)}internal/module.h
+class.$(OBJEXT): {$(VPATH)}internal/newobj.h
+class.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+class.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+class.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+class.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+class.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+class.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+class.$(OBJEXT): {$(VPATH)}internal/symbol.h
+class.$(OBJEXT): {$(VPATH)}internal/value.h
+class.$(OBJEXT): {$(VPATH)}internal/value_type.h
+class.$(OBJEXT): {$(VPATH)}internal/variable.h
+class.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+class.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+class.$(OBJEXT): {$(VPATH)}method.h
+class.$(OBJEXT): {$(VPATH)}missing.h
+class.$(OBJEXT): {$(VPATH)}node.h
+class.$(OBJEXT): {$(VPATH)}onigmo.h
+class.$(OBJEXT): {$(VPATH)}oniguruma.h
+class.$(OBJEXT): {$(VPATH)}ractor.h
+class.$(OBJEXT): {$(VPATH)}ruby_assert.h
+class.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+class.$(OBJEXT): {$(VPATH)}rubyparser.h
+class.$(OBJEXT): {$(VPATH)}shape.h
+class.$(OBJEXT): {$(VPATH)}st.h
+class.$(OBJEXT): {$(VPATH)}subst.h
+class.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+class.$(OBJEXT): {$(VPATH)}thread_native.h
+class.$(OBJEXT): {$(VPATH)}vm_core.h
+class.$(OBJEXT): {$(VPATH)}vm_debug.h
+class.$(OBJEXT): {$(VPATH)}vm_opts.h
+class.$(OBJEXT): {$(VPATH)}vm_sync.h
+class.$(OBJEXT): {$(VPATH)}yjit.h
+class.$(OBJEXT): {$(VPATH)}zjit.h
+compar.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+compar.$(OBJEXT): $(hdrdir)/ruby/version.h
+compar.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+compar.$(OBJEXT): $(top_srcdir)/internal/compar.h
+compar.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+compar.$(OBJEXT): $(top_srcdir)/internal/error.h
+compar.$(OBJEXT): $(top_srcdir)/internal/serial.h
+compar.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+compar.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+compar.$(OBJEXT): $(top_srcdir)/internal/string.h
+compar.$(OBJEXT): $(top_srcdir)/internal/vm.h
+compar.$(OBJEXT): {$(VPATH)}assert.h
+compar.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+compar.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+compar.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+compar.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+compar.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+compar.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+compar.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+compar.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+compar.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+compar.$(OBJEXT): {$(VPATH)}compar.c
+compar.$(OBJEXT): {$(VPATH)}config.h
+compar.$(OBJEXT): {$(VPATH)}defines.h
+compar.$(OBJEXT): {$(VPATH)}encindex.h
+compar.$(OBJEXT): {$(VPATH)}encoding.h
+compar.$(OBJEXT): {$(VPATH)}id.h
+compar.$(OBJEXT): {$(VPATH)}intern.h
+compar.$(OBJEXT): {$(VPATH)}internal.h
+compar.$(OBJEXT): {$(VPATH)}internal/abi.h
+compar.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+compar.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+compar.$(OBJEXT): {$(VPATH)}internal/assume.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+compar.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+compar.$(OBJEXT): {$(VPATH)}internal/cast.h
+compar.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+compar.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+compar.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+compar.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+compar.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+compar.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+compar.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+compar.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+compar.$(OBJEXT): {$(VPATH)}internal/config.h
+compar.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+compar.$(OBJEXT): {$(VPATH)}internal/core.h
+compar.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+compar.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+compar.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+compar.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+compar.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+compar.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+compar.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+compar.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+compar.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+compar.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+compar.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+compar.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+compar.$(OBJEXT): {$(VPATH)}internal/ctype.h
+compar.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+compar.$(OBJEXT): {$(VPATH)}internal/dosish.h
+compar.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+compar.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+compar.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+compar.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+compar.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+compar.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+compar.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+compar.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+compar.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+compar.$(OBJEXT): {$(VPATH)}internal/error.h
+compar.$(OBJEXT): {$(VPATH)}internal/eval.h
+compar.$(OBJEXT): {$(VPATH)}internal/event.h
+compar.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+compar.$(OBJEXT): {$(VPATH)}internal/gc.h
+compar.$(OBJEXT): {$(VPATH)}internal/glob.h
+compar.$(OBJEXT): {$(VPATH)}internal/globals.h
+compar.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+compar.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+compar.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+compar.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+compar.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+compar.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+compar.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+compar.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+compar.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+compar.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+compar.$(OBJEXT): {$(VPATH)}internal/iterator.h
+compar.$(OBJEXT): {$(VPATH)}internal/memory.h
+compar.$(OBJEXT): {$(VPATH)}internal/method.h
+compar.$(OBJEXT): {$(VPATH)}internal/module.h
+compar.$(OBJEXT): {$(VPATH)}internal/newobj.h
+compar.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+compar.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+compar.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+compar.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+compar.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+compar.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+compar.$(OBJEXT): {$(VPATH)}internal/symbol.h
+compar.$(OBJEXT): {$(VPATH)}internal/value.h
+compar.$(OBJEXT): {$(VPATH)}internal/value_type.h
+compar.$(OBJEXT): {$(VPATH)}internal/variable.h
+compar.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+compar.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+compar.$(OBJEXT): {$(VPATH)}missing.h
+compar.$(OBJEXT): {$(VPATH)}onigmo.h
+compar.$(OBJEXT): {$(VPATH)}oniguruma.h
+compar.$(OBJEXT): {$(VPATH)}st.h
+compar.$(OBJEXT): {$(VPATH)}subst.h
+compile.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+compile.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+compile.$(OBJEXT): $(CCAN_DIR)/list/list.h
+compile.$(OBJEXT): $(CCAN_DIR)/str/str.h
+compile.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+compile.$(OBJEXT): $(hdrdir)/ruby/version.h
+compile.$(OBJEXT): $(top_srcdir)/internal/array.h
+compile.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+compile.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+compile.$(OBJEXT): $(top_srcdir)/internal/bits.h
+compile.$(OBJEXT): $(top_srcdir)/internal/box.h
+compile.$(OBJEXT): $(top_srcdir)/internal/class.h
+compile.$(OBJEXT): $(top_srcdir)/internal/compile.h
+compile.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+compile.$(OBJEXT): $(top_srcdir)/internal/complex.h
+compile.$(OBJEXT): $(top_srcdir)/internal/encoding.h
+compile.$(OBJEXT): $(top_srcdir)/internal/error.h
+compile.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+compile.$(OBJEXT): $(top_srcdir)/internal/gc.h
+compile.$(OBJEXT): $(top_srcdir)/internal/hash.h
+compile.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+compile.$(OBJEXT): $(top_srcdir)/internal/io.h
+compile.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+compile.$(OBJEXT): $(top_srcdir)/internal/object.h
+compile.$(OBJEXT): $(top_srcdir)/internal/parse.h
+compile.$(OBJEXT): $(top_srcdir)/internal/rational.h
+compile.$(OBJEXT): $(top_srcdir)/internal/re.h
+compile.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
+compile.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+compile.$(OBJEXT): $(top_srcdir)/internal/serial.h
+compile.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+compile.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+compile.$(OBJEXT): $(top_srcdir)/internal/string.h
+compile.$(OBJEXT): $(top_srcdir)/internal/struct.h
+compile.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+compile.$(OBJEXT): $(top_srcdir)/internal/thread.h
+compile.$(OBJEXT): $(top_srcdir)/internal/variable.h
+compile.$(OBJEXT): $(top_srcdir)/internal/vm.h
+compile.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+compile.$(OBJEXT): $(top_srcdir)/prism/ast.h
+compile.$(OBJEXT): $(top_srcdir)/prism/defines.h
+compile.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+compile.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+compile.$(OBJEXT): $(top_srcdir)/prism/node.h
+compile.$(OBJEXT): $(top_srcdir)/prism/options.h
+compile.$(OBJEXT): $(top_srcdir)/prism/pack.h
+compile.$(OBJEXT): $(top_srcdir)/prism/parser.h
+compile.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+compile.$(OBJEXT): $(top_srcdir)/prism/prism.h
+compile.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+compile.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+compile.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+compile.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+compile.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+compile.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+compile.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+compile.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+compile.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+compile.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+compile.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+compile.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+compile.$(OBJEXT): $(top_srcdir)/prism/version.h
+compile.$(OBJEXT): $(top_srcdir)/prism_compile.c
+compile.$(OBJEXT): {$(VPATH)}assert.h
+compile.$(OBJEXT): {$(VPATH)}atomic.h
+compile.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+compile.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+compile.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+compile.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+compile.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+compile.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+compile.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+compile.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+compile.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+compile.$(OBJEXT): {$(VPATH)}builtin.h
+compile.$(OBJEXT): {$(VPATH)}compile.c
+compile.$(OBJEXT): {$(VPATH)}config.h
+compile.$(OBJEXT): {$(VPATH)}constant.h
+compile.$(OBJEXT): {$(VPATH)}debug_counter.h
+compile.$(OBJEXT): {$(VPATH)}defines.h
+compile.$(OBJEXT): {$(VPATH)}encindex.h
+compile.$(OBJEXT): {$(VPATH)}encoding.h
+compile.$(OBJEXT): {$(VPATH)}id.h
+compile.$(OBJEXT): {$(VPATH)}id_table.h
+compile.$(OBJEXT): {$(VPATH)}insns.def
+compile.$(OBJEXT): {$(VPATH)}insns.inc
+compile.$(OBJEXT): {$(VPATH)}insns_info.inc
+compile.$(OBJEXT): {$(VPATH)}intern.h
+compile.$(OBJEXT): {$(VPATH)}internal.h
+compile.$(OBJEXT): {$(VPATH)}internal/abi.h
+compile.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+compile.$(OBJEXT): {$(VPATH)}internal/assume.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+compile.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+compile.$(OBJEXT): {$(VPATH)}internal/cast.h
+compile.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+compile.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+compile.$(OBJEXT): {$(VPATH)}internal/config.h
+compile.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+compile.$(OBJEXT): {$(VPATH)}internal/core.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/rmatch.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+compile.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+compile.$(OBJEXT): {$(VPATH)}internal/ctype.h
+compile.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+compile.$(OBJEXT): {$(VPATH)}internal/dosish.h
+compile.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+compile.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+compile.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+compile.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+compile.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+compile.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+compile.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+compile.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+compile.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+compile.$(OBJEXT): {$(VPATH)}internal/error.h
+compile.$(OBJEXT): {$(VPATH)}internal/eval.h
+compile.$(OBJEXT): {$(VPATH)}internal/event.h
+compile.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+compile.$(OBJEXT): {$(VPATH)}internal/gc.h
+compile.$(OBJEXT): {$(VPATH)}internal/glob.h
+compile.$(OBJEXT): {$(VPATH)}internal/globals.h
+compile.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+compile.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+compile.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+compile.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+compile.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+compile.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+compile.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+compile.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+compile.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+compile.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+compile.$(OBJEXT): {$(VPATH)}internal/iterator.h
+compile.$(OBJEXT): {$(VPATH)}internal/memory.h
+compile.$(OBJEXT): {$(VPATH)}internal/method.h
+compile.$(OBJEXT): {$(VPATH)}internal/module.h
+compile.$(OBJEXT): {$(VPATH)}internal/newobj.h
+compile.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+compile.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+compile.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+compile.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+compile.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+compile.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+compile.$(OBJEXT): {$(VPATH)}internal/symbol.h
+compile.$(OBJEXT): {$(VPATH)}internal/value.h
+compile.$(OBJEXT): {$(VPATH)}internal/value_type.h
+compile.$(OBJEXT): {$(VPATH)}internal/variable.h
+compile.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+compile.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+compile.$(OBJEXT): {$(VPATH)}io.h
+compile.$(OBJEXT): {$(VPATH)}iseq.h
+compile.$(OBJEXT): {$(VPATH)}method.h
+compile.$(OBJEXT): {$(VPATH)}missing.h
+compile.$(OBJEXT): {$(VPATH)}node.h
+compile.$(OBJEXT): {$(VPATH)}onigmo.h
+compile.$(OBJEXT): {$(VPATH)}oniguruma.h
+compile.$(OBJEXT): {$(VPATH)}optinsn.inc
+compile.$(OBJEXT): {$(VPATH)}prism_compile.c
+compile.$(OBJEXT): {$(VPATH)}prism_compile.h
+compile.$(OBJEXT): {$(VPATH)}ractor.h
+compile.$(OBJEXT): {$(VPATH)}re.h
+compile.$(OBJEXT): {$(VPATH)}regex.h
+compile.$(OBJEXT): {$(VPATH)}ruby_assert.h
+compile.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+compile.$(OBJEXT): {$(VPATH)}rubyparser.h
+compile.$(OBJEXT): {$(VPATH)}shape.h
+compile.$(OBJEXT): {$(VPATH)}st.h
+compile.$(OBJEXT): {$(VPATH)}subst.h
+compile.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+compile.$(OBJEXT): {$(VPATH)}thread_native.h
+compile.$(OBJEXT): {$(VPATH)}util.h
+compile.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+compile.$(OBJEXT): {$(VPATH)}vm_core.h
+compile.$(OBJEXT): {$(VPATH)}vm_debug.h
+compile.$(OBJEXT): {$(VPATH)}vm_opts.h
+compile.$(OBJEXT): {$(VPATH)}vm_sync.h
+compile.$(OBJEXT): {$(VPATH)}yjit.h
+complex.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+complex.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+complex.$(OBJEXT): $(CCAN_DIR)/list/list.h
+complex.$(OBJEXT): $(CCAN_DIR)/str/str.h
+complex.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+complex.$(OBJEXT): $(top_srcdir)/internal/array.h
+complex.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+complex.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+complex.$(OBJEXT): $(top_srcdir)/internal/bits.h
+complex.$(OBJEXT): $(top_srcdir)/internal/box.h
+complex.$(OBJEXT): $(top_srcdir)/internal/class.h
+complex.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+complex.$(OBJEXT): $(top_srcdir)/internal/complex.h
+complex.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+complex.$(OBJEXT): $(top_srcdir)/internal/gc.h
+complex.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+complex.$(OBJEXT): $(top_srcdir)/internal/math.h
+complex.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+complex.$(OBJEXT): $(top_srcdir)/internal/object.h
+complex.$(OBJEXT): $(top_srcdir)/internal/rational.h
+complex.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+complex.$(OBJEXT): $(top_srcdir)/internal/serial.h
+complex.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+complex.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+complex.$(OBJEXT): $(top_srcdir)/internal/string.h
+complex.$(OBJEXT): $(top_srcdir)/internal/struct.h
+complex.$(OBJEXT): $(top_srcdir)/internal/variable.h
+complex.$(OBJEXT): $(top_srcdir)/internal/vm.h
+complex.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+complex.$(OBJEXT): {$(VPATH)}assert.h
+complex.$(OBJEXT): {$(VPATH)}atomic.h
+complex.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+complex.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+complex.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+complex.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+complex.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+complex.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+complex.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+complex.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+complex.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+complex.$(OBJEXT): {$(VPATH)}complex.c
+complex.$(OBJEXT): {$(VPATH)}config.h
+complex.$(OBJEXT): {$(VPATH)}constant.h
+complex.$(OBJEXT): {$(VPATH)}debug_counter.h
+complex.$(OBJEXT): {$(VPATH)}defines.h
+complex.$(OBJEXT): {$(VPATH)}encindex.h
+complex.$(OBJEXT): {$(VPATH)}encoding.h
+complex.$(OBJEXT): {$(VPATH)}id.h
+complex.$(OBJEXT): {$(VPATH)}id_table.h
+complex.$(OBJEXT): {$(VPATH)}intern.h
+complex.$(OBJEXT): {$(VPATH)}internal.h
+complex.$(OBJEXT): {$(VPATH)}internal/abi.h
+complex.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+complex.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+complex.$(OBJEXT): {$(VPATH)}internal/assume.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+complex.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+complex.$(OBJEXT): {$(VPATH)}internal/cast.h
+complex.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+complex.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+complex.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+complex.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+complex.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+complex.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+complex.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+complex.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+complex.$(OBJEXT): {$(VPATH)}internal/config.h
+complex.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+complex.$(OBJEXT): {$(VPATH)}internal/core.h
+complex.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+complex.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+complex.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+complex.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+complex.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+complex.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+complex.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+complex.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+complex.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+complex.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+complex.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+complex.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+complex.$(OBJEXT): {$(VPATH)}internal/ctype.h
+complex.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+complex.$(OBJEXT): {$(VPATH)}internal/dosish.h
+complex.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+complex.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+complex.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+complex.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+complex.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+complex.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+complex.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+complex.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+complex.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+complex.$(OBJEXT): {$(VPATH)}internal/error.h
+complex.$(OBJEXT): {$(VPATH)}internal/eval.h
+complex.$(OBJEXT): {$(VPATH)}internal/event.h
+complex.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+complex.$(OBJEXT): {$(VPATH)}internal/gc.h
+complex.$(OBJEXT): {$(VPATH)}internal/glob.h
+complex.$(OBJEXT): {$(VPATH)}internal/globals.h
+complex.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+complex.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+complex.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+complex.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+complex.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+complex.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+complex.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+complex.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+complex.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+complex.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+complex.$(OBJEXT): {$(VPATH)}internal/iterator.h
+complex.$(OBJEXT): {$(VPATH)}internal/memory.h
+complex.$(OBJEXT): {$(VPATH)}internal/method.h
+complex.$(OBJEXT): {$(VPATH)}internal/module.h
+complex.$(OBJEXT): {$(VPATH)}internal/newobj.h
+complex.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+complex.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+complex.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+complex.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+complex.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+complex.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+complex.$(OBJEXT): {$(VPATH)}internal/symbol.h
+complex.$(OBJEXT): {$(VPATH)}internal/value.h
+complex.$(OBJEXT): {$(VPATH)}internal/value_type.h
+complex.$(OBJEXT): {$(VPATH)}internal/variable.h
+complex.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+complex.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+complex.$(OBJEXT): {$(VPATH)}method.h
+complex.$(OBJEXT): {$(VPATH)}missing.h
+complex.$(OBJEXT): {$(VPATH)}node.h
+complex.$(OBJEXT): {$(VPATH)}onigmo.h
+complex.$(OBJEXT): {$(VPATH)}oniguruma.h
+complex.$(OBJEXT): {$(VPATH)}ruby_assert.h
+complex.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+complex.$(OBJEXT): {$(VPATH)}rubyparser.h
+complex.$(OBJEXT): {$(VPATH)}shape.h
+complex.$(OBJEXT): {$(VPATH)}st.h
+complex.$(OBJEXT): {$(VPATH)}subst.h
+complex.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+complex.$(OBJEXT): {$(VPATH)}thread_native.h
+complex.$(OBJEXT): {$(VPATH)}vm_core.h
+complex.$(OBJEXT): {$(VPATH)}vm_debug.h
+complex.$(OBJEXT): {$(VPATH)}vm_opts.h
+complex.$(OBJEXT): {$(VPATH)}vm_sync.h
+concurrent_set.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+concurrent_set.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+concurrent_set.$(OBJEXT): $(CCAN_DIR)/list/list.h
+concurrent_set.$(OBJEXT): $(CCAN_DIR)/str/str.h
+concurrent_set.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/array.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/box.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/concurrent_set.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/gc.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/serial.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/vm.h
+concurrent_set.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+concurrent_set.$(OBJEXT): {$(VPATH)}assert.h
+concurrent_set.$(OBJEXT): {$(VPATH)}atomic.h
+concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+concurrent_set.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+concurrent_set.$(OBJEXT): {$(VPATH)}concurrent_set.c
+concurrent_set.$(OBJEXT): {$(VPATH)}config.h
+concurrent_set.$(OBJEXT): {$(VPATH)}debug_counter.h
+concurrent_set.$(OBJEXT): {$(VPATH)}defines.h
+concurrent_set.$(OBJEXT): {$(VPATH)}encindex.h
+concurrent_set.$(OBJEXT): {$(VPATH)}encoding.h
+concurrent_set.$(OBJEXT): {$(VPATH)}id.h
+concurrent_set.$(OBJEXT): {$(VPATH)}id_table.h
+concurrent_set.$(OBJEXT): {$(VPATH)}intern.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/abi.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/assume.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/cast.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/config.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/ctype.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/dosish.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/error.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/eval.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/event.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/gc.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/glob.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/globals.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/iterator.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/memory.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/method.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/module.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/newobj.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/symbol.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/value.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/value_type.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/variable.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+concurrent_set.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+concurrent_set.$(OBJEXT): {$(VPATH)}method.h
+concurrent_set.$(OBJEXT): {$(VPATH)}missing.h
+concurrent_set.$(OBJEXT): {$(VPATH)}node.h
+concurrent_set.$(OBJEXT): {$(VPATH)}onigmo.h
+concurrent_set.$(OBJEXT): {$(VPATH)}oniguruma.h
+concurrent_set.$(OBJEXT): {$(VPATH)}ruby_assert.h
+concurrent_set.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+concurrent_set.$(OBJEXT): {$(VPATH)}rubyparser.h
+concurrent_set.$(OBJEXT): {$(VPATH)}st.h
+concurrent_set.$(OBJEXT): {$(VPATH)}subst.h
+concurrent_set.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+concurrent_set.$(OBJEXT): {$(VPATH)}thread_native.h
+concurrent_set.$(OBJEXT): {$(VPATH)}vm_core.h
+concurrent_set.$(OBJEXT): {$(VPATH)}vm_debug.h
+concurrent_set.$(OBJEXT): {$(VPATH)}vm_opts.h
+concurrent_set.$(OBJEXT): {$(VPATH)}vm_sync.h
+cont.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+cont.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+cont.$(OBJEXT): $(CCAN_DIR)/list/list.h
+cont.$(OBJEXT): $(CCAN_DIR)/str/str.h
+cont.$(OBJEXT): $(hdrdir)/ruby.h
+cont.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+cont.$(OBJEXT): $(hdrdir)/ruby/version.h
+cont.$(OBJEXT): $(top_srcdir)/internal/array.h
+cont.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+cont.$(OBJEXT): $(top_srcdir)/internal/box.h
+cont.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+cont.$(OBJEXT): $(top_srcdir)/internal/cont.h
+cont.$(OBJEXT): $(top_srcdir)/internal/error.h
+cont.$(OBJEXT): $(top_srcdir)/internal/eval.h
+cont.$(OBJEXT): $(top_srcdir)/internal/gc.h
+cont.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+cont.$(OBJEXT): $(top_srcdir)/internal/proc.h
+cont.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+cont.$(OBJEXT): $(top_srcdir)/internal/serial.h
+cont.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+cont.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+cont.$(OBJEXT): $(top_srcdir)/internal/string.h
+cont.$(OBJEXT): $(top_srcdir)/internal/struct.h
+cont.$(OBJEXT): $(top_srcdir)/internal/thread.h
+cont.$(OBJEXT): $(top_srcdir)/internal/variable.h
+cont.$(OBJEXT): $(top_srcdir)/internal/vm.h
+cont.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+cont.$(OBJEXT): $(top_srcdir)/prism/ast.h
+cont.$(OBJEXT): $(top_srcdir)/prism/defines.h
+cont.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+cont.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+cont.$(OBJEXT): $(top_srcdir)/prism/node.h
+cont.$(OBJEXT): $(top_srcdir)/prism/options.h
+cont.$(OBJEXT): $(top_srcdir)/prism/pack.h
+cont.$(OBJEXT): $(top_srcdir)/prism/parser.h
+cont.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+cont.$(OBJEXT): $(top_srcdir)/prism/prism.h
+cont.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+cont.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+cont.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+cont.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+cont.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+cont.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+cont.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+cont.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+cont.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+cont.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+cont.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+cont.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+cont.$(OBJEXT): $(top_srcdir)/prism/version.h
+cont.$(OBJEXT): {$(VPATH)}$(COROUTINE_H)
+cont.$(OBJEXT): {$(VPATH)}assert.h
+cont.$(OBJEXT): {$(VPATH)}atomic.h
+cont.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+cont.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+cont.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+cont.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+cont.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+cont.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+cont.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+cont.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+cont.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+cont.$(OBJEXT): {$(VPATH)}config.h
+cont.$(OBJEXT): {$(VPATH)}constant.h
+cont.$(OBJEXT): {$(VPATH)}cont.c
+cont.$(OBJEXT): {$(VPATH)}debug_counter.h
+cont.$(OBJEXT): {$(VPATH)}defines.h
+cont.$(OBJEXT): {$(VPATH)}encindex.h
+cont.$(OBJEXT): {$(VPATH)}encoding.h
+cont.$(OBJEXT): {$(VPATH)}eval_intern.h
+cont.$(OBJEXT): {$(VPATH)}fiber/scheduler.h
+cont.$(OBJEXT): {$(VPATH)}id.h
+cont.$(OBJEXT): {$(VPATH)}id_table.h
+cont.$(OBJEXT): {$(VPATH)}intern.h
+cont.$(OBJEXT): {$(VPATH)}internal.h
+cont.$(OBJEXT): {$(VPATH)}internal/abi.h
+cont.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+cont.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+cont.$(OBJEXT): {$(VPATH)}internal/assume.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+cont.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+cont.$(OBJEXT): {$(VPATH)}internal/cast.h
+cont.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+cont.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+cont.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+cont.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+cont.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+cont.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+cont.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+cont.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+cont.$(OBJEXT): {$(VPATH)}internal/config.h
+cont.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+cont.$(OBJEXT): {$(VPATH)}internal/core.h
+cont.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+cont.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+cont.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+cont.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+cont.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+cont.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+cont.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+cont.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+cont.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+cont.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+cont.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+cont.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+cont.$(OBJEXT): {$(VPATH)}internal/ctype.h
+cont.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+cont.$(OBJEXT): {$(VPATH)}internal/dosish.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+cont.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+cont.$(OBJEXT): {$(VPATH)}internal/error.h
+cont.$(OBJEXT): {$(VPATH)}internal/eval.h
+cont.$(OBJEXT): {$(VPATH)}internal/event.h
+cont.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+cont.$(OBJEXT): {$(VPATH)}internal/gc.h
+cont.$(OBJEXT): {$(VPATH)}internal/glob.h
+cont.$(OBJEXT): {$(VPATH)}internal/globals.h
+cont.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+cont.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+cont.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+cont.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+cont.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+cont.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+cont.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+cont.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+cont.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+cont.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+cont.$(OBJEXT): {$(VPATH)}internal/iterator.h
+cont.$(OBJEXT): {$(VPATH)}internal/memory.h
+cont.$(OBJEXT): {$(VPATH)}internal/method.h
+cont.$(OBJEXT): {$(VPATH)}internal/module.h
+cont.$(OBJEXT): {$(VPATH)}internal/newobj.h
+cont.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+cont.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+cont.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+cont.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+cont.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+cont.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+cont.$(OBJEXT): {$(VPATH)}internal/symbol.h
+cont.$(OBJEXT): {$(VPATH)}internal/value.h
+cont.$(OBJEXT): {$(VPATH)}internal/value_type.h
+cont.$(OBJEXT): {$(VPATH)}internal/variable.h
+cont.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+cont.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+cont.$(OBJEXT): {$(VPATH)}iseq.h
+cont.$(OBJEXT): {$(VPATH)}method.h
+cont.$(OBJEXT): {$(VPATH)}missing.h
+cont.$(OBJEXT): {$(VPATH)}node.h
+cont.$(OBJEXT): {$(VPATH)}onigmo.h
+cont.$(OBJEXT): {$(VPATH)}oniguruma.h
+cont.$(OBJEXT): {$(VPATH)}prism_compile.h
+cont.$(OBJEXT): {$(VPATH)}ractor.h
+cont.$(OBJEXT): {$(VPATH)}ractor_core.h
+cont.$(OBJEXT): {$(VPATH)}ruby_assert.h
+cont.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+cont.$(OBJEXT): {$(VPATH)}rubyparser.h
+cont.$(OBJEXT): {$(VPATH)}shape.h
+cont.$(OBJEXT): {$(VPATH)}st.h
+cont.$(OBJEXT): {$(VPATH)}subst.h
+cont.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+cont.$(OBJEXT): {$(VPATH)}thread_native.h
+cont.$(OBJEXT): {$(VPATH)}vm_core.h
+cont.$(OBJEXT): {$(VPATH)}vm_debug.h
+cont.$(OBJEXT): {$(VPATH)}vm_opts.h
+cont.$(OBJEXT): {$(VPATH)}vm_sync.h
+cont.$(OBJEXT): {$(VPATH)}yjit.h
+debug.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+debug.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+debug.$(OBJEXT): $(CCAN_DIR)/list/list.h
+debug.$(OBJEXT): $(CCAN_DIR)/str/str.h
+debug.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+debug.$(OBJEXT): $(top_srcdir)/internal/array.h
+debug.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+debug.$(OBJEXT): $(top_srcdir)/internal/box.h
+debug.$(OBJEXT): $(top_srcdir)/internal/class.h
+debug.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+debug.$(OBJEXT): $(top_srcdir)/internal/gc.h
+debug.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+debug.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+debug.$(OBJEXT): $(top_srcdir)/internal/serial.h
+debug.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+debug.$(OBJEXT): $(top_srcdir)/internal/signal.h
+debug.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+debug.$(OBJEXT): $(top_srcdir)/internal/struct.h
+debug.$(OBJEXT): $(top_srcdir)/internal/variable.h
+debug.$(OBJEXT): $(top_srcdir)/internal/vm.h
+debug.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+debug.$(OBJEXT): {$(VPATH)}assert.h
+debug.$(OBJEXT): {$(VPATH)}atomic.h
+debug.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+debug.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+debug.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+debug.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+debug.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+debug.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+debug.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+debug.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+debug.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+debug.$(OBJEXT): {$(VPATH)}config.h
+debug.$(OBJEXT): {$(VPATH)}constant.h
+debug.$(OBJEXT): {$(VPATH)}debug.c
+debug.$(OBJEXT): {$(VPATH)}debug_counter.h
+debug.$(OBJEXT): {$(VPATH)}defines.h
+debug.$(OBJEXT): {$(VPATH)}encindex.h
+debug.$(OBJEXT): {$(VPATH)}encoding.h
+debug.$(OBJEXT): {$(VPATH)}eval_intern.h
+debug.$(OBJEXT): {$(VPATH)}id.h
+debug.$(OBJEXT): {$(VPATH)}id_table.h
+debug.$(OBJEXT): {$(VPATH)}intern.h
+debug.$(OBJEXT): {$(VPATH)}internal.h
+debug.$(OBJEXT): {$(VPATH)}internal/abi.h
+debug.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+debug.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+debug.$(OBJEXT): {$(VPATH)}internal/assume.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+debug.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+debug.$(OBJEXT): {$(VPATH)}internal/cast.h
+debug.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+debug.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+debug.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+debug.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+debug.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+debug.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+debug.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+debug.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+debug.$(OBJEXT): {$(VPATH)}internal/config.h
+debug.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+debug.$(OBJEXT): {$(VPATH)}internal/core.h
+debug.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+debug.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+debug.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+debug.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+debug.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+debug.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+debug.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+debug.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+debug.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+debug.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+debug.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+debug.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+debug.$(OBJEXT): {$(VPATH)}internal/ctype.h
+debug.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+debug.$(OBJEXT): {$(VPATH)}internal/dosish.h
+debug.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+debug.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+debug.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+debug.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+debug.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+debug.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+debug.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+debug.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+debug.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+debug.$(OBJEXT): {$(VPATH)}internal/error.h
+debug.$(OBJEXT): {$(VPATH)}internal/eval.h
+debug.$(OBJEXT): {$(VPATH)}internal/event.h
+debug.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+debug.$(OBJEXT): {$(VPATH)}internal/gc.h
+debug.$(OBJEXT): {$(VPATH)}internal/glob.h
+debug.$(OBJEXT): {$(VPATH)}internal/globals.h
+debug.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+debug.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+debug.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+debug.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+debug.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+debug.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+debug.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+debug.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+debug.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+debug.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+debug.$(OBJEXT): {$(VPATH)}internal/iterator.h
+debug.$(OBJEXT): {$(VPATH)}internal/memory.h
+debug.$(OBJEXT): {$(VPATH)}internal/method.h
+debug.$(OBJEXT): {$(VPATH)}internal/module.h
+debug.$(OBJEXT): {$(VPATH)}internal/newobj.h
+debug.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+debug.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+debug.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+debug.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+debug.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+debug.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+debug.$(OBJEXT): {$(VPATH)}internal/symbol.h
+debug.$(OBJEXT): {$(VPATH)}internal/value.h
+debug.$(OBJEXT): {$(VPATH)}internal/value_type.h
+debug.$(OBJEXT): {$(VPATH)}internal/variable.h
+debug.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+debug.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+debug.$(OBJEXT): {$(VPATH)}io.h
+debug.$(OBJEXT): {$(VPATH)}method.h
+debug.$(OBJEXT): {$(VPATH)}missing.h
+debug.$(OBJEXT): {$(VPATH)}node.h
+debug.$(OBJEXT): {$(VPATH)}onigmo.h
+debug.$(OBJEXT): {$(VPATH)}oniguruma.h
+debug.$(OBJEXT): {$(VPATH)}ractor.h
+debug.$(OBJEXT): {$(VPATH)}ractor_core.h
+debug.$(OBJEXT): {$(VPATH)}ruby_assert.h
+debug.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+debug.$(OBJEXT): {$(VPATH)}rubyparser.h
+debug.$(OBJEXT): {$(VPATH)}shape.h
+debug.$(OBJEXT): {$(VPATH)}st.h
+debug.$(OBJEXT): {$(VPATH)}subst.h
+debug.$(OBJEXT): {$(VPATH)}symbol.h
+debug.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+debug.$(OBJEXT): {$(VPATH)}thread_native.h
+debug.$(OBJEXT): {$(VPATH)}util.h
+debug.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+debug.$(OBJEXT): {$(VPATH)}vm_core.h
+debug.$(OBJEXT): {$(VPATH)}vm_debug.h
+debug.$(OBJEXT): {$(VPATH)}vm_opts.h
+debug.$(OBJEXT): {$(VPATH)}vm_sync.h
+debug_counter.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+debug_counter.$(OBJEXT): {$(VPATH)}assert.h
+debug_counter.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+debug_counter.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+debug_counter.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+debug_counter.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+debug_counter.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+debug_counter.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+debug_counter.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+debug_counter.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+debug_counter.$(OBJEXT): {$(VPATH)}config.h
+debug_counter.$(OBJEXT): {$(VPATH)}debug_counter.c
+debug_counter.$(OBJEXT): {$(VPATH)}debug_counter.h
+debug_counter.$(OBJEXT): {$(VPATH)}defines.h
+debug_counter.$(OBJEXT): {$(VPATH)}intern.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/abi.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/assume.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/cast.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/config.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/ctype.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/dosish.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/error.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/eval.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/event.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/gc.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/glob.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/globals.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/iterator.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/memory.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/method.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/module.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/newobj.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/symbol.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/value.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/value_type.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/variable.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+debug_counter.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+debug_counter.$(OBJEXT): {$(VPATH)}missing.h
+debug_counter.$(OBJEXT): {$(VPATH)}st.h
+debug_counter.$(OBJEXT): {$(VPATH)}subst.h
+debug_counter.$(OBJEXT): {$(VPATH)}thread_native.h
+dir.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+dir.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+dir.$(OBJEXT): $(CCAN_DIR)/list/list.h
+dir.$(OBJEXT): $(CCAN_DIR)/str/str.h
+dir.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+dir.$(OBJEXT): $(hdrdir)/ruby/version.h
+dir.$(OBJEXT): $(top_srcdir)/internal/array.h
+dir.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+dir.$(OBJEXT): $(top_srcdir)/internal/box.h
+dir.$(OBJEXT): $(top_srcdir)/internal/class.h
+dir.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+dir.$(OBJEXT): $(top_srcdir)/internal/dir.h
+dir.$(OBJEXT): $(top_srcdir)/internal/encoding.h
+dir.$(OBJEXT): $(top_srcdir)/internal/error.h
+dir.$(OBJEXT): $(top_srcdir)/internal/file.h
+dir.$(OBJEXT): $(top_srcdir)/internal/gc.h
+dir.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+dir.$(OBJEXT): $(top_srcdir)/internal/io.h
+dir.$(OBJEXT): $(top_srcdir)/internal/object.h
+dir.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+dir.$(OBJEXT): $(top_srcdir)/internal/serial.h
+dir.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+dir.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+dir.$(OBJEXT): $(top_srcdir)/internal/string.h
+dir.$(OBJEXT): $(top_srcdir)/internal/variable.h
+dir.$(OBJEXT): $(top_srcdir)/internal/vm.h
+dir.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+dir.$(OBJEXT): {$(VPATH)}assert.h
+dir.$(OBJEXT): {$(VPATH)}atomic.h
+dir.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+dir.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+dir.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+dir.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+dir.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+dir.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+dir.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+dir.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+dir.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+dir.$(OBJEXT): {$(VPATH)}builtin.h
+dir.$(OBJEXT): {$(VPATH)}config.h
+dir.$(OBJEXT): {$(VPATH)}constant.h
+dir.$(OBJEXT): {$(VPATH)}defines.h
+dir.$(OBJEXT): {$(VPATH)}dir.c
+dir.$(OBJEXT): {$(VPATH)}dir.rbinc
+dir.$(OBJEXT): {$(VPATH)}encindex.h
+dir.$(OBJEXT): {$(VPATH)}encoding.h
+dir.$(OBJEXT): {$(VPATH)}id.h
+dir.$(OBJEXT): {$(VPATH)}id_table.h
+dir.$(OBJEXT): {$(VPATH)}intern.h
+dir.$(OBJEXT): {$(VPATH)}internal.h
+dir.$(OBJEXT): {$(VPATH)}internal/abi.h
+dir.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+dir.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+dir.$(OBJEXT): {$(VPATH)}internal/assume.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+dir.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+dir.$(OBJEXT): {$(VPATH)}internal/cast.h
+dir.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+dir.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+dir.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+dir.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+dir.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+dir.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+dir.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+dir.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+dir.$(OBJEXT): {$(VPATH)}internal/config.h
+dir.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+dir.$(OBJEXT): {$(VPATH)}internal/core.h
+dir.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+dir.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+dir.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+dir.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+dir.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+dir.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+dir.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+dir.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+dir.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+dir.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+dir.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+dir.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+dir.$(OBJEXT): {$(VPATH)}internal/ctype.h
+dir.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+dir.$(OBJEXT): {$(VPATH)}internal/dosish.h
+dir.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+dir.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+dir.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+dir.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+dir.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+dir.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+dir.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+dir.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+dir.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+dir.$(OBJEXT): {$(VPATH)}internal/error.h
+dir.$(OBJEXT): {$(VPATH)}internal/eval.h
+dir.$(OBJEXT): {$(VPATH)}internal/event.h
+dir.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+dir.$(OBJEXT): {$(VPATH)}internal/gc.h
+dir.$(OBJEXT): {$(VPATH)}internal/glob.h
+dir.$(OBJEXT): {$(VPATH)}internal/globals.h
+dir.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+dir.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+dir.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+dir.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+dir.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+dir.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+dir.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+dir.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+dir.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+dir.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+dir.$(OBJEXT): {$(VPATH)}internal/iterator.h
+dir.$(OBJEXT): {$(VPATH)}internal/memory.h
+dir.$(OBJEXT): {$(VPATH)}internal/method.h
+dir.$(OBJEXT): {$(VPATH)}internal/module.h
+dir.$(OBJEXT): {$(VPATH)}internal/newobj.h
+dir.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+dir.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+dir.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+dir.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+dir.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+dir.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+dir.$(OBJEXT): {$(VPATH)}internal/symbol.h
+dir.$(OBJEXT): {$(VPATH)}internal/value.h
+dir.$(OBJEXT): {$(VPATH)}internal/value_type.h
+dir.$(OBJEXT): {$(VPATH)}internal/variable.h
+dir.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+dir.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+dir.$(OBJEXT): {$(VPATH)}io.h
+dir.$(OBJEXT): {$(VPATH)}method.h
+dir.$(OBJEXT): {$(VPATH)}missing.h
+dir.$(OBJEXT): {$(VPATH)}node.h
+dir.$(OBJEXT): {$(VPATH)}onigmo.h
+dir.$(OBJEXT): {$(VPATH)}oniguruma.h
+dir.$(OBJEXT): {$(VPATH)}ruby_assert.h
+dir.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+dir.$(OBJEXT): {$(VPATH)}rubyparser.h
+dir.$(OBJEXT): {$(VPATH)}shape.h
+dir.$(OBJEXT): {$(VPATH)}st.h
+dir.$(OBJEXT): {$(VPATH)}subst.h
+dir.$(OBJEXT): {$(VPATH)}thread.h
+dir.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+dir.$(OBJEXT): {$(VPATH)}thread_native.h
+dir.$(OBJEXT): {$(VPATH)}util.h
+dir.$(OBJEXT): {$(VPATH)}vm_core.h
+dir.$(OBJEXT): {$(VPATH)}vm_opts.h
+dln.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+dln.$(OBJEXT): $(top_srcdir)/internal/box.h
+dln.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+dln.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+dln.$(OBJEXT): {$(VPATH)}assert.h
+dln.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+dln.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+dln.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+dln.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+dln.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+dln.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+dln.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+dln.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+dln.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+dln.$(OBJEXT): {$(VPATH)}config.h
+dln.$(OBJEXT): {$(VPATH)}defines.h
+dln.$(OBJEXT): {$(VPATH)}dln.c
+dln.$(OBJEXT): {$(VPATH)}dln.h
+dln.$(OBJEXT): {$(VPATH)}intern.h
+dln.$(OBJEXT): {$(VPATH)}internal.h
+dln.$(OBJEXT): {$(VPATH)}internal/abi.h
+dln.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+dln.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+dln.$(OBJEXT): {$(VPATH)}internal/assume.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+dln.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+dln.$(OBJEXT): {$(VPATH)}internal/cast.h
+dln.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+dln.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+dln.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+dln.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+dln.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+dln.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+dln.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+dln.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+dln.$(OBJEXT): {$(VPATH)}internal/config.h
+dln.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+dln.$(OBJEXT): {$(VPATH)}internal/core.h
+dln.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+dln.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+dln.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+dln.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+dln.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+dln.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+dln.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+dln.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+dln.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+dln.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+dln.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+dln.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+dln.$(OBJEXT): {$(VPATH)}internal/ctype.h
+dln.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+dln.$(OBJEXT): {$(VPATH)}internal/dosish.h
+dln.$(OBJEXT): {$(VPATH)}internal/error.h
+dln.$(OBJEXT): {$(VPATH)}internal/eval.h
+dln.$(OBJEXT): {$(VPATH)}internal/event.h
+dln.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+dln.$(OBJEXT): {$(VPATH)}internal/gc.h
+dln.$(OBJEXT): {$(VPATH)}internal/glob.h
+dln.$(OBJEXT): {$(VPATH)}internal/globals.h
+dln.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+dln.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+dln.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+dln.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+dln.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+dln.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+dln.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+dln.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+dln.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+dln.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+dln.$(OBJEXT): {$(VPATH)}internal/iterator.h
+dln.$(OBJEXT): {$(VPATH)}internal/memory.h
+dln.$(OBJEXT): {$(VPATH)}internal/method.h
+dln.$(OBJEXT): {$(VPATH)}internal/module.h
+dln.$(OBJEXT): {$(VPATH)}internal/newobj.h
+dln.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+dln.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+dln.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+dln.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+dln.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+dln.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+dln.$(OBJEXT): {$(VPATH)}internal/symbol.h
+dln.$(OBJEXT): {$(VPATH)}internal/value.h
+dln.$(OBJEXT): {$(VPATH)}internal/value_type.h
+dln.$(OBJEXT): {$(VPATH)}internal/variable.h
+dln.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+dln.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+dln.$(OBJEXT): {$(VPATH)}missing.h
+dln.$(OBJEXT): {$(VPATH)}st.h
+dln.$(OBJEXT): {$(VPATH)}subst.h
+dln_find.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+dln_find.$(OBJEXT): {$(VPATH)}assert.h
+dln_find.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+dln_find.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+dln_find.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+dln_find.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+dln_find.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+dln_find.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+dln_find.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+dln_find.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+dln_find.$(OBJEXT): {$(VPATH)}config.h
+dln_find.$(OBJEXT): {$(VPATH)}defines.h
+dln_find.$(OBJEXT): {$(VPATH)}dln.h
+dln_find.$(OBJEXT): {$(VPATH)}dln_find.c
+dln_find.$(OBJEXT): {$(VPATH)}intern.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/abi.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/assume.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/cast.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/config.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/ctype.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/dosish.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/error.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/eval.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/event.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/gc.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/glob.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/globals.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/iterator.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/memory.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/method.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/module.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/newobj.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/symbol.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/value.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/value_type.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/variable.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+dln_find.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+dln_find.$(OBJEXT): {$(VPATH)}missing.h
+dln_find.$(OBJEXT): {$(VPATH)}st.h
+dln_find.$(OBJEXT): {$(VPATH)}subst.h
+dmydln.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+dmydln.$(OBJEXT): {$(VPATH)}assert.h
+dmydln.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+dmydln.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+dmydln.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+dmydln.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+dmydln.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+dmydln.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+dmydln.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+dmydln.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+dmydln.$(OBJEXT): {$(VPATH)}config.h
+dmydln.$(OBJEXT): {$(VPATH)}defines.h
+dmydln.$(OBJEXT): {$(VPATH)}dmydln.c
+dmydln.$(OBJEXT): {$(VPATH)}intern.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/abi.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/assume.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/cast.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/config.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/ctype.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/dosish.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/error.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/eval.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/event.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/gc.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/glob.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/globals.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/iterator.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/memory.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/method.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/module.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/newobj.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/symbol.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/value.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/value_type.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/variable.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+dmydln.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+dmydln.$(OBJEXT): {$(VPATH)}missing.h
+dmydln.$(OBJEXT): {$(VPATH)}st.h
+dmydln.$(OBJEXT): {$(VPATH)}subst.h
+dmyenc.$(OBJEXT): {$(VPATH)}dmyenc.c
+dmyext.$(OBJEXT): {$(VPATH)}dmyext.c
+enc/ascii.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+enc/ascii.$(OBJEXT): {$(VPATH)}assert.h
+enc/ascii.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+enc/ascii.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+enc/ascii.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+enc/ascii.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+enc/ascii.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+enc/ascii.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+enc/ascii.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+enc/ascii.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+enc/ascii.$(OBJEXT): {$(VPATH)}config.h
+enc/ascii.$(OBJEXT): {$(VPATH)}defines.h
+enc/ascii.$(OBJEXT): {$(VPATH)}enc/ascii.c
+enc/ascii.$(OBJEXT): {$(VPATH)}encindex.h
+enc/ascii.$(OBJEXT): {$(VPATH)}encoding.h
+enc/ascii.$(OBJEXT): {$(VPATH)}intern.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/assume.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/cast.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/config.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/ctype.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/dosish.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/error.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/eval.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/event.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/gc.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/glob.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/globals.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/iterator.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/memory.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/method.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/module.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/newobj.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/symbol.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/value.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/value_type.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/variable.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+enc/ascii.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+enc/ascii.$(OBJEXT): {$(VPATH)}missing.h
+enc/ascii.$(OBJEXT): {$(VPATH)}onigmo.h
+enc/ascii.$(OBJEXT): {$(VPATH)}oniguruma.h
+enc/ascii.$(OBJEXT): {$(VPATH)}regenc.h
+enc/ascii.$(OBJEXT): {$(VPATH)}st.h
+enc/ascii.$(OBJEXT): {$(VPATH)}subst.h
+enc/trans/newline.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}assert.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}config.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}defines.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}enc/trans/newline.c
+enc/trans/newline.$(OBJEXT): {$(VPATH)}intern.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/assume.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/cast.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/config.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/ctype.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/dosish.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/error.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/eval.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/event.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/gc.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/glob.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/globals.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/iterator.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/memory.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/method.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/module.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/newobj.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/symbol.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/value.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/value_type.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/variable.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}missing.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}st.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}subst.h
+enc/trans/newline.$(OBJEXT): {$(VPATH)}transcode_data.h
+enc/unicode.$(OBJEXT): $(UNICODE_HDR_DIR)/casefold.h
+enc/unicode.$(OBJEXT): $(UNICODE_HDR_DIR)/name2ctype.h
+enc/unicode.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+enc/unicode.$(OBJEXT): {$(VPATH)}assert.h
+enc/unicode.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+enc/unicode.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+enc/unicode.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+enc/unicode.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+enc/unicode.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+enc/unicode.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+enc/unicode.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+enc/unicode.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+enc/unicode.$(OBJEXT): {$(VPATH)}config.h
+enc/unicode.$(OBJEXT): {$(VPATH)}defines.h
+enc/unicode.$(OBJEXT): {$(VPATH)}enc/unicode.c
+enc/unicode.$(OBJEXT): {$(VPATH)}intern.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/assume.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/cast.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/config.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/ctype.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/dosish.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/error.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/eval.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/event.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/gc.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/glob.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/globals.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/iterator.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/memory.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/method.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/module.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/newobj.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/symbol.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/value.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/value_type.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/variable.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+enc/unicode.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+enc/unicode.$(OBJEXT): {$(VPATH)}missing.h
+enc/unicode.$(OBJEXT): {$(VPATH)}onigmo.h
+enc/unicode.$(OBJEXT): {$(VPATH)}regenc.h
+enc/unicode.$(OBJEXT): {$(VPATH)}regint.h
+enc/unicode.$(OBJEXT): {$(VPATH)}st.h
+enc/unicode.$(OBJEXT): {$(VPATH)}subst.h
+enc/us_ascii.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}assert.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}config.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}defines.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}enc/us_ascii.c
+enc/us_ascii.$(OBJEXT): {$(VPATH)}encindex.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}encoding.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}intern.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/assume.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/cast.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/config.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/ctype.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/dosish.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/error.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/eval.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/event.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/gc.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/glob.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/globals.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/iterator.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/memory.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/method.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/module.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/newobj.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/symbol.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/value.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/value_type.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/variable.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}missing.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}onigmo.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}oniguruma.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}regenc.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}st.h
+enc/us_ascii.$(OBJEXT): {$(VPATH)}subst.h
+enc/utf_8.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}assert.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}config.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}defines.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}enc/utf_8.c
+enc/utf_8.$(OBJEXT): {$(VPATH)}encindex.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}encoding.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}intern.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/assume.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/cast.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/config.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/ctype.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/dosish.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/error.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/eval.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/event.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/gc.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/glob.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/globals.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/iterator.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/memory.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/method.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/module.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/newobj.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/symbol.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/value.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/value_type.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/variable.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}missing.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}onigmo.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}oniguruma.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}regenc.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}st.h
+enc/utf_8.$(OBJEXT): {$(VPATH)}subst.h
+encoding.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+encoding.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+encoding.$(OBJEXT): $(CCAN_DIR)/list/list.h
+encoding.$(OBJEXT): $(CCAN_DIR)/str/str.h
+encoding.$(OBJEXT): $(hdrdir)/ruby.h
+encoding.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+encoding.$(OBJEXT): $(hdrdir)/ruby/version.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/array.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/class.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/enc.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/encoding.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/error.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/gc.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/inits.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/load.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/object.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/serial.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/string.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/variable.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/vm.h
+encoding.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+encoding.$(OBJEXT): {$(VPATH)}assert.h
+encoding.$(OBJEXT): {$(VPATH)}atomic.h
+encoding.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+encoding.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+encoding.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+encoding.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+encoding.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+encoding.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+encoding.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+encoding.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+encoding.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+encoding.$(OBJEXT): {$(VPATH)}config.h
+encoding.$(OBJEXT): {$(VPATH)}constant.h
+encoding.$(OBJEXT): {$(VPATH)}debug_counter.h
+encoding.$(OBJEXT): {$(VPATH)}defines.h
+encoding.$(OBJEXT): {$(VPATH)}encindex.h
+encoding.$(OBJEXT): {$(VPATH)}encoding.c
+encoding.$(OBJEXT): {$(VPATH)}encoding.h
+encoding.$(OBJEXT): {$(VPATH)}id.h
+encoding.$(OBJEXT): {$(VPATH)}id_table.h
+encoding.$(OBJEXT): {$(VPATH)}intern.h
+encoding.$(OBJEXT): {$(VPATH)}internal.h
+encoding.$(OBJEXT): {$(VPATH)}internal/abi.h
+encoding.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+encoding.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+encoding.$(OBJEXT): {$(VPATH)}internal/assume.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+encoding.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+encoding.$(OBJEXT): {$(VPATH)}internal/cast.h
+encoding.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+encoding.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+encoding.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+encoding.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+encoding.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+encoding.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+encoding.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+encoding.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+encoding.$(OBJEXT): {$(VPATH)}internal/config.h
+encoding.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+encoding.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+encoding.$(OBJEXT): {$(VPATH)}internal/ctype.h
+encoding.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+encoding.$(OBJEXT): {$(VPATH)}internal/dosish.h
+encoding.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+encoding.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+encoding.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+encoding.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+encoding.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+encoding.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+encoding.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+encoding.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+encoding.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+encoding.$(OBJEXT): {$(VPATH)}internal/error.h
+encoding.$(OBJEXT): {$(VPATH)}internal/eval.h
+encoding.$(OBJEXT): {$(VPATH)}internal/event.h
+encoding.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+encoding.$(OBJEXT): {$(VPATH)}internal/gc.h
+encoding.$(OBJEXT): {$(VPATH)}internal/glob.h
+encoding.$(OBJEXT): {$(VPATH)}internal/globals.h
+encoding.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+encoding.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+encoding.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+encoding.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+encoding.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+encoding.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+encoding.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+encoding.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+encoding.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+encoding.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+encoding.$(OBJEXT): {$(VPATH)}internal/iterator.h
+encoding.$(OBJEXT): {$(VPATH)}internal/memory.h
+encoding.$(OBJEXT): {$(VPATH)}internal/method.h
+encoding.$(OBJEXT): {$(VPATH)}internal/module.h
+encoding.$(OBJEXT): {$(VPATH)}internal/newobj.h
+encoding.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+encoding.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+encoding.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+encoding.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+encoding.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+encoding.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+encoding.$(OBJEXT): {$(VPATH)}internal/symbol.h
+encoding.$(OBJEXT): {$(VPATH)}internal/value.h
+encoding.$(OBJEXT): {$(VPATH)}internal/value_type.h
+encoding.$(OBJEXT): {$(VPATH)}internal/variable.h
+encoding.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+encoding.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+encoding.$(OBJEXT): {$(VPATH)}method.h
+encoding.$(OBJEXT): {$(VPATH)}missing.h
+encoding.$(OBJEXT): {$(VPATH)}node.h
+encoding.$(OBJEXT): {$(VPATH)}onigmo.h
+encoding.$(OBJEXT): {$(VPATH)}oniguruma.h
+encoding.$(OBJEXT): {$(VPATH)}ractor.h
+encoding.$(OBJEXT): {$(VPATH)}regenc.h
+encoding.$(OBJEXT): {$(VPATH)}ruby_assert.h
+encoding.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+encoding.$(OBJEXT): {$(VPATH)}rubyparser.h
+encoding.$(OBJEXT): {$(VPATH)}shape.h
+encoding.$(OBJEXT): {$(VPATH)}st.h
+encoding.$(OBJEXT): {$(VPATH)}subst.h
+encoding.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+encoding.$(OBJEXT): {$(VPATH)}thread_native.h
+encoding.$(OBJEXT): {$(VPATH)}util.h
+encoding.$(OBJEXT): {$(VPATH)}vm_core.h
+encoding.$(OBJEXT): {$(VPATH)}vm_debug.h
+encoding.$(OBJEXT): {$(VPATH)}vm_opts.h
+encoding.$(OBJEXT): {$(VPATH)}vm_sync.h
+enum.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+enum.$(OBJEXT): $(top_srcdir)/internal/array.h
+enum.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+enum.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+enum.$(OBJEXT): $(top_srcdir)/internal/bits.h
+enum.$(OBJEXT): $(top_srcdir)/internal/class.h
+enum.$(OBJEXT): $(top_srcdir)/internal/compar.h
+enum.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+enum.$(OBJEXT): $(top_srcdir)/internal/enum.h
+enum.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+enum.$(OBJEXT): $(top_srcdir)/internal/gc.h
+enum.$(OBJEXT): $(top_srcdir)/internal/hash.h
+enum.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+enum.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+enum.$(OBJEXT): $(top_srcdir)/internal/object.h
+enum.$(OBJEXT): $(top_srcdir)/internal/proc.h
+enum.$(OBJEXT): $(top_srcdir)/internal/rational.h
+enum.$(OBJEXT): $(top_srcdir)/internal/re.h
+enum.$(OBJEXT): $(top_srcdir)/internal/serial.h
+enum.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+enum.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+enum.$(OBJEXT): $(top_srcdir)/internal/variable.h
+enum.$(OBJEXT): $(top_srcdir)/internal/vm.h
+enum.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+enum.$(OBJEXT): {$(VPATH)}assert.h
+enum.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+enum.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+enum.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+enum.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+enum.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+enum.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+enum.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+enum.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+enum.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+enum.$(OBJEXT): {$(VPATH)}config.h
+enum.$(OBJEXT): {$(VPATH)}constant.h
+enum.$(OBJEXT): {$(VPATH)}defines.h
+enum.$(OBJEXT): {$(VPATH)}encoding.h
+enum.$(OBJEXT): {$(VPATH)}enum.c
+enum.$(OBJEXT): {$(VPATH)}id.h
+enum.$(OBJEXT): {$(VPATH)}id_table.h
+enum.$(OBJEXT): {$(VPATH)}intern.h
+enum.$(OBJEXT): {$(VPATH)}internal.h
+enum.$(OBJEXT): {$(VPATH)}internal/abi.h
+enum.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+enum.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+enum.$(OBJEXT): {$(VPATH)}internal/assume.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+enum.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+enum.$(OBJEXT): {$(VPATH)}internal/cast.h
+enum.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+enum.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+enum.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+enum.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+enum.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+enum.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+enum.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+enum.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+enum.$(OBJEXT): {$(VPATH)}internal/config.h
+enum.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+enum.$(OBJEXT): {$(VPATH)}internal/core.h
+enum.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+enum.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+enum.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+enum.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+enum.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+enum.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+enum.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+enum.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+enum.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+enum.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+enum.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+enum.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+enum.$(OBJEXT): {$(VPATH)}internal/ctype.h
+enum.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+enum.$(OBJEXT): {$(VPATH)}internal/dosish.h
+enum.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+enum.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+enum.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+enum.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+enum.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+enum.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+enum.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+enum.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+enum.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+enum.$(OBJEXT): {$(VPATH)}internal/error.h
+enum.$(OBJEXT): {$(VPATH)}internal/eval.h
+enum.$(OBJEXT): {$(VPATH)}internal/event.h
+enum.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+enum.$(OBJEXT): {$(VPATH)}internal/gc.h
+enum.$(OBJEXT): {$(VPATH)}internal/glob.h
+enum.$(OBJEXT): {$(VPATH)}internal/globals.h
+enum.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+enum.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+enum.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+enum.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+enum.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+enum.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+enum.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+enum.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+enum.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+enum.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+enum.$(OBJEXT): {$(VPATH)}internal/iterator.h
+enum.$(OBJEXT): {$(VPATH)}internal/memory.h
+enum.$(OBJEXT): {$(VPATH)}internal/method.h
+enum.$(OBJEXT): {$(VPATH)}internal/module.h
+enum.$(OBJEXT): {$(VPATH)}internal/newobj.h
+enum.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+enum.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+enum.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+enum.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+enum.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+enum.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+enum.$(OBJEXT): {$(VPATH)}internal/symbol.h
+enum.$(OBJEXT): {$(VPATH)}internal/value.h
+enum.$(OBJEXT): {$(VPATH)}internal/value_type.h
+enum.$(OBJEXT): {$(VPATH)}internal/variable.h
+enum.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+enum.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+enum.$(OBJEXT): {$(VPATH)}missing.h
+enum.$(OBJEXT): {$(VPATH)}onigmo.h
+enum.$(OBJEXT): {$(VPATH)}oniguruma.h
+enum.$(OBJEXT): {$(VPATH)}ruby_assert.h
+enum.$(OBJEXT): {$(VPATH)}shape.h
+enum.$(OBJEXT): {$(VPATH)}st.h
+enum.$(OBJEXT): {$(VPATH)}subst.h
+enum.$(OBJEXT): {$(VPATH)}symbol.h
+enum.$(OBJEXT): {$(VPATH)}util.h
+enumerator.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+enumerator.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+enumerator.$(OBJEXT): $(CCAN_DIR)/list/list.h
+enumerator.$(OBJEXT): $(CCAN_DIR)/str/str.h
+enumerator.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+enumerator.$(OBJEXT): $(hdrdir)/ruby/version.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/array.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/bits.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/box.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/class.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/enumerator.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/error.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/gc.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/hash.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/range.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/rational.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/serial.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/string.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/struct.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/variable.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/vm.h
+enumerator.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+enumerator.$(OBJEXT): {$(VPATH)}assert.h
+enumerator.$(OBJEXT): {$(VPATH)}atomic.h
+enumerator.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+enumerator.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+enumerator.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+enumerator.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+enumerator.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+enumerator.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+enumerator.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+enumerator.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+enumerator.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+enumerator.$(OBJEXT): {$(VPATH)}config.h
+enumerator.$(OBJEXT): {$(VPATH)}constant.h
+enumerator.$(OBJEXT): {$(VPATH)}debug_counter.h
+enumerator.$(OBJEXT): {$(VPATH)}defines.h
+enumerator.$(OBJEXT): {$(VPATH)}encindex.h
+enumerator.$(OBJEXT): {$(VPATH)}encoding.h
+enumerator.$(OBJEXT): {$(VPATH)}enumerator.c
+enumerator.$(OBJEXT): {$(VPATH)}id.h
+enumerator.$(OBJEXT): {$(VPATH)}id_table.h
+enumerator.$(OBJEXT): {$(VPATH)}intern.h
+enumerator.$(OBJEXT): {$(VPATH)}internal.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/abi.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/assume.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/cast.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/config.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/ctype.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/dosish.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/error.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/eval.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/event.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/gc.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/glob.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/globals.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/iterator.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/memory.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/method.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/module.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/newobj.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/symbol.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/value.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/value_type.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/variable.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+enumerator.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+enumerator.$(OBJEXT): {$(VPATH)}method.h
+enumerator.$(OBJEXT): {$(VPATH)}missing.h
+enumerator.$(OBJEXT): {$(VPATH)}node.h
+enumerator.$(OBJEXT): {$(VPATH)}onigmo.h
+enumerator.$(OBJEXT): {$(VPATH)}oniguruma.h
+enumerator.$(OBJEXT): {$(VPATH)}ruby_assert.h
+enumerator.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+enumerator.$(OBJEXT): {$(VPATH)}rubyparser.h
+enumerator.$(OBJEXT): {$(VPATH)}shape.h
+enumerator.$(OBJEXT): {$(VPATH)}st.h
+enumerator.$(OBJEXT): {$(VPATH)}subst.h
+enumerator.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+enumerator.$(OBJEXT): {$(VPATH)}thread_native.h
+enumerator.$(OBJEXT): {$(VPATH)}vm_core.h
+enumerator.$(OBJEXT): {$(VPATH)}vm_debug.h
+enumerator.$(OBJEXT): {$(VPATH)}vm_opts.h
+enumerator.$(OBJEXT): {$(VPATH)}vm_sync.h
+error.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+error.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+error.$(OBJEXT): $(CCAN_DIR)/list/list.h
+error.$(OBJEXT): $(CCAN_DIR)/str/str.h
+error.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+error.$(OBJEXT): $(hdrdir)/ruby/version.h
+error.$(OBJEXT): $(top_srcdir)/internal/array.h
+error.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+error.$(OBJEXT): $(top_srcdir)/internal/box.h
+error.$(OBJEXT): $(top_srcdir)/internal/class.h
+error.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+error.$(OBJEXT): $(top_srcdir)/internal/error.h
+error.$(OBJEXT): $(top_srcdir)/internal/eval.h
+error.$(OBJEXT): $(top_srcdir)/internal/gc.h
+error.$(OBJEXT): $(top_srcdir)/internal/hash.h
+error.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+error.$(OBJEXT): $(top_srcdir)/internal/io.h
+error.$(OBJEXT): $(top_srcdir)/internal/load.h
+error.$(OBJEXT): $(top_srcdir)/internal/object.h
+error.$(OBJEXT): $(top_srcdir)/internal/process.h
+error.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+error.$(OBJEXT): $(top_srcdir)/internal/serial.h
+error.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+error.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+error.$(OBJEXT): $(top_srcdir)/internal/string.h
+error.$(OBJEXT): $(top_srcdir)/internal/struct.h
+error.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+error.$(OBJEXT): $(top_srcdir)/internal/thread.h
+error.$(OBJEXT): $(top_srcdir)/internal/variable.h
+error.$(OBJEXT): $(top_srcdir)/internal/vm.h
+error.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+error.$(OBJEXT): {$(VPATH)}assert.h
+error.$(OBJEXT): {$(VPATH)}atomic.h
+error.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+error.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+error.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+error.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+error.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+error.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+error.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+error.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+error.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+error.$(OBJEXT): {$(VPATH)}builtin.h
+error.$(OBJEXT): {$(VPATH)}config.h
+error.$(OBJEXT): {$(VPATH)}constant.h
+error.$(OBJEXT): {$(VPATH)}debug_counter.h
+error.$(OBJEXT): {$(VPATH)}defines.h
+error.$(OBJEXT): {$(VPATH)}encindex.h
+error.$(OBJEXT): {$(VPATH)}encoding.h
+error.$(OBJEXT): {$(VPATH)}error.c
+error.$(OBJEXT): {$(VPATH)}id.h
+error.$(OBJEXT): {$(VPATH)}id_table.h
+error.$(OBJEXT): {$(VPATH)}intern.h
+error.$(OBJEXT): {$(VPATH)}internal.h
+error.$(OBJEXT): {$(VPATH)}internal/abi.h
+error.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+error.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+error.$(OBJEXT): {$(VPATH)}internal/assume.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+error.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+error.$(OBJEXT): {$(VPATH)}internal/cast.h
+error.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+error.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+error.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+error.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+error.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+error.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+error.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+error.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+error.$(OBJEXT): {$(VPATH)}internal/config.h
+error.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+error.$(OBJEXT): {$(VPATH)}internal/core.h
+error.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+error.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+error.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+error.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+error.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+error.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+error.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+error.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+error.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+error.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+error.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+error.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+error.$(OBJEXT): {$(VPATH)}internal/ctype.h
+error.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+error.$(OBJEXT): {$(VPATH)}internal/dosish.h
+error.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+error.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+error.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+error.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+error.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+error.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+error.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+error.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+error.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+error.$(OBJEXT): {$(VPATH)}internal/error.h
+error.$(OBJEXT): {$(VPATH)}internal/eval.h
+error.$(OBJEXT): {$(VPATH)}internal/event.h
+error.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+error.$(OBJEXT): {$(VPATH)}internal/gc.h
+error.$(OBJEXT): {$(VPATH)}internal/glob.h
+error.$(OBJEXT): {$(VPATH)}internal/globals.h
+error.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+error.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+error.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+error.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+error.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+error.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+error.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+error.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+error.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+error.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+error.$(OBJEXT): {$(VPATH)}internal/iterator.h
+error.$(OBJEXT): {$(VPATH)}internal/memory.h
+error.$(OBJEXT): {$(VPATH)}internal/method.h
+error.$(OBJEXT): {$(VPATH)}internal/module.h
+error.$(OBJEXT): {$(VPATH)}internal/newobj.h
+error.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+error.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+error.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+error.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+error.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+error.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+error.$(OBJEXT): {$(VPATH)}internal/symbol.h
+error.$(OBJEXT): {$(VPATH)}internal/value.h
+error.$(OBJEXT): {$(VPATH)}internal/value_type.h
+error.$(OBJEXT): {$(VPATH)}internal/variable.h
+error.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+error.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+error.$(OBJEXT): {$(VPATH)}io.h
+error.$(OBJEXT): {$(VPATH)}known_errors.inc
+error.$(OBJEXT): {$(VPATH)}method.h
+error.$(OBJEXT): {$(VPATH)}missing.h
+error.$(OBJEXT): {$(VPATH)}node.h
+error.$(OBJEXT): {$(VPATH)}onigmo.h
+error.$(OBJEXT): {$(VPATH)}oniguruma.h
+error.$(OBJEXT): {$(VPATH)}ruby_assert.h
+error.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+error.$(OBJEXT): {$(VPATH)}rubyparser.h
+error.$(OBJEXT): {$(VPATH)}shape.h
+error.$(OBJEXT): {$(VPATH)}st.h
+error.$(OBJEXT): {$(VPATH)}subst.h
+error.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+error.$(OBJEXT): {$(VPATH)}thread_native.h
+error.$(OBJEXT): {$(VPATH)}util.h
+error.$(OBJEXT): {$(VPATH)}vm_core.h
+error.$(OBJEXT): {$(VPATH)}vm_debug.h
+error.$(OBJEXT): {$(VPATH)}vm_opts.h
+error.$(OBJEXT): {$(VPATH)}vm_sync.h
+error.$(OBJEXT): {$(VPATH)}warning.rbinc
+error.$(OBJEXT): {$(VPATH)}yjit.h
+eval.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+eval.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+eval.$(OBJEXT): $(CCAN_DIR)/list/list.h
+eval.$(OBJEXT): $(CCAN_DIR)/str/str.h
+eval.$(OBJEXT): $(hdrdir)/ruby.h
+eval.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+eval.$(OBJEXT): $(hdrdir)/ruby/version.h
+eval.$(OBJEXT): $(top_srcdir)/internal/array.h
+eval.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+eval.$(OBJEXT): $(top_srcdir)/internal/box.h
+eval.$(OBJEXT): $(top_srcdir)/internal/class.h
+eval.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+eval.$(OBJEXT): $(top_srcdir)/internal/cont.h
+eval.$(OBJEXT): $(top_srcdir)/internal/error.h
+eval.$(OBJEXT): $(top_srcdir)/internal/eval.h
+eval.$(OBJEXT): $(top_srcdir)/internal/gc.h
+eval.$(OBJEXT): $(top_srcdir)/internal/hash.h
+eval.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+eval.$(OBJEXT): $(top_srcdir)/internal/inits.h
+eval.$(OBJEXT): $(top_srcdir)/internal/io.h
+eval.$(OBJEXT): $(top_srcdir)/internal/object.h
+eval.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+eval.$(OBJEXT): $(top_srcdir)/internal/serial.h
+eval.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+eval.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+eval.$(OBJEXT): $(top_srcdir)/internal/string.h
+eval.$(OBJEXT): $(top_srcdir)/internal/struct.h
+eval.$(OBJEXT): $(top_srcdir)/internal/thread.h
+eval.$(OBJEXT): $(top_srcdir)/internal/variable.h
+eval.$(OBJEXT): $(top_srcdir)/internal/vm.h
+eval.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+eval.$(OBJEXT): $(top_srcdir)/prism/ast.h
+eval.$(OBJEXT): $(top_srcdir)/prism/defines.h
+eval.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+eval.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+eval.$(OBJEXT): $(top_srcdir)/prism/node.h
+eval.$(OBJEXT): $(top_srcdir)/prism/options.h
+eval.$(OBJEXT): $(top_srcdir)/prism/pack.h
+eval.$(OBJEXT): $(top_srcdir)/prism/parser.h
+eval.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+eval.$(OBJEXT): $(top_srcdir)/prism/prism.h
+eval.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+eval.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+eval.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+eval.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+eval.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+eval.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+eval.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+eval.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+eval.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+eval.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+eval.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+eval.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+eval.$(OBJEXT): $(top_srcdir)/prism/version.h
+eval.$(OBJEXT): {$(VPATH)}assert.h
+eval.$(OBJEXT): {$(VPATH)}atomic.h
+eval.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+eval.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+eval.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+eval.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+eval.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+eval.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+eval.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+eval.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+eval.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+eval.$(OBJEXT): {$(VPATH)}config.h
+eval.$(OBJEXT): {$(VPATH)}constant.h
+eval.$(OBJEXT): {$(VPATH)}debug_counter.h
+eval.$(OBJEXT): {$(VPATH)}defines.h
+eval.$(OBJEXT): {$(VPATH)}encindex.h
+eval.$(OBJEXT): {$(VPATH)}encoding.h
+eval.$(OBJEXT): {$(VPATH)}eval.c
+eval.$(OBJEXT): {$(VPATH)}eval_error.c
+eval.$(OBJEXT): {$(VPATH)}eval_intern.h
+eval.$(OBJEXT): {$(VPATH)}eval_jump.c
+eval.$(OBJEXT): {$(VPATH)}fiber/scheduler.h
+eval.$(OBJEXT): {$(VPATH)}id.h
+eval.$(OBJEXT): {$(VPATH)}id_table.h
+eval.$(OBJEXT): {$(VPATH)}intern.h
+eval.$(OBJEXT): {$(VPATH)}internal.h
+eval.$(OBJEXT): {$(VPATH)}internal/abi.h
+eval.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+eval.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+eval.$(OBJEXT): {$(VPATH)}internal/assume.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+eval.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+eval.$(OBJEXT): {$(VPATH)}internal/cast.h
+eval.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+eval.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+eval.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+eval.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+eval.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+eval.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+eval.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+eval.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+eval.$(OBJEXT): {$(VPATH)}internal/config.h
+eval.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+eval.$(OBJEXT): {$(VPATH)}internal/core.h
+eval.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+eval.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+eval.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+eval.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+eval.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+eval.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+eval.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+eval.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+eval.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+eval.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+eval.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+eval.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+eval.$(OBJEXT): {$(VPATH)}internal/ctype.h
+eval.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+eval.$(OBJEXT): {$(VPATH)}internal/dosish.h
+eval.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+eval.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+eval.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+eval.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+eval.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+eval.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+eval.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+eval.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+eval.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+eval.$(OBJEXT): {$(VPATH)}internal/error.h
+eval.$(OBJEXT): {$(VPATH)}internal/eval.h
+eval.$(OBJEXT): {$(VPATH)}internal/event.h
+eval.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+eval.$(OBJEXT): {$(VPATH)}internal/gc.h
+eval.$(OBJEXT): {$(VPATH)}internal/glob.h
+eval.$(OBJEXT): {$(VPATH)}internal/globals.h
+eval.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+eval.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+eval.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+eval.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+eval.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+eval.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+eval.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+eval.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+eval.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+eval.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+eval.$(OBJEXT): {$(VPATH)}internal/iterator.h
+eval.$(OBJEXT): {$(VPATH)}internal/memory.h
+eval.$(OBJEXT): {$(VPATH)}internal/method.h
+eval.$(OBJEXT): {$(VPATH)}internal/module.h
+eval.$(OBJEXT): {$(VPATH)}internal/newobj.h
+eval.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+eval.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+eval.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+eval.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+eval.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+eval.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+eval.$(OBJEXT): {$(VPATH)}internal/symbol.h
+eval.$(OBJEXT): {$(VPATH)}internal/value.h
+eval.$(OBJEXT): {$(VPATH)}internal/value_type.h
+eval.$(OBJEXT): {$(VPATH)}internal/variable.h
+eval.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+eval.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+eval.$(OBJEXT): {$(VPATH)}io.h
+eval.$(OBJEXT): {$(VPATH)}iseq.h
+eval.$(OBJEXT): {$(VPATH)}method.h
+eval.$(OBJEXT): {$(VPATH)}missing.h
+eval.$(OBJEXT): {$(VPATH)}node.h
+eval.$(OBJEXT): {$(VPATH)}onigmo.h
+eval.$(OBJEXT): {$(VPATH)}oniguruma.h
+eval.$(OBJEXT): {$(VPATH)}prism_compile.h
+eval.$(OBJEXT): {$(VPATH)}probes.dmyh
+eval.$(OBJEXT): {$(VPATH)}probes.h
+eval.$(OBJEXT): {$(VPATH)}probes_helper.h
+eval.$(OBJEXT): {$(VPATH)}ractor.h
+eval.$(OBJEXT): {$(VPATH)}ractor_core.h
+eval.$(OBJEXT): {$(VPATH)}ruby_assert.h
+eval.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+eval.$(OBJEXT): {$(VPATH)}rubyparser.h
+eval.$(OBJEXT): {$(VPATH)}shape.h
+eval.$(OBJEXT): {$(VPATH)}st.h
+eval.$(OBJEXT): {$(VPATH)}subst.h
+eval.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+eval.$(OBJEXT): {$(VPATH)}thread_native.h
+eval.$(OBJEXT): {$(VPATH)}vm.h
+eval.$(OBJEXT): {$(VPATH)}vm_core.h
+eval.$(OBJEXT): {$(VPATH)}vm_debug.h
+eval.$(OBJEXT): {$(VPATH)}vm_opts.h
+eval.$(OBJEXT): {$(VPATH)}vm_sync.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}config.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}explicit_bzero.c
+explicit_bzero.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}internal/config.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+explicit_bzero.$(OBJEXT): {$(VPATH)}missing.h
+file.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+file.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+file.$(OBJEXT): $(CCAN_DIR)/list/list.h
+file.$(OBJEXT): $(CCAN_DIR)/str/str.h
+file.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+file.$(OBJEXT): $(hdrdir)/ruby/version.h
+file.$(OBJEXT): $(top_srcdir)/internal/array.h
+file.$(OBJEXT): $(top_srcdir)/internal/class.h
+file.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+file.$(OBJEXT): $(top_srcdir)/internal/dir.h
+file.$(OBJEXT): $(top_srcdir)/internal/encoding.h
+file.$(OBJEXT): $(top_srcdir)/internal/error.h
+file.$(OBJEXT): $(top_srcdir)/internal/file.h
+file.$(OBJEXT): $(top_srcdir)/internal/gc.h
+file.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+file.$(OBJEXT): $(top_srcdir)/internal/io.h
+file.$(OBJEXT): $(top_srcdir)/internal/load.h
+file.$(OBJEXT): $(top_srcdir)/internal/object.h
+file.$(OBJEXT): $(top_srcdir)/internal/process.h
+file.$(OBJEXT): $(top_srcdir)/internal/serial.h
+file.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+file.$(OBJEXT): $(top_srcdir)/internal/string.h
+file.$(OBJEXT): $(top_srcdir)/internal/thread.h
+file.$(OBJEXT): $(top_srcdir)/internal/variable.h
+file.$(OBJEXT): $(top_srcdir)/internal/vm.h
+file.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+file.$(OBJEXT): {$(VPATH)}assert.h
+file.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+file.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+file.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+file.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+file.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+file.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+file.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+file.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+file.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+file.$(OBJEXT): {$(VPATH)}config.h
+file.$(OBJEXT): {$(VPATH)}constant.h
+file.$(OBJEXT): {$(VPATH)}defines.h
+file.$(OBJEXT): {$(VPATH)}dln.h
+file.$(OBJEXT): {$(VPATH)}encindex.h
+file.$(OBJEXT): {$(VPATH)}encoding.h
+file.$(OBJEXT): {$(VPATH)}file.c
+file.$(OBJEXT): {$(VPATH)}id.h
+file.$(OBJEXT): {$(VPATH)}id_table.h
+file.$(OBJEXT): {$(VPATH)}intern.h
+file.$(OBJEXT): {$(VPATH)}internal.h
+file.$(OBJEXT): {$(VPATH)}internal/abi.h
+file.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+file.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+file.$(OBJEXT): {$(VPATH)}internal/assume.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/nonstring.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+file.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+file.$(OBJEXT): {$(VPATH)}internal/cast.h
+file.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+file.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+file.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+file.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+file.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+file.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+file.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+file.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+file.$(OBJEXT): {$(VPATH)}internal/config.h
+file.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+file.$(OBJEXT): {$(VPATH)}internal/core.h
+file.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+file.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+file.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+file.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+file.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+file.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+file.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+file.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+file.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+file.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+file.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+file.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+file.$(OBJEXT): {$(VPATH)}internal/ctype.h
+file.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+file.$(OBJEXT): {$(VPATH)}internal/dosish.h
+file.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+file.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+file.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+file.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+file.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+file.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+file.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+file.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+file.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+file.$(OBJEXT): {$(VPATH)}internal/error.h
+file.$(OBJEXT): {$(VPATH)}internal/eval.h
+file.$(OBJEXT): {$(VPATH)}internal/event.h
+file.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+file.$(OBJEXT): {$(VPATH)}internal/gc.h
+file.$(OBJEXT): {$(VPATH)}internal/glob.h
+file.$(OBJEXT): {$(VPATH)}internal/globals.h
+file.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+file.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+file.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+file.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+file.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+file.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+file.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+file.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+file.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+file.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+file.$(OBJEXT): {$(VPATH)}internal/iterator.h
+file.$(OBJEXT): {$(VPATH)}internal/memory.h
+file.$(OBJEXT): {$(VPATH)}internal/method.h
+file.$(OBJEXT): {$(VPATH)}internal/module.h
+file.$(OBJEXT): {$(VPATH)}internal/newobj.h
+file.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+file.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+file.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+file.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+file.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+file.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+file.$(OBJEXT): {$(VPATH)}internal/symbol.h
+file.$(OBJEXT): {$(VPATH)}internal/value.h
+file.$(OBJEXT): {$(VPATH)}internal/value_type.h
+file.$(OBJEXT): {$(VPATH)}internal/variable.h
+file.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+file.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+file.$(OBJEXT): {$(VPATH)}io.h
+file.$(OBJEXT): {$(VPATH)}missing.h
+file.$(OBJEXT): {$(VPATH)}onigmo.h
+file.$(OBJEXT): {$(VPATH)}oniguruma.h
+file.$(OBJEXT): {$(VPATH)}shape.h
+file.$(OBJEXT): {$(VPATH)}st.h
+file.$(OBJEXT): {$(VPATH)}subst.h
+file.$(OBJEXT): {$(VPATH)}thread.h
+file.$(OBJEXT): {$(VPATH)}thread_native.h
+file.$(OBJEXT): {$(VPATH)}util.h
+gc.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+gc.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+gc.$(OBJEXT): $(CCAN_DIR)/list/list.h
+gc.$(OBJEXT): $(CCAN_DIR)/str/str.h
+gc.$(OBJEXT): $(hdrdir)/ruby.h
+gc.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+gc.$(OBJEXT): $(hdrdir)/ruby/version.h
+gc.$(OBJEXT): $(top_srcdir)/gc/default/default.c
+gc.$(OBJEXT): $(top_srcdir)/gc/gc.h
+gc.$(OBJEXT): $(top_srcdir)/gc/gc_impl.h
+gc.$(OBJEXT): $(top_srcdir)/internal/array.h
+gc.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+gc.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+gc.$(OBJEXT): $(top_srcdir)/internal/bits.h
+gc.$(OBJEXT): $(top_srcdir)/internal/box.h
+gc.$(OBJEXT): $(top_srcdir)/internal/class.h
+gc.$(OBJEXT): $(top_srcdir)/internal/compile.h
+gc.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+gc.$(OBJEXT): $(top_srcdir)/internal/complex.h
+gc.$(OBJEXT): $(top_srcdir)/internal/concurrent_set.h
+gc.$(OBJEXT): $(top_srcdir)/internal/cont.h
+gc.$(OBJEXT): $(top_srcdir)/internal/error.h
+gc.$(OBJEXT): $(top_srcdir)/internal/eval.h
+gc.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+gc.$(OBJEXT): $(top_srcdir)/internal/gc.h
+gc.$(OBJEXT): $(top_srcdir)/internal/hash.h
+gc.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+gc.$(OBJEXT): $(top_srcdir)/internal/io.h
+gc.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+gc.$(OBJEXT): $(top_srcdir)/internal/object.h
+gc.$(OBJEXT): $(top_srcdir)/internal/proc.h
+gc.$(OBJEXT): $(top_srcdir)/internal/rational.h
+gc.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+gc.$(OBJEXT): $(top_srcdir)/internal/serial.h
+gc.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+gc.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+gc.$(OBJEXT): $(top_srcdir)/internal/string.h
+gc.$(OBJEXT): $(top_srcdir)/internal/struct.h
+gc.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+gc.$(OBJEXT): $(top_srcdir)/internal/thread.h
+gc.$(OBJEXT): $(top_srcdir)/internal/variable.h
+gc.$(OBJEXT): $(top_srcdir)/internal/vm.h
+gc.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+gc.$(OBJEXT): $(top_srcdir)/prism/ast.h
+gc.$(OBJEXT): $(top_srcdir)/prism/defines.h
+gc.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+gc.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+gc.$(OBJEXT): $(top_srcdir)/prism/node.h
+gc.$(OBJEXT): $(top_srcdir)/prism/options.h
+gc.$(OBJEXT): $(top_srcdir)/prism/pack.h
+gc.$(OBJEXT): $(top_srcdir)/prism/parser.h
+gc.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+gc.$(OBJEXT): $(top_srcdir)/prism/prism.h
+gc.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+gc.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+gc.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+gc.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+gc.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+gc.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+gc.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+gc.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+gc.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+gc.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+gc.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+gc.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+gc.$(OBJEXT): $(top_srcdir)/prism/version.h
+gc.$(OBJEXT): {$(VPATH)}assert.h
+gc.$(OBJEXT): {$(VPATH)}atomic.h
+gc.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+gc.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+gc.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+gc.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+gc.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+gc.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+gc.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+gc.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+gc.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+gc.$(OBJEXT): {$(VPATH)}builtin.h
+gc.$(OBJEXT): {$(VPATH)}config.h
+gc.$(OBJEXT): {$(VPATH)}constant.h
+gc.$(OBJEXT): {$(VPATH)}darray.h
+gc.$(OBJEXT): {$(VPATH)}debug.h
+gc.$(OBJEXT): {$(VPATH)}debug_counter.h
+gc.$(OBJEXT): {$(VPATH)}defines.h
+gc.$(OBJEXT): {$(VPATH)}encindex.h
+gc.$(OBJEXT): {$(VPATH)}encoding.h
+gc.$(OBJEXT): {$(VPATH)}eval_intern.h
+gc.$(OBJEXT): {$(VPATH)}gc.c
+gc.$(OBJEXT): {$(VPATH)}gc.rbinc
+gc.$(OBJEXT): {$(VPATH)}id.h
+gc.$(OBJEXT): {$(VPATH)}id_table.h
+gc.$(OBJEXT): {$(VPATH)}intern.h
+gc.$(OBJEXT): {$(VPATH)}internal.h
+gc.$(OBJEXT): {$(VPATH)}internal/abi.h
+gc.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+gc.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+gc.$(OBJEXT): {$(VPATH)}internal/assume.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+gc.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+gc.$(OBJEXT): {$(VPATH)}internal/cast.h
+gc.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+gc.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+gc.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+gc.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+gc.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+gc.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+gc.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+gc.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+gc.$(OBJEXT): {$(VPATH)}internal/config.h
+gc.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+gc.$(OBJEXT): {$(VPATH)}internal/core.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/rmatch.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+gc.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+gc.$(OBJEXT): {$(VPATH)}internal/ctype.h
+gc.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+gc.$(OBJEXT): {$(VPATH)}internal/dosish.h
+gc.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+gc.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+gc.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+gc.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+gc.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+gc.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+gc.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+gc.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+gc.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+gc.$(OBJEXT): {$(VPATH)}internal/error.h
+gc.$(OBJEXT): {$(VPATH)}internal/eval.h
+gc.$(OBJEXT): {$(VPATH)}internal/event.h
+gc.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+gc.$(OBJEXT): {$(VPATH)}internal/gc.h
+gc.$(OBJEXT): {$(VPATH)}internal/glob.h
+gc.$(OBJEXT): {$(VPATH)}internal/globals.h
+gc.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+gc.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+gc.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+gc.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+gc.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+gc.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+gc.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+gc.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+gc.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+gc.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+gc.$(OBJEXT): {$(VPATH)}internal/iterator.h
+gc.$(OBJEXT): {$(VPATH)}internal/memory.h
+gc.$(OBJEXT): {$(VPATH)}internal/method.h
+gc.$(OBJEXT): {$(VPATH)}internal/module.h
+gc.$(OBJEXT): {$(VPATH)}internal/newobj.h
+gc.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+gc.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+gc.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+gc.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+gc.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+gc.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+gc.$(OBJEXT): {$(VPATH)}internal/symbol.h
+gc.$(OBJEXT): {$(VPATH)}internal/value.h
+gc.$(OBJEXT): {$(VPATH)}internal/value_type.h
+gc.$(OBJEXT): {$(VPATH)}internal/variable.h
+gc.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+gc.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+gc.$(OBJEXT): {$(VPATH)}io.h
+gc.$(OBJEXT): {$(VPATH)}iseq.h
+gc.$(OBJEXT): {$(VPATH)}method.h
+gc.$(OBJEXT): {$(VPATH)}missing.h
+gc.$(OBJEXT): {$(VPATH)}node.h
+gc.$(OBJEXT): {$(VPATH)}onigmo.h
+gc.$(OBJEXT): {$(VPATH)}oniguruma.h
+gc.$(OBJEXT): {$(VPATH)}prism_compile.h
+gc.$(OBJEXT): {$(VPATH)}probes.dmyh
+gc.$(OBJEXT): {$(VPATH)}probes.h
+gc.$(OBJEXT): {$(VPATH)}ractor.h
+gc.$(OBJEXT): {$(VPATH)}ractor_core.h
+gc.$(OBJEXT): {$(VPATH)}re.h
+gc.$(OBJEXT): {$(VPATH)}regenc.h
+gc.$(OBJEXT): {$(VPATH)}regex.h
+gc.$(OBJEXT): {$(VPATH)}regint.h
+gc.$(OBJEXT): {$(VPATH)}ruby_assert.h
+gc.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+gc.$(OBJEXT): {$(VPATH)}rubyparser.h
+gc.$(OBJEXT): {$(VPATH)}shape.h
+gc.$(OBJEXT): {$(VPATH)}st.h
+gc.$(OBJEXT): {$(VPATH)}subst.h
+gc.$(OBJEXT): {$(VPATH)}symbol.h
+gc.$(OBJEXT): {$(VPATH)}thread.h
+gc.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+gc.$(OBJEXT): {$(VPATH)}thread_native.h
+gc.$(OBJEXT): {$(VPATH)}util.h
+gc.$(OBJEXT): {$(VPATH)}variable.h
+gc.$(OBJEXT): {$(VPATH)}vm.h
+gc.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+gc.$(OBJEXT): {$(VPATH)}vm_core.h
+gc.$(OBJEXT): {$(VPATH)}vm_debug.h
+gc.$(OBJEXT): {$(VPATH)}vm_opts.h
+gc.$(OBJEXT): {$(VPATH)}vm_sync.h
+gc.$(OBJEXT): {$(VPATH)}yjit.h
+gc.$(OBJEXT): {$(VPATH)}zjit.h
+goruby.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+goruby.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+goruby.$(OBJEXT): $(CCAN_DIR)/list/list.h
+goruby.$(OBJEXT): $(CCAN_DIR)/str/str.h
+goruby.$(OBJEXT): $(hdrdir)/ruby.h
+goruby.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/array.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/bits.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/box.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/complex.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/gc.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/parse.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/rational.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/serial.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/variable.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/vm.h
+goruby.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/ast.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/defines.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/node.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/options.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/pack.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/parser.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/prism.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+goruby.$(OBJEXT): $(top_srcdir)/prism/version.h
+goruby.$(OBJEXT): {$(VPATH)}assert.h
+goruby.$(OBJEXT): {$(VPATH)}atomic.h
+goruby.$(OBJEXT): {$(VPATH)}backward.h
+goruby.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+goruby.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+goruby.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+goruby.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+goruby.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+goruby.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+goruby.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+goruby.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+goruby.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+goruby.$(OBJEXT): {$(VPATH)}config.h
+goruby.$(OBJEXT): {$(VPATH)}constant.h
+goruby.$(OBJEXT): {$(VPATH)}defines.h
+goruby.$(OBJEXT): {$(VPATH)}encoding.h
+goruby.$(OBJEXT): {$(VPATH)}golf_prelude.rbbin
+goruby.$(OBJEXT): {$(VPATH)}goruby.c
+goruby.$(OBJEXT): {$(VPATH)}id.h
+goruby.$(OBJEXT): {$(VPATH)}id_table.h
+goruby.$(OBJEXT): {$(VPATH)}intern.h
+goruby.$(OBJEXT): {$(VPATH)}internal.h
+goruby.$(OBJEXT): {$(VPATH)}internal/abi.h
+goruby.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+goruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+goruby.$(OBJEXT): {$(VPATH)}internal/assume.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+goruby.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+goruby.$(OBJEXT): {$(VPATH)}internal/cast.h
+goruby.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+goruby.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+goruby.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+goruby.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+goruby.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+goruby.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+goruby.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+goruby.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+goruby.$(OBJEXT): {$(VPATH)}internal/config.h
+goruby.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+goruby.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+goruby.$(OBJEXT): {$(VPATH)}internal/ctype.h
+goruby.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+goruby.$(OBJEXT): {$(VPATH)}internal/dosish.h
+goruby.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+goruby.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+goruby.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+goruby.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+goruby.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+goruby.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+goruby.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+goruby.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+goruby.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+goruby.$(OBJEXT): {$(VPATH)}internal/error.h
+goruby.$(OBJEXT): {$(VPATH)}internal/eval.h
+goruby.$(OBJEXT): {$(VPATH)}internal/event.h
+goruby.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+goruby.$(OBJEXT): {$(VPATH)}internal/gc.h
+goruby.$(OBJEXT): {$(VPATH)}internal/glob.h
+goruby.$(OBJEXT): {$(VPATH)}internal/globals.h
+goruby.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+goruby.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+goruby.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+goruby.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+goruby.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+goruby.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+goruby.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+goruby.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+goruby.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+goruby.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+goruby.$(OBJEXT): {$(VPATH)}internal/iterator.h
+goruby.$(OBJEXT): {$(VPATH)}internal/memory.h
+goruby.$(OBJEXT): {$(VPATH)}internal/method.h
+goruby.$(OBJEXT): {$(VPATH)}internal/module.h
+goruby.$(OBJEXT): {$(VPATH)}internal/newobj.h
+goruby.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+goruby.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+goruby.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+goruby.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+goruby.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+goruby.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+goruby.$(OBJEXT): {$(VPATH)}internal/symbol.h
+goruby.$(OBJEXT): {$(VPATH)}internal/value.h
+goruby.$(OBJEXT): {$(VPATH)}internal/value_type.h
+goruby.$(OBJEXT): {$(VPATH)}internal/variable.h
+goruby.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+goruby.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+goruby.$(OBJEXT): {$(VPATH)}iseq.h
+goruby.$(OBJEXT): {$(VPATH)}main.c
+goruby.$(OBJEXT): {$(VPATH)}method.h
+goruby.$(OBJEXT): {$(VPATH)}missing.h
+goruby.$(OBJEXT): {$(VPATH)}node.h
+goruby.$(OBJEXT): {$(VPATH)}onigmo.h
+goruby.$(OBJEXT): {$(VPATH)}oniguruma.h
+goruby.$(OBJEXT): {$(VPATH)}prism_compile.h
+goruby.$(OBJEXT): {$(VPATH)}ruby_assert.h
+goruby.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+goruby.$(OBJEXT): {$(VPATH)}rubyparser.h
+goruby.$(OBJEXT): {$(VPATH)}shape.h
+goruby.$(OBJEXT): {$(VPATH)}st.h
+goruby.$(OBJEXT): {$(VPATH)}subst.h
+goruby.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+goruby.$(OBJEXT): {$(VPATH)}thread_native.h
+goruby.$(OBJEXT): {$(VPATH)}vm_core.h
+goruby.$(OBJEXT): {$(VPATH)}vm_debug.h
+goruby.$(OBJEXT): {$(VPATH)}vm_opts.h
+hash.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+hash.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+hash.$(OBJEXT): $(CCAN_DIR)/list/list.h
+hash.$(OBJEXT): $(CCAN_DIR)/str/str.h
+hash.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+hash.$(OBJEXT): $(hdrdir)/ruby/version.h
+hash.$(OBJEXT): $(top_srcdir)/internal/array.h
+hash.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+hash.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+hash.$(OBJEXT): $(top_srcdir)/internal/bits.h
+hash.$(OBJEXT): $(top_srcdir)/internal/box.h
+hash.$(OBJEXT): $(top_srcdir)/internal/class.h
+hash.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+hash.$(OBJEXT): $(top_srcdir)/internal/cont.h
+hash.$(OBJEXT): $(top_srcdir)/internal/error.h
+hash.$(OBJEXT): $(top_srcdir)/internal/gc.h
+hash.$(OBJEXT): $(top_srcdir)/internal/hash.h
+hash.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+hash.$(OBJEXT): $(top_srcdir)/internal/object.h
+hash.$(OBJEXT): $(top_srcdir)/internal/proc.h
+hash.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+hash.$(OBJEXT): $(top_srcdir)/internal/serial.h
+hash.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+hash.$(OBJEXT): $(top_srcdir)/internal/st.h
+hash.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+hash.$(OBJEXT): $(top_srcdir)/internal/string.h
+hash.$(OBJEXT): $(top_srcdir)/internal/struct.h
+hash.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+hash.$(OBJEXT): $(top_srcdir)/internal/thread.h
+hash.$(OBJEXT): $(top_srcdir)/internal/time.h
+hash.$(OBJEXT): $(top_srcdir)/internal/variable.h
+hash.$(OBJEXT): $(top_srcdir)/internal/vm.h
+hash.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+hash.$(OBJEXT): $(top_srcdir)/prism/ast.h
+hash.$(OBJEXT): $(top_srcdir)/prism/defines.h
+hash.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+hash.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+hash.$(OBJEXT): $(top_srcdir)/prism/node.h
+hash.$(OBJEXT): $(top_srcdir)/prism/options.h
+hash.$(OBJEXT): $(top_srcdir)/prism/pack.h
+hash.$(OBJEXT): $(top_srcdir)/prism/parser.h
+hash.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+hash.$(OBJEXT): $(top_srcdir)/prism/prism.h
+hash.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+hash.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+hash.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+hash.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+hash.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+hash.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+hash.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+hash.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+hash.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+hash.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+hash.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+hash.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+hash.$(OBJEXT): $(top_srcdir)/prism/version.h
+hash.$(OBJEXT): {$(VPATH)}assert.h
+hash.$(OBJEXT): {$(VPATH)}atomic.h
+hash.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+hash.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+hash.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+hash.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+hash.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+hash.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+hash.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+hash.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+hash.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+hash.$(OBJEXT): {$(VPATH)}builtin.h
+hash.$(OBJEXT): {$(VPATH)}config.h
+hash.$(OBJEXT): {$(VPATH)}constant.h
+hash.$(OBJEXT): {$(VPATH)}debug_counter.h
+hash.$(OBJEXT): {$(VPATH)}defines.h
+hash.$(OBJEXT): {$(VPATH)}encindex.h
+hash.$(OBJEXT): {$(VPATH)}encoding.h
+hash.$(OBJEXT): {$(VPATH)}hash.c
+hash.$(OBJEXT): {$(VPATH)}hash.rbinc
+hash.$(OBJEXT): {$(VPATH)}id.h
+hash.$(OBJEXT): {$(VPATH)}id_table.h
+hash.$(OBJEXT): {$(VPATH)}intern.h
+hash.$(OBJEXT): {$(VPATH)}internal.h
+hash.$(OBJEXT): {$(VPATH)}internal/abi.h
+hash.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+hash.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+hash.$(OBJEXT): {$(VPATH)}internal/assume.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+hash.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+hash.$(OBJEXT): {$(VPATH)}internal/cast.h
+hash.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+hash.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+hash.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+hash.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+hash.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+hash.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+hash.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+hash.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+hash.$(OBJEXT): {$(VPATH)}internal/config.h
+hash.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+hash.$(OBJEXT): {$(VPATH)}internal/core.h
+hash.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+hash.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+hash.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+hash.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+hash.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+hash.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+hash.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+hash.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+hash.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+hash.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+hash.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+hash.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+hash.$(OBJEXT): {$(VPATH)}internal/ctype.h
+hash.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+hash.$(OBJEXT): {$(VPATH)}internal/dosish.h
+hash.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+hash.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+hash.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+hash.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+hash.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+hash.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+hash.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+hash.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+hash.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+hash.$(OBJEXT): {$(VPATH)}internal/error.h
+hash.$(OBJEXT): {$(VPATH)}internal/eval.h
+hash.$(OBJEXT): {$(VPATH)}internal/event.h
+hash.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+hash.$(OBJEXT): {$(VPATH)}internal/gc.h
+hash.$(OBJEXT): {$(VPATH)}internal/glob.h
+hash.$(OBJEXT): {$(VPATH)}internal/globals.h
+hash.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+hash.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+hash.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+hash.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+hash.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+hash.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+hash.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+hash.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+hash.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+hash.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+hash.$(OBJEXT): {$(VPATH)}internal/iterator.h
+hash.$(OBJEXT): {$(VPATH)}internal/memory.h
+hash.$(OBJEXT): {$(VPATH)}internal/method.h
+hash.$(OBJEXT): {$(VPATH)}internal/module.h
+hash.$(OBJEXT): {$(VPATH)}internal/newobj.h
+hash.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+hash.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+hash.$(OBJEXT): {$(VPATH)}internal/st.h
+hash.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+hash.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+hash.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+hash.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+hash.$(OBJEXT): {$(VPATH)}internal/symbol.h
+hash.$(OBJEXT): {$(VPATH)}internal/value.h
+hash.$(OBJEXT): {$(VPATH)}internal/value_type.h
+hash.$(OBJEXT): {$(VPATH)}internal/variable.h
+hash.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+hash.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+hash.$(OBJEXT): {$(VPATH)}iseq.h
+hash.$(OBJEXT): {$(VPATH)}method.h
+hash.$(OBJEXT): {$(VPATH)}missing.h
+hash.$(OBJEXT): {$(VPATH)}node.h
+hash.$(OBJEXT): {$(VPATH)}onigmo.h
+hash.$(OBJEXT): {$(VPATH)}oniguruma.h
+hash.$(OBJEXT): {$(VPATH)}prism_compile.h
+hash.$(OBJEXT): {$(VPATH)}probes.dmyh
+hash.$(OBJEXT): {$(VPATH)}probes.h
+hash.$(OBJEXT): {$(VPATH)}ractor.h
+hash.$(OBJEXT): {$(VPATH)}ruby_assert.h
+hash.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+hash.$(OBJEXT): {$(VPATH)}rubyparser.h
+hash.$(OBJEXT): {$(VPATH)}shape.h
+hash.$(OBJEXT): {$(VPATH)}st.h
+hash.$(OBJEXT): {$(VPATH)}subst.h
+hash.$(OBJEXT): {$(VPATH)}symbol.h
+hash.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+hash.$(OBJEXT): {$(VPATH)}thread_native.h
+hash.$(OBJEXT): {$(VPATH)}util.h
+hash.$(OBJEXT): {$(VPATH)}variable.h
+hash.$(OBJEXT): {$(VPATH)}vm_core.h
+hash.$(OBJEXT): {$(VPATH)}vm_debug.h
+hash.$(OBJEXT): {$(VPATH)}vm_opts.h
+hash.$(OBJEXT): {$(VPATH)}vm_sync.h
+imemo.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+imemo.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+imemo.$(OBJEXT): $(CCAN_DIR)/list/list.h
+imemo.$(OBJEXT): $(CCAN_DIR)/str/str.h
+imemo.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/array.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/box.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/class.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/gc.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/object.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/serial.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/st.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/struct.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/variable.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/vm.h
+imemo.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+imemo.$(OBJEXT): {$(VPATH)}assert.h
+imemo.$(OBJEXT): {$(VPATH)}atomic.h
+imemo.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+imemo.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+imemo.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+imemo.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+imemo.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+imemo.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+imemo.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+imemo.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+imemo.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+imemo.$(OBJEXT): {$(VPATH)}config.h
+imemo.$(OBJEXT): {$(VPATH)}constant.h
+imemo.$(OBJEXT): {$(VPATH)}debug_counter.h
+imemo.$(OBJEXT): {$(VPATH)}defines.h
+imemo.$(OBJEXT): {$(VPATH)}encoding.h
+imemo.$(OBJEXT): {$(VPATH)}id.h
+imemo.$(OBJEXT): {$(VPATH)}id_table.h
+imemo.$(OBJEXT): {$(VPATH)}imemo.c
+imemo.$(OBJEXT): {$(VPATH)}intern.h
+imemo.$(OBJEXT): {$(VPATH)}internal.h
+imemo.$(OBJEXT): {$(VPATH)}internal/abi.h
+imemo.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+imemo.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+imemo.$(OBJEXT): {$(VPATH)}internal/assume.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+imemo.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+imemo.$(OBJEXT): {$(VPATH)}internal/cast.h
+imemo.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+imemo.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+imemo.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+imemo.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+imemo.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+imemo.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+imemo.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+imemo.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+imemo.$(OBJEXT): {$(VPATH)}internal/config.h
+imemo.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+imemo.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+imemo.$(OBJEXT): {$(VPATH)}internal/ctype.h
+imemo.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+imemo.$(OBJEXT): {$(VPATH)}internal/dosish.h
+imemo.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+imemo.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+imemo.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+imemo.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+imemo.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+imemo.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+imemo.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+imemo.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+imemo.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+imemo.$(OBJEXT): {$(VPATH)}internal/error.h
+imemo.$(OBJEXT): {$(VPATH)}internal/eval.h
+imemo.$(OBJEXT): {$(VPATH)}internal/event.h
+imemo.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+imemo.$(OBJEXT): {$(VPATH)}internal/gc.h
+imemo.$(OBJEXT): {$(VPATH)}internal/glob.h
+imemo.$(OBJEXT): {$(VPATH)}internal/globals.h
+imemo.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+imemo.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+imemo.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+imemo.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+imemo.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+imemo.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+imemo.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+imemo.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+imemo.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+imemo.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+imemo.$(OBJEXT): {$(VPATH)}internal/iterator.h
+imemo.$(OBJEXT): {$(VPATH)}internal/memory.h
+imemo.$(OBJEXT): {$(VPATH)}internal/method.h
+imemo.$(OBJEXT): {$(VPATH)}internal/module.h
+imemo.$(OBJEXT): {$(VPATH)}internal/newobj.h
+imemo.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+imemo.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+imemo.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+imemo.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+imemo.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+imemo.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+imemo.$(OBJEXT): {$(VPATH)}internal/symbol.h
+imemo.$(OBJEXT): {$(VPATH)}internal/value.h
+imemo.$(OBJEXT): {$(VPATH)}internal/value_type.h
+imemo.$(OBJEXT): {$(VPATH)}internal/variable.h
+imemo.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+imemo.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+imemo.$(OBJEXT): {$(VPATH)}method.h
+imemo.$(OBJEXT): {$(VPATH)}missing.h
+imemo.$(OBJEXT): {$(VPATH)}node.h
+imemo.$(OBJEXT): {$(VPATH)}onigmo.h
+imemo.$(OBJEXT): {$(VPATH)}oniguruma.h
+imemo.$(OBJEXT): {$(VPATH)}ruby_assert.h
+imemo.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+imemo.$(OBJEXT): {$(VPATH)}rubyparser.h
+imemo.$(OBJEXT): {$(VPATH)}shape.h
+imemo.$(OBJEXT): {$(VPATH)}st.h
+imemo.$(OBJEXT): {$(VPATH)}subst.h
+imemo.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+imemo.$(OBJEXT): {$(VPATH)}thread_native.h
+imemo.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+imemo.$(OBJEXT): {$(VPATH)}vm_core.h
+imemo.$(OBJEXT): {$(VPATH)}vm_debug.h
+imemo.$(OBJEXT): {$(VPATH)}vm_opts.h
+imemo.$(OBJEXT): {$(VPATH)}vm_sync.h
+inits.$(OBJEXT): $(hdrdir)/ruby.h
+inits.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+inits.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+inits.$(OBJEXT): $(top_srcdir)/internal/inits.h
+inits.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+inits.$(OBJEXT): {$(VPATH)}assert.h
+inits.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+inits.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+inits.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+inits.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+inits.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+inits.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+inits.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+inits.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+inits.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+inits.$(OBJEXT): {$(VPATH)}builtin.h
+inits.$(OBJEXT): {$(VPATH)}config.h
+inits.$(OBJEXT): {$(VPATH)}defines.h
+inits.$(OBJEXT): {$(VPATH)}inits.c
+inits.$(OBJEXT): {$(VPATH)}intern.h
+inits.$(OBJEXT): {$(VPATH)}internal/abi.h
+inits.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+inits.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+inits.$(OBJEXT): {$(VPATH)}internal/assume.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+inits.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+inits.$(OBJEXT): {$(VPATH)}internal/cast.h
+inits.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+inits.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+inits.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+inits.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+inits.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+inits.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+inits.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+inits.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+inits.$(OBJEXT): {$(VPATH)}internal/config.h
+inits.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+inits.$(OBJEXT): {$(VPATH)}internal/core.h
+inits.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+inits.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+inits.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+inits.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+inits.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+inits.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+inits.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+inits.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+inits.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+inits.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+inits.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+inits.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+inits.$(OBJEXT): {$(VPATH)}internal/ctype.h
+inits.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+inits.$(OBJEXT): {$(VPATH)}internal/dosish.h
+inits.$(OBJEXT): {$(VPATH)}internal/error.h
+inits.$(OBJEXT): {$(VPATH)}internal/eval.h
+inits.$(OBJEXT): {$(VPATH)}internal/event.h
+inits.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+inits.$(OBJEXT): {$(VPATH)}internal/gc.h
+inits.$(OBJEXT): {$(VPATH)}internal/glob.h
+inits.$(OBJEXT): {$(VPATH)}internal/globals.h
+inits.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+inits.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+inits.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+inits.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+inits.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+inits.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+inits.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+inits.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+inits.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+inits.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+inits.$(OBJEXT): {$(VPATH)}internal/iterator.h
+inits.$(OBJEXT): {$(VPATH)}internal/memory.h
+inits.$(OBJEXT): {$(VPATH)}internal/method.h
+inits.$(OBJEXT): {$(VPATH)}internal/module.h
+inits.$(OBJEXT): {$(VPATH)}internal/newobj.h
+inits.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+inits.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+inits.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+inits.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+inits.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+inits.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+inits.$(OBJEXT): {$(VPATH)}internal/symbol.h
+inits.$(OBJEXT): {$(VPATH)}internal/value.h
+inits.$(OBJEXT): {$(VPATH)}internal/value_type.h
+inits.$(OBJEXT): {$(VPATH)}internal/variable.h
+inits.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+inits.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+inits.$(OBJEXT): {$(VPATH)}missing.h
+inits.$(OBJEXT): {$(VPATH)}prelude.rbinc
+inits.$(OBJEXT): {$(VPATH)}st.h
+inits.$(OBJEXT): {$(VPATH)}subst.h
+io.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+io.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+io.$(OBJEXT): $(CCAN_DIR)/list/list.h
+io.$(OBJEXT): $(CCAN_DIR)/str/str.h
+io.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+io.$(OBJEXT): $(hdrdir)/ruby/version.h
+io.$(OBJEXT): $(top_srcdir)/internal/array.h
+io.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+io.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+io.$(OBJEXT): $(top_srcdir)/internal/bits.h
+io.$(OBJEXT): $(top_srcdir)/internal/box.h
+io.$(OBJEXT): $(top_srcdir)/internal/class.h
+io.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+io.$(OBJEXT): $(top_srcdir)/internal/encoding.h
+io.$(OBJEXT): $(top_srcdir)/internal/error.h
+io.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+io.$(OBJEXT): $(top_srcdir)/internal/gc.h
+io.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+io.$(OBJEXT): $(top_srcdir)/internal/inits.h
+io.$(OBJEXT): $(top_srcdir)/internal/io.h
+io.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+io.$(OBJEXT): $(top_srcdir)/internal/object.h
+io.$(OBJEXT): $(top_srcdir)/internal/process.h
+io.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+io.$(OBJEXT): $(top_srcdir)/internal/serial.h
+io.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+io.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+io.$(OBJEXT): $(top_srcdir)/internal/string.h
+io.$(OBJEXT): $(top_srcdir)/internal/struct.h
+io.$(OBJEXT): $(top_srcdir)/internal/thread.h
+io.$(OBJEXT): $(top_srcdir)/internal/transcode.h
+io.$(OBJEXT): $(top_srcdir)/internal/variable.h
+io.$(OBJEXT): $(top_srcdir)/internal/vm.h
+io.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+io.$(OBJEXT): {$(VPATH)}assert.h
+io.$(OBJEXT): {$(VPATH)}atomic.h
+io.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+io.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+io.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+io.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+io.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+io.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+io.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+io.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+io.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+io.$(OBJEXT): {$(VPATH)}builtin.h
+io.$(OBJEXT): {$(VPATH)}config.h
+io.$(OBJEXT): {$(VPATH)}constant.h
+io.$(OBJEXT): {$(VPATH)}debug_counter.h
+io.$(OBJEXT): {$(VPATH)}defines.h
+io.$(OBJEXT): {$(VPATH)}dln.h
+io.$(OBJEXT): {$(VPATH)}encindex.h
+io.$(OBJEXT): {$(VPATH)}encoding.h
+io.$(OBJEXT): {$(VPATH)}fiber/scheduler.h
+io.$(OBJEXT): {$(VPATH)}id.h
+io.$(OBJEXT): {$(VPATH)}id_table.h
+io.$(OBJEXT): {$(VPATH)}intern.h
+io.$(OBJEXT): {$(VPATH)}internal.h
+io.$(OBJEXT): {$(VPATH)}internal/abi.h
+io.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+io.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+io.$(OBJEXT): {$(VPATH)}internal/assume.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+io.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+io.$(OBJEXT): {$(VPATH)}internal/cast.h
+io.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+io.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+io.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+io.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+io.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+io.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+io.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+io.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+io.$(OBJEXT): {$(VPATH)}internal/config.h
+io.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+io.$(OBJEXT): {$(VPATH)}internal/core.h
+io.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+io.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+io.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+io.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+io.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+io.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+io.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+io.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+io.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+io.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+io.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+io.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+io.$(OBJEXT): {$(VPATH)}internal/ctype.h
+io.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+io.$(OBJEXT): {$(VPATH)}internal/dosish.h
+io.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+io.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+io.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+io.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+io.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+io.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+io.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+io.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+io.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+io.$(OBJEXT): {$(VPATH)}internal/error.h
+io.$(OBJEXT): {$(VPATH)}internal/eval.h
+io.$(OBJEXT): {$(VPATH)}internal/event.h
+io.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+io.$(OBJEXT): {$(VPATH)}internal/gc.h
+io.$(OBJEXT): {$(VPATH)}internal/glob.h
+io.$(OBJEXT): {$(VPATH)}internal/globals.h
+io.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+io.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+io.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+io.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+io.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+io.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+io.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+io.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+io.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+io.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+io.$(OBJEXT): {$(VPATH)}internal/iterator.h
+io.$(OBJEXT): {$(VPATH)}internal/memory.h
+io.$(OBJEXT): {$(VPATH)}internal/method.h
+io.$(OBJEXT): {$(VPATH)}internal/module.h
+io.$(OBJEXT): {$(VPATH)}internal/newobj.h
+io.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+io.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+io.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+io.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+io.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+io.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+io.$(OBJEXT): {$(VPATH)}internal/symbol.h
+io.$(OBJEXT): {$(VPATH)}internal/value.h
+io.$(OBJEXT): {$(VPATH)}internal/value_type.h
+io.$(OBJEXT): {$(VPATH)}internal/variable.h
+io.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+io.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+io.$(OBJEXT): {$(VPATH)}io.c
+io.$(OBJEXT): {$(VPATH)}io.h
+io.$(OBJEXT): {$(VPATH)}io.rbinc
+io.$(OBJEXT): {$(VPATH)}io/buffer.h
+io.$(OBJEXT): {$(VPATH)}method.h
+io.$(OBJEXT): {$(VPATH)}missing.h
+io.$(OBJEXT): {$(VPATH)}node.h
+io.$(OBJEXT): {$(VPATH)}onigmo.h
+io.$(OBJEXT): {$(VPATH)}oniguruma.h
+io.$(OBJEXT): {$(VPATH)}ractor.h
+io.$(OBJEXT): {$(VPATH)}ruby_assert.h
+io.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+io.$(OBJEXT): {$(VPATH)}rubyparser.h
+io.$(OBJEXT): {$(VPATH)}shape.h
+io.$(OBJEXT): {$(VPATH)}st.h
+io.$(OBJEXT): {$(VPATH)}subst.h
+io.$(OBJEXT): {$(VPATH)}thread.h
+io.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+io.$(OBJEXT): {$(VPATH)}thread_native.h
+io.$(OBJEXT): {$(VPATH)}util.h
+io.$(OBJEXT): {$(VPATH)}vm_core.h
+io.$(OBJEXT): {$(VPATH)}vm_debug.h
+io.$(OBJEXT): {$(VPATH)}vm_opts.h
+io.$(OBJEXT): {$(VPATH)}vm_sync.h
+io_buffer.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+io_buffer.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+io_buffer.$(OBJEXT): $(CCAN_DIR)/list/list.h
+io_buffer.$(OBJEXT): $(CCAN_DIR)/str/str.h
+io_buffer.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+io_buffer.$(OBJEXT): $(hdrdir)/ruby/version.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/array.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/bits.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/box.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/error.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/gc.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/io.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/serial.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/string.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/thread.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/vm.h
+io_buffer.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+io_buffer.$(OBJEXT): {$(VPATH)}assert.h
+io_buffer.$(OBJEXT): {$(VPATH)}atomic.h
+io_buffer.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+io_buffer.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+io_buffer.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+io_buffer.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+io_buffer.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+io_buffer.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+io_buffer.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+io_buffer.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+io_buffer.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+io_buffer.$(OBJEXT): {$(VPATH)}config.h
+io_buffer.$(OBJEXT): {$(VPATH)}defines.h
+io_buffer.$(OBJEXT): {$(VPATH)}encindex.h
+io_buffer.$(OBJEXT): {$(VPATH)}encoding.h
+io_buffer.$(OBJEXT): {$(VPATH)}fiber/scheduler.h
+io_buffer.$(OBJEXT): {$(VPATH)}id.h
+io_buffer.$(OBJEXT): {$(VPATH)}id_table.h
+io_buffer.$(OBJEXT): {$(VPATH)}intern.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/abi.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/assume.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/cast.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/config.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/ctype.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/dosish.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/error.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/eval.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/event.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/gc.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/glob.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/globals.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/iterator.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/memory.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/method.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/module.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/newobj.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/symbol.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/value.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/value_type.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/variable.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+io_buffer.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+io_buffer.$(OBJEXT): {$(VPATH)}io.h
+io_buffer.$(OBJEXT): {$(VPATH)}io/buffer.h
+io_buffer.$(OBJEXT): {$(VPATH)}io_buffer.c
+io_buffer.$(OBJEXT): {$(VPATH)}method.h
+io_buffer.$(OBJEXT): {$(VPATH)}missing.h
+io_buffer.$(OBJEXT): {$(VPATH)}node.h
+io_buffer.$(OBJEXT): {$(VPATH)}onigmo.h
+io_buffer.$(OBJEXT): {$(VPATH)}oniguruma.h
+io_buffer.$(OBJEXT): {$(VPATH)}ruby_assert.h
+io_buffer.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+io_buffer.$(OBJEXT): {$(VPATH)}rubyparser.h
+io_buffer.$(OBJEXT): {$(VPATH)}st.h
+io_buffer.$(OBJEXT): {$(VPATH)}subst.h
+io_buffer.$(OBJEXT): {$(VPATH)}thread.h
+io_buffer.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+io_buffer.$(OBJEXT): {$(VPATH)}thread_native.h
+io_buffer.$(OBJEXT): {$(VPATH)}vm_core.h
+io_buffer.$(OBJEXT): {$(VPATH)}vm_opts.h
+iseq.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+iseq.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+iseq.$(OBJEXT): $(CCAN_DIR)/list/list.h
+iseq.$(OBJEXT): $(CCAN_DIR)/str/str.h
+iseq.$(OBJEXT): $(hdrdir)/ruby.h
+iseq.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+iseq.$(OBJEXT): $(hdrdir)/ruby/version.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/array.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/bits.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/box.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/class.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/compile.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/complex.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/error.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/file.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/gc.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/hash.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/io.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/parse.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/rational.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/serial.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/string.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/struct.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/thread.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/variable.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/vm.h
+iseq.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/ast.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/defines.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/node.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/options.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/pack.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/parser.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/prism.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+iseq.$(OBJEXT): $(top_srcdir)/prism/version.h
+iseq.$(OBJEXT): {$(VPATH)}assert.h
+iseq.$(OBJEXT): {$(VPATH)}atomic.h
+iseq.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+iseq.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+iseq.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+iseq.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+iseq.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+iseq.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+iseq.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+iseq.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+iseq.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+iseq.$(OBJEXT): {$(VPATH)}builtin.h
+iseq.$(OBJEXT): {$(VPATH)}config.h
+iseq.$(OBJEXT): {$(VPATH)}constant.h
+iseq.$(OBJEXT): {$(VPATH)}debug_counter.h
+iseq.$(OBJEXT): {$(VPATH)}defines.h
+iseq.$(OBJEXT): {$(VPATH)}encindex.h
+iseq.$(OBJEXT): {$(VPATH)}encoding.h
+iseq.$(OBJEXT): {$(VPATH)}eval_intern.h
+iseq.$(OBJEXT): {$(VPATH)}id.h
+iseq.$(OBJEXT): {$(VPATH)}id_table.h
+iseq.$(OBJEXT): {$(VPATH)}insns.def
+iseq.$(OBJEXT): {$(VPATH)}insns.inc
+iseq.$(OBJEXT): {$(VPATH)}insns_info.inc
+iseq.$(OBJEXT): {$(VPATH)}intern.h
+iseq.$(OBJEXT): {$(VPATH)}internal.h
+iseq.$(OBJEXT): {$(VPATH)}internal/abi.h
+iseq.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+iseq.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+iseq.$(OBJEXT): {$(VPATH)}internal/assume.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+iseq.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+iseq.$(OBJEXT): {$(VPATH)}internal/cast.h
+iseq.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+iseq.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+iseq.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+iseq.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+iseq.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+iseq.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+iseq.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+iseq.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+iseq.$(OBJEXT): {$(VPATH)}internal/config.h
+iseq.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+iseq.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+iseq.$(OBJEXT): {$(VPATH)}internal/ctype.h
+iseq.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+iseq.$(OBJEXT): {$(VPATH)}internal/dosish.h
+iseq.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+iseq.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+iseq.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+iseq.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+iseq.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+iseq.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+iseq.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+iseq.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+iseq.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+iseq.$(OBJEXT): {$(VPATH)}internal/error.h
+iseq.$(OBJEXT): {$(VPATH)}internal/eval.h
+iseq.$(OBJEXT): {$(VPATH)}internal/event.h
+iseq.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+iseq.$(OBJEXT): {$(VPATH)}internal/gc.h
+iseq.$(OBJEXT): {$(VPATH)}internal/glob.h
+iseq.$(OBJEXT): {$(VPATH)}internal/globals.h
+iseq.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+iseq.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+iseq.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+iseq.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+iseq.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+iseq.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+iseq.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+iseq.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+iseq.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+iseq.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+iseq.$(OBJEXT): {$(VPATH)}internal/iterator.h
+iseq.$(OBJEXT): {$(VPATH)}internal/memory.h
+iseq.$(OBJEXT): {$(VPATH)}internal/method.h
+iseq.$(OBJEXT): {$(VPATH)}internal/module.h
+iseq.$(OBJEXT): {$(VPATH)}internal/newobj.h
+iseq.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+iseq.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+iseq.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+iseq.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+iseq.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+iseq.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+iseq.$(OBJEXT): {$(VPATH)}internal/symbol.h
+iseq.$(OBJEXT): {$(VPATH)}internal/value.h
+iseq.$(OBJEXT): {$(VPATH)}internal/value_type.h
+iseq.$(OBJEXT): {$(VPATH)}internal/variable.h
+iseq.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+iseq.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+iseq.$(OBJEXT): {$(VPATH)}io.h
+iseq.$(OBJEXT): {$(VPATH)}iseq.c
+iseq.$(OBJEXT): {$(VPATH)}iseq.h
+iseq.$(OBJEXT): {$(VPATH)}method.h
+iseq.$(OBJEXT): {$(VPATH)}missing.h
+iseq.$(OBJEXT): {$(VPATH)}node.h
+iseq.$(OBJEXT): {$(VPATH)}onigmo.h
+iseq.$(OBJEXT): {$(VPATH)}oniguruma.h
+iseq.$(OBJEXT): {$(VPATH)}prism_compile.h
+iseq.$(OBJEXT): {$(VPATH)}ractor.h
+iseq.$(OBJEXT): {$(VPATH)}ractor_core.h
+iseq.$(OBJEXT): {$(VPATH)}ruby_assert.h
+iseq.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+iseq.$(OBJEXT): {$(VPATH)}rubyparser.h
+iseq.$(OBJEXT): {$(VPATH)}shape.h
+iseq.$(OBJEXT): {$(VPATH)}st.h
+iseq.$(OBJEXT): {$(VPATH)}subst.h
+iseq.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+iseq.$(OBJEXT): {$(VPATH)}thread_native.h
+iseq.$(OBJEXT): {$(VPATH)}util.h
+iseq.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+iseq.$(OBJEXT): {$(VPATH)}vm_core.h
+iseq.$(OBJEXT): {$(VPATH)}vm_debug.h
+iseq.$(OBJEXT): {$(VPATH)}vm_opts.h
+iseq.$(OBJEXT): {$(VPATH)}vm_sync.h
+iseq.$(OBJEXT): {$(VPATH)}yjit.h
+iseq.$(OBJEXT): {$(VPATH)}zjit.h
+jit.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+jit.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+jit.$(OBJEXT): $(CCAN_DIR)/list/list.h
+jit.$(OBJEXT): $(CCAN_DIR)/str/str.h
+jit.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+jit.$(OBJEXT): $(top_srcdir)/internal/array.h
+jit.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+jit.$(OBJEXT): $(top_srcdir)/internal/bits.h
+jit.$(OBJEXT): $(top_srcdir)/internal/box.h
+jit.$(OBJEXT): $(top_srcdir)/internal/class.h
+jit.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+jit.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+jit.$(OBJEXT): $(top_srcdir)/internal/gc.h
+jit.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+jit.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+jit.$(OBJEXT): $(top_srcdir)/internal/serial.h
+jit.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+jit.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+jit.$(OBJEXT): $(top_srcdir)/internal/string.h
+jit.$(OBJEXT): $(top_srcdir)/internal/struct.h
+jit.$(OBJEXT): $(top_srcdir)/internal/variable.h
+jit.$(OBJEXT): $(top_srcdir)/internal/vm.h
+jit.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+jit.$(OBJEXT): $(top_srcdir)/prism/ast.h
+jit.$(OBJEXT): $(top_srcdir)/prism/defines.h
+jit.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+jit.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+jit.$(OBJEXT): $(top_srcdir)/prism/node.h
+jit.$(OBJEXT): $(top_srcdir)/prism/options.h
+jit.$(OBJEXT): $(top_srcdir)/prism/pack.h
+jit.$(OBJEXT): $(top_srcdir)/prism/parser.h
+jit.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+jit.$(OBJEXT): $(top_srcdir)/prism/prism.h
+jit.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+jit.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+jit.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+jit.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+jit.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+jit.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+jit.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+jit.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+jit.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+jit.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+jit.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+jit.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+jit.$(OBJEXT): $(top_srcdir)/prism/version.h
+jit.$(OBJEXT): {$(VPATH)}assert.h
+jit.$(OBJEXT): {$(VPATH)}atomic.h
+jit.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+jit.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+jit.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+jit.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+jit.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+jit.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+jit.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+jit.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+jit.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+jit.$(OBJEXT): {$(VPATH)}builtin.h
+jit.$(OBJEXT): {$(VPATH)}config.h
+jit.$(OBJEXT): {$(VPATH)}constant.h
+jit.$(OBJEXT): {$(VPATH)}debug_counter.h
+jit.$(OBJEXT): {$(VPATH)}defines.h
+jit.$(OBJEXT): {$(VPATH)}encindex.h
+jit.$(OBJEXT): {$(VPATH)}encoding.h
+jit.$(OBJEXT): {$(VPATH)}id.h
+jit.$(OBJEXT): {$(VPATH)}id_table.h
+jit.$(OBJEXT): {$(VPATH)}insns.def
+jit.$(OBJEXT): {$(VPATH)}insns.inc
+jit.$(OBJEXT): {$(VPATH)}insns_info.inc
+jit.$(OBJEXT): {$(VPATH)}intern.h
+jit.$(OBJEXT): {$(VPATH)}internal.h
+jit.$(OBJEXT): {$(VPATH)}internal/abi.h
+jit.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+jit.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+jit.$(OBJEXT): {$(VPATH)}internal/assume.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+jit.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+jit.$(OBJEXT): {$(VPATH)}internal/cast.h
+jit.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+jit.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+jit.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+jit.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+jit.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+jit.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+jit.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+jit.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+jit.$(OBJEXT): {$(VPATH)}internal/config.h
+jit.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+jit.$(OBJEXT): {$(VPATH)}internal/core.h
+jit.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+jit.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+jit.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+jit.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+jit.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+jit.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+jit.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+jit.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+jit.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+jit.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+jit.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+jit.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+jit.$(OBJEXT): {$(VPATH)}internal/ctype.h
+jit.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+jit.$(OBJEXT): {$(VPATH)}internal/dosish.h
+jit.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+jit.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+jit.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+jit.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+jit.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+jit.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+jit.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+jit.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+jit.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+jit.$(OBJEXT): {$(VPATH)}internal/error.h
+jit.$(OBJEXT): {$(VPATH)}internal/eval.h
+jit.$(OBJEXT): {$(VPATH)}internal/event.h
+jit.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+jit.$(OBJEXT): {$(VPATH)}internal/gc.h
+jit.$(OBJEXT): {$(VPATH)}internal/glob.h
+jit.$(OBJEXT): {$(VPATH)}internal/globals.h
+jit.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+jit.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+jit.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+jit.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+jit.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+jit.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+jit.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+jit.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+jit.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+jit.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+jit.$(OBJEXT): {$(VPATH)}internal/iterator.h
+jit.$(OBJEXT): {$(VPATH)}internal/memory.h
+jit.$(OBJEXT): {$(VPATH)}internal/method.h
+jit.$(OBJEXT): {$(VPATH)}internal/module.h
+jit.$(OBJEXT): {$(VPATH)}internal/newobj.h
+jit.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+jit.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+jit.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+jit.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+jit.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+jit.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+jit.$(OBJEXT): {$(VPATH)}internal/symbol.h
+jit.$(OBJEXT): {$(VPATH)}internal/value.h
+jit.$(OBJEXT): {$(VPATH)}internal/value_type.h
+jit.$(OBJEXT): {$(VPATH)}internal/variable.h
+jit.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+jit.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+jit.$(OBJEXT): {$(VPATH)}iseq.h
+jit.$(OBJEXT): {$(VPATH)}jit.c
+jit.$(OBJEXT): {$(VPATH)}method.h
+jit.$(OBJEXT): {$(VPATH)}missing.h
+jit.$(OBJEXT): {$(VPATH)}node.h
+jit.$(OBJEXT): {$(VPATH)}onigmo.h
+jit.$(OBJEXT): {$(VPATH)}oniguruma.h
+jit.$(OBJEXT): {$(VPATH)}prism_compile.h
+jit.$(OBJEXT): {$(VPATH)}ruby_assert.h
+jit.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+jit.$(OBJEXT): {$(VPATH)}rubyparser.h
+jit.$(OBJEXT): {$(VPATH)}shape.h
+jit.$(OBJEXT): {$(VPATH)}st.h
+jit.$(OBJEXT): {$(VPATH)}subst.h
+jit.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+jit.$(OBJEXT): {$(VPATH)}thread_native.h
+jit.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+jit.$(OBJEXT): {$(VPATH)}vm_core.h
+jit.$(OBJEXT): {$(VPATH)}vm_debug.h
+jit.$(OBJEXT): {$(VPATH)}vm_opts.h
+jit.$(OBJEXT): {$(VPATH)}vm_sync.h
+load.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+load.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+load.$(OBJEXT): $(CCAN_DIR)/list/list.h
+load.$(OBJEXT): $(CCAN_DIR)/str/str.h
+load.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+load.$(OBJEXT): $(hdrdir)/ruby/version.h
+load.$(OBJEXT): $(top_srcdir)/internal/array.h
+load.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+load.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+load.$(OBJEXT): $(top_srcdir)/internal/bits.h
+load.$(OBJEXT): $(top_srcdir)/internal/box.h
+load.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+load.$(OBJEXT): $(top_srcdir)/internal/complex.h
+load.$(OBJEXT): $(top_srcdir)/internal/dir.h
+load.$(OBJEXT): $(top_srcdir)/internal/error.h
+load.$(OBJEXT): $(top_srcdir)/internal/eval.h
+load.$(OBJEXT): $(top_srcdir)/internal/file.h
+load.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+load.$(OBJEXT): $(top_srcdir)/internal/gc.h
+load.$(OBJEXT): $(top_srcdir)/internal/hash.h
+load.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+load.$(OBJEXT): $(top_srcdir)/internal/load.h
+load.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+load.$(OBJEXT): $(top_srcdir)/internal/parse.h
+load.$(OBJEXT): $(top_srcdir)/internal/rational.h
+load.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
+load.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+load.$(OBJEXT): $(top_srcdir)/internal/serial.h
+load.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+load.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+load.$(OBJEXT): $(top_srcdir)/internal/string.h
+load.$(OBJEXT): $(top_srcdir)/internal/struct.h
+load.$(OBJEXT): $(top_srcdir)/internal/thread.h
+load.$(OBJEXT): $(top_srcdir)/internal/variable.h
+load.$(OBJEXT): $(top_srcdir)/internal/vm.h
+load.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+load.$(OBJEXT): $(top_srcdir)/prism/ast.h
+load.$(OBJEXT): $(top_srcdir)/prism/defines.h
+load.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+load.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+load.$(OBJEXT): $(top_srcdir)/prism/node.h
+load.$(OBJEXT): $(top_srcdir)/prism/options.h
+load.$(OBJEXT): $(top_srcdir)/prism/pack.h
+load.$(OBJEXT): $(top_srcdir)/prism/parser.h
+load.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+load.$(OBJEXT): $(top_srcdir)/prism/prism.h
+load.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+load.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+load.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+load.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+load.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+load.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+load.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+load.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+load.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+load.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+load.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+load.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+load.$(OBJEXT): $(top_srcdir)/prism/version.h
+load.$(OBJEXT): {$(VPATH)}assert.h
+load.$(OBJEXT): {$(VPATH)}atomic.h
+load.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+load.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+load.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+load.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+load.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+load.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+load.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+load.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+load.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+load.$(OBJEXT): {$(VPATH)}config.h
+load.$(OBJEXT): {$(VPATH)}constant.h
+load.$(OBJEXT): {$(VPATH)}darray.h
+load.$(OBJEXT): {$(VPATH)}defines.h
+load.$(OBJEXT): {$(VPATH)}dln.h
+load.$(OBJEXT): {$(VPATH)}encindex.h
+load.$(OBJEXT): {$(VPATH)}encoding.h
+load.$(OBJEXT): {$(VPATH)}eval_intern.h
+load.$(OBJEXT): {$(VPATH)}id.h
+load.$(OBJEXT): {$(VPATH)}id_table.h
+load.$(OBJEXT): {$(VPATH)}intern.h
+load.$(OBJEXT): {$(VPATH)}internal.h
+load.$(OBJEXT): {$(VPATH)}internal/abi.h
+load.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+load.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+load.$(OBJEXT): {$(VPATH)}internal/assume.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+load.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+load.$(OBJEXT): {$(VPATH)}internal/cast.h
+load.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+load.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+load.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+load.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+load.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+load.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+load.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+load.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+load.$(OBJEXT): {$(VPATH)}internal/config.h
+load.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+load.$(OBJEXT): {$(VPATH)}internal/core.h
+load.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+load.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+load.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+load.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+load.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+load.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+load.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+load.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+load.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+load.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+load.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+load.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+load.$(OBJEXT): {$(VPATH)}internal/ctype.h
+load.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+load.$(OBJEXT): {$(VPATH)}internal/dosish.h
+load.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+load.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+load.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+load.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+load.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+load.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+load.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+load.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+load.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+load.$(OBJEXT): {$(VPATH)}internal/error.h
+load.$(OBJEXT): {$(VPATH)}internal/eval.h
+load.$(OBJEXT): {$(VPATH)}internal/event.h
+load.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+load.$(OBJEXT): {$(VPATH)}internal/gc.h
+load.$(OBJEXT): {$(VPATH)}internal/glob.h
+load.$(OBJEXT): {$(VPATH)}internal/globals.h
+load.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+load.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+load.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+load.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+load.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+load.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+load.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+load.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+load.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+load.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+load.$(OBJEXT): {$(VPATH)}internal/iterator.h
+load.$(OBJEXT): {$(VPATH)}internal/memory.h
+load.$(OBJEXT): {$(VPATH)}internal/method.h
+load.$(OBJEXT): {$(VPATH)}internal/module.h
+load.$(OBJEXT): {$(VPATH)}internal/newobj.h
+load.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+load.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+load.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+load.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+load.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+load.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+load.$(OBJEXT): {$(VPATH)}internal/symbol.h
+load.$(OBJEXT): {$(VPATH)}internal/value.h
+load.$(OBJEXT): {$(VPATH)}internal/value_type.h
+load.$(OBJEXT): {$(VPATH)}internal/variable.h
+load.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+load.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+load.$(OBJEXT): {$(VPATH)}iseq.h
+load.$(OBJEXT): {$(VPATH)}load.c
+load.$(OBJEXT): {$(VPATH)}method.h
+load.$(OBJEXT): {$(VPATH)}missing.h
+load.$(OBJEXT): {$(VPATH)}node.h
+load.$(OBJEXT): {$(VPATH)}onigmo.h
+load.$(OBJEXT): {$(VPATH)}oniguruma.h
+load.$(OBJEXT): {$(VPATH)}prism_compile.h
+load.$(OBJEXT): {$(VPATH)}probes.dmyh
+load.$(OBJEXT): {$(VPATH)}probes.h
+load.$(OBJEXT): {$(VPATH)}ractor.h
+load.$(OBJEXT): {$(VPATH)}ractor_core.h
+load.$(OBJEXT): {$(VPATH)}ruby_assert.h
+load.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+load.$(OBJEXT): {$(VPATH)}rubyparser.h
+load.$(OBJEXT): {$(VPATH)}shape.h
+load.$(OBJEXT): {$(VPATH)}st.h
+load.$(OBJEXT): {$(VPATH)}subst.h
+load.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+load.$(OBJEXT): {$(VPATH)}thread_native.h
+load.$(OBJEXT): {$(VPATH)}util.h
+load.$(OBJEXT): {$(VPATH)}vm_core.h
+load.$(OBJEXT): {$(VPATH)}vm_debug.h
+load.$(OBJEXT): {$(VPATH)}vm_opts.h
+loadpath.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+loadpath.$(OBJEXT): $(hdrdir)/ruby/version.h
+loadpath.$(OBJEXT): $(top_srcdir)/version.h
+loadpath.$(OBJEXT): {$(VPATH)}assert.h
+loadpath.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+loadpath.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+loadpath.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+loadpath.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+loadpath.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+loadpath.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+loadpath.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+loadpath.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+loadpath.$(OBJEXT): {$(VPATH)}config.h
+loadpath.$(OBJEXT): {$(VPATH)}defines.h
+loadpath.$(OBJEXT): {$(VPATH)}intern.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/abi.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/assume.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/cast.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/config.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/ctype.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/dosish.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/error.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/eval.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/event.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/gc.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/glob.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/globals.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/iterator.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/memory.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/method.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/module.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/newobj.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/symbol.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/value.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/value_type.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/variable.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+loadpath.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+loadpath.$(OBJEXT): {$(VPATH)}loadpath.c
+loadpath.$(OBJEXT): {$(VPATH)}missing.h
+loadpath.$(OBJEXT): {$(VPATH)}st.h
+loadpath.$(OBJEXT): {$(VPATH)}subst.h
+loadpath.$(OBJEXT): {$(VPATH)}verconf.h
+localeinit.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+localeinit.$(OBJEXT): {$(VPATH)}assert.h
+localeinit.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+localeinit.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+localeinit.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+localeinit.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+localeinit.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+localeinit.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+localeinit.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+localeinit.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+localeinit.$(OBJEXT): {$(VPATH)}config.h
+localeinit.$(OBJEXT): {$(VPATH)}defines.h
+localeinit.$(OBJEXT): {$(VPATH)}encindex.h
+localeinit.$(OBJEXT): {$(VPATH)}encoding.h
+localeinit.$(OBJEXT): {$(VPATH)}intern.h
+localeinit.$(OBJEXT): {$(VPATH)}internal.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/abi.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/assume.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/cast.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/config.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/ctype.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/dosish.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/error.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/eval.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/event.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/gc.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/glob.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/globals.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/iterator.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/memory.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/method.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/module.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/newobj.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/symbol.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/value.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/value_type.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/variable.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+localeinit.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+localeinit.$(OBJEXT): {$(VPATH)}localeinit.c
+localeinit.$(OBJEXT): {$(VPATH)}missing.h
+localeinit.$(OBJEXT): {$(VPATH)}onigmo.h
+localeinit.$(OBJEXT): {$(VPATH)}oniguruma.h
+localeinit.$(OBJEXT): {$(VPATH)}st.h
+localeinit.$(OBJEXT): {$(VPATH)}subst.h
+main.$(OBJEXT): $(hdrdir)/ruby.h
+main.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+main.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+main.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+main.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+main.$(OBJEXT): {$(VPATH)}assert.h
+main.$(OBJEXT): {$(VPATH)}backward.h
+main.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+main.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+main.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+main.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+main.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+main.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+main.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+main.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+main.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+main.$(OBJEXT): {$(VPATH)}config.h
+main.$(OBJEXT): {$(VPATH)}defines.h
+main.$(OBJEXT): {$(VPATH)}intern.h
+main.$(OBJEXT): {$(VPATH)}internal/abi.h
+main.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+main.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+main.$(OBJEXT): {$(VPATH)}internal/assume.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+main.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+main.$(OBJEXT): {$(VPATH)}internal/cast.h
+main.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+main.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+main.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+main.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+main.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+main.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+main.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+main.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+main.$(OBJEXT): {$(VPATH)}internal/config.h
+main.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+main.$(OBJEXT): {$(VPATH)}internal/core.h
+main.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+main.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+main.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+main.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+main.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+main.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+main.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+main.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+main.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+main.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+main.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+main.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+main.$(OBJEXT): {$(VPATH)}internal/ctype.h
+main.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+main.$(OBJEXT): {$(VPATH)}internal/dosish.h
+main.$(OBJEXT): {$(VPATH)}internal/error.h
+main.$(OBJEXT): {$(VPATH)}internal/eval.h
+main.$(OBJEXT): {$(VPATH)}internal/event.h
+main.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+main.$(OBJEXT): {$(VPATH)}internal/gc.h
+main.$(OBJEXT): {$(VPATH)}internal/glob.h
+main.$(OBJEXT): {$(VPATH)}internal/globals.h
+main.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+main.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+main.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+main.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+main.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+main.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+main.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+main.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+main.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+main.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+main.$(OBJEXT): {$(VPATH)}internal/iterator.h
+main.$(OBJEXT): {$(VPATH)}internal/memory.h
+main.$(OBJEXT): {$(VPATH)}internal/method.h
+main.$(OBJEXT): {$(VPATH)}internal/module.h
+main.$(OBJEXT): {$(VPATH)}internal/newobj.h
+main.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+main.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+main.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+main.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+main.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+main.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+main.$(OBJEXT): {$(VPATH)}internal/symbol.h
+main.$(OBJEXT): {$(VPATH)}internal/value.h
+main.$(OBJEXT): {$(VPATH)}internal/value_type.h
+main.$(OBJEXT): {$(VPATH)}internal/variable.h
+main.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+main.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+main.$(OBJEXT): {$(VPATH)}main.c
+main.$(OBJEXT): {$(VPATH)}missing.h
+main.$(OBJEXT): {$(VPATH)}st.h
+main.$(OBJEXT): {$(VPATH)}subst.h
+main.$(OBJEXT): {$(VPATH)}vm_debug.h
+marshal.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+marshal.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+marshal.$(OBJEXT): $(CCAN_DIR)/list/list.h
+marshal.$(OBJEXT): $(CCAN_DIR)/str/str.h
+marshal.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+marshal.$(OBJEXT): $(hdrdir)/ruby/version.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/array.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/bits.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/box.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/class.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/encoding.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/error.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/gc.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/hash.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/object.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/serial.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/string.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/struct.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/util.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/variable.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/vm.h
+marshal.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+marshal.$(OBJEXT): {$(VPATH)}assert.h
+marshal.$(OBJEXT): {$(VPATH)}atomic.h
+marshal.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+marshal.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+marshal.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+marshal.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+marshal.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+marshal.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+marshal.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+marshal.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+marshal.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+marshal.$(OBJEXT): {$(VPATH)}builtin.h
+marshal.$(OBJEXT): {$(VPATH)}config.h
+marshal.$(OBJEXT): {$(VPATH)}constant.h
+marshal.$(OBJEXT): {$(VPATH)}debug_counter.h
+marshal.$(OBJEXT): {$(VPATH)}defines.h
+marshal.$(OBJEXT): {$(VPATH)}encindex.h
+marshal.$(OBJEXT): {$(VPATH)}encoding.h
+marshal.$(OBJEXT): {$(VPATH)}id.h
+marshal.$(OBJEXT): {$(VPATH)}id_table.h
+marshal.$(OBJEXT): {$(VPATH)}intern.h
+marshal.$(OBJEXT): {$(VPATH)}internal.h
+marshal.$(OBJEXT): {$(VPATH)}internal/abi.h
+marshal.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+marshal.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+marshal.$(OBJEXT): {$(VPATH)}internal/assume.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/nonstring.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+marshal.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+marshal.$(OBJEXT): {$(VPATH)}internal/cast.h
+marshal.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+marshal.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+marshal.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+marshal.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+marshal.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+marshal.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+marshal.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+marshal.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+marshal.$(OBJEXT): {$(VPATH)}internal/config.h
+marshal.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+marshal.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+marshal.$(OBJEXT): {$(VPATH)}internal/ctype.h
+marshal.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+marshal.$(OBJEXT): {$(VPATH)}internal/dosish.h
+marshal.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+marshal.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+marshal.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+marshal.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+marshal.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+marshal.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+marshal.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+marshal.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+marshal.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+marshal.$(OBJEXT): {$(VPATH)}internal/error.h
+marshal.$(OBJEXT): {$(VPATH)}internal/eval.h
+marshal.$(OBJEXT): {$(VPATH)}internal/event.h
+marshal.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+marshal.$(OBJEXT): {$(VPATH)}internal/gc.h
+marshal.$(OBJEXT): {$(VPATH)}internal/glob.h
+marshal.$(OBJEXT): {$(VPATH)}internal/globals.h
+marshal.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+marshal.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+marshal.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+marshal.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+marshal.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+marshal.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+marshal.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+marshal.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+marshal.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+marshal.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+marshal.$(OBJEXT): {$(VPATH)}internal/iterator.h
+marshal.$(OBJEXT): {$(VPATH)}internal/memory.h
+marshal.$(OBJEXT): {$(VPATH)}internal/method.h
+marshal.$(OBJEXT): {$(VPATH)}internal/module.h
+marshal.$(OBJEXT): {$(VPATH)}internal/newobj.h
+marshal.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+marshal.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+marshal.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+marshal.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+marshal.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+marshal.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+marshal.$(OBJEXT): {$(VPATH)}internal/symbol.h
+marshal.$(OBJEXT): {$(VPATH)}internal/value.h
+marshal.$(OBJEXT): {$(VPATH)}internal/value_type.h
+marshal.$(OBJEXT): {$(VPATH)}internal/variable.h
+marshal.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+marshal.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+marshal.$(OBJEXT): {$(VPATH)}io.h
+marshal.$(OBJEXT): {$(VPATH)}marshal.c
+marshal.$(OBJEXT): {$(VPATH)}marshal.rbinc
+marshal.$(OBJEXT): {$(VPATH)}method.h
+marshal.$(OBJEXT): {$(VPATH)}missing.h
+marshal.$(OBJEXT): {$(VPATH)}node.h
+marshal.$(OBJEXT): {$(VPATH)}onigmo.h
+marshal.$(OBJEXT): {$(VPATH)}oniguruma.h
+marshal.$(OBJEXT): {$(VPATH)}ruby_assert.h
+marshal.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+marshal.$(OBJEXT): {$(VPATH)}rubyparser.h
+marshal.$(OBJEXT): {$(VPATH)}shape.h
+marshal.$(OBJEXT): {$(VPATH)}st.h
+marshal.$(OBJEXT): {$(VPATH)}subst.h
+marshal.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+marshal.$(OBJEXT): {$(VPATH)}thread_native.h
+marshal.$(OBJEXT): {$(VPATH)}util.h
+marshal.$(OBJEXT): {$(VPATH)}vm_core.h
+marshal.$(OBJEXT): {$(VPATH)}vm_debug.h
+marshal.$(OBJEXT): {$(VPATH)}vm_opts.h
+marshal.$(OBJEXT): {$(VPATH)}vm_sync.h
+math.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+math.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+math.$(OBJEXT): $(top_srcdir)/internal/class.h
+math.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+math.$(OBJEXT): $(top_srcdir)/internal/complex.h
+math.$(OBJEXT): $(top_srcdir)/internal/gc.h
+math.$(OBJEXT): $(top_srcdir)/internal/math.h
+math.$(OBJEXT): $(top_srcdir)/internal/object.h
+math.$(OBJEXT): $(top_srcdir)/internal/serial.h
+math.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+math.$(OBJEXT): $(top_srcdir)/internal/variable.h
+math.$(OBJEXT): $(top_srcdir)/internal/vm.h
+math.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+math.$(OBJEXT): {$(VPATH)}assert.h
+math.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+math.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+math.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+math.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+math.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+math.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+math.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+math.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+math.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+math.$(OBJEXT): {$(VPATH)}config.h
+math.$(OBJEXT): {$(VPATH)}constant.h
+math.$(OBJEXT): {$(VPATH)}defines.h
+math.$(OBJEXT): {$(VPATH)}id_table.h
+math.$(OBJEXT): {$(VPATH)}intern.h
+math.$(OBJEXT): {$(VPATH)}internal.h
+math.$(OBJEXT): {$(VPATH)}internal/abi.h
+math.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+math.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+math.$(OBJEXT): {$(VPATH)}internal/assume.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+math.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+math.$(OBJEXT): {$(VPATH)}internal/cast.h
+math.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+math.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+math.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+math.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+math.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+math.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+math.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+math.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+math.$(OBJEXT): {$(VPATH)}internal/config.h
+math.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+math.$(OBJEXT): {$(VPATH)}internal/core.h
+math.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+math.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+math.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+math.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+math.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+math.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+math.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+math.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+math.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+math.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+math.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+math.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+math.$(OBJEXT): {$(VPATH)}internal/ctype.h
+math.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+math.$(OBJEXT): {$(VPATH)}internal/dosish.h
+math.$(OBJEXT): {$(VPATH)}internal/error.h
+math.$(OBJEXT): {$(VPATH)}internal/eval.h
+math.$(OBJEXT): {$(VPATH)}internal/event.h
+math.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+math.$(OBJEXT): {$(VPATH)}internal/gc.h
+math.$(OBJEXT): {$(VPATH)}internal/glob.h
+math.$(OBJEXT): {$(VPATH)}internal/globals.h
+math.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+math.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+math.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+math.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+math.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+math.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+math.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+math.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+math.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+math.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+math.$(OBJEXT): {$(VPATH)}internal/iterator.h
+math.$(OBJEXT): {$(VPATH)}internal/memory.h
+math.$(OBJEXT): {$(VPATH)}internal/method.h
+math.$(OBJEXT): {$(VPATH)}internal/module.h
+math.$(OBJEXT): {$(VPATH)}internal/newobj.h
+math.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+math.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+math.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+math.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+math.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+math.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+math.$(OBJEXT): {$(VPATH)}internal/symbol.h
+math.$(OBJEXT): {$(VPATH)}internal/value.h
+math.$(OBJEXT): {$(VPATH)}internal/value_type.h
+math.$(OBJEXT): {$(VPATH)}internal/variable.h
+math.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+math.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+math.$(OBJEXT): {$(VPATH)}math.c
+math.$(OBJEXT): {$(VPATH)}missing.h
+math.$(OBJEXT): {$(VPATH)}shape.h
+math.$(OBJEXT): {$(VPATH)}st.h
+math.$(OBJEXT): {$(VPATH)}subst.h
+memory_view.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+memory_view.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+memory_view.$(OBJEXT): $(CCAN_DIR)/list/list.h
+memory_view.$(OBJEXT): $(CCAN_DIR)/str/str.h
+memory_view.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/array.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/box.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/gc.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/hash.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/serial.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/struct.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/variable.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/vm.h
+memory_view.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+memory_view.$(OBJEXT): {$(VPATH)}assert.h
+memory_view.$(OBJEXT): {$(VPATH)}atomic.h
+memory_view.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+memory_view.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+memory_view.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+memory_view.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+memory_view.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+memory_view.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+memory_view.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+memory_view.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+memory_view.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+memory_view.$(OBJEXT): {$(VPATH)}config.h
+memory_view.$(OBJEXT): {$(VPATH)}constant.h
+memory_view.$(OBJEXT): {$(VPATH)}debug_counter.h
+memory_view.$(OBJEXT): {$(VPATH)}defines.h
+memory_view.$(OBJEXT): {$(VPATH)}encoding.h
+memory_view.$(OBJEXT): {$(VPATH)}id.h
+memory_view.$(OBJEXT): {$(VPATH)}id_table.h
+memory_view.$(OBJEXT): {$(VPATH)}intern.h
+memory_view.$(OBJEXT): {$(VPATH)}internal.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/abi.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/assume.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/cast.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/config.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/ctype.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/dosish.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/error.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/eval.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/event.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/gc.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/glob.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/globals.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/iterator.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/memory.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/method.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/module.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/newobj.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/symbol.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/value.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/value_type.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/variable.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+memory_view.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+memory_view.$(OBJEXT): {$(VPATH)}memory_view.c
+memory_view.$(OBJEXT): {$(VPATH)}memory_view.h
+memory_view.$(OBJEXT): {$(VPATH)}method.h
+memory_view.$(OBJEXT): {$(VPATH)}missing.h
+memory_view.$(OBJEXT): {$(VPATH)}node.h
+memory_view.$(OBJEXT): {$(VPATH)}onigmo.h
+memory_view.$(OBJEXT): {$(VPATH)}oniguruma.h
+memory_view.$(OBJEXT): {$(VPATH)}ruby_assert.h
+memory_view.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+memory_view.$(OBJEXT): {$(VPATH)}rubyparser.h
+memory_view.$(OBJEXT): {$(VPATH)}shape.h
+memory_view.$(OBJEXT): {$(VPATH)}st.h
+memory_view.$(OBJEXT): {$(VPATH)}subst.h
+memory_view.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+memory_view.$(OBJEXT): {$(VPATH)}thread_native.h
+memory_view.$(OBJEXT): {$(VPATH)}util.h
+memory_view.$(OBJEXT): {$(VPATH)}vm_core.h
+memory_view.$(OBJEXT): {$(VPATH)}vm_debug.h
+memory_view.$(OBJEXT): {$(VPATH)}vm_opts.h
+memory_view.$(OBJEXT): {$(VPATH)}vm_sync.h
+miniinit.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+miniinit.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+miniinit.$(OBJEXT): $(CCAN_DIR)/list/list.h
+miniinit.$(OBJEXT): $(CCAN_DIR)/str/str.h
+miniinit.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/array.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/bits.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/box.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/complex.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/eval.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/gc.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/parse.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/rational.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/serial.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/struct.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/variable.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/vm.h
+miniinit.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/ast.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/defines.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/node.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/options.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/pack.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/parser.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/prism.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+miniinit.$(OBJEXT): $(top_srcdir)/prism/version.h
+miniinit.$(OBJEXT): {$(VPATH)}array.rb
+miniinit.$(OBJEXT): {$(VPATH)}assert.h
+miniinit.$(OBJEXT): {$(VPATH)}ast.rb
+miniinit.$(OBJEXT): {$(VPATH)}atomic.h
+miniinit.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+miniinit.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+miniinit.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+miniinit.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+miniinit.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+miniinit.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+miniinit.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+miniinit.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+miniinit.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+miniinit.$(OBJEXT): {$(VPATH)}builtin.h
+miniinit.$(OBJEXT): {$(VPATH)}config.h
+miniinit.$(OBJEXT): {$(VPATH)}constant.h
+miniinit.$(OBJEXT): {$(VPATH)}defines.h
+miniinit.$(OBJEXT): {$(VPATH)}dir.rb
+miniinit.$(OBJEXT): {$(VPATH)}encoding.h
+miniinit.$(OBJEXT): {$(VPATH)}gc.rb
+miniinit.$(OBJEXT): {$(VPATH)}gem_prelude.rb
+miniinit.$(OBJEXT): {$(VPATH)}id.h
+miniinit.$(OBJEXT): {$(VPATH)}id_table.h
+miniinit.$(OBJEXT): {$(VPATH)}intern.h
+miniinit.$(OBJEXT): {$(VPATH)}internal.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/abi.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/assume.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/nonstring.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/cast.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/config.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/ctype.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/dosish.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/error.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/eval.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/event.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/gc.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/glob.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/globals.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/iterator.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/memory.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/method.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/module.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/newobj.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/symbol.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/value.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/value_type.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/variable.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+miniinit.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+miniinit.$(OBJEXT): {$(VPATH)}io.rb
+miniinit.$(OBJEXT): {$(VPATH)}iseq.h
+miniinit.$(OBJEXT): {$(VPATH)}jit_hook.rb
+miniinit.$(OBJEXT): {$(VPATH)}jit_undef.rb
+miniinit.$(OBJEXT): {$(VPATH)}kernel.rb
+miniinit.$(OBJEXT): {$(VPATH)}marshal.rb
+miniinit.$(OBJEXT): {$(VPATH)}method.h
+miniinit.$(OBJEXT): {$(VPATH)}mini_builtin.c
+miniinit.$(OBJEXT): {$(VPATH)}miniinit.c
+miniinit.$(OBJEXT): {$(VPATH)}miniprelude.c
+miniinit.$(OBJEXT): {$(VPATH)}missing.h
+miniinit.$(OBJEXT): {$(VPATH)}nilclass.rb
+miniinit.$(OBJEXT): {$(VPATH)}node.h
+miniinit.$(OBJEXT): {$(VPATH)}numeric.rb
+miniinit.$(OBJEXT): {$(VPATH)}onigmo.h
+miniinit.$(OBJEXT): {$(VPATH)}oniguruma.h
+miniinit.$(OBJEXT): {$(VPATH)}pack.rb
+miniinit.$(OBJEXT): {$(VPATH)}pathname_builtin.rb
+miniinit.$(OBJEXT): {$(VPATH)}prelude.rb
+miniinit.$(OBJEXT): {$(VPATH)}prism_compile.h
+miniinit.$(OBJEXT): {$(VPATH)}ractor.rb
+miniinit.$(OBJEXT): {$(VPATH)}ruby_assert.h
+miniinit.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+miniinit.$(OBJEXT): {$(VPATH)}rubyparser.h
+miniinit.$(OBJEXT): {$(VPATH)}shape.h
+miniinit.$(OBJEXT): {$(VPATH)}st.h
+miniinit.$(OBJEXT): {$(VPATH)}subst.h
+miniinit.$(OBJEXT): {$(VPATH)}symbol.rb
+miniinit.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+miniinit.$(OBJEXT): {$(VPATH)}thread_native.h
+miniinit.$(OBJEXT): {$(VPATH)}thread_sync.rb
+miniinit.$(OBJEXT): {$(VPATH)}timev.rb
+miniinit.$(OBJEXT): {$(VPATH)}trace_point.rb
+miniinit.$(OBJEXT): {$(VPATH)}vm_core.h
+miniinit.$(OBJEXT): {$(VPATH)}vm_opts.h
+miniinit.$(OBJEXT): {$(VPATH)}warning.rb
+miniinit.$(OBJEXT): {$(VPATH)}yjit.rb
+miniinit.$(OBJEXT): {$(VPATH)}zjit.rb
+node.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+node.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+node.$(OBJEXT): $(CCAN_DIR)/list/list.h
+node.$(OBJEXT): $(CCAN_DIR)/str/str.h
+node.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+node.$(OBJEXT): $(top_srcdir)/internal/array.h
+node.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+node.$(OBJEXT): $(top_srcdir)/internal/box.h
+node.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+node.$(OBJEXT): $(top_srcdir)/internal/gc.h
+node.$(OBJEXT): $(top_srcdir)/internal/hash.h
+node.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+node.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+node.$(OBJEXT): $(top_srcdir)/internal/serial.h
+node.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+node.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+node.$(OBJEXT): $(top_srcdir)/internal/struct.h
+node.$(OBJEXT): $(top_srcdir)/internal/variable.h
+node.$(OBJEXT): $(top_srcdir)/internal/vm.h
+node.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+node.$(OBJEXT): {$(VPATH)}assert.h
+node.$(OBJEXT): {$(VPATH)}atomic.h
+node.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+node.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+node.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+node.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+node.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+node.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+node.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+node.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+node.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+node.$(OBJEXT): {$(VPATH)}config.h
+node.$(OBJEXT): {$(VPATH)}constant.h
+node.$(OBJEXT): {$(VPATH)}defines.h
+node.$(OBJEXT): {$(VPATH)}encoding.h
+node.$(OBJEXT): {$(VPATH)}id.h
+node.$(OBJEXT): {$(VPATH)}id_table.h
+node.$(OBJEXT): {$(VPATH)}intern.h
+node.$(OBJEXT): {$(VPATH)}internal.h
+node.$(OBJEXT): {$(VPATH)}internal/abi.h
+node.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+node.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+node.$(OBJEXT): {$(VPATH)}internal/assume.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+node.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+node.$(OBJEXT): {$(VPATH)}internal/cast.h
+node.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+node.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+node.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+node.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+node.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+node.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+node.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+node.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+node.$(OBJEXT): {$(VPATH)}internal/config.h
+node.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+node.$(OBJEXT): {$(VPATH)}internal/core.h
+node.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+node.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+node.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+node.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+node.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+node.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+node.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+node.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+node.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+node.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+node.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+node.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+node.$(OBJEXT): {$(VPATH)}internal/ctype.h
+node.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+node.$(OBJEXT): {$(VPATH)}internal/dosish.h
+node.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+node.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+node.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+node.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+node.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+node.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+node.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+node.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+node.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+node.$(OBJEXT): {$(VPATH)}internal/error.h
+node.$(OBJEXT): {$(VPATH)}internal/eval.h
+node.$(OBJEXT): {$(VPATH)}internal/event.h
+node.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+node.$(OBJEXT): {$(VPATH)}internal/gc.h
+node.$(OBJEXT): {$(VPATH)}internal/glob.h
+node.$(OBJEXT): {$(VPATH)}internal/globals.h
+node.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+node.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+node.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+node.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+node.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+node.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+node.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+node.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+node.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+node.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+node.$(OBJEXT): {$(VPATH)}internal/iterator.h
+node.$(OBJEXT): {$(VPATH)}internal/memory.h
+node.$(OBJEXT): {$(VPATH)}internal/method.h
+node.$(OBJEXT): {$(VPATH)}internal/module.h
+node.$(OBJEXT): {$(VPATH)}internal/newobj.h
+node.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+node.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+node.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+node.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+node.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+node.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+node.$(OBJEXT): {$(VPATH)}internal/symbol.h
+node.$(OBJEXT): {$(VPATH)}internal/value.h
+node.$(OBJEXT): {$(VPATH)}internal/value_type.h
+node.$(OBJEXT): {$(VPATH)}internal/variable.h
+node.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+node.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+node.$(OBJEXT): {$(VPATH)}method.h
+node.$(OBJEXT): {$(VPATH)}missing.h
+node.$(OBJEXT): {$(VPATH)}node.c
+node.$(OBJEXT): {$(VPATH)}node.h
+node.$(OBJEXT): {$(VPATH)}node_name.inc
+node.$(OBJEXT): {$(VPATH)}onigmo.h
+node.$(OBJEXT): {$(VPATH)}oniguruma.h
+node.$(OBJEXT): {$(VPATH)}ruby_assert.h
+node.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+node.$(OBJEXT): {$(VPATH)}rubyparser.h
+node.$(OBJEXT): {$(VPATH)}shape.h
+node.$(OBJEXT): {$(VPATH)}st.h
+node.$(OBJEXT): {$(VPATH)}subst.h
+node.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+node.$(OBJEXT): {$(VPATH)}thread_native.h
+node.$(OBJEXT): {$(VPATH)}vm_core.h
+node.$(OBJEXT): {$(VPATH)}vm_opts.h
+node_dump.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+node_dump.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+node_dump.$(OBJEXT): $(CCAN_DIR)/list/list.h
+node_dump.$(OBJEXT): $(CCAN_DIR)/str/str.h
+node_dump.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/array.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/bits.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/box.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/class.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/complex.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/gc.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/hash.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/parse.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/rational.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/serial.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/struct.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/variable.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/vm.h
+node_dump.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+node_dump.$(OBJEXT): {$(VPATH)}assert.h
+node_dump.$(OBJEXT): {$(VPATH)}atomic.h
+node_dump.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+node_dump.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+node_dump.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+node_dump.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+node_dump.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+node_dump.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+node_dump.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+node_dump.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+node_dump.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+node_dump.$(OBJEXT): {$(VPATH)}config.h
+node_dump.$(OBJEXT): {$(VPATH)}constant.h
+node_dump.$(OBJEXT): {$(VPATH)}debug_counter.h
+node_dump.$(OBJEXT): {$(VPATH)}defines.h
+node_dump.$(OBJEXT): {$(VPATH)}encoding.h
+node_dump.$(OBJEXT): {$(VPATH)}id.h
+node_dump.$(OBJEXT): {$(VPATH)}id_table.h
+node_dump.$(OBJEXT): {$(VPATH)}intern.h
+node_dump.$(OBJEXT): {$(VPATH)}internal.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/abi.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/assume.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/cast.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/config.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/ctype.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/dosish.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/error.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/eval.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/event.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/gc.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/glob.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/globals.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/iterator.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/memory.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/method.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/module.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/newobj.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/symbol.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/value.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/value_type.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/variable.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+node_dump.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+node_dump.$(OBJEXT): {$(VPATH)}method.h
+node_dump.$(OBJEXT): {$(VPATH)}missing.h
+node_dump.$(OBJEXT): {$(VPATH)}node.h
+node_dump.$(OBJEXT): {$(VPATH)}node_dump.c
+node_dump.$(OBJEXT): {$(VPATH)}onigmo.h
+node_dump.$(OBJEXT): {$(VPATH)}oniguruma.h
+node_dump.$(OBJEXT): {$(VPATH)}ruby_assert.h
+node_dump.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+node_dump.$(OBJEXT): {$(VPATH)}rubyparser.h
+node_dump.$(OBJEXT): {$(VPATH)}shape.h
+node_dump.$(OBJEXT): {$(VPATH)}st.h
+node_dump.$(OBJEXT): {$(VPATH)}subst.h
+node_dump.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+node_dump.$(OBJEXT): {$(VPATH)}thread_native.h
+node_dump.$(OBJEXT): {$(VPATH)}vm_core.h
+node_dump.$(OBJEXT): {$(VPATH)}vm_debug.h
+node_dump.$(OBJEXT): {$(VPATH)}vm_opts.h
+node_dump.$(OBJEXT): {$(VPATH)}vm_sync.h
+numeric.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+numeric.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+numeric.$(OBJEXT): $(CCAN_DIR)/list/list.h
+numeric.$(OBJEXT): $(CCAN_DIR)/str/str.h
+numeric.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/array.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/bits.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/box.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/class.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/complex.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/enumerator.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/gc.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/hash.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/object.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/rational.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/serial.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/string.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/struct.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/util.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/variable.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/vm.h
+numeric.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+numeric.$(OBJEXT): {$(VPATH)}assert.h
+numeric.$(OBJEXT): {$(VPATH)}atomic.h
+numeric.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+numeric.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+numeric.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+numeric.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+numeric.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+numeric.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+numeric.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+numeric.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+numeric.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+numeric.$(OBJEXT): {$(VPATH)}builtin.h
+numeric.$(OBJEXT): {$(VPATH)}config.h
+numeric.$(OBJEXT): {$(VPATH)}constant.h
+numeric.$(OBJEXT): {$(VPATH)}defines.h
+numeric.$(OBJEXT): {$(VPATH)}encindex.h
+numeric.$(OBJEXT): {$(VPATH)}encoding.h
+numeric.$(OBJEXT): {$(VPATH)}id.h
+numeric.$(OBJEXT): {$(VPATH)}id_table.h
+numeric.$(OBJEXT): {$(VPATH)}intern.h
+numeric.$(OBJEXT): {$(VPATH)}internal.h
+numeric.$(OBJEXT): {$(VPATH)}internal/abi.h
+numeric.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+numeric.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+numeric.$(OBJEXT): {$(VPATH)}internal/assume.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+numeric.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+numeric.$(OBJEXT): {$(VPATH)}internal/cast.h
+numeric.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+numeric.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+numeric.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+numeric.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+numeric.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+numeric.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+numeric.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+numeric.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+numeric.$(OBJEXT): {$(VPATH)}internal/config.h
+numeric.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+numeric.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+numeric.$(OBJEXT): {$(VPATH)}internal/ctype.h
+numeric.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+numeric.$(OBJEXT): {$(VPATH)}internal/dosish.h
+numeric.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+numeric.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+numeric.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+numeric.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+numeric.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+numeric.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+numeric.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+numeric.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+numeric.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+numeric.$(OBJEXT): {$(VPATH)}internal/error.h
+numeric.$(OBJEXT): {$(VPATH)}internal/eval.h
+numeric.$(OBJEXT): {$(VPATH)}internal/event.h
+numeric.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+numeric.$(OBJEXT): {$(VPATH)}internal/gc.h
+numeric.$(OBJEXT): {$(VPATH)}internal/glob.h
+numeric.$(OBJEXT): {$(VPATH)}internal/globals.h
+numeric.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+numeric.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+numeric.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+numeric.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+numeric.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+numeric.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+numeric.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+numeric.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+numeric.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+numeric.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+numeric.$(OBJEXT): {$(VPATH)}internal/iterator.h
+numeric.$(OBJEXT): {$(VPATH)}internal/memory.h
+numeric.$(OBJEXT): {$(VPATH)}internal/method.h
+numeric.$(OBJEXT): {$(VPATH)}internal/module.h
+numeric.$(OBJEXT): {$(VPATH)}internal/newobj.h
+numeric.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+numeric.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+numeric.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+numeric.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+numeric.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+numeric.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+numeric.$(OBJEXT): {$(VPATH)}internal/symbol.h
+numeric.$(OBJEXT): {$(VPATH)}internal/value.h
+numeric.$(OBJEXT): {$(VPATH)}internal/value_type.h
+numeric.$(OBJEXT): {$(VPATH)}internal/variable.h
+numeric.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+numeric.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+numeric.$(OBJEXT): {$(VPATH)}method.h
+numeric.$(OBJEXT): {$(VPATH)}missing.h
+numeric.$(OBJEXT): {$(VPATH)}node.h
+numeric.$(OBJEXT): {$(VPATH)}numeric.c
+numeric.$(OBJEXT): {$(VPATH)}numeric.rbinc
+numeric.$(OBJEXT): {$(VPATH)}onigmo.h
+numeric.$(OBJEXT): {$(VPATH)}oniguruma.h
+numeric.$(OBJEXT): {$(VPATH)}ruby_assert.h
+numeric.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+numeric.$(OBJEXT): {$(VPATH)}rubyparser.h
+numeric.$(OBJEXT): {$(VPATH)}shape.h
+numeric.$(OBJEXT): {$(VPATH)}st.h
+numeric.$(OBJEXT): {$(VPATH)}subst.h
+numeric.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+numeric.$(OBJEXT): {$(VPATH)}thread_native.h
+numeric.$(OBJEXT): {$(VPATH)}util.h
+numeric.$(OBJEXT): {$(VPATH)}vm_core.h
+numeric.$(OBJEXT): {$(VPATH)}vm_opts.h
+object.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+object.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+object.$(OBJEXT): $(CCAN_DIR)/list/list.h
+object.$(OBJEXT): $(CCAN_DIR)/str/str.h
+object.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+object.$(OBJEXT): $(hdrdir)/ruby/version.h
+object.$(OBJEXT): $(top_srcdir)/internal/array.h
+object.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+object.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+object.$(OBJEXT): $(top_srcdir)/internal/bits.h
+object.$(OBJEXT): $(top_srcdir)/internal/box.h
+object.$(OBJEXT): $(top_srcdir)/internal/class.h
+object.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+object.$(OBJEXT): $(top_srcdir)/internal/error.h
+object.$(OBJEXT): $(top_srcdir)/internal/eval.h
+object.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+object.$(OBJEXT): $(top_srcdir)/internal/gc.h
+object.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+object.$(OBJEXT): $(top_srcdir)/internal/inits.h
+object.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+object.$(OBJEXT): $(top_srcdir)/internal/object.h
+object.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+object.$(OBJEXT): $(top_srcdir)/internal/serial.h
+object.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+object.$(OBJEXT): $(top_srcdir)/internal/st.h
+object.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+object.$(OBJEXT): $(top_srcdir)/internal/string.h
+object.$(OBJEXT): $(top_srcdir)/internal/struct.h
+object.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+object.$(OBJEXT): $(top_srcdir)/internal/variable.h
+object.$(OBJEXT): $(top_srcdir)/internal/vm.h
+object.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+object.$(OBJEXT): {$(VPATH)}assert.h
+object.$(OBJEXT): {$(VPATH)}atomic.h
+object.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+object.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+object.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+object.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+object.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+object.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+object.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+object.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+object.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+object.$(OBJEXT): {$(VPATH)}builtin.h
+object.$(OBJEXT): {$(VPATH)}config.h
+object.$(OBJEXT): {$(VPATH)}constant.h
+object.$(OBJEXT): {$(VPATH)}debug_counter.h
+object.$(OBJEXT): {$(VPATH)}defines.h
+object.$(OBJEXT): {$(VPATH)}encindex.h
+object.$(OBJEXT): {$(VPATH)}encoding.h
+object.$(OBJEXT): {$(VPATH)}id.h
+object.$(OBJEXT): {$(VPATH)}id_table.h
+object.$(OBJEXT): {$(VPATH)}intern.h
+object.$(OBJEXT): {$(VPATH)}internal.h
+object.$(OBJEXT): {$(VPATH)}internal/abi.h
+object.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+object.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+object.$(OBJEXT): {$(VPATH)}internal/assume.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+object.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+object.$(OBJEXT): {$(VPATH)}internal/cast.h
+object.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+object.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+object.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+object.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+object.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+object.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+object.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+object.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+object.$(OBJEXT): {$(VPATH)}internal/config.h
+object.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+object.$(OBJEXT): {$(VPATH)}internal/core.h
+object.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+object.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+object.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+object.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+object.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+object.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+object.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+object.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+object.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+object.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+object.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+object.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+object.$(OBJEXT): {$(VPATH)}internal/ctype.h
+object.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+object.$(OBJEXT): {$(VPATH)}internal/dosish.h
+object.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+object.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+object.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+object.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+object.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+object.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+object.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+object.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+object.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+object.$(OBJEXT): {$(VPATH)}internal/error.h
+object.$(OBJEXT): {$(VPATH)}internal/eval.h
+object.$(OBJEXT): {$(VPATH)}internal/event.h
+object.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+object.$(OBJEXT): {$(VPATH)}internal/gc.h
+object.$(OBJEXT): {$(VPATH)}internal/glob.h
+object.$(OBJEXT): {$(VPATH)}internal/globals.h
+object.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+object.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+object.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+object.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+object.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+object.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+object.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+object.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+object.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+object.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+object.$(OBJEXT): {$(VPATH)}internal/iterator.h
+object.$(OBJEXT): {$(VPATH)}internal/memory.h
+object.$(OBJEXT): {$(VPATH)}internal/method.h
+object.$(OBJEXT): {$(VPATH)}internal/module.h
+object.$(OBJEXT): {$(VPATH)}internal/newobj.h
+object.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+object.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+object.$(OBJEXT): {$(VPATH)}internal/st.h
+object.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+object.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+object.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+object.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+object.$(OBJEXT): {$(VPATH)}internal/symbol.h
+object.$(OBJEXT): {$(VPATH)}internal/value.h
+object.$(OBJEXT): {$(VPATH)}internal/value_type.h
+object.$(OBJEXT): {$(VPATH)}internal/variable.h
+object.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+object.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+object.$(OBJEXT): {$(VPATH)}kernel.rbinc
+object.$(OBJEXT): {$(VPATH)}method.h
+object.$(OBJEXT): {$(VPATH)}missing.h
+object.$(OBJEXT): {$(VPATH)}nilclass.rbinc
+object.$(OBJEXT): {$(VPATH)}node.h
+object.$(OBJEXT): {$(VPATH)}object.c
+object.$(OBJEXT): {$(VPATH)}onigmo.h
+object.$(OBJEXT): {$(VPATH)}oniguruma.h
+object.$(OBJEXT): {$(VPATH)}probes.dmyh
+object.$(OBJEXT): {$(VPATH)}probes.h
+object.$(OBJEXT): {$(VPATH)}ruby_assert.h
+object.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+object.$(OBJEXT): {$(VPATH)}rubyparser.h
+object.$(OBJEXT): {$(VPATH)}shape.h
+object.$(OBJEXT): {$(VPATH)}st.h
+object.$(OBJEXT): {$(VPATH)}subst.h
+object.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+object.$(OBJEXT): {$(VPATH)}thread_native.h
+object.$(OBJEXT): {$(VPATH)}util.h
+object.$(OBJEXT): {$(VPATH)}variable.h
+object.$(OBJEXT): {$(VPATH)}vm_core.h
+object.$(OBJEXT): {$(VPATH)}vm_debug.h
+object.$(OBJEXT): {$(VPATH)}vm_opts.h
+object.$(OBJEXT): {$(VPATH)}vm_sync.h
+object.$(OBJEXT): {$(VPATH)}yjit.h
+pack.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+pack.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+pack.$(OBJEXT): $(CCAN_DIR)/list/list.h
+pack.$(OBJEXT): $(CCAN_DIR)/str/str.h
+pack.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+pack.$(OBJEXT): $(top_srcdir)/internal/array.h
+pack.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+pack.$(OBJEXT): $(top_srcdir)/internal/bits.h
+pack.$(OBJEXT): $(top_srcdir)/internal/box.h
+pack.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+pack.$(OBJEXT): $(top_srcdir)/internal/gc.h
+pack.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+pack.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+pack.$(OBJEXT): $(top_srcdir)/internal/serial.h
+pack.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+pack.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+pack.$(OBJEXT): $(top_srcdir)/internal/string.h
+pack.$(OBJEXT): $(top_srcdir)/internal/struct.h
+pack.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+pack.$(OBJEXT): $(top_srcdir)/internal/variable.h
+pack.$(OBJEXT): $(top_srcdir)/internal/vm.h
+pack.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+pack.$(OBJEXT): {$(VPATH)}assert.h
+pack.$(OBJEXT): {$(VPATH)}atomic.h
+pack.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+pack.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+pack.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+pack.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+pack.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+pack.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+pack.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+pack.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+pack.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+pack.$(OBJEXT): {$(VPATH)}builtin.h
+pack.$(OBJEXT): {$(VPATH)}config.h
+pack.$(OBJEXT): {$(VPATH)}constant.h
+pack.$(OBJEXT): {$(VPATH)}defines.h
+pack.$(OBJEXT): {$(VPATH)}encindex.h
+pack.$(OBJEXT): {$(VPATH)}encoding.h
+pack.$(OBJEXT): {$(VPATH)}id.h
+pack.$(OBJEXT): {$(VPATH)}id_table.h
+pack.$(OBJEXT): {$(VPATH)}intern.h
+pack.$(OBJEXT): {$(VPATH)}internal.h
+pack.$(OBJEXT): {$(VPATH)}internal/abi.h
+pack.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+pack.$(OBJEXT): {$(VPATH)}internal/assume.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+pack.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+pack.$(OBJEXT): {$(VPATH)}internal/cast.h
+pack.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+pack.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+pack.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+pack.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+pack.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+pack.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+pack.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+pack.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+pack.$(OBJEXT): {$(VPATH)}internal/config.h
+pack.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+pack.$(OBJEXT): {$(VPATH)}internal/core.h
+pack.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+pack.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+pack.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+pack.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+pack.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+pack.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+pack.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+pack.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+pack.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+pack.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+pack.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+pack.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+pack.$(OBJEXT): {$(VPATH)}internal/ctype.h
+pack.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+pack.$(OBJEXT): {$(VPATH)}internal/dosish.h
+pack.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+pack.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+pack.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+pack.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+pack.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+pack.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+pack.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+pack.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+pack.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+pack.$(OBJEXT): {$(VPATH)}internal/error.h
+pack.$(OBJEXT): {$(VPATH)}internal/eval.h
+pack.$(OBJEXT): {$(VPATH)}internal/event.h
+pack.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+pack.$(OBJEXT): {$(VPATH)}internal/gc.h
+pack.$(OBJEXT): {$(VPATH)}internal/glob.h
+pack.$(OBJEXT): {$(VPATH)}internal/globals.h
+pack.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+pack.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+pack.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+pack.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+pack.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+pack.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+pack.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+pack.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+pack.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+pack.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+pack.$(OBJEXT): {$(VPATH)}internal/iterator.h
+pack.$(OBJEXT): {$(VPATH)}internal/memory.h
+pack.$(OBJEXT): {$(VPATH)}internal/method.h
+pack.$(OBJEXT): {$(VPATH)}internal/module.h
+pack.$(OBJEXT): {$(VPATH)}internal/newobj.h
+pack.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+pack.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+pack.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+pack.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+pack.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+pack.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+pack.$(OBJEXT): {$(VPATH)}internal/symbol.h
+pack.$(OBJEXT): {$(VPATH)}internal/value.h
+pack.$(OBJEXT): {$(VPATH)}internal/value_type.h
+pack.$(OBJEXT): {$(VPATH)}internal/variable.h
+pack.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+pack.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+pack.$(OBJEXT): {$(VPATH)}method.h
+pack.$(OBJEXT): {$(VPATH)}missing.h
+pack.$(OBJEXT): {$(VPATH)}node.h
+pack.$(OBJEXT): {$(VPATH)}onigmo.h
+pack.$(OBJEXT): {$(VPATH)}oniguruma.h
+pack.$(OBJEXT): {$(VPATH)}pack.c
+pack.$(OBJEXT): {$(VPATH)}pack.rbinc
+pack.$(OBJEXT): {$(VPATH)}ruby_assert.h
+pack.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+pack.$(OBJEXT): {$(VPATH)}rubyparser.h
+pack.$(OBJEXT): {$(VPATH)}shape.h
+pack.$(OBJEXT): {$(VPATH)}st.h
+pack.$(OBJEXT): {$(VPATH)}subst.h
+pack.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+pack.$(OBJEXT): {$(VPATH)}thread_native.h
+pack.$(OBJEXT): {$(VPATH)}util.h
+pack.$(OBJEXT): {$(VPATH)}vm_core.h
+pack.$(OBJEXT): {$(VPATH)}vm_opts.h
+parse.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+parse.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+parse.$(OBJEXT): $(CCAN_DIR)/list/list.h
+parse.$(OBJEXT): $(CCAN_DIR)/str/str.h
+parse.$(OBJEXT): $(hdrdir)/ruby.h
+parse.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+parse.$(OBJEXT): $(hdrdir)/ruby/version.h
+parse.$(OBJEXT): $(top_srcdir)/internal/array.h
+parse.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+parse.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+parse.$(OBJEXT): $(top_srcdir)/internal/bits.h
+parse.$(OBJEXT): $(top_srcdir)/internal/box.h
+parse.$(OBJEXT): $(top_srcdir)/internal/compile.h
+parse.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+parse.$(OBJEXT): $(top_srcdir)/internal/complex.h
+parse.$(OBJEXT): $(top_srcdir)/internal/encoding.h
+parse.$(OBJEXT): $(top_srcdir)/internal/error.h
+parse.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+parse.$(OBJEXT): $(top_srcdir)/internal/gc.h
+parse.$(OBJEXT): $(top_srcdir)/internal/hash.h
+parse.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+parse.$(OBJEXT): $(top_srcdir)/internal/io.h
+parse.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+parse.$(OBJEXT): $(top_srcdir)/internal/parse.h
+parse.$(OBJEXT): $(top_srcdir)/internal/rational.h
+parse.$(OBJEXT): $(top_srcdir)/internal/re.h
+parse.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
+parse.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+parse.$(OBJEXT): $(top_srcdir)/internal/serial.h
+parse.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+parse.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+parse.$(OBJEXT): $(top_srcdir)/internal/string.h
+parse.$(OBJEXT): $(top_srcdir)/internal/struct.h
+parse.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+parse.$(OBJEXT): $(top_srcdir)/internal/thread.h
+parse.$(OBJEXT): $(top_srcdir)/internal/variable.h
+parse.$(OBJEXT): $(top_srcdir)/internal/vm.h
+parse.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+parse.$(OBJEXT): {$(VPATH)}assert.h
+parse.$(OBJEXT): {$(VPATH)}atomic.h
+parse.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+parse.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+parse.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+parse.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+parse.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+parse.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+parse.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+parse.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+parse.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+parse.$(OBJEXT): {$(VPATH)}config.h
+parse.$(OBJEXT): {$(VPATH)}constant.h
+parse.$(OBJEXT): {$(VPATH)}defines.h
+parse.$(OBJEXT): {$(VPATH)}defs/keywords
+parse.$(OBJEXT): {$(VPATH)}encindex.h
+parse.$(OBJEXT): {$(VPATH)}encoding.h
+parse.$(OBJEXT): {$(VPATH)}id.h
+parse.$(OBJEXT): {$(VPATH)}id_table.h
+parse.$(OBJEXT): {$(VPATH)}intern.h
+parse.$(OBJEXT): {$(VPATH)}internal.h
+parse.$(OBJEXT): {$(VPATH)}internal/abi.h
+parse.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+parse.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+parse.$(OBJEXT): {$(VPATH)}internal/assume.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+parse.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+parse.$(OBJEXT): {$(VPATH)}internal/cast.h
+parse.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+parse.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+parse.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+parse.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+parse.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+parse.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+parse.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+parse.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+parse.$(OBJEXT): {$(VPATH)}internal/config.h
+parse.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+parse.$(OBJEXT): {$(VPATH)}internal/core.h
+parse.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+parse.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+parse.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+parse.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+parse.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+parse.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+parse.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+parse.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+parse.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+parse.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+parse.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+parse.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+parse.$(OBJEXT): {$(VPATH)}internal/ctype.h
+parse.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+parse.$(OBJEXT): {$(VPATH)}internal/dosish.h
+parse.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+parse.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+parse.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+parse.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+parse.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+parse.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+parse.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+parse.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+parse.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+parse.$(OBJEXT): {$(VPATH)}internal/error.h
+parse.$(OBJEXT): {$(VPATH)}internal/eval.h
+parse.$(OBJEXT): {$(VPATH)}internal/event.h
+parse.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+parse.$(OBJEXT): {$(VPATH)}internal/gc.h
+parse.$(OBJEXT): {$(VPATH)}internal/glob.h
+parse.$(OBJEXT): {$(VPATH)}internal/globals.h
+parse.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+parse.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+parse.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+parse.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+parse.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+parse.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+parse.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+parse.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+parse.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+parse.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+parse.$(OBJEXT): {$(VPATH)}internal/iterator.h
+parse.$(OBJEXT): {$(VPATH)}internal/memory.h
+parse.$(OBJEXT): {$(VPATH)}internal/method.h
+parse.$(OBJEXT): {$(VPATH)}internal/module.h
+parse.$(OBJEXT): {$(VPATH)}internal/newobj.h
+parse.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+parse.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+parse.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+parse.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+parse.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+parse.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+parse.$(OBJEXT): {$(VPATH)}internal/symbol.h
+parse.$(OBJEXT): {$(VPATH)}internal/value.h
+parse.$(OBJEXT): {$(VPATH)}internal/value_type.h
+parse.$(OBJEXT): {$(VPATH)}internal/variable.h
+parse.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+parse.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+parse.$(OBJEXT): {$(VPATH)}io.h
+parse.$(OBJEXT): {$(VPATH)}lex.c
+parse.$(OBJEXT): {$(VPATH)}method.h
+parse.$(OBJEXT): {$(VPATH)}missing.h
+parse.$(OBJEXT): {$(VPATH)}node.h
+parse.$(OBJEXT): {$(VPATH)}onigmo.h
+parse.$(OBJEXT): {$(VPATH)}oniguruma.h
+parse.$(OBJEXT): {$(VPATH)}parse.c
+parse.$(OBJEXT): {$(VPATH)}parse.h
+parse.$(OBJEXT): {$(VPATH)}parse.y
+parse.$(OBJEXT): {$(VPATH)}parser_node.h
+parse.$(OBJEXT): {$(VPATH)}parser_st.h
+parse.$(OBJEXT): {$(VPATH)}probes.dmyh
+parse.$(OBJEXT): {$(VPATH)}probes.h
+parse.$(OBJEXT): {$(VPATH)}ractor.h
+parse.$(OBJEXT): {$(VPATH)}regenc.h
+parse.$(OBJEXT): {$(VPATH)}regex.h
+parse.$(OBJEXT): {$(VPATH)}ruby_assert.h
+parse.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+parse.$(OBJEXT): {$(VPATH)}rubyparser.h
+parse.$(OBJEXT): {$(VPATH)}shape.h
+parse.$(OBJEXT): {$(VPATH)}st.h
+parse.$(OBJEXT): {$(VPATH)}subst.h
+parse.$(OBJEXT): {$(VPATH)}symbol.h
+parse.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+parse.$(OBJEXT): {$(VPATH)}thread_native.h
+parse.$(OBJEXT): {$(VPATH)}util.h
+parse.$(OBJEXT): {$(VPATH)}vm_core.h
+parse.$(OBJEXT): {$(VPATH)}vm_opts.h
+parser_st.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+parser_st.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+parser_st.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+parser_st.$(OBJEXT): {$(VPATH)}assert.h
+parser_st.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+parser_st.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+parser_st.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+parser_st.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+parser_st.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+parser_st.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+parser_st.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+parser_st.$(OBJEXT): {$(VPATH)}config.h
+parser_st.$(OBJEXT): {$(VPATH)}defines.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/assume.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/cast.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/config.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/dosish.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+parser_st.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+parser_st.$(OBJEXT): {$(VPATH)}missing.h
+parser_st.$(OBJEXT): {$(VPATH)}parser_bits.h
+parser_st.$(OBJEXT): {$(VPATH)}parser_st.c
+parser_st.$(OBJEXT): {$(VPATH)}parser_st.h
+parser_st.$(OBJEXT): {$(VPATH)}parser_value.h
+parser_st.$(OBJEXT): {$(VPATH)}st.c
+pathname.$(OBJEXT): $(hdrdir)/ruby.h
+pathname.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+pathname.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+pathname.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+pathname.$(OBJEXT): {$(VPATH)}assert.h
+pathname.$(OBJEXT): {$(VPATH)}backward.h
+pathname.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+pathname.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+pathname.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+pathname.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+pathname.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+pathname.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+pathname.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+pathname.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+pathname.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+pathname.$(OBJEXT): {$(VPATH)}builtin.h
+pathname.$(OBJEXT): {$(VPATH)}config.h
+pathname.$(OBJEXT): {$(VPATH)}defines.h
+pathname.$(OBJEXT): {$(VPATH)}encoding.h
+pathname.$(OBJEXT): {$(VPATH)}intern.h
+pathname.$(OBJEXT): {$(VPATH)}internal/abi.h
+pathname.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+pathname.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+pathname.$(OBJEXT): {$(VPATH)}internal/assume.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+pathname.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+pathname.$(OBJEXT): {$(VPATH)}internal/cast.h
+pathname.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+pathname.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+pathname.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+pathname.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+pathname.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+pathname.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+pathname.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+pathname.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+pathname.$(OBJEXT): {$(VPATH)}internal/config.h
+pathname.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+pathname.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+pathname.$(OBJEXT): {$(VPATH)}internal/ctype.h
+pathname.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+pathname.$(OBJEXT): {$(VPATH)}internal/dosish.h
+pathname.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+pathname.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+pathname.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+pathname.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+pathname.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+pathname.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+pathname.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+pathname.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+pathname.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+pathname.$(OBJEXT): {$(VPATH)}internal/error.h
+pathname.$(OBJEXT): {$(VPATH)}internal/eval.h
+pathname.$(OBJEXT): {$(VPATH)}internal/event.h
+pathname.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+pathname.$(OBJEXT): {$(VPATH)}internal/gc.h
+pathname.$(OBJEXT): {$(VPATH)}internal/glob.h
+pathname.$(OBJEXT): {$(VPATH)}internal/globals.h
+pathname.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+pathname.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+pathname.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+pathname.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+pathname.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+pathname.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+pathname.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+pathname.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+pathname.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+pathname.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+pathname.$(OBJEXT): {$(VPATH)}internal/iterator.h
+pathname.$(OBJEXT): {$(VPATH)}internal/memory.h
+pathname.$(OBJEXT): {$(VPATH)}internal/method.h
+pathname.$(OBJEXT): {$(VPATH)}internal/module.h
+pathname.$(OBJEXT): {$(VPATH)}internal/newobj.h
+pathname.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+pathname.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+pathname.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+pathname.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+pathname.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+pathname.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+pathname.$(OBJEXT): {$(VPATH)}internal/symbol.h
+pathname.$(OBJEXT): {$(VPATH)}internal/value.h
+pathname.$(OBJEXT): {$(VPATH)}internal/value_type.h
+pathname.$(OBJEXT): {$(VPATH)}internal/variable.h
+pathname.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+pathname.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+pathname.$(OBJEXT): {$(VPATH)}missing.h
+pathname.$(OBJEXT): {$(VPATH)}onigmo.h
+pathname.$(OBJEXT): {$(VPATH)}oniguruma.h
+pathname.$(OBJEXT): {$(VPATH)}pathname.c
+pathname.$(OBJEXT): {$(VPATH)}pathname_builtin.rbinc
+pathname.$(OBJEXT): {$(VPATH)}ruby.h
+pathname.$(OBJEXT): {$(VPATH)}st.h
+pathname.$(OBJEXT): {$(VPATH)}subst.h
+prism/api_node.$(OBJEXT): $(hdrdir)/ruby.h
+prism/api_node.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/api_node.c
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/extension.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/node.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/options.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/pack.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/parser.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/prism.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+prism/api_node.$(OBJEXT): $(top_srcdir)/prism/version.h
+prism/api_node.$(OBJEXT): {$(VPATH)}assert.h
+prism/api_node.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+prism/api_node.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+prism/api_node.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+prism/api_node.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+prism/api_node.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+prism/api_node.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+prism/api_node.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+prism/api_node.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+prism/api_node.$(OBJEXT): {$(VPATH)}config.h
+prism/api_node.$(OBJEXT): {$(VPATH)}defines.h
+prism/api_node.$(OBJEXT): {$(VPATH)}encoding.h
+prism/api_node.$(OBJEXT): {$(VPATH)}intern.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/abi.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/assume.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/cast.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/config.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/ctype.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/dosish.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/error.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/eval.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/event.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/gc.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/glob.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/globals.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/iterator.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/memory.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/method.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/module.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/newobj.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/symbol.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/value.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/value_type.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/variable.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+prism/api_node.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+prism/api_node.$(OBJEXT): {$(VPATH)}missing.h
+prism/api_node.$(OBJEXT): {$(VPATH)}onigmo.h
+prism/api_node.$(OBJEXT): {$(VPATH)}oniguruma.h
+prism/api_node.$(OBJEXT): {$(VPATH)}st.h
+prism/api_node.$(OBJEXT): {$(VPATH)}subst.h
+prism/api_pack.$(OBJEXT): $(hdrdir)/ruby.h
+prism/api_pack.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/api_pack.c
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/extension.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/node.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/options.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/pack.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/parser.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/prism.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+prism/api_pack.$(OBJEXT): $(top_srcdir)/prism/version.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}assert.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}config.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}defines.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}encoding.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}intern.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/abi.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/assume.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/cast.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/config.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/ctype.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/dosish.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/error.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/eval.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/event.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/gc.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/glob.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/globals.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/iterator.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/memory.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/method.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/module.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/newobj.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/symbol.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/value.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/value_type.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/variable.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}missing.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}onigmo.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}oniguruma.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}st.h
+prism/api_pack.$(OBJEXT): {$(VPATH)}subst.h
+prism/diagnostic.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/diagnostic.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/diagnostic.$(OBJEXT): $(top_srcdir)/prism/diagnostic.c
+prism/diagnostic.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+prism/diagnostic.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/diagnostic.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/diagnostic.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/diagnostic.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/diagnostic.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/diagnostic.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/diagnostic.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/encoding.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/encoding.$(OBJEXT): $(top_srcdir)/prism/encoding.c
+prism/encoding.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism/encoding.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/extension.$(OBJEXT): $(hdrdir)/ruby.h
+prism/extension.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/extension.c
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/extension.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/node.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/options.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/pack.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/parser.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/prism.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+prism/extension.$(OBJEXT): $(top_srcdir)/prism/version.h
+prism/extension.$(OBJEXT): {$(VPATH)}assert.h
+prism/extension.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+prism/extension.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+prism/extension.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+prism/extension.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+prism/extension.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+prism/extension.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+prism/extension.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+prism/extension.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+prism/extension.$(OBJEXT): {$(VPATH)}config.h
+prism/extension.$(OBJEXT): {$(VPATH)}defines.h
+prism/extension.$(OBJEXT): {$(VPATH)}encoding.h
+prism/extension.$(OBJEXT): {$(VPATH)}intern.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/abi.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/assume.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/cast.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/config.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/ctype.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/dosish.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/error.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/eval.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/event.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/gc.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/glob.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/globals.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/iterator.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/memory.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/method.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/module.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/newobj.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/symbol.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/value.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/value_type.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/variable.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+prism/extension.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+prism/extension.$(OBJEXT): {$(VPATH)}missing.h
+prism/extension.$(OBJEXT): {$(VPATH)}onigmo.h
+prism/extension.$(OBJEXT): {$(VPATH)}oniguruma.h
+prism/extension.$(OBJEXT): {$(VPATH)}st.h
+prism/extension.$(OBJEXT): {$(VPATH)}subst.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/node.c
+prism/node.$(OBJEXT): $(top_srcdir)/prism/node.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/options.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/pack.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/parser.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/prism.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/node.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+prism/options.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/options.$(OBJEXT): $(top_srcdir)/prism/options.c
+prism/options.$(OBJEXT): $(top_srcdir)/prism/options.h
+prism/options.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/options.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/options.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/pack.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/pack.$(OBJEXT): $(top_srcdir)/prism/pack.c
+prism/pack.$(OBJEXT): $(top_srcdir)/prism/pack.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/options.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/parser.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/prettyprint.c
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/prettyprint.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/node.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/options.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/pack.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/parser.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/prism.c
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/prism.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+prism/prism.$(OBJEXT): $(top_srcdir)/prism/version.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/options.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/parser.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/regexp.c
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/regexp.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/node.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/options.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/pack.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/parser.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/prism.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/serialize.c
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+prism/serialize.$(OBJEXT): $(top_srcdir)/prism/version.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/node.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/options.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/parser.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/static_literals.c
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/static_literals.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/token_type.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/token_type.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/token_type.$(OBJEXT): $(top_srcdir)/prism/token_type.c
+prism/token_type.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/token_type.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/token_type.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/token_type.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/token_type.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/token_type.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/util/pm_buffer.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/util/pm_buffer.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.c
+prism/util/pm_buffer.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/util/pm_buffer.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/util/pm_buffer.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/util/pm_char.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/util/pm_char.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.c
+prism/util/pm_char.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/util/pm_char.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/util/pm_constant_pool.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/util/pm_constant_pool.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.c
+prism/util/pm_constant_pool.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/util/pm_integer.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/util/pm_integer.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/util/pm_integer.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/util/pm_integer.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.c
+prism/util/pm_integer.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/util/pm_integer.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/util/pm_list.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/util/pm_list.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.c
+prism/util/pm_list.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/util/pm_memchr.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/util/pm_memchr.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/util/pm_memchr.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism/util/pm_memchr.$(OBJEXT): $(top_srcdir)/prism/parser.h
+prism/util/pm_memchr.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/util/pm_memchr.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/util/pm_memchr.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.c
+prism/util/pm_memchr.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+prism/util/pm_memchr.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/util/pm_memchr.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/util/pm_memchr.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/util/pm_newline_list.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/util/pm_newline_list.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.c
+prism/util/pm_newline_list.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/util/pm_string.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/util/pm_string.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.c
+prism/util/pm_string.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/util/pm_strncasecmp.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/util/pm_strncasecmp.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.c
+prism/util/pm_strncasecmp.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/options.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/parser.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.c
+prism/util/pm_strpbrk.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+prism_init.$(OBJEXT): $(hdrdir)/ruby.h
+prism_init.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/ast.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/defines.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/extension.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/node.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/options.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/pack.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/parser.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/prism.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism/version.h
+prism_init.$(OBJEXT): $(top_srcdir)/prism_init.c
+prism_init.$(OBJEXT): {$(VPATH)}assert.h
+prism_init.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+prism_init.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+prism_init.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+prism_init.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+prism_init.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+prism_init.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+prism_init.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+prism_init.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+prism_init.$(OBJEXT): {$(VPATH)}config.h
+prism_init.$(OBJEXT): {$(VPATH)}defines.h
+prism_init.$(OBJEXT): {$(VPATH)}encoding.h
+prism_init.$(OBJEXT): {$(VPATH)}intern.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/abi.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/assume.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/cast.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/config.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/ctype.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/dosish.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/error.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/eval.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/event.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/gc.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/glob.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/globals.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/iterator.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/memory.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/method.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/module.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/newobj.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/symbol.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/value.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/value_type.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/variable.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+prism_init.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+prism_init.$(OBJEXT): {$(VPATH)}missing.h
+prism_init.$(OBJEXT): {$(VPATH)}onigmo.h
+prism_init.$(OBJEXT): {$(VPATH)}oniguruma.h
+prism_init.$(OBJEXT): {$(VPATH)}prism_init.c
+prism_init.$(OBJEXT): {$(VPATH)}st.h
+prism_init.$(OBJEXT): {$(VPATH)}subst.h
+proc.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+proc.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+proc.$(OBJEXT): $(CCAN_DIR)/list/list.h
+proc.$(OBJEXT): $(CCAN_DIR)/str/str.h
+proc.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+proc.$(OBJEXT): $(hdrdir)/ruby/version.h
+proc.$(OBJEXT): $(top_srcdir)/internal/array.h
+proc.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+proc.$(OBJEXT): $(top_srcdir)/internal/box.h
+proc.$(OBJEXT): $(top_srcdir)/internal/class.h
+proc.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+proc.$(OBJEXT): $(top_srcdir)/internal/error.h
+proc.$(OBJEXT): $(top_srcdir)/internal/eval.h
+proc.$(OBJEXT): $(top_srcdir)/internal/gc.h
+proc.$(OBJEXT): $(top_srcdir)/internal/hash.h
+proc.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+proc.$(OBJEXT): $(top_srcdir)/internal/object.h
+proc.$(OBJEXT): $(top_srcdir)/internal/proc.h
+proc.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+proc.$(OBJEXT): $(top_srcdir)/internal/serial.h
+proc.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+proc.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+proc.$(OBJEXT): $(top_srcdir)/internal/string.h
+proc.$(OBJEXT): $(top_srcdir)/internal/struct.h
+proc.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+proc.$(OBJEXT): $(top_srcdir)/internal/variable.h
+proc.$(OBJEXT): $(top_srcdir)/internal/vm.h
+proc.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+proc.$(OBJEXT): $(top_srcdir)/prism/ast.h
+proc.$(OBJEXT): $(top_srcdir)/prism/defines.h
+proc.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+proc.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+proc.$(OBJEXT): $(top_srcdir)/prism/node.h
+proc.$(OBJEXT): $(top_srcdir)/prism/options.h
+proc.$(OBJEXT): $(top_srcdir)/prism/pack.h
+proc.$(OBJEXT): $(top_srcdir)/prism/parser.h
+proc.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+proc.$(OBJEXT): $(top_srcdir)/prism/prism.h
+proc.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+proc.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+proc.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+proc.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+proc.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+proc.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+proc.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+proc.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+proc.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+proc.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+proc.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+proc.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+proc.$(OBJEXT): $(top_srcdir)/prism/version.h
+proc.$(OBJEXT): {$(VPATH)}assert.h
+proc.$(OBJEXT): {$(VPATH)}atomic.h
+proc.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+proc.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+proc.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+proc.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+proc.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+proc.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+proc.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+proc.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+proc.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+proc.$(OBJEXT): {$(VPATH)}config.h
+proc.$(OBJEXT): {$(VPATH)}constant.h
+proc.$(OBJEXT): {$(VPATH)}debug_counter.h
+proc.$(OBJEXT): {$(VPATH)}defines.h
+proc.$(OBJEXT): {$(VPATH)}encindex.h
+proc.$(OBJEXT): {$(VPATH)}encoding.h
+proc.$(OBJEXT): {$(VPATH)}eval_intern.h
+proc.$(OBJEXT): {$(VPATH)}id.h
+proc.$(OBJEXT): {$(VPATH)}id_table.h
+proc.$(OBJEXT): {$(VPATH)}intern.h
+proc.$(OBJEXT): {$(VPATH)}internal.h
+proc.$(OBJEXT): {$(VPATH)}internal/abi.h
+proc.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+proc.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+proc.$(OBJEXT): {$(VPATH)}internal/assume.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+proc.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+proc.$(OBJEXT): {$(VPATH)}internal/cast.h
+proc.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+proc.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+proc.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+proc.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+proc.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+proc.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+proc.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+proc.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+proc.$(OBJEXT): {$(VPATH)}internal/config.h
+proc.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+proc.$(OBJEXT): {$(VPATH)}internal/core.h
+proc.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+proc.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+proc.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+proc.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+proc.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+proc.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+proc.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+proc.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+proc.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+proc.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+proc.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+proc.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+proc.$(OBJEXT): {$(VPATH)}internal/ctype.h
+proc.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+proc.$(OBJEXT): {$(VPATH)}internal/dosish.h
+proc.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+proc.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+proc.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+proc.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+proc.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+proc.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+proc.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+proc.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+proc.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+proc.$(OBJEXT): {$(VPATH)}internal/error.h
+proc.$(OBJEXT): {$(VPATH)}internal/eval.h
+proc.$(OBJEXT): {$(VPATH)}internal/event.h
+proc.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+proc.$(OBJEXT): {$(VPATH)}internal/gc.h
+proc.$(OBJEXT): {$(VPATH)}internal/glob.h
+proc.$(OBJEXT): {$(VPATH)}internal/globals.h
+proc.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+proc.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+proc.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+proc.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+proc.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+proc.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+proc.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+proc.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+proc.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+proc.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+proc.$(OBJEXT): {$(VPATH)}internal/iterator.h
+proc.$(OBJEXT): {$(VPATH)}internal/memory.h
+proc.$(OBJEXT): {$(VPATH)}internal/method.h
+proc.$(OBJEXT): {$(VPATH)}internal/module.h
+proc.$(OBJEXT): {$(VPATH)}internal/newobj.h
+proc.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+proc.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+proc.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+proc.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+proc.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+proc.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+proc.$(OBJEXT): {$(VPATH)}internal/symbol.h
+proc.$(OBJEXT): {$(VPATH)}internal/value.h
+proc.$(OBJEXT): {$(VPATH)}internal/value_type.h
+proc.$(OBJEXT): {$(VPATH)}internal/variable.h
+proc.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+proc.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+proc.$(OBJEXT): {$(VPATH)}iseq.h
+proc.$(OBJEXT): {$(VPATH)}method.h
+proc.$(OBJEXT): {$(VPATH)}missing.h
+proc.$(OBJEXT): {$(VPATH)}node.h
+proc.$(OBJEXT): {$(VPATH)}onigmo.h
+proc.$(OBJEXT): {$(VPATH)}oniguruma.h
+proc.$(OBJEXT): {$(VPATH)}prism_compile.h
+proc.$(OBJEXT): {$(VPATH)}proc.c
+proc.$(OBJEXT): {$(VPATH)}ractor.h
+proc.$(OBJEXT): {$(VPATH)}ractor_core.h
+proc.$(OBJEXT): {$(VPATH)}ruby_assert.h
+proc.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+proc.$(OBJEXT): {$(VPATH)}rubyparser.h
+proc.$(OBJEXT): {$(VPATH)}shape.h
+proc.$(OBJEXT): {$(VPATH)}st.h
+proc.$(OBJEXT): {$(VPATH)}subst.h
+proc.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+proc.$(OBJEXT): {$(VPATH)}thread_native.h
+proc.$(OBJEXT): {$(VPATH)}vm_core.h
+proc.$(OBJEXT): {$(VPATH)}vm_debug.h
+proc.$(OBJEXT): {$(VPATH)}vm_opts.h
+proc.$(OBJEXT): {$(VPATH)}vm_sync.h
+proc.$(OBJEXT): {$(VPATH)}yjit.h
+process.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+process.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+process.$(OBJEXT): $(CCAN_DIR)/list/list.h
+process.$(OBJEXT): $(CCAN_DIR)/str/str.h
+process.$(OBJEXT): $(hdrdir)/ruby.h
+process.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+process.$(OBJEXT): $(hdrdir)/ruby/version.h
+process.$(OBJEXT): $(top_srcdir)/internal/array.h
+process.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+process.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+process.$(OBJEXT): $(top_srcdir)/internal/bits.h
+process.$(OBJEXT): $(top_srcdir)/internal/box.h
+process.$(OBJEXT): $(top_srcdir)/internal/class.h
+process.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+process.$(OBJEXT): $(top_srcdir)/internal/dir.h
+process.$(OBJEXT): $(top_srcdir)/internal/error.h
+process.$(OBJEXT): $(top_srcdir)/internal/eval.h
+process.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+process.$(OBJEXT): $(top_srcdir)/internal/gc.h
+process.$(OBJEXT): $(top_srcdir)/internal/hash.h
+process.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+process.$(OBJEXT): $(top_srcdir)/internal/io.h
+process.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+process.$(OBJEXT): $(top_srcdir)/internal/object.h
+process.$(OBJEXT): $(top_srcdir)/internal/process.h
+process.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+process.$(OBJEXT): $(top_srcdir)/internal/serial.h
+process.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+process.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+process.$(OBJEXT): $(top_srcdir)/internal/string.h
+process.$(OBJEXT): $(top_srcdir)/internal/struct.h
+process.$(OBJEXT): $(top_srcdir)/internal/thread.h
+process.$(OBJEXT): $(top_srcdir)/internal/time.h
+process.$(OBJEXT): $(top_srcdir)/internal/variable.h
+process.$(OBJEXT): $(top_srcdir)/internal/vm.h
+process.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+process.$(OBJEXT): {$(VPATH)}assert.h
+process.$(OBJEXT): {$(VPATH)}atomic.h
+process.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+process.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+process.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+process.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+process.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+process.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+process.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+process.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+process.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+process.$(OBJEXT): {$(VPATH)}config.h
+process.$(OBJEXT): {$(VPATH)}constant.h
+process.$(OBJEXT): {$(VPATH)}debug_counter.h
+process.$(OBJEXT): {$(VPATH)}defines.h
+process.$(OBJEXT): {$(VPATH)}dln.h
+process.$(OBJEXT): {$(VPATH)}encindex.h
+process.$(OBJEXT): {$(VPATH)}encoding.h
+process.$(OBJEXT): {$(VPATH)}fiber/scheduler.h
+process.$(OBJEXT): {$(VPATH)}hrtime.h
+process.$(OBJEXT): {$(VPATH)}id.h
+process.$(OBJEXT): {$(VPATH)}id_table.h
+process.$(OBJEXT): {$(VPATH)}intern.h
+process.$(OBJEXT): {$(VPATH)}internal.h
+process.$(OBJEXT): {$(VPATH)}internal/abi.h
+process.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+process.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+process.$(OBJEXT): {$(VPATH)}internal/assume.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+process.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+process.$(OBJEXT): {$(VPATH)}internal/cast.h
+process.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+process.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+process.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+process.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+process.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+process.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+process.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+process.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+process.$(OBJEXT): {$(VPATH)}internal/config.h
+process.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+process.$(OBJEXT): {$(VPATH)}internal/core.h
+process.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+process.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+process.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+process.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+process.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+process.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+process.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+process.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+process.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+process.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+process.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+process.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+process.$(OBJEXT): {$(VPATH)}internal/ctype.h
+process.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+process.$(OBJEXT): {$(VPATH)}internal/dosish.h
+process.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+process.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+process.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+process.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+process.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+process.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+process.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+process.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+process.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+process.$(OBJEXT): {$(VPATH)}internal/error.h
+process.$(OBJEXT): {$(VPATH)}internal/eval.h
+process.$(OBJEXT): {$(VPATH)}internal/event.h
+process.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+process.$(OBJEXT): {$(VPATH)}internal/gc.h
+process.$(OBJEXT): {$(VPATH)}internal/glob.h
+process.$(OBJEXT): {$(VPATH)}internal/globals.h
+process.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+process.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+process.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+process.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+process.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+process.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+process.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+process.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+process.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+process.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+process.$(OBJEXT): {$(VPATH)}internal/iterator.h
+process.$(OBJEXT): {$(VPATH)}internal/memory.h
+process.$(OBJEXT): {$(VPATH)}internal/method.h
+process.$(OBJEXT): {$(VPATH)}internal/module.h
+process.$(OBJEXT): {$(VPATH)}internal/newobj.h
+process.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+process.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+process.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+process.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+process.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+process.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+process.$(OBJEXT): {$(VPATH)}internal/symbol.h
+process.$(OBJEXT): {$(VPATH)}internal/value.h
+process.$(OBJEXT): {$(VPATH)}internal/value_type.h
+process.$(OBJEXT): {$(VPATH)}internal/variable.h
+process.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+process.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+process.$(OBJEXT): {$(VPATH)}io.h
+process.$(OBJEXT): {$(VPATH)}method.h
+process.$(OBJEXT): {$(VPATH)}missing.h
+process.$(OBJEXT): {$(VPATH)}node.h
+process.$(OBJEXT): {$(VPATH)}onigmo.h
+process.$(OBJEXT): {$(VPATH)}oniguruma.h
+process.$(OBJEXT): {$(VPATH)}process.c
+process.$(OBJEXT): {$(VPATH)}ractor.h
+process.$(OBJEXT): {$(VPATH)}ractor_core.h
+process.$(OBJEXT): {$(VPATH)}ruby_assert.h
+process.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+process.$(OBJEXT): {$(VPATH)}rubyparser.h
+process.$(OBJEXT): {$(VPATH)}shape.h
+process.$(OBJEXT): {$(VPATH)}st.h
+process.$(OBJEXT): {$(VPATH)}subst.h
+process.$(OBJEXT): {$(VPATH)}thread.h
+process.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+process.$(OBJEXT): {$(VPATH)}thread_native.h
+process.$(OBJEXT): {$(VPATH)}util.h
+process.$(OBJEXT): {$(VPATH)}vm_core.h
+process.$(OBJEXT): {$(VPATH)}vm_debug.h
+process.$(OBJEXT): {$(VPATH)}vm_opts.h
+process.$(OBJEXT): {$(VPATH)}vm_sync.h
+ractor.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+ractor.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+ractor.$(OBJEXT): $(CCAN_DIR)/list/list.h
+ractor.$(OBJEXT): $(CCAN_DIR)/str/str.h
+ractor.$(OBJEXT): $(hdrdir)/ruby.h
+ractor.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+ractor.$(OBJEXT): $(hdrdir)/ruby/version.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/array.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/bits.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/box.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/complex.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/error.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/gc.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/hash.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/object.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/ractor.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/rational.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/serial.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/string.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/struct.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/thread.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/variable.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/vm.h
+ractor.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+ractor.$(OBJEXT): {$(VPATH)}assert.h
+ractor.$(OBJEXT): {$(VPATH)}atomic.h
+ractor.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+ractor.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+ractor.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+ractor.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+ractor.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+ractor.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+ractor.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+ractor.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+ractor.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+ractor.$(OBJEXT): {$(VPATH)}builtin.h
+ractor.$(OBJEXT): {$(VPATH)}config.h
+ractor.$(OBJEXT): {$(VPATH)}constant.h
+ractor.$(OBJEXT): {$(VPATH)}debug_counter.h
+ractor.$(OBJEXT): {$(VPATH)}defines.h
+ractor.$(OBJEXT): {$(VPATH)}encindex.h
+ractor.$(OBJEXT): {$(VPATH)}encoding.h
+ractor.$(OBJEXT): {$(VPATH)}eval_intern.h
+ractor.$(OBJEXT): {$(VPATH)}id.h
+ractor.$(OBJEXT): {$(VPATH)}id_table.h
+ractor.$(OBJEXT): {$(VPATH)}intern.h
+ractor.$(OBJEXT): {$(VPATH)}internal.h
+ractor.$(OBJEXT): {$(VPATH)}internal/abi.h
+ractor.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+ractor.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+ractor.$(OBJEXT): {$(VPATH)}internal/assume.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+ractor.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+ractor.$(OBJEXT): {$(VPATH)}internal/cast.h
+ractor.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+ractor.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+ractor.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+ractor.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+ractor.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+ractor.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+ractor.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+ractor.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+ractor.$(OBJEXT): {$(VPATH)}internal/config.h
+ractor.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/rmatch.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+ractor.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+ractor.$(OBJEXT): {$(VPATH)}internal/ctype.h
+ractor.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+ractor.$(OBJEXT): {$(VPATH)}internal/dosish.h
+ractor.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+ractor.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+ractor.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+ractor.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+ractor.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+ractor.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+ractor.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+ractor.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+ractor.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+ractor.$(OBJEXT): {$(VPATH)}internal/error.h
+ractor.$(OBJEXT): {$(VPATH)}internal/eval.h
+ractor.$(OBJEXT): {$(VPATH)}internal/event.h
+ractor.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+ractor.$(OBJEXT): {$(VPATH)}internal/gc.h
+ractor.$(OBJEXT): {$(VPATH)}internal/glob.h
+ractor.$(OBJEXT): {$(VPATH)}internal/globals.h
+ractor.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+ractor.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+ractor.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+ractor.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+ractor.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+ractor.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+ractor.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+ractor.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+ractor.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+ractor.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+ractor.$(OBJEXT): {$(VPATH)}internal/iterator.h
+ractor.$(OBJEXT): {$(VPATH)}internal/memory.h
+ractor.$(OBJEXT): {$(VPATH)}internal/method.h
+ractor.$(OBJEXT): {$(VPATH)}internal/module.h
+ractor.$(OBJEXT): {$(VPATH)}internal/newobj.h
+ractor.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+ractor.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+ractor.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+ractor.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+ractor.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+ractor.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+ractor.$(OBJEXT): {$(VPATH)}internal/symbol.h
+ractor.$(OBJEXT): {$(VPATH)}internal/value.h
+ractor.$(OBJEXT): {$(VPATH)}internal/value_type.h
+ractor.$(OBJEXT): {$(VPATH)}internal/variable.h
+ractor.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+ractor.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+ractor.$(OBJEXT): {$(VPATH)}method.h
+ractor.$(OBJEXT): {$(VPATH)}missing.h
+ractor.$(OBJEXT): {$(VPATH)}node.h
+ractor.$(OBJEXT): {$(VPATH)}onigmo.h
+ractor.$(OBJEXT): {$(VPATH)}oniguruma.h
+ractor.$(OBJEXT): {$(VPATH)}ractor.c
+ractor.$(OBJEXT): {$(VPATH)}ractor.h
+ractor.$(OBJEXT): {$(VPATH)}ractor.rbinc
+ractor.$(OBJEXT): {$(VPATH)}ractor_core.h
+ractor.$(OBJEXT): {$(VPATH)}ractor_sync.c
+ractor.$(OBJEXT): {$(VPATH)}re.h
+ractor.$(OBJEXT): {$(VPATH)}regex.h
+ractor.$(OBJEXT): {$(VPATH)}ruby_assert.h
+ractor.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+ractor.$(OBJEXT): {$(VPATH)}rubyparser.h
+ractor.$(OBJEXT): {$(VPATH)}shape.h
+ractor.$(OBJEXT): {$(VPATH)}st.h
+ractor.$(OBJEXT): {$(VPATH)}subst.h
+ractor.$(OBJEXT): {$(VPATH)}thread.h
+ractor.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+ractor.$(OBJEXT): {$(VPATH)}thread_native.h
+ractor.$(OBJEXT): {$(VPATH)}variable.h
+ractor.$(OBJEXT): {$(VPATH)}vm_core.h
+ractor.$(OBJEXT): {$(VPATH)}vm_debug.h
+ractor.$(OBJEXT): {$(VPATH)}vm_opts.h
+ractor.$(OBJEXT): {$(VPATH)}vm_sync.h
+ractor.$(OBJEXT): {$(VPATH)}yjit.h
+ractor.$(OBJEXT): {$(VPATH)}zjit.h
+random.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+random.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+random.$(OBJEXT): $(CCAN_DIR)/list/list.h
+random.$(OBJEXT): $(CCAN_DIR)/str/str.h
+random.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+random.$(OBJEXT): $(top_srcdir)/internal/array.h
+random.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+random.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+random.$(OBJEXT): $(top_srcdir)/internal/bits.h
+random.$(OBJEXT): $(top_srcdir)/internal/box.h
+random.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+random.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+random.$(OBJEXT): $(top_srcdir)/internal/gc.h
+random.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+random.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+random.$(OBJEXT): $(top_srcdir)/internal/random.h
+random.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+random.$(OBJEXT): $(top_srcdir)/internal/serial.h
+random.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+random.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+random.$(OBJEXT): $(top_srcdir)/internal/struct.h
+random.$(OBJEXT): $(top_srcdir)/internal/variable.h
+random.$(OBJEXT): $(top_srcdir)/internal/vm.h
+random.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+random.$(OBJEXT): {$(VPATH)}assert.h
+random.$(OBJEXT): {$(VPATH)}atomic.h
+random.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+random.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+random.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+random.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+random.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+random.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+random.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+random.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+random.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+random.$(OBJEXT): {$(VPATH)}config.h
+random.$(OBJEXT): {$(VPATH)}constant.h
+random.$(OBJEXT): {$(VPATH)}defines.h
+random.$(OBJEXT): {$(VPATH)}encoding.h
+random.$(OBJEXT): {$(VPATH)}id.h
+random.$(OBJEXT): {$(VPATH)}id_table.h
+random.$(OBJEXT): {$(VPATH)}intern.h
+random.$(OBJEXT): {$(VPATH)}internal.h
+random.$(OBJEXT): {$(VPATH)}internal/abi.h
+random.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+random.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+random.$(OBJEXT): {$(VPATH)}internal/assume.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+random.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+random.$(OBJEXT): {$(VPATH)}internal/cast.h
+random.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+random.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+random.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+random.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+random.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+random.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+random.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+random.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+random.$(OBJEXT): {$(VPATH)}internal/config.h
+random.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+random.$(OBJEXT): {$(VPATH)}internal/core.h
+random.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+random.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+random.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+random.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+random.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+random.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+random.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+random.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+random.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+random.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+random.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+random.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+random.$(OBJEXT): {$(VPATH)}internal/ctype.h
+random.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+random.$(OBJEXT): {$(VPATH)}internal/dosish.h
+random.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+random.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+random.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+random.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+random.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+random.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+random.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+random.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+random.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+random.$(OBJEXT): {$(VPATH)}internal/error.h
+random.$(OBJEXT): {$(VPATH)}internal/eval.h
+random.$(OBJEXT): {$(VPATH)}internal/event.h
+random.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+random.$(OBJEXT): {$(VPATH)}internal/gc.h
+random.$(OBJEXT): {$(VPATH)}internal/glob.h
+random.$(OBJEXT): {$(VPATH)}internal/globals.h
+random.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+random.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+random.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+random.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+random.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+random.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+random.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+random.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+random.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+random.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+random.$(OBJEXT): {$(VPATH)}internal/iterator.h
+random.$(OBJEXT): {$(VPATH)}internal/memory.h
+random.$(OBJEXT): {$(VPATH)}internal/method.h
+random.$(OBJEXT): {$(VPATH)}internal/module.h
+random.$(OBJEXT): {$(VPATH)}internal/newobj.h
+random.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+random.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+random.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+random.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+random.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+random.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+random.$(OBJEXT): {$(VPATH)}internal/symbol.h
+random.$(OBJEXT): {$(VPATH)}internal/value.h
+random.$(OBJEXT): {$(VPATH)}internal/value_type.h
+random.$(OBJEXT): {$(VPATH)}internal/variable.h
+random.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+random.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+random.$(OBJEXT): {$(VPATH)}method.h
+random.$(OBJEXT): {$(VPATH)}missing.h
+random.$(OBJEXT): {$(VPATH)}mt19937.c
+random.$(OBJEXT): {$(VPATH)}node.h
+random.$(OBJEXT): {$(VPATH)}onigmo.h
+random.$(OBJEXT): {$(VPATH)}oniguruma.h
+random.$(OBJEXT): {$(VPATH)}ractor.h
+random.$(OBJEXT): {$(VPATH)}random.c
+random.$(OBJEXT): {$(VPATH)}random.h
+random.$(OBJEXT): {$(VPATH)}ruby_assert.h
+random.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+random.$(OBJEXT): {$(VPATH)}rubyparser.h
+random.$(OBJEXT): {$(VPATH)}shape.h
+random.$(OBJEXT): {$(VPATH)}siphash.c
+random.$(OBJEXT): {$(VPATH)}siphash.h
+random.$(OBJEXT): {$(VPATH)}st.h
+random.$(OBJEXT): {$(VPATH)}subst.h
+random.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+random.$(OBJEXT): {$(VPATH)}thread_native.h
+random.$(OBJEXT): {$(VPATH)}vm_core.h
+random.$(OBJEXT): {$(VPATH)}vm_opts.h
+range.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+range.$(OBJEXT): $(hdrdir)/ruby/version.h
+range.$(OBJEXT): $(top_srcdir)/internal/array.h
+range.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+range.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+range.$(OBJEXT): $(top_srcdir)/internal/bits.h
+range.$(OBJEXT): $(top_srcdir)/internal/compar.h
+range.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+range.$(OBJEXT): $(top_srcdir)/internal/enum.h
+range.$(OBJEXT): $(top_srcdir)/internal/enumerator.h
+range.$(OBJEXT): $(top_srcdir)/internal/error.h
+range.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+range.$(OBJEXT): $(top_srcdir)/internal/gc.h
+range.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+range.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+range.$(OBJEXT): $(top_srcdir)/internal/range.h
+range.$(OBJEXT): $(top_srcdir)/internal/serial.h
+range.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+range.$(OBJEXT): $(top_srcdir)/internal/string.h
+range.$(OBJEXT): $(top_srcdir)/internal/struct.h
+range.$(OBJEXT): $(top_srcdir)/internal/vm.h
+range.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+range.$(OBJEXT): {$(VPATH)}assert.h
+range.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+range.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+range.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+range.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+range.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+range.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+range.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+range.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+range.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+range.$(OBJEXT): {$(VPATH)}config.h
+range.$(OBJEXT): {$(VPATH)}defines.h
+range.$(OBJEXT): {$(VPATH)}encindex.h
+range.$(OBJEXT): {$(VPATH)}encoding.h
+range.$(OBJEXT): {$(VPATH)}id.h
+range.$(OBJEXT): {$(VPATH)}id_table.h
+range.$(OBJEXT): {$(VPATH)}intern.h
+range.$(OBJEXT): {$(VPATH)}internal.h
+range.$(OBJEXT): {$(VPATH)}internal/abi.h
+range.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+range.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+range.$(OBJEXT): {$(VPATH)}internal/assume.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+range.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+range.$(OBJEXT): {$(VPATH)}internal/cast.h
+range.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+range.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+range.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+range.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+range.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+range.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+range.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+range.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+range.$(OBJEXT): {$(VPATH)}internal/config.h
+range.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+range.$(OBJEXT): {$(VPATH)}internal/core.h
+range.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+range.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+range.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+range.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+range.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+range.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+range.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+range.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+range.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+range.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+range.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+range.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+range.$(OBJEXT): {$(VPATH)}internal/ctype.h
+range.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+range.$(OBJEXT): {$(VPATH)}internal/dosish.h
+range.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+range.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+range.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+range.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+range.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+range.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+range.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+range.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+range.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+range.$(OBJEXT): {$(VPATH)}internal/error.h
+range.$(OBJEXT): {$(VPATH)}internal/eval.h
+range.$(OBJEXT): {$(VPATH)}internal/event.h
+range.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+range.$(OBJEXT): {$(VPATH)}internal/gc.h
+range.$(OBJEXT): {$(VPATH)}internal/glob.h
+range.$(OBJEXT): {$(VPATH)}internal/globals.h
+range.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+range.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+range.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+range.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+range.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+range.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+range.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+range.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+range.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+range.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+range.$(OBJEXT): {$(VPATH)}internal/iterator.h
+range.$(OBJEXT): {$(VPATH)}internal/memory.h
+range.$(OBJEXT): {$(VPATH)}internal/method.h
+range.$(OBJEXT): {$(VPATH)}internal/module.h
+range.$(OBJEXT): {$(VPATH)}internal/newobj.h
+range.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+range.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+range.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+range.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+range.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+range.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+range.$(OBJEXT): {$(VPATH)}internal/symbol.h
+range.$(OBJEXT): {$(VPATH)}internal/value.h
+range.$(OBJEXT): {$(VPATH)}internal/value_type.h
+range.$(OBJEXT): {$(VPATH)}internal/variable.h
+range.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+range.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+range.$(OBJEXT): {$(VPATH)}missing.h
+range.$(OBJEXT): {$(VPATH)}onigmo.h
+range.$(OBJEXT): {$(VPATH)}oniguruma.h
+range.$(OBJEXT): {$(VPATH)}range.c
+range.$(OBJEXT): {$(VPATH)}shape.h
+range.$(OBJEXT): {$(VPATH)}st.h
+range.$(OBJEXT): {$(VPATH)}subst.h
+rational.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+rational.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+rational.$(OBJEXT): $(CCAN_DIR)/list/list.h
+rational.$(OBJEXT): $(CCAN_DIR)/str/str.h
+rational.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+rational.$(OBJEXT): $(top_srcdir)/internal/array.h
+rational.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+rational.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+rational.$(OBJEXT): $(top_srcdir)/internal/bits.h
+rational.$(OBJEXT): $(top_srcdir)/internal/box.h
+rational.$(OBJEXT): $(top_srcdir)/internal/class.h
+rational.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+rational.$(OBJEXT): $(top_srcdir)/internal/complex.h
+rational.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+rational.$(OBJEXT): $(top_srcdir)/internal/gc.h
+rational.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+rational.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+rational.$(OBJEXT): $(top_srcdir)/internal/object.h
+rational.$(OBJEXT): $(top_srcdir)/internal/rational.h
+rational.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+rational.$(OBJEXT): $(top_srcdir)/internal/serial.h
+rational.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+rational.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+rational.$(OBJEXT): $(top_srcdir)/internal/variable.h
+rational.$(OBJEXT): $(top_srcdir)/internal/vm.h
+rational.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+rational.$(OBJEXT): {$(VPATH)}assert.h
+rational.$(OBJEXT): {$(VPATH)}atomic.h
+rational.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+rational.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+rational.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+rational.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+rational.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+rational.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+rational.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+rational.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+rational.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+rational.$(OBJEXT): {$(VPATH)}config.h
+rational.$(OBJEXT): {$(VPATH)}constant.h
+rational.$(OBJEXT): {$(VPATH)}defines.h
+rational.$(OBJEXT): {$(VPATH)}encoding.h
+rational.$(OBJEXT): {$(VPATH)}id.h
+rational.$(OBJEXT): {$(VPATH)}id_table.h
+rational.$(OBJEXT): {$(VPATH)}intern.h
+rational.$(OBJEXT): {$(VPATH)}internal.h
+rational.$(OBJEXT): {$(VPATH)}internal/abi.h
+rational.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+rational.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+rational.$(OBJEXT): {$(VPATH)}internal/assume.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+rational.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+rational.$(OBJEXT): {$(VPATH)}internal/cast.h
+rational.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+rational.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+rational.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+rational.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+rational.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+rational.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+rational.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+rational.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+rational.$(OBJEXT): {$(VPATH)}internal/config.h
+rational.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+rational.$(OBJEXT): {$(VPATH)}internal/core.h
+rational.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+rational.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+rational.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+rational.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+rational.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+rational.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+rational.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+rational.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+rational.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+rational.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+rational.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+rational.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+rational.$(OBJEXT): {$(VPATH)}internal/ctype.h
+rational.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+rational.$(OBJEXT): {$(VPATH)}internal/dosish.h
+rational.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+rational.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+rational.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+rational.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+rational.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+rational.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+rational.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+rational.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+rational.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+rational.$(OBJEXT): {$(VPATH)}internal/error.h
+rational.$(OBJEXT): {$(VPATH)}internal/eval.h
+rational.$(OBJEXT): {$(VPATH)}internal/event.h
+rational.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+rational.$(OBJEXT): {$(VPATH)}internal/gc.h
+rational.$(OBJEXT): {$(VPATH)}internal/glob.h
+rational.$(OBJEXT): {$(VPATH)}internal/globals.h
+rational.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+rational.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+rational.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+rational.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+rational.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+rational.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+rational.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+rational.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+rational.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+rational.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+rational.$(OBJEXT): {$(VPATH)}internal/iterator.h
+rational.$(OBJEXT): {$(VPATH)}internal/memory.h
+rational.$(OBJEXT): {$(VPATH)}internal/method.h
+rational.$(OBJEXT): {$(VPATH)}internal/module.h
+rational.$(OBJEXT): {$(VPATH)}internal/newobj.h
+rational.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+rational.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+rational.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+rational.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+rational.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+rational.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+rational.$(OBJEXT): {$(VPATH)}internal/symbol.h
+rational.$(OBJEXT): {$(VPATH)}internal/value.h
+rational.$(OBJEXT): {$(VPATH)}internal/value_type.h
+rational.$(OBJEXT): {$(VPATH)}internal/variable.h
+rational.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+rational.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+rational.$(OBJEXT): {$(VPATH)}method.h
+rational.$(OBJEXT): {$(VPATH)}missing.h
+rational.$(OBJEXT): {$(VPATH)}node.h
+rational.$(OBJEXT): {$(VPATH)}onigmo.h
+rational.$(OBJEXT): {$(VPATH)}oniguruma.h
+rational.$(OBJEXT): {$(VPATH)}rational.c
+rational.$(OBJEXT): {$(VPATH)}ruby_assert.h
+rational.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+rational.$(OBJEXT): {$(VPATH)}rubyparser.h
+rational.$(OBJEXT): {$(VPATH)}shape.h
+rational.$(OBJEXT): {$(VPATH)}st.h
+rational.$(OBJEXT): {$(VPATH)}subst.h
+rational.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+rational.$(OBJEXT): {$(VPATH)}thread_native.h
+rational.$(OBJEXT): {$(VPATH)}vm_core.h
+rational.$(OBJEXT): {$(VPATH)}vm_opts.h
+re.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+re.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+re.$(OBJEXT): $(CCAN_DIR)/list/list.h
+re.$(OBJEXT): $(CCAN_DIR)/str/str.h
+re.$(OBJEXT): $(hdrdir)/ruby.h
+re.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+re.$(OBJEXT): $(top_srcdir)/internal/array.h
+re.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+re.$(OBJEXT): $(top_srcdir)/internal/bits.h
+re.$(OBJEXT): $(top_srcdir)/internal/box.h
+re.$(OBJEXT): $(top_srcdir)/internal/class.h
+re.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+re.$(OBJEXT): $(top_srcdir)/internal/encoding.h
+re.$(OBJEXT): $(top_srcdir)/internal/error.h
+re.$(OBJEXT): $(top_srcdir)/internal/gc.h
+re.$(OBJEXT): $(top_srcdir)/internal/hash.h
+re.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+re.$(OBJEXT): $(top_srcdir)/internal/object.h
+re.$(OBJEXT): $(top_srcdir)/internal/ractor.h
+re.$(OBJEXT): $(top_srcdir)/internal/re.h
+re.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+re.$(OBJEXT): $(top_srcdir)/internal/serial.h
+re.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+re.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+re.$(OBJEXT): $(top_srcdir)/internal/string.h
+re.$(OBJEXT): $(top_srcdir)/internal/struct.h
+re.$(OBJEXT): $(top_srcdir)/internal/time.h
+re.$(OBJEXT): $(top_srcdir)/internal/variable.h
+re.$(OBJEXT): $(top_srcdir)/internal/vm.h
+re.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+re.$(OBJEXT): {$(VPATH)}assert.h
+re.$(OBJEXT): {$(VPATH)}atomic.h
+re.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+re.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+re.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+re.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+re.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+re.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+re.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+re.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+re.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+re.$(OBJEXT): {$(VPATH)}config.h
+re.$(OBJEXT): {$(VPATH)}constant.h
+re.$(OBJEXT): {$(VPATH)}defines.h
+re.$(OBJEXT): {$(VPATH)}encindex.h
+re.$(OBJEXT): {$(VPATH)}encoding.h
+re.$(OBJEXT): {$(VPATH)}hrtime.h
+re.$(OBJEXT): {$(VPATH)}id.h
+re.$(OBJEXT): {$(VPATH)}id_table.h
+re.$(OBJEXT): {$(VPATH)}intern.h
+re.$(OBJEXT): {$(VPATH)}internal.h
+re.$(OBJEXT): {$(VPATH)}internal/abi.h
+re.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+re.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+re.$(OBJEXT): {$(VPATH)}internal/assume.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+re.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+re.$(OBJEXT): {$(VPATH)}internal/cast.h
+re.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+re.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+re.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+re.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+re.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+re.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+re.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+re.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+re.$(OBJEXT): {$(VPATH)}internal/config.h
+re.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+re.$(OBJEXT): {$(VPATH)}internal/core.h
+re.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+re.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+re.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+re.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+re.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+re.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+re.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+re.$(OBJEXT): {$(VPATH)}internal/core/rmatch.h
+re.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+re.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+re.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+re.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+re.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+re.$(OBJEXT): {$(VPATH)}internal/ctype.h
+re.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+re.$(OBJEXT): {$(VPATH)}internal/dosish.h
+re.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+re.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+re.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+re.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+re.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+re.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+re.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+re.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+re.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+re.$(OBJEXT): {$(VPATH)}internal/error.h
+re.$(OBJEXT): {$(VPATH)}internal/eval.h
+re.$(OBJEXT): {$(VPATH)}internal/event.h
+re.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+re.$(OBJEXT): {$(VPATH)}internal/gc.h
+re.$(OBJEXT): {$(VPATH)}internal/glob.h
+re.$(OBJEXT): {$(VPATH)}internal/globals.h
+re.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+re.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+re.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+re.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+re.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+re.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+re.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+re.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+re.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+re.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+re.$(OBJEXT): {$(VPATH)}internal/iterator.h
+re.$(OBJEXT): {$(VPATH)}internal/memory.h
+re.$(OBJEXT): {$(VPATH)}internal/method.h
+re.$(OBJEXT): {$(VPATH)}internal/module.h
+re.$(OBJEXT): {$(VPATH)}internal/newobj.h
+re.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+re.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+re.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+re.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+re.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+re.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+re.$(OBJEXT): {$(VPATH)}internal/symbol.h
+re.$(OBJEXT): {$(VPATH)}internal/value.h
+re.$(OBJEXT): {$(VPATH)}internal/value_type.h
+re.$(OBJEXT): {$(VPATH)}internal/variable.h
+re.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+re.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+re.$(OBJEXT): {$(VPATH)}method.h
+re.$(OBJEXT): {$(VPATH)}missing.h
+re.$(OBJEXT): {$(VPATH)}node.h
+re.$(OBJEXT): {$(VPATH)}onigmo.h
+re.$(OBJEXT): {$(VPATH)}oniguruma.h
+re.$(OBJEXT): {$(VPATH)}ractor.h
+re.$(OBJEXT): {$(VPATH)}ractor_core.h
+re.$(OBJEXT): {$(VPATH)}re.c
+re.$(OBJEXT): {$(VPATH)}re.h
+re.$(OBJEXT): {$(VPATH)}regenc.h
+re.$(OBJEXT): {$(VPATH)}regex.h
+re.$(OBJEXT): {$(VPATH)}regint.h
+re.$(OBJEXT): {$(VPATH)}ruby_assert.h
+re.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+re.$(OBJEXT): {$(VPATH)}rubyparser.h
+re.$(OBJEXT): {$(VPATH)}shape.h
+re.$(OBJEXT): {$(VPATH)}st.h
+re.$(OBJEXT): {$(VPATH)}subst.h
+re.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+re.$(OBJEXT): {$(VPATH)}thread_native.h
+re.$(OBJEXT): {$(VPATH)}util.h
+re.$(OBJEXT): {$(VPATH)}vm_core.h
+re.$(OBJEXT): {$(VPATH)}vm_debug.h
+re.$(OBJEXT): {$(VPATH)}vm_opts.h
+regcomp.$(OBJEXT): $(hdrdir)/ruby.h
+regcomp.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+regcomp.$(OBJEXT): {$(VPATH)}assert.h
+regcomp.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+regcomp.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+regcomp.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+regcomp.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+regcomp.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+regcomp.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+regcomp.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+regcomp.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+regcomp.$(OBJEXT): {$(VPATH)}config.h
+regcomp.$(OBJEXT): {$(VPATH)}defines.h
+regcomp.$(OBJEXT): {$(VPATH)}intern.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/abi.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/assume.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/cast.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/config.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/ctype.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/dosish.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/error.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/eval.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/event.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/gc.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/glob.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/globals.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/iterator.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/memory.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/method.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/module.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/newobj.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/symbol.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/value.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/value_type.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/variable.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+regcomp.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+regcomp.$(OBJEXT): {$(VPATH)}missing.h
+regcomp.$(OBJEXT): {$(VPATH)}onigmo.h
+regcomp.$(OBJEXT): {$(VPATH)}regcomp.c
+regcomp.$(OBJEXT): {$(VPATH)}regenc.h
+regcomp.$(OBJEXT): {$(VPATH)}regint.h
+regcomp.$(OBJEXT): {$(VPATH)}regparse.h
+regcomp.$(OBJEXT): {$(VPATH)}st.h
+regcomp.$(OBJEXT): {$(VPATH)}subst.h
+regenc.$(OBJEXT): $(hdrdir)/ruby.h
+regenc.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+regenc.$(OBJEXT): {$(VPATH)}assert.h
+regenc.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+regenc.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+regenc.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+regenc.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+regenc.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+regenc.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+regenc.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+regenc.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+regenc.$(OBJEXT): {$(VPATH)}config.h
+regenc.$(OBJEXT): {$(VPATH)}defines.h
+regenc.$(OBJEXT): {$(VPATH)}intern.h
+regenc.$(OBJEXT): {$(VPATH)}internal/abi.h
+regenc.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+regenc.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+regenc.$(OBJEXT): {$(VPATH)}internal/assume.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+regenc.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+regenc.$(OBJEXT): {$(VPATH)}internal/cast.h
+regenc.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+regenc.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+regenc.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+regenc.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+regenc.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+regenc.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+regenc.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+regenc.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+regenc.$(OBJEXT): {$(VPATH)}internal/config.h
+regenc.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+regenc.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+regenc.$(OBJEXT): {$(VPATH)}internal/ctype.h
+regenc.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+regenc.$(OBJEXT): {$(VPATH)}internal/dosish.h
+regenc.$(OBJEXT): {$(VPATH)}internal/error.h
+regenc.$(OBJEXT): {$(VPATH)}internal/eval.h
+regenc.$(OBJEXT): {$(VPATH)}internal/event.h
+regenc.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+regenc.$(OBJEXT): {$(VPATH)}internal/gc.h
+regenc.$(OBJEXT): {$(VPATH)}internal/glob.h
+regenc.$(OBJEXT): {$(VPATH)}internal/globals.h
+regenc.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+regenc.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+regenc.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+regenc.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+regenc.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+regenc.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+regenc.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+regenc.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+regenc.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+regenc.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+regenc.$(OBJEXT): {$(VPATH)}internal/iterator.h
+regenc.$(OBJEXT): {$(VPATH)}internal/memory.h
+regenc.$(OBJEXT): {$(VPATH)}internal/method.h
+regenc.$(OBJEXT): {$(VPATH)}internal/module.h
+regenc.$(OBJEXT): {$(VPATH)}internal/newobj.h
+regenc.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+regenc.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+regenc.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+regenc.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+regenc.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+regenc.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+regenc.$(OBJEXT): {$(VPATH)}internal/symbol.h
+regenc.$(OBJEXT): {$(VPATH)}internal/value.h
+regenc.$(OBJEXT): {$(VPATH)}internal/value_type.h
+regenc.$(OBJEXT): {$(VPATH)}internal/variable.h
+regenc.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+regenc.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+regenc.$(OBJEXT): {$(VPATH)}missing.h
+regenc.$(OBJEXT): {$(VPATH)}onigmo.h
+regenc.$(OBJEXT): {$(VPATH)}regenc.c
+regenc.$(OBJEXT): {$(VPATH)}regenc.h
+regenc.$(OBJEXT): {$(VPATH)}regint.h
+regenc.$(OBJEXT): {$(VPATH)}st.h
+regenc.$(OBJEXT): {$(VPATH)}subst.h
+regerror.$(OBJEXT): $(hdrdir)/ruby.h
+regerror.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+regerror.$(OBJEXT): {$(VPATH)}assert.h
+regerror.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+regerror.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+regerror.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+regerror.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+regerror.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+regerror.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+regerror.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+regerror.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+regerror.$(OBJEXT): {$(VPATH)}config.h
+regerror.$(OBJEXT): {$(VPATH)}defines.h
+regerror.$(OBJEXT): {$(VPATH)}intern.h
+regerror.$(OBJEXT): {$(VPATH)}internal/abi.h
+regerror.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+regerror.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+regerror.$(OBJEXT): {$(VPATH)}internal/assume.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+regerror.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+regerror.$(OBJEXT): {$(VPATH)}internal/cast.h
+regerror.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+regerror.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+regerror.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+regerror.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+regerror.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+regerror.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+regerror.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+regerror.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+regerror.$(OBJEXT): {$(VPATH)}internal/config.h
+regerror.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+regerror.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+regerror.$(OBJEXT): {$(VPATH)}internal/ctype.h
+regerror.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+regerror.$(OBJEXT): {$(VPATH)}internal/dosish.h
+regerror.$(OBJEXT): {$(VPATH)}internal/error.h
+regerror.$(OBJEXT): {$(VPATH)}internal/eval.h
+regerror.$(OBJEXT): {$(VPATH)}internal/event.h
+regerror.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+regerror.$(OBJEXT): {$(VPATH)}internal/gc.h
+regerror.$(OBJEXT): {$(VPATH)}internal/glob.h
+regerror.$(OBJEXT): {$(VPATH)}internal/globals.h
+regerror.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+regerror.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+regerror.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+regerror.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+regerror.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+regerror.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+regerror.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+regerror.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+regerror.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+regerror.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+regerror.$(OBJEXT): {$(VPATH)}internal/iterator.h
+regerror.$(OBJEXT): {$(VPATH)}internal/memory.h
+regerror.$(OBJEXT): {$(VPATH)}internal/method.h
+regerror.$(OBJEXT): {$(VPATH)}internal/module.h
+regerror.$(OBJEXT): {$(VPATH)}internal/newobj.h
+regerror.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+regerror.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+regerror.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+regerror.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+regerror.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+regerror.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+regerror.$(OBJEXT): {$(VPATH)}internal/symbol.h
+regerror.$(OBJEXT): {$(VPATH)}internal/value.h
+regerror.$(OBJEXT): {$(VPATH)}internal/value_type.h
+regerror.$(OBJEXT): {$(VPATH)}internal/variable.h
+regerror.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+regerror.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+regerror.$(OBJEXT): {$(VPATH)}missing.h
+regerror.$(OBJEXT): {$(VPATH)}onigmo.h
+regerror.$(OBJEXT): {$(VPATH)}regenc.h
+regerror.$(OBJEXT): {$(VPATH)}regerror.c
+regerror.$(OBJEXT): {$(VPATH)}regint.h
+regerror.$(OBJEXT): {$(VPATH)}st.h
+regerror.$(OBJEXT): {$(VPATH)}subst.h
+regexec.$(OBJEXT): $(hdrdir)/ruby.h
+regexec.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+regexec.$(OBJEXT): {$(VPATH)}assert.h
+regexec.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+regexec.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+regexec.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+regexec.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+regexec.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+regexec.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+regexec.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+regexec.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+regexec.$(OBJEXT): {$(VPATH)}config.h
+regexec.$(OBJEXT): {$(VPATH)}defines.h
+regexec.$(OBJEXT): {$(VPATH)}intern.h
+regexec.$(OBJEXT): {$(VPATH)}internal/abi.h
+regexec.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+regexec.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+regexec.$(OBJEXT): {$(VPATH)}internal/assume.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+regexec.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+regexec.$(OBJEXT): {$(VPATH)}internal/cast.h
+regexec.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+regexec.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+regexec.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+regexec.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+regexec.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+regexec.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+regexec.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+regexec.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+regexec.$(OBJEXT): {$(VPATH)}internal/config.h
+regexec.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+regexec.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+regexec.$(OBJEXT): {$(VPATH)}internal/ctype.h
+regexec.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+regexec.$(OBJEXT): {$(VPATH)}internal/dosish.h
+regexec.$(OBJEXT): {$(VPATH)}internal/error.h
+regexec.$(OBJEXT): {$(VPATH)}internal/eval.h
+regexec.$(OBJEXT): {$(VPATH)}internal/event.h
+regexec.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+regexec.$(OBJEXT): {$(VPATH)}internal/gc.h
+regexec.$(OBJEXT): {$(VPATH)}internal/glob.h
+regexec.$(OBJEXT): {$(VPATH)}internal/globals.h
+regexec.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+regexec.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+regexec.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+regexec.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+regexec.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+regexec.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+regexec.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+regexec.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+regexec.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+regexec.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+regexec.$(OBJEXT): {$(VPATH)}internal/iterator.h
+regexec.$(OBJEXT): {$(VPATH)}internal/memory.h
+regexec.$(OBJEXT): {$(VPATH)}internal/method.h
+regexec.$(OBJEXT): {$(VPATH)}internal/module.h
+regexec.$(OBJEXT): {$(VPATH)}internal/newobj.h
+regexec.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+regexec.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+regexec.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+regexec.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+regexec.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+regexec.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+regexec.$(OBJEXT): {$(VPATH)}internal/symbol.h
+regexec.$(OBJEXT): {$(VPATH)}internal/value.h
+regexec.$(OBJEXT): {$(VPATH)}internal/value_type.h
+regexec.$(OBJEXT): {$(VPATH)}internal/variable.h
+regexec.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+regexec.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+regexec.$(OBJEXT): {$(VPATH)}missing.h
+regexec.$(OBJEXT): {$(VPATH)}onigmo.h
+regexec.$(OBJEXT): {$(VPATH)}regenc.h
+regexec.$(OBJEXT): {$(VPATH)}regexec.c
+regexec.$(OBJEXT): {$(VPATH)}regint.h
+regexec.$(OBJEXT): {$(VPATH)}st.h
+regexec.$(OBJEXT): {$(VPATH)}subst.h
+regparse.$(OBJEXT): $(hdrdir)/ruby.h
+regparse.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+regparse.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+regparse.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+regparse.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+regparse.$(OBJEXT): {$(VPATH)}assert.h
+regparse.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+regparse.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+regparse.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+regparse.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+regparse.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+regparse.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+regparse.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+regparse.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+regparse.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+regparse.$(OBJEXT): {$(VPATH)}config.h
+regparse.$(OBJEXT): {$(VPATH)}defines.h
+regparse.$(OBJEXT): {$(VPATH)}intern.h
+regparse.$(OBJEXT): {$(VPATH)}internal/abi.h
+regparse.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+regparse.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+regparse.$(OBJEXT): {$(VPATH)}internal/assume.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+regparse.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+regparse.$(OBJEXT): {$(VPATH)}internal/cast.h
+regparse.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+regparse.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+regparse.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+regparse.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+regparse.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+regparse.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+regparse.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+regparse.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+regparse.$(OBJEXT): {$(VPATH)}internal/config.h
+regparse.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+regparse.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+regparse.$(OBJEXT): {$(VPATH)}internal/ctype.h
+regparse.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+regparse.$(OBJEXT): {$(VPATH)}internal/dosish.h
+regparse.$(OBJEXT): {$(VPATH)}internal/error.h
+regparse.$(OBJEXT): {$(VPATH)}internal/eval.h
+regparse.$(OBJEXT): {$(VPATH)}internal/event.h
+regparse.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+regparse.$(OBJEXT): {$(VPATH)}internal/gc.h
+regparse.$(OBJEXT): {$(VPATH)}internal/glob.h
+regparse.$(OBJEXT): {$(VPATH)}internal/globals.h
+regparse.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+regparse.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+regparse.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+regparse.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+regparse.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+regparse.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+regparse.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+regparse.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+regparse.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+regparse.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+regparse.$(OBJEXT): {$(VPATH)}internal/iterator.h
+regparse.$(OBJEXT): {$(VPATH)}internal/memory.h
+regparse.$(OBJEXT): {$(VPATH)}internal/method.h
+regparse.$(OBJEXT): {$(VPATH)}internal/module.h
+regparse.$(OBJEXT): {$(VPATH)}internal/newobj.h
+regparse.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+regparse.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+regparse.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+regparse.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+regparse.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+regparse.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+regparse.$(OBJEXT): {$(VPATH)}internal/symbol.h
+regparse.$(OBJEXT): {$(VPATH)}internal/value.h
+regparse.$(OBJEXT): {$(VPATH)}internal/value_type.h
+regparse.$(OBJEXT): {$(VPATH)}internal/variable.h
+regparse.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+regparse.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+regparse.$(OBJEXT): {$(VPATH)}missing.h
+regparse.$(OBJEXT): {$(VPATH)}onigmo.h
+regparse.$(OBJEXT): {$(VPATH)}regenc.h
+regparse.$(OBJEXT): {$(VPATH)}regint.h
+regparse.$(OBJEXT): {$(VPATH)}regparse.c
+regparse.$(OBJEXT): {$(VPATH)}regparse.h
+regparse.$(OBJEXT): {$(VPATH)}st.h
+regparse.$(OBJEXT): {$(VPATH)}subst.h
+regsyntax.$(OBJEXT): $(hdrdir)/ruby.h
+regsyntax.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+regsyntax.$(OBJEXT): {$(VPATH)}assert.h
+regsyntax.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+regsyntax.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+regsyntax.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+regsyntax.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+regsyntax.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+regsyntax.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+regsyntax.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+regsyntax.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+regsyntax.$(OBJEXT): {$(VPATH)}config.h
+regsyntax.$(OBJEXT): {$(VPATH)}defines.h
+regsyntax.$(OBJEXT): {$(VPATH)}intern.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/abi.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/assume.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/cast.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/config.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/ctype.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/dosish.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/error.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/eval.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/event.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/gc.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/glob.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/globals.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/iterator.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/memory.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/method.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/module.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/newobj.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/symbol.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/value.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/value_type.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/variable.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+regsyntax.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+regsyntax.$(OBJEXT): {$(VPATH)}missing.h
+regsyntax.$(OBJEXT): {$(VPATH)}onigmo.h
+regsyntax.$(OBJEXT): {$(VPATH)}regenc.h
+regsyntax.$(OBJEXT): {$(VPATH)}regint.h
+regsyntax.$(OBJEXT): {$(VPATH)}regsyntax.c
+regsyntax.$(OBJEXT): {$(VPATH)}st.h
+regsyntax.$(OBJEXT): {$(VPATH)}subst.h
+ruby-runner.$(OBJEXT): {$(VPATH)}config.h
+ruby-runner.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+ruby-runner.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+ruby-runner.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+ruby-runner.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+ruby-runner.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+ruby-runner.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+ruby-runner.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+ruby-runner.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+ruby-runner.$(OBJEXT): {$(VPATH)}internal/config.h
+ruby-runner.$(OBJEXT): {$(VPATH)}ruby-runner.c
+ruby-runner.$(OBJEXT): {$(VPATH)}ruby-runner.h
+ruby.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+ruby.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+ruby.$(OBJEXT): $(CCAN_DIR)/list/list.h
+ruby.$(OBJEXT): $(CCAN_DIR)/str/str.h
+ruby.$(OBJEXT): $(hdrdir)/ruby.h
+ruby.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+ruby.$(OBJEXT): $(hdrdir)/ruby/version.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/array.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/bits.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/box.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/class.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/cmdlineopt.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/complex.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/cont.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/error.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/file.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/gc.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/inits.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/io.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/load.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/loadpath.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/missing.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/object.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/parse.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/rational.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/serial.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/string.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/struct.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/thread.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/variable.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/vm.h
+ruby.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/ast.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/defines.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/node.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/options.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/pack.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/parser.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/prism.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+ruby.$(OBJEXT): $(top_srcdir)/prism/version.h
+ruby.$(OBJEXT): {$(VPATH)}assert.h
+ruby.$(OBJEXT): {$(VPATH)}atomic.h
+ruby.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+ruby.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+ruby.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+ruby.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+ruby.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+ruby.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+ruby.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+ruby.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+ruby.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+ruby.$(OBJEXT): {$(VPATH)}config.h
+ruby.$(OBJEXT): {$(VPATH)}constant.h
+ruby.$(OBJEXT): {$(VPATH)}debug_counter.h
+ruby.$(OBJEXT): {$(VPATH)}defines.h
+ruby.$(OBJEXT): {$(VPATH)}dln.h
+ruby.$(OBJEXT): {$(VPATH)}encindex.h
+ruby.$(OBJEXT): {$(VPATH)}encoding.h
+ruby.$(OBJEXT): {$(VPATH)}eval_intern.h
+ruby.$(OBJEXT): {$(VPATH)}id.h
+ruby.$(OBJEXT): {$(VPATH)}id_table.h
+ruby.$(OBJEXT): {$(VPATH)}intern.h
+ruby.$(OBJEXT): {$(VPATH)}internal.h
+ruby.$(OBJEXT): {$(VPATH)}internal/abi.h
+ruby.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+ruby.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+ruby.$(OBJEXT): {$(VPATH)}internal/assume.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+ruby.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+ruby.$(OBJEXT): {$(VPATH)}internal/cast.h
+ruby.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+ruby.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+ruby.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+ruby.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+ruby.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+ruby.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+ruby.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+ruby.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+ruby.$(OBJEXT): {$(VPATH)}internal/config.h
+ruby.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+ruby.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+ruby.$(OBJEXT): {$(VPATH)}internal/ctype.h
+ruby.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+ruby.$(OBJEXT): {$(VPATH)}internal/dosish.h
+ruby.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+ruby.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+ruby.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+ruby.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+ruby.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+ruby.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+ruby.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+ruby.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+ruby.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+ruby.$(OBJEXT): {$(VPATH)}internal/error.h
+ruby.$(OBJEXT): {$(VPATH)}internal/eval.h
+ruby.$(OBJEXT): {$(VPATH)}internal/event.h
+ruby.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+ruby.$(OBJEXT): {$(VPATH)}internal/gc.h
+ruby.$(OBJEXT): {$(VPATH)}internal/glob.h
+ruby.$(OBJEXT): {$(VPATH)}internal/globals.h
+ruby.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+ruby.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+ruby.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+ruby.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+ruby.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+ruby.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+ruby.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+ruby.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+ruby.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+ruby.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+ruby.$(OBJEXT): {$(VPATH)}internal/iterator.h
+ruby.$(OBJEXT): {$(VPATH)}internal/memory.h
+ruby.$(OBJEXT): {$(VPATH)}internal/method.h
+ruby.$(OBJEXT): {$(VPATH)}internal/module.h
+ruby.$(OBJEXT): {$(VPATH)}internal/newobj.h
+ruby.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+ruby.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+ruby.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+ruby.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+ruby.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+ruby.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+ruby.$(OBJEXT): {$(VPATH)}internal/symbol.h
+ruby.$(OBJEXT): {$(VPATH)}internal/value.h
+ruby.$(OBJEXT): {$(VPATH)}internal/value_type.h
+ruby.$(OBJEXT): {$(VPATH)}internal/variable.h
+ruby.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+ruby.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+ruby.$(OBJEXT): {$(VPATH)}io.h
+ruby.$(OBJEXT): {$(VPATH)}iseq.h
+ruby.$(OBJEXT): {$(VPATH)}method.h
+ruby.$(OBJEXT): {$(VPATH)}missing.h
+ruby.$(OBJEXT): {$(VPATH)}node.h
+ruby.$(OBJEXT): {$(VPATH)}onigmo.h
+ruby.$(OBJEXT): {$(VPATH)}oniguruma.h
+ruby.$(OBJEXT): {$(VPATH)}prism_compile.h
+ruby.$(OBJEXT): {$(VPATH)}ruby.c
+ruby.$(OBJEXT): {$(VPATH)}ruby_assert.h
+ruby.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+ruby.$(OBJEXT): {$(VPATH)}rubyparser.h
+ruby.$(OBJEXT): {$(VPATH)}shape.h
+ruby.$(OBJEXT): {$(VPATH)}st.h
+ruby.$(OBJEXT): {$(VPATH)}subst.h
+ruby.$(OBJEXT): {$(VPATH)}thread.h
+ruby.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+ruby.$(OBJEXT): {$(VPATH)}thread_native.h
+ruby.$(OBJEXT): {$(VPATH)}util.h
+ruby.$(OBJEXT): {$(VPATH)}vm_core.h
+ruby.$(OBJEXT): {$(VPATH)}vm_opts.h
+ruby.$(OBJEXT): {$(VPATH)}yjit.h
+ruby_parser.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/array.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/bits.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/complex.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/error.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/parse.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/rational.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/re.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/serial.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/string.h
+ruby_parser.$(OBJEXT): $(top_srcdir)/internal/vm.h
+ruby_parser.$(OBJEXT): {$(VPATH)}assert.h
+ruby_parser.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+ruby_parser.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+ruby_parser.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+ruby_parser.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+ruby_parser.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+ruby_parser.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+ruby_parser.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+ruby_parser.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+ruby_parser.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+ruby_parser.$(OBJEXT): {$(VPATH)}config.h
+ruby_parser.$(OBJEXT): {$(VPATH)}defines.h
+ruby_parser.$(OBJEXT): {$(VPATH)}encindex.h
+ruby_parser.$(OBJEXT): {$(VPATH)}encoding.h
+ruby_parser.$(OBJEXT): {$(VPATH)}intern.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/abi.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/assume.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/cast.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/config.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/ctype.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/dosish.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/error.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/eval.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/event.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/gc.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/glob.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/globals.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/iterator.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/memory.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/method.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/module.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/newobj.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/symbol.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/value.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/value_type.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/variable.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+ruby_parser.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+ruby_parser.$(OBJEXT): {$(VPATH)}missing.h
+ruby_parser.$(OBJEXT): {$(VPATH)}node.h
+ruby_parser.$(OBJEXT): {$(VPATH)}onigmo.h
+ruby_parser.$(OBJEXT): {$(VPATH)}oniguruma.h
+ruby_parser.$(OBJEXT): {$(VPATH)}ruby_assert.h
+ruby_parser.$(OBJEXT): {$(VPATH)}ruby_parser.c
+ruby_parser.$(OBJEXT): {$(VPATH)}rubyparser.h
+ruby_parser.$(OBJEXT): {$(VPATH)}st.h
+ruby_parser.$(OBJEXT): {$(VPATH)}subst.h
+scheduler.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+scheduler.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+scheduler.$(OBJEXT): $(CCAN_DIR)/list/list.h
+scheduler.$(OBJEXT): $(CCAN_DIR)/str/str.h
+scheduler.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/array.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/box.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/gc.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/serial.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/thread.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/variable.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/vm.h
+scheduler.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+scheduler.$(OBJEXT): {$(VPATH)}assert.h
+scheduler.$(OBJEXT): {$(VPATH)}atomic.h
+scheduler.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+scheduler.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+scheduler.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+scheduler.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+scheduler.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+scheduler.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+scheduler.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+scheduler.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+scheduler.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+scheduler.$(OBJEXT): {$(VPATH)}config.h
+scheduler.$(OBJEXT): {$(VPATH)}constant.h
+scheduler.$(OBJEXT): {$(VPATH)}defines.h
+scheduler.$(OBJEXT): {$(VPATH)}encoding.h
+scheduler.$(OBJEXT): {$(VPATH)}eval_intern.h
+scheduler.$(OBJEXT): {$(VPATH)}fiber/scheduler.h
+scheduler.$(OBJEXT): {$(VPATH)}id.h
+scheduler.$(OBJEXT): {$(VPATH)}id_table.h
+scheduler.$(OBJEXT): {$(VPATH)}intern.h
+scheduler.$(OBJEXT): {$(VPATH)}internal.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/abi.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/assume.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/cast.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/config.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/ctype.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/dosish.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/error.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/eval.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/event.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/gc.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/glob.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/globals.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/iterator.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/memory.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/method.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/module.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/newobj.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/symbol.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/value.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/value_type.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/variable.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+scheduler.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+scheduler.$(OBJEXT): {$(VPATH)}io.h
+scheduler.$(OBJEXT): {$(VPATH)}io/buffer.h
+scheduler.$(OBJEXT): {$(VPATH)}method.h
+scheduler.$(OBJEXT): {$(VPATH)}missing.h
+scheduler.$(OBJEXT): {$(VPATH)}node.h
+scheduler.$(OBJEXT): {$(VPATH)}onigmo.h
+scheduler.$(OBJEXT): {$(VPATH)}oniguruma.h
+scheduler.$(OBJEXT): {$(VPATH)}ruby_assert.h
+scheduler.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+scheduler.$(OBJEXT): {$(VPATH)}rubyparser.h
+scheduler.$(OBJEXT): {$(VPATH)}scheduler.c
+scheduler.$(OBJEXT): {$(VPATH)}shape.h
+scheduler.$(OBJEXT): {$(VPATH)}st.h
+scheduler.$(OBJEXT): {$(VPATH)}subst.h
+scheduler.$(OBJEXT): {$(VPATH)}thread.h
+scheduler.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+scheduler.$(OBJEXT): {$(VPATH)}thread_native.h
+scheduler.$(OBJEXT): {$(VPATH)}vm_core.h
+scheduler.$(OBJEXT): {$(VPATH)}vm_opts.h
+set.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+set.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+set.$(OBJEXT): $(CCAN_DIR)/list/list.h
+set.$(OBJEXT): $(CCAN_DIR)/str/str.h
+set.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+set.$(OBJEXT): $(top_srcdir)/internal/array.h
+set.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+set.$(OBJEXT): $(top_srcdir)/internal/bits.h
+set.$(OBJEXT): $(top_srcdir)/internal/box.h
+set.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+set.$(OBJEXT): $(top_srcdir)/internal/error.h
+set.$(OBJEXT): $(top_srcdir)/internal/gc.h
+set.$(OBJEXT): $(top_srcdir)/internal/hash.h
+set.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+set.$(OBJEXT): $(top_srcdir)/internal/proc.h
+set.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+set.$(OBJEXT): $(top_srcdir)/internal/serial.h
+set.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+set.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+set.$(OBJEXT): $(top_srcdir)/internal/string.h
+set.$(OBJEXT): $(top_srcdir)/internal/struct.h
+set.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+set.$(OBJEXT): $(top_srcdir)/internal/variable.h
+set.$(OBJEXT): $(top_srcdir)/internal/vm.h
+set.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+set.$(OBJEXT): {$(VPATH)}assert.h
+set.$(OBJEXT): {$(VPATH)}atomic.h
+set.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+set.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+set.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+set.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+set.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+set.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+set.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+set.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+set.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+set.$(OBJEXT): {$(VPATH)}config.h
+set.$(OBJEXT): {$(VPATH)}constant.h
+set.$(OBJEXT): {$(VPATH)}defines.h
+set.$(OBJEXT): {$(VPATH)}encindex.h
+set.$(OBJEXT): {$(VPATH)}encoding.h
+set.$(OBJEXT): {$(VPATH)}id.h
+set.$(OBJEXT): {$(VPATH)}id_table.h
+set.$(OBJEXT): {$(VPATH)}intern.h
+set.$(OBJEXT): {$(VPATH)}internal.h
+set.$(OBJEXT): {$(VPATH)}internal/abi.h
+set.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+set.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+set.$(OBJEXT): {$(VPATH)}internal/assume.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+set.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+set.$(OBJEXT): {$(VPATH)}internal/cast.h
+set.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+set.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+set.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+set.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+set.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+set.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+set.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+set.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+set.$(OBJEXT): {$(VPATH)}internal/config.h
+set.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+set.$(OBJEXT): {$(VPATH)}internal/core.h
+set.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+set.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+set.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+set.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+set.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+set.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+set.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+set.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+set.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+set.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+set.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+set.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+set.$(OBJEXT): {$(VPATH)}internal/ctype.h
+set.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+set.$(OBJEXT): {$(VPATH)}internal/dosish.h
+set.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+set.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+set.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+set.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+set.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+set.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+set.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+set.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+set.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+set.$(OBJEXT): {$(VPATH)}internal/error.h
+set.$(OBJEXT): {$(VPATH)}internal/eval.h
+set.$(OBJEXT): {$(VPATH)}internal/event.h
+set.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+set.$(OBJEXT): {$(VPATH)}internal/gc.h
+set.$(OBJEXT): {$(VPATH)}internal/glob.h
+set.$(OBJEXT): {$(VPATH)}internal/globals.h
+set.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+set.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+set.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+set.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+set.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+set.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+set.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+set.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+set.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+set.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+set.$(OBJEXT): {$(VPATH)}internal/iterator.h
+set.$(OBJEXT): {$(VPATH)}internal/memory.h
+set.$(OBJEXT): {$(VPATH)}internal/method.h
+set.$(OBJEXT): {$(VPATH)}internal/module.h
+set.$(OBJEXT): {$(VPATH)}internal/newobj.h
+set.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+set.$(OBJEXT): {$(VPATH)}internal/set_table.h
+set.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+set.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+set.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+set.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+set.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+set.$(OBJEXT): {$(VPATH)}internal/symbol.h
+set.$(OBJEXT): {$(VPATH)}internal/value.h
+set.$(OBJEXT): {$(VPATH)}internal/value_type.h
+set.$(OBJEXT): {$(VPATH)}internal/variable.h
+set.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+set.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+set.$(OBJEXT): {$(VPATH)}method.h
+set.$(OBJEXT): {$(VPATH)}missing.h
+set.$(OBJEXT): {$(VPATH)}node.h
+set.$(OBJEXT): {$(VPATH)}onigmo.h
+set.$(OBJEXT): {$(VPATH)}oniguruma.h
+set.$(OBJEXT): {$(VPATH)}ruby_assert.h
+set.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+set.$(OBJEXT): {$(VPATH)}rubyparser.h
+set.$(OBJEXT): {$(VPATH)}set.c
+set.$(OBJEXT): {$(VPATH)}shape.h
+set.$(OBJEXT): {$(VPATH)}st.h
+set.$(OBJEXT): {$(VPATH)}subst.h
+set.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+set.$(OBJEXT): {$(VPATH)}thread_native.h
+set.$(OBJEXT): {$(VPATH)}vm_core.h
+set.$(OBJEXT): {$(VPATH)}vm_opts.h
+setproctitle.$(OBJEXT): $(hdrdir)/ruby.h
+setproctitle.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+setproctitle.$(OBJEXT): {$(VPATH)}assert.h
+setproctitle.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+setproctitle.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+setproctitle.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+setproctitle.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+setproctitle.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+setproctitle.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+setproctitle.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+setproctitle.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+setproctitle.$(OBJEXT): {$(VPATH)}config.h
+setproctitle.$(OBJEXT): {$(VPATH)}defines.h
+setproctitle.$(OBJEXT): {$(VPATH)}intern.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/abi.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/assume.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/cast.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/config.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/ctype.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/dosish.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/error.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/eval.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/event.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/gc.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/glob.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/globals.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/iterator.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/memory.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/method.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/module.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/newobj.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/symbol.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/value.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/value_type.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/variable.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+setproctitle.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+setproctitle.$(OBJEXT): {$(VPATH)}missing.h
+setproctitle.$(OBJEXT): {$(VPATH)}setproctitle.c
+setproctitle.$(OBJEXT): {$(VPATH)}st.h
+setproctitle.$(OBJEXT): {$(VPATH)}subst.h
+setproctitle.$(OBJEXT): {$(VPATH)}util.h
+shape.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+shape.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+shape.$(OBJEXT): $(CCAN_DIR)/list/list.h
+shape.$(OBJEXT): $(CCAN_DIR)/str/str.h
+shape.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+shape.$(OBJEXT): $(hdrdir)/ruby/version.h
+shape.$(OBJEXT): $(top_srcdir)/internal/array.h
+shape.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+shape.$(OBJEXT): $(top_srcdir)/internal/box.h
+shape.$(OBJEXT): $(top_srcdir)/internal/class.h
+shape.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+shape.$(OBJEXT): $(top_srcdir)/internal/error.h
+shape.$(OBJEXT): $(top_srcdir)/internal/gc.h
+shape.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+shape.$(OBJEXT): $(top_srcdir)/internal/object.h
+shape.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+shape.$(OBJEXT): $(top_srcdir)/internal/serial.h
+shape.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+shape.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+shape.$(OBJEXT): $(top_srcdir)/internal/string.h
+shape.$(OBJEXT): $(top_srcdir)/internal/struct.h
+shape.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+shape.$(OBJEXT): $(top_srcdir)/internal/variable.h
+shape.$(OBJEXT): $(top_srcdir)/internal/vm.h
+shape.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+shape.$(OBJEXT): {$(VPATH)}assert.h
+shape.$(OBJEXT): {$(VPATH)}atomic.h
+shape.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+shape.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+shape.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+shape.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+shape.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+shape.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+shape.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+shape.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+shape.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+shape.$(OBJEXT): {$(VPATH)}config.h
+shape.$(OBJEXT): {$(VPATH)}constant.h
+shape.$(OBJEXT): {$(VPATH)}debug_counter.h
+shape.$(OBJEXT): {$(VPATH)}defines.h
+shape.$(OBJEXT): {$(VPATH)}encindex.h
+shape.$(OBJEXT): {$(VPATH)}encoding.h
+shape.$(OBJEXT): {$(VPATH)}id.h
+shape.$(OBJEXT): {$(VPATH)}id_table.h
+shape.$(OBJEXT): {$(VPATH)}intern.h
+shape.$(OBJEXT): {$(VPATH)}internal.h
+shape.$(OBJEXT): {$(VPATH)}internal/abi.h
+shape.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+shape.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+shape.$(OBJEXT): {$(VPATH)}internal/assume.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+shape.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+shape.$(OBJEXT): {$(VPATH)}internal/cast.h
+shape.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+shape.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+shape.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+shape.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+shape.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+shape.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+shape.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+shape.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+shape.$(OBJEXT): {$(VPATH)}internal/config.h
+shape.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+shape.$(OBJEXT): {$(VPATH)}internal/core.h
+shape.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+shape.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+shape.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+shape.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+shape.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+shape.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+shape.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+shape.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+shape.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+shape.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+shape.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+shape.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+shape.$(OBJEXT): {$(VPATH)}internal/ctype.h
+shape.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+shape.$(OBJEXT): {$(VPATH)}internal/dosish.h
+shape.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+shape.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+shape.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+shape.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+shape.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+shape.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+shape.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+shape.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+shape.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+shape.$(OBJEXT): {$(VPATH)}internal/error.h
+shape.$(OBJEXT): {$(VPATH)}internal/eval.h
+shape.$(OBJEXT): {$(VPATH)}internal/event.h
+shape.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+shape.$(OBJEXT): {$(VPATH)}internal/gc.h
+shape.$(OBJEXT): {$(VPATH)}internal/glob.h
+shape.$(OBJEXT): {$(VPATH)}internal/globals.h
+shape.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+shape.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+shape.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+shape.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+shape.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+shape.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+shape.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+shape.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+shape.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+shape.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+shape.$(OBJEXT): {$(VPATH)}internal/iterator.h
+shape.$(OBJEXT): {$(VPATH)}internal/memory.h
+shape.$(OBJEXT): {$(VPATH)}internal/method.h
+shape.$(OBJEXT): {$(VPATH)}internal/module.h
+shape.$(OBJEXT): {$(VPATH)}internal/newobj.h
+shape.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+shape.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+shape.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+shape.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+shape.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+shape.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+shape.$(OBJEXT): {$(VPATH)}internal/symbol.h
+shape.$(OBJEXT): {$(VPATH)}internal/value.h
+shape.$(OBJEXT): {$(VPATH)}internal/value_type.h
+shape.$(OBJEXT): {$(VPATH)}internal/variable.h
+shape.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+shape.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+shape.$(OBJEXT): {$(VPATH)}method.h
+shape.$(OBJEXT): {$(VPATH)}missing.h
+shape.$(OBJEXT): {$(VPATH)}node.h
+shape.$(OBJEXT): {$(VPATH)}onigmo.h
+shape.$(OBJEXT): {$(VPATH)}oniguruma.h
+shape.$(OBJEXT): {$(VPATH)}ruby_assert.h
+shape.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+shape.$(OBJEXT): {$(VPATH)}rubyparser.h
+shape.$(OBJEXT): {$(VPATH)}shape.c
+shape.$(OBJEXT): {$(VPATH)}shape.h
+shape.$(OBJEXT): {$(VPATH)}st.h
+shape.$(OBJEXT): {$(VPATH)}subst.h
+shape.$(OBJEXT): {$(VPATH)}symbol.h
+shape.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+shape.$(OBJEXT): {$(VPATH)}thread_native.h
+shape.$(OBJEXT): {$(VPATH)}variable.h
+shape.$(OBJEXT): {$(VPATH)}vm_core.h
+shape.$(OBJEXT): {$(VPATH)}vm_debug.h
+shape.$(OBJEXT): {$(VPATH)}vm_opts.h
+shape.$(OBJEXT): {$(VPATH)}vm_sync.h
+signal.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+signal.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+signal.$(OBJEXT): $(CCAN_DIR)/list/list.h
+signal.$(OBJEXT): $(CCAN_DIR)/str/str.h
+signal.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+signal.$(OBJEXT): $(hdrdir)/ruby/version.h
+signal.$(OBJEXT): $(top_srcdir)/internal/array.h
+signal.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+signal.$(OBJEXT): $(top_srcdir)/internal/box.h
+signal.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+signal.$(OBJEXT): $(top_srcdir)/internal/error.h
+signal.$(OBJEXT): $(top_srcdir)/internal/eval.h
+signal.$(OBJEXT): $(top_srcdir)/internal/gc.h
+signal.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+signal.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+signal.$(OBJEXT): $(top_srcdir)/internal/serial.h
+signal.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+signal.$(OBJEXT): $(top_srcdir)/internal/signal.h
+signal.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+signal.$(OBJEXT): $(top_srcdir)/internal/string.h
+signal.$(OBJEXT): $(top_srcdir)/internal/thread.h
+signal.$(OBJEXT): $(top_srcdir)/internal/variable.h
+signal.$(OBJEXT): $(top_srcdir)/internal/vm.h
+signal.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+signal.$(OBJEXT): {$(VPATH)}assert.h
+signal.$(OBJEXT): {$(VPATH)}atomic.h
+signal.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+signal.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+signal.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+signal.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+signal.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+signal.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+signal.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+signal.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+signal.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+signal.$(OBJEXT): {$(VPATH)}config.h
+signal.$(OBJEXT): {$(VPATH)}constant.h
+signal.$(OBJEXT): {$(VPATH)}debug_counter.h
+signal.$(OBJEXT): {$(VPATH)}defines.h
+signal.$(OBJEXT): {$(VPATH)}encindex.h
+signal.$(OBJEXT): {$(VPATH)}encoding.h
+signal.$(OBJEXT): {$(VPATH)}eval_intern.h
+signal.$(OBJEXT): {$(VPATH)}id.h
+signal.$(OBJEXT): {$(VPATH)}id_table.h
+signal.$(OBJEXT): {$(VPATH)}intern.h
+signal.$(OBJEXT): {$(VPATH)}internal.h
+signal.$(OBJEXT): {$(VPATH)}internal/abi.h
+signal.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+signal.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+signal.$(OBJEXT): {$(VPATH)}internal/assume.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/nonstring.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+signal.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+signal.$(OBJEXT): {$(VPATH)}internal/cast.h
+signal.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+signal.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+signal.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+signal.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+signal.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+signal.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+signal.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+signal.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+signal.$(OBJEXT): {$(VPATH)}internal/config.h
+signal.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+signal.$(OBJEXT): {$(VPATH)}internal/core.h
+signal.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+signal.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+signal.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+signal.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+signal.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+signal.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+signal.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+signal.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+signal.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+signal.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+signal.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+signal.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+signal.$(OBJEXT): {$(VPATH)}internal/ctype.h
+signal.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+signal.$(OBJEXT): {$(VPATH)}internal/dosish.h
+signal.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+signal.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+signal.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+signal.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+signal.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+signal.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+signal.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+signal.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+signal.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+signal.$(OBJEXT): {$(VPATH)}internal/error.h
+signal.$(OBJEXT): {$(VPATH)}internal/eval.h
+signal.$(OBJEXT): {$(VPATH)}internal/event.h
+signal.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+signal.$(OBJEXT): {$(VPATH)}internal/gc.h
+signal.$(OBJEXT): {$(VPATH)}internal/glob.h
+signal.$(OBJEXT): {$(VPATH)}internal/globals.h
+signal.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+signal.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+signal.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+signal.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+signal.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+signal.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+signal.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+signal.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+signal.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+signal.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+signal.$(OBJEXT): {$(VPATH)}internal/iterator.h
+signal.$(OBJEXT): {$(VPATH)}internal/memory.h
+signal.$(OBJEXT): {$(VPATH)}internal/method.h
+signal.$(OBJEXT): {$(VPATH)}internal/module.h
+signal.$(OBJEXT): {$(VPATH)}internal/newobj.h
+signal.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+signal.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+signal.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+signal.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+signal.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+signal.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+signal.$(OBJEXT): {$(VPATH)}internal/symbol.h
+signal.$(OBJEXT): {$(VPATH)}internal/value.h
+signal.$(OBJEXT): {$(VPATH)}internal/value_type.h
+signal.$(OBJEXT): {$(VPATH)}internal/variable.h
+signal.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+signal.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+signal.$(OBJEXT): {$(VPATH)}method.h
+signal.$(OBJEXT): {$(VPATH)}missing.h
+signal.$(OBJEXT): {$(VPATH)}node.h
+signal.$(OBJEXT): {$(VPATH)}onigmo.h
+signal.$(OBJEXT): {$(VPATH)}oniguruma.h
+signal.$(OBJEXT): {$(VPATH)}ractor.h
+signal.$(OBJEXT): {$(VPATH)}ractor_core.h
+signal.$(OBJEXT): {$(VPATH)}ruby_assert.h
+signal.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+signal.$(OBJEXT): {$(VPATH)}rubyparser.h
+signal.$(OBJEXT): {$(VPATH)}shape.h
+signal.$(OBJEXT): {$(VPATH)}signal.c
+signal.$(OBJEXT): {$(VPATH)}st.h
+signal.$(OBJEXT): {$(VPATH)}subst.h
+signal.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+signal.$(OBJEXT): {$(VPATH)}thread_native.h
+signal.$(OBJEXT): {$(VPATH)}vm_core.h
+signal.$(OBJEXT): {$(VPATH)}vm_debug.h
+signal.$(OBJEXT): {$(VPATH)}vm_opts.h
+sprintf.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+sprintf.$(OBJEXT): $(hdrdir)/ruby/version.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/bits.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/class.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/error.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/gc.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/hash.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/object.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/serial.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/string.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/variable.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/vm.h
+sprintf.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+sprintf.$(OBJEXT): {$(VPATH)}assert.h
+sprintf.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+sprintf.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+sprintf.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+sprintf.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+sprintf.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+sprintf.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+sprintf.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+sprintf.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+sprintf.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+sprintf.$(OBJEXT): {$(VPATH)}config.h
+sprintf.$(OBJEXT): {$(VPATH)}constant.h
+sprintf.$(OBJEXT): {$(VPATH)}defines.h
+sprintf.$(OBJEXT): {$(VPATH)}encindex.h
+sprintf.$(OBJEXT): {$(VPATH)}encoding.h
+sprintf.$(OBJEXT): {$(VPATH)}id.h
+sprintf.$(OBJEXT): {$(VPATH)}id_table.h
+sprintf.$(OBJEXT): {$(VPATH)}intern.h
+sprintf.$(OBJEXT): {$(VPATH)}internal.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/abi.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/assume.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/cast.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/config.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/rmatch.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/ctype.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/dosish.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/error.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/eval.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/event.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/gc.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/glob.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/globals.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/iterator.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/memory.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/method.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/module.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/newobj.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/symbol.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/value.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/value_type.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/variable.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+sprintf.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+sprintf.$(OBJEXT): {$(VPATH)}missing.h
+sprintf.$(OBJEXT): {$(VPATH)}onigmo.h
+sprintf.$(OBJEXT): {$(VPATH)}oniguruma.h
+sprintf.$(OBJEXT): {$(VPATH)}re.h
+sprintf.$(OBJEXT): {$(VPATH)}regex.h
+sprintf.$(OBJEXT): {$(VPATH)}shape.h
+sprintf.$(OBJEXT): {$(VPATH)}sprintf.c
+sprintf.$(OBJEXT): {$(VPATH)}st.h
+sprintf.$(OBJEXT): {$(VPATH)}subst.h
+sprintf.$(OBJEXT): {$(VPATH)}util.h
+sprintf.$(OBJEXT): {$(VPATH)}vsnprintf.c
+st.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+st.$(OBJEXT): $(top_srcdir)/internal/bits.h
+st.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+st.$(OBJEXT): $(top_srcdir)/internal/hash.h
+st.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+st.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+st.$(OBJEXT): $(top_srcdir)/internal/st.h
+st.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+st.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+st.$(OBJEXT): {$(VPATH)}assert.h
+st.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+st.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+st.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+st.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+st.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+st.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+st.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+st.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+st.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+st.$(OBJEXT): {$(VPATH)}config.h
+st.$(OBJEXT): {$(VPATH)}defines.h
+st.$(OBJEXT): {$(VPATH)}intern.h
+st.$(OBJEXT): {$(VPATH)}internal.h
+st.$(OBJEXT): {$(VPATH)}internal/abi.h
+st.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+st.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+st.$(OBJEXT): {$(VPATH)}internal/assume.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+st.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+st.$(OBJEXT): {$(VPATH)}internal/cast.h
+st.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+st.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+st.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+st.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+st.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+st.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+st.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+st.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+st.$(OBJEXT): {$(VPATH)}internal/config.h
+st.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+st.$(OBJEXT): {$(VPATH)}internal/core.h
+st.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+st.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+st.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+st.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+st.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+st.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+st.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+st.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+st.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+st.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+st.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+st.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+st.$(OBJEXT): {$(VPATH)}internal/ctype.h
+st.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+st.$(OBJEXT): {$(VPATH)}internal/dosish.h
+st.$(OBJEXT): {$(VPATH)}internal/error.h
+st.$(OBJEXT): {$(VPATH)}internal/eval.h
+st.$(OBJEXT): {$(VPATH)}internal/event.h
+st.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+st.$(OBJEXT): {$(VPATH)}internal/gc.h
+st.$(OBJEXT): {$(VPATH)}internal/glob.h
+st.$(OBJEXT): {$(VPATH)}internal/globals.h
+st.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+st.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+st.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+st.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+st.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+st.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+st.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+st.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+st.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+st.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+st.$(OBJEXT): {$(VPATH)}internal/iterator.h
+st.$(OBJEXT): {$(VPATH)}internal/memory.h
+st.$(OBJEXT): {$(VPATH)}internal/method.h
+st.$(OBJEXT): {$(VPATH)}internal/module.h
+st.$(OBJEXT): {$(VPATH)}internal/newobj.h
+st.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+st.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+st.$(OBJEXT): {$(VPATH)}internal/st.h
+st.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+st.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+st.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+st.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+st.$(OBJEXT): {$(VPATH)}internal/symbol.h
+st.$(OBJEXT): {$(VPATH)}internal/value.h
+st.$(OBJEXT): {$(VPATH)}internal/value_type.h
+st.$(OBJEXT): {$(VPATH)}internal/variable.h
+st.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+st.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+st.$(OBJEXT): {$(VPATH)}missing.h
+st.$(OBJEXT): {$(VPATH)}ruby_assert.h
+st.$(OBJEXT): {$(VPATH)}st.c
+st.$(OBJEXT): {$(VPATH)}st.h
+st.$(OBJEXT): {$(VPATH)}subst.h
+strftime.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+strftime.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+strftime.$(OBJEXT): $(top_srcdir)/internal/encoding.h
+strftime.$(OBJEXT): $(top_srcdir)/internal/serial.h
+strftime.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+strftime.$(OBJEXT): $(top_srcdir)/internal/string.h
+strftime.$(OBJEXT): $(top_srcdir)/internal/vm.h
+strftime.$(OBJEXT): {$(VPATH)}assert.h
+strftime.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+strftime.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+strftime.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+strftime.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+strftime.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+strftime.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+strftime.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+strftime.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+strftime.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+strftime.$(OBJEXT): {$(VPATH)}config.h
+strftime.$(OBJEXT): {$(VPATH)}defines.h
+strftime.$(OBJEXT): {$(VPATH)}encindex.h
+strftime.$(OBJEXT): {$(VPATH)}encoding.h
+strftime.$(OBJEXT): {$(VPATH)}intern.h
+strftime.$(OBJEXT): {$(VPATH)}internal.h
+strftime.$(OBJEXT): {$(VPATH)}internal/abi.h
+strftime.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+strftime.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+strftime.$(OBJEXT): {$(VPATH)}internal/assume.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+strftime.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+strftime.$(OBJEXT): {$(VPATH)}internal/cast.h
+strftime.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+strftime.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+strftime.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+strftime.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+strftime.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+strftime.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+strftime.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+strftime.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+strftime.$(OBJEXT): {$(VPATH)}internal/config.h
+strftime.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+strftime.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+strftime.$(OBJEXT): {$(VPATH)}internal/ctype.h
+strftime.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+strftime.$(OBJEXT): {$(VPATH)}internal/dosish.h
+strftime.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+strftime.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+strftime.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+strftime.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+strftime.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+strftime.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+strftime.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+strftime.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+strftime.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+strftime.$(OBJEXT): {$(VPATH)}internal/error.h
+strftime.$(OBJEXT): {$(VPATH)}internal/eval.h
+strftime.$(OBJEXT): {$(VPATH)}internal/event.h
+strftime.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+strftime.$(OBJEXT): {$(VPATH)}internal/gc.h
+strftime.$(OBJEXT): {$(VPATH)}internal/glob.h
+strftime.$(OBJEXT): {$(VPATH)}internal/globals.h
+strftime.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+strftime.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+strftime.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+strftime.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+strftime.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+strftime.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+strftime.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+strftime.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+strftime.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+strftime.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+strftime.$(OBJEXT): {$(VPATH)}internal/iterator.h
+strftime.$(OBJEXT): {$(VPATH)}internal/memory.h
+strftime.$(OBJEXT): {$(VPATH)}internal/method.h
+strftime.$(OBJEXT): {$(VPATH)}internal/module.h
+strftime.$(OBJEXT): {$(VPATH)}internal/newobj.h
+strftime.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+strftime.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+strftime.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+strftime.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+strftime.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+strftime.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+strftime.$(OBJEXT): {$(VPATH)}internal/symbol.h
+strftime.$(OBJEXT): {$(VPATH)}internal/value.h
+strftime.$(OBJEXT): {$(VPATH)}internal/value_type.h
+strftime.$(OBJEXT): {$(VPATH)}internal/variable.h
+strftime.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+strftime.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+strftime.$(OBJEXT): {$(VPATH)}missing.h
+strftime.$(OBJEXT): {$(VPATH)}onigmo.h
+strftime.$(OBJEXT): {$(VPATH)}oniguruma.h
+strftime.$(OBJEXT): {$(VPATH)}st.h
+strftime.$(OBJEXT): {$(VPATH)}strftime.c
+strftime.$(OBJEXT): {$(VPATH)}subst.h
+strftime.$(OBJEXT): {$(VPATH)}timev.h
+strftime.$(OBJEXT): {$(VPATH)}util.h
+string.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+string.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+string.$(OBJEXT): $(CCAN_DIR)/list/list.h
+string.$(OBJEXT): $(CCAN_DIR)/str/str.h
+string.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+string.$(OBJEXT): $(hdrdir)/ruby/version.h
+string.$(OBJEXT): $(top_srcdir)/internal/array.h
+string.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+string.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+string.$(OBJEXT): $(top_srcdir)/internal/bits.h
+string.$(OBJEXT): $(top_srcdir)/internal/box.h
+string.$(OBJEXT): $(top_srcdir)/internal/class.h
+string.$(OBJEXT): $(top_srcdir)/internal/compar.h
+string.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+string.$(OBJEXT): $(top_srcdir)/internal/concurrent_set.h
+string.$(OBJEXT): $(top_srcdir)/internal/encoding.h
+string.$(OBJEXT): $(top_srcdir)/internal/error.h
+string.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+string.$(OBJEXT): $(top_srcdir)/internal/gc.h
+string.$(OBJEXT): $(top_srcdir)/internal/hash.h
+string.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+string.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+string.$(OBJEXT): $(top_srcdir)/internal/object.h
+string.$(OBJEXT): $(top_srcdir)/internal/proc.h
+string.$(OBJEXT): $(top_srcdir)/internal/re.h
+string.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+string.$(OBJEXT): $(top_srcdir)/internal/serial.h
+string.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+string.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+string.$(OBJEXT): $(top_srcdir)/internal/string.h
+string.$(OBJEXT): $(top_srcdir)/internal/struct.h
+string.$(OBJEXT): $(top_srcdir)/internal/transcode.h
+string.$(OBJEXT): $(top_srcdir)/internal/variable.h
+string.$(OBJEXT): $(top_srcdir)/internal/vm.h
+string.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+string.$(OBJEXT): {$(VPATH)}assert.h
+string.$(OBJEXT): {$(VPATH)}atomic.h
+string.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+string.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+string.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+string.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+string.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+string.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+string.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+string.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+string.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+string.$(OBJEXT): {$(VPATH)}config.h
+string.$(OBJEXT): {$(VPATH)}constant.h
+string.$(OBJEXT): {$(VPATH)}debug_counter.h
+string.$(OBJEXT): {$(VPATH)}defines.h
+string.$(OBJEXT): {$(VPATH)}encindex.h
+string.$(OBJEXT): {$(VPATH)}encoding.h
+string.$(OBJEXT): {$(VPATH)}id.h
+string.$(OBJEXT): {$(VPATH)}id_table.h
+string.$(OBJEXT): {$(VPATH)}intern.h
+string.$(OBJEXT): {$(VPATH)}internal.h
+string.$(OBJEXT): {$(VPATH)}internal/abi.h
+string.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+string.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+string.$(OBJEXT): {$(VPATH)}internal/assume.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/nonstring.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+string.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+string.$(OBJEXT): {$(VPATH)}internal/cast.h
+string.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+string.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+string.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+string.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+string.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+string.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+string.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+string.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+string.$(OBJEXT): {$(VPATH)}internal/config.h
+string.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+string.$(OBJEXT): {$(VPATH)}internal/core.h
+string.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+string.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+string.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+string.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+string.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+string.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+string.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+string.$(OBJEXT): {$(VPATH)}internal/core/rmatch.h
+string.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+string.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+string.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+string.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+string.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+string.$(OBJEXT): {$(VPATH)}internal/ctype.h
+string.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+string.$(OBJEXT): {$(VPATH)}internal/dosish.h
+string.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+string.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+string.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+string.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+string.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+string.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+string.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+string.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+string.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+string.$(OBJEXT): {$(VPATH)}internal/error.h
+string.$(OBJEXT): {$(VPATH)}internal/eval.h
+string.$(OBJEXT): {$(VPATH)}internal/event.h
+string.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+string.$(OBJEXT): {$(VPATH)}internal/gc.h
+string.$(OBJEXT): {$(VPATH)}internal/glob.h
+string.$(OBJEXT): {$(VPATH)}internal/globals.h
+string.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+string.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+string.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+string.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+string.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+string.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+string.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+string.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+string.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+string.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+string.$(OBJEXT): {$(VPATH)}internal/iterator.h
+string.$(OBJEXT): {$(VPATH)}internal/memory.h
+string.$(OBJEXT): {$(VPATH)}internal/method.h
+string.$(OBJEXT): {$(VPATH)}internal/module.h
+string.$(OBJEXT): {$(VPATH)}internal/newobj.h
+string.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+string.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+string.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+string.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+string.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+string.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+string.$(OBJEXT): {$(VPATH)}internal/symbol.h
+string.$(OBJEXT): {$(VPATH)}internal/value.h
+string.$(OBJEXT): {$(VPATH)}internal/value_type.h
+string.$(OBJEXT): {$(VPATH)}internal/variable.h
+string.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+string.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+string.$(OBJEXT): {$(VPATH)}method.h
+string.$(OBJEXT): {$(VPATH)}missing.h
+string.$(OBJEXT): {$(VPATH)}node.h
+string.$(OBJEXT): {$(VPATH)}onigmo.h
+string.$(OBJEXT): {$(VPATH)}oniguruma.h
+string.$(OBJEXT): {$(VPATH)}probes.dmyh
+string.$(OBJEXT): {$(VPATH)}probes.h
+string.$(OBJEXT): {$(VPATH)}ractor.h
+string.$(OBJEXT): {$(VPATH)}re.h
+string.$(OBJEXT): {$(VPATH)}regex.h
+string.$(OBJEXT): {$(VPATH)}ruby_assert.h
+string.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+string.$(OBJEXT): {$(VPATH)}rubyparser.h
+string.$(OBJEXT): {$(VPATH)}shape.h
+string.$(OBJEXT): {$(VPATH)}st.h
+string.$(OBJEXT): {$(VPATH)}string.c
+string.$(OBJEXT): {$(VPATH)}subst.h
+string.$(OBJEXT): {$(VPATH)}thread.h
+string.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+string.$(OBJEXT): {$(VPATH)}thread_native.h
+string.$(OBJEXT): {$(VPATH)}util.h
+string.$(OBJEXT): {$(VPATH)}variable.h
+string.$(OBJEXT): {$(VPATH)}vm_core.h
+string.$(OBJEXT): {$(VPATH)}vm_debug.h
+string.$(OBJEXT): {$(VPATH)}vm_opts.h
+string.$(OBJEXT): {$(VPATH)}vm_sync.h
+strlcat.$(OBJEXT): {$(VPATH)}config.h
+strlcat.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+strlcat.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+strlcat.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+strlcat.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+strlcat.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+strlcat.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+strlcat.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+strlcat.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+strlcat.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+strlcat.$(OBJEXT): {$(VPATH)}internal/config.h
+strlcat.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+strlcat.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+strlcat.$(OBJEXT): {$(VPATH)}missing.h
+strlcat.$(OBJEXT): {$(VPATH)}strlcat.c
+strlcpy.$(OBJEXT): {$(VPATH)}config.h
+strlcpy.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+strlcpy.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+strlcpy.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+strlcpy.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+strlcpy.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+strlcpy.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+strlcpy.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+strlcpy.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+strlcpy.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+strlcpy.$(OBJEXT): {$(VPATH)}internal/config.h
+strlcpy.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+strlcpy.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+strlcpy.$(OBJEXT): {$(VPATH)}missing.h
+strlcpy.$(OBJEXT): {$(VPATH)}strlcpy.c
+struct.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+struct.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+struct.$(OBJEXT): $(CCAN_DIR)/list/list.h
+struct.$(OBJEXT): $(CCAN_DIR)/str/str.h
+struct.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+struct.$(OBJEXT): $(hdrdir)/ruby/version.h
+struct.$(OBJEXT): $(top_srcdir)/internal/array.h
+struct.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+struct.$(OBJEXT): $(top_srcdir)/internal/box.h
+struct.$(OBJEXT): $(top_srcdir)/internal/class.h
+struct.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+struct.$(OBJEXT): $(top_srcdir)/internal/error.h
+struct.$(OBJEXT): $(top_srcdir)/internal/gc.h
+struct.$(OBJEXT): $(top_srcdir)/internal/hash.h
+struct.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+struct.$(OBJEXT): $(top_srcdir)/internal/object.h
+struct.$(OBJEXT): $(top_srcdir)/internal/proc.h
+struct.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+struct.$(OBJEXT): $(top_srcdir)/internal/serial.h
+struct.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+struct.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+struct.$(OBJEXT): $(top_srcdir)/internal/string.h
+struct.$(OBJEXT): $(top_srcdir)/internal/struct.h
+struct.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+struct.$(OBJEXT): $(top_srcdir)/internal/variable.h
+struct.$(OBJEXT): $(top_srcdir)/internal/vm.h
+struct.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+struct.$(OBJEXT): {$(VPATH)}assert.h
+struct.$(OBJEXT): {$(VPATH)}atomic.h
+struct.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+struct.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+struct.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+struct.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+struct.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+struct.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+struct.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+struct.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+struct.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+struct.$(OBJEXT): {$(VPATH)}builtin.h
+struct.$(OBJEXT): {$(VPATH)}config.h
+struct.$(OBJEXT): {$(VPATH)}constant.h
+struct.$(OBJEXT): {$(VPATH)}debug_counter.h
+struct.$(OBJEXT): {$(VPATH)}defines.h
+struct.$(OBJEXT): {$(VPATH)}encindex.h
+struct.$(OBJEXT): {$(VPATH)}encoding.h
+struct.$(OBJEXT): {$(VPATH)}id.h
+struct.$(OBJEXT): {$(VPATH)}id_table.h
+struct.$(OBJEXT): {$(VPATH)}intern.h
+struct.$(OBJEXT): {$(VPATH)}internal.h
+struct.$(OBJEXT): {$(VPATH)}internal/abi.h
+struct.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+struct.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+struct.$(OBJEXT): {$(VPATH)}internal/assume.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+struct.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+struct.$(OBJEXT): {$(VPATH)}internal/cast.h
+struct.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+struct.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+struct.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+struct.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+struct.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+struct.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+struct.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+struct.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+struct.$(OBJEXT): {$(VPATH)}internal/config.h
+struct.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+struct.$(OBJEXT): {$(VPATH)}internal/core.h
+struct.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+struct.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+struct.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+struct.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+struct.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+struct.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+struct.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+struct.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+struct.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+struct.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+struct.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+struct.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+struct.$(OBJEXT): {$(VPATH)}internal/ctype.h
+struct.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+struct.$(OBJEXT): {$(VPATH)}internal/dosish.h
+struct.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+struct.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+struct.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+struct.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+struct.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+struct.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+struct.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+struct.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+struct.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+struct.$(OBJEXT): {$(VPATH)}internal/error.h
+struct.$(OBJEXT): {$(VPATH)}internal/eval.h
+struct.$(OBJEXT): {$(VPATH)}internal/event.h
+struct.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+struct.$(OBJEXT): {$(VPATH)}internal/gc.h
+struct.$(OBJEXT): {$(VPATH)}internal/glob.h
+struct.$(OBJEXT): {$(VPATH)}internal/globals.h
+struct.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+struct.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+struct.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+struct.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+struct.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+struct.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+struct.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+struct.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+struct.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+struct.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+struct.$(OBJEXT): {$(VPATH)}internal/iterator.h
+struct.$(OBJEXT): {$(VPATH)}internal/memory.h
+struct.$(OBJEXT): {$(VPATH)}internal/method.h
+struct.$(OBJEXT): {$(VPATH)}internal/module.h
+struct.$(OBJEXT): {$(VPATH)}internal/newobj.h
+struct.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+struct.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+struct.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+struct.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+struct.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+struct.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+struct.$(OBJEXT): {$(VPATH)}internal/symbol.h
+struct.$(OBJEXT): {$(VPATH)}internal/value.h
+struct.$(OBJEXT): {$(VPATH)}internal/value_type.h
+struct.$(OBJEXT): {$(VPATH)}internal/variable.h
+struct.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+struct.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+struct.$(OBJEXT): {$(VPATH)}method.h
+struct.$(OBJEXT): {$(VPATH)}missing.h
+struct.$(OBJEXT): {$(VPATH)}node.h
+struct.$(OBJEXT): {$(VPATH)}onigmo.h
+struct.$(OBJEXT): {$(VPATH)}oniguruma.h
+struct.$(OBJEXT): {$(VPATH)}ruby_assert.h
+struct.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+struct.$(OBJEXT): {$(VPATH)}rubyparser.h
+struct.$(OBJEXT): {$(VPATH)}shape.h
+struct.$(OBJEXT): {$(VPATH)}st.h
+struct.$(OBJEXT): {$(VPATH)}struct.c
+struct.$(OBJEXT): {$(VPATH)}subst.h
+struct.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+struct.$(OBJEXT): {$(VPATH)}thread_native.h
+struct.$(OBJEXT): {$(VPATH)}vm_core.h
+struct.$(OBJEXT): {$(VPATH)}vm_debug.h
+struct.$(OBJEXT): {$(VPATH)}vm_opts.h
+struct.$(OBJEXT): {$(VPATH)}vm_sync.h
+symbol.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+symbol.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+symbol.$(OBJEXT): $(CCAN_DIR)/list/list.h
+symbol.$(OBJEXT): $(CCAN_DIR)/str/str.h
+symbol.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+symbol.$(OBJEXT): $(hdrdir)/ruby/version.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/array.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/box.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/class.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/concurrent_set.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/error.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/gc.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/hash.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/object.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/serial.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/string.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/variable.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/vm.h
+symbol.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+symbol.$(OBJEXT): {$(VPATH)}assert.h
+symbol.$(OBJEXT): {$(VPATH)}atomic.h
+symbol.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+symbol.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+symbol.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+symbol.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+symbol.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+symbol.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+symbol.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+symbol.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+symbol.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+symbol.$(OBJEXT): {$(VPATH)}builtin.h
+symbol.$(OBJEXT): {$(VPATH)}config.h
+symbol.$(OBJEXT): {$(VPATH)}constant.h
+symbol.$(OBJEXT): {$(VPATH)}darray.h
+symbol.$(OBJEXT): {$(VPATH)}debug_counter.h
+symbol.$(OBJEXT): {$(VPATH)}defines.h
+symbol.$(OBJEXT): {$(VPATH)}encindex.h
+symbol.$(OBJEXT): {$(VPATH)}encoding.h
+symbol.$(OBJEXT): {$(VPATH)}id.c
+symbol.$(OBJEXT): {$(VPATH)}id.h
+symbol.$(OBJEXT): {$(VPATH)}id_table.c
+symbol.$(OBJEXT): {$(VPATH)}id_table.h
+symbol.$(OBJEXT): {$(VPATH)}intern.h
+symbol.$(OBJEXT): {$(VPATH)}internal.h
+symbol.$(OBJEXT): {$(VPATH)}internal/abi.h
+symbol.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+symbol.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+symbol.$(OBJEXT): {$(VPATH)}internal/assume.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/nonstring.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+symbol.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+symbol.$(OBJEXT): {$(VPATH)}internal/cast.h
+symbol.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+symbol.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+symbol.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+symbol.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+symbol.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+symbol.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+symbol.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+symbol.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+symbol.$(OBJEXT): {$(VPATH)}internal/config.h
+symbol.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+symbol.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+symbol.$(OBJEXT): {$(VPATH)}internal/ctype.h
+symbol.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+symbol.$(OBJEXT): {$(VPATH)}internal/dosish.h
+symbol.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+symbol.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+symbol.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+symbol.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+symbol.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+symbol.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+symbol.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+symbol.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+symbol.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+symbol.$(OBJEXT): {$(VPATH)}internal/error.h
+symbol.$(OBJEXT): {$(VPATH)}internal/eval.h
+symbol.$(OBJEXT): {$(VPATH)}internal/event.h
+symbol.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+symbol.$(OBJEXT): {$(VPATH)}internal/gc.h
+symbol.$(OBJEXT): {$(VPATH)}internal/glob.h
+symbol.$(OBJEXT): {$(VPATH)}internal/globals.h
+symbol.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+symbol.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+symbol.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+symbol.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+symbol.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+symbol.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+symbol.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+symbol.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+symbol.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+symbol.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+symbol.$(OBJEXT): {$(VPATH)}internal/iterator.h
+symbol.$(OBJEXT): {$(VPATH)}internal/memory.h
+symbol.$(OBJEXT): {$(VPATH)}internal/method.h
+symbol.$(OBJEXT): {$(VPATH)}internal/module.h
+symbol.$(OBJEXT): {$(VPATH)}internal/newobj.h
+symbol.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+symbol.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+symbol.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+symbol.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+symbol.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+symbol.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+symbol.$(OBJEXT): {$(VPATH)}internal/symbol.h
+symbol.$(OBJEXT): {$(VPATH)}internal/value.h
+symbol.$(OBJEXT): {$(VPATH)}internal/value_type.h
+symbol.$(OBJEXT): {$(VPATH)}internal/variable.h
+symbol.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+symbol.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+symbol.$(OBJEXT): {$(VPATH)}method.h
+symbol.$(OBJEXT): {$(VPATH)}missing.h
+symbol.$(OBJEXT): {$(VPATH)}node.h
+symbol.$(OBJEXT): {$(VPATH)}onigmo.h
+symbol.$(OBJEXT): {$(VPATH)}oniguruma.h
+symbol.$(OBJEXT): {$(VPATH)}probes.dmyh
+symbol.$(OBJEXT): {$(VPATH)}probes.h
+symbol.$(OBJEXT): {$(VPATH)}ractor.h
+symbol.$(OBJEXT): {$(VPATH)}ruby_assert.h
+symbol.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+symbol.$(OBJEXT): {$(VPATH)}rubyparser.h
+symbol.$(OBJEXT): {$(VPATH)}shape.h
+symbol.$(OBJEXT): {$(VPATH)}st.h
+symbol.$(OBJEXT): {$(VPATH)}subst.h
+symbol.$(OBJEXT): {$(VPATH)}symbol.c
+symbol.$(OBJEXT): {$(VPATH)}symbol.h
+symbol.$(OBJEXT): {$(VPATH)}symbol.rb
+symbol.$(OBJEXT): {$(VPATH)}symbol.rbinc
+symbol.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+symbol.$(OBJEXT): {$(VPATH)}thread_native.h
+symbol.$(OBJEXT): {$(VPATH)}vm_core.h
+symbol.$(OBJEXT): {$(VPATH)}vm_debug.h
+symbol.$(OBJEXT): {$(VPATH)}vm_opts.h
+symbol.$(OBJEXT): {$(VPATH)}vm_sync.h
+thread.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+thread.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+thread.$(OBJEXT): $(CCAN_DIR)/list/list.h
+thread.$(OBJEXT): $(CCAN_DIR)/str/str.h
+thread.$(OBJEXT): $(hdrdir)/ruby.h
+thread.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+thread.$(OBJEXT): $(hdrdir)/ruby/version.h
+thread.$(OBJEXT): $(top_srcdir)/internal/array.h
+thread.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+thread.$(OBJEXT): $(top_srcdir)/internal/bits.h
+thread.$(OBJEXT): $(top_srcdir)/internal/box.h
+thread.$(OBJEXT): $(top_srcdir)/internal/class.h
+thread.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+thread.$(OBJEXT): $(top_srcdir)/internal/cont.h
+thread.$(OBJEXT): $(top_srcdir)/internal/error.h
+thread.$(OBJEXT): $(top_srcdir)/internal/eval.h
+thread.$(OBJEXT): $(top_srcdir)/internal/gc.h
+thread.$(OBJEXT): $(top_srcdir)/internal/hash.h
+thread.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+thread.$(OBJEXT): $(top_srcdir)/internal/io.h
+thread.$(OBJEXT): $(top_srcdir)/internal/object.h
+thread.$(OBJEXT): $(top_srcdir)/internal/proc.h
+thread.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+thread.$(OBJEXT): $(top_srcdir)/internal/serial.h
+thread.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+thread.$(OBJEXT): $(top_srcdir)/internal/signal.h
+thread.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+thread.$(OBJEXT): $(top_srcdir)/internal/string.h
+thread.$(OBJEXT): $(top_srcdir)/internal/struct.h
+thread.$(OBJEXT): $(top_srcdir)/internal/thread.h
+thread.$(OBJEXT): $(top_srcdir)/internal/time.h
+thread.$(OBJEXT): $(top_srcdir)/internal/variable.h
+thread.$(OBJEXT): $(top_srcdir)/internal/vm.h
+thread.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+thread.$(OBJEXT): $(top_srcdir)/prism/ast.h
+thread.$(OBJEXT): $(top_srcdir)/prism/defines.h
+thread.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+thread.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+thread.$(OBJEXT): $(top_srcdir)/prism/node.h
+thread.$(OBJEXT): $(top_srcdir)/prism/options.h
+thread.$(OBJEXT): $(top_srcdir)/prism/pack.h
+thread.$(OBJEXT): $(top_srcdir)/prism/parser.h
+thread.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+thread.$(OBJEXT): $(top_srcdir)/prism/prism.h
+thread.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+thread.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+thread.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+thread.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+thread.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+thread.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+thread.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+thread.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+thread.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+thread.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+thread.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+thread.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+thread.$(OBJEXT): $(top_srcdir)/prism/version.h
+thread.$(OBJEXT): {$(VPATH)}$(COROUTINE_H)
+thread.$(OBJEXT): {$(VPATH)}assert.h
+thread.$(OBJEXT): {$(VPATH)}atomic.h
+thread.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+thread.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+thread.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+thread.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+thread.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+thread.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+thread.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+thread.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+thread.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+thread.$(OBJEXT): {$(VPATH)}builtin.h
+thread.$(OBJEXT): {$(VPATH)}config.h
+thread.$(OBJEXT): {$(VPATH)}constant.h
+thread.$(OBJEXT): {$(VPATH)}debug.h
+thread.$(OBJEXT): {$(VPATH)}debug_counter.h
+thread.$(OBJEXT): {$(VPATH)}defines.h
+thread.$(OBJEXT): {$(VPATH)}encindex.h
+thread.$(OBJEXT): {$(VPATH)}encoding.h
+thread.$(OBJEXT): {$(VPATH)}eval_intern.h
+thread.$(OBJEXT): {$(VPATH)}fiber/scheduler.h
+thread.$(OBJEXT): {$(VPATH)}hrtime.h
+thread.$(OBJEXT): {$(VPATH)}id.h
+thread.$(OBJEXT): {$(VPATH)}id_table.h
+thread.$(OBJEXT): {$(VPATH)}intern.h
+thread.$(OBJEXT): {$(VPATH)}internal.h
+thread.$(OBJEXT): {$(VPATH)}internal/abi.h
+thread.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+thread.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+thread.$(OBJEXT): {$(VPATH)}internal/assume.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+thread.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+thread.$(OBJEXT): {$(VPATH)}internal/cast.h
+thread.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+thread.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+thread.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+thread.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+thread.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+thread.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+thread.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+thread.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+thread.$(OBJEXT): {$(VPATH)}internal/config.h
+thread.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+thread.$(OBJEXT): {$(VPATH)}internal/core.h
+thread.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+thread.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+thread.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+thread.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+thread.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+thread.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+thread.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+thread.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+thread.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+thread.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+thread.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+thread.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+thread.$(OBJEXT): {$(VPATH)}internal/ctype.h
+thread.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+thread.$(OBJEXT): {$(VPATH)}internal/dosish.h
+thread.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+thread.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+thread.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+thread.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+thread.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+thread.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+thread.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+thread.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+thread.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+thread.$(OBJEXT): {$(VPATH)}internal/error.h
+thread.$(OBJEXT): {$(VPATH)}internal/eval.h
+thread.$(OBJEXT): {$(VPATH)}internal/event.h
+thread.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+thread.$(OBJEXT): {$(VPATH)}internal/gc.h
+thread.$(OBJEXT): {$(VPATH)}internal/glob.h
+thread.$(OBJEXT): {$(VPATH)}internal/globals.h
+thread.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+thread.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+thread.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+thread.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+thread.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+thread.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+thread.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+thread.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+thread.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+thread.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+thread.$(OBJEXT): {$(VPATH)}internal/iterator.h
+thread.$(OBJEXT): {$(VPATH)}internal/memory.h
+thread.$(OBJEXT): {$(VPATH)}internal/method.h
+thread.$(OBJEXT): {$(VPATH)}internal/module.h
+thread.$(OBJEXT): {$(VPATH)}internal/newobj.h
+thread.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+thread.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+thread.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+thread.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+thread.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+thread.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+thread.$(OBJEXT): {$(VPATH)}internal/symbol.h
+thread.$(OBJEXT): {$(VPATH)}internal/value.h
+thread.$(OBJEXT): {$(VPATH)}internal/value_type.h
+thread.$(OBJEXT): {$(VPATH)}internal/variable.h
+thread.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+thread.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+thread.$(OBJEXT): {$(VPATH)}io.h
+thread.$(OBJEXT): {$(VPATH)}iseq.h
+thread.$(OBJEXT): {$(VPATH)}method.h
+thread.$(OBJEXT): {$(VPATH)}missing.h
+thread.$(OBJEXT): {$(VPATH)}node.h
+thread.$(OBJEXT): {$(VPATH)}onigmo.h
+thread.$(OBJEXT): {$(VPATH)}oniguruma.h
+thread.$(OBJEXT): {$(VPATH)}prism_compile.h
+thread.$(OBJEXT): {$(VPATH)}ractor.h
+thread.$(OBJEXT): {$(VPATH)}ractor_core.h
+thread.$(OBJEXT): {$(VPATH)}ruby_assert.h
+thread.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+thread.$(OBJEXT): {$(VPATH)}rubyparser.h
+thread.$(OBJEXT): {$(VPATH)}shape.h
+thread.$(OBJEXT): {$(VPATH)}st.h
+thread.$(OBJEXT): {$(VPATH)}subst.h
+thread.$(OBJEXT): {$(VPATH)}thread.c
+thread.$(OBJEXT): {$(VPATH)}thread.h
+thread.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).c
+thread.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+thread.$(OBJEXT): {$(VPATH)}thread_native.h
+thread.$(OBJEXT): {$(VPATH)}thread_pthread_mn.c
+thread.$(OBJEXT): {$(VPATH)}thread_sync.c
+thread.$(OBJEXT): {$(VPATH)}thread_sync.rbinc
+thread.$(OBJEXT): {$(VPATH)}timev.h
+thread.$(OBJEXT): {$(VPATH)}vm_core.h
+thread.$(OBJEXT): {$(VPATH)}vm_debug.h
+thread.$(OBJEXT): {$(VPATH)}vm_opts.h
+thread.$(OBJEXT): {$(VPATH)}vm_sync.h
+time.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+time.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+time.$(OBJEXT): $(CCAN_DIR)/list/list.h
+time.$(OBJEXT): $(CCAN_DIR)/str/str.h
+time.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+time.$(OBJEXT): $(top_srcdir)/internal/array.h
+time.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+time.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+time.$(OBJEXT): $(top_srcdir)/internal/bits.h
+time.$(OBJEXT): $(top_srcdir)/internal/box.h
+time.$(OBJEXT): $(top_srcdir)/internal/compar.h
+time.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+time.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+time.$(OBJEXT): $(top_srcdir)/internal/gc.h
+time.$(OBJEXT): $(top_srcdir)/internal/hash.h
+time.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+time.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+time.$(OBJEXT): $(top_srcdir)/internal/rational.h
+time.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+time.$(OBJEXT): $(top_srcdir)/internal/serial.h
+time.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+time.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+time.$(OBJEXT): $(top_srcdir)/internal/string.h
+time.$(OBJEXT): $(top_srcdir)/internal/struct.h
+time.$(OBJEXT): $(top_srcdir)/internal/time.h
+time.$(OBJEXT): $(top_srcdir)/internal/variable.h
+time.$(OBJEXT): $(top_srcdir)/internal/vm.h
+time.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+time.$(OBJEXT): {$(VPATH)}assert.h
+time.$(OBJEXT): {$(VPATH)}atomic.h
+time.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+time.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+time.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+time.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+time.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+time.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+time.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+time.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+time.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+time.$(OBJEXT): {$(VPATH)}builtin.h
+time.$(OBJEXT): {$(VPATH)}config.h
+time.$(OBJEXT): {$(VPATH)}constant.h
+time.$(OBJEXT): {$(VPATH)}defines.h
+time.$(OBJEXT): {$(VPATH)}encindex.h
+time.$(OBJEXT): {$(VPATH)}encoding.h
+time.$(OBJEXT): {$(VPATH)}id.h
+time.$(OBJEXT): {$(VPATH)}id_table.h
+time.$(OBJEXT): {$(VPATH)}intern.h
+time.$(OBJEXT): {$(VPATH)}internal.h
+time.$(OBJEXT): {$(VPATH)}internal/abi.h
+time.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+time.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+time.$(OBJEXT): {$(VPATH)}internal/assume.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+time.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+time.$(OBJEXT): {$(VPATH)}internal/cast.h
+time.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+time.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+time.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+time.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+time.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+time.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+time.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+time.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+time.$(OBJEXT): {$(VPATH)}internal/config.h
+time.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+time.$(OBJEXT): {$(VPATH)}internal/core.h
+time.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+time.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+time.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+time.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+time.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+time.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+time.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+time.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+time.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+time.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+time.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+time.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+time.$(OBJEXT): {$(VPATH)}internal/ctype.h
+time.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+time.$(OBJEXT): {$(VPATH)}internal/dosish.h
+time.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+time.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+time.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+time.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+time.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+time.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+time.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+time.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+time.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+time.$(OBJEXT): {$(VPATH)}internal/error.h
+time.$(OBJEXT): {$(VPATH)}internal/eval.h
+time.$(OBJEXT): {$(VPATH)}internal/event.h
+time.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+time.$(OBJEXT): {$(VPATH)}internal/gc.h
+time.$(OBJEXT): {$(VPATH)}internal/glob.h
+time.$(OBJEXT): {$(VPATH)}internal/globals.h
+time.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+time.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+time.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+time.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+time.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+time.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+time.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+time.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+time.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+time.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+time.$(OBJEXT): {$(VPATH)}internal/iterator.h
+time.$(OBJEXT): {$(VPATH)}internal/memory.h
+time.$(OBJEXT): {$(VPATH)}internal/method.h
+time.$(OBJEXT): {$(VPATH)}internal/module.h
+time.$(OBJEXT): {$(VPATH)}internal/newobj.h
+time.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+time.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+time.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+time.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+time.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+time.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+time.$(OBJEXT): {$(VPATH)}internal/symbol.h
+time.$(OBJEXT): {$(VPATH)}internal/value.h
+time.$(OBJEXT): {$(VPATH)}internal/value_type.h
+time.$(OBJEXT): {$(VPATH)}internal/variable.h
+time.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+time.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+time.$(OBJEXT): {$(VPATH)}method.h
+time.$(OBJEXT): {$(VPATH)}missing.h
+time.$(OBJEXT): {$(VPATH)}node.h
+time.$(OBJEXT): {$(VPATH)}onigmo.h
+time.$(OBJEXT): {$(VPATH)}oniguruma.h
+time.$(OBJEXT): {$(VPATH)}ruby_assert.h
+time.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+time.$(OBJEXT): {$(VPATH)}rubyparser.h
+time.$(OBJEXT): {$(VPATH)}shape.h
+time.$(OBJEXT): {$(VPATH)}st.h
+time.$(OBJEXT): {$(VPATH)}subst.h
+time.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+time.$(OBJEXT): {$(VPATH)}thread_native.h
+time.$(OBJEXT): {$(VPATH)}time.c
+time.$(OBJEXT): {$(VPATH)}timev.h
+time.$(OBJEXT): {$(VPATH)}timev.rbinc
+time.$(OBJEXT): {$(VPATH)}util.h
+time.$(OBJEXT): {$(VPATH)}vm_core.h
+time.$(OBJEXT): {$(VPATH)}vm_opts.h
+transcode.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/array.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/class.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/encoding.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/gc.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/inits.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/object.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/serial.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/string.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/transcode.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/variable.h
+transcode.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+transcode.$(OBJEXT): {$(VPATH)}assert.h
+transcode.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+transcode.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+transcode.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+transcode.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+transcode.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+transcode.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+transcode.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+transcode.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+transcode.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+transcode.$(OBJEXT): {$(VPATH)}config.h
+transcode.$(OBJEXT): {$(VPATH)}constant.h
+transcode.$(OBJEXT): {$(VPATH)}debug_counter.h
+transcode.$(OBJEXT): {$(VPATH)}defines.h
+transcode.$(OBJEXT): {$(VPATH)}encindex.h
+transcode.$(OBJEXT): {$(VPATH)}encoding.h
+transcode.$(OBJEXT): {$(VPATH)}id.h
+transcode.$(OBJEXT): {$(VPATH)}id_table.h
+transcode.$(OBJEXT): {$(VPATH)}intern.h
+transcode.$(OBJEXT): {$(VPATH)}internal.h
+transcode.$(OBJEXT): {$(VPATH)}internal/abi.h
+transcode.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+transcode.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+transcode.$(OBJEXT): {$(VPATH)}internal/assume.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+transcode.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+transcode.$(OBJEXT): {$(VPATH)}internal/cast.h
+transcode.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+transcode.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+transcode.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+transcode.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+transcode.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+transcode.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+transcode.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+transcode.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+transcode.$(OBJEXT): {$(VPATH)}internal/config.h
+transcode.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+transcode.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+transcode.$(OBJEXT): {$(VPATH)}internal/ctype.h
+transcode.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+transcode.$(OBJEXT): {$(VPATH)}internal/dosish.h
+transcode.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+transcode.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+transcode.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+transcode.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+transcode.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+transcode.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+transcode.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+transcode.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+transcode.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+transcode.$(OBJEXT): {$(VPATH)}internal/error.h
+transcode.$(OBJEXT): {$(VPATH)}internal/eval.h
+transcode.$(OBJEXT): {$(VPATH)}internal/event.h
+transcode.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+transcode.$(OBJEXT): {$(VPATH)}internal/gc.h
+transcode.$(OBJEXT): {$(VPATH)}internal/glob.h
+transcode.$(OBJEXT): {$(VPATH)}internal/globals.h
+transcode.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+transcode.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+transcode.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+transcode.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+transcode.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+transcode.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+transcode.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+transcode.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+transcode.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+transcode.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+transcode.$(OBJEXT): {$(VPATH)}internal/iterator.h
+transcode.$(OBJEXT): {$(VPATH)}internal/memory.h
+transcode.$(OBJEXT): {$(VPATH)}internal/method.h
+transcode.$(OBJEXT): {$(VPATH)}internal/module.h
+transcode.$(OBJEXT): {$(VPATH)}internal/newobj.h
+transcode.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+transcode.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+transcode.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+transcode.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+transcode.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+transcode.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+transcode.$(OBJEXT): {$(VPATH)}internal/symbol.h
+transcode.$(OBJEXT): {$(VPATH)}internal/value.h
+transcode.$(OBJEXT): {$(VPATH)}internal/value_type.h
+transcode.$(OBJEXT): {$(VPATH)}internal/variable.h
+transcode.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+transcode.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+transcode.$(OBJEXT): {$(VPATH)}missing.h
+transcode.$(OBJEXT): {$(VPATH)}onigmo.h
+transcode.$(OBJEXT): {$(VPATH)}oniguruma.h
+transcode.$(OBJEXT): {$(VPATH)}shape.h
+transcode.$(OBJEXT): {$(VPATH)}st.h
+transcode.$(OBJEXT): {$(VPATH)}subst.h
+transcode.$(OBJEXT): {$(VPATH)}transcode.c
+transcode.$(OBJEXT): {$(VPATH)}transcode_data.h
+transcode.$(OBJEXT): {$(VPATH)}vm_debug.h
+transcode.$(OBJEXT): {$(VPATH)}vm_sync.h
+util.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+util.$(OBJEXT): $(top_srcdir)/internal/array.h
+util.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+util.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+util.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+util.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+util.$(OBJEXT): $(top_srcdir)/internal/util.h
+util.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+util.$(OBJEXT): {$(VPATH)}assert.h
+util.$(OBJEXT): {$(VPATH)}atomic.h
+util.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+util.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+util.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+util.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+util.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+util.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+util.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+util.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+util.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+util.$(OBJEXT): {$(VPATH)}config.h
+util.$(OBJEXT): {$(VPATH)}defines.h
+util.$(OBJEXT): {$(VPATH)}dtoa.c
+util.$(OBJEXT): {$(VPATH)}id_table.h
+util.$(OBJEXT): {$(VPATH)}intern.h
+util.$(OBJEXT): {$(VPATH)}internal.h
+util.$(OBJEXT): {$(VPATH)}internal/abi.h
+util.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+util.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+util.$(OBJEXT): {$(VPATH)}internal/assume.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+util.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+util.$(OBJEXT): {$(VPATH)}internal/cast.h
+util.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+util.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+util.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+util.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+util.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+util.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+util.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+util.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+util.$(OBJEXT): {$(VPATH)}internal/config.h
+util.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+util.$(OBJEXT): {$(VPATH)}internal/core.h
+util.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+util.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+util.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+util.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+util.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+util.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+util.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+util.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+util.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+util.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+util.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+util.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+util.$(OBJEXT): {$(VPATH)}internal/ctype.h
+util.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+util.$(OBJEXT): {$(VPATH)}internal/dosish.h
+util.$(OBJEXT): {$(VPATH)}internal/error.h
+util.$(OBJEXT): {$(VPATH)}internal/eval.h
+util.$(OBJEXT): {$(VPATH)}internal/event.h
+util.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+util.$(OBJEXT): {$(VPATH)}internal/gc.h
+util.$(OBJEXT): {$(VPATH)}internal/glob.h
+util.$(OBJEXT): {$(VPATH)}internal/globals.h
+util.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+util.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+util.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+util.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+util.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+util.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+util.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+util.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+util.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+util.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+util.$(OBJEXT): {$(VPATH)}internal/iterator.h
+util.$(OBJEXT): {$(VPATH)}internal/memory.h
+util.$(OBJEXT): {$(VPATH)}internal/method.h
+util.$(OBJEXT): {$(VPATH)}internal/module.h
+util.$(OBJEXT): {$(VPATH)}internal/newobj.h
+util.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+util.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+util.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+util.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+util.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+util.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+util.$(OBJEXT): {$(VPATH)}internal/symbol.h
+util.$(OBJEXT): {$(VPATH)}internal/value.h
+util.$(OBJEXT): {$(VPATH)}internal/value_type.h
+util.$(OBJEXT): {$(VPATH)}internal/variable.h
+util.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+util.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+util.$(OBJEXT): {$(VPATH)}missing.h
+util.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+util.$(OBJEXT): {$(VPATH)}st.h
+util.$(OBJEXT): {$(VPATH)}subst.h
+util.$(OBJEXT): {$(VPATH)}util.c
+util.$(OBJEXT): {$(VPATH)}util.h
+variable.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+variable.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+variable.$(OBJEXT): $(CCAN_DIR)/list/list.h
+variable.$(OBJEXT): $(CCAN_DIR)/str/str.h
+variable.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+variable.$(OBJEXT): $(hdrdir)/ruby/version.h
+variable.$(OBJEXT): $(top_srcdir)/internal/array.h
+variable.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+variable.$(OBJEXT): $(top_srcdir)/internal/box.h
+variable.$(OBJEXT): $(top_srcdir)/internal/class.h
+variable.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+variable.$(OBJEXT): $(top_srcdir)/internal/error.h
+variable.$(OBJEXT): $(top_srcdir)/internal/eval.h
+variable.$(OBJEXT): $(top_srcdir)/internal/gc.h
+variable.$(OBJEXT): $(top_srcdir)/internal/hash.h
+variable.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+variable.$(OBJEXT): $(top_srcdir)/internal/object.h
+variable.$(OBJEXT): $(top_srcdir)/internal/re.h
+variable.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+variable.$(OBJEXT): $(top_srcdir)/internal/serial.h
+variable.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+variable.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+variable.$(OBJEXT): $(top_srcdir)/internal/string.h
+variable.$(OBJEXT): $(top_srcdir)/internal/struct.h
+variable.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+variable.$(OBJEXT): $(top_srcdir)/internal/thread.h
+variable.$(OBJEXT): $(top_srcdir)/internal/variable.h
+variable.$(OBJEXT): $(top_srcdir)/internal/vm.h
+variable.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+variable.$(OBJEXT): {$(VPATH)}assert.h
+variable.$(OBJEXT): {$(VPATH)}atomic.h
+variable.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+variable.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+variable.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+variable.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+variable.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+variable.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+variable.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+variable.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+variable.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+variable.$(OBJEXT): {$(VPATH)}config.h
+variable.$(OBJEXT): {$(VPATH)}constant.h
+variable.$(OBJEXT): {$(VPATH)}debug_counter.h
+variable.$(OBJEXT): {$(VPATH)}defines.h
+variable.$(OBJEXT): {$(VPATH)}encindex.h
+variable.$(OBJEXT): {$(VPATH)}encoding.h
+variable.$(OBJEXT): {$(VPATH)}id.h
+variable.$(OBJEXT): {$(VPATH)}id_table.h
+variable.$(OBJEXT): {$(VPATH)}intern.h
+variable.$(OBJEXT): {$(VPATH)}internal.h
+variable.$(OBJEXT): {$(VPATH)}internal/abi.h
+variable.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+variable.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+variable.$(OBJEXT): {$(VPATH)}internal/assume.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+variable.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+variable.$(OBJEXT): {$(VPATH)}internal/cast.h
+variable.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+variable.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+variable.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+variable.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+variable.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+variable.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+variable.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+variable.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+variable.$(OBJEXT): {$(VPATH)}internal/config.h
+variable.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+variable.$(OBJEXT): {$(VPATH)}internal/core.h
+variable.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+variable.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+variable.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+variable.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+variable.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+variable.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+variable.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+variable.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+variable.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+variable.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+variable.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+variable.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+variable.$(OBJEXT): {$(VPATH)}internal/ctype.h
+variable.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+variable.$(OBJEXT): {$(VPATH)}internal/dosish.h
+variable.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+variable.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+variable.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+variable.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+variable.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+variable.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+variable.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+variable.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+variable.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+variable.$(OBJEXT): {$(VPATH)}internal/error.h
+variable.$(OBJEXT): {$(VPATH)}internal/eval.h
+variable.$(OBJEXT): {$(VPATH)}internal/event.h
+variable.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+variable.$(OBJEXT): {$(VPATH)}internal/gc.h
+variable.$(OBJEXT): {$(VPATH)}internal/glob.h
+variable.$(OBJEXT): {$(VPATH)}internal/globals.h
+variable.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+variable.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+variable.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+variable.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+variable.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+variable.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+variable.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+variable.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+variable.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+variable.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+variable.$(OBJEXT): {$(VPATH)}internal/iterator.h
+variable.$(OBJEXT): {$(VPATH)}internal/memory.h
+variable.$(OBJEXT): {$(VPATH)}internal/method.h
+variable.$(OBJEXT): {$(VPATH)}internal/module.h
+variable.$(OBJEXT): {$(VPATH)}internal/newobj.h
+variable.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+variable.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+variable.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+variable.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+variable.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+variable.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+variable.$(OBJEXT): {$(VPATH)}internal/symbol.h
+variable.$(OBJEXT): {$(VPATH)}internal/value.h
+variable.$(OBJEXT): {$(VPATH)}internal/value_type.h
+variable.$(OBJEXT): {$(VPATH)}internal/variable.h
+variable.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+variable.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+variable.$(OBJEXT): {$(VPATH)}method.h
+variable.$(OBJEXT): {$(VPATH)}missing.h
+variable.$(OBJEXT): {$(VPATH)}node.h
+variable.$(OBJEXT): {$(VPATH)}onigmo.h
+variable.$(OBJEXT): {$(VPATH)}oniguruma.h
+variable.$(OBJEXT): {$(VPATH)}ractor.h
+variable.$(OBJEXT): {$(VPATH)}ractor_core.h
+variable.$(OBJEXT): {$(VPATH)}ruby_assert.h
+variable.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+variable.$(OBJEXT): {$(VPATH)}rubyparser.h
+variable.$(OBJEXT): {$(VPATH)}shape.h
+variable.$(OBJEXT): {$(VPATH)}st.h
+variable.$(OBJEXT): {$(VPATH)}subst.h
+variable.$(OBJEXT): {$(VPATH)}symbol.h
+variable.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+variable.$(OBJEXT): {$(VPATH)}thread_native.h
+variable.$(OBJEXT): {$(VPATH)}util.h
+variable.$(OBJEXT): {$(VPATH)}variable.c
+variable.$(OBJEXT): {$(VPATH)}variable.h
+variable.$(OBJEXT): {$(VPATH)}vm_core.h
+variable.$(OBJEXT): {$(VPATH)}vm_debug.h
+variable.$(OBJEXT): {$(VPATH)}vm_opts.h
+variable.$(OBJEXT): {$(VPATH)}vm_sync.h
+version.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+version.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+version.$(OBJEXT): $(CCAN_DIR)/list/list.h
+version.$(OBJEXT): $(CCAN_DIR)/str/str.h
+version.$(OBJEXT): $(hdrdir)/ruby.h
+version.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+version.$(OBJEXT): $(hdrdir)/ruby/version.h
+version.$(OBJEXT): $(top_srcdir)/internal/array.h
+version.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+version.$(OBJEXT): $(top_srcdir)/internal/box.h
+version.$(OBJEXT): $(top_srcdir)/internal/cmdlineopt.h
+version.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+version.$(OBJEXT): $(top_srcdir)/internal/gc.h
+version.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+version.$(OBJEXT): $(top_srcdir)/internal/parse.h
+version.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+version.$(OBJEXT): $(top_srcdir)/internal/serial.h
+version.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+version.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+version.$(OBJEXT): $(top_srcdir)/internal/variable.h
+version.$(OBJEXT): $(top_srcdir)/internal/vm.h
+version.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+version.$(OBJEXT): $(top_srcdir)/version.h
+version.$(OBJEXT): {$(VPATH)}assert.h
+version.$(OBJEXT): {$(VPATH)}atomic.h
+version.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+version.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+version.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+version.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+version.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+version.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+version.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+version.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+version.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+version.$(OBJEXT): {$(VPATH)}config.h
+version.$(OBJEXT): {$(VPATH)}constant.h
+version.$(OBJEXT): {$(VPATH)}debug_counter.h
+version.$(OBJEXT): {$(VPATH)}defines.h
+version.$(OBJEXT): {$(VPATH)}encoding.h
+version.$(OBJEXT): {$(VPATH)}id.h
+version.$(OBJEXT): {$(VPATH)}id_table.h
+version.$(OBJEXT): {$(VPATH)}intern.h
+version.$(OBJEXT): {$(VPATH)}internal.h
+version.$(OBJEXT): {$(VPATH)}internal/abi.h
+version.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+version.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+version.$(OBJEXT): {$(VPATH)}internal/assume.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+version.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+version.$(OBJEXT): {$(VPATH)}internal/cast.h
+version.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+version.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+version.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+version.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+version.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+version.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+version.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+version.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+version.$(OBJEXT): {$(VPATH)}internal/config.h
+version.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+version.$(OBJEXT): {$(VPATH)}internal/core.h
+version.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+version.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+version.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+version.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+version.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+version.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+version.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+version.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+version.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+version.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+version.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+version.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+version.$(OBJEXT): {$(VPATH)}internal/ctype.h
+version.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+version.$(OBJEXT): {$(VPATH)}internal/dosish.h
+version.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+version.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+version.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+version.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+version.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+version.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+version.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+version.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+version.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+version.$(OBJEXT): {$(VPATH)}internal/error.h
+version.$(OBJEXT): {$(VPATH)}internal/eval.h
+version.$(OBJEXT): {$(VPATH)}internal/event.h
+version.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+version.$(OBJEXT): {$(VPATH)}internal/gc.h
+version.$(OBJEXT): {$(VPATH)}internal/glob.h
+version.$(OBJEXT): {$(VPATH)}internal/globals.h
+version.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+version.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+version.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+version.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+version.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+version.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+version.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+version.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+version.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+version.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+version.$(OBJEXT): {$(VPATH)}internal/iterator.h
+version.$(OBJEXT): {$(VPATH)}internal/memory.h
+version.$(OBJEXT): {$(VPATH)}internal/method.h
+version.$(OBJEXT): {$(VPATH)}internal/module.h
+version.$(OBJEXT): {$(VPATH)}internal/newobj.h
+version.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+version.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+version.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+version.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+version.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+version.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+version.$(OBJEXT): {$(VPATH)}internal/symbol.h
+version.$(OBJEXT): {$(VPATH)}internal/value.h
+version.$(OBJEXT): {$(VPATH)}internal/value_type.h
+version.$(OBJEXT): {$(VPATH)}internal/variable.h
+version.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+version.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+version.$(OBJEXT): {$(VPATH)}method.h
+version.$(OBJEXT): {$(VPATH)}missing.h
+version.$(OBJEXT): {$(VPATH)}node.h
+version.$(OBJEXT): {$(VPATH)}onigmo.h
+version.$(OBJEXT): {$(VPATH)}oniguruma.h
+version.$(OBJEXT): {$(VPATH)}revision.h
+version.$(OBJEXT): {$(VPATH)}ruby_assert.h
+version.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+version.$(OBJEXT): {$(VPATH)}rubyparser.h
+version.$(OBJEXT): {$(VPATH)}shape.h
+version.$(OBJEXT): {$(VPATH)}st.h
+version.$(OBJEXT): {$(VPATH)}subst.h
+version.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+version.$(OBJEXT): {$(VPATH)}thread_native.h
+version.$(OBJEXT): {$(VPATH)}version.c
+version.$(OBJEXT): {$(VPATH)}vm_core.h
+version.$(OBJEXT): {$(VPATH)}vm_opts.h
+version.$(OBJEXT): {$(VPATH)}yjit.h
+vm.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+vm.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+vm.$(OBJEXT): $(CCAN_DIR)/list/list.h
+vm.$(OBJEXT): $(CCAN_DIR)/str/str.h
+vm.$(OBJEXT): $(hdrdir)/ruby.h
+vm.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+vm.$(OBJEXT): $(hdrdir)/ruby/version.h
+vm.$(OBJEXT): $(top_srcdir)/internal/array.h
+vm.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+vm.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+vm.$(OBJEXT): $(top_srcdir)/internal/bits.h
+vm.$(OBJEXT): $(top_srcdir)/internal/box.h
+vm.$(OBJEXT): $(top_srcdir)/internal/class.h
+vm.$(OBJEXT): $(top_srcdir)/internal/compar.h
+vm.$(OBJEXT): $(top_srcdir)/internal/compile.h
+vm.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+vm.$(OBJEXT): $(top_srcdir)/internal/complex.h
+vm.$(OBJEXT): $(top_srcdir)/internal/cont.h
+vm.$(OBJEXT): $(top_srcdir)/internal/encoding.h
+vm.$(OBJEXT): $(top_srcdir)/internal/error.h
+vm.$(OBJEXT): $(top_srcdir)/internal/eval.h
+vm.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+vm.$(OBJEXT): $(top_srcdir)/internal/gc.h
+vm.$(OBJEXT): $(top_srcdir)/internal/hash.h
+vm.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+vm.$(OBJEXT): $(top_srcdir)/internal/inits.h
+vm.$(OBJEXT): $(top_srcdir)/internal/missing.h
+vm.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+vm.$(OBJEXT): $(top_srcdir)/internal/object.h
+vm.$(OBJEXT): $(top_srcdir)/internal/parse.h
+vm.$(OBJEXT): $(top_srcdir)/internal/proc.h
+vm.$(OBJEXT): $(top_srcdir)/internal/random.h
+vm.$(OBJEXT): $(top_srcdir)/internal/rational.h
+vm.$(OBJEXT): $(top_srcdir)/internal/re.h
+vm.$(OBJEXT): $(top_srcdir)/internal/ruby_parser.h
+vm.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+vm.$(OBJEXT): $(top_srcdir)/internal/serial.h
+vm.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+vm.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+vm.$(OBJEXT): $(top_srcdir)/internal/string.h
+vm.$(OBJEXT): $(top_srcdir)/internal/struct.h
+vm.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+vm.$(OBJEXT): $(top_srcdir)/internal/thread.h
+vm.$(OBJEXT): $(top_srcdir)/internal/transcode.h
+vm.$(OBJEXT): $(top_srcdir)/internal/variable.h
+vm.$(OBJEXT): $(top_srcdir)/internal/vm.h
+vm.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+vm.$(OBJEXT): $(top_srcdir)/prism/ast.h
+vm.$(OBJEXT): $(top_srcdir)/prism/defines.h
+vm.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+vm.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+vm.$(OBJEXT): $(top_srcdir)/prism/node.h
+vm.$(OBJEXT): $(top_srcdir)/prism/options.h
+vm.$(OBJEXT): $(top_srcdir)/prism/pack.h
+vm.$(OBJEXT): $(top_srcdir)/prism/parser.h
+vm.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+vm.$(OBJEXT): $(top_srcdir)/prism/prism.h
+vm.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+vm.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+vm.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+vm.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+vm.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+vm.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+vm.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+vm.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+vm.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+vm.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+vm.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+vm.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+vm.$(OBJEXT): $(top_srcdir)/prism/version.h
+vm.$(OBJEXT): {$(VPATH)}assert.h
+vm.$(OBJEXT): {$(VPATH)}atomic.h
+vm.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+vm.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+vm.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+vm.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+vm.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+vm.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+vm.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+vm.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+vm.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+vm.$(OBJEXT): {$(VPATH)}builtin.h
+vm.$(OBJEXT): {$(VPATH)}config.h
+vm.$(OBJEXT): {$(VPATH)}constant.h
+vm.$(OBJEXT): {$(VPATH)}debug_counter.h
+vm.$(OBJEXT): {$(VPATH)}defines.h
+vm.$(OBJEXT): {$(VPATH)}defs/opt_operand.def
+vm.$(OBJEXT): {$(VPATH)}encindex.h
+vm.$(OBJEXT): {$(VPATH)}encoding.h
+vm.$(OBJEXT): {$(VPATH)}eval_intern.h
+vm.$(OBJEXT): {$(VPATH)}id.h
+vm.$(OBJEXT): {$(VPATH)}id_table.h
+vm.$(OBJEXT): {$(VPATH)}insns.def
+vm.$(OBJEXT): {$(VPATH)}insns.inc
+vm.$(OBJEXT): {$(VPATH)}insns_info.inc
+vm.$(OBJEXT): {$(VPATH)}intern.h
+vm.$(OBJEXT): {$(VPATH)}internal.h
+vm.$(OBJEXT): {$(VPATH)}internal/abi.h
+vm.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+vm.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+vm.$(OBJEXT): {$(VPATH)}internal/assume.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+vm.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+vm.$(OBJEXT): {$(VPATH)}internal/cast.h
+vm.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+vm.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+vm.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+vm.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+vm.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+vm.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+vm.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+vm.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+vm.$(OBJEXT): {$(VPATH)}internal/config.h
+vm.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+vm.$(OBJEXT): {$(VPATH)}internal/core.h
+vm.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+vm.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+vm.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+vm.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+vm.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+vm.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+vm.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+vm.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+vm.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+vm.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+vm.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+vm.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+vm.$(OBJEXT): {$(VPATH)}internal/ctype.h
+vm.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+vm.$(OBJEXT): {$(VPATH)}internal/dosish.h
+vm.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+vm.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+vm.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+vm.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+vm.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+vm.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+vm.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+vm.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+vm.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+vm.$(OBJEXT): {$(VPATH)}internal/error.h
+vm.$(OBJEXT): {$(VPATH)}internal/eval.h
+vm.$(OBJEXT): {$(VPATH)}internal/event.h
+vm.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+vm.$(OBJEXT): {$(VPATH)}internal/gc.h
+vm.$(OBJEXT): {$(VPATH)}internal/glob.h
+vm.$(OBJEXT): {$(VPATH)}internal/globals.h
+vm.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+vm.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+vm.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+vm.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+vm.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+vm.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+vm.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+vm.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+vm.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+vm.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+vm.$(OBJEXT): {$(VPATH)}internal/iterator.h
+vm.$(OBJEXT): {$(VPATH)}internal/memory.h
+vm.$(OBJEXT): {$(VPATH)}internal/method.h
+vm.$(OBJEXT): {$(VPATH)}internal/module.h
+vm.$(OBJEXT): {$(VPATH)}internal/newobj.h
+vm.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+vm.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+vm.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+vm.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+vm.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+vm.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+vm.$(OBJEXT): {$(VPATH)}internal/symbol.h
+vm.$(OBJEXT): {$(VPATH)}internal/value.h
+vm.$(OBJEXT): {$(VPATH)}internal/value_type.h
+vm.$(OBJEXT): {$(VPATH)}internal/variable.h
+vm.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+vm.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+vm.$(OBJEXT): {$(VPATH)}iseq.h
+vm.$(OBJEXT): {$(VPATH)}jit_hook.rbinc
+vm.$(OBJEXT): {$(VPATH)}jit_undef.rbinc
+vm.$(OBJEXT): {$(VPATH)}method.h
+vm.$(OBJEXT): {$(VPATH)}missing.h
+vm.$(OBJEXT): {$(VPATH)}node.h
+vm.$(OBJEXT): {$(VPATH)}onigmo.h
+vm.$(OBJEXT): {$(VPATH)}oniguruma.h
+vm.$(OBJEXT): {$(VPATH)}prism_compile.h
+vm.$(OBJEXT): {$(VPATH)}probes.dmyh
+vm.$(OBJEXT): {$(VPATH)}probes.h
+vm.$(OBJEXT): {$(VPATH)}probes_helper.h
+vm.$(OBJEXT): {$(VPATH)}ractor.h
+vm.$(OBJEXT): {$(VPATH)}ractor_core.h
+vm.$(OBJEXT): {$(VPATH)}ruby_assert.h
+vm.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+vm.$(OBJEXT): {$(VPATH)}rubyparser.h
+vm.$(OBJEXT): {$(VPATH)}shape.h
+vm.$(OBJEXT): {$(VPATH)}st.h
+vm.$(OBJEXT): {$(VPATH)}subst.h
+vm.$(OBJEXT): {$(VPATH)}symbol.h
+vm.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+vm.$(OBJEXT): {$(VPATH)}thread_native.h
+vm.$(OBJEXT): {$(VPATH)}variable.h
+vm.$(OBJEXT): {$(VPATH)}vm.c
+vm.$(OBJEXT): {$(VPATH)}vm.h
+vm.$(OBJEXT): {$(VPATH)}vm.inc
+vm.$(OBJEXT): {$(VPATH)}vm_args.c
+vm.$(OBJEXT): {$(VPATH)}vm_call_iseq_optimized.inc
+vm.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+vm.$(OBJEXT): {$(VPATH)}vm_core.h
+vm.$(OBJEXT): {$(VPATH)}vm_debug.h
+vm.$(OBJEXT): {$(VPATH)}vm_eval.c
+vm.$(OBJEXT): {$(VPATH)}vm_exec.c
+vm.$(OBJEXT): {$(VPATH)}vm_exec.h
+vm.$(OBJEXT): {$(VPATH)}vm_insnhelper.c
+vm.$(OBJEXT): {$(VPATH)}vm_insnhelper.h
+vm.$(OBJEXT): {$(VPATH)}vm_method.c
+vm.$(OBJEXT): {$(VPATH)}vm_opts.h
+vm.$(OBJEXT): {$(VPATH)}vm_sync.h
+vm.$(OBJEXT): {$(VPATH)}vmtc.inc
+vm.$(OBJEXT): {$(VPATH)}yjit.h
+vm.$(OBJEXT): {$(VPATH)}zjit.h
+vm_backtrace.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+vm_backtrace.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+vm_backtrace.$(OBJEXT): $(CCAN_DIR)/list/list.h
+vm_backtrace.$(OBJEXT): $(CCAN_DIR)/str/str.h
+vm_backtrace.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+vm_backtrace.$(OBJEXT): $(hdrdir)/ruby/version.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/array.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/box.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/class.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/error.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/gc.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/serial.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/string.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/struct.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/variable.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/vm.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/ast.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/defines.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/node.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/options.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/pack.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/parser.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/prism.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+vm_backtrace.$(OBJEXT): $(top_srcdir)/prism/version.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}assert.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}atomic.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}config.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}constant.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}debug.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}debug_counter.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}defines.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}encindex.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}encoding.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}eval_intern.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}id.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}id_table.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}intern.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/abi.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/assume.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/cast.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/config.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/ctype.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/dosish.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/error.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/eval.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/event.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/gc.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/glob.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/globals.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/iterator.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/memory.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/method.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/module.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/newobj.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/symbol.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/value.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/value_type.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/variable.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}iseq.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}method.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}missing.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}node.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}onigmo.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}oniguruma.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}prism_compile.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}ruby_assert.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}rubyparser.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}shape.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}st.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}subst.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+vm_backtrace.$(OBJEXT): {$(VPATH)}thread_native.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}vm_backtrace.c
+vm_backtrace.$(OBJEXT): {$(VPATH)}vm_core.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}vm_debug.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}vm_opts.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}vm_sync.h
+vm_dump.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+vm_dump.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+vm_dump.$(OBJEXT): $(CCAN_DIR)/list/list.h
+vm_dump.$(OBJEXT): $(CCAN_DIR)/str/str.h
+vm_dump.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/array.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/box.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/gc.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/serial.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/struct.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/variable.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/vm.h
+vm_dump.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/ast.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/defines.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/node.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/options.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/pack.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/parser.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/prism.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+vm_dump.$(OBJEXT): $(top_srcdir)/prism/version.h
+vm_dump.$(OBJEXT): {$(VPATH)}addr2line.h
+vm_dump.$(OBJEXT): {$(VPATH)}assert.h
+vm_dump.$(OBJEXT): {$(VPATH)}atomic.h
+vm_dump.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+vm_dump.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+vm_dump.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+vm_dump.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+vm_dump.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+vm_dump.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+vm_dump.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+vm_dump.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+vm_dump.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+vm_dump.$(OBJEXT): {$(VPATH)}config.h
+vm_dump.$(OBJEXT): {$(VPATH)}constant.h
+vm_dump.$(OBJEXT): {$(VPATH)}defines.h
+vm_dump.$(OBJEXT): {$(VPATH)}encoding.h
+vm_dump.$(OBJEXT): {$(VPATH)}fiber/scheduler.h
+vm_dump.$(OBJEXT): {$(VPATH)}id.h
+vm_dump.$(OBJEXT): {$(VPATH)}id_table.h
+vm_dump.$(OBJEXT): {$(VPATH)}intern.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/abi.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/assume.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/cast.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/config.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/ctype.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/dosish.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/error.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/eval.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/event.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/gc.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/glob.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/globals.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/iterator.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/memory.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/method.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/module.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/newobj.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/symbol.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/value.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/value_type.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/variable.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+vm_dump.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+vm_dump.$(OBJEXT): {$(VPATH)}iseq.h
+vm_dump.$(OBJEXT): {$(VPATH)}method.h
+vm_dump.$(OBJEXT): {$(VPATH)}missing.h
+vm_dump.$(OBJEXT): {$(VPATH)}node.h
+vm_dump.$(OBJEXT): {$(VPATH)}onigmo.h
+vm_dump.$(OBJEXT): {$(VPATH)}oniguruma.h
+vm_dump.$(OBJEXT): {$(VPATH)}prism_compile.h
+vm_dump.$(OBJEXT): {$(VPATH)}procstat_vm.c
+vm_dump.$(OBJEXT): {$(VPATH)}ractor.h
+vm_dump.$(OBJEXT): {$(VPATH)}ractor_core.h
+vm_dump.$(OBJEXT): {$(VPATH)}ruby_assert.h
+vm_dump.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+vm_dump.$(OBJEXT): {$(VPATH)}rubyparser.h
+vm_dump.$(OBJEXT): {$(VPATH)}shape.h
+vm_dump.$(OBJEXT): {$(VPATH)}st.h
+vm_dump.$(OBJEXT): {$(VPATH)}subst.h
+vm_dump.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+vm_dump.$(OBJEXT): {$(VPATH)}thread_native.h
+vm_dump.$(OBJEXT): {$(VPATH)}vm_core.h
+vm_dump.$(OBJEXT): {$(VPATH)}vm_debug.h
+vm_dump.$(OBJEXT): {$(VPATH)}vm_dump.c
+vm_dump.$(OBJEXT): {$(VPATH)}vm_opts.h
+vm_sync.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+vm_sync.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+vm_sync.$(OBJEXT): $(CCAN_DIR)/list/list.h
+vm_sync.$(OBJEXT): $(CCAN_DIR)/str/str.h
+vm_sync.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/array.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/box.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/gc.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/serial.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/thread.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/variable.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/vm.h
+vm_sync.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+vm_sync.$(OBJEXT): {$(VPATH)}assert.h
+vm_sync.$(OBJEXT): {$(VPATH)}atomic.h
+vm_sync.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+vm_sync.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+vm_sync.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+vm_sync.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+vm_sync.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+vm_sync.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+vm_sync.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+vm_sync.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+vm_sync.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+vm_sync.$(OBJEXT): {$(VPATH)}config.h
+vm_sync.$(OBJEXT): {$(VPATH)}constant.h
+vm_sync.$(OBJEXT): {$(VPATH)}debug_counter.h
+vm_sync.$(OBJEXT): {$(VPATH)}defines.h
+vm_sync.$(OBJEXT): {$(VPATH)}encoding.h
+vm_sync.$(OBJEXT): {$(VPATH)}id.h
+vm_sync.$(OBJEXT): {$(VPATH)}id_table.h
+vm_sync.$(OBJEXT): {$(VPATH)}intern.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/abi.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/assume.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/cast.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/config.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/ctype.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/dosish.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/error.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/eval.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/event.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/gc.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/glob.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/globals.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/iterator.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/memory.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/method.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/module.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/newobj.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/symbol.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/value.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/value_type.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/variable.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+vm_sync.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+vm_sync.$(OBJEXT): {$(VPATH)}method.h
+vm_sync.$(OBJEXT): {$(VPATH)}missing.h
+vm_sync.$(OBJEXT): {$(VPATH)}node.h
+vm_sync.$(OBJEXT): {$(VPATH)}onigmo.h
+vm_sync.$(OBJEXT): {$(VPATH)}oniguruma.h
+vm_sync.$(OBJEXT): {$(VPATH)}ractor.h
+vm_sync.$(OBJEXT): {$(VPATH)}ractor_core.h
+vm_sync.$(OBJEXT): {$(VPATH)}ruby_assert.h
+vm_sync.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+vm_sync.$(OBJEXT): {$(VPATH)}rubyparser.h
+vm_sync.$(OBJEXT): {$(VPATH)}shape.h
+vm_sync.$(OBJEXT): {$(VPATH)}st.h
+vm_sync.$(OBJEXT): {$(VPATH)}subst.h
+vm_sync.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+vm_sync.$(OBJEXT): {$(VPATH)}thread_native.h
+vm_sync.$(OBJEXT): {$(VPATH)}vm_core.h
+vm_sync.$(OBJEXT): {$(VPATH)}vm_debug.h
+vm_sync.$(OBJEXT): {$(VPATH)}vm_opts.h
+vm_sync.$(OBJEXT): {$(VPATH)}vm_sync.c
+vm_sync.$(OBJEXT): {$(VPATH)}vm_sync.h
+vm_trace.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+vm_trace.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+vm_trace.$(OBJEXT): $(CCAN_DIR)/list/list.h
+vm_trace.$(OBJEXT): $(CCAN_DIR)/str/str.h
+vm_trace.$(OBJEXT): $(hdrdir)/ruby.h
+vm_trace.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/array.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/bits.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/box.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/class.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/gc.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/hash.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/serial.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/struct.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/symbol.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/thread.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/variable.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/vm.h
+vm_trace.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/ast.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/defines.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/node.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/options.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/pack.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/parser.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/prism.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+vm_trace.$(OBJEXT): $(top_srcdir)/prism/version.h
+vm_trace.$(OBJEXT): {$(VPATH)}assert.h
+vm_trace.$(OBJEXT): {$(VPATH)}atomic.h
+vm_trace.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+vm_trace.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+vm_trace.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+vm_trace.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+vm_trace.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+vm_trace.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+vm_trace.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+vm_trace.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+vm_trace.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+vm_trace.$(OBJEXT): {$(VPATH)}builtin.h
+vm_trace.$(OBJEXT): {$(VPATH)}config.h
+vm_trace.$(OBJEXT): {$(VPATH)}constant.h
+vm_trace.$(OBJEXT): {$(VPATH)}debug.h
+vm_trace.$(OBJEXT): {$(VPATH)}debug_counter.h
+vm_trace.$(OBJEXT): {$(VPATH)}defines.h
+vm_trace.$(OBJEXT): {$(VPATH)}encoding.h
+vm_trace.$(OBJEXT): {$(VPATH)}eval_intern.h
+vm_trace.$(OBJEXT): {$(VPATH)}id.h
+vm_trace.$(OBJEXT): {$(VPATH)}id_table.h
+vm_trace.$(OBJEXT): {$(VPATH)}intern.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/abi.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/assume.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/cast.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/config.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/ctype.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/dosish.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/error.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/eval.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/event.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/gc.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/glob.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/globals.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/iterator.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/memory.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/method.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/module.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/newobj.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/symbol.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/value.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/value_type.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/variable.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+vm_trace.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+vm_trace.$(OBJEXT): {$(VPATH)}iseq.h
+vm_trace.$(OBJEXT): {$(VPATH)}method.h
+vm_trace.$(OBJEXT): {$(VPATH)}missing.h
+vm_trace.$(OBJEXT): {$(VPATH)}node.h
+vm_trace.$(OBJEXT): {$(VPATH)}onigmo.h
+vm_trace.$(OBJEXT): {$(VPATH)}oniguruma.h
+vm_trace.$(OBJEXT): {$(VPATH)}prism_compile.h
+vm_trace.$(OBJEXT): {$(VPATH)}ractor.h
+vm_trace.$(OBJEXT): {$(VPATH)}ractor_core.h
+vm_trace.$(OBJEXT): {$(VPATH)}ruby_assert.h
+vm_trace.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+vm_trace.$(OBJEXT): {$(VPATH)}rubyparser.h
+vm_trace.$(OBJEXT): {$(VPATH)}shape.h
+vm_trace.$(OBJEXT): {$(VPATH)}st.h
+vm_trace.$(OBJEXT): {$(VPATH)}subst.h
+vm_trace.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+vm_trace.$(OBJEXT): {$(VPATH)}thread_native.h
+vm_trace.$(OBJEXT): {$(VPATH)}trace_point.rbinc
+vm_trace.$(OBJEXT): {$(VPATH)}vm_core.h
+vm_trace.$(OBJEXT): {$(VPATH)}vm_debug.h
+vm_trace.$(OBJEXT): {$(VPATH)}vm_opts.h
+vm_trace.$(OBJEXT): {$(VPATH)}vm_sync.h
+vm_trace.$(OBJEXT): {$(VPATH)}vm_trace.c
+vm_trace.$(OBJEXT): {$(VPATH)}yjit.h
+vm_trace.$(OBJEXT): {$(VPATH)}zjit.h
+weakmap.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+weakmap.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+weakmap.$(OBJEXT): $(CCAN_DIR)/list/list.h
+weakmap.$(OBJEXT): $(CCAN_DIR)/str/str.h
+weakmap.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/array.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/box.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/gc.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/hash.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/proc.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/serial.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/vm.h
+weakmap.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+weakmap.$(OBJEXT): {$(VPATH)}assert.h
+weakmap.$(OBJEXT): {$(VPATH)}atomic.h
+weakmap.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+weakmap.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+weakmap.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+weakmap.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+weakmap.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+weakmap.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+weakmap.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+weakmap.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+weakmap.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+weakmap.$(OBJEXT): {$(VPATH)}config.h
+weakmap.$(OBJEXT): {$(VPATH)}defines.h
+weakmap.$(OBJEXT): {$(VPATH)}encoding.h
+weakmap.$(OBJEXT): {$(VPATH)}id.h
+weakmap.$(OBJEXT): {$(VPATH)}id_table.h
+weakmap.$(OBJEXT): {$(VPATH)}intern.h
+weakmap.$(OBJEXT): {$(VPATH)}internal.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/abi.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/assume.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/cast.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/config.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/ctype.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/dosish.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/error.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/eval.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/event.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/gc.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/glob.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/globals.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/iterator.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/memory.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/method.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/module.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/newobj.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/symbol.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/value.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/value_type.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/variable.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+weakmap.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+weakmap.$(OBJEXT): {$(VPATH)}method.h
+weakmap.$(OBJEXT): {$(VPATH)}missing.h
+weakmap.$(OBJEXT): {$(VPATH)}node.h
+weakmap.$(OBJEXT): {$(VPATH)}onigmo.h
+weakmap.$(OBJEXT): {$(VPATH)}oniguruma.h
+weakmap.$(OBJEXT): {$(VPATH)}ruby_assert.h
+weakmap.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+weakmap.$(OBJEXT): {$(VPATH)}rubyparser.h
+weakmap.$(OBJEXT): {$(VPATH)}st.h
+weakmap.$(OBJEXT): {$(VPATH)}subst.h
+weakmap.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+weakmap.$(OBJEXT): {$(VPATH)}thread_native.h
+weakmap.$(OBJEXT): {$(VPATH)}vm_core.h
+weakmap.$(OBJEXT): {$(VPATH)}vm_opts.h
+weakmap.$(OBJEXT): {$(VPATH)}weakmap.c
+yjit.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+yjit.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+yjit.$(OBJEXT): $(CCAN_DIR)/list/list.h
+yjit.$(OBJEXT): $(CCAN_DIR)/str/str.h
+yjit.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/array.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/bits.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/box.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/class.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/compile.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/cont.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/gc.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/hash.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/serial.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/string.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/struct.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/variable.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/vm.h
+yjit.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/ast.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/defines.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/node.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/options.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/pack.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/parser.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/prism.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+yjit.$(OBJEXT): $(top_srcdir)/prism/version.h
+yjit.$(OBJEXT): {$(VPATH)}assert.h
+yjit.$(OBJEXT): {$(VPATH)}atomic.h
+yjit.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+yjit.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+yjit.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+yjit.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+yjit.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+yjit.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+yjit.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+yjit.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+yjit.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+yjit.$(OBJEXT): {$(VPATH)}builtin.h
+yjit.$(OBJEXT): {$(VPATH)}config.h
+yjit.$(OBJEXT): {$(VPATH)}constant.h
+yjit.$(OBJEXT): {$(VPATH)}debug.h
+yjit.$(OBJEXT): {$(VPATH)}debug_counter.h
+yjit.$(OBJEXT): {$(VPATH)}defines.h
+yjit.$(OBJEXT): {$(VPATH)}encindex.h
+yjit.$(OBJEXT): {$(VPATH)}encoding.h
+yjit.$(OBJEXT): {$(VPATH)}id.h
+yjit.$(OBJEXT): {$(VPATH)}id_table.h
+yjit.$(OBJEXT): {$(VPATH)}insns.def
+yjit.$(OBJEXT): {$(VPATH)}insns.inc
+yjit.$(OBJEXT): {$(VPATH)}insns_info.inc
+yjit.$(OBJEXT): {$(VPATH)}intern.h
+yjit.$(OBJEXT): {$(VPATH)}internal.h
+yjit.$(OBJEXT): {$(VPATH)}internal/abi.h
+yjit.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+yjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+yjit.$(OBJEXT): {$(VPATH)}internal/assume.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+yjit.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+yjit.$(OBJEXT): {$(VPATH)}internal/cast.h
+yjit.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+yjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+yjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+yjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+yjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+yjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+yjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+yjit.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+yjit.$(OBJEXT): {$(VPATH)}internal/config.h
+yjit.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+yjit.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+yjit.$(OBJEXT): {$(VPATH)}internal/ctype.h
+yjit.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+yjit.$(OBJEXT): {$(VPATH)}internal/dosish.h
+yjit.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+yjit.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+yjit.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+yjit.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+yjit.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+yjit.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+yjit.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+yjit.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+yjit.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+yjit.$(OBJEXT): {$(VPATH)}internal/error.h
+yjit.$(OBJEXT): {$(VPATH)}internal/eval.h
+yjit.$(OBJEXT): {$(VPATH)}internal/event.h
+yjit.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+yjit.$(OBJEXT): {$(VPATH)}internal/gc.h
+yjit.$(OBJEXT): {$(VPATH)}internal/glob.h
+yjit.$(OBJEXT): {$(VPATH)}internal/globals.h
+yjit.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+yjit.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+yjit.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+yjit.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+yjit.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+yjit.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+yjit.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+yjit.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+yjit.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+yjit.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+yjit.$(OBJEXT): {$(VPATH)}internal/iterator.h
+yjit.$(OBJEXT): {$(VPATH)}internal/memory.h
+yjit.$(OBJEXT): {$(VPATH)}internal/method.h
+yjit.$(OBJEXT): {$(VPATH)}internal/module.h
+yjit.$(OBJEXT): {$(VPATH)}internal/newobj.h
+yjit.$(OBJEXT): {$(VPATH)}internal/numeric.h
+yjit.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+yjit.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+yjit.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+yjit.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+yjit.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+yjit.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+yjit.$(OBJEXT): {$(VPATH)}internal/symbol.h
+yjit.$(OBJEXT): {$(VPATH)}internal/value.h
+yjit.$(OBJEXT): {$(VPATH)}internal/value_type.h
+yjit.$(OBJEXT): {$(VPATH)}internal/variable.h
+yjit.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+yjit.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+yjit.$(OBJEXT): {$(VPATH)}iseq.h
+yjit.$(OBJEXT): {$(VPATH)}method.h
+yjit.$(OBJEXT): {$(VPATH)}missing.h
+yjit.$(OBJEXT): {$(VPATH)}node.h
+yjit.$(OBJEXT): {$(VPATH)}onigmo.h
+yjit.$(OBJEXT): {$(VPATH)}oniguruma.h
+yjit.$(OBJEXT): {$(VPATH)}prism_compile.h
+yjit.$(OBJEXT): {$(VPATH)}probes.dmyh
+yjit.$(OBJEXT): {$(VPATH)}probes.h
+yjit.$(OBJEXT): {$(VPATH)}probes_helper.h
+yjit.$(OBJEXT): {$(VPATH)}ruby_assert.h
+yjit.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+yjit.$(OBJEXT): {$(VPATH)}rubyparser.h
+yjit.$(OBJEXT): {$(VPATH)}shape.h
+yjit.$(OBJEXT): {$(VPATH)}st.h
+yjit.$(OBJEXT): {$(VPATH)}subst.h
+yjit.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+yjit.$(OBJEXT): {$(VPATH)}thread_native.h
+yjit.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+yjit.$(OBJEXT): {$(VPATH)}vm_core.h
+yjit.$(OBJEXT): {$(VPATH)}vm_debug.h
+yjit.$(OBJEXT): {$(VPATH)}vm_insnhelper.h
+yjit.$(OBJEXT): {$(VPATH)}vm_opts.h
+yjit.$(OBJEXT): {$(VPATH)}vm_sync.h
+yjit.$(OBJEXT): {$(VPATH)}yjit.c
+yjit.$(OBJEXT): {$(VPATH)}yjit.h
+yjit.$(OBJEXT): {$(VPATH)}yjit.rbinc
+yjit.$(OBJEXT): {$(VPATH)}zjit.h
+zjit.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+zjit.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+zjit.$(OBJEXT): $(CCAN_DIR)/list/list.h
+zjit.$(OBJEXT): $(CCAN_DIR)/str/str.h
+zjit.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/array.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/bignum.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/bits.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/box.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/class.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/compile.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/cont.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/gc.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/hash.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/numeric.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/serial.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/set_table.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/string.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/struct.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/variable.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/vm.h
+zjit.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/ast.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/defines.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/encoding.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/node.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/options.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/pack.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/parser.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/prism.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/regexp.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/static_literals.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h
+zjit.$(OBJEXT): $(top_srcdir)/prism/version.h
+zjit.$(OBJEXT): {$(VPATH)}assert.h
+zjit.$(OBJEXT): {$(VPATH)}atomic.h
+zjit.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+zjit.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+zjit.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+zjit.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+zjit.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+zjit.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+zjit.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+zjit.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+zjit.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+zjit.$(OBJEXT): {$(VPATH)}builtin.h
+zjit.$(OBJEXT): {$(VPATH)}config.h
+zjit.$(OBJEXT): {$(VPATH)}constant.h
+zjit.$(OBJEXT): {$(VPATH)}debug.h
+zjit.$(OBJEXT): {$(VPATH)}debug_counter.h
+zjit.$(OBJEXT): {$(VPATH)}defines.h
+zjit.$(OBJEXT): {$(VPATH)}encindex.h
+zjit.$(OBJEXT): {$(VPATH)}encoding.h
+zjit.$(OBJEXT): {$(VPATH)}id.h
+zjit.$(OBJEXT): {$(VPATH)}id_table.h
+zjit.$(OBJEXT): {$(VPATH)}insns.def
+zjit.$(OBJEXT): {$(VPATH)}insns.inc
+zjit.$(OBJEXT): {$(VPATH)}insns_info.inc
+zjit.$(OBJEXT): {$(VPATH)}intern.h
+zjit.$(OBJEXT): {$(VPATH)}internal.h
+zjit.$(OBJEXT): {$(VPATH)}internal/abi.h
+zjit.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+zjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+zjit.$(OBJEXT): {$(VPATH)}internal/assume.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+zjit.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+zjit.$(OBJEXT): {$(VPATH)}internal/cast.h
+zjit.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+zjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+zjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+zjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+zjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+zjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+zjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+zjit.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+zjit.$(OBJEXT): {$(VPATH)}internal/config.h
+zjit.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+zjit.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+zjit.$(OBJEXT): {$(VPATH)}internal/ctype.h
+zjit.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+zjit.$(OBJEXT): {$(VPATH)}internal/dosish.h
+zjit.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+zjit.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+zjit.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+zjit.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+zjit.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+zjit.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+zjit.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+zjit.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+zjit.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+zjit.$(OBJEXT): {$(VPATH)}internal/error.h
+zjit.$(OBJEXT): {$(VPATH)}internal/eval.h
+zjit.$(OBJEXT): {$(VPATH)}internal/event.h
+zjit.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+zjit.$(OBJEXT): {$(VPATH)}internal/gc.h
+zjit.$(OBJEXT): {$(VPATH)}internal/glob.h
+zjit.$(OBJEXT): {$(VPATH)}internal/globals.h
+zjit.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+zjit.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+zjit.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+zjit.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+zjit.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+zjit.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+zjit.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+zjit.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/set.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+zjit.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+zjit.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+zjit.$(OBJEXT): {$(VPATH)}internal/iterator.h
+zjit.$(OBJEXT): {$(VPATH)}internal/memory.h
+zjit.$(OBJEXT): {$(VPATH)}internal/method.h
+zjit.$(OBJEXT): {$(VPATH)}internal/module.h
+zjit.$(OBJEXT): {$(VPATH)}internal/newobj.h
+zjit.$(OBJEXT): {$(VPATH)}internal/numeric.h
+zjit.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+zjit.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+zjit.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+zjit.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+zjit.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+zjit.$(OBJEXT): {$(VPATH)}internal/stdckdint.h
+zjit.$(OBJEXT): {$(VPATH)}internal/symbol.h
+zjit.$(OBJEXT): {$(VPATH)}internal/value.h
+zjit.$(OBJEXT): {$(VPATH)}internal/value_type.h
+zjit.$(OBJEXT): {$(VPATH)}internal/variable.h
+zjit.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+zjit.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+zjit.$(OBJEXT): {$(VPATH)}iseq.h
+zjit.$(OBJEXT): {$(VPATH)}method.h
+zjit.$(OBJEXT): {$(VPATH)}missing.h
+zjit.$(OBJEXT): {$(VPATH)}node.h
+zjit.$(OBJEXT): {$(VPATH)}onigmo.h
+zjit.$(OBJEXT): {$(VPATH)}oniguruma.h
+zjit.$(OBJEXT): {$(VPATH)}prism_compile.h
+zjit.$(OBJEXT): {$(VPATH)}probes.dmyh
+zjit.$(OBJEXT): {$(VPATH)}probes.h
+zjit.$(OBJEXT): {$(VPATH)}probes_helper.h
+zjit.$(OBJEXT): {$(VPATH)}ruby_assert.h
+zjit.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+zjit.$(OBJEXT): {$(VPATH)}rubyparser.h
+zjit.$(OBJEXT): {$(VPATH)}shape.h
+zjit.$(OBJEXT): {$(VPATH)}st.h
+zjit.$(OBJEXT): {$(VPATH)}subst.h
+zjit.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+zjit.$(OBJEXT): {$(VPATH)}thread_native.h
+zjit.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+zjit.$(OBJEXT): {$(VPATH)}vm_core.h
+zjit.$(OBJEXT): {$(VPATH)}vm_debug.h
+zjit.$(OBJEXT): {$(VPATH)}vm_insnhelper.h
+zjit.$(OBJEXT): {$(VPATH)}vm_opts.h
+zjit.$(OBJEXT): {$(VPATH)}vm_sync.h
+zjit.$(OBJEXT): {$(VPATH)}yjit.h
+zjit.$(OBJEXT): {$(VPATH)}zjit.c
+zjit.$(OBJEXT): {$(VPATH)}zjit.h
+zjit.$(OBJEXT): {$(VPATH)}zjit.rbinc
+# AUTOGENERATED DEPENDENCIES END
diff --git a/dir.c b/dir.c
index 193b5bece0..25ed59c668 100644
--- a/dir.c
+++ b/dir.c
@@ -11,9 +11,10 @@
**********************************************************************/
-#include "internal.h"
-#include "encindex.h"
+#include "ruby/internal/config.h"
+#include <ctype.h>
+#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -21,6 +22,24 @@
#include <unistd.h>
#endif
+#ifndef USE_OPENDIR_AT
+# if defined(HAVE_FDOPENDIR) && defined(HAVE_DIRFD) && \
+ defined(HAVE_OPENAT) && defined(HAVE_FSTATAT)
+# define USE_OPENDIR_AT 1
+# else
+# define USE_OPENDIR_AT 0
+# endif
+#endif
+
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#endif
+
+#ifndef O_CLOEXEC
+# define O_CLOEXEC 0
+#endif
+
+#undef HAVE_DIRENT_NAMLEN
#if defined HAVE_DIRENT_H && !defined _WIN32
# include <dirent.h>
# define NAMLEN(dirent) strlen((dirent)->d_name)
@@ -30,25 +49,20 @@
#else
# define dirent direct
# define NAMLEN(dirent) (dirent)->d_namlen
-# if HAVE_SYS_NDIR_H
+# define HAVE_DIRENT_NAMLEN 1
+# ifdef HAVE_SYS_NDIR_H
# include <sys/ndir.h>
# endif
-# if HAVE_SYS_DIR_H
+# ifdef HAVE_SYS_DIR_H
# include <sys/dir.h>
# endif
-# if HAVE_NDIR_H
+# ifdef HAVE_NDIR_H
# include <ndir.h>
# endif
# ifdef _WIN32
# include "win32/dir.h"
# endif
#endif
-#if defined(__native_client__) && defined(NACL_NEWLIB)
-# include "nacl/dirent.h"
-# include "nacl/stat.h"
-#endif
-
-#include <errno.h>
#ifndef HAVE_STDLIB_H
char *getenv();
@@ -58,52 +72,122 @@ char *getenv();
char *strchr(char*,char);
#endif
-#include <ctype.h>
-
-#include "ruby/util.h"
-
-/* define system APIs */
-#ifdef _WIN32
-#undef chdir
-#define chdir(p) rb_w32_uchdir(p)
-#undef mkdir
-#define mkdir(p, m) rb_w32_umkdir((p), (m))
-#undef rmdir
-#define rmdir(p) rb_w32_urmdir(p)
-#undef opendir
-#define opendir(p) rb_w32_uopendir(p)
-#define IS_WIN32 1
-#else
-#define IS_WIN32 0
-#endif
-
#ifdef HAVE_SYS_ATTR_H
#include <sys/attr.h>
#endif
+#define USE_NAME_ON_FS_REAL_BASENAME 1 /* platform dependent APIs to
+ * get real basenames */
+#define USE_NAME_ON_FS_BY_FNMATCH 2 /* select the matching
+ * basename by fnmatch */
+
#ifdef HAVE_GETATTRLIST
-# define USE_NAME_ON_FS 1
+# define USE_NAME_ON_FS USE_NAME_ON_FS_REAL_BASENAME
# define RUP32(size) ((size)+3/4)
# define SIZEUP32(type) RUP32(sizeof(type))
#elif defined _WIN32
-# define USE_NAME_ON_FS 1
+# define USE_NAME_ON_FS USE_NAME_ON_FS_REAL_BASENAME
#elif defined DOSISH
-# define USE_NAME_ON_FS 2 /* by fnmatch */
+# define USE_NAME_ON_FS USE_NAME_ON_FS_BY_FNMATCH
#else
# define USE_NAME_ON_FS 0
#endif
#ifdef __APPLE__
# define NORMALIZE_UTF8PATH 1
+# include <sys/param.h>
+# include <sys/mount.h>
+# include <sys/vnode.h>
#else
# define NORMALIZE_UTF8PATH 0
#endif
-#if NORMALIZE_UTF8PATH
-#include <sys/param.h>
-#include <sys/mount.h>
-#include <sys/vnode.h>
+#include "encindex.h"
+#include "id.h"
+#include "internal.h"
+#include "internal/array.h"
+#include "internal/dir.h"
+#include "internal/encoding.h"
+#include "internal/error.h"
+#include "internal/file.h"
+#include "internal/gc.h"
+#include "internal/io.h"
+#include "internal/object.h"
+#include "internal/imemo.h"
+#include "internal/vm.h"
+#include "ruby/encoding.h"
+#include "ruby/ruby.h"
+#include "ruby/thread.h"
+#include "ruby/util.h"
+#include "builtin.h"
+
+#ifndef AT_FDCWD
+# define AT_FDCWD -1
+#endif
+
+#define vm_initialized rb_cThread
+
+/* define system APIs */
+#ifdef _WIN32
+# undef chdir
+# define chdir(p) rb_w32_uchdir(p)
+# undef mkdir
+# define mkdir(p, m) rb_w32_umkdir((p), (m))
+# undef rmdir
+# define rmdir(p) rb_w32_urmdir(p)
+# undef opendir
+# define opendir(p) rb_w32_uopendir(p)
+# define ruby_getcwd() rb_w32_ugetcwd(NULL, 0)
+# define IS_WIN32 1
+#else
+# define IS_WIN32 0
+#endif
+
+#ifdef HAVE_GETATTRLIST
+struct getattrlist_args {
+ const char *path;
+ int fd;
+ struct attrlist *list;
+ void *buf;
+ size_t size;
+ unsigned int options;
+};
+
+# define GETATTRLIST_ARGS(list_, buf_, options_) (struct getattrlist_args) \
+ {.list = list_, .buf = buf_, .size = sizeof(buf_), .options = options_}
+
+static void *
+nogvl_getattrlist(void *args)
+{
+ struct getattrlist_args *arg = args;
+ return (void *)(VALUE)getattrlist(arg->path, arg->list, arg->buf, arg->size, arg->options);
+}
+
+static int
+gvl_getattrlist(struct getattrlist_args *args, const char *path)
+{
+ args->path = path;
+ return IO_WITHOUT_GVL_INT(nogvl_getattrlist, args);
+}
+
+# ifdef HAVE_FGETATTRLIST
+static void *
+nogvl_fgetattrlist(void *args)
+{
+ struct getattrlist_args *arg = args;
+ return (void *)(VALUE)fgetattrlist(arg->fd, arg->list, arg->buf, arg->size, arg->options);
+}
+
+static int
+gvl_fgetattrlist(struct getattrlist_args *args, int fd)
+{
+ args->fd = fd;
+ return IO_WITHOUT_GVL_INT(nogvl_fgetattrlist, args);
+}
+# endif
+#endif
+#if NORMALIZE_UTF8PATH
# if defined HAVE_FGETATTRLIST || !defined HAVE_GETATTRLIST
# define need_normalization(dirp, path) need_normalization(dirp)
# else
@@ -115,18 +199,19 @@ need_normalization(DIR *dirp, const char *path)
# if defined HAVE_FGETATTRLIST || defined HAVE_GETATTRLIST
u_int32_t attrbuf[SIZEUP32(fsobj_tag_t)];
struct attrlist al = {ATTR_BIT_MAP_COUNT, 0, ATTR_CMN_OBJTAG,};
+ struct getattrlist_args args = GETATTRLIST_ARGS(&al, attrbuf, 0);
# if defined HAVE_FGETATTRLIST
- int ret = fgetattrlist(dirfd(dirp), &al, attrbuf, sizeof(attrbuf), 0);
+ int ret = gvl_fgetattrlist(&args, dirfd(dirp));
# else
- int ret = getattrlist(path, &al, attrbuf, sizeof(attrbuf), 0);
+ int ret = gvl_getattrlist(&args, path);
# endif
if (!ret) {
- const fsobj_tag_t *tag = (void *)(attrbuf+1);
- switch (*tag) {
- case VT_HFS:
- case VT_CIFS:
- return TRUE;
- }
+ const fsobj_tag_t *tag = (void *)(attrbuf+1);
+ switch (*tag) {
+ case VT_HFS:
+ case VT_CIFS:
+ return TRUE;
+ }
}
# endif
return FALSE;
@@ -136,9 +221,9 @@ static inline int
has_nonascii(const char *ptr, size_t len)
{
while (len > 0) {
- if (!ISASCII(*ptr)) return 1;
- ptr++;
- --len;
+ if (!ISASCII(*ptr)) return 1;
+ ptr++;
+ --len;
}
return 0;
}
@@ -148,12 +233,18 @@ has_nonascii(const char *ptr, size_t len)
# define IF_NORMALIZE_UTF8PATH(something) /* nothing */
#endif
-#ifndef IFTODT
-# define IFTODT(m) (((m) & S_IFMT) / ((~S_IFMT & S_IFMT-1) + 1))
+#if defined(IFTODT) && defined(DT_UNKNOWN)
+# define EMULATE_IFTODT 0
+#else
+# define EMULATE_IFTODT 1
+#endif
+
+#if EMULATE_IFTODT
+# define IFTODT(m) (((m) & S_IFMT) / ((~S_IFMT & (S_IFMT-1)) + 1))
#endif
typedef enum {
-#ifdef DT_UNKNOWN
+#if !EMULATE_IFTODT
path_exist = DT_UNKNOWN,
path_directory = DT_DIR,
path_regular = DT_REG,
@@ -178,11 +269,13 @@ typedef enum {
#else
#define FNM_SYSCASE 0
#endif
-#if _WIN32
+#ifdef _WIN32
#define FNM_SHORTNAME 0x20
#else
#define FNM_SHORTNAME 0
#endif
+#define FNM_GLOB_NOSORT 0x40
+#define FNM_GLOB_SKIPDOT 0x80
#define FNM_NOMATCH 1
#define FNM_ERROR 2
@@ -207,53 +300,53 @@ bracket(
if (p >= pend) return NULL;
if (*p == '!' || *p == '^') {
- not = 1;
- p++;
+ not = 1;
+ p++;
}
while (*p != ']') {
- const char *t1 = p;
- if (escape && *t1 == '\\')
- t1++;
- if (!*t1)
- return NULL;
- p = t1 + (r = rb_enc_mbclen(t1, pend, enc));
- if (p >= pend) return NULL;
- if (p[0] == '-' && p[1] != ']') {
- const char *t2 = p + 1;
- int r2;
- if (escape && *t2 == '\\')
- t2++;
- if (!*t2)
- return NULL;
- p = t2 + (r2 = rb_enc_mbclen(t2, pend, enc));
- if (ok) continue;
- if ((r <= (send-s) && memcmp(t1, s, r) == 0) ||
- (r2 <= (send-s) && memcmp(t2, s, r2) == 0)) {
- ok = 1;
- continue;
- }
- c1 = rb_enc_codepoint(s, send, enc);
- if (nocase) c1 = rb_enc_toupper(c1, enc);
- c2 = rb_enc_codepoint(t1, pend, enc);
- if (nocase) c2 = rb_enc_toupper(c2, enc);
- if (c1 < c2) continue;
- c2 = rb_enc_codepoint(t2, pend, enc);
- if (nocase) c2 = rb_enc_toupper(c2, enc);
- if (c1 > c2) continue;
- }
- else {
- if (ok) continue;
- if (r <= (send-s) && memcmp(t1, s, r) == 0) {
- ok = 1;
- continue;
- }
- if (!nocase) continue;
- c1 = rb_enc_toupper(rb_enc_codepoint(s, send, enc), enc);
- c2 = rb_enc_toupper(rb_enc_codepoint(p, pend, enc), enc);
- if (c1 != c2) continue;
- }
- ok = 1;
+ const char *t1 = p;
+ if (escape && *t1 == '\\')
+ t1++;
+ if (!*t1)
+ return NULL;
+ p = t1 + (r = rb_enc_mbclen(t1, pend, enc));
+ if (p >= pend) return NULL;
+ if (p[0] == '-' && p[1] != ']') {
+ const char *t2 = p + 1;
+ int r2;
+ if (escape && *t2 == '\\')
+ t2++;
+ if (!*t2)
+ return NULL;
+ p = t2 + (r2 = rb_enc_mbclen(t2, pend, enc));
+ if (ok) continue;
+ if ((r <= (send-s) && memcmp(t1, s, r) == 0) ||
+ (r2 <= (send-s) && memcmp(t2, s, r2) == 0)) {
+ ok = 1;
+ continue;
+ }
+ c1 = rb_enc_codepoint(s, send, enc);
+ if (nocase) c1 = rb_enc_toupper(c1, enc);
+ c2 = rb_enc_codepoint(t1, pend, enc);
+ if (nocase) c2 = rb_enc_toupper(c2, enc);
+ if (c1 < c2) continue;
+ c2 = rb_enc_codepoint(t2, pend, enc);
+ if (nocase) c2 = rb_enc_toupper(c2, enc);
+ if (c1 > c2) continue;
+ }
+ else {
+ if (ok) continue;
+ if (r <= (send-s) && memcmp(t1, s, r) == 0) {
+ ok = 1;
+ continue;
+ }
+ if (!nocase) continue;
+ c1 = rb_enc_toupper(rb_enc_codepoint(s, send, enc), enc);
+ c2 = rb_enc_toupper(rb_enc_codepoint(p, pend, enc), enc);
+ if (c1 != c2) continue;
+ }
+ ok = 1;
}
return ok == not ? NULL : (char *)p + 1;
@@ -291,72 +384,72 @@ fnmatch_helper(
int r;
if (period && *s == '.' && *UNESCAPE(p) != '.') /* leading period */
- RETURN(FNM_NOMATCH);
+ RETURN(FNM_NOMATCH);
while (1) {
- switch (*p) {
- case '*':
- do { p++; } while (*p == '*');
- if (ISEND(UNESCAPE(p))) {
- p = UNESCAPE(p);
- RETURN(0);
- }
- if (ISEND(s))
- RETURN(FNM_NOMATCH);
- ptmp = p;
- stmp = s;
- continue;
-
- case '?':
- if (ISEND(s))
- RETURN(FNM_NOMATCH);
- p++;
- Inc(s, send, enc);
- continue;
-
- case '[': {
- const char *t;
- if (ISEND(s))
- RETURN(FNM_NOMATCH);
- if ((t = bracket(p + 1, pend, s, send, flags, enc)) != 0) {
- p = t;
- Inc(s, send, enc);
- continue;
- }
- goto failed;
- }
- }
-
- /* ordinary */
- p = UNESCAPE(p);
- if (ISEND(s))
- RETURN(ISEND(p) ? 0 : FNM_NOMATCH);
- if (ISEND(p))
- goto failed;
- r = rb_enc_precise_mbclen(p, pend, enc);
- if (!MBCLEN_CHARFOUND_P(r))
- goto failed;
- if (r <= (send-s) && memcmp(p, s, r) == 0) {
- p += r;
- s += r;
- continue;
- }
- if (!nocase) goto failed;
- if (rb_enc_toupper(rb_enc_codepoint(p, pend, enc), enc) !=
- rb_enc_toupper(rb_enc_codepoint(s, send, enc), enc))
- goto failed;
- p += r;
- Inc(s, send, enc);
- continue;
+ switch (*p) {
+ case '*':
+ do { p++; } while (*p == '*');
+ if (ISEND(UNESCAPE(p))) {
+ p = UNESCAPE(p);
+ RETURN(0);
+ }
+ if (ISEND(s))
+ RETURN(FNM_NOMATCH);
+ ptmp = p;
+ stmp = s;
+ continue;
+
+ case '?':
+ if (ISEND(s))
+ RETURN(FNM_NOMATCH);
+ p++;
+ Inc(s, send, enc);
+ continue;
+
+ case '[': {
+ const char *t;
+ if (ISEND(s))
+ RETURN(FNM_NOMATCH);
+ if ((t = bracket(p + 1, pend, s, send, flags, enc)) != 0) {
+ p = t;
+ Inc(s, send, enc);
+ continue;
+ }
+ goto failed;
+ }
+ }
+
+ /* ordinary */
+ p = UNESCAPE(p);
+ if (ISEND(s))
+ RETURN(ISEND(p) ? 0 : FNM_NOMATCH);
+ if (ISEND(p))
+ goto failed;
+ r = rb_enc_precise_mbclen(p, pend, enc);
+ if (!MBCLEN_CHARFOUND_P(r))
+ goto failed;
+ if (r <= (send-s) && memcmp(p, s, r) == 0) {
+ p += r;
+ s += r;
+ continue;
+ }
+ if (!nocase) goto failed;
+ if (rb_enc_toupper(rb_enc_codepoint(p, pend, enc), enc) !=
+ rb_enc_toupper(rb_enc_codepoint(s, send, enc), enc))
+ goto failed;
+ p += r;
+ Inc(s, send, enc);
+ continue;
failed: /* try next '*' position */
- if (ptmp && stmp) {
- p = ptmp;
- Inc(stmp, send, enc); /* !ISEND(*stmp) */
- s = stmp;
- continue;
- }
- RETURN(FNM_NOMATCH);
+ if (ptmp && stmp) {
+ p = ptmp;
+ Inc(stmp, send, enc); /* !ISEND(*stmp) */
+ s = stmp;
+ continue;
+ }
+ RETURN(FNM_NOMATCH);
}
}
@@ -377,87 +470,72 @@ fnmatch(
const char *stmp = 0;
if (pathname) {
- while (1) {
- if (p[0] == '*' && p[1] == '*' && p[2] == '/') {
- do { p += 3; } while (p[0] == '*' && p[1] == '*' && p[2] == '/');
- ptmp = p;
- stmp = s;
- }
- if (fnmatch_helper(&p, &s, flags, enc) == 0) {
- while (*s && *s != '/') Inc(s, send, enc);
- if (*p && *s) {
- p++;
- s++;
- continue;
- }
- if (!*p && !*s)
- return 0;
- }
- /* failed : try next recursion */
- if (ptmp && stmp && !(period && *stmp == '.')) {
- while (*stmp && *stmp != '/') Inc(stmp, send, enc);
- if (*stmp) {
- p = ptmp;
- stmp++;
- s = stmp;
- continue;
- }
- }
- return FNM_NOMATCH;
- }
+ while (1) {
+ if (p[0] == '*' && p[1] == '*' && p[2] == '/') {
+ do { p += 3; } while (p[0] == '*' && p[1] == '*' && p[2] == '/');
+ ptmp = p;
+ stmp = s;
+ }
+ if (fnmatch_helper(&p, &s, flags, enc) == 0) {
+ while (*s && *s != '/') Inc(s, send, enc);
+ if (*p && *s) {
+ p++;
+ s++;
+ continue;
+ }
+ if (!*p && !*s)
+ return 0;
+ }
+ /* failed : try next recursion */
+ if (ptmp && stmp && !(period && *stmp == '.')) {
+ while (*stmp && *stmp != '/') Inc(stmp, send, enc);
+ if (*stmp) {
+ p = ptmp;
+ stmp++;
+ s = stmp;
+ continue;
+ }
+ }
+ return FNM_NOMATCH;
+ }
}
else
- return fnmatch_helper(&p, &s, flags, enc);
+ return fnmatch_helper(&p, &s, flags, enc);
}
VALUE rb_cDir;
struct dir_data {
DIR *dir;
- VALUE path;
+ const VALUE path;
rb_encoding *enc;
};
static void
-dir_mark(void *ptr)
-{
- struct dir_data *dir = ptr;
- rb_gc_mark(dir->path);
-}
-
-static void
dir_free(void *ptr)
{
struct dir_data *dir = ptr;
- if (dir) {
- if (dir->dir) closedir(dir->dir);
- }
- xfree(dir);
-}
-static size_t
-dir_memsize(const void *ptr)
-{
- return sizeof(struct dir_data);
+ if (dir->dir) closedir(dir->dir);
}
+RUBY_REFERENCES(dir_refs) = {
+ RUBY_REF_EDGE(struct dir_data, path),
+ RUBY_REF_END
+};
+
static const rb_data_type_t dir_data_type = {
"dir",
- {dir_mark, dir_free, dir_memsize,},
- 0, 0, RUBY_TYPED_FREE_IMMEDIATELY
+ {
+ RUBY_REFS_LIST_PTR(dir_refs),
+ dir_free,
+ NULL, // Nothing allocated externally, so don't need a memsize function
+ },
+ 0, NULL, RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_DECL_MARKING | RUBY_TYPED_EMBEDDABLE
};
static VALUE dir_close(VALUE);
-#define GlobPathValue(str, safe) \
- /* can contain null bytes as separators */ \
- (!RB_TYPE_P((str), T_STRING) ? \
- (void)FilePathValue(str) : \
- (void)(check_safe_glob((str), (safe)), \
- check_glob_encoding(str), (str)))
-#define check_safe_glob(str, safe) ((safe) ? rb_check_safe_obj(str) : (void)0)
-#define check_glob_encoding(str) rb_enc_check((str), rb_enc_from_encoding(rb_usascii_encoding()))
-
static VALUE
dir_s_alloc(VALUE klass)
{
@@ -465,111 +543,160 @@ dir_s_alloc(VALUE klass)
VALUE obj = TypedData_Make_Struct(klass, struct dir_data, &dir_data_type, dirp);
dirp->dir = NULL;
- dirp->path = Qnil;
+ RB_OBJ_WRITE(obj, &dirp->path, Qnil);
dirp->enc = NULL;
return obj;
}
-/*
- * call-seq:
- * Dir.new( string ) -> aDir
- * Dir.new( string, encoding: enc ) -> aDir
- *
- * Returns a new directory object for the named directory.
- *
- * The optional <i>enc</i> argument specifies the encoding of the directory.
- * If not specified, the filesystem encoding is used.
- */
-static VALUE
-dir_initialize(int argc, VALUE *argv, VALUE dir)
+static void *
+nogvl_opendir(void *ptr)
{
- struct dir_data *dp;
- rb_encoding *fsenc;
- VALUE dirname, opt, orig;
- static ID keyword_ids[1];
- const char *path;
+ const char *path = ptr;
- if (!keyword_ids[0]) {
- keyword_ids[0] = rb_id_encoding();
- }
+ return opendir(path);
+}
+
+static DIR *
+opendir_without_gvl(const char *path)
+{
+ if (vm_initialized) {
+ union { const void *in; void *out; } u;
- fsenc = rb_filesystem_encoding();
+ u.in = path;
- rb_scan_args(argc, argv, "1:", &dirname, &opt);
+ return IO_WITHOUT_GVL(nogvl_opendir, u.out);
+ }
+ else
+ return opendir(path);
+}
- if (!NIL_P(opt)) {
- VALUE enc;
- rb_get_kwargs(opt, keyword_ids, 0, 1, &enc);
- if (enc != Qundef && !NIL_P(enc)) {
- fsenc = rb_to_encoding(enc);
- }
+static void
+close_dir_data(struct dir_data *dp)
+{
+ if (dp->dir) {
+ if (closedir(dp->dir) < 0) {
+ dp->dir = NULL;
+ rb_sys_fail("closedir");
+ }
+ dp->dir = NULL;
}
+}
+
+static void
+check_closedir(DIR *dirp)
+{
+ if (closedir(dirp) < 0)
+ rb_sys_fail("closedir");
+}
+
+static VALUE
+dir_initialize(rb_execution_context_t *ec, VALUE dir, VALUE dirname, VALUE enc)
+{
+ struct dir_data *dp;
+ VALUE orig;
+ const char *path;
+ rb_encoding *fsenc = NIL_P(enc) ? rb_filesystem_encoding() : rb_to_encoding(enc);
- GlobPathValue(dirname, FALSE);
+ FilePathValue(dirname);
orig = rb_str_dup_frozen(dirname);
dirname = rb_str_encode_ospath(dirname);
dirname = rb_str_dup_frozen(dirname);
TypedData_Get_Struct(dir, struct dir_data, &dir_data_type, dp);
- if (dp->dir) closedir(dp->dir);
- dp->dir = NULL;
- dp->path = Qnil;
+ close_dir_data(dp);
+ RB_OBJ_WRITE(dir, &dp->path, Qnil);
dp->enc = fsenc;
path = RSTRING_PTR(dirname);
- dp->dir = opendir(path);
+ dp->dir = opendir_without_gvl(path);
if (dp->dir == NULL) {
- if (rb_gc_for_fd(errno)) {
- dp->dir = opendir(path);
- }
+ int e = errno;
+ if (rb_gc_for_fd(e)) {
+ dp->dir = opendir_without_gvl(path);
+ }
#ifdef HAVE_GETATTRLIST
- else if (errno == EIO) {
- u_int32_t attrbuf[1];
- struct attrlist al = {ATTR_BIT_MAP_COUNT, 0};
- if (getattrlist(path, &al, attrbuf, sizeof(attrbuf), FSOPT_NOFOLLOW) == 0) {
- dp->dir = opendir(path);
- }
- }
+ else if (e == EIO) {
+ u_int32_t attrbuf[1];
+ struct attrlist al = {ATTR_BIT_MAP_COUNT, 0};
+ struct getattrlist_args args = GETATTRLIST_ARGS(&al, attrbuf, FSOPT_NOFOLLOW);
+ if (gvl_getattrlist(&args, path) == 0) {
+ dp->dir = opendir_without_gvl(path);
+ }
+ }
#endif
- if (dp->dir == NULL) {
- RB_GC_GUARD(dirname);
- rb_sys_fail_path(orig);
- }
+ if (dp->dir == NULL) {
+ RB_GC_GUARD(dirname);
+ rb_syserr_fail_path(e, orig);
+ }
}
- dp->path = orig;
+ RB_OBJ_WRITE(dir, &dp->path, orig);
+
+ return dir;
+}
+
+static VALUE
+dir_s_open(rb_execution_context_t *ec, VALUE klass, VALUE dirname, VALUE enc)
+{
+ struct dir_data *dp;
+ VALUE dir = TypedData_Make_Struct(klass, struct dir_data, &dir_data_type, dp);
+
+ dir_initialize(ec, dir, dirname, enc);
return dir;
}
+static VALUE
+dir_s_close(rb_execution_context_t *ec, VALUE klass, VALUE dir)
+{
+ return dir_close(dir);
+}
+
+# if defined(HAVE_FDOPENDIR) && defined(HAVE_DIRFD)
+static void *
+nogvl_fdopendir(void *fd)
+{
+ return fdopendir((int)(VALUE)fd);
+}
+
/*
- * call-seq:
- * Dir.open( string ) -> aDir
- * Dir.open( string, encoding: enc ) -> aDir
- * Dir.open( string ) {| aDir | block } -> anObject
- * Dir.open( string, encoding: enc ) {| aDir | block } -> anObject
- *
- * The optional <i>enc</i> argument specifies the encoding of the directory.
- * If not specified, the filesystem encoding is used.
- *
- * With no block, <code>open</code> is a synonym for
- * <code>Dir::new</code>. If a block is present, it is passed
- * <i>aDir</i> as a parameter. The directory is closed at the end of
- * the block, and <code>Dir::open</code> returns the value of the
- * block.
+ * call-seq:
+ * Dir.for_fd(fd) -> dir
+ *
+ * Returns a new \Dir object representing the directory specified by the given
+ * integer directory file descriptor +fd+:
+ *
+ * d0 = Dir.new('..')
+ * d1 = Dir.for_fd(d0.fileno)
+ *
+ * Note that the returned +d1+ does not have an associated path:
+ *
+ * d0.path # => '..'
+ * d1.path # => nil
+ *
+ * This method uses the
+ * {fdopendir()}[https://www.man7.org/linux/man-pages/man3/fdopendir.3p.html]
+ * function defined by POSIX 2008;
+ * the method is not implemented on non-POSIX platforms (raises NotImplementedError).
*/
static VALUE
-dir_s_open(int argc, VALUE *argv, VALUE klass)
+dir_s_for_fd(VALUE klass, VALUE fd)
{
struct dir_data *dp;
VALUE dir = TypedData_Make_Struct(klass, struct dir_data, &dir_data_type, dp);
- dir_initialize(argc, argv, dir);
- if (rb_block_given_p()) {
- return rb_ensure(rb_yield, dir, dir_close, dir);
+ if (!(dp->dir = IO_WITHOUT_GVL(nogvl_fdopendir, (void *)(VALUE)NUM2INT(fd)))) {
+ rb_sys_fail("fdopendir");
+ UNREACHABLE_RETURN(Qnil);
}
+ RB_OBJ_WRITE(dir, &dp->path, Qnil);
return dir;
}
+#else
+#define dir_s_for_fd rb_f_notimplement
+#endif
+
+NORETURN(static void dir_closed(void));
static void
dir_closed(void)
@@ -596,10 +723,13 @@ dir_check(VALUE dir)
/*
- * call-seq:
- * dir.inspect -> string
+ * call-seq:
+ * inspect -> string
+ *
+ * Returns a string description of +self+:
+ *
+ * Dir.new('example').inspect # => "#<Dir:example>"
*
- * Return a string describing this Dir object.
*/
static VALUE
dir_inspect(VALUE dir)
@@ -608,14 +738,14 @@ dir_inspect(VALUE dir)
TypedData_Get_Struct(dir, struct dir_data, &dir_data_type, dirp);
if (!NIL_P(dirp->path)) {
- VALUE str = rb_str_new_cstr("#<");
- rb_str_append(str, rb_class_name(CLASS_OF(dir)));
- rb_str_cat2(str, ":");
- rb_str_append(str, dirp->path);
- rb_str_cat2(str, ">");
- return str;
+ VALUE str = rb_str_new_cstr("#<");
+ rb_str_append(str, rb_class_name(CLASS_OF(dir)));
+ rb_str_cat2(str, ":");
+ rb_str_append(str, dirp->path);
+ rb_str_cat2(str, ">");
+ return str;
}
- return rb_funcallv(dir, rb_intern("to_s"), 0, 0);
+ return rb_funcallv(dir, idTo_s, 0, 0);
}
/* Workaround for Solaris 10 that does not have dirfd.
@@ -633,18 +763,18 @@ dir_inspect(VALUE dir)
#ifdef HAVE_DIRFD
/*
- * call-seq:
- * dir.fileno -> integer
- *
- * Returns the file descriptor used in <em>dir</em>.
+ * call-seq:
+ * fileno -> integer
*
- * d = Dir.new("..")
- * d.fileno #=> 8
+ * Returns the file descriptor used in <em>dir</em>.
*
- * This method uses dirfd() function defined by POSIX 2008.
- * NotImplementedError is raised on other platforms, such as Windows,
- * which doesn't provide the function.
+ * d = Dir.new('..')
+ * d.fileno # => 8
*
+ * This method uses the
+ * {dirfd()}[https://www.man7.org/linux/man-pages/man3/dirfd.3.html]
+ * function defined by POSIX 2008;
+ * the method is not implemented on non-POSIX platforms (raises NotImplementedError).
*/
static VALUE
dir_fileno(VALUE dir)
@@ -655,7 +785,7 @@ dir_fileno(VALUE dir)
GetDIR(dir, dirp);
fd = dirfd(dirp->dir);
if (fd == -1)
- rb_sys_fail("dirfd");
+ rb_sys_fail("dirfd");
return INT2NUM(fd);
}
#else
@@ -663,14 +793,14 @@ dir_fileno(VALUE dir)
#endif
/*
- * call-seq:
- * dir.path -> string or nil
- * dir.to_path -> string or nil
+ * call-seq:
+ * path -> string or nil
*
- * Returns the path parameter passed to <em>dir</em>'s constructor.
+ * Returns the +dirpath+ string that was used to create +self+
+ * (or +nil+ if created by method Dir.for_fd):
+ *
+ * Dir.new('example').path # => "example"
*
- * d = Dir.new("..")
- * d.path #=> ".."
*/
static VALUE
dir_path(VALUE dir)
@@ -687,30 +817,75 @@ static int
fundamental_encoding_p(rb_encoding *enc)
{
switch (rb_enc_to_index(enc)) {
- case ENCINDEX_ASCII:
+ case ENCINDEX_ASCII_8BIT:
case ENCINDEX_US_ASCII:
case ENCINDEX_UTF_8:
- return TRUE;
+ return TRUE;
default:
- return FALSE;
+ return FALSE;
}
}
# define READDIR(dir, enc) rb_w32_readdir((dir), (enc))
+# define READDIR_NOGVL READDIR
+#else
+NORETURN(static void *sys_failure(void *function));
+static void *
+sys_failure(void *function)
+{
+ rb_sys_fail(function);
+}
+
+static void *
+nogvl_readdir(void *dir)
+{
+ rb_errno_set(0);
+ if ((dir = readdir(dir)) == NULL) {
+ if (rb_errno())
+ rb_thread_call_with_gvl(sys_failure, (void *)"readdir");
+ }
+ return dir;
+}
+
+# define READDIR(dir, enc) IO_WITHOUT_GVL(nogvl_readdir, (void *)(dir))
+# define READDIR_NOGVL(dir, enc) nogvl_readdir((dir))
+#endif
+
+/* safe to use without GVL */
+static int
+to_be_skipped(const struct dirent *dp)
+{
+ const char *name = dp->d_name;
+ if (name[0] != '.') return FALSE;
+#ifdef HAVE_DIRENT_NAMLEN
+ switch (NAMLEN(dp)) {
+ case 2:
+ if (name[1] != '.') return FALSE;
+ case 1:
+ return TRUE;
+ default:
+ break;
+ }
#else
-# define READDIR(dir, enc) readdir((dir))
+ if (!name[1]) return TRUE;
+ if (name[1] != '.') return FALSE;
+ if (!name[2]) return TRUE;
#endif
+ return FALSE;
+}
/*
- * call-seq:
- * dir.read -> string or nil
+ * call-seq:
+ * read -> string or nil
+ *
+ * Reads and returns the next entry name from +self+;
+ * returns +nil+ if at end-of-stream;
+ * see {Dir As Stream-Like}[rdoc-ref:Dir@Dir+As+Stream-Like]:
*
- * Reads the next entry from <em>dir</em> and returns it as a string.
- * Returns <code>nil</code> at the end of the stream.
+ * dir = Dir.new('example')
+ * dir.read # => "."
+ * dir.read # => ".."
+ * dir.read # => "config.h"
*
- * d = Dir.new("testdir")
- * d.read #=> "."
- * d.read #=> ".."
- * d.read #=> "config.h"
*/
static VALUE
dir_read(VALUE dir)
@@ -719,78 +894,96 @@ dir_read(VALUE dir)
struct dirent *dp;
GetDIR(dir, dirp);
- errno = 0;
+ rb_errno_set(0);
if ((dp = READDIR(dirp->dir, dirp->enc)) != NULL) {
- return rb_external_str_new_with_enc(dp->d_name, NAMLEN(dp), dirp->enc);
+ return rb_external_str_new_with_enc(dp->d_name, NAMLEN(dp), dirp->enc);
}
else {
- if (errno != 0) rb_sys_fail(0);
- return Qnil; /* end of stream */
+ int e = errno;
+ if (e != 0) rb_syserr_fail(e, 0);
+ return Qnil; /* end of stream */
}
}
+static VALUE dir_each_entry(VALUE, VALUE (*)(VALUE, VALUE), VALUE, int);
+
+static VALUE
+dir_yield(VALUE arg, VALUE path)
+{
+ return rb_yield(path);
+}
+
/*
- * call-seq:
- * dir.each { |filename| block } -> dir
- * dir.each -> an_enumerator
+ * call-seq:
+ * each {|entry_name| ... } -> self
*
- * Calls the block once for each entry in this directory, passing the
- * filename of each entry as a parameter to the block.
+ * Calls the block with each entry name in +self+:
*
- * If no block is given, an enumerator is returned instead.
+ * Dir.new('example').each {|entry_name| p entry_name }
*
- * d = Dir.new("testdir")
- * d.each {|x| puts "Got #{x}" }
+ * Output:
+
+ * "."
+ * ".."
+ * "config.h"
+ * "lib"
+ * "main.rb"
*
- * <em>produces:</em>
+ * With no block given, returns an Enumerator.
*
- * Got .
- * Got ..
- * Got config.h
- * Got main.rb
*/
static VALUE
dir_each(VALUE dir)
{
+ RETURN_ENUMERATOR(dir, 0, 0);
+ return dir_each_entry(dir, dir_yield, Qnil, FALSE);
+}
+
+static VALUE
+dir_each_entry(VALUE dir, VALUE (*each)(VALUE, VALUE), VALUE arg, int children_only)
+{
struct dir_data *dirp;
struct dirent *dp;
IF_NORMALIZE_UTF8PATH(int norm_p);
- RETURN_ENUMERATOR(dir, 0, 0);
GetDIR(dir, dirp);
rewinddir(dirp->dir);
IF_NORMALIZE_UTF8PATH(norm_p = need_normalization(dirp->dir, RSTRING_PTR(dirp->path)));
while ((dp = READDIR(dirp->dir, dirp->enc)) != NULL) {
- const char *name = dp->d_name;
- size_t namlen = NAMLEN(dp);
- VALUE path;
+ const char *name = dp->d_name;
+ size_t namlen = NAMLEN(dp);
+ VALUE path;
+
+ if (children_only && name[0] == '.') {
+ if (namlen == 1) continue; /* current directory */
+ if (namlen == 2 && name[1] == '.') continue; /* parent directory */
+ }
#if NORMALIZE_UTF8PATH
- if (norm_p && has_nonascii(name, namlen) &&
- !NIL_P(path = rb_str_normalize_ospath(name, namlen))) {
- path = rb_external_str_with_enc(path, dirp->enc);
- }
- else
+ if (norm_p && has_nonascii(name, namlen) &&
+ !NIL_P(path = rb_str_normalize_ospath(name, namlen))) {
+ path = rb_external_str_with_enc(path, dirp->enc);
+ }
+ else
#endif
- path = rb_external_str_new_with_enc(name, namlen, dirp->enc);
- rb_yield(path);
- if (dirp->dir == NULL) dir_closed();
+ path = rb_external_str_new_with_enc(name, namlen, dirp->enc);
+ (*each)(arg, path);
}
return dir;
}
#ifdef HAVE_TELLDIR
/*
- * call-seq:
- * dir.pos -> integer
- * dir.tell -> integer
+ * call-seq:
+ * tell -> integer
*
- * Returns the current position in <em>dir</em>. See also
- * <code>Dir#seek</code>.
+ * Returns the current position of +self+;
+ * see {Dir As Stream-Like}[rdoc-ref:Dir@Dir+As+Stream-Like]:
+ *
+ * dir = Dir.new('example')
+ * dir.tell # => 0
+ * dir.read # => "."
+ * dir.tell # => 1
*
- * d = Dir.new("testdir")
- * d.tell #=> 0
- * d.read #=> "."
- * d.tell #=> 12
*/
static VALUE
dir_tell(VALUE dir)
@@ -799,7 +992,8 @@ dir_tell(VALUE dir)
long pos;
GetDIR(dir, dirp);
- pos = telldir(dirp->dir);
+ if((pos = telldir(dirp->dir)) < 0)
+ rb_sys_fail("telldir");
return rb_int2inum(pos);
}
#else
@@ -808,18 +1002,24 @@ dir_tell(VALUE dir)
#ifdef HAVE_SEEKDIR
/*
- * call-seq:
- * dir.seek( integer ) -> dir
- *
- * Seeks to a particular location in <em>dir</em>. <i>integer</i>
- * must be a value returned by <code>Dir#tell</code>.
- *
- * d = Dir.new("testdir") #=> #<Dir:0x401b3c40>
- * d.read #=> "."
- * i = d.tell #=> 12
- * d.read #=> ".."
- * d.seek(i) #=> #<Dir:0x401b3c40>
- * d.read #=> ".."
+ * call-seq:
+ * seek(position) -> self
+ *
+ * Sets the position in +self+ and returns +self+.
+ * The value of +position+ should have been returned from an earlier call to #tell;
+ * if not, the return values from subsequent calls to #read are unspecified.
+ *
+ * See {Dir As Stream-Like}[rdoc-ref:Dir@Dir+As+Stream-Like].
+ *
+ * Examples:
+ *
+ * dir = Dir.new('example')
+ * dir.pos # => 0
+ * dir.seek(3) # => #<Dir:example>
+ * dir.pos # => 3
+ * dir.seek(30) # => #<Dir:example>
+ * dir.pos # => 5
+ *
*/
static VALUE
dir_seek(VALUE dir, VALUE pos)
@@ -837,18 +1037,24 @@ dir_seek(VALUE dir, VALUE pos)
#ifdef HAVE_SEEKDIR
/*
- * call-seq:
- * dir.pos = integer -> integer
- *
- * Synonym for <code>Dir#seek</code>, but returns the position
- * parameter.
- *
- * d = Dir.new("testdir") #=> #<Dir:0x401b3c40>
- * d.read #=> "."
- * i = d.pos #=> 12
- * d.read #=> ".."
- * d.pos = i #=> 12
- * d.read #=> ".."
+ * call-seq:
+ * pos = position -> integer
+ *
+ * Sets the position in +self+ and returns +position+.
+ * The value of +position+ should have been returned from an earlier call to #tell;
+ * if not, the return values from subsequent calls to #read are unspecified.
+ *
+ * See {Dir As Stream-Like}[rdoc-ref:Dir@Dir+As+Stream-Like].
+ *
+ * Examples:
+ *
+ * dir = Dir.new('example')
+ * dir.pos # => 0
+ * dir.pos = 3 # => 3
+ * dir.pos # => 3
+ * dir.pos = 30 # => 30
+ * dir.pos # => 5
+ *
*/
static VALUE
dir_set_pos(VALUE dir, VALUE pos)
@@ -861,15 +1067,19 @@ dir_set_pos(VALUE dir, VALUE pos)
#endif
/*
- * call-seq:
- * dir.rewind -> dir
+ * call-seq:
+ * rewind -> self
*
- * Repositions <em>dir</em> to the first entry.
+ * Sets the position in +self+ to zero;
+ * see {Dir As Stream-Like}[rdoc-ref:Dir@Dir+As+Stream-Like]:
+ *
+ * dir = Dir.new('example')
+ * dir.read # => "."
+ * dir.read # => ".."
+ * dir.pos # => 2
+ * dir.rewind # => #<Dir:example>
+ * dir.pos # => 0
*
- * d = Dir.new("testdir")
- * d.read #=> "."
- * d.rewind #=> #<Dir:0x401b3fb0>
- * d.read #=> "."
*/
static VALUE
dir_rewind(VALUE dir)
@@ -882,14 +1092,18 @@ dir_rewind(VALUE dir)
}
/*
- * call-seq:
- * dir.close -> nil
+ * call-seq:
+ * close -> nil
+ *
+ * Closes the stream in +self+, if it is open, and returns +nil+;
+ * ignored if +self+ is already closed:
*
- * Closes the directory stream. Any further attempts to access
- * <em>dir</em> will raise an <code>IOError</code>.
+ * dir = Dir.new('example')
+ * dir.read # => "."
+ * dir.close # => nil
+ * dir.close # => nil
+ * dir.read # Raises IOError.
*
- * d = Dir.new("testdir")
- * d.close #=> nil
*/
static VALUE
dir_close(VALUE dir)
@@ -898,157 +1112,416 @@ dir_close(VALUE dir)
dirp = dir_get(dir);
if (!dirp->dir) return Qnil;
- closedir(dirp->dir);
- dirp->dir = NULL;
+ close_dir_data(dirp);
return Qnil;
}
+static void *
+nogvl_chdir(void *ptr)
+{
+ const char *path = ptr;
+
+ return (void *)(VALUE)chdir(path);
+}
+
+static void
+dir_chdir0(VALUE path)
+{
+ if (IO_WITHOUT_GVL_INT(nogvl_chdir, (void*)RSTRING_PTR(path)) < 0)
+ rb_sys_fail_path(path);
+}
+
+static struct {
+ VALUE thread;
+ VALUE path;
+ int line;
+ int blocking;
+} chdir_lock = {
+ .blocking = 0, .thread = Qnil,
+ .path = Qnil, .line = 0,
+};
+
+static void
+chdir_enter(void)
+{
+ if (chdir_lock.blocking == 0) {
+ chdir_lock.path = rb_source_location(&chdir_lock.line);
+ }
+ chdir_lock.blocking++;
+ if (NIL_P(chdir_lock.thread)) {
+ chdir_lock.thread = rb_thread_current();
+ }
+}
+
static void
-dir_chdir(VALUE path)
+chdir_leave(void)
{
- if (chdir(RSTRING_PTR(path)) < 0)
- rb_sys_fail_path(path);
+ chdir_lock.blocking--;
+ if (chdir_lock.blocking == 0) {
+ chdir_lock.thread = Qnil;
+ chdir_lock.path = Qnil;
+ chdir_lock.line = 0;
+ }
}
-static int chdir_blocking = 0;
-static VALUE chdir_thread = Qnil;
+static int
+chdir_alone_block_p(void)
+{
+ int block_given = rb_block_given_p();
+ if (chdir_lock.blocking > 0) {
+ if (rb_thread_current() != chdir_lock.thread)
+ rb_raise(rb_eRuntimeError, "conflicting chdir during another chdir block");
+ if (!block_given) {
+ if (!NIL_P(chdir_lock.path)) {
+ rb_warn("conflicting chdir during another chdir block\n"
+ "%" PRIsVALUE ":%d: note: previous chdir was here",
+ chdir_lock.path, chdir_lock.line);
+ }
+ else {
+ rb_warn("conflicting chdir during another chdir block");
+ }
+ }
+ }
+ return block_given;
+}
struct chdir_data {
VALUE old_path, new_path;
int done;
+ bool yield_path;
};
static VALUE
-chdir_yield(struct chdir_data *args)
+chdir_yield(VALUE v)
{
- dir_chdir(args->new_path);
+ struct chdir_data *args = (void *)v;
+ dir_chdir0(args->new_path);
args->done = TRUE;
- chdir_blocking++;
- if (chdir_thread == Qnil)
- chdir_thread = rb_thread_current();
- return rb_yield(args->new_path);
+ chdir_enter();
+ return args->yield_path ? rb_yield(args->new_path) : rb_yield_values2(0, NULL);
}
static VALUE
-chdir_restore(struct chdir_data *args)
+chdir_restore(VALUE v)
{
+ struct chdir_data *args = (void *)v;
if (args->done) {
- chdir_blocking--;
- if (chdir_blocking == 0)
- chdir_thread = Qnil;
- dir_chdir(args->old_path);
+ chdir_leave();
+ dir_chdir0(args->old_path);
}
return Qnil;
}
+static VALUE
+chdir_path(VALUE path, bool yield_path)
+{
+ if (chdir_alone_block_p()) {
+ struct chdir_data args;
+
+ args.old_path = rb_str_encode_ospath(rb_dir_getwd());
+ args.new_path = path;
+ args.done = FALSE;
+ args.yield_path = yield_path;
+ return rb_ensure(chdir_yield, (VALUE)&args, chdir_restore, (VALUE)&args);
+ }
+ else {
+ char *p = RSTRING_PTR(path);
+ int r = IO_WITHOUT_GVL_INT(nogvl_chdir, p);
+ if (r < 0)
+ rb_sys_fail_path(path);
+ }
+
+ return INT2FIX(0);
+}
+
/*
- * call-seq:
- * Dir.chdir( [ string] ) -> 0
- * Dir.chdir( [ string] ) {| path | block } -> anObject
- *
- * Changes the current working directory of the process to the given
- * string. When called without an argument, changes the directory to
- * the value of the environment variable <code>HOME</code>, or
- * <code>LOGDIR</code>. <code>SystemCallError</code> (probably
- * <code>Errno::ENOENT</code>) if the target directory does not exist.
- *
- * If a block is given, it is passed the name of the new current
- * directory, and the block is executed with that as the current
- * directory. The original working directory is restored when the block
- * exits. The return value of <code>chdir</code> is the value of the
- * block. <code>chdir</code> blocks can be nested, but in a
- * multi-threaded program an error will be raised if a thread attempts
- * to open a <code>chdir</code> block while another thread has one
- * open.
- *
- * Dir.chdir("/var/spool/mail")
- * puts Dir.pwd
- * Dir.chdir("/tmp") do
- * puts Dir.pwd
- * Dir.chdir("/usr") do
- * puts Dir.pwd
- * end
- * puts Dir.pwd
+ * call-seq:
+ * Dir.chdir(new_dirpath) -> 0
+ * Dir.chdir -> 0
+ * Dir.chdir(new_dirpath) {|new_dirpath| ... } -> object
+ * Dir.chdir {|cur_dirpath| ... } -> object
+ *
+ * Changes the current working directory.
+ *
+ * With argument +new_dirpath+ and no block,
+ * changes to the given +dirpath+:
+ *
+ * Dir.pwd # => "/example"
+ * Dir.chdir('..') # => 0
+ * Dir.pwd # => "/"
+ *
+ * With no argument and no block:
+ *
+ * - Changes to the value of environment variable +HOME+ if defined.
+ * - Otherwise changes to the value of environment variable +LOGDIR+ if defined.
+ * - Otherwise makes no change.
+ *
+ * With argument +new_dirpath+ and a block, temporarily changes the working directory:
+ *
+ * - Calls the block with the argument.
+ * - Changes to the given directory.
+ * - Executes the block (yielding the new path).
+ * - Restores the previous working directory.
+ * - Returns the block's return value.
+ *
+ * Example:
+ *
+ * Dir.chdir('/var/spool/mail')
+ * Dir.pwd # => "/var/spool/mail"
+ * Dir.chdir('/tmp') do
+ * Dir.pwd # => "/tmp"
+ * end
+ * Dir.pwd # => "/var/spool/mail"
+ *
+ * With no argument and a block,
+ * calls the block with the current working directory (string)
+ * and returns the block's return value.
+ *
+ * Calls to \Dir.chdir with blocks may be nested:
+ *
+ * Dir.chdir('/var/spool/mail')
+ * Dir.pwd # => "/var/spool/mail"
+ * Dir.chdir('/tmp') do
+ * Dir.pwd # => "/tmp"
+ * Dir.chdir('/usr') do
+ * Dir.pwd # => "/usr"
* end
- * puts Dir.pwd
+ * Dir.pwd # => "/tmp"
+ * end
+ * Dir.pwd # => "/var/spool/mail"
*
- * <em>produces:</em>
+ * In a multi-threaded program an error is raised if a thread attempts
+ * to open a +chdir+ block while another thread has one open,
+ * or a call to +chdir+ without a block occurs inside
+ * a block passed to +chdir+ (even in the same thread).
*
- * /var/spool/mail
- * /tmp
- * /usr
- * /tmp
- * /var/spool/mail
+ * Raises an exception if the target directory does not exist.
*/
static VALUE
dir_s_chdir(int argc, VALUE *argv, VALUE obj)
{
VALUE path = Qnil;
- if (rb_scan_args(argc, argv, "01", &path) == 1) {
- FilePathValue(path);
- path = rb_str_encode_ospath(path);
+ if (rb_check_arity(argc, 0, 1) == 1) {
+ path = rb_str_encode_ospath(rb_get_path(argv[0]));
}
else {
- const char *dist = getenv("HOME");
- if (!dist) {
- dist = getenv("LOGDIR");
- if (!dist) rb_raise(rb_eArgError, "HOME/LOGDIR not set");
- }
- path = rb_str_new2(dist);
+ const char *dist = getenv("HOME");
+ if (!dist) {
+ dist = getenv("LOGDIR");
+ if (!dist) rb_raise(rb_eArgError, "HOME/LOGDIR not set");
+ }
+ path = rb_str_new2(dist);
}
- if (chdir_blocking > 0) {
- if (!rb_block_given_p() || rb_thread_current() != chdir_thread)
- rb_warn("conflicting chdir during another chdir block");
+ return chdir_path(path, true);
+}
+
+#if defined(HAVE_FCHDIR) && defined(HAVE_DIRFD) && HAVE_FCHDIR && HAVE_DIRFD
+static void *
+nogvl_fchdir(void *ptr)
+{
+ const int *fd = ptr;
+
+ return (void *)(VALUE)fchdir(*fd);
+}
+
+static void
+dir_fchdir(int fd)
+{
+ if (IO_WITHOUT_GVL_INT(nogvl_fchdir, (void *)&fd) < 0)
+ rb_sys_fail("fchdir");
+}
+
+struct fchdir_data {
+ VALUE old_dir;
+ int fd;
+ int done;
+};
+
+static VALUE
+fchdir_yield(VALUE v)
+{
+ struct fchdir_data *args = (void *)v;
+ dir_fchdir(args->fd);
+ args->done = TRUE;
+ chdir_enter();
+ return rb_yield_values(0);
+}
+
+static VALUE
+fchdir_restore(VALUE v)
+{
+ struct fchdir_data *args = (void *)v;
+ if (args->done) {
+ chdir_leave();
+ dir_fchdir(RB_NUM2INT(dir_fileno(args->old_dir)));
}
+ dir_close(args->old_dir);
+ return Qnil;
+}
- if (rb_block_given_p()) {
- struct chdir_data args;
+/*
+ * call-seq:
+ * Dir.fchdir(fd) -> 0
+ * Dir.fchdir(fd) { ... } -> object
+ *
+ * Changes the current working directory to the directory
+ * specified by the integer file descriptor +fd+.
+ *
+ * When passing a file descriptor over a UNIX socket or to a child process,
+ * using +fchdir+ instead of +chdir+ avoids the
+ * {time-of-check to time-of-use vulnerability}[https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use]
+ *
+ * With no block, changes to the directory given by +fd+:
+ *
+ * Dir.chdir('/var/spool/mail')
+ * Dir.pwd # => "/var/spool/mail"
+ * dir = Dir.new('/usr')
+ * fd = dir.fileno
+ * Dir.fchdir(fd)
+ * Dir.pwd # => "/usr"
+ *
+ * With a block, temporarily changes the working directory:
+ *
+ * - Calls the block with the argument.
+ * - Changes to the given directory.
+ * - Executes the block (yields no args).
+ * - Restores the previous working directory.
+ * - Returns the block's return value.
+ *
+ * Example:
+ *
+ * Dir.chdir('/var/spool/mail')
+ * Dir.pwd # => "/var/spool/mail"
+ * dir = Dir.new('/tmp')
+ * fd = dir.fileno
+ * Dir.fchdir(fd) do
+ * Dir.pwd # => "/tmp"
+ * end
+ * Dir.pwd # => "/var/spool/mail"
+ *
+ * This method uses the
+ * {fchdir()}[https://www.man7.org/linux/man-pages/man3/fchdir.3p.html]
+ * function defined by POSIX 2008;
+ * the method is not implemented on non-POSIX platforms (raises NotImplementedError).
+ *
+ * Raises an exception if the file descriptor is not valid.
+ *
+ * In a multi-threaded program an error is raised if a thread attempts
+ * to open a +chdir+ block while another thread has one open,
+ * or a call to +chdir+ without a block occurs inside
+ * a block passed to +chdir+ (even in the same thread).
+ */
+static VALUE
+dir_s_fchdir(VALUE klass, VALUE fd_value)
+{
+ int fd = RB_NUM2INT(fd_value);
- args.old_path = rb_str_encode_ospath(rb_dir_getwd());
- args.new_path = path;
- args.done = FALSE;
- return rb_ensure(chdir_yield, (VALUE)&args, chdir_restore, (VALUE)&args);
+ if (chdir_alone_block_p()) {
+ struct fchdir_data args;
+ args.old_dir = dir_s_alloc(klass);
+ dir_initialize(NULL, args.old_dir, rb_fstring_cstr("."), Qnil);
+ args.fd = fd;
+ args.done = FALSE;
+ return rb_ensure(fchdir_yield, (VALUE)&args, fchdir_restore, (VALUE)&args);
+ }
+ else {
+ int r = IO_WITHOUT_GVL_INT(nogvl_fchdir, &fd);
+ if (r < 0)
+ rb_sys_fail("fchdir");
}
- dir_chdir(path);
return INT2FIX(0);
}
+#else
+#define dir_s_fchdir rb_f_notimplement
+#endif
+/*
+ * call-seq:
+ * chdir -> 0
+ * chdir { ... } -> object
+ *
+ * Changes the current working directory to +self+:
+ *
+ * Dir.pwd # => "/"
+ * dir = Dir.new('example')
+ * dir.chdir
+ * Dir.pwd # => "/example"
+ *
+ * With a block, temporarily changes the working directory:
+ *
+ * - Calls the block.
+ * - Changes to the given directory.
+ * - Executes the block (yields no args).
+ * - Restores the previous working directory.
+ * - Returns the block's return value.
+ *
+ * Uses Dir.fchdir if available, and Dir.chdir if not, see those
+ * methods for caveats.
+ */
+static VALUE
+dir_chdir(VALUE dir)
+{
+#if defined(HAVE_FCHDIR) && defined(HAVE_DIRFD) && HAVE_FCHDIR && HAVE_DIRFD
+ return dir_s_fchdir(rb_cDir, dir_fileno(dir));
+#else
+ return chdir_path(dir_get(dir)->path, false);
+#endif
+}
+
+#ifndef _WIN32
VALUE
-rb_dir_getwd(void)
+rb_dir_getwd_ospath(void)
{
char *path;
VALUE cwd;
- int fsenc = rb_enc_to_index(rb_filesystem_encoding());
+ VALUE path_guard;
- if (fsenc == ENCINDEX_US_ASCII) fsenc = ENCINDEX_ASCII;
- path = my_getcwd();
+ path_guard = rb_imemo_tmpbuf_new();
+ path = ruby_getcwd();
+ rb_imemo_tmpbuf_set_ptr(path_guard, path);
#ifdef __APPLE__
cwd = rb_str_normalize_ospath(path, strlen(path));
- OBJ_TAINT(cwd);
#else
- cwd = rb_tainted_str_new2(path);
+ cwd = rb_str_new2(path);
#endif
- rb_enc_associate_index(cwd, fsenc);
-
- xfree(path);
+ rb_free_tmp_buffer(&path_guard);
return cwd;
}
+#endif
+
+VALUE
+rb_dir_getwd(void)
+{
+ rb_encoding *fs = rb_filesystem_encoding();
+ int fsenc = rb_enc_to_index(fs);
+ VALUE cwd = rb_dir_getwd_ospath();
+
+ switch (fsenc) {
+ case ENCINDEX_US_ASCII:
+ fsenc = ENCINDEX_ASCII_8BIT;
+ case ENCINDEX_ASCII_8BIT:
+ break;
+#if defined _WIN32 || defined __APPLE__
+ default:
+ return rb_str_conv_enc(cwd, NULL, fs);
+#endif
+ }
+ return rb_enc_associate_index(cwd, fsenc);
+}
/*
- * call-seq:
- * Dir.getwd -> string
- * Dir.pwd -> string
+ * call-seq:
+ * Dir.pwd -> string
*
- * Returns the path to the current working directory of this process as
- * a string.
+ * Returns the path to the current working directory:
+ *
+ * Dir.chdir("/tmp") # => 0
+ * Dir.pwd # => "/tmp"
*
- * Dir.chdir("/tmp") #=> 0
- * Dir.getwd #=> "/tmp"
- * Dir.pwd #=> "/tmp"
*/
static VALUE
dir_s_getwd(VALUE dir)
@@ -1070,28 +1543,37 @@ check_dirname(VALUE dir)
pend = path + len;
pend = rb_enc_path_end(rb_enc_path_skip_prefix(path, pend, enc), pend, enc);
if (pend - path < len) {
- d = rb_str_subseq(d, 0, pend - path);
- StringValueCStr(d);
+ d = rb_str_subseq(d, 0, pend - path);
+ StringValueCStr(d);
}
return rb_str_encode_ospath(d);
}
#if defined(HAVE_CHROOT)
+static void *
+nogvl_chroot(void *dirname)
+{
+ return (void *)(VALUE)chroot((const char *)dirname);
+}
+
/*
- * call-seq:
- * Dir.chroot( string ) -> 0
+ * call-seq:
+ * Dir.chroot(dirpath) -> 0
*
- * Changes this process's idea of the file system root. Only a
- * privileged process may make this call. Not available on all
- * platforms. On Unix systems, see <code>chroot(2)</code> for more
- * information.
+ * Changes the root directory of the calling process to that specified in +dirpath+.
+ * The new root directory is used for pathnames beginning with <tt>'/'</tt>.
+ * The root directory is inherited by all children of the calling process.
+ *
+ * Only a privileged process may call +chroot+.
+ *
+ * See {Linux chroot}[https://man7.org/linux/man-pages/man2/chroot.2.html].
*/
static VALUE
dir_s_chroot(VALUE dir, VALUE path)
{
path = check_dirname(path);
- if (chroot(RSTRING_PTR(path)) == -1)
- rb_sys_fail_path(path);
+ if (IO_WITHOUT_GVL_INT(nogvl_chroot, (void *)RSTRING_PTR(path)) == -1)
+ rb_sys_fail_path(path);
return INT2FIX(0);
}
@@ -1099,56 +1581,87 @@ dir_s_chroot(VALUE dir, VALUE path)
#define dir_s_chroot rb_f_notimplement
#endif
+struct mkdir_arg {
+ const char *path;
+ mode_t mode;
+};
+
+static void *
+nogvl_mkdir(void *ptr)
+{
+ struct mkdir_arg *m = ptr;
+
+ return (void *)(VALUE)mkdir(m->path, m->mode);
+}
+
/*
- * call-seq:
- * Dir.mkdir( string [, integer] ) -> 0
+ * call-seq:
+ * Dir.mkdir(dirpath, permissions = 0775) -> 0
*
- * Makes a new directory named by <i>string</i>, with permissions
- * specified by the optional parameter <i>anInteger</i>. The
- * permissions may be modified by the value of
- * <code>File::umask</code>, and are ignored on NT. Raises a
- * <code>SystemCallError</code> if the directory cannot be created. See
- * also the discussion of permissions in the class documentation for
- * <code>File</code>.
+ * Creates a directory in the underlying file system
+ * at +dirpath+ with the given +permissions+;
+ * returns zero:
*
- * Dir.mkdir(File.join(Dir.home, ".foo"), 0700) #=> 0
+ * Dir.mkdir('foo')
+ * File.stat(Dir.new('foo')).mode.to_s(8)[1..4] # => "0755"
+ * Dir.mkdir('bar', 0644)
+ * File.stat(Dir.new('bar')).mode.to_s(8)[1..4] # => "0644"
*
+ * See {File Permissions}[rdoc-ref:File@File+Permissions].
+ * Note that argument +permissions+ is ignored on Windows.
*/
static VALUE
dir_s_mkdir(int argc, VALUE *argv, VALUE obj)
{
+ struct mkdir_arg m;
VALUE path, vmode;
- int mode;
+ int r;
if (rb_scan_args(argc, argv, "11", &path, &vmode) == 2) {
- mode = NUM2INT(vmode);
+ m.mode = NUM2MODET(vmode);
}
else {
- mode = 0777;
+ m.mode = 0777;
}
path = check_dirname(path);
- if (mkdir(RSTRING_PTR(path), mode) == -1)
- rb_sys_fail_path(path);
+ m.path = RSTRING_PTR(path);
+ r = IO_WITHOUT_GVL_INT(nogvl_mkdir, &m);
+ if (r < 0)
+ rb_sys_fail_path(path);
return INT2FIX(0);
}
+static void *
+nogvl_rmdir(void *ptr)
+{
+ const char *path = ptr;
+
+ return (void *)(VALUE)rmdir(path);
+}
+
/*
- * call-seq:
- * Dir.delete( string ) -> 0
- * Dir.rmdir( string ) -> 0
- * Dir.unlink( string ) -> 0
+ * call-seq:
+ * Dir.rmdir(dirpath) -> 0
+ *
+ * Removes the directory at +dirpath+ from the underlying file system:
*
- * Deletes the named directory. Raises a subclass of
- * <code>SystemCallError</code> if the directory isn't empty.
+ * Dir.rmdir('foo') # => 0
+ *
+ * Raises an exception if the directory is not empty.
*/
static VALUE
dir_s_rmdir(VALUE obj, VALUE dir)
{
+ const char *p;
+ int r;
+
dir = check_dirname(dir);
- if (rmdir(RSTRING_PTR(dir)) < 0)
- rb_sys_fail_path(dir);
+ p = RSTRING_PTR(dir);
+ r = IO_WITHOUT_GVL_INT(nogvl_rmdir, (void *)p);
+ if (r < 0)
+ rb_sys_fail_path(dir);
return INT2FIX(0);
}
@@ -1193,9 +1706,34 @@ sys_enc_warning_in(const char *func, const char *mesg, rb_encoding *enc)
#define sys_warning(val, enc) \
((flags & GLOB_VERBOSE) ? sys_enc_warning_in(RUBY_FUNCTION_NAME_STRING, (val), (enc)) :(void)0)
+static inline size_t
+glob_alloc_size(size_t x, size_t y)
+{
+ size_t z;
+ if (rb_mul_size_overflow(x, y, SSIZE_MAX, &z)) {
+ rb_memerror(); /* or...? */
+ }
+ else {
+ return z;
+ }
+}
+
+static inline void *
+glob_alloc_n(size_t x, size_t y)
+{
+ return malloc(glob_alloc_size(x, y));
+}
+
+static inline void *
+glob_realloc_n(void *p, size_t x, size_t y)
+{
+ return realloc(p, glob_alloc_size(x, y));
+}
+
#define GLOB_ALLOC(type) ((type *)malloc(sizeof(type)))
-#define GLOB_ALLOC_N(type, n) ((type *)malloc(sizeof(type) * (n)))
+#define GLOB_ALLOC_N(type, n) ((type *)glob_alloc_n(sizeof(type), n))
#define GLOB_REALLOC(ptr, size) realloc((ptr), (size))
+#define GLOB_REALLOC_N(ptr, n) glob_realloc_n(ptr, sizeof(*(ptr)), n)
#define GLOB_FREE(ptr) free(ptr)
#define GLOB_JUMP_TAG(status) (((status) == -1) ? rb_memerror() : rb_jump_tag(status))
@@ -1203,34 +1741,118 @@ sys_enc_warning_in(const char *func, const char *mesg, rb_encoding *enc)
* ENOTDIR can be returned by stat(2) if a non-leaf element of the path
* is not a directory.
*/
-#define to_be_ignored(e) ((e) == ENOENT || (e) == ENOTDIR)
+ALWAYS_INLINE(static int to_be_ignored(int e));
+static inline int
+to_be_ignored(int e)
+{
+ return e == ENOENT || e == ENOTDIR;
+}
#ifdef _WIN32
-#define STAT(p, s) rb_w32_ustati64((p), (s))
-#undef lstat
-#define lstat(p, s) rb_w32_ulstati64((p), (s))
+#define STAT(args) (int)(VALUE)nogvl_stat(&(args))
+#define LSTAT(args) (int)(VALUE)nogvl_lstat(&(args))
#else
-#define STAT(p, s) stat((p), (s))
+#define STAT(args) IO_WITHOUT_GVL_INT(nogvl_stat, (void *)&(args))
+#define LSTAT(args) IO_WITHOUT_GVL_INT(nogvl_lstat, (void *)&(args))
+#endif
+
+typedef int ruby_glob_errfunc(const char*, VALUE, const void*, int);
+typedef struct {
+ ruby_glob_func *match;
+ ruby_glob_errfunc *error;
+} ruby_glob_funcs_t;
+
+static const char *
+at_subpath(int fd, size_t baselen, const char *path)
+{
+#if USE_OPENDIR_AT
+ if (fd != (int)AT_FDCWD && baselen > 0) {
+ path += baselen;
+ if (*path == '/') ++path;
+ }
+#endif
+ return *path ? path : ".";
+}
+
+#if USE_OPENDIR_AT
+struct fstatat_args {
+ int fd;
+ int flag;
+ const char *path;
+ struct stat *pst;
+};
+
+static void *
+nogvl_fstatat(void *args)
+{
+ struct fstatat_args *arg = (struct fstatat_args *)args;
+ return (void *)(VALUE)fstatat(arg->fd, arg->path, arg->pst, arg->flag);
+}
+#else
+struct stat_args {
+ const char *path;
+ struct stat *pst;
+};
+
+static void *
+nogvl_stat(void *args)
+{
+ struct stat_args *arg = (struct stat_args *)args;
+ return (void *)(VALUE)stat(arg->path, arg->pst);
+}
#endif
/* System call with warning */
static int
-do_stat(const char *path, struct stat *pst, int flags, rb_encoding *enc)
-{
- int ret = STAT(path, pst);
+do_stat(int fd, size_t baselen, const char *path, struct stat *pst, int flags, rb_encoding *enc)
+{
+#if USE_OPENDIR_AT
+ struct fstatat_args args;
+ args.fd = fd;
+ args.path = path;
+ args.pst = pst;
+ args.flag = 0;
+ int ret = IO_WITHOUT_GVL_INT(nogvl_fstatat, (void *)&args);
+#else
+ struct stat_args args;
+ args.path = path;
+ args.pst = pst;
+ int ret = STAT(args);
+#endif
if (ret < 0 && !to_be_ignored(errno))
- sys_warning(path, enc);
+ sys_warning(path, enc);
return ret;
}
-#if defined HAVE_LSTAT || defined lstat
-static int
-do_lstat(const char *path, struct stat *pst, int flags, rb_encoding *enc)
+#if defined HAVE_LSTAT || defined lstat || USE_OPENDIR_AT
+#if !USE_OPENDIR_AT
+static void *
+nogvl_lstat(void *args)
{
- int ret = lstat(path, pst);
+ struct stat_args *arg = (struct stat_args *)args;
+ return (void *)(VALUE)lstat(arg->path, arg->pst);
+}
+#endif
+
+static int
+do_lstat(int fd, size_t baselen, const char *path, struct stat *pst, int flags, rb_encoding *enc)
+{
+#if USE_OPENDIR_AT
+ struct fstatat_args args;
+ args.fd = fd;
+ args.path = path;
+ args.pst = pst;
+ args.flag = AT_SYMLINK_NOFOLLOW;
+ int ret = IO_WITHOUT_GVL_INT(nogvl_fstatat, (void *)&args);
+#else
+ struct stat_args args;
+ args.path = path;
+ args.pst = pst;
+ int ret = LSTAT(args);
+#endif
if (ret < 0 && !to_be_ignored(errno))
- sys_warning(path, enc);
+ sys_warning(path, enc);
return ret;
}
@@ -1238,21 +1860,109 @@ do_lstat(const char *path, struct stat *pst, int flags, rb_encoding *enc)
#define do_lstat do_stat
#endif
+struct opendir_at_arg {
+ int basefd;
+ const char *path;
+};
+
+static void *
+with_gvl_gc_for_fd(void *ptr)
+{
+ int *e = ptr;
+
+ return (void *)RBOOL(rb_gc_for_fd(*e));
+}
+
+static int
+gc_for_fd_with_gvl(int e)
+{
+ if (vm_initialized)
+ return (int)(VALUE)rb_thread_call_with_gvl(with_gvl_gc_for_fd, &e);
+ else
+ return RBOOL(rb_gc_for_fd(e));
+}
+
+static void *
+nogvl_opendir_at(void *ptr)
+{
+ const struct opendir_at_arg *oaa = ptr;
+ DIR *dirp;
+
+#if USE_OPENDIR_AT
+ const int opendir_flags = (O_RDONLY|O_CLOEXEC|
+# ifdef O_DIRECTORY
+ O_DIRECTORY|
+# endif /* O_DIRECTORY */
+ 0);
+ int fd = openat(oaa->basefd, oaa->path, opendir_flags);
+
+ dirp = fd >= 0 ? fdopendir(fd) : 0;
+ if (!dirp) {
+ int e = errno;
+
+ switch (gc_for_fd_with_gvl(e)) {
+ default:
+ if (fd < 0) fd = openat(oaa->basefd, oaa->path, opendir_flags);
+ if (fd >= 0) dirp = fdopendir(fd);
+ if (dirp) return dirp;
+
+ e = errno;
+ /* fallthrough*/
+ case 0:
+ if (fd >= 0) close(fd);
+ rb_errno_set(e);
+ }
+ }
+#else /* !USE_OPENDIR_AT */
+ dirp = opendir(oaa->path);
+ if (!dirp && gc_for_fd_with_gvl(errno))
+ dirp = opendir(oaa->path);
+#endif /* !USE_OPENDIR_AT */
+
+ return dirp;
+}
+
+static DIR *
+opendir_at(int basefd, const char *path)
+{
+ struct opendir_at_arg oaa;
+
+ oaa.basefd = basefd;
+ oaa.path = path;
+
+ if (vm_initialized)
+ return IO_WITHOUT_GVL(nogvl_opendir_at, &oaa);
+ else
+ return nogvl_opendir_at(&oaa);
+}
+
static DIR *
-do_opendir(const char *path, int flags, rb_encoding *enc)
+do_opendir(const int basefd, size_t baselen, const char *path, int flags, rb_encoding *enc,
+ ruby_glob_errfunc *errfunc, VALUE arg, int *status)
{
DIR *dirp;
#ifdef _WIN32
VALUE tmp = 0;
if (!fundamental_encoding_p(enc)) {
- tmp = rb_enc_str_new(path, strlen(path), enc);
- tmp = rb_str_encode_ospath(tmp);
- path = RSTRING_PTR(tmp);
+ tmp = rb_enc_str_new(path, strlen(path), enc);
+ tmp = rb_str_encode_ospath(tmp);
+ path = RSTRING_PTR(tmp);
}
#endif
- dirp = opendir(path);
- if (dirp == NULL && !to_be_ignored(errno))
- sys_warning(path, enc);
+ dirp = opendir_at(basefd, at_subpath(basefd, baselen, path));
+ if (!dirp) {
+ int e = errno;
+
+ *status = 0;
+ if (!to_be_ignored(e)) {
+ if (errfunc) {
+ *status = (*errfunc)(path, arg, enc, e);
+ }
+ else {
+ sys_warning(path, enc);
+ }
+ }
+ }
#ifdef _WIN32
if (tmp) rb_str_resize(tmp, 0); /* GC guard */
#endif
@@ -1261,7 +1971,7 @@ do_opendir(const char *path, int flags, rb_encoding *enc)
}
/* Globing pattern */
-enum glob_pattern_type { PLAIN, ALPHA, MAGICAL, RECURSIVE, MATCH_ALL, MATCH_DIR };
+enum glob_pattern_type { PLAIN, ALPHA, BRACE, MAGICAL, RECURSIVE, MATCH_ALL, MATCH_DIR };
/* Return nonzero if S has any special globbing chars in it. */
static enum glob_pattern_type
@@ -1269,40 +1979,45 @@ has_magic(const char *p, const char *pend, int flags, rb_encoding *enc)
{
const int escape = !(flags & FNM_NOESCAPE);
int hasalpha = 0;
+ int hasmagical = 0;
register char c;
while (p < pend && (c = *p++) != 0) {
- switch (c) {
- case '*':
- case '?':
- case '[':
- return MAGICAL;
+ switch (c) {
+ case '{':
+ return BRACE;
- case '\\':
- if (escape && p++ >= pend)
- continue;
- break;
+ case '*':
+ case '?':
+ case '[':
+ hasmagical = 1;
+ break;
+
+ case '\\':
+ if (escape && p++ >= pend)
+ continue;
+ break;
#ifdef _WIN32
- case '.':
- break;
+ case '.':
+ break;
- case '~':
- hasalpha = 1;
- break;
+ case '~':
+ hasalpha = 1;
+ break;
#endif
- default:
- if (IS_WIN32 || ISALPHA(c)) {
- hasalpha = 1;
- }
- break;
- }
-
- p = Next(p-1, pend, enc);
+ default:
+ if (IS_WIN32 || ISALPHA(c)) {
+ hasalpha = 1;
+ }
+ break;
+ }
+
+ p = Next(p-1, pend, enc);
}
- return hasalpha ? ALPHA : PLAIN;
+ return hasmagical ? MAGICAL : hasalpha ? ALPHA : PLAIN;
}
/* Find separator in globbing pattern. */
@@ -1315,26 +2030,33 @@ find_dirsep(const char *p, const char *pend, int flags, rb_encoding *enc)
int open = 0;
while ((c = *p++) != 0) {
- switch (c) {
- case '[':
- open = 1;
- continue;
- case ']':
- open = 0;
- continue;
-
- case '/':
- if (!open)
- return (char *)p-1;
- continue;
-
- case '\\':
- if (escape && !(c = *p++))
- return (char *)p-1;
- continue;
- }
-
- p = Next(p-1, pend, enc);
+ switch (c) {
+ case '[':
+ open = 1;
+ continue;
+ case ']':
+ open = 0;
+ continue;
+
+ case '{':
+ open = 1;
+ continue;
+ case '}':
+ open = 0;
+ continue;
+
+ case '/':
+ if (!open)
+ return (char *)p-1;
+ continue;
+
+ case '\\':
+ if (escape && !(c = *p++))
+ return (char *)p-1;
+ continue;
+ }
+
+ p = Next(p-1, pend, enc);
}
return (char *)p-1;
@@ -1348,20 +2070,20 @@ remove_backslashes(char *p, register const char *pend, rb_encoding *enc)
char *s = p;
while (*p) {
- if (*p == '\\') {
- if (t != s)
- memmove(t, s, p - s);
- t += p - s;
- s = ++p;
- if (!*p) break;
- }
- Inc(p, pend, enc);
+ if (*p == '\\') {
+ if (t != s)
+ memmove(t, s, p - s);
+ t += p - s;
+ s = ++p;
+ if (!*p) break;
+ }
+ Inc(p, pend, enc);
}
while (*p++);
if (t != s)
- memmove(t, s, p - s); /* move '\0' too */
+ memmove(t, s, p - s); /* move '\0' too */
return p;
}
@@ -1382,57 +2104,54 @@ glob_make_pattern(const char *p, const char *e, int flags, rb_encoding *enc)
int recursive = 0;
while (p < e && *p) {
- tmp = GLOB_ALLOC(struct glob_pattern);
- if (!tmp) goto error;
- if (p + 2 < e && p[0] == '*' && p[1] == '*' && p[2] == '/') {
- /* fold continuous RECURSIVEs (needed in glob_helper) */
- do { p += 3; while (*p == '/') p++; } while (p[0] == '*' && p[1] == '*' && p[2] == '/');
- tmp->type = RECURSIVE;
- tmp->str = 0;
- dirsep = 1;
- recursive = 1;
- }
- else {
- const char *m = find_dirsep(p, e, flags, enc);
- const enum glob_pattern_type magic = has_magic(p, m, flags, enc);
- const enum glob_pattern_type non_magic = (USE_NAME_ON_FS || FNM_SYSCASE) ? PLAIN : ALPHA;
- char *buf;
-
- if (!(FNM_SYSCASE || magic > non_magic) && !recursive && *m) {
- const char *m2;
- while (has_magic(m+1, m2 = find_dirsep(m+1, e, flags, enc), flags, enc) <= non_magic &&
- *m2) {
- m = m2;
- }
- }
- buf = GLOB_ALLOC_N(char, m-p+1);
- if (!buf) {
- GLOB_FREE(tmp);
- goto error;
- }
- memcpy(buf, p, m-p);
- buf[m-p] = '\0';
- tmp->type = magic > MAGICAL ? MAGICAL : magic > non_magic ? magic : PLAIN;
- tmp->str = buf;
- if (*m) {
- dirsep = 1;
- p = m + 1;
- }
- else {
- dirsep = 0;
- p = m;
- }
- }
- *tail = tmp;
- tail = &tmp->next;
+ tmp = GLOB_ALLOC(struct glob_pattern);
+ if (!tmp) goto error;
+ if (p + 2 < e && p[0] == '*' && p[1] == '*' && p[2] == '/') {
+ /* fold continuous RECURSIVEs (needed in glob_helper) */
+ do { p += 3; while (*p == '/') p++; } while (p[0] == '*' && p[1] == '*' && p[2] == '/');
+ tmp->type = RECURSIVE;
+ tmp->str = 0;
+ dirsep = 1;
+ recursive = 1;
+ }
+ else {
+ const char *m = find_dirsep(p, e, flags, enc);
+ const enum glob_pattern_type magic = has_magic(p, m, flags, enc);
+ const enum glob_pattern_type non_magic = (USE_NAME_ON_FS || FNM_SYSCASE) ? PLAIN : ALPHA;
+ char *buf;
+
+ if (!(FNM_SYSCASE || magic > non_magic) && !recursive && *m) {
+ const char *m2;
+ while (has_magic(m+1, m2 = find_dirsep(m+1, e, flags, enc), flags, enc) <= non_magic &&
+ *m2) {
+ m = m2;
+ }
+ }
+ buf = GLOB_ALLOC_N(char, m-p+1);
+ if (!buf) {
+ GLOB_FREE(tmp);
+ goto error;
+ }
+ memcpy(buf, p, m-p);
+ buf[m-p] = '\0';
+ tmp->type = magic > MAGICAL ? MAGICAL : magic > non_magic ? magic : PLAIN;
+ tmp->str = buf;
+ if (*m) {
+ dirsep = 1;
+ p = m + 1;
+ }
+ else {
+ dirsep = 0;
+ p = m;
+ }
+ }
+ *tail = tmp;
+ tail = &tmp->next;
}
tmp = GLOB_ALLOC(struct glob_pattern);
if (!tmp) {
- error:
- *tail = 0;
- glob_free_pattern(list);
- return 0;
+ goto error;
}
tmp->type = dirsep ? MATCH_DIR : MATCH_ALL;
tmp->str = 0;
@@ -1440,29 +2159,34 @@ glob_make_pattern(const char *p, const char *e, int flags, rb_encoding *enc)
tmp->next = 0;
return list;
+
+ error:
+ *tail = 0;
+ glob_free_pattern(list);
+ return 0;
}
static void
glob_free_pattern(struct glob_pattern *list)
{
while (list) {
- struct glob_pattern *tmp = list;
- list = list->next;
- if (tmp->str)
- GLOB_FREE(tmp->str);
- GLOB_FREE(tmp);
+ struct glob_pattern *tmp = list;
+ list = list->next;
+ if (tmp->str)
+ GLOB_FREE(tmp->str);
+ GLOB_FREE(tmp);
}
}
static char *
-join_path(const char *path, long len, int dirsep, const char *name, size_t namlen)
+join_path(const char *path, size_t len, int dirsep, const char *name, size_t namlen)
{
char *buf = GLOB_ALLOC_N(char, len+namlen+(dirsep?1:0)+1);
if (!buf) return 0;
memcpy(buf, path, len);
if (dirsep) {
- buf[len++] = '/';
+ buf[len++] = '/';
}
memcpy(buf+len, name, namlen);
buf[len+namlen] = '\0';
@@ -1470,22 +2194,33 @@ join_path(const char *path, long len, int dirsep, const char *name, size_t namle
}
#ifdef HAVE_GETATTRLIST
+# if defined HAVE_FGETATTRLIST
+# define is_case_sensitive(dirp, path) is_case_sensitive(dirp)
+# else
+# define is_case_sensitive(dirp, path) is_case_sensitive(path)
+# endif
static int
-is_case_sensitive(DIR *dirp)
+is_case_sensitive(DIR *dirp, const char *path)
{
struct {
- u_int32_t length;
- vol_capabilities_attr_t cap[1];
+ u_int32_t length;
+ vol_capabilities_attr_t cap[1];
} __attribute__((aligned(4), packed)) attrbuf[1];
struct attrlist al = {ATTR_BIT_MAP_COUNT, 0, 0, ATTR_VOL_INFO|ATTR_VOL_CAPABILITIES};
const vol_capabilities_attr_t *const cap = attrbuf[0].cap;
const int idx = VOL_CAPABILITIES_FORMAT;
const uint32_t mask = VOL_CAP_FMT_CASE_SENSITIVE;
+ struct getattrlist_args args = GETATTRLIST_ARGS(&al, attrbuf, FSOPT_NOFOLLOW);
+# if defined HAVE_FGETATTRLIST
+ int ret = gvl_fgetattrlist(&args, dirfd(dirp));
+# else
+ int ret = gvl_getattrlist(&args, path);
+# endif
+ if (ret)
+ return -1;
- if (fgetattrlist(dirfd(dirp), &al, attrbuf, sizeof(attrbuf), FSOPT_NOFOLLOW))
- return -1;
if (!(cap->valid[idx] & mask))
- return -1;
+ return -1;
return (cap->capabilities[idx] & mask) != 0;
}
@@ -1493,10 +2228,10 @@ static char *
replace_real_basename(char *path, long base, rb_encoding *enc, int norm_p, int flags, rb_pathtype_t *type)
{
struct {
- u_int32_t length;
- attrreference_t ref[1];
- fsobj_type_t objtype;
- char path[MAXPATHLEN * 3];
+ u_int32_t length;
+ attrreference_t ref[1];
+ fsobj_type_t objtype;
+ char path[MAXPATHLEN * 3];
} __attribute__((aligned(4), packed)) attrbuf[1];
struct attrlist al = {ATTR_BIT_MAP_COUNT, 0, ATTR_CMN_NAME|ATTR_CMN_OBJTYPE};
const attrreference_t *const ar = attrbuf[0].ref;
@@ -1506,10 +2241,11 @@ replace_real_basename(char *path, long base, rb_encoding *enc, int norm_p, int f
IF_NORMALIZE_UTF8PATH(VALUE utf8str = Qnil);
*type = path_noent;
- if (getattrlist(path, &al, attrbuf, sizeof(attrbuf), FSOPT_NOFOLLOW)) {
- if (!to_be_ignored(errno))
- sys_warning(path, enc);
- return path;
+ struct getattrlist_args args = GETATTRLIST_ARGS(&al, attrbuf, FSOPT_NOFOLLOW);
+ if (gvl_getattrlist(&args, path)) {
+ if (!to_be_ignored(errno))
+ sys_warning(path, enc);
+ return path;
}
switch (attrbuf[0].objtype) {
@@ -1521,21 +2257,21 @@ replace_real_basename(char *path, long base, rb_encoding *enc, int norm_p, int f
name = (char *)ar + ar->attr_dataoffset;
len = (long)ar->attr_length - 1;
if (name + len > (char *)attrbuf + sizeof(attrbuf))
- return path;
+ return path;
# if NORMALIZE_UTF8PATH
if (norm_p && has_nonascii(name, len)) {
- if (!NIL_P(utf8str = rb_str_normalize_ospath(name, len))) {
- RSTRING_GETMEM(utf8str, name, len);
- }
+ if (!NIL_P(utf8str = rb_str_normalize_ospath(name, len))) {
+ RSTRING_GETMEM(utf8str, name, len);
+ }
}
# endif
tmp = GLOB_REALLOC(path, base + len + 1);
if (tmp) {
- path = tmp;
- memcpy(path + base, name, len);
- path[base + len] = '\0';
+ path = tmp;
+ memcpy(path + base, name, len);
+ path[base + len] = '\0';
}
IF_NORMALIZE_UTF8PATH(if (!NIL_P(utf8str)) rb_str_resize(utf8str, 0));
return path;
@@ -1556,66 +2292,66 @@ replace_real_basename(char *path, long base, rb_encoding *enc, int norm_p, int f
long wlen;
int e = 0;
if (!fundamental_encoding_p(enc)) {
- tmp = rb_enc_str_new_cstr(plainname, enc);
- tmp = rb_str_encode_ospath(tmp);
- plainname = RSTRING_PTR(tmp);
+ tmp = rb_enc_str_new_cstr(plainname, enc);
+ tmp = rb_str_encode_ospath(tmp);
+ plainname = RSTRING_PTR(tmp);
}
wplain = rb_w32_mbstr_to_wstr(CP_UTF8, plainname, -1, &wlen);
if (tmp) rb_str_resize(tmp, 0);
if (!wplain) return path;
if (GetFileAttributesExW(wplain, GetFileExInfoStandard, &fa)) {
- h = FindFirstFileW(wplain, &fd);
- e = rb_w32_map_errno(GetLastError());
+ h = FindFirstFileW(wplain, &fd);
+ e = rb_w32_map_errno(GetLastError());
}
if (fa.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) {
- if (!rb_w32_reparse_symlink_p(wplain))
- fa.dwFileAttributes &= ~FILE_ATTRIBUTE_REPARSE_POINT;
+ if (!rb_w32_reparse_symlink_p(wplain))
+ fa.dwFileAttributes &= ~FILE_ATTRIBUTE_REPARSE_POINT;
}
free(wplain);
if (h == INVALID_HANDLE_VALUE) {
- *type = path_noent;
- if (e && !to_be_ignored(e)) {
- errno = e;
- sys_warning(path, enc);
- }
- return path;
+ *type = path_noent;
+ if (e && !to_be_ignored(e)) {
+ errno = e;
+ sys_warning(path, enc);
+ }
+ return path;
}
FindClose(h);
*type =
- (fa.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) ? path_symlink :
- (fa.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? path_directory :
- path_regular;
+ (fa.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) ? path_symlink :
+ (fa.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? path_directory :
+ path_regular;
if (tmp) {
- char *buf;
- tmp = rb_w32_conv_from_wchar(fd.cFileName, enc);
- wlen = RSTRING_LEN(tmp);
- buf = GLOB_REALLOC(path, base + wlen + 1);
- if (buf) {
- path = buf;
- memcpy(path + base, RSTRING_PTR(tmp), wlen);
- path[base + wlen] = 0;
- }
- rb_str_resize(tmp, 0);
+ char *buf;
+ tmp = rb_w32_conv_from_wchar(fd.cFileName, enc);
+ wlen = RSTRING_LEN(tmp);
+ buf = GLOB_REALLOC(path, base + wlen + 1);
+ if (buf) {
+ path = buf;
+ memcpy(path + base, RSTRING_PTR(tmp), wlen);
+ path[base + wlen] = 0;
+ }
+ rb_str_resize(tmp, 0);
}
else {
- char *utf8filename;
- wlen = WideCharToMultiByte(CP_UTF8, 0, fd.cFileName, -1, NULL, 0, NULL, NULL);
- utf8filename = GLOB_REALLOC(0, wlen);
- if (utf8filename) {
- char *buf;
- WideCharToMultiByte(CP_UTF8, 0, fd.cFileName, -1, utf8filename, wlen, NULL, NULL);
- buf = GLOB_REALLOC(path, base + wlen + 1);
- if (buf) {
- path = buf;
- memcpy(path + base, utf8filename, wlen);
- path[base + wlen] = 0;
- }
- GLOB_FREE(utf8filename);
- }
+ char *utf8filename;
+ wlen = WideCharToMultiByte(CP_UTF8, 0, fd.cFileName, -1, NULL, 0, NULL, NULL);
+ utf8filename = GLOB_REALLOC(0, wlen);
+ if (utf8filename) {
+ char *buf;
+ WideCharToMultiByte(CP_UTF8, 0, fd.cFileName, -1, utf8filename, wlen, NULL, NULL);
+ buf = GLOB_REALLOC(path, base + wlen + 1);
+ if (buf) {
+ path = buf;
+ memcpy(path + base, utf8filename, wlen);
+ path[base + wlen] = 0;
+ }
+ GLOB_FREE(utf8filename);
+ }
}
return path;
}
-#elif USE_NAME_ON_FS == 1
+#elif USE_NAME_ON_FS == USE_NAME_ON_FS_REAL_BASENAME
# error not implemented
#endif
@@ -1634,6 +2370,8 @@ replace_real_basename(char *path, long base, rb_encoding *enc, int norm_p, int f
struct glob_args {
void (*func)(const char *, VALUE, void *);
const char *path;
+ const char *base;
+ size_t baselen;
VALUE value;
rb_encoding *enc;
};
@@ -1649,311 +2387,723 @@ glob_func_caller(VALUE val)
return Qnil;
}
+struct glob_error_args {
+ const char *path;
+ rb_encoding *enc;
+ int error;
+};
+
+static VALUE
+glob_func_warning(VALUE val)
+{
+ struct glob_error_args *arg = (struct glob_error_args *)val;
+ rb_syserr_enc_warning(arg->error, arg->enc, "%s", arg->path);
+ return Qnil;
+}
+
+#if 0
+static int
+rb_glob_warning(const char *path, VALUE a, const void *enc, int error)
+{
+ int status;
+ struct glob_error_args args;
+
+ args.path = path;
+ args.enc = enc;
+ args.error = error;
+ rb_protect(glob_func_warning, (VALUE)&args, &status);
+ return status;
+}
+#endif
+
+NORETURN(static VALUE glob_func_error(VALUE val));
+
+static VALUE
+glob_func_error(VALUE val)
+{
+ struct glob_error_args *arg = (struct glob_error_args *)val;
+ VALUE path = rb_enc_str_new_cstr(arg->path, arg->enc);
+ rb_syserr_fail_str(arg->error, path);
+ UNREACHABLE_RETURN(Qnil);
+}
+
+static int
+rb_glob_error(const char *path, VALUE a, const void *enc, int error)
+{
+ int status;
+ struct glob_error_args args;
+ VALUE (*errfunc)(VALUE) = glob_func_error;
+
+ switch (error) {
+ case EACCES:
+#ifdef ENOTCAPABLE
+ case ENOTCAPABLE:
+#endif
+ errfunc = glob_func_warning;
+ }
+ args.path = path;
+ args.enc = enc;
+ args.error = error;
+ rb_protect(errfunc, (VALUE)&args, &status);
+ return status;
+}
+
+typedef struct rb_dirent {
+ long d_namlen;
+ const char *d_name;
+#ifdef _WIN32
+ const char *d_altname;
+#endif
+ uint8_t d_type;
+} rb_dirent_t;
+
static inline int
-dirent_match(const char *pat, rb_encoding *enc, const char *name, const struct dirent *dp, int flags)
+dirent_match(const char *pat, rb_encoding *enc, const char *name, const rb_dirent_t *dp, int flags)
{
if (fnmatch(pat, enc, name, flags) == 0) return 1;
#ifdef _WIN32
if (dp->d_altname && (flags & FNM_SHORTNAME)) {
- if (fnmatch(pat, enc, dp->d_altname, flags) == 0) return 1;
+ if (fnmatch(pat, enc, dp->d_altname, flags) == 0) return 1;
}
#endif
return 0;
}
+struct push_glob_args {
+ int fd;
+ const char *path;
+ size_t baselen;
+ size_t namelen;
+ int dirsep; /* '/' should be placed before appending child entry's name to 'path'. */
+ rb_pathtype_t pathtype; /* type of 'path' */
+ int flags;
+ const ruby_glob_funcs_t *funcs;
+ VALUE arg;
+};
+
+struct dirent_brace_args {
+ const char *name;
+ const rb_dirent_t *dp;
+ int flags;
+};
+
+static int
+dirent_match_brace(const char *pattern, VALUE val, void *enc)
+{
+ struct dirent_brace_args *arg = (struct dirent_brace_args *)val;
+
+ return dirent_match(pattern, enc, arg->name, arg->dp, arg->flags);
+}
+
+/* join paths from pattern list of glob_make_pattern() */
+static char*
+join_path_from_pattern(struct glob_pattern **beg)
+{
+ struct glob_pattern *p;
+ char *path = NULL;
+ size_t path_len = 0;
+
+ for (p = *beg; p; p = p->next) {
+ const char *str;
+ switch (p->type) {
+ case RECURSIVE:
+ str = "**";
+ break;
+ case MATCH_DIR:
+ /* append last slash */
+ str = "";
+ break;
+ default:
+ str = p->str;
+ if (!str) continue;
+ }
+ if (!path) {
+ path_len = strlen(str);
+ path = GLOB_ALLOC_N(char, path_len + 1);
+ if (path) {
+ memcpy(path, str, path_len);
+ path[path_len] = '\0';
+ }
+ }
+ else {
+ size_t len = strlen(str);
+ char *tmp;
+ tmp = GLOB_REALLOC(path, path_len + len + 2);
+ if (tmp) {
+ path = tmp;
+ path[path_len++] = '/';
+ memcpy(path + path_len, str, len);
+ path_len += len;
+ path[path_len] = '\0';
+ }
+ }
+ }
+ return path;
+}
+
+static int push_caller(const char *path, VALUE val, void *enc);
+
+static int ruby_brace_expand(const char *str, int flags, ruby_glob_func *func, VALUE arg,
+ rb_encoding *enc, VALUE var);
+
+static const size_t rb_dirent_name_offset =
+ offsetof(rb_dirent_t, d_type) + sizeof(uint8_t);
+
+static rb_dirent_t *
+dirent_copy(const struct dirent *dp, rb_dirent_t *rdp)
+{
+ if (!dp) return NULL;
+ size_t namlen = NAMLEN(dp);
+ const size_t altlen =
+#ifdef _WIN32
+ dp->d_altlen ? dp->d_altlen + 1 :
+#endif
+ 0;
+ rb_dirent_t *newrdp = rdp;
+ if (!rdp && !(newrdp = malloc(rb_dirent_name_offset + namlen + 1 + altlen)))
+ return NULL;
+ newrdp->d_namlen = namlen;
+ if (!rdp) {
+ char *name = (char *)newrdp + rb_dirent_name_offset;
+ memcpy(name, dp->d_name, namlen);
+ name[namlen] = '\0';
+#ifdef _WIN32
+ newrdp->d_altname = NULL;
+ if (altlen) {
+ char *const altname = name + namlen + 1;
+ memcpy(altname, dp->d_altname, altlen - 1);
+ altname[altlen - 1] = '\0';
+ newrdp->d_altname = altname;
+ }
+#endif
+ newrdp->d_name = name;
+ }
+ else {
+ newrdp->d_name = dp->d_name;
+#ifdef _WIN32
+ newrdp->d_altname = dp->d_altname;
+#endif
+ }
+#if !EMULATE_IFTODT
+ newrdp->d_type = dp->d_type;
+#else
+ newrdp->d_type = 0;
+#endif
+ return newrdp;
+}
+
+typedef union {
+ struct {
+ DIR *dirp;
+ rb_dirent_t ent;
+ } nosort;
+ struct {
+ size_t count, idx;
+ rb_dirent_t **entries;
+ } sort;
+} ruby_glob_entries_t;
+
+static int
+glob_sort_cmp(const void *a, const void *b, void *e)
+{
+ const rb_dirent_t *ent1 = *(void **)a;
+ const rb_dirent_t *ent2 = *(void **)b;
+ return strcmp(ent1->d_name, ent2->d_name);
+}
+
+static void
+glob_dir_finish(ruby_glob_entries_t *ent, int flags)
+{
+ if (flags & FNM_GLOB_NOSORT) {
+ check_closedir(ent->nosort.dirp);
+ ent->nosort.dirp = NULL;
+ }
+ else if (ent->sort.entries) {
+ for (size_t i = 0, count = ent->sort.count; i < count;) {
+ GLOB_FREE(ent->sort.entries[i++]);
+ }
+ GLOB_FREE(ent->sort.entries);
+ ent->sort.entries = NULL;
+ ent->sort.count = ent->sort.idx = 0;
+ }
+}
+
+static ruby_glob_entries_t *
+glob_opendir(ruby_glob_entries_t *ent, DIR *dirp, int flags, rb_encoding *enc)
+{
+ MEMZERO(ent, ruby_glob_entries_t, 1);
+ if (flags & FNM_GLOB_NOSORT) {
+ ent->nosort.dirp = dirp;
+ return ent;
+ }
+ else {
+ void *newp;
+ struct dirent *dp;
+ size_t count = 0, capacity = 0;
+ ent->sort.count = 0;
+ ent->sort.idx = 0;
+ ent->sort.entries = 0;
+#ifdef _WIN32
+ if ((capacity = dirp->nfiles) > 0) {
+ if (!(newp = GLOB_ALLOC_N(rb_dirent_t, capacity))) {
+ check_closedir(dirp);
+ return NULL;
+ }
+ ent->sort.entries = newp;
+ }
+#endif
+ while ((dp = READDIR(dirp, enc)) != NULL) {
+ rb_dirent_t *rdp = dirent_copy(dp, NULL);
+ if (!rdp) {
+ goto nomem;
+ }
+ if (count >= capacity) {
+ capacity += 256;
+ if (!(newp = GLOB_REALLOC_N(ent->sort.entries, capacity)))
+ goto nomem;
+ ent->sort.entries = newp;
+ }
+ ent->sort.entries[count++] = rdp;
+ ent->sort.count = count;
+ }
+ check_closedir(dirp);
+ if (count < capacity) {
+ if (!(newp = GLOB_REALLOC_N(ent->sort.entries, count))) {
+ glob_dir_finish(ent, 0);
+ return NULL;
+ }
+ ent->sort.entries = newp;
+ }
+ ruby_qsort(ent->sort.entries, ent->sort.count, sizeof(ent->sort.entries[0]),
+ glob_sort_cmp, NULL);
+ return ent;
+ }
+
+ nomem:
+ glob_dir_finish(ent, 0);
+ check_closedir(dirp);
+ return NULL;
+}
+
+static rb_dirent_t *
+glob_getent(ruby_glob_entries_t *ent, int flags, rb_encoding *enc)
+{
+ if (flags & FNM_GLOB_NOSORT) {
+ return dirent_copy(READDIR(ent->nosort.dirp, enc), &ent->nosort.ent);
+ }
+ else if (ent->sort.idx < ent->sort.count) {
+ return ent->sort.entries[ent->sort.idx++];
+ }
+ else {
+ return NULL;
+ }
+}
+
static int
glob_helper(
+ int fd,
const char *path,
- long pathlen,
+ size_t baselen,
+ size_t namelen,
int dirsep, /* '/' should be placed before appending child entry's name to 'path'. */
rb_pathtype_t pathtype, /* type of 'path' */
struct glob_pattern **beg,
struct glob_pattern **end,
int flags,
- ruby_glob_func *func,
+ const ruby_glob_funcs_t *funcs,
VALUE arg,
rb_encoding *enc)
{
struct stat st;
int status = 0;
struct glob_pattern **cur, **new_beg, **new_end;
- int plain = 0, magical = 0, recursive = 0, match_all = 0, match_dir = 0;
+ int plain = 0, brace = 0, magical = 0, recursive = 0, match_all = 0, match_dir = 0;
int escape = !(flags & FNM_NOESCAPE);
+ size_t pathlen = baselen + namelen;
+
+ rb_check_stack_overflow();
for (cur = beg; cur < end; ++cur) {
- struct glob_pattern *p = *cur;
- if (p->type == RECURSIVE) {
- recursive = 1;
- p = p->next;
- }
- switch (p->type) {
- case PLAIN:
- plain = 1;
- break;
- case ALPHA:
-#if USE_NAME_ON_FS == 1
- plain = 1;
+ struct glob_pattern *p = *cur;
+ if (p->type == RECURSIVE) {
+ recursive = 1;
+ p = p->next;
+ }
+ switch (p->type) {
+ case PLAIN:
+ plain = 1;
+ break;
+ case ALPHA:
+#if USE_NAME_ON_FS == USE_NAME_ON_FS_REAL_BASENAME
+ plain = 1;
#else
- magical = 1;
-#endif
- break;
- case MAGICAL:
- magical = 2;
- break;
- case MATCH_ALL:
- match_all = 1;
- break;
- case MATCH_DIR:
- match_dir = 1;
- break;
- case RECURSIVE:
- rb_bug("continuous RECURSIVEs");
- }
+ magical = 1;
+#endif
+ break;
+ case BRACE:
+ if (!recursive || strchr(p->str, '/')) {
+ brace = 1;
+ }
+ break;
+ case MAGICAL:
+ magical = 2;
+ break;
+ case MATCH_ALL:
+ match_all = 1;
+ break;
+ case MATCH_DIR:
+ match_dir = 1;
+ break;
+ case RECURSIVE:
+ rb_bug("continuous RECURSIVEs");
+ }
+ }
+
+ if (brace) {
+ struct push_glob_args args;
+ char* brace_path = join_path_from_pattern(beg);
+ if (!brace_path) return -1;
+ args.fd = fd;
+ args.path = path;
+ args.baselen = baselen;
+ args.namelen = namelen;
+ args.dirsep = dirsep;
+ args.pathtype = pathtype;
+ args.flags = flags;
+ args.funcs = funcs;
+ args.arg = arg;
+ status = ruby_brace_expand(brace_path, flags, push_caller, (VALUE)&args, enc, Qfalse);
+ GLOB_FREE(brace_path);
+ return status;
}
if (*path) {
- if (match_all && pathtype == path_unknown) {
- if (do_lstat(path, &st, flags, enc) == 0) {
- pathtype = IFTODT(st.st_mode);
- }
- else {
- pathtype = path_noent;
- }
- }
- if (match_dir && pathtype == path_unknown) {
- if (do_stat(path, &st, flags, enc) == 0) {
- pathtype = IFTODT(st.st_mode);
- }
- else {
- pathtype = path_noent;
- }
- }
- if (match_all && pathtype > path_noent) {
- status = glob_call_func(func, path, arg, enc);
- if (status) return status;
- }
- if (match_dir && pathtype == path_directory) {
- char *tmp = join_path(path, pathlen, dirsep, "", 0);
- if (!tmp) return -1;
- status = glob_call_func(func, tmp, arg, enc);
- GLOB_FREE(tmp);
- if (status) return status;
- }
+ if (match_all && pathtype == path_unknown) {
+ if (do_lstat(fd, baselen, path, &st, flags, enc) == 0) {
+ pathtype = IFTODT(st.st_mode);
+ }
+ else {
+ pathtype = path_noent;
+ }
+ }
+ if (match_dir && (pathtype == path_unknown || pathtype == path_symlink)) {
+ if (do_stat(fd, baselen, path, &st, flags, enc) == 0) {
+ pathtype = IFTODT(st.st_mode);
+ }
+ else {
+ pathtype = path_noent;
+ }
+ }
+ if (match_all && pathtype > path_noent) {
+ const char *subpath = path + baselen + (baselen && path[baselen] == '/');
+ status = glob_call_func(funcs->match, subpath, arg, enc);
+ if (status) return status;
+ }
+ if (match_dir && pathtype == path_directory) {
+ int seplen = (baselen && path[baselen] == '/');
+ const char *subpath = path + baselen + seplen;
+ char *tmp = join_path(subpath, namelen - seplen, dirsep, "", 0);
+ if (!tmp) return -1;
+ status = glob_call_func(funcs->match, tmp, arg, enc);
+ GLOB_FREE(tmp);
+ if (status) return status;
+ }
}
if (pathtype == path_noent) return 0;
if (magical || recursive) {
- struct dirent *dp;
- DIR *dirp;
-# if USE_NAME_ON_FS == 2
- char *plainname = 0;
+ rb_dirent_t *dp;
+ DIR *dirp;
+# if USE_NAME_ON_FS == USE_NAME_ON_FS_BY_FNMATCH
+ char *plainname = 0;
# endif
- IF_NORMALIZE_UTF8PATH(int norm_p);
-# if USE_NAME_ON_FS == 2
- if (cur + 1 == end && (*cur)->type <= ALPHA) {
- plainname = join_path(path, pathlen, dirsep, (*cur)->str, strlen((*cur)->str));
- if (!plainname) return -1;
- dirp = do_opendir(plainname, flags, enc);
- GLOB_FREE(plainname);
- }
- else
+ IF_NORMALIZE_UTF8PATH(int norm_p);
+# if USE_NAME_ON_FS == USE_NAME_ON_FS_BY_FNMATCH
+ if (cur + 1 == end && (*cur)->type <= ALPHA) {
+ plainname = join_path(path, pathlen, dirsep, (*cur)->str, strlen((*cur)->str));
+ if (!plainname) return -1;
+ dirp = do_opendir(fd, basename, plainname, flags, enc, funcs->error, arg, &status);
+ GLOB_FREE(plainname);
+ }
+ else
+# else
+ ;
# endif
- dirp = do_opendir(*path ? path : ".", flags, enc);
- if (dirp == NULL) {
+ dirp = do_opendir(fd, baselen, path, flags, enc, funcs->error, arg, &status);
+ if (dirp == NULL) {
# if FNM_SYSCASE || NORMALIZE_UTF8PATH
- if ((magical < 2) && !recursive && (errno == EACCES)) {
- /* no read permission, fallback */
- goto literally;
- }
+ if ((magical < 2) && !recursive && (errno == EACCES)) {
+ /* no read permission, fallback */
+ goto literally;
+ }
# endif
- return 0;
- }
- IF_NORMALIZE_UTF8PATH(norm_p = need_normalization(dirp, *path ? path : "."));
+ return status;
+ }
+ IF_NORMALIZE_UTF8PATH(norm_p = need_normalization(dirp, *path ? path : "."));
# if NORMALIZE_UTF8PATH
- if (!(norm_p || magical || recursive)) {
- closedir(dirp);
- goto literally;
- }
+ if (!(norm_p || magical || recursive)) {
+ check_closedir(dirp);
+ goto literally;
+ }
# endif
# ifdef HAVE_GETATTRLIST
- if (is_case_sensitive(dirp) == 0)
- flags |= FNM_CASEFOLD;
+ if (is_case_sensitive(dirp, path) == 0)
+ flags |= FNM_CASEFOLD;
# endif
- while ((dp = READDIR(dirp, enc)) != NULL) {
- char *buf;
- rb_pathtype_t new_pathtype = path_unknown;
- const char *name;
- size_t namlen;
- int dotfile = 0;
- IF_NORMALIZE_UTF8PATH(VALUE utf8str = Qnil);
-
- if (recursive && dp->d_name[0] == '.') {
- ++dotfile;
- if (!dp->d_name[1]) {
- /* unless DOTMATCH, skip current directories not to recurse infinitely */
- if (!(flags & FNM_DOTMATCH)) continue;
- ++dotfile;
- }
- else if (dp->d_name[1] == '.' && !dp->d_name[2]) {
- /* always skip parent directories not to recurse infinitely */
- continue;
- }
- }
-
- name = dp->d_name;
- namlen = NAMLEN(dp);
+ ruby_glob_entries_t globent;
+ if (!glob_opendir(&globent, dirp, flags, enc)) {
+ status = 0;
+ if (funcs->error) {
+ status = (*funcs->error)(path, arg, enc, ENOMEM);
+ }
+ else {
+ sys_warning(path, enc);
+ }
+ return status;
+ }
+
+ int skipdot = (flags & FNM_GLOB_SKIPDOT);
+ flags |= FNM_GLOB_SKIPDOT;
+
+ while ((dp = glob_getent(&globent, flags, enc)) != NULL) {
+ char *buf;
+ rb_pathtype_t new_pathtype = path_unknown;
+ const char *name;
+ size_t namlen;
+ int dotfile = 0;
+ IF_NORMALIZE_UTF8PATH(VALUE utf8str = Qnil);
+
+ name = dp->d_name;
+ namlen = dp->d_namlen;
+ if (name[0] == '.') {
+ ++dotfile;
+ if (namlen == 1) {
+ /* unless DOTMATCH, skip current directories not to recurse infinitely */
+ if (recursive && !(flags & FNM_DOTMATCH)) continue;
+ if (skipdot) continue;
+ ++dotfile;
+ new_pathtype = path_directory; /* force to skip stat/lstat */
+ }
+ else if (namlen == 2 && name[1] == '.') {
+ /* always skip parent directories not to recurse infinitely */
+ continue;
+ }
+ }
+
# if NORMALIZE_UTF8PATH
- if (norm_p && has_nonascii(name, namlen)) {
- if (!NIL_P(utf8str = rb_str_normalize_ospath(name, namlen))) {
- RSTRING_GETMEM(utf8str, name, namlen);
- }
- }
+ if (norm_p && has_nonascii(name, namlen)) {
+ if (!NIL_P(utf8str = rb_str_normalize_ospath(name, namlen))) {
+ RSTRING_GETMEM(utf8str, name, namlen);
+ }
+ }
# endif
- buf = join_path(path, pathlen, dirsep, name, namlen);
- IF_NORMALIZE_UTF8PATH(if (!NIL_P(utf8str)) rb_str_resize(utf8str, 0));
- if (!buf) {
- status = -1;
- break;
- }
- name = buf + pathlen + (dirsep != 0);
- if (recursive && dotfile < ((flags & FNM_DOTMATCH) ? 2 : 1)) {
-#ifdef DT_UNKNOWN
- if ((new_pathtype = dp->d_type) != (rb_pathtype_t)DT_UNKNOWN)
- /* Got it. We need nothing more. */
- ;
- else
- /* fall back to call lstat(2) */
-#endif
- /* RECURSIVE never match dot files unless FNM_DOTMATCH is set */
- if (do_lstat(buf, &st, flags, enc) == 0)
- new_pathtype = IFTODT(st.st_mode);
- else
- new_pathtype = path_noent;
- }
-
- new_beg = new_end = GLOB_ALLOC_N(struct glob_pattern *, (end - beg) * 2);
- if (!new_beg) {
- GLOB_FREE(buf);
- status = -1;
- break;
- }
-
- for (cur = beg; cur < end; ++cur) {
- struct glob_pattern *p = *cur;
- if (p->type == RECURSIVE) {
- if (new_pathtype == path_directory || /* not symlink but real directory */
- new_pathtype == path_exist)
- *new_end++ = p; /* append recursive pattern */
- p = p->next; /* 0 times recursion */
- }
- switch (p->type) {
- case ALPHA:
-# if USE_NAME_ON_FS == 2
- if (plainname) {
- *new_end++ = p->next;
- break;
- }
+ buf = join_path(path, pathlen, dirsep, name, namlen);
+ IF_NORMALIZE_UTF8PATH(if (!NIL_P(utf8str)) rb_str_resize(utf8str, 0));
+ if (!buf) {
+ status = -1;
+ break;
+ }
+ name = buf + pathlen + (dirsep != 0);
+#if !EMULATE_IFTODT
+ if (dp->d_type != DT_UNKNOWN) {
+ /* Got it. We need no more lstat. */
+ new_pathtype = dp->d_type;
+ }
+#endif
+ if (recursive && dotfile < ((flags & FNM_DOTMATCH) ? 2 : 1) &&
+ new_pathtype == path_unknown) {
+ /* RECURSIVE never match dot files unless FNM_DOTMATCH is set */
+ if (do_lstat(fd, baselen, buf, &st, flags, enc) == 0)
+ new_pathtype = IFTODT(st.st_mode);
+ else
+ new_pathtype = path_noent;
+ }
+
+ new_beg = new_end = GLOB_ALLOC_N(struct glob_pattern *, (end - beg) * 2);
+ if (!new_beg) {
+ GLOB_FREE(buf);
+ status = -1;
+ break;
+ }
+
+ for (cur = beg; cur < end; ++cur) {
+ struct glob_pattern *p = *cur;
+ struct dirent_brace_args args;
+ if (p->type == RECURSIVE) {
+ if (new_pathtype == path_directory || /* not symlink but real directory */
+ new_pathtype == path_exist) {
+ if (dotfile < ((flags & FNM_DOTMATCH) ? 2 : 1))
+ *new_end++ = p; /* append recursive pattern */
+ }
+ p = p->next; /* 0 times recursion */
+ }
+ switch (p->type) {
+ case BRACE:
+ args.name = name;
+ args.dp = dp;
+ args.flags = flags;
+ if (ruby_brace_expand(p->str, flags, dirent_match_brace,
+ (VALUE)&args, enc, Qfalse) > 0)
+ *new_end++ = p->next;
+ break;
+ case ALPHA:
+# if USE_NAME_ON_FS == USE_NAME_ON_FS_BY_FNMATCH
+ if (plainname) {
+ *new_end++ = p->next;
+ break;
+ }
# endif
- case PLAIN:
- case MAGICAL:
- if (dirent_match(p->str, enc, name, dp, flags))
- *new_end++ = p->next;
- default:
- break;
- }
- }
-
- status = glob_helper(buf, name - buf + namlen, 1,
- new_pathtype, new_beg, new_end,
- flags, func, arg, enc);
- GLOB_FREE(buf);
- GLOB_FREE(new_beg);
- if (status) break;
- }
-
- closedir(dirp);
+ case PLAIN:
+ case MAGICAL:
+ if (dirent_match(p->str, enc, name, dp, flags))
+ *new_end++ = p->next;
+ default:
+ break;
+ }
+ }
+
+ status = glob_helper(fd, buf, baselen, name - buf - baselen + namlen, 1,
+ new_pathtype, new_beg, new_end,
+ flags, funcs, arg, enc);
+ GLOB_FREE(buf);
+ GLOB_FREE(new_beg);
+ if (status) break;
+ }
+
+ glob_dir_finish(&globent, flags);
}
else if (plain) {
- struct glob_pattern **copy_beg, **copy_end, **cur2;
+ struct glob_pattern **copy_beg, **copy_end, **cur2;
# if FNM_SYSCASE || NORMALIZE_UTF8PATH
literally:
# endif
- copy_beg = copy_end = GLOB_ALLOC_N(struct glob_pattern *, end - beg);
- if (!copy_beg) return -1;
- for (cur = beg; cur < end; ++cur)
- *copy_end++ = (*cur)->type <= ALPHA ? *cur : 0;
-
- for (cur = copy_beg; cur < copy_end; ++cur) {
- if (*cur) {
- rb_pathtype_t new_pathtype = path_unknown;
- char *buf;
- char *name;
- size_t len = strlen((*cur)->str) + 1;
- name = GLOB_ALLOC_N(char, len);
- if (!name) {
- status = -1;
- break;
- }
- memcpy(name, (*cur)->str, len);
- if (escape)
- len = remove_backslashes(name, name+len-1, enc) - name;
-
- new_beg = new_end = GLOB_ALLOC_N(struct glob_pattern *, end - beg);
- if (!new_beg) {
- GLOB_FREE(name);
- status = -1;
- break;
- }
- *new_end++ = (*cur)->next;
- for (cur2 = cur + 1; cur2 < copy_end; ++cur2) {
- if (*cur2 && fnmatch((*cur2)->str, enc, name, flags) == 0) {
- *new_end++ = (*cur2)->next;
- *cur2 = 0;
- }
- }
-
- buf = join_path(path, pathlen, dirsep, name, len);
- GLOB_FREE(name);
- if (!buf) {
- GLOB_FREE(new_beg);
- status = -1;
- break;
- }
-#if USE_NAME_ON_FS == 1
- if ((*cur)->type == ALPHA) {
- long base = pathlen + (dirsep != 0);
- buf = replace_real_basename(buf, base, enc, IF_NORMALIZE_UTF8PATH(1)+0,
- flags, &new_pathtype);
- }
-#endif
- status = glob_helper(buf, pathlen + strlen(buf + pathlen), 1,
- new_pathtype, new_beg, new_end,
- flags, func, arg, enc);
- GLOB_FREE(buf);
- GLOB_FREE(new_beg);
- if (status) break;
- }
- }
-
- GLOB_FREE(copy_beg);
+ copy_beg = copy_end = GLOB_ALLOC_N(struct glob_pattern *, end - beg);
+ if (!copy_beg) return -1;
+ for (cur = beg; cur < end; ++cur)
+ *copy_end++ = (*cur)->type <= ALPHA ? *cur : 0;
+
+ for (cur = copy_beg; cur < copy_end; ++cur) {
+ if (*cur) {
+ rb_pathtype_t new_pathtype = path_unknown;
+ char *buf;
+ char *name;
+ size_t len = strlen((*cur)->str) + 1;
+ name = GLOB_ALLOC_N(char, len);
+ if (!name) {
+ status = -1;
+ break;
+ }
+ memcpy(name, (*cur)->str, len);
+ if (escape)
+ len = remove_backslashes(name, name+len-1, enc) - name;
+
+ new_beg = new_end = GLOB_ALLOC_N(struct glob_pattern *, end - beg);
+ if (!new_beg) {
+ GLOB_FREE(name);
+ status = -1;
+ break;
+ }
+ *new_end++ = (*cur)->next;
+ for (cur2 = cur + 1; cur2 < copy_end; ++cur2) {
+ if (*cur2 && fnmatch((*cur2)->str, enc, name, flags) == 0) {
+ *new_end++ = (*cur2)->next;
+ *cur2 = 0;
+ }
+ }
+
+ buf = join_path(path, pathlen, dirsep, name, len);
+ GLOB_FREE(name);
+ if (!buf) {
+ GLOB_FREE(new_beg);
+ status = -1;
+ break;
+ }
+#if USE_NAME_ON_FS == USE_NAME_ON_FS_REAL_BASENAME
+ if ((*cur)->type == ALPHA) {
+ buf = replace_real_basename(buf, pathlen + (dirsep != 0), enc,
+ IF_NORMALIZE_UTF8PATH(1)+0,
+ flags, &new_pathtype);
+ if (!buf) break;
+ }
+#endif
+ status = glob_helper(fd, buf, baselen,
+ namelen + strlen(buf + pathlen), 1,
+ new_pathtype, new_beg, new_end,
+ flags, funcs, arg, enc);
+ GLOB_FREE(buf);
+ GLOB_FREE(new_beg);
+ if (status) break;
+ }
+ }
+
+ GLOB_FREE(copy_beg);
}
return status;
}
static int
-ruby_glob0(const char *path, int flags, ruby_glob_func *func, VALUE arg, rb_encoding *enc)
+push_caller(const char *path, VALUE val, void *enc)
+{
+ struct push_glob_args *arg = (struct push_glob_args *)val;
+ struct glob_pattern *list;
+ int status;
+
+ list = glob_make_pattern(path, path + strlen(path), arg->flags, enc);
+ if (!list) {
+ return -1;
+ }
+ status = glob_helper(arg->fd, arg->path, arg->baselen, arg->namelen, arg->dirsep,
+ arg->pathtype, &list, &list + 1, arg->flags, arg->funcs,
+ arg->arg, enc);
+ glob_free_pattern(list);
+ return status;
+}
+
+static int ruby_glob0(const char *path, int fd, const char *base, int flags,
+ const ruby_glob_funcs_t *funcs, VALUE arg, rb_encoding *enc);
+
+struct push_glob0_args {
+ int fd;
+ const char *base;
+ int flags;
+ const ruby_glob_funcs_t *funcs;
+ VALUE arg;
+};
+
+static int
+push_glob0_caller(const char *path, VALUE val, void *enc)
+{
+ struct push_glob0_args *arg = (struct push_glob0_args *)val;
+ return ruby_glob0(path, arg->fd, arg->base, arg->flags, arg->funcs, arg->arg, enc);
+}
+
+static int
+ruby_glob0(const char *path, int fd, const char *base, int flags,
+ const ruby_glob_funcs_t *funcs, VALUE arg,
+ rb_encoding *enc)
{
struct glob_pattern *list;
const char *root, *start;
char *buf;
- size_t n;
- int status;
+ size_t n, baselen = 0;
+ int status, dirsep = FALSE;
start = root = path;
+
+ if (*root == '{') {
+ struct push_glob0_args args;
+ args.fd = fd;
+ args.base = base;
+ args.flags = flags;
+ args.funcs = funcs;
+ args.arg = arg;
+ return ruby_brace_expand(path, flags, push_glob0_caller, (VALUE)&args, enc, Qfalse);
+ }
+
flags |= FNM_SYSCASE;
#if defined DOSISH
root = rb_enc_path_skip_prefix(root, root + strlen(root), enc);
@@ -1962,6 +3112,12 @@ ruby_glob0(const char *path, int flags, ruby_glob_func *func, VALUE arg, rb_enco
if (*root == '/') root++;
n = root - start;
+ if (!n && base) {
+ n = strlen(base);
+ baselen = n;
+ start = base;
+ dirsep = TRUE;
+ }
buf = GLOB_ALLOC_N(char, n + 1);
if (!buf) return -1;
MEMCPY(buf, start, char, n);
@@ -1969,11 +3125,12 @@ ruby_glob0(const char *path, int flags, ruby_glob_func *func, VALUE arg, rb_enco
list = glob_make_pattern(root, root + strlen(root), flags, enc);
if (!list) {
- GLOB_FREE(buf);
- return -1;
+ GLOB_FREE(buf);
+ return -1;
}
- status = glob_helper(buf, n, 0, path_unknown, &list, &list + 1,
- flags, func, arg, enc);
+ status = glob_helper(fd, buf, baselen, n-baselen, dirsep,
+ path_unknown, &list, &list + 1,
+ flags, funcs, arg, enc);
glob_free_pattern(list);
GLOB_FREE(buf);
@@ -1983,8 +3140,11 @@ ruby_glob0(const char *path, int flags, ruby_glob_func *func, VALUE arg, rb_enco
int
ruby_glob(const char *path, int flags, ruby_glob_func *func, VALUE arg)
{
- return ruby_glob0(path, flags & ~GLOB_VERBOSE, func, arg,
- rb_ascii8bit_encoding());
+ ruby_glob_funcs_t funcs;
+ funcs.match = func;
+ funcs.error = 0;
+ return ruby_glob0(path, AT_FDCWD, 0, flags & ~GLOB_VERBOSE,
+ &funcs, arg, rb_ascii8bit_encoding());
}
static int
@@ -1998,39 +3158,31 @@ rb_glob_caller(const char *path, VALUE a, void *enc)
return status;
}
-static int
-rb_glob2(const char *path, int flags,
- void (*func)(const char *, VALUE, void *), VALUE arg,
- rb_encoding* enc)
+static const ruby_glob_funcs_t rb_glob_funcs = {
+ rb_glob_caller, rb_glob_error,
+};
+
+void
+rb_glob(const char *path, void (*func)(const char *, VALUE, void *), VALUE arg)
{
struct glob_args args;
+ int status;
args.func = func;
args.value = arg;
- args.enc = enc;
+ args.enc = rb_ascii8bit_encoding();
- if (flags & FNM_SYSCASE) {
- rb_warning("Dir.glob() ignores File::FNM_CASEFOLD");
- }
-
- return ruby_glob0(path, flags | GLOB_VERBOSE, rb_glob_caller, (VALUE)&args,
- enc);
-}
-
-void
-rb_glob(const char *path, void (*func)(const char *, VALUE, void *), VALUE arg)
-{
- int status = rb_glob2(path, 0, func, arg, rb_ascii8bit_encoding());
+ status = ruby_glob0(path, AT_FDCWD, 0, GLOB_VERBOSE, &rb_glob_funcs,
+ (VALUE)&args, args.enc);
if (status) GLOB_JUMP_TAG(status);
}
static void
push_pattern(const char *path, VALUE ary, void *enc)
{
-#ifdef __APPLE__
+#if defined _WIN32 || defined __APPLE__
VALUE name = rb_utf8_str_new_cstr(path);
rb_encoding *eenc = rb_default_internal_encoding();
- OBJ_TAINT(name);
name = rb_str_conv_enc(name, NULL, eenc ? eenc : enc);
#else
VALUE name = rb_external_str_new_with_enc(path, strlen(path), enc);
@@ -2040,7 +3192,7 @@ push_pattern(const char *path, VALUE ary, void *enc)
static int
ruby_brace_expand(const char *str, int flags, ruby_glob_func *func, VALUE arg,
- rb_encoding *enc)
+ rb_encoding *enc, VALUE var)
{
const int escape = !(flags & FNM_NOESCAPE);
const char *p = str;
@@ -2050,55 +3202,56 @@ ruby_brace_expand(const char *str, int flags, ruby_glob_func *func, VALUE arg,
int nest = 0, status = 0;
while (*p) {
- if (*p == '{' && nest++ == 0) {
- lbrace = p;
- }
- if (*p == '}' && lbrace && --nest == 0) {
- rbrace = p;
- break;
- }
- if (*p == '\\' && escape) {
- if (!*++p) break;
- }
- Inc(p, pend, enc);
+ if (*p == '{' && nest++ == 0) {
+ lbrace = p;
+ }
+ if (*p == '}' && lbrace && --nest == 0) {
+ rbrace = p;
+ break;
+ }
+ if (*p == '\\' && escape) {
+ if (!*++p) break;
+ }
+ Inc(p, pend, enc);
}
if (lbrace && rbrace) {
- size_t len = strlen(s) + 1;
- char *buf = GLOB_ALLOC_N(char, len);
- long shift;
-
- if (!buf) return -1;
- memcpy(buf, s, lbrace-s);
- shift = (lbrace-s);
- p = lbrace;
- while (p < rbrace) {
- const char *t = ++p;
- nest = 0;
- while (p < rbrace && !(*p == ',' && nest == 0)) {
- if (*p == '{') nest++;
- if (*p == '}') nest--;
- if (*p == '\\' && escape) {
- if (++p == rbrace) break;
- }
- Inc(p, pend, enc);
- }
- memcpy(buf+shift, t, p-t);
- strlcpy(buf+shift+(p-t), rbrace+1, len-(shift+(p-t)));
- status = ruby_brace_expand(buf, flags, func, arg, enc);
- if (status) break;
- }
- GLOB_FREE(buf);
+ size_t len = strlen(s) + 1;
+ char *buf = GLOB_ALLOC_N(char, len);
+ long shift;
+
+ if (!buf) return -1;
+ memcpy(buf, s, lbrace-s);
+ shift = (lbrace-s);
+ p = lbrace;
+ while (p < rbrace) {
+ const char *t = ++p;
+ nest = 0;
+ while (p < rbrace && !(*p == ',' && nest == 0)) {
+ if (*p == '{') nest++;
+ if (*p == '}') nest--;
+ if (*p == '\\' && escape) {
+ if (++p == rbrace) break;
+ }
+ Inc(p, pend, enc);
+ }
+ memcpy(buf+shift, t, p-t);
+ strlcpy(buf+shift+(p-t), rbrace+1, len-(shift+(p-t)));
+ status = ruby_brace_expand(buf, flags, func, arg, enc, var);
+ if (status) break;
+ }
+ GLOB_FREE(buf);
}
else if (!lbrace && !rbrace) {
- status = glob_call_func(func, s, arg, enc);
+ status = glob_call_func(func, s, arg, enc);
}
+ RB_GC_GUARD(var);
return status;
}
struct brace_args {
- ruby_glob_func *func;
+ ruby_glob_funcs_t funcs;
VALUE value;
int flags;
};
@@ -2108,7 +3261,7 @@ glob_brace(const char *path, VALUE val, void *enc)
{
struct brace_args *arg = (struct brace_args *)val;
- return ruby_glob0(path, arg->flags, arg->func, arg->value, enc);
+ return ruby_glob0(path, AT_FDCWD, 0, arg->flags, &arg->funcs, arg->value, enc);
}
int
@@ -2117,10 +3270,11 @@ ruby_brace_glob_with_enc(const char *str, int flags, ruby_glob_func *func, VALUE
struct brace_args args;
flags &= ~GLOB_VERBOSE;
- args.func = func;
+ args.funcs.match = func;
+ args.funcs.error = 0;
args.value = arg;
args.flags = flags;
- return ruby_brace_expand(str, flags, glob_brace, (VALUE)&args, enc);
+ return ruby_brace_expand(str, flags, glob_brace, (VALUE)&args, enc, Qfalse);
}
int
@@ -2129,206 +3283,137 @@ ruby_brace_glob(const char *str, int flags, ruby_glob_func *func, VALUE arg)
return ruby_brace_glob_with_enc(str, flags, func, arg, rb_ascii8bit_encoding());
}
-struct push_glob_args {
- struct glob_args glob;
- int flags;
-};
-
-static int
-push_caller(const char *path, VALUE val, void *enc)
-{
- struct push_glob_args *arg = (struct push_glob_args *)val;
-
- return ruby_glob0(path, arg->flags, rb_glob_caller, (VALUE)&arg->glob, enc);
-}
-
static int
-push_glob(VALUE ary, VALUE str, int flags)
+push_glob(VALUE ary, VALUE str, VALUE base, int flags)
{
- struct push_glob_args args;
+ struct glob_args args;
+ int fd;
rb_encoding *enc = rb_enc_get(str);
-#ifdef __APPLE__
+#if defined _WIN32 || defined __APPLE__
str = rb_str_encode_ospath(str);
#endif
if (rb_enc_to_index(enc) == ENCINDEX_US_ASCII)
- enc = rb_filesystem_encoding();
+ enc = rb_filesystem_encoding();
if (rb_enc_to_index(enc) == ENCINDEX_US_ASCII)
- enc = rb_ascii8bit_encoding();
+ enc = rb_ascii8bit_encoding();
flags |= GLOB_VERBOSE;
- args.glob.func = push_pattern;
- args.glob.value = ary;
- args.glob.enc = enc;
- args.flags = flags;
-#ifdef __APPLE__
+ args.func = push_pattern;
+ args.value = ary;
+ args.enc = enc;
+ args.base = 0;
+ fd = AT_FDCWD;
+ if (!NIL_P(base)) {
+ if (!RB_TYPE_P(base, T_STRING) || !rb_enc_check(str, base)) {
+ struct dir_data *dirp = RTYPEDDATA_GET_DATA(base);
+ if (!dirp->dir) dir_closed();
+#ifdef HAVE_DIRFD
+ if ((fd = dirfd(dirp->dir)) == -1)
+ rb_sys_fail_path(dir_inspect(base));
+#endif
+ base = dirp->path;
+ }
+ args.base = RSTRING_PTR(base);
+ }
+#if defined _WIN32 || defined __APPLE__
enc = rb_utf8_encoding();
#endif
- RB_GC_GUARD(str);
- return ruby_brace_expand(RSTRING_PTR(str), flags,
- push_caller, (VALUE)&args, enc);
+ return ruby_glob0(RSTRING_PTR(str), fd, args.base, flags, &rb_glob_funcs,
+ (VALUE)&args, enc);
}
static VALUE
-rb_push_glob(VALUE str, int flags) /* '\0' is delimiter */
+rb_push_glob(VALUE str, VALUE base, int flags) /* '\0' is delimiter */
{
- long offset = 0;
VALUE ary;
+ int status;
- GlobPathValue(str, TRUE);
+ /* can contain null bytes as separators */
+ if (!RB_TYPE_P(str, T_STRING)) {
+ FilePathValue(str);
+ }
+ else if (!rb_str_to_cstr(str)) {
+ rb_raise(rb_eArgError, "nul-separated glob pattern is deprecated");
+ }
+ else {
+ rb_enc_check(str, rb_enc_from_encoding(rb_usascii_encoding()));
+ }
ary = rb_ary_new();
- while (offset < RSTRING_LEN(str)) {
- char *p, *pend;
- int status;
- p = RSTRING_PTR(str) + offset;
- status = push_glob(ary, rb_enc_str_new(p, strlen(p), rb_enc_get(str)),
- flags);
- if (status) GLOB_JUMP_TAG(status);
- if (offset >= RSTRING_LEN(str)) break;
- p += strlen(p) + 1;
- pend = RSTRING_PTR(str) + RSTRING_LEN(str);
- while (p < pend && !*p)
- p++;
- offset = p - RSTRING_PTR(str);
- }
+ status = push_glob(ary, str, base, flags);
+ if (status) GLOB_JUMP_TAG(status);
return ary;
}
static VALUE
-dir_globs(long argc, const VALUE *argv, int flags)
+dir_globs(VALUE args, VALUE base, int flags)
{
VALUE ary = rb_ary_new();
long i;
- for (i = 0; i < argc; ++i) {
- int status;
- VALUE str = argv[i];
- GlobPathValue(str, TRUE);
- status = push_glob(ary, str, flags);
- if (status) GLOB_JUMP_TAG(status);
+ for (i = 0; i < RARRAY_LEN(args); ++i) {
+ int status;
+ VALUE str = RARRAY_AREF(args, i);
+ FilePathValue(str);
+ status = push_glob(ary, str, base, flags);
+ if (status) GLOB_JUMP_TAG(status);
}
+ RB_GC_GUARD(args);
return ary;
}
-/*
- * call-seq:
- * Dir[ string [, string ...] ] -> array
- *
- * Equivalent to calling
- * <code>Dir.glob([</code><i>string,...</i><code>],0)</code>.
- *
- */
static VALUE
-dir_s_aref(int argc, VALUE *argv, VALUE obj)
+dir_glob_option_base(VALUE base)
{
- if (argc == 1) {
- return rb_push_glob(argv[0], 0);
+ if (NIL_OR_UNDEF_P(base)) {
+ return Qnil;
+ }
+#if USE_OPENDIR_AT
+ if (rb_typeddata_is_kind_of(base, &dir_data_type)) {
+ return base;
}
- return dir_globs(argc, argv, 0);
+#endif
+ FilePathValue(base);
+ if (!RSTRING_LEN(base)) return Qnil;
+ return base;
}
-/*
- * call-seq:
- * Dir.glob( pattern, [flags] ) -> matches
- * Dir.glob( pattern, [flags] ) { |filename| block } -> nil
- *
- * Expands +pattern+, which is an Array of patterns or a pattern String, and
- * returns the results as +matches+ or as arguments given to the block.
- *
- * Note that this pattern is not a regexp, it's closer to a shell glob. See
- * File::fnmatch for the meaning of the +flags+ parameter. Note that case
- * sensitivity depends on your system (so File::FNM_CASEFOLD is ignored), as
- * does the order in which the results are returned.
- *
- * <code>*</code>::
- * Matches any file. Can be restricted by other values in the glob.
- * Equivalent to <code>/ .* /x</code> in regexp.
- *
- * <code>*</code>:: Matches all files
- * <code>c*</code>:: Matches all files beginning with <code>c</code>
- * <code>*c</code>:: Matches all files ending with <code>c</code>
- * <code>\*c\*</code>:: Match all files that have <code>c</code> in them
- * (including at the beginning or end).
- *
- * Note, this will not match Unix-like hidden files (dotfiles). In order
- * to include those in the match results, you must use the
- * File::FNM_DOTMATCH flag or something like <code>"{*,.*}"</code>.
- *
- * <code>**</code>::
- * Matches directories recursively.
- *
- * <code>?</code>::
- * Matches any one character. Equivalent to <code>/.{1}/</code> in regexp.
- *
- * <code>[set]</code>::
- * Matches any one character in +set+. Behaves exactly like character sets
- * in Regexp, including set negation (<code>[^a-z]</code>).
- *
- * <code>{p,q}</code>::
- * Matches either literal <code>p</code> or literal <code>q</code>.
- * Equivalent to pattern alternation in regexp.
- *
- * Matching literals may be more than one character in length. More than
- * two literals may be specified.
- *
- * <code> \\ </code>::
- * Escapes the next metacharacter.
- *
- * Note that this means you cannot use backslash on windows as part of a
- * glob, i.e. <code>Dir["c:\\foo*"]</code> will not work, use
- * <code>Dir["c:/foo*"]</code> instead.
- *
- * Examples:
- *
- * Dir["config.?"] #=> ["config.h"]
- * Dir.glob("config.?") #=> ["config.h"]
- * Dir.glob("*.[a-z][a-z]") #=> ["main.rb"]
- * Dir.glob("*.[^r]*") #=> ["config.h"]
- * Dir.glob("*.{rb,h}") #=> ["main.rb", "config.h"]
- * Dir.glob("*") #=> ["config.h", "main.rb"]
- * Dir.glob("*", File::FNM_DOTMATCH) #=> [".", "..", "config.h", "main.rb"]
- *
- * rbfiles = File.join("**", "*.rb")
- * Dir.glob(rbfiles) #=> ["main.rb",
- * # "lib/song.rb",
- * # "lib/song/karaoke.rb"]
- * libdirs = File.join("**", "lib")
- * Dir.glob(libdirs) #=> ["lib"]
- *
- * librbfiles = File.join("**", "lib", "**", "*.rb")
- * Dir.glob(librbfiles) #=> ["lib/song.rb",
- * # "lib/song/karaoke.rb"]
- *
- * librbfiles = File.join("**", "lib", "*.rb")
- * Dir.glob(librbfiles) #=> ["lib/song.rb"]
- */
-static VALUE
-dir_s_glob(int argc, VALUE *argv, VALUE obj)
+static int
+dir_glob_option_sort(VALUE sort)
{
- VALUE str, rflags, ary;
- int flags;
+ return (rb_bool_expected(sort, "sort", TRUE) ? 0 : FNM_GLOB_NOSORT);
+}
- if (rb_scan_args(argc, argv, "11", &str, &rflags) == 2)
- flags = NUM2INT(rflags);
- else
- flags = 0;
+static VALUE
+dir_s_aref(rb_execution_context_t *ec, VALUE obj, VALUE args, VALUE base, VALUE sort)
+{
+ const int flags = dir_glob_option_sort(sort);
+ base = dir_glob_option_base(base);
+ if (RARRAY_LEN(args) == 1) {
+ return rb_push_glob(RARRAY_AREF(args, 0), base, flags);
+ }
+ return dir_globs(args, base, flags);
+}
- ary = rb_check_array_type(str);
+static VALUE
+dir_s_glob(rb_execution_context_t *ec, VALUE obj, VALUE str, VALUE rflags, VALUE base, VALUE sort)
+{
+ VALUE ary = rb_check_array_type(str);
+ const int flags = (NUM2INT(rflags) | dir_glob_option_sort(sort)) & ~FNM_CASEFOLD;
+ base = dir_glob_option_base(base);
if (NIL_P(ary)) {
- ary = rb_push_glob(str, flags);
+ ary = rb_push_glob(str, base, flags);
}
else {
- VALUE v = ary;
- ary = dir_globs(RARRAY_LEN(v), RARRAY_CONST_PTR(v), flags);
- RB_GC_GUARD(v);
+ ary = dir_globs(ary, base, flags);
}
if (rb_block_given_p()) {
- rb_ary_each(ary);
- return Qnil;
+ rb_ary_each(ary);
+ return Qnil;
}
return ary;
}
@@ -2336,7 +3421,7 @@ dir_s_glob(int argc, VALUE *argv, VALUE obj)
static VALUE
dir_open_dir(int argc, VALUE *argv)
{
- VALUE dir = rb_funcall2(rb_cDir, rb_intern("open"), argc, argv);
+ VALUE dir = rb_funcallv_kw(rb_cDir, rb_intern("open"), argc, argv, RB_PASS_CALLED_KEYWORDS);
rb_check_typeddata(dir, &dir_data_type);
return dir;
@@ -2344,26 +3429,35 @@ dir_open_dir(int argc, VALUE *argv)
/*
- * call-seq:
- * Dir.foreach( dirname ) {| filename | block } -> nil
- * Dir.foreach( dirname, encoding: enc ) {| filename | block } -> nil
- * Dir.foreach( dirname ) -> an_enumerator
- * Dir.foreach( dirname, encoding: enc ) -> an_enumerator
+ * call-seq:
+ * Dir.foreach(dirpath, encoding: 'UTF-8') {|entry_name| ... } -> nil
*
- * Calls the block once for each entry in the named directory, passing
- * the filename of each entry as a parameter to the block.
+ * Calls the block with each entry name in the directory at +dirpath+;
+ * sets the given encoding onto each passed +entry_name+:
*
- * If no block is given, an enumerator is returned instead.
+ * Dir.foreach('/example') {|entry_name| p entry_name }
*
- * Dir.foreach("testdir") {|x| puts "Got #{x}" }
+ * Output:
*
- * <em>produces:</em>
+ * "config.h"
+ * "lib"
+ * "main.rb"
+ * ".."
+ * "."
*
- * Got .
- * Got ..
- * Got config.h
- * Got main.rb
+ * Encoding:
*
+ * Dir.foreach('/example') {|entry_name| p entry_name.encoding; break }
+ * Dir.foreach('/example', encoding: 'US-ASCII') {|entry_name| p entry_name.encoding; break }
+ *
+ * Output:
+ *
+ * #<Encoding:UTF-8>
+ * #<Encoding:US-ASCII>
+ *
+ * See {String Encoding}[rdoc-ref:encodings.rdoc@String+Encoding].
+ *
+ * Returns an enumerator if no block is given.
*/
static VALUE
dir_foreach(int argc, VALUE *argv, VALUE io)
@@ -2376,20 +3470,30 @@ dir_foreach(int argc, VALUE *argv, VALUE io)
return Qnil;
}
+static VALUE
+dir_collect(VALUE dir)
+{
+ VALUE ary = rb_ary_new();
+ dir_each_entry(dir, rb_ary_push, ary, FALSE);
+ return ary;
+}
+
/*
- * call-seq:
- * Dir.entries( dirname ) -> array
- * Dir.entries( dirname, encoding: enc ) -> array
+ * call-seq:
+ * Dir.entries(dirname, encoding: 'UTF-8') -> array
*
- * Returns an array containing all of the filenames in the given
- * directory. Will raise a <code>SystemCallError</code> if the named
- * directory doesn't exist.
+ * Returns an array of the entry names in the directory at +dirpath+;
+ * sets the given encoding onto each returned entry name:
*
- * The optional <i>enc</i> argument specifies the encoding of the directory.
- * If not specified, the filesystem encoding is used.
+ * Dir.entries('/example') # => ["config.h", "lib", "main.rb", "..", "."]
+ * Dir.entries('/example').first.encoding
+ * # => #<Encoding:UTF-8>
+ * Dir.entries('/example', encoding: 'US-ASCII').first.encoding
+ * # => #<Encoding:US-ASCII>
*
- * Dir.entries("testdir") #=> [".", "..", "config.h", "main.rb"]
+ * See {String Encoding}[rdoc-ref:encodings.rdoc@String+Encoding].
*
+ * Raises an exception if the directory does not exist.
*/
static VALUE
dir_entries(int argc, VALUE *argv, VALUE io)
@@ -2397,7 +3501,104 @@ dir_entries(int argc, VALUE *argv, VALUE io)
VALUE dir;
dir = dir_open_dir(argc, argv);
- return rb_ensure(rb_Array, dir, dir_close, dir);
+ return rb_ensure(dir_collect, dir, dir_close, dir);
+}
+
+static VALUE
+dir_each_child(VALUE dir)
+{
+ return dir_each_entry(dir, dir_yield, Qnil, TRUE);
+}
+
+/*
+ * call-seq:
+ * Dir.each_child(dirpath) {|entry_name| ... } -> nil
+ * Dir.each_child(dirpath, encoding: 'UTF-8') {|entry_name| ... } -> nil
+ *
+ * Like Dir.foreach, except that entries <tt>'.'</tt> and <tt>'..'</tt>
+ * are not included.
+ */
+static VALUE
+dir_s_each_child(int argc, VALUE *argv, VALUE io)
+{
+ VALUE dir;
+
+ RETURN_ENUMERATOR(io, argc, argv);
+ dir = dir_open_dir(argc, argv);
+ rb_ensure(dir_each_child, dir, dir_close, dir);
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * each_child {|entry_name| ... } -> self
+ *
+ * Calls the block with each entry name in +self+
+ * except <tt>'.'</tt> and <tt>'..'</tt>:
+ *
+ * dir = Dir.new('/example')
+ * dir.each_child {|entry_name| p entry_name }
+ *
+ * Output:
+ *
+ * "config.h"
+ * "lib"
+ * "main.rb"
+ *
+ * If no block is given, returns an enumerator.
+ */
+static VALUE
+dir_each_child_m(VALUE dir)
+{
+ RETURN_ENUMERATOR(dir, 0, 0);
+ return dir_each_entry(dir, dir_yield, Qnil, TRUE);
+}
+
+/*
+ * call-seq:
+ * children -> array
+ *
+ * Returns an array of the entry names in +self+
+ * except for <tt>'.'</tt> and <tt>'..'</tt>:
+ *
+ * dir = Dir.new('/example')
+ * dir.children # => ["config.h", "lib", "main.rb"]
+ *
+ */
+static VALUE
+dir_collect_children(VALUE dir)
+{
+ VALUE ary = rb_ary_new();
+ dir_each_entry(dir, rb_ary_push, ary, TRUE);
+ return ary;
+}
+
+/*
+ * call-seq:
+ * Dir.children(dirpath) -> array
+ * Dir.children(dirpath, encoding: 'UTF-8') -> array
+ *
+ * Returns an array of the entry names in the directory at +dirpath+
+ * except for <tt>'.'</tt> and <tt>'..'</tt>;
+ * sets the given encoding onto each returned entry name:
+ *
+ * Dir.children('/example') # => ["config.h", "lib", "main.rb"]
+ * Dir.children('/example').first.encoding
+ * # => #<Encoding:UTF-8>
+ * Dir.children('/example', encoding: 'US-ASCII').first.encoding
+ * # => #<Encoding:US-ASCII>
+ *
+ * See {String Encoding}[rdoc-ref:encodings.rdoc@String+Encoding].
+ *
+ * Raises an exception if the directory does not exist.
+ */
+static VALUE
+dir_s_children(int argc, VALUE *argv, VALUE io)
+{
+ VALUE dir;
+
+ dir = dir_open_dir(argc, argv);
+ return rb_ensure(dir_collect_children, dir, dir_close, dir);
}
static int
@@ -2409,116 +3610,24 @@ fnmatch_brace(const char *pattern, VALUE val, void *enc)
rb_encoding *enc_path = rb_enc_get(path);
if (enc_pattern != enc_path) {
- if (!rb_enc_asciicompat(enc_pattern))
- return FNM_NOMATCH;
- if (!rb_enc_asciicompat(enc_path))
- return FNM_NOMATCH;
- if (!rb_enc_str_asciionly_p(path)) {
- int cr = ENC_CODERANGE_7BIT;
- long len = strlen(pattern);
- if (rb_str_coderange_scan_restartable(pattern, pattern + len,
- enc_pattern, &cr) != len)
- return FNM_NOMATCH;
- if (cr != ENC_CODERANGE_7BIT)
- return FNM_NOMATCH;
- }
+ if (!rb_enc_asciicompat(enc_pattern))
+ return FNM_NOMATCH;
+ if (!rb_enc_asciicompat(enc_path))
+ return FNM_NOMATCH;
+ if (!rb_enc_str_asciionly_p(path)) {
+ int cr = ENC_CODERANGE_7BIT;
+ long len = strlen(pattern);
+ if (rb_str_coderange_scan_restartable(pattern, pattern + len,
+ enc_pattern, &cr) != len)
+ return FNM_NOMATCH;
+ if (cr != ENC_CODERANGE_7BIT)
+ return FNM_NOMATCH;
+ }
}
return (fnmatch(pattern, enc, RSTRING_PTR(path), arg->flags) == 0);
}
-/*
- * call-seq:
- * File.fnmatch( pattern, path, [flags] ) -> (true or false)
- * File.fnmatch?( pattern, path, [flags] ) -> (true or false)
- *
- * Returns true if +path+ matches against +pattern+. The pattern is not a
- * regular expression; instead it follows rules similar to shell filename
- * globbing. It may contain the following metacharacters:
- *
- * <code>*</code>::
- * Matches any file. Can be restricted by other values in the glob.
- * Equivalent to <code>/ .* /x</code> in regexp.
- *
- * <code>*</code>:: Matches all files regular files
- * <code>c*</code>:: Matches all files beginning with <code>c</code>
- * <code>*c</code>:: Matches all files ending with <code>c</code>
- * <code>\*c*</code>:: Matches all files that have <code>c</code> in them
- * (including at the beginning or end).
- *
- * To match hidden files (that start with a <code>.</code> set the
- * File::FNM_DOTMATCH flag.
- *
- * <code>**</code>::
- * Matches directories recursively or files expansively.
- *
- * <code>?</code>::
- * Matches any one character. Equivalent to <code>/.{1}/</code> in regexp.
- *
- * <code>[set]</code>::
- * Matches any one character in +set+. Behaves exactly like character sets
- * in Regexp, including set negation (<code>[^a-z]</code>).
- *
- * <code> \ </code>::
- * Escapes the next metacharacter.
- *
- * <code>{a,b}</code>::
- * Matches pattern a and pattern b if File::FNM_EXTGLOB flag is enabled.
- * Behaves like a Regexp union (<code>(?:a|b)</code>).
- *
- * +flags+ is a bitwise OR of the <code>FNM_XXX</code> constants. The same
- * glob pattern and flags are used by Dir::glob.
- *
- * Examples:
- *
- * File.fnmatch('cat', 'cat') #=> true # match entire string
- * File.fnmatch('cat', 'category') #=> false # only match partial string
- *
- * File.fnmatch('c{at,ub}s', 'cats') #=> false # { } isn't supported by default
- * File.fnmatch('c{at,ub}s', 'cats', File::FNM_EXTGLOB) #=> true # { } is supported on FNM_EXTGLOB
- *
- * File.fnmatch('c?t', 'cat') #=> true # '?' match only 1 character
- * File.fnmatch('c??t', 'cat') #=> false # ditto
- * File.fnmatch('c*', 'cats') #=> true # '*' match 0 or more characters
- * File.fnmatch('c*t', 'c/a/b/t') #=> true # ditto
- * File.fnmatch('ca[a-z]', 'cat') #=> true # inclusive bracket expression
- * File.fnmatch('ca[^t]', 'cat') #=> false # exclusive bracket expression ('^' or '!')
- *
- * File.fnmatch('cat', 'CAT') #=> false # case sensitive
- * File.fnmatch('cat', 'CAT', File::FNM_CASEFOLD) #=> true # case insensitive
- *
- * File.fnmatch('?', '/', File::FNM_PATHNAME) #=> false # wildcard doesn't match '/' on FNM_PATHNAME
- * File.fnmatch('*', '/', File::FNM_PATHNAME) #=> false # ditto
- * File.fnmatch('[/]', '/', File::FNM_PATHNAME) #=> false # ditto
- *
- * File.fnmatch('\?', '?') #=> true # escaped wildcard becomes ordinary
- * File.fnmatch('\a', 'a') #=> true # escaped ordinary remains ordinary
- * File.fnmatch('\a', '\a', File::FNM_NOESCAPE) #=> true # FNM_NOESCAPE makes '\' ordinary
- * File.fnmatch('[\?]', '?') #=> true # can escape inside bracket expression
- *
- * File.fnmatch('*', '.profile') #=> false # wildcard doesn't match leading
- * File.fnmatch('*', '.profile', File::FNM_DOTMATCH) #=> true # period by default.
- * File.fnmatch('.*', '.profile') #=> true
- *
- * rbfiles = '**' '/' '*.rb' # you don't have to do like this. just write in single string.
- * File.fnmatch(rbfiles, 'main.rb') #=> false
- * File.fnmatch(rbfiles, './main.rb') #=> false
- * File.fnmatch(rbfiles, 'lib/song.rb') #=> true
- * File.fnmatch('**.rb', 'main.rb') #=> true
- * File.fnmatch('**.rb', './main.rb') #=> false
- * File.fnmatch('**.rb', 'lib/song.rb') #=> true
- * File.fnmatch('*', 'dave/.profile') #=> true
- *
- * pattern = '*' '/' '*'
- * File.fnmatch(pattern, 'dave/.profile', File::FNM_PATHNAME) #=> false
- * File.fnmatch(pattern, 'dave/.profile', File::FNM_PATHNAME | File::FNM_DOTMATCH) #=> true
- *
- * pattern = '**' '/' 'foo'
- * File.fnmatch(pattern, 'a/b/c/foo', File::FNM_PATHNAME) #=> true
- * File.fnmatch(pattern, '/a/b/c/foo', File::FNM_PATHNAME) #=> true
- * File.fnmatch(pattern, 'c:/a/b/c/foo', File::FNM_PATHNAME) #=> true
- * File.fnmatch(pattern, 'a/.b/c/foo', File::FNM_PATHNAME) #=> false
- * File.fnmatch(pattern, 'a/.b/c/foo', File::FNM_PATHNAME | File::FNM_DOTMATCH) #=> true
- */
+/* :nodoc: */
static VALUE
file_s_fnmatch(int argc, VALUE *argv, VALUE obj)
{
@@ -2527,27 +3636,27 @@ file_s_fnmatch(int argc, VALUE *argv, VALUE obj)
int flags;
if (rb_scan_args(argc, argv, "21", &pattern, &path, &rflags) == 3)
- flags = NUM2INT(rflags);
+ flags = NUM2INT(rflags);
else
- flags = 0;
+ flags = 0;
- StringValue(pattern);
+ StringValueCStr(pattern);
FilePathStringValue(path);
if (flags & FNM_EXTGLOB) {
- struct brace_args args;
+ struct brace_args args;
- args.value = path;
- args.flags = flags;
- if (ruby_brace_expand(RSTRING_PTR(pattern), flags, fnmatch_brace,
- (VALUE)&args, rb_enc_get(pattern)) > 0)
- return Qtrue;
+ args.value = path;
+ args.flags = flags;
+ if (ruby_brace_expand(RSTRING_PTR(pattern), flags, fnmatch_brace,
+ (VALUE)&args, rb_enc_get(pattern), pattern) > 0)
+ return Qtrue;
}
else {
- rb_encoding *enc = rb_enc_compatible(pattern, path);
- if (!enc) return Qfalse;
- if (fnmatch(RSTRING_PTR(pattern), enc, RSTRING_PTR(path), flags) == 0)
- return Qtrue;
+ rb_encoding *enc = rb_enc_compatible(pattern, path);
+ if (!enc) return Qfalse;
+ if (fnmatch(RSTRING_PTR(pattern), enc, RSTRING_PTR(path), flags) == 0)
+ return Qtrue;
}
RB_GC_GUARD(pattern);
@@ -2555,12 +3664,16 @@ file_s_fnmatch(int argc, VALUE *argv, VALUE obj)
}
/*
- * call-seq:
- * Dir.home() -> "/home/me"
- * Dir.home("root") -> "/root"
+ * call-seq:
+ * Dir.home(user_name = nil) -> dirpath
+ *
+ * Returns the home directory path of the user specified with +user_name+
+ * if it is not +nil+, or the current login user:
*
- * Returns the home directory of the current user or the named user
- * if given.
+ * Dir.home # => "/home/me"
+ * Dir.home('root') # => "/root"
+ *
+ * Raises ArgumentError if +user_name+ is not a user name.
*/
static VALUE
dir_s_home(int argc, VALUE *argv, VALUE obj)
@@ -2571,12 +3684,12 @@ dir_s_home(int argc, VALUE *argv, VALUE obj)
rb_check_arity(argc, 0, 1);
user = (argc > 0) ? argv[0] : Qnil;
if (!NIL_P(user)) {
- SafeStringValue(user);
- rb_must_asciicompat(user);
- u = StringValueCStr(user);
- if (*u) {
- return rb_home_dir_of(user, rb_str_new(0, 0));
- }
+ StringValue(user);
+ rb_must_asciicompat(user);
+ u = StringValueCStr(user);
+ if (*u) {
+ return rb_home_dir_of(user, rb_str_new(0, 0));
+ }
}
return rb_default_home_dir(rb_str_new(0, 0));
@@ -2585,10 +3698,15 @@ dir_s_home(int argc, VALUE *argv, VALUE obj)
#if 0
/*
* call-seq:
- * Dir.exist?(file_name) -> true or false
+ * Dir.exist?(dirpath) -> true or false
+ *
+ * Returns whether +dirpath+ is a directory in the underlying file system:
+ *
+ * Dir.exist?('/example') # => true
+ * Dir.exist?('/nosuch') # => false
+ * Dir.exist?('/example/main.rb') # => false
*
- * Returns <code>true</code> if the named file is a directory,
- * <code>false</code> otherwise.
+ * Same as File.directory?.
*
*/
VALUE
@@ -2597,56 +3715,126 @@ rb_file_directory_p(void)
}
#endif
+static void *
+nogvl_dir_empty_p(void *ptr)
+{
+ const char *path = ptr;
+ DIR *dir = opendir(path);
+ struct dirent *dp;
+ VALUE result = Qtrue;
+
+ if (!dir) {
+ int e = errno;
+ switch (gc_for_fd_with_gvl(e)) {
+ default:
+ dir = opendir(path);
+ if (dir) break;
+ e = errno;
+ /* fall through */
+ case 0:
+ if (e == ENOTDIR) return (void *)Qfalse;
+ return (void *)INT2FIX(e);
+ }
+ }
+ while ((dp = READDIR_NOGVL(dir, NULL)) != NULL) {
+ if (!to_be_skipped(dp)) {
+ result = Qfalse;
+ break;
+ }
+ }
+ check_closedir(dir);
+ return (void *)result;
+}
+
/*
* call-seq:
- * Dir.exists?(file_name) -> true or false
+ * Dir.empty?(dirpath) -> true or false
+ *
+ * Returns whether +dirpath+ specifies an empty directory:
+ *
+ * dirpath = '/tmp/foo'
+ * Dir.mkdir(dirpath)
+ * Dir.empty?(dirpath) # => true
+ * Dir.empty?('/example') # => false
+ * Dir.empty?('/example/main.rb') # => false
*
- * Deprecated method. Don't use.
+ * Raises an exception if +dirpath+ does not specify a directory or file
+ * in the underlying file system.
*/
static VALUE
-rb_dir_exists_p(VALUE obj, VALUE fname)
+rb_dir_s_empty_p(VALUE obj, VALUE dirname)
{
- rb_warning("Dir.exists? is a deprecated name, use Dir.exist? instead");
- return rb_file_directory_p(obj, fname);
+ VALUE result, orig;
+ const char *path;
+ enum {false_on_notdir = 1};
+
+ FilePathValue(dirname);
+ orig = rb_str_dup_frozen(dirname);
+ dirname = rb_str_encode_ospath(dirname);
+ dirname = rb_str_dup_frozen(dirname);
+ path = RSTRING_PTR(dirname);
+
+#if defined HAVE_GETATTRLIST && defined ATTR_DIR_ENTRYCOUNT
+ {
+ u_int32_t attrbuf[SIZEUP32(fsobj_tag_t)];
+ struct attrlist al = {ATTR_BIT_MAP_COUNT, 0, ATTR_CMN_OBJTAG,};
+ struct getattrlist_args args = GETATTRLIST_ARGS(&al, attrbuf, 0);
+ if (gvl_getattrlist(&args, path) != 0)
+ rb_sys_fail_path(orig);
+ if (*(const fsobj_tag_t *)(attrbuf+1) == VT_HFS) {
+ al.commonattr = 0;
+ al.dirattr = ATTR_DIR_ENTRYCOUNT;
+ if (gvl_getattrlist(&args, path) == 0) {
+ if (attrbuf[0] >= 2 * sizeof(u_int32_t))
+ return RBOOL(attrbuf[1] == 0);
+ if (false_on_notdir) return Qfalse;
+ }
+ rb_sys_fail_path(orig);
+ }
+ }
+#endif
+
+ result = (VALUE)IO_WITHOUT_GVL(nogvl_dir_empty_p, (void *)path);
+ if (FIXNUM_P(result)) {
+ rb_syserr_fail_path((int)FIX2LONG(result), orig);
+ }
+ return result;
}
-/*
- * Objects of class <code>Dir</code> are directory streams representing
- * directories in the underlying file system. They provide a variety of
- * ways to list directories and their contents. See also
- * <code>File</code>.
- *
- * The directory used in these examples contains the two regular files
- * (<code>config.h</code> and <code>main.rb</code>), the parent
- * directory (<code>..</code>), and the directory itself
- * (<code>.</code>).
- */
void
Init_Dir(void)
{
+ rb_gc_register_address(&chdir_lock.path);
+ rb_gc_register_address(&chdir_lock.thread);
+
rb_cDir = rb_define_class("Dir", rb_cObject);
rb_include_module(rb_cDir, rb_mEnumerable);
rb_define_alloc_func(rb_cDir, dir_s_alloc);
- rb_define_singleton_method(rb_cDir, "open", dir_s_open, -1);
+ rb_define_singleton_method(rb_cDir,"for_fd", dir_s_for_fd, 1);
rb_define_singleton_method(rb_cDir, "foreach", dir_foreach, -1);
rb_define_singleton_method(rb_cDir, "entries", dir_entries, -1);
+ rb_define_singleton_method(rb_cDir, "each_child", dir_s_each_child, -1);
+ rb_define_singleton_method(rb_cDir, "children", dir_s_children, -1);
- rb_define_method(rb_cDir,"initialize", dir_initialize, -1);
rb_define_method(rb_cDir,"fileno", dir_fileno, 0);
rb_define_method(rb_cDir,"path", dir_path, 0);
rb_define_method(rb_cDir,"to_path", dir_path, 0);
rb_define_method(rb_cDir,"inspect", dir_inspect, 0);
rb_define_method(rb_cDir,"read", dir_read, 0);
rb_define_method(rb_cDir,"each", dir_each, 0);
+ rb_define_method(rb_cDir,"each_child", dir_each_child_m, 0);
+ rb_define_method(rb_cDir,"children", dir_collect_children, 0);
rb_define_method(rb_cDir,"rewind", dir_rewind, 0);
rb_define_method(rb_cDir,"tell", dir_tell, 0);
rb_define_method(rb_cDir,"seek", dir_seek, 1);
rb_define_method(rb_cDir,"pos", dir_tell, 0);
rb_define_method(rb_cDir,"pos=", dir_set_pos, 1);
rb_define_method(rb_cDir,"close", dir_close, 0);
+ rb_define_method(rb_cDir,"chdir", dir_chdir, 0);
+ rb_define_singleton_method(rb_cDir,"fchdir", dir_s_fchdir, 1);
rb_define_singleton_method(rb_cDir,"chdir", dir_s_chdir, -1);
rb_define_singleton_method(rb_cDir,"getwd", dir_s_getwd, 0);
rb_define_singleton_method(rb_cDir,"pwd", dir_s_getwd, 0);
@@ -2657,58 +3845,26 @@ Init_Dir(void)
rb_define_singleton_method(rb_cDir,"unlink", dir_s_rmdir, 1);
rb_define_singleton_method(rb_cDir,"home", dir_s_home, -1);
- rb_define_singleton_method(rb_cDir,"glob", dir_s_glob, -1);
- rb_define_singleton_method(rb_cDir,"[]", dir_s_aref, -1);
rb_define_singleton_method(rb_cDir,"exist?", rb_file_directory_p, 1);
- rb_define_singleton_method(rb_cDir,"exists?", rb_dir_exists_p, 1);
+ rb_define_singleton_method(rb_cDir,"empty?", rb_dir_s_empty_p, 1);
rb_define_singleton_method(rb_cFile,"fnmatch", file_s_fnmatch, -1);
rb_define_singleton_method(rb_cFile,"fnmatch?", file_s_fnmatch, -1);
- /* Document-const: File::Constants::FNM_NOESCAPE
- *
- * Disables escapes in File.fnmatch and Dir.glob patterns
- */
+ /* {File::FNM_NOESCAPE}[rdoc-ref:File::Constants@File-3A-3AFNM_NOESCAPE] */
rb_file_const("FNM_NOESCAPE", INT2FIX(FNM_NOESCAPE));
-
- /* Document-const: File::Constants::FNM_PATHNAME
- *
- * Wildcards in File.fnmatch and Dir.glob patterns do not match directory
- * separators
- */
+ /* {File::FNM_PATHNAME}[rdoc-ref:File::Constants@File-3A-3AFNM_PATHNAME] */
rb_file_const("FNM_PATHNAME", INT2FIX(FNM_PATHNAME));
-
- /* Document-const: File::Constants::FNM_DOTMATCH
- *
- * The '*' wildcard matches filenames starting with "." in File.fnmatch
- * and Dir.glob patterns
- */
+ /* {File::FNM_DOTMATCH}[rdoc-ref:File::Constants@File-3A-3AFNM_DOTMATCH] */
rb_file_const("FNM_DOTMATCH", INT2FIX(FNM_DOTMATCH));
-
- /* Document-const: File::Constants::FNM_CASEFOLD
- *
- * Makes File.fnmatch patterns case insensitive (but not Dir.glob
- * patterns).
- */
+ /* {File::FNM_CASEFOLD}[rdoc-ref:File::Constants@File-3A-3AFNM_CASEFOLD] */
rb_file_const("FNM_CASEFOLD", INT2FIX(FNM_CASEFOLD));
-
- /* Document-const: File::Constants::FNM_EXTGLOB
- *
- * Allows file globbing through "{a,b}" in File.fnmatch patterns.
- */
+ /* {File::FNM_EXTGLOB}[rdoc-ref:File::Constants@File-3A-3AFNM_EXTGLOB] */
rb_file_const("FNM_EXTGLOB", INT2FIX(FNM_EXTGLOB));
-
- /* Document-const: File::Constants::FNM_SYSCASE
- *
- * System default case insensitiveness, equals to FNM_CASEFOLD or
- * 0.
- */
+ /* {File::FNM_SYSCASE}[rdoc-ref:File::Constants@File-3A-3AFNM_SYSCASE] */
rb_file_const("FNM_SYSCASE", INT2FIX(FNM_SYSCASE));
-
- /* Document-const: File::Constants::FNM_SHORTNAME
- *
- * Makes patterns to match short names if existing. Valid only
- * on Microsoft Windows.
- */
+ /* {File::FNM_SHORTNAME}[rdoc-ref:File::Constants@File-3A-3AFNM_SHORTNAME] */
rb_file_const("FNM_SHORTNAME", INT2FIX(FNM_SHORTNAME));
}
+
+#include "dir.rbinc"
diff --git a/dir.rb b/dir.rb
new file mode 100644
index 0000000000..eb1a408ee3
--- /dev/null
+++ b/dir.rb
@@ -0,0 +1,506 @@
+# An object of class \Dir represents a directory in the underlying file system.
+#
+# It consists mainly of:
+#
+# - A string _path_, given when the object is created,
+# that specifies a directory in the underlying file system;
+# method #path returns the path.
+# - A collection of string <i>entry names</i>,
+# each of which is the name of a directory or file in the underlying file system;
+# the entry names may be retrieved
+# in an {array-like fashion}[rdoc-ref:Dir@Dir+As+Array-Like]
+# or in a {stream-like fashion}[rdoc-ref:Dir@Dir+As+Stream-Like].
+#
+# == About the Examples
+#
+# Some examples on this page use this simple file tree:
+#
+# example/
+# ├── config.h
+# ├── lib/
+# │ ├── song/
+# │ │ └── karaoke.rb
+# │ └── song.rb
+# └── main.rb
+#
+# Others use the file tree for the
+# {Ruby project itself}[https://github.com/ruby/ruby].
+#
+# == \Dir As \Array-Like
+#
+# A \Dir object is in some ways array-like:
+#
+# - It has instance methods #children, #each, and #each_child.
+# - It includes {module Enumerable}[rdoc-ref:Enumerable@What-27s+Here].
+#
+# == \Dir As Stream-Like
+#
+# A \Dir object is in some ways stream-like.
+#
+# The stream is initially open for reading,
+# but may be closed manually (using method #close),
+# and will be closed on block exit if created by Dir.open called with a block.
+# The closed stream may not be further manipulated,
+# and may not be reopened.
+#
+# The stream has a _position_, which is the index of an entry in the directory:
+#
+# - The initial position is zero (before the first entry).
+# - Method #tell (aliased as #pos) returns the position.
+# - Method #pos= sets the position (but ignores a value outside the stream),
+# and returns the position.
+# - Method #seek is like #pos=, but returns +self+ (convenient for chaining).
+# - Method #read, if not at end-of-stream, reads the next entry and increments
+# the position;
+# if at end-of-stream, does not increment the position.
+# - Method #rewind sets the position to zero.
+#
+# Examples (using the {simple file tree}[rdoc-ref:Dir@About+the+Examples]):
+#
+# dir = Dir.new('example') # => #<Dir:example>
+# dir.pos # => 0
+#
+# dir.read # => "."
+# dir.read # => ".."
+# dir.read # => "config.h"
+# dir.read # => "lib"
+# dir.read # => "main.rb"
+# dir.pos # => 5
+# dir.read # => nil
+# dir.pos # => 5
+#
+# dir.rewind # => #<Dir:example>
+# dir.pos # => 0
+#
+# dir.pos = 3 # => 3
+# dir.pos # => 3
+#
+# dir.seek(4) # => #<Dir:example>
+# dir.pos # => 4
+#
+# dir.close # => nil
+# dir.read # Raises IOError.
+#
+# == What's Here
+#
+# First, what's elsewhere. Class \Dir:
+#
+# - Inherits from {class Object}[rdoc-ref:Object@What-27s+Here].
+# - Includes {module Enumerable}[rdoc-ref:Enumerable@What-27s+Here],
+# which provides dozens of additional methods.
+#
+# Here, class \Dir provides methods that are useful for:
+#
+# - {Reading}[rdoc-ref:Dir@Reading]
+# - {Setting}[rdoc-ref:Dir@Setting]
+# - {Querying}[rdoc-ref:Dir@Querying]
+# - {Iterating}[rdoc-ref:Dir@Iterating]
+# - {Other}[rdoc-ref:Dir@Other]
+#
+# === Reading
+#
+# - #close: Closes the directory stream for +self+.
+# - #pos=: Sets the position in the directory stream for +self+.
+# - #read: Reads and returns the next entry in the directory stream for +self+.
+# - #rewind: Sets the position in the directory stream for +self+ to the first entry.
+# - #seek: Sets the position in the directory stream for +self+
+# the entry at the given offset.
+#
+# === Setting
+#
+# - ::chdir: Changes the working directory of the current process
+# to the given directory.
+# - ::chroot: Changes the file-system root for the current process
+# to the given directory.
+#
+# === Querying
+#
+# - ::[]: Same as ::glob without the ability to pass flags.
+# - ::children: Returns an array of names of the children
+# (both files and directories) of the given directory,
+# but not including <tt>.</tt> or <tt>..</tt>.
+# - ::empty?: Returns whether the given path is an empty directory.
+# - ::entries: Returns an array of names of the children
+# (both files and directories) of the given directory,
+# including <tt>.</tt> and <tt>..</tt>.
+# - ::exist?: Returns whether the given path is a directory.
+# - ::getwd (aliased as #pwd): Returns the path to the current working directory.
+# - ::glob: Returns an array of file paths matching the given pattern and flags.
+# - ::home: Returns the home directory path for a given user or the current user.
+# - #children: Returns an array of names of the children
+# (both files and directories) of +self+,
+# but not including <tt>.</tt> or <tt>..</tt>.
+# - #fileno: Returns the integer file descriptor for +self+.
+# - #path (aliased as #to_path): Returns the path used to create +self+.
+# - #tell (aliased as #pos): Returns the integer position
+# in the directory stream for +self+.
+#
+# === Iterating
+#
+# - ::each_child: Calls the given block with each entry in the given directory,
+# but not including <tt>.</tt> or <tt>..</tt>.
+# - ::foreach: Calls the given block with each entry in the given directory,
+# including <tt>.</tt> and <tt>..</tt>.
+# - #each: Calls the given block with each entry in +self+,
+# including <tt>.</tt> and <tt>..</tt>.
+# - #each_child: Calls the given block with each entry in +self+,
+# but not including <tt>.</tt> or <tt>..</tt>.
+#
+# === Other
+#
+# - ::mkdir: Creates a directory at the given path, with optional permissions.
+# - ::new: Returns a new \Dir for the given path, with optional encoding.
+# - ::open: Same as ::new, but if a block is given, yields the \Dir to the block,
+# closing it upon block exit.
+# - ::unlink (aliased as ::delete and ::rmdir): Removes the given directory.
+# - #inspect: Returns a string description of +self+.
+#
+class Dir
+ # call-seq:
+ # Dir.open(dirpath) -> dir
+ # Dir.open(dirpath, encoding: nil) -> dir
+ # Dir.open(dirpath) {|dir| ... } -> object
+ # Dir.open(dirpath, encoding: nil) {|dir| ... } -> object
+ #
+ # Creates a new \Dir object _dir_ for the directory at +dirpath+.
+ #
+ # With no block, the method equivalent to Dir.new(dirpath, encoding):
+ #
+ # Dir.open('.') # => #<Dir:.>
+ #
+ # With a block given, the block is called with the created _dir_;
+ # on block exit _dir_ is closed and the block's value is returned:
+ #
+ # Dir.open('.') {|dir| dir.inspect } # => "#<Dir:.>"
+ #
+ # The value given with optional keyword argument +encoding+
+ # specifies the encoding for the directory entry names;
+ # if +nil+ (the default), the file system's encoding is used:
+ #
+ # Dir.open('.').read.encoding # => #<Encoding:UTF-8>
+ # Dir.open('.', encoding: Encoding::US_ASCII).read.encoding # => #<Encoding:US-ASCII>
+ #
+ def self.open(name, encoding: nil, &block)
+ dir = Primitive.dir_s_open(name, encoding)
+ if block
+ begin
+ yield dir
+ ensure
+ Primitive.dir_s_close(dir)
+ end
+ else
+ dir
+ end
+ end
+
+ # call-seq:
+ # Dir.new(dirpath) -> dir
+ # Dir.new(dirpath, encoding: nil) -> dir
+ #
+ # Returns a new \Dir object for the directory at +dirpath+:
+ #
+ # Dir.new('.') # => #<Dir:.>
+ #
+ # The value given with optional keyword argument +encoding+
+ # specifies the encoding for the directory entry names;
+ # if +nil+ (the default), the file system's encoding is used:
+ #
+ # Dir.new('.').read.encoding # => #<Encoding:UTF-8>
+ # Dir.new('.', encoding: Encoding::US_ASCI).read.encoding # => #<Encoding:US-ASCII>
+ #
+ def initialize(name, encoding: nil)
+ Primitive.dir_initialize(name, encoding)
+ end
+
+ # call-seq:
+ # Dir[*patterns, base: nil, sort: true] -> array
+ #
+ # Calls Dir.glob with argument +patterns+
+ # and the values of keyword arguments +base+ and +sort+;
+ # returns the array of selected entry names.
+ #
+ def self.[](*args, base: nil, sort: true)
+ Primitive.dir_s_aref(args, base, sort)
+ end
+
+ # call-seq:
+ # Dir.glob(patterns, flags: 0, base: nil, sort: true) -> array
+ # Dir.glob(patterns, flags: 0, base: nil, sort: true) {|entry_name| ... } -> nil
+ #
+ # Forms an array _entry_names_ of the entry names selected by the arguments.
+ #
+ # Argument +patterns+ is a string pattern or an array of string patterns;
+ # note that these are not regexps; see below.
+ #
+ # Notes for the following examples:
+ #
+ # - <tt>'*'</tt> is the pattern that matches any entry name
+ # except those that begin with <tt>'.'</tt>.
+ # - We use method Array#take to shorten returned arrays
+ # that otherwise would be very large.
+ #
+ # With no block, returns array _entry_names_;
+ # example (using the {simple file tree}[rdoc-ref:Dir@About+the+Examples]):
+ #
+ # Dir.glob('*') # => ["config.h", "lib", "main.rb"]
+ #
+ # With a block, calls the block with each of the _entry_names_
+ # and returns +nil+:
+ #
+ # Dir.glob('*') {|entry_name| puts entry_name } # => nil
+ #
+ # Output:
+ #
+ # config.h
+ # lib
+ # main.rb
+ #
+ # If optional keyword argument +flags+ is given,
+ # the value modifies the matching; see below.
+ #
+ # If optional keyword argument +base+ is given,
+ # its value specifies the base directory.
+ # Each pattern string specifies entries relative to the base directory;
+ # the default is <tt>'.'</tt>.
+ # The base directory is not prepended to the entry names in the result:
+ #
+ # Dir.glob(pattern, base: 'lib').take(5)
+ # # => ["abbrev.gemspec", "abbrev.rb", "base64.gemspec", "base64.rb", "benchmark.gemspec"]
+ # Dir.glob(pattern, base: 'lib/irb').take(5)
+ # # => ["cmd", "color.rb", "color_printer.rb", "completion.rb", "context.rb"]
+ #
+ # If optional keyword +sort+ is given, its value specifies whether
+ # the array is to be sorted; the default is +true+.
+ # Passing value +false+ with that keyword disables sorting
+ # (though the underlying file system may already have sorted the array).
+ #
+ # <b>Patterns</b>
+ #
+ # Each pattern string is expanded
+ # according to certain metacharacters;
+ # examples below use the {Ruby file tree}[rdoc-ref:Dir@About+the+Examples]:
+ #
+ # - <tt>'*'</tt>: Matches any substring in an entry name,
+ # similar in meaning to regexp <tt>/.*/mx</tt>;
+ # may be restricted by other values in the pattern strings:
+ #
+ # - <tt>'*'</tt> matches all entry names:
+ #
+ # Dir.glob('*').take(3) # => ["BSDL", "CONTRIBUTING.md", "COPYING"]
+ #
+ # - <tt>'c*'</tt> matches entry names beginning with <tt>'c'</tt>:
+ #
+ # Dir.glob('c*').take(3) # => ["CONTRIBUTING.md", "COPYING", "COPYING.ja"]
+ #
+ # - <tt>'*c'</tt> matches entry names ending with <tt>'c'</tt>:
+ #
+ # Dir.glob('*c').take(3) # => ["addr2line.c", "array.c", "ast.c"]
+ #
+ # - <tt>'\*c\*'</tt> matches entry names that contain <tt>'c'</tt>,
+ # even at the beginning or end:
+ #
+ # Dir.glob('*c*').take(3) # => ["CONTRIBUTING.md", "COPYING", "COPYING.ja"]
+ #
+ # Does not match Unix-like hidden entry names ("dot files").
+ # To include those in the matched entry names,
+ # use flag IO::FNM_DOTMATCH or something like <tt>'{*,.*}'</tt>.
+ #
+ # - <tt>'**'</tt>: Matches entry names recursively
+ # if followed by the slash character <tt>'/'</tt>:
+ #
+ # Dir.glob('**/').take(3) # => ["basictest/", "benchmark/", "benchmark/gc/"]
+ #
+ # If the string pattern contains other characters
+ # or is not followed by a slash character,
+ # it is equivalent to <tt>'*'</tt>.
+ #
+ # - <tt>'?'</tt> Matches any single character;
+ # similar in meaning to regexp <tt>/./</tt>:
+ #
+ # Dir.glob('io.?') # => ["io.c"]
+ #
+ # - <tt>'[set]'</tt>: Matches any one character in the string _set_;
+ # behaves like a {Regexp character class}[rdoc-ref:Regexp@Character+Classes],
+ # including set negation (<tt>'[^a-z]'</tt>):
+ #
+ # Dir.glob('*.[a-z][a-z]').take(3)
+ # # => ["CONTRIBUTING.md", "COPYING.ja", "KNOWNBUGS.rb"]
+ #
+ # - <tt>'{abc,xyz}'</tt>:
+ # Matches either string _abc_ or string _xyz_;
+ # behaves like {Regexp alternation}[rdoc-ref:Regexp@Alternation]:
+ #
+ # Dir.glob('{LEGAL,BSDL}') # => ["LEGAL", "BSDL"]
+ #
+ # More than two alternatives may be given.
+ #
+ # - <tt>\\</tt>: Escapes the following metacharacter.
+ #
+ # Note that on Windows, the backslash character may not be used
+ # in a string pattern:
+ # <tt>Dir['c:\\foo*']</tt> will not work, use <tt>Dir['c:/foo*']</tt> instead.
+ #
+ # More examples (using the {simple file tree}[rdoc-ref:Dir@About+the+Examples]):
+ #
+ # # We're in the example directory.
+ # File.basename(Dir.pwd) # => "example"
+ # Dir.glob('config.?') # => ["config.h"]
+ # Dir.glob('*.[a-z][a-z]') # => ["main.rb"]
+ # Dir.glob('*.[^r]*') # => ["config.h"]
+ # Dir.glob('*.{rb,h}') # => ["main.rb", "config.h"]
+ # Dir.glob('*') # => ["config.h", "lib", "main.rb"]
+ # Dir.glob('*', File::FNM_DOTMATCH) # => [".", "config.h", "lib", "main.rb"]
+ # Dir.glob(["*.rb", "*.h"]) # => ["main.rb", "config.h"]
+ #
+ # Dir.glob('**/*.rb')
+ # => ["lib/song/karaoke.rb", "lib/song.rb", "main.rb"]
+ #
+ # Dir.glob('**/*.rb', base: 'lib') # => ["song/karaoke.rb", "song.rb"]
+ #
+ # Dir.glob('**/lib') # => ["lib"]
+ #
+ # Dir.glob('**/lib/**/*.rb') # => ["lib/song/karaoke.rb", "lib/song.rb"]
+ #
+ # Dir.glob('**/lib/*.rb') # => ["lib/song.rb"]
+ #
+ # <b>Flags</b>
+ #
+ # If optional keyword argument +flags+ is given (the default is zero -- no flags),
+ # its value should be the bitwise OR of one or more of the constants
+ # defined in module File::Constants.
+ #
+ # Example:
+ #
+ # flags = File::FNM_EXTGLOB | File::FNM_DOTMATCH
+ #
+ # Specifying flags can extend, restrict, or otherwise modify the matching.
+ #
+ # The flags for this method (other constants in File::Constants do not apply):
+ #
+ # - File::FNM_DOTMATCH:
+ # specifies that entry names beginning with <tt>'.'</tt>
+ # should be considered for matching:
+ #
+ # Dir.glob('*').take(5)
+ # # => ["BSDL", "CONTRIBUTING.md", "COPYING", "COPYING.ja", "GPL"]
+ # Dir.glob('*', flags: File::FNM_DOTMATCH).take(5)
+ # # => [".", ".appveyor.yml", ".cirrus.yml", ".dir-locals.el", ".document"]
+ #
+ # - File::FNM_EXTGLOB:
+ # enables the pattern extension
+ # <tt>'{a,b}'</tt>, which matches pattern _a_ and pattern _b_;
+ # behaves like a
+ # {regexp union}[rdoc-ref:Regexp.union]
+ # (e.g., <tt>'(?:a|b)'</tt>):
+ #
+ # pattern = '{LEGAL,BSDL}'
+ # Dir.glob(pattern) # => ["LEGAL", "BSDL"]
+ #
+ # - File::FNM_NOESCAPE:
+ # specifies that escaping with the backslash character <tt>'\'</tt>
+ # is disabled; the character is not an escape character.
+ #
+ # - File::FNM_PATHNAME:
+ # specifies that metacharacters <tt>'*'</tt> and <tt>'?'</tt>
+ # do not match directory separators.
+ #
+ # - File::FNM_SHORTNAME:
+ # specifies that patterns may match short names if they exist; Windows only.
+ #
+ def self.glob(pattern, _flags = 0, flags: _flags, base: nil, sort: true)
+ Primitive.attr! :use_block
+ Primitive.dir_s_glob(pattern, flags, base, sort)
+ end
+end
+
+class << File
+ # call-seq:
+ # File.fnmatch( pattern, path, [flags] ) -> (true or false)
+ # File.fnmatch?( pattern, path, [flags] ) -> (true or false)
+ #
+ # Returns true if +path+ matches against +pattern+. The pattern is not a
+ # regular expression; instead it follows rules similar to shell filename
+ # globbing. It may contain the following metacharacters:
+ #
+ # <code>*</code>::
+ # Matches any file. Can be restricted by other values in the glob.
+ # Equivalent to <code>/.*/x</code> in regexp.
+ #
+ # <code>*</code>:: Matches all regular files
+ # <code>c*</code>:: Matches all files beginning with <code>c</code>
+ # <code>*c</code>:: Matches all files ending with <code>c</code>
+ # <code>\*c*</code>:: Matches all files that have <code>c</code> in them
+ # (including at the beginning or end).
+ #
+ # To match hidden files (that start with a <code>.</code>) set the
+ # File::FNM_DOTMATCH flag.
+ #
+ # <code>**</code>::
+ # Matches directories recursively or files expansively.
+ #
+ # <code>?</code>::
+ # Matches any one character. Equivalent to <code>/.{1}/</code> in regexp.
+ #
+ # <code>[set]</code>::
+ # Matches any one character in +set+. Behaves exactly like character sets
+ # in Regexp, including set negation (<code>[^a-z]</code>).
+ #
+ # <code>\\</code>::
+ # Escapes the next metacharacter.
+ #
+ # <code>{a,b}</code>::
+ # Matches pattern a and pattern b if File::FNM_EXTGLOB flag is enabled.
+ # Behaves like a Regexp union (<code>(?:a|b)</code>).
+ #
+ # +flags+ is a bitwise OR of the <code>FNM_XXX</code> constants. The same
+ # glob pattern and flags are used by Dir::glob.
+ #
+ # Examples:
+ #
+ # File.fnmatch('cat', 'cat') #=> true # match entire string
+ # File.fnmatch('cat', 'category') #=> false # only match partial string
+ #
+ # File.fnmatch('c{at,ub}s', 'cats') #=> false # { } isn't supported by default
+ # File.fnmatch('c{at,ub}s', 'cats', File::FNM_EXTGLOB) #=> true # { } is supported on FNM_EXTGLOB
+ #
+ # File.fnmatch('c?t', 'cat') #=> true # '?' match only 1 character
+ # File.fnmatch('c??t', 'cat') #=> false # ditto
+ # File.fnmatch('c*', 'cats') #=> true # '*' match 0 or more characters
+ # File.fnmatch('c*t', 'c/a/b/t') #=> true # ditto
+ # File.fnmatch('ca[a-z]', 'cat') #=> true # inclusive bracket expression
+ # File.fnmatch('ca[^t]', 'cat') #=> false # exclusive bracket expression ('^' or '!')
+ #
+ # File.fnmatch('cat', 'CAT') #=> false # case sensitive
+ # File.fnmatch('cat', 'CAT', File::FNM_CASEFOLD) #=> true # case insensitive
+ # File.fnmatch('cat', 'CAT', File::FNM_SYSCASE) #=> true or false # depends on the system default
+ #
+ # File.fnmatch('?', '/', File::FNM_PATHNAME) #=> false # wildcard doesn't match '/' on FNM_PATHNAME
+ # File.fnmatch('*', '/', File::FNM_PATHNAME) #=> false # ditto
+ # File.fnmatch('[/]', '/', File::FNM_PATHNAME) #=> false # ditto
+ #
+ # File.fnmatch('\?', '?') #=> true # escaped wildcard becomes ordinary
+ # File.fnmatch('\a', 'a') #=> true # escaped ordinary remains ordinary
+ # File.fnmatch('\a', '\a', File::FNM_NOESCAPE) #=> true # FNM_NOESCAPE makes '\' ordinary
+ # File.fnmatch('[\?]', '?') #=> true # can escape inside bracket expression
+ #
+ # File.fnmatch('*', '.profile') #=> false # wildcard doesn't match leading
+ # File.fnmatch('*', '.profile', File::FNM_DOTMATCH) #=> true # period by default.
+ # File.fnmatch('.*', '.profile') #=> true
+ #
+ # File.fnmatch('**/*.rb', 'main.rb') #=> false
+ # File.fnmatch('**/*.rb', './main.rb') #=> false
+ # File.fnmatch('**/*.rb', 'lib/song.rb') #=> true
+ # File.fnmatch('**.rb', 'main.rb') #=> true
+ # File.fnmatch('**.rb', './main.rb') #=> false
+ # File.fnmatch('**.rb', 'lib/song.rb') #=> true
+ # File.fnmatch('*', 'dave/.profile') #=> true
+ #
+ # File.fnmatch('**/foo', 'a/b/c/foo', File::FNM_PATHNAME) #=> true
+ # File.fnmatch('**/foo', '/a/b/c/foo', File::FNM_PATHNAME) #=> true
+ # File.fnmatch('**/foo', 'c:/a/b/c/foo', File::FNM_PATHNAME) #=> true
+ # File.fnmatch('**/foo', 'a/.b/c/foo', File::FNM_PATHNAME) #=> false
+ # File.fnmatch('**/foo', 'a/.b/c/foo', File::FNM_PATHNAME | File::FNM_DOTMATCH) #=> true
+ def fnmatch(pattern, path, flags = 0)
+ end
+ alias fnmatch? fnmatch
+end if false
diff --git a/dln.c b/dln.c
index 51545fbbb2..2549f03183 100644
--- a/dln.c
+++ b/dln.c
@@ -15,22 +15,23 @@
#define dln_memerror rb_memerror
#define dln_exit rb_exit
#define dln_loaderror rb_loaderror
+#define dln_fatalerror rb_fatal
#else
#define dln_notimplement --->>> dln not implemented <<<---
#define dln_memerror abort
#define dln_exit exit
static void dln_loaderror(const char *format, ...);
+#define dln_fatalerror dln_loaderror
#endif
#include "dln.h"
+#include "internal.h"
+#include "internal/box.h"
+#include "internal/compilers.h"
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif
-#ifdef USE_DLN_A_OUT
-char *dln_argv0;
-#endif
-
#if defined(HAVE_ALLOCA_H)
#include <alloca.h>
#endif
@@ -41,6 +42,10 @@ char *dln_argv0;
# include <strings.h>
#endif
+#if defined __APPLE__
+# include <AvailabilityMacros.h>
+#endif
+
#ifndef xmalloc
void *xmalloc();
void *xcalloc();
@@ -58,7 +63,7 @@ void *xrealloc();
#include <sys/stat.h>
#ifndef S_ISDIR
-# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#endif
#ifdef HAVE_SYS_PARAM_H
@@ -72,19 +77,6 @@ void *xrealloc();
# include <unistd.h>
#endif
-#ifndef _WIN32
-char *getenv();
-#endif
-
-#ifdef __APPLE__
-# if defined(HAVE_DLOPEN)
- /* Mac OS X with dlopen (10.3 or later) */
-# define MACOSX_DLOPEN
-# else
-# define MACOSX_DYLD
-# endif
-#endif
-
#ifndef dln_loaderror
static void
dln_loaderror(const char *format, ...)
@@ -97,12 +89,12 @@ dln_loaderror(const char *format, ...)
}
#endif
-#if defined(HAVE_DLOPEN) && !defined(USE_DLN_A_OUT) && !defined(_AIX) && !defined(MACOSX_DYLD) && !defined(_UNICOSMP)
+#if defined(HAVE_DLOPEN) && !defined(_AIX) && !defined(_UNICOSMP)
/* dynamic load with dlopen() */
# define USE_DLN_DLOPEN
#endif
-#if defined(__hp9000s300) || ((defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)) && !defined(__ELF__)) || defined(NeXT) || defined(MACOSX_DYLD)
+#if defined(__hp9000s300) || ((defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)) && !defined(__ELF__)) || defined(NeXT)
# define EXTERNAL_PREFIX "_"
#else
# define EXTERNAL_PREFIX ""
@@ -115,983 +107,52 @@ dln_loaderror(const char *format, ...)
#define isdirsep(x) ((x) == '/')
#endif
-static size_t
-init_funcname_len(const char **file)
+#if defined(_WIN32) || defined(USE_DLN_DLOPEN)
+struct string_part {
+ const char *ptr;
+ size_t len;
+};
+
+static struct string_part
+init_funcname_len(const char *file)
{
- const char *p = *file, *base, *dot = NULL;
+ const char *p = file, *base, *dot = NULL;
/* Load the file as an object one */
for (base = p; *p; p++) { /* Find position of last '/' */
- if (*p == '.' && !dot) dot = p;
- if (isdirsep(*p)) base = p+1, dot = NULL;
+ if (*p == '.' && !dot) dot = p;
+ if (isdirsep(*p)) base = p+1, dot = NULL;
}
- *file = base;
/* Delete suffix if it exists */
- return (dot ? dot : p) - base;
-}
-
-static const char funcname_prefix[sizeof(FUNCNAME_PREFIX) - 1] = FUNCNAME_PREFIX;
-
-#define init_funcname(buf, file) do {\
- const char *base = (file);\
- const size_t flen = init_funcname_len(&base);\
- const size_t plen = sizeof(funcname_prefix);\
- char *const tmp = ALLOCA_N(char, plen+flen+1);\
- if (!tmp) {\
- dln_memerror();\
- }\
- memcpy(tmp, funcname_prefix, plen);\
- memcpy(tmp+plen, base, flen);\
- tmp[plen+flen] = '\0';\
- *(buf) = tmp;\
-} while (0)
-
-#ifdef USE_DLN_A_OUT
-
-#ifndef LIBC_NAME
-# define LIBC_NAME "libc.a"
-#endif
-
-#ifndef DLN_DEFAULT_LIB_PATH
-# define DLN_DEFAULT_LIB_PATH "/lib:/usr/lib:/usr/local/lib:."
-#endif
-
-#include <errno.h>
-
-static int dln_errno;
-
-#define DLN_ENOEXEC ENOEXEC /* Exec format error */
-#define DLN_ECONFL 1201 /* Symbol name conflict */
-#define DLN_ENOINIT 1202 /* No initializer given */
-#define DLN_EUNDEF 1203 /* Undefine symbol remains */
-#define DLN_ENOTLIB 1204 /* Not a library file */
-#define DLN_EBADLIB 1205 /* Malformed library file */
-#define DLN_EINIT 1206 /* Not initialized */
-
-static int dln_init_p = 0;
-
-#include <ar.h>
-#include <a.out.h>
-#ifndef N_COMM
-# define N_COMM 0x12
-#endif
-#ifndef N_MAGIC
-# define N_MAGIC(x) (x).a_magic
-#endif
-
-#define INVALID_OBJECT(h) (N_MAGIC(h) != OMAGIC)
-
-#include "ruby/util.h"
-#include "ruby/st.h"
-
-static st_table *sym_tbl;
-static st_table *undef_tbl;
-
-static int load_lib();
-
-static int
-load_header(int fd, struct exec *hdrp, long disp)
-{
- int size;
-
- lseek(fd, disp, 0);
- size = read(fd, hdrp, sizeof(struct exec));
- if (size == -1) {
- dln_errno = errno;
- return -1;
- }
- if (size != sizeof(struct exec) || N_BADMAG(*hdrp)) {
- dln_errno = DLN_ENOEXEC;
- return -1;
- }
- return 0;
-}
-
-#if defined(sequent)
-#define RELOC_SYMBOL(r) ((r)->r_symbolnum)
-#define RELOC_MEMORY_SUB_P(r) ((r)->r_bsr)
-#define RELOC_PCREL_P(r) ((r)->r_pcrel || (r)->r_bsr)
-#define RELOC_TARGET_SIZE(r) ((r)->r_length)
-#endif
-
-/* Default macros */
-#ifndef RELOC_ADDRESS
-#define RELOC_ADDRESS(r) ((r)->r_address)
-#define RELOC_EXTERN_P(r) ((r)->r_extern)
-#define RELOC_SYMBOL(r) ((r)->r_symbolnum)
-#define RELOC_MEMORY_SUB_P(r) 0
-#define RELOC_PCREL_P(r) ((r)->r_pcrel)
-#define RELOC_TARGET_SIZE(r) ((r)->r_length)
-#endif
-
-#if defined(__sun) && defined(__sparc)
-/* Sparc (Sun 4) macros */
-# undef relocation_info
-# define relocation_info reloc_info_sparc
-# define R_RIGHTSHIFT(r) (reloc_r_rightshift[(r)->r_type])
-# define R_BITSIZE(r) (reloc_r_bitsize[(r)->r_type])
-# define R_LENGTH(r) (reloc_r_length[(r)->r_type])
-static int reloc_r_rightshift[] = {
- 0, 0, 0, 0, 0, 0, 2, 2, 10, 0, 0, 0, 0, 0, 0,
-};
-static int reloc_r_bitsize[] = {
- 8, 16, 32, 8, 16, 32, 30, 22, 22, 22, 13, 10, 32, 32, 16,
-};
-static int reloc_r_length[] = {
- 0, 1, 2, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-};
-# define R_PCREL(r) \
- ((r)->r_type >= RELOC_DISP8 && (r)->r_type <= RELOC_WDISP22)
-# define R_SYMBOL(r) ((r)->r_index)
-#endif
-
-#if defined(sequent)
-#define R_SYMBOL(r) ((r)->r_symbolnum)
-#define R_MEMORY_SUB(r) ((r)->r_bsr)
-#define R_PCREL(r) ((r)->r_pcrel || (r)->r_bsr)
-#define R_LENGTH(r) ((r)->r_length)
-#endif
-
-#ifndef R_SYMBOL
-# define R_SYMBOL(r) ((r)->r_symbolnum)
-# define R_MEMORY_SUB(r) 0
-# define R_PCREL(r) ((r)->r_pcrel)
-# define R_LENGTH(r) ((r)->r_length)
-#endif
-
-static struct relocation_info *
-load_reloc(int fd, struct exec *hdrp, long disp)
-{
- struct relocation_info *reloc;
- int size;
-
- lseek(fd, disp + N_TXTOFF(*hdrp) + hdrp->a_text + hdrp->a_data, 0);
- size = hdrp->a_trsize + hdrp->a_drsize;
- reloc = (struct relocation_info*)xmalloc(size);
- if (reloc == NULL) {
- dln_errno = errno;
- return NULL;
- }
-
- if (read(fd, reloc, size) != size) {
- dln_errno = errno;
- free(reloc);
- return NULL;
- }
-
- return reloc;
-}
-
-static struct nlist *
-load_sym(int fd, struct exec *hdrp, long disp)
-{
- struct nlist * buffer;
- struct nlist * sym;
- struct nlist * end;
- long displ;
- int size;
-
- lseek(fd, N_SYMOFF(*hdrp) + hdrp->a_syms + disp, 0);
- if (read(fd, &size, sizeof(int)) != sizeof(int)) {
- goto err_noexec;
- }
-
- buffer = (struct nlist*)xmalloc(hdrp->a_syms + size);
- if (buffer == NULL) {
- dln_errno = errno;
- return NULL;
- }
-
- lseek(fd, disp + N_SYMOFF(*hdrp), 0);
- if (read(fd, buffer, hdrp->a_syms + size) != hdrp->a_syms + size) {
- free(buffer);
- goto err_noexec;
- }
-
- sym = buffer;
- end = sym + hdrp->a_syms / sizeof(struct nlist);
- displ = (long)buffer + (long)(hdrp->a_syms);
-
- while (sym < end) {
- sym->n_un.n_name = (char*)sym->n_un.n_strx + displ;
- sym++;
- }
- return buffer;
-
- err_noexec:
- dln_errno = DLN_ENOEXEC;
- return NULL;
-}
-
-static st_table *
-sym_hash(struct exec *hdrp, struct nlist *syms)
-{
- st_table *tbl;
- struct nlist *sym = syms;
- struct nlist *end = syms + (hdrp->a_syms / sizeof(struct nlist));
-
- tbl = st_init_strtable();
- if (tbl == NULL) {
- dln_errno = errno;
- return NULL;
- }
-
- while (sym < end) {
- st_insert(tbl, sym->n_un.n_name, sym);
- sym++;
- }
- return tbl;
-}
-
-static int
-dln_init(const char *prog)
-{
- char *file, fbuf[MAXPATHLEN];
- int fd;
- struct exec hdr;
- struct nlist *syms;
-
- if (dln_init_p == 1) return 0;
-
- file = dln_find_exe_r(prog, NULL, fbuf, sizeof(fbuf));
- if (file == NULL || (fd = open(file, O_RDONLY)) < 0) {
- dln_errno = errno;
- return -1;
- }
-
- if (load_header(fd, &hdr, 0) == -1) return -1;
- syms = load_sym(fd, &hdr, 0);
- if (syms == NULL) {
- close(fd);
- return -1;
- }
- sym_tbl = sym_hash(&hdr, syms);
- if (sym_tbl == NULL) { /* file may be start with #! */
- char c = '\0';
- char buf[MAXPATHLEN];
- char *p;
-
- free(syms);
- lseek(fd, 0L, 0);
- if (read(fd, &c, 1) == -1) {
- dln_errno = errno;
- return -1;
- }
- if (c != '#') goto err_noexec;
- if (read(fd, &c, 1) == -1) {
- dln_errno = errno;
- return -1;
- }
- if (c != '!') goto err_noexec;
-
- p = buf;
- /* skip forwarding spaces */
- while (read(fd, &c, 1) == 1) {
- if (c == '\n') goto err_noexec;
- if (c != '\t' && c != ' ') {
- *p++ = c;
- break;
- }
- }
- /* read in command name */
- while (read(fd, p, 1) == 1) {
- if (*p == '\n' || *p == '\t' || *p == ' ') break;
- p++;
- if (p-buf >= MAXPATHLEN) {
- dln_errno = ENAMETOOLONG;
- return -1;
- }
- }
- *p = '\0';
-
- return dln_init(buf);
- }
- dln_init_p = 1;
- undef_tbl = st_init_strtable();
- close(fd);
- return 0;
-
- err_noexec:
- close(fd);
- dln_errno = DLN_ENOEXEC;
- return -1;
-}
-
-static long
-load_text_data(int fd, struct exec *hdrp, int bss, long disp)
-{
- int size;
- unsigned char* addr;
-
- lseek(fd, disp + N_TXTOFF(*hdrp), 0);
- size = hdrp->a_text + hdrp->a_data;
-
- if (bss == -1) size += hdrp->a_bss;
- else if (bss > 1) size += bss;
-
- addr = (unsigned char*)xmalloc(size);
- if (addr == NULL) {
- dln_errno = errno;
- return 0;
- }
-
- if (read(fd, addr, size) != size) {
- dln_errno = errno;
- free(addr);
- return 0;
- }
-
- if (bss == -1) {
- memset(addr + hdrp->a_text + hdrp->a_data, 0, hdrp->a_bss);
- }
- else if (bss > 0) {
- memset(addr + hdrp->a_text + hdrp->a_data, 0, bss);
- }
-
- return (long)addr;
-}
-
-static int
-undef_print(char *key, char *value)
-{
- fprintf(stderr, " %s\n", key);
- return ST_CONTINUE;
-}
-
-static void
-dln_print_undef(void)
-{
- fprintf(stderr, " Undefined symbols:\n");
- st_foreach(undef_tbl, undef_print, NULL);
-}
-
-static void
-dln_undefined(void)
-{
- if (undef_tbl->num_entries > 0) {
- fprintf(stderr, "dln: Calling undefined function\n");
- dln_print_undef();
- dln_exit(1);
- }
+ const size_t len = (dot ? dot : p) - base;
+ return (struct string_part){base, len};
}
-struct undef {
- char *name;
- struct relocation_info reloc;
- long base;
- char *addr;
- union {
- char c;
- short s;
- long l;
- } u;
-};
-
-static st_table *reloc_tbl = NULL;
-static void
-link_undef(const char *name, long base, struct relocation_info *reloc)
+static inline char *
+concat_funcname(char *buf, const char *prefix, size_t plen, const struct string_part base)
{
- static int u_no = 0;
- struct undef *obj;
- char *addr = (char*)(reloc->r_address + base);
-
- obj = (struct undef*)xmalloc(sizeof(struct undef));
- obj->name = strdup(name);
- obj->reloc = *reloc;
- obj->base = base;
- switch (R_LENGTH(reloc)) {
- case 0: /* byte */
- obj->u.c = *addr;
- break;
- case 1: /* word */
- obj->u.s = *(short*)addr;
- break;
- case 2: /* long */
- obj->u.l = *(long*)addr;
- break;
- }
- if (reloc_tbl == NULL) {
- reloc_tbl = st_init_numtable();
+ if (!buf) {
+ dln_memerror();
}
- st_insert(reloc_tbl, u_no++, obj);
+ memcpy(buf, prefix, plen);
+ memcpy(buf + plen, base.ptr, base.len);
+ buf[plen + base.len] = '\0';
+ return buf;
}
-struct reloc_arg {
- const char *name;
- long value;
-};
-
-static int
-reloc_undef(int no, struct undef *undef, struct reloc_arg *arg)
-{
- int datum;
- char *address;
-#if defined(__sun) && defined(__sparc)
- unsigned int mask = 0;
-#endif
-
- if (strcmp(arg->name, undef->name) != 0) return ST_CONTINUE;
- address = (char*)(undef->base + undef->reloc.r_address);
- datum = arg->value;
-
- if (R_PCREL(&(undef->reloc))) datum -= undef->base;
-#if defined(__sun) && defined(__sparc)
- datum += undef->reloc.r_addend;
- datum >>= R_RIGHTSHIFT(&(undef->reloc));
- mask = (1 << R_BITSIZE(&(undef->reloc))) - 1;
- mask |= mask -1;
- datum &= mask;
- switch (R_LENGTH(&(undef->reloc))) {
- case 0:
- *address = undef->u.c;
- *address &= ~mask;
- *address |= datum;
- break;
- case 1:
- *(short *)address = undef->u.s;
- *(short *)address &= ~mask;
- *(short *)address |= datum;
- break;
- case 2:
- *(long *)address = undef->u.l;
- *(long *)address &= ~mask;
- *(long *)address |= datum;
- break;
- }
-#else
- switch (R_LENGTH(&(undef->reloc))) {
- case 0: /* byte */
- if (R_MEMORY_SUB(&(undef->reloc)))
- *address = datum - *address;
- else *address = undef->u.c + datum;
- break;
- case 1: /* word */
- if (R_MEMORY_SUB(&(undef->reloc)))
- *(short*)address = datum - *(short*)address;
- else *(short*)address = undef->u.s + datum;
- break;
- case 2: /* long */
- if (R_MEMORY_SUB(&(undef->reloc)))
- *(long*)address = datum - *(long*)address;
- else *(long*)address = undef->u.l + datum;
- break;
- }
-#endif
- free(undef->name);
- free(undef);
- return ST_DELETE;
-}
-
-static void
-unlink_undef(const char *name, long value)
-{
- struct reloc_arg arg;
-
- arg.name = name;
- arg.value = value;
- st_foreach(reloc_tbl, reloc_undef, &arg);
-}
-
-#ifdef N_INDR
-struct indr_data {
- char *name0, *name1;
-};
-
-static int
-reloc_repl(int no, struct undef *undef, struct indr_data *data)
-{
- if (strcmp(data->name0, undef->name) == 0) {
- free(undef->name);
- undef->name = strdup(data->name1);
- }
- return ST_CONTINUE;
-}
-#endif
-
-static int
-load_1(int fd, long disp, const char *need_init)
-{
- static const char *libc = LIBC_NAME;
- struct exec hdr;
- struct relocation_info *reloc = NULL;
- long block = 0;
- long new_common = 0; /* Length of new common */
- struct nlist *syms = NULL;
- struct nlist *sym;
- struct nlist *end;
- int init_p = 0;
-
- if (load_header(fd, &hdr, disp) == -1) return -1;
- if (INVALID_OBJECT(hdr)) {
- dln_errno = DLN_ENOEXEC;
- return -1;
- }
- reloc = load_reloc(fd, &hdr, disp);
- if (reloc == NULL) return -1;
-
- syms = load_sym(fd, &hdr, disp);
- if (syms == NULL) {
- free(reloc);
- return -1;
- }
-
- sym = syms;
- end = syms + (hdr.a_syms / sizeof(struct nlist));
- while (sym < end) {
- struct nlist *old_sym;
- int value = sym->n_value;
-
-#ifdef N_INDR
- if (sym->n_type == (N_INDR | N_EXT)) {
- char *key = sym->n_un.n_name;
-
- if (st_lookup(sym_tbl, sym[1].n_un.n_name, &old_sym)) {
- if (st_delete(undef_tbl, (st_data_t*)&key, NULL)) {
- unlink_undef(key, old_sym->n_value);
- free(key);
- }
- }
- else {
- struct indr_data data;
-
- data.name0 = sym->n_un.n_name;
- data.name1 = sym[1].n_un.n_name;
- st_foreach(reloc_tbl, reloc_repl, &data);
-
- st_insert(undef_tbl, strdup(sym[1].n_un.n_name), NULL);
- if (st_delete(undef_tbl, (st_data_t*)&key, NULL)) {
- free(key);
- }
- }
- sym += 2;
- continue;
- }
-#endif
- if (sym->n_type == (N_UNDF | N_EXT)) {
- if (st_lookup(sym_tbl, sym->n_un.n_name, &old_sym) == 0) {
- old_sym = NULL;
- }
-
- if (value) {
- if (old_sym) {
- sym->n_type = N_EXT | N_COMM;
- sym->n_value = old_sym->n_value;
- }
- else {
- int rnd =
- value >= sizeof(double) ? sizeof(double) - 1
- : value >= sizeof(long) ? sizeof(long) - 1
- : sizeof(short) - 1;
-
- sym->n_type = N_COMM;
- new_common += rnd;
- new_common &= ~(long)rnd;
- sym->n_value = new_common;
- new_common += value;
- }
- }
- else {
- if (old_sym) {
- sym->n_type = N_EXT | N_COMM;
- sym->n_value = old_sym->n_value;
- }
- else {
- sym->n_value = (long)dln_undefined;
- st_insert(undef_tbl, strdup(sym->n_un.n_name), NULL);
- }
- }
- }
- sym++;
- }
-
- block = load_text_data(fd, &hdr, hdr.a_bss + new_common, disp);
- if (block == 0) goto err_exit;
-
- sym = syms;
- while (sym < end) {
- struct nlist *new_sym;
- char *key;
-
- switch (sym->n_type) {
- case N_COMM:
- sym->n_value += hdr.a_text + hdr.a_data;
- case N_TEXT|N_EXT:
- case N_DATA|N_EXT:
-
- sym->n_value += block;
-
- if (st_lookup(sym_tbl, sym->n_un.n_name, &new_sym) != 0
- && new_sym->n_value != (long)dln_undefined) {
- dln_errno = DLN_ECONFL;
- goto err_exit;
- }
-
- key = sym->n_un.n_name;
- if (st_delete(undef_tbl, (st_data_t*)&key, NULL) != 0) {
- unlink_undef(key, sym->n_value);
- free(key);
- }
-
- new_sym = (struct nlist*)xmalloc(sizeof(struct nlist));
- *new_sym = *sym;
- new_sym->n_un.n_name = strdup(sym->n_un.n_name);
- st_insert(sym_tbl, new_sym->n_un.n_name, new_sym);
- break;
-
- case N_TEXT:
- case N_DATA:
- sym->n_value += block;
- break;
- }
- sym++;
- }
+#define build_funcname(prefix, buf, file) do {\
+ const struct string_part f = init_funcname_len(file);\
+ const size_t plen = sizeof(prefix "") - 1;\
+ *(buf) = concat_funcname(ALLOCA_N(char, plen+f.len+1), prefix, plen, f);\
+} while (0)
- /*
- * First comes the text-relocation
- */
- {
- struct relocation_info * rel = reloc;
- struct relocation_info * rel_beg = reloc +
- (hdr.a_trsize/sizeof(struct relocation_info));
- struct relocation_info * rel_end = reloc +
- (hdr.a_trsize+hdr.a_drsize)/sizeof(struct relocation_info);
-
- while (rel < rel_end) {
- char *address = (char*)(rel->r_address + block);
- long datum = 0;
-#if defined(__sun) && defined(__sparc)
- unsigned int mask = 0;
+#define init_funcname(buf, file) build_funcname(FUNCNAME_PREFIX, buf, file)
#endif
- if (rel >= rel_beg)
- address += hdr.a_text;
-
- if (rel->r_extern) { /* Look it up in symbol-table */
- sym = &(syms[R_SYMBOL(rel)]);
- switch (sym->n_type) {
- case N_EXT|N_UNDF:
- link_undef(sym->n_un.n_name, block, rel);
- case N_EXT|N_COMM:
- case N_COMM:
- datum = sym->n_value;
- break;
- default:
- goto err_exit;
- }
- } /* end.. look it up */
- else { /* is static */
- switch (R_SYMBOL(rel)) {
- case N_TEXT:
- case N_DATA:
- datum = block;
- break;
- case N_BSS:
- datum = block + new_common;
- break;
- case N_ABS:
- break;
- }
- } /* end .. is static */
- if (R_PCREL(rel)) datum -= block;
-
-#if defined(__sun) && defined(__sparc)
- datum += rel->r_addend;
- datum >>= R_RIGHTSHIFT(rel);
- mask = (1 << R_BITSIZE(rel)) - 1;
- mask |= mask -1;
- datum &= mask;
-
- switch (R_LENGTH(rel)) {
- case 0:
- *address &= ~mask;
- *address |= datum;
- break;
- case 1:
- *(short *)address &= ~mask;
- *(short *)address |= datum;
- break;
- case 2:
- *(long *)address &= ~mask;
- *(long *)address |= datum;
- break;
- }
-#else
- switch (R_LENGTH(rel)) {
- case 0: /* byte */
- if (datum < -128 || datum > 127) goto err_exit;
- *address += datum;
- break;
- case 1: /* word */
- *(short *)address += datum;
- break;
- case 2: /* long */
- *(long *)address += datum;
- break;
- }
-#endif
- rel++;
- }
- }
-
- if (need_init) {
- int len;
- char **libs_to_be_linked = 0;
- char *buf;
-
- if (undef_tbl->num_entries > 0) {
- if (load_lib(libc) == -1) goto err_exit;
- }
-
- init_funcname(&buf, need_init);
- len = strlen(buf);
-
- for (sym = syms; sym<end; sym++) {
- char *name = sym->n_un.n_name;
- if (name[0] == '_' && sym->n_value >= block) {
- if (strcmp(name+1, "dln_libs_to_be_linked") == 0) {
- libs_to_be_linked = (char**)sym->n_value;
- }
- else if (strcmp(name+1, buf) == 0) {
- init_p = 1;
- ((int (*)())sym->n_value)();
- }
- }
- }
- if (libs_to_be_linked && undef_tbl->num_entries > 0) {
- while (*libs_to_be_linked) {
- load_lib(*libs_to_be_linked);
- libs_to_be_linked++;
- }
- }
- }
- free(reloc);
- free(syms);
- if (need_init) {
- if (init_p == 0) {
- dln_errno = DLN_ENOINIT;
- return -1;
- }
- if (undef_tbl->num_entries > 0) {
- if (load_lib(libc) == -1) goto err_exit;
- if (undef_tbl->num_entries > 0) {
- dln_errno = DLN_EUNDEF;
- return -1;
- }
- }
- }
- return 0;
-
- err_exit:
- if (syms) free(syms);
- if (reloc) free(reloc);
- if (block) free((char*)block);
- return -1;
-}
-
-static int target_offset;
-static int
-search_undef(const char *key, int value, st_table *lib_tbl)
-{
- long offset;
-
- if (st_lookup(lib_tbl, key, &offset) == 0) return ST_CONTINUE;
- target_offset = offset;
- return ST_STOP;
-}
-
-struct symdef {
- int rb_str_index;
- int lib_offset;
-};
-
-const char *dln_librrb_ary_path = DLN_DEFAULT_LIB_PATH;
-
-static int
-load_lib(const char *lib)
-{
- char *path, *file, fbuf[MAXPATHLEN];
- char *envpath = 0;
- char armagic[SARMAG];
- int fd, size;
- struct ar_hdr ahdr;
- st_table *lib_tbl = NULL;
- int *data, nsym;
- struct symdef *base;
- char *name_base;
-
- if (dln_init_p == 0) {
- dln_errno = DLN_ENOINIT;
- return -1;
- }
-
- if (undef_tbl->num_entries == 0) return 0;
- dln_errno = DLN_EBADLIB;
-
- if (lib[0] == '-' && lib[1] == 'l') {
- long len = strlen(lib) + 4;
- char *p = alloca(len);
- snprintf(p, len, "lib%s.a", lib+2);
- lib = p;
- }
-
- /* library search path: */
- /* look for environment variable DLN_LIBRARY_PATH first. */
- /* then variable dln_librrb_ary_path. */
- /* if path is still NULL, use "." for path. */
- path = getenv("DLN_LIBRARY_PATH");
- if (path == NULL) path = dln_librrb_ary_path;
- else path = envpath = strdup(path);
-
- file = dln_find_file_r(lib, path, fbuf, sizeof(fbuf));
- if (envpath) free(envpath);
- fd = open(file, O_RDONLY);
- if (fd == -1) goto syserr;
- size = read(fd, armagic, SARMAG);
- if (size == -1) goto syserr;
-
- if (size != SARMAG) {
- dln_errno = DLN_ENOTLIB;
- goto badlib;
- }
- size = read(fd, &ahdr, sizeof(ahdr));
- if (size == -1) goto syserr;
- if (size != sizeof(ahdr) || sscanf(ahdr.ar_size, "%d", &size) != 1) {
- goto badlib;
- }
-
- if (strncmp(ahdr.ar_name, "__.SYMDEF", 9) == 0) {
- /* make hash table from __.SYMDEF */
-
- lib_tbl = st_init_strtable();
- data = (int*)xmalloc(size);
- if (data == NULL) goto syserr;
- size = read(fd, data, size);
- nsym = *data / sizeof(struct symdef);
- base = (struct symdef*)(data + 1);
- name_base = (char*)(base + nsym) + sizeof(int);
- while (nsym > 0) {
- char *name = name_base + base->rb_str_index;
-
- st_insert(lib_tbl, name, base->lib_offset + sizeof(ahdr));
- nsym--;
- base++;
- }
- for (;;) {
- target_offset = -1;
- st_foreach(undef_tbl, search_undef, lib_tbl);
- if (target_offset == -1) break;
- if (load_1(fd, target_offset, 0) == -1) {
- st_free_table(lib_tbl);
- free(data);
- goto badlib;
- }
- if (undef_tbl->num_entries == 0) break;
- }
- free(data);
- st_free_table(lib_tbl);
- }
- else {
- /* linear library, need to scan (FUTURE) */
-
- for (;;) {
- int offset = SARMAG;
- int found = 0;
- struct exec hdr;
- struct nlist *syms, *sym, *end;
-
- while (undef_tbl->num_entries > 0) {
- found = 0;
- lseek(fd, offset, 0);
- size = read(fd, &ahdr, sizeof(ahdr));
- if (size == -1) goto syserr;
- if (size == 0) break;
- if (size != sizeof(ahdr)
- || sscanf(ahdr.ar_size, "%d", &size) != 1) {
- goto badlib;
- }
- offset += sizeof(ahdr);
- if (load_header(fd, &hdr, offset) == -1)
- goto badlib;
- syms = load_sym(fd, &hdr, offset);
- if (syms == NULL) goto badlib;
- sym = syms;
- end = syms + (hdr.a_syms / sizeof(struct nlist));
- while (sym < end) {
- if (sym->n_type == N_EXT|N_TEXT
- && st_lookup(undef_tbl, sym->n_un.n_name, NULL)) {
- break;
- }
- sym++;
- }
- if (sym < end) {
- found++;
- free(syms);
- if (load_1(fd, offset, 0) == -1) {
- goto badlib;
- }
- }
- offset += size;
- if (offset & 1) offset++;
- }
- if (found) break;
- }
- }
- close(fd);
- return 0;
-
- syserr:
- dln_errno = errno;
- badlib:
- if (fd >= 0) close(fd);
- return -1;
-}
-
-static int
-load(const char *file)
-{
- int fd;
- int result;
-
- if (dln_init_p == 0) {
- if (dln_init(dln_argv0) == -1) return -1;
- }
- result = strlen(file);
- if (file[result-1] == 'a') {
- return load_lib(file);
- }
-
- fd = open(file, O_RDONLY);
- if (fd == -1) {
- dln_errno = errno;
- return -1;
- }
- result = load_1(fd, 0, file);
- close(fd);
-
- return result;
-}
-
-void*
-dln_sym(const char *name)
-{
- struct nlist *sym;
-
- if (st_lookup(sym_tbl, name, &sym))
- return (void*)sym->n_value;
- return NULL;
-}
-
-#endif /* USE_DLN_A_OUT */
-
#ifdef USE_DLN_DLOPEN
# include <dlfcn.h>
#endif
-#ifdef __hpux
-#include <errno.h>
-#include "dl.h"
-#endif
-
#if defined(_AIX)
#include <ctype.h> /* for isdigit() */
#include <errno.h> /* for global errno */
@@ -1107,10 +168,6 @@ dln_sym(const char *name)
#define NSLINKMODULE_OPTION_BINDNOW 1
#endif
#endif
-#else
-#ifdef MACOSX_DYLD
-#include <mach-o/dyld.h>
-#endif
#endif
#ifdef _WIN32
@@ -1127,50 +184,27 @@ dln_strerror(char *message, size_t size)
size_t len = snprintf(message, size, "%d: ", error);
#define format_message(sublang) FormatMessage(\
- FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, \
- NULL, error, MAKELANGID(LANG_NEUTRAL, (sublang)), \
- message + len, size - len, NULL)
+ FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, \
+ NULL, error, MAKELANGID(LANG_NEUTRAL, (sublang)), \
+ message + len, size - len, NULL)
if (format_message(SUBLANG_ENGLISH_US) == 0)
- format_message(SUBLANG_DEFAULT);
+ format_message(SUBLANG_DEFAULT);
for (p = message + len; *p; p++) {
- if (*p == '\n' || *p == '\r')
- *p = ' ';
+ if (*p == '\n' || *p == '\r')
+ *p = ' ';
}
return message;
}
#define dln_strerror() dln_strerror(message, sizeof message)
-#elif ! defined _AIX
+#elif defined USE_DLN_DLOPEN
static const char *
dln_strerror(void)
{
-#ifdef USE_DLN_A_OUT
- char *strerror();
-
- switch (dln_errno) {
- case DLN_ECONFL:
- return "Symbol name conflict";
- case DLN_ENOINIT:
- return "No initializer given";
- case DLN_EUNDEF:
- return "Unresolved symbols";
- case DLN_ENOTLIB:
- return "Not a library file";
- case DLN_EBADLIB:
- return "Malformed library file";
- case DLN_EINIT:
- return "Not initialized";
- default:
- return strerror(dln_errno);
- }
-#endif
-
-#ifdef USE_DLN_DLOPEN
return (char*)dlerror();
-#endif
}
#endif
-#if defined(_AIX) && ! defined(_IA64)
+#if defined(_AIX)
static void
aix_loaderror(const char *pathname)
{
@@ -1180,18 +214,18 @@ aix_loaderror(const char *pathname)
snprintf(errbuf, sizeof(errbuf), "load failed - %s. ", pathname);
if (loadquery(L_GETMESSAGES, &message[0], sizeof(message)) != -1) {
- ERRBUF_APPEND("Please issue below command for detailed reasons:\n\t");
- ERRBUF_APPEND("/usr/sbin/execerror ruby ");
- for (i=0; message[i]; i++) {
- ERRBUF_APPEND("\"");
- ERRBUF_APPEND(message[i]);
- ERRBUF_APPEND("\" ");
- }
- ERRBUF_APPEND("\n");
+ ERRBUF_APPEND("Please issue below command for detailed reasons:\n\t");
+ ERRBUF_APPEND("/usr/sbin/execerror ruby ");
+ for (i=0; message[i]; i++) {
+ ERRBUF_APPEND("\"");
+ ERRBUF_APPEND(message[i]);
+ ERRBUF_APPEND("\" ");
+ }
+ ERRBUF_APPEND("\n");
}
else {
- ERRBUF_APPEND(strerror(errno));
- ERRBUF_APPEND("[loadquery failed]");
+ ERRBUF_APPEND(strerror(errno));
+ ERRBUF_APPEND("[loadquery failed]");
}
dln_loaderror("%s", errbuf);
}
@@ -1209,22 +243,22 @@ rb_w32_check_imported(HMODULE ext, HMODULE mine)
desc = ImageDirectoryEntryToData(ext, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &size);
if (!desc) return 0;
while (desc->Name) {
- PIMAGE_THUNK_DATA pint = (PIMAGE_THUNK_DATA)((char *)ext + desc->Characteristics);
- PIMAGE_THUNK_DATA piat = (PIMAGE_THUNK_DATA)((char *)ext + desc->FirstThunk);
- for (; piat->u1.Function; piat++, pint++) {
- static const char prefix[] = "rb_";
- PIMAGE_IMPORT_BY_NAME pii;
- const char *name;
-
- if (IMAGE_SNAP_BY_ORDINAL(pint->u1.Ordinal)) continue;
- pii = (PIMAGE_IMPORT_BY_NAME)((char *)ext + (size_t)pint->u1.AddressOfData);
- name = (const char *)pii->Name;
- if (strncmp(name, prefix, sizeof(prefix) - 1) == 0) {
- FARPROC addr = GetProcAddress(mine, name);
- if (addr) return (FARPROC)piat->u1.Function == addr;
- }
- }
- desc++;
+ PIMAGE_THUNK_DATA pint = (PIMAGE_THUNK_DATA)((char *)ext + desc->Characteristics);
+ PIMAGE_THUNK_DATA piat = (PIMAGE_THUNK_DATA)((char *)ext + desc->FirstThunk);
+ for (; piat->u1.Function; piat++, pint++) {
+ static const char prefix[] = "rb_";
+ PIMAGE_IMPORT_BY_NAME pii;
+ const char *name;
+
+ if (IMAGE_SNAP_BY_ORDINAL(pint->u1.Ordinal)) continue;
+ pii = (PIMAGE_IMPORT_BY_NAME)((char *)ext + (size_t)pint->u1.AddressOfData);
+ name = (const char *)pii->Name;
+ if (strncmp(name, prefix, sizeof(prefix) - 1) == 0) {
+ FARPROC addr = GetProcAddress(mine, name);
+ if (addr) return (FARPROC)piat->u1.Function == addr;
+ }
+ }
+ desc++;
}
return 1;
}
@@ -1232,38 +266,94 @@ rb_w32_check_imported(HMODULE ext, HMODULE mine)
#if defined(DLN_NEEDS_ALT_SEPARATOR) && DLN_NEEDS_ALT_SEPARATOR
#define translit_separator(src) do { \
- char *tmp = ALLOCA_N(char, strlen(src) + 1), *p = tmp, c; \
- do { \
- *p++ = ((c = *file++) == '/') ? DLN_NEEDS_ALT_SEPARATOR : c; \
- } while (c); \
- (src) = tmp; \
+ char *tmp = ALLOCA_N(char, strlen(src) + 1), *p = tmp, c; \
+ do { \
+ *p++ = ((c = *file++) == '/') ? DLN_NEEDS_ALT_SEPARATOR : c; \
+ } while (c); \
+ (src) = tmp; \
} while (0)
#else
#define translit_separator(str) (void)(str)
#endif
-void*
-dln_load(const char *file)
+#ifdef USE_DLN_DLOPEN
+# include "ruby/internal/stdbool.h"
+# include "internal/warnings.h"
+static bool
+dln_incompatible_func(void *handle, const char *funcname, void *const fp, const char **libname)
+{
+ void *ex = dlsym(handle, funcname);
+ if (!ex) return false;
+ if (ex == fp) return false;
+# if defined(HAVE_DLADDR) && !defined(__CYGWIN__)
+ Dl_info dli;
+ if (dladdr(ex, &dli)) {
+ *libname = dli.dli_fname;
+ }
+# endif
+ return true;
+}
+
+COMPILER_WARNING_PUSH
+#if defined(__clang__) || GCC_VERSION_SINCE(4, 2, 0)
+COMPILER_WARNING_IGNORED(-Wpedantic)
+#endif
+static bool
+dln_incompatible_library_p(void *handle, const char **libname)
{
-#if !defined(_AIX) && !defined(NeXT)
- const char *error = 0;
-#define DLN_ERROR() (error = dln_strerror(), strcpy(ALLOCA_N(char, strlen(error) + 1), error))
+#define check_func(func) \
+ if (dln_incompatible_func(handle, EXTERNAL_PREFIX #func, (void *)&func, libname)) \
+ return true
+ check_func(ruby_xmalloc);
+ return false;
+}
+COMPILER_WARNING_POP
#endif
-#if defined _WIN32
- HINSTANCE handle;
- WCHAR *winfile;
- char message[1024];
- void (*init_fct)();
- char *buf;
+#if !defined(MAC_OS_X_VERSION_MIN_REQUIRED)
+/* assume others than old Mac OS X have no problem */
+# define dln_disable_dlclose() false
- /* Load the file as an object one */
- init_funcname(&buf, file);
+#elif !defined(MAC_OS_X_VERSION_10_11) || \
+ (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_11)
+/* targeting older versions only */
+# define dln_disable_dlclose() true
+
+#elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_11
+/* targeting newer versions only */
+# define dln_disable_dlclose() false
+
+#else
+/* support both versions, and check at runtime */
+# include <sys/sysctl.h>
+
+static bool
+dln_disable_dlclose(void)
+{
+ int mib[] = {CTL_KERN, KERN_OSREV};
+ int32_t rev;
+ size_t size = sizeof(rev);
+ if (sysctl(mib, numberof(mib), &rev, &size, NULL, 0)) return true;
+ if (rev < MAC_OS_X_VERSION_10_11) return true;
+ return false;
+}
+#endif
+
+#if defined(_WIN32) || defined(USE_DLN_DLOPEN)
+static void *
+dln_open(const char *file)
+{
+ static const char incompatible[] = "incompatible library version";
+ const char *error = NULL;
+ void *handle;
+
+#if defined(_WIN32)
+ char message[1024];
/* Convert the file path to wide char */
- winfile = rb_w32_mbstr_to_wstr(CP_UTF8, file, -1, NULL);
+ WCHAR *winfile = rb_w32_mbstr_to_wstr(CP_UTF8, file, -1, NULL);
if (!winfile) {
- dln_memerror();
+ dln_memerror();
}
/* Load file */
@@ -1271,183 +361,211 @@ dln_load(const char *file)
free(winfile);
if (!handle) {
- error = dln_strerror();
- goto failed;
+ error = dln_strerror();
+ goto failed;
}
-#if defined _WIN32 && defined RUBY_EXPORT
+# if defined(RUBY_EXPORT)
if (!rb_w32_check_imported(handle, rb_libruby_handle())) {
- FreeLibrary(handle);
- error = "incompatible library version";
- goto failed;
+ FreeLibrary(handle);
+ error = incompatible;
+ goto failed;
}
-#endif
+# endif
+
+#elif defined(USE_DLN_DLOPEN)
+
+# ifndef RTLD_LAZY
+# define RTLD_LAZY 1
+# endif
+# ifdef __INTERIX
+# undef RTLD_GLOBAL
+# endif
+# ifndef RTLD_GLOBAL
+# define RTLD_GLOBAL 0
+# endif
+# ifndef RTLD_LOCAL
+# define RTLD_LOCAL 0 /* TODO: 0??? some systems (including libc) use 0x00100 for RTLD_GLOBAL, 0x00000 for RTLD_LOCAL */
+# endif
- if ((init_fct = (void(*)())GetProcAddress(handle, buf)) == NULL) {
- dln_loaderror("%s - %s\n%s", dln_strerror(), buf, file);
+ /* Load file */
+ int mode = rb_box_available() ? RTLD_LAZY|RTLD_LOCAL : RTLD_LAZY|RTLD_GLOBAL;
+ handle = dlopen(file, mode);
+ if (handle == NULL) {
+ error = dln_strerror();
+ goto failed;
}
- /* Call the init code */
- (*init_fct)();
- return handle;
-#else
-#ifdef USE_DLN_A_OUT
- if (load(file) == -1) {
- error = dln_strerror();
- goto failed;
+# if defined(RUBY_EXPORT)
+ {
+ const char *libruby_name = NULL;
+ if (dln_incompatible_library_p(handle, &libruby_name)) {
+ if (dln_disable_dlclose()) {
+ /* dlclose() segfaults */
+ if (libruby_name) {
+ dln_fatalerror("linked to incompatible %s - %s", libruby_name, file);
+ }
+ dln_fatalerror("%s - %s", incompatible, file);
+ }
+ else {
+ if (libruby_name) {
+ const size_t len = strlen(libruby_name);
+ char *const tmp = ALLOCA_N(char, len + 1);
+ if (tmp) memcpy(tmp, libruby_name, len + 1);
+ libruby_name = tmp;
+ }
+ dlclose(handle);
+ if (libruby_name) {
+ dln_loaderror("linked to incompatible %s - %s", libruby_name, file);
+ }
+ error = incompatible;
+ goto failed;
+ }
+ }
}
- return 0;
-#else
+# endif
+#endif
- char *buf;
- /* Load the file as an object one */
- init_funcname(&buf, file);
- translit_separator(file);
+ return handle;
-#ifdef USE_DLN_DLOPEN
-#define DLN_DEFINED
- {
- void *handle;
- void (*init_fct)();
+ failed:
+ dln_loaderror("%s - %s", error, file);
+}
-#ifndef RTLD_LAZY
-# define RTLD_LAZY 1
-#endif
-#ifdef __INTERIX
-# undef RTLD_GLOBAL
-#endif
-#ifndef RTLD_GLOBAL
-# define RTLD_GLOBAL 0
+static void *
+dln_sym(void *handle, const char *symbol)
+{
+#if defined(_WIN32)
+ return GetProcAddress(handle, symbol);
+#elif defined(USE_DLN_DLOPEN)
+ return dlsym(handle, symbol);
#endif
+}
- /* Load file */
- if ((handle = (void*)dlopen(file, RTLD_LAZY|RTLD_GLOBAL)) == NULL) {
- error = dln_strerror();
- goto failed;
- }
-# if defined RUBY_EXPORT
- {
- static const char incompatible[] = "incompatible library version";
- void *ex = dlsym(handle, EXTERNAL_PREFIX"ruby_xmalloc");
- if (ex && ex != ruby_xmalloc) {
-
-# if defined __APPLE__
- /* dlclose() segfaults */
- rb_fatal("%s - %s", incompatible, file);
-# else
- dlclose(handle);
- error = incompatible;
- goto failed;
-# endif
- }
- }
-# endif
-
- init_fct = (void(*)())(VALUE)dlsym(handle, buf);
- if (init_fct == NULL) {
- error = DLN_ERROR();
- dlclose(handle);
- goto failed;
- }
- /* Call the init code */
- (*init_fct)();
+static uintptr_t
+dln_sym_func(void *handle, const char *symbol)
+{
+ void *func = dln_sym(handle, symbol);
- return handle;
+ if (func == NULL) {
+ const char *error;
+#if defined(_WIN32)
+ char message[1024];
+ error = dln_strerror();
+#elif defined(USE_DLN_DLOPEN)
+ const size_t errlen = strlen(error = dln_strerror()) + 1;
+ error = memcpy(ALLOCA_N(char, errlen), error, errlen);
+#endif
+ dln_loaderror("%s - %s", error, symbol);
}
-#endif /* USE_DLN_DLOPEN */
+ return (uintptr_t)func;
+}
-#ifdef __hpux
-#define DLN_DEFINED
- {
- shl_t lib = NULL;
- int flags;
- void (*init_fct)();
-
- flags = BIND_DEFERRED;
- lib = shl_load(file, flags, 0);
- if (lib == NULL) {
- extern int errno;
- dln_loaderror("%s - %s", strerror(errno), file);
- }
- shl_findsym(&lib, buf, TYPE_PROCEDURE, (void*)&init_fct);
- if (init_fct == NULL) {
- shl_findsym(&lib, buf, TYPE_UNDEFINED, (void*)&init_fct);
- if (init_fct == NULL) {
- errno = ENOSYM;
- dln_loaderror("%s - %s", strerror(ENOSYM), file);
- }
- }
- (*init_fct)();
- return (void*)lib;
- }
-#endif /* hpux */
+#define dln_sym_callable(rettype, argtype, handle, symbol) \
+ (*(rettype (*)argtype)dln_sym_func(handle, symbol))
+#endif
-#if defined(_AIX) && ! defined(_IA64)
-#define DLN_DEFINED
- {
- void (*init_fct)();
-
- init_fct = (void(*)())load((char*)file, 1, 0);
- if (init_fct == NULL) {
- aix_loaderror(file);
- }
- if (loadbind(0, (void*)dln_load, (void*)init_fct) == -1) {
- aix_loaderror(file);
- }
- (*init_fct)();
- return (void*)init_fct;
+void *
+dln_symbol(void *handle, const char *symbol)
+{
+#if defined(_WIN32) || defined(USE_DLN_DLOPEN)
+ if (EXTERNAL_PREFIX[0]) {
+ const size_t symlen = strlen(symbol);
+ char *const tmp = ALLOCA_N(char, symlen + sizeof(EXTERNAL_PREFIX));
+ if (!tmp) dln_memerror();
+ memcpy(tmp, EXTERNAL_PREFIX, sizeof(EXTERNAL_PREFIX) - 1);
+ memcpy(tmp + sizeof(EXTERNAL_PREFIX) - 1, symbol, symlen + 1);
+ symbol = tmp;
+ }
+ if (handle == NULL) {
+# if defined(USE_DLN_DLOPEN)
+ handle = dlopen(NULL, RTLD_LAZY | RTLD_GLOBAL);
+# elif defined(_WIN32)
+ handle = rb_libruby_handle();
+# else
+ return NULL;
+# endif
}
-#endif /* _AIX */
-
-#if defined(MACOSX_DYLD)
-#define DLN_DEFINED
-/*----------------------------------------------------
- By SHIROYAMA Takayuki Psi@fortune.nest.or.jp
-
- Special Thanks...
- Yu tomoak-i@is.aist-nara.ac.jp,
- Mi hisho@tasihara.nest.or.jp,
- sunshine@sunshineco.com,
- and... Miss ARAI Akino(^^;)
- ----------------------------------------------------*/
- {
- int dyld_result;
- NSObjectFileImage obj_file; /* handle, but not use it */
- /* "file" is module file name .
- "buf" is pointer to initial function name with "_" . */
+ return dln_sym(handle, symbol);
+#else
+ return NULL;
+#endif
+}
- void (*init_fct)();
+#if defined(RUBY_DLN_CHECK_ABI) && defined(USE_DLN_DLOPEN)
+static bool
+abi_check_enabled_p(void)
+{
+ const char *val = getenv("RUBY_ABI_CHECK");
+ return val == NULL || !(val[0] == '0' && val[1] == '\0');
+}
+#endif
- dyld_result = NSCreateObjectFileImageFromFile(file, &obj_file);
+static void *
+dln_load_and_init(const char *file, const char *init_fct_name)
+{
+#if defined(_WIN32) || defined(USE_DLN_DLOPEN)
+ void *handle = dln_open(file);
- if (dyld_result != NSObjectFileImageSuccess) {
- dln_loaderror("Failed to load %.200s", file);
- }
+#ifdef RUBY_DLN_CHECK_ABI
+ typedef unsigned long long abi_version_number;
+ abi_version_number binary_abi_version =
+ dln_sym_callable(abi_version_number, (void), handle, EXTERNAL_PREFIX "ruby_abi_version")();
+ if (binary_abi_version != RUBY_ABI_VERSION && abi_check_enabled_p()) {
+ dln_loaderror("incompatible ABI version of binary - %s", file);
+ }
+#endif
- NSLinkModule(obj_file, file, NSLINKMODULE_OPTION_BINDNOW);
+ /* Call the init code */
+ dln_sym_callable(void, (void), handle, init_fct_name)();
- /* lookup the initial function */
- if (!NSIsSymbolNameDefined(buf)) {
- dln_loaderror("Failed to lookup Init function %.200s",file);
- }
- init_fct = NSAddressOfSymbol(NSLookupAndBindSymbol(buf));
- (*init_fct)();
+ return handle;
- return (void*)init_fct;
+#elif defined(_AIX)
+ {
+ void (*init_fct)(void);
+
+ /* TODO: check - AIX's load system call will return the first/last symbol/function? */
+ init_fct = (void(*)(void))load((char*)file, 1, 0);
+ if (init_fct == NULL) {
+ aix_loaderror(file);
+ }
+ if (loadbind(0, (void*)dln_load, (void*)init_fct) == -1) {
+ aix_loaderror(file);
+ }
+ (*init_fct)();
+ return (void*)init_fct;
}
+#else
+ dln_notimplement();
#endif
-#ifndef DLN_DEFINED
+ return 0; /* dummy return */
+}
+
+void *
+dln_load(const char *file)
+{
+#if defined(_WIN32) || defined(USE_DLN_DLOPEN)
+ char *init_fct_name;
+ init_funcname(&init_fct_name, file);
+ return dln_load_and_init(file, init_fct_name);
+#else
dln_notimplement();
+ return 0;
#endif
+}
-#endif /* USE_DLN_A_OUT */
-#endif
-#if !defined(_AIX) && !defined(NeXT)
- failed:
- dln_loaderror("%s - %s", error, file);
+void *
+dln_load_feature(const char *file, const char *fname)
+{
+#if defined(_WIN32) || defined(USE_DLN_DLOPEN)
+ char *init_fct_name;
+ init_funcname(&init_fct_name, fname);
+ return dln_load_and_init(file, init_fct_name);
+#else
+ dln_notimplement();
+ return 0;
#endif
-
- return 0; /* dummy return */
}
diff --git a/dln.h b/dln.h
index d98b2607e2..711abf592c 100644
--- a/dln.h
+++ b/dln.h
@@ -1,3 +1,5 @@
+#ifndef DLN_H
+#define DLN_H
/**********************************************************************
dln.h -
@@ -9,24 +11,7 @@
**********************************************************************/
-#ifndef DLN_H
-#define DLN_H
-
-#ifdef __cplusplus
-# ifndef HAVE_PROTOTYPES
-# define HAVE_PROTOTYPES 1
-# endif
-# ifndef HAVE_STDARG_PROTOTYPES
-# define HAVE_STDARG_PROTOTYPES 1
-# endif
-#endif
-
-#undef _
-#ifdef HAVE_PROTOTYPES
-# define _(args) args
-#else
-# define _(args) ()
-#endif
+#include "ruby/defines.h" /* for RUBY_SYMBOL_EXPORT_BEGIN */
RUBY_SYMBOL_EXPORT_BEGIN
@@ -39,12 +24,9 @@ RUBY_SYMBOL_EXPORT_BEGIN
char *dln_find_exe_r(const char*,const char*,char*,size_t DLN_FIND_EXTRA_ARG_DECL);
char *dln_find_file_r(const char*,const char*,char*,size_t DLN_FIND_EXTRA_ARG_DECL);
-
-#ifdef USE_DLN_A_OUT
-extern char *dln_argv0;
-#endif
-
void *dln_load(const char*);
+void *dln_load_feature(const char*, const char*);
+void *dln_symbol(void*,const char*);
RUBY_SYMBOL_EXPORT_END
diff --git a/dln_find.c b/dln_find.c
index b17b0d23e1..ae37b9dde4 100644
--- a/dln_find.c
+++ b/dln_find.c
@@ -11,11 +11,9 @@
#ifdef RUBY_EXPORT
#include "ruby/ruby.h"
-#define dln_warning rb_warning
-#define dln_warning_arg
+#define dln_warning(...) rb_warning(__VA_ARGS__)
#else
-#define dln_warning fprintf
-#define dln_warning_arg stderr,
+#define dln_warning(...) fprintf(stderr, __VA_ARGS__)
#endif
#include "dln.h"
@@ -23,10 +21,6 @@
# include <stdlib.h>
#endif
-#ifdef USE_DLN_A_OUT
-char *dln_argv0;
-#endif
-
#if defined(HAVE_ALLOCA_H)
#include <alloca.h>
#endif
@@ -48,13 +42,6 @@ char *dln_argv0;
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#endif
-#ifdef HAVE_SYS_PARAM_H
-# include <sys/param.h>
-#endif
-#ifndef MAXPATHLEN
-# define MAXPATHLEN 1024
-#endif
-
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
@@ -64,35 +51,35 @@ char *getenv();
#endif
static char *dln_find_1(const char *fname, const char *path, char *buf, size_t size, int exe_flag
- DLN_FIND_EXTRA_ARG_DECL);
+ DLN_FIND_EXTRA_ARG_DECL);
char *
dln_find_exe_r(const char *fname, const char *path, char *buf, size_t size
- DLN_FIND_EXTRA_ARG_DECL)
+ DLN_FIND_EXTRA_ARG_DECL)
{
char *envpath = 0;
if (!path) {
- path = getenv(PATH_ENV);
- if (path) path = envpath = strdup(path);
+ path = getenv(PATH_ENV);
+ if (path) path = envpath = strdup(path);
}
if (!path) {
- path =
- "/usr/local/bin" PATH_SEP
- "/usr/ucb" PATH_SEP
- "/usr/bin" PATH_SEP
- "/bin" PATH_SEP
- ".";
+ path =
+ "/usr/local/bin" PATH_SEP
+ "/usr/ucb" PATH_SEP
+ "/usr/bin" PATH_SEP
+ "/bin" PATH_SEP
+ ".";
}
buf = dln_find_1(fname, path, buf, size, 1 DLN_FIND_EXTRA_ARG);
- if (envpath) free(envpath);
+ free(envpath);
return buf;
}
char *
dln_find_file_r(const char *fname, const char *path, char *buf, size_t size
- DLN_FIND_EXTRA_ARG_DECL)
+ DLN_FIND_EXTRA_ARG_DECL)
{
if (!path) path = ".";
return dln_find_1(fname, path, buf, size, 0 DLN_FIND_EXTRA_ARG);
@@ -100,8 +87,8 @@ dln_find_file_r(const char *fname, const char *path, char *buf, size_t size
static char *
dln_find_1(const char *fname, const char *path, char *fbuf, size_t size,
- int exe_flag /* non 0 if looking for executable. */
- DLN_FIND_EXTRA_ARG_DECL)
+ int exe_flag /* non 0 if looking for executable. */
+ DLN_FIND_EXTRA_ARG_DECL)
{
register const char *dp;
register const char *ep;
@@ -110,7 +97,7 @@ dln_find_1(const char *fname, const char *path, char *fbuf, size_t size,
size_t i, fnlen, fspace;
#ifdef DOSISH
static const char extension[][5] = {
- EXECUTABLE_EXTS,
+ EXECUTABLE_EXTS,
};
size_t j;
int is_abs = 0, has_path = 0;
@@ -120,22 +107,21 @@ dln_find_1(const char *fname, const char *path, char *fbuf, size_t size,
static const char pathname_too_long[] = "openpath: pathname too long (ignored)\n\
\tDirectory \"%.*s\"%s\n\tFile \"%.*s\"%s\n";
-#define PATHNAME_TOO_LONG() dln_warning(dln_warning_arg pathname_too_long, \
- ((bp - fbuf) > 100 ? 100 : (int)(bp - fbuf)), fbuf, \
- ((bp - fbuf) > 100 ? "..." : ""), \
- (fnlen > 100 ? 100 : (int)fnlen), fname, \
- (fnlen > 100 ? "..." : ""))
+#define PATHNAME_TOO_LONG() dln_warning(pathname_too_long, \
+ ((bp - fbuf) > 100 ? 100 : (int)(bp - fbuf)), fbuf, \
+ ((bp - fbuf) > 100 ? "..." : ""), \
+ (fnlen > 100 ? 100 : (int)fnlen), fname, \
+ (fnlen > 100 ? "..." : ""))
#define RETURN_IF(expr) if (expr) return (char *)fname;
RETURN_IF(!fname);
fnlen = strlen(fname);
if (fnlen >= size) {
- dln_warning(dln_warning_arg
- "openpath: pathname too long (ignored)\n\tFile \"%.*s\"%s\n",
- (fnlen > 100 ? 100 : (int)fnlen), fname,
- (fnlen > 100 ? "..." : ""));
- return NULL;
+ dln_warning("openpath: pathname too long (ignored)\n\tFile \"%.*s\"%s\n",
+ (fnlen > 100 ? 100 : (int)fnlen), fname,
+ (fnlen > 100 ? "..." : ""));
+ return NULL;
}
#ifdef DOSISH
# ifndef CharNext
@@ -143,52 +129,52 @@ dln_find_1(const char *fname, const char *path, char *fbuf, size_t size,
# endif
# ifdef DOSISH_DRIVE_LETTER
if (((p[0] | 0x20) - 'a') < 26 && p[1] == ':') {
- p += 2;
- is_abs = 1;
+ p += 2;
+ is_abs = 1;
}
# endif
switch (*p) {
case '/': case '\\':
- is_abs = 1;
- p++;
+ is_abs = 1;
+ p++;
}
has_path = is_abs;
while (*p) {
- switch (*p) {
- case '/': case '\\':
- has_path = 1;
- ext = 0;
- p++;
- break;
- case '.':
- ext = p;
- p++;
- break;
- default:
- p = CharNext(p);
- }
+ switch (*p) {
+ case '/': case '\\':
+ has_path = 1;
+ ext = 0;
+ p++;
+ break;
+ case '.':
+ ext = p;
+ p++;
+ break;
+ default:
+ p = CharNext(p);
+ }
}
if (ext) {
- for (j = 0; STRCASECMP(ext, extension[j]); ) {
- if (++j == sizeof(extension) / sizeof(extension[0])) {
- ext = 0;
- break;
- }
- }
+ for (j = 0; STRCASECMP(ext, extension[j]); ) {
+ if (++j == sizeof(extension) / sizeof(extension[0])) {
+ ext = 0;
+ break;
+ }
+ }
}
ep = bp = 0;
if (!exe_flag) {
- RETURN_IF(is_abs);
+ RETURN_IF(is_abs);
}
else if (has_path) {
- RETURN_IF(ext);
- i = p - fname;
- if (i + 1 > size) goto toolong;
- fspace = size - i - 1;
- bp = fbuf;
- ep = p;
- memcpy(fbuf, fname, i + 1);
- goto needs_extension;
+ RETURN_IF(ext);
+ i = p - fname;
+ if (i + 1 > size) goto toolong;
+ fspace = size - i - 1;
+ bp = fbuf;
+ ep = p;
+ memcpy(fbuf, fname, i + 1);
+ goto needs_extension;
}
p = fname;
#endif
@@ -200,98 +186,104 @@ dln_find_1(const char *fname, const char *path, char *fbuf, size_t size,
#undef RETURN_IF
for (dp = path;; dp = ++ep) {
- register size_t l;
-
- /* extract a component */
- ep = strchr(dp, PATH_SEP[0]);
- if (ep == NULL)
- ep = dp+strlen(dp);
-
- /* find the length of that component */
- l = ep - dp;
- bp = fbuf;
- fspace = size - 2;
- if (l > 0) {
- /*
- ** If the length of the component is zero length,
- ** start from the current directory. If the
- ** component begins with "~", start from the
- ** user's $HOME environment variable. Otherwise
- ** take the path literally.
- */
-
- if (*dp == '~' && (l == 1 ||
+ register size_t l;
+
+ /* extract a component */
+ ep = strchr(dp, PATH_SEP[0]);
+ if (ep == NULL)
+ ep = dp+strlen(dp);
+
+ /* find the length of that component */
+ l = ep - dp;
+ bp = fbuf;
+ fspace = size - 2;
+ if (l > 0) {
+ /*
+ ** If the length of the component is zero length,
+ ** start from the current directory. If the
+ ** component begins with "~", start from the
+ ** user's $HOME environment variable. Otherwise
+ ** take the path literally.
+ */
+
+ if (*dp == '~' && (l == 1 ||
#if defined(DOSISH)
- dp[1] == '\\' ||
+ dp[1] == '\\' ||
#endif
- dp[1] == '/')) {
- char *home;
-
- home = getenv("HOME");
- if (home != NULL) {
- i = strlen(home);
- if (fspace < i)
- goto toolong;
- fspace -= i;
- memcpy(bp, home, i);
- bp += i;
- }
- dp++;
- l--;
- }
- if (l > 0) {
- if (fspace < l)
- goto toolong;
- fspace -= l;
- memcpy(bp, dp, l);
- bp += l;
- }
-
- /* add a "/" between directory and filename */
- if (ep[-1] != '/')
- *bp++ = '/';
- }
-
- /* now append the file name */
- i = fnlen;
- if (fspace < i) {
- toolong:
- PATHNAME_TOO_LONG();
- goto next;
- }
- fspace -= i;
- memcpy(bp, fname, i + 1);
+ dp[1] == '/')) {
+ const char *home;
+
+ home = getenv("HOME");
+ if (home != NULL) {
+ i = strlen(home);
+ if (fspace < i)
+ goto toolong;
+ fspace -= i;
+ memcpy(bp, home, i);
+ bp += i;
+ }
+ dp++;
+ l--;
+ }
+ if (l > 0) {
+ if (fspace < l)
+ goto toolong;
+ fspace -= l;
+ memcpy(bp, dp, l);
+ bp += l;
+ }
+
+ /* add a "/" between directory and filename */
+ if (ep[-1] != '/')
+ *bp++ = '/';
+ }
+
+ /* now append the file name */
+ i = fnlen;
+ if (fspace < i) {
+ goto toolong;
+ }
+ fspace -= i;
+ memcpy(bp, fname, i + 1);
#if defined(DOSISH)
- if (exe_flag && !ext) {
- needs_extension:
- for (j = 0; j < sizeof(extension) / sizeof(extension[0]); j++) {
- if (fspace < strlen(extension[j])) {
- PATHNAME_TOO_LONG();
- continue;
- }
- strlcpy(bp + i, extension[j], fspace);
- if (stat(fbuf, &st) == 0)
- return fbuf;
- }
- goto next;
- }
+ if (exe_flag && !ext) {
+ goto needs_extension;
+ }
#endif
#ifndef S_ISREG
# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#endif
- if (stat(fbuf, &st) == 0 && S_ISREG(st.st_mode)) {
- if (exe_flag == 0) return fbuf;
- /* looking for executable */
- if (eaccess(fbuf, X_OK) == 0) return fbuf;
- }
+ if (stat(fbuf, &st) == 0 && S_ISREG(st.st_mode)) {
+ if (exe_flag == 0) return fbuf;
+ /* looking for executable */
+ if (eaccess(fbuf, X_OK) == 0) return fbuf;
+ }
next:
- /* if not, and no other alternatives, life is bleak */
- if (*ep == '\0') {
- return NULL;
- }
+ /* if not, and no other alternatives, life is bleak */
+ if (*ep == '\0') {
+ return NULL;
+ }
+ continue;
+
+ toolong:
+ PATHNAME_TOO_LONG();
+ goto next;
- /* otherwise try the next component in the search path */
+#if defined(DOSISH)
+ needs_extension:
+ for (j = 0; j < sizeof(extension) / sizeof(extension[0]); j++) {
+ if (fspace < strlen(extension[j])) {
+ PATHNAME_TOO_LONG();
+ continue;
+ }
+ strlcpy(bp + i, extension[j], fspace);
+ if (stat(fbuf, &st) == 0)
+ return fbuf;
+ }
+ goto next;
+#endif
+ /* otherwise try the next component in the search path */
}
}
diff --git a/dmydln.c b/dmydln.c
index 25872efc98..62a89e2da5 100644
--- a/dmydln.c
+++ b/dmydln.c
@@ -1,9 +1,31 @@
+// This file is used by miniruby, not ruby.
+// ruby uses dln.c.
+
#include "ruby/ruby.h"
+NORETURN(void *dln_load(const char *));
void*
dln_load(const char *file)
{
rb_loaderror("this executable file can't load extension libraries");
- UNREACHABLE;
+ UNREACHABLE_RETURN(NULL);
+}
+
+NORETURN(void *dln_load_feature(const char*,const char*));
+void*
+dln_load_feature(const char *file, const char *fname)
+{
+ rb_loaderror("this executable file can't load extension libraries");
+
+ UNREACHABLE_RETURN(NULL);
+}
+
+NORETURN(void *dln_symbol(void*,const char*));
+void*
+dln_symbol(void *handle, const char *symbol)
+{
+ rb_loaderror("this executable file can't load extension libraries");
+
+ UNREACHABLE_RETURN(NULL);
}
diff --git a/dmyenc.c b/dmyenc.c
index 7e006e826c..4771841281 100644
--- a/dmyenc.c
+++ b/dmyenc.c
@@ -1,3 +1,17 @@
+// This file is used by dynamically-linked ruby, which has no
+// statically-linked encodings other than the builtin encodings.
+//
+// - miniruby does not use this Init_enc. Instead, "miniinit.c"
+// provides Init_enc, which defines only the builtin encodings.
+//
+// - Dynamically-linked ruby uses this Init_enc, which requires
+// "enc/encdb.so" to load the builtin encodings and set up the
+// optional encodings.
+//
+// - Statically-linked ruby does not use this Init_enc. Instead,
+// "enc/encinit.c" (which is a generated file) defines Init_enc,
+// which activates the encodings.
+
#define require(name) ruby_require_internal(name, (unsigned int)sizeof(name)-1)
int ruby_require_internal(const char *, int);
@@ -5,6 +19,6 @@ void
Init_enc(void)
{
if (require("enc/encdb.so") == 1) {
- require("enc/trans/transdb.so");
+ require("enc/trans/transdb.so");
}
}
diff --git a/dmyext.c b/dmyext.c
index 4d273f7faf..66be95ab4e 100644
--- a/dmyext.c
+++ b/dmyext.c
@@ -1,3 +1,17 @@
+// This file is used by dynamically-linked ruby, which has no
+// statically-linked extension libraries.
+//
+// - miniruby does not use this Init_ext. Instead, "miniinit.c"
+// provides Init_enc, which does nothing too. It does not support
+// require'ing extension libraries.
+//
+// - Dynamically-linked ruby uses this Init_ext, which does
+// nothing. It loads extension libraries by dlopen, etc.
+//
+// - Statically-linked ruby does not use this Init_ext. Instead,
+// "ext/extinit.c" (which is a generated file) defines Init_ext,
+// which activates the (statically-linked) extension libraries.
+
void
Init_ext(void)
{
diff --git a/doc/.document b/doc/.document
index b48c0387a7..3a95c9617b 100644
--- a/doc/.document
+++ b/doc/.document
@@ -1,4 +1,13 @@
-*.rdoc
-ChangeLog*
-NEWS-*
+[^_]*.md
+[^_]*.rb
+[^_]*.rdoc
+contributing
+distribution
+NEWS
syntax
+optparse
+date
+rdoc
+jit
+security
+language
diff --git a/doc/ChangeLog-0.60_to_1.1 b/doc/ChangeLog-0.60_to_1.1
deleted file mode 100644
index 33b0326892..0000000000
--- a/doc/ChangeLog-0.60_to_1.1
+++ /dev/null
@@ -1,3955 +0,0 @@
-Tue Aug 12 16:02:18 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c: option variables: $-0, $-p(readonly), $-v,
- $-I(load_path), $-a(readonly), $-K, $-d, $-F, $-i, $-l.
-
- * parse.y (yylex): ignore rd (ruby document) in the code.
-
-Mon Aug 11 12:37:58 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (Init_Regexp): $-K as alias to the $KCODE.
-
- * io.c (Init_IO): new virtual variable $-i for the value of -i
- option.
-
- * enum.c (Init_Enumerable): include? as alias of member?
-
-Fri Aug 8 11:16:50 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_foreach): now the record separator can be specified.
-
- * io.c (io_s_readlines): new method to read in whole file (or
- command output) from path.
-
- * ext/socket/socket.c (Init_socket): recvfrom did not work.
-
- * ext/socket/socket.c (sock_send): forgot to check nil for false
- value.
-
-Thu Aug 7 11:40:01 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (mod_constants): lists constants defiend in the
- modules/classes.
-
- * variable.c (rb_const_set): no longer warns about constant
- overriding by subclasses.
-
- * eval.c (mod_eval): does eval() on module's context. local
- variables are shared with outer scope.
-
- * object.c (Init_Object): remove private_attr/public_attr.
-
-Wed Aug 6 14:21:36 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (mod_attr): forgot to check nil for false value.
-
-Mon Aug 4 11:50:28 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (class_s_new): need not to specify names to create
- classes (or modules) dynamically.
-
- * variable.c (rb_class_path): scan class constants for anonymous
- classes/modules to make up pathes.
-
-Wed Jul 30 08:45:12 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): stop to cache const value in nodes.
-
-Sat Jul 26 03:17:22 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * numeric.c (flo_to_s): wrong .0 at end.
-
-Sat Jul 26 00:36:36 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (error_print): always print exception type in the
- toplevel exception handler.
-
- * string.c (str_hash): wrong hash value.
-
-Thu Jul 24 11:05:51 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (uscore_get): proper error message for unset $_.
-
-Wed Jul 23 09:56:55 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * object.c (obj_methods): returns list of method names of the
- specified object.
-
- * class.c (mod_instance_methods): returns list of method names of
- the class instnace.
-
-Fri Jul 11 22:38:55 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * object.c (class_superclass): returns class's superclass
- itself. (1.1)
-
- * object.c (obj_type): returns object's class itself. (1.1)
-
- * class.c (mod_included_modules): list included modules.
-
- * object.c (class_superclass): raises error for Object.
-
-Thu Jul 3 09:54:02 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (SETUP_ARGS): save source position, remove nd_line().
-
- * eval.c (rb_call): replace modulo by bit-masking.
-
- * eval.c (POP_SCOPE): force recycle scope object to reduce gc rate.
-
- * gc.c (obj_free): aboid calling run_final() when no finalizer is set.
-
- * eval.c (PUSH_VARS): do not allocate the dynamic scope's end-mark
- object.
-
-Wed Jul 2 14:25:07 1997 KIMURA Koichi <kkimura@pure.cpdc.canon.co.jp>
-
- * Native mswin32 support.
-
-Tue Jul 1 09:59:00 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970701
-
- * parse.y (mrhs): allow rest-star(*) in right hand side.
-
-Tue Jun 24 19:04:31 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970624
-
-Sat Jun 20 22:22:51 1997 Michio "Karl" Jinbo <karl@marcer.nagaokaut.ac.jp>
-
- * eval.c: freebsd 3.0 <sys/select.h> support.
-
-Fri Jun 20 01:24:45 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970620
-
- * gc.c: eliminate uninitilalized field of Hash, Array etc., to
- avoid dumping core.
-
-Thu Jun 19 01:29:44 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970619
-
- * string.c (str_split_method): wrong limit.
-
-Sat Jun 14 01:54:16 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * class.c (rb_singleton_class): no singleton for special
- constants (now raises exception).
-
- * eval.c (ruby_init): cbase in TOPLEVEL_BINDING need to be
- initialized.
-
-Sat Jun 14 01:01:16 1997 maeda shugo <shugo@po.aianet.ne.jp>
-
- * array.c (sort_2): wrong comparison.
-
-Sat Jun 14 00:53:44 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * hash.c (hash_foreach): safe iteration.
-
-Fri Jun 13 14:04:56 1997 Michio "Karl" Jinbo <karl@marcer.nagaokaut.ac.jp>
-
- * configure.in: -Bshareable option for netbsd.
-
-Fri Jun 13 01:16:22 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * io.c (pipe_open): call io_unbuffered() only for writable pipes.
-
-Thu Jun 12 01:14:15 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970612
-
- * ext/socket/socket.c (sock_new): use io_unbuffered().
-
- * ext/marshal/marshal.c (w_long): compact long format, which
- supports 64 bit architectures (unless longs are >32 bit size).
-
- * ext/marshal/marshal.c: allows recursive data for marshaling.
-
- * parse.y (rb_intern): raise exception for non-internable string.
-
- * ext/marshal/marshal.c (marshal_load): allows direct loading from
- strings.
-
- * ext/marshal/marshal.c (marshal_dump): allows direct dump to strings.
-
- * ext/marshal/marshal.c (marshal_dump): interface changed.
-
-Wed Jun 11 18:26:00 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * gc.c (rb_newobj): remove needless memset().
-
-Mon Jun 9 13:03:43 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_eval): reduce condition checks from while/until loop.
-
- * eval.c (rb_eval): wrong jump point for `next'.
-
-Fri Jun 6 11:47:39 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ruby.c (ruby_set_argv): initialize dln_argv0 for dln_a_out.
-
- * ext/socket/socket.c (open_unix): display path name for exceptions.
-
- * ruby.c (proc_options): option -S did not work well.
-
-Fri May 30 02:14:44 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970530
-
- * eval.c (eval): set $! properly if exception raised in eval().
-
- * io.c (io_write): now handles non T_FILE object.
-
- * io.c (io_defset): $< can be anything which has `write' method.
-
-Thu May 29 15:40:22 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (eval): $@ is always an array (not string).
-
- * pack.c (pack_unpack): avoid corrupting memory for unexpected
- input strings.
-
-Wed May 28 12:46:13 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970528
-
- * process.c (rb_waitpid): do not block other threads.
-
-Tue May 27 12:02:31 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (ruby_init): split initialize and processing command line
- options.
-
- * ruby.c (ruby_options): ruby_init(0, 0, envp) dumps core.
-
-Tue May 20 18:59:45 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * variable.c (rb_ivar_set): invalid instance variable access for
- built-in object raises TypeError.
-
-Fri May 16 17:32:21 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970516
-
- * dir.c (push_globs): was freeing non heap pointer.
-
- * gc.c: remove some duplicated prototypes.
-
- * ext/kconv/kconv.c: fix prototypes.
-
-Fri May 9 11:38:59 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970509
-
- * gc.c (obj_free): avoid free(NULL).
-
- * eval.c (rb_check_safe_str): argument missing for TypeError().
-
-Thu May 8 01:14:28 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * file.c (file_s_dirname): need to return "." for path without
- slashes.
-
-Wed May 7 19:18:48 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * process.c (f_fork): child processe does not inherit parent's
- itimer setting on linux. call setitimer() again in the child
- process.
-
-Sat May 3 02:49:43 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/curses/curses.c: modified for portability and add to the
- standard distribution.
-
-Wed Apr 30 00:34:00 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * file.c (file_s_size): returns 0 for empty files (not FALSE).
-
-Fri Apr 25 02:17:50 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970425
-
- * eval.c (f_load): free unused name-table.
-
- * eval.c (f_load): copy local variable name-table.
-
- * gc.c (obj_free): avoid free(NULL).
-
- * eval.c (rb_eval): forgot to make link from the scope object to
- NODE_SCOPE. It may crash the interpreter.
-
-Thu Apr 24 00:35:09 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * random.c (f_srand): save old seed anyway. srand() returns no
- value on some systems.
-
- * gc.c (obj_free): avoid double free of the local variable name
- table.
-
- * parse.y (top_local_setup): modify realloc to handle offset.
-
-Tue Apr 22 12:58:26 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970422
-
-Thu Apr 17 00:40:51 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * configure.in (rb_cv_bsdpgrp): proper check for BSD
- setpgrp/setpgrp.
-
-Wed Apr 16 16:14:02 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (proc_call): proc called in other thread must be orphan.
-
-Tue Apr 15 10:46:31 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970415
-
- * gc.c (obj_free): NODE_SCOPE marked from SCOPE object.
-
- * gc.c (gc_mark): some nodes marked wrong.
-
- * process.c (proc_getpgrp): wrong argument
-
-Fri Apr 14 18:32:42 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970414
-
-Fri Apr 12 01:20:12 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ruby.h: String pointer changed to unsigned char.
-
-Fri Apr 11 10:27:29 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970411
-
- * Makefile.in: create libruby.a before linking ruby.
-
- * string.c (str_strip_bang): >0x80 characters for isspace().
-
- * eval.c (proc_call): set safe-level temporally
-
- * eval.c (proc_s_new): save safe-level in the proc context.
-
- * eval.c (rb_eval): no class/module extension in safe mode.
-
-Thu Apr 10 02:10:41 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * gc.c (gc_mark): remove some pointer checks for speeding up.
-
- * ruby.c (ruby_options): set $0 temporally for -r option.
-
- * eval.c: built-in security feature.
-
- * gc.c (gc_sweep): do not free nodes during compile.
-
- * parse.y (yycompile): set flag when compiling.
-
-Wed Apr 9 10:19:02 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ruby.c: forgot to include <ctype.h> for isspace().
-
- * file.c: provide S_ISREG for some platforms.
-
- * io.c (Init_IO): added some $< operations.
-
- * lib/ping.rb: check host upness using TCP echo.
-
-Tue Apr 8 00:10:15 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * io.c (arg_read): bug with 0 length input.
-
-Mon Apr 7 11:36:16 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/fcntl/fcntl.c: module for fcntl constants.
-
- * eval.c (rb_alias): bug when original was an alias.
-
- * parse.y (primary): syntax to access singleton class.
-
- * eval.c (mod_public_method): method's to specify visibitily of
- the class methods. make_method_{public,private} removed.
-
-Fri Apr 4 21:43:57 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970404
-
- * gc.c (obj_free): finalizer added for experiment.
-
-Thu Apr 3 02:12:31 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_schedule): make Fatal rise on main_thread on
- deadlocks.
-
- * eval.c (thread_join): raise ThreadError instead of Fatal, in
- case of deadlock.
-
- * regex.c (re_compile_fastmap): uninitialized local variable.
-
- * parse.y (parse_regx): new option //[nes] to specify character
- code for regexp literals. Last specified code option is valid.
-
- * re.c (reg_s_new): additional 3rd argument to specify compiled
- regexp's character code.
-
- * re.c (reg_new_1): regexp character code can be specified for
- each regexp object.
-
-Wed Apr 2 14:51:06 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_create): handle uncaught throw.
-
- * eval.c (thread_create): halt on some deadlock conditions.
-
- * regex.c (is_in_list): wrong result for non-mbc higher-byte
- characters.
-
- * regex.c (re_match): wrong skip for multi-byte characters.
-
- * regex.c (re_compile_fastmap): wrong fastmap in non-mbc mode.
-
- * hash.c (Init_Hash): hash compatible features added to ENV.
-
-Tue Apr 1 15:24:06 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (obj_extend): remove Object#extend as an iterator which
- is in experimental state, since it unveils internal singleton
- classes.
-
-Mon Mar 31 14:29:39 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970331
-
-Sun Mar 30 19:40:57 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * parse.y (terms): avoided win32 gcc's optimization bug.
-
-Sat Mar 29 11:21:58 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * struct.c (make_struct): St[val,..] creates new structure.
-
-Fri Mar 28 11:24:51 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (obj_make_private): new method make_method_{public,private}
- to change visibility of singleton methods.
-
- * regex.c (re_compile_pattern): enables numeric literal >= 0x80 in
- the character class.
-
- * regex.c (re_compile_pattern): enabled numeric literal >= 0x80,
- in multibyte mode.
-
- * regex.c (re_compile_fastmap): modified exantn and charset(_not)
- to set fastmap for higher bytes properly.
-
- * regex.c (is_in_list): now matches numeric literals.
-
-Thu Mar 27 13:34:20 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * pack.c (pack_unpack): extra null byte after unpacked string.
-
-Wed Mar 26 15:20:34 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * regex.c (re_compile_pattern): register numbers must be fit in a
- byte (0 <= regnum <= 0xff).
-
- * regex.c (re_compile_fastmap): forgot to set mbchar map for
- charset_not if RE_MBCTYPE is on.
-
- * regex.c (re_compile_pattern): set list bits for multi-byte
- characters for \W, \S, \D in range expression.
-
- * object.c (obj_is_kind_of): defined that nil itself is kind of
- nil. TRUE is kind of TRUE, FALSE is kind of FALSE likewise.
- This change makes `obj.kind_of?(eval(obj.type))' always true.
-
-Tue Mar 25 14:08:43 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * lib/English.rb: provides nicer English alias for the variables.
-
- * parse.y (expr): alias $var1 $var2 makes alias of the global
- variable.
-
-Mon Mar 24 18:23:20 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970324
-
-Thu Mar 20 22:04:59 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (mod_modfunc): forget to clear method cache.
-
-Wed Mar 19 17:06:55 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (program): set methods' default private/public status
- correctly under eval().
-
- * eval.c (eval): set the_class correctly while evaluating string.
-
-Tue Mar 18 12:23:53 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (eval): yield can be called from eval().
-
- * version 1.0-970318
-
- * parse.y (program): regexp in condition expression should do
- matching operation with $_.
-
- * re.c (reg_regsub): wrong substitution.
-
-Fri Mar 14 14:36:28 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * hash.c (hash_invert): returns value to key mapping of the
- associative array.
-
- * ext/socket/extconf.rb: set environment variable SOCKS_SERVER to
- compile with libsocks.a.
-
- * ext/socket/socket.c (socks_s_open): SOCKSsocket class to access
- internet via SOCKS library.
-
- * sprintf.c (f_sprintf): unsigned formats display leading double
- dots for imaginary sequence of signed bit to the left.
-
- * sprintf.c (f_sprintf): correct width and precision formatting
- for big integers.
-
- * parse.y (yylex): enables negative hex/octal numbers and `_' in
- non-decimal numbers.
-
- * sprintf.c (f_sprintf): %u added for unsigned decimal format.
-
-Thu Mar 13 10:24:27 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sprintf.c (f_sprintf): wrong output for bignums.
-
- * array.c (ary_reverse_each): iterates in reverse order.
-
- * pack.c (pack_unpack): L unpacked signed long.
-
- * io.c (f_backquote): now returns an empty string for no output.
-
-Wed Mar 12 10:20:30 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/socks/socks.c: socket module with socks library.
-
-Mon Mar 10 20:44:22 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * re.c (reg_regsub): \& for substitution. \`, \', and \+ are
- avaiable also.
-
-Thu Mar 6 01:47:03 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970306
-
- * sample/rubydb.el (gud): ruby debugger emacs interface
-
- * lib/debug.rb: ruby debugger
-
- * parse.y (exprs): more accurate line number display.
-
-Wed Mar 5 21:31:46 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970305
-
-Tue Mar 4 12:28:32 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ruby.c (proc_options): search through RUBYPATH and PATH for
- option -S.
-
-Mon Mar 3 22:44:55 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_status): returns nil for exception terminated
- threads.
-
- * eval.c (thread_value): re-raise exceptions.
-
-Sat Mar 1 00:59:47 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_eval): restore $! value after rescue clause, to
- re-raise exceptions correctly.
-
-Fri Feb 28 16:43:38 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970228
-
-Thu Feb 27 11:23:41 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_yield_0): redo raises exception
-
- * eval.c (thread_schedule): bug in interrupt handling by rescue.
-
-Wed Feb 26 00:55:36 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (eval): forgot to restore dynamic local variable
- bindings.
-
-Tue Feb 25 11:22:08 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/aix_ld.rb: AIX dynamic load support (not tested).
-
- * eval.c (rb_eval): wrong return value for defined? super.
-
- * error.c (exception): more error check.
-
- * re.c (reg_regsub): wrong substitution when sub expanded to null
- string.
-
-Fri Feb 21 13:01:47 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970221
-
- * eval.c (f_require): volatile added. register variable was
- recycled, so that GC did not mark that variable.
-
- * object.c (Init_Object): forget to mark main object (was mostly
- ok, but made trouble with early GC.)
-
-Thu Feb 20 11:50:50 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970220
-
-Thu Feb 20 11:25:50 1997 Yasuo OHBA <jammy@shljapan.co.jp>
-
- * lib/date.rb: update
-
-Thu Feb 20 08:25:57 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (yylex): forgot tokfix() before rb_intern().
-
- * lib/tk.rb (TkVariable): give up using trace_var.
-
-Wed Feb 19 00:24:35 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970219
-
- * pack.c (pack_pack): packed by null for A specifier. must be
- space filled.
-
- * pack.c (pack_unpack): bug in skipping spaces
-
- * gc.c (xmalloc): garbage collect for every 4 Meg. allocation.
-
- * string.c (str_split_method): limit worked wrong way.
-
- * io.c (io_gets_method): misunderstand 0xff in binary files when
- $/ == nil.
-
- * re.c (reg_regsub): re-implement.
-
- * ext/socket/socket.c (thread_connect): remove O_NONBLOCK, which
- is not defined on some platform like NeXT.
-
-Mon Feb 17 13:08:30 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970217
-
- * object.c (mod_eqq): === extended for subclass check (to use case
- as typecase).
-
-Sat Feb 15 02:07:22 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * regex.c (re_compile_pattern): wrong match backref at end of pattern.
-
- * io.c (arg_read): now works beyond end of file.
-
-Thu Feb 13 16:21:24 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (expr): return/yield now accept normal argument format.
-
- * parse.y (yylex): a star in `yield *x' must not be multiplication
- operator.
-
-Wed Feb 12 15:06:44 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * time.c (time_plus): bug in simple addition.
-
- * eval.c (thread_raise): raise exceptions from outside.
-
- * eval.c (Init_Thread): Thread#alive? -- alias for Thread#status.
-
-Mon Feb 10 00:38:55 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ruby.h (Data_Make_Struct): rename macros.
-
-Sun Feb 8 11:48:13 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * io.c (f_syscall): argument offset was wrong.
-
-Fri Feb 7 18:01:17 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970207
-
- * eval.c: add volatiles to avoid variable crobbering by longjmp().
-
- * eval.c (f_raise): 1st argument can be the GlobalExit object now.
-
- * array.c (ary_unshift): no longer accept more than 2 args.
-
- * eval.c (f_raise): bug if 2nd argument is the exception.
-
-Tue Feb 4 00:37:29 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970204
-
- * eval.c (eval): check compile errors by nerrs.
-
- * eval.c (rb_eval): check syntax error by nerrs, not by the return
- value, which may be NULL.
-
- * eval.c (compile): Do not clear errinfo.
-
-Mon Feb 3 10:13:06 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (obj_extend): move real inclusion to Module#extend_object
- to allow redfinition.
-
- * object.c (Init_Object): Kernel class is now Module. Object class
- became the true root class.
-
- * object.c (obj_inspect): remove useless buffer.
-
- * hash.c (any_cmp): disable interrupts and context switching.
-
- * st.c: remove ALLOW_INTS to disable interrupt during operations.
-
-Fri Jan 31 22:10:08 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * hash.c (hash_rehash): re-register all key-value.
-
-Thu Jan 30 02:14:49 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * io.c (io_reopen): re-implement according to clone() way.
-
- * io.c (io_clone): copy IO object.
-
- * struct.c (struct_eql): compare elements by eql?.
-
- * io.c (io_mode_flags): detect "rb", "wb" etc.
-
- * io.h (FMODE_BINMODE): added.
-
- * ext/socket/socket.c (Init_socket): undef BasicSocket.new
-
- * file.c (Init_File): File.new(path[,mode])
-
- * io.c (Init_IO): IO.new(fd[,mode])
-
- * eval.c (rb_method_boundp): forgot to enable priv argument.
-
- * object.c (Init_Object): remove `=~' from Kernel class.
-
- * ext/socket/socket.c (open_inet): initialize sockaddr before
- calling bind(2).
-
- * sample/ruby-mode.el (ruby-calculate-indent): skip comment lines
-
-Wed Jan 29 18:43:22 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (Init_Thread): DEFER_INTS during initializing threads.
-
- * hash.c (Init_Hash): Hash#eql? checks for object identity.
-
- * eval.c (thread_set_critical): wrong value assigned.
-
-Mon Jan 27 16:10:51 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * io.c (io_print): remove print_on().
-
- * eval.c (f_missing): proper error message for undefined method
- without argument
-
-Sat Jan 25 23:32:32 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (str_sub_s): false alert - sub() does not modify string.
-
- * array.c (ary_times): negative multiplication detected
-
- * string.c (str_times): negative multiplication detected
-
-Fri Jan 24 10:51:39 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * time.c (time_arg): month -> 0 == "jan" == "1" == "01", little bit
- confusing but wanted to conform japanese style.
-
- * version 1.0-970124
-
-Fri Jan 24 09:52:49 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * util.c (_fixpath): supports SJIS filenames on DJGPP.
-
-Thu Jan 23 16:52:06 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * README.EXT: update. partially translated into English.
-
- * ext/extmk.rb.in: inherit $LDFLAGS to the final link.
-
- * ext/socket/socket.c (Init_socket): add various constants.
-
-Mon Jan 23 11:40:59 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * eval.c (Init_Thread): allocate main_thread first to avoid crash.
-
-Thu Jan 23 02:09:26 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * gc.c (ObjectSpace): API modified. each_object method will do all
- the iteration.
-
- * eval.c (proc_call): wrong return from nested lambda.
-
- * ext/GD/GD.c: debugged.
-
-Wed Jan 22 16:12:25 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970122
-
- * gc.c (gc_mark): forgot to mark match->str.
-
- * ext/GD/GD.c: GD interface module.
-
- * eval.c (PUSH_BLOCK): wrong value pushed as the block level.
-
-Mon Jan 20 14:01:31 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_run): no context switch in the critical section.
-
-Mon Jan 20 09:40:59 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * utils.c: supports 8+3 filenames
-
-Sat Jan 18 01:23:03 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970118
-
- * regex.c (PATFETCH): need cast to unsigned char.
-
- * io.c (io_ctl): bug in case when arg is not a string.
-
- * lib/tk.rb: forgot that Kernel#type returns the class name now.
-
- * regex.c (re_search): "abc\n" =~ "^$" should not match.
-
-Fri Jan 17 12:31:37 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970117
-
- * ruby.c (ruby_options): constant PLATFORM, which is in the {cpu}-{os}
- form, defined.
-
- * configure.in: platform information embedded in the interpreter.
-
- * regex.c (re_search): /^$/ did not match to "" by wrong exit condition.
-
- * lib/thread.rb: re-write Mutex/Queue based on Thread.critical.
-
- * eval.c (thread_set_critical): remove Thread.exclusive, add
- Thread.critical = TRUE/FALSE instead.
-
- * re.c (reg_search): re-compile pattern if needed
-
- * regex.c (PATFETCH): do translate at compile time
-
-Thu Jan 16 00:49:10 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * gc.c (gc_mark_frame): forgot to mark frame->cbase.
-
- * regex.c (re_compile_pattern): /a$|b)/ causes error.
-
- * regex.c (re_compile_pattern): /(^|b)/ causes error.
-
- * version 1.0-970116
-
- * re.c (Init_Regexp): set RE_CONTEXTUAL_INVALID_OPS flag.
-
-Tue Jan 14 02:09:06 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (proc_call): Proc#callをイテレータã¨ã—ã¦å‘¼ã‚“ã æ™‚ã«å¯¾å¿œ
-
- * configure.in: nextstep対応?
-
- * eval.c (rb_eval): a[b]=cã§ç„¡é§„ãªé…列を割り当ã¦ãªã„
-
- * eval.c (f_send): イテレータã¨ã—ã¦å‘¼ã°ã‚ŒãŸã‚‰ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã¨ã—ã¦ãƒ¡ã‚½ãƒƒ
- ドを呼ã¶ï¼Ž
-
- * string.c (str_new4): match共有用ã®ç”Ÿæˆé–¢æ•°
-
- * re.c (reg_search): matchã®å®Ÿä½“(文字列)をマッãƒã‚’行ã£ãŸæ–‡å­—列ã¨
- copy-on-writeã§å…±æœ‰
-
- * string.c (str_hash): toupperã‚’ã‹ã‘ã‚‹æ¡ä»¶ãŒé•ã£ã¦ã„ãŸ
-
- * array.c (sort_2): Fixnumã¨Stringを特別扱ã„ã—ã¦é«˜é€ŸåŒ–
-
-Mon Jan 13 11:03:53 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_create): threadãŒç”Ÿæˆã•れるã¾ã§å‰²è¾¼ã¿ã‚’設定ã—ãªã„
-
- * eval.c (Init_Thread): 割込ã¿ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã‚’100msecã«
-
-Sat Jan 11 00:17:05 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * regex.c (re_search): マッãƒã«å¤±æ•—ã™ã‚‹å ´åˆãŒã‚ã£ãŸ(本当ã«ç›´ã£ãŸã‹ï¼Ÿ)
-
- * io.c (io_ioctl,io_fcntl): 第2引数をçœç•¥å¯èƒ½ã«
-
- * io.c (io_ioctl,io_fcntl): 戻り値ãŒIOã ã£ãŸï¼Žæ•´æ•°(システムコール
- ã®æˆ»ã‚Šå€¤)ã‚’è¿”ã™ã‚ˆã†ã«ã—ãŸï¼Ž
-
- * io.c (io_ctl): å¼•æ•°ãŒæ•´æ•°ã®æ™‚ã«å¯¾å¿œ
-
- * io.c (io_fcntl): file.cã‹ã‚‰ç§»å‹•
-
-Fri Jan 10 17:01:47 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-970110
-
- * ext/socket/socket.c (thread_connect): open(connect(2))ã§ä»–ã®
- threadをブロックã—ãªã„よã†ã«
-
- * eval.c (thread_create): exitã§ãªã„ã¨ãã«exitã ã¨æ€ã„込む
-
-Mon Jan 6 17:42:22 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (str_sub_s): 文字列長より長ã„offsetã®æ¤œå‡º
-
- * regex.c (re_search): 空ã«ãƒžãƒƒãƒã™ã‚‹ãƒ‘ターン後ã®$ã§å¤±æ•—
-
-Thu Jan 2 16:36:23 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * file.c (file_reopen): Fileã®reopen(pathã¾ãŸã¯IOã§æŒ‡å®š).
-
- * io.c (io_reopen): IOã®reopen(IOã§æŒ‡å®š) -- change classã¤ã
-
-Wed Jan 1 11:09:01 1997 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * io.c (f_select): timeoutã§nilã‚’è¿”ã™
-
-Fri Dec 27 13:06:44 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * file.c (file_s_open): サブクラスã§ã¯ãã®ã‚¯ãƒ©ã‚¹ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’è¿”
- ã™ã‚ˆã†ã«ï¼Ž
-
-Fri Dec 27 08:58:27 1996 <ono@isl.nara.sharp.co.jp>
-
- * numeric.c (flo_to_s): index()を使ã‚ãªã„.strstr()ã«ï¼Ž
-
-Thu Dec 26 01:34:17 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * lib/tk.rb: placeãŒä½¿ãˆã‚‹ã‚ˆã†ã«
-
- * pack.c (endian): マクロDYNAMIC_ENDIANを指定ã™ã‚‹ã¨å®Ÿè¡Œæ™‚ã«endian
- を判定ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * eval.c (thread_alloc): åˆæœŸåŒ–忘れã®ãƒ¡ãƒ³ãƒãŒã‚ã£ãŸï¼Ž
-
-Wed Dec 25 00:33:19 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 1.0-961225
-
- * io.c (Init_IO): newを無効化
-
- * lib/tkthcore.rb: tk_call "global $foo; set foo 5"ãªã©ã‚‚ã§ãるよã†ã«
-
- * eval.c (thread_restore_context): $~, $_ã§ã‚¹ã‚¿ãƒƒã‚¯ã‚’壊ã—ã¦ã„ãŸ
-
- * process.c (rb_waitpid): threadã«ä¸€å¿œå¯¾å¿œ
-
-Tue Dec 24 15:20:58 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.4-961224
-
- * configure.in: charãŒunsignedã‹ã©ã†ã‹ã‚‚ãƒã‚§ãƒƒã‚¯
-
- * regex.c (SIGN_EXTEND_CHAR): __CHAR_UNSIGNED__ã«ã‚‚対応
-
- * pack.c (pack_unpack): 明示的ã«signed charを指定.
-
-Mon Dec 23 14:41:23 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ruby.c (load_file): 標準入力ã‹ã‚‰ã®ã‚¹ã‚¯ãƒªãƒ—トã§ä¸€æ™‚ファイルを使ã‚
- ãªã„よã†ã«
-
- * object.c (f_integer): `0x', `0'ãªã©ã§baseを解釈ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
-Fri Dec 20 01:44:39 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * Makefile.in (flock.o): flockã«å¯¾å¿œ
-
-Thu Dec 19 20:13:32 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.4-961219
-
-Wed Dec 18 00:06:48 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * glob.c (glob_filename): strrchrãŒãƒžã‚¯ãƒ­ã®å ´åˆã«å¯¾å¿œ
-
- * configure.in: <sys/select.h>ã‚’ãƒã‚§ãƒƒã‚¯
-
- * ext/kconv/kconv.c: 1.62ベースã«
-
- * ext/kconv/kconv.c: Kconvモジュール
-
- * string.c (str_substr): lenãŒå…ƒã®æ–‡å­—åˆ—ã‚ˆã‚Šé•·ã„æ™‚ã«å¯¾å¿œ
-
- * parse.y (iterator): 「$bar do .. endã€ãªã©ã¯è¨±ã•ãªã„よã†ã«
-
- * parse.y (iterator): FID(foo!,foo?)ã‚’doå½¢å¼ã®ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã«ã§ãる.
-
- * missing/flock.c (flock): lockf()を使ã£ã¦ä»£æ›¿
-
- * file.c (file_flock): flockを実装
-
-Tue Dec 17 12:13:38 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.4-961217
-
-Fri Dec 13 02:05:03 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * configure.in: RUBYLIBã®ã‚«ãƒ¬ãƒ³ãƒˆã‚’後回ã—(@mix/awk offline)
-
- * dln.c: AIXã«å¯¾å¿œã—ãŸï¼Ÿ(@mix/awk offline)
-
- * eval.c (thread_schedule): critical sectionã§ã‚‚明示的ãªã‚³ãƒ³ãƒ†ã‚­ã‚¹
- トスイッãƒã¯èµ·ããªã„ã¨ã¾ãšã„
-
- * re.c (reg_search): matchã«å¤±æ•—ã—ãŸæ™‚ã«$~ã‚’nilã«ï¼Ž
-
- * re.c (reg_search): 毎回matchを生æˆã™ã‚‹ã‚ˆã†ã«
-
-Thu Dec 12 17:03:30 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * numeric.c (flo_to_s): 2.0.to_s -> 2.0ã«
-
- * eval.c (thread_save_context): $_, $~ã‚’thread毎ã«ä¿å­˜
-
- * eval.c (thread_kill): main threadã§ã¯exit(0)
-
- * string.c (str_split_method): é–“é•ã£ãŸçµæžœã‚’è¿”ã—ã¦ã„ãŸ
-
-Thu Dec 12 15:32:48 1996 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * dir.c: CYGWIN32対応
-
- * ext/socket/socket.c: CYGWIN32対応
-
- * io.c: CYGWIN32対応
-
-Thu Dec 12 14:43:51 1996 Jun Kuroda <j_kuro@pluto.ai.kutech.ac.jp>
-
- * lib/tk.rb: wish4.2も探索候補ã«å«ã‚ã‚‹
-
- * config.guess: JCC対応
-
-Thu Dec 12 00:41:17 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.4-961212
-
- * parse.y (parse_string): """..."""ã¯ã‚„ã¯ã‚Šç„¡ãã™ã“ã¨ã«ã—ãŸ
-
- * parse.y (parse_regx): %r|...|ã§terminatorã‚’ \ ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã§ãã‚‹
- よã†ã«
-
- * signal.c (posix_signal): sigactionを使ã†signal
-
- * configure.in: posix signal/bsd signalã®æ¤œå‡º
-
-Wed Dec 11 17:47:35 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_schedule): critical sectionã§ã¯ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã‚¹ã‚¤ãƒƒ
- ãƒãŒèµ·ããªã„よã†ã«
-
- * lib/thread.rb: SharedMutexクラス
-
- * lib/jcode.rb: String#scanを使ã†ã‚ˆã†ã«
-
-Tue Dec 10 12:21:28 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.3-961210
-
- * string.c (str_split_method): æ­£è¦è¡¨ç¾ã«()ã‚’å«ã‚€æ™‚ã«ãƒã‚°
-
- * lib/jcode.rb: ã¡ã‚‡ã£ã¨ã¾ã—ã«ãªã£ãŸ
-
- * string.c (tr_setup_table): ç½®æ›æ–‡å­—ãŒçŸ­ã™ãŽã‚‹(2文字)ã®ã¨ãã®ãƒã‚°
-
-Mon Dec 9 11:38:04 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (str_scan): 文字列ã®ãƒžãƒƒãƒã‚’行ã†ï¼Žã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã¨ã—ã¦ã‚‚å‹•
- 作ã™ã‚‹
-
- * regex.c (re_copy_registers): allocatedãŒåˆæœŸåŒ–ã•れã¦ã„ãªã‹ã£ãŸ
-
- * re.c (match_to_s): $~ã®æ–‡å­—列化
-
- * re.c (match_to_a): $~ã‚’é…列化ã§ãるよã†ã«
-
- * re.c (match_getter): レジスタãŒåˆæœŸåŒ–ã•れã¦ã„ãªã‹ã£ãŸ
-
-Thu Dec 5 11:06:10 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (str_split_method): マッãƒã—ãªã‹ã£ãŸæ‹¬å¼§ã¯ç©ºæ–‡å­—列を
- pushã™ã‚‹ã¹ãã§ã¯ãªã„
-
- * string.c (str_succ): アルファベットをå«ã¾ãªã„文字ã«å¯¾å¿œ
-
-Wed Dec 4 10:48:09 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.3-961204
-
- * io.c (io_binmode): DJGPPã§ã®binmode対応
-
- * sprintf.c (f_sprintf): intã®ç¯„å›²ã®æ•°å€¤ã¯ç›´æŽ¥sprintfã§å¤‰æ›ã™ã‚‹
-
- * sprintf.c (f_sprintf): "%02s"ã«é ¼ã‚‰ãªã„
-
- * re.c (reg_search): indexã§SEGV
-
-Tue Dec 3 10:09:36 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.3-961203
-
- * ext/extmk.rb.in (install): INSTALL_DATAã‹ã‚‰INSTALLã«å¤‰æ›´
-
- * dln.c: hpux対応
-
- * string.c (str_aset_method): è² ã®å€¤ã‚’å«ã‚€ç¯„囲ã§ã‚‚例外を起ã“ã•ãªã„
-
- * array.c (ary_replace): è² ã®å€¤ã‚’å«ã‚€ç¯„囲ã§ã‚‚例外を起ã“ã•ãªã„
-
- * array.c (beg_len): beg==endã®æ™‚,長ã•0ã«
-
-Mon Dec 2 14:07:12 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * configure.in: HP shl対応
-
- * string.c (str_upto): beg > endã®æ™‚ç„¡é™ãƒ«ãƒ¼ãƒ—ã«è½ã¡ã‚‹ã®ã‚’æ­¢ã‚ãŸ
-
- * range.c (range_each): String#uptoãŒå†å®šç¾©ã•れãŸå ´åˆã«å¯¾å¿œ
-
- * string.c (str_split_method): "ABC".split(/(B)/)ãŒèª¤å‹•作
-
-Sat Nov 30 01:43:52 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_eval): undefã§SEGV
-
-Fri Nov 29 12:17:59 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sample/ruby-mode.el (ruby-parse-region): %Q#..#ãªã©ã«å¯¾å¿œï¼Žã—ã‹
- ã—ï¼ŒåŒºåˆ‡ã‚Šæ–‡å­—ãŒæ¼”ç®—å­ã§è¡Œæœ«ã«ã‚ã‚‹å ´åˆã«ã¯å¯¾å¿œã§ããªã‹ã£ãŸï¼Ž
-
- * re.c (reg_raise): 例外ã§ã‚‚スラッシュをエスケープ
-
- * re.c (reg_inspect): スラッシュをエスケープ
-
- * parse.y (parse_string): `%[QqXxRr](.)..\1'ãªã‚‹æ–‡å­—列形å¼(テスト
- 採用)
-
- * parse.y (parse_qstring): '''...'''ã®å½¢å¼
-
- * ext/dbm/dbm.c (Init_dbm): 述語key?,value?ã®è¿½åŠ 
-
- * ext/dbm/dbm.c (Init_dbm): includes->include?
-
- * hash.c (Init_Hash): 述語key?,value?,include?ã®è¿½åŠ 
-
- * eval.c (rb_eval): unlessã§else節ãŒå®Ÿè¡Œã•れãªã„(ã†ãƒ¼ã‚“)
-
- * string.c (str_sub_iter_s): イテレータブロック内ã§ãƒžãƒƒãƒãŒè¡Œã‚れ
- ã‚‹ã¨ä½ç½®ãŒãšã‚Œã‚‹(時ã«ç„¡é™ãƒ«ãƒ¼ãƒ—ã«è½ã¡ã‚‹)
-
- * string.c (str_resize): lenãŒ0ã®æ™‚sizeã®èª¿æ•´ãŒè¡Œã‚れãªã‹ã£ãŸ
-
-Thu Nov 28 00:59:54 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.3-961128
-
- * parse.y (parse_string): 3-quote styleã®æ–‡å­—列(例:"""abc"d"e""")
-
- * configure.in (EXTSTATIC): extã‚’é™çš„ã«ãƒªãƒ³ã‚¯ã™ã‚‹æ™‚ã«ã¯rubyã¯dllã‚’
- 使ã†ã‚ˆã†ã«
-
- * io.c (Init_IO): getsã®å¼•æ•°ãŒé–“é•ã£ã¦ã„ãŸ
-
- * string.c (str_each_line): RSã‚’æ˜Žç¤ºçš„ã«æŒ‡å®šã§ãるよã†ã«
-
-Wed Nov 27 12:37:46 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.3-961127
-
- * eval.c (rb_eval): iver defined? ã§selfを指定ã™ã‚‹ã®ã‚’忘れãŸ
-
- * io.c: getsç­‰ã§RSã‚’æ˜Žç¤ºçš„ã«æŒ‡å®šã§ãるよã†ã«
-
- * ext/extmk.rb.in (install): static linkã«å¤±æ•—
-
-Tue Nov 26 10:33:04 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.3-961126
-
- * string.c (str_sub_s): ç½®æ›å¾Œã®æ–‡å­—列長ã•ãŒé–“é•ã£ã¦ã„ãŸ
-
-Mon Nov 25 09:11:22 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * numeric.c (fix_rshift): 32以上ã®å³ã‚·ãƒ•トã§0ã‚’è¿”ã™ã‚ˆã†ã«(Cã®
- rshiftã¯(x>>(y%32))ã‚’è¿”ã—ã¦ã„ãŸ).
-
- * string.c (str_gsub): ç½®æ›ãŒè¡Œã‚れãªã„å ´åˆãŒã‚ã£ãŸ
-
- * string.c (str_resize): 本当ã«å¿…è¦ãªæ™‚ã ã‘realloc
-
-Thu Nov 21 04:13:21 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * configure.in (EXTSTATIC): --with-static-linked-extã§å…¨ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼
- ルをé™çš„リンクã™ã‚‹ã‚ˆã†ã«
-
- * pack.c (pack_unpack): è¡Œæœ«ã®æ”¹è¡ŒãŒãªã„時ã«ã‚‚ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã‚’スキッ
- プã™ã‚‹ã‚ˆã†ã«
-
-Wed Nov 20 21:42:51 1996 Yasuo OHBA <jammy@shljapan.co.jp>
-
- * configure.in: freebsd対応
-
-Wed Nov 20 10:24:24 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/extmk.rb.in (install): 通常リンク用ã®LDFLAGSã¨ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯ãƒª
- ンク用ã®DLDFALGSを分離
-
- * ext/extmk.rb.in (install): ã‚³ãƒ³ãƒ‘ã‚¤ãƒ«ã®æˆåŠŸã—ãŸã‚‚ã®ã‚’é™çš„リンク
- ã®ãƒªã‚¹ãƒˆã«è¿½åŠ ã™ã‚‹
-
- * eval.c (f_missing): ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ–‡å­—列表ç¾ãŒé•·ã™ãŽã‚‹æ™‚ãƒãƒƒãƒ•ã‚¡
- ã‚’æ›¸ãæ½°ã—ã¦ã„ãŸ
-
- * process.c (proc_exec_v): forkã—ãŸå¾Œä¾‹å¤–を発生ã•ã›ã¦ã¯ã„ã‘ãªã„
-
-Tue Nov 19 13:28:15 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.3-961119
-
- * eval.c (mod_method_defined): Module#method_defined? ã®è¿½åŠ 
-
- * parse.y (call_args): 引数ãŒå”¯ä¸€ã®ã‚³ãƒžãƒ³ãƒ‰ã‚³ãƒ¼ãƒ«ã§ã‚る時ã®ãƒã‚°(戻
- り値ãŒå±•é–‹ã•れã¦ã—ã¾ã†)
-
-Mon Nov 18 13:28:18 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (str_sub): 失敗ã—ãŸæ™‚ã«nilã‚’è¿”ã—ã¦ã„ãŸ
-
- * string.c (str_split_method): 検索開始ä½ç½®ãŒç§»å‹•ã—ã¦ãªã‹ã£ãŸ
-
- * ext/socket/socket.c (sock_s_getservbyaname): ã¾ã é–“é•ã£ã¦ã„ãŸ
-
- * version 0.99.3-961118
-
- * string.c (str_sub_s): å…ƒã®æ–‡å­—列を置æ›ã™ã‚‹ã®ã‚’æ­¢ã‚ãŸ
-
- * pack.c (encodes): 領域外をアクセスã—ã¦ã„ãŸ
-
-Fri Nov 15 17:10:35 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * bignum.c (big_divmod): BignumãŒå¼•æ•°ã®å ´åˆã®å¯¾å¿œå¿˜ã‚Œ
-
- * sample/ruby-mode.el (ruby-expr-beg): word?å½¢å¼ã¸ã®å¯¾å¿œãŒä¸å®Œå…¨
-
-Wed Nov 13 15:42:40 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (str_tr_s_bang): tr_sã§trãŒè¡Œã‚れã¦ã„ãªã‹ã£ãŸ
-
- * eval.c (rb_eval): autoloadクラスã®ãƒã‚§ãƒƒã‚¯
-
- * string.c (f_sub): subãŒsub!ã¨åŒã˜å‹•作ã«ãªã£ã¦ã„ãŸ
-
- * eval.c (thread_sleep): stopã¨sleepã®åˆ†é›¢
-
-Mon Nov 11 13:53:19 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.3-961111
-
- * numeric.c (fix_step): to, stepãŒæ•´æ•°ä»¥å¤–ã®å ´åˆã«å¯¾å¿œ
-
- * eval.c (rb_call): dynamic varãŒdynamic scopingã«ãªã£ã¦ã„ãŸ(ã“れ
- ã¯ã¾ãšã„)
-
- * string.c (str_chop_bang): é•·ã•0ã®æ–‡å­—列ã®chopã§ï¼Œé ˜åŸŸå¤–ã®ã‚¢ã‚¯ã‚»
- スãŒç™ºç”Ÿã—ã¦ã„ãŸï¼Ž
-
- * parse.y (yyerror): 割り当ã¦ãŸé ˜åŸŸå¤–をアクセスã—ã¦ã„ãŸ
-
-Fri Nov 8 11:54:46 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_yield): scopeã‚’heapã«ã‚³ãƒ”ー
-
-Thu Nov 7 09:56:53 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * numeric.c (num_coerce): ã¨ã‚Šã‚ãˆãšä¸¡è¾ºã‚’Floatã«å¤‰æ›ã™ã‚‹ã“ã¨ã«
-
-Wed Nov 6 10:45:13 1996 Yasuo OHBA <jammy@shljapan.co.jp>
-
- * lib/parsearg.rb: 第2引数を変更.
-
-Tue Nov 5 14:21:09 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.3-961105
-
-Sat Nov 2 01:11:40 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * bignum.c (big_pow): typo (dy -> dx)
-
- * bignum.c (big_divmod): 知らãªã„åž‹ã¯floatã«å¤‰æ›ã—ã¦ã¿ã‚‹
-
- * numeric.c (fix_lshift): 境界æ¡ä»¶ã®ãƒã‚°(è² ã«ãªã£ã¦ã„ãŸ)
-
- * bignum.c (big_pow): ç„¡é§„ãªfloatã¸ã®å¤‰æ›ã‚’ãªãã—ãŸ
-
- * math.c (math_atan2): typo(x -> y)
-
-Fri Nov 1 15:30:59 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/socket/socket.c (sock_gethostname): gethostnameãŒãªã„時ã«ã¯
- unameを使ã£ã¦ãƒ›ã‚¹ãƒˆåã‚’å¾—ã‚‹
-
- * ext/etc/etc.c (etc_getlogin): getloginãŒNULLã‚’è¿”ã—ã¦ã‚‚環境変数を
- 調ã¹ã‚‹ã‚ˆã†ã«
-
- * object.c (krn_clone): オブジェクトã®ãƒ•ラグもコピー
-
- * hash.c (rb_cmp): ãƒãƒƒã‚·ãƒ¥ã®æ¯”較を`=='ã§ãªã`eql?'ã«å¤‰æ›´
-
- * math.c (Need_Float): Float()を使ã£ã¦å¤‰æ›ã™ã‚‹
-
- * compar.c (cmp_gt): 以å‰ã®å³è¾ºã‚’è¿”ã™ä»•様ã®åæ®‹ãŒæ®‹ã£ã¦ã„ãŸ
-
-Thu Oct 31 12:55:51 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.3-961031
-
- * numeric.c (Init_Numeric): typo
-
- * eval.c (error_print): é•·ã™ãŽã‚‹trace backを途中çœç•¥ã™ã‚‹
-
- * regex.c (re_compile_pattern): 全角ã®rangeã«å¯¾å¿œ
-
-Wed Oct 30 03:03:18 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.3-961030
-
- * io.c (f_ungetc): 関数を追加
-
- * eval.c (dyna_var_asgn): return値忘れ
-
-Tue Oct 29 10:05:28 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (f_split): 関数splitを追加
-
- * eval.c (rb_call): ãƒã‚¹ãƒˆã—ãŸå¤–å´ã®ã‚¯ãƒ©ã‚¹/モジュールã®å®šæ•°ã‚’å‚ç…§
- ã§ãるよã†ã«
-
-Mon Oct 28 09:51:03 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (str_sub): offsetãŒæ–‡å­—ã®æœ«å°¾ã«ã‚る時ã®ãƒã‚§ãƒƒã‚¯
-
- * regex.c (re_match): 割り当ã¦ã‚‹ãƒ¬ã‚¸ã‚¹ã‚¿ã®æ•°ãŒ1多ã‹ã£ãŸ
-
- * io.c (io_gets): $/ = ""ã®å‹•作をperlã«åˆã‚ã›ã‚‹(awkã¨ã¯ã¡ã‚‡ã£ã¨é•
- ã†ã‚‰ã—ã„)
-
- * io.c (io_gets): $/ = nilã®æ™‚å°‘ã—高速化
-
- * string.c (str_split_method): 括弧ãŒnullã«ãƒžãƒƒãƒã—ãŸæ™‚ã«ã‚‚無視ã—
- ãªã„よã†ã«
-
- * string.c (str_split_method): 括弧ã«ãƒžãƒƒãƒã—ãŸåˆ†ã¯limitã®æ•°ã«å«ã‚
- ãªã„よã†ã«ï¼Ž
-
- * numeric.c (num_coerce_bin): coerceã®å®šç¾©ã‚’変更,2è¦ç´ ã®é…列
- [x,y]ã‚’è¿”ã™ã‚ˆã†ã«
-
- * sample/ruby-mode.el (ruby-calculate-indent): "do |aa|"ã®å¯¾å¿œã‚’改
- å–„ã—ãŸï¼Ž
-
-Sat Oct 26 01:43:51 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/marshal/marshal.c (w_object): ビルトインクラスã®ã‚µãƒ–クラスを
- æ­£ã—ã復旧ã§ãるよã†ã«
-
- * ext/marshal/marshal.c (w_object): ユーザ定義dumpã®å„ªå…ˆ
-
- * numeric.c (flo_coerce): Float()を使ã£ã¦å®šç¾©
-
- * numeric.c (Init_Numeric): Numericã®newã®undefã¯ã¾ãšã„
-
- * ext/marshal/marshal.c (w_symbol): シンボルã®å†…容(文字列)ã¯ä¸€åº¦ã—
- ã‹ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ã出ã•ãªã„.
-
- * sample/ruby-mode.el (ruby-parse-region): if/while修飾å­ã«å¯¾å¿œã—
- ãªããªã£ã¦ã„ãŸ
-
- * bignum.c (Init_Bignum): Bignum.newを除ã
-
- * eval.c (rb_eval): 引数評価後ã«ãƒ•ァイルåã¨è¡Œç•ªå·ã‚’å†è¨­å®š
-
- * numeric.c (flo_div): typo
-
- * sample/ruby-mode.el (ruby-parse-region): def /, def `ã«å¯¾å¿œ
-
-Fri Oct 25 09:26:29 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sample/ruby-mode.el (ruby-calculate-indent): "do |aa|"ã«å¯¾å¿œ
-
- * array.c (ary_aset): indexãŒfixnumã®å ´åˆã¡ã‚‡ã£ã¨é«˜é€ŸåŒ–
-
- * eval.c (thread_fd_writable): 書ãè¾¼ã¿å‰ã®selectãƒã‚§ãƒƒã‚¯
-
- * array.c (ary_assoc): ç„¡é™ãƒ«ãƒ¼ãƒ—ã«è½ã¡ãŸ
-
- * eval.c (thread_wait_for): selectãŒã‚¨ãƒ©ãƒ¼çµ‚了ã—ãŸæ™‚,linux以外ã§
- ã®å‹•ä½œãŒæ­£ã—ããªã‹ã£ãŸï¼Ž
-
-Thu Oct 24 08:26:48 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (backtrace): `$@'を文字列ã‹ã‚‰é…列ã«å¤‰æ›´ã—ãŸï¼Ž
-
- * eval.c (eval): eval中ã®ä¾‹å¤–発生ä½ç½®ã‚’ä¿å­˜ã™ã‚‹
-
- * bignum.c (bigsub): オペランドã®å¤§å°æ¯”較ã®å¤±æ•—
-
- * re.c (reg_search): 直接å‚ç…§ãŒãªã„時ã«ã‚‚`$~'ãŒã‚»ãƒƒãƒˆã•れるよã†ã«
-
-Wed Oct 23 10:40:10 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.2-961023
-
- * ext/marshal/marshal.c (r_bytes): mallocã‚’ã‚„ã‚,allocaを使ã†
-
- * sample/ruby-mode.el (ruby-calculate-indent): 括弧ã®å¯¾å¿œã‚’変更.
- ()内ã§ã¯ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆã‚’レベルをåˆã‚ã›ã‚‹ã‚ˆã†ã«
-
-Tue Oct 22 12:59:11 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * hash.c (hash_s_new): sizeを指定ã§ãるよã†ã«
-
- * ext/marshal/marshal.c (w_object): dumpã™ã‚‹æ·±ã•制é™ã‚’指定ã§ãるよ
- ã†ã«
-
- * array.c (ary_s_new): sizeを指定ã—ãŸæ™‚ã®åˆæœŸåŒ–忘れ
-
- * object.c (f_float): big2dblã®å®£è¨€å¿˜ã‚Œï¼Ž
-
- * bignum.c (bigsub): 大ãã•ã®è¿‘ã„BignumåŒå£«ã®æ¼”ç®—ã§çµæžœãŒè² ã«ãªã‚‹
- å ´åˆã«é–“é•ã„ãŒã‚ã£ãŸï¼Ž
-
- * array.c (ary_aset): ç½®æ›å…ˆã¨ç½®æ›å…ƒãŒåŒã˜é•·ã•ã®æ™‚内容を
- shift(memmove)ã—ãªã„よã†ã«ï¼Ž
-
- * ext/marshal/marshal.c (marshal_dump): ファイルフォーマットã«ãƒãƒ¼
- ジョンを埋ã‚込むよã†ã«
-
- * ext/marshal/marshal.c (tmpnam): linux-aout-dln用ã«å®šç¾©
-
-Mon Oct 21 08:40:20 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/socket/socket.c (sock_s_gethostbyname): hostentæ§‹é€ ä½“ã®æƒ…å ±
- ã‚’è¿”ã™
- (sock_s_gethostbyaddr): IPアドレスã‹ã‚‰hostent構造体を得る
- (sock_s_getservbyaname): getservbyname(3)
-
-Fri Oct 18 10:37:36 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sample/ruby-mode.el (ruby-indent-to): 移動先カラムãŒè² ã«ãªã‚‹ãƒã‚°
-
- * eval.c (compile): evalã§å…ƒã‚½ãƒ¼ã‚¹ã®è¡Œç•ªå·ã§ã‚¨ãƒ©ãƒ¼ã‚’表示ã™ã‚‹
-
-Thu Oct 17 09:52:28 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (eval): evalã§æ–‡æ³•エラーãŒã‚ã£ãŸæ™‚ã«SEGV
-
- * lib/safe.rb: Restricted.evalã®ä¸­ã ã‘制é™ã‚’加ãˆã‚‹ï¼Ž
-
- * eval.c (error_print): ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã®å‡ºåŠ›ï¼Žcallerã§ä¾‹å¤–発生ä½ç½®
- を調整ã—ãŸæ™‚ã«å•題ãŒå‡ºã‚‹(ãã‚“ãªã“ã¨ã‚’ã—ãªã‘れã°è‰¯ã„ã®ã ãŒâ€¦)
-
- * eval.c (make_backtrace): ãƒãƒƒã‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã®ç”Ÿæˆ
-
-Wed Oct 16 12:56:22 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ruby-man-0.99.2-jp/index.html: 日本語版ドキュメントã®å®Œæˆ(é•·ã‹ã£ãŸâ€¦)
-
- * re.c (reg_regcomp): $=ãŒnilã®æ™‚ã®å‡¦ç†
-
- * string.c (f_chop): $_ã«å¯¾ã™ã‚‹chop
-
-Tue Oct 15 11:04:23 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.2-961015
-
-Mon Oct 14 18:22:38 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_schedule): BOW対応.selectãŒ-1ã‚’è¿”ã—ãŸæ™‚ã«ãƒã‚°(実
- ã¯do .. whileãŒcontinueã§å…ˆé ­ã«ã‚¸ãƒ£ãƒ³ãƒ—ã™ã‚‹ã¨æ€ã„込んã§ã„ãŸï¼Žæ¡
- ä»¶ã®ç›´å‰ã ã£ãŸã®ã­ ^^);;;;;
-
- * sample/ruby-mode.el (ruby-mode-syntax-table): ?ã®syntaxãŒ"/"ã§ã¯
- ã¾ãšã„らã—ã„
-
- * hash.c (rb_hash): name conflict
-
-Fri Oct 11 00:23:05 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.2-961011
-
- * ext/marshal/marshal.c (w_object): çµå±€å‹•ã„ã¦ã„ãªã‹ã£ãŸå¾ªç’°ã‚ªãƒ–ジェ
- クト対応を外ã—ãŸï¼Ž
-
- * hash.c (rb_hash): Fixnumã¨æ–‡å­—列ã®é«˜é€ŸåŒ–
-
- * ext/marshal/marshal.c (w_object): ç„¡é§„ãªãƒ‡ãƒ¼ã‚¿ã®å‰Šé™¤(フォーマッ
- トã®éžäº’æ›æ€§)
-
- * io.c (io_readline): 戻り値ã®ä¸å‚™
-
- * ext/marshal/marshal.c (marshal_dumps): MSDOS対応
-
- * ruby.c (load_file): MSDOS対応
-
-Wed Oct 9 17:46:27 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/extmk.rb.in (install): ç„¡é§„ãªã‚³ãƒ”ーをé¿ã‘ã‚‹
-
- * string.c (str_sub_method): マッãƒãŒãªã‹ã£ãŸæ™‚ã®String#subã®å€¤ãŒ
- é•ã£ã¦ã„ãŸï¼Ž
-
- * eval.c (obj_extend): extendã—ãŸæ™‚ã«object_extendedを呼ã¶ã‚ˆã†ã«
-
-Tue Oct 8 00:55:38 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_alloc): 割当ã®å¹³å‡åŒ–
-
- * eval.c (thread_schedule): joinã®ãƒã‚°ã‚’修正
-
- * eval.c (thread_wait_for): selectã¸ã®å‰²è¾¼ã¿ãªã©ã«å¯¾å¿œ
-
- * eval.c (thread_select): linuxã®selectã®æŒ™å‹•ã«å¯¾å¿œ(timeoutãŒå¤‰åŒ–
- ã™ã‚‹)
-
-Mon Oct 7 09:47:19 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.2-961007
-
- * eval.c (PUSH_BLOCK): the_classã®ä¿å­˜ã‚’忘れã¦ã„ãŸï¼Ž
-
- * ext/dbm/dbm.c (fdbm_store): sizeã®ä¿å­˜ã™ã‚‹å ´æ‰€ãŒé–“é•ã£ã¦ã„ãŸ
-
- * ext/socket/socket.c (s_accept): thread対応ã—ã¦ã„ãªã‹ã£ãŸ
-
-Sat Oct 5 01:32:27 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * io.c (io_readchar): EOFã§ä¾‹å¤–を発生ã•ã›ã‚‹
-
-Fri Oct 4 11:59:54 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/marshal/marshal.c (w_object): Hashã¨Objectã®å¾©æ—§ã«å¿…è¦ãªãƒãƒƒ
- ã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ãƒ«ãŒæ¸¡ã•れã¦ã„ãªã‹ã£ãŸï¼Ž
-
- * variable.c (rb_path2class): ユーザ定義クラスã®å¾©æ—§ã«å¤±æ•—ã—ã¦ã„ãŸ
-
- * variable.c (rb_path2class): クラスãŒå­˜åœ¨ã—ãªã„時ã®ã‚¨ãƒ©ãƒ¼ã‚’Fatal
- ã‹ã‚‰NameErrorã¸ï¼Ž
-
- * range.c (range_s_new): first,lastãŒä¸¡æ–¹Numericã®æ™‚エラーã«ãªã£ã¦
- ã„ãŸï¼Ž
-
- * range.c: start->first, end->last
-
-Wed Oct 2 02:02:46 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * file.c: DJGPPã§chmod,chownを使ãˆã‚‹ã‚ˆã†ã«(ã£ã¦DOSã«chownãŒã‚ã‚‹ã®ã‹?)
-
- * class.c (rb_singleton_class): ビルトインクラスもextendã—ãŸã‚Šç‰¹ç•°
- メソッドを追加ã—ãŸã‚Šã§ãるよã†ã«
-
- * variable.c (rb_set_class_path): ユーザ定義ã®ãƒˆãƒƒãƒ—レベルクラスã«
- pathを設定ã—ãªã„
-
- * eval.c (eval): 例外ãŒRuntimeErrorã«åŒ–ã‘ã¦ã„ãŸ
-
- * eval.c (eval): eval中ã®ä¾‹å¤–ã®è¡¨ç¾ã®æ”¹å–„
-
- * eval.c (eval): eval_with_bindingã¨ã®ä¸€æœ¬åŒ–
-
- * eval.c (rb_eval): クラス/モジュール定義ã®ä¸­ã‹ã‚‰å®šç¾©ä¸­ã®ã‚¯ãƒ©ã‚¹/モ
- ジュールãŒå‚ç…§ã§ãるよã†ã«
-
-Tue Oct 1 01:40:09 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.2-961001
-
- * parse.y: cur_crefãŒ2度宣言ã•れã¦ã„ãŸ
-
- * signal.c (trap): SIGSEGV,SIGBUSã®ãªã„機種ã«å¯¾å¿œ
-
- * io.c (Init_IO): å¼•æ•°ã‚¿ã‚¤ãƒ—ã®æŒ‡å®šé–“é•ã„
-
-Mon Sep 30 15:28:00 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.2-960930
-
- * config.guess,config.sub: $host_osãŒæ­£ã—ã設定ã•れãªã„
-
- * eval.c (rb_eval): yieldã§æ­£ã—ããªã„selfãŒè¨­å®šã•れã¦ã„ãŸ
-
- * eval.c (ruby_run): toplevelã®ä¾‹å¤–処ç†ã®ãƒã‚°
-
-Mon Sep 30 09:13:26 1996 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * djgpp対応
-
-Sat Sep 28 02:45:10 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.2-960928
-
- * sample/ruby-mode.el (ruby-beginning-of-block): ブロックã®å…ˆé ­ã«
- 移動(æ­£ã—ãインデントã—ã¦ã„ãªã„ã¨å‹•作ã—ãªã„)
- (ruby-end-of-block): åŒä¸Š
-
- * eval.c (class_s_new): Class#newãŒã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã¨ã—ã¦å‘¼ã°ã‚ŒãŸæ™‚ã¯
- initializeもイテレータã¨ã—ã¦å‘¼ã°ã‚Œã‚‹ã‚ˆã†ã«
-
- * signal.c (sigsegv): SEGVã§backtraceを表示ã™ã‚‹ã‚ˆã†ã«
-
-Fri Sep 27 09:51:07 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.2-960927
-
- * eval.c (error_print): 引数ã®ãªã„raiseã§ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒæ­£ã—ã表示ã•
- れるよã†ã«ï¼Ž
-
- * eval.c (rb_longjmp): mesgãŒnilã®æ™‚RuntimeErrorを生æˆã™ã‚‹ï¼Ž
-
- * eval.c (f_raise): 引数ãŒãªã„時ã«å¯¾å¿œ
-
- * eval.c (thread_mark): stack上ã«ãªã„データã®ã‚¢ãƒ‰ãƒ¬ã‚¹å¤‰æ›ã‚’行ã£ã¦
- ã„ãŸï¼Ž
-
- * eval.c (Init_Thread): 割込ã¿ã®é–“éš”ãŒ1ç§’ã¨é•·ã™ãŽãŸï¼Ž
-
-Thu Sep 26 16:02:45 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_schedule): 一度ペンディングã«ãªã‚‹ã¨ãƒ•ラグãŒã‚¯ãƒªã‚¢
- ã•れã¦ã„ãªã‹ã£ãŸï¼Ž
-
- * process.c (rb_proc_exec): system/execã®å¼•æ•°ãŒç©ºæ–‡å­—列ã§ã‚ã£ãŸå ´
- åˆï¼Œä¾‹å¤–を発生ã™ã¹ãã ã£ãŸï¼Ž
-
- * config.sub/config.guess: æ–°ã—ã„ã‚‚ã®ã«ç½®ãæ›ãˆ
-
-Thu Sep 26 15:41:35 1996 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * io.c (next_argv): -i.bakã‚’BOWã¨DOSã«å¯¾å¿œï¼Ž
-
-Thu Sep 26 01:31:43 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * io.c (io_sysread): EOFã§ä¾‹å¤–
-
- * io.c (f_readline): EOFã§ä¾‹å¤–を発生ã™ã‚‹ã‚ˆã†ã«ï¼Žgetsã¯äº’æ›æ€§ã®ãŸã‚
- nilã‚’è¿”ã™ã¾ã¾ã«ã™ã‚‹
-
- * eval.c (proc_call): lambdaã‹ã‚‰ã®returnã§IN_BLOCKフラグãŒç«‹ã£ãŸã¾
- ã¾ã ã£ãŸ
-
- * eval.c (PUSH_BLOCK2): threadã«å¯¾å¿œã™ã‚‹ãŸã‚Blockを一度stackã«ã‚³ãƒ”ー
-
-Wed Sep 25 11:54:11 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (method_call): Const::method()å½¢å¼ã‚’使ãˆã‚‹ã‚ˆã†ã«ã—ã¦ã¿ãŸï¼Ž
- 引数括弧ã¯çœç•¥ã§ããªã„.
-
- * sample/test.rb: Process.killã®å­˜åœ¨ã‚’確ã‹ã‚ã¦ã‹ã‚‰ãƒ†ã‚¹ãƒˆã‚’行ã†
-
- * eval.c (eval_with_binding): 第2引数ã¨ã—ã¦binding(ã¾ãŸã¯lambda)ã‚’
- 与ãˆã‚‹ã¨ãã®ç’°å¢ƒã§evalを実行ã™ã‚‹ã‚ˆã†ã«ã—ãŸ
-
- * eval.c (f_binding): ç¾åœ¨ã®bindingã‚’è¿”ã™é–¢æ•°
-
- * eval.c: block構造体ã«the_classã‚’ä¿å­˜ã™ã‚‹ãƒ¡ãƒ³ãƒã‚’追加
-
- * process.c (Init_process): kill,wait,waitpidã‚’Processã«ç§»å‹•
-
-Tue Sep 24 02:44:43 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sample/ruby-mode.el: ã„ã‚ã„ã‚å•題ãŒå¤šã„ã®ã§ä»¥å‰ã®é«˜é€ŸåŒ–ã¯ç ´æ£„.
- 別ã®ã‚¢ãƒ—ローãƒã‚’使ã£ãŸï¼Ž
-
- * lib/tk.rb (Tk.pack): 複数ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’å—ã‘付ã‘ã‚‹pack
-
-Sat Sep 21 11:08:09 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (exprs): 空文もå—ã‘付ã‘るよã†ã«æ–‡æ³•を変更.今ã¾ã§ã¯æ”¹è¡Œ
- ã®é€£ç¶šã ã‘ãŒè¨±ã•れã¦ã„ãŸï¼Ž
-
-Fri Sep 20 11:39:18 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * Failã®å¤§åŠã‚’åå‰ã¤ã例外ã«å¤‰æ›´ï¼Ž
-
- * re.c (Init_Regexp): åå‰ã¤ã例外を導入.
-
- * eval.c (f_missing): Objectã¯inspectã—ãªã„.
-
- * object.c (inspect_i): Object#inspectã§loopã«å¯¾å¿œï¼Ž
-
- * regex.c (re_search): /^$/ãŒ""ã«ãƒžãƒƒãƒã—ãªã‹ã£ãŸï¼Ž
-
-Thu Sep 19 19:25:12 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * regex.c (re_search): /^$/ãŒéžç©ºè¡Œã«ãƒžãƒƒãƒã—ã¦ã„ãŸï¼Ž
-
-Tue Sep 17 10:28:11 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.2-960917
-
-Mon Sep 16 10:47:56 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sample/ruby-mode.el (ruby-calculate-indent): 演算å­ç¶™ç¶šã®å ´åˆã®
- 文字列ã®åˆ¤å®šã®ãƒã‚°
-
- * sample/ruby-mode.el (ruby-calculate-indent): elseãªã©ã®æ¬¡ã®è¡Œã®
- インデント計算を正ã—ã.
-
-Sat Sep 14 08:37:19 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.2-960914
-
-Fri Sep 13 08:06:03 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/socket/socket.c (tcpaddr): port番å·ã«ntohsã‚’ã¤ã‘忘れ
-
- * dln.c (link_undef): テーブルã®ç¨®é¡žãŒé–“é•ã£ã¦ã„ãŸï¼Ž
-
- * bignum.c (bigadd): 引ãç®—ãŒç™ºç”Ÿã™ã‚‹æ™‚ã«è¨ˆç®—é•ã„ãŒèµ·ãã¦ã„ãŸï¼Ž
-
- * parse.y (iter_do_block): do..endã§ã‚‚dynamic variableを.
-
- * bignum.c (big_pow): より正確ãªè¨ˆç®—ã‚’(æ•´æ•°åŒå£«ã§ã¯floatã«å¤‰æ›ã—ãª
- ã„).
-
-Thu Sep 12 13:11:55 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * variable.c (rb_set_class_path): StringクラスãŒåˆæœŸåŒ–ã•れるå‰ã«
- Stringを作ã£ã¦ã„ãŸï¼Žçµ„è¾¼ã¿ã‚¯ãƒ©ã‚¹ã«ã¯pathã¯ã„らãªã„
-
- * parse.y (yylex): 0.1ãŒ0ã«ãªã£ã¦ã„ãŸ
-
- * parse.y (yylex): 行番å·ã®ä¸æ•´åˆ
-
- * gc.c (oblist_live_obj): 今「生ãã¦ã„ã‚‹ã€å…¨éƒ¨ã®ã‚ªãƒ–ジェクトを返ã™
- イテレータ.ãã®ã‚¯ãƒ©ã‚¹(ã¾ãŸã¯ã‚µãƒ–クラス)ã®å…¨éƒ¨ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’è¿”
- ã™each_object_ofも定義ã—ãŸï¼Ž
-
- * class.c (rb_define_class_id): ç„¡é§„ãªã‚¯ãƒ©ã‚¹ã‚’割り当ã¦ã¦ã„ãŸï¼Žçµæžœ
- ã¨ã—ã¦æœªåˆæœŸåŒ–ã®ã‚¯ãƒ©ã‚¹ã‚ªãƒ–ジェクトãŒå­˜åœ¨ã—ã¦ã„ãŸï¼Ž
-
-Wed Sep 11 00:56:23 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (yylex): octalã®å®šæ•°ã®æ¤œå‡ºã‚’より正確ã«(090ã¯ã‚¨ãƒ©ãƒ¼ã¨ã‹).
-
- * bignum.c (big_minus): yãŒxより大ãã„å ´åˆã«ã‚¨ãƒ©ãƒ¼ï¼Ž
-
- * parse.y (yylex): エラー行番å·ã®è¡¨ç¤ºã‚’より正確ã«
-
- * sample/ruby-mode.el (ruby-expr-beg): 変数åãŒ1æ–‡å­—ã®æ™‚誤動作ã—ã¦
- ã„ãŸï¼Ž
-
- * sample/ruby-mode.el (ruby-calculate-indent): ?/ã§ãƒ«ãƒ¼ãƒ—ã«è½ã¡ã„
- ãŸãƒã‚°ã‚’修正.
-
- * enum.c (enum_min,enum_max): sortã®ã‚ˆã†ã«ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã¨ã—ã¦ã‚‚動作ã™
- るよã†ã«ï¼Ž
-
- * enum.c (enum_find_all): typo
-
-Tue Sep 10 12:07:12 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * node.h (nd_line): NODEã®lineã‚’flagsã«æŠ¼ã—è¾¼ã‚ã¦ã‚ªãƒ–ジェクトサイ
- ズをå°ã•ãã—ãŸï¼Žåˆ¶é™:32bit intã®ãƒžã‚·ãƒ³ã®å ´åˆï¼Œãƒ•ァイルã®è¡Œæ•°ãŒ
- 32767ã‚’è¶Šãˆã‚‹ã¨æ­£å¸¸ã«è¡¨ç¤ºã•れãªã„.
-
- * st.c: hashã¨compareã®é–¢æ•°ãƒ¡ãƒ³ãƒã‚’構造体ã«ãƒ‘ック,クラス的ãªä½¿ã„
- 方を行ã†ï¼Ž1 tableã‚ãŸã‚Š4 byteã®ç¯€ç´„.
-
-Mon Sep 9 16:35:54 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * file.c (file_truncate): æä¾›ã•れãªã„時ã«ã¯ç‰¹åˆ¥ãªä¾‹å¤–を発生ã™ã‚‹ã‚ˆ
- ã†ã«ï¼Ž
-
- * eval.c (Init_Proc): ä¸é©åˆ‡ãªä½ç½®ã®local-jumpを例外ã«ï¼Ž
-
-Sat Sep 7 17:06:15 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (proc_call): ã¾ã ã‚¹ã‚³ãƒ¼ãƒ—ãŒã‚¹ã‚¿ãƒƒã‚¯ä¸Šã«ã‚る時ã«ã¯å±€æ‰€è„±å‡º
- を有効ã«ã™ã‚‹ï¼Žã“れã§ï¼Œprocを生æˆã—ã¦callã™ã‚‹ã“ã¨ã¯ï¼Œã‚¹ã‚³ãƒ¼ãƒ—を脱
- 出ã—ãªã„é™ã‚Šï¼Œyieldã¨åŒã˜æ„味をæŒã¤ã“ã¨ã«ãªã‚‹ï¼Ž
-
-Fri Sep 6 13:30:59 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sample/ruby-mode.el (ruby-indent-to): インデントãŒå¤‰ã‚らãªã„時ã«
- ã¯ãƒãƒƒãƒ•ァを変更ã—ãªã„.
- (ruby-calculate-indent): ã¾ãšæ–‡å­—åˆ—ã®å†…部ã‹åˆ¤æ–­ã—ã¦ã‹ã‚‰ï¼Œå‰ã®è¡Œ
- ã‹ã‚‰ãƒ‘ーズを行ã†ï¼ŽdefunãŒå¤§ãããªã£ãŸæ™‚ã®é«˜é€ŸåŒ–.
- (ruby-in-string-p): 文字列ã®å†…部ã‹ã©ã†ã‹ã‚’判断ã™ã‚‹é–¢æ•°(以å‰ã®
- parseã‹ã‚‰åˆ†é›¢)
- (ruby-parse-region): 文字列ã«å¯¾ã™ã‚‹å‡¦ç†ã‚’ã¯ãšã™ï¼Ž
- (ruby-beginning-of-block): ブロックã®å…ˆé ­ã«
- (ruby-end-of-block): ãƒ–ãƒ­ãƒƒã‚¯ã®æœ«å°¾ã«(é…ã„…)
-
-Thu Sep 5 14:23:07 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * file.c (file_s_split): [dirname,basename]ã«splitã™ã‚‹ï¼Ž
-
- * eval.c (rb_eval): evalã®ä¸­ã§ã‚‚定数ã®å€¤ãŒæ­£ã—ããªã‚‹ã‚ˆã†ã«ï¼Žã“れã§
- 定数ã«é–¢ã—ã¦ã¯é™çš„ãªã‚¹ã‚³ãƒ¼ãƒ—ãŒä¿è¨¼ã•れるよã†ã«ãªã£ãŸï¼Ž
-
- * st.c (rehash): ãƒãƒƒã‚·ãƒ¥æ‹¡å¤§ã®ç³»æ•°ã‚’2ã‹ã‚‰1.79ã«ï¼Žå‰²ç®—ãŒã‚ˆã‚Šè‰¯ã„値
- ã‚’è¿”ã™ã‚ˆã†ã«ï¼Ž
-
-Thu Sep 5 00:32:07 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (class_superclass) クラスã®ã‚¹ãƒ¼ãƒ‘ークラスを返ã™ãƒ¡ã‚½ãƒƒãƒ‰ï¼Ž
-
-Wed Sep 4 16:54:56 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * random.c (f_rand): Bignumã‚„longã®ç¯„囲を越ãˆã‚‹Floatã«å¯¾ã™ã‚‹ä¹±æ•°ã‚‚
- 発生ã§ãるよã†ã«ï¼Ž
-
- * struct.c (struct_alloc): Fatalã§ã¯ãªã例外を発生ã•ã›ã‚‹ã‚ˆã†ã«(通
- 常ã®ä½¿ç”¨ã§ç™ºç”Ÿã—ã†ã‚‹).
-
- * struct.c (struct_s_members): Structã®ç‰¹ç•°ãƒ¡ã‚½ãƒƒãƒ‰ã§ã¯ãªã,生æˆ
- ã•れãŸStructクラスã®ç‰¹ç•°ãƒ¡ã‚½ãƒƒãƒ‰ã«ã—ãŸï¼Ž
-
- * st.c (st_init_table): ruby専用ã«ãƒ‘ラメタを固定ã«ã—ãŸ(サイ
- ã‚ºãŒæ¸›ã£ãŸ)
-
-Mon Sep 2 11:37:59 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * array.c (ary_shift): capaãŒã‚ã¾ã‚Šã«ã‚‚大ãã„æ™‚ã«ã¯é ˜åŸŸã‚’REALLOC
- (ary_pop): åŒä¸Š
-
- * string.c (str_inspect): multibyte character 対応ã«ãƒŸã‚¹ï¼Ž
- (str_inspect): unsigned charã«ã—ãªã„ã¨ç¬¦å·å±•é–‹ã•れã¦ã—ã¾ã†
-
- * parse.y (primary): `::'ã‚’primaryã«ç§»å‹• Foo::Bar.BazãŒã‚¨ãƒ©ãƒ¼ã«ãª
- らãªã„よã†ã«ï¼Ž
-
- * parse.y (primary): オペレータ形å¼ã®ç‰¹ç•°ãƒ¡ã‚½ãƒƒãƒ‰ãŒå®šç¾©ã§ããªã„
-
- * random.c (f_rand): maxãŒ0ã®æ™‚ã«å¯¾å¿œ
-
- * io.c (io_printf): 関数を定義ã—ã¦ã„ãŸãŒã‚¤ãƒ³ã‚¿ãƒ—リタã«ç™»éŒ²ã—ã¦ã„ãª
- ã‹ã£ãŸï¼Ž
-
- * file.c (file_s_basename): 第2引数ãŒç„¡ã„時ã«ã‚¨ãƒ©ãƒ¼ï¼Ž
-
-Thu Aug 29 10:49:40 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (expr): ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã®æ–°å½¢å¼ã«ã€Œmethod do .. endã€å½¢å¼ã‚’採
- 用ã—ãŸï¼Žã‚‚ã¡ã‚ん昔ã®å½¢å¼ã‚‚有効.
-
- * sample/ruby-mode.el (ruby-calculate-indent): endã®æ•°ã®æ–¹ãŒå¤šã„å ´
- åˆã«ã‚‚エラーを起ã“ã•ãªã„よã†ã«ï¼Ž
-
-Wed Aug 28 09:41:36 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * numeric.c (upto,downto,step,times): 対象ãŒfixnumã®ç¯„囲を越ãˆã¦ã‚‚
- 動作ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
-Mon Aug 26 10:04:37 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * missing/setenv.c (envix): typo(missing `== 0' for memcmp)
-
- * dir.c (dir_foreach): foreach(dir open -> read loop -> closeã¾ã§)
-
- * io.c (io_foreach): foreach(file open -> read loop -> closeã¾ã§)
-
- * Fatalã®ã†ã¡æ•æ‰å¯èƒ½ãªã„ãã¤ã‹ã‚’例外ã«ï¼Ž
-
-Sat Aug 24 23:56:37 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * bignum.c (bigdivmod): FIX2INT -> INT2FIX 大間é•ã„
-
-Fri Aug 23 18:13:03 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * regex.c (re_free_registers): allocateã—ã¦ã„ãªã„時ã«ã¯å½“ç„¶ free
- ã—ã¦ã¯ã„ã‘ãªã„.
-
-Thu Aug 22 01:20:35 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_create): 外å´ã‹ã‚‰å¼·åˆ¶çµ‚了ã•ã›ã‚‰ã‚ŒãŸthreadã¯
- cleanupã™ã‚‹å¿…è¦ãŒç„¡ã„.
-
-Wed Aug 21 09:57:28 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_create): threadを終了ã•ã›ãŸå¤§åŸŸè„±å‡ºã®æƒ…報を
- main_threadã«æ¸¡ã™ã‚ˆã†ã«ï¼Ž
-
- * parse.y (call_args): æœ€çµ‚å¼•æ•°ã«æ‹¬å¼§ã‚’çœç•¥ã—ãŸãƒ¡ã‚½ãƒƒãƒ‰å‘¼å‡ºã—ã‚’ç½®
- ã‘るよã†ã«(例: print foo bar, baz == print(foo(bar,baz)))
-
-Tue Aug 20 13:37:16 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (masign): 多é‡ä»£å…¥ã¨rest引数ã®å‹•作をåˆã‚ã›ã¦ç©ºã®é…列を代
- å…¥ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * parse.y (arg): defined?ã®å¼·åº¦ã‚’ã‚‚ã†ã¡ã‚‡ã£ã¨å¼·ã
-
- * eval.c (error_print): -wã§ä¾‹å¤–åも表示ã™ã‚‹ã‚ˆã†ã«
-
- * eval.c (rb_eval): æ–°æ§‹æ–‡ã«å¯¾å¿œ
- (handle_rescue): æ•æ‰ã™ã‚‹ä¾‹å¤–ã‚’ kind_of? ã§åŒå®š
-
- * parse.y (primary): rescueã®æ§‹æ–‡ã‚’変更(åŒå®šå¼•æ•°ã®è¿½åŠ ï¼Œè¤‡æ•°rescue)
-
- * Fail()ã®ã‹ãªã‚Šã‚’é©å½“ãªä¾‹å¤–を使ã†ã‚ˆã†ã«
-
- * eval.c (thread_interrupt): Interrupt(今ã¯non-local jump)ã¯
- main-threadã«é€ã‚‰ã‚Œã‚‹ã‚ˆã†ã«ï¼Ž
-
- * eval.c (rb_longjmp): $! ã®å†…容を文字列ã‹ã‚‰ä¾‹å¤–クラスã«å¤‰æ›´
- (rb_raise): rb_fail ã‹ã‚‰å称変更
- (rb_interrupt): 例外化
- (rb_exit): 例外化
-
- * error.c (Init_Exception): ä¾‹å¤–ã‚¯ãƒ©ã‚¹ã®æ–°è¨­(文字列ã®ã‚µãƒ–クラス)
-
-Mon Aug 19 19:40:52 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * signal.c (trap): å¤ã„ãƒãƒ³ãƒ‰ãƒ©ã‚’è¿”ã™ã‚ˆã†ã«ï¼Ž
-
-Wed Aug 14 00:07:18 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_trap_eval): ãƒãƒ³ãƒ‰ãƒ©ã®ãŸã‚ã«threadã‚’forkã™ã‚‹ã“ã¨ã‚’æ­¢
- ã‚ãŸï¼Ž
-
- * eval.c (thread_mark): thread毎㮠$!, $@ をマークã—忘れ
-
- * ext/dbm/dbm.c (fdbm_delete): イテレータã¨ã—ã¦å‘¼ã°ã‚ŒãŸå ´åˆï¼Œè¦ç´ 
- ãŒç„¡ã‘れã°ãƒ–ロックを評価ã™ã‚‹ï¼Ž
-
- * hash.c (hash_delete): イテレータã¨ã—ã¦å‘¼ã°ã‚ŒãŸå ´åˆï¼Œè¦ç´ ãŒç„¡ã‘れ
- ã°ãƒ–ロックを評価ã™ã‚‹ï¼Ž
-
- * array.c (ary_delete): イテレータã¨ã—ã¦å‘¼ã°ã‚ŒãŸå ´åˆï¼Œè¦ç´ ãŒç„¡ã‘れ
- ã°ãƒ–ロックを評価ã™ã‚‹ï¼Ž
-
- * eval.c (rb_interrupt): SIGINTã®ãƒ‡ãƒ•ォルトをexitã‹ã‚‰ç‰¹åˆ¥ãªå¤§åŸŸè„±
- 出ã«ï¼Žã‚„ã¯ã‚Šå‰²ã‚Šè¾¼ã¾ã‚ŒãŸä½ç½®ã®è¡¨ç¤ºãŒç„¡ã„ã®ã¯å¯‚ã—ã„ã®ã§ï¼Ž
-
-Tue Aug 13 01:34:00 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_exit): sub-thread内ã§ã®exitã‚‚statusã‚’ä¿å­˜ã™ã‚‹ã‚ˆã†ã«
- (thread_create): 自thread内ã®exitã«å¯¾å¿œ
-
- * signal.c (sighandle): SIGINTã®ãƒ‡ãƒ•ォルトãƒãƒ³ãƒ‰ãƒ©ã¯exitã™ã‚‹ã‚ˆã†ã«
- (以å‰ã¯ä¾‹å¤–を発生ã—ã¦ã„ãŸ).
-
- * 例外ã®ä¸€éƒ¨ã‚’Fatalã«ï¼Ž
-
- * string.c (str_aset): 文字列ã®ç½®æ›ã®å¯¾è±¡ãŒéƒ¨åˆ†æ–‡å­—列ã§ãªã‹ã£ãŸæ™‚,
- 例外を発生ã•ã›ãªã„よã†ã«
-
- * eval.c (proc_call): Procã®ä¸­ã‹ã‚‰break/nextã¯é€šã—,他ã®ã‚‚ã®ã¯é€šã•
- ãªã„よã†ã«
-
-Mon Aug 12 14:15:09 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * object.c (krn_type): 文字列を返ã™
-
- * eval.c (thread_create): sub-thread内ã§ã®exitã«å¯¾å¿œ
-
- * numeric.c (fix_type): 文字列を返ã™
-
- * io.c (f_p): デãƒãƒƒã‚°ç”¨ãƒ‡ãƒ¼ã‚¿è¡¨ç¤ºãƒ¡ã‚½ãƒƒãƒ‰
-
- * eval.c (f_missing): nil/TRUE/FALSEを特別扱ã„
-
- * string.c (str_inspect): é•·ã„æ–‡å­—列を短縮表示.inspectã®åƒãã‚’
- human readable stringã®ç”Ÿæˆã«çµ±ä¸€(re-generatable string ã¯æ­£å¼ã«
- ç„¡ããªã£ãŸ).
-
-Sat Aug 10 16:54:21 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * object.c (Init_Object): kernel/nil/false/trueã®ã‚¯ãƒ©ã‚¹åを変更(å°
- 文字ã«),rubyスクリプトã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„よã†ã«ï¼Ž
-
- * eval.c (rb_eval): CONSTANTã®ã‚¢ã‚¯ã‚»ã‚¹å…ˆã‚’å˜ç´”化.crefを使ã‚ãªã„.
-
- * eval.c (f_eval): 特異メソッド内ã§ã‚‚定数ã®å€¤ãŒæ­£ã—ããªã‚‹ã‚ˆã†ã«
-
-Fri Aug 9 12:23:17 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * array.c (ary_concat): append -> concat Stringã«åˆã‚ã›ãŸ
-
- * parse.y (yylex): `$;'ãŒä½¿ãˆãªã‹ã£ãŸï¼Ž
-
- * array.c (ary_push_method): 複数引数をå—ã‘付ã‘るよã†ã«ï¼Ž
- (ary_unshift): 複数引数をå—ã‘付ã‘るよã†ã«ï¼Ž
-
- * io.c (io_popen): IO.popenã§command pipeãŒé–‹ã‘るよã†ã«ï¼Ž
-
- * object.c (Init_Object): Kernelã¨Nilã‚’ruby scriptã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ã
- ãªã„よã†ã«ï¼Ž
-
-Thu Aug 8 01:21:47 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * object.c (f_integer): æ•´æ•°ã¸ã®å¤‰æ›é–¢æ•°
- (f_float): 実数ã¸ã®å¤‰æ›é–¢æ•°
- (f_string): 文字列ã¸ã®å¤‰æ›é–¢æ•°
- (f_array): é…列ã¸ã®å¤‰æ›é–¢æ•°
-
- * bignum.c (big_to_i): FIXNUMã®ç¯„囲ã§ãªã„時ã¯Bignumã®ã¾ã¾è¿”ã™ã‚ˆã†
- ã«å¤‰æ›´ï¼Ž
-
-Wed Aug 7 09:28:38 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99.1-960807
-
- * parse.y (mlhs): 「*foo = 1,2,3ã€ã‚¿ã‚¤ãƒ—ã®å¤šé‡ä»£å…¥ã‚‚å¯èƒ½ã«ï¼Ž
-
- * object.c (Init_Object): クラスTrue/Falseã‚’ruby scriptã‹ã‚‰ã‚¢ã‚¯ã‚»
- スã§ããªã„よã†ã«ï¼Ž
-
- * object.c (nil_inspect): inspect表ç¾ã¯"nil"ã«
-
- * io.c (io_print): nilã®printã‚’nilã«ï¼Ž
-
- * object.c (nil_to_s): nilã®æ–‡å­—列表ç¾ã‚’""ã«ï¼Ž
-
-Tue Aug 6 01:12:32 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * dir.c (dir_s_open): file descripterãŒè¶³ã‚Šãªã„時ã«ã¯gcã—ã¦ã‹ã‚‰ã‚‚
- ã†ä¸€åº¦openã—ã¦ã¿ã‚‹ï¼Ž
-
- * io.c (rb_fopen): ã™ã¹ã¦ã®fopen()ã«ã¤ã„ã¦file descripterãŒè¶³ã‚Šãª
- ã„æ™‚ã«ã¯gcã—ã¦ã‹ã‚‰ã‚‚ã†ä¸€åº¦openã—ã¦ã¿ã‚‹ï¼Ž
-
- * ext/socket/socket.c (Init_socket): 定数ã®è¿½åŠ ï¼Ž
-
- * sample/ruby-mode.el (ruby-indent-to): インデント後ã®ã‚«ãƒ¼ã‚½ãƒ«ä½ç½®
- ã®èª¿æ•´ã‚’æ­£ã—ã.
-
- * gc.c (gc): 割込ã¿ãƒã‚§ãƒƒã‚¯ã‚’行ã‚ãªã„(Cコードã®ä¸­ã§å®‰å¿ƒã—ã¦
- malloc()ãŒä½¿ãˆãªããªã‚‹ã®ã§).
-
- * st.c (call_hash_func): signalã¨threadã«ã‚ˆã‚‹å‰²è¾¼ã¿ã«å¯¾å¿œï¼Ž
-
- * sig.h (DEFER_INTS): 割込ã¿ç¦æ­¢åŒºé–“ã®æŒ‡å®š
-
- * eval.c (f_require): threadã«ã‚ˆã‚‹requireã®ç«¶åˆã«å¯¾å¿œ(最åˆã®
- requireãŒçµ‚了ã™ã‚‹ã¾ã§ä»–ã®threadã¯å¾…ã¤).
-
- * bignum.c (str2inum): 0x80000000ã®å€¤ãŒè² ã«ãªã£ã¦ã„ãŸ
-
- * sprintf.c (f_sprintf): 文字列末尾,行末ã®å˜ç‹¬ã®`%'ã«å¯¾å¿œ
-
- * bignum.c (big_cmp): 比較ã®çµæžœãŒé€†ã«ãªã‚‹æ™‚ãŒã‚ã£ãŸï¼Ž
-
-Mon Aug 5 10:58:13 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * process.c (proc_exec_v): 例外ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’分ã‹ã‚Šã‚„ã™ã.
-
- * ext/dbm/dbm.c (fdbm_store): nilã‚’æ ¼ç´ã™ã‚‹ã¨è¦ç´ ã®å‰Šé™¤ã«ãªã‚‹
-
- * ext/dbm/dbm.c: サイズをキャッシュ.
-
-Sat Aug 3 01:52:52 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_fail): `fail'ãŒå¼•æ•°ç„¡ã—ã§å‘¼ã°ã‚ŒãŸæ™‚ã ã‘以å‰ã®`$@'ã‚’ä¿
- å­˜ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * eval.c (f_fail): frameã®èª¿æ•´
-
-Fri Aug 2 11:26:21 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/socket/socket.c (bsock_setopt): valã¨ã—ã¦TRUE/FALSE/Fixnumã‚‚
- å—ã‘付ã‘るよã†ã«ï¼Ž
-
- * ext/socket/socket.c (Init_socket): SO_REUSEADDRç­‰ã®å®šæ•°ã®è¿½åŠ 
-
- * ext/md5/md5init.c: md5モジュール(åˆã®è¤‡æ•°ãƒ•ァイルã‹ã‚‰ãªã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼
- ルã§ã‚‚ã‚ã‚‹)
-
- * ruby.h (Make_Data_Struct): Data: objectã®instanceå¤‰æ•°ã«æ ¼ç´ ->
- Dataåž‹ã®Objectã«(Dir,Time,Proc,Thread,DBM)
-
-Thu Aug 1 11:38:44 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/dbm/dbm.c (fdbm_store): valueãŒæ–‡å­—ã§ç„¡ã„時ã«å¯¾å¿œ
-
-Wed Jul 31 10:53:42 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/socket/socket.c (open_inet): htonsãŒå¿…è¦ã§ã‚ã£ãŸ
- (tcpaddr): ntohlã§å¤‰æ›ã—ãŸ
-
- * process.c (rb_proc_exec): execvp -> execv
-
-Tue Jul 30 17:48:33 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c: `$?'ã‚’thread localã«
-
- * Makefile.in (install): install時ã«stripを行ã†
-
- * configure.in: install時ã®stripã®æ¤œå‡º
-
- * configure.in: NEXTSTEP対応
-
- * version 0.99.1-960730
-
-Tue Jul 30 16:40:35 1996 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
-
- * dln.c (dln_load): NeXT dln(mach-o)対応.configureã¯æœªå¯¾å¿œ
-
-Tue Jul 30 09:46:51 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * process.c (f_system): 複数引数もã¨ã‚Œã‚‹ã‚ˆã†ã«
-
- * process.c (f_exec): 複数引数もã¨ã‚Œã‚‹ã‚ˆã†ã«
-
- * array.c (ary_append): é…列(ã¾ãŸã¯Enum)ã®è¦ç´ ã‚’破壊的ã«è¿½åŠ 
-
- * array.c (ary_plus): Enumã¯ãã®è¦ç´ ã‚’追加
-
- * file.c (file_s_open): File.openを追加
-
- * struct.c (struct_new): FIX2INTを忘れã¦ã„ãŸ
-
- * file.c (Init_File): exists? -> exist?
-
- * object.c (obj_is_kind_of): is_kind_of? -> kind_of?, is_a?
-
- * object.c (obj_is_instance_of): is_instance_of? -> instance_of?
-
-Mon Jul 29 16:40:02 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (parse_regx): å¼å±•開を行ã£ãŸå ´åˆï¼Œcasefoldã®è¨­å®šãŒã§ãã¦
- ã„ãªã‹ã£ãŸï¼Ž
-
- * object.c (true_type): TRUE/FALSEã«typeを実装.
-
- * parse.y (read_escape): 3文字以内ã®octalã«å¯¾å¿œ(\0ã¨ã‹)
-
-Fri Jul 26 00:31:45 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * array.c (ary_reverse_bang): in-placeã§é…列をå転ã•ã›ã‚‹
- (ary_sort_bang): in-placeã§sortã™ã‚‹
- (ary_sort): sortã—ãŸé…列を返ã™ã‚ˆã†ã«
- (ary_delete_at): 指定ã—ãŸä½ç½®ã®è¦ç´ ã‚’削除ã™ã‚‹
-
- * eval.c (rb_call): stackæ·±ã•ãƒã‚§ãƒƒã‚¯ã‚’毎回ã¯è¡Œã‚ãªã„よã†ã«
-
- * error.c (Warning): 実行中ã®warningãŒè¡¨ç¤ºã•れã¦ã„ãªã‹ã£ãŸ
-
- * eval.c (compile): 例外発生を分離.
-
- * eval.c (f_eval): 変数rb_in_evalã‚’æ­£ã—ã管ç†ã™ã‚‹ã‚ˆã†ã«
-
- * ext/dbm/dbm.c (fdbm_store): æ ¼ç´ã™ã‚‹keyを文字列ã«å¤‰æ›
-
- * eval.c (rb_call): ç„¡é™å†å¸°ã®ãƒã‚§ãƒƒã‚¯ã‚’大域脱出を行ã†C methodã«ã‚‚
- 対応ã•ã›ãŸï¼Žthreadã®stackæ·±ã•ãƒã‚§ãƒƒã‚¯ãƒ«ãƒ¼ãƒãƒ³ã‚’æµç”¨ï¼Ž
-
- * parse.y (yylex): 第1引数ã®unary -/+ã®åˆ¤å®šãŒé–“é•ã£ã¦ã„ãŸï¼Ž
-
- * parse.y (yylex): unary +ã§æ•°å­—を余計ã«èª­ã‚“ã§ã„ãŸ(ex. +5 -> 55)
-
-Thu Jul 25 12:15:04 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (yylex): 曖昧ã§ãªã„引数ã«å¯¾ã—ã¦è­¦å‘Šã‚’出ã—ã¦ã„ãŸï¼Ž
-
- * eval.c (iterator_p): 引数ã§å‘¼ã‚“ã§ã‚‚æ­£ã—ã„çµæžœã‚’è¿”ã™ã‚ˆã†ã«ï¼Ž
-
- * parse.y: break/next/redo/retryã®ãƒ¡ã‚½ãƒƒãƒ‰åŒ–.
-
- * sample/ruby-mode.el (ruby-calculate-indent): nestã®ãƒã‚§ãƒƒã‚¯ãƒŸã‚¹
-
- * sample/ruby-mode.el (ruby-parse-region): 予約語ã®ãƒã‚§ãƒƒã‚¯ã‚’強化
-
- * parse.y (primary): unless/untilã®å¾©æ´»
-
-Tue Jul 23 18:50:10 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * array.c (Array#empty?), Hash.c (Hash#empty?), ext/dbm/dbm.c (DBM#empty?):
- 空ã®åˆ¤å®šè¿°èªž
-
- * eval.c (f_unless): ifã®é€†ã‚’ã™ã‚‹ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿
-
- * eval.c (f_until): whileã®é€†ã‚’ã™ã‚‹ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿
-
- * parse.y: notã®å„ªå…ˆé †ä½ã‚’and/orより高ã
-
- * parse.y (expr): `!'を引数括弧をçœç•¥ã—ãŸcallã§ã‚‚有効ã«
-
-Mon Jul 22 10:15:38 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99-960722
-
- * array.c (ary_print_on): OFSã®NILãƒã‚§ãƒƒã‚¯ãŒä¸å®Œå…¨
-
- * ruby.c (load_file): 標準入力ã‹ã‚‰ã®ã‚¹ã‚¯ãƒªãƒ—トãŒç©ºã®æ™‚ã«å¯¾å¿œï¼Ž
-
- * ruby.c (proc_options): -wã§ã¯å¼•æ•°ç„¡ã—ã®æ™‚ã«ã¯æ¨™æº–入力ã‹ã‚‰ã‚¹ã‚¯ãƒª
- プトをã¨ã‚‹(-vã§ã¯ãŸã‚“ã«çµ‚了ã™ã‚‹).
-
- * array.c (ary_compact): nilã®è¦ç´ ã‚’å–り除ãメソッド
-
- * array.c (ary_nitems): nilã§ãªã„è¦ç´ ã‚’æ•°ãˆã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
-
-Sun Jul 20 00:51:53 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ruby.c (proc_options): -w optionを追加
-
- * parse.y: {}ãŒé–‰ã˜ã¦ã„ãªã„時ã«ã¯å±•é–‹ã—ãªã„文字列を
-
-Fri Jul 19 16:16:05 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99-960719
-
- * lib/find.rb: 石塚版(pruneã®æ‹¡å¼µä»˜ã)
-
- * file.c (test_l): lstatã§èª¿ã¹ãªã„ã¨ã­ï¼Ž
-
- * eval.c (f_throw): 第2引数をçœç•¥å¯èƒ½ã«ï¼Ž
-
- * parse.y (str_extend): {}ã®ãƒã‚¹ãƒˆã«å¯¾å¿œ
-
-Thu Jul 18 18:25:46 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99-960718
-
- * parse.y (str_extend): 文字列中ã®å¼å±•é–‹ã« \" ' ` / ã‚’å«ã‚€äº‹ãŒã§ã
- るよã†ã«ï¼Ž
-
-Tue Jul 16 15:55:31 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sample/ruby-mode.el (ruby-parse-region): æ­£è¦è¡¨ç¾å†…ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—
- ã«å¯¾å¿œ
-
- * version 0.99-960716
-
-Fri Jul 12 10:06:19 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * io.c (f_select): 引数ã®close check.
-
- * ruby.c (load_file): #!行ã®å¼•æ•°ãƒã‚§ãƒƒã‚¯ã‚’第1引数ã«é™å®š(実をã„ã†ã¨
- DOS改行対策)
-
-Wed Jul 10 17:18:35 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99-960710
-
- * time.c (time_s_timegm/time_s_timelocal): 時間を生æˆã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
-
-Mon Jun 17 15:59:20 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99-960617
-
- * parse.y (yyerror): エラー表示ã®ç°¡ç•¥åŒ–.
-
-Wed Jun 12 14:11:01 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * signal.c (rb_trap_exit): trap 0ã¯threadを生æˆã›ãšã«å‡¦ç†ã™ã‚‹ï¼Ž
-
-Fri Jun 7 10:17:01 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * array.c/hash.c (indexes): é…列1引数ã®ãƒ‘ターンを無ãã—ãŸï¼Žé…列ã®
- å ´åˆã¯`*ary'を使ã£ã¦ã‚‚らãŠã†ï¼Ž
-
- * eval.c (thread_wait_threads): main_threadãŒçµ‚了ã™ã‚‹å‰ã«ä»–ã®
- threadã‚’å¾…ã¤(強制的ã«ã¯çµ‚了ã•ã›ãªã„).
- (ruby_run): ä»–ã®threadã‚’å¾…ã£ã¦ã„ã‚‹é–“ã«ã‚·ã‚°ãƒŠãƒ«ãŒæ¥ãŸã‚‰ï¼Œå…¨thread
- を強制終了ã•ã›ã‚‹ï¼Ž
-
- * eval.c (rb_fail): メソッドåã‚’`$!'ã«åŸ‹ã‚込む.
-
- * eval.c (thread_create): main_threadã®ã‚³ãƒ³ãƒ†ã‚¯ã‚¹ãƒˆãŒã‚»ãƒ¼ãƒ–ã•れãª
- ã„å ´åˆãŒã‚ã£ãŸï¼Ž
-
- * process.c (f_sleep): 時間を指定ã›ãšï¼ŒthreadãŒã²ã¨ã¤ã—ã‹ãªã„状æ³
- ã«ã‚‚対応.
-
- * eval.c (thread_create): create後,fnを呼ã³å‡ºã™å‰ã«context switch
- ãŒèµ·ãã‚‹ã¨é•ã†contextã§fnãŒå®Ÿè¡Œã•れã¦ã—ã¾ã†ãƒã‚°ï¼Ž
-
-Mon Jun 3 08:03:17 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * struct.c (struct_s_def): メンãƒã®æŒ‡å®šã‚’文字列,シンボル(FIXNUM)
- åŒæ–¹ã§å¯èƒ½ã«ã—ãŸï¼Ž
-
- * ext/etc/etc.c (Init_etc): 構造体オブジェクトをGCã‹ã‚‰ä¿è­·ã—ãŸï¼Ž
-
- * error.c (rb_sys_fail): nil/FALSEを引数ã¨ã—ã¦å—ã‘付ã‘るよã†ã«ï¼Ž
-
-Thu May 30 16:19:08 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_select): EINTRã«å¯¾å¿œï¼Ž
-
-Wed May 29 11:04:51 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (f_catch): catch/throwを実装ã—ãŸï¼Ž
-
-Tue May 28 13:30:52 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99-960528
-
- * eval.c (thread_cleanup): main threadãŒçµ‚了ã™ã‚‹ã¨ä»–ã®threadも終了
- ã™ã‚‹ã“ã¨ã®æ˜Žç¢ºåŒ–.
-
- * signal.c (trap): SIGINTã®ãƒ‡ãƒ•ォルトã®è¨­å®šãƒŸã‚¹(本当ã«SIG_DFLã§ã¯
- ã¾ãšã‹ã£ãŸ).rubyã§ã¯ã¡ã‚ƒã‚“ã¨ãƒãƒ³ãƒ‰ãƒ«ã—ãªã„ã¨ï¼Ž
-
- * eval.c (thread_interrupt): SIGINTã¯main_threadã«ä¾‹å¤–を発生ã•ã›ã‚‹
- よã†ã«ï¼Ž
-
-Mon May 27 15:13:31 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_status): threadã®çŠ¶æ…‹ã‚’è¿”ã™ãƒ¡ã‚½ãƒƒãƒ‰ï¼Žthreadã®çµ‚了
- ã‚’å¾…ãŸãªã„.
-
- * eval.c (thread_value): 一種ã®promiseを実装ã™ã‚‹ãŸã‚ã®ãƒ¡ã‚½ãƒƒãƒ‰ï¼Ž
-
- * eval.c (thread_join): å¾…ã£ã¦ã„ã‚‹threadãŒä¾‹å¤–ã‚’èµ·ã“ã—ãŸæ™‚ã«ã¯ï¼Œ
- joinãŒãã®ä¾‹å¤–を発生ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * eval.c (thread_create): threadã§ã®ä¾‹å¤–ã‚’propagateã—ãªã„よã†ã«ï¼Ž
-
-Fri May 24 10:47:53 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * enum.c (Init_Enumerable): `size' as alias to the `length'
-
- * eval.c (thread_save_context): `$@', `$!'をスレッド毎ã«ã‚»ãƒ¼ãƒ–.
-
- * eval.c (superclass): エラー表示をより親切ã«ï¼Ž
-
-Thu May 23 10:38:41 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.99-960523
-
- * eval.c (superclass): エラー時ã«ã‚¹ãƒ¼ãƒ‘ークラスåã‚’(分ã‹ã‚Œã°)表示
- ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
-Wed May 22 19:48:42 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (superclass): ã‚¹ãƒ¼ãƒ‘ãƒ¼ã‚¯ãƒ©ã‚¹ã®æŒ‡å®šå­ã‚’`:'ã‹ã‚‰`<'ã«å¤‰æ›´ï¼Ž
-
-Tue May 21 09:27:59 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * lib/thread.rb: threadをサãƒãƒ¼ãƒˆã™ã‚‹ã‚¯ãƒ©ã‚¹(Mutex, Queue).
-
-Mon May 20 09:39:49 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * time.c (time_cmp): æµ®å‹•å°æ•°ç‚¹æ•°ã‚‚扱ãˆã‚‹ã‚ˆã†ã«ï¼Ž
- (time_minus): Time - TimeãŒæµ®å‹•å°æ•°ç‚¹æ•°ã‚’è¿”ã™ã‚ˆã†ã«ï¼Ž
-
-Fri May 17 15:40:10 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * process.c (rb_proc_exec): Thread対応時ã«execã®ç›´å‰ã«
- ITIMER_VIRTUALをリセットã™ã‚‹ï¼Ž
-
-Tue May 14 02:12:44 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * signal.c (sighandle): SIGINTã«å¯¾ã—ã¦ãƒ‡ãƒ•ォルトã§ä¾‹å¤–を発生ã•ã›ã‚‹
- ã®ã‚’ã‚„ã‚,status 130ã§exitã™ã‚‹ã‚ˆã†ã«ã—ãŸï¼Ž
-
- * eval.c (thread_schedule): Threadã®ãƒã‚°ã¯ã»ã¨ã‚“ã©ã¨ã‚ŒãŸã‚ˆã†ã ï¼Ž
-
-Fri May 10 11:21:08 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (thread_schedule): ユーザレベルThread機能.効率ã¯ã¨ã‚‚ã‹ã
- ç§»æ¤æ€§ã¯ã‚る.今後,threadé–“ã®é€šä¿¡æ©Ÿèƒ½ã‚’実装ã™ã‚‹äºˆå®šï¼Ž
-
-Thu May 2 21:22:31 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * time.c (time_timeval): struct timevalを直接返ã™ã‚ˆã†ã«(static変数
- を使ã‚ãªã„).
-
-Wed May 1 17:27:32 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * process.c (f_sleep): 整数以外ã®timeを指定ã§ãるよã†ã«ï¼Ž
-
-Thu Apr 25 08:19:15 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * file.c (file_s_dirname): ファイルåãŒ"/"ã‚’å«ã¾ãªã„時,"."ã‚’è¿”ã™
- よã†ã«(GNU dirnameã®ä»•様).
-
- * file.c (file_s_basename): ã¾ã nilã¨0ã‚’æ··åŒã—ã¦ã„ã‚‹ã‚½ãƒ¼ã‚¹ãŒæ®‹ã£ã¦
- ã„ãŸï¼Ž
-
- * parse.y (exprs): エラーリカãƒãƒªã‚’追加.
-
-Wed Apr 24 15:51:05 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (str_chop_bang): CRLFã®å ´åˆ2 bytesã‚’chop!ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * ext/socket/socket.c (tcp_svr_s_open): ã¾ã nilã¨0ã‚’æ··åŒã—ã¦ã„るソー
- ã‚¹ãŒæ®‹ã£ã¦ã„ãŸï¼Ž
-
-Tue Apr 23 18:14:25 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * pack.c (pack_pack): "A/a"ã®ãƒã‚°ï¼Žä½™è¨ˆãªpaddingãŒå…¥ã£ã¦ã„ãŸï¼Ž
-
-Thu Apr 18 13:02:11 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * configure.in: アーキテクãƒãƒ£ä¾å­˜éƒ¨ã‚’別ディレクトリã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«
- ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * parse.y (yyerror): エラー発生時ã«ã‚¨ãƒ©ãƒ¼è¡Œã¨ãã®ä½ç½®ã‚’表示ã™ã‚‹ã‚ˆ
- ã†ã«ï¼Ž
-
-Wed Apr 17 14:22:42 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * defines.h: SAFE_SIGHANDLEã‚’ç„¡ãã—,å±é™ºãªé¸æŠžã¯ã§ããªã„よã†ã«ï¼Ž
-
- * io.c (io_ungetc): 新機能.
-
- * ruby.c (load_file): ファイルã‹ã‚‰ã®èª­ã¿è¾¼ã¿æ–¹å¼ãŒå¤‰ã‚ã£ãŸã®ã«å¯¾å¿œï¼Ž
-
- * parse.y (compile_file): ファイルã‹ã‚‰ã®å…¥åŠ›ã‚’ä¸€åº¦å…¨éƒ¨èª­ã¿è¾¼ã‚€ã®ã‚’
- æ­¢ã‚ã¦ï¼Œgetsを使ã†ã“ã¨ã«ã—ãŸï¼Ž
-
-Wed Apr 10 17:40:11 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.98
-
-Tue Apr 9 09:54:30 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (iter_block): ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ãƒ–ãƒ­ãƒƒã‚¯ã®æŒ‡å®šã‚’メソッド呼ã³å‡ºã—
- ã«é™å®šï¼Žæ–‡æ³•ã®æ˜Žç¢ºåŒ–.
-
- * eval.c (rb_eval): æ¡ä»¶å¼ã®æ­£è¦è¡¨ç¾ã®æ¯”較をinline化.
-
- * eval.c (rb_eval): defined? 㮠定義情報(種別)を文字列ã§è¿”ã™ï¼Ž
-
- * node.h: NODE_BEGIN -> NODE_RESCUE, NODE_ENSUREã«åˆ†é›¢ï¼Ž
-
- * eval.c (rb_eval): option -n/-pã®ãƒˆãƒƒãƒ—レベルループã®inline展開.
-
- * parse.y (cond0): æ¡ä»¶å¼ä¸­ã®æ–‡å­—åˆ—ã¯æ¯”較ã®å¯¾è±¡ã¨ã—ãªã„
-
-Wed Mar 27 12:33:54 1996 Tairo Nomura <tairo@hucom.tp.titech.ac.jp>
-
- * defines.h: NeXT対応
-
-Wed Mar 27 10:02:44 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y: 予約語ã®å¤‰æ›´ continue -> next
-
-Mon Mar 25 07:34:37 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (parse_regx): o(once)オプションを追加.
-
-Fri Mar 22 14:25:35 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.97d
-
- * eval.c (dyna_var_defined): 動的ローカル変数ã®å®šç¾©ãƒã‚§ãƒƒã‚¯ç”¨ãƒ«ãƒ¼
- ãƒãƒ³ï¼Ž
-
- * parse.y (gettable): eval()ã®ä¸­ã§ã®å‹•的ローカル変数(æ—¢ã«å€¤ã‚’æŒã£
- ã¦ã„ã‚‹ã‚‚ã®)ã®æ¤œå‡ºã«å¤±æ•—ã—ã¦ã„ãŸï¼Ž
-
-Tue Mar 19 10:46:47 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.97c
-
- * re.c (reg_s_new): compile時ã«segmentation fault.
-
- * parse.y (str_extend): ã„ã¤ã‚‚evalã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
-Wed Mar 13 11:00:42 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (str_extend): 文字列中ã®å¼å±•é–‹ã®ä¸å‚™ã‚’ç„¡ãã—ãŸï¼Ž
-
- * parse.y: 下手ãªã‚¨ãƒ©ãƒ¼ãƒªã‚«ãƒãƒªã‚’外ã—ãŸï¼Ž
-
-Tue Mar 12 12:30:20 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rescue): é–“é•ã£ã¦ensureã§ã‚‚ä¾‹å¤–ã‚’æ•æ‰ã—ã¦ã„ãŸï¼Ž
-
-Wed Mar 6 12:11:03 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (var_extend): 変数展開"#{}"ã§ï¼Œä»»æ„ã®å¼ã‚’書ã‘るよã†ã«ã—
- ãŸï¼Œã“れã§ã€Œå¤‰æ•°ã€å±•é–‹ã§ã¯ç„¡ããªã£ã¡ã‚ƒã£ãŸãªã‚.
-
- * regex.c (init_syntax_once): `_'ã‚’wordã«è¿½åŠ ï¼Ž
-
- * regex.c (re_compile_pattern): `\w',`\W'ã®åˆ¤å®šã‚’syntax tableを使
- ã†ã‚ˆã†ã«ï¼Ž
-
-Tue Feb 27 10:15:32 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * object.c (obj_inspect): 表示ã™ã‚‹ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å¤‰æ•°ãŒç„¡ã„時ã«ã¯ï¼Œ
- to_sを使ã†ï¼Ž
-
- * configure.in: dlnã®æ¤œå‡ºã‚’自動的ã«ï¼Ž
-
-Mon Feb 26 19:55:33 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ruby.c (readin): read(2)ã§ä¸€åº¦ã«ãƒ•ァイルãŒèª­ã¿è¾¼ã‚ãªã„å ´åˆã«å¯¾å¿œï¼Ž
-
-Sat Feb 24 14:47:18 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.97b
-
-Fri Feb 23 11:26:02 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * class.c (rb_define_module): C言語ã§å®šç¾©ã•れãŸãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®PATHã®
- 設定忘れ.文字列化ã§core dump.
-
- * eval.c (mod_include): 戻り値をnilã«ï¼Ž
-
- * version 0.97a
-
-Thu Feb 22 21:03:42 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * array.c (ary_times): 「é…列*文字列ã€ãŒjoinã¨åŒã˜åƒãã‚’ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
-Wed Feb 21 11:18:09 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * configure.in : fileCountをcache.
-
- * configure.in : Linuxã§ELFç’°å¢ƒã‚’è‡ªå‹•çš„ã«æ¤œå‡ºã§ãるよã†ï¼Ž
-
-Tue Feb 20 11:18:09 1996 Mitsuhide Satou <mit-sato@aries.bekkoame.or.jp>
-
- * FreeBSD dynamic link対応.
-
-Fri Feb 16 08:50:01 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * object.c (obj_inspect): インスタンス変数をæŒãŸãªã„オブジェクトも
- æ­£ã—ã表示ã•れるよã†ã«ï¼Ž
-
-Wed Feb 14 16:56:44 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_eval): æ¡ä»¶å¼ã®`2..2'ãªã©å·¦è¾ºæˆç«‹ç›´å¾Œã«å³è¾ºãŒæˆç«‹ã™ã‚‹
- パターンã«ãƒã‚°ï¼Ž
-
-Tue Feb 13 18:22:22 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.97
-
-Fri Feb 9 21:32:55 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * lib/tkscrollbox.rb: スクロールã§tclã®è¨­å®šã‚’行ã„,ruby<->wishã®ä¸
- è¦ãªé€šä¿¡ã‚’ç„¡ãã—ãŸï¼Ž
-
-Wed Feb 7 10:26:52 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (str_aref): indexã‚’unsigned intã§ã¨ã£ã¦ã„ãŸï¼Ž
-
- * string.c (str_aref): 範囲外ã®indexã«å¯¾ã—ã¦nilã‚’è¿”ã™ï¼Ž
-
- * parse.y (special_local_set): `$_'ãŒå®£è¨€ç„¡ã—ã«ä½¿ã‚れãŸå ´åˆã«å¯¾å¿œï¼Ž
- 関数をvariable.cã‹ã‚‰ç§»å‹•.
-
- * string.c (str_sub): ç½®æ›é–‹å§‹ä½ç½®ãŒé–“é•ã£ã¦ã„ãŸï¼Ž
-
-Tue Feb 6 16:17:31 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sample/ruby-mode.el (ruby-parse-region): コメントã®èª­ã¿é£›ã°ã—ã®
- ãƒã‚°ï¼Ž
-
-Fri Feb 2 18:35:28 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * variable.c (lastline_get): `$_'ã‚’`$~'ã¨åŒã˜ã‚ˆã†ã«SCOPEローカルãª
- 変数ã«ã—ãŸï¼Ž
-
-Thu Feb 1 14:14:07 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * file.c: statã®cacheã‚’ã‚„ã‚ãŸï¼Ž
-
-Wed Jan 31 07:13:08 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (proc_s_new): procã®ä¸­ã§yieldを呼ã°ã‚ŒãŸæ™‚ã«core dumpã—ã¦
- ã„ãŸï¼Žã¨ã‚Šã‚ãˆãšä¾‹å¤–を発生ã•ã›ã‚‹ï¼Ž
-
- * variable.c (rb_class2path): singleton classã«å¯¾å¿œï¼Ž
-
- * ext/etc/etc.c (Init_etc): struct_defineã®ã‚¿ãƒ¼ãƒŸãƒãƒ¼ã‚¿ãŒnilã ã£ãŸ
- (0ã§ãªã‘れã°ãªã‚‰ãªã„).
-
- * ext/marshal/marshal.c: TRUE/FALSEã‚’åã出ã›ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * eval.c (rb_get_method_body): キャッシュã®alias対応,ã„ã¾ã¾ã§ã¯
- aliasã¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã«å…¥ã£ã¦ã„ãªã‹ã£ãŸï¼Ž
-
-Tue Jan 30 09:55:13 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_eval): NODE_BLOCK - tail recursive(ã¨ã„ã†ã»ã©ã§ã‚‚ãªã„
- ãŒ).
-
- * io.c (io_pipe): pipe(2)を実装ã—ãŸï¼Ž
-
- * eval.c (rb_eval): Qselfã‚’ãªãã—ãŸï¼Žthread対応ã¸ã®ç¬¬ä¸€æ­©ï¼Žå…ˆã¯é 
- ã„ãŒâ€¦ï¼Ž
-
- * eval.c (proc_call): procã®ä¸­ã§ã®returnã¯procã®çµ‚了をæ„味ã™ã‚‹ã‚ˆã†
- ã«ï¼ŽãŸã ã—,procã‹ã‚‰ã®yieldã®ä¸­ã§ã®returnã¯ä¾‹å¤–を発生ã™ã‚‹ï¼Ž
-
-Wed Jan 24 11:33:48 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.96a
-
- * dir.c (dir_each): `$_'ã®å€¤ã‚’変更ã™ã‚‹ã®ã‚’ã‚„ã‚ãŸï¼Ž
-
- * io.c (f_readlines): nilã¨FALSEã®åˆ†é›¢ã®ã‚ãŠã‚Šã§ç„¡é™ãƒ«ãƒ¼ãƒ—ã«è½ã¡ã¦
- ã„ãŸï¼Ž
-
- * ruby.c (ruby_options): $0ã®è¨­å®šãƒŸã‚¹ï¼Ž
-
-Tue Jan 23 15:28:21 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_eval): ``ã¯æ–‡å­—列を引数ã¨ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰(`)呼ã³å‡ºã—ã®ã‚·
- ンタックスシュガーã§ã‚ã‚‹ã¨ã—ãŸï¼Ž
-
- * ruby.c (addpath): `-I'オプションã§ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãŒã€Œå‰ã«ã€è¿½åŠ ã•れ
- るよã†ã«å¤‰æ›´ï¼Ž
-
-Fri Jan 19 11:23:12 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * dln.c (load_1): N_INDR対応(出æ¥ãŸã‚ˆã†ãªæ°—ãŒã™ã‚‹).
-
-Thu Jan 18 18:14:20 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ruby.texi: FALSEã¨nilã®åˆ†é›¢ã‚’åæ˜ ã—ãŸï¼Ž
-
-Tue Jan 16 17:39:23 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.96 - ã¨ã‚Šã‚ãˆãšnilã¨FALSEを区別ã™ã‚‹ç‰ˆ
-
-Wed Jan 10 15:31:48 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * re.c (reg_match): マッãƒã—ãªã‹ã£ãŸæ™‚ã®æˆ»ã‚Šå€¤ã¯FALSE.
-
- * object.c (rb_equal): `0 == nil'ãŒTRUEã«ãªã‚‹ãƒã‚°ï¼Ž
-
-Tue Jan 9 00:44:58 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * nilã¨FALSEãŒåˆ†é›¢å¯èƒ½ã«å¤‰æ›´ï¼Ž
-
- * nilã¨FALSEã¨0ã®åŒºåˆ¥ã‚’厳密ã«ï¼Ž
-
- * struct.c (struct_new): 引数を0ã§çµ‚ã‚‹å¿…è¦ãŒç„¡ããªã£ãŸï¼Ž
-
- * object.c (inspect_i): オブジェクトã®ãƒã‚§ãƒƒã‚¯ã®ãƒã‚°(Fixnumã§core
- dumpã—ã¦ã„ãŸ).
-
- * range.c (range_to_s): Rangeã®è¡¨ç¤ºã‚’改善.
-
- * object.c (true_inspect): TRUEã®è¡¨ç¤ºã‚’`TRUE'ã«ï¼Ž
-
-Mon Jan 8 15:02:33 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * numeric.c (fix_mul): divide by zero errorãŒç™ºç”Ÿã—ãŸ(オーãƒãƒ¼ãƒ•ロー
- 検出ã®ãƒã‚°)
-
- * texinfo.texをパッケージã«å«ã‚ãŸï¼Ž
-
-Sun Dec 31 00:08:49 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_eval): `::'ã§ã¯ï¼Œãã®ã‚¯ãƒ©ã‚¹ã§å®šç¾©ã•れãŸå®šæ•°ã‚’å‚ç…§ã™ã‚‹
- よã†ã«å¤‰æ›´ï¼Ž
-
- * string.c (Init_String): eachã‚’each_lineã«æˆ»ã—ãŸï¼Ž
-
-Thu Dec 28 12:31:55 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_eval): caseã®æ¼”ç®—å­ã‚’`=~'ã‹ã‚‰`==='ã«ï¼Ž
-
- * variable.c (rb_const_set): クラス定数ã®å†å®šç¾©ã‚’許ã™(åŒã˜ã‚¯ãƒ©ã‚¹ã§
- ã¯ä¸å¯).警告ã¯å‡ºã™ï¼Ž
-
-Wed Dec 27 13:27:52 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.95c
-
- * ext/tkutil/tkutil.c: wishãŒã‚ã£ã¦ã‚‚ãªãã¦ã‚‚一応コンパイルã ã‘ã¯
- ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * lib/tk.rb: 環境変数PATHã‹ã‚‰{wish|wish4.0}を探ã™ã‚ˆã†ã«ï¼Ž
-
-Tue Dec 26 01:03:42 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sample/ruby-mode.el (ruby-parse-region): æ­£è¦è¡¨ç¾ã®æ¤œå‡ºå¼·åŒ–.
-
- * numeric.c (fix_mul): ä¹—ç®—ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ•ロー検出アルゴリズムã®ãƒã‚°ï¼Ž
-
- * ext/extmk.rb.in: ./install-shを使ã†å ´åˆã®PATHを調整.
-
- * Makefile.in (install): lib/*.rbを一ã¤ãšã¤ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ï¼Ž
-
- * io.c (io_each_line): ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã®æˆ»ã‚Šå€¤ã‚’nilã§çµ±ä¸€ï¼Ž
-
-Fri Dec 22 10:34:32 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.95b
-
- * variable.c (f_untrace_var): 第2引数を指定ã™ã‚‹ã¨ç‰¹å®šã®traceを削除
- ã§ãるよã†ã«ï¼Ž
-
- * variable.c (f_trace_var): 第2引数ãŒnilã®æ™‚,traceを削除ã™ã‚‹ï¼Ž
-
- * lib/tk.rb (file_readable/file_writable): 第2引数をnilã«ã™ã‚‹ã“ã¨
- ã«ã‚ˆã‚‹event handlerã®å‰Šé™¤ï¼Ž
-
- * parse.y (variable): ドキュメントã«`__FILE__'ã¨`__LINE__'ãŒæ®‹ã£ã¦
- ã„ãŸï¼Ž`caller(0)'ã§ä»£ç”¨ã—ãŸã¯ãšã ã£ãŸã®ã«ï¼Ž
-
- * eval.c (f_eval): $!ã®ãƒªã‚»ãƒƒãƒˆï¼Ž
-
- * error.c (err_sprintf): 勿‰‹ã«"\n"を付加ã™ã‚‹ã®ã‚’æ­¢ã‚ãŸï¼Ž
-
- * parse.y (f_arglist): 引数リスト直後ã®if/whileã®èª­ã¿é–“é•ã„.
- lex_stateã®å€¤ãŒè¨­å®šã•れã¦ã„ãªã‹ã£ãŸï¼Ž
-
-Thu Dec 21 00:56:57 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.95a - ^^;;;
-
- * lib/tkscrollbox.rb: パッケージã«å…¥ã£ã¦ãªã‹ã£ãŸï¼Ž
-
- * configure.in: FILE structureã®ãƒã‚§ãƒƒã‚¯ã«ãƒã‚°ï¼Ž
-
- * Makefile.in (clean): ext以下をinstallã—ã¦ã„ãŸï¼Ž
-
- * ext/socket/extconf.rb: Solarisã«ãŠã‘ã‚‹-lnlsã®ãƒã‚§ãƒƒã‚¯ï¼Ž
-
- * array.c (beg_len): ãƒã‚°ãŒã‚ã£ãŸâ€¦ï¼Žæ‚²ã—ã„.
-
- * version 0.95 - fj.sourcesã«
-
- * eval.c (rb_eval): rescueã®ãƒ­ã‚¸ãƒƒã‚¯ã‚’rb_rescue()ã«ä¸€å…ƒåŒ–.
-
-Wed Dec 20 19:30:58 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * Makefile.in: ä¸è¦ãªã‚³ãƒ³ãƒ‘イルã®å›žé¿(より完全ã«).
-
- * class.c (singleton_class_new): `single'->`singleton'
-
-Tue Dec 19 07:14:33 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * io.c (closed?): IOãŒcloseã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’知る述語.
-
- * parse.y (primary): 特異メソッドã®å¼•æ•°ã®lex_stateãŒä¸é©åˆ‡ï¼Ž
-
- * lib/tk.rb: tcl->rubyã®å¤‰æ›é–¢æ•°ã®ç”¨æ„.
-
- * ext/extmk.rb.in (install): installã®2é‡ã‚³ãƒ³ãƒ‘イルã®å›žé¿ï¼Ž
-
- * array.c (range_beg_len): range指定ã®ä¸é©åˆ‡ãªã‚¨ãƒ©ãƒ¼ã‚’訂正.
-
- * string.c (str_aref): range指定ã®ãƒã‚°ã‚’削除.
-
- * lib/tk.rb (tk_split_list): Tclã®ãƒªã‚¹ãƒˆã«å¯¾å¿œï¼Ž
-
-Mon Dec 18 09:58:12 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.94
-
- * dln.c (dln_load): HP対応(未確èª)
-
- * eval.c (Init_Proc): Blockã‚’Procã«æ”¹å.
-
-Sat Dec 16 13:46:14 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_eval): retryã§ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã®å†å®Ÿè¡ŒãŒã§ãるよã†ã«ï¼Ž
-
-Fri Dec 15 17:14:30 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c: proc:lambdaã®è¦ªã—ã¿ã‚„ã™ã„別å
-
-Thu Dec 14 17:21:55 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (dyna_var_asgn): ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ãƒ–ãƒ­ãƒƒã‚¯å†…ã§æœ€åˆã«åˆæœŸåŒ–ã•れãŸ
- ãƒ­ãƒ¼ã‚«ãƒ«å¤‰æ•°ã®æœ‰åŠ¹ç¯„å›²ã‚’ãã®ãƒ–ロック内ã«é™å®šï¼Žã“れã§lambdaã¨å‘¼ã¹
- ãªã„ã“ã¨ã¯ãªã„.
-
-Wed Dec 13 02:30:58 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * gc.c: autoloadã®ãƒžãƒ¼ã‚¯ãƒŸã‚¹ï¼Ž
-
- * lib/tk.rb: wishã‹ã‚‰ã®è¤‡æ•°è¡Œã®æˆ»ã‚Šå€¤ã«å¯¾å¿œ
-
- * lib/tkcomposite.rb: 複åˆwidget
-
- * variable.c (rb_class2path): ICLASSã«å¯¾å¿œã—ã¦ãªã‹ã£ãŸï¼Ž
-
- * eval.c (ruby_run): exit(0)ã®ãƒã‚°
-
-Sat Dec 9 01:21:24 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/marshal/marshal.c (dumps|load): 文字列ã«å¯¾ã™ã‚‹å…¥å‡ºåŠ›ã‚’å¯èƒ½ã«
- ã—ãŸ(ãŸã ã—実ã¯ãƒ•ァイル経由ãªã®ã ).
-
-Fri Dec 8 18:29:11 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/marshal/marshal.c: シンボルを一度ã ã‘åˆæœŸåŒ–ã™ã‚‹ï¼Ž
-
-Thu Dec 7 07:58:50 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (yylex): 第1å¼•æ•°ã®æ­£è¦è¡¨ç¾ã®èªè­˜ã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã£ãŸï¼ŽåŒæ™‚ã«
- 状態数を減らã—ãŸï¼Ž
-
- * string.c (str_sub): ç½®æ›ã§ã‚¹ã‚­ãƒƒãƒ—å¹…ãŒå¤§ãã™ãŽãŸï¼Ž
-
-Wed Dec 6 15:14:23 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (str_sub_method): sub/gsub(!ãªã—)ã¯ç½®æ›ãŒè¡Œãªã‚れãªã‹ã£
- ãŸæ™‚,置æ›å‰ã®æ–‡å­—列を返ã™ï¼Ž
-
-Tue Dec 5 00:55:15 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (yylex): 括弧をçœç•¥ã—ãŸæ™‚ã®å¼•数展開ã®`*'ã«å¯¾å¿œï¼Ž
-
- * eval.c (ruby_run): EXITãƒãƒ³ãƒ‰ãƒ©å†…ã§ã®ä¾‹å¤–ã«å¯¾å¿œï¼Ž
-
- * bignum.c (big_cmp): Bignumã¨Fixnumã®æ¯”較ã§è½ã¡ã‚‹ï¼Ž
-
-Mon Dec 4 14:21:18 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (call_op): コンパイル時ã®å®šæ•°å¼ã®å±•é–‹ã‚’ã‚„ã‚ãŸï¼ŽåŠ´å¤šãã—
- ã¦ç›Šå°‘ãªã„ã¨åˆ¤æ–­ã—ãŸã®ã§ï¼Ž
-
-Thu Nov 30 01:35:15 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * lib/tk.rb: {Radio,Check}Buttonã®variableã®å®Ÿè£….
-
- * eval.c (rb_yield_0): Block.callãŒãƒã‚¹ãƒˆã—ãŸæ™‚ã®ãƒã‚°ï¼Ž
-
- * io.c (f_select): 常ã«é…列3ã¤ã‚’ãµãã‚€é…列を返ã™ã‚ˆã†ã«
-
- * lib/tk.rb: fileeventã‚’rubyå´ã§å®Ÿè£….
-
-Wed Nov 29 17:53:23 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * variable.c (rb_ivar_get): selfã‚’å¸¸ã«æŒ‡å®šã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
-Tue Nov 14 00:07:29 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * lib/tk.rb: Tk4.0対応
-
-Mon Nov 13 16:23:32 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.93
-
-Thu Nov 9 23:26:01 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * gc.c (gc_mark): モジュールã®Mixinã®ãƒžãƒ¼ã‚¯å¿˜ã‚Œï¼Ž
-
- * parse.y (f_arglist): メソッド定義ã®å¼•æ•°ã‚’æ‹¬å¼§ã§æ‹¬ã‚‰ãªãã¦ã‚‚良ã„
- よã†ã«ã—ãŸï¼Ž
-
-Wed Nov 8 00:17:51 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_yield_0): æœªåˆæœŸåŒ–ã®ãƒ­ãƒ¼ã‚«ãƒ«å¤‰æ•°ãŒã‚ã£ãŸï¼Ž
-
- * eval.c (rb_eval): pendig signalã®ãƒã‚§ãƒƒã‚¯ã‚’eval実行後ã«è¡Œã†ã‚ˆã†
- ã«ã—ãŸï¼Žã§ãªã„ã¨ã‚·ã‚°ãƒŠãƒ«ã®ç™ºç”Ÿã¨æ¤œå‡ºãŒé ã離れã¦ã—ã¾ã†äº‹ãŒã‚る.
-
- * parse.y: classæ–‡ã®superclass部を定数ã‹ã‚‰å¼ã«æ‹¡å¼µã—ãŸï¼Ž
-
- * lib/tk.rb: Tkã®ã»ã¼å…¨ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚¯ãƒ©ã‚¹ã«å¯¾å¿œï¼Žã‚­ãƒ£ãƒ³ãƒã‚¹ã¨ãƒ†ã‚­ã‚¹
- ト上ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæ®‹ã£ã¦ã„る.
-
-Tue Nov 7 08:18:37 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * signal.c (trap): ブロックを指定ã§ãるよã†ã«ï¼Ž
-
-Mon Nov 6 16:44:00 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (f_caller): å‘¼å‡ºå…ƒã®æƒ…報を得る.
-
- * ext/tkutil/tkutil.c: wishã®stderr出力を監視ã™ã‚‹ã“ã¨ã§ï¼Œã‚¨ãƒ©ãƒ¼å‡¦
- ç†ã‚’行ã†ï¼Ž
-
- * ext/tkutil/tkutil.c: wishã¨ã®é€šä¿¡éƒ¨ã‚’Cã§è¨˜è¿°ï¼Ž
-
-Sat Nov 4 01:12:59 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sample/ruby-mode.el (ruby-calculate-indent): インデントã®è¨ˆç®—ã‚’
- ã‚‚ã†å°‘ã—スマートã«ã—ãŸ(æ­£è¦è¡¨ç¾ã®ãƒã‚§ãƒƒã‚¯ï¼Œç¶™ç¶šè¡Œã®ãƒã‚§ãƒƒã‚¯).
-
- * eval.c (rb_call): ç„¡é™å†å¸°ã‚’é¿ã‘ã‚‹ãŸã‚,関数ã®ãƒã‚¹ãƒˆãƒ¬ãƒ™ãƒ«ã®åˆ¶é™
- を行ãªã†ï¼Ž
-
- * lib/tk.rb: Tkインターフェース.ã¾ã ä¸å®Œå…¨ã ãŒï¼Ž
-
- * eval.c (rb_yield_0): 空ã®Blockã®ãƒã‚°ï¼Ž
-
- * sample/ruby-mode.el (ruby-calculate-indent): è¡Œæœ«ã®æ¼”ç®—å­ã«ã‚ˆã‚‹
- 行継続ã«å¯¾å¿œï¼Ž
-
-Fri Nov 3 12:56:21 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_call): 本体ãŒç©ºã®é–¢æ•°ã®å®Ÿè¡Œã«ãƒã‚°ï¼Ž
-
- * parse.y (var_extend): æ–‡å­—åˆ—ã®æœ«å°¾ã®å¤‰æ•°å±•é–‹ã®ãƒã‚°ï¼Ž
-
- * variable.c (rb_gvar_set): traceã®è©•価時ã«ã«å¤‰æ•°å€¤ã‚’与ãˆã‚‹ã‚ˆã†ã«ï¼Ž
-
- * eval.c (f_require): ruby scriptã®requireã«bug.
-
- * variable.c (rb_const_get): モジュールã®include対策.
-
-Thu Oct 19 13:56:06 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * dln.c (dln_load): HP対応ã§ã®typo.
-
-Wed Oct 18 17:39:39 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.92
-
- * object.c (krn_type): オブジェクトã®å‹•çš„ãªåž‹ã‚’è¿”ã™ãƒ¡ã‚½ãƒƒãƒ‰ï¼Ž
-
-Tue Oct 17 00:48:18 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ruby.c (proc_options): -X オプション.chdirã ã‘を行ã†ï¼Ž
-
- * re.c (reg_search): 漢字コードを途中ã§å¤‰æ›´ã§ãるよã†ã«ï¼Žã‚³ãƒ³ãƒ‘イ
- ル時ã®ã‚³ãƒ¼ãƒ‰ãŒå¤‰æ›´ã•ã‚ŒãŸæ™‚ã«ã¯ãƒžãƒƒãƒã®ç›´å‰ã«æ­£è¦è¡¨ç¾ã®å†ã‚³ãƒ³ãƒ‘イ
- ルを行ã†ï¼Žå®šæ•°KCODEã‹ã‚‰å¤‰æ•°$KCODEã¸ï¼Ž
-
- * parse.y: ()ã®ãªã‹ã«compexprを許ã™ï¼Ž
-
- * re.c (reg_search): メモリリークを直ã—ãŸï¼Ž
-
-Fri Oct 13 13:19:19 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (str_sub): 文字列置æ›ã«ãƒã‚°ï¼Ž
-
- * string.c (str_strip_bang): 文字列ã®å¾Œã‚ã®é•·ã•ã®èª¿æ•´ãŒè¡Œã‚れã¦ã„
- ãªã‹ã£ãŸï¼Ž
-
- * re.c (reg_search): $&, $1...ã¯ãƒ­ãƒ¼ã‚«ãƒ«ã«æŸç¸›ã™ã‚‹ã‚ˆã†ã«ãªã£ãŸï¼Žå‘¼
- ã³å‡ºã—ãŸãƒ¡ã‚½ãƒƒãƒ‰ã§ã®ãƒžãƒƒãƒã¯ç¾ã‚¹ã‚³ãƒ¼ãƒ—ã®$&ãªã©ã®å€¤ã«å½±éŸ¿ã—ãªã„.
- マッãƒã®æƒ…報をスコープ外ã§å¾—ãŸã„ã¨ãã«ã¯$~を使ã£ã¦æŸç¸›æƒ…報をæŒã¡
- 出ã™å¿…è¦ãŒã‚る.
-
-Thu Oct 12 00:33:33 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * re.c (reg_search): String:split, String:indexã§ã¯$&, $1...ãŒå¤‰åŒ–
- ã—ãªã„よã†ã«ã—ãŸï¼Ž
-
- * io.c (rb_str_setter): setterã®ä»•様ãŒå¤‰æ›´ã«ãªã£ã¦ã„ãŸï¼Ž
-
- * variable.c (f_trace_var): 第2引数をçœç•¥ã—ã¦ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã¨ã—ã¦å‘¼ã¹
- るよã†ã«ï¼Ž
-
-Wed Oct 11 11:50:59 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.91
-
- * variable.c (var_setter): 引数ãŒé–“é•ã£ã¦ã„ãŸï¼Žè‡´å‘½çš„ãƒã‚°ï¼Ž
-
- * io.c (pipe_open): $stderrã®å€¤ãŒå¤‰æ›´ã•れã¦ã„る時ã«ã¯ãã¡ã‚‰ã‚’
- å­ãƒ—ロセスã®stderrã«è¨­å®šã™ã‚‹ï¼Ž
-
-Mon Oct 9 13:06:33 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * object.c (mod_to_s): モジュール内ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯`::'を使ã£ãŸè¡¨ç¾
- ã§è¡¨ç¤ºã•れるよã†ã«ï¼Ž
-
- * variable.c (rb_gvar_set): 代入ã«ã‚ˆã‚‹ãƒ«ãƒ¼ãƒ—ãŒç™ºç”Ÿã—ãªã„よã†ã«ï¼Œ
- trace内ã§ã®ä»£å…¥ã§ã¯traceを評価ã—ãªã„.
-
- * struct.c (struct_equal): structã®equal判定ã«ã‚¯ãƒ©ã‚¹ã®ä¸€è‡´ã‚’å«ã‚ãŸï¼Ž
-
-Sat Oct 7 00:18:32 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_eval): defined?ã®æ©Ÿèƒ½ã‚’æ‹¡å¼µ(yieldã®ãƒã‚§ãƒƒã‚¯ï¼Œsuperã®
- 存在ãªã©).
-
-Fri Oct 6 12:06:47 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.90
-
- * st.c (st_foreach): è¦ç´ ã‚’削除ã—ãŸæ™‚ã«è¦ç´ æ•°ãŒå¤‰åŒ–ã—ã¦ã„ãªã‹ã£ãŸï¼Ž
-
- * hash.c (hash_values): ãƒã‚°ä¿®æ­£ï¼Žkeysã‚’è¿”ã—ã¦ã„ãŸâ€¦ï¼Ž
-
- * parse.y (call_op): defined? ã®å¼•æ•°ã§ã¯å®šæ•°ã®ç•³ã¿è¾¼ã¿ã‚’行ã‚ãªã„
- (ãƒã‚§ãƒƒã‚¯ã™ã‚‹å‰ã«ã‚³ãƒ³ãƒ‘イルエラーã«ãªã£ã¦ã¯å›°ã‚‹).
-
- * スコープ生æˆã®ä¸€éƒ¨è¦‹ç›´ã—.
-
-Thu Oct 5 00:29:43 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * 関数ã¨ã‚¯ãƒ©ã‚¹ã®å‘½åè¦å‰‡ã‚’変更ã—ãŸï¼Žé–¢æ•°å,変数åã®å…¨é¢æ›¸ãæ›ãˆï¼Ž
-
- * gc.c (looks_pointerp): ヒープãƒã‚§ãƒƒã‚¯ã®é«˜é€ŸåŒ–.
-
- * struct.c (Fstruct_aset): 構造体ã«å¯¾ã™ã‚‹`[]='.
- (struct_set): 構造体メンãƒã«å¯¾ã™ã‚‹ä»£å…¥ï¼Ž
-
-Wed Oct 4 09:54:07 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.89
-
- * eval.c (Frequire): ダイナミックロードã®ã‚¨ãƒ©ãƒ¼ãƒã‚§ãƒƒã‚¯ã‚’厳ã—ã.
-
- * struct.c: structã®æ§‹é€ ã‚’å®Œå…¨ã«æ›¸ãæ›ãˆãŸï¼Žä»¥å‰ã¯é †åºä»˜ãã®
- id->valueã®é€£æƒ³é…列ã§ã‚ã£ãŸãŒï¼Œä»Šåº¦ã¯æ§‹é€ ä½“æ¯Žã«æ–°ã—ã„クラスを生
- æˆã™ã‚‹ã‚ˆã†ã«ã—ãŸï¼Ž
-
- * parse.y: `::'ã®æ„味をAssocã®ç”Ÿæˆã‹ã‚‰ã‚¯ãƒ©ã‚¹(モジュール)内ã®å®šæ•°ã‚¢
- クセスã¸å¤‰æ›´ï¼Ž
-
- * assoc.c: ãªãã™ï¼Ž
-
-Tue Oct 3 13:31:08 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * variable.c (Ftrace_var): trace_var, 大域変数ã¸ã®æ›¸ãè¾¼ã¿hookを設
- 定ã™ã‚‹ï¼Ž
-
- * variable.c: global_entryã®æ§‹æˆã‚’æ›¸ãæ›ãˆãŸï¼Žã“れã§trace_varを実
- 装ã§ãる.
-
- * file.c (Ffile_stat): "&"ã§ç›´å‰ã®fstatã®çµæžœã‚‚å‚ç…§ã§ãるよã†ã«ï¼Ž
-
-Fri Sep 29 14:15:13 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.88
-
- * dln.c (dln_load): AIXã¨HPã«å¯¾å¿œã—ãŸã‚³ãƒ¼ãƒ‰ã‚’入れãŸ(å‹•ä½œã¯æœªç¢ºèª).
-
- * ext/extmk.rb.in: å¿…è¦ã«å¿œã˜ã¦ï¼Œå®šæ•°EXTLIBを定義ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * dln.c (dln_load): dlnç‹¬ç«‹ã«æ›¸ãæ›ãˆã‚‹ï¼Žå°†æ¥ã®æ‹¡å¼µç”¨ï¼Ž
- (load_1): dln_a_outã«ãŠã„ã¦ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã§ãƒ©ã‚¤ãƒ–ラリを明示的ã«ãƒ­ãƒ¼
- ドã™ã‚‹å¿…è¦ãŒãªã„よã†ã«å¤‰æ›´ã—ãŸï¼Ž
-
-Thu Sep 28 13:31:37 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sample/ruby-mode.el: ã‚‚ã£ã¨ã¾ã—ãªhilit19対応(æ­£è¦è¡¨ç¾).
-
-Wed Sep 27 04:12:44 1995 Takahasi Mamoru <taka@soum.co.jp>
-
- * sample/test.rb: echoã§-nを使ã‚ãªã„よã†ã«(SysV対策).
-
- * ext/extmk.rb.in: sub -> sub!
-
-Tue Sep 26 19:12:42 1995 Yasuo OHBA <jammy@csg.mes.co.jp>
-
- * dln.c (dln_find_1): `.', `..'ã‹ã‚‰å§‹ã¾ã‚‹ãƒ‘スã«å¯¾å¿œã—ãŸ.
-
-Mon Sep 25 12:33:03 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.87
-
-Sat Sep 23 10:00:18 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (Fmod_modfunc): メソッドをprivateã«ã—ï¼ŒåŒæ™‚ã«ç‰¹ç•°ãƒ¡ã‚½ãƒƒãƒ‰
- も定義ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ï¼Žãƒ‘ãƒƒã‚±ãƒ¼ã‚¸çš„ä½¿ã„æ–¹ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ç”¨ï¼Ž
-
-Fri Sep 22 11:02:44 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * lib/find.rb: findã‚’æä¾›ã™ã‚‹ãƒ©ã‚¤ãƒ–ラリ
-
- * variable.c (rb_define_variable): hookã®è¨­å®šã‚’分離.
- (add_hook): 1変数ã«å¯¾ã—ã¦è¤‡æ•°ã®hookを設定ã§ãるよã†ã«ï¼Ž
-
-Thu Sep 21 00:22:11 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (Fstr_frozen): æ–‡å­—åˆ—ãŒæ›´æ–°ä¸å¯ã‹ã©ã†ã‹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹è¿°
- 語メソッド.
-
- * hash.c (Fhash_aset): keyãŒæ–‡å­—åˆ—ã®æ™‚,キーã®å†…容ãŒå¤‰åŒ–ã—ãªã„よã†
- ã«ï¼Œdupã—ã¦freezeã™ã‚‹ï¼Ž
-
-Wed Sep 20 16:12:44 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.86
-
- * ext/extmk.rb.in (have_header): キャッシュã«ãƒã‚°ï¼Ž
-
- * ext/extmk.rb.in (have_library): 引数ã®é †åºãŒå¤‰ã‚ã£ãŸï¼Ž
-
-Thu Sep 14 18:00:59 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * object.c (obj_is_instance_of): is_member_ofã‹ã‚‰å称変更.
-
- Wed Sep 13 15:44:35 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (Fstr_tr_bang): ç¯„å›²å¤–ã®æ–‡å­—ã«å¯¾ã™ã‚‹å¤‰æ›ãƒã‚°ï¼Ž
-
-Tue Sep 12 14:27:58 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * file.c (Sfile_expand_path): expand_file_name -> expand_pathã«å
- 称変更.
-
- * enum.c (Fenum_member): includes? -> member? ã«å称変更.
-
- * string.c (Fstr_each_byte): Stringã¯ByteArrayã§ã‚ã‚‹ã¨ã„ã†åŸºæœ¬ã«æˆ»ã£
- ã¦ï¼Œeachã®å®šç¾©ã‚’each_byteã«å¤‰æ›´ã—ãŸï¼Žä»Šã¾ã§ã®eachã¯each_lineã§ã‚¢
- クセスã§ãる.
-
-Mon Sep 11 18:31:17 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * file.c (cache_stat): ファイルåã¨ã—ã¦"&"を指定ã™ã‚‹ã¨ç›´å‰ã®
- stat(2)ã®çµæžœã‚’å†åˆ©ç”¨ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
-Fri Sep 8 14:18:51 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ruby.texi: `!', `?'ã«å¯¾å¿œã—ã¦ã‚¢ãƒƒãƒ—デート.
-
- * parse.y: defined -> defined?
-
- * file.c: FileOpã®ä¸€æ–‡å­—メソッドをãªãã™ï¼Žä¸€æ–‡å­—テストã¯testメソッ
- ドã«ã¾ã‹ã›ã‚‹ï¼Ž
-
- * parse.y (yylex): 変数åã®å¾Œã‚ã«`?'も許ã™ï¼Žè¿°èªžãƒ¡ã‚½ãƒƒãƒ‰ã®å¾Œã‚ã«
- `?'を追加ã™ã‚‹ï¼Ž
-
-Thu Sep 7 20:01:33 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c: 文字列ã®ä¸­èº«ã‚’æ›´æ–°ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã®åå‰ã®çµ‚りã«`!'を付加.
- `!'ã®ç„¡ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚‚用æ„ã—ãŸï¼Ž
-
- * parse.y: 変数åã®å¾Œã‚ã«`!'を許ã™ï¼Ž
-
-Wed Sep 6 14:12:19 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.85
-
- * string.c (Fstr_dup): 文字列ã®è¤‡è£½ã‚’作る
- (Fstr_freeze): æ–‡å­—åˆ—ã®æ›´æ–°ä¸å¯å±žæ€§ã‚’設定ã§ãるよã†ã«ï¼Ž
- (Fsub/Fgsub): $_ã®å†…容をdupã—ã¦ã‹ã‚‰ç½®æ›ã‚’行ã†ã‚ˆã†ã«ï¼Ž
-
- * ruby.h (CLONESETUP): flagsã®çŠ¶æ…‹ã‚‚ã‚³ãƒ”ãƒ¼
-
-Tue Sep 5 01:27:50 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * sample/test.rb: å¤±æ•—ã®æ¤œå‡ºã‚’厳ã—ã.
-
-Fri Aug 25 14:31:02 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * process.c (Ffork): イテレータã¨ã—ã¦ã‚‚動作ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * version 0.84
-
- * signal.c (sig_beg): ãƒãƒ³ãƒ‰ãƒ©ãŒè¨­å®šã•れã¦ã„る時ã«ã¯å†è¨­å®šã—ãªã„.
-
- * ext/extmk.rb.in (create_makefile): shared objectã®ãƒªãƒ³ã‚¯ã®éš›ã«
- `-l'オプションを指定ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * signal.c (trap): `EXIT'ã§çµ‚了処ç†ã‚’行ã†è¨­å®šãŒå‡ºæ¥ã‚‹ï¼Ž
-
-Wed Aug 16 00:13:22 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * signal.c (sig_beg): デフォルトã§ã¯begin節ã®ä¸­ã§ã ã‘SIGINTã‚’æ•æ‰
- ã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ï¼Ž
-
- * io.c (io_ctl): fcntlã‚’æŒãŸãªã„システムã«ã‚‚対応.
-
- * å„ディレクトリã«åˆ†æ•£ã—ã¦ã„ãŸMANIFESTã‚’ã¾ã¨ã‚ãŸï¼Žæ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«æ¯Ž
- ã«ã¯å¿…è¦ï¼Ž
-
- * string.c (Sstr_new,str_sub,Fstr_crypt): å¼•æ•°ã‚’è‡ªå‹•çš„ã«æ–‡å­—列ã«å¤‰
- æ›ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
-Sat Aug 12 00:44:02 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * string.c (Fstr_crypt): PD cryptを用æ„ã—ãŸï¼Ž
-
-Fri Aug 11 14:37:03 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * assoc.c (Fassoc_clone): assocã‚‚cloneã§ãるよã†ã«ï¼Ž
-
- * io.c: マクロREAD_DATA_PENDINGã®å®šç¾©ã‚’変更(Linux対応)
-
- * io.c (io_fptr_finalize): fptrã®é–‹æ”¾æ™‚ã®å‡¦ç†ã‚’指定ã§ãるよã†ã«ï¼Ž
-
-Wed Aug 9 16:52:41 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * eval.c (rb_provided): 複数ã®featureをロードã™ã‚‹ã¨ç„¡é™ãƒ«ãƒ¼ãƒ—ã«è½
- ã¡ã‚‹ã¨ã„ã†å˜ç´”ãª(ã—ã‹ã—凶悪ãª)ミス.
-
- * ext/extmk.rb.in (install): dlopen対応を行ã£ãŸï¼Žä»Šã¾ã§dlnã«ã—ã‹å
- 分ã«å¯¾å¿œã—ã¦ã„ãªã‹ã£ãŸï¼Ž
-
-Tue Aug 8 14:17:06 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.83
-
-Mon Aug 7 12:47:41 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y: resque -> rescue.æ¥ãšã‹ã—ã„ãŒtypoを残ã—ã¦ãŠãã‚ã‘ã«ã¯
- ã„ã‹ãªã„よãªã‚.ãªã‚“ã§ä»Šã¾ã§æ°—ãŒã¤ã‹ãªã‹ã£ãŸã®ã‹â€¦ï¼Ž
-
-Thu Aug 3 18:18:05 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * missing/nt.c: NTç§»æ¤ç”¨ã®é–¢æ•°ç¾¤ã‚’ã¾ã¨ã‚ãŸï¼Ž
-
- * variable.c (rb_const_get): ã¾ãŸä¾‹å¤–を発生ã™ã‚‹ã‚ˆã†ã«ã—ãŸï¼Ždefined
- ãŒã‚る以上例外を発生ã•ã›ãªã„ç†ç”±ãŒãªã„ã®ã§(例外ãŒç™ºç”Ÿã—ãŸæ–¹ãŒã‚¿
- ã‚¤ãƒ—ãƒŸã‚¹ã®æ¤œå‡ºãªã©ã®ç‚¹ã§æœ‰åˆ©).
-
- * variable.c (Fautoload): autoloadを実装.今度ã¯ä½¿ãˆã‚‹ã‹ï¼Ž
-
-Mon Jul 31 15:44:21 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (arg_ambiguous): 第1引数ã®ã‚ã„ã¾ã„ã•を警告(-vオプション
- ã§æœ‰åй).
-
- * eval.c (rb_eval): `-v'オプションをã¤ã‘ã¦`def'ãŒå‘¼ã°ã‚Œã‚‹ã¨ä¸å¿…è¦
- ãªã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒå‡ºãŸï¼Ž
-
- * parse.y (yylex): メソッドã®ç¬¬1引数ã®åˆ¤å®šã‚’ã‚‚ã†ã¡ã‚‡ã£ã¨è³¢ãã—ãŸï¼Ž
-
-Fri Jul 28 19:04:43 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (yylex): `+/-/['ã®ç›´å‰ã«ç©ºç™½ãŒæ¥ã‚‹ã‹ã©ã†ã‹ã§å‹•作を変更ã—
- ãŸ(æ··ä¹±ã®ã‚‚ã¨ã‹?)
-
-Wed Jul 26 09:21:23 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.82a
-
- * sprintf.c (Fsprintf): `%s'ã§'\0'ã‚’å«ã‚€æ–‡å­—列ã«å¯¾å¿œï¼Ž
-
- * pack.c (Fpck_pack): packã®è¦ç´ ç¢ºä¿ã®ãƒã‚°ï¼Ž
-
- * eval.c (Floop): ç„¡é™ãƒ«ãƒ¼ãƒ—ã®ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ï¼Ž
-
- * io.c (next_argv): 存在ã—ãªã„ファイルåãŒæŒ‡å®šã•ã‚ŒãŸæ™‚ã®ã‚¨ãƒ©ãƒ¼å‡¦ç†
- ãŒè¡Œã‚れã¦ã„ãªã‹ã£ãŸï¼Ž
-
-Mon Jul 24 17:37:34 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.82
-
- * ext/extmk.rb.in (install): 拡張モジュールをstatic linkã™ã‚‹å ´åˆã¯
- ãã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒæ—¢ã«requireã•れãŸã®ã¨åŒã˜ã‚ˆã†ã«featureを設定ã™ã‚‹ï¼Ž
- ã“ã‚Œã§æ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ©Ÿèƒ½ãŒå¿…è¦ãªæ™‚ã«ã¯(static linkã•れã¦ã„ã‚‹ã‹
- ã©ã†ã‹ã«ã‹ã‹ã‚らãš)requireã™ã‚Œã°ã‚ˆããªã‚‹ï¼Ž
-
- * eval.c (Frequire): `$"'ã«æ ¼ç´ã™ã‚‹æ–‡å­—列をフルパスã§ãªãフィーãƒãƒ£
- åã¨ã™ã‚‹ï¼Žrubyスクリプトをロードã—ãŸæ™‚ã«ã¯`.rb',オブジェクトを
- ロードã—ãŸæ™‚ã«ã¯`.o'をフィーãƒãƒ£åã«ä»˜åŠ ã™ã‚‹ï¼Žlispã®requireã¨
- provideã®åƒãã«(å°‘ã—)è¿‘ã„.
-
-Thu Jul 20 12:50:05 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * Makefile.in (test): make testãŒã§ãるよã†ã«ï¼Ž
-
- * struct.c (struct_new): typo.
-
- * eval.c (rb_eval): `defined'を追加.メソッド/変数/定数ã®å®šç¾©çŠ¶æ…‹
- を知る事ãŒå‡ºæ¥ã‚‹ï¼Ž
-
-Wed Jul 19 18:04:01 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.81
-
-Mon Jul 17 14:53:51 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * variable.c (rb_const_get): æœªåˆæœŸåŒ–ã®CONSTANTã®å€¤ã‚’nilã«ã—ãŸï¼Žã—
- ã‹ã—,今後ã¾ãŸä¾‹å¤–ã«æˆ»ã™å¯èƒ½æ€§ã¯ã‚る.è¦ã¯optionalãªã‚¯ãƒ©ã‚¹/モジュー
- ルãŒå­˜åœ¨ã™ã‚‹ã‹ãƒã‚§ãƒƒã‚¯ã—ãŸã„ã ã‘ãªã‚“ã ãªï¼Ž
-
- * st.c (int): grow_factorを固定ã«ã—ãŸ(大嶋ã•ã‚“ã®ãƒžã‚·ãƒ³ã«å¯¾å¿œ).
-
-Fri Jul 14 00:48:40 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * ext/extmk.rb.in: キャッシュã®ãƒã‚°ã‚’修正.
-
- * parse.y (var_extend): #{$æ•°å­—}ã«å¯¾å¿œã—ãŸï¼Ž
-
- * dln.c (dln_load_1): `Init_FILENAME'ã ã‘を有効ã«ï¼Ž`init_*'ã¯ä»Šå¾Œ
- 実行ã—ãªã„.
-
- * ext/etc/etc.c : Etcモジュールを拡張モジュールã¨ã—ã¦åˆ†é›¢ï¼Žå®Ÿã¯NT
- 対応ã¸ã®å¸ƒçŸ³ã ã£ãŸã‚Šã™ã‚‹ã‹ã‚‚ã—れãªã„.
-
-Tue Jul 11 17:12:48 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * gcc -Wallã§å‡ºãŸwarningã‚’å…ƒã«ã‚½ãƒ¼ã‚¹ã‚’変更.
-
- * signal.c (trap): typo.
-
-Fri Jul 7 10:08:51 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.80
-
- * ruby.texi: texinfo documentã‚’æä¾›ï¼Žspecã¨ruby.1ã¯ç„¡ããªã£ãŸï¼Ž
-
- * signal.c (Ftrap): 割込ã¿ç¦æ­¢ä¸­ã®ä¾‹å¤–発生ã«å¯¾å¿œï¼Ž
-
- * eval.c (Flambda): Blockオブジェクトを返ã™ï¼ŽBlock.newã¨åŒç¾©ï¼Ž
-
-Thu Jul 6 00:35:03 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * signal.c (Ftrap): SIG_DFLã®å‡¦ç†ã‚’変更.SIGINTã¸ã®ãƒ‡ãƒ•ォルトãƒãƒ³
- ドラを用æ„(例外を発生ã™ã‚‹).
-
- * file.c (Sfile_expand_fname): パスåを絶対パスã«å±•é–‹ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ï¼Ž
- (Sfile_basename): basenameを得るメソッド.拡張å­ã‚‚外ã›ã‚‹ï¼Ž
- (Sfile_dirname): basenameã®å対.
-
- * eval.c (rb_call): argument評価中ã®ä¾‹å¤–発生ã«å¯¾å¿œï¼Ž
-
- * file.c (Ftest): `M', `A', `C'を追加.
-
-Tue Jul 4 12:36:33 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * file.c (Ftest): ファイルテスト用メソッド.
-
- * ruby.c (proc_options): `-r'オプションを追加.
-
- * parse.y (f_args): デフォルト引数を追加.
-
- * eval.c (rb_call): 該当ã™ã‚‹å¼•æ•°ãŒç„¡ã„時,rest引数ã®å€¤ã‚’nilã«ï¼Ž
-
- * numeric.c (num_equal): 数値以外ã¨ã®æ¯”較ã§ä¾‹å¤–ãŒç™ºç”Ÿã—ã¦ã„ãŸï¼Ž
- FALSEã‚’è¿”ã™ã‚ˆã†ã«ï¼Ž
-
- * eval.c (masign): 多é‡ä»£å…¥ã®rest部ã®å‹•作ãŒãŠã‹ã—ã‹ã£ãŸï¼Ž
-
-Sat Jun 17 01:03:16 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * parse.y (gettable): æœªåˆæœŸåŒ–ã®ãƒ­ãƒ¼ã‚«ãƒ«å¤‰æ•°ã®å‚ç…§(独立ã—ãŸè­˜åˆ¥å­)
- ã¯æ­£å¼ã«ãƒ¡ã‚½ãƒƒãƒ‰å‘¼ã³å‡ºã—ã¨ã—ãŸï¼Ž
-
- * parse.y (read_escape): tokenbufを使ã‚ãªã„よã†ã«ä¿®æ­£ï¼Žãれã«ã¨ã‚‚
- ãªã„,`\C-x',`\M-x'ãªã©ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—表ç¾ã‚’復活.ã“れã§ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³
- トã¨å®Ÿéš›ã®å‡¦ç†ç³»ãŒä¸€è‡´ã—ãŸï¼Ž
-
-Thu Jun 15 15:42:00 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * re.c (re_regcomp): cacheã®ãƒã‚§ãƒƒã‚¯ã‚’改善.
-
-Mon Jun 12 18:50:51 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * version 0.79
-
-Sat Jun 10 00:25:01 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
-
- * re.c (re_regcomp): cache判定ã«`$='ã®å€¤ã‚‚åæ˜ ã•ã›ãŸï¼Ž
-
- * sample/test.rb: test suite作æˆï¼Ž
-
-Fri Jun 9 15:58:34 1995 Yukihiro Matsumoto <matz@ix-02>
-
- * re.c (re_regcomp): cacheã®åˆ¤å®šãŒé–“é•ã£ã¦ã„ãŸï¼Ž
-
-Fri Jun 9 00:01:35 1995 Yukihiro Matsumoto (matz@dyna)
-
- * eval.c (rb_yield): block構造体ã«åˆæœŸåŒ–ã—ã¦ã„ãªã„メンãƒ(iter)ãŒã‚ã£
- ãŸã®ã§ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã®ãƒã‚¹ãƒˆãŒæ­£ã—ã動作ã—ãªã‹ã£ãŸï¼Ž
-
-Thu Jun 8 00:59:03 1995 Yukihiro Matsumoto (matz@dyna)
-
- * re.c (=~): String以外ã¨ã®æ¯”較ãŒFALSEã‚’è¿”ã™ã‚ˆã†ã«(例外を発生ã—ã¦
- ã„ãŸ).
-
- * extmk.rb.in: 判定ã—ãŸå€¤ã‚’ファイルã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã™ã‚‹ã‚ˆã†ã«ã—ãŸï¼Ž
-
- * assoc.c (to_a): to_aメソッドãŒå†å®šç¾©ã•れã¦ã„ãªã‹ã£ãŸï¼Ž
-
- * eval.c (rb_eval): åˆæœŸåŒ–ã•れã¦ã„ãªã„ローカル変数ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’引
- æ•°ã®ç„¡ã„メソッド呼ã³å‡ºã—ã¨è§£é‡ˆã™ã‚‹ï¼ŽãŸã ã—,(ç¾çжã§ã¯)メソッドãŒ
- 定義ã•れã¦ã„ãªã„å ´åˆï¼Œã‚¨ãƒ©ãƒ¼ã«ã›ãšå¤‰æ•°æœªåˆæœŸåŒ–ã®waringを出ã—ã¦
- nilã‚’è¿”ã—ã¦ã„る.「ruby -pe printã€ãªã©ãŒå®Ÿè¡Œã§ãã‚‹ã¨ã„ã†æ„味ã§
- ã¯ã‚りãŒãŸã„ã“ã®ä»•様ã¯ï¼Œã—ã‹ã—ä»Šå¾Œã®æ¤œè¨ŽãŒå¿…è¦ã§ã‚る.-- メソッ
- ド呼ã³å‡ºã—ã¨ã™ã‚‹ã®ã‚’æ­¢ã‚ã‚‹ã‹(以å‰ã®ä»•様),ã„ã¤ã‚‚メソッド呼ã³å‡ºã—
- ã¨ã™ã‚‹(未定義ãªã‚‰ã°ã‚¨ãƒ©ãƒ¼)ã‹ï¼Œä»Šã®ä»•様ã§è¡Œãã‹ï¼Ž
-
- * eval.c (rb_eval): åˆæœŸåŒ–ã•れã¦ã„ãªã„ローカル変数ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã§
- (evalãªã©ã§)åˆæœŸåŒ–ã•れãŸäº‹ãŒåˆ†ã‹ã£ãŸæ™‚ã«ã¯ä»¥å¾ŒåˆæœŸåŒ–ã•れãŸãƒ­ãƒ¼ã‚«
- ル変数ã¨ã¿ãªã™ï¼Ž
-
-Wed Jun 7 11:58:12 1995 Yukihiro Matsumoto <matz@ix-02>
-
- * eval.c (rb_fail): 例外処ç†å¾Œã‚‚`$!'をクリアã—ãªã„よã†ã«ï¼Ž
- (rb_fail): `$!'å¤‰æ•°ã«æœ€å¾Œã«æ”¹è¡Œã‚’追加ã—ãªã„.
-
- * io.c (Fprint): privateメソッドã«å¤‰æ›´ï¼Žå¼•æ•°ã‚’å–らãªã„時ã®å‹•作を変
- æ›´(`$_'を出力ã™ã‚‹).
- (Fio_print): 出力先指定ã®printメソッド.
- (Fio_printf): 出力先指定ã®printfメソッド.
-
- * parse.y: not演算å­ã®è¿½åŠ ï¼Žå„ªå…ˆé †ä½ã®ä½Žã„`!'演算å­ï¼Ž
-
-Mon Jun 5 19:00:55 1995 Yukihiro Matsumoto <matz@ix-02>
-
- * version 0.78
-
-Fri Jun 2 17:52:03 1995 Yukihiro Matsumoto <matz@ix-02>
-
- * ruby.c (proc_options): -Iオプションã§`$:'ã¸ã®è¿½åŠ ã•れる順番を修
- æ­£ã—ãŸï¼Ž
-
-Fri Jun 2 00:36:34 1995 Yukihiro Matsumoto (matz@dyna)
-
- * parse.y: while修飾å­ã®å‹•作を通常ã®whileã¨åŒã˜ã«ã—ãŸï¼ŽãŸã ã—,
- beginå¼ã¸ã®while修飾å­ã ã‘ã¯do..whileåž‹ã®ãƒ«ãƒ¼ãƒ—ã¨ãªã‚‹ï¼Ž
-
-Wed May 31 18:36:30 1995 Yukihiro Matsumoto <matz@ix-02>
-
- * version 0.77
-
-Mon May 29 18:39:37 1995 Yukihiro Matsumoto <matz@ix-02>
-
- * ext/extmk.rb.in (install): 拡張モジュールもインストールã§ãるよ
- ã†ã«ï¼Ž
-
-Fri May 26 14:43:01 1995 Yukihiro Matsumoto <matz@ix-02>
-
- * process.c (Fsystem): 戻り値をサブプロセスã®å¤±æ•—/æˆåŠŸã‚’è¡¨ã™çœŸå½å€¤
- ã«ã—ãŸï¼Žçµ‚了ステータスã¯`$?'ã§å¾—る.
-
-Tue May 23 10:58:11 1995 Yukihiro Matsumoto <matz@ix-02>
-
- * string.c (Fstr_upto): ç„¡é™ãƒ«ãƒ¼ãƒ—ã«é™¥ã‚‰ãªã„よã†ã«ï¼Ž
-
- * parse.y (cond): `||'ãªã©ã®å³è¾ºã«åˆ¶å¾¡å¼ãŒæ›¸ã‘るよã†ã«ï¼Œæ¡ä»¶å¼ãŒã‹
- ãªã‚‰ãšã—も値をæŒãŸãªãã¦ã‚‚良ã„よã†ã«ã—ãŸï¼Ž
-
- * ext/marshal/marshal.c: オブジェクトã®èª­ã¿æ›¸ãをメソッドã®å†å®šç¾©
- ã§ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã§ãるよã†ã«ï¼Žã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒ`_dump_to'ã¨ã„ã†ãƒ¡ã‚½ãƒƒ
- ドを定義ã—ã¦ã„る時ã¯ãã¡ã‚‰ã‚’使ã†ã‚ˆã†ã«ï¼Ž
-
- * ext/extmk.rb.in: static linkも設定ã§ãるよã†ãªä»•様ã«ã—ãŸï¼Ž
- ext/Setupã¨ã„ã†ãƒ•ァイルã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªåを記述ã™ã‚‹ã¨ãã®ãƒ‡ã‚£ãƒ¬ã‚¯
- トリã«å­˜åœ¨ã™ã‚‹ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯static linkã•れる(ã¯ãš).
-
- * eval.c (rb_eval): `..'を文法ã«çµ„ã¿è¾¼ã¿ï¼Œ`..'ã¨`...'ã®å‹•作をperl
- ã«åˆã‚ã›ãŸï¼Ž
-
-Sat May 20 01:22:48 1995 Yukihiro Matsumoto (matz@dyna)
-
- * io.c (select): timeout時ã¨å‰²è¾¼ã¿æ™‚ã®å‹•ä½œã®æ˜Žç¢ºåŒ–.
-
-Fri May 19 15:33:23 1995 Yukihiro Matsumoto <matz@ix-02>
-
- * version 0.76
-
-Fri May 19 00:48:08 1995 Yukihiro Matsumoto (matz@dyna)
-
- * string.c (Fstr_each): ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ãƒ–ãƒ­ãƒƒã‚¯ä¸­ã§æ–‡å­—列ã®å¤‰æ›´ãŒè¡Œã‚れ
- ãŸã‹ã©ã†ã‹ã‚’ãƒã‚§ãƒƒã‚¯ï¼Žãƒã‚¤ãƒ³ã‚¿ã®å€¤ãŒå¤‰ã‚ã£ã¦ã„れã°ä¾‹å¤–を発生ã™ã‚‹ï¼Ž
-
- * ruby-mode.el: ruby-electric-braceã®æ–°è¨­ï¼Ž
-
-Thu May 18 12:27:23 1995 Yukihiro Matsumoto <matz@ix-02>
-
- * string.c (Fstr_tr): trã®ç½®æ›å¯¾è±¡ã«`\0'ã‚’å«ã‚€æ™‚ã«æ­£ã—ãç½®æ›ã‚’行ã‚
- ãªã„ãƒã‚°ãŒã‚ã£ãŸï¼Žæ›´ã«ç½®æ›æ–‡å­—列をASCIIé †ã«æŒ‡å®šã—ãªã„ã¨å‹•作ã—ãª
- ã„å•題もã‚ã£ãŸï¼Žçµæžœã¨ã—ã¦trã‚’æ›¸ãæ›ãˆãŸã®ã§ï¼Œcopyrightã®å•題ã¯
- ç„¡ããªã£ãŸ(ã¨æ€ã†).
-
- * gc.c (gc): the_scopeをマークã—ã¦ã„ãªã‹ã£ãŸã®ã§ï¼Œãƒ­ãƒ¼ã‚«ãƒ«å¤‰æ•°ã®æŒ‡
- ã—ã¦ã„るオブジェクトãŒé–“é•ã£ã¦é–‹æ”¾ã•れる場åˆãŒã‚ã£ãŸï¼Ž
-
- * gc.c (mark_locations_array): 若干ã®é«˜é€ŸåŒ–.
-
-Mon May 15 11:43:49 1995 Yukihiro Matsumoto <matz@ix-02>
-
- * ext/extmk.rb.in: Dynamic Loadモジュールã®ã‚³ãƒ³ãƒ‘イル用ãƒã‚§ãƒƒã‚¯ã‚’
- 行ã†ruby script.autoconfã«è¿‘ã„æ„Ÿè¦šã§ä½¿ãˆã‚‹ï¼Žæ–°ã—ã„モジュールを
- æä¾›ã—ãŸã„人ã¯extã®ä¸‹ã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’作るã ã‘ã§è‰¯ã„.必須ã®ãƒ•ã‚¡
- イルã¯ãƒ•ァイルåã®ä¸€è¦§ã‚’記録ã—ãŸ`MANIFEST'ã¨ã„ã†ãƒ•ァイルã®ã¿ï¼Žå¿…
- è¦ã«å¿œã˜ã¦`depend'(ファイルã®ä¾å­˜é–¢ä¿‚を記述ã™ã‚‹ãƒ•ァイル gcc -MM
- ã®å‡ºåŠ›),`extconf.rb'(コンパイル用ã«ãƒ©ã‚¤ãƒ–ラリã¨é–¢æ•°ã®å­˜åœ¨ãƒã‚§ãƒƒ
- クã™ã‚‹ãƒ•ァイル)を用æ„ã§ãる.
-
- * eval.c (rb_call): rubyメソッドã®å¼•æ•°ãƒã‚§ãƒƒã‚¯æ™‚ã«æœªåˆæœŸåŒ–ã®
- jmp_bufを使用ã—ã¦ã„ãŸï¼Ž
-
- * parse.y: `or'ã¨`and'ã®å„ªå…ˆé †ä½ã‚’åŒã˜ã«ã—ãŸï¼Ž
-
-Wed May 3 18:21:36 1995 Yukihiro Matsumoto (matz@dyna)
-
- * dln.c: Linuxã§ã¯`__.SYMDEF/'ã§ã‚ã£ãŸï¼Ž
-
- * dln.c: system callã®ã‚¨ãƒ©ãƒ¼ãƒã‚§ãƒƒã‚¯ã‚’忘れã¦ã„ãŸï¼Ž
-
-Wed Apr 26 09:50:56 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y: イテレータブロックã®å¤‰æ•°å®£è¨€ã‚’`|'ã§æ‹¬ã‚‹ã‚ˆã†ã«ã—ãŸï¼Žã“れ
- ã§ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿å¤‰æ•°ãŒãªã„時ã¯å®£è¨€ãã®ã‚‚ã®ã‚’çœç•¥ã§ãる.文法ã®å¤‰æ›´ã¯
- ä¹…ã—ã¶ã‚Šã ï¼Ž
-
-Tue Apr 25 12:04:17 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * eval.c(require): loadã‹ã‚‰ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯ãƒ­ãƒ¼ãƒ‰ã®æ©Ÿèƒ½ã‚’ç§»ã—ã¦ããŸï¼Ž
- ã•ã‚‰ã«æ‹¡å¼µå­ã®è£œå®Œæ©Ÿèƒ½ã‚’追加ã—ã¦ãƒ¦ãƒ¼ã‚¶ãŒdln/dlopenã®å·®ã‚’æ„è­˜ã™ã‚‹
- å¿…è¦ã®ãªã„よã†ã«ã—ãŸï¼Ž
-
- * string.c(sub,sub): イテレータã¨ã—ã¦ã‚‚動作ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * object.c: init_object -> initialize.
-
-Mon Apr 24 14:22:39 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * NEWS-OS 3.4対応
-
- * io.c: Solarisã®stdioã®å‹•作ãŒé•ã†ã‚ˆã†ã ï¼Žsignalã§EOFã‚’è¿”ã—ã¦ã—ã¾
- ã†â€¦ï¼Žperlã§ã‚‚åŒæ§˜ã®å•題ãŒã‚る.
-
-Fri Apr 21 20:04:39 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * version 0.75
-
- * signal.c: trapãŒãªããªã£ã¦ã„ãŸï¼Žã†ãƒ¼ã‚€ï¼Ž
-
- * configure: Solaris 2.3対応.
-
- * io.c: #elifã®ãªã„cppã‚‚ã‚る.
-
- * dir.c: autoconf 2.xã¸ã®å¯¾å¿œãŒä¸å分
-
-Thu Apr 20 12:31:24 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * version 0.74
-
- * env.h, gc.c, regex.c: IRIXã¸ã®ç§»æ¤å¯¾å¿œ
-
- * configure: dlopen用ã«picを生æˆã™ã‚‹optionã®æ¤œå‡ºã®ãŸã‚,システムタ
- イプをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã‚ˆã†ã«ï¼Ž
-
-Tue Apr 18 19:08:17 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * gc.c(xrealloc): ptr=nilã®æ™‚,malloc()ã¨åŒã˜åƒãã‚’
-
- * array.c(astore): 空ã®é…列ã®0番目ã®è¦ç´ ã«ä»£å…¥ã™ã‚‹ã¨size=0ã§
- realloc()を呼んã§ã„ãŸï¼Ž
-
- * configure, glob.c: Solaris 2.xã§ã‚³ãƒ³ãƒ‘イルã§ãるよã†ã«
-
-Mon Apr 10 18:36:06 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * version 0.73
-
-Fri Apr 7 13:51:08 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * cons.c->assoc.c: consã®ä½™è¨ˆãªæ©Ÿèƒ½ã¯å¤–ã—ã¦pairã¨ã—ã¦ã®æ©Ÿèƒ½ã ã‘ã‚’
- 残ã—ãŸï¼ŽEnumerableã‚’includeã™ã‚‹ã®ã‚‚ã‚„ã‚ãŸï¼Ž
-
- * string.c(esub): 文字列置æ›ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ï¼Žperlã®s///eã®ç›¸å½“ã™ã‚‹ï¼Ž
-
-Wed Apr 5 11:35:21 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * version 0.72
-
- * EWS4800対応
-
- * file.c: utimesãŒãªã„時ã¯utimeを使ã†ã‚ˆã†ã«ï¼Ž
-
-Mon Apr 3 15:19:41 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * version 0.71
-
- * regexp.c(re_match): ãƒã‚°ãŒã‚ã£ãŸï¼Žmatch_2を削除ã—ãŸæ™‚ã«enbugã—ã¦
- ã„ãŸã®ã ã£ãŸï¼Ž
-
-Mon Mar 27 15:41:43 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * dict.c: Dict->Hashã«å…¨é¢çš„ã«ç§»è¡Œï¼Ž
-
-Thu Mar 23 20:30:00 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * dbm.c,socket.c: extディレクトリã«åˆ†é›¢ï¼Ž
-
- * configure: dln周りã®ãƒã‚§ãƒƒã‚¯ã®å¼·åŒ–
-
- * dln.c: initã®å‘¼ã³å‡ºã—ã‚’dlopen()版ã«åˆã‚ã›ãŸï¼Ž
-
-Mon Mar 20 17:45:08 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * configure: autoconf 2.2ã«å¯¾å¿œ(一部).
-
-Fri Mar 17 15:56:44 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * dln.c: dlopenã®ã‚るマシンã§ã¯ãã¡ã‚‰ã‚’使ã†ã‚ˆã†ã«ï¼ŽãŸã ã—,ã¡ã‚ƒã‚“
- ã¨å‹•ã„ã¦ã„ã‚‹ã‹ã©ã†ã‹ã¯è‡ªä¿¡ãŒãªã„.
-
- * regex.c: virtual concatinationã‚’ã‚„ã‚ãŸï¼Ž
-
-Thu Mar 16 11:32:57 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * version 0.70
-
- * eval.c,regex.c: gccã§ã®ã‚³ãƒ³ãƒ‘イルエラー.
-
- * io.c: inplace-editã§æ‹¡å¼µå­ãŒæŒ‡å®šã•れãªã„å ´åˆï¼Œã‚‚ã¨ã®ãƒ•ァイルを削
- 除ã™ã‚‹ï¼Ž
-
-Wed Mar 15 14:59:18 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * version 0.69
-
- * eval.c(method_missing): unknownã‹ã‚‰å称変更.
-
- * eval.c(single_method_added): 特異メソッドãŒå®šç¾©ã•ã‚ŒãŸæ™‚ã«å‘¼ã°ã‚Œ
- るメソッド.hookã¨ã—ã¦ä½¿ãˆã‚‹ï¼Žå®Ÿéš›ã«å®šç¾©ã•れる直å‰ã«å‘¼ã°ã‚Œã‚‹ï¼Ž
-
-Tue Mar 14 14:46:44 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * ruby.c(proc_options): 引数ã®è§£æžã‚’自分ã§ã‚„ã‚‹ã“ã¨ã«ã‚ˆã‚Šå¼•数指定ã®
- 方法ãŒperlã«è¿‘付ã„ãŸï¼Žgetopt_longã¯ã‚‚ã†ä½¿ã‚ãªã„.
-
- * dir.c(glob): `{}'ã®ãƒã‚¹ãƒˆã‚’許ã™ã‚ˆã†ã«ã—ãŸï¼Ž
-
-Mon Mar 13 17:56:25 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * glob.c: Glob(ワイルドカードオブジェクト)ã¯ãªããªã£ãŸï¼Žãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼
- ドã®å±•é–‹ã¯Dir.glob(文字列)を使ã†ï¼Žãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ã®ãƒžãƒƒãƒã¯æ­£è¦è¡¨
- ç¾ã§ä»£ç”¨ï¼Ž
-
-Fri Mar 10 18:35:46 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * eval.c: Mathã®ã‚ˆã†ãªãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯è‡ªåˆ†è‡ªèº«ã§extendã™ã‚‹ï¼Ž
-
- * eval.c: クラスやモジュールを定義ã™ã‚‹æ™‚,既ã«åŒåã®ã‚‚ã®ãŒã‚れã°è¿½
- 加定義ã¨ãªã‚‹ã‚ˆã†ã«ï¼ŽãŸã ã—.superクラスã®é•ã„ãªã©ã¯ãƒã‚§ãƒƒã‚¯ã™ã‚‹ï¼Ž
-
- * regex.c: debug.
-
- * math.c: 定数PIã¨Eを定義.
-
-Thu Mar 9 21:35:12 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * regex.c: EUC,SJISモードã§ã¯0x80以上ã®8進,16é€²ãƒªãƒ†ãƒ©ãƒ«ã‚’ç¦æ­¢ï¼Ž
-
- * regex.c: クラス内ã§ã‚‚数値リテラル・文字クラスãŒä½¿ãˆã‚‹ã‚ˆã†ã—ãŸï¼Ž
-
-Wed Mar 8 17:39:05 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * regex.c: \200ãªã©æ‹¬å¼§ã®æ•°ä»¥ä¸Šã®è¡¨ç¾ã¯8進リテラルã¨è§£é‡ˆã™ã‚‹ï¼ŽãŸã 
- ã—,\1ã‹ã‚‰\9ã¾ã§ã¯ä¾‹å¤–.
-
- * regex.c: \9以上ã®ãƒªãƒ•ァレンスも有効ã«ã—ãŸï¼Ž
-
-Tue Mar 7 14:26:01 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * eval.c(public/private): スコープ制御メソッドã®å称変更.é™çš„ãªã‚¢
- クセスも出æ¥ã‚‹ã‚ˆã†ã«ã—ã¦ã¿ãŸãŒï¼Œä¸æŽ¡ç”¨ï¼Ž
-
-Mon Mar 6 19:34:32 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * eval.c(inlcude): メソッド化.動的ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’インクルードã§ã
- るよã†ã«ï¼Žã•らã«ä»»æ„ã®ã‚ªãƒ–ジェクトã«ã‚‚モジュールをインクルードã§
- ãるメソッド `extend'も用æ„ã—ãŸï¼Ž
-
- * parse.y: 文法ã‹ã‚‰includeを削除.メソッド化.
-
-Tue Feb 28 15:35:10 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y: é…列,連想é…åˆ—ã®æœ€å¾Œã«`,'ã‚’ãŠã‘るよã†ã«ï¼Ž
-
-Fri Feb 24 13:15:43 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * version 0.68
-
-Thu Feb 23 11:19:19 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * eval.c: resque節ã®selfã®å€¤ãŒé–“é•ã£ã¦ã„ãŸï¼Ž
-
- * eval.c(rb_clear_cache): キャッシュã®ã‚¯ãƒªã‚¢ã—忘れãŒã‚ã£ãŸï¼Ž
-
- * eval.c: 定数ã®ã‚¹ã‚³ãƒ¼ãƒ—をクラス内ã®é™çš„スコープã«å¤‰æ›´ã—ãŸï¼Žã“れã«
- よã£ã¦ï¼Œç‰¹ç•°ãƒ¡ã‚½ãƒƒãƒ‰ã‹ã‚‰å‚ç…§ã•れる定数ã¯ï¼Œãƒ¬ã‚·ãƒ¼ãƒã®ã‚¯ãƒ©ã‚¹ã§ã¯ãª
- ã,定義ã•れãŸã‚¹ã‚³ãƒ¼ãƒ—ã®ã‚¯ãƒ©ã‚¹ã®å®šæ•°ã¨ãªã‚‹ï¼Ž
-
-Wed Feb 22 00:51:38 1995 Yukihiro Matsumoto (matz@dyna)
-
- * regex.c: ignorecaseã‚’æ­£è¦è¡¨ç¾ã®ã‚³ãƒ³ãƒ‘イルå‰ã«æŒ‡å®šã—ãªã„ã¨æ­£ã—ã
- 動作ã—ãªã„.修正.
-
- * string.c(toupper,tolower): bug fix.
-
- * ENV,VERSION: readonly変数ã‹ã‚‰å®šæ•°ã¸ï¼Ž
-
-Tue Feb 21 18:56:56 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * io.c(STDIN, STDOUT, STDERR): 定数ã¨ã—ã¦å®šç¾©ï¼Ž
-
- * io.c(select): bug fix.
-
- * version 0.67
-
-Mon Feb 20 16:10:14 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y(yylex): 定数を`%識別å­'ã‹ã‚‰ï¼Œç¬¬1文字ãŒå¤§æ–‡å­—ã®è­˜åˆ¥å­ã«å¤‰
- 更.ãれã«ã¨ã‚‚ãªã„クラスã¯å®šæ•°ã¨ãªã£ãŸï¼Ž
-
- * eval.c: クラス定義内ã®selfãŒã‚¯ãƒ©ã‚¹å®šç¾©å¤–部ã®the_classã ã£ãŸï¼Ž
-
- * variable.c(rb_name_class): クラスåã‚’ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å¤‰æ•°ã«æ ¼ç´ã™ã‚‹ï¼Ž
-
-Thu Feb 16 15:36:17 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y: BLOCKã‚’braceã§è¡¨ç¾ã™ã‚‹æ–‡æ³•ã«å¤‰æ›´ã—ãŸã‚‚ã®ã‚’作ã£ã¦ã¿ã‚‹ï¼Ž
- MLã«æç¤ºã—ã¦ã¿ã‚‹ãŒå応ãŒãªã„.
-
- * object.c(do,forever): ãªãã—ãŸï¼Ž
-
-Wed Feb 15 13:20:49 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * re.c(new): 第2引数ãŒä¸Žãˆã‚‰ã‚Œã¦ï¼Œã‹ã¤nilã§ãªã„ã¨ãã ã‘設定ã™ã‚‹ã‚ˆ
- ã†ã«(以å‰ã¯nilã®æ™‚ã«ã‚‚設定を行ãªã£ã¦ã„ãŸ).
-
- * parse.y(parse_regexp): æ­£è¦è¡¨ç¾ãƒªãƒ†ãƒ©ãƒ«ã§å¤§æ–‡å­—å°æ–‡å­—を無視ã™ã‚‹
- ã‹ã©ã†ã‹æŒ‡å®šã§ãるよã†ã«ï¼Ž
-
-Tue Feb 14 00:55:33 1995 Yukihiro Matsumoto (matz@dyna)
-
- * parse.y: (compexpr) -> (expr).
-
-Fri Feb 10 16:30:00 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * ruby.c(load_file): scriptを読ã¿è¾¼ã‚€æ™‚ã ã‘"#!"ã®è§£æžã‚’行ã†ã‚ˆã†ã«ï¼Ž
-
- * ruby.c(readin): ファイル読ã¿è¾¼ã¿æ™‚ã«å…ˆé ­ã«"#!"ãŒã‚り,ãã®è¡ŒãŒ
- "ruby"ã¨ã„ã†æ–‡å­—列をå«ã‚€æ™‚,rubyã«å¼•æ•°ãŒä¸Žãˆã‚‰ã‚Œã¦ã„れã°ï¼Œãã®å¼•
- 数も有効ã«ãªã‚‹ï¼Ž
-
- * parse.y(yylex): コメント行ã®çµ‚りãŒ`\'ã§ã‚ã£ãŸæ™‚,次ã®è¡Œã«ç¶™ç¶šã—
- ã¦ã„ã‚‹ã¨ã¿ãªã™ã‚ˆã†ã«ã—ãŸï¼Ž
-
-Thu Feb 9 16:18:37 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * version 0.66
-
- * parse.y: protectã‚’beginã«å¤‰æ›´ï¼Žbegin..endã¯ä¾‹å¤–処ç†ã ã‘ã§ãªã,
- 文括弧ã¨ã—ã¦ã‚‚åƒãã“ã¨ã«ãªã£ãŸï¼Ž
-
-Wed Feb 1 19:48:24 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * version 0.65
-
- * string.c(str_replace): ç½®ãæ›ãˆã‚‹æ–‡å­—列ã®é•·ã•ãŒç­‰ã—ã„æ™‚メモリコ
- ピーをã—ãªã„.
-
- * string.c(rindex): ãƒã‚°ä¿®æ­£ï¼Ž
-
-Mon Jan 30 11:23:05 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y(value_expr): ifã®ãƒã‚§ãƒƒã‚¯ã‚’追加.
-
- * gc.c(gc_mark): free cellã®æ‰±ã„ã«ãƒã‚°ï¼Ž
-
- * parse.y: 文法ã®å¤‰æ›´(よりシンプルã«).例外を減らã—ãŸï¼Ž
-
-Thu Jan 26 00:52:55 1995 Yukihiro Matsumoto (matz@dyna)
-
- * parse.y: 引数ã¨ã—ã¦é€£æƒ³é…列を置ãã“ã¨ãŒã§ãるよã†ã«ï¼Žã“ã®å ´åˆï¼Œ
- 連想é…åˆ—ãƒªãƒ†ãƒ©ãƒ«ãŒæœ€çµ‚引数ã¨ãªã‚‹ï¼Ž
-
- * parse.y: é…列å‚ç…§ã®`[]'内ãŒç©ºã§ã‚‚よã„ã“ã¨ã«ã—ãŸï¼Ž
-
-Tue Jan 24 14:45:15 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * class.c(rb_include_module): `-v'を指定ã—ãŸæ™‚ã«ã¯includeã—ãŸãƒ¢ã‚¸ãƒ¥ãƒ¼
- ルã¨ã‚¯ãƒ©ã‚¹å®šæ•°ãŒè¡çªã—ã¦ã„ãªã„ã‹ãƒã‚§ãƒƒã‚¯ã™ã‚‹ï¼Ž
-
-Mon Jan 23 10:42:09 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y(rb_class2name): メタクラスã«é–¢ã™ã‚‹bug fix.
-
- * dict.c: Dict[..]ã§è¾žæ›¸ã®ç”ŸæˆãŒå‡ºæ¥ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * array.c: Array[..]ã§é…列ã®ç”ŸæˆãŒå‡ºæ¥ã‚‹ã‚ˆã†ã«ï¼Ž
-
- * parse.y: 辞書ã®è¡¨ç¾ã¨ã—ã¦{a,b,..}ã¨ã„ã†å½¢å¼ã‚‚許ã™ã‚ˆã†ã«ï¼Ž
-
-Fri Jan 20 10:28:38 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * re.c(Regexp.quote): æ­£è¦è¡¨ç¾ã‚’エスケープã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ï¼Ž
-
- * ç„¡é§„ãªrb_intern()を減らã—ãŸï¼Ž
-
- * parse.y: `!', `!=', `!~'を特殊演算å­ã«ã™ã‚‹ï¼Žã‚ˆã£ã¦ã“れらã¯å†å®šç¾©
- ã§ããªããªã£ãŸï¼Ž
-
-Wed Jan 18 13:20:41 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y: æ–‡æ³•ã®æ•´ç†(unless,untilã‚’ãªãã—ãŸ).
-
-Tue Jan 17 11:11:27 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * eval.c: defã§ãƒ¡ã‚½ãƒƒãƒ‰å†å®šç¾©æ™‚ã«ã¯ã‚¹ãƒ¼ãƒ‘ークラスã®ãƒ¡ã‚½ãƒƒãƒ‰ã®å¯è¦–
- 性を継承ã™ã‚‹ï¼Žæœ€åˆã®å®šç¾©ã®æ™‚ã¯ä»Šã¾ã§ã¨åŒã˜ãƒ‡ãƒ•ォルト(トップレベ
- ルã§é–¢æ•°çš„,クラス定義内ã§é€šå¸¸ãƒ¡ã‚½ãƒƒãƒ‰).
-
- * object.c(Class#new): オブジェクトã®ç”Ÿæˆæ™‚ã«é–¢æ•°çš„メソッド
- init_objectãŒå¿…ãšå‘¼ã°ã‚Œã‚‹ã‚ˆã†ã«å¤‰æ›´ï¼Ž
-
- * eval.c: 未定義ã®ãƒ¡ã‚½ãƒƒãƒ‰ã«å¯¾ã—ã¦unknownメソッドãŒå‘¼ã°ã‚Œã‚‹ã‚ˆã†ã«
- ãªã£ãŸï¼Žã‚¨ãƒ©ãƒ¼è¡¨ç¤ºãŒä»Šã¾ã§ã¨åŒã˜ã«ãªã‚‹ã‚ˆã†ã«envを調節ã—ã¦ã„る.
-
-Fri Jan 13 14:40:30 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * gc.c: gcã‚’è‹¥å¹²æ›¸ãæ›ãˆã¦æ•´ç†ã—ãŸï¼ŽãŒï¼Œã‚ã¾ã‚Šå¤‰åŒ–ã¯ãªã‹ã£ãŸã‚ˆã†ã ï¼Ž
-
- * parse.y(yylex): symbolã‚’\symã‹ã‚‰:symã«å¤‰æ›´ã—ãŸï¼Ž
-
-Thu Jan 12 01:39:28 1995 Yukihiro Matsumoto (matz@dyna)
-
- * eval.c: æ–°è¦é–¢æ•° rb_eval_string().
-
- * gc.c: gc_mark()を一部éžå†å¸°åŒ–.
-
- * variable.c(rb_ivar_{get,set}): インスタンス変数ã®ã‚¢ã‚¯ã‚»ã‚¹å‘¨ã‚Šã§
- ãƒã‚§ãƒƒã‚¯ãŒè¶³ã‚Šãªã‹ã£ãŸï¼Ž
-
- * variable.c: クラス定数ã¨ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å¤‰æ•°ã§ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルを共有
- ã™ã‚‹ã‚ˆã†ã«ã—ãŸï¼Ž
-
- * ruby.h: iv_tblã‚’RBasicã‹ã‚‰RObjectã¨RClassã¸ç§»å‹•ã—ãŸï¼Žã“れã«ã‚ˆã‚Šï¼Œ
- Objectã¨Class,Moduleã—ã‹ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å¤‰æ•°ã‚’æŒã¦ãªããªã‚‹ï¼ŽãŒï¼Œãƒ¡ãƒ¢
- リ効率ã¯è‹¥å¹²å‘上ã™ã‚‹ï¼Ž
-
-Tue Jan 10 00:58:20 1995 Yukihiro Matsumoto (matz@dyna)
-
- * 0.64 released
-
- * eval.c: レシーãƒã¨å¼•æ•°ã¯å¸¸ã«iterã§ã¯ãªã„.
-
- * cons.c(aref,aset): negative offset対応.
-
-Mon Jan 9 14:40:39 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y: foo{..}ã®å½¢å¼ã«ãŠã„ã¦ï¼Œfooをローカル変数やクラスåã§ã¯
- ãªã,引数ãªã—ã®é–¢æ•°åž‹ãƒ¡ã‚½ãƒƒãƒ‰å‘¼ã³å‡ºã—ã¨ã¿ãªã™ã‚ˆã†ã«ã—ãŸï¼Ž
-
- * list.c -> cons.c: å称変更(クラスåã‚‚).
-
- * list.c: a::b::c::nilをリスト(a b c)ã¨ã¿ãªã™lispå½¢å¼ã‹ã‚‰ï¼Œa::b::c
- をリスト(a b c)ã¨ã¿ãªã™rubyå½¢å¼ã«å¤‰æ›´ï¼Ž[], []=, eachã‚‚ãれã«ä¼šã‚
- ã›ãŸä»•様ã¨ã™ã‚‹ï¼Ž
-
- * list.c: consペアã¨ã—ã¦ã®æ©Ÿèƒ½ã‚’強調.仕様変更.
-
-Sat Jan 7 01:26:26 1995 Yukihiro Matsumoto (matz@dyna)
-
- * eval.c: 自己代入ã®ä¸å…·åˆä¿®æ­£ï¼Ž
-
- * eval.c(masign): 多é‡ä»£å…¥ãŒé…列もリストもã¨ã‚Œã‚‹ã‚ˆã†ã«ã—ãŸï¼Ž
-
- * list.c: assocã‚’2è¦ç´ ã®é…列ã‹ã‚‰List(CONSペア)ã«å¤‰æ›´ã—ãŸï¼Ž
-
-Fri Jan 6 13:42:12 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y: a[b]+=cã‚„a.b+=cãªã©ã®è‡ªå·±ä»£å…¥å½¢å¼ã§ï¼Œaã‚„bã‚’2度評価ã—ãª
- ããªã£ãŸï¼Ž
-
- * eval.c: iterator設定ã®ãƒã‚°ãƒ•ィックス.
-
- * list.c: Listクラスを新設.
-
-Thu Jan 5 13:55:00 1995 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y: SCOPEã®ãƒ¡ãƒ¢ãƒªãƒªãƒ¼ã‚¯ã‚’ãªãã—ãŸï¼Ž
-
- * eval.c: built-inメソッドã¸ã®å¼•æ•°ã®å¼•ãæ¸¡ã—方を変更ã—ã¦ï¼Œé…列ã®ç”Ÿ
- æˆæ•°ã‚’減らã—ãŸï¼Ž
-
- * re.c: match-dataを毎回生æˆã™ã‚‹ã“ã¨ã‚’ã‚„ã‚ãŸï¼Ž`$~'をアクセスã—ãŸæ™‚
- ã«on-demandã§ç”Ÿæˆã™ã‚‹ï¼Ž
-
- * string.c etc: ä¸å¿…è¦ãªmemmoveã‚’memcpyã«ç½®æ›ï¼Ž
-
- * parse.y: =~, !~ã¯å‰¯ä½œç”¨ãŒã‚ã‚‹ã®ã§ã‚³ãƒ³ãƒ‘イル時ã«å±•é–‹ã§ããªã„.
-
-Tue Jan 3 02:04:36 1995 Yukihiro Matsumoto (matz@dyna)
-
- * eval.c: rest引数ã®bug fix.
-
- * eval.c,gc.c: scopeをオブジェクトã«ã—ãŸï¼Ž
-
- * eval.c: envã¨scopeã®æ‰±ã„を変更ã—ãŸï¼Ž
-
-Wed Dec 28 09:46:57 1994 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y: evalã§ãƒ­ãƒ¼ã‚«ãƒ«å¤‰æ•°ãŒè¿½åŠ ã•れãŸå ´åˆã«å¯¾å¿œã—ãŸï¼Ž
-
- * parse.y: 演算å­ã‚’å«ã‚€aliasã®bug fix.
-
-Tue Dec 27 16:45:20 1994 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y: def A Bã‚’alias A Bã«å¤‰æ›´ï¼Ž
-
- * eval.c: alias関係ã®bug修正.nodeをオブジェクト化ã—ãŸæ™‚ã«enbugã—
- ãŸã‚ˆã†ã ï¼Ž
-
- * signal.c: システムコールã®å†å®šç¾©ã‚’æ­¢ã‚ãŸï¼Ž
-
- * io.c(select): write/exceptã®ãƒ•ラグ設定ã«ãƒã‚°ï¼Ž
-
- * Makefile.in: static link用オプションをMake変数ã¨ã—ã¦ç‹¬ç«‹ã•ã›ãŸï¼Ž
-
-Tue Dec 20 00:46:19 1994 Yukihiro Matsumoto (matz@dyna)
-
- * 0.63 released
-
- * eval.c(rb_call): superã®å‘¼ã³å‡ºã—ã§è½ã¡ã‚‹ï¼Žargc, argvã®è¨­å®šã‚’忘れ
- ã¦ã„ãŸï¼Ž
-
- * parse.y(read_escape): 展開エラー.
-
- * variable.c: 定義済ã¿ã®å¤‰æ•°ã®hookを変更ã—ãªã„よã†ã«ï¼Ž
-
-Mon Dec 19 12:01:10 1994 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y(cond): æ¡ä»¶å¼ã«ä»£å…¥å¼ãŒç½®ã‹ã‚ŒãŸå ´åˆï¼Œ`-v'オプションã§è­¦
- 告ãŒå‡ºã‚‹ã‚ˆã†ã«ï¼Ž
-
- * parse.y(**): 冪乗演算å­`**'ã®å„ªå…ˆé †ä½ã‚’å˜é …演算å­ã‚ˆã‚Šé«˜ãã—ãŸï¼Ž
-
- * parse.y(and,or): 優先順ä½ã®ä½Žã„演算å­`and', `or'.
-
- * 0.62 released.
-
- * eval.c: ä¸å¿…è¦ã«ãªã£ãŸPUSH_ENV, POP_ENVを減らã—ãŸï¼Ž
-
- * env.h: ENVIONã‹ã‚‰selfã‚’ã¯ãšã—ãŸï¼ŽPUSH_ENVã¯superã®æº–å‚™ã®ãŸã‚ã ã‘
- ã«ç”¨ã„ã‚‹ã“ã¨ã«ã—ãŸï¼Ž
-
- * eval.c: 下記ã®ã‚ªãƒ–ジェクト化ã§é…ããªã£ãŸå®Ÿè¡Œé€Ÿåº¦ã‚’ã‚‚ã¨ã«æˆ»ã—ãŸï¼Ž
-
-Mon Dec 17 23:01:10 1994 Yukihiro Matsumoto (matz@ix-02)
-
- * eval.c: env.{argv,argc}ã¨scope.local_varsã®ã‚ªãƒ–ジェクト化.
-
- * eval.c: 1スコープ内ã§è¤‡æ•°Blockを生æˆã—ãŸã¨ãã®ãƒã‚°ã‚’修正.
-
-Fri Dec 16 15:52:06 1994 Yukihiro Matsumoto (matz@ix-02)
-
- * parse.y: `&&'ã¨`||'ã®ä¸¡è¾ºã¯ã„ã¤ã§ã‚‚æ¡ä»¶å¼ã¨ã—ãŸï¼Ž
-
-Thu Dec 15 00:16:04 1994 Yukihiro Matsumoto (matz@dyna)
-
- * eval.c(Block): Blockオブジェクトを実ç¾ï¼Ž
-
- * node.h: NODE_QLISTã¯ãªããªã£ãŸï¼Ž
-
- * eval.c(rb_call): 引数ã¸ã®ä»£å…¥ã‚’åå‰ã§ä¸€ã¤ãšã¤ä»£å…¥ã™ã‚‹ã®ã‚’ã‚„ã‚ã¦ï¼Œ
- 一度ã«ã‚³ãƒ”ーã™ã‚‹ã‚ˆã†ã«ã—ãŸï¼Ž
-
- * eval.c(rb_call): rubyã§è¨˜è¿°ã•れãŸãƒ¡ã‚½ãƒƒãƒ‰ã¸ã®å¼•数渡ã—ã‚’inline化.
-
- * eval.c: イテレータ判定処ç†ã®å…¨é¢æ›¸ãæ›ãˆï¼Žä¸é©åˆ‡ãªã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿å‘¼ã³
- 出ã—ã‚’ãªãã—ãŸï¼Žä¾‹ãˆã°ã€Œ[foo(),bar()]{i|baz(i)}ã€ã§fooã‚‚barもイ
- テレータã¨ã—ã¦å‘¼ã³å‡ºã•れ*ãªã„*.
-
- * eval.c(rb_call): SCOPE処ç†ã‚’inline化.メソッド呼ã³å‡ºã—ã®è‹¥å¹²ã®é«˜
- 速化.
-
-Wed Dec 14 18:09:33 1994 Yukihiro Matsumoto (matz@ix-02)
-
- * node.h: nodeもオブジェクトã«ã™ã‚‹ï¼Žã‚ˆã£ã¦GCã§å›žåŽã•れる.
-
-Thu Dec 8 14:17:29 1994 Yukihiro Matsumoto (matz@ix-02)
-
- * 0.60 released - alpha test baseline.
diff --git a/doc/ChangeLog-1.8.0 b/doc/ChangeLog-1.8.0
deleted file mode 100644
index 0d00266735..0000000000
--- a/doc/ChangeLog-1.8.0
+++ /dev/null
@@ -1,24350 +0,0 @@
-Mon Aug 4 17:21:19 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (class_instance_method_list): methods defined in
- singleton class and extended modules should be included.
- [ruby-dev:21119]
-
-Mon Aug 4 13:05:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (method_proc): should specify YIELD_FUNC_SVALUE.
- [ruby-dev:21107]
-
- * marshal.c (w_object): should not call w_extended for USRMARSHAL
- dump. [ruby-dev:21106]
-
-Mon Aug 4 10:42:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/ui/console/testrunner.rb: Flushed io in the
- Console::TestRunner so that it will output immediately.
-
-Mon Aug 4 10:27:22 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.h: remove unnecessary parentheses. [ruby-dev:20879]
-
-Mon Aug 4 10:00:47 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (receive_responses): raise exception to
- client_thread. Thanks to William Webber.
-
-Mon Aug 4 09:22:53 2003 William Webber <wew@williamwebber.com>
-
- * lib/net/imap.rb: convert RD to RDoc.
-
-Mon Aug 4 02:34:05 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_utime): never use utime() of C runtime.
- [ruby-talk:77782]
-
-Sun Aug 3 23:56:50 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_call_super): should propagate previous block for
- super call. [ruby-talk:77884]
-
-Sun Aug 3 22:07:47 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tkentry.rb: support 'validatecommand' option of
- TkEntry/TkSpinbox widget
-
- * ext/tk/sample/{demos-en,demos-jp}/spin.rb: add
-
-Sun Aug 3 19:25:28 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (call_trace_func): clear exception flag temporarily.
- [ruby-dev:21090]
-
-Sun Aug 3 18:03:44 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * regex.h (re_mbctab): should refer to RUBY_EXPORT. [ruby-ext:02199]
-
- * lib/un.h (help): new. % ruby -run -e help cp
-
-Sun Aug 3 08:53:06 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/{demos-en,demos-jp}/image3.rb: add
-
- * ext/tk/lib/tkcanvas.rb: bug fix on Tk object ID management
-
- * ext/tk/lib/tktext.rb: ditto
-
-Sun Aug 3 02:55:52 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * process.c: modify macro to detect 'MacOS X' [ruby-talk:77849]
-
- * ext/tcltklib/lib/tcltk.rb: bug fix ( NOT MAINTAINED : only
- for running 'line2.rb' demo. )
-
-Sun Aug 3 02:45:06 2003 Koji Arai <jca02266@nifty.ne.jp>
-
- * numeric.c (flo_to_s): get rid of buffer overflow.
-
-Sat Aug 2 23:51:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (appendline): clearerr(3) before raising exception, since
- exception may be captured by rescue. [ruby-talk:77794]
-
-Sat Aug 2 09:58:13 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: bug fix --- TkGrid failed to treat
- RELATIVE PLACEMENT
-
- * ext/tk/sample/demos-en/, demos-jp/: add or modify some
- widget demo scripts
-
-Sat Aug 2 20:59:38 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/https.rb: change an option name.
- :SSLCertStore -> :SSLCertificateStore.
-
-Sat Aug 2 19:18:40 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: respond_to? needs 2nd argument.
- Thanks Jim Bob. [ruby-talk:77796]
-
-Sat Aug 2 15:11:54 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb (--no-undefined): annoying option removed.
-
-Sat Aug 2 14:53:55 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (pkg_config): get configuration by pkg-config. [new]
-
- * ext/openssl/extconf.rb: use pkg_config.
-
-Sat Aug 2 13:45:17 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c: add "#pragma weak" for __libc_ia64_register_backing_store_base.
- [ruby-dev:21072]
-
-Sat Aug 2 14:02:39 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (classname): find regular class name if not set.
- [ruby-dev:20496]
-
-Sat Aug 2 09:58:13 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: bug fix --- forgot to entry a widget class
- name of 'labelframe' widget
-
- * ext/tk/sample/{demos-en,demos-jp}/{labelframe.rb,paned1.rb,
- paned2.rb,spin.rb}: add demo-scripts to the JP/EN widget demos
-
-Sat Aug 2 05:04:30 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tkentry.rb: bug fix of TkEntry#delete
-
- * ext/tk/samples/: bug fix of some widget demos
-
- * ext/tk/lib/tk.rb: support <TkVariable object> == <Symbol>
-
- * ext/tk/lib/*.rb: freeze some object for security reason
-
-Sat Aug 2 03:30:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_obj_singleton_methods): should not go up to
- ancestors unless the recursive flag is set. [ruby-list:38007]
-
- * eval.c (rb_yield_0): expand [] to nil if avalue is set.
- [ruby-dev:21058]
-
- * hash.c (env_each_key): use env_keys to avoid environment modify
- on the fly.
-
- * hash.c (env_each_value): use env_values for safety.
-
- * hash.c (env_each): allocate environment array first.
-
-Fri Aug 2 03:20:00 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * lib/yaml/store.rb (YAML::Store#initialize): filename is first
- argument. Thanks Kent Dahl.
-
-Sat Aug 2 00:49:31 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: refine document.
-
-Fri Aug 1 23:57:45 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_gc_mark_locations): no need to swap arguments.
-
- * gc.c (STACK_LENGTH): insufficient for growing up stack
- architectures.
-
- * gc.c (rb_gc, Init_stack) ditto.
-
-Fri Aug 1 23:33:36 2003 Masatoshi Seki <mas@snow.local.>
-
- * rubytest.rb: set dldpath on darwin.
-
-Fri Aug 1 23:07:38 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: convert RD to RDoc. Thanks William Webber.
- [ruby-doc:456]
-
-Fri Aug 1 19:48:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/syck/rubyext.c (syck_emitter_write_m): forgot to declare
- "self", making it default to "int".
-
- * ext/syck/rubyext.c (syck_emitter_simple_write): ditto.
-
- * gc.c (rb_gc): should mark backing store region on IA64.
-
-Fri Aug 1 18:51:10 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * process.c: bug fix --- preprocessor errors occur on OpenBSD-current
-
-Fri Aug 1 17:13:23 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/extconf.rb: should replace literally.
-
-Fri Aug 1 16:22:57 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_check_readable, rb_io_check_writable): ensure not
- closed at first.
-
- * io.c (rb_io_getline): check readable always. (ruby-bugs:PR#1069)
-
- * io.c (rb_io_each_byte): ditto.
-
-Fri Aug 1 16:02:46 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (READ_DATA_PENDING_PTR): cast to get rid of warnings.
-
- * ext/socket/socket.c (unix_send_io, unix_recv_io): ditto.
-
-Fri Aug 1 15:53:24 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (isInternalCmd): shouldn't return if find end of str.
- [ruby-talk:77678]
-
-Fri Aug 1 13:45:14 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_call_super): propagate previous block if a block is
- given. [ruby-talk:77577]
-
-Fri Aug 1 09:54:38 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_fill): array length may be changed during the
- block execution. [ruby-talk:77579]
-
- * array.c (rb_ary_zip): ditto.
-
- * array.c (rb_ary_fill): ditto.
-
- * hash.c (env_reject_bang): length may be changed during the block
- execution.
-
- * hash.c (env_clear): ditto.
-
-Fri Aug 1 04:58:55 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: bug fix --- forget to eval given block to
- TkRoot.new method
-
- * ext/tk/sample/tkoptdb-safeTk.rb: new sample script
-
-Fri Aug 1 00:52:58 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (Init_stack): IA64 requires STACK_LEVEL_MAX to be less than
- magic number when optimizer turned on, regardless of rlimit
- values.
-
-Thu Jul 31 23:44:00 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/erb.rb: import erb-2.0.4b4.
-
-Thu Jul 31 23:04:45 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/resource.en, ext/tk/sample/resource.jp:
- wrong resource file format
-
- * ext/tk/lib/tk.rb: add Tk::Encoding.{encoding_convertfrom,
- encoding_convertto}
-
- * ext/tk/lib/tk.rb: add TkOptionDB.read_with_encoding to read
- non-utf8 resource file
-
-Thu Jul 31 23:02:47 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/etc/etc.c: revert getenv()'s prototype. use it only when _WIN32
- is not defined.
-
-Thu Jul 31 20:52:40 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: (IMPORTANT BUG FIX) scan of event keywords
- doesn't work on recent versions of Tck/Tk
-
- * ext/tk/lib/tk.rb: initialize error of instance variable on
- TkComposite
-
- * ext/tk/lib/multi-tk.rb: initialize error on encoding-system on
- MultiTkIp
-
- * ext/tk/lib/tk.rb: trouble on destroying widgets
-
- * ext/tk/sample/demos-en/, demos-jp/: add JP and EN version of
- Ruby/Tk widget demos
-
-Thu Jul 31 15:25:12 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * array.c (rb_ary_collect): must get length of array for each
- iteration. reported on [ruby-talk:77500], and fixed by
- K.Sasada <ko1@namikilab.tuat.ac.jp> on [ruby-talk:77504]
-
-Thu Jul 31 14:11:54 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: move gmake specific features
- into GNUmakefile.
-
-Thu Jul 31 12:36:11 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * bin/erb, lib/erb.rb: add explicit trim mode.
-
-Thu Jul 31 04:59:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (rb_num_coerce_relop): export function.
-
-Thu Jul 31 08:18:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit.rb: A useful return code is now set if tests fail when
- running automatically using the Console::TestRunner.
-
-Thu Jul 31 07:59:18 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: wrap the command-proc of TkScale --- pass
- the numeric object to the proc
-
- * ext/tk/lib/tk.rb: better support for widgets created on
- Tk interpreter (without Ruby)
-
- * ext/tk/lib/multi-tk.rb: a little more stable on Multiple Tk
- interpreters running
-
-Thu Jul 31 00:17:19 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (return_code): obsolete.
-
- * lib/net/ftp.rb (last_response_code): new method. lastresp is now
- alias to last_response_code.
-
- * lib/net/ftp.rb (last_response): new method.
-
-Wed Jul 30 23:55:44 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): check has been dropped. "_dump must return
- string." [ruby-dev:21024]
-
-Wed Jul 30 22:35:19 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/mkmf.rb (dir_config): allow multiple directories separated
- by File::PATH_SEPARATOR.
-
- * lib/mkmf.rb (create_makefile): DLDFLAGS include $LDFLAGS again.
- [ruby-talk:76894]
-
- * lib/mkmf.rb (init_mkmf): not default $LDFLAGS to LDFLAGS for
- ruby itself, but default $DLDFLAGS to DLDFLAGS.
-
-Wed Jul 30 16:17:06 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): marshal_dump should not take any
- argument.
-
-Wed Jul 30 15:54:04 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ssl.c (ossl_sslctx_initialize): should initialize
- instance variables. [ruby-talk:77362]
-
-Wed Jul 30 15:39:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (proc_options): -F set compiled regular expression to $;.
- [ruby-talk:77381]
-
- * string.c (Init_String): no setter type check for $;
-
-Wed Jul 30 15:10:02 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * error.c (rb_raise): snprintf() termination moved to
- win32/win32.c.
-
- * win32/win32.c (valid_filename, str_grow): unused.
-
- * win32/win32.c (NTLoginName, ChildRecord): make static.
-
- * win32/win32.c (CreateChild): argument check.
-
- * win32/win32.c (kill): should not call CloseHandle() when
- OpenProcess() failed.
-
- * win32/win32.c (rb_w32_vsnprintf, rb_w32_snprintf): ensure buffer
- terminated. [ruby-talk:69672]
-
-Wed Jul 30 10:54:10 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (get): fix wrong argument name. Thanks to William
- Webber.
-
-Wed Jul 30 10:31:37 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/iconv/iconv.c (iconv_convert): append unchanged portion
- after overflow. [ruby-dev:21006]
-
- * ext/iconv/extconf.rb: check if iconv() 2nd argument is const.
-
-Wed Jul 30 09:31:55 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in (os2-emx): renamed from os2_emx, add flags to
- CFLAGS and LDFLAGS, and remove lib prefix. [ruby-dev:20993]
-
- * file.c (rb_file_s_rename): retry with removing new file on
- DOSISH. [ruby-dev:21007]
-
- * ext/socket/extconf.rb (sendmsg, recvmsg): check functions.
-
- * ext/socket/socket.c (unix_send_io, unix_recv_io): raise
- NotImplementedError unless system calls are available.
-
- * ext/socket/socket.c (sock_initialize): rename from sock_init()
- to get rid of conflict with OS/2 socket library.
-
-Wed Jul 30 07:23:14 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tkentry.rb: fix lack of methods for TkEntry
-
- * ext/tk/lib/multi-tk.rb, ext/tk/lib/tk.rb,
- ext/tk/lib/tkdialog.rb, ext/tk/lib/tkentry.rb,
- ext/tk/sample/safe-tk.rb, ext/tk/sample/tktimer2.rb: bug fix
-
- * ext/tk/lib/multi-tk.rb: MultiTkIp.new_* accept a block to
- eval under the new interpreter
-
-Wed Jul 30 04:36:30 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c,
- ext/tk/lib/tk.rb, ext/tk/lib/tkafter.rb: additional check of
- Tk interpreters' status for a little more safety
-
-Wed Jul 30 02:37:12 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): if object responds to 'marshal_dump',
- Marshal.dump uses it to dump object. unlike '_dump',
- marshal_dump returns any kind of object.
-
- * marshal.c (r_object0): restore instance by calling
- 'marshal_load' method. unlike '_load', it's an instance
- method, to handle cyclic reference.
-
- * marshal.c (marshal_load): all objects read from file should be
- tainted. [ruby-core:01325]
-
-Wed Jul 30 01:47:51 2003 Hugh Sasse <hgs@dmu.ac.uk>
-
- * lib/timeout.rb (Timeout::timeout): execute immediately if sec is
- zero.
-
-Wed Jul 30 01:36:18 2003 Aron Griffis <ruby-talk@griffis1.net>
-
- * ext/socket/socket.c (socks_init): typo fixed. [ruby-talk:77232]
-
-Wed Jul 30 00:48:43 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/extconf.rb: the default value for --enable-socks is
- taken from ENV["SOCKS_SERVER"]. [ruby-talk:77232]
-
- * ruby.c (proc_options): add -W option. -W0 to shut up all warning
- messages. [ruby-talk:77227]
-
- * error.c (rb_warn): no message will be printed if the value of
- $VERBOSE is "nil", i.e. perfect silence.
-
- * ruby.c (verbose_setter): $VERBOSE value is either true, false,
- or nil.
-
- * io.c (Init_IO): no "read" check for $stdin. in addition some
- function names has been changed.
-
-Tue Jul 29 23:10:19 2003 Yoshida Masato <yoshidam@yoshidam.net>
-
- * regex.c (re_match_exec): incorrect multibyte match.
-
-Tue Jul 29 22:36:50 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb (send0): do taint check only when $SAFE > 0
-
-Tue Jul 29 19:20:34 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/fileutils.rb (install): support preserve timestamp.
-
- * instruby.rb (install): use FileUtils::install preserve mode.
-
- * lib/un.rb: new. % ruby -run -e cp -- -p foo bar
-
- * lib/mkmf.rb: use un.rb instead of ftools.rb.
-
- * MANIFEST: add lib/un.rb.
-
- * ext/extmk.rb (INSTALL_PROG, INSTALL_DATA): modify verbose messages.
-
-Tue Jul 29 18:55:22 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: unify coding style.
-
- * lib/net/http.rb: ditto.
-
-Tue Jul 29 17:27:59 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ruby.h (LLONG_MIN): fix typo.
-
-Tue Jul 29 16:38:44 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/smtp.rb (Net::SMTP::send0): add taint check.
-
-Tue Jul 29 15:41:02 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * instruby.rb (install): preserve the timestamp for Mac OS X ranlib
- problem.
-
-Tue Jul 29 01:14:51 2003 Rick Ohnemus <rick_ohnemus@acm.org>
-
- * ruby.h (LLONG_MIN): wrong value.
-
-Mon Jul 28 22:57:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_getc): $stdin may not be IO. [ruby-dev:20973]
-
-Tue Jul 29 16:20:36 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: bug fix and
- change mainloop_abort_on_no_widget_cmd => mainloop_abort_on_exception
- ( to avoid thread timing trouble on accessing destroyed widgets )
-
- * ext/tk/lib/multi-tk.rb: change default mode of
- mainloop_abort_on_exception on multi-tk.rb
-
- * ext/tk/lib/multi-tk.rb: fix a bug of the procedure for
- 'Delete' button on the safe-Tk frmae
-
-Tue Jul 29 12:22:28 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/token.c: prefixed many constants and definitions
- with YAML_ to avoid name clash.
-
- * ext/syck/gram.c: ditto.
-
- * ext/syck/gram.h: ditto.
-
-Tue Jul 29 12:15:37 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/etc/etc.c: add real prototype to getenv().
-
- * win32/win32.h: add arguments to definitions of functions if possible.
-
-Tue Jul 29 08:05:30 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb, ext/tk/lib/tkdialog.rb, ext/tk/lib/tktext.rb,
- ext/tk/sample/tkbiff.rb, ext/tk/sample/tkdialog.rb,
- ext/tk/sample/tkform.rb: bug fix ( tested with Ruby/Tk widget demo )
-
-Tue Jul 29 04:22:08 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/syck.h: Added 'syck' yacc prefixes.
-
- * ext/syck/gram.c: ditto.
-
- * ext/syck/token.c: ditto.
-
- * ext/syck: Added ruby.h reference to source files.
-
-Tue Jul 29 03:53:28 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/net/https.rb (use_ssl=): raise ProtocolError if
- connection is set up already.
-
-Tue Jul 29 01:45:32 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: use RTEST()
-
-Tue Jul 29 01:24:32 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: bug fix
-
- * ext/tk/lib/multi-tk.rb: bug fix and pack options are pssed
- to the safeTk container
-
- * ext/tk/sample/safe-tk.rb: add example for pack options of
- safeTk container
-
-Mon Jul 28 23:23:08 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * file.c (Init_File): IO should include File::Const.
- [ruby-dev:20964]
-
-Mon Jul 28 18:53:03 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/openssl/extconf.rb: check again after pkg-config for MinGW on
- Cygwin.
-
-Mon Jul 28 15:32:04 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_gets): only "gets" should set $_.
-
- * ext/stringio/stringio.c (strio_getline): should not set $_ here.
-
- * io.c (argf_to_s): argf.to_s returns "ARGF".
-
- * io.c (set_defout_var, set_deferr_var): make $defout and $deferr
- obsolete.
-
- * io.c (set_input_var, set_output_var): allow $stdin, $stdout,
- $stderr not to be instance of IO.
-
- * io.c (rb_f_readline): forward method to current_file. gets,
- readline, readlines, getc, readchar, tell, seek, pos=, rewind,
- fileno, to_io, eof, each_line, each_byte, binmode, and closed?
- as well.
-
- * io.c (argf_forward): utility function to forward method to
- current_file.
-
-Mon Jul 28 06:10:13 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: bug fix
-
- * ext/lib/tk/multi-tk.rb: bug fix
-
- * ext/lib/tk/multi-tk.rb: add methods depend on Tcl's 'interp' command
-
- * ext/lib/tk/multi-tk.rb: suppot safe-level control of each interpreter
-
-Mon Jul 28 03:08:47 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb: each() should return self.
-
-Mon Jul 28 01:35:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_chomp_bang): defer rb_str_modify() to actual
- modify point. other methods, replace, tr, delete, squeeze,
- lstrip, and rstrip as well.
-
- * string.c (rb_str_rstrip_bang): remove trailing '\0' at the end
- of string.
-
- * string.c (rb_str_lstrip_bang): do not strip '\0' from the left.
-
-Sun Jul 27 21:16:30 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/openssl/extconf.rb: better support MinGW. add
- dir_config("kerberos") and with_config("pkg-config").
-
- * mkconfig.rb: initialize global variables to avoid warnings.
-
-Sun Jul 27 19:35:06 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: add some methods to support
- multiple interpreters (low level)
-
- * ext/tk/lib/multi-tk.rb: new library to support multiple Tk
- interpreters (high level)
-
- * ext/tcltklib/demo/safeTk.rb: new sample of safeTk interpreter
-
- * ext/tk/sample/safe-tk.rb: new sample of multi-tk.rb
-
- * ext/tk/lib/tk.rb: bug fix and add feature to supprt multi-tk
-
- * ext/tk/lib/tkafter.rb: ditto
-
-Sun Jul 27 14:43:37 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/debug.rb: fix breakpoint parameter parsing/checking.
- (?:(file|class):)(line_number|method)
-
-Sun Jul 27 10:21:28 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/unix.rb: add UNIXFileOwner, UNIXFileGroup.
-
-Sun Jul 27 03:10:43 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * io.c (io_reopen): avoid dup2() equal handles not to close itself and
- to get rid of a msvcrt bug. [ruby-dev:20919]
-
-Sun Jul 27 00:37:16 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/tmpdir.rb: use GetWindowsDirectory, not GetSystemDirectory.
- [ruby-talk:77073]
-
-Sat Jul 26 21:25:21 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (rb_fdopen): set errno if it's zero on win32 platforms.
-
- * ext/openssl/ossl_ssl.c (TO_SOCKET): define special version when
- _WIN32 is defined. this is ruby's problem, not OpenSSL.
-
- * win32/win32.c: remove some old comments.
-
-Sat Jul 26 14:26:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/tk/lib/tk.rb (TkCore::chooseDirectory): back up wrongly
- removed method.
-
-Sat Jul 26 14:14:12 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/stringio/stringio.c: includes Enumerable as well as IO.
- [ruby-talk:77058]
-
-Sat Jul 26 07:00:53 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/erb.rb: fix % line.
-
-Sat Jul 26 05:31:09 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl.h: fix comment.
-
- * ext/openssl/ossl.c (ossl_debug): should enable if no va-args
- macro supplied.
-
-Sat Jul 26 04:04:36 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: refine va-args macro detection.
- [ruby-talk:76983]
-
-Sat Jul 26 01:33:51 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_setup): need to pass the real
- socket to SSL_get_fd on native win32 platforms.
-
-Sat Jul 26 01:20:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_mod_const_missing): "const_missing" should not
- appear in the caller(); add call frame adjustment.
-
- * eval.c (rb_method_missing): simplify call frame adjustment.
-
-Fri Jul 26 00:04:25 2003 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
-
- * ext/openssl/sample: add samples.
- - cert2text.rb: dump certificate file as text.
- - crlstore.rb: CRL store implementation. Fetch CRL via HTTP when
- http-access2 is installed.
- - certstore.rb: certificate store implementation.
- - cert_store_view.rb: certificate store viewer with FXRuby. Uses
- c_rehash.rb, crlstore.rb and certstore.rb.
-
-Fri Jul 25 16:43:03 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: add TclTkIp#create_slave,
- TclTkIp#_make_safe and TclTkIp#safe?
-
- * ext/tcltklib/MANUAL.euc: modify descriptions
-
- * ext/tk/lib/tk.rb: bug fix [ruby-talk:76980] and modify to
- support multi Tk IPs
-
- * ext/tk/lib/tkafter.rb: modify to support multi Tk IPs
-
-Fri Jul 25 15:47:39 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: add check for BN_rand_range() and
- BN_pseudo_rand_range().
-
- * ext/openssl/ossl_bn.c (ossl_bn_s_rand_range): should raise
- NotImplementedError if BN_rand_range() wan not defined.
-
- * ext/openssl/ossl_bn.c (ossl_bn_s_pseudo_rand_range): should raise
- NotImplementedError if BN_pseudo_rand_range() wan not defined.
-
- * ext/openssl/ossl_pkcs7.c (ossl_pkcs7_s_encrypt): avoid compiler
- warning for OpenSSL-0.9.6.
-
- * ext/openssl/ossl_pkcs7.c (ossl_pkcs7si_initialize): ditto.
-
-Fri Jul 25 14:34:55 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (tcp_s_gethostbyname): was using
- uninitialized size_t value. [ruby-talk:76946]
-
-Fri Jul 25 13:38:38 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * re.c (rb_reg_options_m): use rb_reg_options() to mask internal
- flags.
-
- * re.c (rb_reg_initialize_m): allow nil as third argument and
- ignore, and mask code flags if the argument is given.
- [ruby-dev:20885]
-
- * re.c (rb_reg_options): get common flags directly.
-
-Fri Jul 25 03:52:21 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * lib/yaml/dbm.rb: replace indexes with values_at.
-
-Fri Jul 25 02:55:59 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: add check for libsocket and libnsl.
-
- * ext/openssl/extconf.rb: use pkg-config to build CFLAGS and LDFLAGS.
-
-Fri Jul 25 01:27:59 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/emitter.c (syck_emitter_flush): accepts count
- of bytes to flush. anchor offsets now functional.
-
- * ext/syck/syck.h (syck_emitter_flush): ditto.
-
- * ext/syck/rubyext.c: ditto.
-
- * ext/syck/token.c: URI escaping now supported.
-
-Thu Jul 24 16:41:31 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/mkmf.rb (have_type): check if a type is defined.
-
- * lib/mkmf.rb (check_sizeof): check size of a type.
-
- * ext/dbm/extconf.rb: check if type DBM is defined.
- [ruby-talk:76693]
-
-Thu Jul 24 16:18:40 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ChangeLog (add-log-time-format): "%c" contains timezone on
- XEmacs.
-
-Thu Jul 24 16:05:22 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in (AC_C_VOLATILE): check if volatile works.
-
- * defines.h (volatile): removed.
-
- * eval.c (rb_thread_group): Thread#group. [new]
-
-Thu Jul 24 15:50:42 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: add check for win32 OpenSSL libraries.
-
- * ext/openssl/extconf.rb: add check for __VA_ARGS__.
-
- * ext/openssl/ossl.h: avoid non C99 compiler errors.
-
-Thu Jul 24 13:32:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (thgroup_add): no warning for terminated threads.
-
-Thu Jul 24 13:09:26 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb: added.
-
-Thu Jul 24 11:21:10 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/io/wait/extconf.rb: removed unnecessary backward
- compatibility stuff.
-
-Thu Jul 24 11:09:10 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/openssl/extconf.rb: revert use of dir_config.
-
-Thu Jul 24 09:58:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/Win32API/lib/win32/resolv.rb: added.
-
- * lib/resolv.rb: support Win32 platforms. based on Tietew's work
- [ruby-dev:15573].
-
-Thu Jul 24 04:05:46 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ssl.h: undef X509_NAME and PKCS7_SIGNER_INFO to
- avoid name confliction on mswin32.
-
- * ext/openssl/ssl.c (ossl_protect_obj2bio): avoid VC++ warnings
- in function prototype.
-
- * ext/openssl/ssl.c (ossl_protect_membio2str): ditto.
-
- * ext/openssl/ssl.c (ossl_protect_x509_ary2sk): ditto.
-
-Thu Jul 24 03:44:04 2003 Michal Rokos <m.rokos@sh.cvut.cz>
-
- * ext/openssl/extconf.rb: cut check for OpenSSL version
-
-Thu Jul 24 03:41:30 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/tcltklib/tcltklib.c (ip_init): need at least one statement after
- label.
-
-Thu Jul 24 01:48:03 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::QueryExtension::[]): should return StringIO (or
- Tempfile) for multipart/form.
-
- * variable.c (rb_define_const): give warning for non constant
- name. [ruby-core:01287]
-
-Thu Jul 24 01:51:08 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick: imported.
-
- * MANIFEST: added webrick files.
-
-Thu Jul 24 01:32:04 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/tmpdir.rb (tmpdir): new method. remove TMPDIR.
- use GetSystemWindowsDirectory(GetSystemDirectory), not GetTempPath.
-
-Thu Jul 24 01:08:43 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl: imported.
-
-Wed Jul 23 23:06:59 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * file.c (DOSISH): better Cygwin support.
-
-Wed Jul 23 19:13:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_split_m): the receiver may be empty string.
-
-Wed Jul 23 18:43:00 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/erb.rb: import erb-2.0.4b1.
-
-Wed Jul 23 18:21:52 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/io/wait: imported.
-
-Wed Jul 23 16:07:35 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * process.c: unify indentation
-
- * configure.in: add --enable-setreuid option
-
- * ext/tcltklib/tcltklib.c: TclTkIp.new accepts 'ip-name' and 'options'
-
- * ext/tk/lib/tk.rb: support arguments of TclTkIp.new
-
- * ext/tk/lib/tk*.rb: preparations for multi-Tk interpreter support
-
-Wed Jul 23 15:49:01 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_lstrip_bang): strip NUL along with white
- spaces. [ruby-talk:76659]
-
- * string.c (rb_str_rstrip_bang): ditto.
-
-Wed Jul 23 14:19:17 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/mkmf.rb (log_src, checking_for, create_header):
- Logging.message is printf like format.
-
-Wed Jul 23 10:11:15 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/iconv/iconv.c (check_iconv): check if Iconv instance.
-
- * ext/iconv/iconv.c (iconv_convert): stringify argument.
-
-Wed Jul 23 02:39:46 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * process.c: add a module for raw syscalls to control UID/GID
-
- * process.c: add modules for portable UID/GID control
-
-Tue Jul 22 19:16:40 2003 Tanaka Akira <akr@m17n.org>
-
- * ext/iconv/iconv.c (iconv_failure_initialize): limit
- inspect message. [ruby-dev:20785]
-
- * ext/iconv/iconv.c (rb_str_derive): share with original
- string if possible. [ruby-dev:20785]
-
-Tue Jul 22 17:22:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_mod_const_missing): new method. [ruby-core:00441]
-
- * variable.c (rb_const_get_at): allow "const_missing" hook.
-
- * variable.c (rb_const_get_0): ditto.
-
- * eval.c (method_missing): rename from rb_undefined to clarify.
-
- * eval.c (ruby_finalize_0): update exit status if any of END proc
- raises SystemExit. [ruby-core:01256]
-
- * signal.c (rb_trap_exit): wrap rb_eval_cmd
-
- * eval.c (rb_exec_end_proc): reduce rb_protect().
-
-Tue Jul 22 17:15:57 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * MANIFEST (lib/cgi/session/pstore.rb, lib/yaml/baseemitter.rb):
- added.
-
-Tue Jul 22 10:52:19 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/tmpdir.rb: remove charcters after "\000" and regularize path.
-
-Tue Jul 22 02:22:45 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_equal): should not use rb_equal().
-
- * string.c (rb_str_equal): should return nil for non string
- operand to conform comparable convention. [ruby-dev:20759]
-
-Tue Jul 22 00:19:19 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/tmpdir.rb: new library to get temporary directory path,
- using GetTempPath on Win32 environment.
-
- * lib/tempfile.rb: now uses tmpdir.rb.
-
- * lib/cgi/session.rb, ib/drb/unix.rb: ditto.
-
-Mon Jul 21 01:53:43 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_string_value_cstr): check null byte in the string
- before retrieving C ptr. accessed via macro StringValueCStr.
-
- * file.c: use StringValueCStr to retrieve paths to system calls.
-
- * file.c (sys_fail2): raise error for two operand system calls
- such as rename, link, symlink. (ruby-bugs PR#1047)
-
-Sun Jul 20 11:03:25 2003 UENO Katsuhiro <katsu@blue.sky.or.jp>
-
- * ext/zlib/zlib.c (gzfile_read_header): gz->z.input may be nil after
- finishing reading a gzip header.
-
-Sat Jul 19 22:25:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_match2): add warning to "~string".
- [ruby-list:37751]
-
- * lib/net/ftp.rb (Net::FTP::open): takes block. suggested by Gavin
- Sinclair in [ruby-core:01237].
-
-Sat Jul 19 19:03:24 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * wince/stdlib.c: add bsearch().
-
-Sat Jul 19 12:34:45 2003 David Black <dblack@superlink.net>
-
- * lib/scanf.rb: import.
-
-Sat Jul 19 11:27:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/xmlrpc: import.
-
- * eval.c (thgroup_add): should return group for terminated thread
- case.
-
- * eval.c (thgroup_add): do not raise ThreadError on terminated
- thread addition for compatibility. just warning.
-
-Sat Jul 19 04:50:56 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/iconv/charset_alias.rb, ext/iconv/extconf.rb: make wrapper
- script which maps charset names. [ruby-dev:20625]
-
- * ext/iconv/iconv.c (charset_map): charset name map.
-
- * ext/iconv/iconv.c (iconv_dfree): no exception while
- finalization.
-
- * ext/iconv/iconv.c (iconv_s_conv): new method Iconv.conv.
- [ruby-dev:20588]
-
-Sat Jul 19 03:09:18 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/Win32API/lib/win32/registry.rb (Win32::Registry::Error):
- inherit StandardError instead of SystemCallError.
-
-Sat Jul 19 02:00:39 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_attr): extra calls of method_added. [ruby-talk:76361]
-
-Fri Jul 18 18:44:22 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/mkmf.rb (init_mkmf): clear $INSTALLFILES. [ruby-dev:20727]
-
-Fri Jul 18 17:34:39 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/mkmf.rb (rm_f): use FileUtils.
-
- * lib/mkmf.rb (modified?): return mtime of the target if
- it exists and newer than times.
-
- * lib/mkmf.rb (install_files): add a current directory
- file even if it does not exist yet.
-
- * lib/mkmf.rb (configuration): do not add $LDFLAGS to
- DLDFLAGS.
-
- * ext/extmk.rb (extmake): check whether Makefile is newer
- than depend and MANIFEST.
-
-Fri Jul 18 14:57:19 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (make_cmdvector): recognize quote within string.
- based on Nobu's patch ([ruby-win32:450]). [ruby-talk:75853]
-
-Fri Jul 18 13:04:36 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_missing): VCALL is called only for LOCAL_ID. no
- check required.
-
- * parse.y (primary): primary:tFID generates NODE_FCALL.
- [ruby-dev:20641]
-
-Thu Jul 17 18:50:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (match_captures): rename from "groups".
-
-Thu Jul 17 17:57:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_clear_cache_by_class): check both klass and origin.
-
-Thu Jul 17 13:46:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ruby_init): set ruby_running to true after
- initialization.
-
-Thu Jul 17 13:42:53 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/ftools.rb (File::makedirs): do not handle "//" as a directory.
-
-Thu Jul 17 06:40:28 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: recover and fix typo : Tk.chooseDirectory
- (Tk8.4 feature)
-
-Wed Jul 16 16:23:58 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_proc_new): call svalue_to_avalue for yield argument.
-
-Wed Jul 16 00:31:00 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_disable_super, rb_enable_super): deprecate.
-
- * eval.c (thgroup_s_alloc): re-implement group struct.
-
- * eval.c (thgroup_add): add check for enclose and frozen status.
-
-Tue Jul 15 19:50:49 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_add_method, rb_alias): need to clear cache by
- ID when method defined in parent class is cached for
- grand child classes. [ruby-dev:20672]
-
-Tue Jul 15 14:38:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/matrix.rb: remove elements conversion to_f, to_i, to_r.
-
- * lib/cgi/session/pstore.rb: add new file.
-
-Tue Jul 15 03:30:41 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/rubyext.c (syck_mark_emitter): forgot to rb_gc_mark the
- outgoing IO object.
-
-Sun Jul 13 14:55:36 2003 Koji Arai <jca02266@nifty.ne.jp>
-
- * process.c (proc_getgroups, proc_setmaxgroups): fix typo.
-
-Sat Jul 12 17:01:28 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * struct.c (struct_entry): add prototype to avoid VC++ warnings.
-
-Sat Jul 12 04:43:57 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/emitter.c: new emitter code.
-
- * ext/syck/rubyext.c: Emitter class.
-
- * lib/yaml.rb: Load Syck emitter, if available.
-
- * lib/yaml/stream.rb: ditto.
-
- * lib/yaml/baseemitter.rb: underlying class for all emitters.
-
- * lib/yaml/rubytypes.rb: use BaseEmitter abstraction.
-
- * lib/yaml/emitter.rb: ditto.
-
-Sat Jul 12 04:23:13 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_undef): need to clear cache for inherited class.
- (rubicon/builtin/TestModulePrivate.rb:test_undef_method)
-
-Sat Jul 12 01:21:54 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (avalue_to_svalue): typo.
-
- * eval.c (rb_load): rb_prohibit_interrupt must not underflow.
-
- * parse.y (NODE_STRTERM, tokadd_string, parse_string): moved
- string nest level from a static variable to NODE_STRTERM, to
- preserve it from word to word in %W/%w.
-
-Fri Jul 11 22:37:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in (aix): needs ruby.imp even with gcc.
- (ruby-bugs:PR#1007)
-
-Fri Jul 11 18:37:37 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * instruby.rb: do not handle directories. [ruby-dev:20613]
-
-Fri Jul 11 16:09:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * util.c (ruby_strtod): exp should be less than MDMAXEXPT.
-
-Fri Jul 11 07:17:47 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: not create a Tcl/Tk interpreter if already
- defined TkCore::INTERP
-
- * ext/tk/lib/tk.rb: bugfix on TkWindow#configure
-
-Thu Jul 10 14:42:02 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * math.c (math_log): nan takes a dummy argument on Cygwin 1.5.0.
-
-Wed Jul 9 23:50:46 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * regex.c (mbctab_sjis): 0x80 is not shift jis first byte.
- [ruby-dev:20516]
-
-Wed Jul 9 15:38:28 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * instruby.rb: do not install shared libraries as man pages.
-
- * mkconfig.rb: support text-mount on Cygwin.
-
-Wed Jul 9 11:09:57 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * re.c (match_entry): add prototype to avoid VC++ warnings.
-
-Wed Jul 9 03:48:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_load): put rb_load_file() in a thread critical
- section. [ruby-dev:20490]
-
- * eval.c (compile): put rb_compile_string() in a thread critical
- section.
-
-Tue Jul 8 02:35:41 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_const_get_0): should not warn if constant is not
- defined. (ruby-bugs-ja PR#509)
-
- * bignum.c (rb_big2dbl): give a warning on overflow.
- (ruby-bugs-ja PR#510)
-
- * util.c (ruby_strtod): change MDMAXEXPT from 511 to 308.
-
- * pack.c (utf8_to_uv): long is sufficient. LONG_LONG is not
- required.
-
-Tue Jul 8 01:43:16 2003 Koji Arai <jca02266@nifty.ne.jp>
-
- * bignum.c (rb_big2str): support 32 bit (without `long long' type)
- machines. (ruby-bugs-ja PR#512)
-
-Mon Jul 7 10:22:46 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/dbm/extconf.rb (gdbm_compat, qdbm): add check for gdbm_compat
- and qdbm.
-
-Mon Jul 7 01:34:49 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call_super): k->super maybe NULL if klass is Kernel.
- [ruby-dev:20519]
-
- * gc.c (obj_free): clear method cache when freeing class/module.
-
-Sat Jul 5 23:32:06 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_mod_remove_method): allow "remove_method" to accept
- multiple arguments.
-
-Sat Jul 5 00:22:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * node.h (NEW_NODE): cast arguments to rb_node_newnode().
-
-Fri Jul 4 21:48:44 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/syck/rubyext.c, ext/syck/syck.c, ext/syck/syck.h,
- ext/syck/token.c: C++ style comments are not allowed.
- (ruby-bugs:PR#1008)
-
-Thu Jul 3 23:41:30 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/timeout.rb: add optional exception argument for compatibility
- function.
-
-Thu Jul 3 14:22:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_values_at): extract common procedure from
- rb_ary_values_at. follow DRY principle.
-
- * re.c (match_values_at): values_at should understand ranges.
-
- * struct.c (rb_struct_values_at): ditto.
-
- * struct.c (inspect_struct): inspect format changed; add "struct "
- at the top.
-
- * sprintf.c (rb_f_sprintf): "%p" specifier for inspect output.
- (RCR#69)
-
- * eval.c (rb_mod_undef_method): allow "undef_method" to accept
- multiple arguments. (RCR#146)
-
- * lib/timeout.rb: put timeout in Timeout module. (RCR#121)
- [ruby-talk:61028]
-
- * re.c (match_groups): new method added. (RCR#139)
-
- * variable.c (rb_mod_const_of): should exclude constant defined
- in Object, unless retrieving constants of Object.
-
-Thu Jul 3 12:13:05 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/mkmf.rb (VPATH): convert from Windows form to Unix form on
- MinGW. This fixes the build with GNU make 3.80-1 for Cygwin.
-
-Wed Jul 2 23:27:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_new4): do not allocate new string if original
- is frozen or already have copy-on-write entry. [ruby-talk:74940]
-
-Wed Jul 2 13:22:39 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_shared_replace): clear flags before copy.
-
- * string.c (rb_str_replace): ditto.
-
- * eval.c (rb_yield_0): override visibility mode for module_eval
- etc. (ruby-bugs-ja PR#505)
-
-Wed Jul 2 11:45:34 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: synchronize document with source code.
-
- * lib/net/pop.rb: ditto.
-
-Wed Jul 2 11:39:50 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: unify SMTP and SMTPCommand.
-
- * lib/net/smtp.rb: new exception class SMTPError.
-
- * lib/net/smtp.rb: new exception class SMTPAuthenticationError.
-
- * lib/net/smtp.rb: new exception class SMTPServerBusy.
-
- * lib/net/smtp.rb: new exception class SMTPSyntaxError.
-
- * lib/net/smtp.rb: new exception class SMTPFatalError.
-
- * lib/net/smtp.rb: new exception class SMTPUnknownError.
-
- * lib/net/smtp.rb: change critical section protect algorithm.
-
- * lib/net/smtp.rb (SMTP#do_start): check authentication args
- before all.
-
- * lib/net/smtp.rb: new method send_message (alias send_mail).
-
- * lib/net/smtp.rb: new method open_message_stream (alias ready).
-
- * lib/net/pop.rb: POPBadResponse is a POPError.
-
- * lib/net/pop.rb (POPMail#pop): ban ReadAdapter.
-
- * lib/net/pop.rb (POPMail#top): ditto.
-
- * lib/net/pop.rb (POP3Command): change critical section protect
- algorithm.
-
- * lib/net/pop.rb (POP3Command#auth): USER and PASS should be one
- critical block.
-
- * lib/net/pop.rb (POP3Command#retr): ban `dest' argument using
- iterator.
-
- * lib/net/pop.rb (POP3Command#top): ditto.
-
- * lib/net/protocol.rb: #read_message_to -> #each_message_chunk
-
- * lib/net/protocol.rb: #D -> #LOG
-
- * lib/net/protocol.rb: #D_off -> #LOG_off
-
- * lib/net/protocol.rb: #D_on -> #LOG_on
-
-Wed Jul 2 11:10:47 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: set old class aliases for backward
- compatibility. [ruby-talk:74863]
-
- * lib/net/protocol.rb: ditto.
-
-Wed Jul 2 01:32:40 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/net/pop.rb (Net::POP3#start): typofix.
-
-Tue Jul 1 22:08:19 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: TkWindow include TkWinfo
-
- * ext/tk/lib/tk.rb: treat unknown widget classes as subclasses
- of TkWindow
-
-Tue Jul 1 19:02:12 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * parse.y (rb_intern): should use mbclen instead of mblen.
-
-Tue Jul 1 10:36:19 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * class.c (rb_define_class, rb_define_module): also set constant under
- Object. [ruby-dev:20445]
-
- * object.c (boot_defclass): ditto.
-
- * variable.c (rb_const_get_at, rb_const_get_0, rb_mod_const_at,
- rb_const_defined, mod_av_set, rb_const_assign): toplevel constants
- are now under Object, rb_class_tbl remains for GC.
-
-Mon Jun 30 17:53:06 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (mnew): ignore metaclasses have no influence, for rklass.
- [ruby-talk:74706]
-
-Sun Jun 29 06:59:07 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb, lib/drb/invokemethod.rb: import drb-2.0.4
- (use LocalJumpError#reason)
-
-Sat Jun 28 12:28:54 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in (rb_cv_stack_grow_dir): check stack growing direction.
-
- * eval.c (rb_thread_restore_context): prior configuration macro.
-
- * gc.c (ruby_stack_length): always return the address of lower edge.
-
- * gc.c (rb_gc_mark_locations): remove margin. [ruby-dev:20462]
-
- * gc.c (rb_gc, Init_stack): prior configuration macro.
-
- * gc.c (Init_stack): add safety margin.
-
-Fri Jun 27 14:41:22 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * string.c (rb_str_split_m): remove white spaces on the head of
- the last element, when limit is specified. [ruby-talk:74506]
-
-Fri Jun 27 03:24:54 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * io.c (io_fflush): need to check if closed after thread switch.
- [ruby-dev:20351]
-
- * io.c (fptr_finalize): ditto.
-
- * string.c (rb_str_rindex_m): fixed wrong fix. should move backward
- first only when matching from the end.
-
-Thu Jun 26 21:34:49 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * class.c (class_instance_method_list): get rid of warning about
- argument type mismatch, and inline method_list().
- [ruby-core:01198]
-
-Wed Jun 25 14:40:33 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: add and modify methods ---
- TkWidget.database_class, TkWidget.database_classname,
- TkWidget#database_class, TkWidget#database_classname
-
- * ext/tk/lib/tk.rb: instances of a subclass of TkToplevel or
- TkFrame are created with ":class=>subclass" option as default.
-
- * ext/tk/sample/tkoptdb.rb: add a new part
-
-Wed Jun 25 12:52:58 2003 Matthew Dempsky <jivera@flame.org>
-
- * class.c (rb_generic_class_instance_methods): merge argument
- check (and warning) into one function; following DRY principle.
- [ruby-core:01193]
-
-Wed Jun 25 05:49:10 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: add widget destroy hook binding to TkBindTag::ALL
-
- * ext/tk/lib/tkcanvas.rb: Although requiring manual control of GC,
- memory eating problem of TkCanvas Items is fixed.
-
- * ext/tk/lib/tktext.rb: add some methods and bug fix
-
-Wed Jun 25 00:14:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (autoload_delete): should delete Qundef from iv_tbl.
- (ruby-bugs-ja PR#504)
-
-Tue Jun 24 16:46:07 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: bug fix on TkToplevel, TkFrame,
- TkPanedwindow, TkOptionDB
-
- * ext/tk/lib/tk.rb: TkOptionDB --- make it more secure to use procs
- defined on resourceDB
-
- * ext/tk/sample/tkoptdb.rb, resource.ja, resource.en:
- sample script how to use TkOptionDB.
-
-Tue Jun 24 14:22:41 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * lib/yaml/types.rb: replaced Kernel::Hash reference with Object::Hash
- from [ruby-talk:74270]
-
-Tue Jun 24 17:59:30 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_yield_0): show yielded block position not only yielding
- point. [ruby-dev:20441]
-
-Tue Jun 24 16:47:07 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (HTTPHeader#proxy_basic_auth): missing `@'.
- Thanks Douglas Koszerek. (ruby-bugs:PR975)
-
-Tue Jun 24 14:31:17 2003 Minero Aoki <aamine@loveruby.net>
-
- * config.guess: have wrongly returned "alphaev56-unknown-linux-"
- on Linux/Alpha. [ruby-dev:20434]
-
-Tue Jun 24 04:54:46 2003 Minero Aoki <aamine@loveruby.net>
-
- * configure.in: always add -mieee for gcc/alpha. [ruby-dev:20429]
-
-Tue Jun 24 02:40:09 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * array.c (rb_ary_unshift_m): need to check number of arguments.
- [ruby-talk:74189]
-
-Mon Jun 23 23:59:56 2003 Minero Aoki <aamine@loveruby.net>
-
- * io.c (io_close): missing prototype. [ruby-dev:20422]
-
- * ext/socket/socket.c (bsock_do_not_rev_lookup_set): ditto.
-
- * ext/win32ole/win32ole.c (foletype_guid, foletype_progid): ditto.
-
- * error.c (syserr_initialize): length argument of sprintf() is an
- int.
-
-Mon Jun 23 23:28:14 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * MANIFEST: add wince files.
-
- * ext/tk/MANIFEST: add sample/tkmenubutton.rb.
-
-Mon Jun 23 17:40:58 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * dir.c (find_dirsep): get rid of warnings.
-
- * eval.c (error_print): temporary value might be disposed by GC.
-
- * hash.c (env_has_value, env_index): should not increment NULL.
-
- * io.c (io_read, rb_io_sysread): not read when length is 0.
-
- * io.c (rb_io_reopen): ensure initialized IO.
-
- * io.c (rb_io_init_copy): sychronize file pointer.
-
- * io.c (rb_io_s_pipe): make exception proof.
-
- * string.c (rb_str_rindex_m): Fixnum 0 matched end of string.
-
-Mon Jun 23 16:18:12 2003 Tanaka Akira <akr@m17n.org>
-
- * io.c (rb_open_file): initialize flags.
-
- * time.c (time_arg): initialize v[6] even when argc is 10 to
- avoid valgrind error.
-
-Mon Jun 23 14:22:44 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: bug fix on TkRoot and TkToplevel
-
-Mon Jun 23 08:24:01 2003 Florian Frank <flori@nixe.ping.de>
-
- * string.c (rb_str_upto): generate sequence according to "succ"
- order. formerly check was done by dictionary order.
- [ruby-talk:74138]
-
-Mon Jun 23 00:27:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_string_value): fill constant empty string along
- with setting ELTS_SHARED if str->ptr is NULL. [ruby-core:01179]
-
- * string.c (rb_string_value_ptr): ditto.
-
- * string.c (rb_check_string_type): ditto.
-
-Sun Jun 22 23:42:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * string.c (str_gsub): move END(0) check before mbclen2().
-
- * string.c (scan_once): reduce END(0) check.
-
- * io.c (rb_io_initialize): accept fixnum mode.
-
- * eval.c (error_print): replace strchr() by memchr(), einfo may
- contain "\0".
-
- * pack.c (pack_unpack): range check for "@" move; initialize check
- for "m".
-
- * error.c (syserr_initialize): avoid buffer overflow.
-
- * file.c (rb_file_s_readlink): expand buffer until readlink
- succeed.
-
-Sun Jun 22 16:17:02 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: TkRoot.new and TkToplevel.new accept Wm
- commands as elements
-
- * ext/tk/lib/tk.rb: TkMenu --- add some methods
-
- * ext/tk/lib/tk.rb: TkOptionMenubutton --- bug fix
-
- * ext/tk/sample/tkmenubutton.rb: sample of TkMenubutton and
- TkOptionMenubutton
-
-Sat Jun 21 23:15:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): should not propagate distination tag if
- tag is already handled in this level. (ruby-bugs-ja PR#501)
-
- * object.c (str_to_id): check for empty string before intern.
- [ruby-talk:74006]
-
-Sat Jun 21 13:56:09 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * wince/Makefile.sub: undefine HAVE__SETJMP.
-
- * wince/resource.rb: include winver.h in wince3.0.
-
-Sat Jun 21 12:55:17 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: TkRoot.new and TkToplevel.new accept Wm commands
- as elements of a hash argument.
-
- * ext/tk/sample/tktimer2.rb: add comments about the usage of a
- TkTimer object.
-
-Sat Jun 21 08:47:22 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk*.rb: remove direct-accesses to TkComm::INTERP and
- TkComm::INITIALIZE_TARGETS
-
- * ext/tk/lib/tk*.rb: use TkINTERP_SETUP_SCRIPTS constant for setting
- up the interpreter
-
- * ext/tcltklib/tcltklib.c: support to create a safe interpreter
- with safe-Tk
-
-Fri Jun 20 23:28:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): should not propagate TAG_BREAK and
- TAG_RETURN from orphan Proc object. [ruby-core:01148]
-
-Fri Jun 20 15:04:28 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * defines.h (PATH_ENV): name of PATH environment. [new].
-
- * defines.h (ENV_IGNORECASE): define for case insensitive platforms
- to access environment variables.
-
- * dln.c (dln_find_exe): use PATH_ENV instead of "PATH".
-
- * hash.c (env_delete, rb_f_getenv, env_fetch, rb_env_path_tainted,
- env_aset): ditto.
-
- * ruby.c (proc_options): ditto.
-
-Fri Jun 20 14:52:46 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: Tk interpreter returns TAINTED strings.
-
-Fri Jun 20 03:09:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (new_yield): distinguish "yield 1,2" and "yield [1,2]".
- [ruby-dev:20360]
-
- * eval.c (rb_eval): support new_yield() change.
-
- * variable.c (rb_const_get_0): warn for Foo::BAR when BAR is a
- toplevel constant (i.e. a constant defined under Object).
- [ruby-list:36935]
-
- * parse.y (no_blockarg): separate no block argument check and
- ret_args argument processing.
-
-Fri Jun 20 00:45:19 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/csv.rb: import csv module.
-
-Thu Jun 19 22:51:41 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb.rb, lib/drb/drb.rb, lib/drb/eq.rb,
- lib/drb/extserv.rb, lib/drb/extservm.rb, lib/drb/gw.rb,
- lib/drb/invokemethod.rb, lib/drb/observer.rb,
- lib/drb/timeridconv.rb, lib/drb/unix.rb: import drb-2.0.4b3
-
-Thu Jun 19 16:14:43 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c (lib_do_one_event): change default
- value of the argument
-
- * ext/tcltklib/tcltklib.c (lib_do_one_event): returns true/false
-
- * ext/tcltklib/tcltklib.c: add TclTkLib::EventFlag::NONE ( == 0 )
-
- * ext/tcltklib/tcltklib.c: add set_no_event_wait() and
- get_no_event_wait()
-
- * ext/tcltklib/MANUAL.euc: modify
-
- * ext/tcltklib/README.euc: ditto
-
- * ext/tk/lib/tk.rb: change default value of TkCore.do_one_event
- argument
-
- * ext/tk/lib/tk.rb: add TkCore.set_no_event_wait(wait) and
- TkCore.get_no_event_wait
-
- * ext/tk/lib/tk.rb: add Tk.exit ( == destroy root widget )
-
- * ext/tk/lib/tkafter.rb: rename TkAfter => TkTimer (TkAfter is
- an alias name)
-
- * ext/tk/lib/tkafter.rb: set_callback returns self
-
- * ext/tk/lib/tkafter.rb: continue() raises an exception, if already
- running or no procedure.
-
- * ext/tk/lib/tkafter.rb: skip() raises an exception, if not running.
-
- * ext/tk/sample/tktimer2.rb: new sample for TkTimer class.
-
-Thu Jun 19 16:13:54 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * rubytest.rb: add library path to include standard libraries.
-
-Thu Jun 19 13:13:10 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * hash.c (env_delete, rb_f_getenv, env_fetch): case insensitive to
- access environment variables on DOSISH platforms.
-
-Thu Jun 19 00:51:47 2003 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
-
- * range.c (rb_range_beg_len): out_of_range check after adjusting
- end point. [ruby-dev:20370]
-
-Wed Jun 18 23:59:11 2003 Guy Decoux <ts@moulon.inra.fr>
-
- * parse.y (call_args): the first argument to arg_cancat() should
- be NODE_LIST. [ruby-core:01151]
-
-Wed Jun 18 23:41:27 2003 Marc Cartright <marc@isri.unlv.edu>
-
- * ext/zlib/zlib.c (zstream_run): In a particular situation,
- deflate/inflate will return Z_BUF_ERROR, even though another call
- is required by the zlib library.
-
-Wed Jun 18 19:46:21 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: bug fix
-
- * ext/tk/lib/tk.rb: rename 'no_create' option to 'without_creating'
-
- * ext/tk/lib/tk.rb: add TkWindow#pack_in, TkWindow#grid_in,
- TkWindow#place_in
-
- * ext/tk/lib/tk.rb: add TkWindow#bind_class and TkWindow#database_class
-
- * ext/tk/lib/tk.rb: add TkBindTag.new_by_name and TkDatabaseClass
- for binding to database class
-
- * ext/tk/lib/tk.rb: check varname whether already exsist or not.
- (TkVarAccess.new)
-
- * ext/tk/lib/tk.rb: TkTextWin#bbox returns an array of four numbers
-
- * ext/tk/lib/tk.rb: autoload TkDialog2, TkWarning2
-
- * ext/tk/lib/tk.rb: scan event callback arguments and convert
- to proper type
-
- * ext/tk/lib/tk.rb: TkBindTag.new accepts a block
-
- * ext/tk/lib/tk.rb: If given taglist, TkWindow#bindtags(taglist)
- returns taglist
-
- * ext/tk/lib/tk.rb: add TkWindow#bindtags=(taglist)
-
- * ext/tk/lib/tk.rb: Tk.focue and Tk.focus_lastfor return nil
- if there is no target widget.
-
- * ext/tk/lib/tk.rb: Tk::Wm.client returns the argument string
- when setting name
-
- * ext/tk/lib/tk.rb: TkGrid.columnconfiginfo and rowconfiginfo
- given a slot return a number.
-
- * ext/tk/lib/tk.rb: TkWindow.grid_columnconfiginfo and
- grid_rowconfiginfo --- ditto
-
- * ext/tk/lib/tk.rb: rename and define alias :: TkOption ==> TkOptionDB
-
- * ext/tk/lib/tk.rb: define alias :: TkTimer ==> TkAfter
-
- * ext/tk/lib/tk.rb: some instance methods change from public to private
-
- * ext/tk/lib/tk.rb: some TkComm methods change to module functions
-
- * ext/tk/lib/tk.rb: add support for -displayof option to some
- TkWinfo methods
-
- * ext/tk/lib/tk.rb: bind, bind_append and bind_remove ---
- returns the target of event-binding
-
- * ext/tk/lib/tk.rb: add Tk8.4 features
-
- * ext/tk/lib/tk.rb: add TkPaneWindow
-
- * ext/tk/lib/tkdialog.rb: bug fix
-
- * ext/tk/lib/tkdialog.rb: some methods return self
-
- * ext/tk/lib/tkdialog.rb: add TkTextMark#+(mod) and TkTextMark#-(mod)
-
- * ext/tk/lib/tkdialog.rb: add some methods
-
- * ext/tk/lib/tkcanvas.rb: bug fix and some methods return self
-
- * ext/tk/lib/tkentry.rb: some methods return self
-
- * ext/tk/lib/tkentry.rb: TkEntry#bbox returns an array of four numbers
-
- * ext/tk/lib/tkentry.rb: scan validatecommand arguments and
- convert to proper type
-
- * ext/tk/lib/tkbgerror.rb: support to define a error handler by user
-
- * ext/tcltklib/tcltklib.c: [ruby-talk:60759]
-
-Wed Jun 18 13:50:06 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): should dispatch based on ID type.
-
-Wed Jun 18 12:53:42 2003 Minero Aoki <aamine@loveruby.net>
-
- * eval.c (rb_yield_0): should restore scope_vmode during yield.
- [ruby-dev:20361]
-
-Wed Jun 18 01:13:36 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/rubyext.c (rb_syck_load_handler): merge key implemented.
-
- * ext/syck/rubyext.c (transfer_find_i): removed use of String#=~ in favor
- of Regexp#match.
-
- * lib/yaml.rb: YAML::try_implicit returns.
-
- * lib/yaml/rubytypes.rb: Regexps added for type matching.
-
- * lib/yaml/emitter.rb: fix String + nil error.
-
-Tue Jun 17 17:01:08 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/gram.c: added grammar for certain empty sequence entries.
-
- * ext/syck/handler.c, ext/syck/syck.c, ext/syck/syck.h: track bad anchors.
-
- * ext/syck/token.c: added pause token, tag possible circular references.
-
- * lib/yaml/rubytypes.rb: parsing YMD time as Date instance.
-
- * ext/syck/rubyext.c: ditto. DomainType, PrivateType, BadAlias classes.
-
-Tue Jun 17 21:28:27 2003 Ariff Abdullah <skywizard@time.net.my>
-
- * win32/win32.c (rb_w32_opendir): need to set errno. [ruby-talk:73761]
-
-Mon Jun 16 19:01:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c: remove rb_cBlock.
-
-Mon Jun 16 18:06:33 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * numeric.c (rb_fix2uint): renamed from rb_fix2int on IA64.
-
-Mon Jun 16 17:02:57 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (proc_invoke): format the message for localjump_error().
-
-Mon Jun 16 16:23:56 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/dl.c (rb_dl_callback): use rb_block_proc() instead of
- rb_block_new().
-
- * ext/win32ole/win32ole.c (ev_on_event): ditto.
-
-Mon Jun 16 16:06:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_alloc): re-unification of Block and Proc. Block
- class is no longer available.
-
-Mon Jun 16 14:43:14 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * bcc32/Makefile.sub: undefine HAVE_GETGROUPS.
-
-Sat Jun 14 16:58:41 2003 Guy Decoux <ts@moulon.inra.fr>
-
- * regex.c (calculate_must_string): should handle option_set
- properly. [ruby-talk:73481]
-
- * regex.c (re_compile_fastmap): a bug in flag manipulation.
- [ruby-talk:73549]
-
-Sat Jun 14 17:59:59 2003 Guy Decoux <ts@moulon.inra.fr>
-
- * eval.c (method_arity): should handle NODE_BMETHOD and
- NODE_DMETHOD. [ruby-core:01138]
-
-Fri Jun 13 09:24:39 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (storebinary): seek correctly. Thanks, William Webber.
-
- * lib/net/ftp.rb (putbinaryfile): rescue FTPPermError.
-
-Thu Jun 12 22:13:13 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb : add 'no_create' option to widget
- initialize method.
-
- * ext/tk/MANIFEST : forgot to commit when added tkmacpkg.rb
- and tkwinpkg.rb
-
- * ext/tk/lib/README : ditto.
-
-Thu Jun 12 21:14:11 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb : widget configure returns self (for method
- call chain)
-
- * ext/tk/lib/tkmacpkg.rb : Mac resource (not new but not
- included until now)
-
- * ext/tk/lib/tkwinpkg.rb : Win DDE and registry (not new but not
- included until now)
-
-Tue Jun 10 14:26:30 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/token.c: preserve newlines prepended to a block.
-
- * ext/syck/implicit.c (syck_match_implicit): added !merge and !default.
-
- * lib/yaml/constants.rb: remove '\z' escape.
-
- * lib/yaml/emitter.rb: ensure reset of @seq_map shortcut flag.
-
- * lib/yaml/encoding.rb: remove Unicode translation methods.
-
- * lib/yaml/rubytypes.rb: improved round-tripping of Strings.
- [ruby-core:1134]
-
-Tue Jun 10 01:07:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb.rb (IRB::Irb::eval_input): warn and exit if $SAFE >=3
- after input evaluation.
-
- * lib/irb.rb (IRB::Irb::eval_input): untaint input string. now
- irb works for levels 1 and 2.
-
-Mon Jun 9 19:02:33 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in: checks presence of grp.h and setgroups().
-
- * process.c (proc_getgroups, proc_setgroups): raise
- NotImplementedError unless available. [ruby-talk:73014]
-
-Mon Jun 9 18:09:11 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: fixed 100% CPU problem of Tk.mainloop
-
-Mon Jun 9 15:50:24 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: renewal Tk.mainloop
-
-Sun Jun 8 13:37:21 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * wince/setup.mak: set SUBSYSTEM in each platform.
-
- * wince/stdlib.c: fix mblen() bug.
-
-Sat Jun 7 22:22:03 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/syck/rubyext.c (syck_loader_transfer): should not use
- rb_cProc directly, since type_proc may be Proc, Block, or
- Method.
-
- * parse.y (value_expr0): class and module statements should not be
- warned for "void value expression". [ruby-talk:72989]
-
-Sat Jun 7 01:46:41 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (add_final): should determine type by respond_to?
-
- * gc.c (define_final): ditto.
-
- * io.c (rb_io_ctl): should not depend on respond_to?
-
- * range.c (range_step): rb_check_string_type().
-
-Fri Jun 6 20:29:14 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (error_print): needs to be exception proof.
-
- * eval.c (error_handle, rb_longjmp): bails out when exception
- reentered. (ruby-bugs-ja:PR#487), [ruby-core:01119],
- [ruby-core:01122]
-
- * eval.c (Init_Proc): pre-allocates critical error objects.
-
-Fri Jun 6 20:29:14 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (cmd_brace_block, do_block, brace_block): initialize block
- variables at the beginning of the block. [ruby-talk:72521]
-
-Fri Jun 6 18:49:11 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (proc_setgroups): new functions.
-
-Fri Jun 6 18:33:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (define_final): eliminate rb_f_lambda() call.
-
- * class.c (rb_scan_args): ditto.
-
- * signal.c (sig_trap): ditto.
-
- * hash.c (rb_hash_initialize): ditto.
-
- * variable.c (rb_f_trace_var): ditto.
-
- * ext/dl/dl.c (rb_dl_callback): ditto.
-
- * ext/win32ole/win32ole.c (ev_on_event): ditto.
-
-Fri Jun 6 16:10:01 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: define Net::HTTPResponse#to_ary for backward
- compatibility. [ruby-talk:72927]
-
- * lib/net/protocol.rb: add warning.
-
-Fri Jun 6 13:30:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ruby_cleanup): $SAFE is turned off in the finalization.
- Each END proc should preserve its own $SAFE level. [ruby-core:01119]
-
- * marshal.c (marshal_load): remove unused variable "hash".
- [ruby-core:01120]
-
- * hash.c (env_str_new): freeze strings from ENV. [ruby-talk:72860]
-
- * array.c (rb_ary_first): optional argument to retrieve first n
- elements.
-
- * array.c (rb_ary_last): optional argument to retrieve last n
- elements.
-
-Thu Jun 5 21:31:55 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * wince/stdlib.c: add mblen().
-
-Thu Jun 5 18:33:46 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/curses/curses.c (window_s_allocate,curses_finalize):
- avoid VC++ warnings.
-
-Thu Jun 5 17:44:11 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/rubyext.c (syck_parser_mark): was a bit heavy on the GC.
-
- * lib/yaml.rb (YAML::transfer): added.
-
-Thu Jun 5 16:11:50 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub
- (MISSING): link with missing/erf.c.
-
- * missing.h (erf, erfc): fix prototype.
-
- * missing/erf.c: new. [ruby-list:37753]
-
-Thu Jun 5 15:09:06 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * math.c (math_erf,math_erfc): new function. [ruby-list:37753]
-
-Thu Jun 5 14:49:43 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/rubyext.c: using GC nodes caused segfault. [ruby-core:1071]
-
-Thu Jun 5 13:48:57 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/token.c: directives choked on a period.
-
- * ext/syck/gram.y: anchors work above a collection. [ruby-core:1071]
-
- * ext/syck/handler.c, ext/syck/syck.c: ensure a fresh strtable between
- parser iterations.
-
-Wed Jun 4 12:06:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ruby_finalize): no longer need to turn off $DEBUG in the
- finalizer. (ruby-bugs-ja PR#473)
-
-Tue Jun 3 22:20:49 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call_super): should search superclass method based on
- orig_func, not last_func.
-
-Tue Jun 3 09:59:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call_super): inheritance line adjustment moved from
- rb_call(). [ruby-core:01113]
-
- * eval.c (rb_eval): use rb_call_super() to follow DRY principle.
-
-Mon Jun 2 02:20:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (push_values_at): Array#values_at should work with
- ranges too.
-
- * range.c (rb_range_beg_len): length calculation was wrong.
-
- * eval.c (rb_call): should set T_ICLASS in the frame->last_class.
- [ruby-core:01110]
-
-Sun Jun 1 21:50:01 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: should not use def file, use ld with
- --export-all-symbols option on Cygwin/MinGW.
-
- * defines.h: ditto.
-
- * cygwin/GNUmakefile.in: ditto.
-
- * ext/digest/defs.h: avoid warnings on Cygwin.
-
-Sun Jun 01 13:33:49 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * wince/string_wce.c: add strpbrk() for hpcpro support.
-
- * wince/setup.mak: add hpcpro(CE2.11) & armv4t(CE.NET) support.
-
- * wince/resource.rb: ditto.
-
- * wince/Makefile.sub: ditto.
-
-Sun Jun 1 10:38:28 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * variable.c (rb_autoload_load): autoloaded constants under a module
- belong to the module. [ruby-core:01094], [ruby-dev:20309]
-
-Sat May 31 04:36:54 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (rb_intern): should handle multibyte name.
-
-Fri May 30 23:18:01 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/rubyext.c (rb_syck_mktime): seconds calculated wrong.
-
- * ext/syck/gram.c: flexibility to anchors and transfer methods on
- collections.
-
- * ext/syck/token.c: hex escapes.
-
- * lib/yaml/basenode.rb: YamlNode references changed to YAML::BaseNode.
-
-Fri May 30 22:28:04 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * numeric.c (rb_num2uint, rb_fix2int): new function to convert
- values over INT_MAX. [ruby-core:01099]
-
- * ruby.h (NUM2UINT, FIX2INT): ditto.
-
-Fri May 30 15:01:05 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/token.c: preserve any indentation past an explicit
- indentation.
-
-Fri May 30 14:55:44 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_Array): exclude Kernel#to_a instead of Object#to_a.
- (ruby-bugs-ja:PR#483)
-
- * lib/optparse.rb (OptionParser::Switch#parse_arg): not splat.
-
- * lib/optparse.rb (OptionParser::Switch#conv_arg): splat if no
- conversion supplied.
-
- * lib/optparse.rb (OptionParser::Switch::PlacedArgument#parse):
- override next switch after argument conversion.
-
-Fri May 30 14:41:34 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/handler.c, ext/syck/syck.h: removed syck_fold_format().
-
- * ext/syck/gram.c: flexibility for aliases and anchors.
-
- * ext/syck/token.c: folding now handled in the tokenizer.
-
-Fri May 30 06:21:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * variable.c (rb_autoload_load): should delete autoloaded
- symbol itself before load. [ruby-core:01097]
-
- * variable.c (rb_mod_remove_const): must not return Qundef.
-
-Thu May 29 14:59:10 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.c (_CRTIMP): redefine _CRTIMP on MinGW.
-
- * configure.in: remove '-D__USE_CRTIMP' from XCFLAGS on MinGW.
-
- * win32/win32.c (NtMakeCmdVector): handle quotes only if not instring.
-
-Thu May 29 09:11:01 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (ev_const_defined, ev_const_get), variable.c
- (rb_const_get_at, rb_const_get, rb_mod_remove_const): use Qundef
- as autoload marker. [ruby-dev:18103], [ruby-dev:18184]
-
- * eval.c (rb_mod_autoload, rb_mod_autoload_p): new method;
- Module#autoload, Module#autoload?.
-
- * variable.c (rb_autoload, rb_autoload_load, rb_autoload_p):
- manage autoload constants per classes/modules.
-
- * variable.c (rb_const_defined_at, rb_const_defined): return false
- for autoloading constants.
-
- * class.c (rb_define_class, rb_define_module), eval.c (rb_eval),
- variable.c (rb_mod_const_at, rb_const_assign): removed autoload
- stuff.
-
- * intern.h: prototypes; rb_autoload, rb_autoload_load,
- rb_autoload_p.
-
- * lib/optparse.rb (OptionParser::Switch::PlacedArgument::parse):
- do not treat unmatched argument as an option.
-
-Wed May 28 08:44:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_syscall): type dispatch should be based on
- rb_check_string_type(), not FIXNUM_P(), because values may be a
- bignum. [ruby-talk:72257]
-
-Tue May 27 20:33:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c, util.c: removed duplicated includes/defines.
-
- * ext/socket/socket.c (sock_addrinfo): get rid of SEGV at NULL ptr
- String. increase buffer size for 64bit platforms.
-
-Tue May 27 02:34:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): should pass the current klass value to
- block_invoke, which may be called via "super". [ruby-core:01077]
-
- * eval.c (block_invoke): now takes 4th argument "klass".
-
- * eval.c (block_alloc): should propagate BLOCK_PROC to
- ruby_block.
-
-Mon May 26 23:51:38 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (r_object0): should not use "yield" method, use "call"
- instead. (ruby-bugs-ja PR#476)
-
-Mon May 26 21:39:46 2003 MoonWolf <moonwolf@moonwolf.com>
-
- * lib/mkmf.rb, lib/optparse.rb, lib/tracer.rb: use Method#to_block
- instead of deprecated Method#to_proc. (ruby-bugs-ja:PR#477)
-
-Mon May 26 21:21:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/optparse.rb (OptionParser::Switch::parse,
- OptionParser::order): use {Block,Proc}#call instead of deprecated
- #yield.
-
-Mon May 26 16:39:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (Init_Proc): Block/Proc separation. [huge change]
-
- * eval.c (block_arity): returns exact arity number for Procs out
- of methods. also gives 1 for {|a|..}.
-
- * string.c (rb_str_match): revert use of String#index for
- invocation like string =~ string.
-
- * eval.c (rb_Array): move Object#to_a exclusion hack from
- splat_value(). need to be in eval.c for a while.
-
-Sun May 25 23:48:21 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * bignum.c (rb_quad_pack): should negate negative bignum.
- (ruby-bugs-ja:PR#474)
-
-Sun May 25 03:27:25 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: support LOGIN authentication, based on
- the patch by Kazuhiko Izawa. [ruby-talk:78981]
-
-Sat May 24 18:19:51 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * wince/Makefile.sub: add eMbedded Visual C++ 4.0 support.
-
- * wince/resource.rb: ditto.
-
- * wince/setup.mak: ditto.
-
- * wince/configure.bat: ditto.
-
- * wince/mkexports.rb: delete japanese comments.
-
-Fri May 23 18:34:05 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_longjmp): get rid of reentering while debug warning.
- (ruby-bugs-ja:PR473)
-
-Fri May 23 15:16:16 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * pack.c (pack_unpack): sign-extend if sizeof long is bigger than
- 32. (ruby-bugs-ja:PR#472)
-
-Fri May 23 14:19:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ruby_finalize): turn off ruby_debug flag before calling
- at_exit procs and finalizers. (ruby-bugs-ja:PR473)
-
- * ext/tcltklib/tcltklib.c (lib_mainloop_core): OK to block if
- there's no other thread. (ruby-bugs:PR#861)
-
-Thu May 22 18:07:46 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/token.c: single- and double-quoted root-level fix.
-
- * lib/yaml.rb (YAML::object_maker): can create object attributes (such as
- found in Exception class)
-
- * lib/yaml/rubytypes.rb: roundtripping of Exception and subclasses.
-
-Fri May 23 01:26:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_clone): defer copying freezing state after
- calling initialize_copy(). [ruby-dev:20276]
-
-Thu May 22 17:12:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (run_final): use rb_thread_critical instead of DEFER_INTS.
- [ruby-dev:20272]
-
- * marshal.c: try to make ArgumentError and TypeError consistent.
- [ruby-core:01068]
-
-Thu May 22 15:46:37 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_define_alloc_func): need not to disable
- rb_call_super() for allocation functions. [ruby-core:1065]
-
-Thu May 22 06:21:33 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/rubyext.c (rb_syck_err_handler): raise ArgumentError on
- malformed YAML.
-
- * lib/yaml/rubytypes.rb: String#to_yaml was missing space indicators at
- the end of a line.
-
-Thu May 22 05:43:24 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/rubyext.c (syck_parser_load): root-level false was returning
- nil.
-
- * ext/syck/token.c: root-level transfer method bug.
-
- * ext/syck/gram.c: root-level empty gave a parse error.
-
- * lib/yaml/rubytypes.rb: Symbol#to_yaml generating method call error.
-
-Thu May 22 02:46:38 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_eval): splat NODE_RESTARY. [ruby-dev:20268]
-
- * eval.c (rb_thread_fd_close): raise for writing threads.
- [ruby-dev:20269]
-
- * io.c (rb_io_close, io_reopen): ditto.
-
- * io.c (io_reopen): keep stdio objects for stdin, stdout,
- and stderr. [ruby-dev:19442]
-
-Thu May 22 01:11:15 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (strings, word_list): must create new instance always.
- http://yowaken.dip.jp/tdiary/20030521.html#p02
-
- * parse.y (yylex): slight optimization.
-
-Wed May 21 23:07:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (rb_sys_fail): should not specify errno explicitly.
- [ruby-dev:20264]
-
-Wed May 21 20:51:47 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * Makefile.in, bcc32/Makefile.sub, win32/Makefile.sub,
- wince/Makefile.sub: update dependencies.
-
-Wed May 21 17:44:16 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (syserr_initialize): prohibit specifying errno for
- subclasses of SystemCallError. in addition, if initialize is
- called for SystenCallError instance, its class be changed.
- [ruby-dev:20257]
-
- * gc.c (run_final): to protect thread context switch, finalizers
- are wrapped in DEFER_INTS/ENABLE_INTS.
-
-Wed May 21 13:26:08 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/optparse.rb: get rid of warnings.
-
-Tue May 20 18:59:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_save_context): prohibit rb_gc_force_recycle()
- on thread saved ruby_dyna_vars. [ruby-dev:20236]
-
-Tue May 20 17:39:15 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (init_copy): call initialize_copy at the end of copy
- process.
-
-Tue May 20 17:15:55 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * error.c (syserr_initialize): use Errno constants as default
- errno for subclasses. [ruby-dev:20241]
-
-Tue May 20 15:26:25 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * st.h: define ST_DATA_T_DEFINED for portability.
-
- * ext/syck/syck.h: add typedef, st_data_t for Ruby 1.6.
-
- * ext/syck/syck.c (syck_st_free_nodes): return int.
-
- * ext/syck/syck.c (syck_add_sym): cast the data to st_data_t
- to avoid error on bcc32.
-
- * ext/syck/syck.c (syck_lookup_sym): ditto.
-
- * ext/syck/syck.c (syck_free_parser): NULL is not integer.
-
-Tue May 20 13:29:04 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (kill): set errno after calling raise().
-
-Tue May 20 10:51:26 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_f_missing): create exception instance by ordinal
- method. [ruby-dev:20033]
-
- * error.c (rb_name_error, rb_sys_fail): ditto.
-
- * error.c (exc_to_s, exit_status, name_err_name,
- nometh_err_args, syserr_errno, syserr_eqq): access
- attributes.
-
- * error.c (name_err_initialize, nometh_err_initialize,
- syserr_initialize): initialize attributes.
-
-Tue May 20 10:26:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): give warning for multiple values for a
- block parameter.
-
- * eval.c (rb_yield_values): a function to yield multiple values.
-
- * array.c (sort_1): use rb_yield_values.
-
- * enum.c (min_ii, max_ii): ditto.
-
- * hash.c (rb_hash_update_block_i, delete_if_i, select_i,
- each_pair_i, env_each, env_reject_bang, env_select,
- env_update_i): ditto.
-
- * struct.c (rb_struct_each_pair): ditto.
-
- * eval.c (top_include): should include module in the current self,
- not ruby_top_self. [ruby-dev:20198]
-
- * eval.c (top_include): stop inclusion to ruby_wrapper; give
- warning.
-
-Mon May 19 18:54:30 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/token.c, ext/syck/implicit.c: expanded character set to
- allow UTF-8, other Ruby encodings.
-
-Mon May 19 16:47:00 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/syck.c, ext/syck/syck.h, ext/syck/token.c, ext/syck/gram.c:
- count line numbers only if line pointer has increased.
-
-Tue May 20 00:45:40 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (push_braces): do not push_braces() unless rbrace is found.
- (ruby-bugs-ja:PR#469)
-
-Tue May 20 00:09:41 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/pty/pty.c (pty_finalize_syswait): join (using Thread#value)
- before detach pid. [ruby-talk:71519]
-
-Mon May 19 23:02:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (PUSH_FRAME): save outer ruby_block. [ruby-list:37677],
- [ruby-dev:20202]
-
- * eval.c (BEGIN_CALLARGS): restore outer block by using
- ruby_block->outer.
-
- * eval.c (block_pass): do not alter block->prev, but block->outer.
-
- * array.c (get_inspect_tbl): warning on wrong condition.
-
-Mon May 19 16:13:57 2003 Minero Aoki <aamine@loveruby.net>
-
- * class.c: add #include "version.h".
-
- * hash.c: ditto.
-
- * string.c: ditto.
-
-Mon May 19 15:33:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (localjump_xvalue): renamed exitstatus to exit_value
- since it's not exit "status" after all.
-
- * eval.c (localjump_error): add reason to LocalJumpError.
-
- * compar.c (rb_cmpint): raise error via rb_cmperr(), if cmp value
- is nil. now take new 2 arguments.
-
- * time.c (time_cmp): 2003-05-16 fix was incomplete.
- (ruby-bugs-ja:PR#458)
-
-Mon May 19 14:42:50 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_mod_cmp): stupid comparison fixed.
-
- * io.c (Init_IO): ARGF.path added (alias to ARGF.filename).
- [ruby-dev:20197]
-
-Mon May 19 13:58:03 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (init_copy): rename copy_object as initialize_copy,
- since it works as copy constructor.
-
- * eval.c (rb_add_method): initialize_copy should always be
- private, like initialize.
-
-Mon May 19 13:51:50 2003 Minero Aoki <aamine@loveruby.net>
-
- * re.c (rb_reg_quote): \n \r \f \v quoting was wrong.
- [ruby-dev:20203]
-
- * re.c (rb_reg_quote): rb_reg_quote(" ") should be "\\ ", not
- "\\s".
-
-Mon May 19 08:08:51 2003 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: use warn() instead of $stderr.puts().
-
- * sample/cal.rb: ditto.
-
-Sat May 17 12:02:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (get_inspect_tbl): check whether inspect_tbl value is a
- valid array. (ruby-bugs-ja PR#65)
-
- * array.c (inspect_ensure,rb_protect_inspect,rb_inspecting_p):
- use get_inspect_tbl().
-
-Sat May 17 11:50:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_abort): call exit(1) if exception is raised. This
- patch was made by Nobuyoshi Nakada <nobu.nokada@softhome.net> on
- 2002-05-30. (ruby-bugs-ja PR#236)
-
- * signal.c: disable Ruby's interrupt handler at the beginning.
- (ruby-bugs-ja PR#236)
-
-Sat May 17 02:17:42 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/rational.rb (Integer::denominator): fixed typo.
- (ruby-bugs-ja:PR#466)
-
-Sat May 17 00:18:11 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/socket/socket.c (ruby_connect): connect() after EINPROGRESS
- returns EINVAL on some platforms, need to check true error
- status. [ruby-core:01037]
-
-Sat May 17 00:21:51 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_class_allocate_instance): singleton class check
- moved to rb_obj_alloc(). (ruby-bugs-ja PR#345)
-
-Fri May 16 23:55:50 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_quote): should escape white space characters,
- \t, \f, \n, \r. (ruby-bugs-ja PR#231)
-
-Fri May 16 12:40:40 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (block_pass): chain previous block to the pushing block.
- [ruby-list:37677]
-
- * time.c (time_cmp): does not compare with numbers for
- interchangeability. (ruby-bugs-ja:PR#458)
-
-Thu May 15 21:55:54 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/gram.c: fixes to one-line documents and end of stream
- documents.
-
- * ext/syck/syck.c, ext/syck/syck.h: add root_on_error to parser
- struct, specifying the symbol to be returned on a parse error.
-
-Thu May 15 18:44:31 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (OpenURI::Redirect#initialize): call super to
- initialize mesg.
-
- * lib/open-uri.rb (OpenURI::Meta#charset): call block to guess charset
- if block is given and charset is not given.
-
-Thu May 15 16:55:16 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_mod_le): returns nil if two classes/modules are not
- in class-superclass relationship.
-
- * object.c (rb_mod_cmp): uses new rb_mod_le() behavior.
-
-Thu May 15 07:45:30 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/rubyext.c, ext/syck/implicit.c: timestamp repairs to
- timezone and milliseconds.
-
- * ext/syck/syck.c (syck_parser_reset_levels): duplicate string literal
- to avoid warning.
-
-Thu May 15 13:26:48 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_class_instance_methods): default will be changed in
- 1.8.1.
-
- * io.c (set_stdio): better message.
-
-Thu May 15 13:18:11 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (set_stdio): $stdin, $stdout, $stderr now became read-only.
-
- * variable.c (readonly_setter): message changed.
-
-Thu May 15 09:50:51 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/syck/syck.c (syck_parser_pop_level): add prototype.
-
- * ext/syck/syck.c (syck_strndup): should return value.
-
-Thu May 15 09:32:25 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (kill): fix typo and add signal 0 support.
-
-Wed May 14 20:09:26 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/gram.c: sequence-in-map shortcut, transfer methods on
- sequence-in-sequence, memory leak in mapping merge.
-
- * ext/syck/syck.c: memory leak in domain anchoring.
-
- * lib/yaml/rubytypes.rb, lib/yaml/types.rb: eliminated 1.6.x code.
-
-Wed May 14 19:56:43 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/syck/rubyext.c: add prototypes to avoid VC++ warnings.
-
-Wed May 14 12:23:46 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (Net::HTTP#start): should check whether HTTP
- session is opened before finishing. (ruby-bugs-ja:PR#463)
-
-Wed May 14 09:12:55 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: reduce warning. (ruby-bugs-ja:PR#462)
-
-Tue May 13 22:31:04 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * lib/yaml/rubytypes.rb, lib/yaml/types.rb: using Object#object_id
- rather than deprecated Object#id.
-
- * ext/syck/token.c: changed ASCII escapes to octal notation.
-
- * ext/Setup*: added entries for static linking of Syck extension.
-
-Tue May 13 20:31:58 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: add '--Wl,--enable-auto-import' to DLDFLAGS
- on Cygwin/MinGW.
-
- * configure.in: add '-D__USE_CRTIMP' to XCFLAGS on MinGW.
-
- * ext/syck/handler.c: add proper casts.
-
- * ext/syck/syck.c: ditto.
-
-Tue May 13 17:58:08 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * configure.in, bcc32/Makefile.sub, win32/Makefile.sub: define
- HAVE_FSYNC.
-
- * win32/win32.h (fsync): define as _commit().
-
-Tue May 13 15:35:35 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_match_exec): \Z changed to be consistent with new $
- (endbuf) behavior.
-
-Tue May 13 14:48:07 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (error_pos): use $deferr for output instead of stderr
- directly.
-
- * eval.c (error_print,error_handle,rb_longjmp,rb_thread_schedule):
- ditto.
-
-Tue May 13 06:34:19 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * lib/yaml/rubytypes.rb: object and struct loading
-
- * lib/yaml.rb: YAML::detect_implicit will discover typing for a Ruby
- string
-
- * ext/syck/: Fixed portable comments, misuse of NULL and methods without
- return VALUEs.
-
-Mon May 12 18:08:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (Init_IO): new variable $deferr which is default output
- port of error messages.
-
- * io.c (rb_warn_m): new method "warn". [new]
-
- * error.c (warn_print): use $deferr.
-
- * error.c (rb_bug): ditto.
-
- * error.c (err_append): ditto.
-
-Sun May 11 13:50:12 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb: refine to_s test.
-
- * lib/pp.rb (PP::ObjectMixin#pretty_print): refine to_s handling.
-
-Sun May 11 06:32:13 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/implicit.c, ext/syck/rubyext.c: transfer methods applied to
- native loading
-
- * ext/syck/token.c: fix for transfer methods on same indentation as nested
- mapping
-
- * lib/yaml/rubytypes.rb: all type names in lowercase
-
-Sat May 10 19:55:18 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ext/syck/gram.c ext/syck/handler.c ext/syck/implicit.c
- ext/syck/node.c ext/syck/rubyext.c ext/syck/syck.c
- ext/syck/syck.h ext/syck/token.c: updated to Syck 0.27
-
- * lib/yaml/loader.rb: new YAML::Loader class
-
- * lib/yaml.rb: loading of type families leverages YAML::DefaultLoader
-
-Sat May 10 19:00:08 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * wince/string.c: file removed.
-
- * wince/stdlib.c: file added.
-
-Sat May 10 16:17:02 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (decode_utf7): new method.
-
- * lib/net/imap.rb (encode_utf7): new method.
-
-Fri May 9 21:25:50 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
-
- * ruby/ext/syck, ruby/lib/yaml: Initial checkin of YAML substances.
-
-Fri May 9 16:38:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_reopen): It should be possible to reopen closed IO.
- [ruby-talk:70941]
-
- * io.c (rb_io_reopen): inherit original file mode unless specified.
-
-Thu May 8 18:44:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_gc): check odd alignment stack on m68k machines.
-
-Thu May 8 12:56:04 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * compar.c (rb_cmperr): raise comparison failure.
-
- * intern.h: prototype; rb_cmperr
-
- * numeric.c (flo_gt, flo_ge, flo_lt, flo_le, fix_gt, fix_ge,
- fix_lt, fix_le): should fail unless the argument is comparable.
- (ruby-bugs-ja:PR#456)
-
- * numeric.c (int_upto, int_downto): should fail unless the
- argument is comparable. (ruby-bugs-ja:PR#454)
-
-Wed May 7 13:30:11 2003 Masahiro TANAKA <masa@ir.isas.ac.jp>
-
- * numeric.c (num_step): better error treatment of float values.
-
-Tue May 6 17:51:54 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb: rename method: POP3#mail_size -> n_mails
-
- * lib/net/pop.rb: rename method: POP3#bytes -> n_bytes
-
-Tue May 6 17:21:01 2003 Minero Aoki <aamine@loveruby.net>
-
- * ext/bigdecimal/.cvsignore: new file.
-
- * ext/zlib/.cvsignore: new file.
-
-Tue May 6 14:39:36 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_methods): list singleton methods if recur
- argument is false; list all methods otherwise.
-
-Mon May 5 21:19:25 2003 Koji Arai <jca02266@nifty.ne.jp>
-
- * ext/gdbm/gdbm.c (fgdbm_values_at): new method to replace
- select(index..).
-
- * ext/sdbm/init.c (fsdbm_values_at): ditto.
-
- * ext/dbm/dbm.c (fdbm_values_at): ditto.
-
- * ext/dbm/dbm.c (DBM::VERSION): defined.
-
- * ext/gdbm/testgdbm.rb: replace select with values_at.
-
- * ext/sdbm/testsdbm.rb: ditto.
-
- * ext/dbm/testdbm.rb: ditto.
-
- * ext/dbm/testdbm.rb (setup): DBM.open(path, 0400) cause EACCESS
- on Berkeley DB[234].
-
-Mon May 5 22:57:07 2003 Tadayoshi Funaba <tadf@dotrb.org>
-
- * sample/cal.rb: use values_at instead of select.
-
- * sample/biorhythm.rb: ditto.
-
-Mon May 5 18:59:45 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * sample/test.rb: substitute 'select' with 'values_at'.
-
- * lib/date.rb: ditto.
-
- * lib/parsedate.rb: ditto.
-
-Mon May 5 00:46:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_values_at): new method to replace select(index..).
-
- * hash.c (rb_hash_values_at,env_values_at): ditto.
-
- * re.c (match_values_at): ditto.
-
- * struct.c (rb_struct_values_at): ditto.
-
- * re.c (match_select): add iterator behavior.
-
-Sun May 4 19:08:53 2003 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb: synchronized with date2 3.3.2.
-
-Sun May 4 15:21:18 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: ESMTP -> SMTP transition wrongly fails.
-
-Sun May 4 15:06:37 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb: APOP did not work. [ruby-dev:20149]
-
-Sat May 3 21:14:29 2003 Johan Holmberg <holmberg@iar.se>
-
- * ext/curses/curses.c, ext/digest/sha2/sha2.c, ext/iconv/iconv.c,
- ext/racc/cparse/cparse.c: include "ruby.h" at the top to shut up
- "_FILE_OFFSET_BITS redefined" warning on Solaris.
-
-Sat May 3 11:00:12 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_class_protected_instance_methods): now gives
- warnings to show migration path. The default will be reversed
- on Jan 2004.
-
-Sat May 3 00:58:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_methods): now accepts recurse parameter.
-
- * lib/delegate.rb (Delegator::initialize): instance_methods
- etc. now recurse by default. need to specify false.
-
-Sat May 3 00:22:00 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb: reintroduce Protocol.protocol_param.
-
- * lib/net/http.rb: ditto.
-
- * lib/net/pop.rb: ditto.
-
- * lib/net/smtp.rb: ditto.
-
-Fri May 2 23:29:53 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb: remove Protocol class.
-
- * lib/net/smtp.rb (SMTP): ditto.
-
- * lib/net/pop.rb (POP3): ditto.
-
- * lib/net/http.rb (HTTP): ditto.
-
- * lib/net/protocol.rb: remove Command class.
-
- * lib/net/smtp.rb (SMTPCommand): ditto.
-
- * lib/net/pop.rb (POP3Command): ditto.
-
- * lib/net/pop.rb: remove APOPCommand class.
-
- * lib/net/protocol.rb: remove Code class and its all subclasses.
-
- * lib/net/protocol.rb: remove Response class and its all
- subclasses.
-
- * lib/net/pop.rb (POPMail): new method unique_id (alias uidl).
-
-Fri May 2 18:17:37 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * compar.c (cmp_gt): raises ArgumentError when "<=>" give nil.
- inspired by discussion on comp.lang.python.
-
-Fri May 2 17:37:01 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi/session.rb (CGI::Session::initialize): updated to
- support 2003-04-23 change in cgi.rb [ruby-core:1002]
-
-Fri May 2 17:21:02 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (method_list): classify methods based on nearest
- visibility. [ruby-dev:20127]
-
- * class.c (rb_class_instance_methods): recurse by default. other
- method listing methods as well.
-
-Fri May 2 09:38:06 2003 Warren Brown <wkb@airmail.net>
-
- * string.c (rb_str_ljust): now takes optional argument to specify
- pad string. [ruby-talk:70482]
-
- * string.c (rb_str_rjust): ditto.
-
- * string.c (rb_str_center): ditto.
-
- * string.c (rb_str_justify): utility function.
-
-Fri May 2 04:10:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_add_method): call singleton_method_added or
- method_added for every method definition (after ruby_running).
- [ruby-talk:70471]
-
- * array.c (rb_ary_reverse_bang): Array#reverse! should not return
- nil even for arrays sized less than 2.
-
-Thu May 1 23:18:01 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_eof): should not block after reading all argument
- files. (ruby-bugs-ja PR#449)
-
-Fri May 2 15:10:41 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: use hashes to pass options.
-
- * lib/fileutils.rb: new option mkdir(:mode), mkdir_p(:mode).
-
- * instruby.rb: follow fileutils.rb feature change.
-
-Thu May 1 08:24:00 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_match_exec): $ _always_ matches at the end of string.
-
-Wed Apr 30 14:12:00 2003 wanowa.kimura@nifty.ne.jp (kimura wataru)
-
- * net/imap.rb: support THREAD extension.
-
-Sun Apr 27 23:13:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * string.c (rb_str_to_i): disallow negative radix.
- [ruby-dev:20087]
-
-Sat Apr 26 23:34:42 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (open_args): warning message changed to "don't put space
- before argument parentheses".
-
-Sat Apr 26 14:25:00 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * wince/ : files removed.
- (config, dll.mak, exe.mak, mswince-ruby17.def,
- io.c, process.c, signal.c, string.c, time.c)
-
- * wince/ : files added.
- (assert.c, Makefile.sub, mkexports.rb, io_wce.c,
- process_wce.c, signal_wce.c, string_wce.c,
- time_wce.c)
-
- * wince/configure.bat : like mswin32 style.
-
- * wince/direct.c : remove "static" at _currentdir.
-
- * wince/io.h : change definition.
-
- * wince/stdio.c : _fdopen -> fdopen.
-
- * wince/process.h : add _P_OVERLAY.
-
- * wince/time.h : change definition.
-
- * wince/wincemain.c : add wce_SetCurrentDir.
-
- * wince/wince.c : add wce_SetCurrentDir and wce_fopen.
- fix GetModuleFileNameA to return correct "lpFileName".
-
- * wince/wince.h : remove #ifdef.
-
- * wince/sys/utime.h, utime.c : rename _utime to utime.
-
- * wince/sys/stat.c : expand relative directory in stat.
-
-Sat Apr 26 06:33:04 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_read): ARGF.read() should read all argument files.
-
-Fri Apr 25 18:46:00 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * gc.c: STACK_LEVEL_MAX=65535 on mswince.
-
-Fri Apr 25 18:40:07 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_read): read should not span two files. [ruby-dev:20073]
-
-Fri Apr 25 18:19:03 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (splat_value): split splat_value() and avalue_splat().
-
- * io.c: there's no way to set non-IO value to current_file, thus
- no need for argf_forward().
-
-Fri Apr 25 02:03:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): Proc#yield should pass through retry and
- break like keyword yield. [ruby-talk:70034]
-
- * eval.c (proc_invoke): orphan Proc now raises LocalJumpError for
- break and retry again.
-
- * eval.c (rb_eval): ARGSCAT should splat the argument.
-
- * eval.c (splat_value): splat operation function.
-
-Thu Apr 24 23:37:02 2003 Dave Thomas <dave@thomases.com>
-
- * lib/matrix.rb (Matrix#minor): Used Range#size, which no longer
- exists.
-
- * lib/complex.rb (new!): Complex.new had been made private, but
- Kernel#Complex called it. Re-exposed as new!.
-
- * lib/matrix.rb (Matrix.row_vector): Fix method name typo
-
-Thu Apr 24 19:40:02 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb: add -Wl,--no-undefined to LDSHARED only
- if GNU ld is 2.11 or later.
-
-Wed Apr 23 14:05:40 2003 Dave Thomas <dave@pragprog.com>
-
- * lib/ipaddr.rb (include?): Support non-IPAddr parameters.
- [ruby-core:00980]
-
-Wed Apr 23 13:31:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::QueryExtension::[]): always return Value
- object.
-
-Wed Apr 23 08:39:27 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/zlib/extconf.rb: bccwin32 is win32 too.
-
-Tue Apr 22 20:58:00 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * ruby.c: don't call VirtualQuery in ruby_init_loadpath()
- on mswince.
-
-Tue Apr 22 19:08:53 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * marshal.c (save_mantissa, load_mantissa): for interoperability
- should count cut-down bit from topmost.
-
-Tue Apr 22 09:20:40 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg_ambiguous): hopefully better message.
-
- * lib/cgi.rb (CGI::QueryExtension::initialize_query): to_ary
- removed.
-
-Tue Apr 22 06:06:22 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/resolv.rb (Resolv::DNS::Resource#hash): use XOR to accumulate
- hash value.
-
- * lib/tsort.rb (TSort#each_strongly_connected_component): don't use
- block argument.
- (each_strongly_connected_component_from): ditto.
-
-Mon Apr 21 21:59:48 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * marshal.c: one more digit for decimal point. [ruby-talk:69808]
-
-Mon Apr 21 21:25:59 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * numeric.c (flo_is_finite_p): use finite() if available.
-
- * win32/win32.h (isinf, isnan): define as macro.
- [ruby-win32:00533]
-
- * bcc32/Makefile.sub, win32/Makefile.sub: no longer use
- missing/isinf.c, missing/isnan.c.
-
-Mon Apr 21 18:36:28 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * bignum.c (rb_cstr_to_inum): unnecessarily long buffer was used
- for radix 9. [ruby-dev:20057]
-
-Mon Apr 21 17:44:34 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (block_append, value_expr0, assign_in_cond,
- warn_unless_e_option, warning_unless_e_option, range_op,
- cond0): adjust line number in warning.
-
-Mon Apr 21 00:47:42 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * sample/test.rb: avoid the MSVCRT *printf problem(float).
- [ruby-dev:20037]
-
-Mon Apr 21 00:11:15 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * marshal.c (w_float): append least mantissa bits to get rid
- of roundoff problem. [ruby-talk:69518]
-
- * marshal.c (r_object0): load least mantissa bits.
-
-Sun Apr 20 23:24:25 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.c (NtInitialize): set the floating-point control word
- on bcc32.
-
- * win32/win32.h, bcc32/Makefile.sub: use missing/isinf.c, should not
- use _finite() because it returns 0 if NaN.
-
-Sun Apr 20 03:09:30 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * parse.y (void_expr0): node might become NULL after calling
- remove_begin().
-
-Sat Apr 19 21:55:10 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/Setup*: Add zlib and remove bogus and obsolete entries.
-
-Sat Apr 19 14:47:07 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_gc): use rb_gc_mark_maybe() to mark registered C
- addresses. C variables may not hold valid reference to Ruby
- objects. [ruby-core:00975]
-
-Sat Apr 19 00:56:13 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (rb_struct_eql): should compare values with "eql?".
-
-Fri Apr 18 23:29:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_check): <=> returns nil for invalid values;
- should check.
-
-Fri Apr 18 15:26:50 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * error.c (rb_raise): workaround for some implementations of
- vsnprintf.
-
-Fri Apr 18 02:23:42 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_compile_pattern): should not set RE_OPTIMIZE_ANCHOR,
- if anychar_repeat is enclosed by parentheses.
-
-Fri Apr 18 01:49:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * util.c (ruby_strtod): improved conversion accuracy.
-
-Thu Apr 17 14:39:23 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dbm/dbm.c (each_pair): add prototype to avoid VC++ warnings.
-
- * ext/readline/readline.c (Init_readline): follow readline 4.2
- prototype.
-
-Thu Apr 17 14:22:36 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (cond0): warn only range literals whose both side are
- literals. [ruby-core:00964]
-
-Thu Apr 17 11:10:59 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/readline/readline.c: add the defined operator for bcc32.
-
-Wed Apr 16 00:14:06 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-special-char-p): should test at the
- point if no argument. fixed by Michael Scholz
- <scholz-micha@gmx.de>.
-
-Tue Apr 15 19:35:08 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: rm_r should raise Errno::ENOENT if file
- does not exist ([ruby-core:958]). Thanks Johan Holmberg.
-
-Tue Apr 15 19:12:21 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * struct.c (rb_struct_hash): new methods Struct#hash, Struct#eql?.
- (ruby-bugs:PR#758)
-
-Tue Apr 15 16:05:11 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * numeric.c (rb_fix2str): buffer was insufficient.
- (ruby-bugs-ja:PR#431)
-
-Mon Apr 14 19:45:56 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * file.c (file_expand_path): root must follow buf when
- reallocated. [ruby-talk:69339], [ruby-dev:20025]
-
-Mon Apr 14 03:22:33 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * rubyio.h (struct OpenFile): add noraise flag to finalizer.
-
- * io.c (Init_IO): define $/, $-0, and $\ as string-only
- variables.
-
- * string.c (rb_str_split_m): does not generate empty string if
- the receiver is empty.
-
- * io.c (fptr_finalize): should raise error on EBADF for readable
- IOs as well.
-
-Mon Apr 14 15:54:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * bignum.c (rb_cstr_to_inum, rb_big2str): allow 2-36 as radix.
-
- * numeric.c (rb_fix2str): ditto.
-
- * string.c (rb_str_to_i): ditto.
-
-Sun Apr 13 03:20:31 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/mkmf.rb (try_func): remove COMMON_HEADERS at first for
- performance.
-
-Sat Apr 12 20:59:40 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-beginning-of-arg): substitute
- ruby-backward-arg.
-
- * misc/ruby-mode.el (ruby-calculate-indent): fixed wrong
- indentation in brace block and parentheses.
-
- * misc/ruby-mode.el (ruby-forward-sexp, ruby-backward-sexp):
- support special char literal, and negative arguments.
-
-Sat Apr 12 17:52:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_stat): use rb_check_convert_type() to retrieve IO.
-
-Fri Apr 11 19:00:14 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * win32/win32.c (rb_w32_stat): check arguments. [ruby-dev:20007]
- [ruby-win32:535]
-
-Fri Apr 11 15:56:08 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * numeric.c (coerce_rescue): prevent inspected String from GC.
-
- * numeric.c (flo_eq, rb_dbl_cmp, flo_gt, flo_ge, flo_lt, flo_le,
- flo_eql): correct NaN comparison. (ruby-bugs:PR#744)
-
- * sample/test.rb: NaN comparison test.
-
-Fri Apr 11 14:48:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_stat): dereference using StringValuePtr().
-
- * file.c (rb_file_s_stat): use rb_stat(). [ruby-dev:20007]
-
-Fri Apr 11 10:51:08 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/benchmark.rb (Benchmark::bm): get rid of warning.
- [ruby-talk:69124]
-
-Fri Apr 11 02:41:35 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * io.c (set_stdin): assigned value must respond to "read" and
- "getc".
-
- * io.c (set_outfile): assigned value must respond to "write".
- (ruby-bugs-ja:PR#425)
-
-Thu Apr 10 21:12:19 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb: Exception line was accidentally removed.
- [ruby-dev:19989]
-
-Thu Apr 10 18:42:13 2003 Tadayoshi Funaba <tadf@dotrb.org>
-
- * array.c (rb_ary_times): added some checks for request size.
-
-Thu Apr 10 03:22:38 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_mod_name): always return empty string for
- anonymous class/module. (ruby-bugs-ja PR#424)
-
- * config.sub: stop forcing addition of -gnu to -linux.
-
- * variable.c (classname): refactoring.
-
- * variable.c (rb_class_path): __tmp__classpath__ handling moved
- from classname().
-
-Thu Apr 10 01:52:24 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_obj_is_method): indefinite return value.
-
-Thu Apr 10 00:39:32 2003 Tanaka Akira <akr@m17n.org>
-
- * regex.c (re_compile_pattern): /[\--\-]/ was warned. warn /]/.
-
- * mkconfig.rb: escape `]' in regexp.
-
-Thu Apr 10 00:27:07 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * time.c (time_strftime): RSTRING(format)->ptr might become NULL.
-
-Wed Apr 9 23:54:50 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_obj_remove_instance_variable): better message.
- [ruby-talk:68987]
-
- * variable.c (rb_mod_remove_const): ditto.
-
- * object.c (rb_obj_ivar_get): ditto.
-
- * object.c (rb_obj_ivar_set): ditto.
-
- * parse.y (yylex): ditto.
-
-Wed Apr 9 21:51:20 2003 Dave Thomas <Dave@Thomases.com>
-
- * eval.c (rb_mod_define_method): Allow UnboundMethod as
- parameter.
-
-Wed Apr 9 18:30:58 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (top_include): include module to wrapper module if
- wrapper is present. experimental. [ruby-list:37539]
-
-Wed Apr 9 17:24:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_gc_mark_children): introduce this function again; this
- is required when stack was very tight. [ruby-talk:68916]
-
-Wed Apr 9 15:49:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigdivmod): small typo.
-
-Wed Apr 9 15:35:04 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/readline/readline.c: include <unistd.h> only when
- HAVE_UNISTD_H is defined.
-
-Wed Apr 9 14:05:00 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * marshal.c (w_object): preserve extended module on struct.
- (ruby-bugs-ja:PR#422)
-
-Wed Apr 9 03:43:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (BIGZEROP): macro to determine if x is a bignum zero.
-
-Tue Apr 8 11:49:31 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (Init_Proc): make Method and UnboundMethod independent.
- They are like instance and its class. [ruby-core:00941]
-
- * parse.y (yylex): disallow global variables like "$1ve".
- [ruby-core:00945]
-
- * marshal.c (marshal_dump): Marshal.dump(0, false) should cause an
- error. (ruby-bugs-ja PR#421)
-
- * regex.c (re_compile_pattern): warn if '-' is the edge of
- character range.
-
-Mon Apr 7 15:49:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (sock_s_unpack_sockaddr_in): remove struct
- size check. getnameinfo(3) can handle. [ruby-dev:19967]
-
-Mon Apr 7 01:33:31 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_read): do not call rb_sys_fail() when required data
- length is zero. (ruby-bugs-ja PR#420)
-
- * eval.c (umethod_proc): should raise TypeError, instead of
- returning error causing Proc. Following the principle of "fail
- early". [ruby-core:00927]
-
-Sun Apr 6 18:29:21 2003 UENO Katsuhiro <katsu@blue.sky.or.jp>
-
- * ext/zlib/zlib.c: the return value of GzipReader#getc must be
- unsigned.
-
-Sun Apr 6 00:35:37 2003 Tanaka Akira <akr@m17n.org>
-
- * sample/exyacc.rb: use Regexp in gsub!.
-
-Sat Apr 5 23:41:28 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): small but serious typo.
-
-Sat Apr 5 04:23:05 2003 Warren Brown <wkb@airmail.net>
-
- * sprintf.c (rb_f_sprintf): was decrementing width even if there
- is no sign character.
-
-Sat Apr 5 01:41:28 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (backtrace): skip internal allocator frame.
- (ruby-bugs-ja PR#416)
-
-Fri Apr 4 10:53:22 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (assign): should prepare mrhs by svalue_to_mrhs().
-
-Wed Apr 2 15:11:23 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * README.EXT, README.EXT.ja (3.3): clarified -1 as free for
- Data_Wrap_Struct(). [ruby-dev:19881]
-
-Mon Mar 31 11:11:36 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_missing): use "inspect" for T_OBJECT as well.
-
-Mon Mar 31 10:50:48 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (env_reject_bang): untaint key string.
-
- * hash.c (env_delete_m): execute block only if deleting key does
- not exist.
-
-Sat Mar 29 17:54:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): do not call rb_str_buf_cat() with NULL ptr,
- which causes SEGV; jump to grow instead. [ruby-dev:19944]
-
-Sat Mar 29 15:19:48 2003 Tanaka Akira <akr@m17n.org>
-
- * instruby.rb, ext/extmk.rb, lib/benchmark.rb, lib/cgi.rb,
- lib/debug.rb, lib/getoptlong.rb, lib/optparse.rb, lib/time.rb,
- lib/date/format.rb, lib/irb/ruby-lex.rb lib/uri/common.rb: revert
- escape for `-' in character class.
-
-Sat Mar 29 09:48:35 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (avalue_to_svalue): use rb_check_array_type() again.
- Clarify how "to_ary" and "to_a" work. [ruby-talk:68155]
-
- * eval.c (svalue_to_avalue): ditto.
-
- * eval.c (svalue_to_mrhs): ditto.
-
- * eval.c (rb_eval): unary splat to use to_a, but we need a hack to
- exclude Object#to_a until it's removed.
-
- * object.c (rb_Array): check obj.respond_to?("to_a"). Currently
- all object respond_to "to_a", but Object#to_a will be removed.
-
- * range.c (Init_Range): undefine to_ary.
-
- * re.c (Init_Regexp): ditto.
-
-Sat Mar 29 09:47:52 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * MANIFEST (ext/aix_mksym.rb): remove obsolete file.
-
-Fri Mar 29 06:21:24 2003 UENO Katsuhiro <katsu@blue.sky.or.jp>
-
- * ext/zlib: merge from rough.
-
-Fri Mar 28 19:33:39 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * variable.c (rb_class_path): hold temporary class path in a
- instance variable to get rid of GC. [ruby-dev:19932]
-
- * variable.c (classname): remove temporary class path when exact
- name found.
-
-Fri Mar 28 18:29:23 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_compile_pattern): do not warn if "-" is at the top
- or last of character class.
-
-Thu Mar 27 12:10:15 2003 Tanaka Akira <akr@m17n.org>
-
- * regex.c (re_compile_pattern): fix [:name:] handling.
- /[\[:digit:]]/ was treated as /[[:digit:]]/.
- /[[:-@]/ was treated as /[\[:\-@]/.
- /[%-[:digit:]]/ was treated as /[%-\[:digit:]\]/.
-
-Thu Mar 27 03:26:40 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * string.c (rb_str_capitalize_bang): check length before upcase
- first character. (ruby-bugs:PR#697)
-
-Wed Mar 26 20:25:10 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * dln.c (dln_find_1): break if path list end, even for too long
- path names. (ruby-bugs-ja:PR#412)
-
-Wed Mar 26 13:19:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (avalue_splat): new function to do unary * (splat)
- operator.
-
- * eval.c (avalue_to_svalue,svalue_to_avalue,svalue_to_mrhs): do
- not use implicit "to_ary" conversion.
-
- * ext/curses/curses.c (GetWINDOW,GetMOUSE): add taint check.
-
- * ext/curses/curses.c (curses_init_screen): ditto.
-
- * ext/curses/curses.c (window_initialize): ditto.
-
- * gc.c (os_each_obj): prohibit ObjectSpace#each_object in safe
- mode ($SAFE >= 4).
-
-Tue Mar 25 23:26:02 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * signal.c (trap): return "DEFAULT" and "IGNORE" respectively for
- previous sighandler SIG_DFL and SIG_IGN. [ruby-talk:67860]
-
-Tue Mar 25 12:24:15 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): call avalue_to_mrhs() to assign block
- parameter |a|. [ruby-dev:19897]
-
- * ruby.c (ruby_set_argv): freeze argument strings.
-
-Tue Mar 25 12:01:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_initialize): should check rb_secure(4).
-
- * dir.c (dir_s_getwd): should check rb_secure(4).
-
- * object.c (rb_obj_infect): function version of OBJ_INFECT().
-
- * eval.c (rb_secure_update): new function to check object update.
-
-Tue Mar 25 10:18:05 2003 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c: should infect also return values of
- #inspect.
-
- * ext/strscan/strscan.c: use snprintf() instead of sprintf().
-
-Mon Mar 24 16:55:04 2003 Takaaki Tateishi <ttate@ttsky.net>
-
- * ext/dl/dl.c: added rb_secure(4). (Thanks to Minero Aoki)
-
- * ext/dl/sym.c: ditto.
-
- * ext/dl/ptr.c: ditto.
-
-Mon Mar 24 00:09:02 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (block_append): warn unused literal.
-
-Sun Mar 23 22:22:04 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/jcode.rb (tr!, delete!, szueeze!): add empty string checking.
-
-Sun Mar 23 19:54:53 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * gc.c (rb_gc_call_finalizer_at_exit): use free() if dfree is -1.
-
-Sat Mar 22 15:50:29 2003 Tanaka Akira <akr@m17n.org>
-
- * time.c (make_time_t): try search_time_t if mktime/timegm is failed.
-
-Sat Mar 22 13:26:33 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/optparse.rb, lib/jcode.rb, ext/tk/lib/tk.rb: reorder character
- class /[\]\[]/ to /[\[\]]/ for readability.
-
-Sat Mar 22 12:44:15 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/date/format.rb, lib/uri/common.rb: escape `[', `]', `-' in
- character class in regexp to avoid warning.
-
-Sat Mar 22 07:39:32 2003 Ulf Betlehem <flu@iki.fi>
-
- * io.c (rb_io_fread): may lose data on nonblocking read.
-
-Fri Mar 21 23:40:41 2003 Tanaka Akira <akr@m17n.org>
-
- * regex.c (re_compile_pattern): fix previous change.
-
- * instruby.rb, ext/extmk.rb, ext/tk/lib/tk.rb, lib/benchmark.rb,
- lib/cgi.rb, lib/debug.rb, lib/getoptlong.rb, lib/jcode.rb,
- lib/optparse.rb, lib/time.rb, lib/date/format.rb,
- lib/irb/ruby-lex.rb: escape `[', `]', `-' in character class in
- regexp to avoid warning.
-
-Fri Mar 21 23:23:45 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_compile_pattern): give warning for unescaped square
- brackets and minus in character class. [ruby-dev:19868]
-
-Fri Mar 21 18:12:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (bmcall): missing type.
-
-Fri Mar 21 01:29:35 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): copy sign bits only if value is
- negative.
-
- * missing.h: include <stdarg.h> or <varargs.h> if HAVE_VSNPRINTF
- is not defined.
-
-Thu Mar 20 18:31:37 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/optparse.rb (OptionParser#order!): follow recent change
- of proc argument.
-
-Thu Mar 20 16:12:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flo_to_s): change format specifier to "%.15g" to
- avoid unnecessary 9s (e.g. 99.59999999999999). (ruby-bugs-ja PR#406)
-
-Thu Mar 20 16:03:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (stmt, primary): get rid of SEGV at empty or invalid
- condition. (ruby-bugs-ja:PR#410)
-
- * parse.y (cond_negative): negate condition node when NODE_NOT.
-
-Thu Mar 20 10:45:29 2003 Tanaka Akira <akr@m17n.org>
-
- * eval.c (bmcall): add volatile to avoid GC problem.
-
-Thu Mar 20 10:10:49 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (load_dyna): clear ruby_errinfo. (ruby-bugs-ja PR#409)
-
-Wed Mar 19 23:05:30 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/tracer.rb (trace_func): save and recover Thread.critical state.
- Fixed by Fukumoto Atsushi <fukumoto@imasy.or.jp> [ruby-dev:19830]
-
-Wed Mar 19 02:55:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (read_all): make str empty if given. (ruby-bugs-ja PR#408)
-
- * io.c (io_read): ditto.
-
- * io.c (rb_io_sysread): ditto.
-
-Tue Mar 18 18:24:03 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c: do not override min and max.
-
-Sun Mar 16 12:29:55 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb (object_address_group): use to_s instead of name
- to get name of class.
-
-Fri Mar 14 08:53:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (remove_sign_bits): octal left most digit for negative
- numbers may be '3'. (ruby-bugs-ja PR#407)
-
- * sprintf.c (rb_f_sprintf): should prefix sign bits if bignum is
- negative, using sign_bits().
-
-Wed Mar 12 16:48:19 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (prep_stdio): set binmode only if the file descriptor
- is not connected to a terminal on Cygwin.
-
-Wed Mar 12 11:23:49 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (avalue_to_mrhs): split argument passing and assignment
- conversion.
-
- * eval.c (svalue_to_mrhs): ditto.
-
- * eval.c (avalue_to_svalue): avalue_to_svalue([[1,2]]) should be
- [[1,2]], not [1,2] to wrap-around.
-
-Tue Mar 11 21:00:59 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: Digest string wrongly included '\n' when user
- name is too long (ruby-bugs-ja:PR#404).
-
-Tue Mar 11 20:07:01 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: speeding up by avoiding extra flush.
- (suggested by Brian Candler <B.Candler@pobox.com> [ruby-talk:66516])
-
-Tue Mar 11 04:30:12 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (massign): remove unnecessary array unpacking; it should
- be handled before massign() by svalue_to_mrhs().
-
- * eval.c (svalue_to_mrhs): '*a = v' value conversion to avalue
- (i.e. [1] => [[1]], [1,2] => [1,2]).
-
- * eval.c (rb_eval): use svalue_to_mrhs.
-
- * eval.c (rb_yield_0): ditto.
-
- * eval.c (proc_invoke): break from "Proc#yield" is legal.
-
-Mon Mar 10 23:19:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_find_file): need world writable directory check for
- relative paths too.
-
-Mon Mar 10 11:23:00 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_find_file): world writable directory check if
- $SAFE >= 1 (was $SAFE >= 2).
-
-Mon Mar 10 01:59:47 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb: do not dispatch LIST when a mailbox is empty.
-
- * lib/net/pop.rb: merge the 'STAT' patch from Frank S.Fejes
- <frank@oopdreams.com>, with modifications (listed below).
-
- * lib/net/pop.rb: new method Net::POP#mail_size.
-
- * lib/net/pop.rb: new method Net::POP#bytes.
-
- * lib/net/pop.rb: new method Net::POPCommand#stat.
-
-Sun Mar 9 19:30:25 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/fileutils.rb (mkdir, mkdir_p): revert.
-
- * instruby.rb (umask): umask 0022, not 0.
-
-Sun Mar 9 17:09:40 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/fileutils.rb (mkdir, mkdir_p): set mode to 0755.
-
- * Makefile.in (fake.rb): set ALT_SEPARATOR to the default value.
-
-Sat Mar 8 11:30:59 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (massign): fix a bug not to expand in assignment to sole
- lhs. [ruby-dev:19766]
-
-Fri Mar 7 21:57:25 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb (Kernel.pp): module function.
- (MatchData#pretty_print): new method.
-
-Fri Mar 7 20:27:19 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/tcltklib/extconf.rb (find_tcl, find_tk): return true if
- non-versioned found. [ruby-dev:19759]
-
-Fri Mar 7 15:05:35 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/dbm/extconf.rb: add QDBM support.
-
-Fri Mar 7 12:59:39 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (massign): deal with sole lhs, assign rest args from
- converted array. [ruby-dev:19751]
-
-Fri Mar 7 03:31:36 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (dsym): :"symbol string" style should not contain `\0'.
-
- * process.c (proc_detach): new method Process.detach(pid) which
- create background watcher thread to issue waitpid. [new]
-
- * process.c (rb_detach_process): utility function to detach
- process from C code.
-
- * ext/pty/pty.c (pty_finalize_syswait): terminate watcher thread,
- and detach child process (by creating new idle waitpid watcher
- thread).
-
- * ext/pty/pty.c (pty_syswait): may lost signal stopped child.
-
-Fri Mar 7 00:30:33 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/Win32API/Win32API.c: no longer use inline-asms.
-
- * ext/Win32API/extconf.rb: no need to add gcc options.
-
-Thu Mar 6 13:02:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (reswords): fix reswords list.
-
-Wed Mar 5 12:13:21 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: better YACC support on HP-UX.
-
-Wed Mar 5 05:55:20 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_cat): remove ptr NULL check and MEMZERO(). ptr
- must be non NULL.
-
-Tue Mar 4 23:12:07 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in, bcc32/Makefile.sub, win32/Makefile.sub: define
- RUBY_EXPORT to export symbols.
-
- * defines.h: use RUBY_EXTERN instead of EXTERN.
-
- * intern.h, re.h, ruby.h, rubysig.h: ditto.
-
- * win32/win32.h: remove EXTERN definition.
-
-Tue Mar 4 17:54:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_aref): raise TypeError if index is a symbol.
- [ruby-list:37217]
-
- * array.c (rb_ary_aset): ditto.
-
-Tue Nov 13 14:39:11 2001 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * missing/strftime.c: HP-UX support.
-
-Tue Mar 4 15:08:08 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: better HP-UX support.
-
- * missing/strftime.c: ditto.
-
-Tue Mar 4 10:11:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_popen): do not call rb_io_close() directly, call
- "close" method instead. [ruby-dev:19717]
-
- * io.c (rb_io_s_open): ditto.
-
- * hash.c (rb_any_hash): remove DEFER_INTS. all do_hash() calls in
- st.c are at the top of functions. No reentrant problem.
-
-Tue Mar 4 01:19:21 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/dl/MANIFEST: Exclude .cvsignore. [found by: eban]
-
-Tue Mar 4 01:17:08 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/Win32API/MANIFEST: Belatedly add lib/win32/registry.rb.
- [found by: eban]
-
-Tue Mar 4 00:33:04 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * MANIFEST: Belatedly add Test::Unit files. D'oh!
-
-Sun Mar 2 09:51:47 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * marshal.c (w_nbyte): should output always via rb_io_write().
-
- * marshal.c (dump_ensure): ditto.
-
- * marshal.c (marshal_dump): should call "binmode" method, if it
- responds to.
-
- * marshal.c (r_byte): should input always via "getc" method.
-
- * marshal.c (r_bytes0): should input always via "read" method.
-
- * marshal.c (marshal_load): need not to set up FILE* fp;
-
-Mon Mar 3 11:29:04 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg): parse 'lhs = a rescue b' as 'lhs=(a rescue b)'.
-
-Mon Mar 3 02:53:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_fread): should not clearerr() if there's no filled
- buffer (i.e. rb_io_fread() returning zero).
-
-Mon Mar 3 01:42:35 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-expr-beg): escaped char syntax.
-
- * misc/ruby-mode.el (ruby-parse-partial): ditto.
-
- * misc/ruby-mode.el (ruby-parse-partial): no deep indent for
- block.
-
- * misc/ruby-mode.el (ruby-backward-arg): skip arguments backward.
-
- * misc/ruby-mode.el (ruby-calculate-indent): too deep indentation.
-
-Fri Feb 28 23:50:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (map_errno): map OS error to errno. [new]
-
- * win32/win32.c (pipe_exec, CreateChild, poll_child_status, waitpid,
- kill, link, rb_w32_rename, unixtime_to_filetime, rb_w32_utime): use
- map_errno() instead of using GetLastError() directly.
-
- * win32/win32.c (rb_w32_select, rb_w32_accept, rb_w32_bind,
- rb_w32_connect, rb_w32_getpeername, rb_w32_getsockname,
- rb_w32_getsockopt, rb_w32_ioctlsocket, rb_w32_listen, rb_w32_recv,
- rb_w32_recvfrom, rb_w32_send, rb_w32_sendto, rb_w32_setsockopt,
- rb_w32_shutdown, rb_w32_socket, rb_w32_gethostbyaddr,
- rb_w32_gethostbyname, rb_w32_gethostname, rb_w32_getprotobyname,
- rb_w32_getprotobynumber, rb_w32_getservbyname, rb_w32_getservbyport,
- rb_w32_fclose, rb_w32_close): map winsock error to errno.
-
-Fri Feb 28 22:54:10 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * win32/win32.c (flock): supports larger files, and maps error
- code.
-
- * win32/win32.c (rb_w32_asynchronize): returns errno from child
- thread.
-
- * win32/win32.c (rb_w32_fclose, rb_w32_close): ensures unlocked.
-
-Wed Feb 26 17:38:16 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb: replace Kernel.open as well.
-
-Tue Feb 25 23:03:08 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/debug.rb (DEBUGGER__::Context#debug_command): bp filename must
- be the basename of it. [ruby-talk:65644]
-
-Mon Feb 24 17:49:35 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (yycompile): zero clear ruby_eval_tree_begin if
- compilation failed.
-
-Mon Feb 24 08:06:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_new): need no MEMZERO().
-
-Sun Feb 23 17:57:06 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/fileutils (fu_stream_blksize): wrong logical condition.
- (and -> or).
-
-Sat Feb 22 03:12:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_gt): use rb_num_coerce_cmp() instead of
- rb_num_coerce_bin.
-
- * numeric.c (fix_ge, fix_lt, fix_le): ditto.
-
- * numeric.c (flo_gt, flo_ge, flo_lt, flo_le): ditto.
-
-Sat Feb 22 02:45:20 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_create): may called from place higher than
- rb_gc_stack_start.
-
- * gc.c (Init_stack): update rb_gc_stack_start if it is lower (or
- higher if stack grows down) than the previous value.
-
-Fri Feb 21 21:03:41 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: new method FileUtils#copy_stream.
-
- * lib/fileutils.rb: new method FileUtils#compare_file.
-
- * lib/fileutils.rb: new method FileUtils#compare_stream.
-
- * lib/fileutils.rb: new method FileUtils#rmtree (alias of rm_rf).
-
-Fri Feb 21 17:19:27 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * eval.c (rb_f_require): do not need to abort if a DLEXT file
- is not found.
-
-Fri Feb 21 13:39:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_cmp_m): should use LONG2NUM().
-
-Fri Feb 21 12:45:50 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_cmp_m): two small bugs fixed.
-
-Fri Feb 21 08:03:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_gc_mark): inline rb_gc_mark_children().
-
- * gc.c (gc_sweep): new tactics to increase malloc_limit mildly.
-
-Fri Feb 21 05:16:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_cmp_m): return nil if str2 does not respond to
- both "to_str" and "<=>".
-
- * compar.c (cmp_gt): return nil if "<=>" returns nil (means
- incomparable).
-
- * compar.c (cmp_ge, cmp_lt, cmp_le): ditto.
-
- * compar.c (cmp_between): use RTEST(), since cmp_lt and cmp_gt may
- return nil.
-
-Thu Feb 20 19:05:51 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_start_0): main thread swapped by fork() may
- terminate rb_thread_start_0() successfully. call ruby_stop(0);
- this change was suggested by Rudi Cilibrasi
- <cilibrar@drachma.ugcs.caltech.edu>.
-
-Thu Feb 20 18:44:51 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * file.c (file_expand_path): fix wrong behavior for root file.
- expand_path("..", "//machine/share") => "//machine/share"
- expand_path("..", "c:/a") => "c:/"
- expand_path("..", "/a") => "/"
-
-Thu Feb 20 18:11:01 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * file.c (file_expand_path): should not upward beyond share name.
-
-Thu Feb 20 15:45:33 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * missing.h (strtoul): fix prototype of strtoul.
-
-Thu Feb 20 10:11:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (clhs): allow "Foo::Bar = x".
-
-Thu Feb 20 04:07:06 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (primary): "self[n]=x" can be legal even when "[]=" is
- private. changes submitted in [ruby-talk:63982]
-
- * parse.y (aryset): ditto.
-
- * parse.y (attrset): "self.foo=x" can be legal even when "foo="
- is private.
-
- * eval.c (is_defined): private "[]=" and "foo=" support.
-
- * eval.c (rb_eval, assign): ditto.
-
-Thu Feb 20 03:58:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): "foo=" should not always be public.
-
-Thu Feb 20 01:23:59 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_thread_restore_context): inhibit interrupts in
- critical section while context switching. [ruby-talk:64785]
-
-Wed Feb 19 18:27:42 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * node.h (nd_cpath): nested class/module declaration.
- [EXPERIMENTAL]
-
- * eval.c (rb_eval): ditto.
-
- * gc.c (rb_gc_mark_children): ditto.
-
- * parse.y (cpath): ditto.
-
-Tue Feb 18 21:39:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): should not report uninitialized warning by
- attribute reader method.
-
- * variable.c (rb_attr_get): new function to get instance variable
- without uninitialized warning.
-
- * io.c (argf_to_io): should prefetch argv.
-
-Tue Feb 18 00:13:50 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-comment-column): customize comment
- column. [new]
-
- * misc/ruby-mode.el (ruby-deep-indent-paren): deep indentation
- parentheses. [new]
-
- * misc/ruby-mode.el (ruby-expr-beg): fix for / after $?.
-
- * misc/ruby-mode.el (ruby-parse-partial, ruby-calculate-indent):
- deep indentation support.
-
- * misc/ruby-mode.el (ruby-forward-sexp, ruby-backward-sexp):
- move forward/backward across one balanced expression. [new]
-
- * misc/ruby-mode.el (ruby-indent-exp): indent balanced
- expression. [new]
-
- * misc/ruby-mode.el (ruby-electric-brace): indent before
- show matching parenthesis. (contributed by NABEYA Kenichi)
-
-Mon Feb 17 14:36:56 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * win32/win32.c (rb_w32_opendir, rb_w32_utime): need parens.
-
-Mon Feb 17 14:13:25 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (link): implement with CreateHardLink().
-
- * win32/win32.c, win32/win32.h (rb_w32_utime): enable utime() to
- directory if on NT. [new] (ruby-bugs-ja:PR#393)
-
-Mon Feb 17 13:28:51 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * file.c (file_expand_path): strip last slash when path is
- root.
-
-Sun Feb 16 19:22:31 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * file.c (file_expand_path): buffer might be reallocated while
- expanding default directory.
-
- * file.c (file_expand_path): default directory was being
- ignored if path was full path with no drive letter, under
- DOSISH.
-
-Sun Feb 16 03:14:33 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (prep_stdio, Init_io): always set binmode on Cygwin.
-
-Sat Feb 15 01:01:45 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * file.c (file_expand_path): fix surplus path separators while
- expanding at root directory. [ruby-dev:19572]
-
-Fri Feb 14 14:25:24 2003 akira yamada <akira@arika.org>
-
- * lib/uri/generic.rb, lib/uri/ldap.rb, lib/uri/mailto.ldap: all foo=()
- returns arguments passed by caller.
-
- * lib/uri/generic.rb (Generic#to_str, Generic#to_s): removed to_str.
- Suggested by Tanaka Akira <akr@m17n.org> at [ruby-dev:19475].
-
- * lib/uri/generic.rb (Generic#==): should not generate an URI object
- from argument. Suggested by Tanaka Akira <akr@m17n.org> at
- [ruby-dev:19475].
-
-Thu Feb 13 11:54:50 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ruby.c (ruby_init_loadpath): ensures buffer terminated
- before use strncpy().
-
- * ruby.c (proc_options): avoid SEGV at -S with no arguments.
- script argument is in effect only when -e is not given.
- (ruby-bugs-ja:PR#391)
-
-Thu Feb 13 01:30:10 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_thread_schedule): current thread may be dead when
- deadlock. (ruby-bugs:PR#588)
-
-Thu Feb 13 00:28:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_step): step might be float 0 < x < 1.
-
- * eval.c (rb_thread_schedule): pause if no runnable thread when
- there's only one thread.
-
-Thu Feb 13 00:09:47 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * file.c (strrdirsep): ignore trailing directory separators.
-
- * file.c (rb_file_s_expand_path): File.expand_path(".","/") should
- return "/". (ruby-bugs-ja:PR#389)
-
- * file.c (rb_file_s_basename): also ignore trailing directory
- separators, in compliance with SUSv3. (ruby-bugs-ja:PR#390)
-
- * file.c (rb_file_s_dirname, rb_file_s_extname): ditto.
-
- * file.c (rb_file_s_dirname): append "." if drive only.
-
- * file.c (rb_file_s_split): get rid of converting twice.
-
-Mon Feb 10 20:55:15 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb (parse_args): add '-n' to $mflags BEFORE "--".
- do not add DESTDIR if already included in $mflags.
-
-Mon Feb 10 19:54:30 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (FileUtils#uptodate?): use mtime for
- comparison.
-
-Mon Feb 10 10:14:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_to_a): return value should be an Array if the
- receiver is an instance of subclass of Array.
-
- * string.c (rb_str_to_s): return value should be a String if the
- receiver is an instance of subclass of String.
-
-Mon Feb 10 03:33:42 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (rb_file_sysopen): rb_file_sysopen_internal() needs four
- arguments.
-
-Sun Feb 9 15:16:04 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * intern.h (HAVE_RB_DEFINE_ALLOC_FUNC, RB_CVAR_SET_4ARGS):
- define to 1.
-
- * ruby.h (NORETURN_STYLE_NEW): ditto.
-
-Sun Feb 9 12:28:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/mkmf.rb (init_mkmf): add libdir to LIBPATH unless cross
- compiling.
-
-Sun Feb 9 08:34:45 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: 4xx raises Net::ProtoServerError, 5xx raises
- Net::ProtoFatalError (for backward compatibility).
-
-Sun Feb 9 07:07:26 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: new method FileUtils.pwd (really).
-
- * lib/fileutils.rb: FileUtils.pwd, cmp, identical?, uptodate? does
- not accept any option.
-
-Sat Feb 8 18:35:30 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-forward-string): fixed void variable
- error.
-
-Sat Feb 8 16:23:11 2003 NABEYA Kenichi <kenichi@nabeya.com>
-
- * misc/ruby-mode.el (ruby-font-lock-keywords): method name can
- be delimited by tab.
-
-Sat Feb 8 03:57:32 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/irb/workspace.rb, lib/irb/ext/math-mode.rb,
- lib/irb/ext/multi-irb.rb, lib/irb/lc/error.rb,
- lib/irb/lc/help-message, lib/irb/lc/ja/error.rb,
- lib/shell/command-processor.rb, lib/shell/error.rb,
- lib/shell/filter.rb: Fix typos and grammos. [approved by: keiju]
-
-Sat Feb 8 03:34:28 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * intern.h (HAVE_RB_DEFINE_ALLOC_FUNC): New boolean macro to make
- it easier to write extensions that work with both ~1.6 and 1.8~.
-
- * intern.h (RB_CVAR_SET_4ARGS): Ditto.
-
- * ruby.h (NORETURN_STYLE_NEW): Ditto.
-
-Sat Feb 8 00:47:24 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call): calls method_missing when superclass method
- does not exist.
-
- * eval.c (rb_f_missing): now handles "no super" case.
-
- * object.c (rb_obj_ivar_get): Object#instance_variable_get: new
- method to get instance variable value without eval(). [new]
-
- * object.c (rb_obj_ivar_set): Object#instance_variable_set: new
- method to set instance variable value without eval(). [new]
-
-Fri Feb 7 15:35:21 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * intern.h, re.c (rb_memsearch): returns long.
-
- * string.c (rb_str_index): should return offset position.
-
-Fri Feb 7 15:30:15 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (proc_invoke): should propagate self to super
- methods. [ruby-dev:19510]
-
-Thu Feb 6 19:04:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_initialize_m): should not preset "kcode" unless
- encoding is explicitly specified.
-
-Thu Feb 6 19:01:32 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: new method FileUtils.pwd.
-
- * lib/fileutils.rb: default label is ''.
-
- * lib/fileutils.rb: using module_eval again, to avoid ruby's bug.
-
- * lib/fileutils.rb: fix wrong examples in rdoc.
-
-Thu Feb 6 17:43:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/complex.rb (Complex#==): should not raise error by type
- mismatch.
-
- * lib/rational.rb (Rational#==): ditto.
-
-Thu Feb 6 11:44:40 2003 MoonWolf <moonwolf@moonwolf.com>
-
- * re.c (rb_reg_initialize_m): 3rd argument was ignored.
-
-Thu Feb 6 01:09:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_count): return 0 for empty string (was
- returning nil).
-
-Wed Feb 5 19:41:37 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb: dispatch code restructured to make it openable
- that has `open' method.
-
- * lib/open-uri.rb: Location: field may has a relative URI.
- pointed out by erik eriksson <ee@opera.com>.
-
-Wed Feb 5 17:11:02 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): no .<digit> float literal anymore.
-
-Tue Feb 4 16:11:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_equal): a == b is true when b is non T_ARRAY
- object, if b has "to_ary" and b == a.
-
- * hash.c (rb_hash_equal): a == b is true when b is non T_HASH
- object, if b has "to_hash" and b == a.
-
- * string.c (rb_str_equal): a == b is true when b is non T_STRING
- object, if b has "to_str" and b == a.
-
-Mon Feb 3 23:46:48 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_getline): should not increment lineno at EOF.
-
-Mon Feb 3 16:49:19 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (Init_Object): default Object#=== now calls "=="
- internally.
-
- * re.c (rb_reg_initialize_m): should honor option status of
- original regexp.
-
- * array.c (rb_ary_equal): ary2 should be T_ARRAY (no to_ary
- conversion).
-
- * array.c (rb_ary_eql): ditto.
-
- * string.c (rb_str_equal): str2 should be T_STRING (no to_str
- conversion).
-
-Mon Feb 3 16:32:52 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * re.c (rb_memsearch): a little improvement.
-
-Mon Feb 3 13:18:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_memsearch): algorithm body of String#index.
-
- * error.c (Init_Exception): "to_str" removed.
-
- * eval.c (eval): should not rely on Exception#to_str
-
- * eval.c (compile_error): ditto.
-
- * error.c (err_append): ditto.
-
-Sat Feb 1 23:56:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_merge): Hash#merge, non destructive "update".
- now there's also Hash#merge! which is an alias to "update".
-
-Fri Jan 31 14:16:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_index): search using Karp-Rabin algorithm.
-
-Fri Jan 31 12:45:11 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_obj_classname): new function.
-
- * string.c (rb_str_dup): should preserve original's class (but not
- hidden singleton class).
-
- * string.c (rb_str_substr): ditto.
-
- * parse.y: backout EXPR_CMDARG removal.
-
-Fri Jan 31 09:40:07 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/optparse.rb (OptionParser::List::accept): default
- pattern must not be nil.
-
- * lib/optparse.rb (OptionParser::make_switch): NoArgument doesn't
- override other styles.
-
-Thu Jan 30 16:46:43 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/optparse.rb (OptionParser::Switch::PlacedArgument): added.
- if the next argument doesn't start with '-', use it as the
- value.
-
- * lib/optparse.rb (OptionParser::make_switch): fixed a bug of
- pattern.
-
- * lib/optparse.rb (Array): no need to guard.
-
-Thu Jan 30 08:27:19 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * file.c (rb_file_s_expand_path): removed a sludge.
-
-Wed Jan 29 03:24:39 2003 Michal Rokos <michal@rokos.homeip.net>
-
- * dir.c (glob_helper): memory leak fixed.
-
-Tue Jan 28 04:45:03 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * instruby.rb (parse_args), ext/extmk.rb (parse_args): Prepend a
- hyphen to the first argument of MAKEFLAGS only if appropriate.
- Remove wrong comments.
-
-Mon Jan 27 03:30:06 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * error.c (get_syserror): use snprintf() instead of sprintf(). pointed
- out by knu.
-
-Mon Jan 27 02:06:38 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * error.c (get_syserror): some Windows' errno have 5 digits. pointed
- out by znz.
-
-Sun Jan 26 19:23:10 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * instruby.rb ($mflags.set?): Check $make instead of $nmake, since
- there is no such a variable.
-
- * instruby.rb ($mflags.set?), ext/extmk.rb ($mflags.set?): Return
- false if unmatched.
-
-Sun Jan 26 19:08:30 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/shellwords.rb: Embed rdoc style comments.
-
- * lib/shellwords.rb (shellwords): Use String#lstrip!.
-
- * lib/shellwords.rb (shellwords): Recognize an object that
- responds to to_str() by using String.new().
-
-Sun Jan 26 17:53:04 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * instruby.rb (parse_args), ext/extmk.rb (parse_args): Detect -n
- and emulate a dry run. Use 'make' in case no --make argument is
- given.
-
-Sun Jan 26 07:18:42 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * instruby.rb: re-define individual methods verbosely rather than
- including FileUtils::Verbose, in order to suppress messages from
- FileUtils#cmp.
-
- * instruby.rb (makedirs): make same directory only once even if
- dryrun.
-
- * lib/fileutils.rb (FileUtils::Verbose, FileUtils::NoWrite):
- re-define methods with define_method instead of module_eval.
-
-Sun Jan 26 03:37:18 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * instruby.rb, ext/extmk.rb, Makefile.in, win32/Makefile.sub,
- bcc32/Makefile.sub: Replace the complicated MFLAGS/MAKEFLAGS
- parser with something plain and comprehensible. This fixes a
- bug where make flags were wrongly reordered and the resulted
- command line often did not make sense especially when BSD make
- is used with extra arguments given. Tested with FreeBSD and
- Linux by me and mswin32, bccwin32 and mingw by usa.
-
-Fri Jan 24 18:15:33 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: tMINUS should have lower precedence than tPOW.
-
-Fri Jan 24 05:12:55 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): deal
- with escaped $ and ? at the end of strings. [ruby-talk:62297]
-
- * misc/ruby-mode.el (ruby-font-lock-keywords): added defined?.
-
-Thu Jan 23 17:25:04 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): do not warn discarding already undefined
- method.
-
- * lib/rational.rb: undef quo before replacing.
-
-Thu Jan 23 15:49:57 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (arg): missing arguments.
-
-Thu Jan 23 14:56:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rational.rb: modified to support "quo".
-
- * numeric.c (num_quo): should return most exact quotient value,
- i.e. float by default, rational if available.
-
- * numeric.c (num_div): "div" should return x.divmod(x)[0].
-
-Thu Jan 23 13:24:18 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_arg): was accessing garbage argv value.
-
-Thu Jan 23 06:37:01 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * instruby.rb: should not contain destdir in shebang line.
-
-Wed Jan 22 23:19:57 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (pipe_exec): remove unnecessary SetStdHandle().
-
-Wed Jan 22 20:20:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg): syntaxify tPOW negative number hack.
-
- * parse.y (negate_lit): new function to negate literal numeric
- values in compile time.
-
-Wed Jan 22 15:36:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_match_exec): charset info may be stored in MBC
- region when $KCODE != NONE.
-
-Wed Jan 22 14:22:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (set_syserr): should preserve duplicated error names.
-
-Tue Jan 21 20:29:31 2003 Michal Rokos <michal@rokos.homeip.net>
-
- * mkmf.rb: make possible to add files to clean and distclean targets
-
-Tue Jan 21 18:05:25 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * bcc32/Makefile.sub (LIBRUBY_A): link dmyext.
-
-Tue Jan 21 16:59:18 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * instruby.rb: use real interpreter pathname at shebang line.
- [ruby-dev:19370]
-
-Tue Jan 21 16:22:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg): put back old ** behavior for negative number
- right operand.
-
-Tue Jan 21 14:46:12 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb: Use Test::Unit.
-
- * lib/prettyprint.rb: Ditto
-
- * lib/time.rb: Ditto
-
- * lib/tsort.rb: Ditto
-
-Tue Jan 21 04:15:50 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb: Use redefined `to_s' as well as `inspect'.
- Useless `pretty_print' methods removed.
- (PP::ObjectMixin#pretty_print_inspect): new method.
-
-Mon Jan 20 21:48:43 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * configure.in (MANTYPE): Detect if the system's nroff(1) groks
- mdoc. Provide a new option --with-mantype={doc|man} in case the
- check does not work as expected.
-
- * Makefile.in (MANTYPE): Define MANTYPE and pass it to
- instruby.rb.
-
- * instruby.rb: Convert mdoc manpages to man for systems which
- nroff(1) does not grok mdoc.
-
-Mon Jan 20 21:25:18 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/tempfile.rb (self.open): If a block is given, call it with
- tempfile as an argument and automatically close the tempfile
- when the block terminates.
-
-Mon Jan 20 21:02:50 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * mdoc2man.rb: Properly put nested braces, parentheses and angles.
-
- * mdoc2man.rb: Add support for .An and .Aq/.Ao/.Ac.
-
- * mdoc2man.rb: Add support for .Dl.
-
- * mdoc2man.rb: Make .Pf macro actually work.
-
- * mdoc2man.rb: Properly handle .Os.
-
- * mdoc2man.rb: Correctly omit spaces around punctuation
- characters.
-
-Mon Jan 20 19:43:41 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * mdoc2man.rb: Make this work as a library.
-
-Mon Jan 20 18:22:40 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_f_require): purge too many goto's.
-
-Mon Jan 20 17:50:05 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * mdoc2man.rb (parse_macro): Understand .Ux.
-
-Mon Jan 20 17:32:56 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * mdoc2man.rb: New file. A mdoc to man converter ported from
- Perl.
-
-Mon Jan 20 15:40:15 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * ruby.1: Properly close .Bl with .El.
-
-Mon Jan 20 04:14:17 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/mkmf.rb (egrep_cpp): use inspect to show options.
-
- * lib/mkmf.rb (dir_config): prior configured directories to
- defaults.
-
- * lib/mkmf.rb (dir_config): extract first word to determine
- make command type.
-
-Mon Jan 20 02:15:53 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/aix_mksym.rb: no longer used.
-
-Mon Jan 20 00:17:16 2003 Matt Armstrong <matt@lickey.com>
-
- * file.c (eaccess): under windows, make eaccess() just call
- access(). [ruby-core:716], [ruby-bugs:PR#556]
-
-Sun Jan 19 23:08:18 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/shellwords.rb (shellwords): A backslash ('\') in single
- quotes should not be regarded as meta character. This bug or
- maybe feature was inherited from Perl's shellwords.pl.
-
-Sun Jan 19 14:01:12 2003 UENO Katsuhiro <unnie@blue.sky.or.jp>
-
- * regex.c (is_in_list): should work well with UTF-8.
-
- * regex.c (re_match_exec): ditto.
-
-Sat Jan 18 14:53:49 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * bignum.c (rb_cstr_to_inum): should not erase all 0s, but
- squeeze into one. [ruby-dev:19377]
-
-Fri Jan 17 03:33:42 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * sprintf.c (rb_f_sprintf): Fix a bug caused by an uninitialized
- variable v, that a bignum unexpectedly gets converted into a
- string with its higher figures all filled with ./f/7/1,
- depending on the base. This bug seems to have been introduced
- in rev.1.27.
-
- * sprintf.c (rb_f_sprintf): Use switch instead of a sequence of
- else-if's.
-
-Wed Jan 15 15:18:38 2003 moumar <moumar@netcourrier.com>
-
- * configure.in (ARCHFILE): set even unless --enable-shared on
- AIX. [ruby-talk:61466]
-
- * marshal.c (math.h): should be included after ruby.h on AIX.
- [ruby-talk:61366]
-
-Tue Jan 14 21:47:56 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_f_require): do not search adding .rb/.so suffixes if
- the suffix specified. [ruby-dev:18702]
- http://moonrock.jp/~don/d/200211.html#d08_t1
-
-Tue Jan 14 18:36:41 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_all): now works without block.
-
- * enum.c (enum_any): ditto.
-
-Tue Jan 14 01:21:32 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * io.c (next_argv): not always set binmode.
-
-Mon Jan 13 20:45:19 2003 Guy Decoux <ts@moulon.inra.fr>
-
- * parse.y (list_append): avoid O(n) search using node->nd_next->nd_end.
-
- * parse.y (list_concat): ditto.
-
- * eval.c (rb_eval): NODE_ARRY nd_end adoption.
-
-Mon Jan 13 02:22:11 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/dl/lib/dl/win32.rb: eliminate unnecessary "A" adding.
-
-Sun Jan 12 16:07:17 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (next_argv): inherit binmode from $defout.
-
-Sat Jan 11 22:50:47 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/dl/lib/dl/win32.rb: compatibility improvement.
-
-Sat Jan 11 01:44:16 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in (RUBY_CHECK_IO_NEED): added more tests.
-
- * io.c (rb_io_check_readable): seek after synchronized write.
-
-Fri Jan 10 01:23:45 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): syntax
- classes are not allowed inside character classes.
- [ruby-talk:60996]
-
-Thu Jan 9 23:28:01 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in: AC_MSG_FAILURE is a new macro in 2.54b or later.
-
-Thu Jan 9 17:05:24 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in (RUBY_CHECK_IO_NEED): check whether fseek() and
- fflush() are needed.
-
- * io.c (flush_before_seek): flush write stream only.
-
- * io.c (rb_io_check_readable): seek instead of flush if the last
- operation was write.
-
- * io.c (rb_io_check_writable): seek instead of flush if the last
- operation was read.
-
- * bcc32/Makefile.sub, win32/Makefile.sub: needs to seek between
- R/W.
-
-Thu Jan 9 16:31:51 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): should not discard nested NODE_BLOCK.
-
-Thu Jan 9 15:12:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (stmt): NODE_NOT elimination for if/unless/while/until node.
-
- * parse.y (primary): ditto.
-
-Thu Jan 9 13:26:18 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * st.h, st.c: Back out the introduction of st_*_func_t. Some
- compilers complain about function type mismatch.
-
-Thu Jan 9 02:10:44 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): reduce recursive rb_eval() call by using sort
- of continuation passing style.
-
-Wed Jan 8 17:10:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/Win32API/lib/win32/registry.rb: added. [new]
-
-Wed Jan 8 15:54:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c: remove ruby_last_node and assignments seems to be
- unnecessary
-
- * intern.h: debug does not run if ID_ALLOCATOR is zero.
-
-Wed Jan 8 15:04:11 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_each): treat fixnums specially to boost.
-
- * numeric.c (num_step): remove rb_scan_args() for small speedup.
-
-Tue Jan 7 17:56:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (svalue_to_avalue): should return converted array.
-
-Tue Jan 7 07:48:01 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_f_local_variables): skip $_, $~ and flip states in
- dynamic variables. [ruby-core:00681]
-
-Tue Jan 7 02:46:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (env_clear): new Hash compatible method.
-
- * hash.c (env_shift, env_invert, env_replace, env_update): ditto.
-
-Mon Jan 6 23:36:29 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * st.h, st.c: Introduce new conventional typedef's, st_data_t,
- st_compare_func_t, st_hash_func_t and st_each_func_t.
-
- * st.h, st.c: Do explicit function declarations and do not rely on
- implicit declarations.
-
- * class.c, eval.c, gc.c, hash.c, marshal.c, parse.y, variable.c:
- Add proper casts to avoid warnings.
-
-Mon Jan 6 20:44:43 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * intern.h (rb_check_array_type): Declare rb_check_array_type().
-
- * ext/digest/md5/md5ossl.c: Include stdio.h for sprintf() and
- string.h for memcmp().
-
- * ext/dl/ptr.c: Include ctype.h for isdigit().
-
-Mon Jan 6 18:43:17 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c: improve DOSISH drive letter support.
-
-Mon Jan 6 18:31:45 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/fileutils.rb (ln): add ' -f' in the verbose message.
-
- * lib/fileutils.rb (cp_r): add 'p' in the verbose message.
-
-Mon Jan 6 16:44:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_join): dispatch based on "to_str".
-
- * array.c (rb_ary_times, rb_ary_equal): ditto.
-
-Mon Jan 6 13:26:35 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (proc_exec_v): follow to proc_spawn_v(). call do_aspawn()
- on Win32.
-
- * process.c (rb_proc_exec): call do_spawn() on Win32.
-
- * win32/win32.c, win32/win32.h (do_spawn, do_aspawn): add mode flag.
-
- * process.c (proc_spawn_v, rb_f_system): follow above change.
-
-Mon Jan 6 05:11:15 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/extmk.rb: make $0 normal variable.
-
-Mon Jan 6 02:32:46 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * struct.c (make_struct): needs meta class.
-
-Sun Jan 5 22:54:05 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/fileutils.rb (ln): `argv' is not a argument.
-
-Sun Jan 5 17:44:37 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/extmk.rb (extmake): set $0 temporarily while loading
- extconf.rb.
-
-Sun Jan 5 14:46:46 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * instruby.rb: need paren in regexp(make -n install).
-
- * ext/extmk.rb (sysquote): do not need to quote on mswin/bccwin/mingw.
-
- * ext/extmk.rb ($mflags): uniq items and remove '-' and '--'.
- move options to the lead.
-
- * lib/fileutils.rb (install): model on the real install
- command(message).
-
-Sun Jan 5 09:36:46 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ruby.c (ruby_init_loadpath): under Windows, get the module
- path from an internal address instead of hard coded library
- name.
-
- * cygwin/GNUmakefile.in, bcc32/Makefile.sub,
- win32/Makefile.sub (CPPFLAGS): removed LIBRUBY_SO macro.
-
- * bcc32/Makefile.sub, win32/Makefile.sub (config.h): no longer
- depends on makefiles.
-
-Sun Jan 5 04:17:05 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * gc.c (SET_STACK_END): Issue a FLUSH_REGISTER_WINDOWS here too.
- This fixes make test on FreeBSD/sparc64.
-
-Sun Jan 5 03:43:47 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * defines.h (FLUSH_REGISTER_WINDOWS): Make the flushw call an
- inline function so it can be used as an expression.
-
- * eval.c (EXEC_TAG, THREAD_SAVE_CONTEXT): Consistently call
- FLUSH_REGISTER_WINDOWS before calling setjmp(). (I suspect that
- every setjmp() implementation should take care of register
- windows, though)
-
-Sun Jan 5 03:12:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (utimbuf): use utimbuf instead of _utimbuf if defined _WIN32.
-
- * win32/Makefile.sub (LIBS): use oldnames.lib.
-
- * win32/win32.c (rb_w32_getcwd): follow above change.
-
- * win32/win32.h: ditto.
-
- * wince/direct.c, wince/direct.h (getcwd): ditto.
-
- * wince/io.h: ditto.
-
- * wince/string.c, wince/wince.h (stricmp, strnicmp): ditto.
-
-Sat Jan 4 15:18:50 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (rb_proc_exec): use same logic as DJGPP on win32 ports.
-
- * process.c (rb_f_system): ditto.
-
- * win32/win32.c, win32/win32.h (do_aspawn): [new]. for arrayed
- arguments.
-
- * win32/win32.c (CreateChild): add new argument for real filename of
- executing process.
-
- * win32/win32.c (NtHasRedirection, pipe_exec): follow above change.
-
-Sat Jan 4 14:29:52 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * configure.in: set rb_cv_need_io_flush_between_seek=yes.
-
- * win32/Makefile.sub (config.h): define NEED_IO_FLUSH_BETWEE_SEEK.
- (pointed out by moriq [ruby-dev:19299])
-
-Sat Jan 4 03:12:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (umethod_bind): exact class match is not required. relax
- the restriction to subclasses.
-
-Sat Jan 4 01:33:40 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * file.c (rb_file_s_lchmod): get rid of gcc-3 -O3 warning.
-
-Fri Jan 3 22:26:07 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * process.c (rb_proc_times): need to initialize first.
-
-Fri Jan 3 01:10:17 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): call "inherited" before executing class body.
-
- * class.c (rb_define_class): call "inherited" after defining the
- constant.
-
- * class.c (rb_define_class_under): ditto.
-
-Thu Jan 2 19:37:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (massign): expand first element if RHS is an array and
- its size is 1, and LHS has concrete assignment target (i.e. LHS
- has target(s) other than *var).
-
- * eval.c (massign): avoid unnecessary avalue/svalue conversion.
-
- * eval.c (rb_yield_0): ditto
-
- * array.c (rb_ary_update): do not allocate unused array if rpl is
- nil (i.e. merely removing elements).
-
-Thu Jan 2 13:55:08 2003 Mathieu Bouchard <matju@sympatico.ca>
-
- * io.c (io_read): should resize supplied string if it's shorter
- than expected.
-
-Thu Jan 2 11:01:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (bmcall): arguments should be an array.
-
-Wed Jan 1 18:18:45 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: better DJGPP support. add GNUmakefile.
-
- * djgpp/GNUmakefile: new.
-
-Wed Jan 1 04:16:18 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * node.h (struct RNode): Change argc from int to long. Otherwise
- NEW_CFUNC() sets argc to a wrong value on platforms where
- sizeof(int) != sizeof(long) and the byte order is big-endian.
- This fixes breakage on FreeBSD/sparc64.
-
-Tue Dec 31 23:22:50 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (massign): removed awkward conversion between yvalue,
- mvalue, etc.
-
- * eval.c (rb_yield_0): new parameter added to tell whether val is
- an array value or not.
-
- * parse.y (yield_args): restructuring: new nodes: NODE_RESTARY2,
- NODE_SVALUE; removed node: NODE_RESTARGS.
-
-Tue Dec 31 21:13:51 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * Makefile.in, {win32,bcc32}/Makefile.sub: add new target:
- what-where, no-install.
-
- * mkconfig.rb: add const: CROSS_COMPILING.
-
- * ext/extmk.rb: no-install support. add MAKEDIRS macro.
-
- * lib/mkmf.rb: add !ifdef .. !endif for Borland make.
-
- * process.c: improve DJGPP support. system "ls", "-l".
-
-Tue Dec 31 20:16:37 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/socket/addrinfo.h (NI_MAXHOST): Define NI_MAXHOST and
- NI_MAXSERV only if they are not defined yet. This fixes build
- on such platforms as OpenBSD.
-
-Tue Dec 31 20:07:49 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/tcltklib/extconf.rb (find_tcl, find_tk): Look for both
- lib{tcl,tk}M.N and lib{tcl,tk}MN on all platforms. *BSD have
- Tcl/Tk libraries named this way.
-
-Tue Dec 31 19:48:21 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * configure.in: Improve OpenBSD support. [obtained from: OpenBSD
- ports]
-
- * dln.c (FUNCNAME_PATTERN): Ditto.
-
-Tue Dec 31 19:21:02 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * array.c (rb_ary_transpose): Properly declare ary as a VALUE.
-
- * file.c (rb_file_s_chmod): Do not directly cast an int to void *
- to avoid a warning.
-
- * defines.h (FLUSH_REGISTER_WINDOWS): Add support for
- FreeBSD/sparc64. miniruby still coredumps in a different place,
- though.
-
-Tue Dec 31 07:47:15 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (parse_string): readjusted.
-
- * parse.y (heredoc_identifier): readjusted.
-
- * parse.y (here_document): make EOL codes of single-quoted
- here-documents consistent.
-
- * parse.y (yylex): reduced unnecessary conditionals.
-
-Tue Dec 31 04:49:51 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ruby.1: mdoc'ify.
-
-Tue Dec 31 01:30:29 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * parse.y (yylex): do not accept " __END__\n". ([ruby-dev:19245])
-
-Mon Dec 30 21:10:59 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * parse.y (yylex): use strncmp instead of strcmp.
- accept "__END__\r\n". ([ruby-dev:19241])
-
-Mon Dec 30 20:32:14 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_gc_mark_frame): should mark frame->node.
-
-Mon Dec 30 19:10:30 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/extmk.rb: split --make argument contains options, assume
- the first word of --make-flags is always options even unless
- preceded by -, and ignore letter-case of options if nmake.
-
- * instruby.rb: extract -n option also from --make and
- --make-flags.
-
- * bcc32/Makefile.sub, win32/Makefile.sub: not prepend - to
- $(MFLAGS)
-
-Mon Dec 30 16:44:14 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * string.c (rb_str_substr): should share the shared string if
- present, instead of the original string. (ruby-bugs:PR#528)
-
-Mon Dec 30 05:10:00 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/socket/socket.c (tcp_svr_init): local host to
- init_inetsock() is VALUE but not pointer.
-
- * ext/socket/socket.c (sock_s_unpack_sockaddr_in): get rid of
- gcc-3 -O3 warning.
-
-Sun Dec 29 23:45:53 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * gc.c (gc_sweep): adjust GC trigger.
-
- * dln.c (init_funcname_len): get rid of gcc-3 -O3 warning.
-
- * eval.c (copy_node_scope): ditto.
-
- * hash.c (rb_hash_foreach, delete_if_i, select_i, each_value_i,
- each_key_i, each_pair_i, envix): ditto.
-
- * range.c (range_each_func): ditto.
-
- * file.c (rb_file_s_chmod): ditto.
-
-Sun Dec 29 15:30:37 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (fu_parseargs): should not inherit ftools.rb's
- misfeature.
-
-Sun Dec 29 05:08:13 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/fileutils.rb (cmp): return false if file size differs.
-
-Sat Dec 28 19:21:24 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * instruby.rb: remove junk args.
-
- * lib/mkmf.rb (create_makefile): remove a trouble library
- before making a shared library.
-
- * win32/Makefile.sub: invoke instruby.rb with the --make-flags option.
-
-Sat Dec 28 03:09:58 2002 Wakou Aoyama <wakou@ruby-lang.org>
-
- * lib/cgi.rb (CGI#[]): improvement. thanks to Kazuhiro NISHIYAMA
- <zn@mbf.nifty.com>
-
-Sat Dec 28 00:34:03 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * {win32,bcc32}/Makefile.sub: remove `=' from --make-flags options.
- nmake quotes args if included `=' in args.
-
- * instruby.rb: use getopts.rb.
-
- * ext/dbm/extconf.rb (-DDBM_HDR): substitute ' with " to avoid
- a error on Win32.
-
- * ext/gdbm/gdbm.c: add prototypes to avoid VC++ warnings.
-
-Fri Dec 27 21:41:57 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * bcc32/setup.mak, win32/setup.mak(-prologue-): move srcdir from
- CPP input or UNC path will be removed as a comment.
-
-Fri Dec 27 17:55:00 2002 Takaaki Uematsu <mail@uema2.cjb.net>
-
- * wince/config, wince/configure.bat: replace 1.7 with 1.8
- in macros.
-
-Fri Dec 27 13:28:14 2002 Minero Aoki <aamine@loveruby.net>
-
- * instruby.rb: fileutils.rb accepts only one argument.
-
-Fri Dec 27 13:23:29 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (fu_parseargs): reject illegal options
- correctly.
-
- * lib/fileutils.rb (uptodate?): parameter declaration was wrong.
-
- * lib/fileutils.rb: change coding styles.
-
-Fri Dec 27 09:25:22 2002 ABE Shigeru <shiger-a@nifty.com>
-
- * process.c (rb_proc_times): avoid WindowsXP crash using volatile
- variables.
-
-Fri Dec 27 02:56:58 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * instruby.rb: check only `-' option, and use fileutils instead of
- ftools.
-
-Fri Dec 27 02:45:17 2002 Wakou Aoyama <wakou@ruby-lang.org>
-
- * lib/net/telnet.rb: Telnet#print not add "\n".
-
- * lib/cgi.rb: cgi['key'] is equal cgi['key'][0]
-
-Thu Dec 26 22:33:18 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb (create_makefile): check only `-' option.
-
- * configure.in: cleanups for MinGW. remove -D__NO_ISOCEXT in $CFLAGS.
-
- * win32/win32.h: prototypes for isinf, isnan are not needed on MinGW.
-
-Thu Dec 26 19:22:00 2002 YOSHIDA Kazuhiro <moriq@moriq.com>
-
- * win32/setup.mak (-prologue-): moved srcdir macro definition.
- [ruby-win32:420].
-
-Wed Dec 25 18:26:44 2002 K.Kosako <kosako@sofnec.co.jp>
-
- * regex.c (re_match): fixed wrong \G behavior. (ruby-bugs-ja:PR#377)
-
-Wed Dec 25 16:41:16 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_match_exec): fix odd \G behavior based on the patch
- from Nobu.
-
-Wed Dec 25 11:05:11 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * bcc32/setup.mak (-generic-): removed garbages.
-
-Wed Dec 25 10:36:20 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bcc32/Makefile.sub, win32/Makefile.sub (RUBY_SO_NAME, config.h):
- use $(MAJOR) and $(MINOR). based on Nobu's patch. [ruby-win32:413]
-
- * bcc32/setup.mak, win32/setup.mak (-prologue-): define MAJOR, MINOR
- and TEENY from version.h. based on Nobu's patch. [ruby-win32:413]
-
- * win32/Makefile.sub (config.h): add HAVE_FLOAT_H.
-
- * win32/Makefile.sub (parse.obj): depend on win32/win32.h.
-
-Tue Dec 24 23:49:16 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/irb/completion.rb: Use Object#class rather than Object#type.
-
-Tue Dec 24 23:37:40 2002 TADA Tadashi <sho@spc.gr.jp>
-
- * lib/cgi.rb (Cookie::parse), lib/cgi-lib.rb (initialize): Do not
- pass to split() a bare string longer than 2 characters as
- separator.
-
-Tue Dec 24 19:19:24 2002 Tietew <tietew@tietew.net>
-
- * numeric.c (DBL_MAX_10_EXP): fix typo. [ruby-dev:19175]
-
-Tue Dec 24 17:02:46 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_undefined): use NoMethodError instead of fatal.
-
-Tue Dec 24 02:12:45 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/README: Synchronize with reality.
-
-Tue Dec 24 02:05:51 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * MANIFEST, lib/README, lib/ipaddr.rb: Add ipaddr.rb from rough.
-
-Sun Dec 22 04:07:47 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dbm/dbm.c (fdbm_alloc): allocator takes only one argument.
-
-Sun Dec 22 02:49:25 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * array.c (ary_alloc), dir.c (dir_s_alloc), eval.c (thgroup_s_alloc),
- file.c (rb_stat_s_alloc), hash.c (hash_alloc), io.c (io_alloc),
- object.c (rb_module_s_alloc, rb_class_allocate_instance),
- re.c (match_alloc, rb_reg_s_alloc), string.c (str_alloc),
- time.c (time_s_alloc), ext/digest/digest.c (rb_digest_base_alloc),
- ext/tcltklib/tcltklib.c (ip_alloc),
- ext/win32ole/win32ole.c (fole_s_allocate, fev_s_allocate)
- : add prototype to get rid of VC++ warnings.
-
- * ext/sdbm/init.c (fsdbm_alloc): allocator takes only one argument.
-
-Sun Dec 22 00:36:43 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): accept pure ruby libraries.
-
-Sat Dec 21 23:59:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (ins_methods_i): should not show ID_ALLOCATOR.
-
- * class.c (ins_methods_prot_i): ditto.
-
- * class.c (ins_methods_priv_i): ditto.
-
- * class.c (ins_methods_pub_i): ditto.
-
- * eval.c (call_trace_func): ditto.
-
- * eval.c (rb_undefined): ditto.
-
-Sat Dec 21 07:27:24 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-parse-partial): keywords must not be
- preceded by @ or $.
-
-Fri Dec 20 20:29:04 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/curses/curses.c, ext/dbm/dbm.c, ext/digest/digest.c,
- ext/dl/handle.c, ext/dl/ptr.c, ext/dl/sym.c, ext/gdbm/gdbm.c,
- ext/iconv/iconv.c, ext/sdbm/init.c, ext/stringio/stringio.c,
- ext/strscan/strscan.c, ext/tcltklib/tcltklib.c,
- ext/win32ole/win32ole.c: use rb_define_alloc_func().
-
-Fri Dec 20 18:29:04 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * io.c (rb_io_fwrite): separated from io_write().
-
- * marshal.c (w_byten): use rb_io_fwrite() to support non-blocking
- IO, and added error check.
-
- * rubyio.h: prototypes; rb_io_fwrite
-
-Fri Dec 20 17:40:59 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (Init_Object): should not remove Class#allocate.
-
- * lib/profiler.rb: separate profiling functions, without
- trace_func and at_exit setting.
-
-Fri Dec 20 16:20:04 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (do_block): split "do" block and tLBRACE_ARG block.
-
- * parse.y (cmd_brace_block): new tLBRACE_ARG block rule
-
- * parse.y (command): can take optional cmd_brace_block; use %prec
- to resolve shift/reduce conflict. (ruby-bugs-ja PR#372)
-
- * eval.c (ruby_finalize): trace_func should be cleared here (after
- executing exit procs and finalizers).
-
- * eval.c (rb_define_alloc_func): new allocation framework, based
- on Nobu's work [ruby-dev:19116]. "allocate" method is no longer
- used for object allocation.
-
-Fri Dec 20 05:06:49 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/README, lib/cgi/ftplib.rb, lib/telnet.rb: Delete ftplib.rb
- and telnet.rb. It has been quite some time sinc they were
- obsoleted and made to emit warnings.
-
-Fri Dec 20 04:58:22 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/tempfile.rb: Embed Rdoc style comments.
-
- * lib/tempfile.rb: Add length as an alias for size.
-
-Fri Dec 20 03:57:32 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/tempfile.rb: Add Tempfile#close!() as a shorthand for
- Tempfile#close(true).
-
- * lib/tempfile.rb: Add Tempfile#{unlink,delete}().
-
-Fri Dec 20 03:53:01 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/README, lib/cgi/final.rb, lib/cgi/session.rb: Delete
- final.rb, which was obsoleted long ago.
-
-Fri Dec 20 00:16:06 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * re.c (rb_reg_match_pre, rb_reg_match_post, match_to_a,
- match_select): return instances of same class as the original
- string. [ruby-dev:19119]
-
-Thu Dec 19 22:55:49 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (DBL_EPSILON): fix typo.
-
-Thu Dec 19 22:35:20 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (assign): avoid [BUG] at multiple attribute assignment.
-
-Thu Dec 19 01:00:09 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_step): use DBL_EPSILON.
-
- * array.c (rb_check_array_type): new function: return an array
- (convert if possible), or nil.
-
- * string.c (rb_check_string_type): new function: return a string
- (convert if possible), or nil.
-
- * numeric.c (rb_dbl_cmp): returns nil if values are not
- comparable.
-
- * numeric.c (fix_cmp,flo_cmp): use rb_num_coerce_cmp()
-
- * bignum.c (rb_big_cmp): ditto.
-
- * numeric.c (rb_num_coerce_cmp): new coercing function for "<=>",
- which does not raise TypeError.
-
- * numeric.c (do_coerce): can be suppress exception now.
-
- * object.c (rb_mod_cmp): should return nil for non class/module
- objects.
-
-Thu Dec 19 04:21:10 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/open-uri.rb: add a missing ||. (found by: ruby -wc)
-
-Wed Dec 18 17:53:05 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_eqq): return false if the argument is not a
- string. now returns boolean value.
-
- * class.c (rb_include_module): argument should be T_MODULE, not
- T_class, nor T_ICLASS.
-
-Wed Dec 18 03:52:55 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * string.c (rb_str_new4): handle tail shared string.
- (ruby-bugs-ja:PR#370)
-
- * string.c (rb_str_dup_frozen): ditto.
-
-Tue Dec 17 21:08:29 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * node.h (NODE_ATTRASGN): new node, assignment to attribute.
- [ruby-core:00637].
-
- * eval.c (is_defined, rb_eval): ditto.
-
- * parse.y (attrset, node_assign): ditto.
-
- * string.c (rb_str_substr): tail sharing. [ruby-core:00650]
-
- * re.c (rb_reg_nth_match): ditto.
-
-Tue Dec 17 16:52:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (is_defined): "defined?" should return "assignment" for
- attribute assignment (e.g. a.foo=b) and indexed assignment
- (e.g. a[2] = 44).
-
- * parse.y (aryset): use NODE_ATTRASGN.
-
-Tue Dec 17 04:03:45 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb: new file.
-
-Tue Dec 17 00:28:19 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (utimbuf): need to define for VC++.
-
-Mon Dec 16 15:53:20 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (nextc): get rid of overrun. (pointed out by akr
- [ruby-list:36773])
-
-Sun Dec 15 21:16:44 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/mkmf.rb (init_mkmf): add $(topdir) to $LIBPATH if $extmk.
- remove adding $(archdir) to $LIBPATH.
-
-Sat Dec 15 12:15:00 2002 Takaaki Uematsu <mail@uema2.cjb.net>
-
- * configure.in, defines.h, dir.c, dir.h, dln.c, error.c,
- eval.c, file.c, hash.c, io.c, main.c, missing.c,
- process.c, ruby.c, rubysig.h, signal.c, st.c, util.c, util.h,
- bcc/Makefile.sub, win32/Makefile.sub, win32/win32.h,
- ext/Win32API/Win32API.c, ext/socket/getaddrinfo.c,
- ext/socket/getnameinfo.c, ext/socket/socket.c,
- ext/tcltklib/stubs.c
- : replace "NT" with "_WIN32", add DOSISH_DRIVE_LETTER
- * wince/exe.mak : delete \r at the end of lines.
- * wince/mswince-ruby17.def : delete rb_obj_become
-
-Sun Dec 15 11:43:26 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (dispose_string): dispose String object.
-
- * parse.y (heredoc_restore, here_document): fix memory leak.
-
-Sat Dec 14 14:25:00 2002 Takaaki Uematsu <mail@uema2.cjb.net>
-
- * wince/sys : add stat.c, stat.h, timeb.c, timeb.h,
- types.h, utime.c, utime.h
- * wince/dll.mak : object file name changed.
- * wince/io.c : add empty dup2().
- * wince/io.h : add dup2 definition.
-
-Sat Dec 14 01:51:29 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/dbm/extconf.rb (rb_check): support for GNU dbm 1.8.3.
- (-with-dbm-type=gdbm_compat). link against -lgdbm_compat
- and -lgdbm.
-
-Fri Dec 13 23:42:16 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/dbm/extconf.rb (db_check): check existence of the function
- in the specified library before checking it in libc.
-
-Fri Dec 13 17:15:49 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (generic_ivar_get): should always warn uninitialized
- instance variables.
-
-Fri Dec 13 12:33:22 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (expr): rescue clause was ignored.
-
-Thu Dec 12 18:19:14 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (RUBY_PROG_GNU_LD): add $CFLAGS, $CPPFLAGS, $LDFLAGS
- to the option of $CC.
-
- * configure.in: set LIBRUBYARG to '-l$(RUBY_SO_NAME)' if the
- target os is cygwin and --disable-shared option is supplied.
-
- * lib/mkmf.rb (init_mkmf): expand config["LIBRUBY"] and
- config["LIBRUBY_A"]. don't link $LIBRUBYARG_STATIC if
- --disable-shared option is supplied.
-
- * configure.in (RUBY_CPPOUTFILE): should be a better message.
-
- * ext/Win32API/extconf.rb: join with a space.
-
-Thu Dec 12 17:27:19 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_hash): define Regexp#hash to make regexps to be
- hash keys.
-
- * re.c (Init_Regexp): define Regexp#eql? (alias to Regexp#==).
-
-Thu Dec 12 16:26:31 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * marshal.c (r_object0): singleton class instance can't be loaded.
- (ruby-bugs-ja:PR#366)
-
-Wed Dec 11 23:35:43 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb (create_makefile): -no-undefined -> --no-undefined.
-
-Wed Dec 11 17:54:59 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_read): takes optional second argument to specify a
- string to be written. the string should not be frozen.
-
- * io.c (rb_io_sysread): ditto.
-
-Wed Dec 11 11:30:28 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/digest/digest.c (rb_digest_base_copy): renamed "become".
-
- * ext/stringio/stringio.c (strio_copy): ditto.
-
-Wed Dec 11 00:45:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/getoptlong.rb (GetoptLong::Error): provide a common ancestor
- for GetoptLong error classes (RCR#129).
-
-Tue Dec 10 17:42:39 2002 K.Kosako <kosako@sofnec.co.jp>
-
- * re.c (rb_reg_copy_object): fixed memory leak.
-
-Tue Dec 10 17:30:35 2002 Tanaka Akira <akr@m17n.org>
-
- * pack.c (utf8_limits): fix the limit of 4 bytes UTF-8 sequence.
-
-Tue Dec 10 12:01:15 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (mnew): original class of method defined in module should
- be the module not intermediate class. [ruby-dev:19040]
-
-Tue Dec 10 01:16:52 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): preceding ".." for negative numbers
- still left; removed.
-
- * sprintf.c (rb_f_sprintf): should not prepend '0' if width > prec
- for example "%5.3d".
-
-Sat Dec 7 18:14:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (Init_process): add Process.exit and Process.abort
-
- * pack.c (utf8_to_uv): raise ArgumentError for malformed/redundant
- UTF-8 sequences.
-
-Fri Dec 6 03:46:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (last_status_set): add pid attribute to Process::Status.
-
-Wed Dec 4 17:31:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (uv_to_utf8): limit maximum length of the encoded string
- to 6 bytes, even when the platform supports 8 bytes long integers.
-
- * pack.c (utf8_to_uv): do not decode sequences longer than 6 bytes.
-
- * object.c (copy_object): use "copy_object" method, not "become".
-
-Wed Dec 4 16:37:11 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (copy_object): copy finalizers as well if any.
-
- * gc.c (rb_gc_copy_finalizer): new function to copy finalizers.
-
-Tue Dec 3 01:13:41 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb (PP.singleline_pp): new method.
-
-Sun Dec 1 23:04:03 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/optparse.rb (OptionParser::new): same as OptionParser#on but
- returns new OptionParser::switch.
-
-Sun Dec 1 22:43:29 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * win32/win32.c (rb_w32_stat): empty path is invalid, and return
- ENOENT rather than EBADF in such case. [ruby-talk:57177]
-
-Fri Nov 29 18:01:48 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (utf8_to_uv): added checks for malformed or redundant
- UTF-8 sequences.
-
-Thu Nov 28 12:08:30 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/mkmf.rb: Avoid the use of "clean::" in favor of "clean:" in
- order not to let make(1) choke if there is another dependency on
- the target added in a depend file.
-
-Thu Nov 28 02:40:42 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/mkmf.rb: Make sure to dig the destination directory before
- installing a file there. Formerly "make install" could fail
- depending on make(1)'s mood of the moment, especially when -jN
- is given.
-
-Wed Nov 27 17:39:38 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/syslog/syslog.c: Cut redundancy.
-
- * ext/syslog/syslog.c: Do not leak ident.
-
-Wed Nov 27 17:25:29 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/syslog/syslog.c, ext/syslog/test.rb: Syslog.close should
- raise RuntimeError when not opened.
-
- * ext/syslog/syslog.c, ext/syslog/test.rb:
- Syslog.{ident,options,facility,mask} should all return nil when
- not opened.
-
- * ext/syslog/syslog.c, ext/syslog/test.rb: Change back the output
- format of inspect().
-
-Wed Nov 27 16:25:43 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/test.rb: Switch from RUnit to Test::Unit.
-
-Wed Nov 27 16:14:12 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/syslog/syslog.c: Fix a problem where Syslog.ident was not
- marked and could thus be GC'd.
-
-Wed Nov 27 16:11:53 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/syslog/test.rb: Switch from RUnit to Test::Unit.
-
- * ext/syslog/test.rb: The output format of inspect() is slightly
- altered.
-
-Wed Nov 27 06:43:26 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * error.c (exit_initialize): add SystemExit#initialize to set
- instance variable status. (ruby-bugs-ja:PR#362)
- Now accepts status as optional first argument.
-
- * eval.c (error_handle): now SystemExit have status always.
-
- * eval.c (system_exit): just instantiate SystemExit without raise.
-
- * eval.c (rb_thread_start_0): initialize SystemExit properly.
-
-Tue Nov 26 10:17:04 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dln.c (init_funcname_len): remove MAXPATHLEN dependency.
-
-Mon Nov 25 19:55:38 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb (extmake): return true if not dynamic and not static.
-
-Mon Nov 25 01:08:40 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * dln.c: revert and add the MAXPATHLEN definition on mswin32/mingw32.
-
-Sun Nov 24 20:36:53 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * dln.c: move the MAXPATHLEN definition in front.
-
-Fri Nov 22 22:55:01 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): preceding ".." for negative
- hexadecimal numbers should not appear if prec (e.g. %.4) is
- specified.
-
- * pack.c (NUM2I32): support platforms which does not have 32bit
- integers (e.g. Cray).
-
-Fri Nov 22 19:20:36 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * instruby.rb: Install batch files on Windows. [Submitted by usa]
-
-Fri Nov 22 18:31:46 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_add_method): node may be NULL.
-
-Thu Nov 21 20:53:06 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: changes coding style.
-
- * lib/net/pop.rb: ditto.
-
- * lib/net/protocol.rb: ditto.
-
-Thu Nov 21 20:17:08 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: changes coding style.
-
-Thu Nov 21 20:04:06 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: should not overwrite Host: header.
- (This patch is contributed by sean@ruby-lang.org)
-
-Thu Nov 21 20:01:33 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: support Proxy-Authorization.
- (This patch is contributed by Alexander Bokovoy)
-
-Thu Nov 21 11:03:39 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_find_file_ext): should not terminate searching with
- empty path, just ignore.
-
- * dir.c: remove <sys/parm.h> inclusion.
-
-Wed Nov 20 02:07:12 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * compar.c (cmp_eq,cmp_gt,cmp_ge,cmp_lt,cmp_le): check using
- rb_cmpint().
-
- * error.c (init_syserr): remove sys_nerr dependency.
-
-Wed Nov 20 01:52:21 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_cmp): added to satisfy Comparable assumption.
-
- * eval.c (rb_add_method): "initialize" should be public if it is a
- singleton method.
-
-Tue Nov 19 22:37:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_match): avoid dereferencing if size == 0.
- (ruby-bugs-ja:PR#360)
-
-Tue Nov 19 20:40:39 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_cmp): should return nil if an operand is not a
- number nor time. (ruby-bugs-ja:PR#359)
-
- * file.c (rb_stat_cmp): should return nil if an operand is not
- File::Stat.
-
-Tue Nov 19 14:35:09 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_zip): iterates over items in the receiver.
- zipped with nil if argument arrays are shorter. if arrays are
- longer, left items are ignored. now works with blocks.
-
- * enum.c (zip_i): changed for new behavior.
-
- * array.c (rb_ary_transpose): added. [new]
-
-Tue Nov 19 05:12:21 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * instruby.rb: Do not install various working files under bin/.
-
-Tue Nov 19 05:07:39 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * instruby.rb: not rewrite installed scripts when dry-run mode.
-
- * lib/ostruct.rb (OpenStruct::initialize): should symbolize keys
- instead of values.
-
-Tue Nov 19 02:24:10 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * instruby.rb: Rewrite installed scripts' shebang lines.
-
- * instruby.rb: Use File.join() where appropriate.
-
-Tue Nov 19 01:53:35 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * bin/irb: Moved from sample/irb.rb.
-
- * instruby.rb: Install script files under bin/ with ruby's program
- prefix and suffix.
-
-Mon Nov 18 02:13:36 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/tempfile.rb: Make this library thread safe.
-
- * lib/tempfile.rb: Do not pick a name which was once used and is
- still scheduled for removal.
-
- * lib/tempfile.rb: A lock file need not and must not be scheduled
- for removal.
-
- * lib/tempfile.rb: Compare Max_try with the number of mkdir
- failures instead of the suffix counter.
-
- * lib/tempfile.rb: Overall cleanup and add some important notices.
-
-Sun Nov 17 22:57:31 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (dsym): garbage returned. (ruby-bugs-ja:PR#358)
-
-Fri Nov 15 07:40:08 2002 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
-
- * observer.rb: raise NoMethodError instead of NameError.
- [ruby-dev:18788]
-
- * ostruct.rb: ditto. fix a bug in inspect which called String#+ with
- Symbol. [ruby-dev:18788]
-
- * profile.rb: illegal use of Array#sort!. replaced it with non-bang
- method. [ruby-dev:18792]
-
-Thu Nov 14 22:40:29 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in (LIBRUBY_A): append -static. [ruby-dev:18689]
-
- * configure.in (LIBRUBYARG_STATIC, LIBRUBYARG_SHARED): linker
- argument to link static/shared library respectively.
-
- * Makefile.in (LIBRUBYARG_STATIC, LIBRUBYARG_SHARED): added.
-
- * bcc32/Makefile.sub, win32/Makefile.sub: ditto.
-
- * instruby.rb (LIBRUBY_A): install to libdir.
-
- * lib/mkmf.rb (link_command): link static library of ruby, or
- try_run fails unless LIBRUBY_SO is installed. [ruby-dev:18646]
-
- * eval.c (call_trace_func): toplevel caller was missing.
- [ruby-dev:18754]
-
- * eval.c (proc_to_s): adjust created line number.
-
- * parse.y (primary, do_block, brace_block): adjust line number of
- block to beginning line, instead of the first statement inside
- the block.
-
-Thu Nov 14 08:23:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * math.c (math_acos): check errno after operation. ditto for
- asin, acosh, atanh, log, log10 and sqrt.
-
- * eval.c (rb_add_method): initialize should always be private.
-
- * parse.y (expr): add rescue modifier rule.
-
- * parse.y (command_call): return, break and next with argument is
- now part of this rule.
-
-Wed Nov 13 16:22:38 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in (DLDFLAGS): removed -Wl,-no-undefined to
- ext/extmk.rb, in order to allow references to symbols in other
- extension libraries for mkmf.rb. [ruby-dev:18724]
-
- * ext/extmk.rb (extmake): ditto.
-
- * ext/extmk.rb (extmake): exit when make failed.
-
-Sun Nov 10 03:46:18 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb: retire contain?() and add superset?(),
- proper_superset?() subset?(), and proper_subset?().
- [obtained from: Jason Voegele's set.rb]
-
- * lib/set.rb: define several aliases: union() for |(),
- difference() for -(), and intersection() for &().
- [obtained from: Jason Voegele's set.rb]
-
- * lib/set.rb: deal with a s/id/object_id/ leftover.
-
-Sat Nov 9 16:06:57 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/tcltklib/stubs.c: should include "util.h" for ruby_strdup.
-
-Sat Nov 9 11:39:45 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c: remove ENABLE_TRACE/DISABLE_TRACE to trace child nodes of
- c-call. [ruby-dev:18699]
-
-Fri Nov 8 04:16:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): "a" in "a /5" should be considered as a local
- variable. [experimental]
-
-Thu Nov 7 09:51:37 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_yield_0): should enable trace for non-cfunc nodes.
- [ruby-dev:18645]
-
- * eval.c (blk_orphan): a block created in a different thread is
- orphan. [ruby-dev:17471]
-
-Wed Nov 6 16:57:06 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_define_method): do not set NOEX_CFUNC if klass is
- really a module, whose methods must be safe for receiver's type.
-
- * eval.c (rb_eval): nosuper should not be inherited unless the
- overwritten method is an undef placeholder.
-
-Tue Nov 5 00:46:04 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/extmk.rb: Properly pass the given target to
- make(1). [pointed out by eban]
-
-Mon Nov 4 20:03:53 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * instruby.rb, lib/mkmf.rb: use CONFIG["ENABLE_SHARED"] instead of
- checking whether CONFIG["configure-args"] includes "--enable-shared".
-
-Mon Nov 4 16:49:14 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (primary): allow 'when'-less case statement; persuaded
- by Sean Chittenden.
-
-Mon Nov 4 06:28:09 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * Makefile.in, ext/extmk.rb, bcc32/Makefile.sub,
- win32/Makefile.sub: Introduce better command line syntax
- (--make/--make-flags/--extstatic) to extmk.rb and instruby.rb.
- Previously such command as 'make -j3 install' with pmake doesn't
- fail. Formerly extmk.rb was receiving "make -j 3 -j 3" via the
- command line arguments and just ended up recognizing the first
- "3" as destdir. [with help of usa]
-
-Mon Nov 4 03:59:51 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/getopts.rb: Do not choke on characters that cannot be used
- in a variable name. Replace them with `_'. Define a hash named
- $OPT for convenience.
-
-Sat Nov 2 00:38:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (Init_Object): added Object#object_id, new name for
- Object#id. [new]
-
- * object.c (rb_obj_id_obsolete): give warning for Object#id.
-
- * numeric.c (fix_intern): added Fixnum#to_sym. [new]
-
- * object.c (sym_to_sym): rename from Symbol#intern
-
-Fri Nov 1 14:21:06 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_zip): added Enumerable#zip. [new]
-
- * array.c (rb_ary_zip): added Array#zip.
-
-Thu Oct 31 20:10:18 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (init_syserr): remove sys_nerr dependency.
-
-Thu Oct 31 09:31:51 2002 K.Kosako <kosako@sofnec.co.jp>
-
- * eval.c (rb_export_method): undef'ed method visibility should not
- be changed.
-
-Wed Oct 30 17:00:47 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_mod_public_method_defined, etc.): new methods:
- public_method_defined?, private_method_defined?,
- protected_method_defined?
-
- * object.c (rb_obj_public_methods): new method
- Object#public_methods.
-
- * class.c (ins_methods_i): Object#methods should list both public
- and protected methods.
-
- * class.c (rb_class_public_instance_methods): new method
- Module#public_instance_methods.
-
-Wed Oct 30 06:29:00 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * eval.c, file.c, gc.c, io.c, object.c, ruby.c, ruby.h, struct.c,
- ext/socket/socket.c: differentiate long and int; use proper
- printf type specifiers and do casts where appropriate.
-
-Wed Oct 30 04:07:33 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (error_print, rb_longjmp, rb_thread_schedule): flush
- error message. [ruby-dev:18582]
-
- * eval.c (ruby_cleanup): added. just clean up without exit.
- [ruby-dev:18582]
-
- * eval.c (ruby_exec): added. execute main evaluation tree without
- exit. [ruby-dev:18582]
-
- * intern.h: prototypes; ruby_cleanup, ruby_exec
-
-Tue Oct 29 02:00:08 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/extmk.rb (extmake): use dummy_makefile to create dummy
- Makefile.
-
- * lib/mkmf.rb (find_executable0): EXEEXT is optional.
-
- * lib/mkmf.rb (dummy_makefile): make dummy Makefile content.
-
- * lib/mkmf.rb (create_makefile): define EXTLIB replacing -l.
-
- * lib/mkmf.rb ($bccwin): detect Borland make by help message.
-
- * lib/mkmf.rb (CLEANINGS): common rules to clean.
-
-Mon Oct 28 01:27:17 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * djgpp/config.sed (@program_transform_name@): use `%', not `,'.
-
-Sun Oct 27 22:59:50 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * ext/extmk.rb(78) : The unnecessary error when installing by bccwin32
- is controlled.
-
- * lib/mkmf.rb(773) : Also in the case of bccwin32, the path was added.
-
-Sun Oct 27 17:07:25 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * djgpp/*: sync with the latest.
-
- * ext/extmk.rb, lib/mkmf.rb: flush $stdout.
-
- * io.c (READ_DATA_PENDING_COUNT, READ_DATA_PENDING_PTR):
- undef these macros on DJGPP.
-
-Sat Oct 26 10:11:47 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * node.h (nd_type): cast the value to int.
-
-Sat Oct 26 04:27:35 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/dbm/dbm.c (fdbm_indexes, fdbm_select): add a missing
- argument and prevent coredump when a nonexistent key is
- specified.
-
- * ext/sdbm/init.c (fsdbm_indexes, fsdbm_select): ditto.
-
-Sat Oct 26 03:28:43 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * eval.c, gc.c: use a common set of alloca() #ifdef's. This fixes
- the build with Intel C Compiler for Linux.
-
- * eval.c (rb_f_require): declare old_func with a real type, not
- just type modifiers.
-
-Fri Oct 25 02:55:01 2002 Minero Aoki <aamine@loveruby.net>
-
- * string.c (rb_str_split_m): RSTRING(str)->ptr might become NULL.
- [ruby-dev:18581]
-
-Thu Oct 24 21:57:02 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in (LIBPATHFLAG): avoid $ substitution.
- [ruby-dev:18577]
-
- * ext/extmk.rb (extmake): expand $srcdir.
-
- * ext/win32ole/extconf.rb: should not override $CFLAGS, but
- append.
-
- * lib/mkmf.rb (config_string): use given config hash.
-
- * bcc32/Makefile.sub (.rc.res): directory part may be empty in
- Borland make.
-
-Thu Oct 24 03:38:07 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/mkmf.rb (create_makefile): site-install target for backward
- compatibility.
-
- * lib/mkmf.rb (init_mkmf): libdir prior to topdir.
-
- * configure.in (LIBPATHFLAG): should escape $. [ruby-dev:18572]
-
- * mkconfig.rb: never substitute escaped $$.
-
- * instruby.rb: not install LIBRUBY_SO unless enable-shared.
- [ruby-dev:18569]
-
-Wed Oct 23 19:16:06 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_eval): added NODE_DSYM, symbol literal with
- interpolation.
-
- * node.h: ditto.
-
- * intern.h: prototypes; rb_is_junk_id, rb_str_dump, rb_str_intern
-
- * object.c (sym_inspect): escape and quote for non-alphanumeric
- symbols.
-
- * parse.y (dsym, tokadd_string, yylex): extended symbol literals.
-
- * parse.y (rb_is_junk_id): added.
-
- * string.c (rb_str_dump, rb_str_intern) : make extern.
-
- * lib/mkmf.rb (create_makefile): deffile should be removed by
- distclean, not clean.
-
-Tue Oct 22 23:56:41 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/mkmf.rb (init_mkmf): add dir_config("opt").
-
-Tue Oct 22 19:44:03 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * bcc32/configure.bat : The command line when calling setup.mak is
- corrected.
-
- * bcc32/readme.bcc32 : It follows up about the option of configure.bat.
-
-Tue Oct 22 15:23:19 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * instruby.rb: add dryrun mode.
-
- * ext/extmk.rb (extmake): add install: target to dummy Makefile.
-
- * ext/extmk.rb (extmake): avoid Borland make's quirk behavior.
-
- * lib/mkmf.rb (link_command): opt is not a makefile macro.
-
- * bcc32/Makefile.sub ($(LIBRUBY_SO) $(LIBRUBY)): EXTOBJS were not
- linked.
-
- * bcc32/Makefile.sub (ext/extinit.obj): missing.
-
- * bcc32/Makefile.sub (TRY_LINK): options have to place before any
- non-option arguments.
-
- * win32/Makefile.sub (TRY_LINK): need -link and -libpath options.
-
- * bcc32/Makefile.sub, win32/Makefile.sub (RANLIB): logical
- operator never work with command.com.
-
-Tue Oct 22 00:59:59 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (RUBY_CPPOUTFILE): fix cache file bug.
-
- * lib/mkmf.rb (link_command): put 'opt' after conftest.c for
- static linking.
-
-Mon Oct 21 22:53:02 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in (XCFLAGS): CFLAGS to compile ruby itself.
-
- * configure.in (LIBEXT): suffix for static libraries.
-
- * configure.in (LIBPATHFLAG): switch template to specify library
- path.
-
- * configure.in (LINK_SO): command to link shared objects.
-
- * configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
- files.
-
- * configure.in (EXPORT_PREFIX): prefix to exported symbols on
- Windows.
-
- * configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
- libraries, macros and headers used in common.
-
- * configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
- executable name.
-
- * Makefile.in (CFLAGS): append XCFLAGS.
-
- * Makefile.in (PREP): miscellaneous system dependent files.
-
- * Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
-
- * Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
-
- * Makefile.in (MAKEFILES): depend on *.in and config.status.
-
- * Makefile.in (parse.c): replace "y.tab.c" with actual name for
- byacc.
-
- * ext/extmk.rb, lib/mkmf.rb: integrated.
-
- * ext/extmk.rb: propagate MFLAGS.
-
- * ext/extmk.rb (extmake): make dummy Makefile to clean even if no
- Makefile is made.
-
- * lib/mkmf.rb (older): accept multiple file names and Time
- objects.
-
- * lib/mkmf.rb (xsystem): split and quote.
-
- * lib/mkmf.rb (cpp_include): make include directives.
-
- * lib/mkmf.rb (try_func): try whether specified function is
- available.
-
- * lib/mkmf.rb (install_files): default to site-install.
-
- * lib/mkmf.rb (checking_for): added.
-
- * lib/mkmf.rb (find_executable0): just find executable file with
- no message.
-
- * lib/mkmf.rb (create_header): output header file is variable.
-
- * lib/mkmf.rb (create_makefile): separate sections.
-
- * lib/mkmf.rb (init_mkmf): initialize global variables.
-
- * win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
-
- * bcc32/Makefile.sub (ARCH): fixed to i386.
-
- * win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
- link EXTOBJS.
-
- * ext/dl/extconf.rb: use try_cpp to cross compile.
-
- * ext/dl/extconf.rb: not modify files in source directory.
-
-Fri Oct 18 23:11:21 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (value_expr0): allow return/break/next/redo/retry in rhs
- of logical operator. [ruby-dev:18534]
-
- * parse.y (remove_begin): eliminate useless NODE_BEGIN.
- [ruby-dev:18535]
-
-Fri Oct 18 01:02:44 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * hash.c, eval.c: Use (*_NSGetEnviron()) instead of environ on
- Darwin for namespace cleanness. [ruby-core:00537]
-
- * dln.c (dln_load): Fix Darwin support that has been disabled and
- switch to using it on Darwin instead of the system dlopen().
- [ruby-core:00541]
-
-Thu Oct 17 19:17:56 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * marshal.c (w_byten): added; write n bytes from s to arg.
-
- * marshal.c (dump): flush buffered data.
-
- * marshal.c (marshal_dump, r_byte, r_bytes0, marshal_load): unify
- marshaling I/O. [ruby-talk:53368]
-
-Thu Oct 17 12:58:24 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: stat.blksize might be 0/nil.
-
- * lib/fileutils.rb: change coding style.
-
-Wed Oct 16 22:35:53 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * sprintf.c (rb_f_sprintf): disallow mixed usage of numbered and
- unnumbered arguments. [ruby-dev:18531]
- get rid of memory leak at exception. [ruby-core:00460]
-
-Wed Oct 16 13:36:29 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * variable.c (rb_global_entry): not add global entry until
- initialized to avoid accessing it while GC. [ruby-dev:18514]
-
- * variable.c (rb_alias_variable): ditto.
-
-Wed Oct 16 01:03:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_str_to_dbl): RString ptr might be NULL.
-
- * object.c (rb_cstr_to_dbl): p pointer might be NULL.
-
- * bignum.c (rb_str_to_inum): RString ptr might be NULL.
-
- * bignum.c (rb_cstr_to_inum): str pointer might be NULL.
-
-Sat Oct 12 23:44:11 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * win32/win32.c (rb_w32_putc): wrong condition to fill or flush on
- bccwin32. [ruby-win32:408]
-
-Fri Oct 11 15:58:06 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg): rescue modifier is now an operator with
- precedence right below assignments. i.e. "a = b rescue c" now
- parsed as "a = (b rescue c)", not as "(a = b) rescue c". [new]
- [experimental]
-
-Fri Oct 11 06:05:30 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * win32/win32.c (rb_w32_fclose, rb_w32_close): use closesocket()
- for socket. [ruby-win32:382]
-
- * win32/win32.c (StartSockets): set NtSocketsInitialized.
-
- * win32/win32.h: prototypes; rb_w32_fclose, rb_w32_close
-
-Fri Oct 11 00:24:57 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * gc.c (ruby_xmalloc, ruby_xrealloc): restrict total allocation
- size according to memories consumed by live objects.
- [ruby-dev:18482]
-
- * gc.c (gc_sweep): estimate how live objects consume memories.
-
-Thu Oct 10 17:26:12 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/tcltklib/stubs.c (ruby_tcltk_stubs): fix memory leak.
- [ruby-dev:18478]
-
-Thu Oct 10 15:20:18 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/weakref.rb (WeakRef::@@final): use Hash#delete.
-
- * lib/weakref.rb (WeakRef::__getobj__): examine if alive or not by
- ID_REV_MAP to deal with recycled object. [ruby-dev:18472]
-
- * lib/weakref.rb (WeakRef::weakref_alive?): ditto.
-
-Wed Oct 9 07:11:25 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * gc.c (gc_sweep): also adjust heaps_limits when free unused heap
- page. [ruby-core:00526]
-
- * io.c (io_fflush): condition to retry can occur.
-
- * io.c (io_write): returned 0 wrongly if no error occurred.
-
-Tue Oct 8 14:19:07 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * io.c (io_write): must check returned value from fwrite() before
- test with ferror(). (ruby-bugs-ja:PR#350)
-
-Tue Oct 8 10:55:23 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/prettyprint.rb (PrettyPrint.singleline_format): new method.
-
-Mon Oct 7 16:43:07 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigdivrem): bignum zero's len should not be 0.
-
-Mon Oct 7 15:36:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigdivmod): wrong condition check for Bignum zero.
-
- * bignum.c (Init_Bignum): need to add Bignum#div.
-
-Sun Oct 6 00:49:15 2002 Minero Aoki <aamine@loveruby.net>
-
- * eval.c (rb_load): should not pass blocks to the loaded file.
- [ruby-dev:18458]
-
-Fri Oct 4 20:25:38 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_thread_interrupt, rb_thread_signal_raise): no need to
- save dead thread context. (same as [ruby-dev:18322])
- (ruby-bugs-ja:PR#349)
-
-Fri Oct 4 13:05:58 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (RUBY_PROG_GNU_LD): check whether the linker is GNU ld.
-
- * ext/extmk.rb (create_makefile): add -Wl,-no-undefined to $DLDFLAGS
- on Linux if GNU ld is used and --enable-shared is specified.
-
-Fri Oct 4 02:21:16 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_rshift): num should be initialized by carry
- bits if x is negative.
-
- * bignum.c (bigdivmod): len for bignum zero is 1, not 0.
-
-Thu Oct 3 20:22:11 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * bcc32/mkexports.rb: to work on cygwin via telnet.
- [ruby-win32:358]
-
- * ext/tcltklib/tcltklib.c (ip_invoke): requires command name
- argument. [ruby-dev:18438]
-
- * eval.c (ruby_init, ruby_options): Init_stack() with local
- location. (ruby-bugs-ja:PR#277)
-
- * eval.c (rb_call0): disable trace call. [ruby-dev:18074]
-
- * eval.c (eval, rb_load): enable trace call. [ruby-dev:18074]
-
- * eval.c (rb_f_require): set source file name for extension
- libraries. [ruby-dev:18445]
-
- * gc.c (Init_stack): prefer address of argument rather than local
- variable to initialize rb_gc_stack_start.
-
- * ruby.c (translate_char): translate a character in a string;
- DOSISH only. [ruby-dev:18274]
-
- * ruby.c (ruby_init_loadpath): added argv[0] handling under
- Human68K. [ruby-dev:18274]
-
- * ruby.c (proc_options): translate directory separator in $0 to
- '/'. [ruby-dev:18274]
-
-Thu Oct 3 00:27:26 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/delegate.rb (Delegator::initialize): use Object#class
- instead of deprecated Object#type.
-
-Wed Oct 2 23:32:48 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * configure.in (RUBY_CHECK_IO_NEED_FLUSH): check whether fflush()
- is needed.
-
- * io.c (flush_before_seek): flush before seek if buffered data
- may remain.
-
- * io.c (rb_io_check_readable): flush if the last operation was
- write.
-
- * io.c (rb_io_check_writable): flush if the last operation was
- read.
-
- * rubyio.h (FMODE_RBUF): added.
-
-Wed Oct 2 23:09:20 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * io.c (rb_io_wait_readable): handle retryable errors.
-
- * io.c (rb_io_wait_writable): ditto.
-
- * ext/socket/socket.c (bsock_send): ditto.
-
- * ext/socket/socket.c (s_recvfrom): ditto.
-
- * ext/socket/socket.c (s_accept): ditto.
-
- * ext/socket/socket.c (udp_send): ditto.
-
- * ext/socket/getaddrinfo.c (afdl): made private structures constant.
-
- * rubyio.h: prototype; rb_io_wait_readable(), rb_io_wait_writable().
-
-Wed Oct 2 13:03:58 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: set ac_cv_func_setitimer to "no" on Cygwin.
-
-Wed Oct 2 10:59:29 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (gc_sweep): free unused heap page to reduce process size if
- possible.
-
- * object.c (rb_obj_type): deprecated Object#type; use Object#class.
-
-Tue Oct 1 23:48:32 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/socket/socket.c (init_sock): no need for special finalizer,
- socket descriptor is no longer duplicated in 1.7.
- [ruby-talk:50732]
-
- * win32/win32.c, win32/win32.h (rb_w32_fddup, rb_w32_fdclose):
- delete.
-
-Mon Sep 30 20:29:10 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * io.c (rb_io_inspect): not need to raise IOError for closed
- stream. [ruby-talk:51871]
-
-Mon Sep 30 03:48:15 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_check): need no Fixnum check.
-
-Sun Sep 29 18:30:24 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * win32/win32.c (rb_w32_open_osfhandle): adjust
- rb_w32_open_osfhandle() with _open_osfhandle().
-
- * win32/win32.c (rb_w32_accept, rb_w32_socket): return -1 on
- error.
-
- * win32/win32.h: should use file descriptor instead of SOCKET.
-
-Sun Sep 29 06:33:03 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (is_socket, rb_w32_select, rb_w32_accept, rb_w32_bind,
- rb_w32_connect, rb_w32_getpeername, rb_w32_getsockname,
- rb_w32_getsockopt, rb_w32_ioctlsocket, rb_w32_listen, rb_w32_recv,
- rb_w32_recvfrom, rb_w32_send, rb_w32_sendto, rb_w32_setsockopt,
- rb_w32_shutdown, rb_w32_socket, rb_w32_gethostbyaddr,
- rb_w32_gethostbyname, rb_w32_gethostname, rb_w32_getprotobyname,
- rb_w32_getprotobynumber, rb_w32_getservbyname, rb_w32_getservbyport):
- need to protect WSAGetLastError() by RUBY_CRITICAL. [ruby-talk:51778]
-
-Sat Sep 28 20:06:36 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * keywords: add braces around initializers.
-
-Sat Sep 28 13:19:29 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * hash.c (rb_hash_become): should check self-assignment after
- conversion.
-
-Sat Sep 28 10:40:44 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_become): Hash#become should check added
- self-assignment.
-
- * class.c (rb_make_metaclass): metaclass of a superclass may be
- NULL at boot time.
-
-Sat Sep 28 09:50:03 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * ext/extmk.rb: The condition judgment without necessity was deleted.
-
-Fri Sep 27 18:40:42 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_thread_deadlock): more verbose message at deadlock.
-
- * eval.c (rb_thread_schedule): ditto.
-
- * eval.c (rb_thread_join): ditto.
-
-Fri Sep 27 13:24:35 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): Class#inherited should be called after the
- execution of the class body.
-
-Fri Sep 27 02:41:53 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/sha1: Use OpenSSL's SHA1 engine if available. It is
- much faster than what we have now (sha1.[ch]). Add a knob
- (--with-bundled-sha1) to extconf.rb which makes it use the
- bundled one anyway.
-
-Fri Sep 27 02:25:14 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/rmd160: Use OpenSSL's RMD160 engine if available. It
- is much faster than what we have now (rmd160.[ch]). Add a knob
- (--with-bundled-rmd160) to extconf.rb which makes it use the
- bundled one anyway.
-
-Fri Sep 27 01:23:39 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/md5: Use OpenSSL's MD5 engine if available. It is
- much faster than what we have now (md5.[ch]). Add a knob
- (--with-bundled-md5) to extconf.rb which makes it use the
- bundled one anyway.
-
-Thu Sep 26 22:44:21 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_base_s_digest): Fix a double
- free() bug mingled with allocation framework deployment.
-
- * ext/digest/digest.c (rb_digest_base_s_hexdigest): Get rid of
- redundant struct allocation.
-
-Thu Sep 26 09:52:52 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (primary): remove "return outside of method" check at
- compile time.
-
-Wed Sep 25 23:51:29 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * dir.c (glob_helper): must not closedir() when exception raised
- while globbing "**".
-
- * marshal.c (w_uclass): unused variable.
-
- * re.c (match_clone): unused.
-
- * regex.c (re_compile_pattern): get rid of implicit promotion from
- plain char to int.
-
-Wed Sep 25 17:46:46 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (libpathflag): restore ENV['LIB'] when some error
- occurred.
-
-Wed Sep 25 16:14:51 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_match): p1 may exceed pend limit.
-
-Mon Sep 23 23:22:43 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_call0): must not clear ruby_current_node, or
- backtrace cannot be generated.
-
- * intern.h (ruby_yyparse): rather than yyparse().
-
- * parse.y (yylex): nextc() returns -1 at end of input, not 0.
-
- * parse.y (newline_node): reduce duplicated newline node.
-
- * parse.y (literal_concat): get rid of warning.
-
- * parse.y (new_evstr): fixed junk code.
-
-Mon Sep 23 19:57:52 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (RUBY_MINGW32): new macro. check for the MinGW
- compiler environment.
-
- * lib/mkmf.rb: refactoring.
-
-Mon Sep 23 08:27:11 2002 Tanaka Akira <akr@m17n.org>
-
- * io.c (appendline): forget to terminate with nul.
-
-Mon Sep 23 02:46:29 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ruby_run): should set toplevel visibility again here.
-
- * eval.c (rb_eval): should not rely on ruby_class == rb_cObject
- check. Besides allow implicit publicity for attribute set
- methods.
-
- * parse.y (primary): need not to check class_nest, just set
- whether method is an attrset or not.
-
-Sun Sep 22 21:49:42 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (call_trace_func): should not call trace function while
- compilation.
-
- * eval.c (rb_call0): also inside c-func.
-
- * parse.y (yycompile): ditto.
-
- * ruby.c (require_libraries): preserve source file/line for each
- require.
-
-Sun Sep 22 17:08:11 2002 Tanaka Akira <akr@m17n.org>
-
- * string.c (rb_str_each_line): p might be at the top of the
- string.
-
-Sat Sep 21 23:28:28 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_make_metaclass): class of metaclass should be
- metaclass of superclass, unless class itself is a metaclass;
- class of metaclass of metaclass should point back to self.
- eh, confusing, isn't it.
-
- * class.c (rb_singleton_class): check if its class is singleton
- AND attached to self.
-
-Sat Sep 21 22:23:41 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_thread_raise): no need to save dead thread context.
- [ruby-dev:18322]
-
-Fri Sep 20 23:02:01 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (block_append): eliminate unused literal nodes.
-
- * parse.y (literal_concat): refined literal concatenation.
-
-Fri Sep 20 19:43:40 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb: Merge rough/lib/set.rb rev.1.5-1.15.
-
-Wed Sep 18 12:41:16 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): should define class/module under ruby_cbase.
-
- * eval.c (rb_eval): should set class/module path based on
- ruby_cbase, not ruby_class.
-
- * eval.c (module_setup): use ruby_cbase instead of ruby_class.
-
-Tue Sep 17 21:06:04 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_thread_die): put thread dead state.
-
- * eval.c (rb_thread_atfork): free stack buffer at fork too.
-
-Tue Sep 17 01:13:31 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_mod_nesting): load wrapping module should appear in
- Module#nesting list. (ruby-bugs-ja:PR#328)
-
- * eval.c (rb_thread_remove): free stack buffer on remove.
-
-Tue Sep 17 00:58:35 2002 Minero Aoki <aamine@loveruby.net>
-
- * io.c: add parameter prototype.
-
- * re.c: ditto.
-
-Sun Sep 15 21:14:22 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * win32/win32.c (rb_w32_opendir, rb_w32_stat): Corresponds to
- the unjust path containing ".
-
-Sun Sep 15 19:48:55 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (OUTFLAG, CPPOUTFILE): moved from lib/mkmf.rb.
- check whether ${CPP} accepts the -o option.
-
- * win32/Makefile.sub (OUTFLAG, CPPOUTFILE): ditto.
-
- * bcc32/Makefile.sub (OUTFLAG, CPPOUTFILE): ditto.
-
- * djgpp/config.sed (OUTFLAG, CPPOUTFILE): ditto.
-
- * lib/mkmf.rb (OUTFLAG, CPPOUTFILE): use CONFIG.
- make easy to understand log.
-
- * mkconfig.rb (val): should not strip.
-
-Sat Sep 14 20:13:42 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * error.c(rb_sys_fail): remove case EPIPE on bcc32 .
-
-Fri Sep 13 23:39:49 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * dir.c (glob_func_caller): add prototype to get rid of warning.
-
-Fri Sep 13 18:35:12 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_eval): avoid uninitialized global/class variable
- warnings at `||='. [ruby-dev:18278]
-
- * parse.y (stmt, arg): ditto
-
-Fri Sep 13 13:28:04 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/mkmf.rb ($INSTALLFILES): avoid warning when $VERBOSE mode.
-
-Thu Sep 12 23:20:10 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * bcc32/setup.mak : Control of a message.
-
- * bcc32/makefile.sub : include resource.
-
-Thu Sep 12 18:10:03 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * dir.c (glob_helper): fixed freeing buffer. (ruby-bugs-ja:PR#332)
-
- * dir.c (glob_helper): should pass matched path. (ruby-bugs-ja:PR#333)
-
-Thu Sep 12 00:09:32 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_trap_eval): preserve thread status and so on.
- [ruby-talk:40337], [ruby-core:00019]
-
-Wed Sep 11 21:25:52 2002 Tanaka Akira <akr@m17n.org>
-
- * pp.rb (ARGF.pretty_print): implemented.
- (PP.pp): arguments reordered.
-
-Wed Sep 11 18:55:38 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (proc_to_s): refined format. [ruby-dev:18215]
-
-Wed Sep 11 17:47:17 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c, win32/win32.h (rb_w32_getpid): negate pid under Win9x.
- [ruby-dev:18262]
-
-Wed Sep 11 12:58:57 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * string.c (get_pat): Add an extra argument "quote".
-
- * string.c (rb_str_match_m): Do not bother to convert if a regexp
- is given.
-
-Wed Sep 11 11:33:40 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bcc32/Makefile.sub: remove unnecessary `.dll' from filename of
- dll's resource file.
-
- * cygwin/GNUmakefile.in: ditto. [ruby-dev:17103]
-
- * win32/Makefile.sub: ditto. [ruby-dev:17103]
-
- * win32/resource.rb: ditto. [ruby-dev:17103]
-
-Wed Sep 11 09:59:46 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * io.c (rb_io_wait_readable): added.
-
- * io.c (rb_io_wait_writable): added.
-
- * io.c (io_read_retryable): added.
-
- * io.c (io_write): retry on EINTR, ERESTART and EWOULDBLOCK.
- [ruby-dev:17855], [ruby-dev:17878], [ruby-core:00444]
-
- * io.c (rb_io_fread): ditto.
-
- * io.c (read_all): ditto.
-
- * io.c (appendline): ditto.
-
- * io.c (rb_io_each_byte): ditto.
-
- * io.c (rb_io_getc): ditto.
-
-Wed Sep 11 09:29:24 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (ext): make directory `ext' on compile dir.
- [ruby-dev:18255]
-
-Wed Sep 11 00:41:10 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_mod_define_method): initialize orig_func too.
- (ruby-bugs-ja:PR#330)
-
-Wed Sep 11 00:01:32 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (glob_helper): prevent memory leak using rb_protect().
-
- * string.c (rb_str_associate): no need to check freeze flag.
-
- * string.c (rb_str_resize): should honor STR_ASSOC flag on
- resize.
-
- * string.c (rb_str_resize): proper STR_ASSOC handling. pointed
- out by Michal Rokos.
-
- * string.c (rb_str_buf_cat): ditto.
-
- * string.c (rb_str_cat): ditto.
-
- * string.c (rb_str_buf_append): ditto.
-
- * string.c (rb_str_append): ditto.
-
-Tue Sep 10 23:35:46 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (nextc): restore line number after here documents.
- (ruby-bugs-ja:PR#331)
-
- * parse.y (heredoc_restore): ditto.
-
-Tue Sep 10 18:26:52 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb, lib/mkmf.rb ($INCFLAGS): new var for -I$(topdir).
-
- * lib/mkmf.rb: add #define WIN32_LEAN_AND_MEAN to improve compile
- times.
-
-Tue Sep 10 17:16:14 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (miniruby): shouldn't link $(EXTOBJS).
- [ruby-dev:17059]
-
- * win32/Makefile.sub ($(LIBRUBY_A), $(LIBRUBY)): avoid lib.exe's
- warning. [ruby-dev:17059]
-
- * win32/Makefile.sub: remove unnecessary rules. [ruby-dev:17059]
-
- * win32/configure.bat, win32/setup.mak, win32/README.win32: enable to
- pass some arguments to configure. [ruby-dev:17059]
-
-Mon Sep 9 23:43:33 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.h (S_I?USR): define only if not mingw32.
-
-Mon Sep 9 11:21:04 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/stringio/stringio.c (strio_set_string): reinitialize
- properly.
-
- * ext/stringio/stringio.c (strio_become): added self-assign check
- and experimental auto-conversion to StringIO.
-
- * ext/stringio/stringio.c (strio_reopen): added.
-
-
-Sun Sep 8 21:29:25 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * time.c (time_free): prototype; struct time_object -> void *.
- avoid GCC warnings.
-
- * lib/mkmf.rb, ext/extmk.rb ($LINK, $CPP): move to lib/mkmf.rb.
-
-Sun Sep 8 19:02:28 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * time.c: prototype; time_free() to avoid VC++ warnings.
-
- * ext/tcltklib/tcltklib.c: prototype; invoke_queue_handler() to avoid
- VC++ warning.
-
- * win32/win32.c (rb_w32_stat): remove S_IWGRP and S_IWOTH bits from
- st_mode.
-
- * win32/win32.h (S_I*): define if not defined.
-
-Sun Sep 8 14:38:31 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: modify program_prefix only if specified
- --program-prefix.
-
- * configure.in: don't generate ext/extmk.rb.
-
- * Makefile.in: execute directly $(srcdir)/ext/extmk.rb.
- remove -Cext option, "Dir::chdir 'ext'" in ext/extmk.rb.
-
- * {win32,bccwin32}/Makefile.sub: ditto.
-
- * instruby.rb: ditto.
-
- * ext/extmk.rb: renamed from ext/extmk.rb.in.
-
- * lib/mkmf.rb (module Logging): create log files (mkmf.log)
- in each extension module directories.
-
- * ext/extmk.rb: ditto.
-
- * lib/mkmf.rb (macro_defined?): new method.
-
- * ext/.cvsignore: remove extmk.rb.
-
- * ext/*/.cvsignore: add "*.def".
-
- * lib/mkmf.rb (have_struct_member): moved from ext/socket/extconf.rb.
-
- * ext/socket/extconf.rb: use macro_defined? instead of egrep_cpp.
-
- * ext/etc/extconf.rb: use have_struct_member.
-
- * ext/etc/etc.c: add prefix HAVE_ST_ to PW_ macros.
-
-Sun Sep 8 14:36:40 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * bcc32/configure.bat : Control of a message.
- * bcc32/makefile.sub : @(sitearch) typo.
- * ext/extmk.rb.in : [bccwin32] libdir is added to a library path.
- * lib/mkmf.rb : ditto.
-
-Sat Sep 7 23:32:56 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/inf-ruby.el (inferior-ruby-error-regexp-alist): regexp
- alist for error message from ruby.
-
- * misc/inf-ruby.el (inferior-ruby-mode): fixed for Emacs.
-
- * misc/inf-ruby.el (ruby-send-region): compilation-parse-errors
- doesn't parse first line, so insert separators before each
- evaluations.
-
-Sat Sep 7 19:46:57 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb: Disallow Set.new(false). Add even more tests.
- [Submitted by: "Christoph" <chr_news@gmx.net>]
-
-Sat Sep 7 19:23:56 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb: Fix a bug in flatten()'s recursive set detection.
- [Submitted by: "Christoph" <chr_news@gmx.net>] Some tests
- against the bug are added.
-
- * lib/set.rb: Resurrect the test suite by putting it after
- __END__ and executing `eval DATA.read'.
-
-Sat Sep 7 08:41:39 2002 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (rb_gc_mark_parser): ruby_eval_tree is marked in eval.c.
-
-Fri Sep 6 20:01:38 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/mkmf.rb ($CC): command to compile C source.
-
- * lib/mkmf.rb (logging): added.
-
- * lib/mkmf.rb (try_compile): added.
-
- * lib/mkmf.rb (egrep_cpp): use internal grep when pattern is
- Regexp, otherwise use external egrep command but get rid of
- pipe of command.com.
-
- * lib/mkmf.rb (have_func): local variable should be volatile not
- to be eliminated by optimization.
-
- * lib/mkmf.rb (create_makefile): link with CONFIG["LIBS"].
-
- * lib/mkmf.rb (create_makefile): emit .SUFFIXES:.
-
-Fri Sep 6 12:11:22 2002 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (rb_gc_mark_parser): should mark ALL global variables
- defined in parse.y.
-
-Fri Sep 6 01:15:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (ruby_xmalloc): remove MALLOC_LIMIT to avoid frequent
- garbage collection.
-
-Fri Sep 6 11:47:37 2002 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (rb_gc_mark_parser): should mark global variables
- defined in parse.y.
-
-Fri Sep 6 10:34:32 2002 Minero Aoki <aamine@loveruby.net>
-
- * io.c (rb_io_puts): RSTRING(line)->ptr might be NULL.
-
-Fri Sep 6 10:26:37 2002 Minero Aoki <aamine@loveruby.net>
-
- * parse.y: should not put non-NODE-VALUEs in the semantic stack.
-
-Fri Sep 6 05:48:26 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * file.c (rb_path_check): nothing to check under DOSISH.
- [ruby-list:35772]
-
-Fri Sep 6 05:03:50 2002 Minero Aoki <aamine@loveruby.net>
-
- * gc.c (rb_gc): should mark parser.
-
- * parse.y (rb_gc_mark_parser): new function.
-
- * intern.h (rb_gc_mark_parser): added.
-
-Thu Sep 5 18:32:32 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_path2class): should not use rb_eval_string().
-
-Thu Sep 5 17:18:22 2002 Michal Rokos <michal@ruby-lang.org>
-
- * dln.c: fix memory leak in dln_load (ruby-core:405) and
- in load_1 (ruby-core:407)
-
-Thu Sep 5 15:43:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_extended): should allow marshaling of object which
- is extended by named module.
-
- * class.c (rb_make_metaclass): super may be T_ICLASS, need to skip.
-
-Thu Sep 5 13:09:22 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_eval): overriding false constant with class/module
- definition should be error. (PR#327)
-
-Thu Sep 5 01:24:26 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * extmk.rb (create_makefile): add macro MAKEDIRS, INSTALL_PROG,
- INSTALL_DATA.
-
- * extmk.rb (create_makefile): support for building to any directory.
-
- * extmk.rb (xsystem): move to mkmf.rb.
-
- * mkmf.rb (xsystem): support for extmk.rb
-
- * mkmf.rb ($CPP): remove '-E' option. add CPPFLAGS.
-
-Wed Sep 4 16:15:17 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb: ==(o) should be aware of all the Set variant
- instances, not just those of its subclasses. [Submitted by:
- "Christoph" <chr_news@gmx.net>]
-
- * lib/set.rb: - Fix eql?(). [ditto]
-
-Wed Sep 4 15:23:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_make_metaclass): obj.meta.super.meta should be equal
- to obj.meta.meta.super (ruby-bugs-ja:PR#324).
-
-Wed Sep 4 05:10:16 2002 Koji Arai <jca02266@nifty.ne.jp>
-
- * parse.y (yylex): the warning message "invalid
- character syntax" was never issued (ruby-bugs-ja:PR#323).
-
-Wed Sep 4 01:08:45 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (r_bytes): do not use alloca (ruby-bugs:PR#382).
-
-Tue Sep 3 17:12:59 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * extmk.rb: require mkmf.rb. remove duplicate methods.
- use Config::CONFIG["FOO"] instead of @FOO@.
-
- * mkmf.rb: support for extmk.rb.
-
-Mon Sep 2 23:01:50 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * re.c (rb_reg_search): MatchData must be rb_cMatch.
- (ruby-bugs-ja:PR#319)
-
-Mon Sep 2 21:21:46 2002 Minero Aoki <aamine@loveruby.net>
-
- * gc.c (gc_sweep): does reclaim nodes in also compile time, if we
- can.
-
- * ruby.c (load_file): omit GC if we can.
-
- * parse.y (ruby_parser_stack_on_heap): new function.
-
- * intern.h (ruby_parser_stack_on_heap): added.
-
-Mon Sep 2 18:45:07 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_copy_generic_ivar): remove old generic instance
- variable table if it exists.
-
-Sun Sep 1 15:54:33 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * config.guess: fixed for Linux/PPC.
-
-Sat Aug 31 09:38:12 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_make_metaclass): metaclass of a metaclass is a
- metaclass itself.
-
-Fri Aug 30 22:45:16 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb: Added.
-
-Fri Aug 30 20:58:54 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * ext/Win32API/Win32API.c (Win32API_Call): typo.
-
-Fri Aug 30 19:45:52 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * variable.c (rb_const_assign): st_delete() takes pointer to key.
-
-Fri Aug 30 19:40:28 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/Win32API/Win32API.c (Win32API_Call): RSTRING()->ptr may be
- NULL.
-
- * ext/nkf/nkf.c (rb_nkf_guess): ditto.
-
- * ext/readline/readline.c (readline_s_set_completion_append_character):
- ditto.
-
- * ext/socket/socket.c (sock_s_getaddrinfo, sock_s_getnameinfo):
- ditto.
-
- * ext/tcltklib/tcltklib.c (ip_toUTF8, ip_fromUTF8): ditto.
-
-Fri Aug 30 01:32:17 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_singleton_class): superclass of a metaclass
- should be a metaclass of superclass.
-
- * range.c (range_eq): two instances must belong to a same class to
- be equal.
-
- * range.c (range_eql): ditto.
-
- * io.c (rb_io_taint_check): frozen check added.
-
- * file.c (rb_stat_become): frozen check added.
-
- * object.c (rb_obj_become): ditto.
-
- * re.c (rb_reg_become): ditto.
-
- * struct.c (rb_struct_become): ditto.
-
- * time.c (time_become): ditto.
-
- * array.c (rb_ary_become): should call rb_ary_modify().
-
- * hash.c (rb_hash_become): should call rb_hash_modify().
-
- * compar.c (cmp_equal): should not use NUM2LONG(), since <=> may
- return bignum.
-
- * compar.c (cmp_gt, cmp_ge, cmp_lt, cmp_le, cmp_between): ditto.
-
-Thu Aug 29 23:34:42 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * bcc32/MakeFile.sub (sitearch): add.
-
-Thu Aug 29 13:36:42 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (read_all): should use off_t instead of long.
-
-Thu Aug 29 00:55:55 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * marshal.c (r_object): yield loaded objects, not intermediates.
- (ruby-bugs-ja:PR#296)
-
-Thu Aug 29 00:06:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_become): should not free ptr if it's shared.
-
- * eval.c (rb_alias): prohibit making an alias named "allocate" if
- klass is a metaclass.
-
-Wed Aug 28 23:59:15 2002 Michal Rokos <michal@ruby-lang.org>
-
- * signal.c: remove #ifdef SIGINT for struct signals.
-
- * variable.c: get rid of fix length buffer in rb_class_path.
-
-Wed Aug 28 23:34:32 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * io.c (appendline): data was lost when raw mode.
-
-Wed Aug 28 22:57:34 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_string_value_ptr): StringValuePtr() should never
- return NULL pointer.
-
-Wed Aug 28 19:12:46 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/stringio/stringio.c (strio_initialize): RSTRING(mode)->ptr
- can be NULL.
-
- * ext/stringio/stringio.c (strio_ungetc): fix buffer overflow.
-
-Wed Aug 28 18:19:55 2002 Michal Rokos <michal@ruby-lang.org>
-
- * file.c: fix memory leak in rb_stat_init.
-
-Wed Aug 28 17:45:03 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * win32/win32.c (kill): negate pid under Win9x.
-
-Wed Aug 28 16:36:40 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (ar): don't check ar twice.
-
-Wed Aug 28 15:00:29 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_delete_bang): should check if str->ptr is 0.
-
- * string.c (rb_str_squeeze_bang): ditto.
-
- * string.c (rb_str_count): ditto.
-
- * string.c (rb_str_lstrip_bang): ditto.
-
- * string.c (rb_str_rstrip_bang): ditto.
-
- * string.c (rb_str_intern): ditto.
-
-Wed Aug 28 11:37:35 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.h: define SIGINT and SIGKILL if not defined.
-
- * win32/win32.c: remove definition of SIGINT and SIGKILL.
-
-Tue Aug 27 19:50:27 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ruby.c (require_libraries): prevent ruby_sourcefile from GC.
-
-Tue Aug 27 15:03:35 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_find_file): $LOAD_PATH must not be empty.
-
- * file.c (rb_find_file_ext): ditto.
-
-Tue Aug 27 02:35:21 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_eq): class check should be based on range.class,
- instead of Range to work with Range.dup.
-
- * range.c (range_eql): ditto.
-
-Mon Aug 26 18:17:56 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_mod_dup): need to preserve metaclass and flags.
-
-Mon Aug 26 10:44:18 2002 Tanaka Akira <akr@m17n.org>
-
- * object.c (rb_cstr_to_dbl): had a buffer overrun.
-
-Sun Aug 25 20:10:32 2002 Wakou Aoyama <wakou@ruby-lang.org>
-
- * lib/cgi.rb (CGI#form): fix ruby-bugs-ja:PR#280, add default action.
-
-Sat Aug 24 15:32:16 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (call_trace_func): restore source file/line, as trace
- function installed in required library with -r option can be
- called while parsing. (ruby-bugs:PR#372)
-
- * eval.c (module_setup): unused variable. [ruby-core:00358]
-
-Sat Aug 24 14:59:02 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_class): integrate singleton check into a function
- to follow DRY principle.
-
- * marshal.c (w_uclass): should check singleton method.
-
- * object.c (rb_obj_dup): dmark and dfree functions must be match
- for T_DATA type.
-
- * object.c (rb_obj_dup): class of the duped object must be match
- to the class of the original.
-
-Sat Aug 24 13:57:28 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/time.rb (Time.rfc2822, Time#rfc2822): preserve localtimeness.
-
- * lib/pp.rb: pretty_print_cycled is renamed to pretty_print_cycle.
-
-Fri Aug 23 23:59:57 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (method_call): check receiver is defined.
-
- * eval.c (umethod_call): removed.
-
-Fri Aug 23 23:39:17 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_quote): do not escape \t, \f, \r, \n, for they are
- not regular expression metacharacters.
-
- * time.c (time_s_alloc): use time_free instead of free (null check,
- also serves for type mark).
-
- * time.c (time_s_at): check dfree function too.
-
-Fri Aug 23 17:06:48 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: RUBY_SO_NAME is msvcrt-rubyXX on mswin32/mingw32.
-
- * configure.in (sitearch): new var.
-
- * mkconfig.rb, lib/mkmf.rb (sitearch): ditto.
-
- * win32/Makefile.sub, win32/setup.mak (sitearch): ditto.
-
- * instruby.rb: ditto.
-
-Wed Aug 21 16:53:00 2002 Michal Rokos <michal@ruby-lang.org>
-
- * *.c: int, long types cleanup.
-
- * parse.y: ditto.
-
- * re.h, regex.h, ruby.h: ditto.
-
-Wed Aug 21 16:43:19 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_cleanup): should not modify the global
- variable curr_thread.
-
-Wed Aug 21 16:14:26 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: set ac_cv_func__setjmp to "no" on Cygwin.
-
- * configure.in: set ac_cv_func_crypt to "no" on MinGW.
-
-Tue Aug 20 21:47 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * io.c (rb_io_fread): remove case EPIPE on bcc32 .
-
- * win32/win32.c (rb_w32_getc): clear EPIPE error on bcc32.
-
-Tue Aug 20 19:39:03 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * file.c (rb_file_s_expand_path): accept drive letter on Cygwin.
-
- * file.c (is_absolute_path): ditto.
-
-Tue Aug 20 12:12:25 2002 Tietew <tietew@tietew.net>
-
- * io.c (rb_io_putc): output via rb_io_write().
-
-Mon Aug 19 19:01:55 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/inf-ruby.el (inf-ruby-keys): ruby-send-definition
- conflicted with ruby-insert-end.
-
- * misc/inf-ruby.el (inferior-ruby-mode): compilation-minor-mode.
-
- * misc/inf-ruby.el (ruby-send-region): send as here document to
- adjust source file/line. [ruby-talk:47113], [ruby-dev:17965]
-
- * misc/inf-ruby.el (ruby-send-terminator): added to make unique
- terminator.
-
-Mon Aug 19 17:08:19 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_initialize_m): frozen check should be moved here
- from rb_reg_initialize().
-
-Mon Aug 19 15:38:44 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (sort_2): comparison should be done as signed long.
-
- * array.c (sort_2): should return int, not VALUE.
-
-Mon Aug 19 12:38:33 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_thread_save_context, rb_thread_restore_context):
- save/restore SEH chain on MS-Windows at thread switch.
- [ruby-win32:273]
-
- * eval.c (win32_get_exception_list, win32_set_exception_list):
- added.
-
-Sat Aug 17 23:01:25 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (sort_2): *a - *b may overflow.
-
-Sat Aug 17 00:25:08 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (ary_new): len*sizeof(VALUE) may be a positive value.
-
- * array.c (rb_ary_initialize): ditto.
-
-Fri Aug 16 15:58:16 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (NOFILE): define NOFILE as 64 if not defined.
-
- * signal.c (sighandler_t): rename to sh_t on dietlibc.
-
-Fri Aug 16 15:37:04 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * bignum.c (rb_cstr_to_inum): new decimal and octal string.
-
-Fri Aug 16 13:17:11 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_class_allocate_instance): move singleton class
- check from rb_obj_alloc().
-
-Fri Aug 16 11:47:24 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * io.c (rb_io_fread): renamed from io_fread and made extern.
-
- * marshal.c (r_bytes0): check if successfully read, use
- rb_io_fread() instead of fread() to be preemptive.
- (ruby-bugs-ja:PR#294, 295)
-
- * rubyio.h (rb_io_fread): added.
-
-Fri Aug 16 07:57:26 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (compile_error): must not clear ruby_sourcefile here.
- (ruby-bugs:PR#364).
-
- * eval.c (rb_longjmp): set ruby_sourcefile before making
- backtrace.
-
-Thu Aug 15 20:38:58 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (ruby_current_node) : added to set sourceline on demand.
-
- * eval.c (error_pos, error_print, rb_longjmp, assign): set source
- file/line.
-
- * eval.c (rb_eval): store current node instead of file/line, and
- preserve it at return.
-
- * eval.c (module_setup): ditto.
-
- * eval.c (struct thread): store node instead of file/line.
-
- * eval.c (rb_thread_raise): ditto.
-
- * intern.h (ruby_current_node): added.
-
- * intern.h (ruby_set_current_source): added.
-
- * parse.y (stmt, arg): not fix position of assignment.
-
- * parse.y (node_assign): ditto.
-
- * parse.y (yycompile): clear current node.
-
-Thu Aug 15 00:48:46 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_initialize): should not modify frozen Regexp.
-
-Tue Aug 13 18:33:18 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/tcltklib/tcltklib.c (ip_init): allocation framework.
-
-Tue Aug 13 15:32:14 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_replace): should copy ifnone.
-
- * hash.c (rb_hash_dup): should preserve HASH_PROC_DEFAULT and
- HASH_DELETED flags.
-
- * hash.c (rb_hash_shift): shift from empty hash should not return
- its default proc.
-
- * hash.c (rb_hash_default_proc): new method. [new]
-
-Tue Aug 13 00:37:11 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_aref): no need for Bignum check.
-
- * array.c (rb_ary_aset): explicit Bignum check removed.
-
- * numeric.c (fix_aref): normalize bignum before bit-op.
-
- * bignum.c (rb_big_rand): max may be Bignum zero.
-
- * bignum.c (rb_cstr_to_inum): should normalize bignums, to avoid
- returning fixable bignum value.
-
- * bignum.c (rb_uint2big): there should be no zero sized bignum.
-
-Mon Aug 12 23:45:28 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/extmk.rb.in: extmake() that works properly for both tkutil
- (tk/tkutil.so) and digest/sha1.
-
-Mon Aug 12 22:29:35 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ruby.c (set_arg0): Correct the position of #endif.
-
-Mon Aug 12 17:25:06 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_equal): should check HASH_PROC_DEFAULT too.
-
-Mon Aug 12 16:15:37 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * bignum.c (rb_big_cmp): raise for NaN. (ruby-bugs-ja:PR#284).
-
-Sun Aug 11 09:34:07 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_eval): set line number from all nodes.
-
- * eval.c (proc_to_s): show source file/line if available.
-
- * marshal.c (r_object): register TYPE_BIGNUM regardless real type.
-
-Sat Aug 10 23:47:16 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_cmp): use dbl2big() for Floats, instead of
- big2dbl().
-
- * bignum.c (Init_Bignum): rb_big_zero_p() removed. There may be
- Bignum zero.
-
-Fri Aug 9 13:31:40 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/Win32API/extconf.rb: check existence of <windows.h>.
-
-Thu Aug 8 09:37:02 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/optparse.rb (NilClass): must provide conversion block.
-
- * lib/optparse.rb (String): ditto.
-
-Thu Aug 8 00:45:15 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): new argument added for original method name.
- preserve original method name in frame->orig_func.
-
- * eval.c (is_defined): use frame->orig_func, not last_func.
-
- * eval.c (rb_eval): ditto.
-
- * eval.c (method_call): supply data->oid also to rb_call0().
-
- * object.c (rb_class_allocate_instance): call rb_obj_alloc() when
- called from alias, thus invoke original "allocate".
-
- * eval.c (remove_method): removing allocate from classes should
- cause NameError.
-
-Wed Aug 7 22:12:54 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/optparse.rb (OptionParser::Completion::convert): returned
- all values not first one.
-
- * lib/optparse.rb (OptionParser::Switch::parse): return values as
- is.
-
- * lib/optparse.rb (OptionParser::order): ditto.
-
- * lib/optparse/time.rb: prior time.rb.
-
- * lib/optparse/uri.rb: require standard uri module. thanks to
- Minero Aoki.
-
-Wed Aug 7 09:51:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_equal): should check default values.
-
-Wed Aug 7 08:44:32 2002 Minero Aoki <aamine@loveruby.net>
-
- * ext/racc/cparse/cparse.c: reduce goto.
-
-Tue Aug 6 15:19:39 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * string.c (rb_str_rindex): must return -1 if unmatched.
-
-Mon Aug 5 22:41:18 2002 Minero Aoki <aamine@loveruby.net>
-
- * MANIFEST: add lib/racc/parser.rb.
-
- * ext/racc/cparse/cparse.c: code refine.
-
- * ext/racc/cparse/MANIFEST: add depend.
-
-Sun Aug 4 22:30:50 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/curses/curses.c: follow allocation framework.
-
-Sat Aug 3 21:23:56 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_eval): set constant in cbase scope.
-
- * eval.c (assign): ditto.
-
-Fri Aug 2 09:12:32 2002 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c: follow allocation framework.
-
-Fri Aug 2 01:21:52 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (s_recvfrom): update RSTRING len.
-
-Thu Aug 1 17:47:15 2002 Tachino Nobuhiro <tachino@jp.fujitsu.com>
-
- * parse.y (tokadd_string): ignore backslashed spaces in %w.
-
-Thu Aug 1 14:14:15 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_find): do not use rb_eval_cmd(); should not accept
- a string for if_none.
-
-Wed Jul 31 14:11:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_undef): undef should be done for klass, not ruby_class.
-
-Tue Jul 30 19:48:51 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-accurate-end-of-block): restrict search
- region.
-
- * misc/ruby-mode.el (ruby-parse-partial): reversed wrong patch.
-
-Tue Jul 30 17:21:13 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-accurate-end-of-block): incomplete block
- caused infinite loop.
-
- * misc/ruby-mode.el (ruby-parse-partial): returns nil unless
- delimiters found.
-
-Tue Jul 30 15:24:07 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/tcltklib/stubs.c (ruby_tcltk_stubs): win32_getenv returns
- the same address always, so allocate string by ruby_strdup.
-
- * win32/win32.c: prototype; rb_w32_open_osfhandle().
-
-Tue Jul 30 09:11:07 2002 Minero Aoki <aamine@loveruby.net>
-
- * eval.c (rb_thread_join_m): add parameter type declaration.
-
-Tue Jul 30 08:37:11 2002 Minero Aoki <aamine@loveruby.net>
-
- * eval.c (localjump_error): add parameter type declaration.
-
-Mon Jul 29 16:00:54 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb.in: always use File.expand_path for $top_srcdir.
-
-Sat Jul 27 23:07:52 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_to_int): default to_int implementation for every
- numeric class.
-
-Sat Jul 27 08:09:03 2002 Booker C. Bense <bbense@slac.stanford.edu>
-
- * re.c (rb_reg_quote): initial part of the string was never copied
- to the quoted string.
-
-Fri Jul 26 23:03:53 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_eval): no need to convert to string twice.
-
-Fri Jul 26 18:32:37 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-expr-beg): wrong indent at modifiers
- after ?.
-
-Fri Jul 26 16:01:16 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb.in (create_makefile): use Regexp in gsub.
-
- * sample/mkproto.rb: ditto and fix bug.
-
-Fri Jul 26 14:31:06 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * random.c: replace with Mersenne Twister RNG.
-
-Fri Jul 26 12:14:48 2002 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (yylex): modify to accept a code like "m (a){...}".
-
-Thu Jul 25 09:05:02 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-delimiter): include here document.
-
- * misc/ruby-mode.el (ruby-deep-arglist): skips spaces after
- parenthesis when 'space.
-
- * misc/ruby-mode.el (ruby-imenu-create-index): fix for nested
- classes.
-
- * misc/ruby-mode.el (ruby-accurate-end-of-block): added. scan a
- block in the order.
-
- * misc/ruby-mode.el (ruby-expr-beg): support for here document.
-
- * misc/ruby-mode.el (ruby-parse-partial): splitted from
- ruby-parse-region.
-
- * misc/ruby-mode.el (ruby-move-to-block): skips RD style comments.
-
-Wed Jul 24 09:47:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (jump_tag_but_local_jump): preserve retval in
- LocalJumpError exceptions.
-
- * parse.y (command): no more check for "super outside of method".
-
- * eval.c (rb_mod_define_method): should set last_class and
- last_func in the block->frame.
-
-Mon Jul 22 17:23:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (error_handle): should handle TAG_THROW as well.
-
-Fri Jul 19 10:52:32 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): new decimal notation '0d4567'.
-
-Thu Jul 18 11:52:02 2002 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (set_socket): new method.
-
-Thu Jul 18 06:51:24 2002 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (yylex): fix typo.
-
-Wed Jul 17 18:41:28 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): new octal notation '0o777'.
-
-Mon Jul 15 18:36:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (string_content): every string_content node should
- return string only. use NODE_EVSTR to coercing.
-
- * eval.c (rb_eval): NODE_EVSTR support.
-
-Mon Jul 15 10:35:35 2002 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (heredoc_identifier): fix typo.
-
-Sat Jul 13 09:30:04 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (literal_concat_string): wrong optimization.
-
-Sat Jul 13 01:25:38 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/resolv.rb (Resolv::DNS::open, close): new.
-
- * lib/optparse.rb, lib/optparse: import.
-
-Fri Jul 12 06:34:05 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: rename HTTP.get_uri get_response.
-
- * lib/net/http.rb: HTTP.get_print accepts URI objects.
-
- * lib/net/http.rb: HTTP.get had not work with URI objects.
-
-Fri Jul 12 02:15:58 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * string.c (rb_str_match): fix for string match.
-
-Fri Jul 12 00:02:50 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/stringio/stringio.c (strio_gets_internal): fixed for record
- separator longer than 1.
-
-Thu Jul 11 17:59:20 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_quote): avoid unnecessary string allocation.
-
- * string.c (get_pat): quote metacharacters before compiling a
- string into a regex.
-
- * string.c (rb_str_split_m): special treatment of strings of size
- 1, but AWK emulation. now uses get_pat().
-
- * string.c (rb_str_match_m): quote metacharacters.
-
- * string.c (rb_str_match2): ditto.
-
-Thu Jul 11 12:59:23 2002 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/resolv.rb: untaint strings read from /etc/hosts and
- /etc/resolv.conf to prevent SecurityError when $SAFE==1.
-
-Thu Jul 11 09:00:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_slice_bang): if there's no corresponding
- substring, slice! should return nil without exception.
-
-Tue Jul 9 20:03:55 2002 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * irb 0.9
-
-Sat Jul 6 07:35:02 2002 Jamie Herre <jfh@gettysgroup.com>
-
- * array.c (rb_ary_insert): type fixed.
-
-Fri Jul 5 09:17:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_split_m): accept separator value nil as well.
-
-Fri Jul 5 08:59:15 2002 Michal Rokos <michal@ruby-lang.org>
-
- * enum.c: Fix bug in enum_sort_by and some code indents
-
-Fri Jul 5 05:00:40 2002 Wakou Aoyama <wakou@ruby-lang.org>
-
- * lib/cgi.rb (CGI#initialize): improvement for mod_ruby.
- thanks to Sean Chittenden <sean@ruby-lang.org>, Shugo Maeda
- <shugo@modruby.net>
-
-Fri Jul 5 00:10:09 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_become): was leaking memory.
-
-Thu Jul 4 23:43:26 2002 Minero Aoki <aamine@loveruby.net>
-
- * parse.y: remove useless function str_extend_p().
-
-Wed Jul 3 14:26:40 2002 Sean Chittenden <sean@ruby-lang.org>
-
- * lib/net/ftp.rb (get): new method.
-
- * lib/net/ftp.rb (putt): ditto.
-
- * lib/net/ftp.rb (binary): ditto.
-
- * lib/net/ftp.rb (binary=): ditto.
-
-Wed Jul 3 13:57:53 2002 Sean Chittenden <sean@ruby-lang.org>
-
- * lib/net/ftp.rb (getbinaryfile): the second argument (localfile)
- is now optional.
-
- * lib/net/ftp.rb (gettextfile): ditto.
-
-Wed Jul 3 13:45:42 2002 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb: use &block and yield for speed.
-
-Wed Jul 3 02:32:31 2002 Wakou Aoyama <wakou@ruby-lang.org>
-
- * lib/cgi.rb (CGI#initialize): improvement for mod_ruby.
-
-Tue Jul 2 14:53:10 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_include_module): should not alter other
- classes/modules by inclusion. by this fix, local order may not
- be preserved for some cases.
-
- * class.c (include_class_new): module may be T_ICLASS; retrieve
- original module information.
-
-Tue Jul 2 14:13:11 2002 Wakou Aoyama <wakou@ruby-lang.org>
-
- * lib/cgi.rb (CGI#header): accept any type as value.
-
-Sun Jun 30 17:05:29 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (seekdir, telldir): add ac_cv_func_telldir=yes,
- ac_cv_func_seekdir=yes for MinGW.
-
-Sat Jun 29 01:43:32 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (pipe_finalize, pipe_popen): two-way pipe support for win32.
-
- * win32/win32.c (ChildRecord, FindFreeChildSlot): ditto.
-
- * win32/win32.c, win32/win32.h (pipe_exec): new function for two-way
- pipe support for win32.
-
- * win32/win32.c, win32/win32.h (FindPipedChildSlot, rb_w32_popen,
- rb_w32_pclose): removed functions for two-way pipe support for win32.
-
-Fri Jun 28 23:49:34 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * pack.c (pack_unpack): change names of local variables because their
- names are overlapped.
-
-Fri Jun 28 17:54:07 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb: fix object address.
-
-Thu Jun 27 23:55:50 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_stat): fix buffer overflow. (ruby-bugs:PR#329)
-
-Thu Jun 27 20:57:45 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/prettyprint.rb, lib/pp.rb: convenience methods added.
-
-Thu Jun 27 15:22:18 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/prettyprint.rb: re-implemented for incremental output to handle
- huge data. API is changed a bit.
-
- * lib/pp.rb: adapt new pretty printing API.
-
-Thu Jun 27 08:28:18 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (literal_concat_string): non-string last expression in
- #{} was ignored when followed by literal.
-
-Thu Jun 27 03:42:04 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_expr_str): need to process backslashes properly.
-
-Wed Jun 26 17:33:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_any_to_a): declare Object#to_a to be obsolete.
-
- * object.c (rb_Array): do not convert nil into [] automagically.
-
-Wed Jun 26 15:40:00 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (words, qwords): word list literal rules.
-
- * parse.y (parse_string): ditto.
-
- * parse.y (yylex): %W: word list literal with interpolation. [new]
-
-Tue Jun 25 18:53:34 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (string1, xstring, regexp): moved lex_strnest
- initialization to string_contents/xstring_contents.
-
-Tue Jun 25 19:24:38 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * dln.c: remove definition rb_loaderror().
-
-Tue Jun 25 00:34:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_Integer): use "to_int" instead of
- "to_i". [experimental]
-
- * object.c (nil_to_f): new method.
-
- * object.c (rb_Integer): Symbols and nil should cause error.
-
- * object.c (rb_Float): nil should cause error.
-
-Tue Jun 25 00:21:00 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * dln.c: remark definition rb_loaderror().
-
-Tue Jun 25 00:14:07 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (string_dvar): allow back references in interpolation.
-
-Mon Jun 24 16:32:31 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_eval): NODE_EVSTR is no longer used.
-
- * eval.c (eval): not enforce to make assigned variables dynamic.
-
- * parse.y (string): split rules to strings/xstring/regexp to allow
- arbitrary statements inside string interpolation.
-
- * parse.y (here_document): splitted into three phases.
-
- * parse.y (literall_append, literal_concat): added.
- append/concatenate string literals.
-
- * sample/test.rb (valid_syntax): adjust line number for BEGIN.
-
- * lib/mkmf.rb (create_makefile): get rid of nested string.
-
- * lib/mkmf.rb (install_rb): site-install didn't work properly.
-
-Sun Jun 23 00:19:10 2002 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb, sample/cal.rb, sample/goodfriday.rb:
- updated to the new version (based on date2 3.3).
-
-Sat Jun 22 14:41:33 2002 Guy Decoux <ts@moulon.inra.fr>
-
- * ext/socket/socket.c (sock_addrinfo): make all 3 versions of
- getaddrinfo happy. [ruby-core:00184]
-
-Fri Jun 21 18:49:58 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): __END__ should not be effective within
- string literals.
-
-Thu Jun 20 21:09:37 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/readline/readline.c (readline_readline): get rid of
- libreadline's bug. (ruby-bugs-ja:PR#268)
-
-Thu Jun 20 17:10:27 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/ftool.rb (BUFSIZE): tuning, set buffer length to 8192.
-
- * configure.in (__NO_ISOCEXT): add for mingw-runtime 2.0-2.
-
- * configure.in (__MSVCRT__): removed because it is defined
- in the GCC specs.
-
-Wed Jun 19 14:46:18 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb, lib/mkmf.rb (xsystem): open the log file if xsystem
- is called.
-
-Wed Jun 19 01:01:13 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (here_document): should be aware of __END__ within here
- documents.
-
-Wed Jun 19 00:50:50 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (yylex): ? followed by successive word characters is
- ternary operator not numeric literal.
-
- * parse.y (yylex): commands after break/next/rescue can take
- arguments. (ruby-bugs-ja:PR#265)
-
-Tue Jun 18 19:20:16 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/mkexports.rb: remove unnecessary exports. (ruby-dev:17418)
-
-Tue Jun 18 12:50:17 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (yylex): should pushback proper char after '<<'.
-
- * parse.y (range_op, cond0, cond): get rid of doubled warnings.
-
- * parse.y (value_expr): reduce recursion level.
-
- * parse.y (logop): ditto.
-
-Mon Jun 17 11:11:34 2002 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * string.c (rb_str_crypt): result need not be tainted always.
-
-Mon Jun 17 10:51:37 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * dln.c (dln_load): need to preserve dln_strerror() result,
- calling other dl family can clear it.
-
-Sat Jun 15 22:56:37 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): obsolete '?<whitespace>'; use '?\s', '?\n',
- etc, instead.
-
-Sat Jun 15 18:51:13 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * dir.c (glob_helper): Use lstat() instead of stat() so it catches
- a dead symlink. Given a dead symlink named "a", Dir.glob("?")
- did catch it but Dir.glob("a") somehow didn't.
-
-Sat Jun 15 01:59:05 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): no here document after a dot.
-
- * parse.y (yylex): should have set lex_state after '`'.
-
- * parse.y (yylex): should have set lex_state properly after
- tOP_ASGN.
-
-Fri Jun 14 21:01:48 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * bcc32/mkexports.rb: insert sleep(1) for win9x.
-
- * bcc32/configure.bat: change return code LF -> CRLF for win9x.
-
- * win32/win32.c: fix rb_w32_open_osfhandle()
-
-Fri Jun 14 15:22:19 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (read_escape): deny zero-width hexadecimal character.
- (ruby-bugs-ja:PR#260)
-
- * parse.y (tokadd_escape): ditto.
-
- * regex.c (re_compile_pattern): ditto.
-
-Fri Jun 14 00:49:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big2dbl): return canonical HUGE_VAL for infinity.
-
-Thu Jun 13 09:43:37 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (svalue_to_avalue): v may be Qundef. This fix was
- suggested by Guy Decoux.
-
-Thu Jun 13 00:33:49 2002 takuma ozawa <metal@mine.ne.jp>
-
- * hash.c (rb_hash_s_create): use rb_hash_aset() instead of calling
- st_insert() directly, to dup&freeze string keys.
-
-Thu Jun 13 00:12:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): proper error message for "@@0".
-
- * parse.y (yylex): paren to parse_string() must be zero for
- unparenthesized strings.
-
- * parse.y (str_extend): broken string when unterminated "#{".
-
- * enum.c (enum_sort_by): had a bug in 1 element enumeration.
-
-Wed Jun 12 18:04:44 2002 akira yamada <akira@arika.org>
-
- * uri/common.rb (REGEXP::PATTERN::X_ABS_URI): 'file:/foo' is valid.
-
- * uri/generic.rb (Generic#xxx=): should return substituted value.
- (ruby-dev:16728.)
-
- * test/generic.rb (test_set_component): added tests for the above
- change.
-
-Wed Jun 12 02:38:00 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (stmt): fix typo.
-
-Wed Jun 12 01:10:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): 'do' should return kDO_BLOCK on EXPR_ENDARG.
-
- * parse.y (singleton): "def (()).a end" dumped core.
-
- * parse.y (range_op): node may be null.
-
- * parse.y (match_gen): ditto.
-
-Tue Jun 11 19:20:34 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (LIBRUBY): rename to lib$(LIBRUBY_SO).a on Cygwin/MinGW.
-
- * configure.in, cygwin/GNUmakefile: use dllwrap when --disable-shared
- is specified.
-
-Tue Jun 11 17:12:04 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg): void value check for "..", "...", "!", and "not".
-
- * parse.y (match_gen): void value check for "=~".
-
- * parse.y (value_expr): check NODE_AND and NODE_OR recursively.
-
- * parse.y (cond0): void value check added for conditionals.
-
-Tue Jun 11 13:18:47 2002 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (noop): new method.
-
- * lib/net/ftp.rb (site): ditto.
-
-Tue Jun 11 13:15:41 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bcc32/Makefile.sub: set PROCESSOR_LEVEL to 6 if it's too big value.
-
- * win32/Makefile.sub: ditto.
-
-Tue Jun 11 12:37:46 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * bcc32/configure.bat fix.
-
-Tue Jun 11 10:18:23 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * new platform [bccwin32] merged.
- - create new folder bcc32
- - modify any files for bccwin32
- error.c, file.c, hash.c, io.c, instruby.rb,
- ext/extmk.rb.in,
- lib/mkmf.rb, lib/ftools.rb,
- ext/digest/defs.h,
- ext/dl/depend, ext/dl/dl.c, ext/dl/sym.c, ext/dl/extconf.rb,
- ext/socket/extconf.rb,
- ext/pty/extconf.rb,
- ext/tcltklib/extconf.rb
- ext/Win32API/Win32API.c,
- win32/dir.h, win32/win32.c, win32/win32.h, win32/resource.rb
-
-Mon Jun 10 19:02:19 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * numeric.c (fix_lshift): negative shift count means right shift.
- (ruby-bugs-ja:PR#248)
-
- * numeric.c (fix_rshift): return -1 when left side operand is
- negative. (ruby-bugs-ja:PR#247)
-
- * parse.y (yylex): `0_' should be an error. (ruby-bugs-ja:PR#249)
-
-Mon Jun 10 01:53:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): ruby_frame->last_func may be null, if it's
- called outside of a method.
-
- * parse.y (arg): use INT2NUM, not INT2FIX for tUMINUS.
-
- * parse.y (arg): unnecessary negative tPOW treatment.
-
- * parse.y (tokadd_escape): wrong backslash escapement.
-
-Sun Jun 9 17:40:41 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * ext/dl: change the callback mechanism.
-
-Sat Jun 8 00:48:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (stmt,arg): too much void value check.
-
- * parse.y (stmt,arg): need to check void value on rules which does
- not use node_assign().
-
-Thu Jun 6 19:50:39 2002 KONISHI Hiromasa <H_Konishi@ruby-lang.org>
-
- * sample/biorhythm.rb (getPosiiton,etc)
- fix at changing Date module ( Date is changed Fixnum to Rational )
-
-Thu Jun 6 17:42:39 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (ipaddr): need not to taint hostnames.
-
-Thu Jun 6 12:04:30 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.status): use sub! instead of []= because
- []= causes exception.
-
-Thu Jun 6 11:42:15 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/thread.rb (Queue::pop): get rid of race condition.
-
-Wed Jun 5 01:56:47 2002 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: Stop the running zombi-eventloop when
- mainloop_watchdog is killed.
-
-Tue Jun 4 23:09:24 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_include): should be based on "<=>", whereas
- member? still is based on "each".
-
- * range.c (range_min,range_max): redefine methods based on "<=>".
-
-Tue Jun 4 18:28:37 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/socket/extconf.rb: The IPv6 stack of Cygwin is still incomplete.
-
- * ext/Win32API/extconf.rb: refactoring.
-
-Tue Jun 4 07:03:33 2002 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tkfont.rb: Fix bugs on TkFont.init_widget_font for Tk8.x.
-
- * ext/tk/lib/tkafter.rb: Add self to 1st argument of interval-
- and loop-proc
- TkAfter#current_interval returns an interval (sleep) time value
- TkAfter#current_args returns an array of arguments
- TkAfter#return_value returns a return value of last loop-proc
-
- * ext/tk/lib/tk*.rb: Allow to use Symbols for parameters.
-
- * ext/tk/lib/tkcanvas.rb: (TkcItem) Add 'coords' parameter to the
- canvas item constructor (for new notation of constructor).
-
- * ext/tcltklib/tcltklib.c: New 'mainloop' and 'mainloop_watchdog'.
-
- * ext/tk/lib/tk.rb: (Tk.restart) Add 'app-name' paramater and
- 'use' parameter.
-
- * ext/tk/lib/tk.rb: Add new parameter 'widgetname' to the widget
- constructor to support effective use of Resource Database.
-
- * ext/tk/lib/tk.rb: TkOption::get always returns a tainted string.
-
-Tue Jun 4 00:45:50 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/socket/addrinfo.h: typo.
-
- * ext/socket/getaddrinfo.c (gai_strerror): make literals const.
-
- * ext/socket/socket.c (init_inetsock): ensures resources are
- freed at exceptions.
-
- * ext/socket/socket.c (init_unixsock): ditto.
-
- * ext/socket/socket.c (udp_connect): ditto.
-
-Mon Jun 3 20:39:51 2002 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/extconf.rb : change PLATFORM with RUBY_PLATFORM.
-
-Mon Jun 3 07:07:07 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (here_document): check if identifier is terminated.
- (ruby-bugs-ja:PR#239)
-
- * parse.y (yylex): should pushback proper char after '**'.
- (ruby-bugs-ja:PR#240)
-
-Mon Jun 3 05:56:17 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_aset): should raise error if an indexing string
- is not found in the receiver.
-
- * sprintf.c (rb_f_sprintf): "%d" should convert objects into
- integers using Integer().
-
-Sat Jun 1 19:20:07 2002 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole: merge from rough.
-
-Fri May 31 17:11:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile::size): added.
-
-Thu May 30 12:52:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_step): iteration done using "+" if elements are
- Numeric. Otherwise using "succ".
-
- * range.c (range_each): iteration done using "succ". If the
- elements does not respond to "succ", raise TypeError. As a
- result, all Enumerable methods, e.g. collect, require elements
- to respond to "succ".
-
- * range.c (range_member): comparison done using "each", if
- elements are non-Numeric or no-"succ" objects. Otherwise
- compare using "<=>".
-
- * range.c (Init_Range): remove "size" and "length".
-
-Thu May 30 09:16:36 2002 Wakou Aoyama <wakou@ruby-lang.org>
-
- * lib/cgi.rb: if StringIO is usable then use it.
-
-Wed May 29 18:55:47 2002 KONISHI Hiromasa <H_Konishi@ruby-lang.org>
-
- * function renames my* and win32_* to rb_w32_* in win32/win32.c
- fixed files win32/win32.c, win32/win32.h, win32/dir.h,
- hash.c, rubysig.h, signal.c, ext/socket/socket.c
-
-Wed May 29 17:32:55 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * time.c (tmcmp, search_time_t): activate unless HAVE_TIMEGM.
-
-Wed May 29 13:45:15 2002 Wakou Aoyama <wakou@ruby-lang.org>
-
- * lib/cgi.rb: not use const if GET, HEAD. check multipart form head.
-
-Tue May 28 17:56:02 2002 Sean Chittenden <sean@ruby-lang.org>
-
- * parse.y: yyparse #defines moved from intern.h
-
- * ruby.c (proc_options): access prefixed "ruby_yydebug".
-
- * applied modifies to pacify some of gcc -Wall warnings.
-
-Tue May 28 14:07:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg): no more ugly hack for "**", so that "-2**2" to be
- parsed as "(-2)**2", whereas "- 2**2" or "-(2)**2" to be parsed
- as "-(2**2)".
-
- * parse.y (yylex): '-2' to be literal fixnum. [new]
-
-Tue May 28 12:13:37 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (scope_node): trick to keep the node has a scope.
-
- * eval.c (rb_eval): NODE_EVSTR: write back local_tbl to the node.
-
- * eval.c (rb_eval): NODE_SCOPE: hold the scope node in ruby_scope.
-
- * eval.c (module_setup): ditto.
-
- * eval.c (rb_call0): ditto.
-
- * node.h (NEW_DASGN, NEW_DASGN_CURR): remove surplus semicolons.
-
-Fri May 24 09:06:29 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_arg): nil test against v[6] (usec).
-
-Thu May 23 16:39:21 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ruby.c (proc_options): option parsing problem.
- (ruby-bugs-ja:PR#233)
-
-Thu May 23 09:13:56 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (proc_options): removed "-*-" support for #! line.
-
- * io.c (rb_io_s_sysopen): new method to get a raw file
- descriptor. [new]
-
- * ext/socket/socket.c (tcp_sysaccept): new method to return an
- accepted socket fd (integer). [new]
-
- * ext/socket/socket.c (unix_sysaccept,sock_sysaccept): ditto.
-
-Wed May 22 21:26:47 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ruby.c (proc_options): -T consumes digits only.
-
-Wed May 22 20:18:31 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: need not link vsnprintf.o on MinGW.
-
-Wed May 22 18:34:23 2002 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (yylex): Here-document label ate '-'.
-
-Tue May 21 13:25:18 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-font-lock-keywords): symbols end with
- '_'.
-
-Tue May 21 04:48:37 2002 Sean Chittenden <sean@chittenden.org>
-
- * lib/cgi-lib.rb: Checking for constant MOD_RUBY instead of
- environment variable. Remove a mod_ruby warning and use
- Apache::request.headers_out[] instead.
-
-Tue May 21 01:16:46 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (bodystmt): ensure clause was executed on else clause
- without rescue clause.
-
-Tue May 21 00:20:25 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * ext/dl/ptr.c: rename PtrData::alloc to PtrData::malloc.
-
- * ext/dl/lib/dl/struct.c: rename Struct#alloc to Struct#malloc.
-
-Mon May 20 14:29:14 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (Init_Object): should do exact match for Module#==.
-
- * compar.c (cmp_eq): returns 'false' if <=> returns 'nil'.
-
- * compar.c (cmp_gt,cmp_ge,cmp_lt,cmp_le,cmp_between): ditto.
-
-Mon May 20 13:28:52 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * io.c (rb_io_clone): writing stream was not copied properly.
-
-Sat May 18 21:38:11 2002 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb, lib/parsedate.rb:
- updated to the new version (based on date2 3.2.1).
-
-Sat May 18 21:18:00 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): add VC++4/5 support about noreturn
- directive.
-
-Sat May 18 02:16:41 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): should propagate taintedness.
-
- * pack.c (pack_unpack): ditto.
-
-Fri May 17 16:16:19 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * sample/test.rb: use eval instead of './miniruby -c',
- in order to check a syntax error.
-
-Thu May 16 14:46:34 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_thread_select): cleanup conditional compilation.
-
-Wed May 15 06:13:35 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_schedule): need to preserve errno before
- calling rb_trap_exec().
-
- * regex.c (calculate_must_string): a bug in charset/charset_not
- parsing.
-
-Tue May 14 18:17:44 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * win32/Makefile.sub: config.h inlined. and catch up with the
- latest change.
-
- * win32/config.h.in: no longer used.
-
-Tue May 14 14:49:05 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * gc.c (is_pointer_to_heap): avoid GCC 3.1 warnings.
-
- * missing/strftime.c (timezone): it should take no argument on Cygwin.
-
-Tue May 14 03:07:35 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_clear_cache_by_class): new function.
-
- * eval.c (set_method_visibility): should have clear cache for
- updated visibility.
-
-Mon May 13 14:38:33 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * djgpp/config.hin, djgpp/config.sed: catch up with the latest change.
-
-Mon May 13 01:59:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flo_to_s): default format precision to be "%.16g".
-
- * util.c (ruby_strtod): use own strtod(3) implementation to avoid
- locale hell. Due to this change "0xff".to_f no longer returns 255.0
-
-Sun May 12 03:01:08 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * missing.h: add for missing/*.c.
-
- * ruby.h: add `#include "missing.h"'.
-
- * Makefile.in: add the dependency of missing.h by gcc -MM.
-
- * MANIFEST: add missing.h
-
-Sat May 11 23:24:52 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * ext/dl: enable dl's stack emulation for constructing function call.
-
-Sat May 11 10:52:09 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * dir.c (glob_helper): remove escaping backslashes.
-
-Sat May 11 02:46:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (avalue_to_yvalue): new function to distinguish yvalue
- (no-arg == Qundef) from svalue (no-arg == Qnil).
-
- * eval.c (rb_yield_0): use avalue_to_yvalue().
-
- * eval.c (assign): warn if val == Qundef where it means rhs is
- void (e.g. yield without value or call without argument).
-
-Fri May 10 19:00:47 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * parse.y (here_document): preserve line number begins here
- document.
-
-Fri May 10 01:55:44 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_thread_join): added an argument to limit time to wait
- the thread.
-
- * eval.c (rb_thread_join_m): new. and added optional argument.
-
-Wed May 8 23:48:40 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (value_expr): need not to warn for WHILE and UNTIL,
- since they can have return value (via valued break).
-
-Tue May 7 17:13:40 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: forgot to add '-Wl,' to the gcc option on Cygwin/MinGW.
-
-Tue May 7 15:41:33 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/iconv/iconv.c (iconv_try): should initialize exceptions
- properly. (ruby-bugs-ja:PR#232)
-
-Tue May 7 15:28:03 2002 Minero Aoki <aamine@loveruby.net>
-
- * eval.c (rb_yield_0): The destination of the goto jump was wrong.
-
-Tue May 7 09:17:51 2002 Minero Aoki <aamine@loveruby.net>
-
- * eval.c (superclass): undesirable "unexpected return" when the
- superclass is not a Class.
-
-Sun May 5 06:53:45 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/mkmf.rb: exclude topdir from the system configuration
- section and prevent it from being overridden.
-
-Fri May 3 20:19:00 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: add #include <errno.h> in AC_CHECK_DECLS().
-
- * win32/config.h.in: define HAVE_DECL_SYS_NERR.
-
-Thu May 2 23:42:40 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_s_quote): # also should be quoted.
-
-Thu May 2 18:27:13 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb.in, lib/mkmf.rb: use 'do...end' instead of '{}' for
- Borland make.
-
-Thu May 2 08:01:56 2002 Chris Thomas <kenshin@apple.com>
-
- * error.c: use HAVE_DECL_SYS_NERR instead of platform names.
-
-Tue Apr 30 09:23:05 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_step): better iteration condition for float
- values; suggested by Masahiro TANAKA <masa@ir.isas.ac.jp>.
-
-Tue Apr 30 05:59:42 2002 Michal Rokos <m.rokos@sh.cvut.cz>
-
- * range.c (range_step): step (for Range#step method) <= 0 makes no
- sense, thus ArgError will be raised.
-
- * range.c (range_each): Range#each method is special case for
- Range#step(1)
-
-Mon Apr 29 18:46:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_find_file): load must be done from an absolute path if
- $SAFE >= 4.
-
-Sun Apr 28 17:01:56 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.c (insert): fix prototype for ANSI C.
-
-Fri Apr 26 13:47:15 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_partition): new method. [new]
-
-Fri Apr 26 13:41:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_s_quote): quote whitespaces for /x cases.
-
-Fri Apr 26 06:48:23 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * ext/dl/ptr.c (cary2ary): missing break in switch statements.
-
-Fri Apr 26 09:35:47 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_proc_new): make Proc from C function. [new]
-
- * intern.h (rb_proc_new): prototype.
-
-Wed Apr 24 14:56:46 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (proc_to_proc): return self. [new]
-
- * eval.c (block_pass): no need to convert if block is Proc.
-
-Wed Apr 24 14:21:41 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: set size of the initial stack from
- 2MB to 32MB on MinGW/Cygwin.
-
-Wed Apr 24 14:06:35 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_step): try to reduce residual on Float operations.
-
-Wed Apr 24 06:48:31 2002 Koji Arai <jca02266@nifty.ne.jp>
-
- * io.c (rb_io_mode_flags): both 'r+b' and 'rb+' should be allowed.
-
- * io.c (rb_io_mode_modenum): ditto.
-
-Wed Apr 24 01:16:14 2002 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_mark): must check if ptr is NULL
- first. [ruby-talk:38873]
-
- * lib/mkmf.rb (create_makefile): should print depend file when
- make is other than nmake.
-
-Wed Apr 24 00:37:12 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/extmk.rb.in (create_makefile): use `{$(srcdir)}' directive instead
- of `$(srcdir)/' when including depend file.
-
- * lib/mkmf.rb (create_makefile): add `{$(srcdir)}' when including depend
- file.
-
-Tue Apr 23 12:58:18 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_memerror): rename from mem_error, and exported.
-
- * gc.c (Init_GC): pre-allocate NoMemoryError instance.
-
- * object.c (convert_type): error message changed from "failed to
- convert" to "cannot convert", since it does not try to convert
- if an object does not respond to the converting method.
-
-Mon Apr 22 09:31:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (block_pass): convert Method to Proc using
- rb_check_convert_type().
-
- * object.c (rb_check_convert_type): always convert T_DATA
-
- * eval.c (rb_thread_cleanup): should not terminate main_thread by
- Fatal error.
-
- * regex.c (is_in_list): need to not exclude NUL and NEWLINE.
-
-Sat Apr 20 00:19:13 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_expr_str): wrong backslash escapement.
-
- * re.c (rb_reg_expr_str): do not escape embedded space
- characters.
-
-Fri Apr 19 22:03:40 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub: add -DNT to $CFLAGS instead of $CPPFLAGS.
-
- * win32/setup.mak: ditto.
-
-Fri Apr 19 17:24:22 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): T_DATA process patch from Joel VanderWerf
- <vjoel@PATH.Berkeley.EDU>. This is temporary hack; it remains
- undocumented, and it will be removed when marshaling is
- re-designed.
-
- * marshal.c (r_object): ditto.
-
-Fri Apr 19 17:10:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_step): Integer#step is moved to Numeric#step;
- Fixnum#step is merged into this method.
-
- * numeric.c (int_dotimes): Fixnum#times is merged.
-
- * numeric.c (int_upto): Fixnum#upto is merged.
-
- * numeric.c (int_downto): Fixnum#downto is merged.
-
-Fri Apr 19 16:22:55 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/socket/extconf.rb: include <windows.h>, <winsock.h> on _WIN32.
-
- * win32/win32.c: include <mswsock.h> on __MINGW32__.
-
- * configure.in: cleanup for autoconf 2.5x.
-
- * configure.in: use gcc -shared instead of dllwrap on Cygwin/MinGW.
-
- * ext/extmk.rb, lib/mkmf.rb: get rid of "--def=".
-
-Fri Apr 19 14:57:44 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * re.c (rb_reg_to_s): remove redundant shy group.
-
-Fri Apr 19 01:08:20 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_cleanup): current thread may be THREAD_STOPPED,
- for example when terminated from signal handler.
-
-Thu Apr 18 19:03:15 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_compile_pattern): remove /p support.
-
- * regex.h: ditto.
-
- * parse.y (parse_regx): ditto.
-
-Thu Apr 18 17:01:43 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * ext/dl/ptr.c (rb_dlptr_cast): removed.
-
-Thu Apr 18 17:01:43 2002 Tanaka Akira <akr@m17n.org>
-
- * re.c (rb_reg_to_s): new function for Regexp#to_s.
-
-Wed Apr 17 23:55:34 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/Setup*, ext/bigfloat/*: Back out the import of BigFloat in
- favor of its forthcoming successor, BigDecimal.
-
-Wed Apr 17 16:53:33 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_expr_str): should treat backslash specially in
- escaping.
-
-Wed Apr 17 08:16:41 2002 Michal Rokos <m.rokos@sh.cvut.cz>
-
- * io.c: complete off_t handling; missing argument for
- fptr_finalize(); polished rb_scan_args call.
-
-Wed Apr 17 00:01:59 2002 Michal Rokos <m.rokos@sh.cvut.cz>
-
- * dir.c: wrap multi-statement macro by do { } while (0)
-
- * eval.c, numeric,c, sprintf.c, util.c: ditto.
-
-Tue Apr 16 08:59:50 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (assign): convert mrhs to mvalue.
-
-Mon Apr 15 18:12:57 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_eq): check `y == x' if y is neither Fixnum,
- Bignum, nor Float.
-
-Mon Apr 15 09:27:31 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_unpack): should treat 'U' in character unit, not in
- byte unit.
-
- * error.c (exc_initialize): should clear backtrace information.
-
-Sat Apr 13 23:42:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_fptr_cleanup): should close IO created by IO.new(fd).
-
- * rubyio.h: remove FMODE_FDOPEN
-
-Fri Apr 12 12:54:04 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub: use missing/acosh.c.
-
- * win32/config.h.in: define HAVE_COSH, HAVE_SINH, and HAVE_TANH.
-
-Fri Apr 12 02:58:55 2002 Koji Arai <jca02266@nifty.ne.jp>
-
- * struct.c (rb_struct_select): fix typo.
-
-Fri Apr 12 00:34:17 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * MANIFEST (missing/acosh.c): added.
-
- * Makefile.in (missing/acosh.c): ditto.
-
- * Makefile.in (missing/fileblocks.c): ditto.
-
- * configure.in (AC_REPLACE_FUNCS): check acosh() on behalf of
- inverse hyperbolic functions, asinh() and atanh().
-
- * missing/acosh.c: added for acosh(), asinh() and atanh().
-
-Thu Apr 11 20:01:44 2002 Masahiro Tomita <tommy@tmtm.org>
-
- * io.c (io_write): check error if written data is less than
- specified size to detect EPIPE.
-
-Thu Apr 11 19:10:37 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (remain_size): IO#read returns "" if file.size == 0.
-
- * random.c (rand_init): add check for initstate(3).
-
- * configure.in: ditto.
-
-Thu Apr 11 09:31:19 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * ext/dl/ptr.c: raise() -> rb_raise(). (Thanks Tetsuya Watanabe)
-
- * ext/dl/sym.c: ditto.
-
-Thu Apr 11 07:57:48 2002 Michal Rokos <m.rokos@sh.cvut.cz>
-
- * eval.c (assign): ruby_verbose should be surrounded by RTEST().
-
- * object.c (rb_str2cstr): ditto.
-
- * parse.y (void_expr): ditto.
-
- * parse.y (void_stmts): ditto.
-
- * variable.c (rb_ivar_get): ditto.
-
- * variable.c (rb_cvar_set): ditto.
-
- * variable.c (rb_cvar_get): ditto.
-
-Thu Apr 11 07:02:31 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * ext/dl: Add dl.txt instead of README and README.html.
-
-Thu Apr 11 01:55:52 2002 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi/session.rb: support for multipart form.
-
-Wed Apr 10 18:42:23 2002 Tachino Nobuhiro <tachino@jp.fujitsu.com>
-
- * dir.c (glob_helper): should have proceed link when link->path
- was non existing symbolic link.
-
-Wed Apr 10 17:30:19 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_obj_remove_instance_variable): raise NameError if
- specified instance variable is not defined.
-
- * variable.c (generic_ivar_remove): modified to check ivar
- existence.
-
-Wed Apr 10 14:16:45 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * misc/ruby-mode.el (ruby-font-lock-keywords): fontify symbols for
- unary operators and aset.
-
-Tue Apr 9 13:40:31 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * lib/mkmf.rb (try_link0): need expand macro in command, sync with
- ext/extmk.rb.in.
-
- * lib/mkmf.rb (try_cpp): ditto.
-
- * lib/mkmf.rb (egrep_cpp): ditto.
-
-Tue Apr 9 12:44:59 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/stringio/stringio.c (check_modifiable): performance
- improvement. avoid calling rb_str_modify() twice.
-
- * ext/stringio/stringio.c (strio_ungetc): ditto.
-
- * ext/stringio/stringio.c (strio_putc): ditto.
-
- * ext/stringio/stringio.c (strio_write): ditto, and use
- rb_str_cat() as possible.
-
-Tue Apr 9 05:17:48 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * re.c (match_select): fix index references and make
- MatchData#select actually work.
-
-Tue Apr 9 00:20:52 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_file_s_extname): new method based on the proposal
- (and patch) from Mike Hall. [new]
-
-Mon Apr 8 04:50:51 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (error_handle): default to 1 unless status is set.
-
- * eval.c (ruby_options): guard error_handle() with PROT_NONE.
-
- * eval.c (ruby_stop): ditto.
-
-Mon Apr 8 01:22:24 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * math.c (math_acosh): added. [new]
-
- * math.c (math_asinh): ditto.
-
- * math.c (math_atanh): ditto.
-
- * struct.c (rb_struct_each_pair): method added. [new]
-
-Sat Apr 6 02:04:49 2002 Guy Decoux <ts@moulon.inra.fr>
-
- * class.c (rb_singleton_class): wrong condition; was creating
- unnecessary singleton class.
-
-Sat Apr 6 01:09:41 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (remove_sign_bits): simplifies the condition.
-
- * bignum.c (get2comp): calculate proper carry over.
-
-Fri Apr 5 05:07:28 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * ext/dl: Add dl/struct.rb.
-
-Thu Apr 4 14:08:52 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * ext/dl/lib/dl/import.rb: Get rid of ineffective
- encoding/decoding procedures.
-
-Thu Apr 4 01:08:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (int_step): step may be a float less than 1.
-
-Wed Apr 3 20:42:34 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * ext/dl: Merge Nakada's patch.
-
- * ext/dl/dl.h: define StringValuePtr for ruby-1.6.
-
-Wed Apr 3 15:37:24 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * ext/dl: Add dl/types.rb.
-
-Wed Apr 3 01:54:10 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/extmk.rb.in (enable_config): follow lib/mkmf.rb.
-
-Tue Apr 2 19:59:13 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * ext/dl: Merge from rough.
-
-Tue Apr 2 15:17:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * Makefile.in (CPPFLAGS): remove @includedir@.
-
- * lib/mkmf.rb (create_makefile): ditto.
-
- * ext/extmk.rb.in (create_makefile): ditto.
-
-Tue Apr 2 15:09:05 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/socket/socket.c (sock_addrinfo): should clear addrinfo hints.
-
-Mon Apr 1 23:48:12 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
-
- * lib/mkmf.rb: install any files using $INSTALLFILES.
- (see also [ruby-dev:16683])
-
-Mon Apr 1 17:25:50 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_fptr_cleanup): need flush even when io will not be
- closed.
-
- * io.c (rb_io_initialize): was calling wrong function
- rb_io_mode_flags().
-
-Mon Apr 1 16:52:00 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/sdbm/init.c (each_pair): moved prototype before the
- definition.
-
- * ext/racc/cparse/cparse.c (call_scaniter): ditto.
-
-Mon Apr 1 15:11:40 2002 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/racc/cparse/cparse.c: prototype; call_scaniter().
-
- * ext/sdbm/init.c: prototype; each_pair().
-
- * ext/tcltklib/tcltklib.c: prototypes; _timer_for_tcl() and ip_ruby(),
- Nobu's patch at [ruby-dev:14483].
-
-Mon Apr 1 10:56:40 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (match_setter): it's OK to assign nil to $~.
-
-Mon Apr 1 03:55:46 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_fptr_cleanup): do not close IO created by for_fd().
-
- * io.c (rb_io_initialize): mark IO created by for_fd
-
- * ext/socket/socket.c (bsock_s_for_fd): ditto.
-
-Fri Mar 29 20:21:58 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * lib/mkmf.rb (create_makefile): default FLAGS to empty strings.
-
-Fri Mar 29 16:36:52 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * lib/mkmf.rb (arg_config): should use Shellwords::shellwords like
- ext/extmk.rb.in.
-
- * lib/mkmf.rb (enable_config): default had priority over command
- line options and configure_args.
-
- * lib/mkmf.rb: support autoconf 2.53 style variables from
- environment.
-
- * lib/mkmf.rb: add directory options.
-
-Fri Mar 29 15:49:29 2002 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/README.win32: follow recent changes.
-
-Fri Mar 29 14:44:05 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_fflush): DRY patch from /Christoph applied.
-
-Thu Mar 28 18:58:13 2002 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.status): reflect user defined $CC in
- config.status.
-
-Thu Mar 28 18:03:51 2002 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c: add taint check.
-
- * ext/strscan/strscan.c: #getch/#get_byte should set regexp
- registers.
-
- * ext/strscan/strscan.c: remove useless #include directive.
-
- * ext/strscan/strscan.c: refactor struct strscanner.
-
-Thu Mar 28 14:51:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (sock_addrinfo): should specify socktype
- from outside.
-
-Wed Mar 27 17:04:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_binmode): should call next_argv() to initialize ARGF.
-
- * io.c (argf_filename): ditto.
-
- * io.c (argf_file): ditto.
-
-Wed Mar 27 14:47:32 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (READ_DATA_PENDING): configure.in has supported for uClibc,
- so remove uClibc stuff.
-
-Wed Mar 27 13:14:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_sysseek): new method based on a patch from Aristarkh
- A Zagorodnikov <xm@bolotov-team.ru>. [new]
-
- * io.c (READ_DATA_PENDING): use !feof(fp) for default behavior.
-
-Tue Mar 26 20:28:50 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: HTTP.get accepts URI.
-
- * lib/net/http.rb: new method HTTP.get_uri.
-
- * lib/net/http.rb: add some HTTP 1.1 response codes.
-
-Tue Mar 26 20:25:28 2002 Minero Aoki <aamine@loveruby.net>
-
- * doc/net/protocol.rd.ja, smtp.rd.ja, pop.rd.ja: removed.
-
- * MANIFEST: remove doc/net/* entries.
-
-Tue Mar 26 18:45:15 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (FILE_READPTR): check bufread instead of bufend
- for uClibc.
-
- * ext/extmk.rb.in (arg_config): should use Shellwords::shellwords.
-
-Tue Mar 26 01:56:33 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (primary): while/until statement modifiers to "begin"
- statement now work as "do .. while" even when begin statement
- has "rescue" or "ensure" [new].
-
- * parse.y (bodystmt): rescue/ensure is allowed at every bodies,
- i.e. method bodies, begin bodies, class bodies[new], and module
- bodies[new].
-
-Mon Mar 25 22:10:04 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (sock_addrinfo): should specify ai_socktype
- for getaddrinfo hints.
-
-Mon Mar 25 17:18:48 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * dir.c (rb_push_glob): local variable 'maxnest' was
- uninitialized.
-
-Mon Mar 25 16:53:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_abort): embed aborting message into exception
- object [new].
-
- * eval.c (terminate_process): utility function for exit and abort.
-
-Tue Mar 26 14:04:47 2002 okabe katsuyuki <HGC02147@nifty.ne.jp>
-
- * win32/mkexports.rb: support VC++.NET.
-
-Tue Mar 26 14:00:17 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/bigfloat/bigfloat.c: Fix the initializer's function name
- according to the new library name. (pointed out by nobu)
-
-Tue Mar 26 11:12:01 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: new file.
-
-Tue Mar 26 03:23:50 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb (pp): return nil like p.
-
-Tue Mar 26 01:48:01 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/bigfloat/extconf.rb: Downcase the library name. (BigFloat.so
- -> bigfloat.so)
-
- * ext/bigfloat/bigfloat.c (BigFloat_inspect): Alter the inspect
- format not to look like an array. (pointed out by akr)
-
- * ext/bigfloat/bigfloat.c (BigFloat_hash): Implement BigFloat#hash.
-
- * ext/bigfloat/bigfloat.c (BigFloat_dump, BigFloat_load):
- Support marshaling.
-
-Tue Mar 26 00:38:11 2002 Tanaka Akira <akr@m17n.org>
-
- * configure.in (FILE_READPTR): check _p for 4.4BSD.
-
-Mon Mar 25 23:39:25 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * configure.in (FILE_READPTR): new. for IO#gets improvement.
-
- * io.c (READ_DATA_PENDING_PTR): ditto.
-
- * io.c (remain_size): separated from read_all().
-
- * io.c (read_all): argument changed.
-
- * io.c (appendline): new. get a line and append to string.
-
- * io.c (swallow): new. swallow continuous line delimiters.
-
- * io.c (rb_io_getline_fast): add delimiter argument.
-
- * io.c (rb_io_getline): performance improvement.
-
-Mon Mar 25 19:30:25 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb.in (arg_config): get rid of single quotes
- for autoconf 2.53.
-
-Mon Mar 25 17:49:41 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * regex.c (mbc_startpos_func): VC6 seems to be unable to
- understand forward declaration for static variables.
-
- * dir.c (rb_push_glob): local variable 'maxnest' was
- uninitialized.
-
-Mon Mar 25 13:24:20 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (bsock_do_not_rev_lookup_set): should not be
- allowed when $SAFE > 3.
-
- * eval.c (rb_thread_ready): THREAD_TO_KILL threads should not turn
- into THREAD_RUNNABLE on wakeup.
-
- * eval.c (rb_thread_list): THREAD_TO_KILL threads should be in the
- list.
-
- * eval.c (thgroup_list): ditto; by moving gid clearance from
- rb_thread_cleanup().
-
-Mon Mar 25 11:06:19 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * dln.c (dln_argv0): unused unless USE_DLN_A_OUT.
-
- * regex.c (mbc_startpos_func): should be static.
-
-Sun Mar 24 12:19:09 2002 Koji Arai <jca02266@nifty.ne.jp>
-
- * dir.c (fnmatch): "*/bar" (with FNM_PATHNAME flag) does not
- match "foo/bar".
-
-Sun Mar 24 00:46:05 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * util.c (push_element): avoid warning for djgpp.
-
-Sat Mar 23 01:50:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (read_all): files on /proc filesystem with zero stat size,
- may have contents.
-
-Fri Mar 22 18:07:29 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (tcp_s_gethostbyname): refactored.
-
- * ext/socket/socket.c (sock_s_gethostbyname): ditto.
-
-Fri Mar 22 16:46:54 2002 Minero Aoki <aamine@loveruby.net>
-
- * ext/extmk.rb.in: replace mkdir with mkpath to compile racc/cparse.
-
-Fri Mar 22 16:22:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * the VMS support patch submitted by Akiyoshi, Masamichi
- <Masamichi.Akiyoshi@jp.compaq.com> is merged.
-
-Fri Mar 22 16:27:24 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/racc/parser.rb: new file.
-
- * ext/racc/MANIFEST, cparse.c, depend, extconf.rb: new files.
-
- * lib/README: add racc/parser.rb.
-
- * ext/Setup*: add racc/cparse.
-
-Fri Mar 22 15:04:03 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (exec_under): changing ruby_class is OK, but should not
- alter cbase.
-
- * eval.c (yield_under_i): ditto.
-
-Fri Mar 22 15:44:38 2002 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/MANIFEST, strscan.c, depend, extconf.rb: new files.
-
- * ext/Setup*: add strscan entry.
-
-Fri Mar 22 14:32:14 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb: Protocol#start should return self.
-
-Fri Mar 22 14:14:21 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/resolv.rb: fix arguments to create exceptions.
- Patch from matt@lickey.com. (ruby-bugs:PR#278)
-
-Fri Mar 22 13:51:11 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/bigfloat/.cvsignore, ext/bigfloat/MANIFEST: BigFloat 1.1.8
- has been imported. Add .cvsignore and MANIFEST.
-
-Fri Mar 22 04:07:55 2002 Koji Arai <jca02266@nifty.ne.jp>
-
- * sprintf.c (rb_f_printf): discard meaningless prefix ".." for '%u'.
-
-Thu Mar 21 01:11:37 2002 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.status): fix install path (prefix).
-
-Thu Mar 21 01:03:05 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/configsub.rb: latest autoconf style support.
-
-Wed Mar 20 22:16:25 2002 Usaku Nakamura <usa@ruby-lang.org>
-
- * mkconfig.rb: close duplicated $stdout before renaming rbconfig.rb.
-
-Wed Mar 20 21:54:17 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * win32/Makefile.sub: made variables configurable.
-
- * win32/Makefile.sub (config.h): updates RUBY_PLATFORM from
- Makefile.
-
- * win32/Makefile.sub (config.status): ditto. and use recent
- autoconf format.
-
- * win32/Makefile.sub (clean): separate ext and local clean up.
-
- * win32/Makefile.sub (distclean): ditto.
-
- * win32/config.status.in: no longer used.
-
-Wed Mar 20 20:12:35 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * variable.c (rb_const_list): a temporary table must be freed.
-
-Wed Mar 20 19:44:09 2002 Tanaka Akira <akr@m17n.org>
-
- * mkconfig.rb: don't touch rbconfig.rb if there is a trouble.
-
-Wed Mar 20 16:05:37 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (is_defined): should check receiver only once.
-
- * eval.c (is_defined): should handle NODE_NEWLINE.
-
-Wed Mar 20 11:29:25 2002 Aristarkh A Zagorodnikov <xm@xml-objects.com>
-
- * file.c (rb_file_s_expand_path): memory leak fixed.
-
-Wed Mar 20 00:36:43 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * util.c (ruby_getcwd): the content of buf is uncertain and must
- not be printed when getcwd(buf, size) has failed.
-
-Mon Mar 18 22:19:52 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/stringio/stringio.c (check_modifiable): wrong declaration.
-
-Mon Mar 18 18:04:05 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/digest: add depend file.
-
- * ext/digest/md5: ditto.
-
- * ext/digest/rmd160: ditto.
-
- * ext/digest/sha1: ditto.
-
- * ext/digest/sha2: ditto.
-
- * ext/iconv/MANIFEST: ditto.
-
- * ext/stringio/MANIFEST: ditto.
-
- * ext/syslog: ditto.
-
-Mon Mar 18 17:18:06 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_f_abort): should not bypass cleanup.
-
- * ext/stringio/stringio.c (check_modifiable): void function.
-
-Mon Mar 18 12:52:01 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/iconv/extconf.rb: workaround for GNU libiconv.
-
-Mon Mar 18 10:55:03 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * parse.y (parse_string): part of multi-byte sequence must not
- match to paren.
-
- * parse.y (parse_qstring): ditto.
-
- * parse.y (parse_quotedwords): ditto.
-
- * parse.y (str_extend): handle multi-byte characters.
-
-Mon Mar 18 10:31:20 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * enum.c (enum_find): catch a value before recycle.
-
- * enum.c (enum_all): ditto.
-
- * enum.c (enum_any): ditto.
-
- * enum.c (enum_min): ditto.
-
- * enum.c (enum_max): ditto.
-
-Sun Mar 17 20:08:04 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/iconv/depend: added.
-
- * ext/stringio/depend: added.
-
-Sat Mar 16 22:43:53 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * missing/fileblocks.c: add for autoconf.
-
-Sat Mar 16 15:30:40 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_search): should clear last_match if pos is out of
- string range.
-
- * string.c (rb_str_index_m): ditto.
-
- * string.c (rb_str_rindex): ditto.
-
-Sat Mar 16 09:04:58 2002 Koji Arai <JCA02266@nifty.ne.jp>
-
- * enum.c (enum_inject): use the first iterated element as the
- initial value when omitted.
-
- * enum.c (inject_i): ditto.
-
- * enum.c (Init_Enumerable): Enumerable#inject now takes variable
- count arguments.
-
-Fri Mar 15 19:47:31 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * win32/win32.c (StartSockets): remove duplicated lines.
-
-Fri Mar 15 17:44:08 2002 Usaku Nakamura <usa@ruby-lang.org>
-
- * bignum.c, intern.h (rb_ull2big, rb_ll2big, rb_ull2inum, rb_ll2inum,
- big2ull, rb_big2ull, rb_big2ll): use LONG_LONG macro instead of
- long long.
-
- * numeric.c, intern.h, ruby.h (rb_num2ll, rb_num2ull): ditto.
-
- * ruby.h: use _I64_MAX and _I64_MIN if they are defined (for VC++).
-
-Fri Mar 15 14:02:43 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/iconv/iconv.c: fixed document, Iconv#new is no longer an
- iterator. thanks to Tanaka Akira <akr@m17n.org>.
-
-Thu Mar 14 22:17:45 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/iconv: imported.
-
-Thu Mar 14 16:42:37 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_define_class): should handle autoload.
-
- * class.c (rb_define_module): ditto.
-
-Thu Mar 14 16:18:12 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: autoconf 2.53 support. use AC_LIBOBJ.
-
-Thu Mar 14 00:29:12 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_match): should clear $~ if operand is nil.
-
- * re.c (rb_reg_match2): ditto.
-
-Thu Mar 14 12:32:59 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/stringio/stringio.c: fixed frozen string bug. ungetc no
- longer raises on readonly stream unless modifies actually.
-
-Thu Mar 14 08:57:41 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * dir.c (rb_push_glob): avoid SEGV when a block given.
-
-Thu Mar 14 00:16:02 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * string.c (rb_str_subpat_set): must make str independent after
- rb_reg_search() matched.
-
-Wed Mar 13 19:05:15 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * dir.c: FNM_PERIOD is obsoleted and FNM_DOTMATCH is introduced
- instead, which has the opposite meaning of FNM_PERIOD.
-
- * dir.c: Dir::glob now accepts optional FNM_* flags via the second
- argument, whereas Dir::[] doesn't.
-
-Wed Mar 13 18:36:55 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/getopts.rb: single_options can be nil[*], and is not not
- optional. ([*]Pointed out by gotoken)
-
-Wed Mar 13 17:23:46 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure: merge Jonathan Baker's large file support patch
- [ruby-talk:35316], with read_all patch in [ruby-talk:35470].
-
-Wed Mar 13 04:06:48 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_abort): optional message argument that be printed
- on termination.
-
-Tue Mar 12 17:12:06 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/resolv.rb: don't complete domains for absolute FQNs.
-
-Mon Mar 11 23:08:48 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/tsort.rb: new file.
-
-Mon Mar 11 21:03:37 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/stringio: new.
-
-Mon Mar 11 18:03:37 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_compile_pattern): '\0111' should be '\011' plus '1',
- since octal literals are formed by three digits at most.
-
-Mon Mar 11 14:44:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): module inclusion using extend() should
- also be detected.
-
- * eval.c (rb_eval_cmd): cbase should not be NULL; it should be
- either ruby_wrapper or Object.
-
-Sun Mar 10 02:18:22 2002 Koji Arai <jca02266@nifty.ne.jp>
-
- * enum.c (enum_each_with_index): should return self.
-
- * process.c (proc_setpgrp): should return value for non-void function.
-
- * process.c (proc_getpgid): should raise exception if getpgid() return -1.
-
- * string.c (rb_str_ljust): should return a duplicated string.
-
- * string.c (rb_str_rjust): ditto.
-
- * string.c (rb_str_center): ditto.
-
-Sat Mar 9 08:45:58 2002 Tanaka Akira <akr@m17n.org>
-
- * ext/socket/extconf.rb (have_struct_member): don't print checked
- result.
-
-Fri Mar 8 12:19:15 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/resolv.rb: use its own thread group for background threads.
-
-Fri Mar 8 02:21:32 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (cvar_cbase): utility function to find innermost non
- singleton cbase.
-
- * eval.c (is_defined): adopt new cvar behavior.
-
- * eval.c (rb_eval): ditto.
-
- * eval.c (assign): ditto.
-
-Thu Mar 7 20:08:25 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * gc.c (rb_source_filename): added. holds unique strings for file
- names with GC space.
-
- * gc.c (rb_gc_mark): mark source file name.
-
- * gc.c (gc_sweep): ditto.
-
- * gc.c (Init_GC): initialize source file name table.
-
- * intern.h (rb_source_filename): added.
-
- * eval.c (rb_eval_string): use rb_source_filename().
-
- * parse.y (yycompile): ditto.
-
- * ruby.c (proc_options): ditto.
-
- * ruby.c (load_file): ditto.
-
- * ruby.c (ruby_script): ditto.
-
- * ruby.c (ruby_prog_init): ditto.
-
-Wed Mar 6 17:58:08 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * dln.c (dln_load): use LoadLibrary instead of LoadLibraryEx.
-
-Wed Mar 6 16:50:37 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_mod_clone): should not call rb_obj_clone(), since
- Module does not provide "allocate".
-
- * class.c (rb_singleton_class): should create new singleton class
- if obj is a class or module and attached object is different,
- which means metaclass of singleton class is sought.
-
- * time.c (time_s_alloc): now follows allocation framework.
-
-Tue Mar 5 05:56:29 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/getopts.rb: Rewrite to fix some bugs and complete features.
- - Accept options with the colon in the first argument;
- getopts("a:bcd:") is equivalent to getopts("bc", "a:", "d:").
- - Do not discard the argument that caused an error.
- - Do not discard '-', which commonly stands for stdin or stdout.
- - Allow specifying a long option with a value using '='.
- (command --long-option=value)
- - Stop reading options when it meets a non-option argument.
-
-Mon Mar 4 13:19:18 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/extmk.rb.in (dir_config): Sync with mkmf.rb: Fix a bug where
- --with-xx-{include,lib} is ignored when --with-xx-dir is
- specified.
-
-Mon Mar 4 00:09:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): should initialize outer class variables from
- methods in singleton class definitions.
-
- * eval.c (assign): ditto.
-
-Fri Mar 1 11:29:10 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/socket/{addinfo.h,getaddrinfo.c} (gai_strerror): add const
- qualifier only for uClibc.
-
-Fri Mar 1 11:22:51 2002 Amos Gouaux <amos+ruby@utdallas.edu>
-
- * lib/net/imap.rb: added document.
-
- * lib/net/imap.rb (getquotaroot): new method.
-
- * lib/net/imap.rb (setacl): remove the rights if the rights
- parameter is nil.
-
- * lib/net/imap.rb (getacl): return an array of MailboxACLItem.
-
-Fri Mar 1 06:25:49 2002 Tanaka Akira <akr@m17n.org>
-
- * ext/socket/extconf.rb (have_struct_member): new method.
- check msg_control and msg_accrights in struct msghdr. check
- sys/uio.h.
-
- * ext/socket/socket.c: include sys/uio.h if available.
- (thread_read_select): new function.
- (unix_send_io): ditto.
- (unix_recv_io): ditto.
- (unix_s_socketpair): ditto.
- (Init_socket): define UNIXSocket#send_io, UNIXSocket#recv_io,
- UNIXSocket.socketpair and UNIXSocket.pair.
-
- * dln.c (dln_load): fix typo.
-
-Wed Feb 27 16:30:50 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_mod_include): load modules in argument order.
-
- * st.c (st_init_table_with_size): num_bins should be prime numbers
- (no decrement).
-
- * st.c (rehash): ditto.
-
-Wed Feb 27 13:18:49 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (READ_DATA_PENDING): uClibc support.
-
- * random.c (rand_init): ditto.
-
- * ext/socket/{addinfo.h,getaddrinfo.c} (gai_strerror): ditto.
-
-Wed Feb 27 07:05:17 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/sha2/sha2.c: Merge from rough. Fix a couple of
- off-by-one errors in Aaron Gifford's code.
-
- Obtained from: KAME via FreeBSD
- KAME PR: 393
- FreeBSD PR: kern/34242
-
-Wed Feb 27 03:36:47 2002 Koji Arai <jca02266@nifty.ne.jp>
-
- * ext/dbm/dbm.c (fdbm_select): 1.7 behavior.
-
- * ext/gdbm/gdbm.c (fgdbm_select): ditto.
-
- * ext/sdbm/sdbm.c (fsdbm_select): ditto.
-
- * ext/dbm/dbm.c (fdbm_delete): adopt Hash#delete behavior.
-
- * ext/sdbm/sdbm.c (fsdbm_delete): ditto.
-
- * ext/gdbm/gdbm.c: need not to dup key to the block.
-
- * ext/sdbm/sdbm.c : replace RuntimeError with SDBMError.
-
-Tue Feb 26 21:34:07 2002 Usaku Nakamura <usa@ruby-lang.org>
-
- * bignum.c (rb_big_2comp): void function cannot return any value.
-
-Tue Feb 26 16:52:12 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_missing): NoMethod error messages for true, false,
- nil must respond visibility like for other objects.
-
-Tue Feb 26 15:41:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): call trace_func for if/while conditions.
-
- * marshal.c (r_object): separate r_regist from proc calling.
-
-Tue Feb 26 11:25:50 2002 akira yamada <akira@arika.org>
-
- * lib/uri/generic.rb: merge0 should return [oth, oth] if oth is
- absolute URI.
-
- * lib/uri/generic.rb: registry part must not be allowed for any
- schemes for the Internet. (RFC2396, section 3.2.2 and 3.2.1.)
-
-Mon Feb 25 21:22:41 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/syslog/syslog.c: Merge from rough. Use SafeStringValue().
-
-Mon Feb 25 21:12:08 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/syslog/syslog.c: Merge from rough. Turn Syslog into a
- module keeping backward compatibility intact.
-
-Mon Feb 25 19:35:48 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * sample/test.rb (system): test with scripts under the source
- directory.
-
-Mon Feb 25 15:14:01 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (method_inspect): should not dump core for unbound
- singleton methods.
-
- * object.c (rb_mod_to_s): better description.
-
-Mon Feb 25 13:32:13 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * lib/shell.rb (Shell::expand_path): relative to @cwd.
-
-Mon Feb 25 06:30:11 2002 Koji Arai <jca02266@nifty.ne.jp>
-
- * hash.c (env_select): should path the assoc list.
-
-Sun Feb 24 17:20:22 2002 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/*/*.h: Merge from rough.
- - Avoid namespace pollution. (MD5_* -> rb_Digest_MD5_*, etc.)
-
-Sat Feb 23 21:12:13 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (rb_syswait): thread kludge; should be fixed to
- support native thread.
-
-Fri Feb 22 21:20:53 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb: set read_timeout dynamically.
-
- * lib/net/http.rb: @@newimpl is always true in the main trunk.
-
- * lib/net/http.rb: HTTP.port -> default_port
-
- * lib/net/http.rb: HTTPResponse.read_response_status ->
- read_status_line
-
-Fri Feb 22 19:56:15 2002 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/config.status.in: set LIBRUBY_SO.
-
-Fri Feb 22 03:34:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (get2comp): need to specify to carry or not.
-
- * io.c (rb_io_inspect): embed path info.
-
-Fri Feb 22 11:30:01 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/prettyprint.rb: FillGroup implemented.
-
-Thu Feb 21 21:40:18 2002 Usaku Nakamura <usa@ruby-lang.org>
-
- * ext/extmk.rb.in (create_makefile): remove unnecessary -L option from
- LIBS macro.
-
-Thu Feb 21 02:49:12 2002 Koji Arai <jca02266@nifty.ne.jp>
-
- * pack.c (pack_pack): wrong # comment treatment.
-
- * pack.c (pack_unpack): ditto.
-
-Wed Feb 20 15:15:03 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * intern.h: prototypes; rb_io_addstr(), rb_io_printf(),
- rb_io_print(), rb_io_puts()
-
- * io.c (rb_io_addstr): make extern.
-
- * io.c (rb_io_printf): ditto.
-
- * io.c (rb_io_print): ditto.
-
- * io.c (rb_io_puts): ditto.
-
-Wed Feb 20 13:41:35 2002 Usaku Nakamura <usa@ruby-lang.org>
-
- * io.c (rb_io_close): return Qnil.
-
-Wed Feb 20 12:41:59 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_any_cmp): should handle Qundef in keys.
-
- * eval.c (remove_method): should not remove a empty method to
- implement "undef".
-
- * eval.c (rb_eval): should allow singleton class def for
- true/false/nil.
-
-Tue Feb 19 21:43:32 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb: rename Protocol.port to default_port.
-
- * lib/net/smtp.rb: ditto.
-
- * lib/net/pop.rb: ditto.
-
- * lib/net/http.rb: ditto.
-
- * lib/net/protocol.rb: rename BufferedSocket class to
- InternetMessageIO.
-
- * lib/net/smtp.rb: ditto.
-
- * lib/net/pop.rb: ditto.
-
- * lib/net/http.rb: ditto.
-
- * lib/net/protocol.rb: rename InternetMessageIO#write_pendstr to
- write_message.
-
- * lib/net/smtp.rb: ditto.
-
- * lib/net/protocol.rb: new method
- InternetMessageIO#through_message.
-
- * lib/net/smtp.rb: ditto.
-
- * lib/net/protocol.rb: rename InternetMessageIO#read_pendstr to
- read_message_to.
-
- * lib/net/pop.rb: ditto.
-
- * lib/net/protocol.rb: rename InternetMessageIO#read_pendlist to
- each_list_item
-
- * lib/net/pop.rb: ditto.
-
- * lib/net/protocol.rb: Now block size is 1024.
-
- * lib/net/smtp.rb: new methods SMTP#esmtp? and #esmtp=.
-
- * lib/net/http.rb: Using singleton method syntax instead of
- singleton class clause, to avoid behavior change of class
- variables in ruby 1.7.
-
- * lib/net/http.rb: HTTPResponse class does not inherit from
- Net::Response.
-
- * lib/net/http.rb: divide HTTP#connecting into
- {begin,end}_transport.
-
- * lib/net/http.rb: unused class Accumulator removed.
-
- * lib/net/http.rb: Net::HTTP reads response. not HTTPRequest.
-
- * lib/net/http.rb: proxy related class-instance-variables are not
- initialized correctly.
-
-Tue Feb 19 20:20:12 2002 Ed Sinjiashvili <edsin@swes.saren.ru>
-
- * parse.y (str_extend): backslash escape was done wrong.
-
-Tue Feb 19 17:10:25 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * file.c (path_check_1): do not fail on world writable *parent*
- directories too.
-
-Tue Feb 19 15:51:41 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (path_check_1): do not warn on world writable *parent*
- directories.
-
- * class.c (rb_include_module): should preserve ancestor order in
- the included class/module.
-
-Tue Feb 19 14:45:32 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (path_check_1): should check directory sticky bits.
-
- * process.c (security): need not to warn twice.
-
- * marshal.c (r_object): complete restoration before calling
- r_regist().
-
-Tue Feb 19 14:24:36 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): operators in the "op" rule should make
- lex_state EXPR_ARG on EXPR_FNAME and EXPR_DOT.
-
-Tue Feb 19 13:38:10 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval_string_wrap): should hide the toplevel local
- variable bindings by PUSH_SCOPE().
-
-Tue Feb 19 13:21:51 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * regex.c: fix prototypes of xmalloc(), xcalloc() and xrealloc().
-
-Tue Feb 19 13:16:08 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * io.c (rb_io_ungetc): don't fail pushed EOF back.
-
-Mon Feb 18 20:48:40 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * pack.c (pack_pack): avoid infinite loop at comment.
-
- * pack.c (pack_unpack): ditto.
-
-Mon Feb 18 14:06:28 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * misc/ruby-mode.el (ruby-block-hanging-re): rescue block was too
- indented.
-
-Mon Feb 18 13:56:44 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (expr_value, arg_value, primary_value): value_expr()
- check in place.
-
- * eval.c (block_pass): "&nil" should clear block given.
-
-Mon Feb 18 02:05:56 2002 Wolfgang Jahrling <wolfgang@pro-linux.de>
-
- * dir.c (push_braces): remove MAXPATHLEN dependency.
-
- * dir.c (dir_s_globd): ditto.
-
- * dln.c (init_funcname): ditto.
-
- * dln.c (load_1): ditto.
-
- * dln.c (dln_load): ditto.
-
- * configure.in: add GNU/Hurd switches.
-
-Fri Feb 15 17:44:26 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): allows comment in template strings.
-
- * pack.c (pack_unpack): ditto.
-
-Sun Feb 17 23:41:37 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * mkconfig.rb (Config::expand): expand ${} too.
-
- * ext/extmk.rb.in (try_link0): expand command.
-
- * ext/extmk.rb.in (try_cpp): ditto.
-
- * ext/extmk.rb.in (extmake): default $LIBPATH to $libdir
-
-Sun Feb 17 21:39:24 2002 Tetsuya Watanabe <tetsuya.watanabe@nifty.com>
-
- * ext/digest/md5/md5init.c (Init_md5): rb_cvar_declare() is
- replaced by rb_cvar_set().
-
- * ext/digest/rmd160/rmd160init.c (Init_rmd160): ditto.
-
- * ext/digest/sha1/sha1init.c (Init_sha1): ditto.
-
- * ext/digest/sha2/sha2init.c (Init_sha2): ditto.
-
-Sun Feb 17 18:10:09 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * class.c (rb_define_class): warn unless superclass is specified
- explicitly.
-
- * class.c (rb_define_class_under): ditto.
-
-Thu Feb 16 02:11:08 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * misc/ruby-mode.el (ruby-font-lock-keywords): fontify
- instance/class/global variables start with '_'.
-
-Fri Feb 15 14:40:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): replace rb_cvar_declare() by rb_cvar_set().
-
- * eval.c (assign): ditto.
-
- * variable.c (rb_cvar_set): 4th argument (warn) added; define new
- class variable if it's not defined yet.
-
- * variable.c (rb_cvar_declare): removed.
-
-Fri Feb 15 13:36:58 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_rshift): should properly convert the negative
- value to 2's compliment.
-
-Thu Feb 14 17:38:35 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * parse.y: avoid SEGV at OP_ASIGN to pseudo variable.
-
-Thu Feb 14 14:13:16 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (Init_Struct): should undefine "allocate" for Struct
- class (it's redefined in the subclasses).
-
-Wed Feb 13 17:58:12 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (stmt): local variable declaration order was changed
- since 1.6
-
- * parse.y (arg): ditto.
-
- * pack.c (pack_pack): add templates 'q' and 'Q'.
-
- * pack.c (pack_unpack): ditto.
-
- * bignum.c (rb_quad_pack): new utility function.
-
- * bignum.c (rb_quad_unpack): ditto.
-
-Tue Feb 12 01:21:34 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (assignable): should emit CVASGN within the method
- body.
-
-Mon Feb 11 06:13:53 2002 Matt Armstrong <matt@lickey.com>
-
- * dir.c (dir_s_glob): should not warn even if no match found.
-
-Mon Feb 11 04:25:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): clean up class variable behavior.
-
- * eval.c (assign): ditto.
-
- * eval.c (is_defined): ditto.
-
- * variable.c (rb_mod_class_variables): need not to call rb_cvar_singleton().
-
- * variable.c (rb_cvar_singleton): removed.
-
-Mon Feb 11 00:10:41 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * regex.c (re_compile_fastmap): skip begpos.
-
-Sun Feb 10 16:52:53 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ruby.c (load_file): avoid SEGV on '#' only input.
-
-Fri Feb 8 23:07:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): singleton check should be moved from yycompile
- to here.
-
- * eval.c (is_defined): check should be added here too.
-
-Fri Feb 8 05:31:48 2002 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: HTTP.Proxy should use self for proxy-class's
- super class.
-
- * lib/net/http.rb: initialize HTTP.proxy_port by HTTP.port.
-
-Fri Feb 8 01:27:33 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yycompile): should inherit "in_single" if eval happened
- in a singleton method.
-
- * eval.c (rb_eval): class variables from singleton methods defined
- within singleton class statement should work like ones defined
- by singleton def statements.
-
-Thu Feb 7 13:44:08 2002 akira yamada <akira@arika.org>
-
- * uri/common.rb (URI::join): new method.
-
- * uri/generic.rb (Generic#merge): URI.parse("http://a/")+"b" should
- return "http://a/b" but it returned "http://a//b".
-
- * uri/generic.rb (Generic#check_path): corrected error message,
- @path -> v
-
-Thu Feb 7 00:18:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_write): flag when buffered write is done.
-
- * io.c (fptr_finalize): do not raise error on EBADF if write
- buffer is empty.
-
-Wed Feb 6 17:18:54 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * configure.in: keep old config.h unless changed.
-
-Wed Feb 6 13:28:53 2002 Amos Gouaux <amos+ruby@utdallas.edu>
-
- * lib/net/imap.rb: OpenSSL support.
-
- * lib/net/imap.rb (setquota): unset quota if the second argument
- is nil.
-
-Wed Feb 6 13:05:11 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_readlines): avoid calling GetOpenFile() repeatedly.
-
- * io.c (rb_io_each_line): ditto.
-
- * io.c (argf_getline): ditto.
-
- * process.c: should include <time.h> to get proper CLK_TCK.
-
-Wed Feb 6 02:10:30 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * io.c (fptr_finalize): ignore EBADF when f and f2 use same
- descriptor.
-
-Tue Feb 5 16:17:20 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (fptr_finalize): should raise error when fclose fails.
-
- * eval.c (method_inspect): proper output format to distinguish
- methods and singleton methods.
-
-Mon Feb 4 22:44:58 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * file.c (rb_file_s_expand_path): should terminate.
-
-Mon Feb 4 15:38:29 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_class_real): should not follow ICLASS link
-
- * variable.c (classname): should follow ICLASS link explicitly.
-
- * eval.c (rb_call): ditto.
-
-Fri Feb 1 19:10:04 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * intern.h: prototypes for new functions; rb_cstr_to_inum(),
- rb_str_to_inum(), rb_cstr_to_dbl(), rb_str_to_dbl()
-
- * bignum.c (rb_cstr_to_inum): changed from rb_cstr2inum(), and
- added argument badcheck to be consistent with parser. [new]
-
- * bignum.c (rb_str_to_inum): ditto.
-
- * bignum.c (rb_cstr2inum): wrapper of rb_cstr_to_inum() now.
-
- * bignum.c (rb_str2inum): ditto.
-
- * object.c (rb_cstr_to_dbl): float number parser. [new]
-
- * object.c (rb_str_to_dbl): ditto.
-
- * object.c (rb_Float): use rb_cstr_to_dbl() for strict check.
-
- * object.c (rb_Integer): use rb_str_to_inum() for strict check.
-
- * string.c (rb_str_to_f): use rb_str_to_dbl() with less check.
-
- * string.c (rb_str_to_i): use rb_str_to_inum() with less check.
-
- * string.c (rb_str_hex): ditto.
-
- * string.c (rb_str_oct): ditto.
-
- * sprintf.c (rb_f_sprintf): ditto.
-
- * time.c (obj2long): ditto.
-
- * parse.y (yylex): use rb_cstr_to_inum() for strict check.
-
-Fri Feb 1 17:46:39 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * regex.c (mbc_startpos): become macro.
-
- * regex.c (euc_startpos): added for improvement.
-
- * regex.c (sjis_startpos): ditto.
-
- * regex.c (utf8_startpos): ditto.
-
-Fri Feb 1 00:03:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_stat_inspect): print dev, rdev in hexadecimal.
-
-Thu Jan 31 20:45:33 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * lib/mkmf.rb (dir_config): prior --with flag.
-
- * lib/mkmf.rb (arg_config): avoid special variables for
- font-lock-mode.
-
-Thu Jan 31 13:22:36 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb (File::Stat#pretty_print): print rdev_major and rdev_minor.
-
-Wed Jan 30 15:58:04 2002 K.Kosako <kosako@sofnec.co.jp>
-
- * regex.c (re_adjust_startpos): fix for SJIS and UTF-8.
-
- * regex.c (mbc_startpos): ditto.
-
-Wed Jan 30 13:37:05 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_search): should set regs.allocated.
-
-Wed Jan 30 02:25:38 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * regex.c (re_adjust_startpos): search start of multibyte
- backward.
-
- * regex.c (mbc_startpos): ditto.
-
-Tue Jan 29 17:59:20 2002 Tanaka Akira <akr@m17n.org>
-
- * file.c: `major' and `minor' macro needs sys/mkdev.h on SunOS 5.x.
-
- * configure.in: add check for `sys/mkdev.h'.
-
- * lib/pp.rb: don't print a mode File::Stat as decimal number.
-
-Mon Jan 28 19:16:58 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * array.c (rb_ary_fill): shouldn't yield unless block given.
-
-Mon Jan 28 18:33:18 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * parse.y (yylex): strict check for numbers.
-
-Mon Jan 28 18:01:01 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_stat_rdev_major): added. [new]
-
- * file.c (rb_stat_rdev_minor): added. [new]
-
- * file.c (rb_stat_inspect): print mode in octal.
-
-Mon Jan 28 13:29:41 2002 K.Kosako <kosako@sofnec.co.jp>
-
- * eval.c (is_defined): defined?(Foo::Baz) should check constants
- only, no methods.
-
- * eval.c (is_defined): should not dump core on defined?(a::b)
- where a is not a class nor a module.
-
-Mon Jan 28 02:50:12 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (Init_Object): remove dup and clone from TrueClass,
- FalseClass, and NilClass.
-
- * array.c (rb_ary_fill): Array#fill takes block to get the value to
- fill.
-
-Sat Jan 26 20:05:18 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_to_i): to_i(0) auto-detects base radix.
-
- * array.c (rb_ary_initialize): fill by the block evaluation value
- if block is given.
-
-Fri Jan 25 17:48:43 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (solaris): add '-shared' only for GNU ld.
-
-Fri Jan 25 17:16:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_include_module): detect cyclic module inclusion.
-
-Fri Jan 25 02:17:56 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_cleanup): need not to free thread stacks at
- process termination.
-
- * array.c (rb_ary_fetch): use the block to get the default value
- if the block is given.
-
- * eval.c (rb_thread_schedule): should check time only if BOTH
- WAIT_SELECT and WAIT_TIME.
-
-Thu Jan 24 11:49:05 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (umethod_bind): should update rklass field.
-
- * hash.c (rb_hash_update): if a block is given, yields [key,
- value1, value2] to the block to resolve conflict.
-
-Thu Jan 24 05:42:01 2002 Koji Arai <jca02266@nifty.ne.jp>
-
- * string.c (rb_str_split_m): no need to consider KANJI
- characters, if the length of separator is 1 (byte).
-
-Wed Jan 23 16:07:31 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (Init_Array): remove Array#filter.
-
-Wed Jan 23 13:27:44 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_yield_0): restore source file/line after yield.
-
-Wed Jan 23 02:00:14 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_mod_initialize): should accept zero argument.
-
- * object.c (rb_mod_cmp): should raise ArgumentError if
- inheritance/inclusion relation between two classes/modules is
- not defined. [new]
-
-Tue Jan 22 17:45:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_fsync): new method. [new]
-
-Mon Jan 21 22:57:18 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * signal.c (ruby_signal): must define sighandler_t for every
- occasion.
-
-Mon Jan 21 08:25:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ruby_stop): should not trace error handler.
-
- * signal.c (install_sighandler): do not install sighandler unless
- the old value is SIG_DFL.
-
- * io.c (io_write): should not raise exception on O_NONBLOCK io.
-
- * dir.c (dir_set_pos): seek should return dir, pos= should not.
-
-Sat Jan 19 02:31:45 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): need not to clear method cache for NODE_CLASS,
- NODE_SCLASS.
-
- * gc.c (obj_free): need not to clear method cache on class/module
- finalization.
-
-Fri Jan 18 23:38:03 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_fetch): index out of range raises exception
- unless optional second argument is specified.
-
-Fri Jan 18 17:32:09 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_s_new): block check moved from initialize to this
- method.
-
- * io.c (rb_io_s_open): open should call initialize too. IO#for_fd
- also calls initialize. [new]
-
-Fri Jan 18 10:26:33 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (rb_sys_fail): replace INT2FIX() by INT2NUM() since
- errno value may not fit in Fixnum size on Hurd.
-
- * error.c (set_syserr): ditto.
-
-Fri Jan 18 10:12:00 2002 Usaku Nakamura <usa@ruby-lang.org>
-
- * ext/socket/socket.c (tcp_svr_s_open): fix typo.
-
-Fri Jan 18 02:27:48 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (dir_s_glob): returns nil if block given.
-
- * io.c (rb_io_each_byte): should return self.
-
- * io.c (rb_io_close_m): close check added.
-
- * dir.c (dir_seek): should return pos.
-
-Fri Jan 18 01:21:53 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (fixpos): orig may be (NODE*)1, which should not be
- dereferenced.
-
-Thu Jan 17 16:21:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (block_pass): allow "retry" from within argument passed
- block. [new]
-
- * eval.c (localjump_error): should preserve exit status in the
- exception object. [new]
-
- * eval.c (proc_invoke): should raise exception for "break" if it's
- yielding, not calling. [new]
-
- * eval.c (block_pass): should NOT raise exception for "break". [new]
-
- * eval.c (block_pass): should allow block argument relay even in
- the tainted mode.
-
-Thu Jan 17 09:43:05 2002 TAKAHASHI Kaoru <kaoru@kaisei.org>
-
- * misc/ruby-mode.el (ruby-add-log-current-method): New function
- for `add-log-current-defun-function'.
-
-Thu Jan 17 04:51:48 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c: support subclassing by proper "initialize"
- calling convention. [new]
-
-Wed Jan 16 18:25:08 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * st.c: primes should be primes.
-
-Wed Jan 16 12:29:14 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/timeout.rb (timeout): new optional argument to specify an
- exception class.
-
- * lib/resolv.rb: use Resolv::ResolvTimeout for internal timeout to
- avoid problem with timeout of application.
-
-Wed Jan 16 11:12:30 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * object.c (rb_Float): remove underscores between digits.
-
- * bignum.c (rb_cstr2inum): reject prefix followed by spaces only.
-
- * class.c (rb_class_inherited): should use Object when no super
- class.
-
-Tue Jan 15 01:11:44 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (is_defined): method defined? check should honor
- protected too.
-
-Mon Jan 14 13:06:02 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (block_pass): should not pass tainted block, if $SAFE > 0.
-
-Sun Jan 13 09:31:41 2002 Koji Arai <jca02266@nifty.ne.jp>
-
- * variable.c (rb_mod_remove_cvar): should pass the char*.
-
-Fri Jan 11 05:06:25 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * class.c (rb_make_metaclass): [new]
-
- * class.c (rb_define_class_id): use rb_make_metaclass(), don't
- call Class#inherited hook.
-
- * class.c (rb_class_inherited): [new]
-
- * class.c (rb_define_class): call Class#inherited hook here.
-
- * class.c (rb_define_class_under): ditto after class path is set.
-
- * class.c (rb_singleton_class): use rb_make_metaclass().
-
- * eval.c (rb_eval): same as rb_define_class_under().
-
- * intern.h: prototypes of rb_make_metaclass() and
- rb_class_inherited().
-
- * object.c (rb_class_s_new): use rb_make_metaclass() and
- rb_class_inherited().
-
- * object.c (Init_Object): use rb_make_metaclass().
-
- * struct.c (make_struct): use rb_class_inherited().
-
-Thu Jan 10 19:15:15 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_add_method): should clear cache by id always.
-
- * eval.c (rb_disable_super): no longer need to clear cache before
- rb_add_method().
-
- * eval.c (rb_export_method): ditto.
-
- * eval.c (rb_attr): ditto.
-
- * eval.c (rb_undef): ditto.
-
- * eval.c (rb_eval): ditto.
-
- * eval.c (rb_mod_modfunc): ditto.
-
- * eval.c (rb_mod_define_method): ditto.
-
-Thu Jan 10 11:42:47 2002 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/resource.rb: Modify copyright in resource script.
-
-Thu Jan 10 07:15:44 2002 takuma ozawa <metal@mine.ne.jp>
-
- * re.c (match_select): should propagate taintness.
-
-Thu Jan 10 00:54:57 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_set_default): Hash#default= should return the
- new value.
-
-Wed Jan 9 20:21:09 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * misc/ruby-mode.el (ruby-calculate-indent): indentation after
- comment at beginning of buffer failed.
-
- * misc/ruby-mode.el (font-lock-defaults): unless XEmacs, set
- font-lock variables in ruby-mode-hook.
-
-Tue Jan 8 15:56:20 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_to_i): accepts optional base argument. [new]
-
- * numeric.c (rb_fix2str): should not handle negative fixnum values
- int32 via calling sprintf() directly.
-
-Tue Jan 8 15:54:02 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_add_method): clear replaced method from the cache.
-
-Mon Jan 7 12:38:47 2002 Tanaka Akira <akr@m17n.org>
-
- * lib/time.rb (Time#xmlschema): new optional argument
- fractional_seconds to specify a number of digits of
- fractional part of the time.
-
-Sat Jan 5 13:18:11 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * range.c (range_member): beginning check was
- wrong. [ruby-talk:30252]
-
-Sat Jan 5 03:07:34 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_new2): NULL pointer check added.
-
-Sat Jan 5 00:19:12 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * parse.y (yycompile): strdup()'ed twice.
-
-Fri Jan 4 18:29:10 2002 Michal Rokos <m.rokos@sh.cvut.cz>
-
- * class.c (rb_define_module_under): should locate predefined
- module using rb_const_defined_at().
-
-Fri Jan 4 17:23:49 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * misc/ruby-mode.el (ruby-forward-string): forward a string. [new]
-
- * misc/ruby-mode.el (ruby-parse-region): handle nested parentheses
- in a string and terminators in #{}.
-
- * misc/ruby-mode.el (ruby-calculate-indent): ditto.
-
-Wed Jan 2 23:34:25 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): add -I. to CPPFLAGS.
-
- * lib/mkmf.rb (create_makefile): srcdir support(.def and depend file).
-
-Wed Jan 2 11:51:56 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (rb_f_system): abandon vfork.
-
- * io.c (pipe_open): ditto.
-
-Tue Jan 1 02:16:48 2002 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/curses/extconf.rb: add dir_config.
-
- * Makefile.in (fake.rb): set RUBY_VERSION.
-
-Mon Dec 31 14:20:46 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * parse.y (yycompile): always store copy of filename.
-
- * parse.y (rb_compile_file): no longer need to strdup() here.
-
-Mon Dec 31 05:26:40 2001 Ferris McCormick <fmccor@inforead.com>
-
- * defines.h: sparc linux needs different FLUSH_REGISTER_WINDOWS
-
-Mon Dec 31 04:27:28 2001 Minero Aoki <aamine@mx.edit.ne.jp>
-
- * lib/net/protocol.rb: Protocol#start returns the return value of
- block.
-
- * lib/net/protocol.rb: set timeout limit by default.
-
- * lib/net/protocol.rb: new methods WriteAdapter#write, puts,
- print, printf.
-
- * lib/net/http.rb: rename HTTP#get2 to request_get, post2 to
- request_post ...
-
- * lib/net/smtp.rb: should not resolve HELO domain automatically.
-
-Sun Dec 30 00:59:16 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb.in, lib/mkmf.rb (have_library): accept -lm
- unconditionally on mswin32/mingw32.
-
-Sat Dec 29 01:55:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_search): abandon stclass optimization.
-
-Fri Dec 28 14:39:05 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * array.c (rb_cmpint): fixed typo.
-
-Thu Dec 27 18:43:04 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * bignum.c (rb_cstr2inum): deny "0_".
-
-Thu Dec 27 01:54:02 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * bignum.c (rb_cstr2inum): allow "0\n" and so on.
-
-Wed Dec 26 19:24:21 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (rb_invalid_str): utility function to show inspect()'ed
- string.
-
- * bignum.c (rb_cstr2inum): prints invalid strings in inspect()'ed
- format.
-
- * object.c (rb_Float): ditto.
-
-Wed Dec 26 02:41:29 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_convert_type): no longer use rb_rescue().
-
-Tue Dec 25 18:32:16 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * re.c (rb_reg_search): initialize taint status of match object.
-
-Tue Dec 25 02:37:49 2001 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb, lib/prettyprint.rb: new files.
-
-Tue Dec 25 02:11:17 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_convert_type): check method response check before
- invoking rb_rescue().
-
- * object.c (rb_check_convert_type): ditto.
-
-Mon Dec 24 02:37:40 2001 Le Wang <lewang@bigfoot.com>
-
- * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords):
- fix font-lock problem [ruby-talk:29296].
-
-Sat Dec 22 22:52:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_timeval): wrong cast to time_t.
-
- * time.c (time_plus): ditto.
-
-Fri Dec 21 20:33:34 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * parse.y (str_extend): make up "#$;" handling.
-
-Fri Dec 21 16:18:17 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * dln.h, ruby.h, util.h: enable prototypes in C++.
-
-Fri Dec 21 15:12:41 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_plus): result should not be negative unless
- NEGATIVE_TIME_T is defined.
-
- * time.c (time_new_internal): should check tv_sec overflow too.
-
- * time.c (time_timeval): should check time_t range when time is
- initialized from float.
-
- * time.c (time_plus): uses modf(3).
-
-Fri Dec 21 03:15:52 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_mod_define_method): must not convert Method to Proc.
-
-Fri Dec 21 01:17:57 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * lib/mkmf.rb (with_destdir): new.
-
- * lib/mkmf.rb: prefix target directories with $(DESTDIR) all.
-
- * lib/mkmf.rb: no need to mkdir $(libdir)
-
-Thu Dec 20 14:08:20 2001 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb: rename Net::Socket to Net::BufferedSocket
-
-Thu Dec 20 13:51:52 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * variable.c (rb_cvar_set): add frozen class/module check.
-
- * variable.c (rb_cvar_declare): add frozen class/module check.
-
-Thu Dec 20 01:01:50 2001 takuma ozawa <metal@mine.ne.jp>
-
- * re.c (match_to_a): should propagate taint.
-
- * re.c (rb_reg_s_quote): ditto.
-
-Wed Dec 19 16:58:29 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/readline/readline.c: new methods
- Readline::basic_word_break_characters,
- Readline::basic_word_break_characters=,
- Readline::completer_word_break_characters,
- Readline::completer_word_break_characters=,
- Readline::basic_quote_characters,
- Readline::basic_quote_characters=,
- Readline::completer_quote_characters,
- Readline::completer_quote_characters=,
- Readline::filename_quote_characters,
- Readline::filename_quote_characters=.
-
-Wed Dec 19 14:05:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_mod_define_method): define_method should follow
- default method visibility.
-
- * eval.c (rb_attr): should warn if the default method visibility
- is "module_function" (can be error).
-
- * eval.c (rb_mod_define_method): should define class/module method
- also if the visibility is "module_function".
-
- * eval.c (rb_mod_define_method): should call hook method
- "method_added", and "singleton_method_added".
-
-Wed Dec 19 11:42:13 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * string.c: use RESIZE_CAPA for capacity change.
-
-Wed Dec 19 03:08:40 2001 Tanaka Akira <akr@m17n.org>
-
- * lib/time.rb: date.rb is not required anymore.
-
- * lib/resolv.rb: fix document. refine IPv6 regex.
-
-Tue Dec 18 23:24:53 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (Init_socket): add listen method to
- TCPServer and UNIXServer.
-
-Tue Dec 18 17:54:53 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * sample/test.rb: Hash#indexes -> Hash#select.
-
-Tue Dec 18 01:02:13 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_schedule): should not select a thread which is
- not yet initialized.
-
-Mon Dec 17 18:53:49 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * string.c (rb_str_replace): swap arguments of OBJ_INFECT.
-
-Mon Dec 17 16:52:20 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * intern.h: add prototypes.
- rb_gc_enable(), rb_gc_disable(), rb_gc_start(), rb_str_new5()
- rb_str_buf_append(), rb_str_buf_cat(), rb_str_buf_cat2(),
- rb_str_dup_frozen()
-
- * ruby.h: added declaration.
- rb_defout, rb_stdin, rb_stdout, rb_stderr, ruby_errinfo
-
- * rubyio.h: changed double include guard macro to RUBYIO_H.
-
- * array.c (inspect_call): make static.
-
- * eval.c (dvar_asgn): ditto.
-
- * io.c (rb_io_close_read): ditto.
-
- * lex.c (rb_reserved_word): ditto.
-
- * ruby.c: (req_list_head, req_list_last): ditto.
-
- * ruby.c (require_libraries): ditto.
-
-Mon Dec 17 15:41:24 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_plus): wrong boundary check.
-
- * time.c (time_minus): ditto.
-
-Mon Dec 17 15:19:32 2001 Tanaka Akira <akr@m17n.org>
-
- * time.c: new method `gmtoff', `gmt_offset' and `utc_offset'.
- (time_utc_offset): new function.
- (Init_Time): bind above methods to `time_utc_offset'.
-
- * time.c: 64bit time_t support.
- (time_s_at): use NUM2LONG instead of NUM2INT for tv_sec.
- (time_arg): initialize tm_isdst correctly.
- use long to initialize tm_year.
- (search_time_t): renamed from `make_time_t'.
- (make_time_t): call `timegm' and `mktime' instead of `search_time_t'
- if available.
- (time_to_i): use LONG2NUM instead of INT2NUM.
- (time_localtime): check localtime failure.
- (time_gmtime): check gmtime failure.
- (time_year): use LONG2NUM instead of INT2FIX.
- (time_to_a): use long for tm_year.
- (time_dump): check tm_year which is not representable with 17bit.
- (time_load): initialize tm_isdst.
-
- * configure.in: check existence of `mktime' and `timegm'.
- check existence of tm_gmtoff field of struct tm.
- fix negative time_t for 64bit time_t.
-
- * missing/strftime.c: fix overflow by tm_year + 1900.
-
- * lib/time.rb: use Time#utc_offset.
-
-Mon Dec 17 00:02:04 2001 Guy Decoux <ts@moulon.inra.fr>
-
- * variable.c (find_class_path): should initialize iv_tbl if it's
- NULL.
-
-Fri Dec 14 04:23:36 2001 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb: new method Net::POP3.APOP
-
- * lib/net/http.rb: set default Content-Type to
- x-www-form-urlencoded (causes warning)
-
- * lib/net/protocol.rb: remove Net::NetPrivate module.
-
- * lib/net/smtp.rb: ditto.
-
- * lib/net/pop.rb: ditto.
-
- * lib/net/http.rb: ditto.
-
-Fri Dec 14 00:16:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_define_class): should return the existing class if
- the class is already defined and its superclass is identical to
- the specified superclass.
-
- * class.c (rb_define_class_under): ditto.
-
- * class.c (rb_define_module): should return the existing module if
- the module is already defined.
-
-Thu Dec 13 09:52:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_new_internal): avoid loop to calculate negative
- div, mod.
-
- * time.c (time_cmp): should handle Bignums.
-
-Tue Dec 11 17:39:16 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * array.c (rb_ary_pop): should ELTS_SHARED flag check before
- REALLOC.
-
-Tue Dec 11 12:45:28 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_match_m): should convert an argument into
- regexp if it's a string.
-
-Tue Dec 11 03:40:23 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_select): Array#select(n,m,...) now works like
- Array#indexes(n,m,..). [new, experimental]
-
- * hash.c (rb_hash_select): ditto.
-
- * hash.c (env_select): ditto.
-
- * re.c (match_select): ditto.
-
- * struct.c (rb_struct_select): ditto.
-
-Tue Dec 11 03:17:19 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * object.c (rb_class_real): follow included modules.
-
-Mon Dec 10 23:37:51 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * util.h: change prototype of ruby_qsort() to accord with its
- definition.
-
-Mon Dec 10 20:30:01 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * gc.c (STR_ASSOC): use FL_USER3 instead of FL_USER2.
-
-Mon Dec 10 17:40:02 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * parse.y (str_extend): make up pushback call.
-
-Mon Dec 10 02:09:28 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_modify): should copy the internal buffer if the
- modifying buffer is shared.
-
- * array.c (ary_make_shared): make an internal buffer of an array
- to be shared.
-
- * array.c (rb_ary_shift): avoid sliding an internal buffer by
- using shared buffer.
-
- * array.c (rb_ary_subseq): avoid copying the buffer.
-
-Mon Dec 10 01:06:56 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (gettable): should freeze __FILE__ string.
-
-Sun Dec 9 18:06:26 2001 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb: calls on_connect before conn_command
-
-Sat Dec 8 23:27:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_puts): old behavior restored. rationale: a) if you
- want to call to_s for arrays, you can just call print a, "\n".
- b) to_s wastes memory if array (and sum of its contents) is
- huge. c) now any object that has to_ary is treated as an array,
- using rb_check_convert_type().
-
-Sat Dec 8 22:40:38 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_initialize): now accepts a block to calculate
- the default value. [new]
-
- * hash.c (rb_hash_aref): call "default" method to get the value
- corresponding to the non existing key.
-
- * hash.c (rb_hash_default): get the default value based on the
- block given to 'new'. Now it takes an optional "key" argument.
- "default" became the method to get the value for non existing
- key. Users may override "default" method to change the hash
- behavior.
-
- * hash.c (rb_hash_set_default): clear the flag if a block is given
- to 'new'
-
-Sat Dec 8 02:29:54 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (Init_Object): undef Data.allocate, left Data.new.
-
-Fri Dec 7 19:12:14 2001 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: SMTP.new requires at least one arg.
-
- * lib/net/pop.rb: POP.new requires at least one arg.
-
- * lib/net/pop.rb: uses "raise *Error.new" instead of simple raise.
-
- * lib/net/http.rb: HTTP.new requires at least one arg.
-
- * lib/net/http.rb: changes implicit start algorithm.
-
-Fri Dec 7 15:49:39 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * ext/extmk.rb.in: ignore adding -Wl,-R to DLDFLAGS when the directory
- is $topdir.
-
-Fri Dec 7 13:58:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/curses/curses.c (window_scrollok): use RTEST().
-
- * ext/curses/curses.c (window_idlok): ditto.
-
- * ext/curses/curses.c (window_keypad): ditto.
-
- * ext/curses/curses.c (window_idlok): idlok() may return void on
- some platforms; so don't use return value.
-
- * ext/curses/curses.c (window_scrollok): ditto for consistency.
-
- * ext/curses/curses.c: replace FIX2INT() by typechecking NUM2INT().
-
-Fri Dec 7 09:51:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (str_extend): should not process immature #$x and
- #@x interpolation, e.g #@#@ etc.
-
-Fri Dec 7 03:21:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_sort_by): sort_by does not have to be stable always.
-
- * enum.c (enum_sort_by): call qsort directly to gain performance.
-
-Thu Dec 6 18:52:28 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * ext/extmk.rb.in: add -Wl,-R flags to DLDFLAGS on netbsdelf.
-
- * lib/mkmf.rb: ditto.
-
-Thu Dec 6 09:15:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * util.c (ruby_qsort): ruby_qsort(qs6) is now native thread safe.
-
- * error.c (rb_sys_fail): it must be a bug if it's called when
- errno == 0.
-
-Wed Dec 5 23:36:56 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (WC2MBC1ST): should not pass through > 0x80 number in UTF-8.
-
-Wed Dec 5 20:05:18 2001 Florian Frank <flori@ping.de>
-
- * ext/socket/socket.c (bsock_send): should raise EWOULDBLOCK
- exception.
-
- * ext/socket/socket.c (s_recvfrom): ditto.
-
- * ext/socket/socket.c (s_accept): ditto.
-
- * ext/socket/socket.c (udp_send): ditto.
-
-Tue Dec 4 17:43:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h (DUPSETUP): new SETUP macro for duplication.
-
- * time.c (time_dup): implement in Time class using DUPSETUP.
-
- * time.c (time_getlocaltime): new method; probably requires
- better name than getlocaltime. [new,experimental]
-
- * time.c (time_getgmtime): ditto.
-
- * array.c (rb_ary_dup): uses DUPSETUP.
-
- * string.c (rb_str_dup): uses DUPSETUP. now properly copies
- instance variables too.
-
-Tue Dec 4 03:49:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_fread): EAGAIN/EWOULDBLOCK should not terminate and
- throw away the input.
-
- * time.c (time_new_internal): underflow adjustment must not use
- negative div/mod.
-
- * time.c (time_cmp): should consider tv_usec on non Fixnum number
- comparison.
-Sun Dec 9 23:00:54 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
- * matrix.rb: Vector#* bug. reported from Massimiliano Mirra
- <info@chromatic-harp.com>.
-
-Sun Dec 9 22:15:59 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * enum.c (enum_sort_by): should replace with last elements.
-
-Mon Dec 3 16:06:57 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/socket/extconf.rb: remove -L/usr/local/lib.
-
- * configure.in: add -Wl,-export-dynamic on NetBSD.
-
-Mon Dec 3 16:04:16 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * configure.in: not use X11BASE, since it's not always set.
-
-Mon Dec 3 13:53:49 2001 Tanaka Akira <akr@m17n.org>
-
- * time.c (rb_strftime): buffer length condition was wrong.
-
- * time.c (time_strftime): should backup buf to the original
- buffer.
-
-Mon Dec 3 09:59:08 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_plus): must detect result overflow.
-
- * time.c (time_minus): ditto.
-
- * time.c (time_new_internal): round usec overflow and underflow
- here.
-
- * time.c (time_plus): move operand overflow/underflow check to
- time_new_internal().
-
- * time.c (time_minus): ditto.
-
- * time.c (time_cmp): should consider tv_usec too.
-
-Mon Dec 3 03:32:22 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * configure.in: apply patch from NetBSD's pkgsrc (patch-aa).
-
-Sun Dec 2 22:01:52 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: use GCC, not without_gcc. remove without_gcc.
-
- * ext/curses/extconf.rb: check for curses.h.
-
- * ext/dbm/extconf.rb: check if $CFLAGS includes DBM_HDR.
-
-Sat Dec 1 12:13:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_gmtime): time_modify() should be called even if tm
- struct is not calculated yet.
-
-Fri Nov 30 17:02:55 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: set target_cpu to i386 on cygwin and mingw32.
-
- * configure.in: default --enable-shared to yes on cygwin and mingw32.
-
-Fri Nov 30 00:25:28 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * README.EXT: Appendix B is duplicated.
-
- * README.EXT.ja: ditto.
-
-Thu Nov 29 00:28:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_equal): object with to_str must be treated as a
- string.
-
-Wed Nov 28 18:46:28 2001 Ville Mattila <mulperi@iki.fi>
-
- * eval.c (rb_thread_select): should subtract timeofday() from
- limit, not reverse.
-
-Wed Nov 28 16:03:28 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * util.c (scan_hex): x is not a hexadecimal digit.
-
-Wed Nov 28 13:38:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_schedule): should treat the case that
- select(2) returns 0, if a thread is under both WAIT_SELECT and
- WAIT_TIME. Jakub Travnik <J.Travnik@sh.cvut.cz> actually fixed
- this bug.
-
-Tue Nov 27 02:15:25 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_float): must distinguish -0.0 from 0.0.
-
-Mon Nov 26 20:57:24 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/Setup*, ext/syslog/*: import the "syslog" module from the
- rough ruby project.
-
-Mon Nov 26 16:14:42 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * gc.c (gc_mark_all): tweak mark order for little bit better scan.
-
- * gc.c (rb_gc_mark): ditto.
-
- * gc.c (rb_gc): ditto.
-
-Mon Nov 26 16:54:59 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/win32.c (mypopen): fixed that mypclose() didn't really close
- pipe.
-
- * win32/win32.c (CreateChild): set STARTF_USESTDHANDLES flag only
- when some handles are passed.
-
-Mon Nov 26 16:31:28 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (sort_by_i): slight performance boost.
-
-Sun Nov 25 21:02:18 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * parse.y (str_extend): change types of second and third arguments
- from char to int.
-
-Thu Nov 22 20:15:28 2001 TAMURA Takashi <sheepman@tcn.zaq.ne.jp>
-
- * gc.c (gc_mark_rest): should call gc_mark_children(), not gc_mark().
-
- * gc.c (rb_gc_mark): may cause infinite loop.
-
-Thu Nov 22 00:28:13 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (str_extend): should check nesting parentheses in #{}.
-
-Wed Nov 21 12:22:52 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/cgi.rb: CGI#header: do not set Apache.request.status for
- Location: if Apache.request.status is already set.
-
-Wed Nov 21 02:24:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (pst_wstopsig): returns nil unless WIFSTOPPED() is
- non-zero.
-
- * process.c (pst_wtermsig): returns nil unless WIFSIGNALED() is
- non-zero.
-
- * process.c (pst_wexitstatus): returns nil unless WIFEXITED() is
- non-zero.
-
-Wed Nov 21 00:17:54 2001 Ville Mattila <mulperi@iki.fi>
-
- * eval.c (rb_thread_select): tv_sec and tv_usec should not be
- negative.
-
- * signal.c (posix_signal): do not set SA_RESTART for SIGVTALRM.
-
-Tue Nov 20 21:09:22 2001 Guy Decoux <ts@moulon.inra.fr>
-
- * parse.y (call_args2): block_arg may follow the first argument in
- call_args2.
-
-Tue Nov 20 02:01:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (stack_check): should avoid stack length check during
- raising SystemStackError exception.
-
-Tue Nov 20 01:07:13 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (str_extend): should not terminate string interpolation
- with newlines in here-docs and newline terminated strings.
-
-Mon Nov 19 17:58:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_mod_modfunc): should follow NODE_ZSUPER link; based
- on Guy Decoux's patch in [ruby-talk:25478].
-
-Mon Nov 19 16:09:33 2001 Tanaka Akira <akr@m17n.org>
-
- * string.c (rb_str_succ): there was buffer overrun.
-
-Mon Nov 19 14:14:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (str_extend): term can be any character.
-
-Mon Nov 19 04:58:42 2001 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb (header): support for Apache. thanks to
- Shugo Maeda <shugo@ruby-lang.org>.
-
-Sun Nov 18 19:37:55 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * parse.y: needless conditionals.
-
- * parse.y (parse_regx): parse error at unterminated regex /#{.
- (ruby-bugs-ja:PR#142)
-
-Sat Nov 17 12:37:39 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_unpack): should give length to utf8_to_uv().
-
- * pack.c (utf8_to_uv): add length check.
-
-Sat Nov 17 01:41:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * massages: replace "wrong #" by "wrong number".
-
- * marshal.c (w_float): output Infinity and NaN explicitly.
-
- * marshal.c (r_object): support new explicit float format.
-
- * eval.c (rb_thread_wait_for): select may cause ERESTART on
- Solaris.
-
- * eval.c (rb_thread_select): ditto.
-
-Thu Nov 15 15:29:39 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * array.c (rb_ary_join): non-nil separator must be converted to
- String. and separators' total length was wrong.
-
-Thu Nov 15 03:37:17 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * hash.c (ruby_setenv): remove USE_WIN32_RTL_ENV block since it's
- obsoleted.
-
- * win32/win32.c, win32/win32.h: sort out #if 0 - #endif or others.
-
-Thu Nov 15 00:07:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_to_s): if rb_output_fs is nil, insert newlines
- between array elements (use rb_default_rs as newline literal)
- [experimental].
-
-Wed Nov 14 15:16:23 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * gc.c (init_mark_stack): no need to clear mark_stack.
-
- * gc.c (gc_mark_all): need to handle finalizer mark.
-
- * gc.c (gc_mark_rest): use MEMCPY instead of memcpy.
-
- * gc.c (rb_gc_mark): earlier const check to avoid pusing special
- constants into mark stack.
-
-Wed Nov 14 01:12:07 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/win32.c (waitpid): fix wait count.
-
- * win32/win32.c (poll_child_status): rename from wait_child().
-
-Wed Nov 14 01:33:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_to_s): 'to_s' now takes optional argument to
- specify radix. [new]
-
- * bignum.c (rb_big_to_s): ditto. [new]
-
-Tue Nov 13 19:50:30 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: do not override CC if set.
-
-Tue Nov 13 16:49:16 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/win32.c (mypopen): return error status instead of calling
- rb_sys_fail().
-
- * win32/win32.c (do_spawn): ditto.
-
-Tue Nov 13 14:39:11 2001 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * signal.c (sighandle): should not re-register sighandler if
- POSIX_SIGNAL is defined.
-
-Tue Nov 13 12:55:59 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/win32.c (do_spawn): use CreateChild() instead of calling
- CreateProcess() directly. Original patches comes from Patrick Cheng.
-
- * win32/win32.c (mypopen): ditto.
-
- * win32/win32.c (mypclose): use rb_syswait() instead of waiting in this
- function.
-
- * win32/win32.c (waitpid): use wait_child() instead of _cwait().
-
- * win32/win32.c (CreateChild): added. [new]
-
- * win32/win32.c (wait_child): added. [new]
-
- * win32/win32.c (FindFirstChildSlot): added. [new]
-
- * win32/win32.c (FindChildSlot): added. [new]
-
- * win32/win32.c (FindPipedChildSlot): added. [new]
-
- * win32/win32.c (CloseChildHandle): added. [new]
-
- * win32/win32.c (FindFreeChildSlot): added. [new]
-
-Tue Nov 13 12:38:12 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * hash.c (envix): use GET_ENVIRON and FREE_ENVIRON to get environment
- variables list.
-
- * hash.c (env_keys): ditto.
-
- * hash.c (env_each_key): ditto.
-
- * hash.c (env_values): ditto.
-
- * hash.c (env_keys): ditto.
-
- * hash.c (env_each_value): ditto.
-
- * hash.c (env_each): ditto.
-
- * hash.c (env_inspect): ditto.
-
- * hash.c (env_to_a): ditto.
-
- * hash.c (env_size): ditto.
-
- * hash.c (env_empty_p): ditto.
-
- * hash.c (env_has_value): ditto.
-
- * hash.c (env_index): ditto.
-
- * hash.c (env_to_hash): ditto.
-
- * win32/win32.c (win32_getenv): use static buffer.
-
- * win32/win32.c, win32/win32.h (win32_get_environ): get environment
- variables list. [new]
-
- * win32/win32.c, win32/win32.h (win32_free_environ): free environment
- variables list. [new]
-
-Mon Nov 12 16:48:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (error_print): errat array may be empty.
-
-Mon Nov 12 01:30:37 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval_cmd): should not upgrade safe level unless
- explicitly specified by argument newly added.
-
- * signal.c (sig_trap): should not allow tainted trap closure.
-
- * variable.c (rb_f_trace_var): should not allow trace_var on safe
- level higher than 3.
-
- * variable.c (rb_f_trace_var): should not allow tainted trace
- closure.
-
-Sun Nov 11 00:12:23 2001 TAMURA Takashi <sheepman@tcn.zaq.ne.jp>
-
- * gc.c: do not use static stack until system stack overflows.
-
-Sat Nov 10 03:57:09 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (eval): should call Exception#exception instead of
- calling rb_exc_new3() directly.
-
- * error.c (exc_exception): set "mesg" directly to the clone. it
- might be better to set mesg via some method for flexibility.
-
-Sat Nov 10 00:14:24 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (cvar_override_check): should print original module
- name, if 'a' is T_ICLASS.
-
- * parse.y (yylex): float '1_.0' should not be allowed.
-
- * variable.c (var_getter): should care about var as Qfalse
- (ruby-bugs#PR199).
-
-Fri Nov 9 13:50:06 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/config.status.in: make CFLAGS same as Makefile's one.
-
-Thu Nov 8 20:20:37 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_trap_eval): avoid annoying warning with signal.
- [ruby-talk:23225]
-
- * eval.c (rb_call0): adjust caller source file/line while
- evaluating optional arguments.
-
-Thu Nov 8 18:41:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (cmpint): <=> or block for {min,max} may return bignum.
-
- * array.c (sort_1): use rb_compint.
-
- * array.c (sort_2): ditto.
-
- * enum.c (min_ii): ditto.
-
- * enum.c (min_ii): ditto.
-
- * enum.c (max_i): ditto.
-
- * enum.c (max_ii): ditto.
-
-Thu Nov 8 18:21:02 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (path_check_1): forgot to initialize 'p'.
-
-Thu Nov 8 14:52:15 2001 Tanaka Akira <akr@m17n.org>
-
- * mkconfig.rb: use String#dump to generate Ruby string literal.
-
-Thu Nov 8 15:46:54 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_eql): should override 'eql?'
-
- * array.c (rb_ary_hash): should override 'hash' too.
-
-Tue Nov 6 14:38:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (security): always give warning for insecure PATH.
-
- * dir.c (my_getcwd): do not rely on MAXPATHLEN.
-
- * file.c (rb_file_s_readlink): ditto.
-
- * file.c (path_check_1): ditto.
-
-Tue Nov 6 14:17:14 2001 Amos Gouaux <amos+ruby@utdallas.edu>
-
- * lib/net/imap.rb (getquota_response): use astring for mailbox
- names.
-
- * lib/net/imap.rb (getacl_response): ditto.
-
-Mon Nov 5 17:09:55 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): should not call rb_f_block_given_p().
-
-Sat Nov 3 23:33:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_chomp_bang): should terminate string by NUL.
-
-Sat Nov 3 22:28:51 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * matrix.rb (Matrix#column_vectors, Matrix#row_vectors): ditto bug.
- this bug report and fix by tsutomu@nucba.ac.jp.
-
- * forwardable.rb: change raise to Kernel::raise
-
-Sat Nov 3 10:11:57 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): better error message.
-
-Thu Nov 1 14:08:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_aref): idx may be a Bignum.
-
- * numeric.c (fix_aref): negative index must return zero.
-
-Thu Nov 1 13:23:50 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (gc_mark_children): should NOT treat last element of
- structs and arrays specially.
-
-Wed Oct 31 16:59:25 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (exec_under): should initialize ruby_frame->self;
-
-Wed Oct 31 15:09:28 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (POP_VARS): should not set DVAR_DONT_RECYCLE if _old
- ruby_vars is already force_recycled.
-
-Wed Oct 31 10:28:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_gc): handles mark stack overflow.
-
- * gc.c (PUSH_MARK): use static mark stack, no more recursion.
-
-Wed Oct 31 02:44:06 2001 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: CGI::Cookie::parse(): Ignore duplicate keys caused by
- Netscape bug.
-
-Tue Oct 30 18:21:51 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/mkexports.rb: follow the change of rb_io_puts().
-
-Tue Oct 30 14:04:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_chomp_bang): do smart chomp if $/ == '\n'. [new]
-
- * io.c (rb_io_puts): don't treat Array specially.
-
- * bignum.c (rb_big_cmp): should convert bignum to float.
-
- * eval.c (rb_f_eval): can't modify untainted binding.
-
-Mon Oct 29 16:08:30 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_compile_pattern): should preserve p0 value.
-
-Mon Oct 29 14:56:44 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * intern.h (rb_protect_inspect): follow the change of array.c.
-
- * eval.c (rb_exec_end_proc): follow the change of rb_protect().
-
- * eval.c (method_proc, umethod_proc, rb_catch): cast the first
- parameter of rb_iterate() to avoid VC++ warning.
-
- * range.c (range_step): ditto.
-
- * ext/sdbm/init.c (fsdbm_update, fsdbm_replace): ditto.
-
-Mon Oct 29 07:57:31 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (str_extend): should allow interpolation of $-x.
-
- * variable.c (rb_cvar_set): empty iv_tbl may cause infinite loop.
-
- * variable.c (rb_cvar_get): ditto.
-
- * variable.c (cvar_override_check): ditto.
-
-Sat Oct 27 23:01:19 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_eq): convert Bignum to Float, instead of
- reverse.
-
-Fri Oct 26 06:19:29 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_localtime): getting tm should not be prohibited for
- frozen time objects.
-
- * time.c (time_gmtime): ditto.
-
- * version.c (Init_version): freeze RUBY_VERSION,
- RUBY_RELEASE_DATE, and RUBY_PLATFORM.
-
- * file.c (Init_File): freeze File::SEPARATOR, ALT_SEPARATOR and
- PATH_SEPARATOR.
-
- * file.c (rb_stat_cmp): should check operand type before calling
- get_stat().
-
-Thu Oct 25 10:28:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval_cmd): should not invoke "call" with a block on
- any occasion.
-
-Wed Oct 24 03:25:31 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_aref): idx may be a Bignum.
-
-Tue Oct 23 01:21:19 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (proc_invoke): fix self switching in Proc#call
- (ruby-bugs-ja#PR108) and GC failure. use Qundef instead of 0
- to direct not switching self.
-
- * eval.c (call_trace_func): ditto.
-
- * eval.c (call_end_proc): ditto.
-
- * eval.c (proc_call): ditto.
-
- * eval.c (proc_yield): ditto.
-
-Tue Oct 23 01:15:43 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * variable.c (rb_global_entry): reconstruct global variable
- aliasing (sharing global_entry->var with other global_entry).
-
- * variable.c (undef_getter): ditto.
-
- * variable.c (undef_setter): ditto.
-
- * variable.c (val_setter): ditto.
-
- * variable.c (mark_global_entry): ditto.
-
- * variable.c (rb_define_hooked_variable): ditto.
-
- * variable.c (rb_f_trace_var): ditto.
-
- * variable.c (remove_trace): ditto.
-
- * variable.c (rb_f_untrace_var): ditto.
-
- * variable.c (rb_gvar_get): ditto.
-
- * variable.c (trace_en): ditto.
-
- * variable.c (rb_gvar_set): ditto.
-
- * variable.c (rb_gvar_defined): ditto.
-
- * variable.c (rb_alias_variable): ditto.
-
-Mon Oct 22 18:53:55 2001 Masahiro Tanaka <masa@stars.gsfc.nasa.gov>
-
- * numeric.c (num_remainder): a bug in Numeric#remainder.
-
-Mon Oct 22 15:21:55 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_exec_end_proc): END might be called within END
- block.
-
- * class.c (rb_mod_clone): should not copy class name, since clone
- should remain anonymous.
-
-Fri Oct 19 23:40:37 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * variable.c (remove_trace): should not access already freed area.
-
- * variable.c (rb_f_untrace_var): fix memory leak.
-
-Fri Oct 19 17:55:14 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * marshal.c (w_uclass): cloned class is not user
- class. (ruby-bugs-ja#PR103)
-
- * marshal.c (r_object): Struct subclass couldn't
- load. (ruby-bugs-ja#PR104)
-
-Wed Oct 17 14:12:50 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * variable.c (alias_fixup): added. ad hoc support for ordinary
- global variable aliasing. when original entry is set, make the
- alias to refer directly as possible.
-
- * variable.c (alias_getter, alias_setter): ditto.
-
- * variable.c (rb_alias_variable): ditto. and no need to mark alias
- variables.
-
- * variable.c (rb_gvar_defined): refer the original entry of an alias.
-
-Tue Oct 16 23:29:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): self in a block given to define_method now be
- switched to the receiver of the method.
-
- * eval.c (proc_invoke): added new parameter to allow self
- switching.
-
-Tue Oct 16 21:38:15 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_f_missing): check stack level with rb_stack_check().
-
- * eval.c (rb_call0): ditto.
-
- * eval.c, intern.h (rb_stack_check): added. [new]
-
-Tue Oct 16 13:18:47 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * object.c (rb_mod_initialize): optional block with
- Module.new. [new] (from 2001-10-10)
-
-Tue Oct 16 00:07:06 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * parse.y (yylex): disallow alpha-numeric and mbchar for
- terminator of %string.
-
-Mon Oct 15 18:00:05 2001 Pit Capitain <pit@capitain.de>
-
- * string.c (rb_str_index): wrong increment for non alphanumeric
- string.
-
-Mon Oct 15 05:23:02 2001 Koji Arai <JCA02266@nifty.ne.jp>
-
- * sprintf.c (rb_f_sprintf): support "%B".
-
-Wed Oct 10 03:11:47 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_stat_clone): should copy internal data too.
-
- * numeric.c (num_clone): Numeric should not be copied by clone.
-
- * object.c (rb_obj_clone): should check immediate values.
-
- * parse.y (command): `yield' should take command_args.
-
- * parse.y (parse_quotedwords): %w(...) is not a string.
-
-Tue Oct 9 18:40:35 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * process.c (Init_process): activate the case NT.
-
-Tue Oct 9 17:08:00 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (thread_status_name): separated from
- rb_thread_inspect(). return string expression for thread status.
-
- * eval.c (rb_thread_status, rb_thread_inspect): use
- thread_status_name().
-
- * eval.c (rb_thread_priority_set): return the priority not but
- self.
-
-Sat Oct 6 23:07:08 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): NODE_MATCH3 was confusing left and right. sigh.
-
-Fri Oct 5 15:19:46 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_unique): should not dump anonymous class.
-
-Fri Oct 5 11:59:13 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (proc_s_new): revived.
-
- * eval.c (Init_Proc): define Proc.new instead of Proc.allocate to
- inhibit from creating uninitialized Proc.
-
-Thu Oct 4 14:11:03 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/socket/socket.c (ruby_connect): EALREADY is the equivalent
- for EINPROGRESS in ws2_32.lib.
-
-Wed Oct 3 20:11:06 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * re.c (rb_reg_s_alloc): avoid infinite recursion.
-
-Wed Oct 3 16:49:49 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/gdbm/gdbm.c (rb_gdbm_fetch): str is a VALUE now.
-
-Wed Oct 3 13:32:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (r_object): better allocation type check for
- TYPE_UCLASS. usage of allocation framework is disabled for now.
-
- * variable.c (rb_class_path): Module may have subclass.
-
- * string.c (rb_str_update): should maintain original negative
- offset.
-
- * string.c (rb_str_subpat_set): ditto
-
- * string.c (rb_str_aset): ditto.
-
- * re.c (rb_reg_nth_match): should check negative nth.
-
- * re.c (rb_reg_nth_defined): ditto.
-
-Tue Oct 2 19:12:47 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/ftools.rb (catname): allow trailing '/' for the destination.
-
-Tue Oct 2 18:31:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): should override existing class.
-
-Tue Oct 2 17:08:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_alloc): general instance allocation framework.
- use of NEWOBJ() is deprecated except within 'allocate' method.
-
-Tue Oct 2 08:04:52 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * marshal.c (r_object): TYPE_UCLASS check should be inversed.
-
-Mon Oct 1 19:18:54 2001 Tanaka Akira <akr@m17n.org>
-
- * ext/socket/socket.c (unix_addr): getsockname(2) may result len = 0.
-
- * ext/socket/socket.c (unix_peeraddr): getpeername(2) may result
- len = 0.
-
-Mon Oct 1 09:59:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_subpat_set): support function for new argument
- pattern String#[re,offset] = val. [new]
-
-Sat Sep 29 02:30:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (POP_BLOCK): rb_gc_force_recycle() was called too much.
- Should not be called if SCOPE_DONT_RECYCLE is set.
-
-Wed Sep 26 22:21:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_aref_m): new argument pattern
- String#[re,offset]. [new]
-
-Wed Sep 26 19:02:39 2001 Guy Decoux <ts@moulon.inra.fr>
-
- * parse.y: allow 'primary[] = arg'
-
-Tue Sep 25 10:46:42 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/win32.c (isInternalCmd): check return value of NtMakeCmdVector
- (Tietew <tietew@tietew.net>'s patch).
-
-Mon Sep 24 00:55:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_substr): should return an instance of
- receiver's class.
-
- * string.c (rb_str_succ): ditto.
-
- * array.c (rb_ary_subseq): ditto.
-
- * array.c (rb_ary_initialize): Array.new([1,2,3]) => [1,2,3]. [new]
-
-Sat Sep 22 22:16:08 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_reverse): should return an instance of
- receiver's class.
-
- * string.c (rb_str_times): ditto.
-
- * array.c (rb_ary_times): ditto
-
- * string.c (str_gsub): ditto.
-
- * string.c (rb_str_ljust): ditto.
-
- * string.c (rb_str_rjust): ditto.
-
- * string.c (rb_str_center): ditto.
-
-Sat Sep 22 12:13:39 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (eval): retrieves file, line information from binding.
-
-Thu Sep 20 21:25:00 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (MATCH_DATA): access via rb_svar().
-
-Thu Sep 20 15:20:00 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c, intern.h (rb_svar): return reference to special variable
- from local variable index. [new]
-
- * eval.c (rb_eval): use rb_svar() for NODE_FLIP{2,3}.
-
- * parse.y (rb_(backref|lastline)_(get|set)): access via rb_svar().
-
- * eval.c (proc_invoke): push dynamic variables.
-
- * eval.c (rb_thread_yield): push special variables as dynamic
- variables($_, $~ and FLIP states).
-
-Thu Sep 20 15:20:00 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * intern.h, parse.y (rb_is_local_id): return true if the ID is
- local symbol. [new]
-
- * parse.y (internal_id): make new ID for internal use. [new]
-
- * parse.y (cond0): allocate internal ID for NODE_FLIP{2,3}.
-
- * eval.c (rb_f_local_variables): use rb_is_local_id() to select
- visible local variables.
-
-Thu Sep 20 15:20:00 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_thread_start_0): SCOPE_SHARED is removed.
-
- * eval.c, intern.h (rb_thread_scope_shared_p): removed. special
- variables are no longer shared by threads.
-
- * re.c (rb_reg_search): MATCHDATA is no longer shared by threads.
-
-Tue Sep 18 11:44:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_init): String.new() => "" [new]
-
-Tue Sep 11 20:53:56 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (dir_path): new method.
-
- * dir.c (dir_initialize): wrap DIR into struct, along with path
- information.
-
-Sat Sep 8 07:13:42 2001 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/net/telnet.rb: waitfor(): improvement. thanks to
- nobu.nakada@nifty.ne.jp
-
-Sat Sep 8 04:34:17 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_restore_context): save current value of
- lastline and lastmatch in the thread struct for later restore.
-
- * eval.c (rb_thread_save_context): restore lastline and lastmatch.
-
-Fri Sep 7 11:27:56 2001 akira yamada <akira@ruby-lang.org>
-
- * numeric.c (flo_to_s): should handle negative float value.
-
-Fri Sep 7 09:44:44 2001 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/net/telnet.rb: waitfor(): bug fix.
-
-Fri Sep 7 07:11:34 2001 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: CGI#doctype(): bug fix (html4Fr).
-
- * lib/net/telnet.rb, lib/cgi.rb: remove VERSION, RELEASE_DATE,
- VERSION_CODE, RELEASE_CODE. please use REVISION.
-
- * lib/cgi.rb: CGI#header(): bug fix.
-
- * lib/net/telnet.rb, lib/cgi.rb: concat --> +=
-
-Thu Sep 6 17:38:18 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * dir.c (dir_s_chdir): raise if environment variable HOME/LOGDIR
- not set.
-
- * dir.c (glob_helper): avoid infinite loop on a file name with
- wildcard characters. (ruby-bugs#PR177)
-
-Thu Sep 6 14:25:15 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_base_s_hexdigest): remove a debug
- print.
-
-Thu Sep 6 13:56:14 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_base_s_digest,
- rb_digest_base_s_hexdigest): ensure that a string is given.
-
-Thu Sep 6 13:28:51 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/jcode.rb (_regexp_quote): fix quote handling, again.
-
-Thu Sep 6 07:28:56 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * file.c (rb_find_file_ext): add const qualifiers to ext.
-
- * intern.h (rb_find_file_ext): ditto.
-
-Thu Sep 6 07:16:14 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/socket/socket.c (Init_socket): remove duplicating constants.
-
-Thu Sep 6 03:15:24 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_include_module): should check whole ancestors to
- avoid duplicate module inclusion.
-
-Wed Sep 5 20:02:27 2001 Shin'ya Adzumi <adzumi@denpa.org>
-
- * string.c (trnext): should check backslash before updating "now"
- position.
-
-Wed Sep 5 17:41:11 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/jcode.rb (_regexp_quote): fix quote handling.
-
-Tue Sep 4 01:03:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (Init_Regexp): to_s to be alias to inspect.
-
-Mon Sep 3 22:46:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): should support 'keyword='.
-
-Mon Sep 3 20:26:08 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * intern.h (rb_find_file_ext): changed from rb_find_file_noext().
-
-Mon Sep 3 15:12:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (proc_options): should not adjust argc/argv if -e option
- is supplied.
-
-Mon Sep 3 14:11:17 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * error.c: unbreak the build on *BSD with gcc 3.0.1 by removing
- the conflicting declaration of sys_nerr for *BSD.
-
-Sat Sep 1 18:50:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (proc_options): should not alter origargv[].
-
- * ruby.c (set_arg0): long strings for $0 dumped core.
-
-Sat Sep 1 09:50:54 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ruby.c (set_arg0): prevent SEGV when val is longer than the
- original arguments.
-
- * ruby.c (ruby_process_options): initialize total length of
- original arguments at first.
-
-Sat Sep 1 14:05:28 2001 Brian F. Feldman <green@FreeBSD.org>
-
- * ruby.c (set_arg0): use setprogtitle() if it's available.
-
-Sat Sep 1 03:49:11 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_popen): accept integer flags as mode.
-
-Fri Aug 31 19:46:05 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * file.c (rb_find_file_ext): extension table can be supplied from
- outside. renamed.
-
- * eval.c (rb_f_require): replace rb_find_file_noext by
- rb_find_file_ext.
-
-Fri Aug 31 19:26:55 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_provided): should also check feature without
- extension.
-
-Fri Aug 31 13:06:33 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flo_to_s): do not rely on decimal point to be '.'
-
-Wed Aug 29 02:18:53 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): ternary ? can be followed by newline.
-
-Tue Aug 28 00:40:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_require): should check static linked libraries
- before raising exception.
-
-Fri Aug 24 15:17:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_equal): check identity equality first.
-
- * string.c (rb_str_equal): ditto.
-
- * struct.c (rb_struct_equal): ditto.
-
-Fri Aug 24 14:38:17 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * dln.c (dln_strerror): fix a bug that sometimes made null message on
- win32 (Tietew <tietew@tietew.net>'s patch).
-
- * win32/win32.c (mystrerror): ditto.
-
-Fri Aug 24 03:15:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (Init_Numeric): undef Integer::new.
-
-Fri Aug 24 00:46:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): NODE_WHILE should update result for each
- conditional evaluation.
-
- * eval.c (rb_eval): NODE_UNTIL should return last evaluated value
- (or value given to break).
-
-Thu Aug 23 21:59:38 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * enum.c (sort_by_i): fix typo.
-
-Thu Aug 23 10:10:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (is_defined): should not dump core for "defined?(())".
-
- * eval.c (umethod_bind): recv can be an instance of descender of
- oklass if oklass is a Module.
-
-Wed Aug 22 23:20:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_equal): check identity equality first.
-
-Wed Aug 22 19:58:59 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (intersect_fds): counts intersecting fds.
-
- * eval.c (rb_thread_schedule): only fds requested by
- each thread count as select_value.
-
-Tue Aug 21 22:28:09 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * file.c (group_member): should check real gid only.
-
- * file.c (eaccess): do not cache euid, since effective euid may be
- changed via Process.euid=().
-
- * file.c (eaccess): return -1 unless every specified access mode
- is permitted.
-
-Tue Aug 21 16:09:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): while/until returns the value which is given
- to break.
-
- * parse.y (value_expr): using while/until/class/def as an
- expression is now gives a warning, not an error.
-
-Tue Aug 21 11:56:02 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_eqq): should compare strings based on magical
- increment (using String#upto), not dictionary order.
-
-Mon Aug 20 19:53:16 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/digest/sha2/extconf.rb: fix support for cross-compiling.
-
- * mkconfig.rb: fix support for autoconf 2.52.
-
-Mon Aug 20 17:24:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_sort_by): new method for Schewartzian transformed
- stable sort.
-
-Mon Aug 20 16:09:05 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (mod_av_set): detect constant overriding for built-in
- classes/modules.
-
-Mon Aug 20 15:14:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (tokadd_escape): escaped backslashes too much.
-
-Mon Aug 20 13:24:08 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_step): 'iter' here should be an array.
-
-Mon Aug 20 12:43:08 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): should retrieve __member__ data from
- non-singleton class.
-
-Sat Aug 18 23:11:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_cvar_get): class variable override check added.
-
- * variable.c (rb_cvar_set): ditto
-
- * variable.c (rb_cvar_declare): ditto.
-
-Fri Aug 17 12:13:48 2001 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb: Protocol.new requires at least one arg.
-
- * lib/net/smtp.rb: ditto.
-
- * lib/net/pop.rb: ditto.
-
- * lib/net/http.rb: ditto.
-
-Fri Aug 17 00:49:51 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parse_regx): handle backslash escaping of delimiter here.
-
-Thu Aug 16 23:03:40 2001 Koji Arai <JCA02266@nifty.ne.jp>
-
- * io.c: prevent recursive malloc calls on NEC UX/4800.
-
- * ext/socket/socket.c: ditto.
-
-Thu Aug 16 13:54:04 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * ext/socket/socket.c (s_recvfrom): fix typo.
-
-Thu Aug 16 09:53:28 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * ext/socket/socket.c (s_recvfrom): avoid VC++6 warning.
-
-Thu Aug 16 03:50:33 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/win32.c (NtCmdGlob): avoid VC++ warning.
-
- * lib/mkmf.rb: add -I$(srcdir) to CPPFLAGS.
-
-Wed Aug 15 04:59:15 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/*/extconf.rb: really fix so that they build from any
- directory.
-
-Wed Aug 15 04:04:02 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/sha2/extconf.rb: fix so that they build from any
- directory.
-
-Wed Aug 15 01:59:19 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/defs.h: Define NO_UINT64_T instead of emitting an
- error to fail.
-
- * ext/digest/sha2/extconf.rb: Do not exit on error, and utilize
- NO_UINT64_T to detect if the system has a 64bit integer type.
-
-Tue Aug 14 21:14:07 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/sha2/extconf.rb: do not create Makefile when no 64bit
- integer type is detected.
-
-Tue Aug 14 17:09:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_step): new method.
-
-Tue Aug 14 11:49:00 2001 TOYOFUKU Chikanobu <toyofuku@juice.or.jp>
-
- * string.c (rb_str_cmp): remove needless conditional.
-
-Tue Aug 14 03:23:25 2001 Koji Arai <JCA02266@nifty.ne.jp>
-
- * string.c (rb_str_lstrip_bang) `return Qnil' was missing.
-
-Mon Aug 13 14:16:46 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * bignum.c, marshal.c: Detypo: s/SIZEOF_ING/SIZEOF_INT/.
-
-Sun Aug 12 15:01:58 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * string.c (rb_str_cat): fix buffer overflow.
-
- * string.c (rb_str_append): nothing to append actually when `str2'
- is empty.
-
-Sat Aug 11 14:43:47 2001 Tanaka Akira <akr@m17n.org>
-
- * array.c (rb_inspecting_p): initialize inspect_key if it is
- not initialized yet.
-
-Fri Aug 10 22:14:37 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (cond0): operands of logical operators are not treated
- as conditional expression anymore, but propagate conditional
- status if used in conditionals.
-
-Tue Aug 7 09:10:32 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * win32/win32.h: fix problems with BC++ (ruby-bugs#PR161).
-
-Mon Aug 6 23:47:46 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * pack.c (pack_pack): associates p/P strings once at last
- (reverted to 1.26).
-
- * string.c (rb_str_associate): associates an Array at once, not
- but a String. realloc's when str_buf.
-
-Mon Aug 6 17:01:33 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_gc_mark_threads): should mark ruby_cref.
-
-Mon Aug 6 14:31:37 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * numeric.c (num_divmod): fix typo.
-
-Mon Aug 6 03:29:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_lstrip_bang): new method.
-
- * string.c (rb_str_rstrip_bang): new method.
-
-Mon Aug 6 00:35:03 2001 Guy Decoux <decoux@moulon.inra.fr>
-
- * struct.c (rb_struct_modify): should check frozen and taint
- status.
-
-Sun Aug 5 19:28:39 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * string.c (rb_str_associate): should consider STR_ASSOC too.
-
-Sun Aug 5 07:46:18 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_undefined): do not recurse if method_missing is
- undefined.
-
-Thu Aug 2 21:37:32 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (proc_waitpid): now all arguments are optional.
-
- * process.c (Init_process): waitpid is now alias to wait.
-
- * process.c (Init_process): waitpid2 is now alias to wait2.
-
- * process.c (rb_waitpid): made public.
-
- * ext/pty/pty.c (pty_getpty): avoid disturbing SIGCHLD using
- thread and rb_waitpid.
-
-Thu Aug 2 11:23:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (proc_getpgrp): now takes no argument on all
- platforms.
-
- * process.c (proc_setpgrp): ditto.
-
-Thu Aug 2 01:29:42 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * file.c (strrdirsep): removed meaningless code.
-
- * file.c (rb_file_s_expand_path): reverted to 1.66.
-
-Wed Aug 1 16:17:47 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (sock_s_pack_sockaddr_in): added
- Socket::pack_sockaddr_in(). [new]
-
- * ext/socket/socket.c (sock_s_pack_sockaddr_un): added
- Socket::pack_sockaddr_un(). [new]
-
- * ext/socket/socket.c (sock_s_pack_sockaddr_in): added
- Socket::unpack_sockaddr_in(). [new]
-
- * ext/socket/socket.c (sock_s_pack_sockaddr_un): added
- Socket::unpack_sockaddr_un(). [new]
-
-Wed Aug 1 15:42:16 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * eval.c (ruby_run): avoid VC++ warning.
-
-Tue Jul 31 17:30:53 2001 Usaku Nakamura <usa@ruby-lang.org>
-
- * marshal.c (Init_marshal): fix typos.
-
-Tue Jul 31 15:16:39 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * process.c (last_status_set): nothing returned, should be void.
-
- * ext/socket/socket.c (load_addr_info): ditto.
-
-Tue Jul 31 12:11:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (Init_marshal): new constant Marshal::MAJOR_VERSION
- and Marshal::MINOR_VERSION.
-
-Tue Jul 31 07:18:04 2001 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * file.c (rb_file_s_expand_path): scans per path element not per
- byte/character, including fix of [ruby-talk:18152] and
- multi-byte pathname support.
-
-Tue Jul 31 11:52:10 2001 akira yamada <akira@ruby-lang.org>
-
- * marshal.c (marshal_load): ruby_verbose test should be wrapped by
- RTEST().
-
-Mon Jul 30 17:54:23 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_index): should return nil (not the default
- value) if value is not in the hash.
-
-Mon Jul 30 12:55:47 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_div): new method added. alias to '/' which
- should be preserved even if '/' is redefined (e.g. by
- mathn). [new]
-
-Mon Jul 30 11:12:14 2001 Amos Gouaux <amos+ruby@utdallas.edu>
-
- * lib/net/imap.rb: added new commands for managing folder quotas
- and folder ACLs.
-
-Mon Jul 30 03:19:53 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_cstr2inum): "0 ff".hex should return 0, not 255.
-
-Fri Jul 27 22:29:41 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * file.c (rb_file_s_expand_path): fixed using CharNext().
-
-Fri Jul 27 18:07:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_provided): extension should be guessed using
- rb_find_file_noext().
-
- * eval.c (rb_f_require): should call rb_feature_p() after
- extension completion.
-
-Fri Jul 27 16:25:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): add CHECK_INTS before next, redo, retry to
- avoid potential uninterruptable infinite loop.
-
-Thu Jul 26 11:27:12 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * file.c (rb_find_file_noext, rb_find_file): fix tilde expansion
- problem.
-
-Wed Jul 25 17:54:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_file_s_expand_path): use CharNext() to expand.
-
-Wed Jul 25 17:16:26 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * intern.h: add some missing function prototypes.
-
-Wed Jul 25 15:50:05 2001 Guy Decoux <decoux@moulon.inra.fr>
-
- * file.c (rb_file_s_expand_path): should not expand "." and ".."
- not following dirsep.
-
-Wed Jul 25 12:15:32 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * file.c (rb_find_file_noext): should update f by expanded path.
-
- * file.c (rb_find_file): ditto.
-
-Tue Jul 24 23:10:47 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * file.c (strrdirsep): multi-byte pathname and DOSish separator
- support. originally comes from Patrick Cheng. [new]
-
- * file.c (rb_file_s_basename, rb_file_s_dirname): use
- strrdirsep(). comes from Patrick Cheng.
-
- * file.c (is_absolute_path): restricted in DOSish absolute path
- with drive letter, and UNC support. originally comes from
- Patrick Cheng.
-
- * file.c (getcwd): define macro using getwd() unless provided.
-
-Tue Jul 24 19:23:15 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/extmk.rb.in, lib/mkmf.rb: dig the target subdirectory for
- lib/* files properly in case of create_makefile("dir/name").
-
-Mon Jul 23 00:26:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_provide_feature): should not tweak extension used for
- loading.
-
-Sun Jul 22 21:16:43 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/extmk.rb.in, lib/mkmf.rb: introduce a couple of new make
- variables: CLEANFILES and DISTCLEANFILES. They'd typically be
- defined in a file "depend".
-
-Sat Jul 21 09:40:10 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * io.c (io_fread): use fread(3) if PENDING_COUNT is available.
-
-Fri Jul 20 22:55:01 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * gc.c (ruby_xrealloc): fix a dangling bug which led memory
- reallocation to fail even though the second try after a GC
- succeeds.
-
-Fri Jul 20 03:00:46 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * class.c (rb_mod_include_p): Module#include? added. [new]
-
-Fri Jul 20 01:05:50 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (ignorecase_setter): give warning on modifying $=.
-
- * string.c (rb_str_casecmp): new method. [new]
-
- * string.c (rb_str_eql): separated from rb_str_equal(), make it
- always be case sensitive. [new]
-
- * string.c (rb_str_hash): made it always be case sensitive.
-
-Thu Jul 19 13:03:15 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_f_require): should not include path in $" value
-
- * file.c (rb_find_file): should return 0 explicitly on failure.
-
-Tue Jul 17 11:44:40 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * ruby.h: enable volatile directive with VC++.
-
- * regex.c: ditto.
-
-Tue Jul 17 06:01:12 2001 Minero Aoki <aamine@loveruby.net>
-
- * doc/net/smtp.rd.ja, pop.rd.ja, http.rd.ja: new files.
-
- * MANIFEST: add doc/net/{http,pop,smtp}.rd.ja.
-
-Tue Jul 17 11:22:01 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (NUM_FAILURE_ITEMS): was confusing NUM_REG_ITEMS and
- NUM_NONREG_ITEMS, which have happened to be same value.
-
-Tue Jul 17 11:08:34 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * ext/extmk.rb.in: modify RM macro because command.com/cmd.exe don't
- recognize single quotation as quote character.
-
- * lib/mkmf.rb: ditto.
-
-Tue Jul 17 01:38:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_class_new): subclass check moved to this function.
-
- * class.c (rb_class_boot): check less version of rb_class_new().
-
-Man Jul 16 13:21:30 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * file.c (file_load_ok): fix typo.
-
-Mon Jul 16 12:58:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): should preserve iter status for embedded
- frame in the block.
-
-Mon Jul 16 00:04:39 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_file_s_expand_path): may overrun buffer on stack.
-
-Sun Jul 15 01:38:28 2001 Guy Decoux <decoux@moulon.inra.fr>
-
- * string.c (rb_str_insert): forgot to call rb_str_modify().
-
-Sat Jul 14 12:26:30 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/digest/*/extconf.rb: fix so that they build from any
- directory.
-
-Sat Jul 14 06:20:17 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/net/http.rb: HTTP#proxy? did not worked.
-
-Sat Jul 14 02:56:19 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/extmk.rb.in: support multi-level ext/ directories.
- (e.g. you can have ext/foo, ext/foo/bar and ext/foo/baz)
-
-Sat Jul 14 02:55:02 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/.cvsignore: let cvs ignore extinit.c.
-
-Fri Jul 13 23:47:35 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_search): should consider reverse search.
-
-Fri Jul 13 22:26:09 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/mkmf.rb: use File::split to split a target into a prefix and
- a module name. This also works around a just found bug of
- String#rindex.
-
- * ext/extmk.rb.in: ditto.
-
-Fri Jul 13 02:36:10 2001 Minero Aoki <aamine@loveruby.net>
-
- * dir.c (dir_s_chdir): warn only when invoked from multiple
- threads or block is not given.
-
-Thu Jul 12 15:11:48 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/socket/socket.c (ruby_connect): workaround for the setup of
- Cygwin socket(EALREADY).
-
-Mon Jul 9 16:49:30 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb.in: modify RM macro.
-
- * lib/mkmf.rb: ditto.
-
-Sun Jul 8 20:52:02 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi().
-
-Sun Jul 8 16:04:35 2001 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: rename HTTP#request_by_name to send_request.
-
- * lib/net/protocol.rb (ProtoSocket#read): modify typo.
-
-Sat Jul 7 17:45:35 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_convert_type): should use rb_rescue(), not rb_rescue2().
-
- * range.c (range_init): ditto.
-
-Fri Jul 6 18:01:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_dup): copies (actually does not free)
- generic_ivar on dupif original owns them.
-
-Fri Jul 6 02:15:06 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/tempfile.rb: a tempfile must be created with mode 0600.
-
-Thu Jul 5 20:28:53 2001 Tietew <tietew@tietew.net>
-
- * string.c (rb_str_each_line): should propagate taint mark.
-
- * ext/nkf/nkf.c (rb_nkf_kconv): ditto.
-
-Fri Jul 6 14:54:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_require): revamp for simpler implementation.
-
- * file.c (rb_find_file_noext): use String object, instead of
- passing char* around.
-
- * file.c (rb_find_file): ditto.
-
-Thu Jul 5 22:01:02 2001 Mitsuhiro Kondo <kondo@nik-prt.co.jp>
-
- * dln.c (dln_load): should use NSLINKMODULE_OPTION_BINDNOW.
-
-Thu Jul 5 13:44:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (load_file): local variables 'c' remain uninitialized on
- xflag.
-
-Thu Jul 5 10:00:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_match): prefetched escaped character too early.
-
-Wed Jul 4 08:58:30 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): add argument check for attr_readers.
-
-Wed Jul 4 04:22:44 2001 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (HTTP#request_by_name): arg order changes.
-
-Wed Jul 4 04:07:36 2001 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (HTTP#request_by_name): bug fix.
-
- * lib/net/http.rb: does not write Connection: by default.
-
- * lib/net/protocol.rb: "start" for started protocol is an error.
-
- * lib/net/protocol.rb: "finish" for finished protocol is an error.
-
-Wed Jul 4 03:17:31 2001 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: new method HTTP#request_by_name (test)
-
- * lib/net/http.rb: new class HTTPGenericRequest
-
-Tue Jul 3 23:58:29 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/mkmf.rb: distclean should remove mkmf.log as well.
-
-Tue Jul 3 18:35:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval_string_wrap): should push frame (and adjust
- cbase) before wrapped eval.
-
- * eval.c (rb_eval_cmd): ditto.
-
- * eval.c (eval): should update ruby_class always after all.
-
-Tue Jul 3 14:56:27 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * eval.c (block_pass): do not change wrapper information.
-
- * eval.c (rb_yield_0): preserve wrapper information.
-
-Tue Jul 3 08:59:50 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * error.c (rb_name_error): raise NameError instead of LoadError.
-
-Mon Jul 2 17:22:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (exc_exception): clone the receiver exception instead of
- creating brand new exception object of the receiver.
-
-Mon Jul 2 09:53:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval_string_wrap): extend new ruby_top_self, not
- original self.
-
- * eval.c (rb_eval_cmd): respect ruby_wrapper if set.
-
- * eval.c (eval): do not update ruby_class unless scope is not
- provided.
-
-Sun Jul 1 10:51:15 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * eval.c (eval): preserve wrapper information.
-
- * eval.c (proc_invoke): ditto.
-
- * eval.c (block_pass): ditto.
-
-Sat Jun 30 02:55:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (void_expr): too much warnings for void context
- (e.g. foo[1] that can be mere Proc call).
-
-Fri Jun 29 17:23:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (rb_name_error): new function to raise NameError with
- name attribute set.
-
- * eval.c (rb_f_missing): set name and args in the exception
- object. [new]
-
- * error.c (name_name): NameError#name - new method.
-
- * error.c (nometh_args): NoMethodError#args - new method.
-
-Fri Jun 29 15:29:31 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lex.c (rb_reserved_word): lex_state after tRESCUE should be
- EXPR_MID.
-
-Thu Jun 28 00:21:28 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/matrix.rb: resolve 'ruby -w' warnings.
-
- * lib/irb/locale.rb: resolve 'ruby -w' warnings.
-
- * lib/irb/multi-irb.rb: resolve 'ruby -w' warnings.
-
- * lib/irb/ruby-lex.rb: fix problem for "\\M-\\..." and "\\C-\\..."
- and resolve 'ruby -w' warnings.
-
- * lib/irb/ruby-token.rb: fix typo
-
- * lib/shell/command-processor.rb: resolve 'ruby -w' warnings.
-
-Wed Jun 27 08:53:26 2001 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb: new methods POP3.auth_only, POP3#auth_only
-
- * lib/net/http.rb: HTTP.Proxy returns self if ADDRESS is nil.
-
- * lib/net/protocol.rb: new method ProtocolError#response
-
- * lib/net/protocol.rb,smtp.rb,pop.rb,http.rb: add document.
-
-Tue Jun 26 18:42:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (add_heap): allocation size of the heap unit is doubled for
- each allocation.
-
-Mon Jun 25 09:54:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (isdelim): space, tab, and newline are no longer
- delimiters for glob patterns.
-
-Sat Jun 23 22:28:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (svalue_to_avalue): new conversion scheme between single
- value and array values.
-
- * eval.c (avalue_to_svalue): ditto.
-
- * eval.c (rb_eval): REXPAND now uses avalue_to_svalue(), return
- and yield too.
-
- * eval.c (rb_yield_0): use avalue_to_svalue().
-
- * eval.c (proc_invoke): Proc#call gives avaules, whereas
- Proc#yield gives mvalues.
-
- * eval.c (bmcall): convert given value (svalue) to avalue.
-
-Sat Jun 23 18:28:52 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/readline/readline.c (readline_event): a non-void function
- should return a value.
-
-Fri Jun 22 23:17:28 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/socket/socket.c (ruby_connect): workaround for the setup of
- Cygwin socket.
-
-Fri Jun 22 23:11:17 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/irb/locale.rb: fix for require "kconv" problem
-
-Fri Jun 22 18:08:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): no mvalue_to_svalue conversion here.
-
- * eval.c (massign): takes svalue, convert it to mvalue inside.
-
- * eval.c (rb_eval): parameters for yield/return are always
- svalues now.
-
- * eval.c (svalue_to_mvalue): more strict conversion.
-
- * eval.c (mvalue_to_svalue): ditto.
-
-Fri Jun 22 17:12:23 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * st.c (new_size): prime hash size enabled.
-
- * ext/socket/socket.c (Init_socket): SO_* constants added.
-
-Tue Jun 19 22:24:07 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * gc.c (rb_setjmp): avoid GCC 3.0 warnings.
-
-Tue Jun 19 18:19:30 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/readline/readline.c: add new methods:
- Readline::completion_append_character and
- Readline::completion_append_character=.
-
-Tue Jun 19 16:29:50 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (svalue_to_mvalue): new function to convert from svalue
- to mvalue. [experimental]
-
- * eval.c (mvalue_to_svalue): new function to convert from mvalue
- to svalue.
-
- * eval.c (rb_eval): use mvalue_to_svalue().
-
- * eval.c (rb_yield_0): use mvalue_to_svalue().
-
- * eval.c (proc_invoke): proper mvalue handling.
-
-Mon Jun 18 17:38:50 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_require): searches ".rb" and ".so" at the same
- time. previous behavior (search ".rb", then ".so") has a
- security risk (ruby-bugs#PR140).
-
- * array.c (rb_ary_to_ary): new function to replace internal
- rb_Array(), which never calls to_a, but to_ary (rb_Array() might
- call both). [new]
-
-Mon Jun 18 00:43:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (PUSH_FAILURE_POINT): push option status again.
-
- * regex.c (re_compile_pattern): avoid pushing unnecessary
- option_set.
-
-Sat Jun 16 10:58:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_load): tainted string is OK if wrapped *and*
- $SAFE >= 4.
-
-Thu Jun 14 16:27:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_start_0): should not nail down higher blocks
- before preserving original context (i.e. should not alter
- original context).
-
-Wed Jun 13 19:34:59 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * dir.c (Init_Dir): add a new method File::fnmatch? along with
- File::Constants::FNM_*. While I am here, FNM_NOCASE is renamed
- to FNM_CASEFOLD which is commonly used by *BSD and GNU libc.
-
-Wed Jun 13 09:33:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_yield): new method equivalent to Proc#call but no
- check for number of arguments. [new]
-
-Tue Jun 12 14:21:28 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * lib/mkmf.rb: target_prefix is only for installation, not for
- build.
-
-Tue Jun 12 00:41:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (method_eq): new method Method#==. [new]
-
-Mon Jun 11 14:29:41 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * confgure.in: add RUBY_CANONICAL_BUILD.
-
-Sun Jun 10 17:31:47 2001 Guy Decoux <decoux@moulon.inra.fr>
-
- * gc.c (STR_NO_ORIG): STR_NO_ORIG value was different between
- string.c and gc.c
-
-Sat Jun 9 22:10:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): should convert *non-array at the end of
- arguments by using Array().
-
-Sat Jun 9 17:04:30 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * hash.c (ruby_setenv): readline library leaves their environment
- strings uncopied. "free" check revised.
-
-Sat Jun 9 16:31:03 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * ext/extmk.rb.in: Use -F and -T for mswin32 because cl.exe doesn't
- support -o officially and cl.exe considers that *.cc and *.cxx are
- OBJs.
-
- * lib/mkmf.rb: ditto.
-
- * win32/Makefile.sub: Use del instead of rm.
- All these changes are derived from Nobuyoshi Nakada's patch.
- Thanks.
-
-Fri Jun 8 22:37:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (Init_stack): avoid __builtin_frame_address(2) to retrieve
- stack bottom line.
-
-Fri Jun 8 18:14:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * st.c (numhash): should shuffle bits by dividing by prime number.
-
-Fri Jun 8 17:05:21 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): multiple assignment behavior fixed, which
- results "*a = nil" makes "a == []" now.
-
-Fri Jun 8 15:25:09 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_require): should set SCOPE_PUBLIC before calling
- dln_load().
-
-Thu Jun 7 17:28:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): exclude kDO_BLOCK too much by false condition.
-
-Wed Jun 6 23:02:36 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/sync.rb: bug fix if obj.initialize has parameters when
- obj.extend(Sync_m)
-
- * lib/mutex_m.rb: modified bit
-
-Wed Jun 6 16:11:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_load): should check if tainted even when wrap is
- specified.
-
-Wed Jun 6 14:34:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (mrhs_basic): "*arg" should always be expanded by REXPAND.
-
- * regex.c (re_compile_pattern): too much optimization for the
- cases like /(.|a)b/.
-
-Tue Jun 5 23:58:43 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (fc_i): removed vast string allocation.
-
-Tue Jun 5 16:45:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (Init_Exception): NameError went under StandardError,
- and NoMethodError went under NameError.
-
-Tue Jun 5 16:40:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (rb_intern): non identifier symbols should be
- categorized as ID_JUNK. [new]
-
-Tue Jun 5 16:15:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_mod_const_at): use hash table as internal
- data. [new]
-
- * variable.c (rb_mod_const_of): ditto.
-
- * variable.c (rb_const_list): new function to convert internal
- data (hash table) to array of strings.
-
- * eval.c (rb_mod_s_constants): data handling scheme has changed.
-
-Tue Jun 5 15:16:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_add_method): should not call rb_secure(), for
- last_func may not be set.
-
- * io.c (rb_io_ctl): ioctl should accept any integer within C long
- range.
-
-Tue Jun 5 13:41:13 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/etc/extconf.rb: use egrep_cpp.
-
-Tue Jun 5 12:44:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (r_object): wrong type check for modules.
-
- * marshal.c (w_object): should not dump anonymous classes/modules.
-
-Tue Jun 5 01:19:34 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_open_file): use rb_file_sysopen_internal() if the 3rd
- argument (permission flags) is given. [new, should be backported?]
-
- * io.c (rb_io_mode_binmode): mode string (e.g. "r+") to flags to
- open(2).
-
-Mon Jun 4 23:55:54 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): NODE_REXPAND expand an array of 1 element as
- the element itself. [new, should be backported?]
-
- * parse.y (ret_args): should treat "*[a]" in rhs expression as
- "a", not "[a]".
-
-Mon Jun 4 04:14:53 2001 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/shellwords.rb: don't destroy argument.
-
-Sat Jun 2 23:23:05 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_compile_pattern): should push option modifier at the
- right place.
-
-Sat Jun 2 23:05:20 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/cgi/session.rb: don't use module_function for Class.
-
-Sat Jun 2 00:02:22 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * irb messages: fix typos.
-
-Fri Jun 1 17:26:24 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * hash.c (replace_i): ignore when key == Qundef.
-
-Fri Jun 1 16:50:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (call_args2): confusion with list_append() and
- list_concat() was fixed.
-
-Fri Jun 1 15:01:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): fixed 'print CGI::bar() {}, "\n"' syntax
- breakage, adding new lex_state status. sigh. [new]
-
-Fri Jun 1 11:21:04 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: use waitpid on mingw32.
-
- * ext/dbm/extconf.rb: include <ndbm.h>, not <gdbm.h>.
-
-Thu May 31 18:34:57 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * file.c (rb_file_s_unlink): should not allow if $SAFE >= 2.
-
-Thu May 31 17:23:25 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (Init_Range): define "to_ary".
-
-Thu May 31 13:30:25 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * mkconfig.rb, ext/configsub.rb: VERSION -> RUBY_VERSION.
-
-Thu May 31 08:00:58 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * win32/dir.h: re-add.
-
-Thu May 31 01:25:59 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * configure.in: default --with-libc_r to `no' until the problem is
- fixed. (FreeBSD only)
-
-Tue May 29 17:24:23 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * ruby.c (proc_options): unexpected SecurityError happens when -T4.
-
-Tue May 29 18:46:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_compile_pattern): * \1 .. \9 should be
- backreferences always.
-
- * regex.c (re_match): backreferences corresponding to
- unclosed/unmatched parentheses should fail always.
-
-Tue May 29 16:35:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_cat): use rb_str_buf_cat() if possible. [new]
-
- * string.c (rb_str_append): ditto.
-
- * string.c (rb_str_buf_cat): remove unnecessary check (type,
- taint, modify) to gain performance.
-
- * string.c (rb_str_buf_append): ditto.
-
- * string.c (rb_str_buf_finish): removed.
-
-Tue May 29 02:05:55 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_buf_new): buffering string function. [new]
-
- * string.c (rb_str_buf_append): ditto.
-
- * string.c (rb_str_buf_cat): ditto.
-
- * string.c (rb_str_buf_finish): ditto.
-
-Mon May 28 23:20:43 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: remove unnecessary AC_CANONICAL_BUILD
-
- * defines.h: #define HAVE_SETITIMER on Cygwin(bug fixed).
-
- * ruby.c: use relative path from LIBRUBY_SO.
-
- * ruby.c: don't use -mwin32 option on Cygwin.
-
- * cygwin/GNUmakefile.in: ditto.
-
- * ext/sdbm/_sdbm: ditto.
-
- * ext/tcltklib/extconf.rb: ditto.
-
- * ext/tcltklib/stubs.c: ditto.
-
-Mon May 28 22:12:01 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/extconf.rb.in: make the priority of the make rule of .c
- higher than .C .
-
-Mon May 28 13:22:19 2001 Tanaka Akira <akr@m17n.org>
-
- * time.c (make_time_t): local time adjustment revised.
-
-Mon May 28 02:20:38 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * dir.c (glob_helper): teach has_magic() to handle flags and get
- glob_helper to properly support FNM_NOESCAPE.
-
- * dir.c (fnmatch): fix a bug when FNM_PATHNAME and FNM_PERIOD are
- specified at the same time.
-
-Sat May 26 09:55:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: accomplish extended syntax described in [ruby-talk:14525]
- using tSPC token. [new, experimental]
-
-Sat May 26 07:05:45 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * MANIFEST: add win32/dir.h .
-
-Fri May 25 20:03:51 2001 Pascal Rigaux <pixel@mandrakesoft.com>
-
- * dln.c (dln_find_1): should exclude directories in executable
- file lookup.
-
-Fri May 25 18:00:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_obj_singleton_methods): list methods in extended
- modules if optional argument is true. [new]
-
-Fri May 25 14:19:25 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * string.c (rb_str_replace): add taint status infection
- (OBJ_INFECT()).
-
- * string.c (rb_str_crypt): ditto.
-
- * string.c (rb_str_ljust): ditto.
-
- * string.c (rb_str_rjust): ditto.
-
- * string.c (rb_str_center): ditto.
-
-Fri May 25 05:39:03 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/sha1/sha1-ruby.c (sha1_hexdigest): fix buffer overflow. The
- buffer for a SHA-1 hexdigest needs to be 41 bytes in length.
-
-Fri May 25 01:47:39 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * MANIFEST: update the entries I forgot to add or remove.
-
-Fri May 25 00:57:25 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/sha1/sha1-ruby.c (sha1_new): separate initialize() from
- new().
-
- * ext/md5/md5init.c (md5i_new): ditto.
-
-Fri May 25 00:53:41 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/dbm/extconf.rb: fix support for *BSD and set $CFLAGS
- properly.
-
-Thu May 24 16:10:33 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_member): check based on "<=>" comparison. [new]
-
- * range.c (range_check): add "succ" check if first end is not a
- numeric.
-
- * range.c (range_eqq): comparison should based on "<=>".
-
- * range.c (range_each): ditto.
-
-Thu May 24 16:08:21 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * mkconfig.rb: autoconf 2.50 support.
-
-Thu May 24 14:23:35 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): need argument adjustment for C defined
- blocks too.
-
-Thu May 24 01:11:30 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/dbm/extconf.rb: header search added. [new]
-
-Wed May 23 02:58:21 2001 Tanaka Akira <akr@m17n.org>
-
- * time.c (make_time_t): fix ad-hoc local time adjustment, using
- binary tree search.
-
-Tue May 22 17:10:35 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * variable.c (rb_alias_variable): should not allow variable
- aliasing if $SAFE >= 4.
-
-Tue May 22 02:37:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (expr): "break" and "next" to take optional expression,
- which is used as a value for termination. [new, experimental]
-
- * eval.c (rb_eval): "break" can give value to terminating method.
-
- * eval.c (rb_eval): "break" and "next" to take optional expression.
-
- * eval.c (rb_yield_0): "next" can give value to terminating "yield".
-
- * eval.c (rb_iterate): "break" can give value to terminating method.
-
- * eval.c (proc_call): ditto.
-
-Mon May 21 13:15:25 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big2str): t should be protected from GC.
-
-Sat May 19 09:29:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (rb_proc_times): need not to check return value from
- times(2).
-
-Fri May 18 05:36:08 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/extmk.rb.in (xsystem): backout the previous fix which was
- bogus.
-
-Fri May 18 05:19:55 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/mkmf.rb (xsystem): make a temporary fix to get $(...) macros
- properly expanded on a command execution.
-
- * ext/extmk.rb.in (xsystem): ditto.
-
-Fri May 18 03:45:55 2001 Brian F. Feldman <green@FreeBSD.org>
-
- * lib/mkmf.rb: unbreak "make install". lib/* must be installed
- under $rubylibdir, not under $libdir.
-
-Fri May 18 01:28:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (expr): break, next, redo, retry are moved from primary.
-
-Fri May 18 01:11:02 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * ext/sha1/sha1-ruby.c (sha1_new): get rid of an unneeded
- rb_obj_call_init() call.
-
-Fri May 18 01:03:55 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * ext/sha1/sha1.txt, ext/sha1/sha1.txt.jp: fix typos.
-
-Thu May 17 19:17:11 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/shell.rb, lib/shell/process-controller.rb,
- lib/shell/command-processor.rb: translate Japanese comments into
- English.
-
-Thu May 17 19:07:14 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * doc/shell.rd.jp: RD'ify and make some fixes.
-
- * doc/shell.rd: RD'ify, delete Japanese leftovers, make overall
- English fixes, and sync with doc/shell.rd.jp.
-
-Thu May 17 17:35:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): address of local_vars might change during eval.
-
-Thu May 17 07:27:09 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/md5/md5.txt.jp, ext/sha1/sha1.txt.jp:
- s/SuperClass/Superclass/.
-
-Thu May 17 07:21:44 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/Setup.dj, ext/Setup.emx, ext/Setup.nt, ext/Setup.x68:
- compile sha1 in as well as md5.
-
- * ext/Setup: put sha1 in a comment.
-
-Thu May 17 07:16:38 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/sha1/sha1.txt.jp: add the Japanese version derived from
- ext/md5/md5.txt.jp.
-
- * ext/sha1/sha1.txt: revise the copyright info and reduce the
- difference from ext/md5/md5.txt.
-
- * ext/md5/md5.txt: reduce the difference from ext/sha1/sha1.txt.
-
-Thu May 17 07:11:35 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/sha1/extconf.rb, ext/sha1/sha1.c: use WORDS_BIGENDIAN to
- detect the platform's endian.
-
-Thu May 17 06:31:30 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/md5/md5.txt: make wording fixes, and mention the newly added
- method: "<<".
-
- * ext/md5/md5.txt.jp: ditto.
-
-Wed May 16 18:05:52 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/md5/md5init.c: add an instance method "<<" as an alias for
- "update". (inspired by Steve Coltrin's ruby-sha1)
-
-Tue May 15 17:46:37 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_and): should not push frozen key string.
-
- * array.c (rb_ary_or): ditto.
-
-Tue May 15 02:18:23 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/thread.rb: rescue ThreadError in case the thread is dead
- just before calling Thread#run.
-
-Mon May 14 13:50:22 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_schedule): should save context before raising
- deadlock, saved context for current thread might be obsolete.
-
- * time.c (make_time_t): non DST timezone shift supported (hopefully).
-
- * time.c (make_time_t): strict range detection for negative time_t.
-
-Mon May 14 11:54:20 2001 Tanaka Akira <akr@m17n.org>
-
- * signal.c: SIGINFO added.
-
-Mon May 14 08:57:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_ensure): should not SEGV when prot_tag is NULL.
-
-Sun May 13 23:51:14 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * win32/resource.rb: Modify copyright in resource script.
-
-Sun May 13 14:03:33 2001 Okada Jun <yun@be-in.org>
-
- * lib/thread.rb: fix Queue#pop and SizedQueue#max= to avoid
- deadlock.
-
-Sat May 12 15:43:55 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * win32/win32.c (kill): add support of signal 9 on mswin32/mingw32.
-
-Fri May 11 15:09:52 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ruby.h (rb_string_value): add volatile to avoid compiler warning.
-
- * string.c (rb_string_value): ditto.
-
-Fri May 11 03:35:33 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * README.EXT: Document find_library(), with_config() and
- dir_config().
-
-Fri May 11 03:34:20 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * README.EXT.jp: Remove the description of find_header() because
- such a function does not actually exist.
-
- * README.EXT.jp: Update the description of dir_config().
-
-Fri May 11 02:42:05 2001 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * README, README.jp: Fix CVS access and mailing lists info.
-
-Fri May 11 02:00:44 2001 Ryo HAYASAKA <ryoh@jaist.ac.jp>
-
- * bignum.c (bigdivrem): access boundary bug.
-
-Thu May 10 02:40:47 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): prohibit dumping out singleton classes.
-
- * object.c (rb_mod_to_s): distinguish singleton classes.
-
- * variable.c (rb_class2name): it's ok to reveal NilClass,
- TrueClass, FalseClass.
-
-Wed May 9 14:38:33 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * eval.c (rb_yield_0): preserve and restore ruby_cref as well.
-
-Tue May 8 18:28:19 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/irb.rb lib/irb/multi-irb.rb lib/irb/ruby-lex.rb
- lib/irb/version.rb resolve ctrl-c problem
-
-Tue May 8 17:12:43 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * eval.c (is_defined): core dumped during instance_eval for
- special constants.
-
- * eval.c (rb_eval): ditto.
-
-Tue May 8 08:52:57 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * doc/forwardable.rd, doc/forwardable.rd.jp: Hit `=begin' and
- `=end' in proper places so rd2 can format them without a problem.
-
- * doc/irb/irb-tools.rd.jp, doc/irb/irb.rd, doc/irb/irb.rd.jp:
- ditto.
-
-Tue May 8 08:38:53 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * doc/forwardable.rd, doc/forwardable.rd.jp, lib/forwardable.rb:
- Import forwardable 1.1.
-
-Tue May 8 08:34:33 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * doc/irb/irb-tools.rd.jp, doc/irb/irb.rd.jp: Convert from JIS to
- EUC.
-
-Tue May 8 03:46:39 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * sample/rbc.rb: Obsoleted by IRB.
-
-Mon May 7 15:58:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg): "||=" should not warn for uninitialized instance
- variables.
-
- * eval.c (rb_eval): ditto.
-
- * eval.c (eval): preserve and restore ruby_cref as well.
-
-Mon May 7 15:45:48 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/ftools.rb (syscopy): chmod destination file only if
- it does not exist.
-
-Mon May 7 14:35:57 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_is_instance_of): takes only class/module as an
- argument.
-
-Sun May 6 16:27:29 2001 Koji Arai <JCA02266@nifty.ne.jp>
-
- * eval.c (is_defined): rb_reg_nth_defined() may return Qnil.
-
-Thu May 3 03:15:06 2001 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
-
- * configure.in: get --enable-shared to work on MacOS X.
-
- * Makefile.in: make $(LIBRUBY_SO) depend on miniruby properly.
- Now `make -jN' should work without a problem.
-
-Thu May 3 02:07:45 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * win32/config.h.in: add SIZEOF___INT64 definition.
-
-Wed May 2 20:39:35 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * dir.c (rb_glob, rb_globi): remove unnecessary FNM_PATHNAME.
-
-Wed May 2 11:46:13 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * eval.c (block_pass): should not downgrade safe level.
-
-Wed May 2 03:07:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/dbm/extconf.rb: allow specifying dbm-type explicitly.
-
- * ext/dbm/extconf.rb: avoid gdbm if possible, because it leaks
- memory, whereas gdbm.so doesn't. potential incompatibility.
-
-Wed May 2 02:02:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_insert): new method.
-
-Tue May 1 17:55:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): lex_state after RESCUE_MOD should be EXPR_BEG.
-
-Tue May 1 16:23:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_insert): new method.
-
- * array.c (rb_ary_update): new utility function.
-
-Tue May 1 03:24:05 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/irb/completion.rb, lib/irb/frame.rb, lib/irb/xmp.rb,
- doc/irb/irb-tools.rd.jp: Merge from irb-tools 0.7.1.
-
-Tue May 1 03:07:17 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * sample/irb.rb, lib/irb.rb, lib/irb/*, doc/irb/*: Merge from irb
- 0.7.3.
-
- * instruby.rb: Install help-message's too.
-
- * lib/irb/main.rb: This file is not needed anymore.
-
-Fri Apr 27 09:27:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (set_outfile): should check if closed before assignment.
-
-Thu Apr 26 22:36:11 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: don't use tzname on Cygwin 1.3.1+.
-
- * configure.in: add -mieee/-ieee to CFLAGS on OSF1/Alpha
- to disable "DIVISION BY ZERO" exception.
-
-Thu Apr 26 22:30:43 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): should preserve value of ruby_errinfo.
-
-Thu Apr 26 10:36:09 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_schedule): infinite sleep should not cause
- dead lock.
-
-Wed Apr 25 16:40:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_flatten_bang): proper recursive detection.
-
-Wed Apr 25 15:36:15 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * eval.c (yield_under): need not to prohibit at safe level 4.
-
-Wed Apr 25 15:22:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): p/P packs nil into NULL.
-
- * pack.c (pack_unpack): p/P unpacks NULL into nil.
-
-Tue Apr 24 15:35:32 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): size check for P template.
-
- * ruby.c (set_arg0): wrong predicate when new $0 value is bigger
- than original space.
-
-Tue Apr 24 15:18:49 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/extmk.rb.in, lib/mkmf.rb: (dir_config) do not add the
- specified include directory if already included in $CPPFLAGS.
-
- * ext/extmk.rb.in, lib/mkmf.rb: (dir_config) return a more useful
- value, [include_dir, lib_dir].
-
-Mon Apr 23 14:43:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (id2ref): should use NUM2ULONG()
-
- * object.c (rb_mod_const_get): check whether name is a class
- variable name.
-
- * object.c (rb_mod_const_set): ditto.
-
- * object.c (rb_mod_const_defined): ditto.
-
-Sat Apr 21 22:33:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_float): precision changed to "%.16g"
-
-Sat Apr 21 22:07:58 2001 Guy Decoux <decoux@moulon.inra.fr>
-
- * eval.c (rb_call0): wrong retry behavior.
-
-Fri Apr 20 19:12:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_aref): a bug on long>int architecture.
-
-Fri Apr 20 14:57:15 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * eval.c (rb_eval_string_wrap): should restore ruby_wrapper.
-
-Sun Apr 22 17:44:37 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: add -mieee to CFLAGS on Linux/Alpha
- to disable "DIVISION BY ZERO" exception.
-
- * configure.in: remove -ansi on OSF/1.
-
-Wed Apr 18 04:37:51 2001 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: CGI::Cookie: no use PATH_INFO.
-
-Wed Apr 18 00:24:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_compile_pattern): char class at either edge of range
- should be invalid.
-
-Tue Apr 17 17:33:55 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (handle_rescue): use === to compare exception match.
-
- * error.c (syserr_eqq): comparison between SystemCallErrors should
- based on their error numbers.
-
-Tue Apr 17 16:54:39 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * eval.c (safe_getter): should use INT2NUM().
-
-Tue Apr 17 15:12:56 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big2long): 2**31 cannot fit in 31 bit long.
-
-Sat Apr 14 22:46:43 2001 Guy Decoux <decoux@moulon.inra.fr>
-
- * regex.c (calculate_must_string): wrong length calculation.
-
-Sat Apr 14 13:37:32 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * win32/config.status.in: no longer use missing/alloca.c.
-
- * win32/Makefile.sub: ditto.
-
-Fri Apr 13 12:40:48 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * eval.c (rb_thread_start_0): fixed memory leak.
-
-Fri Apr 13 16:41:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (none): should clear cmdarg_stack too.
-
-Fri Apr 13 06:19:29 2001 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * io.c (rb_fopen): use setvbuf() to avoid recursive malloc() on
- some platforms.
-
-Wed Apr 11 23:36:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_stat_dev): device functions should honor stat field
- types (except long long such as dev_t).
-
-Wed Apr 11 18:07:53 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * eval.c (rb_mod_nesting): should not push nil for nesting array.
-
- * eval.c (rb_mod_s_constants): should not search array by
- rb_mod_const_at() for nil (happens for singleton class).
-
-Wed Apr 11 13:29:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_singleton_class_attached): should modify iv_tbl by
- itself, no longer use rb_iv_set() to avoid freeze check error.
-
- * variable.c (rb_const_get): error message "uninitialized constant
- Foo at Bar::Baz" instead of "uninitialized constantBar::Baz::Foo".
-
-Tue Apr 10 17:52:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_mod_included): new hook called from rb_mod_include().
-
-Tue Apr 10 02:24:40 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * io.c (opt_i_set): should strdup() inplace_edit string.
-
-Mon Apr 9 23:29:54 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (exec_under): need to push cref too.
-
-Mon Apr 9 15:20:21 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_missing): raise NameError for "undefined local
- variable or method".
-
- * error.c (Init_Exception): new exception NoMethodError.
- NameError moved under ScriptError again.
-
- * eval.c (rb_f_missing): use NoMethodError instead of NameError.
-
-Mon Apr 9 12:05:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (Init_File): should redefine "new" class method.
-
-Mon Apr 9 11:56:52 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: fix typo.
-
-Fri Apr 6 01:46:35 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (PUSH_CREF): sharing cref node was problematic. maintain
- runtime cref list instead.
-
- * eval.c (rb_eval): copy defn node before registering.
-
- * eval.c (rb_load): clear ruby_cref before loading.
-
-Thu Apr 5 22:40:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_const_get): no recursion to show full class path
- for modules.
-
- * eval.c (rb_set_safe_level): should set safe level in curr_thread
- as well.
-
- * eval.c (safe_setter): ditto.
-
-Thu Apr 5 13:46:06 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * object.c (rb_obj_is_instance_of): nil belongs to false, not true.
-
-Thu Apr 5 02:19:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (make_time_t): proper (I hope) daylight saving time
- handling for both US and Europe. I HATE DST!
-
- * eval.c (rb_thread_wait_for): non blocked signal interrupt should
- stop the interval.
-
-Wed Apr 4 03:47:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_eq): class check added.
-
- * eval.c (proc_eq): typo fixed ("return" was omitted).
-
- * error.c (Init_Exception): move NameError under StandardError.
-
- * class.c (rb_mod_clone): should copy method bodies too.
-
- * bignum.c (bigdivrem): should trim trailing zero bdigits of
- remainder, even if dd == 0.
-
- * file.c (check3rdbyte): safe string check moved here.
-
-Tue Apr 3 09:56:20 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb.in (create_makefile): create def file only if
- it does not yet exist.
-
- * lib/mkmf.rb: ditto.
-
-Tue Apr 3 00:05:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (make_time_t): remove HAVE_TM_ZONE code since it
- sometimes reports wrong time.
-
- * time.c (make_time_t): remove unnecessary range check for
- platforms where negative time_t is available.
-
-Mon Apr 2 16:52:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (proc_waitall): should push Process::Status instead of
- Fixnum status.
-
- * process.c (waitall_each): should add all entries in pid_tbl.
- these changes are inspired by Koji Arai. Thanks.
-
- * process.c (proc_wait): should not iterate if pid_tbl is 0.
-
- * process.c (proc_waitall): ditto.
-
-Mon Apr 2 14:25:49 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/monitor.rb (wait): ensure reentrance.
-
- * lib/monitor.rb (wait): fix timeout support.
-
-Mon Apr 2 12:40:45 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (media_subtype): return subtype.
-
-Mon Apr 2 12:01:15 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (flag_list): capitalize flags.
-
-Mon Apr 2 01:32:38 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * Makefile.in: Introduce MAINLIBS.
-
- * configure.in: Link libc_r against the ruby executable on
- FreeBSD, which is the first attempt to work around a certain
- problem regarding pthread on FreeBSD. It should make ruby/libruby
- happy when it loads an extension to a library compiled and linked
- with -pthread. Note, however, that libruby is _not_ linked with
- libc_r so as not to mess up pthread unfriendly stuff including
- apache+mod_ruby and vim6+ruby_interp.
-
-Mon Apr 2 01:16:24 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.c: use ruby's opendir on mingw32.
-
- * win32/dir.h, dir.c, Makefile: ditto.
-
-Sun Apr 1 23:26:14 2001 TOYOFUKU Chikanobu <toyofuku@juice.or.jp>
-
- * numeric.c (flodivmod): a bug in no fmod case.
-
-Sun Apr 1 18:36:14 2001 Koji Arai <JCA02266@nifty.ne.jp>
-
- * process.c (pst_wifsignaled): should apply WIFSIGNALED for status
- (int), not st (VALUE).
-
-Sat Mar 31 04:47:55 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: add document and example code.
-
-Sat Mar 31 03:24:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (Init_IO): value of $/ and $\ are no longer restricted to
- strings. type checks are done on demand.
-
- * class.c (rb_include_module): module inclusion should be check
- taints.
-
- * ruby.h (STR2CSTR): replace to StringType() and StringTypePtr().
-
- * ruby.h (rb_str2cstr): ditto.
-
-Fri Mar 30 23:37:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_load): should not copy toplevel local variables. It
- cause variable/method ambiguity. Thanks to L. Peter Deutsch.
-
-Fri Mar 30 22:56:56 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: rename ContinueRequest to ContinuationRequest.
-
-Fri Mar 30 12:51:19 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_include_module): freeze check at first.
-
-Thu Mar 29 17:05:09 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_attr): sprintf() and rb_intern() moved into
- conditional body.
-
-Wed Mar 28 23:43:00 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/extmk.rb.in, lib/mkmf.rb: add C++ rules in addition to C
- rules for the mswin32 platforms.
-
-Wed Mar 28 19:29:21 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/extmk.rb.in, lib/mkmf.rb: move C++ rules to the right place.
-
-Wed Mar 28 17:39:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_str2cstr): warn if string contains \0 and length
- value is ignored.
-
-Wed Mar 28 15:00:31 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * class.c (rb_singleton_class_clone): should copy class constant
- table as well.
-
-Wed Mar 28 14:23:23 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_include_module): sometimes cache was mistakenly left
- uncleared - based on the patch by K.Kosako.
-
- * ruby.h: all Check_SafeStr()'s are replaced by SafeStr() to
- ensure 'to_str' be always effective.
-
-Wed Mar 28 09:52:33 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/Makefile.sub: disable global optimization.
-
-Tue Mar 27 15:00:54 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * eval.c (rb_mod_define_method): should have clear method cache.
-
- * eval.c (rb_mod_define_method): should have raised exception for
- type error.
-
-Tue Mar 27 14:48:17 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h: changed "extern INLINE" to "static inline".
-
-Mon Mar 26 23:19:33 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * time.c (rb_strftime): check whether strftime returns empty string.
-
-Mon Mar 26 21:16:56 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: supports response handlers and multiple commands.
-
-Mon Mar 26 17:21:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c: remove TMP_PROTECT_END to prevent C_ALLOCA crash.
-
-Mon Mar 26 14:04:41 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/Win32API/Win32API.c: remove Init_win32api().
-
-Sun Mar 25 16:52:48 2001 Koji Arai <JCA02266@nifty.ne.jp>
-
- * file.c (rb_file_flock): do not trap EINTR.
-
- * missing/flock.c (flock): returns the value from lockf(2)
- directly.
-
-Sat Mar 24 23:44:50 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ev_const_defined): should ignore toplevel cbase (Object).
-
- * eval.c (ev_const_get): ditto.
-
-Fri Mar 23 17:37:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/md5/md5.h: replace by independent md5 implementation
- contributed by L. Peter Deutsch (thanks).
-
- * ext/md5/md5init.c: adopted to Deutsch's md5 implementation.
-
-Fri Mar 23 17:26:19 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_unpack): string from P/p should be tainted.
-
-Fri Mar 23 12:18:44 2001 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
-
- * ext/curses/curses.c: curses on Mac OS X public beta does not
- have _maxx etc.
-
-Fri Mar 23 10:50:31 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): should truncate trailing zero short for
- bignums.
-
-Fri Mar 23 09:49:02 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (sym_intern): new method.
-
-Thu Mar 22 22:15:45 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/Win32API/extconf.rb: add -fno-omit-frame-pointer.
-
-Thu Mar 22 18:17:36 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_mod_nesting): should not include Object at the
- toplevel.
-
-Thu Mar 22 17:43:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h: better inline function support.
-
- * configure.in (NO_C_INLINE): check if inline is available for the
- C compiler.
-
-Mon Mar 19 11:03:10 2001 Koji Arai <JCA02266@nifty.ne.jp>
-
- * marshal.c (r_object): len calculation patch was wrong for
- machines SIZEOF_BDIGITS == SIZEOF_SHORT.
-
- * gc.c: alloca prototype reorganized for C_ALLOCA machine.
-
-Wed Mar 21 23:07:45 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.c (win32_stat): WinNT/2k "//host/share" support.
-
-Wed Mar 21 08:05:35 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * win32/dir.h: replace missing/dir.h .
-
- * win32/win32.h: ditto.
-
- * win32/win32.c: ditto.
-
-Wed Mar 21 01:26:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (id2ref): sometimes confused symbol and reference.
-
-Tue Mar 20 23:09:33 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.c (win32_stat): UNC support.
-
- * dir.c (extract_path): fix "./*" problem.
-
-Tue Mar 20 15:10:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (glob_helper): breaks loop after calling recursive
- glob_helper; all wild cards should be consumed; no need for
- further match.
-
- * dir.c (dir_s_glob): gives warning if no match found.
-
-Tue Mar 20 14:13:45 2001 Koji Arai <JCA02266@nifty.ne.jp>
-
- * object.c (sym_inspect): did allocate extra byte space.
-
-Mon Mar 19 19:14:47 2001 Guy Decoux <decoux@moulon.inra.fr>
-
- * marshal.c (shortlen): shortlen should return number of bytes
- written.
-
-Mon Mar 19 16:52:23 2001 K.Kosako <kosako@sofnec.co.jp>
-
- * eval.c (ev_const_defined): need not to check if cbase->nd_class
- is rb_cObject.
-
- * eval.c (ev_const_get): ditto.
-
-Mon Mar 19 17:11:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_zone): return "UTC" for UTC time objects.
-
-Mon Mar 19 16:27:32 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (THREAD_ALLOC): flags should be initialized.
-
- * signal.c (rb_f_kill): should use FIX2INT, not FIX2UINT.
-
-Mon Mar 19 10:55:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (glob_helper): replace lstat() by stat() to follow symlink
- in the case like 'symlink/*'.
-
- * dir.c (glob_helper): gave warning too much.
-
-Sun Mar 18 08:58:18 2001 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: // === '' --> //.match('')
-
- * lib/cgi.rb: cgi#header(): improvement for mod_ruby.
-
- * lib/cgi.rb: cgi#rfc1123date(): improvement.
- thanks to TADA Tadashi <sho@spc.gr.jp>.
-
- * lib/cgi.rb: cgi#rfc1123date(): document bug fix.
- thanks to Kazuhiro NISHIYAMA <zn@mbf.nifty.com>.
-
- * lib/cgi.rb: cgi#header(): bug fix.
- thanks to IWATSUKI Hiroyuki <don@na.rim.or.jp>.
-
-Sat Mar 17 11:11:24 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (glob_helper): * should follow symlink, whereas ** should
- not follow.
-
-Thu Mar 15 01:28:02 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (dir_s_chdir): block form of Dir.chdir. (RCR#U016).
-
-Fri Mar 16 17:14:17 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * configure.in: Set SOLIBS properly for all ELF and
- FreeBSD/NetBSD/OpenBSD a.out platforms so that the shlib
- dependencies are recorded in the libruby shlib.
-
-Wed Mar 14 16:41:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_schedule): raise FATAL just once to
- THREAD_TO_KILL.
-
-Wed Mar 14 10:41:34 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): 0 (= Qfalse) is a valid value, so that
- default self should be checked by klass == 0.
-
- * bignum.c (rb_cstr2inum): should disallow '++1', '+-1', etc.
-
-Tue Mar 13 17:51:09 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ev_const_defined): add new parameter self for special
- const fallback.
-
- * eval.c (ev_const_get): ditto.
-
-Tue Mar 13 16:39:45 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * dir.c (rb_glob_helper): fix drive letter handling on DOSISH.
-
-Tue Mar 13 14:54:39 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/http.rb: add HTTPRequest#basic_auth.
-
- * lib/net/smtp.rb: raise if only account or password is given.
-
- * lib/net/protocol.rb: WriteAdapter#<< returns self.
-
-Tue Mar 13 14:41:16 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_seek_m): wrong calling sequence of rb_io_seek().
-
-Tue Mar 13 09:14:19 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (cond0): no special treatment of string literal in
- condition.
-
-Mon Mar 12 18:59:38 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): save/restore $libs and $LIBPATH.
-
-Sun Mar 11 18:13:34 2001 Masahiro Tanaka <masa@stars.gsfc.nasa.gov>
-
- * math.c: add acos, asin, atan, conh, sinh, tanh and hypot to Math.
-
- * configure.in: check hypot availability.
-
- * missing/hypot.c: public domain rewrite of hypot.
-
-Sun Mar 11 13:21:04 2001 Koji Arai <JCA02266@nifty.ne.jp>
-
- * parse.y (warn_unless_e_option): warning condition was wrong.
-
- * parse.y (warning_unless_e_option): ditto.
-
-Sun Mar 11 00:55:31 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/mkmf.rb (install_rb): fix handling of destination path.
-
-Sat Mar 10 22:56:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_all): new method 'all?', which returns true if
- block returns true for all elements.
-
- * enum.c (enum_any): new method 'any?', which returns true if
- block returns true for any of elements.
-
-Sat Mar 10 02:34:18 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * math.c (math_log, math_log10): use nan() instead of 0.0/0.0 on Cygwin.
-
-Fri Mar 9 09:56:19 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (marshal_load): do not give warning unless explicitly
- set to verbose.
-
-Fri Mar 9 02:07:53 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_exit): give string value "exit" to SystemExit.
-
- * ruby.c (proc_options): -v should not print version if
- proc_options called via moreswitches().
-
-Thu Mar 8 17:45:19 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb: one write(2) per one line.
-
-Wed Mar 7 14:26:11 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * math.c (math_log, math_log10): should return NaN if x < 0.0
- on Cygwin.
-
-Thu Mar 7 10:31:26 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * parse.y (stmt): while/until modifier must work for empty body.
-
-Tue Mar 6 22:53:58 2001 Kazuhiro Yoshida <moriq.kazuhiro@nifty.ne.jp>
-
- * ruby.c (ruby_set_argv): clear ARGV contents before adding args.
-
-Tue Mar 6 10:50:29 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (primary): rescue and ensure clauses should be allowed
- to appear in singleton method body.
-
-Mon Mar 5 17:25:13 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_eq): compare Procs using blocktag equality.
-
- * eval.c (proc_to_s): stringify according to block tag address.
-
-Mon Mar 5 17:19:56 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.c (gettimeofday): use GetLocalTime() instead of ftime()
- for high-resolution timing.
-
-Sun Mar 4 17:01:09 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * string.c (trnext): support backslash escape in String#tr.
-
-Sat Mar 3 16:15:16 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): push cbase if ruby_cbase != ruby_class, for
- example in the case NODE_DEFN/NODE_DEFS are called within
- module_eval.
-
-Wed Feb 28 11:02:41 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_delete_bang): delete! should take at least 1
- argument.
-
- * ruby.c (load_file): add rb_gc() after loading to avoid
- extraordinary memory growth.
-
-Wed Feb 28 05:01:40 2001 Koji Arai <JCA02266@nifty.ne.jp>
-
- * dir.c (rb_glob_helper): "./foo" should match "foo", not "./foo".
-
-Tue Feb 27 16:38:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ev_const_get): retrieve Object's constant if no current
- class is available (e.g. defining singleton class for Fixnums).
-
- * eval.c (ev_const_defined): check Object's constant if no current
- class is available (e.g. defining singleton class for Fixnums).
-
- * time.c (time_timeval): negative time interval should not be
- allowed.
-
- * eval.c (proc_call): ignore block to `call' always, despite of
- being orphan or not.
-
-Wed Feb 27 10:16:32 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_yield_0): should check based on rb_block_given_p()
- and rb_f_block_given_p().
-
-Tue Feb 27 04:13:45 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * configure.in (frame-address): --enable-frame-address to allow
- __builtin_frame_address() to be used.
-
- * eval.c (stack_length): use __builtin_frame_address() based on
- the macro USE_BUILTIN_FRAME_ADDRESS.
-
- * gc.c (rb_gc): ditto.
-
- * gc.c (Init_stack): ditto.
-
-Mon Feb 26 16:20:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (proc_options): call ruby_show_version() just once.
-
- * dir.c (dir_s_open): returns the value from a block (if given).
-
-Mon Feb 26 14:29:04 2001 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/extmk.rb.in, lib/mkmf.rb: add C++ rules in addition to C
- rules.
-
-Mon Feb 26 00:04:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_call): should not modify ruby_block->frame.iter
- based on ruby_frame->iter altered by PUSH_ITER().
-
-Mon Feb 26 05:27:52 2001 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/net/telnet.rb: #telnetmode(), #binmode(): bug fix.
- thanks to nobu.nakada@nifty.ne.jp.
-
-Mon Feb 26 04:55:50 2001 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: CGI#form(): bug fix.
- thanks to MoonWolf <moonwolf@moonwolf.com>.
-
- * lib/cgi.rb: CGI#rfc1123_date(): improvement.
- thanks to Tomoyasu Akita <genzo-@dm4lab.to>.
-
- * lib/cgi.rb: CGI#header(): improvement for mod_ruby.
- thanks to Shugo Maeda <shugo@ruby-lang.org>.
-
-Sun Feb 25 02:45:30 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * file.c (rb_file_s_rename): avoid Cygwin's bug.
-
-Sat Feb 24 23:32:55 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_fd_close): should save current context before
- raising exception.
-
-Sat Feb 24 22:14:00 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.c (myrename): fix error handling.
-
-Sat Feb 24 13:58:48 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/http.rb: always close connection on request without
- body.
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: change copyright.
-
-Sat Feb 24 03:15:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (set_stdin): preserve original stdin.
-
- * io.c (set_outfile): preserve original stdout/stderr.
-
-Fri Feb 23 08:28:58 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb: clear read buffer after reopen.
-
- * lib/net/protocol.rb: refactoring.
-
- * lib/net/http.rb: split module HTTPHeader from HTTPResponse.
-
-Tue Feb 20 23:45:35 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * process.c: add W* macro if not available.
-
-Tue Feb 20 16:37:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in: add check for negative time_t for gmtime(3).
-
- * time.c (time_new_internal): no positive check if gmtime(3) can
- handle negative time_t.
-
- * time.c (time_timeval): ditto.
-
- * bignum.c (rb_big2long): should not raise RangeError for Bignum
- LONG_MIN value.
-
-Mon Feb 19 17:46:37 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_substr): "a"[1,2] should return ""; need
- rubicon upgrade.
-
-Mon Feb 19 12:10:36 2001 Triet H. Lai <thlai@mail.usyd.edu.au>
-
- * error.c (rb_sys_warning): new function to give warning with
- strerror() message.
-
- * dir.c (rb_glob_helper): better error handling, along with
- performance tune.
-
-Mon Feb 19 01:55:43 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (secure_visibility): visibility check for untainted modules.
-
-Mon Feb 19 00:29:29 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * signal.c (sigpipe): sighandler which does nothing.
-
- * signal.c (trap): set sigpipe function for SIGPIPE.
-
- * signal.c (Init_signal): default SIGPIPE handler should be
- sigpipe function.
-
-Sun Feb 18 15:42:38 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/curses/extconf.rb: add dir_config.
-
- * missing/flock.c: use fcntl(2) instead of lockf(2).
-
-Sun Feb 18 05:46:03 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/http.rb: Response#range_length was not debugged.
-
-Sun Feb 18 04:02:03 2001 Yasushi Shoji <yashi@yashi.com>
-
- * array.c (rb_ary_subseq): wrong boundary check.
-
-Sun Feb 18 00:09:50 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * win32/win32.c: make file I/O faster on mswin32/mingw32.
-
- * win32/win32.h: ditto.
-
- * rubysig.h: ditto.
-
-Sat Feb 17 23:32:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (cond0): integer literal in condition should not be
- compared to lineno ($.).
-
-Fri Feb 16 01:44:56 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (set_outfile): f should be the FILE* from the assigning value.
-
- * ext/socket/socket.c (tcp_s_open): should not give default value
- to local_host.
-
- * time.c (time_s_times): move to Process::times.
-
- * file.c (rb_file_s_lchmod): new method File::lchmod.
-
- * file.c (rb_file_s_lchown): new method File::lchown.
-
-Thu Feb 15 11:33:49 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/cgi/session.rb (close): fixed reversed condition.
-
-Thu Feb 15 08:34:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (proc_waitall): new method based on a patch from Brian
- Fundakowski Feldman <green@green.dyndns.org>.
-
- * process.c (last_status_set): objectify $? value (Process::Status).
-
-Wed Feb 14 17:28:24 2001 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: supports unknown resp_text_code.
-
-Wed Feb 14 00:44:17 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (dir_s_glob): support backslash escape of metacharacters
- and delimiters.
-
- * dir.c (remove_backslases): remove backslashes from path before
- calling stat(2).
-
- * dir.c (dir_s_glob): call rb_yield directly (via push_pattern) if
- block is given to the method.
-
- * dir.c (push_pattern): do not call rb_ary_push; yield directly.
-
- * eval.c (blk_copy_prev): reduced ALLOC_N too much.
-
- * eval.c (frame_dup): ditto.
-
-Tue Feb 13 23:05:38 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * dir.c (lstat): should use rb_sys_stat if lstat(2) is not
- available.
-
-Tue Feb 13 08:43:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_ctl): do not call ioctl/fcntl for f2, if f and f2
- have same fileno.
-
-Tue Feb 13 01:13:43 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_load): raise LocalJumpError if unexpected local jumps
- appear during load.
-
- * ext/socket/socket.c (bsock_close_read): don't call rb_thread_fd_close();
- it's supposed to be called by io_io_close().
-
- * ext/socket/socket.c (bsock_close_read): do not modify f and f2.
-
- * ext/socket/socket.c (bsock_close_write): ditto.
-
- * ext/socket/socket.c (sock_new): avoid dup(2) on sockets.
-
- * parse.y (primary): preserve and clear in_single and in_def using
- stack to prevent nested method errors in singleton class bodies.
-
-Sun Feb 11 16:00:30 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * eval.c (stack_length): use __builtin_frame_address() only if
- GCC and i386 CPU.
-
- * gc.c (rb_gc, Init_stack): ditto.
-
- * configure.in: add ac_cv_func_getpgrp_void=yes on DJGPP.
-
-Sat Feb 10 23:43:49 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * hash.c (rb_any_hash): dumped core on machines sizeof(int) != sizeof(long).
-
-Sat Feb 10 23:07:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_s_for_fd): IO::for_fd(fd) - new method.
-
- * regex.c (PREV_IS_A_LETTER): should not treat c>0x7f as a word
- character if -Kn.
-
-Sat Feb 10 00:00:30 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * win32/win32.c (win32_stat): replace stat to enable when pathname
- ends with '/' or '\' for mswin32 on Win9X / Win2k.
-
- * win32/win32.h: ditto.
-
- * ruby.h: ditto.
-
- * dir.c (rb_glob_helper): ditto.
-
- * file.c (rb_stat, rb_file_s_stat, eaccess, check3rdbyte): ditto.
-
-Fri Feb 9 22:54:57 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ruby.c (ruby_init_loadpath): convert '\\' to '/'
- before finding executable file path.
-
-Fri Feb 9 17:41:53 2001 Triet H. Lai <thlai@mail.usyd.edu.au>
-
- * dir.c (rb_glob_helper): do not follow symbolic links.
-
-Thu Feb 8 21:27:24 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/mkmf.rb (install_rb): fix handling of relative path.
-
- * lib/mkmf.rb (create_makefile): add srcdir.
-
-Thu Feb 8 02:22:09 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/http.rb: join HTTPReadResponse into HTTPResponse again.
-
- * lib/net/http.rb: move http_version() from HTTPRequest to
- HTTPResponse.
-
- * lib/net/protocol.rb: refactoring.
-
-Wed Feb 7 16:27:27 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/http.rb: split HTTPResponse into HTTPReadResponse
- module.
-
- * lib/net/protocol.rb: add Net::net_private.
-
- * lib/net/protocol.rb: Socket#reopen takes arg, open_timeout.
-
-Wed Feb 7 16:05:22 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * parse.y (parse_quotedwords): %w should allow parenthesis escape.
-
-Wed Feb 7 00:57:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parse_qstring): %q should allow terminator escape.
-
- * re.c (rb_reg_options): new method to give an option values.
-
- * parse.y (cond0): disable special treating of integer literal in
- conditional unless option -e is supplied. changes current
- behavior. experimental.
-
- * parse.y (cond0): give warning for string/integer literals and
- dot operators in conditionals unless option -e is supplied.
-
- * re.c (rb_reg_equal): all option flags should be same to be equal.
-
-Tue Feb 6 21:30:44 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/http.rb: call on_connect() on re-opening socket.
-
- * lib/net/pop.rb: also POP3 can use APOP auth.
-
-Tue Feb 6 20:19:10 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/http.rb: add HTTP#request.
-
- * lib/net/http.rb: take HTTP 1.0 server into account (incomplete).
-
- * lib/net/protocol.rb: timeout for open/read.
-
- * lib/net/protocol.rb: add Protocol#on_connect,on_disconnect.
-
-Mon Feb 5 23:15:46 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (Init_Exception): make Interrupt a subclass of
- SignalException.
-
-Mon Feb 5 00:39:06 2001 KANEKO Naoshi <wbs01621@mail.wbs.ne.jp>
-
- * dir.c: use ISXXX() instead of isxxx().
-
- * dln.c (aix_loaderror): ditto.
-
- * file.c (rb_file_s_expand_path): ditto.
-
- * string.c (rb_str_upcase_bang): ditto.
-
- * win32/win32.c (do_spawn): ditto.
-
- * win32/win32.c (NtMakeCmdVector): ditto.
-
- * win32/win32.c (opendir): ditto.
-
-Sat Feb 3 14:44:53 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * configure.in (AC_C_INLINE): check inline attribute.
-
- * gc.c (is_pointer_to_heap): use inline rather than __inline__.
-
- * pack.c (hex2num): ditto.
-
- * ruby.h (rb_class_of, rb_type, rb_special_const_p): ditto.
-
- * util.c (rb_class_of, rb_type, rb_special_const_p): defined in
- ruby.h.
-
-Fri Feb 2 16:14:51 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_sort_bang): returns self, even if its length is
- less than 2.
-
- * eval.c (POP_VARS): propagate DVAR_DONT_RECYCLE, if
- SCOPE_DONT_RECYCLE of ruby_scope is set.
-
-Wed Jan 31 22:27:29 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: gcc-2.95.2-7(Cygwin) support.
- add -mwin32 if available.
-
- * cygwin/GNUmakefile: ditto.
-
-Tue Jan 30 17:56:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_fetch): new method.
-
-Mon Jan 29 17:36:19 2001 TOYOFUKU Chikanobu <toyofuku@juice.or.jp>
-
- * eval.c (rb_eval): nd_iter evaluation should be wrapped by
- BEGIN_CALLARGS and END_CALLARGS.
-
-Mon Jan 29 14:25:39 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (block_pass): return from block jumps directory to
- block invoker.
-
-Mon Jan 29 01:40:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_independent): should not clear str->orig here.
- it's too early.
-
-Fri Jan 26 01:42:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: clarify do ambiguity, bit more complex but natural
- from my point of view.
-
-Wed Jan 24 14:58:08 2001 Akinori MUSHA <knu@ruby-lang.org>
-
- * lib/cgi.rb: fix the problem that when running under mod_ruby
- header() outputs only one Set-Cookie line.
-
-Wed Jan 24 01:45:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (POP_BLOCK_TAG): call rb_gc_force_recycle() if block has
- not been objectified.
-
- * eval.c (rb_callcc): should nail down block->tag history to avoid
- rb_gc_force_recycle().
-
-Tue Jan 23 18:51:57 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_gc_call_finalizer_at_exit): should finalize objects in
- deferred_final_list too.
-
-Tue Jan 23 16:10:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (os_live_obj): do not list terminated object.
-
- * gc.c (os_obj_of): ditto.
-
- * gc.c (rb_gc_mark): support new T_BLKTAG tag.
-
- * gc.c (obj_free): ditto.
-
- * eval.c (new_blktag): creation of new block tag, which holds
- destination of global jump and orphan status.
-
- * eval.c (block_pass): break from orphan Proc object will raise a
- LocalJumpError exception.
-
-Mon Jan 22 16:33:16 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * mkconfig.rb: autoconf 2.49 support.
-
-Mon Jan 22 00:32:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (block_pass): behavior consistency with proc_call(). do
- not propagate `break'.
-
-Sat Jan 20 03:54:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): fixed serious syntax misbehavior. do's
- preceding was too high. a block in `foo bar do .. end' should
- be passed to `foo', not `bar'.
-
- * parse.y (block_call): syntax restructure.
-
-Thu Jan 18 04:28:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_s_read): new method to call IO#read from
- pathname. In addition, it accepts third optional argument to
- specify starting point.
-
-Wed Jan 17 13:28:26 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: remove DEFS definition.
-
- * mkconfig.rb: ditto.
-
- * win32/config.status.in: ditto.
-
-Tue Jan 16 17:00:50 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb: ignore EOFError for read.
-
- * lib/net/http.rb: user specified header was not used.
-
-Mon Jan 15 16:00:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_unpack): should check associated pointer packed by
- pack("P"). Thus pointers can be retrieved only from pointer
- packed strings. restriction added.
-
-Sun Jan 14 21:49:28 2001 Koji Arai <JCA02266@nifty.ne.jp>
-
- * sprintf.c (rb_f_sprintf): simple typo. binary base should be 2,
- not '2'.
-
- * re.c (rb_reg_s_last_match): should explicitly return nth match.
-
-Sun Jan 14 18:21:30 2001 Usaku Nakamura <usa@osb.att.ne.jp>
-
- * win32/config.status.in: add some field.
-
- * win32/win32.c (isInternalCmd): ignore case for shell's internal
- command.
-
- * win32/win32.c (do_spawn): recognize quoted command line.
-
-Sun Jan 14 04:10:27 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb (adding): too few "yield" in case of arg is
- not String/File.
-
- * lib/net/http.rb: add http request object.
-
-Sat Jan 13 19:39:30 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * re.c (rb_reg_desc): separate RE_OPTION_MULTILINE
-
- * re.c (rb_reg_options): add RE_OPTION_{POSIXLINE,RE_OPTION_MULTILINE,
- RE_OPTION_EXTENDED}
-
-Thu Jan 11 10:45:04 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.h, win32/config.h.in: move NORETURN from win32.h
- to config.h.in.
-
- * win32/config.h.in (inline): renamed from INLINE.
-
- * djgpp/config.hin (INLINE): removed.
-
-Thu Jan 11 06:45:55 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_mod_dup): should propagate FL_SINGLETON.
-
- * object.c (inspect_obj): handles the case of no instance variable.
-
-Wed Jan 10 16:15:08 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ruby.h: NORETURN macro is changed for VC++ 6.0.
-
- * eval.c, intern.h: ditto.
-
- * djgpp/config.hin, win32/win32.h: ditto.
-
- * configure.in: ditto.
-
-Wed Jan 10 13:54:53 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * process.c (proc_setuid): use setresuid() if available.
-
- * process.c (proc_setgid): use setresgid() if available.
-
- * configure.in: ditto.
-
-Wed Jan 10 01:50:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in (AC_C_INLINE): check inline attribute.
-
- * string.c (rb_str_reverse_bang): forgot to call rb_str_modify().
-
-Tue Jan 9 17:41:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_taint): check frozen status before modifying
- taint status.
-
- * object.c (rb_obj_untaint): ditto.
-
-Tue Jan 9 16:22:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_inject): new method.
-
-Tue Jan 9 02:16:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_gc_call_finalizer_at_exit): clear klass member of
- terminating object.
-
- * eval.c (rb_call): raise exception for terminated object.
-
-Mon Jan 8 21:24:37 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigdivrem): t2 might be too big for signed long; do
- not use rb_int2big(), but rb_uint2big().
-
-Mon Jan 8 21:35:10 2001 Guy Decoux <decoux@moulon.inra.fr>
-
- * file.c (path_check_1): should restore modified path.
-
-Mon Jan 8 03:09:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (rb_load_fail): new func to report LoadError.
-
- * ruby.c (load_file): use rb_load_fail.
-
-Sat Jan 6 00:17:18 2001 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * pack.c (pack_pack): avoid infinite loop(pack 'm2').
-
-Fri Jan 5 01:02:17 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ruby_finalize): should enclosed by PUSH_TAG/POP_TAG.
-
- * gc.c (rb_gc_mark): link 2 of NODE_IFUNC should not be explicitly
- marked. it may contain non object pointer.
-
-Tue Jan 2 00:20:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (reg_s_last_match): Regexp::last_match(nth) returns nth
- substring of the match (alternative for $& and $<digit>).
-
-Sun Dec 31 01:39:16 2000 Guy Decoux <decoux@moulon.inra.fr>
-
- * eval.c (rb_mod_define_method): wrong comparison for blocks.
-
-Sat Dec 30 19:28:50 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (id2ref): should handle Symbol too.
-
- * gc.c (id2ref): should print original ptr value
-
-Sat Dec 30 03:14:22 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_iterate): NODE_CFUNC does not protect its data
- (nd_tval), so create new node NODE_IFUNC for iteration C
- function.
-
- * eval.c (rb_yield_0): use NODE_IFUNC.
-
- * gc.c (rb_gc_mark): support NODE_IFUNC.
-
-Fri Dec 29 11:41:55 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (mem_error): prohibit recursive mem_error().
- (ruby-bugs-ja:PR#36)
-
-Fri Dec 29 11:05:41 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_fd_writable): should not switch context if
- rb_thread_critical is set.
-
- * eval.c (rb_thread_wait_fd): ditto.
-
- * eval.c (rb_thread_wait_for): ditto.
-
- * eval.c (rb_thread_select): ditto.
-
- * eval.c (rb_thread_join): join during critical section causes
- deadlock.
-
-Fri Dec 29 00:38:46 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * m17n.c: new file - core functions of M17N.
-
-Tue Dec 26 18:46:41 2000 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
-
- * lib/debug.rb: Avoid thread deadlock in debugging stopped thread.
-
- * lib/debug.rb: Uncleared 'finish' state.
-
-Tue Dec 26 16:53:55 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): remove dvar node by rb_gc_force_recycle()
- more eagerly.
-
- * eval.c (rb_f_binding): recycling should be stopped for outer
- scope too.
-
- * eval.c (proc_new): ditto.
-
-Tue Dec 26 15:45:35 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_inspect): should treat multibyte characters
- properly.
-
-Mon Dec 25 17:49:08 2000 K.Kosako <kosako@sofnec.co.jp>
-
- * string.c (rb_str_replace_m): unexpected string share happens if
- replace is done for associated (STR_NO_ORIG) string.
-
-Tue Dec 26 15:01:53 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_p): should not call rb_io_flush() if rb_defout is not
- a IO (T_FILE).
-
-Mon Dec 25 15:52:39 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * stable version 1.6.2 released.
-
-Mon Dec 25 05:11:04 2000 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: version 2.1.2 (some bug fixes).
-
- * lib/cgi.rb: Regexp::last_match[1] --> $1
-
- * lib/net/telnet.rb: ditto.
-
-Mon Dec 25 04:43:02 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/http.rb: does not send HEAD on closing socket.
-
-Mon Dec 25 00:44:48 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_any_cmp): should use rb_str_cmp() if TYPE == T_STRING
- and CLASS_OF == rb_cString.
-
- * string.c (rb_str_new4): should copy class of original too.
-
-Mon Dec 25 00:04:54 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_thread_schedule): initial value of `max' changed to -1.
-
-Mon Dec 25 00:16:14 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_replace_m): copy-on-write replace.
-
- * parse.y (yylex): should handle => after identifier as well as ==
- and =~.
-
-Sat Dec 23 23:55:57 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_cstr2inum): Integer("") should not return 0.
-
-Sat Dec 23 11:55:57 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_and): Array#& should preserve original order.
-
-Sat Dec 23 03:44:16 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb: set @closed false in Socket#reopen.
-
- * lib/net/pop.rb: add POP3.foreach, delete_all.
-
- * lib/net/pop.rb: add POP3#delete_all.
-
- * lib/net/http.rb: add HTTP.version_1_1, version_1_2
-
- * lib/net/http.rb: refactoring.
-
-Fri Dec 22 23:11:12 2000 Ueno Katsuhiro <unnie@blue.sky.or.jp>
-
- * eval.c (rb_feature_p): ext might be null.
-
-Fri Dec 22 17:04:12 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * win32/win32.c (myselect): avoid busy loop by adjusting fd_count.
-
-Fri Dec 22 15:07:55 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_cstr2inum): prefix like '0x' had removed too much.
-
-Thu Dec 21 13:01:46 2000 Tanaka Akira <akr@m17n.org>
-
- * lib/net/ftp.rb (makeport): don't use TCPsocket.getaddress.
-
-Wed Dec 20 12:00:15 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_lshift): should cast up to BDIGIT_DBL.
-
- * parse.y (yylex): disallow trailing '_' for numeric literals.
-
- * bignum.c (rb_cstr2inum): allow `_' within converting string.
-
- * eval.c (specific_eval): should take no argument if block is
- supplied.
-
-Tue Dec 19 13:44:50 2000 K.Kosako <kosako@sofnec.co.jp>
-
- * io.c (rb_f_p): should flush rb_defout, not stdout.
-
-Tue Dec 19 00:57:10 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_minus): usec might overflow. (ruby-bugs-ja:PR#35)
-
- * eval.c (rb_obj_extend): Object#extend should take at least one
- argument.
-
- * parse.y (mrhs_basic): should check value_expr($3), not $1.
-
-Mon Dec 18 23:18:39 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * util.c (mblen, __crt0_glob_function): add for multibyte
- on DJGPP 2.03.
-
-Mon Dec 18 18:10:30 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_plus): usec might underflow (ruby-bugs-ja:#PR33).
-
-Mon Dec 18 08:11:20 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_set_default): should call rb_hash_modify().
-
-Sat Dec 16 02:58:26 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * eval.c (rb_eval): should clear ruby_errinfo on retry.
-
- * eval.c (rb_rescue2): ditto.
-
-Thu Dec 14 13:06:18 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * class.c (rb_include_module): prohibit frozen class/module.
-
- * eval.c (rb_frozen_class_p): make external.
-
- * intern.h (rb_frozen_class_p): prototyped.
-
- * intern.h (rb_undef): prototyped not but rb_undef_method()
- which is also in ruby.h.
-
-Thu Dec 14 09:20:26 2000 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: support -T1 on ruby 1.6.2
-
- * lib/cgi.rb: $1 --> Regexp::last_match[1]
-
- * lib/net/telnet.rb: ditto.
-
-Wed Dec 13 23:27:06 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): handles case statement without expr, which
- looks for any TRUE (non nil, non false) when expression.
-
- * parse.y (primary): case expression should not be compstmt, but
- mere expr.
-
- * parse.y (primary): case without following expression is now
- separated rule.
-
-Wed Dec 13 12:41:27 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ruby.c (proc_options): accept "--^M" for DOS line endings.
-
-Tue Dec 12 15:45:42 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (newline_node): cancel newline unification.
-
-Mon Dec 11 23:01:57 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): supports cases `?' precedes EOF and newline.
-
-Mon Dec 11 12:11:25 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (call_end_proc): some frame members were left
- uninitialized.
-
-Mon Dec 11 01:14:58 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_fptr_finalize): do not fclose stdin, stdout and
- stderr at exit.
-
-Sat Dec 9 17:34:48 2000 Tachino Nobuhiro <tachino@open.nm.fujitsu.co.jp>
-
- * time.c (time_cmp): should check with kind_of?, not instance_of?
-
- * time.c (time_eql): ditto.
-
- * time.c (time_minus): ditto.
-
-Fri Dec 8 17:23:25 2000 Tachino Nobuhiro <tachino@open.nm.fujitsu.co.jp>
-
- * sprintf.c (rb_f_sprintf): proper string precision treat.
-
-Fri Dec 8 10:44:05 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_mod_remove_cvar): Module#remove_class_variable
- added.
-
-Thu Dec 7 17:35:51 2000 Shugo Maeda <shugo@ruby-lang.org>
-
- * eval.c (stack_length): don't use __builtin_frame_address() on alpha.
-
-Wed Dec 6 18:07:13 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * djgpp/config.sed, win32/Makefile.sub: typo.
-
- * eval.c (rb_mod_define_method): avoid VC4.0 warnings.
-
-Wed Dec 6 13:38:08 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_and): tuning, make hash from shorter operand.
-
-Wed Dec 6 01:28:50 2000 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
-
- * gc.c (rb_gc): __builtin_frame_address() should not be used on
- MacOS X.
-
- * gc.c (Init_stack): ditto.
-
-Mon Dec 4 13:44:01 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/jcode.rb: consider multibyte. not /n.
-
-Mon Dec 4 09:49:36 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_inspect): output whole string contents. no more `...'
-
- * string.c (rb_str_dump): should propagate taintness.
-
- * hash.c (env_inspect): hash like human readable output.
-
- * variable.c (rb_ivar_get): prohibiting instance variable access
- is too much restriction.
-
- * class.c (method_list): retrieving information should not be
- restricted where $SAFE=4.
-
- * class.c (rb_obj_singleton_methods): ditto.
-
- * eval.c (rb_thread_priority): ditto.
-
- * eval.c (rb_thread_local_aref): ditto.
-
- * variable.c (rb_obj_instance_variables): ditto.
-
- * variable.c (rb_mod_const_at): ditto.
-
- * variable.c (rb_mod_class_variables): ditto.
-
- * eval.c (rb_exec_end_proc): end_proc should be preserved.
-
-Sat Dec 2 22:32:43 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): || should accept exactly zero argument.
-
- * parse.y (stmt): multiple right hand side for single assignment
- (e.g. a = 1,2) is allowed.
-
-Wed Nov 29 07:55:29 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_long): dumping long should be smaller than 32bit max.
-
- * marshal.c (w_long): shorter long format for small integers(-123..122).
-
- * marshal.c (r_long): ditto.
-
-Tue Nov 28 18:10:51 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_mod_define_method): quick hack to implement
- on-the-fly method definition. experimental.
-
-Mon Nov 27 17:00:35 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): should not redefine builtin classes/modules
- from within wrapped load.
-
-Mon Nov 27 08:57:33 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (call_end_proc): should be isolated from outer block.
-
-Mon Nov 27 00:10:08 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_ctl): call ioctl/fcntl for fptr->f2 too.
-
- * process.c (rb_f_fork): call rb_thread_atfork() after creating
- child process.
-
- * eval.c (rb_thread_atfork): kill all other threads immediately,
- then turn the current thread into the main thread.
-
-Sat Nov 25 23:12:22 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ruby_run): move calling point of rb_trap_exit after
- cleaning up threads.
-
- * eval.c (ruby_finalize): new function to call EXIT trap, END
- procs and GC finalizers.
-
- * eval.c (rb_exec_end_proc): prevent recursion.
-
- * gc.c (rb_gc_call_finalizer_at_exit): ditto.
-
- * signal.c (rb_trap_exit): ditto. made static.
-
- * process.c (rb_f_fork): should swallow all exceptions from block
- execution.
-
- * process.c (fork_rescue): should call ruby_finalize().
-
- * parse.y (yycompile): rb_gc() removed. I don't remember why I put
- this here. test code?
-
-Fri Nov 24 22:03:48 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (EXCL): exclusive information is now stored in an
- instance variable. this enables proper marshal dump.
-
- * process.c (proc_waitpid): should clear rb_last_status ($?) if
- no pid was given by waitpid(2).
-
-Thu Nov 23 01:35:38 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (proc_waitpid2): returns nil if no pid found.
-
-Wed Nov 22 23:45:15 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_eq): new method. Compares start and end of range
- respectively.
-
-Wed Nov 22 11:01:32 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_mod_class_variables): should honor singleton
- class variable rule defined yesterday.
-
-Tue Nov 21 23:24:14 2000 Mitsuteru S Nakao <nakao@kuicr.kyoto-u.ac.jp>
-
- * numeric.c (flodivmod): missing second operand (typo).
-
-Tue Nov 21 03:39:41 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (marshal_load): marshal format compatibility check
- revised. greater minor revision is UPWARD compatible;
- downward compatibility is not assured.
-
- * eval.c (is_defined): clarify class variable behavior for
- singleton classes. class variables within singleton class
- should be treated like within singleton method.
-
-Mon Nov 20 13:45:21 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): set ruby_sourceline before evaluating
- exceptions.
-
- * gc.c (gc_sweep): defer finalization in GC during compilation or
- interrupt prohibit section.
-
- * gc.c (gc_sweep): mark all nodes before sweeping if GC happened
- during compilation.
-
- * eval.c (rb_eval): should treat class variables specially in a
- method defined in the singleton class.
-
-Mon Nov 20 10:20:21 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * dir.c, win32/win32.c, ruby.h: add rb_iglob().
-
-Mon Nov 20 00:18:16 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_subseq): should return nil for outbound start
- index.
-
- * marshal.c (marshal_load): show format versions explicitly when
- format version mismatch happens.
-
-Sun Nov 19 06:13:24 2000 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * marshal.c: use long for string/array length.
-
- * pack.c (swaps): use bit-or(|) instead of plus(+).
-
- * pack.c (swapl): ditto.
-
-Sat Nov 18 15:18:16 2000 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * array.c (rb_ary_replace): array size should be in long.
-
- * array.c (rb_ary_concat): ditto.
-
- * array.c (rb_ary_hash): ditto.
-
-Sat Nov 18 14:07:20 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/http.rb: Socket#readline() reads until "\n", not "\r\n"
-
-Fri Nov 17 14:55:18 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * string.c (rb_str_succ): output should be NUL terminated.
-
-Fri Nov 17 02:54:15 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_close): need not to flush before closing.
-
- * eval.c (rb_thread_join): should preserve last thread status when
- THREAD_TO_KILL.
-
- * eval.c (rb_thread_stop): ditto.
-
- * io.c (io_fflush): wrap fflush by TRAP_BEG, TRAP_END.
-
- * eval.c (rb_eval): method defined within singleton class
- definition should behave like singleton method about class
- variables.
-
- * eval.c (is_defined): ditto.
-
-Thu Nov 16 23:06:07 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/http.rb: can call {old,new}_implementation any times.
-
- * lib/net/http.rb: HTTP#connecting, receive ->
- common_oper, connecting.
-
- * lib/net/http.rb: output warning if u_header includes
- duplicated header.
-
- * lib/net/http.rb: not check Connection:/Proxy-Connection;
- always read until eof.
-
- * lib/net/protocol.rb: detects and catches "break" from block.
-
-Thu Nov 16 16:32:45 2000 Masahiro Tanaka <masa@stars.gsfc.nasa.gov>
-
- * bignum.c (bigdivrem): should have incremented ny first.
-
-Thu Nov 16 14:58:00 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/socket/socket.c (sock_new): duplicates file descriptor
- with myfddup() on mswin32/mingw32.
-
- * win32/win32.h: uses system original fdopen().
-
- * win32/win32.c (myfddup): newly added instead of myfdopen().
-
- * win32/win32.c (mybind, myconnect, mygetsockname, mygetsockopt,
- mylisten, mysetsockopt): now accept file descriptor only, not
- SOCKET.
-
- * win32/win32.c (myaccept, mysocket): return file descriptor,
- instead of SOCKET.
-
-Thu Nov 16 10:23:24 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (massign): too strict check for nameless rest argument.
-
- * eval.c (method_arity): mere * should return -1.
-
- * eval.c (intersect_fds): should check all FDs in the fd_set.
-
-Wed Nov 15 19:33:20 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_attr): should clear method cache before calling hook.
-
- * eval.c (rb_eval): ditto.
-
- * eval.c (rb_mod_modfunc): ditto.
-
-Mon Nov 13 22:44:52 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (rb_bug): print version to stderr.
-
-Mon Nov 13 19:02:08 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.c, io.c, process.c: the exit status of program must be
- multiplied 256 on mswin32 and msdosdjgpp(system(), ``).
-
-Sat Nov 11 22:57:38 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg): uniformed treatment of -a**b, where a is a
- number literal; hacky but behavior appears more consistent.
-
- * parse.y (newline_node): reduce newline node (one per line).
-
- * random.c (rb_f_srand): should be prohibited in safe level
- greater than 4.
-
-Sat Nov 11 22:37:36 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * rubysig.h: do not use rb_trap_immediate on win32.
-
- * rubysig.h: new macros, ATOMIC_TEST, ATOMIC_SET, ATOMIC_INC,
- ATOMIC_DEC, RUBY_CRITICAL and new definition of TRAP_BEG,
- TRAP_END.
-
- * gc.c (ruby_xmalloc): should wrap malloc() by RUBY_CRITICAL.
-
- * signal.c (sighandle): better win32 sig handling.
-
- * win32/win32.c (flock): better implementation.
-
- * win32/win32.c (myselect): ditto.
-
- * win32/win32.c (myaccept): ditto.
-
- * win32/win32.c (waitpid): ditto.
-
- * win32/win32.c (myrename): ditto.
-
- * win32/win32.c (wait_events): support function for win32 signal
- handling.
-
-Sat Nov 11 08:34:18 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.31.
-
- * lib/net/http.rb: initializes header in HTTP, not HTTPCommand.
-
- * lib/net/protocol.rb, http.rb: rewrites proxy code.
-
-Fri Nov 10 16:15:53 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (rb_num2long): use to_int, not to_i.
-
- * error.c: T_SYMBOL was misplaced by T_UNDEF.
-
- * parse.y (yylex): eval("^") caused infinite loop.
-
-Thu Nov 9 14:22:13 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_taint_check): should check IO taintness; no
- operation for untainted IO should be allowed in the sandbox.
-
- * rubyio.h (GetOpenFile): check IO taintness inside using
- rb_io_taint_check().
-
-Wed Nov 8 03:08:53 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_fflush): ensure fflush(3) would not block by calling
- rb_thread_fd_writable().
-
-Tue Nov 7 20:29:56 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.30.
-
- * lib/net/protocol.rb, smtp.rb: Command#critical_ok -> error_ok
-
- * lib/net/http.rb: reads header when also "100 Continue".
-
-Tue Nov 7 04:32:19 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigdivrem): use bit shift to make y's MSB set.
-
-Mon Nov 6 1:22:49 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (warn_print): do not use err_append(), to ensure output
- to stderr.
-
- * error.c (rb_warn): use warn_print() instead of err_print().
-
- * error.c (rb_warning): ditto.
-
- * error.c (rb_bug): ditto.
-
- * eval.c (rb_load): re-raise exceptions during load.
-
- * time.c (make_time_t): remove useless adjust
-
-Thu Nov 2 18:01:16 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * random.c (rb_f_rand): half-baked float support fixed. This fix
- was originally proposed by K.Kosako <kosako@sofnec.co.jp>.
-
-Tue Oct 31 17:27:17 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c: change digit size to `long|int' if long long is
- available.
-
- * marshal.c (w_object): support `long|int' digits.
-
- * marshal.c (r_object): ditto.
-
-Sat Oct 28 23:54:22 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): allow =end at the end of file (without a
- newline at the end).
-
-Fri Oct 27 10:00:27 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_cstr2inum): should ignore trailing white spaces.
-
- * bignum.c (rb_str2inum): string may not have sentinel NUL.
-
-Fri Oct 27 02:37:22 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_cstr2inum): wrongly assigned base to c before
- badcheck check.
-
-Thu Oct 26 02:42:50 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb: Command#critical_ok
-
- * lib/net/smtp.rb: clear critical flag before go to SMTP
-
-Wed Oct 25 12:30:19 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_concat): replacing array might be the receiver
- itself. do not call rb_ary_push_m.
-
- * array.c (rb_ary_replace): replacing array might be the receiver
- itself. use memmove.
-
-Fri Oct 20 07:56:23 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): ARGSPUSH should not modify args array.
-
-Thu Oct 19 14:58:17 2000 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * pack.c (NUM2U32): should use NUM2ULONG().
-
-Tue Oct 17 17:30:34 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * eval.c (error_print): ruby_sourcefile may be NULL.
-
-Tue Oct 17 16:36:28 2000 Wes Nakamura <wknaka@pobox.com>
-
- * pack.c (NATINT_U32): wrong use of sizeof.
-
-Tue Oct 17 12:48:20 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * eval.c (rb_abort): nil check against ruby_errinfo.
-
- * eval.c (rb_thread_schedule): use FOREACH_THREAD_FROM instead of
- FOREACH_THREAD, since curr_thread may be removed from thread ring.
-
- * eval.c (THREAD_ALLOC): errinfo should be Qnil.
-
- * eval.c (rb_callcc): th->prev,th->next are now already
- initialized in THREAD_ALLOC.
-
-Mon Oct 16 15:37:33 2000 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * eval.c (rb_thread_inspect): tag size was shorter than required.
-
- * object.c (rb_obj_inspect): ditto.
-
-Mon Oct 16 14:25:18 2000 Shugo Maeda <shugo@ruby-lang.org>
-
- * object.c (sym_inspect): used `name' before initialization.
-
-Mon Oct 16 14:06:00 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): use NATINT_U32 for 'l', 'L', and 'N'.
-
- * pack.c (I32,U32): 32 bit sized integer.
-
- * pack.c (OFF16,OFF32B): big endian offset for network byteorder.
-
-Mon Oct 16 06:39:32 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/http.rb: hex-alpha is not [a-h] but [a-f].
-
-Mon Oct 16 01:02:02 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_start_0): should not abort on exception if
- $SAFE >= 4.
-
- * parse.y (sym): symbols for class variable names.
-
-Sun Oct 15 01:49:18 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_file_flock): should accept interrupt.
-
- * process.c (rb_waitpid): ditto.
-
- * process.c (rb_waitpid): ditto.
-
- * process.c (proc_wait): ditto.
-
- * process.c (proc_waitpid2): wrong recursion.
-
-Sat Oct 14 03:32:13 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_alloc): should not link a new thread in the
- live thread ring before initialization.
-
-Fri Oct 13 17:08:09 2000 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: new file.
-
-Thu Oct 12 18:56:28 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/pop.rb: POP3#reset
-
- * lib/net/http.rb: a code for "Switch Protocol" was wrongly 100.
-
-Thu Oct 12 01:23:38 2000 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: bug fix: CGI::html(): PRETTY option didn't work.
-
-Thu Oct 12 00:03:02 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (sym_inspect): should adjust string length.
-
- * struct.c (rb_struct_to_s): ditto.
-
- * struct.c (rb_struct_inspect): ditto.
-
-Wed Oct 11 22:15:47 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * eval.c (rb_thread_inspect): should adjust string length.
-
- * object.c (rb_any_to_s): ditto.
-
- * object.c (rb_obj_inspect): ditto.
-
-Wed Oct 11 18:13:50 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_start_0): should check insecure exit.
-
-Wed Oct 11 14:29:51 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb: 2nd arg for ProtocolError#initialize is
- optional.
-
- * lib/net/http.rb: code refining.
-
-Wed Oct 11 11:13:03 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (primary): setter method (e.g. foo=) should always be
- public.
-
- * eval.c (rb_thread_raise): should not raise SecurityError if
- exception raised by the interpreter.
-
- * eval.c (rb_thread_cleanup): skip all THREAD_KILLED threads
- before FOREACH_THREAD.
-
-Tue Oct 10 16:11:54 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * dln.c (dln_load): remove unused code for Cygwin.
-
-Tue Oct 10 09:49:23 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (Init_File): FileTest.size should return 0 (not nil) for
- empty files.
-
-Sun Oct 8 13:20:26 2000 Guy Decoux <decoux@moulon.inra.fr>
-
- * eval.c (POP_SCOPE): not just set SCOPE_DONT_RECYCLE, but do
- scope_dup().
-
-Sat Oct 7 15:10:50 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_reverse_bang): unnecessary ALLOCA_N() was
- removed.
-
-Fri Oct 6 14:50:24 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb.in, lib/mkmf.rb: remove "DESTDIR =".
-
- * Makefile.in, win32/Makefile.sub, ruby.1: renamed -X to -C.
-
-Fri Oct 6 12:50:52 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_plus): use to_ary(), not Check_Type().
-
- * array.c (rb_ary_concat): ditto.
-
- * gc.c (rb_gc): use __builtin_frame_address() for gcc.
-
- * eval.c (stack_length): ditto.
-
- * parse.y (assign_in_cond): stop warning till some better warning
- condition will be found.
-
-Thu Oct 5 18:02:39 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_dup): should have propagated taint flag.
- (ruby-bugs:#PR64,65)
-
-Wed Oct 4 00:26:11 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_arity): proc{|a|}'s arity should be -1.
-
-Mon Oct 2 05:28:58 2000 akira yamada <akira@ruby-lang.org>
-
- * string.c (trnext): minus at the end of pattern.
-
-Sun Oct 1 00:43:34 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: exp-name was wrong on cygwin and mingw32.
-
-Thu Sep 28 14:57:09 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_compile_pattern): should try must_string calculation
- every time.
-
-Tue Sep 19 23:47:44 2000 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
-
- * configure.in, config.guess, config.sub: MacOS X support.
-
-Wed Sep 27 18:40:05 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * stable version 1.6.1 released.
-
-Wed Sep 27 16:13:05 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * mkconfig.rb: variables should be expanded only if /\$\{?\w+\}?/.
-
-Tue Sep 26 18:09:51 2000 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * string.c: include <math.h>
-
-Tue Sep 26 15:59:50 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_mod_dup): metaclasses of class/module should not be
- cleared by rb_obj_dup.
-
-Tue Sep 26 02:44:54 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (GC_MALLOC_LIMIT): size extended.
-
- * regex.c (DOUBLE_STACK): use machine's stack region for regex
- stack if its size is small enough.
-
-Mon Sep 25 18:13:07 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c: include <defines.h>.
-
- * eval.c (rb_add_method): cache mismatch by method
- definition. need to clear_cache_by_id every time.
-
-Mon Sep 25 13:31:45 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * win32/win32.c (NtCmdGlob): substitute '\\' with '/'.
-
-Mon Sep 25 00:35:01 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * defines.h: #undef HAVE_SETITIMER on cygwin.
-
-Sun Sep 24 03:01:53 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, http.rb: typo.
-
-Sat Sep 23 07:33:20 2000 Aleksi Niemela <aleksi.niemela@cinnober.com>
-
- * regex.c (re_compile_pattern): nicer regexp error messages for
- invalid patterns.
-
-Sat Sep 23 03:06:25 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_autoload_load): should not require already
- provided features.
-
-Fri Sep 22 15:46:21 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/http.rb: too early parameter expansion in string.
-
-Fri Sep 22 13:58:51 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/extmk.rb.in: don't use default $:
-
-Fri Sep 22 13:42:50 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * regex.c (PUSH_FAILURE_COUNT): avoid casting warning on alpha.
-
- * regex.c (PUSH_FAILURE_POINT): ditto.
-
-Fri Sep 22 10:16:21 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * win32/config.h.in: add HAVE_TELLDIR, HAVE_SEEKDIR
-
-Thu Sep 21 19:04:34 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/extmk.rb, lib/mkmf.rb (install_rb): check whether libdir is
- directory or not.
-
-Thu Sep 21 17:23:05 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_file_s_symlink): use HAVE_SYMLINK.
-
- * file.c (rb_file_s_readlink): use HAVE_READLINK.
-
- * dir.c (dir_tell): use HAVE_TELLDIR.
-
- * dir.c (dir_seek): use HAVE_SEEKDIR.
-
- * configure.in (AC_CHECK_FUNCS): lstat, symlink, readlink,
- telldir, seekdir checks added.
-
- * file.c (lstat): should use stat(2) if lstat(2) is not
- available.
-
-Thu Sep 21 15:59:23 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.29.
-
- * lib/net/http.rb: HTTPReadAdapter -> HTTPResponseReceiver
-
- * lib/net/http.rb (connecting): response is got in receive()
-
-Thu Sep 21 15:49:07 2000 Wayne Scott <wscott@ichips.intel.com>
-
- * lib/find.rb (find): should not follow symbolic links;
- tuned performance too.
-
-Wed Sep 20 23:21:38 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (load_file): two Ctrl-D was required to stop ruby at the
- beginning of stdin script read.
-
-Wed Sep 20 14:01:45 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_provided): detect infinite load loop.
-
- * eval.c (rb_provided): too weak filename comparison.
-
- * eval.c (rb_thread_alloc): avoid recycling still referenced
- dvar structures.
-
- * eval.c (rb_callcc): ditto.
-
- * eval.c (THREAD_ALLOC): fill dyna_vars field by ruby_dyna_vars.
-
-Tue Sep 19 17:47:03 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * stable version 1.6.0 released.
-
-Tue Sep 19 16:24:52 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (Init_marshal): provide marshal.so no more.
-
-Tue Sep 19 14:01:01 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in, win32/setup.mak: include version number
- in RUBY_SO_NAME.
-
-Tue Sep 19 13:07:47 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): was confusing $~ and $_.
-
-Tue Sep 19 13:06:53 2000 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * signal.c (rb_f_kill): signum may be a negative number, should be
- treated by signed number.
-
-Tue Sep 19 01:14:56 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_provide): better feature handling.
-
- * eval.c (rb_f_require): loading ruby library may be partial
- state. checks in rb_thread_loading is integrated.
-
- * eval.c (rb_provided): better thread awareness.
-
- * lib/irb/frame.rb: 6 (not 5) parameters for trace_func proc.
-
- * eval.c (error_print): should print error position even if
- get_backtrace() failed.
-
-Sat Sep 16 03:29:59 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_require): rb_provided() was called too early; does
- not work well with threads.
-
- * parse.y (ensure): should distinguish empty ensure and non
- existing ensure.
-
- * file.c (Init_File): extending File by class of FileTest was
- serious mistake.
-
-Thu Sep 14 02:46:54 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_yield): array strip should be done in this
- function.
-
-Wed Sep 13 17:01:03 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_eq): incomplete value comparison of bignums.
-
-Wed Sep 13 06:39:54 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_mod_class_variables): Module#class_variables added.
-
-Wed Sep 13 06:09:26 2000 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: bug fix: CGI::header(): output status header.
-
-Wed Sep 13 01:09:12 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): allow global variables like '$__a'.
-
-Tue Sep 12 22:28:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/socket/extconf.rb: avoid using terrible <netinet/tcp.h>
- on cygwin 1.1.5.
-
-Tue Sep 12 16:01:58 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * array.c (rb_ary_unshift_m): typo.
-
-Tue Sep 12 15:37:55 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): stripped array too much, should remove just
- for proc_call().
-
-Tue Sep 12 07:05:24 2000 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: version 2.0.0: require ruby1.5.4 or later.
-
- * lib/net/telnet.rb: version 1.6.0
-
-Tue Sep 12 03:26:07 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (massign): use to_ary to get an array if available.
-
- * object.c (rb_Array): ditto.
-
-Mon Sep 11 14:24:47 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (ruby_setenv): should not free the element of
- origenvironment.
-
- * parse.y (command_call): kYIELD moved to this rule to allow
- 'a = yield b'. (ruby-bugs-ja:#PR15)
-
-Mon Sep 11 01:27:54 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): proc#call([]) should pass single value to
- the block.
-
- * eval.c (callargs): reduce array allocation.
-
- * eval.c (massign): precise check for argument number.
-
-Fri Sep 8 10:05:17 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (STR_NO_ORIG): should be FL_USER2.
-
-Thu Sep 7 14:17:51 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_cat): should work even for concatenating same
- string.
-
-Wed Sep 6 17:06:38 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_cvar_declare): should check superclass's class
- variable first.
-
-Wed Sep 6 10:42:02 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-calculate-indent): shift continuing line
- if previous line ends with modifier keyword.
-
- * misc/ruby-mode.el (ruby-parse-region): should not give up if
- modifiers are at the end of line.
-
- * misc/ruby-mode.el (ruby-expr-beg): indented wrongly if modified
- statement was size 1.
-
-Wed Sep 6 10:41:19 2000 Kenichi Komiya <kom@mail1.accsnet.ne.jp>
-
- * misc/ruby-mode.el (ruby-parse-region): modifier was not handled
- well on emacs19.
-
-Tue Sep 5 17:10:12 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_to_s): fixed zone string UTC for utc time object.
-
-Tue Sep 5 00:26:06 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_search): range worked wrongly on bm_search().
-
-Mon Sep 4 13:40:40 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in: renamed libruby.a to libruby.{cygwin,mingw32}.a
- on cygwin and mingw32.
-
-Sun Sep 3 23:44:04 2000 Noriaki Harada <tenmei@maoh.office.ne.jp>
-
- * io.c (NO_SAFE_RENAME): for BeOS too.
-
-Sun Sep 3 11:31:53 2000 Takaaki Tateishi <ttate@jaist.ac.jp>
-
- * parse.y (rescue): no assignment was done if rescue body was
- empty.
-
-Sat Sep 2 10:52:21 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (call_args,aref_args): block_call can be the last
- argument.
-
- * parse.y (COND_PUSH,COND_POP): maintain condition stack to allow
- kDO2 in parentheses in while/until/for conditions.
-
- * parse.y (yylex): generate kDO2 for EXPR_ARG outside of
- while/until/for condition.
-
-Fri Sep 1 10:36:29 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (aref_args,opt_call_args): add block_call to allow a
- method without parentheses and with block as a last argument.
-
- * hash.c (rb_hash_sort): should not return nil.
-
- * re.c (match_aref): should use rb_reg_nth_match().
-
- * eval.c (POP_SCOPE): recycled scopes too much
-
- * eval.c (Init_eval): extend room for stack allowance.
-
- * eval.c (POP_SCOPE): frees scope too much.
-
-Thu Aug 31 14:28:39 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_gc_mark): T_SCOPE condition must be more precise.
-
- * eval.c (scope_dup): should not make all duped scope orphan.
-
-Thu Aug 31 10:11:47 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (stmt): allow stmt_rhs to be right hand side of multiple
- assignment.
-
- * time.c (rb_time_timeval): type error should not mention the word
- 'interval'.
-
-Wed Aug 30 23:21:20 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (rb_num2long): use rb_Integer() instead of independent
- convert routine.
-
- * eval.c (rb_rescue2): now takes arbitrary number of exception types.
-
- * object.c (rb_convert_type): use rb_rescue2 now to handle NameError.
-
- * object.c (rb_convert_type): better error message.
-
-Wed Aug 30 17:09:14 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/Win32API/Win32API.c (Win32API_initialize): AlphaNT support.
-
-Wed Aug 30 14:19:07 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (node_assign): should support NODE_CVASGN2 too.
-
-Wed Aug 30 11:31:47 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ext/Win32API/Win32API.c (Win32API_initialize): add the
- arguments checking.
-
- * ext/Win32API/Win32API.c (Win32API_initialize): add taint
- checking. allow String object in the third argument.
-
-Wed Aug 30 10:29:40 2000 Masahiro Tomita <tommy@tmtm.org>
-
- * io.c (rb_f_p): flush output buffer.
-
-Tue Aug 29 16:29:15 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (assignable): remove NODE_CVASGN3.
-
- * parse.y (gettable): remove NODE_CVAR3.
-
-Tue Aug 29 02:02:14 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): handles create_makefile("a/b").
-
- * ext/extmk.rb.in (create_makefile): ditto
-
-Mon Aug 28 18:43:54 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (is_defined): now handles class variables.
-
- * eval.c (rb_eval): class variable behavior revisited.
-
- * parse.y (assignable): ditto.
-
- * parse.y (gettable): ditto.
-
- * regex.c (PUSH_FAILURE_COUNT): push/pop interval count on failure
- stack. this fix is inspired by the Emacs21 patch from Stefan
- Monnier <monnier@cs.yale.edu>.
-
-Fri Aug 25 15:24:39 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_cvar_get): should not follow __attached__.
-
- * variable.c (rb_cvar_set): ditto.
-
- * variable.c (rb_cvar_declare): ditto.
-
- * variable.c (mod_av_set): second class variable assignment at the
- toplevel should not give warning.
-
-Fri Aug 25 01:18:36 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (next_argv): prepare path for open file.
-
- * string.c (rb_str_setter): moved from io.c.
-
- * io.c (next_argv): filename should be "-" for refreshed ARGF.
-
-Thu Aug 24 15:27:39 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/socket/socketport.h: use `extern int h_errno' if needed.
-
-Sat Aug 19 01:34:02 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/sdbm/_sdbm.c (sdbm_prep): flags should be or-ed by O_BINARY on
- Win32 too.
-
- * ext/sdbm/_sdbm.c (makroom): fill hole with 0 on Win32 too.
-
-Fri Aug 18 13:23:59 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): should preserve and clear $! value before
- compilation.
-
- * eval.c (eval): ditto.
-
-Fri Aug 18 11:06:19 2000 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/socket/socket.c (s_accept): start GC on EMFILE/ENFILE.
-
-Thu Aug 17 16:04:48 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (is_defined): should clear ruby_errinfo.
-
-Thu Aug 17 04:26:31 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.27.
-
- * lib/net/protocol.rb: writing methods returns written byte size.
-
- * lib/net/smtp.rb: send_mail accepts many destinations.
-
-Wed Aug 16 00:43:47 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_s_times): use CLK_TCK for HZ if it's defined.
-
-Tue Aug 15 17:30:59 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (frame_dup): should set flag FRAME_MALLOC after
- argv allocation.
-
- * eval.c (blk_free): should not free argv if GC was called before
- frame_dup.
-
-Tue Aug 15 16:08:40 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in: add ac_cv_func_times=yes for mingw32.
-
- * win32/win32.c (mytimes): typo.
-
-Tue Aug 15 01:45:28 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_eof): should return true at the end of ARGF without
- checking stdout if arguments are given.
-
-Mon Aug 14 10:34:32 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_status): status should return false for normal
- termination, nil for termination by exception.
-
-Fri Aug 11 15:43:46 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_undef): give warning for undefining __id__, __send__.
-
-Thu Aug 10 08:05:03 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_callcc): returned current thread instead of
- continuation wrongly.
-
-Thu Aug 10 05:40:28 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/extmk.rb.in: $CPPFLAGS should be initialized.
-
- * ext/tcltklib/depend: add stubs.o.
-
- * ext/tcltklib/extconf.rb: use $CPPFLAGS instead of $CFLAGS.
-
-Wed Aug 9 16:31:48 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_callcc): thread status for continuations must be
- THREAD_KILLED, otherwise thread_free() breaks other threads.
-
-Wed Aug 9 13:24:25 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * win32/win32.[ch]: emulate rename(2).
-
-Tue Aug 8 14:01:46 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/tcltklib/tcltklib.c: support --enable-tcltk_stubs
-
- * ext/tcltklib/extconf.rb: ditto.
-
- * ext/tcltklib/stubs.c: created. examine candidate shared libraries.
-
-Mon Aug 7 13:59:12 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h (CLONESETUP): should copy flags before any potential
- object allocation.
-
- * regex.c (re_match): check for stack depth was needed.
-
-Sat Aug 5 16:43:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * djgpp/*: convert DOS line endings to UNIX style.
-
- * djgpp/config.status: rename to config.sed for SFN.
-
- * lib/ftools.rb (compare, safe_unlink, chmod): avoid warnings.
-
- * lib/ftools.rb (move): typo. not `tpath', but `to'.
-
-Fri Aug 4 23:26:48 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (proc_call): gives warning if a block is supplied.
-
- * eval.c (rb_eval): no warning for discarding if an alias for the
- method is already made.
-
-Fri Aug 4 16:32:29 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (rb_ary_reject_bang): returns nil if no element removed.
-
- * hash.c (rb_hash_reject_bang): returns nil if no element removed.
-
-Thu Aug 3 19:44:26 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_fd_writable): should return integer value.
-
- * array.c (rb_ary_assoc): search array element whose length is
- longer than 0 (not 1).
-
-Wed Aug 2 18:27:47 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_wait_fd): prohibit thread context switch
- during compilation.
-
- * eval.c (rb_cont_call): prohibit Continuation#call across threads.
-
-Wed Aug 2 08:22:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * gc.c (rb_gc): clear malloc_memories to zero, to avoid potential
- super frequent GC invocation. (ruby-bugs:#PR48)
-
- * gc.c (rb_gc): only add_heap() if GC trigger condition is
- satisfied.
-
-Tue Aug 1 16:41:58 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (proc_options): global load path setting moved from
- ruby_prog_init().
-
- * ruby.c (incpush): renamed. push path entry at the END of the
- load path array. This makes -I directories sorted in order in
- the arguments.
-
-Sat Jul 29 23:42:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * dir.c (dir_each): should check whether dir is closed during the
- block execution. (ruby-bugs:#PR47)
-
-Sat Jul 29 21:57:30 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ruby.c (rubylib_mangle): provide another buffer for the result.
-
-Wed Jul 26 10:09:01 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in: set SOLIBS to LIBS on Cygwin.
-
- * configure.in: LIBRUBY_SO='$(RUBY_INSTALL_NAME)'.$target_os.dll
- on cygwin and mingw32. ruby-cygwin.dll is bad. why?
-
-Wed Jul 26 10:04:03 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * gc.c (gc_sweep): avoid full scan during compilation.
-
- * gc.c (rb_gc): add heap during no gc period (including
- compilation).
-
-Tue Jul 25 19:03:04 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * cygwin/GNUmakefile: use puts instead of print, because
- Cygwin DLL's behavior is changed(or bug?).
-
- * configure.in: LIBRUBY_SO='$(RUBY_INSTALL_NAME)'-$target_os.dll
- on cygwin and mingw32.
-
- * cygwin/GNUmakefile: ditto.
-
- * Makefile.in: $(SOLIBS) should be put after dmyext.@OBJEXT@.
-
- * instruby.rb: install $(LIBRUBY) to libdir
- if $(LIBRUBY) != $(LIBRUBY_A_).
-
-Tue Jul 25 15:16:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_p): redirect to $defout.
-
-Mon Jul 24 18:52:55 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * win32/win32.c (win32_getenv): should remove `static'.
-
- * ruby.c (rubylib_mangle): support "/hoge;/foo"
-
-Mon Jul 24 10:28:55 2000 GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp>
-
- * string.c (rb_str_count): raise exception if no argument is
- given.
-
-Sun Jul 23 12:55:04 2000 Dave Thomas <Dave@Thomases.com>
-
- * string.c (rb_str_rindex): Support negative end position.
-
-Fri Jul 21 17:35:01 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (aref_args): command_call now be permitted as
- aref_args.
-
- * process.c (proc_getpriority): getpriority(2) may return valid
- negative number. use errno to detect error.
-
- * marshal.c (dump_ensure): dumped string should be tainted if
- any among target objects is tainted.
-
- * marshal.c (r_regist): restored object should be tainted if and
- only if the source is a file or a tainted string.
-
-Wed Jul 19 15:14:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (bigdivrem): should use rb_int2big(), not rb_uint2big().
-
-Tue Jul 18 14:58:30 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (ruby_options): should treat SystemExit etc. properly.
-
- * parse.y (yycompile): should check compile_for_eval, not
- ruby_in_eval.
-
-Mon Jul 17 04:29:50 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/mkmf.rb: converts extension of $objs into $OBJEXT.
-
-Sun Jul 16 03:02:34 2000 Dave Thomas <dave@thomases.com>
-
- * lib/weakref.rb: Change to use new ObjectSpace calls.
-
-Sat Jul 15 21:59:58 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): should not redefine __id__ nor __send__.
-
- * gc.c (define_final): integrate final.rb features into the
- interpreter. define_finalizer and undefine_finalizer was
- added to ObjectSpace. plus, add_finalizer, remove_finalizer,
- and call_finalizer are deprecated now.
-
-Sat Jul 15 01:32:34 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_mod_method): implements unbound method.
-
- * eval.c (Init_eval): should prohibit `module_function' for class
- Class.
-
-Fri Jul 14 17:19:59 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * cygwin/GNUmakefile.in: use miniruby instead of sed.
-
-Fri Jul 14 12:49:50 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (argf_eof): need to check stdin, when next_p == -1.
-
- * io.c (read_all): use io_fread() instead of fread(3).
-
- * io.c (io_reopen): should clearerr FILE if fd < 3.
-
- * re.c (rb_reg_match_m): the result is exported, so it should be
- declared as busy.
-
- * eval.c (rb_eval): should preserve errinfo even if return, break,
- etc. is called in rescue clause.
-
- * instruby.rb: install irb too.
-
-Wed Jul 12 15:32:57 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (rb_const_get): constants for builtin classes must
- have higher priority than constants from included modules at
- Object class.
-
- * bignum.c (bigdivrem): small embarrassing typo.
-
-Wed Jul 12 15:06:28 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): use rb_const_get_at().
-
- * variable.c (top_const_get): retrieve toplevel constants only,
- not ones of Object (and its included modules) in general.
-
-Wed Jul 12 15:04:11 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.26.
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb:
- add module Net::NetPrivate and its inner classes
- {Read,Write}Adapter, Command, Socket,
- SMTPCommand, POP3Command, APOPCommand, HTTPCommand
-
-Wed Jul 12 13:10:30 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (bigdivrem): defer bignorm().
-
- * bignum.c (bignorm): accepts accidental fixnums.
-
-Tue Jul 11 16:54:17 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): `@<digit>' is no longer a valid instance
- variable name.
-
-Tue Jul 11 01:51:50 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (rb_big_divmod): should not use Integer(float) for
- the right operand.
-
- * bignum.c (rb_big_remainder): ditto.
-
- * bignum.c (rb_big_modulo): ditto.
-
-Mon Jul 10 15:27:16 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * io.c (pipe_finalize): should set rb_last_status when pclose().
-
-Mon Jul 10 09:07:54 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * error.c (rb_bug): print version number and such too.
-
-Sat Jul 8 23:08:40 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_start_0): should copy previous scopes to
- prevent rb_gc_force_recycle().
-
-Fri Jul 7 23:36:36 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/socket/addrinfo.h: move IN_EXPERIMENTAL and IN_LOOPBACKNET
- definitions to ext/socket/sockport.h.
-
- * ext/socket/extconf.rb: add getservbyport() and arpa/inet.h check.
-
- * ext/socket/getaddrinfo.c (getaddrinfo): SOCK_RAW may not be
- defined (ex. BeOS, Palm OS 2.x or before).
-
- * ext/socket/getnameinfo.c (getnameinfo): getservbyport() may not
- exist (ex. BeOS, Palm OS).
-
- * ext/socket/sockport.h: add IN_EXPERIMENTAL, IN_CLASSA_NSHIFT,
- IN_LOOPBACKNET, AF_UNSPEC, PF_UNSPEC and PF_INET.
-
-Fri Jul 7 03:30:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (aref_args): should allow Hash[:a=>2] etc.
-
- * numeric.c (fix_aref): convert index by NUM2INT, not FIX2INT.
- (ruby-bugs:#PR37)
-
- * time.c (time_localtime): should prohibit for frozen time.
-
- * time.c (time_gmtime): ditto.
-
-Thu Jul 6 19:12:12 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_file_s_open): should not terminate fptr; just clear it.
-
- * ruby.c (proc_options): should not call require_libraries()
- twice.
-
- * ruby.c (require_libraries): clear req_list_head.next after
- execution.
-
-Thu Jul 6 13:51:57 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * object.c (rb_to_id): name may not be symbol nor fixnum.
-
- * struct.c (rb_struct_s_def): name may be nil.
-
-Thu Jul 6 02:09:06 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (bigdivrem): new function to return remainder.
-
- * numeric.c (fixdivmod): now returns modulo, not remainder.
-
- * numeric.c (flodivmod): ditto.
-
- * bignum.c (bigdivmod): ditto.
-
- * numeric.c (num_modulo): new method; alias to '%'.
-
-Thu Jul 6 00:51:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * win32/win32.c (NtCmdGlob): patterns should be separated and
- NUL terminated.
-
-Wed Jul 5 22:27:56 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * cygwin/GNUmakefile: use ruby.def to make rubycw.dll.
-
- * ext/extmk.rb.in: create target.def.
-
- * lib/mkmf.rb: ditto.
-
-Wed Jul 5 09:47:14 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_arg): Time::local, Time::gm now take 7th optional
- argument for usec.
-
- * numeric.c (num_ceil, etc): default ceil, floor, round, truncate
- implementation for Numeric, using `to_f'.
-
- * io.c (rb_io_reopen): clear fptr->path after free() to prevent
- potential GC crash.
-
- * io.c (rb_file_s_open): terminate fptr unless null.
-
- * io.c (rb_file_initialize): ditto.
-
- * lib/tempfile.rb: specify FILE::CREAT|File::EXCL to open for
- better security.
-
- * numeric.c (flo_truncate): new method.
-
-Wed Jul 5 01:02:53 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/extmk.rb.in: join ' ' -> join(' ').
-
- * lib/mkmf.rb: ditto.
-
-Tue Jul 4 13:51:29 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/dbm/dbm.c: add methods added to Hash in 1.5.x.
-
- * ext/gdbm/gdbm.c: ditto.
-
- * ext/sdbm/init.c: ditto.
-
- * eval.c (proc_call): args may be Qundef (means no argument), do
- not call TYPE() for args.
-
-Tue Jul 4 13:20:56 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/extmk.rb.in: make command line must be single-quoted.
- $(RUBY_INSTALL_NAME) is command substitution in the POSIX sh.
-
-Tue Jul 4 13:16:02 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * util.c (rb_type): should add T_UNDEF.
-
-Tue Jul 4 09:30:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (here_document): supports EOF right after terminator.
-
- * random.c (rb_f_rand): argument is now optional (rand(max=0)).
-
-Tue Jul 4 01:50:49 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * win32/ruby.def: remove ruby_mktemp.
-
-Tue Jul 4 01:27:13 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_rescue2): new function to rescue arbitrary exception.
-
- * numeric.c (do_coerce): should catch NameError explicitly.
-
-Tue Jul 4 00:15:23 2000 Dave Thomas <Dave@thomases.com>
-
- * numeric.c (Init_Numeric): forgot to register Numeric#remainder.
-
-Mon Jul 3 23:46:56 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * win32/win32.c (myselect, myaccept): disable interrupt while
- executing accept() or select() to avoid Ctrl-C causes
- "unknown software exception (0xc0000029)".
-
-Mon Jul 3 18:35:41 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * lib/mkmf.rb: use null device if it exists for cross-compiling.
-
-Mon Jul 3 18:19:51 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.26.
-
- * lib/net/protocol.rb (finish): do nothing unless active.
-
- * lib/net/http.rb: HTTP#{get,post}2 again (for new impl).
-
-Mon Jul 3 16:47:22 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * cygwin/GNUmakefile: librubys.a -> lib$(RUBY_INSTALL_NAME)s.a
-
- * configure.in: use AC_CANONICAL_{HOST,TARGET,BUILD}.
-
-Mon Jul 3 13:15:02 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * numeric.c (fix_divmod): x * d + m = y where d, m = x.divmod(y).
-
- * bignum.c (rb_big_divmod): ditto.
-
- * numeric.c (fixdivmod): does not depend C's undefined %
- behavior. adopt to fmod(3m) behavior.
-
- * numeric.c (flo_mod): modulo now reserves fmod(3m) behavior.
-
- * numeric.c (num_remainder): 'deprecated' warning.
-
-Mon Jul 3 10:27:28 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in: use AC_CANONICAL_SYSTEM.
-
-Sun Jul 2 21:17:37 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in: support without --enable-shared for cygwin/mingw32.
-
- * cygwin/GNUmakefile: ditto.
-
- * ext/extmk.rb.in: use null device if it exists for cross-compiling.
-
- * lib/mkmf.rb: ditto.
-
- * util.c (ruby_mktemp): remove unused ruby_mktemp().
-
-Sun Jul 2 14:18:04 2000 Koji Arai <JCA02266@nifty.ne.jp>
-
- * eval.c (TMP_PROTECT_END): tmp__protect_tmp may be NULL.
-
-Sun Jul 2 03:37:50 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.25.
-
- * lib/net/protocol.rb (each_crlf_line): beg = 0 is needed in adding{}
-
- * lib/net/smtp.rb: allow String for to_addr of SMTP#sendmail
-
-Sat Jul 1 15:22:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * numeric.c (fix_rshift): should handle shift value more than
- sizeof(long).
-
-Sat Jul 1 15:22:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): the value from RTEST() is not valid Ruby
- object. result should be either true or false.
-
-Sat Jul 1 09:30:06 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * re.c (rb_reg_initialize): was freeing invalid pointer.
-
-Sat Jul 1 03:25:56 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (call_args): command_call can be the last argument of
- call_args. It had to be the only argument.
-
- * re.c (rb_reg_s_quote): should not dump core even for unsane mbc
- string.
-
-Fri Jun 30 01:36:20 2000 Aleksi Niemela <aleksi.niemela@cinnober.com>
-
- * parse.y (f_norm_arg): better, nicer error message.
-
-Thu Jun 29 07:45:33 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/socket.c (udp_send): destination may be packed
- struct sockaddr.
-
- * object.c (rb_Integer): Integer(nil) should be invalid, on the
- other hand, nil.to_i is OK.
-
-Wed Jun 28 17:26:06 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/socket.c (ip_recvfrom): udp_recvfrom and tcp_recvfrom
- is merged and moved to IPSocket#recvfrom.
-
- * ext/socket/socket.c (sock_s_getaddrinfo): family can be a
- strings such as "AF_INET" etc.
-
- * ruby.c (require_libraries): . and RUBYLIB added to $load_path
- just before -r procedure.
-
- * ruby.c (proc_options): -e, - did not exec -r.
-
-Wed Jun 28 14:52:28 2000 Koga Youichirou <y-koga@mms.mt.nec.co.jp>
-
- * config.sub: NetBSD/hpcmips support.
-
-Wed Jun 28 10:11:06 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * gc.c: gc trigger threshold changed; GC_NEWOBJ_LIMIT removed,
- FREE_MIN is increased to 4096.
-
-Tue Jun 27 22:39:28 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.24.
-
- * lib/net/protocol.rb: modified each_crlf_line again.
-
- * lib/net/protocol.rb: do_write_beg,do_write_end -> writing{}
- do_write_do -> do_write
-
- * lib/net/http.rb: can make proxy connection by passing
- addresses to HTTP.new, start.
-
- * lib/net/http.rb: HTTP.new_implementation, old_implementation:
- can use 1.2 implementation of head, get, post, put.
- (see document)
-
-Tue Jun 27 12:05:10 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * win32.c (myfdclr): new function.
-
- * win32.h: add FD_CLR.
-
-Mon Jun 26 23:41:41 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ruby.h: add cast for ANSI style.
-
- * gc.c (rb_data_object_alloc): use RUBY_DATA_FUNC.
-
-Mon Jun 26 22:20:03 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * win32/win32.c (is_socket, extract_file_fd): New function.
-
- * win32/win32.c (myfdopen): use is_socket().
-
- * win32/win32.c (myselect): return non socket files immediately
- if file and socket handles are mixed.
-
-Mon Jun 26 16:21:30 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_schedule): wait_for cleared too early.
-
-Mon Jun 26 09:15:31 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * pack.c: remove obsolete 'F', 'D' specifiers.
-
-Sun Jun 25 00:55:03 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/socket/socket.c (sock_s_getnameinfo): `res' would not
- be assigned if TYPE(sa) == T_STRING.
-
-Sat Jun 24 14:36:29 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * config*.dj, configure.bat, top.sed: move to djgpp/.
-
-Sat Jun 24 02:34:17 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (load_file): call require_libraries() here to let
- debug.rb work properly.
-
-Fri Jun 23 22:34:51 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * bignum.c (rb_big_lshift): reorder xds assignment to avoid
- reusing `x' as `len' by VC++ 6.0 SP3 compiler with -Ox switch.
-
-Fri Jun 23 01:11:27 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_substr): should return empty string (""),
- if beg == str.size and len == zero, mostly for convenience and
- backward compatibility.
-
- * parse.y (new_super): should tweak block_pass node for super too.
-
- * string.c (rb_str_split_m): last split element should not be nil,
- but "" when limit is specified.
-
-Thu Jun 22 17:27:46 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_substr): str[n,m] now returns nil when n equals
- to str.size.
-
-Thu Jun 22 13:49:02 2000 Uechi Yasumasa <uechi@ryucom.ne.jp>
-
- * lib/net/ftp.rb: support resuming.
-
-Thu Jun 22 13:37:19 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * eval.c (rb_thread_sleep_forever): merge pause() macro.
-
-Wed Jun 21 08:49:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): should not raise exception just by defining
- singleton class.
-
-Wed Jun 21 01:18:03 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.h: two macros RUBY_DATA_FUNC and RUBY_METHOD_FUNC are added
- to make writing C++ extensions easier.
-
- * array.c (rb_ary_dup): internal classes should not be shared by dup.
-
- * hash.c (rb_hash_dup): ditto.
-
- * object.c (rb_obj_dup): ditto.
-
- * string.c (rb_str_dup): ditto.
-
- * error.c (Init_Exception): renamed NotImplementError to
- NotImplementedError.
-
-Tue Jun 20 16:22:38 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (make_time_t): bug in DST boundary.
-
-Tue Jun 20 10:54:19 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in: add eval sitedir.
-
-Tue Jun 20 06:14:43 2000 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: change: version syntax. old: x.yz, now: x.y.z
-
- * lib/net/telnet.rb: ditto.
-
-Tue Jun 20 00:37:45 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (rb_reg_kcode_m): Regexp#kcode returns nil for code unfixed
- regexp object.
-
- * bignum.c (bigdivmod): bignum zero check was wrong.
-
-Mon Jun 19 10:48:28 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (rb_cvar_set): forgot to add security check for class
- variable assignment.
-
-Sun Jun 18 22:49:13 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in: single quoted sitedir.
-
- * mkconfig.rb: add DESTDIR for cross-compiling.
-
- * lib/mkmf.rb: add DESTDIR.
-
- * ruby.c (load_file): force binmode if fname includes ".exe"
- on DOSISH.
-
-Sat Jun 17 23:22:17 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sprintf.c (rb_f_sprintf): should ignore negative precision given
- by <%.*>.
-
- * sprintf.c (rb_f_sprintf): should allow zero precision.
-
-Sat Jun 17 03:13:29 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_localtime): avoid unnecessary call of localtime.
-
- * time.c (time_gmtime): avoid unnecessary call of gmtime.
-
- * process.c (proc_wait2): new method.
-
- * process.c (proc_waitpid): second argument made optional.
-
- * process.c (proc_waitpid2): new method.
-
-Sat Jun 17 00:05:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (rb_reg_clone): should initialize member fields.
-
-Fri Jun 16 22:49:34 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_rewind): set lineno to zero.
-
-Fri Jun 16 22:47:47 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.23.
-
- * lib/net/protocol.rb: too many CRLF in last line.
-
-Fri Jun 16 21:23:59 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in: add pause(2) checking.
-
- * eval.c: define pause() if missing.
-
-Fri Jun 16 18:41:58 2000 Koji Arai <JCA02266@nifty.ne.jp>
-
- * process.c (proc_setsid): BSD-style setpgrp() don't return
- process group ID, but 0 or -1.
-
-Fri Jun 16 16:23:35 2000 Koji Arai <JCA02266@nifty.ne.jp>
-
- * file.c (rb_stat_inspect): gives detailed information;
- compatibility with ruby-1.4.x.
-
-Fri Jun 16 05:18:45 2000 Yasuhiro Fukuma <yasuf@bsdclub.org>
-
- * configure.in: FreeBSD: do not link dummy libxpg4 which was
- merged into libc.
-
-Fri Jun 16 03:17:36 2000 Satoshi Nojo <nojo@t-samukawa.or.jp>
-
- * ext/dbm/dbm.c (fdbm_length): use GetDBM. empty?, [] too.
-
- * ext/gdbm/gdbm.c (fgdbm_length): ditto.
-
- * ext/sdbm/init.c (fsdbm_length): ditto.
-
-Fri Jun 16 01:57:31 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_sleep_forever): pause(2) instead of sleep(3).
-
-Thu Jun 15 10:46:36 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_sub_bang): should propagate taintness from
- replacement string.
-
-Wed Jun 14 17:01:41 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * rubytest.rb: add CONFIG['EXEEXT'] to the executable file name.
-
-Wed Jun 14 14:50:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_f_sub): assign to $_ only if modification happens.
-
- * string.c (rb_f_gsub): ditto.
-
- * string.c (rb_f_chop): ditto.
-
- * string.c (rb_f_chomp): ditto.
-
- * io.c (io_reopen): preserve file position by ftell/fseek, if io
- is a seekable.
-
- * eval.c (method_arity): wrong arity number for the methods with
- optional arguments.
-
- * time.c (make_time_t): opposite timezone shift (should be negative).
-
-Wed Jun 14 14:07:38 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * io.c: typo(ig/if).
-
- * re.c: typo(re/reg). add rb_reg_check().
-
- * time.c: remove unneeded declare(daylight, timezone).
-
- * configure.in: add include <time.h> when daylight checking.
-
-Wed Jun 14 11:36:52 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * marshal.c (r_object): modified for symbols.
-
- * marshal.c (w_object): ditto.
-
-Wed Jun 14 10:04:58 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (rb_memcmp): should compare according to ruby_ignorecase.
-
- * string.c (rb_str_cmp): use rb_memcmp.
-
- * string.c (rb_str_index): ditto.
-
- * string.c (rb_str_rindex): ditto.
-
- * string.c (rb_str_each_line): ditto.
-
-Wed Jun 14 04:58:53 2000 Dave Thomas <dave@thomases.com>
-
- * io.c (rb_io_set_lineno): should have returned VALUE, not
- integer.
-
-Wed Jun 14 09:29:42 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_dup): dup should always propagate taintness.
-
-Wed Jun 14 00:50:14 2000 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: read_multipart(): if no content body then raise EOFError.
-
-Tue Jun 13 11:46:17 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * process.c (proc_setsid): try implement it using setpgrp() and
- ioctl(fd, TIOCNOTTY, NULL).
-
- * re.c (rb_reg_prepare_re): magic variable $= should affect regex
- pattern match.
-
- * time.c (make_time_t): use tm.tm_gmtoff if possible.
-
- * time.c (time_zone): use tm.tm_zone if available.
-
-Tue Jun 13 01:50:57 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.22.
-
- * lib/net/http.rb: HTTPResponse#body returns body.
-
-Mon Jun 12 23:41:54 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in (daylight): avoid GCC optimization.
-
-Mon Jun 12 19:02:27 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in: cygwin has strange timezone.
-
- * time.c (time_zone): use tzname and daylight.
-
-Sat Jun 10 23:10:32 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_seek): whence is optional, default is SEEK_SET.
-
-Fri Jun 9 17:00:29 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.21.
-
- * lib/net/http.rb: exception is raised with response object.
-
-Fri Jun 9 15:11:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (make_time_t): supports daylight saving time.
-
- * eval.c (rb_thread_safe_level): should retrieve current $SAFE
- value if a thread is the current thread.
-
-Thu Jun 8 14:25:45 2000 Hiroshi Igarashi <iga@ruby-lang.org>
-
- * lib/mkmf.rb: add target `distclean' in Makefile for extlib.
- target `clean' doesn't remove Makefile.
-
-Thu Jun 8 13:34:03 2000 Dave Thomas <dave@thomases.com>
-
- * numeric.c: add nan?, infinite?, and finite? to Float
-
-Thu Jun 8 00:31:04 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * regex.h: export re_mbctab properly on cygwin.
-
- * dln.c: use dlopen instead of LoadLibrary on cygwin.
-
-Thu Jun 8 13:41:34 2000 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * file.c (rb_file_s_basename): might dump core.
-
-Tue Jun 6 03:29:12 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * dir.c (dir_foreach): now returns nil for consistency.
-
- * bignum.c (bigdivmod): modulo by small numbers was wrong.
-
-Mon Jun 5 00:18:08 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * bignum.c: avoid conflict with USHORT on mingw32.
-
-Mon Jun 5 00:13:35 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * eval.c (rb_thread_schedule): =/== typo.
-
-Sun Jun 4 03:17:36 2000 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: improve: CGI::pretty()
-
-Sun Jun 4 02:01:10 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * lib/mkmf.rb: do not need to add -L$(topdir) in --enable-shared case.
-
-Sat Jun 3 13:50:06 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (rb_id2name): should support constant attrset
- identifiers.
-
- * bignum.c (rb_big_eq): Bignum#== should not raise exception.
-
-Fri Jun 2 11:24:48 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_popen): open with a block returns the value from the
- block. old behavior was back.
-
-Fri Jun 2 00:42:31 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
-
- * eval.c (rb_thread_cleanup): should clear priority for thread
- termination.
-
-Thu Jun 1 22:39:41 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.20.
-
- * lib/net/http.rb: wrongly closed the socket twice
- when no Content-Length: was given.
-
-Thu Jun 1 00:59:15 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_yield_0): convert Qundef to [].
-
-Wed May 31 20:45:59 2000 Dave Thomas <Dave@Thomases.com>
-
- * string.c (rb_str_slice_bang): wrong argument number.
-
-Wed May 31 12:37:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_exec_end_proc): print error message from END procs.
-
-Wed May 31 04:06:41 2000 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: change: CGI#out() if "HEAD" == REQUEST_METHOD then
- output only HTTP header.
-
-Wed May 31 01:54:21 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_schedule): set main_thread->status to
- THREAD_TO_KILL, before raising deadlock error.
-
- * eval.c (rb_thread_deadlock): if curr_thread == main_thread, do
- not call rb_thread_restore_context()
-
-Tue May 30 23:33:41 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * lib/mkmf.rb (create_makefile): add $(TARGET).ilk and *.pdb
- to cleanup files for mswin32.
-
-Mon May 29 10:41:10 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * file.c (rb_file_s_basename): should propagate taintness.
-
-Sun May 28 21:37:13 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * eval.c: bug fix: DLEXT2.
-
-Sun May 28 19:21:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * win32/win32.c: use ruby's glob.
-
- * dir.c: "glob" exported and renamed to "rb_glob".
-
- * ruby.h: ditto.
-
- * main.c: turn off command line mingw32's globbing.
-
-Wed May 25 22:25:13 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/extmk.rb.in: use "ftools" instead of "rm -f".
-
- * lib/mkmf.rb: ditto.
-
-Thu May 25 22:01:32 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * defines.h: mswin32: remove obsolete USHORT definition.
-
- * re.h: mswin32: use EXTERN instead of extern.
-
- * regex.h: mswin32: export re_mbctab properly.
-
- * win32/ruby.def: add ruby_ignorecase and regex.c's exports.
-
-Thu May 25 21:28:44 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * re.c (rb_reg_expr_str): escape un-printable character.
-
-Thu May 25 01:35:15 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (tokadd_escape): forgot to add `\x' to hexadecimal
- escape sequences.
-
- * object.c (rb_obj_dup): dup for normal object (T_OBJECT) copies
- instance variables only.
-
-Wed May 24 23:49:47 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (rb_mod_initialize): should provide initialize.
-
-Wed May 24 23:17:50 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * win32/Makefile: remove unnecessary mv and rm command call.
-
-Wed May 24 21:01:04 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/pty/pty.c: use "" instead of <> to include ruby.h and rubyio.h
- for BeOS (PowerPC).
-
- * file.c (rb_find_file): should check dln_find_file() result.
-
- * win32/ruby.def: add rb_block_given_p.
-
-Wed May 24 16:32:45 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_popen): popen does not take 3rd argument anymore.
-
- * re.c (rb_reg_desc): re may be zero, check before dereferencing.
-
-Wed May 24 16:03:06 2000 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/cgi.rb: bug fix: CGI::escape(), CGI::Cookie::new()
-
- * lib/net/telnet.rb: improve: binmode(), telnetmode() interface
-
-Wed May 24 13:12:31 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * misc/ruby-mode.el (ruby-parse-region): support `while .. do'
- etc. But corresponding keywords must be at the beginning of
- line.
-
-Tue May 23 23:50:12 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (rb_reg_initialize_m): wrong kcode value.
-
- * re.c (rb_reg_s_new): forgot to initialize re->ptr.
-
-Tue May 23 08:36:24 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): forgot to restore old option
- status by (?ix-ix).
-
- * regex.c (re_compile_fastmap): anychar may match newline if
- RE_OPTION_MULTILINE or RE_OPTION_POSIXLINE is set.
-
-Mon May 22 22:45:06 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.19.
-
- * lib/net/http.rb: do not use Regexp "p" option.
-
-Mon May 22 21:56:43 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * struct.c (rb_struct_getmember): should use ID2SYM, not INT2NUM.
-
-Mon May 22 15:07:37 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * file.c (rb_find_file): should check if the file really exists.
-
-Mon May 22 09:08:12 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_popen): _exit(0) after processing block under the
- child process.
-
- * io.c (rb_io_popen): flush stdout/stderr before subprocess
- termination.
-
- * eval.c (rb_check_safe_str): insert rb_secure(4); operation
- requires untainted string should be prohibited in level 4.
-
-Sun May 21 21:17:00 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in: add Setup.dj for djgpp cross-compiling.
-
- * Setup.dj: add readline.
-
- * instruby.rb: copy win32/win32.h to archlibdir on mingw32.
-
-Sun May 21 20:58:08 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * pack.c: fix OFF16 and OFF32 definitions for Alpha and IRIX64.
-
-Sun May 21 17:31:37 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * instruby.rb: support "make install" for cross-compiling.
-
- * ext/extmk.rb.in: ditto.
-
-Sun May 21 14:22:49 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * Makefile.in: rename prep.rb to fake.rb.
-
- * configure.in: ditto.
-
-Sat May 20 23:29:14 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * dir.c (dir_s_new): does not take block; "open" does.
-
- * io.c (rb_io_s_new): ditto.
-
-Fri May 19 07:44:26 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * dir.c (dir_s_open): Dir#open does not returns closed Dir if a
- block is given to the method.
-
- * re.c (rb_reg_initialize_m): Regexp::new calls initialize now.
-
- * string.c (Init_String): String#delete_at removed.
-
- * string.c (rb_str_aset_m): should have checked argc != 2.
-
- * eval.c (rb_thread_schedule): select(2) was called too many.
-
- * regex.c (re_compile_pattern): a bug in (?m) support. Pointed
- out by Dave Thomas <Dave@thomases.com>.
-
-Thu May 18 23:55:26 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * dln.c (search_undef): st_lookup()'s 3rd parameter should be
- a pointer of the variable which has the same size and alignment
- as `char *'.
-
- * marshal.c (w_symbol, w_object): ditto.
-
- * parse.y (rb_intern): ditto.
-
-Thu May 18 18:00:35 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.18.
-
- * lib/net/protocol.rb: Net::Version was removed.
-
- * lib/net/smtp.rb: use Socket.gethostname to get local host name.
-
-Thu May 18 13:34:57 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/socket.c (ruby_connect): should not have replaced
- thread_write_select() by rb_thread_fd_writable().
-
-Thu May 18 09:01:25 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * configure.in, ext/extmk.rb.in, lib/mkmf.rb: remove BeOS R3 support.
- Make a shared library (libruby.so) only if the --enable-shared
- option is specified.
-
- * instruby.rb: no longer use libruby.so.LIB and import.h.
-
- * io.c: fix READ_DATA_PENDING definition for BeOS (PowerPC).
-
-Wed May 17 14:14:23 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (rb_reg_new_1): use /m instead of /p.
-
-Wed May 17 02:22:03 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_polling): wait 0.06 second to let other
- processes run.
-
- * process.c (rb_waitpid): avoid busy wait using rb_thread_polling.
-
- * file.c (rb_thread_flock): ditto.
-
- * parse.y (expr): avoid calling value_expr() twice.
-
-Wed May 17 00:45:57 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * io.c (rb_io_binmode): should check PLATFORMs, not O_BINARY, sigh...
-
-Wed May 17 00:40:15 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * win32/config.h: add DLEXT2, now DLEXT on mswin32 is "so".
-
- * win32/config.status: ditto.
-
- * win32/ruby.def: add symbol "rb_big_divmod".
-
-Tue May 16 19:45:32 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * intern.h: use EXTERN instead of extern.
-
- * win32/ruby.def: add rb_defout, rb_stdout, ruby_errinfo,
- ruby_sourceline, ruby_sourcefile to work with eruby
- reported by Hiroshi Saito <HiroshiSaito@pob.org>.
- Export both ruby_xmalloc and xmalloc etc.
-
-Tue May 16 17:00:05 2000 Masaki Fukushima <fukusima@goto.info.waseda.ac.jp>
-
- * eval.c (rb_thread_select): should check whether fds are null.
-
-Tue May 16 11:51:31 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (pipe_open): synchronize subprocess stdout/stderr.
-
-Mon May 15 15:38:09 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.h: exported symbols should be for xmalloc etc. are now
- prefixed by 'ruby_', e.g. ruby_xmalloc().
-
- * eval.c (rb_thread_select): remove busy wait for select.
-
- * dir.c (glob): trailing path may be null, e.g. glob("**").
-
-Mon May 15 14:48:41 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * io.c (rb_io_pid): new method; returns nil if no process attached
- to the IO.
-
-Mon May 15 01:18:20 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_s_popen): _exit after Proc execution.
-
-Sun May 14 18:05:59 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * Makefile.in: missing/nt.c -> win32/win32.c
-
- * configure.in: bug fix; static linking on mingw32.
-
- * cygwin/GNUmakefile.in: remove VPATH.
-
- * ext/extmk.rb.in: Makefile set binmode with mingw32 on cygwin32.
-
- * lib/mkmf.rb: ditto.
-
- * win32/config.h: undef HAVE_SYS_FILE_H.
-
-Sun May 14 02:02:48 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * lib/irb/ruby-lex.rb: '/' should be escaped in character class.
-
-Sun May 14 00:54:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in, ...: support mingw32.
-
- * defines.h: ditto. undef EXTERN for tcl/tk on cygwin.
-
- * ext/*/extconf.rb: replace PLATFORM with RUBY_PLATFORM.
-
- * ext/socket/sockport.h: define IN_MULTICAST for missing IN_MULTICAST.
-
- * ext/tcltklib/tcltklib.c: remove declaration of rb_argv0.
-
- * file.c: should check S_IXGRP, S_ISGID, not NT.
-
- * io.c (rb_io_binmode): should check _IOBIN, O_BINARY, not PLATFORMs.
-
-Sat May 13 14:21:15 2000 Koji Arai <JCA02266@nifty.ne.jp>
-
- * io.c (rb_io_s_popen): should check whether a block is given.
-
-Fri May 12 17:33:44 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): charset_not should not exclude
- newline from matching set.
-
-Thu May 11 22:51:05 2000 Ryunosuke Ohshima <ryu@jaist.ac.jp>
-
- * pack.c (pack_pack): Bignum support.
-
- * pack.c (pack_unpack): ditto.
-
-Thu May 11 21:19:29 2000 Hiroshi Igarashi <iga@ruby-lang.org>
-
- * intern.h: add missing declarations of ruby API functions.
-
- * ruby.h: fix function name in declarations.
-
-Thu May 11 22:29:25 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/md5/depend: add $(topdir)/config.h dependency to md5c.o.
-
- * ext/md5/extconf.rb: new file to add -DHAVE_CONFIG_H flag for Alpha.
-
-Thu May 11 10:55:52 2000 Ryunosuke Ohshima <ryu@jaist.ac.jp>
-
- * pack.c (pack_pack): packing BER compressed integer by `w'.
-
- * pack.c (pack_unpack): unpacking BER.
-
-Thu May 11 00:37:55 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (parse_regx): remove in_brack.
-
-Wed May 10 12:51:18 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (proc_options): move adding RUBYLIB and "." to the load
- path after #! line parsing.
-
- * parse.y (parse_regx): should parse backslash escape like `\c['
- here to avoid causing `unterminated regexp' error.
-
-Wed May 10 00:19:53 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * MANIFEST, beos/GNUmakefile.in, configure.in: no longer need
- beos/GNUmakefile.in to support BeOS R4.5.2 (Intel) as a result
- of eban's Makefile.in change.
-
- * io.c: NOFILE is already defined on BeOS R4.5 (Intel) or later.
-
- * lib/matrix.rb: remove debug print.
-
- * regex.c: don't use nested comment.
-
-Tue May 9 17:08:43 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (massign): no longer convert nil into empty array.
-
- * io.c (rb_io_s_popen): optional 3rd argument to give proc, which
- will be executed in spawned child process.
-
-Mon May 8 23:47:39 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * eval.c (rb_callcc): prev & next should be initialized to zero.
-
-Mon May 8 23:17:36 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * dln.c (dln_init): remove possible buffer overrun. This is
- suggested by Aleksi Niemela <aleksi.niemela@cinnober.com>.
-
- * dln.c (init_funcname): ditto.
-
-Sat May 6 23:35:47 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (lhs): should allow `obj.Attr = 5' type expression.
-
-Sat May 6 15:46:08 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/socket/extconf.rb: add a new configure option to force use
- of the WIDE Project's getaddrinfo(): --enbale-wide-getaddrinfo.
-
-Fri May 5 21:19:22 2000 MOROHOSHI Akihiko <moro@remus.dti.ne.jp>
-
- * parse.y (yylex): allow '$1foo' and such.
-
-Fri May 5 17:57:24 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.17.
-
- * lib/net/http.rb: write also port number in Host: field.
-
- * lib/net/http.rb: see Proxy-Connection: to decide socket connection.
-
-Fri May 5 03:25:15 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_fastmap): charset_not for multibyte
- characters excluded too many characters.
-
-Tue May 2 13:23:43 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_schedule): little bit more impartial context
- switching.
-
-Tue May 2 09:50:03 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * configure.in: add DLDLIBS to set platform specific library
- for extensions.
-
- * ext/extmk.rb.in: use @DLDLIBS@ instead of RUBY_PLATFORM choice.
-
- * lib/mkmf.rb: use CONFIG["DLDLIBS"] instead of RUBY_PLATFORM choice.
-
- * config_s.dj: add @DLDLIBS@.
-
- * win32/config.status: ditto.
-
- * win32/ruby.def: regular maintenance.
-
-Mon May 1 23:42:44 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in, eval.c: add DLEXT2. now DLEXT on Cygwin is "so".
-
- * defines.h: use dllimport, dllexport for Cygwin 1.1.x.
-
- * ruby.h: ditto.
-
- * cygwin/GNUmakefile.in: ditto.
-
- * ext/Win32API/Win32API.c: directly "call" in asm statement for
- gcc 2.95.x or newer.
-
-Sat Apr 29 04:58:12 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * array.c (rb_ary_unshift_m): performance improvement.
-
-Fri Apr 28 00:19:22 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * array.c (rb_ary_unshift_m): takes items to push.
-
-Wed Apr 26 15:23:02 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_succ): insert carrying character just before
- the leftmost alpha numeric character.
-
- * string.c (rb_str_succ): proper behavior for "".succ and "\377".succ.
-
- * string.c (rb_str_succ): use realloc and memmove.
-
-Tue Apr 25 18:28:45 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.16.
-
- * lib/net/smtp.rb: add SMTP AUTH
-
-Tue Apr 25 14:30:13 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_gets_internal): shortcut when rs == rb_default_rs.
-
-Sat Apr 22 23:14:41 2000 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
-
- * configure.in: MacOS X support.
-
-Sat Apr 22 16:37:10 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.15.
-
- * lib/net/http.rb: closing socket by watching both
- user header and server response
-
-Fri Apr 21 21:44:34 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * io.c (rb_io_s_pipe): should set FMODE_SYNC.
-
-Thu Apr 20 16:59:22 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (massign): `*lvalue = false' should assign `[false]' to
- lvalue.
-
-Wed Apr 19 08:35:08 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * class.c (rb_singleton_class): generate singleton class for
- special constants: nil, true, false.
-
-Wed Apr 19 02:09:30 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * class.c (rb_singleton_class): singleton method for nil, true,
- false is possible now.
-
- * eval.c (rb_eval): ditto.
-
-Tue Apr 18 18:54:25 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.14.
-
- * lib/net/http.rb: new method HTTP#head2.
-
- * lib/net/http.rb: get2/post2 does not raise exceptions.
-
-Mon Apr 17 15:16:31 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_close): to detect some exceptional status, writable
- IO should be flushed before close;
-
-Sat Apr 15 18:29:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (rb_ary_collect_bang): Array#filter renamed.
-
-Fri Apr 14 19:47:11 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.13.
-
- * lib/net/pop.rb: accept illegal timestamp
-
- * lib/net/http.rb: when body was chunked, does not set Content-Length:
-
-Tue Apr 11 21:14:42 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * config_s.dj: add @sitedir@.
- * configure.in: add --with-sitedir=DIR option.
- * instruby.rb: use CONFIG["sitedir"].
- * lib/mkmf.rb: support 'make site-install'.
- * win32/config.status: add @sitedir@.
-
-Tue Apr 11 16:25:15 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (rb_big_2comp): unnecessary lvalue cast removed.
-
-Tue Apr 11 02:25:53 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (env_fetch): new method.
-
- * marshal.c (marshal_dump): accepts depth = nil for unlimited depth.
-
-Sun Apr 9 20:49:19 2000 Dave Thomas <Dave@Thomases.com>
-
- * parse.y (str_extend): Allow class variables to be expanded.
-
-Fri Apr 7 02:03:54 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * error.c (rb_sys_fail): escape non-printable characters.
-
-Thu Apr 6 20:10:47 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/extmk.rb.in (create_makefile): BeOS --program-suffix support.
- * lib/mkmf.rb (create_makefile): ditto.
-
-Thu Apr 6 09:55:26 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * error.c (rb_sys_fail): need rb_exc_new2() call on BeOS.
-
-Mon Apr 3 17:22:27 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_reopen): support tempfile.
-
- * eval.c (catch_i): should supply argument.
-
-Sat Apr 1 22:50:28 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * marshal.c (r_object): wrong symbol restoration.
-
-Sat Apr 1 21:30:53 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * io.c (rb_io_printf, rb_f_printf): should use rb_io_write.
-
-Sat Apr 1 00:16:05 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * gc.c (rb_gc_call_finalizer_at_exit): should be clear flags
- before calling finalizers.
-
- * eval.c (specific_eval): can be called without SecurityError, if
- $SAFE >= 4.
-
- * object.c (sym_inspect): inspect gives ":sym", to_s gives "sym".
-
-Fri Mar 31 22:07:04 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.12.
-
- * lib/net/protocol.rb: update Net::Protocol::Proxy#connect
-
- * lib/net/protocol.rb: ReplyCode is not a class
-
- * lib/net/http.rb: header value format was change:
- values do not include header name
-
- * lib/net/http.rb: header is not a Hash, but HTTPResponse
-
-Thu Mar 30 12:19:44 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * enum.c (enum_find): rb_eval_cmd() should be called with array.
-
-Tue Mar 28 13:57:05 2000 Clemens Hintze <c.hintze@gmx.net>
-
- * ext/dbm/dbm.c (fdbm_invert): should return new hash.
-
- * ext/gdbm/gdbm.c (fgdbm_invert): ditto.
-
-Tue Mar 28 00:58:03 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.11.
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: does not
- dispatch any commands while dispatching command.
-
- * lib/net/protocol.rb: failed to get error class of
- inherited ReplyCode
-
- * lib/net/http.rb: change feature of "get2", "post2"
-
-Mon Mar 27 01:34:58 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.10.
-
- * lib/net/http.rb: return value of 'head' was wrong.
-
-Sun Mar 26 17:47:35 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.9.
-
- * lib/net/smtp.rb: SMTP#do_ready wrongly took no arguments
-
-Sat Mar 25 23:21:10 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * marshal.c (w_object): symbols should be converted to ID before
- dumping out.
-
-Fri Mar 24 18:26:51 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * file.c (test_check): should have checked exact number of arguments.
-
-Fri Mar 24 21:02:11 2000 Koji Arai <JCA02266@nifty.ne.jp>
-
- * signal.c (trap): should treat some symbols as the signal.
-
-Fri Mar 24 06:58:03 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.8.
-
- * lib/net/http.rb: post, get2, post2, get_body
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: separate
- Command/Socket documentation.
-
-Thu Mar 23 02:26:14 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_fptr_finalize): fptr may be null.
-
- * io.c (rb_io_s_new): now calls `initialize'.
-
- * io.c (rb_io_initialize): actual open done in this method.
-
- * io.c (rb_file_initialize): ditto.
-
- * eval.c (rb_eval): class variables in singleton class definition
- is now handled properly (I hope).
-
-Wed Mar 22 21:49:36 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * st.c (st_delete_safe): skip already deleted entry.
-
- * hash.c (rb_hash_delete): modify brace miss.
-
-Wed Mar 22 08:53:58 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (exec_under): do not push cbase if ruby_cbase == under.
-
- * node.h (NEW_CREF0): preserve cbase nesting.
-
-Tue Mar 21 12:57:50 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (rb_class_s_new): Class::new should call `inherited'.
-
-Sat Mar 18 12:36:09 2000 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * eval.c (rb_backtrace, make_backtrace): removed unused variable
- `lev'.
-
- * eval.c (rb_attr): calls `method_added' at attribute definition.
-
- * eval.c (rb_mod_modfunc): calls `singleton_method_added' while
- `module_function'.
-
- * eval.c (rb_eval): parameter to `method_added' and
- `singleton_method_added' is Symbol.
-
- * eval.c (Init_eval): caches IDs for `method_added' and
- `singleton_method_added'.
-
-Sat Mar 18 11:25:10 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (rescue): allows `rescue Error in foo'. experimental.
- which is better this or preparing alias `exception' for `$!'?
-
-Fri Mar 17 15:02:45 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (rb_autoload_id): defining new autoload should be
- prohibited for $SAFE > 4.
-
- * variable.c (rb_autoload_load): autoload should be possible for
- $SAFE > 4.
-
- * eval.c (call_trace_func): should handle T_ICLASS properly.
-
-Fri Mar 17 14:34:30 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_gsub): forgot to initialize str->orig.
-
-Fri Mar 17 01:24:59 2000 Dave Thomas <Dave@thomases.com>
-
- * string.c (rb_str_clone): forgot to copy str->orig if STR_NO_ORIG
- is set by Array#pack.
-
-Wed Mar 15 21:25:04 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * array.c (rb_ary_join): 'result' is always duplicated
- before concat string.
-
-Wed Mar 15 17:26:05 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (rb_hash_s_create): unexpected recursive call removed.
- this bug was found by Satoshi Nojo <nojo@t-samukawa.or.jp>.
-
-Wed Mar 15 13:12:39 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (Init_Thread): Thread.join removed finally.
-
- * string.c (rb_str_chomp_bang): forgot to call rb_str_modify().
-
-Mon Mar 13 16:12:13 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (block_pass): distinguish real orphan block and still
- on-stack block passed by block argument.
-
-Mon Mar 13 00:20:25 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (f_norm_arg): proper error message when constant comes
- in formal argument list. this message is suggested by Muvaw
- Pnazte <bugathlon@yahoo.com>.
-
- * eval.c (rb_f_raise): proper error message when the first
- argument is not an exception class/object.
-
- * string.c (rb_str_dup): dup now postpone buffer copy as long as
- possible. performance improved by lazy copying.
-
-Sun Mar 12 13:58:52 2000 Koji Arai <JCA02266@nifty.ne.jp>
-
- * signal.c (rb_f_kill): should treat some symbols as the signal.
-
-Sat Mar 11 22:03:03 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_gsub): performance tune by avoiding buffer copy.
-
- * eval.c (rb_f_missing): check if argv[0] is ID.
-
-Sat Mar 11 15:49:41 2000 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * struct.c (rb_struct_aref): struct aref by symbol.
-
-Sat Mar 11 05:07:11 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * process.c (proc_setpriority): should return 0, not nil.
-
- * process.c (proc_setpgid): ditto.
-
-Fri Mar 10 18:14:54 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * file.c (path_check_1): confusing buf and path. this bug found
- by <decoux@moulon.inra.fr>.
-
-Fri Mar 10 09:37:49 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * MANIFEST: add beos/GNUmakefile.in.
- * configure.in: support BeOS R4.5.2 (Intel).
- * beos/GNUmakefile.in: new file to support BeOS R4.5.2 (Intel).
-
-Thu Mar 9 11:13:32 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_fastmap): fixed embarrassing brace bug.
-
-Thu Mar 9 01:36:32 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * missing/flock.c: emulate missing flock() with fcntl().
-
-Thu Mar 9 00:29:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (sym_to_s): returns ":sym".
-
- * object.c (sym_id2name): separated from to_s; returns "sym".
-
-Wed Mar 8 19:16:19 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.7.
-
- * lib/net/http.rb (connecting): returns header
-
-Wed Mar 8 02:08:43 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y: escape expansion too early.
-
- * string.c (rb_f_scan): Kernel#scan added.
-
- * regex.c (re_compile_pattern): support \cX et al.
-
-Tue Mar 7 01:44:27 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (set_stdin): simplified procedure, allows $stdin = DATA;
- experimental.
-
- * io.c (set_outfile): ditto.
-
- * re.c (Init_Regexp): new method Regexp#last_match added; it's an
- alternative for $~.
-
- * configure.in (DEFAULT_KCODE): KCODE_NONE should be the default.
-
- * dir.c (dir_s_rmdir): should return 0 on success.
-
- * signal.c: remove CWGUSI support.
-
-Mon Mar 6 12:28:37 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * marshal.c (w_symbol): support symbol object.
-
- * util.c: make symbol as separated class.
-
- * error.c (Init_Exception): new exception RangeError.
-
- * ext/socket/socket.c (ip_addrsetup): should check length of hostname.
-
- * ext/socket/socket.c (ip_addrsetup): check newline at the end of
- hostname. These fixes suggested by Muvaw Pnazte <bugathlon@yahoo.com>.
-
-Sun Mar 5 20:35:45 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/Win32API/Win32API.c (Win32API_initialize): should call
- LoadLibrary() everytime and should assign the hdll to Win32API
- object(protect the hdll from GC).
-
-Sun Mar 5 18:49:06 2000 Nakada.Nobuyoshi <nobu.nokada@softhome.net>
-
- * misc/ruby-mode.el (ruby-parse-region): not treat method `begin'
- and `end' as reserved words.
-
- * misc/ruby-mode.el (ruby-font-lock-docs): ignore after `=begin'
- and `=end'.
-
- * misc/ruby-mode.el (ruby-font-lock-keywords, hilit-set-mode-patterns):
- added `yield' to keywords.
-
- * misc/ruby-mode.el (ruby-font-lock-keywords, hilit-set-mode-patterns):
- matches keywords at end of buffer.
-
-Sun Mar 5 18:08:53 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.6.
-
- * lib/net/http.rb: allow to omit 'start'
-
-Tue Feb 29 01:08:26 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * range.c (range_initialize): initialization done in `initialize';
- `initialize' should not be called more than once.
-
- * object.c (Init_Object): default `initialize' should take zero
- argument.
-
- * time.c (time_s_new): call `initialize' in Time::new.
-
-Sat Feb 26 22:39:31 2000 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * string.c (rb_str_times): fix String#* with huge string.
-
-Sat Feb 26 00:14:59 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * dir.c (dir_s_new): call `initialize' in Dir::new.
-
-Fri Feb 25 23:01:49 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ruby.h: export ruby_safe_level by EXTERN for mswin32.
- * win32/ruby.def: regular maintenance.
-
-Fri Feb 25 22:12:46 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_reopen): IO#reopen should accept path as well.
-
- * string.c (rb_str_s_new): call `initialize' in String::new.
-
- * hash.c (rb_hash_s_new): call `initialize' in Hash::new.
-
- * array.c (rb_ary_s_new): call `initialize' in Array::new.
-
-Fri Feb 25 12:50:20 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_start_timer): interval changed to 10ms from 50ms.
-
-Fri Feb 25 06:42:26 2000 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/socket/socket.c (ip_addrsetup): hostp should remain NULL if
- host is nil.
-
-Thu Feb 24 16:53:47 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_schedule): priority check for sleep expired
- threads needed.
-
-Wed Feb 23 14:22:32 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (rb_ary_join): forgot to initialize a local variable
- `taint'.
-
-Tue Feb 22 07:40:55 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (Init_Regexp): renamed to MatchData, old name MatchingData
- remain as alias.
-
-Tue Feb 22 00:20:21 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.5.
-
- * lib/net/session.rb: rename to protocol.rb
-
- * lib/net/protocol.rb: ProtocolSocket -> Net::Socket
-
- * lib/net/protocol.rb: Net::Socket#write, write_pendstr
- can take block
-
- * lib/net/smtp.rb: new methods SMTP#ready SMTPCommand#write_mail
-
- * lib/net/pop.rb: POPMail#pop can take block
-
-Sat Feb 19 23:58:51 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_match): pop_loop should not pop at forward jump.
-
-Fri Feb 18 17:15:40 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (method_clone): method objects are now clonable.
-
-Fri Feb 18 00:27:34 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (rb_shared_variable_declare): shared variable (aka
- class/module variable) introduced. prefix `@@'. experimental.
-
- * class.c (rb_scan_args): new format char '&'.
-
-Thu Feb 17 19:09:05 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * win32/win32.c (mypopen): don't close handle if it is not assigned.
- * win32/win32.c (my_open_osfhandle): support O_NOINHERIT flag.
- * win32/win32.c (win32_getcwd): rename getcwd to win32_getcwd
- in order to avoid using the C/C++ runtime DLL's getcwd.
- Use CharNext() to process directory name.
- * win32/win32.h: map getcwd to win32_getcwd.
-
-Wed Feb 16 00:32:49 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (method_arity): nd_rest is -1 for no rest argument.
-
- * process.c (proc_waitpid): returns nil when waitpid(2) returns 0.
-
-Tue Feb 15 01:47:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * process.c (rb_f_waitpid): pid_t should be signed.
-
-Mon Feb 14 13:59:01 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): yylex yields wrong tokens for `:foo=~expr'.
-
- * ruby.c (load_file): exit if reading file is empty.
-
-Mon Feb 14 03:34:52 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): `foo.bar=1' should be <foo><.><bar><=><1>,
- not <foo><.><bar=><1>.
-
- * eval.c (rb_thread_restore_context): process according to
- RESTORE_* is moved after longjmp().
-
- * eval.c (thread_switch): new function to process RESTORE_*.
-
-Sun Feb 13 16:19:49 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ruby.c (require_libraries): don't access freed memory.
-
- * ruby.c (add_modules): ditto.
-
-Fri Feb 11 12:06:22 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (parse_quotedwords): %w() need to split not only by mere
- spaces, but by all whitespaces.
-
-Thu Feb 10 02:12:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_index_m): did not support negative offset.
-
-Wed Feb 9 21:54:26 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/socket/getaddrinfo.c: gcc --traditional support.
- Rearrange headers to work AC_C_CONST.
- * ext/socket/getnameinfo.c: ditto.
- * ext/socket/socket.c: mswin32: use double instead of long long.
-
-Wed Feb 9 16:30:41 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * numeric.c (num_coerce): should return [y, x].
-
-Wed Feb 9 11:07:30 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (ruby_prog_init): loadpath structure changed.
-
-Tue Feb 8 02:07:33 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_search): optimize for \G at top.
-
- * regex.c (re_compile_pattern): \G introduced.
-
- * regex.c (re_match): ditto.
-
- * string.c (str_sub_bang): old behavior restored: bang method
- returns nil if string not changed.
-
- * regex.c (re_compile_pattern): support independent subexpression
- `(?>pattern)'.
-
- * regex.c (re_match): ditto.
-
-Mon Feb 7 15:51:08 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_match): now understands interrupts under Ruby.
-
-Mon Feb 7 07:51:52 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (rb_ary_uniq_bang): always return an Array.
-
- * array.c (rb_ary_compact_bang): ditto.
-
- * array.c (rb_ary_flatten_bang): ditto.
-
- * hash.c (rb_hash_reject): returns a Hash, not an Array.
-
- * hash.c (env_reject): ditto.
-
-Fri Feb 4 10:20:25 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (scan_once): scan now leaves information about the last
- successful pattern match in $&.
-
- * io.c (rb_io_close): should not check closed IO.
-
-Fri Feb 4 05:44:01 2000 Kentaro Inagaki <inagaki@tg.rim.or.jp>
-
- * ext/socket/socket.c (s_recv): TRAP_BEG after retry entry.
-
-Wed Feb 2 22:33:45 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (rb_thread_start): receives argument from outside, like
- `Thread::start(1,2,3){|a,b,c| ... }'.
-
-Wed Feb 2 22:14:40 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (rb_reg_regsub): should check regs->num_regs.
-
- * re.c (rb_reg_search): remove matchcache, use static struct
- re_register instead.
-
- * re.c (match_getter): avoid cloning match data.
-
-Wed Feb 2 17:12:15 2000 Dave Thomas <Dave@Thomases.com>
-
- * samples/eval.rb: Rescue new ScriptError exception
-
-Wed Feb 2 02:06:07 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_gsub_bang): gsub! now leaves information about the
- last successful pattern match in $&.
-
-Mon Jan 31 15:24:58 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_sub_bang): bang method returns string always.
- experimental.
-
-Sun Jan 30 17:58:09 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * eval.c: arrange to use setitimer(2) for BOW, DJGPP
-
- * defines.h: ditto. use random(3) on cygwin b20.1.
-
-Sun Jan 30 17:20:16 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * eval.c: use getrlimit(2) on DJGPP.
-
-Thu Jan 27 01:27:10 2000 GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp>
-
- * dir.c (glob): glob pattern "/*" did not match.
-
-Wed Jan 26 22:30:47 2000 Shigeo Kobayashi <shigeo@tinyforest.gr.jp>
-
- * numeric.c (flo_modulo): wrong result for negative modulo.
-
-Wed Jan 26 02:01:57 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * file.c (test_c): should use S_ISCHR.
-
- * file.c (rb_stat_c): ditto.
-
- * string.c (rb_str_each_line): should propagate tainting.
-
-Tue Jan 25 04:01:34 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (rb_obj_freeze): all objects made freezable.
-
-Tue Jan 25 00:37:01 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in: use AC_CHECK_TOOL for cross compiling.
-
-Mon Jan 24 19:01:54 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * array.c (rb_protect_inspect): should be checked by id of
- objects; not by object themselves.
-
-Mon Jan 24 18:48:08 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * eval.c (rb_eval): too many warnings; warned on every method
- overriding. should be on method discarding.
-
-Mon Jan 24 02:56:44 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): -2.abs should be `(-2).abs' to accomplish the
- principle of less surprise. `+2' too.
-
- * eval.c (rb_eval): when defining class is already there, and
- superclass differ, throw away the old class.
-
- * variable.c (rb_const_set): gives warning again on constant
- redefinition.
-
- * error.c (Init_Exception): SyntaxError, NameError, LoadError and
- NotImplementError are subclasses of ScriptError<Exception, not
- StandardError. experimental.
-
-Sat Jan 22 00:00:41 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (parse_quotedwords): no longer use `String#split'.
- and enable space escape within quoted word list.
- e.g. %w(a\ b\ c abc) => ["a b c", "abc"].
-
- * string.c (rb_str_slice_bang): new method `slice!'.
-
-Fri Jan 21 21:56:08 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.4.
-
- * lib/net/http.rb: can receive messages which have
- no Content-Length:.
-
-Fri Jan 21 16:15:59 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (thgroup_s_new): new class ThreadGroup.
-
-Tue Jan 18 12:24:28 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * struct.c (Init_Struct): remove Struct's own hash and eql?.
-
-Sat Jan 15 22:21:08 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * eval.c (search_method): argument klass may be 0.
-
-Sat Jan 15 15:03:46 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * enum.c (enum_index): remove this method.
-
- * enum.c: remove use of pointers to local variables. find,
- find_all, min, max, index, member?, each_with_index,
-
- * eval.c (massign): multiple assignment does not use to_a anymore.
- experimental.
-
-Fri Jan 14 12:22:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_replace): use memmove instead of memcpy for
- overwrapping strings (e.g. a[1] = a).
-
-Thu Jan 13 11:12:40 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (arg_add): use new node, ARGSPUSH.
-
-Mon Jan 10 18:32:28 2000 Koji Arai <JCA02266@nifty.ne.jp>
-
- * marshal.c (w_object): forgot an argument to call w_ivar().
-
-Sun Jan 9 18:13:51 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * random.c: first was not defined unless HAVE_RANDOM.
-
-Sat Jan 8 19:02:49 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_sysread): raise IOError for buffered IO.
-
- * ext/socket/socket.c (s_recv): ditto.
-
-Fri Jan 7 00:59:29 2000 Masahiro Tomita <tommy@tmtm.org>
-
- * io.c (io_fread): TRAP_BEG/TRAP_END added around getc().
-
-Thu Jan 6 00:39:54 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * random.c (rb_f_rand): should be initialized unless srand is
- called before.
-
-Wed Jan 5 16:59:34 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.3.
-
- * lib/net/session.rb: Session -> Protocol, ...
-
- * lib/net/http.rb: HTTPCommand implementation was changed.
-
-Wed Jan 5 02:14:46 2000 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * parse.y: Fix SEGV on empty parens with UMINUS or UPLUS.
-
-Tue Jan 4 22:25:54 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (stmt): `() while cond' dumped core.
-
-Tue Jan 4 06:04:14 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * configure.in: modify for cross-compiling.
- use target_* instead of host_*.
- use AC_CANONICAL_TARGET.
-
- * Makefile.in: ditto.
-
- * cygwin/GNUmakefile.in: ditto.
-
-Sat Jan 1 13:26:14 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_yield_0): force_recycle ruby_dyna_vars to gain
- performance.
-
- * array.c (rb_ary_delete_at_m): takes same argument pattern with
- rb_ary_aref.
-
-Sat Jan 1 10:12:26 2000 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ruby.h,util.c (rb_special_const_p): peep hole optimization.
-
- * ruby.h,util.c (rb_test_false_or_nil): removed.
-
- * ruby.h (RTEST, SPECIAL_CONST_P): peep hole optimization.
-
- * ruby.h (FL_ABLE, FL_SET, FL_UNSET, FL_REVERSE): made expressions
- not statements.
-
- * ruby.h (OBJ_INFECT): newly added macro which copies taint from
- `s' to `x'.
-
-Sat Jan 1 02:04:18 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_safe_level): new method.
-
- * eval.c (rb_yield_0): recycle dyna_var_map to reduce object
- allocation.
-
-Fri Dec 31 00:52:48 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c: thread independent trace_func not needed.
-
-Thu Dec 30 14:47:31 1999 akira yamada <akira@ruby-lang.org>
-
- * configure.in: specifies -soname in LIBRUBY_DLDFLAGS on linux
- platforms.
-
-Thu Dec 30 10:51:27 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c,io.c,hash,c,re.c,string.c: `_m' suffix instead of
- `_method' for wrapper functions to implement method,
- e.g. `rb_str_join_m()'.
-
-Thu Dec 30 02:08:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (rb_cstr2inum): non-numeric format check added.
- currently it works only with base == 0 (i.e. Integer()).
-
- * bignum.c (rb_str2inum): now takes VALUE to 1st argument. null
- byte check added.
-
- * array.c (rb_ary_replace): unless replacement is an array,
- replacement shall be converted to array by `[replacement]', not
- by `replacement.to_a'.
-
- * array.c (rb_ary_plus): right operand must be an array.
-
- * array.c (rb_ary_concat): argument must be an array.
-
-Mon Dec 27 12:35:47 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/socket/socket.c (sock_finalize): mswin32: fix socket handle leak.
-
- * win32/win32.c (myfdclose): ditto.
-
-Sun Dec 26 23:15:13 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * win32/win32.c (mypopen): raise catchable error instead of rb_fatal.
- * win32/win32.c (mypclose): fix process handle leak.
-
-Sun Dec 26 16:17:11 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/Win32API/Win32API.c (Win32API_initialize): use UINT2NUM
- instead of INT2NUM to set __dll__ and __proc__.
-
-Sat Dec 25 00:08:59 1999 KANEKO Naoshi <wbs01621@mail.wbs.ne.jp>
-
- * ext/Win32API/Win32API.c (Win32API_Call): remove 'dword ptr'
- from _asm.
-
-Fri Dec 24 10:26:47 1999 Koji Oda <oda@bsd1.qnes.nec.co.jp>
-
- * win32/win32.h: use "C++" linkage.
-
-Fri Dec 24 02:00:57 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (THREAD_ALLOC): should initialize th->trace.
-
-Fri Dec 24 00:43:39 1999 KANEKO Naoshi <wbs01621@mail.wbs.ne.jp>
-
- * io.c (pipe_open): check for `fptr->f == NULL'.
- * win32/win32.c (mypopen): STDERR does not work during ` function.
-
-Wed Dec 22 22:50:40 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.2.
-
- * lib/net/http.rb: HTTP support is enhanced a little
-
- * lib/net/http.rb: support proxy
-
-Tue Dec 21 17:21:28 1999 Koji Oda <oda@bsd1.qnes.nec.co.jp>
-
- * ext/socket/socket.c (sock_finalize): mswin32: fix FILE* leak.
-
-Tue Dec 21 05:33:56 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.1.
-
- * lib/net/http.rb: support HTTP chunk
-
-Mon Dec 20 19:08:12 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * file.c (rb_file_s_expand_path): handle dir separator correctly.
-
-Sun Dec 19 22:56:31 1999 KANEKO Naoshi <wbs01621@mail.wbs.ne.jp>
-
- * lib/find.rb: support dosish root directory.
- * win32/Makefile: ditto.
- * win32/config.status: ditto.
- * win32/win32.c (opendir): ditto.
- * win32/win32.c (opendir): use CharPrev() to get last character
- of the directory name.
-
-Sat Dec 18 03:00:01 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * file.c (path_check_1): check should be done by absolute path.
-
- * marshal.c (r_ivar): should restore generic_ivar too.
-
- * marshal.c (w_ivar): should dump generic_ivar too.
-
-Fri Dec 17 22:46:46 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.0.
-
- * lib/net/http.rb: test release
-
- * lib/net/session.rb: support class swapping
-
- * lib/net/session.rb: Socket#flush_rbuf
-
- * lib/net/session.rb: doquote -> Net.quote
-
-Fri Dec 17 19:27:43 1999 IWAMURO Motonori <iwa@mmp.fujitsu.co.jp>
-
- * eval.c (rb_load): should initialize ruby_frame->last_class.
-
-Wed Dec 15 01:35:29 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (proc_options): option to change directory changed to
- `-C' like tar.
-
- * ruby.c (proc_options): argv boundary check for `-X'.
-
-Mon Dec 13 15:15:31 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_adjust_startpos): separate startpos adjustment
- because of major performance drawback.
-
- * class.c (rb_singleton_class): tainted status of the singleton
- class must be synchronized with the object.
-
- * eval.c (rb_thread_schedule): implement thread priority.
-
-Sat Dec 11 03:34:38 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * gc.c (mark_hashentry): key should be VALUE, not ID.
-
- * io.c (argf_eof): should check next_p too.
-
-Thu Dec 9 18:09:13 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * error.c (exc_set_backtrace): forgot to declare a VALUE argument.
-
-Thu Dec 9 14:19:31 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (rb_obj_taint): explicit tainting must be prohibited at
- level 4 to prevent polluting trusted object by untrusted code.
-
- * file.c: file operations (stat, lstat, chmod, chown, umask,
- truncate, flock) are prohibited in level 2 (was level 4).
-
-Wed Dec 8 11:48:23 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_f_require): prohibiting require() in the secure mode
- cause serious autoloading error.
-
- * variable.c (rb_obj_instance_variables): don't need to prohibit
- to get list of instance variable names of untainted objects.
-
- * variable.c (rb_ivar_get): don't need to prohibit to get instance
- variables of untainted objects.
-
- * variable.c (rb_mod_remove_const): should prohibit constant
- removals too.
-
-Wed Dec 8 09:23:01 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): should try autoloading before defining
- class/module at the toplevel.
-
-Tue Dec 7 22:15:30 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * configure.in: Modified rb_cv_rshift_sign detect routine and
- more simple/fast RSHIFT() for hpux-10.x.
-
-Tue Dec 7 11:16:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (Init_eval): calculate stack limit from rlimit where
- getrlimit(2) is available.
-
-Tue Dec 7 09:57:33 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * file.c (rb_file_ftype): should have removed mode_t.
-
-Mon Dec 6 15:55:30 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * numeric.c (fix_rshift): Fix -1 >> 32 returned 0 (should be -1).
-
- * numeric.c (fix_rshift): Fix 1 >> -1 returned 0 (should be 2).
-
-Mon Dec 6 11:47:23 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sprintf.c (rb_f_sprintf): formatted string must be tainted if
- any of parameters is a tainted string.
-
- * file.c (rb_file_s_expand_path): expanded file path need not to
- be tainted always.
-
-Sun Dec 5 20:25:29 1999 Katsuhiro Ueno <unnie@blue.sky.or.jp>
-
- * eval.c (Init_Proc): simple typo.
-
- * gc.c (add_heap): sizeof(RVALUE*), not sizeof(RVALUE).
-
-Sat Dec 4 01:40:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_search): adjust startpos for multibyte match unless
- the first pattern is forced byte match.
-
- * bignum.c (rb_big_rand): should not use rand/random where drand48
- may be available. RANDOM_NUMBER should be provided from outside.
-
-Fri Dec 3 09:54:59 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (moreswitches): there may be trailing garbage at #!
- line.
-
- * eval.c (rb_f_require): should check require 'feature.o' too.
-
-Thu Dec 2 11:58:15 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * eval.c (rb_thread_loading): should maintain loading_tbl.
-
-Thu Dec 2 10:21:43 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_loading_done): wrong parameter to st_delete().
-
-Wed Dec 1 11:24:06 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ruby.c (process_sflag): process -s properly (should not force `--').
-
-Wed Dec 1 09:47:33 1999 Kazunori NISHI <kazunori@swlab.csce.kyushu-u.ac.jp>
-
- * string.c (rb_str_split_method): should increment end too.
-
-Tue Nov 30 18:00:45 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * marshal.c: MARSHAL_MINOR incremented; format version is 4.2.
-
- * marshal.c (w_object): distinguish class and module.
-
- * marshal.c (w_object): save hash's default value.
-
- * marshal.c (r_object): restore hash's default value.
-
-Tue Nov 30 01:46:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (rb_reg_source): generated source string must be tainted if
- regex is tainted.
-
- * file.c (rb_file_s_basename): basename should not be tainted
- unless the original path is tainted.
-
- * file.c (rb_file_s_dirname): ditto.
-
-Mon Nov 29 20:42:13 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * file.c (stat_new): Struct::Stat -> File::Stat; Stat is no longer
- a Struct.
-
-Mon Nov 29 15:28:52 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (rb_path2class): evaluated value from path should be
- module or class.
-
-Fri Nov 26 18:12:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_exec_end_proc): should remove only end_procs defined
- within load wrapper.
-
- * eval.c (rb_load): save and restore ruby_wrapper around loading.
-
- * eval.c (rb_mark_end_proc): mark end procs registered by END{} or
- at_exit{}.
-
- * eval.c (rb_set_end_proc): should not call rb_global_variable()
- on heap address; it crashed mod_ruby.
-
-Mon Nov 22 14:07:24 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * ruby.c (proc_options): variable e_script should be visited by
- garbage collector.
-
-Sat Nov 20 10:10:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (inspect_i): value may be nil, check revised.
-
-Fri Nov 19 18:06:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * dir.c (glob): recursive wildcard match by `**' ala zsh.
-
-Fri Nov 19 11:44:26 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * variable.c: was returning void value.
-
-Fri Nov 19 03:57:22 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * file.c: add methods Stat struct class to reduce stat(2).
-
-Thu Nov 18 16:18:27 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * lib/pstore.rb: mutual lock by flock(2).
-
-Thu Nov 18 11:44:13 1999 Masahiro Tomita <tommy@tmtm.org>
-
- * io.c (read_all): should check bytes too.
-
-Wed Nov 17 02:40:40 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (Init_IO): $defout (alias of $>) added.
-
-Tue Nov 16 09:47:14 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * lib/pstore.rb: add mutual lock using symlink.
-
-Mon Nov 15 16:50:34 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * enum.c (enum_grep): non matching grep returns an empty array, no
- longer returns nil.
-
- * enum.c (enum_grep): grep with block returns collection of
- evaluated values of block over matched elements.
-
-Mon Nov 15 04:50:33 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * re.c (rb_reg_source): should not call rb_reg_expr_str()
- everytime.
-
-Sat Nov 13 07:34:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (rb_mod_constants): traverse superclasses to collect
- constants.
-
- * eval.c (assign): modified for shared variables.
-
- * eval.c (rb_eval): search nested scope, then superclasses to
- assign shared variables within methods.
-
- * eval.c (rb_eval): remove warnings from constants modification,
- because they are no longer constants.
-
- * parse.y (node_assign): modified for shared variables.
-
- * parse.y (assignable): allow constant assignment in methods;
- constants should be called `shared variable'.
-
-Fri Nov 12 23:52:19 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * process.c (rb_f_system): argument check for NT, __EMX__, DJGPP.
-
-Wed Nov 10 21:54:11 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * hash.c (rb_any_cmp): Fixed return without value.
-
-Wed Nov 10 17:57:06 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sprintf.c: incorporate <yasuf@big.or.jp>'s sprintf patch at
- [ruby-dev:7754].
-
-Wed Nov 10 08:28:53 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_call0): supply class parameter for each invocation.
-
-Tue Nov 9 13:21:04 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * configure.in: AC_MINIX move to before AC_EXEEXT and AC_OBJEXT.
-
-Mon Nov 8 19:52:29 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * configure.in: Renamed AC_CHAR_UNSIGNED to AC_C_CHAR_UNSIGNED.
-
- * configure.in: Added default to AC_CHECK_SIZEOF().
-
-Mon Nov 8 14:28:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (stmt): rescue modifier added to the syntax.
-
- * keywords: kRESCUE_MOD added.
-
- * eval.c (rb_f_eval): fake outer scope when eval() called without
- bindings.
-
- * eval.c (rb_f_binding): should copy last_class in the outer frame too.
-
-Sun Nov 7 18:31:04 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
-
- * eval.c (is_defined): last_class may be 0.
-
-Sat Nov 6 19:26:55 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * Makefile.in: Added depend entry make parse.@OBJEXT@ from parse.c
- for UCB make
-
-Thu Nov 4 17:41:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): \< (wordbeg), \> (wordend) disabled.
-
-Wed Nov 3 08:52:57 1999 Masaki Fukushima <fukusima@goto.info.waseda.ac.jp>
-
- * io.c (Init_IO): forgot to use INT2FIX() around SEEK_SET, etc.
-
-Wed Nov 3 00:25:20 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_split_method): use mbclen2() to handle kcode
- option of regexp objects.
-
-Mon Nov 1 14:22:15 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * eval.c (rb_eval): reduce recursive calls to rb_eval()
- case of ||= and &&= .
-
-Sun Oct 31 13:12:42 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * regex.c (re_compile_pattern): wrong [\W] match.
-
-Fri Oct 29 16:57:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/nkf/lib/kconv.rb: new String methods (kconv, tojis, toeuc,
- tosjis).
-
- * time.c (time_s_at): now accepts optional second argument to
- specify micro second.
-
-Thu Oct 28 13:35:40 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_split_method): should be mbchar aware with
- single char separators.
-
-Wed Oct 27 12:57:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * random.c (rb_f_srand): random seed should be unsigned.
-
-Tue Oct 26 23:58:15 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (rb_ary_collect): collect for better performance.
-
-Tue Oct 26 19:20:54 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * marshal.c (r_object): should register class/module objects.
-
-Sat Oct 23 15:59:39 1999 Takaaki Tateishi <ttate@jaist.ac.jp>
-
- * process.c (rb_f_system): should require at least one argument.
-
-Sat Oct 23 12:42:44 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * enum.c (enum_collect): collect without block will collect
- elements in enumerable.
-
-Thu Oct 21 16:14:19 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (moreswitches): function to process string option;
- the name is stolen from perl (not implementation).
-
- * ruby.c (proc_options): use RUBYOPT environment variable to
- retrieve the default options.
-
- * dir.c (fnmatch): use eban's fnmatch; do not depend on system's
- fnmatch (which may have portability problem) anymore.
-
-Wed Oct 20 15:14:24 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * marshal.c (marshal_load): should protect the generated object
- table (arg->data) from GC.
-
-Mon Oct 18 16:15:52 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/nkf/nkf.c (rb_nkf_kconv): output should be NUL terminated.
-
-Mon Oct 18 09:03:01 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/session.rb, smtp.rb, pop.rb: 1.0.3
-
- * lib/net/pop.rb: new methods POP3Command#uidl, POPMail#uidl.
-
-Sun Oct 17 03:35:33 1999 Masaki Fukushima <fukusima@goto.info.waseda.ac.jp>
-
- * array.c (rb_ary_pop): forgot some freeze checks.
-
-Sat Oct 16 12:57:53 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * array.c (rb_ary_sort): always returns the copied array.
-
-Fri Oct 15 22:50:41 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * error.c (sys_nerr): on CYGWIN, it is _sys_nerr.
-
-Fri Oct 15 01:32:31 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * io.c (rb_io_ctl) :need to use NUM2ULONG, not NUM2INT.
-
- * ext/Win32API/Win32API.c (Win32API_Call): need to use NUM2ULONG,
- not NUM2INT.
-
-Fri Oct 15 00:22:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (Init_Regexp): super class of the MatchingData, which was
- Data, to be Object.
-
- * eval.c (ruby_run): evaluate required libraries before load &
- compiling the script.
-
- * parse.y (lex_getline): retrieve a line from the stream, saving
- lines in the table in debug mode.
-
- * eval.c (call_trace_func): treat the case ruby_sourcefile is null.
-
-Thu Oct 14 02:00:10 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (string): compile time string concatenation.
-
-Wed Oct 13 07:28:09 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/session.rb, smtp.rb, pop.rb: 1.0.2
-
- * lib/net/session.rb: new method Session#set_pipe.
-
- * lib/net/session.rb, smtp.rb, pop.rb: add RD documentation.
-
-Wed Oct 13 02:17:05 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * array.c (rb_ary_plus): remove recursion.
-
- * array.c (rb_ary_sort_bang): detect modify attempt.
-
-Wed Oct 13 02:17:05 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (block_pass): should copy block to prevent modifications.
- tag in the structure should be updated from latest prot_tag.
-
- * eval.c (proc_s_new): tag in struct BLOCK should not point into
- unused stack.
-
- * dir.c (dir_s_glob): iterate over generated matching filenames if
- the block is given to the method.
-
- * array.c (rb_ary_at): new methods; at, first, last.
-
- * hash.c (rb_hash_fetch): raises exception unless the default
- value is supplied.
-
- * hash.c (rb_hash_s_create): need not remove nil from value.
-
- * hash.c (rb_hash_aset): setting value to nil does not remove key
- anymore.
-
-Tue Oct 12 22:29:04 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_read): length may be 0 or negative.
-
-Tue Oct 12 13:26:27 1999 Jun-ichiro itojun Hagino <itojun@itojun.org>
-
- * signal.c (posix_signal): RETSIGTYPE may be void.
-
-Tue Oct 12 03:28:03 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * array.c (rb_ary_delete_at): allows negative position.
-
-Mon Oct 11 17:42:25 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * parse.y (rb_intern): should generate distinct ID_ATTRSET symbols
- for the name with multiple `='s at the end.
-
- * Makefile.in (CPPFLAGS): separate cpp flags from CFLAGS.
-
-Mon Oct 11 07:27:05 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): should not execute the `else' clause on the
- case the exceptions are handled by the `rescue' clause.
-
- * signal.c (Init_signal): ignore SIGPIPE by default.
-
-Wed Oct 6 17:13:19 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * ruby.c (addpath): rubylib_mangled_path() modified.
-
-Mon Oct 4 12:42:32 1999 Kazuhiko Izawa <izawa@erec.che.tohoku.ac.jp>
-
- * pack.c (pack_unpack): % in printf format should be %%.
-
-Mon Oct 4 10:01:40 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (rb_obj_instance_variables): should always return
- array for all object can have instance variables now.
-
-Mon Oct 4 00:08:34 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * pack.c (OFF16): need to adjust pointer address to pack/unpack on
- 64bit machines.
-
-Sun Oct 3 03:05:59 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * time.c (time_arg): mktime y2k problem.
-
-Sun Sep 26 16:54:45 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * parse.y (here_document): `\r' handling for here documents.
-
-Wed Sep 22 09:20:11 1999 Masahiro Tomita <tommy@tmtm.org>
-
- * ext/socket/socket.c: SOCKS5 support.
-
-Wed Sep 22 07:33:23 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/session.rb, smtp.rb, pop.rb: 1.0.1
-
- * lib/net/pop.rb: APOP did not work.
-
- * lib/net/pop.rb: modify the way to make APOP challenge.
-
-Wed Sep 22 00:35:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_include): should return boolean value.
-
- * regex.c (re_compile_fastmap): wrong comparison with mbc.
-
- * eval.c (specific_eval): default sourcefile name should be
- "(eval)" for module_eval etc.
-
-Wed Sep 22 00:06:07 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * win32/Makefile: update rules.
-
- * io.c (io_fread): should not assign in char, it maybe -1.
-
-Tue Sep 21 23:57:54 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (call_trace_func): should not propagate retval in
- trace_func.
-
-Mon Sep 20 21:35:39 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * win32/win32.c (myselect): assume non socket files are always
- readable/writable.
-
-Mon Sep 20 01:08:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_fread): should not block other threads.
-
- * io.c (rb_io_synchronized): renamed from rb_io_unbuffered(); do
- not call setbuf(NULL) anymore.
-
-Sat Sep 18 13:45:43 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * stable version 1.4.2 released.
-
-Fri Sep 17 23:24:17 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * eval.c (rb_f_missing): dumped core if no argument given.
-
-Fri Sep 17 23:21:06 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * win32/win32.c (myselect): translate WSAEINTR, WSAENOTSOCK into
- UNIX errno constants.
-
-Fri Sep 17 00:52:27 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (arg): assignable() may return 0.
-
-Thu Sep 16 20:46:23 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * eval.c (rb_eval): was doubly evaluating the return expression.
-
-Thu Sep 16 18:40:08 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * stable version 1.4.1 released.
-
-Thu Sep 16 11:33:22 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * string.c (rb_str_match): should return nil.
-
-Wed Sep 15 22:46:37 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (rb_reg_s_quote): should quote `-' too.
-
-Tue Sep 14 15:23:22 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
-
- * parse.y (yylex): no need to ignore `\r' here.
-
- * parse.y (nextc): strip `\r' from text.
-
- * parse.y (nextc): support `__END__\r\n' type terminator.
-
-Mon Sep 13 10:49:19 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * eval.c (rb_eval): needless RTEST(ruby_verbose) removed.
-
-Mon Sep 13 09:10:11 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/net/session.rb, smtp.rb, pop.rb: 1.0.0
-
-Wed Sep 8 11:37:38 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * time.c (make_time_t): bit more strict comparison.
-
-Tue Sep 7 00:50:56 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * range.c (range_each): use rb_str_upto() for strings.
-
- * string.c (rb_str_upto): set upper limit by comparing curr <= end.
-
- * range.c (range_each): should check equality to handle magic
- increment.
-
-Mon Sep 6 22:43:33 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): break/next/redo available within -n/-p loop.
-
-Fri Sep 3 11:14:31 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * compar.c (cmp_equal): should not raise exception; protect by
- rb_rescue().
-
-Thu Sep 2 05:23:05 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * file.c (rb_file_s_expand_path): use dirsep, instead of character
- literal '/'.
-
- * file.c (rb_file_s_expand_path): reduce multiple dirsep at the top.
-
-Wed Sep 1 00:28:27 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_call): call rb_undefined() if a method appears not to
- be exist explicitly from cache.
-
- * eval.c (rb_method_boundp): check method cache before calling
- rb_get_method_body().
-
- * eval.c (rb_get_method_body): store method non-existence
- information in the cache.
-
- * random.c (rb_f_srand): use getpid(2) to generate seed.
-
- * regex.c (re_match): do not apply partial mbc match for
- charset_not.
-
- * regex.c (re_compile_pattern): put extended literal prefix (0xff)
- only before numeric literals, not before all >0x80 char.
-
- * regex.c (re_compile_pattern): put numeric literal in extended
- charset region, not normal charset bits.
-
- * regex.c (re_compile_fastmap): calculate fastmap for charset and
- charset_not to treat numeric literal (e.g. \246) specially.
-
-Fri Aug 28 17:32:55 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
-
- * eval.c (rb_eval): should set return value (nil) explicitly if a
- value is omitted for return statement.
-
-Sun Aug 26 20:26:40 2001 Koji Arai <JCA02266@nifty.ne.jp>
-
- * ext/readline/readline.c: restore terminal mode
- even if readline() interrupted.
-
- * ext/readline/readline.c: returned string need to
- be tainted.
-
- * ext/readline/readline.c: fixed memory leak.
-
- * ext/readline/readline.c: allow negative index.
-
- * ext/readline/readline.c: added Readline::HISTORY.size
- same as Readline::HISTORY.length
-
- * ext/readline/readline.c: allow conditional parsing
- of the ~/.inputrc file by `$if Ruby'.
-
- * ext/readline/extconf.rb: check whether the
- libreadline has the variable `rl_completion_append_character'
- (this feature was implemented from GNU readline 2.1).
-
-Thu Aug 26 15:06:11 1999 Masaki Fukushima <fukusima@goto.info.waseda.ac.jp>
-
- * gc.c (rb_gc): local variables may be placed beyond stack_end, so
- use an address from alloca(1) on non C_ALLOCA platforms.
-
-Thu Aug 26 01:24:17 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sprintf.c (rb_f_sprintf): "%%" is legal, but "%3.14%" is not.
-
-Mon Aug 23 00:00:54 1999 Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>
-
- * regex.c (re_compile_fastmap): wrong macro caused memory leak.
-
-Sat Aug 21 11:30:51 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (ADJ): should not adjust addresses to data on heap.
-
-Fri Aug 20 20:50:58 1999 Kenji Nagasawa <kenn@hma.att.ne.jp>
-
- * defines.h (PATH_SEP): path separator is ";" for OS/2.
-
-Thu Aug 19 10:50:43 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * gc.c (rb_gc): add volatile to avoid GCC optimize bug(?).
-
-Wed Aug 18 23:48:10 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * due to disk trouble, some change records were lost. several
- modification made to eval.c, gc.c, io.c, pack.c,
- ext/extmk.rb.in, and lib/mkmf.rb.
-
-Fri Aug 13 15:41:39 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * stable version 1.4.0 released.
-
-Fri Aug 13 03:16:07 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (argf_forward): since $stdout may be non-IO, ARGF.file is
- not guaranteed to be IO. check and forwarding added to every ARGF
- method.
-
- * io.c (set_outfile): $stdout/$stderr may not be IO now.
-
- * io.c (set_stdin): $stdin may not be IO now.
-
- * range.c (rb_range_beg_len): round `end' to length as documented.
-
- * io.c (Init_IO): preserve original stdin/stdout/stderr.
-
-Thu Aug 12 13:44:33 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (Init_load): require receives 1 argument.
-
- * eval.c (frame_dup): should clear tmp to avoid dangling
- references.
-
-Wed Aug 11 13:33:13 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * eval.c (rb_eval): no automatic aggregate initialization.
-
- * eval.c (module_setup): ditto.
-
-Wed Aug 11 18:18:41 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * eval.c (yield_under_i): automatic aggregate initialization is an
- ANSI feature.
-
-Wed Aug 11 10:10:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): parse `[].length==0' as `([].length)==0', not
- `([].length=)=0'
-
- * parse.y (yylex): parse `[].length!=0' as `([].length)!=0', not
- `([].length!)=0'
-
- * parse.y (peek): peek-in lexical buffer.
-
-Wed Aug 11 00:34:05 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_match): bug on backward jump adjustment concerning
- stop_paren.
-
-Tue Aug 10 14:54:25 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/nkf/nkf.c (rb_nkf_guess): binary detection was wrong.
-
-Tue Aug 10 00:07:36 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_clone): should use CLONESETUP().
-
-Mon Aug 9 23:57:07 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.h (CLONESETUP): should have copied generic instance
- variables too.
-
-Mon Aug 9 10:46:54 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/socket/extconf.rb: add check for <arpa/nameser.h> and
- <resolv.h>.
-
-Sat Aug 7 13:19:06 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * numeric.c (flo_cmp): comparing NaN should not return value.
- raises FloatDomainError.
-
-Sat Aug 7 03:09:08 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (blk_free): free copied frames too.
-
- * eval.c (frame_dup): should copy previous frames from stack to
- heap to preserve frame information.
-
-Fri Aug 6 15:01:07 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.3.7 - version 1.4 beta
-
- * ext/socket/socket.c (s_recv): UDPsocket#recvfrom now returns
- IPsocket#addr information.
-
- * array.c (rb_ary_subary): ary[-3,3] should not return nil.
-
-Thu Aug 5 10:58:01 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (thread_mark): protect old ruby_frame from GC during it
- replaced by eval().
-
- * eval.c (eval): do not modify frame.prev; binding should preserve
- information about calling() too.
-
- * eval.c (rb_yield_0): no arity check for mere yield; but only for
- Proc#call.
-
-Tue Aug 3 22:07:13 1999 Kazuhiro HIWADA <hiwada@kuee.kyoto-u.ac.jp>
-
- * object.c (rb_mod_clone): should check if iv_tbl, m_tbl are
- initialized.
-
-Tue Aug 3 19:03:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (rb_any_cmp): use rb_with_disable_interrupt() to ensure
- clearance of rb_prohibit_interrupt even on failure.
-
- * eval.c (rb_with_disable_interrupt): new function added.
-
-Sat Jul 31 23:23:44 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_create_0): set THREAD_RAISED flag on thread
- termination by exception.
-
- * eval.c (rb_thread_join): `$!' may not be nil for the threads
- created in rescue clause.
-
- * eval.c (rb_thread_status): ditto.
-
- * eval.c (rb_thread_join): should re-raise exception for already
- dead threads too.
-
-Fri Jul 30 17:56:54 1999 GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp>
-
- * object.c (rb_mod_ge): wrong comparison.
-
-Fri Jul 30 12:15:44 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/tcltklib/extconf.rb: win32 support.
-
- * lib/mkmf.rb: use append_library().
-
- * ext/extmk.rb.in: ditto.
-
-Fri Jul 30 02:11:48 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (rb_ary_delete): should return nil for deleting non
- existing item.
-
- * io.c (rb_io_close): call rb_sys_wait() on explicit close.
-
- * io.c (rb_io_fptr_close): do not call rb_sys_wait() on finalize.
-
- * eval.c (yield_under_i): cbase context should be maintained for
- Module#module_eval(). suggested by <inaba@st.rim.or.jp>.
-
-Wed Jul 28 01:18:28 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * Makefile.in: add -I$(hdrdir)/lib to install using ftools.
-
- * util.c: use HAVE_FCNTL_H, not HAVE_FCNTL
-
-Wed Jul 28 18:24:45 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.3.6 - version 1.4 alpha
-
-Tue Jul 27 09:38:08 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * eval.c (rb_eval): reduce recursive rb_eval() calls by
- NODE_BLOCKs.
-
-Tue Jul 27 01:20:40 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * file.c (rb_file_s_expand_path): drive letter patch.
-
-Mon Jul 26 02:36:31 1999 Shugo Maeda <shugo@netlab.co.jp>
-
- * eval.c (rb_load): should clear ruby_nerr.
-
- * eval.c (rb_thread_join): oldbt should not be empty to unshift.
-
-Sun Jul 25 12:09:16 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * dir.c (push_braces): should treat nested braces.
-
-Fri Jul 23 02:49:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (rb_hash_clear): dummy argument added; suggested by
- <eguchi@shizuokanet.ne.jp>. thanks.
-
-Thu Jul 22 19:37:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_join): get_backtrace() may return Qnil.
- typecheck added.
-
-Tue Jul 20 14:36:43 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * range.c (range_each): do not treat String specially (for future
- override).
-
-Tue Jul 20 02:28:34 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_gets): $_ should be nil, when get returns nil.
-
- * io.c (rb_f_gets): ditto.
-
-Mon Jul 19 17:13:09 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_fastmap): should continue fastmap compile
- for anychar_repeat, for it's repeat anyway.
-
-Mon Jul 26 13:33:45 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * lib/jcode.rb: replaced by faster code.
-
-Mon Jul 19 01:57:28 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * lib/mkmf.rb: no longer use install program.
-
- * ext/extmk.rb.in: use miniruby to install programs.
-
-Sat Jul 17 00:06:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/socket.c (ipaddr): don't do reverse lookup if
- attribute do_not_reverse_lookup is set for socket classes.
- Experimental. Note this is a global attribute.
-
-Fri Jul 16 22:18:29 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_eof): use feof() to check EOF already met.
-
- * io.c (read_all): should return nil at EOF.
-
-Fri Jul 16 13:39:42 1999 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/telnet.rb: version 0.231.
-
-Fri Jul 16 10:58:22 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * regex.c (re_match): debug print removed.
-
-Fri Jul 16 09:58:15 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * many files: clean up unused variables found by gcc -Wall.
-
- * lib/mkmf.rb: better cygwin support etc.
-
- * ext/extmk.rb.in: ditto.
-
- * instruby.rb: ditto.
-
-Fri Jul 16 01:37:50 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * string.c (rb_str_squeeze_bang): the type of local variable `c'
- should be int, not char.
-
- * string.c (rb_str_reverse): should always return copy.
-
-Thu Jul 15 23:25:57 1999 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
-
- * lib/debug.rb: better display & frame treatment.
-
-Thu Jul 15 21:16:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (rb_ary_each): returns self for normal termination;
- returns nil for break.
-
- * string.c: non bang methods (e.g. String#sub) should always
- return copy of the receiver.
-
-Thu Jul 15 21:09:15 1999 Masaki Fukushima <fukusima@goto.info.waseda.ac.jp>
-
- * eval.c (find_file): do not add empty string to the path.
-
- * configure.in (with-search-path): should not add empty string if
- the option is not supplied.
-
-Thu Jul 15 17:49:08 1999 Ryo HAYASAKA <hayasaka@univ21.u-aizu.ac.jp>
-
- * ext/tcltklib/tcltklib.c: move `#include "ruby.h"' forward.
-
-Thu Jul 15 16:54:16 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.3.5 - version 1.4 alpha
-
-Wed Jul 14 23:45:33 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * eval.c (ruby_init): initialize for the first time only.
-
-Tue Jul 13 00:15:19 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (rb_hash_index): re-defined; method to retrieve a key
- from the value.
-
- * hash.c (Init_Hash): member? should be re-defined for Hash.
-
-Tue Jul 12 13:54:51 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * io.c (rb_file_sysopen): wrong number of argument.
-
-Mon Jul 12 11:52:35 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_f_missing): class name included in message.
-
- * eval.c (print_undef): better error message.
-
-Sun Jul 11 05:36:17 1999 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
-
- * lib/debug.rb: patch to show proper position.
-
-Fri Jul 9 23:56:14 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * dln.c (dln_find_1): path conv. moved to conv_to_posix_path.
-
- * dln.c (conv_to_posix_path): path conv. should be done.
-
-Fri Jul 9 10:26:47 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * random.c (RANDOM_NUMBER): should place parentheses.
-
-Fri Jul 8 11:00:51 1999 Shugo Maeda <shugo@netlab.co.jp>
-
- * numeric.c (fix_div): division may be out of fixnum range.
-
- * bignum.c (bigdivmod): proper sign calculation to result.
-
-Wed Jul 7 18:27:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * st.c (st_delete_safe): was modifying wrong slot.
-
-Mon Jul 5 13:17:46 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * gc.c (rb_gc_call_finalizer_at_exit): close all files at exit.
-
-Fri Jul 2 18:00:21 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * lib/Mail/README: Mail-0.3.0 added to the distribution.
-
-Fri Jul 2 01:45:32 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_fastmap): avoid allocation of register
- variables for each invocation of re_match(). Suggested by
- Zasukhin Ruslan <ruslan@paradigmasoft.com>. Thanks.
-
-Tue Jun 29 20:39:24 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * ext/tk/lib/tk.rb (TkVariable): bug fix; should value type check
- be added?
-
- * string.c (rb_str_each_line): a bug in paragraph mode.
-
- * ruby.c (load_file): shifted too much to skip #!.
-
-Tue Jun 29 06:50:21 1999 Wakou Aoyama <wakou@fsinet.or.jp>
-
- * lib/CGI.rb: 0.30 - cleanup release, incompatible.
-
- * lib/telnet.rb: 0.22 - timeout added.
-
-Tue Jun 29 10:49:25 1999 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
-
- * configure.in: better Rhapsody support.
-
- * lib/mkmf.rb: Rhapsody/NEXTSTEP support.
-
-Tue Jun 29 01:42:13 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/pty/pty.c (chld_changed): should use POSIX.1 style wait.
-
-Mon Jun 28 21:07:36 1999 KIMURA Koichi <kbk@kt.rim.or.jp>
-
- * ext/extmk.rb.nt: wrong result for have_library().
-
-Mon Jun 28 15:24:05 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * missing/isinf.c: OSF/1 raises SIGFPE on one()/zero().
-
- * regex.c (re_search): should search til EOS, for patterns may
- match beyond the end of range.
-
-Mon Jun 28 12:49:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_f_select): should not accept Time objects as an
- argument for it is time interval.
-
- * process.c (rb_f_sleep): ditto.
-
- * file.c (test_s): should return nil for false condition.
-
-Mon Jun 28 12:23:52 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * bignum.c (rb_dbl2big): typo.
-
- * file.c (rb_f_test): ditto.
-
- * string.c (rb_str_crypt): wrong message.
-
-Sun Jun 27 19:50:11 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * eval.c (rb_f_exit): should have treat signed integer status, not
- VALUE.
-
- * process.c (rb_f_exit_bang): should work like exit().
-
-Sun Jun 27 16:21:32 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * string.c (rb_str_rindex): wrong position to search.
-
-Sat Jun 26 04:05:30 1999 Takaaki Tateishi <ttate@jaist.ac.jp>
-
- * configure.in (configure_args): --with-search-path to specify
- additional ruby search path.
-
- * ruby.c (ruby_prog_init): additional search path.
-
-Fri Jun 25 13:09:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * pack.c (pack_unpack): needed to initialize natint.
-
- * regex.c (re_compile_pattern): add start_paren to avoid too much
- finalization on maybe_finalize_jump.
-
-Fri Jun 25 13:07:20 1999 Koji Oda <oda@bsd1.qnes.nec.co.jp>
-
- * missing/isinf.c: include "config.h" added.
-
-Fri Jun 25 07:25:05 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * lib/mkmf.rb: initialize $(topdir).
-
- * ext/extmk.rb.in (install_rb): install lib/*.rb properly.
-
- * configure.in (linux): specifies -rpath on --enable-shared.
-
- * configure.in (aix): ruby.imp must reside in $(topdir).
-
-Thu Jun 24 19:11:29 1999 Yoshida Masato <yoshidam@yoshidam.net>
-
- * parse.y (rb_str_extend): multi-byte identifier in expression
- interpolation in strings.
-
- * parse.y (yylex): support multi-byte char identifiers.
-
-Thu Jun 24 15:27:13 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (f_arg): check duplicate argument names.
-
- * gc.c (rb_gc_mark): marking wrong member for NODE_ARGS.
-
- * string.c (rb_str_rindex): POSITION specifies start point, not
- end point.
-
-Thu Jun 24 13:00:17 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (print_mbc): wrong boundary.
-
- * pack.c (uv_to_utf8): raises ArgError for too big value.
-
-Thu Jun 24 11:02:51 1999 Yoshida Masato <yoshidam@yoshidam.net>
-
- * pack.c (uv_to_utf8): mask needed.
-
-Wed Jun 23 21:03:56 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * ruby.h (struct RFile): remove iv_tbl from struct. instance
- variables are handled as generic ivs.
-
-Wed Jun 23 22:06:26 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * pack.c (utf8_to_uv): pack to 7 bytes sequence.
-
- * pack.c (uv_to_utf8): wrong boundary.
-
- * pack.c (pack_unpack): should treat as unsigned long.
-
-Wed Jun 23 15:10:11 1999 Inaba Hiroto <inaba@sdd.tokyo-sc.toshiba.co.jp>
-
- * parse.y (parse_string): failed to parse nested braces.
-
- * parse.y (parse_regx): nested braces within #{} available.
-
-Wed Jun 23 11:18:38 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (slow_search): wrong shift width for mbcs.
-
- * eval.c (rb_thread_save_context): should not clear th->locals.
-
-Wed Jun 23 02:06:14 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): UMINUS binds too tight with digits. changed so
- that -2**2 => -4.
-
- * parse.y (close_paren): `do' for expr termination now works it
- used to be.
-
-Wed Jun 22 18:26:42 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * pack.c (pack_pack): should initialize local variable `j'.
-
-Wed Jun 22 15:24:59 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * parse.y (here_document): a bug for multiline heredoc.
-
-Tue Jun 22 15:06:36 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ext/socket/socket.c (ruby_socket): forgot to return fd
- explicitly.
-
-Tue Jun 22 13:34:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * rubyio.h (MakeOpenFile): should initialize member `iv_tbl'.
-
-Wed Jun 22 10:35:51 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * io.c (rb_io_gets_internal): getc(3) may not set errno on
- interrupt.
-
-Mon Jun 21 22:39:28 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (call_required_libraries): ruby_sourceline should be
- cleared before loading libraries.
-
- * io.c (set_stdin): do not use reopen(), so that we don't need to
- dup original stdin before assigning $stdin.
-
-Mon Jun 21 18:04:27 1999 Ryo HAYASAKA <hayasaka@univ21.u-aizu.ac.jp>
-
- * ext/dbm/dbm.c: include <cdefs.h> for solaris 2.6.
-
-Mon Jun 21 15:59:47 1999 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * ext/socket/socket.c (ip_addrsetup): forgot to put `else'.
-
-Mon Jun 21 15:38:37 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (fptr_finalize): remove rb_syswait() invocation to avoid
- wait4(2) within GC. rb_syswait() moved to rb_io_fptr_close().
-
-Mon Jun 21 12:05:59 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * dir.c (dir_s_glob): remove MAXPATHLEN restriction.
-
- * ext/md5/md5init.c (md5_hexdigest): should have used "%02x".
-
-Sun Jun 20 19:50:38 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * string.c (rb_str_each_line): should have checked string
- boundary.
-
-Sat Jun 19 22:24:12 1999 Kenji Nagasawa <kenn@hma.att.ne.jp>
-
- * OS/2 patch improved.
-
-Fri Jun 18 08:30:17 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * marshal.c (r_byte): add data length check.
-
- * ext/tcltklib/tcltklib.c (_timer_for_tcl): was doing busy-wait.
-
-Tue Jun 15 10:01:21 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * configure.in: remove trailing slash from interpreter embedded
- shared library path.
-
- * configure.in (INSTALL_DLLIB): install shared lib with 0555.
-
- * instruby.rb: changed mode for shared library into 0555.
-
-Fri Jun 11 23:27:00 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * ext/etc/etc.c (etc_passwd): should return nil, not exception for
- call after last passwd entry.
-
-Fri Jun 11 15:21:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * gc.c (rb_gc_mark_locations): add safety margin 1.
-
- * eval.c (ruby_run): should protect toplevel node tree.
-
- * ext/etc/etc.c (etc_group): dumps core if there's no more group.
-
-Fri Jun 11 01:50:25 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (ruby_run): Init_stack() was called too late; local
- variables happened to be higher (or lower) than stack_start.
-
-Thu Jun 10 16:41:48 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c: do not call `initialize' for IO objects. So with Array,
- Hash, Range, and Time objects.
-
- * ext/curses/curses.c (curses_getch): made thread aware using
- rb_read_check().
-
- * ext/curses/curses.c (window_getch): ditto.
-
- * ext/curses/curses.c (curses_getstr): made (partially) thread
- aware using rb_read_check().
-
- * ext/curses/curses.c (window_getstr): ditto.
-
- * io.c (rb_read_check): new function to help making something
- (like extension libraries) thread aware.
-
- * eval.c (is_defined): `defined? super' should be true even for
- private superclass methods.
-
-Fri Jun 10 13:42:10 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * pack.c (pack_pack): template `Z' should be allowed.
-
-Wed Jun 9 13:26:38 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_loading): modified to avoid nested race
- condition of require().
-
- * ext/tcltklib/tcltklib.c (ip_invoke): queue invocation on non
- main threads.
-
- * ext/tcltklib/tcltklib.c (lib_mainloop): flush invocation
- queues periodically.
-
- * version.c (ruby_show_version): now print the message to stdout.
-
- * version.c (ruby_show_copyright): ditto.
-
-Tue Jun 8 00:00:34 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * pack.c (pack_unpack): append sentinel (NUL) to the string.
-
- * ext/md5/md5init.c (md5_hexdigest): new method to obtain
- printable hash string.
-
- * ext/md5/md5init.c (md5_update): should return self.
-
- * pack.c (pack_pack): undocumented template 'U' for UTF8.
-
- * pack.c (pack_unpack): ditto.
-
- * marshal.c (r_byte): should replace getc() with rb_getc().
-
- * io.c (rb_getc): getc() replacement uses READ_DATA_PENDING() and
- rb_thread_wait_fd().
-
-Mon Jun 7 23:23:38 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (rb_mod_clone): should call CLOSESETUP().
-
- * eval.c (bind_clone): should call CLONESETUP() for new clone.
-
-Sat Jun 5 10:32:40 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_oct): binary (e.g. 0b10111) support.
-
- * variable.c (rb_const_set): raise warning, not exception.
-
- * parse.y (yycompile): initialize parser internal variables.
-
- * parse.y (close_paren): set lex_state to EXPR_PAREN after closing
- parenthesis.
-
- * parse.y (yylex): returns kDO for `do' right after method_call.
-
-Thu Jun 3 11:05:30 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * regex.c (read_backslash): should decode \b within class.
-
-Thu Jun 3 01:06:18 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * dln.c (dln_load): AIX improvement (aix_findmain removed).
-
-Wed Jun 2 00:41:31 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * pack.c (pack_unpack): new undocumented template Z which strips
- stuff after first null.
-
- * pack.c (pack_pack): should preserve specified length of the
- resulting string.
-
-Tue Jun 1 15:29:33 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/socket.c (ruby_socket): retry after GC, if socket(2)
- failed on EMFILE or ENFILE.
-
- * ext/socket/socket.c (sock_s_socketpair): ditto.
-
- * eval.c (module_setup): need to add PUSH_VAR/POP_VAR to clear
- dyna vars link list.
-
- * version.h (RUBY_RELEASE_CODE): integer macro constant for source
- version detection.
-
-Sun May 30 22:19:12 1999 Kenji Nagasawa <kenn@tcp-ip.or.jp>
-
- * ext/socket/socket.c: emx/gcc 0.9d now fixes things about
- AF_UNIX.
-
- * process.c: OS/2 EMX kludge.
-
- * Makefile.in (strncasecmp.o): added dependency.
-
-Mon May 31 16:06:28 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.3.4 - preliminary release for 1.4
-
-Mon May 31 15:57:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_fptr_close): close on IO which main_thread is
- waiting cause serious exception, that vanishes the actual fd
- closing. Invocation of rb_thread_fd_close() is deferred
- a little.
-
-Sat May 29 18:27:13 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * regex.c (re_match): stack boundary check needed.
-
-Sat May 29 12:27:00 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/tcltklib/tcltklib.c (ip_invoke): proper ref count management
- to avoid leak. I HATE REF COUNTING!!
-
- * eval.c (ruby_run): moved ruby_require_libraries() to handle `-r'
- from ruby_options() to avoid stack corruption for threads
- created in libraries.
-
-Sat May 29 02:22:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_yield_0): when `for' appeared in blocks, it
- introduced new scope for local variables.
-
-Fri May 28 17:16:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_squeeze_bang): squeeze AND of the arguments.
- UNDOCUMENTED.
-
- * string.c (rb_str_count): new UNDOCUMENTED method.
-
- * string.c (rb_str_delete_bang): delete AND of the arg ranges.
- UNDOCUMENTED FEATURE for 1.3.x.
-
- * ext/socket/socket.c (setipaddr): re-wrote using ip_addrsetup().
-
- * ext/socket/socket.c (ip_addrsetup): decode symbolic address
- <broadcast>.
-
-Thu May 27 12:27:42 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (tr_trans): should handle NUL (\0) within strings.
-
-Tue May 25 16:45:11 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_f_syscall): syscall may return values other than zero
- on success.
-
- * regex.c (re_match): handle empty loop properly (hopefully).
-
- * regex.c (re_match): remove empty group check, because it does
- not help non-grouping parentheses (?:..).
-
- * regex.c (re_compile_fastmap): treating try_next, finalize_push
- wrong way.
-
- * regex.c: remove some obsolete functions such as
- group_match_null_string_p().
-
-Mon May 24 14:47:54 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (read_backslash): read backslash by regex.
-
-Sun May 23 19:44:58 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ext/pty/pty.c (getDevice): portability patch.
-
-Fri May 21 23:01:26 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/socket/getaddrinfo.c (GET_AI): should set error code.
-
-Thu May 20 03:43:44 1999 Jun-ichiro itojun Hagino <itojun@itojun.org>
-
- * ext/socket/socket.c: you should use sockaddr_storage to handle
- IPv6 addresses.
-
- * ext/socket/getaddrinfo.c (getaddrinfo): prevent retrieving
- AF_INET6 address if hints.ai_flags == AI_PASSIVE.
-
-Wed May 19 12:27:07 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (exec_end_proc): should protect exceptions.
-
- * gc.c (run_final): ditto.
-
- * parse.y (f_rest_arg): allow just * for rest arg.
-
- * parse.y (mlhs_basic): allow * without formal argument.
-
- * regex.c (re_match): the variable `part' should be initialized.
-
-Tue May 18 15:25:45 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_search): a bug in range adjustment.
-
-Tue May 18 11:35:59 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * dln.c (conv_to_posix_path): path_len argument added.
-
-Mon May 17 12:26:31 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * numeric.c (fix_rev): should treat Fixnum as signed long.
-
- * eval.c (massign): add strict number check for yield (and call).
-
- * eval.c (proc_arity): new method to return number of arguments.
-
- * eval.c (method_arity): new method to return number of arguments.
-
- * parse.y (read_escape): char may be unsigned.
-
- * string.c (rb_str_succ): ditto.
-
- * string.c (tr_trans): ditto.
-
- * object.c (Init_Object): methods `&', `|', `^' are added to nil.
-
- * range.c (rb_range_beg_len): it should be OK for [0..-len-1].
-
- * regex.c (re_search): search for byte literal within mbcs.
-
- * regex.c (is_in_list): parsh
-
- * regex.c (re_compile_fastmap): should have not alter the loop
- variable `j' if TRASLATE_P().
-
- * regex.c (re_compile_pattern): escaped characters should be read
- by PATFETCH_RAW(c).
-
-Sat May 15 11:23:51 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_match): endline2 (\Z) should not match at the point
- between a newline and end-of-line, like endline ($).
-
- * class.c (include_class_new): should initialize iv_tbl to share
- between module and iclass.
-
-Fri May 14 08:50:27 1999 Akira Endo <akendo@t3.rim.or.jp>
-
- * regex.c (re_compile_fastmap): it should be k != 0 to skip.
-
-Fri May 14 12:46:56 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_load): a bug in old marshal format support.
-
- * instruby.rb: make site_ruby directory.
-
-Fri May 14 10:18:02 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * regex.c (re_match): a bug in inline `.*' etc.
-
-Fri May 14 09:58:46 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
-
- * ruby.c (addpath): should have specified string length.
-
-Thu May 13 10:40:44 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval_string_wrap): new function.
-
- * regex.c (re_compile_pattern): POSIX line match should alter
- behavior for `^' and `$' to begbuf and endbuf2 respectively.
-
- * ext/pty/pty.c: un-ANSI-fy function arguments.
-
-Wed May 12 14:19:38 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * struct.c (iv_get): in case of inheritance of generated struct
- class, __member__ and __size__ should also be inherited.
- Thanks for Pros Yeboah <yeboah@tu-harburg.de>.
-
- * io.c (rb_f_gets_internal): should check number of arguments
- before checking rb_rs == rb_default_rs. Thanks for Koji Arai
- <JCA02266@nifty.ne.jp>.
-
-Tue May 11 08:29:28 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): .?, .+ did not work.
-
-Mon May 10 00:59:33 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * lib/jcode.rb: forgot to squeeze on reverse (complement) case.
-
- * string.c (tr_squeeze): should not set modify flag to be honest,
- if the string is not modified.
-
- * signal.c (Init_signal): SIGTERM should not be handled.
-
- * regex.c (re_match): seeking for longest match is now optional,
- which can be set using RE_OPTION_POSIXMATCH. This satisfies
- POSIX longest match as much as Emacs's posix-* functions, which
- are known to be incomplete.
-
-Sun May 9 13:04:01 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/socket/socket.c (sock_s_getaddrinfo): conversion from
- Fixnums to C integers needed.
-
-Sun May 9 11:51:43 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * range.c (range_eqq): reverse condition.
-
- * range.c (range_s_new): default should be end inclusive.
-
-Sat May 8 03:27:51 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/socket.c (thread_connect): replace nasty
- rb_thread_fd_writable() with rb_thread_select().
-
-Fri May 7 20:49:00 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * ext/socket/getaddrinfo.c (inet_pton): wrong parameter to
- inet_aton().
-
- * ext/socket/addrinfo.h (__P): silly cut and paste typo.
-
-Fri May 7 17:03:57 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * dir.c (glob): removed GPL'ed glob.c completely.
-
-Fri May 7 08:17:19 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/sdbm/extconf.rb: sdbm extension added to the distribution.
-
-Fri May 7 01:42:20 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/socket.c (tcp_s_gethostbyname): avoid using struct
- sockaddr_storage.
-
-Thu May 6 13:21:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (rb_ary_indexes): should not use rb_ary_concat().
-
-Thu May 4 12:34:18 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * parse.y (parse_string): there should be newline escape by
- backslashes in strings.
-
- * parse.y (parse_qstring): ditto.
-
-Mon May 3 04:37:20 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * ext/tcltklib/extconf.rb: better search for libX11.
-
- * range.c (range_s_new): embarrassing =/== typo.
-
- * re.c (Init_Regexp): failed to set default kcode.
-
-Mon May 3 02:39:55 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * ext/socket/socket.c (open_inet): typo (res and res0).
-
-Tue May 4 02:07:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * mkconfig.rb: leave undefined $(VARIABLE) unexpanded in the
- Config::CONFIG hash table.
-
-Mon May 3 09:37:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): expand exactn{n} at compile time.
- handles stop_paren specially.
-
- * regex.c (re_compile_pattern): expand x{n} at compile time.
-
- * regex.c (re_search): posix line match should be checked.
-
- * regex.c (re_search): a bug in anchor condition.
-
-Fri Apr 30 18:57:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.3.3
-
- * string.c (rb_str_rindex): position should be END point, not
- START point.
-
- * re.c (rb_reg_search): pos means end point on reverse now.
-
- * array.c (rb_ary_s_create): should clear ary->ptr to avoid
- potential gc crash.
-
-Fri Apr 30 15:24:58 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/addrinfo.h: compatibility hack for ipv4.
-
- * ext/socket/socket.c: itojun's ipv6 patches applied.
-
- * ext/socket/extconf.rb: detect ipv6 features based on itojun's
- ipv6 patches.
-
- * ext/extmk.rb.in (enable_config): can handle --enable-xxx now.
-
- * lib/mkmf.rb (enable_config): ditto.
-
-Fri Apr 30 05:22:23 1999 Shugo Maeda <shugo@netlab.co.jp>
-
- * string.c (rb_str_aset): last index should not append.
-
-Thu Apr 29 18:55:31 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * dln.c (conv_to_posix_path): remove const from args.
-
- * ruby.c (rubylib_mangle): remove Fatal(), the obsolete function.
-
-Tue Apr 27 14:11:45 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (fname): lazy workaround for keywords did not work well.
-
- * ext/extmk.rb.in: `--with-xxx=yyy' argument configuration.
-
- * lib/mkmf.rb: ditto.
-
- * misc/ruby-mode.el: forgot to handle $`.
-
- * ext/extmk.rb.in: better AIX link support proposed by
- <komatsu@sarion.co.jp>.
-
-Mon Apr 26 16:46:59 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/extmk.rb.in: AIX shared library support modified.
-
- * ext/aix_mksym.rb: ditto.
-
- * configure.in: ditto.
-
- * sprintf.c (rb_f_sprintf): should allocate proper sized buffer
- for float numbers.
-
-Sat Apr 24 00:00:16 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (operation): syntax like `a.[]=(1,2)' is allowed.
-
-Fri Apr 23 23:54:09 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (argf_binmode): binmode method added to ARGF.
-
-Fri Apr 23 13:55:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_f_chomp): should assign the result to $_. or maybe
- sub/gsub/chop/chomp should NOT assign $_ altogether.
-
-Thu Apr 22 16:50:54 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_callcc): call scope_dup() for all scopes in
- the interpreter stack.
-
-Tue Apr 20 11:24:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_dump): `#' should be escaped.
-
-Tue Apr 20 02:32:42 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (parse_regx): option /p for posix match added.
-
- * re.c (rb_reg_desc): did not print options properly.
-
- * io.c (rb_file_s_open): initialize was called twice.
-
-Mon Apr 19 18:56:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * configure.in (DEFAULT_KCODE): can specify default code for
- $KCODE by --with-default-kcode=(euc|sjis|utf8|none).
-
- * regex.c (IS_A_LETTER): a byte sequence shorter than mbc should
- not match with \w etc.
-
-Mon Apr 19 13:49:11 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (eval): should restore ruby_dyna_vars.
-
-Fri Apr 16 21:40:43 1999 Nobuyoshi Nakada <gea02117@nifty.ne.jp>
-
- * io.c (f_backquote): pipe_open may return nil.
-
- * io.c (f_open): rb_io_open may return nil.
-
- * io.c (io_s_foreach): ditto.
-
- * io.c (io_s_readlines): ditto.
-
- * io.c (io_defset): wrong message.
-
-Fri Apr 16 15:09:20 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (rb_str2inum): strtoul() returns long, not int.
-
- * eval.c (rb_load): size of VALUE and ID may be different.
-
- * util.c (mmprepare): int is too small to cast from pointers.
-
- * config.guess: avoid 'linux-gnu' for alpha-unknown-linux.
-
-Thu Apr 15 23:46:20 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ruby.c (rubylib_mangle): mangle path by RUBYLIB_PREFIX.
-
-Wed Apr 14 23:52:51 1999 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
-
- * node.h (NODE_LMASK): should be long to avoid overflow.
-
-Wed Apr 14 13:14:35 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
-
- * dln.c: AIX dynamic link.
-
- * ext/aix_ld.rb: ditto.
-
-Wed Apr 14 12:19:09 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * lib/thread.rb: Queue#{enq,deq} added.
-
-Tue Apr 13 17:43:56 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (rb_hash_s_create): Hash::[] acts more like casting.
-
-Tue Apr 13 00:33:52 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_stdio_set): warning for assignment to the variables
- $std{in,out,err}.
-
-Mon Apr 12 23:12:32 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_reopen): check for reopening same IO.
-
-Fri Apr 9 17:45:11 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (rb_compile_string): bug for nested eval().
-
- * regex.c (re_match): should pop non-greedy stack items on
- failure, after best_regs are fixed.
-
-Thu Apr 8 17:30:40 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * pack.c (PACK_LENGTH_ADJUST): need to adjust for `*' length.
-
-Tue Apr 6 23:28:44 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (void_check): add void context checks.
-
-Mon Apr 5 12:23:42 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_s_at): should copy gmt-mode.
-
- * eval.c (eval_node): preserve ruby_eval_tree.
-
-Fri Apr 2 14:00:34 1999 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
-
- * lib/debug.rb: wrong command interpreting.
-
-Fri Apr 2 11:46:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.3.2
-
-Fri Apr 2 10:40:04 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_s_pipe): forgot to define IO::pipe.
-
-Thu Apr 1 14:40:46 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (assign): modified for rhs change.
-
- * parse.y (stmt): unparenthesisized method calls can be right hand
- side expression of the assignment.
-
-Sat Mar 27 22:42:47 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * ext/nkf/nkf.c (rb_nkf_kconv): check size output_ctr before
- decrement.
-
-Thu Mar 25 09:11:03 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_s_at): preserve gmt-mode for result.
-
- * parse.y (rb_compile_string): do not use cur_mid, use
- compile_for_eval instead.
-
- * st.c (PTR_NOT_EQUAL): wrong logical condition.
-
-Wed Mar 24 13:06:43 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yycompile): should clear cur_mid after compilation.
-
- * io.c (next_argv): need to check type for ARGV.shift.
-
- * eval.c (blk_copy_prev): need to preserve outer scope as well as
- outer frames.
-
- * parse.y (rb_compile_string): return can appear within eval().
-
-Tue Mar 23 10:15:07 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * configure.in: AC_C_CONST check added.
-
-Tue Mar 23 02:07:35 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_plus): preserve gmt-mode for result.
-
-Mon Mar 22 01:32:37 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): adjust line numbers before expression
- interpolation within strings.
-
- * eval.c (rb_eval): defined? returns nil for false condition.
-
- * numeric.c (num_nonzero_p): returns nil for false condition.
-
-Sat Mar 20 13:07:43 1999 Keiju Ishitsuka <keiju@rational.com>
-
- * lib/weakref.rb: avoid leak for two weakrefs for one object.
-
-Fri Mar 19 11:26:45 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * eval.c (ruby_run): needed to eval END{} on exit.
-
- * eval.c (rb_exit): ditto.
-
-Fri Mar 19 02:17:27 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * signal.c (Init_signal): handles terminating signals HUP, TERM,
- QUIT, PIPE, etc.
-
-Thu Mar 18 15:47:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (rb_big_and): bug in sign calculation.
-
- * bignum.c (rb_big_or): ditto.
-
- * io.c (rb_f_select): forgot to use to_io to retrieve IO, after
- calling select(2).
-
-Tue Mar 16 19:54:31 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ext/extmk.rb.in: static linking cause infinite make loop.
-
-Tue Mar 16 18:50:04 1999 Yoshida Masato <yoshidam@yoshidam.net>
-
- * ext/socket/socket.c (tcp_s_gethostbyname): typo, not NUM2INT(),
- but INT2NUM().
-
- * ext/socket/socket.c (mkhostent): ditto.
-
-Tue Mar 16 12:31:44 1999 Ryo HAYASAKA <hayasaka@cheer.u-aizu.ac.jp>
-
- * file.c (utime_internal): suppress warning by const.
-
- * time.c (time_gmtime): ditto.
-
-Tue Mar 16 10:23:05 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_clone): Time object can be cloned.
-
-Tue Mar 16 03:13:10 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * ruby.c (load_file): argv[argc] should be NULL.
-
-Mon Mar 15 22:12:08 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * sprintf.c (rb_f_sprintf): typo in arg_num check at exit.
-
-Mon Mar 15 16:42:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (rb_ary_dup): dup2 should copy class too.
-
-Mon Mar 15 15:12:53 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
-
- * lib/mkmf.rb: install program relative path check.
-
-Mon Mar 15 14:05:25 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (rb_reg_s_new): 2nd argument is now option.
- Regexp::EXTENDED can be specified.
-
-Fri Mar 12 10:47:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_index): str.index("") should always match at
- offset point.
-
- * string.c (rb_str_upto): can specify end point exclusion.
-
- * string.c (rb_str_index): negative offset.
-
- * regex.c (re_match): begline should not match at the point
- between a newline and end-of-string. endline neither.
-
- * regex.c (re_compile_pattern): context_indep_anchors .
-
- * parse.y (parse_regx): need not to push backslashes before
- escaped characters.
-
- * eval.c (rb_thread_join): re-raises exception within target.
-
-Fri Mar 12 01:09:36 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * ext/readline/readline.c (readline_s_vi_editing_mode): wrong
- number of arguments.
-
-Fri Mar 12 02:12:50 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * pack.c (PACK_ITEM_ADJUST): "a".unpack("C3") => [97, nil, nil]
-
-Thu Mar 11 18:23:50 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * ext/socket/socket.c (Init_socket): UDPsocket was omitted.
-
-Thu Mar 11 16:43:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * pack.c (PACK_LENGTH_ADJUST): push fixed number of items per
- template to result array.
-
- * pack.c (pack_unpack): I/N/C etc. push nil in the array for "".
-
-Tue Mar 9 00:19:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (ruby_unsetenv): use ruby_setenv(name, 0).
-
- * hash.c (env_delete): ditto.
-
- * string.c (rb_str_upto): do not check `beg<end' to generate
- strings for the pattern like "a".upto("#a").
-
- * range.c (range_each): treat strings as special case.
-
- * range.c (range_each): no longer use upto for generic cases.
-
-Sun Mar 7 14:21:32 1999 IKARASHI Akira <ikarashi@itlb.te.noda.sut.ac.jp>
-
- * string.c (rb_str_index): wrong end point calculation.
-
-Sat Mar 6 02:19:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (match_index): MatchingData#index(n) added.
-
- * array.c (rb_ary_subseq): ary[n..-1] returns an sub-array unless
- n is too small negative index.
-
- * re.c (rb_reg_match_method): Regexp#match(str) added.
-
- * array.c (rb_ary_indexes): understands ranges as indexes.
-
- * re.c (match_size): MatchingData#size added.
-
-Fri Mar 5 01:04:57 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (rb_ary_fill): modified for range.
-
- * array.c (rb_ary_aset): a[n..m] revisited.
-
-Thu Mar 4 14:23:29 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_subseq): a[n..m] revisited.
-
- * parse.y (method_call): allow Const::method{}.
-
- * array.c (rb_ary_replace_method): should replace original array.
-
-Thu Mar 4 02:30:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * configure.in: remove --disable-thread, thread feature is no
- longer optional.
-
-Thu Mar 4 00:32:17 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
-
- * parse.y (read_escape): wrong arguments for scan_oct,scan_hex.
-
-Wed Mar 3 11:51:53 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/socket.c (Init_socket): rename class names as
- TCPsocket -> TCPSocket etc.
-
-Tue Mar 2 19:46:42 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * configure.in (LDSHARED): use gcc -Wl,-G for solaris with gcc.
-
-Tue Mar 2 17:04:19 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): backslashes do not concatenate comment lines
- anymore.
-
-Mon Mar 1 14:05:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_call0): adjust argv for optional arguments. super
- without arguments emit superclass method with the value from
- optional arguments. enabled as experiment.
-
-Sun Feb 28 14:04:07 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * parse.y (nextc): backslash at the eof cause infinite loop
-
-Sun Feb 28 11:01:26 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * time.c (make_time_t): month range check added.
-
-Sat Feb 27 02:36:05 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (Init_Regexp): add escape as alias of quote.
-
- * re.c (rb_reg_s_quote): char-code can be specified now.
-
-Fri Feb 26 18:45:36 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
-
- * eval.c (error_print): bug for error message with newlines.
-
-Fri Feb 26 12:00:04 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (make_time_t): future check modified to allow 1969-12-31
- at certain timezone.
-
- * time.c (time_arg): year >= 1000 should be past.
-
- * version.c (Init_version): constant RELEASE_DATE added.
-
-Fri Feb 26 01:08:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_substr): returns nil for out-of-range access.
-
- * array.c (rb_ary_subseq): returns nil for out-of-range access.
-
- * array.c (rb_ary_store): negative index message has changed.
-
- * string.c (rb_str_aset): reallocation needed.
-
- * string.c (rb_str_aset): allow char append to the string.
-
-Thu Feb 25 23:30:17 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * time.c (time_load): tm_year should be packed in 17 bits, not 18.
-
-Thu Feb 25 12:50:25 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * missing/dup2.c: replaced by public domain version.
-
- * time.c (make_time_t): add `future check' in loops.
-
- * object.c (rb_num2dbl): forbid implicit conversion from nil, or
- strings. thus `Time.now + str' should raise error.
-
- * object.c (rb_Float): convert nil into 0.0.
-
- * object.c (rb_Integer): conversion method improved.
-
-Thu Feb 25 03:27:50 1999 Shugo Maeda <shugo@netlab.co.jp>
-
- * eval.c (rb_call): should handle T_ICLASS properly.
-
-Thu Feb 25 00:04:00 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * error.c (Init_Exception): global function Exception() removed.
-
- * variable.c (rb_class2name): returns "nil"/"true"/"false" for them.
-
- * time.c (time_dump): time marshaling format compressed size from
- 11 bytes to 8 bytes. thanx to tadf@kt.rim.or.jp.
-
- * eval.c (rb_obj_call_init): should specify arguments explicitly.
-
-Wed Feb 24 15:43:28 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): comment concatenation requires preceding space
- before backslash at the end of line.
-
- * io.c (rb_f_pipe): global pipe is obsolete now.
-
- * object.c (Init_Object): remove true.to_i, false.to_i.
-
-Tue Feb 23 14:21:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): warn if identifier! immediately followed by `='.
-
-Tue Feb 23 12:32:41 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * eval.c (rb_load): tilde expansion moved to find_file.
-
- * eval.c (find_file): tilde expansion added.
-
-Tue Feb 23 10:50:20 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (require_method): require can handle multiple fnames.
-
- * hash.c (rb_hash_foreach_iter): hash key may be nil.
-
-Mon Feb 22 17:44:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_match): should not pop failure point on success for
- non-greedy matches.
-
- * io.c (Init_IO): remove global_functions getc, readchar, ungetc,
- seek, tell, rewind.
-
-Sat Feb 20 22:54:26 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * numeric.c (rb_num2long): no implicit conversion from boolean.
-
-Sat Feb 20 09:58:42 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * numeric.c (flo_to_s): portable Infinity and NaN support.
-
-Sat Feb 20 07:13:31 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * io.c (rb_file_sysopen): forgot to initialize a local variable.
-
-Fri Feb 19 23:05:07 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_subseq): range check changed.
-
- * marshal.c: increment MARSHAL_MINOR for Time format change.
-
- * time.c (time_old_load): support old marshal format.
-
- * time.c (time_load): changed for new format Y/M/D/h/m/s/usec.
-
- * time.c (time_dump): marshal dump format has changed.
-
-Fri Feb 19 00:25:57 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_arg): should reject "sep\0" and such.
-
- * time.c (time_plus): Time#+ should not receive Time object
- operand.
-
- * string.c (rb_str_substr): negative length raises exception now.
-
- * array.c (beg_len): if end == -1, it points end of the array.
-
- * array.c (rb_ary_subseq): negative length raises exception now.
-
-Thu Feb 18 20:57:04 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * time.c (rb_strftime): strftime() may return 0 on success too.
-
- * time.c (time_strftime): `\0' within format string should not be
- omitted in the result.
-
- * time.c (rb_strftime): zero length format.
-
- * time.c (time_to_a): yday start with 1 now.
-
- * time.c (time_zone): support for long timezone name.
-
- * time.c (time_yday): yday start with 1 now.
-
- * time.c (time_minus): minus calculation was wrong.
-
- * time.c (time_minus): sec, usec should be at least `long', maybe
- they should be `time_t'.
-
- * time.c (time_plus): addition with float was wrong.
-
- * time.c (time_to_s): support for long timezone name.
-
- * time.c (time_gm_or_local): too far future check moved.
-
- * time.c (time_arg): treat 2 digit year as 69-99 => 1969-1999,
- 00-68 => 2000-2068
-
-Thu Feb 18 03:56:47 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * missing/fnmatch.c: moved to missing directory.
-
-Wed Feb 17 16:22:26 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * struct.c (rb_struct_alloc): actual initialization now be done in
- `initialize'.
-
-Wed Feb 17 09:47:15 1999 okabe katsuyuki <hgc02147@nifty.ne.jp>
-
- * regex.c (re_search): use mbclen() instead of ismbchar().
-
- * re.c (rb_reg_s_quote): should handle mbchars properly.
-
-Wed Feb 17 01:25:26 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): stop comment concatenation by backslash follows
- after >= 0x80 char. may cause problem with Latin chars.
-
- * eval.c (error_print): exception in rb_obj_as_string() caused
- SEGV. protect it by PUSH_TAG/POP_TAG.
-
- * error.c (exc_exception): `Exception#exception' should return self.
-
-Wed Feb 17 01:12:22 1999 Hirotaka Ichikawa <hirotaka.ichikawa@tosmec.toshiba.co.jp>
-
- * configure.in: BeOS patch.
-
-Tue Feb 16 14:25:00 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): should reallocate mbc space for
- character class unless current_mbctype is ASCII.
-
-Mon Feb 15 15:48:30 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * configure.in: specify `-Wl,-E' only for GNU ld.
-
-Mon Feb 15 11:43:22 1999 GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp>
-
- * array.c (rb_inspecting_p): should return Qfalse.
-
-Sun Feb 14 22:36:40 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * sprintf.c (rb_f_sprintf): `%G' was omitted.
-
-Sun Feb 14 12:47:48 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * numeric.c (Init_Numeric): allow divide by zero on FreeBSD.
-
- * numeric.c (Init_Numeric): FloatDomainError added.
-
- * configure.in (AC_REPLACE_FUNCS): add checks for functions
- isinf, isnan, and finite.
-
-Sat Feb 13 01:24:16 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_create_0): should protect th->thread.
-
-Fri Feb 12 16:16:47 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
-
- * string.c (rb_str_inspect): wrong mbc position.
-
-Fri Feb 12 16:21:17 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_fd_close):
-
- * io.c (rb_io_fptr_close): tell scheduler that fd is closed.
-
- * io.c (rb_io_reopen): ditto.
-
- * io.c (READ_CHECK): check if closed after thread context switch.
-
- * ext/socket/socket.c (bsock_close_read): do not check
- the return value from shutdown(2).
-
- * ext/socket/socket.c (bsock_close_write): ditto.
-
- * ext/socket/socket.c (sock_new): need to dup(fd) for close_read
- and close_write.
-
- * parse.y (here_document): handle newlines within #{}.
-
- * regex.h: should replace symbols for ruby.
-
-Fri Feb 12 00:46:28 1999 Shugo Maeda <shugo@netlab.co.jp>
-
- * marshal.c (r_object): should update the method name in message.
-
- * marshal.c (w_object): limit should be converted into Fixnum.
-
-Wed Feb 10 15:20:03 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_match): empty pattern should not cause infinite
- pattern match loop.
-
- * regex.c (re_compile_pattern): RE_OPTIMIZE_ANCHOR for /.*/, not
- for /(.|\n)/.
-
- * numeric.c (fix_pow): `fixnum**nil' should raise TypeError.
-
- * bignum.c (rb_big_pow): need to normalize results.
-
-Wed Feb 10 01:42:41 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * numeric.c (fix_pow): `(5**1).type' should be Integer.
-
-Tue Feb 9 01:22:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): do not ignore newlines in mbchars.
-
- * io.c (rb_file_s_open): mode can be specified by flags like
- open(2), e.g. File::open(path, File::CREAT|File::WRONLY).
-
- * io.c (rb_f_open): bit-wise mode flags for pipes
-
- * io.c (Init_IO): bit flags for open.
-
-Sat Feb 6 22:56:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_sub_bang): should not overwrite match data by
- regexp match within the block.
-
- * string.c (rb_str_gsub_bang): ditto.
-
-Sat Feb 6 03:06:17 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (match_getter): accessing $~ without matching caused SEGV.
-
-Fri Feb 5 22:11:08 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * parse.y (yylex): binary literal support, like 0b01001.
-
- * parse.y (yylex): octal numbers can contain `_'s.
-
- * parse.y (yylex): warns if non-octal number follows immediately
- after octal literal.
-
- * parse.y (yylex): now need at least one digit after prefix such
- as 0x, or 0b.
-
- * bignum.c (rb_str2inum): recognize binary numbers like 0b0101.
-
-Fri Feb 5 03:26:56 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
-
- * ruby.c (proc_options): -e without program prints error.
-
-Fri Feb 5 00:01:50 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (terms): needed to clear heredoc_end.
-
- * numeric.c (flo_div): allow float division by zero.
-
-Thu Feb 4 11:56:24 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * missing/strtod.c: for compatibility.
-
- * configure.in (strtod): add strtod compatible check.
-
- * numeric.c (rb_num2long): missing/vsnprintf.c does not support
- floating points.
-
- * numeric.c (flo_to_s): ditto.
-
-Wed Feb 3 23:02:12 1999 Yoshida Masato <yoshidam@yoshidam.net>
-
- * regex.c (re_compile_pattern): use ismbchar() to get next char.
-
- * regex.c (re_search): wrong mbchar shift.
-
- * re.c (rb_reg_search): needed to reset $KCODE after match.
-
- * regex.c (re_compile_fastmap): mbchars should match with \w.
-
-Wed Feb 3 22:35:12 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * parse.y (yylex): too big float raise warning, not error.
-
-Tue Feb 2 23:41:42 1999 Yoshida Masato <yoshidam@yoshidam.net>
-
- * regex.c (re_match): wrong boundary.
-
- * regex.c (IS_A_LETTER): re_mbctab[c] may not be 1 for mbc.
-
- * regex.c (re_search): mbchar support for shifting ranges.
-
- * regex.c (MBC2WC): wrong conversion.
-
-Wed Feb 3 15:03:16 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (parse_regx): need to escape parens if terminators are
- not any kind of parenthesis.
-
- * parse.y (parse_qstring): ditto.
-
- * parse.y (parse_string): ditto.
-
-Tue Feb 2 17:11:26 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * string.c (rb_str_gsub_bang): too small realloc condition.
-
-Mon Feb 1 10:01:17 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * parse.y (yylex): range check for the float literal.
-
-Sat Jan 30 18:34:16 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (usage): -h option to show brief command description.
-
-Sat Jan 30 08:45:16 1999 IKARASHI Akira <ikarashi@itlb.te.noda.sut.ac.jp>
-
- * lib/cgi-lib.rb: cookie support added.
-
-Sat Jan 30 13:38:24 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): mbchars should match with \w
- within character class. Was matching with \W.
-
- * regex.c (re_match): \w should match with multi byte characters,
- not its first byte.
-
-Sat Jan 30 10:06:41 1999 Yoshida Masato <yoshidam@yoshidam.net>
-
- * re.c (rb_reg_s_new): UTF-8 flag handle (/u, /U).
-
- * re.c (rb_kcode): $KCODE handle for UTF-8.
-
-Sat Jan 30 01:51:16 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (rb_ary_delete_if): RTEST() missing.
-
- * hash.c (delete_if_i): ditto.
-
- * enum.c (Init_Enumerable): select (=find_all), detect (=find)
- added as aliases.
-
-Fri Jan 29 21:32:19 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * hash.c (rb_f_setenv): SEGV caused by small typo.
-
-Fri Jan 29 00:15:58 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * lib/parsedate.rb (parsedate): support date format like
- 23-Feb-93, which is required by HTTP/1.1.
-
- * variable.c (find_class_path): avoid calling rb_iv_set().
-
- * eval.c (backtrace): do not need to modify $SAFE internally.
-
- * variable.c (classname): inline __classid__ access.
-
- * eval.c (THREAD_ALLOC): needed to initialize wrapper.
-
- * lib/ftools.rb (makedirs): allows slash at the end of the path.
-
- * numeric.c (rb_fix_induced_from): ensure result to be Fixnum.
-
-Thu Jan 28 17:31:43 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * numeric.c (flo_to_s): float format changed to "%16.10g".
-
-Thu Jan 28 02:13:11 1999 Yoshinori Toki <toki@freedom.ne.jp>
-
- * array.c (rb_ary_store): expand allocated buffer by 3/2.
-
-Wed Jan 27 17:50:02 1999 Kazuhiro HIWADA <hiwada@kuee.kyoto-u.ac.jp>
-
- * bignum.c (dbl2big): raised error if double is too big to cast
- into long. check added.
-
-Wed Jan 27 03:16:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (rb_mod_const_at): can't list constants of the
- untainted objects in safe mode.
-
- * class.c (method_list): can't list methods of untainted objects
- in safe mode.
-
-Tue Jan 26 02:40:41 1999 GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp>
-
- * prec.c: Precision support for numbers.
-
-Thu Jan 21 19:08:14 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_f_raise): calls `exception' method, not `new'.
-
- * error.c (exc_exception): renamed from `new'.
-
-Wed Jan 20 03:39:48 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yycompile): rb_in_compile renamed to ruby_in_compile.
-
- * ruby.c (load_file): define DATA if __END__ appeared in script.
-
-Tue Jan 19 14:57:51 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (here_document): need to protect lex_lastline.
-
- * parse.y (yylex): disable %//, %'', %``.
-
-Tue Jan 19 05:01:16 1999 Koji Arai <JCA02266@nifty.ne.jp>
-
- * array.c (beg_len): round range value too much.
-
-Mon Jan 18 13:02:27 1999 Kuroda Jun <jkuro@dwe.co.jp>
-
- * hash.c (env_keys): strchr() may return NULL.
-
-Mon Jan 18 17:51:47 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * instruby.rb (wdir): install libruby.a in archdir.
-
- * lib/ftools.rb (install): removes file before installing.
-
-Mon Jan 18 16:55:31 1999 MAEDA shugo <shugo@aianet.ne.jp>
-
- * eval.c (rb_callcc): experimental continuation support.
-
-Sun Jan 17 19:45:37 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * pack.c (pack_pack): nil packing caused SEGV.
-
-Sat Jan 16 13:18:03 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_concat): character (fixnum) can be append to
- strings
-
- * array.c (rb_ary_unshift): unshift returns array.
-
-Sat Jan 16 01:39:19 1999 Yoshida Masato <yoshidam@tau.bekkoame.ne.jp>
-
- * string.c (rb_str_split_method): UTF-8 support.
-
- * regex.c: UTF-8 support.
-
-Thu Jan 14 00:42:55 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_gsub_bang): forget to add offset for null match.
-
- * eval.c (rb_thread_local_aset): can't modify in tainted mode.
-
- * hash.c (env_each_key): avoid generating temporary array.
-
-Wed Jan 13 23:58:50 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (rb_f_setenv): name and value can be tainted.
-
-Wed Jan 6 02:42:08 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (Init_Bignum): forgot to define Bignum#===.
-
- * gc.c (gc_sweep): if add_heap() is called during GC, objects on
- allocated heap page(s) are not marked, should not be recycled.
-
- * gc.c (gc_sweep): should refer latest freelist.
-
- * gc.c (id2ref): modified to support performance patch.
-
- * object.c (rb_obj_id): performance patch (no bignum for id).
-
-Tue Jan 5 01:56:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * config.guess: merge up-to-date from autoconf 2.12.
-
- * array.c (rb_ary_join): avoid calling rb_protect_inspect() till
- it is really needed.
-
- * object.c (rb_obj_inspect): show detailed information for the
- instance variables (infinite loop can avoid now).
-
- * struct.c (rb_struct_inspect): avoid infinite loop.
-
-Sun Jan 3 01:37:58 1999 Takao KAWAMURA <kawamura@ike.tottori-u.ac.jp>
-
- * misc/ruby-mode.el (ruby-end-of-defun): moved too much.
-
- * misc/ruby-mode.el (ruby-mode-variables): set paragraph-separator
- for the mode.
-
- * misc/ruby-mode.el: proper font-lock for `def' and `nil' etc.
-
-Sat Jan 2 17:09:06 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_jump_tag): new api to invoke JUMP_TAG. tag values
- can obtained from rb_eval_string_protect()/rb_load_protect().
-
- * eval.c (rb_rescue): now catches all exceptions but SystemExit.
-
- * eval.c (rb_eval_string_protect): eval string with protection.
-
- * eval.c (rb_load_protect): load file with protection.
-
- * io.c (rb_io_puts): avoid infinite loop for cyclic arrays.
-
- * eval.c (rb_thread_local_aref): thread local hash tables.
-
- * object.c (rb_equal): check exact equal before calling `=='.
-
-Thu Dec 31 22:28:53 1998 MAEDA shugo <shugo@aianet.ne.jp>
-
- * eval.c (rb_f_require): feature names should be provided with
- DLEXT extension.
-
- * marshal.c (Init_marshal): need to provide `marshal.so'.
-
-Wed Dec 30 02:29:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (classname): do not call rb_ivar_set().
-
- * eval.c (ruby_run): finalizers were called too early.
-
-Fri Dec 25 12:19:30 1998 Fukuda Masaki <fukuda@wni.co.jp>
-
- * gc.c (rb_gc_mark): should not return on FL_EXIVAR.
-
-Fri Dec 25 11:56:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * gc.c (gc_mark): proper scanning for temporary region.
-
- * eval.c (TMP_ALLOC): protection for C_ALLOCA was broken.
-
-Thu Dec 24 18:26:04 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * development version 1.3 released.
-
-Thu Dec 24 00:17:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_load): top self should be set properly.
-
- * variable.c (classname): check __classpath__ if it is defined.
-
- * variable.c (classname): invalid warning at -v with static linked
- ruby interpreter.
-
- * eval.c (is_defined): modified for expr::Const support.
-
- * eval.c (rb_eval): invoke method expr::Const if expr is not class
- nor module.
-
- * parse.y (primary): enable expr::identifier as method
- invocation.
-
-Wed Dec 23 03:04:36 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_match): avoid too many loop pops for (?:..).
-
-Tue Dec 22 18:01:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental version 1.1d1 released.
-
-Mon Dec 21 01:33:03 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (TMP_PROTECT): add volatile to ensure GC protection.
-
- * string.c (rb_str_gsub_bang): calculate buffer size properly.
-
- * parse.y (lex_get_str): needed to return Qnil at EOS.
-
- * eval.c (find_file): check policy modified, raise exception
- immediately for tainted load_path.
-
- * hash.c (rb_f_setenv): do not depend on setenv() nor putenv().
-
-Thu Dec 17 06:29:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/tk/tkutil.c (tk_s_new): use rb_obj_instance_eval(), instead
- of rb_yield_0().
-
- * eval.c (rb_f_require): forgot to call find_file in some cases.
-
- * eval.c (rb_f_require): `require "feature.so"' to load dynamic
- libraries. old `require "feature.o"' is still OK.
-
- * eval.c (rb_eval): yield without value dumped core.
-
-Wed Dec 16 16:28:31 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental version 1.1d0 (pre1.2) released.
-
-Wed Dec 16 10:43:34 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_search): bound check before calling re_match().
-
-Tue Dec 15 13:59:01 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * error.c (exc_to_s): returns class name for unset mesg.
-
- * error.c (exc_initialize): do not initialize @mesg by "".
-
- * parse.y (nextc): __END__ should handle CR+LF newlines.
-
-Wed Dec 9 13:37:12 1998 MAEDA shugo <shugo@aianet.ne.jp>
-
- * pack.c (encodes): use buffering for B-encoding.
-
- * pack.c (pack_pack): Q-encoding by 'M'.
-
-Tue Dec 8 14:10:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (generic_ivar_get): any object can have instance
- variables now. great improvement.
-
- * variable.c (rb_name_class): do not set __classpath__ by default,
- use __classid__ instead.
-
-Mon Dec 7 22:08:22 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.h (struct RFile): IO objects can have instance variables now.
-
- * parse.y (primary): allows `def obj::foo; .. end'.
-
-Mon Dec 7 18:24:50 1998 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * ruby.c (set_arg0): $0 support for HP-UX.
-
-Mon Dec 7 01:30:28 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * dln.c (dln_strerror): better error messages on win32.
-
-Sat Dec 5 23:27:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (here_document): indentable here-doc delimiter by
- `<<-'. Proposed by Clemens <c.hintze@gmx.net>. Thanks.
-
-Thu Dec 3 16:50:17 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/extmk.rb.in (realclean): trouble on install.
-
-Sun Nov 29 22:25:39 1998 Takaaki Tateishi <ttate@jaist.ac.jp>
-
- * process.c (f_exec): check number of argument.
-
-Thu Nov 26 17:27:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1c9 released.
-
-Wed Nov 25 13:07:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_dup): do not copy additional data (STR_NO_ORIG).
-
- * parse.y (yycompile): reduce known memory leak (hard to remove).
-
-Wed Nov 25 03:41:21 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * st.c (st_init_table_with_size): round size up to prime number.
-
-Sat Nov 21 23:27:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (rb_hash_aset): reduce copying key strings.
-
- * gc.c (looks_pointerp): declare as inline function if possible.
-
- * st.c (PTR_NOT_EQUAL): compare hash values first before calling
- comparing function.
-
- * st.c (ADD_DIRECT): save hash value in entries to reduce hash
- calculation.
-
- * string.c (rb_str_gsub_bang): avoid rb_scan_args() to speed-up.
-
- * string.c (rb_str_sub_bang): ditto.
-
-Sat Nov 21 18:44:06 1998 Masaki Fukushima <fukusima@goto.info.waseda.ac.jp>
-
- * time.c (time_s_now): had memory leak.
-
- * ext/md5/md5init.c (md5_new): had memory leak.
-
- * ext/md5/md5init.c (md5_clone): ditto.
-
-Fri Nov 20 23:23:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * lib/delegate.rb: do not propagate hash and eql?.
-
-Thu Nov 19 01:40:52 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sample/ruby-mode.el (ruby-expr-beg): failed to find reserved
- word boundary.
-
- * eval.c (rb_eval): avoid calling `concat' method. calls
- rb_ary_concat() directly for efficiency.
-
- * eval.c (rb_eval): actual rest arguments extended arrays too much.
-
-Wed Nov 18 14:30:24 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * class.c (rb_define_global_function): global functions now be
- module function of the Kernel.
-
-Wed Nov 18 10:48:09 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (read_all): SEGV on large files.
-
-Tue Nov 17 18:11:20 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1c8 released.
-
-Tue Nov 17 16:58:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (arg): assignment to attribute name start with capital
- should be allowed.
-
- * eval.c (thread_alloc): needed to mark terminated threads too.
-
-Tue Nov 17 12:33:48 1998 Motoyuki Kasahara <m-kasahr@sra.co.jp>
-
- * ext/extmk.rb.in (create_makefile): Set `libdir' to `@libdir@',
- Set `pkglibdir' to `$libdir/$(RUBY_INSTALL_NAME)'.
-
-Tue Nov 17 10:30:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sprintf.c (f_sprintf): %l%%c -> %%l%c
-
-Tue Nov 17 01:08:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (ret_args): distinguish `a' and `*a' for the arguments
- of yield and return.
-
- * eval.c (rb_eval): flip3 should work like sed.
-
- * eval.c (rb_eval): flip{2,3} now have independent state for each
- scope to work fine with thread.
-
-Mon Nov 16 23:26:29 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (primary): exec else clause if no exception raised.
-
-Sun Nov 15 15:44:07 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * ext/extmk.rb.in (install): bug in target.
-
-Sat Nov 14 11:02:05 1998 Motoyuki Kasahara <m-kasahr@sra.co.jp>
-
- * Makefile.in (install): Give the argument `$(DESTDIR)' to
- `instruby.rb'.
-
- * instruby.rb: Recognize ARG[0] as `destdir'.
-
- * instruby.rb: Give the argument `destdir' to `extmk.rb'.
-
- * ext/extmk.rb.in: Recognize ARG[1] as `$destdir'.
-
- * instruby.rb: Create the installation directories (bindir, libdir,
- archdir, pkglibdir, archdir, and mandir) under `destdir', and
- install all files under there.
-
- * ext/extmk.rb.in: Likewise.
-
-Sat Nov 14 10:56:55 1998 Motoyuki Kasahara <m-kasahr@sra.co.jp>
-
- * instruby.rb: Add the variable `pkglibdir'.
-
- * instruby.rb: Set the variable `libdir' to `$(libdir)', not
- `$(libdir)/$(ruby_install_name)'. `libruby.so' and `libruby.so.LIB'
- are installed at `libdir'.
-
- * instruby.rb: Set the variable `archdir' to `$(pkglibdir)/$(arch)'.
-
-Fri Nov 13 19:43:29 1998 KIMURA Koichi <kbk@kt.rim.or.jp>
-
- * missing/nt.c (SafeFree): wrong free offset.
-
-Thu Nov 12 20:11:53 1998 Koji Arai <JCA02266@nifty.ne.jp>
-
- * sample/ruby-mode.el: wrong highlight.
-
- * parse.y (parse_regx): newline in regexp was ignored.
-
-Wed Nov 11 10:54:57 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (here_document): <<'FOO' should not escape anything.
-
- * parse.y (here_document): bare << here-doc available, even though
- it's deprecated.
-
- * file.c (rb_file_s_readlink): return value should be tainted.
-
- * ext/etc/etc.c (setup_passwd): information (eg. GCOS name) should
- be tainted (modified at Perl Conference).
-
-Tue Nov 10 00:22:11 1998 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * configure.in: elf support for FreeBSD 3.x
-
-Tue Nov 10 00:05:43 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): here document available in eval.
-
-Mon Nov 9 17:55:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1c7 released.
-
-Fri Nov 6 19:25:27 1998 Takao KAWAMURA <kawamura@ike.tottori-u.ac.jp>
-
- * sample/ruby-mode.el: font-lock patch.
-
-Thu Nov 5 15:42:22 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sample/README, lib/README: simple description for each file.
-
-Wed Nov 4 18:14:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (assign): attribute assignment should be called as public.
-
-Tue Nov 3 23:36:39 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_dump): dumps core for negative char value.
-
- * regex.c (re_compile_pattern): out of boundary access for empty
- regexp.
-
-Mon Nov 2 22:54:01 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_aset): `str[str]' replaces first match.
-
-Mon Nov 2 18:24:33 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (thread_create): was accessing modified status.
-
-Sun Nov 1 01:18:52 1998 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * gc.c (xrealloc): size 0 needs round up to 1.
-
-Sat Oct 31 23:18:34 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_split_method): negative LIMIT means number of
- split fields are unlimited, as in perl.
-
- * string.c (rb_str_split_method): if LIMIT is unspecified,
- trailing null fields are stripped.
-
-Sat Oct 31 04:16:14 1998 Inaba Hiroto <inaba@st.rim.or.jp>
-
- * string.c (str_aref): regexp index SEGVed.
-
-Fri Oct 30 14:33:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (reg_match): returns nil for unmatch.
-
- * dir.c (dir_entries): new method.
-
- * eval.c (block_pass): do not push block, substitute it.
-
-Fri Oct 30 01:28:52 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * range.c (range_check): avoid <=> check for Fixnums.
-
- * array.c (rb_ary_aset): accept negative index.
-
-Wed Oct 28 22:00:54 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_match): access out of boundary fixed.
-
-Wed Oct 28 11:37:42 1998 TAMITO <tommy@valley.ne.jp>
-
- * io.c (f_select): fd number comparison bug.
-
-Tue Oct 27 23:07:11 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sample/ruby-mode.el (ruby-parse-region): forgot to support %w()
- style array literal.
-
- * eval.c (rb_eval): unused block raises warning.
-
-Mon Oct 26 09:37:53 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (dvar_asgn_push): dvar pushed too many times if
- variable-in-block first appear in loops.
-
-Sun Oct 25 22:59:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (set_list_bits): was using wrong offset.
-
-Thu Oct 22 00:07:11 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_obj_method): method retrieved from tainted object
- should be tainted too.
-
- * eval.c (method_call): safe_level should be restored during
- Method#call.
-
-Wed Oct 21 14:21:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (Init_IO): new constants IO::SEEK_{SET,CUR,END}.
-
- * io.c (rb_f_ungetc): ungetc pushes a char back into STDIN.
-
-Mon Oct 19 11:50:00 1998 Motoyuki Kasahara <m-kasahr@sra.co.jp>
-
- * ext/extmk.rb: Load '@top_srcdir@/lib/find.rb', not
- '../lib/find.rb'.
-
- * ext/extmk.rb: Distinguish between `top_srcdir' and `topdir'.
-
- * Makefile.in (CFLAGS): Add `-I.'.
-
- * Makefile.in (lex.c): Give `@srcdir@/keywords' to gperf, not
- `keywords'.
-
- * instruby.rb: Use `CONFIG["bindir"]', instead of `prefix + "/bin"'.
-
- * instruby.rb: Use `CONFIG["libdir"]', instead of `prefix + "/lib"'.
-
- * instruby.rb Use `CONFIG["mandir"]', instead of `prefix + "/man"'.
-
- * instruby.rb (wdir): Add the variable to preserve the current
- working directory.
-
- * instruby.rb: Chdir to wdir before install `config.h' and
- `rbconfig.rb'.
-
-Mon Oct 19 10:07:01 1998 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
-
- * eval.c (rb_eval): reduce recursive calls to rb_eval().
-
-Fri Oct 16 15:31:45 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_new_internal): timeval must be positive.
-
-Thu Oct 15 13:54:48 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (arg): local variables can be accessed within right side
- expression in assignment, notably in blocks.
-
-Wed Oct 14 00:18:33 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (Init_Array): Array#=== is now for equal check, not
- inclusion check.
-
- * parse.y (when_args): `when a, *b' style new syntax for array
- expansion in `case'.
-
-Tue Oct 13 14:30:32 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (rb_obj_untaint): taint marks can be unset.
-
- * eval.c (rb_eval): taint propagation for embedded strings.
-
-Mon Oct 12 13:27:15 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_call0): check stack depth more frequently.
-
-Mon Oct 12 08:08:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_p): can print even in secure mode.
-
-Sun Oct 11 22:50:13 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (rb_const_set): taint check for modification.
-
- * variable.c (rb_ivar_set): taint check for modification.
-
- * string.c (rb_str_modify): taint check for modification.
-
- * hash.c (rb_hash_modify): taint check for modification.
-
- * array.c (rb_ary_modify): taint check for modification.
-
- * ruby.h (FL_TAINT): taint for all objects, not only strings.
-
-Fri Oct 9 17:01:14 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (read_all): read() returns "" at immediate EOF.
-
- * io.c (io_read): read(nil) read all until EOF.
-
-Thu Oct 8 13:32:13 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_dump): marshal can dump Time object now.
-
- * marshal.c (Init_marshal): rename marshal methods `_dump_to' to
- `_dump', `_load_from' to `_load'.
-
- * parse.y (rb_intern): "+=".intern generates proper symbol.
-
-Mon Oct 5 18:31:53 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1c6 released.
-
-Fri Oct 2 14:22:33 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_search): `/\s*(--)$/ =~ "- --"' did not match,
- because of wrong optimize condition.
-
-Mon Oct 1 01:55:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (rb_intern): should not raise exceptions.
-
- * parse.y (yylex): symbol like `:foo?=' should not be allowed.
-
- * ext/extmk.rb.in: makes *.a for static link modules.
-
-Wed Sep 30 14:13:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_start): supports making a subclass of the
- Thread class.
-
-Tue Sep 29 17:46:01 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_thread_join): join is now an instance method.
-
-Fri Sep 25 12:01:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): `@foo!' should be an error.
-
-Thu Sep 24 14:55:06 1998 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * ext/etc/etc.c (Init_etc): wrong field definition.
-
-Thu Sep 17 17:09:05 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_reopen): was creating FILE* for wrong fd.
-
-Tue Sep 15 05:28:11 1998 Koji Arai <JCA02266@nifty.ne.jp>
-
- * regex.c (re_compile_pattern): forgot to fixup for the pattern
- like (?=(A)|(B)).
-
-Tue Sep 15 01:06:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (rb_io_gets_internal): do not set $_ by default, only
- gets/readline set the variable.
-
- * eval.c (rb_f_load): load toplevel class is set to anonymous
- module if safe_level >= 5, to encapsulate modification.
-
- * eval.c (rb_f_load): set frame properly.
-
- * string.c (rb_str_each_line): do not set $_.
-
-Mon Sep 14 14:42:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_match): beginning and end of the string, do not
- automatically match `\b'.
-
- * string.c (scan_once): consume at least on character.
-
- * regex.c (re_search): wrong behavior for negative range.
-
-Sat Sep 12 21:21:26 1998 Koji Arai <JCA02266@nifty.ne.jp>
-
- * regex.c (re_search): range value should be maintained.
-
-Thu Sep 10 10:55:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (backref_error): yyerror does not understand formats.
-
-Tue Sep 8 18:05:33 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1c5 released.
-
-Tue Sep 8 10:03:39 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_each_line): wrong line splitting with newline at
- top of the string.
-
- * string.c: non bang methods return copied string.
-
- * eval.c (f_END): needed to initialize frame->argc;
-
-Fri Sep 4 11:27:40 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (bigadd): proper sign combination.
-
- * regex.c (re_search): wrong return value for \A.
-
-Thu Sep 3 14:08:14 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1c4 released.
-
-Tue Sep 1 10:47:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (slow_search): do not compare llen and blen. llen may
- be longer than blen, if little contains 0xff.
-
- * regex.c (mbctab_euc): set 0x8e as multibyte character.
-
- * string.c (str_inspect): mask character for octal output.
-
-Mon Aug 31 15:32:41 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_search): use calculated offset if exactn is the
- first opcode in the compiled regexp.
-
- * regex.c (bm_search): use Boyer-Moore search for simple search.
-
- * regex.c (must_instr): wrong length check if pattern includes
- byte escape by 0xff.
-
- * regex.c (re_compile_pattern): need not to check current_mbctype.
-
-Sat Aug 29 16:31:40 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_check_safe_str): avoid calling rb_id2name() in normal
- cases to speed-up.
-
- * eval.c (thread_raise): do not save context of terminated thread.
-
- * regex.c (re_compile_pattern): mask \nnn over 256.
-
-Sat Aug 29 02:09:46 1998 Koji Arai <JCA02266@nifty.ne.jp>
-
- * sprintf.c (f_sprintf): wrong buffer size check.
-
-Fri Aug 28 01:57:04 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): accepts (?ix-ix) and (?ix-ix:...).
-
-Fri Aug 28 12:25:33 1998 Hiroshi Igarashi <igarashi@ueda.info.waseda.ac.jp>
-
- * ruby.c (ruby_require_modules): load modules in appearing order.
-
-Fri Aug 28 01:57:04 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): accepts (?ix-ix) and (?ix-ix:...).
-
-Thu Aug 27 12:54:28 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1c3 released.
-
-Wed Aug 26 14:40:56 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): check whether ruby_class is properly set,
- before accessing it.
-
- * eval.c (rb_obj_instance_eval): ruby_class should be Qnil for
- special objects like Fixnums.
-
- * ext/tkutil/tkutil.c (Init_tkutil): removes calls to
- rb_yield_0(). used instance_eval() instead in the tk.rb.
-
-Wed Aug 26 11:47:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_match): pop non-greedy stack elements on success.
-
-Wed Aug 26 09:25:35 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ruby.h: add #define environ for cygwin32.
-
-Tue Aug 25 08:57:41 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (rb_ary_sort_bang): temporarily freeze sorting array.
-
-Mon Aug 24 18:46:44 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * dln.c (dln_find_1): path check was too strict.
-
-Mon Aug 24 15:28:11 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * parse.y (f_arglist): opt_nl added after f_args.
-
-Fri Aug 21 01:06:01 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/socket.c: grand renaming on socket.c.
-
- * ext/socket/socket.c (inet_aton): supply inet_aton for those
- systems that do not have it.
-
- * ext/socket/socket.c (setipaddr): use inet_aton instead of
- inet_addr.
-
- * ext/socket/socket.c (tcp_s_gethostbyname): new method: works
- like Socket.gethostbyname but returning array contains ip-addrs
- as octet decimal string format like "127.0.0.1".
-
- * ext/socket/socket.c (mkhostent): return format changed to
- [host, aliases, type, ipaddr..] as documented.
-
-Wed Aug 19 00:31:09 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_ctl): forgot to place TRAP_END at right position.
-
-Fri Aug 14 11:01:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (call_trace_func): save __FILE__, __LINE__ before
- executing trace_func, since trace function should not corrupt
- line number information.
-
-Thu Aug 13 15:09:02 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (ary_s_new): was marking unallocated region on GC.
-
-Tue Aug 11 11:57:35 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1c2 released.
-
-Mon Aug 10 14:05:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * process.c (f_system): removed fflush(stdin).
-
-Fri Aug 7 17:44:44 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * error.c (err_snprintf): replace sprintf for fixed sized buffer,
- with snprintf to avoid buffer over-run. For systems which does
- dot provide snprintf, missing/snprintf.c added.
-
-Wed Aug 5 00:47:35 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (rb_reg_search): recycle match object.
-
-Mon Aug 3 09:17:55 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (rb_str_gsub_bang): do not allocate temporary string.
-
- * string.c (rb_str_sub_bang): use inline replace.
-
-Wed Jul 29 00:36:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (hash_s_new): the default value can be specified.
-
- * hash.c (hash_default): method to set the default value.
-
- * hash.c (hash_aref): now returns the default value.
-
-Tue Jul 28 13:03:25 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (ary_s_new): argument to specify initial value is added.
-
- * array.c (ary_s_new): specifies size, not capacity.
-
-Mon Jul 27 12:39:34 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_replace): zero fill for expansion gap.
-
- * regex.c (mbctab_euc): set flags on for 0xA1-0xFE. suggested by
- <inaba@st.rim.or.jp>.
-
- * string.c (str_inspect): consider current_mbctype.
-
-Sun Jul 26 15:37:11 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * array.c (ary_s_new): Array.new(1<<30) dumps core.
-
-Fri Jul 24 13:40:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1c1 released.
-
-Fri Jul 24 02:10:22 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * marshal.c (r_bytes2): allocated buffer size was too short.
-
- * marshal.c (w_object): saves all options, not only casefold flag.
-
- * re.c (reg_clone): now copies options properly.
-
- * re.c (reg_get_kcode): code number was wrong.
-
-Thu Jul 23 13:11:32 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_attr): argument should be symbol or string.
-
-Wed Jul 22 11:59:34 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (calculate_must_string): wrong offset added.
-
-Wed Jul 22 11:59:59 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * st.c (rehash): still had a GC problem. fixed.
-
-Tue Jul 21 13:19:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (gc_mark_threads): crashed on GC before thread allocation.
-
- * st.c (rehash): GC during rehash caused SEGV.
-
-Tue Jul 21 01:25:10 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sprintf.c (f_sprintf): integer formatter totally re-written.
-
- * sprintf.c (remove_sign_bits): support uppercase hexadecimal.
-
-Sat Jul 18 00:14:13 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sprintf.c (f_sprintf): proper sign position for %X and %O.
-
-Fri Jul 17 14:10:20 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1c0 released.
-
-Fri Jul 17 08:01:49 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * process.c (f_exec): Check_SafeStr() added.
-
- * process.c (f_system): Check_SafeStr() moved before fork().
-
-Thu Jul 16 22:58:48 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (scan_once): substrings to the block should not be
- tainted. use reg_nth_match(), not str_substr().
-
- * string.c (str_substr): needed to transfer taint.
-
-Thu Jul 16 16:15:57 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * gc.c (xmalloc): object allocation count added to GC trigger.
-
- * eval.c (thread_save_context): avoid marking uninitialized stack
- in thread_mark. GC may be triggered by REALLOC_N().
-
-Wed Jul 15 15:11:57 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_31.
-
-Wed Jul 15 15:05:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (thread_create): exit() and abort() in threads now
- forwarded to main_thread.
-
-Tue Jul 14 14:03:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (obj_instance_variables): list names that is not
- instance variables.
-
- * gc.c (GC_MALLOC_LIMIT): choose smaller limit value.
-
-Mon Jul 13 12:39:38 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (str2cstr): should not return NULL.
-
-Fri Jul 10 11:51:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (gettable): needed to add dyna_in_block() check.
-
-Thu Jul 9 17:38:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_30.
-
-Thu Jul 9 16:01:48 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sprintf.c (fmt_setup): format specifier for long needed.
-
- * sprintf.c (f_sprintf): ditto.
-
- * numeric.c (fix2str): ditto.
-
- * eval.c (thread_create): no more ITIMER_REAL.
-
- * eval.c (thread_create): thread finalization needed before
- aborting thread if thread_abort is set.
-
-Wed Jul 8 18:17:33 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (big_pow): abandon power by bignum (too big).
-
-Tue Jul 7 13:58:43 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_catch): add C level catch/throw feature.
-
-Mon Jul 6 15:18:09 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (arg): proper return values for `||=' and `&&='.
-
-Fri Jul 3 16:05:11 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_29.
-
-Fri Jul 3 11:20:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * marshal.c (r_byte): byte should not extend sign bit.
-
- * numeric.c (fix_mul): use FIX2LONG() instead of FIX2INT() for
- 64bit architectures.
-
- * marshal.c (r_bytes): remove weird casting between pointer and int.
-
- * process.c (proc_setsid): new method Process#setsid().
-
-Thu Jul 2 12:49:21 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * marshal.c (w_object): remove `write_bignum' label for 64bit
- architectures.
-
- * marshal.c (r_bytes): needs int, not long.
-
-Wed Jul 1 14:21:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * numeric.c (flo_plus): should not allow addition with strings.
-
-Wed Jul 1 13:09:01 1998 Keiju ISHITSUKA <keiju@rational.com>
-
- * numeric.c (num_uminus): wrong coerce direction.
-
-Tue Jun 30 10:13:44 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (f_p): accepts arbitrary number of arguments.
-
- * eval.c (rb_yield_0): there's some case that iterator_p() returns
- true even if the_block was not set. check added.
-
-Tue Jun 30 01:05:20 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (BEGIN_CALLARGS): adjust the_block before evaluating the
- receiver's value and the arguments.
-
-Fri Jun 26 18:02:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_28.
-
-Fri Jun 26 11:01:26 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * string.c (str_aset_method): needed to convert to string.
-
-Thu Jun 25 02:05:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_search): optimize for `.*' at beginning of the
- pattern.
-
- * regex.c (re_search): optimize for character class repeat at
- beginning of the pattern.
-
- * regex.c (re_compile_pattern): detect optimization potential for
- the compiled patterns.
-
-Thu Jun 25 00:02:26 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * re.c (reg_s_new): flag value was wrong.
-
-Wed Jun 24 23:45:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_search): wrong anchor handling for reverse search.
-
-Wed Jun 24 02:18:57 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (mlhs): `((a,b)),c = [[1,2]],3' assigns a=1,b=2,c=3.
-
-Tue Jun 23 11:46:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): `&&=' and `||=' added.
-
-Sat Jun 20 02:53:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (assignable): nesting local variables should have higher
- priority than normal local variables for assignment too.
-
-Fri Jun 19 18:28:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_27.
-
-Fri Jun 19 14:34:49 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (assign): support hack for nested multiple assignment.
-
- * parse.y (mlhs): nested multiple assignment.
-
- * eval.c (rb_eval): in-block variables now honors static scope.
-
- * configure.in: RSHIFT check moved to configure.
-
-Thu Jun 18 16:46:04 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_26.
-
-Thu Jun 18 13:37:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * file.c (file_s_ftype): uses lstat(2) instead of stat(2).
-
- * dir.c (dir_s_glob): there can be buffer overrun, check added.
-
- * eval.c (f_binding): handles in-block variables declared after
- binding's generation.
-
- * numeric.c (flo_floor): floor, ceil, round added to Float.
-
-Wed Jun 17 11:20:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (gettable): nesting local variables should have higher
- priority than normal local variables.
-
-Tue Jun 16 12:30:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (str2inum): handles `+ddd'.
-
- * struct.c (make_struct): name parameter can be nil for unnamed
- structures.
-
-Mon Jun 15 16:30:10 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (class_s_inherited): prohibiting to make subclass of
- class Class.
-
- * object.c (module_s_new): support for making subclass of Module.
-
- * parse.y (yycompile): clear eval_tree before compiling.
-
-Fri Jun 12 17:58:18 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (eval): write back the_dyna_var into the block.
-
-Thu Jun 11 18:19:18 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_25.
-
- * eval.c (dvar_add_compiling): register dyna_var at compile time.
-
- * regex.c (re_compile_pattern): RE_DUP_MAX iteration is too big.
-
-Wed Jun 10 15:12:04 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_eof): do not block other threads.
-
- * signal.c (trap): reserve SIGALRM for thread.
-
- * eval.c (thread_create): use ITIMER_REAL also to avoid system
- call blocking.
-
- * io.c (f_syscall): add TRAP_BEG, TRAP_END around system calls.
-
- * io.c (io_ctl): add TRAP_BEG, TRAP_END around system calls.
-
- * enum.c (enum_collect): did not collect false values.
-
- * array.c (ary_new2): forgot to initialize capa field.
-
-Tue Jun 9 18:36:15 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * string.c (str_split_method): split dumped core for "\xff".
-
-Tue Jun 9 16:22:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_24.
-
-Tue Jun 9 16:04:07 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ext/kconv/kconv.c (kconv_guess): more precise decision for EUC,
- using jless algorithm (3 sequential EUC hiragana characters).
-
-Tue Jun 9 15:12:44 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/kconv/kconv.c (kconv_guess): wrong guess for EUC as SJIS in
- some cases (0xe0 - 0xef).
-
- * gc.c (xmalloc): insert size check for big (negative in signed)
- allocation size.
-
-Tue Jun 9 02:54:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * lib/parsedate.rb: wday moved to the last in the return values.
-
-Mon Jun 8 10:40:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_split_method): split dumped core for "\0".
-
-Sat Jun 6 22:50:52 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (calculate_must_string): wrong condition for
- {start,stop}_nowidth.
-
- * regex.c (re_match): various features imported from GNU regex.c
- 0.12, such as nested grouping, avoiding infinite loop with empty
- match, etc.
-
- * regex.c (register_info_type): now use union.
-
- * regex.c (re_search): more precise anchor(^) check.
-
-Wed Jun 3 18:07:54 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (reg_raise): check rb_in_compile, not rb_in_eval.
-
-Mon Jun 1 05:26:06 1998 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * string.c (trnext): casting to signed char* needed.
-
-Tue Jun 2 16:00:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/socket.c (udp_addrsetup): error check enhanced.
-
- * ext/socket/socket.c (sock_s_getservbyaname): use strtoul(), if
- possible.
-
-Sat May 30 07:10:02 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (reg_prepare_re): no more needless regular expression
- recompile on casefold conditions.
-
-Thu May 28 18:02:55 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (nil_plus): no more `+' method for nil.
-
-Wed May 27 17:33:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (hash_fetch): new method.
-
- * regex.c (re_search): check whether translate table is set.
-
-Tue May 26 11:39:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_23.
-
- * parse.y (yylex): no UPLUS/UMINUS for 1st argument if
- parenthesises are omitted.
-
-Tue May 26 01:09:55 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): (?XI) for turns off the
- corresponding option.
-
-Mon May 25 12:38:56 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): inline i option (?i).
-
- * regex.c (re_compile_pattern): inline x option (?x).
-
- * regex.c (re_compile_pattern): x option for regexp.
-
- * dir.c (dir_s_open): returns block's evaluated value.
-
- * io.c (f_open): returns block's evaluated value.
-
- * ext/curses/curses.c (curses_addstr): nil argument caused SEGV.
-
-Fri May 22 11:52:45 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): push mark on (?:), so that
- laststart check for {a,b} can be done.
-
-Thu May 21 17:31:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_match): wrong match (too non-greedy) for `{a,b}?'.
-
- * io.c (io_lineno): new method IO#lineno, IO#lineno=.
-
-Wed May 20 06:04:43 1998 MAEDA shugo <shugo@aianet.ne.jp>
-
- * BeOS patch.
-
-Wed May 20 16:32:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (BIGDN): use RSHIFT(), instead of mere `>>'.
-
-Tue May 19 16:36:26 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_22.
-
-Tue May 19 16:31:57 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (assignable): specification changed for in-block
- variable definition.
-
- * eval.c (dyna_var_asgn): error in in-block variables' compile
- time definition.
-
- * parse.y (str_extend): wrong nesting detection.
-
-Tue May 19 09:47:55 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * numeric.c (num2int): re-defined (extensions may use this).
-
-Mon May 18 16:40:50 1998 MAEDA shugo <shugo@aianet.ne.jp>
-
- * error.c (get_syserr): BeOS support.
-
- * configure.in: modified for BeOS.
-
- * string.c (str_dump): do not call isascii().
-
- * sprintf.c (remove_sign_bits): forgot to initialize end pointer.
-
- * glob.c: #include <alloca.h> added.
-
-Mon May 18 14:52:21 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_21.
-
-Mon May 18 03:27:57 1998 MAEDA shugo <shugo@aianet.ne.jp>
-
- * file.c (file_s_expand_path): optional second argument
- `default_directory' added.
-
-Sat May 16 22:06:52 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * error.c (RAISE_ERROR): wrong error message
-
-Fri May 15 14:43:25 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_20.
-
-Thu May 14 14:44:21 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * sun4 cc patches for intern.h and regex.h.
-
-Thu May 14 14:03:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * random.c (RANDOM_MAX): guessing proper maximum value for random
- numbers.
-
- * random.c (f_rand): use drand48 if possible.
-
-Wed May 13 19:05:20 1998 MAEDA shugo <shugo@aianet.ne.jp>
-
- * BeOS patches for io.c, error.c and config.guess.
-
-Wed May 13 14:56:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_19.
-
- * most of the Mac and BeOS patches merged, except path separators.
-
- * error.c (err_append): generated SyntaxError was String.
-
- * ruby.h: xxx2INT, xxx2UINT checks values as int, not long.
-
- * ruby.h: remove typedef's. INT, UINT, UCHAR, USHORT.
-
-Tue May 12 17:38:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_18.
-
-Tue May 12 11:38:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * error.c (syserr_errno): returns errno of the SystemCallError.
-
- * error.c (rb_sys_fail): saves errno in the Exception.
-
- * error.c (set_syserr): no need to protect syserr_list.
-
- * error.c (rb_sys_fail): no more bufsize limit.
-
- * error.c (set_syserr): integer value of errno can be accessed by
- Errno::EXXX::Errno.
-
-Sun May 10 03:10:33 1998 WATANABE Tetsuya <tetsu@jpn.hp.com>
-
- * io.c (io_tell etc.): moved from File class to IO class.
-
-Fri May 8 12:26:37 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * pack.c (pack_unpack): should be unsigned int (was signed int).
-
-Thu May 7 16:34:10 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * pack.c (pack_pack): `V', `N' uses newly created NUM2UINT().
-
- * ruby.h (NUM2UINT): new macro.
-
- * bignum.c (big2uint): try to convert bignum into UINT.
-
- * re.c (reg_match): needed to return false for match with nil.
-
- * gc.c (obj_free): wrong condition to free string.
-
-Wed May 6 21:08:08 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ruby.c (ruby_process_options): modified for DJGPP.
-
-Wed May 6 15:48:03 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_17.
-
-Wed May 6 01:37:39 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c: remove global variable `errat'.
-
- * eval.c (rb_longjmp): embed error position information in the
- exception object.
-
-Sat May 2 12:20:02 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (reg_search): supports reverse search.
-
- * string.c (str_index_method): does update $~ etc.
-
- * eval.c (f_load): needed to clear the_dyna_vars.
-
- * eval.c (dyna_var_asgn): do not push dyna_var, which is id == 0.
-
- * error.c (Init_Exception): NotImplementError is no longer
- StandardError, which is not handled by default rescue.
-
-Fri May 1 00:35:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (proc_options): `-d' turns on verbose flag too.
-
- * error.c (exception): last argument may be the superclass of the
- defining exception(s).
-
- * io.c (Init_IO): EOFError is now subclass of the IOError.
-
- * io.c (Init_IO): forgot to define IOError.
-
- * error.c (Init_Exception): old Exception class renamed to
- StandardError. Exception now replaces old GlobalExit.
-
- * error.c (Init_Exception): Exception is now the root of the
- Global Exits. There's no longer GlobalExit class.
-
- * util.c (ruby_mktemp): check TMP, TMPDIR first.
-
-Thu Apr 30 01:08:35 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * lib/tk.rb: call 'unknown', if proc not defined.
-
- * eval.c (handle_rescue): default rescue handles `Exceptional' not
- only the instance of the `Exception's.
-
- * eval.c (f_raise): exception can be any object.
-
- * time.c (time_gm_or_local): call time_gmtime or time_localtime.
-
- * eval.c (f_raise): raises TypeError if the class which is not a
- subclass of String is specified (checked in exc_new()).
-
- * error.c (exc_new): need to check whether invalid class (not a
- subclass of String) is specified.
-
-Wed Apr 29 21:05:44 1998 WATANABE Hirofumi <eban@os.rim.or.jp>
-
- * ruby.c (proc_options): option '-e' via tempfile.
-
-Tue Apr 28 15:27:58 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_16.
-
-Tue Apr 28 00:07:38 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (obj_is_proc): type check predicate.
-
- * eval.c (obj_is_block): ditto.
-
-Mon Apr 27 16:59:17 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/gtk/gtk.c (Init_gtk): use timeout, not idle to avoid
- consuming CPU too much.
-
- * lib/tk.rb: use tcltklib#_invoke instead of `_eval'.
-
-Mon Apr 27 16:59:17 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (ary_sort): use dup, not clone.
-
-Mon Apr 27 13:46:27 1998 Tadahiro Maebashi <maebashi@iij.ad.jp>
-
- * ext/tcltklib/tcltklib.c (ip_invoke): invoke tcl command
- directly. need not worry about escaping tcl characters.
-
-Mon Apr 27 12:04:43 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * random.c (f_rand): do not call srand() implicitly.
-
-Fri Apr 24 14:35:45 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_15.
-
- * parse.y (assignable): dyna_var_asgn actually defines nested
- local variables in outer context.
-
- * random.c (f_rand): call srand(), if it has not called yet.
-
- * random.c (f_srand): use tv_usec as the default seed.
-
- * eval.c (rb_eval): values of nested local variables should be
- independent.
-
- * eval.c (rb_yield_0): local variables wrong nested conditions.
-
-Wed Apr 22 23:27:17 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (select_get_io): get IO object by `to_io'.
-
- * io.c (io_to_io): method to retrieve IO object, from delegating
- object for example.
-
-Wed Apr 22 16:52:37 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_14.
-
- * string.c (str_modify): check for embedded pointer reference.
-
- * gc.c (obj_free): ditto.
-
- * pack.c (pack_pack): p/P template to embed pointers.
-
-Wed Apr 22 00:07:10 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * array.c (ary_rindex): embarrassing typo.
-
-Tue Apr 21 12:31:48 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_13.
-
- * configure.in (RUBY_LIB): supports --program-{prefix,suffix}.
-
- * array.c (ary_rindex): new method.
-
- * io.c (io_binmode): should return self.
-
-Tue Apr 21 08:23:04 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * parse.y (here_document): calling parse_string with wrong
- arguments.
-
- * struct.c (struct_aset): problem member assignment with name.
-
-Mon Apr 20 14:47:49 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_12.
-
- * time.c (time_arg): args may be string (support for reduced
- implicit type conversion).
-
- * lib/base64.rb: changed to use pack/unpack with `m' template.
-
-Mon Apr 20 06:23:20 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (mod_remove_const): new method.
-
-Sat Apr 18 03:53:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (hash_each_with_index): removed. use Enumerable's
- each_with_index instead.
-
- * class.c (rb_include_module): check for super modules, since
- module's included modules may be changed.
-
-Fri Apr 17 21:50:47 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * marshal.c (r_long): r_byte() may return signed byte.
-
-Fri Apr 17 11:58:30 1998 NAGAI Hidetoshi <nagai@dumbo.ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c (lib_mainloop): thread and interrupt check.
-
-Fri Apr 17 11:06:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (find_file): try to fopen() to check whether file exists.
-
- * ruby.c (load_file): ditto.
-
- * struct.c (struct_aset): struct member can be set by member name.
-
-Fri Apr 17 00:47:19 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ext/extmk.rb.in: added m68k-human support
-
- * file.c (LOCK_SH): defines moved.
-
- * array.c (ary_flatten_bang): simplified loop.
-
-Thu Apr 16 16:52:01 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_11.
-
- * lib/tk.rb: thread support (experimental - maybe slow).
-
- * eval.c (rb_longjmp): trace event on exception in raising
- context, just before raising exception.
-
- * struct.c (struct_s_members): forgot to check singletons.
-
- * struct.c (struct_aref): members can be accessed by names too.
-
- * array.c (ary_flatten): new method.
-
- * eval.c (rb_longjmp): prints exception information with `-d'.
-
- * object.c (any_to_s): remove class name restriction.
-
-Thu Apr 16 01:38:02 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * file.c (thread_flock): do not block other threads.
-
- * eval.c (thread_trap_eval): signals are now delivered to the
- current thread again. In case that the current thread is dead,
- signals are forwarded to the main thread.
-
- * string.c (str_new4): need not to duplicate frozen strings.
-
-Wed Apr 15 08:33:47 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * struct.c (struct_inspect): remove restriction for struct names.
-
-Wed Apr 15 02:55:02 1998 Kazuya 'Sharl' Masuda <sharl@www.ufo.co.jp>
-
- * x68 patches to config.sub, ext/extmk.rb.in
-
-Wed Apr 15 01:22:56 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_dup_frozen): do not duplicate frozen strings.
-
- * parse.y (yylex): allow nested parenthesises.
-
- * io.c (obj_displayln): prints newline after `display'ing the
- receiver.
-
- * io.c (io_puts): avoid generating "\n" each time. use RS_default
- instead.
-
- * io.c (f_p): ditto.
-
-Tue Apr 14 22:18:17 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * struct.c (struct_aref): should not subtract negative index.
-
-Tue Apr 14 11:34:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_10.
-
- * parse.y: token names prefixed by `t'.
-
- * struct.c (struct_s_def): supports subclassing of Struct.
-
- * io.c (io_s_new): supports subclassing of IO.
-
-Mon Apr 13 11:07:39 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (f_binding): need to restore method name.
-
- * eval.c (rb_call0): raises SystemStackError, not Fatal.
-
- * io.c (obj_display): same as `print self'.
-
- * io.c (f_p): can now be called in the method form.
-
- * re.c (reg_regsub): needed to be mbchar aware.
-
-Mon Apr 13 13:18:32 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (thread_trap_eval): all signals delivered to main_thread.
-
-Mon Apr 13 12:47:03 1998 TAKAHASHI Masayoshi <maki@inac.co.jp>
-
- * re.c (kcode_set_option): did not set SJIS on SJIS condition.
-
-Sun Apr 12 22:14:07 1998 Kazunori NISHI <kazunori@swlab.csce.kyushu-u.ac.jp>
-
- * array.c (ary_uniq_bang): should be `==', not `='. embarrassing.
-
-Sat Apr 11 02:13:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (ary_subseq): SEGVed for `[][1,1]'.
-
-Fri Apr 10 21:29:06 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * array.c (ary_subseq): add check for beg larger than array length.
-
-Wed Apr 8 17:24:11 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
-
- * dir.c (dir_s_open): can be called with block (like IO#open).
-
- * dir.c (dir_s_chdir): print directory path on error.
-
- * dir.c (dir_s_chroot): ditto
-
- * dir.c (Init_Dir): needed to override `new'.
-
-Thu Apr 9 18:24:58 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_09.
-
- * string.c (str_cmp): do not depend on sentinel at the end of the
- strings.
-
- * string.c (str_chomp_bang): forgot to set the sentinel.
-
-Wed Apr 8 00:59:13 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * bignum.c (big2int): converted int may be too big to fit in
- signed int.
-
- * parse.y (arg): `foo += 1' should not cause an error.
-
- * variable.c (rb_const_defined): returned false even if the
- constant is defined at the top level.
-
- * eval.c (f_local_variables): dyna_var->id may be null. should
- have checked before calling str_new2().
-
-Tue Apr 7 01:15:15 1998 Kaneko Naoshi <wbs01621@mail.wbs.or.jp>
-
- * re.c (reg_regsub): need to check string boundary.
-
-Tue Apr 7 19:19:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_cmp): returns either 1, 0, -1.
-
- * array.c (ary_cmp): should check array length, too
-
-Tue Apr 7 18:50:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_08.
-
-Tue Apr 7 18:31:27 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * instruby.rb (mandir): dll installation for cygwin32
-
-Tue Apr 7 01:16:45 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * config.sub (maybe_os): TOWNS support?
-
- * config.guess: too strict check for libc versions on linuxes.
-
- * experimental release 1.1b9_07.
-
- * array.c (ary_cmp): compare each element using `<=>'.
-
- * hash.c (hash_each_with_index): yields [value, key] pair.
-
- * class.c (class_protected_instance_methods): list protected
- method names.
-
- * class.c (ins_methods_i): exclude protected methods.
-
- * eval.c (PUSH_BLOCK): dynamic variables can be accessed from
- eval() with bindings.
-
-Mon Apr 6 14:49:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (thread_yield): must return evaluated value.
-
-Fri Apr 3 13:07:29 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (thread_schedule): context switch bypassed on wrong
- conditions.
-
- * variable.c (rb_name_class): set classname by id before String
- class is initialized (1.0 behavior restored).
-
-Fri Apr 3 11:25:45 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * numeric.c (num2int): no implicit conversion from string.
-
- * numeric.c (num2int): check whether `to_i' returns an Integer.
-
- * numeric.c (num_zero_p): new method.
-
- * numeric.c (num_nonzero_p): new method. returns the receiver if
- it's not zero.
-
- * eval.c (obj_instance_eval): the_class should be the object's
- singleton class.
-
- * error.c (exc_s_new): message is converted into a string.
-
-Thu Apr 2 18:31:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (obj_call_init): every object call `initialize'.
-
-Wed Apr 1 08:51:53 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * parse.y (stmt): UNTIL_MOD should be for stmt, not only for expr.
-
-Wed Apr 1 01:20:31 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (true_and): boolean operators &, | and ^.
-
-Tue Mar 31 13:23:58 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (ary_compact_bang): returns nil, if it does not modify
- the array like String's bang methods.
-
- * array.c (ary_uniq_bang): new method to remove duplicate items.
-
- * eval.c (bind_s_new): new method.
-
- * numeric.c (num2int): raise exception if Fixnums too big to
- convert into `int' in case that sizeof(int) < sizeof(INT).
-
- * string.c (str_center): SEGV on negative width.
-
- * eval.c (eval): forgot to set sourcefile.
-
-Mon Mar 30 11:12:29 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * file.c (f_test): raises exception for unknown command.
-
- * eval.c (Init_eval): `class_eval': alias to the module_eval.
-
-Mon Mar 30 18:50:42 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * string.c (str_capitalize_bang): did not check string modification.
-
- * string.c (str_delete_bang): wrong conversion.
-
- * string.c (str_intern): typo in error message.
-
-Mon Mar 30 01:44:13 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (obj_instance_eval): accepts block as evaluation body.
- No compilation needed each time.
-
- * eval.c (mod_module_eval): ditto
-
- * file.c (file_s_umask): umask did not return old values, if no
- argument given.
-
-Sun Mar 29 00:54:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (f_throw): nil returned always.
-
-Sat Mar 28 20:40:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_06.
-
-Sat Mar 28 16:07:11 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * io.c (io_closed): should not cause exception for closed IO.
-
- * string.c (str_tr): returned nil for success.
-
-Sat Mar 28 00:47:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (f_local_variables): new method to return an array of
- local variable names.
-
- * variable.c (obj_instance_variables): now returns an array of
- variable names, as described in the reference.
-
- * eval.c (rb_attr): honors default method visibility of the
- current scope.
-
-Fri Mar 27 13:49:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_05.
-
- * ruby.c (ruby_prog_init): `site_ruby' added to load_path.
-
- * ruby.c (ruby_prog_init): load-path order changed. Paths in
- the RUBYLIB environment variable comes first in non-tainted
- mode.
-
-Thu Mar 26 11:51:09 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_call): new feature: `protected' methods.
-
- * string.c (str_dump): new method.
-
- * eval.c (block_pass): block argument can be nil, which means no
- block is supplied for the method.
-
-Wed Mar 25 21:20:13 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * string.c (str_reverse_bang): string copied to wrong place.
-
-Wed Mar 25 08:12:07 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * numeric.c (flo_modulo): caused SEGV if left operand is not a
- float value.
-
- * eval.c (f_eval): optional third and fourth argument to specify
- file-name and line-number.
-
- * eval.c (eval): file-name and line-number set properly.
-
- * parse.y (assign_in_cond): literal assignment is now warning, not
- compile error.
-
- * error.c (Warn): Warn() always print message, OTOH Waring()
- prints when verbose flag is set.
-
-Tue Mar 24 12:50:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (ruby_prog_init): `.' should come last in the load-path.
-
- * eval.c (Init_eval): `__send__', alias for `send'.
-
-Mon Mar 23 12:44:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_chomp_bang): now takes `rs' as an argument.
-
- * eval.c (thread_free): main_thread should not be freed.
-
-Fri Mar 20 16:40:34 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_chomp_bang): chomp! (and other ! methods) returns
- nil if it does not modify the string.
-
- * string.c (str_sub_iter_s): should check last pattern since it
- may be matched to null.
-
-Thu Mar 19 13:48:55 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_04.
-
- * parse.y (yylex): `10e0.9' should cause syntax error.
-
-Wed Mar 18 17:46:31 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (load_file): new file object constant DATA. Only
- available for the script from the file.
-
- * regex.c (re_match): forwarding failure point popped too much.
-
-Tue Mar 17 18:23:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * math.c (math_frexp): newly added.
-
- * math.c (math_ldexp): ditto.
-
- * bignum.c (bigdivmod): calculates modulo.
-
- * numeric.c (fix_remainder): returns reminder, formerly introduced
- as modulo.
-
- * numeric.c (fix_modulo): calculates proper `modulo'.
-
- * bignum.c (bigdivmod): wrong sign for reminder.
-
-Mon Mar 16 17:07:28 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_03.
-
-Mon Mar 16 16:33:53 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * io.c (pipe_finalize): needed to add pipe_finalize to pipes on
- cygwin32.
-
-Mon Mar 16 14:11:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * class.c (ins_methods_i): needed to consider NOEX_UNDEF.
-
-Mon Mar 16 13:23:53 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * io.c (io_check_closed): check for `fptr->f2 == NULL'.
-
- * io.c (io_fptr_close): ditto.
-
-Mon Mar 16 11:49:25 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (pipe_atexit): free()ing referencing pipe_list.
-
- * range.c (range_length): returns zero, if the first is greater
- than the last.
-
- * signal.c (trap_restore_mask): restore signal mask before raising
- exceptions and throws.
-
-Fri Mar 13 13:49:24 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_02.
-
- * object.c (mod_clone): need to dups constants and instance
- variables.
-
- * eval.c (rb_eval): forgot to initialize body for NODE_DEFS.
-
- * eval.c (rb_eval): retrieve self from calling frame, since self
- changes sometimes.
-
- * env.h (FRAME): need to save self in the calling frame.
-
- * io.c (f_gets_method): rs should be initialized by RS.
-
-Thu Mar 12 15:33:57 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * experimental release 1.1b9_01.
-
- * range.c (range_s_new): check values by `first <= last'.
-
- * parse.y (lastline_set): fixed offset for $_ and $~ in the local
- variable space.
-
-Wed Mar 11 02:14:17 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_gets): handle normal case specially for speed.
-
- * eval.c (rb_disable_super): function to disable superclass's
- method explicitly.
-
- * eval.c (rb_eval): inherits previous method definition's
- NOEX_UNDEF-ness, if exists.
-
- * class.c (rb_define_method): disables superclass's overriding
- method by default.
-
-Wed Mar 11 01:40:48 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
-
- * numeric.c (flo_gt,etc.): do not depend on `<=>', to handle NaN.
-
-Tue Mar 10 00:03:24 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (load_file): understands multiple options in #! line.
-
- * regex.c (re_compile_pattern): support for [:alpha:] etc.
-
-Mon Mar 9 16:53:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.h (GetOpenFile): embed io_check_closed in GetOpenFile.
-
- * sprintf.c (f_sprintf): zero padding failed for negative
- integers.
-
- * sprintf.c (remove_sign_bits): failed to remove some bits.
-
-Sat Mar 7 21:51:46 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
-
- * class.c (ins_methods_i): body may be NULL for some case.
-
-Fri Mar 6 17:23:07 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (mbcinit): table driven mbchar detection.
-
- * object.c (obj_alloc): check for allocating instance for the
- primitive classes (mostly perfect).
-
- * ext/curses/curses.c (curses_finalize): restore original state at
- interpreter termination.
-
- * ext/curses/curses.c (curses_addstr): forgot to check argument
- type (caused SEGV). now uses STR2CSTR() macro.
-
-Thu Mar 5 13:47:39 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (block_pass): accepts method object as block args.
-
- * eval.c (f_missing): use any_to_s() for stringify.
-
-Wed Mar 4 01:39:52 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (block_arg): new syntax - block argument in the
- calling arglist.
-
- * eval.c (rb_call): no module search. simplified a lot.
-
- * eval.c (rb_eval): block arg support.
-
- * parse.y (f_block_arg): new syntax - block argument in the
- formal arglist.
-
-Tue Mar 3 14:20:15 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (obj_method): returns bound method object.
-
- * eval.c (rb_call): argument check for empty methods.
-
- * ruby.h (NUM2CHR): new macro, originally from curses module.
-
-Tue Mar 3 13:03:35 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
-
- * io.c (io_putc): new method.
-
-Tue Mar 3 11:21:28 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_inspect): more strict charcode detection.
-
- * eval.c (thread_stop): stopping only thread raises ThreadError
- exception.
-
-Tue Mar 3 08:04:56 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
-
- * struct.c (struct_alloc): incomplete struct initialization made
- GC to access unallocated addresses.
-
-Mon Mar 2 16:28:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (thread_stop_method): remove Thread#stop.
-
-Fri Feb 27 18:16:26 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1b9 released.
-
-Fri Feb 27 09:36:35 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (hash_delete_nil): needed to compare value to nil, since
- nil is the valid key for hashes.
-
- * hash.c (hash_foreach_iter): rehashing causes IndexError.
-
- * hash.c (hash_foreach_iter): rehash check by pointer comparison.
-
-Thu Feb 26 17:22:13 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (fname): convert reswords into symbols.
-
- * parse.y (reswords): reserved words are now embedded in the
- syntax (sigh).
-
- * parse.y: now reserved words can be method names safely.
-
-Wed Feb 25 15:50:07 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (mod_module_eval): clear the_scope's PRIVATE flag before
- calling eval().
-
- * gc.c (gc_call_finalizer_at_exit): run finalizers before any data
- object being freed.
-
- * eval.c (rb_eval): needed to keep prot_tag->retval before
- evaluating the ensure clause.
-
-Tue Feb 24 11:16:32 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): reserved words can be appear as method names at
- right after 'def' and `.'(dot), like foo.next.
-
- * eval.c (return_check): checks for return out of thread (formerly
- done in return_value).
-
- * eval.c (POP_TAG): copy retval to outer level.
-
- * eval.c (return_value): just set retval, no check, no unwinding.
-
- * parse.y (nextc): line continuation by backslash at end of line.
-
- * regex.c (re_compile_pattern): forgot to clear pending_exact on
- closing parentheses.
-
- * parse.y (assignable): should not assign dyna_var to true, if it
- is already defined.
-
-Mon Feb 23 14:35:03 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (obj_is_kind_of): no longer accepts true/false/nil.
-
- * object.c ({true,false,nil}_to_i): can be converted into integers.
-
-Mon Feb 23 12:11:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (reg_s_quote): needed to be mbchar aware.
-
- * eval.c (proc_s_new): wrong iter mark.
-
-Sat Feb 21 22:59:30 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
-
- * io.c (f_syscall): no argument check.
-
-Fri Feb 20 10:17:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1b8 released.
-
- * ext/kconv/kconv.c (kconv_kconv): default output code now be
- determined according to the value of $KCODE.
-
- * re.c (rb_get_kcode): can retrieve $KCODE from C code.
-
- * parse.y (stmt): if/unless modifiers returns nil, if condition is
- not established.
-
-Thu Feb 19 11:06:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/kconv/kconv.c (kconv_kconv): charcode can be specified by
- code name (JIS, SJIS, EUC like value of $KCODE).
-
- * regex.c (re_compile_pattern): forgot to fixup_jump for (?:..).
-
- * regex.c (re_compile_pattern): needed to clear pending_exact on
- non-registering grouping (?:...).
-
-Wed Feb 18 19:54:21 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (here_document): needed to set lex_state to EXPR_END.
-
-Wed Feb 18 18:45:10 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * patches for cygwin32 applied.
-
-Wed Feb 18 00:41:31 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_sub_s): needed to be mbchar aware to increment one
- character.
-
- * regex.c (re_match): \Z matches newline just before the end of
- the string.
-
-Tue Feb 17 00:04:32 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_arg): Time.gm and Time.local now understands
- Time#to_a format.
-
- * string.c (str_sub_s): replace happened twice for null pattern.
-
- * regex.c (re_search): null pattern should not match after newline
- at the end of string.
-
- * time.c (time_isdst): now returns boolean value.
-
- * error.c (rb_check_type): treat special constants in messages.
-
- * parse.y (yylex): new form `::Const' to see toplevel constants.
-
- * parse.y (cond): SEGV on `if ()'.
-
- * gc.c (obj_free): some data needed explicit free().
-
-Mon Feb 16 23:55:40 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (blk_free): release duplicated block informations.
-
- * eval.c (blk_copy_prev): duplicate outer block information into
- the heap, when proc/binding created.
-
-Mon Feb 16 14:38:25 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_mon): now 1 for January and so on.
-
- * time.c (time_year): year in 19xx (no + 1900 needed anymore).
-
-Mon Feb 16 13:28:33 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): need to fetch mbchar's second byte
- without translation.
-
-Mon Feb 16 12:29:27 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
-
- * eval.c (f_pass_block): pass iterator block to other method.
-
-Fri Feb 13 08:16:11 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (parse_regx): handle \s before read_escape().
-
- * parse.y (read_escape): `\s' in strings as space.
-
-Tue Feb 10 17:29:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1b7 released.
-
- * string.c (str_aset): string insertion by `str[n] = str2'.
-
- * string.c (str_oct): does recognize `0x'.
-
- * sprintf.c (f_sprintf): use base 10 for conversion from string to
- integer.
-
-Mon Feb 9 14:51:56 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * numeric.c (do_coerce): proper error message.
-
- * string.c (str_sum): bug - masked by wrong value. (sigh..)
-
-Sat Feb 7 15:11:14 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_empty): new method
-
-Fri Feb 6 01:42:15 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c (time_asctime): use asctime(3), not strftime(3).
-
-Thu Feb 5 18:58:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_fptr_close): do not free path on close().
-
- * array.c (ary_filter): new method.
-
- * enum.c (enum_each_with_index): new method.
-
-Thu Feb 5 14:10:35 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (primary): singleton class def can be appeared inside
- method bodies.
-
- * hash.c (hash_replace): replace content.
-
- * string.c (str_replace_method): replace content.
-
- * array.c (ary_replace_method): replace elements.
-
- * string.c (str_succ_bang): String#succ!
-
-Thu Feb 5 18:20:30 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * string.c (str_upcase_bang): multi byte character support.
-
-Wed Feb 4 13:55:26 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (ary_reverse): SEGV on empty array reverse.
-
-Tue Feb 3 12:24:07 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (match_to_a): non matching element should be nil.
-
- * ruby.c (ruby_load_script): load script after all initialization.
-
- * bignum.c (str2inum): need to interpret prefix `0' of `0x'.
-
-Tue Feb 3 10:00:18 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * numeric.c (fix_rshift): use `sizeof(INT)*8' instead of 32.
-
-Mon Feb 2 14:09:24 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (set_arg0): grab environment region too.
-
-Thu Jan 29 18:36:25 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * process.c (rb_proc_exec): check `sh' to be exist.
-
-Thu Jan 29 18:18:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_stdio_set): assignment to $stdin or $stdout does
- reopen() as well as $stderr.
-
-Thu Jan 29 14:18:40 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * class.c (mod_ancestors): should not include singleton classes.
-
- * object.c (obj_type): should not return internal class.
-
- * io.c (io_reopen): unwillingly closes stdio streams.
-
-Thu Jan 29 11:50:35 1998 Toshihiko SHIMOKAWA <toshi@csce.kyushu-u.ac.jp>
-
- * ext/socket/socket.c (udp_addrsetup): forgot to use htons().
-
-Tue Jan 27 23:15:24 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * keywords: __FILE__, __LINE__ are available again.
-
-Fri Jan 23 14:19:28 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1b6 released.
-
- * object.c (mod_to_s): need to duplicate classpath.
-
- * error.c (exc_inspect): need to duplicate classpath.
-
-Thu Jan 22 00:37:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.h (STR2CSTR): new macro to retrieve char*.
-
- * class.c (rb_define_method): `initialize' should always be
- private, even if it defined by C extensions.
-
- * eval.c (rb_eval): `initialize' should always be private.
-
-Thu Jan 22 16:21:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): some singleton class def cause SEGV.
-
- * eval.c (TMP_ALLOC): replace ALLOCA_N, where thread context
- switch may happen.
-
-Wed Jan 21 01:43:42 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (PUSH_FRAME): do not use ALLOCA_N(). crash on some
- platforms that use missing/alloca.c.
-
- * regex.c (re_compile_pattern): too many pops for non register
- subexpr.
-
- * parse.y (yylex): open parentheses after identifiers are argument
- list, even if whitespaces have seen.
-
-Tue Jan 20 15:19:59 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (terms): quoted word list by %w(a b c).
-
- * ext/tcltklib/extconf.rb: more accurate check for tcl/tk libs.
-
- * file.c (rb_stat): most of the FileTest methods (and function
- `test') accept File objects as the argument.
-
-Tue Jan 19 18:19:24 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ext/extmk.rb.in (install): there should be no newline after install:
-
- * re.c (MIN): renamed from min(). there's a local variable named
- min in the file, so that some cpp will raise an error.
-
-Mon Jan 19 16:30:05 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1b5 released.
-
- * process.c (rb_syswait): no exception raised.
-
-Fri Jan 16 00:43:43 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.h (CLONESETUP): copies its singleton classes too.
-
- * class.c (singleton_class_attached): saves binded object in the
- singleton classes.
-
- * eval.c (rb_eval): calls singleton_method_added even in the
- singleton class clauses.
-
-Fri Jan 15 23:22:43 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ruby.c (proc_options): -S does not recognize PATH.
-
-Thu Jan 15 02:03:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_clear_cache_by_id): clear only affected cache
- entries.
-
-Wed Jan 14 02:14:48 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/socket.c: new UDP/IP socket classes.
-
-Tue Jan 13 10:00:18 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_cmp): ignorecase($=) works wrong.
-
-Fri Jan 9 13:19:55 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1b4 released.
-
- * eval.c (f_missing): class name omitted from the error message.
-
- * error.c (exc_inspect): description changed.
-
- * string.c (Init_String): GlobalExit's superclass did not filled,
- since GlobalExit created earlier than String.
-
-Thu Jan 8 12:10:09 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (aryset): expr in the brackets can be null.
-
-Wed Jan 7 21:13:56 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_reopen): keep stderr unclosed.
-
- * io.c (io_errset): keep stderr unclosed.
-
-Tue Jan 6 00:27:43 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y: syntax modified for `while expr do .. end' etc.
-
- * process.c (f_exec,f_system): can supply arbitrary name for the
- new process.
-
-Mon Jan 5 16:59:13 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * file.c (file_s_basename): removes any extension by ".*".
-
-Sun Jan 4 19:36:22 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * parse.y (yylex): needed to update lex_p (reading point).
-
-Sat Jan 3 19:14:14 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * class.c,object.c: duplicate defines mKernel and cFinxnum.
-
-Fri Jan 2 20:38:59 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/curses/curses.c (NUM2CHAR): uses the first character for
- string arguments.
-
- * array.c (ary_fill): did not extend array for ranges.
-
- * array.c (beg_len): did not return end pos bigger than size.
-
-Fri Jan 2 02:09:16 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * dir.c (dir_s_chdir): bug in nil check.
-
- * array.c (ary_fill): bug in nil check.
-
-Tue Dec 30 11:46:23 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * hash.c (env_path_tainted): checks directories in PATH
- environment variable are not world writable.
-
- * ruby.c (load_file): invoke specified interpreter if the #! line
- does not contain the word `ruby'.
-
-Fri Dec 26 03:26:41 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (uscore_get): type information included in the error
- message.
-
- * variable.c (f_untrace_var): does not free trace-data within
- trace procedure.
-
-Thu Dec 25 02:50:29 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1b3 released.
-
- * ruby.h: inlining some functions on gcc 2.x
-
-Tue Dec 23 02:47:33 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): public/private information kept in the current
- scope, to remove undesired state from the class/module.
-
- * time.c (time_strftime): remove hidden limit of 100 bytes of
- result string, using malloc'ed buffer.
-
- * hash.c (hash_update): merges the contents of another hash,
- overriding existing keys.
-
- * regex.c (must_instr): totally re-written.
-
- * io.c (read_all): try to allocate proper sized buffer using
- fstat(2) for speedup.
-
-Sat Dec 20 00:27:28 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (must_instr): need to skip 2 bytes for mbchars.
-
-Fri Dec 19 01:18:29 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1b2 released.
-
- * eval.c (check_errat): check and convert (if necessary) traceback
- information before assigning to the variable $@.
-
- * eval.c (f_raise): optional third argument to specify traceback
- information.
-
- * io.c (f_open): prevent infinite recursive call.
-
-Thu Dec 18 19:33:47 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_rindex): now accepts regexp as index.
-
-Thu Dec 18 18:42:50 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ext/socket/extconf.rb: modified to detect win32 socket lib.
-
-Thu Dec 18 00:25:03 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * re.c (reg_equal): checks for source and casefold and kcode matching.
-
- * marshal.c: became built-in module.
-
- * ext/marshal/marshal.c (r_object): displays struct name for
- non-compatible struct.
-
- * string.c (str_index_method): now searches character (fixnum) in
- the string.
-
- * string.c (str_include): redefine `include?'.
-
- * regex.c (re_match): start_nowidth saves current stack position
- to stop_nowidth.
-
- * regex.c (re_compile_pattern): add space to stop_nowidth to save
- runtime stack position.
-
-Tue Dec 16 14:57:43 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (scan_once): wrong exception for regexp that match with
- null string (use substr instead of subseq).
-
-Sat Dec 13 00:13:32 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (expr): remove bare assocs from expr rule.
-
- * rbconfig.rb: renamed from config.rb (it was too generic name).
-
-Fri Dec 12 00:50:25 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (expr): warns if BEGIN or END appear in the method
- bodies.
-
- * string.c (str_match): calls y =~ x if y is neither String nor
- Regexp so that eregex.rb works.
-
- * eval.c (f_at_exit): to register end proc.
-
- * class.c (rb_define_module_function): define 'function' method
- for the Module, not private method.
-
- * class.c (rb_define_function): function to define `function' method.
-
- * eval.c (rb_eval): inherit visibility from superclass's method
- except when it is set to `function'
-
- * eval.c (rb_eval): new visibility status `function'.
-
- * parse.y (yycompile): do not clear eval_tree. thus enable multiple
- command line script by option `-e'.
-
- * eval.c (rb_eval): END execute just once.
-
- * parse.y (expr): BEGIN/END built in the syntax.
-
-Thu Dec 11 13:14:35 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (mod_le): Module (or Class) comparison.
-
- * eval.c (rb_remove_method): raises NameError if named method does
- not exist.
-
- * ext/curses/curses.c: remove CHECK macro for BSD curses.
-
-Thu Dec 11 12:44:01 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * pack.c: sun4 cc patch
-
-Wed Dec 10 15:21:36 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/marshal/marshal.c (marshal_load): can supply evolution proc
- object as optional second argument.
-
- * re.c (reg_source): get source string of the regular expression.
-
-Tue Dec 9 10:05:17 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1b1 released.
-
- * parse.y (tokadd): token buffer overrun.
-
- * ruby.c (ruby_prog_init): forgot to protect rb_argv0 from gc.
-
- * eval.c (ruby_run): call finalizers at process termination.
-
- * gc.c (gc_call_finalizer_at_exit): call free proc for every Data
- Wrapper, and finalizer for specified objects at termination.
-
- * version.c (show_version): version format changed.
-
- * regex.c (re_match): wrong match with non-greedy if they appear
- more than once in regular expressions.
-
- * sample/ruby-mode.el (ruby-expr-beg): forgot to handle modifiers.
-
-Mon Dec 8 19:00:15 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_puts): just put a newline if no argument given.
-
- * ext/tcltklib/tcltklib.c (lib_mainloop): thread-aware tk handle
- when $tk_thread_safe is set.
-
- * ext/tcltklib/tcltklib.c (lib_mainloop): use Tcl_DoOneEvent()
- instead of Tk_MainLoop().
-
-Mon Dec 6 07:11:16 1997 MAEDA shugo <shugo@po.aianet.ne.jp>
-
- * io.c (io_puts): core dumped without any argument.
-
-Fri Dec 5 18:17:17 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (mod_remove_method): remove (not undef) a method from the
- class/module.
-
- * variable.c (obj_remove_instance_variable): method to remove
- instance variables.
-
-Thu Dec 4 13:50:29 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1b0 released.
-
- * string.c (str_aref): called str_index for regexp.
-
-Mon Dec 1 15:24:41 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * compar.c (cmp_between): wrong comparison made.
-
-Wed Nov 26 18:18:05 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * lib/mkmf.rb: generate Makefile for extension modules out of ruby
- source tree. use like `ruby -r mkmf extconf.rb'.
-
- * numeric.c (fix2str): enlarge buffer to prevent overflow on some
- machines.
-
- * parse.y (here_document): wrong line number generated after here-doc.
-
-Fri Nov 21 13:17:12 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (yylex): skip multibyte characters in comments.
-
-Wed Nov 19 17:19:20 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (nil_to_a): nil.to_a => [].
-
- * parse.y (call_args): wrong node generation.
-
-Tue Nov 18 10:13:08 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * array.c (Init_Array): Array#=== works as Array#include?
-
- * regex.c (re_compile_pattern): insert initialize code for jump_n,
- before entering loops.
-
- * re.c (reg_search): does not save registers unless $& etc appear
- in the script.
-
-Mon Nov 17 13:01:43 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (is_defined): add defined? check for receivers and
- arguments for calls.
-
- * re.c (reg_search): cache last match object.
-
- * re.c (match_aref): $[0] etc. are available.
-
-Sat Nov 15 00:11:36 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * io.c (io_s_popen): "rb" detection
-
-Fri Nov 14 18:28:40 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (scan_once): returns whole match if the pattern does
- not contain any parentheses.
-
-Thu Nov 13 14:39:06 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (str_sub): returns copy of the receiver string, even if
- any substitution occurred.
-
- * regex.c (re_compile_pattern): no-width match by (?=..), (?!..).
-
-Wed Nov 12 13:44:47 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * time.c: remove coerce from Time class.
-
- * regex.c (re_match): non-greedy match by ??, *? +?, {n,m}?.
-
-Mon Nov 10 11:24:51 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): non-registering parens (?:..).
-
- * regex.c (re_compile_pattern): new meta character \< (wordbeg)
- and \> (wordend).
-
- * regex.c (re_compile_pattern): embedded comment for regular
- expression by (?#...).
-
-Fri Nov 7 16:58:24 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * regex.c (re_compile_pattern): perl5 regexp \A and \Z available.
-
- * regex.c (re_compile_pattern): can expand compile stack dynamically.
-
- * regex.c (PUSH_FAILURE_POINT): wrong compare condition.
-
-Wed Nov 2 16:00:00 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * string.c (str_sub_s): "".sub! "", "" => "\000"
-
-Fri Oct 31 15:52:10 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (assoc): keyword assoc like {fg->"black"}.
-
-Thu Oct 30 17:33:38 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_println): print with newline, which is not affected by
- the values of $/ and $\.
-
-Thu Oct 30 16:54:01 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * string.c (str_chop_bang): "".chop caused SEGV.
-
- * string.c (str_chomp_bang): method to chop out last newline.
-
-Mon Oct 27 13:49:13 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/extmk.rb.in: library may have pathname contains `.'
-
- * eval.c (rb_rescue): should not protect SystemError.
-
-Fri Oct 24 10:58:53 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_s_with_open_stream): ensures to close stream.
-
-Thu Oct 23 11:17:44 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_errset): value of $stderr can be changed (to any IO
- object).
-
- * io.c (next_argv): $< can be anything that responds to `write'.
-
- * file.c (file_s_with_open_file): ensures to close file.
-
- * error.c (exception): create error under the current class/module.
-
- * range.c (range_eqq): fixnum check for last needed too.
-
-Wed Oct 22 12:52:30 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/socket/socket.c: Socket::Constants added.
-
- * file.c: File::Constants added for inclusion.
-
- * array.c (ary_join): call ary_join() recursively for the 1st
- array element.
-
-Mon Oct 20 12:18:29 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ruby.c (load_file): wrong condition for #! check with -x.
-
- * file.c (file_s_dirname): did return "" for "/a".
-
-Fri Oct 17 14:29:09 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c: now works on alpha-linux.
-
- * bignum.c (bigadd): some undefined side effect order assumed.
-
-Wed Oct 15 17:49:24 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * intern.h: function prototypes added.
-
-Mon Oct 13 16:54:18 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * class.c (rb_define_class_id): call superclass's `inherited'
- method when making subclasses.
-
- * parse.y (nextc): clear lex_lastline at the end of file.
-
- * object.c (Init_Object): need to undef Class#append_features.
-
- * eval.c (rb_eval): no warning on extending classes or modules.
-
-Thu Oct 9 11:17:50 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (error_print): the exception name follows after the error
- message.
-
- * eval.c (compile_error): error message slightly changed.
-
- * parse.y (nextc): script parsing will be terminated by __END__ at
- beginning of line.
-
- * eval.c (compile_error): `__END__' is no longer a keyword.
-
- * parse.y (nextc): protect lastline read from script stream.
-
-Tue Oct 7 14:06:06 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1 alpha9 released.
-
- * eval.c (mod_append_features): renamed from extend_class.
-
- * eval.c (rb_eval): defining method calls `method_added'.
-
- * eval.c (ruby_options): exception while processing options must
- terminate the interpreter.
-
- * error.c (Init_Exception): wrong method configuration. `new'
- should have been a singleton method.
-
-Mon Oct 6 18:55:38 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/kconv/kconv.c (kconv_guess): code to guess character code
- from string.
-
-Mon Oct 6 18:38:17 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * pack.c: now encode/decode base64 by `m' template.
-
-Fri Oct 3 10:51:10 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * MANIFEST: needed to include lex.c in the distribution.
-
- * eval.c (ruby_options): f_require() called too early.
-
- * eval.c (rb_provide): module extensions should always be `.o'.
-
-Thu Oct 2 11:38:31 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1 alpha8 released.
-
- * ext/marshal/marshal.c (r_object): remove temporal regist for
- structs. (caused problem if structs form cycles.)
-
- * parse.y (match_gen): static binding for match(=~) calls
- with regexp literals.
-
-Wed Oct 1 15:26:55 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c: protect retval in struct tag from GC for C_ALLOCA.
-
- * eval.c: no more pointer value from setjmp/longjmp.
-
-Wed Oct 1 14:01:49 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ext/marshal/marshal.c (w_byte): argument must be char.
-
-Wed Oct 1 10:30:22 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (mod_const_at): global constants now belongs to the
- class Object.
-
- * object.c (Init_Object): new global constant NIL.
-
- * ext/marshal/marshal.c (marshal_dump): try to set binmode.
-
- * ext/marshal/marshal.c (r_object): forgot to re-regist structs in
- the object table.
-
- * eval.c (ruby_options): call Init_ext() before any require()
- calls by `-r'.
-
-Fri Sep 30 14:29:22 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ext/marshal/marshal.c (w_object): marshal dumped core.
-
-Tue Sep 30 10:27:39 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sample/test.rb: bignum test suits added.
-
- * eval.c (rb_eval): new pseudo variable `true' and `false'.
-
- * parse.y: new keywords `true' and `false' added.
-
-Mon Sep 29 13:37:58 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (forbid_setid): forbid some options in suid mode.
-
- * ruby.h (NUM2DBL): new macro to convert into doubles.
-
-Mon Sep 27 09:53:48 1997 EGUCHI Osamu <eguchi@shizuokanet.or.jp>
-
- * bignum.c: modified for speeding.
-
-Fri Sep 26 18:27:59 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * sample/from.rb: some extensions.
-
-Mon Sep 29 13:15:56 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (lhs): no more syntax error on `obj.CONSTANT = value'.
-
-Fri Sep 26 14:41:46 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (ruby_run): deferred calling Init_ext() just before eval_node.
-
-Fri Sep 26 13:27:24 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * io.c (io_isatty): forgot to return TRUE value.
-
-Fri Sep 25 11:10:58 1997 EGUCHI Osamu <eguchi@shizuokanet.or.jp>
-
- * eval.c: use _setjmp/_longjmp instead of setjmp/longjmp on some
- platforms.
-
-Wed Sep 24 17:43:13 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * string.c (Init_String): String#taint and String#taint? added.
-
- * class.c (mod_ancestors): ancestors include the class itself.
-
-Wed Sep 24 00:57:00 1997 Katsuyuki Okabe <HGC02147@niftyserve.or.jp>
-
- * X68000 patch.
-
-Tue Sep 23 20:42:30 1997 EGUCHI Osamu <eguchi@shizuokanet.or.jp>
-
- * parse.y (node_newnode): SEGV on null node setup.
-
-Mon Sep 22 11:22:46 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (ruby_prog_init): wrong safe condition check.
-
-Sun Sep 21 14:46:02 1997 MAEDA shugo <shugo@po.aianet.ne.jp>
-
- * error.c (exc_inspect): garbage added to classpath.
-
-Fri Sep 19 11:49:23 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (newtok): forgot to adjust buffer size when shrinking
- the token buffer.
-
- * enum.c (enum_find): rb_eval_cmd() does not return value.
-
- * io.c (pipe_open): close fds on pipe exec. fcntl(fd, F_SETFD, 1)
- no longer used.
-
-Tue Sep 16 17:54:25 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * file.c (f_test): problem if wrong command specified.
-
- * ruby.c (ruby_prog_init): close stdaux and stdprn for MSDOS.
-
- * ruby.c (ruby_prog_init): should not add path from environment
- variable, if ruby is running under setuid.
-
- * process.c (init_ids): check suid check for setuid/seteuid etc.
-
-Mon Sep 15 00:42:04 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * regex.c (re_compile_pattern): \w{3} and \W{3} did not work.
-
-Thu Sep 11 10:31:48 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1 alpha7 released.
-
- * ext/socket/socket.c (sock_new): no setbuf() for NT.
-
- * io.c (rb_fopen,rb_fdopen): set close-on-exec for every fd.
-
-Wed Sep 10 15:55:31 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ext/marshal/marshal.c (r_bytes0): extra big length check.
-
-Tue Sep 9 16:27:14 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (pipe_fptr_atexit): clean up popen()'ed fptr.
-
- * error.c (set_syserr): some system has error code that is bigger
- than sys_nerr. grrr.
-
-Mon Sep 8 18:33:33 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * io.c (io_s_new): dereferenced nil for optional mode.
-
-Fri Sep 5 10:26:03 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * class.c (class_instance_methods): do not include methods which
- are changed to private in subclasses.
-
-Thu Sep 4 12:38:53 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * variable.c (f_global_variables): list name of the global
- variables.
-
- * object.c (obj_id): returns unique integer.
-
-Wed Sep 3 14:05:16 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1 alpha6 released.
-
- * eval.c (mod_s_constants): context sensitive constant list.
-
- * variable.c (mod_constants): no more `all' option.
-
- * variable.c (mod_const_of): the values for autoload classes are
- their name strings.
-
- * class.c (class_instance_methods): no special treatment for
- singleton classes.
-
- * object.c (obj_singleton_methods): returns list of singleton
- method names.
-
- * parse.y (yylex): no here document after `class' keyword.
-
- * eval.c (f_load): expand path if fname begins with `~'.
-
-Tue Sep 2 13:19:48 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * class.c (ins_methods_i): do not list undef'ed methods.
-
-Mon Sep 1 13:42:48 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1 alpha5 released.
-
- * object.c (mod_attr_reader): create methods to define attribute
- reader/write/accessor.
-
- * class.c (rb_define_attr): always defines accessors.
-
- * eval.c (rb_call): alias occurred in the module body caused SEGV.
-
- * parse.y: did not generate here document strings properly.
-
-Mon Sep 1 11:43:57 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * parse.y (yylex): heredoc dropped an extra character.
-
-Fri Aug 29 11:10:21 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * class.c (class_instance_methods): same method names should not
- appear more than once.
-
- * parse.y (yylex): spaces can follow =begin/=end.
-
- * variable.c (find_class_path): look for class_tbl also for
- unnamed fundamental classes, such as Object, String, etc.
-
- * variable.c (rb_name_class): can't name class before String class
- is initialized.
-
- * inits.c (rb_call_inits): unrecognized dependency from GC to
- Array.
-
- * variable.c (find_class_path): could not find class if Object's
- iv_tbl is NULL.
-
-Thu Aug 28 13:12:05 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1 alpha4 released.
-
- * variable.c (mod_constants): wrong condition for singleton
- class.
-
- * parse.y (yylex): revised `=begin' skip code.
-
- * parse.y (here_document): forgot to free(eos).
-
- * parse.y (yylex): spaces after `<<' prohibited for here
- documents to avoid confusing with operator `<<'.
-
- * eval.c (is_defined): separated from rb_eval().
-
-Wed Aug 27 11:32:42 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1 alpha3 released.
-
- * variable.c (mod_name): returns name of the class/module.
-
- * parse.y (here_document): finally here document available now.
-
- * variable.c (fc_i): some classes/modules does not have iv_tbl.
-
- * variable.c (find_class_path): avoid infinite loop.
-
-Tue Aug 26 13:43:47 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (rb_eval): undef'ing non-existing method will raise
- NameError exception.
-
- * object.c (class_s_new): needed to create metaclass too.
-
- * eval.c (error_print): no class name print for anonymous class.
-
- * eval.c (rb_longjmp): proper exception raised if raise() called
- without arguments, with $! or $@ set.
-
- * object.c (Init_Object): superclass()'s method argument setting
- was wrong again.
-
- * class.c (mod_ancestors): list superclasses and included modules
- in priority order.
-
-Mon Aug 25 11:53:11 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1 alpha2 released.
-
- * sample/ruby-mode.el (ruby-parse-region): auto-indent now
- supports "\\" in the strings.
-
- * struct.c (struct_getmember): new API to get member value from C
- language side.
-
-Sat Aug 23 21:39:05 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * parse.y (assignable): remove unnecessary local variable
- initialize by nil.
-
-Fri Aug 22 14:26:40 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (error_print): modified exception print format.
-
-Thu Aug 21 16:10:58 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * sample/ruby-mode.el (ruby-calculate-indent): wrong indent level
- calculated with keyword operators.
-
-Thu Aug 21 11:36:58 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * parse.y (arg): ary[0] += 1 cause SEGV
-
-Wed Aug 20 17:28:50 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * ruby.c (ruby_process_options): require() all modules after
- processing all options
-
- * process.c (rb_proc_exec): more security checks added.
-
- * process.c (rb_proc_exec): insecure path on exec.
-
- * hash.c (f_getenv): PATH modification security check.
-
-Tue Aug 19 00:15:38 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1 alpha1 released.
-
- * eval.c (mod_eval): work as normal eval() if second binding
- argument given.
-
- * eval.c (rb_call): did not raise ArgumentError if too many
- arguments more than optional arguments (without rest arg).
-
- * eval.c (rb_eval): did not work well for op_asgn2 (attribute
- self assignment).
-
- * eval.c (Init_Thread): returns main thread.
-
-Mon Aug 18 09:25:56 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * object.c (inspect_i): did not display T_DATA instance variables.
-
- * parse.y: provides more accurate line number information.
-
- * eval.c (thread_value): include value's backtrace information in
- the variable `$@'.
-
- * eval.c (f_abort): print backtrace and exit.
-
-Sat Aug 16 00:17:44 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (class_new_instance): do not make instance from virtual
- classes.
-
- * object.c (class_s_new): do not make subclass of singleton class.
-
-Fri Aug 15 15:49:46 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * eval.c (call_trace_func): block context switch in the trace
- function.
-
- * eval.c (rb_eval): clear method cache at class extension.
-
- * object.c (obj_type): returns object's class even if it defines
- singleton methods.
-
-Fri Aug 15 19:40:43 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
-
- * ext/socket/socket.c (Init_socket): small typo caused SEGV.
-
-Wed Aug 13 17:51:46 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
-
- * version 1.1 alpha0 released.
-
-Local variables:
-add-log-time-format: (lambda ()
- (let* ((time (current-time))
- (diff (+ (cadr time) 32400))
- (lo (% diff 65536))
- (hi (+ (car time) (/ diff 65536))))
- (format-time-string "%a %b %e %H:%M:%S %Y" (list hi lo) t)))
-indent-tabs-mode: t
-tab-width: 8
-end:
diff --git a/doc/ChangeLog-1.9.3 b/doc/ChangeLog-1.9.3
deleted file mode 100644
index b3deb551b0..0000000000
--- a/doc/ChangeLog-1.9.3
+++ /dev/null
@@ -1,92772 +0,0 @@
-Sun Jul 10 22:50:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (rmpd_power_by_big_decimal): fix
- precision treatment errors.
-
- * test/bigdecimal/test_bigdecimal.rb: add tests for the above change.
- fix precision treatment errors.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_power): precision argument
- should be optional for its compatibility.
-
-Sun Jul 10 22:38:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (var_ref): distinguish vcall from local variable
- references. based on a patch by Michael Edgar michael.j.edgar
- AT dartmouth.edu. Bug #5002
-
-Sun Jul 10 21:51:29 2011 Koichi Sasada <ko1@atdot.net>
-
- * internal.h: add comments (cautions).
-
-Sun Jul 10 20:59:38 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit.rb: Add new class variable `@@testfile_prefix`.
- This is for changing test name prefix. (For testing)
-
- * test/testunit/tests_for_parallel/ptest_first.rb: Renamed from
- test_first.rb
-
- * test/testunit/tests_for_parallel/ptest_second.rb: Renamed from
- test_second.rb
-
- * test/testunit/tests_for_parallel/ptest_third.rb: Renamed from
- test_third.rb
-
- * test/testunit/tests_for_parallel/ptest_forth.rb: Renamed from
- test_forth.rb
-
- * test/testunit/tests_for_parallel/runner.rb: Remove misc.rb
-
- * test/testunit/tests_for_parallel/ptest_first.rb: ditto.
-
- * test/testunit/tests_for_parallel/ptest_second.rb: ditto.
-
- * test/testunit/tests_for_parallel/ptest_third.rb: ditto.
-
- * test/testunit/tests_for_parallel/ptest_forth.rb: ditto.
-
- * test/testunit/tests_for_parallel/misc.rb: Removed because no longer
- needed.
-
- * test/testunit/test_parallel.rb: Fix assertions for above.
-
-Sun Jul 10 16:57:08 2011 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (vm_throw): check a class frame.
- Fixes Bug #4648.
- The patch is contributed by Kazuki Tsujimoto.
-
- * bootstraptest/test_proc.rb: add tests for above.
-
-Sun Jul 10 17:28:01 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (mutex_debug): use exit(EXIT_FAILURE) instead of
- exit(1).
- * thread_pthread.c (add_signal_thread_list): ditto.
- * thread.c (rb_thread_call_with_gvl): ditto.
- * util.c (Bug): ditto.
-
-Sun Jul 10 15:58:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json: Merge json gem 1.5.4+ (f7f78896607b6f6226cd).
- [Bug #4700]
-
-Sun Jul 10 16:41:32 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * vm_core.h (typedef struct rb_vm_struct): create a new
- 'inhibit_thread_creation' field.
- * thread.c (rb_thread_terminate_all): set inhibit_thread_creation.
- * thread.c (thread_s_new): don't permit to create new thread
- if the VM is under destruction. Otherwise evil finalizer code
- can make SEGV. [Bug #4992][ruby-core:37858]
-
- * bootstraptest/test_objectspace.rb: new test for this fix.
-
-Sun Jul 10 16:06:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * signal.c (sigsegv): use abort() instead of exit() when nested
- SEGV was happen. Because unnested SEGV use abort().
- [Bug #5013][ruby-dev:44078]
-
-Sun Jul 10 15:30:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * load.c (rb_f_autoload): prevent to autoload for singleton
- classes. fixes [Bug #4886] [ruby-dev:43816]
-
- * bootstraptest/test_autoload.rb: add tests for the above change.
-
-Sun Jul 10 15:09:17 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit/assertions.rb: Import documentation patch by Justin
- Collins. [ruby-core:37225] [Feature #4903]
-
-Sun Jul 10 14:57:36 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: canonicalizes nth and sf.
-
-Sun Jul 10 14:13:50 2011 Koichi Sasada <ko1@atdot.net>
-
- * internal.h (rb_thread_call_with_gvl, rb_thread_call_without_gvl):
- make them visible as experimental C APIs. fixes Feature #4328.
-
-Sun Jul 10 12:18:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_power): support non-integral
- exponent. fixes [Bug #3271]
-
- * ext/bigdecimal/bigdecimal.c (rmpd_power_by_big_decimal): ditto.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_power_op): add a function to
- only use for "**" operator.
-
- * test/bigdecimal/test_bigdecimal.rb: add a bunch of tests for the
- above changes.
-
- * ext/bigdecimal/bigdecimal.c (is_integer): add an utility function.
-
- * ext/bigdecimal/bigdecimal.c (is_negative): ditto.
-
- * ext/bigdecimal/bigdecimal.c (is_positive): ditto.
-
- * ext/bigdecimal/bigdecimal.c (is_zero): ditto.
-
- * ext/bigdecimal/bigdecimal.c (is_one): ditto.
-
- * ext/bigdecimal/bigdecimal.c (is_even): ditto.
-
-Sun Jul 10 12:08:39 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (when_vals): when a string literal is written on when
- clause, skip string creation to make it faster. [ruby-dev:44068]
- [Feature #5000]
-
-Sun Jul 10 11:35:29 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y (reduce_nodes_gen): NODE_RETURN in rescue body must not be
- reduced when there is an else clause. This caused bizarre behavior
- in [Bug #4473] [ruby-core:35629] [ruby-core:37884].
-
-Sun Jul 10 09:46:14 2011 Masaya Tarui <tarui@ruby-lnag.org>
-
- * range.c (range_max): fix behavior with excluded end value.
- [Bug #4591]
-
-Sun Jul 10 09:13:18 2011 Eric Hodel <drbrain@segment7.net>
-
- * NEWS: Fix RubyGems version. [Ruby 1.9 - Bug #5004]
-
-Sat Jul 9 20:01:59 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * internal.h: rb_rational_reciprocal is defined in rational.c.
-
-Sat Jul 9 19:48:31 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * internal.h: added declarations.
- * complex.c: followed the above change.
-
-Sat Jul 9 17:24:41 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * NEWS: bigdecimal is not a builtin.
-
-Sat Jul 9 17:17:53 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: some improvements for performance.
-
-Sat Jul 9 16:56:01 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * atomic.h (ATOMIC_OR): _InterlockedOr is unavailable in VC6.
-
- * numeric.c (ULLONG_MAX): fallback definition.
-
-Sat Jul 9 15:59:19 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_{read,write}): should be signed.
- Bug #5001
-
-Sat Jul 9 14:02:20 2011 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/core.rb: fix multipart form parsing bug. [Bug #3866]
-
-Sat Jul 9 11:41:03 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Add Vector#normalize [ruby-dev:43829]
-
-Sat Jul 9 09:25:06 2011 Eric Hodel <drbrain@segment7.net>
-
- * enumerator.c: Remove "enumeration sequenced by".
- [Ruby 1.9 - Bug #4757]
-
-Sat Jul 9 09:14:56 2011 Eric Hodel <drbrain@segment7.net>
-
- * io.c: Note that methods other than IO#gets may increase IO#lineno.
- [Ruby 1.9 - Bug #4902]
-
-Sat Jul 9 08:39:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (RUN_OPT): disable gems.
-
-Sat Jul 9 08:37:05 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_close): close(2) on a fd which is being read by
- another thread causes deadlock on Mac OS X 10.5
-
-Fri Jul 8 21:20:39 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * addr2line.c: use USE_ELF instead of __ELF__ because Solaris
- doesn't define it. USE_ELF is already provided by configure.
- patched by Naohisa Goto. [ruby-dev:44066] [Bug #4998]
-
- * addr2line.h: ditto.
-
- * vm_dump.c: ditto.
-
-Fri Jul 8 16:40:38 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/json/parser/parser.rl (convert_encoding): should not modify
- the argument.
-
- * ext/json/parser/parser.rl (convert_encoding): no needs to use
- force_encoding.
-
-Fri Jul 8 15:53:31 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (rb_bug): get rid of segfault after all threads
- disposed.
-
-Fri Jul 8 15:01:06 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/ossl.h: include openssl/e_os2.h before checking the
- definition of OPENSSL_SYS_WIN32.
-
-Fri Jul 8 14:40:39 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (wunlink): reverted a part of r32426. it was mistakenly
- mixed.
-
-Fri Jul 8 14:29:47 2011 Narihiro Nakamura <authornari@gmail.com>
-
- * configure.in: can't subtract void *.
-
-Fri Jul 8 14:33:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): define GC_MARK_STACKFRAME_WORD.
- fixed build problem of r32438. the value (30) is temporary value.
- maybe it's enough by 20~24 according to my observation.
-
-Fri Jul 8 13:47:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_mutex_unlock_all): folded into
- rb_threadptr_unlock_all_locking_mutexes.
- * thread.c (rb_threadptr_unlock_all_locking_mutexes) ditto.
-
-Fri Jul 8 13:36:02 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (thread_unlock_all_locking_mutexes): rename to
- rb_threadptr_unlock_all_locking_mutexes and remove static.
- * vm_core.h: add rb_threadptr_unlock_all_locking_mutexes declaration.
- * thread.c (thread_start_func_2): adjust the above rename.
-
- * eval.c (ruby_cleanup): call rb_threadptr_unlock_all_locking_mutexes
- again after finalizer. [Bug #4988] [ruby-dev:44049]
-
-Fri Jul 8 13:06:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * cont.c (FIBER_MACHINE_STACK_ALLOCATION_SIZE): Fiber stack size
- don't need to keep multiple number of sizeof(VALUE).
-
-Fri Jul 8 11:39:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (sudo-precheck): true command is not standard on
- Windows.
-
-Fri Jul 8 10:39:52 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (gvl_destroy): fix cond_t leak.
-
-Fri Jul 8 09:17:59 2011 Eric Hodel <drbrain@segment7.net>
-
- * gc.c: Improve documentation
-
-Thu Jul 7 23:35:31 2011 Narihiro Nakamura <authornari@gmail.com>
-
- * gc.c: change water_mark value that may call
- gc_mark(lev <= GC_LEVEL_MAX) in gc_mark().
- In ruby_stack_check(), water_mark is a value that may call some
- C function. Fixes Bug #3781
-
- * configure.in: define GC_MARK_STACKFRAME_WORD that approximate
- size of gc_mark() and gc_mark_children() stackframes.
-
-Thu Jul 7 17:55:05 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/testunit/test_parallel.rb (TestParallelWorker#teardown): wait
- the child process even if the communication pipe is broken.
-
-Thu Jul 7 15:44:42 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_set_index, rb_enc_associate_index): should
- check if frozen.
-
- * parse.y (rb_intern3), ruby.c (process_options, ruby_script):
- defer freezing after associating encodings.
-
-Thu Jul 7 15:16:51 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric.c (rb_num2ull): use own switch sentence.
- Current implementation can't convert 18446744073709551615.
-
-Thu Jul 7 06:56:15 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * cont.c (FIBER_STACK_FLAGS): workaround fix for r32420 on FreeBSD.
-
-Thu Jul 7 06:46:12 2011 Eric Hodel <drbrain@segment7.net>
-
- * benchmark/driver.rb: Add difference column to report that averages
- across all runs of a benchmark. [Ruby 1.9 - Feature #4982]
-
-Thu Jul 7 06:19:38 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems.rb: Reduce requires to improve `make benchmark`.
- [#4962]
- * lib/rubygems/specification.rb: Delay initialization of rubygems
- until require is called.
-
-Thu Jul 7 04:31:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (arg): rescue_mod is in inverse order from other
- modifiers. patched by michael.j.edgar AT dartmouth.edu at
- [ruby-core:36248]. fixed #4716.
-
-Thu Jul 7 00:40:16 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (kill): check that the process exited or not before
- terminating it. [Bug #4943]
-
-Wed Jul 6 23:13:19 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (opt_call_args): allow trailing comma after assoc
- argument e.g. 'foo(bar:1,)'. fixed #3456
-
-Wed Jul 6 22:11:12 2011 Shota Fukumori <sorah@tubusu.net>
-
- * test/cgi/test_cgi_header.rb(test_cgi_header_nph): Validate date in
- "Date:" header
-
-Wed Jul 6 21:29:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * cont.c (fiber_machine_stack_alloc): cleanup pointer arithmetic.
- "size/sizeof(VALUE)" is ugly and easy confusing.
- * cont.c (fiber_initialize_machine_stack_context): ditto.
-
-Wed Jul 6 21:24:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * cont.c (fiber_machine_stack_alloc): fix mprotect misuse. A stack
- guard page should have PROT_NONE.
- * cont.c (fiber_initialize_machine_stack_context):
- th->machine_stack_maxsize shouldn't be included guard pages size.
- [Bug #4983][ruby-dev:44043]
-
-Wed Jul 6 21:23:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * cont.c (fiber_machine_stack_alloc): use MAP_STACK if it's provided.
-
-Wed Jul 6 21:22:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * cont.c (fiber_machine_stack_alloc): use MAP_FAILED instead of -1.
-
-Wed Jul 6 21:21:05 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * cont.c (fiber_machine_stack_alloc): remove unnecessary cast.
-
-Wed Jul 6 18:10:13 2011 Shota Fukumori <sorah@tubusu.net>
-
- * test/cgi/test_cgi_header.rb(test_cgi_header_nph): Adding space after
- comma.
-
- * test/cgi/test_cgi_header.rb(test_cgi_header_nph): Remove variable
- `now`. Suppress warning.
-
-Wed Jul 6 12:18:09 2011 Shota Fukumori <sorah@tubusu.net>
-
- * test/cgi/test_cgi_header.rb(test_cgi_header_nph): Fix bug depends to
- time. The test fails if time past 1 second in line 136-145
-
-Tue Jul 5 15:28:04 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_here_document): should dispatch heredoc_end
- scanner event on an empty here document. fixed Bug#4543.
-
-Tue Jul 5 13:49:26 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * addr2line.c: fix r32407 to check HAVE_ALLOCA_H.
-
-Tue Jul 5 14:05:43 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/webrick/httpauth/digestauth.rb (_authenticate):
- Literal texts in HTTP ABNF is case-insensitive (RFC2616 2.1),
- and a sample implementation in RFC2617 also ignores the case
- of algorithms. So now this ignores those cases.
- [ruby-dev:43965] [Feature #4936]
-
- * lib/webrick/httpauth/digestauth.rb (initialize):
- Because of above, opera_hack is useless and removed.
-
-Tue Jul 5 01:30:01 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread_pthread.c (native_sleep): cut the waiting time up to
- 100,000,000 because Solaris cond_timedwait() return EINVAL if an
- argument is greater than current_time + 100,000,000. This is
- considered as a kind of spurious wakeup. The caller to native_sleep
- should care about spurious wakeup.
-
-Tue Jul 5 01:24:26 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * cont.c: disable FIBER_USE_NATIVE on Solaris because resuming any
- Fiber caused SEGV. I haven't follow up the issue deeply, but it
- works when disabling the feature.
-
-Tue Jul 5 01:22:46 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * addr2line.c: include <alloca.h> to fix a build issue on Solaris.
-
-Tue Jul 5 00:49:05 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * ext/coverage/coverage.c: resurrect r32071 + add GC guard for
- rb_coverages. [ruby-core:37352] [Bug #4927]
- [ruby-core:36539] [Feature #4796]
-
- * test/coverage/test_coverage.rb resurrect r32071.
-
-Mon Jul 4 22:24:46 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (get_stack): For NetBSD/FreeBSD, use
- pthread_attr_getstack() if possible. and, remove an assumption
- of stack growing direction.
-
-Mon Jul 4 20:42:31 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/coverage/coverage.c: revert r32071. The commit caused SEGV on
- some minor nonfree OS. I have no means of debugging the bug. My
- personal opinion is that such OS should be unsupported unless there
- is an active maintainer. [ruby-core:37352]
-
- * test/coverage/test_coverage.rb: ditto.
-
-Mon Jul 4 07:14:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * thread_pthread.c (get_stack): the return address of get_stack
- must be the highest address of the current thread's stack.
-
-Mon Jul 4 06:37:22 2011 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/intern.h, thread_pthread.c (rb_reserved_fd_p,
- RB_RESERVED_FD_P): added. This C API is to limit to access
- fds which are used by RubyVM internal. In this version of
- CRuby, return 1 if fd is communication pipe.
- If your application needs to close all file descriptors to
- present resource leak, skip internal fds using this C API.
- We also define a macro RB_RESERVED_FD_P(fd). So you can write
- #ifndef RB_RESERVED_FD_P
- #define RB_RESERVED_FD_P(fd) 0
- #endif
- for Ruby 1.9.2 or previous version to write compatible extensions.
- See [ruby-core:37727]
-
- * thread_win32.c (rb_reserved_fd_p): added (return 0 for any fds).
-
- * io.c (rb_io_initialize): raise ArgumentError if given fd is reserved by Ruby.
-
-Sun Jul 3 23:43:56 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * ext/extmk.rb (extmake): suppresses outputs from extconf.rb.
- (extmake) warns a failure in extconf.rb.
-
-Sun Jul 3 13:44:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (ary_reject_bang): should not remove elements which are
- not yielded. [Bug #2545]
-
-Sun Jul 3 06:10:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (get_stack): pthread_attr_getstack() doesn't
- return stack start address, but stack base address. Thus,
- we need to add stack size for getting stack start address.
- And, we don't have to decrease guard size twice.
- * thread_pthread.c (thread_start_func_1): don't use inaccurate
- stack start guess if native_thread_init_stack() can be used.
- [Bug #1813] [ruby-core:24540]
-
-Sun Jul 3 04:50:08 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (get_stack): add to a care of guard page on Mac
- OS X. [Bug #1813] [ruby-core:24540]
- * signal.c (ruby_signal): SIGBUS use alternative stack too.
- * signal.c (sigbus): On Mac, thread stack overflow makes SIGBUS
- instead of SIGSEGV. thus, added stackoverflow check.
- * signal.c (default_handler): get rid of compilation warning.
- * signal.c (Init_signal): ditto.
-
-Sat Jul 02 08:59:20 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * test/openssl/test_ocsp.rb
- * test/openssl/test_x509_cert.rb: Perform SHA-256 tests only if
- supported by the available OpenSSL version. Versions < 0.9.8 don't
- support it. [ruby-core:37724]
-
-Sat Jul 2 07:17:45 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_reject_bang, rb_ary_delete_if): rejected
- elements should be removed. fixed [Bug #2545]
-
-Sat Jul 2 01:57:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * NEWS: remove a description of Kernel#respond_to? because it has
- been reverted at revision 28564.
-
-Sat Jul 2 00:58:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * NEWS: describe a change of multiplication of Bignum.
-
-Fri Jul 1 18:52:31 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * benchmark/bm_app_erb.rb: increase loop count. too short
- measurement time makes less accuracy.
- * benchmark/bm_app_factorial.rb: ditto.
- * benchmark/bm_app_mandelbrot.rb: ditto.
- * benchmark/bm_app_strconcat.rb: ditto.
-
- * benchmark/bm_io_file_create.rb: ditto.
- * benchmark/bm_io_file_read.rb: ditto.
- * benchmark/bm_io_file_write.rb: ditto.
-
- * benchmark/bm_so_concatenate.rb: ditto.
- * benchmark/bm_so_lists.rb: ditto.
- * benchmark/bm_so_matrix.rb: ditto.
- * benchmark/bm_so_random.rb: ditto.
- * benchmark/bm_so_sieve.rb: ditto.
-
- * benchmark/bm_vm_thread_mutex1.rb: ditto.
- * benchmark/bm_vm_thread_mutex2.rb: ditto.
- * benchmark/bm_vm_thread_mutex3.rb: ditto.
-
- * benchmark/bm_vm1_block.rb: cleanup.
- * benchmark/bm_vm1_const.rb: cleanup.
- * benchmark/bm_vm1_ensure.rb: cleanup.
- * benchmark/bm_vm1_ivar.rb: cleanup.
- * benchmark/bm_vm1_length.rb: cleanup.
- * benchmark/bm_vm1_neq.rb: cleanup.
- * benchmark/bm_vm1_not.rb: cleanup.
- * benchmark/bm_vm1_rescue.rb: cleanup.
- * benchmark/bm_vm1_simplereturn.rb: cleanup.
- * benchmark/bm_vm1_swap.rb: cleanup.
-
- * benchmark/bm_vm2_array.rb: cleanup.
- * benchmark/bm_vm2_case.rb: cleanup.
- * benchmark/bm_vm2_defined_method.rb: cleanup.
- * benchmark/bm_vm2_eval.rb: cleanup.
- * benchmark/bm_vm2_method.rb: cleanup.
- * benchmark/bm_vm2_mutex.rb: cleanup.
- * benchmark/bm_vm2_poly_method.rb: cleanup.
- * benchmark/bm_vm2_poly_method_ov.rb: cleanup.
- * benchmark/bm_vm2_proc.rb: cleanup.
- * benchmark/bm_vm2_regexp.rb: cleanup.
- * benchmark/bm_vm2_send.rb: cleanup.
- * benchmark/bm_vm2_super.rb: cleanup.
- * benchmark/bm_vm2_unif1.rb: cleanup.
- * benchmark/bm_vm2_zsuper.rb: cleanup.
-
- * benchmark/bm_vm_thread_alive_check1.rb: cleanup.
-
-Fri Jul 1 15:23:00 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix: Add LUP decomposition
-
-Fri Jul 1 15:21:14 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Allow non integer exponents for Matrix#**
-
-Fri Jul 1 15:13:25 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix: Add Eigenvalue Decomposition
-
-Fri Jul 1 15:10:22 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix: Add Matrix#round
-
-Fri Jul 1 11:41:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (tr_trans): free heap ptr when the str is not embedded.
- patched by Eric Wong. [Bug #4956] [ruby-core:37708]
-
-Fri Jul 1 11:07:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (do_select): fix memory leak.
- Patch by Eric Wong. Thank you! [Bug #4953] [ruby-core:37702]
-
-Fri Jul 1 08:21:28 2011 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (vm_getivar): check vm state version
- to invalidate inline cache (ivar index).
- fixes Bug #4926.
-
- * vm_insnhelper.c (vm_setivar): ditto.
-
-Fri Jul 1 08:03:15 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c, thread_pthread.c (WRITE_CONST): suppress warnings
- `ignoring return value'.
-
-Fri Jul 1 06:41:36 2011 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_threadptr_check_signal): only wake up main thread.
-
- * thread.c (rb_threadptr_execute_interrupts_common): check signal
- delivery if it is main thread.
- fixes [ruby-dev:44005] [Ruby 1.9 - Bug #4950]
-
- * bootstraptest/test_fork.rb: add a test for above.
-
- * signal.c (rb_get_next_signal): skip if signal_buff is empty.
- (check signal_buff.size first)
-
- * vm_core.h: remove unused variable rb_thread_t::exec_signal.
-
- * thread.c (rb_thread_check_trap_pending): check
- rb_signal_buff_size() because rb_thread_t::exec_signal
- is no longer available.
-
-Fri Jul 1 03:28:25 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (Init_class_hierarchy): should name BasicObject
- explicitly.
-
- * variable.c (rb_const_defined_0): should not check for
- superclasses as const_get.
-
-Fri Jul 1 03:24:03 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: mathn is still alive (should die soon).
-
-Thu Jun 30 23:50:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * misc/ruby-mode.el (ruby-indent-beg-re): Fix broken regular
- expression. Fixes #4546
-
-Thu Jun 30 23:43:30 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl.c/.h: Added ossl_x509_name_sk2ary.
- * ext/openssl/ossl.c: Replaced ossl_x509_ary2k by generic macro to
- simplify future conversions.
- * ext/openssl/ossl_ssl.c: Implement SSLSocket#client_ca.
- * test/openssl/test_ssl.rb: Add test for SSLSocket#client_ca.
- Thanks to Ippei Obayashi for providing the patch!
- [ Ruby 1.9 - Feature #4481 ] [ruby-core:35461]
-
-Thu Jun 30 22:38:58 2011 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/bm_vm2_defined_method.rb: added to measure performance of
- bmethod (method defined by define_method()).
-
-Thu Jun 30 22:17:04 2011 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (vm_call_bmethod): fix to hook call/return event
- for methods defined by define_method(). fixes Bug #4613.
-
- * thread.c (call_trace_proc): Fix to skip if class is not given (0).
- Note that ID and Class object are passed for call/return event
- if the called method was defined by define_method().
- If you are author of tracer/profiler/debugger, this may be an
- important change. You should check passed class as zero or
- non-zero instead of checking the event type.
-
- * test/ruby/test_settracefunc.rb: add a test for above.
-
-Thu Jun 30 21:18:35 2011 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * configure.in: Add warnflags for XL/C on AIX during configure
- to avoid [Bug #3971]. See [ruby-core:32859]
-
-Thu Jun 30 21:16:04 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (m_ajd): refers a constant.
-
-Thu Jun 30 20:54:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/console/io-console.gemspec: spin-off gem for 1.9.2.
-
-Thu Jun 30 20:36:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: trivial changes.
-
-Thu Jun 30 20:12:36 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_module.rb: tests for [Bug #3422] and [Bug #3423].
-
-Thu Jun 30 20:03:39 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: modified doc.
-
-Thu Jun 30 19:09:19 2011 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (thread_timer): ignore unknown errno.
- (we observed that select(2) was canceled by errno=514 on
- boron == Linux/Xen environment)
-
-Thu Jun 30 17:33:25 2011 Koichi Sasada <ko1@atdot.net>
-
- * ext/objspace/objspace.c (ObjectSpace.count_tdata_objects):
- Fix rdoc. Fixes Bug #3892.
-
- * ext/objspace/objspace.c (ObjectSpace.count_tdata_objects):
- Change key type if the klass of a object is zero (internal object).
- Read rdoc for details.
-
- * internal.h: export rb_objspace_data_type_name().
-
-Thu Jun 30 17:25:08 2011 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (ping_signal_thread_list, thread_timer):
- fix to keep polling state if there are any ping-tasks.
-
-Thu Jun 30 12:25:34 2011 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (rb_thread_create_timer_thread): allocate
- machine stack for the timer thread at least 12KB. FreeBSD 8.2
- AMD64 causes machine stack overflow (SIGSEGV) only with
- PTHREAD_STACK_MIN (maybe defined as 2KB).
-
-Thu Jun 30 09:36:37 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/weakref.rb: Attach documentation to WeakRef and add missing
- documentation
-
-Thu Jun 30 09:30:14 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/yaml.rb: Document toplevel YAML and YAML::ENGINE to describe
- Psych vs Syck engines.
-
-Thu Jun 30 09:21:52 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/cmath.rb: Hide handle_no_method_error from RDoc.
- * error.c: Document or hide undocumented error classes.
-
-Thu Jun 30 07:49:04 2011 Eric Hodel <drbrain@segment7.net>
-
- * hash.c: Document ENV
-
-Thu Jun 30 06:37:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_init_loadpath_safe): ensure RUBYLIB_PREFIX stored
- before RUBYLIB, even if MANGLED_PATH is enabled. fixed #1679.
- MANGLED_PATH is disabled by the default and will be removed
- completely in the future.
-
-Thu Jun 30 06:32:21 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/drb/drb.rb: Hide deprecated toplevel DRb constants.
-
-Thu Jun 30 06:17:02 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/cmath.rb (CMath.log): second argument: b can be nil.
-
-Thu Jun 30 06:23:28 2011 Eric Hodel <drbrain@segment7.net>
-
- * thread.c (ruby_thread_s_pass): Fix typo.
-
-Thu Jun 30 06:16:53 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Update to RDoc 3.8 which contains fixes for documentation
- in trunk.
-
-Thu Jun 30 02:53:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_threadptr_execute_interrupts_common): remove
- meaningless native_thread_yield(). It never close a race.
-
-Thu Jun 30 02:41:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_thread_schedule_limits): minor optimization.
- eliminate machine context saving when running time is enough small.
-
-Thu Jun 30 02:28:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_thread_schedule_rec): move interrupt_flag check to
- rb_thread_schedule().
- And also rename to rb_thread_schedule_limits() and remove
- sched_depth argument. It's no longer called recursive.
- * thread.c (rb_thread_schedule): add to check interrupt_flag as
- above explained.
-
- * thread.c (rb_threadptr_execute_interrupts_rec): rename to
- rb_threadptr_execute_interrupts_common() and remove sched_depth
- argument. It's no longer called recursive.
-
- * thread.c (rb_thread_sleep): adapt the renaming.
- * thread.c (rb_threadptr_execute_interrupts): ditto.
- * thread.c (rb_thread_execute_interrupts): ditto.
-
-Thu Jun 30 01:31:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (thread_s_pass): change RDoc description and remove
- a sample code. The actual implementation never behave as explained by
- an example. It's a documentation bug.
-
-Thu Jun 30 00:54:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_thread_stop): change RDoc sample code. The old
- example is buggy and may cause deadlock. The patch is
- suggested by Heesob Park <phasis@gmail.com>. Thank you!
- [Bug #3606][ruby-core:31454]
-
-Thu Jun 30 00:49:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_thread_wakeup): change RDoc sample code. The old
- example is buggy and may not display anything by a race.
- The patch is suggested by Heesob Park <phasis@gmail.com>.
- Thank you! [Bug #3606][ruby-core:31454]
-
-Thu Jun 30 00:43:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_thread_run): change RDoc. The old example is buggy
- and may cause deadlock. The patch is suggested by Heesob Park
- <phasis@gmail.com>. Thank you! [Bug #3606][ruby-core:31454]
-
-Thu Jun 30 00:30:15 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/cmath.rb: make same exception for Math. fix [Bug #3137].
-
-Thu Jun 30 00:03:20 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/irb/completion.rb: complement correctly string literal. fix
- [Bug #1145].
-
-Wed Jun 29 23:42:51 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: avoided using timev.
- * ext/date/date_strftime.c: ditto.
- * ext/date/date_tmx.h: ditto.
-
-Wed Jun 29 23:17:57 2011 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/openssl/ossl.h (OPENSSL_SYS_WIN32): support for mingw(msys).
-
-Wed Jun 29 23:09:14 2011 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/tk/extconf.rb (intptr_t, uintptr_t): support for the latest ActiveTcl with mingw.
-
-Wed Jun 29 22:49:10 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/irb/cmd/help.rb: support RDoc 3.7. fix [Bug #3760].
-
-Wed Jun 29 22:04:14 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * lib/tracer.rb: Tracer.on only if required by -r command-line option.
- and consider --disable-gems option.
- * test/test_tracer.rb: add tests for it.
-
-Wed Jun 29 13:55:36 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_const_get_0): should not look for superclasses if
- the second optional argument is given for #const_get().
- fix [Bug #3422] [Bug #3423]
-
-Wed Jun 29 12:07:27 2011 Eric Hodel <drbrain@segment7.net>
-
- * math.c: Attach documentation for Math.
- * object.c: Document NIL, TRUE, FALSE.
- * io.c: Improve grammar in ARGF comment. Document STDIN/OUT/ERR.
- Document ARGF global constant.
- * lib/rake: Hide deprecated toplevel constants from RDoc (import from
- rake trunk).
- * lib/thwait.rb: Document ThWait.
- * lib/mathn.rb: Hide Math redefinition from RDoc
- * lib/sync.rb: Add a basic comment for Sync_m, Synchronizer_m, Sync,
- Synchronizer.
- * parse.y: Document SCRIPT_LINES__.
- * hash.c: Document ENV class and global constant.
- * vm.c: Document TOPLEVEL_BINDING.
- * version.c: Document RUBY_* constants.
- * ruby.c: Document DATA and ARGV.
-
-Wed Jun 29 10:13:12 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Matrix.zero can build rectangular matrices.
- Vector#r should be called #magnitude
-
-Wed Jun 29 10:11:08 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Add Matrix#diagonal?, hermitian?, normal?,
- orthogonal?
- permutation?, symmetric?, {lower|upper}triangular?, unitary?, zero?
-
-Wed Jun 29 10:09:35 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Specialize Matrix#find_index to return [row, col]
- and accept the same optional argument as #each
-
-Wed Jun 29 10:07:32 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Matrix#each{_with_index} can iterate over a subset
- of the Matrix
-
-Wed Jun 29 06:21:02 2011 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (native_stop_timer_thread): skip to close
- communication pipe to avoid timing bug (process termination timing).
- The communication pipe will closed by OS.
-
-Wed Jun 29 06:09:54 2011 Koichi Sasada <ko1@atdot.net>
-
- * error.c (rb_async_bug_errno): async-safe bug report function.
- In timer thread, signal handler should use it.
- The patch is contributed by Eric Wong <normalperson@yhbt.net>.
- Refs: [ruby-core:37644] and [ruby-core:37647]
-
- * thread_pthread.c: use rb_async_bug_errno().
- And replace all fprintf() to write().
-
- * internal.h (rb_async_bug_errno): add decl. of above func.
-
-Tue Jun 28 23:46:08 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/tracer.rb: count only non-internal libraries in stack trace,
- ignoring custom_require.
-
-Tue Jun 28 21:44:58 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/irb/ruby-lex.rb: recognize '\char' in ruby statement.
-
-Tue Jun 28 20:39:29 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * lib/debug.rb (var_list): Command 'var *' did not work on 1.9(!).
- global_variables, local_variables, and instance_variables returns
- Symbols from 1.9 and need to stringify before evaling it.
- See #4931.
-
-Tue Jun 28 19:23:01 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * signal.c: Now, USE_TRAP_SIGMASK depend on HAVE_PTHREAD_SIGMASK.
- The code have already depended on pthread_sigmask since r27464.
-
-Tue Jun 28 15:09:21 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/benchmark.rb: merge eregon/benchmark.
- https://github.com/eregon/ruby/tree/benchmark
- patched by Benoit Daloze. [ruby-core:37593] [Bug #4940]
-
- * lib/benchmark (Benchmark#bmbm): bmbm should be consistent with bm
- for the return value.
-
- * test/benchmark: remove preemptive test instead of skipping
- I removed the preemptive test I wrote for Feature #4197.
- I'll add it back when the implementation will be able to satisfy it.
-
- * lib/benchmark (Benchmark#bmbm): remove useless explicit call,
- #format is an alias of #to_s test/benchmark: add a test for
- format of long time.
-
- * lib/benchmark: fix label width: always add 1 to ensure there is a
- space delimiter even with times over 100s
- When I asked for Feature #4197, I wanted to make delimiting spaces
- consistent for #bm and #bmbm.
- But with times over 100s, the output contains no space between the
- label and the first time (user).
- Now both ensure there is always a space, even if that means 3 spaces
- with times under 10s (because it is formatted as %10.6f)
-
- * test/benchmark: let labels be a constant
- lib/benchmark (Benchmark#realtime): avoid creating an unused Proc
- lib/benchmark (Benchmark#benchmark): use ensure clause to restore
- STDOUT.sync, as in #bmbm
-
-Tue Jun 28 13:41:51 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (native_stop_timer_thread): fixed commit miss of
- r32244. grep sources before changing the signature of a function.
-
-Tue Jun 28 11:49:14 2011 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (consume_communication_pipe):
- Make "buff" as static. (Maybe) "buff" can be shared between
- any caller (any threads) because no one use the read values.
- "buff" (1024 byte) on stack may cause stack overflow on
- several environment (we found a crash on FreeBSD).
- And remove const value "buff_size", and define CCP_READ_BUFF_SIZE
- macro.
-
-Tue Jun 28 11:45:30 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rake: Update rake to fix some bugs and hide deprecated features
- from RDoc.
- * lib/rake/version.rb: Bump version to 0.9.2.1 to distinguish it from
- the released version.
- * NEWS: ditto
-
-Tue Jun 28 11:17:28 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Update to RDoc 3.7 (final)
- * NEWS: ditto
-
-Tue Jun 28 10:18:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * process.c (rb_daemon): fix wrong #endif position.
-
-Tue Jun 28 07:50:32 2011 Eric Hodel <drbrain@segment7.net>
-
- * object.c (Init_Object): Teach RDoc what Init_class_hierarchy does to
- hook up ri for BasicObject, Object, Module and Class.
-
-Tue Jun 28 05:03:32 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * thread.c (rb_thread_local_aref): RDoc fix. Thread#[] example
- had a race. See #4480.
-
-Tue Jun 28 01:22:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigMath_s_log): move BigMath.log from
- bigdecimal/math.rb.
-
- * ext/bigdecimal/lib/bigdecimal/math.rb: ditto.
-
- * test/bigdecimal/test_bigdecimal.rb: move test for BigMath.log from
- test/bigdecimal/test_bigmath.rb.
-
- * test/bigdecimal/test_bigmath.rb: ditto.
-
-Tue Jun 28 01:19:52 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/irb/ruby-lex.rb: fix [Bug #4232].
-
-Tue Jun 28 00:14:13 2011 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: fix [Bug #4409]. add DRbServer#here?.
-
- * test/drb/test_drb.rb: ditto.
-
- * test/drb/drbtest.rb: ditto.
-
- * test/drb/ut_eq.rb: ditto.
-
-Tue Jun 28 00:08:43 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/irb/workspace.rb: fix BUG#4793.
-
-Mon Jun 27 22:06:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (consume_communication_pipe): don't use C99
- style variable length array.
-
-Mon Jun 27 22:04:27 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (consume_communication_pipe): change return
- type to void. caller doesn't use it.
-
-Mon Jun 27 21:29:50 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.h (rb_global_vm_lock_struct): add volatile to
- gvl->waiting. now thread_timer() access it w/o lock.
-
-Mon Jun 27 21:16:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c: s/__gvl_acquire/gvl_acquire_common/ and
- s/__gvl_release/gvl_release_common/.
-
-Mon Jun 27 11:41:47 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * thread_pthread.c (rb_thread_create_timer_thread):
- the type of return value of write(2) is ssize_t.
-
-Mon Jun 27 09:57:02 2011 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (rb_thread_create_timer_thread):
- Fixes missing initialization of oflags.
-
-Mon Jun 27 09:07:42 2011 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c: Stop polling in the timer thread when there are
- no waiting thread. If there are 2 or more runnable threads,
- the timer thread does polling. Avoid polling makes power save
- for several computers (0.2W per a Ruby process, when I measured).
- If outside-event such as signal or Thread#kill was occurred
- when the timer thread does not do polling, then wake-up
- the timer thread using communication-pipe (the timer thread
- waits this communication-pipe with select(2)).
- The discussion about this modification can be found from the post
- [ruby-core:33456] and other related posts.
- Note that Eric Wong and KOSAKI Motohiro give us the huge
- contributions for this modification. Thanks.
-
- * thread_pthread.c (rb_thread_wakeup_timer_thread): add a function.
- This function wakes up the timer thread using communication-pipe.
-
- * thread.c (rb_thread_stop_timer_thread): add a parameter which
- specify closing communication-pipe or not.
-
- * thread.c (rb_thread_terminate_all): do not stop timer thread here
- (ruby_cleanup() terminate timer thread).
-
- * signal.c: wake up timer thread using
- rb_thread_wakeup_timer_thread() from signal handler.
-
- * eval.c (ruby_cleanup): use rb_thread_stop_timer_thread(1).
-
- * process.c: use rb_thread_stop_timer_thread(0)
- (reuse communication-pipe).
-
- * thread_win32.c (rb_thread_wakeup_timer_thread): add a dummy
- function.
-
- * vm_core.h: add and fix decl. of functions.
-
-Mon Jun 27 08:01:19 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_parse.c: should use ALLOCA_N.
-
-Mon Jun 27 01:34:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/etc/test_etc.rb (TestEtc#test_get{pw,gr}nam): skip entries
- start with + sign, which means NIS. these are returned in the
- case that passwd and group entries in /etc/nsswitch.conf are set
- to use "nis" explicitly on Debian. fixed #3683
-
-Mon Jun 27 00:44:53 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * parse.y (rb_parser_end_seen_p): fix documentation about return
- value. patched by Sho Hashimoto. [Bug #4511]
-
-Mon Jun 27 00:40:47 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * hash.c (rb_hash_reject): add documentation that Hash#reject
- without block returns enumerator.
- patched by Michael Edgar [Bug #4847] [ruby-core:36800]
-
-Sun Jun 26 23:49:21 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/date/test_switch_hitter.rb: added a test.
-
- Sun Jun 26 22:21:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: refactoring.
-
-Sun Jun 26 18:03:30 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * parse.y: comma at the end of line is no longer allowed.
- A patch from Yukihiro Matsumoto <matz AT ruby-lang.org>.
- (fixed #3456).
-
-Sun Jun 26 13:35:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * vm_dump.c (rb_vm_bugreport): change CrashReporter suggestion messages
- on Mac. It should be placed after "-- C level backtrace" line.
- Suggested by Endoh-san.
-
- <before>
- -- See Crash Report log file under ~/Library/Logs/CrashReporter or ---------
- -- /Library/Logs/CrashReporter, for the more detail of ---------------------
- -- C level backtrace information -------------------------------------------
-
- <after>
- -- C level backtrace information -------------------------------------------
-
- See Crash Report log file under ~/Library/Logs/CrashReporter or
- /Library/Logs/CrashReporter, for the more detail of.
-
-Sun Jun 26 10:08:28 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/extconf.rb
- * ext/openssl/ossl_missing.h/.c: add ASN1_put_eoc if missing.
-
- * ext/openssl/ossl_asn1.c: introduce ossl_asn1_object_size and
- ossl_asn1_put_object to wrap functionality depending on OpenSSL
- version in use.
- Fixes [ Ruby 1.9 - Bug #4916 ] reported by Hiroshi Nakamura.
- [ruby-core:37286]
-
-Sun Jun 26 01:00:15 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (date_strftime_internal): removed meaningless braces.
- * ext/date/date_core.c (gengo): the value should be int.
-
-Sat Jun 25 23:45:30 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * vm_insnhelper.c (vm_search_superclass): avoid control frame
- stack overrun. currently super() in Proc created in a method
- defined by Module#define_method raise NoMethodError. [Bug #4881]
- * test/ruby/test_method.rb t_super_in_proc_from_define_method):
- add test for it.
-
-Sat Jun 25 23:23:14 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * thread.c (sleep_forever): now Kernel#sleep don't wakeup by
- signal handler execution. [Bug #4072]
-
-Sat Jun 25 23:14:47 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * thread.c (rb_threadptr_check_signal): remove unnecessary th->status
- backup. fix race condition which may results unexpected main thread's
- status transition. see #4072
-
-Fri Jun 24 19:57:30 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * lib/webrick/httprequest.rb (setup_forwarded_info): Parsing request
- header failed when the request is from 2 or more Apache reverse
- proxies. It's said that all X-Forwarded-* headers will contain more
- than one (comma-separated) value if the original request already
- contained one of these headers. Since we could use these values as
- Host header, we choose the initial(first) value. See #4922.
-
- * test/webrick/test_httprequest.rb (test_forwarded): Test it.
-
-Fri Jun 24 17:06:33 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (proc_daemon): should not start timer thread
- twice. fixed Bug#4920.
-
-Fri Jun 24 15:54:14 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_shutdown): Try to shutdown SSL
- connection more gracefully. Call SSL_shutdown() max 4 times until it
- returns 1 (success). Bi-directional SSL close has several states but
- SSL_shutdown() kicks only 1 transition per call. Max 4 is from
- mod_ssl.c of Apache httpd that says 'max 2x pending + 2x data = 4'.
- See #4237.
-
-Fri Jun 24 07:24:37 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rake/version.rb: Fixed VERSION to work with tool/rbinstall.rb
- * bin/rake: Import bin/rake from 0.9.2
- * tool/rbinstall.rb (install): Rake::VERSION is now in
- lib/rake/version.rb. Fixes `make install`
-
-Fri Jun 24 07:11:37 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rake: Import Rake 0.9.2
-
-Fri Jun 24 00:44:15 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (c_valid_{julian,gregorian}_p): fixed the range of month.
-
-Fri Jun 24 00:14:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: trivial changes on text.
-
-Thu Jun 23 22:46:57 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_x509name.c: Add X509::Name#hash_old as a wrapper
- for X509_NAME_hash_old in OpenSSL 1.0.0. See #4805
-
- * test/openssl/test_x509name.rb (test_hash): Make test pass with
- OpenSSL 1.0.0.
-
- * NEWS: Add it.
-
-Thu Jun 23 19:30:53 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_set_time): Check
- argument type with NUM2LONG if the arg is not a Time object.
- See #4919.
-
- * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_set_timeout): Check
- type with NUM2LONG. Time as an arg is not allowed. See #4919.
-
- * test/openssl/test_ssl_session.rb (test_session_time,
- test_session_timeout): Test it.
-
-Wed Jun 23 13:30:30 2011 Shota Fukumori <sorah@tubusu.net>
-
- * signal.c(ruby_atomic_exchange): Fix definition style.
-
-Wed Jun 22 22:34:05 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_ssl.c (ossl_sslctx_session_new_cb): Return 0 to
- OpenSSL from the callback for SSL_CTX_sess_set_get_cb().
- Returning 0 means to OpenSSL that the session is still valid
- (since we created Ruby Session object) and was not freed by us with
- SSL_SESSION_free(). Call SSLContext#remove_session(sess) in
- session_get_cb block if you don't want OpenSSL to cache the session
- internally.
- This potential issue was pointed by Ippei Obayashi. See #4416.
-
- * test/openssl/test_ssl_session.rb (test_ctx_server_session_cb): Test
- it.
-
-Wed Jun 22 22:21:17 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_ssl_session.c: Respect T_BIGNUM time values. Patch by
- Tomoyuki Chikanaga.
- [ Ruby 1.9 - Bug #4919 ] [ruby-dev:43869]
-
-Wed Jun 22 21:29:25 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/socket/depend (SOCK_HEADERS): use $(top_srcdir) instead of
- $(topdir). sorry!
-
-Wed Jun 22 19:47:03 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * cont.c (cont_capture): add volatile.
- On clang -O, it is needed to avoid the optimization.
- With this and llvm/clang's recent fix, clang 3.0 can
- build ruby-trunk with -O option.
-
- * cont.c (cont_capture): use for-loop.
-
- * array.c (rb_ary_each): add volatile and use it.
-
- * vm_insnhelper.c (vm_call_cfunc): ditto.
-
-Wed Jun 22 18:20:46 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_ssl.c (ossl_sslctx_session_remove_cb):
- OpenSSL::SSL::SSLContext#session_remove_cb was broken. It wrongly
- tried to call the session_*new*_cb callback.
-
- * test/openssl/test_ssl_session.rb (class OpenSSL): Test it.
-
-Wed Jun 22 17:37:49 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl.h: Introduced OSSL_BIO_reset macro for PEM/DER
- fallback scenarios.
-
- * ext/openssl/ossl_pkey_dsa.c
- * ext/openssl/ossl_x509req.c
- * ext/openssl/ossl_pkey_rsa.c
- * ext/openssl/ossl_pkey_ec.c
- * ext/openssl/ossl_ssl_session.c
- * ext/openssl/ossl_x509crl.c
- * ext/openssl/ossl_pkey.c
- * ext/openssl/ossl_pkey_dh.c
- * ext/openssl/ossl_x509cert.c
- * ext/openssl/ossl_pkcs7.c: Use OSSL_BIO_reset.
-
- * ext/openssl/ossl_ssl.c
- * ext/openssl/ossl_cipher.c
- * ext/openssl/ossl_pkey_ec.c
- * ext/openssl/ossl_pkcs12.c
- * ext/openssl/ossl_ssl_session.c: Replace rb_raise occurrences by
- ossl_raise. This automatically flushes OpenSSL's error queue.
-
- * ext/openssl/ossl_pkcs7.c: Raise error if DER fallback for parsing
- fails.
-
- * test/openssl/test_pkey_ec.rb
- * test/openssl/test_pkey_dsa.rb
- * test/openssl/test_pkey_rsa.rb: Add assertions that OpenSSL.errors is
- empty.
-
- * test/openssl/test_pkey_rsa.rb: Remove initial OpenSSL.errors call in
- test_new.
- [ Ruby 1.9 - Bug #4885 ] [ruby-core:37134]
-
-Wed Jun 22 15:01:24 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_ssl.c: Use SSL_MODE_RELEASE_BUFFERS if available.
- Thanks, Eric Wong, for providing the patch.
- [ Ruby 1.9 - Feature #4672 ] [ruby-core:36127]
-
-Wed Jun 22 14:47:53 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * test/openssl/test_buffering.rb
- * test/openssl/test_pkcs12.rb: Inherit from Test::Unit::TestCase
- instead of MiniTest::Unit::TestCase. [ruby-core:37275]
-
-Wed Jun 22 12:41:03 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_to_der):
- OpenSSL::SSL::Session#to_der was broken. Fix buffer handling.
-
- * test/openssl/test_ssl_session.rb (test_session): Test it.
-
-Wed Jun 22 12:38:52 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * test/openssl/test_ssl_session.rb: Split out SSL::Session related
- tests from test_ssl.rb
-
-Wed Jun 22 03:20:52 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/to_ruby.rb: Fix cyclic references of
- objects. Thanks to CvX for reporting the bug and a test case.
- * test/psych/test_object.rb: test for cyclic object references.
-
-Wed Jun 22 02:39:54 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTP.post_form): Do not ignore query part of
- the given URI to post. See #655.
-
- * test/net/http/test_http.rb, test/net/http/utils.rb: Test it.
-
-Wed Jun 22 01:28:13 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * test/openssl/test_x509store.rb (test_set_errors): Redhat is
- distributing a patched version of OpenSSL that allows multiple CRL
- for a key (multi-crl.patch.) Make test pass on such env. See #4122,
- #4554.
-
-Tue Jun 21 21:50:37 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * lib/webrick/httpresponse.rb (HTTPResponse#setup_header): Close
- HTTP/1.1 connection when returning an IO object as response body
- without setting HTTPResponse#chunked to true. See #855 no.1.
-
- * test/webrick/test_httpserver.rb: Test it.
-
-Tue Jun 21 21:27:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * internal.h: move rb_thread_io_blocking_region() declaration
- from intern.h to internal.h. It's still experimental API and
- need more discussion. [ruby-dev:43698]
- * include/ruby/intern.h: ditto.
-
- * ext/socket/rubysocket.h: include internal.h.
- * ext/socket/depend: add internal.h dependency.
- * ext/socket/extconf.rb: add $INCFLAGS to topdir.
-
-Tue Jun 21 20:38:47 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (datetime_s_*): canonicalize 24 o'clock.
-
-Tue Jun 21 19:46:23 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_thread.rb (TestThread#test_priority): enable
- this test again. Current GVL respect thread priority rather
- than past.
-
-Tue Jun 21 13:25:35 2011 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/readline.c (readline_getc): applied a patch in
- #3827 by by Akio Tajima <artonx AT yahoo.co.jp>. (see #3827)
-
-Tue Jun 21 13:16:31 2011 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/extconf.rb: fixed bug, specify --disable-libedit
- then disable libedit, does not specify then check readline and
- libedit if failed checking readline. (fixes #3375)
-
-Mon Jun 20 22:52:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (before_exec): use sig_do_nothing instead of SIG_DFL
- for avoiding a race.
- * process.c (sig_do_nothing): new function.
-
-Mon Jun 20 21:31:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (thread_timer): rename timeout_10ms to
- time_quantum. it's no longer 10ms.
-
-Mon Jun 20 18:46:02 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_cipher.c, ext/openssl/lib/openssl/cipher.rb:
- Documentation fix by Ippei Obayashi. See #4419.
-
-Mon Jun 20 15:41:33 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * lib/webrick/cookie.rb (WEBrick::Cookie.parse): Revert r31228.
- r31228 was for allowing the 'Cookie:' header which did not have no
- SP after ';' for separating cookie-pairs but RFC6265 requires single
- SP after ';' there. We allow multiple SPs here for compatibility
- with older WEBrick version.
-
- * test/webrick/test_cookie.rb: Test it.
-
-Sun Jun 19 13:31:26 2011 Shota Fukumori <sorah@tubusu.net>
-
- * NEWS: Introduce --hide-skip on test/unit.
-
-Sun Jun 19 10:05:16 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit/parallel.rb: Override Test::Unit::TestCase#on_parallel_worker?
- only when $0 == __FILE__.
-
- * lib/test/unit/parallel.rb: Run Test::Unit::Worker.run only when
- $0 == __FILE__.
-
-Sat Jun 18 23:59:24 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (fill_cbuf): finish reading at EOF, and the readconv has
- been cleared by another thread while io_fillbuf() is waiting at
- select(). a patch in [ruby-core:37197] by Hiroshi Shirosaki
- <h.shirosaki AT gmail.com>. fixed #3840
-
-Sat Jun 18 21:36:29 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c: remove GVL_DEBUG
-
-Sat Jun 18 21:32:02 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * vm.c, vm_core.h (rb_vm_stack_to_heap): remove const.
- It makes compilations warnings.
-
-Sat Jun 18 18:54:15 2011 Koichi Sasada <ko1@atdot.net>
-
- * vm.c, vm_core.h (rb_vm_stack_to_heap): fix "const" place.
-
-Sat Jun 18 17:23:38 2011 Tanaka Akira <akr@fsij.org>
-
- * eval.c, hash.c, load.c, proc.c, range.c, thread.c, time.c: don't
- declare internal functions.
-
- * internal.h, vm_core.h: declare internal functions.
-
- * array.c: include internal.h.
-
- * common.mk: update dependency for array.o.
-
-Sat Jun 18 13:39:33 2011 Tanaka Akira <akr@fsij.org>
-
- * internal.h: declarations declared in include/ruby/*.h removed.
-
-Sat Jun 18 12:42:17 2011 Tanaka Akira <akr@fsij.org>
-
- * method.h, internal.h iseq.h: declare internal functions.
-
- * compile.c, eval.c, iseq.c, object.c, parse.y, proc.c, process.c,
- thread.c, vm.c, vm_eval.c, vm_insnhelper.c, vm_method.c: don't
- declare internal functions.
-
- Note that rb_method_entry_eq() is defined in vm_method.c but
- there was a declaration in proc.c with different const-ness.
- Now it is declared in method.h with same const-ness to the
- definition.
-
- * object.c (rb_mod_module_exec): don't declare functions declared in
- include/ruby/intern.h.
-
-Sat Jun 18 12:05:08 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/backward/classext.h: for evil gems. fixed #4803
-
-Sat Jun 18 11:12:13 2011 Tanaka Akira <akr@fsij.org>
-
- * common.mk: update dependencies.
-
-Sat Jun 18 11:09:03 2011 Tanaka Akira <akr@fsij.org>
-
- * io.c: suppress warnings.
-
-Sat Jun 18 10:22:39 2011 Tanaka Akira <akr@fsij.org>
-
- * internal.h: declare more internal functions.
-
- * iseq.h (rb_method_get_iseq): declared.
-
- * compile.c, eval.c, eval_error.c, iseq.c, parse.y, proc.c, range.c,
- ruby.c, time.c, util.c, vm.c: don't declare internal functions.
-
- * eval.c, parse.y, thread_pthread.c: non-existing function declarations
- removed.
-
-Sat Jun 18 08:12:54 2011 Tanaka Akira <akr@fsij.org>
-
- * common.mk: dependencies updated.
-
- * tool/update-deps: new file to assist update dependencies in
- common.mk.
-
-Sat Jun 18 07:27:27 2011 Tanaka Akira <akr@fsij.org>
-
- * internal.h: declare internal functions here.
-
- * node.h: declare NODE dependent internal functions here.
-
- * iseq.h: declare rb_iseq_t dependent internal functions here.
-
- * vm_core.h: declare rb_thread_t dependent internal functions here.
-
- * bignum.c, class.c, compile.c, complex.c, cont.c, dir.c, encoding.c,
- enumerator.c, error.c, eval.c, file.c, gc.c, hash.c, inits.c, io.c,
- iseq.c, load.c, marshal.c, math.c, numeric.c, object.c, parse.y,
- proc.c, process.c, range.c, rational.c, re.c, ruby.c, string.c,
- thread.c, time.c, transcode.c, variable.c, vm.c,
- tool/compile_prelude.rb: don't declare internal functions declared
- in above headers. include above headers if required.
-
- Note that rb_thread_mark() was declared as
- void rb_thread_mark(rb_thread_t *th) in cont.c but defined as
- void rb_thread_mark(void *ptr) in vm.c. Now it is declared as
- the later in internal.h.
-
-Sat Jun 18 02:36:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (VpNewRbClass): fix type of the 2nd
- argument.
-
- * ext/bigdecimal/bigdecimal.h: ditto.
-
-Sat Jun 18 02:30:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigMath_s_exp): move BigMath.exp from
- bigdecimal/math.rb.
-
- * ext/bigdecimal/lib/bigdecimal/math.rb: ditto.
-
- * test/bigdecimal/test_bigdecimal.rb: move test for BigMath.exp from
- test/bigdecimal/test_bigmath.rb.
-
- * test/bigdecimal/test_bigmath.rb: ditto.
-
-Sat Jun 18 00:20:54 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: do not define wnum[01].
-
-Fri Jun 17 18:57:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * compile.c (iseq_compile_each): fix return value of obj[a,*b]=c.
-
-Fri Jun 17 13:09:45 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/curses/curses.c: Clean up documentation.
-
-Fri Jun 17 09:25:14 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/curses/curses.c: Document curses constants. Patch by Vincent
- Batts. [Ruby 1.9 - Bug #4880]
-
-Fri Jun 17 09:11:05 2011 Eric Hodel <drbrain@segment7.net>
-
- * object.c: Document Module#method_added and #method_removed.
- Patch by Bryce Kerley. [Ruby 1.9 - Feature #4867]
-
-Fri Jun 17 08:50:16 2011 Eric Hodel <drbrain@segment7.net>
-
- * io.c: Improve documentation of IO and File open and new.
- Patch by Roger Pack. [Ruby 1.9 - Bug #4790]
-
-Fri Jun 17 07:53:50 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/csv.rb: Document #raw_encoding. Patch by David Czarnecki.
- [Ruby 1.9 - Bug #4874]
-
-Fri Jun 17 07:46:50 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/benchmark.rb: Document Benchmark::Tms#memberwise. Patch by
- David Czarnecki. [Ruby 1.9 - Bug #4873]
-
-Fri Jun 17 07:38:31 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/prettyprint.rb: Improve documentation. Patch by Ysiad
- Ferreiras. [#4834]
-
-Fri Jun 17 07:23:03 2011 Eric Hodel <drbrain@segment7.net>
-
- * array.c (rb_ary_drop): Improve documentation. Patch by Caley Woods.
- [Ruby 1.9 - Bug #4858]
-
-Fri Jun 17 06:11:31 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/webrick/log.rb: Improve documentation of BasicLog and Log.
- Patch by Olivier Brisse. [Ruby 1.9 - Bug #4833]
- * lib/webrick/httpstatus.rb: Improve documentation of
- WEBrick::HTTPStatus. Patch by Olivier Brisse.
- [Ruby 1.9 - Bug #4833]
-
-Fri Jun 17 04:48:22 2011 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c, thread_pthread.h: remove unused variables.
- (native_thread_data_t::gvl_cond, native_thread_data_t::gvl_next)
-
-Thu Jun 16 14:32:31 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * time.c (rb_time_new): prevent overflow by "* 1000".
-
-Fri Jun 17 03:07:36 2011 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/bm_vm4_thread_create_join.rb,
- benchmark/bm_vm4_thread_mutex[1-3].rb: renamed to
- bm_thread_* (fix last rename).
-
-Fri Jun 17 02:26:47 2011 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (native_thread_create): fix debug message.
- (add last newline)
-
-Thu Jun 16 23:40:49 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_thread_schedule_rec): fix {UN,}LIKELY macro misuse.
- * gc.c (rb_newobj): ditto.
- * vm_insnhelper.c (vm_method_search): ditto.
-
-Thu Jun 16 20:06:15 2011 Shota Fukumori <sorah@tubusu.net>
-
- * test/testunit/test_parallel.rb: Fix Regexp for test.
-
- * test/testunit/tests_for_parallel/test_third.rb: Use
- Test::Unit::TestCase#on_parallel_worker? for detecting worker.
-
- * lib/test/unit/testcase.rb(Test::Unit::TestCase#on_parallel_worker?):
- New Method Test::Unit::TestCase#on_parallel_worker? returns true
- when a testcase is running on parallel worker.
- * lib/test/unit/parallel.rb(Test::Unit::TestCase#on_parallel_worker?):
- ditto.
-
-Thu Jun 16 19:27:12 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * test/test_securerandom.rb: Add testcase. This testcase does NOT aim
- to test cryptographically strongness and randomness. It includes
- the test for PID recycle issue of OpenSSL described in #4579 but
- it's disabled by default.
-
-Thu Jun 16 17:55:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_io.rb (TestIO#test_copy_stream_socket): fix
- test hanging up issue. Patch by CHIKANAGA Tomoyuki.
-
-Thu Jun 16 15:17:39 2011 Eric Hodel <drbrain@segment7.net>
-
- * variable.c (const_missing): Add simple example of const_missing.
- Patch by Anuj Dutta. [Ruby 1.9 - Bug #4794]
-
-Thu Jun 16 15:09:29 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/monitor.rb: Improve documentation. Patch by Sandor Szucs.
- [Ruby 1.9 - Bug #4823]
-
-Thu Jun 16 14:54:09 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/webrick/utils.rb: Document WEBrick::Utils. Patch by Olivier
- Brisse. [Ruby 1.9 - Bug #4819]
-
-Thu Jun 16 14:26:46 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/webrick/httpservlet/erbhandler.rb: Allow the ERB document to
- alter the content-type of the response. [Ruby 1.9 - Bug #4685]
-
-Thu Jun 16 14:15:47 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/timeout.rb: Clarify timeout duration types. Patch by Alf Mikula.
- [Ruby 1.9 - Bug #4791]
- * lib/net/http.rb: ditto
-
-Thu Jun 16 13:25:25 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc*: Import RDoc 3.7 release candidate
-
-Thu Jun 16 11:35:09 2011 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (search_response): parses SEARCH responses from
- the Yahoo IMAP server correctly. patched by Mark Nadig. [Bug #4509]
-
-Thu Jun 16 09:12:38 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * fix for build on solaris 10.
-
-Thu Jun 16 09:08:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/io/console/test_io_console.rb (TestIO_Console#test_sync):
- fix for daemon process.
-
-Thu Jun 16 07:58:01 2011 Shota Fukumori <sorah@tubusu.net>
-
- * test/testunit/test_parallel.rb(test_ignore_tzero): Test for r32109.
-
- * test/testunit/tests_for_parallel/test_third.rb: Use another way to
- detect that test is running on worker. This fixes sometimes
- TestParallel failing.
-
-Thu Jun 16 07:20:06 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit.rb(Test::Unit::Runner#_run_parallel): Ignore -j0
- because it makes blocking forever by IO.select.
-
-Thu Jun 16 03:08:11 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/testunit/test_parallel.rb (TestParallel::TestParallelWorker#
- setup): now can run on Windows, probably.
-
- * test/testunit/test_parallel.rb (TestParallel::TestParallel#setup):
- ditto.
-
-Thu Jun 16 03:00:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread.c (do_select): Windows: no need to poll if select(2) is
- cancelable.
-
- * thread_win32.c (native_fd_select): new function to make select(2)
- cancelable.
-
- * thread_win32.c (rb_w32_check_interrupt): new function for checking
- interrupt.
-
- * win32/win32.c (rb_w32_select_with_thread): new function. cancelable
- select(2).
-
- * win32/win32.c (rb_w32_select): use above function internally.
-
-Wed Jun 15 23:30:45 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * gc.c: fix a regression by r31690 on AIX because AIX malloc
- return NULL if it's passed 0. But some caller don't expect it.
- patch by Yutaka Kanemoto. [ruby-dev:43779]
- (vm_malloc_prepare): return calculated size.
- (vm_xmalloc): use above result.
- (vm_xcalloc): ditto.
-
-Wed Jun 15 23:11:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c: remove BLOCKING_REGION_CORE() macro. It's no longer used
- since r32022.
-
-Wed Jun 15 21:00:47 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * test/openssl/test_config.rb: execute based on the existence of the
- OpenSSL module.
-
-Wed Jun 15 12:35:11 2011 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_io.rb (test_copy_stream_socket): wait a child process
- before SIGUSR1 handler is removed.
-
- * test/pathname/test_pathname.rb (define_assertion): use line number
- for test method names.
-
-Wed Jun 15 10:37:43 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * file.c (rb_stat_rdev): use DEVT2NUM.
-
- * file.c (rb_stat_rdev_major): ditto.
-
- * file.c (rb_stat_rdev_minor): ditto.
-
-Wed Jun 15 05:12:59 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (lib_eventloop_core): revert the last change (it's
- the part for ruby_1_8), and use rb_thread_check_ints() when RUBY_VM
- is defined.
-
-Wed Jun 15 04:42:47 2011 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/bm_vm3_thread_*.rb: renamed bm_vm3_thread_*.rb to
- benchmark/bm_vm_thread_*.rb.
-
-Wed Jun 15 04:28:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * benchmark/bm_vm4_thread_pass.rb: rename bm_vm4* to
- bm_vm_thread_*. suggested by ko1.
- * benchmark/bm_vm4_pipe.rb: ditto.
- * benchmark/bm_vm4_alive_check1.rb: ditto.
- * benchmark/bm_vm4_pass_flood.rb: ditto.
-
-Wed Jun 15 03:52:50 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * benchmark/bm_vm4_pass_flood.rb: new benchmark for GVL fairness.
- * benchmark/bm_vm4_alive_check1.rb: ditto.
-
-Wed Jun 15 01:27:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (gvl_yield): fix live lock issue on 1-2 cpus
- system. It's additional fix for r32021.
- * thread_pthread.c (gvl_init): add switch_wait_cond.
- * thread_pthread.h (typedef struct rb_global_vm_lock_struct): ditto.
-
-Tue Jun 14 23:16:22 2011 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (show_progress): refine verbose mode.
- (exec_test): ditto.
-
-Tue Jun 14 23:02:36 2011 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (show_progress): extracted from assert_check.
- (assert_check): use show_progress.
- (assert_normal_exit): ditto.
- (assert_finish): ditto.
- (flunk): ditto.
-
-Tue Jun 14 22:51:42 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/date/test_*.rb: added tests.
-
-Tue Jun 14 22:09:58 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: renamed some functions.
- * ext/date/date_core.c: modified doc.
-
-Tue Jun 14 21:26:01 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * cont.c (cont_save_thread): add new utility function.
- rb_context_t::saved_thread.machine_stack_start and
- machine_stack_end should be cleared immediately after a snapshot of
- current thread is stored to saved_thread. [ruby-dev:43680] [Bug #4855]
- this change aims to get rid of unnecessary GC mark at machine stack.
-
-Tue Jun 14 19:50:49 2011 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_autoload.rb: remove temporary directory.
-
-Tue Jun 14 11:05:03 2011 Narihiro Nakamura <narihiro@netlab.jp>
-
- * gc.c (rb_gc_set_params): call initial_expand_heap if
- initial_heap_min_slots is set.
-
-Tue Jun 14 11:02:08 2011 Narihiro Nakamura <narihiro@netlab.jp>
-
- * gc.c: use size_t.
-
-Tue Jun 14 01:10:38 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/coverage/test_coverage.rb: add a test for restart. a patch
- from Xavier Shay. [ruby-core:36745]
-
-Tue Jun 14 01:05:10 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/coverage/coverage.c: make it restartable. [ruby-core:36539]
-
-Mon Jun 13 23:55:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_thread_schedule_rec): call gvl_yield() unconditionally.
- * thread_pthread.c: remove HAVE_GVL_YIELD macro.
- * thread_win32.c (gvl_yield): new. this fallback logic was moved from
- rb_thread_schedule_rec().
-
-Mon Jun 13 23:50:25 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/io/console/console.c (console_dev): typo.
-
-Mon Jun 13 23:38:23 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_parse_string): flush delayed token. based on a
- patch by Masaya Tarui in [ruby-dev:43762]. Bug #4544
-
- * parse.y (yylex): revert r24557. delayed token at the end of
- string should be flushed already by the above change.
-
-Mon Jun 13 23:33:31 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/console/console.c (console_dev): console should be
- unbuffered.
-
- * ext/io/console/console.c (console_dev): take care of no-ctty
- case.
-
-Mon Jun 13 23:06:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c: rewrite GVL completely. This fix improve some
- benchmark dramatically (e.g. vm3_thread_mutex result changed
- form 120.601sec to 3.426sec).
- * thread_win32.c: ditto.
- * thread_pthread.h: ditto.
- * vm_core.h: ditto.
- * thread.c: ditto.
-
-Mon Jun 13 23:11:52 2011 Tanaka Akira <akr@fsij.org>
-
- * test/socket/test_unix.rb: don't use Thread.abort_on_exception.
-
-Mon Jun 13 23:05:01 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/unixsocket.c (unix_send_io): race condition fixed.
- (unix_recv_io): ditto.
- fixed by Eric Wong. [ruby-core:35574]
-
- * test/socket/test_unix.rb: test added for above problem.
-
-Mon Jun 13 21:41:05 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_win32.c (native_cond_signal): remove unnecessary rb_bug().
- It's additional fix for r32021. [Bug #4696]
-
-Mon Jun 13 20:50:49 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * test/openssl/test_ec.rb
- test/openssl/test_pkey_ec.rb: merge both files into test_pkey_ec.rb.
- Removed redundant group instantiation from PKey tests.
- * test/openssl/utils.rb: only create TEST_PKEY_EC_P256V1 if EC is
- defined.
-
-Mon Jun 13 20:28:24 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * test/openssl/digest.rb: remove MDC2 from test, it is not available
- by default in an OpenSSL installation.
-
-Mon Jun 13 20:18:55 2011 Koichi Sasada <ko1@atdot.net>
-
- * vm_core.h, vm_insnhelper.h: move decl. of
- ruby_vm_global_state_version and related macros
- from vm_core.h to vm_insnhelper.h.
-
- * vm.c (vm_clear_all_cache): added. This function is called
- when ruby_vm_global_state_version overflows.
- TODO: vm_clear_all_inline_method_cache() is only place holder.
- We need to implement it ASAP.
-
- * vm_method.c (vm_clear_global_method_cache): added.
-
-Mon Jun 13 19:46:21 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/cmath.rb: add new method Object#real?. fix #3137
-
-Mon Jun 13 18:52:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (is_kind_of_BigDecimal): new function to
- examine the whether the object is kind of BigDecimal.
-
-Mon Jun 13 18:49:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimalCmp): use GetVpValueWithPrec
- for Float and Rational arguments.
-
- * test/bigdecimal/test_bigdecimal.rb (test_new, test_cmp, test_power):
- add and modify tests for the above change.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimalCmp): modify coding style to
- match ruby's standard.
-
-Mon Jun 13 18:33:04 2011 Tanaka Akira <akr@fsij.org>
-
- * lib/securerandom.rb (SecureRandom.random_bytes): modify PRNG state
- to prevent random number sequence repetition at forked child
- process which has same pid.
- reported by Eric Wong. [ruby-core:35765]
-
-Mon Jun 13 17:02:34 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTP#use_ssl?): require 'openssl' only when
- https is needed. fixes r31933.
-
-Mon Jun 13 14:35:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * lib/cmath.rb (CMath.cbrt): returns the principal value of the cube
- root of the argument. fix #3676
-
- * test/test_cmath.rb (test_cbrt_returns_principal_value_of_cube_root):
- test for the above change.
-
-Mon Jun 13 14:17:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * lib/test/unit.rb (Test::Unit::GlobOption#non_options): fix typo.
-
-Mon Jun 13 13:04:20 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_digest.c: fix error for digests that have no oid
- (e.g. DSS1).
- * test/openssl/test_digest.c: add tests for this.
-
-Mon Jun 13 12:51:51 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/yaml.rb: load psych only when syck is not loaded.
-
-Mon Jun 13 12:23:39 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
-Mon Jun 13 12:23:39 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/psych/lib/psych/deprecated.rb (Object#to_yaml_properties):
- undef to_yaml_properties before redefine it.
-
- * ext/syck/lib/syck/rubytypes.rb: ditto.
-
-Mon Jun 13 11:30:10 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_digest.c: allow Digests to be created by sn, ln or
- oid.
- * test/openssl/test_digest.rb: add tests for this.
- [Ruby 1.9 - Feature #4412] [ruby-core:35319]
-
-Mon Jun 13 10:54:03 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/pkey_dh.c: corrected documentation.
- * test/openssl/utils.rb: add test key for DH.
- * test/openssl/test_pkey_dh.rb: add tests.
-
-Mon Jun 13 10:13:08 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/pkey_dh.c: clarify difference between DH#public_key and
- DH#pub_key in documentation.
-
-Mon Jun 13 05:50:43 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * NEWS: introduce PKey.read.
-
-Mon Jun 13 05:17:29 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_pkey.c: added PKey.read module function that allows
- reading arbitrary public/private keys from DER-/PEM-encoded File or
- string instances.
- * ext/openssl/ossl_pkey_dh.c: improved documentation.
- * test/openssl/utils.rb: added EC test key.
- * test/openssl/test_pkey_rsa.rb
- test/openssl/test_pkey_dsa.rb: Test PKey.read. Reuse keys from
- OpenSSL::TestUtils.
- * test/openssl/test_pkey_ec.rb: Created test file for EC tests.
- Test PKey.read.
- [Ruby 1.9 - Feature #4424] [ruby-core:35330]
-
-Mon Jun 13 04:42:24 2011 Koichi Sasada <ko1@atdot.net>
-
- * ext/objspace/objspace.c (total_i): fix to skip no ruby objects.
-
-Mon Jun 13 03:07:38 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/benchmark/test_benchmark.rb (capture_output):
- replace '-' as space. On NetBSD, subtract between two Process.times
- after and before the short process may return negative value like:
- t0=Process.times; yield; t1=Process.times; p t1.utime-t0.utime
-
-Mon Jun 13 02:40:23 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * test/openssl/test_pkey_dsa.rb: Test for DSA#syssign/sysverify.
-
-Mon Jun 13 01:59:19 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_pkey_dh.c: completed documentation.
- * ext/openssl/ossl_pkey_dsa.c: corrected examples. Improved parameter
- sections.
-
-Mon Jun 13 00:25:10 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_pkey_dsa.c: completed documentation.
-
-Sun Jun 12 23:36:46 2011 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb (kill_sub_thread): remove the method. [ruby-core:34185]
-
-Sun Jun 12 21:01:56 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (d_lite_marshal_load): should give converted value.
-
-Sun Jun 12 20:36:30 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: edited doc.
-
-Sun Jun 12 18:12:07 2011 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/bm_vm3_clearmethodcache.rb: added.
-
-Sun Jun 12 17:40:29 2011 Koichi Sasada <ko1@atdot.net>
-
- * vm_method.c (rb_clear_cache*): update only vm state version.
-
- * vm_method.c (rb_method_entry_get_without_cache, rb_method_entry):
- Fill method cache entry with vm state version, and
- check current vm state version for method (cache) look up.
- This modification speed-up invalidating of global method cache table.
- [Ruby 1.9 - Feature #3905] [ruby-core:36908]
-
-Sun Jun 12 16:19:48 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: fail on Mac OS X. [Bug #4853][ruby-dev:43655]
-
-Sun Jun 12 15:56:08 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c: remove th->transition_for_lock. It's thread unsafe.
- [Bug #4723][ruby-dev:43563]
-
-Sun Jun 12 15:47:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c: introduce spurious wakeup safe deadlock check.
- [Bug #4696][ruby-dev:43554]
-
-Sun Jun 12 13:33:52 2011 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/bm_vm3_thread_mutex.rb: remove it.
-
- * benchmark/bm_vm3_thread_mutex[1-3].rb: added 3 benchmarks.
- 1: one thread with one mutex (no contention).
- 2: two threads with one mutex (contention).
- 3: 1000 threads with one mutex (huge number of contention)
- Above removed benchmark was type 3.
- Therefore, this commit adds type 1 and 2 benchmark.
-
-Sun Jun 12 11:16:59 2011 Tanaka Akira <akr@fsij.org>
-
- * io.c: use select() appropriately for sendfile().
- Fixed by Eric Wong. [ruby-core:36150]
- (maygvl_copy_stream_wait_readwrite): removed.
- (nogvl_copy_stream_sendfile): use nogvl_copy_stream_wait_write and
- maygvl_copy_stream_wait_read instead of
- maygvl_copy_stream_wait_readwrite.
-
-Sun Jun 12 09:32:13 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * atomic.h (ATOMIC_OR): _InterlockedOr is not available on mingw.h
- * gc.c (rb_gc_set_params): VM_OBJSPACE is disabled on mingw.
-
-Sun Jun 12 01:07:09 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: edited doc.
-
-Sat Jun 11 23:18:00 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * vm_core.h (RUBY_VM_SET_TIMER_INTERRUPT, RUBY_VM_SET_INTERRUPT,
- RUBY_VM_SET_FINALIZER_INTERRUPT): use atomic ops for preventing
- interrupt_flag bit lost. [Bug #4770][ruby-dev:43467]
- * thread.c (rb_threadptr_execute_interrupts_rec): ditto.
- * vm_core.h (typedef struct rb_thread_struct): change type of
- interrupt_flag to rb_atomic_t.
- * atomic.h: move atomic ops definition from signal.c.
- * signal.c: remove atomic ops definition.
- * common.mk (gc, signal, thread, cont): add to dependency to atomic.h.
-
-Sat Jun 11 23:23:52 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: edited doc.
-
-Sat Jun 11 23:02:36 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * ext/openssl/lib/openssl/buffering.rb (module OpenSSL):
- Buffering#each_byte should return String in accordance with IO in
- 1.9.
-
- * test/openssl/test_buffering.rb (class OpenSSL): add tests for getc
- and each_byte.
-
-Sat Jun 11 22:41:37 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * time.c: a correction of doc for strftime (%v).
-
-Sat Jun 11 22:30:53 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: replaced doc for strftime based on Time's one.
-
-Sat Jun 11 22:07:56 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (datetime_s_{iso8601,rfc3339,xmlschema,rfc2822,httpdate}):
- do not take argument comp.
-
-Sat Jun 11 21:58:31 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: added examples.
-
-Sat Jun 11 19:40:45 2011 Narihiro Nakamura <authornari@gmail.com>
-
- * gc.c: expand heap if initial_heap_min_slots is bigger than
- HEAP_MIN_SLOTS.
-
-Sat Jun 11 19:42:50 2011 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ChangeLog (vim): set shiftwidth to 2.
-
-Sat Jun 11 19:27:06 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_x509req.c: raise RequestError instead of
- CertificateError when Request#to_der gets an error from OpenSSL.
- Patch from Ippei Obayashi, see #4420. I cannot write a test for
- this... Request does not allow to create broken bytes...
-
-Sat Jun 11 19:34:51 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (Date::(ABBR_)?(MONTH|DAY)NAMES): should be usascii.
-
-Sat Jun 11 19:24:33 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: rewrote doc.
-
-Sat Jun 11 19:04:15 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit::GlobOption#non_options): should run
- with 1.8.
-
-Sat Jun 11 18:05:57 2011 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * bootstraptest/runner.rb: should initialize $stress to avoid warnings.
-
-Sat Jun 11 18:02:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_getc): should be 7bit if ascii. fixes #4557
-
-Sat Jun 11 16:52:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (rb_enc_uint_chr): fix message format. Bug#4869
-
-Sat Jun 11 16:28:25 2011 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rexml/formatters/pretty.rb
- (REXML::Formatters::Pretty#write_text),
- test/rexml/test_core.rb
- (Tester#test_pretty_format_long_text_finite): don't ignore
- 'width' parameter in pretty formatter. fixes #4498
- Reported by Michael Frasca. Thanks!!!
-
-Sat Jun 11 16:11:36 2011 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/test_core.rb
- (Tester#test_pretty_format_long_text_finite): remove needless
- assert_nothing_raised.
-
-Sat Jun 11 16:04:03 2011 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rexml/parsers/xpathparser.rb
- (REXML::Parsers::XPathParser#parse),
- test/rexml/test_elements.rb
- (ElementsTester#test_each_with_frozen_condition):
- don't modify original XPath. fixes #4161
- Reported by Pavel Shved. Thanks!!!
-
-Sat Jun 11 15:53:27 2011 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/test_elements.rb (ElementsTester): remove needless
- prefix from test name.
-
-Sat Jun 11 15:36:36 2011 Martin Duerst <duerst@it.aoyama.ac.jp>
- * common.mk: fixed a grammatical error
-
-Sat Jun 11 14:20:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * vm.c (thread_memsize): don't ignore size of th->local_storage.
-
-Sat Jun 11 10:32:46 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb: should quote arch_hdrdir and libpath for the case
- installed prefix contains spaces.
-
-Sat Jun 11 10:20:52 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (native_cond_timeout): wrap conditionally used
- label.
-
- * thread_pthread.c (native_sleep): remove unused variable.
-
-Sat Jun 11 10:15:50 2011 Tanaka Akira <akr@fsij.org>
-
- * thread.c (rb_thread_execute_interrupts): use GetThreadPtr to extract
- rb_thread_t from VALUE.
- reported by Motohiro KOSAKI. [ruby-dev:43700]
-
-Sat Jun 11 10:00:49 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_process_options): add missing return type.
-
-Fri Jun 10 23:18:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/tk/tcltklib.c (lib_eventloop_core): replace CHECK_INTS with
- rb_thread_check_ints(). Because current code can't be compiled.
-
-Fri Jun 10 16:38:13 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_locale_charmap): When ruby process is run as Windows
- Service the console codepage is not set, GetConsoleCP returns 0.
- So on such environment, use GetACP().
- http://blogs.msdn.com/b/michkap/archive/2005/02/08/369197.aspx
- patched by Rafal Bigaj [ruby-core:36832] [Bug #4854]
-
-Fri Jun 10 14:34:24 2011 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: restore TESTRUN_SCRIPT to "$(srcdir)/test.rb".
- TESTRUN_SCRIPT is used by "make run", "make gdb" and so on.
-
-Fri Jun 10 13:01:24 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_module.rb (TestModule#remove_rake_mixins): remove all
- module related to Rake.
-
-Fri Jun 10 09:52:38 2011 Eric Hodel <drbrain@segment7.net>
-
- * encoding.c: Mention that Encoding.compatible? can work with more
- than just Strings.
-
-Fri Jun 10 02:25:53 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych.rb: updating version to match released gem.
-
-Fri Jun 10 01:06:29 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/bigdecimal (BigDecimal_to_i): Integer#** may return flonum.
-
-Fri Jun 10 00:35:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (string_to_c_internal): uses rb_reg_nth_match;
- * rational.c (string_to_r_internal): ditto.
-
-Fri Jun 10 00:25:03 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * gc.c: remove an unused declaration.
-
-Fri Jun 10 00:24:04 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (string_to_r): Rational#** may return flonum.
-
-Thu Jun 9 23:57:53 2011 Tanaka Akira <akr@fsij.org>
-
- * io.c: fix IO.copy_stream interrupt handling.
- based on the patch by Eric Wong. [ruby-core:36156]
-
- * vm_core.h (rb_thread_call_with_gvl): don't declare here.
-
- * thread.c: include internal.h.
- (rb_thread_execute_interrupts): new function.
-
- * internal.h (rb_thread_execute_interrupts): declared.
- (rb_thread_call_with_gvl): declared.
-
-Thu Jun 9 23:34:01 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * gc.c (rb_objspace_call_finalizer): use rb_typeddata_is_kind_of() for
- type check to get rid of a double free when main Thread has singleton
- class. [ruby-core:36741] [Bug #4828]
- * thread.c (rb_obj_is_mutex): add a new utility function.
- * vm.c (rb_obj_is_thread): ditto.
-
-Thu Jun 9 22:53:49 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * test/ruby/test_thread.rb (TestThread#test_kill_thread_subclass):
- add test for Thread.kill with Thread subclass instance.
-
-Thu Jun 9 22:31:47 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * test/ruby/test_thread.rb (TestThread#test_kill_wrong_argument):
- test for [ruby-core:35086].
- partially forward porting r31402 from ruby_1_9_2 branch.
-
-Thu Jun 9 18:36:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * string.c: Fix the ambiguous description of the behavior of
- rb_str_aref_m with a range. It returns nil when the beginning of
- the range is greater than the end of the string rather than the range.
-
-Thu Jun 9 10:57:03 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/to_ruby.rb: Hash subclasses can be read
- from YAML files.
- * ext/psych/lib/psych/visitors/yaml_tree.rb: Hash subclasses can be
- dumped to YAML files.
- * test/psych/test_hash.rb: corresponding test.
-
-Thu Jun 9 09:18:51 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/to_ruby.rb: Ruby modules can be loaded
- from YAML files.
- * ext/psych/lib/psych/visitors/yaml_tree.rb: Ruby modules can be
- dumped to YAML files.
- * test/psych/test_class.rb: corresponding test.
-
-Thu Jun 9 09:05:04 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/to_ruby.rb: Ruby classes can be loaded
- from YAML files.
- * ext/psych/lib/psych/visitors/yaml_tree.rb: Ruby classes can be
- dumped to YAML files.
- * test/psych/test_class.rb: corresponding test.
-
-Wed Jun 8 21:38:57 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * cont.c (root_fiber_alloc): set root fiber's status RUNNING.
- in cont_mark() only RUNNING fiber's machine stack is marked.
- root fiber's status should be RUNNING at the beginning regardless of
- FIBER_USE_NATIVE. [ruby-core:36735] fixes #4827
-
-Tue Jun 7 20:50:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * doc/irb/irb.rd: fix typo. patch by Nobuhiro IMAI.
- [Bug #4843] [ruby-dev:43639]
- * doc/irb/irb.rd.ja: ditto.
- * doc/ChangeLog-YARV: ditto.
-
-Tue Jun 7 18:52:55 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/rubygems/user_interaction.rb (Gem::StreamUI#tty?): IO#tty? of
- Windows has been fixed at r29969.
-
- * test/rubygems/test_gem_stream_ui.rb: now can run tests.
-
-Tue Jun 7 18:36:41 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/rubygems/test_gem.rb (TestGem#{test_self_user_home_userprofile,
- test_self_user_home_user_drive_and_path}): should simply ignore
- meaningless tests instead of skipping them.
-
-Tue Jun 7 18:15:00 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_set_program_name):
- should show some messages when skipping tests.
-
-Tue Jun 7 13:59:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/date/date_core.c (date_s_today, datetime_s_now): check the
- result of localtime_r().
-
-Tue Jun 7 13:36:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tk/extconf.rb: use $defs not $CPPFLAGS to get rid of
- command line escape issues on Windows. fixed #4835.
-
-Tue Jun 7 03:18:45 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_io.rb (TestIO#test_s_{,bin}write): do not create a
- file under /tmp. [Bug #4846]
-
-Mon Jun 6 22:51:43 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * cont.c: use #if FIBER_USE_NATIVE instead of #ifdef.
- you can suppress use of setcontext for Fiber with compile option
- -DFIBER_USE_NATIVE=0
-
-Mon Jun 6 21:59:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/date/test_switch_hitter.rb: added a test.
-
-Mon Jun 6 21:37:45 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: added notes.
-
-Mon Jun 6 21:02:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: flattened format to strftimev.
- * ext/date/date_core.c (date_strftime_internal): taints run.
-
-Mon Jun 6 15:10:17 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/{defines,missing}.h (rb_infinity, rb_nan): move from
- defines.h to missing.h. (couldn't use RUBY_EXTERN there.)
-
-Mon Jun 6 14:35:48 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/rdoc/test_rdoc_markup_pre_process.rb (TestRDocMarkupPreProcess#
- {test_include_file,test_include_file_encoding_incompatible}): no
- need to write such workaround. don't hide the bug of ruby. (and the
- bug is already fixed.)
-
-Mon Jun 6 14:11:11 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/date/date_core.c (valid_jd_sub): need to convert from VALUE to
- double.
-
- * ext/date/date_core.c (offset_to_sec): get rid of a compiler warning.
-
-Mon Jun 6 14:09:08 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/defines.h (rb_infinity, rb_nan): export for Windows.
-
-Mon Jun 6 10:54:45 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit.rb(Test::Unit::Runner#puke):
- Add overriding from MiniTest::Unit#puke. This reverts minitest's fix
- that skip messages are hidden when not verbose mode (-v option).
- To hide skip messages, use --hide-skip option instead.
-
-Mon Jun 6 10:52:13 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb: don't use autoload.
-
-Mon Jun 6 09:39:43 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/parser.c (parse): release event objects to plug memory
- leak. Thanks Mark J. Titorenko!
-
-Sun Jun 5 23:26:15 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * eval.c: remove rb_thread_stop_timer_thread function declaration.
- Instead, include vm_core.h.
- * process.c: ditto.
-
-Sun Jun 5 21:38:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (thread_timer): add to care a spurious wakeup.
- When native_cond_timedwait() return 0 by spurious wakeup, we
- don't have to neither 1) call timer_thread_function and 2)
- exit the timer thread.
-
-Sun Jun 5 17:50:01 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (m_real_cwyear): new. derived from m_cwyear.
- * ext/date/date_strftime.c: trivial changes.
-
-Sun Jun 5 17:22:01 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/config_list.in: add new options for tcltklib.
-
-Sun Jun 5 10:06:50 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_tmx.h: now does not place decoded data. allows to
- access indirectly via functions on demand.
- * ext/date/date_strftime.c: ditto.
- * ext/date/date_core.c: ditto.
- * ext/date/date_core.c ({d|dt}_lite_to_s): use strftime.
-
-Sun Jun 5 06:22:02 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * NEWS: wrote about changes of date.
-
-Sat Jun 4 16:59:26 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (d_lite_inspect): changed the format.
- * ext/date/date_core.c: refactoring and fixing some bugs.
-
-Sat Jun 4 11:30:57 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * class.c (check_mix_method_i, do_mix_method_i): not mix methods
- renamed as nil.
-
-Sat Jun 4 04:04:41 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/rubygems/test_gem_commands_which_command.rb:
- "missing" exists on ruby's top source directory. [Bug #4815]
-
-Fri Jun 3 21:48:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rubygems/test_case.rb: Refix for test-all in separate directory.
- r31147 + r31151.
-
-Fri Jun 3 20:58:47 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/date/date_core.c (d_lite_plus): get rid of compiler warnings.
-
-Fri Jun 3 20:56:40 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/missing.h, numeric.c (round): moved prototype of round()
- from numeric.c to missing.h. (note: round() is C99 feature, so ruby
- provides it if not exist in C runtime.)
-
-Fri Jun 3 20:42:04 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit/parallel.rb: Keep $stdin, $stdout before run testcase
- and restore after run. Because some test break $stdin, $stdout.
- Fixes [Bug #4433] [ruby-core:35353]
-
-Fri Jun 3 19:58:14 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (io_fflush): windows -- call fsync() only when the FD is tied to
- file, because if the FD is pipe, it blocks.
-
-Fri Jun 3 09:27:31 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb (URI::HTTP#request_uri): return nil when the uri
- is path-rootless form. Bug #4759
-
-Thu Jun 2 23:51:03 2011 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Improve the line ending detection algorithm
- patch by Alexey).
-
-Thu Jun 2 20:05:57 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (rb_io_s_write, rb_io_s_binwrite): return!!!
-
-Thu Jun 2 16:29:34 2011 Shota Fukumori <sorah@tubusu.net>
-
- * io.c: Add File.write, File.binwrite. [Feature #1081] [ruby-core:21701]
-
- * test/ruby/test_io.rb: Test for File.write, File.binwrite.
-
- * NEWS: News for above.
-
-Thu Jun 2 12:33:09 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (io_fflush, rb_io_flush): need to fsync() when ruby calls
- internal flush. [ruby-core:36670] [Bug #4813]
-
-Thu Jun 2 07:56:24 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: reduce CPU power required by an eventloop.
-
-Tue May 31 21:28:33 2011 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_signal.rb (TestSignal#test_signal_requiring):
- redirect stderr to null device.
-
-Thu Jun 2 00:45:26 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: fix for uninitialized global variables.
- [Ruby 1.9 - Bug #4811]
-
-Wed Jun 1 21:57:08 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (native_sleep): fix 1000times calculation error.
- this is a regression since r31457. [Bug #4808] [ruby-dev:43606]
-
-Wed Jun 1 17:19:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c: remove unused macro.
-
-Wed Jun 1 15:42:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (peek_n): new macro to see next nth char.
-
-Wed Jun 1 15:40:46 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/rbinstall.rb (gem): fix for rubygems change.
-
-Wed Jun 1 14:07:57 2011 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*: Imported minitest 2.2.2 (r6281)
- * test/minitest/*: ditto
-
-Wed Jun 1 12:35:50 2011 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/rubygems*: Import rubygems 1.8.5 (released @ 137c80f)
- * test/rubygems: Ditto
-
-Wed Jun 1 12:34:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * NEWS: add new features of bigdecimal.
-
-Wed Jun 1 09:41:14 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/cgi/util.rb: Improve documentation. Patch by Kuba Fietkiewicz.
- [Ruby 1.9 - Bug #4775]
- * lib/cgi/core.rb: ditto
-
-Wed Jun 1 09:26:05 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/mathn.rb: Improve documentation and attach it to Numeric.
- Modified from patch by Anil V. [Ruby 1.9 - Bug #4762]
-
-Wed Jun 1 09:21:30 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/prime.rb: Indent examples enough to appear as code sections.
- Note that Prime is Enumerable. [#4762]
-
-Wed Jun 1 07:34:57 2011 Eric Hodel <drbrain@segment7.net>
-
- * hash.c (key_i): Change rdoc from "the first occurrence" to "an
- occurrence" since first occurrence is not a specification of
- Hash#key. [Ruby 1.9 - Bug #4760]
-
-Wed Jun 1 07:26:19 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/pty/pty.c (pty_check): Restore "not reached" comment.
- [Ruby 1.9 - Bug #4756]
-
-Wed Jun 1 07:21:40 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/zlib/zlib.c: Fix document-method declarations for set_sync and
- set_comment. [Ruby 1.9 - Bug #4695]
-
-Wed Jun 1 06:43:13 2011 Masaya Tarui <tarui@ruby-lang.org>
-
- * load.c (loaded_feature_path): cut nonsense loop execution to fix
- performance bug.
-
-Wed Jun 1 01:16:02 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * class.c (rb_mix_module): implement Module#mix.
-
-Wed Jun 1 01:15:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_encoding_set): should honor already set ecflags since it
- might be set by mode option. fixed #4804
-
-Wed Jun 1 00:34:04 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec): remove unused
- variable.
-
-Wed Jun 1 00:32:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec): support instantiation from
- a Float through Rational.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_new): ditto.
-
- * test/bigdecimal/test_bigdecimal.rb (test_global_new_float): add a test for
- the above changes.
-
- * test/bigdecimal/test_bigdecimal.rb (test_new_with_float): ditto.
-
-Wed Jun 1 00:07:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_coerce): support coerce with a
- Rational. The precision used for instantiate a BigDecimal from the
- given Rational is obtained from the receiver BigDecimal.
-
- * test/bigdecimal/test_bigdecimal.rb (test_coerce): add a test for the
- above change.
-
-Tue May 31 23:49:08 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (offset_to_sec): fixed invalid validation.
-
-Tue May 31 23:43:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec): replace the algorithm for
- coercing from a Rational to stop requiring "bigdecimal/util.rb".
- [ruby-core:34318]
-
- * ext/bigdecimal/bigdecimal.c (GetVpValue): refactoring.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_new): support instantiation from a
- Rational.
-
- * test/bigdecimal/test_bigdecimal.rb (test_global_new_with_rational): add a
- test for the above change.
-
- * test/bigdecimal/test_bigdecimal.rb (test_new_with_rational): ditto.
-
-Tue May 31 22:44:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_new): support instantiation a
- BigDecimal object from an Integer.
-
- * test/bigdecimal/test_bigdecimal.rb (test_new_with_integer):
- add for testing the above change.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_global_new): replace its body
- with a BigDecimal_new call.
-
- * test/bigdecimal/test_bigdecimal.rb (test_global_new_with_integer):
- add for testing the above change.
-
-Tue May 31 22:24:39 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: use simple/complex mode instead of light/right mode.
- * test/date/*.rb: followed the above changes.
-
-Tue May 31 21:28:33 2011 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_signal.rb (TestSignal#test_signal_requiring):
- initialize SIGINT handler.
-
-Tue May 31 17:03:24 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * lib/net/http.rb, lib/net/protocol.rb: Allow to configure to wait
- server returning '100 continue' response before sending HTTP request
- body. See NEWS for more detail. See #3622.
- Original patch is made by Eric Hodel <drbrain@segment7.net>.
-
- * test/net/http/test_http.rb: test it.
-
- * NEWS: Add new feature.
-
-Tue May 31 14:17:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (rb_io_s_pipe): potential bug. the mode of read IO is set as
- DEFAULT_TEXTMODE in call of io_set_encoding(), and of write IO is
- also set as it in call of io_new_instance() via rb_protect().
- so, if DEFAULT_TEXTMODE is not 0, we should check the result of
- extract_binmode() and avoid crush of default IO mode and the result.
-
-Tue May 31 13:00:17 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * strftime.c (rb_strftime_with_timespec): improved style consistency.
- constified some variables.
-
- * test/test_time.rb (TestTime#test_huge_precision): test for #4456.
-
-Tue May 31 12:53:10 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/io/wait/test_io_wait.rb (TestIOWait#{test_nread,test_ready?,
- test_wait}: give system some time to process the written data.
-
-Tue May 31 12:40:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_io.rb (TestIO#test_open_mode): MUST release resources
- explicitly. fix problem of r31671
-
-Tue May 31 10:49:55 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vm_exec.c: remove conditions for clang
- because clang version 3.0 (trunk 132165) doesn't need them.
-
-Mon May 30 22:19:33 2011 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_signal.rb (TestSignal#test_signal_requiring): don't
- close stderr.
-
-Mon May 30 20:22:00 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_signal.rb (TestSignal#test_signal_requiring): small
- but critical typo of r31642. sorry...
- [Bug #4798] [ruby-core:36550]
-
-Mon May 30 15:44:16 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * insns.def (opt_mult): as r31805, volatile it.
- Without this, clang -O fails calculation.
-
- * numeric.c (fix_mul): ditto.
-
- * rational.c (f_imul): ditto.
-
-Mon May 30 10:26:51 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric.c (int_pow): make sure to assign the result of x * z.
- If xz is optimized out, the value won't overflow.
-
-Sun May 29 23:17:29 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_match): fix rdoc of Regexp#=~.
- patched by Tsuyoshi Sawada. [Bug #4781]
-
-Sun May 29 23:10:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/webrick/https.rb (WEBrick::HTTPRequest#parse_uri):
- keep parse_uri as private. patched by okkez. [Bug #4773]
-
-Sun May 29 17:53:03 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * numeric.c: add #include "internal.h" for rb_big_uminus() prototype.
-
-Sun May 29 15:09:05 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_round): fix for negative value.
-
-Sun May 29 02:16:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/net/http/utils.rb (TestNetHTTPUtils#teardown): add nil check.
-
-Sun May 29 00:22:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (before_exec, after_exec): change from macro to function.
-
-Sat May 28 19:30:17 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (before_exec, after_exec): change SIGPIPE handler to SIG_DFL
- before calling execve(). Because r31760 reintroduced an issue that
- system() may hang up (i.e. [ruby-dev:12261]).
- * process.c (save_sigpipe, restore_sigpipe): new.
-
-Sat May 28 16:08:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * signal.c (Init_signal, default_handler): change default SIGPIPE handler
- from empty function to SIG_IGN. [ruby-dev:43215]
- * signal.c (sigpipe): removed.
-
-Sat May 28 03:04:27 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (fill_cbuf): return MORE_CHAR_SUSPENDED when cbuf is not empty.
-
-Sat May 28 02:22:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * string.c (rb_str_bytesize): rb_str_bytesize() should use LONG2NUM().
- Patch by Nikolai Weibull. [Bug #4789] [ruby-core:36511]
-
-Sat May 28 02:06:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (fill_cbuf): Fix test-all crash.
-
-Sat May 28 00:58:40 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/ostruct.rb (method_missing): Handle [] and []= correctly.
- Based on a patch by Caius Durling, bug #4179 [ruby-core:33792]
-
-Fri May 27 23:56:54 2011 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/test_core.rb (Tester::test_text_frozen): split frozen
- string test. refs #4783
-
-Fri May 27 22:46:23 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/rbinstall.rb (gem): install gemspec of json. fixed #4784
-
-Fri May 27 22:45:10 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (validate_enc_binmode): do not clear textmode flag if
- default. fixed #4732
-
- * io.c (fill_cbuf): finish reading at EOF.
-
-Fri May 27 11:31:51 2011 misfo <tedwardo2@gmail.com>
-
- * lib/rexml/text.rb (REXML::Text#initialize): prevent an error
- when passing a frozen string to REXML::Text.new
-
- dup the string passed in instead of cloning so that it's frozen
- state is ignored
-
-Fri May 27 08:47:26 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * thread.c (ppoll): typo bug fix.
-
-Fri May 27 08:35:04 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: hang-up at exit before calling Tk.mainloop.
-
- * ext/tk/lib/tk/extconf.rb: cannot make on MinGW [Ruby 1.9 - Bug #4141].
-
-Thu May 27 00:34:07 2011 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Enhance each() to support Enumerator.
-
-Thu May 26 10:32:11 2011 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Documentation improvements from Ysiad Ferreiras.
- [Ruby 1.9 - Bug #4785]
-
-Thu May 26 15:42:02 2011 Cezary Baginski <cezary.baginski@gmail.com>
-
- * lib/xmlrpc/parser.rb (FaultException): fix to_s and inspect
-
- * test/xmlrpc/parser.rb: test for the above
-
-Wed May 25 11:54:31 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/curses/curses.c: Remove color constants block.
- [Ruby 1.9 - Bug #4748]
-
-Wed May 25 09:56:45 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/curses/curses.c: Add missing documentation for button state, MIN
- and MAX comments. Add Curses. to TABSIZE= and ESCDELAY= methods.
- [Ruby 1.9 - Bug #4747]
-
-Wed May 25 09:35:31 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/benchmark.rb: Restore nodoc for Benchmark::Job and
- Benchmark::Report. [Ruby 1.9 - Bug #4726]
-
-Wed May 25 09:29:38 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/net/pop.rb: Hide implementation details from RDoc.
- [Ruby 1.9 - Bug #4711]
-
-Wed May 25 09:26:29 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/net/ftp.rb: Add :nodoc: for private methods.
- [Ruby 1.9 - Bug #4710]
-
-Wed May 25 09:19:17 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/zlib/zlib.c: Fix Document-method declarations. Improve
- Zlib::GzipFile's method catalog. [Ruby 1.9 - Bug #4695]
-
-Wed May 25 08:22:12 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/erb.rb: Hide documentation for implementation details of ERB.
- [Ruby 1.9 - Bug #4694]
-
-Wed May 25 07:58:14 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile.{mkdir,rmdir}): revert for backward
- compatibility.
-
-Wed May 25 07:13:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * spec/README: update the description.
-
-Wed May 25 07:12:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile.{lock,unlock}_tempfile): refactor.
-
-Tue May 24 17:30:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * spec/README: fix typo.
- patched by bowsersenior. https://github.com/ruby/ruby/pull/24
-
-Tue May 24 07:06:34 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: fail to start Tk.mainloop (exit immediately) on
- some environment (reported on [ruby-talk:381444]).
-
- * ext/tk/lib/tk/canvas.rb: support creating a canvas item object from
- an item ID number.
-
- * ext/tk/lib/tk/image.rb: import documents which are pull-requested.
- [Ruby 1.9 - Feature #4595]
-
- * ext/tk/lib/tk/extconf.rb: search directories for 64bit library (e.g.
- /usr/lib64), add some new configure options (see README.tcltklib),
- and bug fix.
-
- * ext/tk/lib/tk/README.tcltklib: modify docs for some new configure
- options.
-
-Tue May 24 04:01:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/yaml.rb: switch default YAML engine to Psych, old syck engine
- may be enabled via YAML::ENGINE.yamler = "syck". [ruby-core:36374]
-
-Mon May 23 09:45:26 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * include/ruby/defines.h (CASEFOLD_FILESYSTEM): Revert r30508. Forgot to
- include this file in the commit r31692. __APPLE__ is not
- CASEFOLD_FILESYSTEM again, from this time.
-
-Mon May 23 10:01:02 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_asn1.c: Do not parse zero-tagged values as EOC. Do
- not let current length become negative for infinite length constructed
- values. Support constructed values of length zero. Added tests.
-
-Mon May 23 09:19:53 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/net/smtp.rb: Document Net::SMTP::Response. Patch by J.R. Garcia.
- [Ruby 1.9 - Bug #4768]
-
-Mon May 23 09:03:52 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit/parallel.rb: Never Ignore SIGINT. When received
- Interrupt, immediately puts result and exit. [ruby-dev:43571]
-
- * lib/test/unit.rb: When received Interrupt, wait results from workers
- and collect them. [ruby-dev:43571]
-
-Mon May 23 09:08:07 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/mathn.rb: Improve documentation. Patch by Sandor Szucs.
- [Ruby 1.9 - Bug #4767]
-
-Mon May 23 08:45:55 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/ostruct.rb: Improve documentation. Patch by Franklin Webber.
- [Ruby 1.9 - Bug #4761]
-
-Mon May 23 08:35:24 2011 Eric Hodel <drbrain@segment7.net>
-
- * hash.c: Improve documentation of Hash#key. Patch by Utkarsh
- Kukreti. [Ruby 1.9 - Bug #4760]
-
-Mon May 23 08:32:59 2011 Eric Hodel <drbrain@segment7.net>
-
- * enumerator.c: Improve documentation. Patch by Dave Copeland.
- [Ruby 1.9 - Bug #4757]
-
-Mon May 23 07:19:45 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * NEWS (openssl): Infinite length support. Different behavior of
- Constructive and Primitive constructors.
-
-Mon May 23 06:58:33 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_asn1.c: Forbid Constructives whose value is not an
- Array to prevent segfault. Added test.
-
-Mon May 23 06:33:17 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_asn1.c: Forbid Constructive without infinite
- length. This also prevents a segfault. Added test and improved
- documentation.
-
-Mon May 23 05:58:14 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_asn1.c: Fix decoding of infinite length values.
- Simplified ossl_asn1_decode0 by splitting it into three separate
- functions. Add tests.
- [Ruby 1.9 - Bug #4374][ruby-core:35123]
-
-Mon May 23 04:03:46 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_asn1.c (ossl_asn1_initialize): Allow creation of
- Constructives with an explicit tag_class parameter without
- automatically setting tagging to :EXPLICIT. Fixes a bug when encoding
- infinite length primitive values.
-
-Mon May 23 04:03:46 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_asn1.c (ossl_asn1_cons_to_der): Add an additional
- EOC for infinite length Constructives that are supposed to be encoded
- with explicit tagging. Also tabify method correctly.
-
-Mon May 23 03:44:39 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_asn1.c (ossl_asn1data_to_der): Remove redundant
- flag tmp_cons.
-
-Mon May 23 00:35:00 2001 Kenta Murata <mrkn@mrkn.jp>
-
- * bignum.c (dump_bignum, bigmul1_balance, big_split, biglsh_bang),
- (bigrsh_bang, big_split3, bigmul1_toom3, bigmul0): implement Toom3 (Toom-Cook)
- multiplication.
-
- * include/ruby/defines.h: add format prefixes for BDIGIT and BDIGIT_DBL.
-
-Sun May 22 23:24:02 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_asn1.c: Instead of rb_intern use static symbols to
- improve performance.
-
-Sun May 22 21:56:51 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_asn1.c: Use OpenSSL constants V_ASN1_xxx instead of
- hardcoded numbers for initializing class_tag_map.
-
-Sun May 22 21:29:29 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * include/ruby/defines.h (CASEFOLD_FILESYSTEM): Revert r30508. See #4255.
- Now __APPLE__ is not CASEFOLD_FILESYSTEM again.
-
- * load.c (loaded_feature_path, rb_feature_p, load_lock): Revert r30508.
- See #4255. Make $LOADED_FEATURES scanning case-sensitive again.
-
-Sun May 22 18:59:27 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_asn1.c(ossl_asn1_default_tag): avoid using RCLASS_SUPER
- to make it compilable. Plus, tabify and change variable definition style.
-
-Sun May 22 18:26:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (vm_xcalloc): use calloc provided by platforms.
- fixes #4754
-
-Sun May 22 11:44:53 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/pty/pty.c: Improve documentation. Patch by David Copeland.
- [Ruby 1.9 - Bug #4756]
-
-Sun May 22 11:26:39 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/timeout.rb: Improve documentation. Patch by David Copeland.
- [Ruby 1.9 - Bug #4755]
-
-Sun May 22 11:21:41 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/ipaddr.rb: Improve documentation. Patch by Sandor Szucs.
- [Ruby 1.9 - Bug #4753]
-
-Sun May 22 11:14:40 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/forwardable.rb: Document def_delegator. Patch by Sandor Szucs.
- [Ruby 1.9 - Bug #4752]
-
-Sun May 22 11:11:41 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/fileutils.rb: Document block behavior of FileUtils.cd. Patch by
- Bil Kleb. [Ruby 1.9 - Bug #4751]
-
-Sun May 22 11:07:47 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/curses/curses.c: Complete documentation. Patch by Vincent
- Batts. [Ruby 1.9 - Bug #4748]
-
-Sun May 22 09:29:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_set_program_name):
- use spawn. it prevent that other tests inherit renamed $0.
-
-Sun May 22 08:57:13 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_asn1.c: Default tag lookup in constant time via hash
- instead of previous linear algorithm.
- [Ruby 1.9 - Feature #4309][ruby-core:34813]
-
-Sun May 22 07:54:16 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_digest.c: Explain DSS and DSS1 in documentation.
-
-Sun May 22 07:10:25 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * test/openssl/test_pkey_dsa.rb: Add tests for sign/verify.
-
-Sun May 22 06:07:17 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * test/openssl/test_x509cert.rb: Merge DSA-related tests from ruby_1_8
- branch.
-
-Sun May 22 04:11:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (Init_Thread): add a code comment why the meaningless
- line is necessary.
-
-Sun May 22 01:35:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: modified documentation.
-
-Sat May 21 22:46:26 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_strftime(date_strftime_with_tmx): "%v" means "%e-%b-%Y".
-
-Sat May 21 22:14:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (rb_io_extract_modeenc): accept combination hash and
- File::Constants. (eg. File.open('yo', :mode => File::WRONLY))
- [Feature #4742][ruby-core:36338]
- * test/ruby/test_io.rb (TestIO#test_open_mode): new test.
-
-Sat May 21 21:44:14 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/date/test_switch_hitter.rb: new.
-
-Sat May 21 21:18:29 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_{core,parse}.c: moved nearly all core code from ext/date/lib.
- * ext/date/lib/{date,date/format}.rb: removed nearly all code.
-
-Sat May 21 02:58:46 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/.document: Add curses to documented extensions.
- * ext/curses/curses.c: Improve documentation. Patch by Vincent Batts.
- [Ruby 1.9 - Bug #4747]
-
-Sat May 21 02:51:01 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/bigdecimal/lib/bigdecimal/util.rb: Improve documentation. Patch
- by Pete Higgins. [Ruby 1.9 - Bug #4746]
-
-Sat May 21 02:44:10 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/bigdecimal/lib/bigdecimal/jacobian.rb: Document isEqual. Patch
- by Kuba Fietkiewicz. [Ruby 1.9 - Bug #4744]
-
-Sat May 21 02:22:34 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/date/lib/date/format.rb: Document date formats. Patch by
- Clinton Nixon. [Ruby 1.9 - Bug #4743]
-
-Fri May 20 05:15:19 2011 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
-
- * gc.c: Fix build on m68k by 'error: too few arguments to
- function 'mark_locations_array''.
-
-Fri May 20 04:23:42 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/scanf.rb: Improve documentation. Patch by Gabe McArthur.
- [Ruby 1.9 - Bug #4735]
-
-Fri May 20 00:58:01 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/trans/ibm737-tbl.rb: greek code page. fixes #4738
-
-Thu May 19 14:44:05 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_signal.rb (test_signal_requiring): skip on Windows.
- we can send SIGINT only to pid 0 and the process itself.
-
-Thu May 19 09:07:08 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib: revert r31635-r31638 and untabify with expand(1).
-
-Thu May 19 07:47:26 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * test/openssl/test_pkey_rsa.rb: Add tests for sign/verify.
-
-Thu May 19 07:19:16 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_pkey.c: Add documentation.
-
-Thu May 19 07:06:56 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/benchmark.rb: Fix indentation.
- * lib/net/imap.rb: Fix indentation of regular expressions.
-
-Thu May 19 06:36:11 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/net/imap.rb: Fix indentation of EOF for heredoc.
- * lib/debug.rb (Commands): Fix indentation of EOHELP for heredoc.
-
-Thu May 19 06:30:38 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/mkmf.rb: Fix indentation of EOM for heredoc.
-
-Thu May 19 06:16:41 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib: Convert tabs to spaces for ruby files per
- http://bugs.ruby-lang.org/projects/ruby/wiki/DeveloperHowto#coding-style
- Patch by Steve Klabnik [Ruby 1.9 - Bug #4730]
- Patch by Jason Dew [Ruby 1.9 - Feature #4718]
-
-Thu May 19 06:06:07 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/cgi/util.rb: Improve documentation. Patch by Clinton Nixon.
- [Ruby 1.9 - Bug #4733]
- * lib/cgi/core.rb: ditto
- * lib/cgi/cookie.rb: ditto
-
-Thu May 19 06:02:21 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/tempfile.rb: Document Dir.mkdir and Dir.rmdir. Patch by Clinton
- Nixon. [Ruby 1.9 - Bug #4728]
-
-Thu May 19 05:57:52 2011 Eric Hodel <drbrain@segment7.net>
-
- * encoding.c: Improve documentation for Encoding#default_external and
- Encoding#default_internal.
-
-Wed May 18 22:45:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/console/lib/console/size.rb (IO#console_size): new
- method. (EXPERIMENTAL)
-
-Wed May 18 22:41:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * internal.h: add for internal use only.
-
-Wed May 18 22:36:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (setup_exception): internal exception should be hidden
-
-Wed May 18 20:25:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * lib/timeout.rb (Timeout#timeout): don't leak "execution expired"
- exception. [Bug #4283] [ruby-core:34534].
-
-Wed May 18 06:09:24 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/cmath.rb: Add some examples and improve documentation. Patch by
- Sandor Szucs. [Ruby 1.9 - Bug #4727]
-
-Wed May 18 05:40:31 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/benchmark.rb: Remove nodoc from Benchmark::Job and
- Benchmark::Report. Patch by Sandor Szucs. [Ruby 1.9 - Bug #4726]
-
-Wed May 18 05:29:26 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/webrick/compat.rb: Improve documentation. Patch by Sandor
- Szucs. [Ruby 1.9 - Bug #4725]
-
-Wed May 18 05:10:35 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/tracer.rb: Improve documentation. Patch by Richard Ramsden.
- [Ruby 1.9 - Feature #4720]
-
-Wed May 18 04:53:41 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/cmath.rb: Improve documentation. Patch by Jason Dew.
- [Ruby 1.9 - Feature #4717]
-
-Wed May 18 04:50:24 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/net/ftp.rb: Improve documentation. Patch by Vincent Batts.
- [Ruby 1.9 - Bug #4710]
-
-Wed May 18 03:14:49 2011 Eric Hodel <drbrain@segment7.net>
-
- * test/test_singleton.rb: Add tests from lib/singleton.rb. Patch by
- Pete Higgins. [Ruby 1.9 - Bug #4715]
-
-Wed May 18 03:03:07 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/singleton.rb: Improve documentation. Patch by Pete Higgins.
- [Ruby 1.9 - Bug #4709]
-
-Tue May 17 21:24:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_mutex_lock): remove remove_signal_thread_list() call.
- It's meaningless because lock_interrupt doesn't call
- add_signal_thread_list().
-
-Tue May 17 20:20:49 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * vm_core.h (rb_thread_struct): add volatile to
- transition_for_lock because it is not protected by lock.
-
-Tue May 17 20:08:53 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * LEGAL (missing/{elf,tgamma,lgamma_r}.c): they've been replaced by
- public domain implementations.
-
- * LEGAL (vsnprintf.c): it has moved to srcdir from missing/.
-
- * LEGAL (missing/crypt.c): list its original license.
-
-Tue May 17 19:54:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * LEGAL (configure): add missing/setproctitle.c
-
-Tue May 17 19:35:01 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- Fix FreeBSD test failure.
-
- * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_set_program_name):
- use ps -o command instead of ps -o cmd. FreeBSD doesn't support
- -o cmd option.
-
-Tue May 17 08:04:26 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_digest.c: Add documentation.
-
-Tue May 17 07:14:58 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/net/http.rb: Improve documentation of proxy configuration
- methods. Patch by Alf Mikula. [Ruby 1.9 - Bug #4714]
-
-Tue May 17 07:09:01 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/net/pop.rb: Improve documentation. Patch by Vincent Batts.
- [Ruby 1.9 - Bug #4711]
- * lib/net/telnet.rb: ditto
-
-Tue May 17 07:00:41 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/net/http.rb: Fix nodoc for Net::HTTP::version_1_1?. Patch by
- Alf Mikula. [Ruby 1.9 - Bug #4713]
-
-Tue May 17 06:56:26 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/optparse.rb: Add link to make_switch to improve documentation.
- Patch by David Copeland. [Ruby 1.9 - Bug #4708]
-
-Tue May 17 06:50:40 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/observer.rb: Improve documentation. Patch by David Copeland.
- [Ruby 1.9 - Bug #4707]
-
-Tue May 17 06:42:53 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/logger.rb: Improve documentation. Patch by David Copeland.
- [Ruby 1.9 - Bug #4706]
-
-Tue May 17 06:28:14 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/gserver.rb: Improve documentation. Patch by David Copeland.
- [Ruby 1.9 - Bug #4705]
-
-Tue May 17 06:21:15 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/cgi.rb: Add toplevel documentation to class CGI
- * lib/cgi/session.rb: Add overview documentation to CGI::Cookie
- * lib/cgi/html.rb: Don't add CGI::TagMaker documentation to CGI.
- Patch by David Copeland. [Ruby 1.9 - Bug #4704]
- * lib/cgi/core.rb: Clean up CGI documentation. Patch by David
- Copeland. [Ruby 1.9 - Bug #4704]
- * lib/cgi/cookie.rb: Clean up CGI::Cookie documentation. Patch by
- David Copeland. [Ruby 1.9 - Bug #4704]
-
-Tue May 17 05:52:30 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/digest: Improve documentation of Digest, Digest::HMAC and
- Digest::SHA2. Patch by Pete Higgins. [Ruby 1.9 - Bug #4702]
-
-Tue May 17 03:51:42 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/abbrev.rb: Hide copyright and revision information from RDoc.
- Inspired by patch from David Copeland, bug #4703.
-
-Tue May 17 03:33:21 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/timeout.rb (module Timeout): Hide internal constants. Patch by
- Pete Higgins. [Ruby 1.9 - Bug #4701]
-
-Mon May 16 11:21:09 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * configure.in, win32/Makefile.sub (RUBY_SO_NAME): add CPU as prefix
- of RUBY_SO_NAME on x64/ia64 mswin/mingw.
- [Feature #4602]
-
-Mon May 16 08:00:05 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc.rb: Update to RDoc 3.6.1, allows OpenSSL::Digest to be
- found.
-
-Mon May 16 05:49:54 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/drb/acl.rb: Add documentation.
-
-Mon May 16 05:13:20 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_asn1.c: Add documentation.
-
-Mon May 16 00:32:05 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_signal.rb (TestSignal#test_signal_process_group):
- skip if the platform doesn't have :pgroup capability. (i.e. skip
- if mswin32)
-
-Sun May 15 23:53:31 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * include/ruby/intern.h: resurrect old rb_fd_copy().
- * thread.c (rb_fd_copy): ditto.
-
-Sun May 15 23:45:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * include/ruby/intern.h: remove rb_fd_copy() to rb_fd_dup() and
- rb_w32_fdcopy() to rb_w32_fd_dup().
- * win32/win32.c: ditto.
- * thread.c: ditto.
-
-Sun May 15 22:26:39 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * signal.c (rb_f_kill): accept '-SIGXXX' style signal with Symbol or
- implicit conversion with #to_str. [ruby-dev:43169] fixes #4362
- * test/ruby/test_signal.rb (test_signal_process_group): add a test
- for send signal to process group.
-
-Sun May 15 21:22:35 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * cont.c (cont_init): clear macihne_stack_start/end of saved thread to
- prevent mark machine stack of GC'ed Thread. root Fiber is not
- initialized by fiber_init().
- based on a patch by Serge Balyuk [ruby-core:35891] fixes #4612
- * test/ruby/test_fiber.rb (test_gc_root_fiber): add test for it.
-
-Sun May 15 21:04:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (econv_init): revert r31353. [ruby-dev:43512]
-
-Sun May 15 03:39:35 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/zlib/zlib.c: Improve documentation. Patch by Vincent Batts.
- [Ruby 1.9 - Bug #4695]
-
-Sun May 15 03:23:46 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/erb.rb: Document ERB::Compiler. Patch by Simon Chiang.
- [Ruby 1.9 - Bug #4694]
-
-Sun May 15 00:58:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- fix mswin32 build error.
-
- * missing/setproctitle.c: add #ifdef HAVE_UNISTD_H.
- * win32/Makefile.sub (MISSING): add setproctitle.obj
-
-Sat May 14 22:45:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * missing/setproctitle.c: add to include "ruby/util.h".
-
-Sat May 14 19:52:22 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_set_program_name):
- add for $0 test.
-
-Sat May 14 19:50:46 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * missing/setproctitle.c (compat_init_setproctitle): use
- ruby_strdup() instead of strdup().
-
-Sat May 14 19:37:31 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * include/ruby/missing.h: add setproctitle() declaration.
- * missing/setproctitle.c: added.
- * configure.in: add check for missing/setproctitle.c.
-
- * ruby.c (ruby_process_options): add to call compat_init_setproctitle().
- * ruby.c (set_arg0): remove all platform specific code. it's
- moved to missing/setproctitle.c.
- * ruby.c (origarg): remove len field. It's no longer used.
- * ruby.c (get_arglen): removed.
-
- This patch makes a lot of cleanup set_arg0 related code and fixes
- [Feature #4689].
-
-Sat May 14 17:42:21 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * process.c (rb_proc_times): improve documentation.
- [ruby-core:35785] fixes #4581, reported by Andrew Grimm.
-
-Sat May 14 12:12:54 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * test/openssl/test_pkey_dsa.rb: Add basic tests and tests that
- ensure new public key PEM encoding behavior and ensure backward
- compatibility.
- [Ruby 1.9 - Bug #4422] [ruby-core:35328]
- * test/openssl/test_pkey_rsa.rb: Remove line with 'puts'.
-
-Sat May 14 12:06:49 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/context.rb (class RDoc): Fix infinite loop caused by
- re-encountering BasicObject.
-
-Sat May 14 10:32:36 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * test/openssl/test_pkey_rsa.rb: Add tests that ensure new public key
- encoding behavior and also ensure backward compatibility.
- [Ruby 1.9 - Bug #4421] [ruby-core:35327]
-
-Sat May 14 09:50:10 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/yaml/dbm.rb: Add documentation. Patch by Justin Collins.
- [Ruby 1.9 - Bug #4693]
- * lib/yaml/store.rb: ditto
-
-Sat May 14 09:31:43 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc.rb: Updated to RDoc 3.6
-
-Sat May 14 07:30:29 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych.rb: released a new gem, so increasing version.
-
-Sat May 14 05:08:32 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_digest.c
- * ext/openssl/ossl_pkey.c
- * ext/openssl/ossl_pkey.h
- * test/openssl/pkey/test_pkey_rsa.rb
- Reverted premature commit. Sorry for the noise!
-
-Sat May 14 05:02:58 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/uri.rb: Add toplevel documentation. Patch by Vincent Batts.
- [Ruby 1.9 - Bug #4690]
-
-Sat May 14 04:19:06 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * NEWS: Describe altered behaviour for RSA and DSA public key
- encoding. [Ruby 1.9 - Bug #4421, Bug #4422]
- [ruby-core:35327,35328]
-
-Sat May 14 02:57:52 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/ipaddr.rb (unless Socket): Document valid*? methods. Patch by
- Sebastian Martinez. [Ruby 1.9 - Feature #4687]
-
-Sat May 14 02:54:04 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rexml/functions.rb: Add some documentation for REXML::Functions.
- Patch by Sebastian Martinez. [Ruby 1.9 - Feature #4688]
-
-Sat May 14 02:51:42 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/resolv.rb: Hide private method and state-tracking constants from
- RDoc. Patch by Mark Turner. [Ruby 1.9 - Feature #4691]
-
-Fri May 13 19:23:21 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * numeric.c (flo_coerce): Add #flo_coerce documentation.
- Patch by Sebastian Martinez.
- https://github.com/ruby/ruby/pull/21
-
-Fri May 13 18:42:22 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * README.EXT: fix typo. Patch by William Blackerby.
- https://github.com/ruby/ruby/pull/19
-
- * README.EXT.ja: ditto.
-
-Fri May 13 15:22:34 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_select): check invalid handle before doing
- select operations. see [ruby-dev:43513], [ruby-dev:43535]
-
-Fri May 13 08:34:00 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/rdoc.rb: Output summary after documentation report.
- * lib/rdoc/stats/normal.rb: Don't output information for users when
- we're not on a TTY
-
-Fri May 13 07:49:02 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/fileutils.rb: Hide internal methods from RDoc. Patch by Darragh
- Curran. [Ruby 1.9 - Bug #4684]
-
-Fri May 13 07:36:23 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/webrick/httpservlet/erbhandler.rb: Add documentation.
-
-Fri May 13 07:04:33 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/mathn.rb: Fix indentation. Patch by Jason Dew.
- [Ruby 1.9 - Feature #4682]
-
-Fri May 13 06:50:43 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/mathn.rb: Add documentation. Patch by Jason Dew. [Ruby 1.9 -
- Feature #4667]
-
-Fri May 13 05:44:19 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/logger.rb (class Logger): Document Logger#datetime_format.
- Patch by Sergio Gil Perez de la Manga. [Ruby 1.9 - Bug #4678]
-
-Fri May 13 05:39:11 2011 Eric Hodel <drbrain@segment7.net>
-
- * re.c (Init_Regexp): Document option constants. Patch by Vincent
- Batts. [Ruby 1.9 - Bug #4677]
- * lib/uri/common.rb (module URI): Documentation for URI. Patch by
- Vincent Batts. [Ruby 1.9- Bug #4677]
- * lib/uri/ftp.rb (module URI): ditto
- * lib/uri/generic.rb (module URI): ditto
- * lib/uri/http.rb (module URI): ditto
- * lib/uri/https.rb (module URI): ditto
- * lib/uri/ldap.rb (module URI): ditto
- * lib/uri/ldaps.rb (module URI): ditto
- * lib/uri/mailto.rb (module URI): ditto
- * process.c (Init_process): Document Process constants. Patch by
- Vincent Batts. [Ruby 1.9- Bug #4677]
-
-Fri May 13 05:16:38 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rss/atom.rb (module RSS): Document URIs. Patch by Mark Turner.
- [Ruby 1.9 - #4671]
- * lib/rss/rss.rb (module RSS): Document exception classes. Patch by
- Mark Turner. [Ruby 1.9 - #4671]
-
-Fri May 13 02:15:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (select_internal): remove unused variable (interrupt_flag).
-
-Thu May 12 18:24:34 2011 Kouhei Sutou <kou@clear-code.com>
-
- * configure.in: limit to "T" type for prefix of external symbols
- because x86_64-w64-mingw32-gcc on Debian GNU/Linux generates the
- following symbol:
- 0000000068483390 D _GLOBAL__F__conftest_external
-
- Approved by nobu.
-
-Thu May 12 14:50:52 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/dl/test_base.rb (Fiddle::LIBC_SO): its always msvc*.dll on
- mswin/mingw.
-
-Thu May 12 14:47:53 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (Logging.postpone): copy only when temporary logfile
- exists.
-
-Thu May 12 12:24:22 2011 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
-
- * ext/openssl/ossl_ssl.c: By trunk@31346, function check of SSLv2 is
- executed.
- However, the problem is not revised in this.
- This adds the control of using function of SSLv2 in made macro by
- function check.
-
-Thu May 12 08:10:46 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/set.rb (class Set): Add nodoc to internal-use methods. Patch
- by Pete Higgins. [Ruby 1.9 - Bug #4665]
-
-Thu May 12 08:01:14 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_pkey_ec.c: Allow encryption when PEM-encoding
- Elliptic Curve private keys.
- [ruby-core:35329] [Bug #4423]
-
-Thu May 12 07:54:59 2011 Eric Hodel <drbrain@segment7.net>
-
- * object.c (rb_obj_equal): Add documentation. Patch by Vincent Batts.
- [Ruby 1.9 - Bug #4664]
- * lib/rexml: ditto
- * lib/mkmf.rb: ditto
- * ext/socket/lib/socket.rb: ditto
-
-Thu May 12 07:30:08 2011 Eric Hodel <drbrain@segment7.net>
-
- * Various .document files: Update .document files to match files which
- have documentation.
-
-Thu May 12 07:18:45 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_pkey_dsa.c: Use generic X.509 SubjectPublicKeyInfo
- format for PEM-encoding DSA public keys.
- [ruby-core:35328] [Bug #4422]
-
-Thu May 12 06:27:31 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-
- * ext/openssl/ossl_pkey_rsa.c: Use generic X.509 SubjectPublicKeyInfo
- format for encoding RSA public keys.
- [ruby-core:35327] [Bug #4421]
-
-Wed May 11 19:45:27 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/forwardable.rb: support 'delegate :foo => :bar' for to meet
- by specification of RDOC.
-
-Wed May 11 08:36:38 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/webrick: Add documentation for WEBrick::HTTPAuth
-
-Wed May 11 03:06:35 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rss.rb: Add documentation for RSS. Patch by Steve Klabnik.
- [Ruby 1.9 - Bug #4663]
-
-Tue May 10 14:50:32 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit.rb: Add option for hiding skip messages when test
- ends. #4657
-
- * test/testunit/test_hideskip.rb, test/testunit/test4test_hideskip.rb:
- test for above.
-
-Tue May 10 10:53:04 2011 Eric Hodel <drbrain@segment7.net>
-
- * common.mk (rdoc): Add rdoc-coverage rule
-
-Tue May 10 09:13:21 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/webrick: Add Documentation
-
-Tue May 10 04:22:09 Eric Hodel <drbrain@segment7.net>
-
- * lib/webrick/log.rb: Hide copyright info from ri
- * lib/webrick/httpstatus.rb: ditto
- * lib/webrick/htmlutils.rb: ditto
- * lib/webrick/httpversion.rb: ditto
- * lib/webrick/version.rb: ditto
- * lib/webrick/httpauth/userdb.rb: ditto
- * lib/webrick/httpauth/authenticator.rb: ditto
- * lib/webrick/accesslog.rb: ditto
-
-Mon May 9 20:57:13 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/ruby/test_{complex,rational}.rb: added tests.
-
-Mon May 9 20:29:44 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (string_to_c_internal): a refactoring.
-
-Mon May 9 18:33:05 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c: Improve documentation for String#start_with? and
- String#end_with?. fixes #4652
- patched by Andrew Grimm <andrew.j.grimm at gmail.com>
-
-Mon May 9 13:49:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * complex.c (string_to_c_internal): support scientific notation.
- patched by Tinco Andringa. https://github.com/ruby/ruby/pull/16
- [ruby-core:36046][Bug #4655]
-
-Mon May 9 11:52:48 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric.c (int_ord): remove K&R style.
- patched by Daehyub Kim. https://github.com/ruby/ruby/pull/17
-
-Sun May 8 22:17:24 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/ruby/test_{complex2,complexrational}.rb: use skip.
- * test/date/*.rb: ditto.
-
-Sun May 8 21:02:31 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/ruby/test_{complex2,complexrational}.rb: NEVER SKIP.
-
-Sun May 8 21:01:21 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/date/test_date_base.rb: fixed.
-
-Sun May 8 20:54:11 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/date/*.rb: NEVER SKIP.
-
-Sun May 8 20:37:33 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/date/*.rb: reverted 31432.
-
-Sun May 8 20:32:43 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/date/*.rb: reverted 31483.
-
-Sun May 8 19:39:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (native_cond_timedwait): add to care EINTR.
- * thread_pthread.c (thread_timer): remove EINTR check.
-
-Sun May 8 19:04:15 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/time.rb (xmlschema): avoid passing any negative numbers.
-
-Sun May 8 18:40:03 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_{parse,strptime}.c: introduced some macros.
-
-Sun May 8 17:17:13 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/date/*.rb: use skip /w messages.
-
-Sun May 8 17:04:55 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/lib/date/format.rb (_httpdate): omitted to call zone_to_diff.
-
-Sun May 8 16:56:19 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (date_s_test_*): use macros.
-
-Sun May 8 10:24:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c: cleanup signal_thread_list related ifdef.
- 1) we don't have to use #ifdef FOO-PLATFORM directly 2) About
- half #ifdef didn't care symbian properly.
-
-Sun May 8 05:19:37 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/io/wait/test_io_wait.rb: Linux socketpair(2) only support
- AF_UNIX, but windows socketpair doesn't support it. we can't
- avoid platform check. sigh!
-
-Sun May 8 00:13:05 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/io/wait/test_io_wait.rb: use Socket.pair instead of pipe.
- Windows can only treat a socket.
-
-Sat May 7 22:43:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_fd_zero): remove redundant zero fill.
-
-Sat May 7 22:38:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_fd_init): remove volatile qualifier.
-
-Sat May 7 22:34:29 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_fd_init_copy): new internal api. It provide efficient
- copy constructor semantics.
- * thread.c (do_select): use rb_fd_init_copy().
-
-Sat May 7 15:18:06 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- fix incorrect native_cond_signal call when deadlock was detected.
-
- * thread.c (lock_func): decrement cond_waiting if timeout was happen.
-
-Sat May 7 18:28:37 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (USE_MONOTONIC_COND): check the availability
- more strictly.
-
- * thread_pthread.h (rb_thread_cond_t): ditto.
-
-Sat May 7 15:15:10 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- fix win32 native_cond_timedwait() makes SIGSEGV.
-
- * thread_win32.h (rb_thread_cond_struct): add prev field instead of
- last. (ie cond_event_entry is now using double linked list instead of
- single)
- * thread_win32.c (cond_event_entry): add prev field.
-
- * thread_win32.c (__cond_timedwait): remove entry properly if timeout
- was happen.
-
- * thread_win32.c (native_cond_signal): change for double linked list.
- * thread_win32.c (native_cond_broadcast): ditto.
- * thread_win32.c (native_cond_initialize): ditto.
-
-Sat May 7 12:41:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- fix mutex deadlock test hang-up.
-
- * thread_win32.c (abs_timespec_to_timeout_ms): fix 1000x calculation
- mistake. (ie fix hang-up native_cond_timedwait())
-
-Sat May 7 03:14:13 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- sleep_cond use monotonic time if possible.
-
- * thread_pthread.c (native_thread_init): change sleep_cond
- attribute to monotonic.
- * thread_pthread.c (native_sleep): use native_cond_timeout().
-
- * thread_pthread.c (native_cond_timeout): add overflow care.
- * thread_win32.c (native_cond_timeout): ditto.
-
-Sat May 7 02:49:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- fix win32 compile error.
-
- * thread_win32.c (RB_CONDATTR_CLOCK_MONOTONIC): define
- RB_CONDATTR_CLOCK_MONOTONIC always.
- * thread_pthread.c (RB_CONDATTR_CLOCK_MONOTONIC): ditto.
-
-Sat May 7 02:29:41 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- mutex: deadlock check timeout use monotonic time.
-
- * thread_pthread.c (native_cond_timeout): new internal api.
- it calculate a proper time for argument of native_cond_timedwait().
- * thread_win32.c (native_cond_timeout): ditto.
-
- * thread_pthread.c (thread_timer): use native_cond_timeout()
- instead of get_ts.
- * thread.c (lock_func): ditto.
-
- * thread_pthread.c (get_ts): removed. use native_cond_timeout().
- * thread.c (init_lock_timeout): ditto.
-
-Sat May 7 01:54:21 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (get_ts): add monotonic clock capability.
- * thread_pthread.c (rb_thread_create_timer_thread): use monotonic
- clock if possible.
-
-Sat May 7 01:43:37 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.h (rb_thread_cond_t): add clockid field. it's
- no longer an alias of pthread_cond_t.
- * thread_pthread.c: adapt new rb_thread_cond_t type.
- * thread.c (mutex_alloc): ditto.
- * thread_win32.c (native_cond_initialize): ditto.
- * configure.in: add check for pthread_cond_attr_setclock() and
- clockid_t type.
-
-Fri May 6 23:29:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_wait_for_single_fd): use ppoll() instead of poll()
- if possible. based on a patch from Eric Wong. [ruby-core:36003].
-
-Fri May 6 23:13:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: remove nanosleep check. we no longer use it.
- r20124 removed last usage.
-
-Fri May 6 22:35:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/rubyext.c (mktime_do): extra digits are not used.
-
-Fri May 6 17:43:07 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/syck/rubyext.c (mktime_do): remove unused variable offset.
-
- * ext/syck/syck.h: use #ifdef instead of #if DEBUG.
-
-Fri May 6 16:27:33 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/date/date_core.c (DAY_IN_NANOSECONDS): refix: 31438.
- check with LONG_MAX and cast as long; without this the calculation
- will be done as int and overflow.
-
-Fri May 6 15:01:11 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * ext/syck/rubyext.c (mktime_do): avoid buffer overrun, by
- silently ignoring lesser significant digits. Required buffer
- length can be computable so you might at first think of
- allocating enough memory space on the fly using alloca(). That
- is a wrong idea because when using alloca there is always risk
- of integer overflow. A function that accepts outer-process
- resources like this should not blindly trust its inputs. In
- this particular case we just want to generate milliseconds
- resolution by strtod() so the string in question needs no more
- length than what we originally have. Ignoring lesser
- significant digits should suffice I believe.
-
-Fri May 6 14:25:53 2011 Tinco Andringa <mail@tinco.nl>
-
- * ext/syck/rubyext.c (mktime_do): YAML.load time correctly parse
- usecs smaller than 1 fixes #4571
-
-Thu May 5 22:23:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (native_mutex_reinitialize_atfork): removed
- unused macro.
- * thread_win32.c (native_mutex_reinitialize_atfork): ditto.
-
-Thu May 5 22:09:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/date/date_core.c (DAY_IN_NANOSECONDS): long long int is not
- available on all platforms.
-
-Thu May 5 17:36:31 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * eval.c (frame_func_id): store result of method_entry_of_iseq() to
- cfp->me because method_entry_of_iseq() might become expensive.
-
-Thu May 5 15:03:51 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * eval.c (frame_func_id): __method__ return different name from
- methods defined by Module#define_method with a same block.
- [ruby-core:35386] fixes #4606
- * eval.c (method_entry_of_iseq): new helper function. search control
- frame stack for a method entry which has given iseq.
- * test/ruby/test_method.rb: add tests for #4606
-
-Wed May 4 22:13:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * benchmark/bm_vm4_pipe.rb: Reduced iterations. Too slow benchmark
- is bad.
- * benchmark/bm_vm4_thread_pass.rb: ditto.
-
-Wed May 4 22:08:22 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/date/test_date_base.rb: don't use no message skip().
-
-Wed May 4 21:11:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * benchmark/bm_io_select2.rb: reduce number of using file
- descriptors. because gdb need some fds.
-
-Wed May 4 19:00:59 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_wait_for_single_fd): Fix wrong return value.
- * test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb
- (TestWaitForSingleFD#test_wait_for_closed_pipe): test for it.
-
-Wed May 4 18:46:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/-test-/wait_for_single_fd: New. for testing
- rb_wait_for_single_fd() internal function.
- The patch was written by Eric Wong. [ruby-core:35991]
-
- * test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb: ditto.
-
-Wed May 4 12:46:25 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_wait_for_single_fd): Added POLLNVAL check.
- based on a patch from Eric Wong at [ruby-core:35991].
-
-Wed May 4 11:51:01 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (rb_f_select): remove useless ifdef.
-
-Wed May 4 11:42:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/socket/init.c (wait_connectable): fix error handling code.
- RB_WAITFD_OUT is turned on even though an error occur.
-
-Wed May 4 10:12:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/readline/readline.c (readline_event): use rb_wait_for_single_fd().
- The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
-
-Wed May 4 10:10:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/socket/init.c (wait_connectable): use rb_wait_for_single_fd().
- The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
-
- * ext/socket/init.c (try_wait_connectable, wait_connectable_ensure):
- removed.
-
-Wed May 4 10:07:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/io/wait/wait.c (io_wait): use rb_wait_for_single_fd().
- The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
-
-Wed May 4 10:01:27 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_wait_for_single_fd): new. poll(2) based backend for
- rb_wait_for_single_fd().
- Now only Linux uses it.
-
- The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
-
-Wed May 4 09:56:57 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_wait_for_single_fd): new.
- * thread.c (select_single): select(2) based backend for
- rb_wait_for_single_fd().
-
- * io.c (make_writeconv): use rb_wait_for_single_fd() instead of
- rb_thread_fd_select().
- * io.c (rb_io_wait_readable): ditto.
- * thread.c (rb_thread_wait_fd_rw): ditto.
-
- * io.c (wait_readable): removed.
- * thread.c (init_set_fd): new helper function.
- * include/ruby/io.h (RB_WAITFD_IN, RB_WAITFD_PRI, RB_WAITFD_OUT):
- new constant for rb_single_wait_fd().
-
- The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
-
-Wed May 4 08:04:59 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb: fix time dumping so that
- Syck can load UTC times that Psych dumps.
-
-Wed May 4 07:33:00 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_fd_copy): fix wrong argument.This issue was pointed
- out by Eric Wong. [ruby-core:35982]
-
-Tue May 3 20:29:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/fileutils/test_fileutils.rb (TestFileUtils#test_chmod_symbol_mode):
- Skip sticky bit test if the platform is FreeBSD. It doesn't allow to
- change sticky bit if a target is regular file.
-
-Tue May 3 18:23:57 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/date/test_date.rb (TestDate#test_coerce):
- test for [ruby-core:35127].
-
-Tue May 3 04:27:53 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_select): preserve errno if no error
- occurred.
-
-Tue May 3 03:57:04 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_w32_fdcopy): add prototype. fixes
- #4640
-
-Mon May 2 01:02:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * lib/fileutils.rb (FileUtils#chmod): accept symbolic mode argument.
- The patch was written by takkanm. [ruby-core:26029][Feature #2190]
-
- * lib/fileutils.rb (FileUtils#fu_mode): new helper function.
- * lib/fileutils.rb (FileUtils#symbolic_modes_to_i): ditto.
- * lib/fileutils.rb (FileUtils#mode_mask): ditto.
- * lib/fileutils.rb (FileUtils#user_mask): ditto.
-
- * test/fileutils/test_fileutils.rb (TestFileUtils#test_chmod_symbol_mode):
- new test for the above symbolic mode.
- * test/fileutils/test_fileutils.rb (TestFileUtils#test_chmod_R): ditto.
-
-Mon May 2 00:36:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/socket/init.c (rsock_connect): add to care EINTR. based
- on a patch from Eric Wong at [ruby-core:35621][Bug #4555]
-
-Sun May 1 01:06:24 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_thread_select): release GVL while waiting select().
-
-Sat Apr 30 23:10:15 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * win32/win32.c (rb_w32_fdcopy): New. This can copy even though
- fdset size exceed FD_SETSIZE.
- * include/ruby/intern.h (rb_fd_copy): use rb_w32_fdcopy()
-
-Sat Apr 30 20:18:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (do_select): Change argument type to rb_fdset_t.
- Now do_select() is free from unexpected hangup if
- HAVE_RB_FD_INIT=1 [Bug #4636]
-
- * thread.c (rb_thread_fd_select, rb_thread_wait_fd_rw):
- adapt new argument type.
-
- * thread.c (rb_thread_select): make dummy implementation.
-
-Sat Apr 30 20:16:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_fd_copy): Change function argument. Now
- rb_fd_copy() has fully copy semantics.
- * include/ruby/intern.h: ditto.
-
-Sat Apr 30 20:11:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * include/ruby/intern.h (rb_thread_select): mark as deprecated.
-
- * ext/io/wait/wait.c (wait_readable): use rb_thread_fd_select
- instead of rb_thread_select.
- * ext/socket/init.c (wait_connectable0): ditto.
- * ext/readline/readline.c (readline_event): ditto.
- * io.c (rb_io_wait_readable, wait_readable, rb_io_wait_writable,
- wait_writable): ditto.
-
-Sat Apr 30 20:06:36 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (do_select): remove useless ifdef. time calculation
- is not heavy weight.
-
-Sat Apr 30 16:48:36 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * benchmark/bm_io_select3.rb: New.
-
-Sat Apr 30 16:27:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (copy_stream_body, rb_io_s_copy_stream): move rb_fd_init()
- from copy_stream_body to rb_io_s_copy_stream. fds of passing
- rb_fd_term() have to be guaranteed initialized.
-
-Sat Apr 30 16:13:17 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * benchmark/bm_io_select.rb, benchmark/bm_io_select2.rb: New.
- based on a patch from Eric Wong at [Feature #4531]
-
-Sat Apr 30 03:25:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/io/wait/test_io_wait.rb: New. for testing ext/io/wait.
- the patch was written by Eric Wong. [Feature #4531]
-
-Sat Apr 30 00:34:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * include/ruby/win32.h: remove redundant declaration of
- rb_w32_time_subtract().
-
-Sat Apr 30 00:16:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (gvl_init): fix hangup if GVL_SIMPLE_LOCK=1.
- We don't have to call mutex_unlock() before initialize it!
-
-Fri Apr 29 13:15:15 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_win32.c (native_cond_timedwait): New. r31373 caused
- win32 build failure.
-
- * thread_win32.c (__cond_timedwait, abs_timespec_to_timeout_ms):
- New helper functions.
-
- * win32/win32.c (rb_w32_time_subtract): rename from subtract and
- remove static.
-
-Fri Apr 29 10:43:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * benchmark/bm_vm4_pipe.rb: Add two new benchmark for GVL
- performance. They was written by Koichi Sasada.
- * benchmark/bm_vm4_thread_pass.rb: ditto.
-
-Fri Apr 29 10:25:31 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * vm_method.c (rb_clear_cache_by_class): Revert r29673. It made
- a segmentation fault regression. [Bug #4289][ruby-core:34554].
-
-Fri Apr 29 10:24:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (make_writeconv): do not add textmode newline decorator if any
- newline decorator is set already. fixes #4618, fixes #4619
-
-Fri Apr 29 10:17:42 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (lock_func): small cleanup.
-
-Fri Apr 29 10:07:13 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_mutex_lock, lock_func): Avoid busy loop and
- performance regression. bm_vm3_thread_mutex.rb performance
- change from 109.064sec to 16.331sec. [Feature #4607]
-
- * thread.c (init_lock_timeout): New helper function.
-
-Thu Apr 28 16:15:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/{win32.c,dir.h} (rb_w32_uopendir): new API to pass UTF-8 path.
-
- * win32/win32.c (opendir_internal, rb_w32_opendir): extract and merge
- common part of rb_w32_opendir() and rb_w32_uopendir().
-
- * dir.c (do_opendir, glob_helper): encoding.
-
- * dir.c (dir_initialize, do_opendir): convert path to UTF-8 and call
- rb_w32_uopendir() instead of rb_w32_opendir() on Windows.
- fixes #4491, reported by Joey Zhou.
-
-Thu Apr 28 15:32:53 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/dl/test_base.rb (DL::LIBC_SO): its always msvc*.dll on
- mswin/mingw.
-
-Thu Apr 28 06:07:06 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/csv.rb (CSV::open): suppress universal newline decorator.
- fixes #4603
-
- * lib/csv.rb (CSV.read): no mode is needed.
-
-Thu Apr 28 06:06:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_extract_modeenc, rb_f_backquote): set default text
- mode. fixes #4619
-
- * io.c (pipe_open): set universal newline decorator if needed.
-
-Wed Apr 27 11:33:08 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/emoji_iso2022_kddi.trans: ISO-2022-JP-KDDI doesn't have
- CP932 UDA. Another reason is emacs-mule: the implementation of
- stateless-iso-2022-jp doesn't support beyond 94x94 (0x7fxx);
- but CP932 UDA is in 7Fxx-92xx.
-
-Wed Apr 27 07:42:44 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (STRIP): use proper toolchain. based on a patch
- from Jon Forums at [ruby-core:35909]. fixes #4617
-
-Wed Apr 27 01:20:59 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (date_zone_to_diff): renamed.
- * ext/date/date_parse.c: ditto.
- * ext/date/date_strptime.c: ditto.
-
-Wed Apr 27 01:16:59 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (enc_find): accept Encoding objects.
-
-Wed Apr 27 00:55:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (econv_opts): add newline option.
-
- * io.c (validate_enc_binmode, rb_io_extract_modeenc): set newline
- decorator according to open mode.
-
- * transcode.c (rb_econv_prepare_options): new function, to prepare
- econv options with newline flags.
-
- * include/ruby/encoding.h (ECONV_NEWLINE_DECORATOR_MASK): add.
-
-Wed Apr 27 00:51:01 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_truncate): fix function.
-
- * include/ruby/win32.h (ftruncate, truncate, ftello, fseeko): non-64
- versions on mingw are useless because they use int32_t. fixes #4564
-
-Wed Apr 27 00:50:33 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: modified validation methods.
- * ext/date/lib/date.rb: ditto.
-
-Wed Apr 27 00:00:37 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c (dt_lite_set_tmx): should get df value.
-
-Tue Apr 26 22:34:04 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/lib/date/format.rb (_iso8601): allowed day only civil
- date. disallowed separatorless day only ordinal date.
-
-Mon Apr 25 21:31:36 2011 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
-
- * ext/openssl/extconf.rb: Should check SSLv2_*method.
- openssl compiled with "no-ssl2" the extconf don't fail
- when running `make' having this compilation errors.
- Patched by Laurent Arnoud. fixes #4562, #4556
-
-Mon Apr 25 20:53:32 2011 Tajima, Akio <artonx@yahoo.co.jp>
-
- * win32/win32.c (kill): accept 0 only sig is SIGINT #4596
-
-Mon Apr 25 19:59:47 2011 Tajima, Akio <artonx@yahoo.co.jp>
-
- * win32/win32.c (kill): accept 0 as pid, fixes #4596
-
-Mon Apr 25 16:43:45 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * random.c (random_rand): remove unused variables.
-
- * struct.c (rb_struct_define_without_accessor): ditto.
-
- * strftime.c (rb_strftime_with_timespec): ditto.
-
- * sprintf.c: ditto.
-
- * time.c (time_asctime): remove useless GetTimeval().
-
- * thread_pthread.c: cast to (void *) for %p.
-
-Mon Apr 25 11:02:11 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/ripper/lib/ripper/sexp.rb: fix rdoc around sexp.
- patched by Sho Hashimoto. fixes #4599
-
-Mon Apr 25 08:24:04 2011 Shota Fukumori <sorah@tubusu.net>
-
- * random.c (rb_f_rand, random_s_rand): RDocs for them.
-
-Mon Apr 25 07:18:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * random.c (random_s_rand, Init_Random): Random.rand should behave as
- Random::DEFAULT.rand rather than Kernel#rand.
-
- * random.c (rand_range, random_rand): rand_range function extracted
- from random_rand function.
-
- * random.c (rb_f_rand): accept a Range argument as Random#rand
- [ruby-dev:43427] #4605
-
-Mon Apr 25 03:31:06 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/time.rb: require 'date'.
- * ext/date/lib/date/format.rb: removed require line.
-
-Mon Apr 25 03:08:39 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/lib/date/format.rb: require 'date'.
-
-Mon Apr 25 03:04:16 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/lib/date/format.rb (_iso8601): added a pattern.
-
-Mon Apr 25 02:51:22 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/date/lib/date/format.rb: require 'date_core.so'.
- date/format needs methods which are now in date_core.so.
- This breaks make rdoc which uses Date._parse from time.rb.
-
-Mon Apr 25 02:47:46 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/lib/date/format.rb (_iso8601): fixed a bug of regex.
-
-Mon Apr 25 02:12:26 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/lib/date/format.rb: an adjustment of regex.
-
-Mon Apr 25 01:58:50 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/lib/date/format.rb: omitted to call _parse.
-
-Mon Apr 25 01:03:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * string.c (rb_to_id): remove unused variable.
-
-Sun Apr 24 22:19:05 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c, rational.c: omitted some method calls.
-
-Sun Apr 24 02:57:27 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_parse.c (n2i): takes long.
-
-Sun Apr 24 02:51:06 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_parse.c: reverted.
-
-Sun Apr 24 02:25:23 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/intern.h: pcc can't use __builtin_constant_p.
-
- * vm_exec.c: change condition.
-
-Sun Apr 24 01:58:01 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/date/date_core.c (leap_p): suppress warning: parentheses.
-
- * ext/date/date_core.c (date_s__parse_internal): remove unused
- variable "str".
-
- * ext/date/date_parse.c (parse_ddd_cb): use RSTRING_LENINT.
-
- * ext/date/date_strftime.c (date_strftime_with_tmx): remove unused
- variable.
-
-Sun Apr 24 00:34:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_parse.c: removed some unused macros. use strchr()
- instead of index().
-
-Sat Apr 23 21:29:42 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: replacement of implementation of
- _parse. [experimental]
- * ext/date/date_parse.c: new.
- * ext/date/lib/date/format.rb: removed ruby version of _parse.
-
-Fri Apr 22 12:04:15 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * array.c (rb_ary_sort_bang): fix rdoc.
- patched by burningTyger. https://github.com/ruby/ruby/pull/11
-
-Fri Apr 22 11:49:49 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/xmlrpc/create.rb (XMLRPC::Create#conv2value):
- XML-RPC's int is 32bit int, and Fixnum also may be beyond 32bit.
-
- * lib/xmlrpc/create.rb (XMLRPC::Create#conv2value):
- XML-RPC doesn't allow Infinity and NaN.
- http://www.xmlrpc.com/spec
-
-Fri Apr 22 04:16:14 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/parser.c (parse): strings from psych have proper taint
- markings.
-
- * test/psych/test_tainted.rb: test for string taint
-
-Thu Apr 21 01:30:02 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * random.c (rb_f_srand): fix rdoc: srand(0)'s 0 is a seed.
- [ruby-core:35833] fixes #4590
-
-Thu Apr 21 01:01:28 2011 Masaya Tarui <tarui@ruby-lang.org>
-
- * win32/win32.c (CreateChild): maximum length of lpCommandLine is
- 32,768 characters, including the Unicode terminating null character.
-
-Wed Apr 20 21:32:11 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_strptime.c (date__strptime_internal): do not
- overwrite local variables.
-
-Wed Apr 20 14:41:28 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_each_line): check string's length when compare
- separator and string. [ruby-core:35815] fixes #4586
-
-Wed Apr 20 00:02:13 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-parse-partial): use position of open paren.
-
-Tue Apr 19 01:00:21 2011 Tajima Akio <artonx@yahoo.co.jp>
-
- * test/ruby/test_io.rb (TestIO#test_cross_thread_close_fd):
- skip cross thread pipe close if windows
-
-Mon Apr 18 12:15:46 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_range.rb (TestRange#test_step_ruby_core_35753):
- avoid float error. [ruby-core:35804]
-
-Sun Apr 17 00:20:14 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_{core,strftime}.c: use struct tmx instead of vtm.
- * ext/date/date_tmx.h: new.
-
-Sat Apr 16 22:23:52 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_strftime.c (date_strftime_wo_timespec): changed
- the way of validation of locale modifiers.
-
-Sat Apr 16 21:55:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: replacement of implementation of
- _strptime. [experimental]
- * ext/date/date_strptime.c: new.
- * ext/date/lib/date/format.rb: removed ruby version of _strptime.
-
-Sat Apr 16 10:18:30 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * vm.c (Init_VM): suppress warning: "OPT_BASIC_OPERATIONS" is not
- defined.
-
-Fri Apr 15 23:41:18 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * ruby.c (proc_options): suppress warning:
- "ALLOW_DEFAULT_SOURCE_ENCODING" is not defined.
-
-Fri Apr 15 15:10:29 2011 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/uri/generic.rb (#route_from_path): Fix a bug where
- URI('http://h/b/').route_to('http://h/b') wrongly returned './'
- (should be '../b'). [Bug #4476]
-
-Fri Apr 15 14:58:06 2011 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/fileutils.rb (FileUtils#touch): Fix corrupted output when
- mtime is specified in addition to nocreate (and verbose).
- ref [ruby-dev:43401]
-
-Thu Apr 14 23:43:43 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (ruby_float_step): wrong loop condition.
- fixes [ruby-core:35753], reported by Joey Zhou.
-
- * test/ruby/test_range.rb (TestRange#test_step_ruby_core_35753):
- test above change.
-
-Thu Apr 14 22:48:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit::Options#setup_options): set possible
- values for completion. no conversion is needed.
-
- * lib/test/unit.rb (Test::Unit::Runner::Worker#initialize): use
- positional arguments instead of keyword arguments.
-
- * lib/test/unit.rb (Test::Unit::Runner#jobs_status): io/console may
- not be available. use 80 as the last resort if IO#winsize and
- COLUMNS are unavailable.
-
- * lib/test/unit.rb (Test::Unit::Runner::Worker#died): rename using a
- verb.
-
- * lib/test/unit.rb (Test::Unit::Runner#_run_parallel): check if worker
- is signaled and use its exit status.
-
- * lib/test/unit.rb (Test::Unit::Runner::Worker#dead): no longer @in
- and @out are separated.
-
-Thu Apr 14 21:23:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_autoload_p): search superclasses as same as actual
- loading. fixes [ruby-core:35679]
-
-Thu Apr 14 21:21:06 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/win32.h (frexp, modf): wrongly declared as pure in
- mingw math.h.
-
- * include/ruby/win32.h (ftruncate, truncate): mingw64 misses
- prototypes.
-
- * win32/win32.c (rb_w32_read): suppress warning.
-
-Thu Apr 14 19:55:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * lib/fileutils.rb (FileUtils#touch): fix corrupted output when
- FileUtils.touch(:nocreate => true, :verbose => true) case.
- The patch was written by Hiroyuki Iwatsuki. [ruby-dev:43401]
-
-Thu Apr 14 16:01:45 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * io.c (rb_f_syscall): suppress warning: "HAVE___SYSCALL" is not
- defined.
-
-Thu Apr 14 00:41:09 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * thread.c (thread_fd_close_i): IOError exception should be assigned
- to rb_thread_t::thrown_errinfo.
-
-Wed Apr 13 20:12:26 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * io.c (rb_io_fdatasync): remove unused variable.
-
-Tue Apr 12 20:54:12 2011 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/st.h: parenthesize macro arguments.
-
-Tue Apr 12 19:19:50 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb: avoid race condition. fixes #4572
-
-Tue Apr 12 18:07:13 2011 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/extconf.rb: --disable-libedit to disable
- libedit. fixes #4550
-
-Tue Apr 12 10:37:39 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h: VC doesn't have ftruncate() and others, but
- ruby needs HAVE_ macros to use our emulation functions.
- (fix the problem of 31262)
-
-Tue Apr 12 01:33:00 2011 Luis Lavena <luislavena@gmail.com>
-
- * configure.in: properly evaluate existence of truncate, ftruncate
- and ftello for MinGW. [ruby-core:35678]
- * win32/win32.c: rename truncate, ftruncate and ftello to avoid
- redefinitions.
- * win32/win32.h: ditto.
-
-Mon Apr 11 21:51:52 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c: revert r31230. Because it made a regression.
- [ruby-core:35631]
-
-Mon Apr 11 21:49:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_io.rb: Added TestIO#test_cross_thread_close_stdio
- and TestIO#test_cross_thread_close_fd.
- The patch was written by Eric Wong. [ruby-core:35669]
-
-Mon Apr 11 21:15:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * file.c (rb_group_member): kill 256K of stack usage.
- the patch was written by Eric Wong. [ruby-core:35699]
-
-Mon Apr 11 07:24:13 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/openssl/ossl.c: Fix typo, document version constants.
-
-Sun Apr 10 22:23:45 2011 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h: parenthesize macro arguments.
-
-Sat Apr 9 23:31:47 2011 Shota Fukumori <sorah@tubusu.net>
-
- * ext/stringio/stringio.c (strio_each, strio_readlines):
- Use `NUM2LONG` instead of `FIX2INT`. Fixes [ruby-dev:43395].
-
-Sat Apr 9 23:22:27 2011 Shota Fukumori <sorah@tubusu.net>
-
- * ext/stringio/stringio.c (strio_each):
- Fix exception message and don't raise immediately if block is not
- given.
- Fixes [ruby-dev:43394].
-
- * test/stringio/test_stringio.rb (test_each_line_limit_0):
- Fix test for above.
-
-Sat Apr 9 21:54:15 2011 Shota Fukumori <sorah@tubusu.net>
-
- * ext/stringio/stringio.c (strio_each, strio_readlines):
- limit must not be zero. Fixes [ruby-dev:43392].
-
- * test/stringio/test_stringio.rb: Add tests for above.
-
-Sat Apr 9 18:01:36 2011 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/util.h: parenthesize macro arguments.
-
-Fri Apr 8 16:01:56 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_getline): check whether str is
- a string when str and lim are given.
- https://twitter.com/watson1978/status/56225052152168449
-
-Thu Apr 7 20:03:52 2011 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h: parenthesize macro arguments.
-
-Wed Apr 6 21:08:31 2011 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h: parenthesize macro arguments.
-
-Wed Apr 6 15:12:40 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/openssl/ossl_pkey_dh.c (ossl_dh_initialize):
- pop pushed error after each try of reading. fixes #4550
-
- * ext/openssl/ossl_pkey_dsa.c (ossl_dsa_initialize): ditto.
-
- * ext/openssl/ossl_pkey_ec.c (ossl_ec_initialize): ditto.
-
-Wed Apr 6 11:36:44 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/openssl/ossl_pkey_rsa.c (ossl_rsa_initialize):
- pop pushed error after each try of reading. fixes #4550
-
-Tue Apr 5 20:33:43 2011 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h: parenthesize macro arguments.
-
-Mon Apr 4 22:02:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/io/nonblock/nonblock.c (io_nonblock_set): Avoid F_SETFL if
- we're not changing the O_NONBLOCK bit. F_SETFL is an expensive
- operation since it needs to affect all processes with the same
- file object.
- The patch is written by Eric Wong. [ruby-core:35556]
-
-Mon Apr 4 21:41:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (rb_io_syswrite): While local FS writes are usually
- buffered, the buffers can be full or the file opened with
- O_SYNC. IO#syswrite can also be used on blocking IOs
- (pipe/socket) just like IO#write.
- The patch is written by Eric Wong. [ruby-core:35554]
-
-Mon Apr 4 11:50:40 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/test_tempfile.rb: simply ignore platform dependent testcases
- instead of skipping.
-
-Sun Apr 3 22:52:22 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * ext/syslog/syslog.c: improve rdoc.
- a patch by Jonas Pfenniger. [ruby-core:35592] fixes #4545
-
-Sun Apr 3 22:10:09 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/zlib/zlib.c: parenthesize macro arguments.
-
-Sun Apr 3 21:33:58 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: disable fdatasync again on Mac OS X.
- [ruby-core:35493][Bug #4500]
-
-Sun Apr 3 21:16:20 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (io_reopen): IO#close releases GVL if possible.
- close() may block for certain file types (NFS, SO_LINGER
- sockets, inotify), so let other threads run. The patch was
- created by Eric Wong [ruby-core:35555][Bug #4527]
-
- * io.c (fptr_finalize): ditto.
-
- * io.c (maygvl_fclose): new.
- * io.c (nogvl_fclose): ditto.
- * io.c (maygvl_close): ditto.
- * io.c (nogvl_close): ditto.
-
-Fri Apr 1 22:25:50 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/syslog/syslog.c: parenthesize macro arguments.
-
-Fri Apr 1 18:53:06 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/webrick/cookie.rb (WEBrick::Cookie.parse): 'white space is
- permitted between tokens' according to RFC2965. Though 'Netscape
- spec' does not define the syntax clearly, make it tolerant as a
- server. As a real-world example, rest-client gem sends
- 'Cookie: foo=1;bar=2'
-
- * test/webrick/test_cookie.rb (test_parse_non_whitespace): test it.
-
-Fri Apr 1 13:19:20 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (RUBY_VM_CHECK_INTS_TH): merge a patch by ko1
- in [ruby-dev:43373].
-
-Thu Mar 31 23:15:46 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-brace-to-do-end, ruby-do-end-to-brace):
- adjust space between block beginning and block arguments
-
-Thu Mar 31 20:42:05 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/strscan/strscan.c: parenthesize macro arguments.
-
-Thu Mar 31 18:06:12 2011 Shugo Maeda <shugo@ruby-lang.org>
-
- * vm_insnhelper.c (vm_get_ev_const): should ignore crefs with
- the NODE_FL_CREF_PUSHED_BY_EVAL flag.
-
-Thu Mar 31 16:49:56 2011 Shugo Maeda <shugo@ruby-lang.org>
-
- * vm_insnhelper.c (vm_get_ev_const): search root cref properly.
- [ruby-dev:43365]
-
-Thu Mar 31 14:50:25 2011 Shugo Maeda <shugo@ruby-lang.org>
-
- * eval.c (rb_mod_s_constants): should ignore crefs with
- the NODE_FL_CREF_PUSHED_BY_EVAL flag.
-
-Wed Mar 30 22:55:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-toggle-block): toggle do/end and {}.
-
- * misc/ruby-mode.el (ruby-move-to-block): move to opening of
- block.
-
-Wed Mar 30 14:35:15 2011 Shugo Maeda <shugo@ruby-lang.org>
-
- * vm_insnhelper.h (COPY_CREF): should copy
- the NODE_FL_CREF_PUSHED_BY_EVAL flag to hide constants from
- methods defined by class_eval. [ruby-dev:43365]
-
-Wed Mar 30 00:24:53 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/stringio/stringio.c: parenthesize macro arguments.
-
-Tue Mar 29 21:51:31 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * object.c (rb_String): Kernel#String should call to_str before to_s.
-
-Tue Mar 29 10:28:08 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/webrick/test_filehandler.rb
- (WEBrick::TestFileHandler#test_short_filename): the cgi doesn't exist
- on current directory.
-
-Tue Mar 29 05:19:57 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c: parenthesize macro arguments.
-
-Tue Mar 29 00:03:51 2011 Tajima Akio <artonx@yahoo.co.jp>
-
- * test/webrick/test_filehandler.rb (test_short_filename):
- read real short filename by cmd because smb mounted files
- have different naming convention.
-
-Mon Mar 28 11:38:08 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/date/date_core.c (date_s_today): use int for year.
-
- * ext/date/date_core.c (datetime_s_now): ditto.
-
-Mon Mar 28 11:07:41 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/extmk.rb: set MFLAGS from MAKEFLAGS when using nmake.
-
-Mon Mar 28 11:07:00 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (love): all you need is love.
-
-Sun Mar 27 23:16:31 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ipsocket.c: parenthesize macro arguments.
-
-Sun Mar 27 16:55:34 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-mode-map): remove unnecessary
- binding. fixes
- http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468952
-
- * misc/ruby-mode.el: suppress warnings at byte compile. fixes
- http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=502926
-
-Sun Mar 27 11:18:35 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: removed unused variables.
-
-Sat Mar 26 15:16:09 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/getaddrinfo.c: parenthesize macro arguments.
-
-Sat Mar 26 05:27:34 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/date/lib/date/format.rb (DateTime#strftime): removed because
- date_core defines it.
-
-Fri Mar 25 21:59:45 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: should not force cast with macros.
-
-Fri Mar 25 21:56:10 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/sdbm/init.c: parenthesize macro arguments.
-
-Fri Mar 25 19:39:40 2011 Ben Walton <bwalton@artsci.utoronto.ca>
-
- * test/test_syslog.rb:
- Skip syslog tests that rely on LOG_PERROR unless it's defined
-
- Instead of checking looking at the platform to determine if the tests
- relying on LOG_PERROR should be run, look for the definition of the
- constant as this will be robust against all platforms as long as the
- underlying syslog.c code sets it up correctly.
-
- This specifically addresses failures on Solaris 9.
-
- Use LOG_PID instead of LOG_PERROR in Syslog.open test
-
- LOG_PERROR isn't a POSIX option for syslog, so it fails on platforms
- that don't define it. Solaris 9 and 10 are examples of this.
-
- Use LOG_PID instead.
-
-Fri Mar 25 15:42:17 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/sdbm/_sdbm.c (sdbm_open): use size_t.
-
- * ext/syck/bytecode.c: ditto.
-
- * ext/sdbm/_sdbm.c (delpair): use ptrdiff_t.
-
- * ext/sdbm/init.c: use RSTRING_LENINT.
-
- * ext/dl/handle.c: suppress warning: shorten-64-to-32.
-
- * ext/strscan/strscan.c: ditto.
-
- * ext/syck/emitter.c: ditto.
-
- * ext/syck/implicit.c: ditto.
-
- * ext/syck/syck.c: ditto.
-
- * ext/syck/token.c: ditto.
-
-Fri Mar 25 12:14:58 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: import nkf 7f18e30.
-
-Fri Mar 25 11:49:29 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_process.rb (TestProcess#test_no_curdir): skip silently
- on Windows, because this tests a platform specific feature and it'll
- never be supported on ruby on Windows.
-
- * test/ruby/test_dir_m17n.rb
- (TestDir_M17N#test_filename_extutf8_invalid,
- TestDir_M17N#test_filename_as_bytes_extutf8): ditto.
-
- * test/open-uri/test_open-uri.rb
- (TestOpenURI#test_find_proxy_case_sensitive_env): ditto.
-
- * test/dl/test_handle.rb (DL::TestHandle#test_NEXT,
- DL::TestHandle#test_DEFAULT): ditto.
-
-Thu Mar 24 23:06:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_get_ev_const): should not autoload in
- defined? mode.
-
- * variable.c (rb_const_defined_0): fix autoloading base.
- [ruby-core:35509]
-
-Thu Mar 24 22:48:43 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/sdbm/_sdbm.c: parenthesize macro arguments.
-
-Thu Mar 24 14:45:57 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/openssl/ossl.c: suppress warning: shorten-64-to-32.
-
- * ext/openssl/ossl.h: ditto.
-
- * ext/openssl/ossl_asn1.c: ditto.
-
- * ext/openssl/ossl_bio.c: ditto.
-
- * ext/openssl/ossl_bn.c: ditto.
-
- * ext/openssl/ossl_cipher.c: ditto.
-
- * ext/openssl/ossl_hmac.c: ditto.
-
- * ext/openssl/ossl_ns_spki.c: ditto.
-
- * ext/openssl/ossl_ocsp.c: ditto.
-
- * ext/openssl/ossl_pkcs5.c: ditto.
-
- * ext/openssl/ossl_pkey.c: ditto.
-
- * ext/openssl/ossl_pkey_dh.c: ditto.
-
- * ext/openssl/ossl_pkey_dsa.c: ditto.
-
- * ext/openssl/ossl_pkey_ec.c: ditto.
-
- * ext/openssl/ossl_pkey_rsa.c: ditto.
-
- * ext/openssl/ossl_rand.c: ditto.
-
- * ext/openssl/ossl_ssl.c: ditto.
-
- * ext/openssl/ossl_x509ext.c: ditto.
-
- * ext/openssl/ossl_x509name.c: ditto.
-
-Thu Mar 24 11:48:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/openssl/ossl_rand.c (ossl_rand_egd_bytes): use NUM2INT because
- the result is used with functions whose argument is int.
-
- * ext/openssl/ossl_ssl.c (ossl_sslctx_setup): ditto.
-
- * ext/openssl/ossl_x509store.c (ossl_x509store_set_purpose): ditto.
-
- * ext/openssl/ossl_x509store.c (ossl_x509store_set_trust): ditto.
-
- * ext/openssl/ossl_x509store.c (ossl_x509stctx_set_purpose): ditto.
-
- * ext/openssl/ossl_x509store.c (ossl_x509stctx_set_trust): ditto.
-
-Thu Mar 24 11:36:55 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/openssl/ossl_x509name.c: id_aref's type is ID.
-
-Thu Mar 24 10:04:35 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/io/console/console.c (console_set_winsize):
- suppress warning: shorten-64-to-32.
-
-Thu Mar 24 09:56:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/openssl/ossl_ocsp.c (ossl_ocspreq_verify): flags is VALUE,
- so it should use NUM2INT.
-
- * ext/openssl/ossl_ocsp.c (ossl_ocspbres_verify): ditto.
-
-Wed Mar 23 21:09:29 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/readline/readline.c: parenthesize macro arguments.
-
-Wed Mar 23 08:07:33 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_round): fix inaccurate results.
-
-Wed Mar 23 00:12:16 2011 Tajima Akio <artonx@yahoo.co.jp>
-
- * win32/win32.c: wait process real termination after reading
- exit code. fixes #4518
-
-Tue Mar 22 21:20:10 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rubygems/test_case.rb: save current dir to @current_dir
- before Dir.chdir.
-
-Tue Mar 22 20:10:04 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/psych/parser.c: parenthesize macro arguments.
-
-Tue Mar 22 20:10:01 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ruby_missing.h: parenthesize macro arguments.
-
-Tue Mar 22 13:33:22 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * ext/openssl/lib/openssl/buffering.rb: removed circular require of
- openssl.rb.
-
- * ext/openssl/lib/openssl/*: removed following comment for transition
- measures of avoiding circular require. No one claimed about this as
- far as I know.
- ##
- # Should we care what if somebody require this file directly?
- # require "openssl"
-
-Tue Mar 22 10:57:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/runner.rb: set Gem::TestCase's @@project_dir.
-
- * lib/rubygems/test_case.rb: set Gem::TestCase's @@project_dir only
- when it is not defined.
-
-Tue Mar 22 09:38:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric.c (flo_round): use pow instead of while-loop. fixes #4510
- patched by Alex Young [ruby-core:35526]
-
-Tue Mar 22 06:47:46 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/date/date_strftime.c (date_strftime_wo_timespec):
- suppress warning: shorten-64-to-32.
-
-Tue Mar 22 06:42:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/date/date_core.c: suppress warning: shorten-64-to-32.
-
-Tue Mar 22 06:41:37 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/test/unit/parallel.rb: remove unused variable.
-
-Tue Mar 22 06:19:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/utf_16le.c: suppress warning: shorten-64-to-32.
-
- * ext/dbm/dbm.c: ditto.
-
- * ext/gdbm/gdbm.c: ditto.
-
- * parse.y (Init_ripper): suppress warning: unused value.
-
-Mon Mar 21 11:21:32 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit.rb: Refactoring. Unified if and elsif.
-
-Sun Mar 20 23:09:34 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_strftime.c: checks duplicated modifiers.
-
-Sun Mar 20 22:32:30 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_strftime.c: removed unused code and arguments.
-
-Sun Mar 20 21:34:49 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: replacement of implementation of
- strftime. It has some limitations that is same as Time's
- one. [experimental]
- * ext/date/date_strftime.c: new.
- * ext/date/lib/date/format.rb: removed ruby version of strftime.
-
-Sun Mar 20 12:43:12 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_x509store.c: parenthesize macro arguments.
-
-Sun Mar 20 01:39:48 2011 Tajima Akio <artonx@yahoo.co.jp>
-
- * hash.c (ruby_setenv): check env process block size with OS ver.
- * win32/win32.c: export rb_w32_osver for above patch.
- * include/ruby/win32.h: declare rb_w32_osver for Win32 Libs.
-
-Sat Mar 19 18:35:05 2011 Tajima Akio <artonx@yahoo.co.jp>
-
- * hash.c (ruby_setenv): calculate total env block size for win32.
- * test/ruby/test_env.rb: add test for above patch.
-
-Sat Mar 19 17:14:46 2011 Tajima Akio <artonx@yahoo.co.jp>
-
- * hash.c (ruby_setenv): checking with max process environment
- block size for Win32. 32767 for 2000/XP, 2003. if failed to
- read the block, then checking with 5120 for earlier Windows.
-
-Sat Mar 19 12:30:25 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_x509revoked.c: parenthesize macro arguments.
-
-Fri Mar 18 20:44:36 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_x509req.c: parenthesize macro arguments.
-
-Fri Mar 18 08:48:06 2011 Oleg Shaldybin <oleg.shaldybin@gmail.com>
-
- * lib/fileutils.rb (FileUtils::Entry_#copy_file): updated FileUtils.cp
- to still copy file permissions when :preserve is false (as cp does
- this even when -p isn't set).
-
-Fri Mar 18 00:59:38 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/win32ole/extconf.rb (create_docfile): removed. should not
- modify source directory unnecessarily, platform dependent
- documentation should be dealt with by rdoc. [ruby-core:35495]
-
-Fri Mar 18 00:54:20 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (rb_funcall_passing_block): add prototype.
- a patch by James M. Lawrence at [ruby-core:35501]
-
-Wed Mar 17 06:23:31 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_x509name.c: parenthesize macro arguments.
-
-Wed Mar 16 20:36:56 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ipsocket.c (init_inetsock_internal): raise an error on
- listen(2) failure.
- reported by Xavier Shay. [ruby-core:35505]
-
-Wed Mar 16 15:06:21 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/openssl/lib/openssl/buffering.rb (module OpenSSL): #flush should
- not change sync mode on exception.
- * test/openssl/test_buffering.rb: added
-
-Wed Mar 16 13:45:28 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/openssl/lib/openssl/buffering.rb: de-nest Buffering module
-
- * ext/openssl/lib/openssl/buffering.rb: add RDoc
-
-Wed Mar 16 08:40:39 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_x509ext.c: parenthesize macro arguments.
-
-Tue Mar 15 18:34:27 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_x509crl.c: parenthesize macro arguments.
-
-Tue Mar 15 09:49:03 2011 Shota Fukumori <sorah@tubusu.net>
-
- * test/misc/test_ruby_mode.rb (test_singleton_class): Skip for Pending.
-
-Mon Mar 14 21:20:44 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * test/ruby/test_require.rb (test_require_too_long_filename):
- increase path length, because MAXPATHLEN is defined as 4096 on linux.
-
- * test/ruby/test_require.rb (test_require_path_home_1): ditto.
-
- * test/ruby/test_require.rb (test_require_path_home_2): ditto.
-
-Mon Mar 14 19:54:37 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_x509cert.c: parenthesize macro arguments.
-
-Sun Mar 13 18:11:28 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_x509attr.c: parenthesize macro arguments.
-
-Sun Mar 13 16:07:58 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/pstore.rb: Fix don't raise "nested transaction" when thread_safe
- is true. Patch by Masaki Matsushita (Glass_saga). [ruby-dev:43337]
-
- * test/test_pstore.rb: Test for above.
- Patch by Masaki Matsushita (Glass_saga) [ruby-dev:43337]
-
-Sat Mar 12 04:12:41 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_ssl_session.c: parenthesize macro arguments.
-
-Sat Mar 12 02:27:07 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c ({d,dt}_lite_marshal_load): checks the given
- argument.
-
-Sat Mar 12 01:26:24 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c: changed some directives.
-
-Sat Mar 12 01:16:02 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/date_core.c, ext/date/lib/*: moved rdoc descriptions.
-
-Sat Mar 12 00:06:24 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * ext/date/lib: moved from lib.
-
-Fri Mar 11 23:32:38 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/delta*: removed undocumented delta.
-
-Fri Mar 11 18:42:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (find_executable0): should exclude directories.
-
-Fri Mar 11 01:40:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (proc_getmaxgroups, proc_setmaxgroups): Process#maxgroups
- and Process#maxgroups= now raise NotImplementedError if the
- platform don't support supplementary groups concept.
-
-Fri Mar 11 01:25:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (get_sc_ngroups_max): return -1 if platform don't
- support NGROUPS_MAX.
-
-Thu Mar 10 22:28:15 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_ssl.h: parenthesize macro arguments.
-
-Thu Mar 10 21:59:37 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * parse.y (parser_encode_length): add exception as UTF8-MAC for
- magic comment's emacs newline specifier
- patched by James M. Lawrence [ruby-core:35476] fixes #4489
-
-Thu Mar 10 16:00:22 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * parse.y (parser_encode_length): fix typo: the length of
- "-dos" and "-mac" is not 5 but 4.
- patched by James M. Lawrence [ruby-core:35476] fixes #4489
-
-Thu Mar 10 10:52:01 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_require.rb: setting too long string to ENV causes
- Errno::EINVAL on Windows. long path name errors may causes over
- about 1024 bytes, then limit it about 4000 bytes.
-
-Thu Mar 10 10:09:35 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit::Runner::Worker#read): fix for the case
- when IO#read or IO#gets returns nil.
-
-Thu Mar 10 07:12:03 2011 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/rubygems*: Import rubygems 1.6.2 (release candidate @ 2026fbb5)
- * test/rubygems: Ditto
- * test/runner.rb: Added test to load path to fix test requires.
-
-Thu Mar 10 03:00:43 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_ssl.c: parenthesize macro arguments.
-
-Wed Mar 9 23:51:26 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * test/ruby/test_io_m17n.rb (test_io_new_enc): "sjis" is now an alias
- of Windows-31J.
-
-Wed Mar 9 23:06:13 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-parse-partial): fix indent after aref.
-
-Wed Mar 9 12:50:24 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb: Rescue exceptions when
- people implement the method method. Thanks Lin Jen-Shin.
- [ruby-core:35255]
-
- * test/psych/visitors/test_yaml_tree.rb: test for implementation of
- method method.
-
-Wed Mar 9 11:53:31 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/shift_jis.c: Change SJIS as an alias of Windows-31J.
- [ruby-dev:43027] fixes #4280
-
- * enc/shift_jis.c: Add PCK as an alias of Windows-31J.
-
-Wed Mar 9 00:45:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: nmake substitutes all occurrences in macro.
-
- * ext/extmk.rb: workaround for nmake.
-
-Tue Mar 8 23:49:45 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (proc_setgroups): cleanup.
-
-Tue Mar 8 23:40:30 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/misc/test_ruby_mode.rb: test for ruby-mode.el.
-
-Tue Mar 8 23:27:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (get_sc_ngroups_max): try to use NGROUPS_MAX at first if
- _SC_NGROUP_MAX is not defined.
-
-Tue Mar 8 23:10:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-parse-partial): fix for array in block.
-
-Tue Mar 8 21:44:49 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_rand.c: parenthesize macro arguments.
-
-Tue Mar 8 16:45:31 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * hash.c (ruby_setenv): MSDN says that Windows XP or earlier limits
- the total size of environment block to 5,120 chars. and on such
- OS, putenv() causes SEGV. So, ruby should limit the size of an
- environment variable to 5,120 bytes for workaround.
-
-Tue Mar 8 15:57:20 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/rubygems/test_gem_spec_fetcher.rb
- (TestGemSpecFetcher#test_cache_dir_escapes_windows_paths): cache_dir
- may have driveletter and `:' for base of cache_dir itself, so need
- to skip it for checking.
-
-Tue Mar 8 12:30:06 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-deep-indent-paren-p, ruby-calculate-indent):
- do not apply deep-indent inside parens at the beginning of
- expressions.
-
-Tue Mar 8 09:32:48 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (configure-ext, build-ext), ext/extmk.rb (extmake):
- support parallel-make under ext.
-
-Tue Mar 8 09:25:23 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (proc_setgroups): use getgrnam() if getgrnam_r() is
- not available.
-
- * process.c: RARRAY_LEN() returns long int.
-
-Tue Mar 8 09:07:03 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_REPLACE_TYPE): enclose in quotes for multiple
- type names.
-
-Tue Mar 8 01:43:11 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * process.c (get_sc_ngroups_max): define to wrap sysconf(3).
- this also supports Windows which doesn't have sysconf(3).
-
- * process.c (maxgroups): use get_sc_ngroups_max.
-
- * process.c (proc_setmaxgroups): ditto.
-
-Tue Mar 8 01:16:49 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * gc.c (rb_objspace): an initializer must be a constant.
-
-Tue Mar 8 01:11:44 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * process.c (maxgroups): cast because sysconf(3)'s return value is long.
-
- * process.c (proc_setmaxgroups): ditto.
-
- * process.c (proc_setgroups): cast because RARRAY_LEN() is long.
-
-Tue Mar 8 00:02:47 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_pkey_rsa.c: parenthesize macro arguments.
-
-Mon Mar 7 22:59:39 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/pstore.rb: Delete variable @transaction and fix #4474. Patch by
- Masaki Matsushita (Glass_saga).
-
- * test/test_pstore.rb(test_thread_safe): Add test for #4474.
-
-Mon Mar 7 21:31:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (proc_setgroups): replace getgrnam() with getgrnam_r()
- because getgrnam() isn't thread safe.
-
-Mon Mar 7 20:49:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (proc_getmaxgroups, proc_setmaxgroups): reflect
- platform maxgroups limitation by default instead hardcoded 65536.
-
-Mon Mar 7 17:13:00 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_gc_set_params): allow GC parameter configuration by
- environment variables. based on a patch from funny-falcon at
- https://gist.github.com/856296, but honors safe level.
-
-Mon Mar 7 09:05:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c: NUM2RLIM is defined but no getrlimit and setrlimit on
- mingw.
-
-Mon Mar 7 08:38:14 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/date/date_core.c (DateTimeData): should not use bare 'long long'
- and 'long double', which are not defined by C89.
-
- * ext/date/date_core.c (dt_lite_plus): get rid of overflow at casting
- down double to integer.
-
-Mon Mar 7 00:21:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (proc_getgroups): get rid of maxgroups dependency.
- ngroups can be calculated dynamically.
-
-Sun Mar 6 23:45:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: rlim_t use standard RUBY_REPLACE_TYPE mechanism.
-
-Sun Mar 6 23:26:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (proc_setmaxgroups): added negative value check.
- This was suggested by Daniel Berger. Thanks Daniel!
- [ruby-core:35426][Bug#4467]
-
-Sun Mar 6 23:18:23 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (maxgroups, proc_setmaxgroups): increase max groups
- limitation up to 65536.
-
-Sun Mar 6 22:20:59 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_pkey_ec.c: parenthesize macro arguments.
-
-Sun Mar 6 21:49:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * sample/list.rb (MyElem#initialize): initialize @head
- explicitly. Otherwise -W2 option makes following warning.
- "warning: instance variable @head not initialized".
- This issue was founded by Andrew Grimm. Thanks Andrew!
- [ruby-core:35435][Bug#4471]
-
-Sun Mar 6 05:21:41 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * class.c: fix camelCase to snake_case in documentation code examples.
- patched by Andrew Grimm. fixes Bug #4469
-
- * marshal.c: ditto.
-
- * proc.c: ditto.
-
- * sample/biorhythm.rb: ditto.
-
- * vm_eval.c: ditto.
-
- * vm_method.c: ditto.
-
-
-Sun Mar 6 03:22:27 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (io_cntl): use rb_thread_io_blocking_region() instead
- rb_thread_blocking_region().
-
-Sat Mar 5 22:54:36 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * include/ruby/intern.h: fix a typo of prototype declaration.
- rb_mutex_try_lock -> rb_mutex_trylock [ruby-dev:43213]
-
-Sat Mar 5 19:44:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_io.rb (TestIO#test_fcntl_lock): small clean up.
-
-Sat Mar 5 01:33:46 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (io_cntl, nogvl_io_cntl): IO.fcntl() and IO.ioctl()
- release GVL during calling kernel interface.
- Suggested by Eric Wong. [ruby-core:35417][Bug #4463]
-
- * test/ruby/test_io.rb (TestIO#test_fcntl_lock): add new test for
- IO.fcntl().
-
-Fri Mar 4 23:09:12 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * test/testunit/test_parallel.rb
- (test_should_run_all_without_any_leaks): consider that the order of
- testcase could change. [ruby-dev:43300] [Bug #4466]
-
-Fri Mar 4 22:01:14 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (io_cntl): change 'cmd' type to int. ioctl and fcntl need to
- be passed int.
- * io.c (rb_io_ctl): ditto.
-
-Fri Mar 4 21:10:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: save warnflags. the patch is created by Eric Wong.
- [Bug #4465]
-
-Wed Mar 2 21:15:00 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_pkey_dsa.c: parenthesize macro arguments.
-
-Thu Mar 3 22:10:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (check_exec_redirect_fd, check_exec_redirect): raise
- ArgumentError if fd >= 3 on Windows because the feature is not
- supported.
-
- * test/ruby/test_process.rb (test_execopts_redirect): remove meaningless
- argument.
-
-Thu Mar 3 21:21:42 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_process.rb (test_execopts_redirect): redirecting fd
- >= 3 is not supported on Windows, so should not specify such options
- when calling spawn or others.
-
-Thu Mar 3 18:59:04 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_slice_bang): raise error when the string is frozen.
-
-Thu Mar 3 14:25:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * strftime.c (STRFTIME): return 0 and ERANGE when precision is too
- large. [ruby-dev:43284] fixes #4456
-
-Thu Mar 3 00:46:51 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * addr2line.c (uleb128): cast the value to unsigned long.
-
- * addr2line.c (fill_lines): print error when lseek fails.
-
-Thu Mar 3 00:36:29 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rexml/encoding.rb (REXML::Encoding#encoding=): store @encoding
- a String which means the name of the encoding.
- this partially revert r29646.
-
- * lib/rexml/document.rb: follow above.
-
- * lib/rexml/output.rb: ditto.
-
- * lib/rexml/parsers/baseparser.rb: ditto.
-
- * lib/rexml/source.rb: ditto.
-
- * lib/rexml/xmldecl.rb: ditto.
-
-Wed Mar 2 23:19:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_byte_substr): return nil for negative length.
-
-Wed Mar 2 21:15:00 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_pkey_dh.c: parenthesize macro arguments.
-
-Wed Mar 2 14:24:04 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit/parallel.rb: Fix name from `inclement_io` to
- `increment_io`.
-
-Wed Mar 2 14:06:01 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_slice_bang): move treatments which is only needed
- when the result is not nil.
-
-Wed Mar 2 14:02:29 2011 Shota Fukumori <sorah@tubusu.net>
-
- * test/testunit/test_parallel.rb(TestParallel#spawn_runner):
- Fix outputing empty line in running test.
-
- * test/testunit/tests_for_parallel/test_third.rb: Remove `sleep`
-
-Tue Mar 1 22:29:10 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_pkey.h: parenthesize macro arguments.
-
-Tue Mar 1 22:02:35 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit/parallel.rb: Fix number.
-
-Tue Mar 1 21:48:22 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit/parallel.rb: For Windows.
-
- * test/testunit/test_parallel.rb(TestParallelWorker#test_quit_in_test):
- Fix for above specification change.
- * test/testunit/test_parallel.rb(TestParallel#spawn_runner):
- Fix outputing empty line in running test.
-
-Tue Mar 1 20:51:57 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_system.rb (TestSystem#test_system_at):
- remove tests for [bug#4396]. because we decided to reject this
- ticket.
-
-Tue Mar 1 19:46:19 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/date/{test_date.rb,test_date_attr.rb}: [ruby-dev:43280]
-
-Tue Mar 1 18:40:38 2011 Ryan Davis <ryan@YPCMC09457>
-
- * lib/rubygems*: Import rubygems 1.6.0 (released version @ 58d8a0b9)
- * test/rubygems: Ditto
-
-Tue Mar 1 16:22:22 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c: revert r30987 because it causes some failures in
- test-all, especially webrick.
-
-Tue Mar 1 15:59:53 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_byteslice): the resulted encoding should keep
- original encoding. this also fixes the encoding when the result
- shares internal string. [ruby-core:35376]
-
-Tue Mar 1 13:25:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (VpMemAlloc): CVE-2011-0188.
- Fixes a bug reported by Drew Yao <ayao at apple.com>
-
-Tue Mar 1 10:34:39 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_byteslice): Add String#byteslice. [ruby-core:35376]
-
-Tue Mar 1 00:12:49 2011 Tajima Akio <artonx@yahoo.co.jp>
-
- * include/ruby/win32.h: define WIN32 if neither _WIN64 nor WIN32
- defined. it forces to use push/pop for pack(4) pragma.
-
-Mon Feb 28 23:52:13 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * test/testunit/test_rake_integration.rb (test_with_rake_runner):
- use assert_in_out_err for suppress messages.
-
-Mon Feb 28 22:48:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * win32/win32.c (rb_w32_spawn): use shell if a commandline contain
- double-quote character.
- * win32/win32.c (is_internal_cmd): similar, use shell if a commandline
- contain caret character.
-
- * test/ruby/test_system.rb (TestSystem#test_system_at): fix
- wrong test case. if system() invoke a command by using shell,
- system() never return nil. Also, "" quotation must not appear
- twice in a command line.
-
-Mon Feb 28 17:36:57 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_pkcs7.c: parenthesize macro arguments.
-
-Mon Feb 28 16:48:42 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_pkcs12.c: parenthesize macro arguments.
-
-Mon Feb 28 16:28:15 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (tr_trans): when the hash for multibyte repl is empty,
- tr is inverse mode, and a character doesn't much the table, the
- character should be replaced by last replacement. Bug #4449
-
-Mon Feb 28 16:38:56 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_ocsp.c: parenthesize macro arguments.
-
-Mon Feb 28 13:02:15 2011 Danial Pearce <github@tigris.id.au>
-
- * lib/tempfile.rb: Fix example file paths in docs for tempfile.
- https://github.com/ruby/ruby/pull/5
-
-Mon Feb 28 12:56:18 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * ext/openssl/ossl_cipher.c (ossl_cipher_init): typo fix.
- https://github.com/ruby/ruby/pull/8
-
-Mon Feb 28 12:28:13 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/date/date_core.c (datetime_s_now): localtime() and localtime_r()
- required time_t pointer as 1st parameter, and tv_sec member of struct
- timeval is long.
-
-Mon Feb 28 11:57:40 2011 Shota Fukumori <sorah@tubusu.net>
-
- * test/testunit/test_parallel.rb: Temporally disable test on Windows.
-
-Mon Feb 28 07:28:35 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit.rb(Test::Unit::Runner#after_worker_quit):
- method name more be natural English.
-
- * lib/test/unit.rb(Test::Unit::Runner::Worker.launch):
- IO.sync doesn't need. Should use "b" for mode.
-
-Sun Feb 27 21:59:37 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_system.rb (TestSystem#test_system_redirect_win):
- add test for system().
-
-Sun Feb 27 18:00:09 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit.rb: Refactoring; Worker never use Hash for internal
- storage.
-
- * lib/test/unit.rb: Never use Kernel#spawn. Use IO.popen instead.
-
-Sun Feb 27 13:16:48 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_ns_spki.c: parenthesize macro arguments.
-
-Sat Feb 26 17:07:53 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: [Feature #4257]
-
- * ext/date/extconf.rb: new
-
- * ext/date/date_core.c: new
-
-Sat Feb 26 16:10:23 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit.rb: --jobs-status won't puts over 2 lines.
-
- * test/testunit/test_parallel.rb: Fix test for above.
-
- * lib/test/*: refactoring.
-
-Sat Feb 26 07:10:05 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/scalar_scanner.rb: fix parsing timezone's whose
- whose format is (+/-)hhmm. Thanks Goncalo Silva!
-
- * test/psych/test_scalar_scanner.rb: test for bug.
-
-Thu Feb 24 23:02:55 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_hmac.c: parenthesize macro arguments.
-
-Thu Feb 24 22:53:10 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (love): for the birthday.
-
-Thu Feb 24 22:51:54 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (ruby_vm_destruct): run vm exit hooks after all objects are
- destructed.
-
-Thu Feb 24 14:40:33 2011 Shota Fukumori <sorah@tubusu.net>
-
- * ChangeLog (vim): Modeline for vim
-
-Thu Feb 24 13:39:25 2011 Shota Fukumori <sorah@tubusu.net>
-
- * common.mk: Use $RUNRUBY for worker process.
-
- * lib/test/unit.rb: Fix bug.
-
- * lib/test/unit.rb: @options[:ruby](@opts[:ruby]) is now Array.
-
- * test/testunit/parallel.rb: Fix for above.
-
-Thu Feb 24 10:05:55 2011 Shota Fukumori <sorah@tubusu.net>
-
- * test/testunit/tests_for_parallel/misc.rb: Fix bug in r30947.
-
- * lib/test/unit.rb, lib/test/unit/assertions.rb: For this test.
-
-Wed Feb 23 23:07:38 2011 Shota Fukumori <sorah@tubusu.net>
-
- * test/testunit/test_parallel.rb, test/testunit/parallel/*:
- Test for r30939.
-
- * lib/test/unit.rb: For test.
-
- * lib/test/parallel.rb: For test.
-
- * lib/test/unit/testcase.rb: For test.
-
-Wed Feb 23 22:05:13 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_engine.c: parenthesize macro arguments.
-
-Tue Feb 22 23:15:17 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit.rb: Fix --ruby option doesn't effect.
-
- * lib/test/unit.rb: Fix typo.
-
-Tue Feb 22 21:39:28 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_digest.c: parenthesize macro arguments.
-
-Tue Feb 22 14:34:26 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit.rb: Fix merging miss.
-
-Tue Feb 22 12:27:26 2011 Shota Fukumori <sorah@tubusu.net>
-
- * lib/test/unit.rb: Add new options; --jobs,-j,--ruby,--jobs-status,
- --no-retry.
- [Feature #4415] [ruby-dev:43226],[ruby-dev:43222],[ruby-core:35294]
-
- * lib/test/unit/parallel.rb: Used at test/unit --jobs(-j) option.
-
- * test/csv/test_serialization.rb: test/unit parallel running ready.
-
- * test/rake/test_file_task.rb: test/unit parallel running ready.
-
-Tue Feb 22 06:09:10 2011 Eric Hodel <drbrain@segment7.net>
-
- * ext/syslog/syslog.c: Apply documentation patch from mathew murphy.
- [Bug #4149]
-
-Tue Feb 22 03:09:10 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych.rb: increase Psych to 1.1.0 for help with
- debugging.
-
-Tue Feb 22 03:04:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/streaming.rb: refactor streaming methods to a
- module.
- * ext/psych/lib/psych/stream.rb: extracted streaming specific methods
- to a module.
- * ext/psych/lib/psych/json/stream.rb: JSON stream inherits from
- JSONTree and includes streaming methods.
- * ext/psych/lib/psych/visitors/json_tree.rb: JSON does not support
- object references, so remove object reference testing when building
- JSON trees.
-
-Tue Feb 22 02:41:51 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb (accept): use Hash#key?
- when looking up object references to err on the side of cache
- misses.
-
-Mon Feb 21 10:58:39 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/json/yaml_events.rb: refactoring JSON event
- handling methods to a module for reuse.
- * ext/psych/lib/psych/json/tree_builder.rb: AST builder uses JSON
- event methods.
- * ext/psych/lib/psych/json/stream.rb: stream emitter uses JSON event
- methods.
-
-Mon Feb 21 10:54:29 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/json/stream.rb: do not emit custom tags in maps
- or sequences when emitting JSON.
- * ext/psych/lib/psych/json/tree_builder.rb: do not emit custom tags in
- sequences when emitting JSON.
- * test/psych/json/test_stream.rb: tests for custom stream emits.
- * test/psych/test_json_tree.rb: tests for JSON emits.
-
-Mon Feb 21 10:05:10 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/json/ruby_events.rb: DRY up ruby event handling
- for JSON.
- * ext/psych/lib/psych/visitors/json_tree.rb: use ruby events module
- * ext/psych/lib/psych/json/stream.rb: ditto
-
-Mon Feb 21 10:01:01 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/json/stream.rb: fix JSON stream emits to use
- double quotes during stream.
- * test/psych/json/test_stream.rb: tests to reflect changes.
-
-Mon Feb 21 00:38:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_system.rb (TestSystem#test_system_at):
- add testcase for bug4396.
-
-Sun Feb 20 19:59:32 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_cipher.c: parenthesize macro arguments.
-
-Sun Feb 20 16:26:45 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (exec_recursive): prevent temporary objects from GC.
-
- * prevent temporary objects from GC, and should not use
- RSTRING_PTR() for function calls since it evaluates the argument
- a couple of times.
-
-Sun Feb 20 16:22:53 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_flock): use rb_thread_io_blocking_region for the
- time being.
-
-Sun Feb 20 05:33:17 2011 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 2.0.2 r6207.
- * test/minitest/*: ditto
-
-Sun Feb 20 02:14:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * signal.c (sig_trap): avoid pthread_sigmask(xx, &mask, &mask) usage
- because FreeBSD don't permit it. If it's used, it behave as
- pthread_sigmask(xx, NULL, &mask).
-
- * signal.c (init_sigchld): ditto.
-
-Sun Feb 20 00:46:51 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_bn.c: parenthesize macro arguments.
-
-Sat Feb 19 22:37:42 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * vm_insnhelper.c (vm_check_if_namespace): guard temporary object
- from GC.
-
-Sat Feb 19 06:36:27 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/test/unit.rb: partial revert of r30849. [ruby-core:32864]
-
- * test/testunit/test_rake_integration.rb: adding an integration test
- with the rake loader to prevent regressions.
-
-Fri Feb 18 19:31:31 2011 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/fileutils.rb (FileUtils::remove_entry_secure): there is a
- race condition in the case where the given path is a directory,
- and some other user can move that directory, and create a
- symlink while this method is executing.
- Reported by: Nicholas Jefferson <nicholas at pythonic.com.au>
-
-Fri Feb 18 00:28:39 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * compile.c (get_exception_sym2type): guard temporary object from GC.
-
-Thu Feb 17 23:54:29 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * iseq.c (prepare_iseq_build): initialize iseq_compile_data::err_info
- with nil. this fix exception in rb_iseq_load().
-
-Thu Feb 17 22:32:35 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * test/ruby/test_marshal.rb (test_marshal_dump_extra_iv):
- fix a typo of local variable. [Bug #3720] [ruby-dev:42083]
-
-Thu Feb 17 21:32:53 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl.h: parenthesize macro arguments.
-
-Wed Feb 16 20:37:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * eval_jump.c (rb_exec_end_proc): changed at_exit and END proc
- evaluation order. [Bug #4400] [ruby-core:35237]
- * eval_jump.c (rb_mark_end_proc): ditto.
-
- * test/ruby/test_beginendblock.rb (TestBeginEndBlock#test_nested_at_exit):
- added a test for nested at_exit.
- * test/ruby/test_beginendblock.rb (TestBeginEndBlock#test_beginendblock):
- changed the test to adopt new spec.
-
-Wed Feb 16 20:17:06 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/openssl_missing.h: parenthesize macro arguments.
-
-Tue Feb 15 21:37:45 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/gdbm/gdbm.c: parenthesize macro arguments.
-
-Tue Feb 15 20:34:53 2011 Tanaka Akira <akr@fsij.org>
-
- * array.c (ary_join_1): fix array size.
-
-Tue Feb 15 19:43:23 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: fix and resubmit r30621. [ruby-dev:43203]
-
-Tue Feb 15 15:41:30 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * array.c (array_join): copy the encoding of the first element as
- an initial encoding.
-
- * array.c (array_join_0): ditto.
-
- * array.c (array_join_1): ditto.
-
- * array.c (inspect_ary): ditto.
-
- * array.c (array_join_1): add an argument to check the appending is
- first one or not.
-
-Tue Feb 15 15:40:53 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * hash.c (inspect_i): copy the encoding of the first key as
- an initial encoding.
-
-Mon Feb 14 15:00:16 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * array.c (inspect_ary): don't taint the inspected result of a
- recursive array.
-
-Tue Feb 15 15:43:29 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_enc_compatible): change the rule for empty strings:
- remove the special treatment of the US-ASCII encoded empty string.
- Now Encoding.compatible? usually respect the encoding of the
- receiver.
-
-Tue Feb 15 15:39:37 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_enc_cr_str_buf_cat): remove special treatment of
- ASCII-8BIT receivers.
-
- * string.c (str_gsub): set initial encoding of the buffer as the
- same of the receiver. [ruby-core:35141]
-
-Tue Feb 15 09:49:33 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_system.rb (TestSystem#test_system_at): use findstr
- command instead of find command, because the latter is confusing
- another famous Unix command.
-
-Mon Feb 14 23:01:19 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * thread.c (rb_thread_io_blocking_region): reset th->waiting_fd
- after blocking region, because remaining waiting_fd might
- cause unnecessary IOError.
-
-Mon Feb 14 21:06:50 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * configure.in: revert r30621. That revision introduced mkmf test
- failures and it turned out to be OK to revert. [ruby-dev:43203]
-
-Mon Feb 14 21:04:01 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/fiddle/conversions.h: parenthesize macro arguments.
-
-Mon Feb 14 18:41:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * win32/setup.mak (USE_RUBYGEMS): fixed r30835. It didn't work on
- mswin32 port. If you changed win32/configure.bat, you should change
- setup.mak too.
-
-Mon Feb 14 17:28:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_system.rb (TestSystem#test_system_at):
- added test. [ruby-core:35218] (#4393)
-
-Mon Feb 14 13:15:35 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (is_internal_cmd): if the first char of prog is '@',
- execute it via shell. [ruby-core:35218] (#4393)
-
-Mon Feb 14 10:33:45 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/test/unit.rb: revert r30863, because it causes too many noise.
-
-Mon Feb 14 07:34:55 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/curses/curses.c: parenthesize macro arguments.
-
-Sun Feb 13 19:41:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit::RequireFiles#non_options): skip
- test suites failed to load instead of mere messages.
-
-Sun Feb 13 09:56:44 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/openssl/test_config.rb (OpenSSL#test_freeze): fix error
- message assertion.
-
- * test/io/nonblock/test_flush.rb (TestIONonblock#flush_test):
- return true to finish the test.
-
- * test/syck/test_string.rb (Syck::TestString#test_non_binary_string):
- use assert_not instead of refute, unless required minitest
- explicitly.
-
- * test/test_prime.rb (TestPrime::sieve.Integer): ditto.
-
- * test/xmlrpc/webrick_testing.rb (WEBrick_Testing#start_server):
- catch IOError when server socket was closed.
-
-Sun Feb 13 07:39:51 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_inject): typo fixed. a patch from Gaku Ueda in
- [ruby-core:35216].
-
-Sun Feb 13 00:48:47 2011 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (Date#===): [ruby-core:35127]
-
-Sun Feb 13 00:29:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit::Options#process_args): always
- return options.
-
- * lib/test/unit.rb (Test::Unit::RequireFiles#non_options): return
- if any test case get loaded.
-
- * lib/test/unit.rb (Test::Unit::AutoRunner#initialize): do not add
- default directory if it is nil.
-
- * lib/test/unit.rb (Test::Unit::AutoRunner#process_args): return
- true if any test cases to run.
-
-Sat Feb 12 23:17:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (assert_include): add alias.
-
-Sat Feb 12 14:44:20 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_io_blocking_region): new function to run
- blocking region with GIL released, for fd.
-
- * thread.c (rb_thread_fd_close): implement. [ruby-core:35203]
-
- * vm.c (th_init): rename from th_init2.
-
-Sat Feb 12 14:41:36 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit::AutoRunner#initialize): use
- default_dir if no test case given.
-
- * lib/test/unit.rb (Test::Unit::Runner): rename from Test::Unit::Mini.
-
- * lib/test/unit.rb (Test::Unit::GlobOption#non_options): run tests
- under base directory if no argument given.
-
-Sat Feb 12 08:03:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_settracefunc.rb (TestSetTraceFunc): ensure to use
- method_added hook defined in Module.
-
-Sat Feb 12 01:04:02 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): enable rubygems if --gem option is given.
-
- * ruby.c (process_options): load rubygems if it is disabled but
- --gem option is given.
-
-Fri Feb 11 23:27:50 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * ruby.c (proc_options): add --gem=enabled as an alias of
- --enable=gems and --gem=disabled as an alias of --disable=gems.
- Gem named "enabled" or "disabled" has already been reserved
- legitimately for this purpose.
-
-Fri Feb 11 23:17:04 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/dl/cfunc.c: parenthesize macro arguments.
-
-Fri Feb 11 21:41:53 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bin/testrb, test/runner.rb, lib/test/unit.rb: improve backward
- compatibility.
-
-Fri Feb 11 19:45:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_cleanup): use rb_ary_free to free internal object.
-
- * gc.h (RUBY_FREE_UNLESS_NULL): get rid of double free.
- [ruby-core:35192]
-
-Fri Feb 11 16:57:03 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_transcode.rb (test_from_cp50221): fix wrong
- assertion and move back.
-
-Fri Feb 11 14:33:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (assert_no_match): alias for
- backward compatibility.
-
-Fri Feb 11 12:06:48 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (add_gems, require_libraries, proc_options): add
- --require and --gem options.
-
-Fri Feb 11 12:03:24 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rubygems): add --disable-rubygems option.
-
-Fri Feb 11 11:39:03 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * template/fake.rb.in (CROSS_COMPILING): get rid of NameError.
-
-Thu Feb 10 23:12:34 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/dl/dl.h: parenthesize macro arguments.
-
-Wed Feb 9 23:11:27 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/pty.c: parenthesize macro arguments.
-
-Tue Feb 8 11:47:11 2011 Loren Sands-Ramshaw <lorensr@gmail.com>
-
- * array.c: documentation clarification in rotate, rotate!,
- index, and rindex. [ruby-core:35144]
-
-Wed Feb 9 09:45:43 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/rdoc/test_rdoc_encoding.rb: remove unnecessary (and wrong)
- platform-dependent hacks.
-
-Wed Feb 9 00:47:18 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/etc/etc.c: parenthesize macro arguments.
-
-Tue Feb 8 19:38:00 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-expr-beg): fix for invalid nest errors.
-
-Tue Feb 8 19:22:59 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in (AC_MSG_CHECKING): fixed typo. the patch is
- created by Benoit Daloze. Thanks a lot. [Bug #4384][ruby-core:35148]
-
-Tue Feb 8 16:04:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (rb_io_s_sysopen): use NUM2MODET() instead NUM2UINT().
-
-Tue Feb 8 15:59:23 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (rb_run_exec_options_err): use MODET2NUM() instead
- LONG2NUM().
-
-Tue Feb 8 13:59:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: revert r30725. Now we have proper runtime fallback.
- Therefore, no need compile time disabling. (see r30762).
-
-Tue Feb 8 01:00:21 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * process.c (proc_setgroups): add GC guard to prevent intermediate
- variable from GC.
-
-Tue Feb 8 00:56:33 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-expr-beg, ruby-in-here-doc-p): tell
- singleton class definitions from here documents.
-
- * misc/ruby-mode.el (ruby-expr-beg, ruby-parse-partial): keyword
- followed by colon is label.
-
-Mon Feb 7 22:56:16 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * lib/benchmark.rb (Benchmark#bmbm): use ensure clause instead of
- Object#tap to restore STDOUT.sync.
-
-Mon Feb 7 22:34:20 2011 Tanaka Akira <akr@fsij.org>
-
- * lib/net/http.rb (Net::HTTP#connect): support SNI (Server Name
- Indication) for HTTPS. [ruby-dev:43164]
- http://stackoverflow.com/questions/4685736/openssl-server-name-indication-support-in-ruby
-
-Mon Feb 7 16:05:32 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Upgrade to RDoc 3.5.3 Fixes [Bug #4376]
-
-Mon Feb 7 11:46:59 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk (rdoc): add --encoding=UTF-8; ruby's rdoc must be UTF-8.
-
-Mon Feb 7 10:21:50 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/rdoc/test_rdoc_options.rb (TestRDocOptions#test_check_files):
- there is no easy way to create owner unreadable file on Windows.
- So, skip the test.
-
-Sun Feb 6 13:48:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/json/lib/json/common.rb (JSON::MissingUnicodeSupport.iconv):
- should not drop rest of the result. use Iconv.conv instead.
-
-Sun Feb 6 12:46:02 2011 Eric Hodel <drbrain@segment7.net>
-
- * string.c (gsub): Ensure result encoding is the same as input
- encoding. [Bug #4340].
-
-Sun Feb 6 12:18:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (words, qwords): dispatch array events. based on a
- patch from Michael Edgar. [Bug #4365].
-
-Sun Feb 6 12:12:59 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/fileutils/fileasserts.rb (FileAssertions): separate module.
-
-Sun Feb 6 11:29:23 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/dbm/dbm.c: parenthesize macro arguments.
-
-Sat Feb 5 22:01:59 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
- revert r30796. r30797 and r30798 are an alternative fix.
- [ruby-dev:43174]
-
-Sat Feb 5 21:47:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (mlhs_basic): include mlhs_post for ripper. a patch
- from Michael Edgar at [ruby-core:35078].
-
-Sat Feb 5 21:22:21 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (assert_block): move from
- test/fileutils/fileasserts.rb.
-
- * test/fileutils/fileasserts.rb (assert_block): pass arguments
- as-is. [ruby-dev:43174]
-
-Sat Feb 5 16:47:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
- msg can be passed nil. [Bug #4371] [ruby-dev:43174]
-
-Sat Feb 5 15:18:25 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Upgrade to RDoc 3.5.2
-
-Sat Feb 5 12:05:27 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/rubyext.c (syck_node_init_copy): SyckNode is not
- copiable. [ruby-core:35094]
-
-Sat Feb 5 11:48:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/ossl_cipher.c (ossl_cipher_alloc): leave data ptr
- NULL.
-
- * ext/openssl/ossl_cipher.c (ossl_cipher_new, ossl_cipher_initialize):
- allocate internal structure. [ruby-core:35094]
-
- * ext/openssl/ossl_cipher.c (ossl_cipher_copy): ditto.
-
-Sat Feb 5 11:29:10 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/json/parser/parser.h (GET_PARSER): raise TypeError.
-
- * ext/json/parser/parser.rl (cParser_initialize): ditto.
-
- * ext/json/parser/parser.h (GET_PARSER): check if initialized.
- [ruby-core:35079]
-
- * ext/json/parser/parser.rl (cParser_initialize): ditto.
-
-Sat Feb 5 10:09:31 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (rb_get_expanded_load_path): always expand load paths.
-
-Sat Feb 5 09:38:08 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (encoded_dup): extract.
-
-Sat Feb 5 03:37:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/fileutils.rb (FileUtils::LowMethods): make low level methods
- in NoWrite and DryRun to do nothing. [ruby-dev:43129]
-
- * test/fileutils/fileasserts.rb: add message arguments.
-
- * test/fileutils/fileasserts.rb (Test::Unit::Assertions#assert_block):
- show the given message.
-
-Sat Feb 5 02:09:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (lex_getline, parser_set_encode): set encoding of lines
- in SCRIPT_LINES__ as source encoding. [ruby-dev:43168]
-
-Sat Feb 5 02:08:37 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (ruby_thread_data_type): add prefix.
-
-Sat Feb 5 00:59:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * vm_core.h (GetThreadPtr): use TypedData_Get_Struct() instead
- CoreDataFromValue() because we need type check. Otherwise,
- type mismatch can cause segmentation fault crash.
- [ruby-core:35086] [Ruby 1.9-Bug#4367]
-
- * vm.c (thread_data_type): remove static.
-
-Fri Feb 4 19:14:27 2011 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/utf8_mac.trans: parenthesize macro arguments.
-
-Fri Feb 4 12:11:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * string.c (str_utf8_nth): fixed a condition of optimized lead
- byte counting. [Bug #4366][ruby-dev:43170]
-
-Fri Feb 4 01:50:13 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * string.c (count_utf8_lead_bytes_with_word): wrote function
- comments.
-
-Fri Feb 4 00:14:55 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/zlib/zlib.c (gzfile_reader_get_unused): no need to dup
- before rb_str_resurrect.
-
-Thu Feb 3 20:04:44 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/curses/curses.c (CHECK): unused macro removed.
-
-Thu Feb 3 18:33:26 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/zlib/zlib.c (gzfile_reader_get_unused): use rb_str_resurrect
- because gz->z.input is hidden string. [ruby-core:35057]
-
-Thu Feb 3 16:34:10 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/shift_jis.c (code_to_mbc): cast as int from the subtraction of
- pointers.
-
- * enc/utf_16le.c (utf16le_mbc_enc_len): use ptrdiff_t.
-
- * enc/utf_32be.c (utf32be_left_adjust_char_head): ditto.
-
- * enc/utf_32le.c (utf32le_left_adjust_char_head): ditto.
-
-Thu Feb 3 16:31:43 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/missing.h: don't use HAVE_STDDEF_H because it never
- defined by configure though configure.bat defines it.
-
- * include/ruby/ruby.h: move include stddef.h to defines.h
-
- * include/ruby/defines.h: ditto.
-
-Wed Feb 2 20:25:04 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/encoding.h (rb_enc_step_back): cast 4th argument 'n'
- as int because Ruby usually treats length value as long but
- onigenc_step_back's 4th argument is int.
-
-Thu Feb 3 07:20:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/to_ruby.rb: use Regexp::NOENCODING
- rather than magic number.
-
- * ext/syck/lib/syck/rubytypes.rb: ditto
-
-Thu Feb 3 07:16:11 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * re.c (Init_Regexp): added a constant for ARG_ENCODING_NONE
- [ruby-core:35054]
-
- * test/ruby/test_regexp.rb: corresponding test.
-
-Thu Feb 3 07:02:16 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/to_ruby.rb: ARG_ENCODING_NONE regular
- expressions can round trip. [ruby-core:34969]
-
- * test/psych/test_yaml.rb: test for ARG_ENCODING_NONE regex
-
- * ext/sych/lib/syck/rubytypes.rb: ARG_ENCODING_NONE regular
- expressions can round trip.
-
- * test/syck/test_yaml.rb: test for ARG_ENCODING_NONE regex
-
-Wed Feb 2 17:09:22 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (rb_io_fdatasync): Use fsync(2) if the underlying
- operating system does not support fdatasync(2).
-
-Wed Feb 2 14:51:08 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/markup/to_tt_only.rb: commit miss
- * test/rdoc/test_rdoc_markup_to_tt_only.rb: ditto
- * test/rdoc/test_rdoc_single_class.rb: ditto
-
-Wed Feb 2 09:27:53 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Upgrade to RDoc 3.5.1
-
-Wed Feb 2 00:30:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * include/ruby/st.h (st_table): Added comment why we need __extension__.
-
-Tue Feb 1 20:45:44 2011 Tanaka Akira <akr@fsij.org>
-
- * enc/encdb.c: parenthesize macro arguments.
-
-Tue Feb 1 15:12:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_require.rb (TestRequire#test_require_with_unc):
- use ``127.0.0.1'' instead of ``localhost'' as host name, because
- XP or earlier cannot resolv it as NBT hostname.
-
-Tue Feb 1 13:20:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/benchmark/test_benchmark.rb (#capture_bench_output):
- Added explicit sleep. Windows have imprecise time support.
- Thus Tms.new.Add!{} may be or may be not equal 0. The
- test failure started since r30747.
-
-Tue Feb 1 11:03:47 2011 Ryan Davis <ryan@lust.local>
-
- * lib/rubygems*: Import rubygems 1.5.0 (released version @ 1fb59d0)
- * test/rubygems: Ditto
-
-Tue Feb 1 08:01:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/console/console.c (console_set_winsize): new method to set
- console size. [EXPERIMENTAL]
-
- * ext/io/console/console.c (console_winsize): use GetWriteFD.
-
-Tue Feb 1 02:28:14 2011 Masaya Tarui <tarui@ruby-lnag.org>
-
- * include/ruby/win32.h, win32/win32.c: add rb_w32_inet_ntop.
- inet_ntop's minimum supported client is Vista.
-
-Tue Feb 1 00:10:30 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/benchmark.rb: fix benchmark to work with current ruby.
- patched by Benoit Daloze [ruby-core:33846] [ruby-dev:43143]
- merged from https://github.com/eregon/ruby/commits/benchmark
-
- * lib/benchmark (Report#width): update documentation
- * lib/benchmark: document the return value of #benchmark and the
- :list attribute in Report
- * lib/benchmark (Tms#format): rename variables, use String#%
- instead of Kernel.format
- * lib/benchmark: remove undocumented Benchmark::times (an alias
- of Process::times used twice)
- * lib/benchmark (#benchmark): use label_width for the caption
- * lib/benchmark (Tms#initialize): rename variables
- * lib/benchmark: allow title to not be a String and call #to_s
- * lib/benchmark (Benchmark#bm): return an Array of the times with
- the labels
- * lib/benchmark: correct output for Benchmark#bmbm
- (remove the extra space)
- * lib/benchmark: add a few tests for Benchmark::Tms output
- * lib/benchmark: improve style (enumerators, ljust, unused vars)
- * lib/benchmark: add spec about output and return value
- * lib/benchmark: improve basic style and consistency
- no parenthesis for print and use interpolation instead of printf
- * lib/benchmark: remove unnecessary conversions and variables
- * lib/benchmark: correct indentation
- * lib/benchmark: rename the FMTSTR constant and variable to FORMAT
- * lib/benchmark: remove useless exception
-
- * test/benchmark: remove unused variable warnings
-
-Mon Jan 31 23:27:23 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * node.c (add_id): remove duplicated rb_id2str() call.
-
-Sun Jan 30 17:19:46 2011 Tanaka Akira <akr@fsij.org>
-
- * missing/langinfo.c: parenthesize macro arguments.
-
-Mon Jan 31 21:57:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: revert r30698.
-
-Mon Jan 31 21:32:44 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * thread.c (thread_start_func_2): check deadlock condition before
- release thread stack. fix memory violation when deadlock detected.
- reported by Max Aller. [Bug #4009] [ruby-core:32982]
-
-Mon Jan 31 14:45:47 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/irb/locale.rb (IRB::Locale::#search_file):
- Gem might be undefined if --disable-gems. [ruby-core:34990]
-
-Mon Jan 31 12:26:14 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * addr2line.c: suppressed shorten-64-to-32 warnings.
- * regcomp.c: ditto.
- * regexec.c: ditto.
- * regint.h: ditto.
- * regparse.c: ditto.
- * regparse.h: ditto.
- * time.c: ditto.
- * variable.c: ditto.
-
-Mon Jan 31 04:45:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * array.c (rb_ary_uniq_bang): call ARY_SET_LEN(ary, 0) before
- ary_resize_capa because ary_resize_capa expects resized length is
- smaller than current array length. call rb_ary_unshare before
- ary_resize_capa because ary_resize_capa lost the reference to
- original shared array. [ruby-core:34997]
-
-Sun Jan 30 17:19:46 2011 Tanaka Akira <akr@fsij.org>
-
- * missing/crypt.c: parenthesize macro arguments.
-
-Sun Jan 30 16:40:27 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/rubygems/test_gem_security.rb (TestGemSecurity): valid only
- if OpenSSL is available.
-
- * test/dl/test_dl2.rb (TestDL#test_sin): math functions do not
- work on x86_64 due to the design of DL2.
-
- * test/dl/test_func.rb (DL::TestFunc#test_{sinf,sin): ditto.
-
-Sun Jan 30 16:09:22 2011 Tanaka Akira <akr@fsij.org>
-
- * strftime.c (rb_strftime_with_timespec): %G produces 4 digits.
-
-Sun Jan 30 15:13:19 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/emacs_mule.c (emacsmule_islead): 7bit range is also leading
- byte.
-
-Sun Jan 30 13:03:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (rb_hash_fetch_m): use useful message for longer key, not a
- nonsense id value.
-
- * string.c (rb_str_ellipsize): new function to ellipsize a string.
-
- * include/ruby/encoding.h (rb_enc_step_back): new function to step
- back n characters.
-
-Sun Jan 30 12:53:38 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/emacs_mule.c (emacsmule_islead): fix inverse condition.
-
-Sun Jan 30 09:37:25 2011 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * io.c (struct argf): char behaves like an unsigned char
- by default on AIX.
-
-Sun Jan 30 08:02:55 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in: Mac OS X wrongly reports it has fdatasync(3).
-
-Sun Jan 30 03:29:47 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/openssl/ossl_bn.c (GetBNPtr): add missing nil case.
- patched by Martin Bosslet. [ruby-core:34987]
-
-Sun Jan 30 01:02:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * include/ruby/ruby.h: Added NUM2MODET() and MODET2NUM() default
- definition.
- Because r30686 introduced win32 build failure.
-
-Sat Jan 29 22:16:26 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * array.c (rb_ary_join): [].join.encoding must be US-ASCII.
- [ruby-list:47790]
-
-Sat Jan 29 20:22:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * benchmark/driver.rb (BenchmarkDriver#measure): Show command line
- when abnormal exiting occur.
-
-Sat Jan 29 10:53:16 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_insnhelper.c (vm_get_ev_const): no-scope reference to toplevel
- private constant has been prohibited incorrectly.
-
- * test/ruby/test_module.rb (test_toplevel_private_constant): add a
- test for above.
-
-Sat Jan 29 08:43:23 2011 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/rubygems*: Import rubygems 1.5.0 (release candidate @ 09893d9)
- * test/rubygems: Ditto
-
-Sat Jan 29 02:02:37 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * variable.c (rb_mod_const_of, sv_i): Module#constant should exclude
- private constants. see [ruby-core:32912].
-
- * test/ruby/test_module.rb (test_constants_with_private_constant): add
- a test for above.
-
-Sat Jan 29 01:36:41 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * variable.c (rb_const_set): const_set should preserve constant
- visibility. see [ruby-core:32912].
-
- * test/ruby/test_module.rb: add a test for above.
-
-Sat Jan 29 01:24:57 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (NODE_CLASS, NODE_MODULE), insns.def (defineclass): raise
- an exception when "class Foo::Bar" is evaluated and Foo::Bar is
- private. To implement this, define_type of "defineclass" is added
- so that the instruction can distinguish whether the class definition
- is scoped (class Foo::Bar) or not (class Bar).
-
- * test/ruby/test_class.rb (test_redefine_private_class),
- test/ruby/test_module.rb
- (test_define_module_under_private_constant): add tests for above.
-
-Sat Jan 29 01:19:17 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * constant.h, variable.c: to ensure compatibility, rb_const_get_* must
- not raise an exception even when the constant is private. Instead,
- rb_public_const_get_* and rb_public_const_defined_* are introduced,
- which raise an exception when the referring constant is private.
- see [ruby-core:32912].
-
- * vm_insnhelper.c (vm_get_ev_const): use rb_public_const_get_* instead
- of rb_const_get_* to follow the constant visibility when user code
- refers a constant.
-
- * test/ruby/test_marshal.rb (test_marshal_private_class): add a test.
- This test had failed because of incompatibility of rb_const_get.
-
-Sat Jan 29 00:30:44 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * variable.c (set_const_visibility): fix typo. a patch from Tomoyuki
- Chikanaga in [ruby-core:32919].
-
-Fri Jan 28 23:20:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/gdbm/test_gdbm.rb (TestGDBM#test_s_open_no_create,
- TestGDBM2#test_writer_open_notexist): We only need to skip libgdbm
- 1.8.0, not all 1.8.x. 1.8.1 or later don't have GDBM_WRITER sickness.
-
-Fri Jan 28 21:56:57 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/dbm/extconf.rb: Added new header places for Fedora13.
-
-Fri Jan 28 21:49:30 2011 Tanaka Akira <akr@fsij.org>
-
- * ext/zlib/zlib.c: parenthesize macro arguments.
-
-Fri Jan 28 17:47:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/gdbm/test_gdbm.rb (TestGDBM2#test_writer_open_notexist):
- gdbm 1.8.x changed GDBM::WRITER behavior. Thus our testcase need
- to be changed too.
-
-Fri Jan 28 17:33:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/gdbm/test_gdbm.rb (TestGDBM#test_s_open_no_create): skip
- the test if gdbm version is 1.8.x.
-
-Fri Jan 28 16:30:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_require.rb (TestRequire#test_require_too_long_filename):
- Added -w option because too long path error don't output a message
- by default since r30660. [Bug #4336] [ruby-dev:43134]
-
-Fri Jan 28 16:19:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_require.rb (TestRequire#test_require_path_home_{1,2}):
- Added -w option because too long path error don't output a message
- by default since r30660. [Bug #4336] [ruby-dev:43134]
-
-Fri Jan 28 16:04:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_require.rb (TestRequire#test_require_path_home_{1,2,3}):
- split from test_require_path_home.
-
-Fri Jan 28 13:04:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in (--with-valgrind): Fixed r29683. Now this option
- is really default on.
-
-Fri Jan 28 12:05:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: Add #include<sys/stat.h> when struct stat is
- tested. Otherwise, incomplete type dereference error will occur.
-
-Fri Jan 28 11:53:19 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: redundant variable names made strange conftest
- error. Fixed it.
-
-Fri Jan 28 11:47:00 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_process.rb (TestProcess#test_too_long_path{,2}):
- should handle Errno::E2BIG, because this test checks crash of ruby,
- not the error type system.
-
-Fri Jan 28 11:23:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (rb_io_open): Use NUM2MODET() instead NUM2UINT().
- * io.c (rb_scan_open_args): ditto.
-
-Fri Jan 28 10:58:20 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: Added mode_t type checking.
- * process.c (rb_exec_arg_addopt): Use NUM2MODET() instead
- NUM2LONG because clang makes compile error by this narrowing
- conversion.
- * process.c (rb_run_exec_options_err): ditto.
-
-Fri Jan 28 02:37:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * re.c (rb_reg_raise): add GC guard to prevent intermediate
- variable from GC.
-
-Fri Jan 28 02:35:41 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * hash.c (rb_hash_fetch_m): add GC guard to prevent intermediate
- variable from GC.
-
-Fri Jan 28 01:33:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_process.rb (TestProcess#test_too_long_path)
- TestProcess#test_too_long_path): Reduced string size from 100MB
- to 10MB. 100MB may cause no memory error. It isn't intended.
-
-Fri Jan 28 01:27:42 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_process.rb (TestProcess#test_too_long_path2):
- Factored out from test_too_long_path. A test should only do
- one test.
-
-Thu Jan 27 23:29:36 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * st.c (st_foreach): check if unpacked.
-
-Thu Jan 27 23:14:19 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-mode-map): remove deprecated binding.
- use M-; instead.
-
-Thu Jan 27 21:58:32 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * bignum.c (rb_str_to_inum): get rid of too huge alloca().
-
-Thu Jan 27 21:43:29 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * object.c (rb_str_to_dbl): rewrite again. use ALLOCV instead
- rb_str_tmp_new().
-
-Thu Jan 27 21:41:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * win32/win32.c: get rid of STRNDUPA(). It's dangerous API.
-
-Thu Jan 27 21:31:57 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * win32/win32.c (rb_w32_aspawn): get rid of too huge alloca().
- [Bug #4330] [ruby-core:34898]
-
-Thu Jan 27 20:30:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * win32/win32.c (rb_w32_spawn): get rid of too huge alloca().
-
-Thu Jan 27 18:49:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * win32/win32.c (open_dir_handle): get rid of too huge alloca().
-
-Thu Jan 27 18:34:58 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * file.c (w32_io_info): get rid of too huge alloca().
- [Bug #4313] [ruby-core:34830]
-
-Thu Jan 27 18:19:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * win32/win32.c (wstati64): get rid of too huge alloca().
- [Bug #4316] [ruby-core:34834]
-
-Thu Jan 27 15:11:52 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): get rid of too huge
- alloca(). this is the real fix of [ruby-core:34833].
-
-Thu Jan 27 12:46:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (ALLOC_ARGV_WITH_STR): fix void pointer arithmetic.
-
-Thu Jan 27 08:41:40 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (proc_exec_v, rb_proc_exec_n, rb_proc_exec)
- (proc_spawn_n, proc_spawn): get rid of too huge alloca().
- [ruby-core:34827], [ruby-core:34833]
-
-Thu Jan 27 08:32:17 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (ALLOCV): new API for exception-safe
- temporary buffer. [ruby-core:34844]
-
- * string.c (rb_alloc_tmp_buffer, rb_free_tmp_buffer):
- implementation of the API.
-
-Thu Jan 27 08:22:49 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln_find.c (dln_find_1): use rb_warning and return immediately
- if fname is longer than buffer.
-
-Wed Jan 26 22:57:30 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * class.c (clone_method): add GC guard to prevent intermediate
- variable from GC. [Bug #4321] [ruby-dev:43107]
-
-Wed Jan 26 22:45:16 2011 Tanaka Akira <akr@fsij.org>
-
- * template/id.h.tmpl: parenthesize macro arguments.
-
-Wed Jan 26 22:28:49 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-
- * vm_eval.c (rb_throw_obj): add GC guard to prevent intermediate
- variable from GC. [Bug #4322] [ruby-dev:43108]
-
-Wed Jan 26 17:08:59 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_asn1.c (ossl_asn1_decode0): OpenSSL::ASN1.decode
- should reject indefinite length primitive encodings as that is
- illegal. Patch by Martin Bosslet. See #4324.
-
-Wed Jan 26 10:36:28 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (=~): documentation fix; the return value is nil when
- it doesn't match. patched by Andrei Kulakov [ruby-core:34562]
-
-Tue Jan 25 08:41:58 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln_find.c (dln_find_1): omit too long pathnames.
-
-Tue Jan 25 08:28:19 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_resize): get rid of out-of-bound access.
-
-Tue Jan 25 07:48:22 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_thread.rb: remove unused variables.
-
-Tue Jan 25 07:45:44 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_thread.rb (TestThread#test_condvar_nolock_2): get
- rid of method redefined.
-
-Tue Jan 25 07:00:52 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_string_value_cstr): rb_str_modify can change
- RSTRING_PTR.
-
-Tue Jan 25 03:24:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_thread.rb: Added various ConditionVariable tests.
-
-Mon Jan 24 22:26:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * object.c (rb_str_to_dbl): Fix again. use rb_str_tmp_new()
- instead ALLOC_N.
-
-Mon Jan 24 21:50:48 2011 Tanaka Akira <akr@fsij.org>
-
- * vm_insnhelper.h: parenthesize macro arguments.
-
-Mon Jan 24 21:28:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * object.c (rb_str_to_dbl): use ALLOC_N instead ALLOCA_N because
- ALLOC_N may cause stack overflow.
-
-Mon Jan 24 21:04:45 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (rb_invalid_str): prevent intermediate variable from GC.
- [ruby-core:34820]
-
-Sun Jan 23 23:01:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/io/console/test_io_console.rb: Don't run test if the system
- don't support io/console.
-
-Sun Jan 23 22:17:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/fiddle/test_fiddle.rb: Don't run test if the system don't support
- fiddle.
-
- * test/fiddle/test_function.rb: ditto.
- * test/fiddle/test_closure.rb: ditto.
-
-Sun Jan 23 11:39:18 2011 Tanaka Akira <akr@fsij.org>
-
- * vm_exec.h: parenthesize macro arguments.
-
-Sun Jan 23 10:33:02 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * template/fake.rb.in (ruby): suppress warnings.
-
-Sun Jan 23 08:00:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_nth_len, str_utf8_nth): return the rest length together.
-
- * string.c (rb_str_substr): get rid of measure the length always
- to improve performance for huge string. [ruby-core:34648]
-
-Sun Jan 23 00:40:10 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/test_syslog.rb: Fix to make a lot of test failure if
- the platform doesn't support syslog.
-
-Sat Jan 22 11:49:55 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/to_ruby.rb: fixing merge key support
- when multiple merge keys are specified.
-
- * test/psych/test_merge_keys.rb: tests for multi-merge key support
-
-Sat Jan 22 11:33:04 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/to_ruby.rb: merge keys are actually
- part of YAML 1.1, so they should be supported. Remove warning and
- merge keys to parent. [ruby-core:34679]
-
- * test/psych/test_merge_keys.rb: test for merge keys
-
-Sat Jan 22 10:25:19 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/parser.c (parse): add the file name to the exception when
- parse errors occur.
-
- * test/psych/test_parser.rb: test for parse error file name
-
-Sat Jan 22 10:12:30 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/parser.c (parse): fix assertion error when reusing a
- parser after an exception has been raised
-
- * test/psych/test_parser.rb: test for assertion error
-
-Sat Jan 22 04:09:22 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/nodes/node.rb: Make Psych::Nodes::Node
- enumerable.
-
- * ext/psych/lib/psych/visitors/depth_first.rb: Add a depth-first
- visitor to enumerate over a YAML AST in a depth-first fashion
-
- * test/psych/nodes/test_enumerable.rb: test for enumerating nodes
-
- * test/psych/visitors/test_depth_first.rb: test for depth-first
- visitor
-
-Sat Jan 22 00:53:42 2011 Tanaka Akira <akr@fsij.org>
-
- * vm_core.h: parenthesize macro arguments.
-
-Fri Jan 21 18:15:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: should not use -Werror=* flags while conftests.
-
-Fri Jan 21 09:17:00 2011 Luis Lavena <luislavena@gmail.com>
-
- * configure.in: Fix incorrectly detected x86_64-w64-mingw32 due
- canonalization of target_os. Bug #3889 [ruby-core:32634]
-
-Thu Jan 20 23:44:00 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: Fix rb_cv_va_args_macro was broken. We are using
- -Werror=implicit-function-declaration compile option. therefore
- we need a function declaration explicitly.
-
-Thu Jan 20 23:58:02 2011 Tanaka Akira <akr@fsij.org>
-
- * node.h: parenthesize macro arguments.
-
-Thu Jan 20 23:25:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: Add '#include <stdlib.h>' to
- rb_cv_localtime_overflow test too. It's reported by Tomoyuki
- Chikanaga. Thanks.
-
-Thu Jan 20 16:11:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * README.EXT, README.EXT.ja: You shouldn't choose ``conftest.c'' as a
- name of a source file.
-
-Thu Jan 20 12:15:44 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: Add stdlib.h inclusion into rb_cv_negative_time_t
- test because it's required for exit(3). The patch is
- created by Tomoyuki Chikanaga. [Bug #4287] [ruby-dev:43060]
-
-Thu Jan 20 11:39:41 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/webrick/utils.rb (TestWEBrick::RubyBin): test CGI does not need
- to load rubygems. if it activated, ruby raises LoadError about
- rbconfig.rb.
-
-Thu Jan 20 09:19:42 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/json_tree.rb: Fix JSON emit for
- DateTime and Time classes.
-
- * test/psych/test_json_tree.rb: test for JSON emit
-
-Thu Jan 20 08:02:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/coder.rb (represent_object): arbitrary objects
- may be passed to the Psych::Coder object.
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb: support for visiting
- arbitrary objects set on the coder.
-
- * test/psych/test_coder.rb: supporting test case.
-
-Thu Jan 20 06:03:17 2011 Tanaka Akira <akr@fsij.org>
-
- * method.h: parenthesize macro arguments.
-
-Wed Jan 19 13:16:05 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/commands/sources_command.rb: Finish removing code,
- (fixes sources command test).
-
-Wed Jan 19 13:04:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * proc.c (proc_call): Add gc guard to avoid segfault. The fix
- is created by Tomoyuki Chikanaga. [Bug #4238][ruby-dev:42963]
-
-Wed Jan 19 12:31:28 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems.rb: Since gem_prelude requires rubygems, enable
- custom_require always.
-
-Wed Jan 19 12:08:08 2011 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/commands/dependency_command.rb: Remove require of
- deleted file.
- * lib/rubygems/commands/fetch_command.rb: ditto
- * lib/rubygems/commands/setup_command.rb: ditto
- * lib/rubygems/commands/sources_command.rb: ditto
- * lib/rubygems/commands/specification_command.rb: ditto
-
-Wed Jan 19 08:13:59 2011 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/rubygems*: Import rubygems 1.5.0 (release candidate)
- * test/rubygems: Ditto
-
-Tue Jan 18 23:31:01 2011 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y: avoid NULL reference. [ruby-dev:43067]
-
-Wed Jan 19 02:54:04 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vsnprintf.c (cvt): set first byte of buf to NUL for the case when
- no bytes are written to the buf. [ruby-dev:43062]
-
-Tue Jan 18 23:04:51 2011 Tanaka Akira <akr@fsij.org>
-
- * gc.h: parenthesize macro arguments.
-
-Tue Jan 18 18:31:14 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/irb/completion.rb: Irb tab completion support for XX::method
- forms.
-
-Tue Jan 18 15:05:55 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/logger.rb: added RDoc document for logging message escape
- by Hal Brodigan. See #3869
-
-Tue Jan 18 07:53:52 2011 Tanaka Akira <akr@fsij.org>
-
- * eval_intern.h: parenthesize macro arguments.
-
-Tue Jan 18 04:42:44 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/parser.rb (Mark): Adding a class to wrap
- marker information
-
- * ext/psych/parser.c (mark): Add a method to return the mark object
- for the parser
-
- * test/psych/test_parser.rb: tests for the Mark class.
-
-Tue Jan 18 02:46:55 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/json_tree.rb (visit_String): JSON
- strings should be dumped with double quotes. [ruby-core:34186]
-
- * test/psych/test_json_tree.rb: test for double quotes
-
-Mon Jan 17 23:36:33 2011 Tanaka Akira <akr@fsij.org>
-
- * array.c (rb_ary_times): less MEMCPY calls.
-
-Mon Jan 17 22:54:33 2011 Tanaka Akira <akr@fsij.org>
-
- * debug.h: parenthesize macro arguments.
-
-Mon Jan 17 21:40:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): revert r30549.
-
-Sun Jan 16 20:55:45 2011 Tanaka Akira <akr@fsij.org>
-
- * vsnprintf.c: parenthesize macro arguments.
-
-Sat Jan 15 11:57:30 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (warnflags): add -Werror=implicit-function-declaration
- if available.
-
- * lib/mkmf.rb (init_mkmf): ignore warnings in mkmf tests.
-
- * test/mkmf/base.rb (setup, teardown): restore config values.
-
- * test/mkmf/test_flags.rb: split from test_find_executable.rb.
-
-Sat Jan 15 10:04:14 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): autoload rubygems.
-
- * tool/compile_prelude.rb (Prelude#initialize): ignore empty
- preludes.
-
- * ruby.c (ruby_init_prelude): get rid of global namespace
- pollution.
-
-Sat Jan 15 09:42:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/io.h: missing prototypes.
-
-Fri Jan 14 23:25:55 2011 Tanaka Akira <akr@fsij.org>
-
- * vm_method.c: parenthesize macro arguments.
-
-Fri Jan 14 15:32:29 2011 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/net/imap/test_imap.rb: call neither logout nor disconnect
- unless connected. patch by Kazuhiro NISHIYAMA. [ruby-dev:42860]
-
-Fri Jan 14 14:56:57 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/imap.rb: use bytesize for binary strings.
- patched by Yoshimasa Niwa. [ruby-core:34222]
-
-Fri Jan 14 14:01:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * pack.c (pack_unpack): the resulted string of unpack('M') must have
- ASCII-8BIT encoding (and ENC_CODERANGE_VALID). [ruby-core:34482]
-
-Fri Jan 14 13:38:58 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/zlib/zlib.c (gzfile_check_footer): ISIZE (Input SIZE) in
- gzip's header is the size of uncompressed input data modulo 2^32.
- [ruby-core:34481] http://www.ietf.org/rfc/rfc1952.txt
-
-Fri Jan 14 11:36:25 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * configure.in, win32/Makefile.sub (RUNRUBY): require path should
- include "." because rbconfig.rb is there.
-
-Fri Jan 14 10:40:11 2011 Ryan Davis <ryan@lust.local>
-
- * gem_prelude.rb: Just require rubygems. Fixes rubygems 1.4.
- * lib/rubygems.rb: removed all Gem::Quickloader code.
- * ruby.c: renamed ruby_init_gems to ruby_init_prelude. Set
- $disable_rubygems since there is no fine grained mechanism to
- skip parts of the prelude. Open to suggestions on how to do this
- better.
- * test/*.rb: Load path isn't set up correctly, so add
- --disable-gems as needed to failing tests that are explicitly
- testing stderr w/ ==.
-
-Fri Jan 14 07:30:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (argf_next_argv): go advance when the next file cannot be
- read. [ruby-core:34446]
-
-Thu Jan 13 20:49:19 2011 Tanaka Akira <akr@fsij.org>
-
- * vm_insnhelper.c: parenthesize macro arguments.
-
-Thu Jan 13 13:21:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * vm_dump.c: delete dashes to make lines 80 chars, Patched by
- Shota Fukumori (sora_h). [Bug #4275] [ruby-dev:43021]
-
-Thu Jan 13 13:21:00 2011 Kenta Murata <mrkn@mrkn.jp>
-
- * vm_dump.c: fix misspelling of CrashReporter, Patched by Shota
- Fukumori (sora_h). [Bug #4275] [ruby-dev:43021]
-
-Thu Jan 13 06:27:29 2011 Ryan Davis <ryand-ruby@zenspider.com>
-
- * error.c: Exception#to_s should actually call to_s.
-
-Thu Jan 13 00:32:54 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * addr2line.c (get_nth_dirname): decrement the directory index
- because the index specifies the index of given included_directories
- which is separated by NUL and its index is begun from 1.
- Note that 0 specifies the current directory of the compilation.
- see also http://www.dwarfstd.org/doc/dwarf-2.0.0.pdf
-
-Thu Jan 13 00:06:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (rb_f_syscall): Add warning messages. [ruby-core:34062]
-
-Thu Jan 13 00:00:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (rb_f_syscall): Some syscall return unsigned or pointer value.
- Therefore we should only check the result is -1 or not.
- [ruby-core:34062]
-
-Wed Jan 12 23:55:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (rb_f_syscall): Add 64bit Linux support. Some syscall takes
- long type arguments.
-
-Wed Jan 12 19:37:10 2011 Tanaka Akira <akr@fsij.org>
-
- * vm_dump.c: parenthesize macro arguments.
-
-Wed Jan 12 19:28:23 2011 Tanaka Akira <akr@fsij.org>
-
- * vm.c (thread_free): reset ruby_current_thread if it points the
- thread to free.
- * gc.c (slot_sweep): don't call RUBY_VM_SET_FINALIZER_INTERRUPT if
- there is no current thread.
- [ruby-dev:43000]
-
-Wed Jan 12 19:09:29 2011 Tanaka Akira <akr@fsij.org>
-
- * enum.c (sort_by_i): reenter check more strictly.
- (sort_by_cmp): ditto.
- [ruby-dev:43003] reported by Usaku NAKAMURA.
-
-Wed Jan 12 16:25:12 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/net/http.rb (Net::HTTP#connect): makes it timeout during
- SSL handshake too. [ruby-core:34203]
- Patch by Marc Slemko.
-
- * test/net/http/test_http.rb (TestNetHTTP_v1_2#test_timeout_during_HTTP_session):
- test for [ruby-core:34203]
-
- * test/net/http/test_https.rb (TestNetHTTPS#test_timeout_during_SSL_handshake):
- ditto.
-
-Wed Jan 12 16:24:53 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * ext/readline/extconf.rb: new checks for RL_PROMPT_START_IGNORE
- and RL_PROMPT_END_IGNORE. [ruby-core:34331]
-
- * ext/readline/readline.c: enables USE_INSERT_IGNORE_ESCAPE only if
- RL_PROMPT_{START,END}_IGNORE are available to get rid of compilation
- error with libedit.
-
-Wed Jan 12 15:53:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * README.EXT.ja (rb_ensure): typo.
-
-Wed Jan 12 11:33:46 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * addr2line.c: OpenBSD uses the elf_abi.h header file instead of the
- elf.h header file. patched by Jeremy Evans [ruby-core:34384]
-
-Wed Jan 12 03:59:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/webrick/test_cgi.rb: Removes usage of deprecated
- :RequestHandler option.
- patched by Peter Weldon [ruby-core:34010]
-
- * test/webrick/test_httpproxy.rb: ditto.
-
- * test/webrick/test_httpserver.rb: Add a test of the deprecation
- behaviour.
-
-Wed Jan 12 08:37:07 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (hash_i): return different values for inverse hash.
- [ruby-core:34334]
-
-Tue Jan 11 20:32:59 2011 Tanaka Akira <akr@fsij.org>
-
- * variable.c: parenthesize macro arguments.
-
-Tue Jan 11 13:06:38 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * array.c (rb_ary_resize): should care of embeded array when extending
- the array.
-
- * array.c (rb_ary_resize): need to set capa when changing the real
- size of the array.
- these are latent bugs.
-
-Mon Jan 10 22:46:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/defines.h (CASEFOLD_FILESYSTEM): HFS+ is case
- insensitive.
-
- * load.c (loaded_feature_path, rb_feature_p, load_lock): on a
- case-insensitive filesystem, loaded features search should
- ignore case. [ruby-core:34297]
-
-Mon Jan 10 21:34:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (showflags): show LD commands.
-
-Mon Jan 10 14:32:55 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_method.rb (TestMethod#test_define_method): method
- transplanting between class and module is impossible.
-
-Mon Jan 10 13:51:17 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/rdoc-mode.el (rdoc-mode): show trailing whitespace.
-
-Mon Jan 10 11:22:02 2011 Tanaka Akira <akr@fsij.org>
-
- * util.c: parenthesize macro arguments.
-
-Mon Jan 10 07:41:31 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * misc/README: mention rdoc-mode.el and ruby-style.el.
-
-Sun Jan 9 20:37:21 2011 Tanaka Akira <akr@fsij.org>
-
- * transcode.c: parenthesize macro arguments.
-
-Sun Jan 9 16:31:53 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * io.c (Kernel.#syscall): implemented on LP64/LLP64 environments too.
- also uses __syscall if available for *BSD on 64bit architecture.
- [ruby-core:34062]
-
-Sun Jan 9 16:31:34 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/irb/locale.rb (IRB::Locale::LOCALE_NAME_RE):
- some platform has a locale without territory but with
- encoding.
- (#each_sub_locale): ditto.
-
-Sun Jan 9 14:47:50 2011 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/readline.c: apply a patch from Nobuyoshi Nakada.
- fixed #3616 [ruby-core:31484] IRB + readline incorrectly counts
- non-printing characters in prompt
-
-Sat Jan 8 21:47:26 2011 Tanaka Akira <akr@fsij.org>
-
- * enum.c (enum_sort_by): use rb_ary_resize.
- (ary_cutoff): removed.
-
-Sat Jan 8 21:24:17 2011 Tanaka Akira <akr@fsij.org>
-
- * pack.c (swapf): compilation condition simplified.
- (swapd): ditto.
-
-Sat Jan 8 20:51:25 2011 Tanaka Akira <akr@fsij.org>
-
- * pack.c (swapd): remove duplicated code.
-
-Sat Jan 8 19:28:55 2011 Tanaka Akira <akr@fsij.org>
-
- * thread.c: parenthesize macro arguments.
-
-Fri Jan 7 23:07:40 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (configuration): backref needs to capture.
-
-Fri Jan 7 21:57:22 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-mode-variables), misc/ruby-style.el:
- show trailing whitespace.
-
- * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): highlight
- regexp after open bracket. [ruby-core:34183]
-
-Fri Jan 7 00:37:35 2011 Tanaka Akira <akr@fsij.org>
-
- * string.c: parenthesize macro arguments.
-
-Thu Jan 6 22:42:02 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigmul1_karatsuba): avoid overflow that make assertion
- fail in certain case. this patch is contributed from Ray Chason
- <chasonr at gmail.com> in personal communication.
-
-Thu Jan 6 20:55:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): ignore rest from first dot from
- TARGET to generate init function name.
- this is followup of r30464.
-
-Thu Jan 6 11:27:01 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/json/tree_builder.rb (start_mapping): tags
- should not be included in JSON mapping
-
-Thu Jan 6 09:23:33 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/net/protocol.rb (eof?): BufferedIO should proxy eof? to the
- underlying IO object.
-
-Thu Jan 6 09:12:31 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/mkmf.rb (configuration): fixing gsub when multiple error flags
- are passed to GCC.
-
-Thu Jan 6 05:25:49 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_modify): export.
-
-Thu Jan 6 05:14:41 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (get_strio, strio_set_string)
- (strio_reopen): check if frozen. [ruby-core:33648]
-
-Thu Jan 6 05:10:58 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_resize): new utility function. [ruby-dev:42912]
-
-Thu Jan 6 05:03:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (init_funcname_len): ignore rest from first dot.
- [ruby-dev:41774]
-
-Thu Jan 6 02:55:48 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb: use YAML 1.0 output
- format for serializing nil values. Thanks Eric Hodel!
-
- * test/psych/test_nil.rb: test for nil values
-
-Wed Jan 5 14:21:34 2011 Mark Dodwell <hi@mkdynamic.co.uk>
-
- * string.c: fix rdoc typo.
- https://github.com/shyouhei/ruby/pull/3
-
-Wed Jan 5 14:06:01 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/rdoc/test_rdoc_options.rb (TestRDocOptions#test_check_files):
- skip on Windows because chmod 0 doesn't mean unreadable by owner.
-
-Wed Jan 5 13:56:54 2011 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/net/http.rb (Net::HTTP#get): A header hash given should not
- be modified.
-
-Wed Jan 5 12:10:08 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/dl/{cfunc.c,dl.h,handle.c}, ext/fiddle/fiddle.{h,c}: Use _WIN32
- rather than checking for windows.h. Thanks Jon Forums!
- [ruby-core:33977]
-
-Sat Jan 1 17:02:50 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/irb/locale.rb (IRB::Locale#search_file): make it possible
- to load a localization from a gem.
- (IRB::Locale#lc_path): obsoleted because of the change of #search_file
- (IRB::Locale#each_localized_path): new private method, based on
- lc_path
- (IRB::Locale#find): follows the change of #search_file.
- (IRB::Locale#load): removed duplicate with #find.
-
-Sat Jan 1 11:44:42 2011 Tanaka Akira <akr@fsij.org>
-
- * strftime.c: parenthesize macro arguments.
-
-Sat Jan 1 11:10:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/zlib/zlib.c: take care of platforms where long is bigger
- than int.
-
-Sat Jan 1 11:03:58 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * NEWS (optparse): shell completion support.
-
- * misc/README (rb_optparse.{bash,zsh}): for shell completion.
-
- * include/ruby/intern.h (VALUE rb_ary_print_on): I have never seen
- this function anywhere.
-
-Sat Jan 1 04:20:11 2011 NARUSE, Yui <naruse@ruby-lang.org>
-
- * win32/win32.c (rb_w32_write_console): don't raise exception when
- the conversion is for writing to console.
- Patched by Heesob Park [ruby-core:33999]
-
-Fri Dec 31 12:02:06 2010 Tanaka Akira <akr@fsij.org>
-
- * enum.c (enum_sort_by): use less temporary objects.
-
-Fri Dec 31 11:46:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (warnflags), lib/mkmf.rb (configuration): turn
- warnings into errors only for bundled extensions.
- [ruby-core:33815]
-
-Fri Dec 31 11:15:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/zlib/zlib.c (sizeof): zlib.h mistakenly assumes the result
- of sizeof to be int, not size_t.
-
-Fri Dec 31 10:27:34 2010 Tanaka Akira <akr@fsij.org>
-
- * st.c: parenthesize macro arguments.
-
-Fri Dec 31 03:23:26 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vsnprintf.c (BSD__uqtoa): Fix overflow when long != quad_t.
- patched by Peter Weldon <peter.weldon AT null.net>
- [ruby-core:33985]
-
-Fri Dec 31 03:00:34 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * Makefile.in: remove unnecessary semicolons.
-
-Thu Dec 30 23:09:47 2010 wanabe <s.wanabe@gmail.com>
-
- * vm.c (vm_define_method): guard iseq from GC while method definition.
- [ruby-dev:42832]
-
-Thu Dec 30 20:18:32 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * win32/Makefile.sub: ditto.
-
-Thu Dec 30 20:57:09 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * Makefile.in: Check V=1 argument if run "make clean" or similar.
-
-Thu Dec 30 20:41:50 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * Makefile.in: Kill ugly line continuation.
-
-Thu Dec 30 11:49:40 2010 Tanaka Akira <akr@fsij.org>
-
- * sprintf.c: parenthesize macro arguments.
-
-Wed Dec 29 21:20:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (maygvl_copy_stream_wait_readwrite): define if USE_SENDFILE
-
-Wed Dec 29 20:37:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: strip current directory prefix.
-
- * enc/depend (clean): remove name2ctype.h when out-of-place build.
-
- * win32/Makefile.sub (clean-enc): pass V to inferior make.
-
-Wed Dec 29 18:23:46 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * re.c (rb_reg_expr_str): need to escape if the coderange is invalid.
-
-Wed Dec 29 10:06:51 2010 Tanaka Akira <akr@fsij.org>
-
- * signal.c: parenthesize macro arguments.
-
-Wed Dec 29 07:22:15 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rake/rdoctask.rb: Deprecate in favor of rdoc/task.
-
-Wed Dec 29 07:07:06 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Import RDoc 3.1
-
-Tue Dec 28 18:36:38 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * error.c, include/ruby/intern.h (rb_compile_error_with_enc): new
- function to raise syntax error, with source encoding'ed message.
-
- * parse.y (compile_error): use above function.
- [ruby-core:33951] (#4217)
-
-Tue Dec 28 07:37:38 2010 Tanaka Akira <akr@fsij.org>
-
- * ruby.c: parenthesize macro arguments.
-
-Tue Dec 28 07:17:11 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: add ARGF.write and so on.
-
-Tue Dec 28 07:12:38 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: add new magic-comment. (warn-indent) [ruby-core:25442]
-
-Tue Dec 28 04:32:37 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/fiddle/extconf.rb: check for windows.h while building fiddle.
- Thanks Jon Forums! [ruby-core:33923]
-
-Tue Dec 28 01:45:12 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: Add Zlib.deflate and Zlib.inflate.
- [ruby-dev:42833]
-
-Mon Dec 27 21:22:33 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * win32/configure.bat: Remove obsoleted coding rule. Now, we
- don't support to build on Windows 95/98 and Me.
-
-Mon Dec 27 18:27:13 2010 Tanaka Akira <akr@fsij.org>
-
- * re.c: parenthesize macro arguments.
-
-Mon Dec 27 15:22:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/README.win32: note to need NT based OS to build ruby.
-
-Mon Dec 27 12:14:46 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (EXTMK_ARGS): specify to pass macro V, because nmake
- doesn't pass it via MAKEFLAGS.
-
-Mon Dec 27 10:33:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/zlib/zlib.c (Init_zlib): Add Zlib.deflate and Zlib.inflate.
- [ruby-dev:42833]
-
-Mon Dec 27 07:38:07 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * misc/rb_optparse.zsh: add compdef for generator.
-
-Mon Dec 27 07:32:07 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * lib/optparse.rb (OptionParser#compsys): escape brackets too.
- [ruby-dev:42754]
-
-Mon Dec 27 01:30:08 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: add IF_NAMESIZE.
- add a default for INET6_ADDRSTRLEN.
-
-Sun Dec 26 23:49:47 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * win32/Makefile.sub: suppress a strange error message when RMALL
- found no such file.
- * win32/rmall.bat: new.
-
-Sun Dec 26 21:23:23 2010 <kosaki.motohiro@gmail.com>
-
- * win32/Makefile.sub: fix 'nmake clean-enc' breakage since r28322.
-
-Sun Dec 26 22:25:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/ripper/depend (ripper.y): fix messages with nmake.
- [ruby-dev:42896]
-
-Sun Dec 26 22:24:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): get rid of warnings caused by
- -Wdeclaration-after-statement on cygwin.
-
-Sun Dec 26 20:28:34 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * process.c (before_exec): add small comment.
-
-Sun Dec 26 20:52:21 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: define INET_ADDRSTRLEN as 16 if not
- available. fix compilation error on mswin32-60. reported by nobu.
-
-Sun Dec 26 19:37:37 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c: define IFNAMSIZ if not available.
- fix compilation error on mingw32. reported by nobu.
-
-Sun Dec 26 12:16:29 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/ri/paths.rb (RDoc::RI::Paths::HOMEDIR): no exception if
- HOME is not set. [ruby-core:33867]
-
-Sun Dec 26 11:39:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stmt): missing ripper rule. i.e., `a::B ||= c 1'.
- http://twitter.com/#!/wannabe53/status/18797576396472321
- http://twitter.com/#!/wannabe53/status/18798416150663168
-
-Sun Dec 26 11:15:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/with_different_ofs.rb (DifferentOFS): should not affect
- original classes.
-
-Sun Dec 26 09:35:07 2010 Tanaka Akira <akr@fsij.org>
-
- * rational.c: parenthesize macro arguments.
-
-Sun Dec 26 09:22:19 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (rb_if_indextoname): new function to abstract
- environments without if_indextoname.
- (inspect_ipv6_multicast_if): new function to inspect
- IPV6_MULTICAST_IF.
- Socket::Option.new(:INET6, :IPV6, :MULTICAST_IF,
- [2].pack("I!")).inspect is
- "#<Socket::Option: INET6 IPV6 MULTICAST_IF eth0>".
-
-Sun Dec 26 04:31:15 2010 Luis Lavena <luislavena@gmail.com>
-
- * ext/dl/win32/registry.rb: Corrected RegCreateKeyExA signature.
- Patch by Rafal Michalski [ruby-core:33874] [Ruby 1.9-Bug#4203]
-
-Sun Dec 26 02:31:58 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (advice_arg_check): Change argument check.
- Now, an unsupported advice makes NotImplementedError.
- [ruby-dev:42887] [Ruby 1.9-Feature#4204]
-
-Sun Dec 26 03:00:53 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/socket/extconf.rb: Fix build error which was introduced r30372.
-
-Sun Dec 26 01:37:10 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/extconf.rb: check the existence of if_indextoname().
-
- * ext/socket/option.c: yesterday's akr's commits destroyed the build of
- some unrelated platforms (such as Windows).
-
-Sat Dec 25 23:29:11 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (inspect_ipv4_add_drop_membership): new function
- to inspect struct ip_mreq and struct ip_mreqn for
- IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
- Socket::Option.new(:INET, :IP, :ADD_MEMBERSHIP,
- [239,255,99,81, 0,0,0,0].pack("CCCCCCCC")).inspect is now
- "#<Socket::Option: INET IP ADD_MEMBERSHIP 239.255.99.81 0.0.0.0>".
- (inspect_ipv4_multicast_if): new function to inspect struct in_addr
- and struct ip_mreqn for IP_MULTICAST_IF.
- Socket::Option.new(:INET, :IP, :MULTICAST_IF,
- [192,168,0,7].pack("CCCC")).inspect is now
- "#<Socket::Option: INET IP MULTICAST_IF 192.168.0.7>".
-
- * ext/socket/extconf.rb: check struct ip_mreq and struct ip_mreqn.
-
-Sat Dec 25 22:49:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/csv: DifferentOFS needs to be include in each classes.
-
- * test/digest/test_digest_extend.rb (TestDigestExtend#setup):
- should not depend on the result of previous tests
-
- * test/with_different_ofs.rb (DifferentOFS::WithDifferentOFS): give
- name.
-
- * test/with_different_ofs.rb (DifferentOFS): test suite for test
- suites affected by $,.
-
- * test/digest/test_digest_extend.rb (TestDigestExtend): should not
- assume $, invariant.
-
- * test/csv/test_data_converters.rb, test/csv/test_table.rb: don't
- call setup within tests.
-
-Sat Dec 25 20:01:40 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (pipe_open): Added rb_thread_atfork(). We must reinitialize
- GVL at new process creation.
-
-Sat Dec 25 18:26:55 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (inspect_ipv6_mreq): new function to inspect
- struct ipv6_mreq for IPV6_JOIN_GROUP and IPV6_LEAVE_GROUP.
- Socket::Option.new(:INET6, :IPV6, :JOIN_GROUP,
- [0xff12,0,0,0,0,0,0,1, 2].pack("nnnnnnnnI!")).inspect is now
- "#<Socket::Option: INET6 IPV6 JOIN_GROUP ff12::1 eth0>".
-
- * ext/socket/extconf.rb: check struct ipv6_mreq.
-
-Sat Dec 25 18:04:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/csv.rb (CSV.foreach): 'rb' mode is defaulted in open.
-
- * lib/csv.rb (CSV#init_separators): cannonicalize encoding options
- as Encoding objects.
-
-Sat Dec 25 18:30:34 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (rb_thread_atfork): Add small comment why we need
- reset random seed.
-
-Sat Dec 25 17:33:55 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/csv/base.rb (TestCSV.with_different_ofs): give name to
- anonymous classes.
-
- * lib/csv.rb (CSV#init_separators): use IO#gets with length
- parameter to get rid of wrong conversion.
-
- * lib/csv.rb (CSV::foreach, CSV#initialize): directly use encoding
-
- * lib/csv.rb, test/csv: should not assume $, invariant.
-
-Sat Dec 25 16:08:06 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * signal.c: change rb_atomic_t definition from uchar to uint.
-
-Sat Dec 25 15:04:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/csv/test_encodings.rb (TestEncodings#setup): fix evil test
- suite writing to the source directory.
-
-Sat Dec 25 15:08:08 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/pty/pty.c (chfunc): Added rb_thread_atfork_before_exec().
- We must reinitialize GVL at new process creation. Otherwise
- we may meet an insane deadlock. [Bug#4121][ruby-dev:42686]
-
-Sat Dec 25 14:27:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_extract_encoding_option): accept Encoding object as
- encoding: optional argument. [ruby-dev:42884]
-
-Sat Dec 25 13:37:55 2010 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 2.0.2 r6093.
-
-Sat Dec 25 13:05:59 2010 Tanaka Akira <akr@fsij.org>
-
- * random.c: parenthesize macro arguments.
-
-Sat Dec 25 12:48:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (rb_f_require_relative): don't omit return type.
-
-Sat Dec 25 11:06:00 2010 Eric Hodel <drbrain@segment7.net>
-
- * load.c (rb_f_require_relative): Add documentation.
-
-Sat Dec 25 11:02:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/zlib/zlib.c (gzreader_gets): support optional length
- parameter.
-
- * ext/zlib/zlib.c (gzfile_read, gzfile_readpartial): length should
- be long.
-
-Sat Dec 25 10:51:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/json/generator/generator.{c,h} (fbuffer_free_only_buffer):
- unused.
-
- * ext/openssl/ossl_pkcs5.c (ossl_pkcs5_pbkdf2_hmac): add casts.
-
-Fri Dec 24 08:46:04 2010 Tanaka Akira <akr@fsij.org>
-
- * process.c: parenthesize macro arguments.
-
-Thu Dec 23 19:17:14 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/net/imap/cacert.pem: updated because it has been expired.
-
- * test/net/imap/server.crt: signed again because CA cert was expired.
-
-Thu Dec 23 11:16:52 2010 Tanaka Akira <akr@fsij.org>
-
- * parse.y: parenthesize macro arguments.
-
-Thu Dec 23 11:00:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (rb_check_type): check for type from extensions for ruby
- 1.8. see [ruby-core:33797].
-
-Thu Dec 23 08:12:59 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/net/smtp.rb: refactoring Net::SMTP#esmtp= to use an
- attr_accessor
-
-Thu Dec 23 06:35:41 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/net/smtp.rb: Net::SMTP should close the SSL connection if the
- connection verification fails.
-
-Thu Dec 23 01:47:58 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: remove #object_id. [ruby-dev:42840]
-
-Wed Dec 22 08:56:39 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: add Module#private_constant and Module#public_constant.
- [ruby-dev:39685][ruby-core:32698]
-
-Wed Dec 22 07:59:23 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: add IO#advise. [ruby-core:33110] [Ruby 1.9-Feature#4038]
-
-Tue Dec 21 23:45:31 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (Init_GC): move back object_id to Kernel. [ruby-dev:42840]
-
-Tue Dec 21 12:45:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (target_archs): remove temporary objects.
-
- * enc/Makefile.in, enc/depend (clean): remove work directories.
-
-Tue Dec 21 07:39:12 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c: parenthesize macro arguments.
-
-Tue Dec 21 06:25:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/rexml/test_contrib.rb (ContribTester#test_pos): should not
- use fixed path name for tests. [ruby-dev:42827]
-
- * test/rexml/test_sax.rb (SAX2Tester#test_socket): should not use
- fixed port for tests. [ruby-dev:42828]
-
-Tue Dec 21 06:10:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (setup_args), vm.c (invoke_block_from_c),
- vm_insnhelper.c (caller_setup_args): reverted r30241 and r30243
- except for the test.
-
-Tue Dec 21 01:41:42 2010 Masaya Tarui <tarui@ruby-lnag.org>
-
- * io.c : add an extra byte to buffer for the specification of read
- in Windows. see [ruby-core:33460] and r29980. and, we have to
- discuss how to do this one byte.
-
-Tue Dec 21 01:18:06 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * error.c: Fix build error for win32. This regression was
- introduced by r30271.
-
-Tue Dec 21 00:59:40 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (thread_cleanup_func): Moved interrupted_lock
- destroying code from native_thread_destroy() to
- thread_cleanup_func() because it's platform independent logic.
-
- * thread_win32.c (native_thread_destroy): ditto.
- * thread_pthread.c (native_thread_destroy): ditto.
-
-Tue Dec 21 00:46:20 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (thread_cleanup_func): Don't touch native threading
- resource at fork. Sadly this is purely bandaid. We need to
- implement proper fix later. [Bug #4169] [ruby-core:33767]
-
-Tue Dec 21 00:22:44 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * error.c (exit_success_p): Check status code more carefully.
- status code may have garbage in upper bit.
-
-Mon Dec 20 23:12:37 2010 Tanaka Akira <akr@fsij.org>
-
- * node.c: parenthesize macro arguments.
-
-Mon Dec 20 20:04:41 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: add #__id__ and #object_id. [ruby-dev:42778]
-
-Mon Dec 20 20:03:21 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread_pthread.c (native_thread_destroy): Fixed gvl_cond leak.
-
-Mon Dec 20 13:49:05 2010 Eric Hodel <drbrain@segment7.net>
-
- * NEWS: Add item for RDoc 3.0.1
-
- * lib/rdoc: Import RDoc 3.0.1, remove require for perl parser.
-
-Mon Dec 20 12:15:32 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Import RDoc 3.0.
-
-Mon Dec 20 01:55:03 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (Init_IO): Added O_DIRECT. This feature was proposed by
- Run Paint Run Run.
- [Feature #4015] [ruby-core:33018]
-
-Sun Dec 19 19:15:23 2010 Tanaka Akira <akr@fsij.org>
-
- * marshal.c: parenthesize macro arguments.
-
-Sat Dec 18 21:52:37 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * vsnprintf.c (BSD_vfprintf): suppress warning: "_WIN32" is not
- defined.
-
-Sat Dec 18 16:02:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (setup_args), vm.c (invoke_block_from_c),
- vm_insnhelper.c (caller_setup_args): fix of r30241. lambda block
- should check argument number.
-
-Sat Dec 18 14:42:29 2010 Tanaka Akira <akr@fsij.org>
-
- * load.c: parenthesize macro arguments.
-
-Sat Dec 18 10:07:04 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (setup_args, iseq_compile_each): optimize AMPER LAMBDA
- combination as block.
-
-Fri Dec 17 22:07:16 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (Init_GC): move #__id__ and #object_id to BasicObject.
- [ruby-dev:42778]
-
-Fri Dec 17 19:35:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/mkmf/base.rb (TestMkmf::FakeLog): capture output from mkmf.
-
- * test/mkmf/test_find_executable.rb (test_find_executable):
- suppress meaningless differences for chkbuild.
-
-Fri Dec 17 13:26:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/setup.mak (BASERUBY): quit with an error when BASERUBY was not
- able to set, just like configure.in does. [ruby-dev:42782]
-
-Fri Dec 17 07:04:09 2010 Tanaka Akira <akr@fsij.org>
-
- * iseq.c: parenthesize macro arguments.
-
-Fri Dec 17 04:18:37 2010 Eric Hodel <drbrain@segment7.net>
-
- * transcode.c (str_encode): Alter comment for better wording and ri
- output.
-
-Fri Dec 17 00:05:40 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * io.c (rb_io_advise): New API. IO#advise() allows to tell the
- ruby runtime how it expects to use a file handle. This feature
- can be improved a performance some situations.
- Note: This feature is mainly developed by Run Paint Run Run.
- Thank you! [ruby-core:33110] [Ruby 1.9-Feature#4038]
-
- * io.c (do_io_advise): Helper function.
- * io.c (io_advise_sym_to_const): ditto.
-
-Thu Dec 16 23:29:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/rbinstall.rb (bin-comm): use transformed name.
- [ruby-dev:42777]
-
-Thu Dec 16 21:52:07 2010 Tanaka Akira <akr@fsij.org>
-
- * io.c: parenthesize macro arguments.
-
-Thu Dec 16 21:46:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/mkconfig.rb (RbConfig): honor ARCHFLAGS and RC_ARCHS to
- override embedded ARCH_FLAG value on universal-darwin.
-
-Thu Dec 16 19:50:12 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/{configure.bat,setup.mak,Makefile.sub} (PROGRAM_PREFIX,
- PROGRAM_SUFFIX): unite the differences of the names of macros of
- prefix and suffix.
- reported by HANEDA Norikatsu. [ruby-dev:42775]
-
-Thu Dec 16 08:04:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * node.h (RNode): match the type of flags to RBasic, and renamed
- nd_file as nd_reserved.
-
- * iseq.c (set_relation), vm_insnhelper.c (vm_cref_push): nd_file
- is always zero-cleared.
-
-Thu Dec 16 07:22:30 2010 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/unit.rb: Imported minitest 2.0.1 r6079.
-
-Wed Dec 15 20:45:02 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/test/unit.rb (process_args): need to setup @help to print options.
-
-Wed Dec 15 11:19:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/zlib/test_zlib.rb (test_to_io): forgotten to fix with r30201.
-
-Wed Dec 15 11:07:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (simple_sendfile): enable on Mac OS X.
-
- * io.c (nogvl_copy_stream_sendfile): moved precheck of copy length.
-
- * io.c (nogvl_copy_stream_sendfile): should wait for both of
- read/write fds.
-
-Wed Dec 15 07:11:55 2010 Tanaka Akira <akr@fsij.org>
-
- * hash.c: parenthesize macro arguments.
-
-Wed Dec 15 04:02:00 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * ext/openssl/ossl_x509ext.c (ossl_x509extfactory_set_config):
- fix compile error when !HAVE_X509V3_SET_NCONF. Thanks
- Chikanaga-san. [ruby-dev:42761] [Ruby 1.9-Bug#4158]
-
-Wed Dec 15 03:41:31 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ripper/test_parser_events.rb (TestRipper#test_block_variables):
- Limit address space 100MB instead 100KB. Quite frankly, This
- margin is too narrow to contain ruby. [ruby-dev:42763] [Bug#4159]
-
-Tue Dec 14 23:53:52 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (simple_sendfile): improve linux compatibility on FreeBSD,
- and now it works. But without cpuset -l 0, it still gets stuck.
-
-Tue Dec 14 20:31:33 2010 Tanaka Akira <akr@fsij.org>
-
- * gc.c: parenthesize macro arguments.
-
-Tue Dec 14 18:31:48 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/test/unit.rb: help messages.
-
-Tue Dec 14 18:19:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (help): there is no reason to use the abbreviation for here.
-
-Tue Dec 14 15:03:46 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_io.rb (test_reopen, test_reinitialize): should close
- the temporary files.
-
-Tue Dec 14 14:24:15 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_io.rb (make_tempfile): change the prefix from 'foo'
- to 'test_io' because the old one is meaningless and inconvenient.
-
- * test/ruby/test_io.rb (test_binmode_after_closed): the temporary file
- made by make_temfile is already closed.
-
-Tue Dec 14 13:52:19 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_io.rb (test_flush_in_finalizer[12]): should close
- temporary file because it's only used for taking pathname and
- unlinking the file after the end of the test (in GC phase).
-
-Tue Dec 14 13:34:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/zlib/zlib.c (gzfile_s_open): should close the IO if some error
- occurs in initializing.
-
-Tue Dec 14 13:04:16 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTPRequest#send_request_body_data):
- set binmode to tempfile.
-
-Tue Dec 14 12:55:46 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/zlib/test_zlib.rb (*): should close files associated with zlib.
-
-Tue Dec 14 11:30:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_argf.rb (test_inplace_rename_impossible): unlink
- the renamed temporary file on no_safe_rename platforms.
-
- * test/ruby/test_argf.rb (test_readlines_limit_0,
- test_each_line_limit_0): should close argf because the associated
- Tempfile object cannot unlink the temporary file when it's gc'ed
- on some platforms (Windows, etc.)
-
-Tue Dec 14 11:27:07 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/minitest/unit.rb (Minitest::Unit#_run_suite): split test
- name and its time. Thiw allows to know test's name when you are
- running tests and meet a test which spends long time at realtime.
-
-Tue Dec 14 11:25:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in: Add -Werror=declaration-after-statement to default
- warning flag. If you are using GCC, this flag is useful to
- prevent breaking VC build.
-
-Tue Dec 14 10:25:57 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/ossl_asn1.c (ossl_asn1_decode0): how many gcc-c99isms
- must a man mend; before he can build with VC? r30178
-
-Mon Dec 13 21:26:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (simple_sendfile): disable the use of sendfile(2) on
- FreeBSD. It blocks on TestIO#test_copy_stream_socket.
-
-Mon Dec 13 18:35:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c: define USE_SENDFILE on FreeBSD or DragonFly BSD.
- Remove Mac OS X because its argument is different from them.
-
-Mon Dec 13 12:00:09 2010 Tanaka Akira <akr@fsij.org>
-
- * file.c: parenthesize macro arguments.
-
-Mon Dec 13 11:21:14 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (simple_sendfile): added for BSD version of sendfile(2).
-
-Mon Dec 13 09:50:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTPRequest#set_form): Added to support
- both application/x-www-form-urlencoded and multipart/form-data.
- There is a similar API, Net::HTTPRequest#set_form_data, but
- to keep its compatibility this is newly added. [ruby-dev:42729]
-
-Sun Dec 12 23:45:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_compile_each): fix for __goto__ and __label__
- where were totally broken.
-
-Sun Dec 12 22:45:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (ID_H_INCLUDES): now id.h depends on vm_opts.h.
-
-Sun Dec 12 20:42:47 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * template/id.h.tmpl: suppress all warning: "SUPPORT_JOKE" is not
- defined. [ruby-dev:42730]
-
-Sun Dec 12 20:35:07 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * misc/rb_optparse.zsh: update how to install.
-
- * misc/rb_optparse.zsh: avoid error when setopt noclobber.
-
- * lib/optparse.rb: fix typo. pointed out at
- <http://d.hatena.ne.jp/nagachika/20101207>.
-
-Sun Dec 12 13:27:35 2010 Tanaka Akira <akr@fsij.org>
-
- * eval_error.c: parenthesize macro arguments.
-
-Sun Dec 12 11:53:24 2010 Tanaka Akira <akr@fsij.org>
-
- * error.c: parenthesize macro arguments.
-
-Sun Dec 12 04:01:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_inspect): fix: extra back slash is added when
- the string is dummy encoding and includes \x22 or \x5C.
-
-Sun Dec 12 02:42:24 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/openssl/ossl_asn1.c: indefinite length BER to DER encoding is
- properly supported. Thanks Martin Bosslet! [ruby-core:33082]
-
-Sat Dec 11 17:43:34 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * ext/bigdecimal/bigdecimal.h: suppress "warning: 'VPrint' declared
- 'static' but never defined".
-
-Sat Dec 11 09:24:57 2010 Tanaka Akira <akr@fsij.org>
-
- * encoding.c: parenthesize macro arguments.
-
-Sat Dec 11 08:12:48 2010 Eric Hodel <drbrain@segment7.net>
-
- * ext/openssl/ossl.c, ext/openssl/ossl_pkey_rsa.c: Document RSA, RSA
- encryption/decryption and PKCS #5 encryption/decryption.
-
-Sat Dec 11 06:23:41 2010 Eric Hodel <drbrain@segment7.net>
-
- * ext/openssl/ossl_x509name.c: include Comparable to provide #==.
- Document OpenSSL::X509::Name#<=>. [Ruby 1.9-Feature#4116]
-
-Sat Dec 11 05:48:28 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: infinite loop on method_missing at loading.
- [ruby-dev:42716] [Ruby 1.9-Bug#4129]
-
- * ext/tk/lib/multi-tk.rb: when no eventloop is running, ruby freezes at
- exit.
-
-Sat Dec 11 02:23:15 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/openssl/extconf.rb: try pkgconfig first, then fall back to
- normal have_library, etc. Thanks Erik Hollensbe. [ruby-core:32406]
-
-Fri Dec 10 22:33:39 2010 Tanaka Akira <akr@fsij.org>
-
- * dln_find.c: parenthesize macro arguments.
-
-Fri Dec 10 20:05:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * template/id.h.tmpl (ruby_method_ids): suppress warnings.
- [ruby-dev:42730]
-
-Fri Dec 10 18:29:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_init_loadpath_safe): relatively called non-shared
- binary cannot be found in PATH, so use given pathname.
-
-Fri Dec 10 18:28:40 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cygwin/GNUmakefile.in (SCRIPTPROGRAMS): ignore backup files and etc.
-
- * cygwin/GNUmakefile.in (scriptbin): set executable bit.
-
- * tool/rbinstall.rb (install_recursive): always skip default ignored
- files. if block is given, call it instead of calling install.
-
- * tool/rbinstall.rb (bin-comm): use install_recursive.
-
-Fri Dec 10 18:12:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/mkmf/base.rb (TestMkmf#config_value): extract macro value from
- config.h.
-
- * test/mkmf/test_sizeof.rb (TestMkmf::TestSizeof#test_sizeof_builtin),
- (TestMkmf::TestSizeof#test_sizeof_struct): more tests.
-
- * lib/mkmf.rb (check_signedness): should use the prelude code.
- [ruby-dev:42731]
-
- * lib/mkmf.rb (Logging.log_close): separate from Logging.logfile.
-
- * test/mkmf/base.rb (TestMkmf::MKMFLOG): show mkmf.log at failures.
-
- * test/mkmf/base.rb (TestMkmf#teardown): close log file for each tests.
-
-Fri Dec 10 11:36:43 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * compile.c (enum): remove a comma at end of enumerator list.
-
- * constant.h (rb_const_flag_t): ditto.
-
- * iseq.h (enum catch_type): ditto.
-
- * iseq.h (enum defined_type): ditto.
-
- * vm_core.h (enum iseq_type): ditto.
-
- * vm_core.h (enum vm_special_object_type): ditto.
-
-Fri Dec 10 10:47:53 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * sprintf.c (_HAVE_SANE_QUAD_): Don't forget LP64, r30156.
-
-Fri Dec 10 10:37:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * sprintf.c (_HAVE_SANE_QUAD_): if a certain platform has LONG_LONG in
- 8 byte, it might be sane quad. [ruby-core:33634]
-
-Fri Dec 10 10:07:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb: remove version 1.1 features.
-
-Fri Dec 10 02:18:02 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/openssl/ossl_x509store.c (ossl_x509stctx_cleanup): removing C
- implementation of `cleanup`.
-
- * ext/openssl/lib/openssl/x509.rb: adding ruby implementation of
- `cleanup`. OpenSSL::X509::StoreContext#cleanup is deprecated since
- reusing the underlying struct doesn't make sense. [ruby-dev:42546]
-
-Thu Dec 9 20:14:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (lvar_defined_gen, shadowing_lvar_gen, dvar_defined): no
- warnings for unused method and block arguments.
- [ruby-dev:42718] [ruby-dev:42724]
-
-Thu Dec 9 19:25:49 2010 Tanaka Akira <akr@fsij.org>
-
- * dln.c: parenthesize macro arguments.
-
-Thu Dec 9 18:51:06 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/webrick/accesslog.rb (WEBrick::AccessLog#format): support
- %{remote}p for logging remote (client) port number.
- [ruby-dev:42670]
-
-Thu Dec 9 11:00:30 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_dup): should copy contents only. no instance
- variable, no class would be copied. it would affect methods
- #sort, #reject, #transpose, #uniq, #compact, and #shuffle.
- [ruby-core:33640]
-
- * array.c (rb_ary_reverse_m): ditto.
-
- * array.c (rb_ary_rotate_m): ditto.
-
-Wed Dec 8 21:38:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/dl/lib/dl/struct.rb: clean a warning: assigned but unused
- variable. patched by Kouhei Yanagita. [ruby-dev:42722]
-
- * ext/dl/lib/dl/import.rb: ditto.
-
-Wed Dec 8 21:36:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (shadowing_lvar_gen): fix line number. [ruby-dev:42718]
-
-Wed Dec 8 20:37:11 2010 Tanaka Akira <akr@fsij.org>
-
- * dir.c: parenthesize macro arguments.
-
-Tue Dec 7 22:37:15 2010 Masaya Tarui <tarui@ruby-lnag.org>
-
- * io.c (io_read): duplicate string if shared. [ruby-dev:42719]
-
-Tue Dec 7 22:31:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser::Officious): separate completion
- options from --help. [ruby-dev:42690]
-
- * lib/optparse.rb (OptionParser::Completion#candidate),
- (OptionParser::Switch#compsys): remove unused variables.
-
-Tue Dec 7 22:05:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (transcode_loop): call default handler of the given
- hash, method, proc or [] method as fallback. [ruby-dev:42692]
-
-Tue Dec 7 21:59:37 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rexml/light/node.rb: remove circular require.
-
-Tue Dec 7 21:56:01 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/test_light.rb: really suppress a warning.
-
-Tue Dec 7 21:51:57 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/test_light.rb: suppress a warning.
-
-Tue Dec 7 21:14:03 2010 Tanaka Akira <akr@fsij.org>
-
- * debug.c: parenthesize macro arguments.
-
-Tue Dec 7 21:06:38 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rexml/doctype.rb, test/rexml/test_doctype.rb: suppress warnings.
- [ruby-core:33305]
- Reported by Aaron Patterson. Thanks!!!
-
-Tue Dec 7 18:56:52 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/lib/kconv.rb (String#kconv): fix typo and update rdoc.
- patched by Kouhei Yanagita [ruby-dev:42696]
-
-Tue Dec 7 20:32:11 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/test_doctype.rb: add Accessor to test case name.
-
-Tue Dec 7 20:31:02 2010 Kouhei Sutou <kou@clear-code.com>
-
- * test/rexml/test_doctype.rb: Doctype -> DocType.
-
-Tue Dec 7 20:29:23 2010 Kouhei Sutou <kou@clear-code.com>
-
- * test/rexml/test_doctype_mixin.rb: rename to ...
- * test/rexml/test_doctype.rb: ... this to remove needless name.
-
-Tue Dec 7 17:03:16 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (xlist): supported the XLIST command, which is an
- extension by Apple and Google. patch by Geoff Youngs.
- [ruby-core:33521]
-
-Tue Dec 7 08:00:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, win32/Makefile.sub (WERRORFLAG): flag to treat
- warnings as errors.
-
- * lib/mkmf.rb (Logging.postpone): yield log file object.
-
- * lib/mkmf.rb (xsystem): add options, :werror only right now.
-
- * lib/mkmf.rb (with_werror): check as if warnings are errors.
-
- * lib/mkmf.rb (convertible_int): make declaration conflict
- warnings errors not to pass wrong type. [ruby-dev:42684]
-
- * lib/mkmf.rb (COMMON_MACROS): get rid of conflicts.
-
- * win32/Makefile.sub (WARNFLAGS): make declaration conflict
- warnings errors if possible.
-
-Sun Dec 7 21:16:10 2010 Tanaka Akira <akr@fsij.org>
-
- * cont.c: parenthesize macro arguments.
-
-Tue Dec 7 00:27:14 2010 Masaya Tarui <tarui@ruby-lnag.org>
-
- * win32/win32.c (rb_w32_read): fixed more for readline,
- and so on. [ruby-core:33511]
-
-Mon Dec 6 23:18:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/mkmf/base.rb (TestMkmf#setup): run quietly.
-
- * test/mkmf/test_find_executable.rb (test_find_executable): use
- configured results.
-
- * common.mk (test-build): test for build process.
-
-Mon Dec 6 22:47:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#candidate): skip separators.
-
- * sample/optparse/opttest.rb: should not override --help.
- [ruby-dev:42690]
-
-Mon Dec 6 19:00:48 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * misc/rb_optparse.zsh: fix typos.
-
-Mon Dec 6 18:59:04 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: add new encodings.
-
-Mon Dec 6 18:56:42 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_string.rb (TestString#test_scan): add a test for
- [ruby-core:33338] #4087.
-
-Mon Dec 6 18:55:36 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/uri/test_common.rb (TestCommon#test_encode_www_form): add
- tests for r30015.
-
-Mon Dec 6 10:39:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb (URI::Parser#initialize_pattern):
- refix for restrict the pattern.
-
-Mon Dec 6 09:45:11 2010 Eric Hodel <drbrain@segment7.net>
-
- * ext/openssl (OpenSSL): add toplevel documentation
- * ext/openssl/ossl_ssl.c (SSLContext, SSLSocket: add additional
- documentation
- * ext/openssl: move "let rdoc know about mOSSL" comments so they don't
- show up in output
-
-Mon Dec 6 09:16:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb (URI::Parser#initialize_pattern):
- workaround fix pattern of hostname for RFC 3986. [ruby-dev:42672]
-
-Mon Dec 6 09:14:38 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/mkmf.rb (check_signedness): rename unused variable prelude.
-
-Sun Dec 5 17:56:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * class.c (make_metaclass): fix probable typo. builtin type flag
- cannot be used with FL_TEST.
-
-Sun Dec 5 12:09:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/irb/init.rb (IRB.parse_opts): fix typo. [ruby-core:33574]
-
-Sun Dec 5 11:27:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (load_file_internal): decrement for ungotten line.
- [ruby-dev:42680]
-
-Sun Dec 5 10:32:11 2010 Tanaka Akira <akr@fsij.org>
-
- * complex.c: parenthesize macro arguments.
-
-Sat Dec 4 11:39:17 2010 Eric Hodel <drbrain@segment7.net>
-
- * ext/openssl/ossl_x509ext.c (initialize): add documentation.
-
-Sat Dec 4 11:21:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (rb_hash_update_by): new API for Hash#update.
-
-Sat Dec 4 11:18:10 2010 Tanaka Akira <akr@fsij.org>
-
- * class.c: parenthesize macro arguments.
-
-Sat Dec 4 11:07:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (rb_vm_inc_const_missing_count): missing prototype.
-
-Sat Dec 4 08:50:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (Init_iconv): no warnings if $VERBOSE is nil.
-
-Sat Dec 4 08:25:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_call_method): revert r30064 and r30071,
- because of [ruby-core:26761]. Bug#4106 rejected.
-
-Sat Dec 4 07:46:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (String#tr_cpp): substitute * with P like as
- autoconf.
-
-Fri Dec 3 22:36:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_call_method): protected methods should be
- checked against the real class.
-
-Fri Dec 3 20:23:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (convertible_int): define printf format prefix too.
-
- * lib/mkmf.rb (convertible_int): detect convertible integer type.
- port RUBY_REPLACE_INT from configure.in.
-
- * lib/mkmf.rb (check_sizeof): should return integer always.
-
-Fri Dec 3 12:54:48 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (RCFLAGS): VC10 and after only. fixed the problem
- of r30015. [ruby-core:33530]
-
-Fri Dec 3 12:41:52 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * gc.c (rb_objspace_free): With our "lazy-sweep" GC engine, it is
- possible for an object to survive until its surrounding object
- space is about to be freed. Those objects, if any, remains
- leaked for the rest of a process life. This is problematic
- because for instance a T_DATA object may have its own destructor
- to terminate something.
-
- * vm.c (ruby_vm_destruct): ruby_current_vm termination should be
- somewhere after rb_objspace_free for above reason.
-
-Fri Dec 3 12:17:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_call_method): protected singleton methods should
- be visible from same real class methods. [ruby-core:33506]
-
-Fri Dec 3 07:08:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_getline): round upto next char
- boundary. [ruby-dev:42674]
-
-Fri Dec 3 06:52:46 2010 Tanaka Akira <akr@fsij.org>
-
- * compile.c: parenthesize macro arguments.
-
-Fri Dec 3 04:08:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_alias_internal): use st_insert2 and change return
- value to int.
-
- * encoding.c (enc_alias): follow enc_alias_internal.
-
-Fri Dec 3 01:52:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_alias_internal): use xfree instead of free.
-
-Thu Dec 2 23:52:26 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * NEWS: entry for ruby_vm_at_exit().
-
- * eval.c (ruby_cleanup): bug fix around at_exit (1) timing was
- wrong. (2) execution order was opposite.
-
-Thu Dec 2 23:05:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (RCFLAGS): -nologo switch is only available in
- newer versions of rc.exe. fixed the problem of r30012.
-
-Thu Dec 2 21:28:07 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/lib/json/add/rails.rb: removed.
-
-Thu Dec 2 21:22:05 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_alias_internal): free the copied key and
- return NULL when given key is already registered.
-
- * encoding.c (enc_alias): call set_encoding_const only when the
- alias is not registered yet.
-
-Thu Dec 2 19:58:24 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * vm.c (ruby_vm_at_exit): new API. This enables extension libs to
- hook a VM termination. Right now, because the VM we have is
- process global, most extensions do not deallocate resources and
- leave them to Operating System's reaping userland processes. But
- in a future we plan to have multiple VMs to run simultaneously in
- a single process (MVM project). At that stage we can no longer
- rely on OSes and have to manage every resources to be reclaimed
- properly. So it is. For a forward-compatibility reason this API
- is introduced now, encouraging you to be as gentle as you can for
- your resources; that is, tidy up your room.
-
- * include/ruby/vm.h: ditto.
-
- * vm_core.h (rb_vm_struct): new field.
-
- * vm.c (vm_init2): initialize above new field.
-
- * eval.c (ruby_cleanup): trigger those hooks.
-
-Thu Dec 2 17:00:44 2010 Tanaka Akira <akr@fsij.org>
-
- * bignum.c: parenthesize macro arguments.
-
-Thu Dec 2 15:31:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_read): more fix. [ruby-core:33513]
-
-Thu Dec 2 13:41:43 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_read): workaround for console reading troubles.
- fixed [ruby-core:33511]
-
-Thu Dec 2 13:10:42 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb (URI.encode_www_form):
- split key-value when the value is Array like object.
-
-Thu Dec 2 10:39:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTP#set_form_data):
- use URI.encode_www_form for application/x-www-form-urlencoded.
-
-Thu Dec 2 10:38:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/extmk.rb: remove $makeflags.defined?, it should be $mflags.
-
-Thu Dec 2 10:19:47 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (rc): suppress meaningless message.
-
-Thu Dec 2 10:09:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/generator/extconf.rb: remove the lines which set -O3
- when -O option is not set.
- Note that -O3 doesn't always exist.
-
- * ext/json/parser/extconf.rb: ditto.
-
-Thu Dec 2 10:01:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/extmk.rb: define $makeflags.defined? like $mflags.
-
-Thu Dec 2 07:20:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit::GCStressOption): --gc-stress
- option.
-
- * lib/test/unit.rb (Test::Unit::Mini#_run_suites): show the result
- even when interrupted on the way.
-
-Thu Dec 2 07:08:38 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/console/console.c (setattr): should retry on EINTR.
- [ruby-dev:42666]
-
-Thu Dec 2 02:30:50 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/net/http.rb: fixed positional wording to match revised order.
-
-Thu Dec 2 01:24:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/lib/json/common.rb: don't use iconv on 1.9.
- patched by Shota Fukumori [ruby-core:33164]
-
-Thu Dec 2 01:02:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json: Update github/flori/json from 1.4.2+ to
- e22b2f2bdfe6a9b0. this fixes some bugs.
-
-Thu Dec 2 00:05:44 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb: improve rdoc.
- This change the order of chapter because such overview should
- begin with simple examples.
- patched by Eric Hodel [ruby-core:33469]
-
-Wed Dec 1 22:01:49 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (Init_Numeric): fixed a potential bug when using bccwin32
- ruby with Microsoft's dll, though we already gave up of supporting
- bccwin32. [ruby-core:33503]
-
-Wed Dec 1 21:43:21 2010 Tanaka Akira <akr@fsij.org>
-
- * array.c: parenthesize macro arguments.
-
-Wed Dec 1 21:41:57 2010 Tanaka Akira <akr@fsij.org>
-
- * test/socket/test_addrinfo.rb: extract Errno::EADDRINUSE as a method.
-
- * test/socket/test_socket.rb: ditto.
-
-Wed Dec 1 15:08:32 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/openssl/test_ssl.rb (test_not_started_session): non socket
- argument of SSLSocket.new is not supported on Windows.
-
-Wed Dec 1 14:36:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_memhash): zero-filled strings should return
- different values. [ruby-core:33500]
-
-Wed Dec 1 14:27:49 2010 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 2.0.0 r5952.
- * test/minitest/*.rb: ditto.
- * lib/test/unit.rb: Compatibility fix for minitest changes.
-
-Wed Dec 1 10:16:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_inspect): fix typo (not 0xFD but 0xFE).
-
-Wed Dec 1 09:28:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * addr2line.c: Follow .gnu_debuglink section.
- A user of distribution provided ruby will see line
- info if s/he has a debug package for ruby.
- patched by Shinichiro Hamaji [ruby-dev:42655]
-
-Wed Dec 1 01:29:15 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_inspect): inspect as a dummy encoding string
- when a UTF-16/32 (not BE/LE) string does not have a BOM.
- Unicode and some RFCs say that a string labeled as UTF-16/32
- doesn't have a BOM, it should be considered big endian.
- But many Windows programs generates little endian UTF-16
- strings without a BOM. So String#inspect treats a string
- labeled UTF-16/32 without a BOM as a dummy encoding string.
- patched by Martin Duerst. [ruby-core:33461]
-
-Tue Nov 30 17:04:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * addr2line.c (parse_debug_line_cu): ignore DW_LNE_set_discriminator.
- To ignore, it needs to read a single unsigned LEB128 integer.
-
-Tue Nov 30 16:29:19 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vm_dump.c: undef HAVE_BACKTRACE when the OS is FreeBSD (in other
- words backtrace() is libexecinfo) and it is optimized.
- This temporary hack may be also applied to other libexecinfo
- environments.
-
-Tue Nov 30 16:23:23 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb: improve rdoc.
- patched by Eric Hodel ref #4100
-
-Tue Nov 30 12:23:52 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_read): read only 1 byte at once on console.
- workaround of Windows bug. see [ruby-core:33460].
- this is not the final solution.
-
-Tue Nov 30 11:39:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb: improve rdoc.
- patched by mathew murphy [ruby-core:33472] ref #4100
-
-Tue Nov 30 05:03:44 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/uri/common.rb (encode_www_form, encode_www_form_component):
- Improve English in documentation.
-
- * ext/openssl/ossl_ssl.c (ssl_version=, ciphers=): Document
- #ssl_version=, add documentation for #ciphers=.
-
-Mon Nov 29 22:55:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/uri/common.rb (URI::WFKV_): get rid of backtrack explosion
- by nested repeat operators. [ruby-core:33464]
-
-Mon Nov 29 22:53:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (scriptbin.mk): fix generated rules.
-
- * win32/win32.c (rb_w32_write_console): fix argument type.
-
-Mon Nov 29 21:12:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-forward-sexp): stop after literal hash
- key labels.
-
- * misc/ruby-mode.el (ruby-font-lock-keywords): highlight literal
- hash key labels as symbols.
-
-Mon Nov 29 18:31:31 2010 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * test/ruby/test_transcode.rb (test_unicode_public_review_issue_121):
- - Removed commented-out options that are no longer under discussion.
- - Added two more tests for forthcomming clarifications.
-
-Mon Nov 29 14:31:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_isatty): use GetConsoleMode() to determine the
- fd is console or not, just like rb_w32_write_console(). [experimental]
-
-Mon Nov 29 14:19:40 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h (rb_w32_write_console): wrong prototype.
-
-Mon Nov 29 14:10:55 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_write_console): fixed indentation.
-
-Sun Nov 28 22:13:39 2010 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (NATIVE_MUTEX_LOCK_DEBUG): move and use it.
-
- * ChangeLog: fix my timezone.
-
-Mon Nov 28 21:58:58 2010 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c: remove pthread_atfork().
-
-Mon Nov 28 21:54:22 2010 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (native_cond_*): Check return code.
- (Some OSes except Linux return error code).
-
-Sun Nov 28 21:46:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (thread_start_func_1): initialize native thread
- data immediately before starting.
-
-Sun Nov 28 14:56:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (struct argf): make lineno long, and reorder members.
-
-Sun Nov 28 14:55:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_win32.c (gvl_release, gvl_init): suppress warnings.
-
-Sun Nov 28 14:48:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (gvl_release, gvl_init): suppress warnings.
-
- * vm_core.h (rb_vm_gvl_destroy): add prototype.
-
-Sun Nov 28 14:46:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (gvl_reinit): register atfork handler only in
- the parent process, to get rid of dead lock.
-
-Sun Nov 28 12:23:57 2010 Koichi Sasada <ko1@atdot.net>
-
- * thread.c, vm_core.h: make gvl_acquire/release/init/destruct
- APIs to modularize GVL implementation.
-
- * thread_pthread.c, thread_pthread.h: Two GVL implementations.
- (1) Simple locking GVL which is same as existing GVL.
- (2) Wake-up queued threads. The wake-up order is simple FIFO.
- (We can make several queues to support exact priorities, however
- this causes some issues such as priority inversion and so on.)
- This impl. prevents spin-loop (*1) caused on SMP environments.
- *1: Only one Ruby thread acquires GVL again and again.
- Bug #2359 [ruby-core:26694]
-
- * thread_win32.c, thread_win32.h: Using simple lock
- not by CRITICAL_SECTION but by Mutex.
- Bug #3890 [ruby-dev:42315]
-
- * vm.c (ruby_vm_destruct): ditto.
-
-Sun Nov 28 04:40:00 2010 Luis Lavena <luislavena@gmail.com>
-
- * io.c (io_fwrite): use rb_w32_write_console under Windows.
-
- * win32/win32.c (rb_w32_write_console): added to write to write
- Unicode using WriteConsoleW for stdout/stderr. [ruby-core:33166]
-
-Sun Nov 28 03:58:47 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb: improve rdoc.
- patched by Mike Perham [ruby-core:33433]
-
-Sat Nov 27 19:12:10 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c: parenthesize macro arguments.
-
-Sat Nov 27 18:08:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (leap_year_v_p): fixed typo. [ruby-dev:42631]
-
-Sat Nov 27 17:57:08 2010 Tanaka Akira <akr@fsij.org>
-
- * resolv.rb (Resolv::DNS): use the same DNS server when retry using
- TCP. reported by Julian Mehnle. [ruby-core:32970]
-
-Sat Nov 27 15:45:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_dump.c (rb_vm_bugreport): see CrashReport log on Mac OS X.
-
- * configure.in: link addr2line only for ELF.
-
-Sat Nov 27 13:58:55 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#candidate): : was missing. Thanks,
- Shota Fukumori. [ruby-dev:42634]
-
-Sat Nov 27 12:07:05 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * man/ruby.1: Ruby man page from Arthur Gunn in [ruby-core:33412]
-
-Sat Nov 27 11:29:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#candidate): get rid of 1.9 syntax
- so that BASERUBY can be 1.8.
-
-Sat Nov 27 08:16:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * addr2line.c (rb_dump_backtrace_with_lines): should close fd on
- edge case.
-
-Fri Nov 26 13:33:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * addr2line.c: apply a patch from shinichiro.h.
-
-Fri Nov 26 12:21:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * addr2line.c: added to show source filename and line number of
- functions in backtrace. [ruby-dev:42625]
- a patch from shinichiro.h <shinichiro.hamaji AT gmail.com>
-
- * addr2line.h: ditto.
-
- * common.mk: add addr2line.$(OBJEXT).
-
- * configure.in: check dl_iterate_phdr.
-
- * vm_dump.c (rb_vm_bugreport): use rb_dump_backtrace_with_lines in
- addr2line.c when the binary is ELF.
-
-Fri Nov 26 12:12:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regcomp.c (setup_tree): restart setup_tree() for a node whose
- AnchorNode's type is ANCHOR_PREC_BEHIND or ANCHOR_PREC_BEHIND_NOT
- and divide_look_behind_alternatives() divided it to NT_ALT or
- NT_LIST. [ruby-core:33370]
-
-Fri Nov 26 11:40:11 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * vm_dump.c (dump_thread): get only required rights of the target
- thread because THREAD_ALL_ACCESS causes an access error on XP.
- reported by Masaya TARUI via IRC.
-
-Fri Nov 26 11:09:07 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * vm_dump.c (dump_thread): show the displacement from the beginning
- of the symbol.
-
-Fri Nov 26 10:48:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * vm_dump.c (dump_thread): follow the output of glibc.
- see [ruby-dev:42627]
-
-Fri Nov 26 09:48:45 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * re.c (rb_reg_initialize_str): should succeed the taint status from
- the origin. [ruby-core:33338]
-
-Fri Nov 26 09:32:37 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * vm_dump.c (dump_thread): seems to be necessary the 3rd argument of
- SymGetLineFromAddr64(), even though MSDN says it can be zero.
-
-Fri Nov 26 09:03:38 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regcomp.c (onig_is_prelude): added to check whether ruby is still
- in prelude (or other boot processes) or not.
-
- * regcomp.c (optimize_node_left): use onig_is_prelude for printing.
-
- * regcomp.c (set_optimize_info_from_tree): ditto.
-
- * regcomp.c (onig_compile): ditto.
-
- * regcomp.c (print_compiled_byte_code_list): print its address.
-
- * regcomp.c (print_indent_tree): print its contents tree of
- ANCHOR_PREC_READ(_NOT) and ANCHOR_PREC_BEHIND(_NOT).
-
-Thu Nov 25 23:10:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regcomp.c (print_distance_range): use PRIuSIZE.
-
- * regcomp.c (print_optimize_info): use %ld because the type of
- calculated value of integers is long.
-
- * regexec.c (onig_print_compiled_byte_code): add prototype.
-
- * regexec.c (match_at): add 2nd argument.
-
-Thu Nov 25 10:29:55 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/callback/mkcallback.rb (gencallback): shouldn't assume that
- VALUE is the same size with long.
-
-Thu Nov 25 10:03:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/win32ole/test_err_in_callback.rb (teardown): remove tmp file
- only when it exists.
-
-Thu Nov 25 01:38:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/big5-hkscs-tbl.rb: Update table as HKSCS-2008.
- patched by oCameLo oTnTh [ruby-core:33256]
-
- * enc/big5.c: add alias Big5-HKSCS:2008 to Big5-HKSCS.
-
-Wed Nov 24 15:18:07 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * vsnprintf (BSD_vfprintf): use QUADINT macro only when _HAVE_SANE_QUAD_
- macro is defined.
-
-Wed Nov 24 12:47:16 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * vsnprintf (BSD_vfprintf): added VC++ compatible size specifications
- (I, I32, I64).
-
-Wed Nov 24 11:19:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_inspect): treat UTF-16 and UTF-32 as BE or LE.
-
-Wed Nov 24 06:35:32 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/utf_16_32.trans: add the UTF-32 converter.
-
-Wed Nov 24 05:40:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
-Wed Nov 24 06:13:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (filecp, wstr_to_mbstr, mbstr_to_wstr):
- refactored.
-
-Wed Nov 24 05:40:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/utf_16_32.trans: add a converter from UTF-8 to UTF-16.
-
-Wed Nov 24 03:21:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/utf_16_32.trans: raise error on unpaired upper
- surrogates.
-
-Wed Nov 24 01:40:23 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/utf_16_32.h: add UTF-16 and UTF-32 as a dummy encoding.
-
- * enc/trans/utf_16_32.trans: add a converter from UTF-16 to UTF-8.
-
-Tue Nov 23 21:59:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (wlink, rb_w32_getppid): use typedef instead of
- repeating complicated function prototypes.
-
-Tue Nov 23 18:54:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (rb_thread_mark): should mark self in control
- frames. [ruby-core:33289]
-
-Tue Nov 23 07:57:31 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/delta/parser.{ry,rb}: fixed a bug of token scanner.
-
-Tue Nov 23 07:29:24 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c, rational.c ({nucomp,nurat}_expt): added a check.
-
-Tue Nov 23 07:27:27 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (daynum): should be private.
-
-Tue Nov 23 07:22:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ChangeLog (change-log-indent-text): hanging indent.
-
-Tue Nov 23 06:30:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (SITE_DIR, VENDOR_DIR),
- version.c (ruby_initial_load_paths): exclude directories that
- are configured without them from $LOAD_PATH. [ruby-core:33267]
-
- * configure.in (rubylibprefix): No ruby, No libprefix.
-
-Tue Nov 23 01:05:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vsnprintf.c (BSD_vfprintf): don't output floating point
- when the precision is 0. [ruby-dev:42615]
-
-Mon Nov 22 21:30:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_inspect): fix for ascii-compatible external
- encoding and different encoding string. [ruby-core:33283]
-
-Mon Nov 22 18:45:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): should not duplicate rules.
- bug fix of r29842.
-
-Mon Nov 22 18:04:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/big5.c: split CP950 from Big5.
-
- * enc/big5.c: split CP951 from Big5-HKSCS.
-
- * enc/trans/big5.trans: import conversion table of Big5, Big5-HKSCS,
- CP950, and CP951 from ICU. they need fallback conversions.
- ref [ruby-core:33256]
- http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/
-
- * tool/transcode-tblgen.rb (import_ucm): add to import ucm files.
-
-Mon Nov 22 18:33:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_inspect): append for each chars instead of bulk
- copy if encoding conversion is needed. [ruby-core:33283]
-
-Mon Nov 22 14:22:45 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * time.c (time_zone): use rb_locale_str_new_cstr to set encoding
- as locale and convert its content to internal encoding.
- [ruby-core:33278]
-
-Mon Nov 22 11:58:11 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_concat): set ENC_CODERANGE_VALID when the
- receiver is 7BIT and the argument is non ASCII.
-
-Mon Nov 22 01:48:58 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: some improvements for performance.
-
-Sat Nov 20 07:45:50 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/mkmf.rb: adding compilation support for ObjC/ObjC++ extensions.
- Thanks Scott Gonyea! [ruby-core:33260]
-
-Sat Nov 20 01:57:55 2010 Akio Tajima <artonx@yahoo.co.jp>
-
- * common.mk: add dependency(insns.inc) to compile.obj
-
-Fri Nov 19 23:05:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (insns_rules.mk): remove extra backslash.
-
- * cygwin/GNUmakefile.in, win32/Makefile.sub (clean): rc files are
- made at compile time, so should be removed by clean.
-
-Fri Nov 19 22:09:46 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/test_core.rb
- (Tester#test_pretty_format_long_text_finite): skip a test that
- uses long string on small memory system. [ruby-dev:42599]
-
-Fri Nov 19 21:07:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb: shell completion support for zsh. based on
- <http://d.hatena.ne.jp/rubikitch/20071002/zshcomplete>
-
- * lib/optparse.rb: shell completion support for bash.
-
-Fri Nov 19 00:00:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cygwin/GNUmakefile.in (SCRIPTPROGRAMS): no needs on cygwin.
-
- * win32/Makefile.sub (scriptbin): create script binaries.
-
-Thu Nov 18 23:21:23 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rexml/formatters/pretty.rb (REXML::Formatters::Pretty#wrap):
- REXML::Formatters::Pretty#wrap used a recursive method call to
- format text. This switches it to use an iterative approach.
- [ruby-core:33245]
- Patch by Jeremy Evans. Thanks!!!
-
- * test/rexml/test_core.rb: add a test for it.
-
-Thu Nov 18 22:58:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/io.h (rb_io_buffer_t): extract from rb_io_t.
-
-Thu Nov 18 07:37:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (reconfig): force reconfigure with previous options.
-
- * common.mk (showconfig): show configure flags, like as
- `config.status --config' generated by recent autoconf.
-
-Thu Nov 18 07:16:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing/langinfo.c (strncasecmp): get rid of redefinition.
-
-Thu Nov 18 00:02:17 2010 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Upgrading output encoding with ASCII content
- as needed. [ruby-core:33229]
-
-Wed Nov 17 23:19:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/configure.bat: remove quotes from arguments to be quoted.
-
- * lib/mkmf.rb (create_makefile): use forward slashes in messages.
-
- * lib/mkmf.rb (create_makefile): make extension libraries messages
- brief.
-
- * win32/Makefile.sub (MAKEDIRS): should not include silent flag.
-
- * common.mk (ext/ripper/ripper.c, ext/json/parser/parser.c): pass
- Q and ECHO. [ruby-core:33226]
-
-Wed Nov 17 16:09:52 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/test_tracer.rb: new test case.
- minimal regression test for r29280.
-
-Wed Nov 17 16:04:23 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/envutil.rb (Test::Unit::Assersions#assert_warn):
- new assertion to assert that a particular warning message is
- displayed.
- forward port from branches/ruby_1_9_2@29795.
-
-Wed Nov 17 15:16:48 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regint.h (OnigOpInfoType): constify name.
-
- * regcomp.c (op2name): constify return value.
-
- * regcomp.c (onig_print_compiled_byte_code): use PRIuPTR and
- uintptr_t to clean warnings.
-
- * regcomp.c (print_indent_tree): use PRIxPTR and intptr_t.
-
- * regexec.c (match_at): use PRIdPTR and intptr_t.
-
-Wed Nov 17 09:49:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/shift_jis.c (property_name_to_ctype): fix memory leak.
-
- * enc/euc_jp.c (property_name_to_ctype): ditto.
-
-Wed Nov 17 08:54:04 2010 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Upgrading output encoding as needed. [ruby-core:33135]
-
-Tue Nov 16 22:30:39 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_insnhelper.c (vm_throw): remove fear of undefined behavior :-)
- Coverity Scan found this bug.
-
-Tue Nov 16 09:33:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/lib/bigdecimal/util.rb (to_digits): avoid unused
- variables warning, reported by Aaron Patterson.
-
-Tue Nov 16 06:39:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * pack.c (PACK_ITEM_ADJUST): return nil not result array and yield
- values if block is given. [ruby-core:33193]
-
-Tue Nov 16 00:21:20 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * regparse.c (and_cclass, or_cclass): fix memory leak. Coverity Scan
- found this bug. [ruby-dev:42579]
-
-Tue Nov 16 00:07:32 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * gc.c (assign_heap_slot): fix fear of memory leak and memory
- violation. Coverity Scan found this bug.
-
-Mon Nov 15 23:54:45 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * eval_intern.h (CHECK_STACK_OVERFLOW): it was not intended to add
- size_t to a pointer typed VALUE*. Coverity Scan found this defect.
-
-Mon Nov 15 23:41:21 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (iseq_set_exception_local_table, iseq_set_local_table,
- rb_iseq_build_from_ary): fix type inconsistency (which is benign
- because sizeof(ID) == sizeof(ID*), though). Coverity Scan found
- these bugs.
-
-Mon Nov 15 22:47:27 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_eval.c (rb_funcall): ensure va_end after va_init_list. Coverity
- Scan found this bug.
-
-Mon Nov 15 08:36:12 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/racc/parser.rb (do_parse, yyparse): using class eval to define
- method and avoid __send__.
-
-Mon Nov 15 06:43:48 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * etc/openssl/ossl_ssl.c (ossl_ssl_get_cert): raise exception if
- pointer is invalid. Thanks Ippei Obayashi! [ruby-dev:42573]
-
-Sun Nov 14 17:57:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/Makefile.in (distclean): should not remove sources which are
- distributed in tarball.
-
-Sun Nov 14 16:48:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_set_token_info): turn on/off with directives.
- [ruby-core:25442]
-
-Sun Nov 14 12:05:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (argf_readlines): forward to current_file for arguments
- check. http://twitter.com/nagachika/status/3634254856589312
-
-Sun Nov 14 08:48:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/setup.mak (-basic-vars-, -runtime-): suppress trailing
- space and compiler command line.
-
-Sun Nov 14 04:22:32 2010 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/setup (config.h): Added HAVE_LABS and HAVE_LLABS to config.h.
-
- * symbian/configure.bat: Changed packaging version in line with API
- style 3 versioning.
-
-Sat Nov 13 16:37:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (showflags, help): emit messages at once.
-
- * win32/Makefile.sub (MSG, EOM): remove surrounding quotes by %~I.
-
-Sat Nov 13 01:31:30 2010 Akio Tajima <artonx@yahoo.co.jp>
-
- * win32/Makefile.sub: reorder variable End Of Message (don't display it)
-
-Fri Nov 12 20:52:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (showflags, help): use caret to quote leading spaces on
- Windows.
-
- * Makefile.in, common.mk, cygwin/GNUmakefile.in, enc/depend,
- ext/ripper/depend, lib/mkmf.rb, win32/Makefile.sub: caddle up.
-
-Fri Nov 12 16:35:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in: support C level backtrace information on FreeBSD.
- When devel/libexecinfo is installed on FreeBSD, now ruby
- can show C level backtrace information.
- http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/libexecinfo/
-
-Fri Nov 12 09:58:30 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/setup.mak: use findstr.exe instead of find.exe, because all
- target build platforms should have findstr.exe, and, find.exe often
- means another command such as cygwin's.
-
-Fri Nov 12 00:30:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): need PRI_LL_PREFIX.
-
-Thu Nov 11 23:38:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: ANSI C-conforming const and volatile are mandatory
-
- * configure.in (AC_C_CONST, AC_C_INLINE, AC_C_VOLATILE): check
- before used in other checks.
-
- * configure.in (RUBY_CHECK_PRINTF_PREFIX): should not break from
- RUBY_WERROR_FLAG, so that ac_c_werror_flag gets restored.
-
-Thu Nov 11 23:04:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (warn_deprecated): show caller position.
-
-Thu Nov 11 23:03:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (argf_close): untie tied io before closing.
-
- * io.c (argf_write): add ARGF.write and so on.
-
- * io.c (argf_read_nonblock): add ARGF.read_nonblock.
-
-Thu Nov 11 21:49:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/stats.rb (RDoc#print): get rid of NaN.
-
-Thu Nov 11 21:47:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (SHOWFLAGS): show compile flags.
-
- * common.mk: hide long command lines by default. verbose-mode is
- turned on by V=1 as before.
- http://jarp.does.notwork.org/diary/200605b.html#200605121
-
-Thu Nov 11 21:32:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (try_func): accept variable address.
-
- * ext/win32ole/extconf.rb: libuuid is needed on cygwin.
-
-Thu Nov 11 21:24:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): use cygwin_conv_path on cygwin 1.7 or
- later.
-
- * ruby.c (push_include_cygwin): ditto.
-
-Thu Nov 11 20:49:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (PRI_LL_PREFIX): format type specifier for
- LONG_LONG may vary on platforms.
-
-Thu Nov 11 20:45:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (SYMBOL_PREFIX): separate from EXPORT_PREFIX.
-
- * win32/mkexports.rb (Exports#each_export): use SYMBOL_PREFIX.
-
-Wed Nov 10 07:20:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cygwin/GNUmakefile.in (scriptbin): make executable file from
- scripts with stub.
-
- * ruby.c (load_file_internal): assume xflag for exe file as well
- as no-shebang file.
-
- * tool/rbinstall.rb: install script programs.
-
- * win32/mkexports.rb (Exports#initialize): alias ruby_sysinit for
- stub.
-
- * win32/stub.c: stub for scripts. [EXPERIMENTAL]
-
-Tue Nov 9 21:57:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (init_funcname): allocate and build initialization
- funciton name at once.
-
-Tue Nov 9 21:14:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (AC_FUNC_GETPGRP, AC_FUNC_SETPGRP): no need when
- not used.
-
- * configure.in (EXPORT_PREFIX): check generic prefix.
-
-Tue Nov 9 13:24:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regenc.c (onigenc_minimum_property_name_to_ctype):
- \p{...} should be case insensitive. [ruby-core:33000]
-
- * regenc.c (onigenc_property_list_add_property):
- ditto.
-
- * enc/euc_jp.c (init_property_list, property_name_to_ctype):
- to lowercase property names.
-
- * enc/shift_jis.c (init_property_list, property_name_to_ctype):
- ditto.
-
-Tue Nov 9 13:29:36 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (overlapped_socket_io): get rid of a warning of 64bit
- mingw.
-
-Tue Nov 9 10:44:19 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * util.c (ruby_strtod): this code uses FPU's rounding system.
- But x86's FPU calculates double precision floating-point
- numbers in 80bit precision, so it fails to round the value.
- So ensure the value is assigned a variable. [ruby-dev:42551]
- see also [ruby-math:00802]
- http://www.shudo.net/java-grandprix99/strictfp/
-
-Tue Nov 9 07:30:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (rb_syserr_new): new function to make SystemCallError
- instance without errno. [EXPERIMENTAL]
-
- * error.c (rb_syserr_fail, rb_mod_syserr_fail): ditto.
-
-Tue Nov 9 05:54:57 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/*.rb: Remove unused variable warnings.
- Patch by Run Paint [ruby-core:30991]
-
- * lib/rubygems/*, lib/rdoc/*.rb, lib/rake/*.rb: ditto
-
-Mon Nov 8 18:26:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * util.c (ruby_hdtoa): fix type cast and bufsize.
-
-Mon Nov 8 15:40:56 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vsnprintf.c (BSD_vfprintf): fix precision specifier doesn't
- work well on %f. [ruby-dev:42552]
-
-Mon Nov 8 14:41:40 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (get_wsa_extension_function): typos.
-
-Mon Nov 8 13:41:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/enc-unicode.rb,
- enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
- enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
- Add Age property to regexp. [ruby-core:33019]
- patched by Ammar Ali, tested by Run Paint Run Run
-
-Mon Nov 8 12:16:39 2010 Ben Walton <bwalton@artsci.utoronto.ca>
-
- * configure.in: support -h for solaris linker when gcc not used
-
-Mon Nov 8 11:47:39 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (finish_overlapped_socket): refactoring.
-
-Mon Nov 8 11:02:21 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (get_proc_address): refactoring.
-
- * win32/win32.c (get_wsa_exetinsion_function): refactoring.
-
-Mon Nov 8 09:45:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/gbk-tbl.rb: Add euro sign. [ruby-core:33094]
- CP936, which is de facto definition of GBK, has it.
- http://msdn.microsoft.com/en-us/goglobal/cc305153.aspx
-
-Mon Nov 8 07:26:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check only the first symbol to get rid of
- duplication. [ruby-core:33084] #4031
-
-Sun Nov 7 10:13:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (NM): check on all platforms. #4031
-
-Sun Nov 7 06:16:33 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * test/openssl/test_ocsp.rb: adding test for r29699. Thanks Elise
- Huard! [ruby-core:32460]
-
-Sat Nov 6 07:33:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_cv_export_prefix): check for prefixed
- underscore of exported symbols
-
- * tool/rbinstall.rb (bin-comm): prepend prolog shell script if
- necessary.
-
- * configure.in (LIBRUBY_RELATIVE): use rpath token expansion.
-
-Sat Nov 6 07:24:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * template/ruby.pc.in (arch, sitearch): reordered.
-
- * configure.in: keep failed file.
-
-Sat Nov 6 07:03:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_fork_err): save errinfo before fdopen.
-
-Sat Nov 6 00:43:58 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/openssl/ossl_ocsp.c (ossl_ocspcid_initialize): an optional
- parameter may be used to specify the OpenSSL::OCSP::CertificateId on
- initialization. Thanks Elise Huard! [ruby-core:32460]
-
-Fri Nov 5 12:23:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_{process,system}.rb (test_fallback_to_sh):
- meaningless and wrong tests where /bin/sh does not exist.
-
- * process.c (proc_spawn_v): should spawn, not exec.
-
-Fri Nov 5 01:21:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (proc_exec_v, proc_spawn_v): try to execute with sh if
- no shebang. [ruby-core:32745] [EXPERIMENTAL]
-
-Fri Nov 5 00:39:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_readlines, rb_io_each_line): limit must not be zero.
- a patch from Tomoyuki Chikanaga at [ruby-dev:42538]. #4024
-
-Fri Nov 5 00:14:15 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/fiddle/extconf.rb: fixing ffi library location on windows.
- Thanks Usa! [ruby-core:32930]
-
-Thu Nov 4 20:04:44 2010 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (rb_newobj): force garbage_collect() if GC.stress == true.
-
-Thu Nov 4 19:48:22 2010 Koichi Sasada <ko1@atdot.net>
-
- * ChangeLog: missed to write a last ChangeLog.
-
- * gc.c (gc_finalize_deferred): removed.
-
- * gc.c (rb_gc_finalize_deferred): Do not invoke a free_unused_heaps().
-
-Thu Nov 4 19:45:27 2010 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (run_final): do not need argument obj.
-
-Thu Nov 4 19:26:10 2010 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (before_gc_sweep): fix commit miss.
-
-Thu Nov 4 19:20:46 2010 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (after_gc_sweep, before_gc_sweep):
- invoke rb_sweep_method_entry() as soon as possible.
-
-Thu Nov 4 19:13:58 2010 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (after_gc_sweep, slot_sweep): finalizers should be invoked
- as soon as possible.
-
-Thu Nov 4 10:30:40 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * configure.in (--with-valgrind): Now this option is default on.
- You can still explicitly disable this feature by specifying
- --without-valgrind.
-
-Thu Nov 4 02:06:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * cont.c (fiber_t_alloc): raise an error when fiber is going to be
- initialized twice. [ruby-dev:42524]
-
-Thu Nov 4 02:04:25 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * cont.c (rb_fiber_resume): raise an "double resume" error when root
- fiber is going to be resumed. [ruby-dev:42523]
-
-Wed Nov 3 14:17:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/ostruct.rb (OpenStruct#delete_field): also undefine
- accessor methods. [ruby-core:33010]
-
-Wed Nov 3 14:13:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_enc_cr_str_buf_cat): concatenation of valid
- encoding string and invalid encoding string should result
- invalid encoding. [ruby-core:33027]
-
-Wed Nov 3 08:58:59 2010 Koichi Sasada <ko1@atdot.net>
-
- * gc.c, vm.c, vm_core.h: remove USE_VALUE_CACHE option.
-
-Wed Nov 3 07:47:25 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/ruby-lex.rb (RubyLex#identify_string): parse multiple
- regex options. a patch from Heesob Park in [ruby-core:32988].
-
-Wed Nov 3 07:33:57 2010 Tanaka Akira <akr@fsij.org>
-
- * vm_method.c (rb_clear_cache_by_class): just return if the class has
- no method. reported by Eric Wong. [ruby-core:32689]
-
-Tue Nov 2 22:50:25 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/visitor.rb (initialize): push accessor
- methods to subclass that actually uses them.
-
-Tue Nov 2 22:47:08 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/visitor.rb (accept): switch to
- a dispatch cache rather than case / when statement.
-
-Tue Nov 2 21:46:52 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * NEWS: fix a typo.
-
-Tue Nov 2 20:10:32 2010 Tajima Akio <artonx@yahoo.co.jp>
-
- * test/rake/test_tasks.rb: clear env var which is used by the test.
- [ruby-dev:42508]
-
-Tue Nov 2 00:25:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/extconf.rb: win64 is just same with win32 about socket.
- notice: but wince is not same.
-
-Mon Nov 1 21:25:57 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * main.c: <stdlib.h> is needed, to introduce the getenv(3)
- prototype declaration. Without it a C compiler shall infer
- the getenv type as "int getenv(...);", but this is totally
- wrong, especially when your machine's sizeof(int) and
- sizeof(char*) differs. On such environment a return value
- of getenv(3), which is in fact a char*, might first casted
- into a int (loses data here), and then casted back to char*
- by automatic integral promotion to fit to the prototype of
- ruby_set_debug_option().
-
-Sun Oct 31 23:27:09 2010 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (finalizer_table, objspace->final.table):
- Create finalizer_table at Init_heap().
- Remove all null checks of finalizer_table.
-
- * gc.c (mark_tbl): skip if no table entries.
-
- * gc.c (slot_swee): remove useless need_call_final check.
-
-Sun Oct 31 22:32:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_objspace_free): finalizers should be called separately
- from freeing objspace. [ruby-dev:42479]
-
-Sun Oct 31 22:24:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_cleanup): free current VM and its objspace even
- when exiting by SystemExit.
-
-Sun Oct 31 22:10:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (new_child_iseq): adjust argument types.
-
- * iseq.c (prepare_iseq_build, rb_iseq_new),
- (rb_iseq_new_with_bopt_and_opt, rb_iseq_new_with_opt),
- (rb_iseq_new_with_bopt): ditto.
-
- * compile.c (iseq_set_exception_table): suppress warnings.
-
- * insns.def (putspecialobject, defined): ditto.
-
- * iseq.c (iseq_load): ditto.
-
-Sun Oct 31 09:30:51 2010 Koichi Sasada <ko1@atdot.net>
-
- * vm_core.h: some refactoring.
- - move decl. of rb_compile_option_struct to iseq.h.
- - define enum iseq_type.
- - define enum vm_special_object_type.
-
- * compile.c: some refactoring.
- - apply above changes.
- - (struct iseq_link_element): change value of type.
- - remove unused decl.
- - fix comment.
- - rename iseq_build_body and iseq_build_exception to
- iseq_build_from_ary_body and iseq_build_from_ary_exception.
-
- * iseq.h: define enum catch_type and enum defined_type.
-
- * insns.def: apply above changes.
-
- * iseq.c: define ISEQ_MAJOR_VERSION and ISEQ_MINOR_VERSION.
-
-Sat Oct 30 23:38:59 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rexml/encoding.rb: untabify.
-
-Sat Oct 30 21:06:37 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rexml/encoding.rb: use Ruby native encoding mechanism.
- [ruby-dev:42464]
- * lib/rexml/encodings/: remove.
-
- * lib/rexml/document.rb, lib/rexml/formatters/default.rb,
- lib/rexml/output.rb, lib/rexml/parseexception.rb,
- lib/rexml/parsers/baseparser.rb, lib/rexml/source.rb,
- lib/rexml/xmldecl.rb: use Ruby's native Encoding object.
-
- * test/rexml/, test/rss/: follow the above encoding changes.
-
- * NEWS: add REXML's incompatible change about encoding.
-
-Sat Oct 30 17:23:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_strtod): get rid of overflow/underflow as possible.
-
-Sat Oct 30 14:37:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ruby_pc): erase runtime-defined variables and
- check if generated pc file is valid.
-
- * template/ruby.pc.in (DEFFILE): need for mingw.
-
- * template/ruby.pc.in (LIBRUBY): fix the order.
-
-Sat Oct 30 11:33:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (ruby_pc): ignore missing variables.
-
- * template/ruby.pc.in: add missing variables for mswin.
-
-Sat Oct 30 10:24:35 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * object.c: Make BasicObject.new accept no parameter.
- Revert of r26135 [ruby-core:27080], as per [ruby-core:32952].
-
-Sat Oct 30 09:40:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c: use constants in id.h.
-
-Sat Oct 30 09:08:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/fiddle/closure.c (fiddle_closure): embed cif not reference
- so that the content surely get initialized. [ruby-dev:42480]
-
-Sat Oct 30 07:01:53 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv-replace.rb: suppress warning.
-
- * lib/open-uri.rb: ditto.
-
-Sat Oct 30 06:32:52 2010 Tanaka Akira <akr@fsij.org>
-
- * test/pathname/test_pathname.rb (TestPathname#test_grpowned?): the
- group of the created file is inherited from the parent
- directory on BSDs and MacOS X. Linux also inherit the group if
- the setgid bit of the directory is set. It causes the test fail.
- fixed by Shota Fukumori. [ruby-dev:42458]
-
-Sat Oct 30 05:58:54 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb: retry via TCP if UDP reply is truncated.
- fixed by Julian Mehnle. [ruby-core:32407]
-
-Sat Oct 30 00:35:13 2010 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (iseq_s_compile): fix optional argument.
- a patch from Yutaka HARA [ruby-core:32953] [Ruby 1.9-Bug#4001]
-
-Sat Oct 30 00:24:42 2010 Koichi Sasada <ko1@atdot.net>
-
- * ext/objspace/objspace.c (memsize_of): take care of
- T_CLASS/const_tbl.
- a patch from nagachika <nagachika00@gmail.com> [ruby-dev:42490]
-
-Fri Oct 29 23:32:36 2010 Koichi Sasada <ko1@atdot.net>
-
- * test/profile_test_all.rb: added.
- You can use test-all profiler with the following command:
- RUBY_TEST_ALL_PROFILE=true make test-all
- This command generates ./test_all_profile and you can analyze
- which tests consume memories.
-
- * test/runner.rb: ditto.
-
-Fri Oct 29 10:02:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/enc-unicode.rb,
- enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
- enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
- Add 'Unknown' Script.
- patched by Run Paint Run Run. [ruby-core:32937] #3998
-
-Fri Oct 29 05:13:34 2010 Koichi Sasada <ko1@atdot.net>
-
- * ext/objspace/objspace.c (ObjectSpace.memsize_of_all): rename
- ObjectSpace.total_memsize_of_all_objects() to
- ObjectSpace.memsize_of_all([klass]).
- Accept Class object to filter the objects.
-
- * test/objspace/test_objspace.rb: fix test for above change.
-
-Fri Oct 29 03:04:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_dump): fix expected length. [ruby-core:32935]
-
-Thu Oct 28 23:31:39 2010 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (before_gc_sweep, run_final): fix decrement timing of final_num.
-
-Thu Oct 28 20:11:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/enc-unicode.rb,
- enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
- enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
- Update Oniguruma for Unicode 6.
- patched by Run Paint Run Run. [ruby-core:32923] #3989
-
-Thu Oct 28 20:06:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/oniguruma.h (ONIGENC_CTYPE_SPECIAL_MASK):
- change mask from 128 to 256. [ruby-core:32931]
-
-Thu Oct 28 12:06:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/webrick/httprequest.rb (read_request_line): extend max
- length to 2083. This is from Internet Explorer's max uri
- length. http://support.microsoft.com/kb/208427 [ruby-core:32924]
-
-Thu Oct 28 04:00:08 2010 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (GC.stat): added. [ruby-dev:38607]
-
- * test/ruby/test_gc.rb: add a test for above.
-
-Thu Oct 28 03:13:06 2010 Koichi Sasada <ko1@atdot.net>
-
- * ext/objspace/objspace.c (memsize_of): fix rdoc.
-
- * ext/objspace/objspace.c (total_memsize_of_all_objects): added.
-
- * test/objspace/test_objspace.rb:
- - add a test for ObjectSpace.total_memsize_of_all_objects.
- - add two tests for ObjectSpace.memsize_of (for nil and Fixnum).
-
-Wed Oct 27 23:55:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (Init_iconv): warn deprecated use.
-
-Wed Oct 27 18:50:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bignum.c (rb_big2long, rb_big2ulong): rb2ulong() returns VALUE, but
- its real range is ulong. So, if the size of VALUE is bigger than
- ulong, upper bits are always zero even if the actual value is
- negative.
- fixed #3490
-
-Wed Oct 27 18:27:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_io.rb (TestIO#pipe): should close write end of pipe
- before closing read end, to get rid of timing problem.
-
- * test/ruby/test_io_m17n.rb (TestIO_M17N#pipe): ditto.
-
-Wed Oct 27 18:14:27 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_getppid): support Win64.
-
-Wed Oct 27 15:07:19 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (w32_error): should get error no only once, because
- the result of the second getting will indicate the error of the
- first FormatMessage() call.
-
-Wed Oct 27 13:51:25 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_io.rb (TestIO#pipe): need to propagate exceptions
- in read/write thread. fix r29541.
-
- * test/ruby/test_io_m17n.rb (TestIO_M17N#pipe): ditto.
-
-Wed Oct 27 12:05:40 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * class.c (clone_const): need to return value. fix r29602.
-
-Wed Oct 27 11:58:58 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/ruby.h (NUM2LONG_internal): add cast to get rid of a
- non GCC compiler warning. this is intentional type conversion.
-
-Wed Oct 27 09:25:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * cont.c: apply documentation patch by Run Paint Run Run.
- [ruby-core:32915]
-
-Wed Oct 27 02:12:10 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * object.c (Init_Object), constant.h, variable.c
- (rb_mod_private_constant, rb_mod_public_constant,
- set_const_visibility, rb_const_get_0): add Module#public_constant
- and private_constant. [ruby-dev:39685][ruby-core:32698]
-
- * test/ruby/test_module.rb: add tests for above.
-
-Wed Oct 27 02:02:54 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * class.c, constant.h, gc.c, method.h, object.c, variable.c,
- vm_insnhelper.c: use struct rb_constant_entry_t as entry of
- RCLASS_CONST_TBL. RCLASS_CONST_TBL has contained VALUE of constant
- directly. Now instead rb_const_entry_t is contained in
- RCLASS_CONST_TBL, rb_const_entry_t is managed by malloc, and
- have not only the value itself but also visibility flag.
- This is another preparation for private constant (see
- [ruby-dev:39685][ruby-core:32698]).
-
-Wed Oct 27 01:56:34 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * class.c, gc.c, object.c, variable.c, vm_insnhelper.c,
- include/ruby/ruby.h: separate RCLASS_CONST_TBL from RCLASS_IV_TBL.
- RCLASS_IV_TBL has contained not only instance variable table but
- also constant table. Now the two table are separated to
- RCLASS_CONST_TBL and RCLASS_IV_TBL. This is a preparation for
- private constant (see [ruby-dev:39685][ruby-core:32698]).
-
-Tue Oct 26 18:51:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/scanf.rb (extract_float): allow 2.e+2 style.
- [ruby-dev:42452] #3978
-
-Tue Oct 26 18:09:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (ASFLAGS): needs INCFLAGS.
-
- * configure.in (rb_cv_dynamic_alloca): check if extra source for
- dynamic size alloca.
-
- * missing/x86_64-chkstk.s (___chkstk): necessary for alloca of
- amd64-mingw32msvc-gcc on Ubuntu.
-
- * thread_win32.c (ruby_alloca_chkstk): check stack overflow
-
-Tue Oct 26 18:04:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * template/ruby.pc.in (Libs): needs DLDFLAGS.
-
-Tue Oct 26 12:47:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (pkgconfig-data): moved from Makefile.in.
-
- * tool/rbinstall.rb: install pc file only if non-empty.
- [ruby-core:32901] #3983
-
- * win32/Makefile.sub (ruby_pc): create pc file.
-
-Tue Oct 26 09:13:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_cv_gcc_atomic_builtins): check for atomic
- builtins, all are not available in Apple derivative gcc.
-
-Tue Oct 26 00:29:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (pkgconfig-data): create pkg-config metadata file.
-
- * tool/rbinstall.rb: install pkg-config metadata file.
-
- * template/ruby.pc.in: template of pkg-config metadata file.
-
-Mon Oct 25 16:38:07 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * signal.c (rb_atomic_t): GCC (of at least recent versions)
- has ubiquitous support for atomic operations. On that
- compiler a C program can issue a memory barrier using these
- dedicated instructions. According to the GCC manual they
- cargo culted this feature form the Itanium ABI so chances
- are that other compilers could also support this feature.
- But so far GCC is the only compiler that I know to have it.
- Also note that this works on non-Itanium machines.
-
-Mon Oct 25 06:21:35 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vsnprintf.c (BSD_vfprintf): prec digits fractal part should be
- appended to 0 if prec is given. [ruby-dev:42453] #3979
-
-Mon Oct 25 02:57:21 2010 Koichi Sasada <ko1@atdot.net>
-
- * common.mk (run.gdb): Quit gdb on 'make gdb' when
- no signals are received.
-
-Mon Oct 25 00:25:23 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: some corrections of documentation.
-
-Sun Oct 24 17:14:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c, gc.c, hash.c, object.c, string.c, struct.c,
- transcode.c, variable.c, vm.c, vm_insnhelper.c, vm_method.c:
- replace calls to rb_error_frozen() with rb_check_frozen(). a
- patch from Run Paint Run Run at [ruby-core:32014]
-
- * include/ruby/intern.h (rb_check_frozen): optimize.
- [ruby-core:32878]
-
-Sun Oct 24 15:16:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit::Mini#run): abort if interrupted.
-
- * lib/test/unit.rb (Test::Unit::Mini#run_test_suites): show the
- result even when interrupted on the way.
-
- * lib/test/unit.rb (Test::Unit::Mini#run_test_suites): ensure
- output sync mode to be restored.
-
-Sun Oct 24 14:11:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_define_method): defined method is run with the default
- public visibility regardless the visibility context of definition.
- [ruby-core:30638]
-
-Sun Oct 24 12:08:54 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/test/unit.rb: make test/unit play nicely with the rake test
- loader. [ruby-core:32864]
-
-Sun Oct 24 00:25:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_rubyoptions.rb (test_segv_test): follow up the
- change at r29556.
-
-Sat Oct 23 14:39:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb: $extmk should be true for test/runner.
-
-Sat Oct 23 10:55:37 2010 Koichi Sasada <ko1@atdot.net>
-
- * vm_dump.c (rb_vm_bugreport): fix to add bug outputs.
- - loaded script ($0)
- - loaded features ($")
- - process memory map on Linux (/proc/self/maps)
-
- * vm_dump.c (rb_vmdebug_stack_dump_raw): fix header message.
-
-Fri Oct 22 14:50:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
- assertion message must not be nil.
-
-Fri Oct 22 13:59:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
- treat nil case. Please run test-all before commit such change.
-
-Thu Oct 21 23:58:14 2010 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (gc_lazy_sweep): Variable declarations should be at
- the head of block.
-
-Thu Oct 21 23:56:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (objspace_each_objects, rb_objspace_each_objects): use
- struct.
-
- * gc.c (objspace_each_objects): fix return with no value.
-
-Thu Oct 21 23:47:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (dir_initialize): remove useless intermediate variable.
-
-Thu Oct 21 16:07:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_f_select): change rdoc.
- patched by Eito Katagiri [ruby-core:31805]
-
-Thu Oct 21 15:55:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/webrick/httpauth/digestauth.rb
- (WEBrick::HTTPAuth::ProxyDigestAuth#check_uri): privated.
- [ruby-dev:42344]
-
-Thu Oct 21 15:50:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_f_select): add correct rdoc.
- patched by Dave Thomas [ruby-core:32467]
-
-Thu Oct 21 15:42:01 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/telnet.rb (Net::Telnet#close): added.
- patched by Erik Hollensbe [ruby-dev:42260] #3830
-
-Thu Oct 21 13:08:00 2010 Narihiro Nakamura <authornari@gmail.com>
-
- * gc.c (rb_objspace_each_objects): don't lazy sweep in
- rb_objspace_each_objects. [Bug #3940] [ruby-dev:42369]
-
-Thu Oct 21 00:05:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_io.rb (TestIO#pipe): get rid of deadlock on pipe.
- a patch from Tomoyuki Chikanaga at [ruby-dev:42435]. #3970
-
- * test/ruby/test_io_m17n.rb (TestIO_M17N#pipe): ditto.
-
-Wed Oct 20 23:54:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dbm/dbm.c: rdoc based on a patch by mathew meta AT
- pobox.com, at [ruby-core:32853].
-
-Wed Oct 20 10:47:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * util.c (ruby_strtod): reject 0x1.p+0. [ruby-dev:42432] #3966
-
-Wed Oct 20 10:00:57 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vsnprintf.c (BSD_vfprintf): print floating point on "%#a".
- [ruby-dev:42431] Bug#3965
-
-Tue Oct 19 19:30:11 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vsnprintf.c (BSD_vfprintf): clear ALT flag for %a.
- [ruby-core:32841] [ruby-core:32848]
-
-Tue Oct 19 12:19:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vsnprintf.c (BSD_vfprintf): fix over-count of field size.
-
-Tue Oct 19 03:08:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vsnprintf.c (BSD_vfprintf): use HEXPREFIX flag for prefix of %a.
- [ruby-core:32841]
-
-Mon Oct 18 13:18:01 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_class_init): Define
- Digest::Class.new(). [Feature #3954]
-
-Mon Oct 18 12:58:40 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c (pack_pack): refine the document. [ruby-dev:42397]
- (pack_unpack): ditto.
-
-Mon Oct 18 10:19:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb (transport_request): @socket may be nil.
- patched by Egbert Eich [ruby-core:32829]
-
-Mon Oct 18 09:57:28 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * sprintf.c (BSD_vfprintf): wrong padding around prefix and
- floating point with %a. [ruby-dev:42403] Bug #3956
-
-Sun Oct 17 22:36:33 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/delta.rb: added an rdoc tag.
-
-Sun Oct 17 10:47:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_mod_remove_const): update rdoc.
- [ruby-core:31957]
-
-Sun Oct 17 10:40:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * class.c (rb_define_{class,module}_id_under): register to be
- marked, which probably are defined and used internally.
-
-Sat Oct 16 11:10:55 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_encoding2cp): set codepage 20936
- according to GB2312. [Bug #3937] [ruby-core:32758]
-
-Sat Oct 16 10:54:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (CPP): already used in .c.i rule.
-
- * cygwin/GNUmakefile.in (DLLWRAP, WINDRES): add --driver-name and
- --preprocessor options explicitly. [ruby-core:32776]
-
-Sat Oct 16 10:06:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/sdbm/_sdbm.c (SEEDUPS, BADMESS): make settable using command
- line options.
-
- * ext/sdbm/_sdbm.c (makroom): suppress unused result warning.
-
- * ext/sdbm/extconf.rb: disable BADMESS, a library should not emit
- messages directly.
-
-Sat Oct 16 08:39:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (dln_strerror): get English message first, instead of
- system default. see [ruby-dev:42358].
-
-Sat Oct 16 00:08:00 2010 Koichi Sasada <ko1@atdot.net>
-
- * hash.c (rb_hash_aref): skip calling "default" method
- if it is not needed, for speed-up.
-
-Fri Oct 15 23:36:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (NUM2DEVT, DEVT2NUM, PRI_DEVT_PREFIX): fallback to
- unsigned int.
-
-Fri Oct 15 22:54:46 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_hresult2msg): get English message first,
- instead of system default. [ruby-core:32765]
-
-Fri Oct 15 22:47:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (VALUE): prefer long over uintptr_t,
- FIX2LONG expects VALUE to be long at least.
-
- * include/ruby/ruby.h (FIX2LONG): parenthesize the argument.
-
-Fri Oct 15 20:30:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (dev_t): use RUBY_REPLACE_TYPE.
-
- * file.c (rb_stat_inspect): use PRI_DEVT_PREFIX.
-
-Fri Oct 15 17:26:57 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * pack.c (pack_pack): simplify comparison of explicit_endian
- as pointed by nobu.
-
- * pack.c (pack_unpack): ditto.
-
-Fri Oct 15 16:40:37 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * pack.c (pack_pack): fix more than one modifiers appear in the
- format string. [ruby-core:32793]
-
- * pack.c (pack_unpack): ditto.
-
-Thu Oct 14 23:20:42 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_folderitem2_invokeverb.rb: refactoring.
-
-Thu Oct 14 22:18:29 2010 Koichi Sasada <ko1@atdot.net>
-
- * insns.def, iseq.c, vm_insnhelper.c: rename variable name
- (ip -> iseq).
-
-Thu Oct 14 20:41:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * pack.c (pack_pack): support endian modifiers: < and >.
- [ruby-dev:42376] Feature #3491
-
- * pack.c (pack_unpack): ditto.
-
-Thu Oct 14 20:50:51 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (reg_get_val): expand environment in
- the pathname. [Bug #3907]
-
-Thu Oct 14 07:35:07 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * file.c (DEVT2NUM): added. Size of dev_t is depend on the
- environment even if POSIX defines dev_t as unsigned integer.
- For example, OpenVMS, 64bit Solaris 9, and NetBSD 6 defines
- dev_t as 64bit unsigned integer.
-
- * file.c (rb_stat_dev): use DEVT2NUM.
-
- * file.c (rb_stat_dev_major): dev_t is not long. major(3)'s return
- value is int.
-
- * file.c (rb_stat_dev_minor): dev_t is not long. minor(3)'s return
- value is int.
-
- * configure.in: check size of dev_t.
-
-Thu Oct 14 07:22:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_and, rb_ary_or), class.c (rb_mod_init_copy),
- gc.c (undefine_final), time.c (time_mload): get rid of
- type-punning casts.
-
-Thu Oct 14 04:16:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric.c (ruby_float_step): fix Numeric#step with infinity unit
- doesn't works well. [ruby-core:32779]
-
-Wed Oct 13 23:16:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/enc-unicode.rb: get rid of lots of warnings.
-
- * iseq.c (insn_operand_intern, rb_iseq_disasm): fix format specifiers.
-
- * vm.c (thread_free): ditto.
-
- * numeric.c (check_uint): get rid of overflow on LLP64 platforms.
-
- * insns.def (opt_case_dispatch): use st_data_t.
-
-Wed Oct 13 22:32:34 2010 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/util.rb (CGI::unescape): bugfix to unescape the multibyte
- string. Thanks nobu and tDiary dev members. [Bug #3909]
-
-Wed Oct 13 21:13:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric.c (int_chr): raise error when the value is negative.
-
-Wed Oct 13 19:24:08 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * vm.c (ruby_vm_destruct): This function type was wrong; correct to the prototype.
-
-Wed Oct 13 14:58:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric.c (rb_num_to_uint): fix 32bit logic.
-
-Wed Oct 13 12:53:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric.c (rb_num_to_uint): added to check the range of arguments.
- Mainly for negative value with NUM2UINT on 32bit environment.
-
- * string.c (rb_str_concat): use rb_num_to_uint.
-
-Wed Oct 13 12:10:02 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (w32_error): get English message first, instead
- of system default. see [ruby-core:32765].
- [experimental]
-
-Wed Oct 13 11:04:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * debug.c (ruby_set_debug_option): define always for binary
- compatibility with debug env enabled binary.
-
- * signal.c (ruby_enable_coredump): ditto.
-
-Wed Oct 13 10:52:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (ruby_executable_node): missing prototype.
-
-Wed Oct 13 05:23:04 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * missing/strchr.c: add strlen's prototype.
-
- * missing/strstr.c: ditto.
-
-Wed Oct 13 00:21:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/rubyext.c (struct mktime_arg): constified.
-
- * ext/syck/rubyext.c (mktime_do, mktime_r, rb_syck_mktime): fix
- function signatures.
-
-Wed Oct 13 00:18:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * st.c (MurmurMagic): get rid of literal overflow.
-
- * configure.in (RUBY_CHECK_PRINTF_PREFIX): check for printf format
- specifier if possible.
-
-Tue Oct 12 23:58:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_open_osfhandle, rb_w32_wopen, rb_w32_pipe):
- use uintptr_t instead of long for win64.
-
- * win32/win32.c (socketpair_internal): suppress warnings.
-
- * win32/win32.c (ftruncate): use HANDLE instead of long for win64.
-
- * vsnprintf.c (BSD_vfprintf): fix cast.
-
- * numeric.c (rb_num2fix): result of rb_num2long is SIGNED_VALUE.
-
- * compile.c (iseq_build_body), error.c (set_syserr, get_syserr),
- (syserr_initialize), gc.c (define_final, rb_gc_copy_finalizer),
- (run_final), hash.c (rb_hash_aref, rb_hash_lookup2),
- (rb_hash_fetch_m, rb_hash_clear, rb_hash_aset, eql_i),
- iseq.c (iseq_load, iseq_data_to_ary), marshal.c (r_symlink),
- thread.c (rb_thread_local_aref),
- variable.c (generic_ivar_remove, ivar_get, rb_const_get_0),
- (rb_cvar_get), vm.c (rb_vm_check_redefinition_opt_method),
- vm_insnhelper.c (vm_get_ev_const), vm_method.c (remove_method),
- ext/iconv/iconv.c (map_charset): use st_data_t.
-
- * compile.c (iseq_build_body), insns.def (getglobal, setglobal),
- iseq.c (iseq_load, iseq_data_to_ary), util.c (valid_filename):
- use VALUE.
-
- * gc.c (obj_free, rb_objspace_call_finalizer): fix truncating
- cast.
-
- * gc.c (mark_current_machine_context): suppress warnings.
-
- * compile.c (iseq_compile_each): fix truncating cast.
-
- * cont.c (fiber_setcontext): missing variable definition.
-
-Tue Oct 12 19:25:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * error.c (exc_to_s): use OBJ_INFECT.
-
- * error.c (name_err_to_s): ditto.
-
- * error.c (name_err_mesg_to_str): ditto.
-
- * error.c (syserr_initialize): ditto.
-
-Tue Oct 12 19:07:55 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * error.c (syserr_initialize): taint message if mesg is given
- and it is tainted.
-
-Tue Oct 12 18:25:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_io_ungetc): always see Bignum. On 32bit valid value
- may be a Bignum. On 64bit for errors. [ruby-dev:42366]
-
-Tue Oct 12 18:25:04 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_concat): use unsigned int for GB18030.
-
-Tue Oct 12 17:53:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric (check_uint): the mask must refer to VALUE.
-
-Tue Oct 12 17:47:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric (check_uint): set MSB for negative value.
-
- * numeric (rb_num2uint): return value's type of rb_num2ulong
- is VALUE.
-
- * numeric (int_chr): variable i can't be negative.
-
-Tue Oct 12 16:04:37 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_strerror): get English message first, instead
- of system default. see [ruby-dev:42358].
- [experimental]
-
-Tue Oct 12 15:52:35 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_strerror): unmap some range of errno for
- workaround of VC10's strerror() and sys_nerr problem.
- based on a patch from Akio Tajima, [ruby-dev:42355].
-
-Tue Oct 12 15:36:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_io_ungetc): use unsigned int for GB18030.
-
-Tue Oct 12 15:14:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_io_putc): support multibyte characters.
- [ruby-core:30697]
-
-Tue Oct 12 15:10:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric.c (rb_enc_uint_chr): split from int_chr.
-
- * numeric.c (int_chr): use rb_enc_uint_chr.
-
- * include/ruby/encoding.h (rb_enc_uint_chr): added.
-
-Tue Oct 12 14:04:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric.c (int_chr): a codepoint of Ruby M17N must be 32bit
- unsigned int; GB18030 uses MSB. Also note that OnigCodePoint
- is defined as unsigned int.
-
-Tue Oct 12 12:20:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * vm_dump.c (dump_thread): foolish mistake.
-
-Tue Oct 12 10:39:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_MINGW32): canonicalize only on mingw.
-
-Mon Oct 11 20:20:23 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb (HTTP.get): specify ASCII-8BIT as the result
- encoding of Zlib::GzipReader.
- http://hibari.2ch.net/test/read.cgi/tech/1281473294/271
-
-Mon Oct 11 17:42:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * error.c (syserr_initialize): use mesg's encoding when locale
- encoding is US-ASCII. If locale encoding is not US-ASCII,
- assume err has non ASCII characters. [ruby-dev:42358]
-
-Mon Oct 11 14:03:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * error.c (syserr_initialize): set the encoding of Errno::*#message
- as locale. [ruby-dev:42358]
-
-Mon Oct 11 06:38:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_set_encoding):
- StringIO#set_encoding can get 2nd argument and optional hash
- for API compatibility to IO. [ruby-dev:42356]
-
-Mon Oct 11 06:11:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_io_set_encoding): use rb_funcall2 when the io is not
- a T_FILE. [ruby-dev:42356]
-
-Sun Oct 10 18:42:23 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (Set#replace): Apply a bit of optimization.
-
-Sun Oct 10 10:20:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_MINGW32): canonicalize as like mswin version.
-
-Sun Oct 10 05:33:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (rb_signal_buff_size, rb_signal_exec): moved
- declarations from thread.c.
-
-Sat Oct 9 16:54:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RSHIFT): quote to get rid of argument expansion
- for autoconf 2.68.
-
-Sat Oct 9 11:00:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_reset_event_flags, exec_event_hooks): ignore
- hooks marked as removed.
-
- * thread.c (thread_exec_event_hooks): remove hooks to be removed.
-
- * thread.c (rb_threadptr_remove_event_hook, rb_remove_event_hook):
- defer removing hooks if running the hooks. [ruby-dev:42350]
-
-Sat Oct 9 10:51:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_threadptr_exec_event_hooks): suppress each event
- hooks separately.
-
- * thread.c (thread_suppress_tracing): split from
- ruby_suppress_tracing, accepting thread pointer and event mask.
-
-Sat Oct 9 08:16:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_threadptr_remove_event_hook): fix typo.
-
-Fri Oct 8 10:52:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (RBCONFIG): depends on version.h due to
- RUBY_PATCHLEVEL. [ruby-core:32709]
-
-Fri Oct 8 00:24:54 2010 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Fixing documentation typos. [ruby-core:32712]
-
-Thu Oct 7 09:14:28 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vm_exec.c (vm_exec_core): Treat clang as non gcc on this
- context: It has __asm__ but doesn't works well.
-
-Wed Oct 6 12:28:22 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/uri/generic.rb (URI::Generic#hostname): new method.
- (URI::Generic#hostname=): ditto.
-
- * lib/open-uri.rb: use URI#hostname
-
- * lib/net/http.rb: ditto.
-
- reported by Adam Majer. [ruby-core:32056]
-
-Wed Oct 6 11:52:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (fptr_finalize): write_mutex might have been destroyed
- already in finalization phase, as the order of finalizers is not
- guaranteed. rb_mutex_t should be used in place of Mutex object
- in the future.
-
-Tue Oct 5 22:17:02 2010 wanabe <s.wanabe@gmail.com>
-
- * win32/mkexports.rb: revert r29320 and r29402.
-
-Mon Oct 4 12:43:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (regexp): dregexp has literal string only at the head
- and successors are array. [ruby-core:32682]
-
-Mon Oct 4 10:22:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * random.c (rand_init): This checks the value is in 32bit or not,
- so use int32_t, not int.
-
-Mon Oct 4 09:47:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * random.c (rand_init): remove useless assignment.
-
- * re.c (update_char_offset): remove unused variable.
-
- * re.c (read_escaped_byte): ditto.
-
-Mon Oct 4 09:30:42 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/openssl/lib/openssl/bn.rb (Integer#to_bn): OpenSSL::BN.new
- accepts only Strings, so call Integer#to_s(16).
- 16 is for an optimization. [ruby-dev:42336]
-
-Mon Oct 4 07:57:51 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * cont.c (fiber_memsize): Return size.
- Before this change, fiber_memsize always returns 0.
-
-Mon Oct 4 07:16:55 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/unicode.c (onigenc_unicode_property_name_to_ctype):
- remove useless assignment.
-
- * vm.c (vm_make_proc_from_block): ditto.
-
- * variable.c (rb_ivar_count): ditto.
-
-Mon Oct 4 06:40:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * Makefile.in (clean-rdoc): Don't use \ in variable expansion.
- BSD make treats it as an escape character.
-
-Mon Oct 4 00:01:53 2010 wanabe <s.wanabe@gmail.com>
-
- * tool/config.sub: revert r29320, r29324, r29347, r29354, r29365
- to automake-1.11.1. [ruby-core:32634]
-
- * win32/mkexports.rb: no longer use 'mingw64'. a patch from Luis Lavena
- at [ruby-core:32678].
-
-Sun Oct 3 20:36:37 2010 Akio Tajima (arton) <artonx@yahoo.co.jp>
-
- * test/win32ole/test_folderitem2_invokeverb.rb: Change creating
- shortcut verb to 'Link' [Bug #3339]
-
-Sun Oct 3 19:44:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (Makefile): get rid of duplicated ruby target when
- already there it was.
-
-Sat Oct 2 22:59:32 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_thread.rb: add for win32ole with Thread.
-
-Fri Oct 1 17:03:00 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * test/webrick/test_httpproxy.rb (TestWEBrickHTTPProxy::test_upstream_proxy):
- My machine fails this test at this line, saying 503 service unavailable.
-
-Thu Sep 30 16:11:08 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_getenv): should return NULL if specified name
- is empty. a patch from Heesob Park at [ruby-core:32650]
-
-Thu Sep 30 15:18:23 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (command_asgn): allow command_call to be right hand side
- expression of chained assignment. [ruby-dev:42313]
-
-Thu Sep 30 10:55:38 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * hash.c (ruby_setenv): workaround for old Windows. a patch from
- Heesob Park. [ruby-core:32353]
-
-Thu Sep 30 09:29:06 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb (URI.encode_www_form): change treatment of
- undefined value in given array as latest internet draft for
- application/www-form-urlencoded.
- http://tools.ietf.org/html/draft-hoehrmann-urlencoded-01
-
-Thu Sep 30 09:34:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * vm_dump.c (dump_thread): fixed wrong type of return value of
- SymGetModuleBase64(). [ruby-dev:42306]
-
-Wed Sep 29 21:04:05 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * test/ruby/test_rubyoptions.rb (TestRubyOptions::test_script_from_stdin):
- As usual, PTY is not always available.
-
-Wed Sep 29 18:38:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/config.sub (x64): regularize only for pc vendor, and strip
- useless 64 suffix.
-
-Wed Sep 29 17:53:02 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BIGDECIMAL_ENABLE_VPRINT):
- VPrint is usually disabled. It's only used in debugging.
-
-Wed Sep 29 17:41:34 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_save_limit):
- return the result of a block.
-
- * test/bigdecimal/test_bigdecimal.rb (test_save_limit):
- add a test for the above change.
-
-Wed Sep 29 16:18:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * vm_dump.c (dump_thread): remove unused optional arguments.
-
-Wed Sep 29 13:26:30 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_save_rounding_mode):
- return the result of a block.
-
- * test/bigdecimal/test_bigdecimal.rb (test_save_rounding_mode):
- add a test for the above change.
-
- * test/bigdecimal/test_bigdecimal.rb (test_save_exception_mode):
- add a test for the return value of BigDecimal.save_exception_mode.
-
-Wed Sep 29 12:45:30 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_div2, BigDecimal_add2,
- BigDecimal_sub2, BigDecimal_mult2, VpLimitRound): remove meaningless
- casts to get rid of compiler warnings.
-
-Wed Sep 29 12:35:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (VPrint, VpToString): fix format.
-
-Wed Sep 29 12:31:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/known_classes.rb (RDoc::KNOWN_CLASSES): add Encoding.
-
-Tue Sep 28 20:50:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/config.sub (x64): regularize same as mswin.
-
-Tue Sep 28 20:06:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * vm_dump.c (rb_vm_bugreport): add windows support.
- based on patches from Peter Weldon at [ruby-core:32551]
-
-Mon Sep 27 23:30:34 2010 Koichi Sasada <ko1@atdot.net>
-
- * insns.def (opt_case_dispatch), vm_insnhelper.c:
- execute the procedures of "when" clauses by bytecode
- instead of st_foreach() when the object does not hit
- prepared hash. [ruby-dev:42304]
-
-Mon Sep 27 15:54:03 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * test/net/http/test_https.rb: As always, localhost is not
- guaranteed to be resolved as 127.0.0.1. But a SSL
- certificate needs a socket to listen on a specific address
- where a CN resolves to. On situations where localhost is
- not 127.0.0.1, these tests are not possible.
-
-Mon Sep 27 15:25:05 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * test/net/imap/test_imap.rb: resurrection of r29259.
- this change depends on minitest 1.7.1.
-
- * lib/test/unit/assertions.rb: ditto.
-
-Sun Sep 26 22:59:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/config.sub (x86_64-pc-mingw64): regularize.
-
-Sun Sep 26 22:21:07 2010 wanabe <s.wanabe@gmail.com>
-
- * ext/openssl/ossl_hmac.c (ossl_hmac_hexdigest, ossl_hmac_s_hexdigest),
- ext/openssl/ossl_pkey_ec.c (ossl_ec_group_set_seed),
- ext/openssl/ossl_ssl_session.c (ossl_ssl_session_to_der),
- ext/openssl/ossl_pkcs7.c (numberof): suppress warnings.
- [ruby-core:31932]
-
-Sun Sep 26 10:25:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/config.{guess,sub}: updated to automake-1.11.1.
-
-Sat Sep 25 22:48:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LIBRUBY_DLDFLAGS): fix quoting.
-
-Sat Sep 25 10:30:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LIBRUBY_DLDFLAGS): use -unexported_symbol only
- when available. http://trac.macports.org/ticket/26341
-
-Sat Sep 25 10:05:49 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * configure.in: Always add -mieee for Renesas SH4.
- Thanks, Nobuhiro Iwamatsu. [Feature #3874] [ruby-core:32548]
-
-Sat Sep 25 01:34:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (install-cross): target to install cross-compiling
- stuff.
-
-Fri Sep 24 23:44:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (sym_call), vm.c (invoke_block_from_c),
- vm_insnhelper.c (vm_yield_with_cfunc): pass given block.
- [ruby-core:32075]
-
- * vm_eval.c (rb_funcall_passing_block): new function to call
- method with passing given block.
-
-Fri Sep 24 15:50:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_to_i): fix rdoc: String#to_i raises an
- exception when base is invalid. [ruby-core:31685]
-
-Fri Sep 24 15:28:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_rindex): use rb_enc_prev_char instead of repeated
- str_nth.
- patched by Michael Selig [ruby-core:32498]
-
-Fri Sep 24 14:19:12 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * test/test_pty.rb: Same as 229281; existence of PTY class do not
- guarantee a successful pty operation.
-
-Fri Sep 24 06:25:55 2010 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 1.7.2 r5879.
- * test/minitest/*.rb: ditto.
-
-Thu Sep 23 23:09:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_get_cref0): cref is stacked only in normal
- iseqs, so check if it is the case first.
-
-Thu Sep 23 23:08:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/config.sub: mingw64 should use x86_64. [ruby-core:32514]
-
-Thu Sep 23 21:40:40 2010 wanabe <s.wanabe@gmail.com>
-
- * ext/socket/raddrinfo.c (init_addrinfo, inspect_sockaddr): suppress
- warnings. see [ruby-core:31932].
-
-Thu Sep 23 19:27:57 2010 wanabe <s.wanabe@gmail.com>
-
- * thread_win32.c (w32_wait_events, w32_close_handle): suppress warnings.
- see [ruby-core:31932].
-
-Thu Sep 23 18:54:39 2010 wanabe <s.wanabe@gmail.com>
-
- * tool/config.sub: add mingw64.
-
- * win32/mkexports.rb (Exports::Mingw64): added.
-
- * win32/mkexports.rb (Exports::Mingw32): renamed from Exports::Mingw.
-
-Thu Sep 23 09:01:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_cref_push): no outer cref is needed for proc
- from method. Bug #3786, Bug #3860, [ruby-core:32501]
-
-Wed Sep 22 17:12:01 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/openssl/utils.rb (OpenSSL#silent): always restore $VERBOSE.
- [ruby-dev:42285]
-
-Wed Sep 22 16:59:40 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/test_prime.rb (TestPrime#test_new): the warning expected have
- not been displayed when $VERBOSE == nil. Patch by Shota Fukumori
- a.k.a. sora_h. [ruby-dev:42272]
- Recovers $stderr even if StringIO.new fails. Reported by unak.
-
-Wed Sep 22 01:55:48 2010 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_method.rb: fix last commit.
-
-Wed Sep 22 01:49:52 2010 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_method.rb: add a test for [ruby-core:30534].
-
-Wed Sep 22 00:52:44 2010 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/rdoc/ri/store.rb (save_cache): remove duplicate entries.
-
-Wed Sep 22 00:00:05 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_f_pathname): Pathname() translated
- from pathname.rb.
-
-Tue Sep 21 22:18:30 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * tool/mkconfig.rb: fixed build problem on mswin64 introduced in r29278.
-
-Tue Sep 21 02:42:35 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/pathname/test_pathname.rb (TestPathname#test_mkdir): fix typo.
-
-Mon Sep 20 23:23:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (bracket): get rid of scanning at the end of the pattern
- string, not to raise an exception while globbing command line.
- [ruby-core:32478]
-
-Mon Sep 20 11:25:49 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (Init_pathname): Pathname#=~ undefinition
- translated from pathname.rb.
-
-Mon Sep 20 02:34:11 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (check_rounding_mode, BigDecimal_mode):
- raise ArgumentError instead of TypeError passing invalid modes.
-
- * test/bigdecimal/test_bigdecimal.rb (test_mode, test_round):
- change against the above modifications.
-
-Sun Sep 19 22:08:39 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/mkmf.rb (try_link): rdoc
- (try_compile): ditto
- (try_cpp): ditto
- (try_func): ditto
- (try_var): ditto
- (try_run): ditto
- (egrep_cpp): ditto
-
-Sun Sep 19 20:43:33 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * configure.in (--disable-install-doc): disables capi too, in addition
- to rdoc.
- (--disable-install-rdoc): a new option for disabling only rdoc.
- (--disable-install-capi): a new option for disabling only capi.
-
-Sun Sep 19 20:37:45 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (clean): removes all documents on cleaning.o
- (CAPIOUT): new variable.
- (clean-capi, distclean-capi, realclean-capi): new targets
-
- * Makefile.in (clean-capi, distclean-capi, realclean-capi): ditto.
-
- * win32/Makefile.sub (clean-capi, distclean-capi, realclean-capi):
- ditto.
-
-Sun Sep 19 13:44:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LIBRUBY_SO): fix an oversight of replace
- RUBY_INSTALL_NAME with RUBY_SO_NAME. a patch from Jeremy Evans
- at [ruby-core:32474].
-
-Sun Sep 19 07:48:20 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_unlink): Pathname#unlink and
- Pathname#delete translated from pathname.rb.
-
-Sun Sep 19 06:06:07 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (check_rounding_mode): added for
- converting symbol to rounding mode number.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_mode, BigDecimal_round):
- support to specify rounding mode by symbol.
-
- * test/bigdecimal/test_bigdecimal.rb (test_mode, test_round):
- add tests for above changes.
-
-Sun Sep 19 05:14:35 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c: fix rounding algorithms for half-down
- and half-even. This change is based on the patch created by Matthew
- Willson, the reporter of this bug. [Bug #3803] [ruby-core:32136]
-
- * test/bigdecimal/test_bigdecimal.rb: add tests for above changes.
-
-Sat Sep 18 20:09:51 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_each_entry): Pathname#each_entry
- translated from pathname.rb.
-
-Fri Sep 17 23:44:07 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rexml/xpath_parser.rb, test/rexml/test_xpath.rb:
- add missing method availability check. [ruby-core:32447]
- Reported by Wiebe Cazemier. Thanks!!!
-
-Fri Sep 17 23:23:26 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/test_sax.rb: don't use thread and sleep to avoid slow test.
-
-Fri Sep 17 23:10:44 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/test_core.rb: enable.
-
-Fri Sep 17 22:46:02 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/: untabify.
-
-Fri Sep 17 22:29:56 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/: fix fixture data path. All REXML tests are worked.
-
-Fri Sep 17 22:15:15 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/test_listener.rb: remove needless codes.
-
-Fri Sep 17 22:12:23 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rexml/: import REXML tests from
- http://www.germane-software.com/repos/rexml/trunk/test/.
- Many tests are failed temporary. I'll fix them quickly. Sorry.
-
-Fri Sep 17 16:48:49 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * test/io/console/test_io_console.rb (TestIO_Console::helper):
- PTY.open is not guaranteed to work. On my machine opening a
- pty is prohibited via process control group. On those cases
- exceptions shall occur, and that doesn't mean our fault.
- Skip those tests on such situations.
-
-Fri Sep 17 08:30:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tracer.rb: count only non-internal libraries in stack trace,
- ignoring custom_require. [ruby-core:31858]
-
-Fri Sep 17 02:18:41 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * tool/mkconfig.rb: Fix build with m4 1.4.15 generating duplicate
- lines in config.status. According to nobu, the mswin32 port may
- depend on the piece of code in question, so the behavior is left
- unchanged on mswin32.
-
-Thu Sep 16 23:47:59 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_opendir): Pathname#opendir translated
- from pathname.rb.
-
-Thu Sep 16 21:40:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit::GlobOption): merged RejectOption.
-
- * test/runner.rb: utilize GlobOption.
-
-Thu Sep 16 21:31:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/ri/driver.rb (RDoc::RI::Driver.setup_options)
- (RDoc::RI::Driver.fixup_options): split from process_args.
- libraries should not parse ARGV inside, since it's a task of
- applications, not libraries.
-
-Thu Sep 16 21:02:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/ri/paths.rb (RDoc::RI::Paths.each): HOMEDIR can be nil
- if $HOME is unset.
-
-Thu Sep 16 14:50:42 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * test/ruby/test_file_exhaustive.rb (TestFileExhaustive::test_expand_path):
- ENV["HOME"] might not be set. On those cases without it an
- exception raises here, which effectively disables later
- tests on this method.
-
-Thu Sep 16 08:30:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): fix rdoc. pointed out by Tomoyuki
- Chikanaga at [ruby-core:32395], and a patch from Daniel
- Bovensiepen at [ruby-core:32403].
-
-Thu Sep 16 08:27:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/etc/extconf.rb: use expanded sysconfdir with empty DESTDIR.
- [ruby-core:32394]
-
-Thu Sep 16 06:07:24 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_rmdir): Pathname#rmdir translated
- from pathname.rb.
-
-Thu Sep 16 00:36:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/readline/extconf.rb: Remove Readline 6 check because
- Ruby's license is now GPLv3 compatible. [ruby-core:28736]
-
-Thu Sep 16 00:26:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * COPYING: change Ruby's License from a dual license with GPLv2
- to a dual license with 2-clause BSDL.
- [ruby-dev:42166] [ruby-core:31971]
- [ruby-dev:39167] [ruby-core:25272]
-
- * COPYING.ja: ditto.
-
- * BSDL: added. this is from The FreeBSD License.
-
-Wed Sep 15 21:07:06 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_mkdir): Pathname#mkdir translated
- from pathname.rb.
-
-Wed Sep 15 13:37:00 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * test/net/imap/test_imap.rb: "localhost" not guaranteed to
- resolve to "127.0.0.1". On my machine it is "::1" instead.
- The problem is, you have to connect to the imaps server via
- the canonical name written in a server certificate, and that
- of the server.cert is "localhost". So you have to listen to
- the address of what "localhost" resolves to. I think this
- situation cannot be resolved in a handy manner because the
- test "test_imaps_post_connection_check" is actually
- expecting to connect to a server via an address other than
- the CN. On my machine several assertions won't pass because
- the test cannot connect to the server.
-
-Wed Sep 15 09:12:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_puts): fix for wide char encoding strings.
- [ruby-dev:42212]
-
-Wed Sep 15 07:27:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_format_m): mentioned about Hash argument. a patch
- from Daniel Bovensiepen at [ruby-core:32386].
-
- * sprintf.c (get_hash): ditto, and fix typo.
-
-Wed Sep 15 07:22:20 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_entries): Pathname#entries translated
- from pathname.rb.
-
-Wed Sep 15 02:13:44 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/fiddle/closure.c : Don't use FFI closure alloc on OpenBSD.
- Thanks Jeremy Evans! [ruby-core:32384]
-
-Tue Sep 14 20:17:48 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_s_getwd): Pathname.getwd and
- Pathname.pwd translated from pathname.rb.
-
-Tue Sep 14 05:13:04 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_s_glob): Pathname.glob translated
- from pathname.rb.
-
-Tue Sep 14 01:24:51 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * ext/socket/raddrinfo.c (ruby_getaddrinfo__aix): suppress a
- warning.
-
-Mon Sep 13 20:48:30 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_zero_p): Pathname#zero? translated
- from pathname.rb.
-
-Mon Sep 13 19:56:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/rubysocket.h (__DARWIN_ALIGNBYTES): workaround of a
- bug in system header of darwin 9. [ruby-core:32341]
-
-Mon Sep 13 18:11:55 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (try_do): fix typo. a patch from Peter Weldon
- at [ruby-core:32327].
-
-Mon Sep 13 10:12:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * util.c (ruby_strtod): reject Float('0x0.').
- [ruby-dev:42239] Bug #3820
-
-Mon Sep 13 09:23:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/openssl/ossl_bn.c (ossl_bn_is_prime): fix comparison
- with rb_scan_args. Before this fix, OpenSSL::BN#prime?
- is fully broken. [ruby-dev:42225]
-
-Mon Sep 13 06:45:24 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_writable_real_p):
- Pathname#writable_real? translated from pathname.rb.
-
-Sun Sep 12 21:21:50 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: [ruby-core:32096] Thanks Colin Bartlett.
-
-Sun Sep 12 19:30:27 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_world_writable_p):
- Pathname#world_writable? translated from pathname.rb.
-
-Sun Sep 12 09:16:06 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_writable_p): Pathname#writable?
- translated from pathname.rb.
-
-Sun Sep 12 08:36:15 2010 Tanaka Akira <akr@fsij.org>
-
- * process.c (rlimit_resource_name2int): support more limits:
- RLIMIT_MSGQUEUE, RLIMIT_NICE, RLIMIT_RTPRIO, RLIMIT_RTTIME and
- RLIMIT_SIGPENDING.
- (Init_process): ditto.
- patch by Run Paint Run Run. [ruby-core:32262]
-
-Sun Sep 12 04:27:13 2010 Tanaka Akira <akr@fsij.org>
-
- * process.c (rlimit_resource_name2int): use STRCASECMP to avoid
- ALLOCA_N.
-
-Sat Sep 11 16:47:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (ruby_setenv): raise if putenv and SetEnvironmentVariable
- failed, because of the restriction of the size on Windows.
- based on a patch from Peter Weldon at [ruby-core:32304]. fix:
- Bug#3812, [ruby-core:32250]
-
-Sat Sep 11 15:19:57 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/webrick/httpauth/digestauth.rb (WEBrick::Config::DigestAuth):
- Add documentation
-
- * lib/webrick/config.rb (WEBrick::Config::DigestAuth): Add
- documentation
-
-Sat Sep 11 12:32:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_set_kcode, rb_get_kcode): removed
- zombie prototype declarations. a patch from Eric Hodel
- at [ruby-core:32305].
-
-Sat Sep 11 06:53:12 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_symlink_p): Pathname#symlink?
- translated from pathname.rb.
-
-Fri Sep 10 23:03:43 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_sticky_p): Pathname#sticky? translated
- from pathname.rb.
-
-Fri Sep 10 19:11:13 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/webrick/httprequest.rb (WEBrick::HTTPRequest#continue): add
- method for generating HTTP/1.1 100 continue response if the client
- expects it, otherwise does nothing. Patch by Brian Candler.
- ref #855.
-
- * test/webrick/test_httprequest.rb: test added.
-
-Fri Sep 10 17:49:34 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * ext/openssl/lib/openssl/x509-internal.rb: removed unused local
- variable.
-
- * test/openssl/*: less warnings while test running with -w.
-
-Fri Sep 10 16:49:20 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * class.c (rb_scan_args): Add support for optional keyword
- argument hash. [ruby-dev:42221] [ruby-dev:38048]
-
- * README.EXT, README.EXT.ja: Update documentation accordingly.
-
- * dir.c (dir_initialize): Make use of the new rb_scan_args()
- feature.
-
- * io.c (rb_io_s_popen, rb_scan_open_args, rb_io_initialize)
- (rb_io_s_pipe, open_key_args, io_s_foreach, io_s_readlines)
- (rb_io_s_read, rb_io_set_encoding): Ditto.
-
- * transcode.c (str_transcode, econv_args)
- (econv_primitive_convert): Ditto.
-
- * ext/zlib/zlib.c (rb_gzreader_initialize): Ditto.
-
-Fri Sep 10 10:33:18 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * random.c (rb_genrand_ulong_limited): renamed from
- rb_rand_internal and now this is public API.
-
- * include/ruby/ruby.h (rb_genrand_ulong_limited): added.
-
- * bignum.c (big_sparse_p): use rb_genrand_ulong_limited.
-
-Fri Sep 10 13:07:22 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * ext/digest/lib/digest.rb: removed unused exception variable
- assignment to avoid a warning.
-
-Fri Sep 10 07:29:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/etc/etc.c (etc_systmpdir): assume system default tmpdir
- safe. [ruby-dev:42089]
-
-Fri Sep 10 07:03:23 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_size_p): Pathname#size? translated from
- pathname.rb.
-
-Fri Sep 10 02:15:29 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (inspect_peercred): support OpenBSD-current.
- patch by Jeremy Evans. [ruby-core:32240]
-
-Thu Sep 9 23:25:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_backtrace_each): skip allocator frames which have no
- name. [ruby-core:32231]
-
-Thu Sep 9 22:39:08 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_size): Pathname#size translated from
- pathname.rb.
-
-Thu Sep 9 22:34:48 2010 wanabe <s.wanabe@gmail.com>
-
- * compile.c (case_when_optimizable_literal): When float value can be
- treated as integer, add to table hash of case that way.
- based on a patch from Ikuo KOBORI. [ruby-dev:42038]
-
- * insns.def (opt_case_dispatch): ditto.
-
- * test/ruby/test_case.rb: add tests.
-
-Thu Sep 9 17:15:15 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/net/http/test_https.rb (test_identity_verify_failure): follows
- the SSL hostname check error message of openssl.
-
-Thu Sep 9 10:44:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/ruby/test_env.rb (test_aset): OpenBSD acts like NetBSD in
- that it ignores characters after = in ENV.
- patched by Jeremy Evans [ruby-core:32184]
-
-Thu Sep 9 09:02:01 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/rbinstall.rb (install?): gemspec filename should include
- its version. patched by Luis Lavena [ruby-core:32165]
-
-Wed Sep 8 22:46:31 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_ssl.c (ssl_get_error): Thread context switch was
- blocked on Windows while blocking call for SSLSocket. Need to
- convert errno for letting rb_io_wait_readable detect EWOULDBLOCK.
- Patch by arton. ref #3794.
-
-Wed Sep 8 20:56:57 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_setgid_p): Pathname#setgid? translated
- from pathname.rb.
-
-Wed Sep 8 06:25:41 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_setuid_p): Pathname#setuid? translated
- from pathname.rb.
-
-Tue Sep 7 21:03:35 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_readable_real_p):
- Pathname#readable_real? translated from pathname.rb.
-
-Mon Sep 6 23:07:25 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_world_readable_p):
- Pathname#world_readable? translated from pathname.rb.
-
-Mon Sep 6 11:03:13 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * Fixed wrong check of missing functions. Patch by Adrian Quark.
- ref #3400
- The patch contains following comment:
- This patch should avoid unnecessary incompatibility with future
- versions of Openssl. Changes suggested by bmaher_at_amazon.com.
-
-Mon Sep 6 10:46:55 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * Fixed exception message for SSL post connection check failure. Patch
- by Paul Betteridge. ref [Bug #3704]
-
-Mon Sep 6 10:31:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/readline/readline.c (readline_s_get_line_buffer):
- Readline.line_buffer should return locale string.
- [ruby-dev:42184] #3791
-
-Mon Sep 6 09:47:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * util.c (ruby_strtod): check there is at least 1 digit after
- "0x" before ".". [ruby-dev:42183] #3790
-
-Mon Sep 6 09:44:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * util.c (ruby_strtod): check integer overflow.
- [ruby-dev:42180] #3789
-
-Mon Sep 6 06:17:21 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_readable_p): Pathname#readable?
- translated from pathname.rb.
-
-Sun Sep 5 23:02:34 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_owned_p): Pathname#owned?
- translated from pathname.rb.
-
-Sat Sep 4 23:48:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_readlink): symlink target should be in
- filesystem encoding.
-
-Sat Sep 4 10:40:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (ruby_init_ext): export for golfers.
-
- * vm_core.h (rb_iseq_eval, rb_iseq_compile_with_option): ditto.
-
-Sun May 23 17:29:41 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (capi): uses a timestamp file to get rid of
- generating twice.
-
-Fri Jun 18 01:33:21 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * enc/Makefile.in (realclean): has been missing. necessary
- for make realclean-enc.
-
-Fri Sep 3 23:51:26 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_socket_p): Pathname#socket?
- translated from pathname.rb.
-
-Fri Sep 3 06:40:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/pty/pty.c (chfunc): pass through exceptions.
-
- * io.c (rb_io_bufwrite, rb_io_bufread): added.
-
- * process.c (rb_fork_err): protect from exceptions.
-
-Fri Sep 3 06:16:07 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_pipe_p): Pathname#pipe?
- translated from pathname.rb.
-
-Fri Sep 3 06:14:40 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/pty/pty.c (chfunc): restore errno from SystemCallError and
- propagate proper exception to the parent. [ruby-dev:41965]
-
-Thu Sep 2 22:10:38 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_file_p): Pathname#file?
- translated from pathname.rb.
-
-Thu Sep 2 09:12:02 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): don't forget to free
- memory.
-
-Thu Sep 2 09:01:13 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (CreateChild): unicodize.
-
- * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): convert arguments of
- CreateChild() from ACP to WideChar.
-
-Thu Sep 2 06:53:43 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_directory_p): Pathname#directory?
- translated from pathname.rb.
-
-Wed Sep 1 22:03:41 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_grpowned_p): Pathname#grpowned?
- translated from pathname.rb.
-
-Wed Sep 1 17:39:02 2010 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 1.7.1 r5835.
- * test/minitest/*.rb: ditto.
-
-Wed Sep 1 16:50:42 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (tr_setup_table): optimized. don't create hash objects
- when given pattern is ASCII only.
-
- * string.c (tr_find): ditto.
-
-Wed Sep 1 14:35:29 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * array.c (rb_ary_rotate_m): fix typo of rdoc.
- patched by Andrei Kulakov [ruby-core:31975]
-
-Wed Sep 1 14:33:36 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enum.c (enum_zip): fix typo of rdoc.
- patched by Andrei Kulakov [ruby-core:31974]
-
-Wed Sep 1 12:56:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (ruby_suppress_tracing): restore the state and invoke
- the func with normal state. a patch from Satoshi Shiba <shiba
- AT rvm.jp> at [ruby-dev:42162]. [ruby-core:31783]
-
-Tue Aug 31 21:10:23 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_exist_p): Pathname#exist? translated
- from pathname.rb.
-
-Tue Aug 31 17:32:34 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/stubs.c: fix [Bug #3771] "VC++ can't make ext/tk with enabling
- stubs". Thanks, Akio Tajima [ruby-dev:42159].
-
-Tue Aug 31 03:42:14 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (tr_setup_table): fix bug in r29146.
- Initialize table even if cflag is 0; tr_find see whether
- del is empty or not.
-
- * string.c (tr_find): nodel can't be NULL; if NULL, it means
- it is not specified.
-
-Mon Aug 30 21:29:21 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_executable_real_p):
- Pathname#executable_real? translated from pathname.rb.
-
-Mon Aug 30 15:00:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (tr_setup_table): initialize negating table when
- negating string is given. [ruby-core:31851]
-
- * string.c (tr_find): add a sentence for the time when
- target characters include negating one.
-
- * string.c (rb_str_count): move definition.
-
-Mon Aug 30 07:32:41 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_executable_p): Pathname#executable?
- translated from pathname.rb.
-
-Sun Aug 29 23:54:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/parser/ruby.rb (RDoc#parse_call_parameters): don't
- include assignment. [Bug #3759], [ruby-dev:42154]
-
- * lib/rdoc/parser/ruby.rb (RDoc#parse_class): ignore non-constant
- name singleton class. [Bug #3759], [ruby-dev:42154]
-
-Sun Aug 29 23:25:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_get_path_check): clarify error message for
- ASCII-incompatible path name.
-
-Sun Aug 29 16:02:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk (node_name.inc): remove command option -n and give
- file as stdin, because IronRuby 1.1 still doesn't support it.
- So now we can use ir.exe as BASERUBY.
-
- * tool/node_name.rb: read stdin with while gets.
-
-Sun Aug 29 13:22:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (rb_thread_method_id_and_class): curried proc has no
- method. [ruby-core:31871]
-
-Sun Aug 29 12:51:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (rb_provide_feature): clarify error message for frozen
- $LOADED_FEATURES. based on a patch from Run Paint Run Run at
- [ruby-core:31913].
-
-Sun Aug 29 12:19:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (load_failed): should honor encoding. [ruby-core:31915]
-
-Sun Aug 29 09:35:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk (clean): exclude *.inc. [ruby-dev:41931]
-
- * common.mk (distclean): include *.inc.
-
- * common.mk (help): change description about clean and distclean.
-
-Sat Aug 29 06:34:52 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_chardev_p): Pathname#chardev?
- translated from pathname.rb.
-
-Sat Aug 28 17:39:33 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_save_exception_mode,
- BigDecimal_save_rounding_mode, BigDecimal_save_limit): added.
-
- * test/bigdecimal/test_bigdecimal.rb: added tests for the above
- features.
-
-Sat Aug 28 08:11:05 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_blockdev_p): Pathname#blockdev?
- translated from pathname.rb.
-
-Fri Aug 27 16:20:01 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * string.c (rb_str_prepend): new method by Shota Fukumori (sora_h)
- [Feature #3765]
-
-Fri Aug 27 15:24:20 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * math.c (math_atan2): you should know that M_PI is not the feature
- of C90.
- fixed build failure caused by r29115.
-
-Fri Aug 27 15:26:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (null_device): move from io.c.
-
-Fri Aug 27 12:47:44 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * math.c (math_atan2): change the behavior when x and y are zero.
- [ruby-dev:42090] [Bug #3736] [ruby-dev:42116]
-
- * test/ruby/test_math.rb (test_atan2): add tests for the above
- changes.
-
-Fri Aug 27 12:26:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * object.c (rb_obj_class): remove mention of obsolete method.
- a patch from Run Paint Run Run at [ruby-core:31842].
-
-Fri Aug 27 12:25:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (null_device): the name of null device. [ruby-dev:41791]
-
-Fri Aug 27 07:57:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_shuffle_bang): bail out from modification during
- shuffle.
-
- * array.c (rb_ary_sample): ditto.
-
-Fri Aug 27 05:11:51 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_sysopen): Pathname#sysopen translated
- from pathname.rb.
-
-Thu Aug 26 22:53:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_shuffle): rdoc fix. argument name was missing.
- a patch from Run Paint Run Run at [ruby-core:31848].
-
-Thu Aug 26 21:49:46 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_readlines): Pathname#readlines
- translated from pathname.rb.
-
-Thu Aug 26 10:37:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regint.h (OnigStackIndex): the type should be intptr_t.
- Original Oniguruma assumes the size of long and that of void *
- are equal, but it's not true on LLP64 platform: mswin64.
- originally patched by shintaro kuwamoto [ruby-dev:42133]
-
-Thu Aug 26 10:38:11 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * test/dl/test_base.rb: AIX does not have dynamically loadable lib[cm].
-
- * test/fiddle/helper.rb: AIX does not have dynamically loadable lib[cm].
-
-Thu Aug 26 09:49:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_shuffle_bang): check number of argument.
-
-Tue Aug 26 09:11:40 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (Init_bigdecimal,
- rmpd_set_thread_local_exception_mode, VpGetException,
- VpSetException): thread-local exception mode.
-
- * ext/bigdecimal/bigdecimal.c (Init_bigdecimal,
- rmpd_set_thread_local_precision_limit, VpGetPrecLimit,
- VpSetPrecLimit): thread-local precision limit.
-
- * ext/bigdecimal/bigdecimal.c (Init_bigdecimal,
- rmpd_set_thread_local_rounding_mode, VpGetRoundMode,
- VpSetRoundMode, VpException, VpInternalRound):
- thread-local rounding mode.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_mode, BigDecimal_round,
- VpIsRoundMode, VpGetRoundMode, VpSetRoundMode, VpActiveRound,
- VpMidRound, VpLeftRound), ext/bigdecimal/bigdecimal.h:
- use unsigned short for rounding mode.
-
- * test/bigdecimal/test_bigdecimal.rb (test_mode): add test for
- setting rounding mode.
-
- * test/bigdecimal/test_bigdecimal.rb (test_thread_local_mode):
- add test for setting mode thread-locally.
-
-Thu Aug 26 07:29:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_{shuffle_bang,sample}): use Random class object.
-
- * random.c (try_get_rnd): use default_rand for Random as same as
- singleton methods.
-
- * random.c (rb_random_real): check the range of result.
-
-Wed Aug 25 22:11:11 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_binread): Pathname#binread translated
- from pathname.rb.
-
-Wed Aug 25 03:42:43 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/cfunc.c (rb_dlcfunc_call): workaround for VC9 for x64.
- reported by kuwamoto shintaro in [ruby-dev:42125].
-
-Tue Aug 24 23:28:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * .gitignore: updated.
-
-Tue Aug 24 22:07:28 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_read): Pathname#read translated from
- pathname.rb.
-
-Tue Aug 24 10:11:04 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: read API version from include/ruby/version.h.
-
- * {bcc,win}32/setup.mak (-version-): ditto.
-
- * version.h (RUBY_LIB_VERSION): use API version numbers.
-
-Tue Aug 24 07:07:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_shuffle_bang, rb_ary_sample): add optional
- argument random. [ruby-dev:41923] [EXPERIMENTAL]
-
- * random.c (rb_random_{int32,real,bytes}): fallback to normal
- method invocation.
-
-Tue Aug 24 06:08:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/version.h (RUBY_API_VERSION_*): renamed and moved
- from version.h. [ruby-dev:42103]
-
-Tue Aug 24 05:58:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ChangeLog: flushed. [ruby-dev:42050]
-
-Tue Aug 24 01:14:58 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): to_f must underflow
- when the exponent is less than DBL_MIN_10_EXP - BASE_FIG.
-
- * test/bigdecimal/test_bigdecimal.rb (test_to_f): added test for the above changes.
-
-Mon Aug 23 23:14:21 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_each_line): Pathname#each_line
- translated from pathname.rb.
-
-Mon Aug 23 22:30:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (version.o): depends on both of version.h and
- include/ruby/version.h. [ruby-dev:42063]
-
-Mon Aug 23 13:09:27 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * backport r29071 from ruby_1_8;
-
- * ext/openssl/ossl_asn1.c (obj_to_asn1bool): fixed ASN1::Boolean
- encoding issue for OpenSSL 1.0.0 compatibility.
- ASN1::Boolean.new(false).to_der wrongly generated "\1\1\377" which
- means 'true'.
-
- ASN1_TYPE_set of OpenSSL <= 0.9.8 treats value 0x100 as 'false'
- but OpenSSL >= 1.0.0 treats it as 'true'. ruby-ossl was using
- 0x100 for 'false' for backward compatibility. Just use 0x0 for
- the case OpenSSL >= OpenSSL 0.9.7.
-
- * test/openssl/test_asn1.rb: test added.
-
-Mon Aug 23 12:28:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_search): fix: 4th argument should be regexp
- object. patched by shintaro kuwamoto [ruby-dev:41667] #3459
-
-Mon Aug 23 02:23:05 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * util.c (ruby_strtod): make sure to have digit-sequence after 'p'
- for hexadecimal-floating-constant. [ruby-dev:42105]
-
-Mon Aug 23 00:23:07 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb: [ruby-core:31695]
-
-Sun Aug 22 09:08:02 2010 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (UINT2NUM): fix ifdef condition for LLP64.
- reported by Daniel Gutmanas. [ruby-core:31778]
-
-Sun Aug 22 06:46:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (RAND_UPTO): macro for random number.
-
-Sun Aug 22 05:55:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: fix typo. a patch from Eric Wong at
- [ruby-core:31810].
-
-Sat Aug 21 20:09:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vm.c: add missing prototype of rb_iseq_clone for r29063.
-
-Sat Aug 21 18:54:56 2010 wanabe <s.wanabe@gmail.com>
-
- * vm.c (vm_define_method): copy iseq to avoid overwriting iseq->klass.
- #2502, #3136. see #2420.
-
-Sat Aug 21 17:36:42 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_split): Pathname#split translated from
- pathname.rb.
-
-Fri Aug 20 10:40:04 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_expand_path): Pathname#expand_path
- translated from pathname.rb.
-
-Thu Aug 19 22:44:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot (usage): add usage.
-
- * tool/make-snapshot (package): accept revision as BRANCH@REV.
-
-Thu Aug 19 19:53:26 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_timestamp): fix a constant type.
-
- * ext/socket/raddrinfo.c (get_afamily): suppress a warning.
-
-Thu Aug 19 19:28:47 2010 Tanaka Akira <akr@fsij.org>
-
- * thread_pthread.c (native_sleep): suppress a warning for platforms
- which time_t is int.
-
-Thu Aug 19 18:15:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/merger.rb: Add a tool to merge commits between branches.
- developed by URABE Shyouhei
-
-Thu Aug 19 17:19:09 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * backport r28621 and r28632 from ruby_1_8;
-
- * ext/openssl/ossl_config.c, ext/openssl/lib/openssl/config.rb,
- ext/openssl/lib/openssl.rb: reimplement OpenSSL::Config in Ruby.
- Now it should work on windows.
-
- * test/openssl/test_config.rb: added tests for OpenSSL::Config#dup.
-
- * test/openssl/test_config.rb: added tests for Config#clone.
-
-Thu Aug 19 12:04:39 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * array.c (rb_ary_permutation, rb_ary_repeated_permutation,
- rb_ary_repeated_combination, rb_ary_product):
- use ary_make_shared_copy instead of ary_make_substitution.
- [ruby-dev:42067] [Bug #3708]
-
- * test/ruby/test_array.rb (test_product, test_repeated_permutation,
- test_repeated_combination): append assertions against [Bug #3708].
-
-Thu Aug 19 11:11:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enum.c (enum_inject): fix typo of rdoc.
- patched by Andrei Kulakov [ruby-core:31768]
-
-Thu Aug 19 10:06:08 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_extname): Pathname#extname translated
- from pathname.rb.
-
-Thu Aug 19 06:03:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_push_frame): initialize block_iseq. a patch
- from Peter Weldon at [ruby-core:31757].
-
-Wed Aug 18 19:08:17 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * array.c (ary_make_shared): revert r29037, it occurs SEGV some
- situations.
-
-Wed Aug 18 18:36:32 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * array.c (ary_make_shared),
- test/ruby/test_array.rb (test_permutation):
- always return the original array when it is shared.
- [ruby-dev:42067] [Bug #3708]
-
-Wed Aug 18 01:37:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regcomp.c: revert r26701; it introduces Bug #3681.
- [ruby-core:31677]
-
-Tue Aug 17 20:05:29 2010 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_io.rb (test_threaded_flush): test "hi" is not output
- twice.
-
-Tue Aug 17 15:13:28 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/date.rb: Re-revert the part of r28950.
- It reverted the part of r28619.
-
-Tue Aug 17 13:00:07 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_dirname): Pathname#dirname translated
- from pathname.rb.
-
-Tue Aug 17 07:50:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/readline/extconf.rb: check functions more.
- [ruby-core:31722]
-
-Tue Aug 17 07:42:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_make_independent_expand): set capacity properly. a
- patch from Peter Weldon at [ruby-core:31734]. [ruby-core:31653]
-
-Tue Aug 17 07:38:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gem_prelude.rb, lib/rubygems.rb (Gem.suffixes): include empty
- suffix. [ruby-core:31730]
-
-Mon Aug 16 22:16:12 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_basename): unused variable removed.
-
-Mon Aug 16 21:39:33 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_basename): Pathname#basename translated
- from pathname.rb.
-
-Mon Aug 16 20:26:13 2010 Narihiro Nakamura <narihiro@netlab.jp>
-
- * gc.c (gc_profile_result): Index begins with 1.
-
-Mon Aug 16 20:21:17 2010 Narihiro Nakamura <authornari@gmail.com>
-
- * gc.c (gc_profile_result): use size_t. based on patches from
- Tomoaki NISHIYAMA <tomoakin@kenroku.kanazawa-u.ac.jp> at
- [ruby-dev:42042].
-
-Mon Aug 16 19:23:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_dtoa, ruby_hdtoa): use same representations for
- Infinity and NaN. a part of a patch from Peter Weldon at
- [ruby-core:31725].
-
- * util.c (ruby_hdtoa): fixed buffer overrun. based on a patch
- from Peter Weldon at [ruby-core:31725].
-
-Mon Aug 16 17:44:55 2010 Tanaka Akira <akr@fsij.org>
-
- * common.mk (capi): use -b option for doxygen. It disables stdout
- buffering and prevents wrong reordering between stdout and stderr
- even when the output of "make" is redirected.
-
-Sun Aug 15 19:59:58 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/webrick/httpresponse.rb (WEBrick::HTTPResponse#set_error):
- Fix for possible cross-site scripting (CVE-2010-0541).
- Found by Apple, reported by Hideki Yamane.
- Patch by Hirokazu Nishio <nishio.hirokazu AT gmail.com>.
-
-Mon Aug 16 12:29:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, win32/Makefile.sub (test-rubyspec-precheck): split
- from test-rubyspec.
-
- * common.mk (test-rubyspec): moved from Makefile.in.
-
-Mon Aug 16 10:00:45 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.h (llabs): never never never never never
- use "long long".
-
- * ext/bigdecimal.bigdecimal.c (BigDecimal_to_i): get rid of a warning.
-
-Sun Aug 15 18:14:20 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_dump, BigDecimal_inspect,
- VPrint, VpToString, VpVarCheck): use PRIuSIZE, PRIdSIZE, PRIdVALUE,
- and PRIxVALUE.
-
-Sun Aug 15 16:14:31 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (Logging.postpone): close @log only when it's available.
-
-Sun Aug 15 13:30:35 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.h (VpVtoD): fix a type of e.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_dump, BigDecimal_inspect):
- fix format for size_t.
-
-Sun Aug 15 00:22:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/extconf.rb, ext/bigdecimal/bigdecimal.h
- (labs, llabs): support environments missing labs and llabs.
-
- * ext/bigdecimal/bigdecimal.h (vabs): added.
-
- * ext/bigdecimal/extconf.rb, ext/bigdecimal/bigdecimal.h,
- ext/bigdecimal/bigdecimal.c, test/bigdecimal/test_bigdecimal.rb
- (TestBigDecimal#test_new): replace U_LONG, S_LONG, S_INT, and U_INT
- with appropriate standard or ruby-provided types.
-
-Sun Aug 15 00:15:45 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_utime): Pathname#utime translated
- from pathname.rb.
-
-Sat Aug 14 21:04:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_gc_mark_threads): deprecated.
-
-Sat Aug 14 19:12:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/{coverage,objspace}/extconf.rb ($INCFLAGS): explicitly add
- topdir and top_srcdir. [ruby-dev:42031]
-
-Sat Aug 14 17:48:41 2010 Narihiro Nakamura <authorNari@gmail.com>
-
- * test/objspace/test_objspace.rb: added test for objspace.
-
- * ext/objspace/objspace.c: considers T_ZOMBIE by lazy sweep GC.
-
- * gc.c: considers that dsize was 0. [ruby-dev:42022]
-
-Sat Aug 14 15:33:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, include/ruby/defines.h (RUBY_FUNC_EXPORTED): macro
- to declare exported function.
-
- * array.c (rb_ary_memsize), string.c (rb_str_memsize),
- variable.c (rb_objspace_data_type_memsize): used in
- objspace. [ruby-dev:42022]
-
- * io.c (rb_io_memsize): constified.
-
- * regcomp.c (onig_memsize): constified.
-
- * gc.h (rb_objspace_each_objects): used in objspace.
-
- * vm_core.h (rb_{get,set,reset}_coverages): used in coverage.
-
- * include/ruby/intern.h (rb_time_interval): used in io/wait.
-
- * include/ruby/intern.h (rb_make_backtrace, rb_make_exception):
- used in ripper.
-
- * node.h (rb_parser_{malloc,realloc,calloc,free}): ditto.
-
-Fri Aug 13 22:48:39 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_truncate): Pathname#truncate translated
- from pathname.rb.
-
-Fri Aug 13 16:11:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (MiniTest::Unit.new): extend before initialize.
- [ruby-dev:41970]
-
- * lib/test/unit.rb (MiniTest::Unit.autorun): use Test::Unit::Mini.
-
-Thu Aug 12 23:39:02 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_make_symlink): Pathname#make_symlink
- translated from pathname.rb.
-
-Thu Aug 12 21:18:27 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_lstat): Pathname#lstat translated
- from pathname.rb.
-
-Thu Aug 12 05:58:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/encoding.h (rb_char_to_option_kcode): used in
- ripper.
-
- * node.h (rb_reserved_word): ditto.
-
-Thu Aug 12 00:19:53 2010 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_rubyoptions.rb (test_script_from_stdin): disable
- echo. [ruby-dev:41966]
-
-Wed Aug 11 23:28:22 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * lib/cmath.rb (CMath.sqrt): use floating-point value.
- [ruby-core:31672] [Bug #3678]
-
- * test/test_cmath.rb: added for testing lib/cmath.rb.
-
-Wed Aug 11 20:57:25 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: merge from branches/ruby_1_9_2, and move io/console.
- [ruby-dev:41924]
-
-Wed Aug 11 11:01:15 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c: don't use // comment.
-
-Wed Aug 11 06:18:20 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_stat): Pathname#stat translated
- from pathname.rb.
-
-Tue Aug 10 21:18:04 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_to_[ifr]): don't allow complex with in-exact
- imaginary zero to be converted.
-
-Tue Aug 10 20:56:31 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/optparse.rb: suppress a warning.
-
- * test/test_mutex_m.rb: ditto.
-
-Tue Aug 10 20:56:13 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (Date::Format::Bag): use Struct.
- as an experimental.
-
-Tue Aug 10 20:45:35 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_rename): Pathname#rename translated
- from pathname.rb.
-
-Tue Aug 10 20:16:19 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/win32/lib/win32/resolv.rb (get_info): get rid of a warning.
-
-Tue Aug 10 19:56:13 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb: [ruby-core:31658]
-
-Tue Aug 10 17:24:56 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * README.EXT.ja: rb_tainted_str_new_cstr() is an alias of
- rb_tainted_str_new2().
-
-Tue Aug 10 15:24:30 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c, ext/bigdecimal/bigdecimal.h,
- ext/bigdecimal/extconf.rb: BASE and BASE_FIG are defined
- based on the size of BDIGIT.
-
- * ext/bigdecimal/bigdecimal.c, ext/bigdecimal/bigdecimal.h:
- use BDIGIT for Real#frac.
-
-Tue Aug 10 15:19:45 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.h, ext/bigdecimal/bigdecimal.c:
- add extern declaration of rb_cBigDecimal.
-
-Tue Aug 10 14:09:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/webrick/httprequest.rb (WEBrick::HTTPRequest::parse_uri):
- rollup leading slashes. [ruby-core:31657]
- patched by Jamison Wilde
- NOTE: //authority/path is valid relative URI both RFC2396 and
- RFC3986. So when give a relative URI-like string to URI lib,
- users must care leading slashes.
-
-Tue Aug 10 11:26:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/un.rb (httpd): SIGQUIT and SIGHUP are not guaranteed to exist.
-
-Tue Aug 10 06:26:48 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_readlink): Pathname#readlink translated
- from pathname.rb.
-
-Mon Aug 9 22:15:19 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_open): Pathname#open translated from
- pathname.rb.
-
-Mon Aug 9 22:11:09 2010 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_signal.rb (TestSignal#test_exit_action): use
- Process.spawn instead of Process.fork.
-
-Mon Aug 9 15:59:02 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rubygems/source_index.rb: rename unused variable.
-
- * lib/rubygems/specification.rb: rename unused variable.
-
- * lib/rubygems/specification.rb: remove unused variable.
-
-Mon Aug 9 14:10:06 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: Fix type of mimeout_state.buf.
- [nkf-bug:20079]
-
-Mon Aug 9 06:52:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (sys_warning_1): show error message.
-
-Mon Aug 9 06:50:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_require.rb (test_require_too_long_filename):
- clear -w option.
-
-Mon Aug 9 00:18:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb ($ignore_error): initialize after $nmake.
-
-Sun Aug 8 19:16:26 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_make_link): Pathname#make_link
- translated from pathname.rb.
-
-Sun Aug 8 16:42:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems.rb (Gem.find_files): reverted to use globbing.
-
- * lib/rubygems.rb (Gem.find_files): fixed search order same as
- default behavior.
-
- * gem_prelude.rb, lib/rubygems.rb (Gem.suffixes): return truly
- require-able suffixes only.
-
-Sun Aug 8 13:20:57 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_ftype): Pathname#ftype translated
- from pathname.rb.
-
-Sun Aug 8 12:41:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_tokadd_escape): no similar messages twice.
- [ruby-core:31048]
-
-Sun Aug 8 10:07:45 2010 Tanaka Akira <akr@fsij.org>
-
- * strftime.c (rb_strftime_with_timespec): suppress warnings.
-
-Sun Aug 8 08:58:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (RUBY_H_INCLUDES): add subst.h.
-
-Sun Aug 8 08:55:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (ruby_snprintf): printf attribute.
-
-Sun Aug 8 07:47:29 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/rbconfig/obsolete.rb: show the location which use Config.
-
-Sun Aug 8 07:29:55 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_fnmatch): Pathname#fnmatch and
- Pathname#fnmatch? translated from pathname.rb.
-
-Sun Aug 8 07:18:22 2010 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/subst.h (snprintf): redefinition moved from ruby.h.
- (vsnprintf): ditto.
-
-Sun Aug 8 00:41:42 2010 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/subst.h: new file for substitute standard functions.
-
- * include/ruby/missing.h: don't substitute "close", etc. here.
-
- * include/ruby/ruby.h: include ruby/subst.h at last.
- This prevents substituting "close" in unistd.h.
-
-Sat Aug 7 19:51:10 2010 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/envutil.rb (EnvUtil.invoke_ruby): merge stdout and stderr
- if capture_stderr is :merge_to_stdout.
- (assert_normal_exit): print abnormal output properly.
-
-Sat Aug 7 19:04:49 2010 Tanaka Akira <akr@fsij.org>
-
- * missing/close.c: undef the macros "getpeername", "getsockname" and
- "shutdown" to prevent infinite recursion.
-
-Sat Aug 7 18:37:39 2010 Tanaka Akira <akr@fsij.org>
-
- * missing/close.c: undef the macro "close" to prevent infinite
- recursion.
-
-Sat Aug 7 18:20:41 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_lchown): Pathname#lchown translated
- from pathname.rb.
-
-Sat Aug 7 17:49:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/missing.h: moved BROKEN_CLOSE replacements from
- include/ruby/ruby.h.
-
-Sat Aug 7 17:40:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb, lib/rbconfig/obsolete.rb: warn obsolete and
- deprecated Config.
-
-Sat Aug 7 17:18:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extract_makefile): follow the change of
- install-rb-default line format at r28850, which causes second
- run to create dummy makefiles.
-
-Sat Aug 7 14:08:44 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/mkmf.rb: change instance variable to global.
-
-Sat Aug 7 13:59:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/pathname/pathname.c (path_sub_ext): don't clobber shared string.
- [ruby-core:31640]
-
-Sat Aug 7 13:33:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (vm_call0): fix for VM_METHOD_TYPE_NOTIMPLEMENTED.
- [ruby-dev:41953]
-
-Sat Aug 7 09:47:06 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: fix checking version of GCC.
-
-Sat Aug 7 09:31:48 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (Init_pathname): fix number of arguments for
- Pathname#chown.
-
-Sat Aug 7 09:28:12 2010 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/envutil.rb (assert_normal_exit): use assert. fix
- faildesc.
-
- * test/pathname/test_pathname.rb (test_lchmod): test Pathname#lchmod
- using assert_normal_exit.
-
-Sat Aug 7 08:26:26 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_chown): Pathname#chown translated
- from pathname.rb.
-
-Sat Aug 7 02:09:04 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_lchmod): Pathname#lchmod translated
- from pathname.rb.
-
-Fri Aug 6 21:30:06 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_chmod): Pathname#chmod translated from
- pathname.rb.
-
-Fri Aug 6 20:13:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * rational.c (nurat_div): divided by infinity should be zero.
-
- * rational.c (nurat_div): divided by float zero should be
- infinity. [ruby-core:31626]
-
-Fri Aug 6 18:59:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (realpath_rec): rb_str_modify depends on the length, so
- resize instead.
-
-Fri Aug 6 18:56:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (clean-ext): fixed directories to be removed.
-
-Fri Aug 6 17:42:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/depend: add space at the beginning of @ignore_error.
-
- * lib/mkmf.rb: ditto.
-
-Fri Aug 6 17:38:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk (clean): add prelude.c, config.log, and rbconfig.rb.
-
- * common.mk (distclean): remove encdb.h, config.log, and rbconfig.rb.
-
-Fri Aug 6 17:35:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * Makefile.in: ignore error from RMDIRS.
-
- * enc/depend: ditto.
-
- * lib/mkmf.rb: ditto.
-
-Fri Aug 6 05:53:32 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_mtime): Pathname#mtime translated from
- pathname.rb.
-
-Thu Aug 5 22:09:30 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_ctime): Pathname#ctime translated from
- pathname.rb.
-
-Thu Aug 5 21:20:31 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (NODE_ARGSCAT, NODE_ARGSPUSH): drop unused ARGSCAT
- results when poped is true. [ruby-dev:41933], [Bug #3658]
- This is retry of r28870 and r28873 which were reverted.
-
-Thu Aug 5 20:13:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * README.EXT, README.EXT.ja (String functions): mention
- rb_str_resize and rb_str_set_len.
-
-Thu Aug 5 19:59:55 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_set_len): bail out when buffer overflowed
- probably.
-
-Thu Aug 5 18:36:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * complex.c (nucomp_marshal_load): should check the argument.
- [ruby-core:31622]
-
- * rational.c (nurat_marshal_load): ditto
-
- * marshal.c (w_float): should not append a dot if no fractal part
- exists. [ruby-dev:41936]
-
-Thu Aug 5 17:11:43 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (void_expr_gen): add 'possibly' to warning message.
- [ruby-core:31611]
-
-Thu Aug 5 16:57:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (glob_make_pattern): fold continuous PLAINs to get rid of
- snail at too deep path. [ruby-dev:41871]
-
-Thu Aug 5 16:42:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_set_len): should fail to modify shared string.
-
-Thu Aug 5 14:12:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_init_loadpath_safe): ensure sopath to be modifiable
-
-Thu Aug 5 12:39:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_make_independent_expand): fix buffer overflow
- while shrinking.
-
-Thu Aug 5 06:42:31 2010 Tanaka Akira <akr@fsij.org>
-
- * file.c (realpath_rec): call rb_str_modify before rb_str_set_len.
-
-Wed Aug 4 19:37:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_set_len): rb_str_modify cannot work before the
- length is set, which is a precondition for rb_str_modify.
-
-Wed Aug 4 15:47:21 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): no need to create the directory
- at each library file. this change makes making ext faster.
-
-Wed Aug 4 06:25:04 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_atime): Pathname#atime translated from
- pathname.rb.
-
-Tue Aug 3 21:16:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (Init_Random): add Random::DEFAULT.
-
-Tue Aug 3 21:01:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (rb_check_hash_type): added.
-
-Tue Aug 3 20:30:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_eq): never equal to infinity.
- [ruby-core:31603]
-
- * rational.c (nurat_div): hack for integral float divisor.
-
-Tue Aug 3 14:42:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/extmk.rb: remove purelib, fixes a bug in r28440, r28441.
-
- * spec/default.mspec: ditto.
-
- * template/Doxyfile.tmpl: ditto.
-
-Tue Aug 3 14:19:42 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/rdoc/ri/driver.rb (setup_pager): no need to check the existence
- of pagers. the following code checks whether they are executable or
- not.
-
-Tue Aug 3 12:03:57 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * tool/runruby.rb: no purelib.
-
-Tue Aug 3 07:52:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/purelib.rb: no longer used since the default load path of
- miniruby is empty.
-
-Tue Aug 3 00:53:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def, vm_core.h: fixed typo. reported by Rocky Bernstein
- <rockyb AT rubyforge.org> at [ruby-core:31596].
-
-Mon Aug 2 21:51:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_init_loadpath_safe): rb_str_set_len modifies ptr
- since r26303.
-
-Mon Aug 2 21:16:03 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: NONAMELESSUNION defined only if gcc
- version is older than 3.4.4. [ruby-core:31567] [Bug #3637]
- * ext/win32ole/extconf.rb: ditto.
-
-Mon Aug 2 16:34:32 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (native_thread_join): need to wait thread, of course.
- [ruby-dev:41911]
-
-Mon Aug 2 12:22:22 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (file_expand_path): wrong condition. [ruby-core:31591]
-
-Mon Aug 2 05:34:48 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_realdirpath): Pathname#realdirpath
- translated from pathname.rb.
-
-Sun Aug 1 23:04:49 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/pp.rb: describe superclasses explicitly.
-
-Sun Aug 1 23:04:35 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_modify_expand, rb_str_resize): get rid of
- repeating malloc and realloc.
-
-Sun Aug 1 22:16:30 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_hash): use rb_memhash and
- take care of negative finite numbers properly.
- [ruby-core:31582][Bug #3640]
-
-Sun Aug 1 20:57:22 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_realpath): Pathname#realpath translated
- from pathname.rb.
-
-Sun Aug 1 17:27:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub: needs stddef.h for size_t. a patch from
- Akio Tajima at [ruby-dev:41905].
-
-Sun Aug 1 14:59:04 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_sub_ext): Pathname#sub_ext translated
- from pathname.rb.
-
-Sun Aug 1 10:23:48 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/irb/init.rb (IRB.parse_opts): set VERBOSE to true when debug
- switch called in irb. a patch from Andrew Grimm in
- [ruby-core:31558].
-
-Sun Aug 1 09:35:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c (big_op): comparison of bignum and infinity has returned 1
- or -1, but it must return boolean.
-
-Sun Aug 1 09:44:25 2010 Tanaka Akira <akr@fsij.org>
-
- * class.c (rb_include_module): don't clear the method cache if the
- included module has no method.
- reported by Eric Wong. [ruby-core:31559]
-
-Sun Aug 1 09:21:32 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_sub): Pathname#sub translated
- from pathname.rb.
-
-Sun Aug 1 09:12:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/win32.h: latest x86_64 mingw defines stati64.
- [ruby-core:27516]
-
-Sun Aug 1 08:51:52 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: fix typo. [ruby-core:31564][Bug #3636]
-
-Sat Jul 31 23:15:27 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_inspect): Pathname#inspect translated
- from pathname.rb.
-
-Sat Jul 31 15:50:03 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (Init_pathname): The alias,
- Pathname#to_path, is translated from pathname.rb.
-
-Sat Jul 31 09:12:36 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_to_s): Pathname#to_s translated
- from pathname.rb.
-
-Sat Jul 31 08:20:07 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/webrick/ssl.rb (WEBrick::Utils.create_self_signed_cert):
- merged r28784 from ruby_1_8: wrongly created dummy SSL certificate
- with version == 3 (no such version) and serial == 0 (must be >0).
-
-Fri Jul 30 21:43:55 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_hash): Pathname#hash translated
- from pathname.rb.
-
-Fri Jul 30 12:42:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/net/imap.rb (example): use IO#noecho to read password if
- possible, and defer until needed. [ruby-dev:41889]
-
- * lib/net/imap.rb (example): support starttls option.
- [ruby-dev:41888]
-
-Fri Jul 30 08:51:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): home directory must be absolute.
- [ruby-core:31537]
-
-Fri Jul 30 08:33:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): should check if could find user.
- [ruby-core:31538]
-
-Fri Jul 30 07:59:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_add_suffix): fixed a bug returning uninitialized
- value.
-
-Fri Jul 30 07:48:04 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: use TK_XINCLUDES on tkConfig.sh when not empty,
- even if MacOS X Aqua version [ruby-dev:41883].
-
-Thu Jul 29 22:28:35 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_cmp): Pathname#<=> translated
- from pathname.rb.
-
-Thu Jul 29 06:51:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (EXT_SRCS): add ext/json/parser/parser.c.
-
-Thu Jul 29 05:52:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_basename): pass baselen to rmext.
-
-Thu Jul 29 02:38:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in: not [freebsd] but [freebsd*] for AS_CASE.
-
-Wed Jul 28 22:23:59 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_eq): Pathname#{==,===,eql?} translated
- from pathname.rb.
-
-Wed Jul 28 19:37:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): VC6 or later have stddef.h.
-
- * include/ruby/missing.h: need to include stddef.h for size_t.
-
- * include/ruby/missing.h: shouldn't declare as dllimport when building
- ruby itself (for Windows).
-
-Wed Jul 28 17:11:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing/*.c: include missing.h
-
-Wed Jul 28 09:38:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * cont.c: typos.
-
-Wed Jul 28 09:24:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * cont.c: (RB_PAGE_SIZE): renamed from PAGE_SIZE. [ruby-dev:41870]
-
- * cont.c: (RB_PAGE_MASK): renamed from PAGE_MASK.
-
-Tue Jul 27 23:09:09 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_taint): use rb_obj_taint.
- (path_untaint): Pathname#untaint translated from
- pathname.rb.
-
-Tue Jul 27 18:59:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (have_framework): added.
-
-Tue Jul 27 18:33:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * defines.h, intern.h, missing.h, ruby.h, st.h, util.h: include
- config.h and defines.h for autoconf macros.
-
-Tue Jul 27 16:27:38 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (flo_cmp): typo.
-
-Tue Jul 27 16:09:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * class.c, compile.c, dir.c, file.c, iseq.c, parse.y, random.c:
- clean unused-value warnings.
-
- * cont.c, process.c, vm_exec.h: clean cast warnings.
-
-Mon Jul 26 22:34:37 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_taint): Pathname#taint translated from
- pathname.rb.
-
-Mon Jul 26 18:18:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (config.h): add include guard.
-
- * win32/Makefile.sub, bcc32/Makefile.sub (config.h): ditto.
-
-Mon Jul 26 14:38:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (XCFLAGS): missing.h needs config.h.
-
-Mon Jul 26 14:08:47 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/missing.h: revert a part of r28727. config.h is expected
- to include only once, before including defines.h.
- including it here breaks some macro definitions.
-
-Mon Jul 26 13:52:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in: define BROKEN_CLOSE only on FreeBSD.
- This needs to merge to 1.9.2.
-
-Mon Jul 26 13:01:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (rb_thread_mark): should mark iseq itself other than normal
- iseq. [ruby-dev:41880]
-
-Mon Jul 26 11:51:01 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in: define BROKEN_CLOSE on FreeBSD.
- This fixes build failure on MSVC. [ruby-core:31481]
-
- * include/ruby/ruby.h, include/ruby/missing.h:
- use BROKEN_CLOSE for replacing close(2).
-
-Mon Jul 26 09:51:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (rb_thread_mark): mark only self of normal iseqs, not
- nodes. [ruby-dev:41874]
-
-Sun Jul 25 05:37:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_cmp): honor the result of infinite? method of the
- other. [ruby-core:31470]
-
- * test/ruby/envutil.rb (EnvUtil#.suppress_warning): added.
-
- * test/ruby/test_float.rb (TestFloat#test_Float): suppress
- warnings under --verbose.
-
-Fri Jul 23 16:07:32 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/mutex_m.rb (sleep): added Mutex_m#sleep to support
- ConditionVariable.
-
-Fri Jul 23 15:09:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_MINGW32): ignore msvc suffix.
-
- * configure.in (RUBY_TRY_CFLAGS): try with werror turned on.
-
-Fri Jul 23 09:02:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_reg_expr_str): fixed out-of-boundary access at invalid
- multibyte characters.
-
-Fri Jul 23 09:00:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (XCFLAGS): reverted mistakenly removed option.
- [ruby-dev:41872]
-
- * include/ruby/missing.h: needs ruby/config.h.
-
-Thu Jul 22 20:58:55 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_EXTERN): unnecessary after all.
-
-Thu Jul 22 17:33:47 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * complex.c (nucomp_to_i): allow complex with imaginary zero to be
- converted.
-
- * complex.c (nucomp_to_f, nucomp_to_r): ditto.
-
-Thu Jul 22 20:12:56 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread_pthread.c (get_stack): fix memory leak; pthread_attr_destroy
- must be called even when pthread_getattr_np is used.
- [ruby-core:31269]
-
-Thu Jul 22 16:27:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_expr_str): fix broken Regexp#inspect when it
- is ASCII-8BIT and non-ASCII character.
- The length of character should be from original byte string.
- [ruby-core:31431]
-
-Thu Jul 22 14:30:17 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/missing.h: add prototype for ruby_close().
-
-Thu Jul 22 12:58:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_EXTERN): ignore invalid attribute.
-
- * configure.in: fix for older autoconf.
-
-Thu Jul 22 12:02:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/{intern,io}.h: add missing prototypes.
-
-Thu Jul 22 06:38:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (XCFLAGS): use -fvisibility=hidden if possible.
-
- * configure.in (RMDIR): use --ignore-fail-on-non-empty if possible.
-
- * configure.in (RUBY_EXTERN): FUNCTION-BODY was missing.
-
-Thu Jul 22 03:02:55 2010 Eric Hodel <drbrain@segment7.net>
-
- * README.EXT: fix signature of rb_ensure and rb_rescue to match
- implementation.
-
-Wed Jul 21 23:07:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * template/fake.rb.in: get rid of embedding an absolute path.
-
-Wed Jul 21 15:22:17 2010 Evan Phoenix <evan@fallingsnow.net>
-
- * lib/rubygems/custom_require.rb, gem_prelude.rb: Load code from
- from gems properly.
-
-Wed Jul 21 15:15:02 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * sprintf.c: add short documentation about named reference.
- [ruby-core:31294]
-
-Wed Jul 21 15:00:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (local_push_gen): disable unused variable warnings in
- eval. [ruby-dev:41869]
-
-Wed Jul 21 13:57:37 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vm_method.c (rb_method_boundp): revert r28543, r28564.
- They may be merged in Ruby 2.0. [ruby-core:31217]
-
-Wed Jul 21 13:37:35 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/uri/common.rb: Have URI#route_to, URI#route_from accept
- string-like arguments [ruby-core:30961]
-
- * lib/uri/generic.rb: ditto for URI.join, URI#merge
-
-Wed Jul 21 12:39:15 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/cmath.rb (CMath#cbrt): cbrt should accept a negative real
- numbers. [ruby-core:31234]
-
-Wed Jul 21 12:31:30 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/uri/common.rb: Have URI() and URI.join accept URI objects in
- addition to strings. [ruby-core:30960]
-
-Wed Jul 21 11:55:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_hdtoa): renamed from BSD__hdtoa.
-
-Tue Jul 20 11:35:11 2010 Evan Phoenix <evan@ruby-lang.org>
-
- * lib/rubygems.rb: Load the custom require if --disable-rubygems
- was used.
-
-Tue Jul 20 11:27:18 2010 Evan Phoenix <evan@ruby-lang.org>
-
- * gem_prelude.rb: Pull in rubygem's custom require
-
- * lib/rubygems.rb: Handle always having custom require available
-
-Tue Jul 20 18:39:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (RSTRING_GETMEM): new macro to get ptr and
- len at once.
-
- * string.c (rb_str_cmp, str_eql, rb_str_eql): trivial improvements.
-
-Tue Jul 20 18:23:04 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/fiddle/closure.c (closure_data_type),
- ext/fiddle/function.c (function_data_type): rb_data_type_t has
- changed.
-
-Tue Jul 20 14:21:38 2010 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c: don't call after_gc_sweep() after when garbage_collect()
- was called, because rb_sweep_method_entry() free live unlinked
- method entries. [ruby-core:31169]
-
-Tue Jul 20 12:42:06 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * ext/socket/raddrinfo.c (rb_getaddrinfo): according to my
- valgrind output this variable should be initialized beforehand.
-
-Tue Jul 20 12:50:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_flush_buffer): write and buffer operations should be
- monolithic. [ruby-core:31348]
-
-Tue Jul 20 12:27:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/fileutils.rb (FileUtils::Entry_#copy): check file name
- separator boundary. [ruby-core:31360]
-
-Mon Jul 19 18:34:12 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (get_strpath): check the type.
- (path_initialize): bypass to_path call for T_STRING.
- (path_freeze): implemented.
-
- * ext/pathname/lib/pathname.rb (Pathname#freeze): removed.
-
-Mon Jul 19 12:33:29 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_clear): should not unshare embedded array, and
- should make unshared array embedded.
-
-Mon Jul 19 09:00:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * NEWS (Kernel#instance_eval): add an incompatible change since
- the 1.9.1 release. [ruby-core:31336]
-
-Mon Jul 19 05:46:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (rb_data_type_t): add new feature macros.
-
-Sun Jul 18 21:20:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_clear): no need to duplicate buffer just before
- clearing.
-
-Sun Jul 18 16:31:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (rb_data_type_t): restructured. [ruby-dev:41862]
- add parent member.
-
- * error.c (rb_typeddata_inherited_p): new function.
-
-Sun Jul 18 01:09:27 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/pathname.c (path_initialize): return a value.
-
-Sun Jul 18 00:02:19 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/lib/pathname.rb (Pathname#initialize): removed.
-
- * ext/pathname/pathname.c (path_initialize): implemented.
- (get_strpath): new function.
- (set_strpath): ditto.
-
-Sat Jul 17 19:01:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (MiniTest::Unit#process_args): refactored.
-
-Sat Jul 17 18:30:05 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/file2lastrev.rb: don't depend on pathname.rb if File.realpath
- is available.
-
-Sat Jul 17 14:10:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_add_suffix): fixed type warnings.
-
-Sat Jul 17 13:48:22 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pathname/lib/pathname.rb: moved from lib/pathname.rb.
- require pathname.so.
-
- * ext/pathname/pathname.c: new file to define empty Pathname class.
-
- * ext/pathname/extconf.rb: new file.
-
-Sat Jul 17 13:04:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_wakeup_alive): split from rb_thread_wakeup.
- merged from r13476. c.f. [ruby-core:31320]
-
-Sat Jul 17 10:07:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb: MiniTest::Unit is different class from
- Test::Unit, and install runner before loading test/minitest.
-
-Fri Jul 16 14:58:38 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit.setup_argv): run tests only when
- any tests have not run.
-
- * bin/testrb, test/runner.rb: use Test::Unit.start.
-
-Fri Jul 16 12:06:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/rbinstall.rb (ext-arch): prune directories start with '-'.
-
-Thu Jul 15 21:43:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * numeric.c (fix_divide): must not use rb_rational_new1 for coercion
- because it returns an argument itself when canonical mode is set.
- [ruby-core:31279]
-
-Thu Jul 15 21:38:31 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * proc.c (bm_free): fix memory leak. [ruby-core:30869] [Bug #3466]
-
-Thu Jul 15 15:47:32 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regexec.c (onig_search): don't skip non-ANYCHARs when
- .* fails to match. This causes to fail matching
- ANYCHAR_STAR with LOOK_BEHIND. This fix is workaround
- and disable the optimization. [ruby-dev:41851]
-
-Thu Jul 15 06:11:29 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/rdoc/markup/attribute_manager.rb: fixing ri output when special
- characters are inside html tags. Thanks Tomo Kazahaya! [Bug #3512]
-
-Thu Jul 15 06:01:42 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (guess_local_offset): use the UTC offset of an older date on
- 64bit time_t environment.
-
-Thu Jul 15 02:42:51 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/test/unit.rb (setup_argv): convert to using optparse, adding
- --help and -I. [ruby-core:30154]
-
-Thu Jul 15 00:35:09 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (localtime_with_gmtoff_zone): renamed from
- localtime_with_gmtoff and return the timezone abbreviation name.
- (guess_local_offset): return the isdst and timezone abbreviation name.
- (localtimew): use the returned isdst and timezone abbreviation name.
- [ruby-core:31275]
-
-Wed Jul 14 20:23:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (frame_func_id), vm_eval.c (rb_iterate),
- vm_insnhelper.c (vm_yield_with_cfunc): as the name of a C-level
- block, use the current method ID at the creation point.
- [ruby-dev:41852]
-
-Wed Jul 14 18:18:05 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regexec.c (match_at): add end point to enclen's argument.
- This only effect on compiling with -DONIG_DEBUG_MATCH.
-
-Tue Jul 13 21:34:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/readline/readline.c: libedit is missing declaration of
- rl_getc.
-
-Tue Jul 13 21:31:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_daemon): split from proc_daemon.
-
- * process.c (rb_fork_err): suppress gcc 4.4 warnings.
-
- * random.c (fill_random_seed): ditto.
-
-Tue Jul 13 21:01:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/pty/pty.c (establishShell): chfunc must not raise any
- exceptions.
-
-Tue Jul 13 20:58:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_DEFAULT_ARCH): adjust for target
- cpu. [ruby-core:31243]
-
-Tue Jul 13 20:46:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/handle.c (rb_dlhandle_close): should not pass a dynamic
- string to rb_raise directly.
-
-Tue Jul 13 12:04:57 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * missing/close.c: keep original errno.
-
-Mon Jul 12 01:58:56 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/csv.rb: Fix unused variable warnings.
- Patch by Run Paint [ruby-core:30991]
-
- * lib/date.rb: ditto
-
- * lib/debug.rb: ditto
-
- * lib/drb/drb.rb: ditto
-
- * lib/drb/invokemethod.rb: ditto
-
- * lib/irb/ruby-lex.rb: ditto
-
- * lib/irb/slex.rb: ditto
-
- * lib/logger.rb: ditto
-
- * lib/pathname.rb: ditto
-
-Sun Jul 11 21:20:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * README.EXT{,.ja} (rb_block_call): fixed about third/fourth
- arguments to the block. based on [ruby-core:31192] by Asher
- Haig. [Bug #3558]
-
-Sun Jul 11 17:01:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in ({,dist-,real-}clean-ext): should also omit
- semicolon when omitting "in WORDS" of FOR-statement.
-
- * tool/rmdirs: ditto.
-
-Sun Jul 11 11:07:42 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/rdoc/test_rdoc_ri_driver.rb (test_formatter): add a test. a
- patch from caleb clausen in [ruby-core:31182].
-
-Sat Jul 10 21:43:11 2010 Tanaka Akira <akr@fsij.org>
-
- * strftime.c (rb_strftime_with_timespec): fix precision handling for
- %:z and %::z.
-
-Fri Jul 9 22:32:54 2010 Tanaka Akira <akr@fsij.org>
-
- * strftime.c: unused declarations removed.
-
-Fri Jul 9 21:20:22 2010 Tanaka Akira <akr@fsij.org>
-
- * strftime.c (rb_strftime_with_timespec): clear colons at unknown
- directive.
-
-Fri Jul 9 21:04:10 2010 Tanaka Akira <akr@fsij.org>
-
- * strftime.c: don't call tzset. strftime.c doesn't depend on
- the global timezone.
-
-Fri Jul 9 20:30:26 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (find_time_t): 24:00 should be the beginning of the next
- day even if the leap second, 23:59:60, exists.
-
-Fri Jul 9 01:08:46 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/emitter.rb (initialize): line_width is
- a valid option passed to the emitter.
-
- * test/psych/test_psych.rb: corresponding tests.
-
-Fri Jul 9 00:49:46 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/emitter.c (line_width, set_line_width): preferred line may
- be set on the emitter.
-
- * test/psych/test_emitter.rb: corresponding tests.
-
-Thu Jul 8 15:47:34 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_conv_enc_opts): fix infinite loop because
- of ISO-2022-JP conversion with empty string.
- patched by Brian Buchanan [ruby-core:31107]
-
-Thu Jul 8 08:16:57 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb (push): adding version
- and header emit options.
-
- * test/psych/test_psych.rb: corresponding test.
-
-Thu Jul 8 08:01:03 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/emitter.c: updating documentation about emit options
-
- * ext/psych/lib/psych/core_ext.rb: ditto
-
- * ext/psych/lib/psych.rb (dump): passing emit options to emitter.
-
- * ext/psych/lib/psych/nodes/node.rb: ditto
-
- * ext/psych/lib/psych/visitors/emitter.rb: sending emit options to
- YAML emitter. [ruby-core:28318]
-
-Thu Jul 8 06:05:58 2010 Tanaka Akira <akr@fsij.org>
-
- * strftime.c (rb_strftime_with_timespec): support %:z and %::z.
- [ruby-dev:41841]
-
-Thu Jul 8 00:15:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * gem_prelude.rb: provide workaround for gem activation. Currently,
- gem activation does not work by default. Now it can be worked
- around by requiring "rubygems" first. [ruby-core:29486]
- a patch from Evan Phoenix in [ruby-core:31096].
-
- * lib/rubygems.rb: ditto.
-
-Wed Jul 7 10:01:34 2010 Adrian Bloomer <adrian.bloomer@gmail.com>
-
- * numeric.c (fix_rev): Replaced fix_rev with '~num | FIXNUM_FLAG'.
-
-Wed Jul 7 13:22:20 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (ruby_find_basename): set correct baselen.
-
-Wed Jul 7 13:02:59 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * vm_method.c (rb_method_boundp): respond_to?(:protected_method,
- true) should return true. Pointed out by Marc-Andre Lafortune.
- [ruby-dev:41837]
-
-Wed Jul 7 12:00:24 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (ruby_find_basename): should initialize f.
-
-Wed Jul 7 11:44:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/zlib/zlib.c (gzfile_raise): add invalid header to
- exceptions.
-
-Wed Jul 7 10:26:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * missing/close.c: ignore ECONNRESET.
- FreeBSD wrongly sets ECONNRESET on close(2) and
- it causes false-negative exceptions. [ruby-dev:41778]
-
- * configure.in: ditto.
-Tue Jul 6 22:57:21 2010 Tanaka Akira <akr@fsij.org>
-
- * io.c (nogvl_copy_stream_sendfile): jump to retry_sendfile directly
- to avoid select() on a socket which TCP state is CLOSED.
- patch by Eric Wong. [ruby-core:31053]
-
-Tue Jul 6 21:45:34 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io/console/console.c (winsize_row): should return actual screen
- size, not buffer size.
-
-Tue Jul 6 08:35:58 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/dl/lib/dl/import.rb (handler): add a more helpful error message
- when calling import_symbol or import_function without calling
- dlload. Thanks nobu! [ruby-core:30996]
-
-Tue Jul 6 00:34:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm.c (thread_free): free altstack to prevent memory leak. a patch
- from Tomoyuki Chikanaga in [ruby-dev:41815]. [Bug #3537]
-
-Tue Jul 6 00:29:27 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * string.c (NONASCII_MASK): NONASCII_MASK must be unsigned.
- [ruby-dev:41782]
-
-Mon Jul 5 16:05:39 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * vm_method.c (rb_method_boundp): Return false for protected
- methods when called from Kernel#respond_to?. [ruby-dev:40461]
-
-Mon Jul 5 12:32:01 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/scalar_scanner.rb (parse_string): support
- timezones that are not one hour off. [ruby-core:31023]
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb: ditto
-
-Sun Jul 4 22:49:54 2010 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_syntax.rb: split test_syntax from test_system.rb.
-
-Sun Jul 4 22:02:02 2010 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_system.rb (test_syntax): unified with test_syntax2.
-
-Sun Jul 4 21:00:39 2010 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_system.rb (test_syntax2): moved from sample/test.rb
- [ruby-dev:41721]
-
-Sun Jul 4 17:13:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (swallow, prepare_getline_args, rb_io_getline_1): fix for
- paragraph mode reading in non-ascii-compatible encoding.
- [ruby-dev:41803]
-
-Sat Jul 3 16:14:10 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (Init_bigdecimal): add two new constants
- BigDecimal::INFINITY and BigDecimal::NAN.
-
- * ext/bigdecimal/lib/bigdecimal/math.rb (BigMath.exp): modify the
- behaviors for infinity arguments as same as Math.exp.
-
-Sat Jul 3 09:47:26 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/to_ruby.rb(visit_Psych_Nodes_Scalar):
- teaching Psych to deserialize DateTime objects. [Bug #1390]
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb(visit_DateTime): added a
- method for serializing DateTime objects.
-
- * ext/psych/lib/psych/scalar_scanner.rb(parse_time): add method for
- parsing times objects from a string.
-
- * test/psych/test_date_time.rb: tests for dumping DateTime objects.
-
-Sat Jul 3 09:13:55 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb (visit_Time): use
- Time#nsec to accurately serialize time objects. [ruby-core:29233]
-
-Fri Jul 2 23:30:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (argf_inplace_mode_set): prohibits an assignment of a tainted
- value.
-
- * file.c (ruby_find_basename, ruby_find_extname): split from
- rb_file_s_basename() and rb_file_s_extname().
-
- * util.c (ruby_add_suffix): support arbitrary length of the suffix
- to get rid of the potential buffer overflow.
- reported by tarui.
-
-Fri Jul 2 05:31:51 2010 Tanaka Akira <akr@fsij.org>
-
- * numeric.c (rb_num2long): accept LONG_MAX < x < LONG_MAX+1 and
- LONG_MIN-1 < x < LONG_MIN as well because they are converted
- into the valid range of long by truncation.
- (rb_num2ulong): accept ULONG_MAX < x < ULONG_MAX+1 and
- LONG_MIN-1 < x < LONG_MIN as well.
- (rb_num2ll): accept LLONG_MAX < x < LLONG_MAX+1 and
- LLONG_MIN-1 < x < LLONG_MIN.
-
-Thu Jul 1 23:10:25 2010 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Improving documentation.
-
-Thu Jul 1 22:15:01 2010 Tanaka Akira <akr@fsij.org>
-
- * numeric.c (rb_num2ulong): fix the lower limit for float.
- [ruby-dev:41361]
-
-Thu Jul 1 21:37:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/envutil.rb (EnvUtil#invoke_ruby): integrated with
- runexec.
-
-Thu Jul 1 16:19:53 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * thread_pthread.c (thread_start_func_1): don't call
- native_thread_init_stack(th) on cygwin to avoid the segv
- introduced by r27789. Cygwin's signal implementation is half
- baked so USE_SIGNALSTACK is not defined and it needs another
- treatment.
-
-Thu Jul 1 13:00:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (test-knownbug): ignore known bugs.
-
-Thu Jul 1 08:40:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_object): suppress empty instance variable entry on
- compatible dump objects.
-
-Wed Jun 30 07:29:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_rubyoptions.rb (test_script_from_stdin): by using
- a pipe, get rid of not-well-defined behavior after the child
- process terminated in pty.
-
-Wed Jun 30 02:30:26 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * thread_pthread.c (get_stack): use pthread_getthrds_np() for AIX.
-
- * configure.in: ditto.
-
-Tue Jun 29 21:11:15 2010 Masaya Tarui <tarui@ruby-lnag.org>
-
- * ext/stringio/stringio.c (strio_write): add RB_GC_GUARD.
-
-Tue Jun 29 19:39:59 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_win32ole_method.rb (is_ruby64): check
- ruby binary is mswin64 or mingw64. [ruby-dev:41756]
-
-Tue Jun 29 14:18:21 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (rb_realpath_internal, realpath_rec): skip UNC share root
- on DOSISH platforms.
- http://pc12.2ch.net/test/read.cgi/tech/1272248179/600
-
-Tue Jun 29 11:52:33 2010 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c (unlink_heap_slot, slot_sweep): unlink heaps_slot of
- heaps_slot linked list if heaps_slot is empty at slot_sweep.
- fixed [ruby-dev:41543], [ruby-core:24894].
-
-Tue Jun 29 01:22:08 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/fiddle/fiddle.h: added FFI type detection to avoid bug in ffi
- header files. Thanks Yugui! [ruby-core:30917]
-
-Mon Jun 28 22:14:22 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/rdoc/test_rdoc_ri_driver.rb (TestRDocRIDriver#test_formatter):
- fix a test accordingly to r28455.
-
-Mon Jun 28 21:56:14 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (rb_fd_resize, rb_fd_copy): avoid NULL dereference upon
- failed realloc by using xrealloc instead of not realloc. a patch
- from Jim Meyering <meyering at redhat.com> in [ruby-core:30920]
- [Bug #3489]
-
-Mon Jun 28 20:32:33 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_win32ole_method.rb (test_offset_vtbl): check
- that Ruby is 32bit or 64bit binary in order to get correct offset
- value. [ruby-dev:41741]
-
-Mon Jun 28 05:32:51 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/rdoc/ri/driver.rb (RDoc::RI::Driver#formatter): should use bs
- format when stdout is piped. [ruby-core:30734]
-
-Mon Jun 28 03:12:03 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bootstraptest/test_class.rb: add a test for [ruby-core:30843].
-
-Mon Jun 28 02:43:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * class.c (rb_mod_init_copy): when class is dup'ed, a metaclass of the
- class should be attached to the dup'ed class, not the original
- class. [ruby-core:30843] [Bug #3461]
-
-Sun Jun 27 23:31:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/io.h, io.c: reverted r21709.
-
- * ruby.c (load_file_internal): nothing to read if EOF reached
- while reading shebang. [ruby-core:30910]
-
-Sun Jun 27 13:25:07 2010 Tanaka Akira <akr@fsij.org>
-
- * io.c (simple_sendfile): don't try to send data more than SSIZE_MAX
- with single sendfile call..
- based on the patch by Eric Wong. [ruby-core:30908]
-
-Sun Jun 27 10:41:38 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems/require_paths_builder.rb (write_require_paths_file_if_needed):
- no reason that bin directory should be included in $LOAD_PATH.
- it is for executable files, but not libraries. [ruby-core:25936]
-
-Sat Jun 26 13:07:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (enable-debug-env): option for RUBY_DEBUG env.
-
-Sat Jun 26 11:56:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (clear-installed-list): put redirection before set
- command, since it seems to be handled by nmake in special way.
- [ruby-dev:41711]
-
-Sat Jun 26 10:08:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/envutil.rb (EnvUtil#invoke_ruby): no needs to copy the
- original ENV, since it's done in spawn automatically.
- [ruby-dev:41733]
-
-Sat Jun 26 08:44:22 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * NEWS (zlib): new methods. [ruby-dev:41706] [Bug #3472]
-
-Sat Jun 26 07:59:18 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_win32ole_method.rb (test_offset_vtbl): check
- that OS is Windows 32bit or Windows 64bit in order to get
- correct offset value.
-
-Sat Jun 26 04:39:12 2010 Masaya Tarui <tarui@ruby-lnag.org>
-
- * ext/dl/lib/dl/func.rb (call): don't overwrite original arguments
- to defend from GC.
- * test/dl/test_func.rb (test_string): add test for above.
-
-Fri Jun 25 11:45:36 2010 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Fixing a bug that prevented CSV from parsing
- all multi-line fields correctly. Patch by Rob Biedenharn.
-
-Fri Jun 25 10:07:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/envutil.rb (Test::Unit::Assertions#assert_in_out_err):
- return the exit status.
-
- * test/ruby/envutil.rb (EnvUtil#invoke_ruby): change the
- environment of spawned process only.
-
- * test/ruby/envutil.rb (EnvUtil#invoke_ruby): get rid of possible
- deadlock.
-
-Fri Jun 25 06:24:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/un.rb (httpd): MaxClients also should be integer.
- [ruby-dev:41724] [Bug #3477]
-
- * lib/un.rb (setup): fix of word splitting. [ruby-dev:41723]
- [Bug #3476]
-
-Fri Jun 25 01:07:17 2010 Masaya Tarui <tarui@ruby-lnag.org>
-
- * include/ruby/ruby.h (static inline rb_gc_guarded_ptr): prevent
- RB_GC_GUARD_PTR being removed by optimization.
-
-Thu Jun 24 06:22:27 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (ruby_getaddrinfo__darwin): the workaround
- for Mac OS X moved from rsock_getaddrinfo.
-
-Thu Jun 24 05:44:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (struct dump_arg, struct load_arg): merge taint and
- untrust flags into infection as bit flags.
-
- * marshal.c (w_nbyte, clear_dump_arg): infect the buffer as soon
- as appending, because it might have been finalized already at
- exit. based on a patch by Tomoyuki Chikanaga
- at [ruby-dev:41672]. [Bug #3463]
-
-Wed Jun 23 23:49:21 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (str_is_number): renamed from str_isnumber to
- avoid confusion to str_isnumber in ext/socket/getaddrinfo.c.
-
-Wed Jun 23 23:45:31 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * NEWS (stringio): new methods. [ruby-dev:41687] [Bug #3469]
-
-Wed Jun 23 22:52:00 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c: don't use __P.
-
-Wed Jun 23 21:32:08 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (reg_get_typelib_file_path): try win64
- registry entry at first. [ruby-dev:41674] [Bug #3464]
-
-Wed Jun 23 21:17:32 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (ruby_getaddrinfo__darwin): new workaround for
- getaddrinfo problem on Mac OS X Snow Leopard. [ruby-core:29427]
- patch by Wataru Kimura. [ruby-core:30842]
-
-Wed Jun 23 17:12:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * NEWS (ptr): new method and deprecated methods. [ruby-dev:41681]
-
- * ext/pty/{README,README.ja}: ditto.
-
- * ext/pty/pty.c (pty_check): add rdoc.
-
-Wed Jun 23 12:44:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_regexp.rb (test_dup_warn): read in UTF-8
- encoding regardless environment.
-
- * test/ruby/envutil.rb (invoke_ruby): add encoding option.
-
-Wed Jun 23 06:44:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (fchown): need to check. a patch by Eric Wong
- at [ruby-core:30818].
-
- * io.c (argf_next_argv): check for setting owner/group.
-
-Tue Jun 22 23:10:10 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (num_exact): fix for mathn. [ruby-dev:41599]
-
-Tue Jun 22 22:00:06 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb: suppress warnings.
-
-Tue Jun 22 21:33:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/optparse/test_summary.rb: fixed superclass so that it run
- solely.
-
-Tue Jun 22 19:57:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (shadowing_lvar_gen): should add lvar to vars and
- used. [ruby-dev:41666]
-
-Tue Jun 22 13:23:13 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/delegate.rb: Forward #trust, #untrust, #taint and #untaint
- to both the delegator and __getobj__ [ruby-core:26138]
-
-Mon Jun 21 23:41:08 2010 wanabe <s.wanabe@gmail.com>
-
- * eval_error.c (error_print): clear raised_flag while error-printing
- to avoid hang. [ruby-core:27608]
-
- * test/ruby/test_beginendblock.rb (test_endblock_raise): add test for
- above.
-
-Sun Jun 20 16:17:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * id.c (Init_id): add underscore name.
-
- * parse.y (warn_unused_var): ignore underscore name.
-
- * parse.y (warn_unused_var): use same format as shadowing local
- variable.
-
- * parse.y (shadowing_lvar_gen): get rid of adding extra name for
- shadowing local variable. [ruby-dev:41628]
-
-Sat Jun 19 11:11:37 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb.rb: remove double exclamation marks. a patch from Diego
- Viola. [ruby-core:30589]
-
-Sat Jun 19 03:35:58 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/to_ruby.rb (resolve_klass): fix the
- exception message when attempting to load an unknown class. Thanks
- nobu! [ruby-dev:41399]
-
- * test/psych/test_psych.rb: test for the exception message
-
-Fri Jun 18 10:37:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * gc.c (gc_lazy_sweep): clean a warning.
- "suggest parentheses around assignment used as truth value"
-
- * transcode_data.h (getGB4bt1): clean a warning.
- "suggest parentheses around arithmetic in operand of |"
-
- * transcode_data.h (getGB4bt3): ditto.
-
- * vm.c (thread_free): clean a warning. "format 'p' expects type
- 'void *', but argument 3 has type 'struct rb_mutex_struct *'"
-
-Fri Jun 18 10:15:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ruby.c: add prototype of rb_realpath_internal.
-
- * load.c: ditto.
-
-Fri Jun 18 01:50:21 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * object.c: Object#public_methods, private_methods, etc. returns
- method ids that belong to the class or the singleton class(es) of
- the object. [ruby-dev:41613]
-
- * class.c: on the other hand, Module#public_instance_methods, etc.
- returns method ids that belong to the module itself (even if the
- module is singleton, it does not return method ids of super
- class(es); see [ruby-core:28837]).
-
-Fri Jun 18 01:22:55 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/webrick/httpservlet/filehandler.rb
- (prevent_directory_traversal): apply filesystem encoding to path
- only during calling File.expand_path. [ruby-dev:41423]
-
-Thu Jun 17 23:20:14 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * load.c (rb_load_internal): remove call to rb_realpath_internal
- within rb_load_internal which caused big performance degradation.
- Instead, call rb_realpath_internal in the caller of
- rb_load_internal. [ruby-dev:41502] [ruby-dev:41610]
-
- * vm.c (rb_vm_call_cfunc): ditto.
-
- * eval_intern.h (rb_vm_call_cfunc): ditto.
-
- * ruby.c (process_options): ditto.
-
-Thu Jun 17 18:37:47 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (rb_str_encode_ospath): when the encoding of the parameter
- is ASCII-8BIT, should recognize as filesystem encoding, and convert
- to UTF-8 on Windows.
-
- * file.c (realpath_rec): should convert to ospath encoding before
- calling lstat().
-
- * file.c (rb_realpath_internal): resolved string should take over
- the encoding of base string.
-
- * transcode.c (rb_str_encode): should return new string always.
- fixed #3444.
-
-Wed Jun 16 18:34:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y: ripper needs warn_unused_var(), too.
-
-Wed Jun 16 18:20:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (warn_unused_var): warn unused variables.
- [ruby-dev:41620]
-
-Wed Jun 16 15:40:53 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * error.c (rb_bug): existence of _set_abort_behavior() depends on
- runtime version, not compiler version.
-
-Wed Jun 16 01:38:40 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/fiddle/extconf.rb: check ffi.h even when pkg-config succeeded.
- On Debian/lenny, which is a "supported" platform, ffi.h is installed
- in /usr/include/i486-linux-gnu/. This causes build error when using
- gcc whose target is not i486-linux-gnu.
-
-Wed Jun 16 00:04:38 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_io.rb (safe_4): does not use Timeout because
- Timeout.timeout uses Thread#kill which raises SecurityError when
- $SAFE == 4. based on a patch from Tomoyuki Chikanaga.
- [ruby-dev:41484]
-
- * test/ruby/test_io.rb (test_print_separators): use pipe (test helper
- method) instead of IO.pipe. [ruby-dev:41484]
-
-Tue Jun 15 17:14:58 2010 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/fiddle/extconf.rb: De Morgan's laws.
-
-Tue Jun 15 12:09:00 2010 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/fiddle/extconf.rb: use pkg_config to find ffi.h.
-
-Tue Jun 15 02:31:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, common.mk (clean-ext, clean-enc): clean up cleaning
- targets.
-
-Mon Jun 14 22:36:09 2010 Tanaka Akira <akr@fsij.org>
-
- * test/socket/test_socket.rb (test_udp_server): rescue Errno::ENOSYS
- for Windows.
-
- * test/socket/test_nonblock.rb (test_sendmsg_nonblock_error): ditto.
-
- [ruby-dev:41597] reported by Masaya Tarui.
-
-Mon Jun 14 17:44:39 2010 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: raise DRbConnError instead of ArgumentError if too
- many arguments. [ruby-dev:41481]
-
- * test/drb/test_drb.rb: ditto.
-
- * test/drb/drbtest.rb: ditto.
-
-Mon Jun 14 04:03:55 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/fiddle/closure.c (dealloc): refix workaround r28300.
- don't use ffi_closure_alloc, ffi_prep_closure_loc and
- ffi_closure_free on MACOSX and __linux__.
- [ruby-dev:41483] [ruby-dev:41214]
-
-Sun Jun 13 15:46:07 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_rubyoptions.rb: add a simple test for __END__ and
- DATA.
-
-Sun Jun 13 04:24:18 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/delegate.rb: Delegate !=, eql? and hash [ruby-core:26139]
-
-Sun Jun 13 02:12:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/utf8_mac.trans (buf_apply): fix for patterns
- whose result is 2 bytes. [ruby-core:30751]
-
-Sun Jun 13 01:38:17 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * time.c (rb_localtime_r2): fix mixed declarations and code.
-
-Sun Jun 13 00:27:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/dl/lib/dl.rb: don't require when already loaded.
-
-Sun Jun 13 00:02:56 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/fiddle/closure.c (dealloc): workaround fix for libffi's
- ffi_closure_free. [ruby-dev:41483] [ruby-dev:41214]
-
-Sat Jun 12 10:02:26 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_syscall): should check argument string taint before
- invoking system calls.
-
-Sat Jun 12 09:18:31 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (uninitialized_constant): process through
- rb_class_real() to remove "Object::" from error message.
- [ruby-dev:40951]
-
-Sat Jun 12 00:38:37 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/dbm/extconf.rb: accept Berkley DB version 3, 4 and 5.
- a patch from Takahiro Kambe. [ruby-dev:41531]
-
-Fri Jun 11 23:21:35 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (init_leap_second_info): check the result of
- gmtime_with_leapsecond.
-
-Fri Jun 11 23:04:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/openssl/ossl_ssl.c (ossl_sslctx_get_ciphers):
- use sk_SSL_CIPHER_num and sk_SSL_CIPHER_value instead of cast.
- patched by Takahiro Kambe [ruby-dev:41530]
-
-Fri Jun 11 22:59:31 2010 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/missing.h (isnan): fix compilation error on OpenBSD.
-
-Fri Jun 11 22:39:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/rubygems/install_update_options.rb
- (Gem::InstallUpdateOptions#add_install_update_options): deprecate
- --test option which has not worked. [ruby-core:21714]
-
- * test/rubygems/test_gem_command_manager.rb: ditto.
-
-Fri Jun 11 07:34:25 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (find_time_t): test the result of LOCALTIME.
-
-Fri Jun 11 00:42:45 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (rb_localtime_r2): fix localtime overflow check.
-
-Thu Jun 10 23:05:44 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (rb_localtime_r2): refine localtime overflow check for
- FreeBSD 6.4.
-
-Thu Jun 10 09:10:08 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_putc): documentation updated to mention putc would
- not work well with multi-byte characters. [ruby-core:30697]
-
- * io.c (rb_f_putc): ditto.
-
-Wed Jun 9 22:51:50 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (find_time_t): always extrapolate from past.
- [ruby-core:30672] reported by Benoit Daloze.
-
-Wed Jun 9 22:13:08 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (calc_tm_yday): extracted from timegmw_noleapsecond.
-
-Tue Jun 8 06:27:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gem_prelude.rb: load full rubygems at LoadError for activation
- check. [ruby-core:29486]
-
-Tue Jun 8 06:04:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (parse_mode_enc): set set_by_bom bit. [ruby-core:30641]
-
-Sun Jun 6 22:37:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_buf_cat_escaped_char): get rid of buffer
- overflow on platforms int is bigger than 32bit, and warnings.
-
-Sun Jun 6 19:55:21 2010 Tanaka Akira <akr@fsij.org>
-
- * array.c (rb_ary_product): clear uninitialized elements in temporary
- array.
-
-Sun Jun 6 12:31:57 2010 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c: set_heaps_increment is not
- called before gc_marks of lazy sweeping because live_num not
- contain finalize objects. So call set_heaps_increment after lazy
- sweeping if free_num are not enough. And move free_min to struct
- rb_objspace for above. [ruby-dev:41499]
-
-Sun Jun 6 10:44:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_product): need to set the length in order to get
- the entries marked. [ruby-dev:41540]
-
-Sun Jun 6 08:26:01 2010 Tanaka Akira <akr@fsij.org>
-
- * vm.c (Init_BareVM): call Init_native_thread here.
-
- * thread.c (Init_Thread): don't call Init_native_thread.
-
- * thread_pthread.c (Init_native_thread): exported.
-
- * thread_win32.c (Init_native_thread): ditto.
-
- [ruby-dev:41536]
-
-Sun Jun 6 08:21:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * NEWS: Enumerable#join has been reverted. [ruby-core:30604]
-
-Sat Jun 5 20:30:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_expr_str): ASCII incompatible strings
- must always escape or converted.
-
- * re.c (rb_reg_expr_str): use rb_str_buf_cat_escaped_char
- when resenc is given: for Regexp#inspect or error message.
-
- * re.c (rb_reg_desc): add 'n' for ENCODING_NONE.
-
-Sat Jun 5 01:20:14 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (sym_inspect): Escape when the symbol is not
- resulted encoding and not ascii_only. It had escaped
- ascii-incompatible string, but it is wrong.
-
-Sat Jun 5 01:10:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_buf_cat_escaped_char): defined.
- Splited from rb_str_inspect.
-
-Sat Jun 5 16:39:13 2010 Tanaka Akira <akr@fsij.org>
-
- * .gdbinit (rp): show type name for RTypedData.
-
-Sat Jun 5 15:59:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options, load_file_internal): $0 seen from
- required libraries by -r option should be the main script.
- [ruby-core:23717]
-
-Sat Jun 5 15:15:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/envutil.rb (EnvUtil#invoke_ruby): support for child
- process env.
-
-Sat Jun 5 14:11:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/net/imap/test_imap.rb (test_exception_during_shutdown):
- need to raise always.
-
-Sat Jun 5 13:13:30 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb (eql?, ==, minor): Fix bugs when comparing/returning
- some empty matrices.
-
-Sat Jun 5 11:00:48 2010 Tanaka Akira <akr@fsij.org>
-
- * error.c (rb_name_err_mesg_new): guard mesg, recv and method.
- The problem in [ruby-dev:41464] is caused because mesg is collected.
-
-Sat Jun 5 10:03:31 2010 Tanaka Akira <akr@fsij.org>
-
- * .gdbinit (rp): detect and show RTypedData.
-
-Sat Jun 5 08:30:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_f_test): 'W' should test writable by real uid/git,
- not world writable. [ruby-core:30587]
-
-Sat Jun 5 06:20:57 2010 Eric Hodel <drbrain@segment7.net>
-
- * dir.c: Clarification of what '*' matches. Patch by John Wells
- <john.wells at greatworx.com>
-
-Fri Jun 4 10:46:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/cfunc.c (rb_dlcfunc_inspect): should taint the result.
- [ruby-dev:41533]
-
-Fri Jun 4 09:37:15 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * gc.c (gc_sweep): suppress a warning on VC, again.
-
-Thu Jun 3 23:34:55 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/lib/digest/hmac.rb: Emit a deprecation warning in
- verbose mode and add a caution to the overview section of the
- document. [ruby-dev:41525]
-
-Thu Jun 3 19:33:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/cfunc.c (rb_dlcfunc_inspect): suppress warnings by
- rb_sprintf.
-
- * ext/dl/cptr.c (rb_dlptr_s_malloc): suppress warnings.
-
-Thu Jun 3 18:58:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (ruby_init_ext): statically linked extensions have no
- real path. [ruby-dev:41526]
-
- * vm.c (rb_vm_call_cfunc): add filepath argument.
-
-Thu Jun 3 18:17:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/rake/test_win32.rb (Rake::TestWin32): update tests.
- [ruby-core:30309]
-
- * test/io/nonblock/test_flush.rb (test_flush): try pipe and
- socketpair. [ruby-dev:41517]
-
-Thu Jun 3 09:36:43 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/dl.h (DLSTACK_TYPE): type of stack is same as VALUE.
- reported by sakiyama shin in [ruby-dev:41514]
-
-Thu Jun 3 06:30:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_path.rb (test_path): workaround for drive
- letter.
-
- * test/ruby/test_path.rb (test_path): get rid of blocking on
- access to non-existent host.
-
-Thu Jun 3 05:37:46 2010 Ryan Davis <ryand-ruby@zenspider.com>
-
- * tool/rbinstall.rb (install-bin): Allow bin/* install from dot-dirs.
- Fixes rvm and multiruby installations.
-
-Thu Jun 3 01:22:45 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: fix typo and race condition.
-
-Thu Jun 3 00:58:45 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/dl/lib/dl/cparser.rb (parse_ctype): add backwards compatibility
- by supporting "uint" types in the c parser. [ruby-core:29750]
- * test/dl/test_cparser.rb: adding a test for "uint" changes.
-
-Wed Jun 2 11:40:02 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * compile.c (iseq_compile_each): should consider block on stack,
- if block argument is passed. [ruby-core:30534]
-
- * parse.c (arg_concat_gen): should append to nd_head, not to
- nd_iter for NODE_BLOCK_PASS.
-
-Tue Jun 1 23:12:06 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (unescape_nonascii): \P{FOO} is also Unicode property in
- regexp. [ruby-core:30540]
-
-Tue Jun 1 21:29:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb: adding support to rfc5789 patch verb.
- Added a Net::HTTP::Patch class which expects a message body
- and response body. It recycles the post method into a patch one,
- that will send the encoded representation to the server.
- Summarizing, a new class has been created, the post method
- extracted into send_entity, including a new argument,
- which defines which class to use (Post or Patch) and
- finally a patch method was created. [ruby-core:30426]
- Patched by Guilherme Silveira
- <guilherme.silveira AT caelum.com.br>
-
-Tue Jun 1 03:46:08 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/readline/extconf.rb: reject GPLv3 readline. [ruby-dev:39172]
- [ruby-core:25272] [ruby-dev:39167] [ruby-core:28736]
-
-Tue Jun 1 01:14:31 2010 Masaya Tarui <tarui@ruby-lnag.org>
-
- * io.c (pipe_open): add RB_GC_GUARD.
- This caused failure when test/ruby/test_argf.rb is executed with
- GC.stress = true in mswin32_90
-
-Mon May 31 23:44:22 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: use tclConfig.sh/tkConfig.sh when frameworks
- are enabled on MacOS X.
-
- * ext/tk/stubs.c: dirty hack for frameworks and stubs on MacOS X.
-
- * ext/tk/lib/tk.rb: stop creating a dummy Tcl/Tk interpreter.
- And hide a root window before starting eventloop. (for ruby 1.9)
-
- * ext/tk/tcltklib.c: add codes to support Ruby/Tk-Kit (Rubykit).
-
-Mon May 31 21:49:42 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb (Resolv::DNS::Requester#request): rescue ECONNRESET
- for Windows. reported by U.Nakamura. [ruby-dev:41477]
-
-Mon May 31 19:25:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * regparse.c (onig_syntax_warn): do not use external strings as
- printf format.
-
-Mon May 31 18:22:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-mode-set-encoding): skip shebang line
- always regardless of ruby.
-
-Mon May 31 15:07:18 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * file.c (file_expand_path): Refix r28102: this breaks
- r28039. test for [ruby-dev:41429] is added. [ruby-core:30516]
-
-Mon May 31 14:47:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_inspect): inspect as ASCII when the codepoint
- of a character in Unicode string is ASCII printable one.
-
-Mon May 31 13:44:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_enc_unicode_p): check the encoding is Unicode
- or not by the name; not function's pointer. [ruby-dev:41479]
-
-Mon May 31 04:03:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): check if expanded dname encoding is
- compatible with fname, not just copying. [ruby-core:30516]
-
- * test/ruby/test_beginendblock.rb (test_endblockwarn): needs
- encoding comment.
-
-Mon May 31 02:17:54 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * insns.def (defined): respond_to_missing? may not be available
- (for BasicObject instances).
-
-Mon May 31 01:43:42 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/delegate: Delegator: combine (public|protected) methods with
- those of the delegated object. [ruby-core:27224]
- DelegateClass: combine (public|protected) instance methods
- with those of the delegated superclass.
-
-Sun May 30 22:18:49 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/set.rb (keep_if, select!): New methods [ruby-core:29749]
-
-Sun May 30 21:51:59 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/rake/test_application.rb: update a test because of r28089.
-
-Sun May 30 21:48:07 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/tempfile.rb (Tempfile#unlink): leave @data. Assigning nil to
- @data caused double closing error of the same IO in finalizer. a
- patch from Simon Nicholls. [ruby-core:29395]
-
-Sun May 30 18:47:15 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: updated to b856dd07.
- this cleans warnings.
-
-Sun May 30 18:25:55 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * load.c (load_failed): use more accurate error message.
- [ruby-core:23851]
-
-Sun May 30 16:54:34 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * file.c (rb_file_directory_p): update rdoc. a patch from Ilkka
- Laukkanen. [ruby-core:30016]
-
-Sun May 30 14:59:13 2010 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c (gc_mark_all_clear): don't call obj_free() in
- gc_mark_all_clear(), because obj_free() may make T_ZOMBIE
- objects.
-
- * gc.c (gc_clear_mark_on_sweep_slots): renamed.
-
- * gc.c (rb_objspace_call_finalizer): call
- gc_clear_mark_on_sweep_slots() before calling mark_tbl().
- [ruby-dev:41459]
-
-Sun May 30 03:40:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_tokadd_utf8, parser_tokadd_string): allow NUL
- containing symbol literals, as well as String#to_sym.
- [ruby-dev:41447]
-
-Sun May 30 03:03:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rdoc/generator/template/darkfish/classpage.rhtml:
- fix encoding value of XML declaration. [ruby-dev:41452]
-
-Sun May 30 02:20:26 2010 Masaya Tarui <tarui@ruby-lnag.org>
-
- * thread.c (RB_GC_SAVE_MACHINE_CONTEXT), gc.c (ruby_gc_stress_start):
- revert r28078.
-
-Sun May 30 02:21:34 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/zlib/zlib.c (zstream_append_input2): add RB_GC_GUARD.
- This caused failure when test/csv is executed with GC.stress = true.
-
-Sun May 30 01:25:48 2010 Masaya Tarui <tarui@ruby-lnag.org>
-
- * thread.c (RB_GC_SAVE_MACHINE_CONTEXT): start GC
- by switching the thread if gc_stress == true
-
- * gc.c (ruby_gc_stress_start): ditto.
-
-Sun May 30 00:02:39 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * gc.c (force_chain_object, rb_objspace_call_finalizer): delete
- finalizer entry after corresponding finalizer is executed.
- This caused SEGV when test/cgi is executed with GC.stress = true.
-
-Sat May 29 23:30:33 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * string.c (str_replace_shared): change embedded state atomically.
- [ruby-core:29953] [ruby-dev:41456]
-
-Sat May 29 12:56:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_filesystem_encindex): avoid infinite require
- loop. [ruby-core:30467]
-
-Sat May 29 12:05:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/rdoc.rb (RDoc#read_file_contents): take care of BOM.
- [ruby-dev:41452]
-
-Sat May 29 10:12:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (GC_PROF_TIMER_STOP): regularize `marked' to suppress
- warnings.
-
-Sat May 29 09:34:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/envutil.rb: fix for --disable-gems.
-
-Sat May 29 09:04:06 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb (Resolv::DNS::Requester#request): rescue ECONNREFUSED.
-
-Sat May 29 08:46:29 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (allocate_sorted_heaps, before_gc_sweep, gc_sweep): removed
- unused variables.
-
-Fri May 28 20:35:21 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * thread.c (blocking_region_begin): avoid RUBY_VM_CHECK_INTS()
- call during GVL state transition. [Bug#3354] [ruby-dev:41435]
-
-Fri May 28 19:37:47 2010 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c: use simple lazy sweep algorithm for response performance
- gain. See [ruby-dev:41067].
-
- * object.c: FL_MARK of some objects by lazy sweep is copied when
- RVALUE is cloned. These objects are not marked in the mark phase.
- So delete FL_MARK.
-
- * class.c: ditto.
-
-Fri May 28 18:39:38 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (sym_inspect): escape ASCII-compatible strings.
-
- * string.c (rb_str_inspect): escape ASCII-compatible strings.
-
-Fri May 28 17:34:48 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * array.c (rb_ary_product): Use tmpary instead, to ensure marking
- arrays by GC.
-
-Fri May 28 11:40:07 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * array.c (rb_ary_product): Do not rely on GC, t0 should be
- checked explicitly.
-
-Fri May 28 10:40:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (checking_for): ignore toplevel.
-
-Fri May 28 00:47:16 2010 Masaya Tarui <tarui@ruby-lnag.org>
-
- * error.c (rb_bug): suppress the error report dialog if report_bug()
- is finished successfully.
-
-Fri May 28 00:32:25 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * insns.def (invokesuper): check consistency between class of self and
- class of method being invoked by super. This is temporary measure
- for YARV. See [ruby-core:30313] in detail. See [ruby-dev:40959]
- [ruby-dev:39772] [ruby-core:27000] [ruby-core:27230]
-
- * vm_insnhelper.c (vm_search_superclass): ditto.
-
-Thu May 27 23:38:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * file.c (rb_home_dir): set filesystem encoding.
-
-Thu May 27 23:29:18 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * file.c (file_expand_path): set encoding as the same of fname
- when _result_ is not filesystem encoding. [ruby-dev:41429]
-
-Thu May 27 23:07:45 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * file.c (file_expand_path): use rb_enc_associate_index and
- rb_filesystem_encindex. Strings related FileSystem should
- have filesystem_encoding.
-
- * file.c (SET_EXTERNAL_ENCODING): removed.
-
-Thu May 27 23:03:19 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/encoding.h (rb_filesystem_encindex): defined.
-
- * include/ruby/encoding.h (rb_locale_encindex): ditto.
-
- * encoding.c (rb_filesystem_encindex): remove static.
-
- * encoding.c (rb_locale_encindex): ditto.
-
-Thu May 27 22:34:27 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_read): call ReadFile() with len = 0 before
- reading really on console, because the first ReadFile() call after
- PeekConsoleInput() always returns broken data. (Windows's bug).
- [ruby-core:29018]
-
-Thu May 27 12:42:23 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * LGPL: Removed. We no longer have LGPL'd source files in our
- tree.
-
-Wed May 26 20:19:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (random_rand): add the result of random to the
- beginning of range, not the opposite. [ruby-dev:41415]
-
-Wed May 26 19:55:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (file_expand_path): revert a part of r22392. it's commit miss.
-
-Wed May 26 18:40:23 2010 Masaya Tarui <tarui@ruby-lang.org>
-
- * test/rinda/test_rinda.rb (TupleSpaceTest, TupleSpaceProxyTest):
- kill a used thread at teardown. [ruby-dev:41397]
-
-Wed May 26 12:08:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (random_rand): subtraction method of non-numeric can
- return Float. [ruby-dev:41410]
-
-Wed May 26 11:50:09 2010 Eric Hodel <drbrain@segment7.net>
-
- * marshal.c (Init_marshal): document marshal_dump and marshal_load.
-
-Wed May 26 10:35:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_cv_large_fd_select): needed on mingw, even
- though fd_mask is not available. [ruby-core:30401]
-
-Tue May 25 14:00:51 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regparse.c (add_code_range_to_buf0): fix false negative
- warning when given range is just before previous range.
- [ruby-dev:41406]
-
-Tue May 25 16:37:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-style.el (ruby-style-version): take revision if
- keyword is expanded. [ruby-dev:41408]
-
-Tue May 25 13:26:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/vm.h, include/ruby/encoding.h: add external
- linkage.
-
-Tue May 25 01:46:49 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_eval.c (rb_f_caller): update rdoc. a patch from Nobuhiro IMAI
- <nov at yo.rim.or.jp> in [ruby-dev:41387].
-
-Mon May 24 23:04:41 2010 Tanaka Akira <akr@fsij.org>
-
- * error.c: fix wrong exception class name in rdoc.
-
-Mon May 24 19:00:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (warn_balanced, parser_yylex): no warnings after closing
- parens.
-
-Mon May 24 12:52:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (change), tool/change_maker.rb: make a brief template
- for ChangeLog.
-
-Mon May 24 09:19:59 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * gc.c (gc_sweep): suppress a warning on VC.
-
-Mon May 24 08:16:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_f_spawn): use correct command name for the error
- message. [ruby-dev:41395]
-
-Sun May 23 17:48:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/lib/openssl/x509-internal.rb, lib/forwardable.rb,
- lib/irb/cmd/fork.rb, lib/mutex_m.rb,
- lib/shell/process-controller.rb, lib/sync.rb, object.c:
- suppress warnings patched by Benoit Daloze at [ruby-core:30366].
-
- * parse.y (warn_balanced): no warning for singleton class.
- [ruby-core:30366]
-
-Sun May 23 16:56:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (CONST_ID_CACHE, rb_intern_const): suppress
- warnings with -Wconversion.
-
-Sun May 23 07:08:34 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/json/stream.rb: adding a JSON streaming API
-
- * ext/psych/lib/psych/stream.rb: ditto
-
- * ext/psych/lib/psych.rb: using autoload
-
- * ext/psych/lib/psych/json.rb: ditto
-
- * ext/psych/lib/psych/json/tree_builder.rb: refactor
-
- * ext/psych/lib/psych/visitors/json_tree.rb: refactor
-
-Sat May 22 03:53:05 2010 Satoshi Shiba <shiba@rvm.jp>
-
- * cont.c (fiber_setcontext): Use swapcontext() instead longjmp().
- [ruby-dev:41316] [Bug #3295]
-
-Fri May 21 19:11:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/nkf/nkf.c (rb_nkf_convert, rb_nkf_guess): check too huge
- string.
-
-Fri May 21 18:12:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (rb_intern): C90 needs nonempty macro
- arguments.
-
-Fri May 21 13:55:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LIBRUBYARG_SHARED): shared library will not be
- created unless enable-shared.
-
- * ruby.c (ruby_init_loadpath_safe): use real path for non-shared
- build.
-
-Fri May 21 12:25:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_float): use dtoa directly instead of stripping
- needless trailing .0.
-
- * numeric.c (flo_to_s): reverted. [ruby-dev:41341]
-
-Fri May 21 01:06:05 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread.c (subtract_tv): if the rest is zero, should finish waiting
- immediately.
-
- * win32/win32.c (subtract): ditto.
- based on a patch from Roger Pack in [ruby-core:27957].
-
-Thu May 20 22:49:04 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * re.c (rb_reg_s_union_m): update rdoc. [ruby-dev:41354]
-
-Thu May 20 22:08:28 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_eval.c (rb_f_caller): update rdoc. a patch from Nobuhiro IMAI
- <nov at yo.rim.or.jp> in [ruby-dev:41348].
-
-Thu May 20 22:04:05 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm.c (vm_backtrace_each): now takes an init function to distinguish
- an empty stack from out of stack. [ruby-dev:41366]
-
- * vm_eval.c (print_backtrace, rb_thread_backtrace): ditto.
-
-Thu May 20 20:47:46 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_invoke): raise NoMethodError
- when COM method is not found. [ruby-core:30160] [Bug #3277]
-
- * test/win32ole/test_win32ole.rb (test_no_method_error): ditto.
-
-Thu May 20 16:17:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/psych/emitter: C99(gcc)-ism.
-
-Thu May 20 12:59:49 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/stream.rb: adding YAML streaming API for
- infinite length streams.
-
- * ext/psych/lib/psych.rb: refactoring for streaming API
-
- * ext/psych/lib/psych/{handler, stream, tree_builder}.rb: ditto
-
-Thu May 20 02:12:20 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/emitter.c: output strings are automatically transcoded
-
-Wed May 19 23:36:57 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: [ruby-dev:41334] [Bug #3307] invalid result
- on searching tcl.h/tk.h. Thanks, Masaya Tarui.
-
-Wed May 19 23:19:30 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (disconnect): closes the socket of a Net::IMAP
- object only when it is not closed. [ruby-dev:41350]
-
-Wed May 19 20:09:38 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_eval.c (rb_f_caller): return [] instead of nil when the function
- is called on toplevel. [ruby-dev:41348]
-
-Wed May 19 19:58:01 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/extconf.rb: mswin/mingw ruby has socketpair(), but it's
- not exist as such name in ruby static library, so mkmf.rb cannot
- find it.
-
-Wed May 19 19:45:10 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * iseq_compile_each (NODE_DEFINED): put nil first to fix stack
- consistency. [ruby-core:30293]
- Now, lfinish[0] of defined_expr seems not to be used. Refactoring
- may be needed.
-
-Wed May 19 16:55:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric.c (rb_num2ulong): use rb_big2ulong for data from
- Bignum. Without this 32bit integer on 32bit environment
- can't converted into long.
- This fixes 1) and 2) of [ruby-dev:41289]
-
-Mon May 17 22:19:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * process.c: suppress warning for signed and unsigned type
- inconsistency.
-
- * ext/psych/parser.c: ditto.
-
- * ext/sdbm/_sdbm.c: ditto.
-
- * ext/syck/rubyext.c: ditto.
-
-Mon May 17 21:30:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * .gitignore: updated.
-
-Mon May 17 21:08:53 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (argv_size): merged into join_argv() to maintain the
- agreement with it. removed code has a calculation bug.
- fixed [Bug#2388]
-
- * win32/win32.c (join_argv): calc and return the length of joined
- argv.
- the cause of the original bug was clarified by Masaya TARUI
- <tarui AT prx.jp> and the solution was suggested by him, too.
-
-Mon Apr 5 09:20:08 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/iso_2022_jp.h: add CP50220.
-
- * enc/trans/iso2022.trans: add converter for CP50220.
-
-Mon May 17 09:37:25 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/fileutils.rb (FileUtils::Entry_#entries): returns pathname in
- UTF-8 on Windows to allow FileUtils accessing all pathnames
- internally.
-
-Mon May 17 01:07:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (rb_w32_check_imported): workaround for VC6.
-
-Sun May 16 22:21:32 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * proc.c (mnew): initialize a field. a patch from Takahiro Kambe.
- [ruby-dev:41312]
-
-Sun May 16 22:17:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * eval.c (setup_exception): let SystemStackError#backtrace return an
- single element array instead of string itself. [ruby-core:30196]
-
-Sun May 16 21:51:04 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y (parser_read_escape, parser_tokadd_escape): allow a hex or
- octal encoded character after \c. This seemed to be prohibited at
- r13836, but its ChangeLog mentions nothing about this prohibition.
- So I assume this prohibition is not intended. [ruby-core:27229]
-
-Sun May 16 21:14:04 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * ruby/test_rubyoptions.rb (TestRubyOptions#test_segv_test):
- fixes "NoMethodError: undefined method `[]=' for nil:NilClass"
-
-Sun May 16 17:16:09 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * proc.c (proc_binding): don't propagate filename and line_no of
- binding that is created from C level. [ruby-dev:41322]
-
- * vm_eval.c (eval_string_with_cref): ditto.
-
-Sun May 16 15:09:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (rb_w32_check_imported): check if extension library to be
- loaded imports from different ruby dll.
-
-Sun May 16 14:55:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (dln_find.o): fix dependency.
-
-Sun May 16 13:55:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (rb_loaderror): use locale string, not ascii-8bit.
-
-Sun May 16 11:39:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/missing.h (signbit): add missing prototype.
-
-Sun May 16 10:49:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (rb_iconv_sys_fail): fix number of arguments.
- a patch by Masaya TARUI <tarui AT prx.jp>.
-
-Sun May 16 02:24:27 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * configure.in: can not load libruby.so if gcc is used with
- --enable-shared on AIX.
-
-Sat May 15 17:16:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (rb_iconv_sys_fail): raise BrokenLibrary if
- errno is not set. [ruby-dev:41317]
-
-Fri May 14 07:27:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_float): strip ".0" from end for rubyspec.
-
-Fri May 14 01:17:10 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_core.c (rb_thread_struct): add a field for sigaltstack.
-
- * thread_pthread.c (thread_start_func_1): initialize machine stack
- information.
-
- * thread.c (thread_start_func_2): set sigaltstack for each sub thread.
- [ruby-core:24540] [ruby-core:30207]
-
-Thu May 13 21:40:39 2010 Tanaka Akira <akr@fsij.org>
-
- * missing/ffs.c (ffs): fixed for non-zero values.
-
-Thu May 13 18:45:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/console/console.c (get_write_fd): return primary fd if no
- io is tied for writing.
-
-Thu May 13 18:15:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (swallow): should use more_char() instead of fill_cbuf().
- suggested by akr.
-
-Thu May 13 17:56:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/console/console.c (console_set_echo, console_echo_p): use
- primary fd. [ruby-dev:41309]
-
-Thu May 13 13:30:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_float): use minimal representation.
-
- * numeric.c (ruby_dbl2cstr): split from rb_float_new.
-
-Thu May 13 13:09:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (rb_vm_get_sourceline): moved from eval_intern.h for
- vm_dump.c.
-
-Thu May 13 12:53:13 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (swallow): support text mode and UTF-16/32 as internal encoding.
- [Bug #1576]
-
- * io.c (io_shift_cbuf): read and throw it away when str is NULL.
-
-Thu May 13 09:45:27 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub: link with ffs.obj.
-
-Thu May 13 07:37:49 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/sdbm/_sdbm.c: include unistd.h before sdbm.h for off_t.
- fix compilation problem on FreeBSD 6.4.
-
-Wed May 12 23:48:37 2010 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h (rb_quad_pack): deprecated.
- (rb_quad_unpack): ditto.
-
-Wed May 12 22:22:05 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (rb_big_abs_find_minbit): use ffs().
-
- * configure.in: check ffs().
-
- * missing/ffs.c: new file.
-
- * include/ruby/missing.h (ffs): declared.
-
-Wed May 12 16:43:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_to_s): fixed broken output including nuls.
-
-Wed May 12 16:25:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_to_s): exponent needs 2 digits.
-
-Wed May 12 16:02:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_to_s): fill lower zeros.
-
-Wed May 12 15:45:36 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/rdoc/generator/ri.rb (generate): should load existing cache
- before generating it.
-
-Wed May 12 15:04:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/lib/bigdecimal/math.rb (BigMath#log): improved
- precision and performance. [ruby-dev:41295]
-
-Wed May 12 11:39:10 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/extconf.rb: test all IPPROTO_* constants for recent Win32
- SDK.
-
-Wed May 12 10:57:04 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_to_s): make minimum string representation.
- [ruby-core:30145]
-
-Wed May 12 09:21:05 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_initialize_m): fix wrong index for the lang
- option's value 'N'. reported by Masaya TARUI via IRC.
-
-Tue May 11 23:07:22 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/extconf.rb: test IPPROTO_IP and IPPROTO_IPV6 constants.
-
- * ext/socket/mkconstants.rb: define macros for enum.
-
- [ruby-dev:38849]
-
-Tue May 11 21:53:18 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/rake/test_task_arguments.rb: makes ENV empty during tests
- because ENV may change the behavior of Rake::TaskArguments.
- [ruby-core:29984]
-
-Tue May 11 15:14:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/utf_8.c: Add new alias UTF-8-HFS for UTF8-MAC.
- http://www.gnu.org/software/emacs/NEWS.23.2
-
-Tue May 11 13:46:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/lib/bigdecimal/math.rb (atan),
- test/bigdecimal/test_bigmath.rb (test_atan): explicitly specify
- the precision for calculating a reciprocal number of an argument.
- [Bug #3267]
-
-Tue May 11 11:49:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/sdbm/sdbm.h (DBM): large file support on win32.
- [ruby-core:23039]
-
- * ext/sdbm/depend: objects depend on sdbm.h.
-
-Tue May 11 09:57:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_intern.h (rb_vm_get_sourceline): add prototype.
-
-Tue May 11 09:53:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/psych/parser.c (PSYCH_TRANSCODE): get rid of bare use of gcc
- extension.
-
-Tue May 11 01:20:43 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/parser.c (parse): Return strings encoded as
- Encoding.default_internal if set.
-
-Mon May 10 23:50:19 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c (pack_unpack): add a missing break.
-
-Mon May 10 14:13:04 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * time.c (rb_big_abs_find_minbit): get rid of a warning of VC.
-
-Mon May 10 13:59:42 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c, include/ruby/win32.h (rb_w32_has_cancel_io): new
- function.
-
- * io.c (WAIT_FD_IN_WIN32): check only when it's not cancelable.
-
-Mon May 10 06:59:19 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk (rdoc): rdoc should depend main. Moreover when XRUBY
- is miniruby, it can run after miniruby is built.
-
-Mon May 10 03:36:56 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_eval.c (eval_string_with_cref): propagate filename and line_no
- of binding. [ruby-dev:38767] [ruby-core:28307]
-
- * vm_core.h (rb_binding_t), proc.c: add filename and line_no fields to
- preserve them.
-
-Mon May 10 02:58:33 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (iseq_compile_each), vm_insnhelper.c (vm_invoke_block,
- vm_throw): allow "return" and "yield" even in singleton class
- definition. based on a patch from wanabe <s.wanabe AT gmail.com>
- for "return". [ruby-core:21379] [ruby-dev:40975]
-
- * insns.def (defineclass): ditto (straightforwardly push block ptr,
- instead of dfp ptr with special flag).
-
- * vm_core.h (RUBY_VM_CLASS_SPECIAL_P): ditto (no longer needed).
-
- * proc.c (proc_new): ditto (remove handling for special flag).
-
- * bootstraptest/test_jump.rb: add tests for above.
-
-Mon May 10 02:29:51 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * cont.c (fiber_switch): raise FiberError when returning to dead
- fiber. [ruby-dev:40833]
-
-Mon May 10 02:07:20 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/thread.rb (ConditionVariable#wait): ensure to remove the current
- thread from waiters. [ruby-core:29835]
-
-Mon May 10 00:54:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/console/console.c (console_set_raw): new method.
-
- * ext/io/console/console.c (ttymode): reverted previous commit.
-
-Sun May 9 23:53:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (RB_GC_GUARD_PTR): get rid of removal by
- optimization.
-
-Sun May 9 23:07:53 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * proc.c (proc_dup): copy blockprocval. proc_dup is used by
- define_method, which made blockprocval be GC'ed mistakenly.
- [ruby-core:30023]
-
-Sun May 9 16:28:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (fiber_initialize_machine_stack_context): try to release
- unnecessary fibers and retry to create. based on a patch from
- masaya tarui at [ruby-dev:41230].
-
-Sun May 9 08:32:56 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/generator/generator.c (fbuffer_inc_capa):
- fix the use of REALLOC_N. [ruby-dev:41227]
-
-Sun May 9 09:30:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/json/{generator/generator.c,parser/parser.rl}: fixed indent.
-
- * ext/json/{generator,parser}/depend: added.
-
-Sun May 9 09:15:03 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/net/imap/test_imap.rb: use IPv4 for
- test_imaps_post_connection_check. [ruby-dev:41189]
-
-Sun May 9 08:24:24 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (disconnect): terminates @receiver_thread even if
- @sock.shutdown raises an exception. [ruby-dev:34881]
-
-Sun May 9 06:15:21 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * io.c (nogvl_copy_stream_sendfile): ISO C90 forbids mixed
- declarations and code.
-
-Sun May 9 02:57:02 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/fiddle/lib/fiddle.rb: only require DL if it hasn't been required
- yet. [ruby-core:30095]
-
-Sun May 9 01:15:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (stackgrowdirection): removed duplicated code, use
- STACK_UPPER macro instead.
-
- * gc.h (STACK_DIR_UPPER): moved from thread_pthread.c.
-
-Sun May 9 00:35:56 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/dl/test_base.rb (libc_so, libm_so): supports solaris.
-
-Sat May 8 19:03:31 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * spec/default.mspec (config): . is no longer in $:.
-
-Sun May 9 00:27:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_aset): fixed argument type.
-
-Sat May 8 23:09:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * NEWS (io/console): IO#noecho and IO#raw without block are
- obsolete already. [ruby-dev:41226]
-
- * ext/io/console/console.c (ttymode): save duped file descriptors
- and restore tty modes using them, so that original modes can be
- restored even if original fds are closed. [ruby-dev:41225]
-
-Sat May 8 13:48:31 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * array.c (rb_ary_fetch, rb_ary_splice, rb_ary_store): Improve
- IndexError
- messages [ruby-core:28394]
-
- * hash.c (rb_hash_fetch_m): Improve KeyError message
-
-Sat May 8 13:11:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems/user_interaction.rb (Gem::StreamUI#ask_for_password):
- use io/console.
-
- * ext/io/console: imported. [ruby-dev:40897]
-
-Sat May 8 12:25:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/etc/etc.c (etc_systmpdir): moved from ext/tmpdir.
-
- * ext/etc/etc.c (etc_sysconfdir): added.
-
- * lib/rubygems/config_file.rb, lib/tmpdir.rb: use etc.
-
-Sat May 8 11:07:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (VpAlloc): ensure buf does not get
- collected. based on a patch masaya tarui at [ruby-dev:41213].
-
-Sat May 8 10:03:39 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (BasicSocket#connect_address): MacOS X 10.6
- returns "::ffff:a.b.c.d" for IPv4-mapped IPv6 address.
- [ruby-dev:41215] patch by Tomoyuki Chikanaga.
-
-Fri May 7 23:51:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * version.h: bump up to 1.9.3.
-
-Fri May 7 11:30:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/rbinstall.rb (install-man): install mdocs directly without
- temporary files. [ruby-dev:41204]
-
-Fri May 7 09:16:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tk/extconf.rb (get_tclConfig_dirs): glob with EXEEXT.
-
- * ext/tk/extconf.rb (search_tclConfig): fixed typo.
-
-Fri May 7 06:45:28 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: search directories on PATH, only if containing
- tclsh or wish command (probably right fix for [ruby-core:30010]).
-
-Fri May 7 03:40:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (VpCtoV): fix to check overflow.
-
-Thu May 6 22:19:38 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * cont.c: define FIBER_USE_NATIVE only when _WIN32_WINNT >= 0x0400
- on Windows because Fiber APIs are supported only such building
- (and running) environments.
- [ruby-dev:41192]
-
-Thu May 6 19:13:43 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/openssl/test_ec.rb: added test_dsa_sign_asn1_FIPS186_3. dgst is
- truncated with ec_key.group.order.size after openssl 0.9.8m for
- FIPS 186-3 compliance.
-
- WARNING: ruby-openssl aims to wrap an OpenSSL so when you're using
- openssl 0.9.8l or earlier version, EC.dsa_sign_asn1 raises
- OpenSSL::PKey::ECError as before and EC.dsa_verify_asn1 just returns
- false when you pass dgst longer than expected (no truncation
- performed).
-
- * ext/openssl/ossl_pkey_ec.c: rdoc typo fixed.
-
-Thu May 6 18:12:43 2010 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (fiber_setcontext): Fix last commit.
-
-Thu May 6 17:16:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (rb_localtime_r2): get rid of infinite loop bug of
- localtime() on x86_64-darwin. [ruby-core:30031]
-
-Thu May 6 15:56:12 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/fiddle/*: Adding fiddle library to wrap libffi
- * test/fiddle/*: testing fiddle extension
- * ext/dl/lib/dl.rb: Requiring fiddle if it is available
- * ext/dl/lib/dl/callback.rb: using Fiddle if it is available
- * ext/dl/lib/dl/func.rb: ditto
-
-Thu May 6 15:04:37 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_match_m): add description about optional
- position parameter. [ruby-list:47064]
- patched by KISHIMOTO, Makoto <ksmakoto AT dd.iij4u.or.jp>
-
-Thu May 6 14:12:39 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/tmpdir.rb: test RUBY_PLATFORM for loading tmpdir.so to avoid
- LoadError.
-
-Thu May 6 12:41:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * NEWS: add rationalize methods of Complex, Float, Integer, NilClass,
- and Rational classes.
-
-Thu May 6 12:12:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * README: update.
-
-Thu May 6 03:34:29 2010 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: apply FIBER_USE_NATIVE patch. This patch improve
- Fiber context switching cost using system APIs. Detail comments
- are written in cont.c.
-
-Thu May 6 02:16:48 2010 Koichi Sasada <ko1@atdot.net>
-
- * vm_method.c (rb_unlink_method_entry, rb_sweep_method_entry):
- added. Unlinked method entries are collected to
- vm->unlinked_method_entry_list. On the GC timing, mark all method
- entries which are on all living threads. Only non-marked method
- entries are collected. This hack prevents releasing living method
- entry.
- [Performance Consideration] Since this Method Entry GC (MEGC)
- doesn't occur frequently, MEGC will not be a performance bottleneck.
- However, to traverse living method entries, every control frame push
- needs to clear cfp->me field. This will be a performance issue
- (because pushing control frame is occurred frequently).
- Bug #2777 [ruby-dev:40457]
-
- * cont.c (fiber_init): init cfp->me.
-
- * gc.c (garbage_collect): kick rb_sweep_method_entry().
-
- * method.h (rb_method_entry_t): add a mark field.
-
- * vm.c (invoke_block_from_c): set passed me.
-
- * vm.c (rb_thread_mark): mark cfp->me.
-
- * vm_core.h (rb_thread_t): add a field passed_me.
-
- * vm_core.h (rb_vm_t): add a field unlinked_method_entry_list.
-
- * vm_insnhelper.c (vm_push_frame): clear cfp->me at all times.
-
- * vm_insnhelper.c (vm_call_bmethod): pass me.
-
- * bootstraptest/test_method.rb: add a test.
-
-Wed May 5 22:22:51 2010 wanabe <s.wanabe@gmail.com>
-
- * compile.c (iseq_set_sequence): fix check range of ic_index.
- a patch from Tomoyuki Chikanaga. #3236
-
-Wed May 5 21:49:31 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * dln.c (aix_loaderror): use execerror for load error on AIX.
- This can avoid SEGV reported by Perry Smith. [Bug #2063]
-
-Wed May 5 20:37:54 2010 wanabe <s.wanabe@gmail.com>
-
- * thread_win32.c (w32_wait_events): get GVL before handle interrupt
- event. [ruby-core:27199], [ruby-core:29698]
-
-Wed May 5 19:00:01 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: revert. enbugged by last commit.
- ([ruby-dev:41133], [ruby-dev:41134], [ruby-core:30010])
-
- * ext/tk/README.tcltklib: ditto.
-
-Wed May 5 15:54:35 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (rb_stat): use STAT macro instead of calling stat() directly.
- reported by Bill Kelly. [ruby-core:30012]
-
-Wed May 5 11:43:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bootstraptest/test_io.rb (megacontent-copy_stream): get rid of
- deadlock.
-
-Wed May 5 07:27:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_mark_method_entry): renamed.
-
-Wed May 5 05:20:27 2010 Koichi Sasada <ko1@atdot.net>
-
- * method.h, vm_method.c: rename some internal functions related to
- rb_method_entry_t.
- rb_add_method_me() -> rb_method_entry_set().
- rb_get_method_entry() -> rb_method_entry_without_cache().
- rb_gc_mark_method_entry() -> rb_mark_method_entry().
-
- * class.c, proc.c: ditto.
-
-Tue May 4 22:59:48 2010 wanabe <s.wanabe@gmail.com>
-
- * compile.c (iseq_build_body): update iseq->ic_size.
- a patch from Tomoyuki Chikanaga. see #3236.
-
-Tue May 4 18:51:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (name_err_mesg_to_str): preserve encoding of inspection.
- [ruby-core:29948]
-
-Tue May 4 18:38:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/fileutils/test_fileutils.rb (test_copy_stream):
- IO.copy_stream support binmode only currently.
- [ruby-core:23724]
-
-Tue May 4 12:46:09 2010 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (argument_error): push correct backtrace.
- Bug #2281 [ruby-core:26333]
-
-Tue May 4 12:38:40 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (sockopt_inspect): use rb_str_cat2 and
- rb_str_append.
-
- * ext/socket/ancdata.c (ancillary_inspect): refined.
-
-Tue May 4 11:48:06 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_inspect): use rb_str_cat2 and
- rb_str_append.
-
-Tue May 4 07:52:33 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/net/http.rb (Net::HTTPResponse#read_chunked): ensure to skip the
- last newline of chunk. [ruby-core:29229]
-
- * test/net/http/utils.rb: add an option for chunked response test.
-
- * test/net/http/test_http.rb: add tests for chunked response.
-
-Tue May 4 03:37:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: Update nkf 2010-04-28.
-
-Mon May 3 21:08:16 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * sample/README: update file list. [ruby-core:28981]
-
-Mon May 3 08:15:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/emitter.c (syck_scan_scalar): set SCAN_WHITEEDGE flag
- when scalar begins with newline. patches from Dave B <daz AT
- d10.karoo.co.uk> at [ruby-core:23019] and caleb clausen at
- [ruby-core:25851]. [ruby-core:23006][ruby-core:29925]
-
-Sun May 2 17:52:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/task.rb (RDoc::Task): should not override newer code.
-
-Sun May 2 17:25:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/cfunc.c (rb_dlcfunc_call): ignore signedness.
-
-Sun May 2 12:04:30 2010 wanabe <s.wanabe@gmail.com>
-
- * iseq.c (iseq_load): allow filepath to be nil.
- a patch from Tomoyuki Chikanaga in [Bug #3229].
-
-Sun May 2 08:54:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/cgi.rb (CGI::NEEDS_BINMODE): check if O_BINARY value instead
- of fragile check by platform name.
-
-Sun May 2 07:38:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (dir_config): should not modify argument arrays
- themselves.
-
-Sat May 1 22:53:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile#size): stat by path name when it is
- closed.
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
- keep the first trace.
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
- fixed filtering. [ruby-core:29908]
-
-Sat May 1 16:46:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_IsInfinite): don't use
- non-ascii character.
-
-Sat May 1 14:08:29 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/server.rb: Fix bug when serving gems.
-
-Sat May 1 14:05:36 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Upgrade to RDoc 2.5.8.
-
-Sat May 1 09:43:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
- filter out traces in minitest directory. [ruby-core:29908]
-
-Sat May 1 06:42:57 2010 wanabe <s.wanabe@gmail.com>
-
- * win32/win32.c: add declaration of wstati64 for gcc.
-
-Sat May 1 02:41:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * merge some patches from win32-unicode-test branch.
- see #1685.
-
- * file.c, include/ruby/intern.h (rb_str_encode_ospath): new function
- to convert encoding for pathname.
-
- * win32.c, include/ruby/win32.h (rb_w32_ulink, rb_w32_urename,
- rb_w32_ustati64, rb_w32_uopen, rb_w32_uutime, rb_w32_uchdir,
- rb_w32_umkdir, rb_w32_urmdir, rb_w32_uunlink): new functions to
- accept UTF-8 path.
-
- * win32/win32.c (rb_w32_opendir, link, rb_w32_stati64, rb_w32_utime,
- rb_w32_unlink): use WCHAR path internally.
-
- * file.c (rb_stat, eaccess, access_internal, rb_file_s_ftype,
- chmod_internal, rb_file_chmod, rb_file_chown, utime_internal,
- rb_file_s_link, unlink_internal, rb_file_s_rename): use UTF-8 version
- functions on Win32.
-
- * file.c (apply2files, rb_stat, rb_file_s_lstat, rb_file_symlink_p,
- rb_file_readable_p, rb_file_writable_p, rb_file_executable_p,
- check3rdbyte, rb_file_identical_p, rb_file_chmod, rb_file_chown,
- rb_file_s_link, rb_file_s_symlink, rb_file_s_rename): call
- rb_str_encode_ospath() before passing the path to system.
-
- * io.c (rb_sysopen): ditto.
-
- * dir.c (dir_chdir, dir_s_mkdir, dir_s_rmdir): ditto.
-
-Sat May 1 00:26:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
- assertion message must be String or Proc. suggested by caleb
- clausen at [ruby-core:29884].
-
-Sat May 1 00:14:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_io.rb: skip false tests on Windows.
- [ruby-core:29886]
-
-Fri Apr 30 22:46:27 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * math.c: Math::DomainError < StandardError [ruby-core:29855]
-
-Fri Apr 30 21:40:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/test_open3.rb (TestOpen3#test_commandline): use simple
- command via shell. [ruby-dev:41100]
-
-Fri Apr 30 15:38:45 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: better support for MinGW environment.
-
-Fri Apr 30 12:05:20 2010 Tanaka Akira <akr@fsij.org>
-
- * file.c (file_expand_path): call rb_str_set_len before BUFCHECK to
- prevent rb_str_resize in BUFCHECK discard the content.
-
-Fri Apr 30 11:48:31 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * string.c (rb_str_sub_bang): String#sub! now raises an error when
- called on a frozen string, even if no change is made.
- See [ruby-core:23657]
-
-Fri Apr 30 11:40:44 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * eval.c (make_exception, rb_obj_extend): Fix error messages in case
- of wrong
- number of arguments
-
- * file.c (rb_f_test, rb_file_s_umask): ditto
-
- * numeric.c (int_chr, num_step): ditto
-
- * process.c (rb_f_sleep): ditto
-
- * re.c (rb_reg_initialize_m): ditto
-
- * signal.c (rb_f_kill, sig_trap): ditto
-
- * string.c (rb_str_aref_m, rb_str_aset_m, rb_str_count,
- rb_str_delete_bang,
- rb_str_slice_bang, rb_str_sub_bang, str_gsub): ditto
-
- * proc.c (curry): rdoc fix
-
-Fri Apr 30 04:09:30 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * time.c (TIMET_MAX): should be time_t, not unsigned_time_t.
-
-Fri Apr 30 03:59:08 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * time.c (rb_time_unmagnify_to_float): should cast.
-
-Fri Apr 30 03:38:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (fix_mul): the width of fixnum is same as long's on all
- platforms.
-
-Fri Apr 30 03:17:20 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Improve algorithm for Matrix#determinant and
- Matrix#rank
- {determinant,det,rank}_e are now deprecated. [ruby-core:28273]
- Also fixes a bug in Determinant#rank (e.g. [[0,1][0,1][0,1]])
- Matrix#singular?, Matrix#regular? now raise on rectangular matrices
- and use determinant instead of rank.
-
-Fri Apr 30 00:52:56 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): define some constants to select
- collect code for win64.
-
-Thu Apr 29 20:10:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/test_open3.rb (test_commandline): use dump instead of
- shellwords. [ruby-core:23797]
-
-Thu Apr 29 18:39:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/thwait.rb (ThreadsWait#join): refined rdoc again.
- [ruby-core:29863] [ruby-dev:41092]
-
-Thu Apr 29 14:46:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby: use more descriptive assertions.
-
- * test/ruby: fixed nonsense assertions.
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
- reverted. [ruby-core:29872]
-
-Thu Apr 29 12:33:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/thwait.rb (ThreadsWait#join): refined rdoc. [ruby-core:29863]
-
-Thu Apr 29 12:16:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert): reject
- non-boolean values. [ruby-core:29868]
-
-Thu Apr 29 11:20:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (seek_before_access): renamed. see [ruby-core:29861].
-
- * io.c (rb_io_s_binread): fixed rdoc. parts of a patch from Roger
- Pack in [ruby-core:29861].
-
-Thu Apr 29 03:50:49 2010 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/xmlrpc/utils.rb: Fixing an incompatibility with
- reflection methods returning Symbols. Patch by
- HD Moore. [ruby-core:29821]
-
-Wed Apr 28 23:53:15 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/thwait.rb: revise rdoc. a patch from Roger Pack in
- [ruby-core:27362].
-
-Wed Apr 28 23:21:42 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json: Update to JSON 1.4.2.
-
-Wed Apr 28 22:53:57 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread. (rb_thread_terminate_all): revert r24591 which caused SEGV
- sometimes. [ruby-dev:40936] [ruby-core:27245] [ruby-core:27416]
-
-Wed Apr 28 22:26:55 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/psych/visitors/test_yaml_tree.rb (test_struct_const): remove
- Struct::Foo which affects test/ruby/test_struct to warn redefining
- constant.
-
-Wed Apr 28 18:04:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (time_timespec): use rb_check_funcall.
-
-Wed Apr 28 17:14:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/extconf.rb: CMSG_ macros are broken on 64bit darwin,
- because of use of __DARWIN_ALIGN.
-
-Wed Apr 28 16:44:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h ({RSTRING,RSTRUCT,RBIGNUM}_LENINT): check long
- to cast to int.
-
-Wed Apr 28 16:28:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/unixsocket.c (sendmsg_blocking, recvmsg_blocking):
- define only when used.
-
- * ext/socket/rubysocket.h: non-implemented method definitions need
- to be shared.
-
-Wed Apr 28 10:27:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vsnprintf.c (ruby_vsnprintf, ruby_snprintf): suppress warnings.
- why return int in spite of the arguments of size_t?
-
-Wed Apr 28 09:49:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/compile_prelude.rb: enable optimization.
-
-Wed Apr 28 09:43:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (warn_balanced): do not warn for EXPR_ENDFN.
-
-Tue Apr 27 23:57:04 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * eval.c (ruby_cleanup): add exception guard around code running
- signal handler (of r27513). Absence of the guard made
- bootstraptest/test_thread.rb fail sometimes.
-
-Tue Apr 27 22:55:29 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * insns.def (onceinlinecache): add exclusion control for a region
- between onceinlinecache and setinlinecache. [ruby-dev:39768]
-
-Tue Apr 27 22:40:54 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * iseq.c (set_relation): do not use top_wrapper as bottom of cref,
- which caused constant lookup error when "wrapped load" is used;
- instead, use Object as bottom, and push top_wrapper on Object.
- [ruby-core:25039]
-
-Tue Apr 27 21:24:40 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * eval.c (ruby_cleanup): before cleanup, check signal buffer and run
- handler if any. [ruby-core:20970]
-
- * thread.c (rb_threadptr_check_signal): separated from
- timer_thread_function.
-
-Tue Apr 27 18:00:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/net/smtp.rb (Net::SMTP#rcptto_list): fixed typo.
- [ruby-core:29809]
-
-Tue Apr 27 12:44:23 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Import RDoc 2.5.7. Fixes #1318 and ruby-core:29780.
-
-Tue Apr 27 10:54:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_read_escape): deny extra character escapes.
- [ruby-core:27228]
-
-Tue Apr 27 06:20:13 2010 Tanaka Akira <akr@fsij.org>
-
- * io.c (select_internal): IO which cbuf is not empty is readable.
-
-Tue Apr 27 00:07:32 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y (program): check void_expr when rb_parse_in_main().
- [ruby-dev:38717]
-
-Mon Apr 26 20:11:05 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c, rational.c, lib/cmath.rb, lib/date.rb lib/date/delta*:
- reverted r27484-27486. now official spec.
-
-Mon Apr 26 15:42:59 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/json/generator/generator.c (convert_UTF8_to_JSON_ASCII): get rid
- of a warning.
-
-Mon Apr 26 13:11:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (ripper_get_value): escape Qundef.
-
-Mon Apr 26 12:42:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (warn_balanced): warn according to last state.
-
-Mon Apr 26 09:05:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json: Update to JSON 1.4.1.
-
-Sun Apr 25 23:50:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (ruby_dup): update max fd.
-
-Sun Apr 25 21:56:49 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (fetch_internal): do not quote message data item
- names. Thanks, Eric Hodel. [ruby-core:23508]
-
-Sun Apr 25 15:59:02 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/cmath.rb: reverted experimental r23900.
-
-Sun Apr 25 15:51:00 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c, rational.c: reverted experimental r24565.
-
-Sun Apr 25 15:34:48 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/delta*: reverted experimental r24567 and
- r25393.
-
-Sun Apr 25 11:02:20 2010 wanabe <s.wanabe@gmail.com>
-
- * hash.c (ruby_setenv): putenv on msvcrt.dll can't remove empty value.
-
-Sat Apr 24 23:40:50 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/pp.rb: use [""].pack("p").size to detect the pointer size.
-
-Sat Apr 24 21:07:27 2010 Tanaka Akira <akr@fsij.org>
-
- * test/psych/test_psych.rb: don't leave temporary files.
-
-Sat Apr 24 16:27:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (RUBY_PROGRAM_VERSION): added
-
- * tool/rbinstall.rb: expand target file name.
-
- * template/fake.rb.in: no need for hook if extmk.
-
-Sat Apr 24 14:40:20 2010 Tanaka Akira <akr@fsij.org>
-
- * io.c: raise IOError when byte oriented operations occur with
- non-empty character buffer.
- [ruby-dev:40493] [ruby-dev:40506]
-
-Sat Apr 24 13:06:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (get_arglen): skip the last terminator of argv before
- checking environ.
-
- * ruby.c (get_arglen): duplicate environ area if setenv and unsetenv
- are provided.
-
- * ruby.c (set_arg0): keep empty strings.
-
-Sat Apr 24 09:44:40 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/yaml2byte.c (bytestring_append, bytestring_extend):
- removed wrong extra assignments. a patch from Marcus Rueckert
- <darix AT opensu.se> at [ruby-core:29759].
-
-Sat Apr 24 00:41:52 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * process.c (rb_f_fork): remove after_exec() which sometimes caused
- two timer threads started. [ruby-core:25217]
-
- * signal.c: use pthread_sigmask() instead of sigprocmask().
- sigprocmask() is unspecified behavior on multi-thread programs.
- [ruby-core:25217]
-
-Sat Apr 24 00:36:05 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/dl/test_base.rb: add kfreebsd support. based on a patch from
- Petr Salinger in [ruby-core:29769].
- http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=560293
-
-Sat Apr 24 00:14:41 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/ossl_ssl_session.c (SSL_SESSION_cmp): remove static for
- loopy version of openssl (0.9.8l?).
-
-Fri Apr 23 23:27:17 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_config.c: fix compilation failure with
- OpenSSL 0.9.8.
-
-Fri Apr 23 17:29:35 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/ossl_config.c: OpenSSL 1.0.0 support.
- [ruby-core:29256]
-
- * ext/openssl/extconf.rb: check some functions added/removed at
- OpenSSL 1.0.0.
-
- * ext/openssl/ossl_engine.c (ossl_engine_s_load): use engines which
- exists.
-
- * ext/openssl/ossl_ssl_session (SSL_SESSION_cmp): removed at 1.0.0,
- so implement compatible function here.
-
-Fri Apr 23 14:37:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gem_prelude.rb (Gem::QuickLoader.load_full_rubygems_library):
- get rid of creating same regexps many times.
-
- * lib/rubygems/custom_require.rb (Kernel#require): ditto.
-
-Fri Apr 23 14:07:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * doc/etc.rd, doc/etc.rd.ja: moved from ext/etc.
-
- * ext/etc.c (Init_etc): fixed rdoc.
-
-Fri Apr 23 11:31:25 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Update to RDoc 2.5.6.
-
-Fri Apr 23 04:11:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ripper/test_parser_events.rb (test_unterminated_regexp):
- separate test.
-
-Fri Apr 23 01:47:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_wopen): shouldn't use FILE_FLAG_OVERLAPPED with
- normal file. #1807, #2510, #2549
-
-Fri Apr 23 01:28:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (ubf_handle): remove unused typedef.
-
-Thu Apr 22 23:10:59 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * proc.c (mnew): fix wrong error message when Kernel#public_method
- receives name of private method. [Bug #2425]
-
-Thu Apr 22 22:56:42 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bootstraptest/test_thread.rb: fix test. [Bug #2342]
-
-Thu Apr 22 21:50:17 2010 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/ext/multi-irb.rb: fix multi-irb running
- parallelly. [ruby-dev:41031] [Bug #3182]
-
-Thu Apr 22 17:13:34 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems: Import RubyGems 1.3.7.pre.1 (as 1.3.6.1).
-
-Thu Apr 22 16:43:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (warn_balanced): removed false warning.
-
- * parse.y (parser_yylex): skip whitespaces after method name.
-
-Wed Apr 22 02:16:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.[ch]: replace _DEBUG with BIGDECIMAL_DEBUG
- to prevent activating debugging code when compiled with -DEBUG flag
- on Windows. [ruby-core:22989] #1308
-
-Wed Apr 21 21:24:20 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/digest/sha2/extconf.rb: check SHA256_CTX and SHA512_CTX to fix
- compilation failure on OpenBSD 4.4.
-
-Wed Apr 21 15:13:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (io_getc): fix incomplete character immediately before EOF
- with newline converter. [ruby-dev:41024]
-
-Wed Apr 21 13:44:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (regexp): check each fragments. [ruby-core:27374]
-
-Wed Apr 21 13:36:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yylex): reverted r27388 due to backward
- compatibility.
-
- * parse.y (parser_yylex): warn confusing binary operators after
- local variable.
-
-Wed Apr 21 11:53:47 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Update to RDoc 2.5.5. Fixes bugs in ri, Darkfish and
- rdoc option handling.
-
-Wed Apr 21 11:31:35 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yylex): abandoned EXPR_VCALL.
-
-Wed Apr 21 03:17:17 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (io_getc): set read_encoding to resulted one character
- string. [ruby-dev:41023]
-
-Wed Apr 21 00:29:39 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c (bigmul1_karatsuba): fix calculation order to prevent
- underflow. [ruby-core:29088]
-
-Wed Apr 21 00:26:17 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (NODE_NEXT, NODE_REDO): add dummy putnil instruction to
- fix stack consistency error. [ruby-core:28172]
-
- * bootstraptest/test_jump.rb: add a test for above.
-
-Wed Apr 21 00:16:44 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/zlib/zlib.c (rb_deflate_params): update buf_filled count because
- deflateParams writes to out buffer. And, revert r18029 because the
- flush was not needed now and emits garbage. [ruby-dev:40802]
-
-Wed Apr 21 00:01:05 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_method.c (rb_add_method_def): decrement alias count of
- rb_method_definition_t to prevent memory leak. see
- [ruby-dev:41021].
-
-Tue Apr 20 21:33:06 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/win32/lib/win32/registry.rb (PredefinedKey#create): root key
- name should be a string. fixed [ruby-core:28192]
-
-Tue Apr 20 19:25:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yylex): fix for tLPAREN_ARG.
-
-Tue Apr 20 12:34:23 2010 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/{core, util}.rb (RFC822_DAYS, RFC822_MONTHS):
- move the constant because used only util.rb.
-
-Tue Apr 20 12:24:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (lex_state_e, IS_END, IS_SPCARG, parser_yylex): separate
- the state after vcall. [ruby-core:29578]
-
-Tue Apr 20 01:03:00 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bootstraptest/test_fork.rb: add a test for [ruby-core:28924].
-
-Tue Apr 20 00:43:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_extname): skip last directory separators.
- [ruby-core:29627]
-
-Tue Apr 20 00:41:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (internal_{read,write}_func, rb_{read,write}_internal):
- reverted r27265, since now rb_thread_blocking_region() preserves
- errno.
-
-Mon Apr 19 23:14:45 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (rb_thread_blocking_region, rb_thread_blocking_region_end):
- preserve errno. [Bug #2606] [ruby-core:28924]
-
-Mon Apr 19 19:41:10 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * lib/fileutils.rb (FileUtils::cp_r): backport r11156 from ruby_1_8.
-
-Mon Apr 19 19:18:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yylex): reduced duplicated conditions.
-
-Mon Apr 19 13:58:04 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Update to RDoc 2.5.4. Fixes #3169, #3160, #3023.
-
-Mon Apr 19 12:46:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/timeout.rb (Timeout#timeout): propagate errors to the
- caller. [ruby-dev:41010]
-
-Mon Apr 19 00:27:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vm_method.c (rb_add_method_def): workaround fix for redefinition
- of methods. This is because cfp->me uses the rb_method_entry
- which is freed by redefinition of remove_method. Note that
- reusing may cause another problem when the usage is changed.
- [ruby-core:27320] [ruby-core:29464]
-
-Sun Apr 18 22:13:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (string_content): cond_stack and cmdarg_stack are VALUE.
-
-Sun Apr 18 18:07:47 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb (Resolv::IPv4::Regex): make it only accept 0 to 255.
- [ruby-core:29501]
-
-Sun Apr 18 12:48:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yylex): seems like a symbol-literal when spaces
- are unbalanced. [ruby-core:29578]
-
-Sun Apr 18 12:32:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (string_content): preserve cond_stack and cmdarg_stack.
- [ruby-core:29579]
-
-Sun Apr 18 05:50:58 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb: defaulting binary string
- format to "literal" format.
-
-Sun Apr 18 02:13:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/irb/ruby-lex.rb (identify_identifier): add '_' to the regexp.
-
-Sat Apr 17 23:21:15 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in: use AC_TRY_LINK instead of AC_TRY_COMPILE.
- On Solaris it can compile with signbit but can't link.
-
-Sat Apr 17 20:34:09 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/envutil.rb: update Gem::ConfigMap to fake environment for
- tests. Some test of rubygems had failed because envutil.rb changed
- only RbConfig::CONFIG but not Gem::ConfigMap.
-
-Sat Apr 17 20:31:08 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/irb/ruby-lex.rb (identify_identifier): allow multibyte character
- as identifier. [ruby-core:27275]
-
-Sat Apr 17 09:19:27 2010 wanabe <s.wanabe@gmail.com>
-
- * compile.c (iseq_compile_each): fix splat condition in NODE_WHEN.
- [Bug #2226]
-
-Sat Apr 17 08:57:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/net/smtp.rb (Net::SMTP#rcptto_list): continue when at least
- one RCPT is accepted. based on a patch from Kero van Gelder at
- [ruby-core:26190].
-
-Sat Apr 17 07:43:55 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/thread/test_queue.rb (TestQueue#grind): fix typos.
-
-Sat Apr 17 07:27:53 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: add Array#repeated_{combination,permutation} [Feature #2981]
-
-Sat Apr 17 05:30:22 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/core_ext.rb (yaml_as): supporting deprecated
- "yaml_as" method
- * ext/syck/lib/syck/tag.rb: ditto
-
-Sat Apr 17 05:25:15 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/coder.rb (scalar): supporting deprecated methods
- * ext/psych/lib/psych/deprecated.rb: supporting deprecated
- to_yaml_properties method
-
-Sat Apr 17 01:32:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (rb_io_rewind, rb_io_eof): add rdoc. based on a patch from
- Roger Pack in [ruby-core:26771] [Bug #2377].
-
-Fri Apr 16 23:42:56 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_folderitem2_invokeverb.rb (test_invokeverb):
- run test only when "Create Shortcut (&S)" menu is found.
- [ruby-core:29550] [Bug #1602]
-
-Fri Apr 16 21:52:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y (string_content, etc): counts of CMDARG_PUSH and POP were
- inconsistent. [ruby-core:22637]
-
-Fri Apr 16 21:27:57 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_coerce): revert r23389,
- which not only is unnecessary but also causes the inconsistency of
- return type. [ruby-core:25706] [Bug #2129]
-
-Fri Apr 16 20:05:24 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/thread.rb (Queue#push, #pop, SizedQueue#push, #pop): remove
- code that kicks waiting thread twice, which caused race and
- deadlock. a patch from James M. Lawrence. [ruby-core:25537]
-
- * test/thread/test_queue.rb: added.
-
-Fri Apr 16 20:01:47 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * .gitignore: updated.
-
-Fri Apr 16 16:51:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/file2lastrev.rb (VCS::SVN::get_revisions.): remind about
- DOSISH, sometimes.
-
-Fri Apr 16 16:15:40 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_repeated_permutation): new method added. a patch
- from Makoto Kishimoto in [ruby-core:29267] [ruby-core:28724]
-
- * array.c (rb_ary_repeated_combination): ditto.
-
-Thu Apr 15 22:41:47 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (rb_thread_priority, rb_thread_priority_set): fix rdoc.
- Lower-priority thread may run even if there are higher-priority
- threads. See [ruby-dev:40977].
-
-Thu Apr 15 22:33:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/uri/ftp.rb (URI::FTP#set_path): added to correct handling of
- special case where path of ftp is relative. This converts relative
- path to absolute one, because external representation of ftp path is
- relative and internal representation is absolute. [ruby-core:24077]
-
- * lib/uri/ftp.rb (URI::FTP#initialize): converts absolute to relative.
-
- * lib/uri/generic.rb (URI::Generic#check_path): allow relative path
- when scheme is ftp.
-
-Thu Apr 15 21:54:39 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/file2lastrev.rb: use backtick for ruby 1.8.
-
-Thu Apr 15 21:13:29 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/file2lastrev.rb: this should run with ruby 1.8.
-
-Thu Apr 15 20:41:10 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/file2lastrev.rb: make -q effective for files not version
- controlled.
-
-Thu Apr 15 14:50:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_backtrace_each): get rid of use of malloc from signal
- handler by using ruby_engine_name. [ruby-core:29497]
-
- * vm_eval.c (print_backtrace): file may be nil when segfaulted in
- very early stage.
-
- * vm_dump.c (bugreport_backtrace): ditto.
-
-Thu Apr 15 11:51:49 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (help): small fix.
-
-Wed Apr 14 22:09:28 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rexml/source.rb: force_encoding("UTF-8") when the input
- is already UTF-8. patched by Kouhei Sutou [ruby-core:23404]
-
-Wed Apr 14 18:23:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * configure.in (signbit): signbit is a macro in C99.
-
-Wed Apr 14 17:56:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_shift_cbuf): should terminate.
- http://golf.shinh.org/p.rb?DECimal+number+to+BINary#Ruby
-
-Wed Apr 14 16:29:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (GET_STACK_BOUNDS): fixed macro argument names. a patch from
- Satoshi Shiba <shiba AT rvm.jp> at [ruby-dev:40973].
-
- * gc.h (ruby_get_stack_grow_direction): fixed prototype.
-
- * thread_pthread.c (get_stack, ruby_stack_overflowed_p): both side
- should be same type. [Bug #3145]
-
-Wed Apr 14 15:58:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_string_value_cstr): make NUL terminated if it is
- not done.
-
-Wed Apr 14 12:56:21 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap (encode_utf7): encode & properly. Thanks, Kengo
- Matsuyama. [ruby-dev:38063]
-
-Wed Apr 14 11:39:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/lib/syck/basenode.rb (Syck::BaseNode#match_path): fixed
- library name.
-
- * ext/syck/lib/yaml/syck.rb: split from ext/syck/lib/syck.rb for
- backward compatibility.
-
-Wed Apr 14 09:24:07 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: Refix [nkf-bug:21393]. (explicit -X)
-
-Tue Apr 13 20:36:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: Fix: Windows Codepages wrongly convert
- Halfwidth Katakana. [nkf-bug:21393]
-
-Tue Apr 13 15:00:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (make_seed_value): fix leading-zero-guard condition on
- bdigit is smaller than 32bit.
-
-Tue Apr 13 13:57:36 2010 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/completion.rb (CompletionProc): fix [ruby-dev:40953]
- [Bug #3126]. Thanks Kazuhiro NISHIYAMA.
-
-Tue Apr 13 09:32:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (transcode_loop): insert output the value when
- fallback hash has a related key. [ruby-dev:40540]
- [ruby-dev:40829] #3036
-
- * transcode.c (rb_econv_prepare_opts): pass to newhash
- a value with the key :fallback.
-
-Tue Apr 13 00:12:04 2010 Tanaka Akira <akr@fsij.org>
-
- * random.c (rand_init): use the absolute value of seed to
- make srand(-2**40) portable with 32bit and 64bit.
- [ruby-core:29292](2)
-
-Mon Apr 12 22:48:47 2010 Tanaka Akira <akr@fsij.org>
-
- * enumerator.c (inspect_enumerator): don't raise for uninitialized
- enumerator.
-
-Mon Apr 12 21:47:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * LEGAL: separated the section for parse.c. contributed by Paul
- Betteridge in [ruby-core:29472].
-
-Mon Apr 12 09:19:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/fileutils.rb (fu_each_src_dest): ensure src is accessible.
-
- * lib/fileutils.rb (fu_same): use File.identical? to get rid of
- exceptions. [ruby-core:28141]
-
- * lib/fileutils.rb (fu_have_st_ino): no longer used.
-
- * lib/fileutils.rb (fu_have_st_ino): check if required method is
- defined, instead of platform name.
-
-Mon Apr 12 05:10:20 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: New method Matrix.build [ruby-core:28272]
-
-Mon Apr 12 03:45:25 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Deprecate elements_to_{f/i/r}
-
-Mon Apr 12 03:30:29 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Handle coercion errors by raising TypeErrors
- [ruby-core:26736]
-
-Mon Apr 12 00:51:21 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * io.c (rb_io_getline_fast, rb_io_getline_1): fix ARGF.lineno
- behavior. [ruby-core:25205]
-
- * test/ruby/test_argf.rb (TestArgf#test_lineno3): add a test for
- above.
-
-Sun Apr 11 23:25:17 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * configure.in: can not load libraries if --with-opt-dir is used
- on AIX. [Bug #3107]
-
-Sun Apr 11 14:44:45 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/irb/ruby-lex.rb (RubyLex#getc): revert r10817, which caused
- regression for handling case when there is no newline at the end of
- file. [ruby-core:28248]
-
-Sun Apr 11 12:08:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (enc_replicate): new encoding name must be valid
- c-string. [ruby-dev:40954]
-
-Sun Apr 11 11:58:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/win32.h (ftruncate): rename to get rid of conflict
- with same name but non-LFS function on MinGW. [ruby-core:24757]
-
-Sun Apr 11 10:33:34 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Update to RDoc 2.5.3. Includes r27288 and r27290.
-
-Sun Apr 11 09:31:39 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * test/syck/*: Moved test/yaml to test/syck since it's actually
- testing the syck YAML engine.
-
-Sun Apr 11 08:56:44 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rdoc/rdoc.rb (setup_output_dir): compare by Time#to_i.
- Cached created time doesn't have fractional times,
- but FileStat#mtime has; so rdoc almost always judged files
- are updated.
-
-Sun Apr 11 07:40:48 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rdoc/rdoc.rb (setup_output_dir): fix typo. [ruby-core:29415]
-
-Sun Apr 11 07:01:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb (decode_www_form_component): validate.
- [ruby-dev:40938]
-
- * lib/uri/common.rb (decode_www_form): allow empty string.
-
- * lib/uri/common.rb: fix nodoc for constant. [ruby-dev:40949]
-
-Sat Apr 10 21:26:22 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rdoc/markup/preprocess.rb (RDoc::Markup::PreProcess#handle):
- use File.binread to avoid locale dependency.
-
-Sat Apr 10 15:18:26 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Import RDoc 2.5.2
- * lib/rdoc/parser/ruby.rb (RDoc::Parser::Ruby): Don't parse rdoc
- files, reverts r24976 in favor of include directive support in C
- parser.
-
-Sat Apr 10 13:14:22 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/openssl/ossl_ssl.c (Init_ossl_ssl): add SSLContext#ssl_timeout=,
- which allows net/https to specify timeout. [ruby-core:24812]
-
-Sat Apr 10 07:36:13 2010 wanabe <s.wanabe@gmail.com>
-
- * vm_method.c (rb_add_method): clear attr.location before rb_ary_new3.
- a patch from Masaya TARUI in [Bug #3108]
-
-Sat Apr 10 05:27:26 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/deprecated.rb: implementing Psych.quick_emit and
- adding deprecation warnings.
- * ext/psych/lib/psych/visitors/to_ruby.rb: supporting deprecated
- yaml_initialize api.
- * ext/psych/lib/psych/visitors/yaml_tree.rb: supporting deprecated
- to_yaml api.
-
-Sat Apr 10 01:08:53 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/parser.c: parse raises a TypeError when nil is passed in.
-
-Sat Apr 10 00:01:51 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/pty/lib/expect.rb: preserve buffer read, instead of discard.
- based on a patch from Luiz Angelo Daros de Luca in
- [ruby-core:23464].
-
-Fri Apr 9 23:58:58 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/pty/lib/expect.rb: raise an error when argument is unexpected
- type. based on a patch from Luiz Angelo Daros de Luca in
- [ruby-core:23464].
-
-Fri Apr 9 23:57:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/pty/lib/expect.rb: add rdoc. based on a patch from Luiz Angelo
- Daros de Luca in [ruby-core:23464].
-
-Fri Apr 9 23:54:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/irb/init.rb, lib/irb/lc/help-message,
- lib/irb/lc/ja/help-message: add -w flag. [ruby-core:24594]
-
-Fri Apr 9 23:51:45 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/socket/ipsocket.c (init_inetsock_internal),
- ext/socket/unixsocket.c (rsock_init_unixsock): check the result of
- listen(2). based on a patch from Mike Pomraning. [ruby-core:23698]
-
-Fri Apr 9 21:22:10 2010 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/completion.rb (CompletionProc): irb will be stuck with
- long variable name at completion. [Bug#1969]. refix [ruby-core:28366].
-
-Fri Apr 9 20:54:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb (decode_www_form): don't ignore leading '?'.
- [ruby-dev:40938]
-
- * lib/uri/common.rb (decode_www_form): check whether argument is
- valid application/x-www-form-urlencoded data.
-
-Fri Apr 9 20:29:13 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * dir.c (push_glob): clear up the previous commit (RB_GC_GUARD can
- precede the last reference). [ruby-dev:40942]
-
-Fri Apr 9 20:05:05 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * dir.c (push_glob): add RB_GC_GUARD to prevent str being free'ed.
- a patch from Masaya TARUI in [ruby-dev:40939]. [ruby-dev:40514]
-
-Fri Apr 9 10:53:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * compile.c (iseq_compile_each): stop hiding, and freeze unpopped
- string nodes to allow method redefinition. [ruby-dev:40641]
-
-Fri Apr 9 01:26:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (internal_{read,write}_func, rb_{read,write}_internal):
- preserve errno. a patch from Takehiro Kubo in [ruby-core:29340].
- [ruby-core:28924]
-
-Fri Apr 9 01:12:07 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/irb/completion.rb (CompletionProc): calling the method "methods"
- may raise an exception. [ruby-core:28366]
-
-Thu Apr 8 14:33:24 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * configure.in: --disable-install-doc should prohibit doxygen.
-
-Thu Apr 8 14:23:51 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h: include errno.h before defining errnos.
- see [ruby-core:29314]
-
-Thu Apr 8 11:45:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/yaml.rb: use Psych if only it is loaded already.
-
- * lib/yaml.rb (YAML::EngineManager#yamler): set the result after
- successfully switched.
-
-Thu Apr 8 07:22:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (rand_init): ignore higher bits if all they are same as
- the lower sign bit. [ruby-core:29292](2)
-
-Thu Apr 8 07:16:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/irb/cmd/help.rb (IRB::ExtendCommand::Help#execute): use RI
- interactive mode if no argument. [ruby-dev:39839]
-
-Wed Apr 8 02:33:55 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * array.c (rb_ary_permutation): Remove limitation for lengthy permutations
- [ruby-core:29240]
-
- * test/ruby/test_array.rb: ditto
-
-Wed Apr 7 23:33:55 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * misc/ruby-mode.el (ruby-mode-map): binded C-c C-c and C-c C-c C-u
- to comment-region and uncomment-region. Thanks Michael Klishin!
- [Feature #872] [ruby-core:20552]
-
-Wed Apr 7 21:44:14 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (ASCTIME): unused macro removed.
-
-Wed Apr 7 16:45:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (Makefile): reverted r27244.
-
-Wed Apr 7 11:49:34 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rexml/quickpath.rb (REXML::QuickPath::predicate):
- fix regexp.
-
-Wed Apr 7 09:44:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (Makefile): quote init-commands.
-
- * configure.in (Makefile): `make ruby` builds ruby command
- even if RUBY_INSTALL_NAME is customized or it has extension.
-
-Wed Apr 7 03:28:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/rdoc.rb (RDoc#{initialize,setup_output_dir}):
- initialize @last_created and use it.
-
-Wed Apr 7 02:05:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * template/fake.rb.in: not define $extout to make target in cwd.
-
-Tue Apr 6 23:01:35 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * vm_core.h: Introduce UNINITIALIZED_VAR() macro.
- * thread.c (do_select): Use UNINITIALIZED_VAR() instead FAKE_FD_ZERO().
- Also, remove FAKE_FD_ZERO completely. [Feature #3018]
-
-Tue Apr 6 14:53:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h: check definition existence before defining
- errno macros.
-
- * win32/win32.c (errmap): define winsock errors mappings.
- these are VC++10 support. see [ruby-core:29278]
-
-Tue Apr 6 21:55:25 2010 Tanaka Akira <akr@fsij.org>
-
- * configure.in: test localtime(3) overflow. [ruby-dev:40910]
-
- * time.c (rb_gmtime_r): renamed from rb_gmtime.
- (rb_localtime_r): renamed from rb_localtime.
- (rb_localtime_r2): call rb_localtime_r and validate the result if
- there is overflow problem.
- (rb_gmtime_r2): call rb_gmtime_r and validate the result if there
- is overflow problem.
-
-Tue Apr 6 11:21:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * template/fake.rb.in: hooks for extconf.rb.
-
-Tue Apr 6 06:19:36 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rexml/text.rb (REXML::Text.check): comment out
- broken logic.
-
-Tue Apr 6 05:59:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rexml/parsers/baseparser.rb (LETTER, DIGIT):
- always use POSIX charclass.
-
- * lib/rexml/parsers/baseparser.rb (NAMECHAR):
- remove duplicated range.
-
- * lib/rexml/xmltokens.rb (NCNAME_STR, NAMECHAR): ditto.
-
- * lib/rexml/parsers/xpathparser.rb (PathExpr): ditto.
-
- * lib/rexml/text.rb (REXML::Text#initialize):
- initialize @parent.
-
-Mon Apr 5 19:54:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (make_regexp): use onig_new_with_source to keep
- sourcefile and sourceline.
-
- * re.c (onig_new_with_source): copied from onig_new in
- regcomp.c for keep sourcefile and sourceline.
-
-Mon Apr 5 13:20:45 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h, win32/win32.c (EWOULDBLOCK): VC10 already
- defined EWOULDBLOCK. based on a patch from Charlie Savage,
- see [ruby-core:29255]
-
-Mon Apr 5 13:10:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/psych/lib/psych/core_ext.rb: remove before alias.
-
- * ext/syck/lib/syck.rb: don't warn called by itself.
-
-Mon Apr 5 13:08:24 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/mkexports.rb (each_export): VC10 support.
- a patch from Charlie Savage in [ruby-core:29254]
-
-Sun Apr 4 22:18:32 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (cmp): optimize for fixnums.
- (lt): use cmp.
- (gt): ditto.
- (le): ditto.
- (ge): ditto.
- (wlt): use wcmp.
- (wgt): ditto.
- (wle): ditto.
- (wge): ditto.
- (time_subsec): use wmod.
-
-Sun Apr 4 10:04:28 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/ruby.h: replace snprintf and vsnprintf by
- ruby_snprintf and ruby_vsnprintf. [ruby-dev:40909]
-
- * configure.in: don't check snprintf(3) and vsnprintf(3).
-
- * include/ruby/missing.h: don't declare snprintf and vsnprintf.
-
- * include/ruby/ruby.h: include stdarg.h.
-
- * sprintf.c: include vsnprintf.c
-
- * vsnprintf.c: renamed from missing/vsnprintf.c.
-
- * vsnprintf.c: remove useless ifdefs.
-
- * win32/mkexports.rb: use ruby_snprintf and ruby_vsnprintf.
-
-Sun Apr 4 09:44:01 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (lt): call <=> instead of <.
-
-Sun Apr 4 06:46:16 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/yaml: Moved to ext/syck/lib, Syck only uses Syck constant.
- * lib/yaml.rb: Added an engine manager for choosing YAML engine.
- * ext/syck/lib/syck/rubytypes.rb: squashed warnings when using Psych
-
-Sat Apr 3 22:47:51 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c: don't define STRUCT_WIDEVAL.
-
-Sat Apr 3 18:15:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/rdoc.rb (RDoc#{setup,update}_output_dir): store mtimes
- per files in the flag file.
-
- * lib/rdoc/rdoc.rb (RDoc#normalized_file_list): skip already
- processed and unmodified files.
-
-Sat Apr 3 15:09:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (rdoc): no force-update, and add RDOCFLAGS.
-
- * lib/rdoc/options.rb (RDoc#parse): no-force-update option.
-
-Sat Apr 3 10:51:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (random_rand): raise ArgumentError on nil, as the
- documentation implies. [ruby-core:29075]
-
- * random.c (rb_f_rand): mentioned the case of when max is nil.
-
-Sat Apr 3 06:56:11 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * array.c (rb_ary_product): Accept a block [ruby-core:29045]
-
-Sat Apr 3 04:46:00 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/file2lastrev.rb (VCS#relative_to): path and @srcdir may have
- different relative-ness.
-
-Sat Apr 3 03:19:01 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * lib/benchmark.rb (Benchmark::Tms#add): fix NameError.
- [ruby-dev:40906]
-
- * test/benchmark/test_benchmark.rb: add a test for above.
-
-Sat Apr 3 01:50:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/parser/ruby.rb (RDoc#make_message): no empty lines.
-
- * lib/rdoc/stats.rb (RDoc::Normal#print_file): send to stdout and
- flush always
-
-Sat Apr 3 00:03:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/class_module.rb (RDoc#merge): get rid of stack overflow.
-
- * lib/rdoc/parser/c.rb (RDoc#handle_method): see source files in
- source directory.
-
-Fri Apr 2 22:13:38 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/rdoc.rb: reverted r27186 to add generators.
-
-Fri Apr 2 21:17:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * NEWS: added reverse_lookup option.
-
-Fri Apr 2 15:26:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/rdoc/test_rdoc_ri_driver.rb (with_dummy_pager): don't grasp
- the terminal.
-
-Fri Apr 2 14:43:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/rdoc.rb (RDoc::Generator): defer by autoload.
-
- * lib/rdoc/generator/darkfish.rb: use normal library instead of
- gem.
-
-Fri Apr 2 14:26:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/rdoc.rb (RDoc::RDoc#parse_files): don't branch by
- RUBY_VERSION. reapplied r24990.
-
- * lib/rdoc/rdoc.rb (RDoc::RDoc#parse_files): emacs local variables
- are delimited by a semicolon. supported Vim style. reapplied
- r24988 with fixing a typo for shebang.
-
-Fri Apr 2 14:16:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/parser/ruby.rb (RDoc::Parser::Ruby): parse also rdoc
- files. reapplied r24976.
-
- * lib/rdoc/parser/c.rb: fixed a small error in the documentation.
- [ruby-core:24744] reapplied r24395.
-
- * lib/rdoc/parser.rb (RDoc::Parser.binary?): blksize may be nil
- and is irrelevant to whether a file is binary. TAB and newlines
- would be usually considered to be included in text data.
- reapplied r23071 and r24297.
-
-Fri Apr 2 13:59:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/ri/paths.rb (RDoc::RI::Paths): Gem::Enable has been
- obsolete. reapplied r24599.
-
- * lib/rdoc/ri/paths.rb: follows $ridir. reapplied r23554.
-
- * lib/rdoc/ri/paths.rb (RDoc::HOMEDIR): expand_path deals with
- platform dependent environments. reapplied r21312.
-
-Fri Apr 2 12:52:25 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/rdoc/parser.rb (binary?): regression.
-
-Fri Apr 2 11:54:49 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (init_env): wrong calculation of the head of setenv
- string. [ruby-core:29216]
- a patch from Heesob Park in [ruby-core:29218]
-
-Fri Apr 2 08:24:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (ruby_setsid): split from proc_setsid.
-
- * process.c (proc_daemon): use EXIT_SUCCESS instead of magic number.
-
-Fri Apr 2 07:00:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/cptr.c (rb_dlptr_inspect): fix format specifiers.
-
-Fri Apr 2 05:38:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (InitVM): calls per-VM initialization in
- single VM, but does nothing in MVM.
-
-Fri Apr 2 02:56:56 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: New instance methods:
- empty? [ruby-core:26284], each, each_with_index [ruby-core:28400],
- conjugate, conj, imaginary, imag, real, real?, rectangular, rect
- [ruby-core:26285]
-
- Removed compare_by*, inspect_org, cf [ruby-core:26268]
-
- Matrix.empty: raise on negative sizes
-
- Matrix.determinant: raise on rectangular matrices [ruby-core:28271]
-
-Thu Apr 1 17:17:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/iso2022.trans: CP50221 supports 8bit JIS.
-
-Thu Apr 1 16:44:00 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc, test/rdoc: Imported RDoc 2.5
-
-Thu Apr 1 14:30:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/utf_16{be,le}.c (utf16{be,le}_mbc_to_code): simplified.
-
-Thu Apr 1 14:07:51 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * util.c (BSD__hdtoa): don't use C99 macros. (FP_NORMAL etc)
-
-Thu Apr 1 13:30:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * sprintf.c (rb_str_format): support %a format. [ruby-dev:40650]
-
- * missing/vsnprintf.c (BSD_vfprintf): ditto.
-
- * missing/vsnprintf.c (cvt): ditto.
-
- * util.c (BSD__hdtoa): added. This is 2-clause BSDL licensed
- by David Schultz and from FreeBSD.
-
- * LEGAL: add about hdtoa() in util.c.
-
-Thu Apr 1 13:24:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * object.c (rb_cstr_to_dbl): return 0.0 if hexadecimal and
- badcheck is FALSE: Float("0x1p+0") works, but "0x1p+0".to_f
- doesn't. [ruby-dev:40650]
-
- * util.c (ruby_strtod): allow hexadecimal integers.
-
-Thu Apr 1 13:20:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/scanf.rb: support %a format. [ruby-dev:40650]
-
-Thu Apr 1 12:04:10 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/ruby.h (PRE_TIMET_PREFIX): define if configure doesn't
- defines it. [ruby-core:29190]
-
-Thu Apr 1 11:36:04 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_initialize): fixed a rdoc miss that textmode and
- binmode flag explanation was reversed each other. a patch from
- Heesob Park in [ruby-core:29166].
-
-Thu Apr 1 09:54:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (RUBY_{DEFAULT,NEVER}_FREE): added.
- [ruby-dev:40889]
-
-Thu Apr 1 04:55:08 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (rb_big_abs_find_minbit): fix handling the last word.
-
-Thu Apr 1 04:30:11 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (long_mul): overflow condition changed.
- (wi_mul): ditto.
-
-Wed Mar 31 23:33:29 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (long_mul): extracted from mul and avoid integer overflow.
- (wi_mul): extracted from wmul and avoid integer overflow.
-
-Wed Mar 31 21:30:38 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c: less bignum allocations.
-
- * strftime.c (rb_strftime_timespec): defined to avoid rational for
- nano second resolution time.
-
-Wed Mar 31 16:05:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/rake/test_{package_task,rules,task_manager}.rb: use
- temporary directories.
-
-Wed Mar 31 13:53:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/rubygems/gemutilities.rb (setup, teardown):
- Object#to_yaml must use syck on RubyGem.
-
-Wed Mar 31 06:57:14 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (timew2timespec): fix previous change.
-
-Wed Mar 31 00:32:19 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (wdivmod): renamed from wdivmodv. fix neg/pos and pos/neg.
- (split_second): return number of seconds as wideval_t.
- (timet2wv): new function.
- (wv2timet): new function.
- (timet2wideval): removed.
-
-Tue Mar 30 22:24:19 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c: use more polymorphic operations.
-
-Tue Mar 30 22:12:38 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: add URI.decode and URI.encode to Obsoleted methods,
- and fix typos. [ruby-dev:40852]
-
- * NEWS: add Time#subsec.
-
-Tue Mar 30 22:07:12 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c: reorder wide value implementation.
-
-Tue Mar 30 22:00:44 2010 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb.rb: support [Feature#988], [ruby-core:21177].
- * lib/irb/context.rb: fix Context#verbose?.
-
-Tue Mar 30 21:56:33 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c: make wide value more polymorphic.
-
-Tue Mar 30 21:18:32 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/psych/extconf.rb: install psych .so to not psych/ but direct.
- This prepends to install *.rb files to psych/psych.
-
- * ext/psych/lib/psych.rb: require 'psych.so'.
-
-Tue Mar 30 20:55:14 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (w2v): renamed from w2xv.
- (v2w): renamed from xv2w.
- (rb_time_magnify): takes wideval_t.
- (rb_time_unmagnify): returns wideval_t.
-
-Tue Mar 30 19:46:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/psych/lib: moved external library dependent files from lib.
- [ruby-core:29129]
-
-Tue Mar 30 18:25:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_dirname): split from rb_file_s_dirname.
-
- * load.c (rb_f_require_relative): use absolute path instead of
- expanded path.
-
-Tue Mar 30 13:57:08 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * process.c (proc_daemon): Process.daemon should raise an error on
- failure regardless of whether the implementation uses daemon(3)
- or not. [ruby-dev:40832]
-
-Tue Mar 30 13:11:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/file2lastrev.rb (VCS::GIT_SVN): removed because git-log can
- deal with git-svn repository faster than git-svn-info.
-
- * tool/file2lastrev.rb (VCS#get_revisions): particular commands do
- not depend on instance.
-
-Tue Mar 30 08:55:50 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/extconf.rb: Making library detection more agnostic.
-
-Tue Mar 30 08:10:59 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/psych.rb: Fix problem with empty and white-space only strings.
- Thanks Peter McLain!
- * test/psych/test_psych.rb: tests for change.
-
-Tue Mar 30 05:31:39 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/psych.rb: documentation updates. Thanks Peter McLain!
- * lib/psych/{coder,tree_builder}.rb: ditto
-
-Tue Mar 30 03:56:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/psych/{emitter,parser,psych}.c: move variable
- declaration to the first of the block.
-
-Mon Mar 29 21:47:44 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * prelude.rb, .document: Stuff in prelude.rb should be documented
- as well.
-
-Mon Mar 29 20:23:05 2010 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/matrix.rb(Vector#each2, Vector#collect2): add type check for
- Integer[Bug #2495].
-
-Mon Mar 29 19:45:09 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c: wide value condition changed.
-
-Mon Mar 29 18:10:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (Numeric): accept rationals.
-
-Mon Mar 29 15:10:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile#open): re-open with same mode and
- options as initialize.
-
-Mon Mar 29 09:16:45 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * random.c: change include order; ruby.h should be at first.
-
-Mon Mar 29 06:47:25 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/*: importing Psych to trunk
- * test/psych/*: ditto
- * lib/psych/*: ditto
-
-Sun Mar 28 10:03:51 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/scanf.rb: fix max width modifier for %f.
-
-Sun Mar 28 10:35:45 2010 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 1.6.0 r5717.
- * test/minitest/*.rb: ditto.
-
-Sun Mar 28 10:12:28 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (rb_time_magnify): fix for LP64.
-
-Sun Mar 28 09:28:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/scanf.rb: fix %[egEFG] isn't accept.
-
-Sun Mar 28 09:53:02 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c: rename small integer specialization related identifiers.
-
-Sun Mar 28 08:20:37 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (weq): specialize for small integer.
- (wne): ditto.
- (wlt): ditto.
- (wgt): ditto.
- (wle): ditto.
- (wge): ditto.
- (rb_time_magnify): ditto.
- (rb_time_unmagnify): ditto.
- (rb_time_unmagnify_to_float): new function to avoid rational for
- Time#to_f and Time#-.
-
-Sun Mar 28 07:12:41 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (mul): condition refined.
-
-Sun Mar 28 02:14:13 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c: fix previous commit.
-
-Sat Mar 27 23:17:52 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c: use 64bit arithmetic even on platforms with 32bit VALUE.
-
-Fri Mar 26 23:52:07 2010 wanabe <s.wanabe@gmail.com>
-
- * NEWS: add Thread#add_trace_func and Thread#set_trace_func.
-
-Fri Mar 26 22:58:10 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/openssl/ossl_x509store.c (ossl_x509store_initialize): initialize
- store->ex_data.sk. a patch from Christian Holtje in
- [ruby-core:28907]. [ruby-core:23971] [ruby-core:18121]
-
-Fri Mar 26 19:55:41 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * Makefile.in (DOXYGEN): Define a missing variable DOXYGEN. Build
- has been failing when doxygen(1) is found by configure but the
- variable is not defined by the system and make(1) does not allow
- an empty command. ("@$(DOXYGEN)" was the cause)
-
-Fri Mar 26 19:28:03 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/ruby/test_hash.rb (test_recursive_key): recursive keys are
- permitted now. [ruby-dev:40735]
-
-Fri Mar 26 12:36:10 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/yaml/basenode.rb: deprecating YPath methods
-
- * lib/yaml/stream.rb: deprecating YAML::Stream#edit
-
-Fri Mar 26 12:29:28 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * lib/yaml/encoding.rb: YAML.encode, YAML.decode are deprecated.
-
- * lib/yaml/stringio.rb: yaml/stringio.rb is deprecated.
-
- * lib/yaml/ypath.rb: YAML::YPath is deprecated.
-
-Fri Mar 26 04:52:19 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: fix [ruby-core:28901] [Bug #2997].
- Thanks, Michael Graff.
-
- * ext/tk/tcltklib.c: use xfree() for memories allocated by ALLOC().
-
- * ext/tk/tkutil/tkutil.c: ditto.
-
- * ext/tk/lib/tkextlib/version.rb: forgot updating.
-
-Thu Mar 25 23:53:22 2010 wanabe <s.wanabe@gmail.com>
-
- * thread.c (thread_reset_event_flags): set flags to thread. [Bug #693]
-
-Thu Mar 25 23:17:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * file.c (rb_get_path_check): prefer #to_path over #to_str. a patch
- originally written by me, and modified by Nobuyoshi Nakada.
- [ruby-core:24257]
-
-Thu Mar 25 18:10:08 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: Array#{uniq,uniq!} can take a block. see [ruby-dev:37998]
-
-Thu Mar 25 17:21:49 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: add IO#autoclose=, IO#autoclose?, IO#codepoints,
- IO#each_codepoint.
-
-Thu Mar 25 14:50:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_{read,write}): fix handle leaks. based on
- a patch from Heesob Park in [ruby-core:28919]. [ruby-core:28833]
-
-Thu Mar 25 12:37:37 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * NEWS: add Kernel#singleton_class.
-
-Thu Mar 25 11:34:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * bignum.c, node.h, strftime.c, enc/trans/utf8_mac.trans:
- added explicit casts for suppressing warnings.
-
-Thu Mar 25 11:34:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * test/ruby/test_dir_m17n.rb: HFS+ escapes invalid byte sequences of
- filenames.
-
-Thu Mar 25 05:44:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ruby_version): needs runnable CPP.
-
-Thu Mar 25 04:42:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot (package): take a breath for HP-UX make
- [ruby-core:28938].
-
- * tool/make-snapshot (Dir.mktmpdir): for 1.8.6 backward compatibility.
-
- * tool/make-snapshot (package): $: no longer contains ".", in trunk.
-
-Thu Mar 25 03:52:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/charset_alias.rb: update of URL. [ruby-dev:38360]
-
-Wed Mar 24 23:43:40 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (thread_create_core): let new thread inherit RUBY_EVENT_VM
- of event_flags. [ruby-core:25191]
-
- * thread.c (rb_threadptr_exec_event_hooks): delete RUBY_EVENT_VM if
- all event_hooks are removed.
-
-Wed Mar 24 22:58:02 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * configure.in: revert the previous commit, which seemed to break make
- install. The files of standard libraries are directly installed to
- $(PREFIX)/lib/ruby instead of $(PREFIX)/lib/ruby/1.9.1
-
-Wed Mar 24 18:16:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LDSHARED, CPP): keep $(CC). [ruby-core:28912]
-
-Wed Mar 24 14:33:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_read): limit read size to 16KB if the file
- seems to be console. [ruby-core:28902]
-
-Wed Mar 24 10:18:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * file.c (file_expand_path): set length of string before calling
- rb_enc_check because rb_enc_check scans its content.
- This prevents warnings by valgrind.
-
-Tue Mar 23 23:58:51 2010 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Incorporating the fixes from the recent
- FasterCSV releases: 1.5.2 and 1.5.3. New parser
- by Tim Elliott. [ruby-core:25038]
-
-Tue Mar 23 18:35:46 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * object.c (rb_obj_singleton_class): new method
- Kernel#singleton_class. [ruby-core:21702]
-
-Tue Mar 23 01:13:59 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket: use rsock_ prefix for internal initialization functions.
-
-Mon Mar 22 20:32:22 2010 wanabe <s.wanabe@gmail.com>
-
- * proc.c (rb_method_location): return attr's location if it is setup.
- [Feature #2084]
-
- * NEWS: follow above.
-
- * vm_method.c (rb_add_method): save attr's location.
-
- * gc.c (mark_method_entry): mark attr's location.
-
- * method.h (rb_method_definition_t): add member to save attr's location.
-
- * vm_eval.c (vm_call0): follow above.
-
- * vm_insnhelper.c (vm_call_method): ditto.
-
- * vm_method.c (rb_method_definition_eq): ditto.
-
-Mon Mar 22 19:31:06 2010 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (Date#>>): fixed. [ruby-core:28011]
-
-Mon Mar 22 18:01:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RMDIRS): use rmdir -p if possible.
-
- * Makefile.in ({dist,real}clean-ext): fix for removing ext
- directories.
-
-Mon Mar 22 09:06:10 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/.document: extracted from ext/.document.
-
-Mon Mar 22 00:50:33 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/rubysocket.h (rsock_revlookup_flag): declared.
-
-Mon Mar 22 00:01:24 2010 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/setup (config.h): RUBY_EXEC_PREFIX defined.
-
-Sun Mar 21 00:46:29 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb (URI.encode_www_form_component):
- convert strings of HTML5 ASCII incompatible encoding
- to UTF-8.
-
- * lib/uri/common.rb (URI.encode_www_form_component):
- "\x83\x41" of Shift_JIS should be encoded as "%83A".
- This follows real implementations.
-
- * lib/uri/common.rb (URI.decode_www_form_component):
- use given encoding for force_encoding. [ruby-dev:40721]
-
-Sun Mar 21 21:09:17 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv-replace.rb: specify super class for rdoc.
-
- * lib/ipaddr.rb: ditto.
-
-Sun Mar 21 19:52:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_initialize): add autoclose argument to control close
- at finalization. [ruby-core:26222]
-
- * io.c (rb_io_autoclose_p, rb_io_set_autoclose): new methods.
-
-Sun Mar 21 19:50:04 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket: make sources rdoc friendly.
-
-Sun Mar 21 17:57:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (IO_RBUF_CAPA_FOR): use large buffer as cbuf if readconv is
- needed for performance improvement. based on a patch by Roger Pack
- in [ruby-core:28163]. [ruby-core:28162]
-
-Sun Mar 21 17:14:49 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: reuse hash object.
-
-Sun Mar 21 12:32:39 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (transcode_compile_tree): make
- valid_encoding mandatory unless from_encoding is registered in
- ValidEncoding.
- (transcode_tbl_only): ditto.
- (transcode_tblgen): ditto.
- (ValidEncoding): new function.
-
- * enc/trans/escape.trans: specify valid_encoding.
-
- * enc/trans/emoji_sjis_docomo.trans: ditto.
-
- * enc/trans/emoji.trans: ditto.
-
- * enc/trans/emoji_iso2022_kddi.trans: ditto.
-
- * enc/trans/big5.trans: ditto.
-
- * enc/trans/emoji_sjis_softbank.trans: ditto.
-
- * enc/trans/emoji_sjis_kddi.trans: ditto.
-
- * enc/trans/chinese.trans: use ValidEncoding() instead of
- ValidEncoding[].
-
-Sun Mar 21 09:43:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (IO_[CRW]BUF_CAPA_MIN): replaced magic numbers.
-
-Sun Mar 21 09:22:10 2010 Tanaka Akira <akr@fsij.org>
-
- * object.c (rb_obj_hash): use LONG2FIX to avoid Bignum allocation.
-
-Sat Mar 20 22:51:46 2010 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_sum): use UCHAR_MAX.
-
-Sat Mar 20 19:16:42 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (ActionMap.unambiguous_action): use
- Array#delete.
- (ActionMap.merge2): defined.
- (ActionMap::PostMemo): removed.
- (transcode_compile_tree): use ActionMap.merge2.
-
-Sat Mar 20 13:26:09 2010 Tanaka Akira <akr@fsij.org>
-
- * array.c (rb_ary_uniq_bang): the array is already unique if the
- length is zero or one.
- (rb_ary_uniq): ditto.
-
-Sat Mar 20 12:30:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib: fixed typo. a patch by Sho Hashimoto in [ruby-dev:40716].
-
-Sat Mar 20 11:32:18 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (each_firstbyte_range): tuned for less
- method calls.
-
-Sat Mar 20 00:59:50 2010 wanabe <s.wanabe@gmail.com>
-
- * ext/dl/lib/dl/pack.rb (DL#pack): allow LLP64.
-
-Fri Mar 19 05:26:31 2010 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_sum): don't call method for each byte.
-
-Thu Mar 18 21:24:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (miniruby): link $(NORMALMAINOBJ).
-
-Thu Mar 18 19:52:27 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: scan singleton mappings sequentially.
-
-Thu Mar 18 06:28:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_EXEC_PREFIX): added to config.h.
-
- * ruby.c (ruby_init_loadpath_safe): TMP_RUBY_PREFIX should be
- exec_prefix, not rubylibprefix. [ruby-core:28718]
-
- * version.c (RUBY_LIB_PREFIX): fallback to RUBY_EXEC_PREFIX.
-
-Thu Mar 18 05:58:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_{to_i,mod,divmod,div2}):
- removed unused variables.
-
-Thu Mar 18 04:40:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_intern3): get rid of type-punning cast.
-
-Thu Mar 18 02:29:42 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (iseq_build_body): add mark to jump table hash of case.
-
-Thu Mar 18 00:58:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * util.c (ruby_strtod): Add support for Hexadecimal
- floating-point expression [ruby-dev:40650] #2969
-
-Thu Mar 18 00:00:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb (URI.{en,de}code_www_form_component):
- renamed from URI.{en,de}code_www_component. [ruby-dev:40672]
-
- * lib/uri/common.rb (URI.encode_www_form_component): %-encoded
- element should have always two hex.
-
- * lib/uri/common.rb (URI.encode_www_form_component):
- better treatment for ASCII incompatible encodings and
- encodings whose lead byte may use 7bit.
-
- * lib/uri/common.rb (URI.decode_www_form_component): add %20.
-
- * lib/uri/common.rb (URI.decode_www_form_component): add
- result's encoding as 2nd argument.
-
- * lib/uri/common.rb (URI.decode_www_form): added.
-
-Wed Mar 17 16:25:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (rb_hash_aset): allow recursive key. [ruby-core:24648]
-
-Wed Mar 17 06:39:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.h (rb_warning, rb_sys_warning): fixed typo in rdoc.
- [ruby-core:28696]
-
-Wed Mar 17 02:29:46 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c, iseq.c, ruby.c, vm.c, vm_core.h, vm_eval.c: add absolute
- path field into rb_iseq_t. The field contains a string representing
- a path to corresponding source file. or nil when the iseq is created
- from -e, stdin, eval, etc. This field is used for require_relative.
- [ruby-dev:40004]
-
- * load.c (rb_f_require_relative): add C implementation of
- require_relative.
-
- * prelude.rb (require_relative): get rid of Ruby implementation of
- require_relative.
-
-Wed Mar 17 01:24:01 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y (rb_intern3): prohibit Symbol with an invalid encoding.
- [ruby-core:24621]
-
- * test/ruby/test_m17n_comb.rb: modify a test for above.
-
-Tue Mar 16 22:51:11 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: specialize for singleton mappings.
-
-Tue Mar 16 20:13:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * enc/trans/emoji.trans: added codepoints leading 0xf4 into
- nomap_table.
-
-Tue Mar 16 17:33:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (VpCtoV): keep e's sign.
- When e doesn't over flow e * BASE_FIG but overflow e * 10,
- e will overflow.
-
-Tue Mar 16 17:18:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/encoding.h (rb_str_conv_enc_opts): missing prototype.
-
-Tue Mar 16 15:20:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tmpdir: split from lib/tmpdir.rb.
-
- * win32/win32.c (rb_w32_system_tmpdir): extracted from init_env.
-
- * win32/win32.c (rb_w32_getcwd): removed duplicated code.
-
-Tue Mar 16 14:06:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/encoding.h (ENC_TO_ENCINDEX): suppress warnings.
-
-Tue Mar 16 14:03:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RSHIFT): parenthesize the argument of cast instead
- of the result.
-
-Tue Mar 16 11:23:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): ignore dname if it has different
- drive letter or UNC.
-
-Tue Mar 16 07:16:56 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: redundant loop removed.
-
-Tue Mar 16 07:01:43 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: refactored to use tree as memo key.
-
-Tue Mar 16 04:05:13 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: more info in generating macro names.
-
-Mon Mar 15 21:58:03 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: ActionMap#each_firstbyte inlined.
-
-Mon Mar 15 21:22:49 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (transcode_tblgen): add valid_encoding
- optional argument.
-
- * enc/trans/single_byte.trans use valid_encoding argument for
- transcode_tblgen.
-
- * enc/trans/chinese.trans: ditto.
-
-Mon Mar 15 18:33:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (default_rand): removed initial buffer.
-
- * random.c (Init_RandomSeed): initialize seed of default random.
-
- * random.c (Init_RandomSeed2): turn the seed to Bignum object.
-
-Mon Mar 15 17:28:30 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_print): RDoc update. a patch from Daniel Kelley
- in [ruby-core:28643].
-
-Mon Mar 15 14:06:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (next_state): no initialization here.
-
- * random.c (default_mt): always return initialized MT.
-
-Mon Mar 15 11:49:48 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * random.c (rb_reset_random_seed): set seed in this.
- [ruby-core:28655]
-
-Mon Mar 15 10:26:02 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: import latest nkf. [master 9306cb0]
- this also fixes [ruby-dev:40607]
-
-Mon Mar 15 09:34:17 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb (URI.encode_www_component):
- call str.to_s at first.
-
-Mon Mar 15 09:36:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * symbian/README.SYMBIAN: fixed broken patch and converted to
- unified diff.
-
-Mon Mar 15 07:51:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (Init_File): do not define File::ALT_SEPARATOR on cygwin.
-
-Mon Mar 15 07:41:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (realpath_rec): use same cache.
-
- * file.c (realpath_internal): regulate separators in prefix.
- [ruby-core:28653]
-
- * file.c (FILE_ALT_SEPARATOR): separated condition.
-
-Mon Mar 15 04:41:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_each_codepoint): read directly when readconv is
- needed but internal encoding is not set. [ruby-core:28650]
-
-Mon Mar 15 04:18:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/file2lastrev.rb (VCS::{SVN,GIT}#get_revisions):
- use block argument 'path' to get the path given by super.
-
-Mon Mar 15 02:43:59 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (Action#hash): defined.
- (Action#eql?): ditto.
- (Action#==): ditto.
-
-Mon Mar 15 01:52:46 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: refactored.
-
-Mon Mar 15 01:18:31 2010 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/setup (*.pkg): Ruby Core installation separated from standard extensions.
-
- * symbian/configure.bat: ditto.
-
- * symbian/README.SYMBIAN: ditto.
-
- * symbian/setup (config.h): support for 2nd internal drive added.
-
-Mon Mar 15 00:11:23 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/file2lastrev.rb (VCS::GIT_SVN#get_revisions) :
- use block argument 'path' to get the path given by super.
-
- * tool/file2lastrev.rb (VCS::GIT#get_revisions):
- use double quotes for Windows.
- patched by Vladimir Sizikov [ruby-core:28651]
-
-Sun Mar 14 22:38:31 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: consider valid_encoding for max_input.
-
-Sun Mar 14 15:46:09 2010 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/emoji.trans: fix nomap_table.
-
-Sun Mar 14 09:50:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (insn_data_to_s_detail), iseq.c (insn_operand_intern):
- fixed format specifiers.
-
-Sun Mar 14 07:20:17 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (EXPAND_PATH_BUFFER): make it back to usascii, to prevent
- infinite loop on some platform. [ruby-dev:40629]
-
-Sun Mar 14 02:40:38 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: reject ambiguous mapping.
-
- * enc/trans/single_byte.trans: remove ambiguous mapping such as
- \xD6 -> U+05F2 and \xD6\xC7 -> U+FB1F in Windows-1255
-
-Sat Mar 13 23:48:27 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (file_expand_path): should not just copy the encoding
- from fname. [ruby-core:28635]
-
- * file.c (EXPAND_PATH_BUFFER): set filesystem_encoding, not
- usascii for path buffer.
-
-Sat Mar 13 17:48:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/file2lastrev.rb: refactored. fixed changed revision of git.
-
-Sat Mar 13 15:44:20 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_print): should not print field separator at the end
- of arguments. [ruby-talk:358633]
-
-Sat Mar 13 14:49:55 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_join): remove Enumerable#join. [ruby-core:24786]
-
- * array.c (ary_join_1): use #to_ary to detect recursive array.
-
-Sat Mar 13 12:26:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/io.h (MakeOpenFile): finalize fptr to get rid of
- memory leak.
-
-Sat Mar 13 11:14:26 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * load.c (rb_get_expanded_load_path): expand paths if any item in $:
- is not a string.
-
-Sat Mar 13 10:16:32 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * load.c (rb_get_expanded_load_path): does not expand paths if all
- the items in $: are absolute paths. [ruby-core:28113]
-
-Sat Mar 13 10:03:52 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: fix [Bug #2840] Tk doesn't built in mingw.
-
-Sat Mar 13 03:24:15 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: show consumed time at last.
-
-Sat Mar 13 00:44:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_basename): check encoding of suffix.
-
-Sat Mar 13 00:11:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_init_loadpath_safe): mark initial load paths.
-
- * gem_prelude.rb (push_all_highest_version_gems_on_load_path):
- search insertion position by initial load path mark.
-
- * lib/rubygems.rb (Gem.load_path_insert_index): ditto.
-
-Fri Mar 12 21:34:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * NEWS: emoji encodings.
-
-Fri Mar 12 17:14:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb (URI.encode_www_form): new method to
- generate URL-encoded form data. [ruby-dev:39246]
-
- * lib/uri/common.rb (URI.encode_www_component,
- URI.decode_www_component): new method for encode/decode
- a name/value of HTML form.
-
-Fri Mar 12 17:36:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/webrick/httpservlet/cgihandler.rb
- (WEBrick::HTTPServlet::CGIHandler#do_GET):
- set binary mode for tempfile.
- http://pc12.2ch.net/test/read.cgi/tech/1265467681/286
-
-Fri Mar 12 13:52:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * tool/compile_prelude.rb: TMP_RUBY_PREFIX should replace
- rubylibprefix but not prefix.
-
-Fri Mar 12 09:43:11 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * complex.c (f_signbit): remove condition for signbit because
- all platforms have signbit from r26871.
-
-Fri Mar 12 07:25:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (init_env): get rid of alloca() for outer string.
-
-Fri Mar 12 07:17:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/racc/cparse/cparse.c: suppressed warnings for shortening on
- platforms where pointer is bigger than int.
-
-Fri Mar 12 07:15:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_init_loadpath_safe, ruby_init_gems): set and remove
- TMP_RUBY_PREFIX.
-
- * variable.c (rb_const_remove): new function.
-
- * tool/compile_prelude.rb: split each preludes.
-
-Fri Mar 12 07:09:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (config.status): setup MINIRUBY environment for
- cross-compiling.
-
-Fri Mar 12 06:48:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tk/extconf.rb: log() is built-in in some compilers and needs
- proper declaration.
-
-Fri Mar 12 06:37:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sample/timeout.rb: split from lib/timeout.rb.
-
-Thu Mar 11 22:35:27 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_round): new method Time#round. [ruby-dev:40595]
-
-Thu Mar 11 17:31:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (str_transcode0): confirm the code range.
-
-Thu Mar 11 12:14:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing/signbit.c: added.
-
-Thu Mar 11 11:16:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check if target_archs has changed.
-
-Thu Mar 11 01:33:30 2010 wanabe <s.wanabe@gmail.com>
-
- * win32/win32.c (signbit): allow x64.
-
-Thu Mar 11 01:04:48 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * iseq.c (rb_iseq_clone): sets local_iseq and klass properly.
-
-Wed Mar 10 21:25:41 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * enum.c (min_ii, max_ii, minmax_ii): remove wrong optimization that
- reuses array for yield parameter, which caused unexpected behavior.
- [ruby-core:25989]
-
-Wed Mar 10 12:10:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * enc/x_emoji.h: renamed from enc/x-emoji.c.
-
-Wed Mar 10 04:17:08 2010 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (defined_expr), insns.def (defined): fix to pass a Symbol
- object such as :$foo for the "defined?($foo)" expression
- on defined instruction. This patch fixes ISeq#to_a/load.
-
-Tue Mar 9 20:50:09 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/dl/test_method.rb: delete a residual test for dl on libffi.
-
-Tue Mar 9 18:00:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * enc/trans/EMOJI/*.src, enc/trans/emoji*,
- enc/x-emoji.c, test/ruby/enc/test_emoji.rb,
- tool/enc-emoji-citrus-gen.rb, tool/enc-emoji4unicode.rb,
- tool/jisx0208.rb, tool/test/test_jisx0208.rb:
- new encodings to support emoji charsets, which are used by
- Japanese mobile phones [ruby-dev:40528].
- Thanks Yoji Shidara for a lot of contribution.
-
- * tool/transcode-tblgen.rb: modified for enc-emoji4unicode.rb.
-
-Tue Mar 9 14:57:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/transcode-tblgen.rb (ActionMap#generate_node):
- remove useless dup.
-
- * tool/transcode-tblgen.rb (transcode_tbl_only): remove duplicated
- method call for encode_utf8.
-
-Tue Mar 9 14:55:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_to_s): remove unused variable.
-
-Tue Mar 9 12:17:34 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * tool/transcode-tblgen.rb (StrSet#parse, ActionMap#generate_node):
- optimization (reusing object and improving memoize).
- [ruby-dev:40582]
-
-Sun Mar 7 02:27:03 2010 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * dln.c [DLN_NEEDS_ALT_SEPARATOR] (translit_separator): small typo
- fixed.
-
- * symbian/setup (*.pkg): Shared library installation path fixed to
- match changes in version.c.
-
- * symbian/setup (ruby.mmp): SOURCE dln_find.c added.
-
-Sun Mar 7 23:14:22 2010 Tanaka Akira <akr@fsij.org>
-
- * bignum.c (rb_big_pack): use DIGSPERLONG and BITSPERDIG.
- (rb_big_unpack): use DIGSPERLONG.
-
-Sun Mar 7 19:21:10 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * io.c: Fix documentation for each/each_line/lines, bytes/each_byte,
- codepoints/each_code_point [ruby-core:23948]
-
- * string.c: ditto
-
- * ext/stringio/stringio.c: ditto
-
-Sun Mar 7 13:49:49 2010 Tanaka Akira <akr@fsij.org>
-
- * file.c: add optional basedir argument for realpath/realdirpath.
- (realpath_internal): handle basedir.
- (rb_file_s_realpath): extract basedir from argument list.
- (rb_file_s_realdirpath): extract basedir from argument list.
-
- * lib/pathname.rb (realpath): pass basedir.
- (realdirpath): ditto.
-
-Sun Mar 7 02:05:38 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_set_filesystem_encoding):
- filesystem encoding on Mac OS X is now
- default external encoding. so Mac OS X is now
- treated as one of Unix. [ruby-dev:40439]
-
- * file.c (file_path_convert): ditto.
-
-Sat Mar 6 22:07:09 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c: fix the prototype of rb_big2ulong_pack.
-
-Sat Mar 6 13:45:37 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (rb_io_s_write, rb_io_s_binwrite): delete File#write and
- #binwrite. It may take a long time to make them stable, so 1.9.2
- should not include them. We need refactoring to implement them
- again.
-
- * test/ruby/test_io.rb: delete tests for them.
-
-Sat Mar 6 10:03:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (rb_io_s_binwrite): use mode "r+b" instead of "ab" to handle
- offset correctly. [ruby-core:28517]
-
- * test/ruby/test_io.rb: use assert_equal instead of assert.
-
-Sat Mar 6 01:08:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): VC6 has __int64.
-
-Fri Mar 5 19:36:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (econv_opts): set :undef => :replace when
- :replace is given and :invalid is not given. [ruby-dev:40554]
-
-Fri Mar 5 17:51:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (pipe_open): suppressed a warning.
-
- * win32/win32.c (rb_w32_map_errno, winnt_stat, rb_chsize): ditto.
-
- * win32/win32.c (rb_w32_aspawn): get rid of overflow.
-
-Fri Mar 5 11:59:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (signbit): defined on mingw.
-
-Thu Mar 4 22:49:42 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * eval.c (setup_exception): avoid line number 0 when setting
- $DEBUG=true. [ruby-dev:39116]
-
-Thu Mar 4 22:45:02 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (io_s_write, io_s_binwrite): add File#write and #binwrite.
- [ruby-core:21701]
-
- * test/ruby/test_io.rb: add tests for above.
-
-Mon Mar 4 13:14:34 2010 wanabe <s.wanabe@gmail.com>
-
- * gc.c (gc_profile_total_time): add GC::Profiler.total_time.
- [ruby-core:27169]
-
- * NEWS: ditto.
-
-Thu Mar 4 10:15:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * complex.c (m_log, m_exp): remove unused functions.
-
-Thu Mar 4 02:34:59 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_env.rb (TestEnv#test_select_bang): add tests.
-
-Thu Mar 4 02:29:52 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_hash.rb (TestHash#test_keep_if): fix typo.
-
-Thu Mar 4 00:10:54 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (HEX2): extracted from regexps.
-
-Wed Mar 3 23:16:32 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * complex.c (nucomp_real_check): raise TypeError instead of
- ArgumentError when argument is not a real as expected
- [ruby-core:28395]
-
- * rational.c (nurat_int_check): ditto (for integers)
-
-Wed Mar 3 23:07:08 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb (Vector#each): Return self and optimization
- [ruby-core:28405]
-
-Wed Mar 3 18:35:55 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_select_bang): add #select! and keep_if to Hash.
-
- * hash.c (env_select_bang): ..and to ENV.
-
-Wed Mar 3 15:54:20 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/matrix.rb (Vector#each2, collect2): small refactoring.
-
-Wed Mar 3 16:14:24 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/matrix.rb (Vector#each): make Vector enumerable.
- [ruby-core:28405]
-
-Wed Mar 3 14:28:23 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_select_bang): select! removes all elements for
- which block returns false. [ruby-core:27286]
-
- * array.c (rb_ary_keep_if): #keep_if, new method.
-
-Wed Mar 3 06:19:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (signbit): defined.
-
- * win32/Makefile.sub, symbian/setup (config.h): pack.c requires
- SIZEOF_INT*_T now.
-
-Tue Mar 2 21:16:48 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (rb_io_lines, rb_io_bytes, rb_io_chars, rb_io_codepoints):
- change to alias to each_*, in similar way to ARGF and String.
- [ruby-core:23948]
-
-Tue Mar 2 15:54:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regcomp.c (noname_disable_map): add NT_ANCHOR case.
- Without this change, captured groups in anchors (look-ahead,
- look-behind, and so on) are not removed and
- unintended invalid backref error occur. [ruby-core:28235]
-
- * regcomp.c (renumber_by_map): ditto.
-
-Tue Mar 2 14:42:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * test/dl/test_closure.rb: forget to revert at r26764.
-
-Tue Mar 2 14:29:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_find_file_ext_safe, rb_find_file_safe): skip argument
- checks in file_expand_path().
-
-Tue Mar 2 13:54:44 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * test/ruby/test_math.rb: Fix lgamma test
-
-Mon Mar 1 23:26:56 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/pty.c (pty_open): refine the path for master IO.
-
-Mon Mar 1 20:07:06 2010 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * ext/zlib/zlib.c (zstream_expand_buffer_into): remove compare
- different type values warning.
-
-Mon Mar 1 17:42:45 2010 wanabe <s.wanabe@gmail.com>
-
- * configure.in (mingw): do not detect snprintf/vsnprintf.
-
-Mon Mar 1 16:54:21 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/oniguruma.h: updated to follow Oniguruma 5.9.2.
-
- * re.c (make_regexp): use onig_new() instead of onig_alloc_init().
-
- * re.c (rb_reg_to_s): ditto.
-Sun Feb 28 21:32:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/pty/pty.c (get_device_once): raise on error when fail is
- non-zero.
-
-Sun Feb 28 18:58:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * math.c (rb_eMathDomainError): new exception class
- for representing mathematical domain error instead
- of Errno::EDOM.
-
- * math.c (domain_check, infinity_check): removed,
- no longer needed.
-
- * math.c (math_atan2, math_acos, math_asin, math_acosh,
- math_atanh, math_log, math_log2, math_log10, math_sqrt,
- math_gamma, math_lgamma): mathematical domain errors
- are checked and raised before calling libm's functions.
-
- * test/ruby/test_math.rb: updated for changes of math.c.
-
-Sun Feb 28 15:07:28 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c (pack_pack): use union to avoid pointer cast.
- (pack_unpack): ditto.
-
-Sun Feb 28 11:49:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * openssl/ossl.c (OSSL_IMPL_SK2ARY): for OpenSSL 1.0.
- patched by Jeroen van Meeuwen at [ruby-core:25210]
- fixed by Nobuyoshi Nakada [ruby-core:25238],
- Hongli Lai [ruby-core:27417],
- and Motohiro KOSAKI [ruby-core:28063]
-
- * ext/openssl/ossl_pkcs7.c (pkcs7_get_certs, pkcs7_get_crls):
- split pkcs7_get_certs_or_crls.
-
-Sun Feb 28 11:42:55 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/openssl/{test_x509cert.rb,openssl,test_x509crl.rb,
- test_x509req.rb}:
- fix false positive tests because of OpenSSL spec change.
- patched by originally Hongli Lai [ruby-core:27417],
- and fixed by Motohiro KOSAKI [ruby-core:28063]
-
-Sun Feb 28 11:21:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/openssl/{test_x509cert.rb,openssl,test_x509req.rb}:
- remove false positive tests because of OpenSSL spec change.
- patched by Motohiro KOSAKI [ruby-core:28063]
- see also [ruby-dev:40077]
-
-Sun Feb 28 11:25:16 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c (pack_pack): generalized integer packer implemented.
- (pack_unpack): generalized integer unpacker implemented.
-
-Sun Feb 28 06:58:53 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c (swap32): use __builtin_bswap32 on gcc 4.3.0 or later.
- (swap64): ditto.
-
-Sun Feb 28 00:38:18 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c: use integer types with explicit size.
-
-Sat Feb 27 15:54:55 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c: check assumption on QUAD_SIZE and SIZEOF_LONG.
-
- * bignum.c: check assumption on SIZEOF_LONG and SIZEOF_BDIGITS.
-
-Sat Feb 27 03:48:18 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c: fix q and Q for big endian environments which have no
- 8 bytes integer type.
- (pack_pack): use rb_big_pack.
- (pack_unpack): use rb_big_unpack.
-
- * include/ruby/intern.h (rb_big_pack): declared.
- (rb_big_unpack): ditto.
-
- * bignum.c (rb_big_pack): new function.
- (rb_big_unpack): ditto.
-
-Fri Feb 26 21:36:51 2010 Tanaka Akira <akr@fsij.org>
-
- * bignum.c: fix rb_quad_pack and rb_quad_unpack for environments
- which don't have 8bytes integer type. This still depends on little
- endian.
- (rb_quad_pack): use quad_buf_complement. don't raise for large
- values.
- (rb_quad_unpack): use quad_buf_complement.
- (quad_buf_complement): new function extracted from rb_quad_pack.
- add one after bitwise negation.
-
-Fri Feb 26 21:29:48 2010 Tanaka Akira <akr@fsij.org>
-
- * configure.in (RSHIFT): add parenthesis to suppress warning.
-
-Fri Feb 26 20:51:47 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/socket/raddrinfo.c, ext/socket/udpsocket.c: avoid illegal cast
- from void-returning function to VALUE-returning one. It causes SEGV
- on RubySpec with mingw32.
-
-Fri Feb 26 20:07:48 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c (QUAD_SIZE): it should be always 8.
-
- * bignum.c (rb_quad_pack): use LONG_LONG version only if
- SIZEOF_LONG_LONG == QUAD_SIZE.
-
-Fri Feb 26 16:49:29 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * pack.c (swap64): fix for VC6.
-
-Fri Feb 26 14:17:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * pack.c (pack_pack, pack_unpack): suppressed warnings.
-
-Fri Feb 26 07:44:51 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/dl: revert dl with libffi because it can't run on mswin now.
-
-Thu Feb 25 22:59:46 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c: consider DYNAMIC_ENDIAN. refactored.
-
-Thu Feb 25 11:17:01 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * rational.c (nurat_expt): use Float#** when Rational ** Float.
- This fixes Rational(3,1)**3.0=>26.99999999999999 on FreeBSD.
-
- * complex.c (rb_fexpt): removed.
- Note that this function is not static but is private.
-
-Thu Feb 25 00:43:57 2010 Koichi Sasada <ko1@atdot.net>
-
- * insns.def: Change the operand type of setinlinecache
- (OFFSET to IC). This IC must be same as corresponding
- getinlinecache instruction's IC operand.
- This change is for a little performance improvement
- (getting IC directly) and is for the AOT compilation development.
-
- * compile.c, iseq.c, insns.def: Change the approach to handling inline
- cache (IC) type operand to enable the above change.
- This change also affects ISeq#to_a method. The inline cache operand
- will be dumped by fixnum, the index of inline cache, in other words,
- inline cache identity.
-
- * template/insns_info.inc.tmpl, tool/instruction.rb: No need to count
- inline cache size (insn_iclen()).
-
-Thu Feb 25 00:57:59 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c (swap64): don't redefine.
-
-Thu Feb 25 00:29:55 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c (pack_unpack): don't use OFF32 for gcc 4.5.
-
-Wed Feb 24 22:39:15 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb: fix [ruby-core:28320] reported by Paul Clegg.
- (Resolv::DNS::Requester#request): raise ResolvTimeout
- consistently for timeout.
-
-Wed Feb 24 14:38:16 2010 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/indexer: Removed obsolete files.
-
-Wed Feb 24 11:52:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (translit_separator): moved back from load.c again.
-
- * dln_find.c: split from dln.c.
-
-Wed Feb 24 09:31:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/digest/extconf.rb: use OpenSSL only when all transform
- functions are available.
-
-Wed Feb 24 00:39:17 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * string.c (str_new_empty): String#split, partition, rpartition
- taints the resulting strings if self is tainted.
-
-Mon Feb 22 21:35:33 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/digest/sha2/sha2init.c: test OpenSSL more strictly.
-
-Mon Feb 22 11:52:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems: update to 1.3.6.
-
-Mon Feb 22 11:21:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/digest/sha2: Use OpenSSL's SHA1 engine if available.
-
-Sun Feb 21 21:20:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile, install_files): honor srcprefix
- argument if given. [ruby-dev:40449]
-
-Sun Feb 21 13:29:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems/rubygems_version.rb: outdated. [ruby-core:28275]
-
-Sun Feb 21 06:24:12 2010 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/setup (config.h): HAVE_STRUCT_TIMEZONE, VOID_UNSETENV, and RUBY_LIB_VERSION_STYLE defined.
- * symbian/setup (ruby.mmp): SOURCE node.c added.
-
-Mon Feb 22 09:15:45 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (gc_mark_children): lost comment added.
-
-Sat Feb 20 14:42:19 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (r_object0): should prepare placeholder before
- processing instance variables. [ruby-dev:40414]
-
- * marshal.c (id2encidx): no longer need arg.
-
-Sat Feb 20 14:36:16 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm.c (vm_backtrace_each): use called_id when method definition
- structure is already freed. [ruby-dev:40234] [ruby-core:27959]
-
-Fri Feb 19 00:04:19 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/drb/drb.rb (DRbServer#stop_service): join killed thread to
- ensure service stops. [ruby-dev:40441]
-
-Thu Feb 18 22:31:15 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * math.c (math_atanh): raise ERANGE without calling atanh if absolute
- value is 1 to achieve platform-independent math. [ruby-core:28219]
-
- * math.c (math_lgamma): return [Infinity, 1] without calling lgamma_r
- if argument is infinity or -infinity. [ruby-core:28219]
-
-Thu Feb 18 22:28:00 2010 Kenta Murata <mrkn@mrkn.jp>
-
- * configure.in: new --with-ext and --with-out-ext options for extmk.
- * tool/mkconfig.rb: normalizing --with-out-ext to --without-ext.
-
-Thu Feb 18 21:50:00 2010 Tanaka Akira <akr@fsij.org>
-
- * pack.c (pack_unpack): call PACK_ITEM_ADJUST for 'Q'.
-
-Thu Feb 18 02:14:26 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (io_fread, io_getpartial, io_read, io_sysread): by using lock,
- prohibit modification of buffer string during read (which had caused
- EFAULT or SEGV). [ruby-dev:40437]
-
- * test/ruby/test_io.rb: rewrite tests for the old behavior.
-
-Wed Feb 17 21:34:01 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * regcomp.c (setup_tree, onig_compile): optimize .* at last by
- converting into (?>.*), which does not backtrack. [ruby-core:27791]
-
- * test/ruby/test_regexp.rb: add a test for above.
-
-Wed Feb 17 21:26:53 2010 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (assert_normal_exit): add :timeout option.
-
-Wed Feb 17 17:05:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_call_cfunc): removed unused variable.
-
- * vm.c (vm_frametype_name): define only when VMDEBUG.
-
-Wed Feb 17 15:34:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/dl_conversions.c (rb_dl_type_to_ffi_type): support signed
- long long.
-
- * ext/dl/cfunc.c (rb_dlcfunc_inspect): get rid of overflow.
-
- * ext/dl/closure.c (dlc_callback, rb_dlclosure_init): ditto.
-
- * ext/dl/cptr.c (rb_dlptr_s_malloc): ditto.
-
- * ext/dl/method.c (rb_dlfunction_initialize): ditto.
-
-Wed Feb 17 01:16:12 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * hash.c (hash_update): always raise an exception when adding a new
- key during iteration. Traditionally, an exception was raised only
- when rehash occurs, but it may lead to difficult bug to reproduce.
- [ruby-core:23614]
-
-Tue Feb 16 22:09:27 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * gc.c (chain_finalized_object): fix precedence.
-
-Tue Feb 16 21:32:01 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * gc.c (rb_objspace_call_finalizer): always run finalizer at exit,
- before object is free'd. [ruby-dev:40382]
-
-Tue Feb 16 20:56:39 2010 Tanaka Akira <akr@fsij.org>
-
- * file.c (rb_group_member): renamed from group_member.
- don't use group_member() in glibc because it's not valgrind clean.
- http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=570047
-
-Tue Feb 16 19:19:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/cfunc.c (rb_dlcfunc_call): convert signed value to
- unsigned.
-
-Tue Feb 16 19:02:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/dl/test_{base,handle}.rb: use more verbose assertions.
-
- * test/dl/test_import.rb (DL::LIBC::BoundQsortCallback): renamed
- to get rid of overwriting warning.
-
-Tue Feb 16 11:03:19 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/dl/method.c: Adding DL::Method as a superclass for DL::Function
-
-Mon Feb 15 23:37:30 2010 Tanaka Akira <akr@fsij.org>
-
- * io.c: check lseek error by errno. NetBSD 4.0.1 may return -1 as
- a file position of tty.
-
-Mon Feb 15 23:08:56 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/pstore.rb (PStore#initialize): initialize @thread_safe.
- [ruby-core:27853]
-
-Mon Feb 15 22:45:26 2010 Tanaka Akira <akr@fsij.org>
-
- * st.c (st_foreach): don't access ptr->hash after func call.
- It may access freed area.
-
-Mon Feb 15 22:25:16 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/zlib/zlib.c (zlib_mem_alloc): suppress valgrind warnings.
- http://www.zlib.net/zlib_faq.html#faq36
-
-Mon Feb 15 22:18:49 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_add): propagate fixed time offset.
-
-Mon Feb 15 17:42:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * signal.c (USE_SIGALTSTACK): NetBSD can't use sigaltstack(2)
- with pthread.
- http://netbsd.gw.com/cgi-bin/man-cgi?sigaltstack++NetBSD-current
-
-Mon Feb 15 13:11:47 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * array.c (rb_ary_push_m): use rb_ary_modify instead of
- rb_ary_modify_check. This fixes regression due to r26632.
-
-Sun Feb 14 12:54:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (r_object0): removed duplicated entry for regexp.
- [ruby-dev:40416]
-
-Sun Feb 14 04:45:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (r_object0): register regexp object before encoding
- name. [ruby-dev:40414]
-
- * re.c (rb_reg_alloc, rb_reg_init_str): split from rb_reg_new_str.
-
-Sat Feb 13 17:07:20 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_delete): RDoc update. a patch from Hugh Sasse.
- [ruby-core:28128]
-
- * array.c (rb_ary_compact_bang): ditto.
-
-Sat Feb 13 15:01:24 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (id2encidx): duplicated entry for encoding name.
- [ruby-dev:40388]
-
-Sat Feb 13 12:17:52 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/tempfile.rb (Tempfile::Remover): new class to replace
- Tempfile.callback. port r24902 from Ruby 1.8.
-
-Fri Feb 12 17:55:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (thread_free): fixed typo.
-
-Fri Feb 12 02:27:39 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (Set#initialize, Set#replace, Set#merge)
- (Set#subtract, Set#&): Fix duck type tests. [ruby-core:28078]
-
- * lib/set.rb (Set#initialize, Set#replace, Set#merge)
- (Set#subtract, Set#&): Try #each if #each_entry fails.
-
-Thu Feb 11 20:43:00 2010 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_oflags_modestr): return "r" for O_RDONLY|O_APPEND.
- [ruby-dev:40379]
-
-Thu Feb 11 19:19:21 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * missing/alloca.c: s/RUBY_LIB/RUBY_LIB_PREFIX/ [ruby-dev:40395]
-
-Thu Feb 11 17:52:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_exec): reset thread state before restarting vm loop
- from catch scope. [ruby-core:28129], [ruby-core:28143]
-
-Thu Feb 11 14:43:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (r_object0): read sequentially since marshal source
- may not be possible to rewind. [ruby-dev:40386]
-
- * marshal.c (r_object0): replace non-1.8 escapes directly.
-
-Thu Feb 11 09:49:31 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb: fix [ruby-core:28144] reported by Hans de Graaff.
- (Resolv::DNS#make_requester): pass nameserver_port to
- UnconnectedUDP.new.
- (Resolv::DNS.bind_random_port): change the is_ipv6 argument to
- bind_host.
- (Resolv::DNS::Requester#initialize): change instance variable to
- store multiple sockets.
- (Resolv::DNS::Requester#request): pass readable sockets to
- recv_reply.
- (Resolv::DNS::Requester#close): close all sockets.
- (Resolv::DNS::Requester::UnconnectedUDP#initialize): allocate
- a socket for each address family of name servers.
- (Resolv::DNS::Requester::UnconnectedUDP#recv_reply): read from the
- passwd readable socket.
- (Resolv::DNS::Requester::UnconnectedUDP#sender): use appropriate
- socket for the target nameserver.
- (Resolv::DNS::Requester::ConnectedUDP): follow the instance variable
- change.
- (Resolv::DNS::Requester::TCP#sender): ditto.
- (Resolv::DNS::Config#nameserver_port): new method.
-
-Thu Feb 11 01:45:04 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm.c (vm_exec): temporarily revert r26628, which causes SEGV when
- executing rubyspec.
-
-Wed Feb 10 16:31:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_push_m, rb_ary_unshift_m, rb_ary_aset),
- (rb_ary_insert, rb_ary_replace, rb_ary_concat),
- (rb_ary_uniq_bang, rb_ary_flatten_bang): check if frozen after
- wrong number of arguments but before TypeError.
- [ruby-core:28140]
-
- * hash.c (rb_hash_replace): ditto.
-
- * string.c (rb_str_replace): ditto.
-
-Wed Feb 10 04:06:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_exec): reset thread state before starting vm loop.
- [ruby-core:28129]
-
-Tue Feb 9 23:48:25 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_divide): fix precision too.
-
-Tue Feb 9 23:26:07 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): fix precision.
- [ruby-core:17472][ruby-dev:35372][ruby-dev:40105][ruby-dev:40358]
-
-Tue Feb 9 22:23:27 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (READ_CHECK): do not select fd before reading, that had made
- TCPServer#gets stuck. [ruby-dev:40317]
-
-Tue Feb 9 21:27:38 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/rexml/text.rb (REXML::Text#initialize): REXML::Text.new checks
- raw text for illegal characters without entity check, for the sake
- of 1.8 compatibility. This had caused rubyspec error.
-
-Mon Feb 8 23:49:24 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_getline_fast): wrong calculation of new position
- from rb_str_coderange_scan_restartable(). [ruby-core:28103]
-
- * io.c (read_all): ditto.
-
- * sprintf.c (rb_str_format): ditto.
-
-Mon Feb 8 21:03:53 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (socket_s_ip_address_list): obtain the scope_id
- of IPv6 link local address on OpenSolaris.
-
-Mon Feb 8 16:27:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dmyversion.c: empty load path in miniruby.
-
- * common.mk (COMPILE_PRELUDE): rbconfig is loaded on demand.
-
- * tool/eval.rb, win32/{mkexports,resource}.rb: miniruby no longer
- contains "." in $:.
-
-Mon Feb 8 15:15:07 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_clone): call initialize_clone hook method to
- call initialize_copy.
-
- * object.c (rb_obj_dup): call initialize_dup hook.
-
- * lib/delegate.rb (Delegator#initialize_clone): use new hook to
- implement deep copy. [ruby-dev:40242]
-
- * lib/delegate.rb (Delegator#initialize_dup): ditto.
-
- * test/test_delegate.rb (TestDelegateClass#test_copy_frozen): add
- a test to ensure #clone copies frozen status.
-
-Mon Feb 8 10:28:58 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in: check pthread_attr_getstack to prevent obsolete
- warning for pthread_attr_getstackaddr.
-
-Sun Feb 7 23:12:34 2010 Tanaka Akira <akr@fsij.org>
-
- * sample/test.rb: sort files for syntax validation.
-
-Sun Feb 7 23:08:53 2010 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb: sort test files.
-
-Sun Feb 7 12:53:12 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/rake.rb (Rake::FileList::ARRAY_METHODS): fix test failure by <=>
- definition at Kernel.
-
-Sun Feb 7 03:01:46 2010 Tanaka Akira <akr@fsij.org>
-
- * math.c (math_lgamma): initialize sign because
- lgamma(NaN) doesn't set the sign in OpenSolaris.
-
-Sun Feb 7 00:23:21 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * class.c (rb_class_init_copy): raise a TypeError if the argument is
- BasicObject. [ruby-core:27060]
-
-Sat Feb 6 23:37:11 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (initialize): set @sock to a NullSocket instance to
- raise FTPConnectionError when not connected. [ruby-dev:40258]
-
-Sat Feb 6 23:25:57 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/curses/view2.rb: replaced with Hugh Sasse's version.
- [ruby-core:27894]
-
-Sat Feb 6 22:57:00 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (receive_responses): does not hang when an
- unexpected BYE response received. fixed [ruby-core:27944].
- Thanks, Bob Potter.
-
-Sat Feb 6 21:31:23 2010 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/monitor.rb (wait): supported timeout.
-
- * test/net/imap/test_imap.rb (test_exception_during_idle): use timeout.
-
-Sat Feb 6 19:35:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * tool/compile_prelude.rb: fix require path.
-
-Sat Feb 6 12:02:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/delegate.rb (Delegator#method_missing),
- (Delegator.delegating_block): don't hide backtrace from
- __getobj__ and reduced exception messages when $DEBUG.
-
-Sat Feb 6 11:35:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/ipsocket.c (ip_addr, ip_peeraddr),
- ext/socket/socket.c (sock_s_getaddrinfo): added optional
- reverse_lookup flag. [ruby-core:28007]
-
-Sat Feb 6 01:55:02 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/stringio/stringio.c (strio_ungetc): pads with \000 when the
- current position is after the end. [ruby-dev:40271]
-
-Sat Feb 6 01:14:54 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/purelib.rb, common.mk: to simulate ruby command more precisely,
- remove "." from $: of virtual environment for build and test.
-
-Sat Feb 6 00:02:31 2010 Tanaka Akira <akr@fsij.org>
-
- * random.c (fill_random_seed): don't use O_NOFOLLOW because
- /dev/urandom is a symlink in OpenSolaris.
-
- * lib/securerandom.rb (SecureRandom.random_bytes): ditto.
-
-Fri Feb 5 16:38:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/delegate.rb (Delegator): include copy of Kernel.
- [ruby-dev:40314]
-
- * lib/delegate.rb (Delegator#{dup,clone}): class of copy should be
- Delegator. [ruby-dev:40313]
-
-Fri Feb 5 09:26:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * bignum.c (big_op): remove unused variables.
-
-Fri Feb 5 02:06:57 2010 Aaron Patterson <tenderlove@ruby-lang.org>
-
- * lib/yaml/rubytypes.rb: Struct members are emitted without a leading
- colon. Thanks Yusuke Endoh! [ruby-core:28052]
-
- * test/yaml/test_struct.rb: fixed tests to go with Struct changes
-
- * test/yaml/test_yaml.rb: fixed tests to go with Struct changes
-
-Fri Feb 5 00:34:24 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c (big_gt, big_ge, big_lt, big_ge): added Bignum#>, >=, < and
- <= to allow to compare with BigDecimal. [ruby-dev:40167]
-
-Thu Feb 4 15:47:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * thread_pthread.c (native_thread_init_stack): use get_stack.
- patched by KOSAKI Motohiro [ruby-dev:40309]
-
- * thread_pthread.c (ruby_init_stack): use get_stack
- on platforms which have pthread_attr_get_np.
- (FreeBSD, DragonFlyBSD and NetBSD)
- This is because FreeBSD and DragonFly BSD must use
- pthread_attr_get_np to get stack size of main thread,
- but Mac OS X and Linux with LinuxThreads must use getrlimit.
- <http://www.nminoru.jp/~nminoru/programming/stackoverflow_handling.html>
- <http://d.hatena.ne.jp/nurse/20100204>
-
-Thu Feb 4 09:55:38 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in: FreeBSD, DragonFly BSD and OpenBSD needs
- pthread_np.h to use pthread_*_np functions.
- OpenBSD's pthread_*_np also depend sys/signal.h,
- but it is included at signal.h via vm_core.h via thread.c.
-
-Thu Feb 4 08:15:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/delegate.rb (Delegator): now inherits BasicObject.
- [ruby-dev:39154], [Bug #2679], [ruby-dev:40242]
-
-Thu Feb 4 03:00:59 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): get red of
- floating point exception.
-
-Thu Feb 4 01:24:01 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): fix infinity
- handling. 1 / Infinity was evaluated to NaN.
-
-Thu Feb 4 00:37:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (time_mdump, time_mload): dump/load utc_offset.
- [ruby-dev:40063]
-
-Wed Feb 3 22:22:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check for non-portable stack attribute functions.
-
-Wed Feb 3 20:10:52 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/iconv/charset_alias.rb: pass block argument to outer local
- variable.
-
-Wed Feb 3 20:08:05 2010 Tanaka Akira <akr@fsij.org>
-
- * file.c (realpath_rec): rb_path_last_separator may return NULL.
-
-Wed Feb 3 13:15:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * thread_pthread.c: DragonFlyBSD is also the same as FreeBSD
- on getting the stack size of the main thread.
-
-Wed Feb 3 12:30:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * thread_pthread.c (ruby_init_stack): use pthread_get_attr_np
- to get the stack size of the main thread on FreeBSD.
-
- * thread_pthread.c: include pthread_np.h on FreeBSD.
-
-Wed Feb 3 11:38:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/{closure,function}.c: removed C99 features and warnings.
-
-Wed Feb 3 10:12:09 2010 Aaron Patterson <tenderlove@ruby-lang.org>
-
- * ext/dl/function.c: DL::Function now uses libffi
-
- * ext/dl/cfunc.c (rb_dl_set_last_error): set to non static so errors
- can be exposed.
-
- * ext/dl/closure.c: DL::Closure will now be used in place of
- ext/dl/callback/*.
-
- * ext/dl/dl.c: legacy callbacks removed in favor of libffi
-
- * ext/dl/dl_conversions.(c,h): used for converting ruby types to FFI
- types.
-
- * ext/dl/callback/*: replaced by libffi callbacks.
-
- * ext/dl/lib/dl/callback.rb: Converting internal callbacks to use
- DL::Closure
-
- * ext/dl/lib/dl/closure.rb: Ruby parts of the new DL::Closure object
-
- * ext/dl/lib/dl/import.rb: More conversion to use DL::Closure object
-
- * ext/dl/lib/dl/value.rb (ruby2ffi): adding private method for
- DL::CPtr to ffi value conversion.
-
-Tue Feb 2 18:15:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/socket.c: turn on do_not_reverse_lookup by default,
- which has been reverted in r9880 probably unintentionally,
- according to matz. [ruby-core:24530]
-
-Tue Feb 2 14:46:06 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c: move implementation of each_slice, each_cons,
- each_with_object to enum.c.
-
- * enum.c (each_slice_i): convert multiple values from yield into
- an array.
-
- * enum.c (each_cons_i): ditto.
-
- * enum.c (each_with_object_i): ditto.
-
-Tue Feb 2 14:30:27 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_each_entry): new method #each_entry to pack values
- from yield into an array.
-
- * lib/set.rb (Set#merge): use Enumerable#each_entry to implement
- Set compatible to 1.8 behavior. [ruby-core:27985]
-
- * lib/set.rb: replace is_a?(Enumerable) with respond_to?(:each)
- for duck typing.
-
- * lib/set.rb (SortedSet#add): typo fixed.
-
-Tue Feb 2 11:13:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/delegate.rb (Delegator#marshal_dump): exclude
- delegator-specific instance variables.
-
-Mon Feb 1 21:26:41 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/matrix.rb (Vector#each2): returns a self. [ruby-dev:40241]
-
-Mon Feb 1 17:08:42 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flo_minus): RDoc update. a patch from red stun
- in [ruby-core:27951]
-
-Mon Feb 1 07:36:33 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tkutil/tkutil.c: fix SEGV on TkUtil::CallbackSubst._setup_subst_table.
-
- * ext/tk/lib/tk.rb: [ruby1.9] fix freeze at exit.
-
- * ext/tk/lib/tk.rb: [POTENTIAL INCOMPATIBLE] return NoMethodError
- for TkWindow#to_ary and to_str.
-
- * ext/tk/lib/tkextlib/tcllib/plotchart.rb: wrong arguments.
-
- * ext/tk/sample/tkballoonhelp.rb: fail to support TkEntry widgets.
-
-Sun Jan 31 23:20:43 2010 wanabe <s.wanabe@gmail.com>
-
- * io.c (rb_io_each_codepoint): use cbuf when needs readconv.
-
-Sun Jan 31 23:07:23 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_dir.rb: use string instead of symbol as file name.
-
-Sun Jan 31 22:41:33 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * string.c (rb_string_value): fix the previous commit.
-
-Sun Jan 31 21:43:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * string.c (rb_string_value): make no exception for Symbol.
- [ruby-dev:40274]
-
-Sun Jan 31 21:10:15 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_insnhelper.c (vm_throw): fixed infinite loop. [ruby-core:27969]
-
-Sun Jan 31 21:29:58 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/rexml/text.rb (REXML::Text#initialize): do Text.check only when
- parent is specified, since Text.check may need doctype. partially
- revert r26518.
-
-Sun Jan 31 15:50:34 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/rexml/text.rb (REXML::Text#initialize): fix typo and a bug that
- seems to be caused by refactoring.
-
-Sun Jan 31 15:46:37 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/rexml/parent.rb (REXML::Parent#delete): return the deleted node
- because the rdoc of REXML::Element#delete_element says it returns
- "the element that was removed." [REXMLTracker#161]
-
-Sun Jan 31 14:33:00 2010 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: A bug fix for deleting blank Table rows from Andy Hartford.
-
-Sun Jan 31 13:31:43 2010 wanabe <s.wanabe@gmail.com>
-
- * gc.c (obj_free): free rb_classext_t of eigenclass. [Bug #1392]
-
-Sun Jan 31 13:00:14 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/rexml/document.rb (REXML::Document#add): fix duplicate XMLDecls
- and bad DocTypes in REXML::Document. (Bug #19058) [ruby-core:27979]
- based on the patch by Federico Builes.
-
-Fri Jan 29 22:49:21 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/getoptlong.rb (set_options): ensure that the type of argument is
- Array, restoring this check that was deleted at r10239. This caused
- rubyspec error.
-
-Fri Jan 29 12:59:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (mingw): needs $(DEFFILE) for extension libraries.
- [ruby-core:27946]
-
-Fri Jan 29 11:09:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (try_do): log no source when no development env.
-
- * lib/mkmf.rb (create_makefile): srcprefix always needs $(srcdir).
-
- * lib/mkmf.rb (create_makefile): yield configuration if a block is
- given.
-
-Fri Jan 29 09:43:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/utf8_mac.trans (buf_shift_char): don't see uninitialized
- value. [ruby-dev:40233]
-
-Fri Jan 29 01:42:24 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator#initialize_copy): use initialize_copy
- instead of overriding clone/dup. [ruby-dev:40221]
- it now always clones the target, it might cause incompatibility.
-
-Fri Jan 29 01:26:53 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_to_i): update RDoc to
- denote that #to_i raises FloatDomainError for Inf and NaN.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_to_i): fast #to_i using
- BigDecimal_split().
-
- * bignum.c (conv_digit): use faster ISDIGIT() assuming ASCII.
-
-Fri Jan 29 00:18:54 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/cgi.rb: set autoload to CGI::HtmlExtension. [ruby-dev:40194]
-
-Thu Jan 28 09:44:19 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regcomp.c (onig_compile): initialize ScanEnv.
- mainly to initialize env->warnings_flag [ruby-dev:40196]
-
- * regparse.c (scan_env_clear): clear warnings_flag.
-
-Wed Jan 27 23:33:21 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/matrix/test_matrix.rb, test/matrix/test_vector.rb: add some
- tests.
-
-Wed Jan 27 23:29:36 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/thread.rb (ConditionVariable#wait, signal, broadcast): return
- self (for 1.8 compatibility).
-
-Wed Jan 27 23:27:54 2010 Keiju Ishitsuka <keiju@emperor2.pendome>
-
- * lib/matrix.rb: add exception Matrix::ErrOperationNotImplemented
- [ruby-dev:40149].
- * lib/matrix.rb: change message of exception
- Matrix::ErrOperationNotDefined [ruby-dev:40150], [ruby-dev:40176].
- * lib/matrix.rb: add method Vector#/ [ruby-dev:40151].
- * lib/matrix.rb(Matrix::Scalar#+,-,/): delete meaningless when
- switch. [ruby-dev:40149]
-
-Wed Jan 27 23:22:54 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * vm_dump.c (bugreport_backtrace): trivial change.
-
- * vm_dump.c (rb_vm_bugreport): uninitialized local variable i.
- [ruby-dev:40169]
-
- * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_segv_test):
- follow above change.
-
-Wed Jan 27 23:20:52 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_exception.rb
- (TestException#test_thread_signal_location):
- change test method name.
-
-Wed Jan 27 22:48:40 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/matrix.rb (determinant): fix name error.
-
-Wed Jan 27 22:26:25 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_eval.c (rb_backtrace): "circular require" warning was output to
- stdout except the first line. All line is output to stderr now.
- [ruby-dev:40147]
-
-Wed Jan 27 00:22:20 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod, BigDecimal_mod,
- BigDecimal_divmod, BigDecimal_div2): BigDecimal#% and #div returned
- an array itself that was returned by #divmod.
-
-Wed Jan 27 00:19:30 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (VpCtoV): do not raise infinity
- exception for BigDecimal("0E200000000000").
-
-Tue Jan 26 21:50:31 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (VpCtoV): BigDecimal("0E200000000000")
- was Infinity, not 0.
-
- * test/bigdecimal/test_bigdecimal.rb: add a test for above.
-
-Tue Jan 26 21:36:22 2010 Tanaka Akira <akr@fsij.org>
-
- * configure.in: test unsetenv returns a value.
- unsetenv is void in older BSDs (FreeBSD 6 and OpenBSD 4.5 at least).
-
- * hash.c (ruby_setenv): don't use the result of unsetenv if unsetenv
- doesn't return a value.
-
-Tue Jan 26 21:32:03 2010 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/extconf.rb: suppress a warning.
-
- * ext/extmk.rb: ditto.
-
-Tue Jan 26 20:23:22 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm.c (rb_vm_invoke_proc): this function must not catch TAG_RETURN
- because vm_exec does. This caused rubyspec error. [ruby-dev:40158]
-
-Tue Jan 26 20:21:28 2010 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/eq.rb: fix circular require in drb.
- reported by akr. see [ruby-dev:40156] [ruby-core:27661]
-
-Tue Jan 26 19:59:17 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/zlib/zlib.c (rb_gzfile_s_wrap): add rdoc. [Bug #2656]
- patched by Hugh Sasse [ruby-core:27692] [ruby-core:27852]
-
- * ext/zlib/doc/zlib.rd: removed.
-
-Tue Jan 26 16:43:34 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/strscan/strscan.c: fix rdoc. (length -> bytesize)
- reported by Kornelius Kalnbach. see [ruby-core:27792]
-
-Tue Jan 26 07:06:05 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/matrix.rb: suppress warnings.
-
-Tue Jan 26 03:16:45 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * cont.c, vm_core.h, eval.c: because rb_protect must not be jumped by
- callcc, revert r26407. And rename trap_tag to protect_tag and
- change exception message (across trap -> across stack rewinding
- barrier).
-
-Mon Jan 25 23:08:10 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread.c (do_select): wrong conditions. [ruby-core:27753]
-
-Mon Jan 25 22:31:53 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/envutil.rb: use method_defined? instead of
- instance_methods.include?.
-
-Mon Jan 25 22:08:20 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * cont.c (rb_cont_call, cont_restore_1): remove trap_tag check because
- it seems not to make sense. [ruby-dev:40121]
-
- * vm_core.h, eval.c (rb_protect): ditto.
-
-Mon Jan 25 21:43:05 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/envutil.rb: fix the check if instance method `ruby' is
- defined or not.
-
-Mon Jan 25 21:17:32 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_rubyoptions.rb (test_segv_test): add a test for
- bugreport trace dumper.
-
-Mon Jan 25 17:47:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/pty/pty.c (pty_check): needs WNOHANG to poll, return $?, and
- call raise_from_check() with pid_t. [ruby-dev:40141]
-
-Mon Jan 25 17:36:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * version.c (RUBY_LIB, RUBY_*_LIB): moved from configures.
-
-Mon Jan 25 12:11:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (USE_SIGALTSTACK): only when SA_SIGINFO also is
- available. see [ruby-core:27768].
-
-Mon Jan 25 12:02:34 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * dln.c, file.c, io.c, signal.c: add __HAIKU__.
- patched by Alexander von Gluck [ruby-core:27767]
-
-Mon Jan 25 11:45:47 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * math.c (domain_check): ignore errno if y is inf.
- r26335 is because NetBSD 5.0's asin and acos returns
- 0.0 with errno EDOM. But it breaks Linux whose gamma returns inf
- with errno ERANGE on.
-
-Sun Jan 24 22:48:05 2010 Koichi Sasada <ko1@atdot.net>
-
- * eval.c, vm.c, vm_eval.c, vm_insnhelper.c: fix issues about
- return and c-return trace. This issue skips (c-)return event
- with global jump such as break or return. This fix make vm invoke
- hooks at stack rewind timing. fix [ruby-core:27606] [Bug #2610].
-
- * test/ruby/test_settracefunc.rb: add a test for above.
-
-Sun Jan 24 14:21:48 2010 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_enc_strlen_cr): increment by rb_enc_mbminlen(enc) for
- broken byte sequence. [ruby-core:27748]
- (rb_str_inspect): ditto.
-
-Sun Jan 24 05:18:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_start_func_2): unlock all locking mutexes
- before clean up. [ruby-core:26877]
-
- * thread.c (rb_thread_atfork): no other threads to be joined.
-
- * vm_core.h (rb_thread_lock_unlock, rb_thread_lock_destroy):
- new functions.
-
- * vm.c (ruby_vm_destruct): unlock and destroy global VM lock.
-
-Sun Jan 24 00:31:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rdoc/parser/ruby.rb: fix typo.
- patched by Hal Brodigan [ruby-core:21536]
-
-Sun Jan 24 00:02:18 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rdoc/markup/to_html_crossref.rb: fix failure of the test.
- patched by Tomoyuki Chikanaga and nobu [ruby-core:20564]
-
-Sat Jan 23 23:27:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * dir.c (dir_s_glob): add rdoc by Roger Pack. [ruby-core:27669]
-
-Sat Jan 23 23:12:56 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rdoc/generator/html.rb (RDoc::Generator::HTML#gen_into):
- make the rdoc(generating html) run faster and use less memory.
- patch by Tetsu Soh [ruby-core:27656]
-
-Sat Jan 23 19:54:48 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE.ole_initialize,
- WIN32OLE.ole_uninitialize to use in win32ole.rb.
- You must not use these methods.
-
- * ext/win32ole/lib/win32ole.rb: add win32ole.rb
- re-define Thread#initialize (fix ruby-core:27634)
-
-Sat Jan 23 00:25:19 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * sample/coverage.rb: preserve exit status.
-
-Sat Jan 23 00:21:18 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_dir.rb: get rid of debug print.
-
- * test/ruby/test_module.rb: fixed to make test-all work.
-
-Fri Jan 22 23:54:04 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_array.rb: add a test for Array#rotate, rotate!.
-
- * test/ruby/test_dir.rb, test/ruby/test_fnmatch.rb: add some tests
- (for coverage of dir.c).
-
- * test/ruby/test_enum.rb: add a test for Enumerable#minmax.
-
- * test/ruby/test_enumerator.rb: add some tests for Enumerator#inspect,
- Enumerator::Generator and Yielder.
-
- * test/ruby/test_env.rb: add a test for ENV#index.
-
- * test/ruby/test_exception.rb: add some tests (for coverage of
- error.c).
-
- * test/ruby/test_hash.rb: add a test for recursive check.
-
- * test/ruby/test_integer.rb: add a test for number of argument of
- Integer.
-
- * test/ruby/test_method.rb: add a test for define_method.
-
- * test/ruby/test_module.rb: add a test for constant of included
- module.
-
- * test/ruby/test_proc.rb: add a test for parameters with cfunc.
-
-Fri Jan 22 23:50:03 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_regexp.rb, test/ruby/test_symbol.rb,
- test/ruby/test_variable.rb: add some tests (for coverage of
- compile.c).
-
-Fri Jan 22 21:05:34 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_mload): add submicro into vtm.subsecx. [ruby-dev:40133]
-
-Fri Jan 22 14:26:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (rdoc): needs encodings and exts.
-
-Fri Jan 22 14:16:18 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in: add missing comma.
-
-Fri Jan 22 01:07:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_bignum.rb, test/ruby/test_class.rb,
- test/ruby/test_defined.rb, test/ruby/test_hash.rb,
- test/ruby/test_primitive.rb, test/ruby/test_variable.rb: add some
- tests (for coverage).
-
-Fri Jan 22 01:03:28 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_require.rb (test_define_class): expect TypeError
- instead of NameError. [ruby-core:27504]
-
-Thu Jan 21 15:09:35 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * configure.in: some tidy.
-
-Thu Jan 21 11:15:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_rotate): new methods, Array#rotate! and
- Array#rotate. [ruby-dev:17194]
-
- * array.c (rb_ary_reverse_m): copy directly.
-
-Thu Jan 21 09:38:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: use AS_CASE instead of when, to get rid of
- an unintentional substitution.
-
-Thu Jan 21 08:45:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (iseq_s_disasm): check for proc first. based on the
- patch by Roger Pack in [ruby-core:27626]. [ruby-core:27227]
-
-Wed Jan 20 16:09:59 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * common.mk (compile.$(OBJEXT)): dependencies lacking.
-
- * vm_method.c (rb_add_method_cfunc): invalid initializer for C89
-
- * compile.c (iseq_insns_unification): int might be smaller than int*
-
-Tue Jan 19 20:00:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/resolv.rb (Resolv::Config.default_config_hash): return an
- empty hash when resolv.conf is not available. [ruby-core:27620]
-
- * lib/resolv.rb (Resolv::DNS::Config#lazy_initialize): fixed the
- defaults of nameserver and port.
-
-Tue Jan 19 14:29:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (clean-ext): allow glob patterns.
-
- * ext/extmk.rb: ditto.
-
-Tue Jan 19 14:19:26 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/zlib/{extconf.rb, zlib.c): crc32_combine and adler32_combine is
- supported on Zlib 1.2.2.1, so check them for old zlib.
-
-Tue Jan 19 09:03:37 2010 Aaron Patterson <tenderlove@ruby-lang.org>
-
- * ext/zlib/zlib.c: added Zlib.crc32_combine and Zlib.adler32_combine
-
- * test/zlib/test_zlib.rb: corresponding tests [ruby-core:27551]
-
-Tue Jan 19 02:02:32 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_array.rb: add some tests (for coverage).
-
- * test/ruby/test_bignum.rb: ditto.
-
-Tue Jan 19 01:57:12 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_bignum.rb: some coerce definitions (for test) was
- wrong.
-
-Tue Jan 19 01:53:11 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c (bigsub_int): remove nonsense loop.
-
-Tue Jan 19 01:42:36 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y (top_compstmt, top_stmts, top_stmt): prohibit BEGIN {} in
- non-toplevel scope. [ruby-core:21657]
-
- * test/ruby/test_beginendblock.rb (test_begininclass): add a test for
- above.
-
-Mon Jan 18 17:16:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/webrick/httpservlet/filehandler.rb (make_partial_content):
- add bytes-unit. [ruby-dev:40030]
-
-Mon Jan 18 15:49:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTPHeader#{content_range,range_length}):
- use inclusive range same as the header representation.
-
-Mon Jan 18 03:59:57 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_instance_hexdigest_bang): Fix
- rdoc.
-
- * ext/digest/lib/digest.rb (Digest::Class.base64digest)
- (Digest::Instance#base64digest{,!}): New methods.
-
-Sun Jan 17 22:48:44 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_instance_digest)
- (rb_digest_instance_hexdigest): Save a method call of reset()
- for a disposable clone.
-
-Sun Jan 17 19:24:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * math.c (domain_check): check errno first.
- NetBSD 5.0's asin and acos returns 0.0 with errno EDOM.
-
-Sun Jan 17 14:24:35 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (rb_str_derive): use long.
-
- * ext/iconv/iconv.c (iconv_convert): suppress a warning.
-
- * lib/mkmf.rb (check_signedness): new method.
-
- * lib/mkmf.rb (have_header, create_header): use String#tr_cpp.
-
-Thu Jan 14 13:06:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_hash, int_chr): fixed type.
-
-Thu Jan 14 12:50:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_concat): fixed range check for Fixnum, and
- added checks for integer overflow and invalid char code.
-
-Thu Jan 14 09:34:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_concat): raise RangeError when the argument is
- negative value. [ruby-core:27583]
-
-Thu Jan 14 08:49:59 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_to_r): convert to rational if internal representation
- is not rational.
-
-Thu Jan 14 04:01:50 2010 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_mdump): use nano_num and nano_den instead of subnano to
- avoid Rational class in marshaled data which prevent unmarshal by
- Ruby 1.8.
- (time_mload): use nano_num and nano_den.
-
-Wed Jan 13 11:57:38 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * object.c (rb_class_initialize): Make sure BasicObject doesn't get
- initialized twice [ruby-core:27577]
-
- * class.c (rb_class_init_copy): ditto
-
-Wed Jan 13 06:54:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check for if struct timezone is defined.
-
- * missing.h (struct timezone): define if not defined.
-
- * win32/win32.h (struct timezone): defined in the newer w32api.
- [ruby-core:27515]
-
-Wed Jan 13 00:33:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/shell/command-processor.rb: fix typo by Sho Hashimoto.
- reported and patched at [ruby-dev:40058] [Bug #2599]
-
-Tue Jan 12 23:48:29 2010 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/base.rb, test/rss/test_maker_0.9.rb:
- accept any time format in maker. [ruby-core:26923]
-
-Tue Jan 12 21:56:00 2010 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_set_len): call rb_str_modify.
-
- * file.c (realpath_rec): don't call rb_str_modify before
- rb_str_set_len.
-
-Tue Jan 12 20:44:14 2010 Tanaka Akira <akr@fsij.org>
-
- * file.c (realpath_internal): call rb_secure.
-
-Tue Jan 12 16:48:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTP.start): options may not be given.
-
-Tue Jan 12 16:48:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/readline/readline.c (readline_readline): check if instream
- is closed instead of fd 0.
-
- * ext/readline/readline.c (Init_readline): use STDIN for input.
- Reported by Sora Harakami. See
- http://d.hatena.ne.jp/codnote/20100111/1263174134
-
-Tue Jan 12 16:09:02 2010 wanabe <s.wanabe@gmail.com>
-
- * test/ruby/test_process.rb (test_execopts_env): MANDATORY_ENVS might
- not be a part of ENV. e.g. TMPDIR.
-
-Tue Jan 12 14:07:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTP.start): add hash argument to
- set ssl related options. when use_ssl is set default value
- of verify_mode is OpenSSL::SSL::VERIFY_PEER. [ruby-dev:40003]
-
-Tue Jan 12 14:53:07 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (init_env): use _wputenv() instead of
- SetEnvironmentVariableW() because latter doesn't set msvcrt's environ
- work area, of course.
- [Bug #2552]
-
-Tue Jan 12 13:33:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (realpath_rec): trace symbolic link only when supporting
- readlink().
-
-Tue Jan 12 12:49:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-here-doc-beg-match): fix for here-doc
- which ends with an underscore.
-
-Tue Jan 12 09:58:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * hash.c: need to include errno.h for EINVAL.
-
- * hash.c (ruby_setenv): fixed typo. see [ruby-dev:40026]
-
-Tue Jan 12 09:22:43 2010 Tanaka Akira <akr@fsij.org>
-
- * prelude.rb (require_relative): use File.realpath. [ruby-dev:40040]
-
- * include/ruby/intern.h: declare rb_dir_getwd.
-
- * dir.c (rb_dir_getwd): copied from dir_s_getwd to export.
- (dir_s_getwd): use rb_dir_getwd.
-
- * file.c (rb_file_s_realpath): new method File.realpath.
- (rb_file_s_realdirpath): new method File.realdirpath.
-
- * lib/pathname.rb (Pathname#realpath): use File.realpath.
- (Pathname#realdirpath): use File.realdirpath.
-
-Mon Jan 11 22:45:08 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * hash.c (ruby_setenv): Improve the emulation of setenv(3) on
- environments where putenv(3) is used. Raise EINVAL If a
- variable name contains an '='.
-
-Mon Jan 11 18:16:38 2010 wanabe <s.wanabe@gmail.com>
-
- * vm_insnhelper.h (GET_BLOCK_PTR): return 0 when in class frame.
- [Bug #2583]
-
-Mon Jan 11 16:52:05 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_strlen): added. [ruby-dev:40028]
-
- * include/ruby/intern.h (rb_str_strlen): declared.
-
-Mon Jan 11 13:30:35 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/webrick/accesslog.rb (WEBrick::AccessLog#format): fixed typo.
-
- * lib/webrick/httpstatus.rb (WEBrick::HTTPStatus::Status#initialize):
- accept 0 or more arguments. [ruby-dev:40021]
-
-Mon Jan 11 12:47:58 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * hash.c (ruby_setenv): ENV.[]= should raise an error if setenv(3)
- or putenv(3) fails. [ruby-dev:40023]
-
-Sun Jan 10 17:25:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/webrick/accesslog.rb : Escape needed.
-
- * lib/webrick/httpstatus.rb : ditto.
-
- * lib/webrick/httprequest.rb : ditto.
-
- * lib/webrick/httputils.rb : ditto.
-
- * test/webrick/test_cgi.rb (TestWEBrickCGI::test_bad_): Test for it.
-
-Sun Jan 10 04:54:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * class.c (rb_define_class): raise TypeError same as class
- statement. [ruby-core:27504]
-
-Sun Jan 10 04:41:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (configuration): needs ARCH_FLAG.
-
-Sat Jan 9 14:20:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (install-all): maybe typo.
-
-Sat Jan 9 14:01:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * missing/vsnprintf.c (BSD_vfprintf): get rid of a warning of VC++ x64.
-
-Sat Jan 9 08:40:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/configure.bat (WIN32DIR): regularise file separators.
-
-Fri Jan 8 23:35:18 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * proc.c (mnew): don't check visibility of method body if public
- ZSUPER method is found. [ruby-dev:39767]
-
- * test/ruby/test_method.rb: add a test for above.
-
-Fri Jan 8 22:59:40 2010 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_method.c (rb_alias): skip ZSUPER method when searching body of
- source method. [ruby-dev:39760]
-
- * test/ruby/test_alias.rb: add a test for above.
-
-Fri Jan 8 21:15:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http, lib/net/https: move content from net/https to
- net/http. [ruby-dev:39986]
-
-Fri Jan 8 14:06:01 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (rb_io_s_read): close the IO if an exception is raised on
- seeking. [ruby-core:27429]
-
-Fri Jan 8 13:12:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_symbol): dump no encoding for 7bit only coderange
- symbol. [ruby-core:27375]
-
-Thu Jan 7 07:56:09 2010 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 1.5.0 r5596.
- * test/minitest/*.rb: ditto.
-
-Tue Jan 5 19:30:53 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_exception.rb: add a test. cf [ruby-dev:39116]
-
-Tue Jan 5 02:03:34 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in (DTRACE): clear this when `dtrace -l` fails.
- Note that current FreeBSD needs privilege to call it;
- so to use DTrace on FreeBSD, you should run configure as root.
-
-Mon Jan 4 21:24:18 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * gc.c: added UNLIKELY to probes for optimization.
-
- * vm.c: ditto.
-
- * thread.c: ditto.
-
-Mon Jan 4 09:30:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (TRACING_MODEL): follow yugui's previous changes.
-
-Mon Jan 4 09:30:25 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (InterlockedExchangePointer): old SDK support.
-
-Sun Jan 3 23:54:51 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * trace.h: new file. wraps tracing mechanisms.
-
- * defs/dtrace.d: new file. defined a dtrace provider "ruby".
-
- * include/ruby/ruby.h (LIKELY): moved from vm.c.
- (UNLIKELY): ditto.
- (OBJSETUP): probe "object-create".
- (RUBY_EVENT_RESCUE): new event.
-
- * vm_exec.c (DEBUG_ENTER_INSN): embedded a probe insn-entry into it.
- (DEBUG_END_INSN): insn-return.
-
- * vm.c (LIKELY): moved into ruby.h.
- (UNLIKELY): ditto.
- (Init_BareVM): embedded a probe "raise" into it.
-
- * variable.c (rb_class2name_without_alloc): new utility function.
-
- * tool/rbinstall.rb (install?(:ext, :arch, :'ext-arch')): installs
- dtrace.d if necessary.
-
- * thread_pthread.c (add_signal_thread_list): probe "raise".
- (rb_thread_create_timer_thread): ditto.
-
- * thread.c (rb_thread_schedule_rec): probes "thread-enter" and
- "thread-leave",
- (thread_start_func_2): ditto.
- (thread_cleanup_func): probe "thread-term"
-
- * lib/mkmf.rb: supports dtrace postprocessor on making an extension.
-
- * iseq.c (rb_vm_insn_name): new utility function.
- (rb_vm_insn_len): ditto.
-
- * insns.def (hook): probes "method-entry", "method-return", "line",
- and "rescue".
-
- * compile.c (iseq_compile_each): adds a trace op for "rescue" probe.
-
- * gc.c (garbage_collect): probes "gc-begin" and "gc-end".
- (obj_free): probe "object-free"
- (garbage_collect_with_gvl): probe "raise"
- (negative_size_allocation_error): ditto.
- (rb_memerror): ditto.
-
- * eval.c (rb_rescue2): probe "rescue"
- (rb_longjmp): probe "raise"
-
- * ext/probe/probe.c: new extension for application defined probes.
-
- * ext/probe/extconf.rb: ditto.
-
- * configure.in (--with-tracing-model): new option to choose a tracing
- mechanism.
- (DTRACE): new substitution. name of dtrace(1).
- (RUBY_TRACING_MODEL): new substitution.
- (DTRACE_OBJ): ditto.
- (MINIDTRACE_OBJ): ditto.
- (GOLFDTRACE_OBJ): ditto.
- (LIBRUBY_DTRACE_OBJ): ditto.
- (RUBY_DTRACE_POSTPROCESS): new macro. checks whether the dtrace on
- the system needs postprocessing.
- (RUBY_DTRACE_BSD_BROKEN): new macro. checks whether the dtrace
- supports USDT.
-
- * Makefile.in:
- (DTRACE): new variable. name of dtrace(1).
- (TRACING_MODEL): new variable. name of the chosen tracing mechanism.
- (DTRACE_OBJ): same as the one in configure.in.
- (MINIDTRACE_OBJ): ditto.
- (GOLFDTRACE_OBJ): ditto.
- (LIBRUBY_DTRACE_OBJ): ditto.
- (CPPOUTFILE): new substitution. necessary for generating dtrace.d
- (trace_none.h): new target for TRACING_MODEL=none
- (RUBY_H_INCLUDES): appended a header for tracing.
- (distclean-local): also removes preprocessed version of dtrace.d
- ($(LIBRUBY_A)): needs $(LIBRUBY_DTRACE_OBJ) if dtrace needs
- postprocessing.
- ($(PROGRAM)): ditto.
- (golf): ditto.
- (miniruby): ditto.
- ($(arch_hdrdir)/ruby/dtrace.d): new target. preprocessed version
- of defs/dtrace.d. generated if necessary.
- ($(arch_hdrdir)/ruby/trace_dtrace.h): new target.
- definition of probes.
- ($(LIBRUBY_DTRACE_OBJ)): new target. generated if dtrace needs
- postprocessing.
- ($(DTRACE_OBJ)): ditto.
- ($(MINIDTRACE_OBJ)): ditto.
- ($(GOLFDTRACE_OBJ)): ditto.
-
-Sun Jan 3 15:34:19 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/rexml/text.rb: String no longer has #each.
- Patch by Mitsutaka Mimura (takkanm). [ruby-dev:39949].
-
-Sun Jan 3 01:29:18 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb (Resolv::DNS::Message::MessageDecoder#inspect):
- implemented.
-
-Sat Jan 2 15:57:54 2010 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb (Resolv::DNS#initialize): new option :nameserver_port.
- (Resolv::DNS#each_resource): pass port number.
- (Resolv::DNS#make_requester): ditto.
- (Resolv::DNS::Config#lazy_initialize): initialize @nameserver_port
- instead of @nameserver.
- (Resolv::DNS::Config#single?): return port number addition to the
- nameserver.
- (Resolv::DNS::Config#generate_timeouts): use @nameserver_port.
- (Resolv::DNS::Config#resolv): yield port number.
-
-Sat Jan 2 00:43:22 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb (initialize_regexp): allow leading
- and trailing white space, and forbid extra characters
- on another lines. [ruby-core:26223]
- RFC 3986 Appendix C. Delimiting a URI in Context
- draft-duerst-iri-bis-07 7.2. Web Address processing
-
-Fri Jan 1 23:17:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/generic.rb (URI#normalize!): normalize case of
- scheme. [ruby-core:27309]
-
-Fri Jan 1 00:47:57 2010 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_instance_method_unimpl): Suppress
- compiler warnings.
-
-Fri Jan 1 00:00:00 2010 Tanaka Akira <akr@fsij.org>
-
- * tool/mkconfig.rb: generate RbConfig.ruby in rbconfig.rb.
-
- * lib/webrick/httpservlet/cgihandler.rb: use RbConfig.ruby.
-
- * test/ruby/envutil.rb: ditto.
-
- * benchmark/report.rb: ditto.
-
- * benchmark/runc.rb: ditto.
-
- * tool/eval.rb: ditto.
-
-Thu Dec 31 18:18:55 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/rubysocket.h: include addrinfo.h only when using our own
- getaddrinfo.c.
-
-Thu Dec 31 14:20:11 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (save_redirect_fd): consider EBADF that the fd is not used.
- [ruby-dev:39938]
-
-Thu Dec 31 06:03:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/raddrinfo.c (addrinfo_type): typed.
-
- * ext/socket/extconf.rb: fix for wide-getaddrinfo option.
-
- * ext/socket/addrinfo.c: rename {addr,name}info functions to ensure
- those are used on darwin.
-
-Thu Dec 31 03:27:53 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (native_thread_destroy): decreased the probability of
- using the interrupt event in the thread termination.
- see [ruby-core:27199].
-
-Thu Dec 31 02:35:57 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (w32_error): should report the function.
-
-Thu Dec 31 01:58:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: fix for extstatic.
-
-Wed Dec 30 19:43:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/ruby.h (RREGEXP_SRC_END): added.
-
-Wed Dec 30 19:40:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/defines.h (INFINITY): this is float.
-
- * include/ruby/defines.h (NAN): ditto.
-
- * numeric.c (rb_infinity): change content as float.
-
- * numeric.c (rb_nan): ditto.
-
-Wed Dec 30 17:59:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gem_prelude.rb (push_all_highest_version_gems_on_load_path):
- simplified.
-
- * lib/rubygems/command_manager.rb (Gem#load_and_instantiate):
- rescue only NameError from const_get.
-
- * lib/rubygems/source_index.rb (Gem#load_specification): don't use
- RUBY_VERSION to branch.
-
- * lib/rubygems/validator.rb (Gem::TestRunner, Gem#alien): ditto.
-
- * lib/rubygems.rb: Kernel#gem is already defined, and workaround
- for home directory and custom_require are no longer needed.
-
-Tue Dec 29 16:03:33 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * numeric.c (Init_Numeric): Add Float::INFINITY and Float::NAN.
- [ruby-dev:1657] [ruby-dev:4760] [ruby-list:7023]
- [ruby-list:46690]
- [ruby-core:26632] [ruby-talk:41352] [ruby-talk:203333]
-
- * include/ruby/defines.h (INFINITY): defined.
-
- * include/ruby/defines.h (NAN): defined.
-
- * include/ruby/util.h (ruby_div0): removed.
-
- * numeric.c (fix_pow): use INFINITY and NAN
- instead of ruby_div0(1.0).
-
- * marshal.c (r_object0): ditto.
-
- * bignum.c (big_fdiv): ditto.
-
-Tue Dec 29 10:36:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser::STANDALONE):
- any number spaces can be placed between equal-sign and the value.
- patch from Ed Howland in [ruby-core:27345].
-
-Mon Dec 28 22:33:58 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (CreateChild): force to inherit standard I/O handles.
- this change fixes [ruby-core:27273], but other side effects might
- exist.
-
-Mon Dec 28 22:00:10 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_marshal.rb: added tests for taintness/untrustness
- propagation.
-
-Mon Dec 28 18:13:26 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * sample/occur2.rb: reimplemented in modern style. [ruby-dev:39927].
-
-Mon Dec 28 17:19:37 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * tool/install-sh: correction by Hiro Asari.
- https://gist.github.com/264558/58ad1cae45cde49600bbb39286af2aae23e639d5
-
-Mon Dec 28 13:18:52 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * tool/install-sh: wrote the intention. [ruby-dev:39928]
-
-Sun Dec 27 10:45:00 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (foleparam_initialize): add foleparam_initialize
- to check argument of WIN32OLE_PARAM.new
-
- * test/win32ole/test_win32ole_param.rb (test_s_new): add some assertion
- to test WIN32OLE_PARAM.new
-
-Sun Dec 27 09:41:54 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * tool/rbinstall.rb (install?(:local, :comm, :bin, :'bin-comm')):
- Makes it vim friendly. __END__ in a heredoc is confusing with
- the script end for vim.
-
-Sun Dec 27 09:13:55 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * sample/occur2.rb: have been broken. fixed for Ruby 1.9 feature.
-
-Thu Dec 24 16:32:30 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/uri/generic.rb (eql?): Check the class of the compared object.
- Based on a patch by Peter McLain [ruby-core:27019]
-
-Thu Dec 24 15:20:03 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regexec.c (match_at): follow enclen's change.
-
-Thu Dec 24 12:08:00 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/delegate.rb (marshal_dump/load): dump & load instance variables
- by default [ruby-core:24211]
-
-Thu Dec 24 10:31:50 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/object.c (rb_obj_cmp): Default <=> operator returns 0 if
- objects are == [ruby-core:24063]
-
-Wed Dec 23 09:12:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/cgi/test_cgi_multipart.rb (CGIMultipartTest#_prepare):
- always must be binary mode. c.f. Bug#2341
-
-Thu Dec 10 09:20:58 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (Init_Encoding): undef Encoding.new because
- a class which is rb_undef_alloc-func-ed can't call new method.
- [ruby-dev:39862]
-
- * vm.c (Init_VM): undef RubyVM.new and RubyVM::Env.new.
-
-Mon Dec 21 17:51:44 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regcomp.c (optimize_node_left): include equal on the condition of for-loop.
- This bug also affects original Oniguruma. [ruby-core:27247]
-
-Mon Dec 21 10:03:33 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regcomp.c (print_enc_string): follow enclen's change.
-
- * regcomp.c (onig_print_compiled_byte_code): ditto.
-
- * regcomp.c (onig_print_compiled_byte_code): change prototype.
-
- * regint.c (onig_print_compiled_byte_code): comment out.
-
-Mon Dec 21 08:04:34 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * object.c: BasicObject#initialize accepts any number of arguments
- [ruby-core:27080]
-
-Mon Dec 21 02:45:46 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_eval.c (rb_iterate): remove SEGV (retry).
-
-Sun Dec 20 23:18:23 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_eval.c (rb_iterate): remove SEGV (use the original patch).
- [ruby-dev:39874]
-
-Sun Dec 20 21:26:05 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_eval.c (rb_iterate): pass current block when the argument bl_proc
- is NULL. This behavior can be used to make enumerator faster
- [ruby-dev:39874]
-
- * enumerator.c (enumerator_each): pass current block directly instead
- of trampoline block (enumerator_each_i).
-
- * io.c (argf_each_line, argf_each_byte, argf_each_char): ditto.
-
-Sat Dec 19 14:59:30 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gem_prelude.rb (Kernel#gem): should make gem private. a patch
- from Sho Hashimoto in [ruby-dev:39838].
-
-Sat Dec 19 14:57:17 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/webrick/config.rb (WEBrick::Config): typo fixed. a patch
- from Sho Hashimoto in [ruby-dev:39835].
-
-Sat Dec 19 11:06:48 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb (each2,collect2,map2): Fix enumerator
- [ruby-core:27225]
-
-Sat Dec 19 09:58:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (check_funcall): reset method_missing_reason before
- trying the call. based on a patch from Yehuda Katz in
- [ruby-core:27219].
-
-Sat Dec 19 09:29:22 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/set.rb: Add checks that passed argument is Enumerable.
- [ruby-core:23844]
-
-Wed Dec 16 20:28:46 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/envutil.rb: fix a typo in assert message.
-
-Wed Dec 16 16:57:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/un.rb (httpd): try to convert port number to integer.
-
-Wed Dec 16 11:18:30 2009 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in(MINIRUBY): use "$BASERUBY" as a default ruby executable
- name.
-
-Wed Dec 16 00:53:14 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/find.rb (Find.find): rescue more exceptions which is possible to
- occur by other process change the directory tree.
-
-Tue Dec 15 09:06:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/find.rb (Find.find): get rid of race condition.
-
-Mon Dec 14 22:33:21 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/find.rb (Find.find): rescue only ENOENT and EACCES for lstat.
-
-Mon Dec 14 21:49:30 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/find.rb (Find.find): narrow rescue region.
-
-Mon Dec 14 09:20:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/find.rb (Find.find): removed already unnecessary code.
-
-Sun Dec 13 23:48:25 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/find.rb (Find.find): sort directory entries. [ruby-dev:39847]
-
-Sun Dec 13 20:55:30 2009 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/envutil.rb (invoke_ruby): call to_str for stdin_data to
- reject non-string.
-
-Sun Dec 13 20:26:57 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ruby.c (rb_parser_dump_tree): add prototype.
-
-Thu Dec 10 20:55:55 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode_data.h, transcode.c, tool/transcode-tblgen.rb: Added
- support for new transcoding instruction FUNsio (with Tatsuya Mizuno)
-
- * enc/trans/gb18030.trans: Significantly reduced GB18030 conversion
- table footprint using FUNsio and differences (with Tatsuya Mizuno)
-
- * test/ruby/test_transcode.rb: Minor name fix (from Tatsuya Mizuno)
-
-Thu Dec 10 17:22:36 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * vm_eval.c (yield_under): yields self the same as 1.8.
-
-Thu Dec 10 15:49:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (native_mutex_reinitialize_atfork): release and
- re-acquire the lock at re-initialization.
-
-Thu Dec 10 12:56:02 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_replicate): add Encoding#replicate(name).
-
- * encoding.c (enc_replicate_with_index): renamed from old
- enc_replicate.
-
- * encoding.c (rb_enc_from_encoding_index): split from
- rb_enc_from_encoding.
-
-Thu Dec 10 09:15:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_inspect): CHAR_ESC_LEN should be 13.
-
-Thu Dec 10 01:12:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (dyna_pop_gen): pop dvars. [ruby-dev:39861]
-
-Thu Dec 10 00:46:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * node.c (dump_node): fixed for long members.
-
-Wed Dec 9 22:57:04 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * node.c: node management added. Currently, only pretty-dumper is
- implemented. [ruby-dev:39853]
-
- * ruby.c: --dump=parsetree and --dump=parsetree_with_comment options
- added. This is just for debug or research purpose. Note that the
- compatibility of these options are not supported at all.
-
-Wed Dec 9 09:50:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_justify): fixed the case a fill size is a
- multiple of the length of the padding. [ruby-dev:39856]
-
-Tue Dec 8 23:41:34 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/configure.bat: now recognize --with-*-{dir,include,lib} options
- and pass them to mkmf.
-
- * win32/configure.bat: general conversion from ``/'' to ``\'' of
- configure_args is not necessary any longer.
-
- * win32/setup.mak: BASERUBY is used as command, so always need to
- convert ``/'' to ``\'' within it.
-
-Tue Dec 8 23:39:52 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (flo_eq): suppress a warning on VC++ for x64.
-
-Tue Dec 8 16:19:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems: update to 1.3.5.
-
- * lib/rubygems/defaults.rb (Gem::default_dir): removed a clause
- doing nothing.
-
-Tue Dec 8 03:50:24 2009 Tanaka Akira <akr@fsij.org>
-
- * file.c (rb_f_test): use string form in unknown command error
- message.
-
-Mon Dec 7 14:11:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_object): reverted r26007. [ruby-dev:39845]
-
- * test/test_delegate.rb (test_marshal): moved from test_marshal.rb.
-
-Mon Dec 7 13:05:59 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * string.c (rb_str_justify): CVE-2009-4124.
- Fixes a bug reported by
- Emmanouel Kellinis <Emmanouel.Kellinis AT kpmg.co.uk>, KPMG London;
- Patch by nobu.
-
-Sun Dec 6 23:50:46 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * strftime.c: %l should be 1..12 instead of 0..12 [ruby-core:27072]
-
-Sun Dec 6 23:16:35 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/find.rb (Find.find): reduce stat system call.
-
-Sun Dec 6 16:02:15 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/webrick/httpservlet/filehandler.rb: escape filename of index.
- [ruby-dev:37768]
-
-Sun Dec 6 00:35:16 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/setup (config.h): EXECUTABLE_EXTS moved from
- dln.c:dln_find_1().
-
-Sat Dec 5 15:35:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_object): dump instance variables when using
- marshal_dump. [ruby-core:24211]
-
- * variable.c (rb_ivar_count): added.
-
-Sat Dec 5 13:19:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: default ac_cv_prog_CC to CC.
-
-Sat Dec 5 10:18:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/irb/extend-command.rb (def_extend_command): fixed argument
- number for negative arity.
-
-Fri Dec 4 16:50:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (k_def): adjust the location of method definition to the
- line of def. [Bug #2427]
-
-Fri Dec 4 19:05:28 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * insns.def (defined): should respect #respond_to_missing? as
- #respond_to? does.
-
-Fri Dec 4 15:50:18 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * vm_eval.c (yield_under): does not yield self, and passes blockptr
- instead of &block to vm_cref_push(). [ruby-dev:39833]
-
-Fri Dec 4 15:15:43 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (num_exact): should not accept strings as operands, even
- though they respond to #to_r. ideally, strict rational
- conversion should be done by a method like #to_rational, not #to_r.
- [ruby-core:23729]
-
-Fri Dec 4 13:10:23 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * ext/stringio/stringio.c (ungetc): RDoc updated. trunk allows
- pushing back behind the beginning of the pseudo stream.
-
-Fri Dec 4 03:10:38 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * compile.c (compile_cpath, iseq_compile_each): reverted
- constant/class variable lookup in instance_eval etc. to the
- behavior of 1.8.
-
- * eval.c (rb_mod_nesting): ditto.
-
- * insns.def (putspecialobject, defineclass): ditto.
-
- * node.h (NODE_FL_CREF_PUSHED_BY_EVAL): ditto.
-
- * vm_core.h (VM_SPECIAL_OBJECT_CONST_BASE): ditto.
-
- * vm_eval.c (yield_under, eval_under): ditto.
-
- * vm_insnhelper.c (vm_cref_push, vm_get_const_base,
- vm_get_ev_const, vm_get_cvar_base): ditto.
-
-Thu Dec 3 20:27:27 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/gb18030-tbl.rb: Fix omission of C1 region in code table
- (from Tatsuya Mizuno)
-
- * test/ruby/test_transcode.rb: Added test for converting full range of
- Unicode codepoints from/to GB18030 (from Tatsuya Mizuno)
-
-Wed Dec 2 23:51:28 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * ext/openssl/ossl_ssl.c: initialize @hostname of SSLSocket to avoid
- warning at SSLSocket#connect.
-
-Tue Dec 1 18:01:43 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/digest/test_digest_extend.rb: added tests for digest framework.
-
-Tue Dec 1 12:01:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (dyna_push_gen, dyna_pop_gen): no needs to save both of
- args and vars. [ruby-core:26961]
-
- * parse.y (dyna_push_gen): use rb_node_newnode() for ripper.
- [ruby-core:26961]
-
- * parse.y (dyna_push_gen, dyna_pop_gen): adjust local vtable level
- for the case of syntax errors in method name or argument inside
- do block. [ruby-core:26961]
-
-Mon Nov 30 16:57:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (command_output): $makeflags are already quoted.
-
-Mon Nov 30 16:54:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, win32/Makefile.sub (EXECUTABLE_EXTS): moved from
- dln.c:dln_find_1().
-
- * lib/mkmf.rb (def find_executable0): use EXECUTABLE_EXTS, not
- only EXEEXT. [ruby-core:26821]
-
-Mon Nov 30 11:00:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yylex): suppress an extra error message after
- numeric literal without digits. based on a patch from ujihisa .
- in [ruby-dev:39811]. [ruby-dev:39798]
-
-Sun Nov 29 16:56:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (check_funcall_failed): pass ID. [ruby-core:26934]
-
-Sun Nov 29 06:37:53 2009 Aaron Patterson <tenderlove@ruby-lang.org>
-
- * lib/rexml/formatters/default.rb (write_attribute): fix an
- exception when printing a document when duplicate namespaced
- attributes exist. Thanks, Alexey Froloff [ruby-core:26837]
-
-Sat Nov 28 09:05:53 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_eval.c (check_funcall_failed): should rescue user raised
- NoMethodError. rescue all NoMethodError if receiver does not
- respond to the method name. [ruby-dev:39796]
-
-Thu Nov 26 21:14:30 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/test_complex.rb (@unify): fix the detection if math
- loaded. This makes test_complex.rb work fine with the previous
- commit.
-
- * test/ruby/test_rational.rb (@unify): ditto.
-
-Thu Nov 26 21:13:36 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/test_mathn.rb (TestMathn): new test case.
- test for r25067.
-
-Thu Nov 26 21:11:23 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/openssl/test_config.rb (OpenSSL::TestConfig): new test case.
- test for r25017.
-
-Thu Nov 26 21:08:54 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/test_range.rb (TestRange#test_comparison_when_recursive):
- test for r25010.
-
- * test/ruby/test_struct.rb (TestStruct#test_comparison_when_recursive):
- ditto.
-
-Thu Nov 26 20:18:02 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * gem_prelude.rb (Gem.set_home): must dup before force_encoding
- and must force_encoding before gsub.
- cf. Yen Sign problem of SJIS [ruby-core:26910]
-
-Thu Nov 26 17:54:37 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/{configure.bat, setup.mak, Makefile.sub}: add new configure
- option ``--with-ntver''.
-
-Thu Nov 26 11:42:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/mkmf/base.rb: use $INCFLAGS to add -I option. [Bug#2387]
-
-Thu Nov 26 07:17:58 2009 wanabe <s.wanabe@gmail.com>
-
- * marshal.c (mark_dump_arg): mark str. see also [ruby-dev:39735]
-
-Thu Nov 26 00:05:58 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/digest/test_digest_extend.rb: Added tests for current digest
- framework.
-
-Wed Nov 25 20:46:37 2009 Tanaka Akira <akr@fsij.org>
-
- * vm_eval.c (rb_search_method_entry): refine error message.
-
-Wed Nov 25 19:29:05 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_instance_method_unimpl): Do not
- call rb_inspect() on an object that does not implement necessary
- methods; reported by NaHi.
-
-Wed Nov 25 19:30:30 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c: Added a check for an internal error
- (with Tatsuya Mizuno)
-
-Tue Nov 24 22:57:46 2009 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/envutil.rb (EnvUtil.invoke_ruby): raise Timeout::Error
- instead of flunk. reported by Yusuke Endoh.
-
-Tue Nov 24 22:31:44 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm.c (ruby_vm_destruct, thread_memsize): fix argument type to make
- RUBY_MARK_FREE_DEBUG available.
-
-Tue Nov 24 21:25:21 2009 Tanaka Akira <akr@fsij.org>
-
- * error.c: include errno.h at beginning.
-
-Tue Nov 24 20:11:37 2009 Tanaka Akira <akr@fsij.org>
-
- * strftime.c: %Y format a year with 4 digits at least.
-
- * lib/time.rb: format a year with 4 digits at least.
-
-Tue Nov 24 20:05:27 2009 Tanaka Akira <akr@fsij.org>
-
- * defs/known_errors.def: more errors.
-
-Tue Nov 24 20:01:49 2009 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (rb_bug_errno): declared.
-
- * include/ruby/intern.h (rb_strerrno): declaration removed.
-
- * error.c (rb_strerrno): make it static. return NULL for unknown
- errors.
- (rb_bug_errno): defined.
-
- * thread_pthread.c: use rb_bug_errno.
-
- * signal.c (ruby_signal): use rb_bug_errno.
-
-Tue Nov 24 10:17:38 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * file.c (file_path_convert): fix fs_encoding is not assign.
-
-Tue Nov 24 10:00:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (rb_strerrno): constified.
-
-Tue Nov 24 09:49:31 2009 Tanaka Akira <akr@fsij.org>
-
- * error.c (rb_strerrno): return "UNKNOWNERROR" for non-zero unknown
- error.
-
-Tue Nov 24 09:18:33 2009 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h (rb_strerrno): declared.
-
- * template/known_errors.inc.tmpl: generate defined_error() and
- undefined_error() instead of set_syserr.
-
- * error.c (Init_syserr): define defined_error() and undefined_error()
- to follow the above change.
- (rb_strerrno): defined.
-
- * thread_pthread.c: show error message and errno macro name with
- rb_bug.
-
-Mon Nov 23 16:06:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (RUBY_STACK_MIN, RUBY_STACK_SPACE): delay for
- platforms where PTHREAD_STACK_MIN is not compile time constant.
- [ruby-dev:39751]
-
-Mon Nov 23 11:26:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (dln_find_1): removed duplication.
-
-Mon Nov 23 04:12:00 2009 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/newline.trans (fun_so_universal_newline): generate \n
- after \r\n detection instead of just after \r.
- [ruby-list:45988] [ruby-core:25881] [ruby-core:26788]
-
-Sat Nov 21 18:48:35 2009 Tanaka Akira <akr@fsij.org>
-
- * vm_eval.c (rb_search_method_entry): show flags and klass value in
- not implemented error message.
-
-Sat Nov 21 16:38:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (marshal_dump): use normal object as the buffer so
- that no hidden object is exposed to ruby-level. [ruby-dev:39744]
-
-Sat Nov 21 15:58:43 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (read_all): fix: false negative invalid byte sequence
- on reading from pipes. [ruby-dev:39743]
- fix: assign the variable 'pos' as relative value from recent pos.
-
-Sat Nov 21 14:44:16 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * file.c (file_path_convert): delay getting UTF8-MAC encoding
- while really needed. [ruby-core:26807]
-
-Fri Nov 20 21:16:54 2009 Tanaka Akira <akr@fsij.org>
-
- * vm_eval.c (rb_search_method_entry): avoid trigraph.
-
-Thu Nov 19 23:17:06 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (putbinaryfile): use APPE for resume.
- Thanks, Tomoyuki Chikanaga.
-
-Thu Nov 19 22:50:05 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (flag_list): untaint strings to intern in the safe
- level 1.
-
- * lib/net/imap.rb (max_flag_count=): new methods to set the max
- number of flags interned to symbols.
-
-Thu Nov 19 20:43:39 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/getnameinfo.c: need to include extconf.h for HAVE_* macros.
- reported by Kenta Murata <mrkn AT mrkn.jp> via IRC.
-
-Thu Nov 19 17:00:59 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub: nmake execute the file named echo if it exists
- in the PATH. reported by Kenta Murata <mrkn AT mrkn.jp> via IRC.
-
-Thu Nov 19 02:50:47 2009 Tanaka Akira <akr@fsij.org>
-
- * vm_eval.c (rb_search_method_entry): show the type of the hidden
- object.
- (rb_type_str): new function for above.
-
-Thu Nov 19 00:47:09 2009 Tanaka Akira <akr@fsij.org>
-
- * io.c (MORE_CHAR_SUSPENDED): renamed from MORE_CHAR_CBUF_FULL.
-
-Wed Nov 18 22:00:13 2009 Tanaka Akira <akr@fsij.org>
-
- * io.c (fill_cbuf): extracted from more_char.
- (io_shift_cbuf): fix memmove condition.
- (read_all): use fill_cbuf directly to avoid ECONV_AFTER_OUTPUT.
- [ruby-dev:39708]
-
-Wed Nov 18 18:25:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_atfork_internal): reinitialize global lock
- at fork to get rid of deadlock. based on the patch from Hongli
- Lai in [ruby-core:26783]. [ruby-core:23572]
-
-Wed Nov 18 17:48:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (terminate_atfork_i): all mutex locks by other threads
- have been abandoned at fork.
-
-Wed Nov 18 15:27:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (file_path_convert): delay getting filesystem encoding
- while really needed.
-
-Wed Nov 18 12:33:42 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_set_default_encoding): reset filesystem
- encoding because on resetting default_external because
- Unix's filesystem encoding depends on default_external.
-
- * encoding.c (enc_set_filesystem_encoding): added.
-
- * ruby.c (process_options): don't call rb_filesystem_encoding
- because filesystem encoding is reset when default_external
- is reset.
-
-Wed Nov 18 11:57:32 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * math.c (math_gamma): fix incorrect comparison expression.
- see also [ruby-dev:39709] [Bug #2381]
-
-Wed Nov 18 11:37:05 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_scan_open_args): move path encoding conversion
- for filesystem encoding of Mac OS X.
-
- * file.c (file_path_convert): added for convert encoding
- of file path.
-
- * file.c (rb_get_path_check): add file_path_convert.
-
-Wed Nov 18 10:17:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_utf8_nth): no count_utf8_lead_bytes_with_word
- optimization for short string. [ruby-core:26787]
-
- * string.c (str_utf8_offset): str_utf8_nth never return NULL.
-
-Wed Nov 18 10:12:34 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * vm_method.c (rb_undef): should raise TypeError if klass is nil.
- 1.instance_eval { undef to_s } causes SEGV before this fix.
-
- * test/ruby/test_undef.rb: new tests for undef.
-
-Wed Nov 18 08:41:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_utf8_nth): fixed overrun. [ruby-core:26787]
-
-Wed Nov 18 07:51:01 2009 Tanaka Akira <akr@fsij.org>
-
- * io.c (parse_mode_enc): fix invalid access.
-
-Tue Nov 17 23:50:06 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * vm_method.c (rb_alias): should raise TypeError if klass is nil.
- 1.instance_eval { alias to_string to_s } causes SEGV before this
- fix.
-
- * test/ruby/test_alias.rb (test_special_const_alias): ditto.
-
-Tue Nov 17 17:53:53 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/big5.c, enc/trans/big5.trans, enc/trans/big5-uao-tbl.rb,
- test/ruby/test-transcode.rb: Added Encoding 'Big5-UAO' and transcoding
- for it (from Tatsuya Mizuno) (see Bug #1784)
-
-Tue Nov 17 16:26:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def (opt_case_dispatch): runtime value cannot be used as
- an element initializer.
-
- * vm_insnhelper.c (opt_case_dispatch_i): gets rid of type-punning
- calls.
-
-Mon Nov 16 15:51:53 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * vm_insnhelper.c (vm_call_method): protected singleton methods of
- an object should not be able to called from other instances of the
- class of the object. [ruby-core:26761]
-
- * vm_eval.c (rb_method_call_status): ditto.
-
- * test/ruby/test_module.rb (test_protected_singleton_method): ditto.
-
-Mon Nov 16 14:03:53 2009 wanabe <s.wanabe@gmail.com>
-
- * io.c (read_all): shift read buffer if exception occurred.
- pointed out in [ruby-dev:39702].
-
-Mon Nov 16 07:59:38 2009 wanabe <s.wanabe@gmail.com>
-
- * io.c (read_all): don't call io_shift_cbuf until buffering enough or
- econv_finished. [ruby-dev:39696]
-
- * io.c (more_char): don't call clear_readconv to read buffer after
- econv_finished.
-
- * io.c (appendline, rb_io_each_codepoint): clear readconv when done.
-
-Mon Nov 16 01:58:08 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * include/ruby/ruby.h (rb_classext_t): annotate @internal.
-
-Mon Nov 16 01:35:34 2009 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_filesystem_encindex): use default external encoding
- instead of locale encoding in Unix.
-
- * ruby.c (process_options): delay filesystem encoding
- initialization until default external encoding initialization.
-
-Mon Nov 16 00:06:26 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (thread_cleanup_func): delete locking_mutex when thread
- object become dummy because of fork. [ruby-core:26744]
- [ruby-core:26745]
-
- * bootstraptest/test_thread.rb: add a test for above.
-
-Sat Nov 14 21:54:46 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * class.c (rb_mod_init_copy): fix memory leak of Class#dup.
- [ruby-dev:39687]
-
-Sat Nov 14 17:09:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (--with-opt-dir): ignore and suppress a warning.
- [ruby-dev:39684]
-
-Sat Nov 14 16:43:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (ruby_setenv): get rid of crash in Solaris 8 and 10.
- [ruby-core:26668]
-
-Sat Nov 14 09:16:54 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimalCmp): Fix comparisons
- [ruby-core:26646]
-
- * test/bigdecimal/test_bigdecimal.rb (class): Fix and improve tests.
-
-Sat Nov 14 04:07:06 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/variable.rb (TkVariable::coerce): fix bug on a
- numeric value.
-
-Sat Nov 14 03:35:29 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/variable.rb: TkVariable#*(other) and /(other) have a
- bug on handling of the "other" value.
-
-Fri Nov 13 21:18:15 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/zlib/zlib.c (rb_zlib_adler32): fix typo.
-
-Fri Nov 13 16:22:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_start_func_2): see first_func, not first_proc,
- to decide which to use.
-
- * gc.c (vm_xrealloc): use the given object space.
-
-Fri Nov 13 00:46:24 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/util.rb (CGI::pretty): fix the overflow bug
- if stripped string.[ruby-dev:37975]
-
-Thu Nov 12 23:08:11 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/core.rb (read_from_cmdline): this code is better.
- [ruby-core:25991]
-
-Thu Nov 12 22:55:42 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/net/telnet.rb: don't use simple delegate.
- because SimpleDelegate behavior changed.
-
-Thu Nov 12 14:33:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_win32.c (thread_errno): CreateThread does not set errno.
-
- * thread.c (thread_create_core): moved failure handling from
- native_thread_core().
-
- * thread_pthread.c (native_thread_create): constified.
-
-Thu Nov 12 10:08:56 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * .document: remove documents not in rdoc format until
- rdoc supports non rdoc files. [ruby-core:26459]
-
-Thu Nov 12 06:42:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile#initialize): option hash may not be
- given. [ruby-core:26681]
-
-Thu Nov 12 01:29:15 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * enumerator.c (yielder_yield_push): Yielder#<< should return self.
- [ruby-dev:39660]
-
-Wed Nov 11 19:17:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile#initialize): merge mode option.
-
- * lib/tmpdir.rb (Dir::Tmpname#create): splat options.
-
-Wed Nov 11 12:54:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (ruby_setenv): use ruby_strdup().
-
-Wed Nov 11 12:19:27 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * hash.c (ruby_setenv): also set CRT workarea. ref [ruby-core:25010]
-
-Wed Nov 11 09:36:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_object, r_object0): use RHASH_IFNONE but not ifnone
- directly.
-
-Wed Nov 11 08:32:45 2009 Tanaka Akira <akr@fsij.org>
-
- * thread.c (blocking_region_begin): define before BLOCKING_REGION.
- reported by Luis Lavena. [ruby-core:26670]
-
-Wed Nov 11 08:22:19 2009 Tanaka Akira <akr@fsij.org>
-
- * util.c (ruby_strtod): use dval() consistently.
-
-Wed Nov 11 02:14:48 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/matrix/test_matrix.rb (TestMatrix#test_rank):
- added a test method for r24969.
-
-Tue Nov 10 08:23:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_f_exec, rb_f_system, rb_f_spawn): mentioned about
- the shell to be used when the command line is single string.
- See [ruby-core:26652]
-
-Mon Nov 9 20:15:16 2009 Tanaka Akira <akr@fsij.org>
-
- * thread.c (rb_gc_save_machine_context): don't save the stack pointer
- in this function.
- (RB_GC_SAVE_MACHINE_CONTEXT): call rb_gc_save_machine_context and
- save the stack pointer at caller side.
- (rb_thread_schedule_rec): use RB_GC_SAVE_MACHINE_CONTEXT instead of
- rb_gc_save_machine_context.
- (blocking_region_begin): changed to a macro. use
- RB_GC_SAVE_MACHINE_CONTEXT instead of rb_gc_save_machine_context.
- [ruby-dev:39659]
-
-Mon Nov 9 11:28:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (warnflags): add -Wno-long-long.
-
-Sun Nov 8 18:13:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c: use RHASH_IFNONE but not ifnone directly.
-
-Sat Nov 7 21:02:57 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/pp.rb (PP::ObjectMixin#pretty_print): use to_s regardless of
- instance variables.
-
-Sat Nov 7 20:59:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_push_frame): get rid of out-of-bounds
- access.
-
-Sat Nov 7 12:41:19 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_insnhelper.c (VM_CALLEE_SETUP_ARG): revert r25521.
- [ruby-core:26427] [ruby-core:26447]
-
-Fri Nov 6 18:33:47 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_insnhelper.c (vm_push_frame): add CHECK_STACK_OVERFLOW.
- [ruby-dev:39592]
-
- * eval.c (rb_longjmp): add 1 level backtrace for sysstack_error
- without calling any method to prevent further stack overflow.
-
- * eval.c (make_exception): don't call #exception for
- sysstack_error to prevent stack overflow.
-
- * proc.c (Init_Proc): don't freeze sysstack_error.
-
- * eval.c (rb_longjmp): move reentrant check after exception
- preparation.
-
-Fri Nov 6 17:13:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_header): split the line by tabs.
-
-Fri Nov 6 12:02:32 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in (MINIDLNOBJ): set default as dmydln.o.
- Now LLVM clang seems to be able to build Ruby 1.9.
-
-Fri Nov 6 09:29:32 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_filesystem_encindex): add fallback to
- ASCII-8BIT on Windows.
-
-Fri Nov 6 07:29:07 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_case.rb: merged r25658 from ruby_1_8.
-
-Thu Nov 5 12:27:07 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * gem_prelude.rb (Gem.user_home): force_encoding(
- Encoding.find('filesystem')). [ruby-core:26525]
-
-Thu Nov 5 07:47:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (BEGIN): now local_push and local_pop are necessary in
- ripper.
-
-Wed Nov 4 21:39:10 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * .document: add some README files to default rdoc's of trunk.
- patched by Roger Pack [ruby-core:26459]
-
-Wed Nov 4 16:06:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/st.h (SIZEOF_ST_INDEX_T): moved from st.c for
- Init_RandomSeed().
-
-Wed Nov 4 15:50:16 2009 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * include/ruby/ruby.h (NUM2CHR): prefix __extension__ for
- braced-groups within expressions.
-
-Wed Nov 4 15:46:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (set_{internal,external}_encoding_once): fixed typos.
-
-Wed Nov 4 12:49:18 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * proc.c (mnew): Fix scope issue [ruby-core:26069]
-
-Wed Nov 4 08:50:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (rb_hash_start): moved from string.c.
-
- * random.c (Init_RandomSeed2): register global address before set.
-
- * random.c (Init_RandomSeed): initialize hashseed.
-
-Wed Nov 4 08:26:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (dir_check): moved other checks from GetDIR.
-
- * dir.c (GetDIR): fixed a variable name.
-
-Wed Nov 4 08:19:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (rb_fiber_start): fixed unconditional test.
-
-Wed Nov 4 02:08:14 2009 Aaron Patterson <tenderlove@ruby-lang.org>
-
- * ext/dl/cptr.c (rb_dlptr_eql, rb_dlptr_cmp): DL::CPtr#== and DL::CPtr#<=>
- should not raise an exception when compared to a different object.
-
-Wed Nov 4 00:05:36 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_upto): make next object before yield its block.
- fix: can modify original begin string of String#upto.
- [ruby-dev:26384] [ruby-dev:39626]
-
-Mon Nov 2 18:33:21 2009 wanabe <s.wanabe@gmail.com>
-
- * cont.c (fiber_free): don't free unallocated local_storage. see #1325.
-
- * cont.c (cont_init): clear local_storage not to use current thread's.
-
- * cont.c (fiber_t_alloc, root_fiber_alloc): link itself always for
- a case that fiber_link_remove() is called before fiber_link_join().
-
- * cont.c (fiber_init): clear cont->vm_stack and th->stack before
- root_fiber_alloc() in rb_fiber_current().
-
-Mon Nov 2 14:52:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_exc_raise, rb_exc_fatal, rb_make_exception):
- suppressed shorten-64-to-32 warnings.
-
-Mon Nov 2 14:43:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_pthread.c (native_stop_timer_thread): delay joining timer
- thread after unlocking mutex.
-
-Mon Nov 2 13:31:14 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_pthread.c (native_stop_timer_thread): need to join timer thread
- only when really stopping it.
-
-Mon Nov 2 12:55:50 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_{pthread,win32}.c (native_stop_timer_thread): join the thread
- here.
-
- * thread_{pthread,win32}.c (native_reset_timer_thread): new function.
-
- * thread.c (rb_thread_stop_timer_thread, rb_thread_reset_timer_thread):
- call above function instead of simply setting 0.
-
-Mon Nov 2 11:22:19 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/dl/win32/lib/win32/registry.rb: update rdoc. [ruby-core:26022]
-
-Sun Nov 1 20:16:03 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c: fixed rdoc. [ruby-core:26457]
-
-Sun Nov 1 16:24:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_cv_stack_grow_dir): fix for universal binary.
-
- * configure.in (sitehdrdir, vendorhdrdir): fixed default values.
-
-Sun Nov 1 13:31:16 2009 wanabe <s.wanabe@gmail.com>
-
- * win32/win32.c (overlapped_socket_io, recvmsg, sendmsg): pass handle
- instead of pointer to CloseHandle().
-
-Sun Nov 1 13:11:27 2009 wanabe <s.wanabe@gmail.com>
-
- * ext/socket/socket.c (socket_s_ip_address_list): use FreeLibrary() to
- free HMODULE.
-
-Sun Nov 1 08:17:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (GET_STACK_BOUNDS): refactored common code. based on a
- patch from Suraj N. Kurapati <sunaku AT gmail.com> in
- [ruby-core:26443].
-
-Sat Oct 31 23:44:35 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_count): remove optimization using #size.
- revert r25560.
-
- * vm_eval.c (rb_funcall_no_recursive): remove method.
-
-Sat Oct 31 23:28:49 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_eval.c (check_funcall): logic updated according to
- [ruby-dev:39594]. search method entry, call if it exists;
- otherwise check method_missing, call if it was overridden,
- protecting exceptions; if NoMethodError happens, check method
- name.
-
- * vm_eval.c (vm_call0): use idMethodMissing.
-
- * vm_eval.c (rb_search_method_entry): typo fixed.
-
-Sat Oct 31 17:19:28 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTPResponse#each_response_header):
- cosmetic: '?\ ' -> '?\s'
-
-Fri Oct 30 22:09:47 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTPResponse#each_response_header):
- accept multiline message header of HTTP response. see #1796.
- cf. RFC 2616 '4.2 Message Header'.
-
- * test/net/http/test_httpresponse.rb: added.
-
-Fri Oct 30 18:54:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (trnext): detect empty range and raise exception.
- [ruby-dev:39108]
-
-Fri Oct 30 17:01:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (enum call_type): get rid of last comma.
-
- * vm_eval.c (vm_call0, vm_call_super, rb_f_send, rb_f_public_send):
- fixed call_type. [ruby-dev:39581]
-
- * vm_eval.c (rb_search_method_entry, rb_method_call_status): split
- from rb_call0().
-
- * vm_eval.c (rb_check_funcall): get rid of raising exceptions and
- hiding further exceptions. [ruby-dev:39584]
-
- * vm_eval.c (rb_funcall_no_recursive): ditto.
-
-Fri Oct 30 13:36:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_blocking_region): reverted r25566, and added
- description that no exception is allowed inside `func', instead.
- see [ruby-dev:39582]
-
-Fri Oct 30 13:13:16 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32.c (recvmsg, sendmsg, link): shouldn't raise ruby's exceptions
- in the functions expected as system API. see [ruby-dev:39579] and
- [ruby-dev:39582]
-
-Fri Oct 30 12:59:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread.c (rb_thread_blocking_region): standard C doesn't accept
- preprocessing directive within macro expansion.
-
-Fri Oct 30 10:55:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_blocking_region): must ensure to unlock GVL.
- [ruby-dev:39579]
-
-Fri Oct 30 04:47:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (RSTRING_END): trivial optimization.
-
- * string.c (rb_str_sub_bang): trivial optimization.
-
-Fri Oct 30 02:11:36 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_count): call #size using rb_funcall_no_recursive()
- to prevent infinite recursive calls. [ruby-core:24794]
-
- * vm_eval.c (rb_funcall_no_recursive): utility function to check
- direct recursive call.
-
- * vm_eval.c (rb_check_funcall): move from eval.c. [refactoring]
-
-Thu Oct 29 18:37:02 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (Init_Encoding): revert previous commit.
-
- * ruby.c (process_options): ditto.
-
-Thu Oct 29 15:35:39 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (Init_Encoding): set locale and filesystem encindex.
-
- * ruby.c (process_options): move setting func of filesystem
- encoding to Init_Encoding.
-
-Thu Oct 29 15:43:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (rb_name_err_mesg_new): added prototype.
-
-Thu Oct 29 13:53:18 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_to_ary): do not use #respond_to? to detect
- to_ary. Just call. [ruby-core:23738]
-
- * eval.c (rb_check_funcall): new function with method existence
- check. returns Qundef when the method does not exist.
-
- * enumerator.c (enumerator_rewind): just call method, using
- rb_check_funcall(). [ruby-core:23738]
-
- * error.c (exc_equal): ditto.
-
- * object.c (convert_type): ditto.
-
- * error.c (rb_name_err_mesg_new): export function.
-
- * eval.c (make_exception): ditto.
-
- * io.c (pop_last_hash): return early when the last argument is nil.
-
- * io.c (rb_io_puts): treat T_STRING specially for small
- optimization.
-
- * vm_eval.c (raise_method_missing): skip method call if possible
- using rb_method_basic_definition_p().
-
- * vm_eval.c (method_missing): ditto.
-
- * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_debug): test
- suites changed to ignore exceptions caused by just-call policy.
-
-Thu Oct 29 04:41:44 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ruby.c (process_options): call rb_filesystem_encoding().
-
-Thu Oct 29 04:40:36 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (Init_IO): rb_default_rs should be US-ASCII.
-
-Thu Oct 29 01:22:01 2009 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * ext/socket/extconf.rb : Compilation failure on AIX.
- ss_len (a member of struct sockaddr_storage) has preceding __,
- but ss_family does not have it from AIX 5.2.
-
-Wed Oct 28 16:32:49 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (get_filesystem_encoding): removed.
-
- * encoding.c (rb_locale_encindex): added.
-
- * encoding.c (rb_filesystem_encindex): added.
-
- * encoding.c (rb_filesystem_encindex): add an alias 'filesystem'.
- [ruby-dev:39574]
-
- * encoding.c (enc_find): add rdoc about special aliases.
-
- * gem_prelude.rb (Gem.set_home): use Encoding.find('filesystem').
-
- * gem_prelude.rb (Gem.set_paths): ditto.
-
-Wed Oct 28 15:02:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * gem_prelude.rb (Gem.set_home):
- force_encoding(Encoding.filesystem_encoding)
- [ruby-core:25959]
-
- * gem_prelude.rb (Gem.set_paths): ditto.
-
-Wed Oct 28 14:24:45 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (get_filesystem_encoding):
- add Encoding.filesystem_encoding [ruby-dev:39546]
- also see [ruby-core:25959]
-
-Wed Oct 28 14:51:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/etc/etc.c (etc_each_group): fixed typo.
-
-Wed Oct 28 13:02:10 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (Net::FTP#initialize): sets @binary to true.
-
- * lib/net/ftp.rb (Net::FTP#binary=): sends a TYPE command only when
- logged in. [ruby-dev:39548]
-
- * lib/net/ftp.rb (Net::FTP#send_type_command): new private method
- which sends an appropriate TYPE command according to the value of
- @binary.
-
- * lib/net/ftp.rb (Net::FTP#login): calls send_type_command instead
- of binary=.
-
-Wed Oct 28 12:26:51 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_insnhelper.c (vm_setup_method): should push call frame before
- raising exception, to put the Ruby-defined method name in the
- error message. [ruby-core:26333]
-
- * vm_insnhelper.c (VM_CALLEE_SETUP_ARG): macro modified.
-
- * vm_insnhelper.c (vm_yield_setup_args): modified for new
- VM_CALLEE_SETUP_ARG macro.
-
-Tue Oct 27 22:46:44 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/ftp.rb (Net::FTP#initialize): @sock = nil.
-
- * lib/net/ftp.rb (Net::FTP#binary=): send command only when
- socket is open. [ruby-dev:39548]
-
-Tue Oct 27 22:22:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (Init_stringio): added read_nonblock and
- write_nonblock aliases. [ruby-dev:39551]
-
- * ext/stringio/stringio.c (strio_data_type): typed.
-
-Tue Oct 27 21:20:35 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/variable.rb: add TkVariable#+@ and -@ method.
-
-Tue Oct 27 16:36:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (chopped_length): get rid of unexpected exception.
- see [ruby-core:26336].
-
-Tue Oct 27 15:53:10 2009 Tanaka Akira <akr@fsij.org>
-
- * gc.h (SET_MACHINE_STACK_END): use __i386.
- Some compiler may not define __i386__.
- Solaris 64-bit Developer's Guide:
- http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view
-
-Tue Oct 27 15:44:48 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (getbinaryfile, list): call to_s to convert
- a Pathname instance into a string. [ruby-core:26237]
-
-Tue Oct 27 12:30:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.h (SET_MACHINE_STACK_END): use __i386__ instead of __i386,
- and explicit size qualifiers.
-
-Tue Oct 27 09:40:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * gc.h (SET_MACHINE_STACK_END): add x86_64 version by nobu.
-
-Tue Oct 27 09:27:59 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vm_exec.c (DECL_SC_REG): use __clang__.
-
-Tue Oct 27 08:56:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb: reverted r25443 because build_os is used in mkmf.rb
- on some platforms. [ruby-core:26332]
-
-Tue Oct 27 08:01:57 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * parse.y (ripper_filename): add Ripper#filename. [ruby-dev:37856]
-
- * test/ripper/test_filter.rb: add more tests.
-
-Tue Oct 27 07:53:25 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (garbage_collect_with_gvl): do not garbage_collect when
- dont_gc flag turned on. [ruby-core:26327]
-
-Tue Oct 27 07:38:39 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c,stubs.c: remove errors or warnings when compiled
- with old ruby 1.8.x.
-
- * ext/tk/tkutil/tkutil.c: ditto.
-
-Tue Oct 27 05:56:39 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vm.c (invoke_block_from_c): return Qnil when its iseq is
- SPECIAL CONST. [ruby-core:26335]
-
-Tue Oct 27 05:11:49 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * vm_exec.c (DECL_SC_REG): check defined(__asm__) before use it.
- LLVM/clang defines __GNUC__ but doesn't have __asm__.
-
-Tue Oct 27 03:45:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): added RUBY_SITEARCH to use
- different name from RUBY_ARCH. [ruby-core:26324]
-
-Mon Oct 26 20:04:13 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * array.c (rb_ary_cmp): Array#<=> returns nil when comparison fails
- [ruby-core:26316]
-
-Mon Oct 26 18:37:57 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (default_proc_arity_check): new support function.
-
- * hash.c (rb_hash_initialize): should do arity check as #default_proc=.
- [ruby-core:26281]
-
-Mon Oct 26 13:24:17 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/remote-tk.rb: typo fixed.
-
-Mon Oct 26 12:34:08 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ruby.c (usage): -T and -W descriptions updated. see
- [ruby-dev:39539]
-
- * man/ruby.1: ditto.
-
-Mon Oct 26 12:06:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_fwrite): adjust stdio file position after direct write on
- BSDish platforms. [ruby-core:26300]
-
-Sun Oct 25 15:44:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/handle.c (dlhandle_sym): fixed an invalid local variable
- declaration.
-
-Sun Oct 25 13:33:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_cntl): F_DUPFD is platform dependent.
-
-Sun Oct 25 10:19:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/handle.c (rb_dlhandle_close): fixed an invalid local
- variable declaration.
-
-Sun Oct 25 05:44:34 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb (**): Optimization (up to 45% faster)
-
-Sat Oct 24 14:28:40 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_set_default_proc): checks arity of default_proc
- of a Hash. [ruby-core:26087]
-
-Sat Oct 24 13:38:45 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_cmp): defines Object#<=>. [ruby-core:24063]
-
-Sat Oct 24 09:51:28 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_flat_map): new method that concatenates the values
- from given block. also provides alias #collect_concat.
-
-Sat Oct 24 00:36:47 2009 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_cntl): update max file descriptor by the result of
- fcntl(F_DUPFD).
-
-Fri Oct 23 16:31:14 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_class_new): move class check to rb_check_inheritable().
-
- * class.c (rb_check_inheritable): should not allow subclass of
- class Class. [ruby-core:26225]
-
-Fri Oct 23 14:25:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (target, target_alias): replace with real cpu.
-
- * mkconfig.rb: build* are not needed in rbconfig.rb.
-
- * configure.in (warnflags): use -Wextra only when
- -Wno-missing-field-initializers is available.
-
- * configure.in (optflags): removed -fomit-frame-pointer by default.
-
-Fri Oct 23 09:12:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/pathname.rb (Pathname::SAME_PATHS): FNM_SYSCASE is always
- non-nil.
-
-Fri Oct 23 07:32:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, Makefile.in, win32/Makefile.sub (XRUBY): runnable
- ruby without current libraries.
-
- * common.mk (rdoc): use XRUBY.
-
-Fri Oct 23 07:28:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (warnflags): use -Wextra instead of -Wall.
-
- * gc.c (mark_current_machine_context): get rid of warning.
-
-Thu Oct 22 21:10:39 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * class.c (rb_obj_basic_to_s_p): typo. Please become familiar with
- the ANSI style.
-
-Thu Oct 22 20:20:27 2009 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/envutil.rb (assert_in_out_err): test_stdout and
- test_stderr should be an array.
-
- * test/ruby/test_rubyoptions.rb (test_notfound): test_stdin of
- assert_in_out_err should be a string.
-
-Thu Oct 22 17:49:05 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/fileutils.rb (FileUtils#fu_get_uid, fu_get_gid): Do not
- convert an integer back and forth.
-
-Thu Oct 22 17:29:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (arg_prepend): removed. a patch from Mikhail T. in
- [ruby-core:26217].
-
-Thu Oct 22 04:54:41 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_inspect): print instance variables only when
- Object#to_s is not overridden. [ruby-core:24425]
-
- * class.c (rb_obj_basic_to_s_p): new function.
-
-Wed Oct 21 19:32:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (rb_obj_inspect): fixed rdoc about the case that to_s
- is called. [ruby-core:24425]
-
-Wed Oct 21 08:17:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/logger/test_logger.rb (TestLogDevice#test_write): check
- also error message.
-
-Wed Oct 21 03:54:41 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb:
- Creator functions now strict with their arguments
- Support for empty matrices (see new method Matrix.empty)
- Matrix#trace raises an ErrDimensionMismatch if the matrix is not square
- Enumerators are returned when no block given
- Consistent results when accessing elements with out of bounds indices
- Details in [ruby-core:23598].
-
-Wed Oct 21 00:27:15 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/webrick/httpauth/digestauth.rb: typo in exception message fixed.
-
-Wed Oct 21 00:17:28 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/logger.rb: imported upstream version (logger/1.2.7) see #2238.
- * do not raise an exception even if log writing failed.
- * do not raise ShiftingError if an aged file already exists.
- (no ShiftingError will be raised from 1.2.7, just warn() instead)
- * test/logger/test_logger.rb: ditto.
-
-Tue Oct 20 22:29:06 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/matrix.rb: Bug fix. See detail [ruby-core:23598].
-
-Tue Oct 20 17:57:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_symbol, r_symreal): fixed the order of symbol and
- its encoding modifier, in order to make the dump readable from
- 1.8. [ruby-dev:39515]
-
-Tue Oct 20 16:41:18 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h (finite, scalb): inline'ed non-standard
- identifier macros. [ruby-core:26166]
-
-Tue Oct 20 15:38:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (ripper_intern): enable literal optimization.
-
- * parse.y (method_call): dispatch symbols. a patch from Andy Keep in
- [ruby-core:26169]. [ruby-core:26165]
-
- * parse.y (mlhs_basic): fixed handling splat in middle of mlhs. a
- patch from Andy Keep in [ruby-core:26163]
-
- * parse.y (parser_here_document): dispatch delayed heredoc
- contents. based on a patch from Andy Keep in [ruby-core:24855].
-
-Mon Oct 19 15:17:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * .gdbinit (rb_method_entry): search method entry by class and id.
-
-Mon Oct 19 15:03:31 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (enc/unicode/name2ctype.h): no need to create
- directory if it already exists.
-
-Mon Oct 19 11:34:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * .gdbinit (rb_ps): dump all threads and their callstacks. based
- on [ruby-core:26155] by Joshua ben Jore <twists AT gmail.com>.
-
-Mon Oct 19 10:59:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (prepare_iseq_build, rb_iseq_build_for_ruby2cext):
- untrust mark array. [ruby-core:26137]
-
-Mon Oct 19 05:49:53 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/rexml/element.rb (text=): false should be converted to string.
- A patch by Teruo Oshida [ruby-dev:38351]
-
-Sun Oct 18 22:33:25 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: do not require lib/delta.rb.
-
- * lib/date/delta.rb: follows the above change.
-
-Sun Oct 18 19:14:21 2009 Tanaka Akira <akr@fsij.org>
-
- * parse.y (is_special_global_name): add boundary check.
-
-Sun Oct 18 18:31:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_init_loadpath_safe): should not dup tmp string. a
- patch from neomjp neomjp in [ruby-core:24251].
-
-Sun Oct 18 09:49:14 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/test_prime.rb
- (TestPrime#test_eratosthenes_works_fine_after_timeout):
- test for [ruby-dev:39465].
-
- * lib/prime.rb (Prime::EratosthenesSieve):
- fixed [ruby-dev:39465].
- suppressed memory reallocation.
- constantified some magic numbers.
-
-Sat Oct 17 22:11:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (id2encidx): register encoding name.
- (r_object0): register object before encoding name.
- [ruby-core:24882]
-
-Sat Oct 17 17:56:58 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/rake/test_fileutils.rb (Rake::TestFileUtils#test_sh): uses
- FileUtils::RUBY instead of fixed "ruby" so that the ruby command
- works fine in Ruby's "make test-all".
- (test_sh_with_a_single_string_argument): ditto.
- (test_sh_with_multiple_arguments): ditto.
- (test_sh_failure): ditto
- (test_sh_special_handling): ditto.
-
-Sat Oct 17 17:30:06 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c (big_split): fix off-by-one error. [ruby-dev:39501]
-
-Sat Oct 17 16:34:27 2009 Tanaka Akira <akr@fsij.org>
-
- * parse.y (parser_yylex): fix token even after trailing under score.
-
-Sat Oct 17 11:27:44 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_method.c (basic_obj_respond_to): call #respond_to_missing?
- always with two arguments. [ruby-core:26090]
-
-Sat Oct 17 08:51:44 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator#respond_to_missing): warn only when
- specified method is a private. [ruby-dev:39498]
-
-Fri Oct 17 00:05:53 2009 wanabe <s.wanabe@gmail.com>
-
- * st.c (unpack_entries): save table->bins and never change the table
- during unpacking. Because st_insert() may cause GC and refer the
- table, i.e. st_foreach(). [Bug #2196]
-
-Fri Oct 16 22:20:25 2009 Tanaka Akira <akr@fsij.org>
-
- * prelude.rb (require_relative): defined as a module function of
- Kernel.
-
-Fri Oct 16 20:18:28 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator#method_missing): remove backtrace
- lines _until_ `method_missing'.
-
-Fri Oct 16 20:09:55 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator#freeze): #freeze should freeze self
- and the target at once. [ruby-core:26118]
-
-Fri Oct 16 19:39:28 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator#respond_to_missing): warn if optional
- include_private argument is not false. Delegator does (and
- should) not forward private methods. [ruby-core:26080]
-
- * lib/delegate.rb (Delegator#respond_to_missing): instead of
- redefining #respond_to?, use #respond_to_missing?. [ruby-core:26081]
-
-Fri Oct 16 18:42:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bootstraptest/test_gc.rb: added tests based on [ruby-dev:39484]
- from wanabe <s.wanabe AT gmail.com>.
-
-Fri Oct 16 16:09:01 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_spawn): `\'' is also quote character.
-
-Fri Oct 16 13:40:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.h (rb_gc_debug_body): constified.
-
-Fri Oct 16 13:20:39 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (VpMidRound): remove warnings.
- patch from Charlie Savage. [ruby-core:22869]
-
- * ext/digest/bubblebabble/bubblebabble.c (bubblebabble_str_new): ditto.
-
- * ext/digest/digest.c (hexencode_str_new): ditto.
-
- * ext/iconv/iconv.c (iconv_convert): ditto.
-
- * ext/socket/socket.c (inspect_sockaddr): ditto.
-
- * ext/socket/raddrinfo.c (sockaddr_obj): ditto.
-
- * ext/syck/emitter.c (syck_emitter_write): ditto.
-
- * ext/syck/emitter.c (syck_emitter_flush): ditto.
-
- * ext/syck/emitter.c (syck_emit_tag): ditto.
-
-Fri Oct 16 12:03:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/csv.rb (CSV#raw_encoding): returns ASCII-8BIT when the io
- doesn't have encoding.
-
-Fri Oct 16 03:15:52 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/csv.rb (CSV#read_to_char): set encoding and verify data
- which read from io before encode it to @encoding.
-
- * lib/csv.rb (CSV#raw_encoding): add to get @io's encoding.
-
- * lib/csv.rb (CSV#read_io): add to read string and set @io's
- encoding.
-
-Thu Oct 15 18:26:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_intern3): check symbol table overflow before generate
- next id. [ruby-core:26092]
-
-Thu Oct 15 15:14:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_encoding_set): get rid of parsing non-ascii string, and
- refine messages for invalid name encoding.
-
- * io.c (io_reopen): unread current buffer before telling the
- position, for the case of reopening same file. [ruby-dev:39479]
-
-Thu Oct 15 14:20:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_create): cannot retry with given block.
- [ruby-dev:39487]
-
-Thu Oct 15 09:25:07 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/init.c (rsock_init_sock): mswin doesn't have S_IFSOCK
- flag in st_mode of struct stat. so, use rb_w32_issocket() function
- instead of S_ISSOCK macro.
-
-Thu Oct 15 00:47:42 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/enc-unicode.rb,
- enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
- enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
- use UTS#18 for POSIX character class.
- http://rubyspec.org/issues/show/161
-
-Thu Oct 15 00:26:07 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/init.c (rsock_init_sock): validate file descriptor.
-
-Wed Oct 14 13:24:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): script name should not be shown in an
- error message before loaded.
-
-Wed Oct 14 09:06:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_run_node): need to call ruby_cleanup() always even
- if any error occurred so far.
-
-Wed Oct 14 08:08:12 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * proc.c (mnew): Method#new checks for respond_to_missing? with
- private set to true
- [ruby-core:26069]
-
-Tue Oct 13 21:05:01 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/enc-unicode.rb,
- enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
- enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
- Add DerivedCoreProperties, PropList (Binary Property),
- PropertyAlias and PropertyValueAlias.
- Now users of tool/enc-unicode.rb should specify
- the directory of UCD files.
-
-Tue Oct 13 18:54:25 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/variable.rb: bug fix. additional trace definition changes the
- option of first trace definition.
-
-Tue Oct 13 18:23:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (token_info_push, token_info_pop): reduced ifdefs.
-
- * parse.y (parser_magic_comment): fixed normalization.
-
-Tue Oct 13 09:04:14 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * thread.c: Revert changes to Thread#raise made in r25278
- [ruby-core:25367]
-
- * eval_intern.h: ditto
-
-Mon Oct 12 23:27:57 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (login): use "anonymous@" as a default password.
- [ruby-dev:39451]
-
-Mon Oct 12 22:48:25 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (retrlines): added a new block parameter.
-
- * lib/net/ftp.rb (gettextfile): preserve missing end-of-line at end
- of files. [ruby-core:24590]
-
-Mon Oct 12 19:48:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_run_node): if an exception occurred in ruby_option,
- the result is not executable.
-
-Mon Oct 12 05:51:11 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regparse.c (fetch_token): warn invalid back reference
- and subexp call. (\k and \g).
-
-Mon Oct 12 03:47:42 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * marshal.c (has_encoding): added for check the regexp
- is dumped by 1.8 or 1.9.
-
- * marshal.c (r_object0): use has_encoding.
-
-Sun Oct 11 15:54:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/gdbm/gdbm.c (fgdbm_select): fixed rdoc. a patch from Justin
- Collins in [ruby-core:26050].
-
-Sun Oct 11 10:27:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/irb/context.rb (IRB::Context#irb_name): removed duplicated
- attr_reader. [ruby-core:26047]
-
- * lib/irb/ruby-lex.rb (RubyLex#lex_int2): removed duplicated
- character class range.
-
-Sun Oct 11 10:04:35 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regparse.c (fetch_token_in_cc): warn when \p is not
- followed by property name.
-
- * regparse.c (fetch_token): ditto.
-
-Sun Oct 11 09:44:46 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regerror.c (onig_vsnprintf_with_pattern): added.
-
- * regparse.c (onig_syntax_warn): use above.
-
-Sun Oct 11 09:04:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (RB_GC_GUARD_PTR): workaround for gcc
- optimization.
-
- * include/ruby/ruby.h (ruby_exec_node): declared.
-
-Sun Oct 11 03:10:50 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regparse.c (onig_syntax_warn): added.
-
- * regparse.c (CC_ESC_WARN, CLOSE_BRACKET_WITHOUT_ESC_WARN,
- CC_DUP_WARN, UNKNOWN_ESC_WARN): use onig_syntax_warn.
-
-Sun Oct 11 00:14:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (marshal_dump, marshal_load): prevent from GC.
-
-Sat Oct 10 23:57:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (path_check_0): prevent from GC.
-
-Sat Oct 10 23:51:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (rb_transcoding, str_transcoding_resize): fixed
- types.
-
-Sat Oct 10 20:35:27 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * math.c (math_atanh): reverted r25279.
-
-Sat Oct 10 19:03:29 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/curses/curses.c: use rb_thread_blocking_region to avoid
- rb_read_check. This makes other threads runnable in getstr and
- wgetstr.
- (getch_func): extracted from curses_getch.
- (curses_getch): use rb_thread_blocking_region with getch_func.
- (getstr_func): extracted from curses_getstr.
- (curses_getstr): use rb_thread_blocking_region with getstr_func.
- (wgetch_func): extracted from window_getch.
- (window_getch): use rb_thread_blocking_region with wgetch_func.
- (wgetstr_func): extracted from window_getstr.
- (window_getstr): use rb_thread_blocking_region with wgetstr_func.
-
- * include/ruby/io.h (rb_read_check): deprecated because it access
- internal of stdio.
-
-Sat Oct 10 18:59:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (cflags, cxxflags): remove duplicating options.
-
-Sat Oct 10 18:19:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, Makefile.in (LIBRUBY_SO), common.mk (ruby.imp),
- win32/mkexports.rb (each_export): exclude _threadptr_ functions.
-
-Sat Oct 10 17:55:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_threadptr_errinfo): renamed.
-
-Sat Oct 10 17:03:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_exec_node): removed unused argument.
-
-Sat Oct 10 14:55:55 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * math.c (math_atanh): Fix bug for Math.atanh(+/-1). It now returns
- +-Infinity. [ruby-core:26028]
-
-Sat Oct 10 14:09:40 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * thread.c (rb_threadptr_execute_interrupts_rec, rb_threadptr_raise):
- Thread#raise with no argument will now re-raise the current exception
- if there is one [ruby-core:25367]
-
- * eval.c (get_errinfo, rb_rubylevel_thread_errinfo): Getter for
- current exception for a given thread
-
-Fri Oct 9 23:10:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_method.c (rb_method_boundp): should exclude NOEX_RESPONDS.
- based on the patch from Nikolai Lugovoi. [ruby-core:25949]
-
-Fri Oct 9 21:14:40 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb (Resolv::DNS::Requester::ConnectedUDP): disable
- reverse lookup.
- (Resolv::DNS::Requester::UnconnectedUDP): ditto.
-
-Fri Oct 9 10:12:13 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/irb/context.rb (IRB::Context#initialize):
- remove warnings when $VERBOSE is set as true in .irbrc.
-
-Fri Oct 9 02:58:18 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/enc-unicode.rb: optimized.
-
- * enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
- enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
- U+100000-U+10FFFD is assigned, not Cn.
-
-Fri Oct 9 02:12:02 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * ext/curses/curses.c: Many functions of module Curses could cause a
- crash if the ncurses library was not properly initialized.
- Fix pointed out by Alexander Beisig [ruby-core:22592]
- Functions fixed: attroff, attron, attrset, bkgd, bkgdset,
- can_change_color, close_screen, closed, color_content, curs_set,
- def_prog_mode, delch, deleteln, getmouse, getstr, has_colors,
- init_color, init_pair, insertln, keyname, mouseinterval, mousemask,
- pair_content, pair_number, reset_prog_mode, resizeterm, scrl,
- setscrreg, standend, standout, start_color, timeout, ungetmouse,
- use_default_colors
-
-Fri Oct 9 01:07:34 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (ADD_TRACE): fire coverage event in ensure clause.
- [ruby-dev:39303]
-
- * iseq.h, iseq.c: ditto.
-
-Fri Oct 9 00:33:29 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/net/telnet.rb (cmd): Pass FailEOF options: patch by Brian
- Candler [ruby-core:22723]
-
-Fri Oct 9 00:01:17 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Socket.udp_server_recv): extracted from
- Socket.udp_server_loop_on.
-
-Thu Oct 8 05:45:14 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/enc-unicode.rb: parse range notation of UnicodeData.txt.
-
- * enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
- enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
- follow above change. [ruby-dev:39444]
-
-Thu Oct 8 02:46:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_inspect): copy by chunks.
-
-Thu Oct 8 01:23:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (iseq_s_disasm): accept proc objects. [ruby-core:18762]
-
-Wed Oct 7 16:42:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (mark_dump_arg, mark_load_arg): ignore already cleaned
- data. [ruby-core:25969]
-
- * marshal.c (clear_dump_arg, clear_load_arg): clear freed fields.
-
-Wed Oct 7 16:06:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (rb_long2int): evaluates the argument only
- once.
-
- * struct.c (rb_struct_alloc): check array length overflow.
-
-Wed Oct 7 09:23:49 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_inspect): don't assign -1 to unsigned int.
-
-Wed Oct 7 00:27:01 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb (Resolv::DNS.bind_random_port): bind to "::" for IPv6.
- (Resolv::DNS::ConnectedUDP#initialize): specify is_ipv6 argument of
- bind_random_port.
- [ruby-core:25970]
-
-Tue Oct 6 23:32:38 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_upto): RDoc updated. a patch from Nobuhiro
- IMAI <nov at yo.rim.or.jp> in [ruby-dev:39440]. [ruby-dev:39439]
-
-Tue Oct 6 21:30:58 2009 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_reopen): avoid close if possible.
-
-Tue Oct 6 18:56:09 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (rb_struct_select): Struct#select should return
- enumerator when no block given.
-
-Tue Oct 6 06:26:00 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * * ext/tk/lib/tk/canvas.rb: *** POTENTIALLY INCOMPATIBLE ***
- 'tags' option of a TkcItem object should give a list of TkcTag objs.
-
- * ext/tk/lib/tkextlib/vu/dial.rb: fix logical bug.
-
- * ext/tk/lib/tk/canvas.rb, ext/tk/lib/tkextlib/blt/component.rb:
- lack of support for methodcall_optkeys.
-
-Mon Oct 5 17:19:33 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator::public_api): take snapshot of
- public method at the beginning time.
-
- * lib/delegate.rb (SimpleDelegator#initialize): use
- Delegator.public_api since public_method might be added after
- initialization. [ruby-dev:39383]
-
- * lib/delegate.rb (DelegateClass): ditto.
-
-Mon Oct 5 12:22:12 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_{times, shuffle_bang, sample}): reducing macro
- calls inside of the loop by keeping pointers in local
- variables. a patch from Masahiro Kanai (CanI) in [ruby-dev:39406].
- It was found and fixed at Security and Programming camp 2009.
-
- * string.c (rb_str_{times, split_m}): ditto.
-
- * struct.c (rb_struct_{getmember, set, aref_id, aset_id}, {make,
- inspect}_struct, recursive_{equal, hash, eql}): ditto.
-
-Mon Oct 5 00:09:57 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_method.c (basic_obj_respond_to): should not call
- #respond_to_missing? for not implemented methods.
- [ruby-core:25909]
-
- * vm_method.c (rb_method_boundp): returns exceptional value 2 for
- not-implemented methods when called from #respond_to? (specifies
- by new constant NOEX_RESPONDS).
-
- * method.h (enum): new constant NOEX_RESPONDS added.
-
-Sun Oct 4 22:16:29 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/cookie.rb: add default value to @@accept_charset
- if have not defined. [ruby-dev:38987]
-
- * lib/cgi/util.rb: ditto.
-
-Sun Oct 4 19:30:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (struct {dump,load}_arg): manage with dfree, instead
- of using local variable which may be moved by context switch.
- [ruby-dev:39425]
-
-Sun Oct 4 15:00:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * pack.c (NATINT_LEN, pack_pack): suppressed warnings.
-
-Sun Oct 4 14:01:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems.rb (Gem::binary_mode): binary mode uses binary
- encoding.
-
-Sun Oct 4 08:27:10 2009 Tanaka Akira <akr@fsij.org>
-
- * enum.c (slicebefore_ii): use id_eqq.
-
-Sun Oct 4 06:40:09 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/setup (ruby.mmp): added macro RUBY_EXPORT to match the
- change in dln.c
-
-Sun Oct 4 05:34:34 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/variable.rb: add TkVariable#to_hash,to_proc,to_int,
- to_str,to_ary
-
-Sun Oct 4 00:59:52 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/core.rb: fix command-line option of
- non-interactive terminal. [ruby-core:23016]
-
-Sun Oct 4 00:40:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rake/contrib: added. [ruby-core:25918]
-
-Sat Oct 3 22:14:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (bv_decls, bvar): fix for block variables.
- [ruby-dev:39423]
-
-Sat Oct 3 21:19:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_method.c (rb_add_method_def): no redefinition warning on
- undef.
-
-Sat Oct 3 18:51:11 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_f_integer): now Integer() takes optional base
- argument. base will be ignored for non string values.
- suggested by Sam Carr at RubyFoo Lounge at London.
-
- * test/ruby/test_integer.rb (TestInteger#test_Integer): test
- updated.
-
-Sat Oct 3 04:34:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (assignable_gen): parser_yyerror takes two arguments.
-
-Sat Oct 3 04:07:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rake: updated to rake code to rake-0.8.7 source code base.
-
- * lib/rake/loaders/makefile.rb (Rake::MakefileLoader#process_line):
- respace dependencies too.
-
-Sat Oct 3 02:59:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (assignable_gen): get rid of macro collision.
-
-Sat Oct 3 02:49:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (ary_make_shared): should count frozen array itself.
-
-Sat Oct 3 01:01:20 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/unicode/name2ctype.h: Updated to Unicode 5.2.0.
-
-Sat Oct 3 01:01:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: workaround for regexp metacharacters of expr in
- prefix path.
-
-Sat Oct 3 00:47:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ripper/dummyparser.rb (DummyParser): improvement by Magnus
- Holm in [ruby-core:25884].
- * remove scanner events which simply returned the first argument.
- * all parser events are now automatically generated.
- * simplify blocks.
-
-Sat Oct 3 00:43:52 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * method.h (rb_method_type_t): remove a comma at end of
- enumerator list.
-
-Sat Oct 3 00:31:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * range.c (discrete_object_p): needs the argument type to get rid
- of truncation on platforms where VALUE is larger than int.
-
-Fri Oct 2 22:30:15 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/unicode/name2ctype.h.blt, enc/unicode/name2ctype.kwd,
- enc/unicode/name2ctype.src: Updated to Unicode 5.2.0.
- NOTE: when you update these data, download UnicodeData.txt
- and Scripts.txt from http://www.unicode.org/Public/UNIDATA/
- and run
- ruby1.9 tool/enc-unicode.rb UnicodeData.txt Scripts.txt \
- > enc/unicode/name2ctype.kwd
-
- * enc/unicode/Scripts.txt: removed.
-
- * enc/unicode/UnicodeData.txt: removed.
-
-Fri Oct 2 20:49:19 2009 Tanaka Akira <akr@fsij.org>
-
- * enum.c (enum_slice_before): take a pattern if no block given.
-
-Fri Oct 2 20:37:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (ripper_yylval_id, ripper_get_{id,value}): wrap ID by
- NODE to track local variable assignment.
-
- * parse.y (lvar_defined_gen, assignable_gen): enable local
- variable check. [ruby-core:24923]
-
- * parse.y (validate): use value only.
-
- * test/ripper/test_parser_events.rb (test_local_variables): tests
- based on a patch from Magnus Holm in [ruby-core:25885].
-
-Fri Oct 2 15:34:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (ruby_suppress_tracing): get rid of clobbering by
- longjmp.
-
-Fri Oct 2 09:20:35 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (rb_origenviron): remove unused old variable.
- [ruby-dev:39412]
-
-Thu Oct 1 14:16:39 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/{setup.mak,Makefile.sub,win32.c},include/ruby/win32.h (RT_VER):
- split compiler specification and runtime library specification.
-
- * win32/Makefile.sub (LD_SHARED*, config.status): no need to embed
- manifest if not exist.
-
-Thu Oct 1 13:23:14 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_getpid): simply call GetCurrentProcessId()
- instead of calling MSVCRT's getpid().
-
-Wed Sep 30 13:15:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_method.c (rb_add_method_def): show the location where
- overwritten method was defined. [ruby-dev:39400]
-
-Wed Sep 30 00:37:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enumerator.c (enumerator_block_call): extracted.
-
-Wed Sep 30 00:00:25 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_inspect): escape as \x{XXXX} when the encoding is
- other than Unicode. [ruby-dev:39388]
-
-Wed Sep 30 00:00:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (THREAD_MODEL): modified message when no thread
- model is available.
-
-Tue Sep 29 23:17:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_scan_open_args): rb_utf8mac_encoding is undefined.
-
-Tue Sep 29 22:25:41 2009 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h (rb_struct_iv_get): deprecated because it is
- not used and access internal structure.
-
-Tue Sep 29 22:19:36 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit/assertions.rb (assert_equal): use Time#subsec if nsec
- is not enough to distinguish arguments.
-
-Tue Sep 29 21:16:35 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_scan_open_args): add UTF8-MAC to no-conversion encoding.
-
-Tue Sep 29 21:21:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (--enable-pthread): deprecated.
-
-Tue Sep 29 21:03:59 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/pp.rb (Kernel#pp): returns its arguments, like Kernel#p.
- [ruby-dev:34830]
-
-Tue Sep 29 17:02:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/json/lib/json/common.rb (recurse_proc): removed needless
- module_function, since visibility is already module_function.
-
-Tue Sep 29 13:48:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_method.c (rb_method_definition_eq): non-null definition is
- not equal to null definition.
-
- * vm_method.c (rb_add_method_def): nothing to do if old method had
- same definition. [ruby-dev:39397]
-
-Tue Sep 29 06:50:32 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_inspect): dump as \uXXXX when the
- string is in Unicode. [ruby-dev:39388]
-
-Tue Sep 29 06:49:16 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_enc_unicode_p): defined.
- Returns 1 when the encoding is Unicode series
- other than UTF-7 else 0.
-
-Tue Sep 29 04:14:08 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_filesystem_encoding): On Unix systems,
- filesystem encoding should be locale encoding.
- [ruby-dev:39393]
-
-Tue Sep 29 04:07:58 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * hash.c (rb_f_getenv): use rb_filesystem_str_new_cstr
- instead of rb_str_new2.
- ENV['PATH'].encoding should be Filesystem Encoding
- because its content is related to filesystem.
- see [ruby-dev:39393]
-
- * hash.c (env_fetch): ditto.
-
- * string.c (rb_filesystem_str_new): defined.
-
- * string.c (rb_filesystem_str_new_cstr): ditto.
-
- * include/ruby/intern.h (rb_filesystem_str_new): added.
-
- * include/ruby/intern.h (rb_filesystem_str_new_cstr): ditto.
-
-Tue Sep 29 04:06:18 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/st.h: include inttypes.h and stdint.h.
-
-Tue Sep 29 00:07:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (rb_f_getenv, env_fetch): env string may be overwritten.
-
-Mon Sep 28 23:30:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (load_lib, dln_find_exe_r): env string may be overwritten.
-
- * dln.c (dln_{exit,loaderror,memerror,notimplement}): renamed as
- independent names.
-
- * dln.c (aix_loaderror): needs format string.
-
-Mon Sep 28 19:36:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (LK_ERR): with overlapped I/O, LockFileEx() returns
- ERROR_IO_PENDING if the file is locked.
-
-Mon Sep 28 19:05:05 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * include/ruby/st.h: aligned prototype of st_hash_uint32 with function
- definition (fixing compiling problem on cygwin)
-
-Mon Sep 28 12:13:15 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * method.h (enum): new method type VM_METHOD_TYPE_MISSING.
-
- * vm_eval.c (vm_call0): invoking VM_METHOD_TYPE_MISSING method
- objects.
-
- * vm_insnhelper.c (vm_call_method): invoking method defined from
- VM_METHOD_TYPE_MISSING.
-
- * proc.c (rb_method_entry_arity): ditto.
-
- * vm_method.c (rb_method_entry_eq): two method object wraps
- method_missing with same symbol should be equal.
- [ruby-core:25755]
-
- * proc.c (mnew): should always return method object.
-
-Mon Sep 28 11:38:07 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (parser_tokadd_string): the byte after ``\'' may be a part of
- multibyte character, so pushback it. [ruby-list:46416]
-
-Mon Sep 28 10:06:38 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * stringio/stringio.c (strio_read): set ASCII-8BIT encoding
- when length argument is given.
-
-Mon Sep 28 01:28:17 2009 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * Makefile.in (miniruby): suppress duplication warning on AIX.
-
-Mon Sep 28 01:13:25 2009 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * common.mk (ruby.imp): add text section [Bug #2064].
-
- * common.mk (ruby.imp): do not export Init_*.
-
-Sun Sep 27 13:06:43 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/pp.rb (PP:ObjectMixin#pretty_print): delegates has no inspect
- method. [ruby-core:25804]
-
-Sun Sep 27 12:01:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_buf_cat2): optimize since all second arguments are
- constant literals.
-
- * string.c (str_cat_char): unused now.
-
- * string.c (rb_hash_{uint{32,},end}): removed.
-
-Sun Sep 27 11:58:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (optflags): add -fomit-frame-pointer by default.
-
-Sun Sep 27 11:28:15 2009 Tanaka Akira <akr@fsij.org>
-
- * enum.c (enum_minmax): use struct for memo.
- (enum_minmax_by): ditto.
-
-Sun Sep 27 10:21:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (warnflags): check all flags if each are available.
-
-Sun Sep 27 05:35:17 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/ext/generator/generator.c: Documentation patch by okkez.
- [Bug #2075]
-
-Sun Sep 27 04:20:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_inspect): result's encoding should be fixed.
- If default_internal is not nil, the encoding is default_internal.
- Else if default_external is not nil, the encoding is default_external.
- But the encoding is not ASCII-compatible, the encoding is replaced by
- US-ASCII.
- Characters in ASCII-incompatible encoding or non ASCII characters
- in other than the encoding will be \xXX escaped.
- [ruby-dev:39343]
-
- * string.c (str_buf_cat2): defined.
-
- * string.c (prefix_escape): removed.
-
-Sun Sep 27 05:37:45 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/missing-pips.c: Updated to work with the latest PIPS 1.6.
-
- * symbian/setup: ditto.
-
- * symbian/README.SYMBIAN: ditto.
-
-Sun Sep 27 02:00:46 2009 Koichi Sasada <ko1@atdot.net>
-
- * string.c: use rename-macro instead of RUBY_ALIAS_FUNCTION_TYPE.
- Because build causes failure.
-
-Sat Sep 26 23:29:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * st.c: moved murmur hash from string.c. [ruby-dev:39376]
-
-Sun Sep 26 00:24:14 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/setup: Updated .mmp file generation due to blockinlining.c removal.
-
-Sat Sep 26 22:39:24 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * Makefile.in(test-rubyspec): explicitly executes run subcommand of
- mspec.
-
- * spec/README: typo fix
-
-Sat Sep 26 17:53:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * st.c (COLLISION): improved collision log feature.
-
- * string.c (hash): updated to MurmurHash 2.0 2009-09-19.
-
- * string.c (rb_hash_start): fixed shift width on 128bit platform.
-
- * include/ruby/intern.h (rb_hash_{start,uint32,uint,end}): fixed
- prototypes.
-
-Sat Sep 26 13:26:55 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/net/http.rb (transport_request): Handle timeout error by
- closing socket if exception raised. [ruby-core:20976]
-
-Sat Sep 26 12:08:17 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_method.c (rb_method_entry_eq): method defined from same
- block/proc should be equal. [ruby-core:25755] [ruby-core:24791]
-
-Sat Sep 26 08:35:12 2009 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (compile_string): rename to parse_string(), because
- this function only parse String to NODE.
-
-Fri Sep 25 16:01:45 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c, include/ruby/win32.h (rb_w32_access): new function to
- replace MSVCRT's access().
- [ruby-core:25761]
-
- * file.c (eaccess): workaround for recent MSVCRT is no longer needed.
-
-Fri Sep 25 13:04:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (mnew): fix for instance method of Module, BasicObject
- and subclass of a class which overrides respond_to_missing?.
- based on a patch from Nikolai Lugovoi <nlugovoi AT gmail.com> in
- [ruby-core:25748].
-
-Fri Sep 25 11:56:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_method.c (rb_mod_method_defined): should return true or false.
-
-Thu Sep 24 13:32:53 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * proc.c (mnew): generate method object that wraps method_missing,
- when #respond_to_missing? is defined.
-
- * test/ruby/test_object.rb (test_respond_to_missing): add test
- suites for #respond_to_missing? changes.
-
-Thu Sep 24 09:41:42 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/mathn.rb (Bignum#**): Fixed bignum**fixnum that was broken when
- requiring lib/mathn
- [ruby-core:25740]
-
-Thu Sep 24 02:21:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/lib/bigdecimal/math.rb (atan): atan(Infinity) is
- PI/2.
-
- * ext/bigdecimal/lib/bigdecimal/math.rb (atan): reduce loop with
- the double-angle formula. based on a patch from Masahiro
- Kanai (CanI) in [ruby-dev:39367].
-
-Thu Sep 24 01:14:18 2009 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * dln.c (aix_loaderror): fixed typo. suppress warnings.
-
-Thu Sep 24 00:17:06 2009 Tanaka Akira <akr@fsij.org>
-
- * enum.c (enum_minmax): reduce comparison.
- (enum_minmax_by): ditto.
-
-Wed Sep 23 22:58:57 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/thread.rb (ConditionVariable#wait): add timeout argument.
- [ruby-talk:346154]
-
-Wed Sep 23 21:25:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/lib/bigdecimal/math.rb (atan): refined.
-
-Wed Sep 23 17:08:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (assign_in_cond): also should warn assignment to dvar in
- conditional. [ruby-dev:39363]
-
-Wed Sep 23 13:14:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_upto): keep first width. [ruby-dev:39361]
-
-Wed Sep 23 11:28:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/instruction.rb (make_header_prepare_stack): check stack
- overflow. [ruby-core:25714]
-
- * tool/instruction.rb (make_footer_stack_val): ditto.
-
-Wed Sep 23 05:03:36 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * proc.c (umethod_bind, rb_mod_define_method): Fix bug that
- disallowed methods from singleton classes to be used for
- UnboundMethod#bind, Kernel#define_singleton_method and
- Module#define_method, even when that singleton class was of the right
- kind_of. A patch by Shane O'Brien [ruby-core:25632]
-
-Tue Sep 22 22:56:48 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_method.c (basic_obj_respond_to): new function to fundamental
- behavior for #respond_to?
-
- * vm_method.c (basic_obj_respond_to): calls #respond_to_missing
- method if overridden, to check responsiveness of methods
- implemented by #method_missing.
-
-Tue Sep 22 16:34:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * st.c (st_table_entry, st_get_key): use st_index_t.
-
-Tue Sep 22 16:28:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * regenc.h (PosixBracketEntryType): constified.
-
- * regenc.h (PosixBracketEntryInit): suppress warnings.
-
- * regerror.c (onig_error_code_to_str, onig_snprintf_with_pattern):
- fixed type.
-
- * regparse.c (st_str_end_key, str_end_cmp, str_end_hash):
- constified.
-
- * tool/transcode-tblgen.rb (transcode_generated_code): fixed type.
-
-Tue Sep 22 10:29:06 2009 Tanaka Akira <akr@fsij.org>
-
- * enum.c (enum_chunk): new method Enumerable#chunk.
- * enum.c (enum_slice_before): new method Enumerable#slice_before.
- [ruby-dev:38392] [ruby-dev:39240]
-
-Tue Sep 22 05:58:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c, cont.c, gc.c, insns.def, iseq.c, iseq.h, process.c,
- thread.c, vm.c, vm_core.h, vm_dump.c, vm_eval.c,
- vm_insnhelper.c, vm_method.c, template/insns_info.inc.tmpl,
- tool/instruction.rb: fixed types.
-
-Tue Sep 22 05:04:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/lib/bigdecimal/{ludcmp,math}.rb: depend on
- bigdecimal.
-
- * ext/bigdecimal/lib/bigdecimal/*.rb: made module functions.
-
-Tue Sep 22 04:47:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (GetVpValue): support conversion from
- Rational. [ruby-core:25697]
-
-Tue Sep 22 04:43:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, win32/Makefile.sub (INSNS): depend on tools.
-
-Tue Sep 22 01:10:22 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * ossl_ocsp.c (ossl_ocspres_to_der): Bug fix in Response#to_def.
- Patch by Chris Chandler [ruby-core:18411]
-
-Tue Sep 22 01:10:02 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * ossl_config.c (ossl_config_add_value_m, ossl_config_set_section):
- Check if frozen (or untrusted for $SAFE >= 4) [ruby-core:18377]
-
-Mon Sep 21 17:12:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (proc_binding): allow proc from method. [ruby-core:25589]
-
- * vm.c (collect_local_variables_in_env): block iseq can be NULL.
-
-Mon Sep 21 10:50:37 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (rb_time_succ): make Time#succ obsolete since time is not
- a discrete value.
-
- * range.c (discrete_object_p): treat time objects specially to
- determine discrete values, since time objects have #succ yet are
- discrete (for now at least).
-
-Mon Sep 21 10:13:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (cont_new, cont_capture, fiber_t_alloc): needs already
- running thread. cf. [ruby-core:25681]
-
-Mon Sep 21 00:07:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/lib/bigdecimal/math.rb (sin, cos, atan, exp, log):
- improved precision and performance. based on a patch from Makoto
- Yamashita in [ruby-core:25600] and [ruby-core:25602].
-
-Sun Sep 20 11:11:34 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * struct.c (rb_struct_equal, rb_struct_eql): Handle comparison of
- recursive structures [ruby-core:24759]
-
- * range.c (range_eq, range_eql): ditto for ranges
-
-Sat Sep 19 17:46:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (ENABLE_VM_OBJSPACE): socklist needs st_table in
- rb_w32_sysinit(), before object space initialization.
-
-Sat Sep 19 17:32:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (GlobPathValue), file.c (rb_get_path_check): path names
- must be ASCII compatible.
-
-Sat Sep 19 00:02:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (rb_type): forward declaration to suppress a
- warning. a patch from Naohisa Goto at [ruby-dev:39350]
-
-Fri Sep 18 23:59:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (GlobPathValue): adjust return types. based on a patch
- from Naohisa Goto at [ruby-dev:39350].
-
-Fri Sep 18 23:51:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (r_object0): entry regexp object before its encoding
- name. [ruby-core:25625]
-
-Fri Sep 18 16:29:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (eval.o): needs vm.h.
-
- * eval.c (ruby_cleanup): destruct current VM before exit.
-
- * gc.c (rb_objspace_free): free object space.
-
- * vm.c (ruby_vm_destruct): destruct and free VM struct.
-
-Fri Sep 18 16:15:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_compile_each), parse.y (stmt, arg): arg_concat()
- on op_asgn was inversed. [ruby-core:25629] [Bug #2050]
-
-Fri Sep 18 16:06:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (GlobPathValue): glob allows null bytes as separators.
-
-Fri Sep 18 10:11:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * doc/re.rdoc: use rdoc mode.
-
- * misc/rdoc-mode.el: added.
-
-Fri Sep 18 09:02:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/rdoc.rb (RDoc::RDoc#parse_files): don't branch by
- RUBY_VERSION.
-
- * lib/rdoc/rdoc.rb (RDoc::RDoc#parse_files): emacs local variables
- are delimited by a semicolon. supported Vim style.
-
-Fri Sep 18 07:06:41 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/fileutils/test_fileutils.rb: add a test for [ruby-dev:39345]
-
-Fri Sep 18 06:47:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (push_glob): str should be a string always.
-
- * dir.c (rb_push_glob, dir_globs): use #to_path to convert non-
- string values. cf. [ruby-dev:39345]
-
-Fri Sep 18 06:36:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (rm_f, rm_rf): FileUtils.rm can take an array.
- [ruby-dev:39345]
-
- * lib/mkmf.rb (create_header): open in binmode.
-
-Thu Sep 17 18:34:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (vm_xrealloc): free as like standard free if size is zero.
-
-Thu Sep 17 15:41:02 2009 Koichi Sasada <ko1@atdot.net>
-
- * eval_intern.h: use rb_node_newnode() directly.
-
-Thu Sep 17 15:01:32 2009 Koichi Sasada <ko1@atdot.net>
-
- * blockinlining.c: removed.
-
- * README.EXT: ditto.
-
- * README.EXT.ja: ditto.
-
-Thu Sep 17 13:50:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_s_debug_set): set level, not only boolean.
-
-Thu Sep 17 13:12:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/parser/ruby.rb (RDoc::Parser::Ruby): parse also rdoc
- files.
-
- * doc/re.rdoc: renamed from re.rb.
-
-Thu Sep 17 09:37:28 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * doc/re.rb: New document for Ruby's fork of Oniguruma.
- written by Run Paint Run Run [ruby-core:25420]
-
- * re.c: import document in doc/re.rb.
-
- * .document: add doc/re.rb.
-
-Thu Sep 17 06:03:40 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb (Matrix#rank): Two bug fixes. One made
- Matrix[[0,0],[0,0],[1,0]].rank raise a NoMethodError while the other
- one had Matrix[[0,1],[0,0],[1,0]].rank raise a TypeError.
-
-Thu Sep 17 06:02:04 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Optimizations
-
-Thu Sep 17 00:36:01 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_mdump): error message refined.
-
-Wed Sep 16 19:27:43 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_thread.rb (TestThread#test_recursive): remove
- implementation dependent test.
-
-Wed Sep 16 17:42:52 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.status): install-capi needs docdir. And,
- mandir, infodir and ridir are also depend on datadir like docdir.
-
-Wed Sep 16 17:20:49 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb (Matrix#/): Fix obvious bug
-
-Wed Sep 16 16:59:34 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (DOCTARGETS): rdoc is default.
-
-Wed Sep 16 16:27:40 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub: typo.
-
-Wed Sep 16 16:20:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (CAPITARGET): enable iff doxygen is available.
-
- * configure.in (INSTALLDOC): enable if rdoc or doxygen are enabled.
-
- * common.mk (docs): target to make documents.
-
- * Makefile.in, win32/Makefile.sub (install-{all,nodoc}): trigger
- by $(INSTALLDOC) from install.
-
-Wed Sep 16 13:39:10 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb (determinant): Bug fix where determinant failed on
- some matrices [ruby-core:23597]
-
-Wed Sep 16 13:30:20 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: trivial optimizations
-
-Wed Sep 16 13:15:17 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * template/Doxyfile.tmpl: RbConfig::CONFIG['DOT'] is sometimes nil.
-
-Wed Sep 16 10:14:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * README.EXT, README.EXT.ja (rb_protect, rb_jump_tag): added.
-
-Wed Sep 16 10:12:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (main): makes also encs.
-
-Wed Sep 16 06:30:07 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * thread.c (rb_exec_recursive_outer, rb_exec_recursive): Added method
- to short-circuit to the outermost level in case of recursion
-
- * test/ruby/test_thread.rb (test_recursive_outer): Test for above
-
- * hash.c (rb_hash_hash): Return a sensible hash for in case of
- recursion [ruby-core:24648]
-
- * range.c (rb_range_hash): ditto
-
- * struct.c (rb_struct_hash): ditto
-
- * array.c (rb_array_hash): ditto
-
- * test/ruby/test_array.rb (test_hash2): test for above
-
-Wed Sep 16 06:17:33 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * vm_eval.c (rb_catch_obj, rb_catch, rb_f_catch): No longer use the
- obsolete function rb_iterate.
-
-Tue Sep 15 21:48:12 2009 Tanaka Akira <akr@fsij.org>
-
- * configure.in (--enable-frame-address): removed.
-
-Tue Sep 15 15:21:01 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/{configure.bat,Makefile.sub} (RDOCTARGET): the meaning of this
- macro was changed at r24923.
-
-Tue Sep 15 15:16:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (install-rdoc), configure.in (RDOCTARGET): removed
- circular dependency. [ruby-dev:39339]
-
-Tue Sep 15 15:09:13 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/configure.bat: need a space before a tab to output the tab by
- echo.
-
-Tue Sep 15 14:24:52 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_split_m): use rb_isspace when the
- string may be ASCII-incompatible.
-
- * string.c (rb_str_lstrip_bang): ditto.
-
- * string.c (rb_str_rstrip_bang): ditto.
-
-Tue Sep 15 12:12:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_USE_BUILTIN_FRAME_ADDRESS): check after real
- target CPU is set.
-
- * configure.in (RUBY_UNIVERSAL_ARCH): check real target CPU after
- AC_PROG_CC.
-
-Tue Sep 15 06:42:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (install-all): target to install all.
-
- * tool/rbinstall.rb (parse_args): accept all install targets.
-
- * tool/rbinstall.rb (parse_args): show help message and exit if
- rbconfig could not load.
-
-Tue Sep 15 04:25:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RDOCTARGET): use install-all. [ruby-dev:39334]
-
-Tue Sep 15 03:00:35 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_lstrip_bang): use ascii_isspace(). [ruby-dev:39322]
-
- * string.c (rb_str_rstrip_bang): ditto.
-
- * string.c (rb_str_split_m): ditto.
-
-Mon Sep 14 16:39:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * debug.c, parse.y: fixed types.
-
- * node.h (nd_line): limit to int.
-
-Mon Sep 14 11:23:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, common.mk, */configure.bat (rdoc): make before
- install if rdoc is enabled. [ruby-dev:39325]
-
-Mon Sep 14 10:56:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (check-ruby): run all test of ruby itself.
-
-Mon Sep 14 10:44:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (RB_TYPE_P): should not use BUILTIN_TYPE for
- special constants.
-
-Mon Sep 14 10:08:19 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_inspect): use rb_enc_mbc_to_codepoint
- because we already knew char is found and got length.
-
-Mon Sep 14 09:59:03 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/ruby.h (NUM2INT, NUM2LL, INT2NUM, UINT2NUM),
- (LONG2NUM, ULONG2NUM, NUM2CHR): get rid of backward references of
- macros. the code couldn't compile by VC.
-
-Mon Sep 14 08:33:11 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/net/http.rb (each_*): return enumerator if no block present.
- Patch by Arthur Schreiber [ruby-core:18310]
-
-Mon Sep 14 06:42:21 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/cgi/cookie.rb (value): Keep CGI::Cookie#value in sync with the
- cookie itself. Based on a patch by Arthur Schreiber [ruby-core:17634]
-
-Mon Sep 14 05:21:12 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/net/http.rb (fetch): Handle properly default values; a patch by
- Arthur Schreiber [ruby-core:18308]
-
-Mon Sep 14 04:07:09 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/set.rb (==): Optimization; patch by Arthur Schreiber [ruby-core:17203]
-
-Mon Sep 14 03:30:23 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/pre-build: added rule to generate id.h for Symbian build.
-
- * symbian/configure.bat: fixed harmless error message.
-
-Sun Sep 13 22:18:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_mod_remove_const): do not change VM state when an
- exception will occur.
-
-Sun Sep 13 21:25:01 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (oletypelib_get_libattr): some refactoring
- by adding oletypelib_get_libattr.
-
-Sun Sep 13 20:55:19 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (oletypelib_get_typelib): some refactoring
- by adding oletypelib_get_typelib.
-
-Sun Sep 13 20:18:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_sflag, proc_options, load_file_internal): fixed
- types.
-
-Sun Sep 13 19:39:59 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: some refactoring.
-
-Sun Sep 13 19:38:34 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (load_file_internal): no need to define DATA when error.
-
-Sun Sep 13 18:48:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (XLDFLAGS): link startup code with ObjC support.
-
-Sun Sep 13 13:38:00 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * thread.c (recursive_*): refactored the access to the inspect
- table used by rb_exec_recursive_*. The functions recursive_push,
- pop and check now assume a valid hash table as their first
- argument. Added documentation.
-
-Sun Sep 13 12:07:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (SYM2ID): needs parens.
-
- * include/ruby/ruby.h (NUM2INT, NUM2LL, INT2NUM, UINT2NUM),
- (LONG2NUM, ULONG2NUM, NUM2CHR, rb_type_p, rb_special_const_p):
- GCC specific optimization.
-
-Sun Sep 13 11:06:12 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb (OpenURI::Meta#content_type_parse): strip quotes.
-
-Sun Sep 13 09:38:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/prime.rb (EratosthenesGenerator#initialize): call super.
- (TrialDivisionGenerator, Generator23): ditto. [ruby-core:25539]
-
-Sun Sep 13 09:34:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_method.c (rb_add_method_def): no warning for inherited
- method.
-
-Sun Sep 13 08:30:30 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: fix WIN32OLE_TYPELIB.new when the 1st
- argument is the non-registered file.
-
-Sun Sep 13 02:08:43 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm_core.h: change members of iseq_inline_cache_entry.
- make cache value members to one union member "ic_value".
-
- * insns.def: ditto.
-
- * vm_insnhelper.c: ditto.
-
-Sun Sep 13 01:15:49 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb (URI::FTP#buffer_open): fix the %2F handling.
-
-Sun Sep 13 00:46:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_method.c (CALL_METHOD_HOOK): refined with macro.
-
- * vm_method.c (rb_remove_method_id): no definition body is
- undefined.
-
- * vm_method.c (rb_add_method, rb_add_method_me): call method added
- hook after definition. [ruby-core:25536]
-
- * vm_method.c (rb_alias): hooks are called from rb_add_method_def.
-
-Sat Sep 12 22:47:24 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb (URI::FTP#buffer_open): use the port specified in
- the URI.
-
-Sat Sep 12 17:31:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (GCC): subst for GCC depending extension libraries.
-
-Sat Sep 12 07:52:59 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (EVENTSINK_Invoke): initialize result
- variant value.
-
-Fri Sep 11 21:52:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * NEWS: update for 1.9.2. based on a patch from Run Paint Run Run
- in [ruby-core:25534].
-
-Fri Sep 11 21:38:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check for real target cpu on darwin 10.
-
-Fri Sep 11 18:51:57 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/fileutils: use require_relative to require fileasserts.
-
-Fri Sep 11 14:22:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (debugflags): use gdb by default on linux and
- darwin.
-
- * configure.in (XLDFLAGS): keep ARCHFILE macro on AIX.
-
- * configure.in (RUBY_REPLACE_TYPE): define typename to default
- type if the latter is found.
-
-Fri Sep 11 13:57:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/win32.h (fstat): override if large file support is
- enabled.
-
-Fri Sep 11 11:33:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/config.{guess,sub}: updated to automake-1.11.
-
-Fri Sep 11 10:38:33 2009 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTPHeader::encode_kvpair): also call to_s
- to k. A patch from swdyh <youhei@gmail.com>
- http://github.com/swdyh/ruby/tree/c847f43c2ccb679b9ff728f8b1b16c6ceeb57f39
-
-Fri Sep 11 09:45:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (aix_loaderror): get rid of using uninitialized value in the
- case loadquery fails. fixed wrong index variable usage. see
- [ruby-core:25479].
-
-Fri Sep 11 07:52:43 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * unicode.c (onigenc_unicode_property_name_to_ctype):
- ignore case of properties.
-
- * tool/enc-unicode.rb: downcase properties list.
-
- * enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
- enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
- follow above.
-
-Fri Sep 11 05:00:19 2009 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/ruby.h (rb_data_type_t): Add comments.
- And add a member variable "data", a multi-purpose storage
- area for rb_data_type.
-
-Fri Sep 11 02:14:21 2009 Tanaka Akira <akr@fsij.org>
-
- * test/dl: use require_relative to require test_base.rb.
-
-Fri Sep 11 02:06:44 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * parse.y (rb_char_to_option_kcode): ASCII-8BIT should
- also delay.
-
- * re.c (parser_regx_options): return rb_ascii8bit_encindex on
- ASCII-8BIT. [ruby-dev:39300]
-
-Fri Sep 11 01:14:00 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/net/http.rb (fetch): rdoc fix, patch by Arthur Schreiber.
- [ruby-core:18309].
-
-Thu Sep 10 23:00:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): fix for parallel execution.
- [ruby-core:25509]
-
-Thu Sep 10 21:22:01 2009 Tanaka Akira <akr@fsij.org>
-
- * test/dl/test_cptr.rb (test_free=): test SEGV at first.
- [ruby-dev:39269]
-
-Thu Sep 10 21:20:59 2009 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/envutil.rb (assert_normal_exit): Don't use
- AssertionMessage.
-
-Thu Sep 10 15:59:05 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regparse.c (UNKNOWN_ESC_WARN): added.
-
- * regparse.c (conv_backslash_value): Warn unknown
- escaped chars in regexp. [ruby-dev:39104]
-
-Wed Sep 9 22:02:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/fileutils.rb (FileUtils::Entry_#copy_file): open the source
- file first to ensure it can be copied. [ruby-core:25498]
-
-Wed Sep 9 21:20:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_data_type): typed.
-
- * ext/dl/cfunc.c (dlcfunc_data_type): typed.
-
- * ext/dl/cptr.c (dlptr_data_type): ditto.
-
- * ext/dl/handle.c (dlhandle_data_type): ditto.
-
-Wed Sep 9 17:17:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (parser_regx_options): only one kcode should effect
- options [ruby-core:25411]
-
-Wed Sep 9 15:46:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (rb_feature_provided): fixed for autoloading extension
- library without suffix.
-
-Wed Sep 9 15:24:32 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * include/ruby/st.h : revert previous commit.
-
- * ext/objspace/objspace.c : remove st_memsize declare.
-
-Wed Sep 9 14:07:19 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * include/ruby/st.h : fix duplicate st_memsize declare.
-
-Wed Sep 9 13:33:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_autoload): initialize typed data.
-
-Wed Sep 9 13:10:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * st.c (st_free_table): constified.
-
-Wed Sep 9 13:09:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (dir_data_type): typed.
-
- * enumerator.c (enumerator_data_type): typed.
- (yielder_data_type, generator_data_type): ditto.
-
- * error.c (name_err_mesg_data_type): typed.
-
- * file.c (stat_data_type): typed.
-
- * thread.c (thgroup_data_type, mutex_data_type, barrier_data_type):
- typed.
-
- * time.c (time_data_type): typed.
-
- * transcode.c (econv_data_type): typed.
-
- * variable.c (autoload_data_type): typed.
-
-Wed Sep 9 11:11:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (rb_data_type_struct): constified dsize.
-
-Wed Sep 9 11:07:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (cont_memsize): fixed wrong expression on IA64.
-
-Wed Sep 9 10:51:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (cont_restore_1, rb_cont_call): should be Fiber.
-
-Wed Sep 9 00:27:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (cont_data_type, fiber_data_type): typed.
-
-Tue Sep 8 22:37:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tempfile.rb, lib/tmpdir.rb (Tmpname): extracted new module.
- [ruby-dev:39197]
-
-Tue Sep 8 22:18:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * st.c (st_init_*table_with_size): use st_index_t.
-
- * include/ruby/st.h (st_hash_func): use st_index_t.
-
-Tue Sep 8 21:48:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (rb_thread_mark): mark callers iseqs. [ruby-core:25474]
- [Bug #2062]
-
-Tue Sep 8 11:53:58 2009 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (iseq_mark): no need to mark inline cache entries.
-
- * insns.def (onceinlinecache, setinlinecache): save a value
- to mark cached value.
-
-Tue Sep 8 08:32:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/dl/test_{cfunc,ptr}.rb: added tests from Aaron Patterson.
- see [ruby-dev:39249].
-
-Mon Sep 7 17:22:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_tell): adjustment for ungotten data.
-
-Mon Sep 7 17:13:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_encname_bom_p): removed magic number.
-
-Mon Sep 7 12:26:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/inspector.rb (IRB::INSPECTORS.def_inspector): support
- object without #inspect defined. a patch from Daniel
- Bovensiepen. [ruby-core:25200]
-
-Mon Sep 7 05:38:34 2009 Koichi Sasada <ko1@atdot.net>
-
- * insns.def (opt_*): add IC operands.
-
- * vm_insnhelper.h (CALL_SIMPLE_METHOD): add a version which
- use an inline cache. USE_IC_FOR_SPECIALIZED_METHOD macro
- switches the behaviour. This change also removes
- CALL_SIMPLE_METHOD_IC() macro.
-
- * tool/instruction.rb: fix elimination process to ignore
- variable "ic".
-
-Mon Sep 7 05:21:09 2009 Koichi Sasada <ko1@atdot.net>
-
- * Makefile.in, common.mk: move a id.h generation rule.
-
-Mon Sep 7 05:07:59 2009 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/driver.rb: remove RUBY_VERSION output.
-
-Mon Sep 7 05:06:16 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c: rename macro name ENABLE_IC_FOR_IVAR
- to USE_IC_FOR_IVAR.
-
-Mon Sep 7 03:21:40 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/common.rb (URI.escape): obsoleted.
-
- * lib/uri/common.rb (URI.unescape): ditto.
-
-Sun Sep 6 18:13:54 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.h (CALL_SIMPLE_METHOD_IC): make a macro
- invoke simple method with inline cache entry.
-
- * insns.def (opt_length, opt_size): fix to use inline method cache.
-
-Sun Sep 6 17:47:21 2009 Koichi Sasada <ko1@atdot.net>
-
- * template/id.h.tmpl: fix this.
-
- * id.h: removed. Because this file is generated automatically.
-
-Sun Sep 6 17:31:28 2009 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_specialized_instruction), insns.def (opt_size):
- optimize #size methods (by specialized instruction).
-
- * id.c, id.h, vm.c, vm_insnhelper.h: ditto.
-
-Sun Sep 6 16:13:06 2009 Koichi Sasada <ko1@atdot.net>
-
- * insns.def (setinstancevariable), vm_insnhelper.c (vm_setivar):
- fix to use inline cache (trivial optimization).
-
-Sun Sep 6 10:34:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c: fixed rdoc, a patch from Nobuhiro IMAI at [ruby-core:25433].
-
-Sun Sep 6 05:19:09 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c: Add rdoc for ARGF.
- contributed by Run Paint Run Run. [ruby-core:23854]
-
-Sat Sep 5 15:21:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_compile_each): op_asgn to aref should return rhs.
- [ruby-core:25387]
-
-Sat Sep 5 10:38:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_compile_each): &&= and ||= should return rhs.
- [ruby-dev:39163] (#1996), [ruby-core:25143]
-
-Sat Sep 5 08:51:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (update_char_offset): position should be long.
-
- * re.c (match_hash, match_equal): new methods. [ruby-core:24748]
-
- * re.c (reg_match_pos, rb_reg_eqq, rb_reg_s_quote): get rid of use
- VALUE as int.
-
-Fri Sep 4 20:40:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (round): added declaration. [ruby-dev:39222]
-
-Fri Sep 4 06:15:39 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (Init_Dir): alias Dir#path to Dir#to_path. [ruby-core:25326]
-
-Fri Sep 4 04:49:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (random_rand): fixed rdoc. [ruby-core:25332]
-
-Fri Sep 4 04:46:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/webrick/httpservlet/abstract.rb (do_OPTIONS): method names
- are symbols now. [ruby-core:24580]
-
-Thu Sep 3 17:56:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (literal_concat_gen): concat body from dstr instead of
- nd_next. [ruby-core:25284]
-
-Wed Sep 2 16:49:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * math.c (math_gamma): get rid of direct comparison between too
- big double and integer, with gcc on x86_64. [ruby-core:25257]
-
-Wed Sep 2 13:47:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * math.c (domain_check): simplified.
-
-Wed Sep 2 11:32:24 2009 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (obj_free): fix to free method table (fix memory leak).
-
-Wed Sep 2 07:42:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/instruction.rb (RubyVM::InstructionsLoader#make_stackcaching_insns):
- simplified.
-
-Wed Sep 2 02:32:46 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/lib/json/common.rb (NaN): Change definition
- of NaN to 0.0/0 for 1.8/1.9 compatibility.
-
-Wed Sep 2 01:16:32 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json: Update to JSON 1.1.9.
-
-Tue Sep 1 19:56:28 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm_eval.c (eval_string_with_cref): fix to check local_table_size.
- [ruby-dev:39205] [Bug #2024]
-
-Mon Aug 31 16:20:41 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * class.c (make_singleton_class): variable name changed.
- removed an unnecessary conditional.
-
-Mon Aug 31 14:17:09 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * class.c: refactored singleton class related matters.
- Handles eigenclasses and plain classes transparently.
-
- (make_metaclass): renamed from make_metametaclass.
- (METACLASS_OF): new utility macro
- (META_CLASS_OF_CLASS_CLASS): ditto.
- (ENSURE_EIGENCLASS): ditto.
- (make_singleton_class): extracted from rb_singleton_class.
- (boot_defclass): moved from object.c
- (Init_class_hierarchy): extracted from Init_Object.
- (rb_make_metaclass): refactored.
- (singleton_class_of): extracted from rb_singleton_class.
- (rb_singleton_class): refactored.
- (rb_define_singleton_method): it needs a metaclass only
- but not its metametaclass.
-
- * object.c: booting class hierarchy was moved to class.c
- for keeping dependency between compilation units least.
- (Init_Object): extracting the booting into
- Init_class_hierarchy.
- (boot_defclass): moved to class.c.
-
-Sun Aug 30 23:44:09 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (find_time_t): use mktime for the first guess.
-
-Sun Aug 30 16:38:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_enc_symname2_p): not depend on nul terminator.
-
-Sun Aug 30 14:11:45 2009 Tanaka Akira <akr@fsij.org>
-
- * common.mk: dependencies updated.
-
-Sun Aug 30 13:00:11 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (add): shortcut implemented for fixnums.
- (sub): ditto.
- (mul): ditto.
-
-Sun Aug 30 10:24:43 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (eq): apply RTEST.
- (ne): ditto.
- (add): avoid method dispatch for bignums.
- (sub): ditto.
- (mul): ditto.
- (mod): ditto.
-
-Sun Aug 30 09:45:11 2009 Tanaka Akira <akr@fsij.org>
-
- * bignum.c (bigmul1_single): new function specialized respect to
- multiply two single digit bignums.
- (bigmul0): use bigmul1_single.
-
-Sun Aug 30 03:59:43 2009 Tanaka Akira <akr@fsij.org>
-
- * timev.h (TIME_SCALE): defined as 1000000000.
- (struct vtm): subsec is replaced by subsecx.
- subsec * TIME_SCALE == subsecx.
-
- * time.c: avoid rational in most cases.
- (struct time_object): timev is replaced by timexv.
- timev * TIME_SCALE == timexv.
-
-Sun Aug 30 03:17:25 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (init_leap_second_info): use TIMET_MAX.
-
-Sun Aug 30 01:15:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/zlib/zlib.c (gzfile_read_all): use gzfile_newstr;
- set and convert its encoding. [ruby-dev:38304]
-
-Sat Aug 29 20:40:02 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * vm_eval.c (rb_call0): gets rid of checking method cache twice.
-
- * method.h (rb_get_method_entry): added a prototype of the function.
- (rb_method_entry_without_cache): more friendly name.
-
-Sat Aug 29 12:16:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tmpdir.rb (Dir.mktmpdir): rolled back r24699. [ruby-dev:39193]
-
-Sat Aug 29 03:27:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile#make_tmpname): removed thread race
- condition.
-
- * lib/tmpdir.rb (Dir.mktmpdir): ditto.
-
-Fri Aug 28 20:29:34 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/tempfile.rb (Tempfile#callback): Debug information should be
- output to stderr, not stdout; pointed out by akira yamada.
- cf. [ruby-dev:39072]
-
-Fri Aug 28 20:34:24 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: use SafeStringValue instead of
- Check_SafeStr.
-
-Fri Aug 28 13:30:43 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread.c (do_select): rollback r24680. void struct initializer is
- invalid.
-
-Fri Aug 28 11:45:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * method.h (rb_method_definition_t): split from rb_method_entry_
- to deal aliases. [ruby-dev:39165]
-
- * proc.c (struct METHOD): contains rb_method_entry_t copy.
-
-Fri Aug 28 10:21:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (iseq_mark): skip outdated cache entries.
-
- * vm_core.h ({GET,INC}_VM_STATE_VERSION): moved from
- vm_insnhelper.h.
-
-Fri Aug 28 07:25:25 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c (next_i): typo fixed (reached at end -> reached an
- end). pointed out by James Edward Gray II at LoneStar RubyConf.
-
-Thu Aug 27 18:31:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_method.c (rb_remove_method_id): exported.
-
- * numeric.c (num_sadded): fix for non-ascii method name.
-
-Thu Aug 27 14:32:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_preprocess_dregexp): set encoding as ASCII-8BIT
- when /n is specified and the embedded string is escaped text.
-
-Thu Aug 27 13:51:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (random_rand): random integer can be a fixnum for
- bignum range. [ruby-dev:39173]
-
-Thu Aug 27 08:16:34 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/strscan/strscan.c (strscan_set_string): set string should not be
- duped or frozen, because freezing it causes #concat method failure,
- and unnecessary to dup without freezing. a patch from Aaron
- Patterson at [ruby-core:25145].
-
-Thu Aug 27 02:06:11 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * Makefile.in (enc/unicode/name2ctype.kwd):
- remove rules to generate name2ctype.kwd from
- UnicodeData.txt and Scripts.txt.
- if you want to generate, use tool/enc-unicode.rb.
-
-Thu Aug 27 02:00:09 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * unicode.c (PROPERTY_NAME_MAX_SIZE): use MAX_WORD_LENGTH.
-
-Wed Aug 26 23:59:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (random_rand): refined error message.
-
- * random.c (random_rand): fixed for edge cases of ranges.
- [ruby-dev:39166]
-
-Wed Aug 26 21:49:23 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/tempfile.rb: add documents from Hongli Lai's fork.
- cf [ruby-core:25131].
-
-Wed Aug 26 19:51:13 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/mkconfig.rb (program_transform_name): fix for multiple trans
- rules for autoconf 2.61 or earlier.
-
- * tool/rbinstall.rb (program_transform_name): ditto.
-
-Wed Aug 26 19:20:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (random_rand): unified random_int and random_float.
- [ruby-dev:39158]. and fixes [ruby-core:24655], [ruby-core:24677],
- [ruby-core:24679].
-
-Wed Aug 26 18:59:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/test_tempfile.rb: merged from Hongli Lai's fork.
- cf [ruby-core:25131].
-
-Wed Aug 26 18:49:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile#close!): should not undefine finalizer
- by just unlink.
-
-Wed Aug 26 17:00:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/mkconfig.rb (program_transform_name): fix for autoconf 2.61
- or earlier.
-
-Wed Aug 26 14:34:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile#close!, Tempfile#path): added side
- notes from Hongli Lai's fork.
-
- * lib/tempfile.rb (Tempfile#unlink, Tempfile.callback): do nothing
- any more once unlinked.
-
-Wed Aug 26 13:48:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile#unlink): reverted r23494, since the
- usage in RubyInline is considered wrong.
-
-Wed Aug 26 12:36:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (collect_local_variables_in_env): skips internal variables.
- [ruby-core:25125]
-
-Tue Aug 25 23:51:07 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/enc-unicode.rb: added for generate name2ctype.kwd.
- contributed by Run Paint Run Run [ruby-core:24775]
-
- * enc/unicode.c (CodeRanges): move definitions to name2ctype.h.
-
- * enc/unicode/name2ctype.h.blt, enc/unicode/name2ctype.kwd,
- enc/unicode/name2ctype.src: updated to v5.1.
-
- * enc/unicode/UnicodeData.txt, enc/unicode/Scripts.txt: added v5.1.
-
- * Makefile.in: add rule to generate name2ctype.kwd from
- UnicodeData.txt and Scripts.txt.
-
-Tue Aug 25 22:31:51 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in (MKDIR_P): Set 'mkdir -p' to MKDIR_P
- when AC_PROG_MKDIR_P doesn't set MKDIR_P.
-
-Tue Aug 25 17:38:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_clone, bigmul1_normal, bigdivrem): trivial
- optimization.
-
- * bignum.c (big2dbl): truncates zero digits to get rid of possible
- underflow.
-
-Tue Aug 25 12:22:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (enc/unicode/name2ctype.h): explicitly ignores the
- result of diff and turns -e option off, because *BSD make passes
- it by default.
-
-Tue Aug 25 02:16:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (DLDFLAGS): use linker_flag and changed undefined
- and multiply_defined behaviors. cf [ruby-core:25086].
-
-Mon Aug 24 21:31:37 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/base.rb, test/rss/test_maker_2.0.rb: fix a bug
- that RSS Maker doesn't accept 'false' as guid's isPermaLink.
- Reported by Joe Holt. Thanks!!!
-
-Mon Aug 24 18:58:56 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/missing.h (vsnprintf): rollback a part of r24179, because
- it's meaningless.
-
-Mon Aug 24 16:35:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * st.c (st_delete_safe): deals with packed entries.
- [ruby-core:25080]
-
- * st.c (st_cleanup_safe): ditto. [ruby-core:25081]
-
-Mon Aug 24 13:24:07 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (MAKEDIRS): define.
-
- * common.mk (capi): using $(MAKEDIRS), so depends on $(PREP).
-
-Mon Aug 24 13:14:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_CHECK_SIZEOF): set cross_compiling only when
- universal binary.
-
-Mon Aug 24 12:55:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (enc/unicode/name2ctype.h): use md instead of
- $(MAKEDIRS).
-
-Sun Aug 23 15:22:45 2009 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (main): "usage" description updated.
-
-Sun Aug 23 15:12:22 2009 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (Dir.mktmpdir): updated to latest.
- (in_temporary_working_directory): temporary directory name changed.
-
-Sun Aug 23 00:56:13 2009 Tanaka Akira <akr@fsij.org>
-
- * thread.c (rb_thread_schedule): don't recur infinitely.
- (rb_threadptr_execute_interrupts): ditto.
- [ruby-dev:38060]
-
-Sat Aug 22 15:07:23 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/syck/rubyext.c (id_hash_new): new function to create a hash
- which key is compared by object id.
- (syck_emitter_reset): use id_hash_new for bonus->data.
-
- * lib/yaml.rb (YAML.quick_emit): give the object itself to emitter.
- don't use object_id and hash.
-
-Sat Aug 22 13:05:22 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * Makefile.in: use CP and MV macros.
-
-Sat Aug 22 01:29:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (rm_f, rm_rf): pass the last hash through if exists.
- [ruby-dev:39153]
-
-Sat Aug 22 00:48:08 2009 Tanaka Akira <akr@fsij.org>
-
- * enumerator.c (ary2sv): add dup argument.
- (enumerator_next): call ary2sv with dup=0.
- (enumerator_peek): call ary2sv with dup=1 to return duplicated array.
- (enumerator_peek_values_m): new function to return duplicated array.
- (Init_Enumerator): use enumerator_peek_values_m as
- Enumerator#peek_value.
-
-Sat Aug 22 00:03:19 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (rb_check_deadlock): decrease number of sleepers before
- deadlock detection because the deadlock exception makes main thread
- run. [ruby-dev:39142]
-
-Fri Aug 21 22:34:58 2009 Tanaka Akira <akr@fsij.org>
-
- * enumerator.c (get_next_values): extracted from
- enumerator_next_values.
- (enumerator_next_values): use get_next_values.
- (enumerator_peek_values): ditto.
-
-Fri Aug 21 17:01:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/unicode/name2ctype.h: split from enc/unicode.c and made a
- perfect hash.
-
-Fri Aug 21 15:13:08 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/io.h, io.c (FMODE_SETENC_BY_BOM):
- renamed from FMODE_STRIP_BOM.
-
-Thu Aug 20 01:24:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_io_fmode_modestr): change modestr syntax for BOM
- to "BOM|UTF-*". [ruby-dev:39106]
-
- * io.c (parse_mode_enc): ditto.
-
-Fri Aug 21 15:01:35 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/readline/readline.c (readline_readline): use rb_prep_terminal
- only on Windows.
-
-Fri Aug 21 07:25:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/ri/gemdirs.rb: split from lib/rdoc/ri/paths.rb to ge
- rid of loading rubygems and searching all gems always.
-
-Fri Aug 21 07:14:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_PROGRAM_VERSION, RUBY_RELEASE_DATE): extracts
- from version.h for cross-compiling.
-
- * template/fake.rb.in (RUBY_VERSION, RUBY_DESCRIPTION): use above.
-
-Fri Aug 21 00:08:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/ri/paths.rb (RDoc::RI::Paths): Gem::Enable has been obsolete.
-
-Thu Aug 20 23:56:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_sysopen): moved sysopen_struct from rb_sysopen_internal.
-
-Thu Aug 20 23:39:51 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y (reduce_nodes_gen): preserve NODE_FL_NEWLINE flag during
- node reducing. [ruby-core:24463]
-
-Thu Aug 20 14:39:47 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/readline/readline.c (readline_get): add rl_prep_terminal(1).
- incited by jitte [ruby-list:43546]
-
-Thu Aug 20 12:09:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (ivar2_hash_type): disabled for now.
-
-Thu Aug 20 08:39:50 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (rb_thread_terminate_all): do not ignore interrupt when
- reaping threads on termination. [ruby-dev:39107]
-
-Thu Aug 20 02:32:08 2009 Tanaka Akira <akr@fsij.org>
-
- * enumerator.c (next_init): don't clear feedvalue.
-
-Thu Aug 20 01:28:42 2009 Tanaka Akira <akr@fsij.org>
-
- * enumerator.c: implement Enumerator#{next_values,peek_values,feed}
- and StopIteration#result. [ruby-dev:39109]
- (struct enumerator): replace no_next by stop_exc.
- new field feedvalue.
- (enumerator_mark): mark feedvalue and stop_exc.
- (enumerator_init): initialize feedvalue and stop_exc.
- (enumerator_init_copy): initialize feedvalue.
- (next_ii): send yield arguments as an array. return feedvalue.
- (next_i): generate StopIteration exception here. set result.
- (next_init): initialize feedvalue.
- (enumerator_next_values): new method Enumerator#next_values.
- (ary2sv): new function.
- (enumerator_peek_values): new method Enumerator#peek_values.
- (enumerator_feed): new method Enumerator#feed.
- (yielder_yield): return the yield value.
- (generator_each): return the iterator value.
- (stop_result): new method StopIteration#result.
-
-Thu Aug 20 01:06:48 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (DEFINE_STRUCT_DIRENT): use union to allocate sufficient
- memory space for Solaris. a patch from Naohisa GOTO
- <ngoto at gen-info.osaka-u.ac.jp> in [ruby-dev:39132].
- [ruby-dev:39062]
-
- * configure.in (SIZEOF_STRUCT_DIRENT_TOO_SMALL): Solaris dirent
- check.
-
-Wed Aug 19 11:32:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/unicode.c (CodeRanges): initialized statically.
-
-Wed Aug 19 02:54:01 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_settracefunc.rb (test_return, test_return2): add two
- tests for [ruby-dev:38701] and [ruby-core:24463].
-
-Wed Aug 19 01:08:34 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (NODE_RETURN): fire return event at explicit return.
- [ruby-dev:38701]
-
-Tue Aug 18 21:00:26 2009 Tanaka Akira <akr@fsij.org>
-
- * enumerator.c (enumerator_peek): new method Enumerator#peek.
- (enumerator_next): don't rewind at end.
- [ruby-dev:38932]
-
-Tue Aug 18 13:46:14 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * touch test/rdoc/empty.dat to run test_rdoc_parser.rb
-
-Tue Aug 18 11:37:24 2009 wanabe <s.wanabe@gmail.com>
-
- * vm_insnhelper.c (vm_call_cfunc): ensure hook c-return.
- [Bug #1588]
-
- * test/ruby/test_settracefunc.rb (TestSetTraceFunc#test_raise):
- follow above.
-
-Tue Aug 18 01:57:00 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_step): treat symbols specially so that iterating
- over symbols should work like strings. [ruby-core:24780]
-
- * range.c (range_each): ditto.
-
-Tue Aug 18 01:21:31 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_each): should honor to_str conversion.
-
-Mon Aug 17 23:45:40 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/delta.rb: removed require 'date'. added to_c.
-
-Mon Aug 17 14:35:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (lex_get_str, lex_io_gets, rb_parser_compile_string):
- must be ascii compatible.
-
-Mon Aug 17 10:37:41 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regparse.c (add_code_range_to_buf0): added with checkdup argument.
-
- * regparse.c (add_code_range_to_buf): use above.
-
- * regparse.c (add_code_range0): added with checkdup argument.
-
- * regparse.c (add_code_range): use above.
-
- * regparse.c (i_apply_case_fold): don't warn if the duplicate is
- caused by case folding.
-
-Mon Aug 17 08:31:56 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/delta.rb: merged from date4. [experimental]
-
- * lib/date/delta/parser.*: ditto.
-
- * lib/date.rb: followed the above changes.
-
-Mon Aug 17 08:19:03 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (strptime): removed \v; since \s includes \v.
-
-Mon Aug 17 08:14:26 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_rationalize) added. [experimental]
-
- * rational.c ({nurat,nilclass,integer,float}_rationalize) ditto.
-
-Mon Aug 17 08:11:53 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/cmath.rb: use num#i.
-
-Mon Aug 17 07:59:00 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * numeric.c (flo_pow,fix_pow): may return complex number.
-
- * bignum.c (rb_big_pow): ditto.
-
-Mon Aug 17 07:16:10 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_imaginary): num#i to return imaginary counterpart
- of the given numeric.
-
- * complex.c (Init_Complex): undef #i for complex numbers.
-
-Mon Aug 17 00:17:33 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/complex.rb, lib/rational.rb: added warning messages.
-
-Sun Aug 16 23:58:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (yylex): should dispatch scan-event even when follows
- just after delayed-token. [ruby-dev:37855] [Bug #1071]
-
-Sun Aug 16 22:20:16 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb: reverted.
-
-Sun Aug 16 21:31:21 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/date/format.rb: suppressed a warning.
-
- * lib/irb/ruby-lex.rb: ditto.
-
-Sun Aug 16 15:25:26 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/csv.rb: Change magic comment to US-ASCII in order to
- make literals as US-ASCII.
-
-Sun Aug 16 10:45:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * regparse.c (parse_char_class, parse_exp, parse_branch),
- (parse_subexp): fixed memory leak. a patch from Ralf Junker
- <ralfjunker AT gmx.de> at [ruby-core:24921].
-
-Sun Aug 16 10:38:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_backtrace_each, vm_backtrace_push),
- vm_eval.c (print_backtrace), vm_dump.c (bugreport_backtrace):
- rb_backtrace_iter_func now takes VALUE as file and method names.
-
-Sun Aug 16 03:06:59 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (opt_eq_func): fix optimization bug. This issue
- was found out and debugged with Takuto Hayashi at Security and
- Programming camp 2009.
-
-Sun Aug 16 01:10:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regparse.c (add_ctype_to_cc_by_range): fix the first
- character bigger than sb_out was dropped.
-
- * test/ruby/test_regexp.rb (TestRegexp#test_posix_bracket):
- add tests for above.
-
-Sun Aug 16 00:30:33 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/oniguruma.h
- (ONIGENC_CTYPE_SPECIAL_MASK): added.
- (ONIGENC_CTYPE_D): ditto.
- (ONIGENC_CTYPE_S): ditto.
- (ONIGENC_CTYPE_W): ditto.
-
- * regparse.c: \d, \s and \w are now non Unicode class.
- [ruby-dev:39026]
- (fetch_token_in_cc): use ONIGENC_CTYPE_[DSW] for \d/\s/\w.
- (fetch_token): ditto.
- (add_ctype_to_cc): add routines for ONIGENC_CTYPE_[DSW].
- (parse_exp): ditto.
-
- * test/ruby/test_regexp.rb (TestRegexp#test_char_class):
- add tests for above.
-
-Sat Aug 15 10:39:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (fname, string_dvar, sym, dsym, f_arglist): removed
- duplications.
-
-Fri Aug 14 20:03:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (rb_check_safe_str): deprecated.
-
- * ext/openssl/ossl_x509store.c (ossl_x509store_add_{file,path}):
- replaced deprecated function.
-
-Fri Aug 14 17:59:12 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_preprocess_dregexp): change Exception class to
- RegexpError.
-
- * test/ruby/test_m17n.rb (test_regexp_usascii): follow above.
-
- * test/ruby/test_m17n.rb (test_regexp_embed): ditto.
-
-Fri Aug 14 17:17:42 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/Makefile.in (MKDIRS): revert r24525.
-
-Fri Aug 14 16:28:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/digest/lib/digest/hmac.rb (Digest::HMAC#initialize): faster
- code.
-
-Fri Aug 14 14:31:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rubyhdrdir): fixed typo. [ruby-dev:39079]
-
-Fri Aug 14 00:29:22 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * doc/ChangeLog-1.8.0: add forgotten entry contributed by
- TAKAHASHI Kaoru. [ruby-dev:39065]
-
-Fri Aug 14 00:19:49 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator#method_missing): __FILE__ may contain
- multi-byte characters. a patch from Kenta Murata in [ruby-dev:39066].
-
-Thu Aug 13 21:01:03 2009 wanabe <s.wanabe@gmail.com>
-
- * vm.c (vm_exec): returning from lambda runs ensure section.
- [Bug #1729]
-
-Thu Aug 13 18:40:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_CHECK_SIZEOF): set cross_compiling to yes
- only when AC_COMPUTE_INT, and inverted the arguments.
-
-Thu Aug 13 18:22:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_CHECK_SIZEOF): use AC_COMPUTE_INT instead of
- _AC_COMPUTE_INT_COMPILE with cross compiling, since its arguments
- have been changed at autoconf 2.64.
-
-Thu Aug 13 16:31:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def (opt_case_dispatch): suppressed a warning.
-
- * vm_insnhelper.c (opt_case_dispatch_i): ditto.
-
-Thu Aug 13 16:20:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, Makefile.in (MAKEDIRS): used MKDIR_P instead of
- as_mkdir_p. [ruby-dev:39063]
-
-Thu Aug 13 15:37:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * regenc.c (onigenc_strlen_null, onigenc_str_bytelen_null): fixed
- infinite loop for wide encodings. reported by Ralf Junker a
- [ruby-core:24892]. [ruby-core:24904]
-
-Wed Aug 12 21:07:46 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/extconf.rb: if ipv6 is enabled, the version of Windows
- must be XP or later.
- [ruby-core:24601]
-
-Wed Aug 12 15:59:29 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (yes-test-knownbug): use RUNRUBY instead of MINIRUBY.
-
-Wed Aug 12 15:52:04 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * class.c (rb_define_module_id_under): fix the name.
-
- * class.c (rb_define_module_under): fix for previous changes.
-
-Wed Aug 12 15:32:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * class.c (rb_define_class_id_under, rb_define_module_id_under):
- new functions to define a nested class/module with non-ascii
- name.
-
- * struct.c (make_struct): use name with encoding.
-
- * struct.c (inspect_struct): ditto. [ruby-core:24849]
-
-Wed Aug 12 Wed Aug 12 14:54:34 2009 Koichi Sasada <ko1@atdot.net>
-
- * insns.def, vm.c, vm_insnhelper.c, vm_insnhelper.h: check
- definition of (classes)#=== for case/when optimization.
- Fix Bug #1376 [ruby-core:23190].
-
- * string.c (Init_String), bignum.c (Init_Bignum),
- numeric.c (Init_Numeric): define String#===, Symbol#===,
- Bignum#===, Fixnum#===, Float#=== as same as (classes)#==.
-
-Wed Aug 12 14:14:42 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (readdir_internal): free old temporary filename.
- [ruby-core:24820]
-
-Wed Aug 12 12:59:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_new_frozen): must not change encoding of frozen
- shared string. [ruby-dev:39068]
-
-Wed Aug 12 11:51:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_cv_broken_crypt): needs more checks.
-
-Wed Aug 12 07:41:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_enc_compatible): If a string is empty and
- other's encoding is US-ASCII, returns the empty string's encoding.
- [ruby-list:46274]
-
-Wed Aug 12 07:38:12 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (is_data_encoding): fix condition.
-
- * encoding.c (enc_capable): ditto.
-
-Tue Aug 11 23:12:31 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (complete_frags): Monday must be suitable for %W's
- default day.
-
-Tue Aug 11 21:42:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (num_divmod): fixed rdoc. [ruby-core:24862]
-
-Mon Aug 10 21:45:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_path2class): no deprecation.
-
-Mon Aug 10 10:57:59 2009 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c: reject unused longlife gc. longlife gc target is longlife
- NODE by method table and vm inline cache. but, fixed it at
- r24085, r24128. so I rejected longlife gc.
-
- * debug.c: ditto.
-
- * include/ruby/intern.h: ditto.
-
- * include/ruby/ruby.h: ditto.
-
- * iseq.c: ditto.
-
- * node.h: ditto.
-
- * vm_insnhelper.c: ditto.
-
- * vm_insnhelper.h: ditto.
-
-Mon Aug 10 06:55:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (class2path, w_unique, w_extended, w_class, w_uclass):
- deal with non-ascii class path. [ruby-core:24790]
-
- * marshal.c (r_unique, path2class, path2module, obj_alloc_by_path),
- (r_object0): ditto.
-
- * variable.c (rb_path_to_class): new encoding-aware function to
- get a class from its name.
-
-Sun Aug 9 21:14:03 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb (search_tclConfig): last change isn't enough.
- fixed it.
-
-Sun Aug 9 16:36:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (ruby.imp): excluded prelude.o to get rid of circular
- dependency. [ruby-dev:39052]
-
-Sun Aug 9 14:49:24 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c (rb_big_cmp, bigsub, big_real_len, bigmul1_normal,
- bigmul1_balance, big_split): remove BDIGITS() inside of the loops.
- same as r24444.
-
-Sat Aug 8 17:03:21 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_ascii_compatible_p): added. [ruby-core:24793]
- (Init_Encoding): New API Encoding#ascii_compatible?.
-
-Sun Aug 9 07:25:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/ripper/eventids2.c (token_to_eventid): added
- keyword_do_LAMBDA. [ruby-dev:39049]
-
-Sun Aug 9 02:07:41 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * tool/compile_prelude.rb: fixes a regexp pattern for require.
- It had matched 'require("foo"('.
-
-Sat Aug 8 11:42:44 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigzero_p): removing BDIGITS() inside of the
- loop. inspired by Masahiro Kanai's blog entry
- <http://d.hatena.ne.jp/CanI/20090807/1249657492>.
-
-Sat Aug 8 06:18:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_symbol r_symlink, r_symbol, r_object0): fix for
- non-ascii symbols. loading such symbols can cause segfaults in
- older versions. [ruby-core:24788]
-
-Fri Aug 7 03:25:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_error.c (error_print): removed an extra argument.
-
-Fri Aug 7 03:22:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_exc_raise, rb_exc_fatal): nil is used to reraise.
-
-Fri Aug 7 01:49:41 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/sha2/sha2.c: The ULL suffix is not supported by
- pre-C99 compilers, so resurrect the ULL() macro to regain
- portability. [ruby-dev:39032]
-
-Fri Aug 7 01:35:26 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/*/extconf.rb: inttypes.h and unistd.h need not be
- checked here. [ruby-dev:39032]
-
-Fri Aug 7 01:04:17 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb (search_tclConfig): fix logic bug.
-
-Thu Aug 6 21:18:15 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/digest/sha2/lib/sha2.rb: should require sha2.so.
-
-Thu Aug 6 21:11:40 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/digest/sha2/sha2.c (*_Final): typos.
-
-Thu Aug 6 19:46:56 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/sha2/sha2.h (BYTE_ORDER): Define BYTE_ORDER as
- necessary. [ruby-dev:39029]
-
-Thu Aug 6 16:36:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (valid_encoding_name_p): rejects too long encoding
- names.
-
- * encoding.c (encoding_data_type): typed data.
-
- * encoding.c (enc_capable, rb_enc_get_index): Symbol is encoding
- capable.
-
- * encoding.c (rb_enc_associate_index): cannot set encoding on
- special constants.
-
-Thu Aug 6 15:44:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_method.c (rb_method_entry_eq): deals with optimized method
- properly. [ruby-core:24789]
-
-Thu Aug 6 13:30:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/mkmf/base.rb (TestMkmf): was turned into a class, because
- MiniUnit doesn't complain even if a testcase has no tests.
-
-Thu Aug 6 13:00:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (check_sizeof): added optional compiler option
- argument. [ruby-core:24785]
-
- * lib/mkmf.rb (create_makefile): suppressed shadowing outer local
- variable warnings.
-
-Thu Aug 6 12:05:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/testcase.rb (Test::Unit): removes silly TestCase
- class.
-
-Thu Aug 6 01:37:20 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/sha2/sha2.[ch]: Update to 1.0 RELEASE which fixes an
- off-by-one bug in SHA-256 hashing. Reduce differences from
- the original while at it. [Bug #1799]
-
-Thu Aug 6 00:09:56 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/ipaddr.rb (IPAddr#hash): Take account of netmask; submitted
- by Nobuhiro IMAI in [ruby-dev:39011]
-
-Wed Aug 5 19:19:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (load_file_internal): assumes -x flag if no "ruby" is in
- the shebang line. [ruby-dev:39015]
-
-Wed Aug 5 19:11:01 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ruby.c (rb_stdio_set_default_encoding): declared.
-
-Wed Aug 5 18:46:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * debug.c (ruby_dummy_gdb_enums): made public. [ruby-dev:39001]
-
-Wed Aug 5 13:49:09 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_upto): generate numerical sequence when
- characters in both edges are all digits. [ruby-talk:343186]
-
-Wed Aug 5 12:54:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_exc_raise, rb_exc_fatal): require exception object.
- [ruby-core:24767]
-
-Wed Aug 5 12:39:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_longjmp): reset raised flag before fatal error.
-
-Wed Aug 5 10:20:39 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_preprocess_dregexp): add options to arguments.
-
- * re.c (rb_reg_new_ary): follow above.
-
- * re.c (rb_reg_preprocess_dregexp): change error message when
- /.../n has a non escaped non ASCII character in non ASCII-8BIT
- script. [ruby-dev:38524]
-
-Wed Aug 5 03:28:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit.setup_argv): expands paths before
- requiring. [ruby-dev:39012]
-
-Wed Aug 5 01:38:27 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/pp.rb (guard_inspect_key): untrust internal hash to prevent
- unexpected SecurityError.
-
- * test/ruby/test_object.rb: add a test for [ruby-dev:38982].
-
-Wed Aug 5 00:33:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/parser/c.rb: fixed a small error in the documentation.
- [ruby-core:24744]
-
-Tue Aug 4 22:10:34 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (has_redirection): need to execute shell if commandline
- includes newline. cf. [ruby-core:24560]
-
-Tue Aug 4 15:06:58 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/ipaddr.rb (IPAddr#{eql?,hash}): Add IPAddr#{eql?,hash} so
- that an IPAddr object can be used as a hash key, a set element,
- etc.; suggested by Nick Brown <nick@nick-brown.com>.
-
-Tue Aug 4 13:07:10 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/oniguruma.h (ONIG_SYN_WARN_CC_DUP): defined.
- * regparse.h (ScanEnv): add warnings_flag.
- * regparse.c (CC_DUP_WARN): defined for warn duplicated characters in
- character class of regexp. [ruby-core:24593]
- (add_code_range_to_buf): add CC_DUP_WARN.
- (next_state_val): add CC_DUP_WARN.
- (OnigSyntaxRuby): add ONIG_SYN_WARN_CC_DUP.
- (SET_ALL_MULTI_BYTE_RANGE): add env to arguments.
- (add_code_range): ditto.
- (add_code_range_to_buf): ditto.
- (not_code_range_buf): ditto.
- (or_code_range_buf): ditto.
- (and_code_range1): ditto.
- (and_code_range_buf): ditto.
- (and_cclass): ditto.
- (or_cclass): ditto.
- (add_ctype_to_cc_by_range): ditto.
- (add_ctype_to_cc): ditto.
- (parse_char_class): ditto.
-
-Tue Aug 4 12:40:45 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/encdb.c (ENC_SET_BASE): fix typo.
- patch by ujihisa [ruby-dev:39004]
-
-Tue Aug 4 11:57:39 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_eql, range_eq): fixed equality to work for
- subclasses of Range. a patch from Marc-Andre Lafortune.
- [ruby-core:22190]
-
- * test/ruby/test_range.rb: add assertions for above.
-
-Tue Aug 4 09:41:11 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/big5.c (EncLen_Big5): back to original Big5 table.
- (EncLen_Big5_HKSCS): for Big5-HKSCS.
- (trans): add the lead byte table for Big5-HKSCS.
- (big5_mbc_enc_len): abstract function for Big5 series.
- (big5_mbc_enc_len): for Big5.
- (big5_hkscs_mbc_enc_len): for Big5-HKSCS.
- (BIG5_HKSCS_P): added.
- (BIG5_ISMB_FIRST): add routine for Big5-HKSCS.
- (big5_hkscs): add for Big5-HKSCS.
-
-Tue Aug 4 09:33:54 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_enc_set_base): Add for setting base encoding
- with their names. this is internal function.
-
- * template/encdb.h.tmpl: specify ENC_SET_BASE for second encodings in
- each encoding files.
-
- * enc/encdb.c (rb_enc_set_base): add a declaration.
- (ENC_SET_BASE): ditto.
-
-Tue Aug 4 06:30:01 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_replace): should copy compare_by_identity status as well.
- [ruby-core:24728]
-
-Tue Aug 4 05:43:03 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (recursive_push): need to set UNTRUST. [ruby-dev:38997]
-
-Tue Aug 4 03:56:51 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tcltklib.c: fix trouble on old-style C function
- declarations [ruby-core:22871].
-
- * ext/tk/lib/tcltklib.c: (ruby_1_8) fix warning about RUBY_RELEASE_DATE
-
- * ext/tk/lib/tk/multi-tk.rb: kill zombie threads.
-
- * ext/tk/lib/tk/fontchooser.rb: fix typo and support OptionObj.
-
- * ext/tk/lib/tk/{canvas.rb,virtevent.rb,image.rb,timer.rb}:
- don't create unnecessary array.
-
-Mon Aug 3 22:19:24 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * eval.c (rb_mod_include): fix document. [ruby-core:24675]
-
-Mon Aug 3 18:25:08 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sample/svr.rb: obsolete TCPserver renamed. [ruby-core:24712]
-
- * sample/tsvr.rb: ditto.
-
- * sample/dualstack-httpd.rb: ditto.
-
-Mon Aug 3 18:12:54 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (recursive_push): untrust internal hash to prevent
- unexpected SecurityError. a patch from Kazuhiro NISHIYAMA.
- Fix: #1864 [ruby-dev:38982]
-
-Mon Aug 3 17:06:05 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/README: updated. a patch from Daniel Bovensiepen.
- [ruby-core:24693]
-
-Mon Aug 3 16:28:09 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_connect): return value was broken when some
- error occurred.
- [ruby-core:24234]
-
-Mon Aug 3 15:56:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (permute0): use chars for boolean array.
-
- * array.c (rb_ary_{permutation,combination}): disallow reentrance
- with continuation since work-buffers cannot restore.
-
- * array.c (rb_ary_{permutation,combination,product}): must not use
- ary_discard on strings.
-
-Mon Aug 3 06:43:25 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flo_hash): normalize -0.0 to 0.0. [ruby-core:24577]
-
-Mon Aug 3 00:32:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (rb_random_int): arguments have to be converted to
- integer. [ruby-core:24679]
-
-Sun Aug 2 21:04:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (literal_concat0): tail can be nil. [ruby-dev:38980]
-
-Sun Aug 2 20:09:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_combination, rb_ary_product): prevent from GC.
-
-Sun Aug 2 16:53:19 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_rand.rb: add tests for Random#float's rejection
- against Infinity and NaN.
-
-Sun Aug 2 14:20:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (rand_int): prevent from GC.
-
-Sat Aug 1 19:23:27 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (tr_trans): change condition of singlebyte
- optimization.
-
-Sat Aug 1 18:50:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (random_float): rejects Infinity and NaN.
- [ruby-core:24651]
-
-Sat Aug 1 18:34:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/rbinstall.rb (gem): suppressed warnings.
- cf: [ruby-dev:38975]
-
-Sat Aug 1 05:18:36 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (tr_trans): can't use singlebyte optimization when
- the replacement is multibyte. [ruby-core:24612]
-
-Fri Jul 31 18:01:34 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/securerandom.rb (SecureRandom.random_bytes): return string should
- be ASCII-8BIT. [ruby-core:24640]
-
-Fri Jul 31 16:28:33 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_stdio_set_default_encoding): added.
-
- * ruby.c (process_options): call rb_stdio_set_default_encoding
- after setting default internal and external.
-
-Fri Jul 31 15:06:33 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * tool/compile_prelude.rb: too long string literal causes compile error
- on some platforms.
-
-Fri Jul 31 13:15:27 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * transcode.c (str_encode_bang): C99ism.
-
-Fri Jul 31 11:48:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_compile_each): used more appropriate construct.
-
-Fri Jul 31 10:54:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (literal_concat_gen): reduced unnecessary node at string
- literal concatenation with empty head dstr. [ruby-dev:38968]
-
-Fri Jul 31 02:57:39 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y (literal_concat_gen): NODE_DSTR was incorrectly handled as
- NODE_STR. [ruby-dev:38968]
-
- * bootstraptest/test_syntax.rb: add a test for above.
-
-Fri Jul 31 00:55:48 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_module.rb (test_ancestors, test_included_modules):
- ignore rake mixins.
-
-Fri Jul 31 00:30:54 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_insnhelper.c (vm_call_cfunc): let set_trace_func use called_id
- instead of original_id.
-
-Thu Jul 30 23:04:32 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * gem_prelude.rb (Gem.path): uses Gem.default_path as a default value
- so that ruby finds gems in ~/.gem/.
- (Gem.user_home): reduced version of lib/rubygems.rb's.
- Gem.default_path needs it.
-
-Thu Jul 30 22:28:04 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * tool/compile_prelude.rb: replaces "require" with in-place evaluation
- so that copy & paste for lib/rubygems/default.rb is not necessary.
-
- * gem_prelude.rb: removes copied codes from lib/rubygems/defaults.rb.
- uses require instead.
-
- * common.mk (prelude.c): adds dependency for lib/rubygems/defaults.rb.
-
-Thu Jul 30 21:56:18 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_rand.rb: add tests for Random class.
-
-Thu Jul 30 21:48:56 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * random.c (init_genrand): ensure invariant of mt->next and mt->left.
- mt->next should always equal mt->state + N + 1 - mt->left.
- In fact, 'r = Random.new(0); r == r.dup' has returned false.
-
-Thu Jul 30 21:43:41 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * random.c (random_bytes): use NUM2LONG instead of FIX2LONG because
- Random#bytes may receive bignum.
-
-Thu Jul 30 21:39:42 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (iseq_compile_each): fix stack consistency error.
- [ruby-core:24611]
-
- * bootstraptest/test_method.rb: add tests for above.
-
-Thu Jul 30 18:39:39 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c: added check for frozen string for encode! (see Bug #1836)
-
- * test/ruby/test_transcode.rb: added tests for the above
-
-Thu Jul 30 16:45:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def (defineclass): preserve encoding of class/module
- names. [ruby-core:24600]
-
- * variable.c (rb_set_class_path_string): set class path with a
- string value.
-
-Thu Jul 30 16:12:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (Init_var_tables): initializes __classid__ ID.
-
- * variable.c: use st_data_t for st functions.
-
-Thu Jul 29 14:25:14 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/util.rb (CGI::unescape): support encoding option.
-
- * lib/cgi/cookie.rb (CGI::Cookie.parse): fix for the encoded value.
-
-Wed Jul 29 08:08:07 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * parse.y (regexp): regexp literal at the top of dstr is still needed
- even if it is empty.
-
-Wed Jul 29 03:36:24 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/json/lib/json/common.rb (JSON#recurse_proc): remove
- unnecessary private specifier. [ruby-dev:38929]
-
-Wed Jul 29 03:34:46 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm_core.h, vm_insnhelper.c (vm_call_method): revive
- VM_CALL_OPT_SEND_BIT and use it to recognize "send" method.
-
-Wed Jul 29 03:11:59 2009 Koichi Sasada <ko1@atdot.net>
-
- * proc.c (rb_method_entry_arity): support not_implemented method.
- (I have no idea to test it)
-
-Tue Jul 28 19:36:26 2009 Koichi Sasada <ko1@atdot.net>
-
- * proc.c (rb_method_entry_arity): support optimized method (send).
-
- * test/ruby/test_method.rb: add a test for above.
-
-Tue Jul 28 04:34:05 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/extconf.rb: bug fix and ignore invalid Tcl/Tk libraries.
-
- * ext/tk/lib/config_list.in: bug fix and add a new option.
-
- * ext/tk/lib/README.tcltklib: update for a new option.
-
-Mon Jul 27 19:03:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_*str_new_cstr, rb_str_buf_new_cstr),
- (rb_str_buf_cat2, rb_str_cat2, rb_exc_new2): suppress warnings.
-
-Mon Jul 27 10:24:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/parser.rb (RDoc::Parser.binary?): fix for empty files.
- [ruby-dev:38848]
-
-Mon Jul 27 06:51:41 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_eof): should call next_argv() before testing.
- [ruby-core:24561]
-
-Sun Jul 26 19:17:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (argf_eof): go to the next file if called after ARGF.close
- or ARGF.skip. a patch from Mike Kasick at [ruby-core:24561].
-
-Sun Jul 26 18:30:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_call_method): __send__ can call protected
- methods. [ruby-core:24500]
-
-Sun Jul 26 01:09:14 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * ext/bigdecimal.c: moved BASE_FIG definition before it is used
- first time.
-
- * include/ruby/defines.h [__SYMBIAN32__]: defined TRUE and FALSE to match
- changes in bignum.c and array.c.
-
-Sat Jul 25 17:49:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (argf_eof): should not have reached EOF before trying to
- read. based on a patch by Heesob Park <phasis AT gmail.com> in
- [ruby-core:24559]. [ruby-core:24557]
-
-Sat Jul 25 13:44:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * complex.c (nucomp_hash), rational.c (nurat_hash): not to use
- hash value of class so that equality against subclasses can
- work. [ruby-dev:38850]
-
-Sat Jul 25 01:05:59 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/big5.c: Fix EncLen_BIG5 for Big5-HKSCS. see [ruby-core:24390]
-
-Fri Jul 24 19:19:19 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/big5.trans, big5-hkscs-tbl.rb:
- new Chinese BIG5-HKSCS transcoding (with Tatsuya Mizuno)
- see [ruby-core:24390]
-
- * test/ruby/test_transcode.rb: added tests for the above
- (with Tatsuya Mizuno)
-
- * enc/big5.c: Added BIG5-HKSCS as a replicate encoding of BIG5
- (short term solution, needs more work; with Tatsuya Mizuno)
-
- * tool/transcode-tblgen.rb: made 'pat' directly accessible in
- class StrSet
-
-Fri Jul 24 18:03:01 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (idle): leaves IDLE in a ensure clause. a patch
- from Eric Hodel.
-
- * test/net/imap/test_imap.rb (setup, teardown): turn on
- Socket.do_not_reverse_lookup in tests.
-
-Fri Jul 24 00:13:41 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (resp_text_code): accepts response codes without
- text. [ruby-core:24194]
-
- * lib/net/imap.rb (idle, idle_done): new methods for the IMAP4 IDLE
- command (RFC 2177). Thanks, Eric Hodel.
-
- * lib/net/imap.rb (format_date, format_datetime): new method to
- format IMAP-style date/datetime. Thanks, Eric Hodel.
-
-Thu Jul 23 17:31:02 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/ruby-lex.rb: make irb be able to parse
- string_dvar. [ruby-core: 24051]
-
-Thu Jul 23 17:26:51 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: should not create "config_list" in a $srcdir.
-
-Thu Jul 23 14:35:02 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_{open,wopen}): fixed typos. these conditions
- mean to call runtime's open() if textmode.
-
-Thu Jul 23 08:53:24 2009 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/markup/simple_markup/: Remove useless directory.
- [Bug #1343]
-
-Thu Jul 23 08:52:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (random_{state,left}): internal/debug use.
-
-Wed Jul 22 19:29:26 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_module.rb (TestModule#test_alias): warning
- message updated.
-
-Thu Jul 23 00:39:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (class.o): depends on vm_core.h.
-
-Thu Jul 23 00:10:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (init_leap_second_info): checks the result of gmtime to
- suppress warnings.
-
-Wed Jul 22 22:23:24 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_core.h (struct rb_iseq_t): add a new field line_no. This field
- represents line number from which the original code of the iseq
- starts. [ruby-dev:38698]
-
- * iseq.c, compile.c: ditto.
-
- * parse.y: line number hack (for Proc#source_location) is no longer
- needed.
-
- * test/ruby/test_settracefunc.rb: line number of set_trace_func is now
- compatible with 1.8's.
-
-Wed Jul 22 22:16:48 2009 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * method.h: Commas at end of enum list not allowed as of C89
-
- * vm_method.c (rb_add_method): avoid C++ comment
-
- * vm_insnhelper.c (vm_call_cfunc): ditto.
-
-Wed Jul 22 20:42:52 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/extconf.rb: define IPPROTO_IPV6 macro for recent Windows
- SDK.
-
-Wed Jul 22 19:32:10 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/mkconstants.rb: define IPV6_* constants only when INET6
- is defined.
-
-Wed Jul 22 19:23:04 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/extconf.rb: ipv6 support is disabled by default on mswin.
-
-Wed Jul 22 17:41:08 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/ipsocket.c (init_inetsock_internal): drop IPv6 addresses
- if INET6 is not defined.
-
-Wed Jul 22 17:29:59 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/extconf.rb: enable ipv6 support for win32.
-
-Wed Jul 22 16:38:39 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * hash.c (Hash::[]): rdoc. patch by Marc-Andre Lafortune.
- #1385.
-
-Wed Jul 22 10:00:53 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (WSAMSG): get rid of compile error on VC9 and mingw.
-
-Wed Jul 22 06:35:56 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_enum.rb (TestEnumerable#each): recursive join now
- raises ArgumentError.
-
-Wed Jul 22 02:33:57 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb.rb: forget svn commit.
-
-Wed Jul 22 01:20:54 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bootstraptest/test_io.rb: block write may block for long time.
-
-Wed Jul 22 00:34:39 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb.rb, lib/irb/init.rb, lib/irb/ext/save-history.rb: add
- IRB::irb_at_exit. no use finalizer saving history. [ruby-dev-38563]
-
-Tue Jul 21 23:47:38 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * random.c (rand_init): array length of random seed was broken, which
- causes memory error with srand(2**1000000-1).
-
- * test/ruby/test_rand.c: test for above.
-
-Tue Jul 21 21:37:19 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/cmd/help.rb: fixed irb's "help" command. [ruby-core:22310].
-
- * lib/tracer.rb: no show lines unknown line number. [ruby-core:22096],
- no trace display c-call and c-return as default.
-
-Tue Jul 21 16:24:41 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (vtdate2rbtime): VT_DATE variant object
- is converted to Time object now.
-
- * test/win32ole/test_win32ole_variant.rb (test_s_new_with_nil,
- test_conversion_time2date, test_conversion_str2date,
- test_conversion_vt_date, test_set_value): ditto.
-
- * ext/win32ole/win32ole.c (rbtime2vtdate): refactoring.
-
-Tue Jul 21 16:07:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tracer.rb: toplevel caller exists now. [ruby-core:24454]
-
-Tue Jul 21 13:36:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.[ch] (recvmsg, sendmsg): new functions to support recvmsg/
- sendmsg like UNIX. these functions are experimental and not tested
- well. bug reports are welcome.
-
-Tue Jul 21 13:35:21 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (TEST_RUNNABLE): follow r24209.
-
-Tue Jul 21 12:45:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_gc_enable, rb_gc_disable): should return Qtrue/Qfalse.
-
-Tue Jul 21 12:38:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_generic_ivar_memsize): should not remove generic
- instance variable table.
-
-Mon Jul 20 20:35:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_f_open): add rdoc about specifying ext_enc as *-bom.
-
-Mon Jul 20 19:00:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (compile_dstr_fragments): reduced needless literal.
-
- * parse.y (xstring, regexp, dsym, literal_concat, evstr2dstr):
- literal at the top of dstr is no longer needed if it is empty,
- since concatstrings and toregexp always create new strings.
-
-Mon Jul 20 12:51:39 2009 wanabe <s.wanabe@gmail.com>
-
- * lib/matrix.rb (Matrix#rank): revert a part of r20859 to avoid
- infinite loop. [Bug #1020]
-
-Mon Jul 20 11:12:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, Makefile.in (TEST_RUNNABLE): tests are no
- runnable if cross-compiling.
-
- * common.mk (btest*, test*): ditto.
-
-Mon Jul 20 10:55:18 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Addrinfo#family_addrinfo): fix a typo in
- error message. patch by Nobuhiro IMAI. [ruby-dev:38828]
-
-Sun Jul 19 22:22:54 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (float_to_r): an improvement.
-
-Sun Jul 19 20:41:24 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (make_patterns): do not use \d.
-
- * rational.c (make_patterns): ditto.
-
-Sun Jul 19 17:32:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_read): should taint the result. [ruby-dev:38826]
-
-Sun Jul 19 11:00:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_method.c (me_opts): fixed optimized method aliasing.
- [ruby-dev:38824]
-
-Sun Jul 19 10:54:56 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Socket.accept_loop): rescue
- IO::WaitReadable instead of Errno::EWOULDBLOCK.
- (Socket.udp_server_loop_on): ditto.
-
-Sat Jul 18 23:44:59 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (reg_enc_error): use rb_enc_get to get the encoding of
- a Regexp object. REGEXP(re)->ptr->enc is the encoding of the
- regexp engine for patterns and target strings.
- [ruby-core:23208]
-
-Sat Jul 18 17:43:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_hash_cmp): got rid of overflow.
-
-Sat Jul 18 16:03:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/defines.h (TRUE, FALSE): for internal use.
-
-Sat Jul 18 11:39:49 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * random.c: workaround for VC++ 6.0.
-
-Sat Jul 18 09:16:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (rb_random_{int32,real,bytes,int}): added functions for
- extension libraries.
-
-Sat Jul 18 09:07:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (fill_random_seed): use cryptographic service on Windows.
-
-Sat Jul 18 07:56:00 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: fail to create a widget object for an unknown
- widget path.
-
-Sat Jul 18 07:06:31 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb,ext/tk/lib/tk/grid.rb: Bug fix on grid_slaves().
- Extend usage pattern of grid_column()/grid_row().
-
-Sat Jul 18 06:30:35 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h: include winsock headers in extern "C++" for
- C++ extension libraries.
-
- * include/ruby/missing.h (vsnprintf): workaround for VC++.
- [ruby-core:23096]
-
-Sat Jul 18 00:23:47 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * ext/readline/readline.c (Init_readline): rl_catch_signals does
- not exist on some platform like Mac OS X 10.5.
-
- * ext/readline/extconf.rb: checks existence of rl_catch_signals.
-
-Fri Jul 17 22:37:22 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/socket.c (socket_s_ip_address_list): drop inactive
- adapters.
-
- * test/socket/test_{nonblock,addrinfo,socket}.rb: skip some tests on
- Windows.
- [ruby-core:23051]
-
-Fri Jul 17 22:29:21 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/readline/readline.c (Init_readline): use rl_catch_sigwinch only
- when existing.
-
- * ext/readline/extconf.rb: check existence of rl_catch_sigwinch, and
- workaround for native Win32 readline port.
-
-Fri Jul 17 18:18:23 2009 Tanaka Akira <akr@fsij.org>
-
- * range.c (recursive_hash): extracted from range_hash. reject
- recursive key.
- (range_hash): use recursive_hash.
-
-Fri Jul 17 18:11:32 2009 Tanaka Akira <akr@fsij.org>
-
- * struct.c (recursive_hash): extracted from rb_struct_hash. reject
- recursive key.
- (rb_struct_hash): use recursive_hash.
-
-Fri Jul 17 16:45:22 2009 Tanaka Akira <akr@fsij.org>
-
- * array.c (recursive_hash): reject recursive key.
-
-Fri Jul 17 15:20:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (DIGSPERINT): fix for LP64.
-
- * random.c (fill_random_seed): /dev/urandom is not available on
- DOSISH systems.
-
- * random.c (random_equal): new method Random#==.
-
-Fri Jul 17 13:35:47 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/init.c (rsock_getfamily): return AF_UNSPEC if getsockname
- is failed. [ruby-core:24383]
-
-Fri Jul 17 01:22:57 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (recursive_join): raise ArgumentError for joining
- recursive array.
-
- * array.c (ary_join_1): ditto.
-
- * test/ruby/test_array.rb (TestArray#test_join2): test updated for
- recursive join.
-
-Thu Jul 16 23:32:16 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb,ext/tk/config_list.in: ignore paths which includes
- white space characters on Windows.[ruby-dev:38794]
-
- * ext/tk/lib/tk.rb: works on Cygwin (limitation:: Tk.mainloop works on
- the main thread only).
-
-Thu Jul 16 20:58:18 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_win32ole.rb (test_s_codepage_changed,
- test_s_locale_set, test_s_locale_change): skip test if Japanese
- locale is not installed. [ruby-core:23806]
-
- * test/win32ole/test_win32ole_variant.rb (test_conversion_str2cy):
- ditto.
-
-Thu Jul 16 19:02:28 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/lib/socket.rb (Socket.tcp_server_sockets_port0): servers
- is nil if an error occurs before setting it.
-
-Thu Jul 16 18:42:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (fill_random_seed): suppress a warning.
-
-Thu Jul 16 18:30:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (rb_hash_aset, recursive_hash): rejects recursive hash.
- [ruby-core:22921]
-
-Thu Jul 16 18:28:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * id.c (Init_id), vm.c (vm_exec): @#__ThrowState__ is no longer
- used. [ruby-dev:38760]
-
-Thu Jul 16 17:41:28 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm_method.c (rb_alias): fix a case which try non-existing method alias.
-
- * test/ruby/test_alias.rb: add a test.
-
-Thu Jul 16 16:00:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_reopen): discards read buffer. [ruby-core:24240]
-
-Thu Jul 16 15:52:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_new, rb_bigzero_p), range.c (rb_range_values):
- added for random.c.
-
- * random.c (rb_random_t): objectified. [EXPERIMENTAL]
- [ruby-dev:30954]
-
-Thu Jul 16 14:08:44 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_sample): RDoc update. a patch from Florian
- Frank. [ruby-core:24347]
-
-Thu Jul 16 12:42:10 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/readline/readline.c (readline_readline): rl_free_line_state
- before rl_cleanup_after_signal.
-
- * ext/readline/readline.c (Init_readline): set rl_catch_signals and
- rl_catch_sigwinch as 0. [ruby-core:21884]
-
-Thu Jul 16 08:59:22 2009 Koichi Sasada <ko1@atdot.net>
-
- * node.h, vm_core.h, variable.c: rename global_entry to rb_global_entry.
-
- * compile.c, insns.def, iseq.c, vm_insnhelper.h: ditto.
-
-Thu Jul 16 08:57:44 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm_method.c: separate clearing cache entry code.
-
-Thu Jul 16 08:56:32 2009 Koichi Sasada <ko1@atdot.net>
-
- * dir.c (push_glob): re-fix GC problem.
-
-Thu Jul 16 08:55:27 2009 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: add method.h.
-
-Thu Jul 16 08:53:26 2009 Koichi Sasada <ko1@atdot.net>
-
- * io.c (argf_free): free data body.
-
-Wed Jul 15 23:46:55 2009 Koichi Sasada <ko1@atdot.net>
-
- * method.h, vm_core.h: add rb_method_entry_t. Remove nodes around
- method management. This change affect some VM control stack structure.
-
- * vm.c, vm_insnhelper.c, vm_method.c, vm_eval.c: ditto. and make some
- refactoring.
-
- * insns.def, class.c, eval.c, proc.c, vm_dump.c : ditto.
-
- * vm_core.h, compile.c (iseq_specialized_instruction): remove
- VM_CALL_SEND_BIT. use another optimization tech for Kernel#send.
-
- * node.h: remove unused node types.
-
- * ext/objspace/objspace.c (count_nodes): ditto.
-
- * gc.c: add mark/free functions for method entry.
-
- * include/ruby/intern.h: remove decl of
- rb_define_notimplement_method_id(). nobody can use it
- because noex is not opened.
-
- * iseq.c (iseq_mark): fix to check ic_method is available.
-
- * iseq.c (rb_iseq_disasm): fix to use rb_method_get_iseq().
-
-Wed Jul 15 23:45:11 2009 Koichi Sasada <ko1@atdot.net>
-
- * dir.c (push_glob): fix GC problem.
-
-Wed Jul 15 17:33:52 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * ext/purelib.rb: translates a fake path to rubygems in $" into
- an alternative in $: so that Kernel.#require does not load
- more rubygems.rb.
- Resolves many failures in test/rubygems/*.
-
- * gem_prelude.rb (Gem.load_full_rubygems_library): supports case
- the rubygems to load is not in $(rubylibprefix).
- (Gem.path_to_full_rubygems_library): new method for the changes in
- purelib.rb and Gem.load_full_rubygems_library.
- (Gem.fake_rubygems_as_loaded): new method.
-
-Wed Jul 15 16:29:35 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (LIBPATHFLAG): path is already quoted in mkmf.rb.
-
-Wed Jul 15 06:21:50 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: --with-{tcl,tk}-dir doesn't work.[ruby-dev:38782]
-
-Wed Jul 15 04:22:54 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/cgi/test_cgi_multipart.rb (CGIMultipartTest#_prepare):
- set tempfile name with literal.
-
-Tue Jul 14 21:53:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/nonblock: moved from ext/io/wait/lib.
-
-Tue Jul 14 17:29:20 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_index_m): return nil if pos is out of string.
- [ruby-core:23660]
-
-Tue Jul 14 16:13:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_initialize): check if the descriptor can be accessed
- in the specified open mode. [ruby-dev:38571]
-
-Tue Jul 14 09:26:14 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: Long-term-callback support isn't stable yet.
- So, disable the feature and waiting for improvement in the future.
-
-Tue Jul 14 01:28:17 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/ruby/test_m17n.rb (TestM17N#test_env): the encoding of
- ENV is now locale encoding.
-
-Tue Jul 14 01:24:56 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * marshal.c (r_object0): should return real object.
-
-Tue Jul 14 01:06:31 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * enumerator.c (yielder_yield_i): use rb_proc_new instead of
- rb_iterate. [ruby-dev:38518]
-
- * README.EXT: rb_iterate is obsolete since 1.9; use rb_block_call
- instead.
-
- * README.EXT.ja: ditto.
-
-Tue Jul 14 00:45:41 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/test_case.rb (TestCase#test_deoptimization):
- test for [ruby-core:23190].
-
-Mon Jul 13 22:49:50 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/prime.rb (Prime#prime_division): now decomposes
- negative integer into a decomposition with element [-1, 1].
-
- * test/test_prime.rb: test for it.
-
-Mon Jul 13 22:28:03 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (pipe_open): handles leaked on win32 when an error occurs.
-
-Mon Jul 13 20:21:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (r_object0): should not shadow outer variable not to
- return Qnil always.
-
-Mon Jul 13 19:41:05 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * marshal.c (r_object0): copy instance variables to new regexp.
-
-Mon Jul 13 17:49:11 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm_core.h, compile.c: declare struct iseq_inline_cache_entry.
- Inline cache (IC) entries are no longer GC managed object.
- IC entries are freed when ISeq is freed.
-
- * iseq.c: fix mark, free, memsize functions for above change.
-
- * insns.def: remove rb_gc_write_barrier().
-
- * vm_insnhelper.c (vm_method_search): ditto.
-
- * tool/instruction.rb, template/insns_info.inc.tmpl (insn_iclen):
- added.
-
-Mon Jul 13 13:35:08 2009 Koichi Sasada <ko1@atdot.net>
-
- * insns.def, vm_insnhelper.c (getinstancevariable):
- fix to use inline cache.
-
- * compile.c: fix to skip inline cache entry (IC). IC is added
- automatically by compiler.
-
- * insns.def, vm_insnhelper.h: fix IC positions.
-
- * iseq.c: increment minor_version of ISeq because of above change.
-
-Mon Jul 13 08:01:00 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries.
-
- * ext/tk/*: Support new features of Tcl/Tk8.6b1 and minor bug fixes.
- ( [KNOWN BUG] Ruby/Tk on Ruby 1.9 will not work on Cygwin. )
-
- * ext/tk/*: Unify sources between Ruby 1.8 & 1.9.
- Improve default_widget_set handling.
-
- * ext/tk/*: Multi-TkInterpreter (multi-tk.rb) works on Ruby 1.8 & 1.9.
- ( [KNOWN BUG] On Ruby 1.8, join to a long term Thread on Tk
- callbacks may freeze. On Ruby 1.9, cannot create a second
- master interpreter (creating slaves are OK); supported master
- interpreter is the default master interpreter only. )
-
- * ext/tk/lib/tkextlib/*: Update supported versions of Tk extensions.
- Tcllib 1.8/Tklib 0.4.1 ==> Tcllib 1.11.1/Tklib 0.5
- BWidgets 1.7 ==> BWidgets 1.8
- TkTable 2.9 ==> TkTable 2.10
- TkTreeCtrl 2005-12-02 ==> TkTreeCtrl 2.2.9
- Tile 0.8.0/8.5.1 ==> Tile 0.8.3/8.6b1
- IncrTcl 2005-02-14 ==> IncrTcl 2008-12-15
- TclX 2005-02-07 ==> TclX 2008-12-15
- Trofs 0.4.3 ==> Trofs 0.4.4
-
-Mon Jul 13 01:18:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (time_timespec): rounds subsecond toward zero.
-
-Sun Jul 12 23:51:39 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * hash.c (env_str_new): use rb_locale_str_new instead of
- rb_tainted_str_new. rb_locale_str_new set string locale
- encoding and tainted.
-
-Sun Jul 12 23:56:40 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: added some shortcuts.
-
- * rational.c: ditto.
-
-Sun Jul 12 23:30:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (rb_to_integer, rb_check_to_integer): return Bignum
- as-is.
-
-Sun Jul 12 21:07:46 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: use k_exact_{zero,one}_p macro.
-
- * rational.c: ditto.
-
-Sun Jul 12 20:42:58 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * numeric.c (fix_divide): added an entry to rational.
-
- * rational.c (rb_rational_reciprocal): added.
-
- * complex.c (f_reciprocal): added.
-
-Sun Jul 12 02:24:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (rand_init): use fixed buffer for small numbers.
-
-Sat Jul 11 14:43:34 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/ruby/test_io_m17n.rb (test_strip_bom): added.
-
-Sat Jul 11 07:11:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/readline/readline.c (readline_attempted_completion_function):
- array length is long.
-
- * ext/readline/readline.c (readline_s_get_filename_quote_characters):
- missing type of self.
-
-Sat Jul 11 02:37:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (limited_rand): expands to long before shift so that
- the result does not overflow.
-
-Sat Jul 11 00:16:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (rand_init): got rid of buffer overflow.
-
-Sat Jul 11 00:11:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (ary_join_1): should recurse for element array.
-
-Fri Jul 10 23:10:11 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (io_strip_bom): ungetbyte third byte when UTF-16LE.
-
-Fri Jul 10 23:04:16 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (io_strip_bom): Fix condition of second byte of
- UTF-16LE/UTF-32LE.
-
-Fri Jul 10 21:45:30 2009 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/extconf.rb: checked rl_refresh_line in readline.
-
- * ext/readline/readline.c (readline_s_refresh_line): add new
- method, a patch from Koichiro Ohba. see [ruby-list:45922].
-
-Fri Jul 10 21:00:05 2009 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/extconf.rb: checked rl_line_buffer and rl_point in
- readline.
-
- * ext/readline/readline.c (readline_s_get_line_buffer): new method.
- (readline_s_get_point): new method.
-
-Fri Jul 10 16:30:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (recursive_join): use obj to tell if recursion occurs.
- [ruby-core:24150]
-
- * enum.c (enum_join): reverted r23966. [ruby-core:24196]
-
-Fri Jul 10 14:41:34 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * marshal.c (r_object0): set encoding only if the encoding
- is not US-ASCII.
-
-Fri Jul 10 14:44:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (struct MT): ruby already assumes int has 32bit a
- least, so no needs to use long.
-
- * random.c (rand_init): copies data to be used really only.
-
-Fri Jul 10 11:41:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (rb_obj_{untrust,untrusted,trust}): added
- prototypes. [ruby-dev:38756]
-
-Fri Jul 10 10:25:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_search_superclass): checks for implicit
- argument passing before method search. [ruby-core:24244]
-
-Fri Jul 10 07:22:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_data_type): typed.
-
-Thu Jul 9 23:28:48 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/io.h (FMODE_STRIP_BOM): new constant.
-
- * io.c (io_encname_bom_p): judge whether the encoding name
- is *-bom or not.
- (parse_mode_enc): drop "-bom".
- (rb_io_modestr_fmode): set FMODE_STRIP_BOM if needed.
- (rb_io_extract_modeenc): ditto.
- (io_strip_bom): strip bom if exists.
- (io_set_encoding_by_bom): set encoding if there is bom.
- Set encoding and strip bom when modeenc string is "r:foo-bom"
- [ruby-dev:37236]
-
-Thu Jul 9 21:56:59 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * marshal.c (r_object0): replace \u by u when the regexp is
- made by Ruby 1.8. [ruby-dev:36750]
-
-Wed Jul 8 23:13:54 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_div): omitted zero division check.
-
-Wed Jul 8 21:00:37 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/inspector.rb: forget svn add.
-
-Wed Jul 8 19:10:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (rb_check_type): rejects typed data.
-
-Wed Jul 8 18:28:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c ({proc,binding,method}_data_type): typed.
-
-Wed Jul 8 16:47:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_basename): returns new string instead of
- shared string from FilePathStringValue(). [ruby-core:24199]
-
-Wed Jul 8 04:28:16 2009 Eric Hodel <drbrain@segment7.net>
-
- * ext/.document: Update with extensions that appear to have
- documentation. [ruby-core:24181]
-
-Wed Jul 8 04:28:16 2009 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/ruby.h:
- rename
- "...TypeStruct" and "typed_struct" to
- "TypedData..." and "typeddata", respectively.
- rename
- rb_data_type_t#name to
- rb_data_type_t#wrap_struct_name.
-
- * error.c, gc.c, iseq.c, vm.c: ditto.
-
-Tue Jul 7 20:23:27 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * bin/irb, lib/irb.rb lib/irb/*: irb-0.9.6, extend inspect-mode
-
-Tue Jul 7 17:00:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_gc_call_finalizer_at_exit): deal with typed struct like
- as obj_free().
-
- * error.c (rb_typed_struct_is_kind_of): new function to see if the
- given typed struct.
-
- * error.c (rb_check_typed_struct): new function to check typed
- struct.
-
- * include/ruby/ruby.h (Check_TypedStruct, Data_Get_TypedStruct):
- new macro to check typed struct.
-
-Tue Jul 7 13:36:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (DEFINE_ENUMFUNCS): included function signature.
-
- * enum.c (rb_enum_join): non-nil separator must be convertible to
- String. [ruby-core:24172]
-
-Tue Jul 7 12:47:28 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (rb_enum_join): should propagate taint to the return
- value. the change was overridden by r23967. [ruby-core:24176]
-
-Tue Jul 7 11:56:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (GC_PROF_SET_MALLOC_INFO, GC_PROF_SET_HEAP_INFO): simplified.
-
-Tue Jul 7 10:12:37 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_io_ext_int_to_encs): Set external encoding if
- ext==intern. [ruby-dev:38278]
-
-Mon Jul 6 09:31:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (make_curry_proc): should propagate lambda-ness.
- [ruby-core:24127]
-
- * proc.c (proc_hash): use long.
-
-Mon Jul 6 09:06:49 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_module.rb (TestModule#test_undef): adjust to
- message change.
-
- * test/ruby/test_object.rb (TestObject#test_redefine_method_which_may_case_serious_problem): ditto.
-
- * test/ruby/test_object.rb (TestObject#test_remove_method): ditto.
-
-Mon Jul 6 09:04:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (enum_join): deals with self recursive objects to get rid
- of infinite recursion. [ruby-core:24150]
-
-Mon Jul 6 08:00:10 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_to_a): should propagate taint to the return value.
- [ruby-core:24152]
-
- * enum.c (enum_sort_by): ditto.
-
-Mon Jul 6 00:41:41 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c: edited rdoc.
-
-Sun Jul 5 23:55:57 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (find_time_t): fix Time.local(2009,2,31) failure on 64bit
- time_t environment.
-
-Sun Jul 5 22:43:13 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_s_polar): now arg is optional.
-
-Sun Jul 5 20:40:35 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (float_arg): returns PI for -0.0.
-
-Sun Jul 5 14:04:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_threadptr_exec_event_hooks): new function to
- execute event hooks, with preserving errinfo. [ruby-core:24118]
-
-Sun Jul 5 08:14:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_method.c (rb_add_method, remove_method, rb_undef): fixed
- minor grammatical errors in warnings. a patch from Run Pain
- Run Run at [ruby-core:24141].
-
- * vm_method.c (Init_eval_method): registers notimplement_body as a
- mark-object.
-
- * vm_insnhelper.c (vm_yield_setup_block_args): restores the firs
- arg where is overwritten at funcall. [ruby-core:24139]
-
-Sat Jul 4 08:20:03 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (dbl2ival): should raise FloatDomainError on Infinity
- and NaN as 1.8 does. [ruby-dev:38726]
-
-Fri Jul 3 22:48:45 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (find_time_t): less number of guesses for hh:mm:60.
-
-Fri Jul 3 21:30:14 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_equal_p): removed.
-
-Fri Jul 3 21:07:29 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c: renamed equal_p to eqeq_p.
-
- * complex.c: ditto.
-
- * complex.c (nucomp_equal_p): added.
- Complex(NaN).equal?(Complex(NaN)) should return true.
-
-Fri Jul 3 19:48:40 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: undef-ed some methods. [ruby-core:24110]
-
- * complex.c (Numeric#arg): NaN for NaN. [ruby-core:24116]
-
-Fri Jul 3 18:35:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (struct rb_iseq_struct): fixed types.
-
- * vm_core.h (ic_vmstat): VM state version is VALUE.
-
-Fri Jul 3 02:52:20 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (find_time_t): time guess strategy refined again.
-
-Fri Jul 3 00:36:16 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (find_time_t): time guess strategy refined.
-
-Thu Jul 2 11:16:25 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: added response to Net::IMAP::ResponseError.
- a patch from Eric Hodel in [ruby-core:24111].
-
-Thu Jul 2 08:04:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (num_exact): rb_check_to_integer() can deal with both of
- Fixnum and Bignum together.
-
-Thu Jul 2 07:53:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yylex): fixed wrong variable.
-
-Thu Jul 2 05:37:38 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (num_exact): use to_r for T_FLOAT.
-
-Thu Jul 2 05:15:54 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (quo): return an integer if possible.
-
-Wed Jul 1 21:09:25 2009 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h (rb_time_num_new): declared.
-
- * time.c (nsec2timev): extracted from time_new_internal.
- (time_new_internal): change argument to VALUE.
- (rb_time_new): follow the argument change.
- (rb_time_nano_new): ditto.
- (rb_time_num_new): new function.
-
- * ext/socket/ancdata.c (ancillary_timestamp): use rb_time_num_new to
- represent struct bintime preciously.
-
-Wed Jul 1 08:46:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_encoding): encodings need extra depth.
- [ruby-core:24100]
-
-Wed Jul 1 06:47:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (enum_grep): gets rid of type-punning calls.
-
-Wed Jul 1 06:36:28 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_join): add Enumerable#join.
-
- * array.c (ary_join_1): recursive join for Enumerators (and
- objects with #to_a).
-
- * array.c (rb_ary_join): performance tune.
-
-Tue Jun 30 18:19:07 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_hash): documentation fix. a patch from
- Marc-Andre Lafortune. [ruby-core:23943]
-
- * object.c (rb_mod_cmp): ditto.
-
- * range.c (range_eq): ditto.
-
- * string.c (rb_str_partition, rb_str_rpartition): ditto.
-
- * struct.c (rb_struct_s_def): ditto.
-
-Tue Jun 30 17:44:24 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (reg_match_pos): adjust offset based on characters, not
- bytes. [ruby-dev:38722]
-
- * string.c (rb_str_offset): new function.
-
- * string.c (rb_str_index_m): no call to rb_reg_adjust_startpos().
-
-Tue Jun 30 16:57:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/rbinstall.rb: renamed to get rid of collision against
- instruction.rb on command line completion of shell.
-
- * tool/mkconfig.rb (RbConfig.expand): get rid of exceptions on
- frozen strings unless really changed.
-
- * tool/file2lastrev.rb: get rid of global variables.
-
- * tool/compile_prelude.rb: use US-ASCII name.
-
-Tue Jun 30 16:46:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def, tool/instruction.rb: fixed types.
-
-Tue Jun 30 11:08:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/oniguruma.h, include/ruby/re.h, re.c, regcomp.c,
- regenc.c, regerror.c, regexec.c, regint.h, regparse.c: use long.
-
-Tue Jun 30 11:05:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (dln_find_1): fixed index overrun.
-
-Tue Jun 30 08:42:34 2009 Eric Hodel <drbrain@segment7.net>
-
- * tool/instruby.rb: summary is required in a .gemspec.
-
-Tue Jun 30 01:35:12 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * tool/strip-rdocs.rb: supports QT style doxy-comments.
-
-Tue Jun 30 01:24:10 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/cmath.rb (log2, cbrt): added. [experimental]
-
-Tue Jun 30 01:19:53 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_expt): do not use rb_fexpt.
-
-Mon Jun 29 22:50:10 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * Doxyfile.in: removed. merged into template/Doxyfile.template
-
- * configure.in: new checking for dot and doxygen.
-
- * template/Doxyfile.template: merged with Doxyfile.in.
- configured some options.
-
- * common.mk (capi): use $(DOXYGEN) instead of "doxygen".
- (Doxyfile): removed a duplicate entry in the dependency.
-
-Mon Jun 29 21:01:31 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_expt): checks exactness.
-
-Mon Jun 29 20:29:11 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (float_to_r): always returns rational.
-
-Mon Jun 29 18:55:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (dln_find_1): fix for files with dots. [ruby-dev:38588]
-
-Mon Jun 29 17:14:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): should copy original encoding.
- [ruby-dev:38612]
-
-Sun Jun 28 23:10:55 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * gem_prelude.c (Gem.default_dir): follows the change on
- lib/rubygems/default.rb in r23879
-
-Sun Jun 28 23:32:11 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_div): raises ZeroDivisionError immediately
- when the given second argument is zero.
-
- * rational.c (nurat_fdiv): never raise even if the given second
- argument is zero.
-
- * rational.c (rb_raise_zerodiv): changed the message (zero to 0).
-
-Sun Jun 28 22:25:07 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_expt): convert to a float when the given power
- is a bignum.
-
- * rational.c (nurat_expt): ditto.
-
-Sun Jun 28 21:16:48 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/cmath.rb (sqrt): fixed an issue [ruby-list:45852].
-
-Sun Jun 28 19:48:29 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_expt): some improvements.
-
- * rational.c (nurat_expt): ditto.
-
-Sun Jun 28 19:03:46 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * tool/instruby.rb (:gem): registers the bundled version
- of minitest as a gem as rdoc or rake.
- c.f. [ruby-dev:38692].
-
-Sun Jun 28 19:02:07 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/rubygems.rb (ConfigMap[:rubylibprefix]): new entry.
-
- * lib/rubygems/defaults.rb (Gem.default_dir): considers
- "--with-rubylibprefix" configure option.
-
-Sun Jun 28 09:21:00 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: renamed some static functions.
-
- * rational.c: ditto.
-
-Sat Jun 27 19:06:22 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_addsub): new
-
- * complex.c (nucomp_{add,sub}): use nucomp_addsub.
-
- * complex.c (nucomp_divide): changed the algorithm.
-
- * complex.c (nucomp_abs): added shortcuts.
-
-Sat Jun 27 16:56:33 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (nurat_cmp): use rb_num_coerce_cmp.
-
-Sat Jun 27 16:45:10 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: revised rdoc.
-
- * rational.c: ditto.
-
- * numeric.c: ditto.
-
-Sat Jun 27 13:44:48 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * NEWS, lib/rss/maker/base.rb, test/rss/test_maker_2.0.rb: add
- item.guid.permanent_link? and item.guid.permanent_link=.
-
-Sat Jun 27 13:41:00 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * NEWS: rss: 0.2.5 -> 0.2.7.
-
- * lib/rss/rss.rb, test/rss/test_version.rb: 0.2.6 -> 0.2.7.
-
-Sat Jun 27 03:16:56 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (int_chr): use default_internal encoding as default
- destination encoding if set. [ruby-core:23997]
-
-Sat Jun 27 03:09:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_rewind): need to rewind $. and ARGF.lineno.
- [ruby-core:24046]
-
- * io.c (struct argf): refactoring on $. and ARGF.lineno behavior.
-
-Fri Jun 26 21:48:30 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/pty.c (pty_getpty): check dup failure.
-
-Fri Jun 26 17:33:46 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_rubyopt):
- test suite add '.' to RUBYLIB. remove checks.
-
- * test/ruby/test_require.rb (TestRequire#test_tainted_loadpath):
- the default tempdir directory /tmp is world writable, so
- SecurityError would be raised. check removed.
-
-Fri Jun 26 16:32:59 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (COMPILE_PRELUDE): need -I. before -rrbconfig.
- [ruby-dev:38714]
-
-Thu Jun 25 18:41:51 2009 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 1.4.2 r5269.
- * test/minitest/*.rb: ditto.
-
-Thu Jun 25 17:58:39 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_binmode_m): should call rb_io_ascii8bit_binmode() to
- set its encoding to ASCII-8BIT. [ruby-core:24029]
-
-Thu Jun 25 13:04:58 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * instruby.rb: '&' in sed s command's replacement is '\&' in ruby.
- [ruby-dev:38713]
-
-Thu Jun 25 06:50:23 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_each_codepoint): uninitialized local variable enc.
-
-Thu Jun 25 06:25:49 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (first_i): wrong condition for no argument #first.
- [ruby-core:24017]
-
-Wed Jun 24 20:19:11 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_s_now): new function. Time.now don't take arguments.
-
-Wed Jun 24 16:08:03 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/resource.rb: CONFIG["TEENY"] is not ruby's version but API's
- one. So need to use RUBY_VERSION instead.
-
-Wed Jun 24 16:07:04 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/mkexports.rb: rbconfig.rb exists at ".".
-
-Wed Jun 24 15:02:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_set_encode): show the erred file name instead of
- the file that requires it. [ruby-core:24006]
-
-Wed Jun 24 11:41:20 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * misc/ruby-style.el: It is too late to set c-file-style in
- c-mode-hook (at least on Emacs 23). Call c-set-style instead.
-
-Tue Jun 23 21:28:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_get_path_check): check with given safe level.
-
- * file.c (rb_find_file_ext_safe, rb_find_file_safe): ditto.
-
- * safe.c (rb_insecure_operation): function to raise security
- error.
-
-Tue Jun 23 20:32:43 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * gc.c: remove the definition of GC_DEBUG (debugging macro).
-
-Tue Jun 23 16:16:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ruby_version): defaults revision to 0 when no
- revision.h exists.
-
-Tue Jun 23 16:04:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_find_file_ext, rb_find_file): no needs to expand
- paths with tilde twice.
-
- * load.c (rb_f_load): load the given path directly if not found in
- load_path.
-
- * load.c (search_required): search file in specified safe level.
-
- * load.c (rb_require_safe): path to load is already searched in
- search_required().
-
-Tue Jun 23 12:43:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: remove PACKAGE_* macros generated by autotools.
- [ruby-core:20938]
-
-Tue Jun 23 01:17:38 2009 Tanaka Akira <akr@fsij.org>
-
- * ruby.c (process_options): don't specify .so for encdb here.
- "." is replaced by "_" in load_encoding.
-
- * encoding.c (load_encoding): add .so here.
-
-Mon Jun 22 23:24:22 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_generic_ivar_memsize): typo fixed. a patch from
- Kazuhiro NISHIYAMA. [ruby-dev:38700]
-
- * ext/objspace/objspace.c (memsize_of): ditto.
-
-Mon Jun 22 21:21:59 2009 Tanaka Akira <akr@fsij.org>
-
- * io.c: remove __CHECKER__ test.
-
- * dir.c: ditto.
-
- * dln.c: ditto.
-
- * file.c: ditto.
-
- * process.c: ditto.
-
-Mon Jun 22 17:15:38 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_each_codepoint): new method.
- [ruby-core:23949]
-
- * ext/stringio/stringio.c (strio_each_codepoint): ditto.
-
-Mon Jun 22 16:26:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_init_loadpath_safe): removed "." from load_path.
-
-Mon Jun 22 16:14:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_set_arguments, iseq_compile_each): internal
- arrays must be hidden. [ruby-dev:38613]
-
- * vm.c (Init_top_self): ditto.
-
-Mon Jun 22 14:41:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options), enc/prelude.rb: encdb and transdb are
- extension libraries.
-
- * ruby.c (process_options): set progname earlier.
-
-Mon Jun 22 13:50:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_fdatasync): new method IO#fdatasync.
-
-Sun Jun 21 22:33:05 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * load.c (Init_load): $: must be readonly. [ruby-dev:38690]
-
- * ruby.c (ruby_prog_init): $-W must be readonly. [ruby-dev:38691]
-
-Sun Jun 21 10:47:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/fileutils.rb (FileUtils::Entry_#copy_file): open with
- default umask. [ruby-core:23952]
-
-Sun Jun 21 10:46:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (enc_arg): default internal encoding may not be set.
- [ruby-core:23932]
-
-Sat Jun 20 21:11:43 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * numeric.c (num_div): don't use num_floor which is actually
- flo_floor.
-
- * numeric.c (num_modulo): don't call '%'.
-
- * numeric.c (num_divmod): use num_modulo.
-
- * numeric.c: defined '%'.
-
- * rational.c (nurat_idiv,nurat_mod,nurat_divmod,nurat_rem): removed.
-
-Sat Jun 20 20:28:44 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: edited rdoc.
-
- * numeric.c: ditto.
-
-Sat Jun 20 08:56:47 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: edited rdoc.
-
- * rational.c: ditto.
-
- * numeric.c: ditto.
-
-Sat Jun 20 07:17:52 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/monitor.rb (MonitorMixin::extend_object): should use
- #__send__ instead of #send to avoid possible name conflict.
- [ruby-core:23907]
-
-Sat Jun 20 06:56:31 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: edited rdoc.
-
- * rational.c: ditto.
-
-Sat Jun 20 05:08:59 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: edited rdoc.
-
- * rational.c: ditto.
-
-Sat Jun 20 04:30:35 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (nurat_abs): removed.
-
-Sat Jun 20 03:34:16 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: added rdoc.
-
-Fri Jun 19 23:43:38 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * numeric.c: edited rdoc.
-
-Fri Jun 19 22:58:16 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c: edited rdoc.
-
-Fri Jun 19 22:21:17 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * numeric.c: edited rdoc.
-
-Fri Jun 19 21:56:01 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (nurat_expt): delegates to complex when self is
- negative. because Float#** does not produce complex.
-
-Fri Jun 19 21:40:58 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * numeric.c: edited rdoc.
-
- * rational.c: ditto.
-
-Fri Jun 19 20:53:54 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (rb_enc_name_list): update RDoc. [ruby-core:23926]
-
-Fri Jun 19 20:44:45 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: constant COMPLEX_NAME has been removed.
-
- * rational.c: constant RATIONAL_NAME has been removed.
-
-Fri Jun 19 20:39:46 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c: added rdoc. a patch from Run Paint Run Run.
-
-Fri Jun 19 17:04:59 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flo_cmp): should always return nil for NaN.
-
- * numeric.c (flo_cmp): handle infinite value specially using
- infinite? method internally. [ruby-dev:38681]
-
-Fri Jun 19 09:28:45 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * numeric.c (*_numerator,*_denominator): moved to rational.c.
-
- * rational.c (*_numerator,*_denominator): moved from numeric.c.
-
-Fri Jun 19 08:14:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (big_lshift, big_rshift): return Bignum always without
- normalization. [ruby-dev:38679]
-
-Thu Jun 18 22:31:38 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (nurat_s_convert): calls to_r when the given argument
- is non-integer.
-
- * rational.c (nurat_s_convert): raises TypeError when the given
- argument is nil.
-
- * complex.c (nucomp_s_convert): ditto.
-
-Thu Jun 18 20:32:11 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * numeric.c (num_numerator, num_denominator): use
- to_r [ruby-core:23910].
-
-Thu Jun 18 16:21:05 2009 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 1.4.0 r5083.
- * test/minitest/*.rb: ditto.
-
-Thu Jun 18 10:12:49 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): went infinity too
- early. add BASE_FIG margin. [ruby-dev:38673]
-
-Thu Jun 18 01:35:51 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flo_cmp): Infinity is greater than any bignum
- number. [ruby-dev:38672]
-
- * bignum.c (rb_big_cmp): ditto.
-
-Thu Jun 18 01:29:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): drive letter is ascii only.
- [ruby-dev:38612]
-
-Thu Jun 18 01:09:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ridir, RI_BASE_NAME): fixed for path expansion.
- [ruby-core:23876]
-
-Wed Jun 17 23:46:08 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (nurat_coerce): accepts Complex when the imag is
- exact zero.
-
-Wed Jun 17 21:25:54 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * bignum.c (rb_big_fdiv): checks whether the given second argument
- can be converted to float properly.
-
- * numeric.c (fix_fdiv): calls rb_big_fdiv when the given second
- argument is a bignum.
-
- * rational.c (nurat_fdiv): should calculate Float(x/y), not
- Float(x)/Float(y).
-
-Wed Jun 17 16:57:40 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * load.c (rb_f_require): RDoc updated. a patch from Run Paint Run
- Run in [ruby-core:23833].
-
- * load.c (rb_mod_autoload): ditto. [ruby-core:23835]
-
-Wed Jun 17 14:37:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sample/test.rb (valid_syntax?): skips BOM. [ruby-dev:38666]
-
- * test/ruby/test_system.rb (TestSystem#valid_syntax?): ditto.
-
-Wed Jun 17 13:54:18 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/strscan/strscan.c (Init_strscan): remove obsolete
- matchedsize method, use matched_size instead. [ruby-dev:38591]
-
-Wed Jun 17 12:37:37 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (ruby_thread_stack_overflow): call rb_exc_raise() on
- stack overflows in the signal handler, if sigaltstack is
- available. On stack overflow (and with sigaltstack), the signal
- handler is more likely to have room to create an exception
- object. [ruby-core:23813]
-
-Wed Jun 17 08:10:38 2009 Koichi Sasada <ko1@atdot.net>
-
- * ext/objspace: added. objspace library extends some methods to
- ObjectSpace module.
-
-Wed Jun 17 08:14:01 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_coerce): accepts Complex instances.
-
- * rational.c (nurat_coerce): accepts Rational
- instances. [ruby-core:23859]
-
-Wed Jun 17 07:36:22 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/webrick/httputils.rb (parse_form_data): escape boundary of
- multipart/form-data when embed in regexp.
-
-Wed Jun 17 07:24:26 2009 Koichi Sasada <ko1@atdot.net>
-
- * array.c (rb_ary_memsize): added.
-
- * io.c (rb_io_memsize): added.
-
- * regcomp.c (onig_memsize): added.
-
- * string.c (rb_str_memsize): added.
-
- * transcode.c (rb_transcoding_memsize, rb_econv_memsize): added.
-
- * variable.c (rb_geneic_ivar_memsize): added.
-
-Wed Jun 17 07:04:33 2009 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (iseq_memsize): added. Use RTypedData instead of RData
- for ISeq.
-
- * vm.c (env_memsize, vm_memsize, thread_memsize): added. Use
- RTypedData instead of RData for Env, VM, Thread.
-
-Wed Jun 17 06:48:28 2009 Koichi Sasada <ko1@atdot.net>
-
- * st.c, include/ruby/st.h (st_memsize): added. This function returns
- the memory usage of st_table.
-
-Wed Jun 17 06:19:06 2009 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/ruby.h: New structure RTypedData, added.
- This structure includes more explicit type information for
- T_DATA objects. If RData(obj)->dfree is immediate value `1' on
- T_DATA object obj, obj is needed to be accessed with RTYPEDDATA(obj)
- instead of RDATA(obj). A RTypedData structure points the structure
- rb_typed_data_t. rb_typed_data_t includes information such as the
- type name of this data, mark and free function what RData includes,
- and memsize function show how data consuming the memory size.
- Note that you do not need any change existing T_DATA objects.
- If you use RDataType instead of RData on T_DATA object,
- you can specify explicit type information.
-
- * gc.c (rb_data_typed_object_alloc, rb_objspace_data_type_memsize,
- rb_objspace_data_type_name): added.
-
-Wed Jun 17 06:14:23 2009 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: fix indent.
-
-Wed Jun 17 06:05:03 2009 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (rb_objspace_each_objects): New C API, added.
-
-Wed Jun 17 00:31:30 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_argf.rb (TestArgf#test_skip): updated test
- according to clarified behavior.
-
-Tue Jun 16 22:47:37 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (fptr_finalize): revert last change. [ruby-dev:38648]
-
- * io.c (fptr_finalize): skip close(2) for fd 0,1,2.
-
-Tue Jun 16 20:07:09 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (transcode_restartable0): refix can't build with VC9.
-
-Tue Jun 16 16:09:59 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * parse.y (parser_read_escape, parser_tokadd_escape):
- replace scan_oct as ruby_scan_oct.
-
-Tue Jun 16 06:40:31 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (fptr_finalize): should close stdin/stdout/stderr when
- closed explicitly. [ruby-core:23853]
-
- * io.c (argf_skip): should close only when current_file is available.
-
-Tue Jun 16 01:50:02 2009 Tanaka Akira <akr@fsij.org>
-
- * vm_eval.c (rb_call0): refine exception message for hidden objects.
-
-Mon Jun 15 22:35:31 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * bignum.c (rb_big2db): (-Float::MAX.to_i*2).to_f should return
- -HUGE_VAL (-Infinity).
-
-Mon Jun 15 18:48:41 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_each_line): should return self. [ruby-core:23852]
-
- * io.c (argf_each_byte, argf_each_char): ditto.
-
-Mon Jun 15 17:48:42 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (os_obj_of): invoke garbage collection before iteration, to
- avoid accessing half recycled object references. [ruby-dev:38613]
-
-Mon Jun 15 11:04:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * .gdbinit (rp, iseq): load dummy_gdb_enums on demand.
- [ruby-dev:38606]
-
-Sun Jun 14 14:57:57 2009 Koichi Sasada <ko1@atdot.net>
-
- * thread.c, vm_eval.c: add Thread.backtrace.
-
- * test/ruby/test_thread.rb: add a test.
-
-Sun Jun 14 13:58:32 2009 Koichi Sasada <ko1@atdot.net>
-
- * transcode.c (transcode_restartable0): revert last commit because
- this change cause SEGV at test-all.
-
-Sun Jun 14 10:49:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_find_file_ext, rb_find_file): canonicalize absolute
- paths. [ruby-core:23845]
-
- * file.c (rb_file_size): added rdoc. a patch from Run Paint Run
- Run at [ruby-core:23839].
-
-Sun Jun 14 07:53:26 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_fdiv): use fdiv recursively.
-
- * complex.c (nucomp_expt): reduced code.
-
-Sun Jun 14 03:37:09 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/utf8_mac.trans: remove wrong optimization.
-
-Sun Jun 14 01:53:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (transcode_restartable0): can't build with VC9.
-
-Sun Jun 14 01:23:41 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (nurat_to_f): use fdiv.
-
-Sat Jun 13 15:03:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (load_lock): show backtrace at circular require.
-
- * load.c (rb_provide): assumes us-ascii only.
-
- * load.c (rb_require_safe): FilePathValue() implies rb_str_new4().
-
- * load.c (rb_mod_autoload): try conversion to path like as
- require. [ruby-core:23834]
-
-Sat Jun 13 09:58:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (r_ivar): should not set internal encoding ivar as an
- ordinary ivar. [ruby-dev:38596]
-
-Sat Jun 13 07:08:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (rb_f_local_variables): now returns symbols. a patch from
- Run Paint Run Run at [ruby-core:23828].
-
-Sat Jun 13 07:06:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (rb_f_catch): updated rdoc about generalized argument,
- and the case without arguments. [ruby-core:23827]
-
-Sat Jun 13 06:50:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/net/protocol.rb (Net::BufferedIO#rbuf_fill): TimeoutError is
- obsolete, use Timeout::Error instead. [ruby-core:23821]
-
-Sat Jun 13 06:45:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (rb_f_throw): fixed rdoc about exception.
- [ruby-core:23824]
-
-Fri Jun 12 14:56:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): associate the input encoding when
- copying an absolute path. [ruby-dev:38594]
-
-Fri Jun 12 02:41:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_replace_shared): shared target must be frozen.
- [ruby-core:23727]
-
-Thu Jun 11 21:05:09 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/cmath.rb (exp): omitted redundant function call.
-
-Thu Jun 11 17:49:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (gfCheckVal): never used.
-
- * ext/bigdecimal/bigdecimal.c (VpInit): fixed format modifiers.
-
- * ext/bigdecimal/bigdecimal.c (VPrint): constified.
-
-Thu Jun 11 15:27:17 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/prime.rb: documentation typo fixed. a patch from okkez.
- [ruby-dev:38586]
-
-Wed Jun 10 18:15:17 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * dir.c (dir_s_getwd): directory path's encoding should be filesystem's
- one.
-
- * lib/tmpdir.rb: ditto (but not finished yet.)
-
-Wed Jun 10 06:28:15 2009 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems*: Upgrade to RubyGems 1.3.4 r2223.
-
-Tue Jun 9 22:38:09 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/cmath.rb (log10): raised exception when the given number is
- a negative real.
-
-Tue Jun 9 15:13:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (dir_s_glob): fixed rdoc. a patch from Joseph Pecoraro a
- [ruby-core:23767].
-
- * dir.c (sys_warning): get rid of type-punning function cast.
-
- * dir.c (ruby_glob0): get rid of possible overflow.
-
-Tue Jun 9 10:58:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, win32/Makefile.sub (RMALL): need for distclean-rdoc.
-
-Tue Jun 9 01:07:33 2009 Koichi Sasada <ko1@atdot.net>
-
- * thread.c: rename functions which require a parameter
- "rb_thread_t *", the prefix to be rb_threadptr_ instead of
- rb_thread_.
-
- * thread.c (rb_thread_add_event_hook(), rb_thread_remove_event_hook):
- change the parameter type from rb_thread_t * to VALUE.
-
- * eval.c, eval_error.c, eval_intern.h, signal.c, vm_core.h, vm_eval.c:
- ditto.
-
- * include/ruby/intern.h: remove decl of rb_thread_signal_raise() and
- rb_thread_signal_exit().
-
-Mon Jun 8 05:07:41 2009 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (rb_thread_create_timer_thread): print fatal error
- message to stderr instead of using rb_bug().
-
- * KNOWNBUGS.rb, bootstraptest/test_fork.rb: move a fixed test.
-
-Sun Jun 7 22:44:20 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/cmath.rb (log): avoided redundant expression.
-
-Sat Jun 6 02:49:05 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_reject_bang): always check frozen status.
- [ruby-core:23715]
-
- * hash.c (rb_hash_update): ditto.
-
- * hash.c (rb_hash_reject_bang): call rb_hash_foreach() directly.
-
- * hash.c (rb_hash_update_i): call st_insert() directly.
-
- * hash.c (rb_hash_update_block_i): ditto.
-
-Fri Jun 5 07:12:32 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/mkmf.rb (#link_command): should dup CONFTEST_C which is
- frozen. ref [ruby-core:23675]. [ruby-core:23702]
-
-Thu Jun 4 02:25:51 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/base64.rb: typo fixed. a patch from okkez. [ruby-dev:38564]
-
-Wed Jun 3 09:03:23 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_first): should check negative length.
-
-Tue Jun 2 17:32:40 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (first_i): Enumerator#first should consume only what is
- needed. a patch from Marc-Andre Lafortune. [ruby-core:23661]
-
- * enum.c (enum_first): call to_int once for an argument. based on
- a patch from Marc-Andre Lafortune.
-
-Tue Jun 2 13:27:21 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ripper/test_filter.rb: add tests. see [ruby-dev:37856]
-
-Tue Jun 2 07:44:43 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_gsub_bang): modify check at the beginning.
- [ruby-core:23662] ref [ruby-core:23657]
-
- * string.c (rb_str_rstrip_bang): ditto. [ruby-core:23657]
-
- * string.c (rb_str_chop_bang): ditto.
-
- * string.c (rb_str_chomp_bang): ditto.
-
- * string.c (rb_str_reverse_bang): modify check added. [ruby-core:23671]
-
-Mon Jun 1 11:21:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (cont_capture, fiber_store): reraise transferred error.
-
- * cont.c (fiber_switch): transfers dead fiber error to the previous
- or root fiber if the current fiber is dead. [ruby-core:23651]
-
-Mon Jun 1 10:41:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_exc_new2): optimization for literal.
-
-Mon Jun 1 07:20:02 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): returns Inf if
- exp is bigger than DBL_MANT_DIG.
-
-Sun May 31 23:28:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): checks for duplication of source
- files.
-
-Sun May 31 23:26:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (istrailinggarbage): fixed typo.
-
-Fri May 29 17:10:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * struct.c (Init_Struct): made #to_s an alias to #inspect to
- reduce the result of recursive struct. a patch from ujihisa a
- [ruby-dev:38554].
-
-Fri May 29 17:08:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (Init_Hash): made #to_s an alias to #inspect to reduce
- the result of recursive hash. a patch from ujihisa a
- [ruby-core:23601]. [ruby-dev:38555]
-
-Fri May 29 09:30:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (collect_all): checks interrupts. [ruby-core:23594]
-
-Thu May 28 07:39:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (THREAD_MODEL): reject unknown value and checks
- pthread.h only when pthread. [ruby-core:23577]
-
-Thu May 28 03:47:46 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sample/optparse/opttest.rb: typo fixed. [ruby-dev:38544]
-
-Thu May 28 03:43:10 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_strftime): update RDoc according to info from
- Marc-Andre Lafortune in [ruby-core:23575]. [ruby-core:23564]
-
-Thu May 28 02:40:54 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/uri: don't set @parser if it is DEFAULT_PARSER for marshaling
- URI objects between Ruby 1.8 and Ruby 1.9.
- [ruby-dev:38377]
-
-Wed May 27 23:00:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (struct parser_params): lex_gets_ptr should be long.
-
-Wed May 27 18:00:15 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigand_int): new function to calculate bignum and
- fixnum without allocating internal bignum.
-
- * bignum.c (bigor_int): ditto.
-
- * bignum.c (bigxor_int): ditto.
-
- * bignum.c (bigand_int): even less object allocation.
-
-Wed May 27 14:29:55 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_encoding): more compact encoding information for
- US-ASCII and UTF-8. [incompatible] [experimental]
-
- * marshal.c (r_ivar): restore :E encoding information.
-
-Wed May 27 14:08:39 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * st.c (st_insert2): new function with processing new key,
- e.g. copy.
-
- * hash.c (rb_hash_aset): use st_insert2() to reduce redundant
- st_lookup calls.
-
-Wed May 27 02:31:38 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/readline/readline.c (readline_getc): the function for
- rl_getc_function must be a byte function.
- so use getbyte method. [ruby-dev:38535]
-
-Tue May 26 14:24:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c: fixed types.
-
- * common.mk (bignum.o, numeric.o): depend on util.h.
-
- * bignum.c, marshal.c: fixed types.
-
- * numeric.c (infinite_value): use ruby_div0.
-
- * include/ruby/util.h (ruby_div0): moved from marshal.c.
-
-Tue May 26 11:01:41 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * lib/mkmf.rb: use map! to replace strings in $objs array.
-
-Tue May 26 10:12:08 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bignew_1): inline memory allocation.
-
- * bignum.c (bigtrunc): call rb_big_resize() only when needed.
-
- * bignum.c (bigfixize): declare inline.
-
-Tue May 26 05:39:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (FilePathValue): prevent from GC.
-
- * include/ruby/ruby.h (NUM2LONG): added GCC specific optimization.
-
-Tue May 26 03:41:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (rb_gmtime, rb_localtime): gmtime and localtime return
- NULL on error. [ruby-core:23551]
-
-Tue May 26 03:38:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_each_char, rb_str_each_codepoint): string
- length must be long.
-
-Mon May 25 13:27:32 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * lib/mkmf.rb: dont use gsub! method for frozen string.
-
-Mon May 25 11:47:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/mkconfig.rb, tool/instruby.rb: removed redundant code.
-
-Mon May 25 09:34:09 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_hash): avoid calling rb_enc_str_asciionly_p().
-
- * string.c (rb_str_replace): avoid redundant calling rb_str_new4().
-
- * string.c (str_replace): factor out replacement from
- rb_str_replace() without type check nor discarding the
- destination contents.
-
-Mon May 25 08:06:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_partition): should use the converted result. a
- patch from Marc-Andre Lafortune at [ruby-core:23540].
-
- * string.c (rb_str_rpartition): ditto.
-
-Mon May 25 06:25:38 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_hash.rb (TestHash::test_equal2): recursive hashes
- are handled properly now. ref: [ruby-core:23402]
-
- * test/ruby/test_m17n.rb (TestM17N#test_sprintf_p): test fixed
-
-Mon May 25 05:32:19 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi/core.rb (CGI::HTTP_STATUS): typo fixed. a patch from
- Nobuhiro IMAI. [ruby-dev:38538]
-
-Sun May 24 22:48:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_exec_recursive_paired): new function for proper
- handling of recursive arrays. [EXPERIMENTAL] [ruby-core:23402]
-
- * array.c (rb_ary_equal, rb_ary_eql, rb_ary_cmp): use above.
-
- * hash.c (hash_equal): ditto.
-
-Sun May 24 22:39:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (syserr_initialize): errno is int.
-
-Sun May 24 00:52:54 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * configure.in ($ridir): new configuration. [ruby-core:23520].
- c.f. [ruby-core:23519].
-
- (--with-ridir): new configure option.
-
- * tool/instruby.rb (:doc, :rdoc): uses $ridir instead of
- a fixed path.
-
- * lib/rdoc/ri/paths.rb: follows $ridir.
-
- * Makefile.in: removes RIDATADIR which is no longer used.
-
- * bcc32/Makefile.sub: generates the 'ridir' entry for RbConfig.
- removes RIDATADIR which is no longer used.
-
- * win32/Makefile.sub: ditto.
-
-Sat May 23 23:52:33 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_each_char): return original string.
- [ruby-core:23499]
-
- * string.c (rb_str_each_codepoint): protect string from
- modification.
-
-Sat May 23 21:48:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/handle.c (rb_dlhandle_s_sym): added a method to access
- using RTLD_NEXT. [ruby-dev:38152]
-
- * ext/dl/handle.c (Init_dlhandle): added constants DEFAULT and
- NEXT which correspond to RTLD_DEFAULT and RTLD_NEXT.
-
-Sat May 23 18:53:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/lib/dl/cparser.rb (DL::CParser#parse_struct_signature):
- splitting with regexp source string is obsolete. a patch from
- Minwoo Lee at [ruby-core:23494].
-
- * ext/dl/cptr.c (rb_dlptr_cmp): return signed value, and restrict
- to Fixnum. [ruby-dev:38533]
-
-Fri May 22 23:22:53 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * missing/vsnprintf.c (errno): [BUG] fixes a compilation
- error on SIZEOF_LONG > SIZEOF_INT.
- (BSD_vfprintf): ditto.
-
-Fri May 22 23:20:48 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * spec/default.mspec: follows runruby.rb's move at r23542.
-
-Fri May 22 21:38:55 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * NEWS: add Time#to_r.
-
-Fri May 22 20:29:01 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * config.guess: moved into tool/.
-
- * config.sub: ditto.
-
- * install-sh: ditto
-
- * configure.in: follows the moves.
-
- * LEGAL: ditto.
-
-Fri May 22 20:10:18 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * instruby.rb: moved into tool/.
-
- * mkconfig.rb: ditto.
-
- * rubytest.rb: ditto.
-
- * runruby.rb: ditto.
-
- * common.mk: follows the moves.
-
- * configure.in: ditto.
-
- * win32/Makefile.sub: ditto.
-
-Fri May 22 05:09:43 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_slice_bang): avoid call of rb_scan_args() unless
- it's really necessary.
-
-Thu May 21 22:17:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * template/id.h.tmpl, id.h (enum ruby_method_ids): added some IDs.
-
- * debug.c (dummy_gdb_enums): added enum ruby_method_ids.
-
- * .gdbinit (rp): improved output of Symbol.
-
-Thu May 21 21:07:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing/vsnprintf.c (BSD_vfprintf): support for 'z' modifier.
-
-Thu May 21 18:55:33 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * gem_prelude.rb (Gem.default_dir and misc.): use rubylibprefix.
- follows the change in r23368.
-
-Thu May 21 12:07:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (RB_EVENT_HOOKS_HAVE_CALLBACK_DATA):
- new macro for compatibility check.
-
-Thu May 21 01:43:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (rb_long2int, RARRAY_LENINT): check long to
- cast to int. [ruby-dev:38508]
-
- * struct.c, vm_eval.c, vm_insnhelper.c: use RARRAY_LENINT.
-
-Wed May 20 21:00:27 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * rb_enc_get_index: allows an arbitrary RData as the argument but not
- only what points a rb_encoding.
-
-Wed May 20 20:54:37 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * spec/.gitignore: ignores rubyspec/ and mspec/.
-
-Wed May 20 19:41:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * struct.c (rb_struct_new): get rid of too large alloca.
-
- * struct.c (rb_struct_hash): use long.
-
-Wed May 20 18:58:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c, vm_insnhelper.c: argument number is restricted to
- int, and fixed overflow.
-
-Wed May 20 18:34:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (zip_ary): should use long.
-
- * enumerator.c (inspect_enumerator): should use long.
-
-Wed May 20 09:18:44 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_count): optimized for 1byte string count by
- avoiding tr_setup_table().
-
-Wed May 20 06:25:29 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (rb_enc_fast_mbclen): faster mbclen for strings known
- to be valid.
-
- * string.c (enc_strlen): coderange specified version of
- rb_enc_strlen(). use rb_enc_fast_mbclen() if coderange is 7bit
- or valid.
-
- * string.c (str_gsub): use rb_enc_fast_mbclen().
-
- * string.c (rb_str_reverse, rb_str_split_m, rb_str_each_char,
- scan_once): ditto.
-
-Wed May 20 06:20:05 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile#unlink): close first for Windows. a
- patch from Florian Frank. [ruby-core:23505]
-
-Wed May 20 00:13:38 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (rb_enc_codepoint_len): combine rb_enc_codepoint()
- and rb_enc_codelen() in one function to reduce calls.
-
- * encoding.c (rb_enc_codepoint): compatibility function.
-
- * sprintf.c (rb_str_format): use rb_enc_codepoint_len().
-
- * string.c (rb_str_inspect, rb_str_upcase_bang,
- rb_str_downcase_bang, rb_str_capitalize_bang,
- rb_str_swapcase_bang, trnext, tr_trans, rb_str_delete_bang,
- rb_str_squeeze_bang, rb_str_count, rb_str_split_m,
- rb_str_each_line, rb_str_each_codepoint, rb_str_lstrip_bang,
- sym_printable): ditto.
-
- * transcode.c (make_econv_exception): use rb_enc_mbc_to_codepoint()
-
-Wed May 20 00:05:52 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_method.c (rb_attr): should preserve encoding info.
- [ruby-dev:38498]
-
-Tue May 19 22:54:35 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * time.c (time_minus): always return a Float. [ruby-dev:38446]
-
- * time.c (time_to_r): new method. [ruby-dev:38461]
-
-Tue May 19 13:59:35 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (clone_method): add cast to remove warning from
- rb_gc_write_barrier().
-
-Tue May 19 13:54:15 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (struct_ivar_get): new function to avoid repeated
- rb_intern() calls.
-
- * struct.c (rb_struct_iv_get): use struct_ivar_get()
-
- * struct.c (num_members): ditto.
-
- * struct.c (rb_struct_s_members): ditto.
-
- * class.c (rb_singleton_class): cache symbol to reduce calls to
- rb_intern().
-
-Tue May 19 07:52:05 2009 Tanaka Akira <akr@fsij.org>
-
- * test/test_time.rb: make tests timezone independent.
- reported by zunda. [ruby-dev:38492]
-
-Mon May 18 21:40:11 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/pathname.rb (Pathname#sub): suppress a warning. [ruby-dev:38488]
-
-Sun May 17 23:23:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (SRC_EXT): should be flat.
- http://twitter.com/_tad_/status/1825862632
-
-Sun May 17 23:05:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_init_loadpath_safe): VARIABLE_LIBPATH is always
- defined, see its value instead.
-
-Sun May 17 18:59:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * node.h (nd_line): NODE_LMASK is not needed.
-
- * node.h (NOEX_SAFE): made int.
-
-Sun May 17 14:23:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (rb_parse_in_eval): returns true in true eval, not in
- main. [ruby-dev:38382]
-
- * parse.y (program): inherits dvars in eval or main.
-
-Sun May 17 14:02:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_script): sets also VM toplevel program name.
-
- * ruby.c (process_options): no longer needs additional frame.
-
- * vm.c (rb_vm_get_sourceline): should not access out of bound.
-
-Sun May 17 09:47:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (cmdline_options_init): initialize encodings.
-
- * ruby.c (add_modules, require_libraries, process_sflag):
-
- * ruby.c (process_sflag): not process twice.
-
- * ruby.c (moreswitches): get rid of possible overflow.
-
-Sun May 17 09:31:05 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (foletypelib_name): should return
- encoded name corresponding to WIN32OLE.codepage.
-
-Sun May 17 09:02:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_init_loadpath_safe): support for cygwin 1.7. see
- [ruby-core:23241].
- gets rid of possible buffer overflow with realpath().
-
- * ruby.c (set_arg0): get rids of overrun.
-
-Sat May 16 18:38:32 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/parser.rb: add nil check.
-
-Sat May 16 18:36:01 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rss/test_maker_atom_feed.rb: suppress warnings.
-
-Sat May 16 18:33:15 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * NEWS: add RSS::Maker.supported?(version).
-
-Sat May 16 18:26:42 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/parser.rb, test/test_parser_1.0.rb: fix foaf:Image
- element causes parse error even if ignore_unknown_element mode.
-
-Sat May 16 18:14:19 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker.rb, lib/rss/maker/0.9.rb,
- test/test_maker_*.rb: add RSS::Maker.supported?
-
-Sat May 16 18:12:39 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/content/*, lib/rss/dublincore/*: fix circular require.
- * test/test_maker_atom_feed.rb,
- test/test_maker_atom_entry.rb: suppress warnings.
-
-Sat May 16 18:07:17 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/feed.rb, test/test_maker_atom_feed.rb:
- remove needless codes.
-
-Sat May 16 18:05:07 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/entry.rb: fix a typo.
-
-Sat May 16 18:02:57 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/feed.rb, test/test_maker_atom_entry.rb,
- test/test_maker_atom_feed.rb: fix duplicated dc:date.
- Reported by Kazuhiro NISHIYAMA. Thanks!!! [ruby-list:46014]
-
-Sat May 16 18:02:16 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/base.rb, lib/rss/maker/1.0.rb, lib/rss/maker/feed.rb,
- test/rss/test_maker_1.0.rb, test/rss/test_maker_atom_feed.rb:
- RSS 1.0 and Atom feed maker treat maker.channel.language as
- maker.channel.dc_language.
-
-Sat May 16 17:57:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/lib/dl/callback.rb (DL#remove_callback_internal): ignore
- unbound function. [ruby-dev:38474]
-
-Sat May 16 17:51:11 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * sample/rss/rss_recent.rb, sample/rss/list_description.rb: use
- UTF-8.
-
-Sat May 16 17:47:55 2009 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb, test/rss/test_version.rb (RSS::VERSION):
- 0.2.5 -> 0.2.6.
-
-Sat May 16 17:26:04 2009 Narihiro Nakamura <authorNari@gmail.com>
-
- * iseq.c (rb_iseq_clone): use longlife object and insert write barrier.
-
- * vm_insnhelper.c (vm_cref_push): ditto.
-
- * vm_insnhelper.h (COPY_CREF): insert write barrier.
-
-Sat May 16 13:49:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_autoload_load): gets rid of false warning.
- [ruby-core:23466]
-
-Sat May 16 10:59:54 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sample/drb/dhasenc.rb: add magic comment for encoding.
-
- * sample/mine.rb: ditto.
-
- * ext/tk/sample/tcltklib/sample1.rb: ditto.
-
-Sat May 16 09:49:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (magic_comment_encoding): ignores unused emacs-style
- encoding comment, as like Vim styles. [ruby-core:23470]
-
-Sat May 16 09:30:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * defs/keywords (reserved_word): made inline function static.
- [ruby-core:23210]
-
- * parse.y (rb_reserved_word): ordinary function for ripper.
-
-Sat May 16 09:19:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (magic_comment_encoding): use rb_compile_warning() to
- show the currently parsing file name. [ruby-core:23469]
-
-Sat May 16 09:03:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ruby_version): now version.h includes
- include/ruby/version.h, so need to tell to cpp to see
- $(srcdir)/include. [ruby-core:23468]
-
-Fri May 15 17:35:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_shift, rb_ary_shift_m): clears unused elements.
- [ruby-dev:38448]
-
-Fri May 15 15:15:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_autoload_load): checks if iv_tbl is valid.
- [ruby-dev:38456]
-
-Fri May 15 11:17:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/setup.mak (-version-): now version.h includes
- include/ruby/version.h, so need to tell to cpp to check
- $(srcdir)/include.
- reported by KIMURA Koichi at http://www.kt.rim.or.jp/%7ekbk/zakkicho/09/zakkicho0905b.html#D20090514-6
-
-Thu May 14 16:13:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/etc/etc.c (etc_getpwuid): use rb_uid_t. [ruby-dev:38443]
-
- * ext/stringio/stringio.c (strio_ungetbyte): encoding should no
- be effective.
-
-Thu May 14 10:17:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sample/test.rb (valid_syntax?): defaults to us-ascii.
-
-Wed May 13 22:34:31 2009 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c: add longlife garbage collection. [ruby-dev:38423]
- (NORMAL_HEAPS_USED): new macro.
- (LONGLIFE_ALLOCATE_HEAPS_MIN): ditto.
- (add_longlife_heaps_slot): new function.
- (rb_newobj_from_longlife_heap): ditto.
- (rb_newobj_longlife): ditto.
- (rb_node_newnode_longlife): ditto.
- (rb_gc_write_barrier): ditto.
- (remembered_set_recycle): ditto.
- (rb_gc_mark_remembered_set): ditto.
- (clear_mark_longlife_heaps): ditto.
- (gc_sweep_for_longlife): ditto.
- (assign_heap_slot): new argument to longlife heaps slot.
- (add_freelist): ditto.
- (gc_sweep): avoid longlife heap slot. set longlife_collection
- flag at add heap.
- (rb_gc_force_recycle): avoid mark object and remembered_set
- object.
- (garbage_collect): add longlife collection.
- (rb_gc_start): invoke longlife collection.
- (gc_profile_record_get): for longlife collection profile.
- (gc_profile_result): ditto.
-
- * include/ruby/intern.h (rb_gc_write_barrier): declared.
-
- * include/ruby/ruby.h (FL_REMEMBERED_SET): renamed from FL_RESERVED.
-
- * debug.c (FL_REMEMBERED_SET): ditto.
-
- * insns.def (setinlinecache): insert write barrier.
-
- * vm_insnhelper.c (vm_method_search): ditto.
-
- * set_relation (set_relation): use longlife object.
-
- * vm.c (vm_define_method): ditto.
-
- * vm_core.h (NEW_INLINE_CACHE_ENTRY): ditto.
-
- * vm_method.c (rb_add_method): ditto.
-
- * class.c (rb_add_method): ditto.
-
- * node.h (NEW_NODE_LONGLIFE): new macro.
- (rb_node_newnode_longlife): declared.
-
-Wed May 13 15:23:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/version.h: extracted the extensions interface and
- the never-changeable info.
-
-Wed May 13 03:20:47 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_init_1): unused variable removed.
-
-Tue May 12 21:03:02 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c: support fixed UTC offset. [ruby-dev:38326]
- (leap_year_v_p): new macro.
- (TIME_FIXOFF_P): new macro.
- (TIME_SET_FIXOFF): new macro.
- (time_init_0): renamed from time_init.
- (time_set_utc_offset): new function.
- (vtm_add_offset): new function.
- (utc_offset_arg): new function.
- (time_init_1): new function.
- (time_init): call time_init_0 or time_init_1 according argc.
- (validate_utc_offset): new function.
- (time_localtime_m): new function.
- (time_fixoff): new function.
- (time_getlocaltime): take optional UTC offset argument.
- (time_get_tm): support fixed UTC offset time.
- (Init_Time): make Time#{initialize,localtime,getlocal} varargs.
-
- * strftime.c (rb_strftime): vtm->zone can be NULL now.
-
-Tue May 12 18:23:40 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * yarvtest: removed because it's outdated.
-
-Mon May 11 21:46:20 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: add semicolons to some grammar rules not terminated
- with them. a patch from Dave B in [ruby-core:23422].
-
-Mon May 11 20:08:33 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * io.c (Init_IO): add constant File::NOATIME. [ruby-core:23194]
-
-Mon May 11 13:08:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb (rubylibdir): use rubylibprefix. [ruby-dev:38426]
-
-Mon May 11 08:37:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_coerce): support
- coercing into Rational. [ruby-core:23415]
-
-Mon May 11 04:39:45 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/smtp.rb (Net::SMTP#check_auth_args): should not change
- number of methods for the sake of compatibility.
-
-Sun May 10 11:36:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/cfunc.c (rb_dlcfunc_instance_p): new function to check if
- the argument is an instance of DL::CFunc.
-
- * ext/dl/cptr.c (rb_dlptr_initialize, rb_dlptr_s_malloc): checks
- if DL::CFunc. [ruby-dev:38403].
-
- * ext/dl/lib/dl/cparser.rb (DL::CParser#parse_signature): strips
- spaces. based on a patch from Takashi Tamura in [ruby-dev:38398].
-
- * ext/dl/lib/dl/value.rb (DL::ValueUtil#wrap_arg): block must be
- given if arg is not bound. [ruby-dev:38404]
-
- * ext/dl/cfunc.c (rb_dlcfunc_instance_p): new function to check if
- the argument is an instance of DL::CFunc.
-
-Sat May 9 19:57:00 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_float.rb (TestFloat#test_sleep_with_Float): add a
- test. see [ruby-core:23282]
-
-Sat May 9 19:23:46 2009 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: use subsec instead of nsec.
-
-Sat May 9 12:19:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c: 3rd argument of rb_hash_foreach() is VALUE.
-
- * hash.c (rb_any_hash, recursive_hash): use VALUE for hash.
-
-Sat May 9 11:14:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (rb_f_catch): gets rid of issue with gcc 4.4. a patch
- from Alexey Froloff in [ruby-core:23398]. [ruby-core:22924]
-
-Fri May 8 19:38:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (try_link0): removes waste dSYM directories left
- when debug and universal-binary are enabled.
-
- * lib/mkmf.rb (check_sizeof): fixed wrong recurring result for
- intrinsic types.
-
-Fri May 8 10:14:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, configure.in, win32/Makefile.sub (RUBY_BASE_NAME):
- program base name. [ruby-dev:38241]
-
- * configure.in (--with-soname): base name of shared library.
- [ruby-dev:38290]
-
-Fri May 8 10:07:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_flatten_bang): clears temporary array.
-
-Fri May 8 02:30:14 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (SortedSet#add): Do not require each newly added
- element to be Comparable but to respond to <=>. [ruby-dev:38371]
-
-Thu May 7 21:42:51 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_rubyoptions.rb (test_indentation_check): add a test
- for indentation check. [ruby-dev:38382]
-
-Thu May 7 16:40:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_flatten_bang): returns nil if nothing changed.
- a patch from Marc-Andre Lafortune in [ruby-core:23382].
-
-Thu May 7 14:26:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_sample): negative sample number is invalid.
- [ruby-core:23374]
-
-Thu May 7 14:16:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c, include/ruby/encoding.h: fixed types.
-
- * include/ruby/encoding.h (rb_enc_nth): long is used for index.
-
-Thu May 7 14:01:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * range.c (r_le): fixed types.
-
- * range.c (range_eql): fixed rdoc.
-
-Thu May 7 13:10:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (pipe_open): should be rb_pid_t.
-
-Wed May 6 16:50:20 2009 Tanaka Akira <akr@fsij.org>
-
- * math.c (math_gamma): use a table for positive small integers.
-
-Wed May 6 09:27:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * README.ja: code for THINK_C does not exist already. [Bug #1435]
-
-Wed May 6 05:33:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (CFLAGS, CXXFLAGS): strips extra spaces.
-
-Tue May 5 11:29:07 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/ifchange: Fix: arguments which begin with minus sign may
- parsed as options. Because of older systems, don't use --
- but use parentheses.
-
-Tue May 5 10:42:28 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json: Update to JSON 1.1.4.
-
-Tue May 5 07:22:37 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c: NOMAP is now multibyte direct map.
-
- * transcode.c: remove ASIS.
-
- * transcode_data.h: ditto.
-
- * tool/transcode-tb (ActionMap#generate_info): remove :asis.
-
- * tool/transcode-tb (ActionMap#generate_info): add :nomap0.
-
- * enc/trans/utf8_mac.trans: replace :asis by :nomap0.
-
-Sat May 2 22:53:02 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (SortedSet): Fix document. [Bug #1429]
-
-Sat May 2 10:34:29 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/utf8_mac-tbl.rb: don't use Unicode escape.
-
- * enc/trans/utf8_mac.trans: follow above.
-
-Sat May 2 09:19:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (Init_Array): made #to_s an alias to #inspect to reduce
- the result of recursive array. a patch from ujihisa at
- [ruby-dev:38362]
-
-Fri May 1 16:50:05 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (Set#merge): Only directly use the passed objects
- @hash instance variable when self and the passed object are
- instances of the same class. [Bug #118]
-
-Fri May 1 16:44:11 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (SortedSet#add): Do not let an incomparable object
- in. [Bug #118]
-
-Fri May 1 13:18:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_intern.h (_longjmp): never return. see [ruby-core:23241]
-
-Fri May 1 01:31:19 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/extmk.rb: use RbConfig instead of Config.
-
- * instruby.rb: ditto.
-
- * lib/rubygems.rb: ditto.
-
- * test/rubygems/test_config.rb: ditto.
-
-Thu Apr 30 21:23:30 2009 Tanaka Akira <akr@fsij.org>
-
- * runruby.rb: use RbConfig::CONFIG instead of Config::CONFIG.
-
- * spec/default.mspec: ditto.
-
- * yarvtest/yarvtest.rb: ditto.
-
- * instruby.rb: ditto.
-
- * benchmark/report.rb: ditto.
-
- * benchmark/runc.rb: ditto.
-
- * tool/eval.rb: ditto.
-
- * test/rubygems/test_gem.rb: ditto.
-
- * test/rubygems/test_config.rb: ditto.
-
- * test/rubygems/test_gem_platform.rb: ditto.
-
-Thu Apr 30 18:18:13 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/http.rb: documentation typo fixed. [ruby-core:23335]
-
-Thu Apr 30 15:27:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/trans/utf8_mac.trans: get rid of a 1.9 feature for cross
- compile.
-
-Thu Apr 30 11:35:30 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_filesystem_encoding): Change filesystem_encoding of
- Mac OS X to UTF-8.
-
-Wed Apr 29 21:23:40 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/iso_2022_jp.h: add CP50221.
-
- * enc/trans/iso2022.trans: add converter for CP50221.
-
-Wed Apr 29 15:22:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_join): recursive array has no meaning as path
- name. [ruby-core:23329]
-
-Tue Apr 28 19:09:45 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/test_timeout.rb (TestTimeout#test_timeout): add a test.
-
-Tue Apr 28 07:13:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/pp.rb (Struct#pretty_print): coerce to a string since
- anonymous class has name no longer. [ruby-dev:38349]
-
-Mon Apr 27 16:47:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ruby_version): uses sed instead of grep if the
- result is need, to get rid of GREP_OPTIONS. [ruby-dev:38336]
-
-Mon Apr 27 01:25:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/readline/readline.c (readline_getc): use rl_getc_function if
- possible, to get rid of hang up at EOF without a newline.
-
-Sun Apr 26 23:19:32 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/utf8_mac.trans: Add converter for UTF8-MAC.
-
- * enc/trans/utf8_mac-tbl.rb: ditto.
-
- * test/ruby/test_econv.rb: tests for above.
-
-Sun Apr 26 22:17:02 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/transcode-tb (ActionMap#each_firstbyte):
- if :asis collides other mappings, use another.
-
- * tool/transcode-tb (ActionMap#generate_info):
- add :asis for ASIS.
-
-Sun Apr 26 21:59:43 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (ASIS): added for multi byte direct map.
-
- * transcode.c (transcode_restartable0): ditto.
-
-Sun Apr 26 20:33:12 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/transcode-tb (ActionMap#generate_node):
- Use ActionMap#gennode instead of generate_node
- because of initialization.
-
-Sun Apr 26 20:21:39 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * .gitignore: added.
-
-Sun Apr 26 20:17:24 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/rake.rb: use RbConfig::CONFIG instead of Config::CONFIG.
-
- * lib/rbconfig/datadir.rb: ditto.
-
-Sun Apr 26 19:30:29 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_arg): unused variable removed.
-
-Sun Apr 26 18:35:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_reopen): keeps pathv for prep_stdio. [ruby-dev:38131]
-
-Sun Apr 26 15:13:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#parse_in_order): do not make an
- option from non-option argument. [ruby-dev:38333]
-
-Sat Apr 25 19:11:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ac_cv_func_daemon): use daemon(3) only on *BSD.
-
- * process.c (proc_daemon): double fork to ensure not having ctty.
- [ruby-core:23305]
-
-Sat Apr 25 16:19:48 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (month_arg): extracted from time_arg.
- (validate_vtm): ditto.
-
-Sat Apr 25 16:03:21 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (TIME_COPY_GMT): new macro.
- (time_s_at): use TIME_COPY_GMT.
- (time_succ): ditto.
-
-Sat Apr 25 15:54:04 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_mload): use TIME_SET_UTC.
-
-Sat Apr 25 15:47:54 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_get_tm): take time_object instead of gmt.
-
-Sat Apr 25 15:39:44 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_succ): refactored to avoid gmt variable.
- (strftimev): use TIME_UTC_P.
- (time_strftime): ditto.
-
-Sat Apr 25 15:21:33 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (TIME_UTC_P): new macro.
- (TIME_SET_UTC): ditto.
- (TIME_LOCALTIME_P): ditto.
- (TIME_SET_LOCALTIME): ditto.
- (time_utc_p): use the above macro.
- (time_localtime): ditto.
- (time_localtime): ditto.
- (time_gmtime): ditto.
- (time_to_s): ditto.
- (time_add): ditto.
- (time_sec): ditto.
- (time_min): ditto.
- (time_hour): ditto.
- (time_mday): ditto.
- (time_mon): ditto.
- (time_year): ditto.
- (time_wday): ditto.
- (wday_p): ditto.
- (time_yday): ditto.
- (time_isdst): ditto.
- (time_zone): ditto.
- (time_utc_offset): ditto.
- (time_to_a): ditto.
- (strftimev): ditto.
- (time_strftime): ditto.
- (time_mdump): ditto.
-
-Thu Apr 23 01:30:37 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/zlib/zlib.c (Zlib::GzipFile#path): New method.
-
-Wed Apr 22 20:25:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (time_timespec): check out-of-range. [ruby-core:23282]
- [Bug #1396]
-
-Wed Apr 22 19:33:13 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/time.rb (Time.parse): use year completion in Date._parse.
-
-Wed Apr 22 11:12:15 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * time.c (GMTIME, LOCALTIME): should set result if not have *_r().
-
- * time.c (localtime_with_gmtoff): now always needed tmbuf.
-
-Wed Apr 22 10:38:47 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * dir.c (glob_helper): C99(gcc)-ism.
-
- * time.c (find_time_t): GUESS macro needs the variable named ``result''
- always.
-
-Wed Apr 22 09:27:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (localtime_with_gmtoff): fixed cross function jump.
-
-Wed Apr 22 03:06:56 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/time.rb (Time#rfc2822): pad leading zeros for year.
- (Time#httpdate): ditto.
- (Time#xmlschema): ditto.
-
-Wed Apr 22 02:10:48 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/time.rb (Time#xmlschema): use subsec instead of nsec.
-
-Wed Apr 22 01:27:38 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_arg): use the year argument as-is. [ruby-dev:38194]
-
- * lib/time.rb (Time.parse): interpret small year 0..99 as 1950..2049.
-
-Wed Apr 22 00:32:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (find_time_t): constified.
-
-Wed Apr 22 00:11:19 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (leap_year_v_p): removed.
-
-Tue Apr 21 23:52:45 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c: remove time_t restriction from Time class.
-
- * timev.h: new file to define struct vtm.
-
- * strftime.c: format struct vtm instead of struct tm.
-
- * ext/syck/rubyext.c (mktime_do): don't use time_t;
-
- [ruby-dev:38191]
-
-Tue Apr 21 09:25:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (dir_path, dir_each, glob_helper): use readdir_r() if
- available.
-
-Tue Apr 21 09:20:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (init_mkmf): needs default library path even if
- cross compiling.
-
-Tue Apr 21 07:07:45 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_push): bypass rb_ary_store().
-
-Tue Apr 21 01:25:16 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigsub_int): subtraction without making internal
- bignum values.
-
- * bignum.c (bigadd_int): ditto for addition.
-
- * bignum.c (bigtrunc): declare inline.
-
- * bignum.c (rb_quad_pack): fix condition.
-
-Tue Apr 21 01:13:42 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/setup (config.h): added TIMET2NUM and NUM2TIMET to match
- the change in time.c
-
-Mon Apr 20 20:29:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_split_m): faster processing on 7bit strings.
-
- * string.c (ascii_isspace): faster isspace() for 7bit strings.
-
-Sun Apr 19 14:43:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_cleanup): the order of local variables on stack is
- undefined. should use outermost VALUE for ruby_init_stack.
-
- * gc.c (ruby_get_stack_grow_direction, Init_stack): allows volatile
- pointer.
-
- * thread_*.c (ruby_init_stack): ditto.
-
-Sun Apr 19 13:17:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gem_prelude.rb (Gem::QuickLoader#push_gem_version_on_load_path):
- check for requirement if the gem is installed. a patch from
- Kyosuke MOROHASHI at [ruby-dev:38020].
-
-Sun Apr 19 01:39:17 2009 Tanaka Akira <akr@fsij.org>
-
- * process.c (proc_seteuid_m): defined to use rb_f_notimplement if not
- implemented.
- (proc_setegid_m): ditto.
-
-Sun Apr 19 01:03:56 2009 Tanaka Akira <akr@fsij.org>
-
- * process.c (proc_setuid): use rb_f_notimplement if not implemented.
- (proc_setgid): ditto.
-
-Sat Apr 18 23:07:18 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/readline/readline.c: use rb_f_notimplement for methods not
- implemented.
-
- * ext/openssl/ossl_engine.c: ditto.
-
- * ext/openssl/ossl_config.c: ditto.
-
- * ext/openssl/ossl_cipher.c: ditto.
-
- * ext/openssl/ossl_pkcs5.c: ditto.
-
- * ext/openssl/ossl_x509ext.c: ditto.
-
- * ext/socket/socket.c: ditto.
-
- * ext/socket/basicsocket.c: ditto.
-
- * ext/socket/ancdata.c: ditto.
-
- * ext/socket/unixsocket.c: ditto.
-
- * ext/iconv/iconv.c: ditto.
-
-Sat Apr 18 21:07:34 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/curses/curses.c: use rb_f_notimplement for methods not
- implemented.
-
-Fri Apr 17 01:51:17 2009 Tanaka Akira <akr@fsij.org>
-
- * node.h (rb_notimplement_body_p): declared.
-
- * vm_method.c (Init_eval_method): suppress a warning.
-
- * io.c (rb_io_fsync): use rb_f_notimplement if not implemented.
- (rb_io_close_on_exec_p): ditto.
- (rb_io_set_close_on_exec): ditto.
- (rb_io_fcntl): ditto.
- (rb_f_syscall): ditto.
-
- * dir.c (dir_tell): ditto.
- (dir_seek): ditto.
- (dir_s_chroot): ditto.
-
- * process.c (proc_getpgrp): ditto.
- (proc_setpgrp): ditto.
- (proc_getpgid): ditto.
- (proc_setpgid): ditto.
- (proc_setsid): ditto.
- (proc_getpriority): ditto.
- (proc_setpriority): ditto.
- (proc_getrlimit): ditto.
- (proc_setrlimit): ditto.
- (p_sys_setuid): ditto.
- (p_sys_setruid): ditto.
- (p_sys_seteuid): ditto.
- (p_sys_setreuid): ditto.
- (p_sys_setresuid): ditto.
- (p_sys_setgid): ditto.
- (p_sys_setrgid): ditto.
- (p_sys_setegid): ditto.
- (p_sys_setregid): ditto.
- (p_sys_setreuid): ditto.
- (p_sys_setresgid): ditto.
- (p_sys_issetugid): ditto.
- (proc_getgroups): ditto.
- (proc_setgroups): ditto.
- (proc_initgroups): ditto.
- (proc_daemon): ditto.
- (rb_proc_times): ditto.
-
- * file.c (rb_file_s_lchown): ditto.
- (rb_file_s_link): ditto.
- (rb_file_s_symlink): ditto.
- (rb_file_s_readlink): ditto.
- (rb_file_s_truncate): ditto.
- (rb_file_truncate): ditto.
-
-Fri Apr 17 00:53:47 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/cgi/core.rb (read_multipart): When path is not defined,
- define local_path as a method always returning nil instead of
- aliasing. This is because StringIO#path no longer exists.
-
-Fri Apr 17 00:45:09 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * dir.c (bracket): fix escape handling for range character in bracket
- of fnmatch pattern. e.g., '[a\-c]' should not match 'b'.
-
-Thu Apr 16 23:09:03 2009 Tanaka Akira <akr@fsij.org>
-
- * class.c (rb_define_method_id): use rb_define_notimplement_method_id
- if rb_f_notimplement is given.
- (rb_define_protected_method): ditto.
- (rb_define_private_method): ditto.
- (rb_define_method): use rb_define_method_id.
-
- * include/ruby/intern.h (rb_f_notimplement): declared.
- (rb_define_notimplement_method_id): declared.
-
- * proc.c (method_inspect): show not-implemented.
-
- * vm_method.c (notimplement_body): new variable.
- (rb_notimplement_body_p): new function.
- (rb_method_boundp): return false if not implemented.
- (rb_f_notimplement): new function.
- (rb_define_notimplement_method_id): new function.
-
- * process.c (rb_f_fork): use rb_f_notimplement if not implemented.
-
- * file.c (rb_file_s_lchmod): use rb_f_notimplement if not implemented.
-
-Wed Apr 15 20:24:49 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * array.c (rb_ary_flatten): flatten(0) works as Array#dup.
- [ruby-core:23168]
-
- * test/ruby/test_array.rb: add a test for above.
-
-Wed Apr 15 11:53:35 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * dir.c (fnmatch_helper): use rb_enc_precise_mbclen and
- fail if bytes are invalid. [ruby-dev:38307]
-
-Tue Apr 14 18:11:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (bracket): if same in bytes, path is matching.
- [ruby-dev:38305]
-
-Mon Apr 13 17:21:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): scan coderange incrementally.
-
-Mon Apr 13 11:35:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * sprintf.c (rb_str_format): optimize previous commit.
- [ruby-list:45954]
-
-Mon Apr 13 10:58:54 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * sprintf.c (rb_str_format): check encoding compatibility only on
- real parts.
-
-Sun Apr 12 19:54:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (bracket, fnmatch_helper): compare bytewise first, to get
- rid of invalid byte sequence. [ruby-dev:38303]
-
-Sat Apr 11 08:45:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (Makefile): phony ruby target needs empty command.
-
-Fri Apr 10 11:32:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (up): updates timestamp file.
-
-Fri Apr 10 04:54:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (Makefile): info-program needs common.mk.
-
-Fri Apr 10 03:46:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_INSTALL_NAME): use --program-transform-name.
-
- * instruby.rb, mkconfig.rb: deal with --program-transform-name
- better. now supports s, y commands and single addressing.
-
-Thu Apr 9 23:59:11 2009 Tanaka Akira <akr@fsij.org>
-
- * configure.in: don't override the rule for ruby.
-
-Wed Apr 8 21:58:12 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * string.c (rb_str_dump): buffer length plus one byte for null
- terminator. [ruby-dev:38294]
-
- * test/ruby/test_m17n.rb (test_str_dump): add a test for above.
-
-Wed Apr 8 20:08:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_rstrip_bang): should not sign-expand non-ascii.
- [ruby-core:23158]
-
-Wed Apr 8 17:29:29 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_chop_bang): reset coderange. [ruby-core:23155]
-
-Wed Apr 8 14:00:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (what_type?): fixed typo, and refined for member of
- aggregation types.
-
- * lib/mkmf.rb (Logging.postpone): copy postponed output always.
-
-Wed Apr 8 09:45:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LIBRUBY_SO): removed redundant additional version
- numbers.
-
-Tue Apr 7 13:35:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (info): shows configured names.
-
- * configure.in (Makefile): works even if RUBY_INSTALL_NAME
- contains macro.
-
- * configure.in (LIBRUBY_DLDFLAGS): compatibility version is
- ruby_version.
-
- * configure.in (RUBY_REPLACE_TYPE): defines type modifier prefix
- for printf.
-
-Tue Apr 7 02:27:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_DEFINT): should pass includes to
- AC_CHECK_SIZEOF and RUBY_CHECK_SIZEOF.
-
- * configure.in (CFLAGS, CXXFLAGS): need ARCH_FLAG for universal
- binary.
-
-Tue Apr 7 01:08:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_to_s): reduce fragments if no precision lost.
- c.f. [ruby-core:23075]
-
-Mon Apr 6 23:16:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (CFLAGS, CXXFLAGS): override with $cflags and
- $cxxflags if not given. [ruby-core:23130]
-
-Mon Apr 6 19:26:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (utime_failed): refined the error message for EINVAL on
- DOSISH platforms, where it may fail depending on filesystems.
- see [ruby-dev:38277].
-
-Mon Apr 6 16:38:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (sys_fail2, rb_file_s_readlink, BUFCHECK, rmext),
- (rb_file_s_basename): get rid of overflow.
-
-Mon Apr 6 15:11:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (int_chr): checks overflow.
-
-Mon Apr 6 10:49:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/stringio/test_stringio.rb (test_path): StringIO#path is no
- longer defined. [ruby-dev:38254]
-
-Mon Apr 6 10:47:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_path): removed. [ruby-dev:38254]
-
-Sun Apr 5 18:02:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_fd_resize): does nothing on Win32.
-
-Sat Apr 4 17:05:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (RB_NUM_COERCE_FUNCS_NEED_OPID): macro to
- check compatibility. [ruby-dev:38162]
-
-Sat Apr 4 07:38:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb (sitearch): default to arch.
-
-Fri Apr 3 14:02:42 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/irb/completion.rb (IRB::InputCompletor::Operators): Add
- overloadable negative operators.
-
- * lib/irb/ruby-lex.rb (RubyLex#lex_init): Support overloadable
- negative operators.
-
- * lib/irb/ruby-lex.rb (RubyLex#identify_identifier): Minus signs
- need to be escaped in regexp character class.
-
- * misc/ruby-mode.el (ruby-font-lock-keywords, ruby-parse-partial):
- Support overloadable negative operators.
-
-Fri Apr 3 12:45:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: quotes arguments with spaces always.
-
-Thu Apr 2 14:50:06 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/getoptlong.rb: remove unused rdoc/usage from example.
- [ruby-core:23098]
-
-Thu Apr 2 07:42:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): updated.
-
-Wed Apr 1 20:37:49 2009 Tanaka Akira <akr@fsij.org>
-
- * configure.in (rb_cv_fork_with_pthread): fail if the child process
- fail.
-
-Wed Apr 1 19:46:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): support for parallel make. a
- patch from Takuto Matsuu at [ruby-dev:38220].
-
-Wed Apr 1 19:39:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LIBRUBY_LDSHARED): use $(CC) instead of cc.
- a patch from Wataru Kimura at [ruby-dev:38225].
-
-Wed Apr 1 18:53:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_dump.c (rb_vm_bugreport): should not #include inside a
- function, since headers may have declarations.
- c.f. [ruby-core:23095]
-
-Wed Apr 1 18:44:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb: ignores version numbers in config.status. replaces
- all $$s in program_transform_name.
-
-Wed Apr 1 15:12:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (.c.i): use CPP instead of CC, since gcc -E can'
- work with multiple -arch options.
-
-Wed Apr 1 13:46:20 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (rb_thread_fd_select): new function to call select
- using rb_fdset_t.
-
- * io.c (select_internal): use rb_thread_fd_select instead of
- rb_thread_select. based on the patch from Kengo Matsuyama.
- [ruby-dev:38221]
-
-Wed Apr 1 13:16:19 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (rb_f_sleep): RDoc disambiguation. [ruby-talk:332632]
-
-Tue Mar 31 15:17:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: fixed the help strings for the header and library
- dir switches, and updated to use AS_HELP_STRING. patches from
- Richard Brown, c.f. [ruby-core:23067].
-
-Mon Mar 31 08:18:57 2009 James Edward Gray II <jeg2@ruby-lang.org>
-
- * test/csv/test_interface.rb, test/csv/test_serialization.rb:
- Trying more fixes some failing tests on Windows.
-
-Mon Mar 30 19:04:25 2009 Tanaka Akira <akr@fsij.org>
-
- * .gdbinit (rp): show negative fixnum correctly.
-
-Mon Mar 30 12:12:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (eval_string_with_cref): replaces the message if
- frozen. [ruby-dev:38208]
-
-Mon Mar 30 01:00:20 2009 James Edward Gray II <jeg2@ruby-lang.org>
-
- * test/csv/test_interface.rb: Trying a fix for some failing tests
- on Windows.
-
-Sun Mar 29 08:59:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/pathname.rb (Pathname#relative_path_from): compares path
- components according to system default case-sensitiveness.
- [ruby-core:22829]
-
-Sat Mar 28 11:10:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (ruby.imp): all symbols in static library need to be
- exported, so that encoding-extensions can be loaded. based on a
- patch from Yutaka Kanemoto <kinpoco AT gmail.com> in
- [ruby-talk:332282].
-
-Sat Mar 28 08:49:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): checks if named argument given twice.
-
- * sprintf.c (GETNAMEARG): remembers named arg is used, to get rid
- of too many arguments warning.
-
-Sat Mar 28 03:16:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (link_command, cc_command, cpp_command): should no
- override extout defined in extmk.rb.
-
-Fri Mar 27 12:56:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (what_type?): checks more restrictively, and
- supports universal binary.
-
-Fri Mar 27 01:33:37 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_cmp): negate the result of reverse comparison.
-
-Fri Mar 27 01:19:50 2009 Tanaka Akira <akr@fsij.org>
-
- * bignum.c (rb_cmpint): FIX2INT may fail on LP64 platforms.
-
-Thu Mar 26 12:22:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/yaml/rubytypes.rb (String#is_binary_data?): TAB would be
- usually considered to be included in text data.
-
- * lib/rdoc/parser.rb (RDoc::Parser.binary?): blksize may be nil
- and is irrelevant to whether a file is binary. copied from
- above since TAB and newlines would be usually considered to be
- included in text data.
-
-Thu Mar 26 11:33:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/ri/paths.rb (RDoc::RI::Paths): considers
- --program-prefix and --program-suffix. reapplied r19923.
-
-Wed Mar 25 07:45:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (target_alias): replaces cpu with universal too.
-
- * configure.in (target): replaces cpu with arch by --with-arch.
-
- * mkconfig.rb (TOPDIR): chops arch in config instead of
- RUBY_PLATFORM which varies on universal_binary.
-
- * mkconfig.rb (MAJOR, MINOR, TEENY): reads from version.h always.
-
-Tue Mar 24 19:23:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_CHECK_SIZEOF): need to include $4.
-
-Tue Mar 24 17:08:52 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * io.c (rb_io_inspect): Cannot access fptr->fd if fptr is NULL.
- This fixes a coredump caused by: ruby -e "class X < IO; def
- initialize; end; end; p X.new.inspect"
-
-Mon Mar 23 22:01:00 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_timespec): use NUM2TIMET.
- (time_s_at): ditto.
-
-Mon Mar 23 21:52:26 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * process.c (Init_process): Better patch for eliminating an
- "unused variable".
-
-Mon Mar 23 21:41:14 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/dbm/dbm.c (fdbm_initialize): Make the file variable
- volatile, because FilePathValue() currently does not protect the
- given variable from GC. (Probably it should)
-
- * ext/sdbm/init.c (fsdbm_initialize): Ditto.
-
-Mon Mar 23 19:22:14 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * file.c (rb_file_s_lstat): Back out.
-
-Mon Mar 23 18:54:57 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * file.c (rb_file_s_stat, rb_file_s_lstat): Remove repeated type
- checks.
-
-Mon Mar 23 14:57:48 2009 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c (init_heap): set default to heap slots length
- if HEAP_OBJ_LIMIT is larger than HEAP_MIN_SLOTS. [Bug #1310]
- (set_heaps_increment): increment next_heaps_length if
- next_heaps_length and heaps_used are same.
-
-Mon Mar 23 14:32:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_spawn): use original command if not found.
-
-Mon Mar 23 06:51:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/depend (link_so): replaces $(TARGET) with basename of the
- target. [ruby-talk:330286]
-
-Sun Mar 22 14:51:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): use NULL as
- application name for batch files.
-
-Sat Mar 21 15:54:41 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_ssl.c (write_would_block): defined.
- (read_would_block): defined.
- (ossl_start_ssl): add nonblock argument.
- (ossl_ssl_connect): follow ossl_start_ssl change.
- (ossl_ssl_connect_nonblock): new method.
- (ossl_ssl_accept): follow ossl_start_ssl change.
- (ossl_ssl_accept_nonblock): new method.
- (ossl_ssl_read_internal): use write_would_block and
- read_would_block.
- (ossl_ssl_write_internal): ditto.
-
-Sat Mar 21 08:19:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_exec): prints error message only on platforms
- neither close-on-exec nor spawnv is supported.
-
-Sat Mar 21 08:17:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): omit program name
- if actual program path is found. [ruby-core:22960]
-
-Sat Mar 21 07:25:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (pipe_open): should pass program name even if multiple
- arguments are given. fix for TestProcess::test_argv0.
-
-Sat Mar 21 02:37:07 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/lib/openssl/buffering.rb
- (OpenSSL::Buffering#write_nonblock): new method.
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_write_nonblock): new method.
- (ossl_ssl_write_internal): defined.
- (ossl_ssl_write): use ossl_ssl_write_internal.
-
-Fri Mar 20 18:25:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (errmap): added ERROR_MOD_NOT_FOUND.
-
-Fri Mar 20 09:22:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (libprefix): must not append "lib" after $(libdir),
- when load_relative is not used on darwin. a patch from Kenta
- Murata at [ruby-dev:38182].
-
-Thu Mar 19 20:29:40 2009 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_mWaitReadable): defined.
- (rb_mWaitWritable): defined.
- (io_getpartial): extend IO::WaitReadable on EWOULDBLOCK and EAGAIN.
- (rb_io_write_nonblock): extend IO::WaitWritable on EWOULDBLOCK and
- EAGAIN.
-
- * error.c (make_errno_exc): extracted from rb_sys_fail.
- (rb_mod_sys_fail): new function.
-
- * include/ruby/ruby.h (rb_mod_sys_fail): declared.
- (rb_mWaitReadable): declared.
- (rb_mWaitWritable): declared.
-
- * ext/socket/init.c (rsock_s_recvfrom_nonblock): extend
- IO::WaitReadable on EWOULDBLOCK and EAGAIN.
- (rsock_s_accept_nonblock): extend IO::WaitReadable on EWOULDBLOCK,
- EAGAIN, ECONNABORTED and EPROTO.
-
- * ext/socket/socket.c (sock_connect_nonblock): extend IO::WaitWritable
- on EINPROGRESS.
-
- * ext/socket/ancdata.c (bsock_sendmsg_internal): extend
- IO::WaitWritable on EWOULDBLOCK and EAGAIN.
- (bsock_recvmsg_internal): extend IO::WaitReadable on EWOULDBLOCK and
- EAGAIN.
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_read_internal): raise SSLError
- extended by IO::WaitReadable/IO::WaitWritable on
- SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE.
-
- * ext/openssl/ossl.c (ossl_make_error): extracted from ossl_raise.
- (ossl_exc_new): new function.
-
- * ext/openssl/ossl.h (ossl_exc_new): declared.
-
- * lib/net/protocol.rb (rbuf_fill): rescue IO::WaitReadable and
- IO::WaitWritable.
-
- [ruby-core:22539], [ruby-dev:38140]
-
-Thu Mar 19 18:49:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_CHECK_SIZEOF): allows qualified name.
-
- * configure.in (RUBY_REPLACE_TYPE): checks more strictly.
-
- * configure.in (struct stat.st_size, struct stat.st_blocks),
- (struct stat.st_ino): check for size.
-
- * lib/mkmf.rb (check_sizeof): allows qualified name.
-
- * file.c (rb_stat_ino, rb_stat_blocks): check by size.
-
-Wed Mar 18 16:59:48 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/test_syslog.rb (TestSyslog#test_open): check
- param after block again. because detect not to call block.
-
-Wed Mar 18 16:54:04 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * ext/socket/ancdata.c: not use pktinfo.ipi_spec_dst if not defined
- * ext/socket/extconf.rb: define HAVE_IPI_SPEC_DST
-
-Wed Mar 18 16:38:11 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/test_syslog.rb (TestSyslog#test_open): check
- block parameter in block. [ruby-dev:38180]
-
-Wed Mar 18 12:48:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (report_bug): rb_bug can be caused by extension
- libraries.
-
-Wed Mar 18 02:41:33 2009 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb (open_server_inaddr_any): fixed multiple network
- families problem. a patch from Charl Matthee at [ruby-core:21033].
-
-Tue Mar 17 21:42:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot (package): creates .revision.time and passes
- CHDIR to create prerequisite files.
-
-Tue Mar 17 18:00:55 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (Enumerator#{each_,}{with_index,with_object}): Fix
- a bug where any parameter but the first one is dropped even if
- multiple values are yielded with. [Bug #1198]
-
-Tue Mar 17 14:25:16 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/pathname.rb (Pathname#sub): set $~ in block.binding.
- [ruby-dev:38173]
-
-Tue Mar 17 13:48:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): added RUBY_COREDLL.
-
- * ext/dl/handle.c (rb_dlhandle_initialize): returns msvcrt if libc
- or RUBY_COREDLL is given. [ruby-core:22828]
-
-Tue Mar 17 10:29:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c, dln.c, parse.y, re.c, ruby.c, sprintf.c, strftime.c,
- string.c, util.c, variable.c: use strlcpy, memcpy and snprintf
- instead of strcpy, strncpy and sprintf.
-
-Mon Mar 16 17:15:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/dl/test_win32.rb (Win32API): enclosed by DL::TestWin32.
- [ruby-core:22827]
-
-Mon Mar 16 16:37:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tk/tcltklib.c (eventloop_sleep, lib_eventloop_core),
- (lib_watchdog_core): tv_usec is not time_t.
-
-Mon Mar 16 12:30:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (REVISION_H): keeps timestamp of revision.h.
- [ruby-core:22900]
-
- * tool/ifchange, win32/ifchange.bat: extended --timestamp option.
-
-Mon Mar 16 09:28:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, common.mk, win32/Makefile.sub: added preprocessing rules.
-
-Sun Mar 15 12:34:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/minitest/test_mini_test.rb: fixed tests depending on the
- detail of floating point representation.
-
-Sun Mar 15 12:01:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems/installer.rb (Gem::Installer#shebang): fix for env
- shebang.
-
-Sun Mar 15 11:15:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h ({RSTRING,RBIGNUM}_EMBED_LEN_MAX): made int.
-
- * include/ruby/ruby.h (OBJ_{TAINTED,UNTRUSTED,FROZEN}): return int.
-
- * include/ruby/encoding.h (ENC_CODERANGE): ditto.
-
-Sun Mar 15 11:11:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_hash_uint, rb_hash_start, rb_hash_end): use VALUE
- rather than unsigned int.
-
-Sun Mar 15 11:00:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (load_file_internal): stop the timer thread before exec.
-
-Sun Mar 15 09:17:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (.y.c): use SRC_FILE which contains slashes instead of
- backslashes. [ruby-core:22891]
-
-Sun Mar 15 08:26:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (srcs-ext): creates ext/dl/callback/callback.c also.
-
-Sun Mar 15 03:29:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (SAVED_GROUP_ID, p_gid_switch): should be rb_gid_t.
-
-Sun Mar 15 02:53:13 2009 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_subpat): accept capture name.
- (rb_str_aref): follow above change.
- (rb_str_aref_m): pass the 2nd argument to rb_str_subpat.
- (rb_str_subpat_set): accept capture name.
- (rb_str_aset): follow above change.
- (rb_str_partition): ditto.
- (rb_str_aset_m): pass the 2nd argument to rb_str_subpat_set.
-
- * include/ruby/intern.h (rb_reg_backref_number): declared.
-
- * re.c (rb_reg_backref_number): defined.
-
- [ruby-core:21057]
-
-Sun Mar 15 02:09:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (bmcall): should not uninitialized variable. a patch from
- pegacorn at [ruby-dev:38169].
-
-Sat Mar 14 18:25:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_scan_oct, ruby_scan_hex): use size_t.
-
-Sat Mar 14 18:18:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (rb_proc_call, rb_node_arity, bmcall, curry): checks
- overflow.
-
- * proc.c (rb_proc_parameters): unnamed_parameters() expects in
- not VALUE.
-
-Sat Mar 14 17:54:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_each_words): assume no string exceeds INT_MAX.
-
-Sat Mar 14 15:59:04 2009 Tanaka Akira <akr@fsij.org>
-
- * process.c (rb_spawn_internal): use int variable for status.
-
-Sat Mar 14 14:45:51 2009 Tanaka Akira <akr@fsij.org>
-
- * process.c (rb_f_system): use rb_pid_t for pid.
- (rb_spawn_internal): local variable renamed.
-
-Sat Mar 14 14:16:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_strdup, Balloc, rv_alloc): use size_t.
-
-Sat Mar 14 13:53:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_qsort): the result of cmp must be signed, so ge
- rid of reuse of a variable.
-
-Sat Mar 14 10:56:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (init_funcname_len, dln_find_exe_r, dln_find_file_r): use
- size_t.
-
- * file.c (rb_stat_inspect, file_expand_path): ditto.
-
- * util.c (ruby_qsort): ditto.
-
-Sat Mar 14 10:39:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (CXX_EXT): checks for case-sensitive filesystem with
- FNM_SYSCASE rather than build_os.
-
-Fri Mar 13 23:03:40 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/init.c (wait_connectable0): remove unreachable code.
-
-Fri Mar 13 23:00:02 2009 Tanaka Akira <akr@fsij.org>
-
- * configure.in (RUBY_CHECK_SIZEOF): pass [include] to AC_CHECK_SIZEOF.
-
-Fri Mar 13 20:58:11 2009 Tanaka Akira <akr@fsij.org>
-
- * dln.c (dln_find_1): compare fspace in size_t world.
-
-Fri Mar 13 18:58:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (CFLAGS, CXXFLAGS): moved after warnflags.
-
-Fri Mar 13 18:10:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (rb_throw_obj): inverted call flow. [ruby-core:22872]
-
-Fri Mar 13 17:04:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (bool): not define to get rid of conflict
- against curses.
-
-Fri Mar 13 16:45:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/openssl_missing.h (i2d_of_void): cast for callbacks.
- [ruby-core:22860]
-
- * ext/openssl/ossl_engine.c (ossl_engine_s_by_id): suppress a
- warning.
-
- * ext/openssl/ossl_ssl.c (ossl_sslctx_flush_sessions): time_t may
- be larger than long.
-
- * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_get_time),
- (ossl_ssl_session_get_timeout): use TIMET2NUM() to convert
- time_t.
-
-Fri Mar 13 15:10:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/ossl_x509ext.c (ossl_x509ext_set_value): should use
- OPENSSL_free instead of free. a patch from Charlie Savage at
- [ruby-core:22858].
-
-Fri Mar 13 21:11:51 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/sdbm/_sdbm.c: should include "ruby/defines.h" as well for
- prototypes of compatibility functions on Win32 platform.
- [ruby-core:22870]
-
-Fri Mar 13 10:42:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (AC_HEADER_STDBOOL): added.
-
- * include/ruby/ruby.h (NUM2INT, rb_special_const_p): returns true
- and false instead of Qtrue and Qfalse for platforms where VALUE
- is bigger than int.
-
- * gc.c (gc_stress_set), ext/openssl/ossl_asn1.c (decode_bool): go
- rid of variables named `bool'.
-
-Fri Mar 13 10:16:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (struct stat.st_size): may be huge.
-
-Fri Mar 13 09:30:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (bigfixize): zero length Bignum is 0.
-
-Fri Mar 13 09:17:12 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/fileutils.rb (FileUtils#fu_get_gid): stringify group
- argument before making regexp match. [ruby-dev:38155]
-
-Fri Mar 13 08:06:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (rv_strdup): macro to duplicate nul-terminated string.
- [ruby-core:22852]
-
-Thu Mar 12 22:41:41 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl: suppress warnings.
-
- * ext/openssl/ossl.h (OSSL_Debug): don't use gcc extension for
- variadic macro.
-
-Thu Mar 12 22:29:36 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (WARNFLAGS): warning 4996 is only in VC++8 or
- later.
-
-Thu Mar 12 22:14:01 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_def_const): use INT2NUM because
- OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG doesn't fit into Fixnum.
-
-Thu Mar 12 18:16:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c, bignum.c, dln.c, error.c, gc.c, io.c, marshal.c,
- numeric.c, pack.c, strftime.c, string.c, thread.c, transcode.c,
- transcode_data.h, util.c, variable.c, vm_dump.c,
- include/ruby/encoding.h, missing/crypt.c, missing/vsnprintf.c:
- suppress VC type warnings. [ruby-core:22726]
-
- * marshal.c (div0), numeric.c (infinite_value): new functions to
- get rid of VC division by 0 warnings.
-
- * st.c: use st_index_t for indexes instead of int.
-
- * vm.c (rb_vm_get_sourceline), vm_insnhelper.c (vm_throw): use
- rb_num_t.
-
-Thu Mar 12 09:30:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_CHECK_SIZEOF): if same size type is found, no
- more calculation is needed.
-
- * configure.in (RUBY_DEFINT): falls back to RUBY_CHECK_SIZEOF if
- size is not immediate.
-
-Thu Mar 12 09:24:24 2009 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h: suppress warnings of overflow.
-
-Thu Mar 12 09:15:14 2009 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h: suppress warnings of overflow.
-
-Thu Mar 12 05:49:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (warnflags): added some default flags,
- pointer-arith, write-strings and shorten-64-to-32, but suppress
- unused-parameter and missing-field-initializers, if possible.
-
- * configure.in (RUBY_CHECK_HUGE): checks whether a value range is
- larger than long.
-
- * file.c (rb_stat_blocks): struct stat.st_blocks may be larger
- than long.
-
- * io.c (copy_stream_fallback_body): off_t may be larger than long.
-
- * iseq.c (rb_iseq_disasm): RSTRING_LEN() returns long.
-
- * process.c (rb_f_sleep): time() needs time_t.
-
- * random.c (fill_random_seed): enclosed conditionally used
- variables.
-
- * thread_pthread.c (ruby_init_stack): range of rlim_cur may be
- larger than int.
-
- * missing/vsnprintf.c (BSD_vfprintf): commented out code which has
- no effect at all.
-
-Thu Mar 12 02:10:57 2009 Tanaka Akira <akr@fsij.org>
-
- * configure.in: strip spaces from ruby_version.
- Sun C 5.9 SunOS_i386 Build47_dlight 2007/05/22 generates
- `ruby_version= 1 "." 9 "." 1'.
-
-Thu Mar 12 01:18:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (dir_seek): use long for seekdir().
-
-Thu Mar 12 01:08:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/ytab.sed: replaces backslashes with slash for nmake.
-
-Wed Mar 11 21:23:06 2009 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_mload): don't clear tm_mday.
-
-Wed Mar 11 20:13:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/handle.c (rb_dlhandle_sym): RTLD_NEXT is not for symbol
- name. [ruby-dev:38150]
-
-Wed Mar 11 17:26:38 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/win32/lib/Win32API.rb: call by :stdcall as default.
- [ruby-core:22826]
-
-Wed Mar 11 13:27:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stack_type): uses VALUE which is able to be stored
- parser stack.
-
-Wed Mar 11 13:22:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (init_env): set TMPDIR if none of TMPDIR, TMP,
- TEMP is set.
-
- * win32/win32.c (rb_w32_telldir, rb_w32_seekdir): should use long,
- as defined by SUSv3.
-
-Wed Mar 11 13:03:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/handle.c (rb_dlhandle_sym): fixed heap corruption.
- [ruby-core:22822]
-
-Wed Mar 11 06:12:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_init_loadpath_safe): expands libpath and removes
- last /lib.
-
-Wed Mar 11 04:47:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (time_to_i, time_hash): time_t may be bigger than long
- and int.
-
- * time.c (time_timeval, rb_time_timeval, obj2nsec, time_strftime),
- (time_mdump, time_mload): suppress warnings.
-
- * win32/Makefile.sub (config.h): added TIMET2NUM and NUM2TIMET.
-
-Wed Mar 11 04:29:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c: suppress warnings. based on a patch from Charlie
- Savage at [ruby-core:22804].
-
-Wed Mar 11 04:22:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (sig_trap): suppress warnings.
-
-Tue Mar 10 20:07:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (WARNFLAGS): uses -wd4996 instead of
- CRTDEFFLAGS. cf. [ruby-core:22725]
-
-Tue Mar 10 19:58:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/win32.h (strcasecmp, strncasecmp): use _ prefixed
- versions to suppress warnings.
-
- * ext/dl/callback/mkcallback.rb (DLTYPE[FLOAT]): cast to suppress
- warnings. [ruby-core:22792]
-
- * array.c, bignum.c, gc.c, numeric.c, string.c, util.c, insns.def,
- missing/crypt.c, missing/vsnprintf.c, : suppress warnings.
- [ruby-core:22792]
-
-Tue Mar 10 13:45:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (LDFLAGS): moved -link to TRY_LINK, LINK_SO
- and so on. based on a patch by Charlie Savage at
- [ruby-core:22794]
-
- * win32/Makefile.sub (config.h): passes LDFLAGS to rbconfig.rb so
- that extconf.rb could refer it. [ruby-core:22725]
-
-Tue Mar 10 11:36:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (prepare_iseq_build): too few arguments to function
- rb_ary_tmp_new().
-
-Tue Mar 10 10:53:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (rb_iseq_compile_with_option): argument may be converted.
-
-Tue Mar 10 04:56:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (MINIRUBY): keep macro into Makefile.
-
- * configure.in (RUBY_CHECK_SIZEOF): fix for fallback.
-
- * configure.in (MANGLED_PATH): defines for RUBYLIB_PREFIX.
-
- * ruby.c (ruby_init_loadpath_safe): uses string as buffer.
-
- * symbian/setup (config_h): defines MANGLED_PATH.
-
-Tue Mar 10 03:48:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/callback/depend: fix for parallel build.
-
- * ext/dl/callback/extconf.rb: callback.h is no longer created.
-
- * ext/dl/callback/mkcallback.rb: creates main source first.
-
- * ext/dl/callback/extconf.rb ($distcleanfiles): added callback.c.
-
-Tue Mar 10 00:06:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (load_relative): new option to enable load path
- relative to libruby_so.
-
- * ruby.c (ruby_init_loadpath_safe): added the case using dladdr().
-
-Mon Mar 9 16:49:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rake: updated to rake code to rake-0.8.4 source code base.
-
-Mon Mar 9 16:03:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems/installer.rb (Gem::Installer#initialize): env may
- not be under /usr/bin.
-
- * lib/rubygems/installer.rb (Gem::Installer#shebang): uses /bin/sh
- if shebang has any options, since env shebang trick does no
- work with options.
-
-Mon Mar 9 15:19:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (manpages): use basename to compare and for Tempfile.
-
-Mon Mar 9 14:55:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (default gems): installs default gemspecs.
-
-Mon Mar 9 14:48:08 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (OPTFLAGS): simplified. see [ruby-core:22725]
-
-Mon Mar 9 14:33:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb: prints names of the directories where files are
- installed to.
-
-Mon Mar 9 02:25:54 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_proc.rb: add some tests.
-
-Mon Mar 9 01:38:00 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_enum.rb: add some tests.
-
-Mon Mar 9 01:12:37 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_object.rb: add a test for Object#method_missing.
-
-Mon Mar 9 01:11:17 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_file_exhaustive.rb: add tests for File#size and
- File.absolute_path.
-
-Sun Mar 8 23:02:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (LDFLAGS): always prepends -link.
-
-Sun Mar 8 11:39:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_CHECK_SIZEOF): dirty hack to compute multiple
- sizeof, for apple's universal binary.
-
-Sat Mar 7 22:06:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (universal_binary): checks if sizes are same on all
- architectures.
-
-Sat Mar 7 18:45:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: checks if cd really succeeded.
-
-Sat Mar 7 14:24:47 2009 Tanaka Akira <akr@fsij.org>
-
- * configure.in: don't use CONFIG_SHELL for testing shell feature in
- Makefile.
-
-Sat Mar 7 14:07:31 2009 Tanaka Akira <akr@fsij.org>
-
- * configure.in: fix the location of cdcmd.
-
-Sat Mar 7 13:52:01 2009 Tanaka Akira <akr@fsij.org>
-
- * configure.in: the shell which runs configure may be different from
- the shell for make. configure likes bash but Makefile specifies
- SHELL=/bin/sh.
-
-Sat Mar 7 12:31:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/erb/test_erb.rb: reverted space sensitive test results.
-
- * test/rdoc/test_rdoc_parser_c.rb: ditto.
-
- * test/rdoc/test_rdoc_ri_default_display.rb: ditto.
-
-Fri Mar 6 23:35:59 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/securerandom.rb (SecureRandom.urlsafe_base64): add optional
- argument to add padding.
-
-Fri Mar 6 19:25:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_LIB_VERSION_STYLE): sets full or minor style
- not to show RUBY_VERSION_MAJOR and so on.
-
- * version.h (RUBY_LIB_VERSION): makes from RUBY_LIB_VERSION_STYLE.
-
- * configure.in, Makefile.in, win32/Makefile.sub (CHDIR): cd using
- physical directory.
-
- * Makefile.in (update-mspec): split from update-rubyspec.
-
- * win32/Makefile.sub (update-{rubyspec,mspec}): added.
-
-Fri Mar 6 14:28:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, win32/Makefile.sub (INSNS): moved variable
- definition before rule.
-
-Fri Mar 6 13:47:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rake/loaders/makefile.rb (Rake::MakefileLoader#load): deals with
- escaped spaces. incorporated from rake 0.8.4.
-
- * lib/rake/testtask.rb (Rake::TestTask#define): passes each libs
- as each arguments with expanded. incorporated from rake 0.8.4.
-
-Thu Mar 5 18:36:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_to_s): keeps enough precision for round trip.
- [ruby-core:22325]
-
-Thu Mar 5 17:42:06 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_fill): doc for Array#fill misses indication
- about negative value for the start argument. [ruby-core:22497]
-
-Thu Mar 5 16:56:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tmpdir.rb (Dir.tmpdir): not use USERPROFILE, and ignores
- non-existent directory.
-
-Thu Mar 5 14:52:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_sysinit): initializes version info first.
-
- * win32/win32.c (rb_w32_osid): always define for binary compatibility.
-
-Thu Mar 5 11:52:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (make_insns_rules): rule to make rules for insns.
-
-Thu Mar 5 11:27:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (miniruby.exe): workaround for a failure of
- mt.exe on Windows 7 beta. [ruby-talk:330284]
-
-Thu Mar 5 10:32:17 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/dl/test_base.rb: Add dragonfly to libc and libm switch.
-
-Thu Mar 5 10:29:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_eql): extracted from rb_str_equal and rb_str_eql.
-
- * string.c (rb_str_chomp_bang): keeps 7bit coderange.
-
-Thu Mar 5 10:10:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/encoding.h (enc_initialized_p): ENC_UNINITIALIZED
- is not defined already.
-
- * include/ruby/encoding.h (ENC_FROM_ENCINDEX): removed because
- depending on a static variable.
-
-Thu Mar 5 04:42:52 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_array.rb: fix wrong test, and add a test for
- sort_by!.
-
-Thu Mar 5 04:32:38 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_array.rb: add some tests for coverage.
-
-Thu Mar 5 00:06:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/README.win32 (Requirement): added unicows.lib and dll.
-
-Wed Mar 4 23:29:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, win32/configure.bat (--enable-win95): new option
- to enable/disable win95 support.
-
-Wed Mar 4 21:21:51 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/thread.rb (SizedQueue#push): fix limit condition.
- [ruby-dev:38135]
-
-Wed Mar 4 20:27:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (mingw): checks if unicows.lib is available.
-
- * include/ruby/win32.h (WIN95): moved to config.h
-
- * win32/Makefile.sub (LIBS): links unicows.lib if available.
-
- * win32/Makefile.sub (config.h): defines WIN95 only if unicows.lib
- is available.
-
- * win32/setup.mak (-unicows-): checks if unicows.lib is available.
-
-Tue Mar 3 17:10:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): removes object files no longer used and
- files to be removed by old distclean.
-
-Tue Mar 3 16:51:51 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/win32/lib/win32/resolv.rb: get rid of warning.
-
- * ext/dl/lib/dl/func.rb: ditto.
-
-Tue Mar 3 16:25:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake), lib/mkmf.rb (create_makefile): $objs and
- $srcs are always Array or nil now.
-
-Tue Mar 3 15:54:11 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/win32/lib/win32/{registry,resolv}.rb: use dl/import instead
- of Win32API.
-
-Tue Mar 3 15:53:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/lib/dl/func.rb (DL::Function.name): delegate to @cfunc.
-
-Tue Mar 3 15:40:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/dl.c (rb_dl_init_callbacks): autoloads callbacks.
-
- * ext/dl/callback: split from dl.
-
- * ext/dl/lib/dl/cparser.rb (DL::CParser::parse_signature): fixed
- variable name.
-
- * ext/dl/lib/dl/pack.rb (DL::PackInfo): reduced redundant
- initialization.
-
- * ext/dl/lib/dl/stack.rb (DL::Stack): ditto.
-
- * ext/dl/lib/dl/value.rb (DL::ValueUtil#wrap_arg): NULL for nil.
-
- * test/dl: moved from ext/dl/test.
-
-Tue Mar 3 14:57:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (main): passes $(MAKE) to mkmain_cmd
-
- * ext/extmk.rb (command_output): uses arguments to invoke make.
-
-Tue Mar 3 01:56:03 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/securerandom.rb (SecureRandom.urlsafe_base64): delete padding.
-
-Mon Mar 2 21:39:08 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/sockport.h (SS_LEN): defined unconditionally.
-
-Mon Mar 2 21:26:42 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (anc_inspect_socket_creds): suppress warnings.
-
-Mon Mar 2 21:13:42 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (rsock_discard_cmsg_resource): defined
- unconditionally.
-
-Mon Mar 2 21:06:40 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (addrinfo_mload): don't use "sun" variable
- for Solaris.
-
-Mon Mar 2 21:01:36 2009 Tanaka Akira <akr@fsij.org>
-
- * file.c: include fcntl.h for O_RDONLY on Solaris.
-
-Mon Mar 2 19:43:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/uri/common.rb (URI::Parser#escape): escaped string is ascii
- only.
-
- * lib/uri/common.rb (URI::Parser#unescape): converts bytewise.
- [ruby-dev:38005], [ruby-dev:38110]
-
-Mon Mar 2 16:40:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * README.EXT, README.EXT.ja (Macros): added HAVE_RUBY_*_H.
-
-Mon Mar 2 12:22:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (init_env): keeps wide chars as wide chars.
-
-Mon Mar 2 11:01:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/dl.h (dlerror): fixed on Windows.
-
- * ext/dl/handle.c (rb_dlhandle_initialize): returns handle to
- libruby if nil is given on Windows as dlopen.
-
- * ext/dl/handle.c (rb_dlhandle_sym): get rid of buffer overrun,
- and try ASCII WINAPI versions too.
-
-Mon Mar 2 10:29:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_longjmp), include/ruby/intern.h (ruby_cleanup): fixed
- prototypes.
-
-Mon Mar 2 00:56:45 2009 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/observer.rb: The module observable uses now a hash to
- store listeners. merged a patch from Alessandro Di Maria in
- [ruby-core:22560].
-
-Sun Mar 1 22:59:41 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c: suppress warnings.
-
- * ext/socket/socket.c: ditto.
-
- * ext/socket/unixsocket.c: ditto.
-
-Sun Mar 1 20:57:41 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ (rsock_getfamily): renamed from rb_sock_getfamily.
-
-Sun Mar 1 19:52:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/win32/lib/Win32API.rb (initialize): passes res
- arguments to DL.
-
-Sun Mar 1 19:38:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/zlib/zlib.c (zstream_run): suppress a warning. a patch from
- Charlie Savage at [ruby-core:22607].
-
-Sun Mar 1 19:36:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_dtoa): allocates one more byte to get rid of buffer
- overrun. a patch from Charlie Savage at [ruby-core:22604].
-
-Sun Mar 1 19:10:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (.y.c): removed extra backslash. [ruby-core:22602]
-
-Sun Mar 1 19:02:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/cfunc.c (rb_dlcfunc_call): fix for stdcall and missing
- argument numbers. [ruby-core:22601]
-
- * ext/dl/dl.h (DLSTACK_PROTO0_): added.
-
- * ext/dl/mkcallback.rb (gencallback, gen_callback_file),
- (rb_dl_init_callbacks): omit stdcall functions unless supported.
-
- * lib/rubygems/config_file.rb (SHGetFolderPath): stdcall.
-
-Sun Mar 1 17:27:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (gfDebug): uncommented out.
- [ruby-core:22600]
-
-Sun Mar 1 16:15:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_waitpid): use wait_each() on no waitpid platforms.
- [ruby-dev:38054]
-
-Sun Mar 1 16:01:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (proc_daemon): stops and restarts timer thread because
- daemon(3) implies fork(2). [ruby-dev:38055]
-
-Sun Mar 1 15:45:49 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ (rsock_make_hostent): renamed from sock_make_hostent.
- (rsock_addrinfo): renamed from sock_addrinfo.
- (rsock_getaddrinfo): renamed from sock_getaddrinfo.
- (rsock_socket): renamed from ruby_socket.
- (rsock_sock_s_socketpair): renamed from sock_s_socketpair.
- (rsock_connect): renamed from ruby_connect.
-
- * ext/socket/socket.c (sock_listen): make it static.
-
-Sun Mar 1 15:29:31 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket: add rsock_ prefix.
-
-Sat Feb 28 21:52:37 2009 Tanaka Akira <akr@fsij.org>
-
- * vm_eval.c (rb_iterate): use volatile to suppress warnings.
-
- * eval.c (ruby_cleanup): ditto.
-
-Sat Feb 28 20:09:40 2009 Tanaka Akira <akr@fsij.org>
-
- * eval_error.c (error_print): use volatile to suppress warnings.
-
- * vm_eval.c (eval_string_with_cref): ditto.
-
- * thread.c (rb_exec_recursive): ditto.
-
- * eval_jump.c (rb_exec_end_proc): ditto.
-
- * eval.c (ruby_exec_node): ditto.
- (rb_longjmp): ditto.
-
-Sat Feb 28 18:28:58 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_unix_rights): check message type.
-
-Sat Feb 28 16:18:39 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/net/http.rb: suppress warnings of non-existing instance variable
- access for SSL.
-
-Sat Feb 28 14:50:47 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (BasicSocket#connect_address): returns ::1
- if the address is IPv4-mapped IPv6 address for 0.0.0.0 for MacOS X.
-
-Sat Feb 28 00:18:40 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c: suppress strict-aliasing warning with
- gcc version 4.4.0 20090219 (Red Hat 4.4.0-0.21) on Fedora 11 Alpha.
-
- * ext/socket/socket.c: ditto.
-
- * ext/socket/unixsocket.c: ditto.
-
- * ext/socket/sockport.h (SS_LEN): defined.
- (SET_SS_LEN): ditto.
-
-Fri Feb 27 22:30:18 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_recvmsg_internal): close FDs passed by
- SCM_RIGHTS unless :scm_rights=>true is given.
- (discard_cmsg): extracted from rsock_discard_cmsg_resource.
-
-Fri Feb 27 22:14:22 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/lib/openssl/buffering.rb: define Buffering module under
- OpenSSL. [ruby-dev:37906]
-
-Fri Feb 27 22:09:24 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit/assertions.rb: don't define assert_not_* if already
- overridden.
-
-Fri Feb 27 22:02:34 2009 Tanaka Akira <akr@fsij.org>
-
- * util.c: fix SEGV by test_time.rb with
- gcc version 4.4.0 20090219 (Red Hat 4.4.0-0.21) on Fedora 11 Alpha.
-
-Fri Feb 27 18:30:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (cdhash_type, iseq_set_sequence): should not call
- methods of the argument of case, to keep the semantics of
- case/when. [ruby-dev:38079]
-
-Fri Feb 27 18:01:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (ruby_get_stack_grow_direction): no needs to use thread
- here, and not initialized yet. [ruby-core:22439]
-
-Fri Feb 27 17:45:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_load_ok): checks if regular file, except for the
- platform disallows to open directories, e.g. dosish.
- [ruby-dev:38097], [Bug #1221]
-
-Fri Feb 27 14:39:40 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (flo_eq, flo_gt, flo_ge, flo_lt, flo_le, flo_eql): revert
- isnan() checks for VC++6.
-
- * insns.def (opt_lt, opt_gt): ditto.
-
-Fri Feb 27 14:23:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/ostruct.rb (modifiable): check if really frozen.
- [ruby-core:22559]
-
-Thu Feb 26 23:14:46 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (BasicSocket#connect_address): new method.
-
-Thu Feb 26 19:29:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (hash_foreach_iter): fix for prototype.
-
-Thu Feb 26 18:36:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (INSNS, newline.c, miniprelude.c, prelude.c),
- (node_name.inc, known_errors.inc): unified from Makefile.in and
- win32/Makefile.sub.
-
-Thu Feb 26 13:30:34 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * util.c (valid_filename): use our own implementation of open(),
- close() and unlink().
-
-Thu Feb 26 13:23:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (cdhash_each): resurrects internal literals.
-
-Thu Feb 26 10:56:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h (rb_w32_wopen): prototype forgotten.
-
- * io.c (rb_sysopen_internal): shouldn't replace undefined chars in this
- case.
-
-Thu Feb 26 01:34:38 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: more MSG_* constants.
-
-Thu Feb 26 00:21:21 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (sockopt_level): extracted from sockopt_level_m.
- (sockopt_optname): extracted from sockopt_optname_m.
- (sockopt_data): apply StringValue.
- (sockopt_s_linger): new method.
- (sockopt_linger): new method.
- (inspect_linger): show onoff value if it is neither 0 nor 1.
-
-Wed Feb 25 23:23:03 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_unix_rights): raise
- NotImplementedError if no fd passing feature.
- (ancillary_timestamp): raise NotImplementedError if no timestamp
- feature.
-
-Wed Feb 25 23:18:53 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_s_unix_rights): new method.
-
-Wed Feb 25 23:01:26 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/unixsocket.c (unix_recv_io): prevent FD leak when 2 fd is
- sent on LP64 platform.
-
- * ext/socket/rubysocket.h (rsock_discard_cmsg_resource): declared.
-
- * ext/socket/ancdata.c (rsock_discard_cmsg_resource): renamed from
- discard_cmsg_resource. export it.
-
-Wed Feb 25 17:31:32 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (sysopen_func, rb_sysopen_internal, rb_sysopen): open file
- by UTF-16'ed filename on Windows.
-
- * io.c (rb_file_open_generic, rb_io_s_sysopen, rb_io_reopen,
- argf_next_argv): follow above change.
-
- * io.c (rb_scan_open_args): no longer need to convert filepath here on
- Windows.
-
- * win32/wio32.c (rb_w32_wopen): new function to open file by UTF-16'ed
- filename.
-
- * win32/win32.c (rb_w32_open): call rb_w32_open().
-
-Wed Feb 25 15:05:35 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.status): use un.rb as cp instead of
- cmd.exe's copy command.
-
- * lib/mkmf.rb (create_makefile): no longer need to convert path
- separator when copying file.
-
-Wed Feb 25 12:27:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_force_encoding): should clear coderange at changing
- encoding. [ruby-core:22437]
-
-Wed Feb 25 12:06:09 2009 <nobu@ruby-lang.org>
-
- * io.c (rb_io_getline_1): enables limit even if rs is given.
- [ruby-core:22434]
-
-Wed Feb 25 02:28:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_chomp_bang): coderange may change.
- [ruby-core:22414]
-
-Wed Feb 25 02:17:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_delete_bang): should recalculate coderange.
- [ruby-talk:329267]
-
-Wed Feb 25 00:41:21 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * class.c (rb_scan_args): Allow specifying the number of trailing
- mandatory arguments right after the number of optional arguments
- only if the number of leading mandatory arguments is not omitted.
-
- * ext/socket/tcpserver.c (tcp_svr_init): Make use of it.
-
-Wed Feb 25 00:28:25 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_file_size): new method added. [ruby-core:22088]
-
-Wed Feb 25 00:15:15 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/curses/curses.c (curses_colors): new method added. a patch
- from Alexander Beisig in [ruby-core:22331].
-
- * ext/curses/curses.c (curses_color_pairs): ditto.
-
-Wed Feb 25 00:05:13 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * class.c (rb_scan_args): Revamp rb_scan_args() to compute the
- number of required and optional arguments precisely to prepare
- for a more informative error message.
-
-Tue Feb 24 23:58:52 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * array.c (rb_ary_index, rb_ary_rindex): Emit a warning that a
- given block is unused when an argument is specified.
-
-Tue Feb 24 22:00:37 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (sockaddr_obj): convert fe80:1::1 to fe80::1%1.
-
-Tue Feb 24 19:56:11 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_timestamp): support SCM_BINTIME.
-
-Tue Feb 24 19:45:15 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_timestamp): new method.
-
-Tue Feb 24 19:01:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (main): split from exts and makes main program after
- building exts with miniruby, to get rid of overwriting running
- program. [ruby-core:22339]
-
- * Makefile.in, win32/Makefile.sub (RUNCMD, MKMAIN_CMD): macros to
- run script file.
-
- * ext/extmk.rb (parse_args): added --command-output option which
- creates script file to make main program.
-
-Tue Feb 24 17:58:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (ripper.c): exec can't work on Windows.
-
- * ext/ripper/depend (.SUFFIXES): nmake doesn't have .y by default.
-
- * Makefile.in (id.h): overwrites unconditionally.
-
-Tue Feb 24 13:13:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing/vsnprintf.c (BSD_vfprintf): ptrdiff_t may be larger than
- long.
-
-Tue Feb 24 11:21:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (rb_disable_interrupt, rb_enable_interrupt): see
- USE_TRAP_MASK.
-
-Tue Feb 24 10:49:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_waitpid): last argument was missing.
-
- * process.c (waitall_each): fixed typo. a patch from shinichiro.h
- <shinichiro.hamaji AT gmail.com> at [ruby-dev:38054].
-
-Tue Feb 24 01:53:40 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flo_eq): remove unnecessary NaN check using isnan().
- comparison regarding NaN is false anyway.
-
- * numeric.c (flo_gt, flo_ge, flo_lt, flo_le, flo_eql): ditto.
-
-Tue Feb 24 01:22:19 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bootstraptest/test_thread.rb: fix for environment where fork is not
- available.
-
-Tue Feb 24 01:19:38 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (thread_cleanup_func): unlock all locked mutexes even when
- forking. [ruby-core:22269]
-
-Tue Feb 24 00:54:16 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * insns.def (opt_minus): inline float operation.
-
- * insns.def (opt_lt, opt_gt): ditto.
-
-Tue Feb 24 00:24:13 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_each): check #succ only when it is really
- needed. small performance improvement.
-
- * math.c (Need_Float): call rb_to_float() only when it is really
- needed. small performance improvement.
-
-Tue Feb 24 00:19:33 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/pathname.rb (Pathname#foreachline): removed wrongly
- resurrected method. [ruby-dev:38065]
-
-Mon Feb 23 20:39:21 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (inspect_timespec_as_abstime): new function to
- show struct timespec.
- (ancillary_inspect): use it for SCM_TIMESTAMPNS on GNU/Linux.
-
-Mon Feb 23 20:30:06 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (inspect_bintime_as_abstime): new function to
- show struct bintime.
- (ancillary_inspect): use it for SCM_BINTIME on FreeBSD.
-
- * ext/socket/mkconstants.rb: define SCM_BINTIME.
-
-Mon Feb 23 20:18:49 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (inspect_timeval_as_abstime): use time_t
- variable to avoid a warning on environments which use long as
- tv_sec as NetBSD.
-
-Mon Feb 23 15:53:30 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * array.c (rb_ary_index, rb_ary_rindex): We know that argc is not
- zero when we reach here.
-
- * array.c (rb_ary_initialize, rb_ary_index): Shrink a double
- space. (NFC)
-
-Mon Feb 23 14:47:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/fileutils.rb (mv): added description for the case of
- different partitions. [ruby-talk:329072]
-
-Mon Feb 23 10:19:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (USE_SYMBOL_AS_METHOD_NAME): Module#methods,
- #singleton_methods and so on return Symbols. [ruby-talk:328775]
-
-Mon Feb 23 10:15:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * README.EXT, README.EXT.ja: added macros for the Compatibilities.
-
-Mon Feb 23 03:19:37 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: define SO_TIMESTAMPNS and SCM_TIMESTAMPNS
- if available.
-
-Mon Feb 23 02:54:31 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_inspect): use SCM_TIMESTAMP instead
- of SO_TIMESTAMP. SCM_TIMESTAMP != SO_TIMESTAMP on MacOS X.
-
-Mon Feb 23 02:44:42 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (inspect_timeval_as_abstime): new function.
- (ancillary_inspect): use it for SO_TIMESTAMP.
-
-Mon Feb 23 02:26:44 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (inspect_timeval_as_interval): renamed from
- inspect_timeval.
-
-Mon Feb 23 02:10:09 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (inspect_timeval): fix the size test.
-
-Sun Feb 22 22:42:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (tr_trans): should recalculate coderange.
- [ruby-core:22326] (reopened at [ruby-core:22328])
-
-Sun Feb 22 20:09:29 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (inspect_linger): message refined.
-
-Sun Feb 22 19:28:08 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/init.c (s_recvfrom): use rb_io_wait_readable after
- recvfrom.
-
-Sun Feb 22 18:40:04 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (inspect_errno): new function.
- (sockopt_inspect): use inspect_errno for SO_ERROR.
-
-Sun Feb 22 15:11:51 2009 Tanaka Akira <akr@fsij.org>
-
- * re.c (Init_Regexp): define Regexp::FIXEDENCODING. [ruby-dev:38066]
-
-Sun Feb 22 14:33:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (tr_trans): should not be affected by the encoding of
- replacement unless actually modified. [ruby-talk:328967]
- [ruby-core:22326]
-
-Sun Feb 22 13:38:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/init.c (s_recvfrom_nonblock): handles EAGAIN too.
-
- * ext/socket/init.c (s_accept_nonblock): ditto, and EPROTO depends
- on platforms.
-
-Sun Feb 22 13:03:12 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * eval.c (ruby_options): the evaluator now expects iseq instead of tree.
-
- * ruby.c (ruby_process_options): ditto.
-
-Sun Feb 22 13:03:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (configure): unset PWD to use symlink to building
- directory.
-
- * Makefile.in (up): cd doesn't need LC_TIME, VCS needs.
-
-Sun Feb 22 10:43:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (method_missing): should not pop cfp if missing method
- is method_missing. [ruby-core:22298]
-
- * vm_eval.c (rb_raise_method_missing): new function to directly
- raise NoMethodError.
-
- * vm_insnhelper.c (vm_call_method): fixed the case method_missing
- is missing.
-
-Sun Feb 22 02:15:40 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_recvmsg_internal): handle EMSGSIZE as
- well.
-
-Sun Feb 22 02:03:46 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_recvmsg_internal): check max length
- overflow.
-
-Sun Feb 22 01:52:30 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_recvmsg_internal): don't call
- discard_cmsg_resource when EMFILE.
-
-Sun Feb 22 01:48:51 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_recvmsg_internal): gc when SCM_RIGHTS
- hit the file descriptor limit.
-
-Sun Feb 22 00:51:58 2009 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_getpartial): error message describes what should be
- waited after nonblocking error.
- (rb_io_write_nonblock): ditto.
-
- * ext/socket/init.c (s_recvfrom_nonblock): ditto.
- (s_accept_nonblock): ditto.
-
- * ext/socket/socket.c (sock_connect_nonblock): ditto.
-
- * ext/socket/ancdata.c (bsock_sendmsg_internal): ditto.
- (bsock_recvmsg_internal): ditto.
-
-Sun Feb 22 00:31:42 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_recvmsg_internal): check recvmsg error
- earlier.
-
-Fri Feb 20 23:28:11 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * util.c (rv_alloc, freedtoa): use our normal xmalloc()/xfree() because
- couldn't free the returned pointer from ruby_dtoa().
-
- * missing/vsnprintf.c (cvt): receive buffer and use/return it instead
- of returning the pointer returned from BSD__dtoa().
-
- * missing/vsnprintf.c (BSD_vfprintf): pass buf to cvt() as the buffer.
- [ruby-core:22184]
-
-Thu Feb 19 22:59:09 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (make_io_for_unix_rights): cmsg_len may be
- bigger than msg_controllen on 4.4BSD at least.
- freeze unix_rights array.
-
-Thu Feb 19 22:17:38 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_recvmsg_internal): fix exception.
-
-Thu Feb 19 21:13:03 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_unix_rights): method renamed.
-
-Thu Feb 19 15:47:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * template/fake.rb.in: extracted from Makefile.in.
-
- * configure.in (fake.rb): prefixed with $(arch)-.
-
-Thu Feb 19 15:39:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/ossl_ocsp.c (ossl_ocspbres_verify): OCSP_basic_verify
- returns positive value on success, not non-zero. [ruby-core:21762]
-
-Thu Feb 19 15:17:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tmpdir.rb (@@systmpdir): File.expand_path also joins paths.
-
-Thu Feb 19 15:14:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/etc/etc.c (etc_each_group): defines only when Etc::Group is
- available.
-
-Thu Feb 19 15:11:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_intern.h (translit_char): moved from ruby.c.
-
- * load.c (load_ext): transliterates file separators and back if
- needed.
-
- * symbian/setup (DLN_NEEDS_ALT_SEPARATOR): defined.
-
-Thu Feb 19 14:48:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, */Makefile.sub (LOAD_RELATIVE): moved from ruby.c
-
-Thu Feb 19 14:39:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (darwin): uses -unexported_symbol option of ld instead
- of objcopy
-
- * configure.in (darwin): makes dylib instead of so.
-
-Thu Feb 19 14:22:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): added phony targets.
-
- * lib/mkmf.rb (create_makefile): creates target directories before
- copying. [ruby-core:21958]
-
- * lib/mkmf.rb (create_makefile): removes directories in the depth
- order.
-
-Thu Feb 19 13:56:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_home_dir): checks if HAVE_PWD_H. [ruby-dev:38049]
-
-Thu Feb 19 08:45:48 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * ext/socket/rubysocket.h: add "#include <sys/stat.h>"
-
-Thu Feb 19 03:42:48 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_rights): new method.
- (make_io_for_rights): new function to allocate
- IOs for FDs in SCM_RIGHTS message.
- (bsock_recvmsg_internal): use make_io_for_rights. So the FDs can be
- closed by GC.
-
-Thu Feb 19 03:28:59 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * README.EXT, README.EXT.ja: Improve the document about
- rb_scan_args() even more.
-
-Thu Feb 19 03:12:51 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_file_exhaustive.rb: skip some tests if euid == 0.
- a patch from Lucas Nussbaum in [ruby-core:22209].
-
-Thu Feb 19 03:00:49 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * README.EXT, README.EXT.ja: Improve the document about
- rb_scan_args().
-
-Wed Feb 18 22:47:01 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (discard_cmsg_resource): new function to close
- file descriptors in control message.
- (bsock_recvmsg_internal): call discard_cmsg_resource before retrying
- recvmsg.
-
-Wed Feb 18 21:47:37 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_recvmsg_internal): prevent misalignment.
-
-Wed Feb 18 21:34:30 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_sendmsg_internal): prevent misalignment.
-
-Wed Feb 18 21:09:43 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_recvmsg_internal): reduce code on
- environments which have no control message.
-
-Wed Feb 18 20:27:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (OBJCOPY): set ac_cv_prog_ac_ct_OBJCOPY to do nothing
- on cygwin and mingw because symbols are exported by def file.
-
-Wed Feb 18 15:35:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_chown): use chown unless HAVE_FCHOWN.
-
- * io.c (pipe_open): sarg is always used unless HAVE_FORK.
-
-Wed Feb 18 15:23:34 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * bootstraptest/runner.rb: Use RUBY_DESCRIPTION if defined.
-
-Wed Feb 18 14:33:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_resurrect), string.c (rb_str_resurrect): new
- functions based on [ruby-dev:37983]
-
- * insns.def (putstring, duparray): use rb_{ary,str}_resurrect().
-
- * iseq.c (iseq_data_to_ary): needs to result TS_VALUE.
-
-Wed Feb 18 12:35:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_extname): fix for spaces before extension.
- [ruby-dev:38044]
-
-Wed Feb 18 12:00:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): suppress a warning. named magic
- numbers.
-
-Wed Feb 18 10:29:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_start_func_2): do not delete main thread from
- living_threads. [ruby-core:19385], [ruby-core:22158]
-
-Wed Feb 18 01:05:05 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl: avoid cyclic require.
-
- * ext/openssl/lib/openssl/ssl-internal.rb: renamed from ssl.rb
-
- * ext/openssl/lib/openssl/x509-internal.rb: renamed from x509.rb.
-
- * lib/net/imap.rb: require openssl, instead of openssl/ssl.
-
- * lib/net/pop.rb: require openssl, instead of openssl/ssl.
-
- [ruby-dev:38018]
-
-Wed Feb 18 00:55:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/etc/etc.c (Etc::Passwd.each, Etc::Group.each): new methods.
- [ruby-dev:37999]
-
-Tue Feb 17 23:25:01 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_sendmsg_internal): make the padding
- removing only on NetBSD.
-
-Tue Feb 17 19:39:04 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_sendmsg_internal): should not remove the
- last padding of control messages, basically.
-
-Tue Feb 17 12:50:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_shared_replace): no need for
- str_make_independent.
-
-Tue Feb 17 05:41:08 2009 Koichi Sasada <ko1@atdot.net>
-
- * compile.c: fix to add "ensure" codes across "while" clause
- before "return" expression. [ruby-dev:37967]
-
- * bootstraptest/test_flow.rb: add a test.
-
-Tue Feb 17 01:53:35 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: generate rb_define_const directly for
- rdoc.
-
- * ext/.document: add socket/constdefs.c.
-
- * ext/socket/constants.c (sock_define_const): removed.
- (sock_define_uconst): ditto.
- (rb_mSockConst): new static variable.
-
-Mon Feb 16 23:14:51 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (bsock_sendmsg_internal) [OpenBSD]: don't remove
- the last padding to prevent sendmsg failure in test_udp_server in
- test/socket/test_socket.rb on OpenBSD 4.4.
-
-Mon Feb 16 21:59:32 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/setup: Update Symbian config to match recent changes in missing/alloca.c
-
-Mon Feb 16 17:04:14 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * class.c (rb_scan_args), README.EXT, README.EXT.ja: Add support
- for specifying the number of the trailing mandatory arguments.
- Update the documents accordingly. [ruby-dev:37995]
-
-Mon Feb 16 16:46:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * debug.c (set_debug_option): added rtc_error option.
-
- * win32/Makefile.sub (CRTDEFFLAGS): separated from DEFS.
-
- * win32/win32.c (rtc_error_handler): ignores RTC errors unless
- rtc_error debug option is given.
-
- * win32/win32.c (rb_w32_sysinit): suppress useless CRT assertions.
- [ruby-core:22116]
-
-Sun Feb 15 21:43:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/ostruct.rb (OpenStruct#new_ostruct_member): checks if frozen.
- [ruby-talk:328195], [ruby-core:22142]
-
-Sun Feb 15 21:22:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions): aliases
- assert_not_ methods.
-
-Sun Feb 15 16:57:35 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/securerandom.rb (SecureRandom.urlsafe_base64): new method.
-
-Sun Feb 15 14:58:07 2009 Tanaka Akira <akr@fsij.org>
-
- * hash.c (hash_i): use Murmurhash.
-
-Sun Feb 15 11:45:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_define_hooked_variable): suppress false assertion
- with VC9. [ruby-core:22115]
-
-Sun Feb 15 08:35:33 2009 Tanaka Akira <akr@fsij.org>
-
- * test/test_pp.rb: extract from lib/pp.rb.
-
- * test/test_prettyprint.rb: extract from lib/prettyprint.rb.
-
- * test/test_tsort.rb: extract from lib/tsort.rb.
-
-Sun Feb 15 06:34:22 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/time.rb (Time.parse): raise ArgumentError if Date._parse don't
- extract date information. [ruby-core:20912]
-
-Sun Feb 15 04:48:08 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * string.c (rb_hash_uint32, rb_hash_uint, rb_hash_start, rb_hash_end),
- include/ruby/intern.h: add Murmurhash API. [ruby-dev:37784]
-
- * complex.c (nucomp_hash), array.c (rb_ary_hash), time.c (time_hash),
- string.c (rb_str_hash), object.c (rb_obj_hash), range.c
- (range_hash), struct.c (rb_struct_hash), hash.c (rb_any_hash),
- rational.c (nurat_hash): use Murmurhash. [ruby-dev:37784]
-
-Sun Feb 15 03:50:21 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * hash.c (rb_hash): always return a fixnum value because a return
- value of rb_hash may be used as a hash value itself and bignums have
- no unique VALUE.
-
- * test/ruby/test_hash.rb: add a test for above.
-
-Sun Feb 15 00:45:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_uniq_bang, rb_ary_uniq): unique by the result of
- given block. [ruby-dev:37998]
-
-Sun Feb 15 00:39:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (ary_resize_capa): should not overwrite outside embedded
- array.
-
-Sat Feb 14 20:18:19 2009 Tanaka Akira <akr@fsij.org>
-
- * test/test_time.rb: extracted from lib/time.rb.
-
-Sat Feb 14 19:20:15 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/pathname.rb: obsolete methods removed.
- [ruby-core:21564]
-
-Sat Feb 14 15:46:01 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/pathname.rb (Pathname#binread): added. [ruby-dev:37952]
-
-Sat Feb 14 13:14:18 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * iseq.c: remove nil parameter from Proc#parameters
- after rest appeared.
-
-Sat Feb 14 07:23:52 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_external_str_new_with_enc): change evaluation order
- for speed.
-
-Sat Feb 14 02:20:04 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/sockport.h (SET_SA_LEN): cast to void for suppressing a
- warning.
-
-Fri Feb 13 23:37:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/win32/lib/Win32API.rb (Win32API#initialize): DL.dlopen
- raises DLError.
-
-Fri Feb 13 21:13:19 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (Init_socket): define TCPServer#listen and
- UNIXServer#listen here for rdoc.
-
-Fri Feb 13 20:59:48 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (extract_ipv6_pktinfo): set sa_len for 4.4BSD.
-
-Fri Feb 13 15:34:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (simple_default_value): removed. default values of optional
- parameters are not available still now. [ruby-dev:37980]
-
-Fri Feb 13 15:11:11 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm_eval.c (eval_string_with_cref): use rb_vm_get_ruby_level_next_cfp()
- instead of vm_get_ruby_level_caller_cfp(). checking a upper frame
- is not enough. [ruby-dev:37984]
-
- * proc.c, vm_core.h: declare rb_vm_get_ruby_level_next_cfp()
- on vm_core.h.
-
-Fri Feb 13 15:01:40 2009 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (rb_fiber_alive_p): fix to return true instead of 0.
- [ruby-dev:37991]
-
- * test/ruby/test_fiber.rb: add a test for Fiber#alive?
-
-Fri Feb 13 09:43:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ac_cv_func_flock): using flock defined in
- win32/win32.c on mingw.
-
-Fri Feb 13 01:45:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_set_sequence, compile_dstr_fragments),
- (iseq_compile_each): hides other internal objects.
-
- * compile.c (iseq_compile_each): just freeze xstr.
-
-Fri Feb 13 00:48:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def (defineclass): try to autoload const to be overridden.
-
-Thu Feb 12 23:22:29 2009 Tanaka Akira <akr@fsij.org>
-
- * test/socket/test_socket.rb (test_udp_server): filter out unreachable
- addresses. [ruby-dev:37970]
-
-Thu Feb 12 22:51:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (hide_obj): OBJ_FREEZE() is not an expression. a patch
- from nagachika <nagachika00 AT gmail.com> at [ruby-dev:37977].
-
- * compile.c (insn_set_sc_state): fixed typo.
-
-Thu Feb 12 12:36:35 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/basicsocket.c (bsock_getpeereid): implemented for Solaris
- using getpeerucred.
-
- * ext/socket/extconf.rb: check ucred.h and getpeerucred.
-
- * ext/socket/rubysocket.h: include ucred.h if available.
-
-Thu Feb 12 19:42:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (compile_array_, defined_expr, iseq_compile_each): hide
- and freeze internal literal objects, to prevent from modifying.
- [ruby-dev:37959]
-
- * iseq.c (insn_operand_intern): copy internal literal objects.
-
- * insns.def (putstring, duparray): ditto.
-
- * string.c (rb_str_replace): exported.
-
-Thu Feb 12 17:17:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_ungetc): calculates new position
- before reallocation. [Bug#1099]
-
-Thu Feb 12 16:50:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: a patch to build on GNU/kOpenSolaris from Rober
- Millan at [ruby-core:21888].
-
-Thu Feb 12 15:28:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * iseq.c (simple_default_value): allow plain strings as default
- values.
-
-Wed Feb 11 18:09:41 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * gc.c (define_final, undefine_final): shouldn't add/remove finalizer
- of frozen objects.
-
- * gc.c (undefine_final): should remove FL_FINALIZE flag.
- [ruby-dev:37964] (also see [ruby-dev:37959])
-
-Wed Feb 11 17:37:41 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Socket.udp_server_sockets): call the block
- if given. close the sockets when the block exits.
- (Socket.udp_server_loop): use udp_server_sockets in block form.
-
-Wed Feb 11 17:34:16 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Socket.tcp_server_sockets): call the block
- if given. close the sockets when the block exits.
- (Socket.tcp_server_loop): use tcp_server_sockets in block form.
-
-Wed Feb 11 17:01:52 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Socket.unix_server_loop): use
- unix_server_socket with a block.
-
-Wed Feb 11 16:54:26 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Socket.unix_server_socket): close the
- socket when the block exits.
-
-Wed Feb 11 16:50:59 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Socket.unix_server_socket): call the block
- if given. remove the socket file when the block exits.
-
-Wed Feb 11 16:44:20 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_s_ip_pktinfo): make 3rd argument
- optional.
-
-Wed Feb 11 15:47:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (ary_make_shared): returns shared root array itself, and
- frozen array can be shared.
-
-Wed Feb 11 14:46:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def (setspecial, putstring): fixed typos in rdoc.
-
- * insns.def (toregexp): uses rb_ary_tmp_new(), and clears it after
- used.
-
-Wed Feb 11 14:08:23 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (anc_inspect_socket_rights): return 1 on
- success. 0 on failure.
- (anc_inspect_passcred_credentials): ditto.
- (anc_inspect_socket_creds): ditto.
- (anc_inspect_socket_creds): ditto.
- (anc_inspect_socket_creds): ditto.
- (anc_inspect_ip_recvdstaddr): ditto.
- (anc_inspect_ip_pktinfo): ditto.
- (anc_inspect_ipv6_pktinfo): ditto.
- (ancillary_inspect): check family.
-
-Wed Feb 11 12:55:07 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (anc_inspect_ip_pktinfo): make result bit
- succinct.
- (Init_ancdata): fix number of arguments.
-
-Wed Feb 11 11:47:41 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ipsocket.c (Init_ipsocket): undef getpeereid at IPSocket.
-
-Wed Feb 11 10:16:34 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/extconf.rb: check getpeereid.
-
- * ext/socket/basicsocket.c (bsock_getpeereid): new method.
-
-Wed Feb 11 09:58:59 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Socket::UDPSource#inspect): fix variable
- name.
-
-Wed Feb 11 00:38:16 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (sock_gethostname): use HOST_NAME_MAX.
-
- * ext/socket/raddrinfo.c (make_ipaddr): local variable renamed.
-
-Tue Feb 10 23:44:53 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/init.c (struct recvfrom_arg): use struct
- sockaddr_storage.
- (recvfrom_blocking): follow struct recvfrom_arg change.
- (s_recvfrom): ditto.
- (s_recvfrom_nonblock): use struct sockaddr_storage.
-
- * ext/socket/socket.c (sock_accept): use struct sockaddr_storage.
- (sock_accept_nonblock): ditto.
- (sock_sysaccept): ditto.
-
- * ext/socket/ancdata.c (bsock_recvmsg_internal): use struct
- sockaddr_storage.
-
-Tue Feb 10 23:30:32 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/basicsocket.c (bsock_getpeername): use struct
- sockaddr_storage.
- (bsock_local_address): ditto.
- (bsock_remote_address): ditto.
-
-Tue Feb 10 21:26:33 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Socket.udp_server_sockets): new method.
- (Socket.udp_server_loop_on): new method.
- (Socket.udp_server_loop): new method
- (Socket.ip_sockets_port0): extracted from tcp_server_sockets_port0.
- (Socket::UDPSource): new class.
-
-Tue Feb 10 21:14:43 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (sockaddr_obj): fill pfamily.
-
-Tue Feb 10 21:09:23 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (sockopt_s_bool): new method.
- (sockopt_bool): new method.
-
-Tue Feb 10 20:58:47 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (sockopt_family_m): renamed from sockopt_family.
- (sockopt_level_m): renamed from sockopt_level.
- (sockopt_optname_m): renamed from sockopt_optname.
- (inspect_local_peercred): follow the renaming.
- (Init_sockopt): ditto.
-
-Tue Feb 10 20:56:07 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (anc_inspect_socket_creds): refactored to avoid
- a rb_str_cat2 call.
-
-Tue Feb 10 04:34:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (when): makes parentheses balanced.
-
-Tue Feb 10 01:28:49 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ip_cmsg_type_to_sym): renamed from
- cmsg_type_to_sym.
-
-Tue Feb 10 01:22:56 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (sockopt_inspect): refactored.
-
-Tue Feb 10 01:02:16 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: generate intern_family_noprefix.
-
- * ext/socket/option.c (sockopt_inspect): use intern_family_noprefix
- not to show AF_ prefix.
-
- * ext/socket/ancdata.c (ancillary_inspect): ditto.
-
-Mon Feb 9 23:21:29 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/constants.c (level_arg): use unknown_level_to_int for
- non internet protocol.
- (optname_arg): use only so_optname_to_int for non internet protocol.
- (cmsg_type_arg): use only scm_optname_to_int for non internet
- protocol.
-
- * ext/socket/mkconstants.rb: generate unknown_level_to_int.
- rename iplevel_to_int to ip_level_to_int.
-
-Mon Feb 9 23:04:27 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: rename level_to_int to iplevel_to_int.
- rename intern_level to intern_iplevel.
-
- * ext/socket/constants.c: follow the renaming.
-
- * ext/socket/option.c: ditto.
-
- * ext/socket/ancdata.c: ditto.
-
-Mon Feb 9 22:52:13 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/rubysocket.h (level_arg): add family argument.
- (optname_arg): ditto.
- (cmsg_type_arg): ditto.
- (rb_sock_getfamily): declared.
-
- * ext/socket/constants.c (level_arg): add family argument.
- (optname_arg): ditto.
- (cmsg_type_arg): ditto.
-
- * ext/socket/init.c (rb_sock_getfamily): defined.
-
- * ext/socket/option.c (sockopt_initialize): give family for level_arg
- and optname_arg.
- (sockopt_s_int): ditto.
-
- * ext/socket/basicsocket.c (bsock_setsockopt): ditto.
- (bsock_getsockopt): ditto.
-
- * ext/socket/ancdata.c (ancillary_initialize): ditto.
- (ancillary_s_int): ditto.
- (ancillary_cmsg_is_p): ditto.
- (bsock_sendmsg_internal): ditto.
- (bsock_recvmsg_internal): use rb_sock_getfamily.
-
-Mon Feb 9 21:48:59 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_inspect): show address family.
-
-Mon Feb 9 20:19:36 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/basicsocket.c (bsock_getsockname): use sockaddr_storage.
-
-Mon Feb 9 20:11:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/win32ole/win32ole.c (load_conv_function51932): fixed for the
- case IMultiLanguage is not available. [ruby-dev:37950]
-
-Mon Feb 9 20:04:35 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (inspect_int): return 1/0 on success/failure.
- (inspect_uint): ditto.
- (inspect_linger): ditto.
- (inspect_socktype): ditto.
- (inspect_timeval): ditto.
- (inspect_peercred): ditto.
- (inspect_local_peercred): ditto.
- (sockopt_inspect): refactored.
-
-Mon Feb 9 20:00:26 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: more constants for Solaris.
-
-Mon Feb 9 19:59:18 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/basicsocket.c (bsock_getsockopt): refine address family
- examination.
-
-Mon Feb 9 19:52:32 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (sockopt_initialize): argument conversion
- reordered.
-
-Mon Feb 9 19:46:22 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (ancillary_initialize): add family argument.
- (ancdata_new): ditto.
- (ancillary_s_int): ditto.
- (ancillary_family): new function.
- (ancillary_family_m): new method.
- (ancillary_s_ip_pktinfo): follow ancdata_new change.
- (ancillary_s_ipv6_pktinfo): ditto.
- (bsock_recvmsg_internal): examine the socket address family.
-
-Mon Feb 9 11:31:09 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (io_encoding_set): ignore second argument when external and
- internal are same. [ruby-dev:37939]
-
-Mon Feb 9 09:05:12 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (inspect_local_peercred): check version.
- (sockopt_inspect): suppress warning.
-
-Mon Feb 9 02:04:03 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (inspect_peercred): struct ucred contains
- effective uid/gid.
-
-Mon Feb 9 00:44:45 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (sockopt_inspect): add ifdef guard for
- LOCAL_PEERCRED.
-
-Mon Feb 9 00:37:06 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (inspect_local_peercred): cr_uid is a effective
- uid, not a real uid.
-
-Mon Feb 9 00:30:56 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/extconf.rb: check sys/param.h and sys/ucred.h.
-
- * ext/socket/rubysocket.h: include sys/param.h and sys/ucred.h.
-
- * ext/socket/option.c (inspect_local_peercred): new function to show
- LOCAL_PEERCRED socket option on FreeBSD.
- (sockopt_inspect): show as LOCAL_* socket option if AF_UNIX and level
- is 0.
-
-Mon Feb 9 00:01:47 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/rubysocket.h (sockopt_new): add family argument.
-
- * ext/socket/option.c (sockopt_initialize): add vfamily argument.
- (sockopt_new): add family argument and record it in the object.
- (sockopt_family): new method.
- (sockopt_s_int): add vfamily argument.
- (sockopt_inspect): show family.
-
- * ext/socket/basicsocket.c (bsock_getsockopt): check address family
- using getsockname.
-
-Sun Feb 8 23:37:17 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * enumerator.c (enumerator_with_index): receives one argument which
- represents a start offset. [ruby-dev:37921]
-
-Sun Feb 8 23:28:05 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * include/ruby/st.h, st.c: order entries by a linked list instead of
- a loop to fix iteration miss when hash is modified during iteration.
- [ruby-dev:37910]
-
-Sun Feb 8 23:22:35 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c (inspect_peercred): new function to show
- SO_PEERCRED socket option on GNU/Linux.
-
-Sun Feb 8 22:44:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/backward/rubysig.h (rb_thread_blocking_region_begin),
- (rb_thread_blocking_region_end): marked as deprecated.
-
- * include/ruby/backward/rubysig.h (TRAP_BEG): fix for C++. a
- patch from Aman Gupta at [ruby-core:21934]
-
-Sun Feb 8 21:47:50 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/extconf.rb: check struct cmsgcred.
-
- * ext/socket/ancdata.c (anc_inspect_passcred_credentials): add
- "(ucred)".
- (anc_inspect_socket_creds): show struct cmsgcred too, for FreeBSD.
-
-Sun Feb 8 21:05:35 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/drb/extservm.rb (DRb::ExtServManager#invoke_service_command):
- detach spawned process. [ruby-dev:37936]
-
-Sun Feb 8 20:30:29 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/extconf.rb: check struct sockcred.
-
- * ext/socket/ancdata.c (anc_inspect_socket_creds): new function to
- show SCM_CREDS on NetBSD.
-
-Sun Feb 8 19:05:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/backward/rubysig.h: extern "C" was missing.
- [ruby-core:21929]
-
-Sun Feb 8 18:46:15 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (anc_inspect_passcred_credentials): new
- function to show SCM_CREDENTIALS on GNU/Linux.
-
-Sun Feb 8 18:34:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_s_binread): ensures file path. [ruby-dev:37940]
-
-Sun Feb 8 13:52:02 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (init_unix_addrinfo): add socktype argument.
- (addrinfo_initialize): follow init_unix_addrinfo change.
- (addrinfo_s_unix): add optional argument: socktype
-
-Sun Feb 8 13:09:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_APPEND_OPTION, RUBY_APPEND_OPTIONS),
- (RUBY_PREPEND_OPTION, RUBY_PREPEND_OPTIONS): add option(s)
- without duplication.
-
- * configure.in (RUBY_DEFINE_IF): changed parameter order, now
- condition comes first.
-
- * configure.in (universal_binary): checks architecture macros, and
- improved thin load paths.
-
-Sun Feb 8 09:41:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * runruby.rb: gets extout and arch from rbconfig.rb.
-
-Sat Feb 7 21:26:15 2009 Tanaka Akira <akr@fsij.org>
-
- * test/socket/test_addrinfo.rb (test_family_addrinfo): don't use
- www.ruby-lang.org.
- http://d.hatena.ne.jp/nagachika/20090204/working_for_0f0e
-
-Sat Feb 7 18:02:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (--with-arch): added new option to support
- universal binary. replaced --enable-fat-binary option which
- didn't work actually.
-
- * configure.in (RUBY_FUNC_ATTRIBUTE): added conditional test.
-
- * configure.in (ac_cv_type_getgroups): declared because getgroups()
- fills rest of the buffer with garbage on Rosetta.
-
- * configure.in (alloca): defines only for powerpc, but always
- create empty object to suppress ld warning.
-
- * configure.in (LIBRUBY_DLDFLAGS): set compatibility version with
- TEENY.
-
- * configure.in (CFLAGS, LDFLAGS): separates ARCH_FLAG.
-
- * configure.in (arch): renamed to "universal" from "fat".
-
- * Makefile.in (ARCH_FLAG): added.
-
- * include/ruby/defines.h (WORDS_BIGENDIAN): uses
- AC_APPLE_UNIVERSAL_BUILD.
-
- * missing/alloca.c (alloca): defines only if C_ALLOCA is defined.
-
-Sat Feb 7 12:31:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * runruby.rb: added --precommand and --show options.
-
- * runruby.rb: added --cpu option.
-
- * runruby.rb: skips version check in rbconfig.rb.
-
-Sat Feb 7 11:44:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (have_header): needs dependent headers if trying to
- compile.
-
- * ext/socket/extconf.rb: net/if.h depends on other headers.
-
-Sat Feb 7 04:02:37 2009 Tanaka Akira <akr@fsij.org>
-
- * dir.c (dir_read): don't disable rdoc.
-
-Fri Feb 6 23:28:33 2009 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_fread): use rb_io_wait_readable for retry
- avoid Errno::EINTR on ruby -e 'trap(:CHLD) {}; spawn("sleep 1"); STDIN.read'
-
-Fri Feb 6 22:36:11 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * thread_pthread.c (native_thread_create) [__SYMBIAN32__]: reduced pthread stack size.
-
- * thread_pthread.c (thread_timer) [__SYMBIAN32__]: compiled out unsupported yet signal-related functionality.
-
- * io.c (pipe_open) [__SYMBIAN32__]: fixed compile time error.
-
-Fri Feb 6 22:11:46 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * include/ruby/defines.h [__SYMBIAN32__]: included <sys/select.h> for fd_set definition
-
-Fri Feb 6 21:58:24 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/missing-pips.c: added a stub for missing PIPS function execl.
-
- * process.c (rb_proc_exec) [__SYMBIAN32__]: removed conditional around execl function call.
-
-Fri Feb 6 20:37:42 2009 Tanaka Akira <akr@fsij.org>
-
- * signal.c (register_sigaltstack): ignore sigaltstack error.
- It fails on OpenBSD 4.4 when pthread library is linked.
-
-Fri Feb 6 18:18:07 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_readdir_with_enc): fallback to OS's conversion
- when ASCII-8BIT is passed.
-
-Fri Feb 6 17:19:23 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/{dir.h, win32.c} (rb_w32_readdir_with_enc): new function to
- read entry with specified enc.
-
- * win32/win32.c (readdir_internal): extract from rb_w32_opendir().
-
- * win32/win32.c (opendir_internal): extract from rb_w32_readdir().
-
- * dir.c (dir_read, dir_each): use new READDIR macro instead of readdir()
- to pass enc for special version of readdir, such as above.
-
-Fri Feb 6 12:11:24 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ruby.c (process_options): set initial default_external before -r.
-
-Fri Feb 6 12:03:47 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ruby.c (process_options): -K and -E in shebang should be reflect to
- default_external. [ruby-dev:37920]
-
-Fri Feb 6 07:52:57 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/pty.c (chfunc): type fixed.
-
-Fri Feb 6 02:51:59 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_each_codepoint): update RDoc for
- String#codepoints. a patch from Radoslaw Bulat in
- [ruby-core:21835]
-
-Fri Feb 6 01:09:13 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * cont.c (cont_mark, cont_capture, cont_restore_1): use #else instead
- of #elif. a patch from NISHIMATSU Takeshi <t_nissie at yahoo.co.jp>
- in [ruby-list:45856].
-
-Thu Feb 5 20:28:27 2009 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h (rb_run_exec_options_err): renamed from
- rb_run_exec_options.
- (rb_exec_err): renamed from rb_exec.
- (rb_fork_err): renamed from rb_fork.
- (rb_spawn_err): renamed from rb_spawn.
- (rb_run_exec_options): declared with 1.9.1 compatible signature.
- (rb_exec): ditto.
- (rb_fork): ditto.
- (rb_spawn): ditto.
-
- * process.c (rb_run_exec_options_err): renamed from
- rb_run_exec_options.
- (rb_exec_err): renamed from rb_exec.
- (rb_fork_err): renamed from rb_fork.
- (rb_spawn_err): renamed from rb_spawn.
- (rb_run_exec_options): defined.
- (rb_exec): ditto.
- (rb_fork): ditto.
- (rb_spawn): ditto.
-
- * io.c: follow above change.
-
- * ext/pty/pty.c: follow above change.
-
- [ruby-dev:37893]
-
-Thu Feb 5 19:58:40 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket: AddrInfo is renamed to Addrinfo. [ruby-dev:37876]
-
-Thu Feb 5 16:18:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_SITE_LIB_PATH, RUBY_VENDOR_LIB_PATH): fix for
- NetBSD.
-
-Thu Feb 5 16:04:29 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): follow recent changes about paths.
-
-Thu Feb 5 14:26:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (MAJOR, MINOR, TEENY): uses RUBY_VERSION_*.
-
- * mkconfig.rb (prefix): uses ruby_version in config.status.
-
-Thu Feb 5 12:24:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_uniq): gets rid of copying.
-
-Thu Feb 5 12:01:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (ary_add_hash): split from ary_make_hash().
-
- * array.c (ary_make_hash): hide a Hash used internally.
-
- * array.c (ary_recycle_hash): clears internally used hash. this
- name came from [ruby-dev:37908].
-
- * array.c (rb_ary_diff, rb_ary_and, rb_ary_or, rb_ary_uniq_bang):
- recycle hashes.
-
-Thu Feb 5 11:21:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_LIB_VERSION): added for library version, to
- split from core version. [ruby-dev:37748]
-
- * configure.in (RUBY_LIB_PATH, etc): moved actual version
- dependent stuff to version.c.
-
- * ruby.c (ruby_init_loadpath_safe): ditto.
-
- * version.c (ruby_initial_load_paths): moved initial load path
- version depending on version from ruby.c.
-
- * version.h (RUBY_VERSION_{MAJOR,MINOR,TEENY}): now mean library
- and API version, and reverted to 1.9.1. [ruby-dev:37889]
-
-Thu Feb 5 07:39:33 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * ext/readline/readline.c (Init_readline): remove_history(0) may be
- NULL. [ruby-dev:37891]
-
-Thu Feb 5 03:55:22 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (LOCALTIME): should call tzset() before localtime_r().
- [ruby-dev:37896]
-
-Thu Feb 5 02:12:35 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
-
- * symbian/configure.bat: Updated Symbian configuration procedure to
- avoid creating files outside build directory
-
- * symbian/pre-build: ditto
-
- * symbian/setup: ditto
-
- * symbian/rubyu.def: removed
-
-Thu Feb 5 01:44:02 2009 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (make_econv_exception): refine error message for
- undefined conversion. [ruby-core:21828]
-
-Thu Feb 5 01:18:25 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (sock_s_socketpair): make 3rd argument optional.
-
- * ext/socket/unixsocket.c (unix_s_socketpair): follow the above
- change.
-
- * ext/socket/rubysocket.h (sock_s_socketpair): ditto.
-
-Thu Feb 5 00:09:39 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (addrinfo_ipv6_to_ipv4): new method.
-
-Wed Feb 4 21:59:31 2009 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (make_econv_exception): show U+XXXX form for undefined
- conversion error from UTF-8.
-
-Wed Feb 4 21:57:37 2009 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_dump): use MBCLEN_CHARFOUND_P properly.
-
-Wed Feb 4 21:55:38 2009 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb: refine success message.
-
-Wed Feb 4 19:10:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (id.h): updates from parse.h.
-
-Wed Feb 4 11:45:06 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/mkexports.rb: shouldn't export DllMain.
- reported at http://pc11.2ch.net/test/read.cgi/tech/1233686068/21
-
-Wed Feb 4 10:12:05 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * missing/vsnprintf.c (BSD_vfprintf): should support 't' format
- modifier to handle PRIdPTRDIFF. thanks for the info from
- Kazuhiro NISHIYAMA. [ruby-core:21807]
-
-Wed Feb 4 01:28:46 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/extconf.rb: fix struct in_pktinfo and struct in6_pktinfo
- detection.
-
-Wed Feb 4 00:32:59 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/etc/test_etc.rb(test_getpwnam, test_getgrgid, test_getgrnam):
- support an environment that has duplicative entries. a patch from
- Tomoyuki Chikanaga <chikanag at nippon-control-system.co.jp> in
- [ruby-dev:37882].
-
-Wed Feb 4 00:17:52 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Socket.tcp_server_sockets_port0): skip
- socket creation error.
-
-Tue Feb 3 23:37:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (load_file_internal): resets EOF flag after parse.
-
-Tue Feb 3 23:13:34 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_backtrace): always returns non-nil array if lev is
- negative. [ruby-core:21795]
-
-Tue Feb 3 21:19:06 2009 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/extconf.rb: checked rl_set_screen_size and
- rl_get_screen_size.
-
- * ext/readline/readline.c (readline_s_set_screen_size): added
- Readline.set_screen_size.
-
- * ext/readline/readline.c (readline_s_get_screen_size): added
- Readline.get_screen_size.
-
-Tue Feb 3 21:07:19 2009 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/readline.c (readline_s_set_completion_proc): set
- default if proc is nil. fix #1095
-
-Tue Feb 3 16:36:06 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * array.c (rb_ary_sort_by_bang): RDoc update.
-
- * NEWS: add Array#sort_by!.
-
-Tue Feb 3 16:23:16 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Socket.tcp_server_sockets_port0): new
- private function for allocating same port both IPv4 and IPv6.
- (Socket.tcp_server_sockets): use tcp_server_sockets_port0 for port 0.
-
-Tue Feb 3 14:12:10 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: validate data before sending to a server.
- [ruby-core:20320]
-
-Tue Feb 3 12:35:41 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (match_array): replace match_check().
-
- * re.c (match_values_at): ditto.
-
-Tue Feb 3 12:09:08 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (hmac_md5): should use String#ord to get ascii
- code from the one-character string.
-
-Tue Feb 3 11:25:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (load_lock): warn for circular require. [ruby-core:20794],
- [ruby-core:20797]
-
-Tue Feb 3 08:35:12 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb (Socket.tcp_server_sockets): extracted from
- Socket.tcp_server_loop.
- (Socket.accept_loop): ditto.
- (Socket.unix_server_socket): extracted from Socket.unix_server_loop.
- (Socket.unix_server_loop): use Socket.accept_loop.
-
-Tue Feb 3 08:21:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_readpartial.rb (make_pipe): readpartial does not
- work in text mode.
-
-Tue Feb 3 08:18:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cygwin/GNUmakefile.in (RUBYDEF): uses mkexports.rb on cygwin too.
-
- * win32/mkexports.rb (Exports::Cygwin): added.
-
-Tue Feb 3 08:10:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (Doxyfile): moved from Makefile.in.
-
- * template/Doxyfile.tmpl: split from Doxyfile.in.
-
-Tue Feb 3 08:01:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_write): use of cast expressions as lvalues
- is deprecated.
-
-Tue Feb 3 07:57:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/extconf.rb (in_pktinfo, in6_pktinfo),
- ext/socket/ancdata.c: defined in w32api/ws2tcpip.h on cygwin but
- cannot compile for some reason.
-
-Tue Feb 3 07:02:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing/langinfo.c (nl_langinfo_codeset): accepts iso-8859
- fragment. [ruby-core:21757]
-
-Tue Feb 3 07:01:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb (patchlevel): config.status may not contain
- PATCHLEVEL even if other version numbers exist.
-
-Mon Feb 2 23:43:00 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (Init_addrinfo): add AddrInfo#to_s as an
- alias of AddrInfo#to_sockaddr.
-
- * ext/socket/option.c (Init_sockopt): add Socket::Option#to_s as an
- alias of Socket::Option#data.
-
- [ruby-dev:37873]
-
-Mon Feb 2 21:04:13 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_sort_by_bang): RDoc update. [ruby-core:21742]
-
-Mon Feb 2 20:49:24 2009 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c: Introduce id_each to save rb_intern() and SYM2ID()
- calls.
-
-Mon Feb 2 19:55:51 2009 Tanaka Akira <akr@fsij.org>
-
- * test/socket/test_addrinfo.rb: use AddrInfo.getaddrinfo to generate
- IPv6 address. AddrInfo.ip generates IPv4 address for IPv4 mapped
- IPv6 address if --with-lookup-order-hack=INET.
- [ruby-dev:37868]
-
-Mon Feb 2 19:17:16 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * doc/NEWS-1.9.1: typo fixed: collect_all -> collect.
- [ruby-core:21706]
-
-Mon Feb 2 17:23:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cygwin/GNUmakefile.in (dir.o, win32.o): depend on win32/dir.h.
-
-Mon Feb 2 17:13:46 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * mkconfig.rb: patchlevel is sometimes minus.
-
- * win32/resource.rb: ditto.
-
-Mon Feb 2 17:11:23 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/ancdata.c (cmsg_type_to_sym): add #ifdef for no IPv6
- environment.
-
-Mon Feb 2 17:05:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_find_file_ext): should not be infected from other
- load paths.
-
-Mon Feb 2 16:33:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (dir_s_home): new method. [ruby-core:21454]
-
-Mon Feb 2 16:06:10 2009 Tanaka Akira <akr@fsij.org>
-
- * version.h: bump up to 1.9.2 patchlevel -1.
- yugui recommend "-1" strongly.
-
- * lib/rubygems/version.rb: accept negative patchlevel.
-
-Mon Feb 2 14:53:35 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (sock_initialize): make 3rd argument, protocol,
- optional.
-
-Mon Feb 2 14:47:53 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_sort_by_bang): new method. requested in
- [ruby-core:21709]
-
-Mon Feb 2 14:22:56 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/constants.c (cmsg_type_arg): INET6 check.
-
-Mon Feb 2 14:18:20 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/option.c: use INET6 instead of IPV6.
-
-Mon Feb 2 12:47:47 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/{options,raddrinfo}.c: use INET6 instead of AF_INET6 for
- VC++6.
-
-Mon Feb 2 12:41:52 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * complex.c (f_signbit): regard NaN as a positive value.
- [ruby-dev:37861].
-
-Mon Feb 2 12:39:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sample/test.rb (valid_syntax?), test/ruby/test_system.rb
- (TestSystem::valid_syntax?): use catch and throw instead of
- return inside BEGIN block.
-
-Mon Feb 2 11:45:10 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/rubysocket.h (cmsg_type_arg): declared.
- (Init_ancdata): ditto.
-
- * ext/socket/init.c (Init_socket_init): call Init_ancdata.
-
- * ext/socket/constants.c (cmsg_type_arg): defined.
-
- * ext/socket/depend: add dependency for ancdata.o.
-
- * ext/socket/mkconstants.rb: generate scm_optname_to_int.
- more constants.
-
- * ext/socket/extconf.rb: add ancdata.o.
-
- * ext/socket/ancdata.c: new file. new method
- BasicSocket#{sendmsg,sendmsg_nonblock,recvmsg,recvmsg_nonblock}
-
-Mon Feb 2 10:57:27 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c, win32/dir.h (open_dir_handle, rb_w32_opendir,
- move_to_next_entry, rb_w32_readdir, check_valid_dir): change backend
- API from A to W.
-
-Mon Feb 2 10:48:38 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/basicsocket.c (bsock_setsockopt): accept Socket::Option
- object.
- (bsock_getsockopt): return Socket::Option object.
-
- * ext/socket/option.c: new file.
-
- * ext/socket/rubysocket.h (rb_cSockOpt): declared.
- (sockopt_new): ditto.
- (Init_sockopt): ditto.
-
- * ext/socket/init.c (Init_socket_init): call Init_sockopt.
-
- * ext/socket/depend: add dependency for option.o
-
- * ext/socket/mkconstants.rb: generate intern_level, intern_so_optname,
- intern_ip_optname, intern_ipv6_optname, intern_tcp_optname,
- intern_udp_optname and intern_scm_optname.
-
- * ext/socket/extconf.rb: add option.o.
-
-Mon Feb 2 09:49:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_backtrace_each): progname is not available at
- initializing phase.
-
-Mon Feb 2 08:12:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/xmlrpc/server.rb (Server#serve): gets rid of hardcoded
- platform names.
-
- * lib/resolv.rb (Resolv::Hosts::DefaultFileName),
- (Resolv::DNS::Config.default_config_hash): tries win32/resolv on
- mswin64 too.
-
- * lib/rubygems/specification.rb (Gem::Specification#ruby_code):
- added mswin64.
-
- * lib/drb/extservm.rb (DRb::ExtServManager#invoke_service_command):
- spawn is better to start a process in background.
-
- * ext/extmk.rb: uses FNM_SYSCASE.
-
- * instruby.rb: installs win32.h on mswin64 platform.
- [ruby-core:21722]
-
-Mon Feb 2 07:36:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_backtrace_each): now takes an iterator function.
-
- * vm_core.h (rb_make_backtrace, rb_backtrace_each): added
- prototypes.
-
- * vm_dump.c (rb_vm_bugreport), vm_eval.c (rb_backtrace): gets rid
- of allocating objects. [ruby-core:21619]
-
- * vm_eval.c (rb_backtrace_each): new function which iterates over
- each backtrace info.
-
-Mon Feb 2 06:51:36 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * encoding.c (rb_filesystem_encoding): Windows' filesystem encoding is
- sometimes ANSI code page and sometimes OEM code page. we should check
- whether code page is used.
-
-Sun Feb 1 21:27:55 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (addrinfo_ipv4_private_p): new method.
- (addrinfo_ipv4_loopback_p): ditto.
- (addrinfo_ipv4_multicast_p): ditto.
-
-Sun Feb 1 16:10:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (Switch#summarize): strips an equal sign from
- short option, and fills right sides in shorter lines.
- [ruby-talk:326414]
-
-Sun Feb 1 05:19:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_const_get_0), vm_insnhelper.c (vm_get_ev_const):
- avoids infinite self recursion autoload. [ruby-core:21696]
-
-Sat Jan 31 22:50:38 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit/assertions.rb (assert_equal): show class in failure
- message if meaningful.
-
-Sat Jan 31 22:38:46 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb (Resolv::DNS#each_address): don't query IPv6 address
- if the host has no global IPv6 address.
-
-Sat Jan 31 22:29:05 2009 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (STR2CSTR): removed.
- (rb_str2cstr): removed.
-
- * object.c (rb_str2cstr): removed.
-
-Sat Jan 31 20:07:59 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (addrinfo_ipv6_unspecified_p): new method.
- (addrinfo_ipv6_loopback_p): ditto.
- (addrinfo_ipv6_multicast_p): ditto.
- (addrinfo_ipv6_linklocal_p): ditto.
- (addrinfo_ipv6_sitelocal_p): ditto.
- (addrinfo_ipv6_v4mapped_p): ditto.
- (addrinfo_ipv6_v4compat_p): ditto.
- (addrinfo_ipv6_mc_nodelocal_p): ditto.
- (addrinfo_ipv6_mc_linklocal_p): ditto.
- (addrinfo_ipv6_mc_sitelocal_p): ditto.
- (addrinfo_ipv6_mc_orglocal_p): ditto.
- (addrinfo_ipv6_mc_global_p): ditto.
-
-Sat Jan 31 19:09:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (rb_require_safe): raises when the path to be loaded is
- tainted. [ruby-dev:37843]
-
-Sat Jan 31 18:08:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (optflags): defaulted to -O3 to get rid of slug of
- gcc 4.3.
-
-Sat Jan 31 18:03:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (List#accept, parse_in_order): n option is no
- longer needed.
-
-Sat Jan 31 14:12:43 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/pathname.rb (Pathname#each_child): new method.
-
-Sat Jan 31 00:07:49 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit/assertions.rb
- (Test::Unit::Assertions#assert_nothing_raised): suppress warning.
- [ruby-core:21312]
-
-Fri Jan 30 21:49:32 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/pathname.rb (Pathname#realdirpath): new method based on the
- patch in [ruby-dev:36560] by Akinori MUSHA.
- [ruby-dev:36290]
-
-Fri Jan 30 18:04:23 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_write): limit write size to 32KB if the file
- seems to be console. [ruby-core:21613]
-
-Fri Jan 30 16:12:32 2009 TAKAO Kouji <kouji@takao7.net>
-
- * ext/curses/curses.c (Init_curses): Curses#crmode and
- Curses#nocrmode changes to the module function.
- fix #916
-
-Fri Jan 30 14:31:14 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * tool/make-snapshot (prereq): remove enc.mk from tarball because
- BSD make checks $(srcdir)/enc.mk and try to run $(builddir)/enc.mk.
-
-Fri Jan 30 14:11:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * enc/depend: extract compile rules to each target for nmake.
-
-Fri Jan 30 12:59:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cygwin/GNUmakefile.in (RUBYDEF): depends on makefiles.
-
- * cygwin/GNUmakefile.in (RUBYDEF): adds DATA to non-function symbols
- which is not marked as T.
-
-Fri Jan 30 11:03:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (assert_respond_to): gets rid of
- overcounting. [ruby-dev:37703]
-
-Fri Jan 30 02:55:56 2009 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_init_by_convpath_i): make it static.
-
-Thu Jan 29 16:22:41 2009 Shugo Maeda <shugo@ruby-lang.org>
-
- * load.c (rb_feature_provided): should not calculate len by pointer
- subtraction because feature may be a expanded path.
- [ruby-core:21267]
-
-Thu Jan 29 14:12:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (BASERUBY): erases RUBYOPT at the test.
-
- * configure.in (OBJCOPY): not used on Windows.
-
-Thu Jan 29 13:16:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/securerandom.rb (SecureRandom.uuid): uses unpacked array
- instead of string, because String#[] returns one length string.
-
-Thu Jan 29 12:29:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rake.rb (FileUtils#rake_system): no longer needs workaround
- on Windows. [ruby-core:21339]
-
- * lib/rake/win32.rb (Rake::Win32#rake_system): ditto.
-
- * lib/rake/win32.rb (Rake::Win32#win32_system_dir): no longer
- needs environment variables other than APPDATA now.
-
- * lib/rake.rb (Rake::Application#standard_system_dir): uses
- platform specific definition on Windows system.
-
-Thu Jan 29 12:18:54 2009 Technorama Ltd. <oss-ruby@technorama.net>
-
- * lib/securerandom.rb: new method SecureRandom#uuid
-
-Thu Jan 29 11:22:19 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/raddrinfo.c (inspect_sockaddr): if defined AF_INET6,
- perhaps can inspect IPv6 addresses if not defined INET6.
-
- * ext/socket/socket.c (socket_s_ip_address_list): support Windows XP
- or later. (Win2k or earlier is still not supported)
-
-Thu Jan 29 00:24:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/zlib/zlib.c (zstream_run): previous change didn't resolve the
- problem.
-
-Wed Jan 28 22:51:12 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/zlib/zlib.c (zstream_run): desperately guard the variable.
- [ruby-core:20576]
-
-Wed Jan 28 15:24:11 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * math.c: SEGV is caused by implicit rb_to_float declaration
- test_complexrational.rb: [BUG] in IA-64 architecture
-
-Tue Jan 27 20:02:07 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/init.c (socks_connect_blocking): moved from
- sockssocket.c. [ruby-dev:37834]
-
- * sockssocket.c (socks_init): don't omit "int" type.
-
-Tue Jan 27 14:41:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cygwin/GNUmakefile.in (RUBYDEF): needs DATA marks to export
- non-function symbols. [ruby-core:21582]
-
- * win32/mkexports.rb (Exports::Mingw#each_export): ditto.
-
-Tue Jan 27 12:59:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/ripper/depend: use VPATH.
- If a platform doesn't support VPATH, Ruby doesn't support it:
- for example MSYS. [ruby-core:21570]
-
-Tue Jan 27 12:21:17 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/ripper/depend: lex.c's correct path is ../../lex.c.
-
-Tue Jan 27 11:09:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (try_header): checks the header depending on
- platform.
-
- * lib/mkmf.rb (have_header, find_header): use try_header.
-
- * win32/Makefile.sub (try_header): uses try_compile to get rid of
- slow -E option of VC.
-
-Tue Jan 27 11:03:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (distclean-enc, realclean-enc): do not call clean of
- enc.mk twice or more.
-
- * enc/depend (cleanobjs): added deffile.
-
- * lib/mkmf.rb (create_makefile): removes deffile at clean instead
- of distclean.
-
- * win32/Makefile.sub (miniruby, LIBRUBY_SO): removes lib and exp
- files.
-
- * win32/Makefile.sub (clean, distclean): have moved to common.mk.
-
- * win32/rmdirs.bat: omits `not empty' message.
-
-Tue Jan 27 10:15:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (struct rb_transcoding): added ary member for debug.
-
-Tue Jan 27 10:10:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Doxyfile.in (FILE_VERSION_FILTER, INPUT_FILTER): should not use
- ./miniruby directly for cross compiling.
-
-Tue Jan 27 04:02:53 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/ripper/depend: fixed dependency path to lex.c.
- [ruby-core:21570]
-
-Tue Jan 27 03:43:34 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_any_hash): fixed performance issues with nil, true,
- false as hash keys. a patch from Matthias Waechter.
- [ruby-core:21568]
-
-Tue Jan 27 03:23:43 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): should point correct path to
- ruby.h and defines.h. [ruby-core:21569]
-
-Mon Jan 26 16:00:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_aset): fixed arguments evaluation order.
-
-Mon Jan 26 15:49:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/pathname.rb (chop_basename, prepend_prefix): use o option.
-
-Sun Jan 25 16:35:44 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (socket_s_ip_address_list): renamed from
- socket_s_list_ip_address. [ruby-dev:37806]
-
-Sun Jan 25 12:17:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cygwin/GNUmakefile.in (RUBYDEF): needs read-only section too.
-
-Sun Jan 25 12:02:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (clean-ext): condition of EXTS was inverted.
-
-Sun Jan 25 11:50:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): fixed the variables order because
- converter proc refers the separator.
-
-Sun Jan 25 11:25:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, win32/Makefile.sub (RMDIRS): remove directory and
- parents.
-
- * Makefile.in, win32/Makefile.sub (distclean-rdoc): added to remove
- temporary rdoc.
-
- * Makefile.in, win32/Makefile.sub (clean-ext): skips non-existent
- directories.
-
- * common.mk (clean, distclean): cleans rdoc.
-
- * common.mk (clean-extout): removes extout directory.
-
- * configure.in (RMDIRS, RMALL): added to clean extout.
-
- * lib/fileutils.rb (FileUtils#rmdir): added :parents option.
-
- * lib/mkmf.rb (create_makefile): cleans installed files at clean
- instead of distclean.
-
- * lib/mkmf.rb (create_makefile): added clean-so and clean-rb.
-
- * lib/mkmf.rb (def init_mkmf): added DISTCLEANDIRS.
-
- * lib/un.rb (rmdir): added -p option.
-
- * tool/rmdirs, win32/rmdirs.bat: removes directory and the parents.
-
- * win32/rm.bat: added -r option.
-
-Sun Jan 25 09:09:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (join_path): use strlcat() to force link.
-
- * dir.c (glob_helper): no strcpy() is needed since len is known.
-
-Sun Jan 25 06:44:58 2009 Technorama Ltd. <oss-ruby@technorama.net>
-
- * ext/openssl/ossl_ssl.c: Server Name Indication support.
- new methods SSLContext#server_name_cb=, SSLSocket#hostname=.
-
- * test/openssl/test_ssl.rb: Tests for above.
-
-Sat Jan 24 08:22:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (configuration): tools under the top source
- directory are not installed, so unusable outside extmk.rb.
-
-Fri Jan 23 17:24:31 2009 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * golf_prelude.rb (Enumerator#inspect): avoid warning.
-
-Fri Jan 23 15:12:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (mkintpath): new function which converts native path
- to format acceptable in Makefile.
-
- * lib/mkmf.rb (configuration): leaves PATH_SEPARATOR unchanged.
-
- * lib/mkmf.rb (configuration): converts srcdir, topdir and hdrdir.
- a patch by Alexey Borzenkov <snaury AT gmail.com> at
- [ruby-core:21448].
-
- * lib/mkmf.rb (try_func): got rid of c-mode confusion.
-
-Fri Jan 23 13:26:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (trap_handler): also accepts symbols. [ruby-dev:37823]
-
-Thu Jan 22 18:14:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): removes installed files under
- extout at distclean.
-
-Thu Jan 22 17:12:37 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/core.rb (CGI.parse): generate only key on params hash
- if request have only key uri parameters.
- (ex. index.cgi?aaa&bbb=1 # params=>{:aaa=>[],:bbb=>["1"]})
-
- * test/cgi/test_cgi_core.rb: fix test for key only params.
-
-Thu Jan 22 16:29:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems/installer.rb (Gem::Installer#initialize): fixed
- typos.
-
- * test/rubygems/test_gem.rb (test_self_dir): removed false
- assertions.
-
- * test/rubygems/test_gem.rb (test_self_set_paths): checks if paths
- are included.
-
- * test/rubygems/test_gem_commands_install_command.rb
- (test_execute_remote): checks diagnostic message too.
-
- * test/rubygems/test_gem_installer.rb (load): uses Gem.ruby.
-
- * test/rubygems/gemutilities.rb (Gem.ruby): initializes from the
- environment variable to run without installation.
-
- * test/rubygems/gemutilities.rb (RubyGemTestCase#util_build_gem):
- creates cache directory.
-
-Thu Jan 22 16:12:51 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * revert previous revision. it's already out-of-date.
-
-Thu Jan 22 15:54:02 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h, win32/win32.c (rb_w32_is_valid_fd): new function
- to validate fd.
-
- * io.c (rb_io_initialize): check fd with above function.
-
-Thu Jan 22 14:53:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_process.rb (MANDATORY_ENVS): needs RUBYLIB to run
- tests without install.
-
-Thu Jan 22 12:19:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (define_final): cannot define finalizer for immediate
- values. [ruby-core:21500]
-
- * gc.c (define_final): freezes or hides internal values.
-
-Thu Jan 22 11:33:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_time_timeval): made a real prototype. a patch from
- Marcus Rueckert <darix AT opensu.se> at [ruby-core:21492].
-
-Wed Jan 21 21:43:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_ungetbyte, rb_io_ungetc): allows nil to reset EOF
- flag with ungetting nothing.
-
- * ruby.c (load_file_internal): rests EOF flag to make possible to
- load from stdin after reading data.
-
-Wed Jan 21 17:17:18 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (ary_double_capa): a new function to expand array more
- aggressively. [ruby-core:21460]
-
- * array.c (rb_ary_store): use ary_double_capa().
-
- * array.c (rb_ary_unshift_m): ditto.
-
- * array.c (rb_ary_splice): ditto.
-
-Wed Jan 21 15:32:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_ungetbyte, rb_io_ungetc): clears EOF flag.
-
-Wed Jan 21 14:41:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * array.c (take_items): to_ary() raises ArgumentError if cannot to
- convert to Array. [ruby-dev:37797]
-
-Wed Jan 21 14:32:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (debug_lines): calls rb_intern() once.
-
-Wed Jan 21 13:58:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/io.h (FMODE_EOF): EOF flag on TTY.
-
- * io.c (io_set_eof): sets EOF flag for TTY.
-
- * io.c (io_seek): clears EOF flag.
-
- * io.c (io_fillbuf): returns EOF if already met EOF. [ruby-dev:37798]
-
- * io.c (io_fillbuf, io_fread, io_getpartial): sets EOF.
-
-Wed Jan 21 08:22:04 2009 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 1.3.1 r4532.
- * test/minitest/*.rb: ditto.
-
-Tue Jan 20 20:16:21 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (socket_s_list_ip_address): new method.
- (sockaddr_obj): new function.
-
- * ext/socket/rubysocket.h: include ifaddrs.h, sys/ioctl.h,
- sys/sockio.h, net/if.h if available.
- (addrinfo_new): declared.
-
- * ext/socket/raddrinfo.c (addrinfo_new): exported.
-
- * ext/socket/extconf.rb: check ifaddrs.h, sys/ioctl.h, sys/sockio.h,
- net/if.h and getifaddrs.
-
-Tue Jan 20 20:05:21 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/rubysocket.h (pseudo_AF_FTIP): moved from mkconstants.rb.
-
- * ext/socket/mkconstants.rb: prepend header if -H is not given.
-
-Tue Jan 20 17:50:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (nkf_buf): use nkf_char.
-
-Tue Jan 20 16:17:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (ruby_Init_{Continuation_body,Fiber_as_Coroutine}): prefixed
- with ruby_ to export.
-
- * ext/continuation/continuation.c, ext/fiber/fiber.c: ditto.
-
-Tue Jan 20 15:32:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (miniruby): renames and then removes, to get rid of
- EPERM on cygwin and mingw.
-
- * Makefile.in ($(LIBRUBY_SO)): use wildcard option of objcopy.
-
- * configure.in (DLDFLAGS): do not export all symbols.
-
- * cygwin/GNUmakefile.in (RUBYDEF): rejects symbols prefixed with
- Init_.
-
- * win32/mkexports.rb (Exports::Mingw): includes all symbols as
- well as mswin32, except for prefixed with Init_.
-
-Tue Jan 20 13:03:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (hash): fixed the tail bytes handling in the aligned
- access case.
-
-Tue Jan 20 09:26:05 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (nkf_buf_push): maybe a bug.
-
- * ext/nkf/nkf-utf8/nkf.c (options): no need to support help option.
-
-Tue Jan 20 06:48:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (take_items), enum.c (enum_zip): tries to convert to
- array first. [ruby-core:21442]
-
-Tue Jan 20 03:50:37 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: Update nkf to 2.0.9.
- revert -s meaning as Shift_JIS, etc.
-
-Tue Jan 20 03:42:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (hash): fixed typo. [ruby-dev:37791]
-
-Tue Jan 20 01:15:27 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb (SOMAXCONN): defined.
-
-Mon Jan 19 22:31:35 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: use erb for generating code.
-
-Mon Jan 19 17:33:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (hash): defaulted to MurmurHash 2.0.
-
-Mon Jan 19 17:29:34 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/defines.h (RUBY_ALIAS_FUNCTION_TYPE): added.
-
-Mon Jan 19 17:24:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_dump.c (vm_stack_dump_each): used only if debug mode.
-
-Mon Jan 19 16:32:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (hash): added MurmurHash 2.0.
-
-Mon Jan 19 14:31:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_execute_interrupts): needs
- rb_signal_buff_size to be declared.
-
-Mon Jan 19 13:34:25 2009 Koichi Sasada <ko1@atdot.net>
-
- * ruby.c (require_libraries): reset th->parse_in_eval while
- loading libraries. fixes [ruby-dev:37780]
-
-Mon Jan 19 11:46:39 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm_eval.c, eval.c (rb_f_block_given_p): move definition of
- "iterator?" and "block_given?" to make static.
-
- * vm.c (vm_get_ruby_level_caller_cfp): make it static.
-
- * eval_intern.h, vm_insnhelper.c: move decl. of
- vm_get_ruby_level_caller_cfp()
- from eval_intern.h to vm_insnhelper.c.
-
-Mon Jan 19 11:27:39 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm.c: add a prefix "rb_" to exposed functions
- vm_get_ruby_level_next_cfp(), rb_vm_make_env_object(),
- vm_stack_to_heap(), vm_make_proc(), vm_invoke_proc(),
- vm_get_sourceline(), vm_cref(), vm_localjump_error(),
- vm_make_jump_tag_but_local_jump(), vm_jump_tag_but_local_jump().
- This changes may affect only core because most of renamed functions
- require a pointer of not-exposed struct such as rb_thread_t or NODE.
- In short, they are core functions.
-
- * cont.c, eval.c, eval_intern.h, load.c, proc.c, thread.c,
- vm_core.h, vm_dump.c, vm_eval.c, vm_exec.c, vm_insnhelper.c:
- ditto.
-
-Mon Jan 19 11:22:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/rubysocket.h (rb_cUNIXSocket, rb_cUNIXServer),
- (unixpath, unixaddr): UNIX domain sockets depend on sys/un.h.
-
-Mon Jan 19 11:02:30 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm_dump.c: add a prefix "rb_vmdebug_" to
- vm_stack_dump_raw(), vm_stack_dump_raw_current(),
- vm_env_dump_raw(), vm_proc_dump_raw(), vm_stack_dump_th(),
- vm_debug_print_register(), vm_thread_dump_regs(),
- vm_debug_print_pre(), vm_debug_print_post(),
- vm_thread_dump_state().
- This change also may affect core (in fact, user of
- above functions may be only ko1).
-
- * vm_core.h: ditto.
-
- * vm_exec.h (SDR2): remove duplicate definition.
-
-Mon Jan 19 11:00:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/raddrinfo.c (addrinfo_ip_port): use AF_INET6 only when
- defined, as well as addrinfo_ipv6_p().
-
-Mon Jan 19 10:43:38 2009 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (garbage_collect_with_gvl): suppress warnings.
-
-Mon Jan 19 10:34:32 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/depend: workaround for nmake. files in depend without
- paths should converted by RULE_SUBST, but mkmf.rb cannot recognize
- macros currently.
-
-Mon Jan 19 09:53:43 2009 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c:
- rename ruby_iseq_disasm_insn() -> rb_iseq_disasm_insn().
- rename ruby_iseq_disasm() -> rb_iseq_disasm().
-
- * compile.c:
- rename ruby_iseq_compile() -> rb_iseq_compile_node().
- rename ruby_iseq_translate_threaded_code() ->
- rb_iseq_translate_threaded_code().
- rename ruby_insns_name_array() -> rb_insns_name_array().
- rename ruby_iseq_build_from_ary() -> rb_iseq_build_from_ary().
-
- * iseq.c, compile.c: remove ruby_insn_make_insn_table() and make
- static function insn_make_insn_table().
-
- * iseq.h, ruby.c, vm.c, vm_core.h, vm_eval.c, vm_dump.c,
- blockinlining.c: ditto.
- Rename strange "ruby_" prefix to "rb_" prefix.
- This changes may affect only core because renamed functions
- require a pointer of rb_iseq_t which is not exposed.
-
-Mon Jan 19 09:21:04 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/mkconstants.rb: define macros with default value in
- constdefs.h if not exist them.
-
- * ext/socket/raddrinfo.c (addrinfo_mdump, addrinfo_mload): support
- UNIX socket only on platforms which support it.
-
-Mon Jan 19 08:56:53 2009 Koichi Sasada <ko1@atdot.net>
-
- * eval.c, vm_eval.c (rb_f_local_variables): move definition from eval.c
- to vm_eval.c because vm_collect_local_variables_in_heap() should
- be static function.
-
- * vm.c (vm_collect_local_variables_in_heap): make it static.
-
-Mon Jan 19 04:06:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (rb_iseq_load): renamed from ruby_iseq_load, since it is
- for C extensions or the ruby core. [ruby-core:21407]
-
-Mon Jan 19 03:06:22 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (str_transcode0): fix: :xml option doesn't
- work on str.encode([options]) form without default_internal.
-
-Sun Jan 18 16:56:46 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (addrinfo_inspect_sockaddr): new
- method AddrInfo#inspect_sockaddr.
- (inspect_sockaddr): extracted from addrinfo_inspect.
- (addrinfo_inspect): use inspect_sockaddr.
- (Init_addrinfo): define the new method.
-
-Sun Jan 18 16:46:37 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (addrinfo_ip_address): new method
- AddrInfo#ip_address.
- (addrinfo_ip_port): new method AddrInfo#ip_port.
- (Init_addrinfo): define the methods above.
-
-Sun Jan 18 14:29:52 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/unixsocket.c: redundant #ifdef removed.
-
-Sun Jan 18 03:33:23 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (addrinfo_mdump): don't use symbol.
- (addrinfo_mload): ditto.
-
-Sun Jan 18 03:05:20 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (addrinfo_mdump): new method.
- (addrinfo_mload): new method.
- (Init_addrinfo): define the method above.
-
- * ext/socket/constants.c (constant_arg): str_to_int's first argument
- constified.
-
- * ext/socket/mkconstants.rb (gen_name_to_int_decl): generated
- function's first argument constified.
- (gen_name_to_int_func_in_guard): ditto.
- (ipproto_to_int): generated.
-
- * ext/socket/rubysocket.h (IS_IP_FAMILY): moved from raddrinfo.c.
-
-Sun Jan 18 01:37:50 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (sock_s_getnameinfo): accept AddrInfo object.
-
- * ext/socket/raddrinfo.c (rb_check_sockaddr_string_type): defined.
-
- * ext/socket/rubysocket.h (rb_check_sockaddr_string_type): declared.
-
-Sat Jan 17 22:01:15 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/lib/socket.rb: new file.
-
-Sat Jan 17 19:33:48 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * configure.in (VCSUP): fixed the cases for git-svn or git.
-
- * win32/Makefile.sub (VCSUP): ditto.
-
- * Makefile.in (up): `cd' is necessary for git and git-svn.
-
-Sat Jan 17 19:16:16 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: generate a header file for generated
- functions.
-
- * ext/socket/rubysocket.h: include constdefs.h. don't declare
- generated functions.
-
- * ext/socket/constants.c: include constdefs.c instead of constants.h.
-
- * ext/socket/depend: dependency updated.
-
-Sat Jan 17 17:58:22 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/irb/xmp.rb: multilingualizes XMP::StringInputMethod.
- [ruby-core:21383].
-
-Sat Jan 17 15:01:22 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (make_inspectname): add a res argument to
- suppress numeric inspectname.
- (init_addrinfo_getaddrinfo): call make_inspectname here.
- (addrinfo_firstonly_new): follow make_inspectname change.
- (addrinfo_list_new): ditto.
- (addrinfo_initialize): follow init_addrinfo_getaddrinfo change.
-
-Sat Jan 17 14:52:27 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: don't cause an error for duplicate names.
-
-Sat Jan 17 12:46:17 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket: split files for each class.
-
- * ext/socket/rubysocket.h: common header.
-
- * ext/socket/basicsocket.c: new file for BasicSocket.
-
- * ext/socket/ipsocket.c: new file for IPSocket.
-
- * ext/socket/tcpsocket.c: new file for TCPSocket.
-
- * ext/socket/tcpserver.c: new file for TCPServer.
-
- * ext/socket/sockssocket.c: new file for SOCKSSocket.
-
- * ext/socket/udpsocket.c: new file for UDPSocket.
-
- * ext/socket/unixsocket.c: new file for UNIXSocket.
-
- * ext/socket/unixserver.c: new file for UNIXServer.
-
- * ext/socket/socket.c: now for Socket.
-
- * ext/socket/raddrinfo.c: new file for AddrInfo and name resolution.
-
- * ext/socket/constants.c: new file for constants.
-
- * ext/socket/init.c: new file for utilities.
-
- * ext/socket/mkconstants.rb: export *_to_int.
-
- * ext/socket/extconf.rb: add new object files.
-
- * ext/socket/depend: add dependencies for new files.
-
- * ext/.document: add new files.
-
-Sat Jan 17 11:12:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (cont_restore_0): padding size doesn't need to be large
- if alloca is used. suppress warnings.
-
-Sat Jan 17 11:12:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_dump.c (vm_stack_dump_each): initialized at declarations.
-
- * vm_dump.c (rb_vm_bugreport): constified to suppress a warning.
-
-Fri Jan 16 22:30:27 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c: move addrinfo code.
-
-Fri Jan 16 18:51:11 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (up): tell nmake that need to run command via
- shell.
-
-Fri Jan 16 18:43:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot (package): includes all rules and expand
- configured values from the environment to create *.inc, sets RM
- for ripper.c, and needs chdir if absolute path is given with
- -exported option.
-
-Fri Jan 16 18:26:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (VALUE): use unsigned long or long long
- instead of uintptr_t, since many %lx and so on are still used.
-
-Fri Jan 16 17:33:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (Makefile): set VCS and VCSUP to support `git svn'
- and git.
-
- * Makefile.in, win32/Makefile.sub (up): split from common.mk.
-
-Fri Jan 16 12:24:39 2009 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (thread_start_func_2): call ruby_cleanup() if thread is
- main thread. [ruby-dev:37624]
-
-Fri Jan 16 12:27:50 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub ($(INSNS), node_name.inc, known_errors.inc,
- miniprelude.c, newline.c): if dependencies is newer than targets or
- targets don't exist, try to create targets with BASERUBY. no need to
- detect errors there because the absence of BASERUBY is not abnormal.
- after the try, if the targets still don't exist, copy them from
- $(srcdir).
-
-Fri Jan 16 12:15:07 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/ruby.h (PRI_PTRDIFF_PREFIX): must define as string.
- if not, cause compile error in using PRI?VALUE.
-
- * win32/Makefile.sub (config.h): add SIZEOF_INTPTR_T and
- SIZEOF_UINTPTR_T for SIZEOF_VALUE.
-
-Fri Jan 16 11:51:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * symbian/pre-build (COMSPEC): should not overridden.
-
-Fri Jan 16 11:47:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_parse_in_main): fixed typo.
-
-Fri Jan 16 11:41:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_REPLACE_TYPE): does not define rb_ prefixed
- name if no default type is given.
-
- * configure.in (RUBY_DEFINT): checks size.
-
- * include/ruby/ruby.h (PRI_PTRDIFF_PREFIX, PRI_SIZE_PREFIX):
- assumes usable if PRIdPTR is defined.
-
-Fri Jan 16 02:25:46 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (rb_thread_execute_interrupts): if signal is already
- buffered, main thread should wait until timer thread delivers it.
-
- * thread.c (timer_thread_function): should defer delivery of a signal
- if main thread does not yet trap a previous one. [ruby-dev:37676]
-
-Fri Jan 16 02:05:55 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (addrinfo_s_ip): new method AddrInfo.ip.
-
-Fri Jan 16 01:42:50 2009 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (call_trace_proc): as Matz said ([ruby-core:21183]),
- should skip rb_str_new2() if rb_sourcefile() returns NULL.
- rb_sourcefile() returns NULL if frame is toplevel of Fiber.
- [ruby-core:21161] [Bug #985]
-
-Fri Jan 16 01:09:37 2009 Koichi Sasada <ko1@atdot.net>
-
- * ruby.c (process_options): decrement parse_in_eval to recognize
- parsing main or normal eval script.
-
- * compile.c (rb_parse_in_main): return 1 if parsing main script.
- (if parse_in_eval is negative value, it means main script)
-
- * parse.y (yycompile0): check rb_parse_in_main() to accumulate
- script text. Bug #848 [ruby-core:20450]
-
-Fri Jan 16 00:57:34 2009 Koichi Sasada <ko1@atdot.net>
-
- * lib/debug.rb: as wanabe-san pointed out,
- set_trace_func should be completely final task in debug.rb.
- Bug #847 [ruby-core:20449]
-
-Fri Jan 16 00:27:03 2009 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (rb_vm_inc_const_missing_count, ruby_vm_const_missing_count):
- added.
-
- * vm_insnhelper.h: ditto.
-
- * variable.c (rb_const_get_0), insns.def: Constants should not be
- cached if const_missing is called. [ruby-core:21059] [Bug #967]
-
- * bootstraptest/test_class.rb: add a test.
-
-Fri Jan 16 00:25:09 2009 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: btest-ruby should receive option with OPTS.
-
-Fri Jan 16 00:21:10 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub ($(INSNS), node_name.inc, known_errors.inc,
- miniprelude.c, newline.c): shouldn't copy when $(srcdir) != ".", too.
- (this is a workaround. we need more strict check.)
-
- * win32/Makefile.sub ($(INSNS)): shouldn't remove BASERUBY.
-
-Fri Jan 16 00:19:55 2009 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (gc_with_gvl): suppress warnings.
-
-Thu Jan 15 20:44:30 2009 Tanaka Akira <akr@fsij.org>
-
- * tool/file2lastrev.rb: RUBY_REVISION must be an integer.
-
-Thu Jan 15 15:55:31 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (enc_set_default_encoding): should not treat US-ASCII
- special here. a patch from Yui NARUSE in [ruby-dev:37769].
- [ruby-dev:37699]
-
-Thu Jan 15 14:27:27 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * LEGAL: Added information for missing/langinfo.c
-
-Thu Jan 15 14:17:57 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (stmt): explicit error for "Object::Far += foo 1" just
- as "Object::Far += 1".
-
- * parse.y (command): moved return/break/next from command_call for
- better error message.
-
- * parse.y (call_args): void value check added.
-
-Thu Jan 15 13:10:58 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (COMPILERFLAG): for enc/trans/gb18030.c.
-
-Thu Jan 15 13:10:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, win32/Makefile.sub (MISSING): added langinfo on mingw
- and mswin.
-
- * encoding.c (rb_locale_charmap): use environments on mingw and mswin.
-
- * missing/langinfo.c (nl_langinfo_codeset): MS-Windows Japanese
- environment uses Windows-31J derived from Shift_JIS, not EUC-JP.
-
-Thu Jan 15 12:10:39 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub ($(INSNS), node_name.inc, known_errors.inc,
- miniprelude.c, newline.c): copy only when $(srcdir) != pwd.
-
-Thu Jan 15 11:40:44 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (pipe_open): revert a part of previous commit. it may be a
- mistake.
-
-Thu Jan 15 10:45:52 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * symbian/README.SYMBIAN: symbian support added. great appreciate
- to <alexandre.zavorine at symbian.com>.
-
-Thu Jan 15 00:06:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/trans/gb18030.trans: get rid of a 1.9 feature for cross
- compile. [ruby-core:21345]
-
-Wed Jan 14 23:57:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_locale_charmap): fallback to codepage if no
- locale is found. [ruby-core:21110]
-
- * missing/langinfo.c (nl_langinfo_codeset): returns NULL if no
- locale is found.
-
-Wed Jan 14 22:38:30 2009 Tanaka Akira <akr@fsij.org>
-
- * gc.c (negative_size_allocation_error_with_gvl): abolish a warning.
- (negative_size_allocation_error): ditto.
-
- * ext/openssl/ossl.c (ossl_raise): ditto.
-
-Wed Jan 14 20:05:05 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/gb18030.trans, gb18030-tbl.rb:
- new Chinese GB18030 transcoding (from Yoshihiro Kambayashi)
-
- * test/ruby/test_transcode.rb: added tests for the above
- (from Yoshihiro Kambayashi)
-
- * transcode_data.h, transcode.c, tool/transcode_tblgen.rb:
- added support for GB18030-specific 4-byte sequences
- (with Yoshihiro Kambayashi)
-
-Wed Jan 14 16:16:19 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/curses/extconf.rb: check ncursesw earlier than ncurses to
- support UTF-8 strings. non UTF-8 strings should be converted
- explicitly. [ruby-core:21094]
-
-Wed Jan 14 14:42:30 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * cont.c: fix prototype declare of register_stack_extend
-
-Wed Jan 14 13:19:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_aspawn): should not escape with caret
- unless using cmd.exe.
-
-Wed Jan 14 13:09:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/extconf.rb (gai_strerror): checks if available and if
- returns const pointer.
-
- * ext/socket/getaddrinfo.c (gai_strerror): defines only if non
- available. [ruby-core:21328]
-
-Wed Jan 14 12:39:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_wait_readable, rb_io_wait_writable): need rb_fd_ptr.
-
- * io.c (appendline): reformed.
-
- * io.c (rb_io_s_pipe): reduced nest of rb_ensure of main block.
-
-Tue Jan 13 22:56:57 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/addrinfo.h (AI_NUMERICSERV): defined.
- (AI_MASK): add AI_NUMERICSERV.
-
- * ext/socket/getaddrinfo.c (getaddrinfo): support AI_NUMERICSERV.
-
-Tue Jan 13 21:45:53 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/ostruct.rb (OpenStruct#inspect): fixed the recursion check.
- Patch by Kornelius Kalnbach. [ruby-core:20992].
-
- * test/ostruct/test_ostruct.rb: test for inspect.
- Patch by Kornelius Kalnbach. [ruby-core:20992].
-
-Tue Jan 13 21:44:30 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (io_reopen, rb_io_init_copy): should register fptr to pipe_list
- when copying pipe fptr.
-
-Tue Jan 13 21:38:07 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (rb_getaddrinfo): use getaddrinfo with GVL if
- getaddrinfo.c/getnameinfo.c is used. They are not thread safe
- because gethostbyname/gethostbyaddr is used.
- (rb_getnameinfo): ditto.
-
- * extconf.rb: define GETADDRINFO_EMU if getaddrinfo.c/getnameinfo.c is
- used.
-
-Tue Jan 13 21:28:14 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * object.c (rb_obj_not_match): rdoc.
- Patch by Kornelius Kalnbach. [ruby-core:20991]
-
-Tue Jan 13 18:21:44 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (rb_io_close_read): call rb_io_fptr_cleanup() instead of
- fptr_finalize() because the fptr has special finalizer if it is a
- pipe. [ruby-dev:37757] (3)
-
-Tue Jan 13 18:19:49 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (rb_io_initialize): workaround for Windows. [ruby-dev:37686]
- (also see [ruby-dev:37721])
-
-Tue Jan 13 17:29:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/trans/make_transdb.rb (converters): should not depend on the
- hash order for cross compile.
-
-Tue Jan 13 16:39:11 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/intern.h, thread.c, win32/Makefile.sub (rb_fdset_t,
- rb_fd_init, rb_fd_term, rb_fd_zero, rb_fd_set, rb_fd_clr, rb_fd_isset,
- rb_fd_select, rb_fd_ptr, rb_fd_max, HAVE_RB_FD_INIT): new type,
- functions, and macros for Windows.
-
- * win32/win32.c (extract_fd, rb_w32_select): use rb_fdset_t to expand
- fd_array if needed. [ruby-core:19946]
-
- * win32/win32.c (copy_fd): new function for rb_w32_select().
-
-Tue Jan 13 12:31:54 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * tool/file2lastrev.rb (get_revisions): fixes problem with
- svn on cygwin. [ruby-dev:37702].
- Patch by Kouhei Sutou.
-
-Tue Jan 13 11:58:04 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/irb/input-method.rb: IRB did not prompt for MSwin32.
- [ruby-dev:37686].
- Patch by arton <artonx AT yahoo.co.jp>.
-
-Tue Jan 13 12:10:42 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/{getaddrinfo,getnameinfo}.c: need to include ws2tcpip.h
- on Windows.
-
-Tue Jan 13 09:49:49 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * ext/socket/socket.c: removed warning about unused variable 'rai'.
-
-Tue Jan 13 03:07:28 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * instruby.rb: require "tool/mdoc2man.rb" before chdir if needed.
-
-Tue Jan 13 02:54:54 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/extconf.rb: use headers instead of "netdb.h" in checking
- getnameinfo() and getaddrinfo() because Windows doesn't have it.
- [ruby-dev:37757] (1)
-
- * ext/socket/sockport.h (SA_LEN): use sockaddr_in6 when defined AF_INET6
- if INET6 is not defined. winsock2's getaddrinfo() returns
- sockaddr_in6 if ipv6 is available.
-
-Tue Jan 13 02:21:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (internal_cmd_match): extracted from
- is_internal_cmd.
-
- * win32/win32.c (argv_size, join_argv): escapes redirection, pipe
- and caret punctuations with carets.
-
- * win32/win32.c (rb_w32_aspawn): ditto, and redirections and pipe
- have no meanings.
-
-Tue Jan 13 02:07:38 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: use Encoding.find("locale") instead of
- Encoding.locale_charmap
-
-Tue Jan 13 00:57:56 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (sock_s_unpack_sockaddr_in): check too short
- sockaddr.
- (sock_s_unpack_sockaddr_un): ditto.
-
-Mon Jan 12 23:55:19 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (addrinfo_ip_unpack): new method
- AddrInfo#ip_unpack.
- (addrinfo_unix_path): new method AddrInfo#unix_path.
- (Init_socket): define above methods.
-
-Mon Jan 12 23:31:42 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (IS_IP_FAMILY): defined.
- (addrinfo_ip_p): use it.
-
-Mon Jan 12 17:23:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (assert_nothing_raised): removes the
- current trace to get rid of an issue of MiniTest::Unit#location.
-
-Mon Jan 12 16:49:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (install): erased a garbage.
-
-Mon Jan 12 16:45:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (open_dir_handle): extracted from rb_w32_opendir.
-
- * win32/win32.c (winnt_stat): gets rid of strange behavior of
- GetFileAttributes(). [ruby-core:21269]
-
-Mon Jan 12 12:43:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (parse_args, install): added --strip option.
-
- * instruby.rb (install_recursive): skips the directory if matched
- to a no_install pattern ending with a file separator.
-
-Mon Jan 12 12:33:56 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: don't use bytesize because 1.9 dependent.
- [ruby-core:21266]
-
-Mon Jan 12 11:59:19 2009 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (ruby_xmalloc, ruby_xrealloc, ruby_xfree):
- enable to use them without GVL.
- if GC is invoked, acquire GVL during GC.
- if NoMemoryError is raised, acquire GVL and raise it.
-
-Mon Jan 12 10:39:19 2009 Koichi Sasada <ko1@atdot.net>
-
- * thread.c: fix comment (terminology: Global VM Lock).
-
- * thread.c (blocking_region_begin, blocking_region_end):
- save and clear th->blocking_region_buffer.
-
- * thread.c (rb_thread_call_with_gvl): check if it has GVL.
-
- * thread.c (ruby_thread_has_gvl_p): added.
-
- * vm_core.h: add decls.
-
-Mon Jan 12 10:21:11 2009 Koichi Sasada <ko1@atdot.net>
-
- * eval.c: remove unused decl.
-
-Sun Jan 11 16:53:14 2009 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/erb.rb (PercentScanner): remove PercentScanner. fixed % after
- %> bug. [ruby-dev:37751] [Bug #997]
-
- * test/erb/test_erb.rb: ditto
-
-Sun Jan 11 09:53:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/mkconstants.rb (c_str): get rid of a 1.9 feature for
- cross compile. [ruby-core:21243]
-
-Sun Jan 11 09:47:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (rb_hash_s_create): set nil as the value if assoc length
- is not enough. [ruby-core:21249]
-
-Sat Jan 10 21:17:28 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: don't generate unintended newlines.
-
-Sat Jan 10 20:50:02 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: refactored to nest properly in statically
- and dynamically.
-
-Sat Jan 10 20:26:17 2009 Tanaka Akira <akr@fsij.org>
-
- * version.h: make version string succinct:
- "ruby 1.9.1p5000 (2009-01-10 trunk 21414) [i686-linux]".
-
-Sat Jan 10 19:05:13 2009 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (cont_restore_1): should not be inlined.
-
-Fri Jan 9 21:52:47 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (sock_define_const): use INT2NUM.
-
-Fri Jan 9 15:40:07 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/mkconstants.rb: define macro if default_value is passed.
-
-Fri Jan 9 13:20:08 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: rescue abnormal Encoding.locale_charmap value.
-
-Fri Jan 9 12:29:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (test-sample), rubytest.rb: use runruby.rb
-
-Fri Jan 9 10:40:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_process.rb (TestProcess::MANDATORY_ENVS): some
- platforms need environments for shared objects.
-
-Thu Jan 8 23:19:38 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (bsock_shutdown): accept symbol/string as how.
- (shutdown_how_arg): new function.
-
- * ext/socket/mkconstants.rb: generate shutdown_how_to_int.
-
-Thu Jan 8 23:16:37 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * instruby.rb: easy code contains fewer bugs.
-
-Thu Jan 8 22:59:30 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb (gen_name_to_int_func): generate
- name_to_int functions, not only body.
-
-Thu Jan 8 22:44:10 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c: don't use AI_NUMERICSERV for platforms which
- not define it as old Windows.
- [ruby-dev:37736]
-
-Thu Jan 8 17:32:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb: should not depend on a library which does not exist
- in 1.8.
-
-Thu Jan 8 07:52:55 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (init_unix_addrinfo): don't return a value.
-
-Thu Jan 8 07:30:52 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb (OpenURI.redirectable?): reverted https redirection.
-
-Thu Jan 8 00:31:58 2009 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit/assertions.rb (assert_no_match): don't count up as two
- assertions.
-
-Thu Jan 8 00:26:35 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (addrinfo_getnameinfo): use NI_DGRAM if socktype
- is SOCK_DGRAM.
-
-Thu Jan 8 00:16:22 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (host_str): add flags_ptr argument to specify
- AI_NUMERICHOST if host is numeric form.
- (port_str): add flags_ptr argument to specify AI_NUMERICSERV if port
- is numeric form.
-
-Wed Jan 7 22:24:12 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (rb_cAddrInfo): new class AddrInfo.
- (s_recvfrom): return AddrInfo as address.
- (s_recvfrom_nonblock): ditto.
- (sock_accept): ditto.
- (sock_accept_nonblock): ditto.
- (sock_sysaccept): ditto.
- (bsock_send): accept AddrInfo as address argument.
- (sock_connect): ditto.
- (sock_connect_nonblock): ditto.
- (sock_bind): ditto.
- (sock_s_unpack_sockaddr_in): ditto.
- (sock_s_unpack_sockaddr_un): ditto.
- (bsock_local_address): new method BasicSocket#local_address.
- (bsock_remote_address): new method BasicSocket#remote_address.
- (addrinfo_initialize): new method AddrInfo#initialize.
- (addrinfo_inspect): new method AddrInfo#inspect.
- (addrinfo_afamily): new method AddrInfo#afamily.
- (addrinfo_pfamily): new method AddrInfo#pfamily.
- (addrinfo_socktype): new method AddrInfo#socktype.
- (addrinfo_protocol): new method AddrInfo#protocol.
- (addrinfo_to_sockaddr): new method AddrInfo#to_sockaddr.
- (addrinfo_canonname): new method AddrInfo#canonname.
- (addrinfo_ip_p): new method AddrInfo#ip?.
- (addrinfo_ipv4_p): new method AddrInfo#ipv4?.
- (addrinfo_ipv6_p): new method AddrInfo#ipv6?.
- (addrinfo_unix_p): new method AddrInfo#unix?.
- (addrinfo_getnameinfo): new method AddrInfo#getnameinfo.
- (addrinfo_s_getaddrinfo): new method AddrInfo.getaddrinfo.
- (addrinfo_s_tcp): new method AddrInfo.tcp.
- (addrinfo_s_udp): new method AddrInfo.udp.
- (addrinfo_s_unix): new method AddrInfo.unix.
- (Init_socket): define new class and methods.
- (sock_getaddrinfo): apply socktype hack regardless of ai_flags.
- (addrinfo_new): defined.
- (get_afamily): ditto.
- (fd_socket_addrinfo): ditto.
- (io_socket_addrinfo): ditto.
- (SockAddrStringValue): ditto.
- (SockAddrStringValuePtr): ditto.
- (sockaddr_string_value): ditto.
- (sockaddr_string_value_ptr): ditto.
- (rb_addrinfo_t): ditto.
- (addrinfo_mark): ditto.
- (addrinfo_free): ditto.
- (addrinfo_s_allocate): ditto.
- (IS_ADDRINFO): ditto.
- (check_addrinfo): ditto.
- (get_addrinfo): ditto.
- (alloc_addrinfo): ditto.
- (init_addrinfo): ditto.
- (addrinfo_new): ditto.
- (call_getaddrinfo): ditto.
- (init_addrinfo_getaddrinfo): ditto.
- (make_inspectname): ditto.
- (addrinfo_firstonly_new): ditto.
- (addrinfo_list_new): ditto.
- (init_unix_addrinfo): ditto.
- (ai_get_afamily): ditto.
-
- * ext/socket/mkconstants.rb: generate intern_protocol_family,
- intern_socktype and intern_ipproto.
-
- [ruby-dev:37692]
-
-Wed Jan 7 22:13:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (man, gem): fixed errors.
-
-Wed Jan 7 17:14:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb: use installed libraries. [ruby-core:21006]
-
- * instruby.rb (gem), lib/rubygems/defaults.rb (Gem.default_dir):
- use version invariant configuration.
-
-Tue Jan 6 19:09:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (cont_restore_0): streamlined to ensure O(1) time. based on
- a patch by Brent Roman <brent AT mbari.org>.
-
-Tue Jan 6 00:34:25 2009 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_close_before_exec): more heuristics to detect maximum fd.
-
-Mon Jan 5 17:59:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (cygwin): needs properly implemented nl_langinfo().
- [ruby-core:21110]
-
- * missing/langinfo.c: added as suggested at [ruby-core:21015], from
- http://www.cl.cam.ac.uk/~mgk25/ucs/langinfo.c.
-
- * missing/langinfo.c (nl_langinfo_0): fixed typos for SJIS.
-
-Mon Jan 5 17:38:40 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * encoding.c (rb_locale_charmap): use GetConsoleCP() instead of
- GetACP() because external encoding should be console's one.
-
- * encoding.c (rb_filesystem_encoding): use GetOEMCP() instead of
- GetACP() because VFAT/FAT32 uses OEM CP.
-
-Mon Jan 5 16:26:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_filesystem_encoding): use ANSI codepage for file
- system on cygwin.
-
- * encoding.c (rb_locale_charmap): reverted. [ruby-core:21110]
-
-Mon Jan 5 16:15:00 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * ext/curses/curses.c (free_window): use xfree instead of free.
- [ruby-dev:37200]
-
-Mon Jan 5 15:49:45 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * ext/gdbm/gdbm.c (rb_gdbm_fetch): remove needless cast.
-
-Mon Jan 5 12:52:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (init_env): use user profile folder than personal
- folder.
-
-Mon Jan 5 08:41:13 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_file_s_stat): need type check for non string values.
- [ruby-dev:37673] fix: #964
-
- * file.c (rb_file_s_size, rb_file_s_atime, rb_file_s_mtime,
- rb_file_s_ctime, rb_f_test): ditto.
-
-Mon Jan 5 08:17:56 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_step): should not add up errors on loops.
- [ruby-dev:37691]
-
-Mon Jan 5 07:58:37 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * random.c (rb_f_srand): update RDoc. [ruby-core:21113]
-
-Mon Jan 5 06:39:56 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_max): max value from ... not defined for non
- Integer Numeric end values. [ruby-dev:37690] fix: #974
-
-Sun Jan 4 22:37:19 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (rb_getaddrinfo): defined for address lookup without GVL.
- (struct getaddrinfo_arg): defined.
- (nogvl_getaddrinfo): defined.
- (rb_getnameinfo): defined for name lookup without GVL.
- (getnameinfo_arg): defined.
- (nogvl_getnameinfo): defined.
-
-Sun Jan 4 18:10:10 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/gbk.trans, gbk-tbl.rb:
- new Chinese GBK transcoding (from Yoshihiro Kambayashi)
-
- * test/ruby/test_transcode.rb: added tests for the above
- (from Yoshihiro Kambayashi)
-
-Sun Jan 4 17:55:55 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * test/ruby/test_transcode.rb: added tests for GB2312
- (from Yoshihiro Kambayashi)
-
- * enc/trans/chinese.trans: set valid byte patterns for
- GB2312 and GB12345
-
-Sun Jan 4 17:39:39 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/big5.trans, big5-tbl.rb:
- new Chinese Big5 transcoding (from Yoshihiro Kambayashi)
-
- * test/ruby/test_transcode.rb: added tests for the above
- (from Yoshihiro Kambayashi)
-
-Sun Jan 4 17:07:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems.rb (Gem.set_home, Gem.set_paths): should not create
- directories stealthily. [ruby-core:20990]
-
- * lib/rubygems.rb (Gem.find_home): expand_path deals with platform
- dependent environments.
-
- * lib/rdoc/ri/paths.rb (RDoc::HOMEDIR): ditto.
-
- * instruby.rb (gem): creates gem directories at installation.
-
-Sun Jan 4 15:41:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_filesystem_encoding, rb_locale_charmap): uses
- codepage on cygwin. [ruby-core:20994]
-
-Sun Jan 4 11:58:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (ruby_float_step): extracted from num_step().
-
- * range.c (range_step): uses ruby_float_step() for float range.
- [ruby-dev:37691]
-
-Sun Jan 4 11:11:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): does not use both of makefile.rb and
- extconf.rb at the same time.
-
- * lib/mkmf.rb (DLLIB): depends on Makefile. [ruby-core:21096]
-
-Sun Jan 4 09:27:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/socket.c (constant_arg): constified.
-
- * ext/socket/socket.c (optname_arg): cygwin does not have
- IPPROTO_IPV6.
-
- * ext/socket/mkconstants.rb (ipv6_optname_to_int): ditto.
-
-Sun Jan 4 04:33:14 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c: redundant #ifdef removed.
-
-Sun Jan 4 03:30:18 2009 Tanaka Akira <akr@fsij.org>
-
- * io.c (maygvl_copy_stream_wait_read): renamed to add prefix to
- express GVL state.
- (nogvl_copy_stream_wait_write): ditto.
- (nogvl_copy_stream_sendfile): ditto.
- (maygvl_copy_stream_read): ditto.
- (nogvl_copy_stream_write): ditto.
- (nogvl_copy_stream_read_write): ditto.
- (nogvl_copy_stream_func): ditto.
-
-Sun Jan 4 00:30:50 2009 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/erb.rb: merged r20850, r17881, r16811, r16763, r16748, r15829,
- r15794 and r15698 from ruby_1_8.
-
- * test/erb/test_erb.rb: ditto.
-
-Sat Jan 3 22:24:36 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk, Makefile.in, win32/Makefile.sub (INSNS): move the macro
- definition from common.mk to {Makefile.in,win32/Makefile.sub}.
- [ruby-dev:37678]
-
-Sat Jan 3 15:30:09 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/chinese.trans: added for transcoding EUC-CN and GB12345.
-
- * enc/trans/GB/: ditto.
-
-Sat Jan 3 15:26:30 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/euc-cn.c: renamed from gb2312.c because GB2312 is
- the name of a CSS. it's encoding name is "EUC-CN".
-
-Sat Jan 3 03:00:42 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk, Makefile.in, win32/Makefile.sub ($(INSNS), node_name.inc,
- known_errors.inc, miniprelude.c, newline.c): move rules from common.mk
- to {Makefile.in,win32/Makefile.sub} for nmake.
- [ruby-core:20993]
-
-Fri Jan 2 23:51:41 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_sleep.rb (test_sleep_5sec): stop gc.
-
-Fri Jan 2 23:36:10 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c: don't apply socktype hack [ruby-core:184] for
- sock_s_getaddrinfo.
- (sock_getaddrinfo): add socktype_hack argument.
- (sock_addrinfo): call sock_getaddrinfo with socktype_hack.
- (sock_s_getaddrinfo): call sock_getaddrinfo without socktype_hack.
- [ruby-dev:37674]
-
-Fri Jan 2 23:33:38 2009 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/missing.h, sprintf.c: get rid of a warning of VC++.
-
-Fri Jan 2 22:25:46 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * process.c: use sigaction instead of sigset. [ruby-core:21021]
-
-Fri Jan 2 22:22:04 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bootstraptest/test_proc.rb: suppress error message.
-
-Fri Jan 2 22:20:46 2009 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_process.rb (test_wait_and_sigchild): remove debug
- output.
-
-Fri Jan 2 17:45:19 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: rename family_to_str to intern_family.
- it returns ID now.
-
- * ext/socket/socket.c (ipaddr): use intern_family.
-
-Fri Jan 2 17:20:31 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: use ID in the values of
- family_to_str_hash. family_to_str returns a VALUE.
-
- * ext/socket/socket.c (ipaddr): follow family_to_str change.
-
-Fri Jan 2 17:01:51 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: refactored to gather stringizer
- description.
-
-Fri Jan 2 15:30:57 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: make common prefix optional.
-
-Fri Jan 2 14:59:52 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: use hash for family_to_str to avoid
- linear search. lenp argument removed.
-
- * ext/socket/socket.c (ipaddr): call family_to_str without lenp
- argument.
-
-Fri Jan 2 14:33:12 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb (gen_int_to_name): don't compare constants
- in preprocessor because the constants may be enum.
-
-Fri Jan 2 14:11:07 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb (gen_int_to_name): add lenp argument.
-
- * ext/socket/socket.c (ipaddr): follow argument change.
-
-Fri Jan 2 10:20:24 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/singleton.rb: fix documentation. [ruby-core:21038]
-
-Fri Jan 2 06:43:58 2009 NARUSE, Yui <naruse@ruby-lang.org>
-
- * signal.c (rb_signal_buff_size): defined for check whether signal
- is in the buffer or not.
-
- * thread_pthread.c (thread_timer): don't exit the loop when signal
- is in the buffer. [ruby-dev:37637]
-
-Fri Jan 2 04:40:00 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: check duplicates.
-
-Fri Jan 2 02:39:08 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (optname_arg): defined.
- (bsock_setsockopt): use optname_arg.
- (bsock_getsockopt): ditto.
-
- * ext/socket/mkconstants.rb: generate so_optname_to_int,
- ip_optname_to_int, ipv6_optname_to_int, tcp_optname_to_int and
- udp_optname_to_int.
- more constants.
-
-Fri Jan 2 02:08:36 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (constant_arg): extracted from family_arg.
- (family_arg): use constant_arg.
- (socktype_arg): ditto.
- (level_arg): ditto.
-
-Fri Jan 2 01:15:11 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (level_arg): defined.
- (bsock_setsockopt): use level_arg.
- (bsock_getsockopt): ditto.
-
- * ext/socket/mkconstants.rb: generate level_to_int.
-
-Fri Jan 2 00:58:40 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (family_arg): accept symbols as well.
- (socktype_arg): ditto.
-
-Fri Jan 2 00:49:44 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (sock_s_getaddrinfo): use socktype_arg.
-
-Fri Jan 2 00:12:27 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (family_arg): extracted from
- setup_domain_and_type.
- (socktype_arg): ditto.
- (udp_init): use family_arg.
- (sock_s_gethostbyaddr): ditto.
- (sock_s_getaddrinfo): ditto.
- (sock_s_getnameinfo): ditto.
-
-Thu Jan 1 22:27:55 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * spec/default.mspec: fix for builddir != srcdir
-
- * Makefile.in: ditto.
-
-Thu Jan 1 21:26:05 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (sock_s_getnameinfo): use family_to_int.
-
-Thu Jan 1 21:08:34 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: check all alias possibility.
-
-Thu Jan 1 20:59:55 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: more possible aliases.
-
-Thu Jan 1 20:54:02 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: AF_ISO and AF_OSI may be aliased.
-
-Thu Jan 1 20:50:09 2009 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * process.c (before_exec): it makes no sense for a conditional
- expression to return a void value.
-
-Thu Jan 1 20:47:09 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (sock_s_getaddrinfo): use family_to_int.
-
-Thu Jan 1 20:17:47 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c: include constants.h at top.
-
-Thu Jan 1 19:53:33 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: add valp argument for family_to_int and
- socktype_to_int.
-
- * ext/socket/socket.c (setup_domain_and_type): use valp argument.
-
-Thu Jan 1 19:36:57 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: generate family_to_str.
-
- * ext/socket/socket.c (ipaddr): use family_to_str.
-
-Thu Jan 1 17:37:12 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: generate socktype_to_int.
-
- * ext/socket/socket.c (setup_domain_and_type): use socktype_to_int.
-
-Thu Jan 1 17:26:47 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (setup_domain_and_type): initialize ptr.
-
-Thu Jan 1 17:01:50 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: refine family_to_int.
-
-Thu Jan 1 16:48:07 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: generate family_to_int().
-
- * ext/socket/socket.c (setup_domain_and_type): use family_to_int.
-
-Thu Jan 1 15:08:46 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * tool/file2lastrev.rb: supports git repositories which are cloned
- from a git-svn gateway.
- Patch by Hongli Lai. [ruby-core:21020]
-
-Thu Jan 1 16:08:11 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: generate init_constants function.
-
- * ext/socket/socket.c (Init_socket): call init_constants.
-
-Thu Jan 1 16:03:04 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb (Socket::AF_INET6): moved from socket.c.
- (Socket::PF_INET6): ditto.
-
-Thu Jan 1 15:27:07 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: use erb.
-
-Thu Jan 1 15:07:56 2009 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: add -o option.
-
- * ext/socket/depend: use mkconstants.rb with -o option.
-
-Thu Jan 1 07:42:36 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/singleton.rb: fix indentation of RDoc text. [ruby-core:21029]
-
-Thu Jan 1 07:16:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (distclean-ext, realclean-ext): use EXTS as default.
-
- * win32/Makefile.sub (distclean-ext, realclean-ext): try to remove ext
- directory.
-
-Thu Jan 1 06:56:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/file2lastrev.rb: unset PWD.
-
-Wed Dec 31 23:37:17 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (sock_s_socketpair): yield if a block is given.
- (io_call_close): defined.
- (io_close): defined.
- (pair_yield): defined.
-
-Wed Dec 31 19:35:57 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * spec/README: follows the change of directory structure in rubyspec.
-
- * spec/default.mspec: ditto. Also follows change of mspec command.
-
- * Makefile.in: ditto.
-
-Wed Dec 31 17:16:46 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_read_internal): show openssl error
- code in EWOULDBLOCK error.
-
-Wed Dec 31 15:45:18 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (copy_stream_body): don't check to_io because
- Zlib::GzipWriter#to_io returns the underlying IO.
-
-Wed Dec 31 14:52:33 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_digest.c (GetDigestPtr): use StringValueCStr
- instead of STR2CSTR.
-
- * ext/openssl/ossl_pkey_ec.c (ossl_ec_key_initialize): ditto.
- (ossl_ec_group_initialize): ditto.
-
-Wed Dec 31 14:12:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_to_float): replaced by to_flo definition from
- math.c [ruby-dev:37668]
-
- * math.c (Need_Float): use rb_to_float().
-
-Wed Dec 31 13:49:06 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/lib/openssl/buffering.rb (Buffering#read_nonblock):
- implemented.
-
- * ext/openssl/ossl_ssl.c (rb_sys_fail_path): removed.
- (fcntl.h): don't include.
- (ossl_ssl_read_internal): defined.
- (ossl_ssl_read): use ossl_ssl_read_internal.
- (ossl_ssl_read_nonblock): use ossl_ssl_read_internal.
- (Init_ossl_ssl): define sysread_nonblock, instead of read_nonblock.
-
-Wed Dec 31 00:27:54 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_to_float): prohibit conversion from nil to float.
- [ruby-dev:37663]
-
- * pack.c (pack_pack): replace all rb_Float() to rb_to_float().
- [ruby-dev:37663]
-
-Tue Dec 30 21:17:00 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/mkconstants.rb: use sock_define_uconst for INADDR_*
- constants because Socket::INADDR_LOOPBACK should be 0x7f000001
- instead of -0xffffff.
-
- * ext/socket/socket.c (sock_define_uconst): defined.
-
-Tue Dec 30 18:23:10 2008 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 1.3.1 r4506.
- * test/minitest/*.rb: ditto.
-
-Tue Dec 30 17:59:59 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c: Minor fixes and tweaks in documentation.
-
-Tue Dec 30 17:03:51 2008 Koichi Sasada <ko1@atdot.net>
-
- * ext/dl/test/test_import.rb: fix a prototype decl.
- pointed out by Takehiro Kubo [ruby-core:20971].
-
-Tue Dec 30 16:56:09 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_blocking_region): add a comment.
-
- * thread.c (rb_thread_call_without_gvl): added as a alias of
- rb_thread_blocking_region().
-
- * thread.c (rb_thread_call_with_gvl): added.
-
- * vm_core.h (rb_thread_t#blocking_region_buffer): added for
- rb_thread_call_with_gvl().
-
-Mon Dec 29 23:41:42 2008 Koichi Sasada <ko1@atdot.net>
-
- * ext/dl/test/test_base.rb: add libc search logic.
- this patch is written by Takehiro Kubo.
- [ruby-core:20963] [Bug #932]
-
- * ext/dl/dl.h: Add ",..." as the last argument.
- this patch is written by Takehiro Kubo.
- Bug #633 [ruby-core:19289]
-
- * ext/dl/lib/dl/stack.rb: add add_padding() to calculate
- alignment. this patch is written by Takehiro Kubo.
- Bug #633 [ruby-core:19289]
-
- * ext/dl/test/test_func.rb: atof()'s return value is double.
- this patch is written by Takehiro Kubo.
- Bug #633 [ruby-core:19289]
-
- * ext/dl/test/test_import.rb:
- - atof()'s return value is double.
- - The types of qsort's second and third argument are size_t.
- - fprintf()'s return value is int.
- this patch is written by Takehiro Kubo.
- Bug #633 [ruby-core:19289]
-
-Mon Dec 29 22:37:17 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * process.c (rb_waitpid): retries waitpid when EINTR.
- [ruby-core:19744].
-
-Mon Dec 29 23:18:52 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * bignum.c (rb_cstr_to_inum): changed an error message.
-
- * complex.c (string_to_c_strict): ditto.
-
- * rational.c (string_to_r_strict): ditto.
-
-Mon Dec 29 22:37:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): template f should not accept non float
- values. [ruby-dev:37656]
-
- * object.c (rb_to_float): new function to type check floats.
-
-Mon Dec 29 22:27:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * random.c (rb_f_rand): type check simplified. strings are no
- longer allowed for argument. [ruby-dev:37655]
-
- * test/ruby/test_rand.rb (TestRand::o.to_int): need override
- to_int.
-
-Mon Dec 29 21:22:31 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * numeric.c: Infinity.numerator returns self. [experimental]
-
- * numeric.c: Infinity.denominator returns 1. [experimental]
-
-Mon Dec 29 20:57:14 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * man/ri.1: new manpage.
-
-Mon Dec 29 20:45:25 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c: floor, ceil, truncate and round accept an extra
- argument like Float#round. [experimental]
-
-Mon Dec 29 18:24:49 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * Makefile.in (distclean-local): removes Doxyfile and
- run.gdb at distclean'ing.
-
-Mon Dec 29 17:53:24 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * bin/erb: accepts options in more flexible styles.
-
-Mon Dec 29 17:25:17 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/erb.rb (ERB): m17n of ERB. adds rdoc.
- fixes #712. c.f. [ruby-dev:37516].
-
- * lib/erb.rb (ERB::Compiler#compile): recognizes magic comments.
- returns a pair of compiled script and its script encoding.
-
- * lib/erb.rb (ERB#set_eoutvar): make generated scripts return a
- string in correct encoding.
-
- * lib/erb.rb (ERB#def_method): use Kernel#eval for encoding-awareness
- of the evaluated string.
-
- * bin/erb.rb (ERB::Main.run): adds -E and -U options.
- String is no longer Enumerable.
-
- * man/erb.1: new manpage.
-
- * test/erb/test_erb_m17n.rb: new test case for m17n features.
-
-Mon Dec 29 18:02:45 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/io/wait/wait.c (io_nread): returns number of bytes available
- for read. response to feature request #936 in [ruby-core:20917].
-
-Mon Dec 29 17:52:16 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/io/wait/wait.c (io_ready_p): updated to follow RDoc.
-
-Mon Dec 29 16:52:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (s_recvfrom_nonblock): revert r21162.
-
-Mon Dec 29 16:16:20 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (vm_set_eval_stack, vm_set_main_stack, vm_set_top_stack):
- check stack overflow. [ruby-dev:37646]
-
-Sun Dec 28 18:36:33 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/rubygems/test_gem_command.rb
- (test_add_option_overlapping_common_and_local_options):
- follows r21066.
-
-Mon Dec 29 14:50:19 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * Makefile.in (ext-clean): ext-clean always fails.
-
- * ext/dl/ripper/extconf.rb: adds y.output into the clean list.
-
-Mon Dec 29 11:58:39 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_mutex_trylock): return false if Mutex owned
- by current thread. [ruby-core:20943]
-
- * thread.c (rb_mutex_lock): check dead lock (recursive lock) here.
-
- * test/ruby/test_thread.rb: add a test.
-
-Mon Dec 29 10:58:54 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * file.c (rb_get_path): move encoding conversion of file path
- from rb_scan_open_args.
-
- * io.c (rb_scan_open_args): ditto.
-
-Mon Dec 29 07:15:16 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * cont.c: small RDoc fix mentioned from <radek.bulat at gmail.com>
- in [ruby-core:20921].
-
-Mon Dec 29 03:43:25 2008 Koichi Sasada <ko1@atdot.net>
-
- * ruby.c (process_options): set th->base_block only while
- it is needed. [ruby-dev:37634] [Bug #939]
-
- * ruby.c (require_libraries): clear th->base_block before
- require libraries.
-
-Sun Dec 28 21:33:52 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/ext/dl/test_base.rb: add BSD's case.
-
-Sun Dec 28 21:09:12 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * ext/dl/lib/dl/import.rb (DL::Importer#sizeof): follows
- a feature change in 1.9.
-
-Sun Dec 28 21:03:07 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * ext/dl/lib/dl/import.rb (DL::Importer#extern): adds filename and
- line number to module_eval'ing for readability of backtrace.
- (DL::Importer#bind): ditto.
-
- * ext/dl/lib/dl/struct.rb (DL::CStructBuilder#create): ditto.
-
-Sun Dec 28 19:11:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): do not use snprintf/vsnprintf in
- msvcrt.
-
- * sprintf.c: not force to override snprintf/vsnprintf.
- [ruby-core:20824]
-
-Sun Dec 28 17:21:36 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/rubygems/test_ext_configure_builder.rb (test_self_build_fail):
- Extends pattern for FreeBSD's error message.
-
-Sun Dec 28 17:10:13 2008 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * ext/dl/test/test_dl2.rb: modify strncpy, strcpy, qsort, types.
- Patch by Takehiro Kubo.
- Bug #633 [ruby-core:19289]
- * ext/dl/test/test_base.rb: /lib/libc.so is x86_64 binary in x86_64 architecture.
-
-Sun Dec 28 12:53:10 2008 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * ext/dl/test/test_base.rb: use libc.dylib when the platform is darwin.
-
-Sun Dec 28 12:24:14 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (mutex_free, mutex_unlock): add qualifiers.
-
-Sun Dec 28 10:28:04 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (mutex_free): GC thread (main thread) has failed to unlock
- a mutex that is locked by another thread, which makes the mutex
- dangling in keeping_mutexes and causes [BUG] or stuck finally.
- Now unlocking is performed as locking thread.
-
- * thread.c (mutex_unlock, rb_mutex_unlock, rb_mutex_unlock_all):
- mutex_unlock receives a thread.
-
-Sun Dec 28 05:44:44 2008 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 1.3.1 r4505.
- * test/minitest/*.rb: ditto.
-
-Sun Dec 28 00:43:33 2008 Tanaka Akira <akr@fsij.org>
-
- * runruby.rb: refactored to modify ENV as once.
-
-Sat Dec 27 22:41:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/rdoc/test_rdoc_info_formatting.rb (setup, teardown): uses
- mktmpdir and removes it after the test.
-
- * test/cgi/test_cgi_session.rb (setup, teardown): ditto.
-
-Sat Dec 27 21:46:10 2008 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * ext/dl/test/test_base.rb: use lib64 when the architecture is x86_64.
-
-Sat Dec 27 20:26:59 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_argv_size): if an argument is empty, it's size
- is 2, not 0, because it will be converted to "".
-
-Sat Dec 27 19:40:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (after_exec): needs to reset before restart timer
- thread.
-
- * thread.c (thread_start_func_2): stops timer thread if forked in
- the new thread. [ruby-core:19385]
-
- * thread.c (rb_thread_atfork, rb_thread_atfork_before_exec): DRY.
-
-Sat Dec 27 18:25:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_eval.c (rb_f_loop): return enumerator if no block given.
- [ruby-list:45747]
-
-Sat Dec 27 17:08:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * .gdbinit (dummy_gdb_enums.special_consts): forces to load debug
- info on Mac OS X.
-
- * .gdbinit (rp): added T_ZOMBIE.
-
-Sat Dec 27 16:18:02 2008 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (rb_frame_callee, rb_frame_caller): rb_frame_callee()
- should return method id on current frame.
- add rb_frame_caller() to get method id on parent frame.
- Bug #884 [ruby-dev:37446]
-
- * eval.c (rb_f_method_name): use rb_frame_caller()
- instead of rb_frame_callee().
-
-Sat Dec 27 15:28:12 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (make_econv_exception): show source and destination
- encoding. [ruby-dev:37285]
-
-Sat Dec 27 15:23:38 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (vm_yield_with_cfunc): rename parameter name
- "blockptr" to "blockargptr".
-
-Sat Dec 27 15:15:56 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (revision.h): ignores failure of file2lastrev.
-
-Sat Dec 27 15:02:38 2008 Koichi Sasada <ko1@atdot.net>
-
- * ruby.c (process_options): fix to untouch th->mild_compile_error.
- [ruby-dev:37621], [ruby-dev:37620]
-
-Sat Dec 27 14:48:26 2008 Koichi Sasada <ko1@atdot.net>
-
- * iseq.h, iseq.c (rb_iseq_new_main): add a type ISEQ_TYPE_MAIN.
- [ruby-dev:37619]
-
- * compile.c (rb_dvar_defined, ruby_iseq_compile): ditto.
-
- * iseq.c (iseq_data_to_ary, iseq_load): ditto.
-
- * compile.c (iseq_compile_each): fix to check ip->compile_data.
-
-Sat Dec 27 14:29:33 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb (OpenURI.redirectable?): permit https redirection.
- patch from Roman Shterenzon. [ruby-core:20485]
-
-Sat Dec 27 13:36:55 2008 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (get_errinfo): return th->errinfo value
- if normal errinfo place (dynamic local variable) is not found.
- fixes Bug #732 [ruby-dev:37046].
-
- * bootstraptest/test_proc.rb: add a test.
-
-Sat Dec 27 13:10:43 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * man/irb.1: adds -v, -h, -E and -U.
-
-Sat Dec 27 11:41:45 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (vm_call_method, vm_call_cfunc): use original id instead of
- calling id when NODE_CFUNC or NODE_BMETHOD.
- fixes Bug #632 [ruby-core:19282].
-
- * vm_eval.c (vm_call0, vm_call_super): ditto.
-
- * vm_method.c (rb_add_method, rb_alias): store original id
- in nd_file field of NODE_METHOD.
-
- * test/stringio/test_stringio.rb: add a test.
-
-Sat Dec 27 09:48:54 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (Init_VM): create and define TOPLEVEL_BINDING at first.
-
- * vm.c (vm_set_main_stack, rb_iseq_eval_main): added.
-
- * parse.y (rb_parser_compile_file): fix to check parse_in_eval flag.
-
- * eval.c (ruby_exec_node): use rb_iseq_eval_main()
- instead of rb_iseq_eval().
-
- * iseq.c (rb_iseq_new_main), vm_core.h: added.
- main script (specified by -e or script name) should be run
- under TOPLEVEL_BINDING using Kernel#eval. Above changes
- simulate Kernel#eval behaviour. [ruby-dev:37240]
-
- * compile.c (make_name_for_block): skip iseq except block type.
- this fix is needed for [ruby-dev:37240], and also fixes
- [ruby-dev:35392].
-
-Sat Dec 27 09:14:17 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * cont.c: rdoc for Fiber. patch by Muhammad Ali.
- [ruby-core:20894]
-
-Sat Dec 27 05:38:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (after_fork): ignores a termination request in the
- parent process. [ruby-dev:37447]
-
-Sat Dec 27 01:52:39 2008 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Using a more robust transcoding scheme to produce
- ASCII compatible inspect() messages. [ruby-dev:37591]
-
-Fri Dec 26 18:04:10 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (fptr_finalize): don't allocate objects if noraise.
- (finish_writeconv): add noalloc argument to be able to avoid
- object allocation.
- (finish_writeconv_arg): introduced again.
- (finish_writeconv_sync): follow the above change.
-
-Fri Dec 26 17:04:14 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/irb/input-method.rb (IRB::StdioInputMethod#initialize):
- removed a 'p' for debugging.
-
-Fri Dec 26 15:50:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser::List#summarize): gives priority
- to latter switches. [ruby-dev:36692]
-
- * lib/optparse.rb (OptionParser#summarize): do not append
- unnecessary line terminator.
-
-Fri Dec 26 14:01:38 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (fptr_finalize): close the IO object even if finish_writeconv or
- flush is failed.
- (finish_writeconv): don't raise. return errno or exception.
- (finish_writeconv_arg): removed.
- (finish_writeconv_sync): follow finish_writeconv change.
-
- * transcode.c (rb_econv_make_exception): new function.
-
- * include/ruby/encoding.h (rb_econv_make_exception): declared.
-
-Thu Dec 25 20:57:01 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (str_transcode0): set encoding when String#encode was
- given explicit but the same destination and source encoding.
-
-Thu Dec 25 20:01:50 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_s_pipe): unused variable removed.
-
-Thu Dec 25 19:35:51 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (sym_ignore): remove useless symbol.
-
-Thu Dec 25 18:36:04 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (pipe_close): removed.
- (pipe_yield): defined.
- (rb_io_s_pipe): use pipe_yield.
-
-Thu Dec 25 17:49:45 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (decorate_convpath): show type of escaping for
- xml_attr_quote or some conversions.
-
-Thu Dec 25 17:06:13 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_initialize): check fd validity. [ruby-dev:36646]
-
-Thu Dec 25 16:23:31 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (flush_before_seek): check io_fflush result.
- (rb_io_check_readable): ditto.
- (rb_io_flush): ditto.
- (rb_io_fsync): ditto.
- (remain_size): ditto.
- (rb_io_write_nonblock): ditto.
- (finish_writeconv): ditto.
- (fptr_finalize): ditto.
- (io_reopen): ditto.
- (rb_io_reopen): ditto.
- (copy_stream_body): ditto.
-
-Thu Dec 25 15:54:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_fflush): flush write buffer without write lock in
- finalizers. [ruby-dev:37572]
-
- * io.c (rb_io_fptr_finalize): clear write lock before finalizing.
-
-Thu Dec 25 15:07:22 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (fptr_finalize): close the IO object even if close(2) is failed.
-
-Thu Dec 25 14:51:43 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/rdoc/parser.rb (RDoc::Parser.binary?): should read in binary mode.
-
-Thu Dec 25 14:32:23 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (vm_method_search): fix control flow bug.
- (committed at r20981)
-
-Thu Dec 25 13:28:20 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (rb_io_flush): fsync() after buffer is flushed on win32.
- [ruby-core:20043]
-
-Thu Dec 25 13:13:00 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (vm_method_search): return rb_cObject if there is no
- super class. [ruby-dev:37587]
-
- * bootstraptest/test_method.rb: add tests for above.
-
-Thu Dec 25 12:49:12 2008 Koichi Sasada <ko1@atdot.net>
-
- * proc.c (proc_new): should use proc_dup() if block has Proc.
-
- * vm.c (vm_make_proc_from_block): should use rb_cProc for block.
-
- * vm.c (vm_make_proc): add an assertion.
-
- * bootstraptest/test_proc.rb: add a test.
-
-Thu Dec 25 12:44:27 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (vm_yield_with_cfunc): check block has Proc.
-
-Thu Dec 25 05:53:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * template/id.h.tmpl, id.h (ruby_method_ids): not depend on if
- token are defined as macros. [ruby-dev:37553]
-
- * template/id.h.tmpl, id.h (ruby_method_ids_check): enclosed in a
- struct.
-
-Thu Dec 25 01:52:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_start_func_2): sets native thread key.
-
-Thu Dec 25 01:09:23 2008 TAKAO Kouji <kouji@takao7.net>
-
- * test/readline/test_readline_history.rb: check the encoding that
- is in the Readline::HISTORY.
-
-Thu Dec 25 00:59:06 2008 TAKAO Kouji <kouji@takao7.net>
-
- * test/readline/test_readline_history.rb: did not check the
- encoding that is in the Readline::HISTORY. I will fix it.
-
-Wed Dec 24 22:36:06 2008 Koichi Sasada <ko1@atdot.net>
-
- * error.c, vm_dump.c: change message by rb_bug().
-
-Wed Dec 24 21:57:39 2008 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_peephole_optimize): fix typo.
-
-Sun Dec 21 13:38:04 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (invoke_block_from_c): fix to point right cfp.
-
- * vm.c (vm_make_proc, vm_make_proc_from_block), vm_core.h:
- remove unused parameter cfp.
-
- * vm_insnhelper.c, proc.c (proc_new): ditto.
-
-Wed Dec 24 20:59:12 2008 Koichi Sasada <ko1@atdot.net>
-
- * error.c (exc_equal): == method should not raise Exception.
- [ruby-dev:37519]
-
- * sample/test.rb: fix test.
-
-Wed Dec 24 20:33:45 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (vm_call_method): use class of method defined
- instead of receiver's class on bmethod. fixes [ruby-core:20786]
-
- * bootstraptest/test_method.rb: add a test for above.
-
- * vm_insnhelper.c (vm_setup_method): remove unused parameter klass.
-
- * vm_insnhelper.h (CALL_METHOD): ditto.
-
- * insns.def, vm_eval.c: ditto.
-
-Wed Dec 24 20:15:50 2008 Koichi Sasada <ko1@atdot.net>
-
- * tool/file2lastrev.rb (get_revisions): fix to ignore end of line.
-
-Wed Dec 24 13:33:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (HAVE_LONG_LONG, HAVE_OFF_T): revised for autoconf
- 2.62 or later.
-
-Wed Dec 24 06:29:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (OBJDUMP, OBJCOPY): autoconf list is not comma
- separated.
-
- * configure.in (AC_HEADER_STDC, AC_CHECK_HEADERS, AC_CHECK_FUNCS):
- removed duplicated checks.
-
-Wed Dec 24 03:21:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el: added comment to mention newer version
- bundled with Emacs 23 or later. a patch from Phil Hagelberg
- <phil at hagelb.org> in [ruby-core:20838].
-
-Tue Dec 23 23:49:37 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_init_copy): call io_seek only if io_tell succeeds.
-
-Tue Dec 23 22:57:48 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (rb_fork): don't propagate an error message if error
- buffer not given.
-
-Tue Dec 23 21:55:05 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (rb_fork): propagate an error message from child to parent.
- (rb_f_exec): show details of error in child process on
- exception.
- (save_redirect_fd): add error message arguments.
- (run_exec_dup2): ditto.
- (run_exec_close): ditto.
- (run_exec_open): ditto.
- (run_exec_dup2_child): ditto.
- (run_exec_pgroup): ditto.
- (run_exec_rlimit): ditto.
- (rb_run_exec_options): ditto.
- (rb_exec): ditto.
- (rb_exec_atfork): ditto.
- (rb_spawn_internal): ditto.
- (rb_spawn): ditto.
- (rb_f_system): follow arguments change.
- (proc_daemon): ditto.
- (rb_f_spawn): show details of error in child process on exception.
-
- * io.c (popen_exec): add error message arguments.
- (pipe_open): show details of error in child process on exception.
-
- * include/ruby/intern.h (rb_run_exec_options): add error message
- arguments.
- (rb_exec): ditto.
- (rb_fork): ditto.
- (rb_spawn): ditto.
-
- * ext/pty/pty.c (chfunc): add error message arguments.
-
-Tue Dec 23 20:28:28 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * io.c: rdoc for File::open and 1.9 feature in file modes.
-
- * transcode.c: rdoc for String#encode
-
-Tue Dec 23 19:51:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_spawn): deals with quoted commands.
-
-Tue Dec 23 18:44:21 2008 Tanaka Akira <akr@fsij.org>
-
- * strftime.c (rb_strftime): use locale insensitive functions for tr_TR
- locale.
-
-Tue Dec 23 17:38:03 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit/assertions.rb (assert_equal): show small differences
- for Regexp and Float.
-
-Tue Dec 23 16:49:48 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_spawn): support normal commands with arguments.
-
-Tue Dec 23 16:22:41 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_inspect): show fd number if there is no pathname.
-
-Tue Dec 23 15:48:55 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * tool/file2lastrev.rb: shouldn't use single quote in shell's command
- line if you want to support Windows.
-
-Tue Dec 23 15:46:43 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/mathn.rb: Math.sqrt(NaN) should be NaN. [ruby-dev:37537]
-
-Tue Dec 23 15:46:47 2008 Eric Hodel <drbrain@segment7.net>
- * gem_prelude.rb: Match full RubyGems behavior when a gem can't be
- found.
-
-Tue Dec 23 15:36:58 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * tool/file2lastrev.rb: detects vcs directory properly on building
- outside of srcdir. [ruby-dev:37555] [ruby-dev:37561]
-
-Tue Dec 23 15:30:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (pipe_open): need to initialize args.
-
-Tue Dec 23 14:18:14 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/st.h: need to include defines.h because LONG_LONG is
- defined there.
-
-Tue Dec 23 13:52:05 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/parser/c.rb: Don't coalesce adjacent comment blocks.
- [bug#901]
-
-Tue Dec 23 12:00:00 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (pipe_close): fix coding style. [ruby-dev:37554]
-
-Tue Dec 23 08:10:05 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/installer.rb: Fix documentation. [bug#827]
-
-Tue Dec 23 08:04:58 2008 Eric Hodel <drbrain@segment7.net>
-
- * gem_prelude.rb: Don't remove methods twice. [bug#555]
-
-Tue Dec 23 00:16:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * sprintf.c (rb_str_format): fix buffer overflow.
-
-Mon Dec 22 19:31:19 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (revision.h): uses tool/file2lastrev.rb to support
- git-svn.
-
- * version.h: changed version string as
- `ruby 1.9.1 (2008-12-22 patchlevel-5000 trunk 20912)
- [i386-darwin9.6.0]'.
-
-Mon Dec 22 16:32:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): encoding of packed string only from 'm',
- 'M', and 'u' should be US-ASCII. [ruby-dev:37284]
-
- * pack.c (pack_pack): encoding of packed string only from 'U'
- should be UTF-8. also upgrade US-ASCII strings to UTF-8.
-
-Mon Dec 22 15:56:49 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * Doxyfile.in: new file. Template of a configuration file.
- Introduces C-level API reference generation with Doxygen.
-
- * tool/file2lastrev.rb: wrapper script that abstracts subversion
- and git-svn.
-
- * tool/strip-rdoc.rb: filter for preventing doxygen from processing
- rdoc comments.
-
- * configure.in: (Doxyfile): Doxyfile is generated together with
- Makefile.
- (PACKAGE): configuration $(PACKAGE) is necessary for $(docdir).
-
- * instruby.rb: adds a new install target 'capi'
-
- * common.mk (capi): new target that generates C API documents with
- Doxygen.
- (install-capi): new target.
- (pre-install-capi): ditto.
- (do-install-capi): ditto.
- (post-install-capi): ditto.
-
-Mon Dec 22 21:31:11 2008 Tanaka Akira <akr@fsij.org>
-
- * numeric.c (int_ord): Integer#ord implemented.
-
-Mon Dec 22 21:26:12 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_s_pipe): IO.pipe can take a block.
- (pipe_close): new function.
-
-Mon Dec 22 21:08:54 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit/assertions.rb (assert_nothing_raised): increment
- assertion count. [ruby-dev:37480]
-
-Mon Dec 22 19:10:44 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (Init_native_thread): need to call
- ruby_thread_set_native() here.
-
-Mon Dec 22 18:00:36 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: fix wrong flag value.
-
-Mon Dec 22 15:15:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/protocol.rb (Net::BufferedIO#rbuf_fill): avoid calling
- read_nonblock in rescue. use retry instead.
-
-Mon Dec 22 14:35:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_external_str_new_with_enc): set ASCII-8BIT if
- encoding is US-ASCII and string contains 8bit characters.
-
-Mon Dec 22 12:26:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cygwin/GNUmakefile.in (rubydll.def), win32/mkexports.rb
- (Exports#exports): added VERSION.
-
-Mon Dec 22 12:25:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing/vsnprintf.c (BSD_vfprintf): fix for test_sprintf_comb.rb, by
- wanabe in [ruby-dev:36935].
-
-Mon Dec 22 12:05:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (mingw): no longer uses snprintf and vsnprintf of
- msvcrt. [Bug#6]
-
- * win32/win32.c (rb_w32_vsnprintf, rb_w32_snprintf): removed.
-
- * win32/Makefile.sub (config.h): vsnprintf exists in VC7 or later.
-
- * win32/mkexports.rb (Exports#initialize): aliases
- rb_w32_vsnprintf and rb_w32_snprintf for binary compatibility.
-
- * sprintf.c (rb_str_format): uses snprintf instead of sprintf.
-
- * numeric.c (flo_to_s, rb_num2long, rb_num2ll): ditto.
-
-Mon Dec 22 10:59:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_upto): should return enumerator if called
- without block. [ruby-dev:37526]
-
-Mon Dec 22 09:54:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (gettable_gen): the encoding of __FILE__ should be
- rb_filesystem_encoding(). [ruby-list:45733]
-
- * parse.y (gettable_gen): __FILE__ should be ASCII-8BIT when
- filesystem encoding is US-ASCII and __FILE__ contains non 7bit
- characters.
-
-Mon Dec 22 02:54:56 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: temporary patch for trouble on TkAqua (> Tk8.4.9).
-
- * ext/tk/sample/demos-jp/widget: set encoding to a demo-code string to
- avoid garbled text on the Code Window.
-
-Sun Dec 21 14:55:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (SPLAT_PROC): splat values by hand.
-
-Sun Dec 21 13:50:37 2008 TAKAO Kouji <kouji@takao7.net>
-
- * test/readline/test_readline.rb
- (TestReadline#test_some_characters_methods): checked encoding.
-
-Sun Dec 21 12:23:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (SPLAT_PROC): fix for regexp. [ruby-dev:37514]
-
-Sun Dec 21 10:43:10 2008 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * sample/test.rb: rescue exception.
-
-Sat Dec 20 18:28:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (dln_find_1): supplements an extension for executable
- files on DOSish platforms.
-
- * io.c (pipe_open): use rb_w32_aspawn() for array form.
-
- * win32/win32.c (rb_w32_pipe_exec): no longer used.
-
- * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): deals with batch
- files and commands with extensions. [ruby-core:20695]
-
- * win32/win32.c (has_redirection): supports environment variables
- references.
-
-Sat Dec 20 15:34:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rake.rb (Rake::FileList#egrep): change open mode to "rb",
- i.e. default to binary. [ruby-dev:37385]
-
- * lib/rake.rb (Rake::FileList#egrep): allow specifying reading
- encoding, e.g. FileList['*.rb'].egrep(/require/, encoding:
- "ascii-8bit")
-
- * lib/rake.rb (Rake::MultiTask): invoke_prerequisites should be
- private. a patch from okkez in [ruby-dev:37399]
-
-Sat Dec 20 10:59:16 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/irb/locale.rb (IRB::Locale#initialize)
- initializes instance variables to suppress warnings.
- typo fix to ignore LoadError: [ruby-dev:37508]
-
-Fri Dec 19 17:01:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_extract_encoding_option): "internal_encoding: nil"
- to specify no-transcoding. and other corner case fixed.
- [ruby-dev:37496]
-
- * hash.c (rb_hash_lookup2): new function to look-up hash with
- default value.
-
-Fri Dec 19 15:51:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): get rid of warning on DOSISH.
-
-Fri Dec 19 07:45:37 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (exc_equal): duck typing equal to make it transitive.
- [ruby-dev:34808]
-
-Thu Dec 18 19:31:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/irb/init.rb (IRB.opt_parse): (M17N) adds -U and -E as command
- line options. [ruby-dev:37161]. Fixes #711.
- improved long options.
-
- * lib/irb/init.rb (IRB.set_encoding): new subroutine for IRB.opt_parse
-
- * lib/irb/input-method.rb (IRB::StdioInputMethod): (M17N) regards
- scripts that user types as encoded in the external_encoding.
-
- * lib/irb/input-method.rb (IRB::ReadlineInputMethod): ditto.
-
- * lib/irb/input-method.rb (IRB::FileInputMethod): (M17N) respects
- magic comment.
-
- * lib/irb/help.rb (IRB.print_usage): (M17N) respects magic comment
- in the resource file.
-
- * lib/irb/lc/help-message: adds -U and -E.
-
- * lib/irb/lc/ja/help-message: ditto. re-encoded from ISO-2022-JP into UTF-8.
-
- * lib/irb/lc/ja/encoding_aliases.rb: new file. provides Japanese specific
- character encoding name table for backward compatibility.
-
- * lib/irb/lc/ja/error.rb: re-encoded from ISO-2022-JP into UTF-8.
- magic comment.
-
- * lib/irb/locale.rb: integrated with Ruby 1.9's M17N support.
-
- * lib/irb/magic-file.rb: new file. utility to handle files with magic
- comment and opens in the correct encoding.
-
- * lib/irb/ruby-lex.rb (RubyLex#each_top_level_statement): recovers
- character encoding for a statement after it lexed so that irb can
- eval the statement in correct encoding.
-
- * lib/irb/src_encoding.rb: new file. utility.
-
-Thu Dec 18 21:12:28 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/session.rb: fix bug for ignore session_id option.
- report from [ruby-core:18635], [Bug #572]
-
- * lib/cgi/core.rb: use Encoding#find when encoding set.
-
- * test/cgi/test_cgi_session.rb: test for session_id specified.
-
-Thu Dec 18 17:00:56 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_aset): string key copying only happen if key is
- an exact instance of String, not a subclass. based on a patch
- from Mike Gold <mike.gold.4433 at gmail.com> in [ruby-talk:322667].
- [incompatible] [ruby-talk:322417]
-
-Thu Dec 18 16:48:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/optparse/version.rb: remove variable shadowing to stop
- warning. [ruby-core:20612]
-
- * lib/irb/completion.rb, lib/net/imap.rb, lib/prime.rb,
- lib/rinda/ring.rb, lib/racc/parser.rb,
- lib/shell/command-processor.rb, lib/yaml/yamlnode.rb: ditto.
-
- * lib/racc/parser.rb: remove space before parentheses.
-
- * lib/shell/command-processor.rb, lib/shell/process-controller.rb:
- use parentheses around arguments.
-
- * lib/irb/ext/change-ws.rb, lib/rexml/validation/relaxng.rb,
- lib/yaml/baseemitter.rb: indentation fix.
-
- * lib/matrix.rb: small cosmetic change.
-
-Thu Dec 18 08:15:04 2008 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/xmlrpc/server.rb: Restricting method inspection to show only
- non-inherited public methods. [ruby-core:20603]
-
- * lib/xmlrpc/server.rb: Fixing method inspection so it doesn't
- trigger XMLRPC::FaultException when used. [ruby-core:20604]
-
-Wed Dec 17 19:39:44 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (unix_recv_io): relax msg_controllen error
- check for x86_64-openbsd4.4.
-
-Wed Dec 17 19:37:30 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/extconf.rb: check util.h for OpenBSD.
-
- * ext/pty/pty.c: include util.h if available. fix variable name.
-
-Wed Dec 17 19:23:28 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/matrix.rb: shut up warning. [ruby-dev:37481] [Bug #899]
-
-Wed Dec 17 15:44:28 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_pop_m): use enum ary_take_pos_flags.
-
- * array.c (rb_ary_push_m): add modification check before actual
- operation. [ruby-dev:37440]
-
-Wed Dec 17 15:35:39 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * configure.in (OBJDUMP, OBJCOPY):
- *BSD's ports and MacPorts prefix GNU binutils with 'g'.
-
-Wed Dec 17 11:39:39 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/bigdecimal/test_bigdecimal.rb (TestBigDecimal#test_hash):
- shut up warning. see [ruby-dev:37437]
-
-Wed Dec 17 11:01:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_hash): gets rid of collisions between different
- encoding strings. [ruby-core:20526]
-
-Wed Dec 17 09:50:19 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/test_metaclass.rb: removed codes for my debugging.
- sorry. [ruby-dev:37470]
-
-Tue Dec 16 22:55:11 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bin/testrb: set $0.
-
-Tue Dec 16 22:42:16 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit.setup_argv): sorry, fixed wrong commit.
-
-Tue Dec 16 22:15:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/minitest/unit.rb (MiniTest::Assertions#assert_instance_of):
- should assert by instance_of?, not ===. [ruby-dev:37458]
-
- * lib/minitest/unit.rb (MiniTest::Assertions#assert_instance_of):
- typo fixed.
-
-Tue Dec 16 21:59:29 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit.setup_argv): ALT_SEPARATOR support.
-
-Tue Dec 16 21:59:02 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (VpToString): reverted modification
- (that caused a bug) in r20359. [ruby-dev:37370]
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_limit): comment update.
- [ruby-dev:37465]
-
-Tue Dec 16 20:34:44 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/pty.c (getDevice): add nomesg argument.
- (get_device_once): add nomesg argument. chmod slave tty to 0600
- if nomesg. more error tests.
- (no_mesg): new function.
- (pty_open): make slave tty's mode 0600.
-
-Tue Dec 16 20:24:20 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (_parse): m17n compliant.
-
-Tue Dec 16 19:48:18 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/extconf.rb: check posix_openpt.
-
- * ext/pty/pty.c (get_device_once): use posix_openpt if available.
-
-Tue Dec 16 19:43:53 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c: use strlcpy for error messages.
-
-Tue Dec 16 16:41:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stmt): returns dispatched result.
-
- * parse.y (primary): also in ripper, saves in_def before restoring.
-
-Tue Dec 16 12:30:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ac_cv_header_ucontext_h): do not use ucontext.h on Mac
- OS X 10.5 or later. merged from MacPorts.
-
- * configure.in (ac_cv_func_daemon): daemon(3) is deprecated on Mac OS
- X 10.5 or later.
-
-Tue Dec 16 11:37:07 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ruby.c (set_arg0): use strlcpy() instead of strncpy().
-
- * load.c (rb_feature_p): ditto.
-
- * dln.c (dln_load): ditto.
-
-Tue Dec 16 09:14:28 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (block_call): block should not be given to yield.
- [ruby-core:20583]
-
-Mon Dec 15 23:48:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (sleep_timeval): cast tv_usec to long to shut up
- warnings on OSX. [ruby-dev:37449]
-
-Mon Dec 15 23:34:04 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/pty.c (pty_open): set FMODE_SYNC and FMODE_DUPLEX.
-
-Mon Dec 15 23:29:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (process_options): revive global sub, gsub, chop, chomp
- only when auto looping options (-p/-n) is specified.
- [ruby-core:20570]
-
-Mon Dec 15 22:48:11 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/pty.c (pty_open): new method PTY.open.
-
-Mon Dec 15 21:24:01 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/pty.c (get_device_once): use DEVICELEN instead of
- sizeof SlaveName.
-
-Mon Dec 15 21:01:46 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/pty.c (chfunc): make it static.
-
-Mon Dec 15 20:59:10 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/pty.c (child_info): add slavename.
- (chfunc): use slavename.
- (establishShell): set slavename.
-
-Mon Dec 15 20:16:46 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (EXTMK_ARGS): shouldn't use ``\"'' because cmd.exe eat
- ''\'' in such quotes.
-
-Mon Dec 15 19:07:31 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): define CANONICALIZATION_FOR_MATHN
- to follow r20683.
-
-Mon Dec 15 18:12:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rake/packagetask.rb (Rake::PackageTask): small document
- update from okkez in [ruby-dev:37443]
-
-Mon Dec 15 16:28:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_callee_setup_arg_complex): uses cfp from
- blockptr instead of the current cfp. [ruby-core:20544]
-
-Mon Dec 15 14:56:59 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/test_metaclass.rb: new test case for metaclass hierarchy.
-
- * class.c (make_metametaclass): new function. extracted from
- rb_make_metaclass.
-
- * class.c (rb_make_metaclass): uses make_metametaclass when called for a
- metaclass.
-
- * class.c (rb_singleton_class): creates a meta^(n+2)-class in
- addition to a meta^(n+1)-class when called for a meta^(n)-class.
- This is because the returned meta^(n+1) class must acts as an instance of
- Class, metaclass of Class, ..., meta^(n+1)-class of Class,
- Module, metaclass of Module, ..., meta^(n+1)-class of Module,
- Object, metaclass of Object, ..., meta^(n+2)-class of Object,
- BasicObject, metaclass of BasicObject, ..., meta^(n+2)-class of
- and BasicObject even when Class, Module, Object or BasicObject has
- not have its meta^(i)-class yet.
-
-Mon Dec 15 15:13:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * id.h, template/id.h.tmpl (ruby_method_ids): sees YYTOKENTYPE too.
- [ruby-dev:37436]
-
-Mon Dec 15 15:02:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (EXTMK_ARGS): needs MINIRUBY for cross-compile.
- [ruby-core:20131]
-
-Mon Dec 15 14:39:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_eval.c (vm_call0): NODE_ZSUPER supported. [ruby-core:20480]
-
- * vm_eval.c (vm_call_super): uses method_missing().
-
- * vm_eval.c (method_missing): get rid of too large alloca.
-
- * vm_eval.c (rb_call0, method_missing): uses idMethodMissing.
-
- * vm_method.c (rb_add_method, remove_method, rb_undef): uses
- id__send__.
-
- * vm_method.c (Init_eval_method): removed IDs which are defined as
- immediate values.
-
-Mon Dec 15 11:35:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_backtrace): defaults to script name for C functions.
-
-Mon Dec 15 11:32:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (rubylib_mangled_path, rubylib_mangled_path2): cannot use
- locale encoding before load path is initialized
-
- * ruby.c (ruby_init_loadpath_safe): ditto.
-
- * ruby.c (process_options): loads encdb so that encodings can be
- loaded, then associates script name and load paths with the
- locale encoding.
-
-Mon Dec 15 10:00:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (btest-ruby): use RUNRUBY instead of MINIRUBY to load the
- shared library. [Bug #849]
-
-Sun Dec 14 22:31:19 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c (bigmul1_karatsuba): remove temporal bignum.
-
- * bignum.c (bigsqr): call bigmul0(x, x) because it is faster than the
- original bigsqr at this point.
-
- * bignum.c (rb_big_pow): a value returned from bigsqr is already
- truncated.
-
-Sun Dec 14 21:13:02 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c (bigmul1_karatsuba): fix comment and refactoring.
-
-Sun Dec 14 14:53:41 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c (bigmul1_balance, bigmul1_karatsuba): remove all
- rb_gc_force_recycle which causes memory leak.
-
-Sun Dec 14 14:26:11 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * spec/README: directory structure changed
-
-Sun Dec 14 09:14:37 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * reverts r20713.
-
-Sun Dec 14 12:51:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c (rb_big_mul): faster multiplication by Karatsuba method and
- twice faster square than normal multiplication. [ruby-dev:37392]
-
- * random.c (rb_rand_internal): used by Bignum#*.
-
- * test/ruby/test_bignum.rb: add some tests for above.
-
-Sun Dec 14 01:35:48 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (forked_child): new variable.
- (before_exec): don't call rb_thread_stop_timer_thread if
- forked_child.
- (after_exec): reset forked_child after rb_thread_start_timer_thread.
- (rb_fork): set forked_child just after fork in child.
-
- * ext/pty/pty.c (chfunc): extracted from establishShell.
- (establishShell): use rb_fork.
-
- [ruby-dev:37418]
-
-Sat Dec 13 22:17:30 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (help): describes more targets.
- based on a patch by Michael Klishin. [ruby-core:20523].
-
-Sat Dec 13 18:34:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (sym_printable): wrong condition for string iteration.
-
-Sat Dec 13 16:04:48 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * encoding.c (default_external): endless recursion during
- loading a locale encoding on some locale.
- fixed by Nobuyoshi Nakada.
-
-Sat Dec 13 15:55:37 2008 TAKAO Kouji <kouji@takao7.net>
-
- * ruby.c (process_options): fixed default_internal is nil.
- (closes #862)
-
-Sat Dec 13 15:52:27 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (sym_equal): remove documentation error "Otherwise,
- compares them as strings". [ruby-dev:37398]
-
- * string.c (sym_inspect): quote if symbol contains non-printable
- characters. [ruby-dev:37398]
-
-Sat Dec 13 14:24:38 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/enc/test_utf16.rb: feature changed in r20626.
- follows it.
-
-Sat Dec 13 13:41:44 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/test_m17n_comb.rb: feature changed in r20626.
- follows it.
-
-Sat Dec 13 13:03:20 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: use rb_usascii_str_new2 instead of rb_str_new2.
-
- * rational.c: ditto.
-
-Sat Dec 13 12:48:57 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/test_m17n.rb: feature changed in r20626.
- follows it.
-
-Sat Dec 13 12:38:16 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/minitest/test.rb (MinTest::Unit#location):
- skips user-defined assertions as MiniTest's.
- e.g. for test/ruby/test_m17n.rb.
-
-Sat Dec 13 09:17:33 2008 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/*.rb: Imported minitest 1.3.1 r4503.
- * test/minitest/test_mini_test.rb: ditto.
- * lib/miniunit/autorun.rb: added (as part of r4503).
-
-Sat Dec 13 08:35:14 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_canonicalization): renamed.
-
- * ext/math/complex.c: followed the above change.
-
- * rational.c (nurat_canonicalization): renamed.
-
- * ext/math/rational.c: followed the above change.
-
- * configure.in: defines a new macro.
-
-Sat Dec 13 01:10:03 2008 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/readline.c
- (readline_s_get_completion_append_character): uses locale
- encoding but not ASCII-8BIT.
-
-Fri Dec 12 22:12:46 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c, rational.c: do not use RUBY_VERSION_CODE.
-
-Fri Dec 12 21:41:36 2008 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/readline.c: r20662 reverted.
-
-Fri Dec 12 19:29:07 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * encoding.c (rb_enc_set_default_external): default_internal can be
- nil, but default_external cannot.
-
- * encoding.c (rb_set_default_internal): adds rdoc.
-
- * encoding.c (enc_find): ditto.
-
-Fri Dec 12 19:24:47 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (run, runruby, parse, gdb, gdb-ruby): you can also run
- other scripts than $(srcdir)/test.rb.
-
-Fri Dec 12 19:13:43 2008 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/readline.c (readline_readline): changed the message
- of IOError to 'closed stdin' from 'stdin closed' if stdin was
- closed.
-
-Fri Dec 12 19:00:49 2008 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/readline.c: used the ExportStringValue macro
- instead of the OutputStringValue macro. removed the
- OutputStringValue macro.
-
-Fri Dec 12 16:23:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (yycompile0): ruby_eval_tree_begin is always 0 when
- ruby_eval_tree is 0.
-
-Fri Dec 12 14:09:55 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * encoding.c (enc_get_default_encoding): removed.
- Generalizing rb_default_{external,internal}_encoding seems to be
- difficult.
- default_external cannot be NULL even before detected. [ruby-dev:37390]
-
- * encoding.c (rb_default_external_encoding): has its own
- implementation again.
-
- * encoding.c (rb_default_internal_encoding): ditto.
-
- * gem_prelude.rb: added notice.
-
- * ruby.c (rubylib_mangled_path, rubylib_mangled_path2): uses locale
- encoding but not ASCII-8BIT.
-
- * ruby.c (process_options): refers less to default_external.
-
-Fri Dec 12 11:00:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (rb_feature_p): load path must be expanded.
- [ruby-dev:37388]
-
-Fri Dec 12 10:28:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_version): greps only the line that defines version.
-
- * version.h (RUBY_VERSION_CODE, RUBY_RELEASE_CODE): removed.
-
-Fri Dec 12 10:20:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * complex.c, rational.c: do not use RUBY_VERSION_CODE.
-
-Fri Dec 12 10:19:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_string_value_ptr, rb_to_id): do not use a side
- effect expression in RSTRING_PTR.
-
- * string.c (rb_str_split_m): simplified the argument of
- RSTRING_LEN.
-
-Thu Dec 11 23:48:00 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/cmath.rb (sqrt): should pass nan to the original method.
-
-Thu Dec 11 21:04:04 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker.rb, lib/rss/maker/0.9.rb, lib/rss/maker/base.rb:
- RSS::Maker.[] returns a maker class corresponds to passed version.
-
- * test/rss/test_maker_*.rb: add tests for RSS::Maker.[].
-
-Thu Dec 11 20:05:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_aliases_enc_i): skips default internal.
-
-Thu Dec 11 19:31:45 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit/assertions.rb: extracted from lib/test/unit.rb.
- lib/test/unit/testcase.rb: ditto.
- at asakusa.rb. [ruby-core:20014]
-
-Thu Dec 11 19:23:09 2008 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_io.rb (test_dup_many): extracted from test_dup.
- test in ruby subprocess. at asakusa.rb. [ruby-dev:35648]
-
-Thu Dec 11 19:16:30 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/pathname.rb (Pathname#=~): undefed. at asakusa.rb.
- [ruby-core:19690]
-
-Thu Dec 11 13:09:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (reg_enc_error): raise EncodingCompatibilityError for
- encoding incompatibility. [ruby-core:18600]
-
- * re.c (rb_reg_prepare_enc): more consistent error message.
- [ruby-core:18611]
-
-Thu Dec 11 13:36:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (enc_set_default_encoding): allowed to set default
- encoding.
-
- * encoding.c (rb_locale_encoding): removed Encoding::LOCALE.
-
- * encoding.c (rb_enc_set_default_external): ditto.
-
- * encoding.c (rb_enc_set_default_internal): ditto.
-
- * encoding.c (rb_enc_set_default_internal): defines internal
- encoding as nil.
-
-Thu Dec 11 11:11:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/st.h (size_t): needs stddef.h or stdlib.h.
- [ruby-core:20339]
-
-Thu Dec 11 10:25:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_bignum.rb (TestBignum#test_convert): remove
- platform dependent call of Process.wait. coverage should be
- accomplished by other method. [ruby-dev:36062]
-
-Thu Dec 11 10:18:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rexml/document.rb (REXML::Document#write): require
- rexml/formatters/transitive if transitive flag is on. a patch
- from akira yamada in [ruby-dev:36230]. fix #553
-
- * lib/rexml/element.rb (REXML::Element#write): ditto.
-
- * lib/rexml/formatters/transitive.rb (REXML::Formatters::Transitive#write_element):
- add hack for IE. [ruby-dev:36230]
-
-Thu Dec 11 02:37:22 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * math.c (domain_check): should not raise EDOM exception for NaN
- value if operand is also NaN. affects acos, asin, acosh, atanh,
- log, log2, log10, sqrt, gamma, lgamma. [ruby-dev:37357]
-
-Thu Dec 11 02:23:51 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open3.rb (Open3.pipeline_start): return an array of threads if a
- block is not given.
-
-Thu Dec 11 01:48:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_round): should be round
- to integer. [ruby-dev:37355]
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_divmod): division should
- be integer. [incompatible] [ruby-dev:37355]
-
-Thu Dec 11 01:21:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (rb_mutex_unlock): shut up warning. a patch from
- Kazuhiro NISHIYAMA in [ruby-dev:37345]. fix #846
-
-Wed Dec 10 23:58:56 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: avoided warnings on cpp. [ruby-dev:37344]
-
- * rational.c: ditto.
-
-Wed Dec 10 21:32:02 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker.rb (RSS::Maker.[]): add.
- Suggested by Akinori MUSHA. Thanks!!! [ruby-dev:37210]
-
-Wed Dec 10 12:56:32 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (enumerator_rewind): If the enclosed object
- responds to a "rewind" method, call it; cf. [ruby-dev:37268]
-
-Wed Dec 10 12:46:52 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (enumerator_next): Fix a typo: s/rewinded/rewound/.
-
- * lib/prime.rb (Prime::OldCompatibility#each): Ditto.
-
-Wed Dec 10 11:25:53 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_initialize): raise RegexpError when encoding
- is dummy encoding. [ruby-dev:37091]
-
-Wed Dec 10 01:28:16 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (win32.obj): depend on headers.
-
-Tue Dec 9 18:35:35 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/single_byte.trans, cp850-tbl.rb, cp852-tbl.rb,
- cp855-tbl.rb, koi8-r-tbl.rb, koi8-u-tbl.rb, tis-620-tbl.rb:
- new single-byte transcodings (from Yoshihiro Kambayashi)
-
- * test/ruby/test_transcode.rb: added tests for the above
- (from Yoshihiro Kambayashi), small cosmetic fixes
-
-Tue Dec 9 13:33:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_compile_each), gc.c (assign_heap_slot),
- (gc_mark_children), parse.y (vtable_alloc, vtable_free, vtable_add),
- proc.c (proc_to_s), thread.c (terminate_i, rb_thread_terminate_all),
- (thread_start_func_2, blocking_region_begin, blocking_region_end),
- (rb_thread_kill), thread_pthread.c (native_thread_create),
- (ubf_pthread_cond_signal), vm.c (check_env, thread_free), vm_dump.c
- (vm_env_dump_raw, vm_stack_dump_each, vm_thread_dump_state),
- (vm_call0): use void pointer for %p.
-
- * cont.c (fiber_status), template/insns.inc.tmpl (ruby_vminsn_type),
- vm_insnhelper.h (BOP): ISO C forbids comma at end of enumerator
- list.
-
- * vm_insnhelper.c (check_cfunc): use function pointer.
-
-Tue Dec 9 13:23:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/curses/curses.c (curses_use_default_colors): add new
- method. a patch from Giancarlo F Bellido
- <support at coaxialhost.com> in [ruby-core:20434].
-
- * ext/curses/curses.c (curses_tabsize_set): ditto.
-
- * ext/curses/curses.c (curses_tabsize_get): ditto.
-
-Tue Dec 9 12:08:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * .gdbinit (rp): fixed typo for T_STRUCT.
-
-Tue Dec 9 11:50:46 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * pack.c (pack_pack): fixed [ruby-dev:37295].
- Array#pack always has returned an US-ASCII string when
- the given format ended with 'u', 'M' or 'm'.
-
-Tue Dec 9 03:21:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb: fix for continued lines. based on a patch from
- Marcus Rueckert <darix AT opensu.se> at [ruby-core:20420].
-
-Tue Dec 9 00:54:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot (package): enc.mk in snapshot is dummy and should
- not deal with objects. [ruby-core:20422]
-
-Tue Dec 9 00:17:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/depend (clean-srcs): split out from clean.
-
-Mon Dec 8 23:34:18 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * pack.c (pack_pack): fixed odd act of 'm*', 'M*', and 'P*'.
- just ignores '*' in these cases.
- [ruby-dev:37289]
-
-Mon Dec 8 18:31:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * pack.c (pack_pack): fixed length for odd length string.
- [ruby-dev:37283]
-
-Mon Dec 8 11:28:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): added version, copyright, usage, yydebug,
- syntax to --dump option.
-
-Mon Dec 8 11:15:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): source-encoding option.
-
-Mon Dec 8 10:32:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (set_option_encoding_once): dry.
-
- * ruby.c (proc_options): checks extra argument for -E/--encoding.
-
-Sun Dec 7 23:47:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LIBPATHFLAG): use numbered specifier if RPATHFLAG
- is set. [ruby-talk:322136]
-
-Sun Dec 7 23:17:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (LIBRUBY_SO): localizes non-public symbols.
-
- * configure.in (OBJDUMP, OBJCOPY): for dealing with binary files.
-
-Sun Dec 7 17:44:06 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open3.rb (Open3.capture3): renamed from Open3.poutput3.
- (Open3.capture2): renamed from Open3.poutput2.
- (Open3.capture2e): renamed from Open3.poutput2e.
-
-Sun Dec 7 11:48:04 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open3.rb (Open3.poutput3): :binmode option implemented.
- (Open3.poutput2): ditto.
- (Open3.poutput2e): ditto.
-
-Sat Dec 6 18:33:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot (package): added RM and CP. [ruby-dev:37288]
-
-Sat Dec 6 17:51:35 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * pack.c (pack_pack): 'u0' is not special differently from 'm0'.
-
-Sat Dec 6 14:35:06 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * pack.c (pack_pack): set US-ASCII and CODERANGE_7BIT
- when quoted-printable ('M') and base64 ('m').
- [ruby-dev:37284]
-
- * pack.c (pack_unpack): ditto.
-
-Fri Dec 5 22:56:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_make_exception): single argument to raise may be
- string compatible object.
-
-Fri Dec 5 21:45:45 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (nurat_{to_s,inspect}): performance improvement.
-
-Fri Dec 5 21:42:44 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: inspect should not depend on to_s.
-
-Fri Dec 5 21:18:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_truncate): return
- integer if no optional argument given. [incompatible]
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_floor): ditto.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_ceil): ditto.
-
-Fri Dec 5 19:06:04 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open3.rb (Open3.pipeline_start): new method.
- (Open3.pipeline): ditto.
-
-Fri Dec 5 18:55:25 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (run_exec_dup2): !save is false if Qnil.
-
-Fri Dec 5 18:07:32 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_read, rb_w32_write, rb_w32_isatty): check
- whether fd is valid.
-
-Fri Dec 5 13:05:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (rb_iseq_parameters): proc arguments are always optional.
-
- * proc.c (get_proc_iseq, rb_proc_parameters): ditto.
-
-Fri Dec 5 12:38:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_set_sequence): uses rb_compile_warning() for
- warning at compilation time.
-
-Fri Dec 5 12:35:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (ruby_iseq_compile, ruby_iseq_translate_threaded_code),
- (ruby_insns_name_array, ruby_iseq_build_from_ary): prefixed with
- ruby_.
-
- * iseq.c (ruby_iseq_load, ruby_insn_make_insn_table): ditto.
-
-Fri Dec 5 10:01:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_cmp_m): fixed rdoc. pointed out by <Thomas
- C. Mitchell AT gmail.com> at [ruby-talk:321967]
-
-Fri Dec 5 07:58:30 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_binwrite): arg.offset should be updated after retry.
-
-Fri Dec 5 03:29:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (rb_get_load_path): returns the load path without
- touching.
-
- * load.c (rb_feature_provided): new function to return the loading
- path in addition to rb_provided().
-
- * load.c (search_required): sets path if loading.
-
- * variable.c (autoload_provided): load paths are expanded to check
- if loading.
-
- * variable.c (autoload_node): keeps autoload mark while loading.
- [ruby-core:20235]
-
- * variable.c (rb_const_get_0): loops while autoload mark is set.
-
-Fri Dec 5 01:37:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_read): ERROR_BROKEN_PIPE is not a real error
- at this point.
-
- * io.c (pipe_open): use rb_w32_spawn() instead of rb_w32_pipe_exec()
- to use our own redirection scheme.
-
-Fri Dec 5 01:35:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (sym_to_proc): use hidden object.
-
-Fri Dec 5 01:19:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): propagate taint status from format string to
- result string.
-
-Fri Dec 5 00:34:10 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (run_exec_dup2): need to sort by reverted order when
- restoring fds.
-
-Fri Dec 5 00:17:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (sym_to_proc): caches Symbol procs, based on a patch from
- Shumpei Akai <admin AT flexfrank.net>. [ruby-dev:37265]
-
-Thu Dec 4 23:29:34 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (waitpid): fix bug of checking child slot.
-
- * win32/win32.c (FindChildSlotByHandle): new.
-
-Thu Dec 4 23:24:05 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open3.rb (Open3.poutput3): new method.
- (Open3.poutput2): ditto.
- (Open3.poutput2e): ditto.
-
-Thu Dec 4 23:02:13 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * spec/default.mspec: follows changes in rubyspec project.
- inherits configurations from ruby.1.9.mspec.
-
-Thu Dec 4 22:13:55 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/ruby/test_complex.rb: added some tests.
-
- * test/ruby/test_rational.rb: ditto.
-
-Thu Dec 4 19:56:20 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open3.rb (Open3.popen3): simplified.
- (Open3.popen_run): extracted from Open3.popen3.
- (Open3.popen2): new method.
- (Open3.popen2e): new method.
- (Open3.pipeline_rw): new method.
- (Open3.pipeline_r): new method.
- (Open3.pipeline_w): new method.
- (Open3.pipeline_run): new private method.
-
-Thu Dec 4 19:16:28 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (check_exec_fds): resolve cascaded child fd reference.
-
-Thu Dec 4 16:58:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rubygems/validator.rb (Gem#remove_leading_dot_dir): make
- this method private. a patch from okkez in [ruby-dev:37245]
-
-Thu Dec 4 16:19:18 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_read_nonblock):
- OpenSSL::SSL::SSLSocket should implement read_nonblock. a patch
- from Aaron Patterson in [ruby-core:20277]. fix: #814 [ruby-core:20241]
-
-Thu Dec 4 16:16:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/gserver.rb: fixed type in sample code. a report from Oleg
- Puchinin.
-
-Thu Dec 4 14:54:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rubygems/local_remote_options.rb (Gem#add_update_sources_option):
- little documentation fix. a patch from okkez. [ruby-dev:37271]
-
-Thu Dec 4 13:56:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/curses/curses.c (window_getch): avoid ISPRINT() macro which
- has an issue with OpenSolaris. [ruby-core:20189]
-
- * ext/curses/curses.c (curses_getch): no ISPRINT(). [ruby-core:20294]
-
- * signal.c (ruby_signal): EINVAL from sigaction(2) is not a bug.
-
-Thu Dec 4 11:40:56 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (inspect_enumerator): Implement #inspect.
- [ruby-dev:37248]-[ruby-dev:37263]
-
-Thu Dec 4 11:38:40 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * vm_method.c (rb_obj_respond_to): Remove a duplicated rdoc
- comment and fix a markup error.
-
-Thu Dec 4 06:04:16 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/menu.rb: TkOptionMenubutton.new fails to treat
- 'parent' and 'variable' options on a Hash argument.
-
-Thu Dec 4 05:06:47 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: bug fix. use ::RubyVM instead of ::VM
- [ruby-list:45676]
-
- * ext/tk/tcltklib.c: update RELEASE_DATE
-
-Thu Dec 4 01:37:47 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nurat_{to_s,inspect}): provides better representation
- for in-finite imag part.
-
-Thu Dec 4 01:22:41 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (f_signbit): NaN may be signed value.
-
-Wed Dec 3 23:59:32 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (EXEC_OPTION_DUP2_CHILD): defined.
- (check_exec_redirect_fd): check :in, :out and :err.
- (check_exec_redirect): check [:child, fd].
- (check_exec_fds): validate EXEC_OPTION_DUP2_CHILD array.
- (run_exec_dup2_child): new function.
- (rb_run_exec_options): call run_exec_dup2_child.
-
-Wed Dec 3 22:54:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (expr): keyword_not can continue across newline.
- [ruby-core:20252]
-
-Wed Dec 3 22:40:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (simple_default_value): returns simplest assignment only.
- [ruby-core:20237]
-
-Wed Dec 3 21:30:06 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (check_exec_redirect): accept :in, :out, :err as redirect
- target.
-
-Wed Dec 3 21:18:27 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/ruby/test_rational.rb: revert.
-
-Wed Dec 3 14:48:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tk/tcltklib.c (ip_ruby_cmd, ip_invoke_with_position): must
- not access internal union directly. [ruby-list:45670]
-
-Wed Dec 3 12:24:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_getc, rb_io_readchar): documentation correction from
- Emiel van de Laar. [ruby-core:20212]
-
- * ext/stringio/stringio.c (strio_readchar): ditto.
-
-Wed Dec 3 09:26:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rexml/xpath.rb (REXML::XPath.first): apply documentation
- patch from Ken Bloom in [ruby-core:20213].
-
- * lib/rexml/xpath.rb (REXML::XPath.each): ditto.
-
-Wed Dec 3 02:56:34 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_rational.rb: add a test.
-
-Wed Dec 3 02:53:24 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_range.rb: add a test.
-
-Wed Dec 3 02:26:07 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_string.rb: add some tests.
-
-Wed Dec 3 02:04:21 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/pty/pty.c (Init_pty): fix typo.
-
-Tue Dec 2 19:22:13 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open3.rb (Open3.popen3): merge hash options if given.
-
-Tue Dec 2 15:31:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/protocol.rb (Net::BufferedIO#rbuf_fill): use
- read_nonblock instead of sysread wrapped by timeout to boost
- performance. a patch from Aaron Patterson in [ruby-core:20191].
- fix #806
-
-Mon Dec 1 23:23:52 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * set 1.9.1-p5000 into version number. [ruby-dev:36998]
-
-Mon Dec 1 15:48:47 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * signal.c (register_sigaltstack): no need to define on non-sigaltstack
- platform.
-
-Mon Dec 1 12:00:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (rb_fiber_start): calls with exact argument number.
- [ruby-core:20088]
-
-Sun Nov 30 21:41:10 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * man/rake.1: new manual page
-
-Sun Nov 30 18:01:50 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/test_regexp.rb (TestRegexp#test_parse_curly_brace):
- now accepts quantifier on anchors again by r20391.
-
-Sat Nov 29 23:56:44 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * man/irb.1 (EXAMPLES): new section
-
-Sat Nov 29 19:19:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regparse.c (is_invalid_quantifier_target): Perl and old Ruby
- accepts quantifier on anchors. [ruby-core:20161]
-
-Sat Nov 29 18:28:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (sock_getaddrinfo): should have updated for
- Mac OS X. a patch from Shumpei Akai in [ruby-dev:37234]
-
-Sat Nov 29 00:18:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * cont.c (fiber_alloc): separate allocation and initialization.
- allow subclass to override #initialize. [ruby-core:20086]
-
-Fri Nov 28 18:31:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (sock_s_getaddrinfo): refactored to remove
- code duplication regarding getaddrinfo.
-
-Fri Nov 28 17:52:26 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/forwardable.rb: should be usable def_single_delegator for
- Class and Module.
-
-Fri Nov 28 13:19:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (simple_default_value): extracts simplest default
- argument value.
-
- * iseq.c (rb_iseq_parameters): returns parameter list.
-
- * proc.c (get_proc_iseq, get_method_iseq): handles ifunc and
- bmethod.
-
- * proc.c (rb_proc_parameters, rb_method_parameters): added
- Proc#parameters and Method#parameters. [ruby-core:19759]
-
-Fri Nov 28 02:18:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): bigdecimal
- division (including modulo) should raise ZeroDivisionError as
- integer division. [incompatible]
-
-Fri Nov 28 00:12:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flodivmod): floating point division should raise
- ZeroDivisionError as integer division. [incompatible]
-
-Thu Nov 27 23:54:37 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (gc_mark): still needs to check stack depth during GC.
-
- * gc.c (stack_check): ditto.
-
-Thu Nov 27 21:41:29 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * strftime.c (rb_strftime): should add padding for %%.
-
-Thu Nov 27 16:32:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (register_sigaltstack): stores alt stack for debug
- purpose.
-
-Thu Nov 27 16:12:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (ruby_sigaction_t): added.
-
-Thu Nov 27 15:59:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (ruby_stack_check): no check if using sigaltstack.
-
- * signal.c (ALT_STACK_SIZE): default minimum size is insufficient
- for method calls.
-
- * signal.c (sigsegv): handles stack overflow if possible.
-
- * thread.c (ruby_thread_stack_overflow): helper function to raise
- sysstack_error.
-
- * thread_pthread.c (ruby_stack_overflowed_p): checks for stack
- overflow.
-
-Thu Nov 27 10:40:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_div2): should return
- Integer for #div operation.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_div2): should raise
- ZeroDivisionError if divisor is zero. [ruby-dev:37207]
-
-Wed Nov 26 23:15:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * strftime.c (STRFTIME): use rb_strftime() recursively, instead of
- platform's strftime().
-
-Wed Nov 26 22:46:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (VpException): bigdecimal zero
- division should raise FloatDomainError if mode
- VP_EXCEPTION_ZERODIVIDE is set. [ruby-dev:37204]
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_mode): should handle
- VP_EXCEPTION_ZERODIVIDE.
-
-Wed Nov 26 15:16:07 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * ext/gdbm/gdbm.c (rb_gdbm_nextkey): fix memory leak.
-
-Wed Nov 26 03:17:48 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_to_r): raise exception
- for nan/inf conversion. [ruby-dev:37187] fix #793
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_to_i): ditto.
-
-Wed Nov 26 03:00:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (VpAlloc): avoid ALLOCA_N() to avoid
- segmentation fault caused by (insanely) long decimal values.
- [ruby-dev:37189] fix #794
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_dump, BigDecimal_to_i,
- BigDecimal_to_f, BigDecimal_to_s, BigDecimal_split,
- BigDecimal_inspect): ditto.
-
- * ext/bigdecimal/bigdecimal.c (VpToString): small performance
- improvement.
-
-Wed Nov 26 00:26:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * strftime.c (STRFTIME): should add padding for %[xXrR] etc.
- [ruby-dev:37185] fix: #792
-
-Tue Nov 25 16:26:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_times): taint (and untrust) status should be
- inherited by "ary * 0". [ruby-dev:37024]
-
-Tue Nov 25 15:54:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * strftime.c (rb_strftime): should not swallow incomplete
- formatter, e.g. "%E". [ruby-dev:37170] fix: #787
-
- * strftime.c (rb_strftime): clear flags before processing unknown
- formatter, e.g. "%i". [ruby-dev:37180]
-
-Tue Nov 25 10:35:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * strftime.c (rb_strftime): "%^P" should convert to upper case.
- [ruby-dev:37180]
-
-Tue Nov 25 07:51:18 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * strftime.c (FMT): use "%0d" formatter for zero padding, not "%.d".
- [ruby-dev:37168] fix: #768
-
- * strftime.c (rb_strftime): %s to use zero padding by default.
- [ruby-dev:37180]
-
-Tue Nov 25 03:37:42 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tkextlib/blt/tabset.rb,
- ext/tk/lib/tkextlib/blt/tabnotebook.rb:
- fix many bugs. Now, those work properly.
-
-Tue Nov 25 03:26:04 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_step): treat infinite step specially.
- [ruby-dev:37157] fix: #781.
-
-Tue Nov 25 01:23:25 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (strftime): ignores '_' flag for %[LN].
-
-Tue Nov 25 00:08:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_fork): stops the timer thread during fork.
- [ruby-dev:37117]
-
- * thread.c (rb_thread_start_timer_thread): timer thread needs
- system_working to be set.
-
-Mon Nov 24 23:27:28 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * strftime.c (rb_strftime): The # flag should work with %a, %A, %b,
- %B, and %h. [ruby-dev:37162]
-
- * test/ruby/test_time.rb (test_strftime): ditto.
-
-Mon Nov 24 23:16:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * signal.c (register_sigaltstack): should not add external
- variable (with some cosmetic changes). [ruby-dev:37158]
-
-Mon Nov 24 22:57:25 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * strftime.c (rb_strftime): A width specifier for %t and %n should
- work. [ruby-dev:37160]
-
- * test/ruby/test_time.rb (test_strftime): ditto.
-
-Mon Nov 24 22:07:07 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * strftime.c (rb_strftime): The precision of %0N should be 9.
- [ruby-dev:37156]
-
- * test/ruby/test_time.rb (test_strftime): ditto.
-
-Mon Nov 24 21:38:23 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * strftime.c (rb_strftime): The default precision should be 1, not
- 0. [ruby-dev:37155]
-
- * test/ruby/test_time.rb (test_strftime): ditto.
-
-Mon Nov 24 19:53:47 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (inspect): changed again.
-
-Mon Nov 24 18:35:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/time.rb: r20251 reverted. The patched behavior do not round
- trip. [ruby-core:19988]
-
-Sun Nov 23 16:04:05 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * signal.c (default_handler, Init_signal): compile error if
- USE_SIGALTSTACK is not defined.
-
-Sun Nov 23 00:04:14 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * signal.c (ALT_STACK_SIZE): 4KB is not enough on Mac OS X.
- Uses SIGSTKSZ.
-
-Sat Nov 22 21:29:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/test_method.rb (test_default_accessibility): test case for
- [ruby-dev:37124].
-
-Sat Nov 22 18:24:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_file_world_writable_p): should return nil for non
- world-writable files.
-
-Sat Nov 22 10:31:25 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tkextlib/blt.rb, ext/tk/lib/tkextlib/blt/vector.rb:
- fix NameError bug.
-
-Sat Nov 22 03:41:22 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/pty/pty.c (get_device_once): abandon asynchronous exception
- that might cause serious problem if a program terminated early.
- asynchronous exception is a very bad thing anyway. use
- Process.waitpid(pid) or PTY.check(pid) to poll program
- termination. if PTY.check is called with optional second
- argument being true, it raises an exception same as one from
- previous behavior. [incompatible] fix: [ruby-core:19583]
-
-Fri Nov 21 22:24:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/curses/curses.c (curses_escdelay_set): support ESCDELAY. a
- patch from Giancarlo F Bellido <support at coaxialhost.com> in
- [ruby-core:19961].
-
-Fri Nov 21 22:17:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (usage): -W description updated. [ruby-core:19858]
-
-Fri Nov 21 21:50:54 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * signal.c (register_sigaltstack): use alternative stack for
- SIGSEGV to avoid uncaught stack overflow. based on a patch from
- Hiro Yoshioka <hyoshiok at miraclelinux.com> in [ruby-dev:37134].
- [ruby-dev:36993]
-
-Fri Nov 21 16:06:54 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm.c (thread_free): th->vm may be NULL when pthread_create
- failed for ENOMEM. [ruby-dev:37095]
-
-Thu Nov 20 07:33:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/logger.rb (Logger): should handle the case that cvs/svn do
- not expand $Id keyword. [ruby-core:19991]
-
-Thu Nov 20 07:27:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/minitest/unit.rb (MiniTest::Assertions#capture_io): adjust
- indentation to shut up warning. [ruby-core:19993]
-
-Wed Nov 19 17:48:05 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/syck/rubyext.c (rb_syck_mktime): return DateTime for a value
- out of range of Time. [ruby-core:19919]
-
-Wed Nov 19 14:14:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * node.h (NOEX_MODFUNC): should be include NOEX_PRIVATE.
- [ruby-dev:37124]
-
-Wed Nov 19 03:01:04 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/rinda/test_rinda.rb: fixed fails occasionally [ruby-dev:37119].
- thanks, shinichiro.h.
-
-Wed Nov 19 02:39:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (Init_syserr): moved function definition itself from
- template/known_errors.inc.tmpl.
-
-Wed Nov 19 01:10:52 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb (DRbConn::alive?): fixed NoMethodError problem
- from NaHi [ruby-dev:37110].
-
-Wed Nov 19 01:05:26 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * cont.c (cont_mark, cont_capture, cont_restore_1): speed up
- continuation by copying only valid YARV stack. [ruby-dev:37106]
-
-Wed Nov 19 00:03:13 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/time.rb: according to RFC2822, -0000 means local time, +0000
- means UTC. a patch from Chun Wang. [ruby-core:19578]
-
-Tue Nov 18 23:02:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * proc.c (proc_eq): equivalence check should not done by pointer
- comparison, but should be based on iseq contents. [ruby-dev:37101]
-
-Tue Nov 18 20:30:08 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/ftp.rb (Net::FTP#open_socket): SOCKSsocket is obsolete.
- a patch from Alan Johnson <alan.wayne.johnson at gmail.com> in
- [ruby-core:19982].
-
-Tue Nov 18 16:18:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/logger.rb (ProgName): fixed for svn, based on a patch from
- Nobuhiro IMAI at [ruby-dev:37108].
-
-Tue Nov 18 15:56:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/webrick/httprequest.rb (WEBrick::HTTPRequest#read_request_line):
- use possessive match for path retrieval to avoid huge recursion
- for insanely long path.
-
-Tue Nov 18 15:50:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_desc): re might be NULL.
-
- * regerror.c (onig_error_code_to_format): message updated.
-
-Tue Nov 18 09:42:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser::make_switch): makes default
- conversion to splat. [ruby-list:45645]
-
-Mon Nov 17 18:05:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/depend (LIBS): fixed for disable-shared. [ruby-dev:37103]
-
-Mon Nov 17 11:12:24 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * bin/erb: remove -K option.
-
-Mon Nov 17 02:19:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LIBRUBYARG_STATIC): fixed for --enable-rpath.
-
-Sat Nov 15 22:46:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_reg_regsub): returns -1 unless ascii as well as
- rb_enc_ascget(). [ruby-dev:37097]
-
-Sat Nov 15 22:23:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LDSHARED): do not suppress debug info if higher debug
- level is given, on cygwin and mingw.
-
-Fri Nov 14 20:27:46 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * README.EXT, README.EXT.ja, vm_exec.c, vm_insnhelper.c: update
- filenames.
-
-Thu Nov 13 11:31:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_barrier_wait): gets rid of recursive deadlock.
-
-Thu Nov 13 06:08:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_barrier_{new,wait,release,destroy}): use Mutex so that
- circular requires fail with deadlock. [ruby-core:19821]
-
-Wed Nov 12 07:16:01 2008 David Flanagan <david@think32>
-
- * ruby.c (set_internal_encoding_once): fix typo in error string
-
-Wed Nov 12 03:30:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_{external,locale}_str_new_cstr): optimized
- versions for literal strings.
-
-Wed Nov 12 03:28:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (rb_require_safe): destroys barrier after successfully
- loaded, to get rid of loading same library again. [ruby-core:19798]
-
- * thread.c (rb_barrier_wait): can not wait destroyed barrier.
-
- * thread.c (rb_barrier_destroy): destroys barrier so that no longer
- waited.
-
-Tue Nov 11 23:02:27 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * man/ruby.1 (RUBYOPT): wrote which option can appear.
- (--yydebug): wrote "do not use".
- (--dump): wrote "do not use".
-
-Tue Nov 11 21:22:28 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/uri/generic.rb (URI::Generic#check_path): REL_PATH should a
- symbol. [ruby-core:19805]
-
-Tue Nov 11 20:49:29 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * configure.in: fix SEGV on Mac OS X 10.5.3 with pthread.
- a patch from Wataru Kimura in Bug #193 [ruby-core:17333].
-
-Tue Nov 11 20:39:27 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (inspect): reverted the previous change.
-
-Tue Nov 11 17:35:25 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_accept): secure fd before accept because if
- error causes in securing, cannot restore the state of accepted
- socket.
- fixed [ruby-core:19728]
-
-Tue Nov 11 14:40:40 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * test/ruby/test_transcode.rb: unnecessary setup method
- (setup_really_needed?) removed
-
-Tue Nov 11 14:25:25 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/single_byte.trans, macgreek-tbl.rb, macroman-tbl.rb,
- macromania-tbl.rb, macturkish-tbl.rb, macukraine-tbl.rb,
- ibm437-tbl.rb, ibm852-tbl.rb, ibm855-tbl.rb, ibm857-tbl.rb,
- ibm860-tbl.rb, ibm861-tbl.rb, ibm862-tbl.rb, ibm863-tbl.rb,
- ibm865-tbl.rb, ibm866-tbl.rb, ibm869-tbl.rb, ibm775-tbl.rb:
- new single-byte transcodings (from Yoshihiro Kambayashi)
-
- * test/ruby/test_transcode.rb: added tests for the above
- (from Yoshihiro Kambayashi)
-
-Tue Nov 11 13:20:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_to_r): moved from
- bigdecimal/util, converted into C. [ruby-dev:36805]
-
-Tue Nov 11 07:55:57 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (inspect): changed the format.
-
-Mon Nov 10 17:34:50 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * test/sdbm/test_sdbm.rb (TestSDBM#test_index): Reflect the method
- name change from #index to #key and remove a duplicated test
- method.
-
-Mon Nov 10 10:50:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator.delegating_block): should not refer
- DelegateClass specific @delegate_dc_obj. a patch from Erik
- Hollensbe in [ruby-core:19671].
-
-Mon Nov 10 09:54:21 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (ifs_open_socket): should retry without proto_buffer
- if cannot find the suitable protocol. a patch from Heesob Park.
- fixed [ruby-core:19713]
-
-Sun Nov 9 13:04:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (rb_struct_initialize_m): avoid unnecessary array
- allocation.
-
-Sun Nov 9 04:10:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_dump.c (control_frame_dump): suppresses finished method name.
-
-Sun Nov 9 00:30:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (thread_timer): checks working flags again.
-
-Sun Nov 9 00:02:01 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/session/pstore.rb: fix indentation.
-
-Sat Nov 8 23:47:45 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/session.rb (FileStore): use marshalized data.
-
- * test/cgi/session_dir: add a session directory in test.
-
- * test/cgi/test_cgi_session.rb: add a test.
-
-Sat Nov 8 21:57:03 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/session.rb: remove debug code.
-
-Sat Nov 8 21:33:53 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/session.rb: fix indentation.
-
-Sat Nov 8 18:11:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#do_CONNECT):
- use #bytesize instead of #size. a patch submitted from
- raspberry lemon in [ruby-core:18571].
-
- * lib/webrick/httpauth/digestauth.rb, lib/webrick/httpproxy.rb,
- lib/webrick/httprequest.rb, lib/webrick/httpservlet/cgi_runner.rb,
- lib/webrick/httpservlet/abstract.rb, lib/webrick/httpresponse.rb,
- lib/webrick/httpservlet/cgihandler.rb, lib/webrick/utils.rb: ditto.
-
-Sat Nov 8 17:31:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_ungetc): ungetc position should
- not be changed from 1.8. [ruby-core:19632]
-
-Sat Nov 8 17:15:08 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#make_switch): 1.9 Symbols respond
- to :match. a patch from keith cascio, <keith at ucla.edu>.
- [ruby-core:19730]
-
-Sat Nov 8 12:10:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/gdbm/gdbm.c (fgdbm_index): make #index warn like Hash.
- [ruby-dev:37039]
-
- * ext/sdbm/init.c (Init_sdbm): typo fixed. [ruby-dev:37039]
-
-Sat Nov 8 07:07:48 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in: detect stdio buffer pointers for uClibc. a patch
- from Brian Candler <B.Candler at pobox.com> in [ruby-core:12020].
- [ruby-core:19713]
-
-Sat Nov 8 06:51:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/dbm/dbm.c (fdbm_index): make #index warn like Hash.
-
- * ext/dbm/dbm.c (fdbm_key): new method.
-
- * ext/sdbm/init.c: ditto.
-
-Sat Nov 8 06:20:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/curses/curses.c: curses encoding should obey locale.
-
- * ext/curses/curses.c (curses_getch): 1.9 getch should return one
- character string for single byte string. wchar_t support may
- follow in the future.
-
-Sat Nov 8 05:46:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/io.h (rb_io_t): added write_lock to serialize.
- [ruby-core:19668]
-
- * gc.c (gc_mark_children): mark write_lock.
-
- * gc.c (rb_gc_call_finalizer_at_exit): Mutex also needs to be
- deferred.
-
- * io.c (io_fflush, io_binwrite, fptr_finalize): serializes writing.
-
-Sat Nov 8 05:31:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * safe.c (safe_setter): add warning for $SAFE=3.
-
-Sat Nov 8 01:48:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (rb_thread_create_timer_thread): do not wait never
- coming signal if failed to create timer thread.
-
- * thread_pthread.c (native_cond_timedwait): returns error code.
-
- * thread_pthread.c (thread_timer): typo fixed.
-
-Sat Nov 8 01:14:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (thread_timer, rb_thread_create_timer_thread):
- handshakes properly.
-
-Fri Nov 7 22:51:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * inits.c (rb_call_inits): do not repeat.
-
-Fri Nov 7 22:46:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (thread_timer): initializes mutex each time.
-
-Fri Nov 7 21:23:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_win32.c (thread_start_func_1): use already gotten stack info.
-
-Fri Nov 7 12:26:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb.rb (IRB::Irb#eval_input): remove extra @context.prompt_i.
- [ruby-core:19718]
-
-Fri Nov 7 11:55:30 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * nkf.c: update to r1.188. fixes for 16bit environment.
-
-Fri Nov 7 07:43:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_timer): pthread_cond_timedwait returns ETIMEDOUT
- when timed out.
-
-Fri Nov 7 07:32:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/yaml/rubytypes.rb: support Rational and Complex as 1.8
- does. a patch from Hiroshi Moriyama in [ruby-dev:36899].
-
-Fri Nov 7 07:12:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (thread_timer): uses pthread_cond_timedwait always
- instead of pthread_kill.
-
-Fri Nov 7 06:58:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (Init_String): remove Symbol#===. [ruby-dev:37026]
-
-Fri Nov 7 04:02:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_timer): uses timedwait on cygwin.
-
-Fri Nov 7 02:00:12 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/rexml/entity.rb (unnormalized): do not call
- document.record_entity_expansion if document is nil.
- see <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=502535>.
- Thanks, Naohisa Goto.
-
- * test/rexml/test_document.rb: ditto.
-
-Fri Nov 7 01:24:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot: binary encoding spec is no longer needed in 1.9.
-
-Thu Nov 6 22:21:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_stop_timer_thread): terminates timer thread
- immediately.
-
-Thu Nov 6 21:21:46 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (fole_s_connect, fole_initialize,
- folevariant_initialize): check argument type of WIN32OLE.connect,
- WIN32OLE.new, WIN32OLE_VARIANT.new.
-
- * test/win32ole/test_win32ole.rb (test_s_new_exc, test_s_connect_exc):
- ditto.
-
- * test/win32ole/test_win32ole_variant.rb (test_s_new_exc): ditto.
-
- * test/win32ole/test_win32ole_method.rb: add assertion of
- WIN32OLE_METHOD.new.
-
-Tue Nov 4 13:08:01 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/test/unit.rb (Test::Unit.setup_argv): now can specify ``-xname''
- instead of ``-x name''.
-
-Tue Nov 4 08:00:00 2008 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * test/zlib/test_zlib.rb(test_readchar): compare in same type.
-
-Tue Nov 4 03:28:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_join): do not repeat self in a recursive array.
- [ruby-dev:37019]
-
-Tue Nov 4 01:56:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_mutex_synchronize): fixed prototype.
-
- * thread.c (rb_mutex_synchronize): fixed function name.
-
-Mon Nov 3 16:32:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing.h: needs RUBY_EXTERN instead of extern for mswin.
-
-Mon Nov 3 13:01:13 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * array.c (rb_ary_take_first_or_last): renamed rb_ary_partial more
- appropriately.
- (ary_take_pos_flags): new enum. makes the fourth argument of
- rb_ary_take_first_or_last more descriptive.
- (rb_ary_partial): renamed rb_ary_partial0 more appropriately.
- takes a new parameter klass for what class to instantiate.
-
-Mon Nov 3 13:00:26 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * range.c (rb_range_beg_len): rb_raise takes C values as arguments.
- [BUG] ranges turned into other value in a message of RangeError.
-
-Mon Nov 3 00:36:44 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_win32ole_event.rb: rename test class.
-
- * test/win32ole/test_win32ole_variant_outarg.rb: add in order
- to use ADO instead of Internet Explorer.
- remove test/win32ole/test_win32ole_variant_with_ie.rb.
-
- * test/win32ole/orig_data.csv: ditto.
-
-Sun Nov 2 23:08:08 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_err_in_callback.rb: add teardown.
-
-Sun Nov 2 22:12:41 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_event_free): invoke IConnectionPoint::Unadvise
- before invoking IConnectionPoint::Release.
-
- * test/win32ole/test_win32ole_event.rb, test/win32ole/err_in_callback.rb,
- test/win32ole/test_err_in_callback.rb: Use ActiveX Data Object
- Library instead of InternetExplorer.
-
-Sun Nov 2 22:06:55 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * win32/Makefile.sub: add RUNRUBYOPT. [ruby-dev:37009]
-
-Sun Nov 2 16:41:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/zlib/zlib.c (Init_zlib): defines readbyte instead redefining
- readchar.
-
-Sat Nov 1 07:09:40 2008 Eric Hodel <drbrain@segment7.net>
-
- * gem_prelude.rb: Don't require rubygems/defaults.rb.
-
-Fri Oct 31 21:58:50 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/converter.rb (RSS::Converter): use String#encode.
-
-Fri Oct 31 21:28:14 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/webrick/httpauth/digestauth.rb
- (WEBrick::HTTPAuth::DigestAuth#initialize): fix typo.
-
-Fri Oct 31 18:51:42 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/test_array.rb (test_array_subclass): test for r20076.
-
-Fri Oct 31 18:42:19 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * array.c (ary_partial0): recovers the mistakenly changed feature at r19723.
- Array#[m,n] had returned an Array even for an instance of a
- subclass.
-
-Fri Oct 31 18:05:05 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/single_byte.trans, maccroatioan-tbl.rb,
- maccyrillic-tbl.rb, maciceland-tbl.rb: new single-byte
- transcodings (from Yoshihiro Kambayashi)
-
- * test/ruby/test_transcode.rb: added tests for the above
- (from Yoshihiro Kambayashi)
-
-Fri Oct 31 12:51:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (dir_globs): need taint check. reported by steve
- <oksteev at gmail.com>
-
-Fri Oct 31 12:42:45 2008 wanabe <s.wanabe@gmail.com>
-
- * array.c (rb_ary_decrement_share): fix to work recycling
- shared-array without the following. [ruby-dev:36991]
-
- * array.c (ary_make_substitution): don't recycle substitution array.
-
-Fri Oct 31 12:27:52 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * spec/default.mspec: supports that the build directory != srcdir.
-
-Fri Oct 31 11:35:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_set_default_internal): no alias "internal" if
- default internal is not set. [ruby-dev:37000]
-
-Fri Oct 31 08:16:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): delays setting safe level.
- [ruby-dev:36997]
-
-Thu Oct 30 21:32:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * array.c (rb_ary_permutation): hide temporal array.
-
-Thu Oct 30 14:45:45 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/single_byte.trans: refactoring to make it easier
- to add more transcodings (with Yoshihiro Kambayashi)
-
- * enc/trans/iso-8859-1-tbl.rb: new file to avoid having to
- treat ISO-8859-1 as special
-
-Thu Oct 30 14:10:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): templates a, A, Z should propagate encoding
- of original strings. templates b, B, h, H brings ASCII-8BIT to
- the result.
-
-Thu Oct 30 10:34:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (moreswitches): splits option string and passes arguments.
-
- * ruby.c (proc_options): checks if allowed in RUBYOPT.
-
- * ruby.c (process_options): allows long style options in RUBYOPT.
-
- * ruby.c (load_file_internal): ditto in shebang. [ruby-dev:36979]
-
-Thu Oct 30 09:31:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_locale_encoding): makes an alias for locale.
- [ruby-dev:36976]
-
- * encoding.c (rb_enc_set_default_external): ditto for external.
-
- * encoding.c (rb_enc_set_default_internal): ditto for internal.
-
-Thu Oct 30 03:30:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (load_file_internal): should not set script encoding to
- ASCII-8BIT.
-
- * ruby.c (load_file_internal): do not auto convert scripts even
- when default_internal is set. [ruby-core:19579]
-
-Thu Oct 30 02:20:33 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * array.c (rb_ary_sort_bang): remove SEGV when replacing array with
- embedded one during sort. [ruby-dev:36983]
-
- * test/ruby/test_array.rb (test_sort!): add tests for above.
-
-Thu Oct 30 01:44:23 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_array.rb: add some tests.
-
-Thu Oct 30 01:32:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * array.c (rb_ary_splice): remove redundant check.
-
-Thu Oct 30 01:24:55 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * string.c (rb_str_cmp): fix condition which always returned true
- because ENCODING_GET returns unsigned long.
-
-Thu Oct 30 01:10:32 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_array.rb (test_permutation): add a test that replaces
- array during permutation.
-
-Wed Oct 29 23:31:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_check_dummy_enc): new function to check dummy
- encoding.
-
- * string.c (rb_str_upcase_bang): case conversion functions should
- not be applicable to strings in dummy encoding. [ruby-dev:36985]
-
-Wed Oct 29 23:57:29 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * array.c (rb_ary_sort_bang): replacing array during sort broke
- invariant of array. [ruby-dev:36983]
-
-Wed Oct 29 21:06:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_rewind): should reset fptr->readconv if it's
- available.
-
- * io.c (more_char): clear readconv at EOF.
-
- * test/ruby/test_file.rb: should not read after EOF. use rewind
- instead.
-
-Wed Oct 29 20:45:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/webrick/utils.rb (start_server): provide a reference to log of
- webrick.
-
- * test/webrick/test_httpproxy.rb, test/webrick/test_httpauth.rb,
- test/webrick/test_cgi.rb, test/webrick/test_httpserver.rb,
- test/webrick/test_server.rb, test/webrick/test_filehandler.rb: use
- webrick log as an assertion message.
-
-Wed Oct 29 16:41:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * pack.c (pack_pack): set encoding from packing string and UTF-8 for
- "U". [ruby-core:19590]
-
-Wed Oct 29 15:50:00 2008 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-
- * complex.c (imp1, imp2): should declare type.
- [BUG] at IA-64
-
-Wed Oct 29 14:36:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (revision.h): have to be updated daily or by non-trivial
- commits.
-
-Wed Oct 29 13:18:02 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * README, README.ja: Update the portability section.
-
-Wed Oct 29 13:02:17 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * configure.in (rb_cv_lib_xpg4_needed): Drop legacy FreeBSD
- support regarding libxpg4. Those old versions of FreeBSD
- shipped with the library don't have a working pthread library
- anyway.
-
-Wed Oct 29 11:50:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (dln-a-out): cannot make shared library nor work with
- ELF. [ruby-core:19571]
-
-Wed Oct 29 11:00:25 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_open): shouldn't seek here.
-
- * win32/win32.c (rb_w32_write): write to the end of the file when
- FAPPEND is specified.
-
-Wed Oct 29 09:30:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (load_file_internal): cache common interned IDs.
-
-Wed Oct 29 00:43:39 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: uses macro in declarations.
-
-Wed Oct 29 00:26:00 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_open): need to seek to the end of the file when
- O_APPEND is specified.
-
-Wed Oct 29 00:08:05 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * math.c (rb_math_{atan2,cos,cosh,hypot,log,sin,sinh,sqrt}): added.
-
- * complex.c: follows the above change.
-
-Tue Oct 28 23:29:06 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (kanji_convert): output unicode chars.
- [ruby-dev:36957]
-
- * ext/nkf/nkf-utf8/nkf.c (numchar_getc): increase buffer size.
- reported and patched at [ruby-dev:36957] by mame.
-
-Tue Oct 28 23:03:46 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/test_proc.rb: filled all patterns for testing
- vm_yield_setup_args.
-
-Tue Oct 28 23:05:35 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: continues to support canonicalization *unofficially*
- for an odd library mathn for the time being (only 1.9.x).
- since grand mathn must be very very special library for us.
-
- * rational.c: ditto.
-
- * ext/mathn/*/*: follow the above changes.
-
-Tue Oct 28 21:31:55 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y (parser_yylex): check EOF explicitly.
-
-Tue Oct 28 20:59:12 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (extract_binmode): new function to extract binmode/textmode
- options from hash.
-
- * io.c (rb_io_extract_modeenc): use above function.
-
- * io.c (rb_io_s_pipe): recognize binmode/textmode options.
-
-Tue Oct 28 20:15:49 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (make_readconv): now can specify the size of cbuf.
-
- * io.c (read_all, appendline, io_getc, rb_io_ungetc): follow above
- change.
-
-Tue Oct 28 19:00:51 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_pipe_exec): internal fds should be always
- binmode.
-
-Tue Oct 28 17:21:18 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * tool/make-snapshot.rb: merged from ruby_1_9_1.
-
-Tue Oct 28 16:56:31 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * gem_prelude.rb: merged from ruby_1_9_1 branch.
- considers --program-suffix and prefix configure options.
-
- * lib/rubygems/defaults.rb: ditto.
-
- * test/rubygems/test_gem.rb (@default_dir_re): ditto.
-
-Tue Oct 28 16:13:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot: use String#bytesize.
-
-Tue Oct 28 09:51:48 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bootstraptest/test_thread.rb: ignore some exceptions.
- [ruby-dev:36951]
-
-Tue Oct 28 09:19:40 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (RUNRUBY): now ruby requires something from
- gem_prelude, so need to set library path.
-
-Mon Oct 27 22:29:11 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * vm_insnhelper.c (vm_yield_setup_args): supports optional parameters.
- Fixed [ruby-core:19503].
-
- * vm_insnhelper.c (vm_yield_setup_block_args): a new function. extracted
- from vm_yield_setup_args.
-
- * vm_insnhelper.c (vm_yield_setup_block_args_complex): ditto.
-
- * test/ruby/test_proc.rb: added tests for arguments on a Proc from
- Kernel#proc called.
-
-Mon Oct 27 20:03:05 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/mathn/complex/complex.c: no need to define rb_cComplex because
- it's already defined at $(srcdir)/complex.c.
-
- * ext/mathn/rational/rational.c: no need to define rb_cRational because
- it's already defined at $(srcdir)/rational.c.
-
-Mon Oct 27 15:58:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (load_file): preserves $.. [ruby-dev:36937]
-
- * io.c (argf_init): initial value of $. should be 0.
- see [ruby-dev:36937].
-
-Mon Oct 27 15:38:38 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/minitest/test_mini_test.rb
- (test_assert_raises_triggered_different): the test failed when a
- file path in the backtrace contains something except [\w\/\.],
- e.g. hyphen, Japanese characters or backslash.
-
- * test/minitest/test_mini_test.rb
- (test_assert_raises_triggered_subclass): ditto.
-
-Mon Oct 27 15:32:08 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/minitest/test_mini_test.rb: fixed that r19958 made
- test-all fail when the ruby was built at $(srcdir).
-
-Mon Oct 27 12:04:58 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/ruby/envutil.rb: reverted the changeset 19948 because it
- concealed unexpected behaviours of ruby.
-
- * test/ruby/test_io.rb: ditto.
-
-Mon Oct 27 12:02:53 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * ext/nkf/nkf.c (rb_nkf_convert): should specify type of variable.
-
-Mon Oct 27 11:34:56 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/minitest/test_mini_test.rb (test_filter_backtrace):
- fixed failure on Ruby built at out of $(srcdir).
-
- * test/minitest/test_mini_test.rb (test_Filter_backtrace_unit_starts):
- ditto.
-
-Mon Oct 27 10:02:47 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (read_all): the 3rd argument maybe Qnil.
-
-Mon Oct 27 01:29:55 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/nkf/test_nkf.rb: add a test for [ruby-dev:36909].
-
-Mon Oct 27 01:05:48 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf.c (rb_nkf_convert): avoid GC.
- reported in [ruby-dev:36909] and patched [ruby-dev:36941] by mame.
-
-Sun Oct 26 21:28:42 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/json/test_json.rb: remove dependency on permutation gem.
-
-Sun Oct 26 19:18:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (blocking_region_{begin,end}): declared as inline.
-
- * util.c (freedtoa): used only when MULTIPLE_THREADS is not defined.
-
- * win32/win32.c (rb_w32_pipe): serial is DWORD.
-
- * ext/etc/etc.c (sGroup): getgrent may not be available.
-
-Sun Oct 26 18:11:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/wait/{extconf.rb,wait.c}: needs sys/ioctl.h for fcntl on
- cygwin.
-
-Sun Oct 26 18:18:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gem_prelude.rb: disables debug and verbose flags to suppress failure
- messages. interpolation does not occur inside single quotes.
-
-Sun Oct 26 18:42:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/envutil.rb (assert_in_out_err): disables builtin rubygems
- to get rid of the interference.
-
- * test/ruby/test_io.rb (ruby): ditto.
-
-Sun Oct 26 13:30:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (read_all): use the given buffer to read when needs readconv.
- based on the patch by wanabe <s.wanabe AT gmail.com> at
- [ruby-dev:36931].
-
-Sun Oct 26 07:57:35 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems*: Update to RubyGems 1.3.1 r1909.
-
-Sun Oct 26 07:35:56 2008 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/minitest/unit.rb: Imported minitest 1.3.0 r4429.
- * test/minitest/*: ditto.
-
-Sun Oct 26 02:16:29 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * configure.in ($MANTYPE): followed ruby.1, which had moved.
-
- * instruby.rb (:man): ditto.
-
- * mdoc2man.rb: fixed for the case Xr with 2 arguments.
-
-Sun Oct 26 01:42:45 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * man/irb.1: new manual page.
-
-Sun Oct 26 00:11:48 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * man/ruby.1: moved into man/. added some descriptions.
-
- * man/goruby.1: new file.
-
- * instruby.rb (:man): followed ruby.1.
-
-Sat Oct 25 20:05:22 2008 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c (gc_profile_result): bug fix. The millisecond is 1/1000.
-
-Sat Oct 25 11:12:40 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * ruby.c (usage): updated the description of -E option.
-
-Sat Oct 25 09:54:10 2008 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Fixed a bug in read_to_char() that would slurp
- whole files if the encoding was invalid. It will now read
- up to 10 bytes ahead to find a valid character boundary or
- give up. [ruby-core:19465]
-
- * test/csv/test_features.rb, test/csv/test_table.rb, test/csv/test_row.rb:
- Loosened some tests to check for a compatible? Encoding instead
- of an exact Encoding. [ruby-core:19470]
-
-Sat Oct 25 07:42:49 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc*: Update to RDoc 2.2.2 r192.
-
-Sat Oct 25 04:00:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/us_ascii.c (us_ascii_mbc_enc_len): made static. a patch by
- Tadashi Saito <shiba AT mail2.accsnet.ne.jp> at [ruby-dev:36916]
-
- * signal.c (signal_buff): made static. a patch by Tadashi Saito
- <shiba AT mail2.accsnet.ne.jp> at [ruby-dev:36915]
-
- * util.c (freedtoa): made static to get rid of name clash. a patch by
- Tadashi Saito <shiba AT mail2.accsnet.ne.jp> at [ruby-dev:36913]
-
- * util.c (ruby_dtoa): added prefix, ditto.
-
-Sat Oct 25 03:43:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (lambda): need to adjust lpar_beg for both of the parser and
- ripper.
-
-Sat Oct 25 01:29:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/mathn/rational/rational.c: undef duplicated macro definition
- first to shut up the warning.
-
- * ext/mathn/rational/rational.c (rb_rational_new_mathn): specify
- omitted return value.
-
-Sat Oct 25 00:14:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_sample): fixed sizes and randomness.
-
-Fri Oct 24 23:04:42 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * configure.in (sitedir): considers --program-prefix and
- --program-suffix.
- (vendordir): ditto.
- (rubyhdrdir): ditto.
-
- * mkconfig.rb (CONFIG["rubylibdir"]): ditto.
-
- * win32/Makefile.sub: ditto.
-
- * instruby.rb (:rdoc): ditto.
-
- * lib/rdoc/ri/paths.rb (RDoc::RI::Paths): ditto.
-
-Fri Oct 24 22:59:27 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_array.rb (test_sample): add tests for size of
- returned array and randomness.
-
-Fri Oct 24 21:50:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * id.h, template/id.h.tmpl (enum ruby_method_ids): reordered.
-
-Fri Oct 24 21:19:45 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * ext/mathn/rational.c: change several global functions.
-
-Fri Oct 24 21:05:38 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/html.rb: allow symbolized key.
-
- * test/cgi/test_cgi_tag_helper.rb: add a test.
-
-Fri Oct 24 20:54:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (exts): renamed to get rid of the existent directory.
-
-Fri Oct 24 20:45:41 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * ext/mathn/rational.c: change several global functions to static
- function.
-
-Fri Oct 24 19:57:19 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_dump): should have removed commented out
- unnecessary code. [ruby-cvs:27131]
-
-Fri Oct 24 19:16:36 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * id.h (enum ruby_method_ids): ISO C forbids comma at end of
- enumerator list.
-
-Fri Oct 24 18:29:00 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/mathn.rb: moved into ext/mathn/rational/rational.c and
- ext/mathn/complex/complex.c.
- * ext/mathn: new mathn ext-libraries.
-
-Fri Oct 24 18:21:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_array.rb (TestArray#test_join): should restore
- global variable after the test. [ruby-dev:36896]
-
- * test/ruby/test_hash.rb (TestHash#test_to_s): ditto.
-
-Fri Oct 24 17:43:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (lambda): need to adjust lpar_beg for ripper as well.
- [ruby-dev:36702]
-
-Fri Oct 24 16:13:12 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/core.rb (read_multipart): change field value as String
- from StringIO or Tempfile when multipart parse except file field.
- add files method that can get uploaded files. [ruby-dev:36547]
-
- * test/cgi/test_cgi_multipart.rb: fix the test for core.rb.
-
-Fri Oct 24 14:22:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (ext): split out the target for extension library.
-
- * common.mk (encs): depends on enc and trans.
-
-Fri Oct 24 10:23:24 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_signal.rb (TestSignal#test_exit_action): Thread
- may terminate before sysread. [ruby-dev:36835]
-
-Thu Oct 23 22:06:23 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * distruby.rb: removed. "make dist" uses tool/make-snapshot for the 1.9
- series. distruby.rb has been no longer used.
-
-Thu Oct 23 17:30:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_class_instance_methods): rdoc fixed. [ruby-core:19458]
-
-Thu Oct 23 16:19:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/init.rb (IRB.load_modules): catch LoadError explicitly.
- a patch from Daniel Berger <Daniel.Berger at qwest.com> in
- [ruby-core:19451]. fix [ruby-core:19450]
-
-Thu Oct 23 16:16:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/socket.c (sock_s_getservbyport): check if the port range.
- [ruby-core:19460]
-
-Thu Oct 23 14:08:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/socket.c (sock_s_getservbyname): unuse unnecessary
- object.
-
- * ext/socket/socket.c (sock_s_getservbyport): the port should be
- converted before the proto so that the #to_int of the former cannot
- alter the latter.
-
-Thu Oct 23 10:55:08 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_dump): use \u{ff} escape for UTF-8 encoding
- string.
-
-Thu Oct 23 09:26:22 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/socket.c (sock_s_getservbyport): cast to get rid of
- warning.
-
-Thu Oct 23 08:06:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (sock_s_getservbyport): port should be
- network byte order. a patch from Dave Thomas in [ruby-core:19454].
-
-Thu Oct 23 01:26:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_conv_enc_opts): new function to convert with
- specifying ecflags and ecopts.
-
- * ext/zlib/zlib.c (gzfile_newstr): specify ecflags and ecopts for
- conversion using above function.
-
- * ext/zlib/zlib.c (gzfile_newstr): use own rb_econv_t for dummy
- encoding to handling stateful encoding (e.g. iso-2022-jp).
- [ruby-dev:36857]
-
- * ext/zlib/zlib.c (gzfile_getc): ditto.
-
-Thu Oct 23 01:24:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_tmpsrc): get rid of side effects.
-
-Thu Oct 23 00:10:01 2008 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: separate data structure between rb_fiber_t and
- rb_context_t (rb_fiber_t includes rb_context_t).
- rb_fiber_t has double linked list of fibers in same threads.
-
-Wed Oct 22 17:25:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (pipe_open): remove unnecessary flush before fork.
- a patch from Kazuhiro NISHIYAMA <zn at mbf.nifty.com>
- in [ruby-dev:36840].
-
-Wed Oct 22 16:27:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_yield_setup_args): should not drop arguments
- corresponding to default parameters.
-
-Wed Oct 22 14:59:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (f_larglist): should not allow semicolon separated local
- variable declarations if formal argument list is not surrounded
- by parentheses, mostly because semicolon outside of parentheses
- appears to terminate the expression.
-
-Wed Oct 22 14:52:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_external_str_new_with_enc): no implicit strlen call.
- [ruby-dev:36854]
-
- * string.c (rb_external_str_new_cstr): new function to create
- string from external NUL terminated C string.
-
- * string.c (rb_locale_str_new_cstr): ditto.
-
- * ext/readline/readline.c: now use rb_locale_str_new_cstr().
-
- * test/sdbm/test_sdbm.rb (TestSDBM#test_delete_with_block):
- deleted key to the block may be a copy of specified key.
-
- * test/dbm/test_dbm.rb (TestDBM#test_delete_with_block): ditto.
-
-Wed Oct 22 13:16:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (unescape_escaped_nonascii): back out the last change on
- the function. [ruby-dev:36818]
-
-Wed Oct 22 07:09:19 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/zlib/zlib.c (rb_gzreader_ungetc): should be able to unget
- Fixnum.
-
- * ext/stringio/stringio.c (strio_ungetc): should convert unget
- string.
-
- * ext/stringio/stringio.c (strio_ungetbyte): new method.
-
-Wed Oct 22 05:46:25 2008 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/vm.h: write a comment.
-
- * common.mk: remove vm.h from any rules.
- vm.h is not needed on this version.
-
- * vm_core.h: ditto.
-
-Wed Oct 22 05:39:39 2008 Koichi Sasada <ko1@atdot.net>
-
- * parse.y (arg_concat_gen): concat target node should be NODE_ARRAY.
- [ruby-core:19413]
-
- * bootstraptest/test_method.rb: add tests.
-
-Wed Oct 22 00:29:13 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/rinda/test_rinda.rb (test_core_03_notify): Fixed test failures
- [ruby-dev:36837].
-
-Wed Oct 22 00:22:06 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_external_str_new_with_enc): wrong condition to
- calculate strlen().
-
- * ext/readline/readline.c: add encoding support.
-
-Tue Oct 21 23:12:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_write): should convert writing
- string to the encoding of the buffer.
-
- * hash.c (rb_any_hash): typo fixed.
-
- * ext/zlib/zlib.c (rb_gzwriter_write): oops, IO string conversion
- need to be done by to_s.
-
-Tue Oct 21 22:38:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (open_key_args): should adjust argc, argv in struct
- foreach_arg.
-
-Tue Oct 21 21:52:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/zlib/zlib.c (rb_gzwriter_write): conversion should be done
- using to_str, not to_s.
-
- * ext/zlib/zlib.c (rb_gzwriter_write): need proper conversion
- according to gz encoding.
-
- * ext/zlib/zlib.c (rb_gzreader_ungetc): convert string encoding
- before unget.
-
-Tue Oct 21 21:33:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb (assert_nothing_raised): raise with backtrace.
-
-Tue Oct 21 20:12:19 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit.rb (assert_nothing_raised): set backtrace.
-
-Tue Oct 21 18:17:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/zlib/zlib.c: remove obsolete prototype macros.
-
- * ext/zlib/zlib.c (struct gzfile): add encoding field to gzfile
- structure.
-
- * ext/zlib/zlib.c (rb_gzreader_getc): now works on characters.
-
- * ext/zlib/zlib.c (rb_gzreader_getbyte): new method to retrieve
- single byte.
-
- * ext/zlib/zlib.c (rb_gzreader_readbyte): ditto.
-
- * ext/zlib/zlib.c (rb_gzreader_each_byte): renamed from each_char
-
- * ext/zlib/zlib.c (rb_gzreader_ungetc): allow unget strings.
-
- * ext/zlib/zlib.c (rb_gzreader_ungetbyte): renamed from ungetc.
-
-Tue Oct 21 13:28:42 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * io.c, include/ruby/intern.h (rb_io_ascii8bit_binmode): externed.
-
- * ext/socket/socket.c (init_sock): use rb_io_ascii8bit_binmode()
- instead of rb_io_binmode().
-
-Tue Oct 21 13:17:39 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * mdoc2man.rb: moved into tools/.
-
- * instruby.rb: followed the change of mdoc2man.
-
-Tue Oct 21 11:34:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (strip_glibc_option, map_charset): check if
- encoding is a string. based on the patch by Hiroshi Moriyama at
- [ruby-dev:36811].
-
- * test/iconv/test_basic.rb (test_invalid_arguments): added tests.
-
-Tue Oct 21 10:40:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_file_open_internal): should initialize fmode before using.
-
-Tue Oct 21 08:56:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * regparse.c (parse_char_class): CCV_SB is only for single
- byte. [ruby-dev:36786]
-
-Tue Oct 21 01:49:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_extract_modeenc): plain rb/wb should set ASCII-8BIT
- to the external_encoding.
-
- * io.c (rb_file_open_internal): ditto.
-
- * io.c (NEED_WRITECONV): no conversion when the external_encoding
- is ASCII-8BIT.
-
- * io.c (do_writeconv): skip ASCII-8BIT.
-
-Tue Oct 21 00:51:59 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_ascii8bit_binmode): renamed from rb_io_binmode.
- (rb_io_binmode): don't change encoding conversion.
- (rb_io_binmode_m): call rb_io_ascii8bit_binmode.
-
-Mon Oct 20 21:19:00 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/core.rb (read_multipart): file's encoding is ascii-8bit
- from file field of multipart form.
-
-Mon Oct 20 20:16:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/zlib/zlib.c (Init_zlib): add getbyte as an alias to getc.
- [ruby-dev:36801]
-
-Mon Oct 20 17:31:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (exc_equal): should not compare recursively.
- [ruby-dev:36796]
-
-Mon Oct 20 16:48:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/ruby.h (ExportStringValue): new macro to convert
- string in internal encoding to external to export.
-
- * string.c (rb_str_export): new function to do conversion to
- external encoding.
-
- * ext/sdbm/init.c: encoding conversion support.
-
- * ext/dbm/dbm.c: ditto.
-
-Mon Oct 20 15:42:02 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_locale_str_new): new function to convert string
- from locale to internal encoding.
-
-Mon Oct 20 09:47:13 2008 Tanaka Akira <akr@fsij.org>
-
- * test/runner.rb: search srcdir/test/arg at first to find test/ruby
- directory when "ruby" is specified.
-
-Mon Oct 20 08:20:01 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: support Encoding.default_internal.
-
- * ext/tk/tcltklib.c: ditto.
-
- * ext/tk/extconf.rb: improve the strategy for searching Tcl/Tk headers.
-
-Mon Oct 20 00:57:04 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit.rb (Test::Unit.setup_argv): call given block for
- filtering files.
-
- * test/runner.rb: search srcdir/test/arg, srcdir/arg.
-
- * bin/testrb: show usage if no files given.
-
-Sun Oct 19 21:19:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (srcs): removed ID_H_TARGET.
-
- * tool/generic_erb.rb: always overwrites if no if-change option.
- sends the result to stdout if no output option.
-
- * template/id.h.tmpl: shows which token differs.
-
-Sun Oct 19 18:15:15 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/single_byte.trans: adding WINDOWS-wwww encodings
- (wwww = 874/1250/1251/1253/1254/1255/1256/1257)
- (contributed by Yoshihiro Kambayashi)
-
- * enc/trans/windows-wwww-tbl.rb: 8 new files
- (contributed by Yoshihiro Kambayashi)
-
- * test/ruby/test_transcode.rb: added test_windows_wwww
- (contributed by Yoshihiro Kambayashi)
-
-Sun Oct 19 07:37:13 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/cmath.rb (log2,cbrt,frexp,ldexp,hypot,erf,erfc,gamma,lgamma):
- should be also provided as module function. [ruby-dev:36787]
-
-Sun Oct 19 07:25:08 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * keywords, lex.c.src, opt_insn_unif.def, opt_operand.def: moved rarely changed
- input files for code generators into defs/ directory.
-
- * Makefile.in (lex.c): followed keywords and lex.c.src.
-
- * common.mk (parser.o): followed keywords.
- (INSNS): followed opt_*.def
-
- * tools/instruction.rb: followed opt_*.def.
-
-Sun Oct 19 12:28:01 2008 James Edward Gray II <jeg2@ruby-lang.org>
-
- * test/csv/*: Renamed tc_* files to test_* to fit in within Ruby's
- testing process.
-
-Sun Oct 19 00:15:03 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit.rb (assert_nothing_thrown): don't intern.
-
-Sat Oct 18 14:40:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_sadded): remove newly defined singleton method
- that should not exist after exception handling. [ruby-dev:36569]
-
-Sat Oct 18 14:27:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (opt_block_arg): allow trailing comma after usual
- arguments. not after block argument.
-
-Sat Oct 18 13:30:53 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_external_str_new): a new function to convert from
- external encoding to internal encoding. if something went
- wrong, it returns a string with the external encoding.
-
- * string.c (rb_external_str_new_with_enc): same as above besides
- you can specify the source encoding.
-
- * ruby.c (ruby_set_argv): use rb_external_str_new()
-
- * ruby.c (set_arg0, ruby_script): ditto.
-
-Sat Oct 18 04:08:18 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile#initialize): now Tempfile.new takes
- keyword arguments to open(). [ruby-dev:36756]
-
-Sat Oct 18 17:10:10 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * tool/transcode-tblgen.rb: added set_valid_byte_pattern
- to reduce coupling between table generation script and
- specific encodings.
-
- * enc/trans/single_byte.trans: using set_valid_byte_pattern
-
-Sat Oct 18 16:39:39 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c: in transcode_search_path, eliminated a warning
- on cygwin about pathlen potentially not being initialized
-
-Sat Oct 18 13:40:27 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit.rb (assert_nothing_thrown): implemented.
-
-Sat Oct 18 01:33:22 2008 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * common.mk: use added options for generic_erb.rb.
-
-Sat Oct 18 00:47:51 2008 wanabe <s.wanabe@gmail.com>
-
- * array.c: don't recycle shared-array while sort!.
-
-Fri Oct 17 22:04:38 2008 wanabe <s.wanabe@gmail.com>
-
- * array.c: recycle shared-array when it isn't referenced.
-
-Fri Oct 17 20:29:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_initialize_m): specify ARG_ENCODING_NONE instead of
- ARG_ENCODING_FIXED for Regexp.new("", nil, "n"). [ruby-dev:36761]
-
- * test/ruby/test_regexp.rb (TestRegexp#test_initialize): test
- updated.
-
-Fri Oct 17 19:46:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/ifchange, win32/ifchange.bat: --timestamp option added.
-
- * tool/generic_erb.rb: --timestamp, --output and --if-change options
- added.
-
-Fri Oct 17 18:33:12 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * array.c (ary_resize_capa): renamed RESIZE_CAPA.
-
-Fri Oct 17 18:16:51 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/bigdecimal/test_bigdecimal.rb (TestBigDecimal#test_sqrt_bigdecimal):
- test updated. a patch from TAKANO Mitsuhiro <takano32 at jus.or.jp> in
- [ruby-dev:36736].
-
-Fri Oct 17 18:14:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (uncommon.mk): ignores failures at loading.
-
- * test/rubygems/gemutilities.rb (RubyGemTestCase#build_rake_in):
- get rid of interference with other tests.
-
-Fri Oct 17 18:06:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * transcode.c (str_transcode0): String#encode without argument now
- behave as if :undef => :replace, :invalid => :replace specified.
-
- * transcode.c (rb_econv_prepare_opts): should preserve options in
- any case.
-
-Fri Oct 17 11:48:18 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/socket/socket.c (init_sock): sockets should be binmode.
-
- * test/socket/test_tcp.rb (test_encoding): ditto.
-
-Fri Oct 17 10:26:13 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * tool/insns2vm.rb: remove -Kn option in shebang line because it's
- inconsistent with -Ks commandline option in common.mk.
-
-Fri Oct 17 01:26:09 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (transcode_restartable0): in_pos and out_pos never be
- NULL, now.
-
-Fri Oct 17 00:39:19 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/test/unit.rb: sort the order of executing tests.
-
-Fri Oct 17 00:24:15 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_binmode): reset encoding conversion.
-
-Fri Oct 17 00:16:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (rb_getc, rb_io_fread, rb_io_fwrite, rb_read_pending):
- remove deprecated functions which do not work. [ruby-dev:36697]
-
-Thu Oct 16 23:48:34 2008 Tanaka Akira <akr@fsij.org>
-
- * common.mk (TESTS): removed to re-enable test for minitest.
-
-Thu Oct 16 23:37:11 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (iseq_set_sequence): fix memory leak.
-
-Thu Oct 16 23:27:27 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit.rb (assert_equal): avoid incompatible character
- encodings error.
-
-Thu Oct 16 23:23:27 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit.rb (assert_equal): failure message changed.
-
-Thu Oct 16 22:52:54 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit: removed test/unit.
-
- * lib/test/unit.rb: new compatibility layer using minitest.
-
- * bin/testrb: use above.
-
- * test/runner.rb: ditto.
-
-Thu Oct 16 14:34:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk, enc/depend (enc, trans): targets for sources.
-
-Thu Oct 16 14:30:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (lib): installs all files other than README etc.
-
-Thu Oct 16 09:48:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_initialize_m): changed the message to clarify the
- third option argument is now ignored. [ruby-dev:36753]
-
-Thu Oct 16 08:14:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (proc_options): no warning when default_external already
- set by -E.
-
- * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_rubyopt):
- put -K after -E to set script encoding.
-
-Thu Oct 16 06:20:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_transcode.rb (TestTranscode#test_errors):
- String#encode now works without any argument. [ruby-dev:36740]
-
-Wed Oct 15 23:48:22 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * .gdbinit (rp): REGEXP handling fixed.
-
- * string.c (rb_str_rindex_m): need not to call rb_enc_check on
- regexp.
-
- * re.c (unescape_escaped_nonascii): try ASCII-8BIT encoding for
- broken strings.
-
-Wed Oct 15 23:11:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (DelegateClass): restored 1.8 behavior for
- DelegateClass as well. [ruby-dev:36739]
-
-Wed Oct 15 22:19:14 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * array.c (RESIZE_CAPA): check whether len is longer than capacity.
-
- * array.c (rb_ary_compact_bang): resize ary before changing capacity.
- fixed [ruby-dev:36704]
-
-Wed Oct 15 16:57:30 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * version.h (RUBY_DESCRIPTION): remove unnecessary space.
-
-Tue Oct 14 23:18:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator): simplified and restored 1.8
- behavior. [ruby-dev:35986]
-
-Tue Oct 14 21:50:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (TESTS): skips minitest by default, since it interferes
- with test/unit.
-
-Tue Oct 14 21:36:29 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (load_conv_function51932): check
- having IMultiLanguage2 or IMultiLanguage. [ruby-dev:36716]
-
- * ext/win32ole/extconf.rb: ditto.
-
-Tue Oct 14 20:45:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (Init_IO): $FILENAME and $* must be read-only. [ruby-dev:36698]
-
- * variable.c (*_getter, *_setter, *_marker): made public.
-
- * include/ruby/ruby.h (rb_gvar_*_{getter,setter,marker}): declared.
-
-Tue Oct 14 20:32:09 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/single_byte.trans (transcode_tblgen_singlebyte): renamed
- from transcode_tblgen_windows.
- (transcode_tblgen_iso8859): use transcode_tblgen_singlebyte.
-
-Tue Oct 14 19:32:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (process_options): -U should be allowed in RUBYOPT
- environment variable. [ruby-dev:36720]
-
-Tue Oct 14 14:11:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): -U can be followed by other options.
-
-Tue Oct 14 13:30:30 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/single_byte.trans: added windows-1252
-
- * enc/trans/windows-1252-tbl.rb: new file
- (contributed by Yoshihiro Kambayashi)
-
- * tool/transcode-tblgen.rb: listed windows-1252 as '1byte'
-
- * test/ruby/test_transcode.rb: added test_windows_1252
- (contributed by Yoshihiro Kambayashi)
-
-Tue Oct 14 12:22:32 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_variable.rb (TestVariable#test_variable): add
- a test of [ruby-dev:36698].
-
-Tue Oct 14 11:14:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * transcode.c (str_transcode0): should not raise error when
- default_internal is not set. [ruby-core:19309]
-
-Tue Oct 14 11:14:26 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * lib/net/pop.rb: check for invalid APOP timestamp. (CVE-2007-1558)
- [ruby-dev:36631]
-
- * test/net/pop/test_pop.rb: ditto.
-
-Tue Oct 14 09:39:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (set_internal_encoding_once): check double contradicted
- specification of the encoding from command line.
-
- * ruby.c (set_external_encoding_once): ditto.
-
-Tue Oct 14 08:28:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_yylex): allow reserved word to be keyword argument.
-
-Mon Oct 13 19:07:52 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * parse.y (token_info_pop): show source filename. [ruby-dev:36710]
-
-Mon Oct 13 08:59:08 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (load_conv_function51932): support
- CP51932 on cygwin and mingw32. thanks to arton.
-
- * test/win32ole/test_win32ole.rb (test_cp51932): ditto.
-
-Mon Oct 13 07:54:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (proc_options): add -U command line option to specify
- utf-8 as default_internal.
-
-Mon Oct 13 07:42:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * transcode.c (str_transcode0): String#encode() with no encoding
- specified transcode the string into Encoding.default_internal.
- inspired by [ruby-core:19298].
-
-Sun Oct 12 18:00:18 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (set_ole_codepage, ole_cp2encoding,
- ole_wc2mb, ole_vstr2wc, ole_mb2wc): support CP51932 (only mswin32).
-
- * test/win32ole/test_win32ole.rb: ditto.
-
-Sun Oct 12 12:03:38 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c, vm_insnhelper.h (ruby_vm_redefined_flag): apply optimization
- patch proposed by Paul Brannan. [ruby-core:19171]
-
-Sun Oct 12 09:46:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * strftime.c (rb_strftime): suppressed warnings on cygwin.
-
-Sat Oct 11 19:49:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_prepare): use utf-8 encoding directly.
-
-Sat Oct 11 10:20:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (CLEANINGS): uses escaped form tabs to preventing the
- confusion. [ruby-talk:317345]
-
-Sat Oct 11 08:51:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rake.rb (Rake::Application#standard_exception_handling): removed
- unnecessary SystemExit, and exits with false instead of system
- dependent value. [ruby-talk:317330]
-
-Sat Oct 11 03:54:05 2008 Koichi Sasada <ko1@atdot.net>
-
- * parse.y: optimize 'for' statement when one variable given.
-
- * benchmark/bm_loop_for.rb: added.
-
- * benchmark/bm_loop_times.rb: modified.
-
-Sat Oct 11 12:09:05 2008 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv/csv.rb: Added support for Encoding::default_internal.
- * lib/csv/csv.rb: Switched to new Hash syntax.
-
-Fri Oct 10 22:16:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (comment_at_top): needed for ripper too.
-
-Fri Oct 10 22:07:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby.h: updated macros for headers. [ruby-core:19275]
-
-Fri Oct 10 19:21:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (magic_comment_encoding): warns when ignored.
-
- * parse.y (parser_magic_comment): replaces '-' with '_'.
-
- * parse.y (parser_yylex): allows magic comments indented and the
- second line or later.
-
-Fri Oct 10 17:26:50 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/ext/parser/parser.c (JSON_parse_string):
- associate encoding.
-
-Fri Oct 10 10:18:21 2008 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/test/*: reverted back to test/unit.
- * test/test/*: ditto
- * lib/minitest/*: Imported minitest 1.3.0 r4333.
-
-Fri Oct 10 03:41:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): check if codepoint for %c is valid.
- [ruby-dev:36691]
-
-Fri Oct 10 01:55:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (enc_names): minor improvement.
-
-Fri Oct 10 00:21:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (ParseError.filter_backtrace): removes internal
- backtrace.
-
-Fri Oct 10 00:11:16 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * transcode.c (rb_econv_add_converter): remove unnecessary NULL check.
-
-Thu Oct 9 23:53:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-style.el (ruby-style-c-mode): buffer may not have file
- name.
-
-Thu Oct 9 23:30:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * process.c (run_exec_dup2): fix resource leak.
-
-Thu Oct 9 23:19:02 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * process.c (rb_run_exec_options): fix resource leak.
-
-Thu Oct 9 22:13:58 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_module.rb (test_remove_class_variable): add a test
- for Class#remove_class_variable.
-
- * test/ruby/test_object.rb (test_remove_instance_variable): add a test
- for Object#remove_instance_variable.
-
-Thu Oct 9 22:04:38 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * variable.c (rb_mod_remove_cvar): fix r19711.
-
-Thu Oct 9 21:17:50 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/syck/syck.c (syck_lookup_sym): remove reading uninitialized
- variable.
-
-Thu Oct 9 16:34:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/ext/generator/extconf.rb: fix target.
-
- * ext/json/ext/parser/extconf.rb: ditto.
-
-Thu Oct 9 14:37:59 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * include/ruby/ruby.h: embeds the elements of an array into its
- struct RArray for # of elements <= 3.
-
- * array.c: ditto.
-
- * gc.c (gc_mark_children): following the change of struct RArray.
-
- * ext/tk/tcltklib.c (ip_ruby_cmp): ditto.
-
- * parse.y (coverage): ditto.
-
- * proc.c (curry): ditto.
-
- * .gdbinit: ditto.
-
-Thu Oct 9 11:29:33 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (Init_Encoding): new instance method Encoding#names,
- returns its name and alias names.
-
- * encoding.c (enc_names): defined for Encoding#names.
-
- * encoding.c (enc_names_i): defined for enc_names.
-
-Thu Oct 9 08:47:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (rb_thread_wait_fd_rw): should not block by select if
- there's only one thread living. fixed [ruby-dev:36646].
-
-Wed Oct 8 20:59:52 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_init_cp): initialize WIN32OLE.codepage
- according to Encoding.default_internal and
- Encoding.default_external.
-
-Wed Oct 8 17:02:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/lib/json/pure/generator.rb (utf8_to_json):
- process each unpacked Unicode character.
-
-Wed Oct 8 15:00:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/lib/json/pure/parser.rb
- (JSON::Pure::Parser#parse_string): force_encoding("UTF-8").
-
-Wed Oct 8 11:56:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/test/unit/assertions.rb: assert_nothing_thrown,
- assert_raise, assert_not_equal, assert_no_match, assert_not_nil,
- assert_not_same are coming back as alias.
-
-Wed Oct 8 11:18:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (autoload_delete, autoload_file): should not delete
- autoload table, since it may be shared with duplicated modules.
- [ruby-core:19181]
-
-Wed Oct 8 02:38:28 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (rb_default_internal_encoding): merged a patch from
- Michael Selig <michael.selig at fs.com.au> in [ruby-core:18985].
-
- * io.c (rb_io_ext_int_to_encs): ditto.
-
- * ruby.c (proc_options): support default internal encoding in -E
- option.
-
-Wed Oct 8 00:03:39 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (today,now): should produce own instances.
- [ruby-talk:317020]
-
-Tue Oct 7 16:43:51 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/lib/json/pure/generator.rb (utf8_to_json):
- force_encoding before gsub.
-
-Tue Oct 7 16:35:41 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/lib/json/pure/generator.rb (utf8_to_json):
- downcase the result of Unicode escape.
-
-Mon Oct 6 16:44:52 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/core.rb (CGI::QueryExtension::initialize_query): fix the
- condition.
-
- * test/cgi/test_cgi_core.rb: bug fix encoding.
- thanks to TAKANO Mitsuhiro <takano32 at jus.or.jp> .
-
- * test/cgi/test_cgi_multipart.rb: temporary comment in.
-
-Mon Oct 6 15:22:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (gc_mark_children): ignores T_ZOMBIE.
-
-Mon Oct 6 12:45:20 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_module.rb (TestModule#_wrap_assertion): add
- definition. is this really needed?
-
- * test/ruby/test_module.rb (TestModule#test_mod_constants): should
- not depend on global Module constants.
-
-Mon Oct 6 12:38:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (Test::Assertions#assert_nothing_raised):
- should take optional message argument.
-
-Mon Oct 6 12:18:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_comparable): string comparison should be
- transitive. [ruby-dev:36484]
-
- * test/ruby/test_m17n_comb.rb (TestM17NComb#test_str_eq): test
- updated.
-
-Mon Oct 6 09:00:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/bigdecimal/test_bigdecimal.rb (test_sqrt_bigdecimal): test
- updated. a patch from TAKANO Mitsuhiro <takano32 at jus.or.jp>
- in [ruby-dev:36669].
-
-Sun Oct 5 23:34:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb ($config_h): now always defines for old libraries.
-
-Sun Oct 5 23:06:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_method.c (rb_mod_modfunc): method undefined in included module
- may not have nd_body. [ruby-core:18738]
-
-Sun Oct 5 21:28:58 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/rational.rb: resolved conflicts of aliases.
-
- * lib/mathn.rb: avoided some warnings.
-
-Sun Oct 5 18:51:50 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb: remove debug code introduced by previous change.
-
-Sun Oct 5 17:49:35 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/open-uri.rb (OpenURI.open_uri): set encoding to strio.
-
-Sun Oct 5 17:39:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_set_encoding): defined for
- StringIO#set_encoding.
-
-Sun Oct 5 11:24:42 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * eval.c: come back definition of environ.
-
-Sun Oct 5 09:19:49 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/utf8tbl.c: update table.
-
-Sat Oct 4 22:50:14 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * dln.c: Ruby no longer supports VMS.
-
- * error.c: ditto.
-
- * eval.c: ditto.
-
- * eval_intern.h: ditto.
-
- * include/ruby/defines.h: ditto.
-
- * include/ruby/ruby.h: ditto.
-
- * io.c: ditto.
-
- * process.c: ditto.
-
- * ruby.c: ditto.
-
- * vms/config.h: removed.
-
- * vms/vms.h: ditto.
-
- * vms/vmsruby_private.c: ditto.
-
- * vms/vmsruby_private.h: ditto.
-
-Sat Oct 4 22:44:23 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * dln.c: Ruby no longer supports Windows CE.
-
- * eval.c: ditto.
-
- * include/ruby/defines.h: ditto.
-
- * include/ruby/win32.h: ditto.
-
- * ruby.c: ditto.
-
- * strftime.c: ditto.
-
- * win32/Makefile.sub: ditto.
-
- * win32/win32.c: ditto.
-
- * ext/tk/extconf.rb: ditto.
-
- * lib/fileutils.rb: ditto.
-
- * test/fileutils/test_fileutils.rb: ditto.
-
- * wince/*: removed.
-
-Sat Oct 4 22:35:06 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * dln.c: Ruby no longer supports MacOS 9 or before.
-
- * eval.c: ditto.
-
- * eval_intern.h: ditto.
-
- * ext/extmk.rb: ditto.
-
- * ext/tk/sample/tkextlib/treectrl/demo.rb: ditto.
-
- * ext/tk/stubs.c: ditto.
-
- * file.c: ditto.
-
- * hash.c: ditto.
-
- * include/ruby/defines.h: ditto.
-
- * ruby.c: ditto.
-
- * signal.c: ditto.
-
- * vm_core.h: ditto.
-
-Sat Oct 4 22:30:28 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * dln.c: Ruby no longer supports MS-DOS.
-
- * ext/sdbm/_sdbm.c: ditto.
-
- * ext/sdbm/sdbm.h: ditto.
-
- * gc.c: ditto.
-
- * hash.c: ditto.
-
- * include/ruby/defines.h: ditto.
-
- * include/ruby/util.h: ditto.
-
- * io.c: ditto.
-
- * process.c: ditto.
-
- * ruby.c: ditto.
-
- * strftime.c: ditto.
-
- * util.c: ditto.
-
-Sat Oct 4 22:14:15 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * djgpp/GNUmakefile.in: removed. Ruby no longer supports djgpp.
-
- * djgpp/README.djgpp: ditto.
-
- * djgpp/config.hin: ditto.
-
- * djgpp/config.sed: ditto.
-
- * djgpp/configure.bat: ditto.
-
- * djgpp/mkver.sed: ditto.
-
- * ext/Setup.dj: ditto.
-
- * dln.c: removed djgpp supports.
-
- * file.c: ditto.
-
- * gc.c: ditto.
-
- * io.c: ditto.
-
- * process.c: ditto.
-
- * ruby.c: ditto.
-
- * signal.c: ditto.
-
- * util.c: ditto.
-
- * vm_core.h: ditto.
-
- * lib/fileutils.rb: ditto.
-
- * lib/mkmf.rb: ditto.
-
- * ext/socket/socket.c: ditto.
-
- * test/fileutils/test_fileutils.rb: ditto.
-
- * test/ruby/test_env.rb: ditto.
-
- * test/ruby/test_path.rb: ditto.
-
-Sat Oct 4 21:59:39 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * x68/_dtos18.c: removed. Ruby no longer supports human68k.
-
- * x68/_round.c: ditto.
-
- * x68/fconvert.c: ditto.
-
- * x68/select.c: ditto.
-
- * ext/Setup.x68: ditto.
-
- * missing/x68.c: ditto.
-
- * dln.c (dln_find_exe_r): removed human68k supports.
- (dln_find_1): ditto.
-
- * lib/mkmf.rb: ditto.
-
- * ext/extmk.rb (Init_ext): ditto.
-
- * ext/socket/socket.c (init_sock): ditto.
-
- * gc.c (GC_MALLOC_LIMIT): ditto.
- (rb_setjmp, rb_jmpbuf): ditto.
- (mark_current_machine_context): ditto.
-
- * include/ruby/defines.h (PATH_ENV): ditto.
-
- * io.c: ditto.
-
- * process.c: ditto.
-
- * ruby.c: ditto.
-
- * test/ruby/test_env.rb: ditto.
-
- * test/ruby/test_path.rb: ditto.
-
- * LEGAL
-
-Sat Oct 4 19:02:36 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb: no need to require the "lib/rational.rb".
-
-Sat Oct 4 19:02:59 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf.c (rb_nkf_enc_get): don't replicate encoding.
- [ruby-dev:36575]
-
-Sat Oct 4 18:47:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_external_encoding): defined.
-
- * ext/stringio/stringio.c (strio_internal_encoding): defined.
-
- * ext/stringio/stringio.c (Init_stringio): define above.
-
-Sat Oct 4 15:52:17 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/mini/test_mini_test.rb: recovered.
- It had been temporarily removed at r19645.
-
- * test/mini/test_mini_mock.rb: ditto.
-
- * test/mini/test_mini_spec.rb: ditto.
-
- * lib/test/**/*: replaced by miniunit.
- miniunit had been temporarily reverted at r19643 but
- now recovered.
-
-Sat Oct 4 15:33:26 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (gdb-ruby): new target. it runs ruby under controlled by
- gdb.
-
- * common.mk (dist): accepts RELNAME variable as the second argument of
- make-snapshot.rb.
-
-Sat Oct 4 12:17:46 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/irb/ext/save-history.rb: change load_history using File.expand_path. see [ruby-dev:36660]. Thanks Kouhei Sutou.
- * lib/irb/irb/context.rb: convert string Symbol of instance variable names in IRB:Context#inspect.
-
-Fri Oct 3 22:43:04 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * ext/dl/extconf.rb ($distcleanfiles): added callback-?.c into
- the distclean list.
-
-Fri Oct 3 19:33:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/lib/json/pure.rb (module JSON): remove Iconv dependency.
-
- * ext/json/lib/json/pure/generator.rb (utf8_to_json): process as
- binary and remove Iconv dependency.
-
- * ext/json/lib/json/pure/parser.rb (parse_string): ditto.
-
-Fri Oct 3 14:04:05 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/{configure.bat,setup.mak,Makefile.sub): add --program-prefix
- configure option support.
-
-Thu Oct 2 21:22:43 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi/core.rb (CGI::QueryExtension): delete MorphingBody
- and replace like as 1.8's in multipart reading.
- see [ruby-dev:36443],
- reference from CGIAlt http://cgialt.rubyforge.org/
-
- * test/cgi/test_cgi_multipart.rb : fixed multipart test.
-
-Thu Oct 2 20:46:17 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_sub_bang): fix coderange.
-
-Wed Oct 1 22:54:09 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/rexml/parsers/lightparser.rb, lib/debug.rb: remove unused when
- clauses.
-
-Wed Oct 1 22:43:59 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/xmlrpc, lib/rexml, test/ruby/test_array.rb,
- test/ruby/test_unicode_escape.rb, test/scanf/test_scanf.rb,
- test/rss/rss-assertions.rb: fix indentation to remove warning.
-
-Wed Oct 1 21:36:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_gc_call_finalizer_at_exit): finalize deferred IO and Data.
-
- * gc.c (rb_gc_call_finalizer_at_exit): defers IO finalization.
- [ruby-dev:36646]
-
-Wed Oct 1 19:11:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (marshal_dump): fixed for check_dump_arg.
-
- * marshal.c (marshal_dump): initializes dump_arg before any funcall.
- [ruby-dev:36648]
-
-Wed Oct 1 00:54:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_split_m): should use rb_str_subseq() which use
- offset and length by bytes. [ruby-dev:36641]
-
-Wed Oct 1 00:29:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_settracefunc.rb (test_call, test_class): line number
- was changed at r19592.
-
-Wed Oct 1 00:20:38 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (check_exec_redirect): don't depend on rb_stdout and
- rb_stderr.
-
-Tue Sep 30 23:06:58 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/mini/test_mini_test.rb: removed.
- Temporarily removed the tests for miniunit because of
- they depend on the miniunit version of test/unit,
- where test/unit was temporarily reverted to the state
- before importing miniunit.
-
- * test/mini/test_mini_mock.rb: ditto.
-
- * test/mini/test_mini_spec.rb: ditto.
-
-Tue Sep 30 23:04:30 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/test/**/*: recovered.
- Temporarily reverts the changes of lib/test/unit/* in
- r19502 and r19501, in order to release 1.9.0-5.
-
-Tue Sep 30 23:00:05 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/test/unit.rb: removed.
- Temporarily reverts the changes of lib/test/unit/* in
- r19543, r19534 and r19503, in order to release 1.9.0-5.
-
- * lib/test/unit/assertions.rb: ditto.
-
- * lib/test/unit/deprecate.rb: ditto.
-
- * lib/test/unit/error.rb: ditto.
-
- * lib/test/unit/testcase.rb: ditto.
-
-Tue Sep 30 20:17:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_extract_modeenc): should honor value of the
- textmode: and binmode: options.
-
-Tue Sep 30 17:04:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/bigdecimal/test_bigdecimal.rb (test_sqrt_bigdecimal): wrong
- precision specification. a patch from TAKANO Mitsuhiro
- <takano32 at jus.or.jp> in [ruby-dev:36634].
-
-Tue Sep 30 16:53:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stmt): returns non zero. [ruby-dev:36633]
-
-Tue Sep 30 16:52:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_str_format): add %<name>s style named argument
- support. a patch from Yusuke Endoh <mame at tsg.ne.jp>
- in [ruby-dev:35851].
-
- * sprintf.c (rb_str_format): add gettext style named format
- (%{name}) support. inspired by [ruby-dev:35852].
-
- * sprintf.c (GETNAMEARG): should raise KeyError exception when no
- named argument found.
-
- * hash.c (rb_hash_fetch): export fetch function.
-
-Tue Sep 30 13:19:01 2008 Eric Hodel <drbrain@segment7.net>
-
- * test/rubygems/test_gem_installer.rb: remove extra call to setup to
- fix ENV['HOME'] pollution.
-
-Tue Sep 30 13:04:11 2008 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/mini/test.rb: Updated to 1.3.0 r4257.
- * test/mini/*: added from r4257.
-
-Tue Sep 30 07:46:07 2008 Eric Hodel <drbrain@segment7.net>
-
- * test/rdoc/test_rdoc_markup_attribute_manager.rb: Test with clean
- SPECIALS.
- * test/rubygems/gemutilities.rb: Restore ENV['HOME'] after test.
- * test/runner.rb: Pass -n argument down to miniunit.
-
-Tue Sep 30 01:02:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (token_info_push, token_info_pop): do nothing for evaled
- source.
-
-Tue Sep 30 00:47:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: constified.
-
-Mon Sep 29 23:32:25 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_subseq): don't use rb_str_drop_bytes for short
- string.
-
-Mon Sep 29 22:54:29 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/mathn.rb: added String#to_[rc]. moved def_canon.
-
-Mon Sep 29 20:41:19 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_subseq): use rb_str_drop_bytes if possible.
-
-Mon Sep 29 20:22:20 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/date/*.rb: imported additional tests and some adjustments.
-
-Mon Sep 29 20:13:05 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (fev_initialize): initialization
- handler instance variable.
-
- * test/win32ole/test_win32ole_typelib.rb (test_s_typelibs):
- fix the warning of shadowing outer local variable.
-
-Mon Sep 29 19:59:00 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (rescue_callback): use rb_write_error
- instead of fprintf.
-
-Mon Sep 29 01:51:54 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/rdoc/test_rdoc_info_formatting.rb (teardown): delete tmpdir for
- test.
-
-Mon Sep 29 00:30:20 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
-
- * lib/cgi/html.rb (CGI::HtmlExtension::{radio_group, checkbox_group}):
- can specify the false as checked or selected value.
- [ruby-core:18306], [ruby-core:18307]
-
- * test/cgi/test_cgi_tag_helper.rb: add a test.
-
-Sun Sep 28 23:08:38 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
-
- * lib/cgi/html.rb (CGI::HtmlExtension::popup_menu):
- fix the calls #bytesize on array parameters. [ruby-core:18919]
-
-Sun Sep 28 22:44:26 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
-
- * lib/cgi/core.rb (CGI::parse): ignore illegal query params.
- [ruby-dev:36618]
-
-Sun Sep 28 22:05:07 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (iseq_set_sequence): check duplicated when clause.
- [ruby-dev:36616]
-
-Sun Sep 28 19:04:03 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/date/*.rb: imported a date test suite ruby 1.9 limited ed.
-
-Sun Sep 28 18:40:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mini/test.rb (MINI_DIR): loaded path is expanded.
-
- * lib/mini/test.rb (assert_match): get rid of confusion of
- ruby-mode.el.
-
-Sun Sep 28 12:36:09 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_exec.c (vm_exec_core): add an UNLIKELY() hint.
-
- * vm_insnhelper.h (BASIC_OP_UNREDEFINED_P): add a LIKELY() hint.
-
-Sun Sep 28 12:04:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_new): sets empty string to coderange 7bit.
- [ruby-core:18993]
-
-Sun Sep 28 09:39:48 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/mathn.rb ({Fixnum,Bignum,Float}#**): may produce complex
- value.
-
-Sun Sep 28 09:05:53 2008 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv/csv.rb: Worked around some minor encoding changes in Ruby
- pointed out by Nobu.
-
-Sun Sep 28 08:37:12 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/mathn.rb: a hack to provide canonicalization. This must be
- temporary, but this seems to be not bad for the time being.
-
-Sat Sep 27 06:22:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rake.rb (Module#rake_extension, String#ext, String#pathmap): use
- built-in methods.
-
- * lib/rake.rb (String#pathmap): fixed typo in rdoc.
-
-Sat Sep 27 04:28:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rmext): preceding dots are not a part of extension.
-
- * file.c (rb_file_s_extname): ditto.
-
-Sat Sep 27 03:15:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_jump_tag_but_local_jump): exc is not used if val is nil.
-
-Sat Sep 27 03:12:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/socket.c (host_str): numeric address should be unsigned.
- [ruby-core:18971]
-
-Fri Sep 26 22:46:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (primary, brace_block): fix for line number.
-
- * proc.c (rb_proc_location, rb_method_location): new methods
- {Proc,Method,UnboundMethod}#source_location. [ruby-core:18452]
-
-Fri Sep 26 21:36:33 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_core.h (RUBY_VM_CHECK_INTS_TH): add an UNLIKELY hint.
-
-Fri Sep 26 19:33:36 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_str_encode): renamed from
- rb_str_transcode. [ruby-dev:36593]
- (rb_econv_has_convpath_p): renamed from rb_transcode_convertible.
-
- * transcode.c: follow the renaming.
-
- * io.c: ditto.
-
-Fri Sep 26 19:01:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/bigdecimal/test_bigdecimal.rb (test_inspect): fixed CPU bit
- size dependent test. pointed out by TAKANO Mitsuhiro <takano32 AT
- jus.or.jp>.
-
-Fri Sep 26 18:57:33 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * test/pathname/test_pathname.rb: Fix use of deprecated methods.
-
-Fri Sep 26 18:39:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (dist): nothing is needed to run BASERUBY.
-
- * tool/make-snapshot: new option -archname.
-
-Fri Sep 26 18:24:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el: safe customizable variables.
-
-Fri Sep 26 17:37:18 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * include/ruby/ruby.h (rb_mPrecision): removed.
- Precision module was temporarily removed at r19430.
-
-Fri Sep 26 17:25:10 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (dist): Changed its dependencies and action.
-
-Fri Sep 26 17:07:04 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * error.c (Init_syserr): moved to the template.
- (errno_missing): removed. fixed [ruby-dev:35958].
-
- * defs/known_errors.def: added. extracted from Init_syserr.
-
- * templates/known_errors.inc.tmpl: added. Template for Init_syserr.
- c.f. [ruby-dev:35958].
-
- * tools/generic_erb.rb: added. general purpose mapper which maps
- data+template into source code.
-
- * common.mk (error.$(OBJEXT), incs, known_errors.inc):
- Fixed dependencies.
-
-Fri Sep 26 17:02:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thlist_signal): clears the woken thread if nothing woke.
-
- * thread.c (rb_barrier_wait): achieves the lock if no thread was
- waiting yet.
-
-Fri Sep 26 12:04:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/curses/curses.c: should include <ruby/io.h>.
-
- * ext/io/wait/wait.c: ditto.
-
- * ext/openssl/ossl.h: ditto.
-
-Fri Sep 26 11:34:08 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * variable.c (rb_define_hooked_variable): cast to get rid of compiler
- warnings.
-
-Fri Sep 26 11:05:41 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * transcode.c, include/ruby/encoding.c (rb_transcode_convertible):
- new function. checking the existence of converter.
-
-Fri Sep 26 10:35:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (global_variable, struct trace_var): made function
- members more strict.
-
-Fri Sep 26 09:55:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby{io,sig}.h: moved to include/ruby/backward.
-
-Fri Sep 26 09:47:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/rubysig.h: old macros for backward compatibility.
-
- * thread.c (BLOCKING_REGION): rewritten using helper functions.
-
-Fri Sep 26 03:03:32 2008 Tanaka Akira <akr@fsij.org>
-
- * vm_eval.c (Init_vm_eval): define module_eval, class_eval and eval
- here for rdoc.
-
-Fri Sep 26 00:40:30 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * range.c (range_inspect): fix SEGV for cyclic range object.
- [ruby-core:18835]
-
-Thu Sep 25 23:59:56 2008 Tanaka Akira <akr@fsij.org>
-
- * common.mk: dependency updated.
-
-Thu Sep 25 21:46:48 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_eUndefinedConversionError): renamed from
- rb_eConversionUndefinedError.
- (rb_eConverterNotFoundError): renamed from rb_eNoConverterError.
-
-Thu Sep 25 21:23:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * pack.c (pack_pack, pack_unpack): 'm0' format (base64) complies with
- RFC 4648. It adds no line feed when encoding, and raise ArgumentError
- if the encoded string contains non-alphabet (including CR and LF).
-
- * lib/base64.rb: added. This provides encoding/decoding method for
- Base64 in standard RFC 2045, Base64 in standard RFC 4648 and ``Base 64
- Encoding with URL and Filename SafeAlphabet'' in RFC 4648.
-
- * test_pack.c, test/base64/test_base64.rb: add tests for above.
-
-Thu Sep 25 21:00:32 2008 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: fix btest-* rules [ruby-dev:36528].
- and remove obsolete rules.
-
-Thu Sep 25 20:27:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * class.c (rb_make_metaclass): [BUG] Fixed a bus error
- on the case for metaclass of a class which includes a
- module.
-
-Thu Sep 25 19:34:33 2008 Eric Hodel <drbrain@segment7.net>
-
- * test/rubygems/*: Update some new tests to use build_rake_in.
- * test/rubygems/gemutilities.rb: Fix broken merge of rake detection.
-
-Thu Sep 25 19:13:12 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems*: Update to RubyGems 1.3.0 r1891.
-
-Thu Sep 25 18:40:42 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * class.c (rb_make_metaclass): Made class of class of class
- from Class into its own eigenclass. Now meta^(n)-class
- hierarchy regresses infinitely, again.
- (This feature was decided on developer-meeting-20080922.)
-
-Thu Sep 25 16:01:07 2008 Jim Weirich <jim@tardis.local>
-
- * lib/rake.rb: Update rake source to version 0.8.3. This
- version includes some fixes for running Rake on windows.
- (1) better APPDATA/HOMExxx/USERPROFILE integration for
- system rakefiles, (2) Better handling of the :ruby command
- when installed in directory containing spaces.
-
-Thu Sep 25 11:22:51 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc*: Update to RDoc 2.2.1 r185.
-
-Thu Sep 25 02:08:47 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_mode_enc): make it static.
-
-Thu Sep 25 01:22:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mini/test.rb (Mini::Assertions#assert_raise): fixed typo.
-
-Wed Sep 24 23:39:00 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
-
- * test/cgi/test_cgi_multipart.rb : revert last change.
- ( deprecated is assert_raises. )
- * test/cgi/test_cgi_core.rb : ditto.
- * test/cgi/test_cgi_header.rb : ditto.
-
-Wed Sep 24 23:12:49 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
-
- * lib/cgi/core.rb (CGI::new, CGI::{accept_charset,accept_charset=}) :
- accept parameters either in a hash,
- string as a block. add the encoding validation process.
- * test/cgi/test_cgi_core.rb : test for query encoding check.
-
-Wed Sep 24 22:58:18 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * string.c (rb_str_rstrip_bang): raise exception when the encoding of
- the string is dummy.
-
- * string.c (rb_str_rstrip_bang): remove nul characters even if the
- encoding of the string is not single byte optimizable.
- fixed [ruby-core:18844], reported by Michael Selig.
-
-Wed Sep 24 19:01:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * string.c (rb_str_rstrip_bang): workaround for VC++8 x64.
-
-Wed Sep 24 17:44:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * complex.c (Init_Complex), rational.c (Init_Rational): undefines
- default #allocate methods which call the allocator.
-
-Wed Sep 24 17:02:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * complex.c (Init_Complex), rational.c (Init_Rational): ID_ALLOCATOR
- differs from :allocate, and invisible in ruby level.
-
-Wed Sep 24 15:58:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_rstrip_bang): removing mixed spaces and nuls at
- the end of strings. [ruby-dev:36497]
-
-Wed Sep 24 15:13:04 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
-
- * test/cgi/test_cgi_multipart.rb : test for miniunit.
- * test/cgi/test_cgi_core.rb : ditto.
- * test/cgi/test_cgi_header.rb : ditto.
-
-Wed Sep 24 14:38:29 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/tmpdir.rb: setup buffer with nul characters instead of spaces.
- fixed [ruby-dev:36493]
-
-Wed Sep 24 11:18:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_s_binread): offset argument was wrongly passed to
- internal IO#read call. [ruby-core:18810]
-
-Wed Sep 24 07:38:23 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * vm_core.h: ruby/ruby.h should be included at the very first
- place in an entire compilation unit, as it includes
- ruby/config.h
-
-Wed Sep 24 06:41:24 2008 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/test/*: removed test/unit.
- * lib/test/*: added miniunit.
- * lib/mini/*: ditto.
-
-Wed Sep 24 04:45:35 2008 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/node.h, node.h: move node.h from include path.
- This change stop to install node.h because of saving ABI
- (node.h will be changed. Extensions should not depends on
- this file).
-
- * blockinlining.c, class.c, compile.c, debug.h, enum.c,
- gc.c, iseq.c, parse.y, ruby.c, signal.c, variable.c,
- vm.c, vm_core.h, vm_dump.c: ditto.
-
- * ext/ripper/depend: ditto.
-
-Wed Sep 24 04:09:13 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_core.h: remove unused frame values.
-
-Wed Sep 24 04:07:07 2008 Koichi Sasada <ko1@atdot.net>
-
- * signal.c (signal_exec): execute rb_eval_cmd() directly.
-
-Wed Sep 24 03:08:58 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/uri/mailto.rb: fix indentation.
- * lib/uri/generic.rb: ditto.
- * lib/yaml.rb: ditto.
- * lib/uri/cgi/core.rb: fix indentation and ambiguous argument warning.
-
-Tue Sep 23 23:39:25 2008 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv/csv.rb: Improved the idea of whitespace and word characters used
- in substitutions during header conversion as suggested by Michael Selig.
-
-Tue Sep 23 21:50:53 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_binwrite): allocate wbuf if nosync.
-
-Tue Sep 23 21:45:02 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (copy_stream_body): use io_binwrite instead of io_fwrite.
-
-Tue Sep 23 21:31:16 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * test/ruby/test_rational2.rb: updated.
-
- * test/ruby/test_complex2.rb: added.
-
- * test/ruby/test_complexrational.rb: added.
-
-Tue Sep 23 21:26:32 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_casecmp): make the ordering consistent with
- String#<=>.
-
-Tue Sep 23 20:52:25 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_binwrite): add nosync argument.
- (do_writeconv): extracted from io_fwrite.
- (io_fwrite): add nosync argument. use do_writeconv.
- (io_write): add nosync argument.
- (io_write_m): new function for IO#write.
- (rb_p): don't append record separator.
-
-Tue Sep 23 20:24:41 2008 Koichi Sasada <ko1@atdot.net>
-
- * signal.c (signal_exec): fix to use rb_proc_call().
-
-Tue Sep 23 20:06:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rexml/formatters/pretty.rb (REXML::Formatters::Pretty#wrap):
- abandon wrapping if the line contains no space. [ruby-dev:36045]
-
-Tue Sep 23 19:38:03 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (subtract): check tv_sec. reported by ko1.
-
-Tue Sep 23 19:21:03 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_s_canonicalize_internal): does no apply
- canonicalization rule anymore.
-
- * rational.c (nurat_s_canonicalize_internal(_no_reduce)?): ditto.
-
- * complex.c: removed class method new! and new.
-
- * rational.c: ditto.
-
-Tue Sep 23 19:20:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_s_binread): a new method to read binary chunk from a
- file. [ruby-core:18674]
-
- * io.c (open_key_args): wrong permission specified for read-open.
-
-Tue Sep 23 18:24:34 2008 Tanaka Akira <akr@fsij.org>
-
- * hash.c (rb_obj_is_proc): declaration moved for rdoc.
-
-Tue Sep 23 18:07:55 2008 Koichi Sasada <ko1@atdot.net>
-
- * common.mk (io.o): remove dependency for vm_core.h.
-
-Tue Sep 23 17:56:44 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_blocking_region): fix typo in a document.
-
-Tue Sep 23 17:50:35 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_blocking_region): write a document.
-
-Tue Sep 23 17:14:31 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread.c, include/ruby/intern.h (rb_thread_interrupted): added.
-
- * io.c: use VALUE of thead instead of rb_tread_t to check interrupts.
-
-Tue Sep 23 17:05:14 2008 Koichi Sasada <ko1@atdot.net>
-
- * class.c, vm_core.h: move decl of rb_iseq_clone() to class.c.
-
-Tue Sep 23 17:02:47 2008 Tanaka Akira <akr@fsij.org>
-
- * debug.h (ruby_set_debug_option): declared.
-
- * main.c: include debug.h.
-
- * common.mk (main.$(OBJEXT)): dependency updated.
-
-Tue Sep 23 16:59:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (ENVMATCH, ENVNMATCH): reduced same code.
-
-Tue Sep 23 16:55:11 2008 Koichi Sasada <ko1@atdot.net>
-
- * ruby.h: fix comment and rename macro HAVE_RUBY_MVM_H to
- HAVE_RUBY_VM_H.
-
-Tue Sep 23 16:41:31 2008 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/node.h, vm_core.h: move definition of
- RUBY_VM_METHOD_NODE to node.h.
-
- * class.c, common.mk: remove useless inclusion.
-
- * compile.h, iseq.h, vm_core.h: rename compile.h to iseq.h.
- move some definitions from vm_core.h to iseq.h.
-
- * compile.c, iseq.c, vm.c: ditto.
-
- * eval.c, compile.c: move some functions for parser
- from eval.c to compile.c.
-
- * eval_intern.h, vm_core.h: move va_init_list() macro to
- vm_core.h.
-
- * iseq.c (rb_iseq_new_top, rb_iseq_first_lineno): added.
-
- * load.c, ruby.c: use rb_iseq_new_top() instead of
- rb_iseq_new() with ISEQ_TYPE_TOP constant directly.
-
- * proc.c: use rb_iseq_first_lineno() instead of accessing
- iseq structure.
-
-Tue Sep 23 16:17:54 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/ripper/eventids2.c (token_to_eventid): supper __ENCODING__
- keyword. [ruby-dev:36478]
-
-Tue Sep 23 15:30:53 2008 Koichi Sasada <ko1@atdot.net>
-
- * common.mk, hash.c: remove unused inclusion.
-
-Tue Sep 23 09:52:07 2008 Koichi Sasada <ko1@atdot.net>
-
- * eval_safe.c, safe.c: rename eval_safe.c to safe.c.
-
- * common.mk, eval.c, safe.c, inits.c: separate safe.c from eval.c and
- make Init_safe().
-
-Tue Sep 23 09:20:00 2008 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: clean up
- - remove blockinlining.$(OBJEXT) to built
- - make ENCODING_H_INCLDUES variable (include/ruby/encoding.h)
- - make VM_CORE_H_INCLUDES variable (vm_core.h)
- - simplify rules.
- - make depends rule to output depend status using gcc -MM.
-
- * include/ruby/mvm.h, include/ruby/vm.h: rename mvm.h to vm.h.
-
- * include/ruby.h: ditto.
-
- * load.c: add inclusion explicitly.
-
- * enumerator.c, object.c, parse.y, thread.c, vm_dump.c:
- remove useless inclusion.
-
- * eval_intern.h: cleanup inclusion.
-
- * vm_core.h: rb_thread_t should be defined in this file.
-
- * vm_evalbody.c, vm_exec.c: rename vm_evalbody.c to vm_exec.c.
-
- * vm.h, vm_exec.h: rename vm.h to vm_exec.h.
-
- * insnhelper.h, vm_insnhelper.h: rename insnhelper.h to vm_insnhelper.h.
-
- * vm.c, vm_insnhelper.c, vm_insnhelper.h:
- - rename vm_eval() to vm_exec_core().
- - rename vm_eval_body() to vm_exec().
- - cleanup include order.
-
- * vm_method.c: fix comment.
-
-Tue Sep 23 09:01:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/pathname.rb (each_filename): return Enumerator if no block
- given.
-
- * test/pathname/test_pathname.rb: add a test for above.
-
-Tue Sep 23 08:25:56 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (env_aset): allow nil value to remove an entry.
- [ruby-dev:36465]
-
- * test/ruby/test_env.rb (TestEnv#test_aset): test updated.
-
-Tue Sep 23 08:07:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-keyword-end-re): emacs21 support. a
- patch from Hiroshi Moriyama <hiroshi at kvd.biglobe.ne.jp> in
- [ruby-dev:36471].
-
- * misc/ruby-mode.el (ruby-in-ppss-context-p): ditto.
-
- * misc/ruby-mode.el (ruby-here-doc-end-syntax):
-
-Tue Sep 23 02:07:52 2008 TAKAO Kouji <kouji@takao7.net>
-
- * test/readline/test_readline_history.rb
- (Readline::TestHistory#test_each): checked return value.
-
-Tue Sep 23 02:05:34 2008 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/readline.c (Init_readline): used remove_history to
- check offset of history if unsupported clear_history.
-
-Mon Sep 22 17:39:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile#open): should return a value from the
- block (if given). [ruby-core:18394]
-
-Mon Sep 22 11:17:51 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * include/ruby/encoding.h (enum): ISO C forbids comma at end of
- enumerator list
-
-Mon Sep 22 10:15:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * LEGAL: updated file names removed and added. [ruby-dev:36426]
-
-Mon Sep 22 02:39:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (get_default_external): add description.
-
-Sun Sep 21 21:52:41 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * math.c (math_log): should check argc.
-
-Sun Sep 21 21:20:24 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: added two macros.
-
- * rational.c: ditto.
-
-Sun Sep 21 18:06:38 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_s_convert): checks argc.
-
- * rational.c (nurat_s_convert): ditto.
-
-Sun Sep 21 10:19:04 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_s_canonicalize_internal): checks exactness of
- imag only.
-
- * rational.c (nurat_s_convert): accepts non real value
- (Rational(a,b) as a/b).
-
- * complex.c (nucomp_s_convert): refined.
-
-Sun Sep 21 09:37:57 2008 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv/csv.rb: Reworked CSV's parser and generator to be m17n. Data
- is now parsed in the Encoding it is in without need for translation.
- * lib/csv/csv.rb: Improved inspect() messages for better IRb support.
- * lib/csv/csv.rb: Fixed header writing bug reported by Dov Murik.
- * lib/csv/csv.rb: Use custom separators in parsing header Strings as
- suggested by Shmulik Regev.
- * lib/csv/csv.rb: Added a :write_headers option for outputting headers.
- * lib/csv/csv.rb: Handle open() calls in binary mode whenever we can to
- workaround a Windows issue where line-ending translation can cause an
- off-by-one error in seeking back to a non-zero starting position after
- auto-discovery for :row_sep as suggested by Robert Battle.
- * lib/csv/csv.rb: Improved the parser to fail faster when fed some forms
- of invalid CSV that can be detected without reading ahead.
- * lib/csv/csv.rb: Added a :field_size_limit option to control CSV's
- lookahead and prevent the parser from biting off more data than
- it can chew.
- * lib/csv/csv.rb: Added readers for CSV attributes: col_sep(), row_sep(),
- quote_char(), field_size_limit(), converters(), unconverted_fields?(),
- headers(), return_headers?(), write_headers?(), header_converters(),
- skip_blanks?(), and force_quotes?().
- * lib/csv/csv.rb: Cleaned up code syntax to be more inline with
- Ruby 1.9 than 1.8.
-
-Sun Sep 21 07:43:16 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: an instance method image has been removed and
- uses "imag" instead of "image".
-
- * complex.c: two instance method re and im are removed.
-
- * rational.c: follows the above changes.
-
- * include/ruby/ruby.h: ditto.
-
- * gc.c: ditto.
-
- * lib/cmath.rb: ditto.
-
- * lib/mathn.rb: ditto.
-
- * lib/complex.rb: ditto. and provides some obsolete methods.
-
-Sun Sep 21 02:48:45 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/ext/parser/parse.c: use ruby_xfree().
-
- * ext/json/ext/parser/parse.rl: ditto.
-
- * ext/json/ext/parser/unicode.c: ditto.
-
-Sun Sep 21 02:40:20 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json: import JSON v 1.1.3.
-
-Sat Sep 20 11:43:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/optparse.rb (summarize): separator "" should output new line.
-
-Sat Sep 20 08:07:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * parse.y: strings which contain only US-ASCII don't force to have
- US-ASCII encoding. [ruby-dev:36400]
-
-Sat Sep 20 07:59:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_desc): Regexps of ASCII Compatible encoding may
- contain non-ASCII characters. So in that case its encoding
- must keep original encoding.
-
-Sat Sep 20 07:44:56 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk: prec.c is removed.
-
-Fri Sep 19 22:37:25 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: uses f_(in)?exact_p macro.
-
- * rational.c: ditto.
-
- * bignum.c (rb_big_pow): bignum**bignum - should calculate without
- rational.
-
- * lib/complex.rb: should override Math module at most once.
-
- * lib/mathn.rb: requires 'cmath' directly.
-
-Fri Sep 19 20:48:06 2008 Yuki Sonoda <yugui@yugui.jp>
-
- * prec.c: removed. Precision will be redesigned and be back again.
- c.f. [ruby-dev:36352].
-
- * common.mk (COMMON_OBJS): removed prec.o.
-
- * inits.c (rb_call_inits): removed Init_Precision.
-
- * numeric.c (Init_Numeric): removed inclusion of Precision.
- removed #induced_from from each class.
-
- * rational.c: ditto.
-
- * ext/bigdecimal/bigdecimal.c: ditto.
-
- * lib/rdoc/known_classes.rb: removed the entry for Precision.
-
- * test/ruby/test_prec.rb: removed.
-
- * test/ruby/test_integer.rb: removed tests for Precision.
-
- * test/ruby/test_fixnum.rb: ditto.
-
- * test/ruby/test_float.rb: ditto.
-
- * test/ruby/test_rational.rb: ditto.
-
- * test/ruby/test_complex.rb: ditto.
-
- * test/bigdecimal/test_bigdecimal.rb: ditto.
-
-Fri Sep 19 19:43:40 2008 Yuki Sonoda <yugui@yugui.jp>
-
- * common.mk : Reverts the changeset 18994.
- Uses the official repository of rubyspec again.
-
-Fri Sep 19 17:41:56 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in: applied OS/2 support patch from Brendan Oakley
- <gentux2 at gmail.com> in [ruby-core:18707].
-
-Fri Sep 19 09:29:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dln.c: newer BeOS support. a patch from Pete Goodeve
- <pete.goodeve at computer.org> in [ruby-core:18712].
-
-Fri Sep 19 03:41:25 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: fix memory violation. mentioned by mame [ruby-dev:36373]
-
-Fri Sep 19 01:07:36 2008 Tanaka Akira <akr@fsij.org>
-
- * regexec.c (string_cmp_ic): add text_end argument.
- (slow_search): call enclen with real string end.
- (map_search): add text_end argument.
-
-Thu Sep 18 22:54:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/openssl/ossl_pkey_ec.c (ossl_ec_key_to_string): comment out
- fragments of unused code.
-
-Thu Sep 18 22:35:03 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (VpCtoV): 1E1000...000 is interpreted as
- Infinity. [ruby-dev:36159]
-
- * ext/bigdecimal/bigdecimal.c (VpPower): Infinity ** 1 returns
- Infinity instead of NaN. [ruby-dev:36159]
-
- * test/bigdecimal/test_bigdecimal.rb: add tests for above.
-
-Thu Sep 18 22:20:08 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (Init_Exception): introduce EncodingError which is a
- superclass for all encoding related exception classes,
- e.g. Encoding::CompatibilityError. [ruby-dev:36371]
-
- * transcode.c (Init_transcode): ditto.
-
-Thu Sep 18 21:57:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_comparable): make ascii8bit string to be
- compatible with any other encoding.
-
- * string.c (rb_str_cmp): use rb_str_comparable() instead of
- rb_enc_compatible() since <=> is a comparison anyway.
-
-Thu Sep 18 21:37:14 2008 Tanaka Akira <akr@fsij.org>
-
- * grapheme cluster implementation reverted. [ruby-dev:36375]
-
-Thu Sep 18 20:50:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rake.rb (Rake::Application#standard_exception_handling):
- replaced magic numbers for exit status.
-
-Thu Sep 18 20:37:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser::ParseError#set_backtrace): omits
- OptionParser internal backtraces unless debug flag is set.
-
-Thu Sep 18 20:02:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/uri/common.rb (unescape): skip '%' to make String#hex work
- correctly.
-
-Thu Sep 18 19:51:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (big2str_karatsuba): free internal buffer eagerly.
- a patch from TOYOFUKU Chikanobu <nobu_toyofuku at nifty.com>
- in [ruby-dev:36217].
-
- * bignum.c (rb_big2str0): ditto.
-
-Thu Sep 18 19:43:04 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * st.c (new_size): raise RuntimeError when st_table is too big.
- [ruby-dev:36354]
-
-Thu Sep 18 18:23:23 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (enc_arg): must take pointer argument to avoid GC
- problem. StringValueCStr modifies the argument and it should be
- preserved while the string StringValueCStr returns is used.
- Since the string is used by caller, the modified argument should be
- hold by caller. Actually
- GC.stress = true
- def (o=Object.new).to_str()
- "universal"+"_newline"
- end
- "\u3042".encode(o, "")
- causes curious warning:
- rb_define_const: invalid name `' for constant
-
-Thu Sep 18 17:32:44 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * transcode.c: add "Error" suffix for Encoding exception classes.
- a patch from Tadashi Saito <shiba at mail2.accsnet.ne.jp> in
- [ruby-dev:36346].
-
- * encoding.c (Init_Encoding): rename EncodingCompatibilityError to
- Encoding::CompatibilityError. [ruby-dev:36366]
-
-Thu Sep 18 17:18:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * transcode.c (enc_arg): revert last change. too early exception
- raising.
-
- * transcode.c (enc_arg): need not to take pointer argument.
-
-Sun Sep 18 02:22:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/bigdecimal/test_bigdecimal.rb: add tests to achieve over 90%
- test coverage of bigdecimal.
-
-Wed Sep 17 21:50:14 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_casecmp): don't use rb_enc_codepoint.
-
-Wed Sep 17 19:55:33 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_s_convert): accepts complex
- value (Complex(a,b) as a+bi).
-
-Wed Sep 17 19:16:47 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_io.rb (TestIO#test_dup): avoid infinite loop.
- [ruby-dev:36326]
-
- * test/ruby/test_io.rb (TestIO#test_dup): remove needless open.
- [ruby-dev:35957]
-
-Wed Sep 17 17:44:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_extract_modeenc): process option mode: and perm: as
- well.
-
- * io.c (open_key_args): move mode: and perm: related code to
- rb_io_extract_modeenc().
-
-Wed Sep 17 13:42:59 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
-
- * lib/cgi/html.rb (checkbox_group,radio_group): bug fix
- use size instead of bytesize.
-
- * test/cgi/test_cgi_tag_helper.rb: test for checkbox_group,radio_group.
-
-Wed Sep 17 06:58:31 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * numeric.c: provides predicate real? instead of scalar?.
-
- * complex.c: follows the above change.
-
- * lib/cmath.rb: ditto.
-
-Wed Sep 17 01:56:27 2008 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_io_m17n.rb: use __FILE__ instead of /dev/null.
- [ruby-dev:36327]
-
-Wed Sep 17 01:33:11 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/oniguruma.h (OnigEncodingTypeST): add precise_ret
- argument for mbc_to_code.
- (ONIGENC_MBC_TO_CODE): provide NULL for precise_ret.
- (ONIGENC_MBC_PRECISE_CODEPOINT): defined.
-
- * include/ruby/encoding.h (rb_enc_mbc_precise_codepoint): defined.
-
- * regenc.h (onigenc_single_byte_mbc_to_code): precise_ret argument
- added.
- (onigenc_mbn_mbc_to_code): ditto.
-
- * regenc.c (onigenc_single_byte_mbc_to_code): precise_ret argument
- added.
- (onigenc_mbn_mbc_to_code): ditto.
-
- * string.c (count_utf8_lead_bytes_with_word): removed.
- (str_utf8_nth): removed.
- (str_utf8_offset): removed.
- (str_strlen): UTF-8 codepoint oriented optimization removed.
- (rb_str_substr): ditto.
- (enc_succ_char): use rb_enc_mbc_precise_codepoint.
- (enc_pred_char): ditto.
- (rb_str_succ): ditto.
-
- * encoding.c (rb_enc_ascget): check length with
- rb_enc_mbc_precise_codepoint.
- (rb_enc_codepoint): use rb_enc_mbc_precise_codepoint.
-
- * regexec.c (string_cmp_ic): add text_end argument.
- (match_at): check end of character after exact string matches.
-
- * enc/utf_8.c (grapheme_table): defined for extended grapheme cluster
- boundary.
- (grapheme_cmp): defined.
- (get_grapheme_properties): defined.
- (grapheme_boundary_p): defined.
- (MAX_BYTES_LENGTH): defined.
- (comb_char_enc_len): defined.
- (mbc_to_code0): extracted from mbc_to_code.
- (mbc_to_code): use mbc_to_code0.
- (left_adjust_combchar_head): defined.
- (utf_8): use a extended grapheme cluster as a unit.
-
- * enc/unicode.c (onigenc_unicode_mbc_case_fold): use
- ONIGENC_MBC_PRECISE_CODEPOINT to extract codepoints.
- (onigenc_unicode_get_case_fold_codes_by_str): ditto.
-
- * enc/euc_jp.c (mbc_to_code): follow mbc_to_code field change.
- use onigenc_mbn_mbc_to_code.
-
- * enc/shift_jis.c (mbc_to_code): ditto.
-
- * enc/emacs_mule.c (mbc_to_code): ditto.
-
- * enc/gbk.c (gbk_mbc_to_code): follow mbc_to_code field and
- onigenc_mbn_mbc_to_code change.
-
- * enc/cp949.c (cp949_mbc_to_code): ditto.
-
- * enc/big5.c (big5_mbc_to_code): ditto.
-
- * enc/euc_tw.c (euctw_mbc_to_code): ditto.
-
- * enc/euc_kr.c (euckr_mbc_to_code): ditto.
-
- * enc/gb18030.c (gb18030_mbc_to_code): ditto.
-
- * enc/utf_32be.c (utf32be_mbc_to_code): follow mbc_to_code field
- change.
-
- * enc/utf_16be.c (utf16be_mbc_to_code): ditto.
-
- * enc/utf_32le.c (utf32le_mbc_to_code): ditto.
-
- * enc/utf_16le.c (utf16le_mbc_to_code): ditto.
-
-Wed Sep 17 01:17:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (enc_arg): raise exception when unknown encoding is
- given.
-
-Tue Sep 16 22:23:24 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
-
- * lib/cgi/core.rb (CGI#header): performance improvement.
- From CGIAlt http://cgialt.rubyforge.org/
-
- * test/cgi/test_cgi_header.rb: exception class fixed.
-
-Tue Sep 16 22:21:33 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_concat): fix rdoc. (codepoint is integer)
-
- * string.c (rb_str_each_codepoint): use UINT2NUM.
-
-Tue Sep 16 21:48:55 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_desc): Regexp#inspect should be US-ASCII.
-
-Tue Sep 16 21:33:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_crypt): orthodox crypt() sees only first two bytes
- of salt.
-
-Tue Sep 16 19:18:40 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_marshal_{dump,load}): preserve instance
- variables.
-
- * rational.c (nurat_marshal_{dump,load}): ditto.
-
-Tue Sep 16 18:28:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_gets_m): rdoc updated. limit counts in bytes.
- [ruby-core:18617]
-
- * io.c (rb_io_readlines, rb_f_gets): ditto.
-
- * io.c (rb_io_readbyte): rdoc updated. [ruby-core:18617]
-
-Tue Sep 16 11:55:16 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_each_codepoint): add new methods, #codepoints
- and #each_codepoint. a patch from Michael Selig
- <michael.selig at fs.com.au> in [ruby-core:18532].
-
-Tue Sep 16 11:24:44 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/mkconstants.rb: add new constants. a patch from
- IWAMURO Motonori <deenheart+ruby at gmail.com> in [ruby-dev:36309].
-
-Tue Sep 16 09:20:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_io.rb (TestIO#test_dup): exception should be
- raised from IO#dup.
-
-Tue Sep 16 08:35:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_io.rb (TestIO#test_dup): this test might fail if
- there are any garbage IO objects.
-
-Tue Sep 16 02:02:56 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_buf_cat_ascii): codepoint is unsigned int.
-
- * string.c (rb_str_concat): ditto.
-
- * string.c (str_cat_char): ditto.
-
- * string.c (prefix_escape): ditto.
-
-Tue Sep 16 01:47:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (single_byte_optimizable): make function inline. based
- on a patch from Michael Selig <michael.selig at fs.com.au> in
- [ruby-core:18532].
-
- * string.c (str_modify_keep_cr): new function act as
- rb_str_modify(), but don't clear coderange
-
- * string.c (rb_str_casecmp): specialized for single byte strings.
-
- * string.c (rb_str_splice): preserve coderange.
-
- * string.c (rb_str_slice_bang, rb_str_reverse_bang,
- rb_str_upcase_bang, rb_str_downcase_bang, tr_trans,
- rb_str_capitalize_bang, rb_str_swapcase_bang,
- rb_str_delete_bang, rb_str_chop_bang, rb_str_chomp_bang,
- rb_str_lstrip_bang, rb_str_rstrip_bang): ditto.
-
- * string.c (rb_str_clear): preset coderange.
-
- * string.c (rb_str_split_m): specialized for splitting with a
- string.
-
-Tue Sep 16 00:57:56 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_quote): use rb_enc_mbcput to generate ASCII
- incompatible characters properly.
-
-Tue Sep 16 00:51:59 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (Encoding#base_encoding): removed. [ruby-dev:36270]
-
-Tue Sep 16 00:40:56 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (STR1_LENGTH): defined.
- (makeSTR1LEN): defined.
-
- * tool/transcode-tblgen.rb: use makeSTR1LEN. generate STR1 for 4 to
- 259 bytes.
-
- * transcode.c (rb_transcoding): new field: output_index.
- (transcode_restartable0): use STR1_LENGTH.
-
-Mon Sep 15 23:52:45 2008 Koichi Sasada <ko1@atdot.net>
-
- * gc.c, include/ruby/ruby.h: rename rb_register_mark_object()
- to rb_gc_register_mark_object().
-
- * eval.c, vm.c: initialize vm->mark_object_ary at
- Init_top_self().
-
- * bignum.c, complex.c, encoding.c, ext/win32ole/win32ole.c,
- io.c, load.c, marshal.c, rational.c, ruby.c, vm.c:
- use rb_gc_register_mark_object() instead of
- rb_global_variable() or rb_gc_register_address().
-
-Mon Sep 15 23:37:15 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_opts): don't use to_sym.
-
-Mon Sep 15 23:28:28 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_get_index): don't return -1.
-
- * io.c (rb_scan_open_args): call FilePathValue before encoding
- conversion.
-
-Mon Sep 15 22:11:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_squeeze_bang): specialized for 7bit characters in
- ASCII compatible strings.
-
- * string.c (rb_str_count): ditto.
-
- * string.c (tr_trans): preserve 7bit/valid coderange flag.
-
- * string.c (rb_str_squeeze_bang): preserve previous coderange value.
-
- * string.c (rb_str_lstrip_bang): ditto.
-
- * string.c (rb_str_rstrip_bang): ditto.
-
- * encoding.c (rb_default_external_encoding): preserve
- default_external_encoding in a static variable.
-
- * string.c (single_byte_optimizable): check coderange first, to
- reduce number of calling rb_enc_from_index().
-
-Mon Sep 15 20:57:00 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/matrix.rb (Matrix#eql?): fixed [ruby-dev:36298].
- Reported by an anonymous user.
-
- * lib/matrix.rb (Vector#eql?): ditto.
-
- * (Matrix#compare_by_row_vectors): takes comparison
- strategy as an optional parameter.
-
- * (Vector#compare_by): ditto.
-
-Mon Sep 15 14:34:32 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (RUBY_MAX_CHAR_LEN): defined.
-
- * encoding.c (str_cat_char): use RUBY_MAX_CHAR_LEN.
-
-Mon Sep 15 13:53:33 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_enc_compatible): accept other than strings and
- regexps. [ruby-core:18595]
-
- * encoding.c (rb_enc_get_index): works files and encodings.
-
-Mon Sep 15 13:17:21 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_eql_p): new.
-
- * complex.c (nucomp_hash): should use hash values of the elements.
-
- * rational.c (nurat_hash): ditto.
-
- * hash.c (rb_any_cmp): removed an unused variable.
-
-Mon Sep 15 11:11:04 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoder): resetsize_func and resetstate_func
- also returns ssize_t.
-
- * enc/trans/iso2022.trans: follow the type change.
-
-Mon Sep 15 10:28:10 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * test/matrix/test_matrix.rb (setup): typo.
- (test_equality): misdefinition of the expected working.
- Reported by an anonymous user.
- (test_hash): added.
-
- * test/matrix/test_vector.rb: ditto.
-
-Mon Sep 15 03:33:10 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h: return output functions ssize_t.
-
- * transcode.c (transcode_restartable0): don't need to cast the result
- of output functions.
-
- * enc/trans/newline.trans: follow the type change.
-
- * enc/trans/escape.trans: ditto.
-
- * enc/trans/utf_16_32.trans: ditto.
-
- * enc/trans/iso2022.trans: ditto.
-
- * enc/trans/japanese.trans: ditto.
-
-Mon Sep 15 03:04:29 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h: output function takes output buffer size.
-
- * transcode.c: give output buffer size for output functions.
-
- * enc/trans/newline.trans: follow the type change.
-
- * enc/trans/escape.trans: ditto.
-
- * enc/trans/utf_16_32.trans: ditto.
-
- * enc/trans/iso2022.trans: ditto.
-
- * enc/trans/japanese.trans: ditto.
-
-Mon Sep 15 02:37:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (str_encode): returns duplicated string if nothing
- changed. [ruby-core:18578]
-
-Sun Sep 14 22:09:01 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
-
- * lib/cgi/core.rb (CGI::parse): performance improvement
-
-Sun Sep 14 18:33:32 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: trivial changes.
-
-Sun Sep 14 16:15:22 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/matrix.rb (Vector#eql?): typo of the method name as "eqn?".
- (Vector#eqn?): removed. Defined by mistake.
- Fixes [ruby-dev:36294]. Reported by weda <weda AT
- issp.u-tokyo.ac.jp> and an anonymous user.
-
- * test/matrix/test_matrix.rb: added.
-
- * test/matrix/test_vector.rb: added.
-
-Sun Sep 14 16:07:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): associates the locale encoding with $0 as
- well as ARGV.
-
-Sun Sep 14 13:48:03 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * object.c (Init_Object): added metameta-class initialization for
- BasicObject, Object, and Module.
- The metameta-classes of them are now the metaclass of Class, as the
- metameta-class of Class is.
-
- * object.c (boot_defmetametaclass): added.
-
-Sun Sep 14 10:10:43 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (f_{add,mul,sub}): omitted some shortcuts for preserving
- signed zero anyway.
-
- * complex.c (nucomp_negate): new.
-
-Sun Sep 14 04:15:16 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/oniguruma.h (OnigEncodingTypeST): add end argument for
- left_adjust_char_head.
- (ONIGENC_LEFT_ADJUST_CHAR_HEAD): add end argument.
- (onigenc_get_left_adjust_char_head): ditto.
-
- * include/ruby/encoding.h (rb_enc_left_char_head): add end argument.
-
- * regenc.h (onigenc_single_byte_left_adjust_char_head): ditto.
-
- * regenc.c (onigenc_get_right_adjust_char_head): follow the interface
- change.
- (onigenc_get_right_adjust_char_head_with_prev): ditto.
- (onigenc_get_prev_char_head): ditto.
- (onigenc_step_back): ditto.
- (onigenc_get_left_adjust_char_head): ditto.
- (onigenc_single_byte_code_to_mbc): ditto.
-
- * re.c: ditto.
-
- * string.c: ditto.
-
- * io.c: ditto.
-
- * regexec.c: ditto.
-
- * enc/euc_jp.c: ditto.
-
- * enc/cp949.c: ditto.
-
- * enc/shift_jis.c: ditto.
-
- * enc/gbk.c: ditto.
-
- * enc/big5.c: ditto.
-
- * enc/euc_tw.c: ditto.
-
- * enc/euc_kr.c: ditto.
-
- * enc/emacs_mule.c: ditto.
-
- * enc/gb18030.c: ditto.
-
- * enc/utf_8.c: ditto.
-
- * enc/utf_16le.c: ditto.
-
- * enc/utf_16be.c: ditto.
-
- * enc/utf_32le.c: ditto.
-
- * enc/utf_32be.c: ditto.
-
-Sun Sep 14 03:43:27 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/oniguruma.h (ONIGENC_STEP_BACK): add end argument.
- (onigenc_step_back): ditto.
-
- * regenc.c (onigenc_step_back): add end argument.
-
- * regexec.c: follow the interface change.
-
-Sun Sep 14 03:20:03 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/oniguruma.h (onigenc_get_prev_char_head): add end
- argument.
-
- * include/ruby/encoding.h (rb_enc_prev_char): ditto.
-
- * regenc.c (onigenc_get_prev_char_head): add end argument.
-
- * regparse.c: follow the interface change.
-
- * regexec.c: ditto.
-
- * string.c: ditto.
-
- * parse.y: ditto.
-
-Sun Sep 14 02:04:28 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/oniguruma.h
- (onigenc_get_right_adjust_char_head_with_prev): add end argument.
-
- * regenc.c (onigenc_get_right_adjust_char_head_with_prev): use end
- argument.
-
- * regexec.c (forward_search_range): follow the interface change.
-
-Sun Sep 14 01:38:26 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/oniguruma.h (onigenc_get_right_adjust_char_head): add
- end argument.
-
- * include/ruby/encoding.h (rb_enc_right_char_head): add end argument.
-
- * regenc.c (onigenc_get_right_adjust_char_head): use end argument.
-
- * re.c (rb_reg_adjust_startpos): follow the interface change.
-
- * string.c (rb_str_index): ditto.
-
- * regexec.c (backward_search_range): ditto.
- (onig_search): ditto.
-
-Sun Sep 14 00:43:28 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/ripper/depend (ripper.o): it depends on ruby headers.
-
-Sat Sep 13 19:27:01 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_encoding_set): don't need argc argument.
- (rb_io_s_pipe): update io_encoding_set call.
- (rb_io_set_encoding): ditto.
-
-Sat Sep 13 18:46:41 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_transcoding): align state field.
-
-Sat Sep 13 18:21:09 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (DECORATOR_P): renamed from SUPPLEMENTAL_CONVERSION.
-
-Sat Sep 13 18:05:37 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (make_writeconv): use rb_enc_name.
- (make_readconv): ditto.
-
- * transcode.c (rb_econv_open_opts): ditto.
- (econv_args): ditto.
- (decorate_convpath): ditto.
- (econv_set_replacement): ditto.
-
-Sat Sep 13 11:15:38 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/rexml/document.rb: fixed typo.
-
-Sat Sep 13 10:53:13 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: refined.
-
- * rational.c: ditto.
-
-Sat Sep 13 03:44:52 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_prepare_opts): raise ArgumentError if
- a broken string is specified as a replacement.
-
-Sat Sep 13 03:31:05 2008 Tanaka Akira <akr@fsij.org>
-
- * iseq.c (iseq_s_compile_file): use rb_file_open_str.
-
- * io.c (rb_file_open_generic): call validate_enc_binmode.
- (rb_file_open_str): call FilePathValue.
-
-Sat Sep 13 02:58:05 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (validate_enc_binmode): extracted from rb_io_extract_modeenc.
- (rb_io_extract_modeenc): use validate_enc_binmode.
- (io_encoding_set): call validate_enc_binmode.
-
-Sat Sep 13 02:50:34 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_prepare_opts): initialize *opt and return 0
- if opthash is nil.
-
-Sat Sep 13 02:29:19 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/escape.trans: transcoder name renamed to use underscore.
-
- * transcode.c: follow the renaming.
-
-Sat Sep 13 02:12:17 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_init_by_convpath_i): new function.
- (rb_econv_init_by_convpath): new function.
- (econv_init): use rb_econv_init_by_convpath.
-
-Sat Sep 13 01:11:14 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_args): take snamev_p and dnamev_p to prevent
- possible GC problem.
-
-Sat Sep 13 00:38:54 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (enc_arg): take arg as VALUE * to prevent possible GC
- problem.
-
-Fri Sep 12 23:19:41 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_add_transcoder_at): fix loop condition.
-
-Fri Sep 12 22:39:46 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (decorator_names): extracted from rb_econv_open.
- (rb_econv_open): use decorator_names.
- (econv_args): extracted from econv_init.
- (econv_init): use econv_args.
- (decorate_convpath): new function.
- (search_convpath_i): new function.
- (econv_s_search_convpath): new method.
- (Init_transcode): new method defined.
-
-Fri Sep 12 21:55:43 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_t): new field: num_allocated.
- (rb_econv_alloc): extracted from
- rb_econv_open_by_transcoder_entries.
- (rb_econv_add_transcoder_at): extracted from rb_econv_decorate_at
- and generalized
- (rb_econv_open_by_transcoder_entries): use rb_econv_alloc and
- rb_econv_add_transcoder_at.
- (rb_econv_add_converter): extracted from rb_econv_decorate_at.
- (rb_econv_decorate_at): use rb_econv_add_converter.
-
-Fri Sep 12 21:22:09 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_t): new field: started.
- (rb_econv_open_by_transcoder_entries): initialize started field.
- (rb_econv_convert): set started field.
- (rb_econv_insert_output): ditto.
- (rb_econv_decorate_at): check started field instead of num_finished.
-
-Fri Sep 12 20:28:59 2008 Tanaka Akira <akr@fsij.org>
-
- * regenc.c (onigenc_single_byte_code_to_mbc): follow OnigEncoding
- change.
-
-Fri Sep 12 20:00:22 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * regparse.c (parse_exp): fix resource leak.
-
-Fri Sep 12 01:21:22 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/syck/node.c (syck_replace_str2): fix wrong check to free ptr.
-
-Thu Sep 11 20:18:24 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_err_in_callback.rb (teardown): get rid
- of infinite loop.
-
-Thu Sep 11 19:12:56 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/oniguruma.h (OnigCodePoint): unsigned long to unsigned int.
-
- * include/ruby/encoding.h (rb_enc_codepoint): ditto.
-
- * encoding.c (rb_enc_codepoint): signed int to unsigned int.
-
- * encoding.c (rb_enc_ascget): ditto.
-
- * string.c (rb_str_casecmp): ditto.
-
- * string.c (enc_succ_alnum_char): ditto.
-
- * string.c (rb_str_inspect): ditto.
-
- * string.c (rb_str_upcase_bang): ditto.
-
- * string.c (rb_str_downcase_bang): ditto.
-
- * string.c (rb_str_capitalize_bang): ditto.
-
- * string.c (rb_str_swapcase_bang): ditto.
-
- * string.c (struct tr): ditto.
-
- * string.c (trnext): ditto.
-
- * string.c (tr_trans): ditto.
-
- * string.c (tr_setup_table): ditto.
-
- * string.c (tr_find): ditto.
-
- * string.c (rb_str_delete_bang): ditto.
-
- * string.c (rb_str_squeeze_bang): ditto.
-
- * string.c (rb_str_count): ditto.
-
- * string.c (rb_str_split_m): ditto.
-
- * string.c (rb_str_each_line): ditto.
-
- * string.c (rb_str_lstrip_bang): ditto.
-
- * string.c (rb_str_rstrip_bang): ditto.
-
- * string.c (rb_str_intern): ditto.
-
- * dir.c (char_casecmp): ditto.
-
- * sprintf.c (rb_str_format): ditto.
-
- * enc/emacs_mule.c (mbc_to_code): to be 32bit clean.
-
- * enc/emacs_mule.c (code_to_mbc): ditto.
-
- * enc/gb18030.c (mbc_to_code): ditto.
-
- * enc/gb18030.c (code_to_mbc): ditto.
-
-Thu Sep 11 19:09:25 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/iconv/iconv.c: add attention for machine independent.
-
-Thu Sep 11 15:23:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigdivrem): adjust length for division and remainder.
- a patch from TOYOFUKU Chikanobu <nobu_toyofuku at nifty.com> in
- [ruby-dev:36231].
-
-Thu Sep 11 02:59:47 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_binwrite): extracted from io_fwrite.
-
-Thu Sep 11 02:25:34 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (make_encoding): new function.
- (make_encobj): new function.
- (econv_s_asciicompat_encoding): use make_encoding.
- (rb_econv_open_exc): use SUPPLEMENTAL_CONVERSION.
- (econv_convpath): use encoding object in the result.
-
-Thu Sep 11 02:14:38 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_convpath): new method.
-
-Wed Sep 10 23:00:43 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * tool/compile_prelude.rb: print "<internal:prelude>" instead of
- "prelude.rb" on stack trace. [ruby-dev:36129]
-
-Wed Sep 10 21:19:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (big2str_karatsuba): remove unnecessary fixnum code. a
- patch from TOYOFUKU Chikanobu <nobu_toyofuku at nifty.com> in
- [ruby-dev:36217].
-
-Wed Sep 10 21:09:32 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_err_in_callback.rb: InternetExplorer should
- be closed.
-
- * test/win32ole/err_in_callback.rb: ditto.
-
-Wed Sep 10 18:25:19 2008 akira yamada <akira@rice.p.arika.org>
-
- * lib/uri/common.rb (URI::Parser): new class.
-
- * lib/uri/mailto.rb, lib/uri/generic.rb: follow the above change.
-
- * test/uri/test_parser.rb: added tests for URI::Parser.
-
-Wed Sep 10 10:35:32 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
-
- * lib/cgi/cookie.rb (CGI::Cookie#to_s): performance improvement
- from http://jp.rubyist.net/magazine/?0023-Cgirb.
-
-Wed Sep 10 10:12:29 2008 akira yamada <akira@arika.org>
-
- * lib/sync.rb (Sync_m#sync_exclusive): fixed
- typo. [ruby-dev:36233] [RubyForge#11680]
-
-Wed Sep 10 01:57:23 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (StrSet#hash): cache hash value.
- (ActionMap#hash): ditto.
-
-Wed Sep 10 01:26:01 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (econv_after_output): renamed from
- econv_output_followed_by_input.
- (ECONV_AFTER_OUTPUT): renamed from ECONV_OUTPUT_FOLLOWED_BY_INPUT.
-
- * transcode.c: follow the renaming.
-
- * io.c: ditto.
-
-Wed Sep 10 01:16:07 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (get_replacement_character): don't return ASCII
- incompatible replacements.
- (make_replacement): don't convert the result of
- get_replacement_character.
-
-Wed Sep 10 01:05:00 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/newline.trans (rb_universal_newline): swap src_encoding
- and dst_encoding.
-
- * transcode.c (rb_econv_decorate_at): call get_transcoder_entry only
- once.
- (rb_econv_binmode): follow universal_newline change.
-
-Wed Sep 10 00:01:36 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_t): rename field: writeconv_stateless to
- writeconv_asciicompat.
-
- * io.c: follow the renaming.
-
- * gc.c: ditto.
-
-Tue Sep 9 23:55:26 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_fwrite): raise an error if ASCII incompatible string
- written for text mode IO without encoding conversion.
- (rb_io_extract_modeenc): binmode requirement changed.
-
-Tue Sep 9 21:59:48 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
-
- * lib/cgi*: split cgi.rb into four files. [ruby-dev:36041]
-
-Tue Sep 9 21:17:00 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (ECONV_DECORATOR_MASK): merge
- ECONV_ENCODER_MASK and ECONV_DECORATOR_MASK.
- (ECONV_UNIVERSAL_NEWLINE_DECORATOR): renamed from
- ECONV_UNIVERSAL_NEWLINE_DECODER.
- (ECONV_CRLF_NEWLINE_DECORATOR): renamed from
- ECONV_CRLF_NEWLINE_ENCODER.
- (ECONV_CR_NEWLINE_DECORATOR): renamed from ECONV_CR_NEWLINE_ENCODER.
- (ECONV_XML_TEXT_DECORATOR): renamed from ECONV_XML_TEXT_ENCODER.
- (ECONV_XML_ATTR_CONTENT_DECORATOR): renamed from
- ECONV_XML_ATTR_CONTENT_ENCODER.
- (ECONV_STATEFUL_DECORATOR_MASK): renamed from
- ECONV_STATEFUL_ENCODER_MASK.
- (ECONV_XML_ATTR_QUOTE_DECORATOR): renamed from
- ECONV_XML_ATTR_CONTENT_DECORATOR.
-
- * io.c: follow the renaming.
-
- * transcode.c: ditto.
-
-Tue Sep 9 20:55:55 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open0): make it static.
- (rb_econv_open): place decorators at last.
-
-Tue Sep 9 20:40:15 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/openssl/test_ssl.rb (OpenSSL#test_client_session):
- Debian's openssl 0.9.8g-13 failed at assert(ssl.session_reused?),
- when use default SSLContext. [ruby-dev:36167]
-
-Tue Sep 9 20:34:26 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_t): last_trans_index removed.
- (rb_econv_open_by_transcoder_entries): follow the type change.
- (rb_econv_open0): ditto.
- (rb_econv_decorate_at): ditto.
- (rb_econv_binmode): ditto.
- (rb_econv_insert_output): simplified because there are no decorators
- at last.
-
-Tue Sep 9 20:21:54 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open): reverse the order of decoders.
-
-Tue Sep 9 20:18:26 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open0): num_encoders and num_decoders removed.
-
-Tue Sep 9 03:59:13 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (make_writeconv): useless branch removed.
-
-Tue Sep 9 02:18:20 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_decorate_at_first): declared.
- (rb_econv_decorate_at_last): declared.
-
- * transcode.c (rb_econv_open_by_transcoder_entries): initialize
- replacement_enc. allocate outbuf for the last transcoder.
- (rb_econv_open0): extracted from rb_econv_open.
- (rb_econv_open): use rb_econv_open0 and decorate the result using
- rb_econv_decorate_at_first and rb_econv_decorate_at_last.
- (rb_econv_decorate_at): new function.
- (rb_econv_decorate_at_first): ditto.
- (rb_econv_decorate_at_last): ditto.
- (rb_econv_binmode): fix iteration end condition.
- (econv_init): don't set source_encoding_name and
- destination_encoding_name because they are set in rb_econv_open0.
-
-Tue Sep 9 01:10:54 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open): make ec a local variable.
-
-Tue Sep 9 00:20:10 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_asciicompat_encoding): check decoder.
-
-Tue Sep 9 00:00:47 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_t): last_error.partial_input removed.
-
-Mon Sep 8 23:24:54 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_asciicompat_encoding): renamed
- from rb_econv_stateless_encoding to apply stateless ASCII
- incompatible encodings such as UTF-16BE.
-
- * io.c (make_writeconv): use rb_econv_asciicompat_encoding.
-
- * transcode_data.h (rb_transcoder_asciicompat_type_t): renamed from
- rb_transcoder_stateful_type_t.
- (rb_transcoder): use rb_transcoder_asciicompat_type_t.
-
- * transcode.c: follow the type change.
- (asciicompat_encoding_i): renamed from stateless_encoding_i.
- (rb_econv_asciicompat_encoding): renamed from
- rb_econv_stateless_encoding.
- (econv_s_asciicompat_encoding): method renamed.
-
- * tool/transcode-tblgen.rb: follow the type change.
-
- * enc/trans/utf_16_32.trans: follow the type change.
- rb_from_UTF_16BE to UTF-8 is asciicompat_decoder.
- rb_from_UTF_16LE to UTF-8 is asciicompat_decoder.
- rb_from_UTF_32BE to UTF-8 is asciicompat_decoder.
- rb_from_UTF_32LE to UTF-8 is asciicompat_decoder.
- UTF-8 to rb_to_UTF_16BE is asciicompat_encoder.
- UTF-8 to rb_to_UTF_16LE is asciicompat_encoder.
- UTF-8 to rb_to_UTF_32BE is asciicompat_encoder.
- UTF-8 to rb_to_UTF_32LE is asciicompat_encoder.
-
- * enc/trans/newline.trans: follow the type change. universal newline
- decoder is asciicompat_converter.
-
- * enc/trans/escape.trans: follow the type change.
-
- * enc/trans/iso2022.trans: ditto.
-
- * enc/trans/japanese.trans: ditto.
-
-Mon Sep 8 23:05:42 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_insert_output): "readagain" part should be
- after replacement.
-
-Mon Sep 8 22:30:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * dir.c (dir_initialize): rename option name of Dir.open
- from :external_encoding to :encoding.
-
-Mon Sep 8 22:16:20 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
-
- * lib/cgi.rb : obsolete regex "n" option. [ruby-dev:36130]
-
-Mon Sep 8 18:13:20 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (getppid): typo. [ruby-dev:36202]
-
- * process.c (get_ppid): mention the return value on Windows.
-
-Mon Sep 8 18:15:59 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (ArrayCode): less string substitutions.
-
-Mon Sep 8 18:13:13 2008 Tanaka Akira <akr@fsij.org>
-
- * vm.c (rb_mRubyVMFrozenCore): registered for GC.
-
- * re.c (rb_reg_preprocess_dregexp): fix GC problem on MacOS X with
- powerpc-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc.
- build 5367).
-
-Mon Sep 8 18:09:07 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): define SIZE_MAX for VC++6/7.
-
-Mon Sep 8 17:46:09 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (filetime_to_unixtime): remove unused variable.
- [ruby-dev:36191]
-
-Mon Sep 8 13:47:39 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_io.rb (TestIO#test_dup): add open in block.
- see [ruby-dev:35957].
-
-Mon Sep 8 07:09:42 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: some adjustments.
-
- * rational.c: ditto.
-
-Mon Sep 8 06:50:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (XLDFLAGS): added --enable-auto-import for cygwin and
- mingw.
-
-Mon Sep 8 02:04:25 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_set_replacement): renamed from
- rb_econv_set_replacemenet.
-
- * transcode.c: follow the renaming.
-
-Mon Sep 8 01:10:41 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (transcode_tblgen): log message refined.
-
-Mon Sep 8 00:58:04 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c: removed unused code.
-
-Mon Sep 8 00:04:09 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/iso2022.trans: upcase to iso-2022-jp.
-
- * enc/emacs_mule.c: ditto.
-
-Sun Sep 7 23:46:36 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/iso2022.trans: stateless-iso-2022-jp is defined to avoid
- undefined conversion error between iso-2022-jp and the corresponding
- stateless encoding.
-
- * enc/emacs_mule.c: replicate emacs-mule as stateless-iso-2022-jp.
-
-Sun Sep 7 20:03:01 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/escape.trans (hexstr): renamed from str1.
-
-Sun Sep 7 19:45:31 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/escape.trans: use transcode_tblgen.
-
- * tool/transcode-tblgen.rb: generate an empty line after str1.
-
-Sun Sep 7 19:16:38 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (ActionMap#str_name): new method to
- generate a name base on string content.
- (ActionMap#gen_str): extracted from generate_info and use str_name.
-
-Sun Sep 7 18:28:05 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (ActionMap#generate_info): use a memo to
- avoid duplication for STR1.
-
-Sun Sep 7 18:10:28 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (STR1): defined for a string up to 255 bytes.
- (STR1_BYTEINDEX): defined.
- (makeSTR1): defined.
-
- * tool/transcode-tblgen.rb: generate STR1.
-
- * transcode.c (transcode_restartable0): interpret STR1.
-
- * enc/trans/escape.trans (fun_so_escape_xml_chref): removed. STR1 is
- used instead.
-
-Sun Sep 7 17:54:45 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * configure.in: Mac OS X's crypt(2) is broken with invalid salt.
- [ruby-dev:35899]
- * string.c (rb_str_crypt): ditto.
-
-Sun Sep 7 17:29:49 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: o4 is usable only if the first byte is
- f0-f7.
-
-Sun Sep 7 12:44:26 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (make_writeconv): choose ASCII compatible encoding as
- intermediate encoding if stateful encoder exists.
-
-Sun Sep 7 12:09:29 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (ECONV_XML_ATTR_CONTENT_ENCODER): defined.
- (ECONV_STATEFUL_ENCODER_MASK): defined.
- (ECONV_XML_ATTR_QUOTE_ENCODER): defined.
- (ECONV_XML_ATTR_ENCODER): removed.
-
- * enc/trans/escape.trans (rb_escape_xml_attr_content): defined.
- (rb_escape_xml_attr_quote): defined.
- (rb_escape_xml_attr): removed.
-
- * io.c (NEED_WRITECONV): writeconv is required if supplemental
- converter is used.
- (make_writeconv): apply stateful encoder in writeconv.
-
- * transcode.c: follow the constant change.
-
-Sun Sep 7 07:24:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/*.el: merged the following patches from Nathan Weizenbaum
- <nex342 at gmail.com>. [ruby-core:18424]
-
- * misc/ruby-mode.el: improve here-doc performance.
-
- * misc/ruby-mode.el: don't crash the whole mode if the Subversion
- $ keyword isn't interpolated.
-
- * misc/ruby-mode.el: don't highlight keywords when they're the
- beginning of non-keyword symbols.
-
- * misc/ruby-mode.el, misc/ruby-electric.el: use regexp-opt where
- possible for more efficient regexps.
-
- * misc/*.el: untabify, for internal consistency and consistency
- with standard Emacs elisp files.
-
- * misc/ruby-mode.el: fix a variable-name error.
-
- * misc/emacs-mode.el: don't set case-fold-search globally to nil;
- instead just set it when we need it.
-
-Sun Sep 7 06:31:51 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (file_expand_path): applied a patch from Nobuhiro Tachino
- in [ruby-dev:35948]. fix #491
-
-Sun Sep 7 03:37:05 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (f_block_optarg): allow default for block parameters as
- long as the value is primary. a patch from Eric Mahurin
- <eric.mahurin at gmail.com> in [ruby-core:16880].
-
-Sun Sep 7 01:07:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): "1.upto 2 {|i| p i }" should be syntax error.
- [ruby-dev:36008]
-
- * test/ruby/test_parse.rb (TestParse): update a test not to use
- recently fixed inconsistent syntax.
-
-Sun Sep 7 00:37:25 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (ECONV_ERROR_HANDLER_MASK): defined.
- (ECONV_DECODER_MASK): defined.
- (ECONV_ENCODER_MASK): defined.
-
- * io.c (make_writeconv): restrict ecflags for writeconv with
- ECONV_ERROR_HANDLER_MASK.
-
-Sat Sep 6 23:03:41 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (ECONV_XML_TEXT_ENCODER): renamed from
- ECONV_HTML_TEXT_ENCODER.
- (ECONV_XML_ATTR_ENCODER): renamed from ECONV_HTML_ATTR_ENCODER.
-
- * enc/trans/escape.trans: follow the renaming.
-
- * transcode.c: ditto.
-
-Sat Sep 6 21:35:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/mkconstants.rb: add some IPV6 constants. [ruby-dev:36175]
-
-Sat Sep 6 20:10:48 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_description): show ECONV_HTML_TEXT_ENCODER and
- ECONV_HTML_ATTR_ENCODER.
-
-Sat Sep 6 20:06:09 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_binmode): check actual transcoders.
-
-Sat Sep 6 19:54:25 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open): fix last_tc.
-
-Sat Sep 6 19:36:34 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_binmode): clear newline flags in writeconv_pre_ecflags.
-
-Sat Sep 6 18:47:40 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (str_transcode0): check ECONV_HTML_TEXT_ENCODER and
- ECONV_HTML_ATTR_ENCODER.
-
-Sat Sep 6 18:38:47 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (allocate_converted_string): fix overflow condition.
-
-Sat Sep 6 15:06:21 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (sym_html): new variable.
- (sym_text): ditto.
- (sym_attr): ditto.
- (econv_opts): check :html=>:text and :html=>:attr.
- (Init_transcode): initialize the above variables.
-
-Sat Sep 6 14:46:12 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (ECONV_HTML_TEXT_ENCODER): new constant.
- (ECONV_HTML_ATTR_ENCODER): ditto.
-
- * transcode.c (rb_econv_open): check ECONV_HTML_TEXT_ENCODER and
- ECONV_HTML_ATTR_ENCODER.
- (Init_transcode): Encoding::Converter::HTML_TEXT_ENCODER and
- Encoding::Converter::HTML_ATTR_ENCODER defined.
-
-Sat Sep 6 14:15:25 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (struct trans_open_t): defined to pass num_additional.
- (trans_open_i): use struct trans_open_t.
- (rb_econv_open): ditto.
-
-Sat Sep 6 13:43:20 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/escape.trans (fun_so_escape_html_attr): fix return type.
-
-Sat Sep 6 12:43:55 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open): needless branch removed.
-
-Sat Sep 6 12:38:34 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open): test condition simplified.
-
-Sat Sep 6 12:25:31 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (stateless_encoding_i): ignore supplemental conversions.
- Encoding::Converter.stateless_encoding("html-attr-escaped") should be
- nil.
-
-Sat Sep 6 12:19:36 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/escape.trans (escape_html_attr_init): new function.
- (fun_so_escape_html_attr): new function.
- (escape_html_attr_finish): new function.
- (rb_escape_html_attr): use them to quote the converted result.
-
-Sat Sep 6 07:54:36 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: uses f_real_p macro.
-
-Sat Sep 6 07:27:00 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open): fail for ASCII incompatible with
- newline conversion.
-
-Sat Sep 6 07:24:49 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_extract_modeenc): raise an error for ASCII incompatible
- encoding without binmode.
-
-Sat Sep 6 07:12:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigdivrem1): optimization by skipping zeros at the
- tail of digits. a patch from TOYOFUKU Chikanobu
- <nobu_toyofuku at nifty.com> in [ruby-dev:36169].
-
-Sat Sep 6 06:28:46 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/escape.trans: new file.
-
-Sat Sep 6 06:23:27 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (StrSet.parse): accept upper case
- hexadecimal digits.
-
-Sat Sep 6 05:37:08 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (output_hex_charref): upcase hexadecimal digits.
-
-Sat Sep 6 05:22:29 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (ECONV_UNDEF_HEX_CHARREF): defined.
-
- * transcode.c (output_hex_charref): new function.
- (rb_econv_convert): call output_hex_charref if
- ECONV_UNDEF_HEX_CHARREF.
- (Init_transcode): Encoding::Converter::UNDEF_HEX_CHARREF added.
-
-Sat Sep 6 03:52:47 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_convert): use ECONV_INVALID_MASK and
- ECONV_UNDEF_MASK.
-
-Sat Sep 6 06:05:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/ruby.h (DBL2NUM): renamed from DOUBLE2NUM.
- a patch from Tadashi Saito <shiba at mail2.accsnet.ne.jp>
- in [ruby-dev:36102].
-
-Sat Sep 6 04:44:06 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * proc.c (Init_Proc): add '===' operator to use procs in when
- clause of the case statement. inspired by <http://www.aimred.com/news/developers/2008/08/14/unlocking_the_power_of_case_equality_proc/>.
-
-Sat Sep 6 03:18:17 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (allocate_converted_string): add arguments for a buffer
- allocated by caller.
- (rb_econv_insert_output): provide caller allocated buffer to
- allocate_converted_string.
-
-Sat Sep 6 02:58:53 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (str_transcode_enc_args): local variables renamed.
- (str_transcode0): ditto.
-
-Sat Sep 6 02:23:18 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_s_stateless_encoding): new method.
-
-Sat Sep 6 02:01:59 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (enc_arg): extracted from str_transcode_enc_args.
- (str_transcode_enc_args): use enc_arg.
-
-Fri Sep 5 20:27:17 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_modestr_fmode): renamed from
- rb_io_mode_flags.
- (rb_io_modestr_oflags): renamed from rb_io_mode_modenum.
- (rb_io_oflags_fmode): renamed from rb_io_modenum_flags.
- (rb_io_mode_flags): defined as a macro.
- (rb_io_modenum_flags): ditto.
-
- * io.c: follow the renaming with consistency.
-
- * process.c (check_exec_redirect): call rb_io_modestr_oflags.
-
- * ext/pty/depend: pty.o depends on io.h.
-
-Fri Sep 5 20:12:23 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/newline.trans (universal_newline_finish): new function.
-
-Fri Sep 5 20:07:37 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_mode_modenum): moved from
- include/ruby/intern.h.
-
-Fri Sep 5 19:59:26 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (MODENUM_MAX): removed.
-
-Fri Sep 5 18:37:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (copy_stream_fallback_body): use read method unless readpartial
- is available. [ruby-dev:36124]
-
-Fri Sep 5 18:16:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_create): strips glibc style option before
- charset mapping. retries without options if they seemed causing
- error, and warns. [ruby-dev:36147]
-
-Fri Sep 5 03:09:48 2008 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (iseq_data_to_ary): make it static.
-
- * thread.c (thgroup_enclose): ditto.
-
-Fri Sep 5 02:56:37 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (thread_recycle_stack_slot, thread_recycle_stack_count):
- make it static.
-
-Fri Sep 5 02:40:38 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_critical): removed.
-
-Fri Sep 5 01:22:23 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (argf_mark): mark p->encs.ecopts.
-
-Fri Sep 5 00:45:07 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoder): rename fields:
- from_encoding -> src_encoding, to_encoding -> dst_encoding.
-
- * transcode.c: follow the renaming.
-
-Fri Sep 5 00:22:34 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c: variables renamed for consistency.
-
-Fri Sep 5 00:05:27 2008 Tanaka Akira <akr@fsij.org>
-
- * pack.c (encodes): make buff fixed length to avoid SEGV by
- ruby -e '["a"*10000000].pack("m1000000000")'
-
-Thu Sep 4 23:47:05 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_mode): set exception mode
- correctly. In spite of BigDecimal.mode(BigDecimal::EXCEPTION_ALL,
- true), BigDecimal.new("NaN") did not raise an exception previously.
-
-Thu Sep 4 23:42:42 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h (rb_file_open_str): declared.
-
- * io.c (rb_file_open_str): defined.
-
- * ext/zlib/zlib.c (gzfile_s_open): use rb_file_open_str instead of
- rb_file_open.
-
-Thu Sep 4 23:18:55 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/newline.trans: record newline types met in universal
- newline decoder.
-
-Thu Sep 4 23:05:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/prime.rb (Prime::OldCompatibility#each): added compatibility to
- Ruby 1.8.7.
- (Prime#each): added more rdocs.
- (Prime#each): remembers the last value of the given block.
-
-Thu Sep 4 21:53:58 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_init): accept an integer as 3rd argument as well.
-
-Thu Sep 4 21:46:21 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (sym_partial_input): new variable.
- (econv_primitive_convert): accept a hash as 5th argument as well.
-
-Thu Sep 4 21:04:27 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (sym_universal_newline_decoder): new variable.
- (sym_crlf_newline_encoder): ditto.
- (sym_cr_newline_encoder): ditto.
- (econv_opts): check newline converter options.
- (econv_init): make 3rd argument hash/nil only.
-
-Thu Sep 4 21:03:28 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_dump.c: rename some debug functions.
-
-Thu Sep 4 20:57:54 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_check_trap_pending): added for compatibility.
-
- * ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: remove ruby/signal.h
- dependency.
-
-Thu Sep 4 20:30:24 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (PType): defined unconditionally.
-
- * transcode.c (PType): don't define here.
-
-Thu Sep 4 20:19:36 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c: variables renamed for consistency.
-
-Thu Sep 4 19:40:50 2008 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c (gc_profile_record_get): to static function.
- (gc_profile_result): ditto.
- (gc_profile_report): ditto.
-
-Thu Sep 4 19:20:24 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_enc_t): rename flags to ecflags.
- (rb_io_t): rename writeconv_pre_flags to writeconv_pre_ecflags.
- (MakeOpenFile): follow the renaming.
-
- * io.c: follow the renaming.
-
-Thu Sep 4 19:10:27 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (ECONV_INVALID_IGNORE): removed because
- it tend to cause security problem. If the behaviour is really
- required, ECONV_INVALID_REPLACE with empty string can be used.
- For example, CVE-2006-2313, CVE-2008-1036, [ruby-core:15645],
- http://unicode.org/reports/tr36/
- (ECONV_UNDEF_IGNORE): ditto.
-
- * transcode.c (rb_econv_convert): follow the above change.
- (econv_opts): ditto.
- (Init_transcode): ditto.
-
-Thu Sep 4 13:22:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (struct rb_vm_struct): replaced signal staff with trap
- staff.
-
- * signal.c (signal_buff): per process resource now.
-
- * signal.c (trap_list): moved to VM.
-
- * signal.c (rb_get_next_signal): reverted.
-
- * signal.c (rb_trap_exit): trap_pending_list was no longer used.
-
- * thread.c (timer_thread_function): delivers buffered per-process
- signals to each VMs.
-
- * vm.c (rb_vm_mark): marks trap_list.
-
-Thu Sep 4 13:01:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (struct sysopen_struct, rb_sysopen_internal, rb_sysopen):
- constified.
-
- * io.c: expanded ARGF members macros.
-
-Thu Sep 4 10:43:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/transcode-tblgen.rb (citrus_decode_mapsrc): support older 1.8.
-
-Thu Sep 4 10:33:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (argf_next_argv, argf_set_encoding): copy struct wise.
-
-Thu Sep 4 09:46:18 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_scan_open_args): follow rb_str_transcode change.
-
-Thu Sep 4 08:59:29 2008 Tanaka Akira <akr@fsij.org>
-
- * file.c (rb_find_file): fix GC problem on Debian GNU/Linux (IA64)
- with gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21).
- There is no register/memory to contain load_path. A register (r35)
- contains &RARRAY_PTR(load_path), (char*)load_path + 32.
-
-Thu Sep 4 03:10:05 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_t): new fields: encs.ecopts and
- writeconv_pre_ecopts.
- (MakeOpenFile): initialize them.
-
- * include/ruby/encoding.h (rb_str_transcode): take ecopts argument.
- (rb_econv_flags): removed.
- (rb_econv_prepare_opts): declared.
- (rb_econv_open_opts): declared.
-
- * io.c (make_writeconv): use rb_econv_open_opts.
- (make_readconv): ditto.
- (io_fwrite): follow rb_str_transcode change.
- (rb_io_extract_modeenc): use rb_econv_prepare_opts.
- (rb_file_open_generic): initialize encs.ecopts.
- (rb_file_open_internal): ditto.
- (rb_io_reopen): ditto.
- (argf_ecopts): defined.
- (argf_next_argv): set encs.ecopts.
- (io_encoding_set): use rb_econv_prepare_opts.
- (argf_set_encoding): set argf_ecopts.
-
- * gc.c (gc_mark_children): mark encs.ecopts and writeconv_pre_ecopts
- in T_FILE.
-
- * transcode.c (transcode_loop): take ecopts argument. use
- rb_econv_open_opts.
- (rb_econv_flags): removed.
- (rb_econv_prepare_opts): defined.
- (rb_econv_open_opts): defined.
- (str_transcode0): take ecopts.
- (str_transcode): use rb_econv_prepare_opts.
- (rb_str_transcode): take ecopts.
- (econv_init): accept hash argument.
- (econv_insert_output): follow rb_str_transcode change.
-
-Thu Sep 4 01:30:26 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_set_replacemenet): declared.
-
- * transcode.c (rb_econv_t): new fields: replacement_str,
- replacement_len, replacement_enc and replacement_allocated.
- (get_replacement_character): make len as size_t.
- (rb_econv_open_by_transcoder_entries): initialize the new fields.
- (rb_econv_close): deallocate replacement_str if it allocated.
- (make_replacement): new function.
- (output_replacement_character): use make_replacement.
- (rb_econv_set_replacemenet): defined.
- (econv_get_replacement): new method.
- (econv_set_replacement): new method.
-
-Thu Sep 4 01:12:03 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (filetime_to_timeval): new function, split from
- gettimeofday().
-
- * win32/win32.c (gettimeofday): use above function.
-
- * win32/win32.c (filetime_to_unixtime): ditto. [ruby-dev:36135]
-
-Thu Sep 4 01:00:57 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * transcode.c (transcode_restartable0): avoid VC++6's bug.
-
-Thu Sep 4 00:26:27 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (make_writeconv): follow akr's previous commit.
-
-Thu Sep 4 00:09:05 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_option_t): removed. Since
- rb_econv_option_t has only one field, int flags, rb_econv_option_t is
- replaced by int.
-
- * include/ruby/io.h: follow the above change.
-
- * io.c: ditto.
-
- * transcode.c: ditto.
-
-Thu Sep 4 00:04:59 2008 Koichi Sasada <ko1@atdot.net>
-
- * win32/win32.c: fix ruby/signal.h depending codes.
-
-Thu Sep 4 00:01:45 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/etc/test_etc.rb (test_getpwuid, test_getgrgid): use
- Process.euid and egid instead of Etc.getlogin to identify current
- user which may be different from a login one (e.g., su command).
-
-Wed Sep 3 23:52:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/etc/test_etc.rb: check only typical use of
- setpwent/getpwent/endpwent and setgrent/getgrent/endgrent.
-
-Wed Sep 3 23:33:09 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_transcoding): moved from transcode_data.h.
- (TRANSCODING_READBUF): ditto.
- (TRANSCODING_WRITEBUF): ditto.
- (TRANSCODING_STATE_EMBED_MAX): ditto.
- (TRANSCODING_STATE): ditto.
-
-Wed Sep 3 23:03:37 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoding): remove stateful field.
- add state field.
- (TRANSCODING_STATE): defined.
- (rb_transcoder): add fields: state_size, state_init_func,
- state_fini_func.
- change rb_transcoding* argument to void*.
-
- * transcode.c (transcode_restartable0): use TRANSCODING_STATE for
- first arguments of transcoder functions.
- (rb_transcoding_open_by_transcoder): initialize state field.
- (rb_transcoding_close): finalize state field.
-
- * tool/transcode-tblgen.rb: provide state size/init/fini.
-
- * enc/trans/newline.trans (universal_newline_init): defined.
- (fun_so_universal_newline): take void* as a state pointer.
- (rb_universal_newline): provide state size/init/fini.
- (rb_crlf_newline): ditto.
- (rb_cr_newline): ditto.
-
- * enc/trans/iso2022.trans (iso2022jp_init): defined.
- (fun_si_iso2022jp_to_eucjp): take void* as a state pointer.
- (fun_so_iso2022jp_to_eucjp): ditto.
- (fun_so_eucjp_to_iso2022jp): ditto.
- (iso2022jp_reset_sequence_size): ditto.
- (finish_eucjp_to_iso2022jp): ditto.
- (rb_ISO_2022_JP_to_EUC_JP): provide state size/init/fini.
- (rb_EUC_JP_to_ISO_2022_JP): ditto.
-
- * enc/trans/utf_16_32.trans (fun_so_from_utf_16be): take void* as a
- state pointer.
- (fun_so_to_utf_16be): ditto.
- (fun_so_from_utf_16le): ditto.
- (fun_so_to_utf_16le): ditto.
- (fun_so_from_utf_32be): ditto.
- (fun_so_to_utf_32be): ditto.
- (fun_so_from_utf_32le): ditto.
- (fun_so_to_utf_32le): ditto.
- (rb_from_UTF_16BE): provide state size/init/fini.
- (rb_to_UTF_16BE): ditto.
- (rb_from_UTF_16LE): ditto.
- (rb_to_UTF_16LE): ditto.
- (rb_from_UTF_32BE): ditto.
- (rb_to_UTF_32BE): ditto.
- (rb_from_UTF_32LE): ditto.
- (rb_to_UTF_32LE): ditto.
-
- * enc/trans/japanese.trans (fun_so_eucjp2sjis): take void* as a state
- pointer.
- (fun_so_sjis2eucjp): ditto.
- (rb_eucjp2sjis): provide state size/init/fini.
- (rb_sjis2eucjp): provide state size/init/fini.
-
-Wed Sep 3 22:31:11 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/mathn.rb (Integer): moved into prime.rb.
- (Prime): ditto.
-
- * lib/prime.rb (Integer): moved from mathn.rb.
- (Integer.each_prime): added.
- (Integer#prime?): added.
- (Prime): moved from mathn.rb.
- Its implementation was rewritten. see [ruby-dev:35863].
- And patched by Keiju ISHITSUKA <keiju@ishitsuka.com>,
- see [ruby-dev:36128].
- (Prime.new): obsolete.
- (Prime.instance): added.
- (Prime.each): added.
- (Prime.int_from_prime_division): added.
- (Prime.prime_division): added.
- (Prime.prime?): added.
- Patch by TOYOFUKU Chikanobu
- <nobu_toyofuku at nifty.com> in [ruby-dev:36067].
- (Prime.cache): removed.
- (Prime.primes): removed.
- (Prime.primes_so_far): removed.
- (Prime#int_from_prime_division): added.
- (Prime#prime_division): added.
- (Prime#prime?): added.
- (Prime#primes): removed.
- (Prime#primes_so_far): removed.
- (Prime::PseudoPrmeGenerator): added.
- (Prime::EratosthenesGenerator): added.
- (Prime::TrialDivisionGenerator): added.
- (Prime::Generator23): added.
- (Prime::TrialDivision): added.
- Extracted from the previous implementation of Prime
- by Keiju ISHITSUKA.
- (Prime::EratosthenesSieve): added.
-
- * lib/.document (prime.rb): added
-
- * lib/README (prime.rb): added
-
- * test/test_prime.rb: added.
-
-Wed Sep 3 21:49:00 2008 David A. Black <dblack@rubypal.com>
-
- * lib/scanf.rb: fixed bug involving matching literal '['
-
- * test/scanf/test_scanf.rb: added test for scanf.rb fix
-
-Wed Sep 3 21:31:59 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (WORDINDEX_SHIFT_BITS): defined.
- (WORDINDEX2INFO): defined.
- (INFO2WORDINDEX): defined.
-
- * tool/transcode-tblgen.rb: use WORDINDEX2INFO.
-
- * transcode.c: use INFO2WORDINDEX.
-
-Wed Sep 3 21:19:51 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * golf_prelude.rb: suppress warnings when goruby -v.
-
-Wed Sep 3 21:07:30 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (BL_MIN_BYTE): defined.
- (BL_MAX_BYTE): defined.
- (BL_OFFSET): defined.
- (BL_ACTION): defined.
- (transcode_restartable0): use BL_MIN_BYTE, BL_MAX_BYTE and
- BL_ACTION.
-
-Wed Sep 3 20:58:30 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (BYTE_ADDR): defined.
- (WORD_ADDR): ditto.
- (BL_BASE): use BYTE_ADDR and WORD_ADDR.
- (BL_INFO): use WORD_ADDR.
-
-Wed Sep 3 20:47:31 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoder): new field: byte_array_length and
- word_array_length.
-
- * tool/transcode-tblgen.rb (transcode_generated_code): generate
- byte_array_length and word_array_length.
-
-Wed Sep 3 20:34:10 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (ArrayCode): new class.
- (ActionMap#gen_array_code): moved to ArrayCode.
- (ActionMap#numelt_array_code): ditto.
- (ActionMap#array_code_insert_at_last): ditto.
- (TRANSCODE_GENERATED_BYTES_CODE): use ArrayCode.
- (TRANSCODE_GENERATED_WORDS_CODE): ditto.
-
-Wed Sep 3 20:08:35 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/japanese.trans: new file.
-
-Wed Sep 3 20:04:33 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (ActionMap#gen_array_code): extracted from
- generate_lookup_node.
- (ActionMap#numelt_array_code): ditto.
- (ActionMap#array_code_insert_at_last): ditto.
-
-Wed Sep 3 20:01:01 2008 Tanaka Akira <akr@fsij.org>
-
- * parse.y (parser_encoding_name): defined.
- (parser_tokadd_mbchar): show encoding in the message of
- "invalid multibyte char" error.
-
-Wed Sep 3 19:28:04 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * vm_insnhelper.c (vm_method_missing): C99.
-
-Wed Sep 3 19:18:12 2008 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_thread.rb: fix test.
- [ruby-dev:35960]
-
-Wed Sep 3 17:48:32 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/make_transdb.rb: check $(srcdir)/enc/trans before
- enc/trans.
-
- * enc/trans/make_transdb.rb: keep names_t.
-
-Wed Sep 3 16:54:46 2008 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/signal.h: removed.
-
- * common.mk, class.c, eval.c, eval_intern.h, file.c, gc.c, hash.c,
- io.c, process.c, signal.c: vm_core.h: ditto.
- Some unused external global variables are also removed.
- (rb_prohibit_interrupt, rb_trap_immediate, rb_trap_pending,
- rb_thread_critical)
-
- * ext/openssl/ossl_ssl.c, ext/openssl/ossl_x509store.c,
- ext/readline/readline.c, ext/socket/depend,
- ext/socket/socket.c: ditto.
-
-Wed Sep 3 00:23:25 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_insnhelper.c (vm_method_missing): copy arguments to allocated
- memory from machine stack. [ruby-dev:36064]
-
-Tue Sep 2 22:20:26 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (base_element): removed.
- (BYTE_LOOKUP): removed.
- (BYTE_LOOKUP_BASE): don't cast.
- (BYTE_LOOKUP_INFO): ditto.
- (PType): unsigned int, instead of uintptr_t.
- (rb_transcoding): change type of next_field, conv_tree_start and
- word_array.
-
- * tool/transcode-tblgen.rb: generate word_array as array of unsigned
- int.
-
- * transcode.c (transcode_restartable0): follow the above type change.
-
-Tue Sep 2 21:22:22 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: add prefix for byte_array and word_array.
-
-Tue Sep 2 20:57:14 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/make_transdb.rb: check foo.c only if foo.trans exists.
-
-Tue Sep 2 19:19:55 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/make_transdb.rb: error message improved.
-
-Tue Sep 2 14:05:50 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * enc/trans/utf_16_32.trans (from_UTF_8): rename from to_UTF_16BE
- because it was not collect.
-
-Tue Sep 2 14:00:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * enc/emacs_mule.c (svn:executable): dropped executable bit.
-
- * enc/make_encdb.rb (svn:executable): ditto.
-
-Tue Sep 2 12:58:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (COMPILERFLAG): new compiler flag to compile
- enc/trans/japanese*.c.
-
-Tue Sep 2 12:37:10 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/japanese_euc.trans: splitted from japanese.trans to avoid
- compiler limitation. reported by usa.
-
- * enc/trans/japanese_sjis.trans: ditto.
-
-Tue Sep 2 12:31:24 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (miniruby): new target.
-
-Tue Sep 2 11:47:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (struct load_arg): data is now st_table.
-
- * marshal.c (mark_load_arg): marks data and compat_tbl.
-
- * marshal.c (r_object0): no need to check if reentered.
-
- * marshal.c (marshal_load): make the wrapper with mark_load_arg.
-
-Tue Sep 2 10:49:18 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (gettimeofday): easier calculation. use the definition
- of the Gregorian calendar.
-
-Tue Sep 2 10:33:12 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (distclean-golf): moved golf_prelude.c here from
- distclean-local.
- (GOLFPRELUDE): added.
- (distclean-local): moved golf_prelude.c into distclean-golf.
-
-Tue Sep 2 10:09:17 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (gettimeofday): calc tv_sec and tv_usec from system
- time by myself. [ruby-dev:36084]
-
-Tue Sep 2 04:00:37 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (o3): prevent sign extension on 64bit environment.
- (o4): ditto.
-
-Tue Sep 2 03:26:24 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: comment removed in generated code.
-
-Tue Sep 2 03:16:42 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: define TRANSCODE_TABLE_INFO in generated
- code. use it in rb_transcoder.
-
- * enc/trans/newline.trans: use TRANSCODE_TABLE_INFO.
-
- * enc/trans/iso2022.trans: ditto.
-
- * enc/trans/utf_16_32.trans: ditto.
-
-Tue Sep 2 03:04:33 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: record infos and BYTE_LOOKUPs as index of
- word_array to avoid relocation.
-
- * transcode.c (transcode_restartable0): add word_array to get infos
- and BYTE_LOOKUPs.
-
- * transcode_data.h (BYTE_LOOKUP_INFO): change return type to
- uintptr_t.
-
-Tue Sep 2 02:48:30 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: don't need to cast offsets array.
-
-Tue Sep 2 02:36:20 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: record offsets array as index of
- byte_array to avoid relocation.
-
- * transcode.c (transcode_restartable0): add byte_array to get offsets
- array.
-
- * transcode_data.h (BYTE_LOOKUP_BASE): change return type to
- uintptr_t.
- (rb_transcoder): add fields: byte_array, word_array and word_size.
-
- * enc/trans/newline.trans: follow rb_transcoder change.
-
- * enc/trans/iso2022.trans: ditto.
-
- * enc/trans/utf_16_32.trans: ditto.
-
-Tue Sep 2 02:05:14 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: make infos arrays and BYTE_LOOKUPs into
- single array.
-
-Tue Sep 2 01:47:44 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (clean-golf): added.
- (distclean-golf): added.
- (realclean-golf): added.
- (clean): added clean-golf.
- (distclean): added distclean-golf.
- (realclean): added realclean-golf.
-
-Tue Sep 2 01:31:45 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (realclean-local): added newline.c.
-
-Tue Sep 2 01:19:15 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (BYTE_LOOKUP): change to uintptr_t array.
- (BYTE_LOOKUP_BASE): follow the type change.
- (BYTE_LOOKUP_INFO): ditto.
- (PType): ditto.
- (rb_transcoding): ditto.
-
- * tool/transcode-tblgen.rb: follow the type change.
-
- * transcode.c: ditto.
-
- * enc/trans/newline.trans: ditto.
-
- * enc/trans/iso2022.trans: ditto.
-
- * enc/trans/utf_16_32.trans: ditto.
-
-Mon Sep 1 23:32:46 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (BYTE_LOOKUP_BASE): abstract accessor for
- BYTE_LOOKUP.
- (BYTE_LOOKUP_INFO): ditto.
-
- * transcode.c (transcode_restartable0): use BYTE_LOOKUP_BASE and
- BYTE_LOOKUP_INFO.
-
-Mon Sep 1 23:14:25 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: gather infos arrays and BYTE_LOOKUPs.
-
-Mon Sep 1 22:42:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * lib/mkmf.rb (distclean): added RM_RF conftest.dSYM.
- Fixes distclean-ext problem on Mac OS X.
- (RM_RF): added.
-
-Mon Sep 1 22:37:06 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/rexml/document.rb: limit entity expansion. Thanks, Luka
- Treiber, Mitja Kolsek, and Michael Koziarski.
-
- * lib/rexml/entity.rb: ditto.
-
- * test/rexml/test_document.rb: ditto.
-
-Mon Sep 1 22:20:22 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: make offsets arrays into single array.
-
-Mon Sep 1 21:46:18 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: gather offsets arrays at top.
-
-Mon Sep 1 21:09:04 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * ./: removed rubyspec from svn:ignore subversion property.
- rubyspec directory is no longer used.
-
- * spec: added mspec and rubyspec to svn:ignore.
-
-Mon Sep 1 19:37:19 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: ValidEncoding['eucJP-ms'] defined.
- "\xA2\xAF".encode("utf-8", "eucJP-ms") should raise
- Encoding::ConversionUndefined, not Encoding::InvalidByteSequence.
-
-Mon Sep 1 18:27:51 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (gettimeofday): shouldn't use mktime(3) because it's
- buggy about handling summer time.
- reported by Yoshikawa <yoshixool AT gmail.com> at [ruby-dev:36071]
-
-Mon Sep 1 17:07:23 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/euc_jp.c (euc-jp-ms): euc-jp-ms is not an alias of EUC-JP
- but eucJP-ms.
-
- * enc/trans/japanese.trans (eucJP-ms): eucJP-ms is the correct
- name of the encoding in Ruby. [ruby-dev:36070]
-
-Mon Sep 1 16:48:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/digest/md5/md5init.c (md5), ext/digest/rmd160/rmd160init.c
- (rmd160) ext/digest/sha1/sha1init.c (sha1),
- ext/digest/sha2/sha2init.c (sha256, sha384, sha512): constified.
-
-Mon Sep 1 15:15:40 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/japanese.trans: fix mapping priority.
- IBM extended is prior than NEC selected IBM.
-
-Mon Sep 1 14:44:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/transcode-tblgen.rb (transcode_compile_tree): use the first
- mapping when some mappings are given for a character.
- [ruby-dev:36068]
-
- * tool/transcode-tblgen.rb: expandtab.
-
-Mon Sep 1 14:40:18 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * README.EXT (Appendix A): fixed the name of class
- Enumerator. Enumerable::Enumerator was renamed just
- Enumerator at revision 18564.
-
- * README.EXT (Appendix A): ditto.
-
-Mon Sep 1 14:37:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * tool/transcode-tblgen.rb: set ERB source filename for error message.
-
-Mon Sep 1 14:37:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/depend: transdb.c may not present.
-
-Mon Sep 1 14:25:26 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/japanese.trans: fix Ruby 1.8 compatibility.
-
- * enc/trans/japanese.trans: fix mapping priority. [ruby-dev:36068]
-
-Mon Sep 1 14:24:14 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/ruby/test_transcode.rb (test_windows_31j): added.
-
-Mon Sep 1 14:00:04 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * README.EXT (Data-types): fixed for current status.
- (Manipulating Ruby data): mentioned some more functions.
- (Class/module definition): ditto.
- (Global variables shared between C and Ruby):
- fixed prototypes for the getter/setter's of global variables.
- (Appendix A): mentioned some more files.
-
- * README.EXT.ja: ditto.
-
-Mon Sep 1 11:31:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/fileutils.rb (copy_stream, fu_copy_stream0, copy_file): use
- IO.copy_stream to get rid of extraneous conversion.
-
-Mon Sep 1 02:55:15 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * strftime.c (rb_strftime): calc timezone offset by myself if system
- doesn't provide timezone info.
-
-Mon Sep 1 02:48:28 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: change "illegal" to "invalid".
-
-Mon Sep 1 02:31:16 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (transcode_generated_code): defined for
- generating table at once.
- (transcode_tblgen): returns an empty string.
- (transcode_generate_node): ditto.
-
- * enc/trans/newline.trans: use transcode_generated_code.
-
- * enc/trans/iso2022.trans: ditto.
-
- * enc/trans/single_byte.trans: ditto.
-
- * enc/trans/utf_16_32.trans: ditto.
-
- * enc/trans/japanese.trans: ditto.
-
- * enc/trans/korean.trans: ditto.
-
-Mon Sep 1 02:10:03 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (citrus_decode_mapsrc): print logging
- message on STDERR.
-
-Mon Sep 1 01:24:09 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/eucjp-tbl.rb: replace by previous Citrus maps.
-
- * enc/trans/sjis-tbl.rb: ditto.
-
-Mon Sep 1 01:18:26 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/transcode-tblgen.rb: add table generator from Citrus maps.
-
- * enc/trans/japanese.trans: use Citrus maps.
-
- * enc/trans/CP: add maps from Citrus.
-
- * enc/trans/JIS: ditto.
-
- * test/ruby/test_transcode.rb: Shift_JIS and EUC-JP doesn't support
- IBM extended characters.
-
-Mon Sep 1 00:19:45 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (docs): removed a useless make target.
- tool/makedoc.rb was removed at revision 13919.
-
-Sun Aug 31 20:49:42 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (numeric_abs2): new.
-
-Sun Aug 31 18:22:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (have_devel?): checks if the compiler works.
-
-Sun Aug 31 18:02:41 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * Temporarily uses git://github.com/yugui/rubyspec.git
- until specs for 1.9 is merged into
- git://github.com/rubyspec/rubyspec.git.
-
-Sun Aug 31 18:06:49 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (transcode.c): set source_encoding and
- destination_encoding as encoding object.
- (ecerr_source_encoding): new method.
- (ecerr_destination_encoding): ditto.
-
-Sun Aug 31 17:58:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (Logging.log_open): opens in binary mode to get rid of
- extra CR.
-
- * lib/mkmf.rb (try_func, try_var, have_struct_member),
- (scalar_ptr_type?, scalar_type?): use MAIN_DOES_NOTHING.
-
- * lib/mkmf.rb (MAIN_DOES_NOTHING): defaults to ordinary main.
-
- * win32/Makefile.sub (config): for MAIN_DOES_NOTHING for wince.
-
-Sun Aug 31 17:30:35 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * spec/README (How to run): added.
-
-Sun Aug 31 17:28:25 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * spec/default.mspec (config): added.
-
- * spec/default.mspec (target): replaced the built ruby
- to runruby.rb.
- Improved $LOAD_PATH on running specs.
-
- * spec/default.mspec (flags): ditto.
-
-Sun Aug 31 17:16:07 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (make_econv_exception): rename instance variable names
- for storing encoding names.
- (ecerr_source_encoding_name): method renamed.
- (ecerr_destination_encoding_name): ditto.
-
-Sun Aug 31 16:57:36 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_putback): associate encoding to the result.
-
-Sun Aug 31 16:43:56 2008 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/intern.h: rename RB_UBF_DFL to
- RUBY_UBF_IO and RUBY_UBF_PROCESS.
- Because there is no default (universal) unblocking function.
-
- * ext/socket/socket.c, file.c, io.c, process.c, thread.c: ditto.
-
-Sun Aug 31 16:42:23 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_insert_output): raise ArgumentError on failure.
-
-Sun Aug 31 16:39:17 2008 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_thread.rb: add a test.
-
-Sun Aug 31 16:34:41 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/single_byte.trans (us_ascii_map): don't define 8bit bytes.
-
-Sun Aug 31 14:27:27 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_last_error): new method.
-
-Sun Aug 31 14:17:34 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_primitive_convert): make two arguments,
- destination_byteoffset and destination_bytesize, optional.
-
-Sun Aug 31 14:12:06 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (make_econv_exception): error message simplified.
-
-Sun Aug 31 13:47:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/coverage/coverage.c (rb_mCoverage): removed unneeded static variable.
-
- * ext/socket/socket.c (unix_recv_io): ditto.
-
- * ext/socket/socket.c (mConst): ditto.
-
-Sun Aug 31 13:45:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/ossl_ocsp.c (ossl_ocspres_initialize): fix for
- initialization of r18168.
-
-Sun Aug 31 13:42:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/ripper/eventids2.c (ripper_init_eventids2): use rb_intern_const.
-
- * ext/ripper/tools/generate.rb (generate_eventids1): ditto.
-
- * ext/ripper/tools/generate.rb (generate_eventids2_table): ditto.
-
-Sun Aug 31 12:56:00 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/dl/mkcallback.rb (rb_dl_init_callbacks): fix indent.
-
-Sun Aug 31 11:39:21 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/strscan/strscan.c (strscan_do_scan): fix usecnt decrement.
-
-Sun Aug 31 04:38:47 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_putback): make max argument optional.
-
-Sun Aug 31 04:35:21 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_putback): putback from last byte.
-
-Sun Aug 31 04:27:04 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_putback): renamed from econv_primitive_putback.
-
-Sun Aug 31 04:22:51 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_insert_output): renamed from
- econv_primitive_insert_output.
-
-Sun Aug 31 04:20:46 2008 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_econv.rb: follow econv_primitive_errinfo change.
-
-Sun Aug 31 03:44:24 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_primitive_errinfo): 5th element (partial_input)
- removed from result.
-
-Sun Aug 31 01:53:31 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/dl/mkcallback.rb: split callback.h to callback-[0-9].c to reduce
- memory consumption on compilation. [ruby-dev:31898]
-
- * ext/dl/depend: add dependency for callback-[0-9].[co].
-
-Sun Aug 31 01:27:46 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/dl/mkcallback.rb (foreach_proc_entry): extracted.
- (gencallback): ditto.
- (gen_push_proc_ary): ditto.
- (gen_push_addr_ary): ditto.
-
-Sat Aug 30 23:51:01 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/rinda/test_tuplebag.rb (test_has_expires_eh): fix failures
- [ruby-dev:35937].
-
-Sat Aug 30 23:38:00 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/dl/test/test_import.rb: fix character code.
-
- * ext/dl/test/test_func.rb: ditto.
-
-Sat Aug 30 22:23:31 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c: added a static variable for nurat_to_f.
-
-Sat Aug 30 20:05:41 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_open, rb_w32_read, rb_w32_write): fallback to
- MSVCRT if text mode is specified. this case will not be used from
- ruby itself.
-
-Sat Aug 30 19:49:38 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_read): EOF is not error.
- ref [ruby-dev:36050]
-
-Sat Aug 30 18:17:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (struct token_info): constified.
-
- * parse.y (token_info_get_column, token_info_has_nonspaces),
- (token_info_push, token_info_pop): constified.
-
-Sat Aug 30 15:43:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/openssl/ossl_config.c (Init_ossl_config): memory leak fixed.
- a patch <shinichiro.hamaji at gmail.com> in [ruby-dev:35880].
-
- * ext/openssl/ossl_x509ext.c (ossl_x509ext_set_value): ditto.
-
- * ext/strscan/strscan.c (strscan_do_scan): ditto.
-
-Sat Aug 30 14:58:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/ossl_x509ext.c (ossl_x509ext_initialize): fix for
- initialization of r18168.
-
-Sat Aug 30 14:47:30 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/dl/mkcallback.rb: fix continuation line detection.
-
-Sat Aug 30 14:39:51 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/dl/mkcallback.rb (rb_dl_init_callbacks): avoid GC problem which
- is caused by 'GC.stress=true; require "dl"'.
-
-Sat Aug 30 11:54:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (token_info_push): -w warns indentation level mismatch.
- based on a patch from Yukina Yamano presented at RubyKaigi'07.
- See <http://jp.rubyist.net/RubyKaigi2007/Log0609-LT06.html> and
- <http://www.logic-junction.com/products/rubyend.html> (Japanese).
-
-Sat Aug 30 10:46:44 2008 Koichi Sasada <ko1@atdot.net>
-
- * ext/iconv/iconv.c: remove include pragma for "ruby/intern.h".
-
-Sat Aug 30 10:43:03 2008 Koichi Sasada <ko1@atdot.net>
-
- * parse.y: remove include pragma for "ruby/intern.h".
-
-Sat Aug 30 10:41:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rake.rb (Rake::Application#help): fix for OPTIONAL_ARGUMENT and
- multiple short options. [ruby-dev:36051]
-
-Sat Aug 30 08:59:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_file_s_absolute_path),
- (rb_file_absolute_path): prototyped.
-
-Sat Aug 30 08:09:36 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_compatible_p): use TYPE not BUILTIN_TYPE.
- [ruby-dev:36048]
-
-Sat Aug 30 07:48:48 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_compatible_p): add SPECIAL_CONST_P check.
- [ruby-dev:36048]
-
- * test/ruby/test_m17n.rb (test_compatible): fix test.
-
-Sat Aug 30 02:48:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_freeze): update rdoc to mention RuntimeError
- (not TypeError any longer) would be raised. [ruby-dev:35982]
-
-Sat Aug 30 01:55:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigdivmod): remove redundant code. a patch from
- TOYOFUKU Chikanobu <nobu_toyofuku at nifty.com> in [ruby-dev:36044].
-
-Sat Aug 30 01:37:20 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI#initialize): remove unused constants. a patch
- from Takeyuki Fujioka in [ruby-dev:36046].
-
-Fri Aug 29 22:29:41 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c ({nucomp,numeric}_rect): new.
-
- * complex.c: added some aliases
- (::rectangular, ::rect, #rectangular, #rect, #phase,
- #magnitude).
-
- * complex.c (string_to_c_internal): should not strip any null
- bytes.
-
- * rational.c (string_to_r_internal): ditto.
-
- * rational.c (i_gcd): reverted to nurat 0.0.2's one.
-
- * numeric.c: added an alias (#magnitude).
-
- * bignum.c: ditto.
-
- * test/ruby/test_complex.rb: added assertions.
-
- * test/ruby/test_rational.rb: ditto.
-
-Fri Aug 29 19:46:02 2008 Koichi Sasada <ko1@atdot.net>
-
- * gc.c, include/ruby/ruby.h: rename T_DEFERRED to T_ZOMBIE.
-
-Fri Aug 29 18:22:27 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_compatible_p): raise TypeError when argument is not
- String nor Regexp.
-
-Fri Aug 29 18:20:56 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_index_m): only regexp uses byte offset.
-
- * string.c (rb_str_rindex_m): ditto.
-
-Fri Aug 29 16:48:34 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (vm_call_method): copy arguments to allocated
- memory from machine stack. [ruby-dev:36028]
-
- * KNOWNBUGS.rb, bootstraptest/test_method.rb: move fixed test.
-
-Fri Aug 29 12:19:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/ossl_x509attr.c (ossl_x509attr_initialize): fix for
- initialization of r18168.
-
- * ext/openssl/ossl_ocsp.c (ossl_ocspreq_initialize): ditto.
-
- * ext/openssl/ossl_x509name.c (ossl_x509name_initialize): ditto.
-
-Fri Aug 29 11:04:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_enc_compatible): ASCII compatible string and US-ASCII
- regexp is compatible. [ruby-dev:36033]
-
- * string.c (rb_str_index_m): second argument is position of character.
- by usa. [ruby-dev:36033]
-
- * string.c (rb_str_rindex_m): ditto.
-
-Fri Aug 29 04:47:49 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_read, rb_w32_write): more accurate handling
- of wait result.
-
-Fri Aug 29 02:59:35 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_finish): new method.
-
-Fri Aug 29 02:45:29 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_convert): new method.
-
-Fri Aug 29 02:38:14 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_primitive_convert): accept nil as
- destination_bytesize for unlimited destination size.
-
-Fri Aug 29 02:11:46 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_primitive_convert): accept nil as input for empty
- input.
-
-Fri Aug 29 02:03:56 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * strftime.c (rb_strftime): supported %s and %P.
-
- * time.c (time_strftime): ditto.
-
- * test/ruby/test_time.rb (test_strftime): ditto.
-
-Fri Aug 29 01:57:58 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (sym_invalid_byte_sequence): new variable.
- (sym_undefined_conversion): ditto.
- (sym_destination_buffer_full): ditto.
- (sym_source_buffer_empty): ditto.
- (sym_finished): ditto.
- (sym_output_followed_by_input): ditto.
- (sym_incomplete_input): ditto.
- (econv_result_to_symbol): use above variables.
- (Init_transcode): initialize above variables.
-
-Fri Aug 29 00:53:40 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * strftime.c (rb_strftime): fixed a bug of padding.
-
- * test/ruby/test_time.rb: ditto.
-
-Fri Aug 29 00:19:54 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (set_pioinfo_extra): use MSVCRT's open() and close().
-
-Fri Aug 29 00:03:13 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * file.c (file_expand_path): check invalid access.
-
-Thu Aug 28 23:55:50 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * strftime.c (rb_strftime): Time.mktime(2000).strftime("%-S") should
- return "0", not "".
-
- * test/ruby/test_time.rb: ditto.
-
-Thu Aug 28 23:55:22 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_time.rb: suppress warning during test.
-
-Thu Aug 28 23:50:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_time.rb (test_strftime): make test for %a independent
- from local timezone. [ruby-dev:35992]
-
-Thu Aug 28 23:39:49 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * string.c (rb_str_shared_replace): remove corrupt noembed string
- which causes SEGV. [ruby-dev:35989]
-
-Thu Aug 28 23:36:15 2008 Tanaka Akira <akr@fsij.org>
-
- * common.mk: dependency updated.
-
-Thu Aug 28 23:28:57 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * KNOWNBUGS.rb: add a test. see [ruby-dev:36028]
-
-Thu Aug 28 21:43:05 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c, include/ruby/win32.h (rb_w32_open): overlapped file
- I/O support.
-
- * win32/win32.c, include/ruby/win32.h (rb_w32_pipe): overlapped pipe
- I/O support.
-
- * win32/win32.c (rb_w32_read, rb_w32_write): overlapped I/O support to
- enable canceling I/O.
-
- * thread_win32.c (ubf_handle): remove workaround.
-
-Thu Aug 28 20:22:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_insnhelper.c (vm_yield_setup_args): object with to_ary should
- behave like array. a patch from Yusuke Endoh <mame at tsg.ne.jp>
- in [ruby-dev:35988]. [ruby-dev:35977]
-
- * object.c (convert_type): call less rb_intern() less frequently
- by using cache structure.
-
- * vm_method.c (rb_method_node): fail earlier if no method found.
-
-Thu Aug 28 19:04:50 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bootstraptest/test_io.rb: no need to create real file.
-
-Thu Aug 28 09:26:53 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/cgi/test_cgi_multipart.rb: add test for multipart.
- Patch by Takeyuki Fujioka. [ruby-dev:36014]
- From CGIAlt http://cgialt.rubyforge.org/
-
-Thu Aug 28 09:22:01 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/cgi/test_cgi_modruby.rb: add test for mod_ruby adaptor.
- Patch by Takeyuki Fujioka. [ruby-dev:36013]
- From CGIAlt http://cgialt.rubyforge.org/
-
-Thu Aug 28 09:17:10 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/cgi/test_cgi_header.rb: add test for CGI::Header.
- Patch by Takeyuki Fujioka. [ruby-dev:36010] [ruby-dev:36011]
- From CGIAlt http://cgialt.rubyforge.org/
-
-Thu Aug 28 02:16:49 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_t): refcnt field removed.
- (MakeOpenFile): refcnt initialization removed.
-
- * io.c (rb_io_fptr_finalize): don't check refcnt.
- (rb_io_close_read): don't use refcnt.
-
-Thu Aug 28 00:07:59 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_initialize): don't accept IO object. [ruby-dev:35895]
-
-Wed Aug 27 23:28:51 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_invoke): WIN32OLE#[] and WIN32OLE#[]=
- accepts number argument.
-
- * test/win32ole/test_win32ole.rb: ditto.
-
-Wed Aug 27 14:45:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/cgi/test_cgi_core.rb: add core test.
- Patch by Takeyuki Fujioka. [ruby-dev:36001] [ruby-dev:36002]
- From CGIAlt http://cgialt.rubyforge.org/
-
-Wed Aug 27 10:34:42 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/cgi.rb (CGI::Cookie): remove delegate.
- Patch by Takeyuki Fujioka. [ruby-dev:35995]
-
- * test/cgi/test_cgi_cookie.rb: added for above.
- Patch by Takeyuki Fujioka. [ruby-dev:35996]
- From CGIAlt http://cgialt.rubyforge.org/
-
-Wed Aug 27 01:13:54 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (transcode_loop): simplified.
-
-Wed Aug 27 01:03:23 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_result_t): enumeration constant:
- econv_incomplete_input.
-
- * io.c (finish_writeconv): check econv_incomplete_input.
-
- * transcode.c (transcode_restartable0): return econv_incomplete_input
- for unexpected end of source buffer.
- (trans_sweep): check econv_incomplete_input.
- (rb_trans_conv): ditto.
- (rb_econv_convert0): ditto.
- (rb_econv_convert): ditto.
- (transcode_loop): ditto.
- (make_econv_exception): change message for econv_incomplete_input.
- (econv_result_to_symbol): return :incomplete_input for
- econv_incomplete_input.
- (ecerr_incomplete_input): new method.
-
-Wed Aug 27 00:05:55 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_t): rename crbuf to cbuf.
-
- * io.c: follow the renaming.
-
-Tue Aug 26 23:52:24 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_elem_t): move to transcode.c
- (rb_econv_t): defined as an incomplete type.
-
- * transcode.c (rb_econv_elem_t): moved from encoding.h.
- (rb_econv_t): complete type defined.
-
-Tue Aug 26 22:44:12 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * time.c (time_asctime): workaround for MSVCRT's bug.
- based on a patch from wanabe <s.wanabe AT gmail.com> at
- [ruby-dev:35831] and a suggestion by KIMURA Koichi
- <kbk AT kt.rim.or.jp> at [ruby-dev:35832]
- fixed [ruby-dev:35555]
-
-Tue Aug 26 21:53:56 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open): disable newline conversion for ASCII
- incompatible encodings.
- (str_transcode0): don't need disable newline conversion here.
-
-Tue Aug 26 21:44:39 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_binmode): binmode is effective only once.
-
-Tue Aug 26 19:43:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_file_s_expand_path): new class method for class File.
-
- * file.c (file_expand_path): add absolute_path handling (no ~user
- expansion). [ruby-core:18319]
-
-Tue Aug 26 19:27:54 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * test/ruby/test_enum.rb (TestEnumerable#test_each_with_object):
- Add a test for Enumerable#each_with_object.
-
-Tue Aug 26 19:25:44 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * test/ruby/test_enumerator.rb (TestEnumerator#test_with_object):
- Add (back) the test for Enumerator#with_object.
-
-Tue Aug 26 16:16:43 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/cgi/test_cgi_tag_helper.rb: add more tests for html3.
- Patch by Takeyuki Fujioka. [ruby-dev:35975]
- From CGIAlt http://cgialt.rubyforge.org/
-
-Tue Aug 26 14:43:10 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c: Activate Enumerator#with_object and add
- Enumerable#each_with_object. [experimental]
-
-Tue Aug 26 14:38:32 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (enumerator_initialize),
- test/ruby/test_enumerator.rb: Add an ability to generate an
- enumerator from a block. [experimental] [ruby-dev:35903]
-
-Tue Aug 26 13:25:25 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * test/ruby/test_transcode.rb: added test_euc_jp
- (contributed by Yoshihiro Kambayashi)
-
-Tue Aug 26 11:54:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/cgi/test_cgi_tag_helper.rb: added by Takeyuki Fujioka.
- [ruby-dev:35971]
-
-Tue Aug 26 11:33:30 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/cgi.rb (nOE_element_def): fix error when cascade methods which
- don't have arguments. Patch by Takeyuki Fujioka. [ruby-dev:35964]
-
- * lib/cgi.rb (blockquote): String#collect (this depends on
- String#each) is no longer exists.
- Patch by Takeyuki Fujioka. [ruby-dev:35946]
-
- * lib/cgi.rb (blockquote): ditto.
-
-Tue Aug 26 03:06:48 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (make_writeconv): copy invalid/undef flags.
-
-Tue Aug 26 02:47:08 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * common.mk (dist): tool/make-snapshot is executable.
-
- * tool/make-snapshot (package): supported release numbers 1.9.0-x.
-
-Tue Aug 26 02:43:50 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_t): new field: writeconv_pre_opts.
-
- * io.c (make_writeconv): initialize writeconv_pre_opts.
- (io_fwrite): use writeconv_pre_opts.
-
-Tue Aug 26 01:48:31 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c: test _WIN32 for CRLF platform. (cygwin defines O_BINARY.)
-
-Tue Aug 26 01:29:26 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c: force CRLF handling if RUBY_TEST_CRLF_ENVIRONMENT is defined.
- This is only for testing.
-
-Tue Aug 26 01:26:31 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (str_transcode0): disable newline conversion for ASCII
- incompatible encoding.
-
-Tue Aug 26 00:55:46 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (str_transcode0): don't short cut for newline conversion.
-
-Tue Aug 26 00:36:01 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_fwrite): add TEXTMODE_NEWLINE_ENCODER to option for
- rb_str_transcode.
-
-Tue Aug 26 00:24:23 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (make_econv_exception): show readagain part for invalid
- byte sequence exception. store the part as an instance variable.
- (ecerr_readagain_bytes): new method to access the readagain part.
-
-Tue Aug 26 00:02:49 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (VpMult): fix double free.
-
-Mon Aug 25 23:59:36 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open): make last_tc NULL if there are only
- additional transcoders.
- (econv_description): extracted from rb_econv_open_exc.
- (rb_econv_open_exc): use econv_description.
- (econv_inspect): use econv_description.
-
-Mon Aug 25 23:56:42 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32.c (init_stdhandle): set binmode.
-
-Mon Aug 25 23:38:17 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb(strftime): %[LN] can print with given
- arbitrary precision.
-
- * lib/date/format.rb(strftime): optional flags and filed width
- should also affect %[nt].
-
-Mon Aug 25 23:01:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * compile.c (defined_expr): default defined? should return
- "expression" without evaluating the expression. [ruby-dev:35967]
-
-Mon Aug 25 22:46:01 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_thread.rb (test_status_and_stop_p): reduce the risk
- of race condition.
-
-Mon Aug 25 22:39:57 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/irb/extend-command.rb (def_extend_command): check number of
- arguments. [ruby-dev:35074]
-
- * lib/irb/ext/multi-irb.rb (search): check if a corresponding job is
- found. [ruby-dev:35074]
-
-Mon Aug 25 22:29:13 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_io.rb (test_dup): fix typo. see [ruby-dev:35958]
-
-Mon Aug 25 22:02:35 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open_by_transcoder_entries): initialize
- last_error. num_trans may be zero.
- (rb_econv_convert0): num_trans may be zero.
- (rb_econv_putbackable): ditto.
- (rb_econv_putback): ditto.
- (rb_econv_convert): input_ptr and output_ptr may be NULL.
-
-Mon Aug 25 19:05:27 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * compile.c (defined_expr): should handle NODE_{AND,OR} as
- "expression". [ruby-dev:35951]
-
-Mon Aug 25 17:36:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_io_ungetbyte): added prototype.
-
- * io.c (rb_io_gets): use rb_io_getline_1 for unget buffer.
-
- * ruby.c (load_file): use rb_io_ungetbyte.
-
- * transcode.c (rb_econv_substr_append): fix for buffer overrun.
-
- * win32/enc-setup.mak (BUILTIN_TRANSOBJS): added.
-
-Mon Aug 25 14:22:21 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * parse.y (YYSTYPE): struct RVarmap has been no longer
- defined.
- see also r11717 by matz.
-
-Mon Aug 25 10:42:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (rb_econv_open_exc): constified.
-
-Mon Aug 25 07:10:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/emacs_mule.c: fix ctype.
-
-Mon Aug 25 00:52:31 2008 Tanaka Akira <akr@fsij.org>
-
- * configure.in (BUILTIN_TRANSSRCS): defined.
- (BUILTIN_TRANSOBJS): defined.
-
- * enc/Makefile.in (BUILTIN_TRANSES): defined.
-
- * enc/make_encmake.rb (BUILTIN_TRANSES): defined.
-
- * enc/depend: don't generate rules for builtin transcoders.
-
- * common.mk (COMMONOBJS): add BUILTIN_TRANSOBJS.
- (enc.mk): pass BUILTIN_TRANSOBJS.
- (newline.c): new rule.
- (newline.$(OBJEXT)): new rule.
- (srcs): newline.c added.
-
- * Makefile.in (BUILTIN_TRANSSRCS): defined.
- (BUILTIN_TRANSOBJS): defined.
-
- * transcode.c (Init_transcode): call Init_newline.
-
-Mon Aug 25 00:11:02 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (declare_transcoder): arguments order changed.
- (rb_declare_transcoder): call declare_transcoder just once.
-
-Sun Aug 24 19:48:46 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_t): use rb_econv_option_t.
-
- * transcode.c: follow the rb_econv_t change.
-
-Sun Aug 24 19:40:13 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_init_copy): copy encs.
-
-Sun Aug 24 19:17:31 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_open): add an argument: vperm.
- (open_key_args): call rb_io_open with perm.
-
-Sun Aug 24 19:11:07 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (sym_invalid): removed.
- (sym_undef): removed.
- (sym_ignore): removed.
- (sym_replace): removed.
-
-Sun Aug 24 19:07:17 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_reopen): initialize fptr->encs.opts.
-
-Sun Aug 24 18:37:42 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_s_pipe): accept optional hash.
- (rb_io_set_encoding): ditto.
- (rb_io_extract_modeenc): use rb_econv_opts to initialize
- ecopts.
- (rb_file_open_generic): ditto.
- (rb_file_open_internal): ditto.
- (io_encoding_set): new argument: opt.
- (argf_set_encoding): copy fptr->encs.opts to argf_ecopts.
-
- * transcode.c (rb_econv_opts): accept Qnil for initialization.
-
-Sun Aug 24 18:10:08 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_enc_t): add opts field.
- (FMODE_INVALID_MASK): removed.
- (FMODE_INVALID_IGNORE): ditto.
- (FMODE_INVALID_REPLACE): ditto.
- (FMODE_UNDEF_MASK): ditto.
- (FMODE_UNDEF_IGNORE): ditto.
- (FMODE_UNDEF_REPLACE): ditto.
- (MakeOpenFile): initialize the opts field.
-
- * io.c (make_writeconv): use the opts field.
- (io_fwrite): ditto.
- (make_readconv): ditto.
- (argf_ecopts): new macro.
- (rb_io_extract_modeenc): fill the opts field.
- (argf_next_argv): ditto.
- (rb_file_open_generic): initialize the opts field.
- (rb_file_open_internal): ditto.
- (io_encoding_set): ditto.
- (argf_set_encoding): ditto.
-
-Sun Aug 24 18:02:14 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (struct argf): use struct rb_io_enc_t.
- (argf_enc): follow the struct argf change.
- (argf_enc2): ditto.
-
-Sun Aug 24 17:36:21 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_str_transcode): make 3rd argument
- rb_econv_option_t*.
-
- * transcode.c (transcode_loop): take rb_econv_option_t* as a argument.
- (str_transcode0): ditto.
- (str_transcode): make rb_econv_option_t and call str_transcode0 with
- it.
- (rb_str_transcode): take rb_econv_option_t*.
-
- * io.c (io_fwrite): follow the rb_str_transcode change.
-
-Sun Aug 24 16:47:32 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_t): make enc and enc2 as struct
- rb_io_enc_t;
-
- * io.c: follow the structure change.
- (convconfig_t): defined by rb_io_enc_t.
-
-Sun Aug 24 16:19:25 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_opts): declared.
-
- * transcode.c (rb_econv_opts): defined.
-
- * io.c (rb_io_extract_modeenc): use rb_econv_opts.
-
-Sun Aug 24 16:06:30 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_option_t): defined.
- (rb_econv_open): 3rd arg changed.
- (rb_econv_open_exc): ditto.
-
- * io.c (make_writeconv): use rb_econv_option_t.
- (make_readconv): ditto.
- (rb_econv_open): take rb_econv_option_t for options.
- (rb_econv_open_exc): ditto.
- (transcode_loop): use rb_econv_option_t.
- (econv_init): use rb_econv_option_t.
-
-Sun Aug 24 15:43:41 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_substr_append): associate dst with destination
- encoding when dst is created.
-
-Sun Aug 24 15:21:28 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_str_transcode): add ecflags argument.
-
- * transcode.c (econv_opts): extracted from str_transcode.
- (str_transcode_enc_args): extracted from str_transcode.
- (str_transcode0): extracted from str_transcode.
- (str_transcode): use econv_opts, str_transcode_enc_args,
- str_transcode0.
- (rb_str_transcode): call str_transcode0.
- (econv_primitive_insert_output): give the additional argument for
- rb_str_transcode.
-
- * io.c (make_writeconv): use invalid/undef flags.
- (io_fwrite): ditto.
- (rb_scan_open_args): give the additional argument for
- rb_str_transcode.
-
-Sun Aug 24 13:27:42 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (str_transcode): check last hash only if 0 < argc.
-
-Sun Aug 24 12:22:15 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_substr_append): renamed from
- rb_econv_string.
- (rb_econv_str_convert): declared.
- (rb_econv_substr_convert): declared.
- (rb_econv_str_append): declared.
-
- * io.c (io_fwrite): use rb_econv_str_convert instead of
- rb_econv_string.
-
- * transcode.c (rb_econv_substr_append): renamed from rb_econv_string.
- (rb_econv_str_append): new function.
- (rb_econv_substr_convert): ditto.
- (rb_econv_str_convert): ditto.
-
-Sun Aug 24 12:15:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTP#urlencode): str[0] returns char in 1.9.
- Patch by Junegunn Choi [ruby-core:18368]
-
-Sun Aug 24 12:02:39 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open): return NULL on error.
-
-Sun Aug 24 11:40:38 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_open_exc): declared.
-
- * transcode.c (rb_eNoConverter): new exception.
- (rb_econv_open_exc): new function.
- (transcode_loop): use rb_econv_open_exc.
-
- * io.c (make_writeconv): use rb_econv_open_exc.
- (make_readconv): ditto.
-
-Sun Aug 24 11:26:54 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/cgi.rb (CGI::unescapeHTML): consider ISO-8859-1.
- [ruby-dev:35936]
-
-Sun Aug 24 10:55:00 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/emacs_mule.c: support Emacs/Mule internal encoding.
-
-Sun Aug 24 08:03:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * strftime.c (daylight, timezone): not provided as dllexport on cygwin,
- right now.
-
-Sun Aug 24 06:39:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/cgi.rb (CGI::unescapeHTML): more encoding sensible unescaping.
- [ruby-dev:35936]
-
-Sun Aug 24 04:23:19 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_compatible_p): raise TypeError when argument is Encoding.
-
-Sat Aug 23 23:25:47 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/cgi.rb (CGI#out): remove auto encoding conversion and set
- LANGUAGE. [ruby-dev:35922]
-
-Sat Aug 23 20:01:29 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_process.rb (TestProcess#test_rlimit_value):
- add Errno::EINVAL. [ruby-dev:35900]
-
-Sat Aug 23 18:29:29 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_scan_open_args): use pop_last_hash.
-
-Sat Aug 23 16:59:42 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (FMODE_INVALID_MASK): defined.
- (FMODE_INVALID_IGNORE): defined.
- (FMODE_INVALID_REPLACE): defined.
- (FMODE_UNDEF_MASK): defined.
- (FMODE_UNDEF_IGNORE): defined.
- (FMODE_UNDEF_REPLACE): defined.
-
- * io.c (sym_invalid): defined.
- (sym_undef): defined.
- (sym_ignore): defined.
- (sym_replace): defined.
- (make_readconv): specify ECONV_INVALID_* and ECONV_UNDEF_* if
- FMODE_INVALID_* and FMODE_UNDEF_* is set.
- (rb_io_extract_modeenc): check {:invalid, :undef} => {:replace,
- :ignore} for FMODE_INVALID_* and FMODE_UNDEF_*.
-
-Sat Aug 23 17:06:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * strftime.c (rb_strftime): support more flags.
-
-Sat Aug 23 15:14:10 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_opts.h: enable "OPT_TRACE_INSTRUCTION" on default.
-
-Sat Aug 23 14:59:32 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (ECONV_INVALID_MASK): defined.
- (ECONV_INVALID_IGNORE): defined.
- (ECONV_INVALID_REPLACE): defined.
- (ECONV_UNDEF_MASK): defined.
- (ECONV_UNDEF_IGNORE): defined.
- (ECONV_UNDEF_REPLACE): defined.
-
- * transcode.c (INVALID_IGNORE): removed.
- (INVALID_REPLACE): removed.
- (UNDEF_IGNORE): removed.
- (UNDEF_REPLACE): removed.
- (rb_econv_convert0): renamed from rb_econv_convert.
- (rb_econv_convert): defined to call rb_econv_convert0 with
- replace/ignore behavior moved from transcode_loop.
- (transcode_loop): replace/ignore behavior removed.
-
-Sat Aug 23 11:23:05 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_extract_modeenc): check :textmode and :binmode in option
- hash.
-
-Sat Aug 23 10:48:56 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/pty/pty.c (pty_getpty): follow rb_io_t's path -> pathv change.
-
-Sat Aug 23 10:42:52 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (check_pipe_command): extracted from rb_f_open and rb_io_open.
- (rb_f_open): use check_pipe_command.
- (rb_io_open): ditto.
-
-Sat Aug 23 10:13:00 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (read_all): fptr->enc2 is 0 if no conversion.
- (rb_io_getline_fast): ditto.
- (io_getc): ditto.
-
-Sat Aug 23 09:45:35 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_t): remove path field and add pathv field.
- (MakeOpenFile): initialize pathv as Qnil.
-
- * gc.c: mark pathv field in T_FILE.
-
- * io.c: follow the rb_io_t field change.
-
- * file.c: ditto.
-
- * ext/socket/socket.c: ditto.
-
-Sat Aug 23 01:42:22 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (FMODE_TEXTMODE): defined.
-
- * include/ruby/encoding.h (rb_econv_t): new field: flags.
- (rb_econv_binmode): declared.
-
- * io.c (io_unread): text mode hack removed.
- (NEED_NEWLINE_DECODER): defined.
- (NEED_NEWLINE_ENCODER): defined.
- (NEED_READCONV): defined.
- (NEED_WRITECONV): defined.
- (TEXTMODE_NEWLINE_ENCODER): defined for windows.
- (make_writeconv): setup converter with TEXTMODE_NEWLINE_ENCODER for
- text mode.
- (io_fwrite): use NEED_WRITECONV. character code conversion is
- disabled if fptr->writeconv_stateless is nil.
- (make_readconv): setup converter with
- ECONV_UNIVERSAL_NEWLINE_DECODER for text mode.
- (read_all): use NEED_READCONV.
- (appendline): use NEED_READCONV.
- (rb_io_getline_1): use NEED_READCONV.
- (io_getc): use NEED_READCONV.
- (rb_io_ungetc): use NEED_READCONV.
- (rb_io_binmode): OS-level text mode test removed. call
- rb_econv_binmode.
- (rb_io_binmode_m): call rb_io_binmode_m with write_io as well.
- (rb_io_flags_mode): return mode string including "t".
- (rb_io_mode_flags): detect "t" for text mode.
- (rb_sysopen): always specify O_BINARY.
-
- * transcode.c (rb_econv_open_by_transcoder_entries): initialize flags.
- (rb_econv_open): if source and destination encoding is
- both empty string, open newline converter. last_tc will be NULL in
- this case.
- (rb_econv_encoding_to_insert_output): last_tc may be NULL now.
- (rb_econv_string): ditto.
- (output_replacement_character): ditto.
- (transcode_loop): ditto.
- (econv_init): ditto.
- (econv_inspect): ditto.
- (rb_econv_binmode): new function.
-
-Fri Aug 22 21:18:40 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_div): now behaves as quo.
-
- * complex.c (nucomp_s_generic_p): has been removed.
-
- * complex.c (nucomp_to_s): adopts new form.
-
- * complex.c (nucomp_inspect): ditto.
-
- * complex.c (string_to_c_internal): ditto and supports polar form.
-
- * complex.c (rb_complex_polar): new.
-
- * rational.c (nurat_to_s): do not canonicalize.
-
- * rational.c (nurat_inspect): adopts new form.
-
- * rational.c (string_to_r_internal): ditto.
-
- * include/ruby/intern.h: added a declaration.
-
- * lib/complex.rb: added an obsolete class method.
-
- * lib/cmath.rb: use scalar? instead of generic?.
-
-Fri Aug 22 20:06:46 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * lib/webrick/server.rb (WEBrick::GenericServer#shutdown):
- rescue Errno::ENOTCONN and close. [ruby-dev:35896]
-
- * test/openssl/test_ssl.rb (OpenSSL#start_server): ditto.
- [ruby-dev:35897]
-
- * lib/net/imap.rb (Net::IMAP#disconnect): ditto. [ruby-dev:35898]
-
-Fri Aug 22 19:58:27 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: no need to require the "lib/rational.rb" any more.
-
-Fri Aug 22 15:47:38 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/cgi.rb: use bytesize instead of size/length.
-
-Fri Aug 22 14:28:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * strftime.c (rb_strftime): supported flags and precision for most
- conversions. [ruby-dev:35906]
-
-Fri Aug 22 14:04:04 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * test/ruby/test_transcode.rb: test_shift_jis:
- fixed comment strings (see r18291)
-
-Fri Aug 22 12:41:47 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_pid): use PIDT2NUM.
-
-Fri Aug 22 11:36:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * dir.c (dir_enc_str_new): set US-ASCII to the path
- when the path is 7bit string and encoding is ASCII compatible.
-
- * dir.c (push_glob): set file system encoding when argument encoding
- is US-ASCII.
-
-Fri Aug 22 11:30:38 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * dir.c (dir_enc_str_new): renamed from dir_enc_str.
-
- * dir.c (dir_read): use dir_enc_str_new.
-
- * dir.c (dir_each): ditto.
-
- * dir.c (push_pattern): ditto.
-
-Fri Aug 22 11:29:10 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk: remove config.h dependency.
-
-Fri Aug 22 10:52:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (gmtime_r): check if reentrant versions are available.
-
- * time.c (IF_HAVE_GMTIME_R, ASCTIME, GMTIME, LOCALTIME): use reentrant
- versions if available.
-
-Fri Aug 22 05:29:17 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (INT2NUM): just use a simple macro on LP64.
- (UINT2NUM): ditto.
-
-Fri Aug 22 05:10:07 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_file_open_generic): take filename as a VALUE.
- (rb_file_open_internal): ditto.
- (rb_io_open): ditto.
- (rb_file_open): pass filename as a VALUE to rb_file_open_internal.
- (rb_open_file): pass filename as a VALUE to rb_file_open_generic.
- (open_key_args): pass filename as a VALUE to rb_io_open.
-
-Fri Aug 22 04:33:56 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h: fix previous change for LP64.
-
-Fri Aug 22 03:19:41 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (NUM2LONG): make it inline function to evaluate
- the argument only once.
- `t = Object.new; def t.*(x) p x; 0 end; p Time.at(0, t)' did print x
- twice.
- (NUM2INT): ditto.
- (NUM2LL): ditto.
- (INT2NUM): make it inline function.
- (LONG2NUM): ditto.
- (UINT2NUM): ditto.
- (ULONG2NUM): ditto.
-
-Fri Aug 22 03:03:22 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_s_sysopen): mode can be a Bignum.
-
-Fri Aug 22 02:57:03 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_extract_modeenc): notify coerced to caller.
- (rb_io_initialize): mode may be a Bignum.
-
-Fri Aug 22 02:42:35 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_extract_modeenc): use rb_check_to_integer to test
- integer.
-
-Fri Aug 22 02:25:04 2008 Tanaka Akira <akr@fsij.org>
-
- * iseq.c (iseq_inspect): don't raise on uninitialized object.
- show real class name.
-
-Fri Aug 22 02:08:58 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_initialize): accept hash argument.
-
-Thu Aug 21 23:51:51 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * strftime.c (rb_strftime): supported %F and %<precision>N.
- reverted config.h to ruby.h for Windows.
-
- * test/ruby/test_time.rb (TestTime::test_strftime): added tests
- for %F and %N.
-
- * time.c: documented %F and %N.
-
-Thu Aug 21 20:23:26 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_m17n_comb.rb (TestM17NComb#test_str_crypt): add
- key and salt to error message.
-
-Thu Aug 21 19:20:25 2008 Tanaka Akira <akr@fsij.org>
-
- * file.c (rb_stat_inspect): don't raise if self is not initialized.
-
-Thu Aug 21 19:17:02 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (pst_pid): use rb_attr_get to avoid warning on
- Process::Status.allocate.pid.
- (pst_inspect): don't raise if self is not initialized.
-
-Thu Aug 21 19:05:40 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_extract_encoding_option): if internal encoding is not
- specified, enc is external encoding.
-
-Thu Aug 21 14:22:50 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * strftime.c: include ruby/config.h instead of ruby/ruby.h.
-
- * common.mk: removed the old rule for missing/strftime.c.
-
-Thu Aug 21 09:29:01 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * strftime.c (rb_strftime): return "UTC" instead of "GMT".
-
- * test/ruby/test_time.rb (test_strftime): ditto.
-
-Thu Aug 21 07:59:04 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/iconv/test_option.rb (test_ignore_option): skip if iconv
- doesn't have transliterate.
-
- * test/iconv/test_option.rb (test_translit_option): ditto.
-
-Thu Aug 21 06:12:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/scanf.rb (Scanf::FormatSpecifier#initialize): %i should accept
- single digit decimal. [ruby-core:18355]
-
-Thu Aug 21 06:02:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * range.c (range_initialize_copy): Range is now a Struct.
- [ruby-core:18353]
-
- * struct.c (rb_struct_init_copy): made public.
-
-Thu Aug 21 03:09:34 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_extract_encoding_option): enc2 is external encoding if
- external encoding and internal encoding is given.
- (pipe_open): add flags and convconfig argument to initialize
- fptr->{mode,enc,enc2}.
- (pipe_open_v): pass flags and convconfig from caller to pipe_open.
- (pipe_open_s): ditto.
- (pop_last_hash): new function.
- (rb_io_s_popen): use last hash as option to specify code conversion.
- (rb_io_open): specify flags and convconfig arguments for
- pipe_open_s.
- (rb_f_backquote): ditto.
-
-Thu Aug 21 02:27:03 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (prep_io): local variable renamed.
- (rb_io_fdopen): ditto.
- (prep_stdio): ditto.
-
-Thu Aug 21 01:58:59 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * configure.in: always check timezone().
-
- * strftime.c (rb_strftime): prefer timezone/altzone rather than
- gettimeofday(). The second argument to gettimeofday() is ignored
- on Solaris.
-
-Thu Aug 21 02:03:08 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (open_key_args): simplified.
-
-Thu Aug 21 01:57:03 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (open_key_args): IO.foreach(path, rs, limit) didn't work.
-
-Thu Aug 21 01:31:34 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_file_sysopen_internal): unused function removed.
- (rb_file_sysopen): ditto.
-
-Thu Aug 21 01:09:26 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c: use mode_t for the 3rd argument, permission, of open(2).
-
-Thu Aug 21 00:51:42 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * configure.in: removed strftime from AC_REPLACE_FUNCS().
-
- * include/ruby/missing.h: removed prototype for strftime().
-
- * missing/strftime.c: removed.
-
- * time.c (time_to_s): use rb_strftime() instead of strftime(3).
- (time_zone): ditto.
-
-Thu Aug 21 00:49:50 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * strftime.c: win32 support.
-
-Thu Aug 21 00:20:05 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * strftime.c: new file.
-
- * common.mk (COMMONOBJS): added strftime.$(OBJEXT).
-
- * time.c (time_strftime): do not use strftime(3). supported
- %L(millisecond) and %N(nanosecond).
-
- * test/ruby/test_time.rb: added tests for %L and %N.
-
-Wed Aug 20 23:53:42 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_set_encoding): removed.
- (rb_io_open): set up encoding using new argument opt.
- (open_key_args): call rb_io_open with opt. don't call
- io_set_encoding.
-
-Wed Aug 20 22:30:33 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_file_open_internal): use rb_io_flags_modenum.
- (rb_io_reopen): use rb_io_flags_modenum and rb_io_modenum_mode.
- (rb_io_stdio_file): ditto.
-
-Wed Aug 20 22:28:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (proc_new): use the given class.
-
- * vm.c (vm_make_proc): added an argument for the class.
-
-Wed Aug 20 22:24:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (enum_take): get rid of extraneous iteration.
-
-Wed Aug 20 20:32:49 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_open_with_args): use rb_open_file instead of rb_io_open.
-
-Wed Aug 20 20:16:17 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_scan_open_args): extracted from rb_open_file.
-
-Wed Aug 20 19:22:32 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (convconfig_t): new type.
- (rb_io_extract_modeenc): new function.
- (rb_file_open_generic): new function.
- (rb_file_open_internal): use rb_file_open_generic.
- (rb_file_sysopen_internal): use rb_file_open_generic.
- (rb_open_file): use rb_io_extract_modeenc and rb_file_open_generic.
- (rb_io_open): call rb_file_open_internal instead of rb_file_open.
-
-Wed Aug 20 19:15:35 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (Init_IO): new constants: File::DSYNC, File::RSYNC and
- File::NOFOLLOW.
-
-Wed Aug 20 18:41:11 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_open_file): don't lookup :mode and :perm in opt. it is
- useless because vmode and perm is overwritten by rb_scan_args
- anyway.
-
-Wed Aug 20 18:37:20 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (open_key_args): meaningless MEMCPY removed.
-
-Wed Aug 20 18:30:58 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (prep_io) [cygwin]: use FMODE_BINMODE instead of O_BINARY.
-
-Wed Aug 20 16:39:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_sample): performance improvement for huge array.
-
-Wed Aug 20 12:28:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_sample): get rid of infinite loop. #455
-
-Wed Aug 20 06:09:31 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (FMODE_TRUNC): value changed because 0x100 is used
- as FMODE_NOREVLOOKUP in socket.c
-
-Wed Aug 20 05:19:40 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (parse_mode_enc): extracted from mode_enc.
- (io_extract_encoding_option): extracted from io_set_encoding.
-
-Wed Aug 20 04:17:26 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_flags_modenum): make it static.
-
-Wed Aug 20 03:36:45 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (FMODE_TRUNC): new constant.
-
- * io.c (rb_io_mode_flags): set FMODE_TRUNC for "w".
- (rb_io_modenum_flags): set FMODE_TRUNC for O_TRUNC.
- (rb_io_flags_modenum): new function.
- (rb_io_mode_modenum): just use rb_io_mode_flags and
- rb_io_flags_modenum.
-
-Wed Aug 20 02:36:21 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (fopen): macro for vms removed. fopen is not used now.
-
-Wed Aug 20 02:27:42 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open): fix memory leak.
- (rb_econv_close): ditto.
- fixed by shinichiro.h. [ruby-dev:35880]
-
-Tue Aug 19 21:50:43 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_fopen): declaration removed.
-
- * io.c (rb_fopen): unused function removed.
-
-Tue Aug 19 21:14:22 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (FMODE_READWRITE): define as
- FMODE_READABLE|FMODE_WRITABLE.
-
-Tue Aug 19 21:13:08 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_flags_mode): use hexadecimal in error message.
- (rb_io_modenum_mode): ditto.
- (rb_io_initialize): ditto.
-
-Tue Aug 19 18:23:40 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_flags_mode): add a prefix 0 to octal in error message.
- (rb_io_modenum_mode): ditto.
-
-Tue Aug 19 18:05:45 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (FMODE_*): sorted and describe the values in
- hexadecimal.
-
-Tue Aug 19 17:32:30 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/openssl/ossl_x509name.c (ossl_x509name_initialize): store the
- result of d2i_X509_NAME into DATA_PTR(self).
-
-Tue Aug 19 04:54:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rake.rb (FileUtils#ruby): takes care of space containing path.
- [ ruby-Bugs-21591 ]
-
-Tue Aug 19 01:32:37 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_open_file): encoding in mode string was ignored if perm is
- specified.
-
-Tue Aug 19 01:02:19 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_open_file): don't access argv[-1] by
- File.allocate.instance_eval { initialize }.
-
-Tue Aug 19 00:56:01 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_inspect): don't raise for uninitialized Regexp.
-
-Tue Aug 19 00:34:24 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_check_readable): side effect for STDIN removed.
- (rb_io_external_encoding): ditto.
-
-Mon Aug 18 23:27:07 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_ungetbyte): renamed from io_ungetc.
- (rb_io_ungetbyte): new method.
- (rb_io_ungetc): push back into character buffer if enc2 is set.
-
-Mon Aug 18 22:41:46 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (id_encode): removed.
-
-Mon Aug 18 22:30:07 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (make_writeconv): if enc and enc2 is set, convert
- string.encoding to enc2.
-
- * include/ruby/io.h: comment changed.
-
-Mon Aug 18 21:02:08 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_t): new fields: writeconv,
- writeconv_stateless and writeconv_initialized.
- (MakeOpenFile): initialize them.
-
- * include/ruby/encoding.h (rb_econv_stateless_encoding): declared.
- (rb_econv_string): declared.
-
- * io.c (make_writeconv): new function.
- (io_fwrite): use econv.
- (make_readconv): fix error message.
- (finish_writeconv): new function.
- (fptr_finalize): call finish_writeconv.
- (clear_writeconv): new function.
- (clear_codeconv): new function to call both clear_readconv and
- clear_writeconv.
- (rb_io_fptr_finalize): call clear_codeconv instead of
- clear_readconv.
- (mode_enc): ditto.
- (io_set_encoding): ditto.
- (argf_next_argv): ditto.
- (io_encoding_set): ditto.
-
- * gc.c (gc_mark_children): mark writeconv_stateless in T_FILE.
-
- * transcode.c (stateless_encoding_i): new function.
- (rb_econv_stateless_encoding): ditto.
- (rb_econv_string): ditto.
-
-Mon Aug 18 17:23:38 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (clear_readconv): extracted from rb_io_fptr_finalize.
- (mode_enc): call clear_readconv.
- (io_set_encoding): ditto.
- (argf_next_argv): ditto.
- (io_encoding_set): ditto.
-
-Mon Aug 18 16:54:06 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (mode_enc): modify enc and enc2 consistently.
- (io_set_encoding): ditto.
- (io_encoding_set): ditto.
-
-Mon Aug 18 13:21:38 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (transcode_search_path): prevent infinite loop by
- searching a path for self conversion.
-
-Mon Aug 18 12:45:24 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_enc_str): code conversion removed.
- (io_enc_str_converted): removed because it is identical to
- io_enc_str now.
-
-Mon Aug 18 12:12:29 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_shift_crbuf): add strp argument to append into existing
- string.
- (read_all): use econv if enc2 is set.
- (io_getc): follow the io_shift_crbuf change.
-
-Mon Aug 18 10:35:25 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_enc_str_converted): new function.
- (make_readconv): extracted from io_getc.
- (more_char): ditto.
- (appendline): use econv via make_readconv and more_char for code
- conversion.
- (prepare_getline_args): don't convert record separator.
- (rb_io_getline_1): don't use rb_io_getline_fast if enc2 is set.
- (io_getc): use make_readconv and more_char.
-
-Mon Aug 18 08:27:44 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * common.mk: fix error in uncommon.mk.
-
-Mon Aug 18 06:10:08 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk: config.h depends config.status.
-
-Mon Aug 18 03:59:43 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (appendline): appendline cannot check character boundary.
- (rb_io_getline_1): relax limit until character boundary.
-
-Mon Aug 18 02:25:11 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb (WEBrick::CGI::Socket#eof?): added lacked method.
-
-Sun Aug 17 21:50:22 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (prepare_getline_args): io.gets(10,nil) should cause TypeError.
-
-Sun Aug 17 15:58:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb: not check config.h.
-
- * lib/mkmf.rb (init_mkmf): add include/ruby/backward to $INCFLAGS.
-
- * include/ruby/backward/{st,util}.h: added for backward compatibility.
- [ruby-dev:35811]
-
-Sun Aug 17 13:40:04 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_primitive_putback): new method.
-
-Sun Aug 17 13:23:53 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_putbackable): declared.
- (rb_econv_putback): ditto.
-
- * transcode.c (rb_econv_putbackable): implemented.
- (rb_econv_putback): ditto.
-
- * io.c (io_getc): put back bytes if possible.
-
-Sun Aug 17 12:00:18 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (make_econv_exception): add several instance variables
- to exception object.
- (ecerr_source_encoding): new method:
- Encoding::ConversionUndefined#source_encoding and
- Encoding::InvalidByteSequence#source_encoding.
- (ecerr_destination_encoding): new method:
- Encoding::ConversionUndefined#destination_encoding and
- Encoding::InvalidByteSequence#destination_encoding.
- (econverr_error_char): new method:
- Encoding::ConversionUndefined#error_char.
- (econverr_error_bytes): new method:
- Encoding::ConversionUndefined#error_bytes.
-
-Sun Aug 17 11:43:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (struct MT): packed Mersenne Twister staffs.
-
- * random.c (struct RandSeed): packed random seed staffs.
-
-Sun Aug 17 08:38:26 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/iconv/test_option.rb (test_ignore_option): skip if iconv
- doesn't have transliterate.
-
- * test/iconv/test_option.rb (test_translit_option): ditto.
-
-Sun Aug 17 01:29:46 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_t): new fields: readconv, crbuf, crbuf_off,
- crbuf_len, crbuf_capa.
- (MakeOpenFile): initialize them.
-
- * io.c (io_shift_crbuf): new function.
- (io_getc): use econv.
- (rb_io_fptr_finalize): finalize readconv and crbuf.
-
-Sun Aug 17 00:02:07 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_check_error): declared.
-
- * transcode.c (make_econv_exception): new function.
- (transcode_loop): use make_econv_exception.
- (rb_econv_check_error): defined.
-
-Sat Aug 16 15:23:16 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_elem_t): fields removed: from and
- to.
- (rb_econv_t): new fields: source_encoding_name and
- destination_encoding_name.
-
- * transcode.c (rb_econv_open_by_transcoder_entries): initialize the
- new fields.
- (rb_econv_open): set up the new fields.
- (econv_inspect): use the new fields.
-
-Sat Aug 16 14:22:04 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_t): add fields: in_buf_start,
- in_data_start, in_data_end, in_buf_end and last_trans_index.
- (rb_econv_output): removed.
- (rb_econv_insert_output): declared.
- (rb_econv_encoding_to_insert_output): declared.
-
- * enc/trans/newline.trans (rb_universal_newline): stateful_type
- changed.
-
- * transcode.c (transcode_restartable0): initialize inchar_start,
- tc->recognized_len and next_table at beginning of the loop.
- (rb_econv_open_by_transcoder_entries): initialize new fields.
- (rb_econv_open): setup last_trans_index.
- (trans_sweep): last out_buf_start can be non-NULL now.
- (rb_econv_convert): check last out_buf_start and in_buf_start at
- first.
- (rb_econv_output_with_destination_encoding): removed.
- (econv_just_convert): removed.
- (rb_econv_output): removed.
- (econv_primitive_output): method removed.
- (rb_econv_encoding_to_insert_output): new function.
- (allocate_converted_string): new function.
- (rb_econv_insert_output): new function.
- (econv_primitive_insert_output): new method.
- (output_replacement_character): use rb_econv_insert_output. unused
- arguments removed.
-
-Sat Aug 16 09:20:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (rb_intern_const): tiny optimization.
-
- * include/ruby/ruby.h (SSIZET2NUM, NUM2SSIZET, SSIZE_MAX, SSIZE_MIN):
- macros for ssize_t.
-
-Sat Aug 16 08:11:04 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoder_stateful_type_t): defined.
- (rb_transcoder): add field: stateful_type.
-
- * tool/transcode-tblgen.rb: generate stateful_type field as
- stateless_converter.
-
- * enc/trans/iso2022.trans: follow rb_transcoder change.
-
- * enc/trans/newline.trans: ditto.
-
- * enc/trans/utf_16_32.trans: ditto.
-
-Fri Aug 15 23:07:48 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_just_convert): extracted from rb_econv_output.
- (rb_econv_output): use econv_just_convert.
- (econv_primitive_output): new method.
-
-Fri Aug 15 19:57:01 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_output): add str_encoding
- argument.
-
- * transcode.c (get_replacement_character): add repl_enc_ptr argument.
- (rb_econv_output_with_destination_encoding): renamed from
- rb_econv_output and make it static.
- (rb_econv_output): convert str and call
- rb_econv_output_with_destination_encoding.
- (output_replacement_character): follow above interface change.
-
-Fri Aug 15 19:33:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_drop_bytes): use memmove.
-
-Fri Aug 15 18:33:22 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_t): add error_tc in last_error.
-
- * transcode.c (rb_econv_convert): fill error_tc.
-
-Fri Aug 15 18:10:49 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_t): new field: last_error.
-
- * transcode.c (rb_trans_conv): new argument: result_position_ptr.
- (rb_econv_convert): fill last_error.
- (econv_result_to_symbol): extracted from econv_primitive_convert.
- (econv_primitive_errinfo): new method.
-
-Fri Aug 15 17:39:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (parse.{c,h}): creates in the dependency order.
-
-Fri Aug 15 16:59:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (exec_event_hooks): skips RubyVM::FrozenCore.
-
- * vm.c (Init_VM): get rid of SEGV in a trace proc.
-
-Fri Aug 15 09:33:48 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (conv_init): check empty name.
-
-Fri Aug 15 09:03:54 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_init): don't create dummy encoding if
- rb_econv_open is failed.
- (make_dummy_encoding): new function extracted from make_encoding.
- (make_encoding): removed.
-
-Fri Aug 15 01:07:16 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk ({$(srcdir)}.y.c): escape backslash.
-
-Fri Aug 15 01:05:39 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_primitive_convert): set destination_buffer
- encoding.
-
-Fri Aug 15 00:52:40 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_output): declared.
-
- * transcode_data.h (rb_transcoder): add resetsize_func field.
-
- * enc/trans/iso2022.trans (iso2022jp_reset_sequence_size): defined.
- (rb_EUC_JP_to_ISO_2022_JP): provide resetsize_func.
-
- * tool/transcode-tblgen.rb: set NULL for resetsize_func.
-
- * transcode.c (rb_econv_output): new function for inserting output.
- (output_replacement_character): use rb_econv_output.
- (transcode_loop): check return value of
- output_replacement_character.
-
-Thu Aug 14 23:47:21 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (ECONV_UNIVERSAL_NEWLINE_DECODER): defined.
- (ECONV_CRLF_NEWLINE_ENCODER): ditto.
- (ECONV_CR_NEWLINE_ENCODER): ditto.
- (ECONV_PARTIAL_INPUT): ditto.
- (ECONV_OUTPUT_FOLLOWED_BY_INPUT): ditto.
-
- * transcode.c: use ECONV_* defined as above.
-
-Thu Aug 14 23:35:21 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c: local variable renamed.
-
-Thu Aug 14 23:22:24 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_econv_result_t): moved from
- transcode_data.h.
- (rb_econv_elem_t): ditto.
- (rb_econv_t): ditto. source_encoding and destination_encoding field
- is added.
- (rb_econv_open): declared.
- (rb_econv_convert): ditto.
- (rb_econv_close): ditto.
-
- * transcode.c (rb_econv_open_by_transcoder_entries): initialize
- source_encoding and destination_encoding field as NULL.
- (rb_econv_open): make it external linkage.
- (rb_econv_close): ditto.
- (rb_econv_convert): ditto. renamed from rb_econv_conv.
- (make_encoding): new function.
- (econv_init): use make_encoding and store rb_encoding* in
- rb_econv_t.
- (econv_source_encoding): new method
- Encoding::Converter#source_encoding.
- (econv_destination_encoding): new method
- Encoding::Converter#destination_encoding.
-
-Thu Aug 14 22:44:32 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_econv_result_t): change enumeration
- constant's prefix: transcode_ to econv_.
-
- * transcode.c: follow the constant prefix change.
-
-Thu Aug 14 21:34:41 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_init): accept Encoding object as source_encoding
- and destination_encoding.
-
-Thu Aug 14 21:10:00 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_filesystem_encoding): use default external encoding
- for Unix.
-
- * dir.c (dir_initialize): don't cache fs_encoding.
-
-Thu Aug 14 20:58:57 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_open_by_transcoder_entries): renamed from
- rb_trans_open_by_transcoder_entries.
-
-Thu Aug 14 20:56:28 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_max_output): removed.
-
-Thu Aug 14 20:52:55 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: check unexpected actions.
-
-Thu Aug 14 20:25:52 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (transcode_invalid_byte_sequence): renamed from
- transcode_invalid_input.
- (transcode_destination_buffer_full): renamed from transcode_obuf_full.
- (transcode_source_buffer_empty): renamed from transcode_ibuf_empty.
- (rb_econv_result_t): renamed from rb_trans_result_t.
- (rb_econv_elem_t): renamed from rb_trans_elem_t.
- (rb_econv_t): renamed from rb_trans_t.
-
- * transcode.c (UNIVERSAL_NEWLINE_DECODER): renamed from
- UNIVERSAL_NEWLINE.
- (CRLF_NEWLINE_ENCODER): renamed from CRLF_NEWLINE.
- (CR_NEWLINE_ENCODER): renamed from CR_NEWLINE.
- (rb_econv_open): renamed from rb_trans_open.
- (rb_econv_close): renamed from rb_trans_close.
-
-Thu Aug 14 19:41:42 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (load_transcoder): unused function removed.
- (rb_transcoding_open): ditto.
-
-Thu Aug 14 17:57:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/encoding.h (rb_enc_ispunct): added.
-
- * common.mk (COMMONOBJS), inits.c (rb_call_inits): id.c is now
- included from parse.c.
-
- * id.c (Init_id), id.h (ruby_method_ids): added IDs used by VM.
-
- * parse.y (global_symbols): added rooms for VM IDs.
-
- * parse.y (rb_intern3, rb_id2str): single punctuation symbol is now
- same as char code.
-
-Thu Aug 14 17:46:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (union tmpyystype): no longer needed, since YYSTYPE is
- defined in parse.h now.
-
-Thu Aug 14 17:27:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * version.c (Init_version): add RUBY_ENGINE constant.
-
-Thu Aug 14 15:34:10 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_econv_conv): new function. it doesn't consume
- input too much, even for multilevel conversion.
- (transcode_loop): use rb_econv_conv.
- (econv_primitive_convert): ditto.
-
-Thu Aug 14 15:27:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/defines.h (RUBY_ALIAS_FUNCTION): fallback definition.
-
-Thu Aug 14 15:08:17 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_trans_result_t): new enumeration constant:
- transcode_output_followed_by_input.
-
- * transcode.c (OUTPUT_FOLLOWED_BY_INPUT): new flag.
- (transcode_restartable0): suspend when output followed by input if
- OUTPUT_FOLLOWED_BY_INPUT is specified.
- (trans_sweep): check OUTPUT_FOLLOWED_BY_INPUT.
- (rb_trans_conv): support OUTPUT_FOLLOWED_BY_INPUT.
- (econv_primitive_convert): return :output_followed_by_input for
- transcode_output_followed_by_input.
-
-Thu Aug 14 14:57:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (getrusage_time): should return the value.
-
- * thread.c (rb_thread_priority_set): get rid of C99 feature.
-
- * transcode.c (transcode_search_path): ditto.
-
- * vm.c (REWIND_CFP): get rid of statement expressions.
-
-Thu Aug 14 14:13:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (Init_VM): hide FrozenCore.
-
-Thu Aug 14 12:20:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (load_transcoder): suppress warning.
-
- * missing/vsnprintf.c (BSD_vfprintf): ditto.
-
-Thu Aug 14 12:01:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (gnumake): check for GNU make.
-
- * Makefile.in (uncommon.mk): includes filtered common.mk.
-
- * common.mk (parse.h): workaround for nmake.
-
-Thu Aug 14 06:09:12 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_execute_interrupts): switch event
- should be occur only once.
-
-Thu Aug 14 05:36:36 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk: parse.h depends on parse.c.
-
- * common.mk: hash.o depends on $(ID_H_INCLUDES).
-
-Thu Aug 14 02:45:16 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_file_exhaustive.rb (TestFileExhaustive#setup):
- set group of tmpdir. [ruby-dev:35633]
-
-Thu Aug 14 15:50:30 2008 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
-
- * hash.c (set_default): fix rdoc. #441
-
-Thu Aug 14 02:23:31 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_primitive_convert): add output_byteoffset
- argument.
-
-Thu Aug 14 00:43:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_cv_gcc_function_alias): checks alias attribute.
-
- * string.c (alias_func): replaced with RUBY_ALIAS_FUNCTION.
-
-Wed Aug 13 23:42:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (parse.h): fake rule.
-
-Wed Aug 13 23:15:58 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/ruby/test_thread.rb (test_list): call Thread.pass to run t1.
- fixed [ruby-core:18264].
-
-Wed Aug 13 23:05:51 2008 TAKAO Kouji <kouji@takao7.net>
-
- * string.c (alias_func): changed to 'weak, alias' from 'alias' for
- Mac OSX. (closes #429)
-
-Wed Aug 13 19:40:12 2008 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: count only freed object as freelist size.
-
-Wed Aug 13 18:34:22 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * marshal.c (marshal_load): set arg.untrust properly.
-
-Wed Aug 13 17:47:09 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_inspect): new method.
-
-Wed Aug 13 17:35:58 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (transcode_restartable0): several local variables
- removed.
-
-Wed Aug 13 17:35:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_set_default_proc): add new method. a patch from
- Giuseppe Bilotta. #419
-
-Wed Aug 13 17:31:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_insnhelper.c (caller_setup_args): should ensure if the value
- from to_proc is a real Proc.
-
-Wed Aug 13 17:28:29 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * common.mk: regint.h no longer includes vm_core.h.
-
-Wed Aug 13 17:26:44 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoding): add fields: writebuf_off,
- writebuf_len and writebuf.
- (TRANSCODING_WRITEBUF): new macro.
-
- * transcode.c (transcode_restartable0): output until output buffer is
- really full.
- (rb_transcoding_open_by_transcoder): initialize writebuf_len,
- writebuf_off and writebuf.
- (rb_transcoding_close): finalize writebuf.
-
-Wed Aug 13 17:18:37 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_check_ints): added. please note that
- this function may cause ruby's thread switching.
-
- * include/ruby/intern.h: ditto.
-
- * regint.h: use rb_thread_check_ints() instead of
- RUBY_CHECK_INTS() directly.
-
-Wed Aug 13 17:01:36 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * golf_prelude.rb, lib/set.rb (TC_Set#test_each),
- test/readline/test_readline_history.rb (Readline#test_each__enumerator),
- test/ruby/test_array.rb (TestArray#test_collect),
- test/ruby/test_enumerator.rb (TestEnumerator#test_initialize):
- Enumerable::Enumerator is now called Enumerator.
-
- * lib/rinda/tuplespace.rb (Rinda::TupleBag#initialize): Use
- enum_for instead of hardcoding Enumerable::Enumerator.
-
-Wed Aug 13 16:40:57 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread.c, vm_core.h: add manual priority support
- using time slice. if you enable USE_NATIVE_THREAD_PRIORITY
- macro, this mechanism is ignored. [ruby-dev:33124]
-
- * thread_pthread.c, thread_win32.c: ditto.
-
- * test/ruby/test_thread.rb: fix test parameter.
-
-Wed Aug 13 16:02:14 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * object.c (rb_obj_untrusted): new method Object#untrusted?.
- (rb_obj_untrust): new method Object#untrust.
- (rb_obj_trust): new method Object#trust.
-
- * array.c, debug.c, time.c, include/ruby/ruby.h, re.c, variable.c,
- string.c, io.c, dir.c, vm_method.c, struct.c, class.c, hash.c,
- ruby.c, marshal.c: fixes for Object#untrusted?.
-
- * test/ruby/test_module.rb, test/ruby/test_array.rb,
- test/ruby/test_object.rb, test/ruby/test_string.rb,
- test/ruby/test_marshal.rb, test/ruby/test_hash.rb: added tests for
- Object#untrusted?.
-
-Wed Aug 13 16:13:58 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/ruby/test_m17n.rb: follow EncodingCompatibilityError.
-
- * test/ruby/test_mixed_unicode_escapes.rb: ditto.
-
- * test/ruby/enc/test_utf16.rb: ditto.
-
-Wed Aug 13 16:05:50 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_cmp): retry with right hand operand if its not a
- time object. [ruby-dev:35011]
-
-Wed Aug 13 15:51:22 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * string.c: Apply a temporary fix to fix build on OS X. A real
- fix will follow later.
-
-Wed Aug 13 15:25:09 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (Init_Enumerator): Rename Enumerable::Enumerator to
- just Enumerator.
-
-Wed Aug 13 15:13:57 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * common.mk (prelude.c, golf_prelude.c): Using $(COMPILE_PRELUDE)
- requires $(RBCONFIG).
-
-Wed Aug 13 15:08:04 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_init): make flags argument optional.
- (econv_primitive_convert): ditto.
-
-Wed Aug 13 14:55:27 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * common.mk (realclean-local): Remove parse.h as well.
-
- * common.mk: Add missing dependencies regarding vm_core.h, id.h,
- parse.c (parse.h), etc..
-
-Wed Aug 13 14:45:37 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/newline.trans (rb_crlf_newline): new transcoder.
- (rb_cr_newline): new transcoder.
-
- * transcode.c (trans_open_i): one more extra room for input newline
- converter.
- (rb_trans_open): crlf newline and cr newline implemented.
- (Init_transcode): Encoding::Converter::CRLF_NEWLINE and
- Encoding::Converter::CR_NEWLINE defined.
-
-Wed Aug 13 14:22:16 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/newline.trans: new file.
-
- * transcode_data.h (rb_trans_t): add last_tc field.
-
- * transcode.c (UNIVERSAL_NEWLINE): defined.
- (CRLF_NEWLINE): defined.
- (CR_NEWLINE): defined.
- (rb_trans_open_by_transcoder_entries): initialize last_tc.
- (trans_open_i): allocate one more room for output newline converter.
- (rb_trans_open): universal newline implemented.
- (more_output_buffer): take max_output argument instead ts.
- (output_replacement_character): take tc argument instead of ts.
- (transcode_loop): use last_tc field.
- (econv_init): add flags argument for rb_trans_open.
- (Init_transcode): Encoding::Converter::UNIVERSAL_NEWLINE defined.
-
-Wed Aug 13 14:00:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (parse.c): generates parse.h together.
-
- * id.c, id.h: use constants for parser tokens.
-
-Wed Aug 13 13:47:05 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c: rewind cfp to show proper backtrace.
- [ruby-dev:35820]
-
-Wed Aug 13 13:09:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot: fix for clean up.
-
-Wed Aug 13 11:45:51 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * vm_core.h: Declare rb_iseq_clone, which is used in class.c.
-
-Wed Aug 13 11:39:19 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (transcode_search_path): return the length of converter
- path.
- (load_transcoder_entry): renamed from load_transcoder.
- (load_transcoder): new function for loading transcoder by encoding
- names.
- (rb_transcoding_open_by_transcoder): extracted from
- rb_transcoding_open.
- (rb_transcoding_open): use load_transcoder and
- rb_transcoding_open_by_transcoder.
- (rb_trans_open_by_transcoder_entries): new function.
- (trans_open_i): construct entries array.
- (rb_trans_open): use rb_trans_open_by_transcoder_entries.
-
-Wed Aug 13 10:45:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot: try to find exported directory.
-
-Wed Aug 13 10:16:35 2008 TAKAO Kouji <kouji@takao7.net>
-
- * doc/NEWS: Mention the Readline.vi_editing_mode?,
- Readline.emacs_editing_mode?, Readline::HISTORY[] and
- Readline::HISTORY.clear change.
-
-Wed Aug 13 08:03:02 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (econv_primitive_convert): add output_size argument.
-
-Wed Aug 13 07:41:03 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_trans_conv): report last transcode_obuf_full.
- (econv_max_output): new method Encoding::Converter#max_output.
-
-Wed Aug 13 02:46:01 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * error.c (rb_eEncCompatError): add Exception.
-
- * include/ruby/ruby.h: ditto.
-
- * encoding.c (rb_enc_check): use rb_eEncCompatError.
-
- * string.c (rb_enc_cr_str_buf_cat): ditto.
-
- * string.c (rb_str_sub_bang): ditto.
-
- * string.c (rb_str_hex): ditto.
-
- * string.c (rb_str_oct): ditto.
-
-Wed Aug 13 02:36:47 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (str_transcode): fix error message.
-
-Tue Aug 12 23:42:31 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_cEncodingConverter): new class Encoding::Converter.
- (econv_free): new function.
- (econv_s_allocate): ditto.
- (econv_init): ditto.
- (check_econv): ditto.
- (econv_primitive_convert): new method.
- (Init_transcode): define Encoding::Converter.
-
-Tue Aug 12 23:16:09 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_splice_0): call rb_str_drop_bytes, not rb_str_drop.
-
-Tue Aug 12 19:11:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot: fix for enc.mk.
-
-Tue Aug 12 19:08:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_drop_bytes): new function to drop first bytes.
-
-Tue Aug 12 18:58:48 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c, vm_insnhelper.c (vm_define_method): move
- function place.
-
-Tue Aug 12 18:56:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c: more descriptive aliases of rb_str_new[2-5].
- [ruby-dev:35615]
-
-Tue Aug 12 18:51:29 2008 TAKAO Kouji <kouji@takao7.net>
-
- * gc.c (getrusage_time): Returned effective value on Windows.
-
-Tue Aug 12 18:51:11 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_trans_open): free ts before raise.
-
-Tue Aug 12 18:46:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimalCmp): should not ignore
- <=> comparison. [ruby-dev:35732]
-
-Tue Aug 12 18:43:10 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/make_transdb.rb: *.erb.c is not used anymore.
-
-Tue Aug 12 18:32:33 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_trans_elem_t): new field: from and to.
-
- * transcode.c (trans_open_i): just record from and to.
- (rb_trans_open): load transcodings.
-
-Tue Aug 12 18:32:03 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/syslog/syslog.c (mSyslog_open): Use of Check_SafeStr() is
- deprecated.
- (mSyslogConstants_LOG_MASK, mSyslogConstants_LOG_UPTO): Use
- NUM2INT() instead of FIX2INT() when the type of an given object
- is not determined.
-
-Tue Aug 12 18:14:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * tool/transcode-tblgen.rb (#transcode_tblgen): slight message
- improvement.
-
-Tue Aug 12 17:16:58 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (trans_open_i): check the result of rb_transcoding_open.
-
-Tue Aug 12 16:23:32 2008 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c (gc_profile_result): use rb_str_catf.
-
-Tue Aug 12 16:13:45 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (TRANSCODE_ERROR): removed.
-
- * tool/transcode-tblgen.rb: 8bit byte of ASCII-8BIT is a valid
- (but unique to ASCII-8BIT) character.
-
- * transcode.c (rb_eConversionUndefined): new error.
- (rb_eInvalidByteSequence): ditto.
-
-Tue Aug 12 16:08:51 2008 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb: POP3Command should export @socket since POP
- calls #socket.
-
-Tue Aug 12 16:06:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c, util.c (quorem, nrv_alloc, dtoa): enabled floating point
- support.
-
-Tue Aug 12 15:52:45 2008 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c (gc_profile_result): use sprintf.
-
-Tue Aug 12 15:37:40 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_intern): should check symbol table overflow.
-
-Tue Aug 12 15:31:04 2008 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (send_request_with_body): Content-Length should
- be byte length of string. (closes #203)
-
-Tue Aug 12 15:17:06 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * enc/depend: (transvpath_prefix): prefix has no extension, so replace
- %s with "".
-
-Tue Aug 12 15:03:43 2008 TAKAO Kouji <kouji@takao7.net>
-
- * test/readline/test_readline.rb (TestReadline#test_safe_level_4):
- tested Readline.vi_editing_mode? and Readline.emacs_editing_mode?.
-
-Tue Aug 12 14:25:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/Makefile.in (.SUFFIXES): renamed to .trans.
-
- * enc/make_encmake.rb: added --encs and --no-encs options.
-
- * enc/depend (TRANSVPATH): fix for nmake.
-
-Tue Aug 12 14:19:53 2008 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/https.rb: suppress syntax warning.
-
-Tue Aug 12 14:15:51 2008 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (Net::HTTP#initialize): initialize net/https
- variables to suppress syntax warning.
-
-Tue Aug 12 14:15:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/cptr.c (rb_dlptr_s_to_ptr): fixed shadowing variable.
-
-Tue Aug 12 10:25:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_delete): Array#delete to return deleted element.
-
-Tue Aug 12 10:18:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/win32ole/test_err_in_callback.rb: do not require 'mkmf'
- unless WIN32OLE is defined.
-
-Tue Aug 12 07:41:13 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoder): add resetstate_func field for
- resetting a state of stateful encoding.
-
- * enc/trans/iso2022.trans (rb_EUC_JP_to_ISO_2022_JP): specify
- finish_eucjp_to_iso2022jp for resetstate_func.
-
- * tool/transcode-tblgen.rb: specify NULL for resetstate_func.
-
- * transcode.c (output_replacement_character): call resetstate_func
- before appending the replacement character.
-
-Tue Aug 12 07:19:24 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (get_replacement_character): extracted from
- output_replacement_character.
-
-Tue Aug 12 07:00:02 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoder): typedef at first.
-
-Tue Aug 12 06:48:35 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (rb_trans_conv): find second last error.
-
-Tue Aug 12 00:43:44 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_trans_result_t): new type.
- (rb_trans_elem_t): new type.
- (rb_trans_t): new type.
-
- * transcode.c (transcode_dispatch_cb): removed.
- (transcode_dispatch): removed.
- (rb_transcoding_result_t): moved to rb_trans_result_t in
- transcode_data.h.
- (transcode_restartable0): goto follow_info when FUNsi.
- (rb_transcoding_open): use get_transcoder_entry.
- (rb_trans_open): new function.
- (rb_trans_conv): ditto.
- (rb_trans_close): ditto.
- (trans_open_i): ditto.
- (trans_sweep): ditto.
- (more_output_buffer): take rb_trans_t instead of rb_transcoding as
- an argument.
- (transcode_loop): take from_encoding and to_encoding instead of tr
- as arguments. use rb_trans_open/rb_trans_conv/rb_trans_close.
- (str_transcode): don't use transcode_dispatch.
-
-Mon Aug 11 20:37:05 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * iseq.c (rb_iseq_clone): should preserve cref_stack link.
-
-Mon Aug 11 20:27:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/dl/cfunc.c (rb_dlcfunc_call): add taint check.
-
- * ext/dl/dl.c (rb_dl_malloc): add rb_secure(2).
-
- * ext/dl/dl.c (rb_dl_realloc): ditto.
-
- * ext/dl/dl.c (rb_dl_free): ditto.
-
- * ext/dl/dl.c (rb_dl_ptr2value): ditto.
-
-Mon Aug 11 20:11:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (getrusage_time): works only if RUSAGE_SELF is defined right
- now.
-
- * gc.c (gc_profile_result): C99.
-
-Mon Aug 11 18:57:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_sample): rename #choice to #sample. in
- addition, sample takes optional argument, a la #first.
-
-Mon Aug 11 18:28:02 2008 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c: added GC::Profiler.
-
-Mon Aug 11 17:26:16 2008 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/README.ja: added API document for
- Readline.vi_editing_mode? and Readline.emacs_editing_mode?.
-
- * ext/readline/extconf.rb: checked rl_editing_mode variable in
- Readline library.
-
- * ext/readline/readline.c (readline_s_emacs_editing_mode_p): added
- Readline.emacs_editing_mode? method.
- (readline_s_vi_editing_mode_p): added Readline.vi_editing_mode?
- method.
- (Init_readline): ditto.
-
-Mon Aug 11 16:56:40 2008 TAKAO Kouji <kouji@takao7.net>
-
- * test/readline/test_readline.rb: added test for Readline's class
- methods.
-
-Mon Aug 11 16:39:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (clone_method): should copy cbase in cref as well.
- [ruby-dev:35116]
-
- * iseq.c (iseq_mark): mark original iseq object.
-
- * iseq.c (iseq_free): do not free internal data if they have
- original iseq to belong.
-
- * iseq.c (rb_iseq_clone): a new function to clone iseq value.
-
-Mon Aug 11 16:34:48 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/iso2022.trans: renamed from iso2022.erb.c.
-
- * enc/trans/single_byte.trans: ditto.
-
- * enc/trans/utf_16_32.trans: ditto.
-
- * enc/trans/korean.trans: ditto.
-
- * enc/trans/japanese.trans: ditto.
-
- * enc/depend: follow the renaming.
-
- * tool/build-transcode: ditto.
-
-Mon Aug 11 15:09:23 2008 Tanaka Akira <akr@fsij.org>
-
- * configure.in (rb_cv_broken_glibc_ia64_erfc): renamed from
- rb_broken_glibc_ia64_erfc.
- [ruby-core:18228]
-
-Mon Aug 11 10:04:34 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoding): rename fields.
- readlen -> recognized_len.
- feedlen -> readagain_len.
-
- * transcode.c: follow the field renaming.
-
-Sun Aug 10 22:34:55 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (transcode_restartable0): invalid handling simplified.
- (transcode_restartable): use PARTIAL_INPUT for converting buffered
- input.
-
-Sun Aug 10 22:24:24 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * encoding.c: include util.h. [ruby-dev:35715]
-
- * common.mk: ditto.
-
-Sun Aug 10 20:59:54 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoding): new field: flags.
-
- * transcode.c (load_transcoder): extracted from transcode_dispatch_cb.
- (rb_transcoding_result_t): renamed from transcode_result_t.
- (rb_transcoding_open): new function.
- (rb_transcoding_convert): ditto.
- (rb_transcoding_close): ditto.
- (transcode_loop): use rb_transcoding_open, rb_transcoding_convert
- and rb_transcoding_close.
- (str_transcode): don't need rb_transcoding.
-
-Sun Aug 10 18:09:16 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: record checksum of
- transcode-tblgen.rb itself.
-
-Sun Aug 10 12:34:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * config.guess ({powerpc-apple,i586-pc}-haiku): re-applied r18403.
- [ruby-core:18110]
-
- * config.{guess,sub}: updated to automake-1.10.1.
-
-Sun Aug 10 11:45:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/Makefile.in (make-workdir): use MAKEDIRS.
-
- * enc/depend: makes target directory before compile/link.
-
- * tool/transcode-tblgen.rb: creates target directory.
-
-Sun Aug 10 11:30:48 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c: rename my_transcoding to tc and my_transcoder to tr.
-
-Sun Aug 10 11:15:55 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoding): add feedlen field.
-
- * transcode.c (transcode_restartable0): renamed from
- transcode_restartable.
- save input buffer into feed buffer if next character is started the
- point before input buffer. for example, "\x00\xd8\x01" then "\x02"
- in UTF-16LE. \x02 causes invalid and next character is started from
- \x01.
- (transcode_restartable): new function to call
- transcode_restartable0. if feed buffer is not empty, convert it at
- first.
-
-Sun Aug 10 11:02:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (extconf): use MAKEDIRS.
-
-Sun Aug 10 09:35:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/irb.rb (IRB::Irb#inspect): instance_variables returns symbols
- instead of strings now. [ruby-dev:34930]
-
-Sun Aug 10 09:22:14 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (transcode_char_start): refactored to remove readlen
- argument.
- (transcode_restartable): refactored to remove readlen variable.
-
-Sun Aug 10 08:56:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (STACK_LEVEL_MAX, ruby_stack_length): returns size_t.
- [ruby-core:18207]
-
- * configure.in (rb_cv_missing__dtos18, rb_cv_missing_fconvert),
- ext/digest/md5/md5.c, ext/openssl/ossl.c (main),
- ext/socket/extconf.rb (ipv6, wide-getaddrinfo): main should be int.
-
- * main.c (main), win32/winmain.c, wince/wincemain.c (WinMain): envp is
- no longer used so long time. based on a patch from Peter Bowen at
- [ruby-core:18208]
-
-Sat Aug 9 22:05:29 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (transcode_loop): take destination and resize function
- as parameters.
- (more_output_buffer): ditto.
- (str_transcoding_resize): argument changed from rb_transcoding* to
- VALUE.
- (str_transcode): call transcode_loop with destination string and its
- resize function.
-
- * transcode_data.h (rb_transcoding): move ruby_string_dest and
- flush_func to transcode_loop parameters.
-
-Sat Aug 9 21:29:45 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk: encs depend on transdb.h
-
-Sat Aug 9 21:10:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_cv_rshift_sign, rb_cv_binary_elf): get rid of
- AC_TRY_RUN.
-
-Sat Aug 9 16:33:21 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoding): new fields: next_info and next_byte.
-
- * transcode.c (transcode_restartable): save/restore next_info and
- next_byte.
- sync readlen and in_p when invalid.
-
-Sat Aug 9 15:10:15 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode.c (transcode_restartable): my_transcoder argument removed.
- (transcode_loop): my_transcoder argument removed.
-
-Sat Aug 9 14:39:34 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoding): add fields for restartable
- transcoding.
- (rb_transcoder): add max_input field.
- from_unit_length field is renamed to input_unit_length.
-
- * tool/transcode-tblgen.rb: generate max_input field.
-
- * enc/trans/iso2022.erb.c: follow rb_transcoder change.
-
- * enc/trans/utf_16_32.erb.c: ditto.
-
- * transcode.c (PARTIAL_INPUT): new constant.
- (transcode_char_start): new function.
- (transcode_result_t): new type.
- (transcode_restartable): new function.
- (more_output_buffer): new function.
- (transcode_loop): use transcode_restartable.
-
-Sat Aug 9 13:35:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * stable/ext/socket/socket.c (NI_MAXHOST, NI_MAXSERV): fixed invalid
- preprocessor directives. a patch from Peter Bowen at
- [ruby-core:18211].
-
-Sat Aug 9 06:37:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/make_encdb.rb, enc/trans/make_transdb.rb: skip nonexistent
- directory. [ruby-dev:35802]
-
-Sat Aug 9 01:07:51 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/trans/utf_16_32.erb.c (fun_so_from_utf_32le): implemented.
- (fun_so_to_utf_32le): implemented.
- [ruby-dev:35777]
-
-Sat Aug 9 00:42:33 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoder): from_unit_length field added.
- from_utf8 field removed.
-
- * tool/transcode-tblgen.rb: generate offsets range.
- follow rb_transcoder change.
-
- * transcode.c (transcode_loop): don't use from_utf8.
- make invalid region from_unit_length wise.
-
- * enc/trans/iso2022.erb.c: follow rb_transcoder and
- transcode_generate_node change.
-
- * enc/trans/utf_16_32.erb.c: follow rb_transcoder and
- transcode_generate_node change.
- explicit :invalid map removed.
-
-Fri Aug 8 23:29:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/depend (TRANSCSRCS): needs rule_subst to apply.
-
- * io.c (shutdown): not define if defined already.
-
-Fri Aug 8 22:47:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (opt_eq_func): large function to make inline.
-
- * bcc32/Makefile.sub (config.h): cannot compile a big inline function.
-
-Fri Aug 8 21:09:10 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk (enk.mk): give not RUBY but MINIRUBY.
-
-Fri Aug 8 17:03:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (shutdown, sched_yield, pthread_attr_setinheritsched):
- check for Haiku.
-
- * eval_intern.h, io.c, thread_pthread.c: use autoconfisticated results.
-
-Fri Aug 8 16:52:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (enc.mk): mkmf.rb requires rbconfig.rb.
-
- * common.mk (srcs-enc): renamed from transcodes.
-
- * enc/Makefile.in (make-workdir): creates object directories.
-
- * common.mk (encdb.h): see both $(srcdir)/enc and enc.
-
- * enc/make_encdb.rb: ditto.
-
- * enc/trans/make_transdb.rb: fix for the case no transdirs are given.
-
- * enc/trans/make_transdb.rb: converts only one transcoders for each
- basename.
-
-Fri Aug 8 10:53:52 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb: randomize source port and transaction id.
- CVE-2008-1447.
-
- * lib/resolv-replace.rb (UDPSocket#bind): don't resolv host if host is
- "".
-
-Fri Aug 8 04:20:14 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk: see both $(srcdir)/enc/trans and enc/trans.
-
- * enc/trans/make_transdb.rb: ditto.
-
-Fri Aug 8 00:05:02 2008 TAKAO Kouji <kouji@takao7.net>
-
- * ext/.document: added readline/readline.c.
-
- * ext/readline/readline.c: changed Copyright. added RDoc.
-
- * ext/readline/README.ja: fixed typo.
-
- * ext/readline/README: contents was moved RDoc.
-
-Thu Aug 7 23:43:11 2008 Tanaka Akira <akr@fsij.org>
-
- * transcode_data.h (rb_transcoding): new field "stateful".
- (rb_transcoder): preprocessor and postprocessor field removed.
- change arguments of func_ii, func_si, func_io and func_so.
- new field "finish_func".
-
- * tool/transcode-tblgen.rb: make FUNii, FUNsi and FUNio
- generatable.
-
- * transcode.c (transcoder_lib_table): removed.
- (transcoder_table): change structure.
- (transcoder_key): removed because the above structure change.
- (make_transcoder_entry): new function.
- (get_transcoder_entry): ditto.
- (rb_register_transcoder): follow the structure change.
- (declare_transcoder): ditto.
- (transcode_search_path): new function for breadth first search to
- find a list of converters.
- (transcode_search_path_i): new function.
- (transcode_dispatch_cb): ditto.
- (transcode_dispatch): use transcode_search_path.
- (transcode_loop): follow the argument change.
- (str_transcode): preprocessor and postprocessor stuff removed.
-
- * enc/trans/iso2022.erb.c: new file. ISO-2022-JP conversion
- re-implemented.
-
- * enc/trans/japanese.erb.c: ISO-2022-JP stuff removed.
-
- * enc/trans/utf_16_32.erb.c: follow argument change of FUNso.
-
- [ruby-dev:35798]
-
-Thu Aug 7 22:55:44 2008 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/README.ja: updated API document for Readline module.
-
-Thu Aug 7 20:52:08 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (login): raise FTPReplyError if passwd or acct
- is not supplied. fixed [ruby-core:18058].
-
-Thu Aug 7 18:01:44 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * misc/ruby-mode.el (ruby-imenu-create-index-in-block): Fix the
- regexp to only pick definition lines properly. `module_function'
- is not a definition of a module named `_function'.
-
-Thu Aug 7 17:47:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/depend: add transdb.c.
-
-Thu Aug 7 16:28:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, common.mk, {bcc,win}32/Makefile.sub (clean-ext): do not
- use miniruby.
-
-Thu Aug 7 14:17:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/depend: removed needless explicit commands.
-
- * lib/mkmf.rb, {bcc32,win32}/Makefile.sub (CLEANLIBS, CLEANOBJS):
- moved clean targets to platform makefiles.
-
-Thu Aug 7 13:12:30 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/getaddrinfo.c (gai_strerror): ignore only on Haiku.
- a patch from <zn at mbf.nifty.com>, [ruby-dev:35796].
-
-Thu Aug 7 06:31:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/ruby/process.rb (test_popen_fork): skip a test which is
- freeze in FreeBSD.
-
-Thu Aug 7 06:05:48 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * config.guess: add powerpc-apple-haiku, i586-pc-haiku.
- see [ruby-core:18110]
-
-Thu Aug 7 05:51:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * eval_intern.h: Add support to Haiku. see [ruby-core:18110]
-
- * include/ruby/defines.h: ditto.
-
- * configure.in: ditto.
-
- * thread_pthread.c: ditto.
-
- * io.c: ditto.
-
- * lib/mkmf.rb: ditto.
-
- * ext/socket/getaddrinfo.c: ditto.
-
- * ext/socket/extconf.rb: ditto.
-
- * ext/socket/socket.c: ditto.
-
- * ext/socket/addrinfo.h: ditto.
-
- * ext/socket/getnameinfo.c: ditto.
-
-Thu Aug 7 05:43:32 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk: mkdir enc/trans before build tables.
-
-Thu Aug 7 05:18:30 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/depend: enc/*.c is source but enc/trans/*.c is generated.
-
-Thu Aug 7 05:14:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * regenc.c (code_to_mbc): raise RangeError Integer#chr
- when more than 255 is given with single byte encoding.
- [ruby-dev:35789]
-
-Thu Aug 7 05:06:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (run_final): runs finalizers with the object terminated.
-
- * gc.c (rb_gc_call_finalizer_at_exit): keeps finalized objects from
- linking to freelist.
-
-Thu Aug 7 04:43:14 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/depend: for build in other than srcdir.
-
-Wed Aug 6 22:40:48 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (transcode_generate_node): code
- argument removed.
-
-Wed Aug 6 21:25:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (chain_finalized_object): deletes finalizers to be invoked from
- finalizer_table.
-
- * gc.c (rb_gc_call_finalizer_at_exit): warns when could not invoke
- finalizers.
-
-Wed Aug 6 20:56:43 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/depend: transcode table generation depends on
- tool/transcode-tblgen.rb.
-
-Wed Aug 6 20:48:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_gc_call_finalizer_at_exit): self-referencing finalizers
- cannot be invoked. [ruby-dev:35681]
-
-Wed Aug 6 20:44:41 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: distinguish UNDEF and INVALID.
- [ruby-dev:35709]
-
- * transcode.c (transcode_loop): don't need rb_enc_mbclen now.
-
-Wed Aug 6 14:40:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (transdb.h): requires transcoders.
-
- * enc/depend (srcs): target for transcoders.
-
-Wed Aug 6 14:04:08 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * enc/depend: replace not only $(<:...) but also $<.
-
-Wed Aug 6 13:54:30 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.status): export BASERUBY.
-
- * enc/depend: avoid GNU make'ism.
-
-Wed Aug 6 07:59:02 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb (ActionMap#eql?): use == to compare @map.
-
-Wed Aug 6 07:45:26 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/transcode-tblgen.rb: show generating tables in verbose mode.
- (transcode_generate_node): call ActionMap#generate_node with showing
- table name.
-
- * enc/trans/utf_16_32.erb.c: use transcode_generate_node.
-
-Wed Aug 6 06:55:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_start_func_2): propagates fatal error and system
- exit to the main thread.
-
-Wed Aug 6 05:31:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_to_encoding_index, rb_to_encoding): check if the name
- is ascii compatible as well as Encoding.find.
-
- * transcode.c (str_encode): no need to duplicate first.
-
-Wed Aug 6 05:08:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_sort_bang): reset to real class.
-
- * file.c (rb_find_file_ext, rb_find_file): ditto.
-
- * io.c (io_reopen): ditto.
-
-Wed Aug 6 03:56:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (transcodes), tool/build-transcode: generates transcode
- sources.
-
- * enc/trans/{japanese,korean,single_byte,utf_16_32}.c: to be
- autogenerated now.
-
- * enc/depend: added rules for .c from .erb.c.
-
-Tue Aug 5 20:46:20 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/build-transcode: new file.
-
- * tool/transcode-tblgen.rb: new file.
-
- * enc/trans/make_transdb.rb: exclude *.erb.c.
-
- * enc/depend: exclude *.erb.c.
-
- * enc/trans/utf_16_32.erb.c: new file.
-
- * enc/trans/single_byte.erb.c: new file.
-
- * enc/trans/japanese.erb.c: new file.
-
- * enc/trans/korean.erb.c: new file.
-
- * enc/trans/iso-8859-2-tbl.rb: new file.
-
- * enc/trans/iso-8859-3-tbl.rb: new file.
-
- * enc/trans/iso-8859-4-tbl.rb: new file.
-
- * enc/trans/iso-8859-5-tbl.rb: new file.
-
- * enc/trans/iso-8859-6-tbl.rb: new file.
-
- * enc/trans/iso-8859-7-tbl.rb: new file.
-
- * enc/trans/iso-8859-8-tbl.rb: new file.
-
- * enc/trans/iso-8859-9-tbl.rb: new file.
-
- * enc/trans/iso-8859-10-tbl.rb: new file.
-
- * enc/trans/iso-8859-11-tbl.rb: new file.
-
- * enc/trans/iso-8859-13-tbl.rb: new file.
-
- * enc/trans/iso-8859-14-tbl.rb: new file.
-
- * enc/trans/iso-8859-15-tbl.rb: new file.
-
- * enc/trans/eucjp-tbl.rb: new file.
-
- * enc/trans/sjis-tbl.rb: new file.
-
- * enc/trans/euckr-tbl.rb: new file.
-
- * enc/trans/utf_16_32.c: regenerated.
-
- * enc/trans/single_byte.c: regenerated.
-
- * enc/trans/japanese.c: regenerated.
-
- * enc/trans/korean.c: regenerated.
-
- [ruby-dev:35730]
-
-Tue Aug 5 18:02:53 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/io/nonblock/test_flush.rb (TestIONonblock#test_flush):
- rescue some exceptions. [ruby-dev:35638]
-
-Tue Aug 5 16:40:06 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (chdir): handle 5xx errors correctly.
- fixed [ruby-core:18057].
-
-Tue Aug 5 16:38:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/win32.h, bcc32/Makefile.sub (config.h): bcc 5.8 has
- stdint.h.
-
-Tue Aug 5 16:13:05 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (disconnect): do not refer to SSL::SSLSocket for
- environments without OpenSSL. fixed [ruby-dev:35755].
-
-Tue Aug 5 14:19:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_stat_mode): generalized st_mode mask.
-
-Tue Aug 5 12:43:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (retry_sendfile, retry_read): ENOSYS and EWOULDBLOCK are not
- defined on every platforms.
-
-Tue Aug 5 12:34:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode_data.h (TRANSCODE_ERROR): common transcode failure
- exception, would be changed later.
-
- * enc/trans/japanese.c (UNSUPPORTED_MODE): unsupported mode transition
- exception.
-
-Tue Aug 5 03:29:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_sort_bang): respect overridden <=> for String and
- Fixnum. [ruby-core:17708]
-
- * include/ruby/node.h (NOEX_BASIC): basic definition method flag.
-
- * include/ruby/intern.h, vm_method.c (rb_method_basic_definition_p):
- new function to check if the method is not redefined after the
- initialization.
-
- * vm_method.c (rb_obj_respond_to): use rb_method_basic_definition_p.
-
-Mon Aug 4 20:39:06 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * Makefile.in (update-rubyspec): renamed the rubyspec directory
- "spec". Changed directory structure.
-
- * Makefile.in (test-rubyspec): ditto.
-
- * spec/README: described the structure of "spec" directory.
-
- * spec/default.mspec: configured for Matz's Ruby Implementation.
-
-Mon Aug 4 19:21:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_tmp_new): added.
-
- * vm_eval.c (vm_call_super): fixed typo, and get rid of too large
- alloca. [ruby-core:17922]
-
-Mon Aug 4 16:48:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (deferred_nodes, compstmt, arg, fixup_nodes, range_op): fix
- up fixnum range literal in conditional as automagical line number
- comparison. [ruby-core:12124], [ruby-dev:35731]
-
-Mon Aug 4 14:41:25 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * lib/net/smtp.rb (Net::SMTP::rcptto): fix a typo. a patch from
- Masao Takaku <masao at nii.ac.jp>
- fix [ruby-dev:35489].
-
-Mon Aug 4 14:08:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (dump_ensure), process.c (run_exec_dup2),
- string.c (rb_str_replace), transcode.c (transcode_dispatch): fixed
- memory leaks. based on patches from shinichiro.h <shinichiro.hamaji
- AT gmail.com> at [ruby-dev:35751].
-
-Sun Aug 3 19:32:52 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (hash2named_arg): refactoring.
-
- * ext/win32ole/win32ole.c (ole_invoke, fole_respond_to, ev_on_event,
- fev_off_event): accepts Symbol argument.
-
- * test/win32ole/test_win32ole.rb: ditto.
-
- * test/win32ole/test_win32ole_event.rb: ditto.
-
-Sun Aug 3 10:41:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_shared_replace): fixed memory leak. a patch from
- shinichiro.h <shinichiro.hamaji AT gmail.com> at [ruby-dev:35742]
-
-Sat Aug 2 22:55:41 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_err_in_callback.rb: remove temporary files.
- some refactoring.
-
-Sat Aug 2 15:51:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (yylex): 8 and 9 in octal integer should cause compile
- error. [ruby-dev:35729]
-
-Sat Aug 2 01:06:10 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/japanese.c: add U+FF5E to EUC-JP.
- [ruby-dev:35720] [ruby-dev:35722]
-
-Fri Aug 1 23:49:44 2008 TAKAO Kouji <kouji@takao7.net>
-
- * ext/readline/extconf.rb: checked to have clear_history in
- readline library.
- * ext/readline/readline.c (hist_get, hist_each, Init_readline):
- The offset specified for the argument of history_get() might be
- different in GNU Readline and libedit. If use libedit, it was
- corrected that the computational method of the offset specified
- for the argument of history_get() when the Readline module was
- initialized was decided.
- (hist_get, hist_set): If use libedit, accesses first an input
- content in history when specifies the negative offset for the
- argument of history_get() or replace_history_entry(). Then
- checks the offset is negative in ruby.
- (rb_remove_history): When compiling, it corrects it to warning
- when libedit is used.
- (hist_clear, Init_readline): added Readline::HISTORY.clear
- method. [ruby-dev:35551]
- * test/readline/test_readline_history.rb: added unit test for
- Readline::HISTORY.
-
-Fri Aug 1 23:26:45 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (transcode_loop): undefined character is replaced with
- only one character. [ruby-dev:35709]
-
-Fri Aug 1 23:26:22 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- Merged r16430(akr), r16431(akr), r16433(akr), r16469(nobu), and
- r17874(akr) from ruby_1_8.
-
- * Makefile.in (update-rubyspec): added
-
- * Makefile.in (test-rubyspec): added
-
-Fri Aug 1 23:16:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/japanese.c: add support for CP51932,
-
-Fri Aug 1 22:59:40 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/japanese.c: add U+FF0C,
-
-Fri Aug 1 21:49:41 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/sdbm/test_sdbm.rb: add some tests.
-
-Fri Aug 1 21:36:00 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * gc.c (allocate_heaps, assign_heap_slot, rb_newobj_from_heap):
- reset during_gc before raising NoMemoryError.
-
-Fri Aug 1 21:29:56 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm.c (Init_BareVM): check failure of malloc().
-
-Fri Aug 1 20:55:27 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/japanese.c (to_SHIFT_JIS_EF_BF_offsets): add U+FFF3,
- U+FFF4, U+FFF5.
-
- * enc/trans/japanese.c (to_SHIFT_JIS_EF_BF_infos): ditto.
-
- * enc/trans/japanese.c (to_EUC_JP_EF_BF_infos): added.
-
- * enc/trans/japanese.c (to_EUC_JP_EF_BF): added.
-
- * enc/trans/japanese.c (to_EUC_JP_EF_infos): change size.
- [ruby-dev:35714]
-
-Fri Aug 1 18:27:15 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * parse.y (parser_yylex): removed an useless conditional, and magic
- comment are ignored unless at the first of line.
-
- * test/ruby/test_m17n.rb (test_magic_comment_vim): added.
-
- * test/ruby/test_m17n.rb (test_magic_comment_at_various_positions):
- added.
-
-Fri Aug 1 14:54:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_seekdir): no need to rewind to seek forward.
-
-Fri Aug 1 05:31:08 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (output_replacement_character):
- rename from _get_replacement_character.
-
- * transcode.c (output_replacement_character):
- fix replacement on UTF-32{BE,LE}. [ruby-dev:35705]
-
- * transcode.c (transcode_loop): ditto.
-
- * test/ruby/test_transcode.rb (test_invalid_replace):
- add for above.
-
-Fri Aug 1 01:01:49 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * proc.c (rb_proc_call_with_block): reduce comparison.
-
-Thu Jul 31 22:17:35 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (VpMult): prevent memory leak.
-
-Thu Jul 31 20:05:56 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/ruby/test_transcode.rb (test_unicode_public_review_issue_121):
- fix option1 and 3.
-
-Thu Jul 31 19:54:57 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (get_replacement_character): use U+FFFD as replacement
- character when convert to Unicode.
-
- * test/ruby/test_transcode.rb (test_unicode_public_review_issue_121):
- rename from test_public_review_issue_121.
-
- * test/ruby/test_transcode.rb (test_unicode_public_review_issue_121):
- enable option2.
-
-Thu Jul 31 17:00:10 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (get_replacement_character): fix: invalid byte sequence
- is always replaced "\x00?".
-
-Thu Jul 31 16:37:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/rubygems/test_gem_ext_configure_builder.rb
- (test_self_build_fail): remove extra newline. [ruby-dev:35704]
-
-Thu Jul 31 15:11:11 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * test/ruby/test_transcode.rb: added test_shift_jis
- (contributed by Yoshihiro Kambayashi) and
- test_public_review_issue_121
- (see http://www.unicode.org/review/pr-121.html)
-
-Thu Jul 31 13:18:30 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * include/ruby/ruby.h (struct RString): size of ary must be
- RSTRING_EMBED_LEN_MAX + 1.
-
-Thu Jul 31 12:23:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * pack.c (pack_unpack): upper half of hexdigits has never been used.
-
-Thu Jul 31 11:31:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/syck.h (ASSERT): fix typo at r18176.
-
- * ext/syck/rubyext.c (rb_syck_compile): expression in ASSERT() has no
- effect unless debug mode.
-
-Thu Jul 31 10:51:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (ruby_iseq_disasm_insn): suppress warnings on platforms which
- int size differs from pointer size.
-
- * ext/openssl/ossl_asn1.c (ossl_asn1_get_asn1type): ditto
-
- * ext/syck/rubyext.c (rb_syck_err_handler),
- (syck_default_error_handler): ditto.
-
-Thu Jul 31 02:21:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/syck/rubyext.c (rb_syck_compile): remove meaningless branch
- that misleads into thinking that the variable sav may be
- uninitialized.
-
-Thu Jul 31 01:25:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_mutex_unlock_all): mutex is no longer a ruby object.
-
-Thu Jul 31 01:18:07 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y (magic_comment_encoding): remove meaningless null check.
-
-Thu Jul 31 01:09:28 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (VpIsRoundMode): fix tautology
- condition.
-
-Thu Jul 31 00:58:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * pack.c (pack_unpack): reduced static variables.
-
-Thu Jul 31 00:10:20 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * proc.c (rb_proc_call_with_block): prevent null reference.
-
-Wed Jul 30 22:19:13 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y (vtable_free): remove meaningless null check.
-
-Wed Jul 30 22:08:25 2008 Tanaka Akira <akr@fsij.org>
-
- * dir.c (struct dir_data): change path field char * to VALUE.
- (mark_dir): new function for mark path field.
- (free_dir): follow the path field change.
- (dir_s_alloc): ditto.
- (dir_initialize): ditto.
- (dir_s_open): ditto.
- (dir_inspect): ditto.
- (dir_path): return (duplicate of) the path field to preserve
- encoding. [ruby-dev:35685]
-
-Wed Jul 30 22:06:56 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * string.c (sym_inspect): remove dead code.
-
-Wed Jul 30 21:32:52 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ChangeLog: fix wrong method name and add reference.
-
-Wed Jul 30 21:30:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * regparse.c (name_add): fix memory leak.
-
-Wed Jul 30 21:08:06 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/syck/syck.c (syck_free_parser): fix memory leak by
- YAML::Syck.compile.
-
- * regparse.c (parse_exp): fix memory leak at Regexp.new("x{1,1}").
-
-Wed Jul 30 17:48:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_select): recalc the rest of timeout for each
- iterations. [ruby-core:18015]
-
-Tue Jul 29 23:37:37 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (io_ungetc): raise NotImplementedError when ungetc is called
- against dummy encoding IO. [ruby-dev:35686]
-
- * io.c (rb_io_getline_1): ditto when gets with delimiter is called.
-
- * io.c (io_getc): ditto when getc is called.
-
- * test/ruby/test_io_m17n.rb (test_terminator_stateful_conversion,
- test_getc_stateful_conversion, test_ungetc_stateful_conversion):
- these tests should raise NotImplementedError.
-
-Tue Jul 29 22:55:34 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_io.rb (pipe): run reader thread and writer thread.
-
-Tue Jul 29 21:38:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (Init_bigdecimal): fix typo.
-
-Tue Jul 29 21:35:59 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/etc/test_etc.rb (test_passwd): age field may be string under
- some environments.
-
-Tue Jul 29 17:54:35 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * dir.c (char_casecmp): fix: return 0 if either of characters is NUL.
-
-Tue Jul 29 13:17:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/etc/test_etc.rb (test_getpwuid): fix for users whose uid is
- shared.
-
-Tue Jul 29 05:37:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_find_file_ext, rb_find_file): explicit relative path
- which starts with "./" or "../" should be searched from cwd
- instead of load path. [ruby-dev:35673]
-
-Tue Jul 29 02:39:46 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * math.c (math_atanh): raise EDOM on FreeBSD when atanh(1).
-
- * math.c (math_log): ditto.
-
- * math.c (math_log2): ditto.
-
- * math.c (math_log10): ditto.
-
- * test/ruby/test_math.rb: test for above.
-
-Tue Jul 29 01:41:15 2008 Tanaka Akira <akr@fsij.org>
-
- * dir.c (struct dir_data): intenc field removed.
- (dir_s_alloc): intenc initialization removed.
- (dir_initialize): :internal_encoding option removed. dirname code
- conversion removed.
- (dir_enc_str): code conversion removed.
- [ruby-dev:35661]
-
-Mon Jul 28 21:32:17 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rss/: use PNG instead of zlib as binary data.
-
-Mon Jul 28 21:24:33 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.[ch] (cond_every_entry, rb_thread_cond_struct): reverted
- r18239 because r18245 made the changes unnecessary.
-
- * thread.c (rb_mutex_struct): define after including thread_{pthread,
- win32}.c.
-
-Mon Jul 28 21:00:10 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_require.rb (test_require_too_long_filename):
- Kernel#require does not use dln_find_file_r (at r18242).
-
-Mon Jul 28 20:17:03 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_core.h: move the definition of struct rb_mutex_struct.
-
- * thread.c: ditto.
-
-Mon Jul 28 18:58:46 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (mutex_unlock): fix typo.
-
-Mon Jul 28 18:15:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_find_file_ext, rb_find_file): not to split load path with
- path separator. [ruby-Bugs-21356]
-
-Mon Jul 28 18:14:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (overlapped_socket_io, fcntl, rb_w32_close): must not
- pass a pointer to int which is smaller than st_data_t on mswin64.
-
-Mon Jul 28 16:49:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (CreateChild, overlapped_socket_io): suppress
- warnings.
-
-Mon Jul 28 16:06:36 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (MAXPATHLEN): define before use.
-
-Mon Jul 28 16:01:12 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.[ch] (cond_every_entry, rb_thread_cond_struct): moved
- the definitions from .c to .h because rb_thread_cond_struct is used
- in vm_core.h.
-
-Mon Jul 28 14:29:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (load_lib): use dln_find_file_r instead of dln_find_file.
-
-Mon Jul 28 00:18:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_core.h, thread.c: It is now prohibited to use Data_Get_Struct in
- *_free against an object that is going to be free'ed. So, change type
- of thread_t#keeping_mutexes from VALUE to mutex_t.
-
- * vm.c: remove mark to keeping_mutexes.
-
-Sun Jul 27 23:32:42 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/openssl/test_ssl.rb (server_loop): rescue Errno::EINVAL and
- Errno::ECONNABORTED.
-
-Sun Jul 27 22:11:57 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * bootstraptests/method.rb: increase RLIMIT_STACK size to 4M+8Kbytes
- because FreeBSD fails this less than that.
-
-Sun Jul 27 21:45:59 2008 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (gc_mark_children, obj_free): T_DEFERRED should not be appear.
-
- * gc.c (gc_sweep, finalize_list): fix to decrement heap_slot#limit
- after executing finalizer.
-
-Sun Jul 27 14:48:37 2008 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/ruby.h: add a type T_DEFERRED.
-
- * gc.c: fix deferred finalizer system. finalize processes of
- T_DATA and T_FILE are executed after gc process.
- And fix to use BUILTIN_TYPE() instead of seeing flag.
-
- * thread.c, vm_core.h: add RUBY_VM_SET_FINALIZER_INTERRUPT()
- and check interrupt_flag at rb_thread_execute_interrupts().
-
- * thread.c (mutex_mark): fix to mark next_mutex.
-
- * vm.c (rb_thread_mark): fix to mark keeping_mutexes.
-
-Sun Jul 27 09:15:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.h (dln_find_exe, dln_find_file): deprecated, use reentrant
- versions instead.
-
-Sun Jul 27 09:02:32 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/rinda/tuplespace.rb: merged from 1.8.
-
- * test/rinda/test_rinda.rb: merged from 1.8.
-
-Sat Jul 26 22:45:18 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * sample/exyacc.rb: fixed NoMethodError(Kernel#sub!).
- replaced use of special variables with explicit IO
- operations.
-
-Sat Jul 26 21:17:18 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (Init_win32ole): add
- WIN32OLE_EVENT#handler=, WIN32OLE_EVENT#handler
-
- * test/win32ole/test_win32ole_event.rb: ditto.
-
-Sat Jul 26 07:44:14 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (add_event_call_back): remove unused
- variable.
-
-Fri Jul 25 23:48:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (gc_sweep, obj_free, run_final): defer finalizers of IO and
- Data. [ruby-dev:35578]
-
-Fri Jul 25 23:35:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils#split_header_value):
- reduce backtrack. based on a fix by Christian Neukirchen
- <chneukirchen AT gmail.com>.
-
-Fri Jul 25 21:55:38 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/enc/test_koi8.rb: move from test/ruby/test_koi8.rb.
-
-Fri Jul 25 21:09:32 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_invoke, add_event_callback,
- rescue_callback): refactoring.
-
-Fri Jul 25 20:52:44 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/err_in_callback.rb: add test of raising
- exception in WIN32OLE_EVENT callback.
-
- * test/win32ole/test_err_in_callback.rb: ditto.
-
-Fri Jul 25 20:43:57 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (Init_win32ole): add
- WIN32OLE_EVENT#off_event.
-
- * test/win32ole/test_win32ole_event.rb: ditto.
-
- * test/win32ole/test_win32ole_event.rb: some refactoring.
-
-Fri Jul 25 19:50:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * regint.c (xmalloc, xrealloc, xfree): not to use ruby managed memory.
-
-Fri Jul 25 15:52:40 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (vm_invoke_proc): skip setting safe_level if
- it from bmethod. This change makes test/ruby/test_proc.rb pass.
-
-Fri Jul 25 10:00:00 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * test/ruby/test_transcode.rb: refactoring/cleanup of
- test_iso_2022_jp(_1)
-
-Fri Jul 25 04:12:57 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf.c (rb_nkf_convert): output of mime encode is US-ASCII.
- [ruby-list:45257]
-
-Fri Jul 25 02:43:11 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * sample/coverage.rb: move from lib/coverage.rb because this remains in
- an early phase of development.
-
-Fri Jul 25 00:10:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_find_file_ext, rb_find_file): converts Windows style path
- to Cygwin path. [ruby-dev:35647]
-
-Thu Jul 24 16:30:21 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (exit_handler): use st_free_table() to free socklist.
-
- * win32/win32.c (rb_w32_pipe_exec, rb_w32_accept, rb_w32_socket,
- rb_w32_socketpair): should check and release fd and sockets/handles
- if an error occurs in rb_w32_open_osfhandle().
-
-Thu Jul 24 16:05:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (overlapped_socket_io): avoid warnings.
-
- * thread_win32.c (ubf_handle): refactoring.
-
-Thu Jul 24 07:01:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/win32ole/win32ole.c: got rid of improper casts.
-
-Wed Jul 23 23:19:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/socket/test_tcp.rb (test_recvfrom): replace an irrelevant test
- for old behavior.
-
-Wed Jul 23 21:38:16 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_marshal.rb: suppress warning during test.
-
-Wed Jul 23 21:35:53 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_dir.rb: suppress warning during test.
-
-Wed Jul 23 18:27:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tk/{stubs,tcltklib}.c, ext/tk/tkutil/tkutil.c: fix warnings
- about constness and signedness.
-
-Wed Jul 23 17:04:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/openssl_missing.h (d2i_of_void): define for older
- versions. [ruby-dev:35637]
-
-Wed Jul 23 13:53:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/curses/extconf.rb: use try_static_assert.
-
-Wed Jul 23 10:06:19 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/zlib/test_zlib.rb (TestZlibDeflate#test_params): suppress a
- finalizer warning.
-
-Wed Jul 23 06:25:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck: suppress warnings more.
-
-Wed Jul 23 03:19:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (struct input_code.name, input_codename):
- constified.
-
-Wed Jul 23 03:02:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck: suppress warnings.
-
-Wed Jul 23 00:34:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl: suppress warnings.
-
-Tue Jul 22 23:01:34 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/syck/rubyext.c, ext/syck/yaml2byte.c, ext/syck/emitter.c,
- ext/syck/syck.c, ext/syck/handler.c, ext/syck/syck.h: suppress GCC
- warning.
-
-Tue Jul 22 20:42:24 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimalCmp): BigDecimal#<=> should
- return nil if an argument can't be coerced into BigDecimal.
-
- * ext/bigdecimal/bigdecimal.h, ext/bigdecimal/bigdecimal.c
- (VpIsNegDoubleZero, VpItoV): comment out unused functions.
-
-Tue Jul 22 20:33:54 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/rdoc/test_rdoc_parser_ruby.rb (teardown): close tempfile.
-
-Tue Jul 22 19:38:38 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * test/ruby/test_transcode.rb: added two comments
-
-Tue Jul 22 18:08:34 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * README.EXT, README.EXT.ja: mention about FIX2LONG and NUM2LONG.
- see [ruby-dev:35197]
-
-Tue Jul 22 17:53:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (insn_data_to_s_detail), file.c (rb_stat_inspect),
- iseq.c (ruby_iseq_disasm_insn, ruby_iseq_disasm),
- process.c (pst_message), re.c (match_inspect): use rb_str_catf.
-
- * dir.c (dir_inspect), iseq.c (iseq_inspect, insn_operand_intern): use
- rb_sprintf.
-
- * error.c (rb_name_error, rb_raise, rb_loaderror, rb_fatal): use
- rb_vsprintf.
-
-Tue Jul 22 17:20:25 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (init_func): new function to get API's address which
- is often used and not supported on all Windows.
-
- * win32/win32.c (overlapped_socket_io): shouldn't use overlapped I/O if
- CancelIo() is not supported.
-
-Tue Jul 22 16:47:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h, sprintf.c (rb_str_catf, rb_str_vcatf): new
- functions. [ruby-dev:35597]
-
- * string.c (rb_str_capacity): new function to return the capacity.
-
-Tue Jul 22 16:08:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/socket.c (connect_blocking, socks_connect_blocking,
- ruby_connect): cast.
-
-Tue Jul 22 11:05:08 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_dir.rb: use realpath of tmpdir. [ruby-dev:35481]
-
- * test/ruby/test_process.rb: ditto.
-
-Tue Jul 22 09:51:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el: fix here-doc strings with inner quotes. patches
- by Nathan Weizenbaum <nex342 AT gmail.com> from [ruby-core:17615]
- through [ruby-core:17910].
-
-Tue Jul 22 04:26:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_str_buf_new2): optimization for literals.
-
- * string.c (str_buf_cat): returns VALUE.
-
-Tue Jul 22 03:34:01 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc*: Update to RDoc 2.1.0 r112.
-
-Tue Jul 22 02:51:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_str_buf_cat2, rb_str_cat2): optimization
- for literals.
-
-Tue Jul 22 02:50:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * README.EXT, README.EXT.ja (1.5 Manipulating Ruby data): fix the
- prototype of rb_vsprintf, and added rb_str_cat2. [ruby-dev:35622]
-
-Mon Jul 21 17:15:38 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_filesystem_encoding): use locale encoding on Unix.
- [ruby-dev:35617]
-
-Mon Jul 21 15:29:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing/vsnprintf.c (struct __sbuf, FILE): use size_t.
-
- * sprintf.c (ruby__sfvwrite): ditto.
-
-Mon Jul 21 13:55:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * README.EXT, README.EXT.ja (1.5 Manipulating Ruby data): mentioned
- rb_sprintf and rb_vsprintf. [ruby-dev:35611]
-
-Mon Jul 21 10:25:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (prepare_getline_args): check if rs is a string when non-nil
- lim is given. [ruby-dev:35610]
-
-Mon Jul 21 04:55:20 2008 Tanaka Akira <akr@fsij.org>
-
- * dir.c (dir_initialize): use rb_convert_type instead of
- rb_check_convert_type to prevent SEGV by Dir.new(".", true).
- (dir_initialize): use FilePathValue before rb_enc_get(dirname) to
- prevent SEGV by Dir.new(0).
-
-Mon Jul 21 04:42:15 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_s_union): useless rb_enc_get call removed to prevent
- SEGV by Regexp.union("", nil).
-
-Sun Jul 20 22:50:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_compile_each): NODE_POSTEXE should set each end
- procs only once. [ruby-dev:35596]
-
-Sun Jul 20 16:00:37 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (EVENTSINK_Invoke): use rb_protect
- instead of rb_rescue2. [ruby-dev:35595]
-
-Sun Jul 20 01:23:24 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (EVENTSINK_Invoke): little refactoring.
-
- * ext/win32ole/win32ole.c (EVENTSINK_GetIDsOfNames): return
- ITypeInfo::GetIDsOfNames().
-
-Sat Jul 19 09:31:35 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (EVENTSINK_Invoke): little refactoring.
-
- * ext/win32ole/win32ole.c: add document of inspect methods.
-
-Sat Jul 19 06:08:43 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc*: Import RDoc r104. Various make test-all fixes.
-
-Sat Jul 19 00:27:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (check_uint, rb_num2uint, rb_fix2uint): fixed wrong check
- about 64bit positive value.
-
-Fri Jul 18 23:23:37 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (EVENTSINK_Invoke): avoid cfp consistency
- error when exception raised in event callback.
-
-Fri Jul 18 14:52:14 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (socklist): table for registering socket options
- (currently only O_NONBLOCK).
-
- * win32/win32.c (StartSockets, exit_handler): alloc/free socklist.
-
- * win32/win32.c (is_socket): use socklist.
-
- * win32/win32.c (rb_w32_accept, rb_w32_socket, rb_w32_socketpair):
- register new socket to socklist.
-
- * win32/win32.c (rb_w32_close): remove closing socket from socklist.
-
- * win32/win32.c (fcntl): register socket options.
-
- * win32/win32.c (overlapped_socket_io): send to/recv from socket with
- overlapped operation if the socket is not nonblocking mode.
- [experimental]
-
- * win32/win32.c (rb_w32_send, rb_w32_sendto, rb_w32_recv,
- rb_w32_recvfrom): use overlapped_socket_io().
-
- * win32/win32.c (open_ifs_socket): set overlapped mode. this is the
- default mode of winsock's socket(), so lacking it is an old bug.
-
-Fri Jul 18 09:44:30 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/*: Import RDoc r101.
-
-Thu Jul 17 23:45:55 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/rdoc/test_rdoc_c_parser.rb (teardown): close tempfile.
-
-Thu Jul 17 21:08:49 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_process.rb (test_getpriority, test_setpriority): use
- PRIO_PROCESS instead of PRIO_USER.
-
-Thu Jul 17 20:41:42 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * pack.c (pack_unpack): fix v and V with big endian.
- [1].pack("V").unpack("V") was [4294967296].
-
-Thu Jul 17 20:35:03 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * pack.c (pack_pack): fix i! with big endian. [1].pack("i!") was
- "\0\0\0\0".
-
-Thu Jul 17 16:48:40 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/socket.c (ruby_connect): select() for connect() has
- mean only when the socket is non-blocking.
-
-Thu Jul 17 10:55:24 2008 Eric Hodel <drbrain@segment7.net>
-
- * mkconfig.rb: Simplify expression for RDoc.
-
-Thu Jul 17 10:21:15 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (check_uint, rb_num2uint, rb_fix2uint): strict check.
- fixed [ruby-dev:33683]
-
-Thu Jul 17 04:19:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_start_func_2): wake up joining threads.
-
- * thread.c (sleep_forever, sleep_timeval): return when interrupted.
- [ruby-dev:35542]
-
- * thread.c (timer_thread_function): restore main thread status.
- [ruby-core:17270]
-
-Thu Jul 17 01:27:38 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (appendline): remove invalid access.
-
-Wed Jul 16 18:04:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (signal_exec, trap_handler): trap accepts a string as
- command. [ruby-dev:35533]
-
-Wed Jul 16 00:04:30 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/envutil.rb (Test::Unit::Assertions#assert_in_out_err): new
- method.
-
- * test/ruby/test_argf.rb: use assert_in_out_err instead of
- EnvUtil.rubyexec.
-
- * test/ruby/test_module.rb: ditto.
-
- * test/ruby/test_require.rb: ditto.
-
- * test/ruby/test_objectspace.rb: ditto.
-
- * test/ruby/test_object.rb: ditto.
-
- * test/ruby/test_string.rb: ditto.
-
- * test/ruby/test_method.rb: ditto.
-
- * test/ruby/test_variable.rb: ditto.
-
- * test/ruby/test_io.rb: ditto.
-
- * test/ruby/test_rubyoptions.rb: ditto.
-
- * test/ruby/test_exception.rb: ditto.
-
- * test/ruby/test_class.rb: ditto.
-
- * test/ruby/test_thread.rb: ditto.
-
-Tue Jul 15 22:34:03 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (ruby_version): follow changes in configure.in.
-
-Tue Jul 15 21:58:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tk/{,tkutil/}extconf.rb: ruby/ruby.h no longer needs to be
- checked.
-
- * ext/tk/{tcltklib.c,tkutil/tkutil.c}: check macros for each headers.
-
-Tue Jul 15 21:45:41 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/tk/extconf.rb, ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: Do
- not test ruby/ruby.h, which makes OS X's gcc pick the wrong
- header file from Ruby.framework.
-
-Tue Jul 15 21:31:26 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * configure.in (--with-ruby-version): Add a new option to specify
- the ruby version string for version specific directories.
- [ruby-dev:35490]
-
- * mkconfig.rb: Definition of ruby_version is now determined by the
- configure script.
-
-Tue Jul 15 18:14:20 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/socket.c (ruby_connect, s_accept): check before readable/
- writable by select() instead of wrapping in blocking region.
-
- * ext/socket/socket.c (bsock_send, s_recvfrom, udp_send, unix_send_io,
- unix_recv_io): should check readable/writable before calling blocking
- functions.
- see [ruby-dev:35446]
-
-Tue Jul 15 18:12:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (ubf_handle): cancel blocking IO if it can (only
- Vista). see [ruby-dev:35446]
-
- * win32/win32.c (errmap): add ERROR_OPERATION_ABORTED as EINTR.
-
-Mon Jul 14 20:35:21 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_win32ole_event.rb (teardown): fix typo.
-
-Mon Jul 14 18:47:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (transcode_loop): constified.
-
- * transcode.c (str_transcode): rb_str_set_len() sets a delimiter.
-
- * transcode_data.h (rb_transcoder): constified preprocessor and
- postprocessor input.
-
- * enc/trans/japanese.c: ditto.
-
-Sun Jul 13 05:37:50 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/ruby.h (PRI_PTRDIFF_PREFIX, PRI_SIZE_PREFIX): typo.
-
- * {bcc32,win32}/Makefile.sub: (SIZEOF_SIZE_T, SIZEOF_PTRDIFF_T): added.
-
-Sat Jul 12 23:54:55 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (LIBRUBY_DLDFLAGS): import library which created
- with DLL is broken. save import library which created by lib.exe and
- install it.
- fixed the problem mentioned at the postscript of [ruby-dev:35448]
-
-Sat Jul 12 23:24:21 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c: use PRIuSIZE.
-
-Sat Jul 12 22:41:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (PRI_PTRDIFF_PREFIX, PRI_SIZE_PREFIX): fixed typo.
-
-Sat Jul 12 22:30:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (HAVE_RUBY_RUBY_H): defines macros so that
- extconf.rb do not need to check if headers exist under separated
- directory. [ruby-dev:35437]
-
- * include/{ruby,rubyio,rubysig}.h, include/ruby/intern.h: use
- "ruby/..." instead of <ruby/...>.
-
-Sat Jul 12 22:17:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (sizeof ptrdiff_t): check for size of ptrdiff_t.
-
- * include/ruby/ruby.h (PRI?PTRDIFF, PRI?SIZE): printf conversion
- specifiers for ptrdiff_t and size_t/ssize_t.
-
- * insns.def (leave), marshal.c (long_toobig), transcode.c
- (str_transcode), vm_dump.c (control_frame_dump, stack_dump_each),
- (debug_print_register, debug_print_pre): t and z length modifiers
- are C99.
-
-Sat Jul 12 16:02:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/xmlrpc/client.rb (XMLRPC::Client#do_rpc): requires
- webrick/cookie. [ ruby-Bugs-21139 ]
-
-Sat Jul 12 09:25:07 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_win32ole_event.rb: add test
- for WIN32OLE_EVENT#on_event_with_outargs
-
- * test/win32ole/test_win32ole_event.rb(teardown): calling
- WIN32OLE_EVENT.message_loop
-
-Sat Jul 12 01:54:13 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_select): shouldn't pass non-socket handle to
- original select().
-
-Fri Jul 11 23:05:40 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/zlib/test_zlib.rb: add a test for Zlib::Deflate#params.
-
-Fri Jul 11 22:58:28 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/zlib/zlib.c (rb_deflate_params): flush before deflateParams.
- [ruby-core:17675]
-
-Fri Jul 11 22:09:01 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/setup.rb, win32/Makefile.sub (PLATFORM): use $(PLATFORM)
- instead of $(OS) because ENV["OS"] is used in test-all (drb).
-
-Fri Jul 11 20:51:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_wait_readable, rb_io_wait_writable): check if the file
- descriptor is closed.
-
- * thread.c (rb_thread_wait_fd_rw): ditto.
-
-Fri Jul 11 16:16:43 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_accept, rb_w32_socket, rb_w32_socketpair):
- prohibit inheritance of sockets, too. [experimental]
-
-Fri Jul 11 14:39:49 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (CreateChild): the measures for Vista is no longer
- unnecessary.
-
-Fri Jul 11 06:16:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (process.o): depends on util.h.
-
-Fri Jul 11 05:07:46 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h (pipe): prohibit inheritance.
- fixed: [ruby-dev:35421]
-
-Fri Jul 11 00:56:46 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (thread_create_core): fix GC problem.
- [ruby-core:17669]
-
-Thu Jul 10 22:06:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/pstore.rb (PStore#transaction): return the result from the
- block. [ruby-core:17718]
-
-Thu Jul 10 21:15:49 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_win32ole_typelib.rb: add some illegal argument
- test.
-
- * test/win32ole/test_win32ole_type.rb: ditto.
-
- * test/win32ole/test_win32ole_event.rb: ditto.
-
- * test/win32ole/test_win32ole_param.rb: ditto.
-
- * test/win32ole/test_win32ole_method.rb: ditto.
-
-Thu Jul 10 19:38:35 2008 wanabe <s.wanabe@gmail.com>
-
- * test/ruby/envutil.rb (assert_normal_exit): r17993 revert.
-
-Thu Jul 10 18:29:41 2008 wanabe <s.wanabe@gmail.com>
-
- * test/ruby/envutil.rb (assert_normal_exit): finish writing script
- before spawn("ruby") to avoid blocking in win32.
-
-Thu Jul 10 17:20:50 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (insert): follow recent changes of globbing.
-
-Thu Jul 10 14:09:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/coverage/coverage.c (rb_coverage_start): return nil.
-
-Thu Jul 10 12:41:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_wait_for): fixed variable name.
-
-Thu Jul 10 12:09:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (rb_thread_t), vm.c (rb_thread_mark), process.c
- (rb_last_status_get, rb_last_status_set, rb_last_status_clear):
- moved last_status from rb_vm_t. [ruby-dev:35414]
-
- * vm.c (th_init2): initialize last_status with nil.
-
-Thu Jul 10 12:09:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_wait_for): wait until timed out only when
- sleeping with timeout.
-
-Wed Jul 9 22:41:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (sleep_timeval): wait until timed out. [ruby-core:17270]
-
-Wed Jul 9 20:58:16 2008 Tanaka Akira <akr@fsij.org>
-
- * array.c (rb_ary_fill): don't raise even if length is negative.
- [ruby-core:17483], [ruby-core:17661]
-
-Wed Jul 9 20:18:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_cv_va_args_macro): check for __VA_ARGS__.
-
- * thread.c (thread_debug): show source name and line if possible.
-
- * thread_{pthread,win32}.c (rb_thread_create_timer_thread): needs more
- stack for debug.
-
-Wed Jul 9 11:13:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/profiler.rb (Profiler__#print_profile): sort in the descending
- order of cumulative time.
-
-Wed Jul 9 11:11:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (struct glob_args, rb_glob_caller, rb_glob2, push_pattern),
- (glob_brace): make consistent prototypes.
-
- * dir.c (push_glob): set enc in the caller of rb_glob_caller as well
- as rb_glob2.
-
-Wed Jul 9 09:12:11 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (options): use input_endian.
-
-Wed Jul 9 01:38:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_succ): alphabets or numerics mutually enclosing
- non-alphanumeric characters can carry up. e.g., "1.999".succ should
- be "2.000".
-
-Wed Jul 9 00:12:31 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (rb_set_coverages, rb_reset_coverages): enable and disable
- coverage measurement.
-
- * thread.c (rb_get_coverages): rename and move from vm.c.
-
- * vm.c (rb_vm_get_coverages): ditto.
-
- * iseq.c (prepare_iseq_build): ditto.
-
- * thread.c (clear_coverage): ditto.
-
- * parse.y (coverage): ditto.
-
- * ext/coverage/coverage.c: use above functions, add new method
- Coverage.start and fix rdoc .
-
-Tue Jul 8 23:02:35 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (find_default_source): bug fix when
- OLE object does not have default source interface.
-
- * test/win32ole/test_win32ole_event.rb: ditto.
-
-Tue Jul 8 22:56:23 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (rb_enable_coverages): hide coverage array by setting 0 to
- klass during measurement.
-
- * parse.y (coverage, yycompile0): ditto.
-
- * iseq.c (prepare_iseq_build): use rb_hash_lookup instead of
- rb_hash_aref.
-
- * thread.c (rb_coverage_result): restore klass of coverage array
- and return it.
-
- * thread.c (update_coverage): check whether its klass is 0.
-
-Tue Jul 8 22:28:25 2008 Koichi Sasada <ko1@atdot.net>
-
- * lib/debug.rb, lib/profile.rb: fix to use RubyVM.
-
- * lib/rdoc/parsers/parse_c.rb: ditto.
-
-Tue Jul 8 21:45:22 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm.c (rb_vm_mark): mark the last element of special_exceptions.
-
-Tue Jul 8 19:55:40 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (find_default_source): try to
- find COCLASS when WIN32OLE object is not COCLASS.
-
- * test/win32ole/test_win32ole_event.rb: ditto
-
-Tue Jul 8 13:38:22 2008 Koichi Sasada <ko1@atdot.net>
-
- * compile.h: fix to skip inserting a trace insn.
-
-Tue Jul 8 11:41:17 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * dir.c: shouldn't use ruby object in globbing, because glob service
- routines are called before initializing ruby on some platforms (ex.
- windows).
-
-Tue Jul 8 10:08:40 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * dir.c (Next): use rb_enc_mbclen. [ruby-dev:35390]
-
-Tue Jul 8 07:59:40 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * dir.c (Next): use rb_enc_precise_mbclen.
-
-Tue Jul 8 02:27:23 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * dir.c: preserve encoding of strings in glob and fnmatch.
-
- * include/ruby/ruby.h: related changes.
-
-Tue Jul 8 00:22:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_succ): limit carrying in an alphanumeric region if
- exists. [ruby-dev:35094]
-
-Mon Jul 7 20:39:28 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c(Init_win32ole): add
- WIN32OLE_TYPE#source_ole_types, WIN32OLE_TYPE#default_ole_types,
- WIN32OLE_TYPE#default_event_sources.
-
- * test/win32ole/test_win32ole_type.rb: ditto.
-
-Mon Jul 7 19:45:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/ruby/test_dir.rb (test_chroot_nodir): add Errno::EPERM.
-
-Mon Jul 7 17:12:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/ipaddr.rb (IPAddr#initialize): get rid of ArgumentError in
- IPAddr#to_range. a patch from okkez <okkez000 AT gmail.com> in
- [ruby-dev:35091].
-
-Mon Jul 7 01:24:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_extname): fix for file name with spaces.
- [ruby-talk:307404]
-
-Mon Jul 7 00:59:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (ruby_init_stack): prior STACK_END_ADDRESS if
- found. [ruby-core:17624]
-
-Sun Jul 6 23:48:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/socket.c (bsock_send, s_recvfrom, ruby_connect, s_accept),
- (udp_send, unix_send_io, unix_recv_io): blocking region support.
-
-Sun Jul 6 18:34:35 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_win32ole_type.rb (test_initialize): add
- more assertions.
-
-Sun Jul 6 10:12:21 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/test/unit/collector/objectspace.rb
- (Test::Unit::Collector::ObjectSpace::NAME): fix a typo.
-
-Sun Jul 6 00:56:51 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (host_str): fix type mismatch in rb_raise
- format and argument.
- (port_str): ditto.
- (unix_recv_io): ditto.
- (sock_s_unpack_sockaddr_un): ditto.
-
-Sat Jul 5 23:42:23 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (NUM2INT): cast to int.
- (FIX2INT): ditto.
- (NUM2UINT): cast to unsigned int.
- (FIX2UINT): ditto.
-
-Sat Jul 5 23:10:41 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_pipe): new function for handling EMFILE and ENFILE
- error of pipe().
- (UPDATE_MAXFD_PIPE): removed.
- (pipe_open): use rb_pipe.
- (rb_io_s_pipe): ditto.
-
- * process.c (pipe_nocrash): use rb_pipe.
-
- * include/ruby/intern.h (rb_pipe): declared.
-
-Sat Jul 5 22:22:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_initialize): NUM2INT() returns int.
-
- * thread.c (timer_thread_function), thread_pthread.c (thread_timer),
- thread_win32.c (timer_thread_func), thread_{pthread,win32}.c
- (rb_thread_create_timer_thread): passing VM.
-
-Sat Jul 5 20:53:18 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_word.rb: check word installed.
-
-Sat Jul 5 16:12:54 2008 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c: revert. before lazy sweep.
-
-Sat Jul 5 09:55:44 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE#ole_respond_to?
-
- * test/win32ole/test_win32ole.rb: ditto.
-
-Sat Jul 5 08:48:05 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (unescape_nonascii): add has_property argument not to
- raise error by /\p{Hiragana}\u{3042}/ in EUC-JP script.
- (rb_reg_preprocess): use has_property argument to make regexp
- encoding fixed.
-
-Sat Jul 5 08:29:47 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (unescape_nonascii): make regexp fixed_encoding if \p is used.
- fixed [ruby-core:17279].
-
-Fri Jul 4 23:12:53 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (d2time): fix the bug of VT_DATE
- to String conversion when negative value.
-
- * test/win32ole/test_win32ole_variant.rb: ditto.
-
-Fri Jul 4 22:15:29 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/test/unit/testcase.rb: collect descendants of
- Test::Unit::TestCase using inherited.
-
- * lib/test/unit/autorunner.rb: don't use ObjectSpace.each_object.
-
- * lib/test/unit/collector/dir.rb: ditto.
-
- * lib/test/unit/collector/objectspace.rb: ditto.
-
- [ruby-core:17126]
-
-Fri Jul 4 20:43:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/oniguruma.h (OnigEncoding): removed auxiliary_data.
-
- * include/ruby/encoding.h (ENC_DUMMY_P): moved dummy encoding flag to
- rb_encoding from Encoding instance.
-
- * encoding.c (rb_encoding_list): list of Encoding instances.
-
- * encoding.c (struct rb_encoding_entry): moved base encoding from
- instance variable.
-
-Fri Jul 4 17:51:07 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (check_uint, rb_num2uint, rb_fix2uint): proper check.
-
-Fri Jul 4 14:17:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/net/ftp.rb (Net::FTP#sendport): use divmod. [ruby-core:17557]
-
-Fri Jul 4 11:08:37 2008 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c (garbage_collect_force): sweep is completely ended.
-
- * gc.c (os_obj_of): invoke garbage_collect_force() when freelist none.
-
-Fri Jul 4 05:01:26 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (rb_num2uint, rb_fix2uint): typo.
-
-Fri Jul 4 02:21:06 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (check_uint, rb_num2uint, rb_fix2uint): also needs checking
- negative value. see [ruby-dev:33683]
-
-Thu Jul 3 23:26:36 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * include/ruby/intern.h: remove prototypes about coverage.
-
- * iseq.c (prepare_iseq_build): add prototype.
-
- * parse.y (coverage): ditto.
-
- * thread.c (clear_coverage): ditto.
-
- * thread.c (update_coverage): use rb_sourceline.
-
- * thread.c (rb_get_coverages): rename and move to vm.c.
-
- * vm.c (rb_vm_get_coverages): ditto.
-
- * ext/coverage/coverage.c: add rdoc.
-
-Thu Jul 3 21:51:21 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/coverage/coverage.c, ext/coverage/extconf.rb: eliminate
- COVERAGE__ and introduce coverage.so instead. How to measure
- coverage: (1) require "coverage.so", (2) require or load Ruby source
- file, and (3) Coverage.result will return the same hash as COVERAGE__.
- [ruby-dev:35324]
-
- * thread.c (rb_enable_coverages): start coverage measurement by using
- rb_add_event_hook.
-
- * thread.c (rb_get_coverages): returns current results of coverage
- measurement.
-
- * include/ruby/intern.h: add prototype for above two functions.
-
- * vm_core.h, vm.c: add field of coverages to rb_vm_t.
-
- * insns.def (trace): remove special handling for COVERAGE__.
-
- * iseq.c (prepare_iseq_build): switch COVERAGE__ to
- rb_get_coverages().
-
- * parse.y (coverage): ditto.
-
- * thread.c (clear_coverage): ditto.
-
- * lib/coverage.rb: use coverage.so instead of COVERAGE__.
-
-Thu Jul 3 21:20:45 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (thread_initialize): NUM2INT returns long.
-
-Thu Jul 3 21:06:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (Init_eval): typo fixed in r17833.
-
-Thu Jul 3 19:44:44 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (Init_win32ole): remove duplicate line.
-
-Thu Jul 3 16:08:36 2008 Tanaka Akira <akr@fsij.org>
-
- * configure.in (erfc): erfc of glibc comes with Debian GNU/Linux Etch
- on IA64 is broken. erfc(10000.0) aborts.
- use missing/erf.c instead.
- http://sources.redhat.com/ml/libc-hacker/2005-08/msg00008.html
-
-Thu Jul 3 12:49:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/smtp.rb (Net::SMTP::start): use 'localhost' instead of
- 'localhost.localdomain'. [ruby-dev:35333]
-
- * lib/net/smtp.rb (Net::SMTP::SMTP.start): ditto.
-
-Thu Jul 3 07:06:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (SET_LC_MESSAGES): LC_MESSAGES must be C.
-
-Thu Jul 3 07:02:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (Init_eval), gc.c (Init_GC), proc.c (Init_Proc): freeze
- messages of preallocated special exceptions also.
-
-Thu Jul 3 04:39:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_during_gc): VALUE cache is irrelevant.
-
-Thu Jul 3 01:44:01 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * regint.h (GET_ALIGNMENT_PAD_SIZE, ALIGNMENT_RIGHT): cast pointer to
- uintptr_t instead of unsigned int.
-
-Thu Jul 3 01:23:13 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * sprintf.c: include ieeefp.h to refer to isinf.
-
- * ext/bigdecimal/bigdecimal.c: ditto.
-
- * ext/json/ext/generator/generator.c: ditto.
-
- * rational.c: ditto.
-
-Thu Jul 3 01:01:57 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * missing/tgamma.c (tgamma): remove unused variable.
-
-Thu Jul 3 00:18:00 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: avoid creating Ruby object during
- GC. thanks to arton <artonx AT yahoo.co.jp>. [ruby-dev:35313]
-
- * test/win32ole/test_win32ole_event.rb: ditto.
-
-Thu Jul 3 00:09:31 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * gc.c: add rb_during_gc(). based on a patch from arton <artonx AT
- yahoo.co.jp> at [ruby-dev:35313].
-
- * include/ruby/intern.h: ditto.
-
-Wed Jul 2 09:49:10 2008 Narihiro Nakamura <authorNari@gmail.com>
-
- * gc.c (gc_lazy_sweep): use lazy sweep algorithm for response
- performance gain.
-
- * gc.c (garbage_collect_force): mark and lazysweep invoke, after
- erasing all mark.
-
- * gc.c (GC_NOT_LAZY_SWEEP): not lazy sweep flag. for debug.
-
-Wed Jul 2 03:42:44 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_settracefunc.rb: fix expected traces for
- RubyVM::FrozenCore's event and r17744.
-
-Wed Jul 2 03:10:41 2008 Koichi Sasada <ko1@atdot.net>
-
- * compile.h, insns.def: reduce insn operand of "trace".
-
- * include/ruby/ruby.h: add RUBY_EVENT_COVERAGE event.
-
-Wed Jul 2 02:02:34 2008 Koichi Sasada <ko1@atdot.net>
-
- * proc.c, vm.c: fix to refer to next ruby level cfp to make binding.
-
-Wed Jul 2 01:58:19 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * insns.def (trace): C99ism.
-
-Wed Jul 2 01:53:40 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * Add coverage measurement constant COVERAGE__. This constant is not
- for casual use. Usage: (1) assign {} to COVERAGE__, (2) require or
- load Ruby source file, and (3) COVERAGE__["sourcefilepath"] will
- return an array whose elements represent number of executions per
- line of source code.
-
- * vm_core.h: add field of coverage array to iseq.
-
- * iseq.c (prepare_iseq_build): ditto.
-
- * insns.def (trace): update coverage array.
-
- * parse.y (coverage): create and initialize coverage array.
-
- * compile.h (ADD_TRACE): add trace instruction to update coverage
- array.
-
- * thread.c (clear_coverage): delete coverage array when forking.
- Otherwise, double count of coverage may occur.
-
- * lib/coverage.rb: sample coverage measurement tool.
-
- * error.c: distinguish explicitly between parse_in_eval and
- mild_compile_error.
-
- * load.c: ditto.
-
- * vm_eval.c: ditto.
-
-Tue Jul 1 21:32:43 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/test/unit/ui/console/testrunner.rb: prevent destructive
- modification to $0.
-
- * test/rubygems/gemutilities.rb (build_rake_in): move from
- test_gem_ext_rake_builder.rb.
-
- * test/rubygems/test_gem_ext_rake_builder.rb: ditto.
-
- * test/rubygems/test_gem_installer.rb: override Gem.ruby and
- ENV["rake"].
-
- * test/rubygems/test_gem_uninstaller.rb: ditto.
-
-Tue Jul 1 21:13:17 2008 Koichi Sasada <ko1@atdot.net>
-
- * compile.c, vm.c, insns.def: call FrozenCore.set_postexe method
- instead to use "postexe" insn.
-
- * id.c, id.h: add a prepared id for above.
-
-Tue Jul 1 21:09:58 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * lib/mkmf.rb (create_tmpsrc): we need to include COMMON_HEADERS,
- namely inclusion of ruby.h, because _GNU_SOURCE is now defined
- there (if any) and socket.so requires it on Linux systems.
-
-Tue Jul 1 20:55:07 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * eval.c (rb_interrupt): trick to suppress GCC warning.
-
- * sprintf.c (rb_str_format): ditto.
-
-Tue Jul 1 20:44:36 2008 Koichi Sasada <ko1@atdot.net>
-
- * tool/instruction.rb: RubyVM is not module.
-
-Tue Jul 1 19:31:24 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * ext/digest/digest.c (rb_digest_instance_inspect): constified.
-
- * variable.c (rb_path2class): field precision should have type int.
-
-Tue Jul 1 19:01:00 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/shift_jis.c (code_is_ctype): HALF WIDTH KATAKANA is
- a character.
-
-Tue Jul 1 17:56:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing/vsnprintf.c (BSD__uqtoa): constified.
-
-Tue Jul 1 17:50:44 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * enc/make_encdb.h: always add ';' at the end of line.
-
-Tue Jul 1 17:44:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (COMPILE_OPTION_FALSE), time.c (timegm_noleapsecond),
- thread.c (eKillSignal, eTerminateSignal),
- missing/vsnprintf.c (BSD_vfprintf): constified.
-
-Tue Jul 1 17:37:43 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * enc/ascii.c: ISO C does not allow extra ';' outside of a
- function
-
- * enc/us_ascii.c: ditto.
-
- * enc/utf_8.c: ditto.
-
- * enc/big5.c: ditto.
-
- * enc/euc_jp.c: ditto.
-
- * enc/euc_kr.c: ditto.
-
- * enc/euc_tw.c: ditto.
-
- * enc/gb2312.c: ditto.
-
- * enc/gbk.c: ditto.
-
- * enc/iso_8859_1.c: ditto.
-
- * enc/iso_8859_2.c: ditto.
-
- * enc/iso_8859_3.c: ditto.
-
- * enc/iso_8859_4.c: ditto.
-
- * enc/iso_8859_5.c: ditto.
-
- * enc/iso_8859_6.c: ditto.
-
- * enc/iso_8859_7.c: ditto.
-
- * enc/iso_8859_8.c: ditto.
-
- * enc/iso_8859_9.c: ditto.
-
- * enc/iso_8859_10.c: ditto.
-
- * enc/iso_8859_11.c: ditto.
-
- * enc/iso_8859_13.c: ditto.
-
- * enc/iso_8859_14.c: ditto.
-
- * enc/iso_8859_15.c: ditto.
-
- * enc/iso_8859_16.c: ditto.
-
- * enc/koi8_r.c: ditto.
-
- * enc/shift_jis.c: ditto.
-
- * enc/utf_16be.c: ditto.
-
- * enc/utf_32be.c: ditto.
-
- * enc/utf_32le.c: ditto.
-
- * enc/windows_1251.c: ditto.
-
- * process.c (run_exec_rlimit): ISO C90 forbids mixed declarations
- and code
-
- * include/ruby/ruby.h (enum ruby_special_consts): ISO C forbids
- comma at end of enumerator list
-
- * include/ruby/ruby.h (enum ruby_value_type): ditto.
-
- * eval_intern.h (enum): ditto.
-
- * vm_core.h (enum rb_thread_status): ditto.
-
- * parse.y (enum lex_state_e): ditto.
-
- * parse.y (enum string_type): ditto.
-
- * process.c (enum): ditto.
-
- * ruby.c (enum dump_flag_bits): ditto.
-
- * ruby.c (enum disable_flag_bits): ditto.
-
- * enc/gb18030.c (enum): ditto.
-
-Tue Jul 1 17:21:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * regexec.c (stack_double): use MatchStackLimitSize atomically.
-
- * regparse.c (onig_free_shared_cclass_table): OnigTypeCClassTable
- needs atomicity
-
- * regsyntax.c: constified all predefined OnigSyntaxTypes.
-
-Tue Jul 1 16:57:44 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * include/ruby/st.h (struct st_table): type of bit-field
- 'num_entries' is a GCC extension
-
- * include/ruby/ruby.h (rb_intern): prefix __extension__ for
- braced-groups within expressions.
-
- * include/ruby/intern.h (rb_usascii_str_new2): ditto.
-
- * include/ruby/intern.h (rb_tainted_str_new2): ditto.
-
- * include/ruby/intern.h (rb_str_new2): ditto.
-
-Tue Jul 1 15:01:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rubygems/ext/builder.rb (Gem::Ext::Builder.make),
- (Gem::Ext::Builder.run): EXIT_SUCCESS may be 0 or may not.
-
- * test/rubygems/test_gem_ext_rake_builder.rb (build_rake_in): override
- Gem.ruby and ENV["rake"].
-
- * runruby.rb: bin/rake does not exist in archdir where architecture
- depend script (i.e. rbconfig.rb) exists.
-
-Tue Jul 1 13:19:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_fill): check if beg is too big.
-
-Tue Jul 1 12:01:16 2008 Koichi Sasada <ko1@atdot.net>
-
- * compile.c, insns.def, vm.c, vm_core.h: remove some insns
- (undef, alias, definemethod).
- Call RubyVM::FrozenCore's singleton method instead.
- Add "putiseq" and "putspecialobject" instructions.
-
- * id.c, id.h: add ids for above.
-
- * tool/parse.rb: "VM" no longer exists. Use RubyVM instead.
-
-Tue Jul 1 03:28:16 2008 Eric Hodel <drbrain@segment7.net>
-
- * test/rubygems/test_ext_configure_builder.rb: Apply locale-free
- patch by Yusuke ENDOH. [ruby-core:17444].
-
- * runruby.rb: Set ENV['rake']. Patch by Yusuke ENDOH
- [ruby-core:17442].
-
-Tue Jul 1 01:07:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/cgi.rb (CGI::QueryExtension.read_multipart): blanks inside
- double quotes are allowed. [ruby-list:45140]
-
-Tue Jul 1 00:59:43 2008 Tanaka Akira <akr@fsij.org>
-
- * numeric.c (num_coerce): call rb_Float(x) first. don't depend on
- evaluation order of function arguments.
-
-Tue Jul 1 00:49:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_newobj): abort GC phase before rb_bug.
-
-Mon Jun 30 23:15:07 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/openssl/test_ssl.rb (start_server): shutdown TCPServer before
- close.
-
-Mon Jun 30 23:01:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (RUBY_H_INCLUDES): common headers which are included with
- ruby.h together.
-
-Mon Jun 30 22:57:50 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_settracefunc.rb (test_raise): reveal an exception
- hided by rescue modifier.
-
-Mon Jun 30 22:49:32 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_array.rb (test_aset): access with too big index
- raises not ArgumentError but IndexError now.
-
-Mon Jun 30 22:30:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/collector/dir.rb (recursive_collect): r15662 reverted.
-
-Mon Jun 30 22:27:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/stringio/stringio.c (strio_getline): fix for nil and "" as
- separator. [ruby-dev:34591]
-
-Mon Jun 30 22:21:30 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (argf_each_line): pass args to each_line. [ruby-dev:34958]
-
-Mon Jun 30 22:12:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (chain_finalized_object): should not delete from finalizer
- table until run.
-
- * gc.c (rb_gc_call_finalizer_at_exit): deferred_final_list may be
- empty first.
-
-Mon Jun 30 18:57:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (gc_finalize_deferred): allow object allocation in finalizers.
-
- * gc.c (rb_gc_call_finalizer_at_exit): ditto.
-
-Mon Jun 30 14:41:36 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * gc.c (rb_newobj): prohibit call of rb_newobj() during gc when
- USE_VALUE_CACHE is not defined (normal case).
-
-Mon Jun 30 10:28:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/syslog/syslog.c (syslog_write): syslog operations should be
- protected from $SAFE level 4. a patch from Keita Yamaguchi
- <keita.yamaguchi at gmail.com>.
-
- * ext/syslog/syslog.c (mSyslog_close): ditto.
-
- * ext/syslog/syslog.c (mSyslog_set_mask): ditto.
-
-Mon Jun 30 03:01:35 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/net/http/test_http.rb (_test_request__file): specify encoding
- explicitly.
-
- * test/net/http/utils.rb: ditto.
-
-Mon Jun 30 02:31:07 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_utf8_encindex): defined.
-
- * include/ruby/encoding.h (rb_utf8_encindex): ditto.
-
-Mon Jun 30 02:14:34 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c, vm_core.h,vm_core.h, vm_dump.c, iseq.c: rename class name
- VM -> RubyVM, and rename rb_cVM -> rb_cRubyVM.
- "VM" is too short name for class.
-
- * test/ruby/test_method.rb, test/ruby/test_settracefunc.rb: ditto.
-
- * include/ruby/ruby.h: rb_cRubyVM, rb_cEnv, rb_cISeq should not be
- exposed.
-
-Mon Jun 30 02:10:32 2008 Koichi Sasada <ko1@atdot.net>
-
- * process.c (Init_process): fix to avoid a warning.
-
-Mon Jun 30 01:52:05 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_parse.rb: remove tests for open_args.
-
-Sun Jun 29 23:01:54 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_format_m): make tmp volatile to avoid possible GC
- problem.
-
-Sun Jun 29 18:01:30 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/parser.rb, lib/rss/utils.rb: merge documents from ruby_1_8.
-
-Sun Jun 29 17:44:23 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/parser.rb (RSS::ListenerMixin#known_class): define to
- work with ruby 1.8.x too.
-
-Sun Jun 29 17:41:42 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/base.rb (RSS::Maker::RSSBase#to_feed): raise
- exception not return nil if RSS::Maker.make can't get required
- information.
-
- * test/rss/rss-assertions.rb: follow the above change.
-
-Sun Jun 29 17:37:23 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/base.rb (RSS::Maker::RSSBase#make): require block.
-
- * test/rss/test_maker_{0.9,1.0,2.0}.rb: follow the above change.
-
-Sun Jun 29 17:33:34 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/base.rb, lib/rss/maker/itunes.rb: don't use
- instance_eval to initialize variables. (speed up)
-
-Sun Jun 29 17:31:15 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb, test/rss/test_version.rb (RSS::VERSION):
- 0.2.4 -> 0.2.5.
-
-Sun Jun 29 11:36:20 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * dir.rb: fix resource leak.
-
-Sun Jun 29 09:43:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/tmpdir.rb (@@systmpdir): prior LOCAL_APPDATA if possible, and
- should be clean. based on a patch from arton <artonx AT
- yahoo.co.jp> at [ruby-dev:35269]
-
-Sun Jun 29 07:53:08 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (date2time_str): fix the overflow in
- some situation. [ruby-bugs-20793]
-
-Sat Jun 28 21:25:08 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (struct RRegexp): new field usecnt. replace
- str and len by src.
-
- * gc.c (gc_mark_children): mark src field of regexp.
- (obj_free): don't free str field.
-
- * re.c (REG_BUSY): removed.
- (rb_reg_initialize): prohibit re-initialize regexp.
- (rb_reg_search): use usecnt to prevent freeing regexp currently
- using. this prevents SEGV by:
- r = /\A((a.)*(a.)*)*b/
- r =~ "ab" + "\xc2\xa1".force_encoding("euc-jp")
- t = Thread.new { r =~ "ab"*8 + "\xc2\xa1".force_encoding("utf-8")}
- sleep 0.2
- r =~ "ab"*8 + "\xc2\xa1".force_encoding("euc-jp")
-
-Sat Jun 28 21:15:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_str_new2, rb_tainted_str_new2,
- rb_usascii_str_new2): use inline versions only for constant
- literals.
-
-Sat Jun 28 13:12:06 2008 Tanaka Akira <akr@fsij.org>
-
- * test/rubygems/test_gem.rb (test_self_path_APPLE_GEM_HOME): don't use
- fixed /tmp/apple_gem_home directory.
-
-Sat Jun 28 08:40:18 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: check String encoding when
- converting String to VT_BSTR in OLE.
-
- * test/win32ole/test_win32ole.rb: ditto.
-
-Sat Jun 28 01:08:42 2008 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_timespec): fix rounding negative float.
-
-Fri Jun 27 21:38:57 2008 Tanaka Akira <akr@fsij.org>
-
- * struct.c: __size__ removed. use the length of __members__ instead.
- (num_members): new function.
-
-Fri Jun 27 21:19:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/inlinetest.rb (InlineTest.in_progname): workaround for frozen
- $0. [ruby-dev:35261]
-
- * lib/test/unit/ui/console/testrunner.rb (TestRunner#finished): ditto.
-
-Fri Jun 27 17:45:17 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * lib/erb.rb: adjust line number for magic comment.
-
- * test/erb/test_erb.rb: add tests for def_method.
-
-Fri Jun 27 14:29:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (primary): empty not should call '!' on nil.
- cf [ruby-dev:35227]
-
-Fri Jun 27 14:25:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_eval_body): if thrown exception is frozen, reraise it to
- create a new instance.
-
-Fri Jun 27 13:29:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_str_new2, rb_tainted_str_new2,
- rb_usascii_str_new2): use with-length versions with strlen to
- optimize strlen, if optimized.
-
-Fri Jun 27 12:28:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/un.rb (mkmf): new command to create makefile.
-
-Fri Jun 27 11:06:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/un.rb (wait_writable): added help message.
-
-Fri Jun 27 06:52:54 2008 Koichi Sasada <ko1@atdot.net>
-
- * configure.in: need a ",".
-
- * process.c (rb_fork): check CANNOT_FORK_WITH_PTHREAD macro.
-
-Fri Jun 27 06:50:56 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_eval.c (vm_call_super): fix to call method_missing.
- [ruby-core:15719], [ruby-core:17340]
-
-Fri Jun 27 00:00:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (set_arg0, ruby_prog_init): freeze $0. a patch from Keita
- Yamaguchi <keita.yamaguchi at gmail.com>.
-
-Thu Jun 26 23:58:29 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * string.c (rb_str_index_m, rb_str_rindex_m, rb_str_include): fix
- rdoc.
-
-Thu Jun 26 17:43:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_f_trace_var): should not be allowed at safe level 4.
- a patch from Keita Yamaguchi <keita.yamaguchi at gmail.com>.
-
-Thu Jun 26 11:04:30 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems: Update to RubyGems 1.2.0 r1824. Incorporates patch by
- Yusuke ENDOH [ruby-core:17353].
-
-Thu Jun 26 00:48:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (primary): not operand might be empty. [ruby-dev:35227]
-
-Wed Jun 25 21:54:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (primary): make functional-style not operator to act
- like function. see <http://d.hatena.ne.jp/ku-ma-me/20080624/p1>.
-
-Wed Jun 25 15:28:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_fill): not depend on unspecified behavior at integer
- overflow. reported by Vincenzo Iozzo <snagg AT openssl.it>.
-
-Wed Jun 25 13:42:44 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/erb.rb (ERB::Compiler:Buffer#new): push magic comment first.
-
- * lib/erb.rb (ERB::Compiler#compile): fix for broken input.
-
-Wed Jun 25 12:10:01 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/erb.rb (ERB::Compiler#compile): magic comment needs LF.
-
-Wed Jun 25 09:31:11 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/erb.rb (ERB::Compiler#compile): output magic comment.
-
-Tue Jun 24 22:14:36 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm_eval.c (eval_string_with_cref): preserve parse_in_eval even if
- exception raised.
-
-Tue Jun 24 22:09:18 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c(ole_invoke): fix memory leak.
- [ruby-bugs-20792]
-
-Tue Jun 24 17:20:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_cv_fork_with_pthread): check after check for
- pthread library, and define the macro when checked only.
-
-Tue Jun 24 17:04:39 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/io/wait/extconf.rb: check sys/socket.h for cygwin.
-
-Tue Jun 24 16:51:51 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (io_reopen): remove cygwin handling because it seems to be for
- C's stdio.
- fixed [ruby-dev:35183]
-
-Tue Jun 24 11:12:33 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h, win32/win32.c (rb_w32_getppid): now support
- getppid() on win32 (but only Win2k or later).
-
- * process.c (get_ppid): remove win32 special logic.
-
-Tue Jun 24 09:40:47 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/socket.c (init_sock): socket is binmode on platforms
- which support binmode.
-
-Tue Jun 24 00:21:53 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (iseq_build_from_ary): initialize arg_opts, a patch from
- Adam Strzelecki <ono at java.pl> in [ruby-core:17220].
-
-Tue Jun 24 00:10:53 2008 wanabe <s.wanabe@gmail.com>
-
- * compile.c (iseq_build_from_ary): fix expression to obtain
- iseq->local_size and iseq->local_table_size. [ruby-dev:35205]
-
-Mon Jun 23 11:31:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/mathn.rb (Rational::power2): removed incomplete method.
- see [ruby-dev:35195]. [ruby-core:17293]
-
-Sun Jun 22 14:16:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/readline/extconf.rb (have_readline_func): readline on Mac OS X
- needs headers to detect some functions.
-
-Sun Jun 22 09:51:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (rb_class_superclass): rdoc improvement, a patch from
- Gaston Ramos <ramos.gaston AT gmail.com> in [ruby-core:17371].
-
-Sun Jun 22 09:22:32 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * README.EXT: translated README.EXT.ja
-
-Sun Jun 22 00:42:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_osid, rb_w32_osver, CreateChild): XP is
- is different from Vista about pipe handle inheritance.
- fixed [ruby-core:17367], reported by Lars Christensen <larsch at
- belunktum.dk>
-
-Sun Jun 22 00:38:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * README.EXT.ja: add note about mark and free.
-
-Sun Jun 22 00:01:36 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (rb_io_binmode_p, argf_binmode_p, Init_IO): new method
- IO#binmode? and ARGF.binmode? [ruby-dev:35148]
-
-Sat Jun 21 17:33:50 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_spawn): no longer support P_WAIT.
-
-Sat Jun 21 16:46:09 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (native_sleep): must block reentrance when accessing
- th->unblock.
- fixed [ruby-core:17341], reported by Bill Kelly <billk at cts.com>
-
-Sat Jun 21 16:29:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (call_args2, open_args): removed.
-
- * parse.y (parser_yylex): unified warnings at space between method
- name and argument parenthesis. [ruby-dev:33943]
-
-Sat Jun 21 16:21:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_round): get rid of overflow.
-
-Sat Jun 21 15:57:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc#collect_first_comment): skip
- magic comment.
-
-Sat Jun 21 15:54:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check if fork works with pthread.
-
-Sat Jun 21 15:31:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot: ported to ruby.
-
- * tool/make-snapshot: fixed digests.
-
-Sat Jun 21 04:36:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/lib/bigdecimal/jacobian.rb (Jacobian::dfdxi):
- typo fixed (raize -> raise). [ruby-list:45101]
-
- * enumerator.c (enum_each_cons): typo in RDoc fixed.
-
-Sat Jun 21 00:45:34 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * tool/make-snapshot: do not use sha256sum; use BASERUBY instead
-
- * common.mk (dist): use tool/make-snapshot instead
-
-Fri Jun 20 16:34:14 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (Init_process): Process::Status#to_int removed.
- (PST2INT): defined.
- (pst_to_s): use PST2INT.
- (pst_inspect): ditto.
- (pst_equal): ditto.
- (pst_bitand): ditto.
- (pst_rshift): ditto.
- (pst_wifstopped): ditto.
- (pst_wstopsig): ditto.
- (pst_wifsignaled): ditto.
- (pst_wtermsig): ditto.
- (pst_wifexited): ditto.
- (pst_wexitstatus): ditto.
- (pst_success_p): ditto.
- (pst_wcoredump): ditto.
- (rb_f_system): ditto.
-
-Fri Jun 20 15:40:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_store, rb_ary_splice): not depend on unspecified
- behavior at integer overflow.
-
- * string.c (str_buf_cat): ditto.
-
-Fri Jun 20 12:39:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_detach_process): store detached process ID in the
- thread local storage. moved from lib/open3.rb.
-
-Fri Jun 20 11:57:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_sub_bang): should preserve replacement points
- since they may be altered in the yielded block.
-
-Fri Jun 20 11:07:56 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_memhash): randomize hash to avoid algorithmic
- complexity attacks.
- (rb_str_hash): use rb_memhash.
-
- * include/ruby/intern.h (rb_reset_random_seed): declared.
-
- * thread.c (rb_thread_atfork): call rb_reset_random_seed.
-
- * inits.c (rb_call_inits): call Init_RandomSeed at first.
-
- * random.c (seed_initialized): defined.
- (fill_random_seed): extracted from random_seed.
- (make_seed_value): extracted from random_seed.
- (rb_f_rand): initialize random seed at first.
- (initial_seed): defined.
- (Init_RandomSeed): defined.
- (Init_RandomSeed2): defined.
- (rb_reset_random_seed): defined.
- (Init_Random): call Init_RandomSeed2.
-
-Wed Jun 18 21:52:38 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * array.c (ary_new, rb_ary_initialize, rb_ary_store,
- rb_ary_splice, rb_ary_times): integer overflows should be
- checked. based on patches from Drew Yao <ayao at apple.com>
- fixed CVE-2008-2726
-
- * string.c (rb_enc_cr_str_buf_cat): fixed unsafe use of alloca,
- which led memory corruption. based on a patch from Drew Yao
- <ayao at apple.com> fixed CVE-2008-2726
-
-Fri Jun 20 03:26:00 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (rb_f_fork): NetBSD 4.0 or later can fork.
-
-Fri Jun 20 03:19:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/testunit/collector/test_dir.rb: r15825 made it unnecessary to
- change String to Symbol.
-
- * test/testunit/collector/test_objectspace.rb: ditto.
-
-Fri Jun 20 03:14:31 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems*, test/rubygems/*: Update to RubyGems 1.1.1 r1784 (pre
- 1.2).
-
-Fri Jun 20 03:01:59 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c: try to remove false positive of deadlock detection (second
- trial).
-
-Fri Jun 20 02:16:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/mathn.rb (Rational::power2): typo fixed. [ruby-core:17293]
-
-Fri Jun 20 02:11:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_gsub): should preserve last successful match
- data. [ruby-dev:35182]
-
-Fri Jun 20 01:07:28 2008 Koichi Sasada <ko1@atdot.net>
-
- * KNOWNBUGS.rb, bootstraptest/pending.rb: move a bug (?) to pending.
-
-Fri Jun 20 00:40:08 2008 Koichi Sasada <ko1@atdot.net>
-
- * proc.c (proc_new): fix to return Proc object if block is already
- in heap. [ruby-core:15711]
-
- * bootstraptest/test_proc.rb: add a test.
-
-Fri Jun 20 00:18:04 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread_win32.c (native_sleep): fix to decrement sleeper count.
-
-Thu Jun 19 23:48:45 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/net/http/test_http.rb: compare encodings of two strings before
- comparing themself, which suppress too big error output.
-
-Thu Jun 19 23:46:35 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/json/ext/parser/parser.rl, ext/json/ext/parser/parser.c: JSON
- text SHALL be encoded in Unicode.
-
-Thu Jun 19 23:17:56 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c, thread_win32.c, vm_core.h: try to remove false positive of
- deadlock detection.
-
-Thu Jun 19 21:38:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): check if compile before showing message.
-
-Thu Jun 19 21:35:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot: supported multiple snapshots.
-
-Thu Jun 19 20:37:00 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * lib/net/pop.rb (Net::POP3#set_all_uids): speed
- up. a patch from <m-sumi AT techfirm.co.jp> [ruby-list:45047]
-
-Thu Jun 19 17:44:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/etc/etc.c (Init_etc): define constant aliases Etc::Passwd
- and Etc::Group. [ruby-dev:35150]
-
-Thu Jun 19 17:37:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_alloc): specify 'inline' modifier.
-
- * string.c (str_alloc): remove cSymbol hack that no longer
- necessary.
-
- * string.c (scan_once): avoid retrieving encoding info unless
- necessary.
-
-Thu Jun 19 17:19:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_scan): String#scan should preserve last
- successful match data. [ruby-dev:35106]
-
-Thu Jun 19 16:49:36 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * missing/acosh.c (atanh): should set ERANGE to errno if parameter
- is the boundary case. fixed [ruby-dev:35155]
-
-Thu Jun 19 16:06:01 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tkextlib/tile/treeview.rb: cannot configure tags.
-
-Thu Jun 19 11:48:33 2008 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_enumerator.rb: fix to skip "with_memo" test.
-
-Thu Jun 19 11:40:55 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (vm_throw): fix "return" process from "lambda".
-
- * bootstraptest/test_proc.rb: add a test.
-
- * bootstraptest/pending.rb: add a pending bug.
-
-Thu Jun 19 00:33:40 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/etc/test_etc.rb: avoid infinite loop. [ruby-dev:35158]
-
-Wed Jun 18 23:07:19 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * gc.c (rb_newobj): prohibit call of rb_newobj() during gc.
- a patch from Sylvain Joyeux in [ruby-core:12099].
-
-Wed Jun 18 21:08:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (verbose_setter, opt_W_getter): fixed prototypes.
-
-Wed Jun 18 19:20:00 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ruby.c (opt_W_getter): use ruby_verbose directly instead of parameter
- because ruby_verbose is not a real variable, so the address of
- parameter is not collect.
-
-Wed Jun 18 18:31:03 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (errmap): add some pipe errors.
-
- * win32/win32.c (rb_w32_write): set errno when CRT's errno is EINVAL
- for pipe errors.
-
-Wed Jun 18 18:09:08 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (poll_child_status): set EINVAL to errno when
- GetExitCodeProcess() fails with ERROR_INVALID_HANDLE.
-
-Wed Jun 18 15:01:18 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_open_file): fs_encoding and fname_encoding is
- rb_encoding *.
- fixed [ruby-dev:35151]
-
-Wed Jun 18 14:30:06 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_open_file): not rb_enc_get_index but rb_enc_get.
-
-Wed Jun 18 13:49:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h (pipe): now pipe is textmode. although this
- change is experimental, it will be spec if no compatibility problem
- is reported.
-
-Wed Jun 18 12:05:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_object, marshal_dump, r_object0, marshal_load): search
- public methods only. [ruby-core:17283]
-
- * object.c (convert_type): ditto.
-
- * lib/singleton.rb (Singleton#_dump): conversion method should be
- public.
-
-Wed Jun 18 10:18:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/etc/etc.c (etc_passwd, etc_group): fixed rdoc. a patch from
- okkez <okkez000 AT gmail.com> in [ruby-dev:35141].
-
-Wed Jun 18 08:58:16 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/*: Fix errors for 1.9.
-
- * gem_prelude.rb: Only remove methods from gem_prelude.rb when
- loading real RubyGems.
-
-Wed Jun 18 07:03:30 2008 Eric Hodel <drbrain@egment7.net>
-
- * lib/rubygems/*: Update to RubyGems r1778 (pre 1.2).
-
-Wed Jun 18 04:27:58 2008 Koichi Sasada <ko1@atdot.net>
-
- * KNOWNBUGS.rb, bootstraptest/pending.rb: move pending bug.
-
-Wed Jun 18 04:24:20 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c, vm_insnhelper.c: fix escape process with "break" and "return"
- syntax in "lambda". [ ruby-Bugs-19304 ], [ruby-core:17164]
-
- * KNOWNBUGS.rb, bootstraptest/test_proc.rb: add/move solved test.
-
-Wed Jun 18 01:51:10 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: cannot access class variable from
- singleton method.
-
-Wed Jun 18 00:03:33 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * dir.c (Init_Dir): dir_foreach() takes variable argument.
-
-Tue Jun 17 23:04:24 2008 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/net/telnet.rb: Fixing Telnet#wairfor() which was broken by
- changes to the Kernel::Integer() method. [ruby-core:17272]
-
-Tue Jun 17 23:02:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (opt_W_getter): made a hooked variable.
-
-Tue Jun 17 22:04:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * enc/euc_jp.c (property_name_to_ctype): core dumped when sizeof(int)
- differs from sizeof(long). [ruby-dev:35131]
-
- * enc/shift_jis.c (property_name_to_ctype): ditto.
-
- * enc/unicode.c (onigenc_unicode_property_name_to_ctype): ditto.
-
-Tue Jun 17 20:32:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (miniruby$(EXEEXT)): $(PREP) isn't always same as
- miniruby, and tests, debug, etc have no meaning when
- cross-compiling.
-
-Tue Jun 17 18:39:11 2008 Ryan Davis <ryand-ruby@zenspider.com>
-
- * common.mk: fixed dependencies on miniruby.
-
-Tue Jun 17 18:11:01 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h (pipe): expand pipe buffer size.
-
-Tue Jun 17 17:07:35 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (CreateChild): no need to inherit handles here because
- spawn'ed child cannot detect that STDIN is closed.
-
-Tue Jun 17 06:32:55 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * dir.c (dir_data): add intenc and extenc.
-
- * dir.c (dir_s_alloc): ditto.
-
- * dir.c (dir_initialize): now accept internal_encoding and
- external_encoding.
-
- * dir.c (dir_s_open): changed for dir_initialize.
-
- * dir.c (dir_open_dir): ditto.
-
- * dir.c (dir_foreach): changed for dir_open_dir.
-
- * dir.c (dir_entries): changed for dir_open_dir.
-
- * dir.c (dir_enc_str): defined.
-
- * dir.c (dir_path): use dir_enc_str.
-
- * dir.c (dir_read): ditto.
-
- * dir.c (dir_each): ditto.
-
-Tue Jun 17 06:28:57 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (io_set_encoding): defined.
-
- * io.c (rb_open_file): convert path on Windows and Mac OS X.
-
- * io.c (open_key_args): use io_set_encoding and now accept
- internal_encoding and external_encoding.
-
-Tue Jun 17 06:26:28 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_filesystem_encoding): defined.
-
- * include/ruby/encoding.h (rb_filesystem_encoding): added.
-
-Tue Jun 17 06:24:28 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/syck/rubyext.c: add encoding header.
-
-Tue Jun 17 01:52:50 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: SEGV when exit.
-
- * ext/tk/lib/tk.rb: add a check for safety to Tk.exit.
-
- * ext/tk/sample/irbtkw.rbw: freezes when receives SIGINT.
-
-Mon Jun 16 21:58:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_each, strio_readlines): IO#each and
- IO#readlines do not affect $_. [ruby-core:17277]
-
-Mon Jun 16 18:52:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/thwait.rb (ThreadsWait): Exception2MessageMapper no longer has
- extend_to method. [ruby-core:17267]
-
-Mon Jun 16 14:46:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/e2mmap.rb (E2MM.def_e2message): typo.
-
-Mon Jun 16 09:43:27 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (enumerator_with_object, Init_Enumerator):
- Temporarily back out with_memo, for which we need a better name.
-
-Mon Jun 16 07:14:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_readline, strio_each)
- (strio_readlines): set lastline. [ruby-core:17257]
-
-Mon Jun 16 01:49:39 2008 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (rb_f_block_given_p): fix to skip class frame.
- [ruby-core:14813]
-
- * KNOWNBUGS.rb, bootstraptest/test_method.rb: move solved test.
-
-Mon Jun 16 01:48:08 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_dump.c (vm_stack_dump_raw): disable verbose debug output.
-
-Mon Jun 16 01:33:08 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_core.h, thread.c: rename global_interpreter_lock to
- global_vm_lock.
-
-Sun Jun 15 18:40:35 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/syck/rubyext.c (yaml_org_handler): associate encoding.
-
- * ext/syck/rubyext.c (syck_genericresolver_node_import): ditto.
-
-Sun Jun 15 18:17:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (rb_vm_t), vm.c (rb_vm_mark): moved preallocated special
- exceptions.
-
- * eval.c (Init_eval), gc.c (Init_GC), proc.c (Init_Proc): freeze
- preallocated special exceptions.
-
- * eval.c (rb_longjmp): duplicate the thrown exception to set backtrace
- if it was frozen.
-
- * gc.c (rb_memerror): raise nomem_error without backtrace if failed to
- make backtrace.
-
-Sat Jun 14 22:52:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_sysread): should not raise at empty
- read. a patch from Arthur Schreiber at [ruby-core:17245].
-
-Sat Jun 14 16:55:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): no need to expand root path which has no
- short file name. [ruby-dev:35095]
-
-Sat Jun 14 11:59:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.h (STACK_UPPER): moved from gc.c
-
- * thread.c, thread_{pthread,win32}.c (ruby_init_stack,
- ruby_thread_init_stack): moved stack initialization from gc.c.
-
-Sat Jun 14 11:57:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.h (STACK_UPPER): moved from gc.c
-
- * thread.c, thread_{pthread,win32}.c (ruby_init_stack,
- ruby_thread_init_stack): moved stack initialization from gc.c.
-
-Sat Jun 14 07:52:53 2008 Tanaka Akira <akr@fsij.org>
-
- * gc.c (ruby_initial_gc_stress): defined.
- (ruby_initial_gc_stress_ptr): defined.
-
- * debug.c (set_debug_option): use ruby_initial_gc_stress_ptr for
- gc_stress option.
-
-Sat Jun 14 00:09:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (ruby_gc_stress): moved to rb_objspace_t.
-
- * gc.c (gc_stress_get, gc_stress_set): VM local attribute.
-
- * signal.c (sigsegv): ditto.
-
-Fri Jun 13 21:55:48 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (nurat_equal_p): Rational(0,x) and 0 are equivalent,
- anyway.
-
-Fri Jun 13 21:26:39 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (string_to_c, nucomp_s_convert): preserve the current
- backref.
-
- * rational.c (string_to_r, nurat_s_convert): ditto.
-
- * include/ruby/intern.h (rb_match_busy): added a declaration.
-
-Fri Jun 13 18:08:10 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/time.rb (Time.xmlschema): don't accept decimal dot without
- fractional digits. fractional digits handling simplified.
-
-Fri Jun 13 17:20:40 2008 wanabe <s.wanabe@gmail.com>
-
- * complex.c (string_to_c_internal): save and restore backref.
- fixed [ruby-dev:34991]
-
-Fri Jun 13 17:06:20 2008 wanabe <s.wanabe@gmail.com>
-
- * rational.c (string_to_r_internal): save and restore backref.
- fixed [ruby-dev:34990]
-
-Fri Jun 13 14:41:26 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * README.EXT.ja: update about Fixnum. reported in
- <http://www.tmtm.org/ja/tdiary/?date=20080611#p01>
-
- * README.EXT.ja: describe about StringValueCStr().
-
- * README.EXT: ditto.
-
-Fri Jun 13 14:24:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_memerror): exit with EXIT_FAILURE instead of magic number.
-
- * gc.c (ruby_stack_check): STACK_LENGTH should be less than
- STACK_LEVEL_MAX.
-
-Fri Jun 13 12:55:37 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (sort_by_i): use NODE_DOT2 instead of NODE_MEMO to avoid
- extra calls to is_pointer_to_heap() in GC.
-
- * enum.c (enum_zip): ditto.
-
-Fri Jun 13 00:41:58 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_thread.rb: add a test.
-
-Thu Jun 12 23:30:11 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (mutex_unlock): fix cond_notified consistency.
-
-Thu Jun 12 22:19:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (native_sleep): fixed previous commit.
-
-Thu Jun 12 21:59:17 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c, vm_core.h, vm.c, thread_pthread.c, thread_win32.c: add
- deadlock detection. [ruby-dev:35044]
-
- * bootstraptest/test_thread.rb: add tests for above.
-
-Thu Jun 12 21:39:55 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: refactoring.
-
- * rational.c: ditto.
-
-Thu Jun 12 17:11:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regint.h: undefine USE_CAPTURE_HISTORY which is mentioned as
- unsupported in the Onigiruma document.
-
-Thu Jun 12 13:36:54 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (rb_intern): use rb_intern2 with strlen for
- constant symbols to optimize strlen.
-
-Thu Jun 12 08:47:51 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (read_all): should use io_read_encoding(), not
- io_input_encoding().
-
- * io.c (rb_io_getline_1): reduce calling of io_read_encoding().
-
- * string.c (rb_str_scan): need not to restore $~ value, so avoid
- pinning match object.
-
-Thu Jun 12 02:49:40 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/stringio/stringio.c (strio_init): rewind when reopened.
-
-Thu Jun 12 02:43:27 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * array.c (rb_ary_zip): ANSI style.
-
-Thu Jun 12 02:25:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_reopen): clear read buffer.
-
-Thu Jun 12 00:56:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tk: check proper conditions. [ruby-dev:35047]
-
-Wed Jun 11 23:33:13 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_fread): bypass buffered read if reading buffer is empty.
-
- * io.c (remain_size): do not add extra one byte.
-
-Wed Jun 11 12:15:17 2008 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (assert_normal_exit): hide stderr output
- when success.
-
-Wed Jun 11 09:26:43 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (encs): need to pass miniruby path for windows.
-
-Wed Jun 11 05:53:20 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c, eval_intern.h (PASS_PASSED_BLOCK):
- set a VM_FRAME_FLAG_PASSED flag to skip this frame when
- searching ruby-level-cfp.
-
- * eval.c, eval_intern.h, proc.c: fix to check cfp. if there is
- no valid ruby-level-cfp, cause RuntimeError exception.
- [ruby-dev:34128]
-
- * vm_core.h, vm_evalbody.c, vm.c, vm_dump.c, vm_insnhelper.c,
- insns.def: rename FRAME_MAGIC_* to VM_FRAME_MAGIC_*.
-
- * KNOWNBUGS.rb, bootstraptest/test*.rb: move solved bugs.
-
-Wed Jun 11 05:55:31 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: SEGV when tcltk-stubs is enabled.
-
- * ext/tk/tcltklib.c: avoid error on a shared object.
-
- * ext/tk/extconf.rb: support --with-tcltkversion
-
- * ext/tk/README.tcltklib: add document about --with-tcltkversion
-
- * ext/tk/lib/tk.rb, ext/tk/lib/multi-tk.rb, ext/tk/lib/remote-tk.rb:
- not work on $SAFE==4
-
- * ext/tk/lib/multi-tk.rb: Object#methods returns Symbols on Ruby1.9.
-
- * ext/tk/lib/tk/timer.rb: add TkTimer#at_end(proc) to register the
- procedure which called at end of the timer.
-
- * ext/tk/lib/tk.rb, ext/tk/lib/tk/itemfont.rb, ext/tk/lib/font.rb:
- support __IGNORE_UNKNOWN_CONFIGURE_OPTION__ about font options.
-
- * ext/tk/lib/*: treat __IGNORE_UNKNOWN_CONFIGURE_OPTION__
-
- * ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb,
- ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb,
- ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb: bug fix.
-
- * ext/tk/lib/tk/text.rb: typo. call a wrong method.
-
- * ext/tk/lib/tk/itemconfig.rb: ditto.
-
- * ext/tk/lib/tk.rb, ext/tk/lib/tk/itemconfig.rb,
- ext/tk/lib/tk/canvas.rb: support alias names of option keys.
-
- * ext/tk/lib/tk/grid.rb: lack of module-method definitions.
-
- * ext/tk/lib/tk/pack.rb, ext/tk/lib/tk/grid.rb: increase supported
- parameter patterns of configure method.
-
- * ext/tk/lib/tk.rb: add TkWindow#grid_anchor, grid_column, grid_row.
-
- * ext/tk/lib/tk/wm.rb: methods of Tk::Wm_for_General module cannot
- pass the given block to methods of Tk::Wm module.
-
- * ext/tk/lib/tk/wm.rb: Wm#overrideredirect overwrites argument to
- an invalid value.
-
- * ext/tk/lib/tk.rb: fix memory (object) leak bug.
-
- * ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: fix memory leak.
-
- * ext/tk/sample/demos-jp/aniwave.rb, ext/tk/sample/demos-en/aniwave.rb:
- bug fix.
-
- * ext/tk/lib/tkextlib/blt/component.rb,
- ext/tk/lib/tkextlib/tile/tentry.rb,
- ext/tk/lib/tkextlib/tile/treeview.rb: ditto.
-
- * ext/tk/lib/tkextlib/tile/tpaned.rb: improve TPaned#add.
-
- * ext/tk/sample/demos-jp/widget, ext/tk/sample/demos-en/widget,
- ext/tk/sample/demos-jp/style.rb, ext/tk/sample/demos-en/style.rb,
- ext/tk/sample/demos-jp/bind.rb, ext/tk/sample/demos-en/bind.rb:
- bug fix.
-
- * ext/tk/sample/ttk_wrapper.rb: ditto.
-
- * ext/tk/sample/ttk_wrapper.rb: support "if __FILE__ == $0" idiom.
-
- * ext/tk/sample/tktextio.rb: add binding for 'Ctrl-u' at console mode.
-
- * ext/tk/lib/tkextlib/tile.rb, ext/tk/lib/tkextlib/tile/style.rb,
- ext/tk/sample/ttk_wrapper.rb: improve treating and control themes.
- add Tk::Tile.themes and Tk::Tile.set_theme(theme).
-
- * ext/tk/lib/tkextlib/tile.rb: lack of autoload definitions.
-
- * ext/tk/lib/tkextlib/tile/tnotebook.rb: cannot use kanji (not UTF-8)
- characters for headings.
-
- * ext/tk/lib/tkextlib/tkDND/shape.rb: wrong package name.
-
- * ext/tk/tkutil/tkutil.c: improve handling callback-subst-keys.
- Now, support longnam-keys (e.g. '%CTT' on tkdnd-2.0; however, still
- not support tkdnd-2.0 on tkextlib), and symbols of parameters (e.g.
- :widget=>'%W', :keycode=>'%k', '%x'=>:x, '%X'=>:root_x, and so on;
- those are attributes of event object). It means that Ruby/Tk accepts
- not only "widget.bind(ev, '%W', '%k', ...){|w, k, ...| ... }", but
- also "widget.bind(ev, :widget, :keycode, ...){|w, k, ...| ... }".
- It is potentially incompatible, when user passes symbols to the
- arguments of the callback block (the block receives the symbols as
- strings). I think that is very rare case (probably, used by Ruby/Tk
- experts only). When causes such trouble, please give strings instead
- of such symbol parameters (e.g. call Symbol#to_s method).
-
- * ext/tk/lib/tk/event.rb, ext/tk/lib/tk/validation.rb,
- ext/tk/lib/tkextlib/blt/treeview.rb,
- ext/tk/lib/tkextlib/winico/winico.rb: ditto.
-
- * ext/tk/tkutil/tkutil.c: strings are available on subst_tables on
- TkUtil::CallbackSubst class (it is useful on Ruby 1.9).
-
- * ext/tk/lib/tk/spinbox.rb, ext/tk/lib/tkextlib/iwidgets/hierarchy.rb,
- ext/tk/lib/tkextlib/iwidgets/spinner.rb,
- ext/tk/lib/tkextlib/iwidgets/entryfield.rb,
- ext/tk/lib/tkextlib/iwidgets/calendar.rb,
- ext/tk/lib/tkextlib/blt/dragdrop.rb,
- ext/tk/lib/tkextlib/tkDND/tkdnd.rb,
- ext/tk/lib/tkextlib/treectrl/tktreectrl.rb,
- ext/tk/lib/tkextlib/tktable/tktable.rb: disable code piece became
- unnecessary by reason of the changes of ext/tk/tkutil/tkutil.c.
-
- * ext/tk/lib/tk.rb, ext/tk/lib/multi-tk.rb: change strategy to define
- the constant WITH_ENCODING.
-
- * ext/tk/lib/tk.rb: fix bug on Tk::Encoding.tk_encoding_names.
-
-Wed Jun 11 03:40:37 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/find.rb (Find#find): Return an enumerator if no block is
- given.
-
-Wed Jun 11 01:28:12 2008 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/intern.h, proc.c: revert rb_proc_call() and
- create rb_proc_call_with_block() instead.
-
- * include/ruby/ruby.h, eval_jump.c, thread.c, vm_insnhelper.c:
- rb_blockptr should not be exposed.
-
-Tue Jun 10 21:07:19 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_float.rb: add tests. [ruby-dev:35009]
-
-Tue Jun 10 20:55:57 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_s_convert): need not to initialize optional
- argument for rb_scan_args().
-
-Tue Jun 10 20:13:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: negate default of --without-ext if --with-ext is
- given.
-
- * ext/extmk.rb: negate default of --without-ext.
-
-Tue Jun 10 17:43:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_shuffle_bang): update RDoc. [ruby-dev:35034]
-
-Tue Jun 10 17:30:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_obj_instance_exec, rb_mod_module_exec):
- added prototypes.
-
-Tue Jun 10 17:00:29 2008 wanabe <s.wanabe@gmail.com>
-
- * util.c (ruby_strtod): ruby_strtod don't allow a trailing
- decimal point like "7.". [ruby-dev:34835] [ruby-dev:35009]
-
-Tue Jun 10 13:48:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * rational.c (nurat_s_convert): need not to initialize optional
- argument for rb_scan_args().
-
-Tue Jun 10 12:58:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/wait/wait.c (FIONREAD_POSSIBLE_P): suppress warnings.
-
-Tue Jun 10 12:43:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (CONST_ID_CACHE): fixed statement expression.
-
-Tue Jun 10 11:25:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (rb_argv0): revised for ext/tk.
-
- * include/ruby/encoding.h: not to use varargs.h since requiring C89.
-
-Tue Jun 10 00:50:51 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * include/ruby/ruby.h, vm_core.h: add a type rb_blockptr.
-
- * vm_insnhelper.c (vm_yield_with_cfunc): vm_yield_with_cfunc receives
- blockptr and passes it to iterating block.
-
- * proc.c (rb_proc_call), include/ruby/intern.h: rb_proc_call receives
- blockptr. "rb_proc_call(self, args, blockptr)" in C corresponds to
- "self.call(*args, &block)" in Ruby.
-
- * proc.c (proc_call): pass blockptr to block that is written in C.
-
- * proc.c (curry): receive blockptr and pass it to original proc.
- [ruby-core:15551]
-
- * vm.c (invoke_block_from_c): fix for change of vm_yield_with_cfunc.
-
- * thread.c (call_trace_proc), eval_jump.c (rb_call_end_proc): fix for
- change of rb_proc_call.
-
-Tue Jun 10 00:10:49 2008 Tanaka Akira <akr@fsij.org>
-
- * common.mk (test-knownbug): give $(OPTS) for bootstraptest/runner.rb.
-
-Mon Jun 9 23:10:50 2008 Tanaka Akira <akr@fsij.org>
-
- * eval.c (Init_stack): don't declare. it is a macro now.
-
-Mon Jun 9 22:46:47 2008 wanabe <s.wanabe@gmail.com>
-
- * compile.c : treat []&&= in virtually the same way as []||=.
- [ruby-dev:34679]
-
-Mon Jun 9 21:17:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/depend (clean): remove build directories.
-
- * test_knownbug.rb -> KNOWNBUGS.rb: renamed.
-
- * common.mk: apply above change.
-
-Mon Jun 9 21:14:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (configuration): set flags.
-
-Mon Jun 9 21:09:02 2008 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb -> ./test_knownbug.rb: moved.
-
- * common.mk: add a rule "test-knownbug".
-
-Mon Jun 9 21:00:32 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_s_convert): can accept Complex('i').
- [ruby-dev:34991]
-
-Mon Jun 9 18:25:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (CONST_ID): constant ID cache for non-gcc.
-
- * *.c: no cache in init functions.
-
-Mon Jun 9 17:56:30 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (Set#delete_if): Call to_a.
- (SortedSet#delete_if, TC_SortedSet#test_sortedset): Use super to
- yield elements in sorted order; [ruby-core:17144] by Arthur
- Schreiber.
- (SortedSet#each, SortedSet#each, TC_Set#test_each)
- (TC_SortedSet#test_sortedset): Return self; [ruby-dev:35002] by
- Arthur Schreiber.
-
-Mon Jun 9 17:47:09 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (fptr_finalize): close IO object if fd is already closed.
- (rb_p): call rb_io_write just once.
-
-Mon Jun 9 15:37:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (require_libraries): req_list may be NULL. [ruby-dev:35008]
-
-Mon Jun 9 14:18:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (struct rb_vm_struct): moved src_encoding_index,
- ruby_debug, ruby_verbose, and rb_progname.
-
- * ruby.c (rb_argv0): no longer used.
-
- * ruby.c (struct cmdline_options): moved setids and req_list, and the
- latter is now an array, to prevent memory leak.
-
- * ruby.c (cmdline_options_init): added.
-
- * ruby.c (add_modules, require_libraries, init_ids, forbid_setid): use
- struct cmdline_options.
-
- * vm.c (vm_init2): initialize src_encoding_index.
-
- * vm.c: getters/setters for ruby_{debug,verbose}.
-
-Mon Jun 9 09:54:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (Init_stack): make to call ruby_init_stack.
-
-Mon Jun 9 08:12:40 2008 wanabe <s.wanabe@gmail.com>
-
- * vm_insnhelper.c, vm.c, proc.c : revert r17021. [ruby-dev:34997]
-
-Mon Jun 9 03:12:23 2008 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/pending.rb: move/remove solved issues.
-
- * bootstraptest/test_class.rb: ditto.
-
-Mon Jun 9 02:32:58 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/zlib/zlib.c (rb_deflate_init_copy): Copy buffers as well.
- [ruby-list:45018]
-
-Sun Jun 8 22:22:20 2008 wanabe <s.wanabe@gmail.com>
-
- * vm_insnhelper.c, vm.c, proc.c (proc_call): allow call method with
- block that both is written in C. [ruby-dev:34273] [ruby-core:15551]
-
- * proc.c (curry): use proc_call instead of rb_proc_call.
- [ruby-dev:34273] [ruby-core:15551]
-
-Sun Jun 8 21:50:27 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/zlib/test_zlib.rb: add tests to achieve over 90% test coverage
- of zlib.
-
-Sun Jun 8 20:12:47 2008 wanabe <s.wanabe@gmail.com>
-
- * vm_insnhelper.c (vm_throw): regard break as return in lambda.
- [ruby-dev:34646]
-
-Sun Jun 8 19:17:59 2008 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: add a build option "CALC_EXACT_MALLOC_SIZE".
- This option enables to calculate exact size of current
- allocated size by malloc(). You can access these information
- with GC.malloc_allocated_size and GC.malloc_allocations.
- This option consume additional memory as a header of each memory
- object. This option also helps to find out xmalloc()/xfree()
- consistency. If you get trouble with this option, some extension
- using "free()" instead of "xfree()".
- This options is disabled by default.
-
-Sun Jun 8 18:15:38 2008 Koichi Sasada <ko1@atdot.net>
-
- * array.c, bignum.c, cont.c, dir.c, dln.c, encoding.c, enumerator.c,
- enumerator.c (enumerator_allocate), eval_jump.c, file.c, hash.c,
- io.c, load.c, pack.c, proc.c, random.c, re.c, ruby.c, st.c,
- string.c, thread.c, thread_pthread.c, time.c, util.c, variable.c,
- vm.c, gc.c:
- allocated memory objects by xmalloc (ruby_xmalloc) should be
- freed by xfree (ruby_xfree).
-
- * ext/curses/curses.c, ext/dbm/dbm.c, ext/digest/digest.c,
- ext/gdbm/gdbm.c, ext/json/ext/parser/parser.c,
- ext/json/ext/parser/unicode.c, ext/openssl/ossl_cipher.c,
- ext/openssl/ossl_hmac.c, ext/openssl/ossl_pkey_ec.c,
- ext/sdbm/init.c, ext/strscan/strscan.c, ext/zlib/zlib.c:
- ditto.
-
-Sun Jun 8 01:15:11 2008 Tanaka Akira <akr@fsij.org>
-
- * hash.c (hash_i): make Hash#hash order insensitive.
- (rb_hash_dup): use DUPSETUP.
-
-Sat Jun 7 23:47:35 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/zlib/zlib.c (rb_deflate_initialize, Init_zlib): Fix up
- initialize_copy; [ruby-list:45016].
-
-Sat Jun 7 22:15:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (VENDOR_DIR): use LIBDIR instead of PREFIX as well as
- SITE_DIR. a patch from Richard Brown <rbrown AT exherbo.org> in
- [ruby-core:17129].
-
-Sat Jun 7 21:37:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_f_open), re.c (rb_reg_search), transcode.c (str_transcode):
- suppress warnings.
-
- * util.c (quorem, rv_alloc, nrv_alloc): only used in dtoa().
-
-Sat Jun 7 16:06:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (CFLAGS, CXXFLAGS): append default flags.
-
-Sat Jun 7 01:23:59 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (rb_open_file, rb_io_s_sysopen): fmode should be unsigned int.
- fixed [ruby-dev:34979]
-
-Fri Jun 6 23:46:19 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm_insnhelper.c (vm_callee_setup_arg): check simple flag before
- calling setup_arg function(). this change reduce function call.
-
-Fri Jun 6 21:51:46 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (COMMON_HEADERS): include ws2tcpip.h.
-
- * ext/socket/addrinfo.h (addrinfo, getaddrinfo, getnameinfo,
- freehostent, freeaddrinfo): undef before define because these are
- macros in some versions of Windows SDK.
-
- merged from ruby_1_8.
-
-Fri Jun 6 18:25:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/iconv/utils.rb (default_test): override not to croak.
-
-Fri Jun 6 16:41:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h: include ws2tcpip.h. fixed [ruby-Bugs-20528]
-
-Fri Jun 6 15:05:02 2008 Tanaka Akira <akr@fsij.org>
-
- * gc.c (count_objects): clear hash after counting objects.
-
-Fri Jun 6 12:43:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_dir.rb (TestDir::test_glob): glob file names not sorted.
-
-Fri Jun 6 00:05:33 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/time.rb (Time.xmlschema): don't use float. fix
- http://rubyforge.org/tracker/index.php?func=detail&group_id=426&atid=1698&aid=20504
-
-Thu Jun 5 23:56:18 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_gc.rb: add tests to achieve over 90% test coverage of
- gc.c.
-
- * test/ruby/test_objectspace.rb: ditto.
-
- * test/ruby/test_marshal.rb: ditto.
-
-Thu Jun 5 23:40:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * gc.c (rb_objspace_alloc): this function is needed only when
- ENABLE_VM_OBJSPACE macro is defined.
-
- * vm.c: ditto.
-
-Thu Jun 5 23:31:21 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/stringio/test_stringio.rb: add tests to achieve over 95% test
- coverage of stringio.
-
- * test/strscan/test_stringscanner.rb: ditto for strscan.
-
-Thu Jun 5 23:25:34 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * eval.c (ruby_finalize_0): clear trace_func after executing END
- procs.
-
- * thread.c: fix typo.
-
-Thu Jun 5 22:50:50 2008 Tanaka Akira <akr@fsij.org>
-
- * gc.c (os_obj_of): heaps may be modified in yield.
-
-Thu Jun 5 21:46:50 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * st.c (st_reverse_foreach): comment out unused function.
-
- * util.c (dtoa): ditto.
-
-Thu Jun 5 20:30:46 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_initialize):
- Add a null check for ssl; submitted by akira yamada
- in [ruby-dev:34950].
-
- * ext/openssl/ossl_ssl.c (Init_ossl_ssl): Define OP_NO_TICKET if
- SSL_OP_NO_TICKET is present; submitted by akira yamada
- in [ruby-dev:34944].
-
- * test/openssl/test_ssl.rb (OpenSSL#test_server_session): Add a
- workaround for the case where OpenSSL is configured with
- --enable-tlsext; submitted by akira yamada in [ruby-dev:34944].
-
-Thu Jun 5 20:24:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * thread.c (thread_set_trace_func_m): fix check for proc argument.
-
-Thu Jun 5 20:17:29 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/rexml/document.rb (REXML::Document:write): leaky modification
- trans -> transitive. [ruby-dev:32040], r13686
-
- * lib/rexml/text.rb (Text.check): fix check for illegal character.
-
-Thu Jun 5 14:03:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_create): find encoding without options.
-
-Thu Jun 5 07:48:32 2008 Koichi Sasada <ko1@atdot.net>
-
- * string.c (hash): should be "static".
-
-Thu Jun 5 01:47:18 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_transcode.rb: add tests for iso-2022-jp.
-
-Thu Jun 5 01:27:42 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_process.rb: add tests.
-
-Wed Jun 4 23:10:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/zlib/zlib.c (rb_gzfile_set_mtime): fix typo.
-
-Wed Jun 4 18:53:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_alloc): RDoc updated. a patch from Gaston
- Ramos <ramos.gaston at gmail.com> in [ruby-core:17073].
-
-Wed Jun 4 18:36:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rdoc.rb: massive spelling correction patch from Evan Farrar
- <evanfarrar at gmail.com> in [ruby-doc:1382] applied.
-
-Wed Jun 4 17:52:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_iconv): fix for length argument and now
- allows range. [ruby-core:17092]
-
-Wed Jun 4 15:45:41 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (enumerator_with_index, enumerator_with_memo): Fix
- grammo in rdoc.
-
-Wed Jun 4 13:06:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (CFLAGS, CXXFLAGS): include additional flags to
- CFLAGS and CXXFLAGS while configuration.
-
-Tue Jun 3 23:06:35 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/strscan/strscan.c (strscan_scan_full, strscan_search_full): fix
- document.
-
-Tue Jun 3 22:37:26 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/strscan/strscan.c (strscan_exist_p): fix document.
-
-Tue Jun 3 22:33:29 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_dir.rb: add tests to achieve over 90% test coverage
- of dir.c.
-
- * test/ruby/test_encoding.rb: add tests for dummy?, name_list and
- aliases.
-
- * test/ruby/test_marshal.rb: add some tests.
-
-Tue Jun 3 22:25:51 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/etc/test_etc.rb: new tests for etc.
-
-Tue Jun 3 19:35:02 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (enumerator_with_memo): New method: with_memo().
-
-Tue Jun 3 20:04:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (miniruby$(EXEEXT)): miniruby cannot be
- written by miniruby itself.
-
-Tue Jun 3 19:33:22 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (enumerator_init_copy): Take care of
- initialize_copy as well as initialize.
-
-Tue Jun 3 16:06:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): fix for non-existent files and SFN of
- symlinks. [ruby-talk:303736]
-
-Tue Jun 3 15:12:01 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (Set#classify): Back out the `group_by' alias.
- Better think twice.
-
-Tue Jun 3 15:00:22 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (Set#collect, Set#select): Back out. I thought it
- was consistent but turned out to be wrong.
-
-Tue Jun 3 13:41:08 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (Set#collect, Set#select): Override Enumerable
- methods and make them return a set. [ruby-core:17055]
- (Set#delete_if, Set#collect!, Set#reject!, Set#classify)
- (Set#divide, Set#delete_if): Return an enumerator if no block is
- given.
- (Set#classify): Define an alias `group_by' to override that of
- Enumerable.
-
-Tue Jun 3 13:35:40 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (run_exec_pgroup): C99 ism.
-
-Tue Jun 3 12:51:57 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (enumerator_allocate, enumerator_ptr): Properly
- detect if the object is initialized and raise error when
- appropriate.
- (enumerator_initialize): Fix a typo in rdoc. [ruby-core:17052]
-
-Tue Jun 3 01:21:51 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_method.rb: add a test.
-
-Tue Jun 3 00:26:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * marshal.c (w_object): add a check for modification of array during
- its dump.
-
-Mon Jun 2 22:27:57 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * enc/iso_8859_5.c: Large omicron should lowercase to small omicron.
-
- * test/ruby/test_big5.rb, test/ruby/test_cp949.rb,
- test/ruby/test_euc_jp.rb, test/ruby/test_euc_kr.rb,
- test/ruby/test_euc_tw.rb, test/ruby/test_gb18030.rb,
- test/ruby/test_gbk.rb, test/ruby/test_iso_8859.rb,
- test/ruby/test_koi8.rb, test/ruby/test_shift_jis.rb,
- test/ruby/test_windows_1251.rb: new tests for encoding.
-
- * test/ruby/test_utf16.rb, test/ruby/test_utf32.rb,
- test/ruby/test_regexp.rb: add tests.
-
-Mon Jun 2 21:56:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_file.rb: add tests for uninitialized object.
-
- * test/ruby/test_class.rb: ditto.
-
- * test/ruby/test_thread.rb: ditto.
-
-Mon Jun 2 21:44:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * re.c: fix SEGV by Regexp.allocate.names, Match.allocate.names, etc.
-
- * test/ruby/test_regexp.rb: add tests for above.
-
- * io.c: fix SEGV by IO.allocate.print, etc.
-
- * test/ruby/test_io.rb: add tests for above.
-
-Mon Jun 2 19:17:47 2008 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_argf.rb (teardown): remove renamed temporary files.
-
-Mon Jun 2 18:51:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/un.rb (wait_writable): wait until target files can be
- written actually.
-
- * win32/Makefile.sub (LDSHARED_0, LINK_SO): get rid of failure of
- mt.exe.
-
-Mon Jun 2 16:26:17 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/delegate.rb (Delegator::MethodDelegation#respond_to):
- respond_to? should now take optional second argument; submitted
- by Jeremy Kemper <jeremy at bitsweat.net> in [ruby-core:17045].
-
-Mon Jun 2 16:14:18 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/erb.rb (ERB::Compiler::TrimScanner#scan_line): Oops. This
- change did not apply to trunk. Backed out.
-
-Mon Jun 2 16:08:24 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/erb.rb (ERB::Compiler::TrimScanner#scan_line): Fix a bug
- where tokens are not yielded one by one.
-
- * test/erb/test_erb.rb (TestERBCore#_test_01)
- (TestERBCore#test_02_safe_04): The expected value should come
- first for assert_equal().
-
-Mon Jun 2 13:06:38 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * mkconfig.rb: hide build path from rbconfig.rb.
-
-Mon Jun 2 08:46:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_strtod, dtoa): initialize more variables for error
- handling.
-
-Mon Jun 2 04:55:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * suppress warnings on cygwin, mingw and mswin.
-
-Mon Jun 2 04:35:32 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/gb18030.c (gb18030_code_to_mbc): add 0x80000000
- for 4bytes character.
-
-Mon Jun 2 03:52:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (set_arg0): reverted used variable definition.
-
-Mon Jun 2 03:23:25 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/gb18030.c (gb18030_mbc_to_code): mask by 0x7FFFFFFF
- because OnigCodePoint will be used as 32bit signed int.
- Masking by 0x7FFFFFFF is ok on GB18030;
- Minimum 4bytes character is 0x81308130.
-
-Sun Jun 1 22:29:35 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * rational.c (string_to_r_internal): use rb_isdigit.
-
- * marshal.c (long_toobig): use %zd.
-
- * ruby.c (set_arg0): move unused variable definition.
-
-Sun Jun 1 12:18:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * insns.def (DEFINE_INSN): subtract of pointers is ptrdiff_t.
- this is not int on 64bit system.
-
- * vm_dump.c (control_frame_dump): ditto.
-
- * vm_dump.c (stack_dump_each): ditto.
-
- * vm_dump.c (debug_print_register): ditto.
-
- * vm_dump.c (debug_print_pre): ditto.
-
- * transcode.c (str_transcode): ditto.
-
-Sun Jun 1 10:32:18 2008 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/envutil.rb (assert_normal_exit): show coredump status.
-
-Sat May 31 23:33:34 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * README, README.ja: Add a note about default C flags.
-
-Sat May 31 23:02:00 2008 Tanaka Akira <akr@fsij.org>
-
- * gc.c (count_objects): clear given hash.
-
-Sat May 31 20:28:10 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_regexp.rb: add tests.
-
-Sat May 31 19:11:39 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/utf_16{be,le}.c (utf16{be,le}_code_to_mbc):
- fix codepoint to bytes.
-
-Sat May 31 18:28:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * suppress warnings with -Wwrite-string.
-
-Sat May 31 18:26:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_delete_if): should return enumerator if no block
- is given. [ruby-dev:34901]
-
-Sat May 31 15:58:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, configure.in (warnflags): defaulted to -Wall
- -Wno-parentheses with gcc. [ruby-dev:34810]
-
-Sat May 31 15:17:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/mvm.h: new header file for MVM, and moved rb_vm_t and
- rb_thread_t from vm_core.h.
-
-Sat May 31 12:02:23 2008 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/envutil.rb (assert_normal_exit): show pid when fail.
-
-Fri May 30 23:55:56 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_rubyoptions.rb: add a test of RUBY_DESCRIPTION.
-
-Fri May 30 22:47:17 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_regexp.rb: add tests.
-
-Fri May 30 22:40:53 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_signal.rb: add tests to achieve over 80% test
- coverage of signal.c.
-
-Fri May 30 22:28:03 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * signal.c (esignal_signo): fix SignalException#signo which returned
- nil absolutely.
-
- * signal.c (esignal_init): always prepend "SIG" to a string that is
- returned by SignalException#signm.
-
-Fri May 30 22:17:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_argf.rb: rename a conflicting method name.
-
- * test/ruby/test_string.rb: ditto.
-
- * test/ruby/test_io.rb: ditto.
-
-Fri May 30 22:14:37 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (defined_expr): fix SEGV by defined?([1]).
-
-Fri May 30 12:18:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (prelude.c): simply depends on PREP. [ruby-dev:34877]
-
- * enc/make_encdb.rb, enc/trans/make_transdb.rb: ditto.
-
-Fri May 30 10:55:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (struct rb_unblock_callback), thread.c
- (set_unblock_function), thread_{pthread,win32}.c (native_sleep):
- extracted from struct rb_thread_struct.
-
- * thread.c (reset_unblock_function): not check interrupts at leaving
- blocking region. [ruby-dev:34874]
-
-Fri May 30 06:09:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/utf_8.c: add UTF8-MAC (UTF-8-MAC).
-
-Fri May 30 04:17:13 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enum.c (enum_count, count_all_i, Init_Enumerable),
- array.c (rb_ary_count): If no argument or block is given, count
- the number of all elements.
-
-Fri May 30 03:12:18 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/openssl/ossl_bn.c (ossl_bn_s_rand, ossl_bn_s_pseudo_rand):
- Int should be enough here.
-
-Fri May 30 02:35:00 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/openssl/ossl_bn.c (ossl_bn_s_rand, ossl_bn_s_pseudo_rand),
- ext/openssl/ossl_pkey_dh.c (ossl_dh_s_generate)
- (ossl_dh_initialize),
- ext/openssl/ossl_pkey_dsa.c (ossl_dsa_s_generate),
- ext/openssl/ossl_rand.c (ossl_rand_bytes)
- (ossl_rand_pseudo_bytes, ossl_rand_egd_bytes),
- ext/openssl/ossl_x509store.c (ossl_x509stctx_set_error): Do not
- use FIX2INT() without checking the value type. Use NUM2INT()
- instead; found by akr in [ruby-dev:34890].
-
-Fri May 30 02:08:20 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * signal.c (esignal_init): handle a non-integer argument correctly,
- allowing SignalException.new(:INT).
-
-Fri May 30 00:59:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_regexp.rb: add tests.
-
-Thu May 29 22:51:05 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_require.rb: add a test for load with wrap flag, to
- achieve 100% test coverage of eval_jump.c.
-
-Thu May 29 22:47:53 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_argf.rb: new tests for ARGF, to achieve over 85% test
- coverage of file.c.
-
- * test/ruby/test_io.rb: add tests.
-
-Thu May 29 22:41:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (argf_readchar): raise EOFError, synchronizing IO#readchar.
-
-Thu May 29 22:29:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * io.c (argf_external_encoding, argf_internal_encoding): fix SEGV by
- ARGF.external_encoding.
-
-Thu May 29 17:52:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/zlib/extconf.rb: search zlib1, and regard mswin32 later than VC6
- as WIN32. [ruby-core:16984]
-
-Wed May 28 18:05:28 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * array.c (rb_ary_nitems, Init_Array): Axe Array#nitems().
- cf. [ruby-dev:34676]-[ruby-dev:34713]
-
-Wed May 28 17:50:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/mkexports.rb (Exports#objdump, Exports#each_line): extracted.
-
-Wed May 28 17:41:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (MKPREP): appended $(RBCONFIG).
-
- * common.mk (enc.mk, prelude.c): not depend on $(RBCONFIG) on mswin32
- to get of compiling twice each time.
-
- * win32/Makefile.sub (prelude.c): not depend on $(PREP).
-
-Wed May 28 17:37:07 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/mkexports.rb (Exports::Mswin#each_export): speed up.
-
-Wed May 28 16:41:59 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * array.c (rb_ary_slice_bang): Call rb_ary_modify_check() at the
- beginning. [rubyspec]
-
-Wed May 28 16:12:44 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/webrick/httpservlet/cgihandler.rb (WEBrick::HTTPServlet::CGIHandler#do_GET):
- Set the HTTP status code to 302 if a Location header field is
- present and the status code is not valid as a client
- redirection. cf. RFC 3875 6.2.3, 6.2.4.
-
-Wed May 28 15:53:52 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * enc/trans/japanese.c (to_SHIFT_JIS_EF_infos): typo.
-
-Wed May 28 15:18:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/singleton.rb (SingletonClassMethods): _load should be public.
-
-Wed May 28 13:30:43 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/japanese.c: add workaround for Unicode to CP932.
- U+2015->0x815C, U+2225->0x8161, U+FF0D->0x817C, U+FF3C->0x815F,
- U+FF5E->0x8160, U+FFE0->0x8191, U+FFE1->0x8192, U+FFE2->0x81CA
-
-Wed May 28 12:52:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_object, marshal_dump, r_object0, marshal_load): search
- private methods too. [ruby-dev:34671]
-
- * object.c (convert_type): ditto.
-
-Wed May 28 08:42:51 2008 Tanaka Akira <akr@fsij.org>
-
- * numeric.c: "%" is required before PRI?VALUE.
-
-Tue May 27 22:10:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_error.c (error_handle): SystemExit and SignalException throws
- TAG_RAISE but not TAG_FATAL.
-
- * thread.c (rb_thread_execute_interrupts): delay interrupts during
- raising exceptions. [ruby-dev:34855]
-
-Tue May 27 20:18:30 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * array.c (rb_ary_slice_bang): Return an empty array instead of
- nil when pos is valid and len is adjusted from a valid value to
- zero; caught by RubySpec.
-
-Tue May 27 19:12:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (MKPREP), common.mk, win32/Makefile.sub (prelude.c): get
- rid of depending PREP with nmake.
-
- * common.mk (encs): depends on libruby.
-
-Tue May 27 19:00:22 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/stringio/stringio.c (strio_each_char, Init_stringio): Add
- StringIO#{each_char,chars}.
- (Init_stringio): Fix StringIO#bytes.
-
-Tue May 27 17:54:35 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/stringio/stringio.c (strio_each_byte): Return self instead
- of nil as the rdoc says.
-
-Tue May 27 15:36:27 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (check_int): use PRIxVALUE format specifier.
-
- * numeric.c (check_uint, rb_num2fix, int_chr): ditto.
-
- * numeric.c (num_fdiv): fallback to_f should always return float
- result. should not use #quo that may return rational.
-
- * numeric.c (num_div): should raise ZeroDivisionError.
-
- * numeric.c (fix_divide): ditto.
-
- * test/ruby/test_numeric.rb (TestNumeric::test_divmod): avoid
- ZeroDivisionError in tests.
-
-Tue May 27 13:14:53 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enum.c (enum_to_a): Pass arguments through to #each().
- (enum_sort): Follow the enum_to_a signature change.
- (enum_reverse_each): Add #reverse_each().
-
-Tue May 27 13:12:37 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * io.c (Init_IO): Define ARGF.{lines,bytes,chars}.
-
-Tue May 27 12:06:37 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (BUFCHECK): wrong condition. [ruby-core:16921]
-
- * file.c (file_expand_buf): shouldn't use buflen for length of string.
-
-Mon May 26 18:24:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (BUFCHECK): no resize if enough room.
-
- * file.c (file_expand_path): use BUFCHECK.
-
-Mon May 26 17:48:42 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (struct enumerator, enumerator_init)
- (enumerator_init_copy, enumerator_each): Eliminate iter.
- (enumerator_ptr): Do not hardcode the class name.
- (enumerator_with_index): Delay variable initialization after
- RETURN_ENUMERATOR().
-
-Mon May 26 17:23:49 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (file_expand_path): add more space for '/'.
-
- * file.c (file_expand_path): should reset address of p after calling
- rb_str_resize(). [ruby-dev:34800]
-
-Mon May 26 16:49:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-mode): use run-hooks if run-mode-hook is
- not available. a patch from Kazuhiro NISHIYAMA <zn at mbf.nifty.com>
- in [ruby-dev:34853].
-
-Mon May 26 16:41:35 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (ntfs_tail): filename which starts with '.' is valid.
-
- * file.c (file_expand_path): cygwin symlink support.
-
-Mon May 26 07:15:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_dump.c (rb_vm_bugreport): rb_make_backtrace has no arguments.
-
-Mon May 26 01:17:54 2008 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/envutil.rb (assert_normal_exit): signal description
- refined.
-
-Mon May 26 00:52:52 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * hash.c (env_each_key, env_each_value, env_reject_bang)
- (rb_env_clear, env_replace): Omit duplicated secure level check.
-
-Mon May 26 00:37:16 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * hash.c (env_each_value): Do not call env_values() twice.
-
-Sun May 25 17:54:36 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (iseq_compile): set local_table for
- ISEQ_TYPE_DEFINED_GUARD.
-
-Sun May 25 17:52:25 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (iseq_build_body): remove side effect from
- VM::InstructionSequence.load.
-
-Sun May 25 04:30:45 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_module.rb (remove_json_mixins): change judgment
- condition.
-
-Sun May 25 03:54:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_module.rb (test_ancestors, test_included_modules):
- ignore json mixins.
-
-Sun May 25 02:37:25 2008 Koichi Sasada <ko1@atdot.net>
-
- * eval_method.c: renamed from vm_method.c. "vm_method.c" is included
- by "vm.c".
-
- * vm_eval.c: added. Some codes are moved from "eval.c"
-
- * common.mk: fix for above changes.
-
- * compile.c: make a vm_eval(0)
-
- * eval.c, eval_error.c, eval_intern.h, eval_jump.c, proc.c, vm.c,
- id.c, id.h, vm_core.h, vm_dump.c, vm_evalbody.c, vm_insnhelper.c,
- blockinlining.c: fix for above changes. and do some refactoring.
- this changes improve rb_yield() performance.
-
-Sat May 24 22:32:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * util.c (ruby_strtod): clear errno at the top of our own
- implementation of strtod(3). [ruby-dev:34834] [ruby-dev:34839]
-
-Sat May 24 15:26:16 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (iseq_set_exception_table, NODE_WHILE, NODE_NEXT): remove
- special handling that decrements sp in CATCH_TYPE_NEXT for NODE_WHILE.
-
- * vm.c (vm_eval_body), vm_insnhelper.c (vm_throw): remove unused code.
-
-Sat May 24 08:13:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (rb_str_transcode): argc is 1, and argv is &to.
-
-Fri May 23 17:55:11 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * array.c (rb_ary_slice_bang): Be consistent with Array#slice()
- and String#slice!(). Just return nil when a negative length or
- out of boundary index is given instead of raising an exception
- via internal functions.
-
-Fri May 23 16:44:34 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (Init_Enumerator): Override
- Enumerable::Enumerator#each_with_index with #with_index.
-
-Fri May 23 12:23:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (rb_num_t): moved form vm.h.
-
- * tool/instruction.rb (RubyVM::Instruction#sp_increase_c_expr),
- tool/instruction.rb (RubyVM::VmBodyGenerator#make_header_operands):
- omit unused variables.
-
-Fri May 23 08:47:02 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (exc_equal): == operator should be transitional.
- [ruby-dev:34808]
-
- * error.c (syserr_eqq): === should be able to handle delegated
- objects as well.
-
-Fri May 23 06:15:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (rb_iseq_compile_with_option): get rid of segv.
-
-Fri May 23 02:29:14 2008 Koichi Sasada <ko1@atdot.net>
-
- * insns.def (opt_gt|ge|lt|le): use values directly to compare.
-
-Fri May 23 01:15:09 2008 Koichi Sasada <ko1@atdot.net>
-
- * eval.c, eval_intern.h, include/ruby/intern.h, include/ruby/ruby.h,
- vm.c, vm_core.h, vm_insnhelper.c: remove pointless "const".
-
-Thu May 22 23:45:17 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * compile.c (get_destination_insn, get_next_insn, get_prev_insn):
- peephole optimization should not ignore ISEQ_ELEMENT_ADJUST.
-
-Thu May 22 20:20:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (check_dump_arg, check_load_arg): check if reentered.
- [ruby-dev:34802]
-
-Thu May 22 20:14:28 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * iseq.c (iseq_load, iseq_data_to_ary): support
- ISEQ_TYPE_DEFINED_GUARD.
-
-Thu May 22 19:01:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_get_ruby_level_cfp): moved from eval_intern.h.
-
- * vm.c (sdr, nsdr): define methods only if VMDEBUG is defined.
-
-Thu May 22 17:18:35 2008 Tanaka Akira <akr@fsij.org>
-
- * array.c (rb_ary_compact_bang): fix reallocation size.
-
-Thu May 22 15:20:20 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval_intern.h, vm_core.h, include/ruby/intern.h, include/ruby/ruby.h,
- vm.c: need to add const to prototypes, of course.
-
-Thu May 22 13:24:43 2008 Koichi Sasada <ko1@atdot.net>
-
- * eval.c, vm.c, vm_core.h, vm_insnhelper.c: specify "const".
-
- * vm_opts.h: add a OPT_TOKEN_THREADED_CODE macro.
-
-Thu May 22 12:51:41 2008 Tanaka Akira <akr@fsij.org>
-
- * insns.def (newhash): fix a variable definition: "const k".
-
-Thu May 22 12:40:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (flatten): check if reentered. [ruby-dev:34798]
-
-Thu May 22 11:39:59 2008 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/envutil.rb (assert_normal_exit): capture stdout and stderr
- of the child process.
-
-Thu May 22 08:28:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (flatten): free memo hash table before raising exception.
- [ruby-dev:34789]
-
-Thu May 22 06:30:10 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * array.c (flatten): fix memory leak.
-
-Thu May 22 06:21:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (nkf_str_caseeql): added.
-
- * ext/nkf/nkf-utf8/nkf.c (nkf_enc_find_index): use nkf_str_caseeql.
-
-Thu May 22 05:45:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * proc.c (proc_dup): should copy safe_level from src proc
- properly. a patch from Keita Yamaguchi
- <keita.yamaguchi at gmail.com>
-
-Thu May 22 02:46:08 2008 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: do not use Thread#raise. [ruby-dev:34739]
-
-Thu May 22 00:30:06 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_require.rb: new tests for library requiring, to
- achieve over 90% test coverage of dln.c.
-
- * test/ruby/test_class.rb: add tests to achieve over 90% test coverage
- of class.c.
-
- * test/ruby/test_module.rb: ditto.
-
-Thu May 22 00:15:44 2008 Koichi Sasada <ko1@atdot.net>
-
- * insns.def, vm_insnhelper.c: specify "const".
-
-Wed May 21 23:20:21 2008 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_eval.rb: fix syntax.
-
-Wed May 21 17:46:17 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (nkf_enc_find_index):
- use strcasecmp. [ruby-dev:34787]
-
-Wed May 21 16:48:22 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_compact_bang): avoid forceful realloc.
-
-Wed May 21 07:42:28 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_usascii_str_new): use rb_str_new.
-
- * string.c (rb_enc_str_new): ditto.
-
- * string.c (rb_usascii_str_new2): use rb_str_new2.
-
-Wed May 21 07:22:01 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c, include/ruby/encoding.h
- (rb_enc_associate, rb_enc_associate_index):
- returns obj. [ruby-dev:34778]
-
-Wed May 21 04:20:20 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_ascii8bit_encoding): use ENCINDEX_ASCII.
-
- * encoding.c, include/ruby/encoding.h (rb_ascii8bit_encindex):
- added.
-
- * encoding.c (rb_locale_encoding): use rb_usascii_encoding().
-
-Wed May 21 01:45:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_file_exhaustive.rb (setup): workaround for Windows
- Vista.
-
- * test/ruby/envutil.rb (rubyexec): now Open3.open3 is supported on
- Windows.
-
- * test/ruby/test_process.rb: use ``||'' instead of ``;'' because
- cmd.exe not support it.
-
-Wed May 21 01:28:47 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c, include/ruby/encoding.h (rb_str_transcode):
- C API of encoding conversion for Ruby object.
- VALUE rb_str_transcode(VALUE str, VALUE to).
-
- * transcode.c (str_encode, str_encode_bang):
- rename from rb_tr_transcode or rb_str_transcode_bang.
-
-Tue May 20 23:26:05 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_array.rb: fix tests for 64bit CPU.
-
-Tue May 20 20:59:56 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (rb_nkf_convert) (nkf_enc_without_bom):
- reverted. nkf-utf8/nkf.c should be independent of ruby.
-
- * ext/nkf/nkf.c (options):
- moved from nkf-utf8/nkf.c.
- override nkf's original settings for Unicode BOM.
-
-Tue May 20 13:20:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/nkf/nkf.c (rb_nkf_convert), ext/nkf/nkf-utf8/nkf.c
- (nkf_enc_without_bom): BOM is not a part of encodings.
-
- * ext/nkf/nkf.c (Init_nkf), ext/nkf/nkf-utf8/nkf.c (options):
- UTF-{16,32} without endian have no sense.
-
-Tue May 20 12:13:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options, process_options): --dump option.
-
-Tue May 20 11:36:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (PRI[diouxX]VALUE): printf format for VALUE.
-
- * gc.c (assign_heap_slot): suppress a warning.
-
-Tue May 20 03:42:43 2008 Koichi Sasada <ko1@atdot.net>
-
- * eval.c, vm_insnhelper.c: fix cref in instance_eval
- and cvar_base search protocol.
-
- * bootstraptest/test_knownbug.rb, test_eval.rb: move solved test
- and add new tests.
-
- * test/ruby/test_eval.rb: fix tests for spec.
-
-Tue May 20 01:43:44 2008 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb: fix a test.
- "block_given?" returns true if "yield" can be used.
-
-Tue May 20 01:07:19 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * parse.y (assignable_gen): when "self = 1" was evaluated, unnecessary
- error message was output, which might cause null pointer access.
-
-Tue May 20 08:38:56 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_enc_strlen_cr): need to set ENC_CODERANGE_7BIT if
- search_nonascii() fails. [ruby-dev:34751]
-
- * string.c (rb_str_reverse): preserve coderange info if the
- receiver is 7bit string.
-
- * string.c (rb_str_reverse_bang): ditto.
-
- * string.c (rb_str_reverse_bang): should have called
- single_byte_optimizable before rb_str_modify() that clears
- coderange info.
-
- * string.c (tr_trans): handle single bytes more eagerly.
-
-Mon May 19 23:32:12 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (invoke_block_from_c): fix call flow.
-
-Mon May 19 23:19:35 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * regexec.c (slow_search): check the case when the length is 1.
- The behavior of memcmp is undefined if the third argument is 0.
-
-Mon May 19 21:07:48 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (native_thread_apply_priority):
- fix argument range check. [ruby-dev:33124]
-
-Mon May 19 18:22:35 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/openssl/ossl_pkcs5.c (ossl_pkcs5_pbkdf2_hmac): Fix the type
- of md; pointed out by Takahiro Kambe <taca at back-street.net>
- in [ruby-dev:34748].
-
-Mon May 19 17:23:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regparse.c (PINC): use optimized enclen() instead of
- ONIGENC_MBC_ENC_LEN().
-
- * regparse.c (PFETCH): ditto.
-
- * regparse.c (PFETCH): small optimization.
-
- * regexec.c (slow_search): single byte encoding optimization.
-
- * regenc.h (enclen): avoid calling function when encoding's
- min_len == max_len.
-
- * re.c (rb_reg_regsub): rb_enc_ascget() optimization for single
- byte encoding.
-
- * re.c (rb_reg_search): avoid allocating new re_registers if we
- already have MatchData.
-
- * re.c (match_init_copy): avoid unnecessary onig_region_free()
- before onig_region_copy.
-
- * encoding.c (rb_enc_get_index): remove implicit enc_capable check
- each time.
-
- * encoding.c (rb_enc_set_index): ditto.
-
- * encoding.c (enc_compatible_p): small refactoring.
-
- * include/ruby/encoding.h (rb_enc_dummy_p): inline
- rb_enc_dummy_p() and export related code.
-
-Mon May 19 14:32:03 2008 Koichi Sasada <ko1@atdot.net>
-
- * version.h: fix strange change by version.h update tool.
-
-Mon May 19 14:18:13 2008 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb: move solved tests.
-
- * bootstraptest/test_eval.rb, test_literal.rb, test_syntax.rb,
- test_thread.rb: ditto.
-
- * test/ruby/test_m17n.rb, test_proc.rb, test_sprintf.rb,
- test_string.rb, test/ruby/test_struct.rb: ditto.
-
-Mon May 19 13:23:03 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (rb_spawn_internal): set last_status when status == -1
- because there is no path to set it on win32. this patch is derived
- from [ruby-core:16787], submitted by Luis Lavena <luislavena at
- gmail.com>
-
-Mon May 19 11:32:47 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.c, insns.def, eval.c, vm_insnhelper.c: fix CREF handling.
- VM value stack frame of block contains cref information.
- (dfp[-1] points CREF)
-
- * compile.c, eval_intern.h, eval_method.c, load.c, proc.c,
- vm_dump.h, vm_core.h: ditto.
-
- * include/ruby/ruby.h, gc.c: remove T_VALUES because of above
- changes.
-
- * bootstraptest/test_eval.rb, test_knownbug.rb: move solved test.
-
-Sun May 18 22:26:51 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpservlet/filehandler.rb: should normalize path
- name in path_info to prevent script disclosure vulnerability on
- DOSISH filesystems. (fix: CVE-2008-1891)
- Note: NTFS/FAT filesystem should not be published by the platforms
- other than Windows. Pathname interpretation (including short
- filename) is less than perfect.
-
- * lib/webrick/httpservlet/abstract.rb
- (WEBrick::HTTPServlet::AbstractServlet#redirect_to_directory_uri):
- should escape the value of Location: header.
-
- * lib/webrick/httpservlet/cgi_runner.rb: accept interpreter
- command line arguments.
-
-Sun May 18 02:54:46 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * pack.c (pack_pack): check errno to detect error of ruby_strtoul.
-
- * pack.c (pack_unpack): ditto.
-
- * test/ruby/test_pack.rb: add a test for above.
-
-Sat May 17 23:53:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): fix for short file name on Cygwin.
-
-Sat May 17 18:03:52 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * vm.c (Init_VM): removed the definition of Thread#initialize,
- which is overwritten in Init_Thread and is never used.
-
-Sat May 17 14:01:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_sort_bang): should not free shared pointer, and set
- shared. [ruby-dev:34732]
-
-Sat May 17 12:34:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * thread_pthread.c (Init_native_thread): Kernel#.sleep used never to
- sleep on Mac OS X. Reported by arton <artonx AT yahoo.co.jp>.
-
- * thread_pthread.c (native_sleep): added error checks.
-
-Sat May 17 11:29:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_extname): first dot is not an extension name.
-
-Sat May 17 03:21:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_sort_bang): stop memory leak. [ruby-dev:34726]
-
- * re.c (rb_reg_search): need to free allocated buffer in re_register.
-
- * regexec.c (onig_region_new): more pedantic malloc check.
-
- * regexec.c (onig_region_resize): ditto.
-
- * regexec.c (STATE_CHECK_BUFF_INIT): ditto.
-
- * regexec.c (onig_region_copy): use onig_region_resize.
-
-Fri May 16 12:48:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * math.c (to_flo): rb_Float() accepts even strings for input.
-
- * complex.c (nucomp_to_f): fix wrong message.
-
- * complex.c (nucomp_to_r): ditto.
-
- * object.c (rb_Float): do not check NaN for error. NaN is a part
- of valid float values.
-
-Thu May 15 23:36:09 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_string.rb: add tests to achieve over 90% test
- coverage of string.c.
-
- * test/ruby/test_m17n.rb: ditto.
-
- * test/ruby/test_symbol.rb: ditto.
-
- * test/ruby/test_pack.rb: ditto.
-
-Thu May 15 23:01:06 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * string.c (tr_find): String#delete returned wrong result when multiple
- utf-8 arguments are passed.
-
- * test/ruby/test_m17n.rb (test_delete): add a test for above.
-
-Thu May 15 22:37:56 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (ripper_warningS): now used.
-
-Thu May 15 15:33:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): support for alternative data stream
- and ignored trailing garbage of NTFS.
-
- * file.c (rb_file_s_basename): ditto.
-
- * file.c (rb_file_s_extname): ditto.
-
-Thu May 15 13:43:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_cstr_to_dbl): no need for forceful warning when
- converting to float. overflow is a nature of float values.
-
- * parse.y (parser_yylex): ditto.
-
-Thu May 15 13:23:20 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_prepare_enc): error condition was updated for non
- ASCII compatible strings.
-
-Thu May 15 12:19:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/openssl/openssl_missing.c (HMAC_CTX_copy): adopted
- prototype change in openssl bundled with newer OpenBSD.
- a patch from Takahiro Kambe <taca at back-street.net> in
- [ruby-dev:34691].
-
-Wed May 14 22:09:25 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ChangeLog: fix typo.
-
-Wed May 14 21:49:14 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_object.rb: new tests to achieve over 90% test
- coverage of object.c, eval.c and eval_method.c.
-
- * test/ruby/test_module.rb: ditto.
-
- * test/ruby/test_trace.rb: ditto.
-
- * test/ruby/test_integer.rb: ditto.
-
- * test/ruby/test_float.rb: ditto.
-
- * test/ruby/test_method.rb: ditto.
-
- * test/ruby/test_variable.rb: ditto.
-
- * test/ruby/test_eval.rb: ditto.
-
- * test/ruby/test_exception.rb: ditto.
-
- * test/ruby/test_class.rb: ditto.
-
-Wed May 14 12:46:37 2008 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (insn_operand_intern): remove Qundef related code.
-
-Wed May 14 12:42:36 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * array.c (rb_ary_count): Override Enumerable#count for better
- performance.
-
-Wed May 14 11:29:06 2008 Koichi Sasada <ko1@atdot.net>
-
- * insns.def: add a "putcbase" instruction.
-
- * compile.c, insns.def: fix to use putcbase instruction for
- class search. Qundef should not be used.
-
-Wed May 14 07:49:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): defer calling of rb_frame_self() until it
- become really necessary.
-
- * eval.c (rb_call): ditto.
-
-Wed May 14 00:55:56 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_io_m17n.rb: remove a duplicative method.
-
- * test/ruby/test_utf16.rb: rename a conflicting method name.
-
- * test/ruby/test_array.rb: ditto.
-
- * test/ruby/test_file_exhaustive.rb: ditto.
-
- * test/ruby/test_hash.rb: ditto.
-
- * test/ruby/test_env.rb: ditto.
-
- * test/ruby/test_fixnum.rb: ditto.
-
- * test/ruby/test_rational.rb: ditto.
-
-Wed May 14 00:45:58 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * eval_method.c (rb_add_method): fix check for warning when
- Object#initialize is redefined. (same as 1.8)
-
-Tue May 13 23:32:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (enum_yield): use rb_yield_values2.
-
- * enum.c (DEFINE_ENUMFUNCS): macro to define enumerator and yielding
- functions.
-
- * enum.c (enum_all_func, enum_any_func, enum_one_func,
- enum_none_func): reduced duplicate code.
-
-Tue May 13 15:09:38 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c: Update rdoc.
- (enumerator_initialize): Discourage the use.
- (enum_each_slice, enum_each_cons, enumerator_each)
- (enumerator_with_index): Add a note about a call without a block.
-
-Tue May 13 08:25:31 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_f_gets): re-enable rdoc.
- (rb_f_readline): ditto.
- (rb_f_readlines): ditto.
-
-Tue May 13 07:56:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_cat): fixed buffer overrun reported by
- Christopher Thompson <cthompson at nexopia.com> in [ruby-core:16746]
-
-Mon May 12 23:37:57 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm.c (collect_local_variables_in_env): remove unnecessary check
- which causes: x=1;proc{local_variables}.call #=> []
-
- * test/ruby/test_variable.rb: add a test for above.
-
-Mon May 12 23:05:24 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c, include/ruby/intern.h (rb_run_exec_options): externed.
-
- * process.c (save_redirect_fd, save_env_i, save_env, run_exec_dup2,
- run_exec_open, run_exec_pgroup, run_exec_rlimit, rb_run_exec_options):
- save parent's process environments.
-
- * process.c (rb_spawn_internal): remove calling run_exec_options()
- because cannot restore after spawn.
-
- * io.c (pipe_open): ditto.
-
- * test/ruby/test_process.rb (test_execopts_env): upcase environment
- variable name for case insensitive platforms.
-
- * win32/win32.c (init_env): set USER environment variable only when
- USERNAME is available.
-
-Mon May 12 22:23:01 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/date.rb (once): use Object#object_id instead of Symbol#to_i.
-
-Mon May 12 21:34:46 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/envutil.rb (rubybin): return expanded rubyexe instead of
- expanded ruby if available.
-
-Mon May 12 20:19:55 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enum.c (grep_i): Be aware of multiple values;
- fix [ruby-dev:34653].
- (grep_iter_i): Ditto.
- (count_i): Ditto.
- (find_i): Ditto.
- (find_index_i): Ditto.
- (find_all_i): Ditto.
- (reject_i): Ditto.
- (inject_i): Ditto.
- (inject_op_i): Ditto.
- (partition_i): Ditto.
- (group_by_i): Ditto.
- (first_i): Ditto.
- (sort_by_i): Ditto.
- (all_i): Ditto.
- (all_iter_i): Ditto.
- (any_i): Ditto.
- (any_iter_i): Ditto.
- (one_i): Ditto.
- (one_iter_i): Ditto.
- (none_i): Ditto.
- (none_iter_i): Ditto.
- (min_i): Ditto.
- (min_ii): Ditto.
- (max_i): Ditto.
- (max_ii): Ditto.
- (minmax_i): Ditto.
- (minmax_ii): Ditto.
- (min_by_i): Ditto.
- (max_by_i): Ditto.
- (minmax_by_i): Ditto.
- (member_i): Ditto.
- (take_i): Ditto.
- (take_while_i): Ditto.
- (drop_i): Ditto.
- (drop_while_i): Ditto.
- (cycle_i): Ditto.
-
- * enum.c (each_with_index): Update rdoc. each_with_index() takes
- arguments that are passed through to each(), and a hash preserves
- key order.
-
-Mon May 12 19:05:24 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (rb_spawn_internal): remove calling run_exec_options()
- because cannot restore after spawn. we'll fix this later.
-
-Mon May 12 18:16:44 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (rb_spawn_internal): need to call run_exec_options() before
- spawn if the platform doesn't have fork. [ruby-dev:34647]
-
-Mon May 12 15:20:02 2008 Tanaka Akira <akr@fsij.org>
-
- * gc.c (ruby_vm_xmalloc): increase malloc_increase only if malloc
- succeeds. failed malloc size can be huge. it may increase
- malloc_limit too big which cause less GC and memory full.
- (ruby_vm_xrealloc): ditto.
- (rb_objspace): make params.limit and params.increase size_t.
-
-Mon May 12 15:04:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_prepare_re): made non static with small refactoring.
-
- * ext/strscan/strscan.c (strscan_do_scan): should adjust encoding
- before regex searching.
-
-Mon May 12 13:57:19 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (is_defined): add NODE_OP_ASGN_{OR,AND}. "defined?(a||=1)"
- should not operate assignment. [ruby-dev:34645]
-
-Mon May 12 13:29:26 2008 Tanaka Akira <akr@fsij.org>
-
- * bignum.c (bigzero_p): check from MSB to LSB. [ruby-dev:34649]
-
-Mon May 12 12:32:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (RUBYOPT): affected BASERUBY too. [ruby-talk:301514]
-
-Mon May 12 12:27:55 2008 Tanaka Akira <akr@fsij.org>
-
- * gc.c (assign_heap_slot): fix condition for number of objects in
- a heap.
-
-Mon May 12 12:24:48 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (sym_to_i): really removed. [ruby-dev:34641]
-
-Mon May 12 11:15:55 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-
- * gc.c (assign_heap_slot): put the binary search routine in order.
-
-Mon May 12 10:52:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_init_gems), gem_prelude.rb: check if Gem is defined
- instead of Gem::Enable.
-
- * gem_prelude.rb (load_full_rubygems_library, const_missing): prevent
- infinite recursion. [ruby-dev:34539]
-
-Sun May 11 23:19:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (all_iter_i, any_iter_i): reduced duplicated code.
-
-Sun May 11 22:54:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bootstraptest/runner.rb (main): leave -I options for purelib.rb
- untouched.
-
- * bootstraptest/runner.rb (main): handle relative path -r options.
-
-Sun May 11 19:04:06 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_thread.rb: kill and join temporal threads that are
- created in each test.
-
-Sun May 11 17:58:45 2008 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_process.rb (TestProcess#with_stdin): defined.
- (TestProcess#test_argv0_noarg): don't use redirect_fds.
- [ruby-dev:34647]
-
-Sun May 11 17:57:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (MINIRUBY): should not include extension library path.
-
-Sun May 11 14:40:36 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (SIZET2NUM): new macro.
- (NUM2SIZET): new macro.
-
- * gc.c (struct rb_objspace): use size_t for increment, length and
- used for 64bit.
- (allocate_heaps): ditto.
- (assign_heap_slot): ditto.
- (set_heaps_increment): ditto.
- (gc_mark_all): ditto.
- (is_pointer_to_heap): ditto.
- (free_unused_heaps): ditto.
- (gc_sweep): ditto.
- (os_obj_of): ditto.
- (rb_gc_call_finalizer_at_exit): ditto.
- (count_objects): ditto.
-
-Sun May 11 13:14:09 2008 Tanaka Akira <akr@fsij.org>
-
- * thread.c (thread_cleanup_func_before_exec): extracted from
- thread_cleanup_func not to touch pthread data.
- pthread_cond_destroy in forked process may cause deadlock on
- Debian GNU/Linux Etch on x86, x86-64 and IA64.
- this doesn't cause resource leak because the process will exec soon.
- (terminate_atfork_before_exec_i): defined.
- (rb_thread_atfork_before_exec): defined.
-
- * include/ruby/intern.h (rb_thread_atfork_before_exec): declared.
-
- * process.c (rb_exec_atfork): call rb_thread_atfork_before_exec
- instead of rb_thread_atfork.
-
- * io.c (popen_exec): call rb_thread_atfork_before_exec instead of
- rb_thread_atfork.
-
-Sat May 10 22:14:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (tr_trans): single '^' does not mean negation.
- [ruby-dev:34632]
-
- * string.c (tr_trans): should check src size, not str size.
- [ruby-dev:34637]
-
- * string.c (tr_trans): should not turn on modify flag if no
- modification happens. [ruby-dev:34631]
-
-Sat May 10 18:11:18 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_each_line): zero length record separator should
- split a string into paragraphs. [ruby-dev:34586]
-
- * string.c (rb_str_each_line): RDoc updated.
-
-Sat May 10 11:36:20 2008 Tanaka Akira <akr@fsij.org>
-
- * vm.c (env_mark): mark env->block.self. prevent SEGV when GC occur
- in prepare_iseq_build with gcc version 3.4.6 [FreeBSD] 20060305 on
- FreeBSD/amd64.
-
-Fri May 9 19:16:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (timeofday): use monotonic clock. based on a patch
- from zimbatm <zimbatm at oree.ch> in [ruby-core:16627].
-
-Fri May 9 07:47:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * cont.c (cont_restore_0): dynamic stack direction code should be
- consistent with static one. [ruby-talk:301152]
-
-Fri May 9 00:03:50 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg): operator assignment "a += b rescue c" should be
- parsed as "a += (b rescue c)" just like normal assignment.
- [ruby-talk:301000]
-
-Thu May 8 18:14:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_and): bit-wise operation should not take float
- values. [ruby-dev:34612]
-
- * bignum.c (rb_big_or): ditto.
-
- * bignum.c (rb_big_xor): ditto.
-
-Thu May 8 17:44:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk, ext/extmk.rb, lib/mkmf.rb: use absolute path for RUBYOPT.
-
- * file.c (rb_find_file_ext): guard load_path from GC.
- gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) optimizes
- load_path by holding only RARRAY_LEN(load_path) and
- RARRAY_PTR(load_path) in registers on IA64 GNU/Linux Etch.
-
-Thu May 8 16:41:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (MINIRUBY), common.mk (RUBYOPT): add purelib.rb.
- [ruby-core:16642]
-
-Thu May 8 16:00:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_yylex): ! and ? at the bottom are no longer part
- of valid symbol names. [ruby-dev:34590]
-
-Thu May 8 15:36:11 2008 Tanaka Akira <akr@fsij.org>
-
- * thread.c (rb_gc_save_machine_context): call FLUSH_REGISTER_WINDOWS
- to mark the register stack from GC on another thread.
-
-Thu May 8 15:14:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_sort_bang): freeze temporary array.
-
-Thu May 8 13:19:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (rb_thread_mark): mark stat_insn_usage only when ptr is not
- null.
-
-Thu May 8 10:44:04 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (sort_reentered): reentered check may be called from
- Array#sort.
-
-Thu May 8 09:51:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (sort_1, sort_2): check for reentered and if elements are
- accessible. [ruby-core:16679]
-
-Thu May 8 06:43:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (dln_find_exe_r, dln_find_file_r): reentrant versions.
-
- * file.c (rb_find_file_ext, rb_find_file), process.c (proc_exec_v),
- (rb_proc_exec, proc_spawn_v, proc_spawn), ruby.c (process_options):
- use reentrant versions.
-
-Thu May 8 06:27:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_key_p): thread local storage stores ID.
-
-Thu May 8 01:10:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (tr_trans): should squeeze properly. [ruby-dev:34587]
-
- * string.c (tr_trans): had a bug in treating multi-byte character
- replacement.
-
- * string.c (rb_str_delete_bang): need not to do anything for empty
- strings.
-
- * test/ruby/test_m17n_comb.rb (TestM17NComb::test_str_delete): add
- test for empty receiver.
-
-Wed May 7 20:19:18 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ruby.c (process_options, ruby_set_argv): set encoding of rb_argv
- after Init_prelude() because cannot load encoding extensions before
- it.
-
-Wed May 7 20:00:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (bit_coerce): float should not be a valid operand of
- bitwise operations. [ruby-dev:34583]
-
-Wed May 7 19:35:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (rb_thread_key_p): should always convert symbol to ID.
- [ruby-dev:34588]
-
-Wed May 7 19:30:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_divide): float division should floor() before
- rounding into integer. [ruby-dev:34584]
-
-Wed May 7 18:02:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (sym_to_i): remove obsolete method. preparation for
- symbol GC.
-
- * numeric.c (fix_to_sym): ditto.
-
- * numeric.c (fix_id2name): ditto.
-
-Wed May 7 17:43:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_puts_ary): check recursion first. [ruby-dev:34580]
-
-Wed May 7 17:41:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.c (vm_eval_body): initialize retval. [ruby-dev:34576]
-
-Wed May 7 13:02:56 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_fdiv): flo.fdiv(NaN) should result NaN.
-
- * numeric.c (num_quo): renamed and moved from bignum.c.
- [ruby-dev:34582]
-
- * bignum.c (rb_big_fdiv): update RDoc description
-
- * rational.c (nurat_s_new_m): small refactoring.
-
- * bignum.c (rb_big2dbl): no need for forceful warning when
- converting to float. overflow is a nature of float values.
-
-Wed May 7 00:54:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/zlib/zlib.c (gzreader_gets): may cause infinite loop.
- a patch from Kouya <kouyataifu4 at gmail.com> in
- [ruby-reference-manual:762].
-
-Tue May 6 02:08:18 2008 Tanaka Akira <akr@fsij.org>
-
- * test/io/nonblock/test_flush.rb: don't set Thread.abort_on_exception.
-
- * test/net/imap/test_imap.rb: ensure disconnecting imap to terminate
- receiver thread.
-
-Tue May 6 00:29:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * iseq.c (insn_operand_intern): should handle Qundef embedded in
- operand. [ruby-core:16656]
-
-Tue May 6 00:00:02 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * compile.c (iseq_compile_each): should call compile_cpath() for
- modules as well. [ruby-dev:34585]
-
- * insns.def (defineclass): add undef handling.
-
-Mon May 5 23:49:40 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * insns.def (defineclass): was using wrong variable. [ruby-dev:34592]
-
-Mon May 5 20:07:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_fflush): IO#flush problem within threads. a patch from
- <s.wanabe at gmail.com> in [ruby-dev:34595].
-
-Mon May 5 19:58:44 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * compile.c (defined_expr): protect some expression from
- segmentation fault. a patch from wanabe <s.wanabe at gmail.com>
- in [ruby-dev:34593].
-
-Mon May 5 19:49:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (rb_struct_s_def): Struct.new(0) should not SEGV.
- based on the patch from wanabe <s.wanabe at gmail.com> in
- [ruby-dev:34594].
-
- * struct.c (make_struct): call to_str on name object.
-
-Mon May 5 17:17:40 2008 Tanaka Akira <akr@fsij.org>
-
- * eval.c (ruby_cleanup): wrap ruby_finalize_0 by SAVE_ROOT_JMPBUF to
- avoid SEGV by at_exit { Fiber.new{}.resume } on IA64.
-
-Mon May 5 12:12:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_slice_bang): should adjust length before making
- sub-array.
-
-Mon May 5 11:36:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_dup): should dupe corresponding information.
- [ruby-dev:34581]
-
-Mon May 5 11:13:50 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * compile.c (compile_cpath): use Qundef to denote cbase lookup.
-
- * insns.def (defineclass): Qundef is passed for cbase.
-
- * insns.def (setconstant): ditto.
-
- * vm_insnhelper.c (vm_check_if_namespace): use rb_inspect()
- instead of rb_obj_as_string() for better description.
-
-Mon May 5 02:10:23 2008 Tanaka Akira <akr@fsij.org>
-
- * gc.c (set_heaps_increment): fix memory allocation strategy by
- determining heaps_inc from heaps_used, not objects_delta.
- (struct rb_objspace): delta removed. change increment, length and
- used to long for LP64.
- (objects_delta): removed.
- (allocate_heaps): add next_heaps_length argument.
- (init_heap): renamed from add_heap.
- (garbage_collect): use heaps_increment in dont_gc.
-
-Sun May 4 21:09:32 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/getoptlong.rb: use $stderr instead of $deferr.
-
-Sun May 4 16:04:28 2008 Tanaka Akira <akr@fsij.org>
-
- * time.c (obj2nsec): fix string argument.
-
-Sun May 4 14:29:14 2008 Tanaka Akira <akr@fsij.org>
-
- * eval.c (rb_obj_respond_to): check the result of respond_to? method
- by RTEST.
-
-Sun May 4 12:57:58 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_each_line): return original string.
-
-Sat May 3 20:57:06 2008 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/envutil.rb (Test::Unit::Assertions#assert_normal_exit):
- new method.
-
-Sat May 3 18:10:54 2008 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_timespec): raise TypeError for nil and other objects
- which has no divmod method.
-
-Fri May 2 23:59:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (internal_read_func, internal_write_func): split from
- internal_io_func.
-
-Fri May 2 23:55:15 2008 Tanaka Akira <akr@fsij.org>
-
- * variable.c (rb_define_hooked_variable): guard *var from GC to
- prevent collecting argf under RUBY_DEBUG=gc_stress.
-
-Fri May 2 17:29:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_step): call to_int if step is not a numeric
- value. [ruby-dev:34575]
-
-Fri May 2 16:10:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_step): do not forcefully convert steps into
- integers. [ruby-dev:34571]
-
-Fri May 2 14:52:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el: move fontifying code from hook. a patch from
- Phil Hagelberg <phil at hagelb.org> in [ruby-core:16636].
-
-Fri May 2 14:10:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_step): step may be bignum.
-
-Fri May 2 13:52:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (Init_Regexp): remove MatchData#select. [ruby-dev:34563]
-
-Thu May 1 23:59:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_divide), numeric.c (fix_divide): check for result
- domain. [ruby-dev:34559]
-
-Thu May 1 23:57:06 2008 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/net/telnet.rb: This patch from Brian Candler adds a FailEOF mode which
- can be activated to have net/telnet raise EOFError exceptions when the
- remote connection is closed. The default behavior remains unchanged though.
-
-Thu May 1 23:43:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * range.c (range_step): check if step can be converted to an integer.
- [ruby-dev:34558]
-
- * range.c (range_step): allow float step bigger than zero but less
- than one. [ruby-dev:34557]
-
-Thu May 1 23:20:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_divide): return an integer for idiv.
- [ruby-dev:34553]
-
-Thu May 1 20:47:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_s_create): should access converted hash value.
- [ruby-dev:34555]
-
-Thu May 1 20:31:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_parse.rb (TestParse::test_void_expr_stmts_value):
- shut up warning.
-
- * rational.c (nurat_to_f): no need for forceful warning when
- converting to float. overflow is a nature of float values.
-
-Thu May 1 16:10:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (env_delete_if): return enumerator if no block given.
- [ruby-dev:34554]
-
-Wed Apr 30 21:36:40 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/erb.rb (url_encode): [ruby-dev:34497] ERB::Util#url_encode
- bug fix. Reported by rubikitch.
-
- * test/erb/test_erb.rb: ditto
-
-Wed Apr 30 20:11:36 2008 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/net/telnet.rb: Fixing a bug where line endings would not be properly
- escaped when the two character ending was broken up into separate TCP
- packets. Issue reported and patched by Brian Candler.
-
-Wed Apr 30 18:03:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (rb_load_path), vm_core.h (rb_vm_t): moved to VM.
-
- * load.c (rb_get_load_path): returns absolute load path.
-
- * load.c (load_path_getter): $LOAD_PATH getter.
-
- * file.c (rb_find_file_ext, rb_find_file), ruby.c (push_include,
- ruby_init_loadpath): use the accessor.
-
- * vm.c (rb_vm_mark): mark load_path.
-
-Wed Apr 30 17:47:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_reg_search): use local variable. a patch from wanabe
- <s.wanabe AT gmail.com> in [ruby-dev:34537]. [ruby-dev:34492]
-
-Wed Apr 30 16:10:18 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * eval_intern.h: specify the values of the enumeration constants
- explicitly. [ruby-dev:34489]
-
-Wed Apr 30 12:32:39 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (check_exec_redirect_fd): prohibit duplex IO.
- (check_exec_fds): record maxhint even if close_others is not
- specified.
- (rb_exec_arg_fixup): renamed from rb_exec_arg_fix.
-
-Mon Apr 28 20:24:27 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (nurat_marshal_load): checks the given
- denominator. [ruby-dev:34536]
-
-Mon Apr 28 14:21:18 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (POSFIXABLE): use FIXNUM_MAX+1 instead of
- FIXNUM_MAX to make it possible to convert to double accurately on
- environments with 64bit VALUE and 64bit double.
- It assumes FLT_RADIX is 2.
- fix RubyForge bug #14102.
-
-Mon Apr 28 12:48:57 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (rb_exec_arg_addopt, rb_exec_arg_addopt): now can specify
- close_exec on having no fork environment (but still meaningless).
-
-Mon Apr 28 11:11:29 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (run_exec_options): don't call FIX2INT for nil.
-
-Mon Apr 28 11:11:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * proc.c (method_name): should return symbols instead of strings.
- [ruby-dev:34531]
-
-Mon Apr 28 09:02:43 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h (rb_exec_arg_init): declared.
- (rb_exec_arg_addopt): declared.
- (rb_exec_arg_fix): declared.
- (rb_exec_initarg): removed.
- (rb_exec_getargs): removed.
- (rb_exec_initarg2): removed.
-
- * io.c (struct popen_arg): make execarg as a pointer.
- (popen_exec): follow popen_arg change.
- (pipe_open): add eargp argument. extract argc and argv from eargp.
- use rb_exec_arg_addopt to add redirect options.
- (pipe_open_v): set up struct rb_exec_arg.
- (pipe_open_s): set up struct rb_exec_arg.
-
- * process.c (rb_exec_arg_addopt): new function extracted from
- check_exec_options_i.
- (check_exec_options_i): use rb_exec_arg_addopt.
- (rb_check_exec_options): opthash is always a hash now.
- (rb_exec_getargs): make it static.
- (rb_exec_fillarg): renamed from rb_exec_initarg2. don't set up
- redirect_fds.
- (rb_exec_arg_init): new function.
- (rb_exec_arg_fix): new function.
- (rb_f_exec): use rb_exec_arg_init and rb_exec_arg_fix. use
- rb_exec_arg_addopt to set close_others option.
- (run_exec_options): make close_others by default.
- (rb_spawn_internal): use rb_exec_arg_init and rb_exec_arg_fix. use
- rb_exec_arg_addopt to set close_others option.
-
-Sun Apr 27 18:59:04 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (nurat_expt): use f_rational_new2. [ruby-dev:34524]
-
-Sun Apr 27 15:23:40 2008 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (gc_count): add a GC.count method. This method returns
- a GC invoking count.
-
-Sun Apr 27 12:20:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (rb_vm_t), gc.c (rb_objspace, rb_newobj), vm.c
- (Init_BareVM): per-VM object space support, which is disabled now.
-
- * gc.c (rb_objspace_alloc), vm.c (Init_BareVM): should not use ruby
- malloc here.
-
- * gc.c (garbage_collect, etc): performance improvement by passing the
- reference instead of referring the global variable in each functions.
-
-Sun Apr 27 08:06:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ruby.c (ruby_set_argv): ARGV should be locale encoding.
- [ruby-list:44861]
-
-Sun Apr 27 01:46:29 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open3.rb (Open3.popen3w): removed.
- (Open3.popen3): notice wait_thr.
-
-Sun Apr 27 01:13:05 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc, test/rdoc: Update to RDoc 2.0.0 r56.
-
-Sat Apr 26 21:30:40 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h (rb_hash_dup): declared.
-
- * hash.c (rb_hash_dup): new function.
-
- * process.c (rb_spawn_internal): don't modify option hash.
-
-Sat Apr 26 18:36:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c, signal.c, thread.c, thread_win32.c, include/ruby/intern.h:
- suppress warnings.
-
-Sat Apr 26 17:42:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (builtin_types), gc.c (count_objects): added Complex and
- Rational.
-
-Sat Apr 26 17:35:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (rb_eNOERROR): renamed.
-
-Sat Apr 26 17:30:11 2008 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/ruby.h, gc.c: remove T_BLOCK.
-
- * include/ruby/ruby.h: re-number T_xxx.
-
-Sat Apr 26 17:31:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_cProcessTms, rb_cProcessStatus): renamed.
-
- * error.c (builtin_types), signal.c (siglist), st.c (primes),
- struct.c (ref_func), time.c (months): constified.
-
-Sat Apr 26 13:00:41 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open3.rb: double fork is replaced by spawn with Process.detach.
- (Open3.popen3w): new method to access the thread returned by
- Process.detach.
-
-Sat Apr 26 00:47:43 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (rb_spawn_internal): new function to specify
- default_close_others.
- (rb_spawn): specify default_close_others true.
- (rb_f_system): call rb_spawn_internal with default_close_others as
- false.
-
-Sat Apr 26 12:26:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_each): use INT2FIX() for fixnum values.
-
-Fri Apr 25 17:56:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (free_unused_heaps): preserve last used heap segment to
- reduce malloc() call.
-
-Fri Apr 25 17:54:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (HEAP_SIZE): use smaller heap segment (2K) for more chance
- to be freed. based on patch from authorNari <authornari at gmail.com>.
-
- * gc.c (rb_newobj_from_heap): eventually allocate heap segments.
-
-Fri Apr 25 15:35:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_spawn): rb_exec_initarg() returns new argc and argv in
- earg.
-
-Fri Apr 25 12:37:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (flatten): returns an instance of same class.
- [ruby-core:16554]
-
-Fri Apr 25 10:52:27 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h: define mode_t for umask.
-
- * process.c (check_exec_options_i, check_exec_fds, run_exec_options):
- support "close_others" only when fork(2) is available.
-
-Fri Apr 25 00:16:11 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c: include sys/stat.h for umask.
-
-Thu Apr 24 23:25:17 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h (rb_env_clear): declared.
- (rb_io_mode_modenum): declared.
- (rb_close_before_exec): declared.
- (struct rb_exec_arg): add options and redirect_fds field.
- (rb_check_argv): removed.
- (rb_exec_initarg): declared.
- (rb_exec_getargs): declared.
- (rb_exec_initarg2): declared.
- (rb_fork): add third argument: fds.
-
- * io.c (max_file_descriptor): new static variable to record maximum
- file descriptor ruby used.
- (UPDATE_MAXFD): new macro.
- (UPDATE_MAXFD_PIPE): new macro.
- (rb_io_mode_modenum): externed.
- (rb_sysopen): update max_file_descriptor.
- (rb_close_before_exec): new function.
- (popen_exec): redirection removed because it is done by extended
- spawn mechanism.
- (pipe_open): generate a hash for spawn options to specify
- redirections.
- (pipe_open_v): use rb_exec_getargs.
- (pipe_open_s): use rb_exec_getargs.
- (rb_io_initialize): update max_file_descriptor.
-
- * process.c (hide_obj): new function.
- (check_exec_redirect_fd): new function.
- (check_exec_redirect): new function.
- (check_exec_options_i): new function.
- (check_exec_fds): new function.
- (rb_check_exec_options): new function.
- (check_exec_env_i): new function.
- (rb_check_exec_env): new function.
- (rb_exec_getargs): new function.
- (rb_exec_initarg2): new function.
- (rb_exec_initarg): new function.
- (rb_f_exec): use rb_exec_initarg.
- (intcmp): new function.
- (run_exec_dup2): new function.
- (run_exec_close): new function.
- (run_exec_open): new function.
- (run_exec_pgroup): new function.
- (run_exec_rlimit): new function.
- (run_exec_options): new function.
- (rb_exec): call run_exec_options.
- (move_fds_to_avoid_crash): new function.
- (pipe_nocrash): new function.
- (rb_fork): use pipe_nocrash to avoid file descriptor conflicts.
- (rb_spawn): use rb_exec_initarg.
- (rlimit_resource_name2int): extracted from rlimit_resource_type.
- (rlimit_type_by_hname): new function.
- (rlimit_type_by_lname): new function.
- (rlimit_resource_type): use rlimit_type_by_hname.
- (proc_daemon): add fds argument for rb_fork.
-
- * hash.c (rb_env_clear): renamed from env_clear and externed.
-
- [ruby-dev:34086]
-
-Thu Apr 24 23:00:58 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_thread.rb: fix typos.
-
- * test/ruby/envutil.rb (rubyexec): move Open3.popen3 call into timeout
- block.
-
-Thu Apr 24 22:34:52 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_comparable.rb: new tests for Comparable, to achieve
- 100% test coverage of compar.c.
-
-Thu Apr 24 17:19:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (process_options): set safe_level before loading script.
- [ruby-dev:34421]
-
-Thu Apr 24 14:15:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (dln_find_1): prior files with extensions to files sans
- extensions. [ruby-core:16517]
-
-Thu Apr 24 00:26:06 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/rdoc/ri/descriptions.rb: fixed wrong class nestings.
-
-Thu Apr 24 00:20:01 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_settracefunc.rb: add a test for set_trace_func.
-
- * test/ruby/envutil.rb: move "rubyexec" method from test_rubyoptions.rb.
-
- * test/ruby/test_rubyoptions.rb: use rubyexec in envutil.rb.
-
- * test/ruby/test_thread.rb: add tests to achieve over 90% test coverage
- of thread.c.
-
-Wed Apr 23 15:28:52 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/gdbm/test_gdbm.rb (TestGDBM#test_s_open_no_create): failed
- notice moved from comment to assertion message. [ruby-dev:29127]
-
-Wed Apr 23 11:49:54 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (Set#each, SortedSet#each, TC_Set#test_each): Return
- an enumerator if no block is given.
-
-Wed Apr 23 00:36:03 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/openssl/test_ssl.rb (start_server): add timeout to server.join.
-
-Wed Apr 23 00:18:45 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_symbol.rb (TestSymbol#test_to_proc): Improve
- tests of Symbol#to_proc.
-
-Tue Apr 22 22:40:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/drb/drb.rb (DRb::DRbServer::check_insecure_method): should
- check method names by symbols, not by strings. a patch from
- Kazuhiro NISHIYAMA <zn at mbf.nifty.com> in [ruby-dev:34487].
-
-Tue Apr 22 22:15:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-style.el (ruby-style-{case,label}-indent): up list from
- indentation point.
-
-Tue Apr 22 21:09:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (score_table_A0, score_table_F0):
- type of content is unsigned char.
-
- * ext/nkf/nkf-utf8/nkf.c (push_broken_buf): 'c' is nkf_char.
-
- * ext/nkf/nkf-utf8/nkf.c (push_broken_buf): enc is 0 or pointer.
-
- * ext/nkf//nkf.c (options): type of option is unsigned char.
-
-Tue Apr 22 20:51:58 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (z_conv): characters must be nkf_char.
-
-Tue Apr 22 19:23:05 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c (enumerator_initialize): Remove an undocumented
- feature (passing a block to the constructor) that's broken.
- This is not what I intended.
-
-Tue Apr 22 17:54:05 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * vm_core.h (exec_event_hooks): ``inline'' is a type modifier, not
- a type itself.
-
-Tue Apr 22 16:24:27 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * string.c (rb_enc_cr_str_buf_cat): do not use C++ comments.
-
-Tue Apr 22 16:23:53 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * configure.in: use AC_USE_SYSTEM_EXTENSIONS.
-
-Tue Apr 22 16:23:16 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * vm_evalbody.c (DECL_SC_REG): use __asm__ instead.
-
-Tue Apr 22 16:18:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_evalbody.c (DECL_SC_REG): typo fixed.
-
-Tue Apr 22 15:25:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (struct timespec): needs time.h according to POSIX.
-
-Tue Apr 22 13:19:48 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (rb_thread_stop_timer_thread): should clear
- timer_thread_id after stopping it.
-
-Tue Apr 22 13:12:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_join): remove the current thread from the join list
- of the target thread.
-
-Tue Apr 22 12:03:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_get_ev_const): search from the base klass if it
- is given.
-
-Tue Apr 22 09:58:13 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/win32ole/win32ole.c: avoid warnings.
-
-Tue Apr 22 09:56:51 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (eaccess): workaround for recent msvcrt's behavior.
- [ruby-core:16460]
-
-Mon Apr 21 19:08:32 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (copy_stream_body): call rb_io_check_readable and
- rb_io_check_writable.
-
-Mon Apr 21 17:45:27 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/dbm/dbm.c (fdbm_each_value, fdbm_each_key, fdbm_each_pair):
- GDBM#{each,each_pair,each_key,each_value}: Return an enumerator
- if no block is given.
-
- * ext/gdbm/gdbm.c (fgdbm_each_value, fgdbm_each_key,
- fgdbm_each_pair): GDBM#{each,each_pair,each_key,each_value}:
- Return an enumerator if no block is given.
-
- * ext/openssl/ossl_config.c (ossl_config_each):
- OpenSSL::Config#each: Return an enumerator if no block is given.
-
- * ext/readline/readline.c (hist_each): Readline::HISTORY#each:
- Return an enumerator if no block is given.
-
- * ext/sdbm/init.c (fsdbm_each_value, fsdbm_each_key,
- fsdbm_each_pair): SDBM#{each,each_pair,each_key,each_value}:
- Return an enumerator if no block is given.
-
- * ext/stringio/stringio.c (strio_each_byte, strio_each):
- StringIO#{each,each_line,each_byte}: Return an enumerator if no
- block is given.
-
- * ext/stringio/stringio.c (Init_stringio): Add #lines and #bytes,
- which are aliases to #each_line and #each_byte, respectively.
-
- * ext/win32ole/win32ole.c (fole_each): WIN32OLE#each: Return an
- enumerator if no block is given.
-
- * ext/zlib/zlib.c (rb_gzreader_each_byte, rb_gzreader_each):
- Zlib::GzipReader#{each,each_line,each_byte}: Return an
- enumerator if no block is given.
-
- * ext/zlib/zlib.c (Init_zlib): Add Zlib::GzipReader#lines and
- #bytes, which are aliases to #each_line and #each_byte,
- respectively.
-
-Mon Apr 21 17:01:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (rb_iseq_compile_with_option): check if src is a string.
- [ruby-core:16453]
-
-Mon Apr 21 16:06:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c (enumerator_init): preserve the method name in ID.
-
- * enumerator.c (enumerator_each): need not to call rb_to_id().
-
- * enumerator.c (enumerator_with_index): ditto.
-
-Mon Apr 21 11:00:27 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * compile.c (defined_expr): capture exception during defined?
- evaluation. a patch from wanabe <s.wanabe at gmail.com> in
- [ruby-dev:34461]. [ruby-core:16010]
-
-Mon Apr 21 10:06:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c: should include <errno.h> to refer to errno.
-
-Mon Apr 21 09:58:04 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * time.c (rb_strftime): check errno to detect strftime(3)'s error.
- this is workaround for recent version of MSVCRT.
- [ruby-dev:34456]
-
-Mon Apr 21 08:54:30 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * gc.c (ruby_xmalloc): use size_t for malloc argument instead of long.
-
-Sun Apr 20 21:00:21 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c, include/ruby/ruby.h: Export rb_cEnumerator.
-
-Sun Apr 20 20:47:50 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enumerator.c: Resolve the method every time an enumeration
- method is run, not once when the enumerator is initialized as it
- was before, so that method_missing() and method (re)definition
- afterwards are both in effect; pointed out in: [ruby-core:16441]
-
-Sun Apr 20 15:11:00 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (copy_stream_rbuf_to_dst): removed.
- (copy_stream_fallback_body): don't bypass write method.
- (copy_stream_body): simplified.
-
-Sun Apr 20 15:01:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (struct iseq_compile_data): moved label_no from
- new_label_body().
-
- * compile.c (iseq_set_exception_table): allocates catch_table only
- when entries exist.
-
- * compile.c (struct iseq_link_element, struct iseq_insn_data): made
- enum for debuggers.
-
-Sun Apr 20 14:44:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_compile_each): fix for splat in when and rescue.
- a patch from wanabe <s.wanabe AT gmail.com> in [ruby-dev:34429].
- [ruby-core:14537]
-
-Sun Apr 20 13:55:37 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (copy_stream_fallback): write directly (bypassing write method)
- if possible.
-
-Sun Apr 20 12:49:03 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (copy_stream_fallback): read directly (bypassing readpartial
- method) if possible.
-
-Sun Apr 20 04:45:13 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (copy_stream_body): use readpartial and write method for
- non-IOs such as StringIO and ARGF.
-
-Fri Apr 18 20:57:33 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_array.rb: add tests to achieve over 95% test coverage
- of array.c.
-
-Fri Apr 18 17:37:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_gc_mark_locations): get rid of underflow.
-
- * gc.c (mark_current_machine_context): check if the main thread stack
- position may shrink under the initialized position. [ruby-core:16436]
-
-Thu Apr 17 22:20:52 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * enc/trans/utf_16_32.c (fun_so_to_utf_16be, fun_so_to_utf_16le): add
- parentheses to remove warnings of gcc.
-
- * io.c (rb_io_getc): remove unused variables.
-
- * compile.c (NODE_NEXT, NODE_REDO): remove unused labels.
-
- * ext/nkf/nkf.c (rb_nkf_convert): remove unused variables.
-
- * ext/syck/rubyext.c (syck_resolver_initialize,
- syck_resolver_detect_implicit, syck_emitter_emit): remove unused
- variables.
-
-Thu Apr 17 20:12:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_rubyoptions.rb (test_search): enable some assertions.
-
- * test/ruby/test_rubyoptions.rb: flunk message in win32.
-
-Thu Apr 17 16:07:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_rubyoptions.rb (ruby): run in C locale.
-
- * test/ruby/test_rubyoptions.rb (test_encoding): --encoding does not
- affect source code.
-
-Thu Apr 17 00:45:41 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_process.rb (test_rlimit_nofile): reset RLIMIT_NOFILE
- before exit (for gcov).
-
- * test/ruby/test_rubyoptions.rb: new tests for option of ruby
- interpreter, to achieve over 95% test coverage of ruby.c.
-
-Wed Apr 16 02:40:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): preludes and parser need to run in safe
- level 0. [ruby-dev:34407]
-
-Wed Apr 16 02:26:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): dln_find_file returns the pointer to a
- static buffer, so should copy it. [ruby-dev:34409]
-
-Tue Apr 15 23:08:46 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/xmlrpc/client.rb: fix cookie handling. [ruby-dev:34403]
-
- * test/xmlrpc/test_cookie.rb: add a test for the above fix.
-
-Tue Apr 15 19:20:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c: #undef rb_argv moved before #define.
-
-Tue Apr 15 18:02:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_argv): replaced with rb_get_argv().
- [ruby-Bugs-19514]
-
-Tue Apr 15 17:10:59 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * lib/net/http.rb, lib/net/smtp.rb, lib/net/pop.rb: update
- URLs of Japanese documents.
-
-Tue Apr 15 16:45:14 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_symbol.rb (TestSymbol#test_to_proc): add tests.
-
-Tue Apr 15 15:38:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-encoding-map): added shift-jis for older
- versions.
-
- * misc/ruby-mode.el (ruby-mode-set-encoding):
- coding-system-to-mime-charset is not a standard function.
- [carbon-emacs:795]
- fix for the case that magic comment exists but coding system is
- absent.
-
- * misc/ruby-mode.el (ruby-mode): use write-contents-functions or
- write-contents-hooks for older versions.
-
-Tue Apr 15 07:21:21 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_div): [ruby-dev:34357]
-
- * complex.c (nucomp_abs): use hypot.
-
- * complex.c (nucomp_quo): do not force conversion.
-
- * test/ruby/test_complex.rb: omitted some meaningless tests.
-
-Mon Apr 14 23:25:50 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_objectspace.rb: add a test for
- ObjectSpace.count_objects.
-
-Mon Apr 14 22:44:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (SET_EXTERNAL_ENCODING): avoid call rb_enc_check() on
- half-baked result string.
-
- * re.c (rb_reg_search): make search reentrant. [ruby-dev:34223]
-
- * test/ruby/test_parse.rb (TestParse::test_global_variable):
- should preserve $& variable.
-
-Mon Apr 14 17:23:27 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * hash.c (rb_hash_delete_if, rb_hash_reject_bang, env_delete_if,
- env_reject_bang): Return an enumerator if no block is given.
-
-Mon Apr 14 14:33:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c, compile.h (compile_debug): made runtime option.
-
- * debug.c (ruby_debug_print_indent): returns if debug_level exceeds
- the threshold.
-
- * debug.c (ruby_debug_printf): printf to stderr.
-
- * iseq.c (make_compile_option, make_compile_option_value): added
- debug_level option.
-
- * vm_core.h (rb_compile_option_t): added debug_level.
-
- * vm_core.h (struct iseq_compile_data): added node_level.
-
-Mon Apr 14 12:52:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (Init_stack): use ruby_init_stack. [ruby-dev:34350]
-
- * gc.c (rb_objspace_t): packed globals. [ruby-dev:34348]
-
- * gc.c (finalizers): removed. [ruby-dev:34349]
-
-Mon Apr 14 11:30:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (ary_new): new integer overflow check condition.
- suggested by TOYOFUKU Chikanobu <nobu_toyofuku at nifty.com> in
- [ruby-dev:34156].
-
- * array.c (rb_ary_initialize): ditto.
-
-Mon Apr 14 00:51:40 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_parse.rb: add tests to achieve over 95% test coverage
- of parse.y.
-
-Sun Apr 13 23:53:58 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enum.c (enum_cycle): Make Enumerable#cycle do a finite loop when
- the number of cycles is specified.
-
- * array.c (rb_ary_cycle): Ditto for Array#cycle.
-
-Sun Apr 13 18:52:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (lock_func): should not check interrupts in
- blocking region. [ruby-dev:34378]
-
-Sat Apr 12 12:41:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_exec_node, ruby_run_node), ruby.c (process_options):
- use iseq instead of NODE.
-
- * gc.c (source_filenames): removed.
-
- * include/ruby/intern.h, parse.y (yycompile, parser_mark, parser_free,
- ripper_initialize): rb_source_filename() is no longer used.
-
- * compile.c, compile.h (ERROR_ARGS), parse.y (node_newnode, fixpos,
- parser_warn, e_option_supplied, warn_unless_e_option, range_op,
- cond0): nd_file is no longer used.
-
-Sat Apr 12 12:17:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * prelude.rb (require_relative): move require_relative from
- lib/require_relative.rb. [ruby-core:16356]
-
- * lib/require_relative.rb: removed.
-
-Sat Apr 12 05:55:57 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems*, test/rubygems*: Update to RubyGems 1.1.1 r1701.
-
-Sat Apr 12 03:13:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): set external encoding.
-
- * file.c (rb_file_s_basename, rb_file_s_dirname, rb_file_s_extname):
- copy encoding.
-
-Fri Apr 11 17:35:06 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (count_i): modified to shut warning up.
-
-Fri Apr 11 17:25:09 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enum.c (count_i, count_iter_i, enum_count, enum_find_index):
- Reduce code.
-
-Fri Apr 11 17:06:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (find_index_i): modified to shut warning up.
-
- * enum.c (find_index_iter_i): ditto.
-
-Fri Apr 11 16:44:43 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * enum.c (enum_find_index): Add support for find_index(obj);
- [ruby-dev:34313].
-
- * array.c (rb_ary_index): Define find_index as an alias to index.
-
-Fri Apr 11 16:42:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/yaml/store.rb (YAML::load): modified to support empty
- database.
-
-Fri Apr 11 08:05:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): add volatile to avoid potential GC bug. a
- patch from Tomoyuki Chikanaga <chikanag at nippon-control-system.co.jp>
- in [ruby-dev:34312].
-
-Thu Apr 10 23:08:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/pstore.rb (PStore::dump, PStore::load): allow subclass
- overriding. [ruby-dev:34305]
-
- * lib/yaml/store.rb (YAML::Store::marshal_dump_supports_canonical_option?):
- add a method to support faster PStore.
-
-Thu Apr 10 20:36:45 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * misc/rdebug.el, misc/README: Remove rdebug.el as per request
- from the maintainer and mention the ruby-debug project at
- RubyForge in README; bug#19043.
-
-Thu Apr 10 19:41:00 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * eval.c (rb_f_loop): Mention StopIteration in the document.
-
-Thu Apr 10 19:23:55 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * array.c (rb_ary_pop_m, rb_ary_shift_m): Update documents for
- #pop() and #shift().
-
- * array.c (rb_ary_slice_bang): Update document. Assigning
- array[*args]= nil no longer removes elements.
-
-Thu Apr 10 16:58:44 2008 Tanaka Akira <akr@fsij.org>
-
- * marshal.c (w_object): TYPE_USERDEF assigns id for ivars first.
- [ruby-dev:34159] by nagachika.
-
-Thu Apr 10 15:03:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/generator.rb: removed obsolete library. [ruby-core:16233]
-
- * test/test_generator.rb: removed as well. [ruby-dev:34306]
-
- * lib/pstore.rb: replaced by Hongli Lai's faster version.
-
-Thu Apr 10 10:27:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread_pthread.c (native_sleep): sleep_cond is initialized at
- creation. [ruby-Patches-19361].
-
-Wed Apr 9 14:43:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (lock_func): optimized and checks for interrupt_flag.
- based on a patch from Sylvain Joyeux in [ruby-Patches-19361] and
- [ruby-Patches-19362].
-
-Wed Apr 9 12:12:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_thread.rb: new tests from Sylvain Joyeux in
- [ruby-Patches-19361].
-
-Tue Apr 8 21:36:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_mutex_sleep): ensures to re-acquire at waking up.
- [ruby-Patches-19361]
-
-Tue Apr 8 11:00:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/complex.rb: remove Math first before overwriting by CMath.
-
-Tue Apr 8 10:34:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * load.c (rb_require_safe): should check fname path after $SAFE is
- properly set. [ruby-dev:34268]
-
- * re.c (rb_reg_quote): should always copy the quoting string.
- [ruby-core:16235]
-
-Tue Apr 8 10:30:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (prelude.c): depends on enc/prelude.rb.
-
- * enc/prelude.rb: fixed initial library names.
-
-Tue Apr 8 03:39:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (rb_provided): check expanded path for relative path
- features, loading or loaded features are already expanded in 1.9.
-
- * variable.c (rb_autoload_load): no needs to check if provided before
- rb_require_safe. [ruby-dev:34266]
-
-Mon Apr 7 22:41:21 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * numeric.c: cancelled recent changes (except to remove rdiv).
-
- * bignum.c: ditto.
-
- * bignum.c: added rb_big_idiv.
-
-Mon Apr 7 15:51:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (enc_init_db): moved to enc/encdb.c.
-
- * transcode.c (init_transcoder_table): moved to enc/trans/transdb.c.
-
- * enc/depend (enc/encdb.o enc/trans/transdb.o): depend on
- corresponding headers.
-
- * common.mk (COMMONOBJS): moved transcode.o from OBJS
-
-Mon Apr 7 12:26:32 2008 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb: add a known-bug.
-
-Mon Apr 7 12:15:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * range.c (range_each_func): should not leave a variable
- uninitialized, which could cause SEGV.
-
- * range.c (range_step): removed duplicated and unreachable code.
-
-Mon Apr 7 02:12:27 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_intern): need not to check if tainted.
- [ruby-dev:34219]
-
-Sun Apr 6 09:45:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (dir_tell): check if closed. [ruby-core:16223]
-
-Sat Apr 5 23:17:20 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/cmath.rb: new.
-
- * lib/complex.rb: depends lib/cmath.rb.
-
- * lib/rational.rb: added rdiv.
-
- * complex.c: removed some math functions.
-
-Sat Apr 5 05:50:57 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/parsers/parse_rb.rb: Fix uninitialized variable warnings.
-
- * lib/rdoc/generator/html.rb: ditto.
-
- * lib/rdoc/options.rb: Fix shadowed variable warning.
-
- * lib/webrick/httprequest.rb: Fix redefined method warning.
-
-Sat Apr 5 02:13:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_cmpint): moved from compar.c, to check bignum
- zero.
-
-Fri Apr 4 23:24:06 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_memsearch_qs): wrong boundary condition.
-
- * re.c (rb_memsearch_qs_utf8): ditto.
-
-Fri Apr 4 14:11:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_memsearch_qs): wrong boundary condition. a patch from
- wanabe <s.wanabe AT gmail.com> in [ruby-dev:34248].
-
-Fri Apr 4 05:57:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/pop.rb (Net::POP3::do_finish): clear @n_mails and
- @n_bytes as well. [ruby-core:16144]
-
-Fri Apr 4 01:59:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_step): add step for each iteration if begin and
- end are numeric. [ruby-core:15990]
-
-Fri Apr 4 00:42:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (Init_Bignum): rdiv method removed. [ruby-dev:34242]
-
- * complex.c (nucomp_quo): ditto.
-
- * numeric.c (num_rdiv): ditto.
-
- * rational.c (nurat_div): ditto.
-
- * complex.c (nucomp_fdiv): fdiv implementation restored.
-
- * numeric.c (num_quo): RDoc updated.
-
-Thu Apr 3 21:51:45 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (nucomp_int_check): function for DRY real check.
-
- * complex.c (nucomp_{add,sub,mul,div,expt}): use rb_num_coerce_bin().
-
-Thu Apr 3 19:59:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def (defineclass): check if cbase is a class or a module.
- [ruby-core:16118]
-
-Thu Apr 3 14:42:11 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (INSNS): add insns_info.inc.
-
- * common.mk (INSNS): make incs separately for nmake.
-
-Thu Apr 3 13:20:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (endb.h, transdb.h, prelude.c): depend on $(PREP) and
- check if really changed. [ruby-core:16102]
-
- * Makefile.in, common.mk, configure.in, {win32,bcc32}/Makefile.sub
- (MINIOBJS, ARCHMINIOBJS): separated.
-
-Thu Apr 3 09:00:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_set_sequence, iseq_insns_unification,
- insn_data_to_s_detail): constified.
-
- * iseq.c (insn_operand_intern, ruby_iseq_disasm_insn): ditto.
-
- * template/{insns_info,opt_sc,optunifs}.inc.tmpl: ditto.
-
- * tool/instruction.rb (OptUnifsIncGenerator): ditto.
-
-Thu Apr 3 08:46:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_include): add RDoc to describe that comparison
- for numeric is done according magnitude of values.
- [ruby-core:15907]
-
-Wed Apr 2 22:29:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * rational.c (nurat_int_check): function for DRY integer check.
-
- * numeric.c (num_rdiv): should always return rational number.
-
- * rational.c (nurat_add, nurat_sub, nurat_mul, nurat_fdiv,
- nurat_cmp): use rb_num_coerce_bin().
-
- * rational.c (nurat_division): does / and rdiv.
-
- * .gdbinit (rp): no longer use rb_p().
-
-Wed Apr 2 06:52:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * .gdbinit (rp): supports rational and complex numbers. it's
- cheating since it uses rb_p().
-
-Wed Apr 2 06:24:06 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/node.h: add new constants for rb_call()'s scope.
-
- * eval.c (iterate_method): use CALL_* scope constant to specify
- proper scope value.
-
- * eval.c (rb_each, rb_apply, rb_funcall, rb_funcall2, rb_funcall3):
- ditto.
-
-Tue Apr 1 21:19:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * rational.c: need to include <float.h> just once.
-
-Tue Apr 1 16:40:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (big2dbl): more precise conversion at edge cases.
- [ruby-dev:34195]
-
-Tue Apr 1 14:43:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: get rid of empty expansion.
-
- * configure.in: _setjmp is available but _longjmp is not on mingw.
-
-Tue Apr 1 09:41:22 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc,win}32/Makefile (config.h): need to define RUBY_SETJMP, etc.
-
-Tue Apr 1 07:31:58 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems* test/rubygems*: Import RubyGems 1.1.0.
-
-Tue Apr 1 03:20:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_SETJMP, RUBY_LONGJMP, RUBY_JMP_BUF): prefers
- _setjmp over setjmp and sigsetjmp. [ruby-core:16023]
- __builtin_setjmp cannot handle a variable.
-
- * configure.in (--with-setjmp-type): new option to override the
- default rule in the above.
-
- * eval_intern.h (ruby_setjmp, ruby_longjmp), gc.c (rb_setjmp),
- vm_core.h (rb_jmpbuf_t): use RUBY_SETJMP, RUBY_LONGJMP and
- RUBY_JMP_BUF.
-
-Tue Apr 1 01:55:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/resolv.rb (Resolv::Config.default_config_hash): requires
- win32/resolv to use Win32::Resolv. [ruby-dev:34138]
-
-Tue Apr 1 01:40:58 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: adopted the ruby's style.
-
- * rational.c: ditto.
-
-Tue Apr 1 00:17:35 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c: revert.
-
-Mon Mar 31 18:57:36 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc,win}32/Makefile.sub (config.h): define ssize_t.
-
- * io.c (copy_stream_body): some platform don't have O_NOCTTY.
-
-Mon Mar 31 18:42:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check for ssize_t. [ruby-dev:34184]
-
-Mon Mar 31 14:45:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_quo): should convert its operand to Rational.
-
- * rational.c (string_to_r_strict): should raise TypeError.
-
- * bignum.c (Init_Bignum): should not redefine Bignum#div.
- Numeric#div will do. [ruby-dev:34066]
-
-Mon Mar 31 04:05:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (io_getc): set coderange while getting characters.
-
-Sun Mar 30 23:16:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * proc.c (proc_dup): should copy is_lambda attribute as well.
- [ruby-talk:296244]
-
-Sun Mar 30 15:33:29 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c: IO.copy_stream implemented. [ruby-dev:33843]
-
- * thread.c (rb_fd_select): new function.
-
- * configure.in (sys/sendfile.h): check the header file.
- (sendfile): check the function.
- (pread): check the function.
-
-Sat Mar 29 14:18:41 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/*: full update Ruby/Tk to support Ruby(1.9|1.8) and Tc/Tk8.5.
-
- * ext/tk/lib/tkextlib/tile.rb: [incompatible] remove TileWidgets'
- instate/state/identify method to avoid the conflict with standard
- widget options. Those methods are renamed to ttk_instate/ttk_state/
- ttk_identify (tile_instate/tile_state/tile_identify are available
- too). Although I don't recommend, if you really need old methods,
- please define "Tk::USE_OBSOLETE_TILE_STATE_METHOD = true" before
- "require 'tkextlib/tile'".
-
- * ext/tk/lib/tkextlib/tile.rb: "Tk::Tile::__Import_Tile_Widgets__!"
- is obsolete. It outputs warning. To control default widget set,
- use "Tk.default_widget_set = :Ttk".
-
- * ext/tk/lib/tk.rb: __IGNORE_UNKNOWN_CONFIGURE_OPTION__ method and
- __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode) method are defined
- as module methods of TkConfigMethod. It may help users to wrap old
- Ruby/Tk scripts (use standard widgets) to force to use Ttk widgets.
- Ttk widgets don't have some options of standard widgets which are
- control the view of widgets. When set ignore-mode true, configure
- method tries to ignore such unknown options with no exception.
- Of course, it may raise other troubles on the GUI design.
- So, those are a little danger methods.
-
- * ext/tk/lib/tk/itemconfig.rb: __IGNORE_UNKNOWN_CONFIGURE_OPTION__
- method and __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode) method
- are defined as module methods of TkItemConfigMethod as the same
- purpose as TkConfigMethod's ones.
-
- * ext/tk/sample/ttk_wrapper.rb: A new example. This is a tool for
- wrapping old Ruby/Tk scripts (which use standard widgets) to use
- Ttk (Tile) widgets as default.
-
- * ext/tk/sample/tkextlib/tile/demo.rb: use ttk_instate/ttk_state
- method instead of instate/state method.
-
- * ext/tk/lib/tk/root, ext/tk/lib/tk/namespace.rb,
- ext/tk/lib/tk/text.rb, ext/tk/lib/tkextlib/*: some 'instance_eval's
- are replaced to "instance_exec(self)".
-
- * ext/tk/lib/tk/event.rb: bug fix on KEY_TBL and PROC_TBL (?x is not
- a character code on Ruby1.9).
-
- * ext/tk/lib/tk/variable.rb: support new style of operation argument
- on Tcl/Tk's 'trace' command for variables.
-
- * ext/tk/sample/demos-jp/widget, ext/tk/sample/demos-en/widget: bug fix
-
- * ext/tk/sample/demos-jp/textpeer.rb,
- ext/tk/sample/demos-en/textpeer.rb: new widget demo.
-
- * ext/tk/tcltklib.c: decrease SEGV troubles (probably)
-
- * ext/tk/lib/tk.rb: remove Thread.critical access if Ruby1.9
-
- * ext/tk/lib/tk/multi-tk.rb: support Ruby1.9 (probably)
-
- * ext/tk/lib/tkextlib/tile.rb: add method to define Tcl/Tk command
- to make Tcl/Tk theme sources (based on different version of Tile
- extension) available.
- (Tk::Tile::__define_LoadImages_proc_for_compatibility__)
-
- * ext/tk/lib/tk.rb, ext/tk/lib/tk/wm.rb: support dockable frames
- (Tcl/Tk8.5 feature). 'wm' command can treat many kinds of widgets
- as toplevel widgets.
-
- * ext/tk/lib/tkextlib/tile/style.rb: ditto.
- (Tk::Tile::Style.__define_wrapper_proc_for_compatibility__)
-
- * ext/tk/lib/tk/font.rb: add actual_hash and metrics_hash to get
- properties as a hash. metrics_hash method returns a boolean value
- for 'fixed' option. But metrics method returns numeric value
- (0 or 1) for 'fixed' option, because of backward compatibility.
-
- * ext/tk/lib/tk/timer.rb: sometimes fail to set callback procedure.
-
- * ext/tk/lib/tk.rb: add Tk.sleep and Tk.wakeup method. Tk.sleep
- doesn't block the eventloop. It will be better to use the method
- in event callbacks.
-
- * ext/tk/sample/tksleep_sample.rb: sample script about Tk.sleep.
-
-Thu Mar 27 20:44:22 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c (f_lcm): removed.
-
- * rational.c (rb_lcm, rb_gcdlcm): added.
-
- * lib/complex.rb (gcd, lcm, gcdlcm): removed.
-
- * lib/rational.rb (gcd, lcm, gcdlcm): ditto.
-
-Wed Mar 26 18:11:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_mod_constants): rdoc updated. a patch from
- Florian Gilcher <flo AT andersground.net> in [ruby-core:16009].
-
-Wed Mar 26 00:55:28 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_rand.rb: add tests to achieve over 95% test coverage
- of random.c.
-
-Wed Mar 26 00:28:55 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_rational.rb: add tests to achieve over 90% test
- coverage of rational.c.
-
- * test/ruby/test_complex.rb: ditto for complex.c.
-
-Tue Mar 25 19:34:05 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bootstraptest/test_knownbug.rb: add tests. [ruby-dev:34128]
-
-Tue Mar 25 19:09:04 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * array.c (ary_new): fix size check. [ruby-dev:34123]
-
- * array.c (rb_ary_take, rb_ary_drop): check negative size and use
- NUM2LONG instead of FIX2LONG. [ruby-dev:34123]
-
- * enum.c (enum_take, enum_drop): check negative size.
-
- * test/ruby/test_array.rb: add tests for above.
-
-Tue Mar 25 16:32:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): checks if the word is empty.
-
- * ruby.c (process_options): typo fixed. [ruby-dev:34122]
-
-Tue Mar 25 15:26:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (defined_expr): false short-circuit destination label may
- be needed. [ruby-talk:295296]
-
- * compile.c (iseq_compile_each): put nil if false short-circuit is
- created.
-
- * compile.c (compile_massign_opt): no need to use alloca.
-
-Mon Mar 24 19:23:52 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * parse.y (debug_lines): Always prepare a new array for each
- file's SCRIPT_LINES__ storage, instead of appending source lines
- every time a file is re-loaded; submitted by Rocky Bernstein in
- #18517.
-
-Mon Mar 24 10:25:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: sitearch should use target_cpu. [ruby-core:15986]
-
-Sun Mar 23 02:51:57 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (rlimit_resource_value): use NUM2RLIM.
-
-Sun Mar 23 02:28:01 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: fixed. [ruby-dev:34109]
-
- * rational.c: ditto.
-
-Fri Mar 21 21:32:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_f_gets, rb_f_readline, rb_f_readlines): delegates to ARGF
- as well as puts and putc. [ruby-dev:34100]
-
-Fri Mar 21 21:26:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/resolv.rb (Resolv::Hosts): should not use win32/resolv on cygwin.
- [ruby-dev:29945], [ruby-dev:34095]
-
- * lib/win32/registry.rb (Win32::Registry.expand_environ): try upcased
- name too for cygwin. [ruby-dev:29945]
-
- * lib/win32/resolv.rb (Win32::Resolv.get_hosts_path): use expand_path.
-
-Fri Mar 21 21:10:00 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/ipaddr.rb: Say that I am the current maintainer.
-
- * lib/set.rb: Ditto.
-
- * lib/shellwords.rb: Ditto.
-
- * ext/syslog/syslog.txt: Ditto.
-
-Fri Mar 21 09:24:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (open_for_install): write block result and rewrite only
- if changed from existing file.
-
-Fri Mar 21 08:29:33 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c (nurat_to_f): rearrangement.
-
-Fri Mar 21 06:44:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * rational.c (nurat_to_f): C99.
-
-Fri Mar 21 01:40:27 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * complex.c (nucomp_sub, nucomp_expt): call corresponding functions.
-
-Fri Mar 21 01:21:43 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * missing/tgamma.c: include config.h before math.h. [ruby-dev:34075]
-
-Thu Mar 20 21:46:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (argf_getline): use receiver.
-
-Thu Mar 20 21:20:19 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c: some improvements (include Shin-ichiro HARA's
- effort).
-
- * complex.c: some improvements.
-
- * test/ruby/test_rational2.rb: new.
-
-Thu Mar 20 00:21:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (argf_initialize_copy): get rid of segfault.
-
- * io.c (argf_tell, argf_seek_m, argf_set_pos, argf_rewind,
- argf_fileno, argf_to_io, argf_eofl, argf_getc, argf_getbyte,
- argf_readchar, argf_readbyte, argf_each_line): use receiver.
-
-Wed Mar 19 23:52:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_putc, rb_io_puts): output directly if the receiver is
- rb_stdout to get rid of infinite recursion. [ruby-dev:34059]
-
-Wed Mar 19 22:27:41 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * rational.c: added rb_gcd.
-
- * complex.c: use rb_gcd.
-
-Wed Mar 19 18:37:00 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * complex.c: revert.
-
- * rational.c: revert.
-
-Wed Mar 19 17:31:20 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval_intern.h (TH_EXEC_TAG): need not to FLUSH_REGISTER_WINDOWS.
- [ruby-core:15871], [ruby-dev:34088]
-
-Wed Mar 19 14:53:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * complex.c (nucomp_to_s, nucomp_inspect): get rid of making
- unnecessary intermediate objects.
-
- * complex.c (make_patterns, string_to_c): do not treat successive
- underscores as a part of numeric like as literals. [ruby-dev:34085]
-
- * rational.c (make_patterns, string_to_r): ditto.
-
-Wed Mar 19 14:36:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_cstr_to_inum): treat successive underscores as
- nondigit. [ruby-dev:34089]
-
-Wed Mar 19 14:08:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (enc_check_encoding): should not load autoloaded encoding
- directly, instead use rb_enc_find_index() which deal with alias and
- replica. [ruby-core:15957]
-
-Wed Mar 19 11:49:47 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * regint.h (include): include ruby.h instead of defines.h and config.h.
-
-Wed Mar 19 10:17:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regint.h (CHECK_INTERRUPT_IN_MATCH_AT): add interrupt check
- during match. [ruby-talk:295002]
-
-Tue Mar 18 16:24:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (literal_concat_gen): bail out at different encoding.
-
-Tue Mar 18 04:00:27 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_memsearch_ss): simple shift search.
-
- * re.c (rb_memsearch_qs): quick search.
-
- * re.c (rb_memsearch_qs_utf8): quick search for UTF-8 string.
-
- * re.c (rb_memsearch_qs_utf8_hash): hash functions for above.
-
- * re.c (rb_memsearch): use above functions.
-
- * string.c (rb_str_index): give enc to rb_memsearch.
-
- * include/ruby/intern.h (rb_memsearch): move to encoding.h.
-
- * include/ruby/encoding.h (rb_memsearch): move from intern.h.
-
- * common.mk (PREP): add dependency.
-
-Mon Mar 17 22:23:54 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * array.c (rb_ary_take, rb_ary_take_while, rb_ary_drop,
- rb_ary_drop_while): new methods. [ruby-dev:34067]
-
- * test/ruby/test_array.rb: add tests for above.
-
-Mon Mar 17 17:11:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-mode): should use `run-mode-hooks' instead
- of calling `run-hooks' directly to run the mode hook. patch from
- Chiyuan Zhang <pluskid AT gmail.com> in [ruby-core:15915]
-
-Mon Mar 17 16:41:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: unset GREP_OPTIONS. [ruby-core:15918]
-
-Sun Mar 16 18:07:07 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/utf_16_32.c: bug fix (some invalid UTF-8 sequences
- were legal)
-
- * test/ruby/test_transcode.rb: test for above bug
-
-Sun Mar 16 17:28:07 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk (LIBRUBY_SO): add dependency to $(BUILTIN_ENCOBJS).
-
-Sun Mar 16 08:51:41 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * include/ruby/intern.h: added some declarations.
-
- * include/ruby/ruby.h: ditto.
-
- * common.mk: added some entries.
-
- * configure.in: added a check for signbit.
-
- * lib/complex.rb: nearly all of core definitions have been removed.
-
- * lib/rational.rb: ditto.
-
- * lib/mathn.rb: some trivial adjustments.
-
- * complex.c: new.
-
- * rational.c: ditto.
-
- * numeric.c (flo_{quo,rdiv}, fix_fdiv): added.
-
- * numeric.c ({num,int}_{numerator,denominator}): ditto.
-
- * bignum.c (rb_big_fdiv): ditto.
-
- * numeric.c (fix_{quo,pow}): now may yield rational number.
-
- * bignum.c (rb_big_{quo,pow}): ditto.
-
- * numeric.c (rb_{int,flo}_induced_from): now can accept rational.
-
- * gc.c (gc_mark_children, obj_free): now detects complex and rational.
-
- * inits.c (rb_call_inits): now calls Init_{Complex,Rational}.
-
- * test/ruby/test_complex.rb: new.
-
- * test/ruby/test_rational.rb: ditto.
-
-Sat Mar 15 17:48:48 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (rb_enc_associate_index): pass unnecessary enc_capable().
-
- * string.c (rb_str_cmp): reduce invocation of rb_enc_compatible().
-
-Fri Mar 14 17:04:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (inttypes.h): includes always if available.
-
- * string.c, ext/digest/defs.h: moved inttypes.h to ruby.h.
-
-Fri Mar 14 16:59:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_LIB_PREFIX): fix for prefix.
-
-Fri Mar 14 16:35:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::Cookie::initialize): performance patch from
- Makoto Kuwata <kwa@kuwata-lab.com> in [ruby-dev:34048].
-
-Fri Mar 14 15:49:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_LIB_PREFIX): use libdir.
-
-Fri Mar 14 14:24:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/digest/defs.h: inttypes.h is still needed.
-
-Fri Mar 14 11:34:12 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc,win}32/Makefile.sub: follow below changes.
-
-Fri Mar 14 11:24:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-encoding-map, ruby-use-encoding-map): added
- to customize.
-
-Fri Mar 14 10:37:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in (int8_t, uint8_t, int16_t, uint16_t int32_t,
- uint32_t int64_t, uint64_t, int128_t, uint128_t,
- intptr_t, uintptr_t): check if defined.
-
- * win32/Makefile.sub: follow configure.in.
-
- * ext/digest/defs.h: remove checks for uint8_t, uint32_t and uint64_t.
-
-Fri Mar 14 10:12:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_CHECK_VARTYPE): should not indent preprocessor
- directives.
-
-Fri Mar 14 10:03:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (UNALIGNED_WORD_ACCESS): IA64 cannot access unaligned word.
-
-Thu Mar 13 21:00:50 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_slice_bang): should not use rb_ary_subseq()
- which shares internal pointer. splice modifies the receiver
- right after subseq. [ruby-dev:34005]
-
- * bootstraptest/test_struct.rb: some test moved from test to shut
- warning up.
-
-Thu Mar 13 19:42:43 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc,win}32/Makefile.sub (config.h): define uint32_t.
-
-Thu Mar 13 14:14:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * trunk/configure.in (AC_CHECK_HEADERS): stdint.h is not needed to
- check.
-
- * trunk/configure.in (rb_cv_type_uint32_t): unquoted. [ruby-dev:34030]
-
- * trunk/string.c (hash): use inttypes.h instead of stdint.h.
-
-Thu Mar 13 10:42:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_divmod): should return integer division. [ruby-dev:34006]
-
- * enum.c (zip_ary): wrong boundary condition.
-
- * test/ruby/test_numeric.rb (TestNumeric::test_num2long): bit-and
- should not raise RangeError.
-
-Thu Mar 13 03:12:48 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/cmd/help.rb: should be updated for new ri structure.
- [ruby-core:15825]
-
- * lib/rdoc/ri/driver.rb (RDoc::initialize): allow options to be optional.
-
- * lib/rdoc/ri/driver.rb (RDoc::class_cache): map_dirs may be
- empty.
-
- * lib/rdoc/ri/driver.rb (RDoc::get_info_for): revive get_info_for
- method. maybe broken.
-
- * lib/rdoc/ri/util.rb (RDoc::initialize): should not use RiError
- no more.
-
-Thu Mar 13 01:45:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (stdint.h): check if presence.
-
- * configure.in (uint32_t): check if defined.
-
- * string.c (hash): fix for portability. [ruby-dev:34020]
-
-Wed Mar 12 17:33:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (rb_cstr_to_dbl): fix for a mere underscore.
-
-Wed Mar 12 14:47:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_intern.h (rb_thread_raised_set): use generic flags.
-
- * eval.c (rb_longjmp): clear all raised flags.
-
- * eval.c (stack_check): leave clearing flag to rb_longjmp.
-
- * gc.c (rb_memerror): use thread raised flag instead of static flag.
-
-Tue Mar 11 23:38:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_combination): argument check before creating
- Enumerator.
-
- * array.c (rb_ary_permutation): ditto.
-
- * enum.c (enum_zip): optimize if all arguments are arrays.
-
-Tue Mar 11 19:48:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (fix_coerce): try conversion before type check.
- [ruby-core:15838]
-
-Tue Mar 11 12:39:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (clean-local): WINMAINOBJ is Windows specific.
-
-Tue Mar 11 10:19:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (hash): replaced by MurmurHash described in
- <http://murmurhash.googlepages.com/>.
-
-Tue Mar 11 09:52:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_comparable): empty strings in any encoding are
- compatible each other.
-
-Tue Mar 11 00:46:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (usage): remove some unimportant lines to fit -h message
- in a page. [ruby-dev:34018]
-
-Mon Mar 10 17:11:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_local_variables): local_variables should return an
- array of symbols. [ruby-dev:34008]
-
- * vm.c (collect_local_variables_in_env): ditto.
-
-Mon Mar 10 15:53:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * version.c (MKSTR): make US-ASCII. [ruby-dev:34010]
-
-Mon Mar 10 02:08:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_index): if t == s + pos, the character beginning
- from s + pos is valid.
-
-Sun Mar 9 13:51:21 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/generator.rb: Restore missing line to #params. Patch by
- Lincoln Stoll <lstoll at lstoll.net>
-
-Sun Mar 9 09:52:00 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/code_objects.rb: Remove debugging Kernel#p. Patch by
- Lincoln Stoll <lstoll at lstoll.net>
- * lib/rdoc/generator/html.rb: Fully qualify AllReferences. Patch by
- Lincoln Stoll <lstoll at lstoll.net>
- * lib/rdoc/ri/writer.rb: Fix 1.8 backwards compatibility.
-
-Sat Mar 8 18:50:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (isdirsep): backslash is valid path separator on cygwin too.
-
-Sat Mar 8 06:53:48 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (search_nonascii): Use VALUE instead of unsigned long
- because VALUE can be the fastest unsigned integer type.
- On LLP64 unsigned long isn't the fastest.
- * string.c (str_strlen): ditto.
- * string.c (str_utf8_nth): ditto.
- * string.c (count_utf8_lead_bytes_with_ulong): ditto.
-
- * string.c (count_utf8_lead_bytes_with_word): renamed.
-
-Fri Mar 7 21:27:43 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c: fix indent.
-
-Fri Mar 7 21:12:19 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c (power_cache_init, power_cache_get_power0, Init_Bignum):
- delayed initializing power cache per base. [ruby-dev:34003]
-
-Fri Mar 7 20:30:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (cont_restore_0): fixed typo. [ruby-core:15821]
-
-Fri Mar 7 19:56:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb: rdoc added. [ruby-Patches-9762]
-
-Thu Mar 6 17:26:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): space flag is in effect for Inf/NaN too.
- [ruby-dev:34002]
-
-Thu Mar 6 15:44:20 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * sprintf.c (rb_str_format): casting double to long is undefined
- if the integer part of double is out of the range of long.
-
-Thu Mar 6 15:11:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): ignore 0 flag for NaN and Inf.
- [ruby-dev:33994]
-
-Thu Mar 6 15:05:25 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc32,win32}/Makefile.sub (RUNRUBY): use $(PROGRAM) instead of
- ruby$(EXEEXT).
- suggested by KIMURA Koichi <kimura.koichi at canon.co.jp>.
- [ruby-dev:34000]
-
-Thu Mar 6 14:46:08 2008 Tanaka Akira <akr@fsij.org>
-
- * missing/lgamma_r.c (loggamma): return 0 for 1 and 2.
-
- * test/ruby/test_math.rb: accept errors by functions under missing/.
-
-Thu Mar 6 14:29:44 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c (rb_str_transcode_bang): set coderange.
-
- * transcode.c (rb_str_transcode): use rb_str_transcode_bang.
-
-Thu Mar 6 14:00:10 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/missing.h (cbrt): add declaration.
-
-Thu Mar 6 11:14:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-add-log-current-method): use ruby style
- method name format.
-
-Thu Mar 6 11:12:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): no need of loop.
-
-Thu Mar 6 08:30:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_mod_freeze): call rb_class_name() directly.
- [ruby-core:15802]
-
-Thu Mar 6 04:32:06 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (count_utf8_lead_bytes_with_ulong): fix shift size.
- [ruby-dev:33993]
-
- * string.c (str_utf8_nth) fix wrong counting.
-
-Thu Mar 6 00:34:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): size_t returned from strlen() can be
- unsigned.
-
-Thu Mar 6 00:31:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * struct.c (make_struct): preserve encoding of struct name.
-
-Wed Mar 5 22:49:20 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (is_utf8_lead_byte, count_utf8_lead_bytes_with_ulong):
- defined for UTF-8 optimization.
-
- * string.c (str_strlen): use is_utf8_lead_byte and
- count_utf8_lead_bytes_with_ulong.
-
- * string.c (str_utf8_nth) ditto.
-
-Wed Mar 5 17:53:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_flock): returns false on EAGAIN if non-blocking.
- [ruby-core:15795]
-
-Wed Mar 5 17:43:43 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c (transcode_loop): Adjusted detection of invalid
- (ill-formed) UTF-8 sequences. Fixing potential security issue, see
- http://www.unicode.org/versions/Unicode5.1.0/#Notable_Changes.
-
- * test/ruby/test_transcode.rb: Added two tests for above fix.
-
-Wed Mar 5 14:00:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_to_s): avoid rb_scan_args() when no argument
- given.
- * bignum.c (rb_big_to_s): ditto.
- * enum.c (enum_first): ditto.
- * eval_jump.c (rb_f_catch): ditto.
- * io.c (rb_obj_display): ditto.
- * class.c (rb_obj_singleton_methods): ditto.
- * object.c (rb_class_initialize): ditto.
- * random.c (rb_f_srand): ditto.
- * range.c (range_step): ditto.
- * re.c (rb_reg_s_last_match): ditto.
- * string.c (rb_str_to_i): ditto.
- * string.c (rb_str_each_line): ditto.
- * string.c (rb_str_chomp_bang): ditto.
- * string.c (rb_str_sum): ditto.
-
- * string.c (str_modifiable): declare inline.
- * string.c (str_independent): ditto.
-
-Wed Mar 5 11:50:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/debug.rb: require 'continuation' to implement "restart"
- command. [ruby-dev:33992]
-
- * lib/debug.rb (Context::debug_command): remove local variable
- shadowing to shut up warnings. [ruby-dev:33992]
-
- * lib/debug.rb (Context::display_list): ditto.
-
- * lib/debug.rb (Context::resume): ditto.
-
- * lib/debug.rb (Context::get_thread): no longer use #index for Hash.
-
-Tue Mar 4 21:35:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb.rb (IRB::Irb::eval_input): SyntaxError should not be
- considered as IRB bug. [ruby-dev:33991]
-
- * lib/irb/workspace.rb (IRB::WorkSpace::filter_backtrace): should
- filter 'irb.rb' as well for context mode 2 and 3.
-
-Tue Mar 4 19:10:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_aset): should not copy key string when
- compare_by_identity is set. [ruby-dev:33604]
-
- * hash.c (hash_equal): two hash tables are different when internal
- comparison table differ. [ruby-dev:33989]
-
-Tue Mar 4 16:29:06 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_yylex): disallow non digits '0o' expression.
-
-Tue Mar 4 14:35:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (open_key_args): use rb_io_open_with_args instead of rb_f_open.
- [ruby-core:15763]
-
-Tue Mar 4 13:41:46 2008 Tanaka Akira <akr@fsij.org>
-
- * gc.c (add_heap): fix previous change. [ruby-dev:33988]
-
-Tue Mar 4 10:21:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (add_heap): use binary search to find the place to insert the
- new heap slot. [ruby-dev:33983]
-
-Tue Mar 4 05:30:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (open_key_args): use rb_io_open instead of rb_f_open.
- [ruby-core:15746]
-
-Mon Mar 3 23:28:37 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpservlet/filehandler.rb: should normalize path
- separators in path_info to prevent directory traversal
- attacks on DOSISH platforms.
- reported by Digital Security Research Group [DSECRG-08-026].
-
- * lib/webrick/httpservlet/filehandler.rb: pathnames which have
- not to be published should be checked case-insensitively.
-
-Mon Mar 3 17:25:45 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (add_heap): sort heaps array in ascending order to use
- binary search.
-
- * gc.c (is_pointer_to_heap): use binary search to identify object
- in heaps. works better when number of heap segments grow big.
-
-Mon Mar 3 17:15:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_regsub): remove too strict encoding check.
- [ruby-dev:33966]
-
-Mon Mar 3 16:14:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (rb_any_hash): shrinks all results in Fixnum range.
- [ruby-core:15713]
-
-Sun Mar 2 23:03:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_ungetc): reduce redundant call.
-
-Sun Mar 2 10:13:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (load_file): parse shebang in us-ascii. a patch from
- sheepman <sheepman AT sheepman.sakura.ne.jp> in [ruby-dev:33955]
-
-Sun Mar 2 00:08:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (rb_cstr_to_dbl): check for successive underscores.
- [ruby-dev:33952]
-
-Sat Mar 1 17:59:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (struct argf): packed ARGF stuffs.
-
- * ruby.c (proc_options): use ruby_set_inplace_mode().
-
-Sat Mar 1 17:51:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/collector/dir.rb (recursive_collect): do not always
- include all test_*.rb.
-
-Sat Mar 1 14:14:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * development snapshot 1.9.0-1 released.
-
-Sat Mar 1 13:46:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * tool/make-snapshot: make prereq uses MINIRUBY.
-
- * tool/make-snapshot: allow packaging like 1.9.0-1 by second
- command-line argument.
-
-Sat Mar 1 13:11:03 2008 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/allpairs.rb: new file for all pairs method.
-
- * test/ruby/test_m17n_comb.rb: use allpairs.rb to reduce test cases.
-
- * test/ruby/test_sprintf_comb.rb: ditto.
-
-Sat Mar 1 12:34:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (sym_inspect): use rb_str_inspect() instead of
- rb_str_dump(). [ruby-dev:33946]
-
-Sat Mar 1 12:15:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval_method.c (rb_get_method_body): ent->method may be freed by
- GC. [ruby-dev:31819]
-
- * thread.c (remove_event_hook): should not access freed memory.
- [ruby-dev:31820]
-
-Sat Mar 1 10:31:19 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (read_all, rb_io_getline_fast): encoding is io_input_encoding.
-
-Sat Mar 1 10:09:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (tr_setup_table, rb_str_split_m, rb_str_chomp_bang):
- simplified with rb_enc_ascget(). [ruby-dev:33944]
-
-Sat Mar 1 10:01:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_coderange_scan_restartable): should not return
- offset in the middle of a character.
-
- * string.c (rb_str_coderange_scan_restartable): should not return
- invalid cr value.
-
-Sat Mar 1 09:36:08 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_str_format): "%#.0o" should keep prefix where
- "%#.0x" should not.
-
-Sat Mar 1 02:35:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (big2str_find_n1): check integer overflow.
-
-Sat Mar 1 00:29:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_dummy_p): bootstrap encodings can not be dummy.
-
- * encoding.c (rb_enc_ascget): no needs to call rb_enc_precise_mbclen()
- twice.
-
-Fri Feb 29 23:14:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_m17n_comb.rb (TestM17NComb::test_str_chomp): test
- updated.
-
-Fri Feb 29 20:58:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_iterator.rb (TestIterator::test_enumerator):
- adjust test for zip behavior reversion.
-
-Fri Feb 29 20:25:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_chomp_bang): now works on UTF-16.
-
- * string.c (tr_setup_table): negation should work on non ASCII
- compatible strings as well.
-
- * string.c (rb_str_split_m): awk split should work on non ASCII
- compatible strings as well.
-
-Fri Feb 29 18:08:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_strftime): format should be ascii compatible.
-
- * parse.y (rb_intern3): non ASCII compatible symbols.
-
- * re.c (rb_reg_regsub): add encoding check.
-
- * string.c (rb_str_chomp_bang): ditto.
-
- * test/ruby/test_utf16.rb (TestUTF16::test_chomp): raises exception.
-
-Fri Feb 29 15:16:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_rpartition): calculation was done in byte indexing.
-
- * test/ruby/test_m17n_comb.rb (TestM17NComb::test_str_start_with):
- allow start_with? matching on broken strings.
-
-Fri Feb 29 15:12:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (opt_block_param): command can start just after block param
- definition. [ruby-list:44479]
-
-Fri Feb 29 03:22:19 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/ruby/test_time.rb (test_readers): fix typo.
- (test_strftime): "UTC" is also ok for time.gmtime.strftime("%Z").
-
-Fri Feb 29 02:50:07 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (str_new): remove encoding assumption of empty string.
-
- * hash.c ( rb_f_getenv, env_fetch, env_inspect): result of ENV should
- be always ASCII-8BIT.
-
- * object.c (nil_to_s): nil.to_s should be US-ASCII.
-
-Fri Feb 29 02:24:22 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: forgot to update RELEASE_DATE
-
- * ext/tk/lib/tk.rb, ext/tk/lib/tk/text.rb,
- ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb: remove adhoc check
- of Ruby's features (use existence of some classes instead of
- comparing with RUBY_VERSION)
-
- * ext/tk/lib/tk/root.rb, ext/tk/lib/tk/autoload.rb: make TkRoot
- (Tk::Root) unswitchable
-
- * ext/tk/lib/multi-tk.rb: partial bug fix (still not work!!)
-
-Thu Feb 28 23:37:12 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb (OpenURI::Meta#meta_setup_encoding): use ASCII-8BIT
- for charset unspecified non-text data.
-
-Thu Feb 28 22:19:14 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_capable): IMMEDIATE_P doesn't include Qnil and Qfalse.
- use SPECIAL_CONST_P.
-
-Thu Feb 28 19:45:52 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (enc_find): check type of argument and convert to String
- if it is StringValue. [ruby-cvs:22866]
-
-Thu Feb 28 18:07:52 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb (OpenURI::Meta#meta_setup_encoding): setup encoding
- by charset.
- (OpenURI::Meta#meta_add_field): call meta_setup_encoding when
- content-type.
-
-Thu Feb 28 15:29:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * io.c (rb_io_getline_fast): scan coderange.
-
-Thu Feb 28 14:36:46 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_enc_str_copy): removed.
-
-Thu Feb 28 13:51:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (stack_check): made flag per threads.
-
- * thread.c (rb_thread_set_raised, rb_thread_reset_raised): prefixed.
-
-Thu Feb 28 11:43:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_flock): immediately returns on EAGAIN if
- non-blocking. [ruby-core:15672]
-
-Thu Feb 28 11:23:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_getline_1): get rid of segfault. [ruby-dev:33938]
-
-Thu Feb 28 11:19:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_reverse_bang): removed unused variables.
-
- * include/ruby/encoding.h (rb_str_coderange_scan_restartable): added
- prototype.
-
- * string.c (rb_str_coderange_scan_restartable, rb_str_times): removed
- unused variables.
-
- * string.c (rb_str_reverse_bang): ditto
-
- * string.c (rb_enc_str_copy): unused now. may be used in future?
-
-Thu Feb 28 03:03:32 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb, ext/tk/lib/*: make default widget set
- switchable between Tk (standard Tcl/Tk widget set) and
- Ttk (Tile). Initial default widget set is Tk. Now, toplevel
- widget classes are removed and defined as aliases.
- For example, "TkButton" is an alias of the "Tk::Button" class.
- Those aliases are replaced when switching default widget set.
- "Tk.default_widget_set=" is the method for switching default
- widget set. "Tk.default_widget_set = :Ttk" defines Ttk (Tile)
- widget set as default. It means that "TkButton" denotes
- "Tk::Tile::Button" class. And then, "TkButton.new" creates
- a Tk::Tile::Button widget. Of course, you can back to use
- standard Tk widgets as the default widget set by calling
- "Tk.default_widget_set = :Tk", whenever you want. Based on
- the feature, you can use Ttk widget styling engine on your
- old Ruby/Tk application without modifying its source, if you
- don't use widget options unsupported on Ttk widgets (At first,
- call "Tk.default_widget_set = :Ttk", and next load and run
- your application).
- This is one step for supporting Tcl/Tk8.5 features.
-
-Wed Feb 27 22:55:42 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_coderange_scan_restartable): coderange scanning
- for partial read.
-
- * io.c (read_all): set coderange when not convert encoding.
-
-Wed Feb 27 03:55:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb, enc/make_encmake.rb: load current mkmf.rb even if
- cross-compiling.
-
- * ext/extmk.rb, enc/make_encmake.rb, lib/mkmf.rb: need to be 1.8
- compatible for cross-compiling.
-
-Tue Feb 26 16:53:13 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-calculate-indent): should distinguish
- comment and # in strings. [ruby-dev:33874]
-
-Tue Feb 26 16:41:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (combi_len, rb_ary_product): check for overflow.
- [ruby-Bugs-18355]
-
-Tue Feb 26 16:38:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (recursive_cmp): compare minimal length parts.
-
-Tue Feb 26 16:06:00 2008 Technorama Ltd. <oss-ruby@technorama.net>
-
- * ext/openssl/ossl_{ec,dh,dsa,rsa}.c: Remove useless warnings.
-
- * ext/openssl/ossl_asn1.c: Simplify code.
-
- * ext/openssl/ossl_ssl_session.c Fix compiler warnings.
- Undefine #id if SSL_SESSION_get_id is not supported.
-
-Tue Feb 26 15:50:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (value_expr_gen): removed inappropriate warning.
- [ruby-core:15660]
-
-Tue Feb 26 15:43:42 2008 Tanaka Akira <akr@fsij.org>
-
- * parse.y (tokadd_escape): refactored. [ruby-core:15657]
-
-Tue Feb 26 15:30:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_eql, rb_ary_cmp): get rid of stack overflow with
- self-recursive constructs. [ruby-Bugs-18356]
-
-Tue Feb 26 01:16:01 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (ROBJECT_NUMIV): renamed from ROBJECT_LEN.
- (ROBJECT_IVPTR): renamed from ROBJECT_PTR.
-
- * variable.c: follow the above renaming.
-
- * object.c: ditto.
-
- * gc.c: ditto.
-
- * marshal.c: ditto.
-
-Mon Feb 25 17:30:29 2008 Technorama Ltd. <oss-ruby@technorama.net>
-
- * ext/openssl/digest.c ext/openssl/lib/openssl/digest.rb:
- Commit patch #9280 from Akinori MUSHA.
- Simplify the OpenSSL::Digest class and make use of the
- existing Digest framework.
- Enhance performance.
-
-Mon Feb 25 15:33:29 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bignum.c (big2str_karatsuba): initialize cache if not initialized.
-
- * bignum.c (Init_Bignum): delayed initializing cache.
- [ruby-dev:33930]
-
-Mon Feb 25 13:40:03 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (Init_process): share bignum objects for RLIM_INFINITY,
- RLIM_SAVED_MAX and RLIM_SAVED_CUR if they are equal.
-
-Mon Feb 25 10:41:41 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * encoding.c (Encoding#dummy): minor grammatical fixes
- in rdoc documentation.
-
-Mon Feb 25 00:01:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cygwin/GNUmakefile.in (clean-local): should be double-colon.
-
-Sun Feb 24 23:39:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk, {bcc,win}32/Makefile.sub (clean-local): remove
- intermediate files.
-
- * cygwin/GNUmakefile.in (clean-local): remove def file.
-
-Sun Feb 24 06:49:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * debug.c (ruby_set_debug_option): separated ruby_each_words().
-
- * util.c (ruby_each_words): extracted from ruby_set_debug_option().
-
- * ruby.c (enable_option, disable_option): allow all for all known
- features.
-
- * ruby.c (proc_options): generalized enable/disable options.
-
- * ruby.c (ruby_init_gems): take enabled flag. [ruby-core:14840]
-
- * ruby.c (process_options): added --disable-rubyopt flag.
-
- * include/ruby/util.h (ruby_each_words): prototype.
-
-Sun Feb 24 05:25:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): check if argument for -E exists.
-
-Sun Feb 24 05:09:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-style.el (ruby-style-label-indent): fix for labels inside
- blocks in switch.
-
-Sun Feb 24 03:52:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (valid_filename): use O_EXCL to get rid of clobbering
- existing files in race conditions.
-
-Sat Feb 23 21:36:13 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/win32ole/win32ole.c (ole_init_cp): should return value.
-
-Sat Feb 23 20:16:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (str_sublen): removed.
-
- * string.c (rb_str_reverse, rb_str_reverse_bang): use
- single_byte_optimizable.
-
-Sat Feb 23 19:25:18 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_enc_cr_str_copy_for_substr): renamed from
- rb_enc_cr_str_copy.
-
- * string.c: use rb_enc_cr_str_copy_for_substr and keep coderange.
-
-Sat Feb 23 18:50:17 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_encoding2cp): remove US-ASCII
- mapping.
-
-Sat Feb 23 01:09:47 2008 Tanaka Akira <akr@fsij.org>
-
- * process.c (rlimit_resource_type): new function.
- (rlimit_resource_value): new function.
- (proc_getrlimit): use rlimit_resource_type to accept
- symbol and string as resource type.
- (proc_setrlimit): use rlimit_resource_type and rlimit_resource_value
- to accept symbol and string as resource type and values.
-
-Fri Feb 22 21:12:42 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_enc_cr_str_copy): check string's coderange is 7bit or
- valid.
-
-Fri Feb 22 19:50:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (BIGZEROP): fix for longer Bignum zeros. [ruby-Bugs-17454]
-
-Fri Feb 22 15:47:36 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_mbclen): return minlen instead of 1 when
- a character is not found properly.
-
- * string.c (rb_enc_strlen): round up string length with fixed
- multibyte encoding such as UTF-32.
- (rb_enc_strlen_cr): ditto.
- (rb_str_substr): fix substring with fixed multibyte encoding.
- (rb_str_justify): check number of characters.
-
-Fri Feb 22 12:11:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_inspect): string of ascii incompatible encoding
- should be escaped and returned as US-ASCII encoding.
-
-Fri Feb 22 11:16:55 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_substr): copy encoding although empty string.
-
-Fri Feb 22 04:48:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_times): empty string's coderange is CODERANGE_7BIT.
-
- * string.c (rb_str_substr): ditto.
-
- * encoding.c (rb_enc_compatible): empty string is compatible with not
- only nonasciicompatible strings. [ruby-dev:33895]
-
-Thu Feb 21 17:15:15 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c: Added basic support for passing options to String#encode
- via a hash. Currently only one option, with one value, is supported:
- invalid: :ignore (dropping invalid byte sequences instead of
- producing an error). Option naming is not yet stable!
-
- * test/ruby/test_transcode.rb: Added a single test for invalid: :ignore
- option. Not more tests because most data does not yet distinguish
- between INVALID and UNKNOWN.
-
-Thu Feb 21 16:35:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_unshift_m): expands enough for argc. [ruby-dev:33880]
-
-Thu Feb 21 14:49:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (argf_set_encoding): uses current_file after check if next
- input is available.
-
-Thu Feb 21 14:13:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_putc): invoke stdout method so that redefining putc
- may take effect. [ruby-talk:291844]
-
- * io.c (rb_f_puts): ditto.
-
-Thu Feb 21 11:10:49 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c: replace rb_enc_copy by rb_enc_cr_str_copy or
- rb_enc_cr_str_exact_copy.
-
-Thu Feb 21 10:35:04 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/encoding.h (rb_enc_asciicompat): dummy encoding is not
- ascii compatible. [ruby-dev:33878]
-
-Thu Feb 21 00:01:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RPATHFLAG): -R option of HP-UX ld is not for runtime
- load path. [ruby-list:44600]
-
-Wed Feb 20 23:55:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_map_errno): exported.
-
-Wed Feb 20 23:28:43 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/readline/extconf.rb (rl_event_hook): workaround for native
- windows.
-
-Wed Feb 20 19:42:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_enc_associate_index): doesn't clear coderange
- when new encoding equals to old one.
-
-Wed Feb 20 19:15:38 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_enc_str_copy): added for wrapper for rb_enc_copy.
- this also copy coderange when ptr and len is equal.
-
- * string.c (rb_enc_cr_str_copy): added for wrapper for rb_enc_copy.
- this always copy coderange.
-
- * string.c (str_replace_shared): use rb_enc_str_copy.
-
- * string.c (str_new3): don't rb_enc_copy because encoding is copied
- at str_replace_shared.
-
-Wed Feb 20 13:08:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (parse_args): added --dir-mode, --script-mode and
- --cmd-type options. [ruby-dev:33816]
-
- * instruby.rb (parse_args): added bin-arch and bin-comm to install
- type, for compiled files and script files.
-
- * instruby.rb (parse_args): deal with make style command line macros,
- and count as long style options if prefixed with INSTALL_.
-
- * instruby.rb (makedirs): use $dir_mode. [ruby-dev:33805]
-
- * instruby.rb (open_for_install): set file mode, which is now
- permission mode instead of access mode.
-
- * instruby.rb (bin-comm): installs scripts with replacing shebang
- lines.
-
-Wed Feb 20 10:04:22 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (open_key_args): set arg->io even if no options passed.
- [ruby-dev:33072]
-
-Tue Feb 19 21:11:49 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_enc_strlen_cr): get length with coderange scan.
-
- * string.c (str_strlen): use rb_enc_strlen_cr. [ruby-dev:33849]
-
-Tue Feb 19 20:49:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_raise_jump): moved adjustment for control frame.
-
-Tue Feb 19 18:34:32 2008 Tanaka Akira <akr@fsij.org>
-
- * gc.c (STACK_LENGTH) [SPARC] : 0x80 offset removed. [ruby-dev:33857]
-
-Tue Feb 19 14:27:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/readline/readline.c (readline_event): prevent polling. based on
- a patch from error errorsson in [ruby-Bugs-17675].
-
-Tue Feb 19 11:14:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_exec_node): no thread starts inside iseq compilation.
-
- * eval.c (rb_f_raise): skip current control frame. [ruby-core:15589]
-
- * insns.def (opt_div): raise as the ordinary method. [ruby-core:15589]
-
-Mon Feb 18 15:16:30 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_each_line): fix newline size.
-
-Mon Feb 18 13:06:37 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/irb/locale.rb (IRB::Locale#lc2kconv): check ja_JP.EUC-JP as well.
-
-Mon Feb 18 11:51:19 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (re_warn): defined to restore warnings for /[a-c-e]/, etc.
-
-Mon Feb 18 10:17:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/pty/lib/expect.rb (IO#expect): check if peer is closed.
- [ruby-Bugs-17940]
-
-Mon Feb 18 00:33:03 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_regsub): don't repeat repl twice with
- "X".sub!(/./, sprintf("\\%c", 255)).
-
-Sun Feb 17 23:06:55 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * lib/cgi.rb (CGI::escapeHTML): use gsub with Hash. [ruby-dev:33828]
-
-Sun Feb 17 21:38:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (ENC_CODERANGE_AND): fix broken case. [ruby-dev:33826]
-
- * string.c (rb_str_times): fix broken case. [ruby-dev:33826]
-
-Sun Feb 17 20:45:10 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_prepare_re): add enable_warning parameter.
- (rb_reg_adjust_startpos): disable warning by rb_reg_prepare_re.
- (rb_reg_search): follow rb_reg_prepare_re parameter change.
-
-Sun Feb 17 20:12:41 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_regexp.rb: add tests to achieve over 90% test
- coverage of re.c.
-
-Sun Feb 17 15:25:08 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (ENC_CODERANGE_AND): added.
-
- * string.c (rb_str_plus, rb_str_times): keep coderange.
-
- * parse.y (STR_NEW0) use rb_usascii_str_new.
-
-Sun Feb 17 14:07:24 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (str_strlen): rb_enc_strlen doesn't fail.
-
-Sun Feb 17 13:03:48 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (str_sublen): use rb_enc_strlen.
-
-Sun Feb 17 12:17:52 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/{euc_jp.c,gbk.c,iso_8859_1.c,iso_8859_11.c,iso_8859_13.c,
- iso_8859_2.c,iso_8859_6.c,iso_8859_7.c,iso_8859_8.c,iso_8859_9.c,
- shift_jis.c,windows_1251.c}: add document about encodings.
-
- * enc/cp949.c: divided into new file.
-
-Sun Feb 17 10:59:04 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_quote): return US-ASCII string consistently.
-
-Sun Feb 17 09:17:08 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_times): reduce loop overhead.
-
-Sun Feb 17 03:37:01 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/re.h (struct rmatch_offset): new struct for character
- offsets.
- (struct rmatch): new struct.
- (struct RMatch): reference struct rmatch.
- (RMATCH_REGS): new macro.
-
- * re.c (match_alloc): initialize struct rmatch.
- (pair_byte_cmp): new function.
- (update_char_offset): update character offsets.
- (match_init_copy): copy regexp and character offsets.
- (match_sublen): removed.
- (match_offset): use update_char_offset.
- (match_begin): ditto.
- (match_end): ditto.
- (rb_reg_search): make character offset updated flag false.
- (match_size): use RMATCH_REGS.
- (match_backref_number): ditto.
- (rb_reg_nth_defined): ditto.
- (rb_reg_nth_match): ditto.
- (rb_reg_match_pre): ditto.
- (rb_reg_match_post): ditto.
- (rb_reg_match_last): ditto.
- (match_array): ditto.
- (match_aref): ditto.
- (match_values_at): ditto.
- (match_inspect): ditto.
-
- * string.c (rb_str_subpat_set): use RMATCH_REGS.
- (rb_str_sub_bang): ditto.
- (str_gsub): ditto.
- (rb_str_split_m): ditto.
- (scan_once): ditto.
-
- * gc.c (obj_free): free character offsets.
-
-Sun Feb 17 03:13:40 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/resource.rb: made version infos confirm to OS spec.
-
- * {bcc32,win32}/Makefile.sub (*.rc): add dependency.
-
-Sat Feb 16 20:49:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_substr): optimized for UTF-8.
-
-Sat Feb 16 18:13:53 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_compatible): check encoding incapable arguments.
-
-Sat Feb 16 20:12:47 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (match_inspect): avoid SEGV with MatchData.allocate.inspect.
-
-Sat Feb 16 19:04:17 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (str_strlen): revert r15507. [ruby-dev:33810]
-
-Sat Feb 16 18:25:14 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (str_strlen): little more optimization.
- (rb_enc_nth): remove needless variable 'c'.
-
-Sat Feb 16 18:00:13 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_compatible): empty strings are always compatible.
-
- * string.c (rb_enc_cr_str_buf_cat): ditto.
-
-Sat Feb 16 16:14:35 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_enc_strlen): UTF-8 character count moved to str_strlen.
- (str_strlen): UTF-8 character count is only applicable for valid
- UTF-8 string. [ruby-dev:33807]
-
-Sat Feb 16 13:16:49 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_sub_bang): stringize replacing hash values.
- (str_gsub): ditto.
-
-Sat Feb 16 13:01:33 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_enc_strlen): add search_nonascii like character
- counter for UTF-8.
-
-Sat Feb 16 11:53:35 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_strlen): moved to string.c.
-
- * string.c (rb_enc_strlen): use search_nonascii.
- (str_strlen): don't use search_nonascii.
-
-Sat Feb 16 11:45:31 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/require_relative.rb: check require_relative call in eval.
-
-Sat Feb 16 08:00:01 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ruby.c (process_options): set default_external before loading
- libraries. [ruby-dev:33801]
-
-Sat Feb 16 05:49:54 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/iso_8859_{4,13}.c: Windows-1257 is replica of ISO-8859-13.
-
- * string.c (single_byte_optimizable): rb_enc_mbminlen must be 1
- when rb_enc_mbmaxlen is 1.
-
-Sat Feb 16 03:43:18 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_nth): moved to string.c.
-
- * string.c (rb_enc_nth): moved from string.c. use search_nonascii
- for ASCII compatible string.
- (str_nth): wrong optimization removed to fix
- "a".force_encoding("EUC-JP").slice!(0,10) returns
- "a\x00\x00\x00\x00\x00\x00\x00\x00\x00"
-
-Sat Feb 16 00:21:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * range.c (rb_range_beg_len): check if responds to "begin" and "end"
- methods for non-Range object.
-
-Fri Feb 15 20:29:42 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_init_cp): initialize WIN32OLE.codepage
- according to Encoding.default_external.
-
- * test/win32ole/test_win32ole.rb: ditto.
-
-Fri Feb 15 19:31:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/node.h (NODE_FL_NEWLINE): renamed from NODE_NEWLINE
- to denote its a flag. [ruby-core:15529]
-
-Fri Feb 15 18:23:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_sub_bang, str_gsub): allows hash for replacement.
-
-Fri Feb 15 17:12:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_strlen): use search_nonascii() for performance.
-
- * string.c (str_nth): ditto.
-
-Fri Feb 15 16:22:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (open_key_args): allow specifying both :mode and :encoding.
-
-Fri Feb 15 15:34:47 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_getbyte): new method.
- (rb_str_setbyte): new method.
-
-Fri Feb 15 15:29:03 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/require_relative.rb: new file.
-
-Fri Feb 15 15:23:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_convert): check upper bound. a patch from
- Daniel Luz at [ruby-Bugs-17910].
-
-Fri Feb 15 10:35:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_reg_quote): set US-ASCII for ASCII-only string.
- [ruby-dev:33785]
-
-Fri Feb 15 10:27:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * {win,bcc}32/Makefile.sub (config.h): added HAVE_FTRUNCATE.
- [ruby-dev:33786]
-
-Fri Feb 15 09:44:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (reg_compile_gen): reg_fragment_setenc might not raise an
- exception before rb_reg_compile.
-
-Fri Feb 15 07:37:40 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/ri/paths.rb: Preserve compatibility with 1.8.
-
-Fri Feb 15 02:42:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ftruncate): check if available.
-
- * file.c (rb_file_truncate): check if ftruncate instead of truncate.
-
-Fri Feb 15 02:40:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (sigsetmask): check when signal semantics is not POSIX.
-
- * signal.c (USE_TRAP_MASK): set true if sigprocmask or sigsetmask is
- available.
-
-Thu Feb 14 23:56:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_error.c (error_print): append a newline to rest lines.
-
- * parse.y (reg_compile_gen): appends error message from
- rb_reg_compile() to one from reg_fragment_setenc().
-
-Thu Feb 14 21:00:14 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_reopen): check STDIN, STDOUT and STDERR mode according to
- stdio streams.
-
-Thu Feb 14 16:07:40 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_math.rb: actual-expected argument ordering for
- test_math.rb fixed. a patch from Tadashi Saito
- <shiba AT mail2.accsnet.ne.jp> in [ruby-dev:33770].
-
-Thu Feb 14 16:02:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_utime): inhibits with secure level 2 or higher.
-
-Thu Feb 14 12:30:02 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_preprocess_dregexp): use non-preprocessed regexp source
- for result.
-
-Thu Feb 14 01:43:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/timeout.rb (Timeout::timeout): made sensitive to location on the
- stack. [ruby-core:15458]
-
-Thu Feb 14 00:49:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (INSTRUBY_ARGS): pass mode to install. [ruby-dev:33766]
-
- * instruby.rb (parse_args): added --data-mode and --prog-mode options.
-
-Thu Feb 14 00:02:19 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * eval.c (eval): allow to eval in a binding that has a singleton method.
- [ruby-dev:33763]
-
- * test/ruby/test_proc.rb: add tests to achieve over 70% test coverage
- of proc.c.
-
- * test/ruby/test_method.rb: ditto.
-
-Wed Feb 13 22:46:36 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/pathname.rb (Pathname#sub_ext): new method. [ruby-list:44608]
-
-Wed Feb 13 21:50:32 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * proc.c (proc_curry): new method. [ruby-dev:33676]
-
- * test/ruby/test_proc.rb: add tests for above.
-
-Wed Feb 13 20:48:50 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (RObject): add iv_index_tbl for shortcut of
- RCLASS_IV_INDEX_TBL(rb_obj_class(obj)).
- (ROBJECT_IV_INDEX_TBL): defined.
-
- * object.c (init_copy): initialize iv_index_tbl in struct RObject.
-
- * variable.c (ivar_get): use ROBJECT_IV_INDEX_TBL.
- (rb_ivar_defined): ditto.
- (obj_ivar_each): ditto.
- (rb_obj_remove_instance_variable): ditto.
- (rb_ivar_set): update iv_index_tbl in struct RObject.
-
-Wed Feb 13 16:21:48 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/uri/generic.rb: revert r15442. 2nd argument of String#sub parse
- escapes. [ruby-dev:33726]
-
- * bootstraptest/test_method.rb, enc/depend, instruby.rb, lib/mkmf.rb,
- mkconfig.rb: revert r15443. ditto.
-
-Wed Feb 13 11:20:26 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * enc/depend: fix typo.
-
- * lib/mkmf.rb: revert r15443. "\\1#{sep}\\2" is wrong if sep is ended
- with "\\".
-
-Wed Feb 13 08:57:21 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/markup/inline.rb: Allow inline markup to have a leading
- '#' or '\', or trailing punctuation. i.e. *#freeze?*, *\foo?*.
-
-Wed Feb 13 07:21:23 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/to_html_hyperlink.rb: Moved linking to to_html.rb, move
- crossref to to_html_crossref.rb
-
-Wed Feb 13 04:15:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (arg_concat_gen, arg_append_gen): optimize for array push.
-
- * parse.y (arg_concat_gen): optimize for array concat.
-
- * parse.y (arg_add_gen): removed since identical to arg_append_gen.
-
-Tue Feb 12 21:04:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (exc_list): should use mrhs if non array.
-
-Tue Feb 12 20:32:50 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/rational.rb (floor, ceil, truncate, round): do not use
- definitions of Numeric.
-
- * lib/rational.rb (to_i): should returns truncated self.
-
- * lib/complex.rb (numerator): requires
- Integer#{numerator,denominator}.
-
- * lib/complex.rb (quo): do not use definition of Numeric.
-
- * lib/complex.rb (>, >=, <, <=, between?, div, divmod, modulo,
- floor, ceil, truncate, round): undef'ed.
-
- * lib/mathn.rb (Rational#inspect): removed.
-
-Tue Feb 12 16:48:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (args, mrhs): flattens literal array splats.
-
- * parse.y (exc_list): splat literal array.
-
-Tue Feb 12 15:27:19 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * bootstraptest/runner.rb, bootstraptest/test_method.rb, enc/depend,
- instruby.rb, lib/mkmf.rb, lib/test/unit/util/procwrapper.rb,
- mkconfig.rb, sample/test.rb, template/vm.inc.tmpl,
- test/ruby/test_stringchar.rb: fixes around String#gsub.
-
-Tue Feb 12 15:11:47 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json/lib/json/pure/generator.rb,
- ext/json/lib/json/pure/parser.rb, ext/openssl/lib/openssl/x509.rb,
- ext/win32ole/sample/olegen.rb, lib/date/format.rb, lib/irb/context.rb,
- lib/irb/workspace.rb, lib/net/http.rb, lib/net/imap.rb,
- lib/rdoc/generator.rb, lib/rdoc/markup/to_html.rb,
- lib/rdoc/markup/to_latex.rb, lib/rdoc/parsers/parse_c.rb,
- lib/rdoc/ri/formatter.rb, lib/rexml/parsers/baseparser.rb,
- lib/rexml/quickpath.rb, lib/rexml/text.rb, lib/rss/parser.rb,
- lib/uri/common.rb, lib/uri/generic.rb, lib/webrick/httpresponse.rb,
- lib/webrick/httpservlet/filehandler.rb, lib/yaml/baseemitter.rb,
- lib/yaml/encoding.rb: performance tuning around String#gsub.
-
-Tue Feb 12 12:16:45 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_hash_cmp): lighter version of rb_str_cmp() for
- hash comparison function.
-
- * hash.c (rb_any_cmp): use rb_str_hash_cmp().
-
- * string.c (rb_str_casecmp): should return nil for incompatible
- comparison.
-
-Tue Feb 12 12:13:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * instruby.rb: specify file mode to install. a patch from
- pegacorn <subscriber.jp AT gmail.com> in [ruby-dev:33699].
-
-Tue Feb 12 11:38:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (rb_num_coerce_bin): add ID argument to specify
- caller's method name. [ruby-dev:33663]
-
- * numeric.c (rb_num_coerce_cmp): ditto.
-
- * numeric.c (rb_num_coerce_relop): ditto.
-
- * ext/bigdecimal/bigdecimal.c (DoSomeOne): add function name argument.
-
-Tue Feb 12 10:25:02 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/rdoc.rb: Wrap parse_files' read in version check for
- backwards compatibility.
-
-Tue Feb 12 10:15:14 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ruby.c (load_file): enc must effect source encoding.
- [ruby-core:15496]
-
-Tue Feb 12 10:16:47 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/ri/paths.rb: Restore require rubygems check.
-
-Tue Feb 12 02:42:27 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_include): specialize single character string
- case (e.g. (?a ..?z).include(?x)) for performance.
- [ruby-core:15481]
-
- * string.c (rb_str_upto): specialize single character case.
-
- * string.c (rb_str_hash): omit coderange scan for performance.
-
- * object.c (rb_check_to_integer): check Fixnum first.
-
- * object.c (rb_to_integer): ditto.
-
- * string.c (rb_str_equal): inline memcmp to avoid unnecessary
- rb_str_comparable().
-
- * parse.y (rb_intern2): use US-ASCII encoding.
-
- * parse.y (rb_intern_str): ditto.
-
-Mon Feb 11 17:21:18 2008 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb (RSS::VERSION), test/rss/test_version.rb:
- 0.2.3 -> 0.2.4.
-
- * lib/rss/maker.rb, lib/rss/maker/, test/rss/test_maker_2.0.rb:
- fixed a bug that RSS::Maker.make("0.9")'s item doesn't make some
- elements if description is missed.
- Reported by Michael Auzenne. Thanks!!!
-
- * lib/rss/maker/0.9.rb, test/rss/test_maker_0.9.rb:
- RSS::Maker.make("0.9") generates RSS 0.92 not RSS 0.91.
-
-Mon Feb 11 10:43:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ruby.c (load_file): the encoding of DATA follows the source
- file encoding. [ruby-dev:33693]
-
-Mon Feb 11 06:50:42 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_pack.rb: fix tests for 64bit CPU.
-
- * test/ruby/test_bignum.rb: ditto.
-
- * test/ruby/test_file_exhaustive.rb: ditto.
-
- * test/ruby/test_integer.rb: ditto.
-
- * test/ruby/test_time.rb: ditto.
-
- * test/ruby/test_numeric.rb: ditto.
-
- * test/ruby/test_fixnum.rb: ditto.
-
-Mon Feb 11 00:18:57 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/benchmark.rb (Job::Benchmark#item): fix typo.
-
-Sun Feb 10 21:58:32 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk (encdb, transdb): depend on $(PREP).
-
-Sun Feb 10 16:58:20 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems*, test/rubygems*, gem_prelude.rb: Import RubyGems
- r1601. [ruby-core:15381]
-
-Sun Feb 10 15:07:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * {bcc32,win32,wince}/Makefile.sub (MISSING): added cbrt.obj.
-
-Sun Feb 10 12:58:33 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/code_objects.rb: Make some attributes accessible for reuse.
- * lib/rdoc/generator/html.rb: Pull out ContextUser classes and related
- methods for reuse.
- * lib/rdoc/generator.rb: Move ContextUser classes to
- RDoc::Generator::Context for reuse.
- * lib/rdoc/rdoc.rb: Make RDoc::RDoc initialization a little easier.
- * lib/rdoc/options.rb: Make RDoc::Options easier to use without
- parsing an ARGV.
- * lib/rdoc/markup/to_*.rb: Subclass RDoc::Markup::Formatter.
- * lib/rdoc/markup/formatter.rb: Add RDoc::Markup::Formatter to make
- RDoc markup conversion easier.
- * lib/rdoc/markup/fragments.rb: Make RDoc::Markup::ListItem easier to
- test.
- * lib/rdoc/markup/to_html_hyperlink.rb: Pulled out of the HTML
- generator for easier reusability.
- * lib/rdoc/markup.rb: Fix bug with labeled lists containing bullet
- lists.
- * lib/rdoc/generators/html/html.rb: Fix Constant display.
-
-Sat Feb 9 23:44:29 2008 Tanaka Akira <akr@fsij.org>
-
- * missing/tgamma.c (tgamma): use lgamma_r if available.
-
-Sat Feb 9 23:22:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/extconf.rb: simplified the condition.
-
-Sat Feb 9 21:20:28 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_math.rb: add tests for Math.gamma, Math.lgamma and
- Math.cbrt, and use assert_in_delta instead of assert.
-
-Sat Feb 9 18:34:45 2008 Tanaka Akira <akr@fsij.org>
-
- * math.c (math_cbrt): new method Math.cbrt.
-
- * configure.in (cbrt): check for replacement functions.
-
- * missing/cbrt.c: new file.
-
-Sat Feb 9 17:51:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): use strtod() for more
- precision. [ruby-talk:290296]
-
- * ext/bigdecimal/bigdecimal.c (BASE_FIG): made constant.
-
- * ext/bigdecimal/extconf.rb: ditto. [ruby-dev:33658]
-
-Sat Feb 9 12:06:45 2008 Tanaka Akira <akr@fsij.org>
-
- * missing/tgamma.c (tgamma): add error check.
-
-Sat Feb 9 11:47:03 2008 Tanaka Akira <akr@fsij.org>
-
- * math.c (math_gamma): add error check.
- (math_lgamma): ditto.
-
-Sat Feb 9 11:09:26 2008 Tanaka Akira <akr@fsij.org>
-
- * missing/lgamma_r.c (lgamma_r): return HUGE_VAL for non-positive
- integers.
-
-Sat Feb 9 10:03:07 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_new4): copy encoding from orig, instead of shared
- one.
-
-Sat Feb 9 01:01:38 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * file.c (lchmod_internal): fix warning cast from pointer to integer of
- different size.
-
-Sat Feb 9 00:44:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/irb.rb (IRB::Irb::eval_input): rescues Interrupt and other than
- SystemExit and SignalException. [ruby-core:15359]
-
-Fri Feb 8 23:51:36 2008 Tanaka Akira <akr@fsij.org>
-
- * missing/lgamma_r.c (lgamma_r): use smaller argument for sin function.
-
-Fri Feb 8 22:10:36 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb (OpenURI.open_http): rescue URI::InvalidURIError by
- URI.parse for location URI.
-
-Fri Feb 8 19:22:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (rb_str_derive): uses rb_str_subseq() for byte
- length. [ruby-dev:33653]
-
- * ext/iconv/iconv.c (iconv_convert): added toidx argument to set
- encoding of successfully converted string. [ruby-dev:33221]
-
-Fri Feb 8 15:09:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (xsystem): expand macros like as make.
-
-Fri Feb 8 09:27:57 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rdoc/ri/driver.rb (read_yaml): remove SM* for compatibility.
-
-Fri Feb 8 00:07:24 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_hash.rb: follow the change of Hash#flatten.
-
- * test/ruby/test_time.rb: add tests to achieve over 70% test coverage
- of time.c.
-
- * test/ruby/test_prec.rb: ditto over 90% for prec.c.
-
-Thu Feb 7 19:11:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_dup): reverted unneeded change. [ruby-dev:33634]
-
- * string.c (rb_str_replace): makes frozen shared string before
- sharing.
-
-Thu Feb 7 16:33:51 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_reopen): don't change access mode for stdin, stdout and
- stderr. [ruby-core:15360]
-
-Thu Feb 7 16:33:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_replace_shared): replaces string with sharing.
-
- * string.c (rb_str_new4, rb_str_associate, rb_str_associated): allows
- associated strings shared.
-
- * string.c (rb_str_dup, rb_str_substr, rb_str_replace): shares memory.
- [ruby-core:15400]
-
-Thu Feb 7 15:42:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_end_with): compares with the suffix.
-
-Thu Feb 7 15:03:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/korean.c: add support for CP949 by Park Ji-In.
- [ruby-dev:33626]
-
-Thu Feb 7 11:11:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * missing/lgamma_r.c (lgamma_r): some compilers don't permit dividing
- by literal 0.0. use const variable instead.
-
- * {bcc32,win32,wince}/Makefile.sub (MISSING): add lgamma_r.obj and
- tgamma.obj.
-
-Thu Feb 7 10:39:21 2008 Tanaka Akira <akr@fsij.org>
-
- * math.c (math_gamma): new method Math.gamma.
- (math_lgamma): new method Math.lgamma.
-
- * include/ruby/missing.h (tgamma): declared unless HAVE_TGAMMA.
- (lgamma_r): declared unless HAVE_LGAMMA_R.
-
- * configure.in (tgamma): check for replacement functions.
- (lgamma_r): ditto.
-
- * missing/tgamma.c: new file. based on gamma.c from
- "C-gengo niyoru saishin algorithm jiten" (New Algorithm handbook
- in C language) (Gijyutsu hyouron sha, Tokyo, 1991)
- by Haruhiko Okumura.
-
- * missing/lgamma_r.c: ditto.
-
- * LEGAL (missing/tgamma.c): describe as public domain.
- (missing/lgamma_r.c): ditto.
-
-Thu Feb 7 09:05:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (nkf_enc_from_index): BINARY does not
- have in-bound encoding index.
-
-Thu Feb 7 04:26:28 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/korean.c: add EUC-KR conversion support by Park Ji-In.
- [ruby-dev:33621]
-
-Wed Feb 6 01:47:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_flatten): do not flatten recursively by default.
- [ruby-dev:33603]
-
-Wed Feb 6 00:50:19 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * insns.def (adjuststack): never use INC_SP with minus value because
- some compilers cannot deal it correctly. use DEC_SP instead.
-
-Wed Feb 6 00:48:41 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_hash.rb: add tests to achieve over 90% test coverage
- of hash.c.
-
- * test/ruby/test_env.rb: ditto.
-
-Wed Feb 6 00:24:49 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * hash.c (env_rassoc): remove access to free'd environment on mswin32.
-
-Tue Feb 5 21:57:34 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * vm.c (rb_call_super): pass a passed block when super is called via
- rb_call_super. [ruby-dev:33598]
-
-Tue Feb 5 11:14:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (INSTALL_DIRS, install_dirs): added BINDIR.
-
- * lib/mkmf.rb (install_files): rejects files matching to
- $NONINSTALLFILES.
-
- * lib/mkmf.rb (init_mkmf): defaults $NONINSTALLFILES to backup and
- temporary files.
-
-Mon Feb 4 21:52:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/delegate.rb (DelegateClass): use define_method instead of
- module_eval to improve performance. [ruby-dev:33586]
-
-Mon Feb 4 16:44:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (darwin): NSIG is not defined if _XOPEN_SOURCE > 500L.
- [ruby-dev:33584]
-
-Mon Feb 4 14:51:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_enc_symname2_p): support "!", "!=" and "!~".
- [ruby-dev:33592]
-
-Mon Feb 4 13:58:42 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/delegate.rb (Delegator.preserved, DelegateClass.methods): extend
- shouldn't be delegated. [ruby-dev:32987], etc.
-
-Mon Feb 4 08:59:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::QueryExtension::[]): no more transition
- extend(CGI::Value). a patch from <tommy AT tmtm.org> in
- [ruby-dev:33583].
-
-Sun Feb 3 21:13:13 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_numeric.rb: forgot to add this (at r15360).
-
- * test/ruby/test_file_exhaustive.rb: add tests to achieve over 80% test
- coverage of file.c.
-
-Sat Feb 2 20:06:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/benchmark.rb (Benchmark::realtime): make Benchmark#realtime
- a bit faster. a patch from Alexander Dymo <dymo AT ukrpost.ua> in
- [ruby-core:15337].
-
-Sat Feb 2 17:40:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * time.c (time_cmp): Time.<=> no longer supports comparison with
- numeric. [ruby-core:15332]
-
-Sat Feb 2 09:53:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (darwin): disabled fat-binary support which confuses
- configure much, since ``universal'' implies hidden cross-compiling.
- TODO: ruby and libruby.bundle might be possible to bound with `lipo'
- after builds for each archs. Anyway, config.h and rbconfig.rb must
- be separated definitely at least.
-
-Sat Feb 2 09:28:36 2008 Tanaka Akira <akr@fsij.org>
-
- * random.c (limited_big_rand): fix buffer overflow when SIZEOF_BDIGITS
- is 2. fixed by Kenta Murata. [ruby-dev:33565]
-
-Fri Feb 1 21:42:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (darwin): _XOPEN_SOURCE is necessary to make ucontext_t
- consistent with the library implementation of MacOS X 10.5.
- [ruby-dev:33461]
-
- * configure.in (darwin): ucontext on PowerPC MacOS X 10.5 is broken.
-
-Fri Feb 1 11:44:22 2008 Tanaka Akira <akr@fsij.org>
-
- * tool/compile_prelude.rb (C_ESC): use octal escape to avoid
- "\x09for (;;) ..." to be interpret the first character 0x9f.
-
-Thu Jan 31 23:06:42 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_bignum.rb: suppress warnings during test.
-
- * test/ruby/test_enum.rb: ditto.
-
- * test/ruby/test_integer.rb: add tests to achieve over 90% test
- coverage of numeric.c.
-
- * test/ruby/test_float.rb: ditto.
-
- * test/ruby/test_fixnum.rb: ditto.
-
- * test/ruby/test_numeric.rb: ditto.
-
- * test/ruby/test_pack.rb: add tests to achieve over 90% test coverage
- of pack.c.
-
-Thu Jan 31 17:30:42 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * marshal.c (r_object0): no need to call r_entry for immediate values.
-
-Thu Jan 31 15:46:30 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/rdoc/ri/formatter.rb (output): add accessor.
-
- * lib/rdoc/ri/display.rb (page): replace @formatter.output instead of
- $stdout.
-
-Thu Jan 31 15:06:50 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * marshal.c (r_object0): call r_entry/r_leave to call proc when
- TYPE_FIXNUM, TYPE_NIL, TYPE_TRUE, TYPE_FALSE, TYPE_SYMBOL.
-
-Thu Jan 31 14:03:38 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/rdoc/ri/display.rb (display_method_list, display_class_list):
- use @formatter.raw_print_line instead of puts.
-
- * lib/rdoc/ri/driver.rb (select_methods): new method to collect all
- instance/class methods which match with passed pattern.
-
- * lib/rdoc/ri/driver.rb (run): use class_cache's result directly
- instead of select_classes' because it's removed now.
-
- * lib/rdoc/ri/driver.rb (run): search methods when passed name is not
- class name. [ruby-core:15309]
-
-Thu Jan 31 08:31:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (ext/extmk.rb, instruby.rb): inlined $(MAKE) so that can
- be executed even with -n.
-
-Thu Jan 31 06:24:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_close_read): replaces fptr with the tied writer if
- duplex.
-
- * io.c (rb_io_close_write): unties the tied IO for writing if duplex.
- [ruby-dev:33532]
-
-Thu Jan 31 02:22:04 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (open_key_args): allow encoding key to take two encoding
- names. a patch from <rubikitch AT ruby-lang.org>. [ruby-dev:33540]
-
-Thu Jan 31 02:15:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (dsym): allow empty symbols. [ruby-core:15248]
-
-Thu Jan 31 00:01:51 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (select_internal): fix SEGV by `select [STDIN],nil,[STDIN]'.
- fixed by Petr Chromec.
- http://rubyforge.org/tracker/index.php?func=detail&aid=17275&group_id=426&atid=1698
-
-Wed Jan 30 17:32:49 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/*.c: add GB12345, UCS-{2,4}{BE,LE}.
-
-Wed Jan 30 14:32:18 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/rdoc/ri/driver.rb (cache_file_for): shouldn't use `:' in filename.
-
-Wed Jan 30 14:27:19 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_succ): use wrapped character as a carry for
- ASCII incompatible encoding.
-
-Wed Jan 30 12:26:59 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/utf_16be.c (UTF16_IS_SURROGATE_FIRST): avoid branch.
- (UTF16_IS_SURROGATE_SECOND): ditto.
- (UTF16_IS_SURROGATE): defined.
- (utf16be_mbc_enc_len): validation implemented.
-
- * enc/utf_16le.c (UTF16_IS_SURROGATE_FIRST): avoid branch.
- (UTF16_IS_SURROGATE_SECOND): ditto.
- (UTF16_IS_SURROGATE): defined.
- (utf16le_mbc_enc_len): validation implemented.
-
-Wed Jan 30 12:06:43 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * bignum.c (rb_cstr_to_inum): '0_2' is a valid representation.
-
-Wed Jan 30 11:57:50 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * bootstraptest/runner.rb: fix -I../../hoge case.
-
-Wed Jan 30 01:25:16 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_range.rb: add tests to achieve over 90% test coverage
- of range.c.
-
-Wed Jan 30 00:09:37 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/euc_tw.c (euctw_mbc_enc_len): validation implemented.
-
-Tue Jan 29 22:58:11 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_enumerator.rb: add tests to achieve over 90% test
- coverage of enumerator.c.
-
- * test/ruby/test_enum.rb: add for enum.c.
-
-Tue Jan 29 22:29:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * enumerator.c: fix documents.
-
-Tue Jan 29 22:27:11 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * range.c: fix SEGV by ("a" .. "z").step(2 ** 30) { }.
-
-Tue Jan 29 21:59:16 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/euc_tw.c (euctw_islead): 0x8e is a leading byte.
-
-Tue Jan 29 21:55:35 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c: move object allocation out of blocking_region.
- [ruby-dev:33139]
-
-Tue Jan 29 20:37:36 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/make_transdb.rb: add for make transdb.h.
-
- * dmytranscode.c: add for miniruby.
-
- * enc/gbk.c (gbk_left_adjust_char_head, gbk_is_allowed_reverse_match):
- fix odd regexp match. [ruby-dev:33502]
-
-Tue Jan 29 20:17:06 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc32,win32}/Makefile.sub (MINIOBJS): add dmytranscode.$(OBJEXT).
-
-Tue Jan 29 19:39:40 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in, common.mk: fix rule for dmytranscode.o.
-
-Tue Jan 29 19:03:16 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/trans/japanese.c (rb_to_Windows_31J): to 'Windows-31J'.
-
- * common.mk: add rules for transdb.h.
-
- * transcode.c (init_transcoder_table): use transdb.h.
-
-Tue Jan 29 18:05:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (encdb_{replicate,alias,dummy,declare}): define only if
- NO_ENCDB_H is not defined.
-
-Tue Jan 29 17:54:11 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/gbk.c (EncLen_gbk): too short. [ruby-dev:33497]
-
-Tue Jan 29 17:25:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * dmyencoding.c, encoding.c (enc_init_db, NO_ENCDB_H):
- miniruby doesn't use encdb.
-
- * common.mk: encdb.h use miniruby.
-
-Tue Jan 29 17:37:36 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/gb18030.c (gb18030_mbc_enc_len): validation implemented.
-
-Tue Jan 29 17:01:07 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * tool/ifchange: remove $temp when unchanged.
-
-Tue Jan 29 16:59:01 2008 Tanaka Akira <akr@fsij.org>
-
- * insns.def (toregexp): generate a regexp from strings instead of one
- string.
-
- * re.c (rb_reg_new_ary): defined for toregexp. it concatenates
- strings after each string is preprocessed.
-
- * compile.c (compile_dstr_fragments): split from compile_dstr.
- (compile_dstr): call compile_dstr_fragments.
- (compile_dregx): defined for dynamic regexp.
- (iseq_compile_each): use compile_dregx for dynamic regexp.
-
- [ruby-dev:33400]
-
-Tue Jan 29 16:25:26 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk, ext/extmk.rb: always make encdb.h.
-
-Tue Jan 29 12:53:39 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/gbk.c: add GBK, CP936 and CP949.
-
- * enc/euc_kr.c: remove CP949.
-
- * enc/euc_cn.c: remove CP936 and rename to gb2312.c
-
- * enc/gb2312.c: GB2312 is preferred MIME name.
-
-Tue Jan 29 03:01:29 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (reg_fragment_setenc_gen): US-ASCII script special code.
-
- * parse.y (reg_fragment_check_len, reg_compile_gen): no need such
- trick.
- [ruby-dev:33399]
-
- * test/ruby/test_m17n.rb (test_regexp_usacii_literal): add tests.
-
-Tue Jan 29 01:38:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk ($(srcdir)/revision.h): no need to show ifchange execution
- because ifchange echos updated or unchanged.
-
-Tue Jan 29 01:26:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (up): use last changed revision.
-
- * common.mk (up): force to update revision.h.
-
-Tue Jan 29 00:12:17 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bignum.c (rb_big2str0): should be US-ASCII.
-
-Tue Jan 29 00:10:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-mode-set-encoding): updates magic comment.
-
-Mon Jan 28 23:47:52 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * parse.y (rb_id2str, ripper_initialize, Init_ripper):
- use rb_usascii_str_new2. [ruby-dev:33449]
-
-Mon Jan 28 19:37:08 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/win32ole/win32ole.c (ole_cp2encoding): new function.
-
- * ext/win32ole/win32ole.c (ole_wc2vstr, ole_variant2val, fole_missing):
- set encoding to result.
-
- * ext/win32ole/win32ole.c (fole_s_set_code_page, Init_win32ole): set
- default encoding.
- [ruby-dev:33433]
-
-Mon Jan 28 11:17:28 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c, parse.y, re.c: use rb_ascii8bit_encoding.
-
-Mon Jan 28 17:54:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/utf_7.h: add dummy encoding UTF-7 and its alias CP65000.
-
-Mon Jan 28 17:41:19 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * enc/utf_8.c: add alias CP65001.
-
-Mon Jan 28 15:33:23 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/big5.c (big5_mbc_enc_len): validation implemented.
-
-Mon Jan 28 13:02:02 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/euc_kr.c (euckr_mbc_enc_len): validation implemented.
-
-Mon Jan 28 11:24:49 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (parser_str_new): encoding of UTF-8 literal string in
- US-ASCII script is UTF-8. [ruby-dev:33406]
-
-Mon Jan 28 10:25:59 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_m17n.rb (test_magic_comment): add test.
-
-Mon Jan 28 09:34:54 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (help): use double quotes for nmake.
-
-Mon Jan 28 00:39:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_set_encode): check if encoding is ASCII compatible.
-
-Mon Jan 28 01:21:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_open_file): should check NUL in path.
- <http://www.rubyist.net/~matz/20080125.html#c01>.
-
- * io.c (rb_io_s_popen): ditto.
-
- * io.c (rb_io_reopen): ditto.
-
- * io.c (next_argv): ditto.
-
-Sun Jan 27 23:33:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): fix for left justify flag.
-
- * sprintf.c (rb_str_format): zero-precision zero bug revised.
- [ruby-dev:33419]
-
-Sun Jan 27 23:20:54 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/oniguruma.h: precise mbclen API redesigned to avoid
- inline functions.
- (onigenc_mbclen_charfound): removed.
- (onigenc_mbclen_needmore): removed.
- (onigenc_mbclen_recover): removed.
- (ONIGENC_MBCLEN_CHARFOUND): removed.
- (ONIGENC_MBCLEN_CHARFOUND_P): defined.
- (ONIGENC_MBCLEN_CHARFOUND_LEN): defined.
- (ONIGENC_MBCLEN_INVALID): removed.
- (ONIGENC_MBCLEN_INVALID_P): defined.
- (ONIGENC_MBCLEN_NEEDMORE): removed.
- (ONIGENC_MBCLEN_NEEDMORE_P): defined.
- (ONIGENC_MBCLEN_NEEDMORE_LEN): defined.
- (ONIGENC_MBC_ENC_LEN): use onigenc_mbclen_approximate.
-
- * regenc.c (onigenc_mbclen_approximate): defined.
-
- * include/ruby/encoding.h (MBCLEN_CHARFOUND): removed.
- (MBCLEN_INVALID): removed.
- (MBCLEN_NEEDMORE): removed.
- (MBCLEN_CHARFOUND_P): defined.
- (MBCLEN_INVALID_P): defined.
- (MBCLEN_NEEDMORE_P): defined.
- (MBCLEN_CHARFOUND_LEN): defined.
- (MBCLEN_NEEDMORE_LEN): defined.
-
- * encoding.c: use new API.
-
- * re.c: ditto.
-
- * string.c: ditto.
-
- * parse.y: ditto.
-
-Sun Jan 27 22:55:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (value_expr_gen): reverted r12880. [ruby-dev:33388]
-
-Sun Jan 27 22:33:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): fix for octal with precision.
- [ruby-dev:33411]
-
-Sun Jan 27 22:31:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-mode-set-encoding): automatically insert
- encoding magic comment.
-
- * misc/ruby-mode.el (ruby-mode): set ruby-mode-set-encoding to buffer
- local before-save-hook.
-
-Sun Jan 27 19:51:15 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_inspect): avoid exception by
- "\#\xa1".force_encoding("euc-jp").inspect.
-
-Sun Jan 27 19:07:33 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_succ): warning suppressed.
-
-Sun Jan 27 18:18:13 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk (help): show major targets.
-
-Sun Jan 27 17:54:48 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf.c: raise error when no output encoding is given.
-
-Sun Jan 27 17:20:10 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_succ): don't increment/decrement codepoint.
-
-Sun Jan 27 16:03:42 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/irb/ruby-lex.rb (RubyLex#buf_input): use chars.to_a.
-
-Sun Jan 27 16:27:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8: update nkf.
-
-Sun Jan 27 16:25:27 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * re.c (rb_reg_source): set encoding as regexp encoding.
-
-Sun Jan 27 05:56:39 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_preprocess): force fixed encoding when ASCII
- incompatible source string.
-
-Sat Jan 26 23:46:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): zero-precision zero should be empty.
- [ruby-dev:33363]
-
- * sprintf.c (rb_str_format): not prepend octal prefix to negative or
- zero value. [ruby-dev:33363], [ruby-dev:33367]
-
-Sat Jan 26 23:42:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (assignable_gen, keyword_to_name): __ENCODING__ was missing.
-
-Sat Jan 26 19:08:45 2008 Tanaka Akira <akr@fsij.org>
-
- * marshal.c (w_object): dump string encoding in USERDEF.
- [ruby-dev:33401]
-
-Sat Jan 26 17:42:23 2008 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): validate argument expr of "next"
- statement.
-
- * bootstraptest/test_syntax.rb: add a test.
-
-Sat Jan 26 17:22:46 2008 Koichi Sasada <ko1@atdot.net>
-
- * compile.c, compile.h: fix to calculate correct stack depth
- at each instruction.
-
-Sat Jan 26 09:41:02 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rexml/doctype.rb, test/rss/test_maker_itunes.rb: replace
- multi-byte string.
-
- * test/json/{test_json.rb, test_json_unicode.rb}:
- add magic comment.
-
-Sat Jan 26 09:30:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/encoding.h (rb_usascii_encindex): added prototype.
-
- * include/ruby/intern.h (rb_usascii_str_new, rb_usascii_str_new2):
- ditto.
-
-Sat Jan 26 09:17:13 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_new): set US-ASCII and ENC_CODERANGE_7BIT when
- empty string (len == 0).
-
-Sat Jan 26 03:41:53 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (parser_initialize): set default script encoding as US-ASCII.
-
- * ruby.c (load_file): ditto.
-
- * ruby.c (process_options): set script encoding of -e from locale
- except when -K is specified.
-
- * ruby.c (load_file): set script encoding of stdin from locale except
- when -K is specified. [ruby-dev:33375]
-
-Sat Jan 26 02:51:06 2008 Koichi Sasada <ko1@atdot.net>
-
- * compile.c, compile.h: fix stack pointer issues.
- calculate correct stack depth at compile time.
-
- * insns.def (emptstack): remove it and add a new insn "adjuststack".
-
- * bootstraptest/test_knownbug.rb: move/remove fixed test.
-
- * bootstraptest/test_syntax.rb: ditto.
-
-Sat Jan 26 00:17:18 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * string.c (rb_str_usascii_new{,2}: defined.
- (rb_str_new): set US-ASCII and ENC_CODERANGE_7BIT when empty
- string.
-
- * encoding.c (rb_usascii_encoding, rb_usascii_encindex): defined.
- (rb_enc_inspect, enc_name, rb_locale_charmap, rb_enc_name_list_i):
- use rb_str_ascii_new.
-
- * array.c (recursive_join, inspect_ary): ditto.
-
- * object.c (nil_to_s, nil_inspect, true_to_s, false_to_s,
- rb_mod_to_s): ditto.
-
- * hash.c (inspect_hash, rb_hash_inspect, rb_f_getenv, env_fetch,
- env_clear, env_to_s, env_inspect): ditto.
-
- * numeric.c (flo_to_s, int_chr, rb_fix2str): ditto.
-
- * bignum.c (rb_big2str): ditto.
-
- * file.c (rb_file_ftype, rb_file_s_dirname, rb_file_s_extname,
- file_inspect_join, Init_file): ditto.
-
- * test/ruby/test_ruby_m17n.rb: add checks for encoding of string.
-
-Sat Jan 26 01:35:46 2008 Tanaka Akira <akr@fsij.org>
-
- * marshal.c (r_byte): use getbyte instead of getc.
- (marshal_load): ditto.
- [ruby-dev:33264]
-
-Sat Jan 26 00:43:40 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_getline_fast): don't care ASCII incompatible encoding.
- (prepare_getline_args): generate a newline according to IO encoding
- when necessary.
- (rb_io_getline_1): call rb_io_getline_fast only for ASCII
- compatible encoding.
-
-Fri Jan 25 21:49:36 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_buf_cat_ascii): use rb_enc_cr_str_buf_cat.
-
-Fri Jan 25 19:38:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (version.$(OBJEXT)): depends on $(srcdir)/revision.h.
-
- * common.mk (revision.h): extracts revision number with ``svn info''.
-
- * common.mk (up): target to update from the repository.
-
- * Makefile.in, {win,bcc}32/Makefile.sub (IFCHANGE): tool to update a
- file if changed.
-
- * tool/ifchange: for unixen.
-
- * win32/ifchange.bat: some fix
-
-Fri Jan 25 17:12:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (load_file): set default to ASCII-8BIT explicitly if -K
- option is not given.
-
-Fri Jan 25 16:31:47 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h (rb_str_buf_cat_ascii): declared.
-
- * string.c (rb_str_buf_cat_ascii): defined.
-
- * re.c (rb_reg_s_union): use rb_str_buf_cat_ascii to support ASCII
- incompatible encoding.
-
-Fri Jan 25 16:11:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options, load_file, rb_load_file): propagates script
- encoding by -K to libraries. [ruby-dev:33156]
-
-Fri Jan 25 15:56:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (cmdline_arguments): split argc and argv from cmdline_options.
-
- * ruby.c (process_options): not set encoding of -e option from -E
- option if they are not compatible.
-
-Fri Jan 25 13:15:23 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ruby.c (proc_options, process_options, load_file): shouldn't effect
- --encoding to script encoding. [ruby-dev:33169]
-
-Fri Jan 25 10:31:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * */*.bat: set svn:mime-type to text/batch.
-
-Thu Jan 24 23:23:06 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * enum.c (enum_one, enum_take_while, enum_drop_while): fix documents.
-
-Thu Jan 24 21:46:24 2008 Tanaka Akira <akr@fsij.org>
-
- * parse.y (reg_fragment_setenc_gen): associate ASCII-8BIT only if
- str has only ASCII characters.
-
-Thu Jan 24 20:46:17 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_m17n.rb: follow to the following changes.
-
-Thu Jan 24 20:21:07 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parser.y (parser_str_new): automatically update string literal's
- encoding from US-ASCII to ASCII-8BIT when script encoding is US-ASCII
- and the string includes non-ascii bytes. [ruby-dev:33348]
-
- * parser.y (reg_fragment_check_gen, reg_compile_gen): automatically
- update regexp literal's encoding from US-ASCII to ASCII-8BIT when
- script encoding is US-ASCII, the regexp has no kcode option and the
- regexp includes non-ascii bytes. [ruby-dev:33353]
-
-Thu Jan 24 19:36:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/uri/generic.rb (URI::Generic::inspect): use Kernel#to_s instead
- object_id with printf. [ruby-dev:33347]
-
-Thu Jan 24 19:29:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (remove_sign_bits): returns pointer to the first char to
- be used, instead of copying.
-
- * sprintf.c (rb_str_format): negative indicator dots should come
- before sign digits always. [ruby-dev:33224]
-
-Thu Jan 24 18:19:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/encoding.h (rb_enc_is_newline): parenthesized arguments.
-
-Thu Jan 24 18:14:14 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * re.c (rb_reg_fixed_encoding_p): no need to treat ASCII-8BIT specially.
-
-Thu Jan 24 16:53:06 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * re.c (rb_reg_initialize): 7bit clean regexp should be US-ASCII.
- [ruby-dev:33346]
-
-Thu Jan 24 16:31:04 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_getline_fast): the end point of left_char_head()
- must be the last character. [ruby-cvs:22445]
-
-Thu Jan 24 16:24:25 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (reg_fragment_setenc_gen): recognize regexp with option n as
- as ASCII-8BIT instead of US-ASCII. [ruby-dev:33339]
-
-Thu Jan 24 15:44:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (collect_bang_i): use rb_ary_store() to avoid potential
- memory corruption. a patch from Yusuke Endoh <mame@tsg.ne.jp>
- in [ruby-dev:33328].
-
- * array.c (ITERATE): remove unnecessary macro.
-
- * array.c (sort_1): remove ary_sort_check(). in-place sort keep
- original elements even when it's modified.
-
- * array.c (sort_2): ditto.
-
-Thu Jan 24 15:09:40 2008 Tanaka Akira <akr@fsij.org>
-
- * time.c (make_time_t): revert round trip test. [ruby-dev:33058]
-
-Thu Jan 24 11:14:56 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_enc_cr_str_buf_cat): ASCII incompatible encoding is
- not compatible with any other encoding.
-
-Thu Jan 24 07:34:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * parse.y (STR_NEW0): set encoding as US-ASCII.
-
-Thu Jan 24 03:47:41 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/rexml/text.rb, lib/rubygems/open-uri.rb, lib/open-uri.rb,
- test/logger/test_logger.rb, test/ruby/test_regexp.rb:
- fix tests. [ruby-dev:33336]
-
-Thu Jan 24 03:23:44 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_each_line): use memchr(3) for faster newline
- search.
-
- * io.c (appendline): remove unused arguments
-
- * io.c (rb_io_getline_fast): make much simpler (and faster).
-
-Thu Jan 24 02:13:07 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * insns.def (expandarray): fix stack inc. [ruby-dev:32892]
-
- * bootstraptest/test_knownbug.rb, test_massign.rb: move a fixed test.
-
-Thu Jan 24 01:00:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.{c, h} (rb_usascii_encoding): added.
-
- * parse.y (parser_str_new, rb_intern3): ascii only string literal is
- US-ASCII.
-
- * ruby.c (proc_optionc): -Kn means ASCII-8BIT.
-
-Wed Jan 23 23:54:40 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * sprintf.c: fix comment. [ruby-dev:33275]
-
- * math.c: fix comment. [ruby-dev:33276]
-
-Wed Jan 23 22:47:34 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_struct.rb: add tests to achieve over 90% test
- coverage of struct.c.
-
- * test/ruby/test_sprintf.rb: ditto for sprintf.c.
-
- * test/ruby/test_math.rb: ditto for math.c.
-
-Wed Jan 23 22:14:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/trans/japanese.c (rb_from_Windows_31J, rb_to_Windows_31J):
- provisional workaround for Windows-31J. [ruby-dev:33320]
-
-Wed Jan 23 15:25:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (time_strftime): copy encoding from format. [ruby-dev:33303]
-
-Wed Jan 23 15:04:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_make_independent): should set length.
-
- * string.c (rb_str_associate): hide associated array from ObjectSpace.
-
- * string.c (rb_str_associated): return associated array with freezing
- instead of false. [ruby-dev:33282]
-
- * string.c (rb_str_freeze): freeze associated array together.
-
-Wed Jan 23 13:39:48 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_prepare_re): fix SEGV by
- /a/ =~ "aa".force_encoding("utf-16be").
-
-Wed Jan 23 11:53:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_mod_check, str_nth, str_offset): constified.
-
- * string.c (rb_str_dump): dump in ASCII-8BIT always.
-
-Wed Jan 23 10:18:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval_method.c (rb_export_method): set ruby_vm_redefined_flag for
- visibility change as well. reported by K.Kosako in
- http://d.hatena.ne.jp/kkos/20080122#1201012720.
-
-Tue Jan 22 22:26:23 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_bignum.rb: change some tests because rational
- redefines Bignum#quo and Bignum#**.
-
-Tue Jan 22 20:58:15 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): need to output sodir rule.
-
-Tue Jan 22 19:37:16 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): lib files shouldn't depend on install
- dir because if the dir is newer than lib files, lib files will be
- always copied.
-
-Tue Jan 22 17:52:52 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/utf_16_32.c: Streamline parentheses, add more
- 'static' qualifiers.
-
-Tue Jan 22 12:57:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in (MINIRUBY): remove -I$(EXTOUT)/$(arch) from
- MINIRUBY since miniruby might not be able to load DLL.
-
- * test/ruby/test_m17n.rb: move tests from bootstrap test.
-
- * encoding.c (enc_find): should check name if ASCII compatible.
-
- * string.c (rb_str_end_with): should check character boundary.
-
- * encoding.c (rb_enc_compatible): encoding must be ASCII
- compatible before checking ENC_CODERANGE_7BIT.
-
- * encoding.c (rb_enc_compatible): wrong compatibility condition.
- [ruby-dev:33273]
-
-Tue Jan 22 09:26:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_each_char): iterates over a shadow.
- [ruby-dev:33243]
-
-Tue Jan 22 08:59:52 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/ri/formatter.rb: Indent labeled lists like note lists.
-
- * test/rdoc/test_rdoc_ri_overstrike_formatter.rb: Added.
-
- * test/rdoc/test_rdoc_ri_formatter.rb: Added tests.
-
-Tue Jan 22 04:40:28 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (rb_intern3): do not call rb_enc_mbclen() if *m is
- ASCII. [ruby-talk:287225]
-
- * string.c (rb_str_each_line): use rb_enc_is_newline() to gain
- performance if the record separator ($/) is not modified.
-
-Tue Jan 22 01:15:51 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * ChangeLog: format-time-string under C locale. [ruby-dev:33261]
-
-Tue Jan 22 00:45:12 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * test/ruby/test_bignum.rb: add tests for bignum.c.
-
-Tue Jan 22 00:30:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
-
- * bignum.c (big_shift): fix a bug that caused infinite loop when
- left shifting.
-
-Mon Jan 21 20:09:38 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (marshal_load): initialize the cache.
-
-Mon Jan 21 19:42:42 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c, enc/trans/utf_16_32.c, test/ruby/test_transcode.rb:
- added UTF-32BE and UTF-32LE conversions.
-
-Mon Jan 21 14:36:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (str_transcode): initialize transcoder in
- rb_transcoding. [ruby-dev:33234]
-
- * transcode_data.h (rb_transcoding): transcoder constified.
-
-Mon Jan 21 12:50:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c, gc.c (setjmp): sigsetjmp is a macro on cygwin.
-
-Mon Jan 21 12:35:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (transcode_loop, str_transcoding_resize): use unsigned
- char. [ruby-dev:33232]
-
- * transcode_data.h (rb_transcoding, rb_transcoder): removed callback
- parameters.
-
- * enc/trans/japanese.c: ditto.
-
- * enc/trans/utf_16_32.c: parenthesized bit-or operands.
-
-Mon Jan 21 11:59:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_each_char): move forward. [ruby-dev:33231]
-
-Mon Jan 21 06:40:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (transcode_dispatch): constified return value.
-
- * transcode_data.h (rb_transcoding): include pointer to rb_transcoder
- and auxiliary data.
-
- * transcode_data.h (rb_transcoder): all callback functions should have
- their own parameters.
-
- * enc/trans/{japanese,single_byte}.c: constified.
-
-Mon Jan 21 03:45:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_each_char): advance offset before get next char
- length. [ruby-dev:33211]
-
-Sun Jan 20 20:00:20 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c, enc/trans/utf_16_32.c, test/ruby/test_transcode.rb:
- added UTF-16LE conversions.
-
- * fixed changelog for last commit
-
-Sun Jan 20 17:54:00 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * added changelog for last commit
-
-Sun Jan 20 15:08:08 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/trans/utf_16_32.c: new file, currently implementing
- UTF-16BE conversions only.
-
- * test/ruby/test_transcode.rb: Added tests for UTF-16BE;
- made check_both_ways() use force_encoding differently.
-
- * transcode_data.h, transcode.c: Support for more conversion
- functions.
-
-Sun Jan 20 13:06:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_each_char): performance improvement, and stop if
- shortened in the block. [ruby-dev:33189]
-
-Sun Jan 20 09:12:26 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * common.mk: use -Ks when read insns.def. [ruby-dev#33185]
-
- * parse.y: fix -e and stdin strings aren't set encoding.
-
-Sun Jan 20 05:12:44 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/make_encdb.rb: fix duplication check.
-
-Sun Jan 20 05:03:46 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ascii.c: remove definition of replica KOI8-U.
-
-Sun Jan 20 00:33:59 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/koi8_u.c: added.
-
- * regenc.c, enc/utf_8.c, enc/unicode.c, enc/gb18030.c: add ARG_UNUSED.
-
-Sat Jan 19 22:41:39 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (coderange_scan): don't call mbclen functions for ASCII
- characters with ASCII compatible encoding.
-
-Sat Jan 19 21:00:34 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/rdoc/template.rb (RDoc): defined to avoid uninitialized constant
- error by `./ruby test/rubygems/test_gem_server.rb'.
-
-Sat Jan 19 20:41:29 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (enc_new): don't free rb_encoding to avoid SEGV by
- `miniruby -e exit' on x86_64 GNU/Linux.
-
-Sat Jan 19 18:40:19 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (once): use an instance variable which points a hash
- as cache. [experimental]
-
-Sat Jan 19 17:21:29 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb: parse's hints as an
- experimental function has been removed.
-
-Sat Jan 19 11:21:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (sigsetjmp): check if available.
-
- * eval.c, gc.c (setjmp): do not use _setjmp if sigsetjmp is available.
-
-Sat Jan 19 11:10:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: Remove wrong assumptions about Cygwin. a patch from
- Corinna Vinschen in [ruby-Bugs-17018].
-
-Sat Jan 19 09:23:14 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_set_safe_array): should not use
- recursive calling.
-
- * test/win32ole/test_win32ole_variant.rb: ditto.
-
-Sat Jan 19 08:58:47 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/markup: Remove ListBase and Line constants.
-
- * lib/rdoc/ri: Allow output IO to be specified.
-
- * test/rdoc/parser/test_parse_c.rb: Move up one level, fixed.
-
- * test/rdoc/parser/test_rdoc_markup_attribute_manager.rb: Renamed to
- match new class name, updated to match new classes.
-
- * test/rdoc/test_rdoc_ri_formatter.rb: Start of RI formatting tests.
-
- * test/rdoc/test_rdoc_ri_attribute_manager.rb: Start of
- RDoc::RI::AttributeManager tests.
-
- * test/rdoc/test_simple_markup.rb: Moved to match new class name.
-
-Sat Jan 19 08:35:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_prepare): get encoding from the first line.
- [ruby-dev:33168]
-
- * ruby.c (load_file): set encoding to input with set_encoding.
-
-Sat Jan 19 03:46:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (thread_create_core): prohibit thread creation in the
- frozen thread group. a patch in [ruby-dev:33176] from sheepman
- <sheepman AT sheepman.sakura.ne.jp>.
-
- * thread.c (thread_create_core): should inherit ThreadGroup from
- the current thread.
-
-Sat Jan 19 00:37:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): set result encoding for wider width.
-
-Sat Jan 19 00:13:19 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.c (w32_wait_events): shouldn't invoke interrupt handle
- by timer_thread.
-
-Fri Jan 18 23:49:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_create_core): set thread group before creating
- thread.
-
-Fri Jan 18 20:19:51 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (ripper_initialize): too early to set parser->enc.
-
-Fri Jan 18 20:03:05 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/setup.mak (BASERUBY): nmake cannot execute ruby correctly
- if the path of ruby.exe is quoted.
-
- * win32/setup.mak ($(ARCH)): if a macro is appended by $(APPEND),
- a space will be inserted on the top of the line.
-
-Fri Jan 18 17:56:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_intern.h, insnhelper.h, thread_pthread.h, vm_core.h, vm_opts.h:
- prefixed include guards with RUBY.
-
- * id.h: added include guard.
-
- * regenc.h, regint.h, regparse.h: prefixed include guards with
- ONIGURUMA.
-
-Fri Jan 18 15:57:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_cleanup_func): ignore errors from destroying mutex
- of dead thread. [ruby-core:15069]
-
- * thread_pthread.c, thread_win32.c (native_thread_destroy): ditto.
-
-Fri Jan 18 15:56:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_name_list_i, rb_enc_aliases_enc_i): freeze
- element strings to be returned.
-
-Fri Jan 18 14:36:34 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_m17n.rb (test_str_dump): added test for
- String#dump. [ruby-dev:33142]
-
-Fri Jan 18 12:25:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (load_encoding): check if successfully loaded.
-
- * encoding.c (rb_enc_find_index): use original encoding name to
- replicate loaded encoding instead alias.
-
-Fri Jan 18 09:43:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * re.c (rb_char_to_option_kcode): Regexp switch `s' should mean
- Windows-31J, as wells as `-Ks'.
-
-Fri Jan 18 09:22:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_initialize): explicitly call rb_ascii8bit_encoding().
-
- * parse.y (parser_prepare): lex_input may not be have encoding (e.g. IO).
-
- * parse.y (rb_parser_compile_string): set encoding from input string.
-
- * encoding.c (rb_enc_find_index): use ASCII-8BIT if loading known
- encoding failed.
-
- * parse.y (ripper_initialize): move parser->enc initialization.
-
- * encoding.c (rb_enc_aliases_enc_i): exclude non alias names from
- Encoding.aliases.
-
- * encoding.c (rb_enc_find_index): use original encoding name to
- load DLL.
-
-Fri Jan 18 07:06:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (Init_IO): stdin/stdout may not be duplex.
-
-Fri Jan 18 04:27:57 2008 Eric Hodel <drbrain@segment7.net>
-
- * sample/rdoc/markup/rdoc2latex.rb: Fix for new namespacing.
-
- * lib/rdoc/markup/to_latex.rb: Fix namespacing.
-
-Fri Jan 18 02:02:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bootstraptest/runner.rb (assert_valid_syntax): added.
-
- * bootstraptest/test_knownbug.rb: added test for [ruby-list:44479]
-
-Fri Jan 18 01:48:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_call_method): check argument number to
- attr_reader. [ruby-core:15120]
-
-Fri Jan 18 00:49:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_check_readable): flush tied write IO too.
-
- * io.c (Init_IO): tie stdin with stdout. [ruby-core:15107]
-
-Fri Jan 18 00:23:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (enc_free): removed since rb_encoding may be used while
- cleanup.
-
-Fri Jan 18 00:17:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/euc_cn.c: split from enc/euc_kr.c.
-
-Fri Jan 18 00:03:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_init): use default external encoding
- if nothing is given. a patch from sheepman <sheepman AT
- sheepman.sakura.ne.jp> in [ruby-dev:33159].
-
-Thu Jan 17 23:56:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (encdb.h): give output file name to make_encdb.rb.
-
- * encoding.c (enc_table): simplified.
-
- * encoding.c (enc_register_at): lazy loading. [ruby-dev:33013]
-
- * regenc.h (ENC_DUMMY): added.
-
- * enc/make_encdb.rb: now emits macros only.
-
- * enc/iso_2022_jp.h: split from encoding.c.
-
-Thu Jan 17 21:48:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_char_to_option_kcode): fixed typo.
-
-Thu Jan 17 21:01:25 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (Date::Infinity#<=>): didn't work. A patch from
- Dirkjan Bussink <d.bussink AT gmail.com> [ruby-core:15098].
- This is a bug obviously. However it didn't affect the library's
- functions.
-
- * lib/date.rb, lib/date/format.rb: some trivial changes.
-
-Thu Jan 17 13:07:18 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_dump): preserve the encoding of source string
- if it is ASCII compatible. otherwise, add '.force_encoding()'
- for ugly work around. maybe we should implement some other way
- to keep non ASCII encoding in dumped string. [ruby-dev:33142]
-
-Thu Jan 17 10:30:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_fwrite): always flush IO on tty, even without newlines.
- [ruby-core:15107]
-
-Wed Jan 16 22:45:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (enc_register_at): make own copy. [ruby-dev:33136]
-
-Wed Jan 16 18:03:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (pipe_open, rb_io_s_popen): clear temporary object to release
- and prevent from GC.
-
-Wed Jan 16 17:55:07 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (fix_quo): typo. a patch from Shin-ichiro HARA
- <sinara AT blade.nagaokaut.ac.jp> in [ruby-dev:33130]
-
-Wed Jan 16 17:36:26 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/test_delegate.rb: add new test file for delegate.rb.
-
-Wed Jan 16 16:14:00 2008 Akinori MUSHA <knu@iDaemons.org>
-
- * ruby.1: Fix grammar.
-
-Wed Jan 16 15:26:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (sys_fail2): get rid of unlimited alloca.
-
- * io.c (mode_enc, pipe_open, rb_io_s_popen): ditto.
-
- * load.c (rb_feature_p): ditto.
-
- * object.c (rb_cstr_to_dbl): ditto.
-
- * io.c (mode_enc): fixed uninitialized variable.
-
-Wed Jan 16 12:51:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h (rb_str_tmp_new, rb_str_shared_replace):
- prototype moved.
-
-Tue Jan 15 23:52:51 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/*: add ARG_UNUSED.
-
- * enc/koi8_u.c: added.
-
-Tue Jan 15 23:00:08 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/utf_{16,32}{be,le}.c: remove some ARG_UNUSED. replace struct
- OnigEncodingST by OnigEncoding.
-
-Tue Jan 15 22:30:43 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (ENC_REGISTER): use &OnigEncoding*.
- (ENCINDEX_UTF_8): renamed from ENCINDEX_UTF8.
- (rb_enc_init): use ENC_REGISTER.
-
- * include/ruby/oniguruma.h (OnigEncodingUTF8, ONIG_ENCODING_UTF8):
- removed.
-
- * enc/*.c: remove use of &encoding_*; use enc argument instead.
-
-Tue Jan 15 18:44:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enc/utf_8.c: remove use of ONIG_ENCODING_UTF8 altogether; use
- enc argument instead.
-
-Tue Jan 15 18:05:26 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * enc/utf_8.c (ONIG_ENCODING_UTF8): reverted.
-
-Tue Jan 15 18:01:55 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (MKFILES): add dependencies.
-
-Tue Jan 15 18:00:16 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enc/utf_8.c (OnigEncodingDefine): encoding name should be kept
- unchanged.
-
-Tue Jan 15 17:53:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/utf_8.c: renamed as IANA name.
-
- * enc/Makefile.in: ditto.
-
-Tue Jan 15 16:59:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): encoding libraries cannot be loaded until
- load path is set.
-
-Tue Jan 15 15:09:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/setup.mak: strip out empty lines from CPP output.
-
-Tue Jan 15 14:57:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * {win,bcc}32/setup.mak (-basic-vars-): expand BASERUBY to full path
- to get rid of ./ruby.exe.
-
- * win32/enc-setup.mak: workaround for Borland make.
-
-Tue Jan 15 14:44:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_locale_charmap): use ASCII-8BIT in miniruby.
-
-Tue Jan 15 13:54:41 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc32,win32}/Makefile.sub (RUNRUBY): need to set archdir when
- invoking ruby.
-
-Tue Jan 15 13:43:18 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (us_ascii.o): add dependencies. [ruby-dev:33111]
-
-Tue Jan 15 03:41:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (eval): check if backtrace is empty. [ruby-core:15040]
-
-Tue Jan 15 01:28:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk: simplified dummy objects dependencies.
-
-Tue Jan 15 01:19:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (OBJS): moved encoding.o from COMMONOBJS.
-
- * common.mk (dmyencoding.o): added. [ruby-dev:33099]
-
- * configure.in, {win,bcc}32/Makefile.sub (MINIOBJS): added
- dmyencoding.o.
-
- * dmyencoding.c (rb_locale_charmap): returns nil for miniruby.
-
-Tue Jan 15 00:05:50 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (appendline): specifying limit should not generate broken
- byte sequence. strings should be rounded. [ruby-dev:33088]
-
-Mon Jan 14 23:33:02 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/lib/kconv.rb (Kconv.tolocale): argument is str.
-
-Mon Jan 14 23:31:05 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in (setup): add -I$(EXTOUT)/$(arch) to MINIRUBY.
-
- * bootstraptest/runner.rb (main): expand -I directory path.
-
-Mon Jan 14 23:28:10 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/enc-setup.mak (BUILTIN_ENCOBJS): depends on enc/Makefile.in.
-
-Mon Jan 14 22:48:16 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_char_to_option_kcode): use rb_enc_find_index() instead
- of using fixed index value.
-
- * enc/Makefile.in (encsrcdir): make US-ASCII built-in.
-
-Mon Jan 14 22:25:02 2008 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * golf_prelude.rb: Shorter method name completion. Same method
- used for const missing. do_while and do_until added. Enumerator
- gains all of Array's abilities. Ex:
- '123'.m{|i|i*2} #=> "112233"
- '123'.pe #=> '123'.perm*' ' #=> "123 132 213 231 312 321"
- base on a patch from Darren Smith <darrenks AT ml1.net>.
-
-Mon Jan 14 21:10:02 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enc/us_ascii.c: wrong alias name: ANSI_X3.4-1986.
-
- * rubytest.rb: add -I#{srcdir} to load encoding DLL.
-
-Mon Jan 14 18:53:58 2008 Koichi Sasada <ko1@atdot.net>
-
- * thread.c: clear thread structure.
- (TODO: survey that child process should clear mutex or not).
-
- * bootstraptest/test_knownbug.rb, test_thread.rb: move a fixed test.
-
-Mon Jan 14 18:43:38 2008 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/runner.rb: add "flunk" method.
-
- * bootstraptest/test_knownbug.rb: fix to use flunk.
-
-Mon Jan 14 18:10:59 2008 Koichi Sasada <ko1@atdot.net>
-
- * vm.h: remove dangerous assembler sentence.
-
-Mon Jan 14 18:06:37 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_locale_encoding): return US-ASCII when charmap is
- nil.
-
-Mon Jan 14 16:12:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/shellwords.rb: scape should be an alias to shellescape. a
- patch from Masahiro Kawato <m-kawato AT mwb.biglobe.ne.jp> in
- [ruby-dev:33060].
-
-Mon Jan 14 16:09:16 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.1: a patch to describe --encoding. a patch from Yugui
- <yugui AT yugui.sakura.ne.jp> in [ruby-dev:33079].
-
- * ruby.c: ditto.
-
-Mon Jan 14 13:49:26 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_prepare_re): initialize error message buffer.
- (rb_reg_search): ditto.
- (rb_reg_check_preprocess): ditto.
- (rb_reg_new_str): ditto.
- (rb_enc_reg_new): ditto.
- (rb_reg_compile): ditto.
- (rb_reg_initialize_m): ditto.
- (rb_reg_s_union_m): ditto.
-
-Mon Jan 14 12:33:07 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/markup*: Renamespace from SM::SimpleMarkup to
- RDoc::Markup.
-
-Mon Jan 14 10:45:45 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * enc/ascii.c: Exchanged order of arguments for one ENC_ALIAS
-
-Mon Jan 14 09:19:07 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/time.rb: do not reference Time directly from the inside of
- definitions. [ruby-dev:33059]
-
-Mon Jan 14 05:44:44 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/*.c: add replicas and aliases.
-
- * enc/make_encdb.h: add duplicate and undefined check.
-
-Mon Jan 14 02:03:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * include/ruby/oniguruma.h: remove ONIG_ENCODING_* and OnigEncoding*
- which are not builtin.
-
- * regenc.{c,h} (onigenc_mb2_code_to_mbclen, onigenc_mb4_code_to_mbclen):
- fix prototype.
-
- * enc/big5.c, enc/euc_kr.c, enc/euc_tw.c, enc/gb18030.c,
- enc/koi8_r.c, enc/windows_1251.c: imported from Oniguruma.
-
-Sun Jan 13 22:47:28 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/make_encdb.h: sort encoding names by original name.
-
- * encoding.c, enc/*.c: define replicas and aliases.
-
-Sun Jan 13 20:24:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c: add documents.
-
-Sun Jan 13 18:41:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (Init_Encoding): moved initialization from encdb.h.
-
- * enc/make_encdb.rb (enc_name_list): constified.
-
- * enc/make_encdb.rb (enc_init_db): moved some functions to encoding.c.
-
-Sun Jan 13 13:53:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (load_file): local variable was not initialized when -x flag
- is given.
-
- * ruby.c (load_file): script files should not be affected by locale.
- [ruby-dev:33054]
-
-Sun Jan 13 12:01:32 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/generators*: Reorganize RDoc generators.
-
-Sun Jan 13 11:41:11 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (ENCINDEX_EUC_JP, ENCINDEX_SJIS): removed.
- (rb_enc_init): EUC-JP and Shift_JIS are not builtin now.
-
- * enc/Makefile.in: ditto.
-
- * common.mk: ditto.
-
- * ruby.c (proc_options): ditto.
-
- * enc/shift_jis.c, enc/euc_jp.c: fixes for remove from builtin.
-
-Sun Jan 13 10:21:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (enc_table): packed all enc_table stuff.
-
-Sun Jan 13 09:58:17 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_enc_init): revert removing SJIS.
-
- * enc/sjis.c: move to enc/shift_jis.c, to make encoding name equal to
- filename for convenience of loading lib.
-
- * enc/shift_jis.c: moved from enc/sjis.c.
-
- * common.mk: follows enc/shift_jis.c.
-
- * enc/Makefile.in: ditto.
-
-Sun Jan 13 09:22:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (incs): includes encdb.h.
-
-Sun Jan 13 09:17:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * {bcc,win}32/Makefile.sub (MV): use move instead of ren. [ruby-Bugs-17019]
-
-Sun Jan 13 01:52:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enc/make_encdb.rb: should work on Ruby 1.8. [ruby-dev:33069]
-
- * common.mk (encdb.h): pass enc dir from outside to make_encdb.rb.
-
-Sun Jan 13 00:01:07 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/make_encdb.rb: added. search enc/*.c and make encoding database.
-
- * regenc.h (ENC_REPLICATE, ENC_ALIAS): added for defining replica
- encoding and encoding alias.
-
- * encoding.c (rb_enc_init): move alias definitions to enc/*.c.
- (rb_enc_find_index): search original of replica and alias when no
- encoding library.
- (rb_enc_name_list, rb_enc_aliases_enc_i, rb_enc_aliases_str_i,
- rb_enc_aliases, Encoding.name_list, Encoding.aliases): added.
- (Init_Encoding): init encdb.
-
- * enc/ascii.c, enc/us_ascii.c, enc/euc_jp.c, enc/sjis.c:
- add replica encoding and encoding alias definition.
-
- * common.mk (dist-clean-local): add rule for remove encdb.h.
-
-Sat Jan 12 18:27:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_define_alloc_func, rb_undef_alloc_func): should
- define/undef on a singleton class. [ruby-core:09959]
-
-Sat Jan 12 12:44:36 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf.c: rdoc update.
-
-Sat Jan 12 12:01:49 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb: tuning for performance.
-
-Sat Jan 12 11:29:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bootstraptest/test_proc.rb: fixed wrong expected result. pointed
- out by Kornelius "murphy" Kalnbach <murphy AT rubychan.de> in
- [ruby-core:15022].
-
-Sat Jan 12 04:38:38 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ruby.c (process_options): -e'script' is locale encoding by default.
- (load_file): ruby script from stdin is locale encoding by default.
-
-Sat Jan 12 04:31:59 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: fix bug: -m was -m0.
-
-Fri Jan 11 23:22:31 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (string.c): call rb_str_buf_append to update encoding of
- str1, even if str2 is empty.
-
-Fri Jan 11 20:20:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (proc_mark): needs to mark the receiver too. a patch from
- Chris Heath <chris AT heathens.co.nz> in [ruby-core:14983].
- [ruby-core:14885]
-
-Fri Jan 11 18:28:49 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/usage.rb: Removed.
-
- * lib/getoptlong.rb: Update example to not use lib/rdoc/usage.rb.
-
-Fri Jan 11 18:17:10 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/ri/driver.rb (read_yaml): Follow namespace change
- [ruby-core:14964].
-
-Fri Jan 11 16:55:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_append): performance improvement.
-
-Fri Jan 11 12:35:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: moved broken syscall checks from process.c etc.
-
- * defines.h (WORDS_BIGENDIAN): honor __BIG_ENDIAN__ than the result of
- configure.
-
- * lib/rdoc/options.rb (check_diagram): more precise check, darwin
- is not Windows but mingw is on it.
-
-Fri Jan 11 09:59:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: update to r1.163.
-
- * ext/nkf/nkf.c: ASCII's canonical name is US-ASCII.
-
- * ext/nkf/lib/kconv.rb (Kconv.isjis): force_encoding('BINARY').
-
-Fri Jan 11 09:23:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (set_base_encoding): must use rb_enc_dummy_p.
-
-Fri Jan 11 06:13:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_to_encoding_index, rb_to_encoding): disallow nil.
- [ruby-dev:33003]
-
-Fri Jan 11 01:08:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread.c (rb_mutex_unlock): proper error message for unlocking
- mutex that is not locked. a patch from Yusuke ENDOH
- <mame at tsg.ne.jp> in [ruby-dev:33010].
-
-Thu Jan 10 18:00:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * prelude.rb (Mutex::synchronize): capture exception from unlock.
- [ruby-dev:32935]
-
-Thu Jan 10 10:15:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_encoding_set): IO.pipe("euc-jp", nil) should work as
- IO.pipe("euc-jp", nil). [ruby-dev:33000]
-
- * io.c (io_encoding_set): handle nil for v1.
-
-Thu Jan 10 02:41:22 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_binmode): should not alter encoding. [ruby-dev:32918]
-
- * io.c (io_read_encoding): need not to return ASCII-8BIT for
- binary IO.
-
-Wed Jan 9 22:04:17 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * lib/mathn.rb (Prime#each): returns an enumerator if no block
- given. [ruby-dev:32815]
-
-Wed Jan 9 22:03:26 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_enc_replicate): replica of dummy is a dummy.
-
-Wed Jan 9 20:55:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/e2mmap.rb (Exception2MessageMapper::Raise): define fail.
- [ruby-dev:32854]
-
-Wed Jan 9 20:35:42 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httprequest.rb: support X-Forwarded-* header fields.
- WEBrick::HTTPRequest#{host,port,request_uri} is derived having
- regards to X-Forwarded-Proto and X-Forwarded-Host.
-
- * lib/webrick/httprequest.rb
- (WEBrick::HTTPRequest#server_name?): new method.
- (WEBrick::HTTPRequest#remote_ip?): new method.
- (WEBrick::HTTPRequest#ssl?): new method.
-
-Wed Jan 9 18:24:39 2008 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * golf_prelude.rb (Array#to_s): alias to join.
-
- * golf_prelude.rb (FalseClass#to_s): return "".
-
-Wed Jan 9 16:59:54 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_enc_cr_str_buf_cat): fix self appending.
-
-Wed Jan 9 15:54:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): give priority command line encoding option
- to RUBYOPT, and enable -E option in RUBYOPT.
-
- * ruby.c (load_file): deal with encoding option in shebang line if
- nothing in command line and RUBYOPT.
-
-Wed Jan 9 14:55:36 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (yycompile0): remove setting parser->enc because it is set
- in parser_prepare() by previous change of parser_prepare().
-
-Wed Jan 9 14:52:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_enc_cr_str_buf_cat, rb_str_buf_append): deal with self
- appending.
-
-Wed Jan 9 14:44:57 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (parser_prepare): set parser->enc from lex_input for ripper.
-
-Wed Jan 9 13:45:52 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/server.rb (WEBrick::HTTPServer#start):
- :DoNotReverseLookup option had not been performed.
-
-Wed Jan 9 13:03:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_enc_cr_str_buf_cat): do not recalculate coderange
- value if it's given from outside.
-
-Wed Jan 9 08:42:01 2008 James Edward Gray II <jeg2@ruby-lang.org>
-
- * enum.c: Updating the documentation of Enumerable#zip to reflect
- the recent changes Matz made to the method.
-
-Wed Jan 9 01:35:10 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * enc/Makefile.in (BUILTIN_ENCS): UTF-{16,32}{BE,LE} are not builtin.
-
-Tue Jan 8 23:55:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c (rb_enc_init): UTF-{16,32}{BE,LE} are not builtin.
-
-Tue Jan 8 22:33:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * encoding.c, Makefile.in, include/ruby/oniguruma.h,
- enc/Makefile.in: fix rules for UTF-{16,32}{BE,LE}.
-
-Tue Jan 8 20:02:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win{32,ce}/Makefile.sub: merged.
-
-Tue Jan 8 19:48:15 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/ri/driver.rb: Speed up Marshal.load. Fix bug with nested
- classes' methods.
-
-Tue Jan 8 19:17:29 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/*: Clean up namespacing of RI's classes.
-
-Tue Jan 8 18:05:35 2008 Eric Hodel <drbrain@segment7.net>
-
- * bin/ri, lib/rdoc/ri/*: Replace with Ryan Davis' cached ri.
-
-Tue Jan 8 17:32:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_zip): honor length of the receiver, not the
- shortest length. [ruby-core:14738]
-
- * enum.c (enum_zip): returns array not enumerator for no block
- form. [ruby-core:14738]
-
- * enumerator.c (next_ii): do not ignore multiple values yielded.
-
- * array.c (rb_ary_zip): faster version without creating generators.
-
-Tue Jan 8 15:47:43 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * enc/utf{16,32}_{be,le}.c: use &OnigEncodingName(*) instead of
- ONIG_ENCODING_*.
-
-Tue Jan 8 15:40:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * regenc.c (onigenc_strlen_null, onigenc_str_bytelen_null): suppressed
- warnings.
-
- * regenc.h, enc/unicode.c (onigenc_unicode_ctype_code_range): added
- encoding argument.
-
- * enc/utf{16,32}_{be,le}.c: added init functions.
-
- * enc/utf{16,32}_{be,le}.c: imported from Oniguruma 5.9.1.
-
-Tue Jan 8 15:03:10 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (str_gsub): avoid appending empty pre-match substr.
-
-Tue Jan 8 13:05:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_build_from_ary), iseq.c (iseq_load): fix for format change.
-
-Tue Jan 8 07:56:11 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_buf_append): fix append itself.
-
-Tue Jan 8 01:13:50 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (STR_ENC_GET): defined. same as rb_enc_get without
- enc_capable.
- (coderange_scan): ASCII-8BIT test refined.
- (rb_enc_cr_str_buf_cat): new internal function to accumulate
- strings with encoding.
- (rb_enc_str_buf_cat): use rb_enc_cr_str_buf_cat.
- (rb_str_buf_append): ditto
- (str_gsub): use rb_str_buf_append.
- (rb_str_hash): use ENCODING_GET.
- (rb_str_comparable): ditto.
- (rb_str_cmp): compare encoding index, not rb_encoding address.
-
-Mon Jan 7 20:37:55 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpservlet/cgihandler.rb: external encoding of
- tempfiles is set to "ASCII-8BIT".
-
-Mon Jan 7 19:39:50 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/template.rb: Use ERB instead of custom template language.
-
- * lib/rdoc/generators/template/html/old_html.rb: Remove.
-
- * lib/rdoc/generators/template/*: Convert to ERB.
-
-Mon Jan 7 19:11:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (Init_String): sym_match arity spec was wrong. a patch
- from Hiroyuki Iwatsuki <don at na.rim.or.jp> in [ruby-dev:32957].
-
-Mon Jan 7 18:10:33 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (str_gsub): move rb_enc_get(str) to out of loop.
-
-Mon Jan 7 15:52:10 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/oniguruma.h (OnigEncodingType): new member
- ruby_encoding_index to avoid linear search in rb_enc_to_index.
-
- * include/ruby/encoding.h (rb_enc_to_index): macro defined to use
- ruby_encoding_index.
-
- * encoding.c (rb_enc_to_index): removed.
- (enc_register_at): initialize ruby_encoding_index member.
-
-Mon Jan 7 16:10:35 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/tokenstream.rb: Namespace under RDoc.
-
-Mon Jan 7 16:06:09 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/dot.rb: Namespace under RDoc.
-
- * lib/rdoc/diagram.rb: Clean up formatting.
-
-Mon Jan 7 15:51:35 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/options.rb: Convert to OptionParser, clean up -h output,
- namespace under RDoc.
- * lib/rdoc/*: Namespace RDoc::Options.
-
-Mon Jan 7 15:42:46 2008 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk, Makefile.in, */Makefile.sub (distclean-local): move
- removing rule of ext/ripper/y.output from common.mk to Makefiles
- that depend on platforms.
-
-Mon Jan 7 13:54:57 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_preprocess): fix fixed_enc condition.
-
-Mon Jan 7 11:51:49 2008 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/generators/ri_generator.rb: Merge documentation from the
- same class on output. Fixes bug where documentation could
- disappear.
-
- * lib/rdoc/options.rb: Fix typo.
-
- * lib/rdoc/generators/*: Clean up some namespacing and make RDoc
- consistent.
-
-Mon Jan 7 11:44:45 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_internal_get_index): extracted from
- rb_enc_get_index.
- (rb_enc_internal_set_index): extracted from rb_enc_associate_index
-
- * include/ruby/encoding.h (ENCODING_SET): work over ENCODING_INLINE_MAX.
- (ENCODING_GET): ditto.
- (ENCODING_IS_ASCII8BIT): defined.
- (ENCODING_CODERANGE_SET): defined.
-
- * re.c (rb_reg_fixed_encoding_p): use ENCODING_IS_ASCII8BIT.
-
- * string.c (rb_enc_str_buf_cat): use ENCODING_IS_ASCII8BIT.
-
- * parse.y (reg_fragment_setenc_gen): use ENCODING_IS_ASCII8BIT.
-
- * marshal.c (has_ivars): use ENCODING_IS_ASCII8BIT.
-
-Mon Jan 7 02:14:07 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (coderange_scan): avoid rb_enc_to_index.
- (rb_enc_str_buf_cat): ditto.
- (str_cat_char): use rb_enc_str_buf_cat.
- (rb_str_inspect): ditto.
-
-Mon Jan 7 01:36:49 2008 Tanaka Akira <akr@fsij.org>
-
- * string.c (coderange_scan): optimize ASCII-8BIT string.
- (rb_enc_str_buf_cat): don't call coderange_scan if possible.
-
-Mon Jan 7 01:05:45 2008 Tanaka Akira <akr@fsij.org>
-
- * lib/erb.rb (ERB::Revision): cut off locale dependent string in Date
- keyword.
-
-Mon Jan 7 00:48:02 2008 Tanaka Akira <akr@fsij.org>
-
- * Date keyword removed to avoid inclusion of locale dependent
- string. [ruby-dev:32940]
-
-Sun Jan 6 21:14:12 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_initialize_str): forbid raw non ASCII character
- for ASCII-8BIT regexp in non ASCII-8BIT script.
-
-Sun Jan 6 18:19:12 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_enc_str_buf_cat): declared.
-
- * string.c (coderange_scan): extracted from rb_enc_str_coderange.
- (rb_enc_str_coderange): use coderange_scan.
- (rb_str_shared_replace): copy encoding and coderange.
- (rb_enc_str_buf_cat): new function for linear complexity string
- accumulation with encoding.
- (rb_str_sub_bang): don't conflict substituted part and replacement.
- (str_gsub): use rb_enc_str_buf_cat.
- (rb_str_clear): clear coderange.
-
- * re.c (rb_reg_regsub): use rb_enc_str_buf_cat.
-
-Sun Jan 6 17:55:44 2008 Technorama Ltd. <oss-ruby@technorama.net>
-
- * lib/securerandom.rb: Add Win32 support.
-
-Sun Jan 6 09:32:58 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb: introduced some constants
- (for internal use) and aliases (minute and second).
-
- * sample/cal.rb: trivial adjustments.
-
-Sun Jan 6 01:38:07 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_initialize_str): /\x80/n is not an error even if script
- encoding is EUC-JP.
-
-Sun Jan 6 00:48:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/resolv.rb (Resolv::DNS#each_address): get A record and then AAAA
- record. [ruby-dev:32925]
-
-Sat Jan 5 21:48:03 2008 Tanaka Akira <akr@fsij.org>
-
- * vm_insnhelper.c (vm_callee_setup_arg): it is not inlinable because
- alloca is used.
-
-Sat Jan 5 16:50:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_resize): copy if old data is not empty
- [ruby-core:14785]
-
-Sat Jan 5 13:04:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): no need for intermediate object.
-
-Sat Jan 5 11:48:19 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (Init_Encoding): alias csWindows31J to Windows-31J.
- IE6 accepts csWindows31J but Windows-31J.
-
-Sat Jan 5 02:21:10 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (rb_intern): memorize interned ID for constant
- string, using gcc's __builtin_constant_p and statement expression.
-
-Sat Jan 5 02:14:45 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (trnext): should enable backslash escape.
-
-Sat Jan 5 01:50:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (Init_eval): move instance_eval and instance_exec to
- BasicObject. [ruby-core:14747]
-
- * lib/delegate.rb: should preserve new methods in BasicObject.
-
-Sat Jan 5 01:46:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (proc_options): update according to the last API revert.
-
-Sat Jan 5 01:30:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/intern.h, re.c (rb_reg_new): keep interface same as
- 1.8. [ruby-core:14583]
-
- * include/ruby/intern.h, re.c (rb_reg_new_str): renamed, and defines
- HAVE_RB_REG_NEW_STR macro to tell if it is available.
-
- * include/ruby/encoding.h (rb_enc_reg_new): added.
-
- * insns.def (toregexp), marshal.c (r_object0): use rb_reg_new_str().
-
- * re.c (rb_reg_regcomp, rb_reg_s_union): ditto.
-
-Fri Jan 4 23:08:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (time_arg): use converted object. [ruby-core:14759]
-
-Fri Jan 4 16:24:58 2008 Tanaka Akira <akr@fsij.org>
-
- * ext/digest/lib/digest/hmac.rb (Digest::HMAC#initialize): use
- String#bytesize to avoid test errors on EUC-JP environment.
-
-Fri Jan 4 14:00:50 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_prepare_re): check string encoding. Oniguruma doesn't
- support invalid encoding.
-
-Fri Jan 4 10:22:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_search): avoid inner loop for reverse search.
-
- * regexec.c: unset USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
- which is turned on since oniguruma 5.9.1.
-
-Fri Jan 4 02:53:31 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/euc_jp.c: remove eucjp_ prefix. breakpoint can be specified as
- euc_jp.c:mbc_enc_len. avoid needless conflict by merge.
-
- * enc/sjis.c: remove sjis_ prefix.
-
- * enc/utf8.c: remove utf8_ prefix.
-
- * enc/iso_8859_1.c: remove iso_8859_1_ prefix.
-
- * enc/iso_8859_2.c: remove iso_8859_2_ prefix.
-
- * enc/iso_8859_3.c: remove iso_8859_3_ prefix.
-
- * enc/iso_8859_4.c: remove iso_8859_4_ prefix.
-
- * enc/iso_8859_5.c: remove iso_8859_5_ prefix.
-
- * enc/iso_8859_6.c: remove iso_8859_6_ prefix.
-
- * enc/iso_8859_7.c: remove iso_8859_7_ prefix.
-
- * enc/iso_8859_8.c: remove iso_8859_8_ prefix.
-
- * enc/iso_8859_9.c: remove iso_8859_9_ prefix.
-
- * enc/iso_8859_10.c: remove iso_8859_10_ prefix.
-
- * enc/iso_8859_11.c: remove iso_8859_11_ prefix.
-
- * enc/iso_8859_13.c: remove iso_8859_13_ prefix.
-
- * enc/iso_8859_14.c: remove iso_8859_14_ prefix.
-
- * enc/iso_8859_15.c: remove iso_8859_15_ prefix.
-
- * enc/iso_8859_16.c: remove iso_8859_16_ prefix.
-
-Fri Jan 4 02:47:06 2008 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_search): iterate onig_match for reverse mode.
-
-Fri Jan 4 01:20:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32.h: only VC6 needs extern "C++" for math.h. [ruby-talk:285660]
-
-Fri Jan 4 00:54:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/oniguruma.h: Oniguruma 5.9.1 merged.
-
-Fri Jan 4 00:20:47 2008 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_ungetc): move data in buffer if it is required to store the
- argument.
-
-Thu Jan 3 21:56:07 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (st_strcasecmp): declared for STRCASECMP.
- (st_strncasecmp): declared for STRNCASECMP.
-
-Thu Jan 3 20:24:48 2008 Koichi Sasada <ko1@atdot.net>
-
- * eval_jump.c (rb_f_catch): Restore cfp if caught thrown object.
-
-Thu Jan 3 19:45:57 2008 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_eval.rb, test_knownbug.rb: move a fixed test.
-
-Thu Jan 3 18:39:12 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c: (rb_tolower, rb_toupper): body was exchanged.
-
-Thu Jan 3 17:54:01 2008 Tanaka Akira <akr@fsij.org>
-
- * regenc.h (onigenc_ascii_is_code_ctype): put back.
-
-Thu Jan 3 17:33:09 2008 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_isalnum): defined.
- (rb_isalpha): ditto.
- (rb_isblank): ditto.
- (rb_iscntrl): ditto.
- (rb_isdigit): ditto.
- (rb_isgraph): ditto.
- (rb_islower): ditto.
- (rb_isprint): ditto.
- (rb_ispunct): ditto.
- (rb_isspace): ditto.
- (rb_isupper): ditto.
- (rb_isxdigit): ditto.
- (rb_tolower): ditto.
- (rb_toupper): ditto.
-
- * include/ruby/ruby.h: don't include include/ruby/encoding.h.
- (rb_isascii): defined.
- (rb_isalnum): declared.
- (rb_isalpha): ditto.
- (rb_isblank): ditto.
- (rb_iscntrl): ditto.
- (rb_isdigit): ditto.
- (rb_isgraph): ditto.
- (rb_islower): ditto.
- (rb_isprint): ditto.
- (rb_ispunct): ditto.
- (rb_isspace): ditto.
- (rb_isupper): ditto.
- (rb_isxdigit): ditto.
- (rb_tolower): ditto.
- (rb_toupper): ditto.
- (ISASCII): simplified.
- (ISPRINT): ditto.
- (ISSPACE): ditto.
- (ISUPPER): ditto.
- (ISLOWER): ditto.
- (ISALNUM): ditto.
- (ISALPHA): ditto.
- (ISDIGIT): ditto.
- (ISXDIGIT): ditto.
- (TOUPPER): ditto.
- (TOLOWER): ditto.
-
- * include/ruby/encoding.h (rb_isascii): removed.
- (rb_isalnum): ditto.
- (rb_isalpha): ditto.
- (rb_isblank): ditto.
- (rb_iscntrl): ditto.
- (rb_isdigit): ditto.
- (rb_isgraph): ditto.
- (rb_islower): ditto.
- (rb_isprint): ditto.
- (rb_ispunct): ditto.
- (rb_isspace): ditto.
- (rb_isupper): ditto.
- (rb_isxdigit): ditto.
- (rb_tolower): ditto.
- (rb_toupper): ditto.
-
- * common.mk: dependency updated.
-
-Thu Jan 3 15:10:26 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_isascii): simplified.
- (rb_isalnum): call onigenc_ascii_is_code_ctype without indirect call.
- (rb_isalpha): ditto.
- (rb_isblank): ditto.
- (rb_iscntrl): ditto.
- (rb_isdigit): ditto.
- (rb_isgraph): ditto.
- (rb_islower): ditto.
- (rb_isprint): ditto.
- (rb_ispunct): ditto.
- (rb_isspace): ditto.
- (rb_isupper): ditto.
- (rb_isxdigit): ditto.
-
- * include/ruby/oniguruma.h (onigenc_ascii_is_code_ctype): declaration
- moved from regenc.h.
-
-Thu Jan 3 14:37:17 2008 Tanaka Akira <akr@fsij.org>
-
- * parse.y (parser_magic_comment): use STRNCASECMP.
- (set_file_encoding): ditto.
-
-Thu Jan 3 11:44:37 2008 Tanaka Akira <akr@fsij.org>
-
- * time.c: don't mention an obsolete library, ParseDate.
-
-Thu Jan 3 11:28:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (fptr_finalize): clear errno first. [ruby-talk:284492]
-
-Thu Jan 3 05:02:36 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/us_ascii.c: add us_ascii_ prefix for functions to ease
- setting breakpoint when debugging.
-
- * enc/euc_jp.c: add eucjp_ prefix.
-
- * enc/sjis.c: add sjis_ prefix.
-
- * enc/iso_8859_1.c: add iso_8859_1_ prefix.
-
- * enc/iso_8859_2.c: add iso_8859_2_ prefix.
-
- * enc/iso_8859_3.c: add iso_8859_3_ prefix.
-
- * enc/iso_8859_4.c: add iso_8859_4_ prefix.
-
- * enc/iso_8859_5.c: add iso_8859_5_ prefix.
-
- * enc/iso_8859_6.c: add iso_8859_6_ prefix.
-
- * enc/iso_8859_7.c: add iso_8859_7_ prefix.
-
-Thu Jan 3 02:44:34 2008 Tanaka Akira <akr@fsij.org>
-
- * bignum.c (conv_digit): use ISDIGIT, ISLOWER and ISUPPER.
-
-Wed Jan 2 23:50:15 2008 Tanaka Akira <akr@fsij.org>
-
- * util.c (ruby_strtoul): "0x", "+" and "-" is not a valid integer.
- end of integer should be just after "0", the beginning, the
- beginning respectively.
-
-Wed Jan 2 15:23:15 2008 Tanaka Akira <akr@fsij.org>
-
- * util.c (ruby_strtoul): locale independent strtoul is implemented to
- avoid "i".to_i(36) cause 0 under tr_TR locale on Debian GNU/Linux
- 4.0 (Etch).
- This is newly implemented, not a copy of missing/strtoul.c.
-
- * include/ruby/ruby.h (ruby_strtoul): declared.
- (STRTOUL): defined to use ruby_strtoul.
-
- * bignum.c, pack.c, ext/socket/socket.c: use STRTOUL.
-
- * configure.in (strtoul): don't check.
-
- * missing/strtoul.c: removed.
-
- * include/ruby/missing.h (strtoul): removed.
-
- * common.mk (strtoul.o): removed.
-
- * LEGAL (missing/strtoul.c): removed.
-
-Wed Jan 2 14:41:08 2008 Tanaka Akira <akr@fsij.org>
-
- * common.mk (strcasecmp.o): removed.
- (strncasecmp.o): removed.
-
- * include/ruby/missing.h (strcasecmp): removed.
- (strncasecmp): removed.
-
-Wed Jan 2 11:34:57 2008 Tanaka Akira <akr@fsij.org>
-
- * missing/strcasecmp.c: removed. Ruby don't use locale dependent
- strcasecmp.
-
- * missing/strncasecmp.c: ditto.
-
- * configure.in: don't check strcasecmp and strncasecmp.
-
- * LEGAL: missing/strcasecmp.c and missing/strncasecmp.c removed.
-
-Wed Jan 2 10:13:54 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * sample/time.rb: use Process.times instead of Time.times.
-
-Wed Jan 2 09:09:53 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * sample/goodfriday.rb: examples for date are enough. retired.
-
-Wed Jan 2 08:58:54 2008 Tadayoshi Funaba <tadf@dotrb.org>
-
- * sample/cal.rb: just updated with the newest version.
-
-Wed Jan 2 01:19:31 2008 Tanaka Akira <akr@fsij.org>
-
- * enc/depend: dependency updated.
-
-Wed Jan 2 00:14:41 2008 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/{nkf.c, utf8tbl.c}: Update nkf.
-
- * ext/nkf/nkf.c: fix documents.
-
- * ext/nkf/lib/kconv.rb: fix documents.
- (Kconv.is*): use valid_encoding?.
- (Kconv.isjis): defined.
-
-Tue Jan 1 23:17:03 2008 Tanaka Akira <akr@fsij.org>
-
- * common.mk: dependency updated.
-
-Tue Jan 1 21:11:33 2008 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_isascii): defined.
- (rb_isalnum): ditto.
- (rb_isalpha): ditto.
- (rb_isblank): ditto.
- (rb_iscntrl): ditto.
- (rb_isdigit): ditto.
- (rb_isgraph): ditto.
- (rb_islower): ditto.
- (rb_isprint): ditto.
- (rb_ispunct): ditto.
- (rb_isspace): ditto.
- (rb_isupper): ditto.
- (rb_isxdigit): ditto.
- (rb_tolower): ditto.
- (rb_toupper): ditto.
-
- * include/ruby/st.h (st_strcasecmp): declared.
- (st_strncasecmp): ditto.
-
- * st.c (type_strcasehash): use st_strcasecmp instead of strcasecmp.
- (st_strcasecmp): defined.
- (st_strncasecmp): ditto.
-
- * include/ruby/ruby.h: include include/ruby/encoding.h.
- (ISASCII): use rb_isascii.
- (ISPRINT): use rb_isprint.
- (ISSPACE): use rb_isspace.
- (ISUPPER): use rb_isupper.
- (ISLOWER): use rb_islower.
- (ISALNUM): use rb_isalnum.
- (ISALPHA): use rb_isalpha.
- (ISDIGIT): use rb_isdigit.
- (ISXDIGIT): use rb_isxdigit.
- (TOUPPER): defined.
- (TOLOWER): ditto.
- (STRCASECMP): ditto.
- (STRNCASECMP): ditto.
-
- * dir.c, encoding.c, file.c, hash.c, process.c, ruby.c, time.c,
- transcode.c, ext/readline/readline.c: use locale insensitive
- functions. [ruby-core:14662]
-
-Tue Jan 1 17:50:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_mode_enc): encoding spec is not allowed in binary mode.
- [ruby-dev:32913]
-
-Tue Jan 1 14:41:56 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rexml: 1.9 patch from Sam Ruby mentioned in his blog:
- <http://intertwingly.net/blog/2007/12/31/Porting-REXML-to-Ruby-1-9>
- [ruby-core:14639]
-
-Tue Jan 1 14:15:04 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_substr): offset movement bug. a patch from
- Vincent Isambart <vincent.isambart at gmail.com> in
- [ruby-core:14647]. [ruby-core:14644]
-
-Tue Jan 1 01:29:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_to_encoding): raises for non-nil, non-encoding,
- non-string object. [ruby-core:14634]
-
-Tue Jan 1 01:04:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): rejects dummy encoding.
-
-Mon Dec 31 23:53:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options, process_options): delays finding encoding
- until load_path is set.
-
-Mon Dec 31 23:27:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_resize): embeds if ptr is null. [ruby-dev:32819]
-
-Mon Dec 31 23:17:22 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#proxy_service):
- call do_XXX which correspond with request method.
- (WEBrick::HTTPProxyServer#do_CONNECT,do_GET,do_POST,do_HEAD): added.
-
- * test/webrick/test_httpproxy.rb: add test for WEBrick::HTTPProxyServer.
-
-Mon Dec 31 22:53:29 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * thread_pthread.c (native_sleep): timespec tv_sec may overflow on
- some platform. a patch from zunda <zunda616e AT yahoo.co.jp> in
- [ruby-dev:32904].
-
-Mon Dec 31 19:35:20 2007 Tanaka Akira <akr@fsij.org>
-
- * string.c (IS_7BIT): removed.
- (single_byte_optimizable): new function to test optimizationability
- using single byte string.
- (str_strlen): use single_byte_optimizable instead of
- is_ascii_string.
- (str_nth): rename argument: asc -> singlebyte.
- (str_offset): ditto.
- (rb_str_substr): use single_byte_optimizable instead of IS_7BIT.
- (rb_str_index): ditto.
- (rb_str_rindex): ditto.
- (rb_str_splice): ditto.
- (rb_str_justify): ditto.
-
-Mon Dec 31 07:39:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * main.c, goruby.c (RUBY_MAIN_INIT): removed.
-
- * goruby.c (goruby_run_node): run after ruby_init_loadpath() so that
- require works, and protect the call.
-
-Mon Dec 31 06:50:38 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk: not use -I$(srcdir)/lib with $(MINIRUBY) for cross
- compiling.
-
- * configure.in, {win,bcc}32/Makefile.sub (MINIRUBY): -I$(srcdir)/lib
- moved.
-
-Mon Dec 31 06:08:34 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/encoding.h (rb_enc_sprintf, rb_enc_vsprintf): prototyped.
-
- * sprintf.c (rb_enc_sprintf, rb_enc_vsprintf): new functions to format
- arguments with encoding.
-
-Sun Dec 30 23:48:00 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * golf_prelude.rb (String#/): define / as split, as association of
- Array#*.
-
-Sun Dec 30 23:19:06 2007 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * golf_prelude.rb (@@golf_hash): for performance improvement.
-
-Sun Dec 30 22:44:50 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (_valid_time?): I'm not sure to recommend such an
- expression. but anyway it is acceptable now. [ruby-core:14580]
-
-Sun Dec 30 21:54:26 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (program, yycompile0): too early to drop lex_lastline in
- rules.
-
-Sun Dec 30 19:23:23 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bootstraptest/test_knownbug.rb: support DOSISH.
-
-Sun Dec 30 17:43:54 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (Init_Encoding): registered rb_encoding differs from
- ONIG_ENCODINGs.
-
-Sun Dec 30 13:56:15 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (program): clear input strings after all process.
-
- * parse.y (parser_nextc, parser_yylex): should not drop lex_lastline
- while lex_p is valid. [ruby-dev:32896]
-
-Sun Dec 30 10:54:49 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in: rm largefile.h.
-
- * common.mk: clean golf, conf*, preludes, and so on.
-
- * enc/depend: silent and ignore error for rm.
-
- * enc/Makefile.in: should define prefix and exec_prefix.
-
-Sun Dec 30 06:31:11 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * encoding.c (Init_encoding): register Windows-31J and its alias.
- [ruby-dev:32843]
-
- * ruby.c (proc_options): -Ks options means Windows-31J, not Shift_JIS.
-
-Sun Dec 30 06:27:38 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (depend_rules): need to convert `/' to `\' for windows
- native commands.
-
-Sun Dec 30 01:43:56 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/Makefile.in (DLDFLAGS): like as extensions. [ruby-core:14567]
-
-Sat Dec 29 23:48:13 2007 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_fflush): don't retry when wbuf modified by other threads.
-
-Sat Dec 29 22:44:30 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_reg_regsub): returns the given string itself if nothing
- changed.
-
- * string.c (rb_str_sub_bang): keeps code-range as possible.
-
- * string.c (str_gsub): adjusts code-range. [ruby-core:14566]
-
-Sat Dec 29 21:54:37 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (clean, distclean, realclean): should include clean-enc
- and others. [ruby-dev:32887]
-
-Sat Dec 29 13:29:29 2007 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/test_knownbug.rb: add a test reported by
- Kazuhiro NISHIYAMA. [ruby-dev:32819].
- add a test reported by Frederick Cheung. [ruby-core:14556].
-
- * test/ruby/test_m17n.rb (test_gsub): add a test reported by
- Sam Ruby. [ruby-core:14566]
-
-Sat Dec 29 04:46:58 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert_throws):
- throw won't raise NameError nor ThreadError but ArgumentError on 1.9.
- (Test::Unit::Assertions#assert_not_throws): ditto.
-
- * test/testunit/test_assertions.rb: add assertions for throwing some
- objects other than Symbol.
-
-Sat Dec 29 03:10:12 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (io_unread): fix typo.
-
-Sat Dec 29 02:18:45 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (io_unread): adhoc workaround for non-binary mode of some DOSish
- platforms. this is not perfect and safety, but works with most cases.
-
-Fri Dec 28 23:53:18 2007 Tanaka Akira <akr@fsij.org>
-
- * ext/strscan/strscan.c (str_new): new function for allocate an string
- with encoding propagation.
- (extract_range): use str_new.
- (extract_beg_len): ditto.
- (strscan_peek): ditto.
- (strscan_rest): ditto.
-
-Fri Dec 28 20:18:42 2007 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * golf_prelude.rb (Object.say): derived from Perl 5.10.
-
-Fri Dec 28 19:39:34 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * encoding.c (rb_locale_encoding): should check return value from
- rb_locale_charmap().
-
- * ruby.c (locale_encoding): removed.
-
- * ruby.c (process_options): use rb_locale_encoding() instead of
- locale_encoding().
-
- * ext/readline/readline.c (readline_readline): use locale encoding
- instead of input IO's encoding. [ruby-dev:32872]
-
-Fri Dec 28 19:29:07 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/readline/readline.c (readline_readline, readline_s_set_input):
- use mReadline directly because self is not always same.
-
-Fri Dec 28 19:11:28 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_locale_encoding): defined.
-
- * include/ruby/encoding.h (rb_locale_encoding): declared.
-
-Fri Dec 28 18:45:29 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/readline/readline.c (readline_readline): set encoding to result.
-
- * ext/readline/readline.c (readline_s_set_input, Init_readline): save
- input IO to hidden instance variable.
-
-Fri Dec 28 01:55:04 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c (transcode_dispatch): reverted some of the changes
- in r14746.
-
- * transcode.c, enc/trans/single_byte.c: Added conversions to/from
- US-ASCII and ASCII-8BIT (using data tables).
-
- * enc/trans/single_byte.c: Some spacing/ordering changes due to
- automatic data file generation.
-
- * transcode_data.h, transcode.c: Preliminary code for using
- micro-conversion functions.
-
- * test/ruby/test_transcode.rb: Added some tests for US-ASCII and
- ASCII-8BIT conversions.
-
-Fri Dec 28 17:33:44 2007 Tanaka Akira <akr@fsij.org>
-
- * time.c (make_time_t): verify mktime and timegm result.
-
-Fri Dec 28 16:36:33 2007 NARUSE, Yui <naruse@airemix.com>
-
- * lib/resolv.rb (Resolv::DNS#each_address): now returns IPv6 address.
-
-Fri Dec 28 16:10:00 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/dot/dot.rb: Move to lib/rdoc/dot.rb. Fix namespacing.
-
- * lib/rdoc/diagram.rb: Update for 1.9.
-
-Fri Dec 28 15:38:29 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/markup/sample/: Move to sample/rdoc/markup directory.
-
-Fri Dec 28 15:15:12 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/irb/completion.rb: Remove garbage ("X=1").
-
-Fri Dec 28 15:12:05 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc, test/rdoc: Move RDoc tests out of lib/.
-
-Fri Dec 28 15:10:47 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (set_base_encoding, enc_base_encoding): renamed
- based_encoding as base_encoding.
-
-Fri Dec 28 13:57:49 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * golf_prelude.rb (Integer#each): use alias simply.
-
-Fri Dec 28 13:45:21 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * golf_prelude.rb (Object.const_missing): No need to delegate to
- superclass. Just raise a NameError when none matches.
-
-Fri Dec 28 13:18:47 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb, test/rss/test_version.rb: 0.2.2 -> 0.2.3.
-
- * lib/rss/parser.rb, test/rss/test_parser.rb: supported "-" in tag name.
- Reported by Ray Chen. Thanks.
-
-Fri Dec 28 13:07:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (os_obj_of): returns an enumerator if no block given. based on
- a patch from Yugui <yugui AT yugui.sakura.ne.jp>. [ruby-dev:32828]
-
-Fri Dec 28 11:46:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/ytab.sed: skip yydestruct hack unless yymsg exists, for bison
- 1.8 series. [ruby-dev:32825]
-
-Fri Dec 28 11:39:02 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * golf_prelude.rb (Object.quine): need to join because SCRIPT_LINES__[]
- returns an array of lines.
-
-Fri Dec 28 11:16:53 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * golf_prelude.rb (Object.quine): get the script itself.
-
-Fri Dec 28 10:06:54 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * golf_prelude.rb (Object.const_missing): Auto-complete constants.
-
-Fri Dec 28 01:55:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (transcode_dispatch): allows transcoding from/to
- ASCII-8BIT.
-
-Fri Dec 28 01:47:25 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * golf_prelude.rb (Integer): Integer is now enumerable on goruby.
-
-Fri Dec 28 01:27:47 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/rdoc/rdoc.rb (parse_files): don't depend on the default external
- encoding.
-
-Fri Dec 28 00:01:57 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (golf_prelude.c): use MINIRUBY instead of BASERUBY because
- tool/compile_prelude.rb requires rbconfig.rb.
-
-Thu Dec 27 23:56:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb: should not use the libraries under the source directory
- at cross compiling.
-
-Thu Dec 27 23:43:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cygwin/GNUmakefile.in (EXTOBJS): uses ruby.rc always for other than
- rubyw.exe.
-
-Thu Dec 27 22:31:37 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/rubygems/commands/update_command.rb (do_rubygems_update): use
- portable and safely ENV operation. reported in
- <http://slashdot.jp/developers/comments.pl?sid=384937&cid=1273085>.
-
-Thu Dec 27 21:47:04 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * mkconfig.rb (prefix): archdir is "1.9.0", not "1.9". reported in
- <http://slashdot.jp/developers/comments.pl?sid=384937&cid=1273085>.
-
-Thu Dec 27 17:57:30 2007 Tanaka Akira <akr@fsij.org>
-
- * parse.y, transcode_data.h, transcode.c, lib/weakref.rb,
- lib/irb/ruby-lex.rb, lib/irb/lc/error.rb, enc/trans/japanese.c:
- change "illegal" to "invalid" in a context which doesn't against
- a law.
-
-Thu Dec 27 16:37:06 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_s_union): show encodings in error message.
-
-Thu Dec 27 15:25:16 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_codelen): show codepoint in error message.
-
- * include/ruby/encoding.h (rb_enc_codelen): comment it returns
- positive integer.
-
- * string.c (rb_str_concat): rb_enc_codelen doesn't return 0.
-
-Thu Dec 27 15:18:44 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_codelen): error message refined.
-
-Thu Dec 27 15:11:27 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_check): show encodings in error message.
-
-Thu Dec 27 15:02:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_casecmp): fixed using a wrong variable.
- [ruby-list:44402]
-
-Thu Dec 27 14:34:38 2007 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_fflush): checks wbuf modification by other threads.
- not perfect. it need locks.
-
-Thu Dec 27 10:44:03 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c: a patch to support IRIX from Andrew
- Thompson <andrew@hijacked.us> in [ruby-core:14447].
-
-Thu Dec 27 02:25:45 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (create_tmpsrc): retry to create file if Errno::EACCES
- occurs. this is a workaround for mswin32.
-
-Wed Dec 26 22:47:31 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/resolv.rb (Resolv::DNS::Name.==): fix for other is array of
- Resolv::DNS::Label::Str.
-
- * lib/resolv.rb (Resolv::DNS::MessageEncoder#put_label): String#string
- is not defined, so replace to_s.
-
- * lib/resolv.rb (Resolv::IPv6#to_name): ip6.int is obsoleted by
- ip6.arpa.
-
-Wed Dec 26 21:27:02 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (_xmlschema): some improvements.
-
- * lib/date/format.rb (_parse): a new hint compfunc. [experimental]
-
-Wed Dec 26 17:31:08 2007 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_fflush): check closed fptr after rb_write_internal to avoid
- SEGV on MacOS X.
-
-Wed Dec 26 16:10:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (Init_String): defines chars method.
-
-Wed Dec 26 14:38:43 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * instruby.rb: install goruby if exists.
-
-Wed Dec 26 13:55:02 2007 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Cleaned up some code with Ruby 1.9 idioms.
-
-Wed Dec 26 13:29:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (tmpbuf): use rb_str_tmp_new().
-
-Wed Dec 26 00:57:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/json/ext/generator/generator.c (Init_generator): requires
- json/common.rb for GeneratorError, when static linked. a patch from
- Kenta Murata <muraken AT gmail.com> in [ruby-dev:32789].
-
-Tue Dec 25 23:33:55 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * development version 1.9.0 released.
-
-Tue Dec 25 23:25:29 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rexml/node.rb (REXML::Node::indent): should initialize rv
- variable. a patch from Tadayoshi Funaba <tadf AT dotrb.org> in
- [ruby-dev:32783].
-
-Tue Dec 25 23:16:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): encoding option in shebang and RUBYOPT did not
- work, do not store alloca()ed string in a parent scope struct.
-
-Tue Dec 25 22:56:52 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.status): keep this file.
-
-Tue Dec 25 22:55:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (TIMEZONE_VOID): typo.
-
-Tue Dec 25 22:45:10 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns2vm.rb: add encoding option to shebang.
-
-Tue Dec 25 22:13:51 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/pending.rb: add pending issue.
-
-Tue Dec 25 22:12:40 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c: remove Thread.critical(=).
-
-Tue Dec 25 21:44:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot: add version number.
-
-Tue Dec 25 21:32:54 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): fix stack consistency error
- (break is compiled to throw instead of jump insn).
- these problems are reported by Yusuke ENDOH <mame AT tsg.ne.jp>
-
- * bootstraptest/test_knownbug.rb, test_syntax.rb: move fixed test.
-
-Tue Dec 25 21:32:44 2007 Tanaka Akira <akr@fsij.org>
-
- * parse.y (struct parser_params): make parser_ruby_sourcefile common
- field. it is used by node_newnode.
- new field parser_ruby_sourcefile_string for ripper.
- (parser_initialize): initialize parser_ruby_sourcefile in ripper.
- (ripper_initialize): initialize parser_ruby_sourcefile_string.
-
-Tue Dec 25 21:26:09 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (parse.c): depends on tool/ytab.sed.
-
- * tool/ytab.sed: hack for bison 2.1.
-
-Tue Dec 25 20:24:58 2007 Technorama Ltd. <oss-ruby@technorama.net>
-
- * ext/openssl/ossl_ssl.c: Only show a warning if the default
- DH callback is actually used.
-
- * ext/openssl/ossl_rand.c: New method: random_add().
-
-Tue Dec 25 20:24:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/make-snapshot: argument check, and cleanup exported directory.
-
-Tue Dec 25 20:07:13 2007 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * tool/make-snapshot: more portable.
-
-Tue Dec 25 19:01:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.h (rb_enc_mbc_to_codepoint): wrapper for
- ONIGENC_MBC_TO_CODE().
-
- * string.c (rb_str_succ): deal with invalid sequence as binary.
-
-Tue Dec 25 18:40:46 2007 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c: all methods need $SAFE < 1.
-
- vm.c: comment out debug functions.
-
-Tue Dec 25 18:37:42 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (appendline): move RS comparison to rb_io_getline_1().
-
-Tue Dec 25 18:27:51 2007 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_each_line): don't call rb_enc_codepoint with empty
- string.
-
-Tue Dec 25 18:06:04 2007 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_inspect): don't call rb_enc_codepoint with empty
- string. fix '#'.inspect.
-
- * encoding.c (rb_enc_codepoint): raise on empty string.
-
-Tue Dec 25 17:48:28 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * vm.c (rb_frame_method_id_and_class): new function to get the
- method id and class of the current frame.
-
-Tue Dec 25 17:32:04 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/mkmf.rb (create_makefile): Add a missing dependency on the
- target directory for each .rb file. This will hopefully fix
- parallel make (-jN). Tested on FreeBSD.
-
-Tue Dec 25 16:51:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/trans/japanese.c (rb_{from,to}_{SHIFT_JIS,EUC_JP}): inversed
- from_encoding and to_encoding.
-
-Tue Dec 25 16:41:57 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * golf_prelude.rb (h): add new method for all golfers.
-
-Tue Dec 25 16:37:12 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/trans/japanese.c (rb_to_EUC_JP): fixed typo.
-
-Tue Dec 25 16:34:58 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/depend: add dependencies. [ruby-dev:32760]
-
-Tue Dec 25 16:26:48 2007 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/ruby.h, thread.c: rename is_ruby_native_thread() to
- ruby_native_thread_p().
-
- * ext/tk/tcltklib.c: apply it.
-
-Tue Dec 25 16:15:15 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (clean-enc): clean encoding objects.
-
-Tue Dec 25 16:04:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk, goruby.c, golf_prelude.rb: for golfers.
-
- * main.c (main): hook for embedding applications.
-
- * tool/compile_prelude.rb: can change initialize function name.
-
-Tue Dec 25 15:59:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_register): do not use based_encoding to check if
- dummy encoding.
-
-Tue Dec 25 15:55:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_succ): fix for string with non-alphanumeric chars.
-
-Tue Dec 25 15:42:49 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_external_encoding): should return nil for
- pass-through write IO. [ruby-dev:32740]
-
-Tue Dec 25 15:24:57 2007 Tanaka Akira <akr@fsij.org>
-
- * io.c (appendline): initialize rslen to 1 if rsptr is 0.
- rslen is the length of the delimiter.
- if only delim is given, it should be 1.
- [ruby-dev:32746]
-
-Tue Dec 25 15:21:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (transcode_dispatch): fix for multistep transcode.
-
-Tue Dec 25 15:07:51 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * enc/trans/single_byte.c (Init_single_byte): renamed.
-
-Tue Dec 25 15:00:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_yield): when multiple values yielded from #each
- pack them into an array. [ruby-dev:32708]
-
- * enum.c: all method but all?, any?, one? and none? passed packed
- multiple values to the block.
-
- * enum.c (collect_all): should pack all values. [ruby-core:14410]
-
-Tue Dec 25 14:57:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (COMMONOBJS): transcode_data_*.c moved under enc/trans.
-
- * transcode_data.h (rb_transcoding, rb_transcoder): prefixed.
-
- * transcode.c (rb_register_transcoder, rb_declare_transcoder): split
- declaration and registration. [ruby-dev:32704]
-
- * transcode.c (transcode_dispatch): autoload pre-declared transcoder.
-
- * transcode.c (str_transcode): use rb_define_dummy_encoding().
-
- * transcode.c (Init_transcode): initialize transcoder tables.
-
- * enc/trans/single_byte.c, enc/trans/japanese.c: moved from top.
-
-Tue Dec 25 14:20:13 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/mkmf.rb (map_dir): should generate path including $top_srcdir.
-
-Tue Dec 25 14:09:16 2007 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Fixed test failures caused by changes to Ruby.
-
- * test/csv/tc_serialization, test/csv/tc_csv_parsing, test/csv/tc_features:
- Fixed test failures caused by changes to Ruby.
-
-Tue Dec 25 14:11:57 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_encoding_set): missing return type.
-
-Tue Dec 25 14:03:48 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * test/rinda/test_rinda.rb (MockClock#{_forward, forward, sleep}):
- Change default value of n as @reso from nil. If default value is
- nil, n.+ is not defined.
-
-Tue Dec 25 13:54:01 2007 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_io_m17n.rb (test_pipe): fixed.
- [ruby-dev:32743]
-
-Tue Dec 25 13:44:51 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_wait_fd_rw): should check EBADF on select().
-
-Tue Dec 25 13:30:03 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c, thread_pthread.h, thread_win32.c,
- thread_win32.c: make some functions static functions.
- a patch from Tadashi Saito <shiba AT mail2.accsnet.ne.jp>
- in [ruby-core:14407]
-
-Tue Dec 25 13:23:13 2007 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_io_m17n.rb (test_write_noenc): don't mix text and
- binary mode. [ruby-dev:32743]
-
-Tue Dec 25 13:13:09 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * README.EXT.ja, dir.c, eval.c, eval_intern.h, lex.c.src,
- lex.c.blt, keywords, load.c, thread.c: more ANSI'ize.
- a patch from Tadashi Saito <shiba AT mail2.accsnet.ne.jp>
- in [ruby-dev:32725]
-
-Tue Dec 25 13:07:56 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm_core.h, thread.c, cont.c: add RUBY_VM_SET_INTERRUPT(),
- RUBY_VM_SET_TIMER_INTERRUPT(), RUBY_VM_INTERRUPTED().
-
- * thread.c, thread_pthread.c, thread_win32.c: fix to ignore time slice
- event until sleep.
-
- * bootstraptest/test_thread.rb: add a test for time limited join test.
-
-Tue Dec 25 12:42:59 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (Init_VM): remove unused code.
- [ruby-dev:32732]
-
-Tue Dec 25 12:32:32 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c: Moving a static counter from inside register_transcoder()
- and register_functional_transcoder() to outside the functions, renaming
- from n to next_transcoder_position. Fixes 3) in [ruby-dev:32715].
-
-Tue Dec 25 12:22:17 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * sample/from.rb: follow Ruby 1.9 libraries.
-
-Tue Dec 25 12:21:56 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * proc.c (method_inspect): preserve encoding of the method name.
-
-Tue Dec 25 12:07:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (BASERUBY): delayed error until BASERUBY is used.
-
-Tue Dec 25 11:48:35 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sample/README: removed obsoleted files: dbmtest.rb,
- getopts.test, mrshtest.rb, regx.rb.
-
-Tue Dec 25 11:45:34 2007 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb: Import the FasterCSV source as the new CSV class.
-
- * test/csv/*: Added all applicable tests from FasterCSV.
-
-Tue Dec 25 11:33:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (report_bug): uses ruby_description.
-
-Tue Dec 25 11:20:38 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): fix stack consistency error.
- a patch from Yusuke ENDOH <mame AT tsg.ne.jp> [ruby-dev:32720]
-
- * bootstraptest/test_syntax.rb: add 2 tests for above.
-
-Tue Dec 25 11:14:20 2007 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c, vm_core.h: comment out unused fields.
-
-Tue Dec 25 11:02:10 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c: check frame is FINAL when creating env.
- [ruby-core:14395]
-
- * bootstraptest/test_block.rb: add a test for above.
-
-Tue Dec 25 09:12:13 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/: Enable RDoc debugging only with $DEBUG_RDOC.
-
-Tue Dec 25 08:37:43 2007 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/csv.rb, test/csv/test_csv.rb: Removed in preparation for
- FasterCSV code import.
-
-Tue Dec 25 08:27:43 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems.rb: Fix test failures.
-
- * test/rubygems/test_gem.rb: Fix test failure.
-
-Tue Dec 25 06:23:40 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb, test_literal.rb: move fixed test.
-
-Tue Dec 25 06:19:04 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * sample/biorhythm.rb: follow Ruby 1.9 libraries.
-
-Tue Dec 25 06:15:01 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c: add dummy toplevel frame.
-
-Tue Dec 25 05:44:56 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/net/http.rb: Fix uninitialized variable warning.
- [ruby-talk:284582]
-
- * lib/irb/output-method.rb: Remove unused #foo method.
- [ruby-talk:284582]
-
-Tue Dec 25 05:24:12 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile): clear local table if node == 0.
- a patch from Yusuke ENDOH <mame AT tsg.ne.jp> [ruby-dev:32530]
-
- * vm.c: clear VM stack.
-
-Tue Dec 25 04:23:32 2007 Tanaka Akira <akr@fsij.org>
-
- * parse.y (rb_id2str): fill klass of returned string as rb_cString.
- some strings are allocated before rb_cString is created.
- This prevents a "called on terminated object" error by
- ObjectSpace.each_object(Module) {|m| p m.name }.
-
-Tue Dec 25 03:51:55 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): fix stack consistency bug.
- a patch from Yusuke ENDOH <mame AT tsg.ne.jp>
-
-Tue Dec 25 03:19:47 2007 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * tool/make-snapshot: must create configure and lex.c.
-
-Tue Dec 25 03:16:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_s_pipe): now takes up to two arguments. allow its
- external/internal encoding by Encoding objects.
-
- * io.c (rb_io_set_encoding): new method to set encoding of the IO.
-
- * io.c (argf_set_encoding): ditto.
-
-Tue Dec 25 03:08:53 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * pack.c (pack_pack): use NUM2LONG instead of NUM2INT.
-
- * numeric.c (fix_lshift, fix_aref): use SIZEOF_LONG instead of
- SIZEOF_VALUE.
-
- * bignum.c (big2ulong, rb_big_aref): ditto.
-
-Tue Dec 25 02:55:26 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/rexml/element.rb (REXML::Elements#each): yield in each
- should be called with one parameter. [ruby-dev:32708]
-
-Tue Dec 25 02:15:39 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): add a "pop" insn after break
- to fix stack consistency error. [ruby-core:14385]
-
- * bootstraptest/test_syntax.rb: add tests for above.
-
- * bootstraptest/test_knownbug.rb: remove fixed bug.
-
-Tue Dec 25 01:54:36 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * id.c (Init_id): remove several unused symbols. [ruby-core:14362]
-
- * compile.c (iseq_specialized_instruction): do not use
- VM_CALL_SEND_BANG flag any longer.
-
-Tue Dec 25 01:42:41 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/rdoc/rdoc.rb (parse_files): interpret coding cookie.
-
-Tue Dec 25 01:38:04 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * proc.c (method_name): preserve Symbol's encoding.
-
- * numeric.c (fix_id2name): ditto.
-
-Tue Dec 25 01:19:18 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/encoding.h (rb_enc_left_char_head): new utility macro.
-
- * include/ruby/encoding.h (rb_enc_right_char_head): ditto.
-
- * io.c (appendline): does multibyte RS search in the function.
-
- * io.c (prepare_getline_args): RS may be nil.
-
- * io.c (rb_io_getc): should process character based on external
- encoding, when transcoding required.
-
-Tue Dec 25 01:07:57 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/irb/output-method.rb: translate a comment to English to
- avoid mix of EUC-JP comment and UTF-8 Date keyword.
- svn substitute Date keyword with UTF-8 weekday on UTF-8 locale.
-
-Tue Dec 25 00:27:28 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpservley/cgihandler.rb
- (WEBrick::HTTPServlet::CGIHandler#do_GET): m17nized.
-
-Mon Dec 24 23:55:29 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/cgi.rb (CGI::escape): m17nized.
- (CGI::unescape): ditto.
- (CGI::escapeHTML): ditto.
- (CGI::unescapeHTML): ditto.
-
-Mon Dec 24 23:32:24 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * transcode_data_japanese.c (select_iso_2022_mode): '\e' is not valid.
-
-Mon Dec 24 23:13:09 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/rdoc/diagram.rb (RDoc::Diagram#initialize): use fileuitls
- instead of ftools.
-
-Mon Dec 24 23:04:57 2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/ftools.rb: removed obsoleted lib. use fileutils instead (by eban).
-
- * lib/rdoc/rdoc.rb, lib/rdoc/generators/*, lib/rake.rb: let it use
- fileutils instead of ftools.
-
- * lib/shell/command-processor.rb: removed unused references to ftools.
-
- * lib/parsedate.rb: removed. see [ruby-core:12535], [ruby-dev:31969].
-
- * lib/README: updated.
-
-Mon Dec 24 23:01:04 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb (OpenURI::Buffer): use Meta ===. [ruby-core:14295]
-
-Mon Dec 24 22:46:42 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * transcode.c: register_functional_transcoder() added.
- (init_transcoder_table(: register ISO-2022-JP.
- (str_transcode): add preprocessor and postprocessor.
-
- * transcode_data_japanese.c: add ISO-2022-JP support.
-
- * transcode_data.h: moved transcoder and transcoding definition from
- transcode.c.
-
-Mon Dec 24 20:29:28 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/io/nonblock/test_flush.rb: fix test for 1.9.
-
-Mon Dec 24 20:23:44 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/rinda/test_rinda.rb: revert last commit because this test seems
- to have timing problem to halt all tests.
-
-Mon Dec 24 20:18:52 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/rinda/test_rinda.rb: enable rinda test.
-
-Mon Dec 24 20:16:54 2007 Koichi Sasada <ko1@atdot.net>
-
- * instruby.rb: fix rdoc install dir.
-
-Mon Dec 24 18:37:32 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_prepare_re): show regexp encoding in the error message.
-
-Mon Dec 24 18:23:32 2007 Tanaka Akira <akr@fsij.org>
-
- * eval.c (rb_exc_raise): ANSI style.
- (rb_exc_fatal): ditto.
- (rb_raise_jump): ditto.
- (rb_jump_tag): ditto.
- (rb_block_given_p): ditto.
-
- * variable.c (original_module): ditto.
-
-Mon Dec 24 18:05:09 2007 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (Init_ISeq): disable ISeq.load() because there is no verifier.
-
- * iseq.c, proc.c: add ISeq.disasm(method).
-
-Mon Dec 24 18:06:03 2007 Tanaka Akira <akr@fsij.org>
-
- * eval_method.c (Init_eval_method): extracted from Init_eval
- for rdoc to find rb_mod_remove_method, rb_mod_undef_method and
- rb_mod_alias_method.
-
- * eval.c (Init_eval): call Init_eval_method.
-
-Mon Dec 24 17:59:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (load_lock): reverted.
-
- * thread.c (rb_barrier_wait): check for recursive wait.
-
-Mon Dec 24 17:50:54 2007 Tanaka Akira <akr@fsij.org>
-
- * eval.c (function_call_may_return_twice_jmp_buf): removed.
- (function_call_may_return_twice_false): removed.
- [ruby-core:14335]
-
-Mon Dec 24 17:40:57 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (node_name.inc, miniprelude.c, prelude.c): nmake cannot
- handle target vpath in other than implicit rules.
-
-Mon Dec 24 17:20:34 2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/{mailread.rb,getopts.rb,parsearg.rb}: removed.
- see [ruby-core:12535], [ruby-dev:31969].
-
-Mon Dec 24 17:12:57 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h, random.c, array.c:
- change exported name.
- genrand_int32 -> rb_genrand_int32.
- genrand_real -> rb_genrand_real.
- [ruby-core:14335]
-
-Mon Dec 24 17:06:37 2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * {lib,test}/{soap,wsdl,xsd}: removed soap4r along to the discussion
- at ruby-core and ruby-dev. see [ruby-core:12535], [ruby-dev:31969].
-
-Mon Dec 24 17:06:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * load.c (rb_feature_p): returns loading path name too.
-
- * load.c (search_required): returns path too if feature is being
- loaded. [ruby-dev:32048] [TODO: refactoring]
-
-Mon Dec 24 16:29:12 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * sample/openssl: reviewed and remove dependency on getopts.rb.
-
-Mon Dec 24 16:18:57 2007 Koichi Sasada <ko1@atdot.net>
-
- * mkconfig.rb: add teeny to CONFIG['ruby_version'].
-
-Mon Dec 24 15:55:50 2007 Koichi Sasada <ko1@atdot.net>
-
- * tool/compile.rb, getrev.rb, runruby.rb: remove unused tools.
-
-Mon Dec 24 15:42:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, cygwin/GNUmakefile.in, */Makefile.sub,
- djgpp/config.hin.: version dependent directory names now contain
- teeny.
-
-Mon Dec 24 15:29:13 2007 Tanaka Akira <akr@fsij.org>
-
- * tool/serb.rb: removed.
-
-Mon Dec 24 13:55:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (rb_proc_new), vm.c (invoke_block): removed u3.state magic.
- [ruby-core:14310]
-
- * test/ruby/test_symbol.rb (test_to_proc): a test from Frederick
- Cheung <frederick.cheung AT gmail.com>.
-
-Mon Dec 24 13:43:36 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_atfork): should not leave living_threads
- referring freed table while allocating new table.
-
-Mon Dec 24 12:49:54 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, configure.in, lib/mkmf.rb, */Makefile.sub: specify
- compiled output file name explicitly.
-
- * enc/Makefile.in, enc/depend: now makes compiler to put generated
- files under directories corresponding to the each source.
- enc/trans supported.
-
- * enc/make_encmake.rb: evaluates depend file before Makefile.in so
- that the former can influence to CONFIG.
-
-Mon Dec 24 12:35:03 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win{32,ce}/Makefile.sub (MFLAGS): defaulted to -l.
-
-Mon Dec 24 12:08:10 2007 Eric Hodel <drbrain@segment7.net>
-
- * /, ext/: Add svn:ignore for OS X Xcode 3's conftest.dSYM
- directories.
-
-Mon Dec 24 11:56:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk: should not pass MAKEFLAGS to recursive make.
- + normal make: MFLAGS are set and command line options and macros
- are all passed silently.
- + GNU make: ditto, and all options and macros in MAKEFLAGS are in
- effect.
- + nmake: MFLAGS is not set and MAKEFLAGS has only options without
- hyphen, no macros exist in any variables.
- + Borland make: ditto, and command line macros cannot override
- macros in makefile, so passing them is vain.
-
- * {bcc32,win{32,ce}}/Makefile.sub (SET_MAKE): set MFLAGS which is not
- set by default, to get rid of chaotic situation of MFLAGS/MAKEFLAGS.
-
-Mon Dec 24 11:32:44 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_comparable): fixed to keep transitivity.
- [ruby-dev:32693]
-
-Mon Dec 24 11:20:31 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/ri/ri_options.rb: Fix display of GEMDIRS, make command
- examples match ri's name.
-
- * lib/rdoc/ri/ri_paths.rb: Only allow latest ri dirs in ri output.
-
-Mon Dec 24 10:49:04 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/uri/mailto.rb, lib/uri/common.rb: Fix Regexp warnings. Patch
- #16524 from Kornelius Kalnbach, [ruby-core:14302].
-
-Mon Dec 24 10:37:38 2007 Eric Hodel <drbrain@segment7.net>
-
- * gem_prelude.rb: Remove methods from Gem, not QuickLoader, to fix
- warnings.
-
-Mon Dec 24 09:45:45 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c, transcode_data_one_byte.c, transcode_data_japanese.c:
- added rb_ prefix to external data symbols.
-
-Mon Dec 24 05:32:22 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_inject): updated documentation. a patch from Keita
- Yamaguchi <keita.yamaguchi AT gmail.com> in [ruby-dev:32686].
-
- * README.EXT: updated. a patch from Tadashi Saito
- <shiba AT mail2.accsnet.ne.jp> in [ruby-core:14328].
-
- * array.c (rb_ary_at): updated documentation. a patch from Tadashi
- Saito <shiba AT mail2.accsnet.ne.jp> in [ruby-core:14330].
-
-Mon Dec 24 05:13:04 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (tr_trans): should associate new encoding if modified.
-
-Mon Dec 24 04:04:12 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * test/net/http/test_https.rb: should rescue LoadError.
-
-Mon Dec 24 03:57:28 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c, vm.h: fix to support sparc machine.
- a patch from Yusuke ENDOH <mame AT tsg.ne.jp>
-
-Mon Dec 24 03:35:19 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: remove additional "-".
-
-Mon Dec 24 02:59:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_check_readable): should not fill fptr->enc always.
- read-write IO (e.g. socket) does not work. [ruby-dev:32685]
-
- * io.c (io_read_encoding): retrieve reading encoding.
-
- * io.c (prepare_getline_args): convert RS to external encoding.
-
- * string.c (str_new_shared): was setting embedding flag of wrong
- string object. [ruby-dev:32685]
-
- * io.c (io_enc_str): should preserve default_external encoding.
-
- * io.c (appendline): should do multibyte aware RS search.
-
-Mon Dec 24 02:06:35 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_open): documentation update.
-
- * io.c (rb_io_s_pipe): ditto.
-
- * io.c (io_fwrite): wrong encoding destination.
-
- * io.c (rb_io_external_encoding): should return the encoding of
- the file reading.
-
- * io.c (rb_io_internal_encoding): should return the encoding of
- read string.
-
-Mon Dec 24 01:46:43 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_s_pipe): allow specifying read-side encoding.
-
- * io.c (io_enc_str): wrong encoding destination.
-
-Mon Dec 24 01:03:17 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_comparable): comparison including broken
- coderange strings do not consider encoding.
-
-Mon Dec 24 00:57:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (open_key_args): IO direct methods (foreach, readlines,
- read) now takes keyword argument: encoding, mode, open_args.
-
-Mon Dec 24 00:52:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_s_read): encoding argument reverted.
-
- * io.c (mode_enc): independent function to share code.
-
- * io.c (rb_io_internal_encoding): new method.
-
-Mon Dec 24 00:47:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_beginendblock.rb (TestBeginEndBlock::test_endblockwarn):
- rename endblockwarn.rb to endblockwarn_rb to avoid unnecessary
- warning in make test.
-
-Sun Dec 23 23:03:13 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_codepoint): implemented to raise invalid
- encoding.
-
- * include/ruby/encoding.h (rb_enc_codepoint): macro is replaced as a
- declaration.
-
-Sun Dec 23 19:45:22 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/time.rb (Time.httpdate): fix 2 digits year for 20xx.
- reported by Tadayoshi Funaba. [ruby-dev:32687]
-
-Sun Dec 23 19:33:42 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/open-uri.rb: Fix method redefined warning. [ruby-core:14304]
-
-Sun Dec 23 18:31:49 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf.c (rb_nkf_enc_get): use rb_define_dummy_encoding.
-
- * ext/nkf/nkf.c (Init_nkf): use rb_nkf_enc_get("ASCII").
-
- * ext/nkf/nkf-utf8/nkf.c: Update 1.161.
-
- * ext/nkf/nkf-utf9/config.h: default output encoding is now UTF-8.
-
- * ext/nkf/lib/kconv.rb (Kconv.kconv): replace Encoding#name by
- Encoding#to_s.
-
-Sun Dec 23 18:02:52 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/gem_open_uri.rb: Fix version check.
-
-Sun Dec 23 17:24:48 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_init): add eucJP as an alias of EUC-JP.
-
-Sun Dec 23 17:00:23 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/time.rb (Time.httpdate): use Time.utc for
- "day-of-week, dd-mon-yy HH::MM:SS GMT" format.
-
-Sun Dec 23 16:12:40 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Fix 1.9 warnings.
-
-Sun Dec 23 15:28:37 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems, test/rubygems: Fix new 1.9 warnings.
-
-Sun Dec 23 14:43:10 2007 Eric Hodel <drbrain@segment7.net>
-
- * gem_prelude.rb: Use require to load rubygems.rb so the correct path
- is in $LOADED_FEATURES on RubyGems upgrade.
-
-Sun Dec 23 11:26:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (sym_call): use exact argument array interface.
- [ruby-core:14279]
-
-Sun Dec 23 11:01:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_binmode_m): removed C99ism.
-
-Sun Dec 23 10:23:23 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode_data_one_byte.c: Better (and more honest) optimization.
-
- * transcode_data_japanese.c: First optimization step.
-
-Sun Dec 23 09:07:02 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h, encoding.c, re.c, io.c, parse.y, numeric.c,
- ruby.c, transcode.c, ext/nkf/nkf.c: rename rb_ascii_encoding to
- rb_ascii8bit_encoding. rb_ascii_encoding is ambiguous with
- ASCII-8BIT and US-ASCII.
-
-Sun Dec 23 03:35:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * version.h: use patchlevel if revision is not set.
-
- * {bcc32,win{32,ce}}/setup.mak (-version-): skip including revision.h.
-
- * common.mk (srcs): new target to generated sources.
-
- * common.mk (encs, ext/ripper/ripper.c): MAKEFLAGS needs -.
-
- * enc/depend, enc/make_encmake.rb: use erb.
-
-Sun Dec 23 01:56:18 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_mode_enc): do not set encoding unless explicitly
- specified.
-
- * io.c (rb_io_check_readable): fill fptr->enc by default_external
- if it's empty.
-
- * io.c (io_enc_str): fptr->enc is always set for reading IO (by
- rb_io_check_readable(fptr)).
-
-Sun Dec 23 01:18:06 2007 David Flanagan <david@davidflanagan.com>
-
- * io.c, io.h: temporary patch to partially implement
- transcode-on-read and transcode-on-write
-
-Sun Dec 23 00:48:05 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/net/imap/test_imap.rb: added tests for SSL.
-
-Sat Dec 22 21:10:53 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/syck/rubyext.c (syck_genericresolver_node_import): should
- not set instance variable "@kind" before initializing it.
- [ruby-dev:32677]
-
-Sat Dec 22 19:52:23 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_objectspace.rb: fix condition.
-
-Sat Dec 22 19:17:10 2007 Koichi Sasada <ko1@atdot.net>
-
- * ext/probeprofiler/: removed.
-
-Sat Dec 22 19:14:38 2007 Koichi Sasada <ko1@atdot.net>
-
- * process.c (rb_f_fork): Unsupport Kernel.fork() on NetBSD.
-
-Sat Dec 22 18:20:13 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (version.o): add dependency. [ruby-dev:32680]
-
-Sat Dec 22 17:45:11 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf.c (Init_nkf): use rb_ascii_encoding() for
- rb_nkf_enc_get("US-ASCII").
- * if use rb_nkf_enc_get("US-ASCII"), ruby will crash - this is bug?
-
-Sat Dec 22 17:39:03 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb ($extmk): fixed broken condition.
-
-Sat Dec 22 17:35:59 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8.c: Update nkf.c rev:1.157.
-
- * ext/nkf/nkf.c (rb_nkf_enc_get): replicate proper based encoding.
-
- * ext/nkf/kconv.c (Kconv#kconv, to*): use self.encoding as from_enc
- when from_enc isn't given.
-
-Sat Dec 22 17:06:50 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/net/ssl.rb (OpenSSL::SSL::SSLContext.build): removed.
-
- * ext/openssl/lib/net/ssl.rb (OpenSSL::SSL::SSLContext#set_params):
- new method to set suitable SSL parameters.
-
- * lib/net/pop.rb, lib/net/http.rb, lib/net/imap.rb,
- test/openssl/test_ssl.rb: follow above change.
-
- * test/net/http/test_https.rb: refine error case.
-
-Sat Dec 22 16:58:49 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (encode_utf7): accept UTF-8 strings.
-
- * lib/net/imap.rb (decode_utf7): return UTF-8 strings.
-
-Sat Dec 22 15:56:36 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * transcode_data_japanese: typo.
-
-Sat Dec 22 15:54:54 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * ChangeLog: Information for last patch got lost, fixed
-
- * test/ruby/test_transcode.rb: Added simple tests for
- EUC-JP and Shift_JIS and tests for ASCII-only range
-
-Sat Dec 22 15:45:45 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode_data_one_byte: slightly optimized
-
- * transcode_data_japanese: new data file for EUC-JP and SHIFT_JIS
- (not yet optimized; tests to follow; data from
- http://nkf.sourceforge.jp/ucm/{SJIS|eucJP}-nkf.ucm)
-
- * common.mk, transcode.c: Adjusted for transcode_data_japanese
-
-Sat Dec 22 15:30:13 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * */Makefile.sub (MFLAGS): define unless defined.
-
-Sat Dec 22 15:17:40 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb ($extmk): set true only when under ext/ or tool/.
-
-Sat Dec 22 15:14:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (encs, ext/ripper/ripper.c): needs MFLAGS.
-
- * configure.in (STRINGIZE): stringizing macro.
-
- * include/ruby/defines.h (STRINGIZE): fallback.
-
- * tool/make-snapshot: new file.
-
- * version.c (ruby_description, ruby_copyright): string constants for
- -v option.
-
-Sat Dec 22 15:03:37 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (initialize): fixed documentation.
-
-Sat Dec 22 15:01:16 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/pop.rb (enable_ssl): use OpenSSL::SSL::SSLContext.build
- instead of SSLContext.new (default verify mode is now
- OpenSSL::SSL::VERIFY_PEER).
-
-Sat Dec 22 14:45:21 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: shouldn't freeze nil. [ruby-dev:32677]
-
-Sat Dec 22 14:27:27 2007 Tanaka Akira <akr@fsij.org>
-
- * regenc.c (onigenc_ascii_is_code_ctype): moved from enc/ascii.c.
-
- * regenc.h (onigenc_ascii_is_code_ctype): declared.
-
- * enc/ascii.c: use onigenc_ascii_is_code_ctype.
-
- * enc/us_ascii.c: new file for US-ASCII.
-
-Sat Dec 22 14:30:34 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (reg_named_capture_assign_iter): allows non-ascii names and
- get rid of reserved word IDs.
-
-Sat Dec 22 14:18:45 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_float.rb, test_sprintf.rb: fix test place.
-
-Sat Dec 22 14:17:02 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_objectspace.rb: skip frozen string.
-
-Sat Dec 22 14:02:58 2007 Koichi Sasada <ko1@atdot.net>
-
- * array.c (rb_ary_permutation): add volatile to avoid GC problem.
-
-Sat Dec 22 11:47:42 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (rb_obj_instance_eval): use class of immediate objects.
-
- * test/ruby/test_eval.rb: fix a test.
-
-Sat Dec 22 11:37:06 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * encoding.c (rb_locale_charmap): win32 support.
-
-Sat Dec 22 11:31:14 2007 Eric Hodel <drbrain@segment7.net>
-
- * gem_prelude.rb: Place bin dir before lib dir so gem bin stubs work.
-
-Sat Dec 22 11:05:44 2007 Jim Weirich <jim@tardis.local>
-
- * lib/rake.rb (Rake): Added Rake and related libraries to the
- source code base.
-
-Sat Dec 22 10:30:45 2007 Koichi Sasada <ko1@atdot.net>
-
- * tool/insns2vm.rb: moved from lib/vm/instruction.rb.
-
-Sat Dec 22 10:25:44 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (reg_named_capture_assign_iter): captured name should
- not be reserved word. a patch from Keita Yamaguchi
- <keita.yamaguchi AT gmail.com> in [ruby-dev:32675].
-
- * parse.y (reg_named_capture_assign_iter): just ignore the
- captures that do not have valid local variable name.
-
-Sat Dec 22 10:19:08 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_method_name): now __method__ and __callee__ are
- aliases. [ruby-core:14244]
-
-Sat Dec 22 08:29:56 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_buf_append): improvement for non-broken coded
- strings.
-
-Sat Dec 22 06:30:04 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_fork.rb: skip if fork is not unsupported.
-
- * bootstraptest/test_io.rb: skip if require failed.
-
-Sat Dec 22 06:09:12 2007 David Flanagan <david@davidflanagan.com>
-
- * io.c: fix typo in rdoc comment
-
-Sat Dec 22 05:09:43 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (parser_str_new, rb_intern3): rb_default_encoding() renamed.
-
- * ext/nkf/nkf.c (rb_nkf_putchar): ditto.
-
-Sat Dec 22 03:54:18 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (rb_ascii_encoding): renamed from previous
- rb_default_encoding().
-
-Sat Dec 22 02:49:02 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (command): block from cmd_brace_block was ignored.
- [ruby-dev:32644]
-
- * re.c (rb_reg_prepare_re): stop ENCODING_NONE warning if the
- encoding of the str is ASCII-8BIT.
-
-Sat Dec 22 01:52:11 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_ungetc): avoid buffer relocation, which might cause
- serious problem under concurrent situation.
-
-Sat Dec 22 01:35:41 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (ARG_ENCODING_NONE): defined for /.../n option.
- (REG_ENCODING_NONE): ditto.
- (rb_char_to_option_kcode): return ARG_ENCODING_NONE for n.
- (rb_reg_prepare_re): warn /ascii/n =~ "non-ascii".
- (rb_reg_initialize): set REG_ENCODING_NONE from ARG_ENCODING_NONE.
-
-Sat Dec 22 01:23:10 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/json/test_json_addition.rb (test_core): do not use Time.now
- because JSON can't hold nsec.
-
-Sat Dec 22 01:10:30 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/tk/sample/tkextlib/vu/canvSticker2.rb,
- ext/tk/sample/demos-{en,jp}/bind.rb: fix typo. [ruby-dev:32668]
-
-Sat Dec 22 00:56:43 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sample/test.rb (valid_syntax): force_encoding input script.
-
-Fri Dec 21 23:48:38 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (depend_rules): suffixes list broken. fixed.
-
-Fri Dec 21 20:18:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_mul0): remove unused variable.
-
- * bignum.c (bigdivrem): ditto.
-
-Fri Dec 21 20:13:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (rb_catch_obj, rb_throw_obj): prototyped.
-
- * include/ruby/intern.h (rb_fiber_alive_p): prototyped.
-
-Fri Dec 21 20:09:18 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_succ): retry increasing until valid char is found.
-
-Fri Dec 21 20:00:02 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_replicate): now creates first class encoding.
-
- * encoding.c (rb_define_dummy_encoding): always based on the default
- encoding.
-
- * encoding.c (rb_enc_dummy_p): check if dummy.
-
- * encoding.c (enc_inspect): shows if dummy.
-
- * encoding.c (Init_Encoding): added dummy? method
-
- * include/ruby/encoding.h (ENCODING_INLINE_MAX): increased.
-
-Fri Dec 21 18:40:54 2007 Koichi Sasada <ko1@atdot.net>
-
- * io.c: write() should be in blocking region.
-
- * bootstraptest/test_io.rb, test_knownbug.rb: move a fixed test.
-
-Fri Dec 21 17:56:30 2007 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: provisional support on Ruby-VM.
-
- * ext/tk/MANUAL_tcltklib.eng, ext/tk/MANUAL_tcltklib.eucj:
- modify document about new functions.
-
- * ext/tk/lib/tk.rb, ext/tk/lib/tk/labelframe.rb,
- ext/tk/lib/tk/frame.rb, ext/tk/lib/tk/toplevel.rb,
- ext/tk/lib/tk/scrollbar.rb, ext/tk/lib/tk/message.rb,
- ext/tk/lib/tk/listbox.rb, ext/tk/lib/tk/text.rb,
- ext/tk/lib/tk/scale.rb, ext/tk/lib/tk/entry.rb,
- ext/tk/lib/tk/ttk_selector.rb, ext/tk/lib/tk/menu.rb,
- ext/tk/lib/tk/label.rb, ext/tk/lib/tk/spinbox.rb,
- ext/tk/lib/tk/textmark.rb, ext/tk/lib/tk/winpkg.rb,
- ext/tk/lib/tk/checkbutton.rb, ext/tk/lib/tk/panedwindow.rb,
- ext/tk/lib/tk/texttag.rb, ext/tk/lib/tk/root.rb,
- ext/tk/lib/tk/textimage.rb, ext/tk/lib/tk/radiobutton.rb,
- ext/tk/lib/tk/package.rb, ext/tk/lib/tk/macpkg.rb,
- ext/tk/lib/tk/composite.rb, ext/tk/lib/tk/autoload.rb,
- ext/tk/lib/tk/canvas.rb, ext/tk/lib/tk/button.rb,
- ext/tk/lib/tk/textwindow.rb,
- ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb,
- ext/tk/lib/tkextlib/tile/style.rb,
- ext/tk/lib/tkextlib/tile/tscrollbar.rb,
- ext/tk/lib/tkextlib/tile/tpaned.rb, ext/tk/lib/tkextlib/tile.rb,
- ext/tk/extconf.rb: support Tcl/Tk8.5 (partial, not complete).
-
- * ext/tk/sample/demos-jp/widget,
- ext/tk/sample/demos-jp/pendulum.rb,
- ext/tk/sample/demos-jp/bind.rb,
- ext/tk/sample/tkextlib/vu/canvSticker2.rb,
- ext/tk/sample/demos-en/pendulum.rb,
- ext/tk/sample/demos-en/bind.rb: remove $KCODE and minor bug fix.
-
-Fri Dec 21 17:49:06 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (rb_str_transcode_bang): returns self if no conversion.
- [ruby-dev:32662]
-
-Fri Dec 21 17:44:47 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems*: Update to RubyGems 1.0.1, r1581
-
-Fri Dec 21 17:32:49 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/pending.rb: renamed from featurebug.rb.
- This file contains bugs which is known but will not be
- fixed in days.
-
-Fri Dec 21 17:31:22 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * debug.c (dummy_gdb_enums.various): added ENCODING and CODERANGE
- constants.
-
- * .gdbinit: use enum constants.
-
-Fri Dec 21 17:28:17 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/featurebug.rb: added.
-
- * bootstraptest/test_knownbug.rb: move a feature bug.
-
-Fri Dec 21 17:25:22 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_atfork): fix to mark thread object.
- [ruby-dev:32404]
-
- * bootstraptest/test_knownbug.rb, test_fork.rb: move a fixed test.
-
-Fri Dec 21 17:07:13 2007 Koichi Sasada <ko1@atdot.net>
-
- * gc.h: extern variable should not be initialized.
-
- * thread_pthread.c: add a parameter.
-
-Fri Dec 21 16:50:43 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (Init_Encoding): use enc_name as to_s.
- (enc_inspect): renamed from enc_to_s. add "#" at beginning.
-
-Fri Dec 21 16:37:43 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/config.h (MIME_DECODE_DEFAULT, X0201_DEFAULT):
- defined as FALSE. nkf and kconv don't decode MIME encoded string
- and don't convert JIS X 0201 Katakana.
-
- * test/nkf/test_kconv.rb: fix tests.
-
-Fri Dec 21 16:33:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enumerator.c (enumerator_iter_i): adjusted for rb_block_call_func.
-
- * include/ruby/ruby.h (rb_block_call_func): function to be called back
- as block.
-
-Fri Dec 21 16:25:25 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * common.mk, transcode_data_iso_8859.c: renamed to
- transcode_data_one_byte.c.
-
-Fri Dec 21 16:10:30 2007 Shigeo Kobayashi <shigeo@tinyforest.jp>
-
- * ext/bigdecimal/bigdecimal.c (VpMidRound): Round method bug
- pointed by Ryan Platte fixed(Patch to the patch from "NATORI
- Shin"). [ruby-talk:273360]
-
-Fri Dec 21 16:06:13 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (append_utf8): use rb_utf8_encoding() instead of
- rb_enc_find("utf-8").
-
-Fri Dec 21 15:59:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_init): use enc_register_at() directly.
-
- * encoding.c (rb_utf8_encoding): returns utf-8 encoding.
-
- * include/ruby/encoding.h (rb_utf8_encoding): prototyped.
-
- * parse.y (UTF8_ENC): uses rb_utf8_encoding().
-
-Fri Dec 21 15:31:59 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_s_read): allow specifying encoding explicitly.
-
- * io.c (rb_io_binmode): specifies encoding to ASCII-8BIT (binary).
-
- * io.c (rb_io_s_read): IO should be in binary mode when offset is
- specified.
-
- * encoding.c (rb_to_encoding): returns default encoding if no
- corresponding encoding found.
-
-Fri Dec 21 15:24:22 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (initialize): accept service name. changed
- the default value of the old style +verify+ argument to true.
-
-Fri Dec 21 15:15:44 2007 Tanaka Akira <akr@fsij.org>
-
- * gc.c (rb_garbage_collect): new function for debugging.
-
-Fri Dec 21 15:16:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_to_encoding_index): should return error instead of
- exception even if type is incorrect.
-
-Fri Dec 21 14:58:27 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c (enumerator_init_copy): prohibit cloning of
- generators since Fibers cannot be copied.
-
- * enumerator.c (enumerator_init_copy): typo fixed.
-
-Fri Dec 21 14:46:07 2007 Tanaka Akira <akr@fsij.org>
-
- * io.c (Init_IO): define IO::BINARY even if O_BINARY is not exist.
-
-Fri Dec 21 14:01:14 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_system.rb (TestSystem::valid_syntax): apply
- ASCII-8BIT encoding explicitly.
-
- * re.c (rb_reg_prepare_re): add encoding name in the message.
-
-Fri Dec 21 13:54:05 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c: change "character encodings differ" error messages.
-
-Fri Dec 21 13:46:58 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_register): set encoding constant.
-
- * encoding.c (rb_enc_find_index): replace non-alphanumeric chars with
- underscores, so that initialize function can be called.
-
- * encoding.c (rb_enc_find_index): extension libraries have lower case
- names conventionally.
-
- * ruby.c (proc_options, process_options): finds encoding after
- load_path is initialized.
-
-Fri Dec 21 13:10:57 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_external_encoding): new method.
-
- * encoding.c (rb_enc_from_encoding): returns Qnil for NULL
- encoding.
-
- * io.c (rb_io_external_encoding): should fill delayed
- initialization for STDIN.
-
-Fri Dec 21 13:09:11 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_locale_charmap): return nil if no locale information.
-
-Fri Dec 21 12:55:39 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/runit, lib/rubyunit.rb, test/testunit/runit: removed.
-
-Fri Dec 21 12:45:49 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_chomp_bang): avoid unnecessary loop using
- ONIGENC_LEFT_ADJUST_CHAR_HEAD().
-
-Fri Dec 21 12:32:08 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (Init_File): File.exists? revived.
-
- * dir.c (Init_Dir): Dir.exists? again.
-
-Fri Dec 21 12:26:36 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c: remove "illegal".
-
-Fri Dec 21 12:22:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * keywords, parse.y (__ENCODING__): represent script encoding.
-
-Fri Dec 21 12:16:50 2007 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_is_ascii_only_p): new method ascii_only?.
-
-Fri Dec 21 12:11:57 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_mode_enc): set default external encoding if no
- encoding specified explicitly.
-
-Fri Dec 21 12:00:34 2007 Tanaka Akira <akr@fsij.org>
-
- * configure.in: check langinfo.h and locale.h.
-
- * encoding.c: use langinfo.h only if available.
-
- * main.c: use locale.h only if available.
-
-Fri Dec 21 11:47:56 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c: include locale.h
- (rb_locale_charmap): new method Encoding.locale_charmap for
- nl_langinfo(CODESET).
-
- * include/ruby/encoding.h (rb_locale_charmap): declared.
-
- * main.c (main): call setlocale with LC_CTYPE.
-
- * ruby.c (locale_encoding): use rb_locale_charmap.
-
-Fri Dec 21 11:35:10 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c, vm_dump.c: fix typo. Reported by Yuki Mitsui.
-
-Fri Dec 21 11:28:00 2007 Tanaka Akira <akr@fsij.org>
-
- * regerror.c, string.c, io.c, lib/getoptlong.rb, lib/net/imap.rb,
- compile.c, sprintf.c, parse.y, ext/win32ole/win32ole.c,
- ext/tk/sample/demos-en/entry3.rb, ext/tk/lib/tcltk.rb,
- ext/openssl/ossl_bn.c, numeric.c, vm.c,
- benchmark/bm_so_meteor_contest.rb, bignum.c, ruby.c: don't "illegal"
- for non law violation context.
-
-Fri Dec 21 11:23:24 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (enc.mk): depends on $(RBCONFIG) instead of rbconfig.rb.
-
- * encoding.c (Init_Encoding): ISO-8859-1 is no longer a replica.
-
- * regenc.h (OnigEncodingDefine): names of extension and encoding can
- differ.
-
- * enc/Makefile.in: always shared.
-
- * enc/depend (deffile): should not upcase.
-
- * enc/{ascii,euc_jp,sjis,utf8,iso_8859_{1..16}}.c: fix for Init.
-
-Fri Dec 21 09:26:48 2007 Tanaka Akira <akr@fsij.org>
-
- * tool/compile_prelude.rb: use erb.
-
-Fri Dec 21 08:07:35 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c (enumerator_next): should call next_init() if fiber
- is dead already. [ruby-dev:32459]
-
-Fri Dec 21 01:21:49 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLContext.build):
- enable CRL checking by default.
-
-Fri Dec 21 01:20:56 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/net/http.rb (Net::HTTP#connect): use
- OpenSSL::SSL::SSLContext.build instead of SSLContext.new (default
- verify mode is now OpenSSL::SSL::VERIFY_PEER).
-
- * lib/net/https.rb: SSL parameters are defined by attr_accessor.
-
- * test/net/http/test_https.rb: add test for HTTPS features.
-
-Fri Dec 21 01:11:37 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * io.c (select_internal): should return original value.
-
-Fri Dec 21 00:26:39 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (tr_trans): wrong encoding check for tree strings.
-
- * test/ruby/test_m17n.rb (TestM17N::test_tr_s): "invalid mbstring
- sequence" is not an error to be tested.
-
- * test/ruby/test_m17n.rb (TestM17N::test_tr): ditto.
-
-Thu Dec 20 19:29:07 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (initialize): the second argument is an option
- hash now. use SSLContext.build to specify SSL parameters.
-
-Thu Dec 20 19:11:56 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (native_thread_apply_priority): check
- _POSIX_PRIORITY_SCHEDULING for OpenBSD.
-
-Thu Dec 20 18:33:54 2007 Koichi Sasada <ko1@atdot.net>
-
- * configure.in: add libthr for FreeBSD.
-
-Thu Dec 20 18:17:14 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk, *.ci: renamed to *.c.
-
- * eval_load.c: renamed to load.c.
-
-Thu Dec 20 17:36:01 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems*: Import RubyGems 1.0.0, r1575.
-
-Thu Dec 20 17:18:38 2007 Koichi Sasada <ko1@atdot.net>
-
- * proc.c: support Proc#binding.
-
- * sample/test.rb: add a test.
-
-Thu Dec 20 17:15:15 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * pack.c: Slight change to documentation ('character' ->
- 'byte (C char)'). [ruby-core:13126], see also [ruby-core:13998].
-
-Thu Dec 20 17:07:54 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (enc.mk): depends on rbconfig.rb.
-
- * regenc.h (OnigEncodingDefine): external encoding definition macro.
-
- * enc/Makefile.in: fix for linking.
-
- * enc/depend, enc/make_encmake.rb: fix for Windows.
-
- * enc/{ascii,euc_jp,sjis,utf8,iso_8859_{1..16}}.c: renamed.
-
-Thu Dec 20 16:42:55 2007 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (find_line_no): return 0 if not found.
-
-Thu Dec 20 16:04:17 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci, vm.c, vm_core.h: change interface of
- vm_invoke_block() to specify block ptr. [ruby-talk:266422]
-
- * cont.c, eval_jump.ci, insns.def, proc.c, signal.c, thread.c:
- apply above change.
-
- * bootstraptest/test_knownbug.rb: move fixed bug.
-
- * bootstraptest/test_block.rb: ditto. and add a test.
-
-Thu Dec 20 15:47:13 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/iso_8859_{1..16}.c: renamed.
-
-Thu Dec 20 09:59:27 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_expandarray): fix sp increase place.
- a patch from Yusuke ENDOH <mame AT tsg.ne.jp> in [ruby-dev:32581].
-
- * bootstraptest/test_massign.rb: add a test for above.
-
- * bootstraptest/test_syntax.rb: fix last committed test.
-
-Thu Dec 20 09:47:58 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_syntax.rb: add a test.
-
-Thu Dec 20 09:40:51 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each/NODE_RETURN): fix stack consistency.
-
-Thu Dec 20 09:42:11 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (big2str_orig): access beyond memory region cause crash
- on interrupt. a patch from Yusuke ENDOH <mame AT tsg.ne.jp> in
- [ruby-dev:32651]. [ruby-dev:32641]
-
-Thu Dec 20 09:06:54 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_index): wrong starting position.
-
-Thu Dec 20 06:34:27 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): add pop after throw as return.
-
- * bootstraptest/test_knownbug.rb, test_syntax.rb: move resolved test.
-
- * vm_core.h, iseq.c, compile.h: add debug output code.
-
-Thu Dec 20 04:57:18 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): remove unused retry entry.
-
-Thu Dec 20 04:15:41 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * */Makefile.sub (DEFS, RM): output to config.status.
-
-Thu Dec 20 02:59:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * common.mk (encs): create encoding directory.
-
-Thu Dec 20 02:50:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/iso8859_{1..16}.c: adjust for ruby.
-
-Thu Dec 20 02:28:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/iso8859_{1..16}.c: imported from Onigiruma 5.9.0.
-
-Thu Dec 20 02:23:22 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/Makefile.in (RM): added.
-
- * enc/depend (encs): sort in alpha-numeric order.
-
- * enc/depend (clean, distclean): added.
-
-Thu Dec 20 01:10:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_compile_each): should handle upper level eval iseq
- from break/next, and COMPILE_ERROR() breaks only one block.
- [ruby-dev:31372]
-
-Thu Dec 20 00:07:36 2007 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/drb/drbtest.rb (test_07_public_private_protected_missing):
- followed current Ruby specification.
-
-Wed Dec 19 23:57:37 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (dir_inspect, dir_path, dir_tell): check for frozen and closed
- is not needed. [ruby-dev:32640]
-
-Wed Dec 19 22:59:52 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_sublen): adjust position if position is not at the
- head of a character.
-
- * string.c (rb_str_chomp_bang): check if match start at the head
- of a character.
-
- * string.c (rb_str_chomp_bang): wrong adjust condition.
-
- * string.c (rb_str_rindex): comparison length should be based on
- bytes, not characters.
-
- * string.c (rb_str_rindex_m): too much adjustment.
-
- * re.c (reg_match_pos): pos adjustment should be based on
- characters.
-
- * test/ruby/test_m17n.rb (TestM17N::test_str_insert): test updated
- to check negative offset behavior.
-
- * string.c (rb_str_each_line): should consider rslen.
-
- * string.c (rb_str_buf_append): should propagate encoding.
-
- * string.c (rb_str_each_line): ditto.
-
- * test/ruby/test_m17n.rb (TestM17N::test_str_each_line): should
- check encoding as well.
-
- * test/ruby/test_m17n.rb (TestM17N::test_str_each_line): empty
- array can not propagate encoding; should not check.
-
-Wed Dec 19 21:42:18 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_reg_regsub): should set checked encoding.
-
- * string.c (rb_str_sub_bang): applied r14212 too.
-
-Wed Dec 19 20:40:01 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bignum.c (bigmul1): C99ism.
-
- * bignum.c (bigdivrem1): need dummy return value.
-
-Wed Dec 19 19:18:06 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: Updated.
-
- * ext/nkf/nkf.c (rb_nkf_enc_get): added.
- (find encoding or replicate default encoding)
-
- * ext/nkf/nkf.c (NKF::<ENCODING>): redefine encoding constant.
-
- * ext/nkf/lib/kconv.rb (Kconv::<ENCODING>): redefined as Encoding.
-
- * ext/nkf/lib/kconv.rb: refactoring.
-
-Wed Dec 19 19:11:08 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_mul0): blocking check for bigger numbers.
- a patch from Yusuke ENDOH <mame AT tsg.ne.jp> in [ruby-dev:32632].
-
- * bignum.c (bigdivrem): ditto.
-
-Wed Dec 19 17:34:50 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): remove "retry" in block.
- ("iter{retry}" cause syntax error)
- Currently, "begin; ...; rescue; iter{retry}; end" cause
- syntax error too.
-
- * bootstraptest/test_jump.rb: ditto.
-
- * lib/drb/invokemethod.rb: ditto.
-
- * sample/drb/darrayc.rb: ditto.
-
- * sample/test.rb: ditto.
-
- * test/drb/drbtest.rb: ditto.
-
- * test/ruby/test_iterator.rb: ditto.
-
- * sample/test.rb: add a 'test' directory on the SYSTEM test.
-
-Wed Dec 19 17:12:59 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb, test_block.rb:
- move fixed bug.
-
- * bootstraptest/test_m17n.rb: added.
-
-Wed Dec 19 16:59:55 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (errinfo_place): skip if error is Fixnum. [ruby-dev:32608]
-
- * bootstraptest/test_exception.rb, test_known_bug.rb: move fixed bug.
-
-Wed Dec 19 16:31:58 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (reg_named_capture_assign_iter): remove C99 dependency.
-
- * parse.y (reg_named_capture_assign_iter): get rid of creating
- unnecessary ID.
-
- * parse.y (rb_enc_symname2_p): check for non-nul-terminated string.
-
-Wed Dec 19 15:37:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * insnhelper.ci (vm_yield_with_cfunc): call cfunc with
- (argv[0], data, argc, argv) to pass all arguments.
-
- * enumerator.c (enumerator_each_i): adapted to new calling
- convention.
-
-Wed Dec 19 15:13:20 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_justify): should propagate encoding from pad
- string too.
-
-Wed Dec 19 13:57:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (TIMEZONE_VOID): check whether timezone requires zero
- arguments. [ruby-dev:32631]
-
-Wed Dec 19 13:22:14 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf.c (NKF::_ENCODING): removed.
-
- * ext/nkf/nkf.c (rb_nkf_kconv): renamed to rb_nkf_convert.
-
- * ext/nkf/nkf.c (rb_nkf_convert): set encoding.
-
- * ext/nkf/nkf.c (rb_nkf_guess1): removed.
-
- * ext/nkf/nkf.c (rb_nkf_guess2): renamed to rb_nkf_guess.
-
- * ext/nkf/nkf.c (rb_nkf_guess):
- guess method now returns encoding object.
-
- * ext/nkf/nkf-utf8/nkf.c: Update to nkf 2.0.8 2007-12-19.
-
-Wed Dec 19 10:52:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_cstr_to_inum): an underscore succeeding after octal
- prefix is allowed. [ruby-core:14139]
-
-Wed Dec 19 00:09:19 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_cstr_to_inum): wrong radix check. a patch from
- Yusuke ENDOH <mame AT tsg.ne.jp> in [ruby-dev:32628].
-
- * bignum.c (big2str_find_n1): ditto.
-
-Tue Dec 18 23:53:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_compile_each): fix for segfault. [ruby-dev:31372]
-
-Tue Dec 18 23:44:32 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * test/net/http/utils.rb: split TestNetHTTPUtils module from
- test/net/http/test_http.rb. and start HTTP server in each test case.
-
-Tue Dec 18 23:27:51 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/server.rb (WEBrick::GenericServer#accept_client):
- should rescue Errno::EINVAL from TCPServer#accept. this exception
- might occur if the server socket is not in ready to listen.
-
- * lib/webrick/server.rb (WEBrick::GenericServer#accept_client):
- don't call TCPServer#close if the :ShutdownSocketWithoutClose is set.
-
- * lib/webrick/config.rb (WEBrick::Config::General): add new parameter
- :ShutdownSocketWithoutClose.
-
-Tue Dec 18 22:51:47 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#shutdown):
- new method which calls TCPSocket#shutdown of the underlying socket.
-
-Tue Dec 18 22:11:50 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/rss/parser.rb, lib/rss/atom.rb, lib/rss/rss.rb,
- test/rss/rss-assertions.rb, test/rss/test_atom.rb: use
- pack/unpack("m") instead of base64 library.
-
- * lib/webrick/httpproxy.rb: use delete("\n") instead of chomp/chop
- because the result of pack("m") might be multi-line.
-
-Tue Dec 18 22:12:35 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci, vm.c: rewrite sp manipulation around method/block
- invocation. [ruby-dev:32547]
-
-Tue Dec 18 22:11:23 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/win32/lib/win32/sspi.rb: use pack/unpack("m") instead of
- base64 library which was already removed.
-
-Tue Dec 18 21:09:23 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (invoke_block): merge 2 stack overflow checks.
-
-Tue Dec 18 20:58:35 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c, insnhelper.ci, insns.def, object.c, vm.c, vm.h:
- optimize !@, != method invocation.
-
- * id.c, id.h: ditto.
-
- * bootstraptest/test_syntax.rb: add tests for above.
-
-Tue Dec 18 18:10:05 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb: add issues.
-
-Tue Dec 18 20:22:44 2007 Tanaka Akira <akr@fsij.org>
-
- * parse.y (arg tMATCH arg): call reg_named_capture_assign_gen if regexp
- literal is used.
- (reg_named_capture_assign_gen): assign the result of named capture
- into local variables.
- [ruby-dev:32588]
-
- * re.c: document the assignment by named captures.
-
-Tue Dec 18 18:09:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_splice): propagate encoding.
-
- * string.c (rb_str_subpat_set): ditto.
-
-Tue Dec 18 17:27:12 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_freeze): preserve frozen state of immediate
- values in internal hash table, a la generic_ivar.
-
- * object.c (rb_obj_frozen_p): check immediate values too.
-
- * variable.c (generic_ivar_set): add frozen check fro immediate
- values.
-
-Tue Dec 18 17:04:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (rb_str_transcode_bang, rb_str_transcode): set new
- encoding even if no conversion is done because of 7bit only.
- [ruby-dev:32591]
-
-Tue Dec 18 15:43:59 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (encs, ext/ripper/ripper.c): other options must come
- before MAKEFLAGS in GNU make.
-
-Tue Dec 18 15:19:55 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/parsers/parse_rb.rb: Don't call private fail anymore.
-
-Tue Dec 18 15:17:26 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (encs, ext/ripper/ripper.c): pass MAKEFLAGS.
-
-Tue Dec 18 14:45:25 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (op_tbl): remove duplication to avoid symbol aliases.
-
-Tue Dec 18 14:39:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_nth): need not to raise out-of-range exception.
-
- * test/ruby/test_m17n.rb (TestM17N::test_str_aref_len): removed
- debug print.
-
-Tue Dec 18 14:05:23 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enc/depend: get rid of target expanded as empty for nmake.
-
-Tue Dec 18 07:56:57 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * proc.c (rb_obj_public_method): Object#public_method to retrieve
- public method object.
-
- * proc.c (rb_mod_public_instance_method): Module#public_instance_method
- to retrieve public instance method from class / module.
-
- * proc.c (mnew): visibility check added.
-
- * eval_error.ci (rb_print_undef): add rb_ prefix.
-
- * eval_error.ci (rb_print_undef): add visibility in the error
- message.
-
-Tue Dec 18 05:54:26 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/Env.rb, lib/base64.rb, lib/importenv.rb, lib/eregex.rb: removed.
-
- * lib/ping.rb, lib/readbytes.rb: removed
-
-Tue Dec 18 02:30:56 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (BUILTIN_ENCS): removed.
-
- * common.mk (enc.mk): pass BUILTIN_ENCS from command line.
-
- * enc/depend: ditto.
-
- * enc/make_encmake.rb: ditto.
-
-Tue Dec 18 01:46:48 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_str_format): need to clear output buffer to avoid
- broken encoding compatibility check.
-
-Tue Dec 18 01:40:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (depend_rules): inserts ruby to only headers.
-
-Tue Dec 18 01:21:19 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_encode_length): chomp eol style modifiers.
-
- * parse.y (parser_magic_comment): ditto.
-
- * parse.y (set_file_encoding): ditto.
-
-Tue Dec 18 01:15:44 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (encs): added dependencies.
-
- * enc/Makefile.in, enc/depend, enc/make_encmake.rb: moved serb code.
-
- * lib/mkmf.rb (depend_rules): now takes content string, not file name.
-
- * win32/enc-setup.mak: overrides default target.
-
-Tue Dec 18 00:26:12 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_initialize): raise error if non-Unicode fixed
- encoding option is specified for regexp literals with \u{}
- escapes.
-
- * string.c (rb_str_squeeze_bang): should squeeze multibyte
- characters as well.
-
-Mon Dec 17 21:41:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/enc-setup.mak: extracts BUILTIN_ENCOBJS.
-
- * tool/compile_prelude.rb: needs srcdir.
-
-Mon Dec 17 21:24:04 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * common.mk (miniprelude.c): add -I$(srcdir).
-
-Mon Dec 17 20:53:27 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ssl.c (ossl_sslctx_set_ssl_version):
- new method OpenSSL::SSL::SSLContext#ssl_version to wrap
- SSL_CTX_set_ssl_version.
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_get_verify_result):
- new method OpenSSL::SSL::SSLSocket#verify_result to wrap
- SSL_get_verify_result.
-
- * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLContext.build):
- new method to build OpenSSL::SSL::SSLContext with Hash parameters.
- this method provides safety default parameters than SSLContext.new.
-
- * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL.verify_certificate_identity):
- new module function: pull out identity verification process
- from OpenSSL::SSL::SSLSocket#post_connection_check.
-
-Mon Dec 17 18:42:23 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (scan_once): need no encoding compatibility check.
- it's done inside of re_reg_search().
-
- * string.c (rb_str_split_m): ditto.
-
- * re.c (rb_reg_regsub): ditto.
-
-Mon Dec 17 17:50:30 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_index): check if substring is broken.
-
- * string.c (rb_str_rindex): ditto.
-
- * string.c (rb_str_succ): should carry over.
-
-Mon Dec 17 17:47:26 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (encs): new target to compile external encodings.
-
- * enc/Makefile.in: became a serb template.
-
- * enc/make_encmake.rb: creates enc.mk from enc/Makefile.in using serb.
-
- * lib/mkmf.rb (relative_from): moved from ext/extmk.rb.
-
- * lib/mkmf.rb ($extmk): true if under to top source directory, not
- only ext.
-
- * lib/mkmf.rb (depend_rules): extracted from create_makefile.
-
- * tool/serb.rb (serb): splitted from tool/compile_prelude.rb.
-
-Mon Dec 17 17:32:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (MAKEFILES): removed enc/Makefile.
-
- * configure.in (EXTERNAL_ENCOBJS, ENCSOS): removed.
-
- * enc/Makefile.in (BUILTIN_ENCS): includes .c suffix.
-
- * enc/depend: splitted from Makefile.in.
-
- * {bcc32,win32,wince}/setup.mak (-encs-): extracts BUILTIN_ENCOBJS.
-
-Mon Dec 17 17:07:53 2007 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_enc_str_asciionly_p): use rb_enc_str_coderange.
-
-Mon Dec 17 16:39:25 2007 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_enc_str_coderange): set ENC_CODERANGE_BROKEN using
- rb_enc_precise_mbclen.
- (rb_str_valid_encoding_p): just check coderange is
- ENC_CODERANGE_BROKEN or not.
-
-Mon Dec 17 16:04:16 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/buffering.rb (Buffering#gets): added second
- optional argument to specify maximum length limit.
-
-Mon Dec 17 16:02:30 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httprequest.rb, lib/webrick/cgi.rb: Request-Line or
- header fields should be read with maximum length. [ruby-talk:231745]
-
-Mon Dec 17 14:03:39 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (ENC_CODERANGE_VALID): rename from
- ENC_CODERANGE_8BIT.
-
- * string.c (rb_enc_str_coderange): follow the renaming.
-
-Mon Dec 17 13:56:53 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (tr_find): wrong condition fixed.
-
- * sprintf.c (rb_str_format): check encoding based on result, not
- the format string.
-
- * string.c (rb_str_upto): add encoding check.
-
-Mon Dec 17 12:21:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (RUNRUBY): added RUNRUBYOPT.
-
-Mon Dec 17 11:38:59 2007 Tanaka Akira <akr@fsij.org>
-
- * thread_win32.ci (native_thread_create): initialize
- th->machine_stack_maxsize as rb_gc_stack_maxsize.
-
-Sun Dec 16 17:07:35 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c (transcode_loop): removed special case (-1)
- for undefined conversions.
-
- * transcode_data_iso_8859.c: Changed from character constants
- ('\xC2') to integer constants (0xC2) for shorter files and
- better readability; eliminated duplicated tables; changed
- from -1 offset to actual UNDEF entry (not yet distinguishing
- UNDEF and ILLEGAL correctly).
-
- * test/ruby/test_transcode.rb: added a test for UNDEF conversion.
-
-Sun Dec 16 14:51:59 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (MAKEFILES): should be enc/Makefile, not GNUmakefile.
- [ruby-dev:32609]
-
- * configure.in (BUILTIN_ENCS): removed escapes for OpenBSD.
-
-Sat Dec 15 23:58:46 2007 Tanaka Akira <akr@fsij.org>
-
- * test/openssl/test_pair.rb (SSLPair#ssl_pair): join the thread, even
- on an error.
-
-Sat Dec 15 23:50:31 2007 Tanaka Akira <akr@fsij.org>
-
- * test/xmlrpc/webrick_testing.rb: join webrick server thread.
-
-Sat Dec 15 22:27:39 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (BUILTIN_ENCS): splitted command line instead of
- semicolons for Solaris.
-
-Sat Dec 15 21:38:24 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/timeout.rb: join the background thread to make sure it is dead.
-
-Sat Dec 15 20:20:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (enc/Makefile): add external encoding objects list.
-
- * common.mk (BUILTIN_ENCOBJS): renamed from ENCOBJS.
-
- * configure.in (BUILTIN_ENCS): [] needs to be enclosed because of m4.
-
- * Makefile.in (BUILTIN_ENCOBJS): substituted by autoconf.
-
- * enc/Makefile.in: new file to compile external encoding sources.
-
- * encoding.c (rb_enc_find_index): auto-load external encoding objects
- as "ext/ENCODING_NAME". [ruby-dev:32606]
-
-Sat Dec 15 13:04:30 2007 Tanaka Akira <akr@fsij.org>
-
- * vm_core.h (rb_thread_t): new member machine_stack_maxsize and
- machine_register_stack_maxsize.
-
- * gc.c (rb_gc_stack_maxsize): new global variable for the thread size
- of the main thread.
- (STACK_LEVEL_MAX): use machine_stack_maxsize of current thread.
- (ruby_stack_check): check IA64 register stack.
- (ruby_set_stack_size): set rb_gc_stack_maxsize.
- (Init_stack): set rb_gc_stack_maxsize.
-
- * thread_pthread.ci (native_thread_create): initialize
- th->machine_stack_maxsize and th->machine_register_stack_maxsize.
-
- * vm.c (Init_BareVM): initialize th->machine_stack_maxsize and
- th->machine_register_stack_maxsize.
-
- * thread_win32.ci (native_thread_create): initialize
- th->machine_stack_maxsize. not tested. just a guess at all.
-
- [ruby-dev:32604]
-
-Sat Dec 15 12:58:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_register, rb_enc_replicate, rb_enc_alias): check
- if already registered.
-
-Sat Dec 15 01:57:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rdoc/options.rb (Options::parse): do not access $KCODE any
- longer. [ruby-core:14079]
-
- * lib/irb/init.rb (IRB::IRB.parse_opts): ditto.
-
- * lib/cgi.rb (CGI::CGI): ditto.
-
-Fri Dec 14 18:18:31 2007 Tanaka Akira <akr@fsij.org>
-
- * thread_pthread.ci (native_thread_create): twice the stack size.
- 512KB is not enough to complete test-all on Debian GNU/Linux on
- IA64.
-
-Fri Dec 14 16:10:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_p): RDoc update. a patch from murphy <murphy AT rubychan.de>.
- [ruby-core:14010]
-
-Fri Dec 14 16:06:18 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_cmp): encoding aware comparison.
-
- * string.c (rb_str_casecmp): ditto.
-
-Fri Dec 14 15:25:30 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * transcode.c (encoding_equal): new function.
-
- * transcode.c (str_transcode, transcode_dispatch): added two-step
- conversion logic via UTF-8.
-
- * transcode.c: some minor formatting fixes
-
- * transcode_data.h, transcode_data_iso_8859.c: Shortened
- extremely frequently used macros to shorten file length.
-
- * test/ruby/test_transcode.rb: Fixed name of test class;
- added setup method to ensure all necessary encodings exist;
- split tests into more test methods; added tests; fixed ordering
- of arguments in assert_equal to have expected result first.
-
-Fri Dec 14 13:47:54 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (ruby.imp): fix for circular dependency. a patch from
- Yutaka Kanemoto <kinpoco AT gmail.com> in [ruby-dev:32590].
-
- * regint.h, st.c, ext/json/ext/generator/generator.c: suppress
- warnings on AIX.
-
-Fri Dec 14 12:36:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_CHECK_VARTYPE): check if a variable is defined
- and its type.
-
- * configure.in (timezone, altzone): check for recent cygwin.
-
- * missing/strftime.c (strftime): fix for timezone. [ruby-dev:32536]
-
- * lib/mkmf.rb (try_var): should fail for functions.
-
- * ext/readline/extconf.rb: should use have_func for functions instead
- of have_var.
-
-Fri Dec 14 10:25:56 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/e2mmap.rb (Exception2MessageMapper::E2MM.Raise): $! no
- longer modifiable in 1.9.
-
-Fri Dec 14 08:17:24 2007 Tanaka Akira <akr@fsij.org>
-
- * eval.c (rb_protect): restore root_jmpbuf even if proc exits by
- break such as dbm.delete_if { break }.
-
-Fri Dec 14 02:55:41 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_nth): direct jump if string is 7bit only. great
- performance boost for worst case.
-
- * string.c (str_strlen): direct size if string is 7bit only.
-
-Fri Dec 14 02:29:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (rb_enc_compatible): 1st argument (typically the
- receiver) would have higher priority in encoding detection.
-
-Fri Dec 14 02:05:42 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_synchronized): should check if initialized.
- [ruby-dev:32585]
-
-Fri Dec 14 00:54:40 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_initialize): embedded string may override encoding
- of the regular expression.
-
- * re.c (rb_reg_initialize): fix encoding of regular expression if
- embedded string has its own encoding specified.
-
-Thu Dec 13 22:16:46 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (rb_enc_compatible): encoding should never fall back
- to ASCII-8BIT unless both encodings are ASCII-8BIT.
-
-Thu Dec 13 20:31:28 2007 Tanaka Akira <akr@fsij.org>
-
- * string.c (rb_str_shared_replace): make str noembed after free.
-
-Thu Dec 13 20:09:09 2007 Tanaka Akira <akr@fsij.org>
-
- * eval.c (rb_protect): restore root_jmpbuf to avoid SEGV by
- 'IO.pipe; [].each.next' with gcc version 3.3.5 (Debian 1:3.3.5-13)
- on IA64.
-
-Thu Dec 13 17:51:54 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_split_m): need not to check encoding if regexp
- is empty.
-
- * string.c (rb_str_justify): associate encoding of original to the
- result.
-
- * string.c (rb_str_chomp_bang): need to check encoding of record
- separator.
-
- * string.c (str_gsub): should copy encoding to the result.
-
- * sprintf.c (rb_str_format): ditto.
-
- * string.c (rb_str_succ): should not enter infinite loop for
- non-ASCII, non-alphanumeric character at the bottom.
-
-Thu Dec 13 17:03:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_compatible): should swap encoding indexes too.
-
-Thu Dec 13 16:41:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (rb_enc_compatible): should not judge compatibility
- based on rb_enc_asciicompat().
-
-Thu Dec 13 13:09:03 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/io.h (MakeOpenFile): fptr->enc should be
- initialized to zero. [ruby-dev:32569]
-
-Thu Dec 13 08:56:01 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_getc): use default external encoding if fptr->enc is
- not set. [ruby-dev:32565]
-
- * lib/rubygems/package.rb (Gem::TarReader::Entry::rewind): typo fixed.
- [ruby-dev:32565]
-
-Thu Dec 13 08:24:16 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (read_all): should associate default external encoding.
-
- * io.c (io_read): should NOT associate default external encoding.
-
-Wed Dec 12 23:22:58 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c, regerror.c, string.c, parse.y, ruby.c, file.c:
- use capital letter for \xHH notation. [ruby-dev:32511]
-
-Wed Dec 12 22:21:34 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_mode_enc): allow specifying external encoding in
- open mode, e.g. open(path, "r:utf-8").
-
-Wed Dec 12 21:26:03 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval_method.ci (rb_alias): no need to skip aliasing when new
- equals to old. [ruby-core:13990]
-
-Wed Dec 12 16:34:53 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_check_readable): set default external encoding to
- STDIN.
-
- * io.c (io_enc_str): associate encoding to output string.
-
-Wed Dec 12 12:44:39 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (expr): 'not' and '!' should act as conditional
- expression. [ruby-dev:32548]
-
-Wed Dec 12 12:11:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_reg_regsub): should copy encoding.
-
- * string.c (rb_str_sub_bang, str_gsub): should check and copy encoding
- to be replaced.
-
-Tue Dec 11 23:04:17 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): RDoc update. a patch from Gary Wright
- <radar2002 AT gmail.com>. [ruby-core:13998]
-
- * pack.c (pack_unpack): ditto.
-
-Tue Dec 11 16:37:47 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_ascget): renamed from rb_enc_get_ascii.
-
- * include/ruby/encoding.h: follow the renaming.
-
- * re.c: ditto.
-
-Tue Dec 11 16:19:26 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, */Makefile.sub (CP, MV): added.
-
- * common.mk (.y.c): not discard the old target until successfully
- created.
-
-Tue Dec 11 15:20:39 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (Init_Object): singleton_method_{added,removed,undefined}
- hooks should be defined for BasicObject. [ruby-dev:32531]
-
- * eval.c (Init_eval): method_missing should be defined for all
- objects; moved to BasicObject.
-
-Tue Dec 11 14:27:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (transcode_loop): get rid of SEGV at sequence can not be
- converted.
-
- * transcode.c (rb_str_transcode_bang): copy encoding. [ruby-dev:32532]
-
- * test/ruby/test_transcode.rb: added tests from Martin Duerst <duerst
- AT it.aoyama.ac.jp>. [ruby-dev:32532]
-
-Tue Dec 11 12:05:51 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_get_ascii): add an argument to provide the
- length of the returned character.
-
- * include/ruby/encoding.h (rb_enc_get_ascii): add the argument.
-
- * re.c (rb_reg_expr_str): modify rb_enc_get_ascii call.
- (rb_reg_quote): ditto.
- (rb_reg_regsub): ditto.
-
-Tue Dec 11 09:40:21 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/oniguruma.h (ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE):
- parenthesize an argument.
-
-Tue Dec 11 02:23:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_method_missing): RDoc update patch from Hugh Sasse
- <hgs AT dmu.ac.uk>. [ruby-core:12932]
-
-Tue Dec 11 01:51:34 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTP::get): now supports gzip
- content-encoding. a patch from Hugh Sasse <hgs AT dmu.ac.uk>.
- [ruby-core:13451]
-
-Tue Dec 11 01:21:21 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (shadowing_lvar_gen): no duplicate error for "_".
-
-Mon Dec 10 22:08:47 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * array.c (rb_ary_slice_bang): If an invalid range is given, do
- not raise an exception but return nil just like slice() does.
-
-Mon Dec 10 21:47:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * transcode.c (str_transcode): allow non-registered encodings.
- [ruby-dev:32520]
-
-Mon Dec 10 21:00:30 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_slice_bang): should return nil if position out
- of range. a patch from Akinori MUSHA <knu AT iDaemons.org>.
- [ruby-dev:32518]
-
-Mon Dec 10 19:02:52 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_match): should calculate offset by converted
- operand. [ruby-cvs:21416]
-
-Mon Dec 10 18:28:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/uri/common.rb (URI::REGEXP::PATTERN): typo in REG_NAME
- regular expression. a patch from Ueda Satoshi
- <s-ueda AT livedoor.jp>. [ruby-dev:32514]
-
-Mon Dec 10 17:46:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_tmp_new): creates hidden temporary buffer.
-
- * transcode.c (transcoding): added a pointer to function to flush.
-
- * transcode.c (transcode_loop): do not use string internal.
- [ruby-dev:32512]
-
- * transcode.c (str_transcode): allow Encoding objects.
-
- * transcode_data.h (BYTE_LOOKUP): use actual struct name.
-
-Mon Dec 10 16:52:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_insert): should not add length in bytes to index in
- chars.
-
-Mon Dec 10 14:33:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_public_send): rename invoke_method to public_send.
- it now invokes public method only no matter how it's called.
-
-Mon Dec 10 14:00:43 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * transcode.c: new file to provide encoding conversion features.
- code contributed by Martin Duerst.
-
-Mon Dec 10 13:50:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_reg_search): return byte offset. [ruby-dev:32452]
-
- * re.c (rb_reg_match, rb_reg_match2, rb_reg_match_m): convert byte
- offset to char index.
-
- * string.c (rb_str_index): return byte offset. [ruby-dev:32472]
-
- * string.c (rb_str_split_m): calculate in byte offset.
-
-Mon Dec 10 09:56:29 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/bm_vm1_neq.rb, bm_vm1_not.rb: added.
-
-Mon Dec 10 07:48:14 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_yylex): wrong token was generated. [ruby-dev:32498]
-
- * object.c (rb_obj_not_match): wrong test.
-
-Mon Dec 10 06:44:47 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_expr_str): use \xHH instead of \OOO.
-
- * regerror.c (to_ascii): ditto.
- (onig_snprintf_with_pattern): ditto.
- (onig_snprintf_with_pattern): ditto.
-
- * string.c (rb_str_inspect): ditto.
- (rb_str_dump): ditto.
-
- * parse.y (parser_yylex): ditto.
-
- * ruby.c (proc_options): ditto.
-
- * file.c (rb_f_test): ditto.
-
- [ruby-dev:32495]
-
-Mon Dec 10 06:41:00 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_names): new method Regexp#names.
- (rb_reg_named_captures): new method Regexp#named_captures
- (match_regexp): new method MatchData#regexp.
- (match_names): new method MatchData#names.
-
- * lib/pp.rb (MatchData#pretty_print): show names of named captures.
-
- [ruby-dev:32493]
-
-Mon Dec 10 01:35:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (expr): redefinable not (!) operator.
-
- * parse.y (arg): ditto.
-
- * object.c (rb_obj_not): new method "!".
-
- * object.c (rb_obj_not_equal): new method "!=".
-
- * object.c (rb_obj_not_match): new method "!~".
-
-Sun Dec 9 22:31:36 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_s_last_match): accept named capture's name.
-
-Sun Dec 9 15:57:53 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (match_backref_number): new function for converting a backref
- name/number to an integer.
- (match_offset): use match_backref_number.
- (match_begin): ditto.
- (match_end): ditto.
- (name_to_backref_number): raise IndexError instead of RuntimeError.
- (match_inspect): show capture index.
-
-Sun Dec 9 14:59:15 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_intern.h (CHECK_STACK_OVERFLOW): reserve frame size.
- [ruby-dev:32485]
-
-Sun Dec 9 14:38:25 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (rb_thread_mark): use rb_gc_mark_maybe() for
- VM stack specified by mark_stack_len. [ruby-dev:32462]
-
- * insnhelper.ci: clear vm stack extended by opt value.
-
-Sun Dec 9 14:08:47 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (FilePathStringValue): defined. similar to
- FilePathValue but no taint check.
-
- * file.c (rb_get_path_no_checksafe): implementation of
- FilePathStringValue.
- (rb_file_s_basename): use FilePathStringValue.
- (rb_file_s_dirname): ditto.
- (rb_file_s_extname): ditto.
- (rb_file_s_split): ditto.
- (rb_file_join): ditto.
-
- * dir.c (file_s_fnmatch): ditto.
-
-Sun Dec 9 12:49:34 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (append_utf8): check unicode range.
-
-Sun Dec 9 12:39:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/cgi.rb (read_multipart): exclude blanks from header values.
- [ruby-list:44327]
-
-Sun Dec 9 12:18:19 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_get_path): use the original object if to_path method is
- not defined. [ruby-dev:32473]
-
- * io.c (rb_f_open): call to_open on non-string objects, instead of
- to_str. [ruby-dev:32473]
-
-Sun Dec 9 12:12:23 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (tr_find): returns true if no characters to be removed is
- specified.
-
-Sun Dec 9 12:03:16 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_magic_comment): delimits with a semicolon.
-
-Sun Dec 9 11:29:23 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (tr_trans): get rid of segfaults when has multibytes but
- source sets have no multibytes.
-
-Sun Dec 9 04:01:28 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_mbclen): return 1 if underlying implementation
- returns a length longer than e-p.
- (rb_enc_precise_mbclen): return needmore if underlying
- implementation returns a length longer than e-p.
-
-Sat Dec 8 17:59:40 2007 Tanaka Akira <akr@fsij.org>
-
- * signal.c (posix_signal): return value.
-
-Sat Dec 8 17:22:16 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * test/openssl/test_pkcs7.rb: Remove redundant module namespace.
-
-Sat Dec 8 17:07:10 2007 Tanaka Akira <akr@fsij.org>
-
- * ruby.c (proc_options): make rb_raise format as a string literal to
- avoid warning.
-
-Sat Dec 8 16:18:16 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_check_preprocess): new function for validating regexp
- fragment.
-
- * parse.y (regexp): invoke reg_fragment_check.
- (reg_fragment_check): defined.
- (reg_fragment_check_gen): defined.
-
-Sat Dec 8 11:06:29 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_mbclen): make it never fail.
- (rb_enc_nth): don't check the return value of rb_enc_mbclen.
- (rb_enc_strlen): ditto.
- (rb_enc_precise_mbclen): return needmore(1) if e <= p.
- (rb_enc_get_ascii): new function for extracting ASCII character.
-
- * include/ruby/encoding.h (rb_enc_get_ascii): declared.
-
- * include/ruby/regex.h (ismbchar): removed.
-
- * re.c (rb_reg_expr_str): use rb_enc_get_ascii.
- (unescape_escaped_nonascii): use rb_enc_precise_mbclen to determine
- the termination of escaped non-ASCII character.
- (unescape_nonascii): use rb_enc_precise_mbclen.
- (rb_reg_quote): use rb_enc_get_ascii.
- (rb_reg_regsub): use rb_enc_get_ascii.
-
- * string.c (rb_str_reverse) don't check the return value of
- rb_enc_mbclen.
- (rb_str_split_m): don't call rb_enc_mbclen with e <= p.
-
- * parse.y (is_identchar): use ISASCII.
- (parser_ismbchar): removed.
- (parser_precise_mbclen): new macro.
- (parser_isascii): new macro.
- (parser_tokadd_mbchar): use parser_precise_mbclen to check invalid
- character precisely.
- (parser_tokadd_string): use parser_isascii.
- (parser_yylex): ditto.
- (is_special_global_name): don't call is_identchar with e <= p.
- (rb_enc_symname_p): ditto.
-
- [ruby-dev:32455]
-
- * ext/tk/sample/tkextlib/vu/canvSticker2.rb: remove coding cookie
- because the encoding is not UTF-8. [ruby-dev:32475]
-
-Fri Dec 7 20:21:35 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/net/ftptls.rb, ext/openssl/lib/net/telnets.rb:
- half-finished libraries are discontinued.
-
-Fri Dec 7 15:44:40 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/pp.rb: use Hash for recursion check as inspect.
-
-Fri Dec 7 15:04:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (flatten): some performance improvements, based on a patch
- from Yusuke ENDOH <mame AT tsg.ne.jp> in [ruby-core:13877].
- [ruby-core:13851]
-
- * thread.c (rb_exec_recursive): use Hash instead of Array for
- performance improvement. [ruby-core:13898]
-
- * thread.c (recursive_pop): use object ID.
-
-Thu Dec 6 19:52:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg): typo fixed ("!" -> "|") in the ripper code.
-
-Thu Dec 6 19:48:41 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg): tUPLUS no longer works as identity operation any
- more. inspired by [ruby-talk:265532].
-
-Thu Dec 6 18:22:11 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_precise_mbclen): new function for mbclen with
- validation.
-
- * include/ruby/encoding.h (rb_enc_precise_mbclen): declared.
- (MBCLEN_CHARFOUND): new macro.
- (MBCLEN_INVALID): new macro.
- (MBCLEN_NEEDMORE): new macro.
-
- * include/ruby/oniguruma.h (OnigEncodingTypeST): replace mbc_enc_len
- by precise_mbc_enc_len.
- (ONIGENC_PRECISE_MBC_ENC_LEN): new macro.
- (ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND): new macro.
- (ONIGENC_CONSTRUCT_MBCLEN_INVALID): new macro.
- (ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE): new macro.
- (ONIGENC_MBCLEN_CHARFOUND): new macro.
- (ONIGENC_MBCLEN_INVALID): new macro.
- (ONIGENC_MBCLEN_NEEDMORE): new macro.
- (ONIGENC_MBC_ENC_LEN): use ONIGENC_PRECISE_MBC_ENC_LEN.
-
- * enc/euc_jp.c: validation implemented.
-
- * enc/sjis.c: ditto.
-
- * enc/utf8.c: ditto.
-
- * string.c (rb_str_inspect): use rb_enc_precise_mbclen for invalid
- encoding.
- (rb_str_valid_encoding_p): new method String#valid_encoding?.
-
- * io.c (rb_io_getc): use rb_enc_precise_mbclen.
-
- [ruby-dev:32438]
-
-Thu Dec 6 01:37:23 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * regparse.c (i_apply_case_fold): fix for negative character class. a
- patch from Yusuke ENDOH <mame AT tsg.ne.jp> in [ruby-core:13884].
-
-Thu Dec 6 01:00:38 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_s_list): support NetBSD/Citrus iconv.
-
-Wed Dec 5 16:18:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (rb_proc_s_new): call initialize. [ruby-core:13824]
-
- * proc.c (rb_proc_location): return file name and line number where
- the proc is defined.
-
- * thread.c (thread_s_new): call initialize. [ruby-core:13835]
-
- * thread.c (thread_initialize): split initialize method.
-
-Wed Dec 5 15:25:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_intern3): fix to changing encoding to default, and
- uncommented r13835, which is rare but not impossible.
-
-Wed Dec 5 15:15:21 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * range.c (step_i, range_step): support non-fixnum steps.
- [ruby-talk:282100]
-
-Wed Dec 5 14:25:11 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): fix typo.
-
-Wed Dec 5 13:41:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (yycompile): get rid of tracing while parsing.
- [ruby-dev:31351]
-
- * thread.c (ruby_suppress_tracing): added a new parameter, which
- directs to call func always.
-
-Tue Dec 4 19:56:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_convert): should not set encoding unless
- the target encoding is supported. [ruby-dev:32451]
-
-Tue Dec 4 17:34:17 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/lib/kconv.rb (tojis, tosjis, toeuc, toutf8):
- set encoding. [ruby-dev:32447]
-
-Tue Dec 4 17:07:25 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/json.rb, lib/json/*: moved to ext/json/lib.
-
-Tue Dec 4 16:34:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_create): achieve target encoding.
-
- * ext/iconv/iconv.c (iconv_convert, iconv_finish, iconv_iconv,
- iconv_conv): set result string encoding. [ruby-dev:32446]
-
- * ext/iconv/iconv.c (iconv_initialize, iconv_s_open): set encoding to
- Iconv instance.
-
-Tue Dec 4 14:34:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): reverted c flag.
-
-Tue Dec 4 11:23:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_cstr_to_inum): trailing spaces may exist at squeezing
- preceding 0s. [ruby-core:13873]
-
-Mon Dec 3 11:51:53 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/Win32API/*: removed or moved to ext/dl/win32.
-
- * ext/dl/win32/*: new. [ruby-dev:32387]
-
-Sun Dec 2 22:08:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_tokadd_mbchar): fix for ASCII chars. [ruby-dev:32432]
-
- * parse.y (parser_parse_string, parser_here_document): prevent false
- error messages.
-
-Sun Dec 2 20:43:22 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (unescape_escaped_nonascii): fix mbclen argument.
-
-Sun Dec 2 15:47:57 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_tokadd_mbchar): check insufficient multibyte char.
- [ruby-dev:32429]
-
-Sun Dec 2 15:42:16 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb, test/rss/test_version.rb: 0.2.1 -> 0.2.2.
-
- * lib/rss/maker/itunes.rb: fixed new_itunes_category.
- * lib/rss/maker/taxonomy.rb: new_taxo_topic -> new_topic because
- of consistency.
-
- * test/rss/test_maker_itunes.rb, test/rss/test_itunes.rb: removed
- needless UTF-8 characters.
-
-Sun Dec 2 15:18:37 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_callee_setup_arg): fix error message.
- [ruby-dev:32430]
-
-Sun Dec 2 09:12:48 2007 Tanaka Akira <akr@fsij.org>
-
- * parse.y (regexp): fix /#{}\xa1\xa2/e to be EUC-JP.
- (reg_fragment_setenc_gen): extracted from reg_compile_gen.
-
-Sun Dec 2 01:39:51 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h (rb_uv_to_utf8): declared.
-
- * re.c (rb_reg_preprocess): new function for dynamic regexp with
- \u{} such as Regexp.new("\\u{6666}").
- (rb_reg_prepare_re): preprocess regexp for recompiling.
- (read_escaped_byte): new function.
- (unescape_escaped_nonascii): new function.
- (append_utf8): new function.
- (unescape_unicode_list): new function.
- (unescape_unicode_bmp): new function.
- (unescape_nonascii): new function.
- (rb_reg_initialize): preprocess regexp.
-
- * pack.c (rb_uv_to_utf8): renamed from uv_to_utf8.
-
- * parse.y (STR_NEW3): take func instead of has8 and hasmb.
- (parser_str_new): use default coderange mechanism except for regexp.
- (parser_tokadd_utf8): copy regexp source as-is.
- (parser_read_escape): UTF-8 stuff removed.
- (parser_tokadd_escape): has8bit and hasmb removed.
- (parser_tokadd_string): fix 8-bit single byte character with \u.
- (parser_parse_string): has8bit and hasmb removed.
- (parser_here_document): has8bit and hasmb removed.
- (parser_yylex): call parser_tokadd_utf8 instead of read_escape for
- UTF-8 character.
-
-Wed Dec 2 01:00:07 2007 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/xmlrpc/server.rb (XMLRPC::Server#server): Improve signal handling so
- pressing control-c in the controlling terminal or sending SIGTERM stops
- the XML-RPC server.
-
-Sat Dec 1 23:04:42 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c: rename primary_encoding -> default_external (encoding).
-
-Sat Dec 1 19:52:57 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (Time#to_datetime): use nsec instead of usec.
-
- * lib/date.rb (DateTime#to_time): second minute as an argument to
- Time::utc contains fractional part in rational; hence Time
- object may keep resolution at most nanosecond.
-
-Sat Dec 1 14:36:05 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb: move fixed bugs.
-
- * test/ruby/test_sprintf.rb: ditto.
-
- * test/yaml/test_yaml.rb: ditto.
-
-Sat Dec 1 13:24:47 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_yield_with_cfunc): fix to passing argc on third
- parameter of IFUNC. [ruby-dev:32329]
-
- * enumerator.c: fix to pass exact number of argument.
-
- * eval.c (rb_yield_values2): added.
-
- * include/ruby/ruby.h: ditto.
-
- * bootstraptest/test_knownbug.rb: move a fixed test.
-
- * bootstraptest/test_block.rb: ditto.
-
-Sat Dec 1 10:45:56 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_open): use to_open for every non-string object. path
- object may use method_missing.
-
-Sat Dec 1 09:44:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * insns.def (concatarray, splatarray): use to_a instead of
- to_splat.
-
- * insnhelper.ci (caller_setup_args): ditto.
-
-Sat Dec 1 03:34:32 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (newline_node): always remove NODE_BEGIN.
-
-Fri Nov 30 23:48:07 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * signal.c (ruby_signal): use SA_SIGINFO if available.
- [ ruby-Patches-6418 ]
-
-Fri Nov 30 22:52:54 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * signal.c (trap_signm): SIGVTALRM no longer used for green
- thread. [ruby-talk:281318]
-
- * signal.c (ruby_sig_finalize): do not install SIG_DFL handler if
- previous handler is sighandler().
-
-Fri Nov 30 21:02:15 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/json.rb, lib/json/add/{core.rb, rails.rb},
- test/json/test_json_rails.rb: additional files of JSON 1.1.2.
- [ruby-dev:32405]
-
-Fri Nov 30 19:33:38 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/syck/rubyext.c (rb_syck_mktime): avoid segmentation fault.
- [ruby-core:13735]
-
-Fri Nov 30 19:05:55 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_count): precise argument number check.
-
- * enum.c (enum_count): return Enumerator if no block given.
-
-Fri Nov 30 16:42:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_take_while): returns Enumerator if no block given.
-
- * enum.c (enum_drop_while): ditto.
-
-Thu Nov 29 16:59:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stmt): remove unnecessary NODE_BEGIN. [ruby-core:13814]
-
-Thu Nov 29 06:45:48 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_eql): recursive comparison should be based on
- eql? [ruby-core:13803]
-
-Wed Nov 28 18:08:00 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/json, lib/json, test/json: Update to JSON 1.1.2.
- (RubyForge#15447)
-
- * math.c: fix typo.
-
-Wed Nov 28 16:29:35 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_invoke_block): should splat args.
- [ruby-dev:32392]
-
- * test/ruby/test_yield.rb: add tests for above.
-
-Wed Nov 28 14:43:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extract_makefile): use dldflags instead of DLDFLAGS to
- get rid of mixing $LDFLAGS and $ARCH_FLAG.
-
- * lib/mkmf.rb (configuration): ditto.
-
- * lib/mkmf.rb (create_makefile): support for extensions which has no
- shared object.
-
-Wed Nov 28 02:42:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (big2str_find_n1): removed extraneous element.
- [ruby-dev:32351], [ruby-dev:32365]
-
- * bignum.c (big2str_find_n1): returns necessary digits now.
-
- * sprintf.c (remove_sign_bits): extends sign bit first.
-
-Tue Nov 27 15:53:43 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): "when *[],1" dumps core.
- a patch from Yusuke ENDOH <mame AT tsg.ne.jp>. [ruby-dev:32350]
-
- * bootstraptest/test_syntax.rb: add a test for above.
-
-Tue Nov 27 15:40:05 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): "a[*b] += 1" dumps core.
- a patch from Yusuke ENDOH <mame AT tsg.ne.jp>. [ruby-dev:32354]
-
- * bootstraptest/test_syntax.rb: add a test for above.
-
-Tue Nov 27 12:47:23 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c, insns.def: change return value of "defined?"
- for $&, $1, ... . If such variables are defined,
- return "global-variable".
-
- * test/ruby/test_defined.rb: add tests.
-
- * bootstraptest/test_syntax.rb: fix a test.
-
-Tue Nov 27 11:54:46 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def: fix typo.
-
-Tue Nov 27 11:23:20 2007 Koichi Sasada <ko1@atdot.net>
-
- * test_beginendblock.rb: add loop to wait signal.
- [ruby-dev:32332]
-
-Tue Nov 27 11:14:57 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h, encoding.c, re.c, string.c, parse.y:
- rename ENC_CODERANGE_SINGLE to ENC_CODERANGE_7BIT.
- rename ENC_CODERANGE_MULTI to ENC_CODERANGE_8BIT.
- Because single byte 8bit character, such as Shift_JIS 1byte katakana,
- is represented by ENC_CODERANGE_MULTI even if it is not multi byte.
-
-Tue Nov 27 10:45:45 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (rb_method_missing): fix stack trace.
-
- * bootstraptest/test_knownbug.rb: move solved tests.
-
- * bootstraptest/test_method.rb, test/ruby/test_regexp.rb: ditto.
-
-Tue Nov 27 09:57:42 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def, compile.c: fix to allow dsym for alias/undef.
- [ruby-dev:32355]
-
- * bootstraptest/test_method.rb: add tests for above.
-
-Mon Nov 26 23:18:46 2007 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/extserv.rb (initialize, stop_service): synchronize with
- ExtServManager.
-
- * test/drb/test_drb.rb (TestDRbEval): ignored.
-
-Mon Nov 26 17:32:16 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (Init_Regexp): new method Regexp#fixed_encoding?
- [ruby-dev:32361]
-
-Mon Nov 26 13:28:14 2007 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/complex.rb: be able to create Complex(0, -0.0). [ruby-list:44268]
-
-Mon Nov 26 11:24:04 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_fixed_encoding_p): extracted from rb_reg_prepare_re and
- rb_reg_s_union.
- (rb_reg_s_union): refactored.
-
-Mon Nov 26 10:44:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_read_internal, rb_sysopen_internal): remove C99 dependency.
-
-Sun Nov 25 22:21:35 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/encoding.h (rb_enc_str_asciionly_p): declared.
- (rb_enc_str_asciicompat_p): defined.
-
- * re.c (rb_reg_initialize_str): use rb_enc_str_asciionly_p.
- (rb_reg_quote): return ascii-8bit string if the argument is
- ascii-only to generate encoding generic regexp if possible.
- (rb_reg_s_union): fix encoding handling. [ruby-dev:32094]
-
- * string.c (rb_enc_str_asciionly_p): defined.
-
-Sun Nov 25 12:12:03 2007 Eric Hodel <drbrain@segment7.net>
-
- * gem_prelude.rb: Import fast-loading gem_prelude.rb from RubyGems.
-
- * lib/rubygems*: Import RubyGems r1516.
-
-Sat Nov 24 23:25:52 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_eval.rb (TestEval::test_instance_eval_cvar):
- updated not to modify class variable of Object class.
-
-Fri Nov 23 17:34:24 2007 Koichi Sasada <ko1@atdot.net>
-
- * io.c: add rb_read_internal() as blocking function.
-
-Fri Nov 23 17:33:39 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c: fix comment.
-
-Fri Nov 23 17:26:11 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb: move solved tests.
-
- * bootstraptest/test_io.rb, test_marshal.rb, test_objectspace.rb:
- ditto.
-
- * test/ruby/test_integer.rb, test_regexp.rb: ditto.
-
-Fri Nov 23 15:59:04 2007 Tanaka Akira <akr@fsij.org>
-
- * struct.c (rb_struct_alloc_noinit): new function.
- (rb_struct_define_without_accessor): add allocator to the arguments.
-
- * range.c (range_alloc): re-introduced using rb_struct_alloc_noinit.
-
-Fri Nov 23 15:27:43 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (REG_CASESTATE): unused macro removed.
- (rb_reg_prepare_re): check encoding difference.
- (rb_reg_initialize): check 8bit byte.
-
- * parse.y (parser_tokadd_escape): fix has8bit.
-
- [ruby-dev:32113]
-
-Fri Nov 23 15:16:48 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_f_global_variables): variable names should not
- duplicate. [ruby-dev:32344]
-
-Fri Nov 23 13:34:08 2007 Tanaka Akira <akr@fsij.org>
-
- * struct.c (rb_struct_define_without_accessor): new function.
-
- * range.c (range_alloc): removed.
- (Init_Range): use rb_struct_define_without_accessor.
-
- based on [ruby-dev:32327].
-
-Fri Nov 23 11:01:54 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (match_begin): should return offset by character.
- [ruby-dev:32331]
-
- * re.c (match_end): ditto.
-
- * re.c (rb_reg_search): ditto.
-
-Fri Nov 23 10:44:24 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * compile.c (defined_expr): defined(method(x)) dumped core. a
- patch from Yusuke ENDOH <mame AT tsg.ne.jp>. [ruby-dev:32335]
-
-Wed Nov 21 18:03:49 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c: fix to recycle thread data (VM stack).
-
- * thread.c: ditto.
-
- * benchmark/bm_vm3_thread_create_join.rb: add loop count.
-
-Wed Nov 21 18:02:10 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/driver.rb: add path to trunk/lib if driver runner is
- in build directory.
-
-Wed Nov 21 16:39:21 2007 Tanaka Akira <akr@fsij.org>
-
- * test/fileutils/fileasserts.rb (assert_equal_timestamp): new assert
- to test tv_sec only for filestamp resolution portability.
- (assert_same_entry): use assert_same_entry for mtime comparison.
-
-Wed Nov 21 14:55:13 2007 Koichi Sasada <ko1@atdot.net>
-
- * array.c (rb_ary_permutation): add gc guard codes.
-
-Wed Nov 21 11:16:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * insnhelper.ci (vm_search_normal_superclass): rename function.
-
- * insnhelper.ci (vm_search_superclass): ditto.
-
- * proc.c (struct METHOD): rename rklass -> rclass.
-
-Wed Nov 21 03:12:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (rb_f_system): returns nil on execution failure.
- [ruby-core:13715]
-
-Wed Nov 21 01:04:12 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (nil_plus): remove unused function. [ruby-core:13737]
-
-Tue Nov 20 21:46:46 2007 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_mload): ignore invalid digits in submicro.
-
-Tue Nov 20 20:33:32 2007 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/ruby.h: rename RFloat#double_value -> float_value.
-
- * numeric.c, parse.y: ditto.
-
-Tue Nov 20 19:36:21 2007 Koichi Sasada <ko1@atdot.net>
-
- * gc.h, vm_core.h: decl of rb_gc_save_machine_context()
- should be at vm_core.h.
-
- * include/ruby/ruby.h, intern.h: remove type rb_thread_t.
-
- * include/ruby/intern.h: change rb_unblock_function_t,
- rb_unblock_function_t.
-
- * file.c, process.c: apply above changes.
-
- * thread.c, thread_pthread.ci, thread_win32.ci: ditto.
-
- * io.c: support blocking open (2). [ruby-core:13614]
-
-Tue Nov 20 17:10:11 2007 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_close_on_exec_p): new method IO#close_on_exec?.
- (rb_io_set_close_on_exec): new method IO#close_on_exec=.
- [ruby-dev:32323]
-
-Tue Nov 20 16:24:31 2007 Tanaka Akira <akr@fsij.org>
-
- * gc.c (gc_mark_children): obj->as.file.fptr may be 0 for T_FILE.
-
-Tue Nov 20 15:09:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_read_escape): has8bit flag may be set with control
- escape. [ruby-core:13722]
-
- * parse.y (parser_prepare): set begging after BOM if exists.
- [ruby-core:13718]
-
-Tue Nov 20 14:55:37 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems*: Update to RubyGems 0.9.5.
-
-Tue Nov 20 13:00:44 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h win32/win32.c (rb_w32_pipe_exec): use dual fd
- instead of socketpair when mode is RDWR.
-
- * io.c (pipe_open): pass &write_fd to rb_w32_pipe_exec().
-
- * io.c (popen_redirect): define only when HAVE_FORK.
-
-Tue Nov 20 12:12:04 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/io.h (rb_io_t): add tied_io_for_writing member.
-
- * io.c: use tied_io_for_writing for duplex popen.
-
- * gc.c: mark tied_io_for_writing.
-
- * common.mk: gc.o depends io.h.
-
- [ruby-dev:32205]
-
-Tue Nov 20 11:59:33 2007 Tanaka Akira <akr@fsij.org>
-
- * test/drb/test_drb.rb: rename TestRubyYield to TestDRbRubyYield to
- avoid name crash with test/ruby/test_yield.rb.
- TestRuby18Yield is renamed to TestDRbRuby18Yield too.
-
-Tue Nov 20 03:24:42 2007 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/extservm.rb: merged from ruby_1_8 branch.
-
- * lib/drb/acl.rb: ditto.
-
- * lib/drb/ssl.rb: ditto.
-
- * lib/drb/unix.rb: ditto.
-
- * lib/drb/drb.rb: ditto.
-
- * lib/drb/observer.rb: ditto.
-
- * lib/drb/invokemethod.rb: ditto.
-
- * test/drb/test_drbssl.rb: ditto.
-
- * test/drb/test_drb.rb: ditto.
-
- * test/drb/drbtest.rb: ditto.
-
- * test/drb/test_drbunix.rb: ditto.
-
-Tue Nov 20 00:52:46 2007 Tanaka Akira <akr@fsij.org>
-
- * test/fileutils/fileasserts.rb (assert_equal_time): show nsec if
- assertion fails but time.to_s equals.
- (assert_same_entry): use assert_equal_time.
-
- * test/fileutils/test_fileutils.rb (test_install): use
- assert_equal_time.
-
-Mon Nov 19 18:46:49 2007 Tanaka Akira <akr@fsij.org>
-
- * file.c (utime_internal): fallback utimensat to utimes.
-
-Mon Nov 19 17:51:27 2007 Tanaka Akira <akr@fsij.org>
-
- * configure.in: check struct timespec, clock_gettime, utimensat,
- struct stat.st_atim,
- struct stat.st_atimespec,
- struct stat.st_atimensec,
- struct stat.st_mtim,
- struct stat.st_mtimespec,
- struct stat.st_mtimensec,
- struct stat.st_ctim,
- struct stat.st_ctimespec,
- struct stat.st_ctimensec.
-
- * include/ruby/missing.h: provide struct timespec if not available.
-
- * time.c: support nanosecond-resolution using struct timespec.
- (time_nsec): new method: Time#nsec and Time#tv_nsec.
-
- * include/ruby/intern.h: provide rb_time_nano_new.
-
- * file.c (utime_internal): use utimensat if available.
- (rb_file_s_utime): refactored.
- (rb_f_test): use stat_atime, stat_mtime, stat_ctime.
- (rb_stat_cmp): check tv_nsec.
- (stat_atimespec): new function.
- (stat_atime): ditto.
- (stat_mtimespec): ditto.
- (stat_mtime): ditto.
- (stat_ctimespec): ditto.
- (stat_ctime): ditto.
- (rb_stat_atime): use stat_atime.
- (rb_file_s_atime): ditto.
- (rb_file_atime): ditto.
- (rb_stat_mtime): use stat_mtime.
- (rb_file_s_mtime): ditto.
- (rb_file_mtime): ditto.
- (rb_file_ctime): use stat_ctime.
- (rb_file_s_ctime): ditto.
- (rb_stat_ctime): ditto.
-
- * variable.c (rb_copy_generic_ivar): clear clone's instance variables
- if obj has no instance variable.
-
- * marshal.c (w_object): dump instance variables of generated string
- for TYPE_USERDEF, even if original object has instance variables.
-
- * lib/time.rb (Time#xmlschema): use nsec instead of usec.
-
- [ruby-dev:32306]
-
-Mon Nov 19 17:48:30 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_class_superclass): should not raise exception for
- BasicObject. [ruby-Bugs-15668]
-
-Mon Nov 19 16:04:08 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_permutation): gives all permutations of elements
- if no argument given. a patch from Yusuke ENDOH <mame AT tsg.ne.jp>.
- [ruby-dev:32309]
-
-Mon Nov 19 02:44:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_compile_each): alias and undef accept dsyms as well
- as literals. [ruby-dev:32308]
-
-Mon Nov 19 02:31:36 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_method.ci (rb_add_method): no redefinition warning for undef.
-
-Mon Nov 19 01:53:11 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_read_escape): disallow control and meta modifiers
- for non-ASCII characters. [ruby-core:13685]
-
-Sun Nov 18 20:47:41 2007 Tanaka Akira <akr@fsij.org>
-
- * marshal.c (mark_dump_arg): it may be called after dump_ensure.
-
-Sun Nov 18 18:27:47 2007 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_minus): fix Time.at(2**60+1) - Time.at(2**60).
-
-Sun Nov 18 17:28:49 2007 Tanaka Akira <akr@fsij.org>
-
- * time.c (time_arg): show actual year in 2-3 digits year warning.
- (time_mdump): show actual year in "year too big to marshal" error.
-
-Sun Nov 18 14:03:44 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_method.ci (rb_alias): do not call hook functions until
- initialization finishes. [ruby-talk:279538]
-
-Sun Nov 18 09:09:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (String#tr_cpp): make preprocessor identifiers.
-
-Sun Nov 18 05:19:46 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/mkmf.rb (have_struct_member): define HAVE_type_member.
-
-Sat Nov 17 23:51:29 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_invoke): bug fix. [ruby-talk:279100]
-
-Sat Nov 17 23:21:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_yylex): should clear parser->tokp as well.
- [ruby-dev:32250]
-
- * parse.y: remove NEED_ASSOC that break test_parser_events.
-
- * parse.y (parser_yylex): should not decrement line numbers at the
- end of file.
-
- * file.c (rb_find_file_ext): search .rb files first through in the
- loadpath.
-
-Fri Nov 16 23:31:18 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_odd_p): new method added. a patch from Tadashi
- Saito <shiba AT mail2.accsnet.ne.jp>. [ruby-dev:32305]
-
- * bignum.c (rb_big_even_p): ditto.
-
-Fri Nov 16 17:41:34 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (Document-class): moved the simplest example to
- the top.
-
- * ext/iconv/iconv.c (iconv_s_iconv): Document-method: needs class
- prefix for class method. [ruby-core:13542]
-
- * ext/iconv/iconv.c (iconv_iconv): also instance method needs to be
- qualified.
-
-Fri Nov 16 16:26:57 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * include/ruby/ruby.h: added some declarations for event hooks.
-
- * lib/profile.rb: set VM::InstructionSequence.compile_option.
-
-Fri Nov 16 11:16:41 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/yaml/rubytypes.rb (String#is_binary_data?): use Integer#fdiv.
-
-Fri Nov 16 03:36:01 2007 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/rubyext.c: Node#value defined twice.
-
- * lib/yaml/: several method redefinitions causing warnings.
-
-Fri Nov 16 03:01:00 2007 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml/types.rb: Likewise, pass self to YAML::quick_emit.
-
-Fri Nov 16 02:51:59 2007 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml.rb (quick_emit): use combination of object_id and hash to
- identify repeated object references, since GC will reuse memory of
- objects during output of YAML. [ruby-Bugs-8548] [ruby-Bugs-3698]
-
-Thu Nov 15 19:49:03 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/curses/extconf.rb: check macro if cannot find func.
- [ruby-list:44224]
-
-Thu Nov 15 18:04:06 2007 Tanaka Akira <akr@fsij.org>
-
- * tool/compile_prelude.rb: fix TMP_RUBY_PREFIX for relative load path
- environment.
-
-Thu Nov 15 17:28:21 2007 Tanaka Akira <akr@fsij.org>
-
- * tool/compile_prelude.rb: absolute path may not start with a slash.
- pointed by usa.
-
-Thu Nov 15 17:07:54 2007 Tanaka Akira <akr@fsij.org>
-
- * tool/compile_prelude.rb: fix first substitution.
- use constant for prefix.
- pointed by Richard Kilmer.
-
-Thu Nov 15 14:29:56 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (prereq): added auto generated sources. [ruby-dev:32280]
-
-Thu Nov 15 12:31:13 2007 Tanaka Akira <akr@fsij.org>
-
- * tool/compile_prelude.rb: use constant for prefix.
-
-Thu Nov 15 12:24:39 2007 Tanaka Akira <akr@fsij.org>
-
- * tool/compile_prelude.rb: use simple template system for source
- code generation.
-
-Thu Nov 15 12:19:14 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi/session.rb (CGI::Session::FileStore::restore): use
- lockfile for exclusive locks. a patch from <tommy AT tmtm.org>.
- [ruby-dev:32296]
-
-Thu Nov 15 12:14:53 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * tool/compile_prelude.rb (c_esc): need to escape closing brace.
-
-Thu Nov 15 11:52:16 2007 Tanaka Akira <akr@fsij.org>
-
- * tool/compile_prelude.rb: adjust RbConfig::CONFIG paths relative
- to the installation path.
-
-Thu Nov 15 11:25:20 2007 Tanaka Akira <akr@fsij.org>
-
- * ruby.c (usage): fix typo on --disable-gems option.
- pointed by Richard Kilmer.
-
-Wed Nov 14 16:16:17 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/net/http/test_https_proxy.rb
- (HTTPSProxyTest::test_https_proxy_authentication): initialize
- local variable 't' first. [ruby-dev:32253]
-
-Wed Nov 14 15:39:24 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/socket/test_socket.rb: update not to use 1.8 assignment to
- external local variable in the block parameters. [ruby-dev:32251]
-
- * test/strscan/test_stringscanner.rb: avoid $KCODE, and use
- String#force_encoding(). [ruby-dev:32251]
-
-Wed Nov 14 14:04:42 2007 Tanaka Akira <akr@fsij.org>
-
- * common.mk, Makefile.in: rename prelude.c to miniprelude.c.
- rename ext_prelude.c to prelude.c
-
- * win32/Makefile.sub: ditto.
-
- * bcc32/Makefile.sub: ditto.
-
-Wed Nov 14 07:09:48 2007 Koichi Sasada <ko1@atdot.net>
-
- * blockinlining.c, compile.c, compile.h, debug.c, debug.h,
- id.c, insnhelper.h, insns.def, thread.c, thread_pthread.ci,
- thread_pthread.h, thread_win32.ci, thread_win32.h, vm.h,
- vm_dump.c, vm_evalbody.ci, vm_opts.h: fix comments and
- copyright year.
-
-Wed Nov 14 07:07:51 2007 Koichi Sasada <ko1@atdot.net>
-
- * tool/makedocs.rb, template/insnstbl.html: removed.
-
-Wed Nov 14 02:50:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (parse.c): dependency also needs vpath.
-
- * common.mk (node_name.inc, prelude.c): VPATH in nmake does not
- work for targets of explicit rules.
-
-Wed Nov 14 02:11:38 2007 Tanaka Akira <akr@fsij.org>
-
- * missing/isinf.c (isinf): don't define if the macro is defined.
-
- * configure.in: no need to set ac_cv_func_isinf=yes on non-gcc
- solaris.
-
-Wed Nov 14 01:34:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (round): fallback definition.
-
- * numeric.c (flo_divmod, flo_round): use round() always.
- [ruby-dev:32269]
-
-Wed Nov 14 00:33:49 2007 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/ruby.h: introduce 2 macros:
- RFLOAT_VALUE(v), DOUBLE2NUM(dbl).
- Rename RFloat#value -> RFloat#double_value.
- Do not touch RFloat#double_value directly.
-
- * bignum.c, insns.def, marshal.c, math.c, numeric.c, object.c,
- pack.c, parse.y, process.c, random.c, sprintf.c, string.c,
- time.c: apply above changes.
-
- * ext/dl/mkcallback.rb, ext/json/ext/generator/generator.c:
- ditto.
-
-Wed Nov 14 00:15:37 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/ytab.sed: get rid of GNU sed feature. a patch from Laurent
- Sansonetti <laurent.sansonetti AT gmail.com> in [ruby-core:13470].
-
-Tue Nov 13 21:41:39 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (parse.c), ext/ripper/depend (ripper.c): process after
- bison with sed. [ruby-dev:32204]
-
- * ruby.c (proc_options): use yydebug in cmdline_options.
-
- * ruby.c (process_options): set yydebug flag of parser.
-
- * parse.y (yydebug): moved into struct parser_params.
-
- * parse.y (rb_parser_get_yydebug, rb_parser_set_yydebug): parser
- generic methods.
-
- * */Makefile.sub (parse.c): moved to common.mk.
-
- * tool/ytab.sed: comment out yydebug definition, and substitute
- yyerror with parser_yyerror.
-
-Tue Nov 13 16:33:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flodivmod): work around for infinity.
-
- * numeric.c (flo_divmod): work around for platforms have no round().
- [ruby-dev:32247]
-
-Tue Nov 13 15:26:33 2007 Tanaka Akira <akr@fsij.org>
-
- * lex.c.blt: moved from lex.c.
-
- * lex.c.src: copied from keywords. This is the source of lex.c.blt.
-
- * Makefile.in (lex.c): use lex.c.blt if keywords is same as lex.c.src.
-
- * win32/Makefile.sub (lex.c): re-introduce copy rule.
-
- * bcc32/Makefile.sub (lex.c): ditto.
-
- * wince/Makefile.sub (lex.c): ditto.
-
-Tue Nov 13 15:21:52 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_specialized_instruction): check argc.
-
-Tue Nov 13 14:44:32 2007 why the lucky stiff <why@ruby-lang.org>
-
- * test/yaml/test_yaml.rb: fixed the failing YAML Struct test
- at ko1's request.
-
-Tue Nov 13 02:57:04 2007 URABE Shyouhei <shyouhei@ice.uec.ac.jp>
-
- * numeric.c (flo_divmod): round to the nearest integer.
- [ ruby-Bugs-14540 ]
-
-Tue Nov 13 00:36:16 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/ruby/test_settracefunc.rb: fixed tests for set_trace_func.
-
-Mon Nov 12 19:47:29 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread.c (call_trace_proc): should return value.
-
-Mon Nov 12 19:45:18 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc,win}32/Makefile.sub (miniruby): use $(COMMONOBJS) and $(DMYEXT)
- instead of $(LIBRUBY_A).
-
-Mon Nov 12 18:32:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * {bcc,win}32/Makefile.sub (MINIOBJS): added prelude.$(OBJEXT).
-
-Mon Nov 12 17:13:23 2007 Tanaka Akira <akr@fsij.org>
-
- * Makefile.in, common.mk: add prelude.o to MINIOBJS.
-
-Mon Nov 12 16:52:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): rdoc about srcprefix. a patch from
- Daniel Berger <djberg96 AT gmail.com> in [ruby-core:13378].
-
-Mon Nov 12 16:48:09 2007 Tanaka Akira <akr@fsij.org>
-
- * Makefile.in, common.mk: add ext_prelude.o to OBJS.
-
-Mon Nov 12 13:57:39 2007 Tanaka Akira <akr@fsij.org>
-
- * configure.in (MINIDLNOBJS): removed.
- (MINIOBJS): set to dln.o if dmydln.o is not used.
-
- * Makefile.in (miniruby): use MINIOBJS instead of MINIDLNOBJS.
-
-Mon Nov 12 13:53:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-parse-partial): handle stringified
- symbols properly using ruby-forward-string.
-
-Mon Nov 12 12:17:59 2007 Tanaka Akira <akr@fsij.org>
-
- * configure.in (MINIDLNOBJS): defined.
-
- * Makefile.in (miniruby): use MINIDLNOBJS and COMMONOBJS instead of
- MINIOBJS and OBJS to avoid linking both dmydln.o and dln.o.
-
-Sun Nov 11 20:32:45 2007 Tanaka Akira <akr@fsij.org>
-
- * {win32,wince,bcc32}/Makefile.sub: delete lex.c rule.
-
-Sun Nov 11 19:40:52 2007 Tanaka Akira <akr@fsij.org>
-
- * Makefile.in (lex.c): simplified.
-
-Sun Nov 11 18:31:48 2007 Tanaka Akira <akr@fsij.org>
-
- * Makefile.in (lex.c): touch lex.c if gperf failed but lex.c exists.
- Although this may cause non-updated lex.c,
- svn co may generate keywords newer than lex.c especially on
- a file system which can record fractional mtime such as XFS.
-
-Sun Nov 11 17:32:46 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * insnhelper.ci (vm_call_method): pass mn->nd_clss to
- vm_call_cfunc() instead of klass.
-
- * vm.c (rb_thread_method_id_and_klass): traverse parent_iseq.
-
- * thread.c (call_trace_proc): use rb_thread_method_id_and_klass().
-
-Sun Nov 11 16:54:25 2007 Tanaka Akira <akr@fsij.org>
-
- * lex.c: renamed from lex.c.blt.
-
- * Makefile.in (lex.c): use find command to check mtime.
-
-Sun Nov 11 05:34:13 2007 Eric Hodel <drbrain@segment7.net>
-
- * bin/gem: Add forgotten gem command.
-
-Sat Nov 10 23:50:31 2007 Tanaka Akira <akr@fsij.org>
-
- * string.c (tr_trans): cast to unsigned char after dereference
- a pointer to a char to avoid SEGV with "\377".tr("a", "b").
- on FreeBSD/amd64.
-
-Sat Nov 10 23:08:53 2007 Tanaka Akira <akr@fsij.org>
-
- * configure.in, common.mk, Makefile.in: don't generate
- libminiruby-static.a.
-
-Sat Nov 10 19:46:54 2007 Tanaka Akira <akr@fsij.org>
-
- * configure.in, common.mk, Makefile.in: generate libminiruby-static.a
- which contains prelude.o for miniruby.
-
-Sat Nov 10 18:10:07 2007 Tanaka Akira <akr@fsij.org>
-
- * gem_prelude.rb: new file for gem libraries. currently empty.
-
- * common.mk: generate ext_prelude.c by prelude.rb and gem_prelude.rb.
- ruby (not miniruby) is linked with ext_prelude.o instead of
- prelude.o.
-
- * inits.c (rb_call_inits): don't call Init_prelude.
-
- * ruby.c: support --disable-gems option.
- (ruby_init_gems): new function to define Gem::Enable and
- invoke Init_prelude.
- (process_options): call ruby_init_gems just after
- ruby_init_loadpath.
-
- * tool/compile_prelude.rb: support multiple files.
-
-Sat Nov 10 17:27:55 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * thread.c (call_trace_proc): don't call ID2SYM() for ID_ALLOCATOR
- to avoid SEGV.
-
-Sat Nov 10 16:37:07 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems: Import RubyGems revision 1493.
-
- * lib/rubygems.rb: ditto.
-
- * lib/ubygems.rb: ditto.
-
- * lib/rbconfig/datadir.rb: ditto.
-
- * test/rubygems: ditto.
-
-Sat Nov 10 16:34:21 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/soap/property.rb: Don't override Enumerable#inject for 1.9.
-
-Sat Nov 10 14:43:30 2007 David Flanagan <davidflanagan@ruby-lang.org>
-
- * parse.y: use ASCII encoding for string literals that are
- 7-bit clean, fixing regression from my previous patch
-
-Sat Nov 10 13:18:54 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * {bcc32,win32}/Makefile.sub: vendor_ruby support.
-
-Fri Nov 9 23:33:16 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_nextc): added single line read forward buffer.
-
- * parse.y (parser_yylex): adjust line number for fluent interface.
-
-Fri Nov 9 22:04:21 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm.h (FRAME_MAGIC_MASK_BITS): bits of FRAME_MAGIC_MASK.
-
- * insnhelper.ci (vm_call_cfunc, vm_cfunc_flags): use shift operations.
-
-Fri Nov 9 21:46:28 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (eval): should be volatile value for GC.
-
-Fri Nov 9 17:48:22 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (locale_encoding): guesstimate encoding from environment
- variables. [ruby-core:13315]
-
- * ruby.c (process_options): set primary encoding from environment.
-
-Fri Nov 9 16:51:42 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_each_byte): should update rbuf_off and rbuf_len for
- each iteration. [ruby-dev:31659][ruby-dev:32192]
-
- * variable.c (rb_cvar_set): cvar assignment obey same rule to cvar
- reference. [ruby-dev:32192]
-
-Fri Nov 9 15:52:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (enc_check_encoding, rb_set_primary_encoding): ENCODING
- is no longer in FL_USERS flags.
-
-Fri Nov 9 15:20:13 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_squeeze_bang): initialize squeezing table if no
- arguments given.
-
-Fri Nov 9 13:57:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (each_with_index_i): use rb_yield_values() for
- compatibility with Enumerator#with_index(). a patch from Yusuke
- ENDOH <mame AT tsg.ne.jp>. [ruby-dev:32195]
-
-Fri Nov 9 13:45:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_iterator.rb (TestIterator::IterTest::each):
- #each_pair is now alias to #each. [ruby-dev:32192]
-
- * test/ruby/test_iterator.rb (TestIterator::test_assoc_yield):
- ditto
-
-Fri Nov 9 12:56:36 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_load.c (loaded_feature_path): check with type of given feature.
-
-Fri Nov 9 12:43:02 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_basicinstructions.rb: updated for new class
- behavior. [ruby-dev:32192]
-
- * encoding.c (enc_name): Encoding should not rely on ENCODING in
- the FL_USERS flags.
-
- * encoding.c (rb_enc_from_encoding): do not call rb_enc_associate
- for encoding itself.
-
- * encoding.c (enc_register_at): ditto.
-
- * marshal.c (r_ivar): do not set real instance variable for
- encoding data associated.
-
-Fri Nov 9 10:43:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (send_internal): use self in the previous frame to check for
- protected methods. [ruby-core:13254]
-
- * insnhelper.ci (vm_call_method): send! method has gone.
-
-Fri Nov 9 10:38:13 2007 Koichi Sasada <ko1@atdot.net>
-
- * marshal.c (w_object): should be SPECIAL_CONST_P() instead of
- IMMEDIATE_P().
-
-Fri Nov 9 10:29:21 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_invoke_method): check if invoked in function style.
- [ruby-core:13245]
-
- * insnhelper.ci (vm_call_cfunc, vm_cfunc_flags): stores and returns VM
- calling flags.
-
- * vm.c (rb_vm_cfunc_funcall_p): returns if the current method is
- invoked in function style.
-
-Fri Nov 9 10:10:21 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: add rb_context_t#type.
-
-Fri Nov 9 10:05:54 2007 Koichi Sasada <ko1@atdot.net>
-
- * ruby.c (set_arg0): fix breaking environ bugs.
-
-Fri Nov 9 07:26:04 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * random.c: update MT URL.[ruby-core:13305].
-
-Thu Nov 8 17:09:55 2007 David Flanagan <davidflanagan@ruby-lang.org>
-
- * object.c: improve docs for Object.tap
-
- * ChangeLog: fix bogus dates on my previous entries
-
-Thu Nov 8 15:13:56 2007 David Flanagan <davidflanagan@ruby-lang.org>
-
- * parse.y: fix segfault with \x escapes in regexps
- delete unused #if 0 code regions from previous patch
-
-Thu Nov 8 12:12:10 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (parser_read_escape): remove C99/gcc-ism.
-
-Thu Nov 8 07:54:22 2007 David Flanagan <davidflanagan@ruby-lang.org>
-
- * parse.y: patch, based on Nobu's, work to support \u escapes
- also modifications for better coderange detection
-
- * test/ruby/test_unicode_escapes.rb: test cases
-
- * test/ruby/test_mixed_unicode_escapes.rb: mixed encoding test cases
-
-Thu Nov 8 07:14:37 2007 David Flanagan <davidflanagan@ruby-lang.org>
-
- * parse.y (rb_intern3): commented out broken code that prevented
- correct interning of multi-byte symbols. Without this patch
- :x==:x is false when x is a multi-byte character.
-
-Thu Nov 8 07:04:31 2007 David Flanagan <davidflanagan@ruby-lang.org>
-
- * string.c (tr_setup_table, tr_trans): fix test failures
- in test/ruby/test_string.rb
-
-Wed Nov 7 15:07:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (enum_each_with_index): make different arrays at each
- iteration. [ruby-dev:32181]
-
-Wed Nov 7 05:17:24 2007 David Flanagan <davidflanagan@ruby-lang.org>
-
- * eval.c: fix typo in invoke_method documentation
-
-Wed Nov 7 03:52:26 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_product): core dumped with non array arguments.
- a patch from Yusuke ENDOH <mame AT tsg.ne.jp>. [ruby-dev:32180]
-
-Wed Nov 7 03:32:38 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rexml/encodings/SHIFT-JIS.rb (REXML::Encoding): place -x for
- nkf conversion. a patch from <moonwolf AT moonwolf.com>.
- [ruby-dev:32183]
-
-Wed Nov 7 02:59:49 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_each_index): should return meaningful value.
-
-Tue Nov 6 16:37:47 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_load.c (loaded_feature_path): need to expand relative paths.
-
- * eval_load.c (rb_feature_p): check if the feature is loading with
- load path. [ruby-dev:31932]
-
- * eval_load.c (load_lock): check the result of barrier waiting.
-
- * thread.c (rb_barrier_wait): check if owned by the current thread.
-
- * thread.c (rb_barrier_release): ditto.
-
-Mon Nov 5 08:01:22 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (Init_eval): move #send to Kernel module from BasicObject.
-
-Mon Nov 5 05:17:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser::Switch::summarize): fix for long form
- option with very long argument. a patch from Kobayashi Noritada
- <nori1 AT dolphin.c.u-tokyo.ac.jp> in [ruby-list:44179].
-
-Mon Nov 5 01:20:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (call_args): remove "parenthesize argument(s) for future
- version" warning. when I added this warning, I had a plan to
- reimplement the parser that is simpler than the current one.
- since we abandoned the plan, warning no longer required.
-
-Mon Nov 5 01:02:56 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (HTTPHeader#initialize): provide default
- User-Agent to fix 500 error on some corrupted HTTP servers.
- [ruby-core:13135]
-
-Mon Nov 5 00:32:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_send): allow send/__send__ to call methods of all
- visibility again. we no longer provide __send, __send!.
-
- * eval.c (rb_invoke_method): new method to honor private
- visibility. if it's invoked in a function call style, it calls
- private methods as well (previous 1.9 send behavior).
-
-Mon Nov 5 00:24:24 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub: vendor_ruby support.
-
- * configure.in (RUBY_LIB): duplicated.
-
-Mon Nov 5 00:01:33 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_quote): quote \v as well.
-
-Sun Nov 4 23:51:59 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_initialize_m): use StringValuePtr instead of
- StringValueCStr because \0 exists when Regexp.new("\0").
-
-Sun Nov 4 08:11:19 2007 Tanaka Akira <akr@fsij.org>
-
- * gc.c (count_objects): count TOTAL.
-
-Sun Nov 4 03:58:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (tr_setup_table): use C array for characters that fit
- in a byte to gain performance.
-
- * string.c (rb_str_delete_bang): ditto.
-
- * string.c (rb_str_squeeze_bang): ditto.
-
- * string.c (rb_str_count): ditto.
-
- * string.c (tr_trans): ditto.
-
-Sun Nov 4 00:06:40 2007 Tanaka Akira <akr@fsij.org>
-
- * gc.c (count_objects): ObjectSpace.count_objects implemented.
- [ruby-core:12301]
-
-Sat Nov 3 22:49:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_each_pair): make Hash#each to be alias to
- Hash#each_pair for compatibility and clarity.
-
- * hash.c (env_each_pair): ditto.
-
-Sat Nov 3 22:41:05 2007 Tanaka Akira <akr@fsij.org>
-
- * configure.in: --with-vendor-hdrdir implemented.
-
- * lib/mkmf.rb: check --vendor argument.
-
- * README.EXT: explain --vendor option for extconf.rb
-
- * README.EXT.ja: ditto.
-
-Sat Nov 3 20:30:48 2007 Tanaka Akira <akr@fsij.org>
-
- * configure.in: --with-vendordir implemented.
-
- * mkconfig.rb: add config to vendorlibdir and vendorarchdir.
-
- * instruby.rb: make vendor library directories.
-
- * ruby.c: insert vendor library directories into load path.
-
-Fri Nov 2 20:55:49 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/content.rb, lib/rss/content/, lib/rss/maker/content.rb,
- test/rss/test_content.rb, test/rss/test_maker_content.rb,
- test/rss/rss-testcase.rb (RSS::TestCase): supported
- content:encoded with RSS 2.0.
- Suggested by Sam Lown. Thanks.
-
-Fri Nov 2 20:47:04 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb, test/rss/test_version.rb: 0.2.0 -> 0.2.1.
-
-Thu Nov 1 21:56:45 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (Init_Exception): make NameError to be subclass of
- StandardError again.
-
- * error.c (Init_Exception): make SecurityError to be subclass of
- Exception, since it's too important to be handled implicitly.
-
-Thu Nov 1 14:51:39 2007 David Flanagan <davidflanagan@ruby-lang.org>
- * enum.c (take_while_i, drop_while_i) add RTEST to handle nil return
-
-Thu Nov 1 02:12:50 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (prereq): update the path of prelude.c.
-
- * common.mk (prelude.c): rollback a part of r13675, because it is not
- documented and causes build error.
-
-Thu Nov 1 01:52:23 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * enum.c (enum_drop): fix typo.
-
-Thu Nov 1 01:51:01 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * vm_core.h (ruby_current_thread): RUBY_EXTERN'ed for probeprofiler.
-
-Thu Nov 1 00:46:30 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/configure.bat, setup.mak: now can recognize OS even if
- the ``--target'' option of configure is omitted.
-
- * win32/README.win32: update the descriptions about compiler.
-
-Wed Oct 31 03:13:41 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_take_while): separate with-block form.
-
- * enum.c (drop_while_i): ditto.
-
- * enum.c (enum_butfirst): abandon butfirst method. reverted.
-
-Tue Oct 30 10:03:43 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_butfirst): add a new method to iterates over
- elements but first n. RDoc need to be updated.
-
- * enumerator.c (Init_Enumerator): remove unnecessary symbol
- initialization.
-
-Mon Oct 29 18:42:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (bvar): block-local variable can shadow outer variable.
- [ruby-core:13036]
-
-Mon Oct 29 17:58:16 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_substr): performance improvement. [ruby-dev:31806]
-
-Mon Oct 29 17:20:13 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_replicate): new function to replicate encoding.
-
- * encoding.c (enc_based_encoding): Encoding#base_encoding returns
- based encoding of replica.
-
-Mon Oct 29 17:18:36 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_compatible): ASCII encoding is compatible with
- ASCII-compatible encoding, even for non-string objects.
-
-Sun Oct 28 21:50:02 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb: :redirect option implemented to disable redirects.
- (OpenURI::HTTPRedirect): new exception class for redirection.
-
-Fri Oct 26 17:38:13 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (int_chr): take an optional encoding parameter.
- [ruby-core:12816]
-
-Fri Oct 26 17:14:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (fix_pow): returns 1.0 for 0**0.0.
-
- * numeric.c (fix_pow): returns infinity for 0**-1. [ruby-dev:32084]
-
-Fri Oct 26 15:00:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-style.el (ruby-style-{case,label}-indent): adjust for
- labels inside switch block.
-
-Fri Oct 26 05:48:57 2007 David Flanagan <davidflanagan@ruby-lang.org>
- * array.c: raise IndexError for negative length in rb_ary_fill
-
-Wed Oct 25 07:12:03 2007 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/net/telnet.rb (Net::Telnet#login): Allowing "passphrase" in
- addition to "password" for Telnet login prompts. [ruby-Bugs-10746]
-
-Wed Oct 25 06:34:11 2007 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/net/telnet.rb (Net::Telnet#login): Making the password prompt
- pattern case insensitive. [ruby-Bugs-10746]
-
-Fri Oct 26 04:21:36 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/pop.rb (Net::POP3::do_start): type fixed. a patch from
- Dan Zwell <dzwell AT zwell.net> in [ruby-core:12941].
-
-Fri Oct 26 01:48:28 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_assoc): check and convert inner arrays (assocs)
- using #to_ary.
-
- * hash.c (rb_hash_s_create): check and convert argument hash
- using #to_hash.
-
- * hash.c (rb_hash_s_create): Hash#[] now takes assocs as source of
- hash conversion.
-
-Thu Oct 25 16:46:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_yylex): dot at the head of the line denote line
- continuation from previous one to support fluent interface.
- [experimental]
-
- * misc/ruby-mode.el (ruby-calculate-indent): support fluent dot.
-
-Thu Oct 25 14:19:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_tell, rb_io_seek): check errno too. [ruby-dev:32093]
-
-Thu Oct 25 13:59:53 2007 David Flanagan <davidflanagan@ruby-lang.org>
-
- * parse.y (parser_tokspace): increment tokidx
- fixes test failure at [test/ruby/test_stringchar.rb:72]
-
-Thu Oct 25 09:49:49 2007 akira yamada <akira@ruby-lang.org>
-
- * lib/uri.rb, lib/uri/ldaps.rb: added LDAPS
- scheme. [ruby-dev:31896]
-
-Wed Oct 25 06:23:14 2007 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/xmlrpc/parser.rb (XMLRPC::Convert::dateTime): Fixing a bug that
- caused time zone conversion to fail for some ISO 8601 date formats.
- [ruby-Bugs-12677]
-
-Wed Oct 25 04:59:28 2007 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/xmlrpc/client.rb (XMLRPC::Client#do_rpc): Explicitly start
- the HTTP connection to support keepalive requests. [ruby-Bugs-9353]
-
-Wed Oct 25 04:46:53 2007 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/xmlrpc/client.rb (XMLRPC::Client#do_rpc): Improving the error
- message for Content-Type check failures. [ruby-core:12163]
-
-Wed Oct 25 03:45:08 2007 James Edward Gray II <jeg2@ruby-lang.org>
-
- * lib/xmlrpc/utils.rb (XMLRPC::ParseContentType#parse_content_type):
- Making Content-Type checks case insensitive. [ruby-Bugs-3367]
-
-Wed Oct 24 17:09:39 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_tokspace): make space in token buffer.
-
- * parse.y (parser_yylex): fix encoding of single character literal.
-
-Tue Oct 23 13:44:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (call_args2): nd_head of NODE_BLOCK_PASS should be a list.
- [ruby-core:12850]
-
-Tue Oct 23 10:42:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): encoding set by command line option takes
- priority over the encoding in the source, as the primary encoding.
-
-Mon Oct 22 19:24:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (proc_options): allow space after -E (encoding) option.
-
-Mon Oct 22 11:03:09 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (enc_check_encoding): returns index now.
-
- * encoding.c (rb_enc_compatible): check if two objects have compatible
- encodings.
-
- * encoding.c (enc_compatible_p): added Encoding.compatible?.
-
- * include/ruby/encoding.h (rb_enc_compatible): prototype.
-
-Sun Oct 21 18:29:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_default, rb_enc_primary): return pointers to
- rb_encoding of default and primary respectively. [ruby-core:12795]
-
- * encoding.c (set_primary_encoding): removed primary_encoding setter.
-
-Sat Oct 20 13:17:01 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_cycle): hide temporary array from ObjectSpace.
- [ruby-core:12762]
-
-Sat Oct 20 11:49:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_get_path): returns frozen string.
-
- * file.c (rb_file_s_chown, rb_file_s_lchown): use uid_t and gid_t.
-
-Fri Oct 19 20:08:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_id_encoding): returns ID "encoding".
-
- * marshal.c (w_encoding): dump encoding name.
-
- * marshal.c (r_ivar): load encoding.
-
-Fri Oct 19 16:41:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_regx_options, reg_compile_gen): relaxened encoding
- matching rule.
-
- * re.c (rb_reg_initialize): always set encoding of Regexp.
-
- * re.c (rb_reg_initialize_str): fix encoding for non 7bit-clean
- strings.
-
- * re.c (rb_reg_initialize_m): use ascii encoding for 'n' option.
-
-Fri Oct 19 11:09:56 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_options): set primary encoding from the parser
- always. [ruby-core:12758]
-
- * ruby.c (load_file): should not discard the parser parameter.
-
-Fri Oct 19 10:55:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * range.c (range_last): removed unused variables.
-
-Thu Oct 18 17:08:57 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_find_index): update RDoc. a patch from David Flanagan
- <david AT davidflanagan.com> in [ruby-core:12710].
-
- * enum.c (enum_take, enum_drop): ditto.
-
- * enum.c (enum_cycle): should not cause infinite loop for empty
- arrays. [ruby-core:12710]
-
- * range.c (Init_Range): typo fixed.
-
-Thu Oct 18 16:39:34 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rexml/source.rb (REXML::SourceFactory::SourceFactory): more
- duck typed. better performance on JRuby.
- http://headius.blogspot.com/2007/10/another-performance-discovery-rexml.html
-
-Thu Oct 18 09:33:25 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_first): takes first n element if argument is
- given. [ruby-core:12697]
-
- * range.c (range_last): returns last n elements if argument is
- given.
-
- * array.c (rb_ary_subseq, rb_ary_last): export.
-
-Wed Oct 17 17:39:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): fixed reversed condition. [ruby-core:12722]
-
-Wed Oct 17 13:54:28 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_s_union): the last check was not complete.
-
-Wed Oct 17 11:30:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_from_encoding, rb_enc_register): associate index
- to self.
-
- * encoding.c (enc_capable): Encoding objects are encoding capable.
-
- * re.c (rb_reg_s_union): check if encoding matching by exact encoding
- objects.
-
-Wed Oct 17 06:18:06 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_alias, rb_enc_find_index): changed
- enc_table_alias to a name-to-index hash.
-
- * encoding.c (rb_enc_init): use upper case names for aliases to use as
- constant names.
-
- * encoding.c (enc_find): allow symbols.
-
- * encoding.c (Init_Encoding): define encoding constants.
-
- * st.c (strcasehash): fix wrong code range condition.
-
-Wed Oct 17 05:07:18 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_primary_encoding): added Encoding.primary_encoding.
-
- * parse.y (rb_parser_encoding): added.
-
- * ruby.c (proc_options): added -E and --encoding options.
-
- * ruby.c (process_options): set primary encoding from command line
- option if set, or source encoding.
-
- * include/ruby/encoding.h (rb_enc_from_encoding,
- rb_get_primary_encoding, rb_set_primary_encoding): prototypes.
-
- * include/ruby/node.h (rb_parser_encoding): prototype.
-
-Wed Oct 17 03:37:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_reg_desc): set encoding.
-
- * re.c (rb_reg_s_union): check encodings.
-
- * enc/utf8.c (utf8_code_to_mbclen): 0xfe and 0xff are valid Unicode to
- be encoded to 2bytes in UTF-8. [ruby-core:12700]
-
-Wed Oct 17 02:50:49 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_ord): use encoding.
-
-Wed Oct 17 01:57:06 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_reg_initialize_m): allow binary encoding option.
- [ruby-dev:32083]
-
-Tue Oct 16 19:48:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_reg_s_union): check for encoding of original object.
-
-Tue Oct 16 18:28:51 2007 Tanaka Akira <akr@fsij.org>
-
- * debug.c: use enum for constants for gdb if possible.
-
-Tue Oct 16 18:20:10 2007 Tanaka Akira <akr@fsij.org>
-
- * ruby.c, debug.c: move debug enum and constants to debug.c.
-
-Tue Oct 16 18:16:15 2007 Tanaka Akira <akr@fsij.org>
-
- * ruby.c (RUBY_ENCODING_SHIFT): added as enum.
-
- * .gdbinit (rp): show encoding and coderange for strings.
-
-Tue Oct 16 14:48:38 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_regx_options): check if regexp encoding option
- matches to current encoding.
-
- * re.c (char_to_option, rb_char_to_option_kcode): 'n' is not kcode
- option now.
-
- * re.c (rb_reg_to_s, rb_reg_error_desc): copy encoding rather than
- append as an option.
-
- * re.c (make_regexp, rb_reg_prepare_re): use encoding of Regexp and
- String instead of kcode.
-
- * re.c (rb_reg_initialize): set fixed option if none is set.
-
- * re.c (rb_reg_regcomp): ditto.
-
- * re.c (rb_reg_equal): check if encodings are equal.
-
- * re.c (rb_reg_initialize_m): encoding option is obsolete.
-
- * re.c (rb_kcode, rb_get_kcode, rb_set_kcode): removed.
-
- * re.c (Init_Regexp): removed Regexp#kcode method.
-
- * ruby.c (proc_options): allow long encoding name.
-
-Tue Oct 16 14:03:09 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_s_union): encoding of all regexp objects should
- match. [ruby-dev:32076]
-
-Tue Oct 16 13:49:41 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (enc_to_s): rename function.
-
-Tue Oct 16 13:25:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_new4): should copy encoding. a patch from NARUSE,
- Yui <naruse AT airemix.com>. [ruby-dev:32076]
-
-Tue Oct 16 01:31:23 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_inject): RDoc update. a patch from David Flanagan
- <david AT davidflanagan.com> in [ruby-core:12710].
-
-Tue Oct 16 01:25:40 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (Init_Encoding): define #to_s to show encoding name
- in to_s representation as well as #inspect.
-
-Mon Oct 15 13:24:08 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_round): should be number but not rounding factor.
- [ruby-dev:32060]
-
-Mon Oct 15 11:45:12 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (r_bytes0): refined length check. [ruby-dev:32059]
-
-Mon Oct 15 10:24:19 2007 Tanaka Akira <akr@fsij.org>
-
- * process.c (pst_to_s): returns a string such as "pid 10220 exit 1"
- instead of "256". [ruby-dev:32053]
- (pst_inspect): change format
- "#<Process::Status: pid=10220,exited(1)>" to
- "#<Process::Status: pid 10220 exit 1>".
-
-Mon Oct 15 09:58:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (r_bytes0): check if source has enough data.
- [ruby-dev:32054]
-
-Mon Oct 15 01:15:09 2007 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (s_accept_nonblock): make accepted fd
- nonblocking. [ruby-talk:274079]
-
-Sun Oct 14 17:31:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_obj_encoding): rdoc update. a patch from David
- Flanagan <david AT davidflanagan.com>. [ruby-core:12664]
-
- * encoding.c (enc_dump, enc_load): marshaling feature. a patch from
- David Flanagan. [ruby-core:12665]
-
- * encoding.c (Init_Encoding): undefine allocator of Encoding.
- [ruby-core:12665], [ruby-core:12666]
-
- * test/ruby/test_encoding.rb: tests for Encoding from David Flanagan
- [ruby-core:12665]
-
-Sun Oct 14 11:09:09 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/pp.rb (PP::PPMethods#pp_hash): don't sort keys because hash is
- ordered.
- (ENV.pretty_print): call pp_hash with sorted hash.
-
-Sun Oct 14 04:08:34 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (AC_SYS_LARGEFILE): keep results also in command
- options, to vail out of mismatch. [ruby-list:44114]
-
- * mkconfig.rb, lib/mkmf.rb (configuration): add DEFS.
-
-Sun Oct 14 03:55:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/mkexports.rb: deal with __fastcall name decorations.
- [ruby-list:44111]
-
-Sun Oct 14 02:20:40 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_cEncoding): new Encoding class.
-
- * encoding.c (rb_to_encoding, rb_to_encoding_index): helper functions.
-
- * encoding.c (rb_obj_encoding): return Encoding object now.
-
- * gc.c (garbage_collect): mark Encoding objects.
-
- * inits.c (rb_call_inits): call Init_Encoding.
-
- * string.c (rb_str_force_encoding): accept Encoding object as well as
- encoding name.
-
- * include/ruby/encoding.h (rb_to_encoding_index, rb_to_encoding):
- prototypes.
-
-Sun Oct 14 01:03:30 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb (OpenURI.open_http): fix :ssl_ca_cert option.
-
-Sat Oct 13 21:23:21 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (foletype_s_ole_classes,
- foletype_s_typelibs): refactoring.
-
- * test/win32ole/test_win32ole_type.rb: add some test.
-
- * ext/win32ole/win32ole.c (Init_win32ole): change method name
- WIN32OLE_TYPELIB.ole_types from WIN32OLE_TYPELIB.ole_classes.
-
- * test/win32ole/test_win32ole_typelib.rb: ditto.
-
- * test/win32ole/test_folderitem2_invokeverb.rb: check create
- shortcut string more strictly (This test is invoked in Japanese
- Windows environment).
-
-Sat Oct 13 09:11:58 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (set_file_encoding): case-insensitive search, a patch from
- David Flanagan <david AT davidflanagan.com> [ruby-core:12629]
-
-Sat Oct 13 09:02:16 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * {bcc,win}32/mkexports.rb: explicit data. [ruby-list:44108]
-
-Sat Oct 13 00:17:49 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rexml/document.rb (REXML::Document::write): leaky
- modification trans -> transitive. [ruby-dev:32040]
-
-Sat Oct 13 00:00:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: encoding specifier should work if the line matches
- /coding[:=] ?/, a la Python PEP-263, so that VIM comments like
- "# vim: set fileencoding=<encoding name>" should be recognized.
-
-Fri Oct 12 15:04:54 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (magic_comments): add "encoding" as same as "coding".
-
- * parse.y (set_file_encoding): special file encoding handling.
-
- * parse.y (parser_yylex): ditto.
-
-Fri Oct 12 12:44:11 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_combination): fixed memory corruption due to too
- small memory allocation
-
- * array.c (rb_ary_product): accessing out of memory bounds.
- condition fixed.
-
-Fri Oct 12 11:22:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (match_values_at): make #select to be alias to #values_at
- to adapt RDoc description. [ruby-core:12588]
-
-Thu Oct 11 21:10:17 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/node.h (NOEX_LOCAL): remove unused local visibility.
-
- * class.c (ins_methods_push): ditto.
-
- * class.c (rb_class_local_methods): method removed.
-
-Thu Oct 11 14:29:31 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * */Makefile.sub (COMMON_MACROS): workaround for old SDK's bug.
- [ruby-core:12584]
-
-Thu Oct 11 06:35:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, */Makefile.sub (VPATH): add enc directory.
-
- * common.mk (ENCOBJS): encoding objects.
-
- * enc: directory for encodings.
-
-Thu Oct 11 00:04:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/oniguruma.h (OnigEncodingTypeST): add OnigEncoding
- parameter to every function members.
-
- * include/ruby/oniguruma.h (OnigEncodingTypeST): add auxiliary
- data member to provide user defined data for an encoding.
-
-Wed Oct 10 23:32:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_s_quote): no longer takes optional second argument
- that has never been documented.
-
-Wed Oct 10 15:39:04 2007 Tanaka Akira <akr@fsij.org>
-
- * encoding.c (rb_enc_init): don't alias iso-8859-1 to ascii.
-
- * ascii.c (OnigEncodingASCII): change the name US-ASCII to ASCII-8BIT.
-
-Wed Oct 10 14:31:05 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_enc_str_coderange): fixed check for non-ascii.
-
-Tue Oct 9 21:35:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_permutation, rb_ary_combination): missing type
- names.
-
- * array.c (rb_ary_permutation): used buffer should be t1.
-
- * array.c (rb_ary_permutation): use frozen shared hidden array.
- [ruby-dev:31985]
-
-Tue Oct 9 16:58:10 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c: remove to_a completely.
-
- * array.c (tmpbuf): keep DRY to clear klass of temporary objects.
-
-Tue Oct 9 16:33:32 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_permutation, rb_ary_combination, rb_ary_product):
- hide internal buffer objects. [ruby-dev:31982]
-
-Tue Oct 9 16:00:32 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (parser_read_escape, parser_tokadd_escape): check code range.
- [ruby-dev:31980]
-
-Tue Oct 9 15:40:24 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (STR_NEW3): check for if single byte sequence.
-
-Mon Oct 8 20:06:29 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/net/imap.rb, lib/net/smtp.rb, lib/net/pop.rb: hostname should
- be verified against server's identity as presented in the server's
- certificate. [ruby-dev:31960]
-
- * ext/openssl/lib/net/telnets.rb, ext/openssl/lib/net/ftptls.rb: ditto.
-
-Sun Oct 7 22:37:47 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rss/test_taxonomy.rb, test/rss/test_parser_1.0.rb,
- test/rss/test_image.rb, test/rss/rss-testcase.rb: ensured
- declaring XML namespaces.
-
-Sun Oct 7 22:00:01 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/node.h: make node flags as VALUE type.
- enum ruby_node_flags removed.
-
- * ruby.c: define RUBY_NODE_* as const for gdb.
-
-Sun Oct 7 18:57:12 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h: enum ruby_value_flags removed. [ruby-dev:31959]
-
- * ruby.c: define RUBY_FL_* as const VALUE for gdb.
-
-Sun Oct 7 17:50:14 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/net/http.rb: remove enable_post_connection_check flag.
-
- * lib/open-uri.rb: ditto.
-
-Sun Oct 7 15:48:40 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def (opt_eq): fix to use rb_str_equal().
-
-Sat Oct 6 23:14:54 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_to_i): update RDoc since base can be any value
- between 2 and 36. [ruby-talk:272879]
-
-Sat Oct 6 16:24:02 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (cont_free): check Fiber or Continuation.
-
- * bootstraptest/test_knownbug.rb: remove a fixed test.
-
-Sat Oct 6 14:56:02 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_register): returns new index or -1 if failed.
-
- * encoding.c (rb_enc_alias): check if original name is registered.
-
- * encoding.c (rb_enc_init): register in same order as kcode options in
- re.c. added new aliases.
-
- * string.c (rb_str_force_encoding): check if valid encoding name.
-
-Sat Oct 6 14:32:30 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def (opt_eq): get rid of gcc bug.
-
-Sat Oct 6 02:34:18 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/defines.h: no longer provide DEFAULT_KCODE.
-
-Fri Oct 5 21:24:59 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (rb_reg_s_union_m): Regexp.union accepts single argument which
- is an array of patterns. [ruby-list:44084]
-
-Fri Oct 5 16:42:27 2007 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (assert_not_match): new method.
-
-Fri Oct 5 16:15:52 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * configure.in: Turn on --enable-pthread by default for FreeBSD
- 5.2.1-RELEASE and later, and remove pthread support for older
- versions which has never worked perfectly.
-
-Fri Oct 5 16:11:50 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * time.c (time_to_s): Fix documentation. Time format changed.
-
-Fri Oct 5 04:02:39 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/ipaddr.rb (in_addr, in6_addr, addr_mask): Make some minor
- code optimization.
-
-Fri Oct 5 03:25:51 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/ipaddr.rb (<=>): Implement IPAddr#<=> and make IPAddr
- comparable.
-
- * lib/ipaddr.rb (succ): Implement IPAddr#succ. You can now create
- a range between two IPAddr's, which (Range) object is
- enumerable.
-
- * lib/ipaddr.rb (to_range): A new method to create a Range object
- for the (network) address.
-
-Fri Oct 5 03:14:45 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/ipaddr.rb (coerce_other): Support type coercion and make &,
- |, == and include? accept a string or an integer instead of an
- IPAddr object as the argument.
-
- * lib/ipaddr.rb (initialize): Give better error messages.
-
- * lib/ipaddr.rb: Improve documentation.
-
-Thu Oct 4 20:45:53 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (Init_process): win32 has our own WNOHANG definition, so
- remove unnecessary #ifdef guard.
-
-Thu Oct 4 20:17:19 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * array.c (rb_ary_permutation, rb_ary_product): support non C99
- compilers.
-
-Thu Oct 4 17:33:18 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (kcode_setter): Perl-ish global variable `$=' no longer
- effective.
-
- * io.c (Init_IO): remove obsolete variables: $defout, $deferr.
-
- * re.c (Init_Regexp): remove obsolete const alias: MatchingData.
-
- * time.c (Init_Time): remove obsolete Time::times.
-
- * re.c (ignorecase_setter): change warning message.
-
- * re.c (ignorecase_getter): now gives warning.
-
- * string.c (rb_str_cmp_m): update RDoc document.
-
- * re.c (kcode_setter): restore erroneously removed setter.
-
-Thu Oct 4 16:28:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_obj_encoding): returns encoding of the given object.
-
- * parse.y (reg_compile_gen): copy encoding from source string if
- non-empty.
-
- * re.c (Init_Regexp): new method Regexp#encoding.
-
- * string.c (str_encoding): moved to encoding.c
-
-Thu Oct 4 15:49:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_permutation): remove C99 dependency.
- [ruby-dev:31934]
-
- * array.c (rb_ary_product): ditto.
-
-Wed Oct 3 23:37:17 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/nkf/nkf.c, bin/ri, bin/irb: fixed typos in doc and comments.
- a patch from Eugene Ossintsev <eugoss AT gmail.com>.
- [ruby-core:12375]
-
-Wed Oct 3 17:56:22 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/driver.rb: enable specify label to executable.
- (-e "ruby1::/path/to/ruby1; ruby2::/path/to/ruby2; ...")
-
-Wed Oct 3 16:58:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_str_new, parser_yylex, rb_intern3): set code-range
- bits.
-
- * parse.y (parser_tokadd_string): check code-range.
-
- * parse.y (parser_parse_string, parser_here_document): ditto.
-
- * parse.y (parser_set_encode): check if valid encoding.
-
-Wed Oct 3 15:43:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_cvar_set): check whether class variable is
- defined in superclasses. root classes have higher priority.
- removes lower class variable entry from IV_TBL (if it's defined
- in classes, not modules).
-
- * variable.c (rb_cvar_get): ditto.
-
-Wed Oct 3 10:06:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_process_options): push frame with program name.
- [ruby-core:12351]
-
-Tue Oct 2 20:16:55 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (init_env): refactoring. remove unused code.
-
-Tue Oct 2 12:30:40 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_product): generalized product, now takes
- arbitrary number of arrays. a patch from David Flanagan
- <david AT davidflanagan.com>. [ruby-core:12346]
-
-Tue Oct 2 08:25:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_permutation): implementation contributed from
- David Flanagan. [ruby-core:12344]
-
- * array.c (rb_ary_combination): RDoc update to clarify. a patch
- from David Flanagan. [ruby-core:12344]
-
- * array.c (rb_ary_permutation): small dirty hack by Matz to avoid
- arrays on stack.
-
-Tue Oct 2 07:01:05 2007 Koichi Sasada <ko1@atdot.net>
-
- * proc.c (proc_dup): proc->block.proc should be self.
-
- * bootstraptest/test_knownbug.rb, test_method.rb:
- move a fixed test.
-
-Mon Oct 1 16:17:44 2007 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/test_method.rb: use assert_normal_exit to test
- [ruby-dev:31818].
-
-Mon Oct 1 15:57:49 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (id2ref): skip ICLASS.
-
-Mon Oct 1 15:29:35 2007 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (assert_normal_exit): use `` instead of
- system.
-
-Mon Oct 1 15:17:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (id2ref): T_VALUES is less than T_BLOCK. [ruby-dev:31911]
-
-Mon Oct 1 10:58:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (require_libraries): use require method instead of calling
- rb_require directly. [ruby-dev:31322]
-
-Mon Oct 1 10:52:30 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_options), ruby.c (proc_options, process_options): not
- call exit(2) directly. [ruby-dev:31912]
-
- * eval.c (ruby_run_node): deal with direct exit code.
-
-Sun Sep 30 17:12:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_append): always set encoding, and coderange
- cache bits.
-
- * include/ruby/encoding.h (ENC_CODERANGE_SET): fixed a bug not to
- set cache bits.
-
-Sun Sep 30 11:52:11 2007 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (pretty): don't show beginning empty line.
-
-Sun Sep 30 11:32:34 2007 Tanaka Akira <akr@fsij.org>
-
- * numeric.c: use #ifdef for test LONG_LONG_VALUE.
-
-Sun Sep 30 04:30:55 2007 Tanaka Akira <akr@fsij.org>
-
- * bignum.c: use SIZEOF_LONG instead of SIZEOF_ULONG which is not
- defined.
-
-Sun Sep 30 04:03:43 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (Init_Regexp): test DEFAULT_KCODE in C code because
- KCODE_EUC, etc. are enum.
-
-Sun Sep 30 00:55:40 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * variable.c (obj_ivar_each): get rid of warning.
-
-Sat Sep 29 17:45:22 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * main.c (main): use platform-independent per-process initialization.
- [ruby-dev:31900]
-
- * ruby.c (ruby_sysinit): new function for per-process initialization.
-
- * include/ruby/ruby.h (RUBY_GLOBAL_SETUP): toplevel setup declaration.
-
- * include/ruby/win32.h, win32/mkexports.rb: alias NtInitialize
- ruby_sysinit.
-
- * win32/win32.c (rb_w32_sysinit): renamed from NtInitialize.
-
-Sat Sep 29 17:31:04 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_combination): new method to give all combination
- of elements from an array. [ruby-list:42671]
-
- * array.c (rb_ary_product): a new method to get all combinations
- of elements from two arrays. can be extended to combinations of
- n-arrays, e.g. a.product(b,c,d). anyone volunteer?
-
- * array.c (rb_ary_permutation): empty function body to calculate
- permutations of array elements. need volunteer.
-
-Sat Sep 29 17:14:44 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (r_leave): move proc invocation from r_entry() to
- avoid potential crash.
-
-Sat Sep 29 12:28:08 2007 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (assert_normal_exit): new method.
-
- * bootstraptest/test_knownbug.rb: add test for Marshal.load.
-
-Sat Sep 29 10:12:20 2007 Tanaka Akira <akr@fsij.org>
-
- * variable.c (rb_ivar_set): fix class instance variable.
-
- * object.c (rb_class_real): cl argument may be 0.
-
-Sat Sep 29 09:12:02 2007 Tanaka Akira <akr@fsij.org>
-
- * object.c (rb_class_real): use BUILTIN_TYPE instead of TYPE.
- access flags directly instead of FL_TEST.
- they are enough because cl argument is a class.
-
-Sat Sep 29 08:57:15 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/win32.h (strcasecmp): needed for type_strcasehash.
-
-Sat Sep 29 06:47:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (struct cmdline_options): static variables packed.
-
-Sat Sep 29 05:29:30 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_fdopen): create IO object from fd.
-
- * parse.y (yycompile): use encoding of the source as default.
-
- * ruby.c (proc_options, load_file): ditto.
-
-Sat Sep 29 04:27:08 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_alias): allow encodings multiple aliases.
-
- * encoding.c (rb_enc_find_index): search the encoding which has the
- given name and return its index if found, or -1.
-
- * st.c (type_strcasehash): case-insensitive string hash type.
-
- * string.c (rb_str_force_encoding): force encoding of self. this name
- comes from [ruby-dev:31894] by Martin Duerst. [ruby-dev:31744]
-
- * include/ruby/encoding.h (rb_enc_find_index, rb_enc_associate_index):
- prototyped.
-
- * include/ruby/encoding.h (rb_enc_isctype): direct interface to ctype.
-
- * include/ruby/st.h (st_init_strcasetable): prototyped.
-
-Sat Sep 29 03:53:26 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: Thread local storage should be fiber local.
-
- * bootstraptest/test_knownbug.rb, test/ruby/test_fiber.rb:
- move a fixed test.
-
-Fri Sep 28 23:15:31 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * insnhelper.ci (vm_call_method): allow send! to call protected
- methods as well. [ruby-core:12280]
-
-Fri Sep 28 22:33:47 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/bm_so_fasta.rb: added.
-
- * benchmark/bm_so_k_nucleotide.rb: added.
-
- * benchmark/bm_so_reverse_complement.rb: added.
-
- * benchmark/make_fasta_output.rb: added.
-
- * benchmark/prepare_so_k_nucleotide.rb: added.
-
- * benchmark/prepare_so_reverse_complement.rb: added.
-
-Fri Sep 28 19:14:51 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/driver.rb: fix notations.
-
- * benchmark/bm_loop_whileloop.rb: ditto.
-
- * benchmark/bm_loop_whileloop2.rb: ditto.
-
- * benchmark/bm_app_uri.rb: added.
-
- * benchmark/bm_vm1_ivar_set.rb: ditto.
-
- * benchmark/bm_so_binary_trees.rb: added from Computer Language
- Benchmarks Game (http://shootout.alioth.debian.org/).
-
- * benchmark/bm_so_fannkuch.rb: ditto.
-
- * benchmark/bm_so_mandelbrot.rb: ditto.
-
- * benchmark/bm_so_meteor_contest.rb: ditto.
-
- * benchmark/bm_so_nbody.rb: ditto.
-
- * benchmark/bm_so_nsieve.rb: ditto.
-
- * benchmark/bm_so_nsieve_bits.rb: ditto.
-
- * benchmark/bm_so_partial_sums.rb: ditto.
-
- * benchmark/bm_so_pidigits.rb: ditto.
-
- * benchmark/bm_so_spectralnorm.rb: ditto.
-
-Fri Sep 28 16:22:52 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm_core.h (rb_vm_struct): fix typo: bufferd -> buffered.
-
-Fri Sep 28 15:47:48 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/driver.rb: fix to output benchmark results
- to file "bmlog-#{Time.now.strftime('%Y%m%d-%H%M%S')}.#{$$}".
-
- * benchmark/bm_io_file_create.rb: remove useless codes.
-
- * benchmark/bm_vm2_eval.rb: added.
-
-Fri Sep 28 15:05:24 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h: export rb_ivar_foreach.
-
- * include/ruby/ruby.h: modify struct RObject and RClass for optimizing
- T_OBJECT space. [ruby-dev:31853]
- (ROBJECT_LEN, ROBJECT_PTR)
- (RCLASS_IV_TBL, RCLASS_M_TBL, RCLASS_SUPER, RCLASS_IV_INDEX_TBL)
- (RMODULE_IV_TBL, RMODULE_M_TBL, RMODULE_SUPER): abstract accessor
- defined.
-
- * variable.c: support the modified RObject and RClass.
-
- * object.c: ditto.
-
- * class.c: ditto.
-
- * gc.c: ditto.
-
- * marshal.c: ditto.
-
- * eval_method.ci: use the abstract accessor.
-
- * insns.def: ditto.
-
- * proc.c: ditto.
-
- * struct.c: ditto.
-
- * eval.c: ditto.
-
- * error.c: ditto.
-
- * vm.c: ditto.
-
- * insnhelper.ci: ditto.
-
- * ext/digest/digest.c: ditto.
-
-Fri Sep 28 13:20:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_getline_fast, rb_io_getline_1): set encoding to the
- result string, as well as getc.
-
-Fri Sep 28 12:51:42 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/bm_app_erb.rb: added.
-
- * benchmark/bm_io_file_(create|read|write).rb: added.
-
-Fri Sep 28 12:49:05 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/driver.rb: fix file selection algorithm.
-
-Fri Sep 28 02:05:42 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_comparable): need not to check asciicompat here.
-
- * encoding.c (rb_enc_check): ditto.
-
- * string.c (rb_enc_str_coderange): tuned a bit; no broken check.
-
- * encoding.c (rb_enc_check): new encoding comparison criteria.
-
-Thu Sep 27 17:36:28 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/REAMDE.win32: follow recent changes.
-
-Thu Sep 27 16:01:53 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/driver.rb: fix to output some helpful messages.
-
-Thu Sep 27 15:44:51 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/driver.rb: added.
-
- * common.mk: fix to use above driver.
-
- * benchmark/prepare_so_count_words.rb: added.
-
- * benchmark/bm_so_count_words.rb: fix benchmark process.
-
-Thu Sep 27 15:42:34 2007 Koichi Sasada <ko1@atdot.net>
-
- * ext/fiber/fiber.c: modify prototype declaration.
- [ruby-core:12247]
-
-Thu Sep 27 09:42:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (strings, xstring, regexp, dsym): empty strings have
- US-ASCII encoding.
-
-Thu Sep 27 07:39:13 2007 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (assert_finish): new method.
-
- * bootstraptest/test_knownbug.rb: add test for [ruby-dev:31866] using
- assert_finish.
-
-Thu Sep 27 04:46:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_associate_index): deal with ASCII compatible
- flags.
-
- * encoding.c (rb_enc_check): allow ASCII compatible strings.
-
- * parse.y (rb_intern_str): use ASCII encoding for ASCII string.
-
- * string.c (rb_enc_str_coderange): check for code-range.
-
- * string.c (rb_str_modify): clear code-range flags.
-
- * string.c (rb_str_hash, rb_str_eql): ASCII compatible strings are
- comparable.
-
- * include/ruby/encoding.h: added code-range flags.
-
-Thu Sep 27 04:40:47 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_mark_set): new function to mark keys.
-
- * marshal.c (struct dump_arg, struct load_arg): added wrappers to mark
- data and compat_tbl entries. [ruby-dev:31870]
-
-Thu Sep 27 03:17:41 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_waitpid): no needs to poll. [ruby-dev:31871]
-
-Wed Sep 26 20:11:46 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb: remove a fixed test.
-
-Wed Sep 26 20:00:12 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb: move fixed tests.
-
- * bootstraptest/test_method.rb: ditto.
-
- * test/ruby/test_io.rb: ditto.
-
-Wed Sep 26 19:36:26 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (eval): fix to check stack overflow.
- [ruby-dev:31850]
-
- * eval_intern.h, vm.h: move CHECK_STACK_OVERFLOW() macro.
-
-Wed Sep 26 19:27:11 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_throw): fix to move increment point.
- [ruby-dev:31840]
-
-Wed Sep 26 19:23:56 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: Fiber as SemiCoroutine on default. [ruby-core:12146]
-
- * ext/fiber/fiber.c: enable Fiber#transfer.
-
-Wed Sep 26 18:38:41 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_check): check for ASCII-compatibilities.
-
- * parse.y (parser_tokadd_string, parser_parse_string,
- parser_here_document, parser_yylex): set encoding to US-ASCII.
-
- * parse.y (rb_enc_symname_p): check if valid with encoding.
-
- * parse.y (rb_intern3): let symbols have encoding.
-
- * string.c (rb_str_hash): add encoding index.
-
- * string.c (rb_str_comparable, rb_str_equal, rb_str_eql): check if
- compatible encoding.
-
- * string.c (sym_inspect): made encoding aware.
-
- * insns.def (opt_eq): compare with encoding.
-
- * include/ruby/encoding.h (rb_enc_asciicompat): check if ASCII
- compatible.
-
- * include/ruby/encoding.h (rb_enc_get_index): added prototype.
-
- * include/ruby/intern.h (rb_str_comparable, rb_str_equal): ditto.
-
-Wed Sep 26 15:01:16 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_method.ci (rb_get_alloc_func): cast to suppress a warning.
-
- * eval_method.ci (remove_method): local variable to be initialized.
-
-Wed Sep 26 08:36:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (ext/extinit.o): use $(OUTFLAG) as well as other
- objects. [ruby-Bugs-14228]
-
-Wed Sep 26 05:12:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yyerror): limit error message length.
- [ruby-dev:31848]
-
-Tue Sep 25 15:11:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_ungetc): reallocate internal buffer if pushing data
- excess capacity. [ruby-dev:31650]
-
-Tue Sep 25 13:43:03 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval_method.ci (remove_method): should not remove undef place
- holder. [ruby-dev:31816], [ruby-dev:31817]
-
-Tue Sep 25 09:51:31 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_longjmp): source file information may be NULL.
- [ruby-dev:31849]
-
- * eval.c (ruby_finalize_0): clear trace_func before finalization.
-
-Mon Sep 24 22:36:13 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_equal): should handle recursive array.
-
- * hash.c (hash_equal): should handle recursive hash.
-
-Mon Sep 24 22:14:13 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/weakref.rb (WeakRef): remove debug print. [ruby-dev:31799]
-
- * hash.c (hash_i): avoid too frequent hash conflict where key and
- value are same. a patch from Yusuke ENDOH <mame AT tsg.ne.jp>.
- [ruby-dev:31802]
-
-Mon Sep 24 17:56:21 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/strscan/strscan.c (strscan_initialize, strscan_getch): use the
- encoding of the target string instead of setting to StringScanner
- instance. [ruby-dev:31831]
-
-Mon Sep 24 16:52:11 2007 Urabe Shyouhei <shyouhei@ruby-lang.org>
-
- * lib/net/http.rb: fix typo.
-
-Mon Sep 24 06:49:15 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/net/http.rb: an SSL verification (the server hostname should
- be matched with its certificate's commonName) is added.
- this verification can be skipped by
- "Net::HTTP#enable_post_connection_check=(false)".
- suggested by Chris Clark <cclark at isecpartners.com>
-
- * lib/net/open-uri.rb: use Net::HTTP#enable_post_connection_check to
- perform SSL post connection check.
-
- * ext/openssl/lib/openssl/ssl.c
- (OpenSSL::SSL::SSLSocket#post_connection_check): refine error message.
-
-Sun Sep 23 09:05:05 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (os_obj_of, os_each_obj): hide objects to be finalized.
- [ruby-dev:31810]
-
-Sun Sep 23 08:58:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_method.ci (rb_attr): should not use alloca for unknown size
- input. [ruby-dev:31818]
-
- * parse.y (rb_intern_str): prevent str from optimization.
-
-Sun Sep 23 06:16:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_method.ci (remove_method): check for undefined method.
- [ruby-dev:31816]
-
-Sun Sep 23 05:42:35 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * lib/rdoc/options.rb (Options::check_diagram): dot -V output
- changed. [ ruby-Bugs-11978 ], Thanks Florian Frank.
-
-Sat Sep 22 06:02:11 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser::List::summarize): use each_line if
- defined rather than each. [ruby-Patches-14096]
-
-Sat Sep 22 05:19:49 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_init): separate from strio_initialize
- to share with strio_reopen properly. [ruby-Bugs-13919]
-
-Fri Sep 21 14:51:40 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (gc_mark_rest): copy just used part.
-
- * gc.c (gc_mark_children): mark u1 and u2 of NODE_ARGSCAT.
-
- * gc.c (os_obj_of): hide T_VALUES too. [ruby-dev:31804]
-
- * gc.c (run_final): freeze temporary argument array.
-
-Fri Sep 21 04:58:39 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-style.el (ruby-style-label-indent): fix for function top
- level labels.
-
-Fri Sep 21 02:11:22 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_match_m): evaluate a block if match. it would make
- condition statement much shorter, if no else clause is needed.
-
- * string.c (rb_str_match_m): ditto.
-
-Fri Sep 21 02:02:34 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (hash_equal): should call rb_eql when argument eql is set.
-
-Thu Sep 20 17:28:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (popen_exec), process.c (rb_spawn): stop other threads before
- exec. [ruby-core:08262]
-
-Tue Sep 18 22:08:42 2007 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/matrix.rb: fix a coerce bug of Vector. [ruby-core: 12190]
-
-Mon Sep 17 21:06:03 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (HTTP::GenericRequest#initialize): check path is
- not nil. [ruby-dev:31149]
-
-Mon Sep 17 21:00:51 2007 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (ripper): rename event: arglist_* -> args_*.
-
- * parse.y (ripper): rename event: restparam -> rest_param.
-
- * parse.y (ripper): rename event: constpath_* -> const_path_*.
-
- * parse.y (ripper): rename event: topconst_* -> top_const_*.
-
- * parse.y (ripper): rename event: iter_block -> method_add_block.
-
- * parse.y (ripper): support block local parameter declaration.
-
- * parse.y (ripper): introduce new macro params_new.
-
- * ext/ripper/lib/ripper/sexp.rb: should not dispose event
- arguments whose name ends with "_new" but arity != 0.
-
-Sat Sep 15 23:36:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (struct parser_params): common members in the parser and
- ripper must be placed at each same location.
-
-Sat Sep 15 18:25:15 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * string.c (rb_str_rstrip_bang): fixed too much rstrip. [ruby-dev:31786]
-
-Sat Sep 15 17:32:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_initialize): set default encoding. [ruby-dev:31787]
-
- * ruby.c (load_file): make new parse instance after processing shebang
- line options.
-
-Sat Sep 15 17:04:08 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (rb_enc_associate_index, rb_enc_get_index): check if
- object is encoding capable. [ruby-dev:31780]
-
- * string.c (rb_str_subpat_set): check for if the argument is a String.
-
-Sat Sep 15 13:31:21 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss.rb, lib/rss/, test/rss/:
- - 0.1.9 -> 0.2.0.
- - supported Slash module.
-
-Fri Sep 14 22:20:01 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (fev_unadvise): no needs to reset
- event handlers.
-
-Fri Sep 14 17:28:32 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_io.rb: tests which cause SEGV should not be
- added.
-
- * bootstraptest/test_knownbug.rb: add above test to known bug.
-
-Fri Sep 14 16:24:04 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_expandarray): assignment should be placed
- after creating new array.
-
-Fri Sep 14 16:17:30 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/runner.rb: add a stress test (-s).
-
-Fri Sep 14 16:14:28 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.h, eval_intern.h: move some macros to eval_intern.h.
-
- * eval_jump.ci (rb_f_throw): fix to use NEW_THROW_OBJECT().
-
- * eval.c (rb_f_loop): remove additional macro.
-
-Fri Sep 14 16:12:10 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_expandarray): should be volatile value for GC.
-
-Thu Sep 13 15:42:03 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_compile_each): inline cache entries are overwritten
- in iseq_build_body().
-
-Thu Sep 13 14:00:15 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (brace_block): should use compstmt. patch submitted by
- Kirill A. Shutemov <k.shutemov AT gmail.com> [ruby-core:12154].
-
-Thu Sep 13 13:47:08 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_id2str): fixed typo.
-
-Wed Sep 12 23:12:22 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (proc_options): -W should be allowed in RUBYOPT
- environment variable. [ruby-core:12118]
-
-Wed Sep 12 15:19:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_s_sysopen): should not use alloca for unknown size
- input. [ruby-dev:31775]
-
- * parse.y (rb_id2str): ditto.
-
- * marshal.c (w_float): use snprintf instead of sprintf.
-
-Tue Sep 11 17:28:00 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/tempfile.rb (Tempfile::make_tmpname): Allow to specify a
- suffix for a temporary file name.
-
- * lib/tempfile.rb (Tempfile::make_tmpname): Make temporary file
- names less predictable by including a random string.
- [inspired by: akr]
-
-Tue Sep 11 17:25:59 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/shellwords.rb: Add shellescape() and shelljoin().
-
- * lib/shellwords.rb: Rename shellwords() to shellsplit() and make
- the former an alias to the latter.
-
- * lib/shellwords.rb: Add escape(), split(), join() as class
- methods, which are aliases to their respective long names
- prefixed with `shell'.
-
- * lib/shellwords.rb: Add String#shellescape(), String#shellsplit()
- and Array#shelljoin() for convenience.
-
-Mon Sep 10 15:48:31 2007 Tanaka Akira <akr@fsij.org>
-
- * range.c: represent initialized state using EXCL instead of FL_USER3.
-
- * range.c (range_dumper): make uninitialized range dumpable.
- (range_loader): make uninitialized range loadable.
-
-Mon Sep 10 13:44:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_cycle): avoid infinite loop for empty array.
- based on a patch from David Flanagan. [ruby-core:12085]
-
-Mon Sep 10 01:21:23 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (r_object0): struct allocation first to check if a
- class is a struct. compatibility check should come next.
-
-Mon Sep 10 01:05:25 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_step): fixed integer overflow. [ruby-dev:31763]
-
-Sun Sep 9 08:57:27 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (_strptime): now also attaches an element
- which denotes leftover substring if exists.
-
-Sun Sep 9 01:59:08 2007 Tanaka Akira <akr@fsij.org>
-
- * marshal.c (r_object0): check T_STRUCT type for structs.
-
-Sun Sep 9 01:17:05 2007 Tanaka Akira <akr@fsij.org>
-
- * marshal.c (r_object0): don't call user-defined initialize for
- T_STRUCT objects.
-
- * include/ruby/intern.h (rb_struct_initialize): declared.
-
- * struct.c (rb_struct_initialize): export.
-
-Sat Sep 8 23:55:56 2007 Tanaka Akira <akr@fsij.org>
-
- * eval_method.ci (rb_get_alloc_func): new function to get allocation
- function.
-
- * include/ruby/intern.h (rb_alloc_func_t): declared.
- (rb_define_alloc_func): declared.
- (rb_marshal_define_compat): declared.
-
- * range.c: use T_STRUCT for Range.
-
- * inits.c: move Init_marshal() prior to Init_Range() because
- Init_Range calls rb_marshal_define_compat which needs
- marshal's compat_allocator_tbl initialized.
-
- * marshal.c: support marshal format compatibility layer designed for
- marshaling T_STRUCT Range using T_OBJECT format.
- (rb_marshal_define_compat): defined.
-
- [ruby-dev:31710]
-
-Sat Sep 8 10:05:14 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (rb_struct_s_members): check if __members__ is an
- array to prevent segmentation fault. [ruby-dev:31759]
-
-Sat Sep 8 09:33:09 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (str[fp]time): now check specifications more
- strictly.
-
-Sat Sep 8 02:56:31 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_fiber.rb (TestFiber::test_throw): uncaught throw
- now raise ArgumentError exception.
-
-Sat Sep 8 02:45:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (rb_struct_s_members): should raise TypeError instead
- of call rb_bug(). [ruby-dev:31709]
-
- * marshal.c (r_object0): no nil check require any more.
-
-Sat Sep 8 01:46:36 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * regenc.c, regenc.h (onigenc_single_byte_mbc_enc_len): should take
- two arguments. [ruby-dev:31754]
-
-Fri Sep 7 00:58:16 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: fix typo.
-
-Fri Sep 7 00:28:25 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_getc): forgot to commit rb_enc_mbclen() fix.
-
- * ext/stringio/stringio.c (strio_getc): rb_enc_mbclen() fix.
-
- * ext/stringio/stringio.c (strio_ungetc): ditto.
-
-Thu Sep 6 22:57:01 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/fileutils.rb (FileUtils::Entry_::copy): prevent self copy of
- directories.
-
- * lib/fileutils.rb (FileUtils::fu_each_src_dest0): use try_convert.
-
- * lib/fileutils.rb (FileUtils::fu_update_option): ditto.
-
-Thu Sep 6 21:36:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/oniguruma.h (OnigEncodingTypeST): add end parameter
- to mbc_enc_len.
-
- * euc_jp.c (mbc_enc_len), sjis.c (mbc_enc_len),
- utf8.c (utf8_mbc_enc_len): ditto.
-
- * encoding.c (rb_enc_mbclen): add end parameter.
-
-Thu Sep 6 21:31:49 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_cycle): typo in rdoc. a patch from Yugui
- <yugui@yugui.sakura.ne.jp>. [ruby-dev:31748]
-
-Thu Sep 6 12:42:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_succ, rb_str_chop_bang, rb_str_chop): m17n support.
- [ruby-dev:31734]
-
-Wed Sep 5 22:02:27 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_subseq): need integer overflow check.
- [ruby-dev:31736]
-
- * array.c (rb_ary_splice): ditto. [ruby-dev:31737]
-
- * array.c (rb_ary_fill): ditto. [ruby-dev:31738]
-
- * string.c (rb_str_splice): integer overflow for length.
- [ruby-dev:31739]
-
-Tue Sep 4 20:43:44 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE_EVENT#unadvise.
-
- * test/win32ole/test_win32ole_event.rb: ditto.
-
-Mon Sep 3 15:37:09 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (vm.o): depends on st.h too.
-
-Sun Sep 2 23:38:29 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/st.h (struct st_table): make num_entries bitfield
- instead of num_bins for speed. num_entries has less access.
-
-Sun Sep 2 00:37:57 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (_parse): improved parsing of ordinal dates.
-
- * lib/date/format.rb (_parse): use named character classes in some
- regular expressions.
-
-Sat Sep 1 23:44:26 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval_jump.ci (rb_f_throw): wrap tag and TAG_THROW in a NODE_MEMO
- node to make throw instruction to work well.
-
-Sat Sep 1 20:56:07 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/ruby.h (struct RBignum): embed digits in RBignum for
- small bignums.
-
- * bignum.c: RBignum embedded digits implemented.
-
- * include/ruby/intern.h: declare rb_big_resize.
-
- * gc.c: don't free embedded digits.
-
- * numeric.c: replace direct bignum field accessor by abstract field
- accessor such as RBIGNUM(val)->sign to RBIGNUM_SIGN(val).
-
- * sprintf.c: ditto.
-
- * compar.c: ditto.
-
- * marshal.c: ditto.
-
- * random.c: ditto.
-
- * .gdbinit: support embedded small bignums.
-
- [ruby-dev:31689]
-
-Sat Sep 1 19:59:43 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_event_free): IConnectionPoint should be
- released.
-
- * ext/win32ole/win32ole.c (EVENTSINK_Destructor): ITypeInfo should be
- released.
-
- * ext/win32ole/win32ole.c (fev_initialize): refactoring.
-
-Sat Sep 1 16:26:09 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/socket/test_tcp.rb (test_recvfrom): same as mswin32 on mswin64.
-
-Sat Sep 1 14:24:23 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * st.c (st_numcmp, st_numhash): use st_data_t instead of long, because
- the former may be larger than the latter.
-
- * include/ruby/st.h (CHAR_BIT): get rid of magic number.
-
- * include/ruby/st.h (rb_index_t): use st_data_t for the platforms it
- is larger than int.
-
-Sat Sep 1 10:43:30 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval_jump.ci (rb_f_catch): generate new tag object if no argument is
- given. backported from MatzRuby. [ruby-dev:31609]
-
- * eval_jump.ci (rb_catch): call #catch without arguments if tag
- string is NULL.
-
- * eval_jump.ci (rb_f_throw): allow throwing non-symbol object.
-
- * eval_jump.ci (rb_catch_obj): new function to wait throw with arbitrary
- object.
-
- * eval_jump.ci (rb_throw_obj): new function to throw arbitrary object.
-
- * variable.c (check_autoload_table): prevent multiple calls from
- RSTRING_PTR().
-
-Fri Aug 31 07:12:24 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (SQRT_LONG_MAX): use SIZEOF_LONG instead of SIZEOF_VALUE
- because SIZEOF_VALUE > SIZEOF_LONG on some platforms.
-
-Fri Aug 31 04:18:03 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (f_norm_arg, f_arg_item): not croak already erred names.
- [ruby-dev:31687]
-
- * parse.y (assignable_gen): ignore already erred names.
-
- * parse.y (shadowing_lvar_gen): always make new block local variable
- when shadowing outer local variable. [ruby-dev:31507]
-
-Thu Aug 30 19:40:33 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * regenc.h: check RUBY_EXTERN before including config.h and defines.h
-
- * common.mk: update header dependency.
-
-Thu Aug 30 14:06:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (rb_obj_define_method): reverted. [ruby-talk:266637]
-
-Thu Aug 30 13:49:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb: initialize $top_srcdir always. [ruby-dev:31682]
-
- * lib/mkmf.rb (try_const, have_const): check for a const is defined.
- [ruby-core:04422]
-
-Thu Aug 30 08:00:12 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/intern.h: declare rb_hash_tbl.
-
- * include/ruby/ruby.h (RHash): delay st_table allocation.
- rename tbl field to ntbl to detect direct reference to the st_table
- as a compile error.
- (RHASH_TBL): abstract accessor defined.
- (RHASH_ITER_LEV): ditto.
- (RHASH_IFNONE): ditto.
- (RHASH_SIZE): ditto.
- (RHASH_EMPTY_P): ditto.
- (hash_alloc0, hash_alloc): unified because hash_alloc doesn't
- allocate st_table now.
-
- * hash.c: delay st_table allocation.
-
- * gc.c: replace tbl by ntbl.
-
- * array.c: replace direct field accessor by abstract field accessor
- such as RHASH(hash)->tbl to RHASH_TBL(hash).
-
- * marshal.c: ditto.
-
- * insns.def: ditto.
-
- * ext/iconv/iconv.c: ditto.
-
- * ext/json/ext/generator/generator.c: ditto.
-
- * ext/json/ext/parser/parser.c: ditto.
-
- * ext/json/ext/parser/parser.rl: ditto.
-
- * ext/syck/rubyext.c: ditto.
-
- * ext/tk/tkutil/tkutil.c: ditto.
-
- [ruby-dev:31678]
-
-Wed Aug 29 18:36:06 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb: add :ftp_active_mode option. [ruby-dev:31677]
-
-Wed Aug 29 14:55:28 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_gsub): should not use mbclen2() which has broken API.
-
- * re.c: remove rb_reg_mbclen2().
-
-Wed Aug 29 12:48:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (aref_args): args may not be a list. [ruby-dev:31592]
-
-Wed Aug 29 11:30:10 2007 Tanaka Akira <akr@fsij.org>
-
- * include/ruby/st.h (struct st_table): add entries_packed 1-bit
- bitfield. decrease num_bins 1-bit.
-
- * st.c: pack numhash which have 5 or less entries in bins.
- (st_init_table_with_size): setup entries_packed flag.
- (st_clear): support packed mode.
- (st_lookup): ditto.
- (st_insert): ditto.
- (st_add_direct): ditto.
- (st_copy): ditto.
- (st_delete): ditto.
- (st_foreach): ditto.
- (st_reverse_foreach): ditto.
- (unpack_entries): new function for converting to unpacked mode.
-
- [ruby-list:43954]
-
-Wed Aug 29 10:46:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/defines.h (flush_register_windows): call "ta 0x03"
- even on Linux/Sparc. [ruby-dev:31674]
-
-Tue Aug 28 19:16:00 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_type_progid): progid getted by
- ProgIDFromCLSID should be freed by CoTaskMemFree. Thanks, arton.
-
- * test/win32ole/test_win32ole.rb (test_raise_message): set negative
- compareMode value to raise WIN32OLERuntimeError.
-
- * test/win32ole/test_win32ole_type.rb (test_implemented_ole_types):
- support some environment which returns IShellDispatch5 instead
- of IShellDispatch.
-
-Tue Aug 28 15:42:09 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_subseq): retrieve substring based on byte offset.
-
- * string.c (rb_str_rindex_m): was confusing character offset and
- byte offset.
-
-Tue Aug 28 14:23:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_splice_0): should check to modify. [ruby-dev:31665]
-
-Tue Aug 28 14:21:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_prepare): set parser encode too when BOM exists.
-
-Tue Aug 28 00:51:22 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c: fix Mutex to be interruptable lock.
-
- * thread_win32.ci, thread_win32.h, thread_pthread.ci, thread_pthread.h:
- prepare native_cond_*() which are based on pthread_cond_*() spec.
-
- * prelude.rb: fix Mutex#synchronize method.
-
- * vm_core.h, include/ruby/intern.h: change unblock function interface
- (to pass some user data).
-
- * file.c, process.c: ditto.
-
- * benchmark/bm_vm2_mutex.rb: add a benchmark for mutex.
-
- * benchmark/bm_vm3_thread_mutex.rb: add a benchmark for mutex
- with contention.
-
- * benchmark/run.rb: fix to remove ENV['RUBYLIB'] for matzruby.
-
- * test/ruby/test_thread.rb: add a test.
-
- * common.mk: fix benchmark options.
-
-Mon Aug 27 23:14:02 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_rstrip_bang): wrong strip point. [ruby-dev:31652]
-
- * string.c (rb_str_each_line): should swallow sequence of newlines
- if rs (optional argument) is an empty string. [ruby-dev:31652]
-
-Mon Aug 27 22:39:08 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c (rb_enc_codelen): raises invalid sequence exception
- if ONIGENC_CODE_TO_MBCLEN() returns zero. [ruby-dev:31661]
-
- * encoding.c (rb_enc_mbclen): check invalid sequence.
-
-Mon Aug 27 20:27:59 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_type_progid): fix the bug.
- [ruby-dev:31576]
-
- * test/win32ole/test_win32ole_type.rb (test_initialize):
- remove duplicate assertions.
-
-Mon Aug 27 19:10:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/etc/etc.c (etc_getlogin): update documentation to note
- security issue. [ruby-Bugs-11821]
-
-Mon Aug 27 15:56:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (sym_encoding): return the encoding of a Symbol.
-
-Mon Aug 27 15:33:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (IEEE_BIG_ENDIAN): use configured value. [ruby-dev:31623]
-
- * util.c (Llong): set to LONG_LONG if available.
-
-Mon Aug 27 13:11:56 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (tr_trans): wrong condition for mbmaxlen==1 strings.
- [ruby-dev:31652]
-
-Mon Aug 27 00:41:13 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_each_byte): caused infinite loop. [ruby-dev:31652]
-
- * io.c (rb_io_getc): should return nil at EOF, not EOFError.
-
- * lib/delegate.rb (SimpleDelegator::__setobj__): use raise
- argument to specify backtrace.
-
- * test/ruby/test_fnmatch.rb (TestFnmatch::bracket_test):
- String#include? no longer works for Fixnum. use #chr.
- [ruby-dev:31652]
-
-Sun Aug 26 12:27:14 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: fix to remove Fiber.new until fiber.so is not loaded.
-
- * test/ruby/test_continuation.rb: fix to use resume.
-
-Sun Aug 26 06:51:46 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_wc2mb, reg_enum_key): allocate
- buffer should be NULL terminated.
-
-Sun Aug 26 06:04:13 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_setup_method): reorder code for branch prediction.
-
-Sun Aug 26 05:54:49 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_call_method): fix to relaxant safe level check
- ($SAFE > 2). [ruby-core:11998]
-
- * bootstraptest/test_method.rb: add tests for above.
-
-Sun Aug 26 05:52:08 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_fiber.rb: fix to require 'continuation'.
-
-Sat Aug 25 23:52:14 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c (enumerator_next): message changed.
-
-Sat Aug 25 23:22:14 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/encoding.h: remove unused rb_enc_ismbchar().
-
-Sat Aug 25 22:50:14 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_event_free, EVENTSINK_Destructor,
- fev_initialize): remove the connection ole_event_free and
- EVENTSINK_Destructor.
-
-Sat Aug 25 17:52:06 2007 Koichi Sasada <ko1@atdot.net>
-
- * string.c, include/ruby/intern.h: export rb_str_length().
-
- * insns.def: use rb_str_length() in opt_length.
-
-Sat Aug 25 17:48:51 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: rename FIBER_STACK_SIZE to FIBER_VM_STACK_SIZE.
-
-Sat Aug 25 17:05:05 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (swallow): removed condition using an unset variable.
-
- * parse.y, re.c: re-applied revision 13092.
-
- * string.c (rb_str_splice): return from void function.
-
- * include/ruby/encoding.h (rb_enc_str_new): prototype added.
-
-Sat Aug 25 11:45:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * encoding.c: provide basic features for M17N.
-
- * parse.y: encoding aware parsing.
-
- * parse.y (pragma_encoding): encoding specification pragma.
-
- * parse.y (rb_intern3): encoding specified symbols.
-
- * string.c (rb_str_length): length based on characters.
- for older behavior, bytesize method added.
-
- * string.c (rb_str_index_m): index based on characters. rindex as
- well.
-
- * string.c (succ_char): encoding aware succeeding string.
-
- * string.c (rb_str_reverse): reverse based on characters.
-
- * string.c (rb_str_inspect): encoding aware string description.
-
- * string.c (rb_str_upcase_bang): encoding aware case conversion.
- downcase, capitalize, swapcase as well.
-
- * string.c (rb_str_tr_bang): tr based on characters. delete,
- squeeze, tr_s, count as well.
-
- * string.c (rb_str_split_m): split based on characters.
-
- * string.c (rb_str_each_line): encoding aware each_line.
-
- * string.c (rb_str_each_char): added. iteration based on
- characters.
-
- * string.c (rb_str_strip_bang): encoding aware whitespace
- stripping. lstrip, rstrip as well.
-
- * string.c (rb_str_justify): encoding aware justifying (ljust,
- rjust, center).
-
- * string.c (str_encoding): get encoding attribute from a string.
-
- * re.c (rb_reg_initialize): encoding aware regular expression
-
- * sprintf.c (rb_str_format): formatting (i.e. length count) based
- on characters.
-
- * io.c (rb_io_getc): getc to return one-character string.
- for older behavior, getbyte method added.
-
- * ext/stringio/stringio.c (strio_getc): ditto.
-
- * io.c (rb_io_ungetc): allow pushing arbitrary string at the
- current reading point.
-
- * ext/stringio/stringio.c (strio_ungetc): ditto.
-
- * ext/strscan/strscan.c: encoding support.
-
-Sat Aug 25 10:59:19 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: separate Continuation and Fiber from core.
-
- * ext/continuation/*, ext/fiber/*: ditto.
-
- * include/ruby/ruby.h: remove rb_cFiber.
-
- * include/ruby/intern.h: add the rb_fiber_new() declaration.
-
- * enumerator.c (next_init): fix to use rb_fiber_new().
-
- * test/ruby/test_enumerator.rb: remove next? tests.
-
- * test/ruby/test_continuation.rb: add a require 'continuation'.
-
- * test/ruby/test_fiber.rb: add a require 'fiber'.
-
-Sat Aug 25 10:20:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (prelude.o): depends on vm_core.h now.
-
- * common.mk (prelude.c): depends on tool/compile_prelude.rb too.
-
- * common.mk (prereq): updates all auto-generated sources.
-
- * tool/compile_prelude.rb: separated dynamic and static portions.
-
-Sat Aug 25 10:05:17 2007 Koichi Sasada <ko1@atdot.net>
-
- * prelude.rb: add Thread.exclusive. This class method
- is different from 1.8's. Thread.exclusive only does
- synchronize with VM global mutex.
-
-Sat Aug 25 09:39:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_s_try_convert): more document description.
-
- * re.c (rb_reg_s_try_convert): typo fixed.
-
-Sat Aug 25 08:54:12 2007 Koichi Sasada <ko1@atdot.net>
-
- * id.h, id.c: remove idFuncall.
-
- * compile.c (iseq_specialized_instruction): ditto.
-
-Sat Aug 25 08:47:28 2007 Koichi Sasada <ko1@atdot.net>
-
- * tool/compile_prelude.rb: fix to include "vm_core.h".
-
-Sat Aug 25 03:49:14 2007 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/sentence.rb (Sentence): include Enumerable.
- (Sentence#each): defined.
-
- * test/ruby/test_assignment.rb: use Sentence#expand.
-
-Sat Aug 25 03:08:57 2007 Koichi Sasada <ko1@atdot.net>
-
- * prelude.rb: fix Mutex#synchronize definition.
-
-Sat Aug 25 02:08:45 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_s_try_convert): a new class method to convert
- object or nil if it's not target-type. this mechanism is used
- to convert types in the C implemented methods.
-
- * hash.c (rb_hash_s_try_convert): ditto.
-
- * io.c (rb_io_s_try_convert): ditto.
-
- * re.c (rb_reg_s_try_convert): ditto.
-
- * string.c (rb_str_s_try_convert): ditto.
-
-Sat Aug 25 00:49:44 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/bm_loop_generator.rb: added.
-
-Sat Aug 25 00:22:31 2007 Koichi Sasada <ko1@atdot.net>
-
- * prelude.rb: added. run this script on startup.
-
- * tool/compile_prelude.rb: compile prelude.rb to C string.
- (prelude.rb -> prelude.c)
-
- * common.mk: fix to build with prelude.c.
-
- * inits.c (rb_call_inits): ditto.
-
- * thread.c (Init_Thread): move definition of Mutex#synchronize
- to prelude.rb.
-
-Sat Aug 25 00:08:43 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (compile_massign_opt): fix to skip massign optimization
- with global variables.
-
- * bootstraptest/test_massign.rb: add some tests for above.
-
-Fri Aug 24 18:42:03 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_dir.rb (TestDir::setup): ?c now makes a string.
-
- * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::initialize):
- initialize @workdir to stop warning.
-
-Fri Aug 24 18:30:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/drb/drb.rb (DRb::DRbServer::InvokeMethod::perform_without_block):
- replace funcall by send!. other files in the distribution as well.
-
-Fri Aug 24 17:06:56 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_send_bang): abandon the name funcall for private
- aware method call.
-
-Fri Aug 24 15:27:12 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c (enumerator_next): stop pre-fetching.
-
- * enumerator.c (Init_Enumerator): remove next? method.
-
-Fri Aug 24 15:14:57 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_loop): now handles StopIteration exception.
-
-Thu Aug 23 20:31:31 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c: optimize simple massign.
-
-Thu Aug 23 20:02:25 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (reg_get_value): use RegQueryValueEx instead
- of RegQueryValueEx.
-
- * ext/win32ole/win32ole.c (typelib_file_from_clsid): fix the bug
- that the function always returns Qnil.
-
- * test/win32ole/test_win32ole_type.rb (test_initialize): add some test.
-
-Thu Aug 23 17:25:05 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (group_member): check if presents.
-
- * configure.in (XCFLAGS): add _GNU_SOURCE on linux.
-
- * file.c (group_member): use system routine if available.
-
- * process.c: moved _GNU_SOURCE macro to Makefile.
-
-Thu Aug 23 16:59:40 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (compile_massign), insnhelper.ci (vm_throw): not use C99
- comment.
-
- * cont.c (rb_cont_call, fiber_switch, rb_fiber_resume, rb_fiber_yield):
- suppress warnings.
-
- * cont.c (rb_fiber_start): change on non-volatile variable between
- setjmp and longjmp may not has an effect.
-
- * enumerator.c (sym_call): initialize first.
-
- * enumerator.c (enum_iter): typedefed.
-
- * enumerator.c (next_i): suppress a warning.
-
-Thu Aug 23 16:04:11 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c, insns.def, parse.y: fix massign order. This change
- causes performance problem. Try vm1_swap benchmark.
- [ruby-dev:31522]
-
- * insns.def, insnhelper.ci: move process body of expandarray insn to
- vm_expandarray().
-
- * bootstraptest/test_knownbug.rb, bootstraptest/test_massign.rb:
- move a solved test.
-
-Thu Aug 23 15:51:19 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (f_norm_arg): ripper has no shadowing check.
-
- * parse.y (f_block_arg): dispatch blkarg_mark.
-
-Thu Aug 23 15:48:26 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (make_masgn_lhs, iseq_compile_each): fixed indent.
-
- * compile.c (iseq_translate_threaded_code),
- vm_evalbody.ci (get_insns_address_table),
- template/vmtc.inc.tmpl (insns_address_table): constified.
-
- * vm_evalbody.ci (vm_eval),
- template/insns_info.inc.tmpl (insn_stack_increase, insn_ret_num):
- suppress warnings.
-
-Thu Aug 23 13:19:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (f_norm_arg): check also nested arguments. [ruby-dev:31502]
-
-Thu Aug 23 00:06:48 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * util.c: updated for ANSI C only. applied a patch from
- <snakagawa AT infoteria.co.jp>. [ruby-dev:31591]
-
-Thu Aug 23 00:04:45 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * missing/strtod.c: removed. [ruby-dev:31588]
-
- * LEGAL: updated.
-
-Wed Aug 22 15:59:44 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb:
- fix typo of filename (test_knownbug.rb).
-
-Wed Aug 22 14:04:53 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_knownbug.rb: added. This file will contain
- test cases which point out known bug. If bug is fixed, tests
- should move to the suitable place.
-
- * bootstraptest/test_massign.rb: move a test which show known bug
- to test_knownbug.rb.
-
-Wed Aug 22 13:02:26 2007 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (in_temporary_working_directory):
- don't remove the directory specified by --dir.
-
-Wed Aug 22 05:51:23 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * util.c (ruby_strtod): replaced by the implementation by David
- M. Gay inspired by William D. Clinger's paper "How to Read Floating
- Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101].
- a patch from Satoshi Nakagawa <snakagawa AT infoteria.co.jp>.
- [ruby-dev:31582]
-
- * test/ruby/test_float.rb (TestFloat::test_float): add test for
- precision.
-
-Wed Aug 22 03:51:07 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: add Fiber#resume and Fiber.yield.
- and Fiber::Core class to realize Coroutine.
-
- * include/ruby/intern.h: declare rb_fiber_yield(), rb_fiber_resume().
-
- * enumerator.c: use above api.
-
- * test/ruby/test_fiber.rb: fix and add tests for above changes.
-
-Tue Aug 21 21:09:48 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/tmpdir.rb (Dir.mktmpdir): make directory suffix specifiable.
- suggested by knu. [ruby-dev:31568]
-
-Tue Aug 21 15:00:23 2007 Koichi Sasada <ko1@atdot.net>
-
- * st.c (st_clear): reset num_entries too.
-
-Tue Aug 21 13:57:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (st_foreach_func, rb_foreach_func): typedefed.
-
- * hash.c (rb_hash_clear): use st_clear() unless iterating.
-
- * st.c (struct st_table_entry): add new members, fore and back, to
- iterate in inserted order.
-
- * include/ruby/st.h (struct st_table): ditto.
-
-Tue Aug 21 04:09:06 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/bm_vm2_case.rb: add a new benchmark.
- YARV optimize case/when syntax. If every conditions
- are literal (such as Symbol, Fixnum, String), dispatch
- calc order will be O(1).
-
-Tue Aug 21 04:08:07 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_enumerator.rb: fix last commit.
-
-Tue Aug 21 03:59:32 2007 Koichi Sasada <ko1@atdot.net>
-
- * test_enumerator.rb (enum_test): fix to return sorted
- array (for Hash test).
-
-Tue Aug 21 03:55:20 2007 Koichi Sasada <ko1@atdot.net>
-
- * enumerator.c (next_i): fix to return with Fiber#yield at
- the end of each block. [ruby-dev:31470]
-
- * enumerator.c (enumerator_next_p): call init_next if not
- initialized. [ruby-dev:31514]
-
- * test/ruby/test_enumerator.rb: add tests for Enumerator.
-
-Mon Aug 20 23:28:39 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (Init_String): remove Symbol.intern and Symbol#dump.
- [ruby-dev:31525]
-
- * dir.c (dir_foreach): return Enumerator if no block given.
- [ruby-dev:31525]
-
- * io.c (rb_io_s_foreach): argument count check before making
- Enumerator. [ruby-dev:31525]
-
-Mon Aug 20 23:17:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_core.h (struct rb_thread_struct): removed first_func_arg and
- reuse first_args instead.
-
-Sun Aug 19 13:31:40 2007 Tanaka Akira <akr@fsij.org>
-
- * gc.c: use VALGRIND_MAKE_MEM_UNDEFINED to detect use of collected
- objects if valgrind is available. It cannot detect first 2 words
- because they are used as the free list.
-
-Sun Aug 19 13:13:52 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each/NODE_RESBODY): fix to add
- additional nop to prevent tailcall optimization.
-
- * vm_opts.h: clean up comments.
-
-Sun Aug 19 12:58:39 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_call_bmethod): fix to propagate information
- that this proc is "from Method". [ruby-dev:31490]
-
- * proc.c (method_proc, rb_mod_define_method): ditto.
-
- * vm.c (vm_invoke_proc_core): removed.
-
- * vm_core.h: ditto.
-
-Sun Aug 19 12:36:11 2007 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/sentence.rb: new method Sentence().
-
-Sun Aug 19 12:32:39 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_callee_setup_arg): fix to mark enough VM stack.
- [ruby-dev:31492]
-
-Sat Aug 18 19:02:34 2007 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_yield.rb (TestYieldGen): relax array size check
- in nested parameters.
- [ruby-dev:31485]
-
-Sat Aug 18 17:44:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tk/tcltklib.c (Init_tcltklib): use rb_set_end_proc().
-
-Sat Aug 18 17:40:11 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (is_ruby_native_thread): check properly. [ruby-dev:31166]
-
-Sat Aug 18 16:44:15 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_call_bmethod),
- vm.c (vm_invoke_proc_core): fix to do not restore
- $SAFE when proc invoked by bmethod.
-
- * vm_core.h: ditto.
-
-Sat Aug 18 16:44:49 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_error.ci (ruby_error_print): call error_print.
-
- * eval_jump.ci, process.c (rb_exit, rb_f_exit, rb_f_abort): moved.
-
-Sat Aug 18 15:59:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (detach_process_watcher): should not pass the pointer
- to an auto variable to the thread to be created. pointed and
- fix by KUBO Takehiro <kubo at jiubao.org> [ruby-dev:30618]
-
-Sat Aug 18 15:52:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insnhelper.ci (vm_send_optimize): use MEMMOVE to shift values inside
- an array.
-
-Sat Aug 18 15:45:34 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insnhelper.ci (vm_yield_setup_args): rsize and psize should not be
- negative.
-
-Sat Aug 18 14:35:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insnhelper.ci (vm_callee_setup_arg, vm_send_optimize,
- vm_yield_setup_args): bulk copy for arguments.
-
-Sat Aug 18 13:55:58 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): fix to allow self.x=
- if x= is private.
-
- * bootstraptest/test_method.rb: add a test for above.
-
-Sat Aug 18 14:05:34 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (reg_compile_gen): obtain error info from errinfo.
-
- * re.c (rb_reg_error_desc): make RegexpError for initialization error.
-
- * re.c (rb_reg_compile): return nil and set errinfo if error.
-
-Sat Aug 18 13:23:01 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c: $! should not be writable.
-
- * eval.c (rb_rubylevel_errinfo): added. rb_errinfo() returns
- rb_thread_t#errinfo. rb_rubylevel_errinfo() returns $! value.
-
-Sat Aug 18 13:14:40 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_callee_setup_arg): fix to check arguments
- correctly. [ruby-dev:31472]
-
-Sat Aug 18 13:13:06 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/test_exception.rb: add escape character ("\") for
- editors.
-
-Sat Aug 18 12:42:50 2007 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_yield.rb (TestYieldGen): add test for yielding to
- lambda using lambda parameter passing emulator.
-
-Sat Aug 18 12:24:30 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sample/test.rb, test/ruby/test_system.rb(valid_syntax?): keep
- comment lines first.
-
-Sat Aug 18 11:44:59 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_set_arguments), insnhelper.ci
- (vm_callee_setup_arg, vm_yield_setup_args):
- fix to cause raise on "lambda{|a|}.call(1, 2)".
- [ruby-dev:31464]
-
- * bootstraptest/test_block.rb: add tests for above.
-
-Sat Aug 18 01:12:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (frame_func_id): return proper method ID.
-
-Fri Aug 17 22:43:11 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): massign should return rvalue(s).
-
-Fri Aug 17 22:10:19 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_basicinstructions.rb: fix old tests.
- class variables should be inherited.
-
-Fri Aug 17 21:20:44 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (rb_call), eval_method.ci (rb_add_method, rb_alias),
- insnhelper.ci (vm_call_method): fix to save safelevel for
- method node.
-
- * include/ruby/node.h: ditto.
-
- * bootstraptest/test_method.rb: add a test for above.
-
-Fri Aug 17 16:02:50 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_terminate_all): fix to ignore
- exceptions.
-
- * thread.c (thread_start_func_2): fix
- abort_on_exception process. [ruby-dev:31394]
-
-Fri Aug 17 14:38:36 2007 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (in_temporary_working_directory): use
- Dir.mktmpdir to create and remove temporary directory.
- (Dir.mktmpdir): define if not available.
- [ruby-dev:31431]
-
-Fri Aug 17 03:07:37 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): fix throw insn option of next.
-
-Fri Aug 17 01:25:23 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_set_arguments), insnhelper.ci
- (vm_callee_setup_arg, vm_yield_setup_args): fix
- block parameter problems. [ruby-dev:31437], [ruby-dev:31440]
-
- * bootstraptest/test_block.rb: add a test of [ruby-dev:31440].
-
-Fri Aug 17 01:24:12 2007 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (ruby_iseq_disasm): fix to show arg_simple value.
-
-Fri Aug 17 01:21:29 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def (throw): insert a RUBY_VM_CHECK_INTS(). [ruby-dev:31361]
-
-Thu Aug 16 20:40:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bigtrunc): RBIGNUM(x)->len may be zero. out of bound
- access. [ruby-dev:31404]
-
- * sprintf.c (rb_str_format): small float should not call
- rb_dbl2big().
-
-Thu Aug 16 22:10:06 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): fix next/redo stack consistency.
- [ruby-dev:31373]
-
- * bootstraptest/test_syntax.rb: add tests for above.
-
- * sample/test.rb: fix to use __FILE__ instead of $0 to know basedir.
-
-Thu Aug 16 21:14:06 2007 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (BASERUBY): need AC_SUBST. [ruby-dev:31438]
-
-Thu Aug 16 19:18:26 2007 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/sentence.rb: Sentence class implemented
- based on sentgen.rb
-
- * test/ruby/sentgen.rb: removed.
-
- * test/ruby/test_assignment.rb: use sentence.rb.
-
- * test/ruby/test_yield.rb: block parameter passing emulator
- implemented.
-
-Thu Aug 16 16:48:47 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (BASERUBY): check if base ruby is runnable first.
- [ruby-core:11900]
-
-Thu Aug 16 16:46:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (aix): enable shared by default.
-
- * configure.in (aix): for 64bit-mode AIX. [ruby-dev:31401]
- + use CC for LDSHARED if non-gcc,
- + moved -G option from *LDFLAGS to LDSHARED,
- + set -brtl only in XLDFLAGS.
-
-Thu Aug 16 13:06:08 2007 Tanaka Akira <akr@fsij.org>
-
- * bignum.c (big_lshift): make shift offset long type.
- (big_rshift): ditto.
- (rb_big_lshift): ditto.
- (big_rshift): ditto.
- [ruby-dev:31434]
-
-Thu Aug 16 06:29:08 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (argf_readpartial): argf_forward needs argc and argv.
-
-Thu Aug 16 02:47:39 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (rb_fiber_m_yield): added. use this function
- for Fiber#yield instead of rb_fiber_yield.
-
-Thu Aug 16 00:36:52 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/tmpdir.rb (Dir.mktmpdir): new method. [ruby-dev:31416]
-
-Wed Aug 15 18:57:30 2007 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (os_live_obj): fix to skip T_VALUES.
-
- * sample/test.rb: add an ObjectSpace test.
-
-Wed Aug 15 16:49:04 2007 Koichi Sasada <ko1@atdot.net>
-
- * inits.c (rb_call_inits): change initializing order.
- [ruby-dev:31420]
-
-Wed Aug 15 16:44:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (ARGF_FORWARD): wrongly compares with current_file with
- rb_stdout. should be rb_stdin. [ruby-cvs:20177]
-
-Wed Aug 15 14:59:21 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_initialize, argf_each_line, argf_each_byte): suppress
- warnings.
-
-Wed Aug 15 14:22:05 2007 Koichi Sasada <ko1@atdot.net>
-
- * parse.y: remove "//" type comment.
-
-Wed Aug 15 13:42:15 2007 Koichi Sasada <ko1@atdot.net>
-
- * parse.y: fix rules around f_margs. "make test" passes all tests.
-
- * bootstraptest/test_block.rb: add some tests for above.
-
-Wed Aug 15 13:50:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (rb_hash_delete_key): delete the entry without calling block.
-
- * hash.c (rb_hash_shift): should consider iter_lev too.
-
- * hash.c (delete_if_i): use rb_hash_delete_key() so that the block
- isn't called twice. [ruby-core:11556]
-
-Wed Aug 15 13:39:25 2007 Koichi Sasada <ko1@atdot.net>
-
- * process.c (proc_geteuid): fix strange conversion. [ruby-dev:31417]
-
-Wed Aug 15 01:05:55 2007 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (assert_check): don't call newtest.
- (assert_equal): call newtest.
- (assert_match): ditto.
-
-Tue Aug 14 21:43:39 2007 Tanaka Akira <akr@fsij.org>
-
- * bootstraptest/runner.rb (assert_check): new method.
- (assert_match): new method.
- (assert_equal): use assert_check.
- (pretty): give failure description as an argument.
-
- * bootstraptest/test_exception.rb: use assert_match to describe the
- test for [ruby-dev:31407]. [ruby-dev:31412]
-
-Tue Aug 14 19:53:15 2007 Koichi Sasada <ko1@atdot.net>
-
- * proc.c (Init_Proc), eval.c (Init_eval), eval_intern.h: move
- init place of exception_error.
-
- * inits.c: ditto.
-
- * eval.c (Init_eval): set exception_error#throwed_state as TAG_FATAL.
- [ruby-dev:31407]
-
- * bootstraptest/test_exception.rb: add a test for above.
-
-Tue Aug 14 19:51:20 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: change test order (test -> btest).
-
-Tue Aug 14 00:04:27 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb: 0.1.8 -> 0.1.9.
-
- * test/rss/test_version.rb: followed the above change.
-
- * lib/rss/parser.rb: fixed a bug that handles unintended elements.
- Thanks to Takuo Yonezawa. [ruby-list:43841]
-
-Mon Aug 13 17:23:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_clear_trace_func, rb_thread_stop_timer_thread):
- declarations for forward references.
-
- * eval.c (rb_longjmp, eval): use local variable.
-
- * eval.c (rb_longjmp): string object not to be optimized.
-
-Mon Aug 13 13:21:58 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb: make ftp passive mode to avoid NAT problem.
- [ruby-dev:31377]
-
-Mon Aug 13 09:18:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_getc): should returns
- one-character string.
-
- * ext/stringio/stringio.c: remove unnecessary prototypes.
-
- * ext/stringio/stringio.c (strio_getbyte): new method.
-
- * ext/stringio/stringio.c (strio_readbyte): new method.
-
- * ext/stringio/stringio.c (strio_ungetc): should take a string as
- an input.
-
-Mon Aug 13 08:19:43 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_close): always close via method.
-
- * io.c (Init_IO): remove obsolete Kernel#getc.
-
-Mon Aug 13 05:03:53 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_raise): check if target thread is
- thrown by another thread or not. [ruby-dev:31371]
-
- * bootstraptest/test_thread.rb: add a test for above.
-
-Mon Aug 13 04:35:30 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_peephole_optimize): fix peephole optimization
- bug. [ruby-dev:31360]
-
- * bootstraptest/test_syntax.rb: add a test for above.
-
-Mon Aug 13 04:02:29 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm_dump.c (debug_print_pre): fix to show control frame count.
-
- * insns.def (opt_call_c_function): fix operand type.
-
- * lib/vm/instruction.rb: ditto.
-
- * insnhelper.ci (vm_push_frame, vm_pop_frame): fix to show
- control stack status on if VMDEBUG == 2.
-
- * vm.h: add a comment about VMDEBUG.
-
- * iseq.c (find_prev_line_no): fix to skip bug report if
- line is not found.
-
- * lib/vm/instruction.rb: fix to use build_string() on
- source code generators.
-
-Mon Aug 13 03:57:32 2007 Koichi Sasada <ko1@atdot.net>
-
- * template/yasmdata.rb.tmpl: fix type and name.
-
-Sat Aug 11 23:27:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_each_line): should use #each_line, not #each.
-
- * io.c (argf_each_line): simplified.
-
- * io.c (argf_getline): should handle non T_FILE object in ARGV.
-
- * io.c (argf_each_byte): each_byte should yield bytes not
- one-character strings. [ruby-dev:31374]
-
-Sat Aug 11 07:24:55 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb: reverted some wrongly erased "o" options
- (pointed out by nobu).
-
-Sat Aug 11 00:01:12 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_start_func_2): not re-raise to main thread if it is
- joining the current thread.
-
-Fri Aug 10 23:54:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_create_core): inherit the priority of creating
- thread. submitted at [ruby-core:11873] by David Flanagan <david AT
- davidflanagan.com>. [ruby-core:11876]
-
-Fri Aug 10 05:12:19 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_start_func_2): let abort_on_exception work.
- [ruby-core:11873]
-
-Fri Aug 10 04:47:09 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (internal_id_gen): internal ID must be bigger than
- tLAST_TOKEN.
-
-Thu Aug 9 16:04:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stmt): check if rhs has value before assignment instead
- inside node_assign_gen(). [ruby-dev:31293]
-
- * parse.y (call_bin_op_gen, call_uni_op_gen): split call_op_gen.
-
-Thu Aug 9 14:01:36 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (f_marg_list): renamed from f_marg_head.
-
- * parse.y (f_margs): allow multiple mandatory arguments after a splat.
- [ruby-dev:31153]
-
-Thu Aug 9 02:02:02 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_cycle): typo fixed. a patch from Kazuhiro
- NISHIYAMA <zn AT mbf.nifty.com>. [ruby-dev:31362]
-
-Wed Aug 8 19:17:40 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/dl/cptr.c (rb_dlptr_s_to_ptr): no longer check
- HAVE_RB_IO_STDIO_FILE.
-
-Wed Aug 8 15:52:01 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c (enumerator_next_p): should check correctly even when
- e.next has not been called before.
-
- * enumerator.c (enumerator_next): raise StopIteration (name taken
- from Python) instead of IndexError.
-
- * enum.c (enum_zip): catch StopIteration exception.
-
- * enumerator.c (enumerator_with_index): return Enumerator if no
- block is given.
-
- * test/ruby/test_iterator.rb (TestIterator::test_enumerator): add
- test for enumerators.
-
-Wed Aug 8 11:48:37 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big2str0): should not use RTEST for non-VALUE.
-
-Wed Aug 8 11:25:25 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bignum.c (rb_big2str0): should preserve sign mark.
-
-Wed Aug 8 11:02:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (btest-miniruby, test-sample): split the test target
- so that -k option works.
-
-Tue Aug 7 14:58:39 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/pty/pty.c (establishShell): handshaking before close slave
- device. [ruby-talk:263410]
-
- * ext/pty/pty.c (MasterDevice, SlaveDevice, deviceNo): constified.
-
- * ext/pty/pty.c (SlaveName): removed static buffer.
-
- * ext/pty/expect_sample.rb: support for autologin.
-
-Tue Aug 7 13:58:03 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/ruby.h (ruby_special_consts): added RUBY_SPECIAL_SHIFT.
-
- * .gdbinit: some improvements.
-
-Tue Aug 7 13:28:32 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (node_name.inc): use $? instead of $< for nmake.
- [ruby-dev:31356]
-
-Tue Aug 7 12:45:13 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ac_cv_func_isinf): set yes also on OpenSolaris.
- [ruby-Bugs-12859]
-
-Tue Aug 7 12:31:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (pipe_open): fix for win32 platforms.
-
-Tue Aug 7 02:58:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big2str0): make Bignum#to_s even faster. a patch
- from Kenta Murata <muraken AT gmail.com>. [ruby-dev:31354]
-
-Tue Aug 7 01:42:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_zip): zip no longer converts arguments into
- arrays, uses enumerators.
-
-Tue Aug 7 01:27:47 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * cont.c (rb_fiber_yield): change argument ordering. export.
-
- * cont.c (rb_fiber_current): export
-
- * include/ruby/intern.h: export several functions from cont.c.
-
- * enumerator.c (enumerator_next): new method to implement external
- iterator (generator) using fiber.
-
- * enumerator.c (enumerator_next_p): new method to check whether
- any element is left in the generator sequence.
-
- * enumerator.c (enumerator_rewind): a new method to rewind the
- generator sequence.
-
-Tue Aug 7 01:15:24 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_cycle): new method to cycle enumerable forever.
-
-Tue Aug 7 00:05:38 2007 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * irb/ruby-lex.rb: support for '\c'. [ruby-talk:263508]
-
-Mon Aug 6 20:29:22 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci, insns.def: move some statements to functions.
-
- * vm.c, vm.h, vm_evalbody.ci: fix include/typedef places.
-
-Mon Aug 6 18:41:12 2007 Koichi Sasada <ko1@atdot.net>
-
- * lib/vm/instruction.rb (make_header_analysys): fix last commit.
-
-Mon Aug 6 18:33:22 2007 Koichi Sasada <ko1@atdot.net>
-
- * lib/vm/instruction.rb (make_header_analysys): add to separate
- header addition process.
-
-Mon Aug 6 17:36:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rexml/encodings/{ISO-8859-15,CP-1252}.rb: fixed invalid syntax.
-
-Mon Aug 6 16:57:08 2007 Koichi Sasada <ko1@atdot.net>
-
- * sample/test.rb: fix to output file name if it contains
- invalid syntax.
-
-Mon Aug 6 16:41:22 2007 Koichi Sasada <ko1@atdot.net>
-
- * parse.y (value_expr_gen): fix to cause "void value expression"
- when jump expression such as "next" are shown on value_expr().
- [ruby-dev:31119]
-
- * bootstraptest/test_syntax.rb: fix to above change.
-
-Mon Aug 6 14:36:30 2007 Koichi Sasada <ko1@atdot.net>
-
- * parse.y: fix a f_marg rule. [ruby-dev:31160]
-
-Mon Aug 6 14:29:30 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/runner.rb (assert_equal): add additional
- message parameter.
-
-Mon Aug 6 13:34:09 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (INSNS): not chdir to srcdir.
-
- * common.mk (node_name.inc): auto-generate node name list.
-
- * iseq.c (ruby_node_name): ditto.
-
- * iseq.c (iseq_s_compile_option_get, Init_ISeq): added a new
- method VM::InstructionSequence::compile_option.
-
- * lib/vm/instruction.rb (RubyVM::SourceCodeGenerator): --destdir
- option.
-
- * tool/node_name.rb: to auto-generate node name list.
-
-Sun Aug 5 11:51:39 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss, sample/rss, test/rss:
- - 0.1.7 -> 0.1.8.
- - supported <itunes:XXX>.
- - reverted backward incompatibility API changes introduced 0.1.7.
-
-Sun Aug 5 04:56:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (pipe_open_v, pipe_open_s): separate array and string
- cases. [ruby-dev:31344]
-
-Fri Aug 3 11:05:54 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): save all CONFIG values.
-
- * ext/extmk.rb (extmake): remove mkmf.log at clean, and extconf.h at
- distclean, respectively.
-
- * ext/extmk.rb: remove rdoc at clean, and installed list file at
- distclean, respectively.
-
-Fri Aug 3 07:09:05 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb: more verbose message. [ruby-Bugs-12766]
-
- * lib/mkmf.rb (have_type): suppress a warning with -Wall.
-
- * lib/mkmf.rb (find_type): new method.
-
-Fri Aug 3 00:00:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (big2str_table): base cannot be 0 or 1.
-
-Thu Aug 2 23:42:57 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (reg_compile_gen): set error if failed to compile regexp
- literal. [ruby-dev:31336]
-
- * re.c (option_to_str, arg_kcode, opt_kcode): options conversion
- between int and string.
-
- * re.c (rb_reg_compile): should not use regexp which could not get
- initialized. [ruby-dev:31333]
- return error message to let the parser know it.
-
- * re.c (rb_reg_compile): append regexp options to error message.
- [ruby-dev:31334]
-
-Thu Aug 2 22:05:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big2str0): faster Bignum#to_s using Karatsuba
- algorithm. a patch from Yusuke ENDOH <mame AT tsg.ne.jp>
- in [ruby-dev:31312], slightly modified by Kenta Murata
- <muraken AT gmail.com> in [ruby-dev:31339].
-
-Thu Aug 2 13:46:39 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): should not check positional number as
- width. [ruby-core:11838]
-
-Wed Aug 1 12:40:05 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * generic.rb (URI::Generic::merge_path): behave as RFC 3986.
- [ruby-talk:252052]
-
-Tue Jul 31 23:38:09 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (_parse): now interprets slashed numerical
- dates as a big endian (except dd/mm/yyyy). [experimental]
-
-Mon Jul 30 11:16:40 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_aref): check for Bignum index range.
- [ruby-dev:31271]
-
-Sat Jul 28 09:35:41 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/digest/lib/digest.rb (Digest::self.const_missing): avoid
- infinite recursive const_missing call. [ruby-talk:262193]
-
-Thu Jul 26 20:40:25 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_eqq): call_super() in === does not work well
- since Enumerable#=== has different behavior. [ruby-dev:31296]
-
-Thu Jul 26 13:57:45 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dln.c (load_1, dln_find_1): constified.
-
- * dln.c (conv_to_posix_path): removed.
-
- * ruby.c (usage): constified.
-
- * ruby.c (rubylib_mangled_path, rubylib_mangled_path2): return
- VALUE instead of a pointer to static buffer.
-
- * ruby.c (push_include_cygwin): fixed buffer overflow.
- [ruby-dev:31297]
-
- * ruby.c (ruby_init_loadpath): not convert built-in paths.
-
-Tue Jul 24 10:37:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_f_p): return nil if no argument. [ruby-dev:31285]
-
-Tue Jul 24 01:05:07 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regint.h (USE_MATCH_RANGE_IS_COMPLETE_RANGE): undef to achieve old
- rindex behavior. [ruby-dev:31265]
-
-Mon Jul 23 18:37:14 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * include/ruby/oniguruma.h: upgrade to Oniguruma 5.9.0. fixes
- some memory violation. [ruby-dev:31070]
-
-Sun Jul 22 20:09:49 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (Date._parse): now accepts some new
- hints. [experimental]
-
- * lib/parsedate.rb: followed the changes on
- lib/date/format.rb. [experimental]
-
-Sun Jul 22 16:06:56 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (is_ruby_native_thread): made an int function as
- well as version 1.8.
-
- * include/ruby/ruby.h (is_ruby_native_thread): moved prototype
- from intern.h as well as version 1.8.
-
-Sun Jul 22 14:33:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_rename): deleted code to get rid of a bug of
- old Cygwin.
-
- * file.c (rb_file_truncate): added prototype of GetLastError()
- on cygwin. [ruby-dev:31239]
-
- * include/ruby/intern.h (is_ruby_native_thread): prototype.
-
- * missing/strftime.c (strftime): fix printf format and actual
- arguments.
-
- * ext/Win32API/Win32API.c (Win32API_initialize): ditto.
-
- * ext/tk/tcltklib.c (ip_finalize): ditto.
-
- * ext/win32ole/win32ole.c (lcid_installed): ditto.
-
- * ext/socket/getnameinfo.c: include stdio.h always.
-
-Sat Jul 21 21:39:12 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb (Date._parse): now can take some
- hints (its aim must be mainly determination of endianness of
- date). [experimental]
-
- * lib/date.rb, lib/date/format.rb (Date._parse): now completes
- truncated year as default action. [experimental]
-
- * lib/date.rb, lib/date/format.rb: added ::iso8601, ::rfc3339,
- ::xmlschema, ::rfc2822, ::httpdate, ::jisx0301, #xmlschema,
- #httpdate. [experimental]
-
-Sat Jul 21 17:48:26 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk: inverted rules order.
-
- * thread_win32.ci (w32_create_thread): bcc does not have
- _beginthreadex().
-
- * lib/mkmf.rb (create_makefile): make OBJS depend on RUBY_EXTCONF_H
- only if extconf.h is created.
-
- * bcc32/Makefile.sub: headers have moved.
-
- * bcc32/{Makefile.sub,configure.bat,setup.mak: configure_args
- support.
-
- * bcc32/setup.mak: check runtime version.
-
- * win32/win32.c (rb_w32_open_osfhandle): prototype has changed
- in bcc 5.82.
-
- * {win32,wince,bcc32}/setup.mak (-version-): no RUBY_EXTERN magic.
-
- * win32/resource.rb: include patchlevel number.
-
-Sat Jul 21 12:06:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (init_mkmf): should remove mkmf.log too.
-
-Sat Jul 21 01:45:03 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (Date._parse): completes calendar week based year.
-
- * lib/date/format.rb (Date._parse): detects year of ordinal date in
- extended format.
-
-Fri Jul 20 16:30:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (iseq_set_sequence): raise SyntaxError instead of rb_bug
- since this function can be called from VM::InstructionSequence.load.
-
- * compile.c (insn_set_sc_state, iseq_set_sequence_stackcaching): ditto.
-
-Fri Jul 20 16:11:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c, compile.h (DECL_ANCHOR, INIT_ANCHOR): split not to
- initialize aggregations with dynamic values. [ruby-talk:259306]
-
- * eval.c (rb_protect): not to initialize aggregations with dynamic
- values. [ruby-talk:259306]
-
- * gc.c (mark_current_machine_context): ditto.
-
- * thread.c (thgroup_list, call_trace_func): ditto.
-
- * vm.c (vm_init_redefined_flag): ditto.
-
-Fri Jul 20 15:22:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/ossl_config.c (ossl_config_set_section): do not
- initialize aggregations with dynamic values. [ruby-talk:259306]
-
-Fri Jul 20 10:39:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stmt, mlhs_node, lhs, arg, var_ref): return dummy
- NODE_BEGIN after errors. [ruby-dev:31100], [ruby-dev:31118]
-
- * parse.y (remove_begin): keep empty NODE_BEGIN, instead of null.
- [ruby-dev:31252], [ruby-dev:31263]
-
-Fri Jul 20 09:50:40 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bootstraptest/runner.rb (get_result_string): check $?.coredump?
- first.
-
- * bootstraptest/runner.rb (cleanup_coredump, check_coredump): see
- stackdump file too.
-
-Thu Jul 19 20:39:30 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (value_expr_gen): warn for empty expression ().
- [ruby-dev:31252]
-
-Thu Jul 19 19:24:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_error.ci (get_backtrace): check the result more.
- [ruby-dev:31261] [ruby-bugs-12398]
-
-Thu Jul 19 14:38:45 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_lshift, rb_big_rshift): separated functions
- to get rid of infinite recursion. fixed calculation in edge
- cases. [ruby-dev:31244]
-
- * numeric.c (rb_fix_lshift, rb_fix_rshift): ditto.
-
-Wed Jul 18 16:57:41 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_pow): refine overflow check. [ruby-dev:31242]
-
-Wed Jul 18 09:19:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_parser_append_print, rb_parser_while_loop): moved check
- for node to the head.
-
- * ruby.c (proc_options): do nothing for -p/-n options if tree is null.
- submitted by Yusuke ENDOH <mame AT tsg.ne.jp> at [ruby-dev:31243].
-
-Wed Jul 18 08:47:09 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_succ): Time#succ should return a time object in the
- same timezone mode to the original. [ruby-talk:260256]
-
-Mon Jul 16 23:07:51 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/base64.rb (Base64::b64encode): should not specify /o option
- for regular expression. [ruby-dev:31221]
-
-Mon Jul 16 22:57:53 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_str_format): make %u behave like %d for negative
- values, since decimal format does not work with preceding dots.
- [ruby-core:11575]
-
-Mon Jul 16 18:29:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_rindex_m): accept string-like object convertible
- with #to_str method, as well as rb_str_index_m. [ruby-core:11692]
-
-Mon Jul 16 07:17:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def (getspecial): lfp_svar_get() requires int for special
- global variables.
-
-Mon Jul 16 05:45:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): more checks for format argument.
- [ruby-core:11569], [ruby-core:11570], [ruby-core:11571],
- [ruby-core:11573]
-
-Mon Jul 16 00:26:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_pow): removed invariant variable. [ruby-dev:31236]
-
-Sun Jul 15 22:24:37 2007 pegacorn <subscriber.jp AT gmail.com>
-
- * ext/dl/cfunc.c (rb_dlcfunc_call): adjust format. [ruby-dev:31222]
-
- * ext/digest/digest.c (rb_digest_instance_update,
- rb_digest_instance_finish, rb_digest_instance_reset,
- rb_digest_instance_block_length): %s in rb_raise() expects char*.
- [ruby-dev:31222]
-
- * ext/openssl/ossl.h: include ossl_pkcs5.h. [ruby-dev:31231]
-
- * ext/openssl/ossl_pkcs5.h: new file for PKCS5. [ruby-dev:31231]
-
- * ext/openssl/ossl_x509name.c (ossl_x509name_to_s): use ossl_raise()
- instead of rb_raise(). [ruby-dev:31222]
-
- * ext/sdbm/_sdbm.c: DOSISH platforms need io.h. [ruby-dev:31232]
-
- * ext/syck/syck.h: include stdlib.h for malloc() and free().
- [ruby-dev:31232]
-
- * ext/syck/syck.h (syck_parser_set_input_type): prototype added.
- [ruby-dev:31231]
-
- * win32/win32.c: include mbstring.h for _mbspbrk(). [ruby-dev:31232]
-
- * include/ruby/win32.h (rb_w32_getcwd): prototype added.
- [ruby-dev:31232]
-
-Sun Jul 15 21:07:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (bigtrunc): do not empty Bignum. [ruby-dev:31229]
-
-Sun Jul 15 19:05:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_cstr_to_inum): check leading non-digits.
- [ruby-core:11691]
-
-Sun Jul 15 04:42:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (get2comp): do nothing for empty Bignum. [ruby-dev:31225]
-
-Sat Jul 14 22:49:30 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_pow): integer power calculation: 0**n => 0,
- 1**n => 1, -1**n => 1 (n: even) / -1 (n: odd).
-
- * test/ruby/test_fixnum.rb (TestFixnum::test_pow): update test
- suite. pow(-3, 2^64) gives NaN when pow(3, 2^64) gives Inf.
-
-Sat Jul 14 18:46:35 2007 Tanaka Akira <akr@fsij.org>
-
- * configure.in: add --with-valgrind.
-
- * gc.h (SET_MACHINE_STACK_END): new macro to replace
- rb_gc_set_stack_end. it find out accurate stack boundary by
- asm using gcc on x86.
-
- * thread.c (rb_gc_set_stack_end): don't define if asm-version
- SET_MACHINE_STACK_END is available.
-
- * gc.c (mark_current_machine_context): extracted from garbage_collect.
- it use SET_MACHINE_STACK_END to not scan out of stack area.
- it notify conservative GC information to valgrind if
- --with-valgrind.
-
-Sat Jul 14 14:04:06 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (sort_by_cmp): check if reentered. [ruby-dev:24291]
-
-Sat Jul 14 11:08:28 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/json/ext/generator/generator.c (check_max_nesting): wrong
- format specifier. a patch from pegacorn <subscriber.jp AT gmail.com>.
- [ruby-dev:31217]
-
-Sat Jul 14 02:27:43 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (int_pow): overflow detection using FIT_SQRT_LONG().
- [ruby-dev:31215]
-
-Sat Jul 14 02:05:53 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * insns.def (opt_div): LONG2FIX() may not work for corner cases,
- use LONG2NUM() instead. [ruby-dev:31210]
-
-Sat Jul 14 00:34:01 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (int_round): should not return false, but self.
- [ruby-dev:31212]
-
-Fri Jul 13 18:31:27 2007 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/intern.h: remove unused function declarations.
-
- * include/ruby/ruby.h: ditto.
-
-Fri Jul 13 17:32:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm.c (vm_free): clear free'ed living_threads field.
- [ruby-dev:31163]
-
- * insns.def (opt_succ): use cast to shut a warning up.
-
-Fri Jul 13 16:10:00 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb (URI::Generic#find_proxy): use ENV.to_hash to access
- http_proxy environment variable to avoid case insensitive
- environment search.
-
-Fri Jul 13 15:02:15 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (CreateChild): enclose command line except for
- command.com which can not handle quotes. [ruby-talk:258939]
-
-Fri Jul 13 11:33:09 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * range.c (range_max, range_min): return nil for empty set as well as
- 1.8 and Enumerable. [ruby-dev:31198]
-
-Fri Jul 13 11:28:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (bvar): semicolon was lost for ripper description.
- [ruby-dev:31140]
-
-Fri Jul 13 11:25:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (program, stmt, primary): reduced duplicated code.
-
- * parse.y (dsym): convert also literals containing NUL to
- symbol.
-
- * parse.y (debug_lines): use rb_hash_lookup() to get rid of
- call of Hash#default.
-
- * parse.y (ripper_warningS): unused in ripper right now.
-
-Fri Jul 13 10:33:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_flatten_bang): check argument if valid
- integer. [ruby-dev:31197]
-
-Fri Jul 13 10:10:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (link_command, cc_command, cpp_command): do not expand
- ::CONFIG which is an alias of MAKEFILE_CONFIG.
-
-Thu Jul 12 21:38:02 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * insns.def (opt_succ): use LONG_MAX as maximum Fixnum VALUE.
- [ruby-dev:31199]
-
-Thu Jul 12 18:42:18 2007 Tanaka Akira <akr@fsij.org>
-
- * range.c (range_max): use FIX2LONG instead of FIX2INT to avoid
- RangeError by ((-0x80000001)...(-0x80000001)).max on LP64.
-
- * insns.def (opt_plus): use FIX2LONG instead of FIX2INT to avoid
- RangeError by 0x3fffffffffffffff+1 on LP64.
-
- * insns.def (opt_succ): don't use 0x80000000 which assumes 32bit VALUE.
- use FIX2LONG instead of FIX2INT.
- [ruby-dev:31190]
-
-Thu Jul 12 17:03:15 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * struct.c (rb_struct_init_copy): disallow changing the size.
- [ruby-dev:31168]
-
-Thu Jul 12 12:58:21 2007 Koichi Sasada <ko1@atdot.net>
-
- * blockinlining.c: remove "yarv" prefix.
-
- * array.c, numeric.c: ditto.
-
- * insnhelper.ci, insns.def, vm_evalbody.ci: ditto.
-
- * yarvcore.c: removed.
-
- * yarvcore.h: renamed to core.h.
-
- * cont.c, debug.c, error.c, process.c, signal.c : ditto.
-
- * ext/probeprofiler/probeprofiler.c: ditto.
-
- * id.c, id.h: added.
-
- * inits.c: ditto.
-
- * compile.c: rename internal functions.
-
- * compile.h: fix debug flag.
-
- * eval.c, object.c, vm.c: remove ruby_top_self.
- use rb_vm_top_self() instead.
-
- * eval_intern.h, eval_load: ditto.
-
- * gc.c: rename yarv_machine_stack_mark() to
- rb_gc_mark_machine_stack().
-
- * insnhelper.h: remove unused macros.
-
- * iseq.c: add iseq_compile() to create iseq object
- from source string.
-
- * proc.c: rename a internal function.
-
- * template/insns.inc.tmpl: remove YARV prefix.
-
- * thread.c: use rb_iseq_eval() and rb_str_new2().
-
- * vm.c (rb_iseq_eval): added.
-
- * vm.c: move some functions from yarvcore.c.
-
- * vm_dump.c: fix to remove compiler warning.
-
-Thu Jul 12 12:24:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def (opt_succ): fixed typo. [ruby-dev:31189]
-
-Thu Jul 12 10:30:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_start_func_2): moved prototye from thread_*.ci.
-
- * thread_pthread.ci (thread_start_func_2): not use a directive
- inside a macro argument. [ruby-talk:258763]
-
- * thread.c (thread_join): pthread_t may not be pointer.
-
- * thread_pthread.ci (ubf_select_each): ditto.
-
-Thu Jul 12 05:32:28 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/ruby.h (FIX2ULONG): drop sign bit for LLP64 platform.
-
-Tue Jul 10 19:34:45 2007 Koichi Sasada <ko1@atdot.net>
-
- * hash.c (rb_hash_lookup): added. this function is similar to
- rb_hash_aref(), but doesn't call Hash#default when no entry
- exists.
-
- * include/ruby/intern.h: ditto.
-
- * insnhelper.ci (lfp_svar_get): use rb_hash_lookup().
-
-Tue Jul 10 19:16:28 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c, insnhelper.ci, vm.c: change cref index (-1 -> 2).
-
-Tue Jul 10 18:49:56 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (exec_under): add proper casts.
-
-Tue Jul 10 16:58:16 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c, insnhelper.ci: fix svar interface.
-
- * compile.c (iseq_compile_each), yarvcore.h: fix to use new
- svar interface for flip flop.
-
- * eval.c: ditto.
-
- * insns.def: ditto.
-
- * include/ruby/intern.h: remove "rb_svar()" declaration.
-
-Tue Jul 10 16:52:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (rb_iseq_compile): formatted if/else to switch statement.
-
-Tue Jul 10 15:57:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bootstraptest/test_flip.rb: new test for flip-flop operator.
-
-Tue Jul 10 14:50:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bcc32/{Makefile.sub,setup.mak}: remove surplus slash from srcdir.
-
-Mon Jul 9 02:17:36 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * cont.c (cont_restore_1): workaround for x64-mswin64's SEH.
-
-Sun Jul 8 02:08:53 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/json.rb, lib/json/, ext/json/: import JSON 1.1.1
-
-Sat Jul 7 21:59:29 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/pp.rb (PP::PPMethods#pp_hash): sort condition changed:
- all keys have a same class which is kind of Comparable.
-
-Sat Jul 7 17:12:37 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c: use rb_bug() instead of rb_compile_error().
-
-Sat Jul 7 16:12:48 2007 Koichi Sasada <ko1@atdot.net>
-
- * parse.y: fix node construction (around f_margs).
- [ruby-dev:31143]
-
- * bootstraptest/test_block.rb: add a test for above.
-
- * insnhelper.ci: fix indent.
-
-Sat Jul 7 15:36:50 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/pp.rb (PP::PPMethods#pp_hash): sort if
- all keys are strings, symbols or integers.
-
-Sat Jul 7 15:30:05 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_yield_setup_args), vm.c, insns.def:
- fix to pass nil as block parameter to yielded block.
- [ruby-dev:31147]
-
- * bootstraptest/test_block.rb: add a test for above.
-
-Fri Jul 6 19:55:10 2007 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb.rb: typo. Thanks, Giles Bowkett.
-
- * lib/irb/completion.rb: support Ruby1.9 changing return value
- String to Symbol for Object#methods, etc. [ruby-dev:31148].
-
-Fri Jul 6 18:20:50 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/runner.rb: fix load path.
-
- * common.mk: fix "test" rule to run with "btest".
-
- * rubytest.rb, sample/test.rb: fix to show tests progress.
-
-Fri Jul 6 15:37:48 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_iterator.rb: fix test to 1.9 spec.
-
-Fri Jul 6 15:21:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_interrupt): suppress a gcc's officious warning.
-
-Fri Jul 6 14:57:12 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (keyword_to_name): constified.
-
- * ext/ripper/eventids2.c (token_to_eventid): ditto.
-
-Fri Jul 6 14:50:40 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bootstraptest/runner.rb: added --quiet option.
-
-Fri Jul 6 14:35:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (f_marg): wrap f_norm_arg assignment node with NODE_LIST.
- [ruby-dev:31141]
-
-Fri Jul 6 12:15:01 2007 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/sentgen.rb: new file.
-
- * test/ruby/test_assignment.rb: tests implemented using assignment
- generator and emulator.
-
-Fri Jul 6 03:06:58 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def: remove unused code.
-
- * compile.c (compile_massign): fix to invoke to_splat on
- splat rhs (example: *a = *nil). [ruby-dev:31136]
-
- * bootstraptest/test_massign.rb: add tests for above.
-
- * compile.c (iseq_compile_each): disable excess optimization.
- [ruby-dev:31126]
-
-Fri Jul 6 02:08:25 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def: fix to invoke nil.to_splat on NODE_ARGSCAT.
- [ruby-dev:31138].
-
- * bootstraptest/test_literal.rb: add tests for above.
-
-Thu Jul 5 19:45:55 2007 Koichi Sasada <ko1@atdot.net>
-
- * yarvcore.h: rename rb_control_frame_t#magic to flag.
-
- * vm.h: add VM_FRAME_TYPE() and VM_FRAME_FLAG().
-
- * cont.c, insnhelper.ci, insns.def, vm.c, vm_dump.c,
- vm_evalbody.ci, yarvcore.c: apply above changes.
-
-Thu Jul 5 19:16:14 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_basicinstructions.rb: remove an assertion using
- unsupported hash literal (such as {1, 2}).
-
- * test/ruby/test_hash.rb: ditto.
-
-Thu Jul 5 19:12:22 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ruby.c: Qfalse is VALUE, not pointer.
-
-Thu Jul 5 18:42:01 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): add break catch point.
-
- * insns.def (throw): support correct "break" and "return".
- this commit achieve that "make test" passes all tests.
-
- * vm.c: ditto.
-
-Thu Jul 5 18:44:12 2007 Tanaka Akira <akr@fsij.org>
-
- * parse.y (mlhs_basic): use mlhs_post after tSTAR.
- [ruby-dev:31109]
-
-Thu Jul 5 18:27:58 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/{intern,ruby}.h, compile.[ch], error.c, eval.c,
- eval_load.c, gc.c, iseq.c, main.c, parse.y, re.c, ruby.c,
- yarvcore.[ch] (ruby_eval_tree, ruby_sourcefile, ruby_sourceline,
- ruby_nerrs): purge global variables.
-
- * ruby.c (proc_options): moved do_print and do_loop options
- handling from ruby_process_options().
-
-Thu Jul 5 16:37:34 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * numeric.c (int_pow): fix previous nubu's commit.
-
- * test/ruby/test_fixnum.rb: new test.
-
-Thu Jul 5 15:56:06 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (int_pow): even number multiplication never be negative.
-
-Thu Jul 5 10:42:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/{node,ruby}.h, ruby.c: added enum constants for gdb
- support. [ruby-dev:31066]
-
- * .gdbinit: some improvements.
-
-Thu Jul 5 10:13:08 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (global_symbols.last_id): reduce unused ID numbers.
-
- * include/ruby/st.h, st.c (st_init_table, st_init_table_with_size):
- constified.
-
-Wed Jul 4 23:36:27 2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/webrick/httpauth/authenticator.rb
- (WEBrick::HTTPAuth::Authenticator#check_scheme): auth-scheme must be
- treated as a case-insensitive token according to RFC 2617 section 1.2.
-
-Wed Jul 4 18:30:04 2007 Tanaka Akira <akr@fsij.org>
-
- * parse.y (mlhs_inner): new rule. [ruby-dev:31132]
-
-Wed Jul 4 05:11:57 2007 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (set_relation): added.
-
-Wed Jul 4 04:58:30 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (caller_setup_args): fix to show correct class
- on an error message (ex: m(&1)). [ruby-dev:31101]
-
-Wed Jul 4 04:30:32 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (compile_array, iseq_compile_each): fix about array
- generation in void context. [ruby-dev:31102]
-
- * bootstraptest/test_literal.rb: add a test for above.
-
-Wed Jul 4 04:07:00 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (compile_array): ignore NODE_ZARRAY.
- [ruby-dev:31110]
-
- * bootstraptest/test_method.rb: add a test for above.
-
-Wed Jul 4 04:04:02 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.h: fix debug print level.
-
-Wed Jul 4 03:52:55 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): support v[&b]= type method call.
- [ruby-dev:31094]
-
- * bootstraptest/test_method.rb: add a test for above.
-
-Wed Jul 4 03:43:29 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (compile_massign): fix massign compilation
- (example: a, *v, (*x) = ...). [ruby-dev:31107]
-
- * bootstraptest/test_massign.rb: add tests for above.
-
-Tue Jul 3 23:12:29 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/onigiruma.h (ONIG_EXTERN): use RUBY_EXTERN if defined.
-
- * regenc.h: include ruby/defines.h.
-
- * regint.h: x64-mswin64 support.
-
-Tue Jul 3 13:47:44 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (cont_save_machine_stack): clear saved_thread.machine_stack*.
-
-Mon Jul 2 21:45:53 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c: rename iseq_translate_direct_threaded_code()
- to iseq_translate_threaded_code().
-
- * eval_intern.h, yarvcore.h: mv EXEC_EVENT_HOOK() and
- exec_event_hooks() to yarvcore.h.
-
- * insnhelper.ci, vm.c: mv yarv_finish_insn_seq to vm.c.
-
- * insns.def (opt_call_c_function): fix to use RESTORE_REGS().
-
- * iseq.c (rb_iseq_build_for_ruby2cext): fix to allocate iseq.
-
-Mon Jul 2 11:59:34 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def (defineclass): suppress a warning.
-
- * insns.def (opt_call_c_function): should raise the thrown exception
- instead of returning it.
-
-Mon Jul 2 08:53:47 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_intern.h, yarvcore.h: move declaration of sysstack_error
- to yarvcore.h.
-
- * iseq.c: fix symbol name (:toplevel -> :top).
-
- * lib/vm/instruction.rb, template/vm.inc.tmpl: replaceable
- current file name.
-
-Mon Jul 2 05:29:07 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c, iseq.c: fix iseq some of load/store process.
-
-Mon Jul 2 03:09:36 2007 Koichi Sasada <ko1@atdot.net>
-
- * yarvcore.h, compile.c, insnhelper.ci, iseq.c, vm.c:
- rename structure names and field names.
-
- * insnhelper.h, insns.def: add GET_CONST_INLINE_CACHE().
-
- * iseq.c: add rb_iseq_build_for_ruby2cext().
-
- * yarvcore.h, vm.h: move declaration of rb_insn_func_t
- to yarvcore.h.
-
-Sun Jul 1 03:25:53 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.h, vm.h: some refactoring.
- remove useless comments, etc.
-
-Sun Jul 1 03:02:29 2007 Koichi Sasada <ko1@atdot.net>
-
- * yarvcore.h: some refactoring on rb_iseq_t.
- rename some variable names, add comments, etc.
-
- * compile.c, iseq.c, proc.c, vm.c: ditto.
-
-Sun Jul 1 02:57:57 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.h: rename insn_func_type to rb_insn_func_type.
-
- * vm_evalbody.ci: ditto.
-
- * insns.def: add opt_call_native_compiled instruction
- instead of opt_call_native_compiled.
-
-Sat Jun 30 00:17:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yylex): return non-valid token for an invalid
- instance/class variable name. a patch from Yusuke ENDOH
- <mame AT tsg.ne.jp>. [ruby-dev:31095]
-
-Fri Jun 29 23:38:06 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stmts): fix for ripper.
-
-Fri Jun 29 21:55:48 2007 Koichi Sasada <ko1@atdot.net>
-
- * parse.y: fix to show line number of blank block.
- [ruby-dev:31093]
-
-Fri Jun 29 20:51:04 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/cgi/session.rb (create_new_id): don't cut off md5.hexdigest to
- follow Ruby 1.8.
-
-Fri Jun 29 17:10:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * debug.h: constified.
-
- * debug.c (ruby_set_debug_option): separated from main.c.
-
- * gc.c (ruby_gc_stress), signal.c (ruby_enable_coredump): prefixed.
-
-Fri Jun 29 16:39:06 2007 Koichi Sasada <ko1@atdot.net>
-
- * proc.c (proc_new): fix to return a proc object
- which block is contained ([ruby-dev:31056]).
-
-Fri Jun 29 15:43:59 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (fix_pow): get rid of division by zero. reported by
- Yusuke ENDOH <mame AT tsg.ne.jp> [ruby-dev:31040]
-
- * numeric.c (int_round): do nothing when rounding by zeroth digit.
- check underflow. [ruby-dev:31043]
-
-Fri Jun 29 15:32:00 2007 Koichi Sasada <ko1@atdot.net>
-
- * configure.in: add fastcall attribute check.
-
-Fri Jun 29 14:51:24 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (assoc_list): remove expanded hash literal (no splat).
-
- * lib/webrick/httpstatus.rb (WEBrick::HTTPStatus::EOFError): adapt
- to new syntax.
-
-Fri Jun 29 14:48:18 2007 Koichi Sasada <ko1@atdot.net>
-
- * tool/insns2vm.rb, lib/vm/instruction.rb: move process body
- to lib/vm/instruction.rb.
-
- * common.mk: fix aotc rule.
- experimental. bin/ruby2cext is not added yet.
-
-Fri Jun 29 11:23:09 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (dsym): return non-null NODE even if yyerror(). based on a
- patch from Yusuke ENDOH <mame AT tsg.ne.jp>. [ruby-dev:31085]
-
-Thu Jun 28 23:29:30 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (assoc_list): odd number check only for NODE_ARRAY.
- [ruby-dev:31082]
-
-Thu Jun 28 22:24:33 2007 Koichi Sasada <ko1@atdot.net>
-
- * win32/Makefile.sub: define FUNC_FASTCALL macro.
-
- * vm.h: fix to use FUNC_FASTCALL macro.
- TODO: add FUNC_FASTCALL macro by configure.
-
-Thu Jun 28 19:38:53 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c: fix to remove -Wall warnings on gcc.
-
- * compile.c (make_name_with_str): removed. use rb_sprintf() instead.
-
-Thu Jun 28 18:53:01 2007 Tanaka Akira <akr@fsij.org>
-
- * bignum.c (rb_big_hash): fix hash area.
-
-Thu Jun 28 15:00:06 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_getline): local variable to be
- initialized. [ruby-dev:31077]
-
-Thu Jun 28 11:30:39 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * gc.c (rb_obj_id): use SIGNED_VALUE instead of long.
-
-Thu Jun 28 05:01:56 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk (run.gdb): fix to load $(srcdir)/.gdbinit
-
- * vm.c (rb_vm_set_finish_env): add a cast.
-
- * vm.h: support __fastcall for MSVC.
-
-Thu Jun 28 02:12:08 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/runner.rb: fix to untouch $:.
-
-Thu Jun 28 02:03:07 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (setup_args): change parameter type.
-
-Thu Jun 28 02:03:39 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (rb_intern2): unconstify cast.
-
-Thu Jun 28 01:44:31 2007 Tanaka Akira <akr@fsij.org>
-
- * parse.y (rb_intern2): don't allocate a string object at first.
- [ruby-dev:31064]
-
-Thu Jun 28 01:24:02 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/runner.rb: fix to show file name.
-
- * bootstraptest/test_*.rb: add bootstrap tests.
-
-Thu Jun 28 01:22:15 2007 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/node.h, parse.y, gc.c, iseq.c: remove NODE_CREF.
-
-Thu Jun 28 01:19:43 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): fix popped backref and others.
- ([ruby-dev:31068]).
-
- * compile.c (iseq_compile_each): remove needless statements.
-
-Wed Jun 27 23:51:33 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c: remove unused functions.
-
-Wed Jun 27 20:46:05 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/win32.h, win32/Makefile.sub, win32/configure.bat,
- win32/mkexports.rb, win32/setup.mak, win32/win32.c: import
- x64-mswin64 port.
-
-Wed Jun 27 20:31:07 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_translate_direct_threaded_code): fix prototype
- function name.
-
- * vm.h: add correct cast.
-
-Wed Jun 27 17:08:42 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm_evalbody.ci: support OPT_CALL_THREADED_CODE.
-
- * insns.def, vm.c, vm.h: ditto.
-
- * vm.h: add VM_CFP_CNT() and VM_SP_CNT().
-
-Wed Jun 27 04:23:47 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): fix type error.
-
-Wed Jun 27 03:26:15 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (compile_massign), insns.def (expandarray): support
- postarg with massign (a, *b, c = ...).
-
- * bootstraptest/test_massign.rb: add tests for above.
-
- * compile.h: fix debug macro names.
-
-Wed Jun 27 00:18:41 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_clear): need to check STR_EMBED_P() before
- free()ing memory. a patch from Yusuke ENDOH <mame AT tsg.ne.jp>.
- [ruby-dev:31062]
-
-Tue Jun 26 16:39:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (proc_getgroups): use GIDT2NUM for rb_gid_t.
-
-Tue Jun 26 16:28:24 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_wait_fd_rw): terminate fdset.
-
-Tue Jun 26 16:26:58 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * regint.h: IL32LLP64 support.
-
-Tue Jun 26 16:22:45 2007 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (ruby_node_name): update node names.
-
-Tue Jun 26 15:21:20 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/ruby.h: IL32LLP64 support.
-
- * bignum.c (bigfixize, rb_cstr_to_inum): ditto.
-
- * insns.def (opt_plus, opt_minus, opt_mult): ditto.
-
-Tue Jun 26 15:04:06 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (rb_fiber_s_new): revert initializing VM stack.
-
- * yarvcore.c (th_init2): ditto.
-
- * vm.c, vm.h: fix to stop using Qundef on VM stack. According to
- this change, VM stack should not include Qundef value.
-
- * insns.def (putundef): removed.
-
- * compile.c (iseq_compile_each): ditto.
-
- * eval.c (eval): fix spacing.
-
-Tue Jun 26 04:03:50 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (vm_yield_with_cfunc), proc.c: fix Method#to_proc
- to return lambda Proc ([ruby-dev:31021], [ruby-dev:31037]).
-
-Tue Jun 26 03:46:08 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (rb_fiber_s_new): fix to clear rb_thread_t#tag.
- [ruby-dev:30995]
-
-Tue Jun 26 03:38:31 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (rb_fiber_s_new), yarvcore.c (th_init2): fix to clear
- VM stack ([ruby-dev:31046]).
-
-Tue Jun 26 03:15:27 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c: rename setup_arg() to setup_args().
- fix to use setup_args() at processing NODE_YIELD.
-
-Tue Jun 26 02:50:24 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (setup_arg): support kind of "m(*ary, x)" method call.
- ([ruby-dev:31048]).
-
-Tue Jun 26 00:28:44 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci, vm.c: complete block parameter support.
- post arguments, optional arguments, block argument.
-
- * compile.c, parse.y: fix {|a|} parameter.
-
- * insnshelper.ci, insns.def: revert caller_setup_args() option
- (need_block_check) parameter.
-
-Mon Jun 25 20:18:44 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * gc.c (RVALUE): in RVALUE and RBasic, flags must be the same type.
-
-Mon Jun 25 18:02:55 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/pty/extconf.rb: skip wince and win64.
-
-Mon Jun 25 17:59:32 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * include/ruby/node.h (NODE_LMASK, nd_line): shouldn't use int and/or
- long carelessly.
-
-Mon Jun 25 11:36:35 2007 Koichi Sasada <ko1@atdot.net>
-
- * gc.h: add RUBY_ prefix to debug macros.
-
- * cont.c, proc.c, yarvcore.c,
-
- * gc.c: define ruby_gc_debug_indent variable to debug mark/free.
-
- * vm.c, insnhelper.ci: rename some functions to vm_* or rb_vm_*.
- move some functions, definitions, declarations to suitable files.
-
- * eval.c, yarvcore.h, eval_error.ci, insnhelper.ci: ditto.
-
-Mon Jun 25 09:45:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_error.ci, eval_jump.ci, eval_method.ci, eval_safe.ci: c-mode.
-
-Mon Jun 25 05:27:54 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c: remove ruby_current_node and change eval() prototype.
- fix to use rb_sourcefile/line() instead of ruby_sourcefile/line.
-
- * error.c, eval_error.ci, eval_load.c, eval_safe.ci, gc.c,
- include/ruby/intern.h, parse.y, process.c, ruby.c: ditto.
-
- * vm.c: fix spaces.
-
-Mon Jun 25 04:20:14 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_*.h: rename to eval_*.ci.
-
- * common.mk: ditto.
-
- * eval_error.ci: remove ruby_set_current_source().
-
- * error.c, eval.c, ruby.c: ditto.
-
- * eval_safe.c, proc.c: remove unused macros.
-
-Mon Jun 25 03:37:20 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.ci (caller_setup_args): add need_block_check option.
-
- * insns.def: ditto.
-
- * yarvcore.h: add GetCoreDataFromValue().
-
-Mon Jun 25 02:14:30 2007 Koichi Sasada <ko1@atdot.net>
-
- * call_cfunc.ci: removed.
-
- * insnhelper.ci: added. this function includes all functions that
- vm insns need.
-
- * common.mk: ditto.
-
- * insnhelper.h, vm.h, vm.c: move some declaration.
-
- * gc.h: remove GC_CHECK() macro because GC.stress is more useful.
-
- * compile.c, iseq.c, vm_dump: ditto.
-
- * gc.h, thread.c: move a prototype declaration.
-
- * debug.c, debug.h: rename some functions.
-
- * compile.h: ditto.
-
-Mon Jun 25 00:45:02 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def (invokesuper): fix error message.
-
-Mon Jun 25 00:14:13 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c: some refactoring.
- * rename th_* to vm_*.
- * remove unused variables functions.
- * add prototypes.
-
- * blockinlining.c, compile.c, cont.c, eval.c, eval_intern.h,
- eval_jump.h, eval_load.c, inits.c, insns.def, iseq.c, parse.y,
- proc.c, process.c, signal.c, thread.c, vm.c, vm_dump.c,
- vm_evalbody.ci, yarvcore.c, yarvcore.h: ditto.
-
-Sun Jun 24 22:32:00 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_method.h (rb_add_method): fix to check 0.
-
-Sun Jun 24 22:00:17 2007 Koichi Sasada <ko1@atdot.net>
-
- * insn_send.ci: removed.
-
- * common.mk: ditto.
-
- * vm.c (vm_call_bmethod), isnsn.def: added. fix to use this
- function instead of using goto.
-
- * vm.c (vm_call_bmethod): renamed from th_invoke_bmethod().
-
- * vm.c (vm_method_missing): renamed from eval_method_missing().
-
- * vm_evalbody.ci: remove tmp_* variables.
-
- * insnhelper.h: add some macros.
-
- * insns.def: forbid zsuper from method defined by define_method().
-
- * test/ruby/test_super.rb: ditto.
-
-Sun Jun 24 20:01:08 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm_macro.def: removed.
-
- * insn_send.ci: added. this file includes send instruction body.
-
- * common.mk: ditto.
-
- * insns.def: ditto.
-
- * tool/insns2vm.rb: ditto.
-
- * vm.c: ditto.
-
-Sun Jun 24 19:30:37 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.h (RESTORE_REGS): add do/while(0) around macro.
-
- * vm.c, vm_macro.def: remove macro_eval_invoke_func() and
- add vm_setup_method(). use it instead.
-
-Sun Jun 24 19:02:33 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c, vm_macro.def : remove macro_eval_invoke_cfunc() and
- add vm_call_cfunc().
-
-Sun Jun 24 17:54:13 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def, vm.c: add/fix stack overflow check.
-
-Sun Jun 24 17:28:52 2007 Koichi Sasada <ko1@atdot.net>
-
- * insnhelper.h: change CHECK_STACK_OVERFLOW() to throw exception.
-
- * vm.c (caller_setup_arg), vm_macro.def: remove
- macro_eval_setup_send_arguments and add caller_setup_arg().
-
- * insns.def: ditto.
-
- * bootstraptest/test_method.rb: add splat arg tests.
-
-Sun Jun 24 16:35:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (proc_to_s): used a variable before initialized.
-
-Sun Jun 24 16:05:45 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (callee_setup_arg): added. support correct post arg.
-
- * vm_macro.def (macro_eval_invoke_func): fix to use
- callee_setup_arg.
-
- * compile.c (set_arguments): adjust for above changes.
-
- * compile.c (iseq_compile_each): ditto.
-
- * iseq.c (ruby_iseq_disasm): ditto.
-
- * yarvcore.h: add rb_iseq_t#post_arg_start and arg_size.
-
- * bootstraptest/test_method.rb: add post arg tests.
-
-Sun Jun 24 16:10:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (proc_to_s): suppress warning, and reduced duplicated code.
-
-Sun Jun 24 15:33:47 2007 Koichi Sasada <ko1@atdot.net>
-
- * bootstraptest/runner.rb: set default directory to
- '/tmp/bootstraptest.tmpwd' and add --dir option.
- fix to output driver and target information.
-
- * common.mk: fix to run btest on BASERUBY and
- add OPTS to pass option ("make btest OPTS=...").
-
-Sun Jun 24 03:05:00 2007 Tanaka Akira <akr@fsij.org>
-
- * enum.c (enum_minmax): fix SEGV by [].minmax.
-
-Sat Jun 23 17:18:19 2007 Tanaka Akira <akr@fsij.org>
-
- * re.c (match_inspect): MatchData#inspect implemented.
-
-Sat Jun 23 15:00:16 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_minmax): new method to get the minimum and maximum
- values from the enumerable at once.
-
- * enum.c (enum_minmax_by): ditto.
-
-Sat Jun 23 01:25:40 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_assoc): new method.
-
- * hash.c (rb_hash_rassoc): ditto.
-
- * hash.c (rb_hash_flatten): ditto.
-
-Fri Jun 22 23:55:59 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_upto): add optional argument to specify
- exclusiveness.
-
- * range.c (range_step): use String#upto with optional argument.
-
- * range.c (range_each): ditto.
-
-Fri Jun 22 19:55:51 2007 Tanaka Akira <akr@fsij.org>
-
- * proc.c (proc_to_s): revert the change from %p to %lx at YARV
- merge time.
-
-Fri Jun 22 19:33:49 2007 Tanaka Akira <akr@fsij.org>
-
- * proc.c (proc_to_s): show is_lambda.
-
-Thu Jun 21 20:36:12 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_sort): remove hash specific implementation.
-
-Thu Jun 21 20:28:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_select): returns new hash, not assoc array.
- [ruby-core:11504]
-
- * hash.c (env_select): ditto.
-
-Thu Jun 21 23:08:19 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (rb_intern2): ID_JUNK test based on len, not by NUL.
-
-Thu Jun 21 19:42:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * yarvcore.c (rb_thread_mark): mark also thrown_errinfo.
-
-Thu Jun 21 17:13:44 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_intern2): name may not be NUL-terminated.
-
-Wed Jun 20 08:27:57 2007 Tanaka Akira <akr@fsij.org>
-
- * eval_error.h (error_print): show full stacktrace on
- non-SystemStackError.
-
-Wed Jun 20 04:45:39 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_intern2): use rb_intern2 to intern without trailing
- equal sign.
-
- * parse.y (rb_intern2, ripper_id2sym): fixed indent.
-
-Tue Jun 19 10:55:05 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_load.c (load_ext, rb_require_safe): pass VALUE instead of
- pointer. [ruby-Bugs-11659]
-
-Mon Jun 18 08:47:54 2007 Technorama Ltd. <oss-ruby@technorama.net>
-
- * ext/openssl/{extconf.rb,ossl_ssl_session.c}:
- Fix ruby-Bugs-11513.
-
- * ext/openssl/ossl_pkey_ec.c
- New methods EC::Point.[eql,make_affine!,invert!,on_curve?,infinity?]
- By default output the same key form as the openssl command.
-
- * ext/openssl/ossl_rand.c
- New method Random.status?
-
- * test/openssl/test_ec.rb
- New tests.
-
-Mon Jun 18 17:04:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_load.c (rb_require_safe, ruby_init_ext): load with ruby level
- cfp. [ruby-core:10779]
-
- * eval_intern.h, vm.c (rb_vm_call_cfunc): new function to call a
- function with ruby level cfp.
-
-Mon Jun 18 16:57:24 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (yycompile): disable trace while creating ruby_debug_lines.
- [ruby-talk:253586]
-
- * thread.c (ruby_suppress_tracing): new function to call a function
- with suppressing trace.
-
- * lib/debug.rb, lib/tracer.rb: for YARV.
-
-Mon Jun 18 13:54:36 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_cleanup): return EXIT_FAILURE if any exceptions occurred
- in at_exit blocks. [ruby-core:11263]
-
-Mon Jun 18 02:49:16 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (env_mark): fix to mark block.proc.
-
- * vm.c (th_make_proc_from_block): set created proc to block->proc.
-
-Mon Jun 18 02:48:12 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm_dump.c (vm_stack_dump_raw): hide VM stack trace.
-
-Mon Jun 18 02:43:53 2007 Koichi Sasada <ko1@atdot.net>
-
- * signal.c (sigsegv): clear gc_stress flag on SEGV.
-
-Mon Jun 18 01:14:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_path2class): get rid of dangling pointer caused by
- optimized out value.
-
- * variable.c (rb_global_entry, rb_f_untrace_var, rb_alias_variable,
- rb_generic_ivar_table, generic_ivar_get, generic_ivar_set,
- generic_ivar_defined, generic_ivar_remove, rb_mark_generic_ivar,
- rb_free_generic_ivar, rb_copy_generic_ivar,
- rb_obj_instance_variables): suppress warnings.
-
-Sun Jun 17 11:11:07 2007 Tanaka Akira <akr@fsij.org>
-
- * eval.c (rb_method_missing): avoid a warning "too many arguments
- for format string" on "./ruby -ve 'def m() super end; m'".
-
-Sat Jun 16 22:24:17 2007 Tanaka Akira <akr@fsij.org>
-
- * gc.c (garbage_collect): re-introduce ruby_current_node marking code.
- [ruby-dev:31005]
-
-Sat Jun 16 21:37:43 2007 Tanaka Akira <akr@fsij.org>
-
- * gc.c (gc_sweep): re-introduce heap extension strategy change.
- [ruby-dev:31005]
-
-Fri Jun 15 22:59:37 2007 Tanaka Akira <akr@fsij.org>
-
- * .gdbinit: new file to ease debugging using gdb.
-
-Fri Jun 15 22:33:55 2007 Tanaka Akira <akr@fsij.org>
-
- * signal.c (default_handler): func argument removed.
- (trap_handler): support SYSTEM_DEFAULT. call default_handler
- internally.
- (sig_trap): don't call default_handler.
- [ruby-dev:30999]
-
-Fri Jun 15 22:33:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (realclean): separate local and ext.
-
- * ext/extmk.rb: not remove unrelated directories.
-
-Fri Jun 15 20:50:02 2007 Tanaka Akira <akr@fsij.org>
-
- * keywords: enclose C code in declaration section by %{ and %} to
- avoid extra semicolon after #ifdef RIPPER.
- pointed by eban.
-
-Fri Jun 15 18:56:52 2007 Tanaka Akira <akr@fsij.org>
-
- * signal.c (trap_handler): trap("SIGSEGV", "DEFAULT") may cause wrong
- trap error because SIG_DFL may be zero.
-
-Fri Jun 15 15:55:55 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def (setconstant, toregexp): fix to mark object correctly.
-
-Fri Jun 15 13:24:18 2007 Koichi Sasada <ko1@atdot.net>
-
- * hash.c: exchange semantics of Hash#each and Hash#each_pair.
- pointed out by [ruby-dev:30997].
-
- * test/ruby/test_iterator.rb: ditto.
-
- * test/ruby/test_yield.rb: ditto.
-
-Fri Jun 15 12:38:29 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_iterator.rb: remove debug code (GC.stress=true).
-
-Fri Jun 15 12:25:33 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (th_yield_setup_args): |v| should work as |v,|.
- ex) def m;yield 1, 2; end; m{|v| p v} #=> 1
-
- * parse.y: apply above change for "for" statement.
-
- * test/ruby/test_assignment.rb: ditto
-
- * test/ruby/test_basicinstructions.rb: ditto.
-
- * test/ruby/test_iterator.rb: ditto.
-
- * test/ruby/test_yield.rb: ditto.
-
- * compile.c (iseq_compile_each): fix debug.
-
-Fri Jun 15 12:22:10 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (ruby_finalize_1): rb_thread_t#errinfo should be clear with
- Qnil.
-
-Fri Jun 15 12:20:11 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (rb_cont_call): forbid cross fiber continuation call.
-
- * test/ruby/test_fiber.rb: ditto.
-
-Fri Jun 15 12:14:07 2007 Koichi Sasada <ko1@atdot.net>
-
- * sample/test.rb: fix to show line information whether test succeeds.
-
-Thu Jun 14 17:16:05 2007 Tanaka Akira <akr@fsij.org>
-
- * eval_load.c (Init_load): delay allocating an array for rb_load_path
- to avoid GC problem in very early stage.
- (RUBY_GC_STRESS causes GC in such stage.)
-
- * variable.c (rb_gc_mark_global_tbl): rb_global_tbl may be 0 in
- very early stage.
-
- * thread.c (thread_cleanup_func) [IA64]: clear register stack position.
- (thread_start_func_2) [IA64]: record the beginning of register
- stack using extra argument.
- (rb_gc_save_machine_context) [IA64]: record the end of register
- stack.
-
- * gc.c [IA64] (SET_STACK_END): record the end of register stack.
- (garbage_collect) [IA64]: use recorded register stack area for
- GC marking.
- (yarv_machine_stack_mark) [IA64]: GC mark from the register stack
- area.
-
- * yarvcore.c [IA64] (rb_gc_register_stack_start): defined.
- (Init_VM): store th->self on stack to fix GC problem.
- (Init_yarv) [IA64]: initialize the beginning of register stack.
-
- * yarvcore.h (struct rb_thread_struct) [IA64]: new members for
- register stack area.
-
- * thread_pthread.ci (thread_start_func_1) [IA64]: call
- thread_start_func_2 with the end of register stack.
-
- * cont.c (struct rb_context_struct) [IA64]: new members for register
- stack area.
- (cont_mark) [IA64]: GC mark from register stack area.
- (cont_free) [IA64]: free saved register stack.
- (cont_save_machine_stack) [IA64]: record the position and contents
- of the register stack.
- (cont_capture): store cont->self on stack to fix GC problem.
- (cont_restore_1) [IA64]: restore the register stack.
- [IA64] (register_stack_extend): new function.
- (cont_restore_0) [IA64]: call register_stack_extend instead of
- cont_restore_1.
-
- [ruby-dev:30982]
-
-Thu Jun 14 17:09:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser): handle more
- extensions. [ruby-dev:30972]
-
-Thu Jun 14 14:40:42 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/securerandom.rb: document updated.
- suggested by NaHi. [ruby-dev:30966]
-
-Wed Jun 13 22:42:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (garbage_collect): update IA64 register stack code.
- [ruby-dev:30971]
-
-Wed Jun 13 06:05:12 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (darwin): prohibit loading extension libraries to
- miniruby.
-
-Tue Jun 12 21:50:51 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (call_args): no allow splat after assocs. takes
- consistency over compatibility.
-
- * parse.y (call_args2): ditto
-
-Tue Jun 12 14:53:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (Logging.quiet, Logging.message): added quiet flag and
- use it. [ruby-core:10909]
-
- * lib/mkmf.rb (find_header): use header names in the message.
-
-Sun Jun 10 18:37:13 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/probeprofiler/probeprofiler.c: clean warnings.
-
-Sun Jun 10 18:32:24 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing/isinf.c, missing/dup2.c, missing/strtod.c, missing/x68.c,
- missing/alloca.c: use "ruby/config.h".
-
-Sun Jun 10 17:49:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (install_recursive): should check parent directories of
- the destination. [ruby-dev:30947]
-
-Sun Jun 10 16:59:39 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (do_block, brace_block): fix line numbers. [ruby-dev:30831]
-
-Sun Jun 10 16:57:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (install_recursive): add :glob option rather than
- using FNM_DOTMACH.
-
- * instruby.rb (ext-comm): make header directory first.
-
-Sun Jun 10 16:10:58 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_beginendblock.rb: typo.
-
-Sun Jun 10 16:07:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (install_recursive): skip .svn directories.
-
-Sun Jun 10 15:44:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (config.status): rubyhdrdir was missing.
-
-Sun Jun 10 15:26:36 2007 Tanaka Akira <akr@fsij.org>
-
- * Makefile.in: use --output-file for gperf to not leave lex.c.tmp.
-
-Sun Jun 10 15:11:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, win32/Makefile.sub (XCFLAGS): -I. is needed for *.inc.
-
- * ext/extmk.rb: prepend also topdir to mflags at last.
-
-Sun Jun 10 13:47:36 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_beginendblock.rb (test_should_propagate_signaled):
- get rid of invoking shell. [ruby-dev:30942]
-
-Sun Jun 10 12:56:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby: moved public headers.
-
- * instruby.rb (install_recursive): skip backup files.
-
- * instruby.rb (ext-comm): install only current platform headers.
-
-Sun Jun 10 10:42:04 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/securerandom.rb: renamed from lib/secrand.rb.
- suggested by NaHi. [ruby-dev:30934]
-
-Sat Jun 9 06:40:05 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/secrand.rb: rename SecRand() to SecRand.random_number.
- suggested by NaHi. [ruby-dev:30934]
-
-Fri Jun 8 16:34:20 2007 Tanaka Akira <akr@fsij.org>
-
- * ext/zlib/zlib.c (gzfile_s_open): use FilePathValue to support
- to_path.
-
-Fri Jun 8 16:11:00 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_jump.h: th->errinfo should clear with nil.
-
-Fri Jun 8 14:53:28 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (call_args): allow splat argument after unpacked
- assocs like 1.8 does.
-
- * parse.y (call_args): ditto.
-
-Fri Jun 8 14:26:18 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/secrand.rb: new file for secure random interface.
-
- * lib/cgi/session.rb: use secrand for generating cookies.
-
-Fri Jun 8 12:44:37 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {win32,wince}/Makefile.sub: add lex.c rule.
-
-Fri Jun 8 11:54:18 2007 Tanaka Akira <akr@fsij.org>
-
- * lex.c.blt: moved from lex.c.
-
- * Makefile.in: use lex.c.blt if gperf is not available.
- [ruby-list:8212], [ruby-list:8214], [ruby-list:24667],
- [ruby-talk:120857], [ruby-dev:28102]
-
-Thu Jun 7 21:38:39 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_execute_interrupts): invoke ensure when
- main thread exits.
-
-Thu Jun 7 19:02:48 2007 Tanaka Akira <akr@fsij.org>
-
- * lib/pp.rb: call original "method" method instead of redefined one.
-
-Thu Jun 7 17:20:57 2007 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (prepare_iseq_build): freeze filename and name string.
-
- * variable.c: freeze class name string.
-
-Thu Jun 7 12:48:33 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (cont_restore_1): fix to check root fiber [ruby-dev:30911].
-
- * test/ruby/test_fiber.rb: add a test.
-
-Thu Jun 7 07:24:36 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/json/common.rb: Ponder offering parse! method.
-
- * lib/json/editor.rb: be a bit more robust while loading data.
-
- * ext/json/ext/{generator,parser}/extconf.rb:
- add a have_header directive for st.h
-
- * test/json: fix some tests.
-
-Thu Jun 7 03:29:18 2007 Koichi Sasada <ko1@atdot.net>
-
- * test_fiber.rb: add a test (Continuation and Fiber).
-
-Thu Jun 7 03:17:24 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (cont_new): add debug message.
-
- * cont.c (cont_restore_1): copy stack information from fiber.
-
- * cont.c (rb_fiber_s_new): fix to mark created fiber.
-
- * test/ruby/test_fiber.rb: add some tests around Thread and Fiber.
-
- * yarvcore.c (thread_free): fix to skip freeing stack if root fiber
- is available.
-
-Thu Jun 7 01:03:20 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_intern.h, eval.c (ruby_init): remove POP_TAG_INIT().
-
- * cont.c (rb_fiber_start): remove zero-clearing tag.
-
-Wed Jun 6 20:23:46 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def (invokeblock): fix of splat argument.
- (splat same as normal method dispatch)
-
-Wed Jun 6 16:27:25 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * insns.def: fixed indentation.
-
-Wed Jun 6 10:58:23 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (rb_yield): fix to check Qundef.
-
-Wed Jun 6 10:57:45 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_continuation.rb: add a test for last commit.
-
-Wed Jun 6 10:55:42 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (rb_cont_call): forbid calling dead fiber with
- Continuation#call.
-
-Wed Jun 6 10:50:01 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): fix around yield arguments
- (with NODE_ARGSCAT).
-
-Wed Jun 6 02:50:53 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (rb_fiber_start): clear th->tag and check error to fix
- [ruby-dev:30888] and [ruby-dev:30889].
-
- * eval_intern.h: fix rb_fiber_start() prototype.
-
- * test/ruby/test_fiber.rb: add tests for above.
-
-Wed Jun 6 02:40:20 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * insnhelper.h, insns.def (DEC_SP): shouldn't use unary minus operator
- in pointer operation. some compilers (such as VC++8 x64) cannot deal
- it with expected way.
-
-Wed Jun 6 02:19:48 2007 Koichi Sasada <ko1@atdot.net>
-
- * parse.y (new_yield), compile.c (iseq_compile_each): fix
- passing parameter.
-
- * eval.c, eval_jump.h: simplify rb_yield*.
-
- * proc.c (proc_mark): fix to mark proc->block.proc.
-
- * proc.c (Init_Proc): add Proc#lambda?
-
- * test/ruby/test_lambda.rb: add some tests.
-
- * vm.c (invoke_block): fix to check lambda block or not.
-
- * vm.c (th_yield_setup_args): fix to check arguments size
- when lambda block.
-
-Tue Jun 5 16:30:38 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_p): returns arguments to intervene. [ruby-dev:29736]
-
-Tue Jun 5 14:07:55 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def (invokeblock): check block is created by lambda
- or Proc.new.
-
- * vm.c (block_proc_is_lambda): added.
-
-Tue Jun 5 14:47:52 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/pp.rb (PP::PPMethods::seplist): revert last change to work
- around wrapper bug. [ruby-dev:30840]
-
-Tue Jun 5 14:11:15 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (kanji_convert): Fix guess fallback.
-
-Tue Jun 5 13:32:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c, dir.c, eval.c, eval_jump.h, eval_method.h, numeric.c,
- pack.c, parse.y, re.c, thread.c, vm.c, vm_dump.c, call_cfunc.ci,
- thread_pthread.ci, thread_win32.ci: fixed indentation.
-
- * call_cfunc.ci: protoized.
-
- * thread_win32.ci: fixed typo.
-
-Tue Jun 5 13:17:11 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * call_cfunc.ci, compile.c, dir.c, eval.c, eval_jump.h, numeric.c,
- pack.c, re.c, thread.c, thread_win32.ci, vm.c, vm_dump.c: fixed
- indentation.
-
-Mon Jun 4 21:15:45 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * lib/json.rb, lib/json, ext/json, test/json:
- import JSON library.
-
- * ext/nkf: import nkf.c rev:1.124
- Support CP10001.
-
-Mon Jun 4 20:52:58 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (int_round): should not just truncate.
-
-Sat Jun 2 16:48:55 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (Fiber#pass): rename to Fiber#yield. Block parameter
- of fiber body receive first yield values.
- e.g.: Fiber.new{|x| p x}.yield(:ok) #=> :ok
-
- * cont.c: rename rb_context_t#retval to rb_context_t#value.
-
- * test/ruby/test_fiber.rb: ditto.
-
-Sat Jun 2 16:45:21 2007 Koichi Sasada <ko1@atdot.net>
-
- * proc.c (Init_Proc): remove a line break.
-
-Sat Jun 2 01:27:27 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (int_round): small optimization to handle bignums.
-
-Fri Jun 1 13:02:35 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * insnhelper.h (INC_SP): shouldn't cast ``x'' to unsigned type because
- it might be a negative value.
-
- * insnhelper.h, insns.def: shouldn't use unary minus operator in index
- operator. some compilers (such as VC++8 x64) cannot deal it with
- expected way.
-
-Fri Jun 1 11:33:40 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (num_round): should convert self to Float.
- [ruby-dev:30860]
-
-Fri Jun 1 02:01:13 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flo_round): now takes optional argument to specify
- number of digits, like round() in Python/PHP.
-
- * numeric.c (num_round): ditto.
-
-Fri Jun 1 01:58:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (each_with_index_i): should work well with continuation.
- a patch from sheepman <sheepman AT sheepman.sakura.ne.jp>.
- [ruby-dev:30846]
-
-Thu May 31 17:27:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/benchmark.rb (Benchmark::Job::item): avoid modifying the
- argument unintentionally. [ruby-talk:253676]
-
-Wed May 30 14:43:00 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c (cont_capture): store all local variables in heap
- ([ruby-dev:30832]).
-
- * vm.c (th_stack_to_heap): added.
-
- * test/ruby/test_continuation.rb: add a test for above.
-
- * eval_intern.h (th_get_ruby_level_cfp): fix to clean code.
-
-Wed May 30 13:32:34 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (ResponseParser#next_token): fixed
- error message.
-
- * lib/net/imap.rb (ResponseParser#parse_error): fixed
- the condition not to refer to @token.symbol unexpectedly.
- Thanks, Dick Monahan.
-
-Wed May 30 13:24:33 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (Net::FTP#transfercmd): skip 2XX
- responses for some FTP servers.
-
-Wed May 30 04:18:37 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval_cmd): just return if no exceptions.
- [ruby-dev:30820]
-
-Wed May 30 02:14:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (interrupt_init): needs to pass nil for Interrupt.
- [ruby-core:11038]
-
- * signal.c (trap): fixed segfaults. [ruby-dev:30830]
-
-Wed May 30 00:50:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (rb_source_filename, obj_free): suppress warnings.
-
- * gc.c (garbage_collect, yarv_machine_stack_mark): fixed typo.
- http://bugs.debian.org/426267
-
-Wed May 30 00:24:09 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (open_args, arg_ambiguous, parser_warning): should not use
- rb_warning in the parser.
-
-Tue May 29 12:31:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_opendir): removed duplicated code.
-
-Tue May 29 10:55:24 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: fix bug around Continuation and Fiber.
-
- * test/ruby/test_continuation.rb: add tests for Continuation.
-
-Tue May 29 10:54:34 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_opendir, rb_w32_readdir): eliminate magic
- numbers.
-
-Mon May 28 10:27:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c: fixed a function name.
-
-Mon May 28 03:56:44 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: support Fiber. Check test/ruby/test_fiber.rb for detail.
- Fiber is known as "Micro Thread", "Coroutine", and other terms.
- At this time, only Fiber#pass is supported to change context.
- I want to know more suitable method name/API for Fiber (... do you
- know more suitable class name instead of Fiber?) as "suspend/resume",
- "call", "yield", "start/kick/stop/restart", ....
-
- * eval.c, eval_intern.h, thread.c, yarvcore.c, yarvcore.h: ditto.
-
-Sat May 26 00:38:21 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_exec_internal): do nothing if no code.
-
- * compile.c (rb_iseq_compile): check node if NULL before check
- nd_type. [ruby-talk:252956]
-
-Sat May 26 00:05:22 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_beginendblock.rb (test_should_propagate_signaled):
- skip tests for exitstatus and termsig on the platforms where
- signals not supported.
-
-Fri May 25 16:04:47 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * yarvcore.c (Init_VM): wrap already initialized structs to use
- it directly.
-
-Fri May 25 11:09:47 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * regint.h (include): on some platform, defines.h redefines
- SIZE_OF_LONG_LONG so shouldn't re-include config.h after included
- defines.h.
-
- * regint.h (vsnprintf): ruby on windows already have vsnprintf macro.
-
-Thu May 24 12:07:27 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: check across trap violation.
-
- * eval.c, yarvcore.h: ditto.
-
-Thu May 24 11:46:55 2007 Koichi Sasada <ko1@atdot.net>
-
- * gc.c, yarvcore.c: fix to mark VM structure on startup.
-
- * yarvcore.h: disable USE_CACHED_VALUE.
-
-Thu May 24 01:54:53 2007 Koichi Sasada <ko1@atdot.net>
-
- * cont.c: support callcc which everyone love.
- incomplete. please give me bug reports.
-
- * common.mk, inits.c, thread.c: ditto.
-
- * yarvcore.c: export thread_mark().
-
- * yarvcore.h: disable value cache option.
-
- * eval_intern.h: set th_get_ruby_level_cfp to inline.
-
-Wed May 23 15:39:02 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * common.mk: add a rule for regsyntax.c.
-
-Wed May 23 10:31:53 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * oniguruma.h: updated to Oniguruma 5.7.0.
-
- * regsyntax.c, unicode.c: new files along with Oniguruma 5.x.
-
-Wed May 23 06:51:46 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * lib/cgi.rb (CGI#[]): get rid of exceptions being raised.
- [ruby-dev:30740], Thanks Kentaro KAWAMOTO.
-
-Wed May 23 05:49:49 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb, ext/purelib.rb, lib/mkmf.rb, runruby.rb: clear default
- load path to get rid of load pre-installed extensions/libraries.
- [ruby-core:11017]
-
-Tue May 22 16:37:36 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (set_arg0): support RSTRING_LEN on HP-UX. a patch from
- WATANABE Tetsuya <Tetsuya.WATANABE AT nifty.com>. [ruby-dev:30806]
-
-Mon May 21 13:40:00 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c, vm_macro.def: support tail call optimization
- (on default, this feature is not enabled).
-
- * iseq.c, compile.c, vm_opts.h: add "tailcall_optimization"
- option.
-
- * sample/test.rb (test_ok): fix to adjust tailcall stack layout.
-
- * insns.def, vm.c, compile.c, yarvcore.c, yarvcore.h:
- add opt_gt, opt_le instructions.
-
-Mon May 21 03:34:06 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: CRAM-MD5 authentication did not work.
- [ruby-dev:30770]
-
-Sat May 19 10:26:01 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (Date._parse): detects some OFX dates
- (Of course not fully).
-
-Sat May 19 03:08:05 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (enum_inject): minor improvement. [ruby-dev:30792]
-
- * enum.c (one_i): no needs to iterate once the result became false.
-
- * enum.c (enum_one): fix for an example.
-
- * enum.c (one_iter_i, none_iter_i): DRY.;
-
-Sat May 19 01:07:42 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_inject): it is now can work without block. you
- have to specify two argument method name as the first argument.
-
- * enum.c (Init_Enumerable): reduce is new alias to inject.
-
-Sat May 19 01:05:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (Init_File): method definition mismatch.
-
-Fri May 18 16:44:04 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (Init_File): add to_path method to File objects.
-
-Fri May 18 11:12:39 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (DllMain, ruby_init_loadpath): use DLL instance handle given
- to DllMain instead of VirtualQuery so that loadpath becomes relative
- from the DLL on WinCE too.
-
-Thu May 17 17:03:11 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-style.el (ruby-style-label-indent): for yacc rules.
-
-Thu May 17 13:30:27 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (f_arg): remove typo from ripper description.
-
-Thu May 17 13:23:38 2007 Koichi Sasada <ko1@atdot.net>
-
- * parse.y, compile.c (set_arguments): fix to support in-paren
- parameter (ex: def foo((a, b))).
-
-Thu May 17 13:01:52 2007 Koichi Sasada <ko1@atdot.net>
-
- * iseq.c (ruby_iseq_disasm): fix to show post arg info.
-
-Thu May 17 12:56:52 2007 Koichi Sasada <ko1@atdot.net>
-
- * debug.c (ruby_debug_node): fix to show node line.
-
-Wed May 16 21:48:44 2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/logger.rb (Logger::Application): remove meaningless logdev
- attribute and added logger attribute instead. [ruby-core:11143]
- also added Logger#formatter rdoc comment.
-
-Tue May 15 16:40:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_beginendblock.rb (test_endblockwarn): now parser
- warnings emit source names and line numbers.
-
-Tue May 15 15:01:38 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (init_stdhandle): stderr should be without buffering,
- but mswin32 use buffering when stderr is not connected to tty.
-
-Mon May 14 02:12:07 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_zip): a.zip(b,c) should return an array, not
- enumerator.
-
- * array.c (rb_ary_zip): a.zip(b,c) should return array with size
- truncated to the size of its shortest argument array.
- [incompatible]
-
-Mon May 14 01:54:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_choice): should return nil when the array is
- empty.
-
-Sat May 12 18:26:36 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (tokens): forgot to add strip. [ruby-core:11120]
-
- * test/net/http/test_http.rb: test Net::HTTP.post_form.
-
-Fri May 11 15:27:09 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (iseq_data_to_ary): internal IDs must not be exposed.
- [ruby-core:11073]
-
- * parse.y (internal_id_gen): now returns scope local ID instead of
- global one.
-
-Thu May 10 15:15:53 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_super.rb: add tests.
-
-Thu May 10 15:14:05 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_s_conv): rdoc fix.
-
-Thu May 10 15:09:23 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (POINTER_P): pointer may be larger than long.
-
- * parse.y (vtable_size, vtable_included, vtable_tblcpy,
- vtable_to_tbl): constified.
-
-Thu May 10 10:13:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (rb_thread_priority): rdoc fix; the initial value is
- inherited from the creating thread. [ruby-core:10607]
-
-Wed May 9 12:28:57 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (Init_Bignum), numeric.c (Init_Numeric): added fdiv as
- aliases of quo. [ruby-dev:30771]
-
-Tue May 8 23:39:09 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (Date._parse): revised treatment of
- hyphened/separatorless dates.
-
- * lib/date/format.rb: some trivial adjustments.
-
-Tue May 8 20:23:07 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb: reverted.
-
-Tue May 8 19:32:18 2007 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/rational.rb: fix high-precision Rationals cannot be
- converted to Floats. [ruby-Bugs:10502], [ruby-core:11069],
- [ruby-dev:30743]
-
-Mon May 7 10:59:55 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/image.rb, test/rss/test_image.rb: fixed Image module
- namespace URI. reported by Dmitry Borodaenko. Thanks.
-
-Sun May 6 18:44:11 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (Net::HTTP.post_form): allow an Array of String
- for pairs argument. [ruby-Bugs:10340]
-
- * lib/net/http.rb (Net::HTTP#set_form_data): ditto.
-
-Sun May 6 17:54:36 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: Connection header field might include both of
- "keep-alive" token and "close" token. [ruby-core:10818]
-
-Sat May 5 16:26:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/date/format.rb (Format::Bag#method_missing): get rid of
- modifying original argument. [ruby-core:11090]
-
-Thu May 3 22:20:08 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, defines.h, eval_load.c (rb_feature_p, rb_provided,
- search_required, rb_require_safe), ext/extmk.rb: Fix
- a bug where a statically linked extension cannot be autoloaded.
- [ruby-dev:30023] / [ruby-dev:30239]
-
- * thread.c: added an internal class, Barrier.
-
- * thread.c: copied rdocs from fastthread.
-
- * yarvcore.h (struct rb_vm_struct): moved loading_table from global.
-
-Thu May 3 18:10:12 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_evalbody.ci, insns.def, vm.c, tool/insns2vm.rb (rb_num_t):
- renamed to get rid of name clash. [ruby-dev:30504]
-
- * yarvcore.c (ruby_thread_init): ditto.
-
-Wed May 2 18:52:58 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c, yarvcore.h, yarvcore.c, insns.def: fix to mark VM stack
- in correct range.
-
-Wed May 2 17:13:26 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_quo): now calculate in integer. [ruby-dev:30753]
-
-Wed May 2 15:14:56 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_method.h: add redefine checks ([ruby-dev:30751]).
-
-Wed May 2 11:22:52 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c: use Qtrue instead of 2.
-
- * vm.c, insns.def: support "lambda" calling convention.
-
-Wed May 2 06:46:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c, parse.y, ruby.h (rb_compile_warn, rb_compile_warning): warn
- for compilation. the parser should no longer use rb_warn() and
- rb_warning(). [ruby-dev:30121]
-
-Wed May 2 05:45:21 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (assoc): result of assoc_new needs to be an assoc.
-
-Wed May 2 05:40:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_pow): improvement by calculating from MSB and using
- factorization. <http://yowaken.dip.jp/tdiary/20070426.html#p01>
-
-Tue May 1 18:45:45 2007 Koichi Sasada <ko1@atdot.net>
-
- * sample/test.rb: import matzruby's sample/test.rb.
-
-Tue May 1 17:46:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_choice): a new method to choose an element
- randomly from an array.
-
- * array.c (rb_ary_choice): fixed mistake from RDoc.
-
-Tue May 1 13:59:18 2007 Koichi Sasada <ko1@atdot.net>
-
- * proc.c (proc_arity): fix an arity bug ([ruby-core:11060]).
-
-Tue May 1 13:12:49 2007 Koichi Sasada <ko1@atdot.net>
-
- * yarvcore.h, compile.c (set_arguments): support post arguments.
-
- * test/ruby/test_method.rb: add tests for above.
-
- * test/ruby/test_proc.rb: ditto.
-
- * proc.c: fix an arity bug ([ruby-core:11029]).
-
- * vm.c, vm.h, insns.def, vm_dump.h: fix bmethod process.
-
- * vm.c: support block argument on block parameter.
-
-Fri Apr 27 17:05:41 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (int_pow): bugfix of overflow detection.
-
- * numeric.c (int_pow): rb_big_pow() may return other than Bignum.
-
-Fri Apr 27 01:51:50 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c: support multiple splat (e.g, [a, *b, *c, e, *f]).
-
-Fri Apr 27 00:03:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_pow): truncate all zero BDIGITs. [ruby-dev:30733]
-
-Thu Apr 26 17:31:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big_pow): reduce multiplying for even number.
-
- * numeric.c (int_pow): calculate power in Fixnum as possible.
- [ruby-dev:30726]
-
-Thu Apr 26 17:18:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y: fixes for ripper.
-
- * parse.y (primary): reduced duplicated code.
-
- * parse.y (f_arg_item): should not override by meaningless value.
-
- * parse.y (f_arg, assocs): should not use $$ before assigned.
-
- * parse.y (assoc_list): dispatch assoclist_from_args for assocs as
- well as args.
-
- * parse.y (assoc): return assoc if dispatched result is $1.
-
-Thu Apr 26 13:54:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-style.el: new file. C/C++ style for ruby source code.
-
-Wed Apr 25 19:49:16 2007 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (unix_send_io, unix_recv_io): use CMSG_DATA to
- align file descriptor appropriately.
-
-Wed Apr 25 15:23:29 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (NtInitialize, exit_handler): add initializing and
- cleanup of critical section object for select.
-
- * win32/win32.c (do_select): block reentrance.
-
- * win32/win32.c (rb_w32_select): 0 sec polling of socket. this is
- workaround because winsock cannot do select at same socket at the
- same time by two or more threads.
-
-Wed Apr 25 14:10:47 2007 Koichi Sasada <ko1@atdot.net>
-
- * ext/probeprofiler/probeprofiler.c: fix function name and
- return value.
-
-Wed Apr 25 12:42:40 2007 Koichi Sasada <ko1@atdot.net>
-
- * yarvcore.h: remove rb_control_frame_t#callee_id.
-
- * vm_macro.def: ditto.
-
- * eval_intern.h (exec_event_hooks): fix to check event flags
-
- * eval_intern.h (EXEC_EVENT_HOOK): fix to re-check event flags.
-
- * ext/probeprofiler : added. this profiler is sampling based
- profiler.
-
- * vm.c: add rb_thread_current_status() API for probeprofiler.
-
- * thread.c (rb_thread_execute_interrupts): add comments.
-
-Wed Apr 25 10:36:03 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_intern.h (PUSH_TAG): no argument now.
-
- * eval.c, eval_error.h, eval_jump.h, eval_load.c, proc.c, thread.c:
- ditto.
-
- * thread.c (alloc_event_hook, rb_thread_remove_event_hook): should
- return value.
-
-Tue Apr 24 09:33:57 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (do_stat, do_lstat, do_opendir): should not warn ENOTDIR.
- [ruby-talk:248288]
-
-Mon Apr 23 22:14:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb ($ruby): add extout directory to include path.
- [ruby-core:11003]
-
- * lib/mkmf.rb (libpathflag): not to append RPATHFLAG to current
- directory.
-
- * lib/mkmf.rb (init_mkmf): add current directory to default
- library path with highest priority. [ruby-core:10960]
-
- * lib/mkmf.rb (LINK_SO): LIBPATH to be placed before DLDFLAGS.
-
-Fri Apr 20 16:05:22 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LIBPATHFLAG, RPATHFLAG): no needs to be quoted,
- it is done by libpathflag in mkmf.rb.
-
-Fri Apr 20 12:27:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb: fix to override conv proc.
-
-Fri Apr 20 12:21:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_cleanup): fixed access to out of bound, and inverted
- the order of errinfos.
-
-Fri Apr 20 10:33:23 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_intern.h: add prototypes of rb_sourceline() and
- rb_sourcefile().
-
-Fri Apr 20 02:37:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_cleanup): re-send signal. [ruby-dev:30516]
-
- * eval_error.h (error_handle): no message when exiting by signal.
-
- * intern.h (rb_thread_signal_raise, ruby_default_signal): prototypes.
-
- * signal.c (esignal_init): takes a signal number and an optional
- signal name.
-
- * signal.c (interrupt_init): pass SIGINT always.
-
- * signal.c (ruby_default_signal): invoke system default signal
- handler.
-
- * signal.c (rb_f_kill): use NUM2PIDT instead of NUM2INT.
-
- * signal.c (rb_signal_exec, trap): handle SIGTERM. [ruby-dev:30505]
-
- * thread.c (rb_thread_signal_raise): now takes signal number instead
- of signal name.
-
- * thread.c (rb_thread_signal_exit): since rb_make_exception() calls
- #exception method, rb_class_new_instance() is not needed here.
-
- * yarvcore.h (struct rb_vm_struct), eval_jump.h (terminate_process):
- exit_code is no longer stored in VM.
-
-Thu Apr 19 18:37:49 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c, node.h, thread.c, yarvcore.[ch], eval_intern.h:
- support set_trace_func (incomplete. id and klass
- don't be passed). And support Thread#set_trace_func
- which hook only specified thread and Thread#add_trace_func
- which add new trace func instead of replace old one.
- C level API was modified. See thread.c (logic) and
- yarvcore.h (data structures).
-
- * vm.c, vm_macro.def: add hook points.
-
- * compile.c, insns.def: fix "trace" instruction.
-
- * iseq.c, vm_macro.h: add compile option "trace_instruction".
-
- * test/ruby/test_settracefunc.rb: hook "c-return" of set_trace_func.
-
-Thu Apr 19 20:57:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (symbol): symbols should be followed by EXPR_ENDARG.
-
- * parse.y (dsym): ditto.
-
- * parse.y (parser_yylex): strings should be followed by
- EXPR_ENDARG.
-
- * parse.y (parser_yylex): ditto for numbers.
-
- * parse.y (parser_yylex): EXPR_ENDARG after ']' and '}'.
-
-Thu Apr 19 17:46:36 2007 Koichi Sasada <ko1@atdot.net>
-
- * lib/optparse.rb: fix to override conv proc.
-
-Wed Apr 18 10:41:21 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_strtod): exponent is radix 10. [ruby-talk:248272]
-
-Wed Apr 18 02:50:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * yarvcore.c (th_init2): push initial blockptr value for
- rb_block_given_p() outside ruby_exec(). [ruby-core:10923]
-
-Wed Apr 18 02:30:24 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LDFLAGS): prepend -L. instead appending it to
- XLDFLAGS. [ruby-core:10933]
-
- * configure.in (Makefile): remove $U for automake from MISSING.
- [ruby-talk:248171]
-
-Mon Apr 16 22:56:01 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/pty/expect_sample.rb: avoid symbolic link representation for
- expect. a patch from Kazuhiro NISHIYAMA <zn at mbf.nifty.com>.
- [ruby-dev:30714]
-
-Mon Apr 16 22:51:11 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sample: replace TRUE, FALSE with true, false respectively.
- a patch from Kazuhiro NISHIYAMA <zn at mbf.nifty.com>.
- [ruby-dev:30713]
-
-Mon Apr 16 17:08:02 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (make_switch): do not clobber converter if pattern
- has no convert method. reported by sheepman in [ruby-dev:30709].
-
-Mon Apr 16 16:49:32 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_seek): consistent behavior with
- IO#seek. patch by sheepman in [ruby-dev:30710].
-
-Mon Apr 16 16:34:08 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_yylex): should set command_start after block
- starting "do"s and braces. [ruby-core:10916]
-
-Mon Apr 16 10:51:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_each_with_index): each_with_index to forward
- arguments to each. [ruby-core:10921]
-
-Mon Apr 16 10:43:10 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_arg): should allow to specify 24:00.
- [ruby-core:10915]
-
-Sun Apr 15 09:12:54 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb: added some zone names.
-
- * lib/date/format.rb (_parse): now interprets doted numerical
- dates as a big endian (except dd.mm.yyyy).
-
-Thu Apr 12 17:13:22 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (mutex_try_lock): check and set owner thread.
-
- * thread_pthread.ci: fix to show error code in error message.
-
-Thu Apr 12 17:11:54 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (rb_rescue2): restore cfp ([ruby-dev:30582]).
-
-Thu Apr 12 16:06:48 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (rb_protect): restore cfp ([ruby-dev:30671]).
-
-Thu Apr 12 16:04:31 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): check node->nd_state == 1, not !0.
-
-Wed Apr 11 16:35:16 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.[ch] (rb_w32_enter_critical, rb_w32_leave_critical): no
- need to reject reentrance. removed.
-
- * rubysig.h (RUBY_CRITICAL): follow above changes.
-
- * rubysig.h (TRAP_BEG, TRAP_END): no need to save errno.
-
-Tue Apr 10 17:02:17 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_fclose, rb_w32_close): need to save errno
- before calling original fclose()/close().
-
-Tue Apr 10 16:14:22 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_win32.ci (w32_wait_events): check whether interrupt_event is
- valid handle or not.
-
- * thread_win32.ci (native_thread_destroy): clear interrupt_event when
- close it.
-
-Tue Apr 10 15:53:17 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread_pthread.ci (native_thread_create): initialize sleep_cond.
- fixed: [ruby-dev:30675]
-
-Mon Apr 9 18:48:57 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread.c (do_select): ubf_select() is not necessary. interrupt is
- checked in the loop.
-
-Mon Apr 9 18:27:26 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread.c (do_select): use ubf_select() as UBF on windows.
-
- * win32/win32.c (do_select): shouldn't call catch_interrupt() here.
- fixed: [ruby-dev:30674], reported by wanabe.
-
-Mon Apr 9 09:24:32 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (disconnect): call shutdown for
- SSLSocket. Thanks, Technorama Ltd.
-
-Sun Apr 8 13:28:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (defined_expr): test arguments of NODE_CALL and so
- on as well as NODE_ATTRASGN. [ruby-core:10886]
-
-Fri Apr 6 10:56:29 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/ossl_pkey_ec.c (ossl_ec_key_get_group): get rid of
- warning. we are aware of it.
-
-Fri Apr 6 04:00:24 2007 Technorama Ltd. <oss-ruby@technorama.net>
-
- * ext/openssl/ossl_{bn,x509{attr,cert,name,store}}.c:
- Add documentation.
-
-Thu Apr 5 17:59:19 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * compile.c (defined_expr): support for assignment.
- [ruby-core:10867]
-
- * compile.h (ADD_CATCH_ENTRY): removed temporary variable.
-
-Thu Apr 5 15:13:34 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_alloc): should
- return value.
-
-Thu Apr 5 14:58:49 2007 Technorama Ltd. <oss-ruby@technorama.net>
-
- * ext/openssl/ossl_pkcs5.c: New module.
-
- * ext/openssl/ossl_{cipher,digest,pkcs7,pkcs12}.c:
- Remove redundant module namespace.
-
- * ext/openssl/lib/openssl/{cipher,digest}.rb
- Add backwards compatible classes for rearranged classes.
-
- * ext/openssl/ossl_{pkcs7,pkcs12}.c: Add documentation.
-
-Thu Apr 5 00:42:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (rb_notimplement), io.c (pipe_open): removed definite
- articles and UNIX manual section from messages. [ruby-dev:30690]
-
-Wed Apr 4 17:09:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (pipe_open): refined the message of NotImplementedError.
- [ruby-dev:30685]
-
-Wed Apr 4 12:29:02 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * error.c (rb_notimplement): should show the name of this func,
- not callee.
-
-Wed Apr 4 10:18:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (popen_exec): should not close close-on-exec FDs.
- [ruby-dev:30679]
-
- * io.c (pipe_open): raise NotImplementedError for command "-" on
- platforms where fork(2) is not available. [ruby-dev:30681]
-
-Tue Apr 4 04:17:18 2007 Technorama Ltd. <oss-ruby@technorama.net>
-
- * ext/openssl/ossl_ssl.c: Add documentation.
-
-Tue Apr 3 16:22:24 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/extconf.rb: check for functions added in 1.9.
-
- * ext/openssl/ruby_missing.h: check per features instead by
- checking version code. [ruby-core:10845]
-
-Tue Apr 3 16:02:44 2007 Technorama Ltd. <oss-ruby@technorama.net>
-
- * ext/openssl/ossl_bn.c: More documentation.
-
- * ext/openssl/lib/ossl_{pkey,pkey_ec}.[ch]: Add elliptic curves.
-
-Tue Apr 3 15:50:41 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/socket.c (s_recv, s_recvfrom): some systems (such as
- windows) doesn't set fromlen if the socket is connection-oriented.
- reported by Bram Whillock in [ruby-core:10512] [ruby-Bugs#9061]
-
-Tue Apr 3 09:36:55 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/ruby_missing.h: need to include version.h to check
- RUBY_VERSION_CODE.
-
-Mon Apr 3 07:10:12 2007 Technorama Ltd. <oss-ruby@technorama.net>
-
- * ext/openssl/ossl_{ssl.[ch],ssl_session.c},
- ext/openssl/lib/openssl/lib/openssl/ssl.rb:
- New SSL::Session class. Add session cb's, getter/setters,
- config, and statistics methods.
-
-Mon Apr 3 04:00:23 2007 Technorama Ltd. <oss-ruby@technorama.net>
-
- * ext/openssl/{ossl.[ch],ossl_pkey.c} Add documentation.
-
- * ext/openssl/ossl_hmac.c Add reset method.
-
- * ext/openssl/ossl_cipher.c (Cipher#update) Take additional
- buffer argument.
-
- * ext/openssl/{ossl_bio.c,ossl_ssl.c,ruby_missing.h}
- compatibility with 1.8.
-
-Mon Apr 2 21:55:12 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * insns.def (throw), thread.c, yarvcore.h (throwed_errinfo): fixed
- typo.
-
-Fri Mar 30 11:46:51 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_cmdvector): fixed buffer size. reported by
- wanabe [ruby-dev:30672]
-
- * win32/win32.c (init_env, insert, rb_w32_get_environ): use strdup
- instead of malloc + strlcpy. suggested by nobu [ruby-dev:30673]
-
-Fri Mar 30 02:29:04 2007 Technorama <oss-ruby@technorama.net>
-
- * ext/openssl/ossl_{bn,cipher,digest,hmac,rand,pkey_{dh,dsa,rsa}}.c:
- Add Documentation for various methods.
-
- * ext/openssl/lib/openssl/cipher.rb: Ditto
-
- * ext/openssl/ossl_bn.c: add lshift! and rshift! methods.
-
- * ext/openssl/ossl_digest.c: GetDigestPtr() also accept a string.
-
-Fri Mar 23 11:28:24 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (init_env, insert, cmdglob, rb_w32_cmdvector,
- rb_w32_opendir, rb_w32_readdir, rb_w32_strerror, rb_w32_stati64,
- rb_w32_get_environ): use strlcpy() and strlcat().
-
- * win32/win32.c (rb_w32_opendir): use realloc() instead of xrealloc().
-
- * win32/win32.c (rb_w32_closedir): check NULL before free pointers.
-
-Fri Mar 23 00:24:52 2007 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/shell: commit miss(support for ruby 1.9(YARV) thread model).
-
-Thu Mar 22 13:32:17 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (LIBS): remove an unnecessary library.
-
-Thu Mar 22 10:27:58 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_bignum.rb (test_to_s): add tests for Bignum#to_s.
-
-Wed Mar 21 20:38:06 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * marshal.c (w_short, w_long, w_object): get rid of VC++ warnings.
-
-Wed Mar 21 20:05:07 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c, parse.y, eval.c, intern.h, iseq.c, lex.c, node.h,
- proc.c, vm.c, vm_macro.def, vm_macro.def, yarvcore.c, yarvcore.h,
- debug.c, debug.h: merge half-baked-1.9 changes. The biggest change
- is to change node structure around NODE_SCOPE, NODE_ARGS. Every
- scope (method/class/block) has own NODE_SCOPE node and NODE_ARGS
- represents more details of arguments information. I'll write a
- document about detail of node structure.
-
-Wed Mar 21 17:04:30 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_big2str0): round up for the most significant digit.
- [ruby-core:10686]
-
-Tue Mar 21 08:20:00 2007 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * test/testunit/collector/test_dir.rb: Fixed test/unit tests that
- were breaking due to Module#public_instance_methods now
- returning a Symbol instead of a String.
-
- * test/testunit/collector/test_objectspace.rb: Ditto.
-
-Tue Mar 20 22:54:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_extended): erroneous check condition when dump
- method is defined. [ruby-core:10646]
-
-Tue Mar 20 21:36:47 2007 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/shell.rb, lib/shell: support for ruby 1.9(YARV) thread model.
-
-Tue Mar 20 16:36:08 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * distruby.rb: Add zip generation.
-
-Tue Mar 20 16:20:49 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_callee_name): add __method__ and __callee__ again.
- __callee__ need to rework to adopt YARV. [ruby-core:10671]
-
-Tue Mar 20 11:09:00 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb: Revise rdoc.
-
- * lib/set.rb (Set#freeze, Set#taint, Set#untaint): Implement
- Set#freeze, Set#taint, and Set#untaint; requested by: Dan
- Hutchings <dan AT moltoagitato.com> in [ruby-bugs:PR#9359].
-
-Tue Mar 20 09:13:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_fork): flush stdouts always before fork(2).
- fixed: [ruby-dev:30612]
-
-Tue Mar 20 01:38:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c (thread_start_func_2): store the result of first_func
- as well as first_proc.
-
- * thread.c (thread_create_core): block is not used if first_func
- is given.
-
-Mon Mar 19 16:58:52 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * missing/{strlcat,strlcpy}.c, missing.h: new functions.
-
- * LEGAL: add copyright notice about above files.
-
- * configure.in: check whether strlcat and strlcpy are exist or not.
-
- * {bcc32,win32,wince}/Makefile.sub: use above files.
-
-Mon Mar 19 14:12:25 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/matrix.rb (Matrix::inverse_from): adding partial pivoting to
- the Gauss-Jordan algorithm, making it stable. a patch from
- Peter Vanbroekhoven. [ruby-core:10641]
-
-Mon Mar 19 12:13:36 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regparse.c, etc.: K&R to ANSI code cleanup patch from Stefan
- Huehner <stefan at huehner.org>. [ruby-core:10543]
-
-Mon Mar 19 11:27:13 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb (rbuf_read): extend buffer size for speed.
-
-Sun Mar 18 08:31:51 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/dir.h, win32/win32.c (rb_w32_opendir, rb_w32_readdir,
- rb_w32_closedir): get rid of possible buffer-overflows.
-
-Sat Mar 17 19:10:39 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss, test/rss:
- - supported Atom.
- - bumped version 0.1.6 to 0.1.7.
- * sample/rss/convert.rb: added new sample.
-
-Fri Mar 16 22:32:20 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb: change default verification mode from
- VERIFY_PEER to VERIFY_NONE because most POPS server does not have
- true certification.
-
-Fri Mar 16 22:19:24 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE#ole_activex_initialize,
- a little bit supporting ActiveX control. [ruby-talk:241188]
-
-Fri Mar 16 22:16:58 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: merge Ruby-SSPI patch contributed by Justin
- Bailey.
-
- * ext/Win32API/lib/win32/sspi.rb: new file.
-
-Wed Mar 14 12:30:00 2007 Shigeo Kobayashi <shigeo@tinyforest.jp>
-
- * ext/bigdecimal/bigdecimal.c: BigDecimal("-.31") is now
- treated as ("-0.31") not as ("0.31").
-
-Tue Mar 13 19:04:30 2007 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/sync.rb: support for ruby 1.9(YARV) thread model.
-
-Tue Mar 13 09:25:10 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (clear-installed-list): separated from install-prereq.
-
-Tue Mar 13 07:23:20 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/monitor.rb (mon_try_enter): call @mon_muetx.try_lock.
- Thanks, Keiju ISHITSUKA. [ruby-dev:30507]
-
-Tue Mar 13 02:42:58 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/cgi.rb (CGI::header): IIS >= 5.0 does not need the nph
- assumption any more; submitted by MIYASAKA Masaru <alkaid AT
- coral.ocn.ne.jp> in [ruby-dev:30537].
-
-Mon Mar 12 10:53:28 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/openssl/ossl_asn1.c (Init_ossl_asn1): Let rdoc know about
- externally defined modules; submitted by Technorama
- Ltd. <oss-ruby AT technorama.net> in [ruby-bugs:PR#4704].
-
- * ext/openssl/ossl_bn.c (Init_ossl_bn): Ditto.
-
- * ext/openssl/ossl_cipher.c (Init_ossl_cipher): Ditto.
-
- * ext/openssl/ossl_digest.c (Init_ossl_digest): Ditto.
-
- * ext/openssl/ossl_hmac.c (Init_ossl_hmac): Ditto.
-
- * ext/openssl/ossl_pkey.c (Init_ossl_pkey): Ditto.
-
- * ext/openssl/ossl_pkey_dh.c (Init_ossl_dh): Ditto.
-
- * ext/openssl/ossl_pkey_dsa.c (Init_ossl_dsa): Ditto.
-
- * ext/openssl/ossl_pkey_rsa.c (Init_ossl_rsa): Ditto.
-
- * ext/openssl/ossl_rand.c (Init_ossl_rand): Ditto.
-
- * ext/openssl/ossl_ssl.c (Init_ossl_ssl): Ditto.
-
-Sun Mar 11 18:42:01 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * misc/ruby-mode.el (ruby-block-end-re): Support for the
- experimental ';;' terminator had been dropped.
-
-Sun Mar 11 05:45:46 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * misc/README, misc/rdebug.el: Add rdebug.el, Emacs ruby-debug
- interface based on rubydb3x.el; submitted by Martin Nordholts
- <enselic AT gmail.com> in [ruby-bugs:PR#9023].
-
-Sat Mar 10 07:20:28 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE_TYPELIB#library_name,
- WIN32OLE_TYPELIB#visible?.
-
- * test/win32ole/test_win32ole_typelib.rb: ditto.
-
-Thu Mar 8 09:17:59 2007 Minero Aoki <aamine@loveruby.net>
-
- * compile.c: iseq_compile -> rb_iseq_compile.
-
- * iseq.c: ditto.
-
- * intern.h: provide function prototype of Init_jump.
-
- * eval_jump.h (Init_jump): declare function type.
-
- * thread.c: platform-dependent functions should be surrounded by #ifdef.
-
- * iseq.c (iseq_data_to_ary): remove unused variable.
-
- * compile.c (set_arguments): ditto.
-
- * thread.c (set_unblock_function): ditto.
-
- * thread_pthread.ci: reduce printf warning.
-
- * vm_dump.c: ditto.
-
-Tue Mar 6 16:35:04 2007 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/shell/process-controller.rb: fix thread synchronization problem for [ruby-dev:30477].
-
-Tue Mar 6 11:53:25 2007 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/irbtkw.rbw: fails to exit process.
-
-Tue Mar 6 10:23:09 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * runruby.rb: added --pure (turned on by default) and --debugger
- options.
-
-Mon Mar 5 09:19:33 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/timeout.rb (Timeout.timeout): should return the block value
- always.
-
- * lib/timeout.rb (Timeout.timeout): should yield sec argument
- always.
-
- * lib/timeout.rb (Timeout.timeout): fix document.
-
-Mon Mar 5 09:16:40 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: support automatic STARTTLS.
-
- * lib/net/smtp.rb: check server advertisement.
-
- * lib/net/smtp.rb: introduce new class SMTP::Response.
-
- * lib/net/smtp.rb (getok): should not use sprintf.
-
- * lib/net/smtp.rb (get_response): ditto.
-
- * lib/net/protocol.rb: reduce syntax warning on 1.9.
-
-Mon Mar 5 07:13:28 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: reconstruct SMTPS/STARTTLS interface. New
- interface is incompatible from current 1.9 interface at all.
-
- * lib/net/smtp.rb: All SSL-related class methods are removed; use
- instance methods instead.
-
- * lib/net/smtp.rb: rename methods: *ssl -> *tls (with alias
- "ssl").
-
- * lib/net/smtp.rb: rename methods: *tls -> *starttls.
-
-Mon Mar 5 01:36:41 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yylex), win32/win32.c (rb_w32_utime): fixed
- indentation broken at YARV merger.
-
-Sun Mar 4 23:41:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_stat_uid, rb_stat_gid, eaccess): use rb_uid_t and
- rb_gid_t instead of int.
-
- * file.c (rb_stat_s_utime): fixed a commit miss for the platforms
- where utimes() does not exist.
-
- * lib/fileutils.rb (touch): ditto.
-
-Sun Mar 4 14:46:56 2007 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * util.c (push_element): should return a int value.
-
-Sun Mar 4 01:01:25 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (Set#^, Set#&): Correct documentation. Those methods
- return sets, not arrays; noted by Oliver Frank Wittich <nietz AT
- mangabrain.de>.
-
-Sat Mar 3 22:54:33 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (touch): last #touch change causes error when
- :mtime option was not given.
-
-Sat Mar 3 22:51:29 2007 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (mv): could not move directory between
- different file systems. [ruby-dev:30411]
-
-Sat Mar 3 22:37:02 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_utime): allow nil to set the current time.
-
- * lib/fileutils.rb (touch): ditto, and added :mtime and :nocreate
- options. fixed: [ruby-talk:219037]
-
-Sat Mar 3 15:52:26 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * object.c (instance_variable_get): Restore rdoc markups lost in
- the last commit.
-
-Fri Mar 2 21:17:14 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (get_ptr_of_variant, ole_set_safe_array,
- ole_val2ptr_variant, ole_val2olevariantdata, ole_variant2val,
- ): fix some bugs of WIN32OLE_VARIANT.new when variant type is
- VT_ARRAY|VT_BSTR or VT_BYREF.
-
- * ext/win32ole/win32ole.c (folevariant_s_array, folevariant_initialize):
- WIN32OLE_VARIANT#[], WIN32OLE_VARIANT#[]=, WIN32OLE_VARIANT#value=
- is defined as instance method of WIN32OLE_VARIANT.
-
- * test/win32ole/test_win32ole_variant.rb: add some test for
- VT_ARRAY, VT_BYREF variant type.
-
-Fri Mar 2 07:58:24 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_ivar_set): RDoc updated according to a
- suggestion from Brian Candler <B.Candler AT pobox.com>.
- [ruby-core:10469]
-
-Thu Mar 1 21:38:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stmt, arg): should not omit lhs of OP_ASGN1 even if
- empty. [ruby-dev:30455]
-
-Thu Mar 1 02:55:25 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (get_digest_base_metadata): Allow inheriting
- Digest::Base subclasses, which was unintentionally made
- impossible while restructuring Digest classes.
-
-Thu Mar 1 02:05:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb (patchlevel): read from version.h.
-
-Wed Feb 28 21:15:00 2007 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (ac_cv_func_fcntl): fcntl support for MinGW.
-
- * missing/flock.c: workaround for MinGW.
-
-Wed Feb 28 20:51:32 2007 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * pack.c (pack_unpack): properly ignore non-base64 octets such as
- UTF-8 encoded BOMs; submitted by SOUMA Yutaka <holon@radastery.jp>
- to fix [ruby-core:10437]
-
-Wed Feb 28 18:31:51 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/extconf.rb: no need to check unistd.h and sys/time.h.
- they are already checked at configure.
- reported by KOBAYASHI Yasuhiro [ruby-list:43225]
-
-Wed Feb 28 18:23:43 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb ($DEFLIBPATH): default library paths ($(topdir), etc)
- should be the first elements of library paths list.
- reported by KOBAYASHI Yasuhiro [ruby-list:43225]
-
-Wed Feb 28 10:33:58 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, configure.in, */Makefile.sub (THREAD_MODEL): system
- specific thread model.
-
- * compile.h, regint.h, vm.h, array.c: removed unnecessary #include.
-
-Wed Feb 28 04:03:03 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (take_i): small cosmetic / documentation patch from
- Tadashi Saito <shiba AT mail2.accsnet.ne.jp>. [ruby-dev:30446]
-
-Wed Feb 28 01:20:18 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/{dbm,gdbm}/test_{dbm,gdbm}.rb: shouldn't use host_os. use
- target_os instead. reported by KOBAYASHI Yasuhiro [ruby-list:43225]
-
-Wed Feb 28 00:08:11 2007 URABE Shyouhei <shyouhei@ice.uec.ac.jp>
-
- * mkconfig.rb (RbConfig): add CONFIG['PATCHLEVEL']
-
- * common.mk: new target dist
-
- * distruby.rb: new file
-
-Tue Feb 27 22:18:45 2007 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (--enable-auto-image-base): avoid the necessity to
- rebase the shared libs as much as possible;
- submitted by Corinna Vinschen <spam at vinschen.de> in
- [ruby-talk:240964].
-
-Tue Feb 27 21:36:47 2007 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * util.c (__crt0_glob_function): use ruby_glob() instead of rb_globi().
-
-Tue Feb 27 21:33:04 2007 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (ac_cv_func_setrlimit): workaround for djgpp.
-
-Tue Feb 27 20:35:28 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (error.c, process.c): depend on yarvcore.h and rubysig.h.
-
-Tue Feb 27 19:26:31 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/nkf/nkf.c (rb_str_resize, rb_nkf_kconv, rb_nkf_guess1,
- rb_nkf_guess2): Silence warnings regarding char * vs. unsigned
- char * mismatch; submitted by Lyle Johnson
- <lyle.johnson@gmail.com> in [ruby-core:10416].
-
-Tue Feb 27 19:15:01 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/base64.rb (Base64::b64encode): Fix documentation; submitted
- by David Symonds <dsymonds@gmail.com> in [ruby-core:10432].
-
-Tue Feb 27 18:59:42 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_load): Silence warnings
- regarding char * vs. unsigned char * mismatch; submitted by Lyle
- Johnson <lyle.johnson@gmail.com> in [ruby-core:10416].
-
- * ext/digest/sha1/sha1ossl.c (SHA1_Finish): Ditto.
-
- * ext/digest/rmd160/rmd160ossl.c (RMD160_Finish): Ditto.
-
- * ext/digest/digest.c (rb_digest_base_finish,
- rb_digest_base_update): Ditto.
-
-Tue Feb 27 18:12:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_take): new method. [ruby-dev:30407]
-
- * enum.c (enum_drop): ditto.
-
-Tue Feb 27 07:47:24 2007 Koichi Sasada <ko1@atdot.net>
-
- * yarvcore.h, vm.h: rename th_invoke_yield() to th_yield().
-
- * blockinlining.c: ditto.
-
- * eval.c: ditto.
-
- * vm.c, insns.def: rename th_invoke_yield_cfunc()
- to th_yield_with_cfunc().
-
- * yarvcore.h, yarvcore.c: rename theYarvVM to ruby_current_vm and
- yarvCurrentThread to ruby_current_thread. remove yarvVMArray.
-
-Tue Feb 27 00:45:23 2007 Minero Aoki <aamine@loveruby.net>
-
- * test/ruby/test_optimization.rb: restore method before calling
- assert_equal.
-
-Mon Feb 26 00:58:39 2007 Koichi Sasada <ko1@atdot.net>
-
- * yarvcore.h: add rb_thread_t#top_wrapper, top_self.
-
- * eval_load.c (rb_load): support eval in wrapper module
- (load(file, true)).
-
- * eval.c: ditto.
-
- * eval_jump.h: ditto.
-
- * iseq.c: ditto.
-
- * vm.c: ditto.
-
- * yarvcore.c: ditto.
-
- * insns.def: add a empty line.
-
-Mon Feb 26 00:54:36 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: change "gdb" rule. You can debug miniruby with
- $(srcdir)/test.rb on gdb by this rule (type "make gdb").
- If you write break points to "breakpoints.gdb" on $srcdir,
- gdb runs with this file.
-
-Sun Feb 25 11:46:58 2007 Koichi Sasada <ko1@atdot.net>
-
- * win32/Makefile.sub: enable -Zi (debug) option.
-
-Sun Feb 25 11:38:40 2007 Koichi Sasada <ko1@atdot.net>
-
- * ruby.h: define RUBY_VM macro and remove NATIVETHREAD* macros.
-
- * intern.h: ditto.
-
- * signal.c (posix_signal): remove unused function
- posix_nativethread_signal().
-
-Sun Feb 25 11:31:13 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_run): fix to ANSI style.
-
-Sun Feb 25 11:09:16 2007 Minero Aoki <aamine@loveruby.net>
-
- * bootstraptest/runner.rb: show source code in error message.
-
-Sun Feb 25 09:39:50 2007 Koichi Sasada <ko1@atdot.net>
-
- * yarvcore.h:
- rename:
- rb_iseq_t#file_name -> filename
- rb_iseq_t#local_tbl -> local_table
- add:
- rb_iseq_t#local_table_size
-
- * compile.c: separate local_table_size and local_size
- (local variable size)
-
- * blockinlining.c: apply above rename.
-
- * compile.h: ditto.
-
- * eval.c: ditto.
-
- * iseq.c: ditto.
-
- * proc.c: ditto.
-
- * vm.c: ditto.
-
- * vm_dump.c: ditto.
-
-Sun Feb 25 10:27:17 2007 Minero Aoki <aamine@loveruby.net>
-
- * bootstraptest/runner.rb: add lib/ to load path.
-
-Sat Feb 25 10:16:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * rubyio.h (HAVE_RB_IO_T): macro to tell if rb_io_t is defined.
-
-Sat Feb 24 19:39:16 2007 Minero Aoki <aamine@loveruby.net>
-
- * common.mk: new target "btest", to run bootstraptests.
-
-Sat Feb 24 19:30:40 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c, gc.c, io.c, ruby.h, rubyio.h, win32/win32.h (rb_io_t):
- renamed from OpenFile.
-
- * ext/dl/cptr.c, ext/io/wait/wait.c, ext/openssl/ossl.h,
- ext/openssl/ossl_bio.c, ext/openssl/ossl_ssl.c, ext/pty/pty.c,
- ext/readline/readline.c, ext/socket/socket.c: ditto.
-
-Sat Feb 24 19:28:23 2007 Minero Aoki <aamine@loveruby.net>
-
- * bootstraptest/runner.rb: new option -v,--verbose.
-
-Sat Feb 24 18:55:50 2007 Minero Aoki <aamine@loveruby.net>
-
- * yarvtest/test_method.rb: removed (merged to bootstraptest).
-
- * yarvtest/test_class.rb: ditto.
-
-Sat Feb 24 18:44:39 2007 Minero Aoki <aamine@loveruby.net>
-
- * bootstraptest/test_class.rb: new file.
-
- * bootstraptest/test_method.rb: add tests.
-
-Sat Feb 24 18:44:30 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * intern.h (rb_thread_blocking_region): add prototype.
-
- * file.c (rb_thread_flock, rb_file_flock): use UBF feature.
-
- * process.c (rb_waitpid_blocking, rb_waitpid): use UBF feature.
-
- * thread.c (rb_thread_debug): added runtime debugging flag.
-
- * thread.c (BLOCKING_REGION): restore previous UBF.
-
- * thread.c (rb_thread_blocking_region): default UBF to interrupt
- in system dependent way by RB_UBF_DFL.
- + ubf_select() on posix system
- + ubf_handle() on Win32
- + none on cygwin
-
- * thread_win32.ci (rb_w32_wait_events_blocking): blocking version.
-
- * win32/win32.c (waitpid): use rb_w32_wait_events_blocking().
-
-Sat Feb 24 17:45:48 2007 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (f_arg, opt_f_block_arg): ripper should export VALUE.
-
-Sat Feb 24 16:52:55 2007 Minero Aoki <aamine@loveruby.net>
-
- * bootstraptest/runner.rb: fix syntax error.
-
-Sat Feb 24 16:51:09 2007 Minero Aoki <aamine@loveruby.net>
-
- * bootstraptest/runner.rb: new option --help.
-
-Sat Feb 24 16:47:33 2007 Minero Aoki <aamine@loveruby.net>
-
- * bootstraptest: new test suite.
-
- * bootstraptest/runner.rb: new file.
-
- * bootstraptest/test_literal.rb: new file.
-
- * bootstraptest/test_method.rb: new file.
-
-Sat Feb 24 16:29:15 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (StartSocket): remove unnecessary code.
-
-Sat Feb 24 16:04:30 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (struct local_vars): remove unused nofree member from
- struct.
-
- * parse.y (parser_free): ditto.
-
-Sat Feb 24 15:57:19 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/thread.rb (ConditionVariable#broadcast): use Mutex
- instead of Thread.exclusive.
-
- * lib/monitor.rb (MonitorMixin#mon_exit): unset @mon_owner
- before calling Mutex#unlock.
-
-Sat Feb 24 15:51:45 2007 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (program): remove useless assignment to reduce warning.
-
-Sat Feb 24 15:41:51 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (lambda): remove unused clause from the rule to stop
- warning.
-
-Sat Feb 24 15:41:22 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/thread.rb: do not redefine Mutex#synchronize.
-
-Sat Feb 24 15:14:02 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/monitor.rb: rewritten using Mutex/ConditionVariable.
-
-Sat Feb 24 13:25:32 2007 Koichi Sasada <ko1@atdot.net>
-
- * lib/soap/mapping/factory.rb: catch up with spec changes (return
- Symbols instead of Strings).
-
- * lib/soap/mapping/mapping.rb: ditto.
-
-Sat Feb 24 10:49:55 2007 Koichi Sasada <ko1@atdot.net>
-
- * parse.y, node.h, compile.c: change node tree structure. a purpose
- of this change is to unify argument structure of method and block.
- this change prohibits duplicate block parameter name.
- new argument information:
- NODE_ARGS [m: int, o: NODE_OPT_ARG, ->]
- NODE_ARGS_AUX [r: ID, b: ID, ->]
- NODE_ARGS_AUX [Pst: id, Plen: int, init: NODE*]
- optarg information:
- NODE_OPT_ARGS [idx, expr, ->]
-
- * vm_macro.def: ditto.
-
- * gc.c: ditto.
-
- * iseq.c: ditto.
-
- * compile.h: fix debug function name.
-
- * test/ripper/test_scanner_events.rb: |_,_,foo| -> |_1,_2,foo|
-
- * test/ruby/test_lambda.rb: disable test temporarily.
-
-Sat Feb 24 10:46:28 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/testunit/test_testcase.rb: catch up with current instance
- variable spec.
-
-Sat Feb 24 10:32:59 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: change vm_macro.def rule.
-
-Sat Feb 24 10:38:05 2007 Minero Aoki <aamine@loveruby.net>
-
- * ext/racc/cparse/cparse.c (cparse_params_mark): remove useless
- rb_gc_mark. Thanks Tomoyuki Chikanaga. [ruby-dev:30405]
-
-Sat Feb 24 07:31:35 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE_VARIANT.array,
- WIN32OLE_VARIANT#value=, refactoring.
-
- * test/win32ole/test_win32ole_variant.rb: add some test for
- WIN32OLE_VARIANT.array, WIN32OLE_VARIANT#value=.
-
-Fri Feb 23 18:37:55 2007 Minero Aoki <aamine@loveruby.net>
-
- * test/ruby/test_yield.rb: new test.
-
- * yarvtest/test_yield.rb: removed (moved to test_yield.rb).
-
-Fri Feb 23 18:27:17 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * thread.c (rb_thread_polling): check interrupts here.
-
- * thread_win32.ci (w32_wait_events): rename from w32_wait_event(), and
- now receive multiple event handles.
-
- * win32/win32.c (wait_events, rb_w32_main_context): removed.
-
- * thread_win32.ci (rb_w32_wait_events): new function.
-
- * thread_win32.ci, win32/win32.c (rb_w32_sleep, rb_w32_Sleep): move
- from win32/win32.c to thread_win32.ci, and use w32_wait_events().
-
-Fri Feb 23 18:13:22 2007 Minero Aoki <aamine@loveruby.net>
-
- * test/ruby/test_optimization.rb: new test (merges test_opts.rb).
-
- * yarvtest/test_opts.rb: removed.
-
-Fri Feb 23 16:59:39 2007 Minero Aoki <aamine@loveruby.net>
-
- * test/ruby/test_assignment.rb: merge yarvtest/test_massign.
-
- * yarvtest/test_massign.rb: removed (merged to
- test_assignment.rb).
-
-Fri Feb 23 15:58:20 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * signal.c (sighandler): need to re-install sighandler on some
- platforms.
-
-Fri Feb 23 15:05:57 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (set_pioinfo_extra): simplified.
-
-Fri Feb 23 14:23:20 2007 Minero Aoki <aamine@loveruby.net>
-
- * test/ruby/test_literal.rb: new test.
-
-Fri Feb 23 12:40:12 2007 James Edward Gray II <james@grayproductions.net>
-
- * lib/xmlrpc/client.rb (XMLRPC::Client::do_rpc): Make the
- Content-Length parameter optional for responses in
- xmlrpc/client.rb; suggested by Daniel Berger
- <Daniel.Berger@qwest.com> and approved by the maintainer.
-
- * lib/xmlrpc/create.rb (XMLRPC::Create::conv2value): Add DateTime
- support to xmlrpc; approved by the maintainer.
-
-Fri Feb 23 12:24:46 2007 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (lambda): add ripper event. This fixes bus error on
- "make test-all".
-
- * ext/ripper/extconf.rb: do not stop build.
-
-Fri Feb 23 12:16:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: remove dyna_check_gen() prototype.
-
-Fri Feb 23 11:41:21 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y, compile.c, gc.c, insns.def, intern.h, iseq.c, node.h,
- object.c, string.c, variable.c, vm_macro.def: revert private
- instance variable feature, which is postponed until next major
- release.
-
- * marshal.c: TYPE_SYMBOL2 removed; MARSHAL_MINOR reverted back to
- 8th version.
-
-Fri Feb 23 10:53:21 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * thread_pthread.ci (native_mutex_lock): do not call
- pthread_mutex_trylock().
-
-Fri Feb 23 10:31:16 2007 Minero Aoki <aamine@loveruby.net>
-
- * dln.c: use dlopen on Mac OS X 10.3 or later.
-
-Fri Feb 23 10:03:49 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_ord): need not to check string length; ord
- returns a codepoint for the first character in the string.
-
-Wed Feb 21 22:29:45 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * numeric.c (fix_equal): A bit more optimization.
-
-Wed Feb 21 17:40:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_equal): remove FIX2LONG() to optimize. suggested
- in http://t-a-w.blogspot.com/2007/02/making-ruby-faster.html.
- [ruby-talk:240223]
-
- * numeric.c (fix_cmp): ditto.
-
-Wed Feb 21 09:14:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval_load.c (rb_require_safe): should restore safe level.
-
-Tue Feb 20 21:19:29 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (installed_code_page_proc,
- ole_variant2val): small refactoring.
-
-Tue Feb 20 15:11:42 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c, vm.c, yarvcore.h: move definition of rb_call_super() to
- vm.c from eval.c. change th_call_super() to static function.
-
-Tue Feb 20 15:08:25 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/io/nonblock/test_flush.rb: YARV doesn't raise any errors if
- another thread close IO object which current thread is blocking with.
-
-Tue Feb 20 15:03:29 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (do_select, rb_thread_wait_fd_rw): raise sys error if
- errno is not 0 and EBADF.
-
-Mon Feb 19 22:15:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_REPLACE_TYPE): cache convertible type info.
-
- * intern.h (rb_detach_process): use rb_pid_t instead of pid_t.
-
- * ruby.h (PIDT2NUM, NUM2PIDT, UIDT2NUM, NUM2UIDT, GIDT2NUM, NUM2GIDT):
- defaulted to conversion using long.
-
-Mon Feb 19 17:14:28 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (unix_peeraddr): wrong syscall name in error
- message for #peeraddr. a patch from Sam Roberts
- <sroberts at uniserve.com>. [ruby-core:10366]
-
-Sun Feb 18 22:56:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/etc/etc.c (etc_getgrgid): missed to replace a macro.
-
-Sun Feb 18 19:33:00 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb: updated based on date2 4.0.3.
-
-Sun Feb 18 13:11:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (pid_t, uid_t, gid_t): check if defined.
-
- * intern.h, process.c, rubyio.h, ext/etc/etc.c, ext/pty/pty.c: use
- rb_{pid,uid,gid}_t instead of plain int. [ruby-dev:30376]
-
- * ext/etc/extconf.rb (PIDT2NUM, NUM2PIDT, UIDT2NUM, NUM2UIDT, GIDT2NUM,
- NUM2GIDT): moved to configure.in.
-
-Fri Feb 16 21:34:33 2007 Koichi Sasada <ko1@atdot.net>
-
- * object.c (rb_obj_ivar_set/get/defined): fix to check :@_v/C id.
-
- * test/testunit/test_testcase.rb: fix to use instance_variable_get()
- to access @_result.
-
-Fri Feb 16 20:59:10 2007 Koichi Sasada <ko1@atdot.net>
-
- * intern.h: add a prototype of rb_sym_to_s().
-
-Fri Feb 16 19:24:22 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * math.c (math_log): update document to mention second optional
- argument for logarithm base.
-
-Fri Feb 16 19:19:21 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (mrhs): need to append by arg_append().
- [ruby-talk:239385]
-
-Fri Feb 16 11:18:21 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/.document: Apply patch for irb, e2mmap and README by Hugh Sasse
- <hgs at dmu.ac.uk> from [ruby-core:10135]
-
- * lib/prettyprint.rb: Suppress RDoc for PrettyPrint test suite.
-
-Thu Feb 15 20:48:36 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (set_pioinfo_extra): new function for VC++8 SP1
- workaround. [ruby-core:10259]
-
- * win32/win32.c (NtInitialize): call above function.
-
-Thu Feb 15 16:25:54 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/uri/generic.rb (URI::Generic::userinfo): Considering how
- `scheme://user:@...', `scheme://:password@...' and
- `scheme://:@...' are parsed, an empty user name or password
- should be allowed and represented as it is.
-
-Thu Feb 15 01:52:53 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.(c|h), yarvcore.(c|h) (yarvGlobalStateVersion): rename to
- ruby_vm_global_state_version.
-
-Thu Feb 15 01:50:26 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/fileutils/test_fileutils.rb (check_singleton): fix to use
- symbol instead of string.
-
- * test/io/nonblock/test_flush.rb: enable tests.
-
- * test/xmlrpc/test_webrick_server.rb: ditto.
-
-Thu Feb 15 01:43:45 2007 Koichi Sasada <ko1@atdot.net>
-
- * lib/delegate.rb: catch up with class local variable (@_v) spec.
-
- * lib/singleton.rb: ditto.
-
-Wed Feb 14 22:52:43 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_variant2val): VC++6 does not
- support VT_I8, VT_UI8.
-
-Wed Feb 14 22:10:21 2007 Koichi Sasada <ko1@atdot.net>
-
- * configure.in: change stack limit to 2MB from 32MB.
-
- * win32/Makefile.sub: ditto.
-
-Wed Feb 14 21:39:36 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/lib/digest.rb (Digest::self.const_missing): Drop
- autoloads for sha2 classes in favor of handling in
- const_missing(), to work around a problem exposed on OS X.
-
-Wed Feb 14 21:19:47 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.ci (native_thread_create): adjust 4KB (page size)
- alignment.
-
-Wed Feb 14 21:12:36 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.ci (CHECK_ERR): call rb_bug()
- instead of printf() and exit().
-
-Wed Feb 14 16:48:56 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/date/format.rb (Date::Format::Bag::method_missing): need not
- to use instance variables corresponding each method; use Hash
- instead.
-
-Wed Feb 14 13:12:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (reg_operand): allow symbols to be operands for regular
- expression matches.
-
- * string.c (Init_String): allow Symbol#===.
-
- * lib/date/format.rb (Date::Format::Bag::to_hash): string
- added prefixes.
-
-Wed Feb 14 12:58:38 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (do_select): fix to iterate select().
- on cygwin/mswin32, iterate in unblocking region.
-
- * thread.c (rb_thread_select): don't iterate on this function.
- (iterate in do_select).
-
-Wed Feb 14 11:39:18 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (set_unblock_function): fix function interface.
-
-Wed Feb 14 11:12:02 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_load.c, yarvcore.h: use rb_vm_t#loaded_features instead of
- rb_features (global variable).
-
- * yarvcore.c: mark rb_vm_t#loaded_features.
-
-Wed Feb 14 08:46:25 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * compile.c (defined_expr): no longer distinguish ordinary local
- variables and in-block local variables in defined? value.
-
-Wed Feb 14 03:14:42 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/uri/generic.rb (URI::Generic::userinfo): should support
- empty password. [ruby-core:10290]
-
- * lib/uri/generic.rb (URI::Generic::set_password): password can be
- cleared by nil. [ruby-core:10290]
-
-Wed Feb 14 03:10:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (struct local_vars): no need to warn out-of-scope
- variables; remove dnames member from struct.
-
-Wed Feb 14 03:04:10 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: RVarmap no longer used as yytype; removed.
-
- * parse.y (dyna_push_gen): no longer need return value.
-
- * parse.y (dyna_pop_gen): no longer need argument.
-
- * parse.y (local_push_gen): initialize nofree.
-
-Wed Feb 14 00:30:07 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (init_unixsock): path may contain NUL for
- abstract unix sockets. [ruby-core:10288]
-
-Tue Feb 13 02:21:12 2007 Sam Roberts <sroberts@uniserve.com>
-
- * io.c (rb_f_syscall): Fix buffer overflow with syscall
- arguments. [ruby-bugs:PR#8541]
-
-Mon Feb 12 13:57:30 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_variant2val): support VT_I8, VT_UI8.
-
-Mon Feb 12 11:48:52 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/dublincore.rb, lib/rss/maker/dublincore.rb: dc_rightses
- -> dc_rights_list. dc_rightses still exists for backward
- compatibility. [ruby-core:8350]
-
- * test/rss/test_maker_dc.rb: added tests for dc_rights_list.
-
-Sun Feb 11 22:40:17 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_ptrtype2val): ole_type, ole_type_detail
- should not return "VARIANT,VARIANT".
-
-Sun Feb 11 22:11:05 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/xml-stylesheet.rb (RSS::XMLStyleSheet#initialize):
- kept backward compatibility.
-
-Sun Feb 11 22:10:08 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/parser.rb (RSS::ListenerMixin#start_else_element): used
- const_defined? instead of constants.include?.
-
-Sun Feb 11 18:47:14 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_val2olevariantdata):
- WIN32OLE_VARIANT#new accepts nil when variant type is VT_ARRAY.
-
- * test/win32ole/test_win32ole_variant.rb: ditto.
-
- * ext/win32ole/win32ole.c: small refactoring.
-
-Sun Feb 11 07:42:25 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/cgi.rb (CGI::QueryExtension::read_multipart): Properly parse
- a quoted-string in a Content-Disposition value.
-
-Sat Feb 10 20:21:29 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE#ole_query_interface.
- thanks to Mikael Pahmp.
-
- * test/win32ole/test_win32ole.rb: ditto.
-
-Sat Feb 10 17:46:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk: targets which depend on yarvcore.h now depend on
- rubysig.h too.
-
- * yarvcore.h (rb_vm_t): use rb_atomic_t instead of int.
-
-Sat Feb 10 00:13:11 2007 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: fix typo (TkConfigMethod::__confinfo_cmd,
- __conv_keyonly_opts).
-
-Fri Feb 9 12:33:40 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread_win32.ci (w32_show_error_message): renamed to w32_error.
- this function do rb_bug().
-
- * thread_win32.ci (w32_set_event, w32_reset_event, w32_close_handle,
- w32_resume_thread): added. fix to use these functions instead calling
- win32api directly.
-
- * thread_win32.ci (w32_create_thread): create suspend thread
- (caller must call w32_resume_thread()).
-
-Fri Feb 9 11:03:40 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_readpartial.rb: tests are working on mswin32/cygwin.
-
-Fri Feb 9 05:08:17 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c, thread_pthread.ci, thread_win32.ci (thread_start_func_1):
- move cleanup function to thread_start_func_2().
-
- * thread.c, thread_pthread.ci, thread_win32.ci:
- add more destruct functions.
- (native_thread_destroy() and native_mutex_destroy())
-
- * thread_pthread.ci, thread_pthread.h: make native_mutex_* functions
- (check error, etc), it's not macro any more.
-
- * thread_win32.ci (thread_start_func_1): store some values before
- running thread (to release these after running thread).
-
- * thread_win32.ci (native_thread_create): fix spaces.
-
-Thu Feb 8 22:44:04 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_set_safe_array, ole_variant2val,
- ole_val_ary2variant_ary): fix WIN32OLE_VARIANT.new bug when
- 1st argument is empty array, and when 2nd argument is
- VT_ARRAY|VT_BYREF.
-
- * test/win32ole/test_win32ole_variant.rb: ditto.
-
-Thu Feb 8 22:39:09 2007 Koichi Sasada <ko1@atdot.net>
-
- * yarvtest/yarvtest.rb: check target command names.
-
-Thu Feb 8 22:31:45 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_clone.rb: fix to current spec
- (Module should not be occur many times in ancestors).
-
-Thu Feb 8 22:26:14 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_string.rb: ("foo" == :foo) and ("foo" === :foo)
- should be false.
-
- * ChangeLog: fix last messages.
-
-Thu Feb 8 22:24:06 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_module.rb: fix to use Symbol instead of String.
-
- * test/ruby/test_module.rb: remove space before argument parentheses.
-
-Thu Feb 8 22:02:14 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/marshaltestlib.rb: eval(sym) -> eval(sym.to_s)
-
-Thu Feb 8 21:35:16 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_propertyputref.rb (setup): fix typo.
-
- * test/win32ole/test_win32ole_event.rb: should not use
- InternetExplorer.gohome to test.
-
-Thu Feb 8 21:02:07 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (GVL_UNLOCK_RANGE): rename to BLOCKING_REGION().
-
- * thread.c (rb_thread_run_parallel): rename to
- rb_thread_blocking_region().
-
-Thu Feb 8 15:48:44 2007 Koichi Sasada <ko1@atdot.net>
-
- * yarvcore.h, thread.c: fix to use pthread on cygwin.
-
- * yarvcore.h, thread.c: move GVL_UNLOCK_BEGIN() and GVL_UNLOCK_END()
- from yarvcore.h to thread.c.
-
- * thread.c: change GVL_UNLOCK_RANGE() arguments
- (adding ubf as 2nd argument).
-
- * thread.c: fix to use polling in select on cygwin and mswin32.
-
- * thread.c, thread_pthread.ci, thread_win32.ci, yarvcore.h:
- rename:
- * rb_thread_t#interrupt_function -> unblock_function
- * rb_interrupt_function_t -> rb_unblock_function
- * some interrupt function name -> ubf_*
- * yarv_* -> *
-
-Thu Feb 8 16:08:02 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: fix to use RUNRUBY instead of BASERUBY if possible.
-
- * common.mk ($(INSNS) rule): remove $(PROGRAM) first.
-
-Thu Feb 8 15:43:05 2007 Koichi Sasada <ko1@atdot.net>
-
- * process.c: fix to use rb_status_line_set/get/clear().
-
- * eval_intern.h: fix line break.
-
-Thu Feb 8 15:00:14 2007 Koichi Sasada <ko1@atdot.net>
-
- * blockinlining.c, error.c, eval.c, eval_error.h, eval_intern.h,
- eval_jump.h, eval_load.c, eval_safe.h, gc.c, proc.c, signal.c,
- thread.c, thread_pthread.ci, thread_win32.ci, vm.c, vm.h,
- vm_dump.c, vm_evalbody.ci, yarvcore.c, yarvcore.h:
- fix typo (rb_thead_t -> rb_thread_t).
-
- * eval_intern.h: remove unused definitions.
-
- * common.mk: fix around vm_opts.h path
- and remove harmful argument passed to insns2vm.rb.
-
-Thu Feb 8 03:11:47 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::unescapeHTML): invalid decoding for single
- unescaped ampersand. a patch from Tietew
- <tietew+ruby-dev at tietew.net> in [ruby-dev:30292].
- fixed: [ruby-dev:30289]
-
-Wed Feb 7 23:25:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (specific_eval): suppress warning.
-
- * thread_win32.h: undefine _WIN32 on cygwin. [ruby-dev:30303]
-
-Wed Feb 7 22:41:34 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_intern.h: remove UNSUPPORTED() macro.
-
- * thread.c: fix to define Continuation methods
- (they only do rb_notimplement()).
-
-Wed Feb 7 22:33:58 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_intern.h, yarvcore.h: remove unused macro definition.
-
-Wed Feb 7 22:30:28 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval.c: fixed to use ANSI function style.
-
-Wed Feb 7 09:35:32 2007 Koichi Sasada <ko1@atdot.net>
-
- * this commit is a result of refactoring. only renaming functions,
- moving definitions place, add/remove prototypes, deleting
- unused variables and removing yarv.h.
- This commit doesn't change any behavior of ruby/vm.
-
- * yarv.h, common.mk: remove yarv.h (contents are moved to yarvcore.h).
-
- * error.c, eval_intern.h: include yarvcore.h instead yarv.h
-
- * rename some functions:
- * debug.[ch]: debug_*() -> ruby_debug_*()
- * iseq.c: iseq_*() -> rb_iseq_*(), ruby_iseq_disasm()
- * iseq.c: node_name() -> ruby_node_name()
- * vm.c: yarv_check_redefinition_opt_method() ->
- rb_vm_check_redefinition_opt_method()
-
- * some refactoring with checking -Wall.
-
- * array.c: remove rb_ary_ptr() (unused) and remove unused
- local variables.
-
- * object.c: add a prototype of rb_mod_module_exec().
-
- * eval_intern.h (ruby_cref): set it inline.
-
- * eval_load.c (rb_load), yarvcore.c: yarv_load() -> rb_load_internal().
-
- * parse.y: add a prototype of rb_parse_in_eval() (in eval.c).
-
- * process.c: add a prototype of rb_thread_stop_timer_thread() (in thread.c).
-
- * thread.c: remove raw_gets() function (unused) and fix some format
- mismatch (format mismatches have remained yet. this is todo).
-
- * thread.c (rb_thread_wait_fd_rw): fix typo on label name.
-
- * thread_pthread.ci: comment out codes with USE_THREAD_CACHE.
-
- * vm.c (rb_svar, rb_backref_get, rb_backref_get,
- rb_lastline_get, rb_lastline_set) : moved from yarvcore.c.
-
- * vm.c (yarv_init_redefined_flag): add a prototype and rename
- yarv_opt_method_table to vm_opt_method_table.
-
- * vm.c (rb_thread_eval): moved from yarvcore.c.
-
- * yarvcore.c: remove unused global variables and fix to use nsdr().
-
-Wed Feb 7 03:39:32 2007 Koichi Sasada <ko1@atdot.net>
-
- * blockinlining.c, compile.c, compile.h, error.c, eval.c,
- eval_intern.h, eval_jump.h, eval_load.c, eval_method.h,
- eval_safe.h, gc.c, insnhelper.h, insns.def, iseq.c, proc.c,
- process.c, signal.c, thread.c, thread_pthread.ci, thread_win32.ci,
- vm.c, vm.h, vm_dump.c, vm_evalbody.ci, vm_macro.def,
- yarv.h, yarvcore.h, yarvcore.c: change type and macro names:
- * yarv_*_t -> rb_*_t
- * yarv_*_struct -> rb_*_struct
- * yarv_tag -> rb_vm_tag
- * YARV_* -> RUBY_VM_*
-
- * proc.c, vm.c: move functions about env object creation
- from proc.c to vm.c.
-
- * proc.c, yarvcore.c: fix rb_cVM initialization place.
-
- * inits.c: change Init_ISeq() order (after Init_VM).
-
- * ruby.h, proc.c: change declaration place of rb_cEnv
- from proc.c to ruby.c.
-
-Tue Feb 6 22:06:45 2007 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/{nkf.c,utf8tbl.c}:
- imported nkf 2007-01-28.
- * Fixed: can't decode MIME encode JIS string.
- * Fixed: Fullwidth-halfwidth conversion.
- * Support DoCoMo's and Softbank's EMOJI
- * Support CP932, CP5022x, eucJP-ms UDC
- * Support UTF-32 encoding
- * Support beyond BMP
- [ruby-dev:29700] [ruby-dev:29922] [ruby-dev:30144]
-
-Tue Feb 6 20:36:19 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb, lib/rss/parser.rb: followed current Ruby
- specification. [ruby-dev:30274]
-
-Tue Feb 6 20:29:44 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb, lib/rss/parser.rb: removed needless code for
- backward compatibility.
-
-Tue Feb 6 18:43:17 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb: moved fixes for EPIPE to the correct
- place. [ruby-core:10204]
-
-Tue Feb 6 16:38:08 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm_opts.h: set properties:
- svn:keywords: Author Date Id Revision
- svn:eol-style: native
-
-Tue Feb 6 15:55:46 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (ivar_i): need to support class local instance
- variables.
-
-Tue Feb 6 15:44:11 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each): fix setting is_local flag.
-
- * yarvtest/test_class.rb: add a test for class local instance variable.
-
-Tue Feb 6 14:15:34 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c, insns.def: remove (get|set)instancevariable2 and add a
- operand is_local to (get|set)instancevariable.
-
- * yarvtest/test_class.rb: add a test for class local instance variable.
-
- * parse.y (rb_decompose_ivar2): remove unused variable oid.
-
- * tool/insns2vm.rb: remove needless require.
-
-Tue Feb 6 11:18:41 2007 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb: check the control connection on EPIPE.
- Thanks, Simon Williams. [ruby-core:9547]
-
-Tue Feb 6 11:03:27 2007 Koichi Sasada <ko1@atdot.net>
-
- * complement last commit.
-
- * common.mk (*.inc): use VPATH.
-
- * vm_opts.h: renamed from vm_opts.h.base.
-
-Tue Feb 6 10:02:41 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * tool/insns2vm.rb: use vm_opts.h in VPATH.
-
-Tue Feb 6 03:47:58 2007 Koichi Sasada <ko1@atdot.net>
-
- * proc.c: support Binding#eval.
-
- * yarvtest/test_eval.rb: add a test for above change.
-
-Tue Feb 6 03:13:33 2007 Koichi Sasada <ko1@atdot.net>
-
- * proc.c: refactoring (remove K&R style, move Binding stuffs from
- Init_Proc() to Init_Binding()).
-
-Tue Feb 6 01:07:14 2007 Koichi Sasada <ko1@atdot.net>
-
- * intern.h: prepare rb_last_status_get() and rb_last_status_set().
- Use these functions instead of rb_last_status ([ruby-dev:30264]).
-
- * process.c: define above functions.
-
- * ext/pty/pty.c: use above functions.
-
- * io.c (pipe_finalize): ditto.
-
- * process.c: ditto.
-
-Mon Feb 5 21:26:56 2007 Koichi Sasada <ko1@atdot.net>
-
- * ruby.h: add a prototype of rb_id2str().
-
-Mon Feb 5 21:06:50 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_thread.c, common.mk: remove eval_thread.c.
-
- * yarvcore.c: rename cYarvThread to rb_cThread.
-
- * gc.c: remove YARV_* prefix.
-
- * gc.h: add an include guard and prototype of rb_gc_set_stack_end().
-
- * inits.c: fix to ANSI prototype style and reorder Init_*().
-
- * io.c (pipe_finalize): TODO: comment out last_status.
-
- * process.c, yarvcore.h: fix to use yarv_vm_t#last_status instead of
- rb_last_status and make last_status_get() to access $?.
-
- * yarvcore.c (vm_mark): mark yarv_vm_t#last_status.
-
- * ruby.h: add declarations of rb_cISeq and rb_cVM.
-
- * thread.c: move eval_thread.c codes to thread.c and remove yarv_*
- function prefix.
-
- * thread.c (thread_start_func_2): use yarv_thread_t#first_func if
- it is not null.
-
- * vm.c: fix copyright year.
-
- * yarvcore.c (Init_vm): rename to Init_VM().
-
-Mon Feb 5 04:09:48 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_frame_callee): check if prev_cfp can be accessible.
- a patch from Yoshinori Sano <yoshinori.sano at gmail.com> in
- [ruby-dev:30252]. solves [ruby-dev:30200] and [ruby-core:9856].
-
-Sun Feb 4 20:34:41 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rss/rss-assertions.rb: removed needless code for backward
- compatibility.
-
-Sun Feb 4 02:22:59 2007 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/cgi.rb (CGI::QueryExtension::read_multipart): Remove a debug
- print.
-
-Sat Feb 3 23:51:58 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (rb_compose_ivar2): function to create a new ivar2
- symbol from a symbol and a class. back-ported from matzruby.
-
- * parse.y (rb_decompose_ivar2): reverse function of
- rb_compose_ivar2().
-
- * marshal.c (w_symbol): support class local instance variables.
-
- * marshal.c (r_object0): ditto.
-
- * compile.c (defined_expr): ditto.
-
- * compile.c (iseq_compile_each): ditto.
-
- * insns.def: add two new instructions: getinstancevariable2 and
- setinstancevariable2.
-
-Sat Feb 3 23:21:13 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * insns.def (setclassvariable): remove unnecessary operand.
-
- * compile.c (iseq_compile_each): ditto.
-
- * common.mk (insns_info.inc): add dependency for insns_info.inc.
-
-Sat Feb 3 14:32:58 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_val2olevariantdata, ole_val2variant):
- fix the bug of WIN32OLE_VARIANT.new when variant type is
- VT_ARRAY.
-
- * ext/win32ole/sample/excel1.rb: rewrite using WIN32OLE_VARIANT.
-
- * test/win32ole/test_win32ole.rb: add some test.
-
- * test/win32ole/test_win32ole_variant.rb: ditto.
-
-Sat Feb 3 03:35:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, */Makefile.sub, common.mk (vmasm): generalized.
-
- * common.mk (runruby, benchmark, benchmark-each, tbench): use
- PROGRAM for the file to be built.
-
- * proc.c (yarv_proc_alloc): needs return.
-
- * call_cfunc.ci, compile.c, compile.h, debug.h, eval.c,
- eval_error.h, eval_jump.h, eval_load.c, eval_thread.c, gc.c,
- insnhelper.h, insns.def, iseq.c, main.c, numeric.c, parse.y,
- range.c, ruby.h, signal.c, thread.c, thread_win32.ci, vm.c,
- vm.h, vm_dump.c, vm_evalbody.ci, yarvcore.c, yarvcore.h:
- fixed indents and non-C90 comments.
-
- * regenc.h: revert to before YARV.
-
- * lib/mkmf.rb (create_makefile): make object files depend on
- extconf.h even if depend file exists.
-
-Fri Feb 2 23:39:42 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * common.mk (bin): add more dependency. a patch from Tadashi
- Saito <shiba at mail2.accsnet.ne.jp>. [ruby-dev:30245]
-
-Fri Feb 2 18:44:31 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * insns.def (setclassvariable): remove warn argument.
-
-Fri Feb 2 18:36:40 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * common.mk (compile.$(OBJEXT)): add config.h to vm.c and
- compile.c.
-
-Fri Feb 2 18:27:54 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c: remove duplicated global variables rb_cProc and
- rb_cBinding. [ruby-dev:30242]
-
-Fri Feb 2 00:13:44 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h (SYMBOL_P): make Symbol immediate again for performance.
-
- * string.c: redesign symbol methods.
-
-Thu Feb 1 23:25:21 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_id2str): store Strings for operator symbols.
- [ruby-dev:30235]
-
-Thu Feb 1 21:04:39 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (assignable_gen): no need to generate NODE_CVDECL.
-
- * compile.c (iseq_compile_each): no NODE_CVDECL.
-
-Thu Feb 1 20:53:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * vm.c (eval_get_cvar_base): destination for class variable access
- is now strictly innermost surrounding class or module. warned
- if accessed from toplevel.
-
- * variable.c (rb_cvar_get): new class variable look-up scheme:
- 1) look up in the class. 2) if the class is singleton attached
- to a class (i.e. metaclass) then start look up in the attached
- class and its ancestors. 3) otherwise, look-up in ancestors of
- the class.
-
- * eval.c (cvar_cbase): destination for class variable access is
- the class/module that holds the method, or cbase outside of
- methods.
-
-Thu Feb 1 20:31:41 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_cvar_set): remove warn argument.
-
-Wed Jan 31 14:52:09 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_iterator.rb (TestIterator::test_block_given_within_iterator):
- add new test. [ruby-core:10125]
-
-Tue Jan 30 17:01:21 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * string.c (rb_str_sub_bang): calling rb_str_modify() should be just
- before actually modifying the string.
- fixed: [ruby-dev:30211] (originally reported by zunda)
-
-Tue Jan 30 13:24:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (int_pred): add Integer#pred corresponding
- Integer#succ. [RCR#5]
-
-Tue Jan 30 12:05:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb: autoconf 2.61 support. [ruby-core:10016]
-
-Mon Jan 29 23:52:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * tool/compile.rb: replace YARVCore by VM class.
-
-Mon Jan 29 17:52:44 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/date/format.rb (Date::Format::Bag::method_missing): add
- prefix to avoid making t class-local instance variable.
-
-Mon Jan 29 21:32:37 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE.locale=, WIN32OLE.locale,
- WIN32OLE_VARIANT#vartype.
-
- * test/win32ole/test_win32ole.rb: add test for WIN32OLE.locale=,
- WIN32OLE.locale.
-
- * test/win32ole/test_win32ole_variant.rb: add test for
- WIN32OLE_VARIANT#vartype.
-
-Mon Jan 29 14:14:35 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * tool/parse.rb: replace YARVCore by VM class.
- http://d.hatena.ne.jp/ysano2005/20070128
-
-Sun Jan 28 08:41:49 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: refactoring.
-
-Sat Jan 27 18:36:33 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_val2olevariantdata): bug fix.
- WIN32OLE_VARIANT.new check that 1st argument should T_ARRAY
- when variant type is VT_ARRAY.
-
- * test/win32ole/test_win32ole_variant.rb: add some test.
-
-Fri Jan 26 23:55:56 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: bug fix of WIN32OLE_VARIANT when variant
- type is VT_BYREF|VT_VARIANT.
-
- * test/win32ole/test_win32ole_variant_with_ie.rb: ditto.
-
-Fri Jan 26 12:03:39 2007 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb (TkConfigMethod#__confinfo_cmd,
- __conv_keyonly_optkeys): make them private [ruby-dev:30074].
-
- * ext/tk/lib/tk/txtwin_abst.rb: fix typo [ruby-dev:30073].
-
- * ext/tk/lib/tk/canvas.rb (TkCanvas#scan_dragto): lack of an argument.
-
- * ext/tk/lib/tk/canvas.rb: clarify the including module name
- [ruby-dev:30080].
-
- * ext/tk/lib/tk/scrollable.rb: change primary name of modules
- [ruby-dev:30080].
-
-Fri Jan 26 07:48:57 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c (enumerator_init_copy): need to copy internal
- structure on clone and dup. [ruby-dev:30192]
-
-Wed Jan 24 20:34:51 2007 Kouhei Sutou <kou@cozmixng.org>
-
- * test/ruby/test_iterator.rb: removed a needless workaround.
-
-Wed Jan 24 18:05:39 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): fix
- regexp font-lock bug. [ruby-talk:235758]
-
-Tue Jan 23 18:26:12 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::QueryExtension::read_multipart): use == instead
- of ===. [ruby-dev:30176]
-
-Tue Jan 23 15:39:25 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * Makefile.in, common.mk, configure.in, */{Makefile.sub, configure.bat,
- setup.mak}: add --with-baseruby configure option.
-
-Mon Jan 22 14:57:25 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c: fix errors in socket sample code.
- [ruby-core:09992]
-
-Sat Jan 20 21:05:18 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (fole_s_set_code_page): WIN32OLE.codepage=
- accepts installed codepage.
-
- * test/win32ole/test_win32ole.rb (test_s_codepage_changed): ditto.
-
-Sat Jan 20 11:18:49 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_invoke, ole_invoke2, ole_propertyput):
- modify WIN32OLERuntimeError message.
-
- * test/win32ole/test_win32ole.rb: ditto.
-
-Sat Jan 20 06:45:21 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval_proc.c (method_receiver): add new method to get the bound
- receiver of the method object. [ruby-talk:234949]
-
- * eval_proc.c (method_name): new method to get the name of a
- method.
-
- * eval_proc.c (method_owner): a new method to get the class or
- module that defines the method.
-
-Fri Jan 19 17:12:23 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (Init_win32ole): add WIN32OLE_VARIANT::Empty,
- WIN32OLE_VARIANT::Null, WIN32OLE_VARIANT::Nothing.
-
- * test/win32ole/test_win32ole_variant.rb: ditto.
-
- * test/win32ole/test_nil2vtempty.rb(test_openSchema): ditto.
-
-Fri Jan 19 06:53:38 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (olevariant_free): fix memory leak.
-
- * ext/win32ole/win32ole.c (ole_val2olevariantdata):
- WIN32OLE_VARIANT.new accepts nil as first argument for some VARIANT
- TYPE.
-
- * test/win32ole/test_win32ole_variant.rb: ditto.
-
-Wed Jan 17 17:31:28 2007 Koichi Sasada <ko1@atdot.net>
-
- * some refactoring around yarvcore and proc.
-
- * eval_proc.c: renamed to proc.c.
-
- * common.mk: ditto.
-
- * yarvcore.h, yarvcore.c: rename or remove some global variables
- removed: mYarvCore, mYarvInsns
- renamed: cYarvISeq -> rb_cISeq,
- cYarvProc -> rb_cProc, cYarvBinding -> rb_cBinding
- ::YarvCore module is removed and ::YarvCore::VM class becomes ::VM.
- And change/remove some functions which added with YARV.
-
- * compile.c: ditto.
-
- * eval.c: ditto.
-
- * iseq.c: ditto.
-
- * vm.c: ditto.
-
- * inits.c: rename Init_yarvcore to Init_vm.
-
- * yarvcore.c, proc.c: move some functions and initialization
- from yarvcore.c to proc.c.
-
- * intern.h, proc.c: add global function rb_binding_new(void).
-
-Tue Jan 16 17:49:29 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (eval_search_super_klass): rename to search_super_klass() and
- use it by th_call_super().
-
- * insns.def: ditto.
-
-Tue Jan 16 17:48:11 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: fix ruby script path.
-
-Tue Jan 16 17:39:44 2007 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (invoke_block): fix to specify self.
-
-Tue Jan 16 12:12:27 2007 Koichi Sasada <ko1@atdot.net>
-
- * env.h: removed
-
-Tue Jan 16 12:00:06 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_proc.c (rb_proc_new): added.
-
- * string.c (sym_to_proc): supported.
-
- * vm.c (invoke_block, th_invoke_yield, th_invoke_proc): fix to support
- rb_proc_new.
-
- * yarvcore.c: add a test code.
-
-Sat Jan 13 23:24:59 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_free, ole_type_free,
- olemethod_free, olevariable_free, oleparam_free,
- ole_event_free): fix memory leak. [ruby-core:09846]
-
-Wed Jan 10 00:10:23 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_replace): use ptr and len of orig instead of
- shared. fixed: [ruby-dev:30116]
-
-Tue Jan 9 17:48:38 2007 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (rb_find_file): should not call fpath_check() with NULL.
- fixed: [ruby-core:09867]
-
-Tue Jan 9 12:29:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/etc/etc.c (etc_getpwuid, etc_getgrgid): fix to correctly
- convert uid/gid from VALUE.
-
- * ext/etc/etc.c (etc_getpwuid): ditto.
-
-Tue Jan 9 03:54:38 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_upto): String#upto from empty string makes
- infinite loop. [ruby-core:09864]
-
- * string.c (rb_str_upto): use RSTRING_LEN().
-
-Sun Jan 7 18:36:05 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread.c (rb_thread_stop_timer_thread(), rb_thread_reset_timer_thread(),
- rb_thread_start_timer_thread()): added.
-
- * thread_pthread.ci: add a native_thread_join() and move
- rb_thread_reset_timer_thread() definition to thread.c.
-
- * thread_win32.ci: ditto
-
- * process.c: fix before_exec(), after_exec() to stop timer thread
- (and restart timer thread if exec failed). and fix to reset
- timer thread information when forked child process starts
- (to fix [ruby-core:09822]).
-
-Sun Jan 7 18:28:17 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: add a "compare" rule and fix MATZRUBY variable
-
-Sun Jan 7 17:47:16 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_win32ole.rb: add test for WIN32OLE#[],
- WIN32OLE#[]=.
-
- * ext/win32ole/win32ole.c: update comment for rdoc of
- WIN32OLE#[] and WIN32OLE#[]=.
-
-Sun Jan 7 12:13:26 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#find_class_comment):
- Look for class and module comments above rb_define_class and
- rb_define_module. Patch by Daniel Berger <djberg96 at gmail.com>
-
-Sun Jan 7 10:32:12 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#handle_constants):
- Properly handle escaping of : in comments.
- * test/rdoc/parsers/test_parse_c.rb:
- Test RDoc::C_Parser#do_classes and Rdoc::C_Parser#find_class_comment.
-
-Sun Jan 7 09:31:18 2007 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb: updated based on date2 4.0.1.
-
-Sat Jan 6 18:46:34 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_getline_fast, rb_io_getline): increase lineno
- when met the delimiter or EOF. fixed: [ruby-dev:30081]
-
- * io.c (prepare_getline_args, rb_io_getline_1): split
- preparation of arguments and reading. [ruby-dev:30085]
-
-Sat Jan 6 13:48:36 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def (send): fix to optimize send() with Symbol.
-
- * yarvtest/test_method.rb: add another test.
-
-Sat Jan 6 13:43:55 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: add PHONY dependency to some rules
-
-Sat Jan 6 11:50:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_read): fix wrong replacement. [ruby-dev:30070]
-
-Sat Jan 6 09:10:52 2007 Koichi Sasada <ko1@atdot.net>
-
- * insns.def: support direct method dispatch with "send" or "funcall".
- This means that "obj.send :m" skips "BasicObject#send" invocation
- (method frame creation, etc) and "obj.m" invokes directly.
- If you make backtrace, there are no entries of "send" method.
-
- * compile.c (iseq_specialized_instruction): fix to support above
-
- * eval.c: ditto (remove "static" from rb_f_send and rb_f_funcall
-
- * yarvcore.c: ditto (add a external IDs for compiler)
-
- * yarvcore.h: ditto (add a VM_CALL_SEND_BIT macro)
-
- * yarvtest/test_method.rb: add tests for above changes
-
- * eval.c: remove unused "Kernel#send" declaration
-
-Sat Jan 6 08:29:17 2007 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (Init_win32ole): add
- WIN32OLE::VARIANT::VT_EMPTY, WIN32OLE::VARIANT::VT_NULL
-
- * test/win32ole/test_win32ole_variant_m.rb (test_variant): ditto.
-
-Sat Jan 6 03:49:22 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/run.rb: change option format
-
- * common.mk: ditto
-
-Fri Jan 5 22:21:08 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/bm_app_pentomino.rb: use Array#dup instead of
- Array#clone
-
- * benchmark/bmx_temp.rb: removed
-
- * benchmark/run.rb: use run.rb instead of run_rite.rb
-
- * common.mk: ditto
-
- * benchmark/run_rite.rb: removed
-
- * common.mk: use $(srcdir)/test.rb to run a test program
- with "make run"
-
- * benchmark/bmx_temp.rb: removed and
- set svn:ignore (bmx_*.rb) to benchmark/
-
- * test.rb: set svn:ignore
-
-Fri Jan 5 21:03:08 2007 Koichi Sasada <ko1@atdot.net>
-
- * yarvtest/yarvtest.rb: fix to compare results
-
-Fri Jan 5 20:52:56 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c, compile.h: add ADD_CALL_RECEIVER() macro.
-
- * insns.def (send): use GET_SELF() direct if FCALL.
-
- * eval.c (rb_f_send): check method dispatch type to permit
- invoking private method when dispatch type is FCALL/VCALL
-
- * insns.def (opt_ltlt): remove useless statement.
-
- * vm.h: remove unused macros.
-
-Fri Jan 5 20:50:31 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/run_rite.rb: fix to use readlines instead of
- read(...).lines (because 1.8 doesn't have String#lines).
-
-Fri Jan 5 20:28:19 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread_win32.ci (rb_thread_reset_timer_thread):
- added ([ruby-dev:30086]).
-
-Fri Jan 5 20:20:36 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: add .SUFFIXES rule
-
-Fri Jan 5 15:58:15 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_method.h (rb_alias): fix to check search result
-
-Fri Jan 5 13:59:53 2007 Koichi Sasada <ko1@atdot.net>
-
- * eval_method.h (rb_add_method): fix to check old_node
-
-Fri Jan 5 12:03:07 2007 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (iseq_compile_each, set_block_local_tbl):
- support NODE_LAMBDA (partly).
-
- * sample/test.rb: restore test of NODE_LAMBDA
-
- * test/ruby/test_lambda.rb: ditto
-
-Fri Jan 5 12:31:23 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * thread_pthread.ci (native_sleep): fix tv_nsec overflow.
-
-Thu Jan 4 20:01:29 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: rename yarv-test-[all/each] to compare-test[/-each].
- purpose of "compare-test" rule is to compare ruby (trunk) and
- matzruby (branches/matzruby) binary in miniruby level. MATZRUBY
- parameter means an path to miniruby of matzruby binary. to do this
- comparison test, you should build matzruby branch.
-
- * yarvtest/yarvtest.rb: fix to use command line option as
- command names to be compared.
-
- * yarvtest/runner.rb: remove a debug output.
-
-Thu Jan 4 19:12:27 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: fix to use test.rb script in build directory.
- ($(srcdir)/test.rb -> test.rb)
-
-Thu Jan 4 17:28:05 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/utils.rb (WEBrick::Utils::TimeoutHandler#initialize):
- Arrays could not be modified in its each block. [ruby-dev:30063]
-
-Thu Jan 4 16:57:14 2007 Koichi Sasada <ko1@atdot.net>
-
- * yarv_version.h: removed.
-
- * common.mk: remove yarv_version.h from rules
-
- * yarvcore.h (Init_yarvcore): remove useless constants
-
-Thu Jan 4 17:00:06 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_asn1.c (Init_ossl_asn1):
- OpenSSL::ASN1::ASN1Data#value,#tag,#tag_class and
- OpenSSL::ASN1::BitString#unused_bits should be public.
-
-Thu Jan 4 13:45:10 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.ci: fix last changes around PTHREAD_STACK_MIN.
-
-Thu Jan 4 13:42:47 2007 Koichi Sasada <ko1@atdot.net>
-
- * common.mk: restore changes.
-
-Thu Jan 4 10:33:54 2007 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.ci: fix to skip using PTHREAD_STACK_MIN.
- [ruby-dev:30063]
-
-Thu Jan 4 10:30:11 2007 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/run_rite.rb (bm): fix to use lines.
-
-Wed Jan 3 18:49:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_getline): lineno update condition was wrong.
- [ruby-dev:30065]
-
- * io.c (rb_io_getline_fast): ditto.
-
-Wed Jan 3 11:36:51 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (ruby_dup): start GC on ENOMEM as well.
-
-Tue Jan 2 10:29:54 2007 Eric Hodel <drbrain@segment7.net>
-
- * ext/zlib/zlib.c: fix to compile on YARV
- ruby_errinfo -> rb_errinfo()
-
-Mon Jan 1 08:07:06 2007 Koichi Sasada <ko1@atdot.net>
-
- * ext/tk/tcltklib.c: fix to compile on YARV
- ruby_errinfo -> rb_errinfo(),
- ruby_safe_level -> rb_safe_level().
-
-Mon Jan 1 07:57:17 2007 Koichi Sasada <ko1@atdot.net>
-
- * test/drb/test_drbssl.rb: fix to skip drb tests.
-
-Mon Jan 1 06:13:11 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/parsers/c_parser.rb: Make Rdoc accessible. Update constant
- value information.
-
- * ext/bigdecimal/bigdecimal.c: Update constant comments to provide
- values for RDoc.
-
-Mon Jan 1 06:05:55 2007 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#handle_constants):
- Allow RDoc comment to give friendly value for rb_define_const. Patch
- by Daniel Berger <djberg96 at gmail.com>, [ruby-patches-7499].
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#handle_constants): Fix
- whitespace handling in constant comments.
-
-Mon Jan 1 00:00:00 2007 Koichi Sasada <ko1@atdot.net>
-
- * Merge YARV
-
-Sun Dec 31 16:22:48 2006 Eric Hodel <drbrain@segment7.net>
-
- * array.c: Fix Array#reject.
-
-Sun Dec 31 00:46:25 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date2.rb: removed.
-
-Sun Dec 31 00:15:13 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb: updated based on date2 4.0.
-
-Sat Dec 30 04:38:23 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_each_with_index): reuse array for yield parameters.
-
- * enum.c (enum_min, enum_max): ditto.
-
-Sat Dec 30 04:25:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_inject): reuse array for yield parameters.
-
-Sat Dec 30 02:54:22 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_gets): accepts limit argument.
-
- * ext/stringio/stringio.c (strio_readline, strio_each,
- strio_readlines): ditto.
-
-Sat Dec 30 02:22:32 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_getline): add limit capability.
-
- * io.c (rb_io_gets_m): accepts limit argument. [ruby-talk:231563]
-
- * io.c (rb_io_readline, rb_io_readlines, rb_io_each_line, argf_getline):
- ditto.
-
- * io.c (appendline): add limit capability.
-
- * io.c (rb_io_getline_fast, rb_io_getline): ditto.
-
- * io.c (rb_io_getline): small refactoring for DRY.
-
- * io.c (rb_io_s_foreach, rb_io_s_readlines): small refactoring.
-
-Thu Dec 28 15:27:38 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::Cookie::initialize): use Array() again.
- [ruby-core:09781]
-
-Wed Dec 27 20:52:32 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: remove WIN32OLE::PROPERTY class.
-
- * ext/win32ole/tests/testWIN32OLE.rb: ditto.
-
-Wed Dec 27 10:04:11 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_Array): returns 1-element array if the argument
- does not have to_ary nor to_a.
-
-Tue Dec 26 21:02:14 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * test/win32ole/test_folderitem2_invokeverb.rb: The argument
- of Shell.NameSpace should not be file path.
-
-Tue Dec 26 06:13:08 2006 Minero Aoki <aamine@loveruby.net>
-
- * ext/bigdecimal/bigdecimal.c: remove useless method
- BigDecimal#!=. [ruby-dev:30050]
-
-Thu Dec 21 15:37:17 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_slice_bang): rdoc description bug fixed.
- [ruby-core:09754]
-
-Wed Dec 20 12:54:31 2006 Koichi Sasada <ko1@atdot.net>
-
- * Convert CVS repository to Subversion repository.
-
-Mon Dec 18 08:36:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::Cookie::initialize): Array(string) no longer
- works. [ruby-core:09738]
-
-Fri Dec 15 00:19:53 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (COMPILE_RULES): latter rule has higher priority.
-
- * lib/mkmf.rb (create_makefile): remove static library before update,
- to get rid of sludge of Borland tlib.exe.
-
-Thu Dec 14 18:29:13 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/readline/readline.c: NetBSD editline does not have
- rl_username_completion_function() and rl_completion_matches().
- a patch from Takahiro Kambe <taca at back-street.net>.
- [ruby-dev:30008]
-
-Thu Dec 14 18:20:43 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/locale.rb (IRB::Locale::puts): typo fixed. a patch from
- NAKAMURA Usaku <usa@ruby-lang.org>. [ruby-dev:30012]
-
-Tue Dec 12 23:33:53 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (Switch#parse_arg, Switch#conv_arg): splat failures.
-
-Mon Dec 11 11:51:10 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/sha2/lib/sha2.rb: Moved one level up from under
- the superfluous subdirectory digest/.
-
-Mon Dec 11 11:46:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_define_const): typo fixed.
-
-Mon Dec 11 09:36:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_aset): index double decode problem.
- [ruby-core:09695]
-
-Sat Dec 9 21:39:24 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_cleanup): keep the exception till after END blocks.
- [ruby-core:09675]
-
-Sat Dec 9 11:22:00 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/locale.rb (IRB::Locale::search_file): use File.exist?
- instead of File.exists?. a patch from Yutaka Kanemoto
- <kinpoco at gmail.com> in [ruby-dev:30000].
-
-Fri Dec 8 18:11:18 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/optparse.rb: cannot put :nodoc: before method definition.
- put after it.
-
-Fri Dec 8 17:00:13 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bin/rdoc: use File.exist? instead of File.exists?.
-
-Thu Dec 7 23:50:21 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (Init_Object): new method Dir.exist?(path).
- [ruby-core:09663]
-
- * file.c (Init_File): remove File.exists?; use File.exist?
- instead.
-
- * file.c: rename functions to test_* to rb_file_*_p.
-
-Thu Dec 7 09:29:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/weakref.rb (WeakRef::__setobj__): should support
- marshaling. [ruby-talk:228508]
-
-Wed Dec 6 23:58:36 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, common.mk (NULLCMD): moved for platforms that empty
- command does not run. fixed: [ruby-dev:29994]
-
- * win32/win32.c (init_stdhandle): redirect unopened IOs to NUL.
- [ruby-core:09572]
-
-Tue Dec 5 19:01:42 2006 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (SITE_DIR): fixed to empty RUBY_SITE_LIB in config.h on
- NetBSD. fixed: [ruby-dev:29358]
-
-Tue Dec 5 18:38:21 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/matrix.rb (Matrix::rank): use quo method to avoid integer
- division problem. [ruby-core:09644]
-
- * lib/matrix.rb (Matrix::rank_e): ditto.
-
-Tue Dec 5 00:59:05 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-parse-partial): need to parse "/=" as
- self assignment operator, not regex. [ruby-talk:227324]
-
-Tue Dec 5 00:19:14 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * intern.h, object.c, variable.c (rb_mod_constants): added an optional
- flag to search ancestors, which is defaulted to true, as well as
- const_defined? and const_get. [ruby-dev:29989]
-
-Mon Dec 4 23:49:28 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (install_recursive): get rid of warning.
-
- * lib/optparse.rb (CompletingHash#match): get rid of splat failure.
-
-Mon Dec 4 19:16:39 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/lib/digest/hmac.rb: Do alias << update.
-
-Mon Dec 4 10:48:03 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h (OFFT2NUM): use LONG2NUM() if sizeof(long) equals to
- sizeof(off_t).
-
-Mon Dec 4 08:32:25 2006 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/cgi.rb (CGI::QueryExtension::read_multipart): should quote
- boundary. JVN#84798830
-
-Sun Dec 3 16:16:53 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/lib/digest/hmac.rb: Fix problems with update
- timing. [Reported by: oss-ruby@technorama.net]
-
-Sat Dec 2 07:33:53 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils::FormData::<<):
- HTTPUtils::parse_header() takes a string. [ruby-dev:29931]
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils::parse_header):
- String does no longer have each method.
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils::parse_form_data):
- ditto.
-
-Sat Dec 2 07:09:04 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ocsp.c: OpenSSL::OCSP::OSCPError should be
- subclass of OpenSSL::OpenSSLError. [ruby-dev:29980]
-
-Fri Dec 1 16:31:53 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: shouldn't run the killed thread at callback.
- [ruby-talk: 227408]
-
-Tue Nov 28 17:25:11 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (ary_iter_check): should check modification (size
- change) during iteration.
-
- * array.c (rb_ary_initialize, rb_ary_shift, rb_ary_unshift,
- rb_ary_splice, rb_ary_reverse, rb_ary_sort, rb_ary_delete,
- rb_ary_delete_at, rb_ary_reject_bang, rb_ary_replace,
- rb_ary_clear, rb_ary_fill, rb_ary_uniq_bang, rb_ary_compact,
- rb_ary_shuffle): add iteration check.
-
-Mon Nov 27 09:00:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_ord): typo fixed. reported from Kornelius
- Kalnbach <murphy@rubychan.de>. [ruby-core:09621]
-
-Sun Nov 26 16:36:46 2006 URABE Shyouhei <shyouhei@ruby-lang.org>
-
- * version.h: addition of RUBY_PATCHLEVEL.
- * version.c: ditto.
-
-Wed Nov 22 16:00:49 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: support --with-X11/--without-X11 option.
-
- * ext/tk/README.tcltklib: add description about --with-X11-* option
- [ruby-talk:225166] and --with-X11/--without-X11 option.
-
- * ext/tk/tkutil/extconf.rb: able to be called manually
- [ruby-talk:225950].
-
-Sat Nov 18 23:39:20 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_tap): a new method. [ruby-talk:224013]
-
-Wed Nov 15 23:22:54 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (test_grpowned, rb_stat_grpowned): should honor
- supplementary group IDs. [ruby-core:09546]
-
-Tue Nov 7 18:35:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (formal_assign): need to pack rest arg information in
- argc.
-
-Tue Nov 7 18:05:01 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/itemconfig.rb: minor bug fix.
-
-Tue Nov 7 17:52:08 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_include_module): revert duplicate inclusion of
- modules. [ruby-dev:29793]
-
-Tue Nov 7 17:18:11 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (method_missing): update old argument adjustment.
-
-Tue Nov 7 16:41:21 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (when_check): need to splat for NODE_ARGSCAT as well.
- [ruby-dev:29860]
-
-Mon Nov 6 22:23:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (Init_String): remove duplicated definition of
- Symbol#to_s.
-
-Mon Nov 6 18:54:13 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (svalue_to_avalue): need to splat but no error.
-
- * eval.c: new macros - YIELD_CALL, YIELD_VALUES.
-
- * eval.c (rb_yield_values): specify YIELD_VALUES.
-
- * eval.c (rb_yield_0): use new macros.
-
- * eval.c (proc_invoke): slightly modified to separate YIELD_CALL
- and YIELD_VALUES from YIELD_ARY_ARGS.
-
- * object.c (Init_Object): add nil.to_splat => [].
-
-Mon Nov 6 15:41:55 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/itemconfig.rb: ext/tk/lib/tk/itemconfig.rb: bug
- fix on 'itemconfiginfo' method, and modify to make it easy to
- override 'itemconfiginfo' method.
-
- * ext/tk/lib/tkextlib/tile/treeview.rb: support Tile 0.7.8.
-
- * ext/tk/lib/tkextlib/version.rb: [new] add Tk::Tkextlib_RELEASE_DATE
- to get the information from scripts.
-
- * ext/tk/lib/tk.rb: load 'tkextlib/version.rb', and update RELEASE_DATE
-
- * ext/tk/lib/tkextlib/SUPPORT_STATUS: update.
-
- * ext/tk/sample/editable_listbox.rb: [new] the listbox with editable
- items. It's one of the example about usage of Place geometry manager.
-
- * ext/tk/sample/tktextio.rb: improve the functions of TkTextIO class.
- Those are required by 'irbtkw.rbw'.
-
- * ext/tk/sample/irbtkw.rbw: [new] IRB on Ruby/Tk. It doesn't need any
- real console. IRB works on a text widget without I/O blocking. That
- is, thread switching on IRB will work properly, even if on Windows.
-
-Mon Nov 6 00:42:05 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg_dup_check): vid may be nameless internal id.
-
-Sun Nov 5 19:52:19 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: updated based on date2 3.9.7.
-
-Sat Nov 4 13:09:31 2006 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: accept NOMODSEQ. [ruby-core:9002]
-
-Fri Nov 3 00:16:37 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (ruby_getnameinfo__aix): AF_INET6 workaround
- for AIX. a patch from Yutaka Kanemoto <kinpoco AT gmail.com>.
- [ruby-dev:29744]
-
-Thu Nov 2 14:19:44 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb (Set#^): Fix XOR operation against a container that
- holds duplicate values. [ruby-core:9372]
-
-Thu Nov 2 10:00:06 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c: class Symbol is no longer subclass of String. also
- covers [ruby-core:09366]
-
-Thu Nov 2 08:21:07 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/xmlrpc/create.rb (XMLRPC::Create::conv2value): Symbol should
- come earlier than String.
-
- * lib/soap/mapping/rubytypeFactory.rb (RubytypeFactory::obj2soap):
- ditto.
-
- * lib/set.rb (TC_Set::test_s_new): strings are no longer
- Enumerable
-
- * lib/soap/property.rb (Property::load): ditto.
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils::parse_header): ditto.
-
- * lib/soap/mimemessage.rb (MIMEMessage::Headers::parse): ditto.
-
-Thu Nov 2 09:08:04 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c: revert lfree shift/unshift boost patch to avoid unknown
- memory error.
-
-Wed Nov 1 23:24:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h (struct RArray): revert embedding ptr in RVALUE.
-
- * array.c: ditto.
-
-Wed Nov 1 23:01:55 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (hash): use Bob Jenkins' hash algorithm.
-
-Wed Nov 1 02:22:31 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/lib/digest/hmac.rb (Digest::HMAC::update): Minor
- optimization.
-
- * ext/digest/digest.c (rb_digest_instance_equal): Allow comparing
- a digest instance with another of a different class.
-
-Wed Nov 1 01:05:13 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (rb_call0): fixed bug of zsuper with both of opt and rest.
- fixed: [ruby-list:42928]
-
-Tue Oct 31 17:03:21 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_dup): duplicate the class of original time.
- [ruby-core:09357]
-
- * lib/time.rb (Time::make_time, Time::rfc2822, Time::httpdate):
- should respect subclasses. [ruby-core:09357]
-
-Tue Oct 31 16:25:22 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (ary_shared_first): should address offset after
- ary_shared_array(). [ruby-core:09358]
-
-Mon Oct 30 23:40:52 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (miniruby): add XLDFLAGS.
-
- * configure.in (aix): use -bE option for miniruby. [ruby-dev:29698]
-
- * dir.c (glob_helper): get rid of possible memory leak.
-
- * win32/win32.c (cmdglob, rb_w32_cmdvector, rb_w32_opendir,
- rb_w32_get_environ): not to use GC before initialization.
-
-Mon Oct 30 19:28:02 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bignum.c (rb_big2str0): use better approximation.
-
-Mon Oct 30 18:35:33 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big2str0): wrong allocation length. a patch from
- U.Nakamura <usa at garbagecollect.jp> [ruby-dev:29710]
-
-Mon Oct 30 12:34:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): fix commit miss. [ruby-dev:29707]
-
-Mon Oct 30 11:15:40 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_str_format): should preserve leading zero
- information for negative %b and %x. [ruby-talk:221347]
-
-Sun Oct 29 19:51:31 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * regexec.c: invalid offset value was used in STATE_CHECK_BUFF_INIT().
-
-Sat Oct 28 20:13:18 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * oniguruma.h: Version 4.4.5
-
- * regint.h: ditto.
-
- * regerror.c: ditto.
-
- * regexec.c: ditto.
-
- * regcomp.c ditto.
-
- * regparse.c ditto.
-
-Sat Oct 28 07:56:13 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (r_object0): missing break. [ruby-core:09345]
-
-Fri Oct 27 17:30:31 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c (enum_each_cons): move RETURN_ENUMERATOR() after
- argument check.
-
-Thu Oct 26 21:05:48 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_pkcs7.c (ossl_pkcs7_verify): should clear error.
- (fix http://bugs.debian.org/394336)
-
- * ext/openssl/ossl_ns_spki.c (ossl_spki_initialize): ditto.
-
-Thu Oct 26 15:23:47 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c: remove by_slice and by_cons.
-
-Thu Oct 26 15:12:12 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/digest/digest.c (Init_digest): typo.
-
-Wed Oct 25 17:16:05 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * test/digest/test_digest_hmac.rb: added.
-
-Wed Oct 25 16:34:31 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/test.sh: make this script work again.
-
-Wed Oct 25 07:59:42 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb: updated based on date2 3.9.6.
- [ruby-core:09323]
-
-Wed Oct 25 00:58:19 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/mkexports.rb, win32/resource.rb: use unique variable names.
-
-Tue Oct 24 19:18:53 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c (enumerator_by_slice): new method added.
-
- * enumerator.c (enumerator_by_cons): ditto.
-
-Tue Oct 24 18:56:13 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c (enum_each_slice, enum_each_cons): returns
- Enumerable::Enumerator if no block is given. [ruby-dev:29246]
-
- * enumerator.c: remove methods: enum_with_index, enum_slice,
- enum_cons. [ruby-dev:29246]
-
-Tue Oct 24 18:51:27 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_zip): add RETURN_ENUMERATOR() to zip method.
-
-Mon Oct 23 04:30:04 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (r_object0): use return value from proc given as the
- second argument to Marshal#load() to allow value replacement in
- the restoring data.
-
-Sun Oct 22 14:48:31 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * signal.c (Init_signal): avoid duplicated installation of SIGCHLD
- handler.
-
-Sun Oct 22 16:47:56 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_substr): should be infected with only original
- string, but not the shared string. fixed: [ruby-core:09152]
-
- * string.c (rb_str_new4): keep shared string untainted when original
- string is tainted. fixed: [ruby-dev:29672]
-
-Sun Oct 22 07:55:11 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_upcase, rb_str_downcase, rb_str_downcase,
- rb_str_upcase_bang, rb_str_downcase_bang, rb_str_swapcase_bang):
- add RDoc description that case conversion to be effective only
- in ASCII region.
-
-Sun Oct 22 05:20:34 2006 URABE Shyouhei <shyouhei@ice.uec.ac.jp>
-
- * configure.in: alloca is broken; use C_ALLOCA instead.
- [ruby-dev:29416]
-
-Sat Oct 21 17:50:40 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/lib/digest.rb: Follow the framework updates.
-
-Fri Oct 20 22:00:43 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/lib/digest/hmac.rb: Complete half-boiled updates.
-
- * ext/digest/sha2/lib/digest/sha2.rb: Fix #initialize_clone().
-
-Fri Oct 20 20:28:37 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest: Prefix C constants with RUBY_ and C type names with
- rb_ to avoid name clash in writing extensions.
-
- * ext/digest: Introduce Digest::Class and Digest::Instance for
- ease of implementing subclasses and add-ons, inspired by
- gotoyuzo.
-
- * ext/digest: The Digest::Instance module now requires and assumes
- that any instance be resettable and clonable, and add some
- convenient instance methods such as "new()", for creating a new
- copy, parameter taking "digest()" and "hexdigest()", for instant
- calculation. These methods make digest instances work just like
- digest classes.
-
- * ext/digest/sha2/lib/digest/sha2.rb:
- Add the Digest::SHA2 class to wrap up SHA2 variants: SHA256,
- SHA384 and SHA512, hoping this module would make a decent
- example of a digest subclass written in Ruby.
-
- * ext/digest/lib/digest.rb: Adjust autoload entries for SHA2
- classes.
-
- * ext/digest/lib/digest/hmac.rb: Follow the framework updates.
-
-Fri Oct 20 10:47:43 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb: fixed the bug of handling COMMON_MACROS.
-
-Fri Oct 20 08:42:38 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (NULLCMD): dummy command.
-
- * bcc32/Makefile.sub (post-install-*): Borland make cannot ignore
- command-less double-colon rules. [ruby-dev:29676]
-
-Fri Oct 20 00:37:07 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bcc32/Makefile.sub ($(LIBRUBY_SO)): execute pre-link hook.
-
- * ext/extmk.rb: workaround for Borland make.
-
-Wed Oct 18 23:02:40 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_shift): shorten copy size. fixed: [ruby-list:42907]
-
- * signal.c (Init_signal): handle SIGTERM. fixed: [ruby-list:42895]
-
- * win32/win32.c (rb_w32_utime): allow NULL to set the current time.
- [ruby-talk:219248]
-
-Wed Oct 18 13:25:50 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_each_line): String#lines now works when a block
- is given. in other words, lines become an alias to each_line.
- [ruby-core:09218]
-
- * string.c (rb_str_each_byte): ditto for bytes in place of lines.
-
-Wed Oct 18 00:55:33 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yylex): use particular enums. [ruby-core:09221]
-
-Tue Oct 17 22:03:08 2006 Minero Aoki <aamine@loveruby.net>
-
- * lib/erb.rb: String#each was removed, use #each_line instead.
-
-Tue Oct 17 12:27:32 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (ary_shared_array): should set NOEMBED flag for a copied
- array.
-
-Tue Oct 17 08:04:31 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_lines): now takes optional argument for the
- line separator.
-
- * io.c (rb_io_lines, rb_io_bytes): new methods.
-
-Mon Oct 16 23:33:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_unshift_m): a bug in lfree shift length
- calculation.
-
-Mon Oct 16 08:30:43 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb: *OBJS are not needed for extension libraries.
-
- * {bcc32,wince,win32}/Makefile.sub (config.status): fixed typo,
- missing comma.
-
-Mon Oct 16 00:44:26 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_unpack): execute block if given with unpacked value
- instead of creating an array. an idea from Tim Bray.
-
-Sun Oct 15 01:03:08 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/collector/dir.rb (Collector::Dir#collect): append base
- directory but not prepend.
-
- * lib/test/unit/collector/dir.rb (Collector::Dir#collect_file): do not
- join with dot. fixed: [ruby-core:09179]
-
-Sat Oct 14 23:39:50 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (singleton): no need to re-create NODE_SELF() again.
- [ruby-core:09177]
-
-Sat Oct 14 23:25:31 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_warning, parser_warn): some error message may
- contain format specifiers. a patch from Akinori MUSHA <knu at
- iDaemons.org>. [ruby-dev:29657]
-
- * regparse.c (onig_rb_warning, onig_rb_warn): ditto.
-
- * ext/bigdecimal/bigdecimal.c (VpException): ditto.
-
- * ext/dl/handle.c (rb_dlhandle_initialize): ditto.
-
- * ext/gdbm/gdbm.c (rb_gdbm_fatal): ditto.
-
-Sat Oct 14 08:15:42 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c, ext/digest/digest.h,
- ext/digest/md5/md5init.c, ext/digest/rmd160/rmd160init.c,
- ext/digest/sha1/sha1init.c, ext/digest/sha2/sha2init.c:
- Introduce API versioning.
-
- * ext/digest/digest.c, ext/digest/digest.h,
- ext/digest/md5/md5init.c, ext/digest/rmd160/rmd160init.c,
- ext/digest/sha1/sha1init.c, ext/digest/sha2/sha2init.c: Remove
- the constants DIGEST_LENGTH and BLOCK_LENGTH and turn them into
- instance methods digest_length() and block_length(). Class
- methods with the same names are also provided, which take extra
- parameters for a digest method.
-
- * ext/digest/lib/digest/hmac.rb: Completely redesign the somewhat
- bizarre API, now that Digest classes can take hashing
- parameters.
-
-Sat Oct 14 05:54:05 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c: Improve RDoc documentation further more.
-
-Sat Oct 14 04:33:33 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c: Improve RDoc documentation.
-
- * ext/digest/digest.c (Init_digest, rb_digest_base_s_digest,
- rb_digest_base_s_hexdigest): Make Digest::Base::digest() and
- Digest::Base::hexdigest() take extra arguments, which are passed
- through to the constructor in an internal call.
-
- * ext/digest/bubblebabble/bubblebabble.c
- (rb_digest_base_s_bubblebabble): Ditto for
- Digest::Base::bubblebabble().
-
-Sat Oct 14 00:55:08 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bcc32/Makefile.sub (post-install-ext): no longer needed.
-
- * bcc32/configure.bat: get rid of a quirk of Borland make, which
- sets empty macro in command line to "1".
-
-Fri Oct 13 22:49:02 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: updated based on date2 3.9.5.
-
-Fri Oct 13 21:00:01 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/lib/digest.rb (Digest): Try to auto-load non-standard
- digest modules when a specified digest class is missing.
-
- * ext/digest/lib/digest.rb: Define Digest(name) for ease of
- dynamically selecting a hashing algorithm.
-
-Fri Oct 13 20:53:37 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (Init_digest): Digest::Base.new() does no
- longer take an initial string to feed. This change allows
- subclasses to take hashing parameters. A statement such as
- ``md = Digest::MD5.new(s)'' can be easily rewritten as
- ``md = Digest::MD5.new << s'' or
- ``md = Digest::MD5.new.update(s)''.
-
-Fri Oct 13 20:51:55 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c, ext/digest/md5/md5init.c,
- ext/digest/rmd160/rmd160init.c, ext/digest/sha1/sha1init.c,
- ext/digest/sha2/sha2init.c: Add RDoc documentation.
-
- * ext/digest/digest.txt, ext/digest/digest.txt.ja: Removed in
- favor of embedded RDoc documentation.
-
-Fri Oct 13 20:38:12 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/bubblebabble, ext/digest/digest.c: Rip BubbleBabble
- support out of the base class and have a separate module named
- digest/bubblebabble.
-
-Fri Oct 13 19:53:59 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_base_equal): Again, should call
- digest() of a subclass instead of the one defined in the base
- class.
-
-Fri Oct 13 18:19:31 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c: Class#inherited RDoc added. a patch from Daniel
- Berger <djberg96 at gmail.com> [ruby-core:08942]
-
-Fri Oct 13 02:42:00 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_base_equal): Should call digest()
- of a subclass instead of the one defined in the base class.
-
-Fri Oct 13 02:30:12 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/collector/dir.rb (Collector::Dir#collect): prepend
- base directory to load path.
-
- * lib/test/unit/collector/dir.rb (Collector::Dir#collect_file): should
- use the given File-like interface, but not File directly.
-
- * test/testunit/collector/test_dir.rb (TestDir::FileSystem): implement
- File-like methods correctly.
-
-Fri Oct 13 01:48:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/date.rb (Date::self.complete_hash): need to check if g is
- nil before dereference. [ruby-core:09116]
-
-Fri Oct 13 01:05:58 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_partition): RDoc update. a patch from
- Mauricio Fernandez <mfp at acm.org>. [ruby-core:09160]
-
- * hash.c (rb_hash_compare_by_id): ditto.
-
-Fri Oct 13 00:34:26 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_mod_cvar_defined): wrong id check. a patch from
- Mauricio Fernandez <mfp at acm.org>. [ruby-core:09158]
-
- * object.c (rb_mod_cvar_get): typo fixed. [ruby-core:09168]
-
- * object.c (rb_mod_cvar_set): ditto.
-
-Thu Oct 12 22:58:11 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_compare_by_id): somehow we lost renaming from
- Hash#identical. [ruby-core:09163]
-
-Thu Oct 12 18:25:40 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/tk/tkutil/tkutil.c (cbsubst_table_setup): need to handle new
- character literal (1 char string).
-
- * lib/mkmf.rb: shut up some warnings from tk's extconf.rb.
-
-Thu Oct 12 02:15:24 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/lib/digest/hmac.rb: Make use of String#bytes.
-
-Thu Oct 12 02:12:31 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (get_digest_base_metadata): Use an instance
- variable of a class object instead of a class variable for
- metadata. This change is only crucial for ruby 1.8 because
- class variables are inherited to subclasses prior to 1.9, but
- applying it also to 1.9 will assure compatibilities.
-
- * ext/digest/md5/md5init.c (Init_md5): Ditto.
-
- * ext/digest/rmd160/rmd160init.c (Init_rmd160): Ditto.
-
- * ext/digest/sha1/sha1init.c (Init_sha1): Ditto.
-
- * ext/digest/sha2/sha2init.c (Init_sha2): Ditto.
-
-Wed Oct 11 21:36:47 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_base_alloc,
- rb_digest_base_equal): Simplify the equality check and just
- compare resulted digests since state-level equality should
- not be so significant.
-
- * ext/digest/digest.h: Ditto.
-
- * ext/digest/*/*.[ch]: Ditto.
-
-Wed Oct 11 17:11:03 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_obj_define_method): add half boiled RDoc document.
-
-Wed Oct 11 16:57:46 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_replace): should shift lfree pointer before
- calling xfree.
-
-Wed Oct 11 15:07:42 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/lib/digest/hmac.rb: Add digest/hmac, which implements
- HMAC keyed-hashing algorithm.
-
-Wed Oct 11 15:03:55 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_base_reset): Do not make
- recursive calls, but call initialize() when reset() is not
- defined in a subclass.
-
-Wed Oct 11 14:56:10 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/digest/sha1/sha1ossl.h: libssl 0.9.8c-3 defines no
- SHA_BLOCK_LENGTH.
-
-Wed Oct 11 14:03:31 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (rb_digest_base_reset, Init_digest): Add
- Digest::Base#reset.
-
- * ext/digest/digest.h: Update the header comment.
-
- * ext/digest/md5/md5ossl.h, ext/digest/md5/md5init.c (Init_md5):
- Define DIGEST_LENGTH and BLOCK_LENGTH.
-
- * ext/digest/rmd160/rmd160init.c (Init_rmd160): Ditto.
-
- * ext/digest/sha1/sha1init.c (Init_sha1): Ditto.
-
- * ext/digest/sha2/sha2init.c (Init_sha2): Ditto.
-
- * ext/digest/depend, ext/digest/extconf.rb: Use $INSTALLFILES
- rather than adding make targets. [Pointed out by: nobu]
-
-Tue Oct 10 16:39:08 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (hexdigest_str_new, bubblebabble_str_new):
- Perform StringValue() checks properly.
-
-Tue Oct 10 13:21:21 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/sha1/depend, ext/digest/sha2/depend: Remove obsolete
- dependencies.
-
-Mon Oct 9 23:46:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/parsedate.rb: documentation patch from Konrad Meyer
- <konrad.meyer@gmail.com>. [ruby-doc:1238]
-
- * lib/open3.rb, lib/ping.rb: ditto.
-
-Mon Oct 9 23:40:58 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb, lib/fileutils.rb, lib/mkmf.rb, lib/optparse.rb,
- lib/shellwords.rb: get rid of shadowing outer local variable.
-
-Mon Oct 9 22:56:12 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rexml/encoding.rb (REXML::Encoding::check_encoding): spaces
- are allowed around equal sign. [ruby-core:09032]
-
- * lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser): ditto.
-
-Mon Oct 9 01:56:34 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_obj_define_method): add new method
- Kernel#define_singleton_method. [ruby-list:42851]
-
-Sat Oct 7 23:53:08 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_scan): small documentation fix.
- [ruby-core:09007]
-
-Sat Oct 7 23:44:33 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_rshift): a bug in right shift of negative
- bignums. [ruby-core:09020]
-
-Sat Oct 7 23:33:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (formal_assign): packed post splat arguments may conflict
- with normal arguments. [ruby-core:09021]
-
- * eval.c (rb_call0): ditto.
-
-Sat Oct 7 11:53:04 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (rb_mod_initialize): since module_eval no longer passes
- self, use module_exec instead. fixed: [ruby-dev:29637]
-
-Sat Oct 7 00:27:58 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c (rb_include_module): remove unnecessary check.
- [ruby-talk:218402]
-
-Fri Oct 6 15:19:59 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/depend: Fix header installation when the build
- directory is different from srcdir. [Pointed out by: eban]
-
-Fri Oct 6 09:56:31 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc32,win32,wince}/Makefile.sub (config.status): shouldn't use
- copy command instead of install. use -run install.
-
-Fri Oct 6 06:53:46 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): small refactoring.
-
- * parse.y (bparam_item): fixed bugs in handling parenthesized LHS.
-
-Fri Oct 6 04:47:07 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/depend: Install digest.h.
-
-Fri Oct 6 04:27:40 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/lib/md5.rb, ext/digest/lib/sha1.rb: Remove those
- compatibility stub libraries.
-
- * sample/openssl/c_rehash.rb: Use digest/md5 instead of obsolete md5.
-
-Fri Oct 6 04:09:51 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c: Make hexdigest() always call digest() internally.
-
- * ext/digest/digest.c: Add bubblebabble().
-
-Fri Oct 6 02:38:42 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c: Allow subclassing in Ruby.
-
-Fri Oct 6 02:06:10 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.c (hexdigest_str_new): Add a string size check.
-
-Thu Oct 5 19:28:35 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/digest.[ch]: Since the argument order of
- hash_final_func_t was inconsistent with others, change it and
- rename to hash_finish_func_t to avoid confusion.
-
- * ext/digest/digest.[ch]: Remove and eliminate the use of
- hash_end_func_t. Implement hexdigest conversion in the base
- class.
-
- * ext/digest/md5/md5.c, ext/digest/md5/md5.h,
- ext/digest/md5/md5init.c, ext/digest/md5/md5ossl.c,
- ext/digest/md5/md5ossl.h: Remove MD5_End() and change
- MD5_Final() to MD5_Finish().
-
- * ext/digest/rmd160/depend, ext/digest/rmd160/extconf.rb,
- ext/digest/rmd160/rmd160.c, ext/digest/rmd160/rmd160.h,
- ext/digest/rmd160/rmd160hl.c, ext/digest/rmd160/rmd160init.c,
- ext/digest/rmd160/rmd160ossl.c, ext/digest/rmd160/rmd160ossl.h:
- Remove unused functions RMD160_End(), RMD160_File(),
- RMD160_Data() and change RMD160_Final() to RMD160_Finish().
-
- * ext/digest/sha1/extconf.rb, ext/digest/sha1/sha1.c,
- ext/digest/sha1/sha1.h, ext/digest/sha1/sha1hl.c,
- ext/digest/sha1/sha1init.c, ext/digest/sha1/sha1ossl.c,
- ext/digest/sha1/sha1ossl.h: Likewise.
-
- * ext/digest/sha2/extconf.rb, ext/digest/sha2/sha2.c,
- ext/digest/sha2/sha2.h, ext/digest/sha2/sha2hl.c,
- ext/digest/sha2/sha2init.c: Likewise.
-
-Wed Oct 4 18:47:25 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tkextlib/*: bugfix and update
- (see ext/tk/ChangeLog.tkextlib).
-
-Wed Oct 4 17:25:14 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call): check protected visibility based on real self,
- not ruby_frame->self. [ruby-talk:217822]
-
-Wed Oct 4 15:46:32 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (block_param): should interpret single parenthesized
- left hand side expression.
-
-Wed Oct 4 08:52:30 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/optparse/test_getopts.rb: changed the class name of test case
- to get rid of conflict with test_optparse.rb.
-
-Tue Oct 3 21:04:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (dyna_in_block): inline using macro.
-
- * parse.y (mlhs): simplifies the rule a bit.
-
- * parse.y (block_param): restrict block parameters to be local
- variables only.
-
- * test/ruby/test_iterator.rb (TestIterator::test_nested_iterator):
- update test suite to conform the last change.
-
-Tue Oct 3 02:31:13 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (splat_value): use "to_splat" instead of "to_ary" to
- prepare splat values as an array.
-
- * array.c (Init_Array): define to_splat.
-
- * range.c (range_to_splat): new method.
-
- * enumerator.c (enumerator_to_splat): ditto.
-
-Tue Oct 3 01:36:47 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_lines): returns an Enumerator instead of an
- array of lines.
-
- * string.c (rb_str_bytes): a new method.
-
-Mon Oct 2 23:47:55 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::COLLECTORS):
- base directory should be lower precedence. fixed: [ruby-dev:29622]
-
- * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner#options): typo.
-
- * lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#collect_file):
- load expanded path. fixed: [ruby-dev:29621]
-
-Mon Oct 2 15:47:55 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * instruby.rb: batfile should be CRLF'ed.
-
-Mon Oct 2 01:24:26 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (test-all): separate directory where running test cases
- from source tree.
-
- * lib/test/unit/autorunner.rb (options): added --basedir, --workdir
- and --load-path options.
-
- * lib/test/unit/collector/dir.rb (recursive_collect, collect_file):
- base directory support.
-
-Sun Oct 1 23:56:52 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, common.mk, ext/extmk.rb, win{32,ce}/Makefile.in: keep
- LIBRUBY_SO unless need to be removed.
-
-Sun Oct 1 23:12:19 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#make_switch): pass arguments directly.
-
-Sat Sep 30 15:11:26 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb: updated based on date2 3.9.4.
-
-Fri Sep 29 13:18:24 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/lib/digest.rb (Digest): Require digest.so and fix the
- breakage. Point out by NAKAMURA Usaku in [ruby-dev:29619].
-
-Fri Sep 29 12:11:04 2006 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * jcode.rb (succ!): call original succ! if $KCODE == 'n'.
- fixed: [ruby-talk:216845]
-
-Fri Sep 29 11:43:40 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (try_func): revert fallback checking undeclared function.
- fixed: [ruby-core:08949]
-
-Fri Sep 29 09:56:56 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: extout is needed for also clean.
- fixed: [ruby-core:08944]
-
- * lib/optparse.rb (OptionParser::Switch#conv_arg): unsplat by
- Proc#call if no conversion is given.
-
-Thu Sep 28 23:59:31 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * node.h (struct thread): declare win32_exception_list on cygwin and
- win32 regardless if it is implemented. Provisional fix for
- [ruby-core:08917].
-
-Thu Sep 28 20:49:20 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/tmpdir.rb: use return value of getdir.call for length.
-
-Wed Sep 27 22:08:16 2006 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/digest/md5/md5init.c (Init_md5): Now that we have digest.rb,
- require "digest" rather than "digest.so".
-
- * ext/digest/rmd160/rmd160init.c (Init_rmd160): Ditto.
-
- * ext/digest/sha1/sha1init.c (Init_sha1): Ditto.
-
- * ext/digest/sha2/sha2init.c (Init_sha2): Ditto.
-
-Wed Sep 27 21:21:08 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_startwith): rename startwith? to start_with?,
- endwith? to endwith?, respectively. [ruby-talk:216685]
-
-Wed Sep 27 13:29:01 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::TagMaker::nOE_element_def): replace to_s by
- join. some other methods as well. [ruby-dev:29613]
-
-Wed Sep 27 01:04:49 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (try_func): check function pointer first and macro next.
-
- * lib/mkmf.rb (have_type): simplified with typedef and sizeof.
-
-Wed Sep 27 00:08:12 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_shift): shift/unshift performance boost patch,
- based on the patch from Eric Mahurin <eric_mahurin at yahoo.com>.
- [ruby-core:05861]
-
- * array.c (rb_ary_unshift_m): ditto.
-
- * array.c (ary_make_shared): ditto.
-
- * array.c (RESIZE_CAPA): ditto.
-
- * array.c (rb_ary_free): new function to free memory. code moved
- from gc.c.
-
- * string.c (rb_str_free): ditto.
-
-Tue Sep 26 23:57:03 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#getopts): use strings as key.
- fixed: [ruby-dev:29614]
-
-Tue Sep 26 15:29:55 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {win32,wince}/Makefile.sub (CPP): check predefined value.
-
-Tue Sep 26 07:55:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_shift): should not move memory region if array
- body is shared. a patch from Kent Sibilev <ksruby at gmail.com>.
- [ruby-core:08922]
-
-Mon Sep 25 23:10:46 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (rb_push_glob): need not to check by FilePathValue().
- [ruby-dev:29599]
-
- * dir.c (dir_globs): ditto.
-
-Mon Sep 25 22:26:26 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_path_end): skip root directory. fixed: [ruby-core:08913]
-
- * lib/mkmf.rb (rm_f): get rid of NUL.
-
- * lib/mkmf.rb (init_mkmf): set default $LDFLAGS. Patch by Michal
- Suchanek <hramrach at centrum.cz>. [ruby-talk:216256]
-
-Mon Sep 25 15:06:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sample/test.rb: "print nil" now prints empty string.
-
- * test/ruby/test_system.rb (TestSystem::test_system): ditto.
-
-Mon Sep 25 11:26:25 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (recursive_hash): remove unused local variable.
-
- * parse.y (parser_yylex): ditto.
-
- * parse.y (rb_gc_mark_symbols): fix unmatched prototype .
-
- * file.c (rb_get_path): check NUL byte in the path string.
-
-Mon Sep 25 08:14:43 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_shift): should clear shifting top element.
- [ruby-talk:216055]
-
- * array.c (rb_ary_shift): avoid creating shared object if array
- size is small.
-
-Mon Sep 25 08:11:35 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * random.c (rb_f_rand): RDoc typo fix. a patch from Frederick
- Cheung <fred at 82ask.com>. [ruby-talk:216047]
-
-Sun Sep 24 21:19:24 2006 Guy Decoux <ts@moulon.inra.fr>
-
- * gc.c (gc_mark_children): NODE_POSTEXE holds Ruby VALUE.
- [ruby-core:08912]
-
-Sun Sep 24 22:28:20 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * runruby.rb: extension library scripts moved into common directory.
-
-Sun Sep 24 12:10:04 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb: updated based on date2 3.9.3.
-
-Sun Sep 24 06:55:36 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_print): no special handling for nil as well as puts.
- fixed: [ruby-dev:29586]
-
-Sun Sep 24 06:25:53 2006 why the lucky stiff <why@ruby-lang.org>
-
- * eval.c (rb_thread_save_context, rb_thread_restore_context):
- sandbox hook to save and restore sandbox state.
-
- * eval.c (thread_no_ensure): added THREAD_NO_ENSURE thread flag.
-
- * eval.c (rb_thread_kill_bang): Thread#kill! uses the above flag
- to circumvent ensure, in order to prevent endless loops.
- contributed by MenTaLguY. [ruby-core:08768]
-
- * eval.c (rb_thread_kill): fix Thread#kill docs, which returns
- the thread object in all cases.
-
- * node.h: expose the rb_jmpbuf_t and rb_thread_t structs, along
- with the thread flags. used by the sandbox extension.
-
- * ruby.h: extern rb_eThreadError, so sandbox can swap it.
-
-Sat Sep 23 21:34:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::QueryExtension::read_multipart): CGI content
- may be empty. a patch from Jamis Buck <jamis at 37signals.com>.
-
-Sat Sep 23 20:54:28 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * oniguruma.h: Version 4.4.4
-
- * regexec.c: ditto.
-
- * regcomp.c ditto.
-
-Sat Sep 23 08:35:53 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rdoc/ri/ri_options.rb: prevent NameError. [ruby-dev:29597]
-
-Sat Sep 23 01:02:57 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb: updated based on date2 3.9.2.
-
-Fri Sep 22 18:07:17 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_partition): no need to call rb_call_super(),
- since String is no longer includes Enumerable.
-
-Fri Sep 22 17:33:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_eql): new method to be used by Hash.
-
- * hash.c (rb_hash_hash): ditto.
-
-Fri Sep 22 06:53:22 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_hash): use rb_memhash().
-
- * numeric.c (flo_hash): simplified. klass need not to affect
- resulting hash value.
-
-Fri Sep 22 02:06:26 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * .cvsignore: ignore timestamp files and installed list file.
-
-Fri Sep 22 01:36:34 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb: include FileUtils unconditionally.
-
-Fri Sep 22 00:36:05 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (Init_Numeric): fix_odd_p and fix_even_p are for Fixnum.
- patch from Ondrej Bilka <neleai at seznam.cz>. [ruby-core:08904]
-
-Thu Sep 21 22:56:20 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (no-install): not install rdoc actually.
-
- * common.mk (install-doc, no-install-doc): use instruby.rb.
-
- * instruby.rb: rdoc installation.
-
- * ext/extmk.rb: expand ruby executable names.
-
-Thu Sep 21 20:19:22 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_new3): embed shorter strings more eagerly.
-
-Thu Sep 21 17:44:49 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_startwith): a new method to check if a string
- starts with given prefix.
-
- * string.c (rb_str_endwith): the opposite of String#startwith?.
-
-Thu Sep 21 16:29:02 2006 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * rubytest.rb: use each_line instead of each.
-
-Thu Sep 21 15:06:24 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (int_odd_p): a new method to check even or odd.
- [RCR#337]
-
- * numeric.c (int_even_p): ditto.
-
-Thu Sep 21 13:55:07 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/etc/etc.c (etc_getpwuid): uid integer should be wrapped in
- uid_t value. [ruby-core:08897]
-
- * ext/etc/etc.c (etc_getpwuid): uid_t may be bigger than plain
- 'int' type.
-
-Thu Sep 21 10:07:09 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_partition): RDoc typo fixed. [ruby-core:08898]
-
- * string.c (rb_str_rpartition): fixed separation seek bug.
-
-Thu Sep 21 09:38:12 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_lines): new method to split a string into lines.
-
- * string.c (Init_String): Strings are no longer Enumerable. use
- each_line or lines method explicitly.
-
- * string.c (Init_String): remove each method. use each_lines.
-
-Wed Sep 20 23:17:41 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (pre-install-doc): create data directory before install.
-
- * lib/mkmf.rb (dir_re): fixed typo.
-
- * lib/mkmf.rb (install_dirs): remove extra slash.
-
-Wed Sep 20 22:41:45 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (fix_mul): typo again. patch from Tadashi Saito
- <shiba at mail2.accsnet.ne.jp>. fixed: [ruby-core:08893]
-
-Wed Sep 20 19:32:06 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_partition): a new method to separate the string
- by a separator. taken from Python 2.5.
-
- * string.c (rb_str_rpartition): ditto.
-
-Wed Sep 20 09:49:40 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc32,win32,wince}/Makefile.sub (INSTALLED_LIST): need to define
- this macro to install.
-
-Wed Sep 20 09:43:10 2006 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: allow extra spaces in responses.
- Thanks, Tom Soderlund.
-
-Wed Sep 20 09:25:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/gdbm/gdbm.c: add RDoc documentation. a patch from Peter
- Adolphs <futzilogik at users dot sourceforge dot net>.
- [ruby-doc:1223]
-
-Tue Sep 19 00:42:15 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (rb_obj_ivar_defined, rb_mod_cvar_defined): new methods,
- Kernel#instance_variable_defined? and Module#class_variable_defined?.
- [ruby-dev:29587]
-
- * lib/date/format.rb (Date::Bag#method_missing): use new method,
- instance_variable_defined? to check if an instance variable is
- defined. fixed: [ruby-dev:29554]
- -- This didn't fix anything.
-
-Tue Sep 19 00:07:17 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (sym_eql): fail early to gain performance.
-
- * string.c (sym_hash): cache hash value in aux.shared if possible.
-
- * gc.c (rb_obj_id): no need to treat symbols specially.
-
- * lib/fileutils.rb (FileUtils::FileUtils): singleton_methods() no
- longer return an array of strings, but of symbols.
-
- * lib/delegate.rb (DelegateClass): ditto.
-
-Mon Sep 18 15:29:21 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (dir_s_glob): restore GC protection volatile variable.
- [ruby-dev:29588]
-
- * re.c (rb_reg_regcomp): ditto.
-
-Mon Sep 18 12:16:48 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (fix_mul): get rid of shift overflow.
-
-Mon Sep 18 10:47:49 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (dir_s_glob): remove unused variable.
-
- * math.c (math_log): ditto.
-
- * re.c (rb_reg_regcomp): ditto.
-
- * eval.c (break_jump): ditto.
-
- * eval.c (rb_thread_yield_0): remove unused function.
-
-Sun Sep 17 23:44:58 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/rdoc.rb (RDoc::RDoc#document): scan only files modified
- after the previous generation.
-
-Sun Sep 17 17:42:13 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (install-doc): reverted.
-
- * instruby.rb: stores file name list without destdir prefix.
-
- * lib/rdoc/generators/ri_generator.rb: do not chdir twice.
-
-Sun Sep 17 10:42:10 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (fix_mul): fixed typo. fixed: [ruby-core:08885]
-
-Sat Sep 16 19:47:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * README.EXT: should mention new macros: RSTRING_PTR, RSTRING_LEN,
- RARRAY_PTR, RARRAY_LEN.
-
- * README.EXT.ja: ditto.
-
-Sat Sep 16 16:39:23 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, common.in, instruby.rb, ext/extmk.rb, lib/mkmf.rb:
- use instruby.rb to install extensions instead of ext/extmk.rb.
-
- * instruby.rb: store installed list into the file.
-
- * ext/dbm/extconf.rb: allow multiple candidates for dbm-type.
-
- * ext/io/wait/extconf.rb: suspicious checking_for.
-
- * ext/pty/pty.c (establishShell): parent pid is not used.
-
- * ext/pty/pty.c (freeDevice): not used.
-
- * lib/mkmf.rb (checking_for): improved the messages.
-
-Sat Sep 16 11:03:49 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (ary_shared_first): should create embedded copies
- instead of sharing memory region for smaller arrays.
-
-Sat Sep 16 09:37:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (inspect_struct): do not display a class name for
- anonymous struct. The member fields are sufficient.
-
-Fri Sep 15 20:22:15 2006 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-8/nkf.c: imported nkf 2.0.8 rev.110.
- * Fix: check_bom cuts \xfe\xff\xXX\xXX of UTF-32LE.
- * Add support --ic=UTF-32.
- * Fix: can't guess UTF-16 and UTF-32.
- * Fix: can't decode beyond BMP of UTF-16LE.
-
- * ext/nkf/nkf.c (guess): Support UTF-32.
-
- * ext/nkf/lib/kconv.rb (kconv): Support UTF-32.
-
- * ext/nkf/lib/kconv.rb (to_utf32): new method.
-
-Fri Sep 15 05:23:24 2006 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-8/nkf.c: imported nkf 2.0.8 2006-09-15.
- Add support for U+10000 - U+10FFFF
- Add support UTF-32
-
-Fri Sep 15 00:03:07 2006 Tanaka Akira <akr@fsij.org>
-
- * ext/digest/lib/digest.rb (Digest::Base.file): open a file in binary
- mode. suggested by Kazuhiro NISHIYAMA. [ruby-dev:29579]
-
-Thu Sep 14 17:21:07 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_mul): avoid bignum multiplication as far as
- possible. a patch from Ondrej Bilka <neleai at seznam.cz>.
- [ruby-core:08825]
-
-Thu Sep 14 16:34:55 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_intern): allow zero length symbols.
- [ruby-core:08861]
-
-Thu Sep 14 16:11:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_intern): raise SecurityError only when $SAFE
- level is greater than zero. [ruby-core:08862]
-
- * parse.y (rb_interned_p): new function to check if a string is
- already interned.
-
- * string.c (str_to_id): use rb_str_intern().
-
-Thu Sep 14 14:37:45 2006 Tanaka Akira <akr@fsij.org>
-
- * ext/digest/lib/digest.rb (Digest::Base.file): new method.
- [ruby-dev:29572]
-
-Thu Sep 14 08:30:02 2006 Tanaka Akira <akr@fsij.org>
-
- * ext/digest/digest.c (rb_digest_base_inspect): new method.
- [ruby-dev:29573]
-
-Thu Sep 14 01:13:56 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * gc.c (ruby_init_stack): decrease "stack level too deep" in Windows.
- [ruby-dev:29569]
-
-Thu Sep 14 01:02:25 2006 Tanaka Akira <akr@fsij.org>
-
- * ext/digest/lib/digest.rb: new file.
- [ruby-dev:28689]
-
-Wed Sep 13 18:43:05 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * README.EXT: English adjustment. [ruby-core:08851] and
- [ruby-core:08852]
-
-Wed Sep 13 18:25:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-parse-partial): better here-doc support.
- a patch from Marshall T. Vandegrift <llasram at gmail.com>.
- [ruby-core:08804]
-
-Wed Sep 13 16:43:36 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_intern): prohibit interning tainted string.
-
-Wed Sep 13 01:14:02 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#getopts): works with pre-registered
- options. [ruby-core:08826]
-
-Tue Sep 12 03:58:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_compare_by_identity): rename Hash#identical to
- Hash#compare_by_identity.
-
-Mon Sep 11 16:52:37 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_identical): a new method to make a hash to
- compare keys by their identity.
-
- * hash.c (rb_hash_identical_p): new method to tell if a hash is
- identical or not.
-
- * st.c (st_numcmp, st_numhash): export hash type functions.
-
-Mon Sep 11 11:42:21 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rexml/source.rb (REXML::Source::encoding): should not
- convert the body twice. [ruby-core:08828]
-
- * lib/rexml/encoding.rb (REXML::Encoding::encoding):
- Encoding#encoding= to return boolean value to tell if the body
- is really converted or not.
-
- * lib/rexml/encoding.rb (REXML::Encoding::encoding): Specific
- conversion library (e.g. rexml/encodings/UTF-16.rb) to have
- higher preceding.
-
- * lib/rexml/encodings/UTF-16.rb (REXML::Encoding::decode_utf16):
- UTF-16#decode_utf16 should work strings without BOM.
-
-Mon Sep 11 07:39:44 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (sym_equal): "sym == str" should compare them as
- strings. [ruby-dev:29554]
-
-Sun Sep 10 22:59:43 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (parse_args): remove splat.
-
-Sun Sep 10 20:25:30 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb: updated based on date2 3.9.1.
-
-Sun Sep 10 09:41:29 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c: ISPRINT() needs ctype.h
-
-Sun Sep 10 09:19:47 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb: splat parsed arguments.
-
-Tue Jan 10 09:18:03 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_require_safe): prevent extension from loading twice.
- fixed: [ruby-dev:29523]
-
-Sat Sep 9 23:55:28 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_f_test): test(0) should not have any special
- meaning. [ruby-dev:29425]
-
- * file.c (rb_f_test): properer error message.
-
-Sat Sep 9 14:08:38 2006 Eric Hodel <drbrain@segment7.net>
-
- * lib/test/unit/testcase.rb (Test::Unit::TestCase#run): Rescue
- Exception in Test::Unit::TestCase#run. [ruby-core:08783]
-
-Sat Sep 9 04:55:59 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/pstore.rb: open all in binary mode, and get rid of the quirk of
- msvcrt. fixed: [ruby-dev:29518]
-
-Sat Sep 9 04:47:45 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, win32/Makefile.sub (MINIRUBY): append MINIRUBYOPT.
-
- * mkconfig.rb, ext/extmk.rb, lib/mkmf.rb, win32/mkexports.rb: suppress
- warnings with $VERBOSE.
-
- * win32/resource.rb: only file which has more than one icon is DLL.
-
-Fri Sep 8 16:53:30 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_alloc): should allocate a String object, even when
- asked to allocate a Symbol object. [ruby-dev:29529]
-
-Fri Sep 8 16:36:27 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/extmk.rb (extmake): follow Array#to_s.
-
- * lib/mkmf.rb (create_makefile): ditto.
-
- * win32/resource.rb: ditto.
-
-Fri Sep 8 10:00:12 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cookie.rb (WEBrick::Cookie.parse_set_cookies): new
- method to parse multiple cookies per Set-Cookie header.
- Thanks to Aaron Patterson <aaron_patterson at speakeasy.net>.
- [ruby-core:08802]
-
-Fri Sep 8 08:59:30 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub, win32/configure.bat win32/setup.mak: program
- name transform.
-
-Fri Sep 8 08:25:39 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb: suppress `assigning void value' warning.
-
-Fri Sep 8 01:16:34 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (Init_Array): #to_s to be an alias to #inspect.
- [ruby-dev:29520]
-
- * hash.c (Init_Hash): ditto.
-
- * lib/mkmf.rb (create_makefile): replace "print array" by
- "print *array".
-
- * mkconfig.rb: ditto.
-
-Thu Sep 7 21:02:56 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (nil_to_s): returns the empty string again.
- [ruby-dev:29520]
-
-Thu Sep 7 23:27:05 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (path_check_0, fpath_check): disable path check on cygwin.
- [ruby-talk:213074]
-
-Thu Sep 7 02:03:45 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_to_s): adopt new date format using digits
- e.g. "2006-09-07 02:03:45 +9000".
-
-Thu Sep 7 01:54:22 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (sym_equal): override. check equivalence.
-
-Wed Sep 6 13:25:04 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (symbols_i): need to initialize early-created symbols.
- [ruby-dev:29496]
-
-Wed Sep 6 12:05:19 2006 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/lib/kconv.rb (Kconv::toeuc): remove -m0 [ruby-dev:29505]
-
-Tue Sep 5 22:06:43 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tk/tcltklib.c: use rb_ary_new3() since RARRAY_LEN() is not l-value.
-
- * ext/tk/tkutil/tkutil.c: use RARRAY_PTR() and RARRAY_LEN() and etc.
- fixed: [ruby-dev:29473]
-
-Tue Sep 5 06:47:22 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (time_to_s): variable declaration after an execution
- statement.
-
-Tue Sep 5 05:49:41 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (path_check_0): check if sticky bit is set on parent
- directories for executable path. fixed: [ruby-dev:29415]
-
-Tue Sep 5 05:03:46 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_plus): addition in Fixnum will never overflow
- long. a patch from Ondrej Bilka <neleai at seznam.cz>.
- [ruby-core:08794]
-
- * numeric.c (fix_minus): ditto.
-
- * bignum.c (rb_big_pow): eagerly truncate resulting bignum.
- [ruby-core:08794]
-
-Mon Sep 4 23:15:34 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_to_s): make it conform to RFC2822 date format.
- [ruby-dev:29467]
-
-Mon Sep 4 21:43:57 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dbm/extconf.rb: create makefile according to the result of check
- for dbm header. fixed: [ruby-dev:29445]
-
-Mon Sep 4 21:39:42 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb: updated based on date2 3.9.
-
-Mon Sep 4 21:14:20 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (time_strftime): include nul character. fixed: [ruby-dev:29422]
-
-Mon Sep 4 16:39:11 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::out): specify -x option for nkf.
-
- * lib/cgi.rb (CGI::out): should not convert utf-8 implicitly using
- NKF. it is too Japanese centric.
-
-Mon Sep 4 14:23:10 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/dbm/extconf.rb (db_check): remove debug print.
-
-Mon Sep 4 06:46:08 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (rb_id2sym): intern if id is attrset_id.
- [ruby-dev:29420] [ruby-dev:29447]
-
-Mon Sep 4 01:25:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_local_variables): list symbols.
-
- * struct.c (rb_struct_s_members_m): ditto.
-
- * variable.c (ivar_i): ditto.
-
- * variable.c (gvar_i): ditto.
-
- * variable.c (cv_i): ditto.
-
-Sun Sep 3 20:47:02 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.h (SYMBOL_P): Qnil and Qfalse are not Symbol.
-
-Sun Sep 3 15:32:44 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb: get rid of nil.to_s.
-
-Sun Sep 3 06:24:38 2006 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c (ruby_connect): sockerrlen should be socklen_t.
-
-Sun Sep 3 04:40:42 2006 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/extconf.rb: check arpa/inet.h for ntohs.
-
- * ext/socket/socket.c: include arpa/inet.h if available.
-
-Sat Sep 2 23:59:58 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (Init_String): undef Symbol#new.
-
- * struct.c (rb_struct_s_def): wrong symbol detection.
-
-Sat Sep 2 23:59:37 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_to_id): a bug caused by premature optimization.
-
-Sat Sep 2 23:53:28 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (Init_Object): move symbol related code to string.c
-
- * string.c (Init_String): Symbol as subclass of String.
-
- * parse.y (rb_intern2): handle symbol as strings.
-
- * string.c (str_new): substring of symbols are mere strings, not
- symbols.
-
-Sat Sep 2 23:37:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h (struct RArray): embed small arrays.
- (RARRAY_LEN): defined for accessing array members.
- (RARRAY_PTR): ditto.
-
- * array.c: use RARRAY_LEN and RARRAY_PTR.
-
-Sat Sep 2 13:23:01 2006 Tanaka Akira <akr@fsij.org>
-
- * common.mk (ia64.o): use the compiler driver to assemble ia64.s
- to use appropriate ABI.
-
-Sat Sep 2 12:06:35 2006 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/generator.rb (SOAP::SOAPGenerator#encode_tag): do not dump
- XML attribute which value is nil. value "" and nil both were dumped
- as 'attr="value"'. [ruby-dev:29395]
-
-Sat Sep 2 12:00:32 2006 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/csv.rb (CSV::IOReader#initialize): use String#[](pos, len)
- instead of String#[](idx) to check utf BOM. follows String#[](idx)
- behavior change of 1.9.
-
-Sat Sep 2 11:47:58 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): should handle when in else clause. a patch
- from Eric Hodel <drbrain at segment7.net>. [ruby-core:08662]
-
- * parse.y (primary): wrap with NODE_CASE. [ruby-core:08663]
-
-Fri Sep 1 22:07:04 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h (RSTRING_EMBED_LEN_MASK): uses 5 bits to support 64bit
- environment. [ruby-dev:29369]
-
-Fri Sep 1 22:02:08 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_resize): should copy embedded string to
- malloc'ed buffer. a patch from <nobu at ruby-lang.org> in
- [ruby-dev:29369]. fixed: [ruby-dev:29368]
-
- * string.c (rb_str_ord): use %ld specifier since STRING_LEN() is a
- long. [ruby-dev:29369]
-
-Fri Sep 1 21:41:12 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (socks_init): typo fixed. a patch from Sven
- Klemm <sven at c3d2.de>. [ruby-core:08770]
-
-Fri Sep 1 14:22:42 2006 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * array.c (rb_ary_shuffle): RDoc fixed.
-
-Fri Sep 1 13:52:57 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/font.rb: TkFont#current_configinfo() doesn't work
- on Tcl/Tk8.x.
-
-Fri Sep 1 09:32:55 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/ruby-lex.rb (RubyLex::getc): should not push nil into
- reading buffer (@readed). reported in
- <http://jarp.does.notwork.org/diary/200608c.html#200608311>.
-
-Thu Aug 31 23:59:03 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (configuration): follow nil.to_s.
-
-Thu Aug 31 20:50:46 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): follow nil.to_s.
-
- * win32/resource.rb: ditto.
-
-Thu Aug 31 20:21:47 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (search_required): use RSTRING_PTR and RSTRING_STR.
-
- * file.c (test_identical, rb_file_s_truncate): ditto.
-
- * io.c (pipe_open, rb_io_reopen): ditto.
-
- * object.c (nil_plus): ditto.
-
- * process.c (proc_spawn_n, rb_spawn): ditto.
-
- * util.c (ruby_add_suffix): ditto.
-
- * ext/Win32API/Win32API.c (Win32API_initialize): ditto.
-
- * ext/dl/cptr.c (rb_dlptr_s_to_ptr): ditto.
-
- * ext/openssl/ossl_x509ext.c (ossl_x509extfactory_create_ext): ditto.
-
- * ext/tk/stubs.c, ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: ditto.
-
- * ext/win32ole/win32ole.c (ole_val2olevariantdata): ditto.
-
-Thu Aug 31 18:23:00 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h (struct RString): embed small strings.
- (RSTRING_LEN): defined for accessing string members.
- (RSTRING_PTR): ditto.
-
- * string.c: use RSTRING_LEN and RSTRING_PTR.
-
-Thu Aug 31 17:16:19 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_shuffle_bang): new method.
-
- * array.c (rb_ary_shuffle): ditto.
-
- * random.c (genrand_real): ditto.
-
- * random.c (genrand_int32): export the function.
-
- * random.c (Init_Random): initialize random seed at the
- beginning.
-
-Thu Aug 31 13:12:06 2006 why the lucky stiff <why@ruby-lang.org>
-
- * eval.c (ruby_init): rename top_cref to ruby_top_cref and export,
- along with ruby_cref, for use by the sandbox. [ruby-core:08762]
-
- * node.h: ditto.
-
-Wed Aug 30 12:01:57 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (flo_hash): improve collision.
-
- * string.c (rb_memhash): new generic function to calculate hash value
- for memory chunk.
-
-Tue Aug 29 19:10:10 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (rb_hash_s_create): fixed memory leak, based on the patch
- by Kent Sibilev <ksruby at gmail.com>. fixed: [ruby-talk:211233]
-
-Mon Aug 28 11:29:46 2006 Eric Hodel <drbrain@segment7.net>
-
- * eval.c, parse.y: Revert.
- * ext/.document: Add digest.c.
- * ext/digest/digest.c: Make RDoc show up.
- * ext/io/wait.c: Fix call-seq in RDoc.
-
-Mon Aug 28 08:03:20 2006 Eric Hodel <drbrain@segment7.net>
-
- * ext/.document: Add C files with RDoc.
- * ext/digest/digest.c: Convert to RDoc.
- * ext/io/wait.c: ditto.
- * lib/rdoc/parsers/parse_rb.rb: Fix typo. Submitted by
- <calamitas at gmail.com>. [ruby-core:08724]
-
-Mon Aug 28 07:21:47 2006 Eric Hodel <drbrain@segment7.net>
-
- * file.c (File#size?): Fix documentation submitted by Rick Ohnemus.
- ruby-Bugs-5529. [ruby-core:08725]
-
-Sun Aug 27 21:41:23 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * oniguruma.h: Version 4.4.0
-
- * regint.h: ditto.
-
- * regparse.h: ditto.
-
- * regexec.c: ditto.
-
- * regcomp.c ditto.
-
- * regparse.c: ditto.
-
-Sat Aug 26 08:03:03 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb: updated based on date2 3.8.2.
-
-Fri Aug 25 21:15:22 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * common.mk: add regint.h and oniguruma.h to dependence.
-
- * ext/strscan/depend: ditto.
-
-Fri Aug 25 20:35:57 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/wsdl/document/echo.rb: removed.
-
- * test/wsdl/document/test_rpc.rb: remove echo.rb after test.
- [ruby-dev:29337]
-
-Fri Aug 25 17:02:06 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (gc_sweep): typo fixed.
-
-Fri Aug 25 16:05:50 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (sym_call): check if the receiver is given.
-
-Fri Aug 25 01:10:11 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_Integer): Integer(nil) should raise TypeError.
- [ruby-talk:210205]
-
- * object.c (nil_to_s): no longer returns empty string but "nil".
- [ruby-talk:210205]
-
- * lib/mkmf.rb: avoid COMMON_HEADERS being nil.
-
-Wed Aug 23 00:25:14 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rexml/source.rb (REXML::IOSource#initialize): encoding have to
- be set with the accessor. fixed: [ruby-list:42737]
-
-Tue Aug 22 19:21:00 2006 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: parameter `to_addrs' might be an Array,
- .flatten is required. [ruby-dev:29316]
-
-Tue Aug 22 18:47:51 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::handle_method):
- rdoc documents C module methods as instance methods. a patch in
- [ruby-core:08536].
-
-Tue Aug 22 12:35:57 2006 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/lib/kconv.rb (Kconv::RegexpEucjp): fix regexp for
- euc-jp [ruby-dev:29344]
-
-Sun Aug 20 11:46:52 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (num_step): also return an enumerator object if no block
- is given.
-
-Sat Aug 19 16:47:51 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (hash2named_arg): accept hash argument
- of symbol key.
-
- * test/win32ole/test_win32ole.rb
- ditto.
-
-Sat Aug 19 11:28:08 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_rename): use errno if set properly.
- fixed: [ruby-dev:29293]
-
-Fri Aug 18 01:05:57 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::out): specify -m0 to disable MIME decode. a
- patch from Fujioka <fuj at rabbix.jp>. [ruby-dev:29284]
-
-Thu Aug 17 19:15:16 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_stat_[rRwWxX]): check for super user.
- fixed: [ruby-core:08616]
-
-Thu Aug 17 14:47:06 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb: added rdoc by Daniel Berger. [ruby-core:08177]
-
-Wed Aug 16 17:46:59 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (r_byte): IO#getc returns one byte string now.
- fixed: [ruby-dev:29255]
-
-Wed Aug 16 17:22:44 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (pre-install-local): remove unnecessary code.
- [ruby-dev:29249]
-
-Wed Aug 16 11:45:36 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (proc_setuid, proc_setgid, proc_seteuid, proc_setegid):
- get rid of bogus implementations on Mac OS X.
-
-Wed Aug 16 11:09:26 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (set_arg0): fill argv other than the first with an empty
- string instead of NULL.
-
-Tue Aug 15 11:21:08 2006 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: support SMTP/SSL. Thanks Kazuhiro NISHIYAMA.
-
- * lib/net/smtp.rb: new method SMTP.use_ssl?
-
- * lib/net/smtp.rb: new method SMTP.enable_ssl.
-
- * lib/net/smtp.rb: new method SMTP.disable_ssl.
-
- * lib/net/smtp.rb: new method SMTP.default_ssl_port.
-
- * lib/net/smtp.rb: new method SMTP.default_tls_port.
-
- * lib/net/smtp.rb: now SMTP#enable_tls accepts a SSLContext
- object, instead of a verity and cert. [FEATURE CHANGE]
-
- * lib/net/smtp.rb: new method SMTP.ssl_context.
-
- * lib/net/smtp.rb: new method SMTP.default_ssl_context.
-
- * lib/net/smtp.rb: export SMTP.authenticate.
-
- * lib/net/smtp.rb: export SMTP.auth_plain.
-
- * lib/net/smtp.rb: export SMTP.auth_login.
-
- * lib/net/smtp.rb: export SMTP.auth_cram_md5.
-
- * lib/net/smtp.rb: export SMTP.starttls.
-
- * lib/net/smtp.rb: export SMTP.helo.
-
- * lib/net/smtp.rb: export SMTP.ehlo.
-
- * lib/net/smtp.rb: export SMTP.mailfrom.
-
- * lib/net/smtp.rb: export SMTP.rcptto.
-
- * lib/net/smtp.rb: export SMTP.rcptto_list.
-
- * lib/net/smtp.rb: export SMTP.data.
-
- * lib/net/smtp.rb: export SMTP.quit.
-
-Sat Aug 12 22:33:06 2006 Eric Hodel <drbrain@segment7.net>
-
- * string.c (String#split): Describe grouping behavior. Patch by Jan
- Svitok <jan.svitok at gmail.com>. [ruby-core:08603]
-
-Sun Aug 13 12:08:02 2006 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/socket.c: ANSIfied. [ruby-core:08601]
-
-Sat Aug 12 15:55:32 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, bcc32/Makefile.sub, win32/Makefile.sub, win32/dir.h,
- win32/win32.c, win32/win32.h: large file support for win32.
-
-Fri Aug 11 15:39:25 2006 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#find_body): Make RDoc
- ignore C function prototypes. Patch by Tilman Sauerbeck
- <tilman at code-monkey.de>. [ruby-core:8574]
- * lib/yaml/tag.rb: Replace nodoc with stopdoc so Module methods get
- documented.
-
-Wed Aug 9 16:53:28 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/smtp.rb (Net::SMTP::auth_cram_md5): use ord to retrieve
- bytes from strings. a patch from WATANABE Tetsuya
- <Tetsuya.WATANABE at nifty.com>. [ruby-dev:29240]
-
-Tue Aug 8 23:49:06 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/extend-command.rb (IRB::ExtendCommandBundle): pacify
- RDoc. a patch from Eric Hodel <drbrain at segment7.net>.
- [ruby-core:08522]
-
-Tue Aug 8 19:26:10 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/resolv.rb (Resolv::DNS::Message::MessageDecoder::get_string):
- affected by str[0] returns 1 char string. [ruby-dev:29223]
-
- * lib/resolv.rb (Resolv::DNS::Message::MessageDecoder::get_labels):
- ditto.
-
-Tue Aug 8 12:28:43 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (arg): allow newlines before ternary colon. [ruby-dev:29189]
-
-Mon Aug 7 17:56:59 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c, ext/digest/rmd160/rmd160ossl.c,
- ext/digest/sha1/sha1ossl.c, ext/readline/readline.c: move
- inclusion of config.h to pacify AIX. a patch from Yutaka
- Kanemoto <kinpoco at gmail.com>. [ruby-dev:29197]
-
-Mon Aug 7 15:55:08 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/syck/syck.c (syck_move_tokens): should avoid negative
- memmove. [ruby-list:42625]
-
-Mon Aug 7 14:37:48 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in, common.mk: AIX link issue. a patch from Yutaka
- Kanemoto <kinpoco at gmail.com>. [ruby-dev:29190]
-
- * ext/socket/socket.c: AIX socket support. [ruby-dev:29190]
-
-Mon Aug 7 12:05:28 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dln.c, eval.c, gc.c, ruby.h: shut up AIX alloca warning.
- a patch from Yutaka Kanemoto <kinpoco at gmail.com>.
- [ruby-dev:29191]
-
-Sun Aug 6 20:34:24 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (str[fp]time): %[EO]U didn't denote %U.
-
-Sun Aug 6 17:12:12 2006 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_reopen): STDERR.reopen(open("/dev/tty", "w")) should not
- clear FMODE_PREP in STDERR.
-
-Sat Aug 5 22:53:41 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * oniguruma.h: Version 4.2.2
-
- * regint.h: ditto.
-
- * regparse.h: ditto.
-
- * regexec.c: ditto.
-
- * regcomp.c ditto.
-
- * regerror.c: ditto.
-
- * regparse.c: ditto.
-
-Sat Aug 5 17:07:43 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (top_local_setup): local_vars[-1] should point
- ruby_scope itself to protect local_tbl from garbage collection.
- [ruby-dev:29049]
-
-Sat Aug 5 13:49:43 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb (str[fp]time): "%\n" means "\n".
-
-Fri Aug 4 12:13:22 2006 Eric Hodel <drbrain@segment7.net>
-
- * lib: Clean up files for RDoc.
- * lib/.document: Include most of the standard library in RDoc
- generation.
- * lib/rdoc/ri/ri_formatter.rb: Don't unescape HTML in HtmlFormatter.
- Submitted by <ksruby at gmail.com>. [ruby-core:08392].
- * lib/drb/ssl.rb: Close socket on SSLError [ruby-core:7197]
-
-Fri Aug 4 18:59:49 2006 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/{init.rb,ruby-lex.rb,slex.rb}: can't input '\c' for
- [ruby-core: 7122]. and support for ruby1.8.X
-
-Fri Aug 4 14:02:14 2006 James Edward Gray II <james@grayproductions.net>
-
- * lib/date/format.rb (__strptime, strftime): allow multi-line patterns
- in Date#strftime the same as Time#strftime accepts.
- fixed: [ruby-core:08466]
-
-Fri Aug 4 13:56:51 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * pack.c (pack_pack): check argument overrun for 'P'. based on a
- patch by rucila <rucila at yahoo.cojp>. fixed: [ruby-dev:29182]
-
-Fri Aug 4 02:42:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_str_format): a bug in %c type check.
-
-Fri Aug 4 01:28:19 2006 Tanaka Akira <akr@fsij.org>
-
- * io.c (io_reopen): STDERR.reopen(File.open("/dev/null", "w")) should
- not fclose stderr.
-
-Thu Aug 3 15:16:44 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_include): should always call Enumerable#include?
- (not #===) for non numeric end points. [ruby-core:08477]
- [ruby-core:08496]
-
-Mon Jul 31 16:51:40 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (exit_handler): new function; release winsock and
- environment work area.
-
- * win32/win32.c (NTInitialize): setup exit_handler.
-
- * win32/win32.c (StartSockets): use exit_handler.
-
- * win32/win32.c (rb_w32_getenv): use GetEnvironmentStrings() instead
- of GetEnvironmentVariable(), because the latter cannot distinguish
- whether a null environment variable exists or not.
- fixed: [ruby-talk:205123]
-
-Mon Jul 31 16:15:13 2006 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_process.rb (TestProcess#test_rlimit_nofile):
- setrlimit may fail with EINVAL.
- reported by MIYAMUKO Katsuyuki. [ruby-dev:29174]
-
-Mon Jul 31 09:22:12 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h: use ifdef (or defined) for macro constants that may or
- may not be defined to shut up gcc's -Wundef warnings.
- [ruby-core:08447]
-
-Mon Jul 31 13:38:13 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httprequest.rb (WEBrick::HTTPReuqest#parse_uri): improve
- for the value of IPv6 address in the Host: header field.
-
-Sun Jul 30 23:26:12 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_call0): trace call/return of method defined from block.
- fixed: [ruby-core:08329]
-
- * eval.c (rb_trap_eval): make the current thread runnable to deal with
- exceptions which occurred within the trap. fixed: [ruby-dev:27729]
-
- * lib/cgi/session.rb, lib/cgi/session/pstore.rb: suppress warnings.
- fixed: [ruby-talk:204896]
-
-Sat Jul 29 06:12:06 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: freeze ip_name for security reason.
-
-Sat Jul 29 01:23:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/logger.rb: improves the amount of documentation that Rdoc
- picks up when processing logger.rb by moving the require
- statement back before the comment block. a patch from Hugh
- Sasse <hgs at dmu.ac.uk>. [ruby-core:08422]
-
-Fri Jul 28 17:18:03 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/curses/curses.c (NUM2CH, CH2FIX): use single char strings.
-
-Fri Jul 28 14:09:14 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call): fixed typo in cache look-up. [ruby-dev:29167]
-
-Fri Jul 28 10:41:35 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call): a bug in method cache look-up.
- http://www.rubyist.net/~matz/20060720.html#c04
-
-Fri Jul 28 10:19:28 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): documentation update patch from Jacob
- Fugal <lukfugl at gmail.com>. [ruby-core:08418]
-
-Fri Jul 28 09:41:45 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_to_s): fixed typo. [ruby-dev:29162]
-
-Fri Jul 28 00:26:47 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * math.c (domain_check): ANSI style function arguments
-
- * math.c (math_log): too few argument to domain_check().
-
-Thu Jul 27 21:19:54 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * math.c (domain_check): a new function to check domain error
- explicitly for systems that return NaN like FreeBSD.
- [ruby-core:07019]
-
- * math.c (math_acos, math_asin, math_acosh, math_atanh, math_log,
- math_log10, math_sqrt): use domain_check().
-
- * math.c (math_sqrt): fix documentation flaw.
-
-Thu Jul 27 22:21:52 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (time_to_s): fixed format mismatch.
-
-Thu Jul 27 18:12:12 2006 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * time.c: need to declare time_utc_offset.
-
-Thu Jul 27 17:01:01 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_close): always calls "close" method of the receiver.
- [ruby-core:6911] [ruby-core:8112]
-
-Thu Jul 27 16:41:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/openssl/ossl.h: move <ruby.h> inclusion point to shut up
- Solaris compiler. [ruby-core:08114]
-
- * time.c (time_to_s): use +0900 style timezone string for local time.
- [ruby-dev:29143]
-
-Wed Jul 26 22:20:59 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in: add support for as and ASFLAGS. [ruby-dev:29138]
-
-Wed Jul 26 21:59:33 2006 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (Net::HTTP#post, request_post, request): should
- set Content-Type: x-www-form-urlencoded by default.
-
- * lib/net/http.rb (Net::HTTPHeader#content_type): should return
- nil when there's no Content-Type.
-
- * lib/net/http.rb (Net::HTTPHeader#sub_type): should return nil
- when there's no sub Content-Type (e.g. "Content-Type: text").
-
- * lib/net/http.rb (Net::HTTPHeader#type_params): wrongly failed
- when there's no Content-Type.
-
-Wed Jul 26 18:38:13 2006 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c (strscan_do_scan): always return nil if
- p->curr exceeds string size.
-
-Wed Jul 26 18:33:31 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (Init_eval): rename #invoke_method and
- #invoke_functional_method to __send and __send! respectively.
-
- * eval.c (remove_method): prohibit removing __send and __send!.
-
- * eval.c (rb_undef): prohibit undef'ing __send and __send!.
-
- * eval.c (rb_eval): prohibit redefining __send and __send!.
-
- * lib/delegate.rb (Delegator): preserve __send.
-
-Wed Jul 26 18:14:19 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/pty/pty.c (getDevice): retry once after GC on failure.
- [ruby-core:08282]
-
-Wed Jul 26 17:43:20 2006 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c (strscan_do_scan):
- StringScanner.new("").scan(//) should return "". [ruby-Bugs:4361]
-
-Wed Jul 26 17:28:16 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_str_format): prepend ".." to %u for negative bignum,
- but not "-". fixed: [ruby-core:08167]
-
-Wed Jul 26 16:39:07 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_scan): add string modification check.
- [ruby-core:7216]
-
-Wed Jul 26 16:06:03 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::QueryExtension::read_multipart): check
- multipart boundary end. a patch from Fujioka <fuj at rabbix.jp>
- [ruby-dev:28470]
-
-Wed Jul 26 01:02:59 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: suppress warnings by automake 1.8 or later.
-
-Tue Jul 25 14:46:14 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (configuration): typo.
-
-Tue Jul 25 13:14:32 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (rb_proc_times): rename hz to hertz to avoid name
- crash on AIX. [ruby-dev:29126]
-
-Mon Jul 24 22:03:40 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (backtrace): skip frames successive on node and method name.
-
-Mon Jul 24 15:51:52 2006 Tanaka Akira <akr@fsij.org>
-
- * ext/readline/readline.c (readline_readline): rl_deprep_term_function
- may be NULL with libedit. reported by Ryan Davis. [ruby-dev:29070]
-
-Mon Jul 24 15:19:55 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): revert last change. [ruby-dev:29112]
- [ruby-core:08374]
-
-Sun Jul 23 22:59:49 2006 Tanaka Akira <akr@fsij.org>
-
- * test/socket/test_unix.rb: disabled on cygwin.
- reported by Kouhei Yanagita. [ruby-dev:29080]
-
-Fri Jul 21 23:57:26 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): script is never used while recursing.
-
-Fri Jul 21 21:21:08 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_call0): include funcalled methods in caller list.
- fixed: [ruby-core:08290]
-
-Fri Jul 21 17:52:24 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_cstr_to_dbl): "9_e8" should consider "_e8" as
- trailing garbage so that it should return 9.0. [ruby-dev:29088]
-
-Fri Jul 21 12:11:00 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb, lib/mkmf.rb (with_destdir): remove drive letter before
- prepending destdir on DOSISH.
-
-Fri Jul 21 04:17:22 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call): try local method look-up first for fcall, then
- normal method look-up. [ruby-talk:202564]
-
- * eval.c (rb_get_method_body): save local method cache separately.
-
- * eval.c (search_method): export info whether method is local or
- not.
-
-Thu Jul 20 20:27:07 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_mod_attr): make Module#attr to be an alias to
- attr_reader. [RCR#331]
-
-Thu Jul 20 15:07:14 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h: export classes/modules to implement sandbox.
- [ruby-core:08283]
-
-Wed Jul 19 19:40:00 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): should check args_args before lambda
- argument check. [ruby-dev:29029]
-
-Tue Jul 18 23:53:59 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (rb_f_system): shouldn't block SIGCHLD if it's not
- exist.
-
-Tue Jul 18 22:10:13 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (rb_f_system): block SIGCHLD during the process
- execution, like glibc system(3) does. [ruby-talk:202361]
-
-Tue Jul 18 23:10:43 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (open_ifs_socket): should not use plain malloc.
-
- * win32/win32.c (rb_w32_opendir): should not use plain realloc.
-
-Tue Jul 18 18:05:49 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_float.rb (TestFloat::test_strtod): update test to
- conform strtod change.
-
-Tue Jul 18 16:52:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (yield_under_i): argument should be passed in avalue
- form. [ruby-dev:29044]
-
-Tue Jul 18 15:49:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_unpack): propagate association array to copied
- string. [ruby-core:08223]
-
- * pack.c (pack_unpack): return referenced string itself if it has
- same length as specified. a patch from <nobu at ruby-lang.org>
- in [ruby-core:08225].
-
- * pack.c (pack_pack): taint 'p' packed strings.
-
-Tue Jul 18 15:19:07 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * intern.h (st_foreach_safe): fix prototype.
-
- * node.h (NODE_LMASK): bigger than long on LLP64.
-
- * missing/vsnprintf.c (BSD__uqtoa): new function to support LLP64.
- all changes are derived from [ruby-dev:29045]
-
-Tue Jul 18 14:03:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/webrick/httpserver.rb (WEBrick::HTTPServer::unmount): remove
- inpect argument from sprintf. [ruby-dev:29039]
-
-Tue Jul 18 10:53:37 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (rb_cstr_to_dbl): limit out-of-range message.
-
- * util.c (ruby_strtod): return end pointer even if ERANGE occurred.
- fixed: [ruby-dev:29041]
-
-Mon Jul 18 00:43:05 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * util.c (ruby_strtod): stop at dot not followed by digits.
- fixed: [ruby-dev:29036]
-
-Tue Jul 18 00:01:27 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: remove LIBRUBY_SO if static linked extensions exist.
-
-Mon Jul 17 23:30:46 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_cv_msvcrt): defaulted to msvcrt. Workaround for a
- bug of cygwin 1.5.20.
-
-Mon Jul 17 22:55:31 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/io/wait/wait.c (io_ready_p): protoize.
-
-Mon Jul 17 13:43:05 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (define_swapx): should not use plain malloc.
-
- * ext/curses/curses.c (curses_getmouse): ditto.
-
-Mon Jul 17 12:58:41 2006 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: should use ac_cv_lib_dl_dlopen=no on MinGW.
-
-Mon Jul 17 11:47:35 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * st.c: still need to include config.h on some platforms.
-
-Sat Jul 15 01:09:22 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * st.c (malloc): use xmalloc/xcalloc instead of plain
- malloc/calloc, to detect memory allocation failure. see
- <http://www.nongnu.org/failmalloc/>.
-
-Fri Jul 14 13:08:13 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: add methods for new features of latest Tcl/Tk8.5.
-
- * ext/tk/lib/tk/namespace.rb: ditto.
-
-Fri Jul 14 02:30:12 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/monitor.rb: document patch from Hugh Sasse <hgs at dmu.ac.uk>.
- [ruby-core:08205]
-
-Fri Jul 14 00:10:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_pop): may cause realloc oscillation. a patch
- from MORITA Naoyuki <mlgetter at kidou.sakura.ne.jp>.
- [ruby-dev:29028]
-
-Thu Jul 13 22:23:56 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/composite.rb: improve handling of the classname on the
- option database for the widget class which includes TkComposite.
-
-Thu Jul 13 00:40:57 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h (FIX2LONG): returns integer of size of VALUE.
- [ruby-dev:29024]
-
- * ruby.h (FIX2ULONG): ditto.
-
-Wed Jul 12 20:05:23 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (f_args): allow post mandatory arguments after optional
- arguments. [ruby-dev:29014]
-
- * parse.y (new_args_gen): allow post_args without rest_args.
-
- * eval.c (formal_assign): ditto.
-
- * parse.y (new_args_gen): check post argument duplication.
-
-Tue Jul 11 20:58:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h: export rb_cMethod. [ruby-talk:201259]
-
-Tue Jul 11 19:13:33 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: remove restriction on the class of
- pseudo-toplevel.
-
-Tue Jul 11 18:00:57 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: security fix.
-
-Tue Jul 11 17:28:08 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * string.c (rb_str_dump): need to extend len for \b.
-
-Tue Jul 11 15:29:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_int2big): use SIGNED_VALUE. [ruby-dev:29019]
-
- * bignum.c (rb_int2inum, rb_uint2inum): use VALUE sized integer.
-
- * bignum.c (rb_big2long, rb_big2ulong): ditto.
-
- * numeric.c (rb_num2long, rb_num2ulong): ditto.
-
- * numeric.c (check_int, check_uint): ditto.
-
- * bignum.c (rb_quad_pack): typo fixed.
-
-Tue Jul 11 13:40:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bignorm): sizeof(long) may be smaller than
- sizeof(VALUE). [ruby-dev:29013]
-
- * ruby.h (FIXNUM_MAX): fixnum may be bigger than long.
-
- * ruby.h (SIGNED_VALUE): signed integer of size of VALUE.
-
-Mon Jul 10 23:37:14 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/soap/rpc/proxy.rb (Proxy::Operation::response_doc): remove
- splat star from return statements.
-
- * lib/soap/rpc/proxy.rb (Proxy::Operation::response_obj): retrieve
- the first value from the result array if response has only one
- value.
-
-Mon Jul 10 22:00:00 2006 Shigeo Kobayashi <shigek@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c: Allows '_' to appear within
- digits. [ruby-dev:28872]
-
- * ext/bigdecimal/lib/bigdecimal/util.rb: Bug in to_r reported by
- [ruby-list:42533] fixed.
-
-Mon Jul 10 19:22:19 2006 Tanaka Akira <akr@fsij.org>
-
- * gc.c (gc_sweep): expand heap earlier.
- reported by MORITA Naoyuki. [ruby-dev:28960]
-
-Mon Jul 10 18:59:34 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/font.rb: sorry. mistaken to patch.
-
-Mon Jul 10 18:46:52 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: make SEGV risk lower at exit.
-
- * ext/tk/lib/tk.rb: ditto.
-
- * ext/tk/lib/multi-tk.rb: fail to call function-style methods on slave
- interpreters. The strategy (MultiTkIp_PseudoToplevel_Evaluable) to
- fix the problem is a little tricky. You may have to take care of
- conflicting with it.
-
- * ext/tk/lib/tk.rb: a little change for the pseudo-toplevel strategy.
-
- * ext/tk/lib/tk/font.rb: ditto.
-
- * ext/tk/lib/tk/msgcat.rb: ditto.
-
- * ext/tk/lib/tkextlib/itk/incr_tk.rb: ditto.
-
- * ext/tk/sample/demos-en/widget: fail to call function-style methods
- on sample scripts. To fix it, a strategy which similar to the way
- on MultiTiIp is used. Please take care when re-write and re-run a
- demo script on the Widget-Demo code viewer.
-
- * ext/tk/sample/demos-jp/widget: ditto.
-
-Mon Jul 10 17:32:38 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sample/test.rb: update test suites.
-
- * test/ruby/test_assignment.rb (TestAssignment::test_yield): ditto.
-
- * test/ruby/test_iterator.rb (TestIterator::test_itertest): ditto.
-
-Mon Jul 10 14:43:47 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call): remove erroneously restored prot_tag->blkid
- initialization. [ruby-dev:28997] [ruby-dev:29000]
-
-Mon Jul 10 13:58:08 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * signal.c (install_nativethread_sighandler): commented out.
-
-Mon Jul 10 09:29:12 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_clear_cache_for_remove): clear entries for included
- module. fixed: [ruby-core:08180]
-
-Mon Jul 10 02:22:58 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): should not overwrite block information in
- current frame. [ruby-dev:28957]
-
- * eval.c (rb_yield_0): retrieve proper block object from the frame
- record.
-
- * eval.c (proc_alloc): return preserved block object if it's
- available.
-
-Mon Jul 10 01:48:38 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * st.h (st_data_t): use pointer sized integer for st_data_t.
- [ruby-dev:28988]
-
-Sun Jul 9 18:06:47 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (try_constant): fix for value 1 at cross compiling.
-
- * lib/mkmf.rb (create_makefile): prevent substitution of macro
- definition. fixed: http://www.yotabanana.com/lab/20060624.html#p02
-
-Sun Jul 9 07:58:48 2006 Ryan Davis <ryand-ruby@zenspider.com>
-
- * lib/rdoc/parsers/parse_f95.rb: massive overhaul from Yasuhiro
- Morikawa including new file suffixes, function support, public
- variables and constants, derived-types, defined operators and
- assignments, namelists, and subroutine and function
- arguments. Truly massive.
-
- * lib/rdoc/diagram.rb: diagrams are now cached.
-
- * lib/irb/completion.rb: fixed a crasher when completing against
- an unnamed class/module.
-
- * lib/rdoc/parsers/parse_c.rb: private comment (--/++) support in
- C-file rdoc.
-
- * lib/debug.rb: minor clarification in help.
-
- * lib/pp.rb: minor clarification on exception.
-
-Sun Jul 9 00:54:11 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (next_jump): deal with destination of next.
- fixed: [ruby-core:08169]
-
-Fri Jul 7 17:49:16 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_ord): extract lower byte. fixed: [ruby-dev:28980]
-
- * lib/jcode.rb (String#succ!): fix for 1.9. fixed: [ruby-dev:28979]
-
-Fri Jul 7 14:05:03 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): define FUNC_STDCALL/FUNC_CDECL.
- from [ruby-dev:28970].
-
-Fri Jul 7 00:38:49 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_default): should not call default procedure if
- no key is given. [ruby-list:42541]
-
-Thu Jul 6 23:30:04 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_proc_times): use sysconf(_SC_CLK_TCK) value prior to
- HZ and CLK_TCK. fixed: [ruby-talk:200293]
-
-Thu Jul 6 21:50:06 2006 Minero Aoki <aamine@loveruby.net>
-
- * ext/racc/cparse/cparse.c: sync with original code, rev 1.8.
-
- * ext/racc/cparse/cparse.c: should mark CparseParams objects.
-
- * lib/racc/parser.rb: sync with original code, rev 1.8.
-
- * lib/racc/parser.rb: update coding style.
-
-Wed Jul 5 05:28:45 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (block_param): should allow block argument after splat
- and post splat args.
-
-Wed Jul 5 01:12:19 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/ruby/test_lambda.rb (TestLambdaParameters::test_lambda_as_iterator):
- -> style block no longer available. [ruby-dev:28958]
-
-Tue Jul 4 21:48:56 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ruby.c (proc_options): suppress warning on DOSISH.
-
-Tue Jul 4 15:12:49 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call): should not set prot_tag->blkid since it would
- never catch breaks at this level. [ruby-dev:28922]
-
-Tue Jul 4 04:48:36 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c: ruby 1.9 HEAD 64 bit warnings clean up from
- <ville.mattila at stonesoft.com>. [ruby-core:08120]
-
-Mon Jul 3 19:04:38 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (ip_make_menu_embeddable): help to make a menu
- widget embeddable (pack, grid, and so on) like as a general widget.
- However, an embeddable menu may require to be defined some event
- bindings for general use.
-
- * ext/tk/lib/tk/event.rb: [bug fix] Tk.callback_break and
- Tk.callback_continue don't work on MultiTkIp.
-
- * ext/tk/lib/multi-tk.rb: ditto.
-
- * ext/tk/lib/tk.rb: lack of Tk.callback_return.
-
- * ext/tk/lib/tk/menu.rb: improve creating clone menus.
-
-Mon Jul 3 14:42:06 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/etc/extconf.rb (PW_UID2VAL, PW_GID2VAL): defaulted to conversion
- from int, and sys/types.h needs to be included before grp.h.
- fixed: [ruby-dev:28938]
-
-Mon Jul 3 10:44:01 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (popen_exec): close file descriptors other than standard I/Os.
- fixed: [ruby-dev:28924]
-
-Mon Jul 3 05:15:29 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * test/openssl/test_asn1.c: String#[]= doesn't accept Integer.
-
-Mon Jul 3 01:14:15 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_inspect): encode \b (\010) for escape.
- [ruby-dev:28927]
-
- * string.c (rb_str_dump): ditto.
-
-Sun Jul 2 19:03:30 2006 Minero Aoki <aamine@loveruby.net>
-
- * ext/racc/cparse/cparse.c: sync with original code, rev 1.7.
-
- * ext/racc/cparse/cparse.c: must require version.h to get
- RUBY_VERSION_CODE.
-
-Sun Jul 2 18:42:27 2006 Minero Aoki <aamine@loveruby.net>
-
- * ext/racc/cparse/cparse.c: sync with original source code, rev
- 1.6.
-
- * ext/racc/cparse/cparse.c: do not use rb_iterate to give a block
- to the method, use rb_block_call instead. [ruby-dev:28445]
-
-Sun Jul 2 11:22:03 2006 Tanaka Akira <akr@m17n.org>
-
- * io.c (io_reopen): STDOUT.reopen(filename, "w+") didn't work.
- (rb_io_reopen): STDOUT.reopen(File.open(filename, "w+")) didn't work.
-
-Sat Jul 1 23:55:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (PUSH_FRAME): initialize frame->self. [ruby-dev:28911]
-
-Sat Jul 1 17:00:42 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * test/webrick/utils.rb: use Proc#yield instead of Proc#call.
- [ruby-dev:28914]
-
-Sat Jul 1 15:15:49 2006 Tanaka Akira <akr@m17n.org>
-
- * test/socket/test_nonblock.rb: add timeout to send/receive
- an empty UDP packet.
- [ruby-dev:28820]
-
-Fri Jun 30 23:46:23 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in: should test isinf for Solaris with GCC compiler.
- a patch from <ville.mattila at stonesoft.com>. [ruby-core:07791]
-
- * configure.in: -shared patch from Andrew Morrow
- <andrew.c.morrow at gmail.com>. [ruby-core:08100]
-
-Fri Jun 30 19:35:41 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils._escape): should
- use String#ord to get ascii code from the one-character string.
- [ruby-dev:28901]
-
-Thu Jun 29 23:56:01 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (gc_mark_children): a bug in NODE_BLOCK_PASS marking.
- [ruby-dev:28908]
-
-Thu Jun 29 23:04:36 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: use ARGSPUSH instead of ARGSCAT to prevent too much
- splat expansion.
-
- * eval.c (when_check): need to handle ARGSPUSH as well.
-
- * eval.c (block_orphan): lambda and proc from method are always
- orphan.
-
- * gc.c (gc_mark_children): proper marking for NODE_LAMBDA.
-
-Thu Jun 29 22:47:30 2006 Tanaka Akira <akr@m17n.org>
-
- * eval.c (SETUP_ARGS0): avoid GC problem.
- [ruby-dev:28902]
-
-Thu Jun 29 18:58:51 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_version): fix patch
- failure.
-
-Thu Jun 29 18:00:51 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c: add RDoc document. a patch from
- mathew <meta at pobox.com>. [ruby-core:07050]
-
-Wed Jun 28 14:53:09 2006 Eric Hodel <drbrain@segment7.net>
-
- * lib/optparse.rb: RDoc patch from Robin Stocker <robin@nibor.org>
- [ruby-core:08087]
-
-Wed Jun 28 23:23:48 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_cstr_to_dbl): underscores should appear only
- between digits. [ruby-dev:28891]
-
-Wed Jun 28 19:04:34 2006 Tanaka Akira <akr@m17n.org>
-
- * test/socket/test_unix.rb: test_seqpacket_pair removed.
- [ruby-dev:28846]
-
-Wed Jun 28 13:51:21 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (when_check): arbitrary values are allowed after splats.
- fixed: [ruby-dev:28879]
-
-Wed Jun 28 09:16:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (primary): remove meaningless else-only case statement
- syntax.
-
-Wed Jun 28 08:08:13 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): problem to handle else part. [ruby-dev:28873]
-
-Wed Jun 28 01:48:23 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): support splat in when expression list.
- [ruby-dev:28822]
-
- * eval.c (when_check): a new auxiliary function for case match.
-
- * eval.c (when_cond): ditto.
-
-Wed Jun 28 01:05:37 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_cstr_to_dbl): should not skip '_' at the beginning
- of a string. [ruby-dev:28830]
-
- * bignum.c (rb_cstr_to_inum): ditto.
-
-Tue Jun 27 23:03:49 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c: RDoc update for =~ method. a patch from Alex Young
- <alex at blackkettle.org>. [ruby-core:08068]
-
-Tue Jun 27 22:47:18 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: forgot to update TCLTKLIB_RELEASE_DATE.
-
- * ext/tk/lib/tk.rb (tk_tcl2ruby): [bug fix] sometimes fail to convert
- a tcl string to a ruby object if the tcl string includes "\n".
-
-Tue Jun 27 20:05:14 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (pipe_open): backout unnecessary fix on 2006-06-26.
- [ruby-dev:28865]
-
- * eval.c (rb_yield_0): exact argument number check now done only
- for lambda Proc.
-
- * eval.c (rb_yield_0): add check for number of arguments, if
- there's one lambda block parameter.
-
-Tue Jun 27 16:04:05 2006 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.h: define isascii on MinGW for msvcrt compatibility.
-
- * configure.in: set ac_cv_header_sys_time_h=no on MinGW
- for msvcrt compatibility.
-
-Tue Jun 27 11:36:02 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/etc/etc.c (setup_passwd, setup_group): allow bignum uid, gid and
- so on. [ruby-talk:199102]
-
-Tue Jun 27 10:46:53 2006 Tanaka Akira <akr@m17n.org>
-
- * eval.c (rb_yield_0): avoid core dump. [ruby-dev:28840]
-
-Mon Jun 26 11:03:00 2006 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/ri: Add options to limit the ri search path.
-
-Tue Jun 27 01:31:59 2006 Tanaka Akira <akr@m17n.org>
-
- * ext/socket/socket.c (bsock_recv_nonblock): new method
- BasicSocket#recv_nonblock.
- (udp_recvfrom_nonblock): renamed from ip_recvfrom_nonblock.
- IPSocket#recvfrom_nonblock is moved to UDPSocket#recvfrom_nonblock.
- (unix_recvfrom_nonblock): removed.
- UNIXSocket#recvfrom_nonblock is removed.
-
-Tue Jun 27 00:52:40 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/ripper/eventids2.c (token_assoc): added tCHAR, which is not
- under 256 now. fixed: [ruby-dev:28832]
-
-Mon Jun 26 23:42:57 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (call_trace_func): no check for argument number of the
- callback. fixed: [ruby-dev:28812]
-
-Mon Jun 26 18:37:44 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (ip_delete): fix SEGV when a slave-ip is
- deleted on callback.
-
-Mon Jun 26 15:40:26 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (sock_accept): revert to avoid ambiguity of
- argument evaluation order. [ruby-dev:28861]
-
- * ext/socket/socket.c (sock_accept_nonblock): ditto.
-
-Mon Jun 26 10:47:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (pipe_open): avoid closing uninitialized file descriptors.
- a patch from <tommy at tmtm.org> [ruby-dev:28600]
-
-Sun Jun 25 23:02:12 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, mkconfig.rb: catch-up for latest autoconf.
-
-Sun Jun 25 17:44:16 2006 Tanaka Akira <akr@m17n.org>
-
- * parse.y (paren_args): wrap $2 by escape_Qundef because it may be
- Qundef. [ruby-dev:28843]
-
-Sun Jun 25 17:18:33 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c(ole_invoke): support some kind of
- method of word. [ruby-Bugs#3237]
-
- * test/win32ole/test_word.rb: ditto.
-
-Sat Jun 24 23:48:08 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: replace terminal token names with more descriptive
- name, i.e. kEND to keyword_end. [ruby-list:42477]
-
-Sat Jun 24 23:37:41 2006 Tanaka Akira <akr@m17n.org>
-
- * eval.c (rb_eval): use rb_ary_new2 instead of rb_ary_new4 to avoid
- GC problem.
- (rb_yield_values): use rb_ary_new2 instead of rb_ary_new4.
-
- * array.c (rb_ary_new4): don't set len as n if contents is not
- initialized. make it safe with GC.
-
- [ruby-dev:28826]
-
-Fri Jun 23 23:35:32 2006 Tanaka Akira <akr@m17n.org>
-
- * ruby.h, lib/drb/drb.rb, lib/drb/invokemethod.rb: remove Values class.
- [ruby-dev:28805]
-
-Fri Jun 23 17:27:52 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_block_pass): removed.
-
- * eval.c (rb_thread_start_1): use rb_proc_yield() instead of
- rb_block_pass(). fixed: [ruby-dev:28794]
-
-Thu Jun 22 11:52:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/http.rb (Net::HTTPResponse): duplicated error 501;
- HTTPInternalServerError should be error 500. [ruby-core:08037]
-
-Thu Jun 22 11:47:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_mod_name): returns nil for anonymous modules.
- [ruby-talk:198440]
-
-Thu Jun 22 10:31:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_aref): "abc"[3] should not return an empty
- string but nil. [ruby-dev:28786]
-
-Thu Jun 22 05:15:58 2006 Tanaka Akira <akr@m17n.org>
-
- * ext/socket/socket.c (sock_s_socketpair): try GC only once.
- [ruby-dev:28778]
-
-Wed Jun 21 21:20:31 2006 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (jd_to_commercial): now works fine even if in
- mathn-ized context.
-
-Wed Jun 21 17:29:57 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/getaddrinfo.c (freeaddrinfo, get_name): fixed typo.
-
- * ext/tk/tcltklib.c (tcl_eval, tcl_global_eval): ditto.
-
- * ext/zlib/zlib.c (rscheck): constified.
-
-Wed Jun 21 17:18:55 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/pp.rb (PP::PPMethods::seplist): should have preserved
- original reference to the array. [ruby-dev:28747]
-
-Wed Jun 21 14:35:06 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (block_param): do not use multiple assignment for a sole
- block parameter. [ruby-dev:28710]
-
- * eval.c (rb_yield_0): pass a raw yielded value to a sole block
- parameter if a value is passed by yield.
-
- * eval.c (proc_invoke): args may not be an array.
-
- * eval.c (rb_proc_yield): pass original value without wrapping
- it in an array.
-
-Wed Jun 21 14:06:47 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (method_call): remove (fn)(args) style lambda
- invocation, add fn.(args) instead.
-
-Wed Jun 21 08:39:54 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/xmlrpc/create.rb (XMLRPC::Create::conv2value): merge Date
- and Time processing. [ruby-core:08033]
-
-Wed Jun 21 03:01:10 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c, file.c, etc.: code-cleanup patch from Stefan Huehner
- <stefan at huehner.org>. [ruby-core:08029]
-
-Wed Jun 21 01:40:25 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (reswords): modifier token is no longer returned in fname
- state. fixed: [ruby-dev:28775]
-
-Tue Jun 20 23:28:34 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (parse_args): provisional catch-up for the recent changes.
-
- * lib/optparse.rb (OptionParser::List#summarize, OptionParser#order!): ditto.
-
-Tue Jun 20 11:07:55 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): intercept break and return from lambda
- Proc objects. [ruby-dev:28742]
-
- * eval.c (proc_invoke): remove unnecessary YIELD_PROC_CALL flag.
-
- * eval.c (YIELD_EXACT_ARGS): renamed from YIELD_LAMBDA_CALL, which
- is no longer related to the behavior turned on by this flag.
-
- * eval.c (return_jump): no need to care about PROT_YIELD.
-
- * eval.c (break_jump): no jump to toplevel PROT_THREAD tag.
-
- * eval.c (rb_yield_0): fix confusion between lambda (which is a
- property of a proc) and pcall (which depends on whether it's
- called via yield or call).
-
- * eval.c (rb_thread_yield): no need to specify YIELD_LAMBDA_CALL.
-
- * eval.c (rb_block_pass): update blkid in prot_tag.
-
-Mon Jun 19 23:40:59 2006 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/lib/kconv.rb: remove default -m0 and fix document.
-
- * ext/nkf/nkf-8/{nkf.c, config.h, utf8tbl.c, utf8tbl.h}:
- imported nkf 2.0.7.
-
-Mon Jun 19 17:02:14 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sample/test.rb (proc_return3): return within non lambda block
- should terminate surrounding method. [ruby-dev:28741]
-
-Mon Jun 19 13:22:48 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (unix_sysaccept): typo fixed.
-
- * ext/socket/socket.c (sock_connect): remove an unused local
- variable tmpaddr.
-
-Mon Jun 19 02:10:32 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (tcp_accept_nonblock): forgot to remove
- abandoned hacks. [ruby-dev:28740]
-
-Mon Jun 19 00:00:17 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: fix bug: initialize improper tables.
-
-Sun Jun 18 20:28:43 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (fole_methods): The return value
- of WIN32OLE#ole_methods should include PROPERTYPUTREF methods.
-
- * ext/win32ole/win32ole.c (fole_put_methods): The return value
- of WIN32OLE#ole_put_methods should include PROPERTYPUTREF methods.
-
- * test/win32ole/test_ole_methods.rb: ditto.
-
- * ext/win32ole/win32ole.c (ole_propertyput): support
- PROPERTYPUTREF. [ruby-talk:183042]
-
- * test/win32ole/test_propertyputref.rb: ditto.
-
-Sat Jun 17 23:42:26 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (Init_eval): add aliases invoke_method and
- invoke_functional_method corresponding send and funcall
- respectively. [ruby-talk:197512]
-
- * parse.y (parser_yylex): returns the most typical keyword token
- on EXPR_FNAME. [ruby-core:7995]
-
- * ext/socket/socket.c: protoize.
-
-Sat Jun 17 22:17:17 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/mathn.rb (Integer::prime_division): raise ZeroDivisionError
- on zeros. [ruby-dev:28739]
-
-Sat Jun 17 14:53:32 2006 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Kernel#Pathname): new method.
-
-Sat Jun 17 02:01:00 2006 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb (Kernel#pretty_inspect): defined for pretty printed
- string.
-
-Fri Jun 16 01:41:00 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_proc_arity): get rid of segfault for mere splat.
-
- * gc.c (gc_mark_children): NODE_BLOCK_PASS needs u3 to be marked.
-
-Thu Jun 15 22:06:56 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (then): remove ':' from 'then' and 'do' rules.
-
-Wed Jun 14 18:00:20 2006 Eric Hodel <drbrain@segment7.net>
-
- * enum.c (enum_any): Documentation typo.
-
-Wed Jun 14 15:01:09 2006 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser#warn): Don't print
- warnings when -q is set.
-
-Wed Jun 14 16:11:37 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (rb_f_method_name, rb_f_callee_name): document typo.
-
-Wed Jun 14 15:19:14 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (env_aset): raise TypeError on nil with more descriptive
- message. [ruby-core:07990]
-
-Tue Jun 13 17:22:19 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (Init_socket): remove obsolete constants:
- IPsocket, TCPsocket, SOCKSsocket, TCPserver, UDPsocket,
- UNIXsocket, UNIXserver.
-
-Tue Jun 13 09:07:27 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (formal_assign): post splat arguments should have had
- higher priority than optional arguments, since they are
- mandatory. [ruby-dev:28715]
-
- * eval.c (VIS_MASK): broken. should be 15. [ruby-dev:28715]
-
- * io.c (argf_getc): should return one-character string.
- [ruby-dev:28715]
-
- * io.c (rb_io_readchar): ditto.
-
-Sun Jun 11 23:20:07 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (sym_call): disallow to call private methods.
-
- * lib/optparse.rb (OptionParser::Arguable#getopts): pass self to the
- parser.
-
-Sun Jun 11 09:56:41 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.h (write): not need to define on bcc.
-
-Sun Jun 11 08:30:33 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#getopts): new methods.
-
-Sun Jun 11 07:27:11 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/rdoc/ri/ri_writer.rb: use String#ord.
-
-Sun Jun 11 04:38:20 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (sym_to_proc): imported Symbol#to_proc from ActiveSupport.
-
-Sat Jun 10 18:02:40 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/bigdecimal/lib/bigdecimal/newton.rb (Newton::nlsolve): typo
- fixed: raize -> raise. [ruby-talk:196608]
-
-Sat Jun 10 17:49:53 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_ord): new method.
-
- * parse.y (rbracket): allow optional newline before closing
- brackets.
-
-Sat Jun 10 15:12:29 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (rb_f_method_name, rb_f_callee_name): new functions.
- new global method `__method__' and `__callee__'.
-
-Sat Jun 10 10:13:13 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/getoptlong.rb (GetoptLong#set_options): receive arguments
- as Array.
-
- * lib/irb/slex.rb: use Proc#yield.
-
- * lib/rdoc/markup/simple_markup/inline.rb: follow the new behavior
- of String#[].
-
- * lib/rdoc/ri/ri_writer.rb: ditto.
-
-Sat Jun 10 08:17:23 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * math.c (log2): may be a macro.
-
- * parse.y (args, block_param, f_args): pass f_post_arg to #params.
-
- * util.c (powersOf10): constified.
-
- * ext/readline/readline.c: include extconf.h first.
-
- * ext/ripper/eventids2.c: removed tLAMBDA_ARG.
-
- * ext/tk/tcltklib.c (lib_fromUTF8_core): removed conflict.
-
- * ext/tk/tkutil/tkutil.c (cbsubst_get_subst_arg): rb_id2name() is
- defined as const now.
-
- * ext/win32ole/win32ole.c (fole_missing): ditto.
-
- * lib/mkmf.rb (create_makefile): force to create extconf header.
-
- * lib/optparse.rb (order!): use Proc#yield.
-
-Sat Jun 10 06:53:22 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (CALLARGS): remove last semicolon. C90 compiler doesn't
- allow any lines (even if they're empty) within variable
- declarations.
-
-Fri Jun 9 09:56:32 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_str_format): allow %c to print one character
- string (e.g. ?x).
-
-Thu Jun 8 14:00:02 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.[ch] (rb_w32_read, rb_w32_write): new functions.
- use recv() and send() when fd is socket. fixed: [ruby-dev:28694]
-
-Wed Jun 7 16:22:51 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile::make_tmpname): put dot between
- basename and pid. [ruby-talk:196272]
-
-Wed Jun 7 16:16:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (do_block): remove -> style block.
-
- * parse.y (parser_yylex): remove tLAMBDA_ARG.
-
-Wed Jun 7 14:51:22 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (errmap): add some winsock errors.
-
-Wed Jun 7 09:14:44 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): binding for the return event hook should have
- consistent scope. [ruby-core:07928]
-
-Tue Jun 6 23:25:49 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): return behavior should depend whether it
- is surrounded by a lambda or a mere block.
-
-Mon Jun 5 18:12:12 2006 Tanaka Akira <akr@m17n.org>
-
- * ext/socket/socket.c (sock_s_unpack_sockaddr_in): reject
- non-AF_INET/AF_INET6 sockaddr.
- (sock_s_unpack_sockaddr_un): reject non-AF_UNIX sockaddr.
- [ruby-dev:28691]
-
-Sun Jun 4 20:40:19 2006 Tanaka Akira <akr@m17n.org>
-
- * ext/socket/socket.c: fix sockaddr_un handling.
- [ruby-dev:28677]
-
-Sat Jun 3 23:53:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (formal_assign): handles post splat arguments.
-
- * eval.c (rb_call0): ditto.
-
-Sat Jun 3 13:10:41 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * st.c (strhash): use FNV-1a hash.
-
-Fri Jun 2 20:01:24 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_yylex): removed experimental ';;' terminator.
-
-Fri Jun 2 19:00:40 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: use create_header.
-
- * ext/openssl/ossl.h, ext/openssl/openssl_missing.h:
- include RUBY_EXTCONF_H.
-
-Fri Jun 2 17:16:52 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (CLEANINGS): remove extconf.h by distclean if created.
-
-Fri Jun 2 00:11:19 2006 Tanaka Akira <akr@m17n.org>
-
- * ext/socket/socket.c (s_recvfrom): alen may be zero with UNIXSocket
- too. (tested on NetBSD 3.0)
- (s_recvfrom_nonblock): extracted from sock_recvfrom_nonblock.
- (sock_recvfrom_nonblock): use s_recvfrom_nonblock.
- (ip_recvfrom_nonblock): new method: IPSocket#recvfrom_nonblock
- (unix_recvfrom_nonblock): new method: UNIXSocket#recvfrom_nonblock
- (s_accept_nonblock): extracted from sock_accept_nonblock.
- (sock_accept_nonblock): use s_accept_nonblock.
- (tcp_accept_nonblock): new method: TCPServer#accept_nonblock
- (unix_accept_nonblock): new method: UNIXServer#accept_nonblock
-
-Thu Jun 1 19:12:37 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_cmdvector): backslashes inside single-quotes
- no longer has special meanings. fixed: [ruby-list:42311]
-
-Thu Jun 1 17:55:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_node_arity): should be aware of post splat arguments.
-
- * eval.c (rb_proc_arity): ditto.
-
-Thu Jun 1 16:17:26 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_getcwd): runtime's getcwd() will not success
- if the length of the cwd is longer than MAX_PATH.
- fixed [ruby-list:42335]
-
-Thu Jun 1 16:07:48 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (f_args): syntax rule enhanced to support arguments
- after the splat.
-
- * parse.y (mlhs_basic): ditto for multiple assignments
-
- * parse.y (block_param): ditto for block parameters.
-
- * parse.y (f_post_arg): mandatory formal arguments after the splat
- argument.
-
- * parse.y (new_args_gen): generate nodes for mandatory formal
- arguments after the splat argument.
-
- * eval.c (rb_eval): dispatch mandatory formal arguments after the
- splat argument.
-
-Thu Jun 1 11:33:32 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_getcwd): set errno if not set.
- fixed [ruby-list:42346]
-
-Thu Jun 1 00:45:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (args): allow more than one splat in the argument list.
-
-Wed May 31 18:38:11 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (method_call): allow aref [] to accept all kind of
- method argument, including assocs, splat, and block argument.
-
- * eval.c (SETUP_ARGS0): prepare block argument as well.
-
-Tue May 30 18:13:53 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/mathn.rb (Integer): remove Integer#gcd2. [ruby-core:07931]
-
-Mon May 29 22:40:13 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (error_line): print receivers true/false/nil specially.
-
- * eval.c (rb_proc_yield): handles parameters in yield semantics.
-
- * eval.c (nil_yield): gives LocalJumpError to denote no block
- error.
-
- * io.c (rb_io_getc): now takes one-character string.
-
-Sat May 27 22:46:38 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): save and restore block in the current frame.
- fixed: [ruby-core:07833], [ruby-talk:191639]
-
-Sat May 27 11:29:46 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): remove extinit files if no statically linked
- extensions.
-
-Fri May 26 19:56:46 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_hash): use FNV-1a hash from Fowler/Noll/Vo
- hashing algorithm.
-
-Fri May 26 09:05:11 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.h, lib/mkmf.rb (create_header): clear command line options for
- macros moved to extconf.h.
-
- * ext/extmk.rb (extract_makefile, extmk): made RUBY_EXTCONF_H and
- EXTSTATIC permanent.
-
- * ext/{dbm,digest/*,socket,zlib}/extconf.rb: used $defs and $INCFLAGS.
-
- * {bcc32,win32,wince}/Makefile.sub (COMPILE_C, COMPILE_CXX): added
- $(INCFLAGS).
-
- * lib/mkmf.rb (configuration): add $defs unless extconf.h was created.
-
-Thu May 25 01:52:07 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (pkg_config): particular config commands support.
-
- * ext/extmk.rb: deal with $static set in extconf.rb.
-
- * mkconfig.rb: merge multiple entries to an entry with multiple lines.
-
- * lib/mkmf.rb: allow a series of commands to link.
-
- * win32/Makefile.sub: embed manifests.
-
- * win32/setup.mak: suffix OS name by runtime version.
-
-Wed May 24 23:52:11 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ac_install_sh): ignore dummy install-sh.
- [ruby-talk:193876]
-
-Wed May 24 17:55:13 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_aref): str[0] now returns 1 character string,
- instead of a fixnum. [Ruby2]
-
- * parse.y (parser_yylex): ?c now returns 1 character string,
- instead of a fixnum. [Ruby2]
-
- * string.c (rb_str_aset): no longer support fixnum insertion.
-
-Wed May 24 03:10:44 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/ssl.rb
- (OpenSSL::SSL::SocketForwarder#setsockopt,getsockopt): typo fixed.
-
-Mon May 22 16:32:03 2006 Tanaka Akira <akr@m17n.org>
-
- * rubyio.h (rb_io_set_nonblock): declared.
-
- * io.c (rb_io_set_nonblock): new function.
- (io_getpartial): nonblocking read support.
- (io_read_nonblock): new method: IO#read_nonblock.
- (io_write_nonblock): new method: IO#write_nonblock.
-
- * ext/socket/socket.c (s_accept): retry for EWOULDBLOCK.
- revert [ruby-talk:113807].
- (sock_connect_nonblock): new method: Socket#connect_nonblock.
- (sock_accept_nonblock): new method: Socket#accept_nonblock.
- (sock_recvfrom_nonblock): new method: Socket#recvfrom_nonblock.
-
- [ruby-core:7917]
-
-Mon May 22 15:57:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (umethod_bind): should not update original class.
- [ruby-dev:28636]
-
-Mon May 22 13:38:57 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ev_const_get): should support constant access from
- within instance_eval(). [ruby-dev:28327]
-
-Sun May 21 09:50:31 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * regexec.c: add STK_NULL_CHECK_END to IS_TO_VOID_TARGET().
- [ruby-list:42234]
-
-Thu May 18 22:37:20 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/config.rb (WEBrick::Config::HTTP): add new parameters,
- :InputBufferSize and :OutputBufferSize.
-
- * lib/webrick/utils.rb (WEBrick::Utils.timeout): add new timeout
- method. this implementation is expected to be compatible with
- timeout.rb and faster than timeout.rb.
-
- * lib/webrick/httprequest.rb (WEBrick::HTTPRequest#_read_data):
- Timeout.timeout is replaced by WEBrick::Utils.timeout.
-
- * lib/webrick/httprequest.rb: WEBrick::HTTPRequest::BUFSIZE is
- replaced by config[:InputBufferSize].
-
- * lib/webrick/httpresposne.rb: WEBrick::HTTPResponse::BUFSIZE is
- replaced by config[:OutputBufferSize].
-
- * lib/webrick/server.rb: get rid of unnecessary require.
-
- * test/webrick/test_utils.rb: test for WEBrick::Utils.timeout.
-
-Thu May 18 17:51:32 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_timeval): should round for usec floating
- number. [ruby-core:07896]
-
- * time.c (time_add): ditto.
-
-Thu May 18 00:42:12 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb, lib/mkmf.rb: use BUILD_FILE_SEPARATOR in Makefiles.
-
-Wed May 17 17:55:26 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (sys_warning): should not call a vararg function
- rb_sys_warning() indirectly. [ruby-core:07886]
-
-Tue May 16 17:23:19 2006 Shin-ichiro HARA <sinara@blade.nagaokaut.ac.jp>
-
- * numeric.c (flo_divmod): the first element of Float#divmod should
- be an integer. [ruby-dev:28589]
-
- * test/ruby/test_float.rb: add tests for divmod, div, modulo and remainder.
-
-Tue May 16 15:34:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_initialize): should not allow modifying literal
- regexps. frozen check moved from rb_reg_initialize_m as well.
-
-Tue May 16 09:20:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_initialize): should not modify untainted objects in
- safe levels higher than 3.
-
- * re.c (rb_memcmp): type change from char* to const void*.
-
- * dir.c (dir_close): should not close untainted dir stream.
-
- * dir.c (GetDIR): add tainted/frozen check for each dir operation.
-
-Mon May 15 21:37:12 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * re.c (rb_reg_prepare_re): don't use onig_recompile().
-
-Mon May 15 17:42:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_symbol_arg):
- typo fixed. a patch from Florian Gross <florg at florg.net>.
-
-Sat May 13 16:14:05 2006 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb (PP.mcall): new method.
- (Struct#pretty_print): call Kernel#class and Struct#members even if
- overridden.
- (Struct#pretty_print_cycle): ditto.
- [ruby-core:7865]
-
-Fri May 12 15:54:48 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (EXEC_EVENT_HOOK): trace_func may remove itself from
- event_hooks. no guarantee for arbitrary hook deletion.
- [ruby-dev:28632]
-
-Thu May 11 19:57:00 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * util.c (ruby_strtod): differ addition to minimize error.
- [ruby-dev:28619]
-
-Thu May 11 18:30:11 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_cipher.c (add_cipher_name_to_ary): should return
- value. [ruby-dev:28627]
-
-Thu May 11 18:10:43 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * util.c (ruby_strtod): should not raise ERANGE when the input
- string does not have any digits. [ruby-dev:28629]
-
-Wed May 10 23:40:21 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * oniguruma.h: Version 4.0.3
-
- * regexec.c: ditto.
-
-Mon May 8 09:10:31 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: add check for OBJ_NAME_do_all_sorted.
-
- * ext/openssl/ossl_cipher.c (ossl_s_ciphers): new method
- OpenSSL::Cipher.ciphers. it returns all the cipher names.
-
- * ext/openssl/ossl_cipher.c (ossl_cipher_init): refine warning message.
-
- * ext/openssl/lib/openssl/cipher.rb: reimplement without eval() and
- add constants AES128, AES192, AES256. [ruby-dev:28610]
-
- * ext/openssl/lib/openssl/digest.rb: reimplement without eval().
-
- * test/openssl/test_cipher.rb, test_digest: fix about reimplemented
- features.
-
- * sample/openssl/cipher.rb: rewrite all.
-
-Sun May 7 03:09:51 2006 Stephan Maka <stephan@spaceboyz.net>
-
- * lib/resolv.rb (Resolv::DNS::Requester::ConnectedUDP#initialize):
- Use AF_INET6 for nameservers containing colons.
-
-Sat May 6 23:40:03 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): should restore old ruby_frame->block.
- thanks to ts <decoux at moulon.inra.fr>. [ruby-core:07833]
- also fix [ruby-dev:28614] as well.
-
-Sat May 6 00:38:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * signal.c (trap): sig should be less then NSIG. Coverity found
- this bug. a patch from Kevin Tew <tewk at tewk.com>.
- [ruby-core:07823]
-
-Thu May 4 22:13:22 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * math.c (math_log2): add new method inspired by
- [ruby-talk:191237].
-
- * math.c (math_log): add optional base argument to Math::log().
- [ruby-talk:191308]
-
-Thu May 4 02:24:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/syck/emitter.c (syck_scan_scalar): avoid accessing
- uninitialized array element. a patch from Pat Eyler
- <rubypate at gmail.com>. [ruby-core:07809]
-
- * array.c (rb_ary_fill): initialize local variables first. a
- patch from Pat Eyler <rubypate at gmail.com>. [ruby-core:07810]
-
- * ext/syck/yaml2byte.c (syck_yaml2byte_handler): need to free
- type_tag. a patch from Pat Eyler <rubypate at gmail.com>.
- [ruby-core:07808]
-
-Wed May 3 02:12:07 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (make_hostent_internal): accept ai_family
- check from Sam Roberts <sroberts at uniserve.com>.
- [ruby-core:07691]
-
-Mon May 1 17:58:16 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (add_event_call_back): should not
- delete event handler when the event name is not entried.
-
-Mon May 1 08:32:10 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_param_ole_type): should return
- "unknown type" string when ITypeInfo::GetFuncDesc failed.
-
-Sat Apr 29 22:43:37 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_asn1.c (ossl_asn1_decode0): should initialize
- flag. [ruby-core:07785]
-
-Fri Apr 28 10:53:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * util.c (ruby_strtod): should not cut off 18 digits for no
- reason. [ruby-core:07796]
-
-Thu Apr 27 01:38:10 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_fill): internalize local variable "beg" to
- pacify Coverity. [ruby-core:07770]
-
-Wed Apr 26 16:59:24 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_unpack): now supports CRLF newlines. a patch from
- <tommy at tmtm.org>. [ruby-dev:28601]
-
-Wed Apr 26 16:55:19 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * applied code clean-up patch from Stefan Huehner
- <stefan at huehner.org>. [ruby-core:07764]
-
-Tue Apr 25 18:00:05 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (delete_slaves): maybe increment the reference
- count of a NULL Tcl_Obj [ruby-core:07759].
-
-Tue Apr 25 07:55:31 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/jcode.rb (String::tr_s): should have translated non
- squeezing character sequence (i.e. a character) as well. thanks
- to Hiroshi Ichikawa <gimite at gimite.ddo.jp> [ruby-list:42090]
-
-Fri Apr 21 15:19:13 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (lib_eventloop_ensure): avoid dereferencing
- freed pointer [ruby-core:07744] and memory leak.
-
-Fri Apr 21 12:14:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c: document update patch from Sam Roberts
- <sroberts at uniserve.com>. [ruby-core:07701]
-
-Thu Apr 20 08:43:54 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/mathn.rb (Integer): need not to remove gcd2. a patch from
- NARUSE, Yui <naruse at airemix.com>. [ruby-dev:28570]
-
-Wed Apr 19 13:55:27 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (arg): too much NEW_LIST()
-
- * eval.c (SETUP_ARGS0): remove unnecessary access to nd_alen.
-
-Wed Apr 19 11:57:04 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): use ARGSCAT for NODE_OP_ASGN1.
- [ruby-dev:28585]
-
- * parse.y (arg): use NODE_ARGSCAT for placeholder.
-
-Wed Apr 19 11:13:17 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/getoptlong.rb (GetoptLong::get): RDoc update patch from
- mathew <meta at pobox.com>. [ruby-core:07738]
-
-Wed Apr 19 10:13:27 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_const_set): raise error when no target klass is
- supplied. [ruby-dev:28582]
-
-Tue Apr 18 17:40:37 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: add a binding to a container for a slave IP.
-
- * ext/tk/lib/tk.rb: update RELEASE_DATE.
-
- * ext/tk/tcltklib.c: forget to reset a Tcl interpreter.
-
- * ext/tk/stubs.c: fix potential bugs about handling rb_argv0.
-
-Mon Apr 10 01:03:10 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * prec.c (prec_prec_f): documentation patch from
- <gerardo.santana at gmail.com>. [ruby-core:07689]
-
-Sat Apr 8 02:34:34 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_pow): second operand may be too big even if
- it's a Fixnum. [ruby-talk:187984]
-
-Sat Apr 8 02:12:38 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * README.EXT: update symbol description. [ruby-talk:188104]
-
-Sat Apr 8 18:06:28 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE_METHOD#inspect,
- WIN32OLE_PARAM#inspect.
-
- * test/win32ole/test_win32ole_method.rb: ditto.
-
- * add test/win32ole/test_win32ole_param.rb.
-
-Fri Apr 7 22:11:30 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c(foletypelib_initialize): WIN32OLE_TYPELIB.new
- accepts OLE file.
-
- * test/win32ole/test_win32ole_typelib.rb(test_initialize): ditto.
-
-Thu Apr 6 23:28:47 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * COPYING: explicitly note GPLv2. [ruby-talk:187922]
-
-Thu Apr 6 16:43:06 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * intern.h (rb_obj_instance_exec, rb_mod_module_exec): add declaration.
-
-Thu Apr 6 11:18:37 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/panedwindow.rb: lack of arguments. [ruby-core:7681]
-
-Thu Apr 6 01:04:47 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: fix SEGV when embedding to an application.
- [ruby-core:7600]
-
- * ext/tk/tcltklib.c: fix SEGV at exit. [ruby-talk:186489]
-
- * ext/tk/tkutil/tkutil.c: follow to changing specification of
- instance_eval on ruby-1.9.x.
-
- * ext/tk/lib/tk.rb: ditto.
-
- * ext/tk/lib/multi-tk.rb: ditto.
-
- * ext/tk/lib/tk.rb: remove warning about redefinition of methods.
-
- * ext/tk/lib/tk/variable.rb: remove warning about unseting Tcl
- variables.
-
-Wed Apr 5 00:22:54 2006 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb: use a subclass for instantiation except
- methods take pathname argument. suggested by Evan Phoenix.
- [ruby-core:7618]
-
-Tue Apr 4 22:15:41 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: remove some obsolete syntax rules (unparenthesized
- method calls in argument list).
-
-Sat Apr 1 15:11:27 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE_TYPE#inspect,
- WIN32OLE_VARIABLE#inspect
-
- * remove ext/win32ole/tests/testOLEVARIABLE.rb, testOLETYPE.rb
- testOLETYPELIB.rb.
-
- * testall.rb: ditto.
-
- * add test/win32ole
-
-Fri Mar 31 14:24:55 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enumerator.c (enumerator_with_index): removed suspicious return
- statement.
-
-Wed Mar 29 23:06:48 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_invoke): change the behavior of
- WIN32OLE#[], WIN32OLE#[]=. These methods invoke DISPID_VALUE.
-
- * ext/win32ole/sample/excel2.rb: ditto.
-
- * ext/win32ole/tests/testWIN32OLE.rb: ditto.
-
-Wed Mar 29 10:11:31 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (nkf_each_char_to_hex, encode_fallback_subchar,
- e2w_conv): support C90 compiler.
-
-Mon Mar 27 22:45:37 2006 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/{nkf.c, utf8tbl.c}: imported nkf 2.0.6.
- * Add --ic / --oc option and mapping tables.
- * Add fallback option.
- * Add --no-best-fit-chars option.
- * Fix some bugs.
-
- * ext/nkf/nkf.c (nkf_split_options): added for parse option string.
-
- * ext/nkf/lib/kconv.rb (Kconv.to*): add -m0.
- Note that Kconv.to* still imply -X.
-
- * ext/nkf/test.rb: Removed. Obsolete by test/nkf.
-
- * ext/.document: enabled documents in nkf and kconv
-
- * ext/nkf/nkf.c, ext/nkf/lib/kconv.rb: Add rdoc.
-
-Mon Mar 27 03:17:21 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): insecure calling should be checked for non
- NODE_SCOPE method invocations too.
-
- * eval.c (rb_alias): should preserve the current safe level as
- well as method definition.
-
-Sun Mar 26 22:02:51 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * re.c: refactoring for options.
-
- * parse.y: ditto.
-
-Fri Mar 24 21:11:02 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * re.c (match_aref): RDoc description updated.
-
- * string.c (rb_str_sub): ditto.
-
- * string.c (rb_str_gsub): ditto.
-
-Fri Mar 24 17:20:03 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (rb_f_sleep): remove RDoc description about SIGALRM
- which is not valid on the current implementation. [ruby-dev:28464]
-
-Thu Mar 23 21:40:47 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * re.c (rb_reg_regsub): prohibit \1, \2 ...\9 in replaced string
- for named regex pattern.
-
-Thu Mar 23 21:06:23 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * oniguruma.h: Version 4.0.2
-
- * regparse.c: ditto.
-
- * regcomp.c ditto.
-
- * regerror.c: ditto.
-
-Thu Mar 23 10:47:03 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (method_missing): should support argument splat in
- super. a bug in combination of super, splat and
- method_missing. [ruby-talk:185438]
-
-Thu Mar 23 00:01:32 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * re.c (rb_reg_regsub): add back reference by name \k<name> in
- replace string.
-
- * re.h: add regexp argument to rb_reg_regsub().
-
- * string.c (rb_str_sub_bang): ditto.
-
- * string.c (str_gsub): ditto.
-
-Tue Mar 21 22:14:01 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * re.c (match_alloc): initialize member regexp.
-
- * re.c (match_aref): add String and Symbol argument. [ruby-dev:28448]
-
- * re.h: add member regexp to RMatch.
-
- * gc.c (gc_mark_children): add gc_mark() to regexp member.
-
-Mon Mar 20 12:05:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in: Solaris SunPro compiler -rapth patch from
- <kuwa at labs.fujitsu.com>. [ruby-dev:28443]
-
-Mon Mar 20 11:12:38 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/win32ole/win32ole.c (folevariant_value): could not compile
- with C90 compiler.
-
-Mon Mar 20 09:40:23 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in: remove enable_rpath=no for Solaris.
- [ruby-dev:28440]
-
-Sun Mar 19 09:46:30 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_val2olevariantdata): change behavior
- of converting OLE Variant object with VT_ARRAY|VT_UI1 and Ruby
- String object.
-
- * ext/win32ole/win32ole.c (folevariant_value): ditto.
-
- * ext/win32ole/tests/testOLEVARIANT.rb: ditto.
-
-Wed Mar 15 16:51:11 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): support libraries without *.so.
-
-Wed Mar 15 16:39:29 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ssl.c, ext/openssl/ossl_nsspki.c: should use
- "rb_str_new(0, 0)" to make empty string.
-
-Sun Mar 12 17:02:10 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c(ole_val2olevariantdata): support VT_ARRAY in
- WIN32OLE_VARIANT.new().
-
- * ext/win32ole/tests/testOLEVARIANT.rb: ditto.
-
- * ext/win32ole/tests/testOLEPARAM.rb: test method name should not be
- duplicated.
-
-Sat Mar 11 14:24:06 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.1: a clarification patch from David Lutterkort
- <dlutter at redhat.com>. [ruby-core:7508]
-
-Sun Mar 5 18:40:58 2006 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: do not repeat command options.
-
-Sun Mar 5 18:35:03 2006 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (send_request_with_body): #content_type never
- return false, use #main_type instead. [ruby-core:07476]
-
-Sat Mar 4 15:26:40 2006 Tanaka Akira <akr@m17n.org>
-
- * gc.c (id2ref): fix symbol test.
-
-Sat Mar 4 01:08:07 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rdoc/ri/ri_paths.rb (RI::Paths): adding paths from rubygems
- directories. a patch from Eric Hodel <drbrain at segment7.net>.
- [ruby-core:07423]
-
-Fri Mar 3 17:59:00 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_clear_cache_by_class): clearing wrong cache.
-
-Fri Mar 3 21:22:42 2006 Tanaka Akira <akr@m17n.org>
-
- * lib/fileutils.rb (FileUtils.cp_r): implement :remove_destination
- option.
-
- * ext/extmk.rb: use :remove_destination to install extension libraries
- to avoid SEGV. [ruby-dev:28417]
-
-Fri Mar 3 14:41:04 2006 Minero Aoki <aamine@loveruby.net>
-
- * ext/dl/.cvsignore: ignore callback.h.
-
- * ext/ripper/.cvsignore: ignore eventids2table.c.
-
- * ext/socket/.cvsignore: ignore constants.h.
-
-Thu Mar 2 18:58:18 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_fd_writable): should not re-schedule output
- from KILLED thread (must be error printing).
-
-Thu Mar 2 09:12:05 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_flatten_bang): allow specifying recursion
- level. [ruby-talk:182170]
-
- * array.c (rb_ary_flatten): ditto.
-
-Thu Mar 2 08:02:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (add_heap): a heap_slots may overflow. a patch from Stefan
- Weil <weil at mail.berlios.de>.
-
-Wed Mar 1 17:13:37 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call): use separate cache for fcall/vcall
- invocation.
-
- * eval.c (rb_eval): NODE_FCALL, NODE_VCALL can call local
- functions.
-
- * eval.c (rb_mod_local): a new method to specify newly added
- visibility "local".
-
- * eval.c (search_method): search for local methods which are
- visible only from the current class.
-
- * class.c (rb_class_local_methods): a method to list local methods.
-
-Thu Mar 2 17:54:45 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * gc.c: committed magic for reducing RVALUE size on windows. (24->20byte)
- [ruby-core:7474]
-
-Thu Mar 2 14:12:26 2006 Tanaka Akira <akr@m17n.org>
-
- * gc.c: align VALUE with sizeof(RVALUE) globally.
- (is_pointer_to_heap): check alignment out of loop.
- (id2ref): avoid collision between symbols and objects.
- (rb_obj_id): ditto. moved from object.c.
- [ruby-talk:178364] [ruby-core:7305]
-
-Thu Mar 2 12:55:16 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.c (filetime_to_unixtime): should set tm_isdst to -1.
- stat() didn't treat daylight saving time property on WinNT.
- [ruby-talk:182100]
-
-Wed Mar 1 00:15:51 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/rdoc/parsers/parse_rb.rb (read_escape): could not handle /\^/.
- merged Mr. Ishizuka's lib/irb/ruby-lex.rb 's patch rev 1.29.
- [ruby-talk:181631] [ruby-dev:28404]
-
-Tue Feb 28 19:32:14 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (Init_Object): add BasicObject class as a top level
- BlankSlate class.
-
-Mon Feb 27 00:19:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h (SYM2ID): should not cast to signed long.
- [ruby-core:07414]
-
-Fri Feb 24 20:21:38 2006 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/drb/drbtest.rb (add_service_command): quote pathnames in the
- server's command line for space contained directory names.
- Thanks, arton. [ruby-dev:28386]
-
-Fri Feb 24 12:10:07 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * instruby.rb: install *.exe.manifest and *.dll.manifest if exist.
- It's for VC++8.
-
-Fri Feb 24 11:17:45 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (NtInitialize): need to set a handler for VC++8.
-
-Thu Feb 23 22:39:59 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * bcc32/Makefile.sub: use borlndmm.dll if possible. bcc32's RTL internal
- memory manager cannot handle large memory block properly.
- ex: 10000.times { "" << "." * 529671; GC.start } # crash
- [ruby-dev:28230]
-
-Thu Feb 23 13:23:03 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * eval.c (SETUP_ARGS0): fixed memory corruption. [ruby-dev:28360]
-
-Wed Feb 22 21:16:55 2006 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Pathname#each_filename): use split_names properly.
-
-Wed Feb 22 16:24:05 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/webrick/test_cgi.rb: should support platforms which search
- library path from the interpreter's path.
- And, support test without install incidentally.
-
-Wed Feb 22 14:21:03 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bignorm): x may not be a bignum. [ruby-dev:28367]
-
-Wed Feb 22 09:22:40 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_alloc): add proper check for creation of a lambda
- without a block.
-
-Tue Feb 21 02:07:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (f_arglist): should set command_start = Qtrue for
- command body. [ruby-talk:180648]
-
-Mon Feb 20 22:30:17 2006 Tanaka Akira <akr@m17n.org>
-
- * mkconfig.rb: alias Config to RbConfig for compatibility.
-
-Mon Feb 20 18:21:41 2006 Tanaka Akira <akr@m17n.org>
-
- * io.c (rb_io_reopen): flush before reopening a file.
- reported by Mathieu Bouchard. [ruby-core:7396]
-
-Mon Feb 20 17:29:50 2006 Tanaka Akira <akr@m17n.org>
-
- * mkconfig.rb: generate RbConfig instead of Config.
-
- * instruby.rb, rubytest.rb, runruby.rb, bcc32/Makefile.sub,
- ext/extmk.rb, ext/dl/extconf.rb, ext/iconv/charset_alias.rb,
- lib/mkmf.rb, lib/rdoc/ri/ri_paths.rb,
- lib/webrick/httpservlet/cgihandler.rb,
- test/dbm/test_dbm.rb, test/gdbm/test_gdbm.rb,
- test/ruby/envutil.rb, test/soap/calc/test_calc_cgi.rb,
- test/soap/header/test_authheader_cgi.rb, test/soap/ssl/test_ssl.rb,
- win32/mkexports.rb, win32/resource.rb: Use RbConfig instead of
- Config.
-
-Mon Feb 20 13:46:19 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/find.rb: should raise ENOENT if root entry does not exist,
- without opening it. [ruby-dev:28345]
-
-Mon Feb 20 12:27:53 2006 Kent Sibilev <ksruby@gmail.com>
-
- * lib/rational.rb (Integer::gcd): small typo fix.
- [ruby-core:07395]
-
-Mon Feb 20 10:03:59 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_const_get_0): Object should have been the lowest
- in const lookup precedence. [ruby-dev:28343]
-
-Mon Feb 20 09:17:11 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator): should not delegate "funcall".
-
-Mon Feb 20 09:13:42 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/webrick/httpservlet/cgihandler.rb (WEBrick::HTTPServlet::CGIHandler):
- qualify the access for Config constant. [ruby-dev:28338]
-
- * lib/resolv.rb (Resolv::DNS::Resource::IN::A): qualify
- ClassValue. [ruby-dev:28338]
-
-Mon Feb 20 01:05:27 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rational.rb (Integer::gcd): replaced by gcd4 in
- [ruby-core:07390]. [ruby-core:07377]
-
-Mon Feb 20 00:57:02 2006 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl.h (OSSL_Debug): should not use __func__.
- [ruby-dev:28339]
-
-Mon Feb 20 00:13:49 2006 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb: add :ssl_verify_mode option.
- suggested by Will Glynn.
-
- * lib/open-uri.rb: add :ssl_ca_cert option.
-
-Sun Feb 19 04:46:29 2006 Guy Decoux <ts@moulon.inra.fr>
-
- * eval.c: initial value for block_unique must be 1.
- [ruby-talk:180420]
-
-Sat Feb 18 23:58:26 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/tracer.rb (Tracer::Tracer.add_filter): turn on tracer mode
- only when caller() level size is one. [ruby-core:07389]
-
- * lib/rdoc/parsers/parse_rb.rb: need not to require "tracer".
- [ruby-core:07389]
-
- * sample/rtags.rb: ditto.
-
-Sat Feb 18 21:16:27 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_obj_instance_eval): RDoc description updated. a
- patch from Ozgur Murat Homurlu <ozgurmurath at gmail.com>.
- [ruby-core:07381]
-
-Sat Feb 18 01:01:17 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_const_get_0): skip ruby_wrapper in const search
- to give it lower priority (just above Object). need not to
- change rb_const_defined_0() since it's only a precedence matter;
- they are defined anyway.
-
-Sat Feb 18 00:22:39 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/tracer.rb: merged a minor clarification patch from Daniel
- Berger <Daniel.Berger at qwest.com>. [ruby-core:07376]
-
-Fri Feb 17 17:30:20 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ev_const_get): simplified using rb_const_get_fallback().
-
- * eval.c (ev_const_defined): adopt to ev_const_get() using
- rb_const_defined_fallback().
-
- * variable.c (rb_const_get_fallback): new function to implement
- constant search.
-
- * variable.c (rb_const_defined_fallback): new function to
- implement constant definition check.
-
- * variable.c (rb_const_get_0): adopt to new behavior. constants
- are looked up in the order of: current class, super classes (but
- Object), lexically external classes/modules, and Object.
-
- * variable.c (rb_const_defined_0): ditto.
-
-Fri Feb 17 11:20:53 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * util.c (ruby_strtod): Float("1e") should fail. [ruby-core:7330]
-
- * pack.c (EXTEND32): unpack("l") did not work where sizeof(long) != 4.
- [ruby-talk:180024]
-
- * pack.c (pack_unpack): fixed integer overflow on template "w".
- [ruby-talk:180126]
-
-Fri Feb 17 09:39:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_wait_for): sleep should always sleep for
- specified amount of time. [ruby-talk:180067]
-
-Wed Feb 15 16:52:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): NODE_OP_ASGN1 should allow splat in its
- argument list. [ruby-core:07366]
-
- * parse.y (arg): avoid unnecessary extra argument.
- [ruby-core:07366]
-
- * eval.c (rb_eval): honor visibility on OP_ASGN1 and
- OP_ASGN2. [ruby-core:07366]
-
-Wed Feb 15 15:20:23 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (error_line): remove void control path. [ruby-dev:28335]
-
-Wed Feb 15 10:09:51 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (yield_under_i): should not pass self as an argument to
- the block for instance_eval. [ruby-core:07364]
-
-Wed Feb 15 09:20:35 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_obj_instance_eval): should be no singleton classes for
- true, false, and nil. [ruby-dev:28186]
-
-Tue Feb 14 20:26:00 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enumerator.c (enumerator_each): return self if no block is
- given. [yarv-dev:882]
-
-Tue Feb 14 18:48:33 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (DMETHOD_P): accessing wrong frame. [ruby-dev:28181]
-
- * eval.c (proc_invoke): preserve FRAME_DMETH flag.
-
-Tue Feb 14 15:15:22 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/zlib/zlib.c: suppress warning on test/zlib. [ruby-dev:28323]
-
-Tue Feb 14 13:47:22 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_utime): drop read-only attribute before
- changing file time.
-
-Tue Feb 14 13:38:01 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.h): should define HAVE_LONG_LONG with
- VC++8.
-
-Tue Feb 14 11:42:38 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * time.c (search_time_t): support non 32bit time_t environments.
-
- * win32/Makefile.sub (config.h): VC++8 has ``long long'' type.
-
- * win32/Makefile.sub (config.h): VC++8's time_t is 64bit value.
-
-Mon Feb 13 18:01:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (copy_node_scope): remove duplicated semicolons at end.
- a patch from KIMURA Koichi <kimura.koichi at canon.co.jp>.
- [ruby-dev:28332]
-
- * eval.c (VIS_MODE): remove unnecessary argument.
- [ruby-dev:28332]
-
-Mon Feb 13 13:49:48 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_parse_string): mention "regexp" in a error
- message. a patch from Mauricio Fernandez <mfp at acm.org>
- [ruby-core:07340]
-
-Mon Feb 13 00:01:32 2006 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * oniguruma.h: Version 4.0.1
-
- * regparse.c (onig_free_shared_cclass_table): fix memory leaks.
-
- * regcomp.c (optimize_node_left): change from IS_POSIXLINE() to IS_MULTILINE().
-
- * regint.h: rename ANCHOR_ANYCHAR_STAR_PL to ANCHOR_ANYCHAR_STAR_ML.
-
- * regparse.h: ditto.
-
- * regexec.c: ditto.
-
-Sat Feb 11 21:57:29 2006 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE.create_guid.
-
- * ext/win32ole/tests/testWIN32OLE.rb: ditto.
-
-Sat Feb 11 01:57:44 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_autoload): check if ruby_cbase is nil (during
- instance_eval for objects cannot have singleton classes,
- e.g. fixnums and symbols). [ruby-dev:28178]
-
-Fri Feb 10 12:31:05 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): should support NODE_ZSUPER in NODE_ITER.
- [ruby-dev:28326]
-
- * eval.c (ZSUPER_ARGS): support macro.
-
-Wed Feb 8 10:26:06 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_gc_call_finalizer_at_exit): turn on during_gc while
- invoking finalizers.
-
- * gc.c (rb_gc_finalize_deferred): ditto.
-
-Tue Feb 7 23:03:13 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/zlib/zlib.c: should not access ruby objects in finalizer.
- [ruby-dev:28286]
-
-Tue Feb 7 18:42:00 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_write_error2): use fwrite(3) if rb_stderr is not
- updated or is already freed. [ruby-dev:28313]
-
-Mon Feb 6 16:02:51 2006 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * file.c (rb_thread_flock): ERROR_NOT_LOCKED is not an error on Cygwin.
- In such situation, flock() should return 0.
-
-Mon Feb 6 14:36:29 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (error_line): include the class name of a surrounding
- method in error position description.
-
-Mon Feb 6 00:14:57 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_find_index): a new method Enumerable#find_index.
- [ruby-talk:178495]
-
-Sun Feb 5 23:29:31 2006 Tanaka Akira <akr@m17n.org>
-
- * ruby.h (struct RStruct): embed 3 or less elements structs.
- (RSTRUCT_LEN): defined for accessing struct members.
- (RSTRUCT_PTR): ditto.
-
- * struct.c: use RSTRUCT_LEN and RSTRUCT_PTR.
- (struct_alloc): allocate small structs in embedded format.
- (rb_struct_init_copy): ditto.
-
- * gc.c (gc_mark_children): use RSTRUCT_LEN and RSTRUCT_PTR.
- (obj_free): ditto.
-
- * marshal.c (w_object): use RSTRUCT_LEN and RSTRUCT_PTR.
-
-Sun Feb 5 21:01:49 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * numeric.c (fix_to_s): removed workaround for radix 2. Historically,
- rb_fix2str could only handle radix 8, 10, 16. (Rev1.37) But for now,
- it can handle radix 2..36. [ruby-Bugs#3438] [ruby-core:7300]
-
-Sun Feb 5 18:49:00 2006 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (add_field, get_fields): keep 1.8.2
- compatibility. This patch is contributed by Rob Pitt.
-
-Sun Feb 5 16:33:50 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/mkmf.rb (create_makefile): Kernel#sub! was removed on HEAD.
-
-Sun Feb 5 14:26:54 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/pstore.rb: should return default value if name is not found.
- [ruby-core:7304]
-
- * lib/pstore.rb: should raise PStore::Error if not in transaction.
-
-Sat Feb 4 22:51:43 2006 Tanaka Akira <akr@m17n.org>
-
- * eval.c: apply the FreeBSD getcontext/setcontext workaround
- only before FreeBSD 7-CURRENT.
-
-Sat Feb 4 21:10:06 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (LK_ERR): ERROR_NOT_LOCKED is not an error.
- In such situation, flock() should return 0.
-
-Sat Feb 4 15:52:56 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * numeric.c (fix_to_s): (2**32).to_s(2) fails with exception where
- sizeof(int) == 4 < sizeof(long). [ruby-core:7300]
-
-Sat Feb 4 15:02:05 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * oniguruma.h: merge Oniguruma 4.0.0 [ruby-dev:28290]
-
-Fri Feb 3 19:25:53 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ruby.h: fixed prototype.
-
- * ext/syck/rubyext.c: defined symbol ID as global variable as others.
-
-Fri Feb 3 17:57:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c: unify ruby_class (for method definition) and ruby_cbase
- (for constant reference).
-
-Fri Feb 3 15:02:10 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/syck/syck.c (syck_move_tokens): should reset p->cursor or etc
- even if skip == 0. This causes buffer overrun.
- (ex: YAML.load('--- "..' + '\x82\xA0' * 511 + '"'))
-
-Fri Feb 3 00:01:31 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/syck/emitter.c (syck_emitter_write): should not set '\0' on
- emitter's marker. if marker points to the end of buffer, this is
- buffer overrun. (ex: YAML.dump("." * 12288))
-
-Thu Feb 2 17:13:01 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser#get_tk): added
- support of :'string' style Symbol.
-
-Thu Feb 2 16:01:24 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): use TMP_ALLOC() instead of allocating
- a temporary array object.
-
- * eval.c (eval): need not to protect $SAFE value.
- [ruby-core:07177]
-
- * error.c (Init_Exception): change NameError to direct subclass of
- Exception so that default rescue do not handle it silently.
-
-Thu Feb 2 14:45:53 2006 Ville Mattila <ville.mattila@stonesoft.com>
-
- * configure.in: The isinf is not recognized by autoconf
- library guesser on solaris 10. [ruby-core:7138]
-
-Wed Feb 1 22:01:47 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * configure.in, hash.c (ruby_setenv): use setenv(3) and unsetenv(3)
- where they are supported. modifying environ variable seems to
- segfault solaris 10. [ruby-core:7276] [ruby-dev:28270]
-
- * ruby.c (set_arg0): if use setenv(3), environ space cannot be used
- for altering argv[0].
-
-Tue Jan 31 14:46:28 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (rb_struct_select): update RDoc description.
- [ruby-core:7254]
-
-Tue Jan 31 11:58:51 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: add MultiTkIp#eval and bg_eval.
-
- * ext/tk/lib/tk/namespace.rb: TkNamespace#eval was enbugged at the
- last commit. Now it will return a proper object.
-
-Tue Jan 31 08:07:02 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (int_upto): return an enumerator if no block is
- attached to the method.
-
- * numeric.c (int_downto): ditto.
-
- * numeric.c (int_dotimes): ditto.
-
- * enum.c (enum_first): new method Enumerable#first to take first n
- elements from an enumerable.
-
- * enum.c (enum_group_by): new method Enumerable#group_by that
- groups enumerable values according to their block values.
-
-Tue Jan 31 00:08:22 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/syck/rubyext.c (syck_resolver_transfer): workaround for SEGV.
- ex: ruby -ryaml -e 'YAML.load("!map:B {}")' [ruby-core:7217]
-
-Sat Jan 28 07:49:30 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/rdoc/usage.rb: support "a:0:33" style caller[-1]. In this case
- file name is "a:0". I don't know this really happens though...
- [ruby-Bugs:3344]
-
-Thu Jan 26 15:55:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c: turn on do_not_reverse_lookup by default.
-
-Wed Jan 25 22:29:04 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, dln.c, file.c, intern.h, missing.h (eaccess): use
- system routine if provided. fixed: [ruby-core:07195]
-
-Sun Jan 22 23:27:13 2006 Go Noguchi <gonoguti@yahoo.co.jp>
-
- * lib/test/unit/autorunner.rb (process_args): ignore arguments after
- '--' so that test scripts can handle them. fixed: [ruby-dev:28258]
-
-Sun Jan 22 22:09:52 2006 Tanaka Akira <akr@m17n.org>
-
- * eval.c (POST_GETCONTEXT): define separately from PRE_GETCONTEXT on
- IA64 to avoid reusing variable address.
-
-Sun Jan 22 20:03:35 2006 Tanaka Akira <akr@m17n.org>
-
- * eval.c (ruby_setjmp): define PRE_GETCONTEXT and POST_GETCONTEXT
- instead of FUNCTION_CALL_MAY_RETURN_TWICE.
- define PRE_GETCONTEXT to clear carry flag for workaround of
- FreeBSD/i386 getcontext/setcontext bug.
- [ruby-dev:28263]
-
-Thu Jan 19 22:19:18 2006 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (mv): should remove file after copying.
- [ruby-dev:28223]
-
-Wed Jan 18 23:37:06 2006 Tanaka Akira <akr@m17n.org>
-
- * eval.c (FUNCTION_CALL_MAY_RETURN_TWICE): don't clobber %l7 of SPARC
- if enable-shared.
- (ruby_setjmp): call FUNCTION_CALL_MAY_RETURN_TWICE after getcontext
- too.
- reported by Pav Lucistnik and Marius Strobl.
- http://lists.freebsd.org/pipermail/freebsd-sparc64/2006-January/003739.html
-
-Tue Jan 17 23:59:56 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (rb_mod_const_get, rb_mod_const_defined): added optional
- flag to search ancestors, which is defaulted to true.
- fixed: [ruby-talk:175899]
-
- * eval.c (rb_mod_method_defined): ditto.
-
-Tue Jan 17 11:31:47 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/setup.mak (MAKE): workaround for nmake 8.
-
-Tue Jan 17 11:06:19 2006 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub: invoke .bat via shell. workaround for nmake 8.
-
-Mon Jan 16 10:13:38 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/syck/emitter.c (syck_emit_seq, syck_emit_map, syck_emit_item):
- should output complex key mark even if map's key is empty seq/map.
- [ruby-core:7129]
-
-Sat Jan 14 03:38:54 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * file.c (rb_file_s_chmod): avoid warning where sizeof(int) !=
- sizeof(void*).
-
-Fri Jan 13 19:26:15 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/rdoc/diagram.rb:
- - properly quote bare element attributes
- - terminates dangling elements (e.g. <img>, <br>, <link>, etc)
- - converts "CVS" to the more HTML-friendly acronym element
- - adds missing type attributes to style elements
-
- based on Paul Duncan's patch <pabs@pablotron.org> [ruby-core:7028]
-
- * lib/rdoc/generators/html_generator.rb: ditto.
- * lib/rdoc/generators/template/html/hefss.rb: ditto.
- * lib/rdoc/generators/template/html/html.rb: ditto.
- * lib/rdoc/generators/template/html/kilmer.rb: ditto.
-
-Thu Jan 12 11:53:08 2006 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/tkballoonhelp.rb: [bug fix] couldn't add to a widget
- which is constructed with TkComposite module.
- [new feature] support 'command' option which is called just before
- popping up the balloon help.
-
-Wed Jan 11 00:12:29 2006 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/erb.rb (ERB::Compiler): add instance variable @insert_cmd to
- change <%='s behavior.
-
-Tue Jan 10 19:42:33 2006 Tanaka Akira <akr@m17n.org>
-
- * gc.c (garbage_collect): mark ruby_current_node.
- if an exception is raised in a finalizer written in C called by
- rb_gc_call_finalizer_at_exit, ruby_set_current_source may use
- collected ruby_current_node and mark_source_filename may corrupt
- memory.
-
-Tue Jan 10 13:30:34 2006 akira yamada <akira@ruby-lang.org>
-
- * ext/syck/rubyext.c (syck_resolver_transfer): should be able to load
- !ruby/object:Bignum syntax 1.8.3 dumped. [ruby-core:6159]
-
-Tue Jan 10 12:47:41 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/yaml/rubytypes.rb (Fixnum): Bignum could not be loaded in
- ruby 1.8.3/1.8.4. [ruby-core:6115]
-
- * lib/yaml/rubytypes.rb (Numeric): Subclass of Numeric could not
- be dumped properly. [ruby-core:7047]
-
-Tue Jan 10 12:00:48 2006 Aaron Schrab <aaron @nospam@ schrab.com>
-
- * lib/yaml/rubytypes.rb (Symbol#yaml_new): YAML loading of quoted
- Symbols broken. [ruby-Bugs:2535]
-
-Tue Jan 10 07:26:52 2006 Tanaka Akira <akr@m17n.org>
-
- * gc.c (gc_stress): renamed from always_gc and enabled by default.
- (gc_stress_get): new function for GC.stress.
- (gc_stress_set): new function for GC.stress=.
-
-Mon Jan 9 19:58:56 2006 arton <artonx@yahoo.co.jp>
-
- * ext/zlib/extconf.rb: zlib compiled DLL version 1.2.3 distributed by
- http://www.zlib.net/ has zdll.lib. [ruby-dev:28209]
-
-Mon Jan 9 14:25:00 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/Makefile.sub (OPTFLAGS): I have experienced trouble on y- flag,
- (VisualC++6) so use -O2b2xg- if $(MSC_VER) < 1400. [ruby-core:7040]
-
-Mon Jan 9 14:25:00 2006 Kero van Gelder <rubyforge @nospam@ kero.tmfweb.nl>
-
- * lib/webrick/httpservlet/filehandler.rb: fixed typo. [ruby-core:7075]
-
-Sun Jan 8 14:15:27 2006 Tanaka Akira <akr@m17n.org>
-
- * eval.c (GCC_VERSION_BEFORE): check __INTEL_COMPILER.
- Intel C++ Compiler defines __GNUC__.
- http://www.intel.com/software/products/compilers/clin/docs/ug_cpp/lin1077.htm
-
-Sat Jan 7 15:40:07 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (singleton): get rid of segfault on syntax error.
- fixed: [ruby-core:07070]
-
-Sat Jan 7 06:24:18 2006 Tanaka Akira <akr@m17n.org>
-
- * eval.c (rb_fd_isset): compare the result of FD_ISSET with 0 to
- avoid FreeBSD bug. FreeBSD defines FD_ISSET as just a bitmap of
- unsigned long. So returning the value from rb_fd_isset discards
- upper 32bits on LP64 environment.
- http://www.freebsd.org/cgi/query-pr.cgi?pr=ia64/91421
-
-Fri Jan 6 02:20:18 2006 Tanaka Akira <akr@m17n.org>
-
- * configure.in: don't force getcontext on IA64.
-
- * eval.c (ruby_setjmp): add an argument for just before getcontext.
- (THREAD_SAVE_CONTEXT): call rb_thread_save_context just
- before getcontext.
- [ruby-dev:28205]
-
-Sun Jan 1 15:28:46 2006 Tanaka Akira <akr@m17n.org>
-
- * missing.h (isinf): avoid macro expansion
- "extern int isinf(double);" to
- "extern int ((sizeof(double)==sizeof(float))?_Isinff(double):_Isinf(double));" on
- HP-UX.
-
-Sun Jan 1 14:42:54 2006 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.c (rb_w32_seekdir): should not segfault even if passed
- the location which rb_w32_telldir didn't return. (and should change
- `bits' position) [ruby-core:7035]
-
- * win32/dir.h: ditto. (stores `loc' instead of `bitpos')
-
- * test/ruby/test_dir.rb: added.
-
-Sat Dec 31 22:57:00 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_save_context): should not recycle scope object used
- in a thread. fixed: [ruby-dev:28177]
-
-Sat Dec 31 19:50:38 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/syck/rubyext.c: attribute name was truncated with Rev1.64.
-
-Sat Dec 31 11:53:16 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/generator.rb: (Generator#initialize): should kill @loop_thread
- before starting new thread. (occurs when called via Generator#rewind)
- [ruby-dev:28184]
-
-Fri Dec 30 18:22:42 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (garbage_collect): mark objects referred from aborting threads.
- [ruby-dev:28190]
-
- * win32/Makefile.sub: VC++8 support.
-
-Fri Dec 30 15:17:35 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/generator.rb (Generator#initialize): ensured to stop @loop_thread.
- Mr. Tanaka pointed out one Thread.pass is not enough. [ruby-dev:28185]
-
-Fri Dec 30 12:20:57 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/generator.rb (Generator#initialize): fixed dead lock. this occurred
- when end? was called before @loop_thread was stopped. [ruby-core:7029]
-
-Fri Dec 30 01:04:52 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/generator.rb: should work with another thread. (more robust code)
- [ruby-dev:28177]
-
-Thu Dec 29 23:59:37 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_gc_mark_threads): keep unmarked threads which won't wake
- up alone, and mark threads in the loading table. [ruby-dev:28154]
-
- * eval.c (rb_gc_abort_threads), gc.c (gc_sweep): kill unmarked
- threads. [ruby-dev:28172]
-
-Thu Dec 29 17:02:07 2005 Tanaka Akira <akr@m17n.org>
-
- * test/ruby/envutil.rb (EnvUtil.rubybin): search "ruby" instead of
- "miniruby". [ruby-dev:28140]
-
-Thu Dec 29 14:35:10 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_mod_define_method): should save safe_level in the
- proc object. [ruby-dev:28146]
-
-Thu Dec 29 11:22:34 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/generator.rb: reimplemented Generator class with Thread instead of
- callcc, in order to fix memory leak. [ruby-dev:28142]
-
-Wed Dec 28 14:10:05 2005 Tanaka Akira <akr@m17n.org>
-
- * ia64.s: remove .pred.safe_across_calls directive.
- reported by WATANABE Tetsuya. [ruby-dev:28141]
-
-Wed Dec 28 01:32:39 2005 Tanaka Akira <akr@m17n.org>
-
- * eval.c (struct thread): add bstr_max.
- (rb_thread_save_context): use realloc instead of REALLOC_N
- to avoid GC.
-
-Tue Dec 27 23:59:53 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (CompletingHash#match): fix for 1.9.
-
-Tue Dec 27 16:59:52 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/drb/drbtest.rb (DRbService::self.ext_service): increase
- timeout limit. a patch from Kazuhiro NISHIYAMA
- <zn at mbf.nifty.com>. [ruby-dev:28132]
-
-Tue Dec 27 14:17:55 2005 Tanaka Akira <akr@m17n.org>
-
- * configure.in: define IA64 for portability. (HP aC++/ANSI C doesn't
- define __ia64__.)
- don't check libunwind stuff.
- check __libc_ia64_register_backing_store_base.
-
- * defines.h: declare rb_ia64_bsp and rb_ia64_flushrs.
- (flush_register_windows): call rb_ia64_flushrs on IA64.
-
- * ia64.s: new file for IA64.
- it is separated from C program files because
- Intel C++ Compiler for IA64 doesn't support inline assembly.
-
- * common.mk (ia64.$(OBJEXT)): new target.
-
- * ruby.h (RUBY_INIT_STACK): defined.
- (ruby_init_stack): declared for RUBY_INIT_STACK.
-
- * main.c (main): precedes RUBY_INIT_STACK before ruby_init.
-
- * gc.c (rb_gc_register_stack_start): new global variable on IA64.
- (garbage_collect): simplify register stack marking code.
- don't use libunwind.
- (Init_stack): initialize rb_gc_register_stack_start.
- (ruby_init_stack): new function for RUBY_INIT_STACK.
-
- * eval.c (struct thread): add bstr_pos member for original position of
- register stack.
- (rb_thread_save_context): simplify register stack saving code.
- don't use libunwind.
- (rb_thread_restore_context_0): new function. moved from
- rb_thread_restore_context except the stack position checking code.
- don't use libunwind for IA64 register stack.
- (register_stack_extend): new function.
- (stack_extend): make it self-recursive with
- the stack position checking code in old rb_thread_restore_context.
- (rb_thread_restore_context): just call stack_extend.
- (flush_register_windows): removed.
-
- [ruby-dev:28127]
-
-Tue Dec 27 14:09:39 2005 Minero Aoki <aamine@loveruby.net>
-
- * process.c: new method Process.exec. [ruby-dev:28107]
-
-Tue Dec 27 08:22:15 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLSocket#post_connection_check):
- treat wildcard character in commonName. [ruby-dev:28121]
-
-Mon Dec 26 08:50:36 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ev_const_get): fixed a bug in constant reference during
- instance_eval. [yarv-dev:707]
-
- * eval.c (ev_const_defined): ditto.
-
- * lib/yaml.rb (YAML::add_domain_type): typo fixed. a patch from
- Joel VanderWerf <vjoel at path.berkeley.edu>.
- [ruby-talk:165285] [ruby-core:6995]
-
-Fri Dec 23 10:30:23 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/digest/sha2/sha2.c (ULL): support AIX C. a patch from
- Kailden <kailden at gmail.com>. [ruby-core:06984]
-
-Wed Dec 21 16:47:35 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * file.c (w32_io_info): should return handle because FileIndex is
- valid only while file is open. [ruby-dev:28088]
-
-Wed Dec 21 12:12:21 2005 Tanaka Akira <akr@m17n.org>
-
- * test/pathname/test_pathname.rb (test_kernel_open): use
- File.identical?.
- [ruby-talk:171804]
-
-Tue Dec 20 22:41:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (eval_under_i): evaluate source in caller's frame.
- [ruby-dev:28076]
-
-Tue Dec 20 12:53:23 2005 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/rubyext.c (syck_emitter_reset): to ensure compatibility
- with previous Ruby versions, documents are no longer headless.
-
-Tue Dec 20 12:33:01 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/syck/rubyext.c (syck_node_transform): ruby object holding
- explicitly freed SyckNode caused SEGV. [ruby-dev:28067]
-
- ... I think syck GC problem was solved now!
-
-Tue Dec 20 01:46:48 2005 Tanaka Akira <akr@m17n.org>
-
- * io.c (rb_f_backquote): fix a GC problem on
- IA64 with gcc 4.0.3 20051216 (prerelease) -O3.
-
-Mon Dec 19 23:32:39 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (XCFLAGS): separated as well as win32/Makefile.sub.
-
- * main.c (always_gc): dllimport is required for VC to import a DLL
- symbol. fixed: [ruby-dev:28051]
-
- * parse.y (rb_symname_p): fixed wrong validation. [ruby-dev:28047]
-
-Mon Dec 19 23:09:24 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * st.c: uses malloc instead of xmalloc to avoid GC. syck uses st_insert
- in gram.c to insert node from rb_syck_bad_anchor_handler into
- SyckParser's hash table. if GC occurs in st_insert, it's not under
- SyckParser's mark system yet. so RString can be released wrongly.
-
- * ext/syck/syck.h (S_FREE): small hack. no need to check if pointer is
- NULL or not before S_FREE.
-
- * ext/syck/rubyext.c (syck_parser_assign_io): rb_check_string_type can
- return new RString. if so, it becomes unreachable from GC after
- returns syck_parser_assign_io, and can be freed by GC. (dangling
- in syck io system) so extends its life time till syck_parse is called.
-
- * ext/syck/rubyext.c (syck_parser_s_alloc): always allocates bonus,
- so no need to check if NULL, and "volatile VALUE hash"
- is not needed. (bonus->port was not protected in syck_emitter_reset)
-
- * ext/syck/rubyext.c (syck_mark_parser): ditto.
-
- * ext/syck/rubyext.c (syck_parser_load): ditto.
-
- * ext/syck/rubyext.c (syck_parser_load_documents): ditto.
-
- * ext/syck/rubyext.c (syck_emitter_s_alloc): ditto.
-
- * ext/syck/rubyext.c (syck_mark_emitter): ditto.
-
- * ext/syck/rubyext.c (syck_emitter_reset): ditto.
-
- * ext/syck/rubyext.c (syck_scalar_value_set): "should set newly
- allocated memory instead of RString's internal storage" stuff again.
- by this, should call syck_free_node instead of rb_syck_free_node.
-
- * ext/syck/rubyext.c (syck_node_type_id_set): ditto.
-
- ... I believe syck GC problem was solved by this.
-
-Mon Dec 19 12:20:59 2005 Tanaka Akira <akr@m17n.org>
-
- * eval.c (FUNCTION_CALL_MAY_RETURN_TWICE): activate only
- before gcc 4.0.3 on SPARC and IA64.
-
-Mon Dec 19 11:37:47 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/syck/rubyext.c: sorry, I reverted my "should set newly
- allocated memory instead of RString's internal storage" stuff.
- node allocated in rubyext.c seems to be freed by rb_syck_free_node
- not syck_free_node, and it won't free data.str->ptr and type_id.
-
- (I still think this is unsafe because RString(foo)->ptr becomes
- dangling pointer when RString is modified or freed, but anyway
- I misunderstood, so go back to original code for now)
-
-Sat Dec 17 21:50:41 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/syck/rubyext.c (syck_emitter_reset): should initialize
- emitter->bonus->oid. otherwise rb_gc_mark crashes.
-
- * ext/syck/rubyext.c (syck_mark_parser): should mark anchor nodes
- because they hold ruby objects. (ie: rb_syck_bad_anchor_handler)
-
-Sat Dec 17 11:00:17 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/syck/rubyext.c (rb_syck_compile): avoid potential memory
- leak.
-
- * ext/syck/rubyext.c (syck_set_ivars): avoid potential memory
- leak by explicit symbol allocation.
-
-Sat Dec 17 03:57:01 2005 Tanaka Akira <akr@m17n.org>
-
- * bignum.c (rb_big_rshift): fix a GC problem on
- IA64 with gcc 4.0.3 20051216 (prerelease).
-
-Sat Dec 17 03:30:23 2005 Tanaka Akira <akr@m17n.org>
-
- * eval.c (bmcall): fix a GC problem by tail call on
- IA64 with gcc 4.0.3 20051216 (prerelease).
-
-Fri Dec 16 17:53:45 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/syck/rubyext.c (rb_syck_compile): fixed memory leak.
-
- * ext/syck/rubyext.c: should protect global variable from GC.
-
-Fri Dec 16 11:44:43 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/syck/rubyext.c (syck_resolver_tagurize): fixed memory leak.
-
- * ext/syck/rubyext.c (syck_node_type_id_set): should set newly
- allocated memory instead of RString's internal storage.
-
- * ext/syck/rubyext.c (syck_scalar_value_set): ditto.
-
- ... these fixes won't fix [ruby-dev:27839]. more work is needed.
-
-Fri Dec 16 04:38:55 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator::method_missing): should delegate
- block as well.
-
-Thu Dec 15 19:57:12 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::QueryExtension::MorphingBody): fix criteria to
- use Tempfile. A fix from Zev Blut <rubyzbibd at ubit.com>.
- [ruby-core:06076]
-
- * string.c: remove global functions work on $_.
-
-Thu Dec 15 12:35:14 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/tmpdir.rb: merged RDoc patch from Eric Hodel <drbrain at
- segment7.net>. [ruby-core:06894]
-
-Thu Dec 15 01:33:31 2005 Tanaka Akira <akr@m17n.org>
-
- * ext/zlib/zlib.c (zstream_run): fix a GC problem by tail call on
- x86_64 with gcc 4.0.3 20051111 (prerelease) (Debian 4.0.2-4)
-
-Wed Dec 14 23:50:20 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/parsers/parse_c.rb (find_class_comment): fix for class
- document with prototypes. [ruby-core:06863]
-
-Wed Dec 14 23:39:53 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (has_magic): glob names contain alphabets to enable case fold
- search. [ruby-dev:27735]
-
- * dir.c (Init_Dir): FNM_SYSCASE which is default case fold flag.
- [ruby-dev:23296]
-
-Wed Dec 14 12:01:26 2005 Tanaka Akira <akr@m17n.org>
-
- * marshal.c (r_object0): fix a GC problem for reading a bignum on
- IA64 with gcc 3.3.5 (Debian 1:3.3.5-13).
-
-Tue Dec 13 12:23:47 2005 Tanaka Akira <akr@m17n.org>
-
- * re.c (rb_reg_regcomp): fix a GC problem on x86_64 with
- gcc 3.3.5 (Debian 1:3.3.5-13).
-
-Tue Dec 13 01:44:16 2005 Tanaka Akira <akr@m17n.org>
-
- * array.c (rb_ary_diff): fix a GC problem on IA64 with
- gcc 3.3.5 (Debian 1:3.3.5-13).
- When rb_ary_push is called, there was no register which contains
- `hash' but `&RHASH(hash)->tbl' instead.
-
-Tue Dec 13 00:08:09 2005 Tanaka Akira <akr@m17n.org>
-
- * sprintf.c (rb_str_format): fix a GC problem.
- [ruby-dev:28001]
-
-Mon Dec 12 15:51:22 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * test/openssl/test_ssl.rb (test_parallel): call GC.start to close
- unused files. [ruby-dev:27981]
-
-Mon Dec 12 09:58:09 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_cover): new method Range#cover? added. the
- method name might be changed. thanks to takano32 at
- http://www.rubyist.net/~matz/20051210.html#c08 for name
- suggestion. [ruby-talk:167182]
-
-Mon Dec 12 00:33:56 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/digest/digest.c (rb_digest_base_s_digest): add volatile to
- protect temporary context object. [ruby-dev:27979]
-
- * ext/iconv/iconv.c (Init_iconv): rb_gc_register_address() should
- be called before actual variable initialization.
- [ruby-dev:27986]
-
-Sun Dec 11 23:54:07 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/*: update to support libraries in ActiveTcl8.4.12.0
- (see ext/tk/ChangeLog.tkextlib).
-
- * ext/tk/sample/scrollframe.rb: add a new sample.
-
-Sun Dec 11 22:07:58 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/rinda/test_rinda.rb (test_remote_array_and_hash): pseudo remote
- objects are protected against GC. [ruby-dev:27911]
-
-Sat Dec 10 01:06:06 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/matrix.rb: add Matrix#determinant_e, Matrix#rank_e.
- [ruby-dev:27820] and related thread.
-
-Sat Dec 10 00:31:42 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (calling_scope_t): gave names to magic numbers for rb_call().
- [ruby-dev:27978]
-
-Fri Dec 9 23:31:02 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rexml/encoding.rb (encoding=): give priority to particular
- conversion to iconv. [ruby-core:06520]
-
-Fri Dec 9 23:16:51 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * range.c (range_include): return false unless included in numeric
- range. fixed: [ruby-dev:27975]
-
-Thu Dec 8 02:07:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (umethod_bind): adjust invoking class for module method.
- [ruby-dev:27964]
-
-Thu Dec 8 00:40:52 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (call_trace_func): klass parameter should be a
- class/module that defines calling method. [ruby-talk:169307]
-
-Wed Dec 7 17:10:27 2005 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * sprintf.c (rb_f_sprintf): [ruby-dev:27967]
-
-Wed Dec 7 16:39:18 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_include): use discrete membership for non Numeric
- values, for example, String.
-
- * numeric.c (num_scalar_p): new method. [ruby-dev:27936]
-
- * lib/complex.rb (Complex#scalar?): ditto.
-
-Wed Dec 7 15:31:35 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_str_format): integer overflow check added.
-
- * sprintf.c (GETASTER): ditto.
-
-Wed Dec 7 01:02:04 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/README.macosx-aqua: [new document] tips to avoid the known
- bug on platform specific dialogs of Tcl/Tk Aqua on MacOS X.
-
- * ext/tk/tcltklib.c: fix bug on switching threads and waiting on the
- deleted interpreter on vwait and tkwait command.
-
- * ext/tk/lib/multi-tk.rb: kill the meaningless loop for the deleted Tk
- interpreter.
-
- * ext/tk/sample/demos-jp/image3.rb: [bug fix] wrong argument.
-
- * ext/tk/sample/demos-en/image3.rb: ditto.
-
- * ext/tk/sample/demos-jp/menu.rb: fix message for MacOS X.
-
- * ext/tk/sample/demos-jp/menu8x.rb: ditto.
-
- * ext/tk/sample/demos-en/menu.rb: ditto.
-
-Tue Dec 6 16:48:40 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (ruby_xmalloc2): change check condition for integer
- overflow. [ruby-dev:27399]
-
- * gc.c (ruby_xrealloc2): ditto.
-
-Tue Dec 6 16:37:57 2005 Yuya Nishida <yuya@j96.org>
-
- * eval.c (exec_under): avoid accessing ruby_frame->prev.
- [ruby-dev:27948]
-
-Fri Dec 2 19:06:06 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (Compare): should not fold double byte alphabet on win9x.
-
-Thu Dec 1 00:50:33 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_funcall2): allow to call protected methods.
- fixed: [ruby-dev:27890]
-
-Wed Nov 30 23:52:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (struct parser_params): fields common to ripper must be
- placed at each same offset.
-
- * parse.y (NEWHEAP, ADD2HEAP): set count after pointer was set.
- fixed: [ruby-dev:27896]
-
-Wed Nov 30 13:43:07 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-expr-beg): support $! at the end of
- expression. [ruby-dev:27868]
-
-Tue Nov 29 23:57:05 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (struct parser_params): heap must be placed at same offset
- also in ripper.y. fixed: [ruby-dev:27846]
-
- * parse.y (yycompile): prevent vparser from tail call optimization.
- fixed: [ruby-dev:27851]
-
- * parse.y (parser_mark): value needs to be marked.
- fixed: [ruby-dev:27845]
-
-Tue Nov 29 22:45:30 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/observer.rb (notify_observers): follow change of observer.rb.
- fixed: [ruby-core:6796]
-
-Mon Nov 28 20:24:22 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb (PP::PPMethods#object_address_group): mask an address with
- word size.
-
- * lib/pp.rb (PP::PPMethods#object_address_group): adjust address format.
-
-Mon Nov 28 18:55:22 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/socket.c (init_inetsock_internal): remove setting
- SO_REUSEADDR option on server socket on Cygwin.
- fixed: [ruby-core:6765] ([ ruby-Bugs-2872 ])
-
-Mon Nov 28 13:11:45 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.c (rb_w32_strerror): remove all CR and LF. (avoid broken
- error message on bccwin32 + winsock)
-
-Mon Nov 28 09:15:50 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/mkmf.rb (create_makefile): should not change sodir with
- dir.gsub!. (bccwin32 failed to install third party extensions)
- [ruby-dev:27834]
-
-Sun Nov 27 05:37:20 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb: use File.basename to decompose pathnames.
- experimental Windows support.
-
-Sun Nov 27 00:56:13 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/wsdl/xmlSchema/complexContent.rb: missing
- ComplexContent#elementformdefault method.
-
-Sat Nov 26 19:57:45 2005 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * dln.c (conv_to_posix_path): should initialize posix.
-
-Fri Nov 25 20:34:56 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/xmlrpc/datetime.rb (DateTime::to_a): comparison with non
- array-convertible object must return false.
-
-Fri Nov 25 14:34:09 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_max): treat end exclusion without iteration if
- the end value is an integer. [ruby-talk:167433]
-
-Fri Nov 25 12:52:57 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb: added backward compatibility codes.
- * lib/rss/parser.rb: ditto.
- * test/rss/test_parser.rb: ditto.
- * test/rss/test_2.0.rb: ditto.
-
- * test/rss/test_content.rb: use #__send__ instead of #funcall for
- no private method.
-
-Fri Nov 25 12:39:56 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb: improved type conversion.
- * lib/rss/1.0.rb: ditto.
- * lib/rss/0.9.rb: ditto.
- * lib/rss/2.0.rb: ditto.
- * lib/rss/image.rb: ditto.
- * lib/rss/syndication.rb: ditto.
-
- * test/rss/test_2.0.rb: added type conversion tests.
- * test/rss/test_accessor.rb: ditto.
- * test/rss/test_to_s.rb: ditto.
- * test/rss/test_syndication.rb: ditto.
- * test/rss/test_setup_maker_2.0.rb: ditto.
- * test/rss/test_setup_maker_1.0.rb: ditto.
- * test/rss/test_setup_maker_0.9.rb: ditto.
- * test/rss/test_maker_sy.rb: ditto.
- * test/rss/test_maker_image.rb: ditto.
- * test/rss/test_maker_2.0.rb: ditto.
- * test/rss/test_maker_0.9.rb: ditto.
- * test/rss/test_image.rb: ditto.
-
- * test/rss/test_maker_1.0.rb: use assert instead of assert_equal.
-
- * test/rss/rss-assertions.rb: improved type conversion assertions.
-
-Fri Nov 25 10:38:20 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/image.rb: added Image prefix.
-
- * lib/rss/maker/image.rb: ditto.
-
-Fri Nov 25 10:33:02 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rss/test_2.0.rb: added RSS 2.0 tests.
-
- * test/rss/rss-assertions.rb: extended XML stylesheet assertion.
-
- * lib/rss/0.9.rb: added initialize method.
-
- * test/rss/test_1.0.rb: cleanup.
-
-Fri Nov 25 10:29:48 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_min): use <=> comparison rather than iteration.
- [ruby-talk:167420]
-
- * range.c (range_max): ditto.
-
-Thu Nov 24 01:31:44 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * file.c (w32_io_info): CreateFile failed on Win9x if file was already
- opened. (FILE_SHARE_READ was needed, but actually I don't understand
- the flags of CreateFile well...)
-
-Wed Nov 23 23:52:35 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_div): use floor rather than rb_Integer().
- [ruby-dev:27674]
-
-Wed Nov 23 22:34:15 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/parser.rb: added entity handling type predicate.
- * lib/rss/rexmlparser.rb: ditto.
- * lib/rss/xmlparser.rb: ditto.
- * lib/rss/xmlscanner.rb: ditto.
-
- * lib/rss/xmlscanner.rb: more robust entity handling.
-
- * test/rss/test_parser.rb: added an entity handling test.
-
-Wed Nov 23 20:59:01 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: add Tk.pkgconfig_list and Tk.pkgconfig_get
- [Tk8.5 feature].
-
- * ext/tk/lib/tk/text.rb: supports new indices modifiers on a Text
- widget [Tk8.5 feature].
-
- * ext/tk/lib/tk/virtevent.rb: add TkNamedVirtualEvent.
-
- * ext/tk/lib/tk/autoload.rb: ditto.
-
- * ext/tk/lib/tk/event.rb: add :data key for virtual events [Tk8.5
- feature].
-
-Wed Nov 23 18:52:45 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * file.c (w32_io_info): should not call GetFileInformationByHandle
- for pipe.
-
- * file.c (w32_io_info): checks return value from rb_w32_get_osfhandle.
-
- * file.c (w32_io_info): now can identify directory on WinNT.
-
-Wed Nov 23 18:46:53 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/: use #__send__ instead of #send.
- * test/rss/: ditto.
-
-Wed Nov 23 18:32:56 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rss/test_taxonomy.rb: use #reject directory.
-
-Wed Nov 23 18:26:00 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/taxonomy.rb: changed class or module prefix to
- Taxonomy from Taxo.
- * lib/rss/maker/taxonomy.rb: ditto.
-
-Wed Nov 23 18:21:11 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/taxonomy.rb: implemented taxonomy module for RSS
- Maker.
- * lib/rss/taxonomy.rb: supported RSS Maker.
- * lib/rss/maker.rb: added taxonomy module support.
-
- * lib/rss/rss.rb: adjusted to other element API.
- * lib/rss/1.0.rb: adjusted to other element API but backward
- compatibility is reserved.
- * lib/rss/0.9.rb: ditto.
-
- * test/rss/test_maker_taxo.rb: added test case for taxonomy module
- for RSS Maker.
- * test/rss/test_setup_maker_1.0.rb: added tests for taxo:topic.
-
- * test/rss/test_setup_maker_1.0.rb: added backward compatibility
- test.
- * test/rss/test_setup_maker_0.9.rb: ditto.
- * test/rss/test_setup_maker_2.0.rb: ditto.
-
- * test/rss/rss-testcase.rb: added convenience method for setting
- up taxo:topic.
- * test/rss/rss-assertions.rb: added assertion for taxo:topic.
-
- * sample/rss/blend.rb: followed new API.
-
-Wed Nov 23 17:42:24 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb: fixed a indentation bug.
-
- * lib/rss/taxonomy.rb: fixed <taxo:topic> #to_s bug.
-
- * test/rss/test_taxonomy.rb: added a #to_s test.
-
-Wed Nov 23 03:40:49 2005 Guy Decoux <ts@moulon.inra.fr>
-
- * re.c (KR_REHASH): should cast to unsigned for 64bit CPU.
- [ruby-core:06721]
-
-Wed Nov 23 07:26:44 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: check for X509V3_EXT_nconf_nid.
-
- * ext/openssl/ossl_x509ext.c (MakeX509ExtFactory): should use
- OPENSSL_malloc to allocate X509V3_CTX.
-
- * ext/openssl/ossl_x509ext.c (ossl_x509extfactory_create_ext): use
- X509V3_EXT_nconf_nid to avoid SEGV (and to build extensions which
- values are placed in separate section).
-
- * test/openssl/test_x509ext.rb: new file.
-
-Wed Nov 23 01:22:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (test_identical): test if two files are identical.
-
- * file.c (rb_f_test): support DOSISH systems where st_ino is not
- reliable. fixed: [ruby-core:06672]
-
- * win32.h, win32.c (rb_w32_osid): check the running platform.
-
-Tue Nov 22 23:52:06 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb: match incomplete (in current enconding) multibyte
- string. http://inamode6.tokuhirom.dnsalias.org/show/1551
-
-Tue Nov 22 18:36:11 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.c (winnt_stat): set mapped errno instead of ENOENT.
-
-Tue Nov 22 14:36:54 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (rb_file_s_basename): skip slashes just after UNC top slashes.
-
- * test/ruby/test_path.rb (test_dirname, test_basename): follow new
- spec. and add new tests.
-
-Tue Nov 22 13:30:15 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.c (rb_w32_stat): Dir.chdir('//server/shared');
- p Dir.glob('*') should work on WinNT. (implemented our own
- stat(2) on WinNT) [ruby-list:41552] [ruby-dev:27711]
-
-Tue Nov 22 02:31:53 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tkextlib/tile.rb: bug fix (Tk::Tile::USE_TTK_NAMESPACE
- is not defined).
-
-Tue Nov 22 01:45:21 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_basename): DOSISH_UNC is defined on cygwin but
- DOSISH is not. fixed: [ruby-dev:27797]
-
-Mon Nov 21 22:50:48 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_path_skip_prefix, rb_file_s_basename): UNC without path
- should not be splitted. fixed: [ruby-dev:27776] [ruby-dev:27786]
-
- * parse.y (dsym): prohibit empty symbol literal by interpolation.
- fixed: [ruby-talk:166529]
-
-Mon Nov 21 16:03:48 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/setup.mk: findstr doesn't exist on win9x.
- fixed: [ruby-dev:27756]
-
-Sun Nov 20 21:39:27 2005 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * regparse.c (fetch_token_in_cc): tok->escaped should be
- initialized. [ruby-dev:27763]
-
-Sun Nov 20 22:34:06 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_symname_p): [ not followed by ] is not valid symbol.
- fixed: [ruby-talk:166520]
-
-Sat Nov 19 19:57:54 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/fileutils.rb (FileUtils::ln): ln documentation fix.
- [ruby-core:06661]
-
-Sat Nov 19 08:19:38 2005 Zach Dennis <zdennis@mktec.com>
-
- * ext/socket/socket.c: Socket Documentation. [ruby-core:6552]
-
-Sat Nov 19 07:34:32 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/font.rb: remove dependency on Ruby's version (1.8
- or 1.9).
-
- * ext/tk/lib/tkextlib/ICONS/icons.rb: ditto.
-
- * ext/tk/sample/tkextlib/treectrl/demo.rb: ditto.
-
-Fri Nov 18 18:07:05 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (rb_file_s_dirname): should use skipprefix for UNC path.
- pointed out by nobu ([ruby-dev:27744]). fixed: [ruby-core:5076]
-
-Fri Nov 18 17:35:09 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: add restriction to access the entried
- command table and manipulate other IPs (for reason of security).
- Now, a IP object can be controlled by only its master IP or the
- default IP.
-
- * ext/tk/lib/remote-tk.rb: add restriction to manipulate.
-
- * ext/tk/tcltklib.c (ip_is_slave_of_p): add TclTkIp#slave_of?(ip)
- to check manipulability.
-
- * ext/tk/lib/tk.rb: bug fix on handling of Tcl's namespaces.
-
- * ext/tk/lib/tk/namespace.rb: ditto.
-
-Fri Nov 18 16:47:33 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (rb_file_s_dirname): added checks for some patterns with drive
- letter. fixed: [ruby-dev:27738]
-
- * test/ruby/test_path.rb (test_dirname): added tests for above
- patterns.
-
-Fri Nov 18 12:19:16 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.h (S_IFIFO): r,w = IO.pipe; r.stat.pipe? now
- returns true on VisualC++6.
-
-Thu Nov 17 17:58:00 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/1.0.rb: added convenience method 'resources'.
-
- * lib/rss/taxonomy.rb: ditto.
-
- * test/rss/rss-assertions.rb: added test for 'resources'.
-
- * test/rss/test_taxonomy.rb: ditto.
-
-Thu Nov 17 17:53:30 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/taxonomy.rb: implemented taxonomy module.
-
- * test/rss/test_taxonomy.rb: added tests for taxonomy support.
-
-Thu Nov 17 17:40:19 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/1.0.rb: added rdf:Bag.
-
-Thu Nov 17 13:52:00 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb: removed needless argument 'prefix'.
-
- * lib/rss/parser.rb: ditto.
-
-Wed Nov 16 23:24:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (static-ruby): overridable.
-
- * ext/extmk.rb (parse_args): force to link extensions statically only
- if static is given for extstatic.
-
- * ext/extmk.rb (RUBY, RUBYW): overridable.
-
-Wed Nov 16 01:29:31 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/trackback.rb: added TrackBack prefix.
-
- * lib/rss/maker/trackback.rb: ditto.
-
-Wed Nov 16 01:26:13 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb (RSS::VERSION): 0.1.5 -> 0.1.6.
-
- * test/rss/test_version.rb (RSS::TestVersion#test_version): ditto.
-
-Tue Nov 15 23:54:24 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_load_ok): eaccess() returns 0 on success.
- fixed: [ruby-dev:27713]
-
-Tue Nov 15 16:36:03 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * array.c (rb_ary_fill): previous commit disabled this usage:
-
- a = [0,1,2,3,4,5,6,7,8,9]
- a.fill {|i| a[i] * 10} #=> [nil, nil, ...., nil]
-
- previous commit has the advantage of early garbage collection, but
- potentially this would break some script. so I reverted behavior.
-
-Tue Nov 15 16:15:23 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (file_load_ok): use eaccess() instead of actually opening
- the file. [ruby-talk:156378]
-
- * lib/jcode.rb (String::reverse): add new methods.
- [ruby-list:41245]
-
-Tue Nov 15 15:49:34 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * array.c (rb_ary_fill): tail elements were vanished when the middle
- part of array was filled. (ie: [0,1,2,3,4].fill(-1,2,1) => [0,1,-1])
-
- * test/ruby/test_array.rb (test_fill): added.
-
-Tue Nov 15 14:39:16 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_fill): should adjust array length correctly when
- an array is expanded in the fill process. [ruby-core:06625]
-
-Mon Nov 14 23:49:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_readlink): ERANGE will occur only on GPFS.
- [ruby-dev:27699]
-
-Mon Nov 14 17:36:22 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_first): RDoc update from Daniel Berger
- <djberg96@yahoo.com>. [ruby-core:06577].
-
-Sun Nov 13 10:55:24 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/uri/common.rb (escape): regard second argument as a
- character set. [ruby-dev:27692]
-
-Sat Nov 12 08:36:40 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, eval.c, intern.h: check fd_mask type.
-
- * configure.in (socketpair): need to be checked.
-
-Fri Nov 11 19:53:47 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * eval.c, intern.h: failed to compile where NFDBITS is defined but
- howmany() is not defined. [ruby-dev:27680]
-
- * io.c (is_socket): failed to compile where S_ISSOCK is not defined.
-
- * io.c (pipe_open): failed to compile where socketpair is not supported.
-
-Fri Nov 11 08:20:56 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (OUTFLAG): keep trailing spaces. [ruby-dev:27666]
-
- * mkconfig.rb: substitution references added.
-
-Fri Nov 11 07:39:49 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * configure.in: undef HAVE_LINK on BeOS. (link(2) always returns
- EINVAL, and this causes error in test/fileutils.)
-
- * file.c: override chown(2) and fchown(2) on BeOS. (these functions
- should not change user/group id if -1 is passed as corresponding
- argument, and this causes error in test/fileutils too)
- [ruby-dev:27672]
-
-Thu Nov 10 21:05:03 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/shellwords.rb: fix for blank but not empty string.
- fixed: [ruby-dev:27663]
-
-Wed Nov 9 08:39:38 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/shellwords.rb: refactored. [ruby-core:06581]
-
-Tue Nov 8 17:35:53 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * intern.h, eval.c (rb_thread_signal_raise): constified.
-
- * signal.c: cosmetic change.
-
-Tue Nov 8 15:32:27 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/drb/ssl.rb (DRb::SSLConfig#accept): fixed typo.
- [ruby-dev:27560] [ruby-core:4627]
-
-Mon Nov 7 20:54:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c: iconvctl() support. [EXPERIMENTAL]
-
-Mon Nov 7 16:23:23 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/ossl.h: need to include winsock2.h before including
- windows.h by some openssl headers.
-
-Mon Nov 7 13:43:51 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/stubs.c (_nativethread_consistency_check): use simpler
- (low cost) way to check whether the Tcl interpreter was compiled
- with threads enabled of not.
-
- * ext/tk/tcltklib.c: reduce warnings.
-
- * ext/tk/tkutil/tkutil.c: ditto.
-
-Mon Nov 7 00:06:12 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/yaml.rb: removed :nodoc: to generate Kernel doc. [ruby-core:6324]
-
-Sun Nov 6 23:39:13 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (Iconv::BrokenLibrary): exception when detected a
- bug of underlying library.
-
-Sun Nov 6 21:43:22 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/stubs.c (ruby_tcl_create_ip_and_stubs_init): should touch
- interpreter after initialization is done. [ruby-dev:27638]
-
-Sun Nov 6 20:13:27 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_readlink): readlink(2) on AIX fails with ERANGE if
- buffer size is less than required. fixed: [ruby-dev:27634]
-
-Sat Nov 5 13:42:50 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, cygwin/GNUmakefile.in (mingw): use def file to alias
- symbols. [ruby-dev:27532]
-
- * bcc32/mkexports.rb, win32/mkexports.rb: make aliases in DLL.
-
- * win32/win32.c, win32/win32.h: replace symbols only when RUBY_EXPORT
- is defined.
-
-Thu Nov 3 07:57:39 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/open-uri.rb (open_loop): find_proxy should return nil when
- proxy does not exist. [ruby-dev:27630]
-
-Wed Nov 2 20:25:28 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: ext/tk/extconf.rb: change the check parameter
- for Win32.
-
-Wed Nov 2 19:03:06 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (ip_rbUpdateObjCmd, ip_rb_threadUpdateObjCmd):
- passed improper flags to DoOneEvent().
-
- * ext/tk/tkutil/tkutil.c: use rb_obj_respond_to() instead of
- rb_respond_to().
-
-Tue Nov 1 14:20:11 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call_super): should call method_missing if super is
- called from Kernel method.
-
- * eval.c (exec_under): frame during eval should preserve external
- information.
-
-Tue Nov 1 10:48:49 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: should check ERR_peek_last_error().
- [ruby-dev:27597]
-
- * ext/openssl/ossl.c (ossl_raise): ditto.
-
-Mon Oct 31 17:34:46 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in: use proper option for Sun linker. A patch from
- Shinya Kuwamura <kuwa at labs.fujitsu.com>. [ruby-dev:27603]
-
-Mon Oct 31 05:46:08 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_cipher.c (ossl_cipher_update): input data must
- not be empty. [ruby-talk:161220]
-
- * test/openssl/test_cipher.rb: add test for Cipher#update("").
-
-Mon Oct 31 05:38:26 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpservlet/cgihandler.rb
- (WEBrick::HTTPServlet::CGIHandler#do_GET): the value of Set-Cookie:
- header field should be splited into each cookie. [ruby-Bugs:2199]
-
- * lib/webrick/cookie.rb (WEBrick::Cookie.parse_set_cookie): new method
- to parse the value of Set-Cookie: header field.
-
- * test/webrick/test_cookie.rb, test/webrick/test_cgi.rb,
- test/webrick/webrick.cgi: add some test for cookie.
-
-Mon Oct 31 02:33:25 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_rshift): RDoc fix. [ruby-core:6351]
-
- * util.h (strtod): add #undef for platforms defines strtod()
- macro. [ruby-dev:27563]
-
-Mon Oct 31 02:31:41 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * test/ruby/test_float.rb (test_precision): test by assert_in_delta.
- [ruby-dev:27575]
-
-Sat Oct 29 01:58:25 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/etc/etc.c: document update from mathew <meta@pobox.com>.
- [ruby-core:06473]
-
- * ext/fcntl/fcntl.c: ditto.
-
-Sat Oct 29 16:56:03 2005 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: added seven predicates sunday? to saturday?.
-
- * lib/date.rb: added two methods {prev,next}_month,
- that are almost same as << and >>.
-
-Thu Oct 27 20:34:43 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enumerator.c (enumerator_allocate): allow subclassing.
-
-Thu Oct 27 16:45:31 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (scan_once): wrong condition to use mbclen2().
- [ruby-dev:27535]
-
-Thu Oct 27 11:53:17 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * missing.h, missing/memcmp.c, missing/memmove.c:
- ANSI compatible interface.
-
-Wed Oct 26 09:15:48 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/syck/implicit.c (syck_type_id_to_uri): should return
- newly allocated memory. otherwise, type_id will be freed
- twice. [ruby-dev:27384] [ruby-core:6385]
-
-Wed Oct 26 01:58:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_EXTERN): macro to export symbols in shared
- library. [ruby-core:05528]
-
- * defines.h, {bcc32,win32,wince}/Makefile.sub (RUBY_EXTERN): moved to
- configuration pass.
-
- * ext/extmk.rb (extmake): RUBY_EXTERN for static linked extensions.
-
-Tue Oct 25 20:06:59 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ruby.h (Qfalse, Qtrue, Qnil, Qundef): make sure these immediate
- values have VALUE type. there is an environment where sizeof(VALUE)
- != sizeof(int) like IA64. if 32bit integer (Qtrue) is passed to ANYARGS
- and received by 64bit integer (VALUE), upper bits may have garbage value.
- [ruby-dev:27513]
-
-Tue Oct 25 15:32:00 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rational.rb: applied documentation patch from Gavin Sinclair
- <gsinclair@gmail.com>. [ruby-core:06364]
-
- * lib/irb.rb (IRB::Irb::eval_input): handle prompts with newlines
- in irb auto-indentation mode. [ruby-core:06358]
-
-Tue Oct 25 14:21:46 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * gc.c (garbage_collect): sorry, previous commit was incorrect.
- [ruby-core:6386]
-
-Tue Oct 25 13:40:16 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * gc.c (garbage_collect): return now whether there're rooms for new
- objects, rather than whether GC run. fixed: [ruby-core:6376]
-
-Tue Oct 25 02:12:08 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/markup/simple_markup.rb (SM::SimpleMarkup::LABEL_LIST_RE):
- reduce redundant backtrack. [ruby-talk:161771]
-
-Tue Oct 25 00:35:33 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/rinda/*: RDoc documentation from Eric Hodel
- <drbrain@segment7.net> added.
-
-Mon Oct 24 21:14:29 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, io.c: use sys/syscall.h if syscall.h is not available.
- [ruby-core:06247]
-
-Mon Oct 24 20:38:25 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/Win32API/lib/win32/resolv.rb (get_info): support multiple DNS.
- fixed: [ruby-list:40058], [ruby-dev:27479]
-
-Mon Oct 24 11:01:11 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/canvas.rb (TkCanvasItemConfig::__item_val2ruby_optkeys):
- typo fixed. [ruby-talk:162187]
-
- * ext/tk/lib/tk/menu.rb (TkMenuEntryConfig::__item_val2ruby_optkeys):
- ditto. [ruby-core:06359]
-
-Mon Oct 24 07:57:56 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/tk/lib/tk/canvas.rb (TkCanvasItemConfig::__item_val2ruby_optkeys):
- typo fixed. [ruby-talk:162187]
-
- * ext/tk/lib/tk/menu.rb (TkMenuEntryConfig::__item_val2ruby_optkeys):
- ditto. [ruby-core:06359]
-
- * lib/matrix.rb (Matrix::initialize): use funcall instead of send
- to allow private methods to be called. A report from
- Jean-Claude Arbaut <jcarbaut@laposte.net>. [ruby-core:06359]
-
-Mon Oct 24 00:41:18 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_sunday): added predicate methods for the days of the
- week. [ruby-list:41340]
-
-Sun Oct 23 07:11:11 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: improve messages [ruby-core:06325].
-
- * ext/tk/lib/tk.rb, ext/tk/lib/tk/canvas.rb, ext/tk/lib/tk/entry.rb,
- ext/tk/lib/tk/frame.rb, ext/tk/lib/tk/image.rb,
- ext/tk/lib/tk/itemconfig.rb, ext/tk/lib/tk/labelframe.rb,
- ext/tk/lib/tk/listbox.rb, ext/tk/lib/tk/menu.rb,
- ext/tk/lib/tk/radiobutton.rb, ext/tk/lib/tk/scale.rb,
- ext/tk/lib/tk/spinbox.rb, ext/tk/lib/tk/text.rb,
- ext/tk/lib/tk/toplevel.rb: improve conversion of option values.
-
- * ext/tk/lib/tkextlib/*: ditto.
-
- * ext/tk/lib/tkextlib/*: update to support ActiveTcl8.4.11.2.
-
- * ext/tk/lib/tkextlib/trofs/*: support Trofs 0.4.3.
-
- * ext/tk/lib/tkextlib/tile/*: support Tile 0.7.2.
-
- * ext/tk/lib/tkextlib/vu/*: support vu 2.3.0.
-
- * ext/tk/lib/tkextlib/tcllib/*: support Tcllib 1.8 (Tklib 0.3).
-
-Sat Oct 22 23:54:07 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb, lib/mkmf.rb (with_config): support --with-extension
- options. [ruby-dev:27449]
-
-Sat Oct 22 14:25:43 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * util.[hc] (ruby_add_suffix): constified.
-
- * util.[hc] (ruby_scan_{oct,hex}): fixed typo. (renamed from
- scan_{oct,hex})
-
- * util.c: almostly ANSI styled. (except for functions depending on
- macro and K&R technique)
-
-Sat Oct 22 13:26:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (sym_inspect), parse.y (parser_yylex, rb_symname_p): check
- if valid as a symbol name more strictly. [ruby-dev:27478]
-
- * test/ruby/test_symbol.rb: tests for [ruby-core:03573].
-
- * time.c (rb_strftime): removed meaningless volatile modifiers, and
- concatenate successive nul characters at once. [ruby-dev:27472]
-
- * ext/tk/lib/tk/font.rb, ext/tk/lib/tkextlib/ICONS/icons.rb,
- ext/tk/sample/tkextlib/treectrl/demo.rb, lib/net/imap.rb,
- lib/rss/parser.rb, test/rss/test_content.rb,
- test/rss/test_dublincore.rb, test/rss/test_syndication.rb,
- test/rss/test_trackback.rb, test/ruby/test_eval.rb,
- test/socket/test_socket.rb, test/socket/test_udp.rb:
- Object#fcall was renamed as Object#funcall.
-
-Sat Oct 22 10:08:28 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * missing.h, missing/*.c: SUSv3 compatible strcasecmp and strncasecmp,
- ANSI compatible strtol and strtoul, and ANSI styled other functions.
-
-Fri Oct 21 19:16:08 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * rubysig.h (CHECK_INTS): fixed typo. (I believe bit-or is improper)
-
-Fri Oct 21 17:49:32 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bin/erb (ERB::Main::run): typo fixed. [ruby-core:06337]
-
-Fri Oct 21 15:42:28 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * intern.h, struct.c (rb_struct_iv_get): constified.
-
- * marshal.c: avoid one VC++6 warning for implicit conversion
- from int to char.
-
- * ruby.h: ANSI styled.
-
- * bcc32/Makefile.sub (HAVE_HYPOT): added.
-
- * ext/socket/extconf.rb: BeOS is only one platform should call
- closesocket, so check __BEOS__ macro directly. (I was worried
- accidentally HAVE_CLOSESOCKET is defined on windows again because
- it has it)
-
- * ext/socket/{getaddrinfo.c,socket.c}: ditto.
-
- ... these are all cosmetic changes.
-
-Fri Oct 21 15:23:23 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * bignum.c (bignew_1): conversion from `int' to `char' discards
- upper bits, (ie. (char)0xff00 -> 0) so it's better to test if
- nonzero and set 0 or 1 instead of simply casting ... as a flag usage.
- (but I believe this won't cause actual bug in current implementation)
- [ruby-dev:27055]
-
- * time.c: should use LONG_LONG instead of `long long'.
-
-Thu Oct 20 22:22:49 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parser.y (struct parser_params): parser never modify input string.
-
- * ext/ripper/tools/preproc.rb (prelude): do not append surplus
- newlines to fix line numbers.
-
-Thu Oct 20 11:41:57 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * class.c, eval.c, hash.c, st.c, variable.c: changed /* ??? */ stuff
- protoize generated to ANYARGS.
-
-Thu Oct 20 11:18:11 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * eval.c, file.c, ruby.c: removed strchr, strrchr, strstr definition
- because they are defined in missing.h.
-
- * missing.h, missing/strchr.c, missing/strstr.c: ANSI styled.
-
-Thu Oct 20 09:36:06 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/mkmf.rb (create_makefile): Borland make seems not to allow
- empty dependency list. If this change is not good, please correct
- it.
-
-Thu Oct 20 07:55:09 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): get rid of a restriction
- of Borland make. fixed: [ruby-dev:27460]
-
- * ext/ripper/depend: ditto.
-
-Wed Oct 19 23:58:03 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): do not create unnecessary empty
- directories. fixed: [ruby-dev:27451]
-
-Wed Oct 19 08:28:32 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_join): elements may contain null pointer strings.
- report and fixed by Lloyd Zusman (hippoman): [ruby-core:06326]
-
-Wed Oct 19 02:34:33 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enumerator.c, eval.c, gc.c, parse.y, regparse.c, sjis.c, time.c:
- made internal symbols static. [ruby-dev:27435]
-
-Tue Oct 18 10:58:27 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/depend, ext/dl/extconf.rb, ext/socket/depend,
- ext/socket/extconf.rb: shouldn't define DESTCLEANFILES in depend,
- use $distcleanfiles in extconf.rb.
-
- * win32/Makefile.sub (distclean-local): should remove .config.h.time.
-
-Mon Oct 17 09:42:50 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * mkconfig.rb: fixup configure_args for mswin32 configure.
-
- * win32/configure.bat (srcdir, target): ditto.
-
-Mon Oct 17 05:01:50 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * env.h: move struct METHOD and struct BLOCK from eval.c to
- support NodeWrap and ParseTree.
-
-Sun Oct 16 22:16:51 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: omit non-existing directories.
-
-Sun Oct 16 14:40:54 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/rinda/rinda.rb (Rinda::Tuple#initialize): check remote hash
- tuple. fixed: [ruby-list:41227]
-
- * test/rinda/test_rinda.rb: test it.
-
-Sun Oct 16 03:38:07 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * rubysig.h (CHECK_INTS): prevent signal handler to run during
- critical section. [ruby-core:04039]
-
- * eval.c (load_wait): need not to call rb_thread_schedule()
- explicitly. [ruby-core:04039]
-
- * eval.c (rb_thread_schedule): clear rb_thread_critical.
- [ruby-core:04039]
-
-Sun Oct 16 00:13:14 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/configure.bat: remove unnecessary line which prevents
- creating Makefile.
-
-Sat Oct 15 23:52:07 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb: (getbinaryfile): allow nil for localfile, and
- returns retrieved data if localfile is nil.
-
- * lib/net/ftp.rb: (gettextfile): ditto.
-
-Sat Oct 15 19:51:29 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * bin/erb: typo fixed, again. thanks, Doug Kearns.
-
-Fri Oct 14 23:09:31 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (MKFILES): update MKFILES if configure files get
- changed.
-
- * win32/configure.bat, win32/setup.mak (configure_args): store
- arguments to configure files.
-
-Fri Oct 14 22:05:45 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (ioctl): should set errno.
-
-Fri Oct 14 16:39:37 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/config.rb (Config::FileHandler): :UserDir should be nil.
- It is harmful to permit the access to ~/public_html by default.
- suggested by Hiroyuki Iwatsuki.
-
-Fri Oct 14 04:58:38 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_obj_instance_exec): create instance_exec and
- module_exec which pass arguments to the block.
-
- * eval.c (rb_f_funcall): rename fcall to funcall to follow
- tradition.
-
-Thu Oct 13 23:29:51 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (HEAPCNT): bison allocates indivisible size.
- fixed: [ruby-core:06261]
-
- * io.c, pack.c, ext/syck/rubyext.c, ext/syck/syck.h, missing/isinf.c:
- get rid of warnings. fixed: [ruby-core:06247]
-
-Wed Oct 12 12:51:56 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl.c (Init_openssl): should call
- OpenSSL_add_ssl_algorithms().
-
-Wed Oct 12 11:08:54 2005 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * file.c (rb_f_test): typo in RDoc comments.
-
-Tue Oct 11 21:41:58 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_FUNC_ATTRIBUTE): check prefixed attribute form
- first. [ruby-dev:27398]
-
- * array.c, enum.c, eval.c, util.c: safer function pointer usage.
- fixed: [ruby-core:06143]
-
- * util.h (qsort): removed the definition incompatible to ANSI.
- fixed: [ruby-core:06147]
-
- * eval.c (rb_obj_respond_to): check if obj responds to the given
- method with the given visibility. [ruby-dev:27408]
-
- * eval.c (rb_respond_to): conform to Object#respond_to?. [ruby-dev:27411]
-
-Tue Oct 11 00:01:21 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * st.c (st_free_table): do not call free() but xfree().
- [ruby-core:06205]
-
-Sat Oct 8 19:49:42 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (Init_Binding): add Binding#dup method. [yarv-dev:666]
-
- * io.c (rb_io_init_copy): clear PREP flag for copied IO.
- fixed: [ruby-dev:27371]
-
- * parse.y (rb_parser_malloc, rb_parser_free): manage parser stack on
- heap. [ruby-list:41199]
-
- * parse.y (ripper_initialize): use rb_respond_to().
-
- * ext/ripper/depend (check): get rid of re-generating ripper.y always.
-
- * ext/iconv/charset_alias.rb: parse config.charset_alias file directly.
-
- * ext/nkf/lib/kconv.rb (Kconv.conv): get rid of nil.to_a.
-
- * lib/scanf.rb (Scanf::FormatSpecifier#letter, #width): use matched
- substring directly.
-
- * test/ruby/test_assignment.rb, test/ruby/test_iterator.rb: followed
- change of sample/test.rb.
-
- * test/net/http/test_http.rb: removed superfluous splatting stars.
-
-Fri Oct 7 16:41:43 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (splat_value): call rb_Array() to convert svalue to
- values. [ruby-dev:27397]
-
-Fri Oct 7 09:54:00 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::Cookie::parse): Cookies from Nokia devices may
- not be parsed correctly. A patch from August Z. Flatby
- (augustzf) in [ruby-Patches-2595]. [ruby-core:06183]
-
-Thu Oct 6 22:51:30 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_Array): Array() to raise error for objects without
- to_ary, nor to_a.
-
- * object.c (nil_to_a): revert NilClass#to_a.
-
-Thu Oct 6 20:10:38 2005 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c (strscan_free): remove useless code.
- [ruby-dev:26368] [ruby-dev:27389]
-
-Thu Oct 6 01:02:19 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (rb_range_beg_len): should return Qfalse for non-range
- object.
-
-Wed Oct 5 04:42:38 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/xmlrpc/server.rb (XMLRPC::Server#initialize): should mount the
- servlet on "/".
-
-Wed Oct 5 04:06:49 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/xmlrpc/server.rb (XMLRPC::Server#serve): delete wrong call
- of "join".
-
-Mon Oct 3 00:04:00 2005 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * pack.c (EXTEND16): [ruby-dev:27383]
-
-Sat Oct 1 23:55:24 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (do_select, rb_w32_select): brush up.
-
-Sat Oct 1 12:57:02 2005 Tanaka Akira <akr@m17n.org>
-
- * bignum.c (rb_big_rand): removed. [ruby-dev:25405]
-
-Sat Oct 1 01:46:51 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (OpenURI.open_loop): prohibit multiple proxy
- options.
-
-Thu Sep 29 10:26:18 2005 Tanaka Akira <akr@m17n.org>
-
- * ext/dl/cptr.c (rb_dlptr_s_to_ptr): abolish sizeof(FILE).
- [ruby-dev:27317]
-
-Thu Sep 29 10:15:14 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (:proxy_http_basic_authentication): new option.
-
-Thu Sep 29 07:22:05 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_f_send): underscores need to be escaped.
- fixed by Doug Kearns. [ruby-core:06053]
-
-Thu Sep 29 00:57:35 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ev_const_get), variable.c (rb_const_get_0): retry only when
- autoload succeeded.
-
- * variable.c (rb_autoload_load): now return true if autoload
- succeeded. fixed: [ruby-dev:27331]
-
-Wed Sep 28 23:40:04 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_stat_inspect): constified.
-
-Wed Sep 28 15:12:28 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb (WEBrick::CGI#start): req.query_string should
- refer to the value of QUERY_STRING. [ruby-list:41186]
-
- * lib/webrick/httprequest.rb (WEBrick::HTTPRequest#query_string=):
- add new method.
-
-Wed Sep 28 10:45:44 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: cannot compile with Tcl/Tk8.0.x [ruby-dev:27335].
-
-Wed Sep 28 07:56:52 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/yaml/basenode.rb (YAML::BaseNode::match_segment): fix typo.
- [ruby-dev:27237], [ruby-core:05854]
-
- * lib/yaml/tag.rb (Module#yaml_as): suppress warnings.
-
- * lib/yaml/types.rb (YAML::PrivateType, YAML::DomainType): ditto.
-
-Wed Sep 28 03:16:41 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * rubysig.h: fixed build problem with --enable-pthread on platforms
- which don't have setitimer().
-
-Mon Sep 26 22:32:13 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (set_trace_func): add rb_secure(4) to prevent adding
- tracing function.
-
-Mon Sep 26 20:59:28 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * parse.y: changed to ANSI function style.
-
-Sun Sep 25 12:02:04 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * bin/erb: typo fixed.
-
-Sun Sep 25 11:54:11 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/rinda/tuplespace.rb (Rinda::TemplateEntry::initialize): pull
- up method. Tabs converted to spaces.
-
-Sun Sep 25 09:34:22 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * parse.y: replaced `foo _((boo))' with `foo(boo)'.
-
-Sun Sep 25 08:19:53 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/rss/test_content.rb, test/rss/test_syndication.rb: use fcall
- instead of send in order to override visibility.
-
-Sun Sep 25 01:46:43 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-calculate-indent): arrange deep-indent
- closing parenthesis at same column as the opening.
-
-Sun Sep 25 01:33:41 2005 Tanaka Akira <akr@m17n.org>
-
- * process.c (proc_setrlimit): make the third argument (rlim_max)
- optional.
-
-Sun Sep 25 00:42:11 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-expr-beg): deal with heredoc separately.
- fixed: [ruby-list:41168]
-
- * misc/ruby-mode.el (ruby-calculate-indent): not to deepen indent
- level for continuous line inside parentheses.
- http://nabeken.tdiary.net/20050915.html#p02
-
-Sat Sep 24 21:19:39 2005 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c: document enhancement.
-
- * ext/strscan/strscan.c: update copyright year.
-
- * ext/strscan/strscan.c: update coding style.
-
-Sat Sep 24 20:20:05 2005 Minero Aoki <aamine@loveruby.net>
-
- * test/net/http/test_http.rb (teardown): Net::HTTP.version_1_1 breaks
- many other tests; ensure that Net::HTTP is version 1.2 after test.
- [ruby-dev:27312]
-
-Sat Sep 24 11:44:28 2005 Minero Aoki <aamine@loveruby.net>
-
- * test/net/http/test_http.rb: new file.
-
-Sat Sep 24 08:54:05 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (cd): no longer accept :noop option, related
- code is useless. [ruby-core:05858] [ruby-Bugs:2494]
-
-Sat Sep 24 08:30:00 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Pathname#sub): new method.
-
-Sat Sep 24 08:29:36 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: fix visibility of FileUtils::NoWrite, Verbose,
- DryRun. [ruby-core:05954]
-
- * test/fileutils/test_nowrite.rb: test it.
-
- * test/fileutils/test_dryrun.rb: new file.
-
- * test/fileutils/test_verbose.rb: new file.
-
-Sat Sep 24 07:59:01 2005 Minero Aoki <aamine@loveruby.net>
-
- * sample/ripper/colorize.rb: removed (replaced by ruby2html.rb).
-
- * sample/ripper/ruby2html.rb: added.
-
-Sat Sep 24 06:35:15 2005 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper: no longer generates .rb files.
-
- * parse.y (Init_ripper): ripper_init_eventids*() takes 1 argument,
- self (class Ripper).
-
- * ext/ripper/depend: target removed: `lib/ripper/core.rb'.
-
- * ext/ripper/depend: new target `eventids2table.c'.
-
- * ext/ripper/depend: new target `check'.
-
- * ext/ripper/eventids2.c: include eventids2table.c.
-
- * ext/ripper/eventids2.c: initialize SCANNER_EVENT_TABLE.
-
- * ext/ripper/extconf.rb: update $cleanfiles list.
-
- * ext/ripper/tools/generate.rb: no longer generate ripper/core.rb.
-
- * ext/ripper/tools/generate.rb: new mode `check'.
-
- * ext/ripper/tools/generate.rb: new mode `eventids2table'.
-
- * ext/ripper/lib/ripper/core.rb.in: removed.
-
- * ext/ripper/lib/ripper/core.rb: added.
-
- * ext/ripper/lib/ripper/filter.rb: update copyright year.
-
- * ext/ripper/lib/ripper/lexer.rb: ditto.
-
- * ext/ripper/lib/ripper/sexp.rb: ditto.
-
-Sat Sep 24 02:40:20 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb: document update from James Edward Gray II
- <james@grayproductions.net>. [ruby-core:05942]
-
-Sat Sep 24 02:05:51 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (proc_daemon): should restrict execution on levels
- higher than $SAFE=2. suggested by URABE Shyouhei
- <shyouhei@ice.uec.ac.jp>.
-
-Fri Sep 23 20:10:35 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/ripper/tools/generate.rb, ext/ripper/tools/preproc.rb: StringIO
- is not available for miniruby. fixed: [ruby-dev:27307]
-
-Fri Sep 23 17:36:48 2005 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: avoid core dump with WIN32OLE_EVENT.
- [ruby-dev:27133]
-
-Fri Sep 23 16:27:39 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/forwardable.rb: replaced by new implementation from
- <Daniel.Berger@qwest.com>. [ruby-core:05899]
-
-Fri Sep 23 07:07:47 2005 Minero Aoki <aamine@loveruby.net>
-
- * test/ripper/depend: use --output option instead of redirect;
- nmake does not remove a target when the target file is created by
- redirect. [ruby-dev:26466]
-
- * test/ripper/tools/preproc.rb: new option --output.
-
-Fri Sep 23 06:57:52 2005 Minero Aoki <aamine@loveruby.net>
-
- * test/ripper/tools/generate.rb: check parser event arity.
-
- * test/ripper/tools/generate.rb: detect crash of parser-event-IDs
- and scanner-event-IDs.
-
-Fri Sep 23 06:01:30 2005 Minero Aoki <aamine@loveruby.net>
-
- * test/ruby/test_file.rb: check File#chown(nil,nil).
- [ruby-dev:27140]
-
-Fri Sep 23 05:57:23 2005 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper: refactoring code generation tools. [ruby-dev:27247]
- [ruby-dev:27273]
-
- * ext/ripper/depend: use generate.rb.
-
- * ext/ripper/lib/ripper/core.rb: removed.
-
- * ext/ripper/tools/generate-eventids1.rb: removed (code moved to
- generate.rb).
-
- * ext/ripper/tools/generate-ripper_rb.rb: removed (code moved to
- generate.rb).
-
- * ext/ripper/tools/list-parse-event-ids.rb: removed (code moved to
- generate.rb).
-
- * ext/ripper/tools/list-scan-event-ids.rb: removed (code moved to
- generate.rb).
-
- * ext/ripper/lib/ripper/core.rb: removed.
-
- * ext/ripper: refactoring tests. [ruby-dev:27273]
-
- * ext/ripper/test/check-event-arity.rb: removed (code moved to
- tools/generate.rb).
-
- * ext/ripper/test/check-event-coverage.rb: removed (code moved to
- test/ripper/test_parser_events.rb).
-
- * ext/ripper/test/check-scanner-event-coverage.rb: removed (code
- moved to test/ripper/test_scanner_events.rb).
-
- * ext/ripper/test/list-called-events.rb: removed.
-
- * ext/ripper/test/src_rb: removed.
-
- * ext/ripper/test/validate.rb: removed.
-
- * test/ripper/test_scanner_events.rb: check event coverage.
-
- * ext/ripper/lib/ripper/core.rb.in: update copyright year.
-
-Thu Sep 22 23:40:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (find_executable0): default path if environment is not
- set. [ruby-dev:27281]
-
- * ext/ripper/extconf.rb (have_command): replaced with find_executable.
-
-Thu Sep 22 17:31:48 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/readline/test_readline.rb (TestReadline::replace_stdio):
- merged the patch of [ruby-dev:25232] instead of [ruby-dev:25223].
- (merged from ruby_1_8 branch)
-
-Wed Sep 21 23:30:44 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (configuration): generalized nmake dependent code.
-
-Wed Sep 21 14:16:30 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/ripper/depend (SUFFIXES): no longer needed.
-
- * ext/ripper/depend (c): avoid nmake problem. fixed [ruby-dev:27191]
-
-Wed Sep 21 08:52:25 2005 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/token.c: correctly compute indentation of a block
- scalar's parent node. [ruby-talk:150620]
-
-Wed Sep 21 08:20:24 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * README.EXT, README.EXT.ja: add new features.
-
-Wed Sep 21 07:43:58 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (default_argv, Arguable#options): defaults strings
- to be parsed to Arguable instance.
-
-Wed Sep 21 02:44:09 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (path_check_0): disallow sticky world writable directory
- in PATH (and $LOAD_PATH). [ruby-dev:27226]
-
-Wed Sep 21 00:32:22 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_idiv): 1.div(1.0) should return integer value.
- [ruby-dev:27235]
-
-Tue Sep 20 22:25:43 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/wait/lib/nonblock.rb: disable on platforms non-blocking flag
- is not available. fixed: [ruby-dev:27187]
-
- * file.c (rb_stat_inspect): protoized function pointer.
-
-Tue Sep 20 18:23:04 2005 Tanaka Akira <akr@m17n.org>
-
- * eval.c (thread_mark): mark th->last_status. [ruby-dev:27179]
-
-Tue Sep 20 18:20:33 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/yaml.rb: require 'yaml/constants'. [ruby-core:5776]
-
-Tue Sep 20 17:48:34 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/xmlrpc/client.rb (XMLRPC::Client::do_rpc): add charset
- information to content-type header.[ruby-core:5127]
-
- * lib/xmlrpc/server.rb (CGIServer::serve): ditto.
-
- * lib/xmlrpc/server.rb (ModRubyServer::serve): ditto.
-
- * lib/xmlrpc/server.rb (WEBrickServlet::service): ditto.
-
-Tue Sep 20 17:26:42 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * test/webrick/test_cgi.rb: set ENV["PATH"] to CGIEnvPath on
- windows. bcc32's runtime is not installed into system directory,
- so it cannot be found without this setting. [ruby-dev:27166]
-
-Tue Sep 20 17:14:10 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * io.c: PIPE_BUF is not defined on BeOS. use _POSIX_PIPE_BUF instead.
- [ruby-dev:27185]
-
-Tue Sep 20 17:10:38 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/dbm/test_dbm.rb (TestDBM::test_s_open_error): remove
- test_s_open_error test to detect duplicate open.
- [ruby-dev:27202]
-
-Tue Sep 20 15:39:40 2005 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/emitter.c (syck_scan_scalar): prevent indicators from
- appearing alone or at the end of plain scalars. [ruby-core:5826]
-
- * ext/syck/emitter.c (syck_emit_scalar): treat typed scalar nodes
- as complex keys.
-
- * lib/syck.h: version 0.60.
-
- * lib/yaml/basenode.rb (YAML::BaseNode#at): transform keys during
- key searches.
-
- * ext/syck/rubyext.c: loading of binary-typed nodes. prevent
- emission of plain strings that look like symbols, but which aren't.
-
-Tue Sep 20 05:48:26 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * test/xmlrpc/test_webrick_server.rb (setup_http_server):
- should not include 'webrick/https' unless 'use_ssl' because
- it fails where openssl is not installed.
-
-Tue Sep 20 01:24:45 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (splat_value): use to_a to splat non Array object.
-
- * object.c (nil_to_a): remove nil.to_a. [experimental]
-
-Tue Sep 20 01:01:41 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/mathn.rb (Fixnum): remove debug print.
-
- * lib/rational.rb (Rational): ditto.
-
-Tue Sep 20 00:34:07 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_close): call rb_io_close() directly if io is a T_FILE
- object. [ruby-dev:27156]
-
-Mon Sep 19 18:58:10 2005 Minero Aoki <aamine@loveruby.net>
-
- * file.c (rb_file_chown): should accept nil. [ruby-dev:27171]
-
-Mon Sep 19 18:29:54 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (file_expand_path): allow pathnames to expand.
- [ruby-dev:27152]
-
-Mon Sep 19 15:12:15 2005 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/depend: do not make ripper/core.rb. [ruby-dev:26462]
-
-Mon Sep 19 14:49:19 2005 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/eventids2.c: add prefix `t' to tLAMBDA-related lexer
- events.
-
- * ext/ripper/lib/ripper/core.rb: updated.
-
-Mon Sep 19 14:39:46 2005 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (do_block): do_block event dispatches 2 args.
- [ruby-dev:26964]
-
- * ext/ripper/lib/ripper/core.rb: updated.
-
- * ext/ripper/tools/list-parser-event-ids.rb: check arity mismatch.
-
-Mon Sep 19 07:45:37 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_pkey.h, ossl_pkey_rsa.c, ossl_pkey_dsa.c:
- an instance variable "private" is added to OpenSSL::PKey class.
- this ivar is a flag that shows whether there is a private key
- in the instance.
-
- * ext/openssl/ossl_engine.c: (ossl_engine_load_privkey): set private
- key flag.
-
- * test/openssl/test_pkey_rsa.rb: add test about private detection.
-
-Mon Sep 19 06:38:03 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: method renaming: collect_methods ->
- collect_method.
-
-Mon Sep 19 05:58:59 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: use module_function instead of single extend.
-
- * test/fileutils/test_fileutils.rb: test existence of singleton
- methods.
-
-Mon Sep 19 05:32:41 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (remove_entry_secure): does not use chdir(2).
-
-Mon Sep 19 03:17:48 2005 Tanaka Akira <akr@m17n.org>
-
- * file.c (rb_thread_flock): wrap the flock system call by
- TRAP_BEG/TRAP_END to enable signals. [ruby-dev:27122]
-
- * ext/socket/socket.c (bsock_send): wrap the sendto and send system
- call by TRAP_BEG/TRAP_END to enable signals when writing to a socket
- which is full. [ruby-dev:27132]
-
- * io.c (rb_io_syswrite): wrap the write system call by
- TRAP_BEG/TRAP_END to run signal handler in syswrite method.
- [ruby-dev:27134]
-
-Mon Sep 19 01:07:38 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (Init_Numeric): should define Fixnum#div.
- [ruby-dev:27129]
-
- * file.c (rb_thread_flock): wrap flock(2) by TRAP_BEG and
- TRAP_END. [ruby-dev:27122]
-
- * file.c (rb_file_join): call FilePathValue() to all Pathnames to
- join. [ruby-dev:27127]
-
- * file.c (rb_get_path): call StringValueCStr() to ensure no nul
- bytes in path strings.
-
- * gc.c (garbage_collect): need value for return. [ruby-dev:27127]
-
-Sun Sep 18 02:10:47 2005 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml/rubytypes.rb: remove comments that are bungling up
- the rdoc and ri output. output symbols as plain scalars.
-
- * ext/syck/rubyext.c (syck_emitter_reset): emit headless
- documents always.
-
- * ext/syck/emitter.c (syck_scan_scalar): quote scalars with any
- kind of surrounding line space, tabs or spaces alike.
-
- * ext/syck/token.c: accept tabs as whitespace, not for indentation,
- but strip from plain scalars.
-
- * test/yaml/test_yaml.rb: remove outdated tests.
-
-Sun Sep 18 01:10:37 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (garbage_collect): return false if no GC run.
-
-Sat Sep 17 23:25:04 2005 sheepman <sheepman@sheepman.sakura.ne.jp>
-
- * lib/mathn.rb (Rational::inspect): should preserve original
- operand. [ruby-core:05806]
-
-Sat Sep 17 23:20:27 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::Cookie): should handle multiple values for a
- cookie name. [ruby-talk:156140]
-
- * test/socket/test_tcp.rb (TestTCPSocket::test_recvfrom): typo
- fixed. [ruby-dev:27123]
-
-Sat Sep 17 20:58:56 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.c (rb_w32_select): fixed deadlock bug.
- because select(2) modifies its fd_set arguments, it must be
- restored sometimes.
-
- * win32/win32.c (rb_w32_select): performance improvement when
- 'always readable/writable handles' and sockets are passed.
- sockets should be polled every time.
-
- require "net/http"
-
- Thread.new {
- loop do
- STDOUT.write(".") # busy on console (this is worst case though)
- end
- }
-
- # socket operation took long time. (sometimes timed out)
- Net::HTTP.start("www.ruby-lang.org") do |http|
- http.get("/cgi-bin/cvsweb.cgi/ruby/array.c?rev=1.179")
- end
-
-Sat Sep 17 14:54:40 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * test/ruby/test_readpartial.rb (test_open_pipe, test_with_stdio):
- these tests are working now, so turned on. (windows)
-
-Sat Sep 17 14:18:15 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.c (rb_w32_select): I hope performance problem was
- solved.
-
-Sat Sep 17 13:45:22 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.c (rb_w32_select): console support is back.
- but still has performance problem because I loosely took 1 second
- for wait time. I'll fix it later. (The reason I drastically changed
- the code is that I wanted to implement the fileset management as
- single function, and I was worried that if pipe or console
- was always available, socket may not be processed any time)
-
-Sat Sep 17 11:24:16 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.c (rb_w32_select): select for socket didn't work.
- this caused deadlock in drb test. this happened because GetFileType
- for socket handle returns FILE_TYPE_PIPE. Of course, it's not a
- pipe. So socket handle didn't reach winsock's select function.
-
- * win32/win32.c (rb_w32_select): read for pipe was still blocked
- even if writer handle was closed.
-
- r,w = IO.pipe
-
- Thread.new {
- sleep 3; puts "------- 1"
- w.puts("foo")
- sleep 3; puts "------- 2"
- w.puts("boo")
- sleep 3; puts "------- 3"
- w.close
- }
-
- until r.eof? # should break by w.close but didn't.
- puts r.gets
- end
-
- * win32/win32.c (rb_w32_select): temporary reverted console support
- but it'll be back soon.
-
-Sat Sep 17 10:42:13 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string and bg_eval_string
- should call Kernel.eval on caller's safe-level instead of slave's
- safe-level (Of course, the given script should be evaluated on
- slave's safe-level).
-
-Sat Sep 17 09:45:26 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_substr): should propagate taintness even for
- empty strings. [ruby-dev:27121]
-
- * string.c (rb_str_aref): should infect result if range argument
- is tainted. [ruby-dev:27121]
-
-Sat Sep 17 08:35:39 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/base.rb (RSS::Maker::ItemsBase#normalize): fixed
- strange RSS::Maker::Item#max_size behavior.
- Thanks to Kazuhiko <kazuhiko@fdiary.net>.
-
- * test/rss/test_maker_1.0.rb (RSS::TestMaker10#test_items): ditto.
-
-Sat Sep 17 08:02:53 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: supported DIGEST-MD5. Thanks, Mathieu Arnold.
-
- * lib/net/imap.rb: use fcall instead of send. Thanks, Satoru
- Takabayashi.
-
-Fri Sep 16 22:45:49 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_s_extname): empty string for path name ending with a
- period. fixed: [ruby-core:05651]
-
- * file.c (rb_file_join): smarter behavior at edge cases.
- fixed: [ruby-core:05706]
-
- * gc.c (rb_memerror, ruby_xmalloc, ruby_xrealloc, rb_newobj): just
- abandon if no memory available, when interpreter is not running.
- [ruby-dev:27104]
-
- * gc.c (garbage_collect): return whether GC could run.
-
- * dir.c (rb_push_glob): fix delimiter bug. fixed: [ruby-dev:27105]
-
- * dir.c (dir_s_aref, dir_s_glob): allow multiple patterns.
- [ruby-dev:27110]
-
- * win32/win32.c (cmdglob): enable brace expansion.
-
-Fri Sep 16 18:34:01 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/syck/node.c (syck_replace_str): was using return from the
- void function. a patch from MIYAMUKO Katsuyuki
- <miyamuko at mtb.biglobe.ne.jp>. [ruby-dev:27111]
-
-Fri Sep 16 14:48:48 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: fix typo on MultiTkIp#bg_eval_string
-
-Fri Sep 16 12:02:12 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/syck/rubyext.c (syck_resolver_transfer): remove C++ style
- comment (//). [ruby-core:05793]
-
-Fri Sep 16 00:17:03 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/logger/test_logger.rb: unintentionally overwritten changes by
- Usa. reverted.
-
-Fri Sep 16 00:03:11 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb (WEBrick::CGI::Socket#initialize): should set
- $stdout.binmode.
-
-Thu Sep 15 23:25:21 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/{soap,wsdl,xsd}, test/{soap,wsdl,xsd}: imported soap4r/1.5.5.
-
- #nnn is a ticket number at http://dev.ctor.org/soap4r
-
- * SOAP
-
- * allow to configure an envelope namespace of SOAP request. (#124)
- TemporaryNamespace = 'http://www.w3.org/2003/05/soap-envelope'
- @client.options["soap.envelope.requestnamespace"] =
- TemporaryNamespace
- @client.options["soap.envelope.responsenamespace"] =
- TemporaryNamespace
- @client.do_proc(...)
-
- * let SOAP request XML indent space configurable. see
- "soap.envelope.no_indent" option. (#130)
-
- * let external CES configurable.
- ex. client["soap.mapping.external_ces"] = 'SJIS'. $KCODE is used
- by default. (#133)
- external CES ::= CES used in Ruby object of client and server
- internal CES ::= CES used in SOAP/OM
-
- * add iso-8859-1 external CES support. (#106)
-
- * fixed illegal 'qualified' handling of elements. it caused
- ASP.NET interoperability problem. (#144)
-
- * added 'soap.envelope.use_numeric_character_reference' (boolean)
- option to let query XML use numeric character reference in XML,
- not plain UTF-8 character. !GoogleSearch server seems to not
- allow plain UTF-8 character since 2005-08-15 update. (#147)
-
- * SOAP::Header::SimpleHeader (de)serialization throws an exception
- on !SimpleHeader.on_(in|out)bound when header is a String. so we
- could not use a simple single element headerItem. fixed. thanks
- to emil. (#129)
-
- * out parameter of rpc operation did not work. (#132)
-
- * follow HTTP redirect only if using http-access2. (#125) (#145)
-
- * add a workaround for importing an WSDL whose path begins with
- drive letter. (#115)
-
- * WSDL
-
- * SOAP Data which is defined as a simpletype was not mapped
- correctly to Ruby obj when using wsdl2ruby.rb generated classdef
- file. (#123)
-
- * rpc/literal support. (#118)
-
- * re-implemented local element qualify/unqualify control. handles
- elementFormDefault and form in WSDL. (#119)
-
- * Array of an element which has simpleType causes a crash. (#128)
-
- * parameterOrder may not contain return part so it can be shorter
- than parts size. Thanks to Hugh. (#139)
-
- * Samples
-
- * added !BasicAuth client sample. (#117)
-
- * added Base64 client/server sample.
-
- * added Flickr SOAP interface client sample. (#122)
-
- * added !SalesForce client sample. (#135)
-
- * updated Thawte CA certificate for !GoogleAdWords sample.
-
- * updated a client script with the newer version made by Johan.
- thanks!
-
- * shortened long file names. (#120)
-
- * fixed typo in authheader sample. (#129)
-
- * updated deprecated method usage. (#138)
-
-Thu Sep 15 22:40:27 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_signal.rb (test_exit_action): skip the test using
- fork on fork-less platforms.
-
-Thu Sep 15 13:54:33 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb: add :read_timeout option.
- [ruby-core:4848]
-
-Thu Sep 15 11:39:18 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/dialog.rb: If a dialog does not show up yet,
- TkDialogObj#name raises an exception. [ruby-talk:156109]
-
-Thu Sep 15 11:01:58 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_pipe_exec): remove unnecessary CloseHandle().
-
- * win32/win32.c (extract_console_fd, peek_console): new functions.
-
- * win32/win32.c (rb_w32_select): check consoles by polling them.
-
-Thu Sep 15 00:18:24 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/net/telnet.rb (Net::Telnet::waitfor): replace sysread with
- readpartial. [ruby-talk:127641]
-
-Wed Sep 14 23:28:28 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (collect_file_fd): rename from extract_file_fd.
-
- * win32/win32.c (extract_pipe_fd, peek_pipe): new functions.
-
- * win32/win32.c (rb_w32_select): check pipes by polling them.
-
-Wed Sep 14 22:40:26 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (ruby_glob): glob function not using ruby exception system.
-
-Wed Sep 14 17:24:22 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c: changed `foo (*bar)_((boo))' to `foo (*bar)(boo)`.
-
- * enumerator.c, eval.c, gc.c, intern.h, io.c, process.c, ruby.c,
- ruby.h, signal.c: ditto.
-
-Wed Sep 14 15:06:22 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * bignum.c: changed `foo _((boo))' to `foo(boo)`. [ruby-dev:27056]
-
- * defines.h, dir.c, dln.h, enumerator.c, env.h, error.c, eval.c, file.c,
- gc.c, hash.c, inits.c, intern.h, io.c, lex.c, marshal.c, missing.h,
- node.h, numeric.c, pack.c, process.c, re.h, ruby.c, ruby.h, rubyio.h,
- rubysig.h, signal.c, sprintf.c, st.h, string.c, struct.c, time.c,
- util.c, util.h, variable.c: ditto.
-
-Tue Sep 13 22:09:40 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/logger.rb (Logger): added formatter accessor to logger for
- dictating the way in which the logger should format the messages it
- displays. Thanks to Nicholas Seckar (cf. [ruby-talk:153391]) and
- Daniel Berger.
-
- * lib/logger.rb (Logger): added VERSION constant.
-
- * lib/logger.rb: removed document for LogDevice. It is an
- implementation detail and is not a public interface.
-
- * test/logger/test_logger.rb: added tests.
-
-Tue Sep 13 21:47:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (BEGIN_CALLARGS): pop halfly pushed status.
- fixed: [ruby-dev:26881]
-
-Tue Sep 13 20:24:37 2005 Tanaka Akira <akr@m17n.org>
-
- * ruby.h (PRINTF_ARGS): new macro for printf style argument checking.
-
-Tue Sep 13 15:41:29 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: wrote documentation of HTTPRequest/HTTPResponse
- classes.
-
-Tue Sep 13 14:27:47 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * string.c, missing.h: failed to build on powerpc-apple-darwin7.9.0
- because of crypt argument's constness mismatch. (I hope this works)
- (http://mput.dip.jp/autobuild/ruby-trunk/log/20050913T110001.gz)
-
-Tue Sep 13 12:33:05 2005 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml.rb: reworking YAML::Stream to use the new
- emitter.
-
- * lib/yaml/stream.rb: ditto.
-
- * lib/yaml/rubytypes.rb: added Object#yaml_new.
-
- * lib/yaml/tag.rb: the tag_subclasses? method now
- shows up in the class. allow taguri to be set using an accessor.
- continue support of Object#to_yaml_type.
-
- * ext/syck/rubyext.c: new emitter code. yaml_new and yaml_initialize
- get called, should they be present. consolidated all the diaspora of internal node types into the family below YAML::Syck::Node -- Map,
- Seq, Scalar -- all of whom are SyckNode structs pointing to
- Ruby data. moved Object#yaml_new into the node_import and made it
- the default behavior. the target_class is always called with
- yaml_new, prepended a parameter, which is the klass. loaded nodes
- through GenericResolver show their style.
- new Resolver#tagurize converts type ids to taguris.
-
- * ext/syck/implicit.re: were 'y' and 'n' seriously omitted??
-
- * ext/syck/emitter.c: renovated emitter, walks the tree in advance.
- consolidated redundant block_styles struct into
- the scalar_style struct. (this means loaded nodes can now
- be sent back to emitter and preserve at least its very basic
- formatting.)
-
- * ext/syck/gram.c: headless documents of any kind allowed.
-
- * ext/syck/node.c: new syck_replace_str methods and syck_empty_*
- methods for rewriting node contents, while keeping the ID
- and other setup info. added syck_seq_assign.
-
- * ext/syck/syck.h: reflect block_styles and new node functions.
-
-Tue Sep 13 08:09:18 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/ostruct.rb (new_ostruct_member): Object#send no longer call
- private methods. [ruby-dev:27044]
-
- * test/rss/test_dublincore.rb, test/rss/test_trackback.rb,
- test/ruby/test_eval.rb, test/socket/test_socket.rb: ditto.
-
- * test/ruby/test_lambda (test_call_with_block): lambda makes new scope
- for formal block parameter.
-
-Tue Sep 13 01:17:45 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_save_safe_level): no need to restrict safe level
- memoize in $SAFE>=3. [ruby-dev:27050]
-
-Tue Sep 13 00:02:33 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (apply2files): stricter callback definition.
-
- * file.c (rb_path_check): constified.
-
-Mon Sep 12 20:53:06 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * test/openssl/test_pkcs7.rb (test_enveloped): skip this test
- to avoid a bug of PKCS7_encrypt() (only if ext/openssl is
- compiled with OpenSSL-0.9.7d or earlier versions).
- http://www.mail-archive.com/openssl-dev@openssl.org/msg17376.html
-
-Mon Sep 12 20:32:00 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.[hc] (rb_w32_argv_size, ...): reverted my latest change
- to avoid incompatible pointer warning. (mingw32)
-
-Mon Sep 12 19:58:53 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dln.c: avoid warning of const to non-const conversion.
- [ruby-dev:27041]
-
- * eval.c, io.c, ruby.c: ditto.
-
-Mon Sep 12 19:26:29 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * array.c: moved to ANSI function style from K&R function style.
- (used protoize on windows, so still K&R remains on #ifdef part of
- other platforms. And `foo _((boo))' stuff is still there)
- [ruby-dev:26975]
-
- * bignum.c, class.c, compar.c, dir.c, dln.c, dmyext.c, enum.c,
- enumerator.c, error.c, eval.c, file.c, gc.c, hash.c, inits.c,
- io.c, main.c, marshal.c, math.c, numeric.c, object.c, pack.c,
- prec.c, process.c, random.c, range.c, re.c, regcomp.c, regenc.c,
- regerror.c, regexec.c, regparse.c, regparse.h, ruby.c, signal.c,
- sprintf.c, st.c, string.c, struct.c, time.c, util.h, variable.c,
- version.c: ditto.
-
-Mon Sep 12 14:03:33 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * test/dbm/test_dbm.rb: remove locking test, which may not be
- supported on some platforms. [ruby-dev:27030]
-
-Sun Sep 11 23:23:02 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (starttls): supported the STARTTLS command.
-
-Sun Sep 11 22:18:07 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * bin/erb (ERB::Main#run): set ERB#filename so that it is used
- when reporting syntax/runtime errors. Tabs converted to spaces.
-
-Sat Sep 10 22:34:19 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c, bignum.c: protoize.
-
-Sat Sep 10 00:23:01 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (splat_value): simpler and consistent array conversion
- for argument splat. [yarv-dev:599]
-
-Fri Sep 9 16:45:25 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_times): make empty strings to keep taintness,
- and a little improvement. [ruby-dev:26900]
-
- * ext/iconv/iconv.c (iconv_try), ext/iconv/extconf.rb: get rid of meta
- characters in command line option. fixed: [ruby-talk:155369]
-
- * ext/iconv/iconv.c: protoized.
-
-Thu Sep 8 14:58:11 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * merged a patch from Takahiro Kambe <taca at back-street.net> to
- support DragonFly BSD. [ruby-dev:26984]
-
-Thu Sep 8 13:14:57 2005 Tadashi Saito <shiba@mail2.accsnet.ne.jp>
-
- * missing/strchr.c (strrchr): fixed a bug in detecting NUL in a
- string. [ruby-dev:26985]
-
-Wed Sep 7 17:29:27 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_engine.c (ossl_engine_s_by_id):
- OpenSSL::Engine.by_id calls given block before calling
- ENGINE_init (block parameter is the return value of this method
- itself). this functionality is useful to load dynamic shared
- engines.
-
- require "openssl"
- pkcs11 = OpenSSL::Engine.by_id("dynamic"){|e|
- e.ctrl_cmd("SO_PATH", "/usr/lib/opensc/engine_pkcs11.so")
- e.ctrl_cmd("LIST_ADD", "1")
- e.ctrl_cmd("LOAD")
- }
- pkcs11.ctrl_cmd("PIN", "secret")
- key = pkcs11.load_private_key
-
- * ext/openssl/ossl_engine.c (ossl_engine_ctrl_cmd): new method
- OpenSSL::Engine#ctrl_cmd. it wraps ENGINE_ctrl_cmd_string.
-
- * ext/openssl/ossl_engine.c (ossl_engine_get_cmds): new method
- OpenSSL::Engine#cmds. it returns engine command definitions.
-
-Wed Sep 7 15:48:37 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_asn1.c (asn1str_to_str): new function.
-
- * ext/openssl/ossl_pkcs7.c: new class OpenSSL::PKCS7::RecipientInfo.
- this class wraps PKCS7_RECIP_INFO struct.
-
- * ext/openssl/ossl_pkcs7.c: OpenSSL::PKCS7::Signer is renamed to
- OpenSSL::PKCS7::SignerInfo. ("Signer" remains as an alias of
- SignerInfo.)
-
- * test/openssl/test_pkcs7.rb: new file.
-
-Wed Sep 7 12:55:08 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb: abolish mod === tempfile to avoid a problem
- [ruby-dev:26967].
-
-Wed Sep 7 10:45:15 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_switch): convert all exceptions to
- SystemExit. fixed: [ruby-core:05724]
-
- * eval.c (rb_thread_terminated): show backtrace before propagate
- exceptions to main thread.
-
-Wed Sep 7 09:21:41 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.[hc] (rb_w32_utime): constified.
-
- * win32/win32.h (rb_w32_stat): added prototype.
-
- * win32/win32.[hc] (rb_w32_argv_size,rb_w32_join_argv,rb_w32_aspawn):
- changed `char *const *' to `const char *const *'. (constify string)
-
-Wed Sep 7 08:35:04 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, configure.in (MINIOBJS): miniruby on HP-UX can not load
- extension libraries.
-
- * bignum.c (bignew_1, bigadd): K&R style argument actually can't be
- defined as char.
-
- * missing/vsnprintf.c: ANSI compiler supports const keyword.
-
- * ext/digest/sha2/extconf.rb: reject platforms which has inttypes.h
- but no 64bit integer.
-
- * lib/mkmf.rb (what_type?): guesstimate type.
-
- * ext/etc/etc.c (setup_passwd), ext/etc/extconf.rb: pw_age might be
- char*. fixed: [ruby-core:05470]
-
-Wed Sep 7 08:32:07 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_times): should taint empty strings as well.
-
- * object.c (Init_Object): make class_variable_{get,set} public.
- [ruby-dev:26965]
-
-Mon Sep 5 22:28:46 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stmt, mlhs_node, lhs, arg, method_call): aref_args might be
- nothing. fixed: [ruby-dev:26952]
-
- * ext/ripper/eventids2.c: added new tokens. fixed: [ruby-dev:26952]
-
-Mon Sep 5 17:03:07 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/find.rb: should raise ENOENT if root entry does not exist.
- [ruby-list:41054]
-
- * lib/ostruct.rb: a patch from Florian Gross <florgro at gmail.com>
- merged to allow recursive inspect (and to_s) for OpenStruct.
- [ruby-core:05532]
-
-Mon Sep 5 08:20:19 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/observer.rb: a patch from nornagon <nornagon at gmail.com>
- merged to allow arbitrary names for update methods.
- [ruby-core:05416]
-
-Mon Sep 5 07:01:12 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/openssl/lib/openssl/buffering.rb (Buffering#do_write):
- should clear data from the buffer which already been output.
-
-Sun Sep 4 15:01:35 2005 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (f_arg): Ripper should not do semantic check.
- [ruby-dev:26948]
-
-Sat Sep 3 23:52:35 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_fcall): new method to avoid inefficiency of
- obj.instance_eval{send(...)} tricks.
-
-Sat Sep 3 13:59:31 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Pathname#descend): Pathname.new("./a/b/c").descend
- didn't yield "."
- (Pathname#ascend): ditto.
-
-Fri Sep 2 23:51:54 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (f_arg): f_norm_arg is a VALUE in ripper, not an ID.
- fixed: [ruby-dev:26942]
-
- * lib: do not use __send__ to access private methods. [ruby-dev:26935]
-
-Thu Sep 1 17:11:25 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): wrong condition for $SAFE restoration.
-
-Thu Sep 1 14:12:45 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: On Tcl8.5, MultiTkIp#invoke_hidden doesn't
- work (gives wrong order of arguments).
-
- * ext/tk/lib/multi-tk.rb: add MultiTkIp#invoke_hidden_on_namespace
- to support '-namespace' option of 'interp invokehidden' command
- on Tcl8.5.
-
-Wed Aug 31 14:41:30 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (OPTFLAGS): default global optimization to
- disabled for all VC++ versions. fixed: [ruby-dev:26897]
-
-Wed Aug 31 10:36:09 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * process.c (proc_detach, proc_setmaxgroups): missing argument type
- declaration. (I recommend ANSI-style function)
-
-Wed Aug 31 06:59:01 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_scan): already String#scan behaves differently
- regarding if block is given.
-
-Tue Aug 30 23:49:34 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c, dir.c, enum.c, hash.c, io.c, range.c, string.c, struct.c:
- let enumerable methods return Enumerator. [ruby-dev:26924]
-
- * intern.h (RETURN_ENUMERATOR): utility macro for enumerable methods.
-
-Tue Aug 30 23:25:45 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/debug.rb: no need to restart at exit.
-
-Tue Aug 30 23:20:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_rescue2): initialization miss. fixed: [ruby-dev:26917]
-
- * lib/mkmf.rb (xsystem, xpopen): no longer expand by Config.
-
- * lib/mkmf.rb (link_command, cc_command, cpp_command): expand
- variables at once, and quote hdrdir. fixed: [ruby-core:05680]
-
- * lib/mkmf.rb (libpathflag): quote paths.
-
-Tue Aug 30 19:34:27 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/digest/md5/md5ossl.h, ext/digest/rmd160/rmd160ossl.h,
- ext/digest/sha1/sha1ossl.h: include <stddef.h> to avoid
- error in compilation with OpenSSL-0.9.8. [ruby-list:41068]
-
-Tue Aug 30 16:19:40 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/init.rb: bug fix. [ruby-dev: 26920]
-
-Tue Aug 30 16:13:00 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_count): new method. [ruby-dev:26895]
-
-Tue Aug 30 12:45:15 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_send): do not call private methods if the receiver
- is specified. [ruby-talk:153672]
-
-Mon Aug 29 19:47:18 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/rdoc/usage.rb: improper exceptions. [ruby-dev:26870]
-
- * lib/rdoc/usage.rb: support the case when non-ruby code exists before
- shebang. (this is needed when ri.bat is executed on windows)
-
-Mon Aug 29 18:58:05 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/init.rb: make IRB -I option that is same behavior for ruby.
- [ruby-dev:26872]
-
- * lib/irb/locale.rb: support to print help message when OS locale is
- ja_JP.utf-8. [ruby-dev:26872]
-
-Mon Aug 29 01:43:05 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Pathname#descend): new method.
- (Pathname#ascend): ditto.
-
-Mon Aug 29 00:35:09 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/time.rb: require 'date/format' instead of 'parsedate'.
- (Time.parse): extract fractional seconds using Date._parse.
- (Time.strptime): extract fractional seconds using Date._strptime.
- [ruby-talk:153859]
-
-Sat Aug 27 20:13:31 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/curses/curses.c ({curses,window}_clrtoeol): added. suggested
- by Reyn Vlietstra.
-
- * ext/curses/curses.c: chtype in curses is not `char', rather `long'.
- [ruby-Bugs:2298]
-
- * ext/curses/view.rb: String =~ String is deprecated.
-
-Thu Aug 25 15:48:58 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/win32ole/win32ole.c: suppress warnings. (win32)
-
-Wed Aug 24 11:01:26 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/logger/test_logger.rb (test_shifting_size): should close log
- device before unlink, since some platform cannot unlink opened
- file.
-
-Tue Aug 23 06:07:02 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/digest.rb: added SHA224, SHA256, SHA384 and SHA512.
- these features are enabled if this library is compiled with
- OpenSSL 0.9.8 or later.
-
- * test/openssl/test_digest.rb: add test for new digests.
-
-Tue Aug 23 05:47:04 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ns_spki.c (ossl_spki_initialize): try to decode
- the argument as a string.
-
- * ext/openssl/ossl_ns_pki.c (ossl_spki_to_der): new method.
-
- * ext/openssl/ossl_x509store.c (ossl_x509store_initialize): should
- set @time to avoid warning.
-
- * ext/openssl/ossl_x509store.c (ossl_x509store_set_default_paths,
- X509_STORE_add_cert, X509_STORE_add_crl): should raise error if
- wrapped functions fails.
-
- * ext/openssl/ossl_ssl.c (ossl_sslctx_set_ciphers): fix error message.
-
- * ext/openssl/ossl_x509req.c (ossl_x509req_set_attributes): get rid
- of unused variable.
-
- * test/openssl/test_ns_spki.rb: add new file.
-
- * test/openssl/test_x509store.rb: add test for error.
-
-Tue Aug 23 01:11:40 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * sprintf.c (ruby__sfvwrite): should move `buf' to the end of
- `result'. [ruby-dev:26859]
-
-Mon Aug 22 23:51:19 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: ONIG_OPTION_CAPTURE_GROUP conflicts with
- RE_OPTION_ONCE. [ruby-dev:26852]
-
-Mon Aug 22 20:11:35 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing/vsnprintf.c (BSD__sprint): needs to call vwrite function
- pointer. fixed: [ruby-dev:26854]
-
-Sat Aug 20 23:55:25 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_yylex): update paren_nest for brackets [].
-
-Sun Aug 21 00:10:23 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/wsdl/xmlSchema/importer.rb (WSDL::XMLSchema::Importer#fetch): add
- a workaround for importing an WSDL whose path begins with drive
- letter. [ruby-dev:26242]
-
-Sat Aug 20 22:05:25 2005 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * regexec.c (code_is_in_cclass_node): check code size.
- [ruby-dev:26840]
-
-Sat Aug 20 22:37:13 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/logger.rb (write, shift_log?, shift_log): file shifting race
- condition bug fixed. [ruby-dev:26764]
-
- * test/logger/test_logger.rb: tests.
-
-Fri Aug 19 18:13:39 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/time.rb (Time.apply_offset): fix a problem with last day of
- month. reported by Lucas Nussbaum. [ruby-talk:152866]
-
-Thu Aug 18 11:05:36 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (socketpair_internal): need to call open_ifs_socket()
- to create sockets instead of winsock's socket().
- fixed: [yarv-dev:581]
-
-Wed Aug 17 23:58:05 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (terminate_process): take String message.
-
- * eval.c (rb_thread_switch): propagate the exception caused thread
- termination directly. fixed: [ruby-core:05552]
-
-Wed Aug 17 21:20:05 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/lib/kconv.rb: ensure that symbol_to_option is private_class_method
- and all other methods are module_function
- fixed: [ruby-dev:26808]
-
-Wed Aug 17 00:05:46 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_add_method): preserve safe level in the environment
- where a method is defined .
-
- * eval.c (rb_call0): restore preserved safe level in the method
- execution.
-
- * parse.y (lambda): need separate block variable stack
- manipulation and lpar_beg maintenance. based on a patch found
- in [ruby-core:05551] from Mauricio Fernandez <mfp at acm.org>.
-
- * parse.y (parser_yylex): adjust lpar_beg after tLAMBEG and
- kDO_LAMBDA. [ruby-core:05551]
-
-Mon Aug 15 07:24:38 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * intern.h (rb_check_to_integer): add declaration.
-
- * object.c (rb_to_integer, rb_check_to_integer): argument constified.
-
-Mon Aug 15 00:38:51 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_rescue2): reduce PUSH_TAG() as well as NODE_RESCUE.
- [ruby-dev:26800]
-
- * range.c (range_check, range_init): reduce useless exceptions.
-
-Mon Aug 15 00:34:11 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yycompile): remove unreachable code. [yarv-dev:570]
-
-Sat Aug 13 22:16:12 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (remove_entry_secure): forgot final chdir.
-
-Sat Aug 13 22:07:49 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (remove_entry_secure): uses chdir(2) and check
- if current directory is correct. [ruby-dev:26100] [ruby-dev:26226]
-
-Sat Aug 13 21:11:05 2005 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE_VARIANT class.
-
- * ext/win32ole/tests/testall.rb: ditto.
-
- * ext/win32ole/tests/testOLEVARIANT.rb: ditto.
-
-Sat Aug 13 18:51:26 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_block_pass): distinguish current block from others.
- fixed: [ruby-dev:26274]
-
- * ext/stringio/stringio.c (strio_set_string): disallow nil.
- http://www.rubyist.net/~nobu/t/20050811.html#c05
-
-Sat Aug 13 08:01:59 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/lib/kconv.rb: Kconv.kconv is now alias of Kconv.conv
- * ext/nkf/lib/kconv.rb: remove nkf dependent symbols from SYMBOL_TO_OPTION
-
-Fri Aug 12 17:06:53 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (f_larglist): allow optional arguments even when
- parentheses are omitted. based on Nobu's patch from
- http://www.rubyist.net/~nobu/t/20050805.html
-
- * parse.y (parser_yylex): update & maintain lpar_beg for detect
- lambda parameters.
-
-Thu Aug 11 23:29:03 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c: keep holding string after closed.
-
-Thu Aug 11 20:48:40 2005 Tadashi Saito <shiba@mail2.accsnet.ne.jp>
-
- * numeric.c (fix_equal, fix_cmp, fix_gt, fix_ge, fix_lt, fix_le):
- reduce coercing when a method knows about a operand type.
- [ruby-dev:26789]
-
-Thu Aug 11 13:01:48 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss: fixed sort bug. [ruby-list:41018]
-
- * lib/rss/1.0.rb (RSS::RDF::Channel#setup_maker_attributes):
- removed self.
-
- * lib/rss/maker/base.rb (RSS::Maker::ItemsBase#<=>): use #date
- instead of @date.
- (RSS::Maker::Base::self.def_array_element): added #size.
-
- * lib/rss/maker/1.0.rb
- (RSS::Maker::RSS10::Channel#to_rss,
- RSS::Maker::RSS10::Items::Item#to_rss): cleared dc_dates set
- upped by using #date.
-
- * lib/rss/maker/dublincore.rb
- (RSS::Maker::ChannelBase, RSS::Maker::ItemsBase::ItemBase):
- fixed opposite alias.
-
- * test/rss/test_setup_maker_1.0.rb
- (RSS::TestSetupMaker10::test_setup_maker_items_sort): added some
- tests for RSS::Maker::ItemsBase#do_sort.
-
-Wed Aug 10 12:01:20 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb: simplifies Delegator classes; SimpleDelegator
- now uses method_missing for all methods.
-
-Wed Aug 10 10:38:50 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_mul0): multiply two numbers (x, y) without
- normalizing the result. x should be a big number.
- [ruby-dev:26778]
-
- * bignum.c (rb_big_pow): use rb_big_mul0() instead of
- rb_big_mul().
-
- * array.c (rb_ary_or, rb_ary_and, rb_ary_plus, rb_ary_diff):
- revert the change on 2005-08-03. Set operation on other item
- should have in separate methods.
-
- * parse.y (shadowing_lvar_gen): warn when arguments shadows
- external local variables.
-
- * parse.y (f_opt): optional arguments should not clobber external
- local variables.
-
- * parse.y (f_rest_arg): rest arguments should not clobber external
- local variables.
-
-Wed Aug 10 10:29:40 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: fix bug on handling __ruby2val_optkeys().
-
- * ext/tk/lib/tk/itemconfig.rb: fix bug on handling
- __item_ruby2val_optkeys().
-
- * ext/tk/lib/tk/canvas.rb: didn't check __item_ruby2val_optkeys().
-
- * ext/tk/lib/tkextlib/blt/component.rb: ditto.
-
-Tue Aug 9 21:53:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (formal_assign): let default values override
- arguments to zsuper. fixed: [ruby-dev:26743]
-
-Tue Aug 9 20:30:19 2005 Tadashi Saito <shiba@mail2.accsnet.ne.jp>
-
- * bignum.c (rb_big_coerce): allow bignum x bignum coercing.
- [ruby-dev:26778]
-
-Tue Aug 9 15:12:04 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: remove dangerous 'rb_jump_tag's.
-
- * ext/tk/lib/tk.rb: add __val2ruby_optkeys and __ruby2val_optkeys to
- help to convert option values between ruby and tcl.
-
- * ext/tk/lib/tk/itemconfig.rb: add __item_val2ruby_optkeys and
- __item_ruby2val_optkeys to help to convert option values between
- ruby and tcl.
-
- * ext/tk/lib/tk/radiobutton.rb: use __ruby2val_optkeys for 'variable'
- option (for the reason of backward compatibility).
-
- * ext/tk/lib/tk/composite.rb: clarify the arguments of super().
-
- * ext/tk/lib/tk/spinbox.rb: ditto.
-
- * ext/tk/lib/tk/text.rb: ditto.
-
- * ext/tk/lib/tk/validation.rb: ditto.
-
- * ext/tk/lib/tkextlib/*: support to treat tkvariable-type
- configure options.
-
-Tue Aug 9 08:24:05 2005 Mauricio Fernandez <mfp@acm.org>
-
- * parse.y (f_block_arg), eval.c (rb_yield_0): deal with dynamic
- variable lambda arguments. [ruby-core:05540]
-
-Mon Aug 8 22:13:48 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (assign): deal with new block argument.
- fixed: [ruby-core:05536]
-
- * eval.c (rb_node_arity): follow change of NODE_ARGS.
- fixed: [ruby-dev:26761]
-
-Mon Aug 8 21:28:13 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * test/ruby/test_fnmatch.rb: separated from test_file.rb.
-
-Mon Aug 8 20:40:35 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_method.rb: added. [ruby-dev:26761]
-
-Mon Aug 8 01:26:37 2005 Mauricio Fernandez <mfp@acm.org>
-
- * parse.y (f_larglist): mistake in syntax rule. [ruby-core:05535]
-
-Mon Aug 8 05:16:55 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl.c (ossl_raise): should use ERR_peek_last_error
- to get last error on the current thread. And should report
- if errors are on the stack while OpenSSL.debug is true.
-
- * ext/openssl/ossl.c (ossl_get_errors): new method for debugging
- this library.
-
-Mon Aug 8 05:15:19 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpproxy.rb (HTTPProxyServer#initialize),
- lib/webrick/httpserver.rb (HTTPServer#initialize),
- lib/webrick/httpservlet/cgihandler.rb (CGIHandler#initialize),
- lib/webrick/httpservlet/erbhandler.rb (ERBHandler#initialize),
- lib/webrick/httpservlet/filehandler.rb(DefaultFileHandler#initialize):
- super (called with no arguments) takes default value of optional
- arguments. [ruby-dev:26743]
-
- * lib/webrick/httputils.rb: add a media-type "text/html" for .xhtml.
-
-Sun Aug 7 23:52:39 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_super.rb: added optional arg tests. [ruby-dev:26743]
- the tests expects 1.8 behavior at this time.
-
-Sat Aug 6 12:35:24 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/{tk.rb,tk/itemconfig.rb}: configure creates
- TkVariable if key name is 'variable' or 'textvariable'
- by default. [ruby-dev:26749]
-
- * ext/tk/lib/tk/{label,radiobutton}.rb: removed its own
- {variable,textvariable} function.
-
- * ext/tk/lib/tk/variable.rb: retains backward compatibility.
-
-Fri Aug 5 12:48:31 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/tcltklib.c: fixed memory leak when tk_funcall raised
- exception. (copies argv into heap in tk_funcall instead of
- caller)
-
-Fri Aug 5 12:36:40 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): need to convert path separator
- before invoking install command.
-
-Fri Aug 5 08:08:05 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (return_jump): fix "can't across thread" error message
- when no thread associated.
- http://www.namikilab.tuat.ac.jp/~sasada/diary/200507.html#d31
-
-Fri Aug 5 00:25:12 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/tcltklib.c: refactoring - extract ruby string <->
- tcl object conversion as get_str_from_obj and get_obj_from_str.
-
-Fri Aug 5 00:19:33 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enumerator.c (Init_Enumerator): provided features should have
- extensions.
-
- * eval.c (rb_feature_p): returns type of the feature instead of
- extension.
-
- * eval.c (search_required): ruby library should be prior to statically
- linked extensions. fixed: [ruby-dev:26711]
-
- * eval.c (formal_assign): returns position of rest arguments variable.
-
- * parse.y (f_rest_arg): use anonymous variable for rest arguments.
- fixed: [ruby-dev:26647]
-
- * extmk.rb (extmake): needs to be wrapped in an Array.
-
-Thu Aug 4 20:03:18 2005 Tadashi Saito <shiba@mail2.accsnet.ne.jp>
-
- * numeric.c (Init_Numeric): do not share implementation among
- Fixnum#/ and Fixnum#div. [ruby-core:05531]
-
-Thu Aug 4 18:38:36 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: cannot compile for Tcl7.6/Tk4.2.
-
- * ext/tk/tcltklib.c: add nativethread consistency check.
-
- * ext/tk/stubs.c: ditto.
-
- * ext/tk/lib/tk.rb: forgot to define TclTkIp.encoding and encoding=
- when Tcl is 7.6 or 8.0.
-
- * ext/tk/lib/tk/wm.rb: support to make some methods as options of
- root or toplevel widget. [ruby-talk:150336]
-
- * ext/tk/lib/tk/root.rb: ditto.
-
- * ext/tk/lib/tk/toplevel.rb: ditto.
-
- * ext/tk/lib/tkextlib/SUPPORT_STATUS: update RELEASE_DATE
-
-Thu Aug 4 13:30:15 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_div): should not convert the result into
- integer. [ruby-core:05524]
-
-Thu Aug 4 08:03:39 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): should not modify $mflags for each
- extensions.
-
-Thu Aug 4 00:25:48 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk, Makefile.in, {bcc32,win32,wince}/Makefile.sub: integrated
- macro definitions.
-
- * bcc32/Makefile.sub: LIBRUBY_SO should use DLDOBJS, not EXTOBJS.
-
- * {win32,wince}/Makefile.sub: separate config.h for compiler versions.
-
-Thu Aug 4 00:24:59 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c: replacing is no longer needed.
-
-Wed Aug 3 21:59:16 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/variable.rb: TkVariable#trace didn't work on
- TkVariable retrieved from TkVariable.new_hash.ref. [ruby-dev:26721]
-
-Wed Aug 3 12:40:28 2005 Tadashi Saito <shiba@mail2.accsnet.ne.jp>
-
- * numeric.c (fix_plus): reduce coercing when a method knows about
- a operand type. [ruby-dev:26723]
-
- * numeric.c (fix_minus, fix_mul, fix_quo, fix_div, fix_mod,
- fix_divmod, fix_pow): ditto.
-
- * bignum.c (rb_big_div, rb_big_modulo): export to reduce
- coercing.
-
-Wed Aug 3 10:13:52 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * configure.in, {bcc32,win32,wince}/Makefile.sub (HAVE_SNPRINTF,
- HAVE_VSNPRINTF): use win32/win32.c's implementation instead of
- missing/vsnprintf.c's.
-
- * win32/win32.[ch] (rb_w32_snprintf, rb_w32_vsnprintf): reverted.
-
-Wed Aug 3 10:05:08 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check vsnprintf() and snprintf().
-
- * sprintf.c, missing/vsnprintf.c: made vsnprintf() and snprintf()
- private. fixed: [ruby-dev:26651]
-
-Wed Aug 3 08:22:13 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (ruby_connect): revert [ruby-talk:111654]
- changes at 2004-09-07. [ruby-dev:26656]
-
-Wed Aug 3 06:53:35 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_or): wraps the operand in an array if it is not
- an array. [ruby-talk:150495] [EXPERIMENTAL]
-
- * array.c (rb_ary_and, rb_ary_plus, rb_ary_diff): ditto.
-
-Tue Aug 2 10:23:12 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/tcltklib.c: use Tcl_[GS]etVar2Ex instead of
- Tcl_Obj[GS]etVar2. (avoid Tcl_NewStringObj on supported platforms)
-
- * ext/tk/tcltklib.c: use ip_{get,set,unset}_variable2_core from
- ip_{get,set,unset}_variable.
-
- * ext/tk/tcltklib.c: replaced Tcl_Panic with rb_bug.
-
-Tue Aug 2 01:40:38 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/ping.rb (Ping.pingecho): should rescue StandardError.
- [ruby-dev:26677]
-
-Mon Aug 1 19:02:23 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/tcltklib.c: refactoring - replaced rb_ivar_defined &
- rb_ivar_get with single rb_attr_get call.
-
-Mon Aug 1 18:44:08 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/tcltklib.c (Tcl_GetStringResult): refactoring - define
- alternative macro on Tcl7.x or earlier.
-
-Mon Aug 1 13:53:55 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/tcltklib.c (deleted_ip): refactoring - interpreter
- deletion check. [ruby-dev:26664]
-
-Mon Aug 1 01:08:21 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb (check_insecure_method): use private_methods and
- protected_methods instead of respond_to? to check method visibility.
- [ruby-dev:26616]
-
- * test/drb/drbtest.rb: ditto.
-
- * test/drb/ut_drb.rb: ditto.
-
-Sat Jul 30 18:49:44 2005 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE_TYPE#ole_typelib,
- WIN32OLE_TYPE#implemented_ole_types.
-
- * ext/win32ole/tests/testOLETYPE.rb: ditto.
-
-Fri Jul 29 16:12:02 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/context.rb: fix `irb --readline` option. [ruby-dev:40955]
-
-Fri Jul 29 09:59:38 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_call0): fix calling zsuper from a method with anonymous
- rest argument. [ruby-dev:26639]
-
- * eval.c (rb_yield_0): push yielded node instead of yielding.
- fixed: [yarv-dev:549]
-
-Thu Jul 28 21:49:17 2005 IWATSUKI Hiroyuki <don@na.rim.or.jp>
-
- * parse.y (rb_parser_end_seen_p): exclude from ripper.
- <http://moonrock.jp/~don/d/200507.html#d28_t2>
-
- * sprintf.c (clearerr): remove standard macro before re-definition.
- <http://moonrock.jp/~don/d/200507.html#d28_t3>
-
-Thu Jul 28 18:09:55 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/stubs.c: When --enable-tcltk-stubs, the initialize
- routine creates a Tcl/Tk interpreter and deletes it. However,
- init cost of Tk's MainWindow is not so small. And that makes it
- impossible to use libraries written with Tcl functions only on
- an environment without a graphical display. This changes support
- delaying initialization of Tk_Stubs until the script needs Tk.
-
- * ext/tk/stubs.h: New file. Define prototypes and return codes of
- functions on stubs.c.
-
- * ext/tk/tcltklib.c: Support delaying initialization of Tk_Stubs
- until the script needs Tk.
-
- * ext/tk/tcltklib.c: Show friendly error messages for errors on
- initialization.
-
- * ext/tk/tcltklib.c: Avoid SEGV on ip_finalize() when ruby is
- exiting and $DEBUG is true. (Not fix. If you know the reason of
- why, please fix it.)
-
- * ext/tk/tkutil/tkutil.c (ary2list, ary2list2): bug fix on handling
- of encoding.
-
- * ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string and bg_eval_string
- don't work properly.
-
- * ext/tk/lib/tk.rb: Forget extending Tk::Encoding module to Tk.
-
- * ext/tk/lib/tk/variable.rb: TkVarAccess fails to initialize the
- object for an element of a Tcl's array variable.
-
-Thu Jul 28 17:23:37 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (f_larglist): allow block argument in lambda parameter
- list without parenthesis.
-
-Thu Jul 28 17:14:01 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (each_i): typo fixed. [ruby-dev:26622]
-
-Thu Jul 28 15:04:11 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (f_arg): better argument name duplication check
-
- * parse.y (new_args_gen): factored out name duplication check for
- optional and rest arguments.
-
- * parse.y (new_bv_gen): allow shadowing outer local variables;
- warning remains.
-
-Thu Jul 28 13:46:06 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (ripper_warningS): the argument was omitted.
- [ruby-dev:26621]
-
-Thu Jul 28 11:30:57 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (f_larglist): allow bv_decl at the end of lambda
- argument list. [EXPERIMENTAL]
-
- * parse.y (new_bv_gen): allow local variable shadowing, with
- warning in verbose mode.
-
-Wed Jul 27 23:23:54 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (obj_free): make message format consistent with one from
- gc_mark(). [ruby-talk:149668]
-
- * sprintf.c (quad_t): prepare quad_t as well. [ruby-talk:149668]
-
-Wed Jul 27 22:11:37 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * sample/rss/tdiary_plugin: removed. because the plugin
- is imported in the tDiary plugin packages.
-
-Wed Jul 27 19:11:53 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (cd): follow :noop option change. (This patch
- is contributed by Doug Kearns)
-
-Wed Jul 27 16:25:59 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (lambda): Perl6 style -> lambda expression. [NEW]
- [VERY EXPERIMENTAL]
-
-Wed Jul 27 10:43:14 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (id2ref): must not assign pointers to long int. use
- LONG_LONG instead if SIZEOF_LONG < SIZEOF_VOIDP.
- [ruby-talk:149645]
-
- * ruby.h: use LONG_LONG to simplify the change.
- [ruby-talk:149645]
-
-Wed Jul 27 10:59:02 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (dir_each): rewinddir(3) before iteration.
- [ruby-talk:149628]
-
-Wed Jul 27 02:34:58 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_throw): replace all '0x%lx' by '%p'.
- [ruby-talk:149553]
-
- * missing/vsnprintf.c (BSD_vfprintf): '%p' need to handle 64bit
- size pointer. [ruby-talk:149553]
-
-Tue Jul 26 22:41:28 2005 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/lib/ripper/sexp.rb: new method Ripper.sexp_raw.
-
- * ext/ripper/lib/ripper/sexp.rb (Ripper.sexp): returns more
- readable tree. This is suggested by Kirill A. Shutemov.
-
-Tue Jul 26 22:05:12 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: merge a patch contributed by Daniel Berger,
- with some modification. (RubyForge #2128)
-
-Tue Jul 26 18:11:33 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h: support LLP64 model. [ruby-talk:149524]
-
-Tue Jul 26 12:57:40 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/openssl_missing.c: include <openssl/engine.h> before
- <openssl/x509_vfy.h> to avoid compilation error of mswin32.
- suggested by NAKAMURA Usaku.
-
-Mon Jul 25 23:48:55 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.[ch]: (rb_w32_vsnprintf, rb_w32_snprintf): removed.
-
-Mon Jul 25 21:30:46 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk: Borland MAKE doesn't look for file names which have paths
- from VPATH. fixed: [ruby-dev:26604]
-
- * ruby.h (NORETURN, DEPRECATED): moved just after config.h.
-
- * {win32,wince}/Makefile.sub: vsnprintf() is in missing now.
-
- * {bcc32,win32,wince}/Makefile.sub: moved CPPFLAGS only for ruby
- source to XCFLAGS.
-
-Mon Jul 25 14:10:02 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: fix en-bugged part in the last commit.
-
-Mon Jul 25 13:45:18 2005 NAJIMA Hiroki <najima@mickey.ai.kyutech.ac.jp>
-
- * io.c: check HAVE_SYS_IOCTL_H before including the header.
- [ruby-dev:26610]
-
-Sat Jul 23 16:48:12 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_engine.c (ossl_engine_s_load): should check
- OPENSSL_NO_STATIC_ENGINE.
-
-Sat Jul 23 11:46:30 2005 Tanaka Akira <akr@m17n.org>
-
- * eval.c (rb_fd_select): the all three fd_sets must be long enough for
- select. fixed: [ruby-talk:149059]
-
-Sat Jul 23 10:01:41 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_vsprintf, rb_sprintf): new functions return new String,
- using missing/vsnprintf.c. [ruby-dev:26580]
-
- * missing/vsnprintf.c: made the output changeable.
-
-Fri Jul 22 21:06:08 2005 Tadashi Saito <shiba@mail2.accsnet.ne.jp>
-
- * bignum.c (rb_big_eq): reduce isnan(). [ruby-dev:26600]
-
- * numeric.c (flo_eq, flo_gt, flo_ge, flo_lt, flo_le): ditto.
-
-Fri Jul 22 15:02:39 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb: moved copyright description to lib/rss.rb.
-
- * lib/rss.rb: added for convenience.
-
- * sample/rss/re_read.rb: added #to_s sample.
-
- * sample/rss/blend.rb: use 'require "rss"' instead of
- 'require "rss/*"'.
- * sample/rss/list_description.rb: ditto.
- * sample/rss/rss_recent.rb: ditto.
- * sample/rss/tdiary-plugin/rss-recent.rb: ditto.
-
- * sample/rss/tdiary-plugin/rss-recent.rb: 0.0.6 -> 0.0.7.
-
-Fri Jul 22 14:37:43 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/parser.rb (RSS::Parser#initialize): accept HTTP/FTP
- URI and local file path too.
-
- * test/rss/test_parser.rb (RSS::TestParser#test_parse): test
- for the above.
-
-Fri Jul 22 07:01:42 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tkutil/tkutil.c (tk_conv_args): forget to revert
- thread_critical and gc_disable when raise ArgumentError.
-
- * ext/tk/lib/remote-tk.rb: RemoteTkIp doesn't need to include TkUtil.
-
- * ext/tk/tcltklib.c: add TclTkIp#has_mainwindow? method.
-
- * ext/tk/lib/tk.rb: add Tk.has_mainwindow? method.
-
- * ext/tk/lib/multi-tk.rb: add MultiTkIp#has_mainwindow? method.
-
- * ext/tk/lib/remote-tk.rb: add RemoteTkIp#has_mainwindow? method.
-
- * ext/tk/lib/multi-tk.rb: slave IP fail to exit itself when $SAFE==4.
-
- * ext/tk/lib/multi-tk.rb: remove constants from MultiTkIp module to
- avoid access from external.
-
- * ext/tk/lib/multi-tk.rb: check_root flag is ignored on slave IPs'
- mainloop.
-
- * ext/tk/lib/multi-tk.rb: hang-up Tk.mainloop called on a slave IP
- with $SAFE==4.
-
- * ext/tk/lib/multi-tk.rb: MultiTkIp#bg_eval_proc doesn't work
- properly.
-
- * ext/tk/lib/multi-tk.rb: add MultiTkIp#set_cb_error(proc) and
- cb_error(exc) to log errors at callbacks on safe slave IPs.
-
- * ext/tk/lib/multi-tk.rb: fail to get an available slave IP object
- when call Tk.mainloop in the block which is given to new_* method,
- because cannot finish initialize while the root widget is alive.
-
- * ext/tk/lib/multi-tk.rb: fail to control a slave IP when Tk.mainloop
- runs on the IP.
-
-Thu Jul 21 01:00:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/{nkf.c,utf8tbl.c,config.h}:
- import 1.76
- [ruby-dev:26592] nkf constification
-
-Wed Jul 20 19:18:52 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (S_ISREG): need to define S_ISREG before it is used first.
-
-Wed Jul 20 18:33:15 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * io.c (wsplit_p): patch for the environment where
- fcntl(F_GETFL, O_NONBLOCK) is not supported. in that case,
- set FMODE_WSPLIT without fcntl check. [ruby-dev:26566]
-
-Wed Jul 20 18:07:11 2005 Tanaka Akira <akr@m17n.org>
-
- * io.c (rb_io_ctl): update FMODE_WSPLIT_INITIALIZED and FMODE_WSPLIT
- by F_SETFL.
-
-Wed Jul 20 10:04:51 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_class_path): need to adjust snprintf() len for
- terminating NUL. [ruby-dev:26581]
-
-Wed Jul 20 03:58:52 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/socket/socket.c: sorry, BeOS also uses HAVE_CLOSESOCKET,
- so reverted.
-
- * ext/socket/extconf.rb: should not define HAVE_CLOSESOCKET
- on windows.
-
-Wed Jul 20 03:12:21 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/socket/socket.c: should not undef close() on win32.
- it's defined to rb_w32_close(), otherwise handle leaks.
- [ruby-Bugs-2131]
-
-Wed Jul 20 00:48:16 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (syserr_initialize): don't use str before StringValue()
- check. [ruby-dev:26579]
-
-Tue Jul 19 22:47:29 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (syserr_initialize): add 1 byte for snprintf() size for
- NUL at the end. [ruby-dev:26574]
-
-Tue Jul 19 17:16:34 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * signal.c (trap): remove sigexit(); handle "EXIT" via sig_exec().
- [ruby-dev:26440]
-
- * io.c (rb_io_inspect): replace sprintf() with "%s" format all
- over the place by snprintf() to avoid integer overflow.
-
-Tue Jul 19 14:10:50 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/tcltklib.c: rbtk_eventloop_depth is used as int.
-
- * ext/tk/tcltklib.c: rbtk_pending_exception is tested with
- NIL_P, so should assign Qnil instead of 0 (Qfalse).
-
- * ext/tk/tcltklib.c (ip_invoke_real): fixed memory leak when
- ip is deleted.
-
-Tue Jul 19 13:19:46 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/variable.rb: For symmetry, add TkVariable#string. It
- returns a string even if the default value type of the TkVariable
- object is not "string".
-
-Mon Jul 18 21:39:18 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * eval.c (rb_call0): make the pointer to NODE volatile
- instead of NODE itself.
-
-Mon Jul 18 14:32:21 2005 Tanaka Akira <akr@m17n.org>
-
- * eval.c (rb_call0): make body volatile to avoid possible optimization
- problem.
- [ruby-dev:26195]
-
-Mon Jul 18 12:23:27 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/io/wait/wait.c: wrong backport from trunk, and compile error on
- platforms fd_set is not a bit set. fixed: [ruby-dev:26562]
-
-Mon Jul 18 09:36:25 2005 Tanaka Akira <akr@m17n.org>
-
- * rubyio.h (FMODE_WSPLIT, FMODE_WSPLIT_INITIALIZED): new constant.
-
- * io.c (wsplit_p): new function.
- (io_fflush): split writing data by PIPE_BUF if wsplit_p is true in
- multi-threaded mode.
- (io_fwrite): ditto.
- [ruby-dev:26540]
-
-Mon Jul 18 05:00:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: import nkf.c 1.73
- fix: TestKconv 1F
-
-Sun Jul 17 13:46:54 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/wait/extconf.rb, ext/io/wait/wait.c: Win32 platforms support.
-
-Sat Jul 16 23:43:16 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enumerator.c (Init_Enumerator): wrong argument specs.
- [ruby-core:05481]
-
-Sat Jul 16 15:52:50 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.[hc]: constified socket functions. [ruby-dev:26553]
-
-Fri Jul 15 23:59:03 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/parsers/parse_c.rb (handle_class_module): handle a
- module enclosed in a built-in module. fixed: [ruby-talk:148239]
-
- * lib/rdoc/parsers/parse_c.rb (find_body): allow macros as methods.
-
- * lib/rdoc/parsers/parse_c.rb (find_call_seq): allow :nodoc: modifier
- in C. [ruby-core:04572]
-
-Fri Jul 15 23:20:03 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enumerator.c (Init_Enumerator): use an internal directly.
-
-Fri Jul 15 07:58:10 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/server.rb (WEBrick::GenericServer#accept_client):
- sockets should be non-blocking mode. [ruby-dev:26405]
-
- * lib/webrick/utils.rb (WEBrick::Utils.set_non_blocking): new method.
-
-Fri Jul 15 00:11:36 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (enumeratorize): create new enumerator for current method if
- no block is given.
-
- * enumerator.c: moved from ext/enumerator.
-
-Thu Jul 14 18:27:35 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.c (rb_w32_strerror): should return correct message
- for ENAMETOOLONG and ENOTEMPTY. (bcc32) [ruby-dev:26533]
-
- * win32/win32.c (rb_w32_strerror): stripped CR LF on the tail.
- (bcc32) [ruby-dev:26533]
-
-Thu Jul 14 00:45:42 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * LEGAL (ext/nkf/nkf-utf8): updated from nkf1.7 to nkf-utf8.
-
-Wed Jul 13 22:44:00 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y: remove static variables. [ruby-dev:26530]
-
-Wed Jul 13 19:36:29 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.c (rb_w32_mkdir): should set EEXIST (not EACCES)
- if file or directory already exists. (bcc32) [ruby-dev:26508]
-
- * win32/win32.c (rb_w32_rmdir): should set ENOTDIR (not EINVAL)
- if it is not directory. (bcc32, win32)
-
- * win32/win32.c (rb_w32_rmdir, rb_w32_unlink): restore
- FILE_ATTRIBUTE_READONLY flag on function failure.
-
-Wed Jul 13 12:40:00 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: TclTkLib.do_one_event doesn't work.
-
- * ext/tk/lib/tk.rb: Tk.thread_update is available.
-
-Tue Jul 12 23:32:11 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb: keep curdir unexpanded.
-
-Mon Jul 11 23:50:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c, intern.h (rb_proc_call, rb_obj_method, rb_method_call):
- export.
-
- * ext/enumerator/enumerator.c (enumerator_with_index): [EXPERIMENTAL]
- added a new method Enumerator#with_index. [ruby-talk:147728]
-
-Mon Jul 11 08:31:29 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * regparse.c (fetch_escaped_value): mask values following \c in
- regexp. fixed: [ruby-dev:26500]
-
-Sun Jul 11 05:18:17 2005 Michael Neumann <mneumann@ruby-lang.org>
-
- * lib/xmlrpc/server.rb (XMLRPC::Server): Switch from GServer over to
- WEBrick. This makes file lib/xmlrpc/httpserver.rb obsolete (at least it is
- no further used by the XML-RPC library).
-
-Mon Jul 11 02:50:23 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb (WEBrick::CGI::Socket#request_line):
- mistook to merge the patch of [ruby-dev:26235] at
- revision 1.11.
-
-Sun Jul 10 23:58:04 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Pathname#unlink): try Dir.unlink first to
- avoid unlink a directory by root.
- cf. [ruby-dev:26237]
-
-Sun Jul 10 12:47:01 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/debug.rb (debug_command): added a deficient format specifier.
- fixed: [ruby-core:05419]
-
-Sat Jul 9 22:02:37 2005 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_method_dispid): convert dispid
- in Ruby and C by INT2NUM and NUM2INT.
-
- * ext/win32ole/win32ole.c (ole_invoke2): ditto.
-
- * ext/win32ole/test/testWIN32OLE.rb: ditto.
-
- * ext/win32ole/test/testOLEMETHOD.rb: ditto.
-
-Fri Jul 8 15:45:04 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb (RSS::VERSION): 0.1.4 -> 0.1.5.
-
- * test/rss/test_version.rb (RSS::TestVersion#test_version):
- ditto.
-
- * lib/rss/0.9.rb (RSS::Rss::Channel::Item::Category):
- domain attribute of <category> is optional. Thanks to
- Chris Lee <clee@kde.org>.
-
- * test/rss/test_parser.rb (RSS::TestParser#test_category20):
- adjusted test case.
-
-Wed Jul 6 18:45:53 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_pattern_match): now returns nil.
- [ruby-core:05391]
-
-Mon Jul 4 14:35:52 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sample/svr.rb: service can be stopped by ill-behaved client; use
- tsvr.rb instead.
-
-Mon Jul 4 13:25:21 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * missing/erf.c: original erf.c by prof. Okumura is confirmed to
- be public domain. reverted BSD implementation.
-
-Wed Jul 6 11:15:21 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (open_ifs_socket): new function.
-
- * win32/win32.c (StartSockets, rb_w32_socket): use open_ifs_socket()
- instead of socket().
- all changes are derived from [ruby-core:5388].
-
-Wed Jul 6 00:15:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/{nkf.c,utf8tbl.c,config.h}:
- imported nkf.c 1.70 (support UTF-8-MAC)
-
- * ext/nkf/lib/kconv.rb: add :utf8mac and :internalunicode
-
-Tue Jul 5 23:44:06 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb: expand source library path.
-
-Tue Jul 5 23:27:14 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (sort_2): get rid of yet another bcc's bug.
- fixed: [ruby-core:05152]
-
- * eval.c (rb_thread_save_context): must not switch contexts during
- re-allocating stack. fixed: [ruby-core:05219]
-
-Tue Jul 5 15:15:10 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tkutil.c: fix typo.
-
-Tue Jul 5 14:52:56 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: bug fix on treating Unicode strings.
-
- * ext/tk/tcltklib.c: add methods to treat encoding mode.
-
- * ext/tk/MANUAL_tcltklib.eng: add description of TclTkLib#encoding,
- encoding_system, and so on.
-
- * ext/tk/MANUAL_tcltklib.eucj: ditto.
-
- * ext/tk/tkutil/tkutil.c: fail to create a Tcl's list string from
- an array including multiple kind of encoded strings.
-
- * ext/tk/lib/tk.rb: ditto.
-
- * ext/tk/lib/multi-tk.rb: 2nd arg of _{to|from}UTF8 is omissible.
-
- * ext/tk/lib/remote-tk.rb: ditto.
-
- * ext/tk/lib/tk.rb: override TclTkLib#encoding and encoding= to
- use TkCore::INTERP.encoding and encoding=.
-
- * ext/tk/lib/tk.rb: when "require 'tk'" and $KCODE=='NONE', check
- DEFAULT_TK_ENCODING to decide Ruby/Tk's system encoding mode.
-
- * ext/tk/lib/tk/encodedstr.rb: check both of Tk.encoding and
- Tk.encoding_system. Tk.encoding has higher priority.
-
- * ext/tk/lib/tk/optiondb.rb: ditto.
-
- * ext/tk/lib/tk/spinbox.rb: ditto.
-
- * ext/tk/lib/tk/validation.rb: ditto.
-
- * ext/tk/lib/tk/namespace.rb: arguemnts for TclTkIp#_merge_tklist
- should be UTF-8 strings.
-
-Mon Jul 4 19:29:32 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/set.rb: test change to follow revision 1.28. (duck typing?)
-
-Mon Jul 4 11:23:50 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/{dbm,gdbm,sdbm}/test_{dbm,gdbm,sdbm}.rb: skip some tests
- which using fork on fork-less platforms.
-
-Sun Jul 3 23:26:30 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/wsdl/document/test_rpc.rb: compare formatted time string of
- Time objects instead of comparing Time objects itself to avoid
- unintended conflict of usec part. [ruby-dev:26220]
-
-Sat Jul 2 22:41:04 2005 Tanaka Akira <akr@m17n.org>
-
- * ext/socket/socket.c (unix_send_io, unix_recv_io): support x86-64 and
- IA64.
-
-Sat Jul 2 17:06:23 2005 Tanaka Akira <akr@m17n.org>
-
- * defines.h (FLUSH_REGISTER_WINDOWS): defined for IA64.
- (flush_register_windows): declare flush_register_windows.
-
- * eval.c (flush_register_windows): new function.
-
- * ruby.h (NOINLINE): move up to be effective in defines.h.
-
-Sat Jul 2 15:19:41 2005 Tanaka Akira <akr@m17n.org>
-
- * configure.in: check select_large_fdset.
-
- * eval.c: use select_large_fdset to support large file descriptors
- on Solaris. [ruby-dev:26404]
-
-Fri Jul 1 17:55:08 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_neg): may be accessing bogus pointer value.
-
-Fri Jul 1 15:50:12 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * missing/erf.c: need to include some headers for some platforms.
-
- * win32/win32.h (copysign, scalb): define for compatibility with
- other platforms. [ruby-dev:26430]
-
-Fri Jul 1 15:37:42 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * missing/crypt.c: modified to make it compilable on platforms
- other than BSD. [ruby-dev:26430]
-
- * missing/erf.c: ditto. code from <exp.c> merged.
-
-Fri Jul 1 12:44:56 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (OpenURI.open_http): refine post_connection_check
- call.
-
-Fri Jul 1 11:34:08 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * missing/crypt.c: replaced with 4.4BSD version.
-
- * missing/erf.c: ditto.
-
- * missing/vsnprintf.c: removed the third provision from the old
- BSD license. [ruby-core:05177]
-
-Fri Jul 1 01:45:21 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (enum_min, enum_max): must not return Qundef.
- fixed: [ruby-core:05299]
-
-Fri Jul 1 00:18:40 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator::respond_to): respond_to? must check
- destination object. [ruby-talk:146894]
-
-Thu Jun 30 23:52:12 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (trap): non-string trap hander was ignored.
- fixed: [ruby-dev:26417]
-
-Thu Jun 30 19:00:21 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/ruby-lex.rb (RubyLex::identify_number): alternative implements
- for [ruby-dev:26410]. And support a numeric form of 0d99999.
-
-Thu Jun 30 17:28:10 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/ruby-lex.rb (RubyLex::identify_number): should not treat
- plain zero as an octal number. [ruby-dev:26410]
-
-Thu Jun 30 15:13:16 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): pre-evaluate argument for unambiguous
- evaluation order. [ruby-dev:26383]
-
-Thu Jun 30 14:48:23 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/net/http.rb (Net::HTTP#connect, Net::HTTP#request): should
- not send proxy username and password to origin servers.
- [ruby-dev:25673]
-
- * lib/net/http.rb (Net::HTTP::ProxyDelta#edit_path): should not
- send HTTPS scheme URL to origine servers. [ruby-dev:25689]
-
-Thu Jun 30 09:53:56 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (Delegator::method_missing): forward unknown
- method to the destination. suggested by
- <christophe.poucet@gmail.com>. [ruby-talk:146776]
-
-Wed Jun 29 00:03:20 2005 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * regparse.c (fetch_token): avoid warning of unused goto tag.
- [ruby-dev:26389]
-
-Tue Jun 28 21:59:29 2005 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * dir.c, eval.c, parse.y, process.c, ruby.c: avoid warning "unused
- variable" [ruby-dev:26387]
-
- * dir.c (glob_helper): avoid warning "enumeration value `RECURSIVE'
- not handled in switch" [ruby-dev:26392]
-
-Tue Jun 28 01:52:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/lib/kconv.rb: add Kconv::VERSION
- * ext/nkf/lib/kconv.rb (conv): can process arrayed options
- * ext/nkf/nkf-utf8/nkf.c: imported Revision 1.69
- * ext/nkf/nkf-utf8/utf8tbl.c: imported Revision 1.9
-
-Sat Jun 25 23:30:51 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (detach_process_watcher): terminate process watcher
- thread right after rb_waitpid() succeed. [ruby-talk:146430]
-
-Sat Jun 25 17:12:20 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils.parse_query): should
- discard if key=val pair is empty. patch from Gary Wright.
-
-Sat Jun 25 15:49:18 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (enum_min, enum_max, enum_min_by, enum_max_by): do not ignore
- nil as the first element.
-
-Sat Jun 25 15:13:54 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/set.rb (Set#==): [ruby-dev:25206] (ported from ruby_1_8 branch)
-
-Sat Jun 25 11:37:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/lib/kconv.rb: remove constants
- Iconv_Shift_JIS, Uconv_EUC_JP, Iconv_UTF8
- * ext/nkf/lib/kconv.rb: add module functions to Kconv
- conv, {eucjp, shiftjis, utf8}?, guess_as_symbol
- * ext/nkf/lib/kconv.rb: add instance methods to String
- conv, {eucjp, shiftjis, utf8}?
- * ext/nkf/lib/kconv.rb: add aliases Kconv.to_* and String#to_*
-
-Fri Jun 24 17:00:00 2005 Shigeo Kobayashi <shigeo@tinyforest.jp>
-
- * ext/bigdecimal/bigdecimal.c: patch from "NATORI Shin"
- (u-tokyo.ac.jp) applied to fix rounding bug.
-
-Fri Jun 24 13:17:45 2005 akira yamada <akira@ruby-lang.org>
-
- * lib/uri/common.rb, lib/uri/generic.rb: fixed typo in documents and
- replaced some existent domain name with "example.com".
-
-Fri Jun 24 12:23:19 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: fix typo on Tk.grid_propagate.
-
- * ext/tk/lib/tk.rb: Tk.event_generate and TkWindow#event_generate
- accept TkEvent::Event object as context argument.
-
- * ext/tk/lib/tk/event.rb: add TkEvent::Event#valid_fields and
- valid_for_generate to get field parameters of event_generate.
-
-Thu Jun 23 23:55:59 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * runruby.rb: should load built rbconfig.rb.
-
-Thu Jun 23 16:53:15 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/canvastag.rb: TkcGroup.new cannot include given items.
- TkcGroup#exclude calls wrong method.
- Add alias TkcGroup#add [ruby-talk:146049].
-
- * ext/tk/lib/tk/canvas.rb: TkCanvas#dtag and some subcommands of
- TkCanvas#addtag fail to treat a TkcTag argument.
-
- * ext/tk/lib/tk/event.rb: add TkEvent::Event#generate to help to send
- current event to other widgets.
-
-Mon Jun 20 18:44:04 2005 Tanaka Akira <akr@m17n.org>
-
- * eval.c (FUNCTION_CALL_MAY_RETURN_TWICE): DUMMY_SETJMP is replaced
- because setjmp is not enough to fix getcontext and SPARC register
- window problem.
-
-Mon Jun 20 17:15:51 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dbm/dbm.c (fdbm_closed): new method DBM#closed?
-
- * ext/gdbm/gdbm.c (fgdbm_closed): new method GDBM#closed?
-
- * ext/sdbm/init.c (fsdbm_closed): new method SDBM#closed?
-
- * test/dbm/test_dbm.rb, test/gdbm/test_gdbm.rb, test/sdbm/test_sdbm.rb
- (teardown): close all db objects before deleting data files.
-
- * win32/win32.{ch} (unlink): hook runtime function to change
- file attribute before unlinking.
- merge from 1.8, see [ruby-dev:26360]
-
-Mon Jun 20 02:15:35 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (define_final): document fix: finalizers never get called
- before target object is destroyed.
-
-Mon Jun 20 01:26:49 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/openssl_missing.c, ext/openssl/ossl.h,
- ext/openssl/ossl_asn1.c, ext/openssl/ossl_bio.c,
- ext/openssl/ossl_pkcs12.h, ext/openssl/ossl_x509req.c: avoid
- compiler warnings. suggested by Michal Rokos.
-
-Sun Jun 20 00:22:02 2005 Michael Neumann <mneumann@ruby-lang.org>
-
- * lib/xmlrpc/utils.rb: Patch by Nobuhiro IMAI fixes the following
- problem: Default value modification on
- Module#public_instance_methods (false -> true) breaks
- s.add_handler(XMLRPC::iPIMethods("sample"), MyHandler.new) style
- security protection.
-
- * lib/xmlrpc/client.rb: Aliased XMLRPC::Client#new2 as
- XMLRPC::Client#new_from_uri, and #new3 as #new_from_hash.
-
-Sun Jun 19 14:09:07 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (run_final): reduce unnecessary object allocation during
- finalization.
-
- * gc.c (rb_gc_call_finalizer_at_exit): deferred finalizers list should
- be cleared before calling them. fixed: [ruby-talk:145790]
-
-Sat Jun 18 01:15:36 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/readline/readline.c (readline_readline): do not set
- rl_{in,out}stream.
-
- * ext/readline/readline.c (readline_s_set_input): new method.
-
- * ext/readline/readline.c (readline_s_set_output): new method.
-
- * lib/irb/input-method.rb: set Readline.input and Readline.output.
-
-Fri Jun 17 13:01:40 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/time.rb (Time.parse): fix previous leap seconds support.
- (Time.rfc2822): ditto.
- (Time.xmlschema): ditto.
-
-Thu Jun 16 15:41:32 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ruby.c (load_file): '!' is already read. reported by gotoyuzo.
-
-Thu Jun 16 15:09:38 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/tcltklib.c (ip_rb_threadVwaitCommand): Tcl_Release
- was missing.
-
-Thu Jun 16 13:34:48 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: add Tk.getMultiple{Open|Save}File() which return
- an Array of selected files.
-
-Thu Jun 16 12:53:24 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/time.rb (Time.parse): "Fri Jan 1 08:59:60 +0900 1999" was
- parsed as "Fri Jan 01 09:00:00 JST 1999" even on an environment
- which supports leap seconds.
- (Time.rfc2822): ditto.
- (Time.xmlschema): ditto.
-
-Thu Jun 16 00:13:41 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/resolv.rb (Resolv::DNS::Resource#ttl): new attribute.
- (Resolv::DNS::Resource#==): ignore @ttl.
- (Resolv::DNS::Resource#hash): ditto.
- (Resolv::DNS::Message::MessageDecoder#get_rr): save TTL in a
- Resource object.
- based on [ruby-core:5190] by Eric Hodel.
-
-Wed Jun 15 18:26:39 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: support "tk inactive" sub-command [for Tcl/Tk8.5a3]
-
- * ext/tk/lib/tk/namespace.rb: support "namespace path" sub-command and
- 'namespace ensemble' sub-command [for Tcl/Tk8.5a3]
-
-Tue Jun 14 02:02:43 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tkutil/tkutil.c: add TkUtil::CallbackSubst.subst_arg(m, ...)
- & _define_attribute_aliases(hash) to get substitution-argument from
- attributes (e.g. subst_arg(:x,:y,:num,:button) --> "%x %y %b %b ").
-
- * ext/tk/lib/tk/event.rb: use _define_attribute_aliases().
-
-Mon Jun 13 13:03:08 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * hash.c (ruby_setenv): fixed SEGV. [ruby-dev:26186]
-
-Mon Jun 13 01:54:20 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * signal.c (sigexit): call rb_thread_signal_exit() instead of
- rb_exit(). [ruby-dev:26347]
-
- * eval.c (rb_thread_signal_exit): a new function to exit on main
- thread.
-
- * eval.c (rb_thread_switch): exit status should be retrieved from
- ruby_errinfo.
-
- * eval.c (rb_f_exit): ensure exit(0) should call
- exit(EXIT_SUCCESS).
-
-Mon Jun 13 01:20:02 2005 Tanaka Akira <akr@m17n.org>
-
- * eval.c (rb_gc_mark_threads): curr_thread may not be part of the
- thread list. [ruby-dev:26312]
-
-Sat Jun 11 22:34:44 2005 Minero Aoki <aamine@loveruby.net>
-
- * parse.y: missing arg_paren event. This patch is contributed by
- Mitchell N Charity.
-
-Fri Jun 10 23:55:17 2005 Tanaka Akira <akr@m17n.org>
-
- * eval.c (unknown_node): show more information. [ruby-dev:26196]
-
-Fri Jun 10 23:35:34 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * missing/mkdir.c: remove. [ruby-core:05177]
-
-Fri Jun 10 22:54:18 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing.h: fd_set stuffs need sys/types.h. fixed: [ruby-core:05179]
-
-Thu Jun 9 23:58:12 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/Win32API/Win32API.c (Win32API_Call): disable global
- optimization. fixed: [ruby-core:05143]
-
-Thu Jun 9 23:35:22 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (enum_inject): default the result value to Qundef to use
- first element as initial value if not given.
-
-Thu Jun 9 19:55:41 2005 Tanaka Akira <akr@m17n.org>
-
- * eval.c (ruby_longjmp): new macro to call longjmp, setcontext, etc.
- (ruby_setjmp): new macro to call setjmp, getcontext, etc.
- (ruby_setjmp): call setjmp before getcontext to avoid IA64 register
- stack problem.
- [ruby-talk:144939]
-
- * gc.c (Init_stack): remove IA64_MAGIC_STACK_LIMIT.
-
-Thu Jun 9 18:24:16 2005 Tanaka Akira <akr@m17n.org>
-
- * configure.in, eval.c, gc.c: use libunwind only on HP-UX.
- [ruby-dev:26297]
-
-Thu Jun 9 14:46:32 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (env_aset): do not treat nil as key-removing value.
- [ruby-list:40865]
-
- * parse.y (method_call): allow aref expression ([]) to take a
- block.
-
- * parse.y (block_dup_check): a function to check duplication of
- a block argument and an actual block.
-
-Thu Jun 9 11:55:34 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (SimpleDelegator::__setobj__): need check for
- recursive delegation. [ruby-core:04940]
-
-Thu Jun 9 11:50:43 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb: add underscore aliases CGI::escape_html,
- CGI::unescape_html, CGI::escape_element, CGI::unescape_element.
- [ruby-core:05058]
-
-Wed Jun 8 18:47:10 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-expr-beg): fix looking point drift.
-
-Wed Jun 8 12:25:59 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_nitems): add the block feature to Array#nitems.
- suggested by Bertram Scharpf <lists@bertram-scharpf.de> in
- [ruby-talk:134083].
-
-Wed Jun 8 11:11:34 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (get2comp): revert all prior changes, and calculate
- proper 2's complement for negative numbers.
-
-Wed Jun 8 08:33:10 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (enum_min_by, enum_max_by): return nil if no iteration.
- fixed: [ruby-dev:26245]
-
- * eval.c (rb_need_block): ensure a block is given.
-
- * eval.c (backtrace): skip successive frames sharing same node.
-
-Wed Jun 8 01:27:06 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (bignorm): fixed a bug in normalizing negative numbers
- reported from Honda Hiroki <hhonda@ipflex.com>. normalizing
- should not trim leading zeros from negative numbers.
-
- * bignum.c (rb_cstr_to_inum): must remove leading zeros for this
- case.
-
-Wed Jun 8 00:15:08 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (ruby_getaddrinfo__aix): merged a patch from
- KUBO Takehiro <kubo at jiubao.org> to support AIX. [ruby-list:40832]
-
-Wed Jun 8 00:09:01 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/yaml/rubytypes.rb (Array::to_yaml): merged a patch from
- Tilman Sauerbeck <tilman at code-monkey.de>. [ruby-core:05055]
-
- * lib/yaml/rubytypes.rb (Hash::to_yaml): ditto.
-
-Wed Jun 8 00:00:01 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/curses/curses.c (curses_insertln): merged a patch from
- TAKAHASHI Tamotsu <ttakah at lapis.plala.or.jp>. [ruby-ext:02305]
-
-Tue Jun 7 19:34:15 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/init.rb (IRB::IRB.rc_file_generators): more flexible
- IRB.rc_file_generators. [ruby-core:05163]
-
-Tue Jun 7 18:39:31 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/thread.rb: RDoc documentation from Eric Hodel
- <drbrain@segment7.net> added. [ruby-core:05148]
-
-Tue Jun 7 18:30:04 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): add .SUFFIXES from depend file.
- fixed: [ruby-dev:26294]
-
-Tue Jun 7 17:20:39 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_yylex): allow ';;' to be block terminator in
- place of 'end'. [highly experimental]
-
- * misc/ruby-mode.el (ruby-block-end-re): allow ';;' to be a
- negative indent trigger. [highly experimental]
-
- * parse.y (parser_yylex): small error fixed.
-
-Tue Jun 7 16:45:49 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_yylex): "respond_to?:foo" should be interpreted
- as "respond_to? :foo" at the command level. [ruby-talk:144303]
-
-Tue Jun 7 16:32:53 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): raise exception on debug mode (-d),
- not verbose mode (-v/-w). [ruby-core:05123]
-
- * sprintf.c (rb_f_sprintf): warn always on verbose mode.
-
-Tue Jun 7 10:30:49 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: slave-ip fails to call procedures
- delegated by master-ip.
-
-Mon Jun 6 16:35:18 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/ripper/depend: add .y to .SUFFIXES for nmake.
-
-Sun Jun 5 23:00:35 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/console.rb: create console when required
-
- * ext/tk/sample/tkextlib/tile/demo.rb: fix TypeError & create Console
-
-Sun Jun 5 10:23:52 2005 Tanaka Akira <akr@m17n.org>
-
- * signal.c (ruby_signal): don't set SA_RESTART.
- [ruby-dev:26276]
-
-Sat Jun 4 14:55:18 2005 Tanaka Akira <akr@m17n.org>
-
- * test/dbm/test_dbm.rb: merged from ext/dbm/testdbm.rb.
-
- * test/gdbm/test_gdbm.rb: merged from ext/gdbm/testgdbm.rb.
-
- * test/sdbm/test_sdbm.rb: renamed from ext/sdbm/testsdbm.rb with
- modification to use test/unit.
-
-Fri Jun 3 23:23:02 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * intern.h (rb_fdset_t): deal with fd bit sets over FD_SETSIZE.
- fixed: [ruby-dev:26187]
-
- * eval.c (rb_fd_init, rb_fd_term, rb_fd_zero, rb_fd_set, rb_fd_clr,
- rb_fd_isset, rb_fd_copy): ditto.
-
- * io.c (rb_io_wait_readable, rb_io_wait_writable, rb_f_select): ditto.
-
- * ext/io/wait/wait.c (io_wait): ditto.
-
- * ext/socket/socket.c (wait_connectable, unix_recv_io): ditto.
-
-Fri Jun 3 14:06:12 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: fix typo.
-
-Thu Jun 2 23:42:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y: pragma support on ripper. [ruby-dev:26266]
-
-Thu Jun 2 00:02:16 2005 Minero Aoki <aamine@loveruby.net>
-
- * struct.c: accessing >10 member caused segmentation fault.
- [ruby-dev:26247]
-
- * test/ruby/test_struct.rb: test it.
-
-Wed Jun 1 11:30:09 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * bcc32/Makefile.sub: can use single quote character in DESTDIR.
- [ruby-dev:26205]
-
- * bcc32/Makefile.sub: Dir.glob in 1.9 doesn't treat \ as path separator.
- [ruby-dev:26254]
-
-Wed Jun 1 00:11:06 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (method_call): new experiment: "(expr)(args...)" to
- invoke "expr.call(args...)". [EXPERIMENTAL]
-
-Tue May 31 23:43:41 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (command): revert implicit "call" for local variables.
-
-Tue May 31 15:52:45 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpserver.rb (WEBrick::HTTPServer#run): should
- break the loop if the socket reached to EOF. [ruby-talk:142285]
-
- * lib/webrick/httpserver.rb (WEBrick::HTTPServer#run): send response
- without reading the whole request body if keep-alive is disabled.
- [experimental]
-
-Mon May 30 23:48:29 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/macpkg.rb: add PACKAGE_NAME information of Tcl/Tk
- Extension.
-
- * ext/tk/lib/tk/msgcat.rb: ditto.
-
- * ext/tk/lib/tk/winpkg.rb: ditto.
-
- * ext/tk/lib/tkextlib/*: ditto.
-
-Sat May 28 16:39:21 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * test/openssl/test_x509store.rb: add test for expired CRL
- and refine some assertions.
-
-Sat May 28 05:15:44 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_x509store.c (ossl_x509stctx_set_time): should
- not set internal flag directory.
-
-Sat May 28 02:00:11 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb (WEBrick::CGI::Socket#request_line):
- ENV["REQUEST_URI"] is better to get correct Request-URI
- than ENV["SCRIPT_NAME"] + ENV["PATH_INFO"]. [ruby-dev:26235]
-
-Fri May 27 16:32:04 2005 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/mkmf.rb: use the semicolon as the path separator
- in the environment of MSYS. fixed: [ruby-dev:26232]
-
-Thu May 26 20:31:21 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (remove_entry_secure): add documentation.
-
- * lib/fileutils.rb (remove_entry_secure): should not invoke
- unlink(2) against a directory.
-
-Thu May 26 08:29:19 2005 Akiyoshi, Masamichi <akiyoshi@hp.com>
-
- * vms/vmsruby_private.c, vms/vmsruby_private.h: private routines
- for VMS port are added.
-
- * eval.c (ruby_init): change to call VMS private intialization routine.
-
-Thu May 26 07:39:07 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (rm_r): use lchown(2), not chown(2).
- [ruby-dev:26226]
-
- * lib/fileutils.rb (cd): remove :noop option. (feature change)
-
- * lib/fileutils.rb (cp_r): should copy symlink as symlink, for
- also tree root. (feature change)
-
- * lib/fileutils.rb (cp_r): new option :dereference_root.
-
- * lib/fileutils.rb: new method remove_entry.
-
- * lib/fileutils.rb: new method remove_entry_secure.
-
- * lib/fileutils.rb: add documentation.
-
-Thu May 26 06:08:11 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: add shortcut-methods of tk_call + tk_split_list
-
-Wed May 25 20:06:27 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: TkComm#tk_split_*list fail to split a kind of SJIS
- strings. To avoid the trouble, add arguments to control converting
- encoding, and do split on a UTF8 string.
-
- * ext/tk/lib/multi-tk.rb: modify to attend encoding.
-
- * ext/tk/lib/remote-tk.rb: ditto.
-
- * ext/tk/lib/tk/itemconfig.rb: ditto.
-
- * ext/tk/lib/tk/listbox.rb: ditto.
-
- * ext/tk/lib/tk/namespace.rb: ditto.
-
- * ext/tk/lib/tk/panedwindow.rb: ditto.
-
- * ext/tk/lib/tk/text.rb: ditto.
-
- * ext/tk/lib/tk/textmark.rb: ditto.
-
- * ext/tk/lib/tk/texttag.rb: ditto.
-
- * ext/tk/lib/tk/variable.rb: ditto.
-
- * ext/tk/lib/tk/winfo.rb: ditto.
-
- * ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb: ditto.
-
- * ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb: ditto.
-
- * ext/tk/lib/tk.rb: add TkWindow#lower_window/raise_window and
- Tk#lower_window/raise_window by reason of method-name conflict
-
- * ext/tk/lib/tk/canvas.rb: bug fix on TkCanvas#delete when given
- non-TkcItem arguments.
-
- * ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb: ditto.
-
-Wed May 25 19:48:12 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (rm_r): does chown(2). [ruby-dev:26199]
-
-Wed May 25 12:59:48 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (OpenURI::Meta::RE_QUOTED_STRING): a content of
- quoted-string should be zero or more characters.
-
-Tue May 24 23:42:16 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (fix_pow): support Fixnum ** Float case directly
- without coercing. [ruby-talk:142697] [ruby-talk:143054]
-
-Tue May 24 16:57:24 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.c (require_libraries): caused SEGV when continuation jumped
- in to the required library code.
-
-Tue May 24 17:45:59 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/readline/test_readline.rb: do not test libedit.
- fixed: [ruby-dev:26217]
-
-Tue May 24 06:45:31 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): string
- literals to be matched non-greedy.
-
-Tue May 24 00:39:14 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/soap/calc: method name 'set' was able to crash with a class Set.
- [ruby-dev:26210]
-
- * test/wsdl/document/test_rpc.rb: dateTime comparison failed under
- TZ=right/Asia/Tokyo (with leap second.) [ruby-dev:26208]
-
-Mon May 23 16:23:06 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: Framework support on MacOS X Tiger.
-
- * ext/tk/README.tcltklib: add description of Framework support options.
-
-Mon May 23 15:07:34 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub ($(PROGRAM)): add dependency on $(LIBRUBY_SO).
- [experimental]
-
-Mon May 23 12:21:37 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (make_regexp): should not return junk address during
- compile time. [ruby-dev:26206]
-
-Sun May 22 21:54:06 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/{soap,wsdl,xsd}, test/{soap,wsdl,xsd}: imported soap4r/1.5.4.
-
- == SOAP client and server ==
-
- === for both client side and server side ===
-
- * improved document/literal service support.
- style(rpc,document)/use(encoding, literal) combination are all
- supported. for the detail about combination, see
- test/soap/test_style.rb.
-
- * let WSDLEncodedRegistry#soap2obj map SOAP/OM to Ruby according to
- WSDL as well as obj2soap. closes #70.
-
- * let SOAP::Mapping::Object handle XML attribute for doc/lit service.
- you can set/get XML attribute via accessor methods which as a name
- 'xmlattr_' prefixed (<foo name="bar"/> -> Foo#xmlattr_name).
-
- === client side ===
-
- * WSDLDriver capitalized name operation bug fixed. from
- 1.5.3-ruby1.8.2, operation which has capitalized name (such as
- KeywordSearchRequest in AWS) is defined as a method having
- uncapitalized name. (converted with GenSupport.safemethodname
- to handle operation name 'foo-bar'). it introduced serious
- incompatibility; in the past, it was defined as a capitalized.
- define capitalized method as well under that circumstance.
-
- * added new factory interface 'WSDLDriverFactory#create_rpc_driver'
- to create RPC::Driver, not WSDLDriver (RPC::Driver and WSDLDriver
- are merged). 'WSDLDriverFactory#create_driver' still creates
- WSDLDriver for compatibility but it warns that the method is
- deprecated. please use create_rpc_driver instead of create_driver.
-
- * allow to use an URI object as an endpoint_url even with net/http,
- not http-access2.
-
- === server side ===
-
- * added mod_ruby support to SOAP::CGIStub. rename a CGI script
- server.cgi to server.rb and let mod_ruby's RubyHandler handles the
- script. CGIStub detects if it's running under mod_ruby environment
- or not.
-
- * added fcgi support to SOAP::CGIStub. see the sample at
- sample/soap/calc/server.fcgi. (almost same as server.cgi but has
- fcgi handler at the bottom.)
-
- * allow to return a SOAPFault object to respond customized SOAP fault.
-
- * added the interface 'generate_explicit_type' for server side
- (CGIStub, HTTPServer). call 'self.generate_explicit_type = true'
- if you want to return simplified XML even if it's rpc/encoded
- service.
-
- == WSDL ==
-
- === WSDL definition ===
-
- * improved XML Schema support such as extension, restriction,
- simpleType, complexType + simpleContent, ref, length, import,
- include.
-
- * reduced "unknown element/attribute" warnings (warn only 1 time for
- each QName).
-
- * importing XSD file at schemaLocation with xsd:import.
-
- === code generation from WSDL ===
-
- * generator crashed when there's '-' in defined element/attribute
- name.
-
- * added ApacheMap WSDL definition.
-
- * sample/{soap,wsdl}: removed.
-
-Sun May 22 19:11:35 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#intialize):
- should initialize session id context. [ruby-core:4663]
-
- * ext/openssl/ossl_ssl.c (ossl_sslctx_setup): add session id support.
-
-Sun May 22 12:30:58 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * intern.h, parse.y (ruby_pragma): removed. fixed: [ruby-dev:26198]
-
- * parse.y (parser_pragma): pragma name was ignored.
-
-Sun May 22 02:39:57 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (rm_r): new option :secure to avoid
- time-to-check-to-time-to-use security problem. [ruby-dev:26100]
-
- * lib/fileutils.rb (remove_file, remove_dir): try chmod(700) only
- on Windows.
-
- * lib/fileutils.rb: does not depend on find.rb.
-
- * lib/fileutils.rb: new method chmod_R.
-
- * lib/fileutils.rb (chown_R): did not work.
-
-Sat May 21 10:23:21 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * bcc32/Makefile.sub: tds files were not deleted when DESTDIR
- included '\' path delimiter. [ruby-dev:26193]
-
-Fri May 20 15:52:18 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/readline/readline.c (readline_attempted_completion_function):
- return 2 items if completion_proc returns only 1 item (for libedit).
-
-Fri May 20 01:24:33 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/readline/extconf.rb: check rl_vi_editing_mode() and
- rl_emacs_editing_mode().
-
-Thu May 19 23:33:09 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/readline/readline.c: supported libedit. fixed: [ruby-core:4858]
-
- * ext/readline/extconf.rb: added new option --enable-libedit.
-
- * test/readline/test_readline.rb: added assertions for
- Readline::HISTORY.
-
- * lib/irb/input-method.rb: do not use Readline::HISTORY.pop.
-
-Wed May 18 23:42:25 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (exc_exception): reverted to call Exception#initialize
- directly. fixed: [ruby-dev:26177]
-
-Wed May 18 17:38:51 2005 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * dir.c (glob_helper): check whether path is "" before calling
- do_opendir. [ruby-dev:26183]
-
-Wed May 18 13:40:48 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (NtInitialize): fix typo.
-
-Wed May 18 11:07:47 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (glob_helper): get rid of using String. [ruby-dev:26180]
-
- * eval.c (ruby_options), win32/win32.c (NtInitialize): move argument
- intialization back. [ruby-dev:26180]
-
-Tue May 17 11:49:18 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (unixtime_to_filetime): use localtime() instead of
- gmtime() when using FileLocalTimeToFileTime().
-
-Mon May 16 22:42:52 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.h, {bcc32,win32,wince}/Makefile.sub: moved rb_[ugp]id_t
- to get rid of redefinition warnings on mingw.
-
- * class.c (rb_class_init_copy): singleton class is disallowed to copy,
- from its definition. fixed: [ruby-talk:142749]
-
- * parse.y (pragma_encoding): add prototype to suppress false warning
- by VC.
-
- * process.c (proc_spawn_v): use rb_w32_aspawn on Win32.
-
-Mon May 16 03:29:01 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.{h,c}: define rb_[pgu]id_t.
-
-Mon May 16 00:21:02 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Pathname#unlink): use SystemCallError instead of
- Errno::EISDIR because EISDIR is not portable.
- [ruby-core:5001]
-
-Sun May 15 22:28:10 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb (DRbObject#method_missing): use raise(exception).
- [ruby-dev:26164]
-
-Sun May 15 18:56:35 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, ruby.h: define rb_[pgu]id_t macros instead of typedefs
- to get rid of types which might not be defined yet. [ruby-dev:26165]
-
-Sun May 15 14:35:46 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Pathname#unlink): unlink a symlink to a directory
- was failed. [ruby-core:4992]
-
-Sun May 15 09:57:30 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (unixtime_to_filetime): deal with DST.
- [ruby-talk:141817]
-
-Sat May 14 23:59:11 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (exc_exception, {exit,name_err,syserr}_initialize): call
- Execption#initialize. fixed: [ruby-talk:142593]
-
-Sat May 14 23:56:41 2005 Erik Huelsmann <ehuels@gmail.com>
-
- * configure.in: Check for the availability of pid_t, gid_t and uid_t and
- remove AC_TYPE_UID_T. fixed: [ruby-core:04745]
-
- * defines.h: Remove pid_t typedef.
-
- * ruby.h: Define rb_pid_t, rb_gid_t and rb_uid_t in accordance with
- the available system types.
-
- * process.c: Change instances of pid_t and gid_t to their rb_*
- counterparts.
-
- * ext/pty/pty.c: Change pid_t to rb_pid_t.
-
- * vms/config.h: Define HAVE_{P,G,U}ID_T to 1.
-
- * win32/Makefile.sub: Remove #define for {g,u}id_t.
-
- * win32/win32.c: Change pid_t to rb_pid_t.
-
- * wince/Makefile.sub: Remove #define for {g,u}id_t.
-
- * wince/sys/types.h: Remove definitions of {p,g,u}id_t.
-
-Sat May 14 11:47:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * intern.h (ruby_pragma): prototype. [ruby-core:04881]
-
- * parse.y (parser_pragma): parse Emacsen hack.
-
- * parse.y (parser_prepare): deal with specific syntax at the top.
-
- * ruby.c (load_file): read the first line iff it started with shebang.
-
-Fri May 13 23:44:22 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: keep srcdir unexpanded.
-
- * lib/mkmf.rb (create_makefile): quote topdir and hdrdir if necessary.
- fixed: [ruby-core:04932]
-
- * lib/mkmf.rb (configuration), {bcc32,win32,wince}/Makefile.sub: make
- also INSTALL_PROG and INSTALL_DATA system dependent.
- fixed: [ruby-core:04931]
-
-Fri May 13 23:32:55 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (unknown_node): add volatile directive to prototype.
-
-Fri May 13 17:50:49 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * variable.c (generic_ivar_get): rb_attr_get should not warn.
- [ruby-dev:26010]
-
-Thu May 12 17:41:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: follow nkf 2.0.5
-
-Thu May 12 16:50:40 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/rdoc/parsers/parse_c.rb: more readability for mixing
- progress "c..." and warning message.
-
-Thu May 12 15:50:56 2005 Tilman Sauerbeck <tilman@code-monkey.de>
-
- * lib/rdoc/parsers/parse_c.rb: show parsing progress for C files.
- [ruby-core:4341]
-
-Thu May 12 09:53:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * version.c (ruby_show_version): flush for non-tty stdout.
-
-Thu May 12 01:23:55 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (unknown_node): ignore broken NODE to get rid of accessing
- possibly inaccessible address. fixed: [ruby-dev:26122]
- should emit more useful information like [ruby-dev:26126], though.
-
-Wed May 11 15:58:39 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (break_jump): break should not cross functions.
- [ruby-list:40818]
-
-Wed May 11 10:41:54 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/tempfile.rb (Tempfile#unlink): fixed typo.
-
-Wed May 11 01:03:36 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (TMP_ALLOC): use macro NEW_NODE() to get rid of warnings on
- platforms which have no alloca(). fixed: [ruby-talk:141301]
-
-Sun May 8 23:17:47 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/timer.rb: fix typo.
-
-Sun May 8 21:00:50 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * hash.c (Init_Hash): remove custom "hash" and "eql?".
- (ported from 1.8) [ruby-dev:26132]
-
-Sun May 8 16:50:25 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/profiler.rb: fixed "undefined method `[]' for nil:NilClass"
- [ruby-core:4775] [ruby-talk:140401] [ruby-dev:26118]
-
-Sat May 7 22:58:00 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (have_var): no libs argument is given.
-
-Fri May 6 08:08:37 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c:rb_hash_hash_i() should be static. [ruby-core:04815]
-
- * re.c should include regint.h for declarations of oniguruma
- functions. [ruby-core:04815]
-
-Sun May 1 09:15:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (process_sflag): replace '-' in variable names with '_'.
- [ruby-dev:26107]
-
- * eval.c (rb_eval), parse.y (arg): reduce fixnum range literal at
- parser. fixed: [ruby-dev:26113]
-
-Sat Apr 30 11:59:25 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_FUNC_ATTRIBUTE): check for function attribute.
- [ruby-dev:26109]
-
- * eval.c, gc.c: moved noinline to configure.in.
-
- * rubyio.h (DEPRECATED): moved to configure.in.
-
- * ruby.h (DEPRECATED, NOINLINE): default definition.
-
- * win{32,ce}/Makefile.sub (config.h): deprecated and noinline for
- __declspec() are available for VC++7 or later.
-
-Sat Apr 30 06:57:39 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb: new methods WEBrick::CGI#[], WEBrick::CGI#logger
- and WEBrick::CGI#config. these are necessary to use an instance of
- WEBrick::CGI as the first argument of HTTPServlet#get_instance.
- (suggested by Tatsuki Sugiura)
-
- * lib/webrick/cgi.rb
- (WEBrick::CGI#initalize): set a dummy to @config[:ServerSoftware]
- if SERVER_SOFTWARE environment variable is not given.
- (WEBrick::CGI#start): req.path_info must be a String.
- (WEBrick::CGI::Socket#request_line): treat REQUEST_METHOD, PATH_INFO
- and SCRIPT_NAME to run in console.
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils.escape_path): should
- not use String#split("/"). it removes trailing empty path component.
-
-Thu Apr 28 08:21:51 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (set_arg0): use also environment variable space for setting
- $0. [ruby-core:04774]
-
-Wed Apr 27 23:42:22 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/Makefile.sub (OPTFLAGS): default global optimization to
- disabled only for VC++6.
-
-Tue Apr 26 22:58:00 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (ip_invoke_core): call Tcl's "::unknown"
- command when can't get information of target command.
-
-Mon Apr 25 13:54:55 2005 speakillof <speakillof@yahoo.co.jp>
-
- * lib/rexml/encodings/SHIFT-JIS.rb: encoding and decoding were
- swapped. [ruby-core:4772]
-
-Mon Apr 25 01:18:43 2005 Tanaka Akira <akr@m17n.org>
-
- * oniguruma.h (OnigWarnFunc): add a variadic argument.
- [ruby-core:4751]
-
-Sat Apr 23 19:49:21 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/tcltklib.c (ip_RubyExitCommand): exit with status code
- via TclTkIp#_eval didn't work. [ruby-talk:139390]
-
-Sat Apr 23 11:45:29 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_provided): should check also path name to be loaded.
- fixed: [ruby-dev:26093]
-
-Fri Apr 22 16:55:35 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/tcltklib.c (ip_set_exc_message): fixed memory leak.
-
- * ext/tk/tcltklib.c: eTkCallbackReturn was not initialized.
-
-Thu Apr 21 06:45:28 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (ruby_incpush_expand, proc_options): expand relative path
- given with -I option. [ruby-dev:26090]
-
- * configure.in, lib/mkmf.rb, {bcc32,win32,wince}/Makefile.sub: improve
- C++ support. [ruby-dev:26089]
-
-Thu Apr 21 01:53:09 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: add rdoc.
-
-Thu Apr 21 00:07:50 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): support platforms have file separator
- other than /.
-
- * {bcc32,win32,wince}/Makefile.sub (BUILD_FILE_SEPARATOR): separator
- of building platform.
-
- * {bcc32,win32,wince}/Makefile.sub (CP, INSTALL): use COPY command.
-
-Wed Apr 20 23:22:39 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, common.mk: miniruby depends on MINIOBJS.
-
- * dmydln.c (dln_load): dummy function to raise LoadError.
-
- * cygwin/GNUmakefile.in, {bcc32,win32,wince}/Makefile.sub: miniruby
- can't load extensions on Windows.
-
-Wed Apr 20 23:01:35 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/ifchange.bat: delete testing files.
-
-Wed Apr 20 22:54:54 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: new method Net::HTTP.post_form.
-
- * lib/net/http.rb: new method Net::HTTPHeader#set_form_data and
- its alias #form_data=.
-
- * lib/net/http.rb: Net::HTTPHeader#add_header -> add_field
- (adjustted to Ruby 1.8).
-
-Wed Apr 20 10:53:30 2005 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/rdoc/parsers/parse_rb.rb (lex_init): use IRB module.
- [ruby-core:04737]
-
-Wed Apr 20 07:27:18 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * {bcc32,win32,wince}/configure.bat, {bcc32,win32,wince}/setup.mak:
- add extout option.
-
- * bcc32/setup.mak: make configuration variables overridable.
-
-Tue Apr 19 23:37:09 2005 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/ftools.rb (File.safe_unlink): do not modify a symlinked file.
-
-Tue Apr 19 23:02:40 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (search_required): deal with features with path too.
-
- * intern.h (rb_file_expand_path): prototype. fixed: [ruby-dev:26082]
-
-Tue Apr 19 08:38:07 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (search_required, rb_require_safe): expand path in
- rb_features. [ruby-dev:26079]
-
- * file.c (rb_find_file_ext): return absolute path.
-
- * ext/extmk.rb: expand path for ext/**/extconf.rb.
-
- * eval.c (search_required): handle static linked extensions.
-
-Mon Apr 18 15:37:35 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_attr): attribute name check added.
-
- * numeric.c (flo_plus): small typo fix.
-
-Mon Apr 18 11:25:14 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/zlib/zlib.c (zstream_run): fixed SEGV. [ruby-core:4712]
-
-Sun Apr 17 23:57:49 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake, parse_args): do not expand destdir.
-
- * ext/extmk.rb (relative_from): treat mere drive letter as an absolute
- path.
-
-Sat Apr 16 17:01:16 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * sample/rss/tdiary_plugin/rss-recent.rb (rss_recent_cache_rss):
- use the first date information of items as site date information
- if channel doesn't have date information.
-
-Sat Apr 16 15:27:03 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (RUBY_PROG_INSTALL): not add -p option to INSTALL.
- files need timestamps to be kept are only ar-archive on a few
- platforms, and be installed by instruby.rb but not INSTALL.
- fixed: [ruby-core:04721]
-
- * mkconfig.rb: purge autoconf value variables.
-
-Sat Apr 16 10:33:48 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * bcc32/Makefile.sub: quick hack... prepend DESTDIR.
- still have restriction on DESTDIR ("", "/", "e:")
-
-Sat Apr 16 03:59:42 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: check for OPENSSL_cleanse.
-
- * ext/openssl/openssl_missing.h: ditto.
-
-Fri Apr 15 22:40:19 2005 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/tests/testWIN32OLE.rb: add test for WIN32OLE.codepage=
-
- * ext/win32ole/tests/testOLETYPELIB.rb: correct expected message.
-
-Fri Apr 15 22:04:07 2005 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c(ole_invoke): retry after converting Qnil
- to VT_EMPTY.
-
-Thu Apr 14 19:05:06 2005 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper] (regexp): dispatch regexp option.
- [ruby-Bugs:1688]
-
- * ext/ripper/lib/core.rb: regenerated (interface changed).
-
-Thu Apr 14 18:59:43 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (remove_file): ignore exceptions caused by
- chmod.
-
- * lib/fileutils.rb (remove_dir): try to get rights to rmdir.
- [ruby-Bugs:1502]
-
-Thu Apr 14 18:51:02 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/ruby-lex.rb, lib/irb/slex.rb: bug fix of [ruby-Bugs-1745]
-
- * lib/irb/ext/loader.rb, lib/irb/ext/save-history.rb:
- fix location of @RCS_ID
-
- * lib/irb/cmd/help.rb: a lost of release IRB 0.9.5.
-
-Thu Apr 14 15:10:30 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * lib/irb/notifier.rb, lib/irb/output-method.rb, lib/irb/ext/history.rb
- fixed warning of 'ruby -w'
-
-Thu Apr 14 05:35:45 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * doc/irb/irb.rd.ja: a lost of release IRB 0.9.5.
-
- * lib/irb/slex.rb: bug fix by [ruby-core:04707].
-
-Thu Apr 14 00:20:31 2005 Keiju Ishitsuka <keiju@ruby-lang.org>
-
- * bin/irb lib/irb.rb lib/irb/...: IRB 0.9.5.
-
-Wed Apr 13 23:40:21 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb (RSS::VERSION): 0.1.3 -> 0.1.4.
-
- * lib/rss/rss.rb (RSS::Element#converter): fixed converter
- transmission bug.
-
-Wed Apr 13 22:12:16 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#order!): call handlers iff matches
- non-switch.
-
-Wed Apr 13 21:20:35 2005 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (mingw32): extract msvcr*.dll from objdump result.
-
-Wed Apr 13 19:25:31 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (mingw32): use actual runtime DLL name as ruby DLL
- name and default load path.
-
- * win32/Makefile.sub, win32/setup.mak: ditto.
-
-Tue Apr 12 19:30:36 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#make_switch, OptionParser#order!):
- added non-option and end-of-args handler. [ruby-talk:136878]
- [EXPERIMENTAL]
-
-Tue Apr 12 15:33:09 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (ip_finalize): better modification than the
- previous commit [ruby-dev:26029].
-
-Tue Apr 12 12:38:06 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (ip_finalize): fix SEGV when Tcl_GlobalEval()
- modifies the argument string to eval.
-
-Tue Apr 12 02:21:55 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (ip_finalize): add existence check of
- Tcl commands before calling Tcl_GlobalEval().
-
-Mon Apr 11 23:36:04 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: [druby-ja:123] fix: When reference of my object is
- loaded, the object is tainted.
-
- * test/drb/test_drb.rb: ditto.
-
-Mon Apr 11 22:18:23 2005 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * dir.c, file.c (lstat): avoid warnings for mingw.
-
-Mon Apr 11 20:11:06 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (ip_finalize): adhoc patch to avoid SEGV when exit
- on Tcl/Tk8.3.x.
-
-Mon Apr 11 15:24:20 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (configuration): shouldn't output hdrdir twice.
-
-Sat Apr 9 18:20:31 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/image.rb: support to create TkImage object without
- creating a new image object on Tk.
-
- * ext/tk/lib/tk/menu.rb: use TkCommandNames on create_self()
-
- * ext/tk/lib/tk/root.rb: TkRoot.to_eval() returns '.'.
-
- * ext/tk/lib/tk/text.rb: add methods to create a TkText::IndexString
- from (x, y) coords.
-
- * ext/tk/lib/tkextlib/tile/: add demo and update support status.
-
-Sat Apr 9 14:42:29 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * sample/rss/tdiary_plugin/rss-recent.rb: supported configuration
- via Web browser.
-
-Fri Apr 8 20:17:48 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): hdrdir needs to be defined also in
- Config::CONFIG.
-
- * lib/mkmf.rb (configuration, create_makefile): get rid of recursive
- macro reference.
-
-Fri Apr 8 01:55:20 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/demos-{en,jp}/goldberg.rb: reduced window size.
- [ruby-dev:25992]
-
-Thu Apr 7 23:58:40 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): keep directory names in Makefile as macros.
-
- * lib/mkmf.rb (configuration, create_makefile): ditto.
-
- * lib/mkmf.rb (CXX_EXT): separate C++ extensions.
-
-Thu Apr 7 17:24:17 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * eval.c (rb_call0): "return" event hook should be always executed
- if event_hooks is set.
-
-Thu Apr 7 14:33:09 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rss/test_maker_dc.rb (test_date): added a test for #date=
- and #dc_date=.
-
-Thu Apr 7 11:49:53 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/dublincore.rb: _really_ supported multiple Dublin
- Core items.
-
- * test/rss/rss-assertions.rb (assert_multiple_dublin_core): added
- an assertion for testing multiple Dublin Core items.
-
- * test/rss/test_maker_dc.rb (test_rss10_multiple): added a test
- for making multiple Dublin Core items.
-
-Wed Apr 6 16:06:30 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * test/ruby/test_env.rb (test_key): should test ENV.key instead of
- ENV.index. [ruby-dev:25994]
-
-Tue Apr 5 16:01:12 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/*: refactored.
- - gave a name to 'x'.
- - undef_method -> remove_method for avoiding a warning in ruby 1.6.
-
-Tue Apr 5 15:45:33 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * sample/rss/tdiary_plugin/rss-recent.rb:
- new option: @options['rss-recent.use-image-link']:
- use image as link instread of text if available.
-
- * sample/rss/tdiary_plugin/rss-recent.rb (RSS_RECENT_VERSION):
- 0.0.5 -> 0.0.6.
-
-Tue Apr 5 15:15:26 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/dublincore.rb: supported multiple Dublin Core items.
-
- * lib/rss/parser.rb: added class name registry for complex model
- elements. (ex. have childlen elements, have some attributes and
- a child element and so on.)
-
- * lib/rss/maker/base.rb: added default current_element implementation.
-
- * lib/rss/maker/dublincore.rb: supported multiple Dublin Core
- items.
-
- * lib/rss/maker/image.rb: supproted new Dublin Core API.
-
- * lib/rss/trackback.rb (RSS::TrackBackUtils.new_with_value_if_need):
- moved to RSS::Utils.
-
- * lib/rss/utils.rb (RSS::Utils.new_with_value_if_need):
- moved from RSS::TrackBackUtils.
-
- * lib/rss/maker/image.rb: fixed invalid argument of
- add_need_initialize_variable bug.
-
- * lib/rss/maker/trackback.rb: ditto.
-
- * lib/rss/rss.rb (Hash#merge): added for ruby 1.6.
-
- * lib/rss/rss.rb (RSS::BaseModel.date_writer): changed to accept nil
- for date value.
-
- * test/test_dublincore.rb: added tests for plural accessor and
- multiple Dublin Core items.
-
- * test/test_setup_maker_1.0.rb: fixed swapped actual and expected
- values.
-
-Mon Apr 4 23:17:52 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb (TkComm#array2tk_list): accept enc-mode argument to
- decide whether convert encoding of each element or not.
-
- * ext/tk/lib/tk/variable.rb (TkVariable#value=): fail to convert the
- encoding of array elements when assign an array to an TkVariable
- object.
-
-Mon Apr 4 10:26:48 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/lib/tk/dialog.rb: fixed typo.
-
-Sat Apr 2 23:38:54 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (CP, INSTALL): get rid of less portable options.
-
- * lib/mkmf.rb (configuration, create_makefile): correct configuration
- variable.
-
- * wince/configure.bat, wince/setup.mak: add prefix, extstatic and
- rdoc options.
-
- * lib/mkmf.rb (create_makefile): ensure library directories get made
- before copying libraries there.
-
-Sat Apr 2 16:59:46 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: forgot to update RELEASE_DATE
-
- * ext/tk/lib/tk/variable.rb: fix namespace trouble when autoloading
-
- * ext/tk/lib/tk/palette.rb: define Tcl variable 'tkPalette' as global
-
- * ext/tk/lib/tk/dialog.rb: use array2tk_list method when calling
- Tk.ip_eval.
-
- * ext/tk/lib/tk/autoload.rb: add autoload entry 'TkDialogObj' and
- 'TkWarningObj'
-
-Sat Apr 2 13:23:17 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * hash.c (env_key): ENV.index is deprecated as well as Hash#index.
- use ENV.key instead. [ruby-dev:25974]
-
-Sat Apr 2 02:19:11 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb (TkWindow.initialize): accept 'without_creating'
- option without 'widgetname' option to allow creating a widget object
- which is used as an argument of Tcl/Tk's widget allocation commands.
-
- * ext/tk/lib/tk/image.rb (TkImage.initialize): accept 'imagename'
- option to create a image object by the given name.
-
-Thu Mar 31 22:23:51 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (SRC_EXT): exclude just case different suffixes on case
- insensitive file system platforms.
-
- * README.EXT, README.EXT.ja (Appendix C): utility functions.
-
-Thu Mar 31 14:08:43 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_engine.c (ossl_engine_s_load): should return
- value. [ruby-dev:25971]
-
-Thu Mar 31 11:07:50 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/parser.rb: @@setter -> @@setters.
-
- * lib/rss/parser.rb
- (RSS::BaseListener.register_uri)
- (RSS::BaseListener.uri_registered?)
- (RSS::BaseListener.install_get_text_element):
- swapped the first argument and the second argument.
-
- * lib/rss/taxonomy.rb: swapped the first argument and the second
- argument for RSS::BaseListener.install_get_text_element.
- * lib/rss/image.rb: ditto.
- * lib/rss/syndication.rb: ditto.
- * lib/rss/dublincore.rb: ditto.
- * lib/rss/parser.rb: ditto.
- * lib/rss/1.0.rb: ditto.
- * lib/rss/2.0.rb: ditto.
- * lib/rss/0.9.rb: ditto.
- * lib/rss/content.rb: ditto.
-
-Thu Mar 31 11:00:36 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/parser.rb
- (RSS::BaseListener.install_setter)
- (RSS::BaseListener.register_uri): changed fallback way.
-
-Thu Mar 31 08:25:40 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk (RUBYOPT): clear for the environment RubyGems installed.
-
- * common.mk (clean-local): keep $(PREP) files till distclean.
-
- * common.mk (check): do all tests.
-
-Thu Mar 31 06:00:20 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_engine.c (ossl_engine_s_load): should not raise
- error even if the specified engine could not be loaded. (Dynamic
- engines don't have fixed name to load.)
-
-Wed Mar 30 17:41:48 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: add TclTkIp#_create_console() method to create
- a Tcl/Tk's console window.
-
- * ext/tk/lib/multi-tk.rb: support TclTkIp#_create_console() method.
-
- * ext/tk/lib/remote-tk.rb: ditto.
-
- * ext/tk/lib/tk/console.rb: ditto.
-
- * ext/tk/lib/tk.rb: update RELEASE_DATE
-
- * ext/tk/sample/demo-*/check2.rb: use 'return' in the Proc object.
-
- * ext/tk/sample/tkextlib/**: ditto.
-
-Tue Mar 29 22:20:49 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/rinda/test_rinda.rb: use DRbObject.new_with instead of reinit.
- [ruby-dev:25961]
-
-Tue Mar 29 00:04:57 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: move method DRbObject#reinit to DRbObject.new_with.
- extract method DRbObject.prepare_backtrace. add DRb.regist_server,
- remove_server, fetch_server. change server in thread variable if
- in-proc server. [druby-ja:113]
-
- * lib/drb/gw.rb: ditto.
-
-Mon Mar 28 20:53:44 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extract_makefile): nothing to be removed when no file
- was deleted.
-
- * ext/extmk.rb (extmake): restore srcdir.
-
-Mon Mar 28 08:39:49 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_create): Iconv::Failure requires 3
- arguments. (pointed out by NaHi)
-
-Sun Mar 27 00:56:58 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (remove_file): ignore Errno::E* if force option
- is set. [ruby-dev:25944]
-
-Sat Mar 26 22:51:33 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb (_callback_entry_class?): add for checking whether
- a class is available for a callback entry.
-
- * ext/tk/lib/tk.rb (after_cancel): add Tk.after_cancel(afterID) method.
-
- * ext/tk/lib/tk.rb (array2tk_list): change from private module method
- of TkComm to public module method.
-
- * ext/tk/lib/tk.rb (cget): add check that slot argument is not
- empty string.
-
- * ext/tk/lib/tk.rb (configinfo): ditto.
-
- * ext/tk/lib/tk/itemconfig.rb (itemcget): add check that slot argument
- is not empty string.
-
- * ext/tk/lib/tk/itemconfig.rb (itemconfiginfo): ditto.
-
- * ext/tk/lib/tk/entry.rb: add TkEntry#icursor and icursor= (alias of
- cursor and cursor= method).
-
- * ext/tk/lib/tk/font.rb: improve font treatment when the font name is
- empty string.
-
- * ext/tk/lib/tk/variable.rb: add :variable, :window and :procedure
- type.
-
- * ext/tk/lib/tk/variable.rb: improve treatment of array-type
- tkvariable.
-
- * ext/tk/lib/tkextlib/blt.rb: add commands for zooming.
-
- * ext/tk/lib/tkextlib/blt/*: bug fix.
-
- * ext/tk/lib/tkextlib/treectrl/tktreectrl.rb: bug fix and add methods
- to call TreeCtrl commands for bindings.
-
- * ext/tk/sample/tkextlib/blt/*: new sample scripts.
-
- * ext/tk/sample/tkextlib/treectrl/*: ditto.
-
-Fri Mar 25 10:53:16 2005 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (WIN32_LEAN_AND_MEAN): removed because a lot of
- troubles. [ruby-list:40721]
-
-Thu Mar 24 23:10:44 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (macro_defined?): try to compile for an old compiler
- which doesn't bail out at #error directive. [ruby-dev:25818]
-
- * lib/mkmf.rb (check_sizeof): refine logging messages.
-
-Wed Mar 23 19:08:10 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/utils.rb (WEBrick::Utils.create_listeners):
- - should raise ArgumentError if no port is specified.
- - even if the specified port is 0, all TCPServers should be
- initialized with the port given to the first one.
-
- * lib/webrick/server.rb (WEBrick::GenericServer#initialize): if :Port
- parameter is 0, it should be updated with the port number which
- ectually listened.
-
-Wed Mar 23 16:12:40 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * parse.y (primary): fix lineno of rescue and ensure.
-
-Wed Mar 23 00:39:05 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/ruby/test_settracefunc.rb (test_event): added tests for
- "class" and "end" and "raise".
-
-Sun Mar 20 22:51:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (mkmf_failed): check if Makefile is created without
- create_makefile.
-
-Sat Mar 19 23:48:10 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-expr-beg): returned true always.
- fixed: [ruby-list:40683]
-
-Sat Mar 19 00:41:02 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/font.rb: add some TkFont class methods to get font
- information without creating a TkFont object.
-
- * ext/tk/lib/tkextlib/treectrl/tktreectrl.rb: bug fix and define some
- classes for components of Tk::TreeCtrl
-
-Thu Mar 17 17:42:13 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (make_struct): allow non local-id field
- names. [ruby-core:04575]
-
- * struct.c (inspect_struct): ditto.
-
-Wed Mar 16 23:39:13 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/ruby/test_settracefunc.rb: added test for c-return.
-
-Wed Mar 16 22:57:43 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * eval.c (rb_call0): call_cfunc() should be protected.
-
- * eval.c (rb_add_event_hook): use K&R style.
-
- * eval.c (rb_remove_event_hook): ditto.
-
-Wed Mar 16 22:03:15 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * eval.c (rb_add_event_hook): new function to add a hook function for
- interpreter events.
-
-Wed Mar 16 18:08:32 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): reorganize "return" event post.
-
- * eval.c (return_jump): no need to post "return" event here.
-
-Tue Mar 15 23:49:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (Init_iconv): InvalidEncoding also should include
- Iconv::Failure.
-
-Tue Mar 15 23:12:36 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (recursive_check, recursive_push): more restrictive check.
- fixed: [ruby-dev:25916]
-
-Tue Mar 15 16:38:31 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tkutil/tkutil.c (ary2list): give wrong arguments to hash2kv()
-
-Mon Mar 14 19:39:33 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/timer.rb (TkTimer): forgot to clear @return_value
- when restarting
-
- * ext/tk/lib/tk/sample/cd_timer.rb: new sample of TkRTTimer
-
-Mon Mar 14 12:21:03 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/timer.rb (TkRTTimer): forgot to reset the callback
- time. So, 'continue' do all callbacks between 'stop' and 'continue'.
-
-Mon Mar 14 08:14:56 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (str_to_id): raise ArgumentError for NUL containing
- strings.
-
-Mon Mar 14 00:13:49 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/timer.rb (TkRTTimer): correct calculation of offset
- value. get a little better accuracy.
-
- * ext/tk/sample/demos-en/widget: use a binding with no local variables
- when eval a sample script.
-
- * ext/tk/sample/demos-en/bind.rb: ditto.
-
- * ext/tk/sample/demos-en/tcolor: ditto.
-
- * ext/tk/sample/demos-jp/widget: ditto.
-
- * ext/tk/sample/demos-jp/bind.rb: ditto.
-
- * ext/tk/sample/demos-jp/tcolor: ditto.
-
-Sun Mar 13 22:19:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (recursive_pop): raise TypeError instead of fatal error.
- fixed: [ruby-dev:25843]
-
-Sun Mar 13 10:09:17 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/rinda/test_rinda.rb: remove test_gc. [ruby-dev:25871]
-
-Sun Mar 13 02:32:54 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ssl.c (ossl_tmp_dh_callback): should get DH
- parameter from the current SSL object.
-
-Sun Mar 13 02:09:03 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_pkey_dh.c (ossl_create_dh): fix typo.
- patch from IWATSUKI Hiroyuki. [ruby-dev:25867]
-
- * ext/openssl/ossl_ssl.c (ossl_tmp_dh_callback): ditto.
- (ossl_call_tmp_dh_callback): ditto
-
-Fri Mar 11 03:24:59 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (primary): wrong var node was set for NODE_LAMBDA.
- [ruby-core:04555]
-
-Thu Mar 10 19:10:29 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (lib_eventloop_ensure): mis-delete a timer handler
- when exit from a recursive called eventloop
-
- * ext/tk/lib/tk/timer.rb: new TkRTTimer class, which can works for a
- realtime operation
-
- * ext/tk/sample/tkrttimer.rb: sample of TkRTTimer class
-
- * ext/tk/lib/tk/textmark.rb: move TkTextMark#+ and TkTextMark#- to
- TkText::IndexModMethods
-
- * ext/tk/lib/tk/text.rb: improve TkTextMark#+ and TkTextMark#-, and
- add them to TkText::IndexModMethods module
-
- * ext/tk/sample/tktextio.rb: add test part of "seek by text index
- modifiers"
-
-Thu Mar 10 08:10:11 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (make_regexp): need to free internal regexp structure when
- compilation fails. [ruby-talk:133228]
-
-Thu Mar 10 01:08:20 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (bv_decl): remove initialize rule from block local
- variable declaration.
-
-Wed Mar 9 23:55:34 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb (PP::PPMethods#guard_inspect_key): support
- __recursive_key__. [ruby-dev:25821]
-
-Wed Mar 9 19:42:21 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ssl.c: OpenSSL::SSL::SSLContexts suports callbacks:
- - SSLContext#client_cert_cb is a Proc. it is called when a client
- certificate is requested by a server and no certificate was yet
- set for the SSLContext. it must return an Array which includes
- OpenSSL::X509::Certificate and OpenSSL::PKey::RSA/DSA objects.
- - SSLContext#tmp_dh_callback is called in key exchange with DH
- algorithm. it must return an OpenSSL::PKey::DH object.
-
- * ext/openssl/ossl_ssl.c:
- (ossl_sslctx_set_ciphers): ignore the argument if it's nil.
- (ossl_start_ssl, ossl_ssl_write): call rb_sys_fail if errno isn't 0.
- [ruby-dev:25831]
-
- * ext/openssl/ossl_pkey.c
- (GetPrivPKeyPtr, ossl_pkey_sign): should call rb_funcall first.
- (DupPrivPKeyPtr): new function.
-
- * ext/openssl/ossl_pkey_dh.c: add default DH parameters.
-
- * ext/openssl/ossl_pkey.h: ditto.
-
- * ext/openssl/lib/openssl/cipher.rb: fix typo. [ruby-dev:24285]
-
-Wed Mar 9 18:09:51 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (gettable_gen): warns if VCALL name is used as
- out-of-scope block local variable. [EXPERIMENTAL]
-
- * parse.y (opt_bv_decl): add explicit block local variable
- declaration. raises error for name conflicts. [EXPERIMENTAL]
-
-Wed Mar 9 13:37:57 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/tktextio.rb: fix bug of handling 'end' position.
- support initial text, overwrite setting and pos_gravity control.
-
-Tue Mar 8 18:16:55 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/tktextio.rb: New sample script. TkTextIO class in this
- sample supports to use a text widget as if it is a I/O stream (such
- like as StringIO class).
-
-Tue Mar 8 13:39:25 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/mkconstants.rb: workaround for some of 4.4BSD-Lite
- derived OSs.
-
-Tue Mar 8 12:36:17 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c: document from Sam Roberts
- <sroberts@uniserve.com> for getsockopt and setsockopt is merged.
- [ruby-doc:824]
-
-Tue Mar 8 10:48:53 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (rb_exec_recursive): declaration should precede statements
- before C99.
-
-Tue Mar 8 10:05:40 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (errno_missing): Errno.const_missing to allow references
- to SyscallError exceptions not defined on the platform.
- [ruby-core:04522]
-
- * error.c (Init_syserr): Errno::NOERROR(0) for fallback exception.
-
-Tue Mar 8 01:19:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: follow nkf 1.66
- fixed: [ruby-dev:25828]
-
-Mon Mar 7 21:29:40 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/server.rb (WEBrick::GenericServer#start): should
- restore @token if accept failure. suggested by Dominique Brezinski.
- [ruby-core:04518]
-
- * sample/webrick/httpsd.rb: fix typo in comment. suggested by
- Kazuhiko Shiozaki.
-
-Mon Mar 7 21:01:37 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_require_safe): get actual path string under safe level
- when requested. fixed: [ruby-dev:25815]
-
-Mon Mar 7 16:46:02 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/ossl_ssl.c (ossl_start_ssl, ossl_ssl_read,
- ossl_ssl_write): need to set errno on Win32 platform.
-
-Mon Mar 7 14:55:43 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (block_pass): should not push unique number if a block is
- not an orphan. [ruby-dev:25808]
-
-Mon Mar 7 14:13:23 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/buffering.rb (Buffering#initialize):
- should set @eof and @rbuffer.
-
-Mon Mar 7 10:28:00 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (inspect_obj): unintended space removal.
- [ruby-dev:25810]
-
- * eval.c (rb_exec_recursive): should not use NODE in disclosed
- context. [ruby-dev:25812]
-
- * io.c (rb_f_open): need not to check if to_open value is a
- T_FILE. [ruby-dev:25812]
-
-Mon Mar 7 01:21:01 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tkutil/tkutil.c: follow the change of st.c (committed
- at Fri, 4 Mar 2005 15:47:47 +0900 by matz)
-
-Mon Mar 7 00:01:55 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: fail to call TclTkLib.mainloop when $SAFE==4
-
-Sun Mar 6 13:04:10 2005 Dee Zsombor <zsombor@ruby-lang.org>
-
- * misc/ruby-electric.el: added.
- * misc/Readme: updated.
-
-Sun Mar 6 11:47:10 2005 Sam Roberts <sroberts@uniserve.com>
-
- * lib/pp.rb: rdoced. [ruby-core:4490]
-
-Sun Mar 6 11:36:37 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb (File::Stat#pretty_print): Etc.getpwuid and Etc.getgrgid
- may return nil. [ruby-talk:129826]
- reported by Daniel Berger.
-
-Sun Mar 6 06:34:31 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ssl.c (ossl_start_ssl): should wait for that
- the underlying IO become readable or writable if the error was
- SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE. [ruby-dev:25795]
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_read, ossl_ssl_write): ditto.
-
- * ext/openssl/lib/openssl/buffering.rb
- (Buffering#consume_rbuf): pointless eof flag resetting is deleted.
- (Buffering#read): should return an empty string if the specified
- size is zero.
- (Buffering#readpartial): new method.
- (Buffering#readline): fix typo.
- (Buffering#getc): return the first character of string correctly.
- (Buffering#readchar): fix typo.
- (Buffering#eof?): should read again it the input buffer is empty.
- (Buffering#do_write): should rescue Errno::EAGAIN.
- (Buffering#puts): use "\n" as the output field separator.
-
- * ext/openssl/extconf.rb: get rid of GNUmakefile generation.
-
- * text/openssl/test_pair.rb: test for IO like methods.
-
- * test/ruby/ut_eof.rb: test about empty file.
-
-Sat Mar 5 17:48:31 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (rb_glob): fixed mismatch of argument.
-
- * dir.c (fnmatch): removed unnecessary code. (by string.c 1.219)
-
- * win32/win32.c (NtInitialize): ditto. (by numeric.c 1.117)
-
-Sat Mar 5 16:50:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: follow nkf 1.65
-
-Sat Mar 5 16:29:26 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: freeze callback-entry objects
-
- * ext/tk/lib/tkextlib/tile.rb: support tile-0.6
-
-Sat Mar 5 12:52:08 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): allow putting spaces between target
- and colon in depend file.
-
-Sat Mar 5 02:41:00 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * file.c (eaccess): workaround for VC++8 runtime.
-
- * win32/win32.c (ioinfo): VC++8 support.
-
-Fri Mar 4 19:39:55 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser#do_includes): replace
- also locally defined modules.
-
- * ext/iconv/iconv.c: rdocified.
-
- * ext/strscan/strscan.c: moved misplaced rdoc.
-
-Fri Mar 4 16:11:20 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (rb_exec_recursive): matched the declaration to prototype.
-
- * ext/curses/curses.c: don't need to check HAVE_WCOLOR_SET excluding
- window_color_set().
-
- * ext/tk/tcltklib.c: fixed commit mistakes.
-
-Fri Mar 4 12:45:17 2005 Tilman Sauerbeck <tilman@code-monkey.de>
-
- * lib/rdoc/parsers/parse_c.rb: allow whitespace after function names.
- [ruby-core:4296]
-
- * lib/rdoc/parsers/parse_simple.rb: adds support for private comments
- in the "simple" parser. [ruby-core:4301]
-
-Fri Mar 4 12:45:17 2005 Charles Mills <cmills@freeshell.org>
-
- * lib/rdoc/parsers/parse_c.rb: adds support for constants
- (rb_define_const), accessors (rb_define_attr), and makes a
- couple fixes. [ruby-core:4307]
-
-Fri Mar 4 12:45:17 2005 Florian Gross <florgro@gmail.com>
-
- * lib/rdoc/parsers/parse_rb.rb: Logic for def Builtin.method() end
- [ruby-core:4302]
-
-Fri Mar 4 12:45:17 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c: replace rb_protect_inspect() and rb_inspecting_p() by
- rb_exec_recursive() in eval.c.
-
- * eval.c (rb_exec_recursive): new function.
-
- * array.c (rb_ary_join): use rb_exec_recursive().
-
- * array.c (rb_ary_inspect, rb_ary_hash): ditto.
-
- * file.c (rb_file_join): ditto.
-
- * hash.c (rb_hash_inspect, rb_hash_to_s, rb_hash_hash): ditto.
-
- * io.c (rb_io_puts): ditto.
-
- * object.c (rb_obj_inspect): ditto
-
- * struct.c (rb_struct_inspect): ditto.
-
-Fri Mar 4 10:15:30 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/set.rb (SortedSet::setup): a hack to shut up warning.
- [ruby-talk:132866]
-
-Fri Mar 4 09:37:12 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * common.mk (install-nodoc, pre-install-doc, post-install-doc):
- fix some omissions.
-
-Fri Mar 4 08:09:12 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/time.rb (Time::strptime): add new function. inspired by
- [ruby-talk:132815].
-
- * lib/parsedate.rb (ParseDate::strptime): ditto.
-
-Fri Mar 4 07:07:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: follow nkf 1.63
-
-Thu Mar 3 23:24:00 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: follow nkf 1.62
-
-Thu Mar 3 18:47:18 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * {bcc32,win32,wince}/Makefile.sub (config.h): check if affected
- when makefiles are modified.
-
- * {bcc32,win32,wince}/Makefile.sub (config.status): add variables
- for tests.
-
- * win32/ifchange.bat: try to update a file only if modified.
-
- * win32/resource.rb: more descriptions.
-
- * common.mk: add {pre,post}-install targets.
-
- * instruby.rb (install?): install particular part.
-
- * bcc32/Makefile.sub (post-install-ext): remove debug information
- files after installation.
-
- * ext/tk/tcltklib.c (ip_rbUpdateCommand, ip_rb_threadUpdateCommand):
- get rid of warnings with Tcl/Tk 8.3 or former.
-
-Thu Mar 3 11:49:51 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * sample/rss/tdiary_plugin/rss-recent.rb: added site information.
-
-Wed Mar 2 19:53:44 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (parse_args): return false if nothing matched.
-
-Wed Mar 2 17:15:08 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c (lib_eventloop_core): fix typo
-
-Wed Mar 2 16:59:50 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * eval.c (ruby_native_thread_kill): call pthread_kill() to send a
- signal to ruby's native thread
-
- * ruby.h: add definition of ruby_native_thread_kill()
-
- * signal.c (sigsend_to_ruby_thread): send the signal to ruby's
- native thread ([ruby-dev:25744], [ruby-dev:25754]), and set
- signal mask to the current native thread
-
-Wed Mar 2 16:03:08 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: enforce thread-check and exception-handling to
- avoid SEGV trouble.
-
- * ext/tk/tkutil/tkutil.c: fix a bug on converting a SJIS string array
- to a Tcl's list string.
-
- * ext/tk/tcltklib.c: wrap Tcl's original "namespace" command to
- protect from namespace crash.
-
- * ext/tk/lib/multi-tk.rb: enforce exception-handling.
-
- * ext/tk/lib/multi-tk.rb: catch IRB_EXIT to work on irb.
-
- * ext/tk/lib/tk.rb: ditto.
-
- * ext/tk/tcltklib.c: add TclTkLib.mainloop_thread?
-
- * ext/tk/lib/multi-tk.rb: (bug fix) callback returns a value.
-
- * ext/tk/lib/tk/canvas.rb (delete): bug fix when multiple arguments.
-
- * ext/tk/lib/clock.rb: fix 'no method error'.
-
- * ext/tk/lib/clock.rb (self.clicks): accept a Symbol argument.
-
- * ext/tk/lib/variable.rb: be able to set default_value_type; :numeric,
- :bool, :string, :symbol, :list, :numlist or nil (default; same to
- :string). If set a type, TkVariable#value returns a value of the
- type.
-
- * ext/tk/lib/tkextlib/tclx/tclx.rb: add Tk::TclX.signal to warn the
- risk of using TclX extension's 'signal' command.
-
- * ext/tk/sample/irbtk.rb: irb with Ruby/Tk.
-
- * ext/tk/sample/demos-*/anilabel.rb: bug fix on 'show code'
-
- * ext/tk/sample/demos-*/aniwave.rb: new Ruby/Tk animation demo.
-
- * ext/tk/sample/demos-*/pendulum.rb: ditto.
-
- * ext/tk/sample/demos-*/goldberg.rb: ditto.
-
- * ext/tk/sample/demos-*/widget: add entries of animation demos.
-
-Wed Mar 2 12:21:18 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval): [EXPERIMENTAL] NODE_LAMBDA implemented.
- [ruby-dev:25780]
-
- * node.h (NODE_LAMBDA): for literal Proc object.
-
- * parse.y (expr): interpret mere do...end block as proc object.
-
- * parse.y (primary): ditto, for brace block.
-
-Tue Mar 1 21:16:54 2005 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * regcomp.c (optimize_node_left): uninitialized member
- (OptEnv.backrefed_status) was used. [ruby-dev:25778]
-
-Tue Mar 1 16:50:37 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regparse.c: move st_*_strend() functions from st.c. fixed some
- potential memory leaks.
-
-Tue Mar 1 00:40:35 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/rinda/tuplespace.rb (Rinda::TupleSpace): improved keeper thread.
-
- * test/rinda/test_rinda.rb: ditto.
-
-Mon Feb 28 23:10:13 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/socket/socket.c (Init_socket): IPv6 is not supported although
- AF_INET6 is defined on bcc32. (rev1.108 again)
-
- * ext/socket/mkconstants.rb: ditto.
-
-Mon Feb 28 21:55:49 2005 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * ext/strscan/strscan.c (strscan_s_allocate):
- use onig_region_init().
-
- * ext/strscan/strscan.c (adjust_registers_to_matched):
- use onig_region_set().
-
-Mon Feb 28 15:12:06 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/socket/socket.c (Init_socket): ported more Socket::Constants
- from ruby_1_8, and made it easy to add new constants.
- [ruby-dev:25771]
-
- * ext/socket/depend: ditto.
-
- * ext/socket/mkconstants.rb: ditto. (added)
-
-Mon Feb 28 11:42:23 2005 Ian Macdonald <ian@caliban.org>
-
- * exception error messages updated. [ruby-core:04497]
-
-Mon Feb 28 09:03:09 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (Init_socket): add bunch of Socket
- constants. Patch from Sam Roberts <sroberts@uniserve.com>.
- [ruby-core:04409]
-
-Sun Feb 27 05:55:38 2005 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: fix typo. [ruby-core:04494]
-
-Sat Feb 26 16:58:20 2005 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * parse.y, re.c, regex.h, LEGAL, ext/strscan/strscan.c:
- remove oniggnu.h (GNU regex API).
-
-Wed Feb 23 22:08:16 2005 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * st.c, st.h: imported additional file changes on
- Oniguruma 3.7.0.
-
-Wed Feb 23 21:45:29 2005 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * ascii.c, euc_jp.c, oniggnu.h, oniguruma.h, regcomp.c,
- regenc.c, regenc.h, regerror.c, regexec.c, regint.h,
- regparse.c, regparse.h, sjis.c, utf8.c: imported Oni Guruma
- 3.7.0.
-
-Wed Feb 23 15:04:32 2005 akira yamada <akira@ruby-lang.org>
-
- * lib/uri/generic.rb (split_userinfo): should split ":pass" into ""
- and "pass". [ruby-dev:25667]
-
-Wed Feb 23 08:00:18 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_s_create): no need for negative argc check.
- [ruby-core:04463]
-
- * array.c (rb_ary_unshift_m): ditto.
-
-Wed Feb 23 01:53:29 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (initialize): handle certs correctly. Thanks,
- NABEYA Kenichi.
-
-Wed Feb 23 00:37:34 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/mkmf.rb (mkmf_failed): fixed typo.
-
-Tue Feb 22 23:52:45 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in, lib/mkmf.rb: use simple commands if available.
-
- * mkconfig.rb: remove autoconf internal variables from rbconfig.rb.
-
- * lib/mkmf.rb (create_makefile): substitute implicit rules in depend
- file.
-
- * {bcc32,win32,wince}/Makefile.sub (COMPILE_RULES, RULE_SUBST):
- include $(topdir) and $(hdrdir) to search path.
-
-Tue Feb 22 23:51:45 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/rubyext.c: get rid of warnings caused by a bug of VC.
-
-Tue Feb 22 23:50:26 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (ruby_signal, ruby_nativethread_signal): must be valid as
- expressions, not only statements.
-
-Tue Feb 22 12:54:13 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_start_0): update curr_thread before raising
- TAG_THREAD. [ruby-dev:25712]
-
-Tue Feb 22 07:24:57 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yylex): identifier after dot must not be a variable.
-
-Mon Feb 21 18:31:12 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * signal.c: Standard signal handlers ignore signals on non-Ruby native
- threads. When a handler is entried with ruby_signal() (like as the
- standard signal handlers), the handler for the signal is marked as
- it cannot accept non-Ruby native threads. If a handler can treat all
- signals on all native threads, please use ruby_nativethread_signal()
- to entry it.
-
-Sun Feb 20 00:48:48 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (URI::FTP#buffer_open): access mechanism
- re-implemented according to RFC 1738.
- reported by Guillaume Marcais. [ruby-talk:131650]
-
-Sat Feb 19 18:46:56 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb (DRbObject#respond_to?): take two arguments.
- [ruby-dev:25722]
-
- * test/drb/drbtest.rb: ditto.
-
-Sat Feb 19 13:52:02 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb: call OpenSSL::SSL::SSLSocket#post_connection_check
- after connection is made.
-
-Sat Feb 19 13:31:28 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extract_makefile): remove no longer existing installed
- files.
-
- * lib/mkmf.rb (install_dirs): return installation directory list.
-
- * lib/mkmf.rb (create_makefile): reverted wrongly removed lines.
-
-Sat Feb 19 01:28:56 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/bigdecimal/lib/bigdecimal/newton.rb: resolved LoadError.
- [ruby-dev:25685]
-
- * ext/bigdecimal/sample/linear.rb: ditto.
-
- * ext/bigdecimal/sample/nlsolve.rb: ditto.
-
- * ext/bigdecimal/lib/bigdecimal/nlsolve.rb: removed because this file
- is sample script and same file exists in ext/bigdecimal/sample.
-
-Fri Feb 18 17:14:00 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/xmlrpc/parser.rb (XMLRPC::FaultException): make it subclass
- of StandardError class, not Exception class. [ruby-core:04429]
-
-Fri Feb 18 04:06:41 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (fcall_gen): lvar(arg) will be evaluated as
- lvar.call(arg) when lvar is a defined local variable. [new]
-
-Thu Feb 17 22:15:34 2005 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * ext/strscan/strscan.c: calls Oniguruma API directly.
-
-Thu Feb 17 21:53:12 2005 K.Kosako <sndgk393 AT ybb.ne.jp>
-
- * common.mk, LEGAL: remove reggnu.c.
-
-Thu Feb 17 21:53:12 2005 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * gc.c, re.c: now ruby calls Oniguruma API directly, bypassing
- GNU compatible APIs.
-
-Thu Feb 17 20:09:23 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/drb/drb.rb (DRbServer.default_safe_level): fix typo.
-
-Thu Feb 17 20:09:23 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/digest/test_digest.rb: separate test case for each algorithms.
- [ruby-dev:25412]
-
-Thu Feb 17 14:31:52 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_class_initialize): call inherited method before
- calling initializing block.
-
- * eval.c (rb_thread_start_1): initialize newly pushed frame.
- fixed: [ruby-dev:25707]
-
-Thu Feb 17 13:46:00 2005 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/collector.rb (collect_file): now deletes paths added
- to $LOAD_PATH instead of restoring it verbatim.
-
- * lib/test/unit/autorunner.rb (AutoRunner.run): fixed so that
- 'ruby -rtest/unit -rtest1 -rtest2 -e0' will use the objectspace
- collector again. Also tried to simplify the calling convention.
-
- * test/runner.rb: adjusted for new AutoRunner semantics.
-
- * lib/test/unit.rb: ditto.
-
-Thu Feb 17 04:21:47 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/open3.rb (Open3::popen3): $? should not be EXIT_FAILURE.
- fixed: [ruby-core:04444]
-
-Thu Feb 17 00:31:21 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/drb/test_drb.rb, ut_safe1.rb: port from 1.8
-
-Thu Feb 17 00:02:27 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (is_defined): NODE_IASGN is an assignment.
-
-Wed Feb 16 23:54:14 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_start_1): outer block variables wasn't linked to
- threads. fixed: [ruby-dev:25700]
-
-Wed Feb 16 15:11:43 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/ssl.rb (OpenSSL::Nonblock#initialize):
- native win32 platform doesn't have F_GETFL.
-
-Wed Feb 16 02:47:45 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_read, ossl_ssl_write): should
- call rb_sys_fail instead of raising SSLError if SSL_ERROR_SYSCALL
- occurred.
-
- * ext/openssl/lib/openssl/buffering.rb (Buffering#fill_rbuff):
- should rescue Errno::EAGAIN.
-
- * ext/openssl/lib/openssl/buffering.rb (Buffering#each): fix typo.
- suggested by Brian Ollenberger.
-
- * ext/openssl/lib/openssl/ssl.rb: set non-blocking flag to the
- underlying IO.
-
-Tue Feb 15 22:14:34 2005 sheepman <sheepman@tcn.zaq.ne.jp>
-
- * ext/readline/readline.c (Readline.readline): use rl_outstream
- and rl_instream. [ruby-dev:25699]
-
-Mon Feb 14 23:58:17 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/parser.rb (RSS::ListenerMixin::tag_end):
- fixed invalid namespace handling bug.
-
-Mon Feb 14 13:12:38 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/ssl.rb
- (OpenSSL::SSL::SSLSocket#post_connection_check): new method.
-
-Mon Feb 14 00:10:17 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb (DRbServer): add default_safe_level, safe_level,
- config[:safe_level] ([druby-ja:120])
-
- * test/drb/test_drb.rb, ut_eval.rb, ut_safe1.rb: ditto.
-
-Sun Feb 13 23:13:46 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/dublincore.rb (RSS::DublicCoreModel#date{,=}): added
- convenient methods.
-
- * lib/rss/0.9.rb (RSS::Rss::Channel#date{,=}): ditto.
-
- * lib/rss/2.0.rb (RSS::Rss::Channel::Item#date{,=}): ditto.
-
- * test/rss/: added tests for the convenient methods.
-
-Sun Feb 13 23:12:47 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_start_0): restore prot_tag before rewinding.
-
-Sun Feb 13 16:56:52 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb (WEBrick::CGI.start): should set reason-phrase
- to the value of status header field. ([ruby-dev:40617])
-
-Sun Feb 13 11:38:40 2005 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * regparse.c (type_cclass_hash): (Thanks Nobu) fixed
- overrun. ([ruby-dev:25676]).
-
-Sun Feb 13 10:53:08 2005 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * oniggnu.h, oniguruma.h, regcomp.c, st.c: imported
- Oni Guruma 3.6.0.
-
-Sun Feb 13 01:33:19 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/erb.rb (ERB::Util.h, u): make it module_function.
-
-Sat Feb 12 22:17:11 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (TAG_THREAD): to start a new thread.
-
- * eval.c (ruby_init, ruby_options, ruby_cleanup, rb_protect,
- rb_load_protect, rb_thread_start_0): make thread anchor.
-
- * eval.c (proc_alloc): clone proc object if klass is not Proc or
- created in different thread.
-
- * eval.c (rb_block_pass): call a function with a block. [new]
-
- * eval.c (rb_f_throw): raise NameError in main thread.
-
-Sat Feb 12 17:29:19 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (OpenURI.open_loop): send authentication only for
- the URI directly specified.
-
-Sat Feb 12 15:07:23 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * random.c (rand_init): suppress warning.
-
-Sat Feb 12 14:10:24 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (OpenURI.open_http): reject userinfo explicitly.
-
-Sat Feb 12 13:54:03 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb: support https if the platform provides CA
- certificates.
-
-Sat Feb 12 06:18:28 2005 URABE Shyouhei <shyouhei@ice.uec.ac.jp>
-
- * ext/etc/etc.c (Init_etc): sGroup needs HAVE_ST_GR_PASSWD check
- [ruby-dev:25675]
-
-Fri Feb 11 17:37:50 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_x509store.c (ossl_x509store_set_default_paths):
- new method OpenSSL::X509::Store#set_default_paths.
-
-Fri Feb 11 11:33:53 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (URI::HTTP#proxy_open): new option supported:
- :http_basic_authentication.
- suggested by Kent Sibilev. [ruby-core:4392]
-
-Fri Feb 11 06:30:07 2005 George Ogata <g_ogata@optushome.com.au>
-
- * misc/ruby-mode.el: ignore parenthesis inside heredoc.
- [ruby-core:04415]
-
-Fri Feb 11 04:54:13 2005 Tilman Sauerbeck <tilman@code-monkey.de>
-
- * lib/rdoc/generators/html_generator.rb: [ruby-core:04412]
-
- * lib/rdoc/generators/ri_generator.rb: ditto.
-
-Thu Feb 10 13:52:42 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * configure.in, win32/Makefile.sub (LIBS, COMMON_HEADERS): use
- winsock2 on mswin32/mingw.
-
- * ext/socket/extconf.rb: ditto.
-
- * win32/win32.c (StartSockets): ditto.
-
- * win32/win32.h: ditto.
-
-Thu Feb 10 12:09:16 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extract_makefile): default to true if not compiled
- previously.
-
- * ext/extmk.rb (extmake): create dummy makefile if extconf failed.
-
-Thu Feb 10 12:07:10 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (init_stdhandle): assign standard file handles.
-
- * bcc32/Makefile.sub (COMMON_LIBS): add libraries included in
- import32.lib.
-
- * lib/mkmf.rb (create_makefile): restrict prefixing with srcdir to
- rule lines, add search path to implicit rules, and set Borland make
- special macros for search path.
-
- * win32/win32.c, win32/win32.h (read): avoid a BCC runtime bug.
-
-Thu Feb 10 00:47:25 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (make_struct): fixed: [ruby-core:04402]
-
-Wed Feb 9 16:33:05 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/socket.c (wait_connectable): fixed wrong condition.
-
-Wed Feb 9 14:42:28 2005 URABE Shyouhei <shyouhei@ice.uec.ac.jp>
-
- * eval.c (scope_dup): add volatile not to optimize tbl.
-
-Wed Feb 9 10:02:02 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/tk/make-tkutil, ext/tk/tkutil/subconf.rb: no longer used.
-
- * ext/tk/tkutil/extconf.rb: need to compile tkutil. [ruby-dev:25607]
-
-Wed Feb 9 08:07:08 2005 Paul Duncan <pabs@pablotron.org>
-
- * ext/curses/curses.c (window_color_set): [ruby-core:04393]
-
-Tue Feb 8 23:48:36 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: reject :instance_eval, :class_eval, :module_eval
- [druby-ja:117]
-
-Tue Feb 8 22:38:28 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * keywords, parse.y: separate EXPR_VALUE from EXPR_BEG.
- fixed: [ruby-core:04310], [ruby-core:04368]
-
-Tue Feb 8 13:06:12 2005 Sam Roberts <sroberts@uniserve.com>
-
- * ext/socket/socket.c (Init_socket): SO_REUSEPORT added.
- [ruby-talk:130092]
-
-Tue Feb 8 00:19:02 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/resolv.rb (Resolv::DNS::Name#subdomain_of?): new method.
- (Resolv::DNS::Name#inspect): ditto.
- Suggested by Sam Roberts. [ruby-talk:129086]
-
-Mon Feb 7 23:14:11 2005 Tanaka Akira <akr@m17n.org>
-
- * io.c (io_getc): flush rb_stdout before read from stdin, which is
- connected to a tty. [ruby-core:4378]
-
- * rubyio.h (FMODE_TTY): renamed from FMODE_LINEBUF.
-
-Mon Feb 7 10:06:30 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c: [ruby-doc:818]
-
-Mon Feb 7 02:13:05 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/extconf.rb (sockaddr_storage): winsock2.h have the
- definition of struct sockaddr_storage, but socket.c doesn't
- include it because this version of ruby still has binary level
- compatibility with winsock1.
-
-Mon Feb 7 01:22:50 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extract_makefile): extract previously collected
- informations from existing Makefile.
-
- * ext/socket/extconf.rb: check if getaddrinfo() works fine only when
- wide-getaddrinfo option is not given. fixed: [ruby-dev:25422]
-
- * ext/tk/extconf.rb: separate tkutil configuration.
-
- * lib/mkmf.rb ($extmk): check if under ext directory.
-
- * lib/mkmf.rb (Logging.postpone): allow recursive operation.
-
- * lib/mkmf.rb (try_constant): make sure if really a constant, reduce
- the number of times of compile.
-
- * lib/mkmf.rb (have_macro, have_var, byte_order): new functions.
-
- * lib/mkmf.rb (find_library): allow directory list with separators.
-
- * lib/mkmf.rb (arg_config): manage provided configuration options.
-
- * lib/mkmf.rb (dir_config): accept arrays of directory names as
- default values.
-
- * lib/mkmf.rb (with_cppflags, with_cflags, with_ldflags): keep flags
- modified if the block returned true.
-
-Sun Feb 6 19:20:05 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (stack_extend): add prototype because VC++8 doesn't
- accept __declspec(noinline) with K&R style function definitions.
-
-Sun Feb 6 13:56:19 2005 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (new_with_hash): changed messages of exception.
-
- * lib/date/format.rb (str[fp]time): undocumented conversion
- specifications %[1-3] are now deprecated.
-
-Sun Feb 6 11:27:37 2005 Tanaka Akira <akr@m17n.org>
-
- * ext/dl/dl.c (Init_dl): function declaration should precede
- statements before C99.
-
-Sun Feb 6 03:24:20 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/resolv.rb (Resolv::DNS::Resource::TXT): multiple strings was not
- handled.
- (Resolv::DNS::Resource::TXT#strings): new method to return all
- strings.
- (Resolv::DNS::Message::MessageEncoder#put_string_list): new method.
- (Resolv::DNS::Message::MessageDecoder#get_string_list): ditto.
- based on [ruby-talk:129732] by Sam Roberts.
-
-Sat Feb 5 02:24:06 2005 Minero Aoki <aamine@loveruby.net>
-
- * test/ripper/test_scanner_events.rb: fix test.
-
-Fri Feb 4 18:44:35 2005 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/lib/ripper/lexer.rb: last Lexer fix was incomplete;
- test all green.
-
-Fri Feb 4 15:57:06 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (open_args): fix too verbose warnings for the space
- before argument parentheses. [ruby-dev:25492]
-
- * parse.y (parser_yylex): ditto.
-
-Fri Feb 4 14:33:25 2005 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/lib/ripper/filter.rb: ripper/tokenizer ->
- ripper/lexer. [ruby-dev:25632]
-
-Fri Feb 4 00:24:15 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss: supported Image module.
- http://web.resource.org/rss/1.0/modules/image/
-
-Thu Feb 3 23:42:36 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_close, strio_close_read, strio_close_write):
- should return nil instead of self as well as IO. [ruby-dev:25623]
-
- * ext/stringio/stringio.c (strio_extend, strio_putc): fill with zero
- extended portion. [ruby-dev:25626]
-
-Thu Feb 3 16:12:57 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (parser_yylex): the first expression in the parentheses
- should not be a command. [ruby-dev:25492]
-
-Thu Feb 3 03:31:20 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: follow original v 1.57
-
- * ext/nkf/nkf-utf8/utf8tbl.c: follow original v 1.8
-
- * ext/nkf/nkf-utf8/config.h: follow original v 1.7
-
-Wed Feb 2 23:52:53 2005 sheepman <sheepman@tcn.zaq.ne.jp>
-
- * ext/stringio/stringio.c (strio_truncate): should MEMZERO an extended
- part. [ruby-dev:25618]
-
-Wed Feb 2 21:56:01 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb (RSS::Element#convert): added.
-
- * lib/rss/rss.rb: convert -> need_convert.
-
- * lib/rss/1.0.rb: ditto.
-
- * lib/rss/0.9.rb: ditto.
-
- * lib/rss/2.0.rb: ditto.
-
- * lib/rss/trackback.rb: ditto.
-
-Wed Feb 2 03:30:58 2005 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/lib/ripper/tokenizer.rb -> lexer.rb.
-
- * ext/ripper/lib/ripper/lexer.rb: new method Ripper.slice.
- [experimental]
-
- * ext/ripper/lib/ripper/sexp.rb: new file. [experimental]
-
- * ext/ripper/lib/ripper.rb: require ripper/lexer and ripper/sexp.
-
-Tue Feb 1 21:49:24 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb (DRb::DRbObject#respond_to?): check marshal_dump and
- _dump.
-
-Tue Feb 1 00:20:23 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, configure.in: made EXTOUT configurable.
-
- * ext/extmk.rb (extmake), lib/mkmf.rb: keep topdir as relative style.
-
- * lib/mkmf.rb: make extensions in depth order. [ruby-dev:25522]
-
- * configure.in (aix): fix linker flags on AIX. [ruby-talk:125460]
-
-Mon Jan 31 13:16:39 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/extconf.rb: add tkutil configuration step (remove old schema)
-
- * ext/tk/depend: remove the information of tkutil
-
- * ext/tk/make-tkutil: sub-part of Makefile to compile tkutil
-
- * ext/tk/tkutil/tkutil.c: move tkutil.c to subdirectory
-
- * ext/tk/tkutil/subconf.rb: configuration file for tkutil.c
-
- * ext/tk/tkutil/depend: ditto
-
-Mon Jan 31 13:13:35 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tcltklib.c: add invalid namespace check
-
- * ext/tk/lib/multi-tk.rb: add invalid_namespace? method
-
- * ext/tk/lib/remote-tk.rb: ditto
-
-Mon Jan 31 10:29:18 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/context.rb (IRB::Context::initialize): [ruby-core:04330]
-
-Mon Jan 31 09:44:03 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (Init_Object): remove Object#type. [ruby-core:04335]
-
-Sat Jan 29 09:42:12 2005 Sam Roberts <sroberts@uniserve.com>
-
- * lib/resolv.rb (Resolv::DNS::Resource::IN::SRV): Added RFC2782 SRV
- resource record for specifying location of services.
-
-Sat Jan 29 00:10:33 2005 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * ascii.c, euc_jp.c, hash.c, oniggnu.h, oniguruma.h, regcomp.c,
- regenc.c, regenc.h, regerror.c, regexec.c, reggnu.c, regint.h,
- regparse.c, regparse.h, sjis.c, st.c, st.h, utf8.c: imported
- Oni Guruma 3.5.4.
-
-Fri Jan 28 17:16:55 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/resolv.rb (Resolv::DNS::Config.parse_resolv_conf):
- parse options line for ndots option.
- (Resolv::Hosts#lazy_initialize): return self.
- (Resolv::DNS#lazy_initialize): ditto.
- (Resolv::DNS::Config#lazy_initialize): ditto.
- Suggested by Sam Roberts.
-
-Thu Jan 27 17:15:03 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/tk/extconf.rb: support new tk scheme on bccwin32.
- fixed: [ruby-dev:25546]
-
-Thu Jan 27 13:18:03 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * st.c (st_foreach): report success/failure by return value.
- [ruby-Bugs-1396]
-
-Thu Jan 27 00:12:19 2005 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb (setup): support BSD style
- directory group inheritance (again).
-
-Thu Jan 27 00:02:40 2005 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb (setup): support BSD style
- directory group inheritance. [ruby-dev:25440]
-
- * test/fileutils/fileasserts.rb (assert_same_entry): show entry
- difference.
-
-Wed Jan 26 17:12:50 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: forgot to initialize parser struct. [ruby-dev:25492]
-
- * parse.y (parser_yylex): no tLABEL on EXPR_BEG.
- [ruby-talk:127711]
-
-Wed Jan 26 14:12:58 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/Setup*: remove tcltklib.
-
-Wed Jan 26 12:45:16 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/tk/extconf.rb: support new tk scheme on mswin32.
- fixed: [ruby-dev:25535]
-
-Wed Jan 26 10:45:19 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (flock_winnt, flock_win95): unlock file even if
- LOCK_NB is specified.
-
-Tue Jan 25 23:10:48 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk: merge tcltklib for Ruby/Tk installation control
-
- * ext/tcltklib: remove
-
-Tue Jan 25 17:05:15 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ruby.c (proc_options): correct -T option in RUBYOPT.
- fixed: [ruby-dev:25512]
-
-Tue Jan 25 14:05:52 2005 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: fix SEGV bug; trouble on canceling remained
- after scripts [ruby-dev:25479]: NULL current namespace when deleting
- Tk interpreter [ruby-talk:126225]
-
- * ext/tcltklib/extconf.rb: bug fix; TCL_ENABLE_THREAD flag is inverted
- [ruby-talk:126360]
-
- * ext/tcltklib/extconf.rb: add yet another native-thread check
-
- * ext/tk/tkutil.c: fix SEGV bug; NULL string pointer when finalize
- Ruby interpreter
-
- * ext/tk/lib/multi-tk.rb: avoid warning for deleted safeTk ip frame
-
- * ext/tk/lib/tk/bindtag.rb: bug fix; new method of named bindtag
- doesn't return the created object [ruby-dev:25479]
-
- * ext/tk/lib/tk/menu.rb: bug on treating arguments [ruby-dev:25479]
-
- * ext/tk/lib/tk.rb: bug fix; cannot accept a callback ID string for
- a command argument [ruby-dev:25479]
-
- * ext/tk/lib/multi-tk.rb: ditto
-
- * ext/tk/lib/tk/*.rb: ditto
-
- * ext/tk/lib/tkextlib/*.rb: ditto
-
- * ext/tk/sample/demos-jp/anilabel.rb: new demo script
-
- * ext/tk/sample/demos-en/anilabel.rb: ditto
-
- * ext/tk/sample/tkHTML/ss.rb: local variable scope bug fix
- [ruby-dev:25479]
-
-Mon Jan 24 16:00:53 2005 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/lib/kconv.rb (guess_old): not use NKF.guess_old
- but NKF.guess1. fixed: [ruby-dev:25491]
-
-Mon Jan 24 15:44:25 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * document updates - [ruby-core:04296], [ruby-core:04301],
- [ruby-core:04302], [ruby-core:04307]
-
-Sun Jan 23 12:38:01 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/wsdlDriver.rb: from 1.5.3-ruby1.8.2, operation which has
- capitalized name (such as KeywordSearchRequest in AWS) is defined as
- a method having uncapitalized name. (converted with
- GenSupport.safemethodname to handle operation name 'foo-bar'). it
- introduced serious incompatibility; in the past, it was defined as a
- capitalized.
-
- define capitalized method as well under that circumstance.
-
-Sun Jan 23 05:24:42 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ocsp.c (ossl_ocspreq_to_der): should call
- GetOCSPReq at first.
-
-Sat Jan 22 22:59:08 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/ssl.rb (accept): rescue SSLError. [druby-ja:110]
-
-Sat Jan 22 22:27:28 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/unix.rb: fail if UNIXFileOwner is set. [druby-ja:111]
-
-Fri Jan 21 20:07:02 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/resolv.rb (Resolv::DNS::Config.resolv): don't raise ResolvError.
- reported by Sam Roberts. [ruby-talk:127133]
-
-Fri Jan 21 17:09:44 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (decode_utf7): use pack("U*") to encode UTF-8.
-
- * lib/net/imap.rb (encode_utf7): use unpack("U*") to decode UTF-8.
-
- * test/net/imap/test_imap.rb: added tests for Net::IMAP.
-
-Fri Jan 21 16:58:10 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (rb_push_glob): should work for NUL delimited patterns.
-
- * dir.c (rb_glob2): should aware of offset in the pattern.
-
-Fri Jan 21 13:58:37 2005 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (u8tou16): fixed typo. fixed: [ruby-list:40546]
-
-Fri Jan 21 00:37:09 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/syck/rubyext.c (syck_parser_bufsize_set): avoid VC++ warning
- "local variable 'size' used without having been initialized".
-
-Thu Jan 20 11:42:02 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_new4): should propagate taintedness.
-
- * env.h: rename member names in struct FRAME; last_func -> callee,
- orig_func -> this_func, last_class -> this_class.
-
- * struct.c (rb_struct_set): use original method name, not callee
- name, to retrieve member slot. [ruby-core:04268]
-
- * time.c (time_strftime): protect from format modification from GC
- finalizers.
-
-Thu Jan 20 02:01:10 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (Init_Object): remove rb_obj_id_obsolete()
-
-Wed Jan 19 18:02:19 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/ipaddr.rb (to_s, test_to_s): too many colons with some cases.
-
-Wed Jan 19 01:16:30 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/resolv.rb (Resolv::DNS::Config.parse_resolv_conf): ignore
- domain and search directive without an argument.
- reported by Sam Roberts. [ruby-talk:126781]
-
-Mon Jan 17 23:33:46 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (aix): fix typo. [ruby-talk:126401]
-
-Mon Jan 17 07:08:51 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/readline/readline.c: suppress warnings.
-
- * lib/irb/extend-command.rb (IRB::ContextExtender.def_extend_command):
- ditto.
-
- * lib/irb/ext/history.rb (IRB::Context::set_last_value): ditto.
-
- * lib/irb/ext/history.rb (IRB::Context::eval_history): ditto.
-
- * lib/irb/locale.rb (IRB::Locale::real_load): ditto.
-
- * lib/irb/slex.rb (SLex::Node::create_subnode): remove garbage.
-
-Mon Jan 17 00:09:42 2005 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/uri/common.rb (PORT): typo fix. fixed: [ruby-core:04256]
-
-Sat Jan 15 14:57:22 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (proc_options): ignore trailing CRs at the end of short
- options as well as long options. fixed: [ruby-core:04232]
-
-Sat Jan 15 13:44:22 2005 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb (RSS::VERSION): 0.1.2 -> 0.1.3.
-
- * lib/rss/rss.rb: accept inheritance. [ruby-talk:126104]
-
-Wed Jan 12 12:29:28 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_mod_define_method): incomplete subclass check.
- [ruby-dev:25464]
-
- * class.c (rb_make_metaclass): class of metaclasses should be
- plain Class. [ruby-list:40524]
-
-Tue Jan 11 20:58:52 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (remain_size): use buffered data instead of unreading to avoid
- inconsistency of text mode. fixed: [ruby-dev:25446]
-
-Tue Jan 11 09:37:53 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * numeric.c (Init_Numeric): turn off floating point exceptions
- on bcc32. "1e300".to_f had crashed by overflow.
-
-Mon Jan 10 15:28:51 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb (WEBrick::CGI::Socket#request_line): should
- escape SCRIPT_NAME and PATH_INFO before being parsed as a URI.
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils#escape_path): add
- new method to escape URI path component.
-
- * lib/webrick/ssl.rb (WEBrick::Config::SSL): the default value
- of :SSLEnable is false.
-
- * test/webrick/{test_cgi.rb,webrick.cgi}: new file.
-
- * test/webrick/utils.rb: require "webrick/https.h".
-
-Mon Jan 10 01:22:55 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (rb_data_object_alloc): klass may be NULL.
- [ruby-list:40498]
-
-Sun Jan 9 14:12:17 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_f_select): IO list could be altered. [ruby-dev:25312]
-
-Sun Jan 9 04:08:40 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * test/webrick/test_server.rb (test_daemon): delete an assertion
- which has possibility to fail by race condition.
-
-Sun Jan 9 03:22:46 2005 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb (test_copy_entry): copy_entry
- copies only file type, not mtime. [ruby-dev:25383]
-
-Sat Jan 8 04:38:47 2005 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml.rb: Kernel#y requires an argument.
-
-Fri Jan 7 21:12:29 2005 TAMURA Takashi <sheepman@tcn.zaq.ne.jp>
-
- * random.c (rand_init): use ALLOC_N instead of ALLOCA_N
- [ruby-dev:25426]
-
-Fri Jan 7 20:01:31 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#proxy_service):
- should delete trailing LF from the result of pack("m*").
-
- * lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#proxy_connect):
- - should delete trailing LF from the result of pack("m*").
- - clear Request-Line not to send the response by HTTPServer#run.
-
- * lib/webrick/httputils (WEBrick::HTTPUtils.parse_qvalues):
- refine regexp (and change the name of a local variable).
-
- * lib/webrick/server.rb (WEBrick::Daemon.start): prepared stdio
- don't allow changing its mode.
-
- * test/webrick/*, sample/webrick/httpproxy.rb: add new files.
-
-Fri Jan 7 18:03:35 2005 Tanaka Akira <akr@m17n.org>
-
- * gc.c (mark_locations_array): avoid core dump with -O3.
- [ruby-dev:25424]
-
-Thu Jan 6 20:29:18 2005 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/zlib/zlib.c (zstream_end): should return value.
-
-Thu Jan 6 19:59:03 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.c (rb_w32_close): didn't close socket handle.
- [ruby-dev:25414]
-
- * win32/win32.c (rb_w32_open_osfhandle): bcc32's _open_osfhandle
- never set EMFILE.
-
-Thu Jan 6 17:22:41 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * random.c (random_seed): O_NONBLOCK isn't defined on some
- platforms. [ruby-dev:25417]
-
-Thu Jan 6 13:45:35 2005 Tanaka Akira <akr@m17n.org>
-
- * lib/time.rb: recognize +00:00 and GMT as a localtime.
-
-Thu Jan 6 07:58:28 2005 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/usage.rb (RDoc::RDoc.usage_no_exit): Allow for colons
- in path names on DOS machines. (thanks to Johan Nilsson)
-
-Thu Jan 6 00:02:35 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/rinda/test_rinda.rb: use MockClock.sleep instead of Kernel.sleep
- [ruby-dev:25387]
-
-Wed Jan 5 20:16:32 2005 Tanaka Akira <akr@m17n.org>
-
- * random.c (limited_big_rand): didn't work if SIZEOF_BDIGITS == 2.
- [ruby-dev:25408]
-
- * random.c (random_seed): refined.
-
-Wed Jan 5 16:39:54 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * parse.y (BITSTACK_POP): workaround for bcc32 compiler's bug.
- shift assignment operator '>>=' for __int64 in struct may
- generate collapsed code. [ruby-dev:25342]
-
- * win32/win32.[ch]: failed to compile on bcc32 (and probably wince)
- [ruby-dev:25306]
-
-Wed Jan 5 12:49:39 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_initialize): Thread objects cannot be initialized
- again. fixed: [ruby-core:04067]
-
-Wed Jan 5 02:30:11 2005 Tanaka Akira <akr@m17n.org>
-
- * random.c (init_by_array): imported from mt19937ar-cok.tgz.
- (genrand_int32): ditto.
- (genrand_real): replaced with genrand_res53 in mt19937ar-cok.
- (rand_init): support bignum for longer seed.
- (random_seed): generate longer seed.
- (make_mask): new function.
- (limited_rand): ditto.
- (limited_big_rand): ditto.
- (rb_f_rand): call limited_rand and limited_big_rand.
- [ruby-dev:25403]
-
-Tue Jan 4 23:25:29 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_rand): should return positive random number.
- [ruby-dev:25401]
-
-Tue Jan 4 21:25:43 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/drb/{test_drbssl.rb,test_drbunix.rb,ut_drb.rb}: use
- DRbService.ext_service. reduce sleep.
-
-Mon Jan 3 14:01:54 2005 Tanaka Akira <akr@m17n.org>
-
- * random.c (random_seed): don't use /dev/urandom if it is not
- character device.
-
-Mon Jan 3 11:37:42 2005 Tanaka Akira <akr@m17n.org>
-
- * random.c (random_seed): use /dev/urandom if available.
- [ruby-dev:25392]
-
-Tue Jan 4 11:15:29 2005 TAMURA Takashi <sheepman@tcn.zaq.ne.jp>
-
- * bignum.c (rb_big_rand): do not use rb_big_modulo to generate
- random bignums. [ruby-dev:25396]
-
-Mon Jan 3 11:03:37 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/drb/test_drb.rb: move TestDRbReusePort to new file.
- [ruby-dev:25238]
-
- * test/drb/drbtest.rb: change timeout.
-
- * test/drb/ignore_test_drb.rb: new file.
-
-Mon Jan 3 07:27:46 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpauth/htpasswd.rb (WEBrick::Htpasswd#reload):
- raise NotImplementedError if password is encrypted by digest
- algorithms. This patch is contributed by sheepman. [ruby-list:40467]
-
- * lib/webrick/httpauth/digestauth.rb
- (WEBrick::HTTPAuth::DigestAuth#_authenticate): fix digest calculation.
- This patch is contributed by sheepman. [ruby-list:40482]
-
- * lib/webrick/{httpauth.rb,httpauth/basicauth.rb,httpproxy.rb}: use
- pack/unpack-template char "m" instead of lib/base64.rb to do base64
- encoding/decoding. fixed: [ruby-dev:25336]
-
- * test/webrick/test_httpauth.rb: new file.
-
-Sun Jan 2 15:42:10 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: add lazy stop_service.
-
- * lib/drb/extserv.rb: ditto.
-
-Sun Jan 2 01:17:17 2005 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/drb/drbtest.rb: add method DRbService.ext_service.
-
- * test/drb/test_drb.rb: ditto.
-
- * test/drb/test_drbssl.rb: ditto.
-
-Sat Jan 1 20:23:02 2005 Tanaka Akira <akr@m17n.org>
-
- * io.c (argf_readpartial): new method ARGF.readpartial.
- (io_getpartial): extracted from io_readpartial.
- (io_readpartial): call io_getpartial.
-
-Sat Jan 1 17:44:54 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (each_capitalized): should join header field
- value. This patch is contributed sheepman [ruby-list:40478]
-
- * test/net/http/test_httpheader.rb: test it.
-
-Sat Jan 1 16:21:29 2005 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (copy_stream): use read/write instead of
- sysread/syswrite, which allows duck typing. [ruby-dev:25369]
-
- * lib/fileutils.rb (copy_stream): does NOT support nonblocking IO.
- [ruby-dev:25370]
-
- * lib/fileutils.rb (copy_entry): could not copy symlink.
-
- * test/fileutils/test_fileutils.rb: test copy_entry, copy_file,
- copy_stream.
-
-Sat Jan 1 04:20:23 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ns_spki.c (ossl_spki_set_challenge): should call
- StringValue before GetSPKI. fixed: [ruby-dev:25359].
-
-Sat Jan 1 01:13:28 2005 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_autoload): [ruby-dev:25373]
-
-Fri Dec 31 14:10:43 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/ri/ri_formatter.rb (RI::TextFormatter::display_flow_item):
- Fix problem if heading contains formatting.
-
-Fri Dec 31 00:08:02 2004 Tanaka Akira <akr@m17n.org>
-
- * configure.in (HAVE_RLIM_T): removed because not used.
-
-Thu Dec 30 22:45:39 2004 Tanaka Akira <akr@m17n.org>
-
- * rubyio.h: don't deprecate rb_read_check.
-
- * io.c (STDIO_READ_DATA_PENDING): reverted from old READ_DATA_PENDING
- to check stdio read buffer.
- (rb_read_check): use STDIO_READ_DATA_PENDING.
- (rb_read_pending): ditto.
- (rb_getc): ditto.
-
-Thu Dec 30 05:39:35 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y: eliminate unused members in struct parser_params.
- [ruby-dev:25258] (again)
-
- * parse.y: make parser_new() static.
-
-Thu Dec 30 00:41:42 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (svalue_to_avalue): [ruby-dev:25366]
-
- * string.c (rb_str_justify): [ruby-dev:25367]
-
-Wed Dec 29 11:07:07 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/template/html/kilmer.rb: Update to use new
- sections.
-
-Tue Dec 28 22:31:46 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_justify): create buffer string after argument type
- conversion. fixed: [ruby-dev:25341]
-
-Tue Dec 28 17:18:17 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/net/telnet.rb (preprocess): remove NULL unless binmode.
- fixed: [ruby-list:40320]
-
-Tue Dec 28 15:41:48 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c (reinit): should initialize all static
- variables. fixed: [ruby-list:40445]
-
-Tue Dec 28 15:25:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/nkf/lib/kconv.rb (Kconv::RegexpEucjp): second byte is up to
- 0xfe.
-
- * ext/nkf/lib/kconv.rb (Kconv#kconv): should handle UTF8 and UTF16
- properly.
-
-Tue Dec 28 13:35:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/zlib/zlib.c (rb_deflate_s_deflate, rb_inflate_s_inflate): ensure
- freeing internal zstreams. fixed: [ruby-dev:25309]
-
- * ext/zlib/zlib.c (rb_deflate_init_copy): replace rb_deflate_clone.
-
-Mon Dec 27 20:02:14 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: fix SEGV bug when deleting Tk interp
-
- * ext/tk/lib/multi-tk.rb: ditto
-
-Mon Dec 27 16:54:05 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_x509name.c (Init_ossl_x509name): should use
- rb_hash_new to get exactly a Hash. fix [ruby-dev:25325].
-
-Mon Dec 27 15:29:12 2004 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb (cp_r): tested wrong file name.
- [ruby-dev:25339]
-
-Mon Dec 27 15:15:18 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (mv): should raise error when moving a
- directory to the (empty) directory. [ruby-talk:124368]
-
- * lib/fileutils.rb (mv): wrongly did not overwrite file on Win32
- platforms.
-
-Mon Dec 27 14:36:20 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (NUM2RLIM, RLIM2NUM): Without SIZEOF_RLIM_T is not error.
- fixed: [ruby-dev:25346]
-
-Sun Dec 26 16:21:39 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (Net::IMAP::PlainAuthenticator): added a new class
- to support the PLAIN authentication mechanism. Thanks, Benjamin
- Stiglitz.
-
-Sat Dec 25 01:28:23 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_select): [ruby-dev:25312]
-
-Fri Dec 24 23:27:18 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/image.rb: TkPhotoImage#cget bug fix
-
-Fri Dec 24 03:06:13 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_reopen, rb_io_reopen): prohibit to change access mode for
- special IO ports. [ruby-dev:25225]
-
- * io.c (next_argv): reduce use of stdio.
-
-Fri Dec 24 02:22:53 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/rubyext.c (syck_loader_transfer): check type conversion.
-
- * ext/syck/rubyext.c (syck_parser_assign_io, rb_new_syck_node): duck
- typing.
-
- * ext/syck/rubyext.c (syck_parser_s_alloc, syck_parser_initialize):
- allocation framework.
-
- * ext/syck/rubyext.c (syck_emitter_s_alloc, syck_emitter_initialize):
- ditto.
-
-Fri Dec 24 01:21:00 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tkextlib/blt.rb: add BLT extension support
-
- * ext/tk/lib/tkextlib/blt/*.rb: ditto
-
- * ext/tk/lib/tkextlib/blt/tile/*.rb: ditto
-
-Thu Dec 23 23:43:24 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (proc_setgroups): check if the argument length is
- modified. fixed: [ruby-dev:25285]
-
- * process.c (SIZEOF_RLIM_T): err if size of rlim_t is not set.
-
-Thu Dec 23 19:08:41 2004 Tanaka Akira <akr@m17n.org>
-
- * rubyio.h: rename FMODE_UNSEEKABLE to FMODE_DUPLEX.
-
- * io.c (io_check_tty): extracted function to set FMODE_LINEBUF and
- FMODE_DUPLEX.
-
-Thu Dec 23 13:13:33 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: define TclTkLib::COMPILE_INFO and
- RELEASE_DATE
-
- * ext/tcltklib/extconf.rb: ditto
-
- * ext/tk/tkutil.c: define TkUtil::RELEASE_DATE
-
- * ext/tk/lib/tk.rb: define Tk::RELEASE_DATE
-
-Thu Dec 23 00:16:32 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (bsdi): use $(CC) for LDSHARED. fixed [ruby-dev:25270]
-
-Wed Dec 22 11:14:55 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_mode_modenum): replace O_ACCMODE with O_RDWR.
- fixed: [ruby-dev:25273]
-
-Wed Dec 22 08:34:32 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/dl/sym.c (rb_dlsym_initialize): extract internal pointers after
- all argument conversion. fixed: [ruby-dev:25271]
-
-Tue Dec 21 16:15:21 2004 Michael Neumann <mneumann@ruby-lang.org>
-
- * lib/xmlrpc/client.rb: use "" instead of "." if prefix argument is
- nil in proxy methods. nil is default value.
-
- * test/xmlrpc/test_webrick_server.rb, test/xmlrpc/webrick_testing.rb:
- use threads instead of forking. this should fix issue #1208
- (http://rubyforge.org/tracker/?func=detail&atid=1698&aid=1208&group_id=426).
- removed testing of SSL enabled servlet as this hangs.
-
-Wed Dec 22 00:05:10 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/*, test/soap/*, sample/soap/authheader/*: eval cleanup.
-
-Tue Dec 21 22:07:41 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_asn1.c (ossl_asn1_decode_all): use rb_str_new4
- to avoid SEGV.
-
- * ext/openssl/ossl_asn1.c (ossl_asn1_traverse, ossl_asn1_decode,
- ossl_asn1_decode_all): temporary value should be marked volatile.
-
-Tue Dec 21 12:42:34 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_asn1.c (ossl_asn1_traverse, ossl_asn1_decode):
- use rb_str_new4 to avoid SEGV. fix [ruby-dev:25261]
-
- * test/openssl/test_asn1.rb: add tests for OpenSSL::ASN1.
-
-Tue Dec 21 12:10:04 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/grid.rb: rescue bug of 'grid configure' on Tcl/Tk8.3-
-
-Mon Dec 20 22:52:29 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * added samples for the previous soap4r's commit.
-
-Mon Dec 20 22:56:39 2004 Tanaka Akira <akr@m17n.org>
-
- * gc.c (set_stack_end): gcc noinline attribute is available since
- gcc-3.1.
-
-Mon Dec 20 22:40:31 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * added files:
- * lib/soap/mapping/wsdl*.rb
- * lib/wsdl/soap/element.rb
- * lib/wsdl/xmlSchema/simpleContent.rb
-
- * modified files:
- * lib/soap/*
- * lib/wsdl/*
- * lib/xsd/*
- * test/soap/*
- * test/wsdl/*
- * test/xsd/*
-
- * summary
- * imported from the soap4r repository. Version: 1.5.3-ruby1.8.2
-
- * added several XSD basetype support: nonPositiveInteger,
- negativeInteger, nonNegativeInteger, unsignedLong, unsignedInt,
- unsignedShort, unsignedByte, positiveInteger
-
- * HTTP client connection/send/receive timeout support.
-
- * HTTP client/server gzipped content encoding support.
-
- * improved WSDL schema definition support; still is far from
- complete, but is making step by step improvement.
-
-Mon Dec 20 14:45:19 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/net/https.rb: delete descriptions about key_file and cert_file.
- fixed: [ruby-dev:25243]
-
- * ext/openssl/lib/net/telnets.rb: ditto.
-
-Mon Dec 20 14:07:02 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: supports new features of Tcl/Tk8.5a2
-
- * ext/tk/lib/tk/clock.rb: ditto
-
- * ext/tk/lib/tk/text.rb: ditto
-
- * ext/tk/lib/tk/panedwindow.rb: ditto
-
-Mon Dec 20 13:51:40 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (sock_s_getservbyport): [ruby-talk:124072]
-
-Mon Dec 20 10:51:58 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (special_local_set): prevent the parser object from GC.
- fixed: [ruby-dev:25252]
-
-Mon Dec 20 03:30:40 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/cgi/session.rb (CGI::Session#initialize): empty session id was
- used if request had no session key. fixed: [ruby-core:03981]
-
-Mon Dec 20 01:51:01 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (make_struct): [ruby-dev:25249]
-
-Mon Dec 20 00:16:54 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rexml/encodings/SHIFT_JIS.rb: fixed LoadError bug.
- [ruby-core:3958]
-
-Sun Dec 19 17:24:59 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (enable_rpath): use rpath flag to embed the library
- path into extensions on ELF environment. [ruby-dev:25035]
-
-Sun Dec 19 11:01:25 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit.rb: use standalone runner for -e.
-
- * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner#options): accept
- multiple -p and -x options.
-
- * lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#recursive_collect):
- ditto.
-
-Sat Dec 18 16:36:23 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/zlib/zlib.c (rb_deflate_s_deflate, rb_inflate_s_inflate):
- disallow interrupt by type conversion. fixed: [ruby-dev:25226]
-
-Sat Dec 18 15:09:02 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/webrick/httpauth.rb,
- lib/webrick/httpauth/{basicauth.rb,digestauth.rb}: use
- pack/unpack-template char "m" instead of lib/base64.rb to do base64
- encoding/decoding.
-
-Sat Dec 18 10:51:01 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (dir_open_dir): new function. [ruby-dev:25242]
-
- * io.c (rb_f_open): add type check for return value from to_open.
-
-Fri Dec 17 16:44:26 2004 Tanaka Akira <akr@m17n.org>
-
- * configure.in (ac_cv_sizeof_rlim_t): set 8 for BSD/OS.
- Reported by OHARA Shigeki. [ruby-dev:25236]
-
-Fri Dec 17 16:28:12 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: fix bug on setting up system encoding
-
- * ext/tk/lib/tk/event.rb: fix error on require process
-
- * ext/tk/lib/tk/font.rb: fix abnormal termination error on Windows
-
- * ext/tk/lib/tk/virtevent.rb: TkVirtualEvent::PreDefVirtEvent.new()
- accepts event-sequence arguments
-
- * ext/tk/lib/tk/text.rb: fail to dump embedded images
-
- * ext/tk/lib/tk/text.rb: tag_nextrange and tag_prevrange returns wrong
- types of values
-
- * ext/tk/lib/tk/texttag.rb: nextrange and prevrange returns wrong
- types of values
-
- * ext/tk/lib/tk/text.rb: add TkText::IndexModMethods module and
- TkText::IndexString class to treat text index modifiers
-
- * ext/tk/lib/tk/texttag.rb: use TkText::IndexModMethods module
-
- * ext/tk/lib/tk/textmark.rb: ditto
-
- * ext/tk/lib/tk/textimage.rb: ditto
-
- * ext/tk/lib/tk/textwindow.rb: ditto
-
- * ext/tk/lib/tk/textimage.rb: wrong gravity of text mark for embedded
- image
-
- * ext/tk/lib/tk/textwindow.rb: wrong gravity of text mark for
- embedded window
-
-Fri Dec 17 13:33:58 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/cgi/session.rb (CGI::Session#initialize): control adding
- session_id hidden fields. fixed: [ruby-talk:123850]
-
-Fri Dec 17 00:01:48 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_proc_arity, rb_node_arity, rb_mod_method_arity,
- rb_obj_method_arity): new functions to obtain method arity.
- [ruby-dev:25143]
-
-Thu Dec 16 23:31:13 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): create RUBYARCHDIR also when no extension
- is installed. fixed: [ruby-dev:25215]
-
-Thu Dec 16 22:36:57 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/drb/test_drb.rb: adjust and reduce sleep.
-
-Thu Dec 16 18:37:08 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl.c (ossl_raise): refine message format.
-
-Thu Dec 16 16:29:44 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/demos-en/widget: modify version check for
- supporting features
-
-Thu Dec 16 16:03:50 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/bindtag.rb: bug fix [ruby-talk: 123667]
-
- * ext/tk/lib/tk/timer.rb: accept :idle for the interval argument
-
- * ext/tk/lib/tk.rb: add TkComm._callback_entry?()
-
- * ext/tk/lib/multi-tk.rb: add MultiTkIp.cb_entry_class
-
- * ext/tk/lib/tk/canvas.rb: use TkComm._callback_entry?()
-
- * ext/tk/lib/tk/canvastag.rb: ditto
-
- * ext/tk/lib/tk/dialog.rb: ditto
-
- * ext/tk/lib/tk/optiondb.rb: ditto
-
- * ext/tk/lib/tk/text.rb: ditto
-
- * ext/tk/lib/tk/texttag.rb: ditto
-
- * ext/tk/lib/tk/textwindow.rb: ditto
-
- * ext/tk/lib/tk/timer.rb: ditto
-
- * ext/tk/lib/tk/validation.rb: ditto
-
- * ext/tk/lib/tkextlib/*: ditto
-
-Thu Dec 16 04:02:28 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/extconf.rb: bison is not needed if ripper.c exists.
- [ruby-dev:25191]
-
-Thu Dec 16 03:27:10 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: remove junk.
-
-Thu Dec 16 00:57:30 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/syck/rubyext.c (rb_syck_io_str_read): [ruby-core:03973]
-
-Thu Dec 16 00:43:29 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: changed default binded address family to use an
- available address family of host name. [druby-ja:101]
-
- * lib/drb/ssl.rb: ditto
-
-Wed Dec 15 17:47:17 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/server.rb (WEBrick::GenericServer#start_thread):
- should log about all accepted socket. [ruby-core:03962]
-
- * lib/webrick/accesslog.rb (WEBrick::AccessLog#setup_params):
- "%%" and "%u" are supported. [webricken:135]
-
- * lib/webrick/httpservlet/filehandler.rb
- (WEBrick::HTTPServlet::FileHandler#check_filename):
- :NondisclosureName is acceptable if it is Enumerable.
-
- * lib/webrick/config.rb (WEBrick::Config::FileHandler):
- default value of :NondisclosureName is [".ht*", "*~"].
-
-Wed Dec 15 16:10:23 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_obj_id_obsolete): warn always.
-
-Wed Dec 15 15:31:02 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/set.rb (Set#==): [ruby-dev:25206]
-
-Wed Dec 15 14:32:18 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_fdisset): check whether the handle is valid.
-
-Wed Dec 15 10:30:37 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/openssl/ossl_digest.c (ossl_digest_initialize): [ruby-dev:25198]
-
-Tue Dec 14 19:17:15 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * utf8.c (utf8_is_mbc_ambiguous): [ruby-talk:123561]
-
- * utf8.c (utf8_mbc_to_normalize): ditto.
-
-Tue Dec 14 17:08:15 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_close): need to reset osfhnd().
-
-Tue Dec 14 14:03:57 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl.c (ossl_raise): avoid buffer overrun.
- [ruby-dev:25187]
-
-Tue Dec 14 12:36:04 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi/session.rb (CGI::Session::initialize): generate new
- session if given session_id does not exist. [ruby-list:40368]
-
-Tue Dec 14 08:47:45 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (Init_eval): should mark ruby_eval_tree. [ruby-dev:25189]
-
-Mon Dec 13 18:13:52 2004 Tanaka Akira <akr@m17n.org>
-
- * gc.c (set_stack_end): new function to obtain stack end address.
- set_stack_end obtains a stack end address by an address of local
- variable in the function.
- (SET_STACK_END, STACK_END): use set_stack_end. don't use alloca.
- This makes the conservative garbage collector to scan a stack frame
- of the garbage_collect function itself. This is required because
- callee-save registers may be stored in the frame.
- [ruby-dev:25158]
-
-Mon Dec 13 02:45:51 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/curses/curses.c (window_subwin): call NUM2INT() before
- GetWINDOW(). fixed: [ruby-dev:25161]
-
-Mon Dec 13 00:58:02 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (cleanpath_aggressive): make it private.
- (cleanpath_conservative): ditto.
- Suggested by Daniel Berger. [ruby-core:3914]
-
-Sun Dec 12 21:32:14 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_super.rb (TestSuper#test_define_method): now methods
- from procs can call super.
-
-Sun Dec 12 10:35:10 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/template/html/html.rb (RDoc::Page): Don't
- show an accessor's r/w flag if none was specified
-
-Sun Dec 12 10:14:03 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/rdoc.rb (RDoc::RDoc::parse_files): Never exclude files
- explicitly given on the command line.
-
-Sat Dec 11 21:10:16 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: add DRbRemoteError. [ruby-list:40348],
- [ruby-list:40390]
-
- * test/drb/drbtest.rb: ditto.
-
- * test/drb/ut_drb.rb: ditto.
-
-Sat Dec 11 13:08:28 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sample/optparse/subcommand.rb: a sample for sub commands like
- cvs. contributed by Minero Aoki.
-
-Fri Dec 10 08:39:48 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/socket.c (sock_listen): get OpenFile just before calling
- listen(2).
-
-Thu Dec 9 16:28:35 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/sdbm/init.c (GetDBM): typo.
-
-Thu Dec 9 16:21:51 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb (WEBrick::CGI#setup_header): avoid
- SecurityError. [ruby-dev:24970]
-
- * lib/webrick/httpserver.rb (WEBrick::HTTPServer#run): should wait
- for reading request till data arrive. [ruby-talk:121068]
-
-Thu Dec 9 14:38:35 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_inspect): escape # which starts an expression
- substitution. fixed: [ruby-core:03922]
-
- * string.c (rb_str_dump): not escape # which isn't a substitution.
-
-Thu Dec 9 12:31:53 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (pipe_open): should set prog if argc != 0.
-
-Thu Dec 9 10:54:36 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/dbm/dbm.c (fdbm_select): [ruby-dev:25132]
-
- * ext/sdbm/init.c: ditto.
-
- * ext/gdbm/gdbm.c: ditto.
-
-Thu Dec 9 10:19:18 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/socket/test_socket.rb (test_setsockopt): use SO_LINGER instead
- of SO_BINDTODEVICE. fixed: [ruby-dev:25133]
-
-Thu Dec 9 03:08:36 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c (ip_init): set root-win title to "ruby" when
- the running script is '-e one-liner' or '-' (stdin).
-
- * ext/tcltklib/extconf.rb: add find_library("#{lib}#{ver}",..) for
- stub libs
-
- * ext/tk/lib/tk/textmark.rb: TkTextMarkCurrent and TkTextMarkAnchor
- have a wrong parent class.
-
- * ext/tk/lib/tk/dialog.rb: rename TkDialog2 --> TkDialogObj and
- TkWarning2 --> TkWarningObj (old names are changed to alias names)
-
- * ext/tk/lib/tk/dialog.rb: bug fix of treatment of 'prev_command'
- option and hashes for configuration
-
- * ext/tk/lib/tk/dialog.rb: add TkDialogObj#name to return the
- button name
-
- * ext/tk/lib/tk/radiobutton.rb: rename enbugged method value() ==>
- get_value() and value=(val) ==> set_value(val).
-
- * ext/tk/lib/tk/menu.rb: add TkMenu.new_menuspec
-
- * ext/tk/lib/tk/menu.rb: add alias (TkMenuButton = TkMenubutton,
- TkOptionMenuButton = TkOptionMenubutton)
-
- * ext/tk/lib/tk/event.rb: new method aliases (same as option keys of
- event_generate) for Event object
-
- * ext/tk/lib/tk/font.rb: configinfo returns proper types of values
-
- * ext/tk/lib/tk.rb: bind methods accept subst_args + block
-
- * ext/tk/lib/tk/canvas.rb: ditto
-
- * ext/tk/lib/tk/canvastag.rb: ditto
-
- * ext/tk/lib/tk/frame.rb: ditto
-
- * ext/tk/lib/tk/text.rb: ditto
-
- * ext/tk/lib/tk/texttag.rb: ditto
-
- * ext/tk/lib/tk/toplevel.rb: ditto
-
- * ext/tk/lib/tkextlib/*: ditto and bug fix
-
-Wed Dec 8 23:54:29 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/template/html/html.rb (RDoc::Page): Typo
- meant that h2 tag was invisible.
-
-Wed Dec 8 22:10:02 2004 Tanaka Akira <akr@m17n.org>
-
- * rubyio.h, io.c, ext/dl/dl.c, ext/pty/pty.c, ext/socket/socket.c:
- create FILE object only when required: popen(3) and DL's IO#to_ptr.
- [ruby-dev:25122]
-
- * io.c (rb_io_binmode): use setmode for Human68k. [ruby-dev:25121]
-
-Wed Dec 8 20:13:06 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * process.c (rb_spawn): support for DJGPP.
-
- * lib/mkmf.rb (VPATH): specify the implicit path separator for DJGPP.
-
-Wed Dec 8 17:48:22 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): merge Guy Decoux's argument preserve
- patch in [ruby-core:03874].
-
-Wed Dec 8 17:37:33 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_pipe_exec): need to close original socket
- handle.
-
-Wed Dec 8 14:31:36 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): [ruby-dev:25104]
-
-Wed Dec 8 13:49:46 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_pipe_exec): must close original handle
- before exec. fixed: [ruby-dev:25112]
-
-Wed Dec 8 11:46:26 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (string_content): get rid of segfault at empty evstr.
- fixed: [ruby-dev:25113]
-
-Wed Dec 8 03:26:51 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_bio.c (ossl_obj2bio): should not use fptr->f.
- [ruby-dev:25101]
-
-Wed Dec 8 03:26:41 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * runruby.rb: prepend LIBRUBY_SO to LD_PRELOAD as well as rubytest.rb.
-
-Wed Dec 8 01:35:44 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (is_socket): reorder of function definitions.
-
-Wed Dec 8 00:44:31 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (pipe_open): win32 bidirectional pipe support.
-
- * win32/win32.[ch] (rb_w32_pipe_exec): ditto.
-
- * win32/win32.[ch] (socketpair): new function. POSIX socketpair
- emulation.
-
- * win32/win32.c (socketpair_internal): ditto.
-
-Wed Dec 8 00:25:07 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rss/test_version.rb: added version check test.
- [ruby-dev:25053]
-
-Tue Dec 7 15:40:38 2004 Tanaka Akira <akr@m17n.org>
-
- * io.c (io_fwrite): avoid context switch before writing to stderr.
- [ruby-dev:25080]
-
- * rubyio.h: refine deprecated declaration.
-
- * configure.in, file.c, io.c: remove useless check: fseeko, etc.
-
-Tue Dec 7 13:42:07 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * dir.c (dir_s_mkdir): win32 special processing doesn't need any
- longer.
-
- * win32/win32.[ch] (rb_w32_mkdir): new function. POSIX.1 compatible
- interface.
-
- * win32/win32.[ch] (rb_w32_rmdir): new function.
-
-Tue Dec 7 00:27:37 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (proc_setgroups): [ruby-dev:25081]
-
-Mon Dec 6 23:07:57 2004 Tanaka Akira <akr@m17n.org>
-
- * configure.in: check -lsocket for socketpair and shutdown.
- reported by Ville Mattila. [ruby-core:03903]
-
-Mon Dec 6 23:00:45 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (ac_cv_sizeof_rlim_t): setup for DJGPP.
-
- * io.c (is_socket, shutdown): define dummy macros for DJGPP.
-
- * process.c: use SIZEOF_RLIM_T instead of HAVE_RLIM_T for DJGPP.
-
-Mon Dec 6 21:19:40 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (is_socket): fix typos. [ruby-core:03900]
-
-Mon Dec 6 20:13:28 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (is_socket): new function.
-
- * io.c (rb_io_close_read, rb_io_close_write): use is_socket().
-
- * io.c (rb_io_fptr_finalize): need to check fptr->f before calling
- rb_io_fptr_cleanup().
-
- * io.c (pipe_open): win32 pipe support (experimental).
-
- * win32/win32.[ch] (rb_w32_pipe_exec): return file descriptors
- instead of FILE structure objects.
-
- * win32/win32.[ch] (rb_w32_is_socket): new function.
-
-Mon Dec 6 19:40:40 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * Makefile.in (.y.c): simplify the rule.
-
-Mon Dec 6 18:08:10 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (rb_reg_eqq): document fix. [ruby-talk:122541]
-
-Mon Dec 6 17:49:30 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (run_trap_eval): add prototype for Microsoft compiler.
-
-Mon Dec 6 17:32:38 2004 Tanaka Akira <akr@m17n.org>
-
- * rubyio.h, intern.h, io.c, file.c, process.c, ext/socket/socket.c,
- ext/pty/pty.c, ext/io/wait/wait.c, ext/openssl/ossl_ssl.c:
- Use own buffering mechanism instead of stdio. [ruby-dev:25056]
-
- * io.c, ext/stringio/stringio.c, test/ruby/ut_eof.rb:
- EOF flag removed.
-
-Mon Dec 6 17:15:17 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/socket/test_socket.rb (TestBasicSocket#test_setsockopt):
- BasicSocket#setsockopt dumps core. [ruby-dev:25039]
-
- * test/socket/test_tcp.rb (TestTCPSocket#test_recvfrom):
- TCPSocket#recvfrom dumps core. [ruby-dev:24705]
-
- * test/socket/test_udp.rb (TestUDPSocket#test_connect):
- UDPSocket#connect dumps core. [ruby-dev:25045]
-
- * test/socket/test_udp.rb (TestUDPSocket#test_bind):
- UDPSocket#bind dumps core. [ruby-dev:25057]
-
-Mon Dec 6 09:59:23 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_fread): take VALUE argument.
-
- * ext/socket/socket.c (sock_connect): use rb_str_new4().
- [ruby-dev:25052]
-
- * eval.c (rb_yield_0): [ruby-dev:25051]
-
-Mon Dec 6 01:32:31 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_pkey_rsa.c (ossl_rsa_public_encrypt,
- ossl_rsa_public_decrypt, ossl_rsa_private_encrypt,
- ossl_rsa_private_decrypt): should take an optional argument
- to specify padding mode. [ruby-talk:122539]
-
- * ext/openssl/ossl_pkey_rsa.c (Init_ossl_rsa): add new constants
- PKCS1_PADDING, SSLV23_PADDING, NO_PADDING and PKCS1_OAEP_PADDING
- under OpenSSL::PKey::RSA.
-
- * test/openssl/test_pkey_rsa.rb: new file.
-
-Sun Dec 5 19:39:17 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser::Completion#complete): new parameter
- to direct case insensitiveness.
-
- * lib/optparse.rb (OptionParser#order!): ignore case only for long
- option. [ruby-dev:25048]
-
-Sun Dec 5 00:54:32 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * mkconfig.rb: setup library paths before requiring library.
- [ruby-core:03892]
-
-Sat Dec 4 22:54:15 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_write): remove rb_str_locktmp(). [ruby-dev:25050]
-
- * io.c (io_fwrite): takes VALUE string as an argument.
- [ruby-dev:25050]
-
- * ext/socket/socket.c (sock_connect): remove rb_str_locktmp().
- [ruby-dev:25050]
-
- * ext/socket/socket.c (udp_connect): [ruby-dev:25045]
-
- * ext/socket/socket.c (udp_bind): ditto.
-
- * ext/socket/socket.c (udp_send): ditto.
-
- * ext/socket/socket.c (bsock_send): ditto.
-
- * ext/socket/socket.c (s_recvfrom): ditto.
-
- * hash.c (rb_hash_hash): should provide "hash" method where "eql?"
- is redefined. [ruby-talk:122482]
-
-Sat Dec 4 21:29:05 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: (In previous commit) new method chown.
-
- * lib/fileutils.rb: (In previous commit) new method chown_R.
-
- * lib/fileutils.rb: (In previous commit) new method chmod_R
- wrongly added. Removed now.
-
-Sat Dec 4 20:45:52 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (mkdir, mkdir_p): should chmod explicitly.
- [ruby-core:03881]
-
-Sat Dec 4 18:54:09 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb: removed empty lines from output.
-
-Sat Dec 4 18:49:09 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb (RSS::VERSION): 0.1.1 -> 0.1.2
-
- * lib/rss/rss.rb: #item=/#set_item and so on are obsolete.
-
-Sat Dec 4 14:28:56 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/code_objects.rb (RDoc::Context::Section::set_comment):
- Section comments may now be bracketed by lines which are
- ignored. You can now write
- # -----------
- # :section: Dave's Section
- # comment material
- # -----------
- The lines before :section: are removed, and identical lines at the end are
- also removed if present.
-
-Sat Dec 4 00:35:08 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (bsock_setsockopt): [ruby-dev:25039]
-
-Fri Dec 3 12:25:21 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * st.h: fix prototype for C++.
-
-Fri Dec 3 01:55:24 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: widget configuration by TkWindow#method_missing
- returns proper object. "widget.option = val" returns val, and
- "widget.option(val)" returns self.
-
- * ext/tk/lib/tk/font.rb: TkFont#replace accepts only one font argument.
-
- * ext/tk/lib/tk/radiobutton.rb: add TkRadiobutton#value and
- TkRadiobutton#value=(val).
-
- * ext/tk/lib/tk/spinbox.rb: callback substitution support on
- command option.
-
- * ext/tk/sample/demos-en/widget: bug fix (wrong image height)
-
- * ext/tk/sample/demos-jp/widget: ditto.
-
-Fri Dec 3 00:21:05 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): prepare to pass a block from "call" method
- to a Proc generated by Method#to_proc. [ruby-dev:25031]
-
- * eval.c (rb_yield_0): actually passes a block given to "call".
-
- * object.c (convert_type): use rb_respond_to() again. this fix is
- based on [ruby-dev:25021]
-
- * eval.c (rb_respond_to): funcall respond_to? if it's redefined.
- [ruby-dev:25021]
-
-Thu Dec 2 15:13:53 2004 Michael Neumann <mneumann@ruby-lang.org>
-
- * test/xmlrpc/test_parser.rb, test/xmlrpc/data/*.expected: Expected
- values are now stored in YAML instead of using #inspect. This fixes
- false hash order.
-
-Fri Dec 3 00:11:48 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_file_initialize): [ruby-dev:25032]
-
-Thu Dec 2 16:41:03 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_protect): prevent continuations created inside from being
- called from the outside. [ruby-dev:25003]
-
- * eval.c (rb_callcc, rb_cont_call): prohibit calling from different
- signal contexts. [ruby-dev:25022]
-
-Thu Dec 2 10:45:02 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/readline/test_readline.rb: fix for NetBSD.
-
-Thu Dec 2 09:57:24 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/ostruct.rb (OpenStruct::Marshaler): OpenStruct can be
- marshaled again. [ruby-core:03862]
-
-Thu Dec 2 09:30:58 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (thread_mark): mark thread group. [ruby-dev:25020]
-
- * eval.c (thgroup_add): check whether the argument is really a Thread.
-
-Thu Dec 2 07:57:16 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_ctl): [ruby-dev:25019]
-
-Wed Dec 1 06:13:00 2004 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf.c: add constant NKF::VERSION
-
- * ext/nkf/nkf.c(guess): this becomes an alias of guess2
-
- * ext/nkf/test.rb: add --no-cp932
-
- * ext/nkf/nkf-utf8/nkf.c: original nkf2 revision 1.47
-
-Wed Dec 1 02:21:02 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * signal.c (sighandler): call handler immediately only for default
- handlers. [ruby-dev:25003]
-
-Tue Nov 30 23:49:12 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (pipe_open): errno should be preserved for rb_sys_fail() when
- fork failed.
-
-Tue Nov 30 16:18:50 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_fread): need not to null terminate. [ruby-dev:24998]
-
- * eval.c (rb_eval): should check previous frame for ZSUPER.
-
- * io.c (read_all): remove unnecessary rb_str_resize().
- [ruby-dev:24996]
-
- * io.c (io_readpartial): ditto.
-
- * io.c (io_read): ditto.
-
-Tue Nov 30 14:58:33 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * instruby.rb (install): add arguments explicitly to "super".
-
-Tue Nov 30 00:49:08 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (PUSH_FRAME): flags should have been initialized.
-
- * eval.c (rb_eval): [ruby-core:03856]
-
- * io.c (rb_io_sysread): use temporary lock. [ruby-dev:24992]
-
-Tue Nov 30 00:12:57 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * regparse.c: now handles many alternatives (over 500000)
- in regexp. [ruby-dev:24773]
-
-Mon Nov 29 16:06:04 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_write): insufficiently filled string
- being extended when overwriting. [ruby-core:03836]
-
-Mon Nov 29 15:59:05 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/ostruct.rb (OpenStruct::method_missing): check method
- duplication for -d.
-
- * lib/ostruct.rb (OpenStruct::initialize): ditto.
-
-Mon Nov 29 15:22:28 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/io/nonblock/test_flush.rb: abandon tests when io/nonblock is
- not supported.
-
-Mon Nov 29 13:37:54 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (fptr_finalize): must not use FILE after fclose().
- [ruby-dev:24985]
-
-Mon Nov 29 13:13:13 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (CreateChild): push back the last space before next
- loop because CharNext() eats it.
-
-Mon Nov 29 03:08:30 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (convert_type): [ruby-core:03845]
-
- * eval.c (rb_funcall_rescue): new function.
-
- * object.c (rb_Array): avoid using rb_respond_to().
-
- * object.c (rb_Integer): ditto.
-
- * eval.c (get_backtrace): no conversion for nil.
-
- * parse.y (reduce_nodes): empty body should return nil.
-
-Mon Nov 29 01:18:18 2004 Tanaka Akira <akr@m17n.org>
-
- * io.c (rb_io_check_writable): call io_seek regardless of
- NEED_IO_SEEK_BETWEEN_RW. [ruby-dev:24986]
-
-Sun Nov 28 15:57:58 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb (RSS::Element#tag): not use block_given? for
- working with ruby 1.6 again.
-
- * lib/rss/{0.9,2.0,trackback}.rb, lib/rss/maker/base.rb:
- undef -> remove_method for working with ruby 1.6 again.
-
-Sun Nov 28 15:51:40 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb (RSS::NotSetError): added.
-
- * lib/rss/maker/{1.0,0.9,2.0}.rb: changed RSS Maker to raise
- RSS::NotSetError if required values of maker.channel are not
- set. [ruby-talk:120061]
-
- * test/rss/test_maker_{1.0,0.9,2.0}.rb: changed tests to check RSS
- Maker raises or not.
-
-Sun Nov 28 12:14:47 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * regparse.c (fetch_token): fixed test failure on HP-UX ia64
- ([ruby-dev:24859]).
-
-Sun Nov 28 12:08:15 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * regparse.c, test/ruby/test_regexp.rb: fixed problem with UTF-8
- characters that have U+00FE or invalid characters.
-
-Sun Nov 28 12:07:04 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * regexec.c, test/ruby/test_regexp.rb: fixed segmentation fault
- ([ruby-dev:24887]).
-
-Sun Nov 28 12:05:48 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * regcomp.c, regint.h: fixed PLATFORM_UNALIGNED_WORD_ACCESS
- problem ([ruby-dev:24802] and [ruby-core:3733])
-
-Sat Nov 27 23:43:39 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_initialize): [ruby-dev:24972]
-
-Sat Nov 27 21:43:39 2004 Tanaka Akira <akr@m17n.org>
-
- * io.c: avoid data lost with nonblocking fd and
- stdio buffering in sync mode. [ruby-dev:24966]
- based on matz's patch [ruby-dev:24967]
- (io_fwrite): new primitive writing function which writes
- directly if sync mode.
- (rb_io_fwrite): wrapper for io_fwrite now.
- (io_write): call io_fwrite instead of rb_io_fwrite.
-
-Sat Nov 27 17:43:21 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/{0.9,1.0,2.0,trackback,xml-stylesheet}.rb: added
- #setup_maker.
-
- * test/rss/test_setup_maker_*.rb: added tests for #setup_maker.
-
- * lib/rss/maker/base.rb(RSS::Maker::Items#max_size=): supported
- output item size limitation.
-
- * sample/rss/blend.rb: added sample for RSS Maker.
-
-Sat Nov 27 17:41:35 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/0.9.rb: supported RSS::Maker.make("0.91"). Now,
- "0.9" is just alias of "0.91."
-
- * test/rss/test_maker_0.9.rb: make("0.9") -> maker("0.91").
-
- * test/rss/test_to_s.rb: ditto.
-
-Sat Nov 27 17:21:30 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * sample/rss/list_description.rb: untabified.
-
- * sample/rss/rss_recent.rb: ditto.
-
-Sat Nov 27 14:44:15 2004 Kent Sibilev <ksibilev@bellsouth.net>
-
- * lib/cgi/session.rb (CGI::Session::initialize): [ruby-core:03832]
-
-Sat Nov 27 09:41:21 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_fread): old rb_io_fread with file closing checking.
- (rb_io_fread): wrapper for io_fread now.
- [ruby-dev:24964]
-
-Fri Nov 26 18:02:44 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: Tk.destroy uses TkWindow#epath
-
- * ext/tk/lib/tk/image.rb: bug fix
-
- * ext/tk/lib/tk/wm.rb: add 'iconphoto' method(Windows only)
-
- * ext/tk/lib/tkextlib/*: some methods uses TkWindow#epath
-
-Fri Nov 26 14:29:39 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_initialize): uninitialized fd was checked to see open
- mode. [ruby-dev:24963]
-
- * io.c (rb_io_initialize): uninitialized fd was used. [ruby-dev:24962]
-
-Fri Nov 26 13:49:06 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_initialize): should retrieve flags from copying file
- descriptor. [ruby-dev:24961]
-
- * eval.c (method_missing): raise TypeError for classes do not
- have allocators. [ruby-core:03752]
-
- * lib/erb.rb: add RDoc by James Edward Gray II. [ruby-core:03786]
-
-Fri Nov 26 13:29:02 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::look_for_directives_in): Break
- out of preprocessing when we find a :section: directive (previously cleared out the
- comment, but this apparently now generates an error in gsub!)
-
-Fri Nov 26 00:17:40 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_read): move StringValue() check before GetOpenFile().
- [ruby-dev:24959]
-
-Thu Nov 25 20:14:57 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/thwait.rb (ThreadsWait#join_nowait): abnormally terminated
- threads should be also processed. [ruby-talk:121320]
-
-Thu Nov 25 18:06:37 2004 Tanaka Akira <akr@m17n.org>
-
- * configure.in: AC_CHECK_SIZEOF(rlim_t) to include stdio.h to fix
- problem with autoconf 2.52 or earlier.
- revert AC_PREREQ to 2.50.
- [ruby-core:3809]
-
-Thu Nov 25 07:59:41 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in: AC_PREREQ(2.53) [ruby-core:03800]
-
- * io.c (read_all): stringify non-nil buffer argument, and always
- taint the result. [ruby-dev:24955]
-
-Wed Nov 24 01:01:31 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_read): integer conversion should be prior to
- GetOpenFile(). [ruby-dev:24952]
-
- * configure.in, io.c: cancel [ ruby-Patches-1074 ].
-
-Tue Nov 23 08:09:50 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/menu.rb: improve usability of TkOptionMenubutton
-
-Tue Nov 23 02:00:21 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_file_chown): integer conversion should be prior to
- GetOpenFile(). [ruby-dev:24949]
-
-Tue Nov 23 00:10:48 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_file_chown): integer conversion should be prior to
- GetOpenFile(). [ruby-dev:24947]
-
- * file.c (rb_file_truncate): ditto.
-
- * file.c (rb_file_s_truncate): ditto.
-
- * dir.c (dir_seek): use NUM2OFFT().
-
- * misc/ruby-mode.el (ruby-non-block-do-re): [ruby-core:03719]
-
-Mon Nov 22 22:33:02 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::parse_require): Don't use names
- of variables or constants when parsing 'require'
-
-Mon Nov 22 00:13:35 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (dir_seek): should retrieve dir_data after NUM2INT().
- [ruby-dev:24941]
-
-Sat Nov 20 23:57:33 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/README (et al): Add a new directive, :section:, and
- change the output format to accommodate. :section: allows to to
- group together methods, attributes, constants, etc under
- headings in the output. If used, a table of contents is
- generated.
-
-Sat Nov 20 23:56:54 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/options.rb (Options::parse): Force --inline-source if
- --one-file option given
-
-Sat Nov 20 23:55:19 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_splice): should place index wrapping after
- possible modification. [ruby-dev:24940]
-
-Sat Nov 20 23:25:12 2004 Minero Aoki <aamine@loveruby.net>
-
- * io.c (rb_io_getline): f.gets("") did not work. [ruby-core:03771]
-
- * test/ruby/test_io.rb (test_gets_rs): test it.
-
-Sat Nov 20 22:55:09 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * test/runner.rb (CROSS_COMPILING): need to require rbconfig.rb before
- using CROSS_COMPILNG.
-
-Sat Nov 20 20:42:42 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/depend: fix ripper.o dependency.
-
-Sat Nov 20 17:48:29 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (io_reopen): work around problem with Cygwin fseeko
- returning ESPIPE.
-
-Sat Nov 20 05:34:24 2004 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: original nkf.c rev:1.40
-
- * ext/nkf/test.rb: add test for mime encode/decode
-
-Sat Nov 20 01:45:04 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * test/xmlrpc/test_webrick_server.rb: move `requrie "webrick/https"'
- into #setup_http_server method to avoid soap test errors.
-
-Sat Nov 20 01:37:34 2004 Johan Holmberg <holmberg@iar.se>
-
- * eval.c (error_print): nicer traceback at interrupt.
- [ruby-core:03774]
-
-Sat Nov 20 00:07:16 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_gsub): internal buffer should not be listed by
- ObjectSpace.each_object() by String#gsub. [ruby-dev:24931]
-
-Fri Nov 19 22:44:43 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/test/unit/collector/dir.rb: better support for -p/-x option.
-
-Fri Nov 19 17:46:56 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/0.9.rb (RSS::Maker::RSS09::Image#have_required_values):
- changed /rss/channel/image to be optional. [ruby-Bugs:1047]
-
- * test/rss/test_maker_0.9.rb: added tests for the above.
-
-Fri Nov 19 17:18:17 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb (RSS::VERSION): 0.1.0 -> 0.1.1.
-
- * lib/rss: #to_s used #tag.
-
- * test/rss/test_to_s.rb: added.
-
- * lib/rss/maker.rb (RSS::Maker.make): changed API. It's not
- received modules which is used as the second argument.
-
- * lib/rss/xml-stylesheet.rb (RSS::XMLStyleSheet#alternate):
- changed return value type which is not String but Boolean.
-
- * lib/rss/2.0.rb (RSS::Rss::Channel#ttl): changed return value
- type which is not String but Integer.
-
- * lib/rss/0.9.rb (RSS::Rss::Channel): <skipDays> has <day>s and
- <skipHours> has <hour>s.
-
- * lib/rss/maker/0.9.rb (RSS::Maker::RSS09::Channel): ditto.
-
- * lib/rss/0.9.rb (RSS::Rss::Channel::Item): <item> has <category>s.
-
- * lib/rss/maker/2.0.rb (RSS::Maker::Rss20::Channel::Item): ditto.
-
- * lib/rss/2.0.rb (RSS::Rss::Channel): <channel> has <category>s.
-
- * lib/rss/maker/2.0.rb (RSS::Maker::RSS20::Channel): ditto.
-
- * lib/rss/trackback.rb: parent element has <trackback:about>s.
-
- * lib/rss/maker/trackback.rb: ditto.
-
-Fri Nov 19 11:10:16 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/test/unit/collector/dir.rb: add support for directory name
- with -p/-x options.
-
- * test/testunit/collector/test_dir.rb: ditto.
-
- * lib/xmlrpc/datetime.rb (XMLRPC::DateTime#==): should use Array()
- instead of to_a.
-
-Fri Nov 19 10:32:36 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/readline/readline.c (readline_s_set_completion_append_character):
- accept nil. [ruby-core:03765]
-
-Fri Nov 19 01:20:22 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi/session.rb (CGI::Session::FileStore::initialize): raise
- exception if data corresponding to session specified from the
- client does not exist.
-
-Fri Nov 19 00:59:31 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_gsub): internal buffer should not be listed by
- ObjectSpace.each_object(). [ruby-dev:24919]
-
-Thu Nov 18 23:42:36 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/depend: Never regenerate lib/ripper/core.rb
- automatically. [ruby-dev:24911]
-
-Thu Nov 18 20:47:24 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.[ch] (rb_w32_isatty): new function to replace MSVCRT's
- isatty because it never sets errno.
-
-Thu Nov 18 18:41:08 2004 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * test/ruby/test_stringchar.rb (test_bang): added.
-
- * string.c (rb_str_upcase_bang, rb_str_capitalize_bang)
- (rb_str_swapcase_bang): missing rb_str_modify().
-
-Thu Nov 18 17:05:01 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (f_rest_arg): store rest args into invisible local variable
- in order to get rid of SEGV at ZSUPER. [ruby-dev:24913]
-
-Thu Nov 18 15:39:52 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_f_getenv): prohibit for $SAFE=4. [ruby-dev:24908]
-
-Thu Nov 18 14:58:42 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/readline/readline.c: check $SAFE.
-
- * test/readline/test_readline.rb: added tests for readline.
-
-Thu Nov 18 00:21:15 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (proc_getpgrp): prohibit for $SAFE=2.
- [ruby-dev:24899]
-
- * process.c (get_pid): ditto. [ruby-dev:24904]
-
- * process.c (get_ppid): ditto.
-
- * array.c (rb_ary_delete): defer rb_ary_modify() until actual
- modification. [ruby-dev:24901]
-
-Thu Nov 18 10:10:14 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c, rubyio.h (rb_io_modenum_flags): exported.
-
- * ext/stringio/stringio.c (strio_initialize): allow Fixnum as mode as
- well as IO.new does. [ruby-dev:24896]
-
-Wed Nov 17 23:47:30 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_settracefunc.rb: added. [ruby-dev:24884]
-
-Wed Nov 17 18:59:16 2004 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * process.c (proc_getrlimit, proc_setrlimit): add rb_secure(2) to
- methods of Process.{getrlimit,setrlimit}
-
-Wed Nov 17 13:56:57 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (newline_node): should not use FL_SET. [ruby-dev:24874]
-
- * parse.y (string_content): should not use FL_UNSET.
-
- * node.h (NODE_NEWLINE): remove unused bit to utilize flag field
- in nodes.
-
-Wed Nov 17 13:05:10 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (rb_push_glob): fix overrun. [ruby-dev:24886]
-
-Wed Nov 17 11:48:17 2004 Michael Neumann <mneumann@ruby-lang.org>
-
- * lib/xmlrpc/parser.rb, test/xmlrpc/test_features.rb: fixed "assigning
- to constants" warnings
-
-Wed Nov 17 09:38:18 2004 Johan Holmberg <holmberg@iar.se>
-
- * re.c (rb_reg_initialize_m): should raise exception instead of
- compile error. [ruby-core:03755]
-
-Wed Nov 17 03:42:45 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_splice): move rb_str_modify() after
- StringValue(), which may alter the receiver. [ruby-dev:24878]
-
- * error.c (rb_error_frozen): now raise RuntimeError instead of
- TypeError.
-
-Tue Nov 16 21:22:47 2004 Michael Neumann <mneumann@ruby-lang.org>
-
- * lib/xmlrpc/server.rb (CGIServer): fixed bug when client sends
- "Content-typ: text/xml; ..."
-
-Tue Nov 16 23:45:07 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flo_divmod): protect float values from GC by
- assignment to local variables. [ruby-dev:24873]
-
-Tue Nov 16 14:31:54 2004 Michael Neumann <mneumann@ruby-lang.org>
-
- * test/xmlrpc/*: imported and refactored original test cases.
-
- * test/xmlrpc/test_webrick_server.rb, test/xmlrpc/webrick_testing.rb:
- added test case that starts up a WEBrick XML-RPC server and performs
- some tests on it (both http and https servers are started).
-
- * lib/xmlrpc/create.rb (XMLWriter::each_installed_writer),
- lib/xmlrpc/parser.rb (XMLParser::each_installed_parser):
- added methods to simply original test cases
-
- * lib/xmlrpc/parser.rb, lib/xmlrpc/datetime.rb: applied patch by
- MoonWolf <moonwolf@moonwolf.com> to allow parsing datetime.iso8601
- (e.g. 20041105T01:15:23Z).
-
- * lib/xmlrpc/server.rb: fixed issue #998
- (http://rubyforge.org/tracker/?func=detail&atid=1700&aid=998&group_id=426)
-
- * lib/xmlrpc/create.rb, lib/xmlrpc/utils.rb: when marshalling/loading
- user-defined data structures, use Class#allocate instead of defining
- an empty #initialize method. module XMLRPC::Marshallable is now only
- used for tagging.
-
- * lib/xmlrpc/.document, lib/xmlrpc/README.rdoc: added howto
-
-Tue Nov 16 16:26:12 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc32,win32,wince}/setup.mak (-epilogue-): remove config.h and
- config.status to force updating them.
-
-Tue Nov 16 16:20:45 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_read): position was ignored when a
- buffer was passed. http://www.yo.rim.or.jp/~nov/d/?date=20041116#p03
-
-Tue Nov 16 13:35:54 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::options): add
- new option --exclude (-x) to skip some tests. [ruby-core:3363],
- [ruby-dev:24865]
-
- * lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir.exclude):
- ditto.
-
-Tue Nov 16 11:19:07 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::options): use
- Regexp conversion.
-
-Tue Nov 16 01:41:31 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_mod_check): frozen check should be separated.
- [ruby-core:3742]
-
- * array.c (rb_ary_update): pedantic check to detect
- rb_ary_to_ary() to modify the receiver. [ruby-dev:24861]
-
-Mon Nov 15 18:58:05 2004 Tanaka Akira <akr@m17n.org>
-
- * configure.in: check rlim_t more portably. [ruby-core:3735]
-
-Mon Nov 15 11:50:32 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-special-char-p, ruby-parse-partial): handle
- operator symbols. [ruby-talk:120177]
-
-Mon Nov 15 08:58:55 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (Init_Proc): make proc as an alias to Proc.new.
- [ruby-dev:24848]
-
-Mon Nov 15 00:46:03 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): lambda{}.call(1) should raise exception.
- [ruby-talk:120253]
-
-Mon Nov 15 00:33:40 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_clear): avoid revealing NULL pointer.
- [ruby-dev:24766]
-
- * string.c (str_gsub): add paranoid check. [ruby-dev:24827]
-
- * string.c (str_mod_check): check frozen status as well.
- [ruby-dev:24801]
-
-Sun Nov 14 18:59:03 2004 Tanaka Akira <akr@m17n.org>
-
- * process.c (proc_getrlimit): new function for Process.getrlimit.
- (proc_setrlimit): new function for Process.setrlimit.
- [ruby-dev:24834]
-
- * configure.in: check rlim_t and its size. check setrlimit.
-
- * ruby.h (NUM2ULL): new macro.
-
-Sun Nov 14 13:27:03 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/pp.rb (PP#object_address_group): remove odd number of 'f'
- prefixed to negative address.
-
-Sun Nov 14 10:48:21 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/mathn.rb (Integer::gcd2): faster implementation by
- <erlercw@siu.edu>. [ruby-talk:120232]
-
-Sun Nov 14 08:46:33 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/logger/test_logger.rb: Logger just expects
- Logger#datetime_format to be used for Time#strftime independently of
- locale. [ruby-dev:24828]
-
-Fri Nov 12 17:32:07 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bcc32/README.bcc32, win32/README.win32: need bison instead of
- byacc.
-
-Fri Nov 12 15:15:06 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (ruby_options): now we cannot call rb_glob() before
- ruby_init(), so call rb_w32_cmdvector() at ruby_options().
-
- * win32/win32.{c,h} (rb_w32_cmdvector): rename make_cmdvector() and
- export it.
-
-Fri Nov 12 14:08:01 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/event.rb: remove $LOADED_FEATURES trick
-
- * ext/tk/lib/tk.rb: ditto
-
-Fri Nov 12 00:31:05 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/gdbm/gdbm.c (fgdbm_store): StringValue() may alter string
- pointer. [ruby-dev:24783]
-
-Thu Nov 11 17:58:19 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (rb_glob): should have called rb_glob_caller().
- [ruby-dev:24773]
-
-Thu Nov 11 16:56:10 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_file.rb (test_truncate_wbuf): we want to test
- only File#truncate, not behavior of seek(2).
-
-Thu Nov 11 01:52:52 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (syserr_initialize): use stringified object.
- [ruby-dev:24768]
-
-Wed Nov 10 22:49:01 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/delegate.rb (SimpleDelegator::dup): wrong number of
- arguments.
-
- * lib/delegate.rb (DelegateClass::dup): ditto.
-
-Wed Nov 10 19:47:55 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (glob_helper): path is a string object now.
-
-Wed Nov 10 12:31:21 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * README.EXT (Example): extconf.rb is indispensable now.
-
-Wed Nov 10 03:33:36 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: fix SEGV when compiled with Tcl/Tk8.3.x
- or older
-
- * ext/tk/lib/tkextlib/tile/style.rb: bug fix
-
-Tue Nov 9 22:24:07 2004 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf: original nkf.c rev:1.38
-
- * ext/nkf/nkf.c: fix bug: can't parse long-name options
-
- * ext/nkf/test.rb: fix bug: mime tests fail
-
-Tue Nov 9 14:27:18 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser::Officious): moved from DefaultList.
-
-Tue Nov 9 00:50:06 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/rdoc.rb: Change version numbering of RDoc and ri
-
-Tue Nov 9 01:05:04 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (rb_glob2): do not allocate buffer from heap to avoid
- memory leaks. use string object for buffering instead.
- [ruby-dev:24738]
-
- * dir.c (join_path): ditto.
-
- * io.c (io_read): external input buffer may be modified even after
- rb_str_locktmp(). [ruby-dev:24735]
-
- * dir.c (fnmatch): p or s may be NULL. [ruby-dev:24749]
-
-Tue Nov 9 00:36:26 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/extservm.rb: add DRb::ExtServManager#uri=.
- [ruby-dev:24743]
-
-Mon Nov 8 22:20:19 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_class):
- Fix bug where parent class wasn't being detected if the
- child class was defined using the A::B notation.
-
-Mon Nov 8 00:14:13 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: add setup for mingw32 cross compiling.
- [ruby-talk:119413]
-
-Sun Nov 7 23:49:26 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: bind-event methods accept multi substitution
- arguments.
-
- * ext/tk/lib/tk/canvas.rb: ditto.
-
- * ext/tk/lib/tk/canvastag.rb: ditto.
-
- * ext/tk/lib/tk/text.rb: ditto.
-
- * ext/tk/lib/tk/texttag.rb: ditto.
-
- * ext/tk/lib/tkextlib: ditto.
-
-Sat Nov 6 20:40:16 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: rename WIN32OLE#ole_obj_help to
- WIN32OLE#ole_type. alias ole_obj_help to ole_type.
-
- * ext/win32ole/tests/testWIN32OLE.rb: ditto.
-
-Sat Nov 6 11:18:59 2004 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb (_parse): checks whether zone was given.
-
-Sat Nov 6 00:46:27 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_locktmp): check STR_TMPLOCK flag before
- locking. [ruby-dev:24727]
-
-Fri Nov 5 19:07:16 2004 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf: follow CVS Head of original nkf.
-
-Fri Nov 5 18:12:42 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/scrollable.rb: divide Scrollable module into
- X_Scrollable and Y_Scrollable
-
- * ext/tk/lib/tk/entry.rb: include X_Scrollable instead of Scrollable
-
- * ext/tk/lib/tk/autoload.rb: define autoload for X_Scrollable and
- Y_Scrollable
-
-Fri Nov 5 16:05:32 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: TkComm._at() supprts both of "@x,y" and "@x"
-
-Fri Nov 5 13:22:58 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/text.rb: sorry. bug fix again.
-
-Fri Nov 5 13:17:54 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/text.rb: bug fix
-
-Fri Nov 5 08:52:48 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (gc_mark): stricter GC stack check.
-
-Fri Nov 5 08:34:43 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_gsub): should have removed rb_str_unlocktmp(str).
- [ruby-dev:24708]
-
- * ext/socket/socket.c (s_recvfrom): buffer modification check.
- [ruby-dev:24708]
-
-Thu Nov 4 23:54:21 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * regexec.c, regparse.c, regint.h: fixed conflicts between
- vendor branch.
-
-Thu Nov 4 23:41:55 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * ascii.c, euc_jp.c, oniggnu.h, oniguruma.h, regcomp.c,
- regenc.c, regenc.h, regerror.c, regexec.c, reggnu.c,
- regint.h, regparse.c, regparse.h, sjis.c, utf8.c:
- imported Oni Guruma 3.4.0.
-
- * parse.y, re.c: Now mbclen() takes unsigned char as
- its argument.
-
-Thu Nov 4 21:25:38 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_gsub): string modify check no longer based on
- tmplock. [ruby-dev:24706]
-
-Thu Nov 4 21:13:48 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c(typelib_file_from_typelib): search "win16"
- entry to get library path.
-
- * ext/win32ole/win32ole.c(oletypelib_path): ditto.
-
- * ext/win32ole/win32ole.c(ole_typedesc2val): add VT_LPWSTR, VT_LPSTR,
- VT_ERROR case.
-
-Thu Nov 4 15:02:14 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/variable.rb: forget to initialize instance_variables
- of TkVarAccess objects
-
-Thu Nov 4 09:11:35 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (gc_mark): enable GC stack checking.
-
-Thu Nov 4 03:11:33 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_gsub): lock strings temporarily. [ruby-dev:24687]
-
- * ext/socket/socket.c (s_recvfrom): tmplock input buffer.
- [ruby-dev:24705]
-
-Wed Nov 3 22:24:17 2004 Daigo Moriwaki <techml@sgtpepper.net>
-
- * lib/webrick/httpauth/digestauth.rb: use Base64.encode64 to
- avoid warnings.
-
-Wed Nov 3 17:19:59 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_uniq_bang): do not push frozen string from hash
- table. [ruby-dev:24695]
-
- * array.c (rb_ary_and): ditto.
-
- * array.c (rb_ary_or): ditto.
-
-Wed Nov 3 17:02:48 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: support to use different Tcl commands between
- configure and configinfo
-
- * ext/tk/lib/font.rb: ditto.
-
- * ext/tk/lib/itemconfig.rb: support to use different Tcl commands
- between item_configure and item_configinfo
-
- * ext/tk/lib/itemfont.rb: ditto.
-
- * ext/tk/extconf.rb: install SUPPORT_STATUS
-
- * ext/tk/lib/tkextlib: some bug fixes (see ext/tk/ChangeLog.tkextlib)
-
-Wed Nov 3 15:38:28 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rss/*.rb: removed tab width configuration headers.
-
- * test/rss/test_maker_{0.9,1.0}.rb: sort -> do_sort.
-
- * lib/rss/maker/*.rb: changed API to RSS version independence.
-
- * lib/rss/maker/base.rb
- (RSS::Maker::XMLStyleSheets::XMLStyleSheet): checked required
- (pseudo) attributes.
-
- * lib/rss/maker/base.rb (RSS::Maker::Items): sort -> do_sort.
-
- * lib/rss/rss.rb (RSS::BaseModel.install_date_element): avoided
- warning.
-
- * lib/rss/0.9.rb (RSS::Rss#textinput): added convenience method.
-
-Tue Nov 2 16:35:57 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/enumerator/enumerator.c (each_cons_i): pass copy of an
- internal consequent array. [ruby-talk:118691]
-
-Tue Nov 2 14:54:02 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (pipe_open): need to set cmd if argc == 0 (win32).
-
-Tue Nov 2 01:20:09 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (pipe_open): IO.popen should take array as 1st argument for
- a command line. [ruby-dev:24678]
-
- * eval.c (proc_invoke): nail down dyna_var node when Proc object
- or continuation is created. [ruby-dev:24671]
-
- * io.c (rb_io_s_popen): do not expand argv array. [ruby-dev:24670]
-
-Mon Nov 1 22:25:56 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/base.rb: changed xml-stylesheet's API of RSS Maker
- like to item's one.
-
- * lib/rss/xml-stylesheet.rb (RSS::XMLStyleSheet#guess_type): fixed
- regular expression bug.
-
- * test/rss/test_maker_xml-stylesheet.rb: updated tests for
- xml-stylesheet.
-
-Mon Nov 1 13:59:28 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb (MANIFEST): do not use anymore, use extconf.rb instead.
-
- * ext/enumerator/extconf.rb, ext/fcntl/extconf.rb,
- ext/stringio/extconf.rb: added.
-
- * MANIFEST, ext/**/MANIFEST: removed.
-
- * README.EXT, README.EXT.ja: remove MANIFEST stuff.
-
-Mon Nov 1 11:52:18 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (pipe_open): avoid conflict of variable name. [ruby-dev:24662]
-
-Mon Nov 1 11:46:19 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * process.c (rb_f_exec): should check whether prog is NULL.
-
-Mon Nov 1 09:37:19 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker.rb: added entry point of RSS Maker.
-
-Mon Nov 1 03:14:14 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_get_method_body): store ICLASS in the cache.
- [ruby-core:03672]
-
- * eval.c (rb_provided): should return true for loading library
- too for autoloading. [ruby-core:03655]
-
-Mon Nov 1 01:14:52 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_open): create copy of popen specifier. [ruby-dev:24656]
-
- * string.c (rb_str_locktmp): lock string temporarily.
-
- * string.c (str_independent): add tmplock check.
-
- * io.c (io_write): lock output string temporarily.
- [ruby-dev:24649]
-
- * io.c (io_write): use rb_str_locktmp().
-
- * io.c (read_all): ditto.
-
-Sun Oct 31 23:37:00 2004 NARUSE, Yui <naruse@ruby-lang.org>
-
- * process.c: on NetBSD don't use setruid() and setrgid().
-
-Sun Oct 31 23:12:10 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/maker/*.rb: added RSS Maker.
-
- * test/rss/test_maker_*.rb: added tests for RSS Maker.
-
-Sun Oct 31 16:58:12 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE.codepage, WIN32OLE.codepage=.
-
- * ext/win32ole/tests/testWIN32OLE.rb: ditto.
-
-Sun Oct 31 14:35:26 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/nkf/nkf-utf8/nkf.c: add "\075?UTF-8?Q?" for Gmail.
-
-Sun Oct 31 14:18:56 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: emit lexer-event values to the parser
- (still incomplete).
-
-Sat Oct 30 15:24:41 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add WIN32OLE_TYPELIB class. add
- WIN32OLE#ole_typelib method.
-
- * ext/win32ole/tests/testOLETYPELIB.rb: add WIN32OLE_TYPELIB class.
-
-Sat Oct 30 06:53:24 2004 Peter Vanbroekhoven <peter.vanbroekhoven@cs.kuleuven.ac.be>
-
- * eval.c (rb_eval): NODE_XSTR should pass copy of literal string.
-
-Sat Oct 30 00:19:40 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_update): a[n,m]=nil no longer works as element
- deletion.
-
- * enum.c (enum_sort_by): protect continuation jump in.
- [ruby-dev:24642]
-
- * eval.c (rb_eval), gc.c (gc_mark_children), node.h (NEW_ALIAS,
- NEW_VALIAS), parse.y (fitem): allow dynamic symbols to
- NODE_UNDEF and NODE_ALIAS.
-
-Fri Oct 29 21:27:51 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_check_initialized): new function to check uninitialized
- object. [ruby-talk:118234]
-
- * file.c (rb_file_path), io.c (rb_io_closed): check if initialized.
-
-Fri Oct 29 19:05:33 2004 NARUSE, Yui <naruse@ruby-lang.org>
-
- * ext/nkf: follow nkf2.0.
-
-Fri Oct 29 17:18:22 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y (ripper_s_allocate): add prototype for Microsoft compiler.
-
- * range.c (range_step, range_each): need cast.
-
-Fri Oct 29 16:34:19 2004 Daiki Ueno <ueno@unixuser.org>
-
- * misc/ruby-mode.el (ruby-parse-partial): Parse the rest of the
- line after opening heredoc identifier. [ruby-dev:24635]
-
-Fri Oct 29 11:35:04 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rb_parser_append_print, rb_parser_while_loop): body node
- can be empty. [ruby-dev:24628]
-
-Fri Oct 29 10:00:30 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_start_0): forget to free some memory chunks.
- [ruby-core:03611]
-
- * eval.c (ruby_cleanup): ruby_finalize_1 may cause exception,
- should be wrapped by PUSH_TAG/POP_TAG(). [ruby-dev:24627]
-
-Thu Oct 28 08:42:02 2004 Tanaka Akira <akr@m17n.org>
-
- * io.c (argf_forward): use ANSI style.
- (argf_read): call argf_forward with argv argument.
- [ruby-dev:24624]
-
-Wed Oct 27 09:17:30 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_gsub): use a string object for exception safeness.
- [ruby-dev:24601]
-
-Wed Oct 27 07:38:55 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * node.h (NODE_TYPESHIFT): allow 4 more bits for line numbers.
- [ruby-talk:117841]
-
- * ruby.h (FL_ABLE): nodes are not subject for flag operations.
-
- * io.c (ARGF_FORWARD): should have specified argv explicitly,
- since we no longer have frame->argv saved. [ruby-dev:24602]
-
-Tue Oct 26 23:30:39 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/code_objects.rb (RDoc::Context::add_class_or_module):
- Restore correct :nopdoc: behavior with nested classes and modules.
-
-Tue Oct 26 18:21:29 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (RESIZE_CAPA): check string attribute before modifying
- capacity member of string structure. [ruby-dev:24594]
-
-Tue Oct 26 11:33:26 2004 David G. Andersen <dga@lcs.mit.edu>
-
- * ext/zlib/zlib.c (gzreader_gets): use memchr() to to gain
- performance. [ruby-talk:117701]
-
-Tue Oct 26 10:56:55 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): raise ArgumentError for extra
- arguments, unless (digit)$ style used.
-
-Mon Oct 25 18:35:39 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.c (isUNCRoot): should check NUL after '.'.
- [ruby-dev:24590]
-
- * win32/win32.c (isUNCRoot): fixed buffer overrun.
-
-Mon Oct 25 08:03:26 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (get_backtrace): ignore illegal backtrace. [ruby-dev:24587]
-
-Sun Oct 24 00:40:50 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_load, search_required, rb_require_safe, rb_require): use
- frozen shared string to avoid outside modification. [ruby-dev:24580]
-
-Sat Oct 23 23:40:34 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_fptr_finalize): leave stdin/stdout/stderr open in
- interpreter termination. [ruby-dev:24579]
-
-Sat Oct 23 22:18:32 2004 Guy Decoux <ts@moulon.inra.fr>
-
- * eval.c (frame_free): Guy Decoux solved the leak problem.
- Thanks. [ruby-core:03549]
-
-Sat Oct 23 00:20:55 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/zlib/zlib.c (zstream_append_input): clear klass for z->input
- to avoid potential vulnerability.
-
- * ext/zlib/zlib.c (zstream_run): always use zstream_append_input()
- to avoid SEGV. [ruby-dev:24568]
-
-Fri Oct 22 12:02:28 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_alias): was warning for wrong condition.
- [ruby-dev:24565]
-
-Fri Oct 22 10:36:37 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httprequest.rb (WEBrick::HTTPRequest#meta_vars):
- should check if path_info is not nil.
-
-Fri Oct 22 00:22:31 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/zlib/zlib.c (zstream_shift_buffer): should restore class
- field of a buffer. [ruby-dev:24562]
-
-Fri Oct 22 00:20:33 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_include): should not treat char as negative value.
- [ruby-dev:24558]
-
-Thu Oct 21 21:32:30 2004 IWATSUKI Hiroyuki <don@na.rim.or.jp>
-
- * lib/pstore.rb (PStore#transaction): Use the empty content when a
- file is not found. [ruby-dev:24561]
-
-Thu Oct 21 19:06:15 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpresponse.rb (WEBrick::HTTPResponse#send_body_io):
- ensure to close @body. (http://bugs.debian.org/277520)
-
-Thu Oct 21 13:11:31 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (pipe_open): variable name "fpw" is conflicted.
-
-Thu Oct 21 00:36:41 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_alias): should warn on method discarding.
- [ruby-dev:24546]
-
- * ext/zlib/zlib.c (zstream_expand_buffer_into): hide internal
- string buffer by clearing klass. [ruby-dev:24548]
-
- * parse.y (lex_getline): should not touch ruby_debug_lines if
- RIPPER is defined. [ruby-dev:24547]
-
-Wed Oct 20 19:45:13 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_gsub): reentrant check. [ruby-dev:24432]
-
-Wed Oct 20 12:42:53 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_getline): rs modification check should not interfere
- in the loop.
-
-Wed Oct 20 10:31:33 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (lex_getline): should update ruby_debug_lines.
-
-Wed Oct 20 04:17:55 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/dbm/dbm.c (fdbm_delete_if): should check if deleting element
- is a string. [ruby-dev:24490]
-
- * ext/sdbm/init.c (fsdbm_delete_if): ditto.
-
-Wed Oct 20 01:37:18 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_times): Array#* should return an instance of
- the class of right operand. [ruby-dev:24526]
-
- * ext/zlib/zlib.c (zstream_detach_buffer): should not expose
- class-less object to Ruby world. [ruby-dev:24530]
-
- * eval.c (proc_dup): provide Proc#dup as well. [ruby-talk:116915]
-
- * eval.c (ruby_exec): stack marking position may be higher than
- expected. thanks to Guy Decoux. [ruby-core:03527]
-
-Wed Oct 20 00:25:41 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (search_required): required name must not be changed before
- loading. [ruby-dev:24492]
-
-Tue Oct 19 23:59:46 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_require_safe): provide the feature after loaded.
- [ruby-list:40085]
-
-Tue Oct 19 22:43:12 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_attr): If
- we come across 'attr' in a context where it isn't
- followed by a symbol, just issue a warning.
-
-Tue Oct 19 20:32:50 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole.c(ole_invoke): retrieve the result value when
- retrying the IDispatch::invoke.
-
-Tue Oct 19 17:24:11 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (read_all): block string buffer modification during
- rb_io_fread() by freezing it temporarily. [ruby-dev:24479]
-
- * dir.c (rb_push_glob): block call at once the end of method.
- [ruby-dev:24487]
-
- * ext/enumerator/enumerator.c (enum_each_slice): remove
- rb_gc_force_recycle() to prevent potential SEGV.
- [ruby-dev:24499]
-
- * ext/zlib/zlib.c (zstream_expand_buffer): hide internal string
- buffer by clearing klass. [ruby-dev:24510]
-
-Tue Oct 19 08:47:21 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_upto): method result must be checked. [ruby-dev:24504]
-
- * eval.c (error_print): ditto. [ruby-dev:24519]
-
-Mon Oct 18 23:37:05 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (r_object0): check inheritance by the internal function.
- [ruby-dev:24515]
-
-Mon Oct 18 11:29:32 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_flags_mode, rb_io_mode_flags): distinguish whether file
- not existing is created. [ruby-dev:24505]
-
-Mon Oct 18 07:26:21 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_file_truncate): discard read buffer before truncation.
- [ruby-dev:24197]
-
-Mon Oct 18 01:56:03 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httprequest.rb (WEBrick::HTTPRequest#initialize):
- initial value of accpet-* should be array.
-
-Mon Oct 18 00:42:45 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (sock_s_getservbyaname): protocol string
- might be altered. [ruby-dev:24503]
-
- * string.c (rb_str_upto): check if return value from succ is a
- string. [ruby-dev:24504]
-
-Sun Oct 17 23:03:48 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/timer.rb: TkTimer#start and restart accept a block
-
-Sun Oct 17 12:53:46 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (fole_func_methods): correct argument mismatch.
- * ext/win32ole/win32ole.c (fole_get_methods): ditto.
- * ext/win32ole/win32ole.c (fole_put_methods): ditto.
- * ext/win32ole/tests/testWIN32OLE.rb: add test for WIN32OLE#ole_func_methods
- WIN32OLE#ole_get_methods, WIN32OLE#ole_put_methods
-
-Sat Oct 16 14:45:28 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/0.9.rb (RSS::Rss#to_s): removed garbage.
-
-Sat Oct 16 13:42:49 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/: untabified.
- * test/rss/: untabified.
- * lib/rss/0.9.rb (RSS::Rss#to_s): inent -> indent.
-
-Sat Oct 16 13:34:56 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss: supported prety print.
- * test/rss/test_1.0.rb: added test for calculating default indent size.
-
-Sat Oct 16 10:56:36 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): install-rb is needed for statically
- linked extensions. [ruby-dev:24491]
-
-Fri Oct 15 18:07:08 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_x509store.c
- (ossl_x509stctx_initialize): setup OpenSSL::X509::StoreContext with
- ossl_x509stctx_* functions instead of X509_STORE_CTX_*.
- (ossl_x509store_set_time): add OpenSSL::X509::Store#time=.
- (ossl_x509stctx_set_time): add OpenSSL::X509::StoreContext#time=.
-
- * test/openssl/ossl_x509store.rb: test certificate validity times.
-
-Fri Oct 15 18:04:35 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/timer.rb: TkTimer.new(interval, loop){ ... } is
- acceptable. Add TkTimer.start ( == new + start ).
-
-Fri Oct 15 12:43:09 2004 Tanaka Akira <akr@m17n.org>
-
- * eval.c (Init_stack): make prototype declaration consistent with
- the definition in gc.c.
-
-Thu Oct 14 13:33:59 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb: added link to Tutorial.
-
-Tue Oct 12 21:22:50 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/config.rb:
- add WEBrick::Config::FileHandler[:AcceptableLanguages].
-
- * lib/webrick/httpservlet/filehandler.rb
- (WEBrick::HTTPServlet::FileHandler#set_filename): search files
- having suffix of language-name which Accept-Language header field
- includes if :AcceptableLanguages options is present.
-
- * lib/webrick/httpservlet/filehandler.rb
- (WEBrick::HTTPServlet::FileHandler#get_servlet): new method to
- search servlet correspond to the suffix of filename.
-
- * lib/webrick/httprequest.rb: add attributes access methods: accept,
- accept_charset, accept_encoding, accept_language, content_length
- and content_type.
-
- * lib/webrick/httpresponse.rb: add attribute access methods:
- content_length, content_length=, content_type and content_type=.
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils.mime_types):
- use the second suffix to detect media type. (the first suffix
- may be a language name.)
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils.parse_qvalues):
- add method to parse Accept header field. it returns an Array of
- values sorted by the qvalues.
-
-Tue Oct 12 15:05:32 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (MODE_BINMODE, MODE_BINARY): fixed reversed condition.
-
-Mon Oct 11 17:51:34 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_popen): get mode string via rb_io_flags_mode() to
- avoid mode string modification. [ruby-dev:24454]
-
- * io.c (rb_io_getline_fast): should take delim as unsigned char to
- distinguish EOF and '\377'. [ruby-dev:24460]
-
- * io.c (rb_io_getline): add check for RS modification.
- [ruby-dev:24461]
-
- * enum.c (enum_sort_by): use qsort() directly instead using
- rb_iterate(). [ruby-dev:24462]
-
- * enum.c (enum_each_with_index): remove rb_gc_force_recycle() to
- prevent access to recycled object (via continuation for
- example). [ruby-dev:24463]
-
-Mon Oct 11 13:48:20 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/*: untabify
-
-Sun Oct 10 12:32:08 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::parse_require): Allow 'require'
- to be used as a variable name
-
-Sun Oct 10 02:49:14 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/lib/ripper/filter.rb: require ripper/tokenizer.
-
- * ext/ripper/lib/ripper/filter.rb (parse): argument is optional.
-
-Sun Oct 10 02:43:13 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: \n between two comments disappeared.
-
-Sat Oct 9 21:23:37 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/converter.rb: changed to try to use Iconv for default
- conversion.
-
- * lib/rss/rss.rb: 0.0.9 -> 0.1.0.
-
-Sat Oct 9 19:50:36 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_getline): should not treat char as negative value.
- [ruby-dev:24460]
-
-Sat Oct 9 00:25:39 2004 Tanaka Akira <akr@m17n.org>
-
- * io.c (rb_io_fread): rb_thread_wait_fd() was lost.
- [ruby-dev:24457]
-
-Fri Oct 8 21:36:56 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (fu_traverse): return value of Dir.entries is
- reliable. (pass $SAFE=1)
-
- * lib/fileutils.rb (remove_dir): return value of Dir.foreach is
- reliable. (pass $SAFE=1)
-
-Fri Oct 8 09:49:32 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): pointer modification check before each
- iteration. [ruby-dev:24445]
-
-Fri Oct 8 01:13:05 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/optiondb.rb: make it more secure
-
-Thu Oct 7 23:47:57 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/scrollbar.rb: When 'set' operation, a scrollbar
- cannot propagate view port information from the source widget
- (that calls 'set') to other assigned widgets.
-
-Thu Oct 7 17:36:25 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: When CHILDKILLED and so on, Tk.errorCode returns
- a Fixnum for 2nd element (it's pid) of the return value.
-
-Thu Oct 7 12:55:04 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (io_read): should freeze buffer before thread context
- switch. [ruby-dev:24442]
-
- * pack.c (pack_unpack): string conversion should at the top of the
- method. [ruby-dev:24439]
-
- * io.c (io_read): buffer should be frozen only after the length
- check. [ruby-dev:24440]
-
-Thu Oct 7 02:56:43 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c: use FMODE_APPEND.
-
-Thu Oct 7 01:05:33 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: add Tk.errorInfo and Tk.errorCode
-
-Thu Oct 7 00:08:37 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_s_sysopen): preserve path in the buffer allocated by
- ALLOCA_N() to prevent modification. [ruby-dev:24438]
-
-Wed Oct 6 09:21:00 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_mode_flags): preserve append mode flag.
- [ruby-dev:24436]
-
- * io.c (rb_io_modenum_mode): do not use external output buffer.
-
- * string.c (rb_str_justify): differ pointer retrieval to prevent
- padding string modification. [ruby-dev:24434]
-
- * range.c (range_each_func): allow func to terminate loop by
- returning RANGE_EACH_BREAK.
-
- * range.c (member_i): use RANGE_EACH_BREAK. [ruby-talk:114959]
-
-Tue Oct 5 09:53:22 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_fopen): mode string copy at the lowest level.
-
- * io.c (rb_io_flags_mode): requires output buffer no more. no
- allocation needed.
-
- * array.c (rb_ary_index): takes a block to compare items in an
- array. [ruby-talk:113069] [Ruby2]
-
- * array.c (rb_ary_rindex): ditto.
-
-Mon Oct 4 14:03:40 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_file_open_internal, rb_io_reopen): fname might be altered
- while GC. [ruby-dev:24408]
-
-Mon Oct 4 12:53:45 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/optiondb.rb: support definition of command
- resources on widgets
-
- * ext/tk/lib/tk/image.rb: bug fix
-
-Sun Oct 3 21:16:05 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (TEXT_REGEXP): allow 8-bit characters for the german
- version of Microsoft Exchange Server.
-
- * lib/net/imap.rb (RTEXT_REGEXP): ditto.
-
- * lib/net/imap.rb (CTEXT_REGEXP): ditto.
-
-Sat Oct 2 20:34:05 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (local_vars): moved to struct parser_params.
- [ruby-dev:24391]
-
- * parser.y (stmts): remove suspicious NODE_BEGIN. [ruby-dev:24390]
-
- * node.h (NEW_DVAR): extra semicolon.
-
-Sat Oct 2 00:42:20 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (r_byte): retrieve pointer from string value for each
- time. [ruby-dev:24404]
-
- * marshal.c (r_bytes0): ditto.
-
- * enum.c (sort_by_i): re-entrance check added. [ruby-dev:24399]
-
- * io.c (io_read): should freeze all reading buffer.
- [ruby-dev:24400]
-
- * string.c (rb_str_sum): should use bignums when bits is greater
- than or equals to sizeof(long)*CHAR_BITS. [ruby-dev:24395]
-
- * eval.c (specific_eval): defer pointer retrieval to prevent
- unsafe sourcefile string modification. [ruby-dev:24382]
-
- * string.c (rb_str_sum): wrong cast caused wrong result.
- [ruby-dev:24385]
-
- * enum.c (enum_sort_by): hide temporary array from
- ObjectSpace.each_object. [ruby-dev:24386]
-
- * string.c (rb_str_sum): check was done with false pointer.
- [ruby-dev:24383]
-
- * string.c (rb_str_sum): string may be altered. [ruby-dev:24381]
-
-Fri Oct 1 11:40:14 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_eval): defer pointer retrieval to prevent unsafe
- sourcefile string modification. [ruby-dev:24373]
-
- * io.c (io_read): block string buffer modification during
- rb_io_fread() by freezing it temporarily. [ruby-dev:24366]
-
- * io.c (rb_io_s_popen): mode argument may be altered.
- [ruby-dev:24375]
-
- * file.c (rb_file_s_basename): ext argument may be altered.
- [ruby-dev:24377]
-
- * enum.c (enum_sort_by): use NODE instead of 2 element arrays.
- [ruby-dev:24378]
-
- * string.c (rb_str_chomp_bang): StringValue() may change the
- receiver. [ruby-dev:24371]
-
-Fri Oct 1 11:25:20 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/grid.rb: revive TkGrid.grid
-
- * ext/tk/lib/tk/pack.rb: revive TkPack.pack
-
- * ext/tk/lib/tk/place.rb: revive TkPlace.place
-
-Thu Sep 30 00:50:44 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c (ip_init): bug fix
-
- * ext/tk/tkutil.c (get_eval_string_core): accept a Regexp object
-
- * ext/tk/lib/multi-tk.rb: fix bug on 'exit' operation
-
- * ext/tk/lib/tk/text.rb: 'tksearch' accepts a Regexp object as a
- matting pattern argument
-
-Wed Sep 29 10:58:07 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * enum.c (sort_by_i): internally used object must not be changed
- outside. [ruby-dev:24368]
-
-Mon Sep 27 21:25:12 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_call0): invoke finalizers periodically.
-
- * gc.c (gc_sweep): defer running finalizers. [ruby-dev:24354]
-
- * gc.c (rb_gc_finalize_deferred): run deferred finalizers.
-
-Mon Sep 27 15:01:59 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: missing ';'.
-
-Mon Sep 27 13:46:45 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * intern.h, struct.c (rb_struct_s_members, rb_struct_members): public
- accessors. [ruby-dev:24342]
-
- * marshal.c (w_object, r_object0): use accessors.
-
-Mon Sep 27 09:14:03 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_delete): comparison may change the capacity.
- [ruby-dev:24348]
-
- * array.c (rb_ary_fill): fill should honor length argument.
- [ruby-dev:24346]
-
- * array.c (rb_ary_replace): should not use ptr from shared array.
- [ruby-dev:24345]
-
- * ext/socket/socket.c (s_accept): don't retry for EWOULDBLOCK.
- [ruby-talk:113807]
-
-Sun Sep 26 08:05:10 2004 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: provides {Time,Date,DateTime}#to_{time,date,datetime}.
-
- * sample/cal.rb: uses getoptlong instead of getopts.
-
-Sat Sep 25 18:39:22 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (flatten): element size might change during comparison.
- [ruby-dev:24343]
-
-Sat Sep 25 01:52:49 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (rb_struct_s_members): wrong call of struct_members.
- [ruby-dev:24333]
-
-Fri Sep 24 16:09:42 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): propagate DVAR_DONT_RECYCLE on termination
- to avoid double call to rb_gc_force_recycle(). [ruby-dev:24311]
-
-Fri Sep 24 08:29:45 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (rb_parser_append_print): should handle prelude.
- [llama@u01.gate0]
-
- * parse.y (rb_parser_while_loop): ditto.
-
- * array.c (rb_ary_subseq): original object might be modified after
- sharing data creation. [ruby-dev:24327]
-
- * array.c (rb_ary_replace): ditto.
-
- * array.c (ary_make_shared): freeze shared array. [ruby-dev:24325]
-
- * struct.c (struct_members): always check struct size and size of
- members list in the class. [ruby-dev:24320]
-
-Thu Sep 23 19:48:14 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/Makefile.dev: removed.
-
- * ext/ripper/ripper.rb.in: moved to lib/ripper/core.rb.in.
-
- * ext/ripper/lib/ripper/core.rb: new file.
-
- * ext/ripper/lib/ripper/core.rb.in: new file.
-
- * ext/ripper/tools/generate-ripper_rb.rb: change comment.
-
- * test/ripper/*.rb: on__scan event removed.
-
- * test/ripper/*.rb: event name is changed: on__XXX -> on_XXX.
-
-Thu Sep 23 09:29:14 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_sub_bang): check if string is not modified
- during iteration. [ruby-dev:24315]
-
- * hash.c (rb_hash_rehash): replace st_foreach() by its deep
- checking counterpart. [ruby-dev:24310]
-
-Wed Sep 22 14:21:54 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: on__scan event removed.
-
- * parse.y [ripper]: event name is changed: on__XXX -> on_XXX.
-
- * ext/ripper/eventids2.c: ditto.
-
- * ext/ripper/ripper.rb.in: ditto.
-
- * ext/ripper/lib/ripper.rb: sync with ripper.rb.in.
-
- * ext/ripper/lib/ripper/tokenizer: ditto.
-
- * ext/ripper/lib/ripper/filter: new file.
-
- * sample/ripper/colorize.rb: new file.
-
- * sample/ripper/strip-comment.rb: new file.
-
-Wed Sep 22 13:50:49 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (hash_alloc): was using tbl pointer without
- initialization.
-
-Wed Sep 22 13:38:12 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_rehash): add iteration check. [ruby-dev:24301]
-
- * st.c (st_foreach): add deep check.
-
- * hash.c (rb_hash_fetch): returns KeyError instead of IndexError.
-
- * hash.c (env_fetch): ditto.
-
-Wed Sep 22 13:02:02 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_call_handler): workaround for Ctrl-C.
-
-Wed Sep 22 09:04:41 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y: remove global variables ruby_eval_tree and
- ruby_eval_tree_begin.
-
- * array.c (rb_ary_collect_bang): element size might change during
- comparison. [ruby-dev:24300]
-
- * array.c (rb_ary_reject_bang): ditto. [ruby-dev:24300]
-
- * array.c (rb_ary_eql): ditto. [ruby-dev:24300]
-
-Wed Sep 22 00:11:12 2004 Dave Thomas <dave@pragprog.com>
-
- * process.c: Add documentation for fork()
-
-Tue Sep 21 18:29:49 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_uniq_bang): element size might change during
- comparison. [ruby-dev:24298]
-
-Mon Sep 20 17:46:51 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/lib/ripper/tokenizer.rb: fix typo.
-
-Mon Sep 20 17:38:43 2004 Minero Aoki <aamine@loveruby.net>
-
- * test/ripper/test_scanner_events.rb: tokens must be reordered.
-
- * ext/ripper/lib/ripper/tokenizer.rb: ditto.
-
-Mon Sep 20 16:58:16 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: do not delay dispatching.
-
- * ext/ripper/lib/ripper/tokenizer.rb: sort tokens by right order.
-
-Mon Sep 20 15:17:47 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/lib/ripper/tokenizer.rb: new file.
-
-Mon Sep 20 15:13:52 2004 Minero Aoki <aamine@loveruby.net>
-
- * test/ripper/test_scanner_events.rb: test #lineno and #column.
-
-Mon Sep 20 14:50:17 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: delayed heredocument events should be
- dispatched after EOF.
-
-Mon Sep 20 14:39:42 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: adjust lineno and columns for multi-line
- strings.
-
- * parse.y [ripper]: delay heredocument events until seeing
- end-of-line.
-
- * parse.y [ripper]: event on__heredoc_contentn ->
- on__tstring_content.
-
- * ext/ripper/eventids2.c: ditto.
-
- * ext/ripper/lib/ripper.rb: sync with eventids2.c.
-
- * test/ripper/test_scanner_events.rb: test it.
-
- * ext/ripper/tools/generate-ripper_rb.rb: show basename of input.
-
- * ext/ripper/Makefile.dev: support objdir build.
-
-Mon Sep 20 13:22:55 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: remove Ripper#pos.
-
- * parse.y [ripper]: Ripper#column should return the column of the
- current token.
-
-Mon Sep 20 12:02:41 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: unify old_lex_p and token_head.
-
- * test/ripper/test_scanner_events.rb: now \r\n is saved correctly.
-
- * parse.y: new macro lex_goto_eol() for next change.
-
-Mon Sep 20 11:01:55 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: adjust line number for heredoc. [ruby-dev:24272]
-
-Mon Sep 20 04:49:22 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/ripper.rb.in: new const Ripper::PARSER_EVENT_TABLE.
-
- * ext/ripper/ripper.rb.in: new const Ripper::SCANNER_EVENT_TABLE.
-
- * ext/ripper/lib/ripper.rb: sync with ripper.rb.in.
-
-Mon Sep 20 04:13:00 2004 Minero Aoki <aamine@loveruby.net>
-
- * test/ripper/test_scanner_events.rb: test spaces before heredoc
- mark.
-
-Mon Sep 20 03:46:54 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: spaces before heredoc marker was lost.
- [ruby-dev:24272]
-
- * keywords: rb_reserved_word() should be defined only in ruby
- core. [ruby-dev:24272]
-
- * lex.c: sync with keywords.
-
- * ext/ripper/ripper.rb.in (parse): fix typo.
-
- * ext/ripper/lib/ripper.rb: sync with ripper.rb.in.
-
-Mon Sep 20 03:37:59 2004 Tanaka Akira <akr@m17n.org>
-
- * ext/zlib/zlib.c (gzfile_read_raw): call readpartial at first.
- (Zlib::GzipReader#readpartial): new method.
-
-Mon Sep 20 00:24:19 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_sort_by): do not use qsort directly. use
- rb_ary_sort_bang() instead. [ruby-dev:24291]
-
- * enum.c (enum_sort_by): pedantic type check added.
- [ruby-dev:24291]
-
- * hash.c (rb_hash_foreach_iter): check iter_lev after each
- iteration. [ruby-dev:24289]
-
- * array.c (rb_ary_and): element size might change during
- comparison. [ruby-dev:24290]
-
- * array.c (rb_ary_or): ditto. [ruby-dev:24292]
-
- * array.c (rb_ary_equal): wrong fix. [ruby-dev:24286]
-
-Sat Sep 18 15:02:22 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_equal): element size might change during
- comparison. [ruby-dev:24254]
-
- * array.c (rb_ary_diff): ditto. [ruby-dev:24274]
-
- * array.c (rb_ary_select): ditto. [ruby-dev:24278]
-
- * array.c (rb_ary_delete): ditto. [ruby-dev:24283]
-
- * array.c (rb_ary_rindex): ditto. [ruby-dev:24275]
-
- * array.c (rb_ary_initialize): element size might change during
- initializing block. [ruby-dev:24284]
-
-Sat Sep 18 14:10:23 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (dir_s_chdir): avoid memory leak and unnecessary chdir to
- the original directory when exception has caused in changing
- direcotry or within block. thanks to Johan Holmberg
- <holmberg@iar.se> [ruby-core:03446]
-
-Fri Sep 17 20:29:33 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * parse.y: add prototypes for Microsoft compiler.
-
- * ext/ripper/depend (parse.obj): lex.c exists at hdrdir.
-
- * {bcc32,win32,wince}/Makefile.sub (YACC, YFLAGS, parse.c):
- use bison.
-
-Fri Sep 17 17:11:08 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c (rb_ary_delete): element comparison might change array
- size. [ruby-dev:24273]
-
- * parse.y: make ruby parser reentrant. merge ripper parser to the
- real one. this change makes ruby require bison.
-
- * file.c (rb_file_truncate): clear stdio buffer before truncating
- the file. [ruby-dev:24191]
-
- * ext/digest/digest.c: use rb_obj_class() instead of CLASS_OF
- which might return singleton class. [ruby-dev:24202]
-
-Fri Sep 17 16:07:09 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: improve exit operation
-
-Fri Sep 17 15:01:57 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: fix SEGV when (thread_)vwait or
- (thread_)tkwait
-
- * ext/tk/lib/tk.rb: add alias wait_window to wait_destroy
-
- * ext/tk/lib/multi-tk.rb: support calling 'mainloop' on slave
- interpreters (however, the 'real' eventloop must be run on the
- Default Master IP)
-
- * ext/tk/lib/remote-tk.rb: follow the changes of ext/tk/lib/multi-tk.rb
-
- * ext/tk/sample/remote-ip_sample2.rb: ditto
-
- * ext/tk/sample/tkoptdb-safeTk.rb: ditto
-
-Thu Sep 16 18:12:13 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb (WEBrick::CGI#start): should set REMOTE_USER
- to request.user attribute.
-
- * lib/webrick/httpservlet/filehandler.rb
- (WEBrick::HTTPServlet::FileHandler#initialize): should expand
- the pathname of document root directory.
-
-Thu Sep 16 15:49:28 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_intern): protect string argument from GC.
- [ruby-core:03411]
-
-Wed Sep 15 20:22:23 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/tkoptdb-safeTk.rb: fix a bug depend on the changes
- of MultiTkIp
-
-Tue Sep 14 23:54:11 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string was en-bugged by
- the previous changes.
-
-Tue Sep 14 23:45:44 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/ri/ri_formatter.rb (RI::TextFormatter::TextFormatter.for):
- Add Eric Hodel's simpleformatter.
-
-Tue Sep 14 22:11:08 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: Add rdoc.
-
-Tue Sep 14 20:24:49 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y [ripper]: space event is on__sp, not on__lwsp.
- [ruby-dev:24257]
-
- * ext/ripper/eventids2.c: ditto.
-
- * ext/ripper/lib/ripper.rb: ditto.
-
- * ext/ripper/depend (ripper.o): No action is needed.
- [ruby-dev:24260]
-
- * ext/ripper/depend: Borland make does not accept pipes in
- Makefile rules. [ruby-dev:24589]
-
- * ext/ripper/depend: separate rules for developpers.
-
- * ext/ripper/Makefile.dev: new file.
-
- * ext/ripper/MANIFEST: add Makefile.dev.
-
- * ext/ripper/tools/generate-eventids1.rb: read from file, not
- stdin.
-
- * ext/ripper/extconf.rb: clean ripper.E.
-
- * ext/ripper/tools/generate-ripper_rb.rb: #include ids1/ids2
- function was lost.
-
- * ext/ripper/tools/generate-ripper_rb.rb: SCANNER_EVENTS wrongly
- contained parser events.
-
- * ext/ripper/lib/ripper.rb: ditto.
-
-Tue Sep 14 16:59:37 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: fix SEGV
-
- * ext/tk/lib/multi-tk.rb: improve safe-level handling of argument proc
-
- * ext/tk/sample/multi-ip_sample.rb: rename of old 'safe-tk.rb'
-
- * ext/tk/sample/safe-tk.rb: new sample script
-
-Mon Sep 13 21:33:40 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_x509name.c (ossl_x509name_to_s): add optional
- second argument to specify the output format (see also
- X509_NAME_print_ex).
-
- * ext/openssl/ossl_x509name.c (ossl_x509name_init): new constants:
- OpenSSL::X509::Name::COMPAT, OpenSSL::X509::Name::RFC2253,
- OpenSSL::X509::ONELINE, OpenSSL::X509::MULTILINE.
-
- * ext/openssl/lib/openssl/x509.rb (OpenSSL::X509::Name::RFC2253DN):
- new module to provide the parse for RFC2253 DN format.
-
- * ext/openssl/lib/openssl/x509.rb (OpenSSL::X509::Name.parse_rfc2253):
- new method to parse RFC2253 DN format.
-
-Mon Sep 13 19:16:33 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * eval.c (blk_copy_prev): need frame_dup(). [ruby-dev:24103]
-
-Mon Sep 13 16:23:27 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: MultiTkIp.new_master and new_slave accept
- safe-level value argument
-
-Mon Sep 13 10:48:37 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_getpid): don't need to use _getpid() on
- mswin32 and mingw32.
-
-Mon Sep 13 10:22:05 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * object.c (nil_inspect): fix typo.
-
-Mon Sep 13 09:29:58 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/depend: (nmake hack) prepend "./" to ripper.c to
- avoid {$(srcdir)}.
-
-Mon Sep 13 06:43:42 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper/tools/list-parse-event-ids.rb: does not use getopts.
-
- * ext/ripper/tools/list-scan-event-ids.rb: ditto.
-
-Mon Sep 13 02:42:28 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/Setup: add ripper.
-
- * ext/Setup.atheos: ditto.
-
- * ext/Setup.dj: ditto.
-
- * ext/Setup.emx: ditto.
-
- * ext/Setup.nt: ditto.
-
- * ext/Setup.x68: ditto.
-
-Mon Sep 13 02:26:31 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/ripper: ripper extension added.
-
- * ext/ripper/MANIFEST: new file.
-
- * ext/ripper/README: new file.
-
- * ext/ripper/depend: new file.
-
- * ext/ripper/extconf.rb: new file.
-
- * ext/ripper/eventids2.c: new file.
-
- * ext/ripper/ripper.rb.in: new file.
-
- * ext/ripper/lib/ripper.rb: new file.
-
- * ext/ripper/test/check-event-arity.rb: new file.
-
- * ext/ripper/test/check-event-coverage.sh: new file.
-
- * ext/ripper/test/check-scanner-event-coverage.rb: new file.
-
- * ext/ripper/test/list-called-events.rb: new file.
-
- * ext/ripper/test/src_rb: new file.
-
- * ext/ripper/test/validate.rb: new file.
-
- * ext/ripper/tools/generate-eventids1.rb: new file.
-
- * ext/ripper/tools/generate-param-macros.rb: new file.
-
- * ext/ripper/tools/generate-ripper_rb.rb: new file.
-
- * ext/ripper/tools/list-parse-event-ids.rb: new file.
-
- * ext/ripper/tools/list-scan-event-ids.rb: new file.
-
- * ext/ripper/tools/preproc.rb: new file.
-
- * ext/ripper/tools/strip.rb: new file.
-
- * test/ripper: ripper tests added.
-
- * test/ripper/dummyparser.rb: new file.
-
- * test/ripper/test_parser_events.rb: new file.
-
- * test/ripper/test_scanner_events.rb: new file.
-
-Mon Sep 13 01:03:02 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: improve control of preserv/release tcltkip
-
- * ext/tcltklib/tcltklib.c: store original 'exit' command
-
- * ext/tk/tkutil.c: fix(?) SEGV
-
-Mon Sep 13 00:22:53 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y: fix file header.
-
-Mon Sep 13 00:20:39 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y: ripper merged.
-
- * lex.c: ditto.
-
- * keywords: ditto.
-
-Sun Sep 12 23:53:17 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * util.c (ruby_strdup): remove unnecessary code. (xmalloc never
- returns NULL.)
-
- * util.c (ruby_getcwd): fix memory leak on failure.
-
-Sun Sep 12 02:41:58 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: add TclTkIp#allow_ruby_exit? and
- allow_ruby_exit=
-
- * ext/tk/lib/multi-tk.rb: ditto.
-
- * ext/tk/lib/remote-tk.rb: ditto.
-
- * ext/tcltklib/MANUAL.euc: ditto.
-
- * ext/tcltklib/MANUAL.eng: ditto.
-
- * ext/tcltklib/tcltklib.c: fix some reasons of SEGV
-
- * ext/tk/tkutil.c: ditto.
-
- * ext/tk/lib/multi-tk.rb: ditto.
-
- * ext/tk/lib/tk/timer.rb: ditto.
-
-Sat Sep 11 16:09:46 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb: Fix up cross-file class merging.
-
-Fri Sep 10 20:18:05 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tcltklib/tcltklib.c (lib_merge_tklist): fix suspicious
- pointer conversion.
-
-Fri Sep 10 19:16:24 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * bcc32/Makefile.sub: bccwin32 port starts to use RTL dll.
- (need to rebuild all) [ruby-dev:24138]
-
- * win32/win32.{h,c}: ditto.
-
-Fri Sep 10 15:55:59 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (mkdir_p): should pass mode argument to
- Dir.mkdir. [ruby-dev:24242]
-
- * test/fileutils/test_fileutils.rb: test it.
-
-Fri Sep 10 02:43:54 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/template/kilmer.rb: James Buck's
- patch for call-seq.
-
-Thu Sep 9 13:58:56 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c (ip_init): change flag value for setting
- 'argv' and 'argv0' variable
-
- * ext/tk/lib/remote-tk.rb: follow changes of multi-tk.rb
-
-Thu Sep 9 11:46:18 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_classes): Allow
- spaces aroun parameter to define_method_under (James Buck)
-
-Wed Sep 8 18:44:03 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_write): zero fill a gap if exsts.
- [ruby-dev:24190]
-
-Wed Sep 8 15:19:49 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c (ip_init): cannot create a IP at level 4
-
- * ext/tk/lib/multi-tk.rb: improve 'exit' operation, security check,
- and error treatment
-
- * ext/tk/lib/multi-tk.rb: allow a trusted slave IP to create slave IPs
-
- * ext/tk/lib/tk/listbox.rb: add TkListbox#value, value=, clear, and
- erase
-
- * ext/tk/lib/tk/text.rb: add TkText#clear and erase
-
-Tue Sep 7 15:17:49 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/socket.c (ruby_connect): break immediately if a
- socket is non-blocking. [ruby-talk:111654]
-
-Tue Sep 7 12:48:22 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc32,win32,wince}/Makefile.sub (config.h): add fcntl.
-
- * win32/win32.[ch] (fcntl): ditto.
-
- * win32/win32.c (rb_w32_connect): support nonblocking mode.
-
- * ext/socket/socket.c (wait_connectable, ruby_connect): support
- nonblocking connect on various platforms.
-
-Mon Sep 6 11:00:47 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (dir_s_chdir): the patch to shut up false warning when
- exception occurred within a block. a patch was given from Johan
- Holmberg <holmberg at iar.se>. [ruby-core:03292]
-
-Mon Sep 6 10:57:40 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/lib/tk/menu.rb(TkOptionMenubutton#insert): call correct method
-
-Mon Sep 6 07:51:42 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (cvar_cbase): singletons should refer to outer cvar scope.
- [ruby-dev:24223]
-
- * eval.c (rb_load): should preserve previous ruby_wrapper value.
- [ruby-dev:24226]
-
-Sat Sep 4 01:14:57 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (cvar_cbase): class variables cause SEGV in
- instance_eval() for fixnums and symbols. [ruby-dev:24213]
-
-Fri Sep 3 17:47:58 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (make_struct): remove redefining constant when
- conflict. [ruby-dev:24210]
-
-Fri Sep 3 11:31:44 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: Tk.after makes TkCore::INTERP.tk_cmd_tbl grow
- [ruby-dev:24207]
-
-Fri Sep 3 02:12:48 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: fix typo [ruby-talk:111266]
-
- * ext/tk/lib/tk/text.rb: fix typo
-
- * ext/tk/lib/multi-tk.rb: improve safe-level treatment on slave IPs
-
-Fri Sep 3 01:54:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): extact target prefix from Makefiles.
-
- * ext/extmk.rb: already built-in libraries satisfy dependencies.
- [ruby-dev:24028]
-
-Wed Sep 1 21:16:50 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/lib/tk/spinbox.rb: fix typo
-
-Wed Sep 1 19:28:37 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_proc_exec): label cannot precede variable declarations.
-
-Tue Aug 31 18:20:49 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/tk/tkutil.c (cbsubst_init): fix memory leak
-
- * ext/tk/tkutil.c (cbsubst_get_all_subst_keys): fix SEGV
-
-Tue Aug 31 16:04:22 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c (ip_delete): when a tcltkip is deleted,
- destroy its root widget
-
-Tue Aug 31 12:30:36 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c (del_root): fix SEGV
-
-Mon Aug 30 21:50:14 2004 Dave Thomas <dave@pragprog.com>
-
- * object.c: Add RDoc for Module.included.
-
-Mon Aug 30 23:11:06 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/ri/ri_driver.rb (and others): ri now merges documentation
- if it finds the same class in multiple places.
-
-Mon Aug 30 22:40:30 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: 'restart' method accepts arguments
-
-Mon Aug 30 15:10:46 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (GNU/k*BSD): fixed FTBFS on GNU/k*BSD. [ruby-dev:24051]
-
-Sun Aug 29 14:08:56 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: compile error on bcc32 [ruby-dev:24081]
-
- * ext/tk/lib/multi-tk.rb: MultiTkIp#eval_string does not work
-
-Sat Aug 28 23:04:41 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_and): protect parameters from GC.
- [ruby-talk:110664]
-
-Fri Aug 27 12:13:50 2004 Tanaka Akira <akr@m17n.org>
-
- * ext/stringio/stringio.c (Init_stringio): add StringIO#readpartial as
- an alias for StringIO#sysread.
-
-Fri Aug 27 10:14:21 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_proc_exec): strip trailing spaces. [ruby-dev:24143]
-
- * win32/win32.c (CreateChild): ditto.
-
-Thu Aug 26 04:38:29 2004 Dave Thomas <dave@pragprog.com>
-
- * eval.c (return_jump): Minor typo in error message. Now reads
- "return can't jump across threads".
-
-Wed Aug 25 15:18:52 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_longjmp): Exception#to_str is no longer defined.
-
-Wed Aug 25 11:39:10 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (exc_equal): exceptions are equal if they share same
- class, message and backtrace. [ruby-talk:110354]
-
- * error.c (name_err_mesg_equal): ditto.
-
-Tue Aug 24 16:41:48 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/cgi/session.rb (CGI::Session::FileStore#initialize): do not
- use a session id as a filename.
-
- * lib/cgi/session/pstore.rb (CGI::Session::PStore#initialize): ditto.
-
- * lib/cgi/session/pstore.rb (CGI::Session::PStore#initialize): use
- Dir::tmpdir.
-
-Tue Aug 24 14:32:17 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/cgi/session.rb (CGI::Session::FileStore#initialize): untaint
- session id after check.
-
-Tue Aug 24 08:57:51 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_x509attr.c (ossl_x509attr_initialize): d2i
- functions may replace the pointer indicated by the first argument.
-
- * ext/openssl/ossl_x509ext.c (ossl_x509ext_initialize): ditto.
-
- * ext/openssl/ossl_x509name.c (ossl_x509name_initialize): ditto.
-
-Mon Aug 23 12:43:32 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/resolv.rb (Config.default_config_hash): when multiple domains
- are set, Win32::Resolv.get_resolv_info returns Array.
-
-Sun Aug 22 16:27:38 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_read):
- - should return an empty string if specified length to read is 0.
- - should check for pending data and wait for fd before reading.
- - call underlying IO's sysread if SSL session is not started.
- [ruby-dev:24072], [ruby-dev:24075]
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_write):
- - call underlying IO's syswrite if SSL session is not started.
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_pending): new method
- OpenSSL::SSL#pending.
-
- * ext/openssl/lib/openssl/buffering.rb: should not use select.
-
-Sun Aug 22 01:10:36 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#proxy_connect):
- should call :ProxyContentHandler before finishing CONNECT.
-
-Sat Aug 21 06:41:16 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tcltklib/extconf.rb (find_tcl, find_tk): find stub library.
-
- * lib/mkmf.rb (arg_config, with_config): deal with '-' and '_'
- uniformly. [ruby-dev:24118]
-
-Fri Aug 20 14:49:42 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * io.c (rb_io_check_writable): no need to check read buffer if
- already changed to write mode.
-
-Fri Aug 20 11:46:43 2004 UENO Katsuhiro <katsu@blue.sky.or.jp>
-
- * ext/zlib/zlib.c: GzipReader#ungetc caused crc error.
-
-Thu Aug 19 16:29:45 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: Fail to treat a hash value of 'font' option.
-
- * ext/tk/lib/tk.rb: bindinfo cannot return '%' substiturion information.
-
- * ext/tk/lib/menu.rb: typo bug.
-
-Thu Aug 19 15:15:24 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c (free_dir): fix memory leak. reported by yamamoto
- madoka.
-
-Thu Aug 19 09:19:27 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * configure.in, win32/Makefile.sub (LIBS): need to link shell32
- library for SH* functions on mswin32 and mingw32.
-
- * wince/Makefile.sub (LIBS): need to link ceshell library for SH*
- functions on mswince.
-
-Thu Aug 19 03:07:00 2004 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml/baseemitter.rb: folding now handles double-quoted strings,
- fixed problem with extra line feeds at end of folding, whitespace
- opening scalar blocks.
-
- * lib/yaml/rubytypes.rb: subtelties in handling strings with
- non-printable characters and odd whitespace patterns.
-
-Wed Aug 18 23:44:20 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb (rbuf_fill): OpenSSL::SSLSocket has its own
- buffer, select(2) might not work. [ruby-dev:24072]
-
-Wed Aug 18 17:10:12 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/tcltklib/stubs.c (ruby_tcltk_stubs): need to call
- Tcl_FindExecutable() for Tcl/Tk 8.4.
-
-Wed Aug 18 12:52:55 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_obj_instance_eval): evaluates under special singleton
- classes as for special constants.
-
-Wed Aug 18 11:22:52 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (init_env): initialize HOME and USER environment
- variables unless set.
-
-Wed Aug 18 10:17:21 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (bind_eval): new method. [RCR 251]
-
- * string.c (rb_str_clear): new method. [ruby-dev:24104]
-
-Tue Aug 17 17:20:59 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_reopen): should clear allocated OpenFile. pointed
- out by Guy Decoux. [ruby-core:03288]
-
-Tue Aug 17 01:36:32 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/usage.rb: Remove extra indent. Tidy 'ri' option
- parsing so RDoc::usage plays better with OptionParser.
-
-Sat Aug 14 02:48:16 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/usage.rb: Added. Allows command line programs
- to report usage using their initial RDoc comment.
-
-Sat Aug 14 01:25:48 2004 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/token.c: re2c no longer compiled with bit vectors. caused
- problems for non-ascii characters. [ruby-core:03280]
- * ext/syck/implicit.c: ditto.
- * ext/syck/bytecode.c: ditto.
-
-Fri Aug 13 12:55:20 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils.parse_range_header):
- fix regex for range-spec.
-
- * lib/webrick/httpservlet/filehandler.rb
- (WEBrick::HTTPServlet::DefaultFileHandler#make_partial_content):
- multipart/byteranges response was broken.
-
- * lib/xmlrpc/server.rb: refine example code.
-
-Thu Aug 12 10:54:17 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * rubyio.h (rb_eof_error): should mark as NORETURN.
-
- * win32/win32.c (make_cmdvector): adjust escaped successive
- double-quote handling.
-
-Thu Aug 12 01:53:10 2004 Tanaka Akira <akr@m17n.org>
-
- * io.c (read_buffered_data): extracted from rb_io_fread.
- (io_readpartial): new method IO#readpartial.
- [ruby-dev:24055]
-
-Wed Aug 11 17:17:50 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (RPATHFLAG): stop setting RPATHFLAG on Interix.
-
-Mon Aug 9 15:03:20 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpservlet/erbhandler.rb
- (WEBrick::HTTPServlet::ERBHandler#do_GET): should select media type
- by suffix of script filename.
-
-Mon Aug 9 12:51:43 2004 Dave Thomas <dave@pragprog.com>
-
- * dir.c (dir_s_glob): Roll in Austin Ziegler's Dir.glob and
- fnmatch updates.
-
-Mon Aug 9 06:33:06 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (cp_r): copies symlink to symlink, except
- root entries of cp_r.
-
- * lib/fileutils.rb: new method FileUtils.copy_entry.
-
- * test/fileutils/test_fileutils.rb: more cp_r tests.
-
-Sun Aug 8 00:43:31 2004 why the lucky stiff <why@ruby-lang.org>
-
- * lib/implicit.c: added sexagecimal float#base60.
-
- * ext/syck/rubyext.c (yaml_org_handler): ditto.
-
- * lib/token.c: indentation absolutely ignored when processing flow
- collections. plain scalars are trimmed if indentation follows in
- an ambiguous flow collection.
-
-Sat Aug 7 03:08:21 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (proc_daemon): new method. should be modified for
- platforms without /dev/null.
-
-Sat Aug 7 00:50:01 2004 Tanaka Akira <akr@m17n.org>
-
- * ext/zlib/zlib.c: Zlib::GzipReader#read(0) returns "" instead of nil.
-
-Wed Aug 4 13:26:00 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (r_bytes0): optimize out read(0). [ruby-talk:108276]
-
-Tue Aug 3 13:49:12 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/namespace.rb: bug fix
-
- * ext/tk/lib/tkextlib/treectrl/tktreectrl.rb: add Tk::TreeCtrl.loupe
-
-Mon Aug 2 23:33:48 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * test/ruby/test_file.rb (test_fnmatch): added more tests.
-
-Mon Aug 2 18:04:21 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/msgcat.rb (set_translation): bug fix (fail to set
- trans_str to the same as src_str when trans_str is not given.)
-
-Mon Aug 2 17:40:44 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (blk_free): fixed serious memory leak. [ruby-dev:24013]
-
-Mon Aug 2 11:53:06 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/code_objects.rb (RDoc::Context::find_symbol): Fix infinite recursion
- looking up some top level symbols (batsman)
-
-Mon Aug 2 11:48:29 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_methods): Allow '.'s in
- variable names to support SWIG generated files (Hans Fugal)
-
-Sat Jul 31 23:08:00 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (is_defined): stupid mistakes fixed. [ruby-dev:24006]
-
-Sat Jul 31 17:39:47 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-expr-beg, ruby-parse-partial,
- ruby-calculate-indent, ruby-move-to-block, ruby-forward-sexp,
- ruby-backward-sexp): keywords must match word-wise.
-
-Sat Jul 31 13:37:51 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (is_defined): avoid unnecessary method invocations.
-
-Sat Jul 31 05:35:37 2004 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml/rubytypes.rb: exceptions were using an older
- YAML.object_maker. [ruby-core:03080]
-
- * ext/syck/token.c (sycklex_yaml_utf8): using newline_len to
- handline CR-LFs. "\000" was showing up on folded blocks which
- stopped at EOF.
-
-Sat Jul 31 01:25:11 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (is_defined): call is_defined() before invoking
- rb_eval(). [ruby-talk:107867]
-
-Fri Jul 30 16:10:54 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c (lib_fromUTF8_core): raise ArgumentError when
- the unknown encoding name is given.
-
- * ext/tcltklib/tcltklib.c (lib_toUTF8_core): ditto.
-
- * ext/tk/lib/tk.rb (Tk::Encoding.encoding_convertfrom): bug fix.
-
- * ext/tk/lib/tk.rb (Tk::Encoding.encoding_convertto): ditto.
-
-Wed Jul 28 18:59:17 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::initialize): remove at_exit code for CGI_PARAMS
- and CGI_COOKIES. they will no longer be used.
-
-Wed Jul 28 15:44:08 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): should call rb_call_super() directly for
- visibility overriding. [ruby-dev:23989]
-
-Wed Jul 28 01:04:44 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * env.h: remove argv from ruby_frame.
-
- * eval.c (rb_eval): no more copy on write.
-
- * eval.c (assign): ditto.
-
- * eval.c (rb_call0): can receive *rest by specifying negative
- argc. (-1 means 0 arg and *rest, -2 means 1 arg and *rest...)
-
- * eval.c (rb_call0): properly set frame's argc counter.
-
- * gc.c (rb_gc_mark_frame): need not to mark frame's argv
-
- * gc.c (run_final): wrong order of data. [ruby-dev:23984]
-
-Tue Jul 27 07:05:04 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): copy on write for argument local variable
- assignment.
-
- * eval.c (assign): ditto.
-
- * eval.c (rb_call0): update ruby_frame->argv with the default
- value used for the optional arguments.
-
- * object.c (Init_Object): "===" calls rb_obj_equal() directly.
- [ruby-list:39937]
-
-Mon Jul 26 11:22:55 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils.escape): should
- escape space.
-
-Sun Jul 25 10:56:28 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * win32/win32.{h,c} (rb_w32_{f,fd,fs}open): workaround for bcc32's
- {f,fd,fs}open bug. set errno EMFILE and EBADF. [ruby-dev:23963]
-
- * test/drb/drbtest.rb: fix method duplication.
-
-Sat Jul 24 13:32:47 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (rb_range_beg_len): returns Qnil only when "beg" points
- outside of a range. No boundary check for "end".
-
-Fri Jul 23 16:40:25 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (define_final): should not disclose NODE* to Ruby world.
- [ruby-dev:23957]
-
-Fri Jul 23 08:52:22 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (disconnected?): new method.
-
-Thu Jul 22 16:41:54 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi/session.rb (CGI::Session::FileStore#update): sets the
- permission of the session data file to 0600.
-
- * lib/cgi/session/pstore.rb (CGI::Session::Pstore#initialize):
- ditto.
-
-Mon Jul 19 00:53:46 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpservlet/cgihandler.rb
- (WEBrick::HTTPServlet::CGIhandler#do_GET): set SystemRoot environment
- variable to CGI process on Windows native platforms. [ruby-dev:23936]
-
-Sun Jul 18 16:14:29 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/msgcat.rb (TkMsgCatalog.callback): bug fix
- ( wrong number of argument )
-
-Sun Jul 18 08:13:58 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): remove extra sign digit.
-
-Sun Jul 18 03:19:14 2004 Akinori MUSHA <knu@iDaemons.org>
-
- * dir.c (bracket): use NULL instead of 0.
-
-Sun Jul 18 02:35:30 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (receive_responses): return if a LOGOUT response
- received.
-
-Sat Jul 17 23:59:01 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (send_string_data): wait command continuation
- requests before sending octet data of literals.
-
-Sat Jul 17 23:54:59 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/variable.rb: TkVariable#ref returns a TkVariable object
-
-Sat Jul 17 22:04:44 2004 akira yamada <akira@ruby-lang.org>
-
- * lib/uri/ldap.rb: method hierarchical? should be in URI::LDAP.
-
-Sat Jul 17 18:29:07 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stmt): not to show same error messages twice.
-
-Sat Jul 17 14:18:11 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_match_m): String#match should also take
- optional argument. [ruby-core:03205]
-
- * re.c (rb_reg_match_m): add optional second argugment "pos" to
- specify match start point. [ruby-core:03203]
-
-Sat Jul 17 13:13:32 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/ruby-lex.rb (RubyLex::identify_string): %s string do not
- process expression interpolation. [ruby-talk:106691]
-
-Sat Jul 17 05:26:27 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/diagram.rb: Incorporate Micheal Neumann's
- client-side imagemao patch
-
-Sat Jul 17 01:57:03 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (THREAD_ALLOC): th->thread should be initialized to NULL.
- [ruby-talk:106657] The solution was found by Guy Decoux.
-
-Fri Jul 16 22:30:28 2004 Michael Neumann <mneumann@ntecs.de>
-
- * file.c (rb_stat_dev_major): new methods File::Stat#dev_major and
- #dev_minor. [ruby-core:03195]
-
-Fri Jul 16 11:17:38 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (exit_initialize): use EXIT_SUCCESS instead of 0.
- [ruby-dev:23913]
-
- * error.c (exit_success_p): new method SystemExit#success?.
- [ruby-dev:23912]
-
- * error.c (syserr_initialize): initialization for subclasses.
- [ruby-dev:23912]
-
-Thu Jul 15 23:53:38 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser#warn, OptionParser#abort): Exception
- no longer has to_str method.
-
-Thu Jul 15 22:59:48 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/readline/extconf.rb: added dir_config for curses, ncurses,
- termcap.
-
-Thu Jul 15 20:44:46 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * class.c: rdoc patch
-
-Thu Jul 15 14:12:34 2004 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml.rb (YAML::load_file, YAML::parse_file): added.
-
- * ext/syck/token.c: re2c compiled with bit vectors now.
- * ext/syck/implicit.c: ditto.
- * ext/syck/bytecode.c: ditto.
-
-Thu Jul 15 10:15:04 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/, ext/tcltklib/: bug fix
-
- * ext/tk/lib/tk.rb: better operation for SIGINT when processing
- callbacks.
- * ext/tk/lib/tk/msgcat.rb: ditto.
- * ext/tk/lib/tk/variable.rb: ditto.
- * ext/tk/lib/tk/timer.rb: ditto.
-
- * ext/tk/lib/tk/validation.rb: add Tk::ValidateConfigure.__def_validcmd
- to define validatecommand methods easier
-
- * ext/tk/lib/tk.rb (_genobj_for_tkwidget): support autoload Tk ext
- classes
-
- * ext/tk/lib/tk/canvas.rb and so on: remove the parent widget type
- check for items (e.g. canvas items; depends on the class) to
- avoid some troubles on Tk extension widget class definition.
-
- * ext/tk/lib/tkextlib/: add Iwidget and TkTable extension support
-
- * ext/tk/sample/tkextlib/: add samples of Iwidget and TkTable
-
-Wed Jul 14 23:49:30 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (enum_min_by): new method Enum#min_by. added Enum#max_by
- as well.
-
-Wed Jul 14 18:05:21 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_asn1.c (ossl_asn1cons_to_der): fix type of
- argument. [ruby-dev:23891]
-
- * test/openssl/test_x509store.rb: prune tests for CRL checking
- unless X509::V_FLAG_CRL_CHECK is defined.
-
-Wed Jul 14 12:20:05 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * util.c (ruby_strtod): should not convert string in the form of
- "-I.FE-X" which both "I" and "F" are omitted. [ruby-dev:23883]
-
- * test/ruby/test_float.rb (test_strtod): add test for bug fix.
-
-Wed Jul 14 00:33:48 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * array.c: rdoc patch. merged patch from Johan Holmberg
- <holmberg@iar.se> [ruby-core:3170]
-
-Tue Jul 13 19:39:12 2004 akira yamada <akira@ruby-lang.org>
-
- * lib/uri/generic.rb (URI::Generic#merge_path):
- "URI('http://www.example.com/foo/..') + './'" should return
- "URI('http://www.example.com/')". [ruby-list:39838]
- "URI('http://www.example.com/') + './foo/bar/..'" should return
- "URI('http://www.example.com/foo/')". [ruby-list:39844]
-
- * test/uri/test_generic.rb (TestGeneric#test_merge): added tests.
-
-Tue Jul 13 15:48:56 2004 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/mkmf.rb (init_mkmf): Do not add $(libdir) to $LIBPATH in
- extmk mode.
-
- * lib/mkmf.rb (dir_config): Prepend a new library path instead of
- appending so it is tried first.
-
-Tue Jul 13 00:50:48 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb: Support call-seq: for Ruby files.
-
-Mon Jul 12 21:20:51 2004 Dave Thomas <dave@pragprog.com>
-
- * html_generator.rb: Support hyperlinks of the form {any text}[xxx]
- as well as stuff[xxx]
-
-Sat Jul 10 09:30:24 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/soap/marshal/test_struct.rb: use qualified built-in class name
- (::Struct) to avoid name crash.
-
-Sat Jul 10 04:21:56 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: better operation for SIGINT when processing
- callbacks.
- * ext/tk/lib/tk/msgcat.rb: ditto.
- * ext/tk/lib/tk/variable.rb: ditto.
- * ext/tk/lib/tk/timer.rb: ditto.
-
- * ext/tk/lib/tk/validation.rb (__def_validcmd): add a module
- function of Tk::ValidateConfigure to define validatecommand
- methods easier
-
-Fri Jul 9 22:18:59 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * array.c, enum.c, pack.c: rdoc patch from Johan Holmberg
- <holmberg@iar.se> [ruby-core:3132] [ruby-core:3136]
-
- * numeric.c: rdoc patch.
-
-Fri Jul 9 19:26:39 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (URI::HTTPS#proxy_open): raise ArgumentError to
- notice https is not supported.
-
-Fri Jul 9 14:28:54 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_raise): accept third argument as well as
- Kernel#raise, and evaluate the arguments to create an exception in
- the caller's context. [ruby-talk:105507]
-
-Fri Jul 9 01:47:08 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib: bug fix
- * ext/tk/lib/tkextlib/itcl: add [incr Tcl] support
- * ext/tk/lib/tkextlib/itk: add [incr Tk] support
- * ext/tk/lib/tkextlib/iwidgets: midway point of [incr Widgets] support
- * ext/tk/sample/tkextlib/iwidgets: very simple examples of
- [incr Widgets]
-
-Thu Jul 8 19:27:16 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_cv_stack_end_address): detect stack end address
- variable supplied by system. [ruby-core:03115]
-
- * gc.c (Init_stack): use system provided address if possible.
-
-Thu Jul 8 00:05:23 2004 akira yamada <akira@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile::initialize): got out code of
- generating tmpname. [ruby-dev:23832][ruby-dev:23837]
-
-Wed Jul 7 02:31:41 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/{rss,parser,0.9,1.0,2.0}.rb: supported RSS 0.9x/2.0
- validation and validation which disregard order of elements.
- * test/rss/test_parser.rb: added tests for RSS 0.9x/2.0
- validation.
- * test/rss/{test_trackback,rss-testcase}.rb: fixed no good method
- name.
-
-Wed Jul 7 00:48:34 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/tk/lib/tkextlib/tktrans.rb,
- ext/tk/lib/tkextlib/treectrl.rb: fix syntax errors.
-
-Tue Jul 6 18:38:45 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib: improve framework of developping Tcl/Tk extension
- wrappers
-
-Mon Jul 5 23:56:42 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/{trackback,syndication,dublincore,content}.rb: worked
- with ruby 1.6 again.
-
- * test/rss/rss-assertions.rb: ditto.
-
-Mon Jul 5 22:54:39 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/uri/common.rb (Kernel#URI): new global method for parsing URIs.
-
-Mon Jul 5 09:02:52 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_yield, rb_f_catch): 4th argument to rb_yield_0()
- is a set of bit flags. [ruby-dev:23859]
-
-Mon Jul 5 01:20:17 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * lib/drb/drb.rb(DRbConn self.open): If socket pool is full, close
- the socket whose last-access-time is oldest. (and add new one)
- [ruby-dev:23860]
-
-Sun Jul 4 12:24:50 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/rss.rb: added copyright header.
-
-Sat Jul 3 22:25:27 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * added files:
- * lib/soap/header/*
- * lib/soap/rpc/httpserver.rb
- * lib/wsdl/soap/cgiStubCreator.rb
- * lib/wsdl/soap/classDefCreator.rb
- * lib/wsdl/soap/classDefCreatorSupport.rb
- * lib/wsdl/soap/clientSkeltonCreator.rb
- * lib/wsdl/soap/driverCreator.rb
- * lib/wsdl/soap/mappingRegistryCreator.rb
- * lib/wsdl/soap/methodDefCreator.rb
- * lib/wsdl/soap/servantSkeltonCreator.rb
- * lib/wsdl/soap/standaloneServerStubCreator.rb
- * lib/wsdl/xmlSchema/enumeration.rb
- * lib/wsdl/xmlSchema/simpleRestriction.rb
- * lib/wsdl/xmlSchema/simpleType.rb
- * lib/xsd/codegen/*
- * lib/xsd/codegen.rb
- * sample/soap/authheader/*
- * sample/soap/raa2.4/*
- * sample/soap/ssl/*
- * sample/soap/swa/*
- * sample/soap/whois.rb
- * sample/wsdl/raa2.4/*
- * test/soap/header/*
- * test/soap/ssl/*
- * test/soap/struct/*
- * test/soap/swa/*
- * test/soap/wsdlDriver/*
- * test/wsdl/multiplefault.wsdl
- * test/wsdl/simpletype/*
- * test/wsdl/test_multiplefault.rb
-
- * modified files:
- * lib/soap/baseData.rb
- * lib/soap/element.rb
- * lib/soap/generator.rb
- * lib/soap/netHttpClient.rb
- * lib/soap/parser.rb
- * lib/soap/property.rb
- * lib/soap/soap.rb
- * lib/soap/streamHandler.rb
- * lib/soap/wsdlDriver.rb
- * lib/soap/encodingstyle/handler.rb
- * lib/soap/encodingstyle/literalHandler.rb
- * lib/soap/encodingstyle/soapHandler.rb
- * lib/soap/mapping/factory.rb
- * lib/soap/mapping/mapping.rb
- * lib/soap/mapping/registry.rb
- * lib/soap/mapping/rubytypeFactory.rb
- * lib/soap/mapping/wsdlRegistry.rb
- * lib/soap/rpc/cgistub.rb
- * lib/soap/rpc/driver.rb
- * lib/soap/rpc/proxy.rb
- * lib/soap/rpc/router.rb
- * lib/soap/rpc/soaplet.rb
- * lib/soap/rpc/standaloneServer.rb
- * lib/wsdl/data.rb
- * lib/wsdl/definitions.rb
- * lib/wsdl/operation.rb
- * lib/wsdl/parser.rb
- * lib/wsdl/soap/definitions.rb
- * lib/wsdl/xmlSchema/complexContent.rb
- * lib/wsdl/xmlSchema/complexType.rb
- * lib/wsdl/xmlSchema/data.rb
- * lib/wsdl/xmlSchema/parser.rb
- * lib/wsdl/xmlSchema/schema.rb
- * lib/xsd/datatypes.rb
- * lib/xsd/qname.rb
- * sample/soap/sampleStruct/server.rb
- * sample/wsdl/amazon/AmazonSearch.rb
- * sample/wsdl/amazon/AmazonSearchDriver.rb
- * test/soap/test_property.rb
- * test/soap/calc/test_calc_cgi.rb
- * test/wsdl/test_emptycomplextype.rb
-
- * summary
- * add SOAP Header mustUnderstand support.
-
- * add HTTP client SSL configuration and Cookies support (works
- completely with http-access2).
-
- * add header handler for handling sending/receiving SOAP Header.
-
- * map Ruby's anonymous Struct to common SOAP Struct in SOAP Object
- Model. it caused error.
-
- * add WSDL simpleType support to restrict lexical value space.
-
-Sat Jul 3 17:19:44 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/tk/lib/tkextlib/tkDND.rb: fix syntax error.
-
-Thu Jul 1 18:36:08 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tcltklib: bug fix
-
- * ext/tk/lib/tk: bug fix and add Tcl/Tk extension support libraries
-
-Thu Jul 1 18:31:31 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/pstore.rb (PStore#transaction): get rid of opening in write mode
- when read only transaction. [ruby-dev:23842]
-
-Thu Jul 1 00:44:42 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_cipher.c (ossl_cipher_encrypt, ossl_cipher_decrypt):
- re-implemnt (the arguments for this method is ).
-
- * ext/openssl/ossl_cipher.c (ossl_cipher_pkcs5_keyivgen): new method
- OpenSSL::Cipher::Cipher#pkcs5_keyivgen. it calls EVP_BytesToKey().
-
- * ext/openssl/ossl_cipher.c (ossl_cipher_set_key_length): new method
- OpenSSL::Cipher::Cipher#key_len=.
-
-Wed Jun 30 19:48:09 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: check for EVP_CIPHER_CTX_copy, ENGINE_add,
- EVP_CIPHER_CTX_set_padding, EVP_CipherFinal_ex, EVP_CipherInit_ex,
- EVP_DigestFinal_ex and EVP_DigestInit_ex.
-
- * ext/openssl/openssl_missing.c (EVP_CIPHER_CTX_copy): new function.
-
- * ext/openssl/openssl_missing.h (EVP_DigestInit_ex, EVP_DigestFinal_ex,
- EVP_CipherInit_ex, EVP_CipherFinal_ex, HMAC_Init_ex): new macro for
- OpenSSL 0.9.6.
-
- * ext/openssl/ossl_cipher.c (ossl_cipher_alloc, ossl_cipher_initialize,
- ossl_cipher_copy, ossl_cipher_reset, ossl_cipher_encrypt,
- ossl_cipher_decrypt, ossl_cipher_final, ossl_cipher_set_key,
- ossl_cipher_set_iv): replace all EVP_CipherInit and
- EVP_CipherFinal into EVP_CipherInit_ex and EVP_CipherFinal_ex.
- and EVP_CIPHER_CTX_init should only be called once.
-
- * ext/openssl/ossl_cipher.c (ossl_cipher_set_padding): check for
- EVP_CIPHER_CTX_set_padding.
-
- * ext/openssl/ossl_cipher.c (Init_ossl_cipher): Cipher#<< is deprecated.
-
- * ext/openssl/ossl_digest.c: replace all EVP_DigestInit and
- EVP_DigestFinal into EVP_DigestInit_ex and EVP_DigestFinal_ex.
- and EVP_MD_CTX_init should only be called once.
-
- * ext/openssl/ossl_digest.c (digest_final): should call
- EVP_MD_CTX_cleanup to avoid memory leak.
-
- * ext/openssl/ossl_hmac.c (ossl_hmac_initialize): repalce HMAC_init
- into HMAC_init_ex. and HMAC_CTX_init is moved to ossl_hmac_alloc.
-
- * ext/openssl/ossl_hmac.c (hmac_final): should call
- HMAC_CTX_cleanup to avoid memory leak.
-
- * test/openssl/test_cipher.rb, test/openssl/test_digest.rb,
- test/openssl/test_hmac.rb: new file.
-
-Wed Jun 30 16:59:39 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * test/ruby/test_file.rb (test_fnmatch): some tests for File.fnmatch
- are added.
-
-Wed Jun 30 11:38:51 2004 Mikael Brockman <phubuh@phubuh.org>
-
- * parse.y (primary): should not be NULL. [ruby-core:03098]
-
-Wed Jun 30 02:41:10 2004 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/rubyext.c (syck_emitter_new): set buffer after
- Data_Wrap_Struct to avoid possible GC. [ruby-talk:104835]
-
-Tue Jun 29 10:31:19 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval_cmd, rb_thread_trap_eval): restore safe level.
-
- * gc.c (define_final, run_final): preserve and restore safe level for
- finalizers. [ruby-core:03058]
-
- * signal.c (signal_exec, rb_trap_exit, trap): preserve and restore
- safe level for signal handlers. [ruby-dev:23829]
-
-Mon Jun 28 14:57:56 2004 Jeff Mitchell <quixoticsycophant@yahoo.com>
-
- * configure.in, lib/mkmf.rb (LIBPATHFLAG): use double quotes due to
- DOSISH compilers. [ruby-core:03107]
-
-Mon Jun 28 00:35:29 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * sample/drb/*.rb: using 'DRb.thread.join' instead of 'gets'
-
-Sun Jun 27 22:36:47 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * sample/rss/tdiary_plugin/rss-recent.rb: supported Hiki.
-
-Sat Jun 26 15:17:11 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_mod_class_variables): class variables are no longer
- inherited. [ruby-dev:23808]
-
-Sat Jun 26 11:07:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (aix): -b must come at the start of the command line,
- and -e must not appear while testing libraries. [ruby-talk:104501]
-
- * lib/mkmf.rb (find_header, dir_config): quote directory names if
- necessary. [ruby-talk:104505]
-
-Sat Jun 26 00:13:08 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_fopen, rb_fdopen, rb_io_reopen): setvbuf() may return
- positive value on failure. [ruby-dev:23792]
-
-Fri Jun 25 18:07:15 2004 Michal Rokos <michal@ruby-lang.org>
-
- * gc.c: bring back _stklen for DJGPP [ruby-core:3084]
-
-Fri Jun 25 15:33:01 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/extconf.rb: check stricter. [ruby-talk:104501]
-
-Fri Jun 25 01:58:01 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * {bcc32,win32,wince}/setup.mak: remove RUBY_EXTERN lines when
- including version.h. [ruby-talk:104456]
-
-Thu Jun 24 14:23:29 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_fread): return already read data when system call is
- interrupted. [ruby-talk:97206]
-
-Thu Jun 24 01:25:21 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * version.h: added declarations of ruby_version,
- ruby_release_date, ruby_platform.
-
-Thu Jun 24 01:07:15 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (sock_sockaddr): Socket#gethostbyname()
- should give us packed address, not struct sockaddr.
- [ruby-core:03053]
-
-Wed Jun 23 22:19:10 2004 Dave Thomas <dave@pragprog.com>
-
- * ext/socket/socket.c (sock_s_gethostbyaddr): Work around problem
- with OS X not returning 'from' parameter to recvfrom for
- connection-oriented sockets.
-
-Wed Jun 23 22:16:16 2004 Michal Rokos <michal@ruby-lang.org>
-
- * io.c: io_seek()'s retval should be checked [ruby-core:03045]
-
-Wed Jun 23 21:48:27 2004 Michal Rokos <michal@ruby-lang.org>
-
- * time.c: Fix indentation.
-
- * main.c: Remove _stklen, and _CRT_glob. Move _stacksize for
- __human68k__ to gc.c where the others are.
-
- * gc.c: put _stacksize in place and clean the #ifdefs macros.
-
-Wed Jun 23 17:37:54 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb: added new option --ssl.
-
-Wed Jun 23 01:45:27 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RubyLex::identify_quotation):
- Fix problem with the 'r' being dropped from %r{xxx}
-
-Wed Jun 23 00:10:17 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ext/win32ole/win32ole.c (ole_hresult2msg): remove trailing
- CRs and LFs. (doesn't depend on CR+LF) [ruby-dev:23749]
-
-Wed Jun 23 00:00:25 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (return_jump, break_jump): raise unexpected local jump
- exception directly. [ruby-dev:23740]
-
- * io.c (rb_io_initialize): should check fcntl result. [ruby-dev:23742]
-
-Tue Jun 22 23:35:43 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): support FZERO and FSPACE with NaN/Inf.
-
- * test/ruby/test_sprintf.rb (test_nan, test_inf): add tests.
-
-Tue Jun 22 21:11:36 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (OLE_FREE): should not call CoFreeUnuse-
- dLibraries().
-
- * ext/win32ole/win32ole.c (ole_event_free): ditto.
-
- * ext/win32ole/win32ole.c (ole_hresult2msg): truncate error message
- before CR.
-
-Tue Jun 22 19:24:59 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): unify output of NaN, Inf and -Inf with
- "%f" or etc on all platform. [ruby-dev:23704], [ruby-dev:23747]
-
-Tue Jun 22 15:28:12 2004 Michal Rokos <michal@ruby-lang.org>
-
- * compar.c: Remove explicit NIL_P() checks since rb_cmpint() does it
- again in the exactly same manner.
-
-Tue Jun 22 01:32:40 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_pkey_dh.c (ossl_dh_initialize): should create
- empty pkey object if no argument is passed. [ruby-talk:103328]
-
- * ext/openssl/ossl_pkey_dsa.c (ossl_dsa_initialize): ditto.
-
- * ext/openssl/ossl_pkey_rsa.c (ossl_rsa_initialize): ditto.
-
- * ext/openssl/ossl_pkey_dh.c: add new methods: OpenSSL::PKey::DH#p,
- OpenSSL::PKey::DH#p=, OpenSSL::PKey::DH#g, OpenSSL::PKey::DH#g=,
- OpenSSL::PKey::DH#pub_key, OpenSSL::PKey::DH#pub_key=,
- OpenSSL::PKey::DH#priv_key and OpenSSL::PKey::DH#priv_key=.
-
- * ext/openssl/ossl_pkey_dsa.c: add new methods: OpenSSL::PKey::DSA#p,
- OpenSSL::PKey::DSA#p=, OpenSSL::PKey::DSA#q, OpenSSL::PKey::DSA#q=,
- OpenSSL::PKey::DSA#g, OpenSSL::PKey::DSA#g=,
- OpenSSL::PKey::DSA#pub_key, OpenSSL::PKey::DSA#pub_key=,
- OpenSSL::PKey::DSA#priv_key and OpenSSL::PKey::DSA#priv_key=.
-
-Mon Jun 21 09:24:51 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (rb_w32_opendir): should set errno if error occurs
- when calling OS API.
-
-Sun Jun 20 21:12:54 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (binary=): send TYPE commands only once.
-
-Sat Jun 19 13:27:01 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (method_call): allow changing $SAFE. [ruby-dev:23713]
-
- * eval.c (proc_set_safe_level, proc_invoke, rb_mod_define_method): not
- set $SAFE for methods defined from Proc. [ruby-dev:23697]
-
-Sat Jun 19 01:10:12 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * sample/rss/tdiary_plugin/rss-recent.rb: added more information.
-
-Fri Jun 18 23:12:22 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (proc_save_safe_level, rb_set_safe_level, safe_setter): limit
- safe level.
-
-Wed Jun 16 23:05:57 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_mod_freeze): prepare string representation before
- freezing. [ruby-talk:103646]
-
-Wed Jun 16 19:57:24 2004 Michal Rokos <michal@ruby-lang.org>
-
- * test/ruby/test_array.rb: extend testcase to check #first, #last,
- #shift, #unshift, #pop, #push
-
-Wed Jun 16 16:05:17 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (ary_new): move alloc behind checks. [ruby-core:02982]
-
- * array.c (rb_ary_pop_m, rb_ary_shift_m): take arg to behave as push
- and unshift.
-
- * array.c (rb_ary_first, rb_ary_last): make shared array for result
- array, and correct doc for Array#first(n) and Array#last(n)
-
- * array.c (rb_ary_select): not accept any arg.
-
-Wed Jun 16 16:03:59 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (rb_class_inherited_p): singleton class inherits Class
- rather than its object's class. [ruby-dev:23690]
-
-Wed Jun 16 16:01:17 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (stack_grow_direction): memoize the direction.
-
- * gc.c (Init_stack): should always move to end of VALUE.
-
-Tue Jun 15 12:10:04 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: bug fix (TkWindow#grab)
-
-Mon Jun 14 18:23:27 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/remote-tk.rb: bug fix
-
-Sun Jun 13 00:23:04 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/extconf.rb: [EXPERIMENTAL] MacOS X (darwin) support
-
- * ext/tcltklib/tcltklib.c: fix thread trouble on callback proc, and
- eliminate warning about instance variable access
-
- * ext/tk/lib/tk/menubar.rb: improve supported menu_spec
-
- * ext/tk/lib/tk/menuspec.rb: [add] menu_spec support library
-
- * ext/tk/lib/tk/root.rb: add menu_spec support
-
- * ext/tk/lib/tk/text.rb: bug fix
-
- * ext/tk/lib/tk/toplevel.rb: add menu_spec support
-
- * ext/tk/sample/menubar?.rb: [add] sample of menu_spec usage
-
-Sat Jun 12 14:15:20 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c: RDOC for File::FNM_CASEFOLD was missed.
-
-Sat Jun 12 11:15:53 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (target_os): strip -gnu suffix on Linux.
-
-Fri Jun 11 22:08:50 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * array.c: remove #indexes, #indices.
-
- * hash.c: ditto.
-
- * ext/dbm/dbm.c: remove #indexes, #indices, "values_at" warning
- from #select.
-
- * ext/gdbm/gdbm.c: ditto.
-
- * ext/sdbm/init.c: ditto.
-
- * ext/dbm/dbm.c (Init_dbm): set VERSION constant as "unknown" when
- DB_VERSION_STRING is not available.
-
-Thu Jun 10 19:19:41 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/sdbm/init.c (fsdbm_store): sdbm should use StringValue().
- [ruby-talk:103062]
-
-Wed Jun 9 16:09:01 2004 akira yamada <akira@ruby-lang.org>
-
- * lib/uri/generic.rb (URI::Generic::merge,
- URI::Generic::route_from): accepts non-hierarchical URI.
- [ruby-dev:23631]
-
- * test/uri/test_generic.rb (TestGeneric::test_route,
- TestGeneric::test_merge): added tests for above changes.
-
-Wed Jun 9 15:39:55 2004 Akinori MUSHA <knu@iDaemons.org>
-
- * configure.in: Add support for DragonFly BSD.
-
-Wed Jun 9 15:07:06 2004 Akinori MUSHA <knu@iDaemons.org>
-
- * config.guess, config.sub: Update to a more recent version as of
- 2004-01-20.
-
-Wed Jun 9 11:20:05 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c: remove unused functions and variables.
-
-Wed Jun 2 20:16:03 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_new4): should share shared instance if it already
- exists. [ruby-dev:23665]
-
-Wed Jun 2 12:41:53 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_gets_m): set lastline ($_) even when read line is
- nil. [ruby-dev:23663]
-
-Fri May 28 11:20:31 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval): bad influence on frame node.
-
- * eval.c (eval): reverted wrongly removed condition. [ruby-dev:23638]
-
-Thu May 27 21:37:50 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Pathname#initialize): fix pathname initialization
- by pathname.
-
-Thu May 27 20:02:09 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * io.c (rb_io_fwrite): check all case errno != 0 [ruby-dev:23648]
-
-Thu May 27 15:54:02 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (MDTM_REGEXP): fix for demon's ftp server.
- Thanks, Rutger Nijlunsing.
-
-Thu May 27 14:53:13 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (rb_io_fwrite): workaround for bcc32's fwrite bug.
- add errno checking. [ruby-dev:23627]
-
- * io.c (rb_io_fwrite): should check if errno == ENOENT, too.
-
-Thu May 27 11:25:03 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/csv/test_csv.rb: illegal require module name (../lib/csv.rb).
-
-Wed May 26 23:12:13 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/csv.rb (CSV.read, CSV.readlines): added. works as IO.read and
- IO.readlines in CSV format.
-
- * lib/csv.rb (CSV.parse): [CAUTION] behavior changed. in the past,
- CSV.parse accepts a filename to be read-opened (it was just a
- shortcut of CSV.open(filename, 'r')). now CSV.parse accepts a
- string or a stream to be parsed e.g.
- CSV.parse("1,2\n3,r") #=> [['1', '2'], ['3', '4']]
-
- * test/csv/test_csv.rb: follow above changes.
-
-Wed May 26 14:19:42 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval, eval): make line number consistent on eval with
- Proc. [ruby-talk:101253]
-
-Wed May 26 13:59:17 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::skip_for_variable): Allow for
- 'do' after for statement
-
-Wed May 26 13:56:03 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/html_generator.rb (Generators::MarkUp::style_url): Fix
- relative path to code CSS file
-
-Wed May 26 13:14:52 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_init_copy): copy also positions. [ruby-talk:100910]
-
-Wed May 26 00:00:00 2004 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/syck.c (syck_new_parser): clear parser on init.
- thanks, ts. [ruby-core:02931]
-
- * ext/syck/token.c (sycklex_yaml_utf8): buffer underflow.
- thanks, ts. [ruby-core:02929]
-
- * lib/yaml/baseemitter.rb (indent_text): simpler flow block code.
-
-Tue May 25 11:54:13 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_yield_0, proc_invoke, proc_arity): allow passing a block
- to a Proc. [ruby-dev:23533]
-
- * parse.y (block_par, block_var): ditto.
-
-Tue May 25 01:50:17 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_asn1.c (ossl_i2d_ASN1_TYPE, ossl_ASN1_TYPE_free):
- workaround for the versions earlier than OpenSSL-0.9.7.
-
-Mon May 24 10:46:26 2004 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * lib/rdoc/generators/template/html/html.rb: SYSTEM identifiers
- must be absolute URIs
-
-Sun May 23 04:53:50 2004 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * lib/pstore.rb (transaction): allow overriding dump and load.
- [ruby-dev:23567]
-
- * lib/yaml/store.rb: follow lib/pstore.rb's change.
-
-Sat May 22 11:54:10 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * MANIFEST: add test/openssl/test_x509store.rb.
-
- * ext/tk/MANIFEST: add recent files.
-
-Sat May 22 05:37:11 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/remote-tk.rb: (NEW library) control Tk interpreters
- on the other processes by Tcl/Tk's 'send' command
-
-Fri May 21 09:22:05 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method_parameters):
- Add ()'s around parameters that don't have them
-
-Fri May 21 02:21:11 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/csv.rb: fixed a few bugs around multi char record/field separator.
-
- * test/csv/test_csv.rb: added boundary test for above feature.
-
-Thu May 20 17:02:03 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (check_sizeof): define result size. [ruby-core:02911]
-
- * lib/mkmf.rb (create_header): macro name should not include equal
- sign.
-
-Thu May 20 14:35:52 2004 Tanaka Akira <akr@m17n.org>
-
- * ext/socket/socket.c: check SCM_RIGHTS macro addition to
- the msg_control field to test existence of file descriptor passing
- by msg_control.
-
-Thu May 20 12:38:06 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flo_eq): always check if operands are NaN.
- [ruby-list:39685]
-
-Thu May 20 12:34:39 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_visibility):
- At Ryan Davis' suggestion, honor visibility modifers if guarded by a
- statement modifier
-
-Thu May 20 12:22:13 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (have_type): do not check pointer to incomplete type,
- which always get compiled.
- [ruby-list:39683]
-
-Wed May 19 23:45:43 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/inlinetest.rb (InlineTest::loadtest): requiring library with
- replaced $0 can make $0 == __FILE__ block be evaluated twice.
-
- * test/ruby/envutil.rb (EnvUtil::rubybin): give priority to
- environment variable. [ruby-dev:23538]
-
-Wed May 19 11:08:10 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: change permition of TkObject#tk_send from
- private to public
-
-Wed May 19 02:29:36 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: support TRACE.
-
-Wed May 19 02:21:53 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: do not use class variables.
-
-Tue May 18 21:21:43 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/csv.rb: writes lines with "\n" when row separator is not given.
- formerly it was "\r\n".
-
- * lib/csv.rb: [CAUTION] API change
-
- * CSV::Row removed. a row is represented as just an Array. since
- CSV::Row was a subclass of Array, it won't hurt almost all programs
- except one which depended CSV::Row#match.
-
- * CSV::Cell removed. a cell is represented as just a String or
- nil(NULL). this change will cause widespread destruction.
-
- CSV.open("foo.csv", "r") do |row|
- row.each do |cell|
- if cell.is_null # Cell#is_null
- p "(NULL)"
- else
- p cell.data # Cell#data
- end
- end
- end
-
- must be just;
-
- CSV.open("foo.csv", "r") do |row|
- row.each do |cell|
- if cell.nil?
- p "(NULL)"
- else
- p cell
- end
- end
- end
-
- * lib/csv.rb: [CAUTION] record separator(CR, LF, CR+LF) behavior
- change. CSV.open, CSV.parse, and CSV,generate now do not force
- opened file binmode. formerly it set binmode explicitly.
-
- with CSV.open, binmode of opened file depends the given mode
- parameter "r", "w", "rb", and "wb". CSV.parse and CSV.generate open
- file with "r" and "w".
-
- setting mode properly is user's responsibility now.
-
- * lib/csv.rb: accepts String as a fs (field separator/column separator)
- and rs (record separator/row separator)
-
- * lib/csv.rb: added CSV.foreach(path, rs = nil, &block). CSV.foreach
- now does not handle "| cmd" as a path different from IO.foreach.
- needed?
-
- * test/csv/test_csv.rb: updated.
-
-Tue May 18 14:24:20 2004 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml.rb: added rdoc to beginning of lib.
-
-Tue May 18 14:00:46 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * node.h (NEW_DSTR): adjust list length.
-
- * parse.y (literal_concat): ditto.
-
-Tue May 18 09:30:25 2004 SASADA Koichi <ko1@atdot.net>
-
- * eval.c (rb_method_node): search cache entry first.
-
-Mon May 17 16:04:06 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * numeric.c (flo_to_s): it's preferable that "p 0.0" outputs "0.0"
- instead of "0.0e+00". [ruby-dev:23480]
-
- * numeric.c (flo_to_s): it's preferable that "p 0.00000000000000000001"
- outputs "1.0e-20" instead of "9.999999999999999e-21". (the precision
- is considered, but there is assumption DBL_DIG == 15 in current
- implementation)
-
-Mon May 17 10:13:33 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (setup_domain_and_type): honor duck typing.
- [ruby-dev:23522]
-
- * ext/socket/socket.c (sock_s_getnameinfo): ditto.
-
-Mon May 17 00:36:21 2004 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml/baseemitter.rb (indent_text): was forcing a mod value
- of zero at times, which kept some blocks from getting indentation.
-
-Mon May 17 00:07:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/drb/drb.rb: Cosmetic documentation changes.
-
-Sun May 16 20:55:49 2004 Tanaka Akira <akr@m17n.org>
-
- * ext/dbm/dbm.c (fdbm_initialize): accept optional 3rd argument to
- specify an open flag.
- (Init_dbm): define open flags: DBM::READER, DBM::WRITER, DBM::WRCREAT
- and DBM::NEWDB.
-
-Sat May 15 17:52:24 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * test/ruby/test_float.rb(test_strtod): Add test for signed 0.000...1
-
-Sat May 15 14:20:13 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/syck/depend: add ruby's headers.
-
-Sat May 15 13:38:33 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/MANIFEST, ext/syck/depend: new file.
-
- * lib/yaml/rubytypes.rb: range of exponential floats. [ruby-core:02824]
-
- * test/yaml/test_yaml.rb: tests for strings start with colon and some
- round trip.
-
-Sat May 15 12:04:58 2004 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml.rb: removed fallback to pure Ruby parser.
-
- * lib/yaml/baseemitter.rb (node_text): rewriting folded scalars.
-
- * ext/syck/syck.h: reports style of scalars now, be they plain, block
- single-, or double-quoted.
-
- * ext/syck/syck.c: ditto.
-
- * ext/syck/gram.c: ditto.
-
- * ext/syck/node.c: ditto.
-
- * ext/syck/token.c: ditto.
-
- * ext/syck/rubyext.c (yaml_org_handler): symbols loaded only
- if scalar style is plain.
-
- * test/yaml/test_yaml.rb (test_perl_regexp): updated test to
- match new regexp serialization.
-
-Sat May 15 01:41:34 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (eval): forgot to restore $SAFE value before evaluating
- compiled node. [ruby-core:02872]
-
-Sat May 15 01:33:12 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * range.c (range_each_func): terminates loop if generating value
- is same to @end. [ruby-talk:100269]
-
-Fri May 14 22:08:38 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_new4): should not reuse frozen shared string if
- the original is not an instance of String. [ruby-talk:100193]
-
-Fri May 14 21:29:26 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_mdump): preserve GMT bit in the marshal data.
- [ruby-talk:100213]
-
-Fri May 14 18:37:49 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/canvas.rb: improve coords support for canvas
- items. Now, supports all of the followings.
- TkcLine.new(c, 0, 0, 100, 100, :fill=>'red')
- TkcLine.new(c, [0, 0, 100, 100], :fill=>'red')
- TkcLine.new(c, [0, 0], [100, 100], :fill=>'red')
- TkcLine.new(c, [[0, 0], [100, 100]], :fill=>'red')
- TkcLine.new(c, :coords=>[0, 0, 100, 100], :fill=>'red')
- TkcLine.new(c, :coords=>[[0, 0], [100, 100]], :fill=>'red')
-
-Fri May 14 13:30:39 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * test/ruby/test_float.rb: Add test for util.c revision 1.42.
-
-Fri May 14 12:13:46 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * util.c (ruby_strtod): strtod("0", &end); => end should point '\0'.
- [ruby-dev:23498]
-
-Thu May 13 15:47:30 2004 akira yamada <akira@ruby-lang.org>
-
- * lib/net/telnet.rb (Net::Telnet::login): "options" can specify
- regexps for login prompt and/or password prompt.
-
-Thu May 13 14:17:57 2004 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/rubyext.c (yaml_org_handler): some empty strings were
- loaded as symbols.
-
-Thu May 13 11:04:08 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * pack.c (pack_pack): always add with null for 'Z'.
-
- * pack.c (pack_unpack): terminated by null for 'Z'. [ruby-talk:98281]
-
-Wed May 12 19:59:43 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (have_type, check_sizeof): replace unusable characters.
- [ruby-talk:99788]
-
-Wed May 12 17:41:42 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/resolv.rb (Resolv::DNS::Config): make it configurable without
- external file such as /etc/resolv.conf.
-
-Wed May 12 14:37:27 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_x509name.c: attribute value of DC (short name of
- domainComponent) should be IA5String.
-
-Wed May 12 13:20:19 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk/composite.rb: improve configure methods (based on
- the proposal of [ruby-talk:99671]).
-
-Wed May 12 11:51:08 2004 Dave Thomas <dave@pragprog.com>
-
- * class.c (rb_obj_singleton_methods): fix rdoc
-
-Tue May 11 07:09:42 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (is_defined): do not protect exception during receiver
- evaluation.
-
-Mon May 10 22:28:14 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb (each_crlf_line): remove junk line.
-
-Mon May 10 21:44:42 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/html_generator.rb: Change scheme for
- looking up symbols in HTML generator.
-
-Mon May 10 16:45:21 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (eval): warning during eval should not cause deadlock.
- [ruby-talk:98651]
-
- * eval.c (rb_eval): raise TypeError exception for superclass
- mismatch. [ruby-list:39567]
-
-Mon May 10 12:11:37 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/html_generator.rb: Hack to search parents
- for unqualified constant names.
-
-Mon May 10 01:18:15 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb (logging): append "\n".
-
-Sun May 9 23:38:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/net/ftp.rb: ported documentation improvement from 1.8 branch
-
- * lib/net/imap.rb: ditto
-
- * lib/net/pop.rb: ditto
-
- * lib/net/smtp.rb: ditto
-
- * lib/net/telnet.rb: ditto
-
-Sun May 9 23:34:51 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_float.rb: added test_strtod to test Float("0").
-
-Sun May 9 13:24:24 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/yaml/store.rb: use FileUtils::copy.
-
-Sun May 9 12:34:26 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * regex.c: removed unused file.
-
-Sat May 8 10:53:30 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_open): open should not ignore block when "to_open"
- method is used. [ruby-dev:23478]
-
-Fri May 7 22:07:39 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (mv): new option `force'. [ruby-talk:99457]
-
- * lib/fileutils.rb: new method for command option reflection:
- FileUtils.commands, .options, .have_option?, .options_of,
- .collect_methods.
-
- * lib/fileutils.rb: module Verbose, NoWrite, DryRun do not have
- option flags @fileutils_verbose and @fileutils_noop, they make no
- sense.
-
-Fri May 7 21:50:21 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::parse_include): Allow
- multiple arguments to 'include'
-
-Fri May 7 21:03:51 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (fu_list): Array() breaks pathes including "\n".
- [ruby-core:02843]
-
- * test/fileutils/test_fileutils.rb (mkdir): test "\n" in path.
-
-Fri May 7 20:53:25 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/dbm/dbm.c (fdbm_modify): typo fixed. [ruby-dev:23473]
-
-Fri May 7 11:17:27 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * util.c (ruby_strtod): "0.0000000000000000001" should be converted
- to 1.0e-19 instead of 0.0. (leading zeros aren't significant digits)
- [ruby-talk:99318] [ruby-dev:23465]
-
-Thu May 6 22:27:32 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * ext/socket/socket.c (ippaddr): use NUMERICHOST if can not resolve
- hostname.
-
-Thu May 6 22:09:29 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/tkutil.c (get_eval_string_core): bug fix. [ruby-dev:23466]
-
-Thu May 6 14:22:29 2004 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml/rubytypes.rb (to_yaml): added instance variable handling
- for Ranges, Strings, Structs, Regexps.
-
- * lib/yaml/rubytypes.rb (to_yaml_fold): new method for setting a
- String's flow style.
-
- * lib/yaml.rb (YAML::object_maker): now uses Object.allocate.
-
- * ext/syck/gram.c: fixed transfer methods on structs, broke it
- last commit.
-
-Thu May 6 14:38:02 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (rb_push_glob): simplified code (not change behavior)
-
-Thu May 6 13:32:44 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: get rid of side effect of Config.expand, patched by
- <tttt01@infoseek.jp> (ruby-bugs:PR#597)
-
-Thu May 6 11:40:28 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (string): accept NIL.
-
- * lib/net/imap.rb (body_type_basic): allow body-fields omissions.
-
-Thu May 6 01:59:04 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/html_generator.rb (Generators::HtmlMethod::params):
- Don't include the &block parameter if we have explicit
- yield parameters.
-
-Wed May 5 03:52:31 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/rinda/ring.rb: use recv instead of recvfrom.
-
-Wed May 5 00:38:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/gserver.rb: documented
- * lib/xmlrpc/README.txt: introduced for documentation purposes
-
-Mon May 3 09:47:24 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method_or_yield_parameters):
- Fix parsing bug if yield called within 1 line block
-
-Sun May 2 21:56:48 2004 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb (rm_f, rm_r): test :force flag.
-
-Sun May 2 01:04:38 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib, ext/tk: renewal Ruby/Tk
-
-Fri Apr 30 20:08:41 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * time.c (SIZEOF_TIME_T): support SIZEOF_TIME_T == SIZEOF_INT.
-
-Wed Apr 28 01:26:11 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * oniguruma.h, regparse.c: imported Oni Guruma 2.2.8.
-
-Wed Apr 28 01:16:23 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * oniguruma.h, regparse.c: imported Oni Guruma 2.2.7.
-
-Tue Apr 27 14:43:32 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk: LIBURUBY_A is needed for extconf.rb even when
- cross-compiling.
-
-Tue Apr 27 13:33:50 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (string_content): turn off NODE_NEWLINE flag to avoid
- unnecessary line trace for inlined expression.
- (ruby-bugs PR#1320)
-
-Tue Apr 27 08:15:13 2004 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml/rubytypes.rb: passing Range tests.
-
- * ext/syck/syck.h: version 0.44.
-
- * ext/syck/gram.c: transfers no longer open an indentation.
- fixed transfers which precede blocks.
-
- * ext/syck/token.c: ditto.
-
- * ext/syck/syck.c: fixed segfault if an anchor has been released already.
-
- * ext/syck/node.c (syck_free_members): organized order of free'd nodes.
-
- * ext/syck/rubyext.c (syck_emitter_write_m): test for proper string with
- StringValue.
-
-Mon Apr 26 23:56:54 2004 Daniel Kelley <news-1082945587@dkelley.gmp.san-jose.ca.us>
-
- * README.EXT, README.EXT.ja: fixed wrong function signature.
- [ruby-talk:98349]
-
-Mon Apr 26 21:40:09 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/code_objects.rb (RDoc::Context::add_alias): Only alias
- to instance methods.
-
-Sun Apr 25 18:26:23 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (ac_cv_func_fork): set to no on DJGPP.
-
-Sat Apr 24 14:32:03 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * re.c: applied stack error handling patch. [ruby-dev:23431]
-
-Sat Apr 24 10:38:31 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/markup/simple_markup.rb (SM::SimpleMarkup::group_lines):
- Fix bug where consecutive headings are merged.
-
-Fri Apr 23 23:24:47 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb: $hdrdir should not contain macros, for backward
- compatibility. [bruby-dev:28]
-
- * lib/mkmf.rb (create_makefile): in the case of extout, just copy
- script files, without comparison.
-
-Fri Apr 23 16:38:46 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb: sync taint/freeze flag between
- a pathname object and its internal string object.
-
-Fri Apr 23 14:52:14 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stmt, arg, aref_args): should not make sole splat into
- array, in aref_args other than aref with op_asgn.
-
-Fri Apr 23 14:14:38 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/resolv.rb: don't use Regexp#source to embed regexps.
- [ruby-dev:23432]
-
-Thu Apr 22 18:25:10 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk, ext/extmk.rb: make ext and .ext get removed by distclean.
-
-Thu Apr 22 10:07:01 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * */Makefile.sub (distclean-local): should remove $(RBCONFIG).
-
-Thu Apr 22 04:17:57 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_mod_define_method): allow binding methods to modules.
- [ruby-dev:23410]
-
- * parse.y (aref_args): should pass expanded list. [ruby-core:02793]
-
-Thu Apr 22 01:12:57 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (flo_to_s): tweak output string based to preserve
- decimal point and to remove trailing zeros. [ruby-talk:97891]
-
- * string.c (rb_str_index_m): use unsigned comparison for T_FIXNUM
- search. [ruby-talk:97342]
-
-Wed Apr 21 23:04:42 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/rinda/rinda.rb, test/rinda/test_rinda.rb: check Hash tuple size.
-
-Wed Apr 21 20:05:00 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (URI::HTTP#proxy_open): set Host: field explicitly.
- [ruby-list:39542]
-
-Wed Apr 21 18:39:46 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: merge SMTP-TLS patch. This patch is
- contributed by Daniel Hob. [ruby-core:02789]
-
-Wed Apr 21 18:23:45 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb: change coding style: def m( a ) -> def m(a).
-
-Wed Apr 21 18:01:47 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb: do not use class variables.
-
- * lib/net/pop.rb (do_start): ensure to clean up connection when
- authentication failed.
-
-Wed Apr 21 17:23:59 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (HTTP#connect): CONNECT must precede SSL connect.
- [ruby-dev:23379]
-
- * lib/net/http.rb (HTTP.new): class variables are not inherited
- now.
-
-Wed Apr 21 15:56:43 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/ui/console/testrunner.rb (test_started): restore $0
- after changing process title. [ruby-talk:97426]
-
-Wed Apr 21 10:18:06 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * process.c(rb_spawn): fix SEGV at "p system('command line here')"
- (may happen only in bccwin32) [ruby-dev:23380]
-
-Mon Apr 19 20:58:44 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c: Updated RDocs.
-
-Mon Apr 19 18:11:15 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_equal): returns true if two hashes have same set
- of key-value set. [ruby-talk:97559]
-
- * hash.c (rb_hash_eql): returns true if two hashes are equal and
- have same default values.
-
-Mon Apr 19 08:19:11 2004 Doug Kearns <djkea2@mugca.its.monash.edu.au>
-
- * dln.c, io.c, pack.c, lib/benchmark.rb, lib/cgi.rb, lib/csv.rb,
- lib/date.rb, lib/ftools.rb, lib/getoptlong.rb, lib/logger.rb,
- lib/matrix.rb, lib/monitor.rb, lib/set.rb, lib/thwait.rb,
- lib/timeout.rb, lib/yaml.rb, lib/drb/drb.rb, lib/irb/workspace.rb,
- lib/net/ftp.rb, lib/net/http.rb, lib/net/imap.rb, lib/net/pop.rb,
- lib/net/telnet.rb, lib/racc/parser.rb, lib/rinda/rinda.rb,
- lib/rinda/tuplespace.rb, lib/shell/command-processor.rb,
- lib/soap/rpc/soaplet.rb, lib/test/unit/testcase.rb,
- lib/test/unit/testsuite.rb: typo fix.
-
-Mon Apr 19 08:14:18 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_body): Allow for
- #ifdef HAVE_PROTOTYPES
-
-Fri Apr 16 17:04:07 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_equal): always returns true or false, never
- returns nil. [ruby-dev:23404]
-
-Fri Apr 16 12:38:48 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/drb/drb.rb (DRb::DRbUnknown::initialize): Exception#to_str is
- deprecated.
-
- * lib/drb/drb.rb (DRb::DRbServer::InvokeMethod::perform): multiple
- value class changed.
-
- * lib/drb/invokemethod.rb (DRb::DRbServer::InvokeMethod18Mixin::block_yield):
- ditto.
-
-Fri Apr 16 08:27:08 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: skip linking when libraries to be preloaded not
- compiled. [ruby-list:39561]
-
-Thu Apr 15 19:57:11 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (pst_success_p): new method Process::Status#success?.
- [ruby-dev:23385]
-
- * rubytest.rb: do nothing while cross-compiling, return status in
- system independent style.
-
-Thu Apr 15 19:26:54 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (rb_push_glob): Dir.glob() should return nil if block is given.
- (http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Dir)
-
- * dir.c (push_braces): Dir.glob() should handle '{ }' nested more than
- 3 times.
-
- * dir.c (push_braces, rb_push_glob): Dir.glob() should handle escaped
- '{' and '}' and ','.
-
- [ruby-dev:23376]
-
-Thu Apr 15 17:12:13 2004 Tanaka Akira <akr@m17n.org>
-
- * ext/gdbm/gdbm.c (Init_gdbm): define GDBM::READER, GDBM::WRITER,
- GDBM::WRCREAT and GDBM::NEWDB.
- (fgdbm_initialize): use specified read/write flag.
-
-Wed Apr 14 13:06:09 2004 Doug Kearns <djkea2@mugca.its.monash.edu.au>
-
- * array.c, enum.c, eval.c, file.c, io.c, numeric.c, object.c, prec.c,
- process.c, re.c, string.c: typos in RDoc comments. [ruby-core:02783]
-
-Wed Apr 14 11:29:56 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * numeric.c (flo_eq): workaround for bcc32's bug.
- (ruby-bugs-ja:PR#594)
-
-Wed Apr 14 11:06:38 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::scan): Changed
- behavior of :enddoc: -- it now unconditionally terminates
- processing of the current file.
-
-Wed Apr 14 10:57:40 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * defines.h: include <net/socket.h> to get fd_set definition in BeOS.
-
-Tue Apr 13 23:00:55 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/rinda/rinda.rb: change pattern matching.
- a === b -> a == b || a === b. [druby-ja:98]
-
- * test/rinda/test_rinda.rb: ditto.
-
-Tue Apr 13 21:50:57 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bcc32/Makefile.sub (PHONY): Borland make disallows empty command
- rules.
-
-Tue Apr 13 17:55:16 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (begin_transport): should not overwrite HTTP
- request header. [ruby-list:39543]
-
-Tue Apr 13 16:48:00 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb: merge POP3S patch. This patch is contributed by
- Daniel Hobe.
-
-Tue Apr 13 02:56:29 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * common.mk: changed the order of ascii.c alphabetically.
-
-Mon Apr 12 19:11:21 2004 Eric Hodel <drbrain@segment7.net>
-
- * gc.c (rb_gc_copy_finalizer): typo. [ruby-core:02774]
-
-Mon Apr 12 18:45:58 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_x509name.c (ossl_x509name_init_i): should return
- a value.
-
-Mon Apr 12 10:39:50 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (rb_glob2, rb_glob, push_globs, push_braces, rb_push_glob):
- fix memory leak. (leaked when block was interrupted)
-
-Sun Apr 11 19:10:13 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby.c (require_libraries): restore source file/line after
- statically linked extensions initialized. [ruby-dev:23357]
-
-Sun Apr 11 10:47:04 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/code_objects.rb (RDoc::TopLevel::add_class_or_module): Toplevel
- classes and modules are a special case too... (handle extending existing
- classes with or without :enddoc:)
-
-Sat Apr 10 23:51:13 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/code_objects.rb (RDoc::Context::add_to): Implementation of :enddoc:
- made one too many assumptions...
-
-Sat Apr 10 00:00:19 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/markup/simple_markup/inline.rb: Fix problem
- with \_cat_<b>dog</b>
-
-Fri Apr 9 17:05:21 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (has_magic, find_dirsep): incomplete '[' matches no character
- in Dir.glob. (follows File.fnmatch's behavior)
-
- * dir.c (fnmatch_helper): incomplete escape is ignored in File.fnmatch.
- (follows Dir.glob's behavior)
-
- * dir.c (find_dirsep): '/' between '[' and ']' is ignored in Dir.glob.
- (follows File.fnmatch with File::FNM_PATHNAME 's behavior)
-
- * dir.c (find_dirsep): escaped slash '\/' loses its meaning as
- directory separator in Dir.glob.
-
- [ruby-dev:23291]
-
-Thu Apr 8 20:25:19 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): skip uncompiled extensions.
-
- * lib/mkmf.rb (create_makefile): emit no rules for static library if
- $static is nil, e.g., outside of ext/.
-
- * lib/test/unit/ui/console/testrunner.rb (test_started): show test
- name via $0.
-
- * runruby.rb: set environments to use the compiled binary.
-
- * test/runner.rb: do nothing while cross-compiling.
-
- * test/drb/drbtest.rb, test/soap/calc/test_calc_cgi.rb: use envutil to
- know ruby binary, and restore $: after require.
-
- * test/ruby/envutil.rb: give priority to RUBY environment variable to
- use just compiled binary and libraries.
-
-Thu Apr 8 19:03:33 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_binmode): inverted condition. [ruby-dev:23349]
-
-Thu Apr 8 18:22:00 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_s_list): return encoding list if no block
- is given. [ruby-dev:23063]
-
-Wed Apr 7 15:29:24 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): use NUM2INT() instead of num2i32().
-
-Wed Apr 7 12:32:02 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/parser.rb, lib/rss/1.0.rb: accepted rdf:resource or
- resource attribute in rdf:li.
- * test/rss/test_parser.rb: added test for above change.
-
- * lib/rss/dublincore.rb: reverted style.
-
- * lib/rss/xmlparser.rb: normalized XMLParser class hierarchy.
-
-Wed Apr 7 10:43:17 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, common.mk, */Makefile.sub (ext/extinit.o): OUTFLAG
- doesn't work for object files on VC.
-
- * */Makefile.sub (config.h): need SIZEOF_TIME_T now.
-
-Wed Apr 7 00:24:34 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/rinda/rinda.rb: fix hash tuple bug.
-
- * lib/rinda/tuplespace.rb: ditto.
-
- * test/rinda/test_rinda.rb
-
-Tue Apr 6 18:24:18 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_get_path): get path string via "to_path" method if
- path object is not a string. [Ruby2]
-
- * gc.c (rb_gc_call_finalizer_at_exit): do not free threads in the
- exit finalizers.
-
- * io.c (rb_io_reopen): should use rb_io_check_io().
-
-Tue Apr 6 16:46:09 2004 Tanaka Akira <akr@m17n.org>
-
- * configure.in: check the size of time_t.
-
- * time.c (time_add): new function.
- (time_plus): use time_add.
- (time_minus): use time_add.
-
-Tue Apr 6 13:11:48 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/socket.c (raise_socket_error): never return.
-
- * ext/socket/socket.c (make_hostent): must return value.
-
-Tue Apr 6 00:14:43 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (Init_Exception): remove Exception#to_str. [Ruby2]
-
- * eval.c (error_print): should no call "to_str" anymore use
- "message" method instead.
-
- * io.c (rb_f_open): Kernel#open() calls "to_open" if the first
- argument responds to it. [Ruby2]
-
-Tue Apr 6 00:13:43 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/rinda/rinda.rb: add require 'drb/drb'
-
-Mon Apr 5 22:25:32 2004 Tanaka Akira <akr@m17n.org>
-
- * test/zlib/test_zlib.rb: new file.
- (TestZlibGzipWriter#test_new_nil): test for [ruby-dev:23228].
-
-Mon Apr 5 22:16:23 2004 Minero Aoki <aamine@loveruby.net>
-
- * parse.y (assoc_list): {a: 1, b: 2} should be allowed.
- [ruby-dev:23328]
-
-Mon Apr 5 19:43:40 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * regexec.c: imported Oni Guruma 2.2.6.
-
-Mon Apr 5 19:39:10 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * regparse.c, oniguruma.h: imported Oni Guruma 2.2.6.
-
-Mon Apr 5 12:12:09 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/socket.c (raise_socket_error): some platforms don't have
- EAI_SYSTEM.
-
-Mon Apr 5 08:18:23 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/rdoc.rb: Remove leading ./ from file names so that cross
- references work properly.
-
-Sun Apr 4 14:01:20 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/options.rb (Options::parse): Allow multiple -x options to
- RDoc. Fix bug where files weren't being excluded properly
-
-Sat Apr 3 09:36:38 2004 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/syck.h: version 0.43.
-
-Sat Apr 3 08:28:47 2004 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/lib/gram.c: allow root-level inline collections.
- [ruby-talk:94922]
-
- * lib/yaml/rubytypes.rb (Symbol#to_yaml): emit symbols as implicits.
- [ruby-talk:94930]
-
-Fri Apr 2 19:28:48 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bcc32/Makefile.sub (OUTFLAG): needed for static-linked-ext.
-
-Fri Apr 2 18:00:05 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): extract necessary variables for static link
- from Makefile.
-
- * lib/mkmf.rb (create_makefile): save preload and libpath for next
- compile.
-
-Fri Apr 2 17:27:17 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (top_include): include in the wrapped load is done for
- the wrapper, not for a singleton class for wrapped main.
- [ruby-dev:23305]
-
-Fri Apr 2 15:13:44 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_eq): use temporary double variable to save the
- result (internal float register may be bigger than 64 bits, for
- example, 80 bits on x86). [ruby-dev:23311]
-
-Fri Apr 2 14:35:26 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (block_pass): should generate unique identifier of the
- pushing block. [ruby-talk:96363]
-
-Fri Apr 2 11:36:20 2004 Minero Aoki <aamine@loveruby.net>
-
- * eval.c (Init_load): make $LOADED_FEATURES built-in.
- [ruby-dev:23299]
-
- * ruby.c (ruby_prog_init): make $PROGRAM_NAME built-in.
-
- * lib/English.rb: remove $LOADED_FEATURES and $PROGRAM_NAME.
-
-Fri Apr 2 07:31:38 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c: mistakingly removed do_not_reverse_lookup.
- [ruby-list:39475]
-
- * ext/socket/socket.c (make_hostent): fix memory leak, based on
- the patch from HORIKAWA Hisashi <vzw00011@nifty.ne.jp>.
-
-Thu Apr 1 22:55:33 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb: Allow rdoc comments in
- =begin rdoc/=end
-
- * lib/rdoc/parsers/parse_rb.rb: Fix problem with comment in
- top-level method being taken as file comment.
-
-Thu Apr 1 22:55:04 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/ri/ri_options.rb: Fix undefined variable warning.
-
-Thu Apr 1 19:58:37 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/mapping/{factory.rb,registry.rb}: fixed illegal mapped URI
- object with soap/marshal.
- added URIFactory class for URI mapping. BasetypeFactory checks
- instance_variables when original mapping is not allowed (ivar must
- be empty). Instance of URI have instance_variables but it must be
- llowed whenever original mapping is allowed or not.
-
-Wed Mar 31 19:06:23 2004 Tanaka Akira <akr@m17n.org>
-
- * time.c (year_leap_p): new function.
- (timegm_noleapsecond): ditto.
- (search_time_t): use timegm_noleapsecond instead of
- mktime for first guess.
-
-Wed Mar 31 12:05:17 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/delegate.rb (DelegateClass): define internal methods of the
- result class, but not metaclass of the caller. [ruby-talk:96156]
-
- * intern.h: provide proper prototypes. [ruby-core:02724]
-
- * ruby.h: missing.h is now prerequisite to intern.h.
-
-Wed Mar 31 11:17:16 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): raises RangeError if uv is out of UTF8 value
- range. [ruby-dev:23281]
-
- * io.c (rb_io_binmode): stdio buffer should be empty when calling
- IO#binmode. [ruby-talk:96155]
-
-Tue Mar 30 20:25:34 2004 Tanaka Akira <akr@m17n.org>
-
- * time.c (search_time_t): limit guess range by mktime if it is
- available. [ruby-dev:23274]
-
-Tue Mar 30 18:19:00 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval): fix SEGV at retry in iterator's receiver.
- [ruby-dev:23227]
-
-Mon Mar 29 20:17:16 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_exec): follow older behavior if close-on-exec is not
- available.
-
- * process.c (rb_fork): protect from exceptions while waiting failed
- process, if status is given.
-
-Sun Mar 28 16:25:37 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cygwin/GNUmakefile.in (clean-local, distclean-local): remove
- work files.
-
- * win32/Makefile.sub (clean-local): ditto.
-
-Sun Mar 28 14:23:02 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb: def m( arg ) -> def m(arg).
-
-Sun Mar 28 14:09:13 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/pop.rb (auth): failed when account/password include "%".
- [ruby-talk:95933]
-
-Sat Mar 27 21:40:41 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb: permit extra semicolon in content-type field.
-
-Sat Mar 27 10:40:48 2004 Tanaka Akira <akr@m17n.org>
-
- * (lib/pp.rb, lib/prettyprint.rb): define seplist in PP::PPMethods
- instead of PrettyPrint.
-
-Sat Mar 27 01:47:09 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/logger.rb: trim tail space of each line. no user visible change.
-
- * lib/rss/dublincore.rb: fixed class definition mismatch.
-
- * sample/openssl/gen_csr.rb: fixed wrong usage text.
-
-Thu Mar 25 23:15:24 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/ri/ri_options.rb (RI::Options::show_version):
- Add --version option
-
-Thu Mar 25 21:45:00 2004 Shigeo Kobayashi <shigek@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c: Bug in + and - reported by Bret Jolly
- fixed.
-
-Thu Mar 25 21:01:32 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * version.c (ruby_show_copyright): obtain copyright year from
- RUBY_RELEASE_YEAR.
-
- * win32/resource.rb: ditto.
-
-Thu Mar 25 19:37:35 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/resource.rb: default rubyw icon to ruby.ico, and let DLL also
- include them.
-
- * win32/resource.rb: include winver.h for older WindowsCE.
-
-Thu Mar 25 14:01:03 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * common.mk, */Makefile.sub (lib, dll): phony targets.
-
- * configure.in (ruby, miniruby): ditto.
-
- * cygwin/GNUmakefile.in (rubyw): ditto.
-
-Thu Mar 25 04:16:18 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/ri/ri_options.rb (RI::Options): Add the --list-names option,
- which dumps our all known names
-
-Thu Mar 25 03:57:47 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/ri/ri_util.rb (NameDescriptor::initialize): No longer
- allow nested classes to be designated using "."--you must
- now use "::"
-
-Thu Mar 25 02:00:18 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/template/html/one_page_html.rb (Page):
- Fix to work with C modules.
-
-Wed Mar 24 20:49:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/uri.rb: Documented (thanks Dmitry V. Sabanin).
- * lib/uri/common.rb: Ditto.
- * lib/uri/ftp.rb: Ditto.
- * lib/uri/generic.rb: Ditto.
- * lib/uri/http.rb: Ditto.
- * lib/uri/https.rb: Ditto.
- * lib/uri/ldap.rb: Ditto.
- * lib/uri/mailto.rb: Ditto.
-
-Wed Mar 24 18:48:05 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb ($ruby, $topdir, $hdrdir): should not be affected by
- DESTDIR after installed.
-
- * lib/mkmf.rb (dummy_makefile): default file lists to be cleaned.
-
-Wed Mar 24 12:32:56 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::handle_class_module):
- Don't document methods if we don't know for sure the
- class or module.
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_class):
- Don't store documentation for singleton classes if we
- don't know the real class.
-
-Wed Mar 24 11:11:26 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/html_generator.rb (Generators::HTMLGenerator::load_html_template):
- Allow non-RDoc templates by putting a slash in the template name
-
-Wed Mar 24 10:05:22 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/tempfile.rb (Tempfile::_close): should not clear @tmpname
- until the file is really removed. [ruby-core:02684]
-
-Wed Mar 24 04:12:44 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * object.c (rb_mod_cvar_get): new method Module#class_variable_get.
-
- * object.c (rb_mod_cvar_set): ditto (Module#class_variable_set).
-
-Tue Mar 23 17:45:22 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_atfork): 1.9 warns no more for thread
- termination. [ruby-dev:23212]
-
-Tue Mar 23 14:46:10 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, */Makefile.sub, common.mk (clean-local, distclean-local):
- separate files under directories due to directory separator.
-
- * */Makefile.sub (MKFILES): common.mk and */Makefile.sub should not be
- removed.
-
- * win32/Makefile.sub, wince/Makefile.sub: $* cannot appear in explicit
- rules.
-
- * cygwin/GNUmakefile.in: some mingw stuffs were missed.
-
- * lib/mkmf.rb (create_makefile): Borland make wrongly removes braces
- from command lines.
-
- * bcc32/Makefile.sub: needs bcc32/mkexports.rb.
-
-Mon Mar 22 08:21:17 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, */Makefile.sub, common.mk: extract common portions.
-
- * Makefile.in, cygwin/GNUmakefile.in, */Makefile.sub (RBCONFIG):
- separated time stamp file for rbconfig.rb.
-
- * configure.in: append common.mk to Makefile.
-
- * mkconfig.rb: keep mtime of rbconfig.rb if unchanged.
-
- * win32/rm.bat: remove multiple files.
-
- * wince/mkconfig_wce.rb: use fake.rb instead.
-
-Sun Mar 21 22:17:35 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpserver.rb (WEBrick::HTTPServer#virtual_host):
- sort @virtual_hosts in address, port, host order.
-
- * lib/webrick/httpserver.rb (WEBrick::HTTPServer#lookup_server):
- hostname should not be match if :ServerAlias is not given.
-
-Sun Mar 21 21:11:16 2004 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/shell/*: bug fix for Shell#system(command_line_string).
-
-Sun Mar 21 21:04:42 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ruby.1: add -width option to .Bl for old groff.
-
-Sun Mar 21 18:57:37 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rss/*: Test::Unit::TestCase -> RSS::TestCase and
- Test::Unit::Assertions -> RSS::Assertions.
-
-Sun Mar 21 18:48:20 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/{rss,dublincore,syndication}.rb: handled W3CDTF correctly.
-
-Sun Mar 21 18:15:29 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rss/test_xml-stylesheet.rb: added tests for xml-stylesheet.
-
- * lib/rss/xml-stylesheet.rb: added xml-stylesheet parsing
- function.
-
-Sat Mar 20 23:51:03 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * eval.c (rb_require_safe): preserve old ruby_errinfo.
- [ruby-talk:95409]
-
- * eval.c (rb_f_raise): should not clear backtrace information if
- exception object already have one.
-
-Sat Mar 20 21:21:03 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/extmk.rb: rm -rf $extout, not extout.
-
-Sat Mar 20 15:25:36 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/template/html/html.rb (RDoc::Page): Force
- page background to white.
-
-Sat Mar 20 09:33:36 2004 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb, lib/date/format.rb: _parse() now accepts fractional
- part of second minute that follows a comma or a full stop.
-
-Fri Mar 19 21:06:21 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (assoc_list): allow {sym: val} style Hash. [Ruby2]
- this change is done by Nobuyoshi Nakada <nobu@ruby-lang.org>.
-
-Fri Mar 19 15:15:15 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_cvar_set): class variables become private to the
- particular class/module. [Ruby2]
-
- * variable.c (rb_cvar_get): ditto.
-
- * variable.c (rb_cvar_defined): ditto.
-
-Fri Mar 19 11:31:32 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb ($beos, $solaris): add OS flags.
-
- * lib/mkmf.rb (RUBY): / is not recognized as path separator on
- nmake/bmake. [ruby-list:39388]
-
- * lib/mkmf.rb (CLEANLIBS, CLEANOBJS): should remove *.exp with *.so.
-
-Fri Mar 19 01:55:57 2004 Mauricio Fernandez <batsman.geo@yahoo.com>
-
- * io.c (rb_io_sync): need not to check writable. [ruby-core:02674]
-
-Thu Mar 18 19:47:44 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * instruby.rb, rubytest.rb: do not depend on srcdir.
-
-Thu Mar 18 18:50:06 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb: no longer embed srcdir and compile_dir into
- rbconfig.rb.
-
- * ext/extmk.rb, lib/mkmf.rb: obtain top_srcdir and topdir from library
- paths.
-
-Thu Mar 18 17:46:35 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: do not undef :to_a.
-
-Thu Mar 18 16:22:38 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_eq): avoid false positive by using scope and
- dyna_vars. no longer use frame.uniq.
-
- * eval.c (proc_arity): arity is now defined as number of
- parameters that would not be ignored. i.e. Proc.new{}.arity
- returns zero. update test suites too.
-
-Thu Mar 18 15:27:25 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c: remove specialized version of rb_Array(). use simple
- one defined in object.c.
-
- * object.c (Init_Object): remove Kernel#to_a.
-
- * enum.c (enum_zip): use "to_a" instead of "to_ary".
-
-Wed Mar 17 00:22:03 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * oniguruma.h: imported Oniguruma 2.2.5.
- * regparse.c: ditto.
-
-Tue Mar 16 11:14:17 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (fnmatch_helper): File.fnmatch('\.', '.') should return true.
- (Rev1.112 lost compatibility)
-
- * dir.c (fnmatch_helper): File.fnmatch('\/', '/', File::FNM_PATHNAME)
- should return true. (Rev1.112 lost compatibility)
-
- * dir.c (fnmatch): File.fnmatch('**/.boo', '.foo/.boo',
- File::FNM_PATHNAME) should return false because of leading period.
-
-Mon Mar 15 17:01:07 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (exc_initialize): calling 'to_str' each time just for
- type checking is too heavy. [ruby-core:02661]
-
-Mon Mar 15 10:14:51 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SocketForwarder):
- add do_not_reverse_lookup.
-
-Mon Mar 15 07:39:13 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): should not re-submit TAG_BREAK if this
- yield is not break destination. [ruby-dev:23197]
-
-Sun Mar 14 22:07:38 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_raise): err at unstarted thread. (PR#1302)
-
-Sat Mar 13 14:56:32 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/drb/ut_drb.rb: use 'druby://localhost:0'. [ruby-dev:23078]
-
- * test/drb/ut_eval.rb: ditto.
-
- * test/drb/ut_large.rb: ditto.
-
- * test/drb/ut_safe1.rb: ditto.
-
- * test/drb/ut_drb_drbssl.rb: use 'drbssl://localhost:0'.
-
-Fri Mar 12 23:52:56 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (fnmatch): directory recursion '**/' can be used with
- File::FNM_PATHNAME. [ruby-dev:22901]
-
- * dir.c (fnmatch, fnmatch_helper): only '/' is accepted as path
- separator even in DOSISH environment. [ruby-dev:22974]
- [ruby-list:39337]
-
- * dir.c (fnmatch_helper): faster '*' matching.
-
-Fri Mar 12 20:19:16 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rb_cv_noreturn): default for platforms not support
- prototypes.
-
- * ruby.c (ruby_init_loadpath): buffer for path name should have
- MAXPATHLEN.
-
- * lib/mkmf.rb (configuration): include topdir and hdrdir in VPATH.
-
- * lib/mkmf.rb (create_makefile): default dependency rule.
-
-Fri Mar 12 07:35:36 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/config.rb (WEBrick::Config::General): add
- :DoNotReverseLookup.
-
- * lib/webrick/server.rb (WEBrick::GenericServer#accept): call
- do_not_reverse_lookup for each socket if :DoNotReverseLookup
- is set. [ruby-code:02357]
-
-Wed Mar 10 22:26:25 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (remove_dir): should handle symlink correctly.
- This patch is contributed by Christian Loew. [ruby-talk:94635]
-
-Wed Mar 10 16:28:42 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (return_jump): set return value to the return
- destination. separated from localjump_destination().
-
- * eval.c (break_jump): break innermost loop (or thread or proc).
-
- * eval.c (rb_yield_0): set exit_value for block break.
-
-Wed Mar 10 16:00:14 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * struct.c (rb_struct_s_def): Struct::new executes block with
- generated struct class. [ruby-talk:02606]
-
-Wed Mar 10 15:58:43 2004 Ryan Davis <ryand-ruby@zenspider.com>
-
- * eval.c (eval): Only print backtrace if generating the backtrace
- doesn't generate an exception. [ruby-core:02621]
-
-Wed Mar 10 10:15:16 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ruby.c (opt_W_getter): get rid of warning.
-
- * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub:
- fixed dependency.
-
-Tue Mar 9 13:04:26 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_ungetc): raise IOError instead of calling
- rb_sys_fail(). [ruby-talk:23181]
-
-Tue Mar 9 10:03:40 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub:
- replaced regex.c entry with Oniguruma files.
-
-Tue Mar 9 01:09:46 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * Makefile.in: replaced regex.c entry with Oniguruma files.
-
-Mon Mar 8 23:16:07 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: HTTPHeader did not initialized correctly.
-
- * lib/net/http.rb (connect): does same debug output.
-
-Mon Mar 8 21:38:18 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (add_header): remove warning. [ruby-dev:23170]
-
-Mon Mar 8 21:09:39 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (range): Cancel change for incomplete '['. More discussion
- is needed.
-
-Mon Mar 8 19:35:13 2004 akira yamada <akira@arika.org>
-
- * lib/uri/common.rb (URI::REGEXP::PATTERN::HOSTPORT): (?:#{PORT})
- -> (?::#{PORT}). [ruby-dev:23170]
-
-Mon Mar 8 15:03:24 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (range): treat incomplete '[' as ordinary character (like
- has_magic does). fix buffer overrun at incomplete escape like '[\'.
-
-Mon Mar 8 13:35:32 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * regparse.c (parse_exp): need to separate initialization for bcc32.
- [ruby-dev:23169]
-
- * oniguruma.h (ONIG_EXTERN): check __GNUC__ instead of __CYGWIN__.
-
-Mon Mar 8 01:05:55 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/config.rb (WEBrick::Config::HTTP): rename :RequestHander
- to :RequestCallback and add new option :ServerAlias.
-
- * lib/webrick/httpserver.rb (WEBrick::HTTPServer#run): use
- :RequestCallback and warn if :RequestHandler is in server's option.
-
- * lib/webrick/httpserver.rb (WEBrick::HTTPServer#run): should print
- error message for WEBrick::HTTPSataus::Error.
-
- * lib/webrick/httpserver.rb (WEBrick::HTTPServer#lookup_server):
- lookup for hostname from :ServerAlias if the req.host is not match
- to :ServerName.
-
- * lib/webrick/httpservlet.rb (WEBrick::HTTPServlet::CGIHandler#do_GET):
- use $?.exitstatus and refine log message.
-
-Sun Mar 7 16:22:26 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * Makefile.in (lex.c): use $? instead of $<.
-
- * lib/pstore.rb (commit_new): use FileUtils.copy_stream for Cygwin.
- [ruby-dev:23157]
-
-Sun Mar 7 05:34:42 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: HTTPHeader keeps its header fields as an array.
-
- * lib/net/http.rb: new method HTTPHeader#add_header, get_fields.
-
- * lib/net/http.rb: new method HTTPHeader#content_length=.
-
- * lib/net/http.rb: new method HTTPHeader#content_type, main_type,
- sub_type, type_params, content_type=, set_content_type.
-
- * lib/net/http.rb (HTTPHeader#basic_encode): result of pack(m) may
- contain multiple LFs.
-
-Sun Mar 7 03:11:00 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: new method Net::HTTPRequest#body(=).
-
- * lib/net/http.rb: new method Net::HTTPRequest#body_stream(=).
-
-Sun Mar 7 02:06:07 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: spin off https code again.
-
- * lib/net/https.rb: new file.
-
- * ext/openssl/lib/net/https.rb: removed. moved to net/https with
- slight modifications.
-
- * ext/openssl/lib/net/protocols.rb: removed. merged with net/http.
-
- * lib/net/protocol.rb: new class BufferedIO.
-
- * lib/net/protocol.rb: InternetMessageIO < BufferedIO.
-
- * lib/net/protocol.rb: BufferedIO.new takes an IO.
-
- * lib/net/smtp.rb: follow InternetMessageIO's change.
-
- * lib/net/pop.rb: ditto.
-
-Sun Mar 7 00:55:03 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb: remove method: InternetMessageIO#address,
- port, ip_address, read_timeout(=), socket.
-
- * lib/net/protocol.rb: simplify code.
-
- * lib/net/protocol.rb: apply latest coding style.
-
-Sat Mar 6 15:15:05 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/strscan/depend: depends on re.h and regex.h.
-
- * ext/strscan/strscan.c: no version check needed.
-
- * ext/strscan/strscan.c (strscan_init_copy): struct re_registers must
- not be bitwise copied.
-
-Sat Mar 6 11:14:33 2004 David Black <dblack@wobblini.net>
-
- * lib/scanf.rb: refixed the previous fix in IO#block_scanf
-
-Sat Mar 6 10:49:40 2004 David Black <dblack@wobblini.net>
-
- * lib/scanf.rb: fixed a logic glitch in IO#block_scanf
-
-Sat Mar 6 02:00:19 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: net/https is merged.
-
- * ext/openssl/lib/net/https.rb: ditto.
-
-Sat Mar 6 00:39:21 2004 Kazuo Saito <ksaito@uranus.dti.ne.jp>
-
- * oniggnu.h: imported from Oniguruma library.
- * oniguruma.h: ditto.
- * regcomp.c: ditto.
- * regenc.c: ditto.
- * regenc.h: ditto.
- * regerror.c: ditto.
- * regex.c: ditto.
- * regexec.c: ditto.
- * reggnu.c: ditto.
- * regint.h: ditto.
- * regparse.c: ditto.
- * regparse.h: ditto.
- * ascii.c: ditto.
- * euc_jp.c: ditto.
- * sjis.c: ditto.
- * utf8.c: ditto.
-
- * MANIFEST: added Oniguruma files listed above.
-
- * LEGAL: added Oniguruma license.
-
- * regex.h: now includes oniggnu.h.
-
- * re.c: applied Oniguruma patch.
-
-Fri Mar 5 23:13:08 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: support WebDAV methods, PROPPATCH, LOCK,
- UNLOCK, OPTIONS, PROPFIND, DELETE, MOVE, COPY, MKCOL.
- This patch is contributed by Tatsuki Sugiura.
-
-Fri Mar 5 20:58:37 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: Net::HTTPResponse#response is obsolete.
- [ruby-core:02592]
-
- * lib/net/http.rb: Net::HTTPResponse#header is obsolete.
-
- * lib/net/http.rb: Net::HTTPResponse#read_header is obsolete.
-
-Fri Mar 5 20:10:57 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c: new method StringScanner#initialize_copy
- to allow #dup and #clone.
-
- * test/strscan/test_strscan.rb: test StringScanner#dup.
-
-Fri Mar 5 19:42:09 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (HTTPResponse#to_ary): should return an object
- which does not respond to #to_ary. It causes infinite loop in
- puts. [ruby-core:02578]
-
-Fri Mar 5 00:51:35 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/test/unit.rb: Move RDoc documentation so that you can
- now say 'ri Test::Unit'
-
-Thu Mar 4 22:31:40 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in: miniruby is not needed for cross compile.
-
- * configure.in (PREP): miniruby for native compile.
-
-Thu Mar 4 11:46:32 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/drb/extservm.rb (DRb::ExtServManager#invoke_service_command):
- detach server processes to get rid of zombies.
-
-Thu Mar 4 10:41:25 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ruby.h (T_MASK): save 1 bit in flags bits by shifting T_xxx
- values.
-
-Thu Mar 4 08:08:36 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/rubyext.c: get rid of warnings.
-
- * lib/rss/taxonomy.rb: ditto.
-
- * lib/rdoc/ri/ri_formatter.rb: ditto.
-
- * test/ruby/test_assignment.rb: ditto.
-
-Thu Mar 4 01:17:28 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rdoc/ri/ri_display.rb (DefaultDisplay::page): wait until the
- pager terminates.
-
-Wed Mar 3 13:10:56 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (method_hash): new method. [ruby-talk:93968]
-
- * eval.c (proc_eq): do not compare dyna_vars.
-
- * eval.c (proc_hash): new method.
-
- * eval.c (rb_yield_0): protect break/return from within orphan (or
- lambda) Proc object.
-
-Wed Mar 3 09:52:05 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb ($topdir): use compile_dir only when not installed yet.
- [ruby-talk:94098]
-
-Wed Mar 3 01:18:52 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/converter.rb: handled Uconv::Error.
-
- * lib/rss/dublincore.rb: DublincoreModel -> DublinCoreModel
-
-Wed Mar 3 00:59:30 2004 David Black <dblack@wobblini.net>
-
- * lib/scanf.rb: soak_up_spaces only ungetc's non-space last
- character
-
- * lib/scanf.rb: IO#block_scanf now returns partial last iteration
- array if format string matches partly
-
-Tue Mar 2 16:30:21 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (pipe_open): erred program name should be reported by
- exceptions, instead of the first argument.
-
- * process.c (rb_spawn): ditto.
-
- * process.c (proc_spawn_v): use first argument as program name.
-
- * win32/win32.c (rb_w32_aspawn): ditto.
-
- * win32/win32.c (CreateChild): search executable file if no program
- name given.
-
- * lib/drb/extservm.rb (invoke_service_command): use Process.spawn.
- [ruby-dev:23103]
-
- * lib/rdoc/ri/ri_display.rb (setup_pager): use IO.popen.
- [ruby-dev:23086], [ruby-dev:23103]
-
- * lib/rdoc/diagram.rb (convert_to_png): ditto.
-
- * lib/rdoc/generators/chm_generator.rb (compile_project): ditto.
-
-Tue Mar 2 12:24:03 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub, wince/Makefile.sub (config.h): shouldn't check
- defined? NORETURN. [ruby-dev:23100]
-
-Tue Mar 2 11:28:40 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_iterator.rb (test_ljump): cannot use
- assert_nothing_raised due to passing block.
-
-Tue Mar 2 06:23:14 2004 David Black <dblack@wobblini.net>
-
- * lib/scanf.rb: fixed Kernel#scanf to propagate code block
-
-Mon Mar 1 23:25:40 2004 David Black <dblack@wobblini.net>
-
- * lib/scanf.rb: Partial fix so STDIN#scanf works with new
- STDIN#pos behavior
-
-Mon Mar 1 19:42:05 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * bcc32/setup.mak: configure's default is "--enable-install-doc"
-
- * win32/setup.mak: ditto.
-
-Mon Mar 1 12:24:10 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_alias):
- Allow aliases to have parentheses
-
-Sun Feb 29 23:14:53 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_class):
- Handle :nodoc: on singleton classes.
-
-Sat Feb 28 21:50:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bcc32/Makefile.sub, bcc32/README.bcc32, bcc32/configure.bat,
- bcc32/setup.mak: new configure scheme. use ``configure --prefix=dir''
- instead of ``make DESTDIR=dir install''.
- --with-static-linked-ext support on bccwin32. [ruby-dev:23034]
-
-Sat Feb 28 21:50:20 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * bcc32/setup.mak: "configure --disable-install-doc" is now working.
-
- * win32/setup.mak: ditto.
-
-Sat Feb 28 15:09:49 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * bcc32/configure.bat: append missing label ":exit".
-
- * bcc32/configure.bat: fix typo.
-
-Sat Feb 28 10:31:03 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * MANIFEST: add test_erb.rb
-
- * lib/erb.rb, test/erb/test_erb.rb: don't forget filename,
- if both filename and safe_level given. [ruby-dev:23050]
-
-Sat Feb 28 01:08:40 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): should not allow symbol for invalid global
- variable (e.g. `:$-)`). [ruby-core:02518]
-
-Fri Feb 27 20:37:09 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): no orphan block check is needed when pcall
- is true.
-
- * eval.c (localjump_destination): update localjump condition.
-
-Fri Feb 27 02:10:49 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (localjump_destination): lambda should not interfere
- return from the yielded block.
-
-Fri Feb 27 00:53:49 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb, test/drb/drbtest.rb: require drb/eq.rb by default
-
-Thu Feb 26 12:15:02 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (make_cmdvector): adjust successive double-quote
- handling.
-
-Thu Feb 26 09:42:56 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (delete_if_i): use st_delete_safe() (via
- rb_hash_delete()) instead of returning ST_DELETE.
-
-Thu Feb 26 02:35:10 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (rb_f_exec): get rid of SEGV when exec failed for command
- in single string.
-
-Wed Feb 25 21:17:33 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (obj_free), io.c (rb_io_fptr_finalize), rubyio.h (OpenFile):
- sharing OpenFile.
-
- * io.c (rb_io_initialize): accept IO instance. [ruby-dev:22195]
-
-Wed Feb 25 21:16:10 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (with_destdir): should return the given argument if no
- DESTDIR is given.
-
- * instruby.rb: use path name expansion of cmd.exe.
-
-Wed Feb 25 20:44:45 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/cgi-lib.rb, lib/getopts.rb, lib/importenv.rb, lib/parsearg.rb:
- warn with caller position.
-
- * test/rss/test_content.rb, test/rss/test_dublincore.rb,
- test/rss/test_syndication.rb, test/rss/test_trackback.rb: use cgi
- instead of cgi-lib.
-
-Tue Feb 24 18:42:03 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (glob_helper): '**/' should not match leading period
- unless File::FNM_DOTMATCH is set. (like '*/') [ruby-dev:23014]
-
-Tue Feb 24 18:03:14 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_file.rb (test_fnmatch): test for dir.c:1.108.
-
-Tue Feb 24 17:07:17 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (fnmatch): File.fnmatch with File::FNM_PATHNAME was broken
- for the pattern including '*' followed by '/'.
-
-Tue Feb 24 13:22:21 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/rdoc.rb (RDoc::RDoc::normalized_file_list): Attempt to get better
- heuristics on which files to include and exclude. Now only include
- non-standard files if they are explicitly named in ARGV.
-
-Tue Feb 24 07:23:30 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/html_generator.rb: Deal with :stopdoc: when
- choosing a default main page to display (ie. don't select a page
- if we don't have documentation for it).
-
-Tue Feb 24 06:40:14 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RubyLex::identify_identifier): Handle
- class variables in code listings
-
-Tue Feb 24 06:32:27 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_aliases): Handle
- aliases in C files.
-
-Tue Feb 24 06:16:22 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/rdoc.rb (RDoc::RDoc::document): Now create op dir _before_
- parsing files.
-
-Tue Feb 24 06:08:47 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_constant):
- Start collecting text of constant values earlier: was missing
- values in output if there was no space after '='
-
-Tue Feb 24 06:08:25 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/html_generator.rb: Escape contant values.
-
-Tue Feb 24 03:45:06 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_config.c (ossl_config_each): add new method
- OpenSSL::Config#each. it iterates with section name, field name
- and value.
-
- * ext/openssl/ossl_config.c (Init_ossl_config): include Enumerable.
-
-Mon Feb 23 09:09:44 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * instruby.rb (parse_args): use optparse instead of getopts.
-
- * instruby.rb (DOSISH): embedded path in batch files should not be
- prefixed by DESTDIR. [ruby-core:02186]
-
-Sun Feb 22 14:58:04 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: $extstatic is Array or nil now. [ruby-talk:93383]
-
- * Makefile.in, bcc32/Makefile.sub, win32/Makefile.sub: terminate options.
-
- * lib/mkmf.rb (init_mkmf): $INCFLAGS also should be lazy-evaluated.
-
-Sun Feb 22 13:05:37 2004 akira yamada <akira@ruby-lang.org>
-
- * lib/uri/mailto.rb (URI::MailTo::to_s): should include fragment.
-
-Sun Feb 22 12:58:35 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: use optparse instead of getopts.
-
- * Makefile.in, bcc32/Makefile.sub, win32/Makefile.sub: ditto.
-
-Sun Feb 22 09:51:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * re.c: corrected documentation format (rb_reg_initialize_m)
-
-Sat Feb 21 22:41:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * ext/zlib/zlib.c: documented, but needs more effort.
-
-Sat Feb 21 14:33:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: prefer relative path. [ruby-talk:93037]
-
-Sat Feb 21 11:12:08 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * missing/os2.c, missing/x68.c: typo fix. pointed out by greentea.
-
-Fri Feb 20 19:11:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/ostruct.rb (OpenStruct#initialize_copy): should not share
- members. [ruby-dev:22966]
-
-Fri Feb 20 18:59:47 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/init.rb (IRB::IRB.parse_opts): add -I option to
- irb. [ruby-dev:39243]
-
-Fri Feb 20 12:55:27 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (pipe_open): fix typo.
-
- * win32/win32.c (CreateChild): first argument to CreateProcess() must
- have path, not just basename.
-
-Thu Feb 19 23:24:16 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/html_generator.rb (Generators::HtmlClass::build_attribute_list):
- Support visibility modifiers for attributes
-
-Thu Feb 19 22:39:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/ostruct.rb: documented
-
-Thu Feb 19 22:39:04 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/rinda/test_rinda.rb: DRb.start_service only once in testsuites.
- DRb.start_service could handle this.
-
-Thu Feb 19 22:24:04 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/mapping/rubytypeFactory.rb: should not dump singleton class.
- [ruby-dev:22588]
- c = class << Object.new; class C; self; end; end; SOAPMarshal.dump(c)
-
-Thu Feb 19 18:08:18 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * ext/strscan/strscan.c: improved documentation
-
-Thu Feb 19 18:08:18 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c, win32/win32.h: fixed prototypes.
-
- * win32/win32.c (wait): same as waitpid() with -1.
-
-Thu Feb 19 02:34:28 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/markup/simple_markup/preprocess.rb (SM::PreProcess::include_file):
- Only strip comment markers if all lines start with comments.
-
-Thu Feb 19 03:05:49 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c: StringScanner#restsize is obsolete;
- use #rest_size instead.
-
- * ext/strscan/strscan.c: StringScanner#matchedsize is obsolete;
- use #matched_size instead.
-
-Thu Feb 19 02:42:19 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c: don't use rb_eval_string, it defines
- classes under the module when required in module clauses.
- [ruby-dev:22951]
-
-Thu Feb 19 02:37:28 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c: merge documentation from 1.8 branch.
- Thanks Gavin Sinclair.
-
-Thu Feb 19 00:20:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/cgi-lib.rb: deprecated after 1.8.1
-
- * lib/getopts.rb: ditto
-
- * lib/importenv.rb: ditto
-
- * lib/parsearg.rb: ditto
-
-Thu Feb 19 00:11:05 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/markup/simple_markup/preprocess.rb (SM::PreProcess::handle):
- Strip extraneous space from filenames in :include:
-
-Wed Feb 18 22:53:41 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/unix.rb: remove O_NONBLOCk, thanks \ay
-
-Wed Feb 18 22:42:19 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/rinda/test_rinda.rb: improt test_rinda.rb
-
-Wed Feb 18 22:03:11 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/*: should not depend on $KCODE.
-
-Wed Feb 18 18:07:09 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_sprintf.rb: added tests.
-
-Wed Feb 18 17:18:01 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/win32ole/win32ole.c: need to include <olectl.h> on Cygwin.
-
-Wed Feb 18 10:40:38 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): sign bit extension should not be done
- if FPLUS flag is specified. [ruby-list:39224]
-
- * sprintf.c (rb_f_sprintf): do not prepend dots for negative
- numbers if FZERO is specified. [ruby-dev:39218]
-
-Wed Feb 18 10:23:34 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * sprintf.c (rb_f_sprintf): clean up.
-
-Tue Feb 17 23:40:34 2004 Guy Decoux <ts@moulon.inra.fr>
-
- * sprintf.c (rb_f_sprintf): preserve original val for
- format_integer. [ruby-talk:92975]
-
-Tue Feb 17 23:28:45 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/soap/marshal/test_marshal.rb, test/ruby/test_marshal.rb: do $:
- trick to share the testcase test/ruby/marshaltestlib.rb.
-
-Tue Feb 17 23:13:23 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/marshaltestlib.rb: common marshal testcase added.
-
- * test/ruby/test_marshal.rb: use above testsuite.
-
- * test/soap/marshal/test_marshal.rb: ditto.
-
- * test/soap/marshal/cmarshal.rb: removed (not used).
-
-Tue Feb 17 19:34:26 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): $extout_prefix doesn't vary for libraries.
-
- * ext/extmk.rb (extmake): remove compile directory if empty.
-
- * ext/extmk.rb (parse_args) lib/mkmf.rb (create_makefile): move
- initialization of $extout_prefix from lib/mkmf.rb. [ruby-dev:22928]
-
- * ext/extmk.rb: clear ext and extout directory when cleaning.
-
- * lib/mkmf.rb (CLEANLIBS): should be under $(arch) directory.
-
-Tue Feb 17 18:02:10 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c: ScanError may be (wrongly) garbage
- collected. (thanks Gavin Sinclair)
-
- * ext/strscan/strscan.c: move ::ScanError to StringScanner::Error.
- ::ScanError is also defined for backward compatibility.
-
- * ext/strscan/strscan.c: #peep is obsolete, use #peek.
-
- * ext/strscan/strscan.c: #empty? is obsolete, use #eos?.
-
- * ext/strscan/strscan.c: #clear is obsolete, use #terminate.
-
- * ext/strscan/strscan.c: #getbyte is obsolete, use #get_byte.
-
-Tue Feb 17 12:12:47 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (parse_args): delay expanding $(extout) until invoking
- make.
-
- * lib/mkmf.rb (CLEANLIBS): should remove files have specific
- extensions.
-
-Tue Feb 17 11:33:30 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rss/rexmlparser.rb: REXML version may be 4 digits.
-
-Tue Feb 17 10:45:59 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/syck/rubyext.c (syck_emitter_end_object): takes only one arg.
-
-Tue Feb 17 07:48:21 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/rexml/encodings/SHIFT_JIS: wrong library name.
-
-Tue Feb 17 01:35:28 2004 Tanaka Akira <akr@m17n.org>
-
- * eval.c (rb_eval): care that another thread replace NODE_DREGX_ONCE
- to NODE_LIT. [ruby-dev:22920]
-
-Tue Feb 17 01:20:57 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: new module FileUtils::DryRun.
-
-Mon Feb 16 23:28:14 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/csv.rb: document reduction. [ruby-core:02429]
-
- * test/yaml/test_yaml.rb: added 0..1 test with "0".."1" on display.
- it should be defined that the specification about what kind of Range
- is supported in ruby's custom type in YAML.
-
-Mon Feb 16 22:22:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/generator.rb: corrected doc format
-
- * lib/rinda/rinda.rb: added documentation (from Hugh Sasse)
-
- * lib/rinda/tuplespace.rb: ditto
-
- [Note: rinda files actually committed Wed Feb 18 07:27:00 2004]
-
-Mon Feb 16 20:28:52 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * bcc32/Makefile.sub: show more warnings. (referring to mingw)
-
- * bcc32/setup.mak: ditto.
-
-Mon Feb 16 18:35:58 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.status): should create *.pdb on ext/,
- not .ext/.
-
- * win32/Makefile.sub (config.status): convert the name of import
- library.
-
- * lib/mkmf.rb (create_makefile): now don't need to remove
- $(TARGET).lib.
-
-Mon Feb 16 15:45:22 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check functions, fork spawnv.
-
- * io.c (rb_io_s_popen): accept argv not only single command line.
-
- * process.c (rb_proc_exec_n): export.
-
- * process.c (rb_check_argv): check if arguments are safe to invoke.
-
- * process.c (rb_fork): retry to fork.
-
- * process.c (rb_spawn): spawn child process asynchronously.
-
- * process.c (rb_f_system): raise an exception if the command could not
- execute.
-
- * win32/win32.c (rb_w32_argv_size): count necessary size for joined
- arguments.
-
- * win32/win32.c (rb_w32_join_argv): join arguments with quoting.
-
- * win32/win32.c (rb_w32_pipe_exec, rb_w32_spawn, rb_w32_aspawn):
- accept program name adding to command line.
-
-Mon Feb 16 15:18:33 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/racc/parser.rb: add note for Racc full package.
-
-Mon Feb 16 15:13:01 2004 Minero Aoki <aamine@loveruby.net>
-
- * ext/racc/cparse/README: new file.
-
- * ext/racc/cparse/MANIFEST: add README.
-
-Mon Feb 16 12:29:10 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_s_list): new method Iconv.list
- (libiconv only).
-
-Mon Feb 16 10:29:52 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (CompareImpl): File.fnmatch and Dir.glob get better performance
- in Win32. This is achieved by calling downcase() for single-byte
- characters. (CharLower() is slower than downcase())
-
-Mon Feb 16 02:14:29 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * bcc32/Makefile.sub: should warn suspicious pointer conversion.
-
- * bcc32/setup.mak: ditto.
-
-Sun Feb 15 20:56:22 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (push_braces): remove wrong const. [ruby-dev:22891]
-
-Sun Feb 15 20:41:15 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * sample/soap/calc/httpd.rb, sample/soap/exchange/httpd.rb,
- sample/soap/sampleStruct/httpd.rb, sample/wsdl/googleSearch/httpd.rb:
- use soap/property instead of getopts for configuring DocumentRoot
- and port# of httpd. see samplehttpd.conf below.
-
- * sample/soap/calc/samplehttpd.conf,
- sample/soap/exchange/samplehttpd.conf,
- sample/soap/sampleStruct/samplehttpd.conf,
- sample/wsdl/googleSearch/samplehttpd.conf: added.
-
-Sun Feb 15 19:13:33 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/rinda/tuplespace.rb: read(tpl,0), raise RequestExpiredError
- if not found.
-
-Sun Feb 15 15:48:57 2004 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: add IDispatch wrapper in val2variant.
- Thanks, arton.
-
-Sun Feb 15 15:23:29 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * ruby.h, dir.c (rb_glob): add const.
-
-Sun Feb 15 01:46:05 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/mkmf.rb: absolute path of ruby is assigned to $(RUBY).
- [ruby-dev:22870]
-
-Sat Feb 14 23:59:11 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * mkconfig.rb: use fileutils.rb instead of ftools.rb.
-
- * bcc32/Makefile.sub, win32/Makefile.sub (config.h): define
- STACK_GROW_DIRECTION.
-
- * bcc32/Makefile.sub (config.h): add newer checks.
-
- * wince/Makefile.sub (config.h): define NEED_IO_SEEK_BETWEEN_RW.
-
-Sat Feb 14 23:26:27 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/un.rb: use OptionParser instead of getopts.
-
-Sat Feb 14 11:28:14 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * sample/drb/*: import lib/drb/sample
-
-Sat Feb 14 11:14:12 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: add pretty_print, thanks gotoken.
-
-Fri Feb 13 21:51:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/fileutils.rb: slightly improved documentation (sync with 1.8)
-
-Fri Feb 13 19:57:01 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * test/rss/test_trackback.rb: added tests for TrackBack with RSS
- 2.0.
-
- * test/rss/common.rb: added methods make RSS 2.0.
-
- * lib/rss/trackback.rb: TrackBack API is decided.
-
- * lib/rss/rss.rb: RSS::VERSION 0.0.7 -> 0.0.8.
-
- * lib/rss/parser.rb, lib/rss/rss.rb: replaced $DEBUG by RSS::DEBUG.
-
- * lib/rss/2.0.rb: removed RSS 2.0 URI. Because RSS 2.0 doesn't
- have URI.
-
-Fri Feb 13 14:41:00 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: en-bugged at last commit (Feb 11 23:24:22 2004)
-
-Fri Feb 13 12:26:37 2004 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb: rescue SystemCallError instead
- of EINVAL. File.link may raise EACCES on network file systems.
-
-Fri Feb 13 05:18:58 2004 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb: File.link raises EINVAL on
- Win9x. [ruby-dev:22713]
-
-Thu Feb 12 21:49:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/ftools.rb: documented
-
-Thu Feb 12 21:19:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/base64.rb: added and tidied documentation
-
-Thu Feb 12 20:45:01 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb (WriteAdapater#puts): must append "\n" to
- the string, don't prepend. (ruby-bugs:PR#1280)
-
-Thu Feb 12 20:31:43 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_tmpsrc): cpp32 of Borland C++ ignores #error
- directives in DOS line-ending files at all.
-
-Thu Feb 12 15:23:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (rparen): ignore preceding newlines to right parentheses.
- (ruby-bugs:PR#1221) [ruby-dev:22858]
-
-Thu Feb 12 14:17:43 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: set ac_cv_func_link to yes to enable link() on MinGW.
- [ruby-dev:22241]
-
-Thu Feb 12 13:32:49 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (link): raise NotImplementedError on Win9X.
- contributed by Tietew. [ruby-dev:22713]
-
- * win32/win32.c, win32/win32.h (link): add const.
-
-Thu Feb 12 09:56:19 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/tk/lib/tk.rb (TkComm::tk_split_list): suppress a warning.
-
-Thu Feb 12 02:23:56 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb: use assert_raise instead of assert_raises.
-
- * lib/pp.rb: ditto.
-
- * lib/time.rb: ditto.
-
- * lib/tsort.rb: ditto.
- use TSortHash and TSortArray instead of Hash and Array in test.
-
-Wed Feb 11 23:24:22 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: properly treat a Tcl/Tk's string with escaping
- special characters.
-
-Tue Feb 10 20:49:07 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (method_proc): return bound Proc object. [ruby-dev:22854]
-
- * eval.c (rb_mod_define_method): bind method body itself for Method
- object.
-
- * node.h (NODE_DMETHOD): deprecated.
-
- * object.c (rb_class_inherited_p): export.
-
-Tue Feb 10 16:43:50 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (umethod_bind): purge unused check. [ruby-dev:22850]
-
-Tue Feb 10 14:33:08 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * string.c (rb_str_match): raise TypeError when both arguments are
- strings. [ruby-dev:22851]
-
- * string.c (rb_str_match2): removed.
-
- * Makefile.in, bcc32/Makefile.sub, win32/Makefile.sub,
- wince/Makefile.sub (string.c): now not depend on version.h.
-
-Mon Feb 9 17:46:07 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in, bcc32/Makefile.sub, win32/Makefile.sub, configure.in,
- runruby.rb: run rdoc, test and so on with compiled extension
- libraries. [ruby-dev:22688]
-
- * ext/extmk.rb, lib/mkmf.rb: make extension libraries in separated
- directory, similar to the actual directory structure.
-
- * lib/fileutils.rb (FileUtils.copy_file): use the mode of the original
- file to create new file.
-
- * lib/rdoc/ri/ri_paths.rb (RI::Paths::SYSDIR): get rid of unexpected
- influence by environment variable.
-
- * bcc32/configure.bat, win32/configure.bat: add install-doc options.
-
- * win32/win32.c, win32/win32.h (rb_w32_fstat): fix Borland C runtime
- bug which returns wrong mode. [ruby-dev:22846]
-
-Mon Feb 9 16:30:12 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (detach_process_watcher): return the last status.
- [ruby-dev:22841]
-
-Sun Feb 8 16:46:08 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/pp.rb (PP::PPMethods::object_address_group): suppress negative
- sign for higher heap areas.
-
-Sun Feb 8 16:18:27 2004 akira yamada <akira@ruby-lang.org>
-
- * test/yaml/test_yaml.rb (YAML_Unit_Tests::test_range_cycle):
- added tests.
-
-Sun Feb 8 15:51:57 2004 akira yamada <akira@ruby-lang.org>
-
- * test/ruby/test_file.rb (TestFile::test_fnmatch): added tests for
- File.fnmatch. [ruby-dev:22815][ruby-dev:22819]
-
-Sun Feb 8 15:41:45 2004 akira yamada <akira@ruby-lang.org>
-
- * test/yaml/test_yaml.rb (YAML_Unit_Tests::test_range_cycle):
- added tests. [ruby-core:02306] [ruby-core:02311]
-
-Sun Feb 8 14:24:35 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (HTTP#request): should not overwrite Connection
- header. (ruby-bugs:PR#1274)
-
-Sun Feb 8 10:11:21 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (glob_helper): Dir.glob('**/') did not work. [ruby-dev:22832]
-
-Sun Feb 8 00:29:26 2004 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (fnmatch): File.fnmatch('*?', 'a') should return true.
- [ruby-dev:22815]
-
- * dir.c (fnmatch): File.fnmatch('\[1\]' , '[1]') should return true.
- [ruby-dev:22819]
-
- * dir.c: Did some styles (no change to behavior)
-
-Sat Feb 7 19:56:11 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/irb/init.rb (IRB.rc_files): yield possible rc file names.
-
- * lib/irb/input-method.rb (IRB::ReadlineInputMethod::initialize):
- load and save history automatically. [ruby-core:02352]
-
-Fri Feb 6 22:48:16 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/html_generator.rb (gen_url): Support
- https in RDoc hyperlinks
-
-Fri Feb 6 22:41:22 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/pp.rb (PPInspectTest#test_to_s_with_iv): rollback the previous
- commit. [ruby-dev:22813]
-
-Fri Feb 6 22:22:50 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/pp.rb (PPInspectTest#test_to_s_with_iv): remove instance
- variable which is defined in the test.
-
-Fri Feb 6 18:54:18 2004 akira yamada <akira@ruby-lang.org>
-
- * test/ruby/test_proc.rb (TestProc::test_eq): added a
- test. [ruby-dev:22599]
-
-Fri Feb 6 18:26:00 2004 akira yamada <akira@ruby-lang.org>
-
- * test/ruby/test_proc.rb (TestProc::test_eq): added tests for
- Proc#==. [ruby-dev:22592], [ruby-dev:22601]
-
-Fri Feb 6 10:12:06 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/socket.c (bsock_do_not_reverse_lookup): control reverse
- lookup for every instance. [ruby-core:02346]
-
-Fri Feb 6 09:15:11 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/irb/extend-command.rb: add irb_help command. [ruby-talk:91610]
-
- * lib/irb/cmd/help.rb (IRB::ExtendCommand::Help): show RDoc.
-
-Fri Feb 6 00:48:37 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/prettyprint.rb (PrettyPrint#first?): obsoleted.
-
-Thu Feb 5 23:56:55 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/prettyprint.rb (PrettyPrint#seplist): added.
-
- * lib/pp.rb (PPMethods#pp_object): use seplist.
- (PPMethods#pp_hash): ditto.
- (Array#pretty_print): ditto.
- (Struct#pretty_print): ditto.
- (MatchData#pretty_print): ditto.
-
- * lib/set.rb (Set#pretty_print): use seplist.
-
-Wed Feb 4 22:39:46 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (rb_stat_mode): should not sign-expand, so backout.
-
-Wed Feb 4 02:12:06 2004 Tanaka Akira <akr@m17n.org>
-
- * file.c (test_l): fix wrong method name in document.
- (test_S): ditto.
- (test_b): ditto.
- (test_c): ditto.
- (test_suid): ditto.
- (test_sgid): ditto.
- (test_sticky): ditto.
-
-Tue Feb 3 22:36:25 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/2.0.rb, lib/rss/content.rb, lib/rss/dublincore.rb,
- lib/rss/rss.rb, lib/rss/syndication.rb: removed warnings.
-
- * lib/rss/converter.rb: removed handling load error of nkf.
-
- * test/rss/test_syndication.rb, test/rss/test_trackback.rb,
- test/rss/test_dublincore.rb, test/rss/test_content.rb: replaced
- 'require "rss/parser"' by 'require "rss/1.0"'.
-
- * test/rss/test_parser.rb, test/rss/test_accessor.rb: removed
- 'require "rss/parser"'.
-
-Tue Feb 3 11:23:17 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (reduce_nodes): remove tail returns. [ruby-talk:90934]
-
-Tue Feb 3 08:04:57 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb (Struct#pretty_print_cycle): follow 1.8 style.
-
-Mon Feb 2 22:06:31 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (block_append, new_evstr, void_expr0): remove no longer used
- labels.
-
-Mon Feb 2 18:45:50 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * dln.c (dln_load): don't specify RTLD_GLOBAL on Interix,
- because it caused SEGV when running runner.rb.
-
-Mon Feb 2 01:54:00 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb (Struct#pretty_print): make it 1.8 style.
- (Numeric#pretty_print, FalseClass#pretty_print)
- (TrueClass#pretty_print, Module#pretty_print): fix pp for objects
- with instance variables. [ruby-talk:91157]
-
- * lib/open-uri.rb (URI::Generic#find_proxy): return nil on loopback
- address.
-
- * lib/resolv-replace.rb (BasicSocket#send): don't replace because
- it has no hostname argument.
- (IPSocket.getaddress): raise SocketError instead of
- Resolv::ResolvError for errors.
- (TCPSocket#initialize, UDPSocket#bind, UDPSocket#connect)
- (SOCKSSocket#initialize): use IPSocket.getaddress instead of
- Resolv.getaddress.
- (UDPSocket#send): recognize 3 arguments form. try all addresses on
- 4 arguments form.
-
-Sun Feb 1 23:00:00 2004 Shigeo Kobayashi <shigek@ruby-lang.org>
-
- * ext/bigdecimal.c: Bug in BigDecimal("1e#{n}").add BigDecimal('.5'),n)
- reported and fixed by Javier Goizueta.
-
-Sun Feb 1 18:21:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- From ruby_1_8 branch:
- * lib/test/unit.rb: rearranged documentation for RDoc's sake.
- * lib/matrix.rb: improved documentation.
- * lib/net/http.rb: slight documentation formatting improvement.
-
-Sun Feb 1 05:30:06 2004 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (URI::Generic#find_proxy): warn HTTP_PROXY.
- raise an error on non-http proxy URI.
- (OpenURI::Buffer#<<): make a tempfile binmode. [ruby-talk:90793]
-
-Sun Feb 1 00:57:41 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss/parser.rb (RSS::Parser): added @@default_parser. Used
- XML parser became selectable.
- * test/rss/test_parser.rb: added tests for
- RSS::Parser.default_parser.
-
-Sat Jan 31 02:28:15 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (RPATHFLAG): set to -Wl,-R like NetBSD on Interix.
-
-Sat Jan 31 01:09:41 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/logger.rb: leading 0 padding of timestamp usec part.
-
-Fri Jan 30 18:53:23 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * re.c (KR_REHASH): wrong hash value on sizeof(long) > sizeof(int).
-
-Thu Jan 29 23:11:57 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (DLEXT2): removed. Ruby does not treat
- ".dll" as a extension library anymore.
-
- * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub (DLEXT2):
- ditto.
-
- * util.c (mblen): fix overrun. [ruby-dev:22672]
-
-Thu Jan 29 22:41:53 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/html_generator.rb: Allow 'link:' in Tidylinks.
- THis means you can write "see f1[link:files/f1_rb.html]".
-
-Thu Jan 29 22:24:47 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * sample/openssl/gen_csr.rb: follow OpenSSL::X509::Name change.
- ASN.1 type of subject DN elements were wrong.
-
-Thu Jan 29 22:19:51 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/*: remove $: trick. [ruby-dev:22763] use test/runner.rb to
- run test.
-
-Thu Jan 29 19:28:16 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (Request#initialize): reject only when a path is
- empty. [ruby-dev:22771]
-
-Thu Jan 29 18:54:08 2004 H.Yamamoto <ocean@m2.ccsnet.ne.jp>
-
- * dir.c (glob_helper): infinite loop bug in win32 code.
- [ruby-dev:22770]
-
-Thu Jan 29 17:03:49 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c: merge tuning from H.Yamamoto <ocean@m2.ccsnet.ne.jp>.
- [ruby-dev:22761]
-
-Thu Jan 29 11:32:14 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/rss/test_*: do $: trick while searching a module in the current
- directory.
-
- * test/xsd/test_xmlschemaparser.rb, test/wsdl/test_emptycomplextype.rb,
- test/soap/helloworld/test_helloworld.rb,
- test/soap/calc/{test_calc.rb,test_calc2.rb}: do File.expand_path
- before using __FILE__.
-
- * test/yaml/test_yaml.rb: assert_equals -> assert_equal.
-
-Thu Jan 29 01:56:02 2004 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/rubyext.c: usec round-tripping skew. [ruby-core:2305]
-
- * lib/yaml/rubytypes.rb: character Range now round-trips. [ruby-core:2306]
-
- * test/yaml/test_yaml.rb: add Time and Range tests.
-
-Thu Jan 29 00:00:46 2004 Kouhei Sutou <kou@cozmixng.org>
-
- * lib/rss: rss/parser.rb is always required.
-
-Wed Jan 28 15:09:14 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/rss/*.rb: remove "test/" prefix.
-
-Wed Jan 28 13:07:02 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/extconf.rb: include iconv.h for libiconv. [ruby-dev:22715]
-
-Wed Jan 28 12:43:07 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/rss: rss library imported. [ruby-dev:22726]
-
-Wed Jan 28 04:29:41 2004 Eric Schwartz <emschwar@fc.hp.com>
-
- * lib/cgi/session.rb: use LOCK_SH to read, and a few other
- improvements. [ruby-core:02328]
-
-Tue Jan 27 15:00:14 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el: better support for general delimited
- strings. [ruby-dev:22695]
-
-Tue Jan 27 11:04:40 2004 FUKUMOTO Atsushi <fukumoto@nospam.imasy.or.jp>
-
- * ext/socket/socket.c (s_recvfrom): sending length should be an
- invariant while retrying on EAGAIN. [ruby-talk:89962]
-
-Tue Jan 27 10:31:28 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/win32ole/win32ole.c (set_argv): fix condition.
-
-Tue Jan 27 02:26:31 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httputils.rb (WEBrick:HTTPUtils::parse_header):
- refine regex for header-name.
-
-Mon Jan 26 22:53:04 2004 Dave Thomas <dave@pragprog.com>
-
- * io.c: Remove documentation references to $defout.
-
-Mon Jan 26 14:41:46 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/weakref.rb (WeakRef::initialize): set up @__id before
- calling "super".
-
- * lib/delegate.rb (Delegator::initialize): preserve
- singleton_method_added method [ruby-dev:22685]
-
- * lib/delegate.rb (Delegator::initialize): use Kernel::raise
- instead of mere raise. [ruby-dev:22681]
-
-Mon Jan 26 12:45:23 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: define CONST84 when TCL_MAJOR_VERSION == 7
-
-Mon Jan 26 11:30:58 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: Makefiles should depend on also rbconfig.rb.
- (ruby-bugs:PR#1256)
-
- * ext/win32ole/win32ole.c (set_argv): set real arguments to
- WIN32OLE::ARGV. [ruby-list:39073]
-
-Sun Jan 25 18:25:26 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_x509name.c (ossl_x509name_add_entry): third
- argument become optional.
-
- * ext/openssl/ossl_x509name.c (ossl_x509name_initialize): ditto.
-
- * ext/openssl/ossl_x509name.c (Init_x509name): emailAddress and
- domainComponent should be IA5String.
-
-Sun Jan 25 01:45:38 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpserver.rb (WEBrick::HTTPServer#run): support
- virtual host.
-
- * lib/webrick/httpserver.rb (WEBrick::HTTPServer#virtual_host): add
- new method to register virtual hosting server.
-
- * lib/webrick/httpserver.rb (WEBrick::HTTPServer#lookup_server): add
- new method to lookup virtual hosting server.
-
-Sat Jan 24 13:06:26 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_x509hame.c (ossl_x509name_initialize): change
- second argument. it expected to be a Hash not an Integer.
-
- * ext/openssl/ossl_x509name.c (ossl_x509name_add_entry): add new
- function for OpenSSL::X509::Name#add_entry.
-
- * ext/openssl/ossl_x509name.c (Init_ossl_x509name): add constants
- OpenSSL::X509::Name::DEFAULT_OBJECT_TYPE and OBJECT_TYPE_TEMPLATE.
-
- * ext/openssl/lib/openssl/x509.rb (OpenSSL::X509::Name#initialize):
- second argument takes OBJECT_TYPE_TEMPLATE by default.
-
-Fri Jan 23 02:26:30 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (num2i32): pack should not raise RangeError.
- [ruby-dev:22654]
-
- * pack.c (pack_pack): do not auto convert nil to zero.
-
-Thu Jan 22 22:54:53 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (BEG_REGEXP): allow 8-bit characters in quoted
- strings for Novell GroupWise Internet Agent.
-
- * lib/net/imap.rb (DATA_REGEXP): ditto.
-
-Thu Jan 22 18:35:49 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/e2mmap.rb (VERSION): remove unnecessary version checking.
-
-Thu Jan 22 16:21:02 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (string_content): reset lexical states at the beginning of
- string contents. [ruby-list:39061]
-
-Thu Jan 22 08:08:50 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (opt_rescue): use NODE_ERRINFO() instead of
- NODE_GVAR("$!"), to avoid confusion from variable aliasing.
- [ruby-talk:90074]
-
- * version.c (Init_version): remove obsolete constants VERSION
- etc. [ruby-dev:22643]
-
-Thu Jan 22 01:46:32 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (newline_node): do not use NODE_NEWLINE node anymore,
- use NEWLINE flag instead.
-
-Thu Jan 22 01:12:12 2004 Siena. <siena@faculty.chiba-u.jp>
-
- * missing/os2.c (chdir, getcwd):
- use _chdir2 and _getcwd2 supporting multiple drives in OS/2 with EMX.
-
-Thu Jan 22 00:33:52 2004 Siena. <siena@faculty.chiba-u.jp>
-
- * configure.in: check availability of link(). [ruby-dev:22237]
- * file.c (rb_file_s_link): raise an exception when link() is unavailable.
- * missing/os2.c (link): removed. File#link isn't supported.
- * bcc32/Makefile.sub: define HAVE_LINK to enable link(). [ruby-dev:22241]
- * win32/Makefile.sub: ditto.
-
-Thu Jan 22 00:26:25 2004 Siena. <siena@faculty.chiba-u.jp>
-
- * ChangeLog: typo: RUBY_MBCHAR_MAX was RUBY_MBCHAR_MAXSIZE.
-
-Thu Jan 22 00:12:51 2004 Siena. <siena@faculty.chiba-u.jp>
-
- * defines.h: define RUBY_MBCHAR_MAX instead of MB_CUR_MAX.
- * dir.c (Next, emx_mblen): use RUBY_MBCHAR_MAX for mblen().
- * file.c (CharNext): ditto.
- * ruby.c (translate_char): ditto.
- * util.c (__crt0_glob_function): ditto.
-
-Thu Jan 22 00:10:01 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/base64.rb: :nodoc: the Deprecated module
-
-Wed Jan 21 23:52:39 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: Interix(SFU) support.
-
-Wed Jan 21 23:03:45 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: remove O_NONBLOCK, thanks \ay
- * lib/drb/extserv.rb: typo
-
-Wed Jan 21 17:57:56 2004 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (envelope): allow NIL.
- * lib/net/imap.rb (body): ditto.
- * lib/net/imap.rb (number): ditto.
- * lib/net/imap.rb (ensure_nz_number): show a detailed error
- message.
-
-Wed Jan 21 16:44:15 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (merge_libs): squeeze successive same libraries.
- [ruby-dev:22652]
-
-Wed Jan 21 16:10:36 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/base64.rb: enclosed in a module. [ruby-core:02285]
-
-Wed Jan 21 16:01:26 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/digest/rmd160/extconf.rb: have_library appends found library.
-
-Wed Jan 21 11:36:00 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (sock_gethostbyname): returns host if
- ai_canonname is NULL. (ruby-bugs PR#1243)
-
- * parse.y (block_append): update nd_end for "real" head node.
- [ruby-list:39058]
-
-Tue Jan 20 14:48:28 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: should check <openssl/conf_api.h> instead
- of OPENSSL_VERSION_NUMBER. [ruby-list:39056]
-
-Tue Jan 20 14:43:17 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/base64.rb: Add RDoc
-
-Tue Jan 20 14:25:51 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/abbrev.rb: Add RDoc
-
-Tue Jan 20 13:22:39 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/html_generator.rb: Document aliases at
- top-most level.
-
- * lib/English.rb: Document English.rb.
-
-Tue Jan 20 04:41:58 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_marshal.rb (MarshalTestLib::test_exception): test
- for [ruby-dev:22604].
-
- * test/ruby/test_marshal.rb (MarshalTestLibtest_singleton): test
- for [ruby-dev:22588].
-
-Tue Jan 20 02:38:13 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_class): should not dump singleton class.
- [ruby-dev:22631]
-
-Tue Jan 20 02:49:22 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: add check for OpenSSL version.
- [ruby-list:39054]
-
-Mon Jan 19 23:56:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (name_err_mesg_to_str): inverted condition for result of
- inspection. [ruby-dev:22628]
-
-Mon Jan 19 22:24:28 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * sample/exyacc.rb: escape '}' to avoid warning.
-
- * lib/rdoc/parsers/parse_c.rb: escape '{' and '}' to avoid warnings.
-
-Mon Jan 19 21:28:06 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/digest/defs.h, win32/win3.c, win32/win32.h, file.c: remove
- useless casts for Borland C.
-
-Mon Jan 19 17:39:38 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (NameError::message): internal use only.
-
- * eval.c (rb_method_missing): use hidden constant.
-
-Mon Jan 19 16:30:53 2004 akira yamada <akira@ruby-lang.org>
-
- * test/ruby/test_time.rb: added tests for [ruby-dev:22614] and
- [ruby-dev:22617].
-
-Mon Jan 19 13:09:21 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/extmk.rb, win32/Makefile.sub, win32/configure.bat,
- win32/setup.mak: --with-static-linked-ext support on mswin32.
-
-Mon Jan 19 06:49:07 2004 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date.rb: zone was wrong when it was behind UTC.
- Thanks Mark J. Reed.
-
- * lib/date/format.rb: %z is now always replaced by four digits
- with a leading plus or minus sign.
-
- * sample/cal.rb: added a class, anyway.
-
-Mon Jan 19 01:08:39 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * class.c, error.c, eval.c, intern.h, object.c, variable.c:
- do not set path if it is a singleton class. [ruby-dev:22588]
-
- * lib/cgi.rb (CGI::QueryExtension): give extended string, not a
- delegater object.
-
-Sun Jan 18 23:59:44 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/charset_alias.rb: prefer us_EN locale encodings or
- former. [ruby-dev:22609]
-
- * ext/iconv/iconv.c (iconv_create): raise InvalidEncoding
- exception when EINVAL.
-
-Sun Jan 18 23:16:34 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * class.c, error.c, file.c, io.c, numeric.c, object.c, re.c, struct.c,
- time.c: marked init_copy functions nodoc.
-
-Sun Jan 18 20:47:35 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ruby.c: use translate_char() on Cygwin.
-
-Sun Jan 18 20:00:16 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/wsdlDriver.rb, lib/wsdl/soap/operation.rb: add support of
- "parts" attribute of soap:body element in WSDL.
-
- * lib/wsdl/xmlSchema/schema.rb: friendly warning message for
- simpleType element which is not supported for now.
-
- * test/wsdl/soap/{soapbodyparts.wsdl,test_soapbodyparts.wsdl}: new
- files.
-
-Sun Jan 18 16:46:48 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (time_overflow_p): should return results. [ruby-dev:22614]
-
-Sun Jan 18 12:07:24 2004 Siena. <siena@faculty.chiba-u.jp>
-
- * test/ruby/test_time.rb: new test case to test Time#[+-].
-
- * time.c (time_plus, time_minus): fix RangeError for a negative
- argument in environments whose time_t is unsigned. [ruby-dev:22608]
-
-Sun Jan 18 02:33:26 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * defines.h (_WIN32): undef _WIN32 on Cygwin before defining DOSISH.
-
-Sun Jan 18 00:23:55 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (class2path): check anonymous class/module before
- checking referable, and allow singleton classes.
-
-Sat Jan 17 23:58:51 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (NameError::Message): new class for lazy evaluation of
- message to ensure replaced before marshalling. [ruby-dev:22604]
-
- * eval.c (rb_method_missing): use NameError::Message.
-
-Sat Jan 17 21:49:50 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/time.rb (test_rfc2822, test_rfc3339, test_encode_xmlschema):
- should not expect that all platforms handle negative time_t value.
-
-Fri Jan 16 23:53:09 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (proc_eq): compare also arguments and environment
- (including local variables). [ruby-dev:22590]
-
-Fri Jan 16 14:33:35 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (class2path): get class path and check referable.
- [ruby-dev:22588]
-
-Thu Jan 15 12:58:26 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (argf_read): do not append EOF. (ruby-bugs-ja:PR#585)
-
- * io.c (rb_io_fwrite): ad-hockery hack to get rid of HP-UX stdio
- weird behavior. [ruby-dev:22424]
-
-Wed Jan 14 21:13:06 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/inlinetest.rb (InlineTest::eval_part): eval under the top
- level environment.
-
-Wed Jan 14 17:54:17 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/inlinetest.rb (InlineTest::loadtest): require instead of
- load, to get rid of multiple loading.
-
-Wed Jan 14 13:30:52 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/extconf.rb: wrapper iconv.rb is dependent on platform.
-
-Wed Jan 14 09:32:02 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * MANIFEST: add test/net/test_httpheader.rb. (commit miss?)
-
-Wed Jan 14 00:58:35 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (Init_Proc): move SystemStackError from under
- StandardError to Exception. [ruby-talk:89782]
-
-Tue Jan 13 18:03:02 2004 Ian Macdonald <ian@caliban.org>
-
- * file.c (rb_stat_wr, rb_stat_ww): New functions
- implementing new methods (File::Stat#world_readable?,
- File::Stat#world_writable?).
-
-Tue Jan 13 16:53:25 2004 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/rubyext.c: omission of Date library code caused
- test suite failure. [ruby-core:2251]
-
-Tue Jan 13 16:50:03 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: use $0 as the default application class name.
-
-Tue Jan 13 14:48:00 2004 Ian Macdonald <ian@caliban.org>
-
- * lib/pathname.rb: New methods (Pathname#world_readable?,
- Pathname#world_writable?).
-
-Tue Jan 13 14:48:01 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (primary): allow no "when" case. [ruby-dev:22578]
-
- * ruby.h (rb_class_of): reduce branch. [ruby-dev:22577]
-
- * ruby.h (rb_type): ditto.
-
-Tue Jan 13 14:26:59 2004 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-
- * lib/test/unit/ui/testrunnerutilities.rb (TestRunnerUtilities):
- moved run method which allows output level. [ruby-dev:22554]
-
-Tue Jan 13 13:04:24 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/test_*.rb: Pathname#parent -> Pathname#dirname.
-
-Tue Jan 13 11:38:58 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/yaml/test_yaml.rb (YAML_Unit_Tests::test_spec_type_{int,float}):
- fix syntax error.
-
-Tue Jan 13 07:52:40 2004 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/bytecode.c: turn off default implicit typing.
-
- * ext/syck/implicit.c: detect base60 integers.
-
- * ext/syck/rubyext.c: handle base60, as well as hex and octal
- with commas. implicit typing of ruby symbols.
-
- * test/yaml/test_yaml.rb: add test.
-
-Tue Jan 13 04:29:52 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/ri/ri_driver.rb (RiDriver::report_method_stuff):
- Show fully-qualified class names in class list.
-
-Tue Jan 13 01:24:17 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (test_wr): Rdoc fix. [ruby-core:02225]
-
-Tue Jan 13 01:04:37 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/ri/ri_paths.rb (RI::Paths): First attempt at
- incorporating DESTDIR in the rdoc installation.
-
-Mon Jan 12 23:26:21 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (primary): fix position after FCALL. [ruby-dev:22574]
-
-Mon Jan 12 18:00:11 2004 Ian Macdonald <ian@caliban.org>
-
- * file.c (test_wr, test_ww): New functions implementing new
- methods (File::world_readable?, File::world_writable?).
-
- * file.c (S_IRUGO, S_IGUGO): New macros.
-
-Mon Jan 12 12:07:22 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_methods):
- Someone changed the "// in eval.c" comments to "/*...*/" style,
- so the parsing of the source file name broke.
-
- * object.c: Remove spurious space in TrueClass documentation.
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_body): Fix
- bad regexp: if the code before a documented method contained
- a comment that wasn't terminated by whitespace, that comment
- and all intervening code was included in the following
- method's documentation.
-
- * lib/rdoc/ri/ri_formatter.rb (RI::HtmlFormatter::break_to_newline):
- HTML formats need explicit line breaks.
-
-Mon Jan 12 02:24:07 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/ri/ri_formatter.rb (RI::HtmlFormatter): Add HTML
- generation support to ri (Elliot Hughes)
-
-Sun Jan 11 23:54:41 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * env.h (ruby_frame, ruby_scope, ruby_in_eval, ruby_class,
- ruby_dyna_vars): export. [ruby-dev:22566]
-
-Sun Jan 11 02:35:53 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (make_hostent): a bug in brace position.
-
- * configure.in: install rdoc by default. if you do not want to
- install rdoc, specify --disable-install-doc.
-
-Sun Jan 11 02:07:47 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/ri/ri_options.rb (RI::Options::OptionList::OptionList):
- Also accept command line options via the 'RI' environment variable.
-
-Sat Jan 10 21:27:41 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (eval): need to add message delimiter. [ruby-dev:22561]
-
-Sat Jan 10 01:54:50 2004 Eric Sunshine <sunshine@sunshineco.com>
-
- * defines.h (__NeXT__): Ensure that all standard S_IRUSR, S_IWGRP,
- S_IRWXO, etc. macros are defined since future code might require
- them (even though present code only requires a subset).
-
- * defines.h (__NeXT__): Bug fix: WORDS_BIGENDIAN was not being set
- correctly on Rhapsody when -arch compiler flag was used (via
- configure's --enable-fat-binary option).
-
-Sat Jan 10 23:01:41 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (LIBPATHFLAG, RPATHFLAG): enclose paths with single
- quotes. [ruby-dev:22564]
-
- * lib/mkmf.rb (libpathflag): do not enclose with quotes always.
-
- * {bcc32,win32,wince}/Makefile.sub (LIBPATHFLAG): quoted.
-
-Sat Jan 10 22:46:18 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (dir_inspect): new method, Dir#inspect. [ruby-dev:22562]
-
-Fri Jan 9 17:36:51 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/socket.c (make_hostent): getaddrinfo(3) on BSD do not
- fill ai_canonname if serv is not supplied. (ruby-bugs PR#1243)
-
-Fri Jan 9 13:14:59 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/test/unit/collector/dir.rb: do not ignore exceptions(LoadError
- and SystemExitError) while loading a testcase. smell of bug.
-
- * test/testunit/collector/test_dir.rb: add new test of the LoadError.
-
- * test/drb/{test_drbssl.rb,test_drbunix.rb}: do not define testcase if
- openssl is not installed.
-
- * test/testunit/collector/test_dir.rb: assert_raises -> assert_raise.
-
-Fri Jan 9 11:52:16 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * rubysig.h: <errno.h> is needed to use errno which may be a macro.
-
-Fri Jan 9 11:20:24 2004 Siena. <siena@faculty.chiba-u.jp>
-
- * ext/extmk.rb (extmake): should not reduce necessary libraries.
- [ruby-dev:22440]
-
- * lib/mkmf.rb (merge_libs): merge libraries according to
- dependency.
-
-Fri Jan 9 10:05:23 2004 Siena. <siena@faculty.chiba-u.jp>
-
- * lib/mkmf.rb (libpathflag): use single quotes. [ruby-dev:22440]
-
-Thu Jan 8 23:49:21 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (RDOCTARGET): new macro. if you want to install
- rdoc documentation, you need to run configure with
- --enable-install-doc.
-
-Thu Jan 8 21:17:43 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_pkey.c (ossl_pkey_to_der): removed; it returns
- public key only.
-
- * ext/openssl/ossl_pkey_dh.c (ossl_dh_to_der): new function for
- OpenSSL::PKey::DH#to_der.
-
- * ext/openssl/ossl_pkey_dsa.c (ossl_dsa_to_der): new function for
- OpenSSL::PKey::DSA#to_der.
-
- * ext/openssl/ossl_pkey_rsa.c (ossl_rsa_to_der): new function for
- OpenSSL::PKey::RSA#to_der.
-
-Thu Jan 8 18:25:29 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (glob_helper): should not recurse in exceptional status.
-
-Thu Jan 8 16:51:04 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/wsdl/datetime/test_datetime.rb: fixed a stupid testcase which
- dumps "E" at month-end.
-
-Thu Jan 8 11:20:01 2004 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * eval.c, object.c, process.c, re.c: don't use C++ style comments.
-
-Thu Jan 8 08:46:14 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/rubyext.c (yaml_org_handler): lazy-load Date for
- static-ext.
-
-Thu Jan 8 07:06:30 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb: preserve order in Setup. [ruby-dev:22503]
-
- * ext/extmk.rb: move dependent libraries just after depended
- libraries.
-
- * ext/digest/*/extconf.rb: depend on digest.
-
-Thu Jan 8 04:36:17 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb (WEBrick::CGI#initialize): should create
- @config[:Logger] if it was not given.
-
-Wed Jan 7 22:28:12 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (glob_helper): fix memory leak.
-
-Wed Jan 7 21:15:07 2004 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * sample/webrick/*: new files.
-
- * MANIFEST: add sample/webrick/*
-
-Wed Jan 7 20:51:51 2004 Minero Aoki <aamine@loveruby.net>
-
- * test/net/test_httpheader.rb: new file.
-
- * MANIFEST: add test/net/test_httpheader.rb.
-
-Wed Jan 7 20:42:06 2004 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (HTTPHeader#content_length): should return nil
- unless header exists. [ruby-dev:22519]
-
-Wed Jan 7 14:26:05 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb (TkPanedWindow): use epath for embedded windows.
-
- * ext/tk/lib/tktext.rb: use epath for embedded windows.
-
- * ext/tk/lib/tkcanvas.rb: use epath for window items.
-
-Wed Jan 7 14:24:04 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/{attachment.rb,mimemessage.rb}: added from soap4r/1.5.2.
-
-Wed Jan 7 13:00:18 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/ri/ri_driver.rb: Fix problem where ri was
- being too eager to find matches of ambiguous method
- names (such as "ri Thread.join" would return both
- Thread.join and ThreadsWait.join)
-
-Wed Jan 7 12:35:41 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/debug.rb: revert command parse regexps. [ruby-list:39014] by
- Shirai,Kaoru.
-
-Wed Jan 7 08:21:04 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parserfactory.rb: Check for shebang
- line in files that would otherwise be treated as
- plain text.
-
-Tue Jan 6 22:13:34 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_mod_modfunc): should break if m has no super class.
- [ruby-dev:22498]
-
-Tue Jan 6 21:51:37 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (fptr_finalize): should save errno just after failure.
- [ruby-dev:22492]
-
-Tue Jan 6 20:51:10 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/logger.rb(Logger#msg2str): no special treatment for the object
- which responds to :to_str.
-
- * lib/logger.rb(LogDevice#initialize): remove type checking if the
- given object is a String. Kernel.open handles it correctly.
-
- * test/logger/test_logger.rb: follow above change (ArgumentError ->
- TypeError.)
-
-Tue Jan 6 14:53:14 2004 Dave Thomas <dave@pragprog.com>
-
- * bin/ri: split out the display side, making it pluggable. Added
- new ri_driver and ri_display files in lib/rdoc/ri.
-
-Tue Jan 6 11:29:43 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/inlinetest.rb, test/{test_generator.rb,test_ipaddr.rb,
- test_pathname.rb,test_pp.rb,test_prettyprint.rb,test_set.rb,
- test_time.rb,test_tsort.rb: added.
-
-Tue Jan 6 09:38:27 2004 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * import soap4r/1.5.2;
-
- * lib/soap/{attachment.rb,baseData.rb,encodingstyle/soapHandler.rb}:
- introduce SOAPExternalReference class as a referenct to SOAPEnvelope
- external content.
-
- * lib/soap/{attachment.rb,mimemessage.rb}: great SwA (SOAP messages
- with Attachments) support code by Jamie Herre.
-
- * lib/soap/{element.rb,marshal.rb,parser.rb,processor.rb,
- streamHandler.rb,wsdlDriver.rb}: SwA support.
-
- * lib/soap/rpc/{cgistub.rb,driver.rb,element.rb,proxy.rb,router.rb,
- soaplet.rb}: SwA support and refactoring.
-
- * lib/soap/generator.rb, lib/soap/mapping/mapping.rb: follow
- SOAPReference#initialize signature change.
-
- * lib/soap/mapping/factory.rb: deleted unused methods.
-
- * lib/soap/mapping/rubytypeFactory.rb: do no ignore case while xsi:type
- string <-> Ruby class name matching.
-
- * lib/xsd/datatypes.rb: check the smallest positive non-zero
- single-precision float exactly instead of packing with "f".
- [ruby-talk:88822]
-
- * test/soap/test_basetype.rb, test/xsd/test_xsd.rb: use 1.402e-45, not
- 1.4e-45. 1.4e-45 is smaller than 2 ** -149...
-
- * test/soap/test_basetype.rb, test/soap/marshal/test_marshal.rb,
- test/xsd/test_xsd.rb: use "(-1.0 / (1.0 / 0.0))" instead of "-0.0".
-
- * test/soap/test_streamhandler.rb: revert to the previous test that
- warns "basic_auth unsupported under net/http".
-
-Tue Jan 6 06:37:53 2004 Dave Thomas <dave@pragprog.com>
-
- * bin/rdoc: Add --ri-system switch
-
- * lib/.document: Update with list of files that seem to have
- documentation
-
- * lib/test/unit.rb: Reorder comment to make it RDoc friendly.
-
- * Makefile.in: add install-nodoc target, and make it
- generate RDoc on default install.
-
- * lib/rdoc/ri/ri_options.rb (RI::Options::parse): Add
- --doc-dir option to ri.
-
-Tue Jan 6 00:04:40 2004 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method_or_yield_parameters):
- fix parsing if there are braces in a method parameter list
-
-Tue Jan 6 01:01:04 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/dir.h, win32/win32.c: fix patch miss.
-
- * win32/Makefile.sub: fix file dependency.
-
-Mon Jan 5 20:32:00 2004 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/logger.rb: enhanced documentation.
-
-Mon Jan 5 18:58:47 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c: merge tuning from H.Yamamoto <ocean@m2.ccsnet.ne.jp>.
- [ruby-dev:22486]
-
- * pack.c (pack_unpack): unpack requires big endian offet (OFF16B
- and OFF32B). The patch is from Minero Aoki in [ruby-dev:22489]
-
- * pack.c (OFF16B): add big-endian offset again.
-
-Mon Jan 5 03:00:53 2004 Minero Aoki <aamine@loveruby.net>
-
- * test/ruby/test_pack.rb: new test test_unpack_N.
-
-Mon Jan 5 01:47:53 2004 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): remove duplicated object files
- from $objs on DOSISH platforms.
-
-Sat Jan 3 02:44:48 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * rubysig.h (TRAP_END): preserve errno before switching context.
- [ruby-core:02137]
-
-Sat Jan 3 01:18:08 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * dir.c: merge tuning from H.Yamamoto <ocean@m2.ccsnet.ne.jp>.
- [ruby-dev:22476]
-
-Fri Jan 2 14:54:11 2004 Dave Thomas <dave@pragprog.com>
-
- * bin/ri: Add new --classes option, and arrange for
- help messages to be paged too.
-
- * bin/rdoc: Add statistics.
-
- * process.c: (MG) Added Process documentation
-
- * lib/rdoc/ri/ri_formatter.rb (RI::AttributeFormatter::wrap):
- Fix problem with labels not displaying in RI labeled
- lists using BS and ANSI modes.
-
-Fri Jan 2 01:50:13 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_eof): ARGF.eof? should not have any side effect.
- [ruby-dev:22469]
-
-Thu Jan 1 09:03:20 2004 Dave Thomas <dave@pragprog.com>
-
- * bin/ri (report_class_stuff): Fix problem with ambiguous nested
- classes not matching.
-
-Wed Dec 31 17:25:17 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_each_byte): should return self. [ruby-dev:22465]
-
-Wed Dec 31 15:05:00 2003 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/pathname.rb: Corrected small coding error.
-
-Wed Dec 31 15:00:00 2003 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/pathname.rb: Completed documentation.
-
-Wed Dec 31 11:20:34 2003 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_methods): Make
- file referenced in "// in sss.c" relative to current file.
-
-Wed Dec 31 11:17:37 2003 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/generators/html_generator.rb: Fix problem when
- a public method was aliased, but the alias is then
- made private, and hence doesn't appear in RDoc output.
-
-Wed Dec 31 01:33:05 2003 Dave Thomas <dave@pragprog.com>
-
- * array.c, error.c, eval.c, io.c, prec.c, range.c, re.c,
- string.c, time.c: Add RDoc for Kernel functions, and tidy.
-
-Tue Dec 30 19:39:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_readline): should raise EOFError at the end of
- files. [ruby-dev:22458]
-
- * io.c (argf_read): should concatenate input files when length
- argument is nil. [ruby-dev:22450]
-
- * io.c (argf_read): should update supplied string buffer (2nd
- argument) even when IO#read is called multiple times.
-
- * io.c: should initialize lineno by zero. [ruby-dev:22460]
-
-Tue Dec 30 12:30:30 2003 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/code_objects.rb (RDoc::Context::find_symbol): If a
- class and a method have the same name, finding Xxx.abc was trying
- to find 'abc' in method 'Xxx', not class 'Xxx'.
-
-Tue Dec 30 08:32:32 2003 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_rb.rb (RDoc::RubyParser::parse_method):
- Handle undoing nsting of yield parameters correctly for:
-
- def each_entry(&b) Dir.foreach(@path) {|f| yield P.new(f) } end
-
-Tue Dec 30 07:30:00 2003 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/pathname.rb: Added documentation.
-
-Mon Dec 29 20:08:17 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (GenericRequest#initialize): check if path
- begins with '/'.
-
- * lib/net/http.rb: def m( arg ) -> def m(arg)
-
-Mon Dec 29 12:51:02 2003 Dave Thomas <dave@pragprog.com>
-
- * eval.c: Add RDoc for Kernel global functions.
-
-Mon Dec 29 11:00:16 2003 Dave Thomas <dave@pragprog.com>
-
- * array.c: Tidy up RDoc loose ends.
-
-Mon Dec 29 05:05:51 2003 Dave Thomas <dave@pragprog.com>
-
- * struct.c, random: Add RDoc comments
-
-Mon Dec 29 02:25:00 2003 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/optparse.rb: Improved documentation.
-
-Mon Dec 29 02:20:54 2003 Dave Thomas <dave@pragprog.com>
-
- * eval.c: Add RDoc for class Proc, Method, UnboundMethod
-
-Mon Dec 29 02:20:26 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * instruby.rb: fix install directory if destdir and compile_dir are
- not in the same drive.
-
- * ext/extmk.rb: ditto. [ruby-list:39009]
-
- * win32/Makefile.sub, win32/README.win32, win32/configure.bat,
- win32/setup.mak: new configure scheme. use ``configure --prefix=dir''
- instead of ``nmake DESTDIR=dir install''.
-
-Mon Dec 29 00:41:44 2003 Dave Thomas <dave@pragprog.com>
-
- * math.c: Add RDoc comments
-
-Sun Dec 28 20:19:11 2003 Tanaka Akira <akr@m17n.org>
-
- * ext/stringio/stringio.c (strio_sysread): StringIO.new.sysread didn't
- raise EOFError.
-
- * ext/zlib/zlib.c (gzreader_gets): don't increment lineno when
- gzfile_read_all returns "".
-
-Sun Dec 28 15:25:08 2003 Dave Thomas <dave@pragprog.com>
-
- * class.c,object.c,parse.y,sprintf.c,variable.c: Document classes
- Object, Module, etc...
-
-Sun Dec 28 11:55:29 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/csv/test_csv.rb: generate bom.csv and mac.csv files on the fly.
- [ruby-talk:88852]
-
- * test/csv/{bom.csv,mac.csv}: removed.
-
-Sun Dec 28 08:56:51 2003 Dave Thomas <dave@pragprog.com>
-
- * eval.c: Thead[Group] RDoc (thanks to MG)
-
-Sun Dec 28 03:50:05 2003 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_override_comment):
- Escape method names used in regexp
-
-Sun Dec 28 01:46:02 2003 Dave Thomas <dave@wireless_3.local.thomases.com>
-
- * lib/rdoc/ri/ri_formatter.rb (RI::TextFormatter::display_flow_item):
- Add support for rules in 'ri' output.
-
-Sun Dec 28 01:35:35 2003 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_body):
- Sometimes the Ruby source aliases two otherwise
- unrelated methods (for example Kernel#object_id and
- Kernel#hash are both the same C function). Provide a
- facility to allow the methods to be documented
- separately.
-
-Sun Dec 28 01:05:31 2003 Dave Thomas <dave@pragprog.com>
-
- * marshal.c, signal.c: RDoc collemts added by Elliott Hughes
-
-Sun Dec 28 00:46:25 2003 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::find_class_comment):
- Some Ruby source uses lower-case class names for the
- Init_Xxx C function name.
-
-Sat Dec 27 23:41:46 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: fix "test: too many arguments" error.
-
-Sat Dec 27 15:32:40 2003 Dave Thomas <dave@wireless_3.local.thomases.com>
-
- * time.c: Add RDoc comments for Time class.
-
-Sat Dec 27 15:07:26 2003 Dave Thomas <dave@pragprog.com>
-
- * object.c: Add RDoc comments for Symbol class.
-
-Sat Dec 27 14:39:53 2003 Dave Thomas <dave@pragprog.com>
-
- * numeric.c (Init_Numeric): Add RDoc comments.
-
-Sat Dec 27 00:44:00 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (next_argv): warn always for stdin on inplace edit mode.
-
- * io.c (read_all): need to check string value.
-
- * io.c (argf_read): allow ARGF.read(nil). [ruby-dev:22433]
-
-Fri Dec 26 23:02:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_backquote): need not to check nil result.
- [ruby-core:02078]
-
- * io.c (rb_io_getline): should return nil when read_all gives
- empty string, even when nil rs is specified. [ruby-core:02077]
-
-Fri Dec 26 18:33:54 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check if getcontext and setcontext are available.
-
- * eval.c: use presence of getcontext/setcontext.
-
-Fri Dec 26 16:40:53 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (PathnameTest#test_plus): add 2 assertions.
-
-Fri Dec 26 14:05:13 2003 Minero Aoki <aamine@loveruby.net>
-
- * test/ruby/test_pack.rb: new test test_pack_N.
-
-Fri Dec 26 12:53:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): add sign check for 'i', and 'l'.
- [ruby-dev:22427]
-
- * bignum.c (rb_quad_pack): add range check for 'quad int'.
-
-Fri Dec 26 10:58:58 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * MANIFEST: add vms/config.h and remove vms/config.h_in.
-
-Fri Dec 26 10:42:00 2003 AKIYOSHI, Masamichi <masamichi.akiyoshi@hp.com>
-
- * io.c: [VMS] "rfm=stmlf" is specified for open() and fopen().
-
-Thu Dec 25 22:29:53 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * string.c (rb_str_update): don't return any value.
-
-Thu Dec 25 15:30:17 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_update): call rb_str_modify().
-
-Thu Dec 25 05:08:09 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (search_required): search actual file name once when no
- extension specified.
-
-Thu Dec 25 04:00:44 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * stable version 1.8.1 released.
-
-Thu Dec 25 00:17:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * configure.in: check for nanosleep, -lrt if required.
- [ruby-core:02059]
-
- * eval.c (thread_timer): use select(2) if nanosleep(2) is not
- available.
-
- * eval.c: check __stub_getcontext for glibc on some platforms.
- [ruby-list:38984]
-
-Wed Dec 24 23:48:04 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/soap/test_basetype.rb, test/soap/marshal/test_marshal.rb
- test/xsd/test_xsd.rb: use "(-1.0 / (1.0 / 0.0))" instead of "-0.0"
- to express -0.0. [ruby-talk:88786]
-
-Wed Dec 24 23:29:30 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/tsort.rb (test_orphaned_break): removed.
-
-Wed Dec 24 20:53:06 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/tkmulticolumnlist.rb: new sample
-
- * ext/tk/sample/tkmultilistframe.rb: bug fix
-
-Wed Dec 24 20:37:37 2003 Eric Sunshine <sunshine@sunshineco.com>
-
- * configure.in (LDSHARED): Fixed typographical error in assignment of
- LDSHARED for Rhapsody which caused linking of extension modules to
- fail.
-
-Wed Dec 24 17:51:18 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_thread_flock): enable thread support again.
-
-Wed Dec 24 16:46:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (catch_timer): do not call rb_thread_schedule() inside to
- avoid pthread_mutex_lock() deadlock. interrupts to system calls
- are detected by TRAP_END via EINTR error.
-
- * eval.c (thread_timer): do not post signal unless it is
- absolutely necessary.
-
- * rubysig.h (TRAP_END): add CHECK_INTS to switch thread.
-
- * regex.c (re_compile_pattern): check if nextp is smaller than
- pend. [ruby-dev:22372]
-
- * eval.c (umethod_bind): remove method overridden check.
- [ruby-dev:22366]
-
-Wed Dec 24 16:13:05 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_read): should check for error
- status by SSL_get_error().
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_write): ditto.
-
-Wed Dec 24 14:23:27 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_read): clear the buffer argument
- when returning nil. [ruby-dev:22363]
-
- * test/ruby/ut_eof.rb (TestEOF::test_eof_0, TestEOF::test_eof_1):
- add buffer argument tests.
-
-Wed Dec 24 14:07:55 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb: Modules are allowed to rescue.
-
- * lib/test/unit/autorunner.rb: show output_level in order.
-
- * lib/test/unit/collector/dir.rb: get rid of successive same
- directories in load path.
-
- * test/testunit/test_assertions.rb (test_assert_nothing_raised,
- test_assert_raise): test for modules.
-
-Wed Dec 24 13:43:34 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/imap.rb (authenticate): remove "\n" from base64 encoded
- strings.
-
-Wed Dec 24 11:26:41 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/fileutils/test_fileutils.rb: should not create any
- files or directories in current directory. [ruby-talk:88724]
-
-Wed Dec 24 10:29:53 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_read): never return nil at
- unlimited read. [ruby-dev:22334]
-
- * ext/stringio/stringio.c (strio_read): support second
- argument. [ruby-dev:22350]
-
-Wed Dec 24 09:38:49 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (arg): should return 0 after error. [ruby-dev:22360]
-
-Wed Dec 24 00:56:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (read_all): do not return nil at the end of file.
- [ruby-dev:22334]
-
- * io.c (argf_read): do not depend on nil at eof behavior of
- IO#read().
-
- * eval.c (rb_thread_join): dup exception before re-raising it.
-
- * io.c (rb_io_eof): call clearerr() to prevent side effect. this
- patch is supplied by Masahiro Sakai <sakai@tom.sfc.keio.ac.jp>.
- [ruby-dev:22234]
-
- * pack.c (OFF16): get offset for big endian machines.
-
- * pack.c (pack_pack): use OFF16 instead of OFF16B.
- [ruby-dev:22344]
-
- * pack.c (pack_unpack): ditto.
-
-Tue Dec 23 22:47:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_io_check_readable): set FMODE_RBUF always, even if
- NEED_IO_SEEK_BETWEEN_RW is not defined. [ruby-dev:22340]
-
- * io.c (rb_io_check_writable): clear FMODE_RBUF before writing
- something.
-
-Tue Dec 23 22:25:00 2003 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/optparse.rb: incomplete RDoc documentation added in place of
- existing RD comments. Tabs converted to spaces.
-
-Tue Dec 23 19:44:47 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/soap/test_streamhandler.rb (test_basic_auth): removed.
- soap4r + basic_auth is not officially supported in ruby/1.8.1 even
- though soap4r + basic_auth + http-access2 should run fine.
-
-Tue Dec 23 19:42:59 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_ungetc): raise an exception at unread stream to
- avoid unspecified behavior. [ruby-dev:22330]
-
- * test/ruby/test_system.rb (test_syntax): glob relatively from
- __FILE__.
-
-Tue Dec 23 18:09:40 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (pack_pack): remove unnecessary negative value check.
- [ruby-dev:22329]
-
-Tue Dec 23 17:26:55 2003 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
-
- * bcc32/Makefile.sub (config.h): bcc has finite(). [ruby-list:38940]
-
-Tue Dec 23 16:08:16 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/rexml/encodings/US-ASCII.rb: typo. [ruby-talk:88650]
-
- * test/ruby/test_system.rb: num of asserts depended on running dir.
-
- * test/xsd/test_noencoding.rb: rexml + without iconv/uconv cannot
- handle euc-jp. install iconv, uconv or xmlscan.
-
-Tue Dec 23 14:13:51 2003 akira yamada <akira@ruby-lang.org>
-
- * lib/uri/generic.rb (URI::Generic::check_userinfo,
- URI::Generic::check_user, URI::Generic::check_password): tests
- conflicts/depends with other components closely.
-
- * test/uri/test_generic.rb (TestGeneric::test_set_component):
- added tets.
-
-Tue Dec 23 11:08:34 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/xsd/test_noencoding.rb: rescue Errno::EINVAL and do not test.
- "euc-jp" might not be in supported encoding name list.
- [ruby-talk:88650]
-
-Tue Dec 23 06:10:31 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb (CGI): add support for mod_ruby.
-
- * lib/webrick/cgi.rb (CGI::Socket): add check for existence of
- OpenSSL module in all HTTPS related methods.
-
- * lib/webrick/cgi.rb (CGI::Socket#cipher): should create similar
- value to OpenSSL::SSLSocket#cipher.
-
- * lib/webrick/httpresponse.rb (HTTPResponse#setup_header): should
- set "connection: close" if @keep_alive is false.
-
- * lib/webrick/https.rb (HTTPrequest#meta_vars): add supprt for
- SSL_PROTOCOL, SSL_CIPHER_USEKEYSIZE and SSL_CIPHER_ALGKEYSIZE.
-
-Mon Dec 22 23:00:05 2003 akira yamada <akira@ruby-lang.org>
-
- * lib/uri/generic.rb (URI::Generic::check_opaque): fixed typo.
-
-Mon Dec 22 21:59:24 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (map_charset): always ensure code is a String.
-
-Mon Dec 22 21:15:29 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * class.c (rb_mod_init_copy): always copy singleton class.
- [ruby-dev:22325]
-
-Mon Dec 22 20:44:36 2003 akira yamada <akira@ruby-lang.org>
-
- * lib/uri/generic.rb (URI::Generic#route_from): accepts urls which
- has no host-part.
-
- * test/uri/test_generic.rb (TestGeneric::test_route): added a test.
-
-Mon Dec 22 20:38:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/cgi.rb: reduce eval.
-
- * lib/cgi.rb (CGI::QueryExtension::read_multipart): alias path to
- local_path. [ruby-list:38883]
-
-Mon Dec 22 20:09:31 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/soap/test_property.rb: remove duplicated test method.
-
-Mon Dec 22 18:22:04 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bcc32/Makefile.sub, win32/Makefile.sub (config.h): remove
- HAVE_ISINF definition to follow previous commits of missing.h
- and win32/win32.h.
-
-Mon Dec 22 17:23:42 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ac_cv_func_setitimer): moved from defines.h
-
- * defines.h, rubysig.h, signal.c: removed macro handling which
- should be done in configure.
-
- * configure.in (intrinsics.h): check if present.
-
- * ruby.h: include intrinsics.h if available.
-
- * bignum.c, marshal.c: include ieeefp.h if available.
-
- * missing.h (isinf): define as a macro if finite() and isnan()
- are available. [ruby-core:02032]
-
-Mon Dec 22 17:07:31 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in (mingw): set isnan, finite and isinf to yes.
-
-Mon Dec 22 13:40:19 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/property.rb: passing block by reference.
-
-Mon Dec 22 00:32:43 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_with_disable_interrupt): use ENABLE_INTS instead of
- ALLOW_INTS which may switch context. [ruby-dev:22319]
-
- * ext/syck/emitter.c (syck_emitter_write): str bigger than
- e->bufsize causes buffer overflow. [ruby-dev:22307]
-
-Sun Dec 21 17:29:00 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * class.c (rb_check_inheritable): new function. [ruby-dev:22316]
-
- * intern.h: add prototype.
-
- * eval.c (superclass): use rb_check_inheritable().
-
- * object.c (rb_class_initialize): check argument validity.
-
-Sun Dec 21 16:25:10 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Pathname#+): re-implemented to resolve ".." in
- beginning of the argument.
- (Pathname#join): concatenate from the last argument.
- (Pathname#parent): just use Pathname#+.
-
-Sun Dec 21 00:12:37 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: add new methods (TkScrollbar#assign, assign_list)
-
- * ext/tk/sample/tkmultilistframe.rb: use TkScrollbar#assign method
-
-Sat Dec 20 21:59:03 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httprequest.rb (HTTPRequest#meta_vars): refine regexp.
-
- * lib/webrick/cgi.rb (CGI#start): NPH scripts return status line
- instead of Status: header field.
-
- * lib/webrick/cgi.rb (CGI::Socket): refine some coditions.
-
-Sat Dec 20 16:07:14 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser::Completion::complete): wrong
- Regexp for word boundary. pointed out by Gavin Sinclair.
-
- * lib/optparse.rb (OptionParser::make_switch): [no-] prefix was
- missing.
-
-Sat Dec 20 11:40:10 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/yaml.rb (YAML::YAML): adjust Marshal version.
-
-Sat Dec 20 03:56:02 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_with_disable_interrupt): prohibit thread context
- switch during proc execution. [ruby-dev:21899]
-
-Sat Dec 20 02:41:02 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/cgi.rb: add file. (yet another CGI library)
-
- * MANIFEST: add lib/webrick/cgi.rb.
-
-Sat Dec 20 02:18:31 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-calculate-indent): proper indentation
- inside of parentheses. [ruby-dev:22308]
-
-Fri Dec 19 21:24:22 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httprequest.rb (HTTPRequest#meta_vars): should not set
- HTTP_CONTENT_TYPE and HTTP_CONTENT_LENGTH.
-
- * lib/webrick/https.rb (HTTPRequest#parse): should check presence
- of cert() method to detect SSLSocket.
-
-Fri Dec 19 22:56:46 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/property.rb (SOAP::Property#load): new method for loading
- property value into existing property tree.
-
- * test/soap/test_property.rb: add test.
-
-Fri Dec 19 19:21:49 2003 akira yamada <akira@ruby-lang.org>
-
- * lib/runit/cui/testrunner.rb (RUNIT::CUI::TestRunner::run):
- should use Test::Unit::UI::{PROGRESS_ONLY,VERBOSE}.
-
-Fri Dec 19 17:36:49 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/tkmultilistbox.rb: bug fix
-
- * ext/tk/sample/tkmultilistframe.rb: new sample script
-
-Fri Dec 19 03:44:27 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httputils.rb (parse_form_data): should return an
- empty Hash if the body is empty.
-
-Thu Dec 18 21:47:35 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/mkmf.rb (create_makefile): should remove deffile if it's
- made by miniruby. based on nobu's patch.
-
-Thu Dec 18 21:44:21 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (stack_extend): ignore inline optimization on VC7.
-
- * win32/Makefile.sub (OS, RT): can override.
-
- * win32/Makefile.sub (LDFLAGS): ditto. shouldn't use pdb:none
- option. based on Tietew's patch [ruby-dev:22289]
-
-Thu Dec 18 16:38:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (fnmatch): unlike find_dirsep(), rb_path_next() never
- return NULL.
-
-Thu Dec 18 15:27:59 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/ipaddr.rb (IPSocket::getaddress): merge usa's patch.
- [ruby-dev:21678]
-
-Wed Dec 17 15:15:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/cgi.rb (CGI::QueryExtension::Value::[]): should work like
- String#[] if more than one arguments are specified.
-
- * lib/delegate.rb: avoid using common instance name as "@obj".
-
- * lib/cgi.rb (CGI::QueryExtension::Value): Value is no longer
- subclass of String, but DelegateClass(String).
-
- * ext/curses/extconf.rb: restore function check for init_color.
- [ruby-list:38905]
-
- * Makefile.in: need to specify $(MAINLIBS) for the miniruby
- generation rule.
-
- * configure.in: better FreeBSD -lc_r support.
-
-Wed Dec 17 00:16:14 2003 Minero Aoki <aamine@loveruby.net>
-
- * ext/strscan/strscan.c: new method
- StringScanner#beginning_of_line? (alias #bol?)
-
- * ext/strscan/strscan.c: new method StringScanner#concat and #<<.
-
- * ext/strscan/strscan.c: StringScanner#new(str) does not duplicate
- nor freeze STR (allow destructive modification).
-
- * test/strscan/test_stringscanner.rb: test new methods above.
-
- * test/strscan/test_stringscanner.rb: test destructive string
- modification.
-
-Tue Dec 16 21:20:47 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pp.rb: don't use local variable `pp'.
-
- * lib/prettyprint.rb: ditto.
-
-Tue Dec 16 13:20:43 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: condition bug of if statement on
- {pack,grid}_propagate methods
-
-Tue Dec 16 03:17:29 2003 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml/rubytypes.rb: comments in strings. [ruby-talk:88012]
-
- * test/yaml/test_yaml.rb: add test.
-
-Tue Dec 16 01:14:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (catch_timer): check rb_thread_crtical in main native
- thread.
-
- * eval.c (thread_timer): just sends signals periodically, to
- prevent main native thread from receiving them in critical
- section. [ruby-core:01959]
-
-Mon Dec 15 13:32:22 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (check_dirname): check string safety and remove extraneous
- trailing directory separators. [ruby-dev:22279]
-
- * file.c: renamed and externalized rb_path_next,
- rb_path_skip_prefix, rb_path_last_separator, rb_path_end.
-
- * intern.h: prototypes for rb_path_next, rb_path_skip_prefix,
- rb_path_last_separator, rb_path_end.
-
-Mon Dec 15 09:27:46 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/ossl_pkcs12.c (ossl_pkcs12_initialize): first argument
- of rb_protect should take an argument of VALUE.
-
-Sun Dec 14 18:46:48 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/socket/socket.c (Init_socket): IPv6 is not supported although
- AF_INET6 is defined on MinGW.
-
- * lib/ipaddr.rb (AF_INET6): workaround in the environment which does
- not support IPv6.
-
-Sat Dec 13 18:55:16 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/charset_alias.rb: preserve original order.
-
- * ext/iconv/extconf.rb: remove wrapper file at clean.
-
-Sat Dec 13 18:09:42 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (thread_timer): use timer by sub-thread and nanosleep.
- [ruby-talk:87519]
-
- * gc.c (Init_stack): no stack adjustment for THREAD_SAFE.
-
-Sat Dec 13 17:17:59 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (proc_alloc): cache the created object at first time.
- [ruby-talk:61288], [ruby-dev:22240]
-
-Sat Dec 13 09:01:23 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check ucontext.h.
-
- * eval.c: use getcontext/setcontext() instead of setjmp/longjmp()
- on ia64 or with native thread enabled. [ruby-core:01932]
-
-Sat Dec 13 03:09:14 2003 why the lucky stiff <why@ruby-lang.org>
-
- * lib/yaml/rubytypes.rb: anonymous struct fix. [ruby-core:01946]
-
- * test/yaml/test_yaml.rb: add test.
-
-Fri Dec 12 22:36:44 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/csv.rb: add Cell#to_str and Cell#to_s for /.../ =~ aCell,
- "#{aCell}" and so on.
-
- * test/csv/test_csv.rb: add tests.
-
-Fri Dec 12 19:33:06 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (mkdir): remove trailing `/' from pathes.
-
- * lib/fileutils.rb (rmdir): ditto. [ruby-dev:22238]
-
- * lib/fileutils.rb (rmdir_r): ditto.
-
- * lib/fileutils.rb (fu_copy_dir): check if it is a directory after
- mkdir(2).
-
-Fri Dec 12 06:06:09 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (proc_invoke): fix class name in warning message for
- define_method. [ruby-dev:22235]
-
-Thu Dec 11 21:24:43 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_pkcs12.[ch]: new files. add OpenSSL::PKCS12.
-
- * ext/openssl/ossl.[ch]: ditto.
-
- * ext/openssl/MANIFEST: add ossl_pkcs12.[ch].
-
-Thu Dec 11 20:54:28 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (mkdir_p): remove trailing `/' befere mkdir(2).
- mkdir("nonexistdir/") does not work on NetBSD/Alpha 1.6.1.
-
- * lib/fileutils.rb (fu_list): call to_str for all arguments.
-
-Thu Dec 11 20:07:01 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/ftools.rb (makedirs): sync with fileutils.
-
-Thu Dec 11 19:53:03 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (mkdir_p): catch all SystemCallErrors.
- (mkdir("C:\") causes EACCESS on Windows 2000/NTFS)
-
-Thu Dec 11 19:08:02 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (mkdir_p): check if it is a directory after
- mkdir(2) instead of before mkdir(2), to avoid race condition.
- [ruby-talk:87730]
- Refer: mkinstalldirs sh script, GNU mkdir(1) (coreutils 5.0)
-
-Thu Dec 11 18:49:30 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb: def m( arg ) -> def m(arg).
-
-Thu Dec 11 11:39:43 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ieeefp.h), numeric.c: needed for finite() on
- Solaris. [ruby-core:01921]
-
- * file.c (rb_stat_inspect): adjust format specifier.
-
- * parse.c (arg_prepend): nodetype() is for debug use.
-
- * ruby.h (ISASCII, etc): cast to int to get rid of warning.
-
- * ruby.h (alloca.h): include even in GCC. [ruby-core:01925]
-
- * ext/bigdecimal/bigdecimal.c (GetVpValue): adjust format
- specifier.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_prec, BigDecimal_coerce,
- BigDecimal_divmod): use rb_assoc_new() to suppress memory usage.
-
- * ext/bigdecimal/bigdecimal.c (BigDecimal_split): ditto.
-
- * ext/dl/sym.c (rb_dlsym_guardcall): guard itself should be
- volatile.
-
- * ext/iconv/iconv.c (iconv_convert): ensure actual parameter with
- format specifier.
-
- * ext/pty/pty.c (MasterDevice, SlaveDevice, deviceNo): do not
- define unless used.
-
- * ext/pty/pty.c (getDevice): get rid of warning.
-
- * ext/socket/socket.c (port_str, sock_s_getaddrinfo,
- sock_s_getnameinfo): FIX2INT() now returns long.
-
- * ext/socket/socket.c (init_inetsock_internal): uninitialized
- variable.
-
- * ext/syck/rubyext.c (syck_parser_assign_io): add prototype.
-
- * ext/syck/rubyext.c (rb_syck_mktime, yaml_org_handler): use
- ISDIGIT() instead of isdigit() to avoid warnings and for
- platforms which don't support non-ascii charater.
-
-Wed Dec 10 19:28:56 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_read): set EOF flag at short read.
- [ruby-dev:22223], [ruby-dev:22224]
-
-Wed Dec 10 18:07:25 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/erb.rb: new method ERB#filename(=). [ruby-dev:22208]
-
-Wed Dec 10 17:54:51 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_read): do not set EOF flag when
- requested length is zero. [ruby-dev:22214]
-
-Wed Dec 10 17:17:18 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (read_all): should return given string even if data read is
- empty. [ruby-dev:22207]
-
-Wed Dec 10 17:16:06 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_read): adjust behavior at reading
- beyond EOF to IO. [ruby-dev:22205]
-
- * test/ruby/ut_eof.rb (TestEOF::Seek): test behaviors at reading
- beyond EOF.
-
- * test/ruby/test_file.rb, test/stringio/test_stringio.rb: include
- TestEOF::Seek test case.
-
-Wed Dec 10 15:01:19 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/monitor/test_monitor.rb (test_cond): use Queue#deq
- instead of sleep.
-
-Wed Dec 10 14:45:39 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/pty/pty.c (HAVE_SYS_IOCTL_H): need to include <sys/ioctl.h>
- for TIOCSCTTY on *BSD. based on gotoyuzo's patch.
- (ruby-bugs:PR#1211)
-
- * ext/pty/pty.c (establishShell): should close descriptors if fork
- failed.
-
-Wed Dec 10 12:53:05 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.h: define execv() using do_aspawn().
-
- * process.c (proc_exec_v): remove #ifdef's which stopped needing.
-
-Tue Dec 9 23:32:23 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb, ext/tk/lib/tkcanvas.rb, ext/tk/lib/tkdialog.rb,
- ext/tk/lib/tkentry.rb, ext/tk/lib/tkscrollbox.rb, ext/tk/lib/tktext.rb,
- ext/tk/sample/tkalignbox.rb, ext/tk/sample/tkcombobox.rb,
- ext/tk/sample/tkmultilistbox.rb, ext/tk/sample/tkoptdb.rb, ext/tk/sample/tktextframe.rb,
- ext/tk/sample/demos-en/dialog1.rb, ext/tk/sample/demos-en/dialog2.rb,
- ext/tk/sample/demos-jp/dialog1.rb, ext/tk/sample/demos-jp/dialog2.rb:
- overrided instance methods, which are private methods on the super
- class, are changed to 'private'
-
-Tue Dec 9 19:53:02 2003 akira yamada <akira@ruby-lang.org>
-
- * lib/uri/generic.rb (URI::Generic#route_from0): make case insensitive
- for host-part.
-
- * test/uri/test_generic.rb (test_route): added tests for the above
- change.
-
-Tue Dec 9 14:10:48 2003 Tanaka Akira <akr@m17n.org>
-
- * io.c (rb_io_check_readable): don't call io_seek if EOF flag is set,
- to avoid clearing EOF flag.
- (rb_io_check_writable): ditto.
-
-Tue Dec 9 02:53:55 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/tkalignbox.rb: new sample script
-
-Tue Dec 9 00:45:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/assertions.rb: renamed #assert_raises to #assert_raise
- and made the former call the latter. [ruby-core:01890]
-
- * test/testunit/test_assertions.rb: ditto.
-
-Tue Dec 9 00:07:35 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/rpc/standaloneServer.rb: add 'shutdown' and 'status'
- methods as delegates to WEBrick.
-
- * test/soap/calc/{test_calc.rb,test_calc2.rb},
- test/soap/helloworld/test_helloworld.rb,
- test/wsdl/datetime/test_datetime.rb, test/wsdl/raa/test_raa.rb:
- follow the change.
-
-Mon Dec 8 22:48:03 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/autorunner.rb: remove dependency to a particular
- runner. [ruby-core:01901], [ruby-list:38869]
-
- * lib/test/unit/ui/testrunnerutilities.rb: moved output level
- constants from Console.
-
- * lib/test/unit/ui/console/testrunner.rb: ditto.
-
- * lib/test/unit/ui/{fox,gtk,gtk2,tk}/testrunner.rb (initialize):
- accept output_level.
-
-Mon Dec 8 15:03:30 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/syck/syck.c (syck_io_str_read): get rid of buffer overflow.
-
-Mon Dec 8 13:02:11 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/uri/common.rb: new method URI.regexp. [ruby-dev:22121]
-
- * test/uri/test_common.rb: add test for URI.regexp.
-
-Mon Dec 8 12:44:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c: define swap16 and swap32 only if they are not
- defined. OpenBSD defines these macros. [ruby-dev:22181]
-
-Sun Dec 7 20:54:17 2003 Tanaka Akira <akr@m17n.org>
-
- * ext/iconv/iconv.c (map_charset): make case sensitive.
- ext/iconv/charset_alias.rb (charset_alias): don't ignore
- config.charset's information. sort aliases.
-
-Sat Dec 6 22:58:03 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ssl.c (ossl_start_ssl): new function to wrap
- SSL_connect and SSL_accept; if SSL_connect (or SSL_accept) returned
- but not finished the handshake process, we should retry it.
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_connect): call ossl_start_ssl.
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_accept): ditto.
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_read): allow signal traps.
-
-Sat Dec 6 21:45:10 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * io.c (flush_before_seek): flush before seek on any platform.
-
- * configure.in: ditto.
-
-Sat Dec 6 17:23:00 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/soap.rb(SOAP::Env.getenv): allow upcase environment variable
- as well as downcase one.
-
- * lib/soap/netHttpClient.rb(SOAP::NetHttpClient#proxy=): check URI.
-
-Fri Dec 5 23:22:30 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions::assert_raises,
- Test::Unit::Assertions::assert_nothing_raised): use the last
- argument as message unless class object.
-
- * test/testunit/test_assertions.rb (test_assert_raises): test for
- multiple exception list. [ruby-core:01891]
-
- * test/testunit/test_assertions.rb (test_assert_nothing_raised): test
- for non-exception classes.
-
-Fri Dec 5 22:23:04 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/netHttpClient.rb: proxy support did not work. fixed.
-
- * lib/soap/property.rb: add class methods for loading property from
- stream/file/propertyfile. propertyfile is a file which is located at
- somedir in $:.
-
- * lib/soap/soap.rb, lib/soap/wsdlDriver.rb, lib/soap/rpc/driver.rb,
- lib/wsdl/importer.rb: load property from propertyfile 'soap/property'
- e.g. /usr/local/lib/ruby/site_ruby/1.8/soap/property.
-
- * test/soap/test_property.rb, test/soap/test_streamhandler.rb: new file.
-
-Fri Dec 5 17:26:23 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_exec_end_proc): maintain tmp_end_procs.
- [ruby-dev:22154]
-
-Fri Dec 5 13:36:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_exec_end_proc): should not clear end_procs and
- ephemeral_end_procs before execution. [ruby-dev:22144]
-
- * eval.c (rb_obj_extend): call Module#extended hook after
- extended_object. [ruby-list:38866]
-
- * object.c (Init_Object): Module#extended defined.
-
-Fri Dec 5 13:17:30 2003 Tanaka Akira <akr@m17n.org>
-
- * test/ruby/test_pipe.rb: use IO.pipe instead of IO.popen.
-
-Fri Dec 5 11:54:45 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_read): follow IO#read.
-
- * test/ruby/ut_eof.rb, test/ruby/test_file.rb, test/ruby/test_pipe.rb,
- test/stringio/test_stringio.rb: add EOF test.
-
-Fri Dec 5 02:49:35 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions::assert_raises):
- allow multiple exception list. [ruby-core:01884]
-
- * lib/test/unit/assertions.rb (Test::Unit::Assertions::assert_nothing_raised):
- check whether arguments are subclass of Exception.
-
-Thu Dec 4 23:54:00 2003 Rick Ohnemus <rick.ohnemus@systemware.com>
-
- * dln.c (aix_loaderror): should not use member named 'errno' which
- might be a macro (e.g. on AIX).
-
-Thu Dec 4 23:32:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (read_all): do not depend on lseek position.
- [ruby-dev:22026]
-
-Thu Dec 4 22:37:26 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval): preserve $! value when retry happens in the
- rescue clause. [ruby-talk:86697]
-
-Thu Dec 4 21:50:07 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/drb/drb.rb (DRb::DRbMessage::send_request, send_reply):
- should rescue errors and re-raise DRbConnError on write too.
- [ruby-dev:22132]
-
-Thu Dec 4 16:41:17 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (exc_list): allow expanding list. [ruby-dev:22134]
-
-Thu Dec 4 14:09:24 2003 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb (test_cp): test if the error is
- kind of SystemCallError. It is needless details that which errno
- is set on each systems.
-
-Thu Dec 4 13:24:13 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/monitor.rb: use Object#__send__ instead of Object#send.
-
-Thu Dec 4 13:17:45 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/streamHandler.rb: support latest released version of
- http-access2.
-
-Thu Dec 4 13:04:44 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/soap.rb: add SOAP::Env module for environment repository
- such as HTTP_PROXY.
-
- * lib/soap/property.rb: property implementation.
-
- * lib/soap/streamHandler.rb, lib/soap/wsdlDriver.rb,
- lib/soap/rpc/driver.rb: use soap/property.rb.
-
- * lib/wsdl/importer.rb, lib/soap/wsdlDriver.rb, lib/soap/rpc/driver.rb:
- use SOAP::Env.
-
- * lib/soap/netHttpClient.rb: add basic_auth, ssl_config, and cookie
- management interface, but ignored for now.
-
- * lib/xsd/charset.rb: add XSD::Charset.encoding= interface to set
- wiredump charset explicitly. it was fixed to 'utf-8' when iconv or
- uconv module was found.
-
-Thu Dec 4 10:43:58 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/dl/sym.c (rb_dlsym_guardcall): __declspec(noinline) is VC7
- feature.
-
-Thu Dec 4 10:27:12 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: update hyperlink to the Japanese document.
-
-Thu Dec 4 09:12:43 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_asn1.c (asn1time_to_time): should check that
- the underlying value of ASN1_TIME isn't NULL. [ruby-core:01881]
-
-Thu Dec 4 08:29:43 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/server.rb (GenericServer#start): should rescue
- Exception to avoid unexpected aborting. [ruby-core:01853]
-
- * lib/webrick/server.rb (GenericServer#start_thread): should check
- that peeraddr isn't nil before printing.
-
- * lib/webrick/httpresponse.rb (HTTPResponse#start_thread): should
- rescue Exception to avoid unexpected aborting of thread.
-
-Thu Dec 4 03:48:59 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Pathname#link, Pathname#symlink): obsoleted.
- (Pathname#make_link, Pathname#make_symlink): new method.
-
-Thu Dec 4 01:45:24 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (argf_read): should not terminate on empty string; wait
- until real EOF. [ruby-dev:21969]
-
- * io.c (argf_read): should adjust length to read, when length is
- specified and read spans command line argument files.
-
-Wed Dec 3 19:38:36 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: correct fcntl parameter. [ruby-dev:22120]
-
-Wed Dec 3 13:49:07 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: 'format'==>'Kernel.format' (avoid override trouble)
-
- * ext/tk/lib/tkafter.rb: ditto.
-
- * ext/tk/lib/tkcanvas.rb: ditto.
-
- * ext/tk/lib/tkdialog.rb: ditto.
-
- * ext/tk/lib/tktext.rb: ditto.
-
-Wed Dec 3 13:28:13 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in (lex.c): try gperf first, and copy from the source
- directory if failed. [ruby-dev:22123]
-
- * ext/extmk.rb (MTIMES): let makefiles depend to mkmf.rb.
-
- * lib/mkmf.rb (configuration): DLDFLAGS was duplicated.
-
-Tue Dec 2 23:18:12 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: wrote the warning about HTTP_PROXY environment
- variable.
-
-Tue Dec 2 21:31:42 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bin/testrb: new test runner. [ruby-core:01845]
-
- * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner.run,
- Test::Unit::AutoRunner#process_args): take test list to run and
- options.
-
- * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner::RUNNERS,
- Test::Unit::AutoRunner#run): should not exit inside a library,
- just return the result instead.
-
- * lib/test/unit.rb: ditto.
-
- * test/runner.rb: exit with the test result.
-
-Tue Dec 2 20:18:48 2003 Eric Sunshine <sunshine@sunshineco.com>
-
- * configure.in (AC_PROG_YACC): AC_DEFINE(OLD_YACC) if Yacc is found
- instead of Bison or byacc.
-
- * parse.y: If OLD_YACC is defined, ensure that YYMAXDEPTH is at least
- 10000 (Bison's default) since some old versions of Yacc define it as
- low as 150 by default, which is too low for Ruby to parse some files,
- such as date/format.rb. Among other issues, the parse problem causes
- "make test" to fail.
-
-Tue Dec 2 20:03:20 2003 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb: check if Pathnames are usable
- for arguments.
-
-Tue Dec 2 04:22:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/assertions.rb: fixed #assert_no_match message.
-
- * test/testunit/test_assertions.rb: ditto.
-
-Tue Dec 2 00:43:00 2003 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/syck.c: string buffering bug. decrementing by full
- max_size now. [ruby-core:01834]
-
-Mon Dec 1 21:33:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * numeric.c (num_sadded): prohibit singleton method definition for
- Numerics. fill yet another gap between Fixnum and Bignum.
-
-Mon Dec 1 17:33:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (htov16): converts endian using swap16. htov32(), hton16,
- hton32 as well. [ruby-talk:85377]
-
- * pack.c (swap16): swap 2 bytes no matter how big short is on the
- platform. swap32() is also prepared.
-
- * numeric.c (rb_num2int): returns long to preserve information.
- rb_fix2int(), rb_num2uint(), rb_fix2uint() as well.
- [ruby-talk:85377]
-
- * numeric.c (rb_num2uint): should not check for value range if the
- source value is negative.
-
-Mon Dec 1 17:14:34 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sample/optparse/opttest.rb: added.
-
-Mon Dec 1 16:10:52 2003 Dave Thomas <dave@pragprog.com>
-
- * lib/rdoc/rdoc.rb: (etc) initial merge into main tree.
-
-Mon Dec 1 14:17:49 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (fu_each_src_dest0): call #to_str to allow
- Pathname for arguments. [ruby-core:01795]
-
- * test/fileutils/test_fileutils.rb: does much strict test on
- "same" files detecting.
-
-Mon Dec 1 09:28:14 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub
- (XCFLAGS): re-export $(XCFLAGS).
-
- * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub
- (ARCH_FLAG): export $(ARCH_FLAG) (perhaps empty value).
-
-Mon Dec 1 01:03:27 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/mkmf.rb (TRY_LINK, link_command): added support for DLDFLAGS
- and ARCH_FLAG. [ruby-dev:22085]
-
-Sun Nov 30 20:18:07 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: keep ARCH_FLAG separate. export ARCH_FLAG.
- [ruby-core:01819]
-
- * Makefile.in: add ARCH_FLAG to CFLAGS.
-
- * Makefile.in: add @CPPFLAGS@ to CPPFLAGS.
-
- * lib/mkmf.rb (link_command, cc_command): use ARCH_FLAG.
-
- * lib/mkmf.rb (configuration): add ARCH_FLAG to DLDFLAGS.
-
- * Makefile.in: add ARCH_FLAG to DLDFLAGS.
-
- * configure.in: should put getcwd in AC_CHECK_FUNCS, not
- AC_REPLACE_FUNCS. [ruby-core:01826]
-
-Sun Nov 30 18:22:48 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: do not override CCDLDFLAGS, LDFLAGS, XLDFLAGS,
- DLDFLAGS and LDSHARED.
-
- * configure.in: XCFLAGS for compiling ruby itself. ARCH_FLAG is
- reflected in CFLAGS.
-
- * lib/mkmf.rb: ditto. do not import XCFLAGS from config.status.
-
-Sun Nov 30 17:37:36 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: bug fix [ruby-talk:86746]
-
-Sun Nov 30 13:02:00 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/encodingstyle/soapHandler.rb: refactoring - Simplifying
- Conditional Expressions.
-
- * lib/wsdl/soap/definitions.rb: refactoring - Move Method.
-
- * test/xsd/{test_noencoding.rb,noencoding.xml}: new files. test for
- encoding unspecified XML file parsing.
-
- * test/wsdl/{test_fault.rb,map,datetime}: new files. test of
- SOAPFault, dateTime and Apache's Map.
-
-Sun Nov 30 09:35:14 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_update): get rid of SEGV at just allocated String.
- [ruby-core:01812]
-
-Fri Nov 28 23:19:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (gc_mark): explicitly check mark recursion levels, instead
- of unreliable stack length.
-
-Fri Nov 28 22:49:56 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/rinda/rinda.rb: fix TupleSpaceProxy#read, read_all.
-
-Fri Nov 28 21:44:40 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * test/fileutils/test_fileutils.rb (test_ln_s): should be a file, not
- a directory for FreeBSD.
-
-Fri Nov 28 19:37:56 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (env_has_value, env_index): must match exactly.
-
- * test/ruby/test_env.rb (test_has_value, test_index): condition for
- aboves.
-
-Fri Nov 28 17:59:20 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_env.rb: add tests for ENV.
-
-Fri Nov 28 17:47:46 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb (DRbMessage#load): rescue Errno::* and raise
- DRbConnError.
-
-Fri Nov 28 15:41:15 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Pathname#realpath): obsolete the force_absolute
- argument.
-
-Fri Nov 28 14:41:52 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/streamHandler.rb: drop unused http parameters.
-
- * lib/soap/encodingstyle/soapHandler.rb, lib/soap/mapping/factory.rb,
- lib/soap/mapping/mapping.rb, lib/soap/mapping/registry.rb,
- lib/wsdl/soap/complexType.rb: ApacheSOAP's map support was broken
- under WSDL dynanic client environment. fixed.
-
- * test/wsdl/raa/*: add tests.
-
- * lib/xsd/datatypes.rb: dateTime precision bug fix (at least, I hope.)
- bug of soap4r. XSDDateTimeImple.to_time passed a Float to
- Time.local/Time.gm as an usec, and NUM2LONG(rb_num2long for Float)
- causes rounding error.
-
- * test/soap/test_basetype.rb, test/xsd/test_xsd.rb: add tests.
-
-Fri Nov 28 04:15:24 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (method_arity): used wrong Proc object. [ruby-talk:86504]
-
-Fri Nov 28 00:47:29 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_f_exit), process.c (rb_f_exit_bang): treat true as
- success, false as failure. [ruby-dev:22067]
-
- * eval.c (rb_f_abort, rb_thread_switch), process.c (rb_f_system): use
- ANSI macro instead of hard coded value.
-
- * eval.c (rb_f_exit), process.c (rb_f_exit_bang): use VALUEs not but
- TYPEs.
-
-Thu Nov 27 22:05:48 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * eval.c, gc.c: FreeBSD/ia64 currently does not have a way for a
- process to get the base address for the RSE backing store, so
- hardcode it for the moment.
- [submitted by: Marcel Moolenaar <marcel@FreeBSD.org>]
-
-Thu Nov 27 17:36:42 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tkafter.rb: bug fix on TkTimer#cancel_on_exception=(mode).
- TkTimer#wait receives the exception of the callback.
- The exception is kept on @return_value.
-
-Thu Nov 27 16:58:48 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * win32/win32.c (rb_w32_stat): remove _fullpath() for NUL: device.
-
-Wed Nov 26 15:38:47 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * test/fileutils/test_fileutils.rb (test_ln_s): should take the
- existing symbolic link for OpenBSD.
-
-Wed Nov 26 04:48:42 2003 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/token.c: removed YYTOKTMP references which
- were causing buffer overflows on large block scalars,
- comments, quoted scalars and plain scalars.
-
- * ext/syck/rubyext.c: dynamic changing of buffer size.
-
- * ext/syck/syck.h: default buffer size of 4k.
-
-Wed Nov 26 00:55:30 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpresponse.rb: add HTTPResponse#keep_alive=.
-
- * lib/webrick/httpserver.rb (HTTPServer#run): should pass the
- request's keep_alive flag to the response.
-
-Tue Nov 25 21:41:35 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * defines.h (ENV_IGNORECASE): should define when DOSISH without
- human68k. [ruby-dev:22047]
-
- * hash.c (env_has_value, env_index): don't ignore case of value.
- [ruby-dev:22048]
-
-Tue Nov 25 21:39:37 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (path_check_1): honor sticky bits always.
- [ruby-talk:86273]
-
-Tue Nov 25 20:02:14 2003 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb: do test in more deep
- directory.
-
- * test/fileutils/test_nowrite.rb: ditto.
-
-Tue Nov 25 19:04:23 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (URI::Generic#find_proxy): ENV case sensitivity test
- refined.
-
-Tue Nov 25 18:13:30 2003 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb: chdir Dir.tmpdir before each
- test. [ruby-dev:22045]
-
- * test/fileutils/test_nowrite.rb: ditto.
-
-Tue Nov 25 17:52:11 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (URI::Generic#find_proxy): use http_proxy under CGI
- if the environment variable is case sensitive.
-
-Tue Nov 25 16:41:33 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/wsdl/multiplefault.wsdl, test/wsdl/test_multiplefault.rb:
- removed. this test requires extra libraries in soap4r/1.5.*.
-
-Tue Nov 25 16:24:42 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/**/*.rb, lib/wsdl/**/*.rb, lib/xsd/**/*.rb: changed license;
- GPL2 -> Ruby's.
-
- * lib/soap/rpc/driver.rb, lib/soap/wsdlDriver.rb,
- lib/soap/streamHandler.rb: add interface to streamhandler.
-
- * lib/soap/marshal.rb: raise error if parse fails.
-
- * lib/soap/netHttpClient.rb: add https support. Patched by
- Oliver M. Bolzer.
-
- * lib/soap/netHttpClient.rb: dump HTTP response message body by itself.
-
- * lib/soap/rpc/driver.rb, lib/soap/rpc/proxy.rb,
- lib/soap/wsdlDriver.rb: add driver#mandatorycharset interface to foce
- using charset for parsing response from buggy server.
-
- * lib/soap/encodingstyle/soapHandler.rb: support Apache Axis's half
- typed multi-ref array.
-
- * lib/soap/mapping/factory.rb, lib/soap/mapping/registry.rb: map
- SOAPStruct which has multi-accessors which name are the same, to an
- array.
-
- * lib/soap/rpc/element.rb: fixed illegal parameter order.
-
- * lib/soap/rpc/element.rb: element name of response message could have
- the name other than 'return'.
-
- * lib/wsdl/operation.rb, lib/wsdl/operationBinding.rb,
- lib/wsdl/soap/classDefCreator.rb, lib/wsdl/soap/methodDefCreator.rb,
- lib/wsdl/soap/methodDefCreatorSupport.rb: WSDL/1.1 allows plural
- fault definition in a operation. [ruby-talk:84948]
-
- * test/wsdl/multiplefault.wsdl, test/wsdl/test_multiplefault.rb: add
- test for above fix.
-
- * lib/wsdl/soap/complexType.rb: support WSDL array definition with
- maxOccures="unbound".
-
- * lib/xsd/charset.rb: use cp932 under emx. Patched by
- Siena. / SHINAGAWA, Norihide in [ruby-dev:21972]
-
- * lib/xsd/xmlparser/parser.rb: set @charset nil by default. Nil means
- 'follow encoding declaration in XML'.
-
- * sample/soap/digraph.rb, sample/wsdl/amazon/wsdlDriver.rb,
- sample/wsdl/googleSearch/sampleClient.rb,
- sample/wsdl/googleSearch/wsdlDriver.rb,
- test/wsdl/test_emptycomplextype.rb,
- test/wsdl/marshal/test_wsdlmarshal.rb,
- test/xsd/test_xmlschemaparser.rb: use File.open(...) { |f| f.read }
- instead of File.open(...).read. [ruby-dev:21964]
-
- * test/wsdl/emptycomplextype.wsdl, test/wsdl/test_emptycomplextype.rb:
- simplify the test case.
-
- * test/wsdl/axisArray/*: add tests for axis's array encoding.
-
-Tue Nov 25 16:15:29 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ruby.h: don't treat Cygwin as Windows.
-
-Tue Nov 25 15:18:28 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * configure.in: change default value of --enable-pthread (default: no)
-
-Tue Nov 25 07:31:16 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (primary): allow newlines just before right argument
- parenthesis. (ruby-bugs:PR#1221)
-
-Mon Nov 24 23:32:06 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (OpenURI.open_loop, URI::HTTP#proxy_open): use
- catch/throw for redirection instead of exception.
- (OpenURI.open_loop, OpenURI.redirectable?): restrict redirection.
-
-Mon Nov 24 19:59:48 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (URI::Generic#find_proxy): use CGI_HTTP_PROXY
- instead of HTTP_PROXY in the CGI environment.
-
-Mon Nov 24 19:32:55 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/etc/extconf.rb: check for pw_passwd in struct passwd and
- gr_passwd in struct group for DJGPP.
-
- * ext/etc/etc.c: ditto.
-
- * ext/Setup.dj: support for curses, etc, zlib.
-
-Mon Nov 24 17:00:00 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb: validate option names.
- :content_length_proc and :progress_proc option implemented.
-
-Mon Nov 24 14:53:10 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub
- (XCFLAGS): output empty value instead of `-DRUBY_EXPORT'.
-
-Sat Nov 22 23:09:45 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: set enable_pthread to no on MinGW.
-
-Sat Nov 22 22:56:20 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * configure.in: add --enable-pthread option (default: yes)
-
-Sat Nov 22 22:48:46 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: add Tk.grab_release and fix bug of TkComposite
-
- * ext/tk/lib/tkafter.rb: bug fix of TkAfter#start
-
- * ext/tk/sample/tkcombobox.rb: new sample script
-
- * ext/tcltklib/tcltklib.c: add native thread check
-
-Sat Nov 22 18:49:47 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/curses/curses.c (window_nodelay): nodelay() of NetBSD's
- libcruses returns no value, just like keypad().
-
-Sat Nov 22 17:36:36 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub
- (HAVE_GETCWD): output to config.h.
-
- * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub
- (XCFLAGS): output to config.status.
-
-Sat Nov 22 13:10:10 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (have_st_ino?): djgpp has valid st_ino.
-
-Sat Nov 22 11:28:48 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (Init_stack): stack region is far smaller than usual if
- pthread is used.
-
-Sat Nov 22 07:30:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/util/backtracefilter.rb: fixed a bug that occurred
- when an exception had no backtrace.
-
- * test/testunit/util/test_backtracefilter.rb: ditto.
-
-Fri Nov 21 16:44:18 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tkentry.rb: fix the encoding trouble of percent
- substitutions on validatecommand option of TkEntry widget
-
- * ext/tk/lib/tk.rb: fix bug on {pack|grid}_propagate() method
-
-Fri Nov 21 16:12:11 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * ruby.1: Fix markups and grammar.
-
-Fri Nov 21 14:49:42 2003 Minero Aoki <aamine@loveruby.net>
-
- * ruby.1: wrote about ruby related environment variables.
-
-Fri Nov 21 12:28:03 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_extended): singleton methods should not be checked
- when dumping via marshal_dump() or _dump(). [ruby-talk:85909]
-
-Fri Nov 21 01:40:00 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * configure.in: check <pthread.h>
-
- * ruby.h: include pthread.h if existence.
- define is_ruby_native() macro when not HAVE_NATIVETHREAD
-
- * eval.c: undef is_ruby_native() function when not HAVE_NATIVETHREAD
-
-Fri Nov 21 00:43:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/assertions.rb: use #__send__ instead of #send.
-
- * lib/test/unit/testcase.rb: ditto.
-
-Thu Nov 20 19:19:22 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in: don't find the Cygwin's pthread library on MinGW.
-
-Thu Nov 20 19:15:50 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (have_st_ino?): emx (OS/2 with EMX) does not
- have st_ino (always 0). [ruby-dev:21972]
-
- * lib/fileutils.rb (rename_cannot_overwrite_file?): emx does not
- allow overwriting files by rename(2).
-
- * test/fileutils/test_fileutils.rb: windows? ->
- have_drive_letter?, have_file_perm?
-
-Thu Nov 20 17:50:58 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/tkballoonhelp.rb: new sample script
-
- * ext/tk/sample/tkmultilistbox.rb: ditto
-
- * ext/tk/sample/tktextframe.rb: ditto
-
-Thu Nov 20 13:37:34 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ruby.h: define is_ruby_native_thread() for no native thread
- environment
-
- * eval.c: ditto
-
-Thu Nov 20 12:42:47 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * configure.in: always check existence of the pthread library
-
- * ruby.h: define macros for ruby's native thread check
-
- * eval.c: add ruby's native thread check
-
- * gc.c: ditto
-
-Wed Nov 19 14:45:18 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (to_ary): print more friendly warning message.
-
-Wed Nov 19 14:32:08 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (fu_same?): add djgpp and wince.
-
- * lib/fileutils.rb (cannot_overwrite_file?): add wince.
-
-Wed Nov 19 11:04:47 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/fileutils.rb (cannot_overwrite_file?, have_st_ino?): bccwin32
- is same as mswin32.
-
-Wed Nov 19 07:54:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit.rb: do not run tests if $! is set.
-
- * lib/test/unit/assertionfailederror.rb: extend StandardError instead
- Exception (irb catches the former but not the latter).
-
-Tue Nov 18 23:31:36 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * missing/memmove.c (memmove): take void *, not char *.
-
- * missing.h (memmove): ditto.
-
- * missing.h (strchr, strrchr): return char *, not int.
-
-Tue Nov 18 22:20:10 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (fu_same?): temporal fix for windows.
-
-Tue Nov 18 19:05:04 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (fu_same?): check by inode instead of path
- name, to detect two hard links pointing to the same content.
-
- * test/fileutils.rb: did not create correctly looped symlinks.
-
-Tue Nov 18 18:23:05 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_read): behave as IO at empty string.
- [ruby-dev:21939], [ruby-dev:21941]
-
- * ext/stringio/stringio.c (strio_getc, strio_getline): set EOF flag.
-
- * ext/stringio/stringio.c (strio_rewind, strio_seek, strio_ungetc):
- clear EOF flag.
-
- * test/stringio/test_stringio.rb: imported from [ruby-dev:21941].
-
-Tue Nov 18 14:06:35 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/fileutils.rb (fu_each_src_dest): raise if src==dest.
- [ruby-talk:85344] [ruby-core:01699]
-
- * lib/fileutils.rb: use Object#is_a? instead of Class#=== to allow
- e.g. remote objects for receivers.
-
- * lib/fileutils.rb: FileTest -> File.
-
- * lib/fileutils.rb: put parentheses for arguments of File.xxxx?
-
- * test/fileutils/test_fileutils.rb (test_cp): test "cp a a".
-
- * test/fileutils/test_fileutils.rb (test_mv): test "mv a a".
-
- * test/fileutils/test_fileutils.rb (test_ln): test "ln a a".
-
- * test/fileutils/test_fileutils.rb (test_ln_s): test "ln_s a a".
-
- * test/fileutils/test_fileutils.rb (test_install): test "install a a".
-
- * test/fileutils/fileasserts.rb: new method assert_symlink.
-
- * test/fileutils/fileasserts.rb: assert_is_directory -> assert_directory.
-
-Mon Nov 17 19:38:49 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (getcwdofdrv): avoid using getcwd() directly, use
- my_getcwd() instead.
-
- * merged NeXT, OpenStep, Rhapsody ports patch from Eric Sunshine
- <sunshine@sunshineco.com>. [ruby-core:01596]
-
-Mon Nov 17 10:50:27 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser::Completion::complete): allow least
- common completion for three or more candidates.
-
-Mon Nov 17 09:41:38 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/ui/tk/testrunner.rb,
- lib/test/unit/ui/gtk/testrunner.rb:
- run GUI main loop in sub thread.
-
- * lib/test/unit/ui/gtk2/testrunner.rb: imported from rough.
-
- * lib/test/unit/autorunner.rb (keyword_display): sort keywords.
-
-Sun Nov 16 18:10:57 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval): iterator should return value from next inside
- begin/rescue/end. (ruby-bugs:PR#1218)
-
-Sun Nov 16 13:26:07 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): LINK check earlier than anything else,
- i.e. do not dump TYPE_IVAR for already dumped objects.
- (ruby-bugs:PR#1220)
-
- * eval.c (rb_eval): call "inherited" only when a new class is
- generated; not on reopening.
-
- * eval.c (eval): prepend error position in evaluating string to
- "mesg" attribute string only when it's available and is a
- string.
-
-Sun Nov 16 12:16:10 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/protocol.rb: logging response body. [experimental]
- [ruby-list:38800]
-
-Sun Nov 16 10:49:38 2003 Gavin Sinclair <gsinclair@soyabean.com.au>
-
- * lib/thread.rb (Thread.exclusive): wrap method definition in
- class Thread to enable rdoc to process.
-
-Sun Nov 16 09:45:23 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (set_debug_output): warn if method is called
- after #start. [ruby-dev:38798]
-
-Sun Nov 16 04:41:33 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (eval): do not re-raise exception to avoid unnecessary
- exception copying, instead modify exception and internal
- information to adjust eval().
-
- * eval.c (backtrace): can return the current frame information
- only if lev < -1.
-
-Sat Nov 15 22:16:42 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * /ext/openssl/ossl_x509ext.c (ossl_x509extfactory_create_ext):
- refine error message.
-
-Sat Nov 15 10:05:40 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (OpenURI.open_loop, OpenURI::HTTP#proxy_open):
- refactored to support options.
- (Buffer): maintain size by this class.
-
-Sat Nov 15 07:40:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_method_node): new API to retrieve method body.
-
-Fri Nov 14 13:21:30 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: fix (en-bugged at 2003/11/07)
-
- * ext/tk/lib/tkdialog.rb: TkDialog.new accepts a parent widget
- argument [ruby-talk:85066]
-
-Thu Nov 13 20:53:35 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (Kernel[#.]open): hard coded URI schemes removed.
- [ruby-ext:02251]
-
-Thu Nov 13 19:17:00 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * lib/test/unit/ui/tk/testrunner.rb: use grid and panedwindow
- (if available)
-
-Thu Nov 13 17:56:41 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/open-uri.rb (OpenURI.open_uri): use File::RDONLY.
- reported by Take_tk <ggb03124@nifty.ne.jp>.
- [ruby-ext:02245]
-
-Thu Nov 13 16:45:53 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_x509req.c (ossl_x509req_to_der): add function for
- X509::Request#to_der.
-
-Thu Nov 13 11:31:14 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser::Completion#complete): prior shorter
- name to containing longer name.
-
-Thu Nov 13 06:08:54 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: stop freezing some classes
-
- * ext/tk/lib/multi-tk.rb: ditto.
-
-Wed Nov 12 17:32:49 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/assertions.rb (assert_throws, assert_nothing_thrown):
- uncaught throw in sub thread raises ThreadError.
-
- * lib/test/unit/ui/tk/testrunner.rb (setup_ui): "expand" is not
- necessary.
-
-Wed Nov 12 14:09:43 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/monitor/test_monitor.rb: fix the timing problem by Queue.
-
-Wed Nov 12 12:59:44 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * test/monitor/test_monitor.rb: added.
-
-Wed Nov 12 10:14:28 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/monitor.rb: refactored. Thanks, Gennady Bystritsky.
-
-Wed Nov 12 06:11:39 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl.c (ossl_x509_sk2ary, ossl_x509crl_sk2ary):
- add functions to convert STACK into Array.
-
- * ext/openssl/ossl.h: add prototypes.
-
- * ext/openssl/ossl_pkcs7.c (ossl_pkcs7_set_certificates,
- ossl_pkcs7_get_certificates, ossl_pkcs7_get_crls,
- ossl_pkcs7_set_crls): add functions for PKCS7#certificates=
- PKCS7#certificates, PKCS7#crls= and PKCS7#crls.
-
-Wed Nov 12 00:47:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/ui/testrunnermediator.rb: should require 'test/unit'.
-
-Tue Nov 11 23:54:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/ui/gtk/testrunner.rb: added a rescue clause to handle
- the case when the requested font is not available.
-
-Tue Nov 11 22:44:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (appendline): file may not end with newline. a bug if
- READ_DATA_PENDING_PTR is defined. [ruby-talk:84925]
-
-Tue Nov 11 10:42:41 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: raise an exception when creating TkWindow
- object, because TkWindow class is an abstract class.
-
-Tue Nov 11 03:30:43 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/ext/openssl/ossl_conf.c (ossl_config_get_value): return nil
- if the specified value doesn't exist.
-
- * lib/ext/openssl/ossl_conf.c (ossl_config_get_section): return
- a empty hash if the specified section doesn't exist.
-
-Mon Nov 10 11:40:29 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/monitor.rb (wait): return true on signal/broadcastfalse and
- false on timeout. Thanks Gennady Bystritsky.
-
-Mon Nov 10 00:07:10 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (primary): primary_value may be 0 when syntax error.
- [ruby-talk:84893]
-
-Sun Nov 9 02:05:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/assertions.rb: un-deprecated #assert_not_nil to
- maintain symmetry with #assert_nil. Also added better output for
- #assert_kind_of.
-
- * test/testunit/tc_assertions.rb: ditto.
-
-Sat Nov 8 18:50:20 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/wsdl/raa/*: add new testcase for WSDL loading, parsing and
- reading.
-
- * test/soap/marshal/*: backport from soap4r/1.5.1. all differences are
- for ruby/1.6.
-
- * lib/soap/*: backport from soap4r/1.5.1. all differences are for
- ruby/1.6.
-
- * lib/wsdl/data.rb, lib/wsdl/xmlSchema/data.rb: move definition of
- ArrayTypeAttrName from ::WSDL::XMLSchema::* to ::WSDL::*.
- [ruby-talk:84813]
-
- * lib/wsdl/soap/definitions.rb: element name typo in custom exception
- struct definition which is needed for wsdlDriver; camelCase ->
- underscore_name.
-
-Sat Nov 8 13:49:50 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * configure.in: improvement of pthread check
-
-Sat Nov 8 13:28:46 2003 Takaaki Tateishi <ttate@ttsky.net>
-
- * ext/dl/sym.c: Add DL.win32_last_error and DL.last_error.
- Thanks, Kaoru Shirai.
-
-Sat Nov 8 06:19:38 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: To fix 'pthread-enabled Tcl/Tk' problem,
- TclTkIp#_eval calls Tcl_Eval() on the mainloop thread only
- (queueing a handler to the EventQueue).
-
- * ext/tcltklib/README.1st: edit the description of '--with-pthread-ext'
-
-Fri Nov 7 23:23:04 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (Pathname#+): if self or the argument is `.', return
- another.
- (Pathname#parent): if self is `.', return `..'.
- (Pathname#children): if self is `.', don't prepend self for a
- pathname in a result.
- (Pathname#join): re-implemented using Pathname#+.
- (Pathname#find): if self is `.', remove `./' prefix of yielding
- pathname.
-
-Fri Nov 7 10:23:24 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/socket.c (make_hostent): get rid of SEGV on aliases
- lookup failure. (ruby-bugs:PR#1215)
-
-Fri Nov 7 04:08:05 2003 UENO Katsuhiro <katsu@blue.sky.or.jp>
-
- * ext/zlib/zlib.c (Init_zlib): define Zlib::GzipReader#each_line as
- an alias of Zlib::GzipReader#each.
-
-Fri Nov 7 01:03:16 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_load): save and restore rb_prohibit_interrupt.
- [ruby-dev:21857]
-
-Thu Nov 6 18:05:07 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_inspect): show the path also at a closed file.
- [ruby-dev:21851]
-
-Thu Nov 6 11:42:07 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_set_string, strio_reopen): check
- tainted.
-
- * ext/stringio/stringio.c (strio_copy, strio_ungetc, strio_write,
- strio_putc): add infection.
-
- * ext/stringio/stringio.c (strio_path): just nil. [ruby-dev:21846]
-
- * ruby.c (proc_options): reserve searched script path in the
- source file name table. [ruby-list:38765]
-
- * lib/optparse.rb (OptionParser::Completion#complete): default not to
- ignore case on completion. [ruby-talk:84726]
-
- * win32/win32.c (make_cmdvector): process backslashes even if a quote
- is not enclosed.
-
-Wed Nov 5 23:49:45 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * sample/openssl/gen_csr.rb: there (at least) is a CA which does not
- accept DN in UTF8STRING format. it's a sample.
-
-Wed Nov 5 22:55:16 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * configure.in, eval.c, signal.c: : add '--with-pthread-ext'
- option to fix the pthread trouble on 'tcltklib'
-
- * ext/tcltklib/README.1st: add the description of '--with-pthread-ext'
-
- * ext/tk/lib/tktext.rb: add TkText#text_copy, text_cut, text_paste
- to support Tcl/Tk8.4's tk_textCopy, tk_textCut, tk_textPaste
-
- * ext/tk/lib/tk.rb: add TkMenu#set_focus support Tcl/Tk's
- tk_menuSetFocus
-
-Wed Nov 5 17:33:45 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_load): allow interrupt during loaded program
- evaluation. [ruby-dev:21834]
-
- * hash.c (rb_hash_fetch): always warn if default argument and a
- block are supplied at the same time. [ruby-dev:21842]
-
- * hash.c (env_fetch): ditto.
-
- * array.c (rb_ary_fetch): ditto.
-
-Wed Nov 5 19:08:47 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (OptionParser::Switch::PlacedArgument::parse):
- do not remove next argument if empty value is placed.
-
- * test/optparse: added.
-
-Wed Nov 5 17:05:18 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/ui/gtk/testrunner.rb: typo.
-
-Wed Nov 5 11:13:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * string.c: add #include "version.h". this file still depends on it.
-
- * Makefile.in, bcc32/Makefile.sub, win32/Makefile.sub,
- wince/Makefile.sub: add version.h dependency to string.c.
-
-Wed Nov 5 09:14:23 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/monitor.rb: revert to the previous revision.
-
-Wed Nov 5 08:39:51 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/https.rb (HTTPRequest#parse): set @client_cert_chain.
-
- * lib/webrick/https.rb (HTTPRequest#meta_vars): create
- SSL_CLIENT_CERT_CHAIN_n from @client_cert_chain.
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_get_peer_cert_chain): return nil
- if no cert-chain was given.
-
-Tue Nov 4 23:44:48 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub:
- remove needless version.h dependency.
-
-Tue Nov 4 23:38:43 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * class.c, hash.c, string.c: remove #include "version.h".
-
- * Makefile.in: remove needless version.h dependency.
-
-Tue Nov 4 06:54:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (read_all): fptr->f may be NULL, if IO is closed in the
- signal handler.
-
- * io.c (io_read): ditto.
-
- * string.c (get_pat): remove 1.8.0 warning code.
-
- * string.c (rb_str_match): extend warning until 1.8.2.
-
- * string.c (rb_str_match2): ditto.
-
- * class.c (class_instance_method_list): remove 1.8.0 warnings.
- method_list now recurs. [ruby-dev:21816]
-
- * class.c (rb_obj_singleton_methods): ditto.
-
- * array.c (rb_ary_select): remove select with block.
- [ruby-dev:21824]
-
- * hash.c (rb_hash_select): ditto.
-
- * hash.c (env_select): ditto.
-
- * re.c (match_select): ditto.
-
- * struct.c (rb_struct_select): ditto.
-
-Mon Nov 3 22:53:21 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/racc/parser.rb: synchronize with Racc 1.4.4.
-
- * ext/racc/cparse/cparse.c: ditto.
-
- * ext/racc/cparse/cparse.c (parse_main): should abort when
- the length of LR state stack <=1, not ==0.
-
-Mon Nov 3 08:50:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * process.c (check_uid_switch): remove duplicated error messages.
-
- * process.c (check_gid_switch): ditto.
-
-Sun Nov 2 02:28:33 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/ssl.rb: new option :SSLExtraChainCert.
-
-Sun Nov 2 01:02:04 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * string.c (rb_str_hash): Update the HASH_PERL alternative hash
- algorithm in sync with Perl 5.8.
-
- * st.c (strhash): Ditto.
-
-Sat Nov 1 18:21:09 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ssl.c (ossl_ssl_peer_cert_chain): add new method
- SSLSocket#peer_cert_chain.
-
- * ext/openssl/ossl_x509req.c (GetX509ReqPtr): new function
- which returns underlying X509_REQ.
-
- * ext/openssl/ossl_x509ext.c (ossl_x509extfactory_set_issuer_cert,
- ossl_x509extfactory_set_subject_cert, ossl_x509extfactory_set_crl,
- ossl_x509extfactory_set_subject_req, ossl_x509extfactory_set_config):
- use underlying C struct without duplication not to leak momory.
-
-Sat Nov 1 01:49:03 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/mapping/factory.rb: mark marshalled basetype objects when
- @allow_original_mapping is true. multi-referencing basetype node is
- prohibited in SOAP/1.1 encoding but soap4r's original ruby object
- mapping requires basetype to be marked to detect self referencing
- loop. e.g. o = 1; o.instance_eval { @iv = o } soap4r's original
- mapping is only used through soap/marshal API.
-
- * test/soap/marshal/test_marshal.rb: add tests for self referencing
- immutable objects.
-
- * test/soap/calc/test_calc_cgi.rb: fix test name.
-
-Fri Oct 31 22:26:29 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * wince/string_wce.c (strrchr): should decrement pointer.
-
- * wince/Makefile.sub: correct a range of isdigit().
-
-Fri Oct 31 12:55:24 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * configure.in, lib/mkmf.rb: add RPATHFLAG for NetBSD.
- [ruby-dev:21791]
-
- * bcc32/Makefile.sub, win32/Makefile.sub, win32/Makefile.sub: ditto.
-
-Fri Oct 31 01:38:14 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * wince/Makefile.sub, win32/Makefile.sub (.y.c): allow white spaces
- at the beginning of line to remove by sed. (ruby-bugs-ja:PR#580)
-
-Fri Oct 31 01:02:24 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * compar.c (cmp_equal): protect exceptions from <=> comparison
- again. returns nil if any exception or error happened during
- comparison.
-
- * eval.c (search_required): should update *featurep when DLEXT2 is
- defined. (ruby-bugs-ja:PR#581)
-
-Thu Oct 30 23:41:04 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/drb.rb: add DRbArray
-
- * lib/drb/invokemethod.rb: fix Hash#each problem. [ruby-dev:21773]
-
- * lib/drb/unix.rb: add LoadError. [ruby-dev:21743]
-
-Thu Oct 30 23:19:11 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/generator.rb: better XML pretty printing.
-
- * lib/soap/encodingstyle/soapHandler.rb: remove unnecessary namespace
- assignment in the element which has "encodingStyle" attribute, and
- add necessary namespace assignment for "arrayType" attribute.
-
- * test/soap/calc/test_calc_cgi.rb: take over $DEBUG to ruby process
- through CGI.
-
-Thu Oct 30 22:59:39 2003 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/yaml2byte.c: HASH const too long. Thanks, matz.
-
-Thu Oct 30 19:13:53 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/syck/MANIFEST: Add yamlbyte.h.
-
-Thu Oct 30 14:25:31 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (READ_DATA_BUFFERED): new macro to detect whether stdio
- buffer filled.
-
- * io.c (rb_io_fptr_cleanup): move path deallocation to
- rb_io_fptr_finalize (finalizer called by GC).
-
-Thu Oct 30 13:23:39 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (logop): left may be NULL. [ruby-talk:84539]
-
- * eval.c (rb_eval): NODE_CASE nd_head may be NULL.
-
-Thu Oct 30 10:14:51 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/test/unit/autorunner.rb: make fox runner work.
-
-Thu Oct 30 09:32:26 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * process.c (rb_f_system): fixed lack of security check before
- calling do_spawn() on win32. [ruby-talk:84555]
-
-Thu Oct 30 02:46:35 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): single array value to normal Proc#call
- (i.e. not via lambda call), should be treated just like yield.
- [ruby-dev:21726]
-
-Thu Oct 30 02:25:48 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/buffering.rb (Buffering#initialize):
- add new method to inherit @sync from @io.sync.
-
- * ext/openssl/lib/net/protocols.rb (SSLIO#ssl_connect): no need to
- set sync flag explicitly.
-
- * ext/openssl/ossl_ssl.c (ossl_sslctx_initialize): call super.
-
- * ext/openssl/ossl_ssl.c (ossl_sslctx_setup): set extra chain
- certificates in @extra_chain_cert.
-
-Wed Oct 29 22:02:04 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/drb/drbtest.rb: use rbconfig.rb to make the path of ruby
- interpreter to exec, instead of test/ruby/envutil.rb,
-
-Wed Oct 29 19:58:59 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/tcltklib/tcltklib.c (CONST84): define CONST84 when it is not
- defined and TCL_MAJOR_VERSION >= 8.
-
- * ext/tcltklib/tcltklib.c (VwaitVarProc, WaitVariableProc,
- rb_threadVwaitProc): use CONST84 instead of CONST.
-
- * ext/tcltklib/tcltklib.c (ip_rbTkWaitCommand,
- ip_rb_threadTkWaitCommand): use CONST84 always.
-
-Wed Oct 29 17:27:05 2003 Tanaka Akira <akr@m17n.org>
-
- * re.c (rb_reg_s_union, Init_Regexp): new method `Regexp.union'.
-
- * lib/pathname.rb (realpath): examine Dir.pwd because it may have
- symlinks.
-
-Wed Oct 29 17:16:31 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_longjmp): must not disturb original jump.
- [ruby-dev:21733]
-
-Wed Oct 29 15:28:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (Init_Proc): taint preallocated exception object
- sysstack_error. [ruby-talk:84534]
-
-Wed Oct 29 11:27:39 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (ret_args): node may be NULL. [ruby-talk:84530]
-
-Tue Oct 28 15:20:12 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/tcltklib/tcltklib.c (VwaitVarProc, ip_rbVwaitObjCmd,
- WaitVariableProc, WaitVisibilityProc, WaitWindowProc,
- ip_rbTkWaitObjCmd, ip_rbTkWaitCommand, rb_threadVwaitProc,
- rb_threadWaitVisibilityProc, rb_threadWaitWindowProc,
- ip_rb_threadVwaitObjCmd, ip_rb_threadTkWaitObjCmd): prototype;
- avoid VC++ warnings.
-
-Mon Oct 27 19:19:55 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_longjmp): ignore reentering error while warning.
- [ruby-dev:21730]
-
-Mon Oct 27 00:23:50 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c (ip_ruby): bug fix on Win : hang-up when
- calling 'exit' in the Tk callback procedure. [ruby-list:38656]
-
-Sat Oct 25 09:18:04 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_method_missing): protect exception from within
- "inspect". (ruby-bugs:PR#1204)
-
-Fri Oct 24 23:26:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * hash.c (rb_hash_each): Hash#each should yield single value.
- [ruby-talk:84420]
-
- * hash.c (env_each): ditto for ENV.each.
-
-Thu Oct 23 20:25:32 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/server.rb (GenericServer#start): should rescue
- IOError from IO::accept. [ruby-dev:21692]
-
-Thu Oct 23 17:59:36 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_cleanup): initialize stack bottom for embedding.
- [ruby-dev:21686]
-
- * ext/dl/extconf.rb: move list of files to clean from DEPEND file,
- to get rid of macro redefinitions.
-
-Thu Oct 23 13:44:00 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y: integrate operations for stack_type. [ruby-dev:21681]
-
-Thu Oct 23 00:41:45 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/soap/calc/*, test/soap/helloworld/*: set logging threshold
- to ERROR.
-
-Wed Oct 22 12:53:31 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#collect_file):
- ignore tests which raised LoadError.
-
- * test/drb/drbtest.rb, test/ruby/test_beginendblock.rb,
- test/ruby/test_system.rb: avoid requiring same file twice.
-
- * test/drb/test_drbssl.rb, test/drb/test_drbunix.rb: should not use
- ARGV unless invoked directly. do not create test cases unless
- required libraries are available.
-
-Wed Oct 22 02:31:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ruby_cleanup): should not ignore exit_value in END
- execution. [ruby-dev:21670]
-
-Tue Oct 21 23:16:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (ruby_cleanup): call finalizers and exit procs before
- terminating threads.
-
- * eval.c (ruby_cleanup): preserve ruby_errinfo before ruby_finalize_0().
-
-Tue Oct 21 15:57:11 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/test/unit/collector/dir.rb (Test::Unit::Collector::Dir#collect_file):
- prepend the directory of target file to the load path.
-
-Tue Oct 21 15:08:53 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (do_spawn, do_aspawn): should wait child process even
- if callded with P_OVERLAY.
-
- * win32/win32.c (do_spawn, do_aspawn): should return child's exit
- status to parent.
-
-Tue Oct 21 00:35:02 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/soap/calc/*, test/soap/helloworld/*: catch the exception from
- test server thread and recover.
-
-Tue Oct 21 00:22:57 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * test/drb/*: import drb/runit.
-
-Mon Oct 20 23:55:47 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval): set current node after arguments evaluation.
- [ruby-dev:21632]
-
- * eval.c (rb_yield_0): set current node and keep it at local jump.
-
-Mon Oct 20 22:01:18 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_cleanup): keep thread group for main thread.
- [ruby-dev:21644]
-
-Mon Oct 20 18:28:10 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_catch): backout.
-
-Mon Oct 20 17:31:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (PUSH_FRAME): generate unique number to be TAG_JUMP()
- destination.
-
- * eval.c (localjump_destination): use unique number in ruby_frame
- for localjump destination.
-
-Mon Oct 20 11:31:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_signal.rb (test_signal): restore old trap.
-
-Mon Oct 20 11:00:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (gc_sweep): loosen page free condition to avoid add_heap()
- race condition. [ruby-dev:21633]
-
- * gc.c (gc_sweep): do not update malloc_limit when malloc_increase
- is smaller than malloc_limit.
-
-Mon Oct 20 09:45:12 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * lib/debug.rb (debug_command): remove debug print.
-
-Sun Oct 19 13:12:30 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (foreachline, dir_foreach): add obsolete warning.
-
-Sun Oct 19 00:14:22 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/soap/calc/*, test/soap/helloworkd/*: changed port# of test
- server. (17171)
-
-Sat Oct 18 23:01:32 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * missing/acosh.c (DBL_MANT_DIG): typo fix(ifdef -> ifndef).
-
-Sat Oct 18 05:48:59 2003 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/rubyext.c: YAML::Syck::compile method.
-
- * ext/syck/syck.c: Buffer edge bug.
-
- * ext/syck/yaml2byte.c: YAML to bytecode converter.
-
- * ext/syck/yamlbyte.h: Ditto.
-
- * ext/syck/bytecode.c: Bytecode parser fixes to empty collections
- and empty strings.
-
- * ext/syck/token.c: Ditto.
-
-Fri Oct 17 23:07:38 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/enumerator/enumerator.c, ext/enumerator/enumerator.txt:
- Provide Kernel#to_enum as an alias for Kernel#enum_for. Maybe
- this is a better name.
-
-Fri Oct 17 23:00:30 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/generator.rb: Add rdoc documentation.
-
-Fri Oct 17 22:16:42 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/set.rb: Reword and fix Overview.
-
- * lib/set.rb: It is not necessary to require
- 'test/unit/ui/console/testrunner'.
-
-Fri Oct 17 11:15:22 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/ruby/test_range.rb: added.
-
- * MANIFEST: add test/ruby/test_range.rb.
-
-Fri Oct 17 03:21:23 2003 William Sobel <will.sobel@barra.com>
-
- * ext/socket/socket.c (make_hostent): h_aliases may be NULL.
- (ruby-bugs:PR#1195)
-
- * ext/socket/socket.c (sock_s_gethostbyaddr): ditto.
-
-Fri Oct 17 00:12:41 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: (bug fix) instance variable @frame was used
- without initializing on TkComposite module.
-
-Thu Oct 16 23:51:04 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: If $DEBUG == true and some exception is caused
- in a callback operation, Ruby/Tk shows a (verbose) backtrace
- information on the callback process.
-
-Thu Oct 16 17:09:19 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/debug.rb (DEBUGGER__::Context::debug_command): do not call
- debug_silent_eval() when $1 is not set. (ruby-bugs:PR#1194)
-
-Thu Oct 16 16:54:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (rb_str_upto): ("a"..."a").to_a should return [].
- [ruby-core:01634]
-
-Thu Oct 16 16:40:51 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb:
- Add Tk::EncodedString and Tk::UTF8_String class to support
- characters using the \uXXXX escape to the UNICODE string.
-
- * ext/tk/sample/{demos-en,demos-jp}/unicodeout.rb
- new demo-scripts (samples of Tk::UTF8_String)
-
- * ext/tk/sample/{demos-en,demos-jp}/widget
- add entries for 'unicodeout.rb'
-
-Thu Oct 16 08:38:06 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/digest/test_digest.rb (test_eq): show failed class.
-
- * test/ruby/test_iterator.rb (test_break, test_return_trace_func):
- test localjump destination.
-
-Wed Oct 15 20:22:31 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/netHttpClient.rb: use URI::HTTP#request_uri instead of
- instance_eval('path_query'). [ruby-list:38575]
-
-Wed Oct 15 17:24:45 2003 URABE Shyouhei <root@mput.dip.jp>
-
- * lib/cgi.rb (CGI::Cookie): tiny typo fix.
-
-Wed Oct 15 15:00:54 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_run): just return FAILURE instead of parse error
- count. [ruby-list:38569]
-
-Wed Oct 15 13:17:02 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/digest/digest.c (rb_digest_base_alloc): need to initialize
- buffer. [ruby-dev:21622]
-
-Wed Oct 15 11:23:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): dump extended modules as well.
-
- * marshal.c (r_object0): TYPE_USRMARSHAL should restore extended
- modules before invoking marshal_load. these two fixes are done
- by Masatoshi Seki <m_seki@mva.biglobe.ne.jp>.
-
-Wed Oct 15 09:30:34 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/enumerator/enumerator.c (enumerator_each): avoid VC++ warning.
-
- * ext/syck/syck.h: include stdio.h for definition of FILE.
-
-Wed Oct 15 08:09:07 2003 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/bytecode.c: Checkin of YAML bytecode support.
-
- * ext/syck/gram.c: Ditto.
-
- * ext/syck/syck.c: Ditto.
-
- * ext/syck/token.c: Ditto.
-
- * ext/syck/handler.c: Ditto.
-
- * ext/syck/handler.c: Now using 'tag' rather than 'taguri' in type URIs.
-
- * ext/syck/rubyext.c: Ditto (on both counts).
-
-Wed Oct 15 05:05:53 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * lib/generator.rb: A new library which converts an internal
- iterator to an external iterator.
-
- * lib/abbrev.rb: A new library which creates an abbreviation table
- from a list.
-
-Wed Oct 15 04:31:51 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/sample/demos-en/entry3.rb, ext/tk/sample/demos-jp/entry3.rb:
- new demo-scripts
-
- * ext/tk/sample/demos-en/widget, ext/tk/sample/demos-jp/widget:
- add entries for 'entry3.rb'
-
-Wed Oct 15 04:31:47 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * test/digest/test_digest.rb: Moved from ext/digest/test.rb.
-
-Wed Oct 15 03:53:20 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/tk.rb: fixed trouble on auto-load Tcl commands (enbug
- on the last commit).
-
-Wed Oct 15 00:25:00 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (yylex): argument parentheses preceded by spaces should
- be warned; not error. [ruby-talk:84103]
-
-Wed Oct 15 00:20:15 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c: replace Tcl/Tk's vwait and tkwait to
- switch on threads smoothly and avoid seg-fault.
-
- * ext/tcltklib/tcltklib.c: add TclTkIp._thread_vwait and
- _thread_tkwait for waiting on a thread. (Because Tcl/Tk's vwait
- and tkwait command wait on an eventloop.)
-
- * ext/tk/lib/multi-tk.rb: support TclTkIp._thread_vwait and
- _thread_tkwait.
-
- * ext/tk/lib/tk.rb: now, TkVariable#wait has 2 arguments.
- If 1st argument is true, waits on a thread. If false, waits on
- an eventloop. If 2nd argument is true, checks existence of
- rootwidgets. If false, doesn't. Default is wait(true, false).
-
- * ext/tk/lib/tk.rb: add TkVariable#tkwait(arg) which is equal to
- TkVariable#wait(arg, true). wait_visibility and wait_destroy
- have an argument for waiting on a thread or an eventloop.
-
- * ext/tk/lib/tk.rb: improve of accessing Tcl/Tk's special variables.
-
- * ext/tk/lib/tkafter.rb: support 'wait on a thread' and 'wait on
- an eventloop'.
-
-Wed Oct 15 00:10:24 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/baseData.rb: Introduce SOAPType as the common ancestor of
- SOAPBasetype and SOAPCompoundtype.
-
- * lib/soap/generator.rb, lib/soap/element.rb, lib/soap/encodingstyle/*:
- Encoding methods signature change. Pass SOAPGenerator as a parameter.
-
- * lib/soap/mapping/*, test/soap/marshal/test_marshal.rb: Refactoring
- for better marshalling/unmarshalling support. Now I think SOAP
- marshaller supports all kind of object graph which is supported by
- Ruby's original marshaller. Of course there could be bugs as always.
- Find it. :-)
-
- * lib/soap/rpc/standaloneServer.rb: Set severity threshould to INFO.
- DEBUG is too noisy.
-
- * lib/xsd/datatypes.rb: DateTime#of is obsoleted. Use DateTime#offset.
-
- * test/wsdl/emptycomplextype.wsdl, test/xsd/xmlschema.xml: Avoid
- useless warning.
-
-Tue Oct 14 19:09:35 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (ruby_finalize_0): return the given exit status unless
- SystemExit got raised.
-
-Tue Oct 14 11:53:49 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * intern.h (ruby_stop): never return.
-
- * ruby.h (ruby_run): ditto.
-
-Tue Oct 14 04:43:55 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (realpath): make ELOOP check bit more robust.
- (children): prepend self by default.
- (chroot): obsoleted.
-
-Tue Oct 14 02:29:31 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_require_safe): segfault after loading .so.
-
-Tue Oct 14 02:05:23 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * ext/Setup*, ext/enumerator/*: Add ext/enumerator, a helper
- module for the Enumerable interface.
-
-Mon Oct 13 23:55:59 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * test/ruby/envutil.rb: use Config::CONFIG["ruby_install_name"],
- not "ruby".
-
-Mon Oct 13 23:57:29 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_feature_p): match by classified suffix.
-
- * eval.c (rb_require_safe): require library in the specified safe
- level.
-
- * variable.c (rb_autoload, rb_autoload_load): restore safe level
- when autoload was called. [ruby-dev:21338]
-
- * intern.h: prototypes; rb_require_safe.
-
- * test/runner.rb: accept non-option arguments.
-
-Mon Oct 13 20:49:51 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_new4): should not preserve FL_TAINT status in the
- internal shared string. [ruby-dev:21601]
-
- * string.c (rb_str_new4): ditto.
-
- * eval.c: use EXIT_SUCCESS and EXIT_FAILURE for exit values.
-
- * process.c: ditto. [ruby-list:38521]
-
-Mon Oct 13 19:51:02 2003 Koji Arai <jca02266@nifty.ne.jp>
-
- * lib/debug.rb (debug_command): should enter emacs mode when
- assigned any value to the environment variable "EMACS".
- On Meadow, (getenv "EMACS") is "meadow".
-
-Sun Oct 12 14:45:03 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/win32ole/extconf.rb: check "windows.h", not "windows".
- [ruby-talk:84051]
-
-Sat Oct 11 20:41:03 2003 Corinna Vinschen <corinna@vinschen.de>
-
- * file.c (eaccess): Use access(2) on Cygwin.
-
-Sat Oct 11 17:09:21 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/rexml/quickpath.rb (REXML::QuickPath::match):
- escape '[' to avoid warning.
-
-Sat Oct 11 16:08:41 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (realpath): check existence of the file.
-
- * lib/pathname.rb (realpath): re-implemented.
- (realpath_root?, realpath_rec): removed
-
-Sat Oct 11 10:19:39 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/monitor.rb: handle exceptions correctly. Thanks, Gennady
- Bystritsky.
-
-Fri Oct 10 07:50:54 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (is_defined): inheritance line adjustment as like as
- rb_call_super().
-
-Fri Oct 10 01:19:00 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_x509name.c (ossl_x509name_initialize): add
- optional argument to specify the DirectoryString type
- (ASN1::UTF8STRING by default). RFC3280 deprecates PrintableString
- for DirectoryString, and strongly requires to use UTF8String for
- all certificates issued after December, 31 2003.
-
- * ext/openssl/lib/openssl/x509.rb (X509::Name::parse): ditto.
-
-Thu Oct 9 23:50:21 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_start_0): prevent thread from GC.
- [ruby-dev:21572]
-
-Thu Oct 9 19:11:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_start_0): non-volatile should be restored from
- volatile.
-
-Thu Oct 9 17:43:36 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (proc_save_safe_level, proc_get_safe_level,
- proc_set_safe_level): save/restore safe level 1..4.
-
-Thu Oct 9 16:33:23 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (r_object0): remove unnecessary iv restoration for
- USRMARSHAL. [ruby-dev:21582]
-
- * marshal.c (w_object): dump generic instance variables from
- a string from '_dump'.
-
- * variable.c (rb_generic_ivar_table): return 0 if obj's FL_EXIVAR
- is not set.
-
- * time.c (time_dump): copy instance variables to dumped string, to
- be included in the marshaled data.
-
- * bignum.c (rb_big2ulong): add range check to ensure round trip.
-
-Thu Oct 9 15:45:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * pack.c (uv_to_utf8): change message to "out of range", since
- negative values are not "too big". [ruby-dev:21567]
-
-Thu Oct 9 14:05:38 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_set_end_proc, rb_exec_end_proc): restore safe level.
- [ruby-dev:21557]
-
-Thu Oct 9 10:51:04 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_yield_0): no error if block is empty.
-
-Thu Oct 9 06:43:33 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (localjump_error): id should be ID.
-
- * eval.c (rb_eval): nd_rval is set in copy_node_scope().
-
- * eval.c (rb_yield_0): unused variable.
-
- * eval.c (rb_yield_0): nothing to do for empty node.
-
- * eval.c (call_end_proc, proc_invoke): adjust backtrace in END.
- [ruby-dev:21551]
-
- * eval.c (rb_thread_start_0): set the value by break as the result.
- [ruby-dev:21552]
-
- * eval.c (rb_thread_start_0, rb_thread_raise, rb_callcc): save
- variables across THREAD_SAVE_CONTEXT.
-
-Thu Oct 9 12:05:46 2003 Eric Sunshine <sunshine@sunshineco.com>
-
- * configure.in: revived NextStep, OpenStep, and Rhapsody ports which
- had become unbuildable; enhanced --enable-fat-binary option so that
- it accepts a list of desired architectures (rather than assuming a
- fixed list), or defaults to a platform-appropriate list if user does
- not provide an explicit list; made the default list of architectures
- for MAB (fat binary) more comprehensive; now uses -fno-common even
- when building the interpreter (in addition to using it for
- extensions), thus allowing the interpreter to be embedded into a
- plugin module of an external project (in addition to allowing
- embedding directly into an application); added checks for
- <netinet/in_systm.h> (needed by `socket' extension) and getcwd(); now
- ensures that -I/usr/local/include is employed when extensions'
- extconf.rb scripts invoke have_header() since extension checks on
- NextStep and OpenStep will fail without it if the desired resource
- resides in the /usr/local tree; fixed formatting of --help message.
-
- * Makefile.in: $(LIBRUBY_A) rule now deletes the archive before
- invoking $(AR) since `ar' on Apple/NeXT can not "update" MAB archives
- (see configure's --enable-fat-binary option); added rule for new
- missing/getcwd.c.
-
- * defines.h: fixed endian handling during MAB build (see configure's
- --enable-fat-binary option) to ensure that all portions of the
- project see the correct WORDS_BIGENDIAN value (some extension modules
- were getting the wrong endian setting); added missing constants
- GETPGRP_VOID, WNOHANG, WUNTRACED, X_OK, and type pid_t for NextStep
- and OpenStep; removed unnecessary and problematic HAVE_SYS_WAIT_H
- define in NeXT section.
-
- * dir.c: do not allow NAMLEN() macro to trust dirent::d_namlen on
- NextStep since, on some installations, this value always resolves
- uselessly to zero.
-
- * dln.c: added error reporting to NextStep extension loader since the
- previous behavior of failing silently was not useful; now ensures
- that NSLINKMODULE_OPTION_BINDNOW compatibility constant is defined
- for OpenStep and Rhapsody; no longer includes <mach-o/dyld.h> twice
- on Rhapsody since this header lacks multiple-include protection,
- which resulted in "redefinition" compilation errors.
-
- * main.c: also create hard reference to objc_msgSend() on NeXT
- platforms (in addition to Apple platforms).
-
- * lib/mkmf.rb: now exports XCFLAGS from configure script to extension
- makefiles so that extensions can be built MAB (see configure's
- --enable-fat-binary option); also utilize XCFLAGS in cc_command()
- (but not cpp_command() because MAB flags are incompatible with
- direct invocation of `cpp').
-
- * ext/curses/extconf.rb: now additionally checks for presence of these
- curses functions which are not present on NextStep or Openstep:
- bkgd(), bkgdset(), color(), curs(), getbkgd(), init(), scrl(), set(),
- setscrreg(), wattroff(), wattron(), wattrset(), wbkgd(), wbkgdset(),
- wscrl(), wsetscrreg()
-
- * ext/curses/curses.c: added appropriate #ifdef's for additional set of
- curses functions now checked by extconf.rb; fixed curses_bkgd() and
- window_bkgd() to correctly return boolean result rather than numeric
- result; fixed window_getbkgd() to correctly signal an error by
- returning nil rather than -1.
-
- * ext/etc/etc.c: setup_passwd() and setup_group() now check for null
- pointers before invoking rb_tainted_str_new2() upon fields extracted
- from `struct passwd' and `struct group' since null pointers in some
- fields are common on NextStep/OpenStep (especially so for the
- `pw_comment' field) and rb_tainted_str_new2() throws an exception
- when it receives a null pointer.
-
- * ext/pty/pty.c: include "util.h" for strdup()/ruby_strdup() for
- platforms such as NextStep and OpenStep which lack strdup().
-
- * ext/socket/getaddrinfo.c: cast first argument of getservbyname(),
- gethostbyaddr(), and gethostbyname() from (const char*) to non-const
- (char*) for older platforms such as NextStep and OpenStep.
-
- * ext/socket/socket.c: include "util.h" for strdup()/ruby_strdup() for
- platforms such as NextStep and OpenStep which lack strdup(); include
- <netinet/in_systm.h> if present for NextStep and OpenStep; cast first
- argument of gethostbyaddr() and getservbyname() from (const char*) to
- non-const (char*) for older platforms.
-
- * ext/syslog/syslog.c: include "util.h" for strdup()/ruby_strdup() for
- platforms such as NextStep and OpenStep which lack strdup().
-
-Wed Oct 8 22:19:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit.rb: removed installation instructions.
-
- * lib/test/unit/ui/testrunnermediator.rb: moved the run flag to a more
- central location.
-
- * lib/test/unit.rb: ditto.
-
- * lib/test/unit.rb: extracted the running code in to AutoRunner.
-
- * lib/test/unit/autorunner.rb: added.
-
- * lib/test/unit/collector/objectspace.rb: extracted common test
- collection functionality in to a module.
-
- * lib/test/unit/collector.rb: ditto; added.
-
- * test/testunit/collector/test_objectspace.rb: ditto.
-
- * lib/test/unit/collector/dir.rb: added. Supports collecting tests out
- of a directory structure.
-
- * test/testunit/collector/test_dir.rb: added.
-
- * test/runner.rb: simplified to use the new capabilities.
-
-Tue Oct 7 15:23:09 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_beginendblock.rb: add tests for nested BEGIN/END.
-
- * test/ruby/beginmainend.rb: add tests for nested BEGIN/END.
-
- * test/ruby/endblockwarn.rb: new file added to test of END-in-method
- warning.
-
-Tue Oct 7 12:23:47 2003 Tanaka Akira <akr@m17n.org>
-
- * ext/fcntl/fcntl.c (Init_fcntl): define Fcntl::O_ACCMODE.
-
- * ext/socket/extconf.rb: useless assignment removed.
-
-Tue Oct 7 09:13:24 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_beginendblock.rb (test_endinmethod): END{} is now
- allowed in eval.
-
-Tue Oct 7 04:15:25 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (stmt): should not expand mrhs if lhs is solely starred.
-
-Tue Oct 7 02:57:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (stmt): rhs of multiple assignment should not be
- expanded using "to_a". [ruby-dev:21527]
-
-Tue Oct 7 01:42:34 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_asn1.c (ossl_asn1_get_asn1type): use appropriate
- free function for ASN1_OBJECT.
-
- * ext/openssl/ossl_asn1.c (ossl_asn1obj_get_sn): add new function for
- ASN1::ObjectId#sn; it returns short name text representation of OID.
-
- * ext/openssl/ossl_asn1.c (ossl_asn1obj_get_ln): add new function for
- ASN1::ObjectId#ln; it returns long name text representation of OID.
-
- * ext/openssl/ossl_asn1.c (ossl_asn1obj_get_oid): add new function for
- ASN1::ObjectId#oid; it returns numerical representation of OID.
-
-Mon Oct 6 22:59:46 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/csv.rb (IOReader, BasicWriter): call binmode when a given IO
- respond_to?(:binmode). record separator was wrong when you gave
- text mode IO to Reader.parse and Writer.generate.
-
- * test/csv/test_csv.rb: add tests for above change.
-
-Mon Oct 6 16:23:38 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_object): wrong method name in the message.
-
-Mon Oct 6 16:02:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (stmt): END in method should cause warning.
- [ruby-dev:21519]
-
-Mon Oct 6 15:17:23 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_iterator.rb (test_block_argument_without_paren):
- added. (follows sample/test.rb)
-
-Mon Oct 6 11:57:06 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_beginendblock.rb, test/ruby/beginmainend.rb: added
- test for eval-ed BEGIN END order.
-
-Mon Oct 6 09:19:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): should pass "weak" value to next level.
- [ruby-dev:21496]
-
- * eval.c (proc_alloc): should not use cached object if klass is
- different. [ruby-talk:83685]
-
-Sun Oct 5 23:27:09 2003 Tanaka Akira <akr@m17n.org>
-
- * ext/socket/extconf.rb: check recvmsg even if sendmsg is exists.
-
- * ext/socket/socket.c (thread_read_select): restored.
-
- * lib/pathname.rb: version information is added in document.
-
-Sun Oct 5 23:07:03 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_f_END): block should be given. [ruby-dev:21497]
-
-Sun Oct 5 22:51:23 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/ext/openssl/extconf.rb: add check for some engine functions
- unavailable in OpenSSL-0.9.6.
-
- * lib/ext/openssl/ossl_engine.c: ditto.
-
-Sun Oct 5 17:56:30 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval): fix evaluation order. [ruby-list:38431]
-
-Sun Oct 5 15:05:06 2003 akira yamada <akira@ruby-lang.org>
-
- * test/uri/*: translated RUNIT to Test::Unit.
-
-Sun Oct 5 14:37:39 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/xsd/datatypes.rb: Rational -> Decimal string bug fix.
-
- * test/soap/marshal/test_marshal.rb: ditto.
-
- * test/soap/calc/test_calc_cgi.rb: add Config::CONFIG["EXEEXT"] to
- RUBYBIN.
-
-Sun Oct 5 13:47:22 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_beginendblock.rb, test/ruby/beginmainend.rb: add tests
- about scope, order and allowed syntax.
-
-Sun Oct 5 11:54:29 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/envutil.rb: added. split "rubybin" from test_system.rb.
-
- * test/ruby/test_system.rb: use envutil.rb
-
- * test/ruby/test_beginendblock.rb: added.
-
- * test/ruby/beginmainend.rb: added. used in test_beginendblock.rb.
-
-Sun Oct 5 11:23:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * test/testunit/runit/test_testresult.rb: removed some unnecessary
- cruft.
-
-Sun Oct 5 11:14:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/rubyunit.rb: aliasing TestCase into the top level is
- problematic.
-
- * lib/runit/assert.rb: fixed a couple of bugs caused by recent
- refactoring in Test::Unit.
-
- * test/testunit/runit/*: added.
-
-Sun Oct 5 10:55:29 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/open-uri.rb (URI::Generic#find_proxy): no_proxy support did not
- work. [ruby-dev:21484]
-
-Sun Oct 5 09:52:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/assertions.rb: will use pp for output if available.
- Can be disabled by setting Assertions.use_pp = false.
-
- * test/testunit/test_assertions.rb: made a small change to exception
- formatting.
-
-Sun Oct 5 07:42:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/assertions.rb: made small improvements to assertion
- messages. Deprecated Assertions#assert_not_nil; use #assert instead.
-
- * test/testunit/test_assertions.rb: ditto.
-
- * test/testunit/util/test_procwrapper.rb: use #assert instead of
- #assert_not_nil.
-
-Sun Oct 5 04:10:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/assertions.rb: refactored message building.
-
-Sun Oct 5 03:40:22 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_asn1.h: global symbols should be declared
- as external.
-
-Sun Oct 5 03:03:20 2003 akira yamada <akira@ruby-lang.org>
-
- * test/ruby/test_exception.rb (test_else): added.
-
-Sun Oct 5 02:12:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/assertions.rb: changed assertion messages to rely more
- heavily on #inspect. Added backtrace filtering for exceptions in
- assertion messages.
-
- * test/testunit/test_assertions.rb: ditto.
-
-Sun Oct 5 02:12:00 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-
- * lib/drb/acl.rb, lib/drb/ssl.rb: added.
-
- * lib/drb/drb.rb: exit from a thread using 'break'.
-
-Sat Oct 4 21:49:14 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * gc.c (Init_stack): the type of space is changed to unsigned int
- from double. [ruby-dev:21483]
-
-Sat Oct 4 17:52:59 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/netHttpClient.rb: follow http-access2. hosts which matches
- ENV['no_proxy'] or ENV['NO_PROXY'] are not proxyed.
- - [,:] separated. ("ruby-lang.org:rubyist.net")
- - no regexp. (give "ruby-lang.org", not "*.ruby-lang.org")
- - if you want specify host by IP address, give full address.
- ("192.168.1.1, 192.168.1.2")
-
- * lib/soap/rpc/cgistub.rb: return "Status: XXX MMM" line.
-
- * test/runner.rb: give testsuite name.
-
-Sat Oct 4 15:16:02 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): instance variable dump do not cause error
- for objects that cannot be dumped, if they traversed from
- marshal_dump. they are just ignored.
-
- * gc.c (Init_stack): cast "space" (doble value) into unsigned
- int. should run on PowerPC.
-
- * eval.c (rb_eval): should not execute else part if any exception
- is caught. [ruby-dev:21482]
-
- * parse.y (f_args): should allow unparenthesized block argument.
-
- * parse.y (f_rest_arg): should allow unparenthesized rest
- argument.
-
-Sat Oct 4 14:59:51 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (initialize): raise ArgumentError if argument has
- '\0' character.
- (relative_path_from): new method.
- (each_entry): new method for replacement of dir_foreach.
- (foreach, foreachline, dir_foreach, chdir): obsoleted.
-
-Sat Oct 4 12:58:48 2003 akira yamada <akira@ruby-lang.org>
-
- * test/uri/* (6 files): added.
-
-Sat Oct 4 12:44:45 2003 akira yamada <akira@ruby-lang.org>
-
- * lib/uri/ftp.rb, lib/uri/mailto.rb: renamed to #to_s from #to_str.
-
-Sat Oct 4 07:33:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/testsuite.rb: changed #<< to return self, and added
- #delete.
-
- * test/testunit/test_testsuite.rb: ditto. Also slightly refactored
- #test_size.
-
- * lib/test/unit/collector/objectspace.rb: collector now preserves the
- hierarchy of suites.
-
- * test/testunit/collector/test_objectspace.rb: ditto.
-
-Sat Oct 4 04:48:49 2003 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/rubyext.c: default keys handled.
-
- * ext/syck/syck.h: lowered default buffer size to 16k for increased
- performance.
-
- * test/yaml: checkin of basic unit tests.
-
-Sat Oct 4 04:24:19 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/extconf.rb: add check for X509V3_set_nconf.
-
- * ext/openssl/ossl_x509ext.c (ossl_x509extfactory_set_config):
- cannot implement if X509V3_set_nconf doesn't exist.
-
-Sat Oct 4 02:12:44 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/xsd/datatypes.rb: dump sign by itself. under the problematic
- platform, sprintf("%+.10g", -0.0) => +0. sigh.
-
- * sample/wsdl/amazon/*: update schema ver2 to ver3.
-
-Sat Oct 4 01:33:46 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb (initialize): duplicate and freeze argument.
- (to_s): return duplicated string.
- (children): new method.
- (each_line): new alias to foreachline.
-
-Fri Oct 3 16:13:19 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_asn1.c: add DER encoder and decoder.
-
- * ext/openssl/ossl_asn1.h: add OpenSSL::ASN1 module.
-
- * ext/openssl/ossl.c (Init_openssl): call Init_ossl_asn1.
-
- * ext/openssl/extconf.rb: check if X509_ATTRIBUTE has field "single".
-
- * ext/openssl/ossl_x509attr.c (ossl_x509attr_set_value): accept
- DER encoded data argument.
-
- * ext/openssl/ossl_x509attr.c (ossl_x509attr_get_value): return
- DER encoded data in OpenSSL::ASN1 types.
-
-Fri Oct 3 13:02:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit.rb: refactored to use optparse.
-
- * lib/test/unit.rb: added support for selecting the output
- level from the command-line.
-
- * lib/test/unit.rb: added a command-line switch to stop processing
- the command-line, allowing arguments to be passed to tests.
-
- * lib/test/unit.rb: changed the method for specifying a runner or a
- filter from the command-line.
-
- * lib/test/unit/collector/objectspace.rb: fixed a bug causing all
- tests to be excluded when the filter was set to an empty array.
-
- * test/testunit/collector/test_objectspace.rb: ditto.
-
-Fri Oct 3 08:14:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/irb/ruby-lex.rb (RubyLex::identify_identifier): support
- 'class ::Foo' syntax. [ruby-talk:83514]
-
-Fri Oct 3 08:01:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/assertions.rb: added a default message for #assert,
- #assert_block, and #flunk.
-
- * test/testunit/test_assertions.rb: ditto.
-
- * lib/test/unit/failure.rb: failures now show a better trace of where
- they occurred.
-
- * test/testunit/test_failure.rb: ditto (added).
-
- * lib/test/unit/testcase.rb: ditto.
-
- * test/testunit/test_testcase.rb: ditto.
-
- * lib/test/unit/util/backtracefilter.rb: added.
-
- * test/testunit/util/test_backtracefilter.rb: added.
-
- * lib/test/unit/error.rb: changed to use BacktraceFilter and improved
- output.
-
- * test/testunit/test_error.rb: ditto.
-
-Thu Oct 2 20:33:49 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_failure_initialize): conform with
- orthodox initialization method.
-
- * ext/iconv/iconv.c (iconv_fail): initialize exception instance
- from the class, and do not share instance variables with the
- others. [ruby-dev:21470]
-
-Thu Oct 2 18:20:27 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * time.c (Init_Time): define initialize. [ruby-dev:21469]
-
-Thu Oct 2 17:39:38 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_engine.c: add a new module OpenSSL::Engine.
- it supports OpenSSL hardware cryptographic engine interface.
-
- * ext/openssl/ossl_engine.h: ditto.
-
- * ext/openssl/MANIFEST: add ossl_engine.c and ossl_engine.h.
-
- * ext/openssl/extconf.rb: add check for openssl/engine.h.
-
- * ext/openssl/ossl.c: call Init_ossl_engine().
-
- * ext/openssl/ossl.h: include openssl/engine.h.
-
- * ext/openssl/ossl_pkey_{rsa,dsa,dh}.c: check if underlying
- EVP_PKEY referes engine.
-
-Thu Oct 2 17:22:37 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_load): restore instance variables (if any) before
- loading from marshaled data.
-
-Thu Oct 2 14:19:15 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (iconv_fail): now yield erred substring, and
- set error object to $!.
-
- * ext/iconv/iconv.c (iconv_convert): error handler block should
- return appended part and the rest. if rest is nil, the
- conversion stops.
-
-Thu Oct 2 12:00:18 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * variable.c (rb_const_defined_0): look up constants in Object as
- well. [ruby-dev:21458]
-
- * test/ruby/test_defined.rb (TestDefined::test_defined): test for
- constants.
-
-Thu Oct 2 11:17:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/assertions.rb: should not capture an
- AssertionFailedError unless explicitly requested.
-
- * test/testunit/test_assertions.rb: ditto.
-
- * test/testunit/collector/test_objectspace.rb: fixed a test failure
- caused by methods being returned in different orders on different
- platforms by moving test sorting from TestSuite into the locations
- where suites are constructed. [ruby-talk:83156]
-
- * lib/test/unit/testcase.rb: ditto.
-
- * lib/test/unit/testsuite.rb: ditto.
-
- * lib/test/unit/collector/objectspace.rb: ditto.
-
-Thu Oct 2 03:25:01 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * eval.c (rb_thread_raise): prototype; avoid VC++ warning.
-
-Thu Oct 2 01:37:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * time.c (time_mdump): new marshal dumper. _dump is still
- available for compatibility.
-
- * time.c (time_mload): new marshal loader.
-
- * marshal.c (w_object): preserve instance variables for objects
- with marshal_dump.
-
- * marshal.c (r_object0): restore instance variables before calling
- marshal_load.
-
- * error.c (rb_warn_m): always return nil.
-
-Thu Oct 2 01:32:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_block_given_p): real required condition is
- ruby_frame->prev->iter == ITER_CUR.
-
- * eval.c (rb_block_given_p): ditto.
-
- * eval.c (block_pass): update ruby_frame->iter only when previous
- value is ITER_NOT.
-
-Thu Oct 2 01:02:35 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_const_defined_at): should exclude constants from
- Object when TYPE(klass) == T_MODULE *and* exclude is on.
- [ruby-dev:21458]
-
- * variable.c (rb_const_get_0): do not lookup constants from Object
- when TYPE(klass) == T_MODULE *and* exclude is on.
-
-Thu Oct 2 00:21:11 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/logger/test_logger.rb: unlinking file before close causes
- problem under win32 box.
-
- * lib/xsd/datatypes.rb(XSDFloat, XSDDouble): add +/- sign explicitly
- when stringified and embedded into XML instance. Ruby's sprintf may
- format -0.0 as "0.0" (no minus sign) depending on underlying C
- sprintf implementation.
-
- * test/xsd/test_xsd.rb, test/soap/test_basetype.rb: follow above change.
-
- * test/soap/calc/*: give httpd config param "CGIInterpreter".
- "/usr/bin/env ruby" thing does not work under non-Unix boxes.
-
-Thu Oct 2 00:25:21 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (ruby_signal_name): adjust to the prototype.
-
- * process.c (pst_inspect): ditto.
-
- * ext/etc/etc.c (etc_getgrent, Init_etc): typo.
-
-Wed Oct 1 20:49:41 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (heaps): manage slots and limits together. [ruby-dev:21453]
-
- * gc.c (add_heap): should not clear heaps slot even if realloc()
- failed.
-
-Wed Oct 1 20:36:49 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * MANIFEST: add wince/mkconfig_wce.rb.
-
-Wed Oct 1 17:22:33 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/etc/etc.c: add new functions: setpwent, getpwent, endpwent,
- setgrent, getgrent, endgrent.
-
- * ext/socket/socket.c (sock_s_gethostbyname): do not reverse lookup.
-
-Wed Oct 1 17:01:30 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_load): Object scope had priority over required file
- scope. [ruby-dev:21415]
-
-Wed Oct 1 14:09:53 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * wince/mkconfig_wce.rb: sorry, forget to commit.
-
-Wed Oct 1 10:08:42 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * wince/setup.mak: add sigmarionIII SDK support.
-
- * wince/Makefile.sub: ditto.
-
- * wince/mkexports.rb: fix linker error in SH4.
-
- * wince/mkconfig_wce.rb: camouflage RUBY_PLATFORM for compiling ext.
-
-Wed Oct 1 08:02:52 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
-
- * wince/time_wce.c (time): add zero check.
-
-Tue Sep 30 16:11:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * Makefile.in: copy lex.c from $(srcdir) if it's not the current
- directory. [ruby-dev:21437]
-
-Tue Sep 30 11:29:23 2003 Tanaka Akira <akr@m17n.org>
-
- * process.c (pst_inspect): describe stopped process "stopped".
-
-Tue Sep 30 09:31:56 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/runner.rb: glob for directories.
-
-Tue Sep 30 09:11:43 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): while/until should not capture break unless
- they are destination of the break.
-
-Tue Sep 30 03:12:02 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (finish): revert to 1.93.
-
- * lib/net/pop.rb (finish): revert to 1.60.
-
- * lib/net/smtp.rb (finish): revert to 1.67.
-
- * lib/net/http.rb (do_start): ensure to close socket if failed to
- start session.
-
- * lib/net/pop.rb (do_start): ditto.
-
- * lib/net/smtp.rb (do_start): ditto.
-
- * lib/net/smtp.rb: SMTP#started? wrongly returned false always.
-
-Tue Sep 30 02:54:49 2003 Minero Aoki <aamine@loveruby.net>
-
- * test/ruby/test_iterator.rb: new test
- test_break__nested_loop[123].
-
-Mon Sep 29 23:39:13 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb (finish): does not raise IOError even if
- !started?, to allow closing socket which was opened before
- session started.
-
- * lib/net/pop.rb (finish): ditto.
-
- * lib/net/smtp.rb (finish): ditto.
-
-Mon Sep 29 19:06:51 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * ext/win32ole/extconf.rb: add windows.h checking.
- (ruby-bugs:PR#1185)
-
-Mon Sep 29 16:18:30 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/logger.rb: check if the given logdevice object respond_to :write
- and :close, not is_a? IO. duck duck.
-
- * test/logger/test_logger.rb: self IO.pipe reading/writing may be
- locked by the flood. use tempfile.
-
- * lib/wsdl/xmlSchema/data.rb: wrong constant reference.
-
-Mon Sep 29 16:11:23 2003 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb: clean up temporary symlink.
- Patched by NaHi. [ruby-dev:21420]
-
-Mon Sep 29 11:16:55 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_thread_atfork): wrong format specifier.
- [ruby-dev:21428]
-
- * process.c (pst_inspect): better description.
-
-Mon Sep 29 02:31:44 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/utils.rb (Utils::su): use setgid and setuid to
- set real and effective IDs. and setup group access list by
- initgroups.
-
-Sun Sep 28 11:14:19 2003 Koji Arai <jca02266@nifty.ne.jp>
-
- * ext/digest/digest.c (Init_digest): `copy_object' was deprecated.
- `initialize_copy' should be defined.
-
- * ext/stringio/stringio.c (Init_stringio): ditto.
-
-Sat Sep 27 18:25:13 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/xsd/charset.rb: XSD::Charset.is_ces did return always true under
- $KCODE = "NONE" environment. check added.
-
- * test/xsd/test_xsd.rb: add tests for above fix.
-
-Sat Sep 27 15:58:50 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/rpc/cgistub.rb: make logging severity threshold higher.
-
- * lib/soap/rpc/standaloneServer.rb: defer WEBrick server start to give
- a chance to reset logging severity threshold.
-
- * test/soap/calc/test_*, test/soap/helloworld/test_helloworld.rb: run
- silent.
-
-Sat Sep 27 09:44:18 2003 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/test_fileutils.rb: clear all errors on Windows.
- [ruby-dev:21417]
-
- * test/fileutils/test_nowrite.rb: ditto.
-
-Sat Sep 27 04:57:07 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_file.rb: new file. only asserts unlink-before-close
- behaviour now.
-
- * test/soap/marshal/test_digraph.rb: should close before unlink.
- unlink-before-close pattern is not needed here.
-
-Sat Sep 27 03:32:37 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/soap/*, test/wsdl/*, test/xsd/*: move TestCase classes into
- each module namespace. TestMarshal in
- test/soap/marshal/test_marshal.rb crashed with
- test/ruby/test_marshal.rb.
-
-Sat Sep 27 01:30:59 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/socket/socket.c (ruby_connect): on win32, type of the 4th
- argument of getsockopt is char *.
-
-Fri Sep 26 18:35:40 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/resolv-replace.rb: 1.8 compliance. [ruby-talk:82946]
-
-Fri Sep 26 17:39:27 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_marshal.rb: add test for ruby's objects.
-
-Fri Sep 26 09:52:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * defines.h (flush_register_windows): use volatile only for gcc on
- Solaris. [ruby-dev:21403]
-
- * lib/mkmf.rb (xsystem): use system directly to honor shell meta
- charaters.
-
-Fri Sep 26 00:10:13 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/README: updated.
-
-Thu Sep 25 17:48:10 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/openssl/ossl.c (ossl_buf2str): fix type of 1st argument for
- rb_protect.
-
- * ext/openssl/ossl_hmac.c (ossl_hmac_digest): should return meaningful
- value.
-
-Thu Sep 25 09:00:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/ostruct.rb: Added OpenStruct#==.
-
- * test/ostruct/test_ostruct.rb: Added.
-
-Thu Sep 25 07:55:26 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/win32ole/win32ole.c, ext/openssl/ossl_pkey_dsa.c,
- ext/openssl/ossl_pkey_rsa.c, ext/bigdecimal/bigdecimal.h: must
- not use C++ or C99 style comment yet. (ruby-bugs:PR#1184)
-
-Thu Sep 25 00:23:22 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * MANIFEST: add SOAP4R.
-
-Thu Sep 25 00:13:15 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/soap/* (29 files): SOAP4R added.
-
- * lib/wsdl/* (42 files): WSDL4R added.
-
- * lib/xsd/* (12 files): XSD4R added.
-
- * test/soap/* (16 files): added.
-
- * test/wsdl/* (2 files): added.
-
- * test/xsd/* (3 files): added.
-
- * sample/soap/* (27 files): added.
-
- * sample/wsdl/* (13 files): added.
-
-Wed Sep 24 02:08:11 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpservlet/cgihandler.rb: conform to mswin32.
- [ruby-talk:82735], [ruby-talk:82748], [ruby-talk:82818]
-
-Tue Sep 23 23:10:16 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/logger.rb: add Logger#<<(msg) for writing msg without any
- formatting.
-
- * test/logger/test_logger.rb: ditto.
-
-Tue Sep 23 20:47:51 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * error.c (rb_warn_m): should not warn if -W0 is specified.
- [ruby-talk:82675]
-
-Mon Sep 22 21:28:57 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * MANIFEST: updated.
-
-Mon Sep 22 19:22:26 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * configure.in (AC_CHECK_FUNCS): add setuid and setgid.
-
-Mon Sep 22 12:34:55 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * util.c (ruby_strtod): skip preceding zeros before counting
- digits in the mantissa. (ruby-bugs:PR#1181)
-
-Sun Sep 21 04:12:36 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ocsp.c (ossl_ocspreq_initialize): the argument
- should be a String.
-
- * ext/openssl/ossl_ocsp.c (ossl_ocspres_initialize): ditt.
-
- * ext/openssl/ossl_x509attr.c (ossl_x509attr_initialize): ditto.
-
- * ext/openssl/ossl_x509ext.c (ossl_x509ext_initialize): ditto.
-
- * ext/openssl/ossl_x509ext.c (ossl_x509ext_set_value): ditto.
-
-Sat Sep 20 11:49:05 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/logger.rb: typo fixed.
-
- * test/logger/test_logger.rb: new file.
-
-Fri Sep 19 11:39:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * test/testunit/*: Added.
-
- * lib/test/unit.rb: Documentation update.
-
- * lib/test/unit/ui/console/testrunner.rb (TestRunner#initialize):
- Ditto.
-
- * lib/test/unit.rb: Factored out an ObjectSpace collector.
-
- * lib/test/unit/collector/objectspace.rb: Ditto.
-
- * sample/testunit/*: Added.
-
-Fri Sep 19 01:00:48 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/log.rb (BasicLog#log): get rid of as ineffectual
- condition.
-
- * lib/webrick/log.rb (BasicLog#format): add "\n" to message.
-
-Thu Sep 18 22:43:20 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): should push PROT_PCALL tag for orphans.
-
- * eval.c (proc_invoke): should update "result" for orphans.
-
-Thu Sep 18 20:33:03 2003 Tietew <tietew-ml-ruby-list@tietew.net>
-
- * parse.y (str_xquote): do not prepend escapes in
- backqoute literals. [ruby-list:38409]
-
-Thu Sep 18 20:30:17 2003 Tanaka Akira <akr@m17n.org>
-
- * lib/pathname.rb: update document.
-
-Thu Sep 18 15:27:05 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/logger.rb: new file. Logger, formerly called devel-logger or
- Devel::Logger.
-
- * sample/logger/*: new file. samples of logger.rb.
-
-Wed Sep 17 23:41:45 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (localjump_destination): should not raise ThreadError
- exception for "break". [ruby-dev:21348]
-
- * eval.c (proc_invoke): use result instead of prot_tag->retval.
- retval is no longer propagated to the ancestors.
-
-Wed Sep 17 20:34:00 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (tokadd_string, parse_string, yylex): escaped terminator
- is now interpreted as is. [ruby-talk:82206]
-
-Wed Sep 17 18:52:36 2003 Minero Aoki <aamine@loveruby.net>
-
- * test/fileutils/fileassertions.rb: new file.
-
- * test/fileutils/test_fileutils.rb: new file.
-
- * test/fileutils/test_nowrite.rb: new file.
-
-Wed Sep 17 18:51:02 2003 Minero Aoki <aamine@loveruby.net>
-
- * test/strscan/test_stringscanner.rb: require test/unit.
-
-Wed Sep 17 18:35:34 2003 Minero Aoki <aamine@loveruby.net>
-
- * test/strscan/test_stringscanner.rb: new file.
-
-Wed Sep 17 18:03:30 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl: all files are reviewed to simplify and avoid memory leak.
-
- * ext/openssl/extconf.rb: add check for assert.h.
-
- * ext/openssl/ossl.c (ossl_buf2str): new function to convert
- C buffer to String and free buffer.
-
- * ext/openssl/ossl.c (ossl_x509_ary2sk): new function to convert
- Array of OpenSSL::X509 to STACK_OF(X509) with exception safe.
-
- * ext/openssl/ossl.c (ossl_to_der, ossl_to_der_if_possible): new
- functions to convert object to DER string.
-
- * ext/openssl/ossl.h: ditto.
-
- * ext/openssl/ossl_bio.c (ossl_membio2str): new function to convert
- BIO to String object and free BIO.
-
- * ext/openssl/ossl_bio.h: ditto.
-
- * ext/openssl/ossl_pkcs7.c (ossl_pkcs7_to_der): add for "to_der".
-
- * ext/openssl/ossl_x509name.c (ossl_x509name_to_der): ditto.
-
- * ext/openssl/ossl_x509ext.c (ossl_x509ext_to_der): ditto.
-
- * ext/openssl/ossl_x509ext.c (create_ext_from_array): removed
- and reimplement in openssl/x509.rb.
-
- * ext/openssl/ossl_x509attr.c: reimplemented and disable some
- method temporarily. this class doesn't work fine without ASN.1
- data support;-) I'll rewrite in near future.
-
- * ext/openssl/lib/openssl/x509.c (X509::Attribute): get rid off
- unused code.
-
- * ext/openssl/lib/openssl/x509.c (X509::ExtensionFactory): refine all.
-
-Tue Sep 16 22:25:06 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/csv/test_csv.rb: add negative tests of row_sep.
-
-Tue Sep 16 18:02:36 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * regex.c (re_compile_pattern): should not translate character
- class range edge. [ruby-list:38393]
-
-Tue Sep 16 16:47:56 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * MANIFEST: add test/csv/mac.csv.
-
- * win32/Makefile.sub, bcc32/Makefile.sub (test): add phony NUL target.
-
-Mon Sep 15 19:02:52 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/csv.rb: add extra pamameter to specify row(record) separater
- character. To parse Mac's CR separated CSV, do like this.
- CSV.open("mac.csv", "r", ?,, ?\r) { |row| p row.to_a }
- The 3rd parameter in this example ?, is for column separater and the
- 4th ?\r is for row separater. Row separater is nil by default. Nil
- separater means "\r\n" or "\n".
-
- * test/csv/test_csv.rb: add tests for above feature.
-
- * test/csv/mac.csv: added. Sample CR separated CSV file.
-
-Fri Sep 12 22:41:48 2003 Michal Rokos <m.rokos@sh.cvut.cz>
-
- * ext/openssl/ossl.c: move ASN.1 stuff to ossl_asn1.[ch]
-
- * ext/openssl/ossl.c: move BIO stuff to ossl_bio.[ch]
-
- * ext/openssl/ossl_asn1.[ch]: new files
-
- * ext/openssl/ossl_bio.[ch]: new files
-
-Fri Sep 12 12:30:41 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * intern.h (rb_disable_super, rb_enable_super): replace with dummy
- expressions instead of prototypes. the functions remain yet for
- binary compatibility. [ruby-talk:81758]
-
-Fri Sep 12 12:09:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * bignum.c (rb_big_and): convert argument using 'to_int'.
-
- * bignum.c (rb_big_or): ditto.
-
- * bignum.c (rb_big_xor): ditto.
-
-Fri Sep 12 07:06:14 2003 David Black <dblack@superlink.net>
-
- * lib/scanf.rb: Took out useless @matched_item variable; some small
- refactoring.
-
-Thu Sep 11 08:43:44 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_require): allow "require" on $SAFE>0, if feature
- name is not tainted.
-
- * lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser::stream):
- Supports StringIO.
-
-Wed Sep 10 22:47:30 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl.h: add a workaround for win32 platform.
- libeay32.dll doesn't export functions defined in conf_api.h.
-
- * ext/openssl/ossl_config.c (ossl_config_initialize): ditto.
-
- * ext/openssl/ossl_config.c (ossl_config_add_value): ditto.
-
- * ext/openssl/ossl_config.c (set_conf_section_i): should check
- if the argument is Array.
-
-Wed Sep 10 22:41:54 2003 Tietew <tietew@tietew.net>
-
- * eval.c (win32_get_exception_list): avoid VC7 warning.
- [ruby-win32:577]
-
-Tue Sep 9 10:39:51 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (struct tag): dst should be VALUE.
-
- * eval.c (localjump_destination): stop at the scope where the current
- block was created. [ruby-dev:21353]
-
-Tue Sep 9 05:17:04 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_config.rb: avoid compile error in OpenSSL-0.9.6.
-
-Tue Sep 9 02:41:35 2003 Michal Rokos <m.rokos@sh.cvut.cz>
-
- * ext/openssl/ossl_config.c: Refine compatibility.
-
-Tue Sep 9 01:50:45 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httpserver.rb (HTTPServer#access_log): add "\n" to
- the message.
-
- * lib/webrick/log.rb (BasicLog#log): add "\n" only if needed.
-
-Mon Sep 8 22:15:33 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tk/lib/multi-tk.rb: modify security check at creating
- a new interpreter
-
-Mon Sep 8 20:00:12 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb, lib/optparse/version.rb: search also all
- capital versions.
-
-Mon Sep 8 19:26:33 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl.h: include openssl/conf.h and openssl/conf_api.h.
-
- * ext/openssl/ossl_config.c: refine all with backward compatibility.
-
- * ext/openssl/ossl_config.h: export GetConfigPtr() and DupConfigPtr().
-
- * ext/openssl/ossl_x509.c: added new constants under X509 module.
- DEFAULT_CERT_AREA, DEFAULT_CERT_DIR, DEFAULT_CERT_FILE,
- DEFAULT_CERT_DIR_ENV, DEFAULT_CERT_FILE_ENV and DEFAULT_PRIVATE_DIR.
-
- * ext/openssl/ossl_x509ext.c (ossl_x509extfactory_free): don't free
- the members of the struct. it's left to GC.
-
- * ext/openssl/ossl_x509ext.c (ossl_x509_set_config): add for config=.
-
- * ext/openssl/ossl_x509ext.c (Xossl_x509extfactory_initialize):
- add attr readers: issuer_certificate, subject_certificate,
- subject_request, crl and config.
-
-Mon Sep 8 18:26:41 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/accesslog.rb (AccessLog::setup_params): use req.port
- instead of config[:Port] or req.request_uri.port.
-
- * lib/webrick/httprequest.rb (HTTPRequest#meta_vars): ditto.
-
- * lib/webrick/httpservlet/filehandler.rb (FileHandler#dir_list): ditto.
-
- * lib/webrick/config.rb: :Listen option never be used.
-
- * lib/webrick/server.rb (GenericServer#initialize): don't use :Listen
- option and add warning message.
-
- * lib/webrick/log.rb (BasicLog#<<): shortcut of log(INFO, ...).
-
- * lib/webrick/httpserver.rb (HTTPServer#accesslog): use << for logging.
-
-Sun Sep 7 16:08:28 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c (lib_mainloop_core): fixed signal-trap bug
-
- * ext/tk/lib/*.rb: Ruby/Tk works at $SAFE == 4
-
-Sat Sep 6 02:26:34 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_*.rb: assert_same, assert_match, and so on.
-
-Sat Sep 6 18:45:46 2003 Mauricio Fernandez <batsman.geo@yahoo.com>
-
- * parse.y (assignable): call rb_compile_error(), not rb_bug().
- [ruby-core:01523]
-
-Sat Sep 6 17:40:41 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ruby_missing.c: rid of unnecessary backward
- compatibility stuff. and remove DEFINE_ALLOC_WRAPPER from
- all sources.
-
- * ext/openssl/ossl_x509ext.c (X509::Extension.new): new method.
-
- * ext/openssl/ossl_x509ext.c (X509::Extension#oid=): new method.
-
- * ext/openssl/ossl_x509ext.c (X509::Extension#value=): new method.
-
- * ext/openssl/ossl_x509ext.c (X509::Extension#critical=): new method.
-
-Sat Sep 6 01:23:22 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (CreateChild): need to quote cmd if RUBYSHELL is set.
-
- * win32/win32.c (CreateChild): fix condition about whether to call
- shell or not.
-
-Sat Sep 6 00:36:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * Makefile.in (test): phony target.
-
- * lib/mkmf.rb (have_library, find_library): configure by library
- name.
-
- * lib/optparse.rb (OptionParser#order, #permute, #parse): allow an
- array as argument.
-
- * test/ruby/test_*.rb: moved invariants to left side in
- assert_equal, and use assert_nil, assert_raises and so on.
-
- * win32/win32.c (isInternalCmd): distinguish command.com and
- cmd.exe.
-
- * win32/win32.c (make_cmdvector): a character just after wildcard
- was ignored. [ruby-core:01518]
-
-Fri Sep 5 20:27:08 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_*.rb: replace 'assert(a == b)' with assert_equal(a, b)'
-
-Fri Sep 5 18:00:51 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/x509.rb: new method X509::Name::parse.
-
- * ext/openssl/ossl_digest.c: add ossl_digest_new().
-
- * ext/openssl/ossl_digest.h: ditto.
-
- * ext/openssl/ossl_cipher.c: add ossl_cipher_new().
-
- * ext/openssl/ossl_cipher.h: ditto.
-
-Fri Sep 5 15:32:04 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-font-lock-maybe-here-docs): should not
- search delimiter forward if found in backward.
-
-Fri Sep 5 13:32:48 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/runner.rb: arguments should be keys.
-
-Fri Sep 5 12:09:55 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * test/ruby/test_system.rb (test_system): check existence of ruby
- interpreter.
-
-Fri Sep 5 11:32:17 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/optparse.rb (--version): fix assignment/reference order.
-
- * lib/optparse.rb (OptionParser#help): new; OptionParser#to_s may
- be deprecated in future.
-
- * lib/optparse/version.rb (OptionParser#show_version): hide Object.
-
- * test/runner.rb: fix optparse usage.
-
- * test/runner.rb: glob all testsuits if no tests given.
-
-Fri Sep 5 10:42:58 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/runner.rb: added. gets testcases from command line and runs it.
-
- * test/ruby/test_gc.rb: remove useless part which was for dumping test
- result.
-
-Fri Sep 5 09:28:59 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby/test_gc.rb: added. splitter.rb which I made to split
- sample/test.rb into test/ruby/test_* kindly removed GC test (the
- last section in the original test) to reduce things to be worried.
-
-Fri Sep 5 03:00:04 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/test_iterator.rb (test_block_in_arg): add no block
- given tests.
-
- * test/ruby/test_iterator.rb (test_ljump): uncomment LocalJumpError
- test.
-
-Fri Sep 5 01:10:11 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/ruby: tests for ruby itself.
-
- * test/ruby/test_*.rb: split sample/test.rb into 28 test/unit testcases.
- some tests could not be translates... search '!!' mark to see it.
-
- * test/csv/test_csv.rb: should require 'csv', not '../lib/csv'. test
- runner should set load path correctly.
-
-Fri Sep 5 01:03:59 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/csv/test_csv.rb: close opened files for CSV::IOBuf explicitly.
- opened file cannot be removed under win32 box.
-
-Thu Sep 4 23:59:40 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (tokadd_string): newlines have no special meanings in
- %w/%W, otherwise they are ignored only when interpolation is
- enabled. [ruby-dev:21325]
-
-Thu Sep 4 19:38:25 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * ext/io/wait/.cvsignore: added.
-
- * ext/openssl/.cvsignore: added.
-
-Thu Sep 4 19:28:24 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * sample/openssl: added. Sample of standard distribution library
- should be locate in sample/{module_name}/*.
-
- * ext/openssl/sample/*: removed. move to sample/openssl/*.
-
-Thu Sep 4 18:02:15 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/csv/test_csv.rb: use remove_const to reduce warnings. use
- Dir.tmpdir to locate working files.
-
-Thu Sep 4 17:41:31 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-here-doc-beg-re): underscore also is
- valid delimiter.
-
- * misc/ruby-mode.el (ruby-here-doc-end-match): must quote
- arbitrary string to use as regexp.
-
- * misc/ruby-mode.el (ruby-font-lock-maybe-here-docs): must not
- call `ruby-here-doc-end-match' unless `ruby-here-doc-beg-re'
- matched.
-
-Thu Sep 4 15:40:07 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test/csv/test_csv.rb: run on test/unit original layer.
-
-Thu Sep 4 12:54:50 2003 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/token.c: headerless documents with root-level spacing now
- honored.
-
-Thu Sep 4 00:06:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (mark_frame_adj): need to adjust argv pointer if using
- system's alloca. [ruby-core:01503]
-
-Wed Sep 3 21:33:20 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * test: add test directory. Test::Unit aware testcases and needed
- files should be located in this directory. dir/file name convention;
- test/{module_name}/test_{testcase_name}.rb
- test/{module_name}/{needed_files}
- someday, someone will write testrunner which searches test_*.rb and
- run testcases automatically.
-
- * test/csv/*: add testcase for lib/csv.rb.
-
-Wed Sep 3 01:37:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * io.c (rb_f_gets): should call next_argv() before type check
- current_file. [ruby-list:38336]
-
-Tue Sep 2 20:37:15 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/net/protocols.rb (SSLIO#ssl_connect): warning
- for skipping server verification.
-
-Tue Sep 2 23:36:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (proc_invoke): should retrieve retval when pcall is true.
-
-Tue Sep 2 14:09:20 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * ext/socket/extconf.rb: check s6_addr8 in in6_addr (Tru64 UNIX).
- the patch is submitted by nmu <nmu@users.sourceforge.jp>.
-
- * ext/socket/getaddrinfo.c (getaddrinfo): should use in6_addr8 on
- some platforms.
-
- * ext/socket/getnameinfo.c (getnameinfo): ditto.
-
-Tue Sep 2 14:02:19 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * ext/tcltklib/tcltklib.c (ip_invoke): fixed bug on passing a exception
-
- * ext/tk/lib/{tk.rb, tkcanvas.rb, tkfont.rb, tktext.rb}:
- bug fix and improvement of font control
-
-Tue Sep 2 09:51:36 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval): should not handle exceptions within rescue
- argument. [ruby-talk:80804]
-
-Tue Sep 2 00:44:37 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (rb_memsearch): fix overrun. [ruby-talk:80759]
-
-Tue Sep 2 00:41:27 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/iconv/iconv.c (map_charset): use lower case keys.
-
- * ext/iconv/iconv.c (iconv_fail): just yield error and return the
- result if a block is given.
-
- * ext/iconv/iconv.c (iconv_convert): yield error and append the
- result if a block is given.
-
- * ext/iconv/charset_alias.rb (charset_alias): optional third
- argument.
-
- * ext/iconv/charset_alias.rb (charset_alias): use CP932 instead of
- SHIFT_JIS on cygwin.
-
-Mon Sep 1 18:34:25 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval): make tail recursion in ELSE clause of
- RESCUE a jump.
-
-Mon Sep 1 18:00:02 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (aref_args): forgot to call NEW_SPLAT(). reported by
- Dave Butcher.
-
- * eval.c (Init_Thread): protect thgroup_default. suggested by Guy
- Decoux in [ruby-talk:80623]
-
-Mon Sep 1 16:59:10 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_thread_switch): add RESTORE_EXIT; exit by another
- thread termination.
-
- * eval.c (rb_thread_start_0): should not error_print() within
- terminated thread, because $stderr used by it might be
- overriden now. [ruby-dev:21280]
-
-Sun Aug 31 22:46:55 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * eval.c (TAG_DST()): take no argument.
-
- * process.c (p_gid_sw_ensure): return VALUE.
-
-Sun Aug 31 22:27:10 2003 Hidetoshi NAGAI <nagai@dumbo.ai.kyutech.ac.jp>
-
- * process.c (p_gid_sw_ensure): lack of function type
-
-Sun Aug 31 12:25:06 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
-
- * lib/optparse.rb: --version takes an optional argument; "all" or
- a list of package names.
-
-Sun Aug 31 10:17:02 2003 Tadayoshi Funaba <tadf@dotrb.org>
-
- * lib/date/format.rb: yyyy/mm is not an acceptable format.
-
- * lib/time.rb: follow above.
-
-Sat Aug 30 14:25:43 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_iter_break): should not call TAG_JUMP directly.
-
-Sat Aug 30 03:58:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (struct BLOCK): remove BLOCKTAG, use scope instead.
-
- * eval.c (POP_TAG): no longer propagate retval. retval is now set
- directly by localjump_destination().
-
- * eval.c (localjump_destination): new function to cast
- return/break local jump.
-
- * eval.c (rb_yield_0): stop TAG_RETURN/TAG_BREAK escaping.
-
-Fri Aug 29 22:35:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
-
- * bigdecimal.c *.html: The 2nd arg. for add,sub,mult, and div is 0,
- then result will be the same as +,-,*,/ respectively.
-
-Fri Aug 29 17:30:15 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-
- * process.c: bug fix
-
- * process.c: add rb_secure(2) to methods of Process::{UID,GID,Sys}
-
- * process.c: deny handling IDs during evaluating the block given to
- the Process::{UID,GID}.switch method
-
- * ext/tcltklib/tcltklib.c: some methods have no effect if on slave-IP
-
- * ext/tcltklib/tcltklib.c: can create a interpreter without Tk
-
- * ext/tcltklib/tcltklib.c: bug fix on handling exceptions
-
- * ext/tcltklib/MANUAL.euc: modify
-
- * ext/tk/lib/tk.rb: freeze some core modules
-
- * ext/tk/lib/multi-tk.rb: more secure
-
- * ext/tk/lib/tk.rb: TkVariable.new(array) --> treat the array as the
- Tk's list
-
- * ext/tk/lib/tk.rb: improve accessibility of TkVariable object
-
- * ext/tk/lib/tk.rb, ext/tk/lib/tkfont.rb, ext/tk/lib/tkcanvas.rb,
- ext/tk/lib/tktext.rb: fix bug of font handling
-
- * ext/tk/lib/tkfont.rb: TkFont.new() accepts compound fonts
-
-Thu Aug 28 22:07:12 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_autoload_load): call const_missing if autoloading
- constant is not defined to allow hook.
-
- * eval.c (rb_eval): use rb_const_get_from() instead of
- rb_const_get_at().
-
- * eval.c (is_defined): forgot to check NODE_COLON3.
-
-Thu Aug 28 17:30:24 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * variable.c (rb_const_get_0): should check constants defined in
- included modules, if klass is Object. [ruby-talk:79302]
-
- * numeric.c (check_uint): check should be done using UINT_MAX, not
- INT_MAX. this fix is submitted by Lyle Johnson
- <lyle@knology.net> in [ruby-core:01486]
-
-Thu Aug 28 05:02:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (singleton): typo fixed (ruby-bugs-ja:PR#562)
-
-Thu Aug 28 02:37:45 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_eval): *a = [1,2] now assigns [[1,2]] to a.
- consistent with *a = [1], which set [[1]] to a.
-
- * node.h: merge NODE_RESTARY to NODE_SPLAT.
-
- * parse.y: rules simplified a bit by removing NODE_RESTARY.
-
- * sample/test.rb: updated for new assignment behavior.
-
-Wed Aug 27 22:33:24 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * error.c (rb_bug): should not use other methods; this function is
- not for ordinary use. [ruby-dev:21259]
-
-Wed Aug 27 15:07:57 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/smtp.rb (check_response): AUTH CRAM-MD5 returns 334
- response. [ruby-list:38279]
-
-Wed Aug 27 05:10:15 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/win32.c (map_errno): support winsock error.
-
- * win32/win32.c (pipe_exec, CreateChild, poll_child_status, waitpid,
- kill, link, rb_w32_rename, unixtime_to_filetime, rb_w32_utime):
- pass errno to map_errno().
-
- * win32/win32.c (rb_w32_select, rb_w32_accept, rb_w32_bind,
- rb_w32_connect, rb_w32_getpeername, rb_w32_getsockname,
- rb_w32_getsockopt, rb_w32_ioctlsocket, rb_w32_listen, rb_w32_recv,
- rb_w32_recvfrom, rb_w32_send, rb_w32_sendto, rb_w32_setsockopt,
- rb_w32_shutdown, rb_w32_socket, rb_w32_gethostbyaddr,
- rb_w32_gethostbyname, rb_w32_gethostname, rb_w32_getprotobyname,
- rb_w32_getprotobynumber, rb_w32_getservbyname, rb_w32_getservbyport,
- rb_w32_fclose, rb_w32_close): use map_errno().
-
- * win32/win32.h: add winsock errors.
-
-Tue Aug 26 23:53:23 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * lib/ostruct.rb (OpenStruct::method_missing): prohibit modifying
- frozen OpenStruct. [ruby-talk:80214]
-
-Tue Aug 26 20:03:50 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (create_tmpsrc): add the hook for source.
- [ruby-list:38122]
-
-Tue Aug 26 15:59:53 2003 why the lucky stiff <why@ruby-lang.org>
-
- * implicit.c (syck_type_id_to_taguri): corrected detection of
- x-private types.
-
-Sun Aug 24 01:02:48 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (file_expand_path): performance improvement.
- [ruby-talk:79748]
-
-Sat Aug 23 23:41:16 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * file.c (rb_file_s_expand_path): avoid calling rb_scan_args() for
- apparent cases. [ruby-talk:79748]
-
-Sat Aug 23 18:56:53 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/nkf/nkf.c (rb_nkf_putchar): should use rb_str_resize() to just
- resize a string, rb_str_cat() disallows NULL. [ruby-dev:21237]
-
-Sat Aug 23 16:48:41 2003 Keiju Ishitsuka <keiju@ishitsuka.com>
-
- * lib/irb/ruby-lex.rb: bug fix for "foo" !~ /bar/. [ruby-talk:79942]
-
-Sat Aug 23 15:59:58 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_eval, rb_iterate, block_pass): reduce PUSH/POP_TAG and
- EXEC_TAG() for retry. [ruby-dev:21216]
-
-Sat Aug 23 02:32:33 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_splat): should check if "values" is array.
-
- * enum.c (each_with_index_i): typo.
-
-Fri Aug 22 17:07:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * enum.c (inject_i): use rb_yield_values.
-
- * enum.c (each_with_index_i): ditto.
-
- * eval.c (rb_yield_splat): new function to call "yield *values".
-
- * string.c (rb_str_scan): use rb_yield_splat().
-
-Fri Aug 22 06:13:22 2003 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/rubyext.c: refactoring of the transfer method
- dispatch. added yaml_org_handler for faster dispatch of
- transfers to base types.
-
- * lib/yaml/rubytypes.rb: removed handling of builtins from
- Ruby library.
-
- * ext/syck/token.c: quoted and block scalars are now implicit !str
-
- * ext/syck/implicit.c: empty string detected as !null.
-
-Fri Aug 22 01:00:31 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (block_pass): improve passing current block.
-
-Fri Aug 22 00:13:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c: Int. overflow bug in multiplication
- fixed, and VpNmlz() speed up.
-
-Wed Aug 20 16:44:49 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/socket/socket.c (ruby_connect): many systems seem to have
- a problem in select() after EINPROGRESS. [ruby-list:38080]
-
-Wed Aug 20 01:31:17 2003 why the lucky stiff <why@ruby-lang.org>
-
- * ext/syck/syck.h: Parser definition problems on HP-UX.
- [ruby-talk:79389]
-
- * ext/syck/handler.c (syck_hdlr_get_anchor): Memory leak.
-
- * ext/syck/syck.s (syck_io_file_read): Bad arguments to fread.
-
- * ext/syck/rubyext.c: Tainting issues.
-
-Tue Aug 19 23:20:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c .h .html: to_s("+") implemented.
-
- * ext/bigdecimal/lib/bigdecimal/math.rb: E implemented.
-
-Tue Aug 19 11:19:33 2003 Shugo Maeda <shugo@ruby-lang.org>
-
- * io.c (next_argv): should not call GetOpenFile() if rb_stdout is
- not a IO (T_FILE).
-
-Tue Aug 19 07:47:10 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/ssl.rb: new file; SSL/TLS enhancement for GenericServer.
-
- * lib/webrick/https.rb: SSLSocket handling is moved to webrick/ssl.rb.
-
- * lib/webrick/compat.rb (File::fnmatch): remove old migration code.
-
- * lib/webrick/httpserver.rb (HTTPServer#run): ditto.
-
- * lib/webrick/server.rb (GenericServer#listen): the body of this
- method is pull out as Utils::create_lisnteners.
-
- * lib/webrick/utils.rb (Utils::create_lisnteners): new method.
-
- * lib/webrick/server.rb (GenericServer#start): should rescue
- unknown errors. and refine comments.
-
- * ext/openssl/lib/openssl/ssl.rb (SSLServer#accept): should close
- socket if SSLSocket raises error.
-
-Tue Aug 19 07:47:09 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/ossl_ssl.c: sync_close is moved to SSLSocket as
- a builtin.
-
- * ext/openssl/lib/openssl/buffering.rb (Buffering#close): ditto.
-
- * ext/openssl/lib/openssl/buffering.rb (Buffering#puts): should
- add a return to the tails of each line.
-
- * ext/openssl/lib/openssl/ssl.rb: new class OpenSSL::SSL::SSLServer.
-
- * ext/openssl/lib/net/protocols.rb (SSLIO#ssl_connect): use sync_close.
-
- * ext/openssl/sample/echo_svr.rb: use SSLServer.
-
- * ext/openssl/sample/echo_cli.rb: add example of SSLSocket#sync_close.
-
-Tue Aug 19 01:24:34 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/curses/curses.c (_XOPEN_SOURCE_EXTENDED): Mac OS X standard
- headers are inconsistent at this macro. [ruby-core:01432]
-
- * ext/curses/extconf.rb: check if _XOPEN_SOURCE_EXTENDED breaks.
-
- * ext/tcltklib/stubs.c: Status macro in X11/Xthreads.h bothers
- winspool.h
-
- * instruby.rb: make list at first instead of iterator.
- [ruby-talk:79347]
-
-Mon Aug 18 11:23:11 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (glob_helper): preserve raw order for **.
-
-Sun Aug 17 23:39:55 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/openssl/extconf.rb (HAVE_VA_ARGS_MACRO): need to compile.
-
-Sun Aug 17 17:10:03 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/ssl.rb (SSLSocket#sync_close=): add a
- method to specify if the underlying IO will be closed in
- SSLSocket#close.
-
- * ext/openssl/lib/openssl/buffering.rb: add forwarders to
- setsockopt, getsockopt and fcntl.
-
- * ext/openssl/lib/net/protocols.rb: enable sync for SSLSocket.
-
-Sun Aug 17 11:32:04 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): should not force to remake Makefile when
- installation and so on.
-
-Sat Aug 16 23:58:18 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_symbol, w_object): get rid of warnings.
-
- * re.c (rb_memsearch): ditto.
-
- * time.c (time_dump): ditto.
-
- * ext/extmk.rb (extmake): not continue making when extconf.rb
- failed.
-
- * ext/openssl/extconf.rb: check __VA_ARGS__ macro more precisely.
-
- * ext/openssl/ossl.h: remove version.h dependency.
-
- * ext/openssl/ruby_missing.h: ditto.
-
- * lib/mkmf.rb (pkg_config): use --libs output except with
- only-L for other options. [ruby-list:38099]
-
- * lib/mkmf.rb (create_makefile): separate rule for static
- library from shared object.
-
- * win32/Makefile.sub, bcc32/Makefile.sub, wince/Makefile.sub:
- define exec_prefix and libdir.
-
-Fri Aug 15 23:15:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c .h: Bug in combination of limit & div
- method fixed.
-
- * ext/bigdecimal/lib/bigdecimal/math.rb: atan() & sqrt() added.
-
-Fri Aug 15 12:01:44 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (HUGE_ST_INO): check whether struct stat.st_ino
- is larger than long. [ruby-dev:21194]
- http://www.geocities.co.jp/SiliconValley-PaloAlto/1409/ruby/beos.html
-
- * error.c (syserr_eqq): errno might exceed Fixnum limit.
-
- * error.c (Init_Exception): moved base initialization from
- init_syserr().
-
- * inits.c (rb_call_inits): postpone initializing errnos until
- Bignum is available.
-
-Fri Aug 15 12:01:43 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/curses/curses.c (_XOPEN_SOURCE_EXTENDED): needed to let
- keyname() and so on be declared.
-
- * ext/curses/curses.c (curses_resizeterm, window_resize):
- arguments conflicted with macros in term.h.
-
- * ext/curses/curses.c (Curses module methods): ensure
- initialized. [ruby-dev:21191]
-
-Fri Aug 15 02:08:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * gc.c (id2ref): recycle check should be done by klass == 0.
- [ruby-core:01408]
-
-Fri Aug 15 01:34:23 2003 Michal Rokos <m.rokos@sh.cvut.cz>
-
- * ext/openssl/ossl_pkey.c: move generate_cb here
-
- * ext/openssl/ossl_pkey_{dh|dsa|rsa}.c: adapt to this cb
-
- * ext/openssl/openssl_missing.[ch]: add (0.9.6x, x<j) missing BN funcs
-
- * ext/openssl/ossl_bn.c: use supplied funcs from openssl_missing.c
-
-Fri Aug 15 00:38:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c: Bug in div method fixed.
-
- * ext/bigdecimal/lib/bigdecimal/math.rb: Newly added.
-
- * ext/bigdecimal/sample/pi.rb: Changed so as to use math.rb.
-
-Thu Aug 14 21:19:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (Init_Thread): Continuation#[] added. [ruby-talk:79028]
-
-Thu Aug 14 20:03:34 2003 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c (OLE_FREE): should not call
- ole_message_loop.
-
- * ext/win32ole/win32ole.c (ole_event_free): ditto.
-
- * ext/win32ole/win32ole.c (ole_initialize): stop calling
- OleUninitialize at exit.
-
-Thu Aug 14 11:27:37 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * gc.c (rb_data_object_alloc): check type of 1st argument.
- [ruby-dev:21192]
-
-Thu Aug 14 00:21:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * parse.y (mlhs_node): should allow "::Foo" (colon3) as lhs.
-
- * parse.y (lhs): ditto.
-
- * parse.y (yylex): should return tCOLON3 right after kCLASS.
- [ruby-talk:78918]
-
- * error.c (exc_initialize): was converting argument to string too
- eagerly. Only check was needed. [ruby-talk:78958]
-
-Wed Aug 13 23:31:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
-
- * ext/bigdecimal/bigdecimal.c .h .html: Ambiguity of
- BigDecimal::limit removed.
-
-Wed Aug 13 19:21:34 2003 Christian Neukirchen <chneukirchen@yahoo.de>
-
- * lib/webrick/https.rb (HTTPServer#run): should set syncing-mode
- to SSLSocket. [ruby-talk:78919]
-
-Wed Aug 13 18:13:49 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (POP_BLOCK): turn on BLOCK_LEFT flag when leaving block.
-
- * eval.c (proc_invoke): unpack return/break destination when block
- is already left.
-
-Wed Aug 13 15:58:31 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * object.c (rb_class_s_alloc): add function prototype to avoid VC++
- warning.
-
-Wed Aug 13 13:50:59 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/Win32API/Win32API.c (Win32API_initialize): should pass some
- class to first argument of Data_Wrap_Struct(). (ruby-bugs:PR#1109)
-
-Tue Aug 12 16:55:11 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * Makefile.in: static link libraries to LIBRUBY_SO with static linked
- ext. [ruby-dev:21157]
-
- * ext/extmk.rb (extmake): sort extension library initialization order.
-
- * ext/extmk.rb (extmake): compact $extlibs.
-
-Tue Aug 12 02:48:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (THREAD_SAVE_CONTEXT): should explicitly turn off the
- flag before calling getcontext(2).
-
- * eval.c (struct thread): add member to save backing store on
- IA64. (ruby-bugs PR1086)
-
- * eval.c (thread_mark): mark IA64 backing store region.
-
- * eval.c (thread_free): free saved IA64 backing store.
-
- * eval.c (rb_thread_save_context): save IA64 backing store as well.
-
- * eval.c (rb_thread_restore_context): restore IA64 backing store.
-
- * eval.c (THREAD_ALLOC): initialize IA64 members.
-
-Mon Aug 11 22:31:50 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-
- * lib/debug.rb(debug_command): inspection command should inspect
- resulting value even if it's nil. [ruby-dev:21180] by OMAE, jun
- <jun66j5@ybb.ne.jp>.
-
- * lib/debug.rb(debug_command): incomplete regexp.
-
-Mon Aug 11 17:33:07 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call_super): do not use rb_block_given_p() for
- check. [ruby-talk:78656]
-
- * eval.c (BEGIN_CALLARGS): push ITER_NOT only when ITER_PRE.
-
-Sun Aug 10 10:43:05 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * ext/openssl/lib/openssl/buffering.rb: increase BLOCK_SIZE
- from 1k to 16k bytes. [ruby-talk:78603]
-
- * ext/openssl/ossl_ssl.c (ossl_sslctx_s_alloc): enable
- partial write to allow interruption in SSLSocket#write.
-
-Sun Aug 10 00:34:16 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * cygwin/GNUmakefile: remove unnecessary '--drive-name=$(CC)'
- for ccache.
-
-Sat Aug 9 10:36:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * marshal.c (w_object): do not dump generic instance variable when
- marshal_dump is defined.
-
-Sat Aug 9 00:35:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
-
- * ext/bigdecimal.c: F style output(like 1234.56789) implemented
- to to_s method.
- * ext/bigdecimal_??.html: F style output(like 1234.56789)
- implemented to to_s method.
-
-Fri Aug 8 12:33:17 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * bcc32/Makefile.sub: rubyw.exe should be a Windows GUI program.
- add the -aa option to WLDFLAGS.
-
-Fri Aug 8 11:29:26 2003 Koji Arai <jca02266@nifty.ne.jp>
-
- * marshal.c (w_object): should set `c_arg' at first.
-
-Fri Aug 8 03:22:28 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
-
- * lib/webrick/httputils.rb (FormData#list): should not take
- a side effect for the receiver.
-
-Thu Aug 7 14:40:37 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * cygwin/GNUmakefile: better --disbale-shared option support.
-
- * cygwin/GNUmakefile: add forwarding DLL target for cygwin.
-
-Thu Aug 7 14:21:05 2003 Corinna Vinschen <vinschen@redhat.com>
-
- * configure.in: Fix Cygwin specific naming of libraries to
- be net distribution compliant. (ruby-bugs:PR#1077)
- cygwin-ruby18.dll -> cygruby18.dll
-
-Thu Aug 7 12:51:38 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_at_exit): should not be called without a block.
- block_given check added.
-
-Thu Aug 7 06:46:06 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_call0): forgot to pop ruby_class.
-
- * eval.c (rb_call0): update ruby_class as well as ruby_cref.
- (ruby-bugs-ja:PR#540)
-
-Thu Aug 7 04:52:50 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_yield_0): remove ruby_frame->cbase and unify to
- ruby_cref. [ruby-talk:78141]
-
-Thu Aug 7 04:19:15 2003 Akinori MUSHA <knu@iDaemons.org>
-
- * gc.c: FreeBSD/ia64's mcontext_t is a bit different from that of
- Linux/ia64. This makes gc.c compile but miniruby coredumps for
- the moment.
-
-Thu Aug 7 00:15:00 2003 Shigeo Kobayashi <shigek@ruby-lang.org>
-
- * ext/bigdecimal.c: Comparison results adjusted to Float's.
- * ext/bigdecimal.c: Use rb_num_coerce_????(x,y) instead of own.
-
-Wed Aug 6 22:58:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
-
- * lib/test/unit/testcase.rb: Added equality checking.
- * lib/test/unit/testsuite.rb: Added equality checking.
- * lib/test/unit/assertions.rb: Fixed a warning.
-
-Wed Aug 6 17:28:10 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/extmk.rb (extmake): pass LIBPATH to make ruby. [ruby-dev:21137]
-
- * ext/extmk.rb (extmake): set library name as source file name in
- Init_ext(). [ruby-dev:21137]
-
- * lib/mkmf.rb (Logging::postpone): postpone logging messages after
- heading message as the result of the block.
-
- * lib/mkmf.rb (macro_defined?): append newline to src unless ended
- with it.
-
- * lib/mkmf.rb (have_library): treat nil function name as "main".
- (ruby-bugs:PR#1083)
-
- * lib/mkmf.rb (pkg_config): should append additional libraries to
- $libs but not $LIBS. [ruby-dev:21137]
-
- * ext/io/wait/extconf.rb: check DOSISH macro instead of platform.
-
- * ext/digest/sha1/extconf.rb: have_library already appends library
- name.
-
-Wed Aug 6 17:23:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c: initialize /* OK */ variables by Qnil to stop warnings.
-
-Wed Aug 6 04:58:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/Setup*: add io/wait and openssl.
-
-Wed Aug 6 01:13:38 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * eval.c (rb_f_autoload): use ruby_cbase instead of ruby_class.
-
- * eval.c (rb_f_autoload_p): ditto.
-
- * class.c (rb_mod_init_copy): no longer implements independent
- clone and dup methods. override "initialize_copy" instead.
- [ruby-core:01352]
-
- * object.c (rb_class_s_alloc): define Class allocation function.
- this makes Classes to follow clone framework that uses
- initialize_copy.
-
- * object.c (rb_class_initialize): separate instantiation and
- initialization.
-
- * object.c (rb_obj_alloc): prohibit instantiation from
- uninitialized class.
-
- * object.c (rb_class_superclass): check uninitialized class.
-
- * array.c (rb_ary_fill): wrong index processing with block. this
- fix was done by Koji Arai <JCA02266@nifty.ne.jp> [ruby-list:38029]
-
- * marshal.c (w_object): should preserve generic ivar for nil,
- true, false, symbols, and fixnums.
-
- * marshal.c (w_uclass): base_klass check should be done after
- rb_class_real().
-
-Wed Aug 6 01:18:50 2003 Minero Aoki <aamine@loveruby.net>
-
- * lib/net/http.rb: update document.
-
- * lib/net/pop.rb: ditto.
-
- * lib/net/protocol.rb: ditto.
-
-Wed Aug 6 00:48:37 2003 Koji Arai <jca02266@nifty.ne.jp>
-
- * marshal.c (w_object): should recommend marshal_dump rather than
- _dump_data.
-
-Tue Aug 5 17:58:57 2003 WATANABE Hirofumi <eban@ruby-lang.org>
-
- * lib/fileutils.rb (install): should preserve timestamp only.
-
-Tue Aug 5 17:31:59 2003 Ian Macdonald <ian@caliban.org>
-
- * lib/shell/command-processor.rb (Shell::CommandProcessor::rmdir):
- simple typo.
-
-Tue Aug 5 15:47:34 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_load): should preserve current source file/line.
-
-Tue Aug 5 10:04:42 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * string.c (str_new4): ptr may refer to null_str.
-
-Mon Aug 4 17:25:18 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
-
- * stable version 1.8.0 released.
-
-For the changes before 1.8.0, see doc/ChangeLog-1.8.0
-
-Local variables:
-add-log-time-format: (lambda ()
- (let* ((time (current-time))
- (system-time-locale "C")
- (diff (+ (cadr time) 32400))
- (lo (% diff 65536))
- (hi (+ (car time) (/ diff 65536))))
- (format-time-string "%a %b %e %H:%M:%S %Y" (list hi lo) t)))
-indent-tabs-mode: t
-tab-width: 8
-end:
diff --git a/doc/ChangeLog-2.0.0 b/doc/ChangeLog-2.0.0
deleted file mode 100644
index a1a79b8dca..0000000000
--- a/doc/ChangeLog-2.0.0
+++ /dev/null
@@ -1,24015 +0,0 @@
-Fri Feb 8 19:56:54 2013 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * array.c (rb_ary_dup): reverted r39004. see [Bug #7768], and
- release manager finally decided to revert it.
-
-Fri Feb 8 16:09:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_ensure): preserve errinfo across ensure proc before
- JUMP_TAG(). [ruby-core:52022] [Bug #7802]
-
-Fri Feb 8 16:08:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/envutil.rb (assert_separately): check also terminating
- signal not only if core dumped.
-
-Fri Feb 8 13:12:04 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/generator/darkfish.rb: Set encoding on output template to
- user-specified encoding.
- * test/rdoc/test_rdoc_generator_darkfish.rb: Test for above.
-
- * lib/rdoc.rb: Bump version
-
-Fri Feb 8 11:53:33 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/security/policy.rb: Raise proper exceptions when
- verifying unsigned gems (instead of crashing).
- * test/rubygems/test_gem_security_policy.rb: Tests for the above.
-
-Fri Feb 8 10:44:44 2013 Eric Hodel <drbrain@segment7.net>
-
- * test/rubygems/test_gem_dependency_installer.rb: Improve coverage of
- --install-dir feature of gem install.
-
-Fri Feb 8 10:11:09 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/config_file.rb: Add missing require for
- user_interaction.rb
-
- * lib/rubygems/dependency_installer.rb: Minor refactor for clarity.
-
-Fri Feb 8 09:35:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (MakeMakefile#configuration): set all ruby names.
- hdrdir now needs RUBY_VERSION_NAME.
-
-Fri Feb 8 08:58:26 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/package/old.rb: Fix loading old format gems on ruby
- 1.8. This commit is only so trunk and rubygems master have the same
- code.
-
-Fri Feb 8 08:53:27 2013 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb: fixing string quotation
- when dumping Ruby strings. Thanks Ingy
-
- * test/psych/test_psych.rb: appropriate tests.
-
- * test/psych/test_yaml.rb: ditto
-
-Fri Feb 8 08:50:42 2013 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb: change output reference
- ids to be sequential numbers.
-
-Fri Feb 8 07:47:56 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/package/old.rb: Disallow installation of old-format
- gems when a security policy is active.
- * test/rubygems/test_gem_package_old.rb: Test for above.
-
-Fri Feb 8 07:34:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/net/http.rb (HTTP.post_form): Fix module scope in documentation
- Patch by David Albert [Bug #7794] [ruby-core:51955]
-
-Fri Feb 8 07:33:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * compar.c (cmp_equal): Document ignored exception and return false
- By Makoto Kishimoto [Bug #7790] [ruby-dev:46925] [ruby-dev:46910]
-
-Fri Feb 8 07:17:00 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/dependency_installer.rb: Only install local gems if
- they end in '.gem'. Fixes github rubygems issue #407.
- * test/rubygems/test_gem_dependency_installer.rb: Test for the above.
-
-Fri Feb 8 00:02:48 2013 Tanaka Akira <akr@fsij.org>
-
- * process.c (obj2gid): use getgrnam_r() only if getgrnam_r() and
- _SC_GETGR_R_SIZE_MAX is available.
- MirOS BSD (MirBSD 10 GENERIC#1382 i386) have getgrnam_r() but
- no _SC_GETGR_R_SIZE_MAX.
- (obj2uid): use getpwnam_r() only if getpwnam_r() and
- _SC_GETPW_R_SIZE_MAX is available.
- This is consistency for obj2gid.
- MirOS BSD have neither getpwnam_r() nor _SC_GETPW_R_SIZE_MAX.
-
-Thu Feb 7 22:01:18 2013 Tanaka Akira <akr@fsij.org>
-
- * configure.in: define linker for shared library on MirOS BSD.
-
-Thu Feb 7 21:09:23 2013 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * test/rubygems/test_gem_config_file.rb
- (TestGemConfigFile#test_check_credentials_permissions): skip on
- Windows. see [Bug #7784] [ruby-core:51864] and r39070.
-
-Thu Feb 7 20:52:40 2013 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (config.status): added variables which were
- missing at r39130.
-
-Thu Feb 7 15:33:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (MakeMakefile#merge_libs): insert following reversal
- ordered elements just after the duplicated element, not overwriting
- successive elements. [ruby-core:50314] [Bug #7467]
-
-Thu Feb 7 14:56:15 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/package.rb: Ensure digests are generated for signing.
- * test/rubygems/test_gem_package.rb: Test for the above.
-
- * lib/rubygems/security/policy.rb: Ensure digests are present when
- verifying a gem and match the number of signatures bidirectionally.
- * test/rubygems/test_gem_security_policy.rb: Test for the above.
-
- * lib/rubygems.rb: Documentation improvements (by zzak)
-
-Thu Feb 7 05:52:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * doc/pty/README: Remove static documentation file
- * ext/pty/pty.c: Add License to PTY module overview
-
-Thu Feb 7 02:31:10 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * vm_insnhelper.c: attr_writer should return its argument [Bug #7773]
-
- * test/ruby/test_basicinstructions.rb: Test for above
-
-Thu Feb 7 01:35:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * doc/security.rdoc: Link to japanese version of CVE page patch by
- nagachika
-
-Wed Feb 6 23:30:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * doc/pty/README.expect: Removed static documentation file
- * ext/pty/lib/expect.rb: Documentation for IO#expect
-
-Wed Feb 6 22:25:00 2013 Charlie Somerville <charlie@charliesomerville.com>
-
- * hash.c (env_reject_bang): hide keys array from ObjectSpace
- * hash.c (env_select_bang): ditto
-
-Wed Feb 6 17:33:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (multiarch): add option to move architecture dependent
- directories. [Feature #6111]
-
- * template/ruby.pc.in: add arch dependent paths.
-
- * configure.in (rubyarchhdrdir, sitearchhdrdir, vendorarchhdrdir): add
- options to customize architecture dependent header directories.
-
- * configure.in (rubyarchprefix, sitearchdir, vendorarchdir): add
- options to customize architecture dependent library directories.
-
- * template/ruby.pc.in, tool/mkconfig.rb, tool/rbinstall.rb: use
- configured values.
-
- * tool/mkconfig.rb: expand rubyarchdir to extract prefix.
-
- * configure.in (RUBY_VERSION_NAME), template/ruby.pc.in: add
- substitution and define.
-
- * configure.in, version.c: parametric architecture name for paths.
-
- * configure.in (shvar_to_cpp): convert sh variable references
- by replacing with string literal forms in cpp.
-
-Wed Feb 6 17:05:26 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Import RDoc 4.0.0.rc.2
-
-Mon Feb 4 02:22:49 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_process.rb (test_setsid): ensure to call
- Process.wait(). Reported by George Koehler. Thanks.
-
-Mon Feb 4 02:18:00 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_process.rb (test_setsid): skip when platform is
- OpenBSD. Contributed from George Koehler.
- [Bug #7789] [ruby-core:51889]
-
-Wed Feb 6 13:35:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (rb_method_entry_location, rb_{mod,obj}_method_location): new
- functions to obtain source location of method definition.
-
- * vm_method.c (rb_obj_respond_to): show the location of old style
- respond_to? method.
-
-Wed Feb 6 13:03:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * doc/security.rdoc: Add link to CVEs on ruby-lang.org/en/security
-
-Wed Feb 6 12:49:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * NEWS: Add note about removal of CSV::load and CSV::dump from r39077
-
-Wed Feb 6 05:57:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/racc/parser.rb: Hide copyright notice from Racc doc
-
-Wed Feb 6 05:50:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * doc/rubygems/*: Removed outdated documentation files
- * lib/rubygems/LICENSE.txt: Include license file
- * lib/rubygems.rb: Move Gem module documentation so rdoc can parse it
- and link to LICENSE.txt
- * lib/rubygems/*: Hide useless documentation from Gem module rdoc
-
-Wed Feb 6 03:45:19 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * doc/security.rdoc: Remove documentation for unsafe CSV.load which
- was deleted in r39077
-
-Wed Feb 6 03:27:19 2013 James Edward Gray II <james@graysoftinc.com>
-
- * lib/csv.rb: Remove the dangerous serialization feature.
-
-Wed Feb 6 00:56:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/irb.rb: Remove example from restrictions, it works [Github #246]
- Based on patch by Ryunosuke SATO
-
-Wed Feb 6 00:46:53 2013 Kazuki Tsujimoto <kazuki@callcc.net>
-
- * vm.c (rb_vm_stack_to_heap): call rb_vm_get_binding_creatable_next_cfp
- instead of rb_vm_get_ruby_level_next_cfp to prevent a segfault by
- calling Kernel#callcc. See r39067 for more details.
- [ruby-dev:46908] [ruby-trunk - Bug #7774]
-
- * test/ruby/test_settracefunc.rb: add a test.
-
-Tue Feb 5 18:48:00 2013 Charlie Somerville <charlie@charliesomerville.com>
-
- * doc/security.rdoc: add regex, eval and drb sections
-
-Tue Feb 5 17:24:02 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/servlet.rb: Fixed root search paths, filesystem paths
- instead of HTTP paths were returned.
- * test/rdoc/test_rdoc_servlet.rb: Test for above.
-
-Tue Feb 5 16:37:00 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/config_file.rb: Ignore permissions check on windows.
- Windows writes 0600 file as 0644 permissions making the check
- useless.
-
-Tue Feb 5 16:25:25 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_method.c (rb_obj_respond_to): drop optional include_all flag if
- respond_to? method is defined in old style. [Bug #7722]
-
-Tue Feb 05 15:04:34 2013 Koichi Sasada <ko1@atdot.net>
-
- * proc.c (rb_binding_new_with_cfp): permit to create binding object
- of IFUNC frame.
- When `rb_binding_new_with_cfp()' is called, VM finds out the first
- normal (has iseq) frame and create a binding object of this frame
- and create Env objects. `ep's of related frames are updated
- (`ep's point Env object managed spaces).
- However, `ep' of skipped IFUNC frame was not updated and
- old invalid `ep' was remained. It causes serious problems.
- To solve this issue, permit IFUNC to create binding.
- (Maybe there is no problem on it)
- [ruby-dev:46908] [ruby-trunk - Bug #7774]
-
- * test/ruby/test_settracefunc.rb: add a test.
-
- * vm.c (rb_vm_get_binding_creatable_next_cfp), vm_core.h: added.
-
- * vm_trace.c: fix to use `rb_vm_get_binding_creatable_next_cfp()'.
-
-Tue Feb 5 14:43:15 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Fix error message, patch by pypypy [Bug #7777]
-
-Tue Feb 5 14:36:04 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * numeric.c (fix_pow): Handle special cases when base is 0, -1 or +1
- [Bug #5713] [Bug #5715]
-
- * rational.c (nurat_expt): ditto
-
-Tue Feb 5 13:27:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/console/console.c (rawmode_opt): use default values by `stty
- raw`.
-
-Tue Feb 5 12:50:47 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * range.c: Use div instead of / for bsearch
-
- * test/ruby/test_range.rb: Test showing bug when requiring mathn
-
-Tue Feb 5 12:48:38 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * enumerator.c: Use to_enum for Enumerable methods returning
- Enumerators.
- This makes Lazy#cycle no longer needed, so it was removed.
- Make Enumerator#chunk and slice_before return lazy Enumerators.
- [Bug #7715]
-
- * internal.h: Remove ref to rb_enum_cycle_size; no longer needed
-
- * enum.c: Make enum_cycle_size static.
-
- * test/ruby/test_lazy_enumerator.rb: Test for above
-
-Tue Feb 5 12:48:10 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * enumerator.c: Finalize and document Lazy.new. [Bug #7248]
- Add Lazy#to_enum and simplify Lazy#size.
-
- * test/ruby/test_lazy_enumerator.rb: tests for above
-
-Tue Feb 5 11:35:35 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/commands/push_command.rb: Fixed credential download for
- `gem push --host`
- * lib/rubygems/gemcutter_utilities.rb: ditto.
- * test/rubygems/test_gem_commands_push_command.rb: Test for the above.
- * test/rubygems/test_gem_gemcutter_utilities.rb: ditto.
-
- * lib/rubygems/config_file.rb: Abort if the `gem push` credentials
- file has insecure permissions.
- * test/rubygems/test_gem_config_file.rb: Test for the above.
-
- * lib/rubygems/ext/builder.rb: Do not look for Gemfile, Isolate, etc.
- while building gem extensions.
-
- * lib/rubygems/package.rb: Unset spec and files list if a gem's
- signatures cannot be verified.
- * test/rubygems/test_gem_package.rb: Test for the above.
-
- * lib/rubygems/specification.rb: Reduce use of eval.
- * lib/rubygems/test_case.rb: ditto.
-
- * test/rubygems/test_gem_specification.rb: Test setting
- specification_version for legacy gems. Dup Gem.ruby before
- untainting in case it's frozen.
-
- * lib/rubygems.rb: Reduce use of eval. Only read files when looking
- for Gemfile, Isolate, etc.
- * test/rubygems/test_gem.rb: Test for the above.
-
-Tue Feb 5 10:15:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * doc/security.rdoc: Wrap security guide at 80 columns
-
-Tue Feb 5 10:15:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * doc/security.rdoc: Grammatical error on security guide
- Patch by Josh Bassett [Github fixes #245]
-
-Tue Feb 5 10:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/racc/parser.rb: Update #do_parse and #yyparse from upstream
- See [Github tenderlove/racc@7d954b5]
-
-Tue Feb 5 09:55:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/racc: Merge Racc documentation downstream, add grammar ref file
-
-Tue Feb 5 08:03:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/irb.rb, lib/irb/ext/save-history.rb: Add documentation on how to
- enabled irb history [ruby-core:51347] [Bug #7679]
-
-Tue Feb 5 07:35:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/irb.rb, lib/irb/context.rb: Add documentation on how to enable
- auto-indentation and autocompletion using irbrc and irb_context
- [ruby-core:51209] [Bug #7642] and [ruby-core:51348] [Bug #7680]
-
-Tue Feb 5 05:20:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * doc/standard_library.rdoc: Document list of libraries and extensions
- and their purpose or short description
- * lib/README: Remove lib/README in favor of doc/standard_library.rdoc
-
-Tue Feb 5 04:40:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * ext/json/lib/json.rb: Move module overview definition for rdoc
-
-Tue Feb 5 03:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/tracer.rb: Move class overview definition and reformat
-
-Mon Feb 4 15:10:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/console/console.c (rawmode_opt): initialize options for the
- case all options are not given.
-
-Mon Feb 4 12:44:13 2013 Koichi Sasada <ko1@atdot.net>
-
- * vm_dump.c (control_frame_dump): capitalize prefix of `ep'
- if `ep' points an env object.
-
-Mon Feb 4 04:20:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/English.rb: Add English module for RDoc to parse, then
- remove_const to avoid confusion. Include full list of aliases and
- their associated global variable.
-
-Mon Feb 4 02:40:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/yaml.rb (YAML::EngineManager): Documentation for #yamler and
- #yamler= for using the removed Syck gem as the YAML::ENGINE
-
-Sun Feb 3 16:54:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/io/console/io-console.gemspec: bump. [Bug #7762]
-
- * test/io/console/test_io_console.rb (test_stringio_getch): use more
- descriptive assertions.
-
- * ext/io/console/console.c (rawmode_opt): min is minimum characters,
- not tenths.
-
-Sun Feb 3 16:13:00 2013 Charlie Somerville <charlie@charliesomerville.com>
-
- * doc/security.rdoc: add first cut at a Ruby security document
-
-Sun Feb 3 10:25:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * random.c: Document range argument for Kernel#rand.
- [ruby-core:51794] [Bug #7770]
-
-Sun Feb 3 10:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * numeric.c: Document Float constants [ruby-core:51484] [Bug #7709]
-
-Sun Feb 3 09:38:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/profiler.rb (PROFILE_CALL_PROC, PROFILE_RETURN_PROC): add b_call
- and b_return to profile block calls.
-
- * lib/profiler.rb (PROFILE_CALL_PROC, PROFILE_RETURN_PROC): split
- PROFILE_PROC for call and return events.
-
-Sat Feb 2 14:32:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/minitest/mock.rb, lib/minitest/hell.rb: nodoc top-level module
-
-Sat Feb 2 14:05:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/debug.rb: Documentation for DEBUGGER__ class methods based on
- patch by Vincent Batts [ruby-core:51253]
-
-Sat Feb 2 13:37:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/net/smtp.rb: Fix rdoc title for Net::SMTP
-
-Sat Feb 2 13:32:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/net/pop.rb: Fix rdoc title for Net::POP3
-
-Sat Feb 2 13:00:11 2013 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/gserver.rb (GServer#start): fix a timing issue. patch from
- Charles Nutter. [Bug #7081]
-
-Sat Feb 2 12:36:54 2013 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/fileutils.rb (copy_entry, wrap_traverse): preserve attributes of
- directories on FileUtils.cp_r. The fix was proposed by Jan
- Wedekind. [Bug #7246]
-
- * test/fileutils/test_fileutils.rb: add a test for above.
-
-Sat Feb 2 12:30:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * lib/uri/ftp.rb (URI::FTP.new2): nodoc method from r39013 [Bug #7301]
-
-Sat Feb 2 12:15:36 2013 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/uri/ftp.rb (URI::FTP.new2): remove the rdoc because it is not
- well tested yet. [Bug #7301]
-
-Sat Feb 2 12:07:41 2013 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ChangeLog: Forgot to add a reference to the ChangeLog of the
- previous commit.
-
-Sat Feb 2 12:05:18 2013 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/fileutils.rb: chmod/chmod_R with a string mode (e.g., "+x")
- caused error in verbose mode. [Bug #7373]
-
- * test/fileutils/test_fileutils.rb: add a test for above.
-
-Sat Feb 2 11:44:42 2013 Yusuke Endoh <mame@tsg.ne.jp>
-
- * lib/English.rb: Remove some confusing words from rdoc. [Bug #7406]
-
-Sat Feb 2 10:17:12 2013 Kazuki Tsujimoto <kazuki@callcc.net>
-
- * NEWS: add keyword arguments.
-
-Sat Feb 2 07:45:44 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * proc.c (proc_curry): Fix arity check [Bug #5747]
-
- * test/ruby/test_proc.rb: Test for above
-
-Sat Feb 2 07:44:15 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * proc.c: Add {*}_min_max_arity and refactor.
- [Bug #7765]
-
- * test/ruby/test_proc.rb: Fix wrong test
-
-Fri Feb 2 00:46:00 2013 Charlie Somerville <charlie@charliesomerville.com>
-
- * marshal.c: add security considerations to marshal overview, refer to
- overview from Marshal.load documentation [#7759]
-
-Fri Feb 1 23:04:00 2013 Charlie Somerville <charlie@charliesomerville.com>
-
- * array.c (rb_ary_dup): make returned array the same class as the original
- array [Bug #7768] [ruby-core:51792]
- * test/ruby/test_array.rb (class TestArray): add test
-
-Fri Feb 1 16:35:34 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (r_object0): prohibit setting instance variables of
- existing class/module.
-
-Fri Feb 1 14:34:29 2013 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/readline/extconf.rb, ext/readline/readline.c: check
- RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE directly in
- readline.c. Patch by Zachary Scott. [Bug #7397] [ruby-core:49561]
-
-Thu Jan 31 21:55:00 2013 Charlie Somerville <charlie@charliesomerville.com>
-
- * marshal.c (marshal_load): Add documentation warning against using
- Marshal.load on untrusted data [Bug #7759] [ruby-core:51765]
-
-Thu Jan 31 16:33:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (local_push_gen): no assigned but unused variable warnings
- in eval as well as -e. [Feature #7730] [ruby-core:51580]
-
-Wed Jan 30 12:30:08 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_signal.rb (test_trap_puts): Fix typo. "sync"
- should be "STDOUT.sync".
-
-Thu Jan 31 15:39:00 2013 Zachary Scott <zachary@zacharyscott.net>
-
- * string.c (rb_str_aset_m): Documentation for String#[]= fix
- Raises an IndexError if Regexp match is out of range.
- Github fixes #243 Patch by Dmtiriy Budnik
-
-Thu Jan 31 13:54:44 2013 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/socket/raddrinfo.c (rsock_unix_sockaddr_len): return
- sizeof(sa_family_t) if path is empty. see "Autobind Feature" in
- unix(7) for details.
-
- * ext/socket/lib/socket.rb (unix_socket_abstract_name?): treat an
- empty path as an abstract name.
-
- * test/socket/test_unix.rb: related test.
-
-Wed Jan 30 20:58:50 2013 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/basicsocket.c (bsock_getsockname): ignore truncated
- part of socket address.
- (bsock_getpeername): ditto.
- (bsock_local_address): ditto.
- (bsock_remote_address): ditto.
-
- * ext/socket/unixsocket.c (unix_path): ditto.
- (unix_addr): ditto.
- (unix_peeraddr): ditto.
-
- * ext/socket/init.c (cloexec_accept): ditto.
-
-Wed Jan 30 17:08:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * include/ruby/win32.h (fstat): revert r37337, which uses _fstati64()
- instead of fstati64() on mingw32. [Bug #7276]
-
-Wed Jan 30 15:26:37 2013 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/socket/unixsocket.c (rsock_init_unixsock): use rb_inspect()
- because rb_sys_fail_str() fails if its argument contains NUL.
-
- * test/socket/test_unix.rb: related test.
-
-Wed Jan 30 15:21:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_dump.c (rb_vm_bugreport): show the most important message, Crash
- Report log information, first.
-
-Wed Jan 30 15:00:05 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * array.c (rb_ary_bsearch): Raise TypeError on bad return from block
-
- * range.c (range_bsearch): ditto
-
- * test/ruby/test_array.rb (class): Test for above
-
- * test/ruby/test_range.rb (class): ditto
-
-Wed Jan 30 14:46:28 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * range.c: Restrict bsearch to integers [#7728]
-
- * test/ruby/test_range.rb: Test for above
-
-Wed Jan 30 14:10:52 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * array.c (rb_ary_bsearch): Return enumerator if no block [#7725]
-
- * range.c (range_bsearch): ditto
-
- * test/ruby/test_array.rb: Test for above
-
- * test/ruby/test_range.rb: ditto
-
-Wed Jan 30 13:53:43 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Take conjugate for inner product
- [rubyspec:5a01ad5719f2] [ruby-dev:46101]
-
-Wed Jan 30 13:22:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (local_push_gen): warn assigned but unused variables also in
- toplevel, except for -e option. [Feature #7730] [ruby-core:51580]
-
-Wed Jan 30 13:17:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * cont.c (cont_restore_thread): svar should be separate per fibers.
- [ruby-core:51331] [Bug #7678]
-
-Wed Jan 30 07:15:04 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * re.c (reg_operand): Simplify and reuse error handling [Bug #7539]
-
- * test/ruby/test_regexp.rb: Test for above
-
-Wed Jan 30 07:00:16 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * object.c: Improve error for failed implicit conversions [Bug #7539]
-
- * error.c: Adapt rdoc
-
- * test/ruby/test_object.rb: Test for above
-
-Tue Jan 29 21:40:12 2013 Tanaka Akira <akr@fsij.org>
-
- * lib/net/http/generic_request.rb (encode_multipart_form_data): remove
- tempfile explicitly.
-
-Tue Jan 29 19:27:18 2013 Benoit Daloze <eregontp@gmail.com>
-
- * array.c: Improve documentation about
- comparison by hash for concerned methods. [ruby-core:51266]
-
-Tue Jan 29 17:03:28 2013 Koichi Sasada <ko1@atdot.net>
-
- * vm_backtrace.c: fix issue of rb_debug_inspector_open().
- The order of making binding should be stack (frame) top to bottom.
- [Bug #7635]
- And also fix issue of collecting klass. Collecting klass is same
- as TracePoint#defined_class.
- (previous version, it returns T_ICLASS (internal objects).
-
- * test/-ext-/debug/test_debug.rb: add a test.
-
- * ext/-test-/debug/extconf.rb, init.c, inspector.c: ditto.
-
- * vm_backtrace.c: remove magic number and add enum CALLER_BINDING_*.
-
- * vm_backtrace.c, include/ruby/debug.h: add new C api (experimental)
- rb_debug_inspector_frame_self_get().
-
- * vm.c, vm_core.h, vm_trace.c: move decl. of
- rb_vm_control_frame_id_and_class() and constify first parameter.
-
-Tue Jan 29 16:50:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_trace.c (rb_tracepoint_enable, rb_tracepoint_disable): check safe
- level as well as set_trace_func.
-
- * vm_trace.c (set_trace_func, thread_{add,set}_trace_func_m): check
- safe level as well as 1.8.
-
-Tue Jan 29 16:49:19 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (rb_mod_method_arity): return original arity of the method if
- aliased because of visibility change, like as Method#arity.
-
-Tue Jan 29 12:05:18 2013 Tanaka Akira <akr@fsij.org>
-
- * test/ruby/test_marshal.rb: remove temporally files early.
-
- * test/ruby/test_process.rb: ditto.
-
- * test/psych/test_exception.rb: ditto.
-
-Tue Jan 29 09:26:20 2013 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/socket/socket.c (sock_s_pack_sockaddr_un): calculate the
- correct address length of an abstract socket.
-
- * test/socket/test_unix.rb: related test.
-
-Mon Jan 28 18:02:16 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_backtrace.c (rb_debug_inspector_frame_{class,binding,iseq}_get):
- use long as index as well as RARRAY_LEN().
-
-Mon Jan 28 17:51:38 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * test/ruby/envutil.rb (assert_separately): imply no core dump.
-
-Mon Jan 28 12:32:31 2013 Tanaka Akira <akr@fsij.org>
-
- * ext/fcntl/fcntl.c: update document. use "file descriptor" instead
- of "file handle" because it is not used other Ruby documents and
- it is confusing with Windows file handle.
- correct F_DUPFD behavior.
-
-Sat Jan 26 22:39:12 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * marshal.c (w_object): dump instance variables of the result of
- marshal_dump not the original object. [ruby-core:51163] [Bug #7627]
-
- * complex.c (nucomp_marshal_dump): need to copy instance variables.
-
- * rational.c (nurat_marshal_dump): ditto.
-
-Sat Jan 26 13:35:56 2013 Eric Hodel <drbrain@segment7.net>
-
- * ext/fcntl/fcntl.c: Document Fcntl constants
-
-Sat Jan 26 12:54:40 2013 Eric Hodel <drbrain@segment7.net>
-
- * hash.c (rb_env_size): Restored documentation for ENV.size
-
- * lib/drb/drb.rb: Documented DRb::DRb#run.
-
- * lib/erb.rb (class ERB): Improved documentation of ERb.
-
- * transcode.c: Documented Encoding::Converter constants.
-
-Sat Jan 26 10:09:57 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/webrick/accesslog.rb: Improved WEBrick documentation.
- * lib/webrick/cgi.rb: ditto.
- * lib/webrick/config.rb: ditto.
- * lib/webrick/cookie.rb: ditto.
- * lib/webrick/httpauth/authenticator.rb: ditto.
- * lib/webrick/httpauth/basicauth.rb: ditto.
- * lib/webrick/httpauth/digestauth.rb: ditto.
- * lib/webrick/httpproxy.rb: ditto.
- * lib/webrick/httprequest.rb: ditto.
- * lib/webrick/httpresponse.rb: ditto.
- * lib/webrick/https.rb: ditto.
- * lib/webrick/httpserver.rb: ditto.
- * lib/webrick/httpservlet/cgihandler.rb: ditto.
- * lib/webrick/httpservlet/filehandler.rb: ditto.
- * lib/webrick/httpservlet/prochandler.rb: ditto.
- * lib/webrick/httputils.rb: ditto.
- * lib/webrick/httpversion.rb: ditto.
- * lib/webrick/log.rb: ditto.
- * lib/webrick/server.rb: ditto.
- * lib/webrick/ssl.rb: ditto.
- * lib/webrick/utils.rb: ditto.
- * lib/webrick/version.rb: ditto.
-
-Sat Jan 26 08:29:33 2013 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/socket/raddrinfo (rsock_unix_sockaddr_len): renamed from
- rsock_unixpath_len, because it returns not the length of the path,
- but the length of a socket address for the path.
-
-Sat Jan 26 01:12:23 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-
- * test/ruby/test_io.rb (test_ioctl_linux): skip if a platform is
- not x86 because linux ioctl request number depend on cpu arch.
- At least, alpha, mips, sparc and ppc have a different number.
- [Bug #7718] [ruby-core:51544]
-
-Fri Jan 25 19:14:24 2013 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * ext/win32ole/win32ole.c: use TlsAlloc instead of __declspec(thread)
- to avoid SEGV if win32ole.so loaded with LoadLibrary in Windows
- XP or earlier.
-
-Fri Jan 25 16:47:31 2013 Shugo Maeda <shugo@ruby-lang.org>
-
- * ext/socket/raddrinfo.c (rsock_unixpath_len, init_unix_addrinfo),
- ext/socket/unixsocket.c (unixsock_connect_internal,
- rsock_init_unixsock): calculate the correct address length of
- an abstract socket. Without this fix, sizeof(struct sockaddr_un)
- is specified as the length of an abstract socket for bind(2) or
- connect(2), so the address of the socket is filled with extra NUL
- characters. See unix(7) for details.
-
- * ext/socket/lib/socket.rb (unix_server_socket): don't access the
- file system if the platform is Linux and path starts with NUL,
- which means that the socket is an abstract socket.
-
- * test/socket/test_unix.rb: related test.
-
-Fri Jan 25 13:02:27 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/drb/drb.rb: Updated documentation based on patch from Vincent
- Batts. [ruby-trunk - Bug #7714]
- * lib/drb/ssl.rb: ditto.
-
-Fri Jan 25 12:23:29 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/drb/drb.rb: Improved documentation by adding or hiding methods.
- * lib/drb/eq.rb: ditto.
- * lib/drb/extserv.rb: ditto.
- * lib/drb/gw.rb: ditto.
- * lib/drb/invokemethod.rb: ditto.
- * lib/drb/observer.rb: ditto.
- * lib/drb/ssl.rb: ditto.
- * lib/drb/timeridconv.rb: ditto.
- * lib/drb/unix.rb: ditto.
-
- * sample/drb/gw_cu.rb: Fixed bug in DRb gateway sample.
-
-Fri Jan 25 12:01:56 2013 Koichi Sasada <ko1@atdot.net>
-
- * vm_core.h: modify a comment about rb_iseq_t::local_size.
- A patch by davidbalbert (David Albert) [Bug #6750]
-
-Fri Jan 25 10:36:31 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/mkmf.rb: Documented MakeMakefile constants. Hide implementation
- details from RDoc
-
-Fri Jan 25 10:04:07 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems/compatibility.rb: Hide compatibility shims from RDoc
-
- * lib/rubygems/config_file.rb: Hide RbConfig use from RDoc
-
- * lib/rubygems/test_case.rb: Added note to use realpath when 1.8
- support is dropped.
-
-Fri Jan 25 09:14:43 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/generator/darkfish.rb: Fixed debug message. RDoc bug #174
- by Thomas Leitner.
-
- * lib/rdoc/store.rb: Fixed deletion of ri attribute data when a class
- was loaded then saved. RDoc bug #171 by Thomas Leitner.
- * test/rdoc/test_rdoc_store.rb: Test for above.
-
-Thu Jan 24 19:55:25 2013 Shota Fukumori <her@sorah.jp>
-
- * NEWS (yaml): Write about bundled libyaml.
-
-Thu Jan 24 16:54:34 2013 Eric Hodel <drbrain@segment7.net>
-
- * doc/syntax/calling_methods.rdoc: Added a Method Lookup section.
- * doc/syntax/refinements.rdoc (Method Lookup): Clarified that
- refinement methods are looked up in classes, not instances.
-
-Thu Jan 24 16:49:17 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * enum.c (enum_zip): Fix error message
-
- * array.c (take_items): Same, for Array#zip
-
-Thu Jan 24 16:47:26 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * enumerator.c (lazy_zip): raise error for bad arguments
- [Bug #7706]
-
-Thu Jan 24 16:05:08 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * enumerator.c: Optimize Lazy#zip when passed only arrays
- [Bug #7706]
-
-Thu Jan 24 15:21:17 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * enumerator.c: Fix state handling for Lazy#zip,{drop_take}{_while}
- [bug #7696] [bug #7691]
-
-Thu Jan 24 11:43:47 2013 Narihiro Nakamura <authornari@gmail.com>
-
- * eval.c (f_current_dirname): Add documentation about "__dir__
- returns always an absolute path". [Bug #7729]
-
-Thu Jan 24 10:28:30 2013 Eric Hodel <drbrain@segment7.net>
-
- * NEWS (RDoc): Added mention of page support and markdown support.
-
-Thu Jan 24 09:40:13 2013 Eric Hodel <drbrain@segment7.net>
-
- * doc/syntax/refinements.rdoc: Added refinements document based on
- the specification from the wiki.
- * doc/syntax.rdoc: Added link to refinements document.
-
-Wed Jan 23 16:29:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_spawn, rb_w32_aspawn_flags): fix missing
- initialization. pointed out by phasis68 (Heesob Park) at
- [ruby-core:51579]. [Bug #7721]
-
-Wed Jan 23 16:18:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (MakeMakefile#try_constant): fix for large unsigned.
-
- * lib/mkmf.rb (MakeMakefile#try_constant): fix for larger constants.
-
- * test/mkmf/test_constant.rb: tests for try_constant.
- TODO: define check_constant and use it.
-
-Wed Jan 23 13:35:37 2013 Koichi Sasada <ko1@atdot.net>
-
- * thread_pthread.c (ruby_init_stack): ignore `STACK_END_ADDRESS'
- if Ruby interpreter is running on co-routine.
- [Feature #2294]
- https://bugs.ruby-lang.org/issues/2294#note-18
-
-Wed Jan 23 12:28:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * win32/win32.c (rb_w32_spawn, rb_w32_aspawn_flags): check the results
- of acp_to_wstr() which can return NULL. [ruby-core:51557] [Bug #7721]
-
-Wed Jan 23 10:40:49 2013 Eric Hodel <drbrain@segment7.net>
-
- * doc/syntax/assignment.rdoc (Implicit Array Assignment): Clarify
- that "left-hand side" means "of the assignment". Suggested by Jorge
- Dias.
- * doc/syntax/assignment.rdoc (Multiple Assignment): ditto.
-
-Wed Jan 23 10:34:47 2013 Eric Hodel <drbrain@segment7.net>
-
- * doc/syntax/assignment.rdoc (Local Variables and Methods): Fixed
- example showing caching of a method's results into a local variable.
- Added not about using an explicit receiver to call a method that
- matches a local variable. Suggested by markov_twain on twitter.
-
-Wed Jan 23 10:20:08 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/README: Fixed typo. Patch by Pradeep Sahoo.
- Fixes #240 on github
-
-Wed Jan 23 09:53:39 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc/servlet.rb: Fixed display of site and home documentation.
- Fixes rdoc issue #170 by Thomas Leitner.
- * test/rdoc/test_rdoc_servlet.rb: Test for above.
-
- * lib/rdoc/code_object.rb: Split #initialize_visibility from
- #initialize for reuse when loading a stored object.
- Fixes rdoc issue #171 by Thomas Leitner.
-
- * lib/rdoc/any_method.rb: Initialize visibility for #display? For
- rdoc issue #171
- * lib/rdoc/attr.rb: ditto.
- * lib/rdoc/class_module.rb: ditto.
- * lib/rdoc/top_level.rb: ditto.
- * test/rdoc/test_rdoc_any_method.rb: Test for above.
- * test/rdoc/test_rdoc_attr.rb: ditto.
- * test/rdoc/test_rdoc_class_module.rb: ditto.
- * test/rdoc/test_rdoc_constant.rb: ditto.
- * test/rdoc/test_rdoc_top_level.rb: ditto.